diff --git a/.eslintrc b/.eslintrc index 4aad61f..94be3a8 100644 --- a/.eslintrc +++ b/.eslintrc @@ -22,6 +22,7 @@ no-multiple-empty-lines: 2 no-nested-ternary: 2 no-path-concat: 2 + no-undef: 2 no-unused-vars: 2 object-curly-spacing: [2, "never"] quotes: [2, "single", "avoid-escape"] diff --git a/README.md b/README.md index 24f2339..2d53341 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,11 @@ -A library that simplifies [Swagger][swagger] integrations. +A library that simplifies [Swagger][swagger] integrations. This library handles the minutiae of loading Swagger +documents *(local and remote)*, resolving references *(local, remote)*, building an object model and providing you with +a rich set of APIs for things like Swagger document validation, request/response validation, etc. For more details on +the available APIs, please view the [API Documentation](https://github.com/apigee-127/sway/blob/master/docs/API.md). + +Sway will always be built around the latest stable release of Swagger, which happens to be version `2.0` right now. +This means that its APIs and object model will be specific to that version of Swagger and supporting any other versions +of Swagger will require a conversion step prior to using Sway. ## Project Badges @@ -33,8 +40,8 @@ bower install sway --save The standalone binaries come in two flavors: -* [sway-standalone.js](https://raw.github.com/apigee-127/sway/master/browser/sway.js): _4,400kb_, full source and source maps -* [sway-standalone-min.js](https://raw.github.com/apigee-127/sway/master/browser/sway-min.js): _636kb_, minified, compressed and no source map +* [sway-standalone.js](https://raw.github.com/apigee-127/sway/master/browser/sway.js): _4,484kb_, full source and source maps +* [sway-standalone-min.js](https://raw.github.com/apigee-127/sway/master/browser/sway-min.js): _644kb_, minified, compressed and no source map ### Node.js diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 5d98036..60376d1 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -15,6 +15,7 @@ * `Operation#getResponseExample` -> `Response#getExample` * `Operation#getResponseSample` -> `Response#getSample` * Removed callback support for `Sway#create` *(Issue 51)* +* Removed plugin support *(Issue #55)* * Updated invalid/missing JSON References to be a structural validation errors like z-schema does ### v0.6.0 (2015-11-25) diff --git a/bower.json b/bower.json index e94b370..dc39a02 100644 --- a/bower.json +++ b/bower.json @@ -24,10 +24,9 @@ "test" ], "dependencies": { - "js-yaml": "~3.4.6", - "json-refs": "~2.0.2", + "js-yaml": "~3.5.1", + "json-refs": "~2.0.3", "lodash": "~3.10.1", - "path-loader": "*", "visionmedia-debug": "~2.2.0", "z-schema": "~3.16.1", "js-base64": "~2.1.9" diff --git a/browser/sway-min.js b/browser/sway-min.js index 9a1b242..1daf723 100644 --- a/browser/sway-min.js +++ b/browser/sway-min.js @@ -1,12 +1,12 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.SwaggerApi=e()}}(function(){var e;return function t(e,a,i){function n(s,o){if(!a[s]){if(!e[s]){var c="function"==typeof require&&require;if(!o&&c)return c(s,!0);if(r)return r(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var m=a[s]={exports:{}};e[s][0].call(m.exports,function(t){var a=e[s][1][t];return n(a?a:t)},m,m.exports,t,e,a,i)}return a[s].exports}for(var r="function"==typeof require&&require,s=0;s0&&t.errors.push.apply(t.errors,i.errors),i.warnings.length>0&&t.warnings.push.apply(t.warnings,i.warnings)}var t={errors:[],warnings:[]},a=this;return e(this.plugin.getStructuralValidator()),0===t.errors.length&&(n.forEach(this.plugin.getSemanticValidators(),e),n.forEach(this.customValidators,e)),t},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{debug:20,url:173}],5:[function(e,t,a){(function(a){"use strict";function i(e,t,a,i,s,o,c){this.api=e,this.pathObject=t,this.method=a,this.ptr=i,this.definition=s,n.assign(this,s),this.consumes=o,this.produces=c,r("Found operation at %s",i),this.parameterObjects=e.plugin.getOperationParameters(this),this.responseObjects=e.plugin.getOperationResponses(this),this.securityDefinitions=n.reduce(s.security,function(t,a){return n.each(a,function(a,i){var r=e.resolved.securityDefinitions?e.resolved.securityDefinitions[i]:void 0;n.isUndefined(r)||(t[i]=r)}),t},{})}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("debug")("sway:operation"),s=e("../helpers");i.prototype.getParameter=function(e,t){return n.find(this.parameterObjects,function(a){return a.name===e&&(n.isUndefined(t)?!0:a["in"]===t)})},i.prototype.getParameters=function(){return this.parameterObjects},i.prototype.getResponse=function(e){return n.isUndefined(e)?e="default":n.isNumber(e)&&(e=e.toString()),n.find(this.getResponses(),function(t){return t.statusCode===e})},i.prototype.getResponses=function(){return this.responseObjects},i.prototype.validateRequest=function(e){var t={errors:[],warnings:[]};return["post","put"].indexOf(this.method)>-1&&s.validateContentType(e.headers["content-type"]||"application/octet-stream",this.consumes,t),n.each(this.getParameters(),function(a){var i,n=a.getValue(e);n.valid||(i={code:"INVALID_REQUEST_PARAMETER",errors:n.error.errors||[{code:n.error.code,message:n.error.message,path:n.error.path}],"in":n.parameterObject["in"],message:"Invalid parameter ("+a.name+"): "+((n.errors||[]).length>1?"Value failed JSON Schema validation":n.error.message),name:n.parameterObject.name,path:n.error.path},t.errors.push(i))}),t},i.prototype.validateResponse=function(e){var t={errors:[],warnings:[]},a=e?e.statusCode:"default",i=this.getResponse(a);return n.isUndefined(i)?(i=this.getResponse("default"),n.isUndefined(i)&&t.errors.push({code:"INVALID_RESPONSE_CODE",message:"This operation does not have a defined '"+("default"===a?a:a+"' or 'default")+"' response code",path:[]})):t=i.validateResponse(e),t},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../helpers":2,debug:20}],6:[function(e,t,a){(function(a){"use strict";function i(e,t){var a,i,o,c=e.pathObject.api.plugin,u=s.pathFromPtr(e.ptr),m=!1,f=e.computedSchema;this.parameterObject=e,this.raw=t,Object.defineProperties(this,{error:{enumerable:!0,get:function(){return this.valid===!0?void 0:a}},valid:{enumerable:!0,get:function(){var t,s,o={errors:[],warnings:[]},m=!1;if(n.isUndefined(i))if(i=!0,t=this.value,n.isUndefined(a))try{if(e.required===!0&&n.isUndefined(t))throw s=new Error("Value is required but was not provided"),s.code="REQUIRED",s;if(e.required===!1&&n.isUndefined(t)?m=!0:f.allowEmptyValue===!0&&""===t?m=!0:"file"===e.type?m=!0:"string"===f.type&&(["date","date-time"].indexOf(f.format)>-1&&n.isDate(t)?m=!0:"string"===f.type&&n.isFunction(t.readUInt8)&&(m=!0)),m||(o=r.validateAgainstSchema(c.getJSONSchemaValidator(),e.getSchema(),t)),o.errors.length>0)throw s=new Error("Value failed JSON Schema validation"),s.code="SCHEMA_VALIDATION_FAILED",s.errors=o.errors,s}catch(p){p.failedValidation=!0,p.path=u,a=p,i=!1}else i=!1;return i}},value:{enumerable:!0,get:function(){if(!m){if("file"===f.type)o=t;else{try{o=c.convertValue(f,{collectionFormat:e.collectionFormat},t)}catch(i){a=i}n.isUndefined(o)&&n.isUndefined(a)&&("array"===f.type?n.isArray(f.items)?(o=n.reduce(f.items,function(e,t){return e.push(t["default"]),e},[]),n.all(o,n.isUndefined)&&(o=void 0)):n.isUndefined(f.items)||n.isUndefined(f.items["default"])||(o=[f.items["default"]]):n.isUndefined(f["default"])||(o=f["default"]))}m=!0}return o}}})}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("../helpers"),s="undefined"!=typeof window?window.JsonRefs:"undefined"!=typeof a?a.JsonRefs:null;t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../helpers":2}],7:[function(e,t,a){(function(a){"use strict";function i(e,t,a,i){this.computedSchema=i,this.definition=a,this.ptr=t,e instanceof s?(this.operationObject=e,this.pathObject=e.pathObject):(this.operationObject=void 0,this.pathObject=e),n.assign(this,a),r("Found %s parameter (%s in %s) at %s",n.isUndefined(this.operationObject)?"path-level":"operation",a.name,a["in"],t)}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("debug")("sway:parameter"),s=e("./operation"),o=e("./parameter-value"),c=e("url").parse;i.prototype.getSchema=function(){return this.computedSchema},i.prototype.getSample=function(){return this.pathObject.api.plugin.getSample(this.computedSchema)},i.prototype.getValue=function(e){var t=(this.operationObject||this.pathObject).api;if(n.isUndefined(e))throw new TypeError("req is required");if(-1===t.plugin.parameterLocations.indexOf(this["in"]))throw new Error("Invalid 'in' value: "+this["in"]);var a,i,r=this,s=this.computedSchema.type||"object";switch(this["in"]){case"body":i=e.body;break;case"formData":if("file"===s){if(n.isUndefined(e.files))throw new Error("req.files must be provided for 'formData' parameters of type 'file'");i=e.files[this.name]}else{if(n.isUndefined(e.body))throw new Error("req.body must be provided for 'formData' parameters");i=e.body[this.name]}break;case"header":if(n.isUndefined(e.headers))throw new Error("req.headers must be provided for 'header' parameters");i=e.headers[this.name.toLowerCase()];break;case"path":if(n.isUndefined(e.url))throw new Error("req.url must be provided for 'path' parameters");a=this.pathObject.regexp.exec(c(decodeURIComponent(e.url)).pathname),a&&(i=a[n.findIndex(this.pathObject.regexp.keys,function(e){return e.name===r.name})+1]);break;case"query":if(n.isUndefined(e.query))throw new Error("req.query must be provided for 'query' parameters");i=n.get(e.query,this.name)}return new o(this,i)},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./operation":5,"./parameter-value":6,debug:20,url:173}],8:[function(e,t,a){(function(a){"use strict";function i(e,t,a,i,s){this.api=e,this.path=t,this.ptr=a,this.definition=i,this.regexp=s,n.assign(this,i),r("Found path at %s",a),this.parameterObjects=e.plugin.getPathParameters(this),this.operationObjects=e.plugin.getOperations(this)}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("debug")("sway:path");i.prototype.getOperation=function(e){return n.find(this.operationObjects,function(t){return t.method===e})},i.prototype.getOperations=function(){return this.operationObjects},i.prototype.getOperationsByTag=function(e){return n.filter(this.operationObjects,function(t){return n.contains(t.tags,e)})},i.prototype.getParameters=function(){return this.parameterObjects},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{debug:20}],9:[function(e,t,a){(function(a){"use strict";function i(e,t,a,i){this.definition=a,this.operationObject=e,this.ptr=t,this.statusCode=i,r.assign(this,a),s("Found %s response at %s",i,t),n=e.api.plugin.getJSONSchemaValidator()}var n,r="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,s=e("debug")("sway:response"),o=e("../helpers"),c="undefined"!=typeof window?window.jsyaml:"undefined"!=typeof a?a.jsyaml:null;i.prototype.getExample=function(e){var t;return r.isPlainObject(this.definition.examples)&&(t=this.definition.examples[e]),r.isUndefined(t)||r.isString(t)||("application/json"===e?t=JSON.stringify(t,null,2):"application/x-yaml"===e&&(t=c.safeDump(t,{indent:2}))),t},i.prototype.getSample=function(){var e;return r.isUndefined(this.definition.schema)||(e=this.operationObject.api.plugin.getSample(this.definition.schema)),e},i.prototype.validateResponse=function(e){var t,a,i={errors:[],warnings:[]},s=this;if(r.isUndefined(e)&&(e={}),r.isUndefined(e.headers)&&(e.headers={}),r.isUndefined(this.definition.schema)||-1!==r.indexOf(["204","304"],this.statusCode)||o.validateContentType(e.headers["content-type"],this.operationObject.produces,i),r.forEach(this.headers,function(t,a){var c,u;try{c=s.operationObject.api.plugin.convertValue(t,{collectionFormat:t.collectionFormat},e.headers[a.toLowerCase()]||e.headers[a]||t["default"])}catch(m){i.errors.push({code:"INVALID_RESPONSE_HEADER",errors:m.errors||[{code:m.code,message:m.message,path:m.path}],message:"Invalid header ("+a+"): "+m.message,name:a,path:m.path})}r.isUndefined(c)||r.isDate(c)||(u=o.validateAgainstSchema(n,t,c),u.errors.length>0&&i.errors.push({code:"INVALID_RESPONSE_HEADER",errors:u.errors,message:"Invalid header ("+a+"): "+(u.errors.length>1?"Value failed JSON Schema validation":u.errors[0].message),name:a,path:[]}))}),!r.isUndefined(this.definition.schema)&&-1===r.indexOf(["204","304"],this.statusCode)){try{t=s.operationObject.api.plugin.convertValue(this.definition.schema,{encoding:e.encoding},e.body),a=o.validateAgainstSchema(n,this.definition.schema,t)}catch(c){a={errors:[{code:c.code,message:c.message,path:c.path}]}}a.errors.length>0&&i.errors.push({code:"INVALID_RESPONSE_BODY",errors:a.errors,message:"Invalid body: "+(a.errors.length>1?"Value failed JSON Schema validation":a.errors[0].message),path:[]})}return i},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../helpers":2,debug:20}],10:[function(e,t,a){(function(a){"use strict";function i(e){var t=n.cloneDeep(e);return delete t.format,t}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("js-base64").Base64,s=e("json-schema-faker/lib/types/string");t.exports["byte"]=function(e,t){return r.encode(s(i(t)))},t.exports.password=function(e,t){return s(i(t))}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"js-base64":136,"json-schema-faker/lib/types/string":144}],11:[function(e,t,a){(function(e){"use strict";function a(){return!0}var i="undefined"!=typeof window?window._:"undefined"!=typeof e?e._:null;t.exports.int32=t.exports.int64=function(e){return i.isNumber(e)&&e%1===0},t.exports["byte"]=a,t.exports["double"]=a,t.exports["float"]=a,t.exports.password=a}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],12:[function(e,t,a){(function(e){"use strict";var a="undefined"!=typeof window?window._:"undefined"!=typeof e?e._:null,i=["allowEmptyValue","default","description","enum","exclusiveMaximum","exclusiveMinimum","format","items","maxItems","maxLength","maximum","minItems","minLength","minimum","multipleOf","pattern","type","uniqueItems"];t.exports.getParameterSchema=function(e){var t;return a.isUndefined(e.schema)?(t={},a.forEach(i,function(i){a.isUndefined(e[i])||(t[i]=e[i])})):t=e.schema,t},t.exports.supportedHttpMethods=["get","put","post","delete","options","head","patch"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],13:[function(e,t,a){(function(a){"use strict";function i(e,t,a){var n,s=a,o=r.isPlainObject(e)?e.type:void 0,c=a,u=typeof c;if(r.has(e,"type")&&-1===x.indexOf(o))throw new TypeError("Invalid 'type' value: "+o);if(r.isUndefined(o))return a;if(r.isUndefined(a))return a;if(r.isFunction(a.readUInt8)&&(a=a.toString(t.encoding),c=a,u=typeof a),e.allowEmptyValue&&""===a)return a;if(["array","object"].indexOf(o)>-1)try{a=JSON.parse(a)}catch(n){}switch(o){case"array":if(r.isString(a)){if(-1===b.indexOf(t.collectionFormat))throw new TypeError("Invalid 'collectionFormat' value: "+t.collectionFormat);switch(t.collectionFormat){case"csv":case void 0:a=a.split(",");break;case"multi":a=[a];break;case"pipes":a=a.split("|");break;case"ssv":a=a.split(" ");break;case"tsv":a=a.split(" ")}}r.isArray(a)&&(a=r.map(a,function(a,n){return i(r.isArray(e.items)?e.items[n]:e.items,t,a)}));break;case"boolean":r.isBoolean(a)||("true"===a?a=!0:"false"===a?a=!1:n=new TypeError("Not a valid boolean: "+a));break;case"integer":r.isNumber(a)||(r.isString(a)&&0===r.trim(a).length&&(a=NaN),a=Number(a),r.isNaN(a)&&(n=new TypeError("Not a valid integer: "+s)));break;case"number":r.isNumber(a)||(r.isString(a)&&0===r.trim(a).length&&(a=NaN),a=Number(a),r.isNaN(a)&&(n=new TypeError("Not a valid number: "+s)));break;case"string":["date","date-time"].indexOf(e.format)>-1?(r.isString(a)&&(a=new Date(a)),r.isDate(a)&&"Invalid Date"!==a.toString()||(n=new TypeError("Not a valid "+e.format+" string: "+s),n.code="INVALID_FORMAT")):r.isString(a)||(n=new TypeError("Not a valid string: "+a))}if(!r.isUndefined(n))throw r.isUndefined(n.code)?(n.code="INVALID_TYPE",n.message="Expected type "+o+" but found type "+u):n.message="Object didn't pass validation for format "+e.format+": "+c,n.failedValidation=!0,n.path=[],n;return a}function n(e){function t(a,i,n){function s(e,i){n.push(i),t(a,e,n),n.pop()}-1===a.indexOf(i)?(a.push(i),(r.isArray(i)||r.isPlainObject(i))&&r.each(i,function(e,t){s(e,t.toString())})):r.set(e,n,{}),a.pop()}t([],e,[])}var r="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,s=e("path").dirname,o=e("./format-generators"),c=e("../../helpers"),u="undefined"!=typeof window?window.JsonRefs:"undefined"!=typeof a?a.JsonRefs:null,m=e("../../types/operation"),f=e("../../types/parameter"),p=e("../../types/path"),l=e("path-to-regexp"),h=e("../../types/response"),d=e("../../types/api"),g=e("./validators"),w=e("./helpers"),y="undefined"!=typeof window?window.jsyaml:"undefined"!=typeof a?a.jsyaml:null,b=[void 0,"csv","multi","pipes","ssv","tsv"],v=e("./format-validators"),j="https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md",z=c.createJSONValidator({formatValidators:v}),E=c.createJSONSchemaMocker({formatGenerators:o}),A=["body","formData","header","path","query"],x=["array","boolean","integer","object","number","string"],S="2.0";t.exports.collectionFormats=b,t.exports.documentation=j,t.exports.parameterLocations=A,t.exports.supportedHttpMethods=w.supportedHttpMethods,t.exports.types=x,t.exports.version=S,t.exports.canProcess=function(e){return e.swagger===S},t.exports.convertValue=function(e,t,a){return i(e,t,a)},t.exports.createSwaggerApi=function(e,a){var i=r.cloneDeep(a),o=i.jsonRefs||{};return o.includeInvalid=!0,r.isString(i.definition)&&(o.relativeBase=s(i.definition)),r.isUndefined(o.loaderOptions)&&(o.loaderOptions={}),r.isUndefined(o.loaderOptions.processContent)&&(o.loaderOptions.processContent=function(e,t){t(void 0,y.safeLoad(e.text))}),u.resolveRefs(e,o).then(function(i){return n(i.resolved),new d(t.exports,e,i.resolved,i.refs,a)})},t.exports.getJSONSchemaValidator=function(){return z},t.exports.getOperations=function(e){var t=[],a=u.pathFromPtr(e.ptr),i=r.reduce(e.definition.parameters,function(e,t,i){return e[t.name+":"+t["in"]]={path:a.concat(["parameters",i.toString()]),definition:t},e},{});return r.forEach(e.definition,function(n,s){if(-1!==r.indexOf(w.supportedHttpMethods,s)){var o=r.cloneDeep(n),c={},f=a.concat(s);r.forEach(i,function(e,t){c[t]=e}),r.forEach(n.parameters,function(e,t){c[e.name+":"+e["in"]]={path:f.concat(["parameters",t.toString()]),definition:e}}),o.parameters=r.map(r.values(c),function(e){return e.definition.$$$ptr$$$=u.pathToPtr(e.path),e.definition}),r.isUndefined(o.security)&&(o.security=e.api.resolved.security),t.push(new m(e.api,e,s,u.pathToPtr(f),o,o.consumes||e.api.resolved.consumes||[],o.produces||e.api.resolved.produces||[]))}}),t},t.exports.getOperationParameters=function(e){var t=r.reduce(e.pathObject.getParameters(),function(e,t){return e[t.ptr]=t,e},{});return r.map(e.parameters,function(a){var i=a.$$$ptr$$$,n=t[i];return delete a.$$$ptr$$$,r.isUndefined(n)?new f(e,i,a,w.getParameterSchema(a)):n})},t.exports.getOperationResponses=function(e){return r.map(e.definition.responses,function(t,a){return new h(e,u.pathToPtr(u.pathFromPtr(e.ptr).concat(["responses",a])),t,a)})},t.exports.getPathParameters=function(e){return r.map(e.definition.parameters,function(t,a){return new f(e,u.pathToPtr(u.pathFromPtr(e.ptr).concat(a.toString())),t,w.getParameterSchema(t))})},t.exports.getPaths=function(e){var t=e.resolved.basePath||"/";return"/"===t.charAt(t.length-1)&&(t=t.substring(0,t.length-1)),r.map(e.resolved.paths,function(a,i){return new p(e,i,u.pathToPtr(["paths",i]),a,l(t+i.replace(/\{/g,":").replace(/\}/g,"")))})},t.exports.getSample=function(e){return E(e)},t.exports.getSemanticValidators=function(){return g.semanticValidators},t.exports.getStructuralValidator=function(){return g.jsonSchemaValidator}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../helpers":2,"../../types/api":4,"../../types/operation":5,"../../types/parameter":7,"../../types/path":8,"../../types/response":9,"./format-generators":10,"./format-validators":11,"./helpers":12,"./validators":15,path:160,"path-to-regexp":161}],14:[function(e,t,a){t.exports={title:"A JSON Schema for Swagger 2.0 API.",id:"http://swagger.io/v2/schema.json#",$schema:"http://json-schema.org/draft-04/schema#",type:"object",required:["swagger","info","paths"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{swagger:{type:"string","enum":["2.0"],description:"The Swagger version of this document."},info:{$ref:"#/definitions/info"},host:{type:"string",pattern:"^[^{}/ :\\\\]+(?::\\d+)?$",description:"The host (name or ip) of the API. Example: 'swagger.io'"},basePath:{type:"string",pattern:"^/",description:"The base path to the API. Example: '/api'."},schemes:{$ref:"#/definitions/schemesList"},consumes:{description:"A list of MIME types accepted by the API.",$ref:"#/definitions/mediaTypeList"},produces:{description:"A list of MIME types the API can produce.",$ref:"#/definitions/mediaTypeList"},paths:{$ref:"#/definitions/paths"},definitions:{$ref:"#/definitions/definitions"},parameters:{$ref:"#/definitions/parameterDefinitions"},responses:{$ref:"#/definitions/responseDefinitions"},security:{$ref:"#/definitions/security"},securityDefinitions:{$ref:"#/definitions/securityDefinitions"},tags:{type:"array",items:{$ref:"#/definitions/tag"},uniqueItems:!0},externalDocs:{$ref:"#/definitions/externalDocs"}},definitions:{info:{type:"object",description:"General information about the API.",required:["version","title"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{title:{type:"string",description:"A unique and precise title of the API."},version:{type:"string",description:"A semantic version number of the API."},description:{type:"string",description:"A longer description of the API. Should be different from the title. GitHub Flavored Markdown is allowed."},termsOfService:{type:"string",description:"The terms of service for the API."},contact:{$ref:"#/definitions/contact"},license:{$ref:"#/definitions/license"}}},contact:{type:"object",description:"Contact information for the owners of the API.",additionalProperties:!1,properties:{name:{type:"string",description:"The identifying name of the contact person/organization."},url:{type:"string",description:"The URL pointing to the contact information.",format:"uri"},email:{type:"string",description:"The email address of the contact person/organization.",format:"email"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},license:{type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"The name of the license type. It's encouraged to use an OSI compatible license."},url:{type:"string",description:"The URL pointing to the license.",format:"uri"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},paths:{type:"object",description:"Relative paths to the individual endpoints. They must be relative to the 'basePath'.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"},"^/":{$ref:"#/definitions/pathItem"}},additionalProperties:!1},definitions:{type:"object",additionalProperties:{$ref:"#/definitions/schema"},description:"One or more JSON objects describing the schemas being consumed and produced by the API."},parameterDefinitions:{type:"object",additionalProperties:{$ref:"#/definitions/parameter"},description:"One or more JSON representations for parameters"},responseDefinitions:{type:"object",additionalProperties:{$ref:"#/definitions/response"},description:"One or more JSON representations for parameters"},externalDocs:{type:"object",additionalProperties:!1,description:"information about external documentation",required:["url"],properties:{description:{type:"string"},url:{type:"string",format:"uri"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},examples:{type:"object",additionalProperties:!0},mimeType:{type:"string",description:"The MIME type of the HTTP message."},operation:{type:"object",required:["responses"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{tags:{type:"array",items:{type:"string"},uniqueItems:!0},summary:{type:"string",description:"A brief summary of the operation."},description:{type:"string",description:"A longer description of the operation, GitHub Flavored Markdown is allowed."},externalDocs:{$ref:"#/definitions/externalDocs"},operationId:{type:"string",description:"A unique identifier of the operation."},produces:{description:"A list of MIME types the API can produce.",$ref:"#/definitions/mediaTypeList"},consumes:{description:"A list of MIME types the API can consume.",$ref:"#/definitions/mediaTypeList"},parameters:{$ref:"#/definitions/parametersList"},responses:{$ref:"#/definitions/responses"},schemes:{$ref:"#/definitions/schemesList"},deprecated:{type:"boolean","default":!1},security:{$ref:"#/definitions/security"}}},pathItem:{type:"object",additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{$ref:{type:"string"},get:{$ref:"#/definitions/operation"},put:{$ref:"#/definitions/operation"},post:{$ref:"#/definitions/operation"},"delete":{$ref:"#/definitions/operation"},options:{$ref:"#/definitions/operation"},head:{$ref:"#/definitions/operation"},patch:{$ref:"#/definitions/operation"},parameters:{$ref:"#/definitions/parametersList"}}},responses:{type:"object",description:"Response objects names can either be any valid HTTP status code or 'default'.",minProperties:1,additionalProperties:!1,patternProperties:{"^([0-9]{3})$|^(default)$":{$ref:"#/definitions/responseValue"},"^x-":{$ref:"#/definitions/vendorExtension"}},not:{type:"object",additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}}},responseValue:{oneOf:[{$ref:"#/definitions/response"},{$ref:"#/definitions/jsonReference"}]},response:{type:"object",required:["description"],properties:{description:{type:"string"},schema:{oneOf:[{$ref:"#/definitions/schema"},{$ref:"#/definitions/fileSchema"}]},headers:{$ref:"#/definitions/headers"},examples:{$ref:"#/definitions/examples"}},additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},headers:{type:"object",additionalProperties:{$ref:"#/definitions/header"}},header:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{type:"string","enum":["string","number","integer","boolean","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems" -},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},vendorExtension:{description:"Any property starting with x- is valid.",additionalProperties:!0,additionalItems:!0},bodyParameter:{type:"object",required:["name","in","schema"],patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},"in":{type:"string",description:"Determines the location of the parameter.","enum":["body"]},required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},schema:{$ref:"#/definitions/schema"}},additionalProperties:!1},headerParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["header"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},queryParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["query"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},allowEmptyValue:{type:"boolean","default":!1,description:"allows sending a parameter by name only or with an empty value."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormatWithMulti"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},formDataParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["formData"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},allowEmptyValue:{type:"boolean","default":!1,description:"allows sending a parameter by name only or with an empty value."},type:{type:"string","enum":["string","number","boolean","integer","array","file"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormatWithMulti"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},pathParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},required:["required"],properties:{required:{type:"boolean","enum":[!0],description:"Determines whether or not this parameter is required or optional."},"in":{type:"string",description:"Determines the location of the parameter.","enum":["path"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},nonBodyParameter:{type:"object",required:["name","in","type"],oneOf:[{$ref:"#/definitions/headerParameterSubSchema"},{$ref:"#/definitions/formDataParameterSubSchema"},{$ref:"#/definitions/queryParameterSubSchema"},{$ref:"#/definitions/pathParameterSubSchema"}]},parameter:{oneOf:[{$ref:"#/definitions/bodyParameter"},{$ref:"#/definitions/nonBodyParameter"}]},schema:{type:"object",description:"A deterministic version of a JSON Schema object.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{$ref:{type:"string"},format:{type:"string"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},multipleOf:{$ref:"http://json-schema.org/draft-04/schema#/properties/multipleOf"},maximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/maximum"},exclusiveMaximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"},minimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/minimum"},exclusiveMinimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"},maxLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},pattern:{$ref:"http://json-schema.org/draft-04/schema#/properties/pattern"},maxItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},uniqueItems:{$ref:"http://json-schema.org/draft-04/schema#/properties/uniqueItems"},maxProperties:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minProperties:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},required:{$ref:"http://json-schema.org/draft-04/schema#/definitions/stringArray"},"enum":{$ref:"http://json-schema.org/draft-04/schema#/properties/enum"},additionalProperties:{anyOf:[{$ref:"#/definitions/schema"},{type:"boolean"}],"default":{}},type:{$ref:"http://json-schema.org/draft-04/schema#/properties/type"},items:{anyOf:[{$ref:"#/definitions/schema"},{type:"array",minItems:1,items:{$ref:"#/definitions/schema"}}],"default":{}},allOf:{type:"array",minItems:1,items:{$ref:"#/definitions/schema"}},properties:{type:"object",additionalProperties:{$ref:"#/definitions/schema"},"default":{}},discriminator:{type:"string"},readOnly:{type:"boolean","default":!1},xml:{$ref:"#/definitions/xml"},externalDocs:{$ref:"#/definitions/externalDocs"},example:{}},additionalProperties:!1},fileSchema:{type:"object",description:"A deterministic version of a JSON Schema object.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},required:["type"],properties:{format:{type:"string"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},required:{$ref:"http://json-schema.org/draft-04/schema#/definitions/stringArray"},type:{type:"string","enum":["file"]},readOnly:{type:"boolean","default":!1},externalDocs:{$ref:"#/definitions/externalDocs"},example:{}},additionalProperties:!1},primitivesItems:{type:"object",additionalProperties:!1,properties:{type:{type:"string","enum":["string","number","integer","boolean","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},security:{type:"array",items:{$ref:"#/definitions/securityRequirement"},uniqueItems:!0},securityRequirement:{type:"object",additionalProperties:{type:"array",items:{type:"string"},uniqueItems:!0}},xml:{type:"object",additionalProperties:!1,properties:{name:{type:"string"},namespace:{type:"string"},prefix:{type:"string"},attribute:{type:"boolean","default":!1},wrapped:{type:"boolean","default":!1}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},tag:{type:"object",additionalProperties:!1,required:["name"],properties:{name:{type:"string"},description:{type:"string"},externalDocs:{$ref:"#/definitions/externalDocs"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},securityDefinitions:{type:"object",additionalProperties:{oneOf:[{$ref:"#/definitions/basicAuthenticationSecurity"},{$ref:"#/definitions/apiKeySecurity"},{$ref:"#/definitions/oauth2ImplicitSecurity"},{$ref:"#/definitions/oauth2PasswordSecurity"},{$ref:"#/definitions/oauth2ApplicationSecurity"},{$ref:"#/definitions/oauth2AccessCodeSecurity"}]}},basicAuthenticationSecurity:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{type:"string","enum":["basic"]},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},apiKeySecurity:{type:"object",additionalProperties:!1,required:["type","name","in"],properties:{type:{type:"string","enum":["apiKey"]},name:{type:"string"},"in":{type:"string","enum":["header","query"]},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2ImplicitSecurity:{type:"object",additionalProperties:!1,required:["type","flow","authorizationUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["implicit"]},scopes:{$ref:"#/definitions/oauth2Scopes"},authorizationUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2PasswordSecurity:{type:"object",additionalProperties:!1,required:["type","flow","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["password"]},scopes:{$ref:"#/definitions/oauth2Scopes"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2ApplicationSecurity:{type:"object",additionalProperties:!1,required:["type","flow","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["application"]},scopes:{$ref:"#/definitions/oauth2Scopes"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2AccessCodeSecurity:{type:"object",additionalProperties:!1,required:["type","flow","authorizationUrl","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["accessCode"]},scopes:{$ref:"#/definitions/oauth2Scopes"},authorizationUrl:{type:"string",format:"uri"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2Scopes:{type:"object",additionalProperties:{type:"string"}},mediaTypeList:{type:"array",items:{$ref:"#/definitions/mimeType"},uniqueItems:!0},parametersList:{type:"array",description:"The parameters needed to send a valid API call.",additionalItems:!1,items:{oneOf:[{$ref:"#/definitions/parameter"},{$ref:"#/definitions/jsonReference"}]},uniqueItems:!0},schemesList:{type:"array",description:"The transfer protocol of the API.",items:{type:"string","enum":["http","https","ws","wss"]},uniqueItems:!0},collectionFormat:{type:"string","enum":["csv","ssv","tsv","pipes"],"default":"csv"},collectionFormatWithMulti:{type:"string","enum":["csv","ssv","tsv","pipes","multi"],"default":"csv"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},multipleOf:{$ref:"http://json-schema.org/draft-04/schema#/properties/multipleOf"},maximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/maximum"},exclusiveMaximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"},minimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/minimum"},exclusiveMinimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"},maxLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},pattern:{$ref:"http://json-schema.org/draft-04/schema#/properties/pattern"},maxItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},uniqueItems:{$ref:"http://json-schema.org/draft-04/schema#/properties/uniqueItems"},"enum":{$ref:"http://json-schema.org/draft-04/schema#/properties/enum"},jsonReference:{type:"object",required:["$ref"],additionalProperties:!1,properties:{$ref:{type:"string"}}}}}},{}],15:[function(e,t,a){(function(a){"use strict";function i(e){var t=p.keys(e.properties);return p.forEach(e.allOf,function(e){p.forEach(i(e),function(e){-1===p.indexOf(t,e)&&t.push(e)})}),t}function n(e,t,a,i,r,s){function o(e){return p.indexOf(t,h.pathToPtr(e))>-1}function c(a,i){o(i)||p.forEach(a,function(a,o){p.isNumber(o)&&(o=o.toString()),n(e,t,a,i.concat(o),r,s)})}var u=a.type||"object";o(i)||(p.isUndefined(a.schema)?"array"!==u||p.isUndefined(a.items)?"object"===u&&(p.isUndefined(a.additionalProperties)||n(e,t,a.additionalProperties,i.concat("additionalProperties"),r,s),p.forEach(["allOf","properties"],function(e){p.isUndefined(a[e])||c(a[e],i.concat(e))})):p.isArray(a.items)?c(a.items,i.concat("items")):n(e,t,a.items,i.concat("items"),r,s):n(e,t,a.schema,i.concat("schema"),r,s),p.forEach(r,function(t){t(e,s,a,i)}))}function r(e){var t=l.validateAgainstSchema(e.plugin.getJSONSchemaValidator(),d,e.resolved);return t.errors=t.errors.map(function(e){var t=["additionalProperties","items"].indexOf(e.path[e.path.length-1])>-1?"schema":e.path[e.path.length-2];if(["ANY_OF_MISSING","ONE_OF_MISSING"].indexOf(e.code)>-1){switch(t){case"parameters":t="parameter";break;case"responses":t="response";break;case"schema":t+=" "+e.path[e.path.length-1]}e.message="Not a valid "+t+" definition"}return e}),p.each(e.references,function(e,a){var i,n=h.pathFromPtr(a);e.missing?(i={code:"UNRESOLVABLE_REFERENCE",message:"Reference could not be resolved: "+e.uri,path:n.concat("$ref")},p.has(e,"error")&&(i.error=e.error),t.errors.push(i)):"invalid"===e.type&&t.errors.push({code:"INVALID_REFERENCE",message:e.error||"Invalid JSON Reference",path:n.concat("$ref")})}),t}function s(e,t,a,i){"array"===a.type&&p.isUndefined(a.items)&&t.errors.push({code:"OBJECT_MISSING_REQUIRED_PROPERTY",message:"Missing required property: items",path:i})}function o(e,t,a,i){var n;p.isUndefined(a["default"])||(n=l.validateAgainstSchema(e.plugin.getJSONSchemaValidator(),a,a["default"]),p.forEach(n.errors,function(e){e.path=i.concat(e.path.concat("default")),t.errors.push(e)}),p.forEach(n.warnings,function(e){e.path=i.concat(e.path.push("default")),t.warnings.push(e)}))}function c(e,t,a,n){p.forEach(p.difference(a.required||[],i(a)),function(e){t.errors.push({code:"OBJECT_MISSING_REQUIRED_PROPERTY_DEFINITION",message:"Missing required property definition: "+e,path:n})})}function u(e){function t(e,t){p.has(r,e)?r[e].parents.push(t):r[e]={lineage:[],parents:[t]}}function a(e,t){-1===p.indexOf(o,e)&&(p.isUndefined(o[e])&&(o[e]=[]),e.indexOf("allOf")>-1&&a(e.substring(0,e.lastIndexOf("/allOf"))),o[e].push(t))}function i(e){return function(t,i){p.forEach(t,function(t,n){var r=["securityDefinitions",n],o=h.pathToPtr(r),u=e.concat([i.toString(),n]);-1===p.indexOf(s,o)?c.errors.push({code:"UNRESOLVABLE_REFERENCE",message:"Security definition could not be resolved: "+n,path:u}):(a(o,h.pathToPtr(u)),p.forEach(t,function(e,t){var i=u.concat(t.toString()),n=h.pathToPtr(r.concat(["scopes",e]));-1===p.indexOf(s,n)?c.errors.push({code:"UNRESOLVABLE_REFERENCE",message:"Security scope definition could not be resolved: "+e,path:i}):a(h.pathToPtr(r.concat(["scopes",e])),n)}))})}}function n(e,t,a){var i=r[t||e];i&&p.each(i.parents,function(t){a.push(t),e!==t&&n(e,t,a)})}var r={},s=[],o={},c={errors:[],warnings:[]};return p.forEach(e.resolved.definitions,function(e,t){s.push(h.pathToPtr(["definitions",t]))}),p.forEach(e.resolved.parameters,function(e,t){s.push(h.pathToPtr(["parameters",t]))}),p.forEach(e.resolved.responses,function(e,t){s.push(h.pathToPtr(["responses",t]))}),p.forEach(e.resolved.securityDefinitions,function(e,t){var a=["securityDefinitions",t];s.push(h.pathToPtr(a)),p.forEach(e.scopes,function(e,t){var i=h.pathToPtr(a.concat(["scopes",t]));-1===p.indexOf(s,i)&&s.push(i)})}),p.forEach(e.references,function(e,i){var n=h.pathFromPtr(i);p.has(e,"missing")||(a(e.uri,i),"allOf"===n[n.length-2]&&t(h.pathToPtr(n.slice(0,n.length-2)),e.uri))}),p.forEach(r,function(e,t){n(t,void 0,e.lineage),(e.lineage.length>1&&e.lineage[e.lineage.length-1]===t||e.parents[0]===t)&&c.errors.push({code:"CIRCULAR_INHERITANCE",lineage:[t].concat(e.lineage),message:"Schema object inherits from itself: "+t,path:h.pathFromPtr(t)})}),p.forEach(e.resolved.security,i(["security"])),p.forEach(e.resolved.paths,function(e,t){var a=["paths",t];p.forEach(e.security,i(a.concat("security"))),p.forEach(e,function(e,t){-1!==p.indexOf(g.supportedHttpMethods,t)&&p.forEach(e.security,i(a.concat([t,"security"])))})}),p.forEach(p.difference(s,Object.keys(o)),function(e){c.warnings.push({code:"UNUSED_DEFINITION",message:"Definition is not used: "+e,path:h.pathFromPtr(e)})}),c}function m(e){function t(t,a){p.forEach(t,function(t,s){var o;p.isNumber(s)&&(s=s.toString()),o=a.concat(s),"body"!==t["in"]&&(t=g.getParameterSchema(t)),n(e,i,t,o,u,r)})}function a(t,a){p.forEach(t,function(t,s){var o=a.concat(s);p.forEach(t.headers,function(t,a){n(e,i,t,o.concat(["headers",a]),u,r)}),p.isUndefined(t.schema)||n(e,i,t.schema,o.concat("schema"),u,r)})}var i=p.reduce(e.references,function(e,t,a){var i=h.pathFromPtr(a);return e.push(h.pathToPtr(i)),e},[]),r={errors:[],warnings:[]},u=[s,o,c];return p.forEach(e.resolved.definitions,function(t,a){n(e,i,t,["definitions",a],u,r)}),t(e.resolved.parameters,["parameters"]),a(e.resolved.responses,["responses"]),p.forEach(e.resolved.paths,function(e,i){var n=["paths",i];t(e.parameters,n.concat("parameters")),p.forEach(e,function(e,i){var r=n.concat(i);-1!==p.indexOf(g.supportedHttpMethods,i)&&(t(e.parameters,r.concat("parameters")),a(e.responses,r.concat("responses")))})}),r}function f(e){function t(e,t,i){var n=t["in"]+":"+t.name;return p.indexOf(e,n)>-1?a.errors.push({code:"DUPLICATE_PARAMETER",message:"Operation cannot have duplicate parameters: "+h.pathToPtr(i),path:i}):e.push(n),e}var a={errors:[],warnings:[]};return p.reduce(e.resolved.paths,function(i,n,r){var s=[],o=r,c=["paths",r];return p.forEach(r.match(/\{(.*?)\}/g),function(e,t){s.push(e.replace(/[{}]/g,"")),o=o.replace(e,"arg"+t)}),s.indexOf("")>-1&&a.errors.push({code:"EMPTY_PATH_PARAMETER_DECLARATION",message:"Path parameter declaration cannot be empty: "+r,path:["paths",r]}),p.indexOf(i.paths,o)>-1?a.errors.push({code:"EQUIVALENT_PATH",message:"Equivalent path already exists: "+r,path:c}):i.paths.push(o),p.reduce(n.parameters,function(e,a,i){return t(e,a,c.concat(["parameters",i.toString()]))},[]),p.forEach(n,function(n,o){var u,m,f={},l=c.concat(o),d=n.operationId;-1!==p.indexOf(g.supportedHttpMethods,o)&&(p.isUndefined(d)||(-1!==p.indexOf(i.operationIds,d)?a.errors.push({code:"DUPLICATE_OPERATIONID",message:"Cannot have multiple operations with the same operationId: "+d,path:l.concat(["operationId"])}):i.operationIds.push(d)),p.reduce(n.parameters,function(e,a,i){return t(e,a,l.concat(["parameters",i.toString()]))},[]),m=e.getOperation(r,o).getParameters(),u=p.reduce(m,function(e,t){return"path"===t["in"]?f[t.name]=t.ptr:"body"===t["in"]?e.bodyParameteters+=1:"formData"===t["in"]&&(e.formParameters+=1),e},{bodyParameteters:0,formParameters:0}),u.bodyParameteters>1&&a.errors.push({code:"MULTIPLE_BODY_PARAMETERS",message:"Operation cannot have multiple body parameters",path:l}),u.bodyParameteters>0&&u.formParameters>0&&a.errors.push({code:"INVALID_PARAMETER_COMBINATION",message:"Operation cannot have a body parameter and a formData parameter",path:l}),p.forEach(p.difference(s,p.keys(f)),function(e){a.errors.push({code:"MISSING_PATH_PARAMETER_DEFINITION",message:"Path parameter is declared but is not defined: "+e,path:l})}),p.forEach(p.difference(p.keys(f),s),function(e){a.errors.push({code:"MISSING_PATH_PARAMETER_DECLARATION",message:"Path parameter is defined but is not declared: "+e,path:h.pathFromPtr(f[e])})}))}),i},{paths:[],operationIds:[]}),a}var p="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,l=e("../../helpers"),h="undefined"!=typeof window?window.JsonRefs:"undefined"!=typeof a?a.JsonRefs:null,d=e("./schema.json"),g=e("./helpers");t.exports={jsonSchemaValidator:r,semanticValidators:[u,m,f]}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../helpers":2,"./helpers":12,"./schema.json":14}],16:[function(e,t,a){var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(e){"use strict";function t(e){var t=e.charCodeAt(0);return t===s||t===f?62:t===o||t===p?63:c>t?-1:c+10>t?t-c+26+26:m+26>t?t-m:u+26>t?t-u+26:void 0}function a(e){function a(e){u[f++]=e}var i,n,s,o,c,u;if(e.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var m=e.length;c="="===e.charAt(m-2)?2:"="===e.charAt(m-1)?1:0,u=new r(3*e.length/4-c),s=c>0?e.length-4:e.length;var f=0;for(i=0,n=0;s>i;i+=4,n+=3)o=t(e.charAt(i))<<18|t(e.charAt(i+1))<<12|t(e.charAt(i+2))<<6|t(e.charAt(i+3)),a((16711680&o)>>16),a((65280&o)>>8),a(255&o);return 2===c?(o=t(e.charAt(i))<<2|t(e.charAt(i+1))>>4,a(255&o)):1===c&&(o=t(e.charAt(i))<<10|t(e.charAt(i+1))<<4|t(e.charAt(i+2))>>2,a(o>>8&255),a(255&o)),u}function n(e){function t(e){return i.charAt(e)}function a(e){return t(e>>18&63)+t(e>>12&63)+t(e>>6&63)+t(63&e)}var n,r,s,o=e.length%3,c="";for(n=0,s=e.length-o;s>n;n+=3)r=(e[n]<<16)+(e[n+1]<<8)+e[n+2],c+=a(r);switch(o){case 1:r=e[e.length-1],c+=t(r>>2),c+=t(r<<4&63),c+="==";break;case 2:r=(e[e.length-2]<<8)+e[e.length-1],c+=t(r>>10),c+=t(r>>4&63),c+=t(r<<2&63),c+="="}return c}var r="undefined"!=typeof Uint8Array?Uint8Array:Array,s="+".charCodeAt(0),o="/".charCodeAt(0),c="0".charCodeAt(0),u="a".charCodeAt(0),m="A".charCodeAt(0),f="-".charCodeAt(0),p="_".charCodeAt(0);e.toByteArray=a,e.fromByteArray=n}("undefined"==typeof a?this.base64js={}:a)},{}],17:[function(e,t,a){(function(t){"use strict";function i(){function e(){}try{var t=new Uint8Array(1);return t.foo=function(){return 42},t.constructor=e,42===t.foo()&&t.constructor===e&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(a){return!1}}function n(){return r.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function r(e){return this instanceof r?(r.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof e?s(this,e):"string"==typeof e?o(this,e,arguments.length>1?arguments[1]:"utf8"):c(this,e)):arguments.length>1?new r(e,arguments[1]):new r(e)}function s(e,t){if(e=d(e,0>t?0:0|g(t)),!r.TYPED_ARRAY_SUPPORT)for(var a=0;t>a;a++)e[a]=0;return e}function o(e,t,a){("string"!=typeof a||""===a)&&(a="utf8");var i=0|y(t,a);return e=d(e,i),e.write(t,a),e}function c(e,t){if(r.isBuffer(t))return u(e,t);if(Y(t))return m(e,t);if(null==t)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(t.buffer instanceof ArrayBuffer)return f(e,t);if(t instanceof ArrayBuffer)return p(e,t)}return t.length?l(e,t):h(e,t)}function u(e,t){var a=0|g(t.length);return e=d(e,a),t.copy(e,0,0,a),e}function m(e,t){var a=0|g(t.length);e=d(e,a);for(var i=0;a>i;i+=1)e[i]=255&t[i];return e}function f(e,t){var a=0|g(t.length);e=d(e,a);for(var i=0;a>i;i+=1)e[i]=255&t[i];return e}function p(e,t){return r.TYPED_ARRAY_SUPPORT?(t.byteLength,e=r._augment(new Uint8Array(t))):e=f(e,new Uint8Array(t)),e}function l(e,t){var a=0|g(t.length);e=d(e,a);for(var i=0;a>i;i+=1)e[i]=255&t[i];return e}function h(e,t){var a,i=0;"Buffer"===t.type&&Y(t.data)&&(a=t.data,i=0|g(a.length)),e=d(e,i);for(var n=0;i>n;n+=1)e[n]=255&a[n];return e}function d(e,t){r.TYPED_ARRAY_SUPPORT?(e=r._augment(new Uint8Array(t)),e.__proto__=r.prototype):(e.length=t,e._isBuffer=!0);var a=0!==t&&t<=r.poolSize>>>1;return a&&(e.parent=Z),e}function g(e){if(e>=n())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n().toString(16)+" bytes");return 0|e}function w(e,t){if(!(this instanceof w))return new w(e,t);var a=new r(e,t);return delete a.parent,a}function y(e,t){"string"!=typeof e&&(e=""+e);var a=e.length;if(0===a)return 0;for(var i=!1;;)switch(t){case"ascii":case"binary":case"raw":case"raws":return a;case"utf8":case"utf-8":return $(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*a;case"hex":return a>>>1;case"base64":return H(e).length;default:if(i)return $(e).length;t=(""+t).toLowerCase(),i=!0}}function b(e,t,a){var i=!1;if(t=0|t,a=void 0===a||a===1/0?this.length:0|a,e||(e="utf8"),0>t&&(t=0),a>this.length&&(a=this.length),t>=a)return"";for(;;)switch(e){case"hex":return C(this,t,a);case"utf8":case"utf-8":return _(this,t,a);case"ascii":return R(this,t,a);case"binary":return k(this,t,a);case"base64":return S(this,t,a);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,a);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}function v(e,t,a,i){a=Number(a)||0;var n=e.length-a;i?(i=Number(i),i>n&&(i=n)):i=n;var r=t.length;if(r%2!==0)throw new Error("Invalid hex string");i>r/2&&(i=r/2);for(var s=0;i>s;s++){var o=parseInt(t.substr(2*s,2),16);if(isNaN(o))throw new Error("Invalid hex string");e[a+s]=o}return s}function j(e,t,a,i){return W($(t,e.length-a),e,a,i)}function z(e,t,a,i){return W(J(t),e,a,i)}function E(e,t,a,i){return z(e,t,a,i)}function A(e,t,a,i){return W(H(t),e,a,i)}function x(e,t,a,i){return W(G(t,e.length-a),e,a,i)}function S(e,t,a){return 0===t&&a===e.length?V.fromByteArray(e):V.fromByteArray(e.slice(t,a))}function _(e,t,a){a=Math.min(e.length,a);for(var i=[],n=t;a>n;){var r=e[n],s=null,o=r>239?4:r>223?3:r>191?2:1;if(a>=n+o){var c,u,m,f;switch(o){case 1:128>r&&(s=r);break;case 2:c=e[n+1],128===(192&c)&&(f=(31&r)<<6|63&c,f>127&&(s=f));break;case 3:c=e[n+1],u=e[n+2],128===(192&c)&&128===(192&u)&&(f=(15&r)<<12|(63&c)<<6|63&u,f>2047&&(55296>f||f>57343)&&(s=f));break;case 4:c=e[n+1],u=e[n+2],m=e[n+3],128===(192&c)&&128===(192&u)&&128===(192&m)&&(f=(15&r)<<18|(63&c)<<12|(63&u)<<6|63&m,f>65535&&1114112>f&&(s=f))}}null===s?(s=65533,o=1):s>65535&&(s-=65536,i.push(s>>>10&1023|55296),s=56320|1023&s),i.push(s),n+=o}return M(i)}function M(e){var t=e.length;if(X>=t)return String.fromCharCode.apply(String,e);for(var a="",i=0;t>i;)a+=String.fromCharCode.apply(String,e.slice(i,i+=X));return a}function R(e,t,a){var i="";a=Math.min(e.length,a);for(var n=t;a>n;n++)i+=String.fromCharCode(127&e[n]);return i}function k(e,t,a){var i="";a=Math.min(e.length,a);for(var n=t;a>n;n++)i+=String.fromCharCode(e[n]);return i}function C(e,t,a){var i=e.length;(!t||0>t)&&(t=0),(!a||0>a||a>i)&&(a=i);for(var n="",r=t;a>r;r++)n+=K(e[r]);return n}function P(e,t,a){for(var i=e.slice(t,a),n="",r=0;re)throw new RangeError("offset is not uint");if(e+t>a)throw new RangeError("Trying to access beyond buffer length")}function I(e,t,a,i,n,s){if(!r.isBuffer(e))throw new TypeError("buffer must be a Buffer instance");if(t>n||s>t)throw new RangeError("value is out of bounds");if(a+i>e.length)throw new RangeError("index out of range")}function T(e,t,a,i){0>t&&(t=65535+t+1);for(var n=0,r=Math.min(e.length-a,2);r>n;n++)e[a+n]=(t&255<<8*(i?n:1-n))>>>8*(i?n:1-n)}function O(e,t,a,i){0>t&&(t=4294967295+t+1);for(var n=0,r=Math.min(e.length-a,4);r>n;n++)e[a+n]=t>>>8*(i?n:3-n)&255}function L(e,t,a,i,n,r){if(t>n||r>t)throw new RangeError("value is out of bounds");if(a+i>e.length)throw new RangeError("index out of range");if(0>a)throw new RangeError("index out of range")}function N(e,t,a,i,n){return n||L(e,t,a,4,3.4028234663852886e38,-3.4028234663852886e38),q.write(e,t,a,i,23,4),a+4}function B(e,t,a,i,n){ -return n||L(e,t,a,8,1.7976931348623157e308,-1.7976931348623157e308),q.write(e,t,a,i,52,8),a+8}function F(e){if(e=U(e).replace(ee,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function U(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function K(e){return 16>e?"0"+e.toString(16):e.toString(16)}function $(e,t){t=t||1/0;for(var a,i=e.length,n=null,r=[],s=0;i>s;s++){if(a=e.charCodeAt(s),a>55295&&57344>a){if(!n){if(a>56319){(t-=3)>-1&&r.push(239,191,189);continue}if(s+1===i){(t-=3)>-1&&r.push(239,191,189);continue}n=a;continue}if(56320>a){(t-=3)>-1&&r.push(239,191,189),n=a;continue}a=(n-55296<<10|a-56320)+65536}else n&&(t-=3)>-1&&r.push(239,191,189);if(n=null,128>a){if((t-=1)<0)break;r.push(a)}else if(2048>a){if((t-=2)<0)break;r.push(a>>6|192,63&a|128)}else if(65536>a){if((t-=3)<0)break;r.push(a>>12|224,a>>6&63|128,63&a|128)}else{if(!(1114112>a))throw new Error("Invalid code point");if((t-=4)<0)break;r.push(a>>18|240,a>>12&63|128,a>>6&63|128,63&a|128)}}return r}function J(e){for(var t=[],a=0;a>8,n=a%256,r.push(n),r.push(i);return r}function H(e){return V.toByteArray(F(e))}function W(e,t,a,i){for(var n=0;i>n&&!(n+a>=t.length||n>=e.length);n++)t[n+a]=e[n];return n}var V=e("base64-js"),q=e("ieee754"),Y=e("isarray");a.Buffer=r,a.SlowBuffer=w,a.INSPECT_MAX_BYTES=50,r.poolSize=8192;var Z={};r.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:i(),r.TYPED_ARRAY_SUPPORT?(r.prototype.__proto__=Uint8Array.prototype,r.__proto__=Uint8Array):(r.prototype.length=void 0,r.prototype.parent=void 0),r.isBuffer=function(e){return!(null==e||!e._isBuffer)},r.compare=function(e,t){if(!r.isBuffer(e)||!r.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var a=e.length,i=t.length,n=0,s=Math.min(a,i);s>n&&e[n]===t[n];)++n;return n!==s&&(a=e[n],i=t[n]),i>a?-1:a>i?1:0},r.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},r.concat=function(e,t){if(!Y(e))throw new TypeError("list argument must be an Array of Buffers.");if(0===e.length)return new r(0);var a;if(void 0===t)for(t=0,a=0;a0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},r.prototype.compare=function(e){if(!r.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?0:r.compare(this,e)},r.prototype.indexOf=function(e,t){function a(e,t,a){for(var i=-1,n=0;a+n2147483647?t=2147483647:-2147483648>t&&(t=-2147483648),t>>=0,0===this.length)return-1;if(t>=this.length)return-1;if(0>t&&(t=Math.max(this.length+t,0)),"string"==typeof e)return 0===e.length?-1:String.prototype.indexOf.call(this,e,t);if(r.isBuffer(e))return a(this,e,t);if("number"==typeof e)return r.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,t):a(this,[e],t);throw new TypeError("val must be string, number or Buffer")},r.prototype.get=function(e){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(e)},r.prototype.set=function(e,t){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(e,t)},r.prototype.write=function(e,t,a,i){if(void 0===t)i="utf8",a=this.length,t=0;else if(void 0===a&&"string"==typeof t)i=t,a=this.length,t=0;else if(isFinite(t))t=0|t,isFinite(a)?(a=0|a,void 0===i&&(i="utf8")):(i=a,a=void 0);else{var n=i;i=t,t=0|a,a=n}var r=this.length-t;if((void 0===a||a>r)&&(a=r),e.length>0&&(0>a||0>t)||t>this.length)throw new RangeError("attempt to write outside buffer bounds");i||(i="utf8");for(var s=!1;;)switch(i){case"hex":return v(this,e,t,a);case"utf8":case"utf-8":return j(this,e,t,a);case"ascii":return z(this,e,t,a);case"binary":return E(this,e,t,a);case"base64":return A(this,e,t,a);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,a);default:if(s)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),s=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var X=4096;r.prototype.slice=function(e,t){var a=this.length;e=~~e,t=void 0===t?a:~~t,0>e?(e+=a,0>e&&(e=0)):e>a&&(e=a),0>t?(t+=a,0>t&&(t=0)):t>a&&(t=a),e>t&&(t=e);var i;if(r.TYPED_ARRAY_SUPPORT)i=r._augment(this.subarray(e,t));else{var n=t-e;i=new r(n,void 0);for(var s=0;n>s;s++)i[s]=this[s+e]}return i.length&&(i.parent=this.parent||this),i},r.prototype.readUIntLE=function(e,t,a){e=0|e,t=0|t,a||D(e,t,this.length);for(var i=this[e],n=1,r=0;++r0&&(n*=256);)i+=this[e+--t]*n;return i},r.prototype.readUInt8=function(e,t){return t||D(e,1,this.length),this[e]},r.prototype.readUInt16LE=function(e,t){return t||D(e,2,this.length),this[e]|this[e+1]<<8},r.prototype.readUInt16BE=function(e,t){return t||D(e,2,this.length),this[e]<<8|this[e+1]},r.prototype.readUInt32LE=function(e,t){return t||D(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},r.prototype.readUInt32BE=function(e,t){return t||D(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},r.prototype.readIntLE=function(e,t,a){e=0|e,t=0|t,a||D(e,t,this.length);for(var i=this[e],n=1,r=0;++r=n&&(i-=Math.pow(2,8*t)),i},r.prototype.readIntBE=function(e,t,a){e=0|e,t=0|t,a||D(e,t,this.length);for(var i=t,n=1,r=this[e+--i];i>0&&(n*=256);)r+=this[e+--i]*n;return n*=128,r>=n&&(r-=Math.pow(2,8*t)),r},r.prototype.readInt8=function(e,t){return t||D(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},r.prototype.readInt16LE=function(e,t){t||D(e,2,this.length);var a=this[e]|this[e+1]<<8;return 32768&a?4294901760|a:a},r.prototype.readInt16BE=function(e,t){t||D(e,2,this.length);var a=this[e+1]|this[e]<<8;return 32768&a?4294901760|a:a},r.prototype.readInt32LE=function(e,t){return t||D(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},r.prototype.readInt32BE=function(e,t){return t||D(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},r.prototype.readFloatLE=function(e,t){return t||D(e,4,this.length),q.read(this,e,!0,23,4)},r.prototype.readFloatBE=function(e,t){return t||D(e,4,this.length),q.read(this,e,!1,23,4)},r.prototype.readDoubleLE=function(e,t){return t||D(e,8,this.length),q.read(this,e,!0,52,8)},r.prototype.readDoubleBE=function(e,t){return t||D(e,8,this.length),q.read(this,e,!1,52,8)},r.prototype.writeUIntLE=function(e,t,a,i){e=+e,t=0|t,a=0|a,i||I(this,e,t,a,Math.pow(2,8*a),0);var n=1,r=0;for(this[t]=255&e;++r=0&&(r*=256);)this[t+n]=e/r&255;return t+a},r.prototype.writeUInt8=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,1,255,0),r.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},r.prototype.writeUInt16LE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):T(this,e,t,!0),t+2},r.prototype.writeUInt16BE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):T(this,e,t,!1),t+2},r.prototype.writeUInt32LE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):O(this,e,t,!0),t+4},r.prototype.writeUInt32BE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},r.prototype.writeIntLE=function(e,t,a,i){if(e=+e,t=0|t,!i){var n=Math.pow(2,8*a-1);I(this,e,t,a,n-1,-n)}var r=0,s=1,o=0>e?1:0;for(this[t]=255&e;++r>0)-o&255;return t+a},r.prototype.writeIntBE=function(e,t,a,i){if(e=+e,t=0|t,!i){var n=Math.pow(2,8*a-1);I(this,e,t,a,n-1,-n)}var r=a-1,s=1,o=0>e?1:0;for(this[t+r]=255&e;--r>=0&&(s*=256);)this[t+r]=(e/s>>0)-o&255;return t+a},r.prototype.writeInt8=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,1,127,-128),r.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},r.prototype.writeInt16LE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):T(this,e,t,!0),t+2},r.prototype.writeInt16BE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):T(this,e,t,!1),t+2},r.prototype.writeInt32LE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,4,2147483647,-2147483648),r.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):O(this,e,t,!0),t+4},r.prototype.writeInt32BE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},r.prototype.writeFloatLE=function(e,t,a){return N(this,e,t,!0,a)},r.prototype.writeFloatBE=function(e,t,a){return N(this,e,t,!1,a)},r.prototype.writeDoubleLE=function(e,t,a){return B(this,e,t,!0,a)},r.prototype.writeDoubleBE=function(e,t,a){return B(this,e,t,!1,a)},r.prototype.copy=function(e,t,a,i){if(a||(a=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&a>i&&(i=a),i===a)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError("targetStart out of bounds");if(0>a||a>=this.length)throw new RangeError("sourceStart out of bounds");if(0>i)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-ta&&i>t)for(n=s-1;n>=0;n--)e[n+t]=this[n+a];else if(1e3>s||!r.TYPED_ARRAY_SUPPORT)for(n=0;s>n;n++)e[n+t]=this[n+a];else e._set(this.subarray(a,a+s),t);return s},r.prototype.fill=function(e,t,a){if(e||(e=0),t||(t=0),a||(a=this.length),t>a)throw new RangeError("end < start");if(a!==t&&0!==this.length){if(0>t||t>=this.length)throw new RangeError("start out of bounds");if(0>a||a>this.length)throw new RangeError("end out of bounds");var i;if("number"==typeof e)for(i=t;a>i;i++)this[i]=e;else{var n=$(e.toString()),r=n.length;for(i=t;a>i;i++)this[i]=n[i%r]}return this}},r.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(r.TYPED_ARRAY_SUPPORT)return new r(this).buffer;for(var e=new Uint8Array(this.length),t=0,a=e.length;a>t;t+=1)e[t]=this[t];return e.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser")};var Q=r.prototype;r._augment=function(e){return e.constructor=r,e._isBuffer=!0,e._set=e.set,e.get=Q.get,e.set=Q.set,e.write=Q.write,e.toString=Q.toString,e.toLocaleString=Q.toString,e.toJSON=Q.toJSON,e.equals=Q.equals,e.compare=Q.compare,e.indexOf=Q.indexOf,e.copy=Q.copy,e.slice=Q.slice,e.readUIntLE=Q.readUIntLE,e.readUIntBE=Q.readUIntBE,e.readUInt8=Q.readUInt8,e.readUInt16LE=Q.readUInt16LE,e.readUInt16BE=Q.readUInt16BE,e.readUInt32LE=Q.readUInt32LE,e.readUInt32BE=Q.readUInt32BE,e.readIntLE=Q.readIntLE,e.readIntBE=Q.readIntBE,e.readInt8=Q.readInt8,e.readInt16LE=Q.readInt16LE,e.readInt16BE=Q.readInt16BE,e.readInt32LE=Q.readInt32LE,e.readInt32BE=Q.readInt32BE,e.readFloatLE=Q.readFloatLE,e.readFloatBE=Q.readFloatBE,e.readDoubleLE=Q.readDoubleLE,e.readDoubleBE=Q.readDoubleBE,e.writeUInt8=Q.writeUInt8,e.writeUIntLE=Q.writeUIntLE,e.writeUIntBE=Q.writeUIntBE,e.writeUInt16LE=Q.writeUInt16LE,e.writeUInt16BE=Q.writeUInt16BE,e.writeUInt32LE=Q.writeUInt32LE,e.writeUInt32BE=Q.writeUInt32BE,e.writeIntLE=Q.writeIntLE,e.writeIntBE=Q.writeIntBE,e.writeInt8=Q.writeInt8,e.writeInt16LE=Q.writeInt16LE,e.writeInt16BE=Q.writeInt16BE,e.writeInt32LE=Q.writeInt32LE,e.writeInt32BE=Q.writeInt32BE,e.writeFloatLE=Q.writeFloatLE,e.writeFloatBE=Q.writeFloatBE,e.writeDoubleLE=Q.writeDoubleLE,e.writeDoubleBE=Q.writeDoubleBE,e.fill=Q.fill,e.inspect=Q.inspect,e.toArrayBuffer=Q.toArrayBuffer,e};var ee=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":16,ieee754:134,isarray:18}],18:[function(e,t,a){var i={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==i.call(e)}},{}],19:[function(t,a,i){(function(t){!function(){function n(e){if(!(this instanceof n))return null==e?new n:new n(e);if("function"==typeof e)return this.random=e,this;arguments.length&&(this.seed=0);for(var t=0;tn;n++)a=i[n],t[a]=e[a]||t[a]}function u(e,t){for(var a=0,i=e.length;i>a;a++)t[a]=e[a]}function m(e,t){var a=Array.isArray(e),i=t||(a?new Array(e.length):{});return a?u(e,i):c(e,i),i}var f=9007199254740992,p=-f,l="0123456789",h="abcdefghijklmnopqrstuvwxyz",d=h.toUpperCase(),g=l+"abcdef",w=Array.prototype.slice;n.prototype.VERSION="0.8.0";var y=function(){throw new Error("No Base64 encoder available.")};!function(){"function"==typeof btoa?y=btoa:"function"==typeof t&&(y=function(e){return new t(e).toString("base64")})}(),n.prototype.bool=function(e){return e=r(e,{likelihood:50}),s(e.likelihood<0||e.likelihood>100,"Chance: Likelihood accepts values from 0 to 100."),100*this.random()i,"Chance: Max specified is out of range with fixed. Max should be, at most, "+i),e=r(e,{min:n,max:i}),t=this.integer({min:e.min*a,max:e.max*a});var o=(t/a).toFixed(e.fixed);return parseFloat(o)},n.prototype.integer=function(e){return e=r(e,{min:p,max:f}),s(e.min>e.max,"Chance: Min cannot be greater than Max."),Math.floor(this.random()*(e.max-e.min+1)+e.min)},n.prototype.natural=function(e){return e=r(e,{min:0,max:f}),s(e.min<0,"Chance: Min cannot be less than zero."),this.integer(e)},n.prototype.string=function(e){e=r(e,{length:this.natural({min:5,max:20})}),s(e.length<0,"Chance: Length cannot be less than zero.");var t=e.length,a=this.n(this.character,t,e);return a.join("")},n.prototype.capitalize=function(e){return e.charAt(0).toUpperCase()+e.substr(1)},n.prototype.mixin=function(e){for(var t in e)n.prototype[t]=e[t];return this},n.prototype.unique=function(e,t,a){s("function"!=typeof e,"Chance: The first argument must be a function."),a=r(a,{comparator:function(e,t){return-1!==e.indexOf(t)}});for(var i,n=[],o=0,c=50*t,u=w.call(arguments,2);n.lengthc)throw new RangeError("Chance: num is likely too large for sample set");return n},n.prototype.n=function(e,t){s("function"!=typeof e,"Chance: The first argument must be a function."),"undefined"==typeof t&&(t=1);var a=t,i=[],n=w.call(arguments,2);for(a=Math.max(0,a),null;a--;null)i.push(e.apply(this,n));return i},n.prototype.pad=function(e,t,a){return a=a||"0",e+="",e.length>=t?e:new Array(t-e.length+1).join(a)+e},n.prototype.pick=function(e,t){if(0===e.length)throw new RangeError("Chance: Cannot pick() from an empty array");return t&&1!==t?this.shuffle(e).slice(0,t):e[this.natural({max:e.length-1})]},n.prototype.shuffle=function(e){for(var t=e.slice(0),a=[],i=0,n=Number(t.length),r=0;n>r;r++)i=this.natural({max:t.length-1}),a[r]=t[i],t.splice(i,1);return a},n.prototype.weighted=function(e,t){if(e.length!==t.length)throw new RangeError("Chance: length of array and weights must match");for(var a=t.length-1;a>=0;--a)t[a]<=0&&(e.splice(a,1),t.splice(a,1));if(t.some(function(e){return 1>e})){var i=t.reduce(function(e,t){return e>t?t:e},t[0]),n=1/i;t=t.map(function(e){return e*n})}var r,s=t.reduce(function(e,t){return e+t},0),o=this.natural({min:1,max:s}),c=0;return t.some(function(t,a){return c+t>=o?(r=e[a],!0):(c+=t,!1)}),r},n.prototype.paragraph=function(e){e=r(e);var t=e.sentences||this.natural({min:3,max:7}),a=this.n(this.sentence,t);return a.join(" ")},n.prototype.sentence=function(e){e=r(e);var t,a=e.words||this.natural({min:12,max:18}),i=e.punctuation,n=this.n(this.word,a);return t=n.join(" "),t=this.capitalize(t),i===!1||/^[\.\?;!:]$/.test(i)||(i="."),i&&(t+=i),t},n.prototype.syllable=function(e){e=r(e);for(var t,a=e.length||this.natural({min:2,max:3}),i="bcdfghjklmnprstvwz",n="aeiou",s=i+n,o="",c=0;a>c;c++)t=0===c?this.character({pool:s}):-1===i.indexOf(t)?this.character({pool:i}):this.character({pool:n}),o+=t;return o},n.prototype.word=function(e){e=r(e),s(e.syllables&&e.length,"Chance: Cannot specify both syllables AND length.");var t=e.syllables||this.natural({min:1,max:3}),a="";if(e.length){do a+=this.syllable();while(a.lengthi;i++)a+=this.syllable();return a},n.prototype.age=function(e){e=r(e);var t;switch(e.type){case"child":t={min:1,max:12};break;case"teen":t={min:13,max:19};break;case"adult":t={min:18,max:65};break;case"senior":t={min:65,max:100};break;case"all":t={min:1,max:100};break;default:t={min:18,max:65}}return this.natural(t)},n.prototype.birthday=function(e){return e=r(e,{year:(new Date).getFullYear()-this.age(e)}),this.date(e)},n.prototype.cpf=function(){var e=this.n(this.natural,9,{max:9}),t=2*e[8]+3*e[7]+4*e[6]+5*e[5]+6*e[4]+7*e[3]+8*e[2]+9*e[1]+10*e[0];t=11-t%11,t>=10&&(t=0);var a=2*t+3*e[8]+4*e[7]+5*e[6]+6*e[5]+7*e[4]+8*e[3]+9*e[2]+10*e[1]+11*e[0];return a=11-a%11,a>=10&&(a=0),""+e[0]+e[1]+e[2]+"."+e[3]+e[4]+e[5]+"."+e[6]+e[7]+e[8]+"-"+t+a},n.prototype.first=function(e){return e=r(e,{gender:this.gender()}),this.pick(this.get("firstNames")[e.gender.toLowerCase()])},n.prototype.gender=function(){return this.pick(["Male","Female"])},n.prototype.last=function(){return this.pick(this.get("lastNames"))},n.prototype.israelId=function(){for(var e=this.string({pool:"0123456789",length:8}),t=0,a=0;a0?"."+this.pick(e.extensions):"",a=e.domain_prefix?e.domain_prefix+"."+e.domain:e.domain;return e.protocol+"://"+a+"/"+e.path+t},n.prototype.address=function(e){return e=r(e),this.natural({min:5,max:2e3})+" "+this.street(e)},n.prototype.altitude=function(e){return e=r(e,{fixed:5,min:0,max:8848}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},n.prototype.areacode=function(e){e=r(e,{parens:!0});var t=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:8}).toString()+this.natural({min:0,max:9}).toString();return e.parens?"("+t+")":t},n.prototype.city=function(){return this.capitalize(this.word({syllables:3}))},n.prototype.coordinates=function(e){return this.latitude(e)+", "+this.longitude(e)},n.prototype.countries=function(){return this.get("countries")},n.prototype.country=function(e){e=r(e);var t=this.pick(this.countries());return e.full?t.name:t.abbreviation},n.prototype.depth=function(e){return e=r(e,{fixed:5,min:-10994,max:0}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},n.prototype.geohash=function(e){return e=r(e,{length:7}),this.string({length:e.length,pool:"0123456789bcdefghjkmnpqrstuvwxyz"})},n.prototype.geojson=function(e){return this.latitude(e)+", "+this.longitude(e)+", "+this.altitude(e)},n.prototype.latitude=function(e){return e=r(e,{fixed:5,min:-90,max:90}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},n.prototype.longitude=function(e){return e=r(e,{fixed:5,min:-180,max:180}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},n.prototype.phone=function(e){var t,a=this,i=function(e){var t=[];return e.sections.forEach(function(e){t.push(a.string({pool:"0123456789",length:e}))}),e.area+t.join(" ")};e=r(e,{formatted:!0,country:"us",mobile:!1}),e.formatted||(e.parens=!1);var n;switch(e.country){case"fr":e.mobile?(t=this.pick(["06","07"])+a.string({pool:"0123456789",length:8}),n=e.formatted?t.match(/../g).join(" "):t):(t=this.pick(["01"+this.pick(["30","34","39","40","41","42","43","44","45","46","47","48","49","53","55","56","58","60","64","69","70","72","73","74","75","76","77","78","79","80","81","82","83"])+a.string({pool:"0123456789",length:6}),"02"+this.pick(["14","18","22","23","28","29","30","31","32","33","34","35","36","37","38","40","41","43","44","45","46","47","48","49","50","51","52","53","54","56","57","61","62","69","72","76","77","78","85","90","96","97","98","99"])+a.string({pool:"0123456789",length:6}),"03"+this.pick(["10","20","21","22","23","24","25","26","27","28","29","39","44","45","51","52","54","55","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","80","81","82","83","84","85","86","87","88","89","90"])+a.string({pool:"0123456789",length:6}),"04"+this.pick(["11","13","15","20","22","26","27","30","32","34","37","42","43","44","50","56","57","63","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","88","89","90","91","92","93","94","95","97","98"])+a.string({pool:"0123456789",length:6}),"05"+this.pick(["08","16","17","19","24","31","32","33","34","35","40","45","46","47","49","53","55","56","57","58","59","61","62","63","64","65","67","79","81","82","86","87","90","94"])+a.string({pool:"0123456789",length:6}),"09"+a.string({pool:"0123456789",length:8})]),n=e.formatted?t.match(/../g).join(" "):t);break;case"uk":e.mobile?(t=this.pick([{area:"07"+this.pick(["4","5","7","8","9"]),sections:[2,6]},{area:"07624 ",sections:[6]}]),n=e.formatted?i(t):i(t).replace(" ","")):(t=this.pick([{area:"01"+this.character({pool:"234569"})+"1 ",sections:[3,4]},{area:"020 "+this.character({pool:"378"}),sections:[3,4]},{area:"023 "+this.character({pool:"89"}),sections:[3,4]},{area:"024 7",sections:[3,4]},{area:"028 "+this.pick(["25","28","37","71","82","90","92","95"]),sections:[2,4]},{area:"012"+this.pick(["04","08","54","76","97","98"])+" ",sections:[5]},{area:"013"+this.pick(["63","64","84","86"])+" ",sections:[5]},{area:"014"+this.pick(["04","20","60","61","80","88"])+" ",sections:[5]},{area:"015"+this.pick(["24","27","62","66"])+" ",sections:[5]},{area:"016"+this.pick(["06","29","35","47","59","95"])+" ",sections:[5]},{area:"017"+this.pick(["26","44","50","68"])+" ",sections:[5]},{area:"018"+this.pick(["27","37","84","97"])+" ",sections:[5]},{area:"019"+this.pick(["00","05","35","46","49","63","95"])+" ",sections:[5]}]),n=e.formatted?i(t):i(t).replace(" ","","g"));break;case"us":var s=this.areacode(e).toString(),o=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:9}).toString()+this.natural({min:0,max:9}).toString(),c=this.natural({min:1e3,max:9999}).toString();n=e.formatted?s+" "+o+"-"+c:s+o+c}return n},n.prototype.postal=function(){var e=this.character({pool:"XVTSRPNKLMHJGECBA"}),t=e+this.natural({max:9})+this.character({alpha:!0,casing:"upper"}),a=this.natural({max:9})+this.character({alpha:!0,casing:"upper"})+this.natural({max:9});return t+" "+a},n.prototype.provinces=function(){return this.get("provinces")},n.prototype.province=function(e){return e&&e.full?this.pick(this.provinces()).name:this.pick(this.provinces()).abbreviation},n.prototype.state=function(e){return e&&e.full?this.pick(this.states(e)).name:this.pick(this.states(e)).abbreviation},n.prototype.states=function(e){e=r(e,{us_states_and_dc:!0});var t,a=this.get("us_states_and_dc"),i=this.get("territories"),n=this.get("armed_forces");return t=[],e.us_states_and_dc&&(t=t.concat(a)),e.territories&&(t=t.concat(i)),e.armed_forces&&(t=t.concat(n)),t},n.prototype.street=function(e){e=r(e);var t=this.word({syllables:2});return t=this.capitalize(t),t+=" ",t+=e.short_suffix?this.street_suffix().abbreviation:this.street_suffix().name; -},n.prototype.street_suffix=function(){return this.pick(this.street_suffixes())},n.prototype.street_suffixes=function(){return this.get("street_suffixes")},n.prototype.zip=function(e){var t=this.n(this.natural,5,{max:9});return e&&e.plusfour===!0&&(t.push("-"),t=t.concat(this.n(this.natural,4,{max:9}))),t.join("")},n.prototype.ampm=function(){return this.bool()?"am":"pm"},n.prototype.date=function(e){var t,a;if(e&&(e.min||e.max)){e=r(e,{american:!0,string:!1});var i="undefined"!=typeof e.min?e.min.getTime():1,n="undefined"!=typeof e.max?e.max.getTime():864e13;a=new Date(this.natural({min:i,max:n}))}else{var s=this.month({raw:!0}),o=s.days;e&&e.month&&(o=this.get("months")[(e.month%12+12)%12].days),e=r(e,{year:parseInt(this.year(),10),month:s.numeric-1,day:this.natural({min:1,max:o}),hour:this.hour(),minute:this.minute(),second:this.second(),millisecond:this.millisecond(),american:!0,string:!1}),a=new Date(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond)}return t=e.american?a.getMonth()+1+"/"+a.getDate()+"/"+a.getFullYear():a.getDate()+"/"+(a.getMonth()+1)+"/"+a.getFullYear(),e.string?t:a},n.prototype.hammertime=function(e){return this.date(e).getTime()},n.prototype.hour=function(e){return e=r(e,{min:1,max:e&&e.twentyfour?24:12}),s(e.min<1,"Chance: Min cannot be less than 1."),s(e.twentyfour&&e.max>24,"Chance: Max cannot be greater than 24 for twentyfour option."),s(!e.twentyfour&&e.max>12,"Chance: Max cannot be greater than 12."),s(e.min>e.max,"Chance: Min cannot be greater than Max."),this.natural({min:e.min,max:e.max})},n.prototype.millisecond=function(){return this.natural({max:999})},n.prototype.minute=n.prototype.second=function(e){return e=r(e,{min:0,max:59}),s(e.min<0,"Chance: Min cannot be less than 0."),s(e.max>59,"Chance: Max cannot be greater than 59."),s(e.min>e.max,"Chance: Min cannot be greater than Max."),this.natural({min:e.min,max:e.max})},n.prototype.month=function(e){e=r(e,{min:1,max:12}),s(e.min<1,"Chance: Min cannot be less than 1."),s(e.max>12,"Chance: Max cannot be greater than 12."),s(e.min>e.max,"Chance: Min cannot be greater than Max.");var t=this.pick(this.months().slice(e.min-1,e.max));return e.raw?t:t.name},n.prototype.months=function(){return this.get("months")},n.prototype.second=function(){return this.natural({max:59})},n.prototype.timestamp=function(){return this.natural({min:1,max:parseInt((new Date).getTime()/1e3,10)})},n.prototype.year=function(e){return e=r(e,{min:(new Date).getFullYear()}),e.max="undefined"!=typeof e.max?e.max:e.min+100,this.natural(e).toString()},n.prototype.cc=function(e){e=r(e);var t,a,i;return t=e.type?this.cc_type({name:e.type,raw:!0}):this.cc_type({raw:!0}),a=t.prefix.split(""),i=t.length-t.prefix.length-1,a=a.concat(this.n(this.integer,i,{min:0,max:9})),a.push(this.luhn_calculate(a.join(""))),a.join("")},n.prototype.cc_types=function(){return this.get("cc_types")},n.prototype.cc_type=function(e){e=r(e);var t=this.cc_types(),a=null;if(e.name){for(var i=0;it?"-$"+t.replace("-",""):"$"+t},n.prototype.exp=function(e){e=r(e);var t={};return t.year=this.exp_year(),t.year===(new Date).getFullYear().toString()?t.month=this.exp_month({future:!0}):t.month=this.exp_month(),e.raw?t:t.month+"/"+t.year},n.prototype.exp_month=function(e){e=r(e);var t,a,i=(new Date).getMonth()+1;if(e.future){do t=this.month({raw:!0}).numeric,a=parseInt(t,10);while(i>=a)}else t=this.month({raw:!0}).numeric;return t},n.prototype.exp_year=function(){return this.year({max:(new Date).getFullYear()+10})},n.prototype.pl_pesel=function(){for(var e=this.natural({min:1,max:9999999999}),t=this.pad(e,10).split(""),a=0;a0;n--)i[n-1]=this.natural({min:1,max:a[1]});return"undefined"!=typeof t.sum&&t.sum?i.reduce(function(e,t){return e+t}):i}throw new RangeError("A type of die roll must be included")},n.prototype.guid=function(e){e=r(e,{version:5});var t="abcdef1234567890",a="ab89",i=this.string({pool:t,length:8})+"-"+this.string({pool:t,length:4})+"-"+e.version+this.string({pool:t,length:3})+"-"+this.string({pool:a,length:1})+this.string({pool:t,length:3})+"-"+this.string({pool:t,length:12});return i},n.prototype.hash=function(e){e=r(e,{length:40,casing:"lower"});var t="upper"===e.casing?g.toUpperCase():g;return this.string({pool:t,length:e.length})},n.prototype.luhn_check=function(e){var t=e.toString(),a=+t.substring(t.length-1);return a===this.luhn_calculate(+t.substring(0,t.length-1))},n.prototype.luhn_calculate=function(e){for(var t,a=e.toString().split("").reverse(),i=0,n=0,r=a.length;r>n;++n)t=+a[n],n%2===0&&(t*=2,t>9&&(t-=9)),i+=t;return 9*i%10},n.prototype.md5=function(e){var t={str:"",key:null,raw:!1};if(e)if("string"==typeof e)t.str=e,e={};else{if("object"!=typeof e)return null;if("Array"===e.constructor)return null}else t.str=this.string(),e={};if(t=r(e,t),!t.str)throw new Error("A parameter is required to return an md5 hash.");return this.bimd5.md5(t.str,t.key,t.raw)};var b={firstNames:{male:["James","John","Robert","Michael","William","David","Richard","Joseph","Charles","Thomas","Christopher","Daniel","Matthew","George","Donald","Anthony","Paul","Mark","Edward","Steven","Kenneth","Andrew","Brian","Joshua","Kevin","Ronald","Timothy","Jason","Jeffrey","Frank","Gary","Ryan","Nicholas","Eric","Stephen","Jacob","Larry","Jonathan","Scott","Raymond","Justin","Brandon","Gregory","Samuel","Benjamin","Patrick","Jack","Henry","Walter","Dennis","Jerry","Alexander","Peter","Tyler","Douglas","Harold","Aaron","Jose","Adam","Arthur","Zachary","Carl","Nathan","Albert","Kyle","Lawrence","Joe","Willie","Gerald","Roger","Keith","Jeremy","Terry","Harry","Ralph","Sean","Jesse","Roy","Louis","Billy","Austin","Bruce","Eugene","Christian","Bryan","Wayne","Russell","Howard","Fred","Ethan","Jordan","Philip","Alan","Juan","Randy","Vincent","Bobby","Dylan","Johnny","Phillip","Victor","Clarence","Ernest","Martin","Craig","Stanley","Shawn","Travis","Bradley","Leonard","Earl","Gabriel","Jimmy","Francis","Todd","Noah","Danny","Dale","Cody","Carlos","Allen","Frederick","Logan","Curtis","Alex","Joel","Luis","Norman","Marvin","Glenn","Tony","Nathaniel","Rodney","Melvin","Alfred","Steve","Cameron","Chad","Edwin","Caleb","Evan","Antonio","Lee","Herbert","Jeffery","Isaac","Derek","Ricky","Marcus","Theodore","Elijah","Luke","Jesus","Eddie","Troy","Mike","Dustin","Ray","Adrian","Bernard","Leroy","Angel","Randall","Wesley","Ian","Jared","Mason","Hunter","Calvin","Oscar","Clifford","Jay","Shane","Ronnie","Barry","Lucas","Corey","Manuel","Leo","Tommy","Warren","Jackson","Isaiah","Connor","Don","Dean","Jon","Julian","Miguel","Bill","Lloyd","Charlie","Mitchell","Leon","Jerome","Darrell","Jeremiah","Alvin","Brett","Seth","Floyd","Jim","Blake","Micheal","Gordon","Trevor","Lewis","Erik","Edgar","Vernon","Devin","Gavin","Jayden","Chris","Clyde","Tom","Derrick","Mario","Brent","Marc","Herman","Chase","Dominic","Ricardo","Franklin","Maurice","Max","Aiden","Owen","Lester","Gilbert","Elmer","Gene","Francisco","Glen","Cory","Garrett","Clayton","Sam","Jorge","Chester","Alejandro","Jeff","Harvey","Milton","Cole","Ivan","Andre","Duane","Landon"],female:["Mary","Emma","Elizabeth","Minnie","Margaret","Ida","Alice","Bertha","Sarah","Annie","Clara","Ella","Florence","Cora","Martha","Laura","Nellie","Grace","Carrie","Maude","Mabel","Bessie","Jennie","Gertrude","Julia","Hattie","Edith","Mattie","Rose","Catherine","Lillian","Ada","Lillie","Helen","Jessie","Louise","Ethel","Lula","Myrtle","Eva","Frances","Lena","Lucy","Edna","Maggie","Pearl","Daisy","Fannie","Josephine","Dora","Rosa","Katherine","Agnes","Marie","Nora","May","Mamie","Blanche","Stella","Ellen","Nancy","Effie","Sallie","Nettie","Della","Lizzie","Flora","Susie","Maud","Mae","Etta","Harriet","Sadie","Caroline","Katie","Lydia","Elsie","Kate","Susan","Mollie","Alma","Addie","Georgia","Eliza","Lulu","Nannie","Lottie","Amanda","Belle","Charlotte","Rebecca","Ruth","Viola","Olive","Amelia","Hannah","Jane","Virginia","Emily","Matilda","Irene","Kathryn","Esther","Willie","Henrietta","Ollie","Amy","Rachel","Sara","Estella","Theresa","Augusta","Ora","Pauline","Josie","Lola","Sophia","Leona","Anne","Mildred","Ann","Beulah","Callie","Lou","Delia","Eleanor","Barbara","Iva","Louisa","Maria","Mayme","Evelyn","Estelle","Nina","Betty","Marion","Bettie","Dorothy","Luella","Inez","Lela","Rosie","Allie","Millie","Janie","Cornelia","Victoria","Ruby","Winifred","Alta","Celia","Christine","Beatrice","Birdie","Harriett","Mable","Myra","Sophie","Tillie","Isabel","Sylvia","Carolyn","Isabelle","Leila","Sally","Ina","Essie","Bertie","Nell","Alberta","Katharine","Lora","Rena","Mina","Rhoda","Mathilda","Abbie","Eula","Dollie","Hettie","Eunice","Fanny","Ola","Lenora","Adelaide","Christina","Lelia","Nelle","Sue","Johanna","Lilly","Lucinda","Minerva","Lettie","Roxie","Cynthia","Helena","Hilda","Hulda","Bernice","Genevieve","Jean","Cordelia","Marian","Francis","Jeanette","Adeline","Gussie","Leah","Lois","Lura","Mittie","Hallie","Isabella","Olga","Phoebe","Teresa","Hester","Lida","Lina","Winnie","Claudia","Marguerite","Vera","Cecelia","Bess","Emilie","John","Rosetta","Verna","Myrtie","Cecilia","Elva","Olivia","Ophelia","Georgie","Elnora","Violet","Adele","Lily","Linnie","Loretta","Madge","Polly","Virgie","Eugenia","Lucile","Lucille","Mabelle","Rosalie"]},lastNames:["Smith","Johnson","Williams","Jones","Brown","Davis","Miller","Wilson","Moore","Taylor","Anderson","Thomas","Jackson","White","Harris","Martin","Thompson","Garcia","Martinez","Robinson","Clark","Rodriguez","Lewis","Lee","Walker","Hall","Allen","Young","Hernandez","King","Wright","Lopez","Hill","Scott","Green","Adams","Baker","Gonzalez","Nelson","Carter","Mitchell","Perez","Roberts","Turner","Phillips","Campbell","Parker","Evans","Edwards","Collins","Stewart","Sanchez","Morris","Rogers","Reed","Cook","Morgan","Bell","Murphy","Bailey","Rivera","Cooper","Richardson","Cox","Howard","Ward","Torres","Peterson","Gray","Ramirez","James","Watson","Brooks","Kelly","Sanders","Price","Bennett","Wood","Barnes","Ross","Henderson","Coleman","Jenkins","Perry","Powell","Long","Patterson","Hughes","Flores","Washington","Butler","Simmons","Foster","Gonzales","Bryant","Alexander","Russell","Griffin","Diaz","Hayes","Myers","Ford","Hamilton","Graham","Sullivan","Wallace","Woods","Cole","West","Jordan","Owens","Reynolds","Fisher","Ellis","Harrison","Gibson","McDonald","Cruz","Marshall","Ortiz","Gomez","Murray","Freeman","Wells","Webb","Simpson","Stevens","Tucker","Porter","Hunter","Hicks","Crawford","Henry","Boyd","Mason","Morales","Kennedy","Warren","Dixon","Ramos","Reyes","Burns","Gordon","Shaw","Holmes","Rice","Robertson","Hunt","Black","Daniels","Palmer","Mills","Nichols","Grant","Knight","Ferguson","Rose","Stone","Hawkins","Dunn","Perkins","Hudson","Spencer","Gardner","Stephens","Payne","Pierce","Berry","Matthews","Arnold","Wagner","Willis","Ray","Watkins","Olson","Carroll","Duncan","Snyder","Hart","Cunningham","Bradley","Lane","Andrews","Ruiz","Harper","Fox","Riley","Armstrong","Carpenter","Weaver","Greene","Lawrence","Elliott","Chavez","Sims","Austin","Peters","Kelley","Franklin","Lawson","Fields","Gutierrez","Ryan","Schmidt","Carr","Vasquez","Castillo","Wheeler","Chapman","Oliver","Montgomery","Richards","Williamson","Johnston","Banks","Meyer","Bishop","McCoy","Howell","Alvarez","Morrison","Hansen","Fernandez","Garza","Harvey","Little","Burton","Stanley","Nguyen","George","Jacobs","Reid","Kim","Fuller","Lynch","Dean","Gilbert","Garrett","Romero","Welch","Larson","Frazier","Burke","Hanson","Day","Mendoza","Moreno","Bowman","Medina","Fowler","Brewer","Hoffman","Carlson","Silva","Pearson","Holland","Douglas","Fleming","Jensen","Vargas","Byrd","Davidson","Hopkins","May","Terry","Herrera","Wade","Soto","Walters","Curtis","Neal","Caldwell","Lowe","Jennings","Barnett","Graves","Jimenez","Horton","Shelton","Barrett","Obrien","Castro","Sutton","Gregory","McKinney","Lucas","Miles","Craig","Rodriquez","Chambers","Holt","Lambert","Fletcher","Watts","Bates","Hale","Rhodes","Pena","Beck","Newman","Haynes","McDaniel","Mendez","Bush","Vaughn","Parks","Dawson","Santiago","Norris","Hardy","Love","Steele","Curry","Powers","Schultz","Barker","Guzman","Page","Munoz","Ball","Keller","Chandler","Weber","Leonard","Walsh","Lyons","Ramsey","Wolfe","Schneider","Mullins","Benson","Sharp","Bowen","Daniel","Barber","Cummings","Hines","Baldwin","Griffith","Valdez","Hubbard","Salazar","Reeves","Warner","Stevenson","Burgess","Santos","Tate","Cross","Garner","Mann","Mack","Moss","Thornton","Dennis","McGee","Farmer","Delgado","Aguilar","Vega","Glover","Manning","Cohen","Harmon","Rodgers","Robbins","Newton","Todd","Blair","Higgins","Ingram","Reese","Cannon","Strickland","Townsend","Potter","Goodwin","Walton","Rowe","Hampton","Ortega","Patton","Swanson","Joseph","Francis","Goodman","Maldonado","Yates","Becker","Erickson","Hodges","Rios","Conner","Adkins","Webster","Norman","Malone","Hammond","Flowers","Cobb","Moody","Quinn","Blake","Maxwell","Pope","Floyd","Osborne","Paul","McCarthy","Guerrero","Lindsey","Estrada","Sandoval","Gibbs","Tyler","Gross","Fitzgerald","Stokes","Doyle","Sherman","Saunders","Wise","Colon","Gill","Alvarado","Greer","Padilla","Simon","Waters","Nunez","Ballard","Schwartz","McBride","Houston","Christensen","Klein","Pratt","Briggs","Parsons","McLaughlin","Zimmerman","French","Buchanan","Moran","Copeland","Roy","Pittman","Brady","McCormick","Holloway","Brock","Poole","Frank","Logan","Owen","Bass","Marsh","Drake","Wong","Jefferson","Park","Morton","Abbott","Sparks","Patrick","Norton","Huff","Clayton","Massey","Lloyd","Figueroa","Carson","Bowers","Roberson","Barton","Tran","Lamb","Harrington","Casey","Boone","Cortez","Clarke","Mathis","Singleton","Wilkins","Cain","Bryan","Underwood","Hogan","McKenzie","Collier","Luna","Phelps","McGuire","Allison","Bridges","Wilkerson","Nash","Summers","Atkins"],countries:[{name:"Afghanistan",abbreviation:"AF"},{name:"Albania",abbreviation:"AL"},{name:"Algeria",abbreviation:"DZ"},{name:"American Samoa",abbreviation:"AS"},{name:"Andorra",abbreviation:"AD"},{name:"Angola",abbreviation:"AO"},{name:"Anguilla",abbreviation:"AI"},{name:"Antarctica",abbreviation:"AQ"},{name:"Antigua and Barbuda",abbreviation:"AG"},{name:"Argentina",abbreviation:"AR"},{name:"Armenia",abbreviation:"AM"},{name:"Aruba",abbreviation:"AW"},{name:"Australia",abbreviation:"AU"},{name:"Austria",abbreviation:"AT"},{name:"Azerbaijan",abbreviation:"AZ"},{name:"Bahamas",abbreviation:"BS"},{name:"Bahrain",abbreviation:"BH"},{name:"Bangladesh",abbreviation:"BD"},{name:"Barbados",abbreviation:"BB"},{name:"Belarus",abbreviation:"BY"},{name:"Belgium",abbreviation:"BE"},{name:"Belize",abbreviation:"BZ"},{name:"Benin",abbreviation:"BJ"},{name:"Bermuda",abbreviation:"BM"},{name:"Bhutan",abbreviation:"BT"},{name:"Bolivia",abbreviation:"BO"},{name:"Bosnia and Herzegovina",abbreviation:"BA"},{name:"Botswana",abbreviation:"BW"},{name:"Bouvet Island",abbreviation:"BV"},{name:"Brazil",abbreviation:"BR"},{name:"British Antarctic Territory",abbreviation:"BQ"},{name:"British Indian Ocean Territory",abbreviation:"IO"},{name:"British Virgin Islands",abbreviation:"VG"},{name:"Brunei",abbreviation:"BN"},{name:"Bulgaria",abbreviation:"BG"},{name:"Burkina Faso",abbreviation:"BF"},{name:"Burundi",abbreviation:"BI"},{name:"Cambodia",abbreviation:"KH"},{name:"Cameroon",abbreviation:"CM"},{name:"Canada",abbreviation:"CA"},{name:"Canton and Enderbury Islands",abbreviation:"CT"},{name:"Cape Verde",abbreviation:"CV"},{name:"Cayman Islands",abbreviation:"KY"},{name:"Central African Republic",abbreviation:"CF"},{name:"Chad",abbreviation:"TD"},{name:"Chile",abbreviation:"CL"},{name:"China",abbreviation:"CN"},{name:"Christmas Island",abbreviation:"CX"},{name:"Cocos [Keeling] Islands",abbreviation:"CC"},{name:"Colombia",abbreviation:"CO"},{name:"Comoros",abbreviation:"KM"},{name:"Congo - Brazzaville",abbreviation:"CG"},{name:"Congo - Kinshasa",abbreviation:"CD"},{name:"Cook Islands",abbreviation:"CK"},{name:"Costa Rica",abbreviation:"CR"},{name:"Croatia",abbreviation:"HR"},{name:"Cuba",abbreviation:"CU"},{name:"Cyprus",abbreviation:"CY"},{name:"Czech Republic",abbreviation:"CZ"},{name:"Côte d’Ivoire",abbreviation:"CI"},{name:"Denmark",abbreviation:"DK"},{name:"Djibouti",abbreviation:"DJ"},{name:"Dominica",abbreviation:"DM"},{name:"Dominican Republic",abbreviation:"DO"},{name:"Dronning Maud Land",abbreviation:"NQ"},{name:"East Germany",abbreviation:"DD"},{name:"Ecuador",abbreviation:"EC"},{name:"Egypt",abbreviation:"EG"},{name:"El Salvador",abbreviation:"SV"},{name:"Equatorial Guinea",abbreviation:"GQ"},{name:"Eritrea",abbreviation:"ER"},{name:"Estonia",abbreviation:"EE"},{name:"Ethiopia",abbreviation:"ET"},{name:"Falkland Islands",abbreviation:"FK"},{name:"Faroe Islands",abbreviation:"FO"},{name:"Fiji",abbreviation:"FJ"},{name:"Finland",abbreviation:"FI"},{name:"France",abbreviation:"FR"},{name:"French Guiana",abbreviation:"GF"},{name:"French Polynesia",abbreviation:"PF"},{name:"French Southern Territories",abbreviation:"TF"},{name:"French Southern and Antarctic Territories",abbreviation:"FQ"},{name:"Gabon",abbreviation:"GA"},{name:"Gambia",abbreviation:"GM"},{name:"Georgia",abbreviation:"GE"},{name:"Germany",abbreviation:"DE"},{name:"Ghana",abbreviation:"GH"},{name:"Gibraltar",abbreviation:"GI"},{name:"Greece",abbreviation:"GR"},{name:"Greenland",abbreviation:"GL"},{name:"Grenada",abbreviation:"GD"},{name:"Guadeloupe",abbreviation:"GP"},{name:"Guam",abbreviation:"GU"},{name:"Guatemala",abbreviation:"GT"},{name:"Guernsey",abbreviation:"GG"},{name:"Guinea",abbreviation:"GN"},{name:"Guinea-Bissau",abbreviation:"GW"},{name:"Guyana",abbreviation:"GY"},{name:"Haiti",abbreviation:"HT"},{name:"Heard Island and McDonald Islands",abbreviation:"HM"},{name:"Honduras",abbreviation:"HN"},{name:"Hong Kong SAR China",abbreviation:"HK"},{name:"Hungary",abbreviation:"HU"},{name:"Iceland",abbreviation:"IS"},{name:"India",abbreviation:"IN"},{name:"Indonesia",abbreviation:"ID"},{name:"Iran",abbreviation:"IR"},{name:"Iraq",abbreviation:"IQ"},{name:"Ireland",abbreviation:"IE"},{name:"Isle of Man",abbreviation:"IM"},{name:"Israel",abbreviation:"IL"},{name:"Italy",abbreviation:"IT"},{name:"Jamaica",abbreviation:"JM"},{name:"Japan",abbreviation:"JP"},{name:"Jersey",abbreviation:"JE"},{name:"Johnston Island",abbreviation:"JT"},{name:"Jordan",abbreviation:"JO"},{name:"Kazakhstan",abbreviation:"KZ"},{name:"Kenya",abbreviation:"KE"},{name:"Kiribati",abbreviation:"KI"},{name:"Kuwait",abbreviation:"KW"},{name:"Kyrgyzstan",abbreviation:"KG"},{name:"Laos",abbreviation:"LA"},{name:"Latvia",abbreviation:"LV"},{name:"Lebanon",abbreviation:"LB"},{name:"Lesotho",abbreviation:"LS"},{name:"Liberia",abbreviation:"LR"},{name:"Libya",abbreviation:"LY"},{name:"Liechtenstein",abbreviation:"LI"},{name:"Lithuania",abbreviation:"LT"},{name:"Luxembourg",abbreviation:"LU"},{name:"Macau SAR China",abbreviation:"MO"},{name:"Macedonia",abbreviation:"MK"},{name:"Madagascar",abbreviation:"MG"},{name:"Malawi",abbreviation:"MW"},{name:"Malaysia",abbreviation:"MY"},{name:"Maldives",abbreviation:"MV"},{name:"Mali",abbreviation:"ML"},{name:"Malta",abbreviation:"MT"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Martinique",abbreviation:"MQ"},{name:"Mauritania",abbreviation:"MR"},{name:"Mauritius",abbreviation:"MU"},{name:"Mayotte",abbreviation:"YT"},{name:"Metropolitan France",abbreviation:"FX"},{name:"Mexico",abbreviation:"MX"},{name:"Micronesia",abbreviation:"FM"},{name:"Midway Islands",abbreviation:"MI"},{name:"Moldova",abbreviation:"MD"},{name:"Monaco",abbreviation:"MC"},{name:"Mongolia",abbreviation:"MN"},{name:"Montenegro",abbreviation:"ME"},{name:"Montserrat",abbreviation:"MS"},{name:"Morocco",abbreviation:"MA"},{name:"Mozambique",abbreviation:"MZ"},{name:"Myanmar [Burma]",abbreviation:"MM"},{name:"Namibia",abbreviation:"NA"},{name:"Nauru",abbreviation:"NR"},{name:"Nepal",abbreviation:"NP"},{name:"Netherlands",abbreviation:"NL"},{name:"Netherlands Antilles",abbreviation:"AN"},{name:"Neutral Zone",abbreviation:"NT"},{name:"New Caledonia",abbreviation:"NC"},{name:"New Zealand",abbreviation:"NZ"},{name:"Nicaragua",abbreviation:"NI"},{name:"Niger",abbreviation:"NE"},{name:"Nigeria",abbreviation:"NG"},{name:"Niue",abbreviation:"NU"},{name:"Norfolk Island",abbreviation:"NF"},{name:"North Korea",abbreviation:"KP"},{name:"North Vietnam",abbreviation:"VD"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Norway",abbreviation:"NO"},{name:"Oman",abbreviation:"OM"},{name:"Pacific Islands Trust Territory",abbreviation:"PC"},{name:"Pakistan",abbreviation:"PK"},{name:"Palau",abbreviation:"PW"},{name:"Palestinian Territories",abbreviation:"PS"},{name:"Panama",abbreviation:"PA"},{name:"Panama Canal Zone",abbreviation:"PZ"},{name:"Papua New Guinea",abbreviation:"PG"},{name:"Paraguay",abbreviation:"PY"},{name:"People's Democratic Republic of Yemen",abbreviation:"YD"},{name:"Peru",abbreviation:"PE"},{name:"Philippines",abbreviation:"PH"},{name:"Pitcairn Islands",abbreviation:"PN"},{name:"Poland",abbreviation:"PL"},{name:"Portugal",abbreviation:"PT"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Qatar",abbreviation:"QA"},{name:"Romania",abbreviation:"RO"},{name:"Russia",abbreviation:"RU"},{name:"Rwanda",abbreviation:"RW"},{name:"Réunion",abbreviation:"RE"},{name:"Saint Barthélemy",abbreviation:"BL"},{name:"Saint Helena",abbreviation:"SH"},{name:"Saint Kitts and Nevis",abbreviation:"KN"},{name:"Saint Lucia",abbreviation:"LC"},{name:"Saint Martin",abbreviation:"MF"},{name:"Saint Pierre and Miquelon",abbreviation:"PM"},{name:"Saint Vincent and the Grenadines",abbreviation:"VC"},{name:"Samoa",abbreviation:"WS"},{name:"San Marino",abbreviation:"SM"},{name:"Saudi Arabia",abbreviation:"SA"},{name:"Senegal",abbreviation:"SN"},{name:"Serbia",abbreviation:"RS"},{name:"Serbia and Montenegro",abbreviation:"CS"},{name:"Seychelles",abbreviation:"SC"},{name:"Sierra Leone",abbreviation:"SL"},{name:"Singapore",abbreviation:"SG"},{name:"Slovakia",abbreviation:"SK"},{name:"Slovenia",abbreviation:"SI"},{name:"Solomon Islands",abbreviation:"SB"},{name:"Somalia",abbreviation:"SO"},{name:"South Africa",abbreviation:"ZA"},{name:"South Georgia and the South Sandwich Islands",abbreviation:"GS"},{name:"South Korea",abbreviation:"KR"},{name:"Spain",abbreviation:"ES"},{name:"Sri Lanka",abbreviation:"LK"},{name:"Sudan",abbreviation:"SD"},{name:"Suriname",abbreviation:"SR"},{name:"Svalbard and Jan Mayen",abbreviation:"SJ"},{name:"Swaziland",abbreviation:"SZ"},{name:"Sweden",abbreviation:"SE"},{name:"Switzerland",abbreviation:"CH"},{name:"Syria",abbreviation:"SY"},{name:"São Tomé and Príncipe",abbreviation:"ST"},{name:"Taiwan",abbreviation:"TW"},{name:"Tajikistan",abbreviation:"TJ"},{name:"Tanzania",abbreviation:"TZ"},{name:"Thailand",abbreviation:"TH"},{name:"Timor-Leste",abbreviation:"TL"},{name:"Togo",abbreviation:"TG"},{name:"Tokelau",abbreviation:"TK"},{name:"Tonga",abbreviation:"TO"},{name:"Trinidad and Tobago",abbreviation:"TT"},{name:"Tunisia",abbreviation:"TN"},{name:"Turkey",abbreviation:"TR"},{name:"Turkmenistan",abbreviation:"TM"},{name:"Turks and Caicos Islands",abbreviation:"TC"},{name:"Tuvalu",abbreviation:"TV"},{name:"U.S. Minor Outlying Islands",abbreviation:"UM"},{name:"U.S. Miscellaneous Pacific Islands",abbreviation:"PU"},{name:"U.S. Virgin Islands",abbreviation:"VI"},{name:"Uganda",abbreviation:"UG"},{name:"Ukraine",abbreviation:"UA"},{name:"Union of Soviet Socialist Republics",abbreviation:"SU"},{name:"United Arab Emirates",abbreviation:"AE"},{name:"United Kingdom",abbreviation:"GB"},{name:"United States",abbreviation:"US"},{name:"Unknown or Invalid Region",abbreviation:"ZZ"},{name:"Uruguay",abbreviation:"UY"},{name:"Uzbekistan",abbreviation:"UZ"},{name:"Vanuatu",abbreviation:"VU"},{name:"Vatican City",abbreviation:"VA"},{name:"Venezuela",abbreviation:"VE"},{name:"Vietnam",abbreviation:"VN"},{name:"Wake Island",abbreviation:"WK"},{name:"Wallis and Futuna",abbreviation:"WF"},{name:"Western Sahara",abbreviation:"EH"},{name:"Yemen",abbreviation:"YE"},{name:"Zambia",abbreviation:"ZM"},{name:"Zimbabwe",abbreviation:"ZW"},{name:"Åland Islands",abbreviation:"AX"}],provinces:[{name:"Alberta",abbreviation:"AB"},{name:"British Columbia",abbreviation:"BC"},{name:"Manitoba",abbreviation:"MB"},{name:"New Brunswick",abbreviation:"NB"},{name:"Newfoundland and Labrador",abbreviation:"NL"},{name:"Nova Scotia",abbreviation:"NS"},{name:"Ontario",abbreviation:"ON"},{name:"Prince Edward Island",abbreviation:"PE"},{name:"Quebec",abbreviation:"QC"},{name:"Saskatchewan",abbreviation:"SK"},{name:"Northwest Territories",abbreviation:"NT"},{name:"Nunavut",abbreviation:"NU"},{name:"Yukon",abbreviation:"YT"}],us_states_and_dc:[{name:"Alabama",abbreviation:"AL"},{name:"Alaska",abbreviation:"AK"},{name:"Arizona",abbreviation:"AZ"},{name:"Arkansas",abbreviation:"AR"},{name:"California",abbreviation:"CA"},{name:"Colorado",abbreviation:"CO"},{name:"Connecticut",abbreviation:"CT"},{name:"Delaware",abbreviation:"DE"},{name:"District of Columbia",abbreviation:"DC"},{name:"Florida",abbreviation:"FL"},{name:"Georgia",abbreviation:"GA"},{name:"Hawaii",abbreviation:"HI"},{name:"Idaho",abbreviation:"ID"},{name:"Illinois",abbreviation:"IL"},{name:"Indiana",abbreviation:"IN"},{name:"Iowa",abbreviation:"IA"},{name:"Kansas",abbreviation:"KS"},{name:"Kentucky",abbreviation:"KY"},{name:"Louisiana",abbreviation:"LA"},{name:"Maine",abbreviation:"ME"},{name:"Maryland",abbreviation:"MD"},{name:"Massachusetts",abbreviation:"MA"},{name:"Michigan",abbreviation:"MI"},{name:"Minnesota",abbreviation:"MN"},{name:"Mississippi",abbreviation:"MS"},{name:"Missouri",abbreviation:"MO"},{name:"Montana",abbreviation:"MT"},{name:"Nebraska",abbreviation:"NE"},{name:"Nevada",abbreviation:"NV"},{name:"New Hampshire",abbreviation:"NH"},{name:"New Jersey",abbreviation:"NJ"},{name:"New Mexico",abbreviation:"NM"},{name:"New York",abbreviation:"NY"},{name:"North Carolina",abbreviation:"NC"},{name:"North Dakota",abbreviation:"ND"},{name:"Ohio",abbreviation:"OH"},{name:"Oklahoma",abbreviation:"OK"},{name:"Oregon",abbreviation:"OR"},{name:"Pennsylvania",abbreviation:"PA"},{name:"Rhode Island",abbreviation:"RI"},{name:"South Carolina",abbreviation:"SC"},{name:"South Dakota",abbreviation:"SD"},{name:"Tennessee",abbreviation:"TN"},{name:"Texas",abbreviation:"TX"},{name:"Utah",abbreviation:"UT"},{name:"Vermont",abbreviation:"VT"},{name:"Virginia",abbreviation:"VA"},{name:"Washington",abbreviation:"WA"},{name:"West Virginia",abbreviation:"WV"},{name:"Wisconsin",abbreviation:"WI"},{name:"Wyoming",abbreviation:"WY"}],territories:[{name:"American Samoa",abbreviation:"AS"},{name:"Federated States of Micronesia",abbreviation:"FM"},{name:"Guam",abbreviation:"GU"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Virgin Islands, U.S.",abbreviation:"VI"}],armed_forces:[{name:"Armed Forces Europe",abbreviation:"AE"},{name:"Armed Forces Pacific",abbreviation:"AP"},{name:"Armed Forces the Americas",abbreviation:"AA"}],street_suffixes:[{name:"Avenue",abbreviation:"Ave"},{name:"Boulevard",abbreviation:"Blvd"},{name:"Center",abbreviation:"Ctr"},{name:"Circle",abbreviation:"Cir"},{name:"Court",abbreviation:"Ct"},{name:"Drive",abbreviation:"Dr"},{name:"Extension",abbreviation:"Ext"},{name:"Glen",abbreviation:"Gln"},{name:"Grove",abbreviation:"Grv"},{name:"Heights",abbreviation:"Hts"},{name:"Highway",abbreviation:"Hwy"},{name:"Junction",abbreviation:"Jct"},{name:"Key",abbreviation:"Key"},{name:"Lane",abbreviation:"Ln"},{name:"Loop",abbreviation:"Loop"},{name:"Manor",abbreviation:"Mnr"},{name:"Mill",abbreviation:"Mill"},{name:"Park",abbreviation:"Park"},{name:"Parkway",abbreviation:"Pkwy"},{name:"Pass",abbreviation:"Pass"},{name:"Path",abbreviation:"Path"},{name:"Pike",abbreviation:"Pike"},{name:"Place",abbreviation:"Pl"},{name:"Plaza",abbreviation:"Plz"},{name:"Point",abbreviation:"Pt"},{name:"Ridge",abbreviation:"Rdg"},{name:"River",abbreviation:"Riv"},{name:"Road",abbreviation:"Rd"},{name:"Square",abbreviation:"Sq"},{name:"Street",abbreviation:"St"},{name:"Terrace",abbreviation:"Ter"},{name:"Trail",abbreviation:"Trl"},{name:"Turnpike",abbreviation:"Tpke"},{name:"View",abbreviation:"Vw"},{name:"Way",abbreviation:"Way"}],months:[{name:"January",short_name:"Jan",numeric:"01",days:31},{name:"February",short_name:"Feb",numeric:"02",days:28},{name:"March",short_name:"Mar",numeric:"03",days:31},{name:"April",short_name:"Apr",numeric:"04",days:30},{name:"May",short_name:"May",numeric:"05",days:31},{name:"June",short_name:"Jun",numeric:"06",days:30},{name:"July",short_name:"Jul",numeric:"07",days:31},{name:"August",short_name:"Aug",numeric:"08",days:31},{name:"September",short_name:"Sep",numeric:"09",days:30},{name:"October",short_name:"Oct",numeric:"10",days:31},{name:"November",short_name:"Nov",numeric:"11",days:30},{name:"December",short_name:"Dec",numeric:"12",days:31}],cc_types:[{name:"American Express",short_name:"amex",prefix:"34",length:15},{name:"Bankcard",short_name:"bankcard",prefix:"5610",length:16},{name:"China UnionPay",short_name:"chinaunion",prefix:"62",length:16},{name:"Diners Club Carte Blanche",short_name:"dccarte",prefix:"300",length:14},{name:"Diners Club enRoute",short_name:"dcenroute",prefix:"2014",length:15},{name:"Diners Club International",short_name:"dcintl",prefix:"36",length:14},{name:"Diners Club United States & Canada",short_name:"dcusc",prefix:"54",length:16},{name:"Discover Card",short_name:"discover",prefix:"6011",length:16},{name:"InstaPayment",short_name:"instapay",prefix:"637",length:16},{name:"JCB",short_name:"jcb",prefix:"3528",length:16},{name:"Laser",short_name:"laser",prefix:"6304",length:16},{name:"Maestro",short_name:"maestro",prefix:"5018",length:16},{name:"Mastercard",short_name:"mc",prefix:"51",length:16},{name:"Solo",short_name:"solo",prefix:"6334",length:16},{name:"Switch",short_name:"switch",prefix:"4903",length:16},{name:"Visa",short_name:"visa",prefix:"4",length:16},{name:"Visa Electron",short_name:"electron",prefix:"4026",length:16}],currency_types:[{code:"AED",name:"United Arab Emirates Dirham"},{code:"AFN", -name:"Afghanistan Afghani"},{code:"ALL",name:"Albania Lek"},{code:"AMD",name:"Armenia Dram"},{code:"ANG",name:"Netherlands Antilles Guilder"},{code:"AOA",name:"Angola Kwanza"},{code:"ARS",name:"Argentina Peso"},{code:"AUD",name:"Australia Dollar"},{code:"AWG",name:"Aruba Guilder"},{code:"AZN",name:"Azerbaijan New Manat"},{code:"BAM",name:"Bosnia and Herzegovina Convertible Marka"},{code:"BBD",name:"Barbados Dollar"},{code:"BDT",name:"Bangladesh Taka"},{code:"BGN",name:"Bulgaria Lev"},{code:"BHD",name:"Bahrain Dinar"},{code:"BIF",name:"Burundi Franc"},{code:"BMD",name:"Bermuda Dollar"},{code:"BND",name:"Brunei Darussalam Dollar"},{code:"BOB",name:"Bolivia Boliviano"},{code:"BRL",name:"Brazil Real"},{code:"BSD",name:"Bahamas Dollar"},{code:"BTN",name:"Bhutan Ngultrum"},{code:"BWP",name:"Botswana Pula"},{code:"BYR",name:"Belarus Ruble"},{code:"BZD",name:"Belize Dollar"},{code:"CAD",name:"Canada Dollar"},{code:"CDF",name:"Congo/Kinshasa Franc"},{code:"CHF",name:"Switzerland Franc"},{code:"CLP",name:"Chile Peso"},{code:"CNY",name:"China Yuan Renminbi"},{code:"COP",name:"Colombia Peso"},{code:"CRC",name:"Costa Rica Colon"},{code:"CUC",name:"Cuba Convertible Peso"},{code:"CUP",name:"Cuba Peso"},{code:"CVE",name:"Cape Verde Escudo"},{code:"CZK",name:"Czech Republic Koruna"},{code:"DJF",name:"Djibouti Franc"},{code:"DKK",name:"Denmark Krone"},{code:"DOP",name:"Dominican Republic Peso"},{code:"DZD",name:"Algeria Dinar"},{code:"EGP",name:"Egypt Pound"},{code:"ERN",name:"Eritrea Nakfa"},{code:"ETB",name:"Ethiopia Birr"},{code:"EUR",name:"Euro Member Countries"},{code:"FJD",name:"Fiji Dollar"},{code:"FKP",name:"Falkland Islands (Malvinas) Pound"},{code:"GBP",name:"United Kingdom Pound"},{code:"GEL",name:"Georgia Lari"},{code:"GGP",name:"Guernsey Pound"},{code:"GHS",name:"Ghana Cedi"},{code:"GIP",name:"Gibraltar Pound"},{code:"GMD",name:"Gambia Dalasi"},{code:"GNF",name:"Guinea Franc"},{code:"GTQ",name:"Guatemala Quetzal"},{code:"GYD",name:"Guyana Dollar"},{code:"HKD",name:"Hong Kong Dollar"},{code:"HNL",name:"Honduras Lempira"},{code:"HRK",name:"Croatia Kuna"},{code:"HTG",name:"Haiti Gourde"},{code:"HUF",name:"Hungary Forint"},{code:"IDR",name:"Indonesia Rupiah"},{code:"ILS",name:"Israel Shekel"},{code:"IMP",name:"Isle of Man Pound"},{code:"INR",name:"India Rupee"},{code:"IQD",name:"Iraq Dinar"},{code:"IRR",name:"Iran Rial"},{code:"ISK",name:"Iceland Krona"},{code:"JEP",name:"Jersey Pound"},{code:"JMD",name:"Jamaica Dollar"},{code:"JOD",name:"Jordan Dinar"},{code:"JPY",name:"Japan Yen"},{code:"KES",name:"Kenya Shilling"},{code:"KGS",name:"Kyrgyzstan Som"},{code:"KHR",name:"Cambodia Riel"},{code:"KMF",name:"Comoros Franc"},{code:"KPW",name:"Korea (North) Won"},{code:"KRW",name:"Korea (South) Won"},{code:"KWD",name:"Kuwait Dinar"},{code:"KYD",name:"Cayman Islands Dollar"},{code:"KZT",name:"Kazakhstan Tenge"},{code:"LAK",name:"Laos Kip"},{code:"LBP",name:"Lebanon Pound"},{code:"LKR",name:"Sri Lanka Rupee"},{code:"LRD",name:"Liberia Dollar"},{code:"LSL",name:"Lesotho Loti"},{code:"LTL",name:"Lithuania Litas"},{code:"LYD",name:"Libya Dinar"},{code:"MAD",name:"Morocco Dirham"},{code:"MDL",name:"Moldova Leu"},{code:"MGA",name:"Madagascar Ariary"},{code:"MKD",name:"Macedonia Denar"},{code:"MMK",name:"Myanmar (Burma) Kyat"},{code:"MNT",name:"Mongolia Tughrik"},{code:"MOP",name:"Macau Pataca"},{code:"MRO",name:"Mauritania Ouguiya"},{code:"MUR",name:"Mauritius Rupee"},{code:"MVR",name:"Maldives (Maldive Islands) Rufiyaa"},{code:"MWK",name:"Malawi Kwacha"},{code:"MXN",name:"Mexico Peso"},{code:"MYR",name:"Malaysia Ringgit"},{code:"MZN",name:"Mozambique Metical"},{code:"NAD",name:"Namibia Dollar"},{code:"NGN",name:"Nigeria Naira"},{code:"NIO",name:"Nicaragua Cordoba"},{code:"NOK",name:"Norway Krone"},{code:"NPR",name:"Nepal Rupee"},{code:"NZD",name:"New Zealand Dollar"},{code:"OMR",name:"Oman Rial"},{code:"PAB",name:"Panama Balboa"},{code:"PEN",name:"Peru Nuevo Sol"},{code:"PGK",name:"Papua New Guinea Kina"},{code:"PHP",name:"Philippines Peso"},{code:"PKR",name:"Pakistan Rupee"},{code:"PLN",name:"Poland Zloty"},{code:"PYG",name:"Paraguay Guarani"},{code:"QAR",name:"Qatar Riyal"},{code:"RON",name:"Romania New Leu"},{code:"RSD",name:"Serbia Dinar"},{code:"RUB",name:"Russia Ruble"},{code:"RWF",name:"Rwanda Franc"},{code:"SAR",name:"Saudi Arabia Riyal"},{code:"SBD",name:"Solomon Islands Dollar"},{code:"SCR",name:"Seychelles Rupee"},{code:"SDG",name:"Sudan Pound"},{code:"SEK",name:"Sweden Krona"},{code:"SGD",name:"Singapore Dollar"},{code:"SHP",name:"Saint Helena Pound"},{code:"SLL",name:"Sierra Leone Leone"},{code:"SOS",name:"Somalia Shilling"},{code:"SPL",name:"Seborga Luigino"},{code:"SRD",name:"Suriname Dollar"},{code:"STD",name:"São Tomé and Príncipe Dobra"},{code:"SVC",name:"El Salvador Colon"},{code:"SYP",name:"Syria Pound"},{code:"SZL",name:"Swaziland Lilangeni"},{code:"THB",name:"Thailand Baht"},{code:"TJS",name:"Tajikistan Somoni"},{code:"TMT",name:"Turkmenistan Manat"},{code:"TND",name:"Tunisia Dinar"},{code:"TOP",name:"Tonga Pa'anga"},{code:"TRY",name:"Turkey Lira"},{code:"TTD",name:"Trinidad and Tobago Dollar"},{code:"TVD",name:"Tuvalu Dollar"},{code:"TWD",name:"Taiwan New Dollar"},{code:"TZS",name:"Tanzania Shilling"},{code:"UAH",name:"Ukraine Hryvnia"},{code:"UGX",name:"Uganda Shilling"},{code:"USD",name:"United States Dollar"},{code:"UYU",name:"Uruguay Peso"},{code:"UZS",name:"Uzbekistan Som"},{code:"VEF",name:"Venezuela Bolivar"},{code:"VND",name:"Viet Nam Dong"},{code:"VUV",name:"Vanuatu Vatu"},{code:"WST",name:"Samoa Tala"},{code:"XAF",name:"Communauté Financière Africaine (BEAC) CFA Franc BEAC"},{code:"XCD",name:"East Caribbean Dollar"},{code:"XDR",name:"International Monetary Fund (IMF) Special Drawing Rights"},{code:"XOF",name:"Communauté Financière Africaine (BCEAO) Franc"},{code:"XPF",name:"Comptoirs Français du Pacifique (CFP) Franc"},{code:"YER",name:"Yemen Rial"},{code:"ZAR",name:"South Africa Rand"},{code:"ZMW",name:"Zambia Kwacha"},{code:"ZWD",name:"Zimbabwe Dollar"}]},v=Object.prototype.hasOwnProperty,j=Object.keys||function(e){var t=[];for(var a in e)v.call(e,a)&&t.push(a);return t};n.prototype.get=function(e){return m(b[e])},n.prototype.mac_address=function(e){e=r(e),e.separator||(e.separator=e.networkVersion?".":":");var t="ABCDEF1234567890",a="";return a=e.networkVersion?this.n(this.string,3,{pool:t,length:4}).join(e.separator):this.n(this.string,6,{pool:t,length:2}).join(e.separator)},n.prototype.normal=function(e){e=r(e,{mean:0,dev:1});var t,a,i,n,s=e.mean,o=e.dev;do a=2*this.random()-1,i=2*this.random()-1,t=a*a+i*i;while(t>=1);return n=a*Math.sqrt(-2*Math.log(t)/t),o*n+s},n.prototype.radio=function(e){e=r(e,{side:"?"});var t="";switch(e.side.toLowerCase()){case"east":case"e":t="W";break;case"west":case"w":t="K";break;default:t=this.character({pool:"KW"})}return t+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})},n.prototype.set=function(e,t){"string"==typeof e?b[e]=t:b=m(e,b)},n.prototype.tv=function(e){return this.radio(e)},n.prototype.cnpj=function(){var e=this.n(this.natural,8,{max:9}),t=2+6*e[7]+7*e[6]+8*e[5]+9*e[4]+2*e[3]+3*e[2]+4*e[1]+5*e[0];t=11-t%11,t>=10&&(t=0);var a=2*t+3+7*e[7]+8*e[6]+9*e[5]+2*e[4]+3*e[3]+4*e[2]+5*e[1]+6*e[0];return a=11-a%11,a>=10&&(a=0),""+e[0]+e[1]+"."+e[2]+e[3]+e[4]+"."+e[5]+e[6]+e[7]+"/0001-"+t+a},n.prototype.mersenne_twister=function(e){return new z(e)},n.prototype.blueimp_md5=function(){return new E};var z=function(e){void 0===e&&(e=Math.floor(Math.random()*Math.pow(10,13))),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(e)};z.prototype.init_genrand=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti>>30,this.mt[this.mti]=(1812433253*((4294901760&e)>>>16)<<16)+1812433253*(65535&e)+this.mti,this.mt[this.mti]>>>=0},z.prototype.init_by_array=function(e,t){var a,i,n=1,r=0;for(this.init_genrand(19650218),a=this.N>t?this.N:t;a;a--)i=this.mt[n-1]^this.mt[n-1]>>>30,this.mt[n]=(this.mt[n]^(1664525*((4294901760&i)>>>16)<<16)+1664525*(65535&i))+e[r]+r,this.mt[n]>>>=0,n++,r++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1),r>=t&&(r=0);for(a=this.N-1;a;a--)i=this.mt[n-1]^this.mt[n-1]>>>30,this.mt[n]=(this.mt[n]^(1566083941*((4294901760&i)>>>16)<<16)+1566083941*(65535&i))-n,this.mt[n]>>>=0,n++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1);this.mt[0]=2147483648},z.prototype.genrand_int32=function(){var e,t=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var a;for(this.mti===this.N+1&&this.init_genrand(5489),a=0;a>>1^t[1&e];for(;a>>1^t[1&e];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^t[1&e],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0},z.prototype.genrand_int31=function(){return this.genrand_int32()>>>1},z.prototype.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},z.prototype.random=function(){return this.genrand_int32()*(1/4294967296)},z.prototype.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},z.prototype.genrand_res53=function(){var e=this.genrand_int32()>>>5,t=this.genrand_int32()>>>6;return(67108864*e+t)*(1/9007199254740992)};var E=function(){};E.prototype.VERSION="1.0.1",E.prototype.safe_add=function(e,t){var a=(65535&e)+(65535&t),i=(e>>16)+(t>>16)+(a>>16);return i<<16|65535&a},E.prototype.bit_roll=function(e,t){return e<>>32-t},E.prototype.md5_cmn=function(e,t,a,i,n,r){return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(t,e),this.safe_add(i,r)),n),a)},E.prototype.md5_ff=function(e,t,a,i,n,r,s){return this.md5_cmn(t&a|~t&i,e,t,n,r,s)},E.prototype.md5_gg=function(e,t,a,i,n,r,s){return this.md5_cmn(t&i|a&~i,e,t,n,r,s)},E.prototype.md5_hh=function(e,t,a,i,n,r,s){return this.md5_cmn(t^a^i,e,t,n,r,s)},E.prototype.md5_ii=function(e,t,a,i,n,r,s){return this.md5_cmn(a^(t|~i),e,t,n,r,s)},E.prototype.binl_md5=function(e,t){e[t>>5]|=128<>>9<<4)+14]=t;var a,i,n,r,s,o=1732584193,c=-271733879,u=-1732584194,m=271733878;for(a=0;a>5]>>>t%32&255);return a},E.prototype.rstr2binl=function(e){var t,a=[];for(a[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<16&&(n=this.binl_md5(n,8*e.length)),a=0;16>a;a+=1)r[a]=909522486^n[a],s[a]=1549556828^n[a];return i=this.binl_md5(r.concat(this.rstr2binl(t)),512+8*t.length),this.binl2rstr(this.binl_md5(s.concat(i),640))},E.prototype.rstr2hex=function(e){var t,a,i="0123456789abcdef",n="";for(a=0;a>>4&15)+i.charAt(15&t);return n},E.prototype.str2rstr_utf8=function(e){return unescape(encodeURIComponent(e))},E.prototype.raw_md5=function(e){return this.rstr_md5(this.str2rstr_utf8(e))},E.prototype.hex_md5=function(e){return this.rstr2hex(this.raw_md5(e))},E.prototype.raw_hmac_md5=function(e,t){return this.rstr_hmac_md5(this.str2rstr_utf8(e),this.str2rstr_utf8(t))},E.prototype.hex_hmac_md5=function(e,t){return this.rstr2hex(this.raw_hmac_md5(e,t))},E.prototype.md5=function(e,t,a){return t?a?this.raw_hmac_md5(t,e):this.hex_hmac_md5(t,e):a?this.raw_md5(e):this.hex_md5(e)},"undefined"!=typeof i&&("undefined"!=typeof a&&a.exports&&(i=a.exports=n),i.Chance=n),"function"==typeof e&&e.amd&&e([],function(){return n}),"undefined"!=typeof importScripts&&(chance=new n),"object"==typeof window&&"object"==typeof window.document&&(window.Chance=n,window.chance=new n)}()}).call(this,t("buffer").Buffer)},{buffer:17}],20:[function(e,t,a){function i(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function n(){var e=arguments,t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+a.humanize(this.diff),!t)return e;var i="color: "+this.color;e=[e[0],i,"color: inherit"].concat(Array.prototype.slice.call(e,1));var n=0,r=0;return e[0].replace(/%[a-z%]/g,function(e){"%%"!==e&&(n++,"%c"===e&&(r=n))}),e.splice(r,0,i),e}function r(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(e){try{null==e?a.storage.removeItem("debug"):a.storage.debug=e}catch(t){}}function o(){var e;try{e=a.storage.debug}catch(t){}return e}function c(){try{return window.localStorage}catch(e){}}a=t.exports=e("./debug"),a.log=r,a.formatArgs=n,a.save=s,a.load=o,a.useColors=i,a.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:c(),a.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],a.formatters.j=function(e){return JSON.stringify(e)},a.enable(o())},{"./debug":21}],21:[function(e,t,a){function i(){return a.colors[m++%a.colors.length]}function n(e){function t(){}function n(){var e=n,t=+new Date,r=t-(u||t);e.diff=r,e.prev=u,e.curr=t,u=t,null==e.useColors&&(e.useColors=a.useColors()),null==e.color&&e.useColors&&(e.color=i());var s=Array.prototype.slice.call(arguments);s[0]=a.coerce(s[0]),"string"!=typeof s[0]&&(s=["%o"].concat(s));var o=0;s[0]=s[0].replace(/%([a-z%])/g,function(t,i){if("%%"===t)return t;o++;var n=a.formatters[i];if("function"==typeof n){var r=s[o];t=n.call(e,r),s.splice(o,1),o--}return t}),"function"==typeof a.formatArgs&&(s=a.formatArgs.apply(e,s));var c=n.log||a.log||console.log.bind(console);c.apply(e,s)}t.enabled=!1,n.enabled=!0;var r=a.enabled(e)?n:t;return r.namespace=e,r}function r(e){a.save(e);for(var t=(e||"").split(/[\s,]+/),i=t.length,n=0;i>n;n++)t[n]&&(e=t[n].replace(/\*/g,".*?"),"-"===e[0]?a.skips.push(new RegExp("^"+e.substr(1)+"$")):a.names.push(new RegExp("^"+e+"$")))}function s(){a.enable("")}function o(e){var t,i;for(t=0,i=a.skips.length;i>t;t++)if(a.skips[t].test(e))return!1;for(t=0,i=a.names.length;i>t;t++)if(a.names[t].test(e))return!0;return!1}function c(e){return e instanceof Error?e.stack||e.message:e}a=t.exports=n,a.coerce=c,a.disable=s,a.enable=r,a.enabled=o,a.humanize=e("ms"),a.names=[],a.skips=[],a.formatters={};var u,m=0},{ms:158}],22:[function(e,t,a){(function(e){"use strict";function a(t){return t instanceof e||t instanceof Date||t instanceof RegExp?!0:!1}function i(t){if(t instanceof e){var a=new e(t.length);return t.copy(a),a}if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return new RegExp(t);throw new Error("Unexpected situation")}function n(e){var t=[];return e.forEach(function(e,s){"object"==typeof e&&null!==e?Array.isArray(e)?t[s]=n(e):a(e)?t[s]=i(e):t[s]=r({},e):t[s]=e}),t}var r=t.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,s=arguments[0],o=Array.prototype.slice.call(arguments,1);return o.forEach(function(o){"object"!=typeof o||Array.isArray(o)||Object.keys(o).forEach(function(c){return t=s[c],e=o[c],e===s?void 0:"object"!=typeof e||null===e?void(s[c]=e):Array.isArray(e)?void(s[c]=n(e)):a(e)?void(s[c]=i(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(s[c]=r({},e)):void(s[c]=r(t,e))})}),s}}).call(this,e("buffer").Buffer)},{buffer:17}],23:[function(e,t,a){"use strict";var i=e("./util/uri-helpers");i.findByRef=e("./util/find-reference"),i.resolveSchema=e("./util/resolve-schema"),i.normalizeSchema=e("./util/normalize-schema");var n=t.exports=function(){function e(t,a,n,r){function s(a){if("string"==typeof a.id){var n=i.resolveURL(t,a.id).replace(/\/#?$/,"");if(n.indexOf("#")>-1){var r=n.split("#");n="/"===r[1].charAt()?r[0]:r[1]||r[0]}e.refs[n]||(e.refs[n]=a)}}if("object"==typeof t&&(r=n,n=a,a=t,t=void 0),"object"!=typeof a)throw new Error("schema must be an object");if("object"==typeof n&&null!==n){var o=n;n=[];for(var c in o)o[c].id=o[c].id||c,n.push(o[c])}return"undefined"==typeof n||Array.isArray(n)||(r=!!n,n=[]),(n||[]).concat([a]).forEach(function(e){a=i.normalizeSchema(t,e,s),s(a)}),i.resolveSchema(a,e.refs,r)}return e.refs={},e.util=i,e};n.util=i},{"./util/find-reference":25,"./util/normalize-schema":26,"./util/resolve-schema":27,"./util/uri-helpers":28}],24:[function(e,t,a){"use strict";var i=t.exports=function(e,t){function a(e,a){n[e]=i(a,t)}if(t=t||[],t.indexOf(e)>-1)throw new Error("unable dereference circular structures");if(!e||"object"!=typeof e)return e;t=t.concat([e]);var n=Array.isArray(e)?[]:{};return Array.isArray(n)?e.forEach(function(e,t){a(t,e)}):"[object Object]"===Object.prototype.toString.call(e)&&Object.keys(e).forEach(function(t){a(t,e[t])}),n}},{}],25:[function(e,t,a){"use strict";function i(e,t){for(var a=t.split("#")[1],i=a.split("/").slice(1);i.length;){var n=decodeURIComponent(i.shift()).replace(/~1/g,"/").replace(/~0/g,"~");if("undefined"==typeof e[n])throw new Error("JSON pointer not found: "+t);e=e[n]}return e}var n=e("./uri-helpers"),r=t.exports=function(e,t){var a=t[e]||t[e.split("#")[1]]||t[n.getDocumentURI(e)];if(a)a=e.indexOf("#/")>-1?i(a,e):a;else for(var s in t)if(n.resolveURL(t[s].id,e)===t[s].id){a=t[s];break}if(!a)throw new Error("Reference not found: "+e);for(;a.$ref;)a=r(a.$ref,t);return a}},{"./uri-helpers":28}],26:[function(e,t,a){"use strict";function i(e,t,a){if(e){var r="string"==typeof e.id?e.id:"#";n.isURL(r)||(r=n.resolveURL(t===r?null:t,r)),"string"!=typeof e.$ref||n.isURL(e.$ref)||(e.$ref=n.resolveURL(r,e.$ref)),"string"==typeof e.id&&(e.id=t=r)}for(var s in e){var o=e[s];"object"==typeof o&&"enum"!==s&&"required"!==s&&i(o,t,a)}"function"==typeof a&&a(e)}var n=e("./uri-helpers"),r=e("./clone-obj"),s=["http://json-schema.org/schema#","http://json-schema.org/draft-04/schema#"];t.exports=function(e,t,a){"object"==typeof e&&(a=t,t=e,e=null);var o=e||"",c=r(t);if(c.$schema&&-1===s.indexOf(c.$schema))throw new Error("Unsupported schema version (v4 only)");return o=n.resolveURL(c.$schema||s[0],o),i(c,n.resolveURL(c.id||"#",o),a),c.id=c.id||o,c}},{"./clone-obj":24,"./uri-helpers":28}],27:[function(e,t,a){"use strict";function i(e){return"enum"===e||"required"===e||"definitions"===e}function n(e,t,a,c){var u=Array.isArray(e)?[]:{};if("string"==typeof e.$ref){var m=r.getDocumentURI(e.$ref);if(a!==m||c&&e.$ref.indexOf("#/")>-1){var f=s(e.$ref,t);o(e,f),delete e.$ref,delete e.id}}for(var p in e)"object"!=typeof e[p]||i(p)?u[p]=e[p]:u[p]=n(e[p],t,a,c);return u}var r=e("./uri-helpers"),s=e("./find-reference"),o=e("deep-extend");t.exports=function(e,t,a){var i=r.resolveURL(e.$schema,e.id),s=r.getDocumentURI(i);return n(e,t,s,a)}},{"./find-reference":25,"./uri-helpers":28,"deep-extend":22}],28:[function(e,t,a){"use strict";function i(e,t){e=e.replace(/^\.\//,"");var a=String(e).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@]*)(?::([^:@]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);if(!a)throw new RangeError;var n=a[0]||"",r=a[1]||"",s=a[2]||"",o=a[3]||"",c=a[4]||"",u=a[5]||"",m=a[6]||"",f=a[7]||"",p=a[8]||"",l=a[9]||"";if(void 0!==t){var h=new i(t),d=""===r&&""===c&&""===s;d&&""===f&&""===p&&(p=h.search),d&&"/"!==f.charAt(0)&&(f=""!==f?h.pathname.slice(0,h.pathname.lastIndexOf("/")+1)+f:h.pathname);var g=[];f.replace(/\/?[^\/]+/g,function(e){"/.."===e?g.pop():g.push(e)}),f=g.join("")||"/",d&&(m=h.port,u=h.hostname,c=h.host,o=h.password,s=h.username),""===r&&(r=h.protocol),n=r+(""!==c?"//":"")+(""!==s?s+(""!==o?":"+o:"")+"@":"")+c+f+p+l}this.href=n,this.origin=r+(""!==c?"//"+c:""),this.protocol=r,this.username=s,this.password=o,this.host=c,this.hostname=u,this.port=m,this.pathname=f,this.search=p,this.hash=l}function n(e){return"string"==typeof e&&/^\w+:\/\//.test(e)?!0:void 0}function r(e,t){return new i(e,t)}function s(e,t){return e=e||"http://json-schema.org/schema#",t=r(t,e),e=r(e),e.hash&&!t.hash?t.href+e.hash:t.href}function o(e){return"string"==typeof e&&e.split("#")[0]}t.exports={isURL:n,parseURI:r,resolveURL:s,getDocumentURI:o}},{}],29:[function(e,t,a){function i(e,t){this.low=e,this.high=t,this.length=1+t-e}function n(e,t){return this instanceof n?(this.ranges=[],this.length=0,void 0!==e&&this.add(e,t),void 0):new n(e,t)}function r(e){e.length=e.ranges.reduce(function(e,t){return e+t.length},0)}i.prototype.overlaps=function(e){return!(this.highe.high)},i.prototype.touches=function(e){return!(this.high+1e.high)},i.prototype.add=function(e){return this.touches(e)&&new i(Math.min(this.low,e.low),Math.max(this.high,e.high))},i.prototype.subtract=function(e){return this.overlaps(e)?e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.high=this.ranges.length?null:this.ranges[t].low+e},n.prototype.toString=function(){return"[ "+this.ranges.join(", ")+" ]"},n.prototype.clone=function(){return new n(this)},t.exports=n},{}],30:[function(e,t,a){function i(e){var t=e.fake,a=e.helpers;return this.zipCode=function(t){if("undefined"==typeof t){var i=e.definitions.address.postcode;t="string"==typeof i?i:e.random.arrayElement(i)}return a.replaceSymbols(t)},this.city=function(a){var i=["{{address.cityPrefix}} {{name.firstName}} {{address.citySuffix}}","{{address.cityPrefix}} {{name.firstName}}","{{name.firstName}} {{address.citySuffix}}","{{name.lastName}} {{address.citySuffix}}"];return"number"!=typeof a&&(a=e.random.number(i.length-1)),t(i[a])},this.cityPrefix=function(){return e.random.arrayElement(e.definitions.address.city_prefix)},this.citySuffix=function(){return e.random.arrayElement(e.definitions.address.city_suffix)},this.streetName=function(){var t,a=e.address.streetSuffix();switch(""!==a&&(a=" "+a),e.random.number(1)){case 0:t=e.name.lastName()+a;break;case 1:t=e.name.firstName()+a}return t},this.streetAddress=function(t){void 0===t&&(t=!1);var i="";switch(e.random.number(2)){case 0:i=a.replaceSymbolWithNumber("#####")+" "+e.address.streetName();break;case 1:i=a.replaceSymbolWithNumber("####")+" "+e.address.streetName();break;case 2:i=a.replaceSymbolWithNumber("###")+" "+e.address.streetName()}return t?i+" "+e.address.secondaryAddress():i},this.streetSuffix=function(){return e.random.arrayElement(e.definitions.address.street_suffix)},this.streetPrefix=function(){return e.random.arrayElement(e.definitions.address.street_prefix)},this.secondaryAddress=function(){return a.replaceSymbolWithNumber(e.random.arrayElement(["Apt. ###","Suite ###"]))},this.county=function(){return e.random.arrayElement(e.definitions.address.county)},this.country=function(){return e.random.arrayElement(e.definitions.address.country)},this.countryCode=function(){return e.random.arrayElement(e.definitions.address.country_code)},this.state=function(t){return e.random.arrayElement(e.definitions.address.state)},this.stateAbbr=function(){return e.random.arrayElement(e.definitions.address.state_abbr)},this.latitude=function(){return(e.random.number(18e5)/1e4-90).toFixed(4)},this.longitude=function(){return(e.random.number(36e5)/1e4-180).toFixed(4)},this}t.exports=i},{}],31:[function(e,t,a){var i=function(e){var t=this;return t.color=function(){return e.random.arrayElement(e.definitions.commerce.color)},t.department=function(t,a){return e.random.arrayElement(e.definitions.commerce.department)},t.productName=function(){return e.commerce.productAdjective()+" "+e.commerce.productMaterial()+" "+e.commerce.product()},t.price=function(e,t,a,i){return e=e||0,t=t||1e3,a=a||2,i=i||"",0>e||0>t?i+0:i+(Math.round((Math.random()*(t-e)+e)*Math.pow(10,a))/Math.pow(10,a)).toFixed(a)},t.productAdjective=function(){return e.random.arrayElement(e.definitions.commerce.product_name.adjective)},t.productMaterial=function(){return e.random.arrayElement(e.definitions.commerce.product_name.material)},t.product=function(){return e.random.arrayElement(e.definitions.commerce.product_name.product)},t};t.exports=i},{}],32:[function(e,t,a){var i=function(e){var t=e.fake;this.suffixes=function(){return e.definitions.company.suffix.slice(0)},this.companyName=function(a){var i=["{{name.lastName}} {{company.companySuffix}}","{{name.lastName}} - {{name.lastName}}","{{name.lastName}}, {{name.lastName}} and {{name.lastName}}"];return"number"!=typeof a&&(a=e.random.number(i.length-1)),t(i[a])},this.companySuffix=function(){return e.random.arrayElement(e.company.suffixes())},this.catchPhrase=function(){return t("{{company.catchPhraseAdjective}} {{company.catchPhraseDescriptor}} {{company.catchPhraseNoun}}")},this.bs=function(){return t("{{company.bsAdjective}} {{company.bsBuzz}} {{company.bsNoun}}")},this.catchPhraseAdjective=function(){return e.random.arrayElement(e.definitions.company.adjective)},this.catchPhraseDescriptor=function(){return e.random.arrayElement(e.definitions.company.descriptor)},this.catchPhraseNoun=function(){return e.random.arrayElement(e.definitions.company.noun)},this.bsAdjective=function(){return e.random.arrayElement(e.definitions.company.bs_adjective)},this.bsBuzz=function(){return e.random.arrayElement(e.definitions.company.bs_verb)},this.bsNoun=function(){return e.random.arrayElement(e.definitions.company.bs_noun)}};t.exports=i},{}],33:[function(e,t,a){var i=function(e){var t=this;return t.past=function(t,a){var i=a?new Date(Date.parse(a)):new Date,n={min:1e3,max:365*(t||1)*24*3600*1e3},r=i.getTime();return r-=e.random.number(n),i.setTime(r),i},t.future=function(t,a){var i=a?new Date(Date.parse(a)):new Date,n={min:1e3,max:365*(t||1)*24*3600*1e3},r=i.getTime();return r+=e.random.number(n),i.setTime(r),i},t.between=function(t,a){var i=Date.parse(t),n=e.random.number(Date.parse(a)-i),r=new Date(i+n);return r},t.recent=function(t){var a=new Date,i={min:1e3,max:24*(t||1)*3600*1e3},n=a.getTime();return n-=e.random.number(i),a.setTime(n),a},t.month=function(t){t=t||{};var a="wide";t.abbr&&(a="abbr"),t.context&&"undefined"!=typeof e.definitions.date.month[a+"_context"]&&(a+="_context");var i=e.definitions.date.month[a];return e.random.arrayElement(i)},t.weekday=function(t){t=t||{};var a="wide";t.abbr&&(a="abbr"),t.context&&"undefined"!=typeof e.definitions.date.weekday[a+"_context"]&&(a+="_context");var i=e.definitions.date.weekday[a];return e.random.arrayElement(i)},t};t.exports=i},{}],34:[function(e,t,a){function i(e){return this.fake=function t(a){var i="";if("string"!=typeof a||0===a.length)return i="string parameter is required!";var n=a.search("{{"),r=a.search("}}");if(-1===n&&-1===r)return a;var s=a.substr(n+2,r-n-2);s=s.replace("}}",""),s=s.replace("{{","");var o=s.split(".");if("undefined"==typeof e[o[0]])throw new Error("Invalid module: "+o[0]);if("undefined"==typeof e[o[0]][o[1]])throw new Error("Invalid method: "+o[0]+"."+o[1]);var c=e[o[0]][o[1]];return i=a.replace("{{"+s+"}}",c()),t(i)},this}t.exports=i},{}],35:[function(e,t,a){var i=function(e){var t=e.helpers,a=this;a.account=function(e){e=e||8;for(var a="",i=0;e>i;i++)a+="#";return e=null,t.replaceSymbolWithNumber(a)},a.accountName=function(){return[t.randomize(e.definitions.finance.account_type),"Account"].join(" ")},a.mask=function(e,a,i){e=0!=e&&e&&"undefined"!=typeof e?e:4,a=null===a?!0:a,i=null===i?!0:i;for(var n="",r=0;e>r;r++)n+="#";return n=i?["...",n].join(""):n,n=a?["(",n,")"].join(""):n,n=t.replaceSymbolWithNumber(n)},a.amount=function(e,t,a,i){return e=e||0,t=t||1e3,a=a||2,i=i||"",i+(Math.round((Math.random()*(t-e)+e)*Math.pow(10,a))/Math.pow(10,a)).toFixed(a); -},a.transactionType=function(){return t.randomize(e.definitions.finance.transaction_type)},a.currencyCode=function(){return e.random.objectElement(e.definitions.finance.currency).code},a.currencyName=function(){return e.random.objectElement(e.definitions.finance.currency,"key")},a.currencySymbol=function(){for(var t;!t;)t=e.random.objectElement(e.definitions.finance.currency).symbol;return t}};t.exports=i},{}],36:[function(e,t,a){var i=function(e){var t=this;return t.abbreviation=function(){return e.random.arrayElement(e.definitions.hacker.abbreviation)},t.adjective=function(){return e.random.arrayElement(e.definitions.hacker.adjective)},t.noun=function(){return e.random.arrayElement(e.definitions.hacker.noun)},t.verb=function(){return e.random.arrayElement(e.definitions.hacker.verb)},t.ingverb=function(){return e.random.arrayElement(e.definitions.hacker.ingverb)},t.phrase=function(){var a={abbreviation:t.abbreviation(),adjective:t.adjective(),ingverb:t.ingverb(),noun:t.noun(),verb:t.verb()},i=e.random.arrayElement(["If we {{verb}} the {{noun}}, we can get to the {{abbreviation}} {{noun}} through the {{adjective}} {{abbreviation}} {{noun}}!","We need to {{verb}} the {{adjective}} {{abbreviation}} {{noun}}!","Try to {{verb}} the {{abbreviation}} {{noun}}, maybe it will {{verb}} the {{adjective}} {{noun}}!","You can't {{verb}} the {{noun}} without {{ingverb}} the {{adjective}} {{abbreviation}} {{noun}}!","Use the {{adjective}} {{abbreviation}} {{noun}}, then you can {{verb}} the {{adjective}} {{noun}}!","The {{abbreviation}} {{noun}} is down, {{verb}} the {{adjective}} {{noun}} so we can {{verb}} the {{abbreviation}} {{noun}}!","{{ingverb}} the {{noun}} won't do anything, we need to {{verb}} the {{adjective}} {{abbreviation}} {{noun}}!","I'll {{verb}} the {{adjective}} {{abbreviation}} {{noun}}, that should {{noun}} the {{abbreviation}} {{noun}}!"]);return e.helpers.mustache(i,a)},t};t.exports=i},{}],37:[function(e,t,a){var i=function(e){var t=this;return t.randomize=function(t){return t=t||["a","b","c"],e.random.arrayElement(t)},t.slugify=function(e){return e=e||"",e.replace(/ /g,"-").replace(/[^\w\.\-]+/g,"")},t.replaceSymbolWithNumber=function(t,a){t=t||"",void 0===a&&(a="#");for(var i="",n=0;n?|\"])/gi,"").toLowerCase()},t.ip=function(){for(var t=function(){return e.random.number(255).toFixed(0)},a=[],i=0;4>i;i++)a[i]=t();return a.join(".")},t.userAgent=function(){return n.generate()},t.color=function(t,a,i){t=t||0,a=a||0,i=i||0;var n=Math.floor((e.random.number(256)+t)/2),r=Math.floor((e.random.number(256)+a)/2),s=Math.floor((e.random.number(256)+i)/2),o=n.toString(16),c=r.toString(16),u=s.toString(16);return"#"+(1===o.length?"0":"")+o+(1===c.length?"0":"")+c+(1===u.length?"0":"")+u},t.mac=function(){var e,t="";for(e=0;12>e;e++)t+=parseInt(16*Math.random()).toString(16),e%2==1&&11!=e&&(t+=":");return t},t.password=function(e,t,a,n){return e=e||15,"undefined"==typeof t&&(t=!1),i(e,t,a,n)}};t.exports=r},{"../vendor/password-generator.js":132,"../vendor/user-agent":133}],41:[function(e,t,a){t.exports=["#####","####","###"]},{}],42:[function(e,t,a){t.exports=["#{city_prefix} #{Name.first_name}#{city_suffix}","#{city_prefix} #{Name.first_name}","#{Name.first_name}#{city_suffix}","#{Name.last_name}#{city_suffix}"]},{}],43:[function(e,t,a){t.exports=["North","East","West","South","New","Lake","Port"]},{}],44:[function(e,t,a){t.exports=["town","ton","land","ville","berg","burgh","borough","bury","view","port","mouth","stad","furt","chester","mouth","fort","haven","side","shire"]},{}],45:[function(e,t,a){t.exports=["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica (the territory South of 60 deg S)","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island (Bouvetoya)","Brazil","British Indian Ocean Territory (Chagos Archipelago)","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Congo","Cook Islands","Costa Rica","Cote d'Ivoire","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Faroe Islands","Falkland Islands (Malvinas)","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and McDonald Islands","Holy See (Vatican City State)","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Democratic People's Republic of Korea","Republic of Korea","Kuwait","Kyrgyz Republic","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands Antilles","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Barthelemy","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Martin","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Slovakia (Slovak Republic)","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname","Svalbard & Jan Mayen Islands","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Taiwan","Tajikistan","Tanzania","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States of America","United States Minor Outlying Islands","Uruguay","Uzbekistan","Vanuatu","Venezuela","Vietnam","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"]},{}],46:[function(e,t,a){t.exports=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"]},{}],47:[function(e,t,a){t.exports=["Avon","Bedfordshire","Berkshire","Borders","Buckinghamshire","Cambridgeshire"]},{}],48:[function(e,t,a){t.exports=["United States of America"]},{}],49:[function(e,t,a){var i={};t.exports=i,i.city_prefix=e("./city_prefix"),i.city_suffix=e("./city_suffix"),i.county=e("./county"),i.country=e("./country"),i.country_code=e("./country_code"),i.building_number=e("./building_number"),i.street_suffix=e("./street_suffix"),i.secondary_address=e("./secondary_address"),i.postcode=e("./postcode"),i.postcode_by_state=e("./postcode_by_state"),i.state=e("./state"),i.state_abbr=e("./state_abbr"),i.time_zone=e("./time_zone"),i.city=e("./city"),i.street_name=e("./street_name"),i.street_address=e("./street_address"),i.default_country=e("./default_country")},{"./building_number":41,"./city":42,"./city_prefix":43,"./city_suffix":44,"./country":45,"./country_code":46,"./county":47,"./default_country":48,"./postcode":50,"./postcode_by_state":51,"./secondary_address":52,"./state":53,"./state_abbr":54,"./street_address":55,"./street_name":56,"./street_suffix":57,"./time_zone":58}],50:[function(e,t,a){t.exports=["#####","#####-####"]},{}],51:[function(e,t,a){arguments[4][50][0].apply(a,arguments)},{dup:50}],52:[function(e,t,a){t.exports=["Apt. ###","Suite ###"]},{}],53:[function(e,t,a){t.exports=["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]},{}],54:[function(e,t,a){t.exports=["AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"]},{}],55:[function(e,t,a){t.exports=["#{building_number} #{street_name}"]},{}],56:[function(e,t,a){t.exports=["#{Name.first_name} #{street_suffix}","#{Name.last_name} #{street_suffix}"]},{}],57:[function(e,t,a){t.exports=["Alley","Avenue","Branch","Bridge","Brook","Brooks","Burg","Burgs","Bypass","Camp","Canyon","Cape","Causeway","Center","Centers","Circle","Circles","Cliff","Cliffs","Club","Common","Corner","Corners","Course","Court","Courts","Cove","Coves","Creek","Crescent","Crest","Crossing","Crossroad","Curve","Dale","Dam","Divide","Drive","Drive","Drives","Estate","Estates","Expressway","Extension","Extensions","Fall","Falls","Ferry","Field","Fields","Flat","Flats","Ford","Fords","Forest","Forge","Forges","Fork","Forks","Fort","Freeway","Garden","Gardens","Gateway","Glen","Glens","Green","Greens","Grove","Groves","Harbor","Harbors","Haven","Heights","Highway","Hill","Hills","Hollow","Inlet","Inlet","Island","Island","Islands","Islands","Isle","Isle","Junction","Junctions","Key","Keys","Knoll","Knolls","Lake","Lakes","Land","Landing","Lane","Light","Lights","Loaf","Lock","Locks","Locks","Lodge","Lodge","Loop","Mall","Manor","Manors","Meadow","Meadows","Mews","Mill","Mills","Mission","Mission","Motorway","Mount","Mountain","Mountain","Mountains","Mountains","Neck","Orchard","Oval","Overpass","Park","Parks","Parkway","Parkways","Pass","Passage","Path","Pike","Pine","Pines","Place","Plain","Plains","Plains","Plaza","Plaza","Point","Points","Port","Port","Ports","Ports","Prairie","Prairie","Radial","Ramp","Ranch","Rapid","Rapids","Rest","Ridge","Ridges","River","Road","Road","Roads","Roads","Route","Row","Rue","Run","Shoal","Shoals","Shore","Shores","Skyway","Spring","Springs","Springs","Spur","Spurs","Square","Square","Squares","Squares","Station","Station","Stravenue","Stravenue","Stream","Stream","Street","Street","Streets","Summit","Summit","Terrace","Throughway","Trace","Track","Trafficway","Trail","Trail","Tunnel","Tunnel","Turnpike","Turnpike","Underpass","Union","Unions","Valley","Valleys","Via","Viaduct","View","Views","Village","Village","Villages","Ville","Vista","Vista","Walk","Walks","Wall","Way","Ways","Well","Wells"]},{}],58:[function(e,t,a){t.exports=["Pacific/Midway","Pacific/Pago_Pago","Pacific/Honolulu","America/Juneau","America/Los_Angeles","America/Tijuana","America/Denver","America/Phoenix","America/Chihuahua","America/Mazatlan","America/Chicago","America/Regina","America/Mexico_City","America/Mexico_City","America/Monterrey","America/Guatemala","America/New_York","America/Indiana/Indianapolis","America/Bogota","America/Lima","America/Lima","America/Halifax","America/Caracas","America/La_Paz","America/Santiago","America/St_Johns","America/Sao_Paulo","America/Argentina/Buenos_Aires","America/Guyana","America/Godthab","Atlantic/South_Georgia","Atlantic/Azores","Atlantic/Cape_Verde","Europe/Dublin","Europe/London","Europe/Lisbon","Europe/London","Africa/Casablanca","Africa/Monrovia","Etc/UTC","Europe/Belgrade","Europe/Bratislava","Europe/Budapest","Europe/Ljubljana","Europe/Prague","Europe/Sarajevo","Europe/Skopje","Europe/Warsaw","Europe/Zagreb","Europe/Brussels","Europe/Copenhagen","Europe/Madrid","Europe/Paris","Europe/Amsterdam","Europe/Berlin","Europe/Berlin","Europe/Rome","Europe/Stockholm","Europe/Vienna","Africa/Algiers","Europe/Bucharest","Africa/Cairo","Europe/Helsinki","Europe/Kiev","Europe/Riga","Europe/Sofia","Europe/Tallinn","Europe/Vilnius","Europe/Athens","Europe/Istanbul","Europe/Minsk","Asia/Jerusalem","Africa/Harare","Africa/Johannesburg","Europe/Moscow","Europe/Moscow","Europe/Moscow","Asia/Kuwait","Asia/Riyadh","Africa/Nairobi","Asia/Baghdad","Asia/Tehran","Asia/Muscat","Asia/Muscat","Asia/Baku","Asia/Tbilisi","Asia/Yerevan","Asia/Kabul","Asia/Yekaterinburg","Asia/Karachi","Asia/Karachi","Asia/Tashkent","Asia/Kolkata","Asia/Kolkata","Asia/Kolkata","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Dhaka","Asia/Colombo","Asia/Almaty","Asia/Novosibirsk","Asia/Rangoon","Asia/Bangkok","Asia/Bangkok","Asia/Jakarta","Asia/Krasnoyarsk","Asia/Shanghai","Asia/Chongqing","Asia/Hong_Kong","Asia/Urumqi","Asia/Kuala_Lumpur","Asia/Singapore","Asia/Taipei","Australia/Perth","Asia/Irkutsk","Asia/Ulaanbaatar","Asia/Seoul","Asia/Tokyo","Asia/Tokyo","Asia/Tokyo","Asia/Yakutsk","Australia/Darwin","Australia/Adelaide","Australia/Melbourne","Australia/Melbourne","Australia/Sydney","Australia/Brisbane","Australia/Hobart","Asia/Vladivostok","Pacific/Guam","Pacific/Port_Moresby","Asia/Magadan","Asia/Magadan","Pacific/Noumea","Pacific/Fiji","Asia/Kamchatka","Pacific/Majuro","Pacific/Auckland","Pacific/Auckland","Pacific/Tongatapu","Pacific/Fakaofo","Pacific/Apia"]},{}],59:[function(e,t,a){t.exports=["#{Name.name}","#{Company.name}"]},{}],60:[function(e,t,a){var i={};t.exports=i,i.name=e("./name"),i.version=e("./version"),i.author=e("./author")},{"./author":59,"./name":61,"./version":62}],61:[function(e,t,a){t.exports=["Redhold","Treeflex","Trippledex","Kanlam","Bigtax","Daltfresh","Toughjoyfax","Mat Lam Tam","Otcom","Tres-Zap","Y-Solowarm","Tresom","Voltsillam","Biodex","Greenlam","Viva","Matsoft","Temp","Zoolab","Subin","Rank","Job","Stringtough","Tin","It","Home Ing","Zamit","Sonsing","Konklab","Alpha","Latlux","Voyatouch","Alphazap","Holdlamis","Zaam-Dox","Sub-Ex","Quo Lux","Bamity","Ventosanzap","Lotstring","Hatity","Tempsoft","Overhold","Fixflex","Konklux","Zontrax","Tampflex","Span","Namfix","Transcof","Stim","Fix San","Sonair","Stronghold","Fintone","Y-find","Opela","Lotlux","Ronstring","Zathin","Duobam","Keylex"]},{}],62:[function(e,t,a){t.exports=["0.#.#","0.##","#.##","#.#","#.#.#"]},{}],63:[function(e,t,a){t.exports=["2011-10-12","2012-11-12","2015-11-11","2013-9-12"]},{}],64:[function(e,t,a){t.exports=["1234-2121-1221-1211","1212-1221-1121-1234","1211-1221-1234-2201","1228-1221-1221-1431"]},{}],65:[function(e,t,a){t.exports=["visa","mastercard","americanexpress","discover"]},{}],66:[function(e,t,a){var i={};t.exports=i,i.credit_card_numbers=e("./credit_card_numbers"),i.credit_card_expiry_dates=e("./credit_card_expiry_dates"),i.credit_card_types=e("./credit_card_types")},{"./credit_card_expiry_dates":63,"./credit_card_numbers":64,"./credit_card_types":65}],67:[function(e,t,a){t.exports=["###-###-####","(###) ###-####","1-###-###-####","###.###.####"]},{}],68:[function(e,t,a){var i={};t.exports=i,i.formats=e("./formats")},{"./formats":67}],69:[function(e,t,a){t.exports=["red","green","blue","yellow","purple","mint green","teal","white","black","orange","pink","grey","maroon","violet","turquoise","tan","sky blue","salmon","plum","orchid","olive","magenta","lime","ivory","indigo","gold","fuchsia","cyan","azure","lavender","silver"]},{}],70:[function(e,t,a){t.exports=["Books","Movies","Music","Games","Electronics","Computers","Home","Garden","Tools","Grocery","Health","Beauty","Toys","Kids","Baby","Clothing","Shoes","Jewelery","Sports","Outdoors","Automotive","Industrial"]},{}],71:[function(e,t,a){var i={};t.exports=i,i.color=e("./color"),i.department=e("./department"),i.product_name=e("./product_name")},{"./color":69,"./department":70,"./product_name":72}],72:[function(e,t,a){t.exports={adjective:["Small","Ergonomic","Rustic","Intelligent","Gorgeous","Incredible","Fantastic","Practical","Sleek","Awesome","Generic","Handcrafted","Handmade","Licensed","Refined","Unbranded","Tasty"],material:["Steel","Wooden","Concrete","Plastic","Cotton","Granite","Rubber","Metal","Soft","Fresh","Frozen"],product:["Chair","Car","Computer","Keyboard","Mouse","Bike","Ball","Gloves","Pants","Shirt","Table","Shoes","Hat","Towels","Soap","Tuna","Chicken","Fish","Cheese","Bacon","Pizza","Salad","Sausages","Chips"]}},{}],73:[function(e,t,a){t.exports=["Adaptive","Advanced","Ameliorated","Assimilated","Automated","Balanced","Business-focused","Centralized","Cloned","Compatible","Configurable","Cross-group","Cross-platform","Customer-focused","Customizable","Decentralized","De-engineered","Devolved","Digitized","Distributed","Diverse","Down-sized","Enhanced","Enterprise-wide","Ergonomic","Exclusive","Expanded","Extended","Face to face","Focused","Front-line","Fully-configurable","Function-based","Fundamental","Future-proofed","Grass-roots","Horizontal","Implemented","Innovative","Integrated","Intuitive","Inverse","Managed","Mandatory","Monitored","Multi-channelled","Multi-lateral","Multi-layered","Multi-tiered","Networked","Object-based","Open-architected","Open-source","Operative","Optimized","Optional","Organic","Organized","Persevering","Persistent","Phased","Polarised","Pre-emptive","Proactive","Profit-focused","Profound","Programmable","Progressive","Public-key","Quality-focused","Reactive","Realigned","Re-contextualized","Re-engineered","Reduced","Reverse-engineered","Right-sized","Robust","Seamless","Secured","Self-enabling","Sharable","Stand-alone","Streamlined","Switchable","Synchronised","Synergistic","Synergized","Team-oriented","Total","Triple-buffered","Universal","Up-sized","Upgradable","User-centric","User-friendly","Versatile","Virtual","Visionary","Vision-oriented"]},{}],74:[function(e,t,a){t.exports=["clicks-and-mortar","value-added","vertical","proactive","robust","revolutionary","scalable","leading-edge","innovative","intuitive","strategic","e-business","mission-critical","sticky","one-to-one","24/7","end-to-end","global","B2B","B2C","granular","frictionless","virtual","viral","dynamic","24/365","best-of-breed","killer","magnetic","bleeding-edge","web-enabled","interactive","dot-com","sexy","back-end","real-time","efficient","front-end","distributed","seamless","extensible","turn-key","world-class","open-source","cross-platform","cross-media","synergistic","bricks-and-clicks","out-of-the-box","enterprise","integrated","impactful","wireless","transparent","next-generation","cutting-edge","user-centric","visionary","customized","ubiquitous","plug-and-play","collaborative","compelling","holistic","rich"]},{}],75:[function(e,t,a){t.exports=["synergies","web-readiness","paradigms","markets","partnerships","infrastructures","platforms","initiatives","channels","eyeballs","communities","ROI","solutions","e-tailers","e-services","action-items","portals","niches","technologies","content","vortals","supply-chains","convergence","relationships","architectures","interfaces","e-markets","e-commerce","systems","bandwidth","infomediaries","models","mindshare","deliverables","users","schemas","networks","applications","metrics","e-business","functionalities","experiences","web services","methodologies"]},{}],76:[function(e,t,a){t.exports=["implement","utilize","integrate","streamline","optimize","evolve","transform","embrace","enable","orchestrate","leverage","reinvent","aggregate","architect","enhance","incentivize","morph","empower","envisioneer","monetize","harness","facilitate","seize","disintermediate","synergize","strategize","deploy","brand","grow","target","syndicate","synthesize","deliver","mesh","incubate","engage","maximize","benchmark","expedite","reintermediate","whiteboard","visualize","repurpose","innovate","scale","unleash","drive","extend","engineer","revolutionize","generate","exploit","transition","e-enable","iterate","cultivate","matrix","productize","redefine","recontextualize"]},{}],77:[function(e,t,a){t.exports=["24 hour","24/7","3rd generation","4th generation","5th generation","6th generation","actuating","analyzing","asymmetric","asynchronous","attitude-oriented","background","bandwidth-monitored","bi-directional","bifurcated","bottom-line","clear-thinking","client-driven","client-server","coherent","cohesive","composite","context-sensitive","contextually-based","content-based","dedicated","demand-driven","didactic","directional","discrete","disintermediate","dynamic","eco-centric","empowering","encompassing","even-keeled","executive","explicit","exuding","fault-tolerant","foreground","fresh-thinking","full-range","global","grid-enabled","heuristic","high-level","holistic","homogeneous","human-resource","hybrid","impactful","incremental","intangible","interactive","intermediate","leading edge","local","logistical","maximized","methodical","mission-critical","mobile","modular","motivating","multimedia","multi-state","multi-tasking","national","needs-based","neutral","next generation","non-volatile","object-oriented","optimal","optimizing","radical","real-time","reciprocal","regional","responsive","scalable","secondary","solution-oriented","stable","static","systematic","systemic","system-worthy","tangible","tertiary","transitional","uniform","upward-trending","user-facing","value-added","web-enabled","well-modulated","zero administration","zero defect","zero tolerance"]},{}],78:[function(e,t,a){var i={};t.exports=i,i.suffix=e("./suffix"),i.adjective=e("./adjective"),i.descriptor=e("./descriptor"),i.noun=e("./noun"),i.bs_verb=e("./bs_verb"),i.bs_adjective=e("./bs_adjective"),i.bs_noun=e("./bs_noun"),i.name=e("./name")},{"./adjective":73,"./bs_adjective":74,"./bs_noun":75,"./bs_verb":76,"./descriptor":77,"./name":79,"./noun":80,"./suffix":81}],79:[function(e,t,a){t.exports=["#{Name.last_name} #{suffix}","#{Name.last_name}-#{Name.last_name}","#{Name.last_name}, #{Name.last_name} and #{Name.last_name}"]},{}],80:[function(e,t,a){t.exports=["ability","access","adapter","algorithm","alliance","analyzer","application","approach","architecture","archive","artificial intelligence","array","attitude","benchmark","budgetary management","capability","capacity","challenge","circuit","collaboration","complexity","concept","conglomeration","contingency","core","customer loyalty","database","data-warehouse","definition","emulation","encoding","encryption","extranet","firmware","flexibility","focus group","forecast","frame","framework","function","functionalities","Graphic Interface","groupware","Graphical User Interface","hardware","help-desk","hierarchy","hub","implementation","info-mediaries","infrastructure","initiative","installation","instruction set","interface","internet solution","intranet","knowledge user","knowledge base","local area network","leverage","matrices","matrix","methodology","middleware","migration","model","moderator","monitoring","moratorium","neural-net","open architecture","open system","orchestration","paradigm","parallelism","policy","portal","pricing structure","process improvement","product","productivity","project","projection","protocol","secured line","service-desk","software","solution","standardization","strategy","structure","success","superstructure","support","synergy","system engine","task-force","throughput","time-frame","toolset","utilisation","website","workforce"]; -},{}],81:[function(e,t,a){t.exports=["Inc","and Sons","LLC","Group"]},{}],82:[function(e,t,a){t.exports=["/34##-######-####L/","/37##-######-####L/"]},{}],83:[function(e,t,a){t.exports=["/30[0-5]#-######-###L/","/368#-######-###L/"]},{}],84:[function(e,t,a){t.exports=["/6011-####-####-###L/","/65##-####-####-###L/","/64[4-9]#-####-####-###L/","/6011-62##-####-####-###L/","/65##-62##-####-####-###L/","/64[4-9]#-62##-####-####-###L/"]},{}],85:[function(e,t,a){var i={};t.exports=i,i.visa=e("./visa"),i.mastercard=e("./mastercard"),i.discover=e("./discover"),i.american_express=e("./american_express"),i.diners_club=e("./diners_club"),i.jcb=e("./jcb"),i["switch"]=e("./switch"),i.solo=e("./solo"),i.maestro=e("./maestro"),i.laser=e("./laser")},{"./american_express":82,"./diners_club":83,"./discover":84,"./jcb":86,"./laser":87,"./maestro":88,"./mastercard":89,"./solo":90,"./switch":91,"./visa":92}],86:[function(e,t,a){t.exports=["/3528-####-####-###L/","/3529-####-####-###L/","/35[3-8]#-####-####-###L/"]},{}],87:[function(e,t,a){t.exports=["/6304###########L/","/6706###########L/","/6771###########L/","/6709###########L/","/6304#########{5,6}L/","/6706#########{5,6}L/","/6771#########{5,6}L/","/6709#########{5,6}L/"]},{}],88:[function(e,t,a){t.exports=["/50#{9,16}L/","/5[6-8]#{9,16}L/","/56##{9,16}L/"]},{}],89:[function(e,t,a){t.exports=["/5[1-5]##-####-####-###L/","/6771-89##-####-###L/"]},{}],90:[function(e,t,a){t.exports=["/6767-####-####-###L/","/6767-####-####-####-#L/","/6767-####-####-####-##L/"]},{}],91:[function(e,t,a){t.exports=["/6759-####-####-###L/","/6759-####-####-####-#L/","/6759-####-####-####-##L/"]},{}],92:[function(e,t,a){t.exports=["/4###########L/","/4###-####-####-###L/"]},{}],93:[function(e,t,a){var i={};t.exports=i,i.month=e("./month"),i.weekday=e("./weekday")},{"./month":94,"./weekday":95}],94:[function(e,t,a){t.exports={wide:["January","February","March","April","May","June","July","August","September","October","November","December"],wide_context:["January","February","March","April","May","June","July","August","September","October","November","December"],abbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],abbr_context:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}},{}],95:[function(e,t,a){t.exports={wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],wide_context:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],abbr_context:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]}},{}],96:[function(e,t,a){t.exports=["Checking","Savings","Money Market","Investment","Home Loan","Credit Card","Auto Loan","Personal Loan"]},{}],97:[function(e,t,a){t.exports={"UAE Dirham":{code:"AED",symbol:""},Afghani:{code:"AFN",symbol:"؋"},Lek:{code:"ALL",symbol:"Lek"},"Armenian Dram":{code:"AMD",symbol:""},"Netherlands Antillian Guilder":{code:"ANG",symbol:"ƒ"},Kwanza:{code:"AOA",symbol:""},"Argentine Peso":{code:"ARS",symbol:"$"},"Australian Dollar":{code:"AUD",symbol:"$"},"Aruban Guilder":{code:"AWG",symbol:"ƒ"},"Azerbaijanian Manat":{code:"AZN",symbol:"ман"},"Convertible Marks":{code:"BAM",symbol:"KM"},"Barbados Dollar":{code:"BBD",symbol:"$"},Taka:{code:"BDT",symbol:""},"Bulgarian Lev":{code:"BGN",symbol:"лв"},"Bahraini Dinar":{code:"BHD",symbol:""},"Burundi Franc":{code:"BIF",symbol:""},"Bermudian Dollar (customarily known as Bermuda Dollar)":{code:"BMD",symbol:"$"},"Brunei Dollar":{code:"BND",symbol:"$"},"Boliviano Mvdol":{code:"BOB BOV",symbol:"$b"},"Brazilian Real":{code:"BRL",symbol:"R$"},"Bahamian Dollar":{code:"BSD",symbol:"$"},Pula:{code:"BWP",symbol:"P"},"Belarussian Ruble":{code:"BYR",symbol:"p."},"Belize Dollar":{code:"BZD",symbol:"BZ$"},"Canadian Dollar":{code:"CAD",symbol:"$"},"Congolese Franc":{code:"CDF",symbol:""},"Swiss Franc":{code:"CHF",symbol:"CHF"},"Chilean Peso Unidades de fomento":{code:"CLP CLF",symbol:"$"},"Yuan Renminbi":{code:"CNY",symbol:"¥"},"Colombian Peso Unidad de Valor Real":{code:"COP COU",symbol:"$"},"Costa Rican Colon":{code:"CRC",symbol:"₡"},"Cuban Peso Peso Convertible":{code:"CUP CUC",symbol:"₱"},"Cape Verde Escudo":{code:"CVE",symbol:""},"Czech Koruna":{code:"CZK",symbol:"Kč"},"Djibouti Franc":{code:"DJF",symbol:""},"Danish Krone":{code:"DKK",symbol:"kr"},"Dominican Peso":{code:"DOP",symbol:"RD$"},"Algerian Dinar":{code:"DZD",symbol:""},Kroon:{code:"EEK",symbol:""},"Egyptian Pound":{code:"EGP",symbol:"£"},Nakfa:{code:"ERN",symbol:""},"Ethiopian Birr":{code:"ETB",symbol:""},Euro:{code:"EUR",symbol:"€"},"Fiji Dollar":{code:"FJD",symbol:"$"},"Falkland Islands Pound":{code:"FKP",symbol:"£"},"Pound Sterling":{code:"GBP",symbol:"£"},Lari:{code:"GEL",symbol:""},Cedi:{code:"GHS",symbol:""},"Gibraltar Pound":{code:"GIP",symbol:"£"},Dalasi:{code:"GMD",symbol:""},"Guinea Franc":{code:"GNF",symbol:""},Quetzal:{code:"GTQ",symbol:"Q"},"Guyana Dollar":{code:"GYD",symbol:"$"},"Hong Kong Dollar":{code:"HKD",symbol:"$"},Lempira:{code:"HNL",symbol:"L"},"Croatian Kuna":{code:"HRK",symbol:"kn"},"Gourde US Dollar":{code:"HTG USD",symbol:""},Forint:{code:"HUF",symbol:"Ft"},Rupiah:{code:"IDR",symbol:"Rp"},"New Israeli Sheqel":{code:"ILS",symbol:"₪"},"Indian Rupee":{code:"INR",symbol:""},"Indian Rupee Ngultrum":{code:"INR BTN",symbol:""},"Iraqi Dinar":{code:"IQD",symbol:""},"Iranian Rial":{code:"IRR",symbol:"﷼"},"Iceland Krona":{code:"ISK",symbol:"kr"},"Jamaican Dollar":{code:"JMD",symbol:"J$"},"Jordanian Dinar":{code:"JOD",symbol:""},Yen:{code:"JPY",symbol:"¥"},"Kenyan Shilling":{code:"KES",symbol:""},Som:{code:"KGS",symbol:"лв"},Riel:{code:"KHR",symbol:"៛"},"Comoro Franc":{code:"KMF",symbol:""},"North Korean Won":{code:"KPW",symbol:"₩"},Won:{code:"KRW",symbol:"₩"},"Kuwaiti Dinar":{code:"KWD",symbol:""},"Cayman Islands Dollar":{code:"KYD",symbol:"$"},Tenge:{code:"KZT",symbol:"лв"},Kip:{code:"LAK",symbol:"₭"},"Lebanese Pound":{code:"LBP",symbol:"£"},"Sri Lanka Rupee":{code:"LKR",symbol:"₨"},"Liberian Dollar":{code:"LRD",symbol:"$"},"Lithuanian Litas":{code:"LTL",symbol:"Lt"},"Latvian Lats":{code:"LVL",symbol:"Ls"},"Libyan Dinar":{code:"LYD",symbol:""},"Moroccan Dirham":{code:"MAD",symbol:""},"Moldovan Leu":{code:"MDL",symbol:""},"Malagasy Ariary":{code:"MGA",symbol:""},Denar:{code:"MKD",symbol:"ден"},Kyat:{code:"MMK",symbol:""},Tugrik:{code:"MNT",symbol:"₮"},Pataca:{code:"MOP",symbol:""},Ouguiya:{code:"MRO",symbol:""},"Mauritius Rupee":{code:"MUR",symbol:"₨"},Rufiyaa:{code:"MVR",symbol:""},Kwacha:{code:"MWK",symbol:""},"Mexican Peso Mexican Unidad de Inversion (UDI)":{code:"MXN MXV",symbol:"$"},"Malaysian Ringgit":{code:"MYR",symbol:"RM"},Metical:{code:"MZN",symbol:"MT"},Naira:{code:"NGN",symbol:"₦"},"Cordoba Oro":{code:"NIO",symbol:"C$"},"Norwegian Krone":{code:"NOK",symbol:"kr"},"Nepalese Rupee":{code:"NPR",symbol:"₨"},"New Zealand Dollar":{code:"NZD",symbol:"$"},"Rial Omani":{code:"OMR",symbol:"﷼"},"Balboa US Dollar":{code:"PAB USD",symbol:"B/."},"Nuevo Sol":{code:"PEN",symbol:"S/."},Kina:{code:"PGK",symbol:""},"Philippine Peso":{code:"PHP",symbol:"Php"},"Pakistan Rupee":{code:"PKR",symbol:"₨"},Zloty:{code:"PLN",symbol:"zł"},Guarani:{code:"PYG",symbol:"Gs"},"Qatari Rial":{code:"QAR",symbol:"﷼"},"New Leu":{code:"RON",symbol:"lei"},"Serbian Dinar":{code:"RSD",symbol:"Дин."},"Russian Ruble":{code:"RUB",symbol:"руб"},"Rwanda Franc":{code:"RWF",symbol:""},"Saudi Riyal":{code:"SAR",symbol:"﷼"},"Solomon Islands Dollar":{code:"SBD",symbol:"$"},"Seychelles Rupee":{code:"SCR",symbol:"₨"},"Sudanese Pound":{code:"SDG",symbol:""},"Swedish Krona":{code:"SEK",symbol:"kr"},"Singapore Dollar":{code:"SGD",symbol:"$"},"Saint Helena Pound":{code:"SHP",symbol:"£"},Leone:{code:"SLL",symbol:""},"Somali Shilling":{code:"SOS",symbol:"S"},"Surinam Dollar":{code:"SRD",symbol:"$"},Dobra:{code:"STD",symbol:""},"El Salvador Colon US Dollar":{code:"SVC USD",symbol:"$"},"Syrian Pound":{code:"SYP",symbol:"£"},Lilangeni:{code:"SZL",symbol:""},Baht:{code:"THB",symbol:"฿"},Somoni:{code:"TJS",symbol:""},Manat:{code:"TMT",symbol:""},"Tunisian Dinar":{code:"TND",symbol:""},"Pa'anga":{code:"TOP",symbol:""},"Turkish Lira":{code:"TRY",symbol:"TL"},"Trinidad and Tobago Dollar":{code:"TTD",symbol:"TT$"},"New Taiwan Dollar":{code:"TWD",symbol:"NT$"},"Tanzanian Shilling":{code:"TZS",symbol:""},Hryvnia:{code:"UAH",symbol:"₴"},"Uganda Shilling":{code:"UGX",symbol:""},"US Dollar":{code:"USD",symbol:"$"},"Peso Uruguayo Uruguay Peso en Unidades Indexadas":{code:"UYU UYI",symbol:"$U"},"Uzbekistan Sum":{code:"UZS",symbol:"лв"},"Bolivar Fuerte":{code:"VEF",symbol:"Bs"},Dong:{code:"VND",symbol:"₫"},Vatu:{code:"VUV",symbol:""},Tala:{code:"WST",symbol:""},"CFA Franc BEAC":{code:"XAF",symbol:""},Silver:{code:"XAG",symbol:""},Gold:{code:"XAU",symbol:""},"Bond Markets Units European Composite Unit (EURCO)":{code:"XBA",symbol:""},"European Monetary Unit (E.M.U.-6)":{code:"XBB",symbol:""},"European Unit of Account 9(E.U.A.-9)":{code:"XBC",symbol:""},"European Unit of Account 17(E.U.A.-17)":{code:"XBD",symbol:""},"East Caribbean Dollar":{code:"XCD",symbol:"$"},SDR:{code:"XDR",symbol:""},"UIC-Franc":{code:"XFU",symbol:""},"CFA Franc BCEAO":{code:"XOF",symbol:""},Palladium:{code:"XPD",symbol:""},"CFP Franc":{code:"XPF",symbol:""},Platinum:{code:"XPT",symbol:""},"Codes specifically reserved for testing purposes":{code:"XTS",symbol:""},"Yemeni Rial":{code:"YER",symbol:"﷼"},Rand:{code:"ZAR",symbol:"R"},"Rand Loti":{code:"ZAR LSL",symbol:""},"Rand Namibia Dollar":{code:"ZAR NAD",symbol:""},"Zambian Kwacha":{code:"ZMK",symbol:""},"Zimbabwe Dollar":{code:"ZWL",symbol:""}}},{}],98:[function(e,t,a){var i={};t.exports=i,i.account_type=e("./account_type"),i.transaction_type=e("./transaction_type"),i.currency=e("./currency")},{"./account_type":96,"./currency":97,"./transaction_type":99}],99:[function(e,t,a){t.exports=["deposit","withdrawal","payment","invoice"]},{}],100:[function(e,t,a){t.exports=["TCP","HTTP","SDD","RAM","GB","CSS","SSL","AGP","SQL","FTP","PCI","AI","ADP","RSS","XML","EXE","COM","HDD","THX","SMTP","SMS","USB","PNG","SAS","IB","SCSI","JSON","XSS","JBOD"]},{}],101:[function(e,t,a){t.exports=["auxiliary","primary","back-end","digital","open-source","virtual","cross-platform","redundant","online","haptic","multi-byte","bluetooth","wireless","1080p","neural","optical","solid state","mobile"]},{}],102:[function(e,t,a){var i={};t.exports=i,i.abbreviation=e("./abbreviation"),i.adjective=e("./adjective"),i.noun=e("./noun"),i.verb=e("./verb"),i.ingverb=e("./ingverb")},{"./abbreviation":100,"./adjective":101,"./ingverb":103,"./noun":104,"./verb":105}],103:[function(e,t,a){t.exports=["backing up","bypassing","hacking","overriding","compressing","copying","navigating","indexing","connecting","generating","quantifying","calculating","synthesizing","transmitting","programming","parsing"]},{}],104:[function(e,t,a){t.exports=["driver","protocol","bandwidth","panel","microchip","program","port","card","array","interface","system","sensor","firewall","hard drive","pixel","alarm","feed","monitor","application","transmitter","bus","circuit","capacitor","matrix"]},{}],105:[function(e,t,a){t.exports=["back up","bypass","hack","override","compress","copy","navigate","index","connect","generate","quantify","calculate","synthesize","input","transmit","program","reboot","parse"]},{}],106:[function(e,t,a){var i={};t.exports=i,i.title="English",i.separator=" & ",i.address=e("./address"),i.credit_card=e("./credit_card"),i.company=e("./company"),i.internet=e("./internet"),i.lorem=e("./lorem"),i.name=e("./name"),i.phone_number=e("./phone_number"),i.cell_phone=e("./cell_phone"),i.business=e("./business"),i.commerce=e("./commerce"),i.team=e("./team"),i.hacker=e("./hacker"),i.app=e("./app"),i.finance=e("./finance"),i.date=e("./date")},{"./address":49,"./app":60,"./business":66,"./cell_phone":68,"./commerce":71,"./company":78,"./credit_card":85,"./date":93,"./finance":98,"./hacker":102,"./internet":110,"./lorem":111,"./name":115,"./phone_number":122,"./team":124}],107:[function(e,t,a){t.exports=["https://s3.amazonaws.com/uifaces/faces/twitter/jarjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahdif/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sprayaga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruzinav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Skyhartman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moscoz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurafire/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/91bilal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/igorgarybaldi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malykhinv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelhelin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kushsolitary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowshade/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/holdenweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heyimjuani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/envex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/unterdreht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/collegeman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peejfancher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andyisonline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ultragex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fuck_you_two/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adellecharles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ateneupopular/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetalpbalkan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Stievius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerem/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osvaldas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelceballos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrykoblentz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peterlandt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weglov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandclay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flame_kaizar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetsulek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolasfolliot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayrobinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorerixon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michzen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markjenkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolai_larsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noxdzine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alagoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/idiot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadengle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutlu82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/simobenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vocino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guiiipontes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soyjavi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshaustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomaslau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VinThomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ManikRathee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/langate/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cemshid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leemunroe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_shahedk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BillSKenney/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/divya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshhemsley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sindresorhus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soffes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/9lessons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linux29/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Chakintosh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anaami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joreira/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shadeed9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottkclark/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jedbridges/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salleedesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marakasina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BrianPurkiss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelmartinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bublienko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devankoshal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ZacharyZorbas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timmillwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuasortino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/damenleeturks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomas_janousek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herrhaase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/RussellBishop/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brajeshwar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nachtmeister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cbracco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bermonpainter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdullindenis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isacosta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suprb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yalozhkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chandlervdw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamgarth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_victa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/commadelimited/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roybarberuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/axel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladarbatov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ffbel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/syropian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ankitind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/traneblow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flashmurphy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ChrisFarina78/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baliomega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschamt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jm_denis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kennyadr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chatyrko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dingyi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mds/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terryxlife/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaroni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kinday/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prrstn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eduardostuart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhilipsiva/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/GavicoInd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rohixx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakesimkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leeiio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjrus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uberschizo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefoundry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/claudioguglieri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ripplemdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/exentrich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jakemoore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joaoedumedeiros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/poormini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tereshenkov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keryilmaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haydn_woods/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/llun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sgaurav_baghel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jamiebrittain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/badlittleduck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pifagor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agromov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benefritz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/erwanhesry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diesellaws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiaha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/koridhandy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewcohen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smaczny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gonzalorobaina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nandini_m/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sydlawrence/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdharrison/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgerken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lewisainslie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliecwaite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robbschiller/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flexrs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattdetails/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raquelwilson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrmartineau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/opnsrce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hgharrygo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximseshuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxalex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samihah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chanpory/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sharvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josemarques/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jefffis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krystalfister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lokesh_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedamianhdez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dpmachado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/funwatercat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timothycd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ivanfilipovbg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/picard102/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcobarbosa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krasnoukhov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/g3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ademilter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickdt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/operatino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bungiwan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugomano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/logorado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dc_user/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/horaciobella/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SlaapMe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teeragit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqonicd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ilya_pestov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewarrow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssiskind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/HenryHoffman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdsaunders/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamsxu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousoffice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themadray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michigangraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kohette/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nickfratter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/runningskull/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madysondesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenton_clarke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyshen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bradenhamm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurtinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amanruzaini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyhaggard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Karimmove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronalfred/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wtrsld/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jitachi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/therealmarvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pmeissner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ooomz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chacky14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jesseddy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinmatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shanehudson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/IsaryAmairani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arthurholcombe1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andychipster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/boxmodel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ehsandiary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/LucasPerdidao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shalt0ni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swaplord/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaelifa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plbabin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guillemboti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arindam_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/renbyrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thiagovernetti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmillspaysbills/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikemai2awesome/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jervo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mekal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sta1ex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robergd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipecsl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrea211087/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/garand/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhooyenga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abovefunction/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pcridesagain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/randomlies/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BryanHorsey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heykenneth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dahparra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allthingssmitty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvernon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beweinreich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/increase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falvarad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxndrustinov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souuf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/orkuncaylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AM_Kn2/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gearpixels/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bassamology/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vimarethomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kosmar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SULiik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrjamesnoble/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silvanmuhlemann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shaneIxD/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nacho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yigitpinarbasi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buzzusborne/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronkwhite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rmlewisuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giancarlon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nbirckel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_nny_m_cher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sdidonato/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atariboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abotap/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karalek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psdesignuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ludwiczakpawel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nemanjaivanovic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baluli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmadajmi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vovkasolovev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samgrover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derienzo777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonathansimmons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelsonjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/S0ufi4n3/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xtopherpaul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oaktreemedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nateschulte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/findingjenny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/namankreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyzotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/we_social/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leehambley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/solid_color/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abelcabans/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilderbach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kkusaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jordyvdboom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosgavina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pechkinator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vc27/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdbannon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/croakx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerihenare/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catadeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gcmorley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duivvv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschadroste/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorDubugras/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wintopia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattbilotti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taylorling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/megdraws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meln1ks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahmoudmetwally/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Silveredge9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekebradley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/happypeter1983/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travis_arnold/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artem_kostenko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adobi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daykiine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alek_djuric/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scips/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelmendes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrhee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alsobrooks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mcflydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/santi_urso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allfordesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stayuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bertboerland/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marosholly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamnac/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cynthiasavard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muringa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hiemil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jackiesaik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zacsnider/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iduuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antjanus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aroon_sharma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dshster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thehacker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelbrooksjr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanmclaughlin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/clubb3rry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taybenlor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xripunov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/myastro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adityasutomo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/digitalmaverick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hjartstrorn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itolmach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vaughanmoffitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdots/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isnifer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeysafonov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scrapdnb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrismj83/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitorleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sokaniwaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zaki3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/illyzoren/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mocabyte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmanince/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/djsherman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidhemphill/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/waghner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/necodymiconer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/praveen_vijaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbrucci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cliffseal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travishines/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kuldarkalvik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Elt_n/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/phillapier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okseanjay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/id835559/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kudretkeskin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anjhero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duck4fuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scott_riley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noufalibrahim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/h1brd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borges_marcos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devinhalladay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ciaranr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefooo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikebeecham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tonymillion/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuaraichur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/irae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petrangr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmitriychuta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliegann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arashmanteghi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ainsleywagon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/svenlen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/faisalabid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beshur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlyson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dutchnadia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teddyzetterlund/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samuelkraft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aoimedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/toddrew/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codepoet_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artvavs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benoitboucart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jomarmen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolmarlopez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/creartinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/homka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gaborenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinclediere/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximsorokin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plasticine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j2deme/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peachananr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kapaluccio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/de_ascanio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dawidwu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpatey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/popey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rehatkathuria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_purplebunny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/1markiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ajaxy_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenmurrell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dudestein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskarlevinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorstuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nehfy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vicivadeline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leandrovaranda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottgallant/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victor_haydin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawrb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryhanhassan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amayvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_brixen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karolkrakowiak_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herkulano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geran7/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cggaurav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_witko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lososina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/polarity/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattlat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonburke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/constantx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teylorfeliz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigelimeliah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rachelreveley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reabo101/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rahmeen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickyyean/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j04ntoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spbroma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sebashton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpenico/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/francis_vega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oktayelipek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kikillo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbianz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrygerard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BroumiYoussef/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/0therplanet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilalsiddique1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ionuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grrr_nl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/liminha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rawdiggie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryandownie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sethlouey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pixage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arpitnj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/switmer777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josevnclch/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kanickairaj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/puzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tbakdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/besbujupi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supjoey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lowie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linkibol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balintorosz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imcoding/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agustincruiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gusoto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasschrijer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/superoutman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kalmerrautam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielizalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gojeanyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidbaldie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_vojto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laurengray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mymyboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nellleo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marciotoledo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ninjad3m0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/to_soham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hasslunsford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muridrahhal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/levisan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grahamkennery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepetitogre/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antongenkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nessoila/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amandabuzard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/safrankov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cocolero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dss49/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matt3224/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluesix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/quailandquasar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AlbertoCococi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepinski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sementiy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhudobivnik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thibaut_re/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olgary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shojberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mtolokonnikov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bereto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naupintos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wegotvices/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xadhix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/macxim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rodnylobos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madcampos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebyvadim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartoszdawydzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supervova/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markretzloff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vonachoo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darylws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stevedesigner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mylesb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herbigt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/depaulawagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gizmeedevil1991/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_scottburgess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lisovsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidsasda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artd_sign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/YoungCutlass/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mgonto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itstotallyamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorquinn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmond/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oksanafrewer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zauerkraut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkeithmason/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nitinhayaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lmjabreu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mandalareopens/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinkleft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ponchomendivil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juamperro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brunodesign1206/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caseycavanagh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/luxe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dotgridline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spedwig/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madewulf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattsapii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/helderleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisstumph/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayphen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nsamoylov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisvanderkooi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justme_timothyg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/otozk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prinzadi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gu5taf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cyril_gaillard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_kobelyatsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daniloc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nwdsha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/romanbulah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/skkirilov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dvdwinden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dannol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thekevinjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jwalter14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timgthomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buddhasource/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxpiper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thatonetommy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diansigitp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adrienths/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klimmka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gkaam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekcramer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyyo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerrsoft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xalionmalik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edhenderson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keyuri85/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roxanejammet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kimcool/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edkf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alessandroribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacksonlatka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebronjennan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kostaspt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karlkanall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moynihan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danpliego/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saulihirvi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wesleytrankin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fjaguero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bowbrick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mashaaaaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yassiryahya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dparrelli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fotomagin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aka_james/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/denisepires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqbalperkasa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martinansty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jarsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_oy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielrosser/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malgordon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlfairclough/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelabehsera/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierrestoffe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enjoythetau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/loganjlambert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpeezy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyginnivan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michalhron/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/msveet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lingeswaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolsvein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peter576/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reideiredale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joeymurdah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raphaelnikson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mvdheuvel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maxlinderman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jimmuirhead/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/begreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/frankiefreesbie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robturlinckx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Talbi_ConSept/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/longlivemyword/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vanchesz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maiklam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hermanobrother/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rez___a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregsqueeb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/greenbes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_ragzor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anthonysukow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fluidbrush/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dactrtr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jehnglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bergmartin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugocornejo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_kkga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dzantievm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawalazar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sovesove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonsgotwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byryan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vytautas_a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizhgan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cicerobr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshelmersson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d33pthought/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davecraige/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nckjrvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexandermayes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jcubic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigrcoles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bagawarman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rob_thomas10/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cofla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maikelk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtgibbons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russell_baylis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhesslow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codysanfilippo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/webtanya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebybrenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dcalonaci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perfectflow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjsiii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saarabpreet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kumarrajan12123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamsteffen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themikenagle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ceekaytweet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrybolt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/conspirator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dallasbpeters/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n3dmax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terpimost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirillz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byrnecore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j_drake_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russoedu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hoangloi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tobysaxon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gofrasdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dimaposnyy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjisousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okandungel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/billyroshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskamaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/motionthinks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/knilob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashocka18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marrimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartjo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/omnizya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ernestsemerda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andreas_pr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edgarchris99/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasgeisen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gseguin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joannefournier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/demersdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adammarsbar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nasirwd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n_tassone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/javorszky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themrdave/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yecidsm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicollerich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/canapud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicoleglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/judzhin_miles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/designervzm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kianoshp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evandrix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alterchuca/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhrubo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ma_tiax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssbb_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dorphern/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mauriolg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bruno_mart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mactopus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_winslet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joemdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Shriiiiimp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacobbennett/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nfedoroff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamglimy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allagringaus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aiiaiiaii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olaolusoga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buryaknick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wim1k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicklacke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a1chapone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/steynviljoen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/strikewan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryankirkman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewabogado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doooon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jagan123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariffsetiawan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elenadissi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mwarkentin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrymeier_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_garcia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmackerman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borantula/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/konus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spacewood_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryuchi311/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evanshajed/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tristanlegros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shoaib253/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aislinnkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okcoker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timpetricola/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunshinedgirl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleclarsoniv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nomidesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petebernardo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottiedude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/millinet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imsoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imammuht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benjamin_knight/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nepdud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joki4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lanceguyatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bboy1895/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amywebbb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rweve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haruintesettden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ricburton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelshd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/batsirai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/primozcigler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jffgrdnr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/8d3k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geneseleznev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/al_li/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souperphly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mslarkina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/2fockus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdavis565/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xiel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/turkutuuli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxward/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebinoclard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauravjassal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidmerrique/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mdsisto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewofficer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kojourin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnirmal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_shiznit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aluisio_azevedo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cloudstudio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvierich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexivanichkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fran_mchamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perretmagali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/betraydan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cadikkara/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matbeedotcom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyworboys/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bpartridge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelkoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silv3rgvn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alevizio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnsmithagency/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lawlbwoy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitor376/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/desastrozo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thimo_cz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jasonmarkjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lhausermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xravil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guischmitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vigobronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panghal0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelkooreman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/surgeonist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/christianoliff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caspergrl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkarna/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ipavelek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierre_nel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/y2graphic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sterlingrules/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elbuscainfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bennyjien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stushona/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/estebanuribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/embrcecreations/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danillos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charlesrpratt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmeffess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosblanco_eu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leonfedotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rangafangs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_frees/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgormtx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bryan_topham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpscribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mighty55/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carbontwelve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isaacfifth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamjdeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowwrite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/barputro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/drewbyreese/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachacorazzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bistrianiosip/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magoo04/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pehamondello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yayteejay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_harris88/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/algunsanabria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zforrester/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ovall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosjgsousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geobikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ah_lice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/looneydoodle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerdgr8/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ddggccaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zackeeler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/normanbox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/el_fuertisimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ismail_biltagi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juangomezw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jnmnrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/patrickcoombe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanjohnson_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markolschesky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeffgolenski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kvasnic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lindseyzilla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauchomatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/afusinatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okansurreel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamawesomeface/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emileboudeling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arishi_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juanmamartinez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wikiziner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danthms/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mkginfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terrorpixel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousonaut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prheemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcolenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/foczzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martip07/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaodang17/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johncafazza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinlayfield/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/franciscoamk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdulhyeuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marklamb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edobene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresenfredrik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikaeljorhult/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisslowik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vinciarts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meelford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotnolten/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yehudab/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vijaykarthik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bfrohs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josep_martins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/attacks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sur4dye/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tumski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/instalox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mangosango/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/paulfarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kazaky999/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kiwiupover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nvkznemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tom_even/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ratbus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodsman001/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshmedeski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thewillbeard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psaikali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joe_black/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleinadsays/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcusgorillius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hota_v/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jghyllebert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shinze/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/janpalounek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiespoken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/her_ruu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dansowter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipeapiress/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magugzbrand2d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/posterjob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nathalie_fs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobbytwoshoes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dreizle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremymouton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elisabethkjaer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/notbadart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mohanrohith/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jlsolerdeltoro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itskawsar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/slowspock/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zvchkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wiljanslofstra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craighenneberry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trubeatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juaumlol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samscouto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BenouarradeM/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gipsy_raf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/netonet_il/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arkokoley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itsajimithing/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smalonso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victordeanda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_dwite_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richardgarretts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregrwilkinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anatolinicolae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lu4sh1i/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanotirloni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ostirbu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darcystonge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naitanamoreno/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcomiskey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhiardana/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcomano_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidcazalis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falconerie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregkilian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bcrad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bolzanmarco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/low_res/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vlajki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petar_prog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonkspr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmalfikri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mfacchinello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atanism/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/harry_sistalam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/murrayswift/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobwassermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gavr1l0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madshensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_subtle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deviljho_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salimianoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joetruesdell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/twittypork/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/airskylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnezkumar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgajjar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cherif_b/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salvafc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/louis_currie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deeenright/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cybind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eyronn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vickyshits/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sweetdelisa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cboller1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresdjasso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/melvindidit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andysolomon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaisselenator_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lvovenok/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giuliusa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/belyaev_rs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overcloacked/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kamal_chaneman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/incubo82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hellofeverrrr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhaligowski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunlandictwin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bu7921/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andytlaw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/finchjke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manigm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/umurgdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottfeltham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ganserene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutu_krish/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jodytaggart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ntfblog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tanveerrao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hfalucas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxleroydeval/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kucingbelang4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bargaorobalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colgruv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stalewine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefrost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumannzone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcolberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachingawas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjshaw14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ramanathan_pdy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johndezember/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshoenson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonmorreale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nutzumi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonflatsoda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeyalmone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klefue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirangopal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumann_alex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matthewkay_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jay_wilburn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shesgared/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/apriendeau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnriordan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wake_gs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleksitappura/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emsgulam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xilantra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imomenui/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sircalebgrove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/newbrushes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hsinyo23/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m4rio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/katiemdaly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/s4f1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ecommerceil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marlinjayakody/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swooshycueb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sangdth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coderdiaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluefx_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vivekprvr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sasha_shestakov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eugeneeweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgclegg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n1ght_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dixchen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakehawksworth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trueblood_33/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hai_ninh_nguyen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marclgonzales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yesmeck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stephcoue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doronmalki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruehldesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anasnakawa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kijanmaharjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wearesavas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefvdham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tweetubhai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alecarpentier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fiterik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyryndya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d00maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/theonlyzeke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/missaaamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manekenthe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reetajayendra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyshimko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrgraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanozoffoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrebay007/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shvelo96/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pyronite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedjpetersen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtyukmaev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_williamguerra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/albertaugustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikashpathak18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinjohndayy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vj_demien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colirpixoil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/goddardlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laasli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jqiuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heycamtaylor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nastya_mane/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mastermindesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ccinojasso1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nyancecom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sandywoodruff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bighanddesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sbtransparent/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aviddayentonbay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richwild/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaysix_dizzy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tur8le/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/seyedhossein1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/privetwagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmandenn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dev_essentials/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmfsocial/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_yardenoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mateaodviteza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weavermedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mufaddal_mw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hafeeskhan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashernatali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sulaqo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eddiechen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josecarlospsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vm_f/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enricocicconi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danmartin70/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gmourier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/donjain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrxloka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_pedropinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eitarafa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oscarowusu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ralph_lam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panchajanyag/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodydotmx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jerrybai1907/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marshallchen_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xamorep/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aio___/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaabane_wail/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/txcx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akashsharma39/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falling_soul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sainraja/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mugukamil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johannesneu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markwienands/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karthipanraj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balakayuriy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alan_zhang_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/layerssss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaspernordkvist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mirfanqureshi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hanna_smi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VMilescu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aeon56/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m_kalibry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sreejithexp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dicesales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhoot_amit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smenov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lonesomelemon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladimirdevic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelcipriano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haligaliharun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buleswapnil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/serefka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ifarafonow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikasvinfotech/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/urrutimeoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areandacom/128.jpg"]; -},{}],108:[function(e,t,a){t.exports=["com","biz","info","name","net","org"]},{}],109:[function(e,t,a){t.exports=["gmail.com","yahoo.com","hotmail.com"]},{}],110:[function(e,t,a){var i={};t.exports=i,i.free_email=e("./free_email"),i.domain_suffix=e("./domain_suffix"),i.avatar_uri=e("./avatar_uri")},{"./avatar_uri":107,"./domain_suffix":108,"./free_email":109}],111:[function(e,t,a){var i={};t.exports=i,i.words=e("./words"),i.supplemental=e("./supplemental")},{"./supplemental":112,"./words":113}],112:[function(e,t,a){t.exports=["abbas","abduco","abeo","abscido","absconditus","absens","absorbeo","absque","abstergo","absum","abundans","abutor","accedo","accendo","acceptus","accipio","accommodo","accusator","acer","acerbitas","acervus","acidus","acies","acquiro","acsi","adamo","adaugeo","addo","adduco","ademptio","adeo","adeptio","adfectus","adfero","adficio","adflicto","adhaero","adhuc","adicio","adimpleo","adinventitias","adipiscor","adiuvo","administratio","admiratio","admitto","admoneo","admoveo","adnuo","adopto","adsidue","adstringo","adsuesco","adsum","adulatio","adulescens","adultus","aduro","advenio","adversus","advoco","aedificium","aeger","aegre","aegrotatio","aegrus","aeneus","aequitas","aequus","aer","aestas","aestivus","aestus","aetas","aeternus","ager","aggero","aggredior","agnitio","agnosco","ago","ait","aiunt","alienus","alii","alioqui","aliqua","alius","allatus","alo","alter","altus","alveus","amaritudo","ambitus","ambulo","amicitia","amiculum","amissio","amita","amitto","amo","amor","amoveo","amplexus","amplitudo","amplus","ancilla","angelus","angulus","angustus","animadverto","animi","animus","annus","anser","ante","antea","antepono","antiquus","aperio","aperte","apostolus","apparatus","appello","appono","appositus","approbo","apto","aptus","apud","aqua","ara","aranea","arbitro","arbor","arbustum","arca","arceo","arcesso","arcus","argentum","argumentum","arguo","arma","armarium","armo","aro","ars","articulus","artificiose","arto","arx","ascisco","ascit","asper","aspicio","asporto","assentator","astrum","atavus","ater","atqui","atrocitas","atrox","attero","attollo","attonbitus","auctor","auctus","audacia","audax","audentia","audeo","audio","auditor","aufero","aureus","auris","aurum","aut","autem","autus","auxilium","avaritia","avarus","aveho","averto","avoco","baiulus","balbus","barba","bardus","basium","beatus","bellicus","bellum","bene","beneficium","benevolentia","benigne","bestia","bibo","bis","blandior","bonus","bos","brevis","cado","caecus","caelestis","caelum","calamitas","calcar","calco","calculus","callide","campana","candidus","canis","canonicus","canto","capillus","capio","capitulus","capto","caput","carbo","carcer","careo","caries","cariosus","caritas","carmen","carpo","carus","casso","caste","casus","catena","caterva","cattus","cauda","causa","caute","caveo","cavus","cedo","celebrer","celer","celo","cena","cenaculum","ceno","censura","centum","cerno","cernuus","certe","certo","certus","cervus","cetera","charisma","chirographum","cibo","cibus","cicuta","cilicium","cimentarius","ciminatio","cinis","circumvenio","cito","civis","civitas","clam","clamo","claro","clarus","claudeo","claustrum","clementia","clibanus","coadunatio","coaegresco","coepi","coerceo","cogito","cognatus","cognomen","cogo","cohaero","cohibeo","cohors","colligo","colloco","collum","colo","color","coma","combibo","comburo","comedo","comes","cometes","comis","comitatus","commemoro","comminor","commodo","communis","comparo","compello","complectus","compono","comprehendo","comptus","conatus","concedo","concido","conculco","condico","conduco","confero","confido","conforto","confugo","congregatio","conicio","coniecto","conitor","coniuratio","conor","conqueror","conscendo","conservo","considero","conspergo","constans","consuasor","contabesco","contego","contigo","contra","conturbo","conventus","convoco","copia","copiose","cornu","corona","corpus","correptius","corrigo","corroboro","corrumpo","coruscus","cotidie","crapula","cras","crastinus","creator","creber","crebro","credo","creo","creptio","crepusculum","cresco","creta","cribro","crinis","cruciamentum","crudelis","cruentus","crur","crustulum","crux","cubicularis","cubitum","cubo","cui","cuius","culpa","culpo","cultellus","cultura","cum","cunabula","cunae","cunctatio","cupiditas","cupio","cuppedia","cupressus","cur","cura","curatio","curia","curiositas","curis","curo","curriculum","currus","cursim","curso","cursus","curto","curtus","curvo","curvus","custodia","damnatio","damno","dapifer","debeo","debilito","decens","decerno","decet","decimus","decipio","decor","decretum","decumbo","dedecor","dedico","deduco","defaeco","defendo","defero","defessus","defetiscor","deficio","defigo","defleo","defluo","defungo","degenero","degero","degusto","deinde","delectatio","delego","deleo","delibero","delicate","delinquo","deludo","demens","demergo","demitto","demo","demonstro","demoror","demulceo","demum","denego","denique","dens","denuncio","denuo","deorsum","depereo","depono","depopulo","deporto","depraedor","deprecator","deprimo","depromo","depulso","deputo","derelinquo","derideo","deripio","desidero","desino","desipio","desolo","desparatus","despecto","despirmatio","infit","inflammatio","paens","patior","patria","patrocinor","patruus","pauci","paulatim","pauper","pax","peccatus","pecco","pecto","pectus","pecunia","pecus","peior","pel","ocer","socius","sodalitas","sol","soleo","solio","solitudo","solium","sollers","sollicito","solum","solus","solutio","solvo","somniculosus","somnus","sonitus","sono","sophismata","sopor","sordeo","sortitus","spargo","speciosus","spectaculum","speculum","sperno","spero","spes","spiculum","spiritus","spoliatio","sponte","stabilis","statim","statua","stella","stillicidium","stipes","stips","sto","strenuus","strues","studio","stultus","suadeo","suasoria","sub","subito","subiungo","sublime","subnecto","subseco","substantia","subvenio","succedo","succurro","sufficio","suffoco","suffragium","suggero","sui","sulum","sum","summa","summisse","summopere","sumo","sumptus","supellex","super","suppellex","supplanto","suppono","supra","surculus","surgo","sursum","suscipio","suspendo","sustineo","suus","synagoga","tabella","tabernus","tabesco","tabgo","tabula","taceo","tactus","taedium","talio","talis","talus","tam","tamdiu","tamen","tametsi","tamisium","tamquam","tandem","tantillus","tantum","tardus","tego","temeritas","temperantia","templum","temptatio","tempus","tenax","tendo","teneo","tener","tenuis","tenus","tepesco","tepidus","ter","terebro","teres","terga","tergeo","tergiversatio","tergo","tergum","termes","terminatio","tero","terra","terreo","territo","terror","tersus","tertius","testimonium","texo","textilis","textor","textus","thalassinus","theatrum","theca","thema","theologus","thermae","thesaurus","thesis","thorax","thymbra","thymum","tibi","timidus","timor","titulus","tolero","tollo","tondeo","tonsor","torqueo","torrens","tot","totidem","toties","totus","tracto","trado","traho","trans","tredecim","tremo","trepide","tres","tribuo","tricesimus","triduana","triginta","tripudio","tristis","triumphus","trucido","truculenter","tubineus","tui","tum","tumultus","tunc","turba","turbo","turpe","turpis","tutamen","tutis","tyrannus","uberrime","ubi","ulciscor","ullus","ulterius","ultio","ultra","umbra","umerus","umquam","una","unde","undique","universe","unus","urbanus","urbs","uredo","usitas","usque","ustilo","ustulo","usus","uter","uterque","utilis","utique","utor","utpote","utrimque","utroque","utrum","uxor","vaco","vacuus","vado","vae","valde","valens","valeo","valetudo","validus","vallum","vapulus","varietas","varius","vehemens","vel","velociter","velum","velut","venia","venio","ventito","ventosus","ventus","venustas","ver","verbera","verbum","vere","verecundia","vereor","vergo","veritas","vero","versus","verto","verumtamen","verus","vesco","vesica","vesper","vespillo","vester","vestigium","vestrum","vetus","via","vicinus","vicissitudo","victoria","victus","videlicet","video","viduata","viduo","vigilo","vigor","vilicus","vilis","vilitas","villa","vinco","vinculum","vindico","vinitor","vinum","vir","virga","virgo","viridis","viriliter","virtus","vis","viscus","vita","vitiosus","vitium","vito","vivo","vix","vobis","vociferor","voco","volaticus","volo","volubilis","voluntarius","volup","volutabrum","volva","vomer","vomica","vomito","vorago","vorax","voro","vos","votum","voveo","vox","vulariter","vulgaris","vulgivagus","vulgo","vulgus","vulnero","vulnus","vulpes","vulticulus","vultuosus","xiphias"]},{}],113:[function(e,t,a){t.exports=["alias","consequatur","aut","perferendis","sit","voluptatem","accusantium","doloremque","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni","dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","dolorem","ipsum","quia","dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut","labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum","exercitationem","ullam","corporis","nemo","enim","ipsam","voluptatem","quia","voluptas","sit","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis","autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","et","iusto","odio","dignissimos","ducimus","qui","blanditiis","praesentium","laudantium","totam","rem","voluptatum","deleniti","atque","corrupti","quos","dolores","et","quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","sed","ut","perspiciatis","unde","omnis","iste","natus","error","similique","sunt","in","culpa","qui","officia","deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et","expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo","porro","quisquam","est","qui","minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus","temporibus","autem","quibusdam","et","aut","consequatur","vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et","voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente","delectus","ut","aut","reiciendis","voluptatibus","maiores","doloribus","asperiores","repellat"]},{}],114:[function(e,t,a){t.exports=["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zula"]; -},{}],115:[function(e,t,a){var i={};t.exports=i,i.first_name=e("./first_name"),i.last_name=e("./last_name"),i.prefix=e("./prefix"),i.suffix=e("./suffix"),i.title=e("./title"),i.name=e("./name")},{"./first_name":114,"./last_name":116,"./name":117,"./prefix":118,"./suffix":119,"./title":120}],116:[function(e,t,a){t.exports=["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Gutmann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Hartmann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","MacGyver","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"]},{}],117:[function(e,t,a){t.exports=["#{prefix} #{first_name} #{last_name}","#{first_name} #{last_name} #{suffix}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{first_name} #{last_name}"]},{}],118:[function(e,t,a){t.exports=["Mr.","Mrs.","Ms.","Miss","Dr."]},{}],119:[function(e,t,a){t.exports=["Jr.","Sr.","I","II","III","IV","V","MD","DDS","PhD","DVM"]},{}],120:[function(e,t,a){t.exports={descriptor:["Lead","Senior","Direct","Corporate","Dynamic","Future","Product","National","Regional","District","Central","Global","Customer","Investor","Dynamic","International","Legacy","Forward","Internal","Human","Chief","Principal"],level:["Solutions","Program","Brand","Security","Research","Marketing","Directives","Implementation","Integration","Functionality","Response","Paradigm","Tactics","Identity","Markets","Group","Division","Applications","Optimization","Operations","Infrastructure","Intranet","Communications","Web","Branding","Quality","Assurance","Mobility","Accounts","Data","Creative","Configuration","Accountability","Interactions","Factors","Usability","Metrics"],job:["Supervisor","Associate","Executive","Liason","Officer","Manager","Engineer","Specialist","Director","Coordinator","Administrator","Architect","Analyst","Designer","Planner","Orchestrator","Technician","Developer","Producer","Consultant","Assistant","Facilitator","Agent","Representative","Strategist"]}},{}],121:[function(e,t,a){t.exports=["###-###-####","(###) ###-####","1-###-###-####","###.###.####","###-###-####","(###) ###-####","1-###-###-####","###.###.####","###-###-#### x###","(###) ###-#### x###","1-###-###-#### x###","###.###.#### x###","###-###-#### x####","(###) ###-#### x####","1-###-###-#### x####","###.###.#### x####","###-###-#### x#####","(###) ###-#### x#####","1-###-###-#### x#####","###.###.#### x#####"]},{}],122:[function(e,t,a){var i={};t.exports=i,i.formats=e("./formats")},{"./formats":121}],123:[function(e,t,a){t.exports=["ants","bats","bears","bees","birds","buffalo","cats","chickens","cattle","dogs","dolphins","ducks","elephants","fishes","foxes","frogs","geese","goats","horses","kangaroos","lions","monkeys","owls","oxen","penguins","people","pigs","rabbits","sheep","tigers","whales","wolves","zebras","banshees","crows","black cats","chimeras","ghosts","conspirators","dragons","dwarves","elves","enchanters","exorcists","sons","foes","giants","gnomes","goblins","gooses","griffins","lycanthropes","nemesis","ogres","oracles","prophets","sorcerors","spiders","spirits","vampires","warlocks","vixens","werewolves","witches","worshipers","zombies","druids"]},{}],124:[function(e,t,a){var i={};t.exports=i,i.creature=e("./creature"),i.name=e("./name")},{"./creature":123,"./name":125}],125:[function(e,t,a){t.exports=["#{Address.state} #{creature}"]},{}],126:[function(e,t,a){var i=function(e){var t=this,a=e.helpers;return t.words=function(t){return"undefined"==typeof t&&(t=3),a.shuffle(e.definitions.lorem.words).slice(0,t)},t.sentence=function(t,a){"undefined"==typeof t&&(t=3),"undefined"==typeof a&&(a=7);var i=e.lorem.words(t+e.random.number(a)).join(" ");return i.charAt(0).toUpperCase()+i.slice(1)+"."},t.sentences=function(t){"undefined"==typeof t&&(t=3);var a=[];for(t;t>0;t--)a.push(e.lorem.sentence());return a.join("\n")},t.paragraph=function(t){return"undefined"==typeof t&&(t=3),e.lorem.sentences(t+e.random.number(3))},t.paragraphs=function(t,a){"undefined"==typeof a&&(a="\n \r"),"undefined"==typeof t&&(t=3);var i=[];for(t;t>0;t--)i.push(e.lorem.paragraph());return i.join(a)},t};t.exports=i},{}],127:[function(e,t,a){function i(e){this.firstName=function(t){return"undefined"!=typeof e.definitions.name.male_first_name&&"undefined"!=typeof e.definitions.name.female_first_name?("number"!=typeof t&&(t=e.random.number(1)),0===t?e.random.arrayElement(e.locales[e.locale].name.male_first_name):e.random.arrayElement(e.locales[e.locale].name.female_first_name)):e.random.arrayElement(e.definitions.name.first_name)},this.lastName=function(t){return"undefined"!=typeof e.definitions.name.male_last_name&&"undefined"!=typeof e.definitions.name.female_last_name?("number"!=typeof t&&(t=e.random.number(1)),0===t?e.random.arrayElement(e.locales[e.locale].name.male_last_name):e.random.arrayElement(e.locales[e.locale].name.female_last_name)):e.random.arrayElement(e.definitions.name.last_name)},this.findName=function(t,a,i){var n,r,s=e.random.number(8);switch("number"!=typeof i&&(i=e.random.number(1)),t=t||e.name.firstName(i),a=a||e.name.lastName(i),s){case 0:if(n=e.name.prefix())return n+" "+t+" "+a;case 1:if(r=e.name.prefix())return t+" "+a+" "+r}return t+" "+a},this.jobTitle=function(){return e.name.jobDescriptor()+" "+e.name.jobArea()+" "+e.name.jobType()},this.prefix=function(){return e.random.arrayElement(e.definitions.name.prefix)},this.suffix=function(){return e.random.arrayElement(e.definitions.name.suffix)},this.title=function(){var t=e.random.arrayElement(e.definitions.name.title.descriptor),a=e.random.arrayElement(e.definitions.name.title.level),i=e.random.arrayElement(e.definitions.name.title.job);return t+" "+a+" "+i},this.jobDescriptor=function(){return e.random.arrayElement(e.definitions.name.title.descriptor)},this.jobArea=function(){return e.random.arrayElement(e.definitions.name.title.level)},this.jobType=function(){return e.random.arrayElement(e.definitions.name.title.job)}}t.exports=i},{}],128:[function(e,t,a){var i=function(e){var t=this;return t.phoneNumber=function(t){return t=t||e.phone.phoneFormats(),e.helpers.replaceSymbolWithNumber(t)},t.phoneNumberFormat=function(t){return t=t||0,e.helpers.replaceSymbolWithNumber(e.definitions.phone_number.formats[t])},t.phoneFormats=function(){return e.random.arrayElement(e.definitions.phone_number.formats)},t};t.exports=i},{}],129:[function(e,t,a){function i(e,t){return t&&(Array.isArray(t)&&t.length?n.seed_array(t):n.seed(t)),this.number=function(e){"number"==typeof e&&(e={max:e}),e=e||{},"undefined"==typeof e.min&&(e.min=0),"undefined"==typeof e.max&&(e.max=99999),"undefined"==typeof e.precision&&(e.precision=1);var t=e.max;t>=0&&(t+=e.precision);var a=e.precision*Math.floor(n.rand(t/e.precision,e.min/e.precision));return a},this.arrayElement=function(t){t=t||["a","b","c"];var a=e.random.number({max:t.length-1});return t[a]},this.objectElement=function(t,a){t=t||{foo:"bar",too:"car"};var i=Object.keys(t),n=e.random.arrayElement(i);return"key"===a?n:t[n]},this.uuid=function(){var e="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",t=function(e){var t=16*Math.random()|0,a="x"==e?t:3&t|8;return a.toString(16)};return e.replace(/[xy]/g,t)},this["boolean"]=function(){return!!e.random.number(1)},this}var n=e("../vendor/mersenne");t.exports=i},{"../vendor/mersenne":131}],130:[function(e,t,a){var i=e("../lib"),n=new i({locale:"en",localeFallback:"en"});n.locales.en=e("../lib/locales/en"),n.locales.en=e("../lib/locales/en"),t.exports=n},{"../lib":39,"../lib/locales/en":106}],131:[function(e,t,a){function i(){function e(e){return 0>e?(e^o)+o:e}function t(t,a){return a>t?e(4294967296-(a-t)&4294967295):t-a}function a(t,a){return e(t+a&4294967295)}function i(t,i){for(var n=0,r=0;32>r;++r)t>>>r&1&&(n=a(n,e(i<m;m++)u[m]=a(i(1812433253,e(u[m-1]^u[m-1]>>>30)),m),u[m]=e(4294967295&u[m])},this.init_by_array=function(r,s){var o,c,m;for(this.init_genrand(19650218),o=1,c=0,m=n>s?n:s;m;m--)u[o]=a(a(e(u[o]^i(e(u[o-1]^u[o-1]>>>30),1664525)),r[c]),c),u[o]=e(4294967295&u[o]),o++,c++,o>=n&&(u[0]=u[n-1],o=1),c>=s&&(c=0);for(m=n-1;m;m--)u[o]=t(e((dbg=u[o])^i(e(u[o-1]^u[o-1]>>>30),1566083941)),o),u[o]=e(4294967295&u[o]),o++,o>=n&&(u[0]=u[n-1],o=1);u[0]=2147483648};var f=[0,s];this.genrand_int32=function(){var t;if(m>=n){var a;for(m==n+1&&this.init_genrand(5489),a=0;n-r>a;a++)t=e(u[a]&o|u[a+1]&c),u[a]=e(u[a+r]^t>>>1^f[1&t]);for(;n-1>a;a++)t=e(u[a]&o|u[a+1]&c),u[a]=e(u[a+(r-n)]^t>>>1^f[1&t]);t=e(u[n-1]&o|u[0]&c),u[n-1]=e(u[r-1]^t>>>1^f[1&t]),m=0}return t=u[m++],t=e(t^t>>>11),t=e(t^t<<7&2636928640),t=e(t^t<<15&4022730752),t=e(t^t>>>18)},this.genrand_int31=function(){return this.genrand_int32()>>>1},this.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},this.genrand_real2=function(){return this.genrand_int32()*(1/4294967296)},this.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},this.genrand_res53=function(){var e=this.genrand_int32()>>>5,t=this.genrand_int32()>>>6;return(67108864*e+t)*(1/9007199254740992)}}a.MersenneTwister19937=i;var n=new i;n.init_genrand((new Date).getTime()%1e9),a.rand=function(e,t){return void 0===e&&(t=0,e=32768),Math.floor(n.genrand_real2()*(e-t)+t)},a.seed=function(e){if("number"!=typeof e)throw new Error("seed(S) must take numeric argument; is "+typeof e);n.init_genrand(e)},a.seed_array=function(e){if("object"!=typeof e)throw new Error("seed_array(A) must take array of numbers; is "+typeof e);n.init_by_array(e)}},{}],132:[function(e,t,a){!function(e){var i,n,r,s,o;r=/[a-zA-Z]$/,o=/[aeiouAEIOU]$/,n=/[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]$/,i=e.localPasswordGeneratorLibraryName||"generatePassword",s=function(e,t,a,i){var r,c;return null==e&&(e=10),null==t&&(t=!0),null==a&&(a=/\w/),null==i&&(i=""),i.length>=e?i:(t&&(a=i.match(n)?o:n),c=Math.floor(94*Math.random())+33,r=String.fromCharCode(c),t&&(r=r.toLowerCase()),r.match(a)?s(e,t,a,""+i+r):s(e,t,a,i))},("undefined"!=typeof a?a:e)[i]=s,"undefined"!=typeof a&&"undefined"!=typeof t&&t.exports&&(t.exports=s)}(this)},{}],133:[function(e,t,a){function i(e,t){if(e=e||0,t=t||100,"number"==typeof t&&"number"==typeof e)return function(e,t){if(e>t)throw new RangeError("expected min <= max; got min = "+e+", max = "+t);return Math.floor(Math.random()*(t-e+1))+e}(e,t);if("[object Array]"===Object.prototype.toString.call(e))return e[Math.floor(Math.random()*e.length)];if(e&&"object"==typeof e)return function(e){var t,a,n=i(0,100)/100,r=0,s=0;for(t in e)if(e.hasOwnProperty(t)){if(s=e[t]+r,a=t,n>=r&&s>=n)break;r+=e[t]}return a}(e);throw new TypeError("Invalid arguments passed to rnd. ("+(t?e+", "+t:e)+")")}function n(){return i(["AB","AF","AN","AR","AS","AZ","BE","BG","BN","BO","BR","BS","CA","CE","CO","CS","CU","CY","DA","DE","EL","EN","EO","ES","ET","EU","FA","FI","FJ","FO","FR","FY","GA","GD","GL","GV","HE","HI","HR","HT","HU","HY","ID","IS","IT","JA","JV","KA","KG","KO","KU","KW","KY","LA","LB","LI","LN","LT","LV","MG","MK","MN","MO","MS","MT","MY","NB","NE","NL","NN","NO","OC","PL","PT","RM","RO","RU","SC","SE","SK","SL","SO","SQ","SR","SV","SW","TK","TR","TY","UK","UR","UZ","VI","VO","YI","ZH"])}function r(){var e=i({chrome:.45132810566,iexplorer:.27477061836,firefox:.19384170608,safari:.06186781118,opera:.01574236955}),t={chrome:{win:.89,mac:.09,lin:.02},firefox:{win:.83,mac:.16,lin:.01},opera:{win:.91,mac:.03,lin:.06},safari:{win:.04,mac:.96},iexplorer:["win"]};return[e,i(t[e])]}function s(e){var t={lin:["i686","x86_64"],mac:{Intel:.48,PPC:.01,"U; Intel":.48,"U; PPC":.01},win:["","WOW64","Win64; x64"]};return i(t[e])}function o(e){for(var t="",a=0;e>a;a++)t+="."+i(0,9);return t}var c={net:function(){return[i(1,4),i(0,9),i(1e4,99999),i(0,9)].join(".")},nt:function(){return i(5,6)+"."+i(0,3)},ie:function(){return i(7,11)},trident:function(){return i(3,7)+"."+i(0,1)},osx:function(e){return[10,i(5,10),i(0,9)].join(e||".")},chrome:function(){return[i(13,39),0,i(800,899),0].join(".")},presto:function(){return"2.9."+i(160,190)},presto2:function(){return i(10,12)+".00"},safari:function(){return i(531,538)+"."+i(0,2)+"."+i(0,2)}},u={firefox:function(e){var t=i(5,15)+o(2),a="Gecko/20100101 Firefox/"+t,n=s(e),r="win"===e?"(Windows NT "+c.nt()+(n?"; "+n:""):"mac"===e?"(Macintosh; "+n+" Mac OS X "+c.osx():"(X11; Linux "+n;return"Mozilla/5.0 "+r+"; rv:"+t.slice(0,-2)+") "+a},iexplorer:function(){var e=c.ie();return e>=11?"Mozilla/5.0 (Windows NT 6."+i(1,3)+"; Trident/7.0; "+i(["Touch; ",""])+"rv:11.0) like Gecko":"Mozilla/5.0 (compatible; MSIE "+e+".0; Windows NT "+c.nt()+"; Trident/"+c.trident()+(1===i(0,1)?"; .NET CLR "+c.net():"")+")"},opera:function(e){var t=" Presto/"+c.presto()+" Version/"+c.presto2()+")",a="win"===e?"(Windows NT "+c.nt()+"; U; "+n()+t:"lin"===e?"(X11; Linux "+s(e)+"; U; "+n()+t:"(Macintosh; Intel Mac OS X "+c.osx()+" U; "+n()+" Presto/"+c.presto()+" Version/"+c.presto2()+")";return"Opera/"+i(9,14)+"."+i(0,99)+" "+a},safari:function m(e){var m=c.safari(),t=i(4,7)+"."+i(0,1)+"."+i(0,10),a="mac"===e?"(Macintosh; "+s("mac")+" Mac OS X "+c.osx("_")+" rv:"+i(2,6)+".0; "+n()+") ":"(Windows; U; Windows NT "+c.nt()+")";return"Mozilla/5.0 "+a+"AppleWebKit/"+m+" (KHTML, like Gecko) Version/"+t+" Safari/"+m},chrome:function(e){var t=c.safari(),a="mac"===e?"(Macintosh; "+s("mac")+" Mac OS X "+c.osx("_")+") ":"win"===e?"(Windows; U; Windows NT "+c.nt()+")":"(X11; Linux "+s(e);return"Mozilla/5.0 "+a+" AppleWebKit/"+t+" (KHTML, like Gecko) Chrome/"+c.chrome()+" Safari/"+t}};a.generate=function(){var e=r();return u[e[0]](e[1])}},{}],134:[function(e,t,a){a.read=function(e,t,a,i,n){var r,s,o=8*n-i-1,c=(1<>1,m=-7,f=a?n-1:0,p=a?-1:1,l=e[t+f];for(f+=p,r=l&(1<<-m)-1,l>>=-m,m+=o;m>0;r=256*r+e[t+f],f+=p,m-=8);for(s=r&(1<<-m)-1,r>>=-m,m+=i;m>0;s=256*s+e[t+f],f+=p,m-=8);if(0===r)r=1-u;else{if(r===c)return s?NaN:(l?-1:1)*(1/0);s+=Math.pow(2,i),r-=u}return(l?-1:1)*s*Math.pow(2,r-i)},a.write=function(e,t,a,i,n,r){var s,o,c,u=8*r-n-1,m=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,l=i?0:r-1,h=i?1:-1,d=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,s=m):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),t+=s+f>=1?p/c:p*Math.pow(2,1-f),t*c>=2&&(s++,c/=2),s+f>=m?(o=0,s=m):s+f>=1?(o=(t*c-1)*Math.pow(2,n),s+=f):(o=t*Math.pow(2,f-1)*Math.pow(2,n),s=0));n>=8;e[a+l]=255&o,l+=h,o/=256,n-=8);for(s=s<0;e[a+l]=255&s,l+=h,s/=256,u-=8);e[a+l-h]|=128*d}},{}],135:[function(e,t,a){t.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},{}],136:[function(e,t,a){!function(a){"use strict";var i,n=a.Base64,r="2.1.9";if("undefined"!=typeof t&&t.exports)try{i=e("buffer").Buffer}catch(s){}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=function(e){for(var t={},a=0,i=e.length;i>a;a++)t[e.charAt(a)]=a;return t}(o),u=String.fromCharCode,m=function(e){if(e.length<2){var t=e.charCodeAt(0);return 128>t?e:2048>t?u(192|t>>>6)+u(128|63&t):u(224|t>>>12&15)+u(128|t>>>6&63)+u(128|63&t)}var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return u(240|t>>>18&7)+u(128|t>>>12&63)+u(128|t>>>6&63)+u(128|63&t)},f=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,p=function(e){return e.replace(f,m)},l=function(e){var t=[0,2,1][e.length%3],a=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0),i=[o.charAt(a>>>18),o.charAt(a>>>12&63),t>=2?"=":o.charAt(a>>>6&63),t>=1?"=":o.charAt(63&a)];return i.join("")},h=a.btoa?function(e){return a.btoa(e)}:function(e){return e.replace(/[\s\S]{1,3}/g,l)},d=i?function(e){return(e.constructor===i.constructor?e:new i(e)).toString("base64")}:function(e){return h(p(e))},g=function(e,t){return t?d(String(e)).replace(/[+\/]/g,function(e){return"+"==e?"-":"_"}).replace(/=/g,""):d(String(e))},w=function(e){return g(e,!0)},y=new RegExp(["[À-ß][€-¿]","[à-ï][€-¿]{2}","[ð-÷][€-¿]{3}"].join("|"),"g"),b=function(e){switch(e.length){case 4:var t=(7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3),a=t-65536;return u((a>>>10)+55296)+u((1023&a)+56320);case 3:return u((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return u((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},v=function(e){return e.replace(y,b)},j=function(e){var t=e.length,a=t%4,i=(t>0?c[e.charAt(0)]<<18:0)|(t>1?c[e.charAt(1)]<<12:0)|(t>2?c[e.charAt(2)]<<6:0)|(t>3?c[e.charAt(3)]:0),n=[u(i>>>16),u(i>>>8&255),u(255&i)];return n.length-=[0,0,2,1][a],n.join("")},z=a.atob?function(e){return a.atob(e)}:function(e){return e.replace(/[\s\S]{1,4}/g,j)},E=i?function(e){return(e.constructor===i.constructor?e:new i(e,"base64")).toString()}:function(e){return v(z(e))},A=function(e){return E(String(e).replace(/[-_]/g,function(e){return"-"==e?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))},x=function(){var e=a.Base64;return a.Base64=n,e};if(a.Base64={VERSION:r,atob:z,btoa:h,fromBase64:A,toBase64:g,utob:p,encode:g,encodeURI:w,btou:v,decode:A,noConflict:x},"function"==typeof Object.defineProperty){var S=function(e){return{value:e,enumerable:!1,writable:!0,configurable:!0}};a.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",S(function(){return A(this)})),Object.defineProperty(String.prototype,"toBase64",S(function(e){return g(this,e)})),Object.defineProperty(String.prototype,"toBase64URI",S(function(){return g(this,!0)}))}}a.Meteor&&(Base64=a.Base64)}(this)},{buffer:17}],137:[function(e,t,a){"use strict";function i(e){return"enum"===e||"required"===e||"definitions"===e}function n(e,t,a){var n=m();try{var r=100;return s(n(e,t,a),[],function f(e){if(!r)return delete e.$ref,delete e.oneOf,delete e.anyOf,delete e.allOf,e;if("string"==typeof e.$ref){var t=e.$ref;delete e.$ref,r--,u(e,n.util.findByRef(t,n.refs))}if(Array.isArray(e.allOf)){var a=e.allOf;delete e.allOf,a.forEach(function(t){u(e,f(t))})}if(Array.isArray(e.oneOf||e.anyOf)){var s=e.oneOf||e.anyOf;delete e.anyOf,delete e.oneOf,u(e,c.pick(s))}for(var o in e)!Array.isArray(e[o])&&"object"!=typeof e[o]||i(o)||(e[o]=f(e[o]));return e})}catch(o){throw o.path?new Error(o.message+" in /"+o.path.join("/")):o}}var r=e("./util/container"),s=e("./util/traverse"),o=e("./util/formats"),c=e("./util/random"),u=e("./util/merge"),m=e("deref");n.formats=o,n.extend=r.set,t.exports=n},{"./util/container":145,"./util/formats":147,"./util/merge":150,"./util/random":152,"./util/traverse":153,deref:23}],138:[function(e,t,a){"use strict";function i(e,t,a,i,n){function s(e){var t=JSON.stringify(e);-1===c.indexOf(t)&&(c.push(t),o.push(e))}var o=[],c=[];t.forEach(s);for(var u=100;o.length!==t.length&&(s(r(a.items||i,e,n)),u--););return o}var n=e("../util/random"),r=e("../util/traverse"),s=e("../util/has-props"),o=e("../util/error");t.exports=function(e,t,a){var c=[];if(!e.items&&!e.additionalItems){if(s(e,"minItems","maxItems","uniqueItems"))throw new o("missing items for "+JSON.stringify(e),t);return c}if(Array.isArray(e.items))return Array.prototype.concat.apply(c,e.items.map(function(e,i){return r(e,t.concat(["items",i]),a)}));for(var u=n(e.minItems,e.maxItems,1,5),m="object"==typeof e.additionalItems?e.additionalItems:{},f=c.length;u>f;f+=1)c.push(r(e.items||m,t.concat(["items",f]),a));return e.uniqueItems?i(t.concat(["items"]),c,e,m,a):c}},{"../util/error":146,"../util/has-props":148,"../util/random":152,"../util/traverse":153}],139:[function(e,t,a){"use strict";t.exports=function(){return Math.random()>.5}},{}],140:[function(e,t,a){"use strict";var i=e("./number");t.exports=function(e){e.hasPrecision=!1;var t=i(e);return t>0?Math.floor(t):Math.ceil(t)}},{"./number":142}],141:[function(e,t,a){"use strict";t.exports=function(){return null}},{}],142:[function(e,t,a){"use strict";var i=-1e8,n=1e8,r=e("./string"),s=e("../util/random");t.exports=function(e){if(e.faker||e.chance)return r(e);var t="undefined"==typeof e.minimum?i:e.minimum,a="undefined"==typeof e.maximum?n:e.maximum;if(e.exclusiveMinimum&&e.minimum&&(t+=1),e.exclusiveMaximum&&e.maximum&&(a-=1),e.multipleOf){for(var o=s(Math.floor(t/e.multipleOf),Math.floor(a/e.multipleOf))*e.multipleOf;t>o;)o+=e.multipleOf;return o}return e.hasPrecision?s(!1,t,a):s(Math.random()>.5,t,a)}},{"../util/random":152,"./string":144}],143:[function(e,t,a){"use strict";var i=e("../util/container"),n=e("../util/random"),r=e("../util/traverse"),s=e("../util/has-props"),o=i.get("faker"),c=i.get("randexp"),u=c.randexp,m=e("../util/error");t.exports=function(e,t,a){var i={};if(!(e.properties||e.patternProperties||e.additionalProperties)){if(s(e,"minProperties","maxProperties","dependencies","required"))throw new m("missing properties for "+JSON.stringify(e),t);return i}var c=e.required||[],f=e.properties?Object.keys(e.properties):[];c.forEach(function(t){e.properties&&e.properties[t]&&(i[t]=e.properties[t])});var p=f.filter(function(e){return-1===c.indexOf(e)});e.patternProperties&&(p=Array.prototype.concat.apply(p,Object.keys(e.patternProperties)));var l=n(e.minProperties,e.maxProperties,0,p.length);n.shuffle(p).slice(0,l).forEach(function(t){e.properties&&e.properties[t]?i[t]=e.properties[t]:i[u(t)]=e.patternProperties[t]});var h=Object.keys(i).length,d="object"==typeof e.additionalProperties?e.additionalProperties:{};return l>h&&o.lorem.words(l-h).forEach(function(e){i[e+u("\\w{1,10}")]=d}),r(i,t.concat(["properties"]),a)}},{"../util/container":145,"../util/error":146,"../util/has-props":148,"../util/random":152,"../util/traverse":153}],144:[function(e,t,a){"use strict";function i(e,t){for(var a=t.split(".");a.length;){var i=a.shift();if(!e[i])break;e=e[i]}return e}function n(e){if(e.use){var t=[],a=e.key;"object"==typeof a&&(a=Object.keys(a)[0],Array.isArray(e.key[a])?t=e.key[a]:t.push(e.key[a]));var n=i(e.gen,a);if("function"!=typeof n)throw new Error("unknown "+e.use+"-generator for "+JSON.stringify(e.key));return n.apply(e.gen,t)}switch(e.format){case"date-time":return new Date(m(0,1e14)).toISOString();case"email":case"hostname":case"ipv6":case"uri":return u(p[e.format]).replace(/\{(\w+)\}/,function(e,t){return u(p[t])});case"ipv4":return[0,0,0,0].map(function(){return m(0,255)}).join(".");default:var r=f(e.format);if("function"!=typeof r)throw new Error("unknown generator for "+JSON.stringify(e.format));var c={faker:s,chance:o,randexp:u};return r(c,e)}}var r=e("../util/container"),s=r.get("faker"),o=r.get("chance"),c=r.get("randexp"),u=c.randexp,m=e("../util/random"),f=e("../util/formats"),p={email:"[a-zA-Z\\d][a-zA-Z\\d-]{1,13}[a-zA-Z\\d]@{hostname}",hostname:"[a-zA-Z]{1,33}\\.[a-z]{2,4}",ipv6:"[abcdef\\d]{4}(:[abcdef\\d]{4}){7}",uri:"[a-zA-Z][a-zA-Z0-9+-.]*"};t.exports=function(e){if(e.faker||e.chance)return n({use:e.faker?"faker":"chance",gen:e.faker?s:o,key:e.faker||e.chance});if(e.format)return n(e);if(e.pattern)return u(e.pattern);if(e.minLength||e.maxLength){var t=Math.max(0,e.minLength||0),a=m(t,e.maxLength);return u(".{"+t+","+a+"}")}return s.lorem.words(m(1,5)).join(" ")}},{"../util/container":145,"../util/formats":147,"../util/random":152}],145:[function(e,t,a){"use strict";var i=e("chance"),n={faker:e("faker"),chance:new i,randexp:e("randexp")};t.exports={set:function(e,t){if("undefined"==typeof n[e])throw new ReferenceError('"'+e+"\" dependency doesn't exist.");n[e]=t(n[e])},get:function(e){return n[e]}}},{chance:19,faker:130,randexp:167}],146:[function(e,t,a){"use strict";function i(e,t){this.message=e,this.path=t,this.name="ParseError"}i.prototype=Error.prototype,t.exports=i},{}],147:[function(e,t,a){"use strict";var i={};t.exports=function(e,t){if(t)i[e]=t;else if("object"==typeof e)for(var a in e)i[a]=e[a];else if(e)return i[e];return i}},{}],148:[function(e,t,a){"use strict";t.exports=function(e){return Array.prototype.slice.call(arguments,1).filter(function(t){return"undefined"!=typeof e[t]}).length>0}},{}],149:[function(e,t,a){"use strict";function i(e,t,a){return Object.keys(e).filter(function(e){return a.indexOf(e)>-1&&-1===r.indexOf(t[t.length-1])?!0:void 0}).length>0}var n={array:["additionalItems","items","maxItems","minItems","uniqueItems"],integer:["exclusiveMaximum","exclusiveMinimum","maximum","minimum","multipleOf"],object:["additionalProperties","dependencies","maxProperties","minProperties","patternProperties","properties","required"],string:["maxLength","menlength","pattern"]},r=["additionalItems","items","additionalProperties","dependencies","patternProperties","properties"];n.number=n.integer,t.exports=function(e,t){for(var a in n)if(i(e,t,n[a]))return a}},{}],150:[function(e,t,a){"use strict";function i(e){var t=[];return e.forEach(function(e,a){"object"==typeof e&&null!==e?t[a]=Array.isArray(e)?i(e):n({},e):t[a]=e}),t}var n;n=t.exports=function(e,t){for(var a in t)"object"!=typeof t[a]||null===t[a]?e[a]=t[a]:Array.isArray(t[a])?e[a]=(e[a]||[]).concat(i(t[a])):"object"!=typeof e[a]||null===e[a]||Array.isArray(e[a])?e[a]=n({},t[a]):e[a]=n(e[a],t[a]);return e}},{}],151:[function(e,t,a){"use strict";t.exports={array:e("../types/array"),"boolean":e("../types/boolean"),integer:e("../types/integer"),number:e("../types/number"),"null":e("../types/null"),object:e("../types/object"),string:e("../types/string")}},{"../types/array":138,"../types/boolean":139,"../types/integer":140,"../types/null":141,"../types/number":142,"../types/object":143,"../types/string":144}],152:[function(e,t,a){"use strict";var i=e("./container"),n=i.get("faker"),r=t.exports=function(e,t,a,i){var s=!0;return"boolean"==typeof e&&(s=e,e=arguments[1],t=arguments[2],a=arguments[3],i=arguments[4]),a="undefined"==typeof a?r.MIN_NUMBER:a,i="undefined"==typeof i?r.MAX_NUMBER:i,e="undefined"==typeof e?a:e,t="undefined"==typeof t?i:t,e>t&&(t+=e),n.random.number({min:e,max:t,precision:s?1:Math.random()})};r.shuffle=function(e){for(var t=e.slice(),a=e.length;a>0;){var i=Math.floor(Math.random()*a),n=t[--a];t[a]=t[i],t[i]=n}return t},r.pick=function(e){return e[Math.floor(Math.random()*e.length)]},r.MIN_NUMBER=-100,r.MAX_NUMBER=100},{"./container":145}],153:[function(e,t,a){"use strict";function i(e,t,a){a(e);var c={};if(Array.isArray(e)&&(c=[]),Array.isArray(e["enum"]))return n.pick(e["enum"]);var u=e.type;if(Array.isArray(u)?u=n.pick(u):"undefined"==typeof u&&(u=s(e,t)||u),"string"==typeof u){if(!o[u])throw new r("unknown primitive "+JSON.stringify(u),t.concat(["type"]));try{return o[u](e,t,a)}catch(m){if("undefined"==typeof m.path)throw new r(m.message,t);throw m}}for(var f in e)"object"==typeof e[f]&&"definitions"!==f?c[f]=i(e[f],t.concat([f]),a):c[f]=e[f];return c}var n=e("./random"),r=e("./error"),s=e("./inferred"),o=null;t.exports=function(){return o=o||e("./primitives"),i.apply(null,arguments)}},{"./error":146,"./inferred":149,"./primitives":151,"./random":152}],154:[function(e,t,a){function i(e,t,a){if(null!=e){void 0!==a&&a in n(e)&&(t=[a]);for(var i=0,r=t.length;null!=e&&r>i;)e=e[t[i++]];return i&&i==r?e:void 0}}function n(e){return r(e)?e:Object(e)}function r(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}t.exports=i},{}],155:[function(e,t,a){function i(e){return null==e?"":e+""}function n(e){if(r(e))return e;var t=[];return i(e).replace(s,function(e,a,i,n){t.push(i?n.replace(o,"$1"):a||e)}),t}var r=e("lodash.isarray"),s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,o=/\\(\\)?/g;t.exports=n},{"lodash.isarray":157}],156:[function(e,t,a){function i(e,t,a){var i=null==e?void 0:n(e,r(t),t+"");return void 0===i?a:i}var n=e("lodash._baseget"),r=e("lodash._topath");t.exports=i},{"lodash._baseget":154,"lodash._topath":155}],157:[function(e,t,a){function i(e){return!!e&&"object"==typeof e}function n(e,t){var a=null==e?void 0:e[t];return c(a)?a:void 0; -}function r(e){return"number"==typeof e&&e>-1&&e%1==0&&y>=e}function s(e){return o(e)&&d.call(e)==m}function o(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function c(e){return null==e?!1:s(e)?g.test(l.call(e)):i(e)&&f.test(e)}var u="[object Array]",m="[object Function]",f=/^\[object .+?Constructor\]$/,p=Object.prototype,l=Function.prototype.toString,h=p.hasOwnProperty,d=p.toString,g=RegExp("^"+l.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),w=n(Array,"isArray"),y=9007199254740991,b=w||function(e){return i(e)&&r(e.length)&&d.call(e)==u};t.exports=b},{}],158:[function(e,t,a){function i(e){if(e=""+e,!(e.length>1e4)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var a=parseFloat(t[1]),i=(t[2]||"ms").toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return a*f;case"days":case"day":case"d":return a*m;case"hours":case"hour":case"hrs":case"hr":case"h":return a*u;case"minutes":case"minute":case"mins":case"min":case"m":return a*c;case"seconds":case"second":case"secs":case"sec":case"s":return a*o;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a}}}}function n(e){return e>=m?Math.round(e/m)+"d":e>=u?Math.round(e/u)+"h":e>=c?Math.round(e/c)+"m":e>=o?Math.round(e/o)+"s":e+"ms"}function r(e){return s(e,m,"day")||s(e,u,"hour")||s(e,c,"minute")||s(e,o,"second")||e+" ms"}function s(e,t,a){return t>e?void 0:1.5*t>e?Math.floor(e/t)+" "+a:Math.ceil(e/t)+" "+a+"s"}var o=1e3,c=60*o,u=60*c,m=24*u,f=365.25*m;t.exports=function(e,t){return t=t||{},"string"==typeof e?i(e):t["long"]?r(e):n(e)}},{}],159:[function(t,a,i){(function(t){!function(t,i,n){i[t]=i[t]||n(),"undefined"!=typeof a&&a.exports?a.exports=i[t]:"function"==typeof e&&e.amd&&e(function(){return i[t]})}("Promise","undefined"!=typeof t?t:this,function(){"use strict";function e(e,t){p.add(e,t),f||(f=h(p.drain))}function t(e){var t,a=typeof e;return null==e||"object"!=a&&"function"!=a||(t=e.then),"function"==typeof t?t:!1}function a(){for(var e=0;e0&&e(a,c))}catch(u){r.call(new o(c),u)}}}function r(t){var i=this;i.triggered||(i.triggered=!0,i.def&&(i=i.def),i.msg=t,i.state=2,i.chain.length>0&&e(a,i))}function s(e,t,a,i){for(var n=0;n=0;i--){var n=e[i];"."===n?e.splice(i,1):".."===n?(e.splice(i,1),a++):a&&(e.splice(i,1),a--)}if(t)for(;a--;a)e.unshift("..");return e}function i(e,t){if(e.filter)return e.filter(t);for(var a=[],i=0;i=-1&&!n;r--){var s=r>=0?arguments[r]:e.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(a=s+"/"+a,n="/"===s.charAt(0))}return a=t(i(a.split("/"),function(e){return!!e}),!n).join("/"),(n?"/":"")+a||"."},a.normalize=function(e){var n=a.isAbsolute(e),r="/"===s(e,-1);return e=t(i(e.split("/"),function(e){return!!e}),!n).join("/"),e||n||(e="."),e&&r&&(e+="/"),(n?"/":"")+e},a.isAbsolute=function(e){return"/"===e.charAt(0)},a.join=function(){var e=Array.prototype.slice.call(arguments,0);return a.normalize(i(e,function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},a.relative=function(e,t){function i(e){for(var t=0;t=0&&""===e[a];a--);return t>a?[]:e.slice(t,a-t+1)}e=a.resolve(e).substr(1),t=a.resolve(t).substr(1);for(var n=i(e.split("/")),r=i(t.split("/")),s=Math.min(n.length,r.length),o=s,c=0;s>c;c++)if(n[c]!==r[c]){o=c;break}for(var u=[],c=o;ct&&(t=e.length+t),e.substr(t,a)}}).call(this,e("_process"))},{_process:162}],161:[function(e,t,a){function i(e){for(var t,a=[],i=0,n=0,r="";null!=(t=g.exec(e));){var s=t[0],c=t[1],u=t.index;if(r+=e.slice(n,u),n=u+s.length,c)r+=c[1];else{r&&(a.push(r),r="");var m=t[2],f=t[3],p=t[4],l=t[5],h=t[6],d=t[7],w="+"===h||"*"===h,y="?"===h||"*"===h,b=m||"/",v=p||l||(d?".*":"[^"+b+"]+?");a.push({name:f||i++,prefix:m||"",delimiter:b,optional:y,repeat:w,pattern:o(v)})}}return n1)for(var a=1;a1&&(i=a[0]+"@",e=a[1]),e=e.replace(D,".");var n=e.split("."),r=s(n,t).join(".");return i+r}function c(e){for(var t,a,i=[],n=0,r=e.length;r>n;)t=e.charCodeAt(n++),t>=55296&&56319>=t&&r>n?(a=e.charCodeAt(n++),56320==(64512&a)?i.push(((1023&t)<<10)+(1023&a)+65536):(i.push(t),n--)):i.push(t);return i}function u(e){return s(e,function(e){var t="";return e>65535&&(e-=65536,t+=L(e>>>10&1023|55296),e=56320|1023&e),t+=L(e)}).join("")}function m(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:E}function f(e,t){return e+22+75*(26>e)-((0!=t)<<5)}function p(e,t,a){var i=0;for(e=a?O(e/_):e>>1,e+=O(e/t);e>T*x>>1;i+=E)e=O(e/T);return O(i+(T+1)*e/(e+S))}function l(e){var t,a,i,n,s,o,c,f,l,h,d=[],g=e.length,w=0,y=R,b=M;for(a=e.lastIndexOf(k),0>a&&(a=0),i=0;a>i;++i)e.charCodeAt(i)>=128&&r("not-basic"),d.push(e.charCodeAt(i));for(n=a>0?a+1:0;g>n;){for(s=w,o=1,c=E;n>=g&&r("invalid-input"),f=m(e.charCodeAt(n++)),(f>=E||f>O((z-w)/o))&&r("overflow"),w+=f*o,l=b>=c?A:c>=b+x?x:c-b,!(l>f);c+=E)h=E-l,o>O(z/h)&&r("overflow"),o*=h;t=d.length+1,b=p(w-s,t,0==s),O(w/t)>z-y&&r("overflow"),y+=O(w/t),w%=t,d.splice(w++,0,y)}return u(d)}function h(e){var t,a,i,n,s,o,u,m,l,h,d,g,w,y,b,v=[];for(e=c(e),g=e.length,t=R,a=0,s=M,o=0;g>o;++o)d=e[o],128>d&&v.push(L(d));for(i=n=v.length,n&&v.push(k);g>i;){for(u=z,o=0;g>o;++o)d=e[o],d>=t&&u>d&&(u=d);for(w=i+1,u-t>O((z-a)/w)&&r("overflow"),a+=(u-t)*w,t=u,o=0;g>o;++o)if(d=e[o],t>d&&++a>z&&r("overflow"),d==t){for(m=a,l=E;h=s>=l?A:l>=s+x?x:l-s,!(h>m);l+=E)b=m-h,y=E-h,v.push(L(f(h+b%y,0))),m=O(b/y);v.push(L(f(m,0))),s=p(a,w,i==n),a=0,++i}++a,++t}return v.join("")}function d(e){return o(e,function(e){return C.test(e)?l(e.slice(4).toLowerCase()):e})}function g(e){return o(e,function(e){return P.test(e)?"xn--"+h(e):e})}var w="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof a&&a&&!a.nodeType&&a,b="object"==typeof t&&t;(b.global===b||b.window===b||b.self===b)&&(n=b);var v,j,z=2147483647,E=36,A=1,x=26,S=38,_=700,M=72,R=128,k="-",C=/^xn--/,P=/[^\x20-\x7E]/,D=/[\x2E\u3002\uFF0E\uFF61]/g,I={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},T=E-A,O=Math.floor,L=String.fromCharCode;if(v={version:"1.3.2",ucs2:{decode:c,encode:u},decode:l,encode:h,toASCII:g,toUnicode:d},"function"==typeof e&&"object"==typeof e.amd&&e.amd)e("punycode",function(){return v});else if(w&&y)if(a.exports==w)y.exports=v;else for(j in v)v.hasOwnProperty(j)&&(w[j]=v[j]);else n.punycode=v}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],164:[function(e,t,a){"use strict";function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,a,r){t=t||"&",a=a||"=";var s={};if("string"!=typeof e||0===e.length)return s;var o=/\+/g;e=e.split(t);var c=1e3;r&&"number"==typeof r.maxKeys&&(c=r.maxKeys);var u=e.length;c>0&&u>c&&(u=c);for(var m=0;u>m;++m){var f,p,l,h,d=e[m].replace(o,"%20"),g=d.indexOf(a);g>=0?(f=d.substr(0,g),p=d.substr(g+1)):(f=d,p=""),l=decodeURIComponent(f),h=decodeURIComponent(p),i(s,l)?n(s[l])?s[l].push(h):s[l]=[s[l],h]:s[l]=h}return s};var n=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],165:[function(e,t,a){"use strict";function i(e,t){if(e.map)return e.map(t);for(var a=[],i=0;i=97&&122>=e?-32:e>=65&&90>=e?32:0)}function n(){return!this.randInt(0,1)}function r(e){return e instanceof u?e.index(this.randInt(0,e.length-1)):e[this.randInt(0,e.length-1)]}function s(e){if(e.type===c.types.CHAR)return new u(e.value);if(e.type===c.types.RANGE)return new u(e.from,e.to);if(e.type===c.types.SET){for(var t=new u,a=0;af;f++)c+=o.call(this,a[f],t);return e.remember&&(t[e.groupNumber]=c),c;case m.POSITION:return"";case m.SET:var l=s.call(this,e);return l.length?String.fromCharCode(r.call(this,l)):"";case m.REPETITION:for(u=this.randInt(e.min,e.max===1/0?e.min+this.max:e.max),c="",f=0;u>f;f++)c+=o.call(this,e.value,t);return c;case m.REFERENCE:return t[e.value-1]||"";case m.CHAR:var h=this.ignoreCase&&n.call(this)?i(e.value):e.value;return String.fromCharCode(h)}}var c=e("ret"),u=e("discontinuous-range"),m=c.types,f=t.exports=function(e,t){if(this.defaultRange=this.defaultRange.clone(),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,"number"==typeof e.max&&(this.max=e.max),e=e.source;else{if("string"!=typeof e)throw new Error("Expected a regexp or string");this.ignoreCase=t&&-1!==t.indexOf("i"),this.multiline=t&&-1!==t.indexOf("m")}this.tokens=c(e)};f.prototype.max=100,f.prototype.gen=function(){return o.call(this,this.tokens,[])},f.randexp=function(e,t){var a;return void 0===e._randexp?(a=new f(e,t),e._randexp=a):(a=e._randexp,"number"==typeof e.max&&(a.max=e.max),e.defaultRange instanceof u&&(a.defaultRange=e.defaultRange),"function"==typeof e.randInt&&(a.randInt=e.randInt)),a.gen()},f.sugar=function(){RegExp.prototype.gen=function(){return f.randexp(this)}},f.prototype.defaultRange=new u(32,126),f.prototype.randInt=function(e,t){return e+Math.floor(Math.random()*(1+t-e))}},{"discontinuous-range":29,ret:168}],168:[function(e,t,a){var i=e("./util"),n=e("./types"),r=e("./sets"),s=e("./positions");t.exports=function(e){var t,a,o=0,c={type:n.ROOT,stack:[]},u=c,m=c.stack,f=[],p=function(t){i.error(e,"Nothing to repeat at column "+(t-1))},l=i.strToChars(e);for(t=l.length;t>o;)switch(a=l[o++]){case"\\":switch(a=l[o++]){case"b":m.push(s.wordBoundary());break;case"B":m.push(s.nonWordBoundary());break;case"w":m.push(r.words());break;case"W":m.push(r.notWords());break;case"d":m.push(r.ints());break;case"D":m.push(r.notInts());break;case"s":m.push(r.whitespace());break;case"S":m.push(r.notWhitespace());break;default:/\d/.test(a)?m.push({type:n.REFERENCE,value:parseInt(a,10)}):m.push({type:n.CHAR,value:a.charCodeAt(0)})}break;case"^":m.push(s.begin());break;case"$":m.push(s.end());break;case"[":var h;"^"===l[o]?(h=!0,o++):h=!1;var d=i.tokenizeClass(l.slice(o),e);o+=d[1],m.push({type:n.SET,set:d[0],not:h});break;case".":m.push(r.anyChar());break;case"(":var g={type:n.GROUP,stack:[],remember:!0};a=l[o],"?"===a&&(a=l[o+1],o+=2,"="===a?g.followedBy=!0:"!"===a?g.notFollowedBy=!0:":"!==a&&i.error(e,"Invalid group, character '"+a+"' after '?' at column "+(o-1)),g.remember=!1),m.push(g),f.push(u),u=g,m=g.stack;break;case")":0===f.length&&i.error(e,"Unmatched ) at column "+(o-1)),u=f.pop(),m=u.options?u.options[u.options.length-1]:u.stack;break;case"|":u.options||(u.options=[u.stack],delete u.stack);var w=[];u.options.push(w),m=w;break;case"{":var y,b,v=/^(\d+)(,(\d+)?)?\}/.exec(l.slice(o));null!==v?(y=parseInt(v[1],10),b=v[2]?v[3]?parseInt(v[3],10):1/0:y,o+=v[0].length,m.push({type:n.REPETITION,min:y,max:b,value:m.pop()})):m.push({type:n.CHAR,value:123});break;case"?":0===m.length&&p(o),m.push({type:n.REPETITION,min:0,max:1,value:m.pop()});break;case"+":0===m.length&&p(o),m.push({type:n.REPETITION,min:1,max:1/0,value:m.pop()});break;case"*":0===m.length&&p(o),m.push({type:n.REPETITION,min:0,max:1/0,value:m.pop()});break;default:m.push({type:n.CHAR,value:a.charCodeAt(0)})}return 0!==f.length&&i.error(e,"Unterminated group"),c},t.exports.types=n},{"./positions":169,"./sets":170,"./types":171,"./util":172}],169:[function(e,t,a){var i=e("./types");a.wordBoundary=function(){return{type:i.POSITION,value:"b"}},a.nonWordBoundary=function(){return{type:i.POSITION,value:"B"}},a.begin=function(){return{type:i.POSITION,value:"^"}},a.end=function(){return{type:i.POSITION,value:"$"}}},{"./types":171}],170:[function(e,t,a){var i=e("./types"),n=function(){return[{type:i.RANGE,from:48,to:57}]},r=function(){return[{type:i.CHAR,value:95},{type:i.RANGE,from:97,to:122},{type:i.RANGE,from:65,to:90}].concat(n())},s=function(){return[{type:i.CHAR,value:9},{type:i.CHAR,value:10},{type:i.CHAR,value:11},{type:i.CHAR,value:12},{type:i.CHAR,value:13},{type:i.CHAR,value:32},{type:i.CHAR,value:160},{type:i.CHAR,value:5760},{type:i.CHAR,value:6158},{type:i.CHAR,value:8192},{type:i.CHAR,value:8193},{type:i.CHAR,value:8194},{type:i.CHAR,value:8195},{type:i.CHAR,value:8196},{type:i.CHAR,value:8197},{type:i.CHAR,value:8198},{type:i.CHAR,value:8199},{type:i.CHAR,value:8200},{type:i.CHAR,value:8201},{type:i.CHAR,value:8202},{type:i.CHAR,value:8232},{type:i.CHAR,value:8233},{type:i.CHAR,value:8239},{type:i.CHAR,value:8287},{type:i.CHAR,value:12288},{type:i.CHAR,value:65279}]},o=function(){return[{type:i.CHAR,value:10},{type:i.CHAR,value:13},{type:i.CHAR,value:8232},{type:i.CHAR,value:8233}]};a.words=function(){return{type:i.SET,set:r(),not:!1}},a.notWords=function(){return{type:i.SET,set:r(),not:!0}},a.ints=function(){return{type:i.SET,set:n(),not:!1}},a.notInts=function(){return{type:i.SET,set:n(),not:!0}},a.whitespace=function(){return{type:i.SET,set:s(),not:!1}},a.notWhitespace=function(){return{type:i.SET,set:s(),not:!0}},a.anyChar=function(){return{type:i.SET,set:o(),not:!0}}},{"./types":171}],171:[function(e,t,a){t.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},{}],172:[function(e,t,a){var i=e("./types"),n=e("./sets"),r="@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?",s={0:0,t:9,n:10,v:11,f:12,r:13};a.strToChars=function(e){var t=/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z\[\\\]\^?])|([0tnvfr]))/g;return e=e.replace(t,function(e,t,a,i,n,o,c,u){if(a)return e;var m=t?8:i?parseInt(i,16):n?parseInt(n,16):o?parseInt(o,8):c?r.indexOf(c):u?s[u]:void 0,f=String.fromCharCode(m);return/[\[\]{}\^$.|?*+()]/.test(f)&&(f="\\"+f),f})},a.tokenizeClass=function(e,t){for(var r,s,o=[],c=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g;null!=(r=c.exec(e));)if(r[1])o.push(n.words());else if(r[2])o.push(n.ints());else if(r[3])o.push(n.whitespace());else if(r[4])o.push(n.notWords());else if(r[5])o.push(n.notInts());else if(r[6])o.push(n.notWhitespace());else if(r[7])o.push({type:i.RANGE,from:(r[8]||r[9]).charCodeAt(0),to:r[10].charCodeAt(0)});else{if(!(s=r[12]))return[o,c.lastIndex];o.push({type:i.CHAR,value:s.charCodeAt(0)})}a.error(t,"Unterminated character class")},a.error=function(e,t){throw new SyntaxError("Invalid regular expression: /"+e+"/: "+t)}},{"./sets":170,"./types":171}],173:[function(e,t,a){"use strict";function i(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function n(e,t,a){if(e&&u.isObject(e)&&e instanceof i)return e;var n=new i;return n.parse(e,t,a),n}function r(e){return u.isString(e)&&(e=n(e)),e instanceof i?e.format():i.prototype.format.call(e)}function s(e,t){return n(e,!1,!0).resolve(t)}function o(e,t){return e?n(e,!1,!0).resolveObject(t):t}var c=e("punycode"),u=e("./util");a.parse=n,a.resolve=s,a.resolveObject=o,a.format=r,a.Url=i;var m=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["<",">",'"',"`"," ","\r","\n"," "],h=["{","}","|","\\","^","`"].concat(l),d=["'"].concat(h),g=["%","/","?",";","#"].concat(d),w=["/","?","#"],y=255,b=/^[+a-z0-9A-Z_-]{0,63}$/,v=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,j={javascript:!0,"javascript:":!0},z={javascript:!0,"javascript:":!0},E={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},A=e("querystring");i.prototype.parse=function(e,t,a){if(!u.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var i=e.indexOf("?"),n=-1!==i&&iM)&&(S=M)}var R,k;k=-1===S?o.lastIndexOf("@"):o.lastIndexOf("@",S),-1!==k&&(R=o.slice(0,k),o=o.slice(k+1),this.auth=decodeURIComponent(R)),S=-1;for(var _=0;_M)&&(S=M)}-1===S&&(S=o.length),this.host=o.slice(0,S),o=o.slice(S),this.parseHost(),this.hostname=this.hostname||"";var C="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!C)for(var P=this.hostname.split(/\./),_=0,D=P.length;D>_;_++){var I=P[_];if(I&&!I.match(b)){for(var T="",O=0,L=I.length;L>O;O++)T+=I.charCodeAt(O)>127?"x":I[O];if(!T.match(b)){var N=P.slice(0,_),B=P.slice(_+1),F=I.match(v);F&&(N.push(F[1]),B.unshift(F[2])),B.length&&(o="/"+B.join(".")+o),this.hostname=N.join(".");break}}}this.hostname.length>y?this.hostname="":this.hostname=this.hostname.toLowerCase(),C||(this.hostname=c.toASCII(this.hostname));var U=this.port?":"+this.port:"",K=this.hostname||"";this.host=K+U,this.href+=this.host,C&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!j[h])for(var _=0,D=d.length;D>_;_++){var $=d[_];if(-1!==o.indexOf($)){var J=encodeURIComponent($);J===$&&(J=escape($)),o=o.split($).join(J)}}var G=o.indexOf("#");-1!==G&&(this.hash=o.substr(G),o=o.slice(0,G));var H=o.indexOf("?");if(-1!==H?(this.search=o.substr(H),this.query=o.substr(H+1),t&&(this.query=A.parse(this.query)),o=o.slice(0,H)):t&&(this.search="",this.query={}),o&&(this.pathname=o),E[h]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",W=this.search||"";this.path=U+W}return this.href=this.format(),this},i.prototype.format=function(){var e=this.auth||"";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,":"),e+="@");var t=this.protocol||"",a=this.pathname||"",i=this.hash||"",n=!1,r="";this.host?n=e+this.host:this.hostname&&(n=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u.isObject(this.query)&&Object.keys(this.query).length&&(r=A.stringify(this.query));var s=this.search||r&&"?"+r||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||E[t])&&n!==!1?(n="//"+(n||""),a&&"/"!==a.charAt(0)&&(a="/"+a)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),a=a.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),s=s.replace("#","%23"),t+n+a+s+i},i.prototype.resolve=function(e){return this.resolveObject(n(e,!1,!0)).format()},i.prototype.resolveObject=function(e){if(u.isString(e)){var t=new i;t.parse(e,!1,!0),e=t}for(var a=new i,n=Object.keys(this),r=0;r0?a.host.split("@"):!1;x&&(a.auth=x.shift(),a.host=a.hostname=x.shift())}return a.search=e.search,a.query=e.query,u.isNull(a.pathname)&&u.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.href=a.format(),a}if(!j.length)return a.pathname=null,a.search?a.path="/"+a.search:a.path=null,a.href=a.format(),a;for(var S=j.slice(-1)[0],_=(a.host||e.host||j.length>1)&&("."===S||".."===S)||""===S,M=0,R=j.length;R>=0;R--)S=j[R],"."===S?j.splice(R,1):".."===S?(j.splice(R,1),M++):M&&(j.splice(R,1),M--);if(!b&&!v)for(;M--;M)j.unshift("..");!b||""===j[0]||j[0]&&"/"===j[0].charAt(0)||j.unshift(""),_&&"/"!==j.join("/").substr(-1)&&j.push("");var k=""===j[0]||j[0]&&"/"===j[0].charAt(0);if(A){a.hostname=a.host=k?"":j.length?j.shift():"";var x=a.host&&a.host.indexOf("@")>0?a.host.split("@"):!1;x&&(a.auth=x.shift(),a.host=a.hostname=x.shift())}return b=b||a.host&&j.length,b&&!k&&j.unshift(""),j.length?a.pathname=j.join("/"):(a.pathname=null,a.path=null),u.isNull(a.pathname)&&u.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.auth=e.auth||a.auth,a.slashes=a.slashes||e.slashes,a.href=a.format(),a},i.prototype.parseHost=function(){var e=this.host,t=f.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{"./util":174,punycode:163,querystring:166}],174:[function(e,t,a){"use strict";t.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],175:[function(t,a,i){!function(t,n){"undefined"!=typeof i&&"undefined"!=typeof a?a.exports=n():"function"==typeof e&&"object"==typeof e.amd?e(n):"function"==typeof e&&"object"==typeof e.petal?e(t,[],n):this[t]=n()}("validator",function(e){"use strict";function t(e){var t,a,i,n,r=e.match(P);if(r){if(t=r[21],!t)return null;if("z"===t||"Z"===t)return 0;a=r[22],-1!==t.indexOf(":")?(i=parseInt(r[23]),n=parseInt(r[24])):(i=0,n=parseInt(r[23]))}else{if(e=e.toLowerCase(),t=e.match(/(?:\s|gmt\s*)(-|\+)(\d{1,4})(\s|$)/),!t)return-1!==e.indexOf("gmt")?0:null;a=t[1];var s=t[2];3===s.length&&(s="0"+s),s.length<=2?(i=0,n=parseInt(s)):(i=parseInt(s.slice(0,2)),n=parseInt(s.slice(2,4)))}return(60*i+n)*("-"===a?1:-1)}function a(e,t){e=e||{};for(var a in t)"undefined"==typeof e[a]&&(e[a]=t[a]);return e}function i(e){var t="(\\"+e.symbol.replace(/\./g,"\\.")+")"+(e.require_symbol?"":"?"),a="-?",i="[1-9]\\d*",n="[1-9]\\d{0,2}(\\"+e.thousands_separator+"\\d{3})*",r=["0",i,n],s="("+r.join("|")+")?",o="(\\"+e.decimal_separator+"\\d{2})?",c=s+o;return e.allow_negatives&&!e.parens_for_negatives&&(e.negative_sign_after_digits?c+=a:e.negative_sign_before_digits&&(c=a+c)),e.allow_negative_sign_placeholder?c="( (?!\\-))?"+c:e.allow_space_after_symbol?c=" ?"+c:e.allow_space_after_digits&&(c+="( (?!$))?"), -e.symbol_after_digits?c+=t:c=t+c,e.allow_negatives&&(e.parens_for_negatives?c="(\\("+c+"\\)|"+c+")":e.negative_sign_before_digits||e.negative_sign_after_digits||(c=a+c)),new RegExp("^(?!-? )(?=.*\\d)"+c+"$")}e={version:"4.5.0"};var n=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,r=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,s=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,o=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i,c=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i,u=/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,m=/^[A-Z]{2}[0-9A-Z]{9}[0-9]$/,f=/^(?:[0-9]{9}X|[0-9]{10})$/,p=/^(?:[0-9]{13})$/,l=/^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/,h=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,d=/^[0-9A-F]{1,4}$/i,g={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i},w=/^[A-Z]+$/i,y=/^[0-9A-Z]+$/i,b=/^[-+]?[0-9]+$/,v=/^(?:[-+]?(?:0|[1-9][0-9]*))$/,j=/^(?:[-+]?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/,z=/^[0-9A-F]+$/i,E=/^[-+]?([0-9]+|\.[0-9]+|[0-9]+\.[0-9]+)$/,A=/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i,x=/^[\x00-\x7F]+$/,S=/[^\x00-\x7F]/,_=/[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,M=/[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,R=/[\uD800-\uDBFF][\uDC00-\uDFFF]/,k=/^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i,C={"zh-CN":/^(\+?0?86\-?)?((13\d|14[57]|15[^4,\D]|17[678]|18\d)\d{8}|170[059]\d{7})$/,"zh-TW":/^(\+?886\-?|0)?9\d{8}$/,"en-ZA":/^(\+?27|0)\d{9}$/,"en-AU":/^(\+?61|0)4\d{8}$/,"en-HK":/^(\+?852\-?)?[569]\d{3}\-?\d{4}$/,"fr-FR":/^(\+?33|0)[67]\d{8}$/,"pt-PT":/^(\+351)?9[1236]\d{7}$/,"el-GR":/^(\+?30)?(69\d{8})$/,"en-GB":/^(\+?44|0)7\d{9}$/,"en-US":/^(\+?1)?[2-9]\d{2}[2-9](?!11)\d{6}$/,"en-ZM":/^(\+26)?09[567]\d{7}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/,"nb-NO":/^(\+?47)?[49]\d{7}$/,"nn-NO":/^(\+?47)?[49]\d{7}$/,"vi-VN":/^(0|\+?84)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$/,"en-NZ":/^(\+?64|0)2\d{7,9}$/,"en-IN":/^(\+?91|0)?[789]\d{9}$/},P=/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;e.extend=function(t,a){e[t]=function(){var t=Array.prototype.slice.call(arguments);return t[0]=e.toString(t[0]),a.apply(e,t)}},e.init=function(){for(var t in e)"function"==typeof e[t]&&"toString"!==t&&"toDate"!==t&&"extend"!==t&&"init"!==t&&e.extend(t,e[t])},e.toString=function(e){return"object"==typeof e&&null!==e&&e.toString?e=e.toString():(null===e||"undefined"==typeof e||isNaN(e)&&!e.length)&&(e=""),""+e},e.toDate=function(e){return"[object Date]"===Object.prototype.toString.call(e)?e:(e=Date.parse(e),isNaN(e)?null:new Date(e))},e.toFloat=function(e){return parseFloat(e)},e.toInt=function(e,t){return parseInt(e,t||10)},e.toBoolean=function(e,t){return t?"1"===e||"true"===e:"0"!==e&&"false"!==e&&""!==e},e.equals=function(t,a){return t===e.toString(a)},e.contains=function(t,a){return t.indexOf(e.toString(a))>=0},e.matches=function(e,t,a){return"[object RegExp]"!==Object.prototype.toString.call(t)&&(t=new RegExp(t,a)),t.test(e)};var D={allow_display_name:!1,allow_utf8_local_part:!0,require_tld:!0};e.isEmail=function(t,i){if(i=a(i,D),i.allow_display_name){var u=t.match(c);u&&(t=u[1])}var m=t.split("@"),f=m.pop(),p=m.join("@"),l=f.toLowerCase();if(("gmail.com"===l||"googlemail.com"===l)&&(p=p.replace(/\./g,"").toLowerCase()),!e.isByteLength(p,0,64)||!e.isByteLength(f,0,256))return!1;if(!e.isFQDN(f,{require_tld:i.require_tld}))return!1;if('"'===p[0])return p=p.slice(1,p.length-1),i.allow_utf8_local_part?o.test(p):r.test(p);for(var h=i.allow_utf8_local_part?s:n,d=p.split("."),g=0;g=2083||/\s/.test(t))return!1;if(0===t.indexOf("mailto:"))return!1;i=a(i,I);var n,r,s,o,c,u,m;if(m=t.split("://"),m.length>1){if(n=m.shift(),i.require_valid_protocol&&-1===i.protocols.indexOf(n))return!1}else{if(i.require_protocol)return!1;i.allow_protocol_relative_urls&&"//"===t.substr(0,2)&&(m[0]=t.substr(2))}return t=m.join("://"),m=t.split("#"),t=m.shift(),m=t.split("?"),t=m.shift(),m=t.split("/"),t=m.shift(),m=t.split("@"),m.length>1&&(r=m.shift(),r.indexOf(":")>=0&&r.split(":").length>2)?!1:(o=m.join("@"),m=o.split(":"),s=m.shift(),m.length&&(u=m.join(":"),c=parseInt(u,10),!/^[0-9]+$/.test(u)||0>=c||c>65535)?!1:e.isIP(s)||e.isFQDN(s,i)||"localhost"===s?i.host_whitelist&&-1===i.host_whitelist.indexOf(s)?!1:i.host_blacklist&&-1!==i.host_blacklist.indexOf(s)?!1:!0:!1)},e.isMACAddress=function(e){return l.test(e)},e.isIP=function(t,a){if(a=e.toString(a),!a)return e.isIP(t,4)||e.isIP(t,6);if("4"===a){if(!h.test(t))return!1;var i=t.split(".").sort(function(e,t){return e-t});return i[3]<=255}if("6"===a){var n=t.split(":"),r=!1,s=e.isIP(n[n.length-1],4),o=s?7:8;if(n.length>o)return!1;if("::"===t)return!0;"::"===t.substr(0,2)?(n.shift(),n.shift(),r=!0):"::"===t.substr(t.length-2)&&(n.pop(),n.pop(),r=!0);for(var c=0;c0&&c=1:n.length===o}return!1};var T={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1};e.isFQDN=function(e,t){t=a(t,T),t.allow_trailing_dot&&"."===e[e.length-1]&&(e=e.substring(0,e.length-1));var i=e.split(".");if(t.require_tld){var n=i.pop();if(!i.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(n))return!1}for(var r,s=0;s=0)return!1;r=r.replace(/_/g,"")}if(!/^[a-z\u00a1-\uffff0-9-]+$/i.test(r))return!1;if(/[\uff01-\uff5e]/.test(r))return!1;if("-"===r[0]||"-"===r[r.length-1])return!1;if(r.indexOf("---")>=0&&"xn--"!==r.slice(0,4))return!1}return!0},e.isBoolean=function(e){return["true","false","1","0"].indexOf(e)>=0},e.isAlpha=function(e){return w.test(e)},e.isAlphanumeric=function(e){return y.test(e)},e.isNumeric=function(e){return b.test(e)},e.isDecimal=function(e){return""!==e&&E.test(e)},e.isHexadecimal=function(e){return z.test(e)},e.isHexColor=function(e){return A.test(e)},e.isLowercase=function(e){return e===e.toLowerCase()},e.isUppercase=function(e){return e===e.toUpperCase()},e.isInt=function(e,t){return t=t||{},v.test(e)&&(!t.hasOwnProperty("min")||e>=t.min)&&(!t.hasOwnProperty("max")||e<=t.max)},e.isFloat=function(e,t){return t=t||{},""===e||"."===e?!1:j.test(e)&&(!t.hasOwnProperty("min")||e>=t.min)&&(!t.hasOwnProperty("max")||e<=t.max)},e.isDivisibleBy=function(t,a){return e.toFloat(t)%e.toInt(a)===0},e.isNull=function(e){return 0===e.length},e.isLength=function(e,t,a){var i=e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[],n=e.length-i.length;return n>=t&&("undefined"==typeof a||a>=n)},e.isByteLength=function(e,t,a){var i=encodeURI(e).split(/%..|./).length-1;return i>=t&&("undefined"==typeof a||a>=i)},e.isUUID=function(e,t){var a=g[t?t:"all"];return a&&a.test(e)},e.isDate=function(e){var a=new Date(Date.parse(e));if(isNaN(a))return!1;var i=t(e);if(null!==i){var n=a.getTimezoneOffset()-i;a=new Date(a.getTime()+6e4*n)}var r,s,o,c=String(a.getDate());return(s=e.match(/(^|[^:\d])[23]\d([^:\d]|$)/g))?(r=s.map(function(e){return e.match(/\d+/g)[0]}).join("/"),o=String(a.getFullYear()).slice(-2),r===c||r===o?!0:r===c+"/"+o||r===o+"/"+c?!0:!1):!0},e.isAfter=function(t,a){var i=e.toDate(a||new Date),n=e.toDate(t);return!!(n&&i&&n>i)},e.isBefore=function(t,a){var i=e.toDate(a||new Date),n=e.toDate(t);return!!(n&&i&&i>n)},e.isIn=function(t,a){var i;if("[object Array]"===Object.prototype.toString.call(a)){var n=[];for(i in a)n[i]=e.toString(a[i]);return n.indexOf(t)>=0}return"object"==typeof a?a.hasOwnProperty(t):a&&"function"==typeof a.indexOf?a.indexOf(t)>=0:!1},e.isWhitelisted=function(e,t){for(var a=e.length-1;a>=0;a--)if(-1===t.indexOf(e[a]))return!1;return!0},e.isCreditCard=function(e){var t=e.replace(/[^0-9]+/g,"");if(!u.test(t))return!1;for(var a,i,n,r=0,s=t.length-1;s>=0;s--)a=t.substring(s,s+1),i=parseInt(a,10),n?(i*=2,r+=i>=10?i%10+1:i):r+=i,n=!n;return!!(r%10===0?t:!1)},e.isISIN=function(e){if(!m.test(e))return!1;for(var t,a,i=e.replace(/[A-Z]/g,function(e){return parseInt(e,36)}),n=0,r=!0,s=i.length-2;s>=0;s--)t=i.substring(s,s+1),a=parseInt(t,10),r?(a*=2,n+=a>=10?a+1:a):n+=a,r=!r;return parseInt(e.substr(e.length-1),10)===(1e4-n)%10},e.isISBN=function(t,a){if(a=e.toString(a),!a)return e.isISBN(t,10)||e.isISBN(t,13);var i,n=t.replace(/[\s-]+/g,""),r=0;if("10"===a){if(!f.test(n))return!1;for(i=0;9>i;i++)r+=(i+1)*n.charAt(i);if(r+="X"===n.charAt(9)?100:10*n.charAt(9),r%11===0)return!!n}else if("13"===a){if(!p.test(n))return!1;var s=[1,3];for(i=0;12>i;i++)r+=s[i%2]*n.charAt(i);if(n.charAt(12)-(10-r%10)%10===0)return!!n}return!1},e.isMobilePhone=function(e,t){return t in C?C[t].test(e):!1};var O={symbol:"$",require_symbol:!1,allow_space_after_symbol:!1,symbol_after_digits:!1,allow_negatives:!0,parens_for_negatives:!1,negative_sign_before_digits:!1,negative_sign_after_digits:!1,allow_negative_sign_placeholder:!1,thousands_separator:",",decimal_separator:".",allow_space_after_digits:!1};e.isCurrency=function(e,t){return t=a(t,O),i(t).test(e)},e.isJSON=function(e){try{var t=JSON.parse(e);return!!t&&"object"==typeof t}catch(a){}return!1},e.isMultibyte=function(e){return S.test(e)},e.isAscii=function(e){return x.test(e)},e.isFullWidth=function(e){return _.test(e)},e.isHalfWidth=function(e){return M.test(e)},e.isVariableWidth=function(e){return _.test(e)&&M.test(e)},e.isSurrogatePair=function(e){return R.test(e)},e.isBase64=function(e){return k.test(e)},e.isMongoId=function(t){return e.isHexadecimal(t)&&24===t.length},e.isISO8601=function(e){return P.test(e)},e.ltrim=function(e,t){var a=t?new RegExp("^["+t+"]+","g"):/^\s+/g;return e.replace(a,"")},e.rtrim=function(e,t){var a=t?new RegExp("["+t+"]+$","g"):/\s+$/g;return e.replace(a,"")},e.trim=function(e,t){var a=t?new RegExp("^["+t+"]+|["+t+"]+$","g"):/^\s+|\s+$/g;return e.replace(a,"")},e.escape=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">").replace(/\//g,"/").replace(/\`/g,"`")},e.stripLow=function(t,a){var i=a?"\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F":"\\x00-\\x1F\\x7F";return e.blacklist(t,i)},e.whitelist=function(e,t){return e.replace(new RegExp("[^"+t+"]+","g"),"")},e.blacklist=function(e,t){return e.replace(new RegExp("["+t+"]+","g"),"")};var L={lowercase:!0,remove_dots:!0,remove_extension:!0};return e.normalizeEmail=function(t,i){if(i=a(i,L),!e.isEmail(t))return!1;var n=t.split("@",2);if(n[1]=n[1].toLowerCase(),"gmail.com"===n[1]||"googlemail.com"===n[1]){if(i.remove_extension&&(n[0]=n[0].split("+")[0]),i.remove_dots&&(n[0]=n[0].replace(/\./g,"")),!n[0].length)return!1;n[0]=n[0].toLowerCase(),n[1]="gmail.com"}else i.lowercase&&(n[0]=n[0].toLowerCase());return n.join("@")},e.init(),e})},{}],176:[function(e,t,a){"use strict";t.exports={INVALID_TYPE:"Expected type {0} but found type {1}",INVALID_FORMAT:"Object didn't pass validation for format {0}: {1}",ENUM_MISMATCH:"No enum match for: {0}",ANY_OF_MISSING:"Data does not match any schemas from 'anyOf'",ONE_OF_MISSING:"Data does not match any schemas from 'oneOf'",ONE_OF_MULTIPLE:"Data is valid against more than one schema from 'oneOf'",NOT_PASSED:"Data matches schema from 'not'",ARRAY_LENGTH_SHORT:"Array is too short ({0}), minimum {1}",ARRAY_LENGTH_LONG:"Array is too long ({0}), maximum {1}",ARRAY_UNIQUE:"Array items are not unique (indexes {0} and {1})",ARRAY_ADDITIONAL_ITEMS:"Additional items not allowed",MULTIPLE_OF:"Value {0} is not a multiple of {1}",MINIMUM:"Value {0} is less than minimum {1}",MINIMUM_EXCLUSIVE:"Value {0} is equal or less than exclusive minimum {1}",MAXIMUM:"Value {0} is greater than maximum {1}",MAXIMUM_EXCLUSIVE:"Value {0} is equal or greater than exclusive maximum {1}",OBJECT_PROPERTIES_MINIMUM:"Too few properties defined ({0}), minimum {1}",OBJECT_PROPERTIES_MAXIMUM:"Too many properties defined ({0}), maximum {1}",OBJECT_MISSING_REQUIRED_PROPERTY:"Missing required property: {0}",OBJECT_ADDITIONAL_PROPERTIES:"Additional properties not allowed: {0}",OBJECT_DEPENDENCY_KEY:"Dependency failed - key must exist: {0} (due to key: {1})",MIN_LENGTH:"String is too short ({0} chars), minimum {1}",MAX_LENGTH:"String is too long ({0} chars), maximum {1}",PATTERN:"String does not match pattern {0}: {1}",KEYWORD_TYPE_EXPECTED:"Keyword '{0}' is expected to be of type '{1}'",KEYWORD_UNDEFINED_STRICT:"Keyword '{0}' must be defined in strict mode",KEYWORD_UNEXPECTED:"Keyword '{0}' is not expected to appear in the schema",KEYWORD_MUST_BE:"Keyword '{0}' must be {1}",KEYWORD_DEPENDENCY:"Keyword '{0}' requires keyword '{1}'",KEYWORD_PATTERN:"Keyword '{0}' is not a valid RegExp pattern: {1}",KEYWORD_VALUE_TYPE:"Each element of keyword '{0}' array must be a '{1}'",UNKNOWN_FORMAT:"There is no validation function for format '{0}'",CUSTOM_MODE_FORCE_PROPERTIES:"{0} must define at least one property if present",REF_UNRESOLVED:"Reference has not been resolved during compilation: {0}",UNRESOLVABLE_REFERENCE:"Reference could not be resolved: {0}",SCHEMA_NOT_REACHABLE:"Validator was not able to read schema with uri: {0}",SCHEMA_TYPE_EXPECTED:"Schema is expected to be of type 'object'",SCHEMA_NOT_AN_OBJECT:"Schema is not an object: {0}",ASYNC_TIMEOUT:"{0} asynchronous task(s) have timed out after {1} ms",PARENT_SCHEMA_VALIDATION_FAILED:"Schema failed to validate against its parent schema, see inner errors for details.",REMOTE_NOT_VALID:"Remote reference didn't compile successfully: {0}"}},{}],177:[function(e,t,a){var i=e("validator"),n={date:function(e){if("string"!=typeof e)return!0;var t=/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/.exec(e);return null===t?!1:t[2]<"01"||t[2]>"12"||t[3]<"01"||t[3]>"31"?!1:!0},"date-time":function(e){if("string"!=typeof e)return!0;var t=e.toLowerCase().split("t");if(!n.date(t[0]))return!1;var a=/^([0-9]{2}):([0-9]{2}):([0-9]{2})(.[0-9]+)?(z|([+-][0-9]{2}:[0-9]{2}))$/.exec(t[1]);return null===a?!1:a[1]>"23"||a[2]>"59"||a[3]>"59"?!1:!0},email:function(e){return"string"!=typeof e?!0:i.isEmail(e,{require_tld:!0})},hostname:function(e){if("string"!=typeof e)return!0;var t=/^[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?(\.[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?)*$/.test(e);if(t){if(e.length>255)return!1;for(var a=e.split("."),i=0;i63)return!1}return t},"host-name":function(e){return n.hostname.call(this,e)},ipv4:function(e){return"string"!=typeof e?!0:i.isIP(e,4)},ipv6:function(e){return"string"!=typeof e?!0:i.isIP(e,6)},regex:function(e){try{return RegExp(e),!0}catch(t){return!1}},uri:function(e){return this.options.strictUris?n["strict-uri"].apply(this,arguments):"string"!=typeof e||RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?").test(e)},"strict-uri":function(e){return"string"!=typeof e||i.isURL(e)}};t.exports=n},{validator:175}],178:[function(e,t,a){"use strict";var i=e("./FormatValidators"),n=e("./Report"),r=e("./Utils"),s={multipleOf:function(e,t,a){"number"==typeof a&&"integer"!==r.whatIs(a/t.multipleOf)&&e.addError("MULTIPLE_OF",[a,t.multipleOf],null,t.description)},maximum:function(e,t,a){"number"==typeof a&&(t.exclusiveMaximum!==!0?a>t.maximum&&e.addError("MAXIMUM",[a,t.maximum],null,t.description):a>=t.maximum&&e.addError("MAXIMUM_EXCLUSIVE",[a,t.maximum],null,t.description))},exclusiveMaximum:function(){},minimum:function(e,t,a){"number"==typeof a&&(t.exclusiveMinimum!==!0?at.maxLength&&e.addError("MAX_LENGTH",[a.length,t.maxLength],null,t.description)},minLength:function(e,t,a){"string"==typeof a&&r.ucs2decode(a).lengtht.items.length&&e.addError("ARRAY_ADDITIONAL_ITEMS",null,null,t.description)},items:function(){},maxItems:function(e,t,a){Array.isArray(a)&&a.length>t.maxItems&&e.addError("ARRAY_LENGTH_LONG",[a.length,t.maxItems],null,t.description)},minItems:function(e,t,a){Array.isArray(a)&&a.lengtht.maxProperties&&e.addError("OBJECT_PROPERTIES_MAXIMUM",[i,t.maxProperties],null,t.description)}},minProperties:function(e,t,a){if("object"===r.whatIs(a)){var i=Object.keys(a).length;i0){var p=this.options.assumeAdditional.length;if(p)for(;p--;){var l=s.indexOf(this.options.assumeAdditional[p]);-1!==l&&s.splice(l,1)}s.length>0&&e.addError("OBJECT_ADDITIONAL_PROPERTIES",[s],null,t.description)}}}},dependencies:function(e,t,i){if("object"===r.whatIs(i))for(var n=Object.keys(t.dependencies),s=n.length;s--;){var o=n[s];if(i[o]){var c=t.dependencies[o];if("object"===r.whatIs(c))a.validate.call(this,e,c,i);else for(var u=c.length;u--;){var m=c[u];void 0===i[m]&&e.addError("OBJECT_DEPENDENCY_KEY",[m,o],null,t.description)}}}},"enum":function(e,t,a){for(var i=!1,n=t["enum"].length;n--;)if(r.areEqual(a,t["enum"][n])){i=!0;break}i===!1&&e.addError("ENUM_MISMATCH",[a],null,t.description)},allOf:function(e,t,i){for(var n=t.allOf.length;n--;){var r=a.validate.call(this,e,t.allOf[n],i);if(this.options.breakOnFirstError&&r===!1)break}},anyOf:function(e,t,i){for(var r=[],s=!1,o=t.anyOf.length;o--&&s===!1;){var c=new n(e);r.push(c),s=a.validate.call(this,c,t.anyOf[o],i)}s===!1&&e.addError("ANY_OF_MISSING",void 0,r,t.description)},oneOf:function(e,t,i){for(var r=0,s=[],o=t.oneOf.length;o--;){var c=new n(e,{maxErrors:1});s.push(c),a.validate.call(this,c,t.oneOf[o],i)===!0&&r++}0===r?e.addError("ONE_OF_MISSING",void 0,s,t.description):r>1&&e.addError("ONE_OF_MULTIPLE",null,null,t.description)},not:function(e,t,i){var r=new n(e);a.validate.call(this,r,t.not,i)===!0&&e.addError("NOT_PASSED",null,null,t.description)},definitions:function(){},format:function(e,t,a){var n=i[t.format];"function"==typeof n?2===n.length?e.addAsyncTask(n,[a],function(i){i!==!0&&e.addError("INVALID_FORMAT",[t.format,a],null,t.description)}):n.call(this,a)!==!0&&e.addError("INVALID_FORMAT",[t.format,a],null,t.description):this.options.ignoreUnknownFormats!==!0&&e.addError("UNKNOWN_FORMAT",[t.format],null,t.description)}},o=function(e,t,i){var n=i.length;if(Array.isArray(t.items))for(;n--;)n0;){if(!t.__$refResolved){e.addError("REF_UNRESOLVED",[t.$ref],null,t.description);break}if(t.__$refResolved===t)break;t=t.__$refResolved,n=Object.keys(t),m--}if(0===m)throw new Error("Circular dependency by $ref references!")}var f=r.whatIs(a);if(t.type)if("string"==typeof t.type){if(f!==t.type&&("integer"!==f||"number"!==t.type)&&(e.addError("INVALID_TYPE",[t.type,f],null,t.description),this.options.breakOnFirstError))return!1}else if(-1===t.type.indexOf(f)&&("integer"!==f||-1===t.type.indexOf("number"))&&(e.addError("INVALID_TYPE",[t.type,f],null,t.description),this.options.breakOnFirstError))return!1;for(var p=n.length;p--&&!(s[n[p]]&&(s[n[p]].call(this,e,t,a),e.errors.length&&this.options.breakOnFirstError)););return(0===e.errors.length||this.options.breakOnFirstError===!1)&&("array"===f?o.call(this,e,t,a):"object"===f&&c.call(this,e,t,a)),u&&(e.rootSchema=void 0),0===e.errors.length}},{"./FormatValidators":177,"./Report":180,"./Utils":184}],179:[function(e,t,a){"function"!=typeof Number.isFinite&&(Number.isFinite=function(e){return"number"!=typeof e?!1:e!==e||e===1/0||e===-(1/0)?!1:!0})},{}],180:[function(e,t,a){(function(a){"use strict";function i(e,t){this.parentReport=e instanceof i?e:void 0,this.options=e instanceof i?e.options:e||{},this.reportOptions=t||{},this.errors=[],this.path=[],this.asyncTasks=[]}var n=e("lodash.get"),r=e("./Errors"),s=e("./Utils");i.prototype.isValid=function(){if(this.asyncTasks.length>0)throw new Error("Async tasks pending, can't answer isValid");return 0===this.errors.length},i.prototype.addAsyncTask=function(e,t,a){this.asyncTasks.push([e,t,a])},i.prototype.processAsyncTasks=function(e,t){function i(){a.nextTick(function(){var e=0===u.errors.length,a=e?void 0:u.errors;t(a,e)})}function n(e){return function(t){c||(e(t),0===--s&&i())}}var r=e||2e3,s=this.asyncTasks.length,o=s,c=!1,u=this;if(0===s||this.errors.length>0)return void i();for(;o--;){var m=this.asyncTasks[o];m[0].apply(null,m[1].concat(n(m[2])))}setTimeout(function(){s>0&&(c=!0,u.addError("ASYNC_TIMEOUT",[s,r]),t(u.errors,!1))},r)},i.prototype.getPath=function(){var e=[];return this.parentReport&&(e=e.concat(this.parentReport.path)),e=e.concat(this.path),this.options.reportPathAsArray!==!0&&(e="#/"+e.map(function(e){return s.isAbsoluteUri(e)?"uri("+e+")":e.replace(/\~/g,"~0").replace(/\//g,"~1")}).join("/")),e},i.prototype.getSchemaId=function(){if(!this.rootSchema)return null;var e=[];for(this.parentReport&&(e=e.concat(this.parentReport.path)),e=e.concat(this.path);e.length>0;){var t=n(this.rootSchema,e);if(t&&t.id)return t.id;e.pop()}return this.rootSchema.id},i.prototype.hasError=function(e,t){for(var a=this.errors.length;a--;)if(this.errors[a].code===e){for(var i=!0,n=this.errors[a].params.length;n--;)this.errors[a].params[n]!==t[n]&&(i=!1);if(i)return i}return!1},i.prototype.addError=function(e,t,a,i){if(!(this.errors.length>=this.reportOptions.maxErrors)){if(!e)throw new Error("No errorCode passed into addError()");if(!r[e])throw new Error("No errorMessage known for code "+e);t=t||[];for(var n=t.length,o=r[e];n--;){var c=s.whatIs(t[n]),u="object"===c||"null"===c?JSON.stringify(t[n]):t[n];o=o.replace("{"+n+"}",u)}var m={code:e,params:t,message:o,path:this.getPath(),schemaId:this.getSchemaId()};if(i&&(m.description=i),null!=a){for(Array.isArray(a)||(a=[a]),m.inner=[],n=a.length;n--;)for(var f=a[n],p=f.errors.length;p--;)m.inner.push(f.errors[p]);0===m.inner.length&&(m.inner=void 0)}this.errors.push(m)}},t.exports=i}).call(this,e("_process"))},{"./Errors":176,"./Utils":184,_process:162,"lodash.get":156}],181:[function(e,t,a){"use strict";function i(e){return decodeURIComponent(e).replace(/~[0-1]/g,function(e){return"~1"===e?"/":"~"})}function n(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function r(e){var t=e.indexOf("#"),a=-1===t?void 0:e.slice(t+1);return a}function s(e,t){if("object"==typeof e&&null!==e){if(!t)return e;if(e.id&&(e.id===t||"#"===e.id[0]&&e.id.substring(1)===t))return e;var a,i;if(Array.isArray(e)){for(a=e.length;a--;)if(i=s(e[a],t))return i}else{var n=Object.keys(e);for(a=n.length;a--;){var r=n[a];if(0!==r.indexOf("__$")&&(i=s(e[r],t)))return i}}}}var o=e("./Report"),c=e("./SchemaCompilation"),u=e("./SchemaValidation"),m=e("./Utils");a.cacheSchemaByUri=function(e,t){var a=n(e);a&&(this.cache[a]=t)},a.removeFromCacheByUri=function(e){var t=n(e);t&&delete this.cache[t]},a.checkCacheForUri=function(e){var t=n(e);return t?null!=this.cache[t]:!1},a.getSchema=function(e,t){return"object"==typeof t&&(t=a.getSchemaByReference.call(this,e,t)),"string"==typeof t&&(t=a.getSchemaByUri.call(this,e,t)),t},a.getSchemaByReference=function(e,t){for(var a=this.referenceCache.length;a--;)if(this.referenceCache[a][0]===t)return this.referenceCache[a][1];var i=m.cloneDeep(t);return this.referenceCache.push([t,i]),i},a.getSchemaByUri=function(e,t,a){var m=n(t),f=r(t),p=m?this.cache[m]:a;if(p&&m){var l=p!==a;if(l){e.path.push(m);var h=new o(e);c.compileSchema.call(this,h,p)&&u.validateSchema.call(this,h,p);var d=h.isValid();if(d||e.addError("REMOTE_NOT_VALID",[t],h),e.path.pop(),!d)return}}if(p&&f)for(var g=f.split("/"),w=0,y=g.length;p&&y>w;w++){var b=i(g[w]);p=0===w?s(p,b):p[b]}return p},a.getRemotePath=n},{"./Report":180,"./SchemaCompilation":182,"./SchemaValidation":183,"./Utils":184}],182:[function(e,t,a){"use strict";function i(e,t){if(c.isAbsoluteUri(t))return t;var a,i=e.join(""),n=c.isAbsoluteUri(i),r=c.isRelativeUri(i),s=c.isRelativeUri(t);n&&s?(a=i.match(/\/[^\/]*$/),a&&(i=i.slice(0,a.index+1))):r&&s?i="":(a=i.match(/[^#\/]+$/),a&&(i=i.slice(0,a.index)));var o=i+t;return o=o.replace(/##/,"#")}function n(e,t,a,r){if(t=t||[],a=a||[],r=r||[],"object"!=typeof e||null===e)return t;"string"==typeof e.id&&a.push(e.id),"string"==typeof e.$ref&&"undefined"==typeof e.__$refResolved&&t.push({ref:i(a,e.$ref),key:"$ref",obj:e,path:r.slice(0)}),"string"==typeof e.$schema&&"undefined"==typeof e.__$schemaResolved&&t.push({ref:i(a,e.$schema),key:"$schema",obj:e,path:r.slice(0)});var s;if(Array.isArray(e))for(s=e.length;s--;)r.push(s.toString()),n(e[s],t,a,r),r.pop();else{var o=Object.keys(e);for(s=o.length;s--;)0!==o[s].indexOf("__$")&&(r.push(o[s]),n(e[o[s]],t,a,r),r.pop())}return"string"==typeof e.id&&a.pop(),t}function r(e,t){for(var a=e.length;a--;)if(e[a].id===t)return e[a];return null}var s=e("./Report"),o=e("./SchemaCache"),c=e("./Utils"),u=function(e,t){for(var i=t.length,n=0;i--;){var r=new s(e),o=a.compileSchema.call(this,r,t[i]);o&&n++,e.errors=e.errors.concat(r.errors)}return n},m=function(e,t){var a,i=0;do{for(var n=e.errors.length;n--;)"UNRESOLVABLE_REFERENCE"===e.errors[n].code&&e.errors.splice(n,1);for(a=i,i=u.call(this,e,t),n=t.length;n--;){var s=t[n];if(s.__$missingReferences){for(var o=s.__$missingReferences.length;o--;){var c=s.__$missingReferences[o],m=r(t,c.ref);m&&(c.obj["__"+c.key+"Resolved"]=m,s.__$missingReferences.splice(o,1))}0===s.__$missingReferences.length&&delete s.__$missingReferences}}}while(i!==t.length&&i!==a);return e.isValid()};a.compileSchema=function(e,t){if(e.commonErrorMessage="SCHEMA_COMPILATION_FAILED","string"==typeof t){var i=o.getSchemaByUri.call(this,e,t);if(!i)return e.addError("SCHEMA_NOT_REACHABLE",[t]),!1;t=i}if(Array.isArray(t))return m.call(this,e,t);if(t.__$compiled&&t.id&&o.checkCacheForUri.call(this,t.id)===!1&&(t.__$compiled=void 0),t.__$compiled)return!0;t.id&&"string"==typeof t.id&&o.cacheSchemaByUri.call(this,t.id,t);var r=!1;e.rootSchema||(e.rootSchema=t,r=!0);var u=e.isValid();delete t.__$missingReferences;for(var f=n.call(this,t),p=f.length;p--;){var l=f[p],h=o.getSchemaByUri.call(this,e,l.ref,t);if(!h){var d=this.getSchemaReader();if(d){var g=d(l.ref);if(g){g.id=l.ref;var w=new s(e);a.compileSchema.call(this,w,g)?h=o.getSchemaByUri.call(this,e,l.ref,t):e.errors=e.errors.concat(w.errors)}}}if(!h){var y=e.hasError("REMOTE_NOT_VALID",[l.ref]),b=c.isAbsoluteUri(l.ref),v=!1,j=this.options.ignoreUnresolvableReferences===!0;b&&(v=o.checkCacheForUri.call(this,l.ref)),y||j&&b||v||(Array.prototype.push.apply(e.path,l.path),e.addError("UNRESOLVABLE_REFERENCE",[l.ref]),e.path=e.path.slice(0,-l.path.length),u&&(t.__$missingReferences=t.__$missingReferences||[],t.__$missingReferences.push(l)))}l.obj["__"+l.key+"Resolved"]=h}var z=e.isValid();return z?t.__$compiled=!0:t.id&&"string"==typeof t.id&&o.removeFromCacheByUri.call(this,t.id),r&&(e.rootSchema=void 0),z}},{"./Report":180,"./SchemaCache":181,"./Utils":184}],183:[function(e,t,a){"use strict";var i=e("./FormatValidators"),n=e("./JsonValidation"),r=e("./Report"),s=e("./Utils"),o={$ref:function(e,t){"string"!=typeof t.$ref&&e.addError("KEYWORD_TYPE_EXPECTED",["$ref","string"])},$schema:function(e,t){"string"!=typeof t.$schema&&e.addError("KEYWORD_TYPE_EXPECTED",["$schema","string"])},multipleOf:function(e,t){"number"!=typeof t.multipleOf?e.addError("KEYWORD_TYPE_EXPECTED",["multipleOf","number"]):t.multipleOf<=0&&e.addError("KEYWORD_MUST_BE",["multipleOf","strictly greater than 0"])},maximum:function(e,t){"number"!=typeof t.maximum&&e.addError("KEYWORD_TYPE_EXPECTED",["maximum","number"])},exclusiveMaximum:function(e,t){"boolean"!=typeof t.exclusiveMaximum?e.addError("KEYWORD_TYPE_EXPECTED",["exclusiveMaximum","boolean"]):void 0===t.maximum&&e.addError("KEYWORD_DEPENDENCY",["exclusiveMaximum","maximum"])},minimum:function(e,t){"number"!=typeof t.minimum&&e.addError("KEYWORD_TYPE_EXPECTED",["minimum","number"])},exclusiveMinimum:function(e,t){"boolean"!=typeof t.exclusiveMinimum?e.addError("KEYWORD_TYPE_EXPECTED",["exclusiveMinimum","boolean"]):void 0===t.minimum&&e.addError("KEYWORD_DEPENDENCY",["exclusiveMinimum","minimum"])},maxLength:function(e,t){"integer"!==s.whatIs(t.maxLength)?e.addError("KEYWORD_TYPE_EXPECTED",["maxLength","integer"]):t.maxLength<0&&e.addError("KEYWORD_MUST_BE",["maxLength","greater than, or equal to 0"])},minLength:function(e,t){"integer"!==s.whatIs(t.minLength)?e.addError("KEYWORD_TYPE_EXPECTED",["minLength","integer"]):t.minLength<0&&e.addError("KEYWORD_MUST_BE",["minLength","greater than, or equal to 0"])},pattern:function(e,t){if("string"!=typeof t.pattern)e.addError("KEYWORD_TYPE_EXPECTED",["pattern","string"]);else try{RegExp(t.pattern)}catch(a){e.addError("KEYWORD_PATTERN",["pattern",t.pattern]); -}},additionalItems:function(e,t){var i=s.whatIs(t.additionalItems);"boolean"!==i&&"object"!==i?e.addError("KEYWORD_TYPE_EXPECTED",["additionalItems",["boolean","object"]]):"object"===i&&(e.path.push("additionalItems"),a.validateSchema.call(this,e,t.additionalItems),e.path.pop())},items:function(e,t){var i=s.whatIs(t.items);if("object"===i)e.path.push("items"),a.validateSchema.call(this,e,t.items),e.path.pop();else if("array"===i)for(var n=t.items.length;n--;)e.path.push("items"),e.path.push(n.toString()),a.validateSchema.call(this,e,t.items[n]),e.path.pop(),e.path.pop();else e.addError("KEYWORD_TYPE_EXPECTED",["items",["array","object"]]);this.options.forceAdditional===!0&&void 0===t.additionalItems&&Array.isArray(t.items)&&e.addError("KEYWORD_UNDEFINED_STRICT",["additionalItems"]),this.options.assumeAdditional&&void 0===t.additionalItems&&Array.isArray(t.items)&&(t.additionalItems=!1)},maxItems:function(e,t){"number"!=typeof t.maxItems?e.addError("KEYWORD_TYPE_EXPECTED",["maxItems","integer"]):t.maxItems<0&&e.addError("KEYWORD_MUST_BE",["maxItems","greater than, or equal to 0"])},minItems:function(e,t){"integer"!==s.whatIs(t.minItems)?e.addError("KEYWORD_TYPE_EXPECTED",["minItems","integer"]):t.minItems<0&&e.addError("KEYWORD_MUST_BE",["minItems","greater than, or equal to 0"])},uniqueItems:function(e,t){"boolean"!=typeof t.uniqueItems&&e.addError("KEYWORD_TYPE_EXPECTED",["uniqueItems","boolean"])},maxProperties:function(e,t){"integer"!==s.whatIs(t.maxProperties)?e.addError("KEYWORD_TYPE_EXPECTED",["maxProperties","integer"]):t.maxProperties<0&&e.addError("KEYWORD_MUST_BE",["maxProperties","greater than, or equal to 0"])},minProperties:function(e,t){"integer"!==s.whatIs(t.minProperties)?e.addError("KEYWORD_TYPE_EXPECTED",["minProperties","integer"]):t.minProperties<0&&e.addError("KEYWORD_MUST_BE",["minProperties","greater than, or equal to 0"])},required:function(e,t){if("array"!==s.whatIs(t.required))e.addError("KEYWORD_TYPE_EXPECTED",["required","array"]);else if(0===t.required.length)e.addError("KEYWORD_MUST_BE",["required","an array with at least one element"]);else{for(var a=t.required.length;a--;)"string"!=typeof t.required[a]&&e.addError("KEYWORD_VALUE_TYPE",["required","string"]);s.isUniqueArray(t.required)===!1&&e.addError("KEYWORD_MUST_BE",["required","an array with unique items"])}},additionalProperties:function(e,t){var i=s.whatIs(t.additionalProperties);"boolean"!==i&&"object"!==i?e.addError("KEYWORD_TYPE_EXPECTED",["additionalProperties",["boolean","object"]]):"object"===i&&(e.path.push("additionalProperties"),a.validateSchema.call(this,e,t.additionalProperties),e.path.pop())},properties:function(e,t){if("object"!==s.whatIs(t.properties))return void e.addError("KEYWORD_TYPE_EXPECTED",["properties","object"]);for(var i=Object.keys(t.properties),n=i.length;n--;){var r=i[n],o=t.properties[r];e.path.push("properties"),e.path.push(r),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}this.options.forceAdditional===!0&&void 0===t.additionalProperties&&e.addError("KEYWORD_UNDEFINED_STRICT",["additionalProperties"]),this.options.assumeAdditional&&void 0===t.additionalProperties&&(t.additionalProperties=!1),this.options.forceProperties===!0&&0===i.length&&e.addError("CUSTOM_MODE_FORCE_PROPERTIES",["properties"])},patternProperties:function(e,t){if("object"!==s.whatIs(t.patternProperties))return void e.addError("KEYWORD_TYPE_EXPECTED",["patternProperties","object"]);for(var i=Object.keys(t.patternProperties),n=i.length;n--;){var r=i[n],o=t.patternProperties[r];try{RegExp(r)}catch(c){e.addError("KEYWORD_PATTERN",["patternProperties",r])}e.path.push("patternProperties"),e.path.push(r.toString()),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}this.options.forceProperties===!0&&0===i.length&&e.addError("CUSTOM_MODE_FORCE_PROPERTIES",["patternProperties"])},dependencies:function(e,t){if("object"!==s.whatIs(t.dependencies))e.addError("KEYWORD_TYPE_EXPECTED",["dependencies","object"]);else for(var i=Object.keys(t.dependencies),n=i.length;n--;){var r=i[n],o=t.dependencies[r],c=s.whatIs(o);if("object"===c)e.path.push("dependencies"),e.path.push(r),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop();else if("array"===c){var u=o.length;for(0===u&&e.addError("KEYWORD_MUST_BE",["dependencies","not empty array"]);u--;)"string"!=typeof o[u]&&e.addError("KEYWORD_VALUE_TYPE",["dependensices","string"]);s.isUniqueArray(o)===!1&&e.addError("KEYWORD_MUST_BE",["dependencies","an array with unique items"])}else e.addError("KEYWORD_VALUE_TYPE",["dependencies","object or array"])}},"enum":function(e,t){Array.isArray(t["enum"])===!1?e.addError("KEYWORD_TYPE_EXPECTED",["enum","array"]):0===t["enum"].length?e.addError("KEYWORD_MUST_BE",["enum","an array with at least one element"]):s.isUniqueArray(t["enum"])===!1&&e.addError("KEYWORD_MUST_BE",["enum","an array with unique elements"])},type:function(e,t){var a=["array","boolean","integer","number","null","object","string"],i=a.join(","),n=Array.isArray(t.type);if(n){for(var r=t.type.length;r--;)-1===a.indexOf(t.type[r])&&e.addError("KEYWORD_TYPE_EXPECTED",["type",i]);s.isUniqueArray(t.type)===!1&&e.addError("KEYWORD_MUST_BE",["type","an object with unique properties"])}else"string"==typeof t.type?-1===a.indexOf(t.type)&&e.addError("KEYWORD_TYPE_EXPECTED",["type",i]):e.addError("KEYWORD_TYPE_EXPECTED",["type",["string","array"]]);this.options.noEmptyStrings===!0&&("string"===t.type||n&&-1!==t.type.indexOf("string"))&&void 0===t.minLength&&void 0===t["enum"]&&void 0===t.format&&(t.minLength=1),this.options.noEmptyArrays===!0&&("array"===t.type||n&&-1!==t.type.indexOf("array"))&&void 0===t.minItems&&(t.minItems=1),this.options.forceProperties===!0&&("object"===t.type||n&&-1!==t.type.indexOf("object"))&&void 0===t.properties&&void 0===t.patternProperties&&e.addError("KEYWORD_UNDEFINED_STRICT",["properties"]),this.options.forceItems===!0&&("array"===t.type||n&&-1!==t.type.indexOf("array"))&&void 0===t.items&&e.addError("KEYWORD_UNDEFINED_STRICT",["items"]),this.options.forceMinItems===!0&&("array"===t.type||n&&-1!==t.type.indexOf("array"))&&void 0===t.minItems&&e.addError("KEYWORD_UNDEFINED_STRICT",["minItems"]),this.options.forceMaxItems===!0&&("array"===t.type||n&&-1!==t.type.indexOf("array"))&&void 0===t.maxItems&&e.addError("KEYWORD_UNDEFINED_STRICT",["maxItems"]),this.options.forceMinLength===!0&&("string"===t.type||n&&-1!==t.type.indexOf("string"))&&void 0===t.minLength&&void 0===t.format&&void 0===t["enum"]&&void 0===t.pattern&&e.addError("KEYWORD_UNDEFINED_STRICT",["minLength"]),this.options.forceMaxLength===!0&&("string"===t.type||n&&-1!==t.type.indexOf("string"))&&void 0===t.maxLength&&void 0===t.format&&void 0===t["enum"]&&void 0===t.pattern&&e.addError("KEYWORD_UNDEFINED_STRICT",["maxLength"])},allOf:function(e,t){if(Array.isArray(t.allOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["allOf","array"]);else if(0===t.allOf.length)e.addError("KEYWORD_MUST_BE",["allOf","an array with at least one element"]);else for(var i=t.allOf.length;i--;)e.path.push("allOf"),e.path.push(i.toString()),a.validateSchema.call(this,e,t.allOf[i]),e.path.pop(),e.path.pop()},anyOf:function(e,t){if(Array.isArray(t.anyOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["anyOf","array"]);else if(0===t.anyOf.length)e.addError("KEYWORD_MUST_BE",["anyOf","an array with at least one element"]);else for(var i=t.anyOf.length;i--;)e.path.push("anyOf"),e.path.push(i.toString()),a.validateSchema.call(this,e,t.anyOf[i]),e.path.pop(),e.path.pop()},oneOf:function(e,t){if(Array.isArray(t.oneOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["oneOf","array"]);else if(0===t.oneOf.length)e.addError("KEYWORD_MUST_BE",["oneOf","an array with at least one element"]);else for(var i=t.oneOf.length;i--;)e.path.push("oneOf"),e.path.push(i.toString()),a.validateSchema.call(this,e,t.oneOf[i]),e.path.pop(),e.path.pop()},not:function(e,t){"object"!==s.whatIs(t.not)?e.addError("KEYWORD_TYPE_EXPECTED",["not","object"]):(e.path.push("not"),a.validateSchema.call(this,e,t.not),e.path.pop())},definitions:function(e,t){if("object"!==s.whatIs(t.definitions))e.addError("KEYWORD_TYPE_EXPECTED",["definitions","object"]);else for(var i=Object.keys(t.definitions),n=i.length;n--;){var r=i[n],o=t.definitions[r];e.path.push("definitions"),e.path.push(r),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}},format:function(e,t){"string"!=typeof t.format?e.addError("KEYWORD_TYPE_EXPECTED",["format","string"]):void 0===i[t.format]&&this.options.ignoreUnknownFormats!==!0&&e.addError("UNKNOWN_FORMAT",[t.format])},id:function(e,t){"string"!=typeof t.id&&e.addError("KEYWORD_TYPE_EXPECTED",["id","string"])},title:function(e,t){"string"!=typeof t.title&&e.addError("KEYWORD_TYPE_EXPECTED",["title","string"])},description:function(e,t){"string"!=typeof t.description&&e.addError("KEYWORD_TYPE_EXPECTED",["description","string"])},"default":function(){}},c=function(e,t){for(var i=t.length;i--;)a.validateSchema.call(this,e,t[i]);return e.isValid()};a.validateSchema=function(e,t){if(e.commonErrorMessage="SCHEMA_VALIDATION_FAILED",Array.isArray(t))return c.call(this,e,t);if(t.__$validated)return!0;var a=t.$schema&&t.id!==t.$schema;if(a)if(t.__$schemaResolved&&t.__$schemaResolved!==t){var i=new r(e),u=n.validate.call(this,i,t.__$schemaResolved,t);u===!1&&e.addError("PARENT_SCHEMA_VALIDATION_FAILED",null,i)}else this.options.ignoreUnresolvableReferences!==!0&&e.addError("REF_UNRESOLVED",[t.$schema]);if(this.options.noTypeless===!0){if(void 0!==t.type){var m=[];Array.isArray(t.anyOf)&&(m=m.concat(t.anyOf)),Array.isArray(t.oneOf)&&(m=m.concat(t.oneOf)),Array.isArray(t.allOf)&&(m=m.concat(t.allOf)),m.forEach(function(e){e.type||(e.type=t.type)})}void 0===t["enum"]&&void 0===t.type&&void 0===t.anyOf&&void 0===t.oneOf&&void 0===t.not&&void 0===t.$ref&&e.addError("KEYWORD_UNDEFINED_STRICT",["type"])}for(var f=Object.keys(t),p=f.length;p--;){var l=f[p];0!==l.indexOf("__")&&(void 0!==o[l]?o[l].call(this,e,t):a||this.options.noExtraKeywords===!0&&e.addError("KEYWORD_UNEXPECTED",[l]))}if(this.options.pedanticCheck===!0){if(t["enum"]){var h=s.clone(t);for(delete h["enum"],delete h["default"],e.path.push("enum"),p=t["enum"].length;p--;)e.path.push(p.toString()),n.validate.call(this,e,h,t["enum"][p]),e.path.pop();e.path.pop()}t["default"]&&(e.path.push("default"),n.validate.call(this,e,t,t["default"]),e.path.pop())}var d=e.isValid();return d&&(t.__$validated=!0),d}},{"./FormatValidators":177,"./JsonValidation":178,"./Report":180,"./Utils":184}],184:[function(e,t,a){"use strict";a.isAbsoluteUri=function(e){return/^https?:\/\//.test(e)},a.isRelativeUri=function(e){return/.+#/.test(e)},a.whatIs=function(e){var t=typeof e;return"object"===t?null===e?"null":Array.isArray(e)?"array":"object":"number"===t?Number.isFinite(e)?e%1===0?"integer":"number":Number.isNaN(e)?"not-a-number":"unknown-number":t},a.areEqual=function i(e,t){if(e===t)return!0;var n,r;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(r=e.length,n=0;r>n;n++)if(!i(e[n],t[n]))return!1;return!0}if("object"===a.whatIs(e)&&"object"===a.whatIs(t)){var s=Object.keys(e),o=Object.keys(t);if(!i(s,o))return!1;for(r=s.length,n=0;r>n;n++)if(!i(e[s[n]],t[s[n]]))return!1;return!0}return!1},a.isUniqueArray=function(e,t){var i,n,r=e.length;for(i=0;r>i;i++)for(n=i+1;r>n;n++)if(a.areEqual(e[i],e[n]))return t&&t.push(i,n),!1;return!0},a.difference=function(e,t){for(var a=[],i=e.length;i--;)-1===t.indexOf(e[i])&&a.push(e[i]);return a},a.clone=function(e){if("undefined"!=typeof e){if("object"!=typeof e||null===e)return e;var t,a;if(Array.isArray(e))for(t=[],a=e.length;a--;)t[a]=e[a];else{t={};var i=Object.keys(e);for(a=i.length;a--;){var n=i[a];t[n]=e[n]}}return t}},a.cloneDeep=function(e){function t(e){if("object"!=typeof e||null===e)return e;var n,r,s;if(s=a.indexOf(e),-1!==s)return i[s];if(a.push(e),Array.isArray(e))for(n=[],i.push(n),r=e.length;r--;)n[r]=t(e[r]);else{n={},i.push(n);var o=Object.keys(e);for(r=o.length;r--;){var c=o[r];n[c]=t(e[c])}}return n}var a=[],i=[];return t(e)},a.ucs2decode=function(e){for(var t,a,i=[],n=0,r=e.length;r>n;)t=e.charCodeAt(n++),t>=55296&&56319>=t&&r>n?(a=e.charCodeAt(n++),56320==(64512&a)?i.push(((1023&t)<<10)+(1023&a)+65536):(i.push(t),n--)):i.push(t);return i}},{}],185:[function(e,t,a){(function(a){"use strict";function i(e){if(this.cache={},this.referenceCache=[],this.setRemoteReference("http://json-schema.org/draft-04/schema",p),this.setRemoteReference("http://json-schema.org/draft-04/hyper-schema",l),"object"==typeof e){for(var t,a=Object.keys(e),i=a.length;i--;)if(t=a[i],void 0===h[t])throw new Error("Unexpected option passed to constructor: "+t);for(a=Object.keys(h),i=a.length;i--;)t=a[i],void 0===e[t]&&(e[t]=f.clone(h[t]));this.options=e}else this.options=f.clone(h);this.options.strictMode===!0&&(this.options.forceAdditional=!0,this.options.forceItems=!0,this.options.forceMaxLength=!0,this.options.forceProperties=!0,this.options.noExtraKeywords=!0,this.options.noTypeless=!0,this.options.noEmptyStrings=!0,this.options.noEmptyArrays=!0)}e("./Polyfills");var n=e("lodash.get"),r=e("./Report"),s=e("./FormatValidators"),o=e("./JsonValidation"),c=e("./SchemaCache"),u=e("./SchemaCompilation"),m=e("./SchemaValidation"),f=e("./Utils"),p=e("./schemas/schema.json"),l=e("./schemas/hyper-schema.json"),h={asyncTimeout:2e3,forceAdditional:!1,assumeAdditional:!1,forceItems:!1,forceMinItems:!1,forceMaxItems:!1,forceMinLength:!1,forceMaxLength:!1,forceProperties:!1,ignoreUnresolvableReferences:!1,noExtraKeywords:!1,noTypeless:!1,noEmptyStrings:!1,noEmptyArrays:!1,strictUris:!1,strictMode:!1,reportPathAsArray:!1,breakOnFirstError:!0,pedanticCheck:!1,ignoreUnknownFormats:!1};i.prototype.compileSchema=function(e){var t=new r(this.options);return e=c.getSchema.call(this,t,e),u.compileSchema.call(this,t,e),this.lastReport=t,t.isValid()},i.prototype.validateSchema=function(e){if(Array.isArray(e)&&0===e.length)throw new Error(".validateSchema was called with an empty array");var t=new r(this.options);e=c.getSchema.call(this,t,e);var a=u.compileSchema.call(this,t,e);return a&&m.validateSchema.call(this,t,e),this.lastReport=t,t.isValid()},i.prototype.validate=function(e,t,i,s){"function"===f.whatIs(i)&&(s=i,i={}),i||(i={});var p=f.whatIs(t);if("string"!==p&&"object"!==p){var l=new Error("Invalid .validate call - schema must be an string or object but "+p+" was passed!");if(s)return void a.nextTick(function(){s(l,!1)});throw l}var h=!1,d=new r(this.options);if("string"==typeof t){var g=t;if(t=c.getSchema.call(this,d,g),!t)throw new Error("Schema with id '"+g+"' wasn't found in the validator cache!")}else t=c.getSchema.call(this,d,t);var w=!1;h||(w=u.compileSchema.call(this,d,t)),w||(this.lastReport=d,h=!0);var y=!1;if(h||(y=m.validateSchema.call(this,d,t)),y||(this.lastReport=d,h=!0),i.schemaPath&&(d.rootSchema=t,t=n(t,i.schemaPath),!t))throw new Error("Schema path '"+i.schemaPath+"' wasn't found in the schema!");if(h||o.validate.call(this,d,t,e),s)return void d.processAsyncTasks(this.options.asyncTimeout,s);if(d.asyncTasks.length>0)throw new Error("This validation has async tasks and cannot be done in sync mode, please provide callback argument.");return this.lastReport=d,d.isValid()},i.prototype.getLastError=function(){if(0===this.lastReport.errors.length)return null;var e=new Error;return e.name="z-schema validation error",e.message=this.lastReport.commonErrorMessage,e.details=this.lastReport.errors,e},i.prototype.getLastErrors=function(){return this.lastReport&&this.lastReport.errors.length>0?this.lastReport.errors:void 0},i.prototype.getMissingReferences=function(e){e=e||this.lastReport.errors;for(var t=[],a=e.length;a--;){var i=e[a];if("UNRESOLVABLE_REFERENCE"===i.code){var n=i.params[0];-1===t.indexOf(n)&&t.push(n)}i.inner&&(t=t.concat(this.getMissingReferences(i.inner)))}return t},i.prototype.getMissingRemoteReferences=function(){for(var e=this.getMissingReferences(),t=[],a=e.length;a--;){var i=c.getRemotePath(e[a]);i&&-1===t.indexOf(i)&&t.push(i)}return t},i.prototype.setRemoteReference=function(e,t){t="string"==typeof t?JSON.parse(t):f.cloneDeep(t),c.cacheSchemaByUri.call(this,e,t)},i.prototype.getResolvedSchema=function(e){var t=new r(this.options);e=c.getSchema.call(this,t,e),e=f.cloneDeep(e);var a=[],i=function(e){var t,n=f.whatIs(e);if(("object"===n||"array"===n)&&!e.___$visited){if(e.___$visited=!0,a.push(e),e.$ref&&e.__$refResolved){var r=e.__$refResolved,s=e;delete e.$ref,delete e.__$refResolved;for(t in r)r.hasOwnProperty(t)&&(s[t]=r[t])}for(t in e)e.hasOwnProperty(t)&&(0===t.indexOf("__$")?delete e[t]:i(e[t]))}};if(i(e),a.forEach(function(e){delete e.___$visited}),this.lastReport=t,t.isValid())return e;throw this.getLastError()},i.prototype.setSchemaReader=function(e){return i.setSchemaReader(e)},i.prototype.getSchemaReader=function(){return i.schemaReader},i.setSchemaReader=function(e){i.schemaReader=e},i.registerFormat=function(e,t){s[e]=t},i.unregisterFormat=function(e){delete s[e]},i.getRegisteredFormats=function(){return Object.keys(s)},i.getDefaultOptions=function(){return f.cloneDeep(h)},t.exports=i}).call(this,e("_process"))},{"./FormatValidators":177,"./JsonValidation":178,"./Polyfills":179,"./Report":180,"./SchemaCache":181,"./SchemaCompilation":182,"./SchemaValidation":183,"./Utils":184,"./schemas/hyper-schema.json":186,"./schemas/schema.json":187,_process:162,"lodash.get":156}],186:[function(e,t,a){t.exports={$schema:"http://json-schema.org/draft-04/hyper-schema#",id:"http://json-schema.org/draft-04/hyper-schema#",title:"JSON Hyper-Schema",allOf:[{$ref:"http://json-schema.org/draft-04/schema#"}],properties:{additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}]},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}]},dependencies:{additionalProperties:{anyOf:[{$ref:"#"},{type:"array"}]}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}]},definitions:{additionalProperties:{$ref:"#"}},patternProperties:{additionalProperties:{$ref:"#"}},properties:{additionalProperties:{$ref:"#"}},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"},links:{type:"array",items:{$ref:"#/definitions/linkDescription"}},fragmentResolution:{type:"string"},media:{type:"object",properties:{type:{description:"A media type, as described in RFC 2046",type:"string"},binaryEncoding:{description:"A content encoding scheme, as described in RFC 2045",type:"string"}}},pathStart:{description:"Instances' URIs must start with this value for this schema to apply to them",type:"string",format:"uri"}},definitions:{schemaArray:{type:"array",items:{$ref:"#"}},linkDescription:{title:"Link Description Object",type:"object",required:["href","rel"],properties:{href:{description:"a URI template, as defined by RFC 6570, with the addition of the $, ( and ) characters for pre-processing",type:"string"},rel:{description:"relation to the target resource of the link",type:"string"},title:{description:"a title for the link",type:"string"},targetSchema:{description:"JSON Schema describing the link target",$ref:"#"},mediaType:{description:"media type (as defined by RFC 2046) describing the link target",type:"string"},method:{description:'method for requesting the target of the link (e.g. for HTTP this might be "GET" or "DELETE")',type:"string"},encType:{description:"The media type in which to submit data along with the request",type:"string","default":"application/json"},schema:{description:"Schema describing the data to submit along with the request",$ref:"#"}}}}}},{}],187:[function(e,t,a){t.exports={id:"http://json-schema.org/draft-04/schema#",$schema:"http://json-schema.org/draft-04/schema#",description:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},positiveInteger:{type:"integer",minimum:0},positiveIntegerDefault0:{allOf:[{$ref:"#/definitions/positiveInteger"},{"default":0}]},simpleTypes:{"enum":["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},minItems:1,uniqueItems:!0}},type:"object",properties:{id:{type:"string",format:"uri"},$schema:{type:"string",format:"uri"},title:{type:"string"},description:{type:"string"},"default":{},multipleOf:{type:"number",minimum:0,exclusiveMinimum:!0},maximum:{type:"number"},exclusiveMaximum:{type:"boolean","default":!1},minimum:{type:"number"},exclusiveMinimum:{type:"boolean","default":!1},maxLength:{$ref:"#/definitions/positiveInteger"},minLength:{$ref:"#/definitions/positiveIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],"default":{}},maxItems:{$ref:"#/definitions/positiveInteger"},minItems:{$ref:"#/definitions/positiveIntegerDefault0"},uniqueItems:{type:"boolean","default":!1},maxProperties:{$ref:"#/definitions/positiveInteger"},minProperties:{$ref:"#/definitions/positiveIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},definitions:{type:"object",additionalProperties:{$ref:"#"},"default":{}},properties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},"enum":{type:"array",minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},dependencies:{exclusiveMaximum:["maximum"],exclusiveMinimum:["minimum"]},"default":{}}},{}]},{},[1])(1)}); \ No newline at end of file +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Sway=e()}}(function(){var e;return function t(e,a,i){function n(s,o){if(!a[s]){if(!e[s]){var c="function"==typeof require&&require;if(!o&&c)return c(s,!0);if(r)return r(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var m=a[s]={exports:{}};e[s][0].call(m.exports,function(t){var a=e[s][1][t];return n(a?a:t)},m,m.exports,t,e,a,i)}return a[s].exports}for(var r="function"==typeof require&&require,s=0;s-1)try{a=JSON.parse(a)}catch(i){}switch(r){case"array":if(s.isString(a)){if(-1===f.indexOf(t.collectionFormat))throw new TypeError("Invalid 'collectionFormat' value: "+t.collectionFormat);switch(t.collectionFormat){case"csv":case void 0:a=a.split(",");break;case"multi":a=[a];break;case"pipes":a=a.split("|");break;case"ssv":a=a.split(" ");break;case"tsv":a=a.split(" ")}}s.isArray(a)&&(a=s.map(a,function(a,i){return y(s.isArray(e.items)?e.items[i]:e.items,t,a)}));break;case"boolean":s.isBoolean(a)||("true"===a?a=!0:"false"===a?a=!1:i=new TypeError("Not a valid boolean: "+a));break;case"integer":s.isNumber(a)||(s.isString(a)&&0===s.trim(a).length&&(a=NaN),a=Number(a),s.isNaN(a)&&(i=new TypeError("Not a valid integer: "+n)));break;case"number":s.isNumber(a)||(s.isString(a)&&0===s.trim(a).length&&(a=NaN),a=Number(a),s.isNaN(a)&&(i=new TypeError("Not a valid number: "+n)));break;case"string":["date","date-time"].indexOf(e.format)>-1?(s.isString(a)&&(a=new Date(a)),s.isDate(a)&&"Invalid Date"!==a.toString()||(i=new TypeError("Not a valid "+e.format+" string: "+n),i.code="INVALID_FORMAT")):s.isString(a)||(i=new TypeError("Not a valid string: "+a))}if(!s.isUndefined(i))throw s.isUndefined(i.code)?(i.code="INVALID_TYPE",i.message="Expected type "+r+" but found type "+c):i.message="Object didn't pass validation for format "+e.format+": "+o,i.failedValidation=!0,i.path=[],i;return a};t.exports.getJSONSchemaMocker=function(){return h},t.exports.getJSONSchemaValidator=function(){return d},t.exports.parameterLocations=["body","formData","header","path","query"],t.exports.removeCirculars=function(e){function t(a,i,n){function r(e,i){n.push(i),t(a,e,n),n.pop()}-1===a.indexOf(i)?(a.push(i),(s.isArray(i)||s.isPlainObject(i))&&s.each(i,function(e,t){r(e,t.toString())})):s.set(e,n,{}),a.pop()}t([],e,[])},t.exports.supportedHttpMethods=["get","put","post","delete","options","head","patch"],t.exports.validateAgainstSchema=function(e,t,a){t=s.cloneDeep(t);var i={errors:[],warnings:[]};return e.validate(a,t)||(i.errors=s.map(e.getLastErrors(),function(e){return r(e),e})),i},t.exports.validateContentType=function(e,t,a){var i=e;s.isUndefined(e)||(e=e.split(";")[0]),-1===s.indexOf(t,i)&&-1===s.indexOf(t,e)&&a.errors.push({code:"INVALID_CONTENT_TYPE",message:"Invalid Content-Type ("+e+"). These are supported: "+t.join(", "),path:[]})}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./json-schema-draft-04.json":3,"./validation/format-generators":10,"./validation/format-validators":11,"json-schema-faker":135,"z-schema":182}],3:[function(e,t,a){t.exports={id:"http://json-schema.org/draft-04/schema#",$schema:"http://json-schema.org/draft-04/schema#",description:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},positiveInteger:{type:"integer",minimum:0},positiveIntegerDefault0:{allOf:[{$ref:"#/definitions/positiveInteger"},{"default":0}]},simpleTypes:{"enum":["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},minItems:1,uniqueItems:!0}},type:"object",properties:{id:{type:"string",format:"uri"},$schema:{type:"string",format:"uri"},title:{type:"string"},description:{type:"string"},"default":{},multipleOf:{type:"number",minimum:0,exclusiveMinimum:!0},maximum:{type:"number"},exclusiveMaximum:{type:"boolean","default":!1},minimum:{type:"number"},exclusiveMinimum:{type:"boolean","default":!1},maxLength:{$ref:"#/definitions/positiveInteger"},minLength:{$ref:"#/definitions/positiveIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],"default":{}},maxItems:{$ref:"#/definitions/positiveInteger"},minItems:{$ref:"#/definitions/positiveIntegerDefault0"},uniqueItems:{type:"boolean","default":!1},maxProperties:{$ref:"#/definitions/positiveInteger"},minProperties:{$ref:"#/definitions/positiveIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},definitions:{type:"object",additionalProperties:{$ref:"#"},"default":{}},properties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},"enum":{type:"array",minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},dependencies:{exclusiveMaximum:["maximum"],exclusiveMinimum:["minimum"]},"default":{}}},{}],4:[function(e,t,a){(function(a){"use strict";function i(e,t,a,s,c){var u=this;this.customValidators=[],this.definition=e,this.definitionAllResolved=a,this.definitionRemotesResolved=t,this.documentation="https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md",this.options=c,this.references=s,this.version="2.0",n.assign(this,e),n.each(c.customValidators,i.prototype.registerValidator,this),this.pathObjects=n.map(a.paths,function(e,t){return new o(u,t,e,["paths",t])}),r("Creating SwaggerApi from %s",n.isString(c.definition)?c.definition:"the provided document")}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("debug")("sway:api"),s=e("url").parse,o=e("./path"),c=e("../validation/validators");i.prototype.getOperation=function(e,t){var a,i=this.getPath(e);return n.isUndefined(i)||(n.isObject(e)&&(t=e.method),n.isUndefined(t)||(t=t.toLowerCase()),a=i.getOperation(t)),a},i.prototype.getOperations=function(e){var t,a=[];return n.isUndefined(e)?n.each(this.pathObjects,function(e){a.push.apply(a,e.getOperations())}):(t=this.getPath(e),n.isUndefined(t)||(a=t.getOperations())),a},i.prototype.getOperationsByTag=function(e){return n.reduce(this.pathObjects,function(t,a){return t.push.apply(t,a.getOperationsByTag(e)),t},[])},i.prototype.getPath=function(e){var t;return n.isObject(e)?(t=s(e.url).pathname,n.find(this.pathObjects,function(e){return n.isArray(e.regexp.exec(t))})):n.find(this.pathObjects,function(t){return e===t.path})},i.prototype.getPaths=function(){return this.pathObjects},i.prototype.registerValidator=function(e){if(n.isUndefined(e))throw new TypeError("validator is required");if(!n.isFunction(e))throw new TypeError("validator must be a function");this.customValidators.push(e)},i.prototype.validate=function(){function e(e){var i=e(a);i.errors.length>0&&t.errors.push.apply(t.errors,i.errors),i.warnings.length>0&&t.warnings.push.apply(t.warnings,i.warnings)}var t={errors:[],warnings:[]},a=this;return e(c.jsonSchemaValidator),0===t.errors.length&&(n.each(c.semanticValidators,e),n.each(this.customValidators,e)),t},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../validation/validators":13,"./path":8,debug:18,url:170}],5:[function(e,t,a){(function(a){"use strict";function i(e,t,a,i){var u=[],m=this;this.consumes=a.consumes||e.api.consumes||[],this.definition=n.cloneDeep(a),this.method=t,this.parameterObjects=[],this.pathObject=e,this.pathToDefinition=i,this.produces=a.produces||e.api.produces||[],this.ptr=s.pathToPtr(i),n.assign(this,a),n.isUndefined(this.security)&&(this.security=this.definition.security=e.api.definitionAllResolved.security),this.parameterObjects=n.map(e.parameterObjects,function(e){return u.push(e["in"]+":"+e.name),e}),n.each(a.parameters,function(e,t){var a=e["in"]+":"+e.name,n=u.indexOf(a),r=new o(m,e,i.concat(["parameters",t.toString()]));n>-1?m.parameterObjects[n]=r:(m.parameterObjects.push(r),u.push(a))}),this.parameters=this.definition.parameters=n.map(this.parameterObjects,function(e){return e.definition}),this.responseObjects=n.map(a.responses,function(e,t){return new c(m,t,e,i.concat(["responses",t]))}),this.securityDefinitions=n.reduce(this.security,function(t,a){return n.each(a,function(a,i){var r=e.api.definitionAllResolved.securityDefinitions?e.api.definitionAllResolved.securityDefinitions[i]:void 0;n.isUndefined(r)||(t[i]=r)}),t},{}),r("Found operation at %s",this.ptr)}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("debug")("sway:operation"),s="undefined"!=typeof window?window.JsonRefs:"undefined"!=typeof a?a.JsonRefs:null,o=e("./parameter"),c=e("./response"),u=e("../helpers");i.prototype.getParameter=function(e,t){return n.find(this.parameterObjects,function(a){return a.name===e&&(n.isUndefined(t)?!0:a["in"]===t)})},i.prototype.getParameters=function(){return this.parameterObjects},i.prototype.getResponse=function(e){return n.isUndefined(e)?e="default":n.isNumber(e)&&(e=e.toString()),n.find(this.getResponses(),function(t){return t.statusCode===e})},i.prototype.getResponses=function(){return this.responseObjects},i.prototype.validateRequest=function(e){var t={errors:[],warnings:[]};return["post","put"].indexOf(this.method)>-1&&u.validateContentType(e.headers["content-type"]||"application/octet-stream",this.consumes,t),n.each(this.getParameters(),function(a){var i,n=a.getValue(e);n.valid||(i={code:"INVALID_REQUEST_PARAMETER",errors:n.error.errors||[{code:n.error.code,message:n.error.message,path:n.error.path}],"in":n.parameterObject["in"],message:"Invalid parameter ("+a.name+"): "+((n.errors||[]).length>1?"Value failed JSON Schema validation":n.error.message),name:n.parameterObject.name,path:n.error.path},t.errors.push(i))}),t},i.prototype.validateResponse=function(e){var t={errors:[],warnings:[]},a=e?e.statusCode:"default",i=this.getResponse(a);return n.isUndefined(i)?(i=this.getResponse("default"),n.isUndefined(i)&&t.errors.push({code:"INVALID_RESPONSE_CODE",message:"This operation does not have a defined '"+("default"===a?a:a+"' or 'default")+"' response code",path:[]})):t=i.validateResponse(e),t},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../helpers":2,"./parameter":7,"./response":9,debug:18}],6:[function(e,t,a){(function(a){"use strict";function i(e,t){var a,i,o,c=s.pathFromPtr(e.ptr),u=!1,m=e.computedSchema;this.parameterObject=e,this.raw=t,Object.defineProperties(this,{error:{enumerable:!0,get:function(){return this.valid===!0?void 0:a}},valid:{enumerable:!0,get:function(){var t,s,o={errors:[],warnings:[]},u=!1;if(n.isUndefined(i))if(i=!0,t=this.value,n.isUndefined(a))try{if(e.required===!0&&n.isUndefined(t))throw s=new Error("Value is required but was not provided"),s.code="REQUIRED",s;if(e.required===!1&&n.isUndefined(t)?u=!0:m.allowEmptyValue===!0&&""===t?u=!0:"file"===e.type?u=!0:"string"===m.type&&(["date","date-time"].indexOf(m.format)>-1&&n.isDate(t)?u=!0:"string"===m.type&&n.isFunction(t.readUInt8)&&(u=!0)),u||(o=r.validateAgainstSchema(r.getJSONSchemaValidator(),e.getSchema(),t)),o.errors.length>0)throw s=new Error("Value failed JSON Schema validation"),s.code="SCHEMA_VALIDATION_FAILED",s.errors=o.errors,s}catch(f){f.failedValidation=!0,f.path=c,a=f,i=!1}else i=!1;return i}},value:{enumerable:!0,get:function(){if(!u){if("file"===m.type)o=t;else{try{o=r.convertValue(m,{collectionFormat:e.collectionFormat},t)}catch(i){a=i}n.isUndefined(o)&&n.isUndefined(a)&&("array"===m.type?n.isArray(m.items)?(o=n.reduce(m.items,function(e,t){return e.push(t["default"]),e},[]),n.all(o,n.isUndefined)&&(o=void 0)):n.isUndefined(m.items)||n.isUndefined(m.items["default"])||(o=[m.items["default"]]):n.isUndefined(m["default"])||(o=m["default"]))}u=!0}return o}}})}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("../helpers"),s="undefined"!=typeof window?window.JsonRefs:"undefined"!=typeof a?a.JsonRefs:null;t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../helpers":2}],7:[function(e,t,a){(function(a){"use strict";function i(e,t,a){this.computedSchema=s.computeParameterSchema(t),this.definition=t,this.pathToDefinition=a,this.ptr=o.pathToPtr(a),n.has(e,"consumes")?(this.operationObject=e,this.pathObject=e.pathObject):(this.operationObject=void 0,this.pathObject=e),n.assign(this,t),r("Found %s parameter (%s in %s) at %s",n.isUndefined(this.operationObject)?"path-level":"operation",t.name,t["in"],this.ptr)}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("debug")("sway:parameter"),s=e("../helpers"),o="undefined"!=typeof window?window.JsonRefs:"undefined"!=typeof a?a.JsonRefs:null,c=e("./parameter-value"),u=e("url").parse;i.prototype.getSchema=function(){return this.computedSchema},i.prototype.getSample=function(){return s.getJSONSchemaMocker()(this.computedSchema)},i.prototype.getValue=function(e){if(n.isUndefined(e))throw new TypeError("req is required");if(-1===s.parameterLocations.indexOf(this["in"]))throw new Error("Invalid 'in' value: "+this["in"]);var t,a,i=this,r=this.computedSchema.type||"object";switch(this["in"]){case"body":a=e.body;break;case"formData":if("file"===r){if(n.isUndefined(e.files))throw new Error("req.files must be provided for 'formData' parameters of type 'file'");a=e.files[this.name]}else{if(n.isUndefined(e.body))throw new Error("req.body must be provided for 'formData' parameters");a=e.body[this.name]}break;case"header":if(n.isUndefined(e.headers))throw new Error("req.headers must be provided for 'header' parameters");a=e.headers[this.name.toLowerCase()];break;case"path":if(n.isUndefined(e.url))throw new Error("req.url must be provided for 'path' parameters");t=this.pathObject.regexp.exec(u(decodeURIComponent(e.url)).pathname),t&&(a=t[n.findIndex(this.pathObject.regexp.keys,function(e){return e.name===i.name})+1]);break;case"query":if(n.isUndefined(e.query))throw new Error("req.query must be provided for 'query' parameters");a=n.get(e.query,this.name)}return new c(this,a)},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../helpers":2,"./parameter-value":6,debug:18,url:170}],8:[function(e,t,a){(function(a){"use strict";function i(e,t,a,i){var f=e.definitionAllResolved.basePath||"/",p=this;"/"===f.charAt(f.length-1)&&(f=f.substring(0,f.length-1)),this.api=e,this.definition=a,this.path=t,this.pathToDefinition=i,this.ptr=o.pathToPtr(i),this.regexp=m(f+t.replace(/\{/g,":").replace(/\}/g,"")),n.assign(this,a),this.parameterObjects=n.map(a.parameters,function(e,t){return new u(p,e,i.concat(["parameters",t.toString()]))}),this.operationObjects=n.reduce(a,function(e,t,a){return s.supportedHttpMethods.indexOf(a)>-1&&e.push(new c(p,a,t,i.concat(a))),e},[]),r("Found path at %s",this.ptr)}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("debug")("sway:path"),s=e("../helpers"),o="undefined"!=typeof window?window.JsonRefs:"undefined"!=typeof a?a.JsonRefs:null,c=e("./operation"),u=e("./parameter"),m=e("path-to-regexp");i.prototype.getOperation=function(e){return n.find(this.operationObjects,function(t){return t.method===e})},i.prototype.getOperations=function(){return this.operationObjects},i.prototype.getOperationsByTag=function(e){return n.filter(this.operationObjects,function(t){return n.contains(t.tags,e)})},i.prototype.getParameters=function(){return this.parameterObjects},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../helpers":2,"./operation":5,"./parameter":7,debug:18,"path-to-regexp":158}],9:[function(e,t,a){(function(a){"use strict";function i(e,t,a,i){this.definition=a,this.operationObject=e,this.pathToDefinition=i,this.ptr=c.pathToPtr(i),this.statusCode=t,n.assign(this,a),r("Found %s response at %s",t,this.ptr)}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("debug")("sway:response"),s=e("../helpers"),o=s.getJSONSchemaValidator(),c="undefined"!=typeof window?window.JsonRefs:"undefined"!=typeof a?a.JsonRefs:null,u="undefined"!=typeof window?window.jsyaml:"undefined"!=typeof a?a.jsyaml:null;i.prototype.getExample=function(e){var t;return n.isPlainObject(this.definition.examples)&&(t=this.definition.examples[e]),n.isUndefined(t)||n.isString(t)||("application/json"===e?t=JSON.stringify(t,null,2):"application/x-yaml"===e&&(t=u.safeDump(t,{indent:2}))),t},i.prototype.getSample=function(){var e;return n.isUndefined(this.definition.schema)||(e=s.getJSONSchemaMocker()(this.definition.schema)),e},i.prototype.validateResponse=function(e){var t,a,i={errors:[],warnings:[]};if(n.isUndefined(e)&&(e={}),n.isUndefined(e.headers)&&(e.headers={}),n.isUndefined(this.definition.schema)||-1!==n.indexOf(["204","304"],this.statusCode)||s.validateContentType(e.headers["content-type"],this.operationObject.produces,i),n.forEach(this.headers,function(t,a){var r,c;try{r=s.convertValue(t,{collectionFormat:t.collectionFormat},e.headers[a.toLowerCase()]||e.headers[a]||t["default"])}catch(u){i.errors.push({code:"INVALID_RESPONSE_HEADER",errors:u.errors||[{code:u.code,message:u.message,path:u.path}],message:"Invalid header ("+a+"): "+u.message,name:a,path:u.path})}n.isUndefined(r)||n.isDate(r)||(c=s.validateAgainstSchema(o,t,r),c.errors.length>0&&i.errors.push({code:"INVALID_RESPONSE_HEADER",errors:c.errors,message:"Invalid header ("+a+"): "+(c.errors.length>1?"Value failed JSON Schema validation":c.errors[0].message),name:a,path:[]}))}),!n.isUndefined(this.definition.schema)&&-1===n.indexOf(["204","304"],this.statusCode)){try{t=s.convertValue(this.definition.schema,{encoding:e.encoding},e.body),a=s.validateAgainstSchema(o,this.definition.schema,t)}catch(r){a={errors:[{code:r.code,message:r.message,path:r.path}]}}a.errors.length>0&&i.errors.push({code:"INVALID_RESPONSE_BODY",errors:a.errors,message:"Invalid body: "+(a.errors.length>1?"Value failed JSON Schema validation":a.errors[0].message),path:[]})}return i},t.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../helpers":2,debug:18}],10:[function(e,t,a){(function(a){"use strict";function i(e){var t=n.cloneDeep(e);return delete t.format,t}var n="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,r=e("js-base64").Base64,s=e("json-schema-faker/lib/types/string");t.exports["byte"]=function(e,t){return r.encode(s(i(t)))},t.exports.password=function(e,t){return s(i(t))}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"js-base64":134,"json-schema-faker/lib/types/string":142}],11:[function(e,t,a){(function(e){"use strict";function a(){return!0}var i="undefined"!=typeof window?window._:"undefined"!=typeof e?e._:null;t.exports.int32=t.exports.int64=function(e){return i.isNumber(e)&&e%1===0},t.exports["byte"]=a,t.exports["double"]=a,t.exports["float"]=a,t.exports.password=a}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],12:[function(e,t,a){t.exports={title:"A JSON Schema for Swagger 2.0 API.",id:"http://swagger.io/v2/schema.json#",$schema:"http://json-schema.org/draft-04/schema#",type:"object",required:["swagger","info","paths"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{swagger:{type:"string","enum":["2.0"],description:"The Swagger version of this document."},info:{$ref:"#/definitions/info"},host:{type:"string",pattern:"^[^{}/ :\\\\]+(?::\\d+)?$",description:"The host (name or ip) of the API. Example: 'swagger.io'"},basePath:{type:"string",pattern:"^/",description:"The base path to the API. Example: '/api'."},schemes:{$ref:"#/definitions/schemesList"},consumes:{description:"A list of MIME types accepted by the API.",$ref:"#/definitions/mediaTypeList"},produces:{description:"A list of MIME types the API can produce.",$ref:"#/definitions/mediaTypeList"},paths:{$ref:"#/definitions/paths"},definitions:{$ref:"#/definitions/definitions"},parameters:{$ref:"#/definitions/parameterDefinitions"},responses:{$ref:"#/definitions/responseDefinitions"},security:{$ref:"#/definitions/security"},securityDefinitions:{$ref:"#/definitions/securityDefinitions"},tags:{type:"array",items:{$ref:"#/definitions/tag"},uniqueItems:!0},externalDocs:{$ref:"#/definitions/externalDocs"}},definitions:{info:{type:"object",description:"General information about the API.",required:["version","title"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{title:{type:"string",description:"A unique and precise title of the API."},version:{type:"string",description:"A semantic version number of the API."},description:{type:"string",description:"A longer description of the API. Should be different from the title. GitHub Flavored Markdown is allowed."},termsOfService:{type:"string",description:"The terms of service for the API."},contact:{$ref:"#/definitions/contact"},license:{$ref:"#/definitions/license"}}},contact:{type:"object",description:"Contact information for the owners of the API.",additionalProperties:!1,properties:{name:{type:"string",description:"The identifying name of the contact person/organization."},url:{type:"string",description:"The URL pointing to the contact information.",format:"uri"},email:{type:"string",description:"The email address of the contact person/organization.",format:"email"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},license:{type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"The name of the license type. It's encouraged to use an OSI compatible license."},url:{type:"string",description:"The URL pointing to the license.",format:"uri"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},paths:{type:"object",description:"Relative paths to the individual endpoints. They must be relative to the 'basePath'.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"},"^/":{$ref:"#/definitions/pathItem"}},additionalProperties:!1},definitions:{type:"object",additionalProperties:{$ref:"#/definitions/schema"},description:"One or more JSON objects describing the schemas being consumed and produced by the API."},parameterDefinitions:{type:"object",additionalProperties:{$ref:"#/definitions/parameter"},description:"One or more JSON representations for parameters"},responseDefinitions:{type:"object",additionalProperties:{$ref:"#/definitions/response"},description:"One or more JSON representations for parameters"},externalDocs:{type:"object",additionalProperties:!1,description:"information about external documentation",required:["url"],properties:{description:{type:"string"},url:{type:"string",format:"uri"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},examples:{type:"object",additionalProperties:!0},mimeType:{type:"string",description:"The MIME type of the HTTP message."},operation:{type:"object",required:["responses"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{tags:{type:"array",items:{type:"string"},uniqueItems:!0},summary:{type:"string",description:"A brief summary of the operation."},description:{type:"string",description:"A longer description of the operation, GitHub Flavored Markdown is allowed."},externalDocs:{$ref:"#/definitions/externalDocs"},operationId:{type:"string",description:"A unique identifier of the operation."},produces:{description:"A list of MIME types the API can produce.",$ref:"#/definitions/mediaTypeList"},consumes:{description:"A list of MIME types the API can consume.",$ref:"#/definitions/mediaTypeList"},parameters:{$ref:"#/definitions/parametersList"},responses:{$ref:"#/definitions/responses"},schemes:{$ref:"#/definitions/schemesList"},deprecated:{type:"boolean","default":!1},security:{$ref:"#/definitions/security"}}},pathItem:{type:"object",additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{$ref:{type:"string"},get:{$ref:"#/definitions/operation"},put:{$ref:"#/definitions/operation"},post:{$ref:"#/definitions/operation"},"delete":{$ref:"#/definitions/operation"},options:{$ref:"#/definitions/operation"},head:{$ref:"#/definitions/operation"},patch:{$ref:"#/definitions/operation"},parameters:{$ref:"#/definitions/parametersList"}}},responses:{type:"object",description:"Response objects names can either be any valid HTTP status code or 'default'.",minProperties:1,additionalProperties:!1,patternProperties:{"^([0-9]{3})$|^(default)$":{$ref:"#/definitions/responseValue"},"^x-":{$ref:"#/definitions/vendorExtension"}},not:{type:"object",additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}}},responseValue:{oneOf:[{$ref:"#/definitions/response"},{$ref:"#/definitions/jsonReference"}]},response:{type:"object",required:["description"],properties:{description:{type:"string"},schema:{oneOf:[{$ref:"#/definitions/schema"},{$ref:"#/definitions/fileSchema"}]},headers:{$ref:"#/definitions/headers"},examples:{$ref:"#/definitions/examples"}},additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},headers:{type:"object",additionalProperties:{$ref:"#/definitions/header"}},header:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{type:"string","enum":["string","number","integer","boolean","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},vendorExtension:{description:"Any property starting with x- is valid.",additionalProperties:!0,additionalItems:!0},bodyParameter:{type:"object",required:["name","in","schema"],patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},"in":{type:"string",description:"Determines the location of the parameter.","enum":["body"]},required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},schema:{$ref:"#/definitions/schema"}},additionalProperties:!1},headerParameterSubSchema:{additionalProperties:!1,patternProperties:{ +"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["header"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},queryParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["query"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},allowEmptyValue:{type:"boolean","default":!1,description:"allows sending a parameter by name only or with an empty value."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormatWithMulti"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},formDataParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["formData"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},allowEmptyValue:{type:"boolean","default":!1,description:"allows sending a parameter by name only or with an empty value."},type:{type:"string","enum":["string","number","boolean","integer","array","file"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormatWithMulti"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},pathParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},required:["required"],properties:{required:{type:"boolean","enum":[!0],description:"Determines whether or not this parameter is required or optional."},"in":{type:"string",description:"Determines the location of the parameter.","enum":["path"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},nonBodyParameter:{type:"object",required:["name","in","type"],oneOf:[{$ref:"#/definitions/headerParameterSubSchema"},{$ref:"#/definitions/formDataParameterSubSchema"},{$ref:"#/definitions/queryParameterSubSchema"},{$ref:"#/definitions/pathParameterSubSchema"}]},parameter:{oneOf:[{$ref:"#/definitions/bodyParameter"},{$ref:"#/definitions/nonBodyParameter"}]},schema:{type:"object",description:"A deterministic version of a JSON Schema object.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{$ref:{type:"string"},format:{type:"string"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},multipleOf:{$ref:"http://json-schema.org/draft-04/schema#/properties/multipleOf"},maximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/maximum"},exclusiveMaximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"},minimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/minimum"},exclusiveMinimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"},maxLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},pattern:{$ref:"http://json-schema.org/draft-04/schema#/properties/pattern"},maxItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},uniqueItems:{$ref:"http://json-schema.org/draft-04/schema#/properties/uniqueItems"},maxProperties:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minProperties:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},required:{$ref:"http://json-schema.org/draft-04/schema#/definitions/stringArray"},"enum":{$ref:"http://json-schema.org/draft-04/schema#/properties/enum"},additionalProperties:{anyOf:[{$ref:"#/definitions/schema"},{type:"boolean"}],"default":{}},type:{$ref:"http://json-schema.org/draft-04/schema#/properties/type"},items:{anyOf:[{$ref:"#/definitions/schema"},{type:"array",minItems:1,items:{$ref:"#/definitions/schema"}}],"default":{}},allOf:{type:"array",minItems:1,items:{$ref:"#/definitions/schema"}},properties:{type:"object",additionalProperties:{$ref:"#/definitions/schema"},"default":{}},discriminator:{type:"string"},readOnly:{type:"boolean","default":!1},xml:{$ref:"#/definitions/xml"},externalDocs:{$ref:"#/definitions/externalDocs"},example:{}},additionalProperties:!1},fileSchema:{type:"object",description:"A deterministic version of a JSON Schema object.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},required:["type"],properties:{format:{type:"string"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},required:{$ref:"http://json-schema.org/draft-04/schema#/definitions/stringArray"},type:{type:"string","enum":["file"]},readOnly:{type:"boolean","default":!1},externalDocs:{$ref:"#/definitions/externalDocs"},example:{}},additionalProperties:!1},primitivesItems:{type:"object",additionalProperties:!1,properties:{type:{type:"string","enum":["string","number","integer","boolean","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},security:{type:"array",items:{$ref:"#/definitions/securityRequirement"},uniqueItems:!0},securityRequirement:{type:"object",additionalProperties:{type:"array",items:{type:"string"},uniqueItems:!0}},xml:{type:"object",additionalProperties:!1,properties:{name:{type:"string"},namespace:{type:"string"},prefix:{type:"string"},attribute:{type:"boolean","default":!1},wrapped:{type:"boolean","default":!1}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},tag:{type:"object",additionalProperties:!1,required:["name"],properties:{name:{type:"string"},description:{type:"string"},externalDocs:{$ref:"#/definitions/externalDocs"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},securityDefinitions:{type:"object",additionalProperties:{oneOf:[{$ref:"#/definitions/basicAuthenticationSecurity"},{$ref:"#/definitions/apiKeySecurity"},{$ref:"#/definitions/oauth2ImplicitSecurity"},{$ref:"#/definitions/oauth2PasswordSecurity"},{$ref:"#/definitions/oauth2ApplicationSecurity"},{$ref:"#/definitions/oauth2AccessCodeSecurity"}]}},basicAuthenticationSecurity:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{type:"string","enum":["basic"]},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},apiKeySecurity:{type:"object",additionalProperties:!1,required:["type","name","in"],properties:{type:{type:"string","enum":["apiKey"]},name:{type:"string"},"in":{type:"string","enum":["header","query"]},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2ImplicitSecurity:{type:"object",additionalProperties:!1,required:["type","flow","authorizationUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["implicit"]},scopes:{$ref:"#/definitions/oauth2Scopes"},authorizationUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2PasswordSecurity:{type:"object",additionalProperties:!1,required:["type","flow","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["password"]},scopes:{$ref:"#/definitions/oauth2Scopes"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2ApplicationSecurity:{type:"object",additionalProperties:!1,required:["type","flow","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["application"]},scopes:{$ref:"#/definitions/oauth2Scopes"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2AccessCodeSecurity:{type:"object",additionalProperties:!1,required:["type","flow","authorizationUrl","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["accessCode"]},scopes:{$ref:"#/definitions/oauth2Scopes"},authorizationUrl:{type:"string",format:"uri"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2Scopes:{type:"object",additionalProperties:{type:"string"}},mediaTypeList:{type:"array",items:{$ref:"#/definitions/mimeType"},uniqueItems:!0},parametersList:{type:"array",description:"The parameters needed to send a valid API call.",additionalItems:!1,items:{oneOf:[{$ref:"#/definitions/parameter"},{$ref:"#/definitions/jsonReference"}]},uniqueItems:!0},schemesList:{type:"array",description:"The transfer protocol of the API.",items:{type:"string","enum":["http","https","ws","wss"]},uniqueItems:!0},collectionFormat:{type:"string","enum":["csv","ssv","tsv","pipes"],"default":"csv"},collectionFormatWithMulti:{type:"string","enum":["csv","ssv","tsv","pipes","multi"],"default":"csv"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},multipleOf:{$ref:"http://json-schema.org/draft-04/schema#/properties/multipleOf"},maximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/maximum"},exclusiveMaximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"},minimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/minimum"},exclusiveMinimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"},maxLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},pattern:{$ref:"http://json-schema.org/draft-04/schema#/properties/pattern"},maxItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},uniqueItems:{$ref:"http://json-schema.org/draft-04/schema#/properties/uniqueItems"},"enum":{$ref:"http://json-schema.org/draft-04/schema#/properties/enum"},jsonReference:{type:"object",required:["$ref"],additionalProperties:!1,properties:{$ref:{type:"string"}}}}}},{}],13:[function(e,t,a){(function(a){"use strict";function i(e){var t=p.keys(e.properties);return p.forEach(e.allOf,function(e){p.forEach(i(e),function(e){-1===p.indexOf(t,e)&&t.push(e)})}),t}function n(e,t,a,i,r,s){function o(e){return p.indexOf(t,h.pathToPtr(e))>-1}function c(a,i){o(i)||p.forEach(a,function(a,o){p.isNumber(o)&&(o=o.toString()),n(e,t,a,i.concat(o),r,s)})}var u=a.type||"object";o(i)||(p.isUndefined(a.schema)?"array"!==u||p.isUndefined(a.items)?"object"===u&&(p.isUndefined(a.additionalProperties)||n(e,t,a.additionalProperties,i.concat("additionalProperties"),r,s),p.forEach(["allOf","properties"],function(e){p.isUndefined(a[e])||c(a[e],i.concat(e))})):p.isArray(a.items)?c(a.items,i.concat("items")):n(e,t,a.items,i.concat("items"),r,s):n(e,t,a.schema,i.concat("schema"),r,s),p.forEach(r,function(t){t(e,s,a,i)}))}function r(e){var t=l.validateAgainstSchema(l.getJSONSchemaValidator(),d,e.definitionAllResolved);return t.errors=t.errors.map(function(e){var t=["additionalProperties","items"].indexOf(e.path[e.path.length-1])>-1?"schema":e.path[e.path.length-2];if(["ANY_OF_MISSING","ONE_OF_MISSING"].indexOf(e.code)>-1){switch(t){case"parameters":t="parameter";break;case"responses":t="response";break;case"schema":t+=" "+e.path[e.path.length-1]}e.message="Not a valid "+t+" definition"}return e}),p.each(e.references,function(e,a){var i,n=h.pathFromPtr(a);e.missing?(i={code:"UNRESOLVABLE_REFERENCE",message:"Reference could not be resolved: "+e.uri,path:n.concat("$ref")},p.has(e,"error")&&(i.error=e.error),t.errors.push(i)):"invalid"===e.type&&t.errors.push({code:"INVALID_REFERENCE",message:e.error||"Invalid JSON Reference",path:n.concat("$ref")})}),t}function s(e,t,a,i){"array"===a.type&&p.isUndefined(a.items)&&t.errors.push({code:"OBJECT_MISSING_REQUIRED_PROPERTY",message:"Missing required property: items",path:i})}function o(e,t,a,i){var n;p.isUndefined(a["default"])||(n=l.validateAgainstSchema(l.getJSONSchemaValidator(),a,a["default"]),p.forEach(n.errors,function(e){e.path=i.concat(e.path.concat("default")),t.errors.push(e)}),p.forEach(n.warnings,function(e){e.path=i.concat(e.path.push("default")),t.warnings.push(e)}))}function c(e,t,a,n){p.forEach(p.difference(a.required||[],i(a)),function(e){t.errors.push({code:"OBJECT_MISSING_REQUIRED_PROPERTY_DEFINITION",message:"Missing required property definition: "+e,path:n})})}function u(e){function t(e,t){p.has(r,e)?r[e].parents.push(t):r[e]={lineage:[],parents:[t]}}function a(e,t){-1===p.indexOf(o,e)&&(p.isUndefined(o[e])&&(o[e]=[]),e.indexOf("allOf")>-1&&a(e.substring(0,e.lastIndexOf("/allOf"))),o[e].push(t))}function i(e){return function(t,i){p.forEach(t,function(t,n){var r=["securityDefinitions",n],o=h.pathToPtr(r),u=e.concat([i.toString(),n]);-1===p.indexOf(s,o)?c.errors.push({code:"UNRESOLVABLE_REFERENCE",message:"Security definition could not be resolved: "+n,path:u}):(a(o,h.pathToPtr(u)),p.forEach(t,function(e,t){var i=u.concat(t.toString()),n=h.pathToPtr(r.concat(["scopes",e]));-1===p.indexOf(s,n)?c.errors.push({code:"UNRESOLVABLE_REFERENCE",message:"Security scope definition could not be resolved: "+e,path:i}):a(h.pathToPtr(r.concat(["scopes",e])),n)}))})}}function n(e,t,a){var i=r[t||e];i&&p.each(i.parents,function(t){a.push(t),e!==t&&n(e,t,a)})}var r={},s=[],o={},c={errors:[],warnings:[]};return p.forEach(e.definitionAllResolved.definitions,function(e,t){s.push(h.pathToPtr(["definitions",t]))}),p.forEach(e.definitionAllResolved.parameters,function(e,t){s.push(h.pathToPtr(["parameters",t]))}),p.forEach(e.definitionAllResolved.responses,function(e,t){s.push(h.pathToPtr(["responses",t]))}),p.forEach(e.definitionAllResolved.securityDefinitions,function(e,t){var a=["securityDefinitions",t];s.push(h.pathToPtr(a)),p.forEach(e.scopes,function(e,t){var i=h.pathToPtr(a.concat(["scopes",t]));-1===p.indexOf(s,i)&&s.push(i)})}),p.forEach(e.references,function(e,i){var n=h.pathFromPtr(i);p.has(e,"missing")||(a(e.uri,i),"allOf"===n[n.length-2]&&t(h.pathToPtr(n.slice(0,n.length-2)),e.uri))}),p.forEach(r,function(e,t){n(t,void 0,e.lineage),(e.lineage.length>1&&e.lineage[e.lineage.length-1]===t||e.parents[0]===t)&&c.errors.push({code:"CIRCULAR_INHERITANCE",lineage:[t].concat(e.lineage),message:"Schema object inherits from itself: "+t,path:h.pathFromPtr(t)})}),p.forEach(e.definitionAllResolved.security,i(["security"])),p.forEach(e.definitionAllResolved.paths,function(e,t){var a=["paths",t];p.forEach(e.security,i(a.concat("security"))),p.forEach(e,function(e,t){-1!==p.indexOf(l.supportedHttpMethods,t)&&p.forEach(e.security,i(a.concat([t,"security"])))})}),p.forEach(p.difference(s,Object.keys(o)),function(e){c.warnings.push({code:"UNUSED_DEFINITION",message:"Definition is not used: "+e,path:h.pathFromPtr(e)})}),c}function m(e){function t(t,a){p.forEach(t,function(t,s){var o;p.isNumber(s)&&(s=s.toString()),o=a.concat(s),"body"!==t["in"]&&(t=l.computeParameterSchema(t)),n(e,i,t,o,u,r)})}function a(t,a){p.forEach(t,function(t,s){var o=a.concat(s);p.forEach(t.headers,function(t,a){n(e,i,t,o.concat(["headers",a]),u,r)}),p.isUndefined(t.schema)||n(e,i,t.schema,o.concat("schema"),u,r)})}var i=p.reduce(e.references,function(e,t,a){var i=h.pathFromPtr(a);return e.push(h.pathToPtr(i)),e},[]),r={errors:[],warnings:[]},u=[s,o,c];return p.forEach(e.definitionAllResolved.definitions,function(t,a){n(e,i,t,["definitions",a],u,r)}),t(e.definitionAllResolved.parameters,["parameters"]),a(e.definitionAllResolved.responses,["responses"]),p.forEach(e.definitionAllResolved.paths,function(e,i){var n=["paths",i];t(e.parameters,n.concat("parameters")),p.forEach(e,function(e,i){var r=n.concat(i);-1!==p.indexOf(l.supportedHttpMethods,i)&&(t(e.parameters,r.concat("parameters")),a(e.responses,r.concat("responses")))})}),r}function f(e){function t(e,t,i){var n=t["in"]+":"+t.name;return p.indexOf(e,n)>-1?a.errors.push({code:"DUPLICATE_PARAMETER",message:"Operation cannot have duplicate parameters: "+h.pathToPtr(i),path:i}):e.push(n),e}var a={errors:[],warnings:[]};return p.reduce(e.definitionAllResolved.paths,function(i,n,r){var s=[],o=r,c=["paths",r];return p.forEach(r.match(/\{(.*?)\}/g),function(e,t){s.push(e.replace(/[{}]/g,"")),o=o.replace(e,"arg"+t)}),s.indexOf("")>-1&&a.errors.push({code:"EMPTY_PATH_PARAMETER_DECLARATION",message:"Path parameter declaration cannot be empty: "+r,path:["paths",r]}),p.indexOf(i.paths,o)>-1?a.errors.push({code:"EQUIVALENT_PATH",message:"Equivalent path already exists: "+r,path:c}):i.paths.push(o),p.reduce(n.parameters,function(e,a,i){return t(e,a,c.concat(["parameters",i.toString()]))},[]),p.forEach(n,function(n,o){var u,m,f={},d=c.concat(o),g=n.operationId;-1!==p.indexOf(l.supportedHttpMethods,o)&&(p.isUndefined(g)||(-1!==p.indexOf(i.operationIds,g)?a.errors.push({code:"DUPLICATE_OPERATIONID",message:"Cannot have multiple operations with the same operationId: "+g,path:d.concat(["operationId"])}):i.operationIds.push(g)),p.reduce(n.parameters,function(e,a,i){return t(e,a,d.concat(["parameters",i.toString()]))},[]),m=e.getOperation(r,o).getParameters(),u=p.reduce(m,function(e,t){return"path"===t["in"]?f[t.name]=t.ptr:"body"===t["in"]?e.bodyParameteters+=1:"formData"===t["in"]&&(e.formParameters+=1),e},{bodyParameteters:0,formParameters:0}),u.bodyParameteters>1&&a.errors.push({code:"MULTIPLE_BODY_PARAMETERS",message:"Operation cannot have multiple body parameters",path:d}),u.bodyParameteters>0&&u.formParameters>0&&a.errors.push({code:"INVALID_PARAMETER_COMBINATION",message:"Operation cannot have a body parameter and a formData parameter",path:d}),p.forEach(p.difference(s,p.keys(f)),function(e){a.errors.push({code:"MISSING_PATH_PARAMETER_DEFINITION",message:"Path parameter is declared but is not defined: "+e,path:d})}),p.forEach(p.difference(p.keys(f),s),function(e){a.errors.push({code:"MISSING_PATH_PARAMETER_DECLARATION",message:"Path parameter is defined but is not declared: "+e,path:h.pathFromPtr(f[e])})}))}),i},{paths:[],operationIds:[]}),a}var p="undefined"!=typeof window?window._:"undefined"!=typeof a?a._:null,l=e("../helpers"),h="undefined"!=typeof window?window.JsonRefs:"undefined"!=typeof a?a.JsonRefs:null,d=e("./schema.json");t.exports={jsonSchemaValidator:r,semanticValidators:[u,m,f]}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../helpers":2,"./schema.json":12}],14:[function(e,t,a){var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(e){"use strict";function t(e){var t=e.charCodeAt(0);return t===s||t===f?62:t===o||t===p?63:c>t?-1:c+10>t?t-c+26+26:m+26>t?t-m:u+26>t?t-u+26:void 0}function a(e){function a(e){u[f++]=e}var i,n,s,o,c,u;if(e.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var m=e.length;c="="===e.charAt(m-2)?2:"="===e.charAt(m-1)?1:0,u=new r(3*e.length/4-c),s=c>0?e.length-4:e.length;var f=0;for(i=0,n=0;s>i;i+=4,n+=3)o=t(e.charAt(i))<<18|t(e.charAt(i+1))<<12|t(e.charAt(i+2))<<6|t(e.charAt(i+3)),a((16711680&o)>>16),a((65280&o)>>8),a(255&o);return 2===c?(o=t(e.charAt(i))<<2|t(e.charAt(i+1))>>4,a(255&o)):1===c&&(o=t(e.charAt(i))<<10|t(e.charAt(i+1))<<4|t(e.charAt(i+2))>>2,a(o>>8&255),a(255&o)),u}function n(e){function t(e){return i.charAt(e)}function a(e){return t(e>>18&63)+t(e>>12&63)+t(e>>6&63)+t(63&e)}var n,r,s,o=e.length%3,c="";for(n=0,s=e.length-o;s>n;n+=3)r=(e[n]<<16)+(e[n+1]<<8)+e[n+2],c+=a(r);switch(o){case 1:r=e[e.length-1],c+=t(r>>2),c+=t(r<<4&63),c+="==";break;case 2:r=(e[e.length-2]<<8)+e[e.length-1],c+=t(r>>10),c+=t(r>>4&63),c+=t(r<<2&63),c+="="}return c}var r="undefined"!=typeof Uint8Array?Uint8Array:Array,s="+".charCodeAt(0),o="/".charCodeAt(0),c="0".charCodeAt(0),u="a".charCodeAt(0),m="A".charCodeAt(0),f="-".charCodeAt(0),p="_".charCodeAt(0);e.toByteArray=a,e.fromByteArray=n}("undefined"==typeof a?this.base64js={}:a)},{}],15:[function(e,t,a){(function(t){"use strict";function i(){function e(){}try{var t=new Uint8Array(1);return t.foo=function(){return 42},t.constructor=e,42===t.foo()&&t.constructor===e&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(a){return!1}}function n(){return r.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function r(e){return this instanceof r?(r.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof e?s(this,e):"string"==typeof e?o(this,e,arguments.length>1?arguments[1]:"utf8"):c(this,e)):arguments.length>1?new r(e,arguments[1]):new r(e)}function s(e,t){if(e=d(e,0>t?0:0|g(t)),!r.TYPED_ARRAY_SUPPORT)for(var a=0;t>a;a++)e[a]=0;return e}function o(e,t,a){("string"!=typeof a||""===a)&&(a="utf8");var i=0|y(t,a);return e=d(e,i),e.write(t,a),e}function c(e,t){if(r.isBuffer(t))return u(e,t);if(Y(t))return m(e,t);if(null==t)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(t.buffer instanceof ArrayBuffer)return f(e,t);if(t instanceof ArrayBuffer)return p(e,t)}return t.length?l(e,t):h(e,t)}function u(e,t){var a=0|g(t.length);return e=d(e,a),t.copy(e,0,0,a),e}function m(e,t){var a=0|g(t.length);e=d(e,a);for(var i=0;a>i;i+=1)e[i]=255&t[i];return e}function f(e,t){var a=0|g(t.length);e=d(e,a);for(var i=0;a>i;i+=1)e[i]=255&t[i];return e}function p(e,t){return r.TYPED_ARRAY_SUPPORT?(t.byteLength,e=r._augment(new Uint8Array(t))):e=f(e,new Uint8Array(t)),e}function l(e,t){var a=0|g(t.length);e=d(e,a);for(var i=0;a>i;i+=1)e[i]=255&t[i];return e}function h(e,t){var a,i=0;"Buffer"===t.type&&Y(t.data)&&(a=t.data,i=0|g(a.length)),e=d(e,i);for(var n=0;i>n;n+=1)e[n]=255&a[n];return e}function d(e,t){r.TYPED_ARRAY_SUPPORT?(e=r._augment(new Uint8Array(t)),e.__proto__=r.prototype):(e.length=t,e._isBuffer=!0);var a=0!==t&&t<=r.poolSize>>>1;return a&&(e.parent=Z),e}function g(e){if(e>=n())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n().toString(16)+" bytes");return 0|e}function w(e,t){if(!(this instanceof w))return new w(e,t);var a=new r(e,t);return delete a.parent,a}function y(e,t){"string"!=typeof e&&(e=""+e);var a=e.length;if(0===a)return 0;for(var i=!1;;)switch(t){case"ascii":case"binary":case"raw":case"raws":return a;case"utf8":case"utf-8":return $(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*a;case"hex":return a>>>1;case"base64":return H(e).length;default:if(i)return $(e).length;t=(""+t).toLowerCase(),i=!0}}function b(e,t,a){var i=!1;if(t=0|t,a=void 0===a||a===1/0?this.length:0|a,e||(e="utf8"),0>t&&(t=0),a>this.length&&(a=this.length),t>=a)return"";for(;;)switch(e){case"hex":return C(this,t,a);case"utf8":case"utf-8":return _(this,t,a);case"ascii":return R(this,t,a);case"binary":return k(this,t,a);case"base64":return S(this,t,a);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return D(this,t,a);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}function v(e,t,a,i){a=Number(a)||0;var n=e.length-a;i?(i=Number(i),i>n&&(i=n)):i=n;var r=t.length;if(r%2!==0)throw new Error("Invalid hex string");i>r/2&&(i=r/2);for(var s=0;i>s;s++){var o=parseInt(t.substr(2*s,2),16);if(isNaN(o))throw new Error("Invalid hex string");e[a+s]=o}return s}function j(e,t,a,i){return W($(t,e.length-a),e,a,i)}function z(e,t,a,i){return W(J(t),e,a,i)}function E(e,t,a,i){return z(e,t,a,i)}function A(e,t,a,i){return W(H(t),e,a,i)}function x(e,t,a,i){return W(G(t,e.length-a),e,a,i)}function S(e,t,a){return 0===t&&a===e.length?V.fromByteArray(e):V.fromByteArray(e.slice(t,a))}function _(e,t,a){a=Math.min(e.length,a);for(var i=[],n=t;a>n;){var r=e[n],s=null,o=r>239?4:r>223?3:r>191?2:1;if(a>=n+o){var c,u,m,f;switch(o){case 1:128>r&&(s=r);break;case 2:c=e[n+1],128===(192&c)&&(f=(31&r)<<6|63&c,f>127&&(s=f));break;case 3:c=e[n+1],u=e[n+2],128===(192&c)&&128===(192&u)&&(f=(15&r)<<12|(63&c)<<6|63&u,f>2047&&(55296>f||f>57343)&&(s=f));break;case 4:c=e[n+1],u=e[n+2],m=e[n+3],128===(192&c)&&128===(192&u)&&128===(192&m)&&(f=(15&r)<<18|(63&c)<<12|(63&u)<<6|63&m,f>65535&&1114112>f&&(s=f))}}null===s?(s=65533,o=1):s>65535&&(s-=65536,i.push(s>>>10&1023|55296),s=56320|1023&s),i.push(s),n+=o}return M(i)}function M(e){var t=e.length;if(X>=t)return String.fromCharCode.apply(String,e);for(var a="",i=0;t>i;)a+=String.fromCharCode.apply(String,e.slice(i,i+=X));return a}function R(e,t,a){var i="";a=Math.min(e.length,a);for(var n=t;a>n;n++)i+=String.fromCharCode(127&e[n]);return i}function k(e,t,a){var i="";a=Math.min(e.length,a);for(var n=t;a>n;n++)i+=String.fromCharCode(e[n]);return i}function C(e,t,a){var i=e.length;(!t||0>t)&&(t=0),(!a||0>a||a>i)&&(a=i);for(var n="",r=t;a>r;r++)n+=K(e[r]);return n}function D(e,t,a){for(var i=e.slice(t,a),n="",r=0;re)throw new RangeError("offset is not uint");if(e+t>a)throw new RangeError("Trying to access beyond buffer length")}function I(e,t,a,i,n,s){if(!r.isBuffer(e))throw new TypeError("buffer must be a Buffer instance");if(t>n||s>t)throw new RangeError("value is out of bounds");if(a+i>e.length)throw new RangeError("index out of range")}function T(e,t,a,i){0>t&&(t=65535+t+1);for(var n=0,r=Math.min(e.length-a,2);r>n;n++)e[a+n]=(t&255<<8*(i?n:1-n))>>>8*(i?n:1-n)}function O(e,t,a,i){0>t&&(t=4294967295+t+1);for(var n=0,r=Math.min(e.length-a,4);r>n;n++)e[a+n]=t>>>8*(i?n:3-n)&255}function L(e,t,a,i,n,r){if(t>n||r>t)throw new RangeError("value is out of bounds");if(a+i>e.length)throw new RangeError("index out of range");if(0>a)throw new RangeError("index out of range")}function N(e,t,a,i,n){return n||L(e,t,a,4,3.4028234663852886e38,-3.4028234663852886e38),q.write(e,t,a,i,23,4),a+4}function B(e,t,a,i,n){return n||L(e,t,a,8,1.7976931348623157e308,-1.7976931348623157e308),q.write(e,t,a,i,52,8),a+8}function F(e){if(e=U(e).replace(ee,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function U(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function K(e){return 16>e?"0"+e.toString(16):e.toString(16)}function $(e,t){t=t||1/0;for(var a,i=e.length,n=null,r=[],s=0;i>s;s++){if(a=e.charCodeAt(s),a>55295&&57344>a){if(!n){if(a>56319){(t-=3)>-1&&r.push(239,191,189);continue}if(s+1===i){(t-=3)>-1&&r.push(239,191,189);continue}n=a;continue}if(56320>a){(t-=3)>-1&&r.push(239,191,189),n=a;continue}a=(n-55296<<10|a-56320)+65536}else n&&(t-=3)>-1&&r.push(239,191,189);if(n=null,128>a){if((t-=1)<0)break;r.push(a)}else if(2048>a){if((t-=2)<0)break;r.push(a>>6|192,63&a|128)}else if(65536>a){if((t-=3)<0)break;r.push(a>>12|224,a>>6&63|128,63&a|128)}else{if(!(1114112>a))throw new Error("Invalid code point");if((t-=4)<0)break;r.push(a>>18|240,a>>12&63|128,a>>6&63|128,63&a|128)}}return r}function J(e){for(var t=[],a=0;a>8,n=a%256,r.push(n),r.push(i);return r}function H(e){return V.toByteArray(F(e))}function W(e,t,a,i){for(var n=0;i>n&&!(n+a>=t.length||n>=e.length);n++)t[n+a]=e[n];return n}var V=e("base64-js"),q=e("ieee754"),Y=e("isarray");a.Buffer=r,a.SlowBuffer=w,a.INSPECT_MAX_BYTES=50, +r.poolSize=8192;var Z={};r.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:i(),r.TYPED_ARRAY_SUPPORT?(r.prototype.__proto__=Uint8Array.prototype,r.__proto__=Uint8Array):(r.prototype.length=void 0,r.prototype.parent=void 0),r.isBuffer=function(e){return!(null==e||!e._isBuffer)},r.compare=function(e,t){if(!r.isBuffer(e)||!r.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var a=e.length,i=t.length,n=0,s=Math.min(a,i);s>n&&e[n]===t[n];)++n;return n!==s&&(a=e[n],i=t[n]),i>a?-1:a>i?1:0},r.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},r.concat=function(e,t){if(!Y(e))throw new TypeError("list argument must be an Array of Buffers.");if(0===e.length)return new r(0);var a;if(void 0===t)for(t=0,a=0;a0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},r.prototype.compare=function(e){if(!r.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?0:r.compare(this,e)},r.prototype.indexOf=function(e,t){function a(e,t,a){for(var i=-1,n=0;a+n2147483647?t=2147483647:-2147483648>t&&(t=-2147483648),t>>=0,0===this.length)return-1;if(t>=this.length)return-1;if(0>t&&(t=Math.max(this.length+t,0)),"string"==typeof e)return 0===e.length?-1:String.prototype.indexOf.call(this,e,t);if(r.isBuffer(e))return a(this,e,t);if("number"==typeof e)return r.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,t):a(this,[e],t);throw new TypeError("val must be string, number or Buffer")},r.prototype.get=function(e){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(e)},r.prototype.set=function(e,t){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(e,t)},r.prototype.write=function(e,t,a,i){if(void 0===t)i="utf8",a=this.length,t=0;else if(void 0===a&&"string"==typeof t)i=t,a=this.length,t=0;else if(isFinite(t))t=0|t,isFinite(a)?(a=0|a,void 0===i&&(i="utf8")):(i=a,a=void 0);else{var n=i;i=t,t=0|a,a=n}var r=this.length-t;if((void 0===a||a>r)&&(a=r),e.length>0&&(0>a||0>t)||t>this.length)throw new RangeError("attempt to write outside buffer bounds");i||(i="utf8");for(var s=!1;;)switch(i){case"hex":return v(this,e,t,a);case"utf8":case"utf-8":return j(this,e,t,a);case"ascii":return z(this,e,t,a);case"binary":return E(this,e,t,a);case"base64":return A(this,e,t,a);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,a);default:if(s)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),s=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var X=4096;r.prototype.slice=function(e,t){var a=this.length;e=~~e,t=void 0===t?a:~~t,0>e?(e+=a,0>e&&(e=0)):e>a&&(e=a),0>t?(t+=a,0>t&&(t=0)):t>a&&(t=a),e>t&&(t=e);var i;if(r.TYPED_ARRAY_SUPPORT)i=r._augment(this.subarray(e,t));else{var n=t-e;i=new r(n,void 0);for(var s=0;n>s;s++)i[s]=this[s+e]}return i.length&&(i.parent=this.parent||this),i},r.prototype.readUIntLE=function(e,t,a){e=0|e,t=0|t,a||P(e,t,this.length);for(var i=this[e],n=1,r=0;++r0&&(n*=256);)i+=this[e+--t]*n;return i},r.prototype.readUInt8=function(e,t){return t||P(e,1,this.length),this[e]},r.prototype.readUInt16LE=function(e,t){return t||P(e,2,this.length),this[e]|this[e+1]<<8},r.prototype.readUInt16BE=function(e,t){return t||P(e,2,this.length),this[e]<<8|this[e+1]},r.prototype.readUInt32LE=function(e,t){return t||P(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},r.prototype.readUInt32BE=function(e,t){return t||P(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},r.prototype.readIntLE=function(e,t,a){e=0|e,t=0|t,a||P(e,t,this.length);for(var i=this[e],n=1,r=0;++r=n&&(i-=Math.pow(2,8*t)),i},r.prototype.readIntBE=function(e,t,a){e=0|e,t=0|t,a||P(e,t,this.length);for(var i=t,n=1,r=this[e+--i];i>0&&(n*=256);)r+=this[e+--i]*n;return n*=128,r>=n&&(r-=Math.pow(2,8*t)),r},r.prototype.readInt8=function(e,t){return t||P(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},r.prototype.readInt16LE=function(e,t){t||P(e,2,this.length);var a=this[e]|this[e+1]<<8;return 32768&a?4294901760|a:a},r.prototype.readInt16BE=function(e,t){t||P(e,2,this.length);var a=this[e+1]|this[e]<<8;return 32768&a?4294901760|a:a},r.prototype.readInt32LE=function(e,t){return t||P(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},r.prototype.readInt32BE=function(e,t){return t||P(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},r.prototype.readFloatLE=function(e,t){return t||P(e,4,this.length),q.read(this,e,!0,23,4)},r.prototype.readFloatBE=function(e,t){return t||P(e,4,this.length),q.read(this,e,!1,23,4)},r.prototype.readDoubleLE=function(e,t){return t||P(e,8,this.length),q.read(this,e,!0,52,8)},r.prototype.readDoubleBE=function(e,t){return t||P(e,8,this.length),q.read(this,e,!1,52,8)},r.prototype.writeUIntLE=function(e,t,a,i){e=+e,t=0|t,a=0|a,i||I(this,e,t,a,Math.pow(2,8*a),0);var n=1,r=0;for(this[t]=255&e;++r=0&&(r*=256);)this[t+n]=e/r&255;return t+a},r.prototype.writeUInt8=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,1,255,0),r.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},r.prototype.writeUInt16LE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):T(this,e,t,!0),t+2},r.prototype.writeUInt16BE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):T(this,e,t,!1),t+2},r.prototype.writeUInt32LE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):O(this,e,t,!0),t+4},r.prototype.writeUInt32BE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},r.prototype.writeIntLE=function(e,t,a,i){if(e=+e,t=0|t,!i){var n=Math.pow(2,8*a-1);I(this,e,t,a,n-1,-n)}var r=0,s=1,o=0>e?1:0;for(this[t]=255&e;++r>0)-o&255;return t+a},r.prototype.writeIntBE=function(e,t,a,i){if(e=+e,t=0|t,!i){var n=Math.pow(2,8*a-1);I(this,e,t,a,n-1,-n)}var r=a-1,s=1,o=0>e?1:0;for(this[t+r]=255&e;--r>=0&&(s*=256);)this[t+r]=(e/s>>0)-o&255;return t+a},r.prototype.writeInt8=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,1,127,-128),r.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},r.prototype.writeInt16LE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):T(this,e,t,!0),t+2},r.prototype.writeInt16BE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):T(this,e,t,!1),t+2},r.prototype.writeInt32LE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,4,2147483647,-2147483648),r.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):O(this,e,t,!0),t+4},r.prototype.writeInt32BE=function(e,t,a){return e=+e,t=0|t,a||I(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},r.prototype.writeFloatLE=function(e,t,a){return N(this,e,t,!0,a)},r.prototype.writeFloatBE=function(e,t,a){return N(this,e,t,!1,a)},r.prototype.writeDoubleLE=function(e,t,a){return B(this,e,t,!0,a)},r.prototype.writeDoubleBE=function(e,t,a){return B(this,e,t,!1,a)},r.prototype.copy=function(e,t,a,i){if(a||(a=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&a>i&&(i=a),i===a)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError("targetStart out of bounds");if(0>a||a>=this.length)throw new RangeError("sourceStart out of bounds");if(0>i)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-ta&&i>t)for(n=s-1;n>=0;n--)e[n+t]=this[n+a];else if(1e3>s||!r.TYPED_ARRAY_SUPPORT)for(n=0;s>n;n++)e[n+t]=this[n+a];else e._set(this.subarray(a,a+s),t);return s},r.prototype.fill=function(e,t,a){if(e||(e=0),t||(t=0),a||(a=this.length),t>a)throw new RangeError("end < start");if(a!==t&&0!==this.length){if(0>t||t>=this.length)throw new RangeError("start out of bounds");if(0>a||a>this.length)throw new RangeError("end out of bounds");var i;if("number"==typeof e)for(i=t;a>i;i++)this[i]=e;else{var n=$(e.toString()),r=n.length;for(i=t;a>i;i++)this[i]=n[i%r]}return this}},r.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(r.TYPED_ARRAY_SUPPORT)return new r(this).buffer;for(var e=new Uint8Array(this.length),t=0,a=e.length;a>t;t+=1)e[t]=this[t];return e.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser")};var Q=r.prototype;r._augment=function(e){return e.constructor=r,e._isBuffer=!0,e._set=e.set,e.get=Q.get,e.set=Q.set,e.write=Q.write,e.toString=Q.toString,e.toLocaleString=Q.toString,e.toJSON=Q.toJSON,e.equals=Q.equals,e.compare=Q.compare,e.indexOf=Q.indexOf,e.copy=Q.copy,e.slice=Q.slice,e.readUIntLE=Q.readUIntLE,e.readUIntBE=Q.readUIntBE,e.readUInt8=Q.readUInt8,e.readUInt16LE=Q.readUInt16LE,e.readUInt16BE=Q.readUInt16BE,e.readUInt32LE=Q.readUInt32LE,e.readUInt32BE=Q.readUInt32BE,e.readIntLE=Q.readIntLE,e.readIntBE=Q.readIntBE,e.readInt8=Q.readInt8,e.readInt16LE=Q.readInt16LE,e.readInt16BE=Q.readInt16BE,e.readInt32LE=Q.readInt32LE,e.readInt32BE=Q.readInt32BE,e.readFloatLE=Q.readFloatLE,e.readFloatBE=Q.readFloatBE,e.readDoubleLE=Q.readDoubleLE,e.readDoubleBE=Q.readDoubleBE,e.writeUInt8=Q.writeUInt8,e.writeUIntLE=Q.writeUIntLE,e.writeUIntBE=Q.writeUIntBE,e.writeUInt16LE=Q.writeUInt16LE,e.writeUInt16BE=Q.writeUInt16BE,e.writeUInt32LE=Q.writeUInt32LE,e.writeUInt32BE=Q.writeUInt32BE,e.writeIntLE=Q.writeIntLE,e.writeIntBE=Q.writeIntBE,e.writeInt8=Q.writeInt8,e.writeInt16LE=Q.writeInt16LE,e.writeInt16BE=Q.writeInt16BE,e.writeInt32LE=Q.writeInt32LE,e.writeInt32BE=Q.writeInt32BE,e.writeFloatLE=Q.writeFloatLE,e.writeFloatBE=Q.writeFloatBE,e.writeDoubleLE=Q.writeDoubleLE,e.writeDoubleBE=Q.writeDoubleBE,e.fill=Q.fill,e.inspect=Q.inspect,e.toArrayBuffer=Q.toArrayBuffer,e};var ee=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":14,ieee754:132,isarray:16}],16:[function(e,t,a){var i={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==i.call(e)}},{}],17:[function(t,a,i){(function(t){!function(){function n(e){if(!(this instanceof n))return null==e?new n:new n(e);if("function"==typeof e)return this.random=e,this;arguments.length&&(this.seed=0);for(var t=0;tn;n++)a=i[n],t[a]=e[a]||t[a]}function u(e,t){for(var a=0,i=e.length;i>a;a++)t[a]=e[a]}function m(e,t){var a=Array.isArray(e),i=t||(a?new Array(e.length):{});return a?u(e,i):c(e,i),i}var f=9007199254740992,p=-f,l="0123456789",h="abcdefghijklmnopqrstuvwxyz",d=h.toUpperCase(),g=l+"abcdef",w=Array.prototype.slice;n.prototype.VERSION="0.8.0";var y=function(){throw new Error("No Base64 encoder available.")};!function(){"function"==typeof btoa?y=btoa:"function"==typeof t&&(y=function(e){return new t(e).toString("base64")})}(),n.prototype.bool=function(e){return e=r(e,{likelihood:50}),s(e.likelihood<0||e.likelihood>100,"Chance: Likelihood accepts values from 0 to 100."),100*this.random()i,"Chance: Max specified is out of range with fixed. Max should be, at most, "+i),e=r(e,{min:n,max:i}),t=this.integer({min:e.min*a,max:e.max*a});var o=(t/a).toFixed(e.fixed);return parseFloat(o)},n.prototype.integer=function(e){return e=r(e,{min:p,max:f}),s(e.min>e.max,"Chance: Min cannot be greater than Max."),Math.floor(this.random()*(e.max-e.min+1)+e.min)},n.prototype.natural=function(e){return e=r(e,{min:0,max:f}),s(e.min<0,"Chance: Min cannot be less than zero."),this.integer(e)},n.prototype.string=function(e){e=r(e,{length:this.natural({min:5,max:20})}),s(e.length<0,"Chance: Length cannot be less than zero.");var t=e.length,a=this.n(this.character,t,e);return a.join("")},n.prototype.capitalize=function(e){return e.charAt(0).toUpperCase()+e.substr(1)},n.prototype.mixin=function(e){for(var t in e)n.prototype[t]=e[t];return this},n.prototype.unique=function(e,t,a){s("function"!=typeof e,"Chance: The first argument must be a function."),a=r(a,{comparator:function(e,t){return-1!==e.indexOf(t)}});for(var i,n=[],o=0,c=50*t,u=w.call(arguments,2);n.lengthc)throw new RangeError("Chance: num is likely too large for sample set");return n},n.prototype.n=function(e,t){s("function"!=typeof e,"Chance: The first argument must be a function."),"undefined"==typeof t&&(t=1);var a=t,i=[],n=w.call(arguments,2);for(a=Math.max(0,a),null;a--;null)i.push(e.apply(this,n));return i},n.prototype.pad=function(e,t,a){return a=a||"0",e+="",e.length>=t?e:new Array(t-e.length+1).join(a)+e},n.prototype.pick=function(e,t){if(0===e.length)throw new RangeError("Chance: Cannot pick() from an empty array");return t&&1!==t?this.shuffle(e).slice(0,t):e[this.natural({max:e.length-1})]},n.prototype.shuffle=function(e){for(var t=e.slice(0),a=[],i=0,n=Number(t.length),r=0;n>r;r++)i=this.natural({max:t.length-1}),a[r]=t[i],t.splice(i,1);return a},n.prototype.weighted=function(e,t){if(e.length!==t.length)throw new RangeError("Chance: length of array and weights must match");for(var a=t.length-1;a>=0;--a)t[a]<=0&&(e.splice(a,1),t.splice(a,1));if(t.some(function(e){return 1>e})){var i=t.reduce(function(e,t){return e>t?t:e},t[0]),n=1/i;t=t.map(function(e){return e*n})}var r,s=t.reduce(function(e,t){return e+t},0),o=this.natural({min:1,max:s}),c=0;return t.some(function(t,a){return c+t>=o?(r=e[a],!0):(c+=t,!1)}),r},n.prototype.paragraph=function(e){e=r(e);var t=e.sentences||this.natural({min:3,max:7}),a=this.n(this.sentence,t);return a.join(" ")},n.prototype.sentence=function(e){e=r(e);var t,a=e.words||this.natural({min:12,max:18}),i=e.punctuation,n=this.n(this.word,a);return t=n.join(" "),t=this.capitalize(t),i===!1||/^[\.\?;!:]$/.test(i)||(i="."),i&&(t+=i),t},n.prototype.syllable=function(e){e=r(e);for(var t,a=e.length||this.natural({min:2,max:3}),i="bcdfghjklmnprstvwz",n="aeiou",s=i+n,o="",c=0;a>c;c++)t=0===c?this.character({pool:s}):-1===i.indexOf(t)?this.character({pool:i}):this.character({pool:n}),o+=t;return o},n.prototype.word=function(e){e=r(e),s(e.syllables&&e.length,"Chance: Cannot specify both syllables AND length.");var t=e.syllables||this.natural({min:1,max:3}),a="";if(e.length){do a+=this.syllable();while(a.lengthi;i++)a+=this.syllable();return a},n.prototype.age=function(e){e=r(e);var t;switch(e.type){case"child":t={min:1,max:12};break;case"teen":t={min:13,max:19};break;case"adult":t={min:18,max:65};break;case"senior":t={min:65,max:100};break;case"all":t={min:1,max:100};break;default:t={min:18,max:65}}return this.natural(t)},n.prototype.birthday=function(e){return e=r(e,{year:(new Date).getFullYear()-this.age(e)}),this.date(e)},n.prototype.cpf=function(){var e=this.n(this.natural,9,{max:9}),t=2*e[8]+3*e[7]+4*e[6]+5*e[5]+6*e[4]+7*e[3]+8*e[2]+9*e[1]+10*e[0];t=11-t%11,t>=10&&(t=0);var a=2*t+3*e[8]+4*e[7]+5*e[6]+6*e[5]+7*e[4]+8*e[3]+9*e[2]+10*e[1]+11*e[0];return a=11-a%11,a>=10&&(a=0),""+e[0]+e[1]+e[2]+"."+e[3]+e[4]+e[5]+"."+e[6]+e[7]+e[8]+"-"+t+a},n.prototype.first=function(e){return e=r(e,{gender:this.gender()}),this.pick(this.get("firstNames")[e.gender.toLowerCase()])},n.prototype.gender=function(){return this.pick(["Male","Female"])},n.prototype.last=function(){return this.pick(this.get("lastNames"))},n.prototype.israelId=function(){for(var e=this.string({pool:"0123456789",length:8}),t=0,a=0;a0?"."+this.pick(e.extensions):"",a=e.domain_prefix?e.domain_prefix+"."+e.domain:e.domain;return e.protocol+"://"+a+"/"+e.path+t},n.prototype.address=function(e){return e=r(e),this.natural({min:5,max:2e3})+" "+this.street(e)},n.prototype.altitude=function(e){return e=r(e,{fixed:5,min:0,max:8848}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},n.prototype.areacode=function(e){e=r(e,{parens:!0});var t=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:8}).toString()+this.natural({min:0,max:9}).toString();return e.parens?"("+t+")":t},n.prototype.city=function(){return this.capitalize(this.word({syllables:3}))},n.prototype.coordinates=function(e){return this.latitude(e)+", "+this.longitude(e)},n.prototype.countries=function(){return this.get("countries")},n.prototype.country=function(e){e=r(e);var t=this.pick(this.countries());return e.full?t.name:t.abbreviation},n.prototype.depth=function(e){return e=r(e,{fixed:5,min:-10994,max:0}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},n.prototype.geohash=function(e){return e=r(e,{length:7}),this.string({length:e.length,pool:"0123456789bcdefghjkmnpqrstuvwxyz"})},n.prototype.geojson=function(e){return this.latitude(e)+", "+this.longitude(e)+", "+this.altitude(e)},n.prototype.latitude=function(e){return e=r(e,{fixed:5,min:-90,max:90}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},n.prototype.longitude=function(e){return e=r(e,{fixed:5,min:-180,max:180}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},n.prototype.phone=function(e){var t,a=this,i=function(e){var t=[];return e.sections.forEach(function(e){t.push(a.string({pool:"0123456789",length:e}))}),e.area+t.join(" ")};e=r(e,{formatted:!0,country:"us",mobile:!1}),e.formatted||(e.parens=!1);var n;switch(e.country){case"fr":e.mobile?(t=this.pick(["06","07"])+a.string({pool:"0123456789",length:8}),n=e.formatted?t.match(/../g).join(" "):t):(t=this.pick(["01"+this.pick(["30","34","39","40","41","42","43","44","45","46","47","48","49","53","55","56","58","60","64","69","70","72","73","74","75","76","77","78","79","80","81","82","83"])+a.string({pool:"0123456789",length:6}),"02"+this.pick(["14","18","22","23","28","29","30","31","32","33","34","35","36","37","38","40","41","43","44","45","46","47","48","49","50","51","52","53","54","56","57","61","62","69","72","76","77","78","85","90","96","97","98","99"])+a.string({pool:"0123456789",length:6}),"03"+this.pick(["10","20","21","22","23","24","25","26","27","28","29","39","44","45","51","52","54","55","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","80","81","82","83","84","85","86","87","88","89","90"])+a.string({pool:"0123456789",length:6}),"04"+this.pick(["11","13","15","20","22","26","27","30","32","34","37","42","43","44","50","56","57","63","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","88","89","90","91","92","93","94","95","97","98"])+a.string({pool:"0123456789",length:6}),"05"+this.pick(["08","16","17","19","24","31","32","33","34","35","40","45","46","47","49","53","55","56","57","58","59","61","62","63","64","65","67","79","81","82","86","87","90","94"])+a.string({pool:"0123456789",length:6}),"09"+a.string({pool:"0123456789",length:8})]),n=e.formatted?t.match(/../g).join(" "):t);break;case"uk":e.mobile?(t=this.pick([{area:"07"+this.pick(["4","5","7","8","9"]),sections:[2,6]},{area:"07624 ",sections:[6]}]),n=e.formatted?i(t):i(t).replace(" ","")):(t=this.pick([{area:"01"+this.character({pool:"234569"})+"1 ",sections:[3,4]},{area:"020 "+this.character({pool:"378"}),sections:[3,4]},{area:"023 "+this.character({pool:"89"}),sections:[3,4]},{area:"024 7",sections:[3,4]},{area:"028 "+this.pick(["25","28","37","71","82","90","92","95"]),sections:[2,4]},{area:"012"+this.pick(["04","08","54","76","97","98"])+" ",sections:[5]},{area:"013"+this.pick(["63","64","84","86"])+" ",sections:[5]},{area:"014"+this.pick(["04","20","60","61","80","88"])+" ",sections:[5]},{area:"015"+this.pick(["24","27","62","66"])+" ",sections:[5]},{area:"016"+this.pick(["06","29","35","47","59","95"])+" ",sections:[5]},{area:"017"+this.pick(["26","44","50","68"])+" ",sections:[5]},{area:"018"+this.pick(["27","37","84","97"])+" ",sections:[5]},{area:"019"+this.pick(["00","05","35","46","49","63","95"])+" ",sections:[5]}]),n=e.formatted?i(t):i(t).replace(" ","","g"));break;case"us":var s=this.areacode(e).toString(),o=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:9}).toString()+this.natural({min:0,max:9}).toString(),c=this.natural({min:1e3,max:9999}).toString();n=e.formatted?s+" "+o+"-"+c:s+o+c}return n},n.prototype.postal=function(){var e=this.character({pool:"XVTSRPNKLMHJGECBA"}),t=e+this.natural({max:9})+this.character({alpha:!0,casing:"upper"}),a=this.natural({max:9})+this.character({alpha:!0,casing:"upper"})+this.natural({max:9});return t+" "+a},n.prototype.provinces=function(){return this.get("provinces")},n.prototype.province=function(e){return e&&e.full?this.pick(this.provinces()).name:this.pick(this.provinces()).abbreviation},n.prototype.state=function(e){return e&&e.full?this.pick(this.states(e)).name:this.pick(this.states(e)).abbreviation},n.prototype.states=function(e){e=r(e,{us_states_and_dc:!0});var t,a=this.get("us_states_and_dc"),i=this.get("territories"),n=this.get("armed_forces");return t=[],e.us_states_and_dc&&(t=t.concat(a)),e.territories&&(t=t.concat(i)),e.armed_forces&&(t=t.concat(n)),t},n.prototype.street=function(e){e=r(e);var t=this.word({syllables:2});return t=this.capitalize(t),t+=" ",t+=e.short_suffix?this.street_suffix().abbreviation:this.street_suffix().name},n.prototype.street_suffix=function(){return this.pick(this.street_suffixes())},n.prototype.street_suffixes=function(){return this.get("street_suffixes")},n.prototype.zip=function(e){var t=this.n(this.natural,5,{max:9});return e&&e.plusfour===!0&&(t.push("-"),t=t.concat(this.n(this.natural,4,{max:9}))),t.join("")},n.prototype.ampm=function(){return this.bool()?"am":"pm"},n.prototype.date=function(e){var t,a;if(e&&(e.min||e.max)){e=r(e,{american:!0,string:!1});var i="undefined"!=typeof e.min?e.min.getTime():1,n="undefined"!=typeof e.max?e.max.getTime():864e13;a=new Date(this.natural({min:i,max:n}))}else{var s=this.month({raw:!0}),o=s.days;e&&e.month&&(o=this.get("months")[(e.month%12+12)%12].days),e=r(e,{year:parseInt(this.year(),10),month:s.numeric-1,day:this.natural({min:1,max:o}),hour:this.hour(),minute:this.minute(),second:this.second(),millisecond:this.millisecond(),american:!0,string:!1}),a=new Date(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond)}return t=e.american?a.getMonth()+1+"/"+a.getDate()+"/"+a.getFullYear():a.getDate()+"/"+(a.getMonth()+1)+"/"+a.getFullYear(),e.string?t:a},n.prototype.hammertime=function(e){return this.date(e).getTime()},n.prototype.hour=function(e){return e=r(e,{min:1,max:e&&e.twentyfour?24:12}),s(e.min<1,"Chance: Min cannot be less than 1."),s(e.twentyfour&&e.max>24,"Chance: Max cannot be greater than 24 for twentyfour option."), +s(!e.twentyfour&&e.max>12,"Chance: Max cannot be greater than 12."),s(e.min>e.max,"Chance: Min cannot be greater than Max."),this.natural({min:e.min,max:e.max})},n.prototype.millisecond=function(){return this.natural({max:999})},n.prototype.minute=n.prototype.second=function(e){return e=r(e,{min:0,max:59}),s(e.min<0,"Chance: Min cannot be less than 0."),s(e.max>59,"Chance: Max cannot be greater than 59."),s(e.min>e.max,"Chance: Min cannot be greater than Max."),this.natural({min:e.min,max:e.max})},n.prototype.month=function(e){e=r(e,{min:1,max:12}),s(e.min<1,"Chance: Min cannot be less than 1."),s(e.max>12,"Chance: Max cannot be greater than 12."),s(e.min>e.max,"Chance: Min cannot be greater than Max.");var t=this.pick(this.months().slice(e.min-1,e.max));return e.raw?t:t.name},n.prototype.months=function(){return this.get("months")},n.prototype.second=function(){return this.natural({max:59})},n.prototype.timestamp=function(){return this.natural({min:1,max:parseInt((new Date).getTime()/1e3,10)})},n.prototype.year=function(e){return e=r(e,{min:(new Date).getFullYear()}),e.max="undefined"!=typeof e.max?e.max:e.min+100,this.natural(e).toString()},n.prototype.cc=function(e){e=r(e);var t,a,i;return t=e.type?this.cc_type({name:e.type,raw:!0}):this.cc_type({raw:!0}),a=t.prefix.split(""),i=t.length-t.prefix.length-1,a=a.concat(this.n(this.integer,i,{min:0,max:9})),a.push(this.luhn_calculate(a.join(""))),a.join("")},n.prototype.cc_types=function(){return this.get("cc_types")},n.prototype.cc_type=function(e){e=r(e);var t=this.cc_types(),a=null;if(e.name){for(var i=0;it?"-$"+t.replace("-",""):"$"+t},n.prototype.exp=function(e){e=r(e);var t={};return t.year=this.exp_year(),t.year===(new Date).getFullYear().toString()?t.month=this.exp_month({future:!0}):t.month=this.exp_month(),e.raw?t:t.month+"/"+t.year},n.prototype.exp_month=function(e){e=r(e);var t,a,i=(new Date).getMonth()+1;if(e.future){do t=this.month({raw:!0}).numeric,a=parseInt(t,10);while(i>=a)}else t=this.month({raw:!0}).numeric;return t},n.prototype.exp_year=function(){return this.year({max:(new Date).getFullYear()+10})},n.prototype.pl_pesel=function(){for(var e=this.natural({min:1,max:9999999999}),t=this.pad(e,10).split(""),a=0;a0;n--)i[n-1]=this.natural({min:1,max:a[1]});return"undefined"!=typeof t.sum&&t.sum?i.reduce(function(e,t){return e+t}):i}throw new RangeError("A type of die roll must be included")},n.prototype.guid=function(e){e=r(e,{version:5});var t="abcdef1234567890",a="ab89",i=this.string({pool:t,length:8})+"-"+this.string({pool:t,length:4})+"-"+e.version+this.string({pool:t,length:3})+"-"+this.string({pool:a,length:1})+this.string({pool:t,length:3})+"-"+this.string({pool:t,length:12});return i},n.prototype.hash=function(e){e=r(e,{length:40,casing:"lower"});var t="upper"===e.casing?g.toUpperCase():g;return this.string({pool:t,length:e.length})},n.prototype.luhn_check=function(e){var t=e.toString(),a=+t.substring(t.length-1);return a===this.luhn_calculate(+t.substring(0,t.length-1))},n.prototype.luhn_calculate=function(e){for(var t,a=e.toString().split("").reverse(),i=0,n=0,r=a.length;r>n;++n)t=+a[n],n%2===0&&(t*=2,t>9&&(t-=9)),i+=t;return 9*i%10},n.prototype.md5=function(e){var t={str:"",key:null,raw:!1};if(e)if("string"==typeof e)t.str=e,e={};else{if("object"!=typeof e)return null;if("Array"===e.constructor)return null}else t.str=this.string(),e={};if(t=r(e,t),!t.str)throw new Error("A parameter is required to return an md5 hash.");return this.bimd5.md5(t.str,t.key,t.raw)};var b={firstNames:{male:["James","John","Robert","Michael","William","David","Richard","Joseph","Charles","Thomas","Christopher","Daniel","Matthew","George","Donald","Anthony","Paul","Mark","Edward","Steven","Kenneth","Andrew","Brian","Joshua","Kevin","Ronald","Timothy","Jason","Jeffrey","Frank","Gary","Ryan","Nicholas","Eric","Stephen","Jacob","Larry","Jonathan","Scott","Raymond","Justin","Brandon","Gregory","Samuel","Benjamin","Patrick","Jack","Henry","Walter","Dennis","Jerry","Alexander","Peter","Tyler","Douglas","Harold","Aaron","Jose","Adam","Arthur","Zachary","Carl","Nathan","Albert","Kyle","Lawrence","Joe","Willie","Gerald","Roger","Keith","Jeremy","Terry","Harry","Ralph","Sean","Jesse","Roy","Louis","Billy","Austin","Bruce","Eugene","Christian","Bryan","Wayne","Russell","Howard","Fred","Ethan","Jordan","Philip","Alan","Juan","Randy","Vincent","Bobby","Dylan","Johnny","Phillip","Victor","Clarence","Ernest","Martin","Craig","Stanley","Shawn","Travis","Bradley","Leonard","Earl","Gabriel","Jimmy","Francis","Todd","Noah","Danny","Dale","Cody","Carlos","Allen","Frederick","Logan","Curtis","Alex","Joel","Luis","Norman","Marvin","Glenn","Tony","Nathaniel","Rodney","Melvin","Alfred","Steve","Cameron","Chad","Edwin","Caleb","Evan","Antonio","Lee","Herbert","Jeffery","Isaac","Derek","Ricky","Marcus","Theodore","Elijah","Luke","Jesus","Eddie","Troy","Mike","Dustin","Ray","Adrian","Bernard","Leroy","Angel","Randall","Wesley","Ian","Jared","Mason","Hunter","Calvin","Oscar","Clifford","Jay","Shane","Ronnie","Barry","Lucas","Corey","Manuel","Leo","Tommy","Warren","Jackson","Isaiah","Connor","Don","Dean","Jon","Julian","Miguel","Bill","Lloyd","Charlie","Mitchell","Leon","Jerome","Darrell","Jeremiah","Alvin","Brett","Seth","Floyd","Jim","Blake","Micheal","Gordon","Trevor","Lewis","Erik","Edgar","Vernon","Devin","Gavin","Jayden","Chris","Clyde","Tom","Derrick","Mario","Brent","Marc","Herman","Chase","Dominic","Ricardo","Franklin","Maurice","Max","Aiden","Owen","Lester","Gilbert","Elmer","Gene","Francisco","Glen","Cory","Garrett","Clayton","Sam","Jorge","Chester","Alejandro","Jeff","Harvey","Milton","Cole","Ivan","Andre","Duane","Landon"],female:["Mary","Emma","Elizabeth","Minnie","Margaret","Ida","Alice","Bertha","Sarah","Annie","Clara","Ella","Florence","Cora","Martha","Laura","Nellie","Grace","Carrie","Maude","Mabel","Bessie","Jennie","Gertrude","Julia","Hattie","Edith","Mattie","Rose","Catherine","Lillian","Ada","Lillie","Helen","Jessie","Louise","Ethel","Lula","Myrtle","Eva","Frances","Lena","Lucy","Edna","Maggie","Pearl","Daisy","Fannie","Josephine","Dora","Rosa","Katherine","Agnes","Marie","Nora","May","Mamie","Blanche","Stella","Ellen","Nancy","Effie","Sallie","Nettie","Della","Lizzie","Flora","Susie","Maud","Mae","Etta","Harriet","Sadie","Caroline","Katie","Lydia","Elsie","Kate","Susan","Mollie","Alma","Addie","Georgia","Eliza","Lulu","Nannie","Lottie","Amanda","Belle","Charlotte","Rebecca","Ruth","Viola","Olive","Amelia","Hannah","Jane","Virginia","Emily","Matilda","Irene","Kathryn","Esther","Willie","Henrietta","Ollie","Amy","Rachel","Sara","Estella","Theresa","Augusta","Ora","Pauline","Josie","Lola","Sophia","Leona","Anne","Mildred","Ann","Beulah","Callie","Lou","Delia","Eleanor","Barbara","Iva","Louisa","Maria","Mayme","Evelyn","Estelle","Nina","Betty","Marion","Bettie","Dorothy","Luella","Inez","Lela","Rosie","Allie","Millie","Janie","Cornelia","Victoria","Ruby","Winifred","Alta","Celia","Christine","Beatrice","Birdie","Harriett","Mable","Myra","Sophie","Tillie","Isabel","Sylvia","Carolyn","Isabelle","Leila","Sally","Ina","Essie","Bertie","Nell","Alberta","Katharine","Lora","Rena","Mina","Rhoda","Mathilda","Abbie","Eula","Dollie","Hettie","Eunice","Fanny","Ola","Lenora","Adelaide","Christina","Lelia","Nelle","Sue","Johanna","Lilly","Lucinda","Minerva","Lettie","Roxie","Cynthia","Helena","Hilda","Hulda","Bernice","Genevieve","Jean","Cordelia","Marian","Francis","Jeanette","Adeline","Gussie","Leah","Lois","Lura","Mittie","Hallie","Isabella","Olga","Phoebe","Teresa","Hester","Lida","Lina","Winnie","Claudia","Marguerite","Vera","Cecelia","Bess","Emilie","John","Rosetta","Verna","Myrtie","Cecilia","Elva","Olivia","Ophelia","Georgie","Elnora","Violet","Adele","Lily","Linnie","Loretta","Madge","Polly","Virgie","Eugenia","Lucile","Lucille","Mabelle","Rosalie"]},lastNames:["Smith","Johnson","Williams","Jones","Brown","Davis","Miller","Wilson","Moore","Taylor","Anderson","Thomas","Jackson","White","Harris","Martin","Thompson","Garcia","Martinez","Robinson","Clark","Rodriguez","Lewis","Lee","Walker","Hall","Allen","Young","Hernandez","King","Wright","Lopez","Hill","Scott","Green","Adams","Baker","Gonzalez","Nelson","Carter","Mitchell","Perez","Roberts","Turner","Phillips","Campbell","Parker","Evans","Edwards","Collins","Stewart","Sanchez","Morris","Rogers","Reed","Cook","Morgan","Bell","Murphy","Bailey","Rivera","Cooper","Richardson","Cox","Howard","Ward","Torres","Peterson","Gray","Ramirez","James","Watson","Brooks","Kelly","Sanders","Price","Bennett","Wood","Barnes","Ross","Henderson","Coleman","Jenkins","Perry","Powell","Long","Patterson","Hughes","Flores","Washington","Butler","Simmons","Foster","Gonzales","Bryant","Alexander","Russell","Griffin","Diaz","Hayes","Myers","Ford","Hamilton","Graham","Sullivan","Wallace","Woods","Cole","West","Jordan","Owens","Reynolds","Fisher","Ellis","Harrison","Gibson","McDonald","Cruz","Marshall","Ortiz","Gomez","Murray","Freeman","Wells","Webb","Simpson","Stevens","Tucker","Porter","Hunter","Hicks","Crawford","Henry","Boyd","Mason","Morales","Kennedy","Warren","Dixon","Ramos","Reyes","Burns","Gordon","Shaw","Holmes","Rice","Robertson","Hunt","Black","Daniels","Palmer","Mills","Nichols","Grant","Knight","Ferguson","Rose","Stone","Hawkins","Dunn","Perkins","Hudson","Spencer","Gardner","Stephens","Payne","Pierce","Berry","Matthews","Arnold","Wagner","Willis","Ray","Watkins","Olson","Carroll","Duncan","Snyder","Hart","Cunningham","Bradley","Lane","Andrews","Ruiz","Harper","Fox","Riley","Armstrong","Carpenter","Weaver","Greene","Lawrence","Elliott","Chavez","Sims","Austin","Peters","Kelley","Franklin","Lawson","Fields","Gutierrez","Ryan","Schmidt","Carr","Vasquez","Castillo","Wheeler","Chapman","Oliver","Montgomery","Richards","Williamson","Johnston","Banks","Meyer","Bishop","McCoy","Howell","Alvarez","Morrison","Hansen","Fernandez","Garza","Harvey","Little","Burton","Stanley","Nguyen","George","Jacobs","Reid","Kim","Fuller","Lynch","Dean","Gilbert","Garrett","Romero","Welch","Larson","Frazier","Burke","Hanson","Day","Mendoza","Moreno","Bowman","Medina","Fowler","Brewer","Hoffman","Carlson","Silva","Pearson","Holland","Douglas","Fleming","Jensen","Vargas","Byrd","Davidson","Hopkins","May","Terry","Herrera","Wade","Soto","Walters","Curtis","Neal","Caldwell","Lowe","Jennings","Barnett","Graves","Jimenez","Horton","Shelton","Barrett","Obrien","Castro","Sutton","Gregory","McKinney","Lucas","Miles","Craig","Rodriquez","Chambers","Holt","Lambert","Fletcher","Watts","Bates","Hale","Rhodes","Pena","Beck","Newman","Haynes","McDaniel","Mendez","Bush","Vaughn","Parks","Dawson","Santiago","Norris","Hardy","Love","Steele","Curry","Powers","Schultz","Barker","Guzman","Page","Munoz","Ball","Keller","Chandler","Weber","Leonard","Walsh","Lyons","Ramsey","Wolfe","Schneider","Mullins","Benson","Sharp","Bowen","Daniel","Barber","Cummings","Hines","Baldwin","Griffith","Valdez","Hubbard","Salazar","Reeves","Warner","Stevenson","Burgess","Santos","Tate","Cross","Garner","Mann","Mack","Moss","Thornton","Dennis","McGee","Farmer","Delgado","Aguilar","Vega","Glover","Manning","Cohen","Harmon","Rodgers","Robbins","Newton","Todd","Blair","Higgins","Ingram","Reese","Cannon","Strickland","Townsend","Potter","Goodwin","Walton","Rowe","Hampton","Ortega","Patton","Swanson","Joseph","Francis","Goodman","Maldonado","Yates","Becker","Erickson","Hodges","Rios","Conner","Adkins","Webster","Norman","Malone","Hammond","Flowers","Cobb","Moody","Quinn","Blake","Maxwell","Pope","Floyd","Osborne","Paul","McCarthy","Guerrero","Lindsey","Estrada","Sandoval","Gibbs","Tyler","Gross","Fitzgerald","Stokes","Doyle","Sherman","Saunders","Wise","Colon","Gill","Alvarado","Greer","Padilla","Simon","Waters","Nunez","Ballard","Schwartz","McBride","Houston","Christensen","Klein","Pratt","Briggs","Parsons","McLaughlin","Zimmerman","French","Buchanan","Moran","Copeland","Roy","Pittman","Brady","McCormick","Holloway","Brock","Poole","Frank","Logan","Owen","Bass","Marsh","Drake","Wong","Jefferson","Park","Morton","Abbott","Sparks","Patrick","Norton","Huff","Clayton","Massey","Lloyd","Figueroa","Carson","Bowers","Roberson","Barton","Tran","Lamb","Harrington","Casey","Boone","Cortez","Clarke","Mathis","Singleton","Wilkins","Cain","Bryan","Underwood","Hogan","McKenzie","Collier","Luna","Phelps","McGuire","Allison","Bridges","Wilkerson","Nash","Summers","Atkins"],countries:[{name:"Afghanistan",abbreviation:"AF"},{name:"Albania",abbreviation:"AL"},{name:"Algeria",abbreviation:"DZ"},{name:"American Samoa",abbreviation:"AS"},{name:"Andorra",abbreviation:"AD"},{name:"Angola",abbreviation:"AO"},{name:"Anguilla",abbreviation:"AI"},{name:"Antarctica",abbreviation:"AQ"},{name:"Antigua and Barbuda",abbreviation:"AG"},{name:"Argentina",abbreviation:"AR"},{name:"Armenia",abbreviation:"AM"},{name:"Aruba",abbreviation:"AW"},{name:"Australia",abbreviation:"AU"},{name:"Austria",abbreviation:"AT"},{name:"Azerbaijan",abbreviation:"AZ"},{name:"Bahamas",abbreviation:"BS"},{name:"Bahrain",abbreviation:"BH"},{name:"Bangladesh",abbreviation:"BD"},{name:"Barbados",abbreviation:"BB"},{name:"Belarus",abbreviation:"BY"},{name:"Belgium",abbreviation:"BE"},{name:"Belize",abbreviation:"BZ"},{name:"Benin",abbreviation:"BJ"},{name:"Bermuda",abbreviation:"BM"},{name:"Bhutan",abbreviation:"BT"},{name:"Bolivia",abbreviation:"BO"},{name:"Bosnia and Herzegovina",abbreviation:"BA"},{name:"Botswana",abbreviation:"BW"},{name:"Bouvet Island",abbreviation:"BV"},{name:"Brazil",abbreviation:"BR"},{name:"British Antarctic Territory",abbreviation:"BQ"},{name:"British Indian Ocean Territory",abbreviation:"IO"},{name:"British Virgin Islands",abbreviation:"VG"},{name:"Brunei",abbreviation:"BN"},{name:"Bulgaria",abbreviation:"BG"},{name:"Burkina Faso",abbreviation:"BF"},{name:"Burundi",abbreviation:"BI"},{name:"Cambodia",abbreviation:"KH"},{name:"Cameroon",abbreviation:"CM"},{name:"Canada",abbreviation:"CA"},{name:"Canton and Enderbury Islands",abbreviation:"CT"},{name:"Cape Verde",abbreviation:"CV"},{name:"Cayman Islands",abbreviation:"KY"},{name:"Central African Republic",abbreviation:"CF"},{name:"Chad",abbreviation:"TD"},{name:"Chile",abbreviation:"CL"},{name:"China",abbreviation:"CN"},{name:"Christmas Island",abbreviation:"CX"},{name:"Cocos [Keeling] Islands",abbreviation:"CC"},{name:"Colombia",abbreviation:"CO"},{name:"Comoros",abbreviation:"KM"},{name:"Congo - Brazzaville",abbreviation:"CG"},{name:"Congo - Kinshasa",abbreviation:"CD"},{name:"Cook Islands",abbreviation:"CK"},{name:"Costa Rica",abbreviation:"CR"},{name:"Croatia",abbreviation:"HR"},{name:"Cuba",abbreviation:"CU"},{name:"Cyprus",abbreviation:"CY"},{name:"Czech Republic",abbreviation:"CZ"},{name:"Côte d’Ivoire",abbreviation:"CI"},{name:"Denmark",abbreviation:"DK"},{name:"Djibouti",abbreviation:"DJ"},{name:"Dominica",abbreviation:"DM"},{name:"Dominican Republic",abbreviation:"DO"},{name:"Dronning Maud Land",abbreviation:"NQ"},{name:"East Germany",abbreviation:"DD"},{name:"Ecuador",abbreviation:"EC"},{name:"Egypt",abbreviation:"EG"},{name:"El Salvador",abbreviation:"SV"},{name:"Equatorial Guinea",abbreviation:"GQ"},{name:"Eritrea",abbreviation:"ER"},{name:"Estonia",abbreviation:"EE"},{name:"Ethiopia",abbreviation:"ET"},{name:"Falkland Islands",abbreviation:"FK"},{name:"Faroe Islands",abbreviation:"FO"},{name:"Fiji",abbreviation:"FJ"},{name:"Finland",abbreviation:"FI"},{name:"France",abbreviation:"FR"},{name:"French Guiana",abbreviation:"GF"},{name:"French Polynesia",abbreviation:"PF"},{name:"French Southern Territories",abbreviation:"TF"},{name:"French Southern and Antarctic Territories",abbreviation:"FQ"},{name:"Gabon",abbreviation:"GA"},{name:"Gambia",abbreviation:"GM"},{name:"Georgia",abbreviation:"GE"},{name:"Germany",abbreviation:"DE"},{name:"Ghana",abbreviation:"GH"},{name:"Gibraltar",abbreviation:"GI"},{name:"Greece",abbreviation:"GR"},{name:"Greenland",abbreviation:"GL"},{name:"Grenada",abbreviation:"GD"},{name:"Guadeloupe",abbreviation:"GP"},{name:"Guam",abbreviation:"GU"},{name:"Guatemala",abbreviation:"GT"},{name:"Guernsey",abbreviation:"GG"},{name:"Guinea",abbreviation:"GN"},{name:"Guinea-Bissau",abbreviation:"GW"},{name:"Guyana",abbreviation:"GY"},{name:"Haiti",abbreviation:"HT"},{name:"Heard Island and McDonald Islands",abbreviation:"HM"},{name:"Honduras",abbreviation:"HN"},{name:"Hong Kong SAR China",abbreviation:"HK"},{name:"Hungary",abbreviation:"HU"},{name:"Iceland",abbreviation:"IS"},{name:"India",abbreviation:"IN"},{name:"Indonesia",abbreviation:"ID"},{name:"Iran",abbreviation:"IR"},{name:"Iraq",abbreviation:"IQ"},{name:"Ireland",abbreviation:"IE"},{name:"Isle of Man",abbreviation:"IM"},{name:"Israel",abbreviation:"IL"},{name:"Italy",abbreviation:"IT"},{name:"Jamaica",abbreviation:"JM"},{name:"Japan",abbreviation:"JP"},{name:"Jersey",abbreviation:"JE"},{name:"Johnston Island",abbreviation:"JT"},{name:"Jordan",abbreviation:"JO"},{name:"Kazakhstan",abbreviation:"KZ"},{name:"Kenya",abbreviation:"KE"},{name:"Kiribati",abbreviation:"KI"},{name:"Kuwait",abbreviation:"KW"},{name:"Kyrgyzstan",abbreviation:"KG"},{name:"Laos",abbreviation:"LA"},{name:"Latvia",abbreviation:"LV"},{name:"Lebanon",abbreviation:"LB"},{name:"Lesotho",abbreviation:"LS"},{name:"Liberia",abbreviation:"LR"},{name:"Libya",abbreviation:"LY"},{name:"Liechtenstein",abbreviation:"LI"},{name:"Lithuania",abbreviation:"LT"},{name:"Luxembourg",abbreviation:"LU"},{name:"Macau SAR China",abbreviation:"MO"},{name:"Macedonia",abbreviation:"MK"},{name:"Madagascar",abbreviation:"MG"},{name:"Malawi",abbreviation:"MW"},{name:"Malaysia",abbreviation:"MY"},{name:"Maldives",abbreviation:"MV"},{name:"Mali",abbreviation:"ML"},{name:"Malta",abbreviation:"MT"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Martinique",abbreviation:"MQ"},{name:"Mauritania",abbreviation:"MR"},{name:"Mauritius",abbreviation:"MU"},{name:"Mayotte",abbreviation:"YT"},{name:"Metropolitan France",abbreviation:"FX"},{name:"Mexico",abbreviation:"MX"},{name:"Micronesia",abbreviation:"FM"},{name:"Midway Islands",abbreviation:"MI"},{name:"Moldova",abbreviation:"MD"},{name:"Monaco",abbreviation:"MC"},{name:"Mongolia",abbreviation:"MN"},{name:"Montenegro",abbreviation:"ME"},{name:"Montserrat",abbreviation:"MS"},{name:"Morocco",abbreviation:"MA"},{name:"Mozambique",abbreviation:"MZ"},{name:"Myanmar [Burma]",abbreviation:"MM"},{name:"Namibia",abbreviation:"NA"},{name:"Nauru",abbreviation:"NR"},{name:"Nepal",abbreviation:"NP"},{name:"Netherlands",abbreviation:"NL"},{name:"Netherlands Antilles",abbreviation:"AN"},{name:"Neutral Zone",abbreviation:"NT"},{name:"New Caledonia",abbreviation:"NC"},{name:"New Zealand",abbreviation:"NZ"},{name:"Nicaragua",abbreviation:"NI"},{name:"Niger",abbreviation:"NE"},{name:"Nigeria",abbreviation:"NG"},{name:"Niue",abbreviation:"NU"},{name:"Norfolk Island",abbreviation:"NF"},{name:"North Korea",abbreviation:"KP"},{name:"North Vietnam",abbreviation:"VD"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Norway",abbreviation:"NO"},{name:"Oman",abbreviation:"OM"},{name:"Pacific Islands Trust Territory",abbreviation:"PC"},{name:"Pakistan",abbreviation:"PK"},{name:"Palau",abbreviation:"PW"},{name:"Palestinian Territories",abbreviation:"PS"},{name:"Panama",abbreviation:"PA"},{name:"Panama Canal Zone",abbreviation:"PZ"},{name:"Papua New Guinea",abbreviation:"PG"},{name:"Paraguay",abbreviation:"PY"},{name:"People's Democratic Republic of Yemen",abbreviation:"YD"},{name:"Peru",abbreviation:"PE"},{name:"Philippines",abbreviation:"PH"},{name:"Pitcairn Islands",abbreviation:"PN"},{name:"Poland",abbreviation:"PL"},{name:"Portugal",abbreviation:"PT"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Qatar",abbreviation:"QA"},{name:"Romania",abbreviation:"RO"},{name:"Russia",abbreviation:"RU"},{name:"Rwanda",abbreviation:"RW"},{name:"Réunion",abbreviation:"RE"},{name:"Saint Barthélemy",abbreviation:"BL"},{name:"Saint Helena",abbreviation:"SH"},{name:"Saint Kitts and Nevis",abbreviation:"KN"},{name:"Saint Lucia",abbreviation:"LC"},{name:"Saint Martin",abbreviation:"MF"},{name:"Saint Pierre and Miquelon",abbreviation:"PM"},{name:"Saint Vincent and the Grenadines",abbreviation:"VC"},{name:"Samoa",abbreviation:"WS"},{name:"San Marino",abbreviation:"SM"},{name:"Saudi Arabia",abbreviation:"SA"},{name:"Senegal",abbreviation:"SN"},{name:"Serbia",abbreviation:"RS"},{name:"Serbia and Montenegro",abbreviation:"CS"},{name:"Seychelles",abbreviation:"SC"},{name:"Sierra Leone",abbreviation:"SL"},{name:"Singapore",abbreviation:"SG"},{name:"Slovakia",abbreviation:"SK"},{name:"Slovenia",abbreviation:"SI"},{name:"Solomon Islands",abbreviation:"SB"},{name:"Somalia",abbreviation:"SO"},{name:"South Africa",abbreviation:"ZA"},{name:"South Georgia and the South Sandwich Islands",abbreviation:"GS"},{name:"South Korea",abbreviation:"KR"},{name:"Spain",abbreviation:"ES"},{name:"Sri Lanka",abbreviation:"LK"},{name:"Sudan",abbreviation:"SD"},{name:"Suriname",abbreviation:"SR"},{name:"Svalbard and Jan Mayen",abbreviation:"SJ"},{name:"Swaziland",abbreviation:"SZ"},{name:"Sweden",abbreviation:"SE"},{name:"Switzerland",abbreviation:"CH"},{name:"Syria",abbreviation:"SY"},{name:"São Tomé and Príncipe",abbreviation:"ST"},{name:"Taiwan",abbreviation:"TW"},{name:"Tajikistan",abbreviation:"TJ"},{name:"Tanzania",abbreviation:"TZ"},{name:"Thailand",abbreviation:"TH"},{name:"Timor-Leste",abbreviation:"TL"},{name:"Togo",abbreviation:"TG"},{name:"Tokelau",abbreviation:"TK"},{name:"Tonga",abbreviation:"TO"},{name:"Trinidad and Tobago",abbreviation:"TT"},{name:"Tunisia",abbreviation:"TN"},{name:"Turkey",abbreviation:"TR"},{name:"Turkmenistan",abbreviation:"TM"},{name:"Turks and Caicos Islands",abbreviation:"TC"},{name:"Tuvalu",abbreviation:"TV"},{name:"U.S. Minor Outlying Islands",abbreviation:"UM"},{name:"U.S. Miscellaneous Pacific Islands",abbreviation:"PU"},{name:"U.S. Virgin Islands",abbreviation:"VI"},{name:"Uganda",abbreviation:"UG"},{name:"Ukraine",abbreviation:"UA"},{name:"Union of Soviet Socialist Republics",abbreviation:"SU"},{name:"United Arab Emirates",abbreviation:"AE"},{name:"United Kingdom",abbreviation:"GB"},{name:"United States",abbreviation:"US"},{name:"Unknown or Invalid Region",abbreviation:"ZZ"},{name:"Uruguay",abbreviation:"UY"},{name:"Uzbekistan",abbreviation:"UZ"},{name:"Vanuatu",abbreviation:"VU"},{name:"Vatican City",abbreviation:"VA"},{name:"Venezuela",abbreviation:"VE"},{name:"Vietnam",abbreviation:"VN"},{name:"Wake Island",abbreviation:"WK"},{name:"Wallis and Futuna",abbreviation:"WF"},{name:"Western Sahara",abbreviation:"EH"},{name:"Yemen",abbreviation:"YE"},{name:"Zambia",abbreviation:"ZM"},{name:"Zimbabwe",abbreviation:"ZW"},{name:"Åland Islands",abbreviation:"AX"}],provinces:[{name:"Alberta",abbreviation:"AB"},{name:"British Columbia",abbreviation:"BC"},{name:"Manitoba",abbreviation:"MB"},{name:"New Brunswick",abbreviation:"NB"},{name:"Newfoundland and Labrador",abbreviation:"NL"},{name:"Nova Scotia",abbreviation:"NS"},{name:"Ontario",abbreviation:"ON"},{name:"Prince Edward Island",abbreviation:"PE"},{name:"Quebec",abbreviation:"QC"},{name:"Saskatchewan",abbreviation:"SK"},{name:"Northwest Territories",abbreviation:"NT"},{name:"Nunavut",abbreviation:"NU"},{name:"Yukon",abbreviation:"YT"}],us_states_and_dc:[{name:"Alabama",abbreviation:"AL"},{name:"Alaska",abbreviation:"AK"},{name:"Arizona",abbreviation:"AZ"},{name:"Arkansas",abbreviation:"AR"},{name:"California",abbreviation:"CA"},{name:"Colorado",abbreviation:"CO"},{name:"Connecticut",abbreviation:"CT"},{name:"Delaware",abbreviation:"DE"},{name:"District of Columbia",abbreviation:"DC"},{name:"Florida",abbreviation:"FL"},{name:"Georgia",abbreviation:"GA"},{name:"Hawaii",abbreviation:"HI"},{name:"Idaho",abbreviation:"ID"},{name:"Illinois",abbreviation:"IL"},{name:"Indiana",abbreviation:"IN"},{name:"Iowa",abbreviation:"IA"},{name:"Kansas",abbreviation:"KS"},{name:"Kentucky",abbreviation:"KY"},{name:"Louisiana",abbreviation:"LA"},{name:"Maine",abbreviation:"ME"},{name:"Maryland",abbreviation:"MD"},{name:"Massachusetts",abbreviation:"MA"},{name:"Michigan",abbreviation:"MI"},{name:"Minnesota",abbreviation:"MN"},{name:"Mississippi",abbreviation:"MS"},{name:"Missouri",abbreviation:"MO"},{name:"Montana",abbreviation:"MT"},{name:"Nebraska",abbreviation:"NE"},{name:"Nevada",abbreviation:"NV"},{name:"New Hampshire",abbreviation:"NH"},{name:"New Jersey",abbreviation:"NJ"},{name:"New Mexico",abbreviation:"NM"},{name:"New York",abbreviation:"NY"},{name:"North Carolina",abbreviation:"NC"},{name:"North Dakota",abbreviation:"ND"},{name:"Ohio",abbreviation:"OH"},{name:"Oklahoma",abbreviation:"OK"},{name:"Oregon",abbreviation:"OR"},{name:"Pennsylvania",abbreviation:"PA"},{name:"Rhode Island",abbreviation:"RI"},{name:"South Carolina",abbreviation:"SC"},{name:"South Dakota",abbreviation:"SD"},{name:"Tennessee",abbreviation:"TN"},{name:"Texas",abbreviation:"TX"},{name:"Utah",abbreviation:"UT"},{name:"Vermont",abbreviation:"VT"},{name:"Virginia",abbreviation:"VA"},{name:"Washington",abbreviation:"WA"},{name:"West Virginia",abbreviation:"WV"},{name:"Wisconsin",abbreviation:"WI"},{name:"Wyoming",abbreviation:"WY"}],territories:[{name:"American Samoa",abbreviation:"AS"},{name:"Federated States of Micronesia",abbreviation:"FM"},{name:"Guam",abbreviation:"GU"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Virgin Islands, U.S.",abbreviation:"VI"}],armed_forces:[{name:"Armed Forces Europe",abbreviation:"AE"},{name:"Armed Forces Pacific",abbreviation:"AP"},{name:"Armed Forces the Americas",abbreviation:"AA"}],street_suffixes:[{name:"Avenue",abbreviation:"Ave"},{name:"Boulevard",abbreviation:"Blvd"},{name:"Center",abbreviation:"Ctr"},{name:"Circle",abbreviation:"Cir"},{name:"Court",abbreviation:"Ct"},{name:"Drive",abbreviation:"Dr"},{name:"Extension",abbreviation:"Ext"},{name:"Glen",abbreviation:"Gln"},{name:"Grove",abbreviation:"Grv"},{name:"Heights",abbreviation:"Hts"},{name:"Highway",abbreviation:"Hwy"},{name:"Junction",abbreviation:"Jct"},{name:"Key",abbreviation:"Key"},{name:"Lane",abbreviation:"Ln"},{name:"Loop",abbreviation:"Loop"},{name:"Manor",abbreviation:"Mnr"},{name:"Mill",abbreviation:"Mill"},{name:"Park",abbreviation:"Park"},{name:"Parkway",abbreviation:"Pkwy"},{name:"Pass",abbreviation:"Pass"},{name:"Path",abbreviation:"Path"},{name:"Pike",abbreviation:"Pike"},{name:"Place",abbreviation:"Pl"},{name:"Plaza",abbreviation:"Plz"},{name:"Point",abbreviation:"Pt"},{name:"Ridge",abbreviation:"Rdg"},{name:"River",abbreviation:"Riv"},{name:"Road",abbreviation:"Rd"},{name:"Square",abbreviation:"Sq"},{name:"Street",abbreviation:"St"},{name:"Terrace",abbreviation:"Ter"},{name:"Trail",abbreviation:"Trl"},{name:"Turnpike",abbreviation:"Tpke"},{name:"View",abbreviation:"Vw"},{name:"Way",abbreviation:"Way"}],months:[{name:"January",short_name:"Jan",numeric:"01",days:31},{name:"February",short_name:"Feb",numeric:"02",days:28},{name:"March",short_name:"Mar",numeric:"03",days:31},{name:"April",short_name:"Apr",numeric:"04",days:30},{name:"May",short_name:"May",numeric:"05",days:31},{name:"June",short_name:"Jun",numeric:"06",days:30},{name:"July",short_name:"Jul",numeric:"07",days:31},{name:"August",short_name:"Aug",numeric:"08",days:31},{name:"September",short_name:"Sep",numeric:"09",days:30},{name:"October",short_name:"Oct",numeric:"10",days:31},{name:"November",short_name:"Nov",numeric:"11",days:30},{name:"December",short_name:"Dec",numeric:"12",days:31}],cc_types:[{name:"American Express",short_name:"amex",prefix:"34",length:15},{name:"Bankcard",short_name:"bankcard",prefix:"5610",length:16},{name:"China UnionPay",short_name:"chinaunion",prefix:"62",length:16},{name:"Diners Club Carte Blanche",short_name:"dccarte",prefix:"300",length:14},{name:"Diners Club enRoute",short_name:"dcenroute",prefix:"2014",length:15},{name:"Diners Club International",short_name:"dcintl",prefix:"36",length:14},{name:"Diners Club United States & Canada",short_name:"dcusc",prefix:"54",length:16},{name:"Discover Card",short_name:"discover",prefix:"6011",length:16},{name:"InstaPayment",short_name:"instapay",prefix:"637",length:16},{name:"JCB",short_name:"jcb",prefix:"3528",length:16},{name:"Laser",short_name:"laser",prefix:"6304",length:16},{name:"Maestro",short_name:"maestro",prefix:"5018",length:16},{name:"Mastercard",short_name:"mc",prefix:"51",length:16},{name:"Solo",short_name:"solo",prefix:"6334",length:16},{name:"Switch",short_name:"switch",prefix:"4903",length:16},{name:"Visa",short_name:"visa",prefix:"4",length:16},{name:"Visa Electron",short_name:"electron",prefix:"4026",length:16}],currency_types:[{code:"AED",name:"United Arab Emirates Dirham"},{code:"AFN",name:"Afghanistan Afghani"},{code:"ALL",name:"Albania Lek"},{code:"AMD",name:"Armenia Dram"},{code:"ANG",name:"Netherlands Antilles Guilder"},{code:"AOA",name:"Angola Kwanza"},{code:"ARS",name:"Argentina Peso"},{code:"AUD",name:"Australia Dollar"},{code:"AWG",name:"Aruba Guilder"},{code:"AZN",name:"Azerbaijan New Manat"},{code:"BAM",name:"Bosnia and Herzegovina Convertible Marka"},{code:"BBD",name:"Barbados Dollar"},{code:"BDT",name:"Bangladesh Taka"},{code:"BGN",name:"Bulgaria Lev"},{code:"BHD",name:"Bahrain Dinar"},{code:"BIF",name:"Burundi Franc"},{code:"BMD",name:"Bermuda Dollar"},{code:"BND",name:"Brunei Darussalam Dollar"},{code:"BOB",name:"Bolivia Boliviano"},{code:"BRL",name:"Brazil Real"},{code:"BSD",name:"Bahamas Dollar"},{code:"BTN",name:"Bhutan Ngultrum"},{code:"BWP",name:"Botswana Pula"},{code:"BYR",name:"Belarus Ruble"},{code:"BZD",name:"Belize Dollar"},{code:"CAD",name:"Canada Dollar"},{code:"CDF",name:"Congo/Kinshasa Franc"},{code:"CHF",name:"Switzerland Franc"},{code:"CLP",name:"Chile Peso"},{code:"CNY",name:"China Yuan Renminbi"},{code:"COP",name:"Colombia Peso"},{code:"CRC",name:"Costa Rica Colon"},{code:"CUC",name:"Cuba Convertible Peso"},{code:"CUP",name:"Cuba Peso"},{code:"CVE",name:"Cape Verde Escudo"},{code:"CZK",name:"Czech Republic Koruna"},{code:"DJF",name:"Djibouti Franc"},{code:"DKK",name:"Denmark Krone"},{code:"DOP",name:"Dominican Republic Peso" +},{code:"DZD",name:"Algeria Dinar"},{code:"EGP",name:"Egypt Pound"},{code:"ERN",name:"Eritrea Nakfa"},{code:"ETB",name:"Ethiopia Birr"},{code:"EUR",name:"Euro Member Countries"},{code:"FJD",name:"Fiji Dollar"},{code:"FKP",name:"Falkland Islands (Malvinas) Pound"},{code:"GBP",name:"United Kingdom Pound"},{code:"GEL",name:"Georgia Lari"},{code:"GGP",name:"Guernsey Pound"},{code:"GHS",name:"Ghana Cedi"},{code:"GIP",name:"Gibraltar Pound"},{code:"GMD",name:"Gambia Dalasi"},{code:"GNF",name:"Guinea Franc"},{code:"GTQ",name:"Guatemala Quetzal"},{code:"GYD",name:"Guyana Dollar"},{code:"HKD",name:"Hong Kong Dollar"},{code:"HNL",name:"Honduras Lempira"},{code:"HRK",name:"Croatia Kuna"},{code:"HTG",name:"Haiti Gourde"},{code:"HUF",name:"Hungary Forint"},{code:"IDR",name:"Indonesia Rupiah"},{code:"ILS",name:"Israel Shekel"},{code:"IMP",name:"Isle of Man Pound"},{code:"INR",name:"India Rupee"},{code:"IQD",name:"Iraq Dinar"},{code:"IRR",name:"Iran Rial"},{code:"ISK",name:"Iceland Krona"},{code:"JEP",name:"Jersey Pound"},{code:"JMD",name:"Jamaica Dollar"},{code:"JOD",name:"Jordan Dinar"},{code:"JPY",name:"Japan Yen"},{code:"KES",name:"Kenya Shilling"},{code:"KGS",name:"Kyrgyzstan Som"},{code:"KHR",name:"Cambodia Riel"},{code:"KMF",name:"Comoros Franc"},{code:"KPW",name:"Korea (North) Won"},{code:"KRW",name:"Korea (South) Won"},{code:"KWD",name:"Kuwait Dinar"},{code:"KYD",name:"Cayman Islands Dollar"},{code:"KZT",name:"Kazakhstan Tenge"},{code:"LAK",name:"Laos Kip"},{code:"LBP",name:"Lebanon Pound"},{code:"LKR",name:"Sri Lanka Rupee"},{code:"LRD",name:"Liberia Dollar"},{code:"LSL",name:"Lesotho Loti"},{code:"LTL",name:"Lithuania Litas"},{code:"LYD",name:"Libya Dinar"},{code:"MAD",name:"Morocco Dirham"},{code:"MDL",name:"Moldova Leu"},{code:"MGA",name:"Madagascar Ariary"},{code:"MKD",name:"Macedonia Denar"},{code:"MMK",name:"Myanmar (Burma) Kyat"},{code:"MNT",name:"Mongolia Tughrik"},{code:"MOP",name:"Macau Pataca"},{code:"MRO",name:"Mauritania Ouguiya"},{code:"MUR",name:"Mauritius Rupee"},{code:"MVR",name:"Maldives (Maldive Islands) Rufiyaa"},{code:"MWK",name:"Malawi Kwacha"},{code:"MXN",name:"Mexico Peso"},{code:"MYR",name:"Malaysia Ringgit"},{code:"MZN",name:"Mozambique Metical"},{code:"NAD",name:"Namibia Dollar"},{code:"NGN",name:"Nigeria Naira"},{code:"NIO",name:"Nicaragua Cordoba"},{code:"NOK",name:"Norway Krone"},{code:"NPR",name:"Nepal Rupee"},{code:"NZD",name:"New Zealand Dollar"},{code:"OMR",name:"Oman Rial"},{code:"PAB",name:"Panama Balboa"},{code:"PEN",name:"Peru Nuevo Sol"},{code:"PGK",name:"Papua New Guinea Kina"},{code:"PHP",name:"Philippines Peso"},{code:"PKR",name:"Pakistan Rupee"},{code:"PLN",name:"Poland Zloty"},{code:"PYG",name:"Paraguay Guarani"},{code:"QAR",name:"Qatar Riyal"},{code:"RON",name:"Romania New Leu"},{code:"RSD",name:"Serbia Dinar"},{code:"RUB",name:"Russia Ruble"},{code:"RWF",name:"Rwanda Franc"},{code:"SAR",name:"Saudi Arabia Riyal"},{code:"SBD",name:"Solomon Islands Dollar"},{code:"SCR",name:"Seychelles Rupee"},{code:"SDG",name:"Sudan Pound"},{code:"SEK",name:"Sweden Krona"},{code:"SGD",name:"Singapore Dollar"},{code:"SHP",name:"Saint Helena Pound"},{code:"SLL",name:"Sierra Leone Leone"},{code:"SOS",name:"Somalia Shilling"},{code:"SPL",name:"Seborga Luigino"},{code:"SRD",name:"Suriname Dollar"},{code:"STD",name:"São Tomé and Príncipe Dobra"},{code:"SVC",name:"El Salvador Colon"},{code:"SYP",name:"Syria Pound"},{code:"SZL",name:"Swaziland Lilangeni"},{code:"THB",name:"Thailand Baht"},{code:"TJS",name:"Tajikistan Somoni"},{code:"TMT",name:"Turkmenistan Manat"},{code:"TND",name:"Tunisia Dinar"},{code:"TOP",name:"Tonga Pa'anga"},{code:"TRY",name:"Turkey Lira"},{code:"TTD",name:"Trinidad and Tobago Dollar"},{code:"TVD",name:"Tuvalu Dollar"},{code:"TWD",name:"Taiwan New Dollar"},{code:"TZS",name:"Tanzania Shilling"},{code:"UAH",name:"Ukraine Hryvnia"},{code:"UGX",name:"Uganda Shilling"},{code:"USD",name:"United States Dollar"},{code:"UYU",name:"Uruguay Peso"},{code:"UZS",name:"Uzbekistan Som"},{code:"VEF",name:"Venezuela Bolivar"},{code:"VND",name:"Viet Nam Dong"},{code:"VUV",name:"Vanuatu Vatu"},{code:"WST",name:"Samoa Tala"},{code:"XAF",name:"Communauté Financière Africaine (BEAC) CFA Franc BEAC"},{code:"XCD",name:"East Caribbean Dollar"},{code:"XDR",name:"International Monetary Fund (IMF) Special Drawing Rights"},{code:"XOF",name:"Communauté Financière Africaine (BCEAO) Franc"},{code:"XPF",name:"Comptoirs Français du Pacifique (CFP) Franc"},{code:"YER",name:"Yemen Rial"},{code:"ZAR",name:"South Africa Rand"},{code:"ZMW",name:"Zambia Kwacha"},{code:"ZWD",name:"Zimbabwe Dollar"}]},v=Object.prototype.hasOwnProperty,j=Object.keys||function(e){var t=[];for(var a in e)v.call(e,a)&&t.push(a);return t};n.prototype.get=function(e){return m(b[e])},n.prototype.mac_address=function(e){e=r(e),e.separator||(e.separator=e.networkVersion?".":":");var t="ABCDEF1234567890",a="";return a=e.networkVersion?this.n(this.string,3,{pool:t,length:4}).join(e.separator):this.n(this.string,6,{pool:t,length:2}).join(e.separator)},n.prototype.normal=function(e){e=r(e,{mean:0,dev:1});var t,a,i,n,s=e.mean,o=e.dev;do a=2*this.random()-1,i=2*this.random()-1,t=a*a+i*i;while(t>=1);return n=a*Math.sqrt(-2*Math.log(t)/t),o*n+s},n.prototype.radio=function(e){e=r(e,{side:"?"});var t="";switch(e.side.toLowerCase()){case"east":case"e":t="W";break;case"west":case"w":t="K";break;default:t=this.character({pool:"KW"})}return t+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})},n.prototype.set=function(e,t){"string"==typeof e?b[e]=t:b=m(e,b)},n.prototype.tv=function(e){return this.radio(e)},n.prototype.cnpj=function(){var e=this.n(this.natural,8,{max:9}),t=2+6*e[7]+7*e[6]+8*e[5]+9*e[4]+2*e[3]+3*e[2]+4*e[1]+5*e[0];t=11-t%11,t>=10&&(t=0);var a=2*t+3+7*e[7]+8*e[6]+9*e[5]+2*e[4]+3*e[3]+4*e[2]+5*e[1]+6*e[0];return a=11-a%11,a>=10&&(a=0),""+e[0]+e[1]+"."+e[2]+e[3]+e[4]+"."+e[5]+e[6]+e[7]+"/0001-"+t+a},n.prototype.mersenne_twister=function(e){return new z(e)},n.prototype.blueimp_md5=function(){return new E};var z=function(e){void 0===e&&(e=Math.floor(Math.random()*Math.pow(10,13))),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(e)};z.prototype.init_genrand=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti>>30,this.mt[this.mti]=(1812433253*((4294901760&e)>>>16)<<16)+1812433253*(65535&e)+this.mti,this.mt[this.mti]>>>=0},z.prototype.init_by_array=function(e,t){var a,i,n=1,r=0;for(this.init_genrand(19650218),a=this.N>t?this.N:t;a;a--)i=this.mt[n-1]^this.mt[n-1]>>>30,this.mt[n]=(this.mt[n]^(1664525*((4294901760&i)>>>16)<<16)+1664525*(65535&i))+e[r]+r,this.mt[n]>>>=0,n++,r++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1),r>=t&&(r=0);for(a=this.N-1;a;a--)i=this.mt[n-1]^this.mt[n-1]>>>30,this.mt[n]=(this.mt[n]^(1566083941*((4294901760&i)>>>16)<<16)+1566083941*(65535&i))-n,this.mt[n]>>>=0,n++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1);this.mt[0]=2147483648},z.prototype.genrand_int32=function(){var e,t=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var a;for(this.mti===this.N+1&&this.init_genrand(5489),a=0;a>>1^t[1&e];for(;a>>1^t[1&e];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^t[1&e],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0},z.prototype.genrand_int31=function(){return this.genrand_int32()>>>1},z.prototype.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},z.prototype.random=function(){return this.genrand_int32()*(1/4294967296)},z.prototype.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},z.prototype.genrand_res53=function(){var e=this.genrand_int32()>>>5,t=this.genrand_int32()>>>6;return(67108864*e+t)*(1/9007199254740992)};var E=function(){};E.prototype.VERSION="1.0.1",E.prototype.safe_add=function(e,t){var a=(65535&e)+(65535&t),i=(e>>16)+(t>>16)+(a>>16);return i<<16|65535&a},E.prototype.bit_roll=function(e,t){return e<>>32-t},E.prototype.md5_cmn=function(e,t,a,i,n,r){return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(t,e),this.safe_add(i,r)),n),a)},E.prototype.md5_ff=function(e,t,a,i,n,r,s){return this.md5_cmn(t&a|~t&i,e,t,n,r,s)},E.prototype.md5_gg=function(e,t,a,i,n,r,s){return this.md5_cmn(t&i|a&~i,e,t,n,r,s)},E.prototype.md5_hh=function(e,t,a,i,n,r,s){return this.md5_cmn(t^a^i,e,t,n,r,s)},E.prototype.md5_ii=function(e,t,a,i,n,r,s){return this.md5_cmn(a^(t|~i),e,t,n,r,s)},E.prototype.binl_md5=function(e,t){e[t>>5]|=128<>>9<<4)+14]=t;var a,i,n,r,s,o=1732584193,c=-271733879,u=-1732584194,m=271733878;for(a=0;a>5]>>>t%32&255);return a},E.prototype.rstr2binl=function(e){var t,a=[];for(a[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<16&&(n=this.binl_md5(n,8*e.length)),a=0;16>a;a+=1)r[a]=909522486^n[a],s[a]=1549556828^n[a];return i=this.binl_md5(r.concat(this.rstr2binl(t)),512+8*t.length),this.binl2rstr(this.binl_md5(s.concat(i),640))},E.prototype.rstr2hex=function(e){var t,a,i="0123456789abcdef",n="";for(a=0;a>>4&15)+i.charAt(15&t);return n},E.prototype.str2rstr_utf8=function(e){return unescape(encodeURIComponent(e))},E.prototype.raw_md5=function(e){return this.rstr_md5(this.str2rstr_utf8(e))},E.prototype.hex_md5=function(e){return this.rstr2hex(this.raw_md5(e))},E.prototype.raw_hmac_md5=function(e,t){return this.rstr_hmac_md5(this.str2rstr_utf8(e),this.str2rstr_utf8(t))},E.prototype.hex_hmac_md5=function(e,t){return this.rstr2hex(this.raw_hmac_md5(e,t))},E.prototype.md5=function(e,t,a){return t?a?this.raw_hmac_md5(t,e):this.hex_hmac_md5(t,e):a?this.raw_md5(e):this.hex_md5(e)},"undefined"!=typeof i&&("undefined"!=typeof a&&a.exports&&(i=a.exports=n),i.Chance=n),"function"==typeof e&&e.amd&&e([],function(){return n}),"undefined"!=typeof importScripts&&(chance=new n),"object"==typeof window&&"object"==typeof window.document&&(window.Chance=n,window.chance=new n)}()}).call(this,t("buffer").Buffer)},{buffer:15}],18:[function(e,t,a){function i(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function n(){var e=arguments,t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+a.humanize(this.diff),!t)return e;var i="color: "+this.color;e=[e[0],i,"color: inherit"].concat(Array.prototype.slice.call(e,1));var n=0,r=0;return e[0].replace(/%[a-z%]/g,function(e){"%%"!==e&&(n++,"%c"===e&&(r=n))}),e.splice(r,0,i),e}function r(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(e){try{null==e?a.storage.removeItem("debug"):a.storage.debug=e}catch(t){}}function o(){var e;try{e=a.storage.debug}catch(t){}return e}function c(){try{return window.localStorage}catch(e){}}a=t.exports=e("./debug"),a.log=r,a.formatArgs=n,a.save=s,a.load=o,a.useColors=i,a.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:c(),a.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],a.formatters.j=function(e){return JSON.stringify(e)},a.enable(o())},{"./debug":19}],19:[function(e,t,a){function i(){return a.colors[m++%a.colors.length]}function n(e){function t(){}function n(){var e=n,t=+new Date,r=t-(u||t);e.diff=r,e.prev=u,e.curr=t,u=t,null==e.useColors&&(e.useColors=a.useColors()),null==e.color&&e.useColors&&(e.color=i());var s=Array.prototype.slice.call(arguments);s[0]=a.coerce(s[0]),"string"!=typeof s[0]&&(s=["%o"].concat(s));var o=0;s[0]=s[0].replace(/%([a-z%])/g,function(t,i){if("%%"===t)return t;o++;var n=a.formatters[i];if("function"==typeof n){var r=s[o];t=n.call(e,r),s.splice(o,1),o--}return t}),"function"==typeof a.formatArgs&&(s=a.formatArgs.apply(e,s));var c=n.log||a.log||console.log.bind(console);c.apply(e,s)}t.enabled=!1,n.enabled=!0;var r=a.enabled(e)?n:t;return r.namespace=e,r}function r(e){a.save(e);for(var t=(e||"").split(/[\s,]+/),i=t.length,n=0;i>n;n++)t[n]&&(e=t[n].replace(/\*/g,".*?"),"-"===e[0]?a.skips.push(new RegExp("^"+e.substr(1)+"$")):a.names.push(new RegExp("^"+e+"$")))}function s(){a.enable("")}function o(e){var t,i;for(t=0,i=a.skips.length;i>t;t++)if(a.skips[t].test(e))return!1;for(t=0,i=a.names.length;i>t;t++)if(a.names[t].test(e))return!0;return!1}function c(e){return e instanceof Error?e.stack||e.message:e}a=t.exports=n,a.coerce=c,a.disable=s,a.enable=r,a.enabled=o,a.humanize=e("ms"),a.names=[],a.skips=[],a.formatters={};var u,m=0},{ms:156}],20:[function(e,t,a){(function(e){"use strict";function a(t){return t instanceof e||t instanceof Date||t instanceof RegExp?!0:!1}function i(t){if(t instanceof e){var a=new e(t.length);return t.copy(a),a}if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return new RegExp(t);throw new Error("Unexpected situation")}function n(e){var t=[];return e.forEach(function(e,s){"object"==typeof e&&null!==e?Array.isArray(e)?t[s]=n(e):a(e)?t[s]=i(e):t[s]=r({},e):t[s]=e}),t}var r=t.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,s=arguments[0],o=Array.prototype.slice.call(arguments,1);return o.forEach(function(o){"object"!=typeof o||Array.isArray(o)||Object.keys(o).forEach(function(c){return t=s[c],e=o[c],e===s?void 0:"object"!=typeof e||null===e?void(s[c]=e):Array.isArray(e)?void(s[c]=n(e)):a(e)?void(s[c]=i(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(s[c]=r({},e)):void(s[c]=r(t,e))})}),s}}).call(this,e("buffer").Buffer)},{buffer:15}],21:[function(e,t,a){"use strict";var i=e("./util/uri-helpers");i.findByRef=e("./util/find-reference"),i.resolveSchema=e("./util/resolve-schema"),i.normalizeSchema=e("./util/normalize-schema");var n=t.exports=function(){function e(t,a,n,r){function s(a){if("string"==typeof a.id){var n=i.resolveURL(t,a.id).replace(/\/#?$/,"");if(n.indexOf("#")>-1){var r=n.split("#");n="/"===r[1].charAt()?r[0]:r[1]||r[0]}e.refs[n]||(e.refs[n]=a)}}if("object"==typeof t&&(r=n,n=a,a=t,t=void 0),"object"!=typeof a)throw new Error("schema must be an object");if("object"==typeof n&&null!==n){var o=n;n=[];for(var c in o)o[c].id=o[c].id||c,n.push(o[c])}return"undefined"==typeof n||Array.isArray(n)||(r=!!n,n=[]),(n||[]).concat([a]).forEach(function(e){a=i.normalizeSchema(t,e,s),s(a)}),i.resolveSchema(a,e.refs,r)}return e.refs={},e.util=i,e};n.util=i},{"./util/find-reference":23,"./util/normalize-schema":24,"./util/resolve-schema":25,"./util/uri-helpers":26}],22:[function(e,t,a){"use strict";var i=t.exports=function(e,t){function a(e,a){n[e]=i(a,t)}if(t=t||[],t.indexOf(e)>-1)throw new Error("unable dereference circular structures");if(!e||"object"!=typeof e)return e;t=t.concat([e]);var n=Array.isArray(e)?[]:{};return Array.isArray(n)?e.forEach(function(e,t){a(t,e)}):"[object Object]"===Object.prototype.toString.call(e)&&Object.keys(e).forEach(function(t){a(t,e[t])}),n}},{}],23:[function(e,t,a){"use strict";function i(e,t){for(var a=t.split("#")[1],i=a.split("/").slice(1);i.length;){var n=decodeURIComponent(i.shift()).replace(/~1/g,"/").replace(/~0/g,"~");if("undefined"==typeof e[n])throw new Error("JSON pointer not found: "+t);e=e[n]}return e}var n=e("./uri-helpers"),r=t.exports=function(e,t){var a=t[e]||t[e.split("#")[1]]||t[n.getDocumentURI(e)];if(a)a=e.indexOf("#/")>-1?i(a,e):a;else for(var s in t)if(n.resolveURL(t[s].id,e)===t[s].id){a=t[s];break}if(!a)throw new Error("Reference not found: "+e);for(;a.$ref;)a=r(a.$ref,t);return a}},{"./uri-helpers":26}],24:[function(e,t,a){"use strict";function i(e,t,a){if(e){var r="string"==typeof e.id?e.id:"#";n.isURL(r)||(r=n.resolveURL(t===r?null:t,r)),"string"!=typeof e.$ref||n.isURL(e.$ref)||(e.$ref=n.resolveURL(r,e.$ref)),"string"==typeof e.id&&(e.id=t=r)}for(var s in e){var o=e[s];"object"==typeof o&&"enum"!==s&&"required"!==s&&i(o,t,a)}"function"==typeof a&&a(e)}var n=e("./uri-helpers"),r=e("./clone-obj"),s=["http://json-schema.org/schema#","http://json-schema.org/draft-04/schema#"];t.exports=function(e,t,a){"object"==typeof e&&(a=t,t=e,e=null);var o=e||"",c=r(t);if(c.$schema&&-1===s.indexOf(c.$schema))throw new Error("Unsupported schema version (v4 only)");return o=n.resolveURL(c.$schema||s[0],o),i(c,n.resolveURL(c.id||"#",o),a),c.id=c.id||o,c}},{"./clone-obj":22,"./uri-helpers":26}],25:[function(e,t,a){"use strict";function i(e){return"enum"===e||"required"===e||"definitions"===e}function n(e,t,a,c){var u=Array.isArray(e)?[]:{};if("string"==typeof e.$ref){var m=r.getDocumentURI(e.$ref);if(a!==m||c&&e.$ref.indexOf("#/")>-1){var f=s(e.$ref,t);o(e,f),delete e.$ref,delete e.id}}for(var p in e)"object"!=typeof e[p]||i(p)?u[p]=e[p]:u[p]=n(e[p],t,a,c);return u}var r=e("./uri-helpers"),s=e("./find-reference"),o=e("deep-extend");t.exports=function(e,t,a){var i=r.resolveURL(e.$schema,e.id),s=r.getDocumentURI(i);return n(e,t,s,a)}},{"./find-reference":23,"./uri-helpers":26,"deep-extend":20}],26:[function(e,t,a){"use strict";function i(e,t){e=e.replace(/^\.\//,"");var a=String(e).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@]*)(?::([^:@]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);if(!a)throw new RangeError;var n=a[0]||"",r=a[1]||"",s=a[2]||"",o=a[3]||"",c=a[4]||"",u=a[5]||"",m=a[6]||"",f=a[7]||"",p=a[8]||"",l=a[9]||"";if(void 0!==t){var h=new i(t),d=""===r&&""===c&&""===s;d&&""===f&&""===p&&(p=h.search),d&&"/"!==f.charAt(0)&&(f=""!==f?h.pathname.slice(0,h.pathname.lastIndexOf("/")+1)+f:h.pathname);var g=[];f.replace(/\/?[^\/]+/g,function(e){"/.."===e?g.pop():g.push(e)}),f=g.join("")||"/",d&&(m=h.port,u=h.hostname,c=h.host,o=h.password,s=h.username),""===r&&(r=h.protocol),n=r+(""!==c?"//":"")+(""!==s?s+(""!==o?":"+o:"")+"@":"")+c+f+p+l}this.href=n,this.origin=r+(""!==c?"//"+c:""),this.protocol=r,this.username=s,this.password=o,this.host=c,this.hostname=u,this.port=m,this.pathname=f,this.search=p,this.hash=l}function n(e){return"string"==typeof e&&/^\w+:\/\//.test(e)?!0:void 0}function r(e,t){return new i(e,t)}function s(e,t){return e=e||"http://json-schema.org/schema#",t=r(t,e),e=r(e),e.hash&&!t.hash?t.href+e.hash:t.href}function o(e){return"string"==typeof e&&e.split("#")[0]}t.exports={isURL:n,parseURI:r,resolveURL:s,getDocumentURI:o}},{}],27:[function(e,t,a){function i(e,t){this.low=e,this.high=t,this.length=1+t-e}function n(e,t){return this instanceof n?(this.ranges=[],this.length=0,void 0!==e&&this.add(e,t),void 0):new n(e,t)}function r(e){e.length=e.ranges.reduce(function(e,t){return e+t.length},0)}i.prototype.overlaps=function(e){return!(this.highe.high)},i.prototype.touches=function(e){return!(this.high+1e.high)},i.prototype.add=function(e){return this.touches(e)&&new i(Math.min(this.low,e.low),Math.max(this.high,e.high))},i.prototype.subtract=function(e){return this.overlaps(e)?e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.high=this.ranges.length?null:this.ranges[t].low+e},n.prototype.toString=function(){return"[ "+this.ranges.join(", ")+" ]"},n.prototype.clone=function(){return new n(this)},t.exports=n},{}],28:[function(e,t,a){function i(e){var t=e.fake,a=e.helpers;return this.zipCode=function(t){if("undefined"==typeof t){var i=e.definitions.address.postcode;t="string"==typeof i?i:e.random.arrayElement(i)}return a.replaceSymbols(t)},this.city=function(a){var i=["{{address.cityPrefix}} {{name.firstName}} {{address.citySuffix}}","{{address.cityPrefix}} {{name.firstName}}","{{name.firstName}} {{address.citySuffix}}","{{name.lastName}} {{address.citySuffix}}"];return"number"!=typeof a&&(a=e.random.number(i.length-1)),t(i[a])},this.cityPrefix=function(){return e.random.arrayElement(e.definitions.address.city_prefix)},this.citySuffix=function(){return e.random.arrayElement(e.definitions.address.city_suffix)},this.streetName=function(){var t,a=e.address.streetSuffix();switch(""!==a&&(a=" "+a),e.random.number(1)){case 0:t=e.name.lastName()+a;break;case 1:t=e.name.firstName()+a}return t},this.streetAddress=function(t){void 0===t&&(t=!1);var i="";switch(e.random.number(2)){case 0:i=a.replaceSymbolWithNumber("#####")+" "+e.address.streetName();break;case 1:i=a.replaceSymbolWithNumber("####")+" "+e.address.streetName();break;case 2:i=a.replaceSymbolWithNumber("###")+" "+e.address.streetName()}return t?i+" "+e.address.secondaryAddress():i},this.streetSuffix=function(){return e.random.arrayElement(e.definitions.address.street_suffix)},this.streetPrefix=function(){return e.random.arrayElement(e.definitions.address.street_prefix)},this.secondaryAddress=function(){return a.replaceSymbolWithNumber(e.random.arrayElement(["Apt. ###","Suite ###"]))},this.county=function(){return e.random.arrayElement(e.definitions.address.county)},this.country=function(){return e.random.arrayElement(e.definitions.address.country)},this.countryCode=function(){return e.random.arrayElement(e.definitions.address.country_code)},this.state=function(t){return e.random.arrayElement(e.definitions.address.state)},this.stateAbbr=function(){return e.random.arrayElement(e.definitions.address.state_abbr)},this.latitude=function(){return(e.random.number(18e5)/1e4-90).toFixed(4)},this.longitude=function(){return(e.random.number(36e5)/1e4-180).toFixed(4)},this}t.exports=i},{}],29:[function(e,t,a){var i=function(e){var t=this;return t.color=function(){return e.random.arrayElement(e.definitions.commerce.color)},t.department=function(t,a){return e.random.arrayElement(e.definitions.commerce.department)},t.productName=function(){return e.commerce.productAdjective()+" "+e.commerce.productMaterial()+" "+e.commerce.product()},t.price=function(e,t,a,i){return e=e||0,t=t||1e3,a=a||2,i=i||"",0>e||0>t?i+0:i+(Math.round((Math.random()*(t-e)+e)*Math.pow(10,a))/Math.pow(10,a)).toFixed(a)},t.productAdjective=function(){return e.random.arrayElement(e.definitions.commerce.product_name.adjective)},t.productMaterial=function(){return e.random.arrayElement(e.definitions.commerce.product_name.material)},t.product=function(){return e.random.arrayElement(e.definitions.commerce.product_name.product)},t};t.exports=i},{}],30:[function(e,t,a){var i=function(e){var t=e.fake;this.suffixes=function(){return e.definitions.company.suffix.slice(0)},this.companyName=function(a){var i=["{{name.lastName}} {{company.companySuffix}}","{{name.lastName}} - {{name.lastName}}","{{name.lastName}}, {{name.lastName}} and {{name.lastName}}"];return"number"!=typeof a&&(a=e.random.number(i.length-1)),t(i[a])},this.companySuffix=function(){return e.random.arrayElement(e.company.suffixes())},this.catchPhrase=function(){return t("{{company.catchPhraseAdjective}} {{company.catchPhraseDescriptor}} {{company.catchPhraseNoun}}")},this.bs=function(){return t("{{company.bsAdjective}} {{company.bsBuzz}} {{company.bsNoun}}")},this.catchPhraseAdjective=function(){return e.random.arrayElement(e.definitions.company.adjective)},this.catchPhraseDescriptor=function(){return e.random.arrayElement(e.definitions.company.descriptor)},this.catchPhraseNoun=function(){return e.random.arrayElement(e.definitions.company.noun)},this.bsAdjective=function(){return e.random.arrayElement(e.definitions.company.bs_adjective)},this.bsBuzz=function(){return e.random.arrayElement(e.definitions.company.bs_verb)},this.bsNoun=function(){return e.random.arrayElement(e.definitions.company.bs_noun)}};t.exports=i},{}],31:[function(e,t,a){var i=function(e){var t=this;return t.past=function(t,a){var i=a?new Date(Date.parse(a)):new Date,n={min:1e3,max:365*(t||1)*24*3600*1e3},r=i.getTime();return r-=e.random.number(n),i.setTime(r),i},t.future=function(t,a){var i=a?new Date(Date.parse(a)):new Date,n={min:1e3,max:365*(t||1)*24*3600*1e3},r=i.getTime();return r+=e.random.number(n),i.setTime(r),i},t.between=function(t,a){var i=Date.parse(t),n=e.random.number(Date.parse(a)-i),r=new Date(i+n);return r},t.recent=function(t){var a=new Date,i={min:1e3,max:24*(t||1)*3600*1e3},n=a.getTime();return n-=e.random.number(i),a.setTime(n),a},t.month=function(t){t=t||{};var a="wide";t.abbr&&(a="abbr"),t.context&&"undefined"!=typeof e.definitions.date.month[a+"_context"]&&(a+="_context");var i=e.definitions.date.month[a];return e.random.arrayElement(i)},t.weekday=function(t){t=t||{};var a="wide";t.abbr&&(a="abbr"),t.context&&"undefined"!=typeof e.definitions.date.weekday[a+"_context"]&&(a+="_context");var i=e.definitions.date.weekday[a];return e.random.arrayElement(i)},t};t.exports=i},{}],32:[function(e,t,a){function i(e){return this.fake=function t(a){var i="";if("string"!=typeof a||0===a.length)return i="string parameter is required!";var n=a.search("{{"),r=a.search("}}");if(-1===n&&-1===r)return a;var s=a.substr(n+2,r-n-2);s=s.replace("}}",""),s=s.replace("{{","");var o=s.split(".");if("undefined"==typeof e[o[0]])throw new Error("Invalid module: "+o[0]);if("undefined"==typeof e[o[0]][o[1]])throw new Error("Invalid method: "+o[0]+"."+o[1]);var c=e[o[0]][o[1]];return i=a.replace("{{"+s+"}}",c()),t(i)},this}t.exports=i},{}],33:[function(e,t,a){var i=function(e){var t=e.helpers,a=this;a.account=function(e){e=e||8;for(var a="",i=0;e>i;i++)a+="#";return e=null,t.replaceSymbolWithNumber(a)},a.accountName=function(){return[t.randomize(e.definitions.finance.account_type),"Account"].join(" ")},a.mask=function(e,a,i){e=0!=e&&e&&"undefined"!=typeof e?e:4,a=null===a?!0:a,i=null===i?!0:i;for(var n="",r=0;e>r;r++)n+="#";return n=i?["...",n].join(""):n,n=a?["(",n,")"].join(""):n,n=t.replaceSymbolWithNumber(n)},a.amount=function(e,t,a,i){return e=e||0,t=t||1e3,a=a||2,i=i||"",i+(Math.round((Math.random()*(t-e)+e)*Math.pow(10,a))/Math.pow(10,a)).toFixed(a)},a.transactionType=function(){return t.randomize(e.definitions.finance.transaction_type)},a.currencyCode=function(){return e.random.objectElement(e.definitions.finance.currency).code},a.currencyName=function(){return e.random.objectElement(e.definitions.finance.currency,"key")},a.currencySymbol=function(){for(var t;!t;)t=e.random.objectElement(e.definitions.finance.currency).symbol;return t}};t.exports=i},{}],34:[function(e,t,a){var i=function(e){var t=this;return t.abbreviation=function(){return e.random.arrayElement(e.definitions.hacker.abbreviation)},t.adjective=function(){return e.random.arrayElement(e.definitions.hacker.adjective)},t.noun=function(){return e.random.arrayElement(e.definitions.hacker.noun)},t.verb=function(){return e.random.arrayElement(e.definitions.hacker.verb)},t.ingverb=function(){return e.random.arrayElement(e.definitions.hacker.ingverb)},t.phrase=function(){var a={abbreviation:t.abbreviation(),adjective:t.adjective(),ingverb:t.ingverb(),noun:t.noun(),verb:t.verb()},i=e.random.arrayElement(["If we {{verb}} the {{noun}}, we can get to the {{abbreviation}} {{noun}} through the {{adjective}} {{abbreviation}} {{noun}}!","We need to {{verb}} the {{adjective}} {{abbreviation}} {{noun}}!","Try to {{verb}} the {{abbreviation}} {{noun}}, maybe it will {{verb}} the {{adjective}} {{noun}}!","You can't {{verb}} the {{noun}} without {{ingverb}} the {{adjective}} {{abbreviation}} {{noun}}!","Use the {{adjective}} {{abbreviation}} {{noun}}, then you can {{verb}} the {{adjective}} {{noun}}!","The {{abbreviation}} {{noun}} is down, {{verb}} the {{adjective}} {{noun}} so we can {{verb}} the {{abbreviation}} {{noun}}!","{{ingverb}} the {{noun}} won't do anything, we need to {{verb}} the {{adjective}} {{abbreviation}} {{noun}}!","I'll {{verb}} the {{adjective}} {{abbreviation}} {{noun}}, that should {{noun}} the {{abbreviation}} {{noun}}!"]); +return e.helpers.mustache(i,a)},t};t.exports=i},{}],35:[function(e,t,a){var i=function(e){var t=this;return t.randomize=function(t){return t=t||["a","b","c"],e.random.arrayElement(t)},t.slugify=function(e){return e=e||"",e.replace(/ /g,"-").replace(/[^\w\.\-]+/g,"")},t.replaceSymbolWithNumber=function(t,a){t=t||"",void 0===a&&(a="#");for(var i="",n=0;n?|\"])/gi,"").toLowerCase()},t.ip=function(){for(var t=function(){return e.random.number(255).toFixed(0)},a=[],i=0;4>i;i++)a[i]=t();return a.join(".")},t.userAgent=function(){return n.generate()},t.color=function(t,a,i){t=t||0,a=a||0,i=i||0;var n=Math.floor((e.random.number(256)+t)/2),r=Math.floor((e.random.number(256)+a)/2),s=Math.floor((e.random.number(256)+i)/2),o=n.toString(16),c=r.toString(16),u=s.toString(16);return"#"+(1===o.length?"0":"")+o+(1===c.length?"0":"")+c+(1===u.length?"0":"")+u},t.mac=function(){var e,t="";for(e=0;12>e;e++)t+=parseInt(16*Math.random()).toString(16),e%2==1&&11!=e&&(t+=":");return t},t.password=function(e,t,a,n){return e=e||15,"undefined"==typeof t&&(t=!1),i(e,t,a,n)}};t.exports=r},{"../vendor/password-generator.js":130,"../vendor/user-agent":131}],39:[function(e,t,a){t.exports=["#####","####","###"]},{}],40:[function(e,t,a){t.exports=["#{city_prefix} #{Name.first_name}#{city_suffix}","#{city_prefix} #{Name.first_name}","#{Name.first_name}#{city_suffix}","#{Name.last_name}#{city_suffix}"]},{}],41:[function(e,t,a){t.exports=["North","East","West","South","New","Lake","Port"]},{}],42:[function(e,t,a){t.exports=["town","ton","land","ville","berg","burgh","borough","bury","view","port","mouth","stad","furt","chester","mouth","fort","haven","side","shire"]},{}],43:[function(e,t,a){t.exports=["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica (the territory South of 60 deg S)","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island (Bouvetoya)","Brazil","British Indian Ocean Territory (Chagos Archipelago)","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Congo","Cook Islands","Costa Rica","Cote d'Ivoire","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Faroe Islands","Falkland Islands (Malvinas)","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and McDonald Islands","Holy See (Vatican City State)","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Democratic People's Republic of Korea","Republic of Korea","Kuwait","Kyrgyz Republic","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands Antilles","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Barthelemy","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Martin","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Slovakia (Slovak Republic)","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname","Svalbard & Jan Mayen Islands","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Taiwan","Tajikistan","Tanzania","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States of America","United States Minor Outlying Islands","Uruguay","Uzbekistan","Vanuatu","Venezuela","Vietnam","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"]},{}],44:[function(e,t,a){t.exports=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"]},{}],45:[function(e,t,a){t.exports=["Avon","Bedfordshire","Berkshire","Borders","Buckinghamshire","Cambridgeshire"]},{}],46:[function(e,t,a){t.exports=["United States of America"]},{}],47:[function(e,t,a){var i={};t.exports=i,i.city_prefix=e("./city_prefix"),i.city_suffix=e("./city_suffix"),i.county=e("./county"),i.country=e("./country"),i.country_code=e("./country_code"),i.building_number=e("./building_number"),i.street_suffix=e("./street_suffix"),i.secondary_address=e("./secondary_address"),i.postcode=e("./postcode"),i.postcode_by_state=e("./postcode_by_state"),i.state=e("./state"),i.state_abbr=e("./state_abbr"),i.time_zone=e("./time_zone"),i.city=e("./city"),i.street_name=e("./street_name"),i.street_address=e("./street_address"),i.default_country=e("./default_country")},{"./building_number":39,"./city":40,"./city_prefix":41,"./city_suffix":42,"./country":43,"./country_code":44,"./county":45,"./default_country":46,"./postcode":48,"./postcode_by_state":49,"./secondary_address":50,"./state":51,"./state_abbr":52,"./street_address":53,"./street_name":54,"./street_suffix":55,"./time_zone":56}],48:[function(e,t,a){t.exports=["#####","#####-####"]},{}],49:[function(e,t,a){arguments[4][48][0].apply(a,arguments)},{dup:48}],50:[function(e,t,a){t.exports=["Apt. ###","Suite ###"]},{}],51:[function(e,t,a){t.exports=["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]},{}],52:[function(e,t,a){t.exports=["AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"]},{}],53:[function(e,t,a){t.exports=["#{building_number} #{street_name}"]},{}],54:[function(e,t,a){t.exports=["#{Name.first_name} #{street_suffix}","#{Name.last_name} #{street_suffix}"]},{}],55:[function(e,t,a){t.exports=["Alley","Avenue","Branch","Bridge","Brook","Brooks","Burg","Burgs","Bypass","Camp","Canyon","Cape","Causeway","Center","Centers","Circle","Circles","Cliff","Cliffs","Club","Common","Corner","Corners","Course","Court","Courts","Cove","Coves","Creek","Crescent","Crest","Crossing","Crossroad","Curve","Dale","Dam","Divide","Drive","Drive","Drives","Estate","Estates","Expressway","Extension","Extensions","Fall","Falls","Ferry","Field","Fields","Flat","Flats","Ford","Fords","Forest","Forge","Forges","Fork","Forks","Fort","Freeway","Garden","Gardens","Gateway","Glen","Glens","Green","Greens","Grove","Groves","Harbor","Harbors","Haven","Heights","Highway","Hill","Hills","Hollow","Inlet","Inlet","Island","Island","Islands","Islands","Isle","Isle","Junction","Junctions","Key","Keys","Knoll","Knolls","Lake","Lakes","Land","Landing","Lane","Light","Lights","Loaf","Lock","Locks","Locks","Lodge","Lodge","Loop","Mall","Manor","Manors","Meadow","Meadows","Mews","Mill","Mills","Mission","Mission","Motorway","Mount","Mountain","Mountain","Mountains","Mountains","Neck","Orchard","Oval","Overpass","Park","Parks","Parkway","Parkways","Pass","Passage","Path","Pike","Pine","Pines","Place","Plain","Plains","Plains","Plaza","Plaza","Point","Points","Port","Port","Ports","Ports","Prairie","Prairie","Radial","Ramp","Ranch","Rapid","Rapids","Rest","Ridge","Ridges","River","Road","Road","Roads","Roads","Route","Row","Rue","Run","Shoal","Shoals","Shore","Shores","Skyway","Spring","Springs","Springs","Spur","Spurs","Square","Square","Squares","Squares","Station","Station","Stravenue","Stravenue","Stream","Stream","Street","Street","Streets","Summit","Summit","Terrace","Throughway","Trace","Track","Trafficway","Trail","Trail","Tunnel","Tunnel","Turnpike","Turnpike","Underpass","Union","Unions","Valley","Valleys","Via","Viaduct","View","Views","Village","Village","Villages","Ville","Vista","Vista","Walk","Walks","Wall","Way","Ways","Well","Wells"]},{}],56:[function(e,t,a){t.exports=["Pacific/Midway","Pacific/Pago_Pago","Pacific/Honolulu","America/Juneau","America/Los_Angeles","America/Tijuana","America/Denver","America/Phoenix","America/Chihuahua","America/Mazatlan","America/Chicago","America/Regina","America/Mexico_City","America/Mexico_City","America/Monterrey","America/Guatemala","America/New_York","America/Indiana/Indianapolis","America/Bogota","America/Lima","America/Lima","America/Halifax","America/Caracas","America/La_Paz","America/Santiago","America/St_Johns","America/Sao_Paulo","America/Argentina/Buenos_Aires","America/Guyana","America/Godthab","Atlantic/South_Georgia","Atlantic/Azores","Atlantic/Cape_Verde","Europe/Dublin","Europe/London","Europe/Lisbon","Europe/London","Africa/Casablanca","Africa/Monrovia","Etc/UTC","Europe/Belgrade","Europe/Bratislava","Europe/Budapest","Europe/Ljubljana","Europe/Prague","Europe/Sarajevo","Europe/Skopje","Europe/Warsaw","Europe/Zagreb","Europe/Brussels","Europe/Copenhagen","Europe/Madrid","Europe/Paris","Europe/Amsterdam","Europe/Berlin","Europe/Berlin","Europe/Rome","Europe/Stockholm","Europe/Vienna","Africa/Algiers","Europe/Bucharest","Africa/Cairo","Europe/Helsinki","Europe/Kiev","Europe/Riga","Europe/Sofia","Europe/Tallinn","Europe/Vilnius","Europe/Athens","Europe/Istanbul","Europe/Minsk","Asia/Jerusalem","Africa/Harare","Africa/Johannesburg","Europe/Moscow","Europe/Moscow","Europe/Moscow","Asia/Kuwait","Asia/Riyadh","Africa/Nairobi","Asia/Baghdad","Asia/Tehran","Asia/Muscat","Asia/Muscat","Asia/Baku","Asia/Tbilisi","Asia/Yerevan","Asia/Kabul","Asia/Yekaterinburg","Asia/Karachi","Asia/Karachi","Asia/Tashkent","Asia/Kolkata","Asia/Kolkata","Asia/Kolkata","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Dhaka","Asia/Colombo","Asia/Almaty","Asia/Novosibirsk","Asia/Rangoon","Asia/Bangkok","Asia/Bangkok","Asia/Jakarta","Asia/Krasnoyarsk","Asia/Shanghai","Asia/Chongqing","Asia/Hong_Kong","Asia/Urumqi","Asia/Kuala_Lumpur","Asia/Singapore","Asia/Taipei","Australia/Perth","Asia/Irkutsk","Asia/Ulaanbaatar","Asia/Seoul","Asia/Tokyo","Asia/Tokyo","Asia/Tokyo","Asia/Yakutsk","Australia/Darwin","Australia/Adelaide","Australia/Melbourne","Australia/Melbourne","Australia/Sydney","Australia/Brisbane","Australia/Hobart","Asia/Vladivostok","Pacific/Guam","Pacific/Port_Moresby","Asia/Magadan","Asia/Magadan","Pacific/Noumea","Pacific/Fiji","Asia/Kamchatka","Pacific/Majuro","Pacific/Auckland","Pacific/Auckland","Pacific/Tongatapu","Pacific/Fakaofo","Pacific/Apia"]},{}],57:[function(e,t,a){t.exports=["#{Name.name}","#{Company.name}"]},{}],58:[function(e,t,a){var i={};t.exports=i,i.name=e("./name"),i.version=e("./version"),i.author=e("./author")},{"./author":57,"./name":59,"./version":60}],59:[function(e,t,a){t.exports=["Redhold","Treeflex","Trippledex","Kanlam","Bigtax","Daltfresh","Toughjoyfax","Mat Lam Tam","Otcom","Tres-Zap","Y-Solowarm","Tresom","Voltsillam","Biodex","Greenlam","Viva","Matsoft","Temp","Zoolab","Subin","Rank","Job","Stringtough","Tin","It","Home Ing","Zamit","Sonsing","Konklab","Alpha","Latlux","Voyatouch","Alphazap","Holdlamis","Zaam-Dox","Sub-Ex","Quo Lux","Bamity","Ventosanzap","Lotstring","Hatity","Tempsoft","Overhold","Fixflex","Konklux","Zontrax","Tampflex","Span","Namfix","Transcof","Stim","Fix San","Sonair","Stronghold","Fintone","Y-find","Opela","Lotlux","Ronstring","Zathin","Duobam","Keylex"]},{}],60:[function(e,t,a){t.exports=["0.#.#","0.##","#.##","#.#","#.#.#"]},{}],61:[function(e,t,a){t.exports=["2011-10-12","2012-11-12","2015-11-11","2013-9-12"]},{}],62:[function(e,t,a){t.exports=["1234-2121-1221-1211","1212-1221-1121-1234","1211-1221-1234-2201","1228-1221-1221-1431"]},{}],63:[function(e,t,a){t.exports=["visa","mastercard","americanexpress","discover"]},{}],64:[function(e,t,a){var i={};t.exports=i,i.credit_card_numbers=e("./credit_card_numbers"),i.credit_card_expiry_dates=e("./credit_card_expiry_dates"),i.credit_card_types=e("./credit_card_types")},{"./credit_card_expiry_dates":61,"./credit_card_numbers":62,"./credit_card_types":63}],65:[function(e,t,a){t.exports=["###-###-####","(###) ###-####","1-###-###-####","###.###.####"]},{}],66:[function(e,t,a){var i={};t.exports=i,i.formats=e("./formats")},{"./formats":65}],67:[function(e,t,a){t.exports=["red","green","blue","yellow","purple","mint green","teal","white","black","orange","pink","grey","maroon","violet","turquoise","tan","sky blue","salmon","plum","orchid","olive","magenta","lime","ivory","indigo","gold","fuchsia","cyan","azure","lavender","silver"]},{}],68:[function(e,t,a){t.exports=["Books","Movies","Music","Games","Electronics","Computers","Home","Garden","Tools","Grocery","Health","Beauty","Toys","Kids","Baby","Clothing","Shoes","Jewelery","Sports","Outdoors","Automotive","Industrial"]},{}],69:[function(e,t,a){var i={};t.exports=i,i.color=e("./color"),i.department=e("./department"),i.product_name=e("./product_name")},{"./color":67,"./department":68,"./product_name":70}],70:[function(e,t,a){t.exports={adjective:["Small","Ergonomic","Rustic","Intelligent","Gorgeous","Incredible","Fantastic","Practical","Sleek","Awesome","Generic","Handcrafted","Handmade","Licensed","Refined","Unbranded","Tasty"],material:["Steel","Wooden","Concrete","Plastic","Cotton","Granite","Rubber","Metal","Soft","Fresh","Frozen"],product:["Chair","Car","Computer","Keyboard","Mouse","Bike","Ball","Gloves","Pants","Shirt","Table","Shoes","Hat","Towels","Soap","Tuna","Chicken","Fish","Cheese","Bacon","Pizza","Salad","Sausages","Chips"]}},{}],71:[function(e,t,a){t.exports=["Adaptive","Advanced","Ameliorated","Assimilated","Automated","Balanced","Business-focused","Centralized","Cloned","Compatible","Configurable","Cross-group","Cross-platform","Customer-focused","Customizable","Decentralized","De-engineered","Devolved","Digitized","Distributed","Diverse","Down-sized","Enhanced","Enterprise-wide","Ergonomic","Exclusive","Expanded","Extended","Face to face","Focused","Front-line","Fully-configurable","Function-based","Fundamental","Future-proofed","Grass-roots","Horizontal","Implemented","Innovative","Integrated","Intuitive","Inverse","Managed","Mandatory","Monitored","Multi-channelled","Multi-lateral","Multi-layered","Multi-tiered","Networked","Object-based","Open-architected","Open-source","Operative","Optimized","Optional","Organic","Organized","Persevering","Persistent","Phased","Polarised","Pre-emptive","Proactive","Profit-focused","Profound","Programmable","Progressive","Public-key","Quality-focused","Reactive","Realigned","Re-contextualized","Re-engineered","Reduced","Reverse-engineered","Right-sized","Robust","Seamless","Secured","Self-enabling","Sharable","Stand-alone","Streamlined","Switchable","Synchronised","Synergistic","Synergized","Team-oriented","Total","Triple-buffered","Universal","Up-sized","Upgradable","User-centric","User-friendly","Versatile","Virtual","Visionary","Vision-oriented"]},{}],72:[function(e,t,a){t.exports=["clicks-and-mortar","value-added","vertical","proactive","robust","revolutionary","scalable","leading-edge","innovative","intuitive","strategic","e-business","mission-critical","sticky","one-to-one","24/7","end-to-end","global","B2B","B2C","granular","frictionless","virtual","viral","dynamic","24/365","best-of-breed","killer","magnetic","bleeding-edge","web-enabled","interactive","dot-com","sexy","back-end","real-time","efficient","front-end","distributed","seamless","extensible","turn-key","world-class","open-source","cross-platform","cross-media","synergistic","bricks-and-clicks","out-of-the-box","enterprise","integrated","impactful","wireless","transparent","next-generation","cutting-edge","user-centric","visionary","customized","ubiquitous","plug-and-play","collaborative","compelling","holistic","rich"]},{}],73:[function(e,t,a){t.exports=["synergies","web-readiness","paradigms","markets","partnerships","infrastructures","platforms","initiatives","channels","eyeballs","communities","ROI","solutions","e-tailers","e-services","action-items","portals","niches","technologies","content","vortals","supply-chains","convergence","relationships","architectures","interfaces","e-markets","e-commerce","systems","bandwidth","infomediaries","models","mindshare","deliverables","users","schemas","networks","applications","metrics","e-business","functionalities","experiences","web services","methodologies"]},{}],74:[function(e,t,a){t.exports=["implement","utilize","integrate","streamline","optimize","evolve","transform","embrace","enable","orchestrate","leverage","reinvent","aggregate","architect","enhance","incentivize","morph","empower","envisioneer","monetize","harness","facilitate","seize","disintermediate","synergize","strategize","deploy","brand","grow","target","syndicate","synthesize","deliver","mesh","incubate","engage","maximize","benchmark","expedite","reintermediate","whiteboard","visualize","repurpose","innovate","scale","unleash","drive","extend","engineer","revolutionize","generate","exploit","transition","e-enable","iterate","cultivate","matrix","productize","redefine","recontextualize"]},{}],75:[function(e,t,a){t.exports=["24 hour","24/7","3rd generation","4th generation","5th generation","6th generation","actuating","analyzing","asymmetric","asynchronous","attitude-oriented","background","bandwidth-monitored","bi-directional","bifurcated","bottom-line","clear-thinking","client-driven","client-server","coherent","cohesive","composite","context-sensitive","contextually-based","content-based","dedicated","demand-driven","didactic","directional","discrete","disintermediate","dynamic","eco-centric","empowering","encompassing","even-keeled","executive","explicit","exuding","fault-tolerant","foreground","fresh-thinking","full-range","global","grid-enabled","heuristic","high-level","holistic","homogeneous","human-resource","hybrid","impactful","incremental","intangible","interactive","intermediate","leading edge","local","logistical","maximized","methodical","mission-critical","mobile","modular","motivating","multimedia","multi-state","multi-tasking","national","needs-based","neutral","next generation","non-volatile","object-oriented","optimal","optimizing","radical","real-time","reciprocal","regional","responsive","scalable","secondary","solution-oriented","stable","static","systematic","systemic","system-worthy","tangible","tertiary","transitional","uniform","upward-trending","user-facing","value-added","web-enabled","well-modulated","zero administration","zero defect","zero tolerance"]},{}],76:[function(e,t,a){var i={};t.exports=i,i.suffix=e("./suffix"),i.adjective=e("./adjective"),i.descriptor=e("./descriptor"),i.noun=e("./noun"),i.bs_verb=e("./bs_verb"),i.bs_adjective=e("./bs_adjective"),i.bs_noun=e("./bs_noun"),i.name=e("./name")},{"./adjective":71,"./bs_adjective":72,"./bs_noun":73,"./bs_verb":74,"./descriptor":75,"./name":77,"./noun":78,"./suffix":79}],77:[function(e,t,a){t.exports=["#{Name.last_name} #{suffix}","#{Name.last_name}-#{Name.last_name}","#{Name.last_name}, #{Name.last_name} and #{Name.last_name}"]},{}],78:[function(e,t,a){t.exports=["ability","access","adapter","algorithm","alliance","analyzer","application","approach","architecture","archive","artificial intelligence","array","attitude","benchmark","budgetary management","capability","capacity","challenge","circuit","collaboration","complexity","concept","conglomeration","contingency","core","customer loyalty","database","data-warehouse","definition","emulation","encoding","encryption","extranet","firmware","flexibility","focus group","forecast","frame","framework","function","functionalities","Graphic Interface","groupware","Graphical User Interface","hardware","help-desk","hierarchy","hub","implementation","info-mediaries","infrastructure","initiative","installation","instruction set","interface","internet solution","intranet","knowledge user","knowledge base","local area network","leverage","matrices","matrix","methodology","middleware","migration","model","moderator","monitoring","moratorium","neural-net","open architecture","open system","orchestration","paradigm","parallelism","policy","portal","pricing structure","process improvement","product","productivity","project","projection","protocol","secured line","service-desk","software","solution","standardization","strategy","structure","success","superstructure","support","synergy","system engine","task-force","throughput","time-frame","toolset","utilisation","website","workforce"]},{}],79:[function(e,t,a){t.exports=["Inc","and Sons","LLC","Group"]},{}],80:[function(e,t,a){t.exports=["/34##-######-####L/","/37##-######-####L/"]},{}],81:[function(e,t,a){t.exports=["/30[0-5]#-######-###L/","/368#-######-###L/"]},{}],82:[function(e,t,a){t.exports=["/6011-####-####-###L/","/65##-####-####-###L/","/64[4-9]#-####-####-###L/","/6011-62##-####-####-###L/","/65##-62##-####-####-###L/","/64[4-9]#-62##-####-####-###L/"]},{}],83:[function(e,t,a){var i={};t.exports=i,i.visa=e("./visa"),i.mastercard=e("./mastercard"),i.discover=e("./discover"),i.american_express=e("./american_express"),i.diners_club=e("./diners_club"),i.jcb=e("./jcb"),i["switch"]=e("./switch"),i.solo=e("./solo"),i.maestro=e("./maestro"),i.laser=e("./laser")},{"./american_express":80,"./diners_club":81,"./discover":82,"./jcb":84,"./laser":85,"./maestro":86,"./mastercard":87,"./solo":88,"./switch":89,"./visa":90}],84:[function(e,t,a){t.exports=["/3528-####-####-###L/","/3529-####-####-###L/","/35[3-8]#-####-####-###L/"]},{}],85:[function(e,t,a){t.exports=["/6304###########L/","/6706###########L/","/6771###########L/","/6709###########L/","/6304#########{5,6}L/","/6706#########{5,6}L/","/6771#########{5,6}L/","/6709#########{5,6}L/"]},{}],86:[function(e,t,a){t.exports=["/50#{9,16}L/","/5[6-8]#{9,16}L/","/56##{9,16}L/"]},{}],87:[function(e,t,a){t.exports=["/5[1-5]##-####-####-###L/","/6771-89##-####-###L/"]; +},{}],88:[function(e,t,a){t.exports=["/6767-####-####-###L/","/6767-####-####-####-#L/","/6767-####-####-####-##L/"]},{}],89:[function(e,t,a){t.exports=["/6759-####-####-###L/","/6759-####-####-####-#L/","/6759-####-####-####-##L/"]},{}],90:[function(e,t,a){t.exports=["/4###########L/","/4###-####-####-###L/"]},{}],91:[function(e,t,a){var i={};t.exports=i,i.month=e("./month"),i.weekday=e("./weekday")},{"./month":92,"./weekday":93}],92:[function(e,t,a){t.exports={wide:["January","February","March","April","May","June","July","August","September","October","November","December"],wide_context:["January","February","March","April","May","June","July","August","September","October","November","December"],abbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],abbr_context:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}},{}],93:[function(e,t,a){t.exports={wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],wide_context:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],abbr_context:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]}},{}],94:[function(e,t,a){t.exports=["Checking","Savings","Money Market","Investment","Home Loan","Credit Card","Auto Loan","Personal Loan"]},{}],95:[function(e,t,a){t.exports={"UAE Dirham":{code:"AED",symbol:""},Afghani:{code:"AFN",symbol:"؋"},Lek:{code:"ALL",symbol:"Lek"},"Armenian Dram":{code:"AMD",symbol:""},"Netherlands Antillian Guilder":{code:"ANG",symbol:"ƒ"},Kwanza:{code:"AOA",symbol:""},"Argentine Peso":{code:"ARS",symbol:"$"},"Australian Dollar":{code:"AUD",symbol:"$"},"Aruban Guilder":{code:"AWG",symbol:"ƒ"},"Azerbaijanian Manat":{code:"AZN",symbol:"ман"},"Convertible Marks":{code:"BAM",symbol:"KM"},"Barbados Dollar":{code:"BBD",symbol:"$"},Taka:{code:"BDT",symbol:""},"Bulgarian Lev":{code:"BGN",symbol:"лв"},"Bahraini Dinar":{code:"BHD",symbol:""},"Burundi Franc":{code:"BIF",symbol:""},"Bermudian Dollar (customarily known as Bermuda Dollar)":{code:"BMD",symbol:"$"},"Brunei Dollar":{code:"BND",symbol:"$"},"Boliviano Mvdol":{code:"BOB BOV",symbol:"$b"},"Brazilian Real":{code:"BRL",symbol:"R$"},"Bahamian Dollar":{code:"BSD",symbol:"$"},Pula:{code:"BWP",symbol:"P"},"Belarussian Ruble":{code:"BYR",symbol:"p."},"Belize Dollar":{code:"BZD",symbol:"BZ$"},"Canadian Dollar":{code:"CAD",symbol:"$"},"Congolese Franc":{code:"CDF",symbol:""},"Swiss Franc":{code:"CHF",symbol:"CHF"},"Chilean Peso Unidades de fomento":{code:"CLP CLF",symbol:"$"},"Yuan Renminbi":{code:"CNY",symbol:"¥"},"Colombian Peso Unidad de Valor Real":{code:"COP COU",symbol:"$"},"Costa Rican Colon":{code:"CRC",symbol:"₡"},"Cuban Peso Peso Convertible":{code:"CUP CUC",symbol:"₱"},"Cape Verde Escudo":{code:"CVE",symbol:""},"Czech Koruna":{code:"CZK",symbol:"Kč"},"Djibouti Franc":{code:"DJF",symbol:""},"Danish Krone":{code:"DKK",symbol:"kr"},"Dominican Peso":{code:"DOP",symbol:"RD$"},"Algerian Dinar":{code:"DZD",symbol:""},Kroon:{code:"EEK",symbol:""},"Egyptian Pound":{code:"EGP",symbol:"£"},Nakfa:{code:"ERN",symbol:""},"Ethiopian Birr":{code:"ETB",symbol:""},Euro:{code:"EUR",symbol:"€"},"Fiji Dollar":{code:"FJD",symbol:"$"},"Falkland Islands Pound":{code:"FKP",symbol:"£"},"Pound Sterling":{code:"GBP",symbol:"£"},Lari:{code:"GEL",symbol:""},Cedi:{code:"GHS",symbol:""},"Gibraltar Pound":{code:"GIP",symbol:"£"},Dalasi:{code:"GMD",symbol:""},"Guinea Franc":{code:"GNF",symbol:""},Quetzal:{code:"GTQ",symbol:"Q"},"Guyana Dollar":{code:"GYD",symbol:"$"},"Hong Kong Dollar":{code:"HKD",symbol:"$"},Lempira:{code:"HNL",symbol:"L"},"Croatian Kuna":{code:"HRK",symbol:"kn"},"Gourde US Dollar":{code:"HTG USD",symbol:""},Forint:{code:"HUF",symbol:"Ft"},Rupiah:{code:"IDR",symbol:"Rp"},"New Israeli Sheqel":{code:"ILS",symbol:"₪"},"Indian Rupee":{code:"INR",symbol:""},"Indian Rupee Ngultrum":{code:"INR BTN",symbol:""},"Iraqi Dinar":{code:"IQD",symbol:""},"Iranian Rial":{code:"IRR",symbol:"﷼"},"Iceland Krona":{code:"ISK",symbol:"kr"},"Jamaican Dollar":{code:"JMD",symbol:"J$"},"Jordanian Dinar":{code:"JOD",symbol:""},Yen:{code:"JPY",symbol:"¥"},"Kenyan Shilling":{code:"KES",symbol:""},Som:{code:"KGS",symbol:"лв"},Riel:{code:"KHR",symbol:"៛"},"Comoro Franc":{code:"KMF",symbol:""},"North Korean Won":{code:"KPW",symbol:"₩"},Won:{code:"KRW",symbol:"₩"},"Kuwaiti Dinar":{code:"KWD",symbol:""},"Cayman Islands Dollar":{code:"KYD",symbol:"$"},Tenge:{code:"KZT",symbol:"лв"},Kip:{code:"LAK",symbol:"₭"},"Lebanese Pound":{code:"LBP",symbol:"£"},"Sri Lanka Rupee":{code:"LKR",symbol:"₨"},"Liberian Dollar":{code:"LRD",symbol:"$"},"Lithuanian Litas":{code:"LTL",symbol:"Lt"},"Latvian Lats":{code:"LVL",symbol:"Ls"},"Libyan Dinar":{code:"LYD",symbol:""},"Moroccan Dirham":{code:"MAD",symbol:""},"Moldovan Leu":{code:"MDL",symbol:""},"Malagasy Ariary":{code:"MGA",symbol:""},Denar:{code:"MKD",symbol:"ден"},Kyat:{code:"MMK",symbol:""},Tugrik:{code:"MNT",symbol:"₮"},Pataca:{code:"MOP",symbol:""},Ouguiya:{code:"MRO",symbol:""},"Mauritius Rupee":{code:"MUR",symbol:"₨"},Rufiyaa:{code:"MVR",symbol:""},Kwacha:{code:"MWK",symbol:""},"Mexican Peso Mexican Unidad de Inversion (UDI)":{code:"MXN MXV",symbol:"$"},"Malaysian Ringgit":{code:"MYR",symbol:"RM"},Metical:{code:"MZN",symbol:"MT"},Naira:{code:"NGN",symbol:"₦"},"Cordoba Oro":{code:"NIO",symbol:"C$"},"Norwegian Krone":{code:"NOK",symbol:"kr"},"Nepalese Rupee":{code:"NPR",symbol:"₨"},"New Zealand Dollar":{code:"NZD",symbol:"$"},"Rial Omani":{code:"OMR",symbol:"﷼"},"Balboa US Dollar":{code:"PAB USD",symbol:"B/."},"Nuevo Sol":{code:"PEN",symbol:"S/."},Kina:{code:"PGK",symbol:""},"Philippine Peso":{code:"PHP",symbol:"Php"},"Pakistan Rupee":{code:"PKR",symbol:"₨"},Zloty:{code:"PLN",symbol:"zł"},Guarani:{code:"PYG",symbol:"Gs"},"Qatari Rial":{code:"QAR",symbol:"﷼"},"New Leu":{code:"RON",symbol:"lei"},"Serbian Dinar":{code:"RSD",symbol:"Дин."},"Russian Ruble":{code:"RUB",symbol:"руб"},"Rwanda Franc":{code:"RWF",symbol:""},"Saudi Riyal":{code:"SAR",symbol:"﷼"},"Solomon Islands Dollar":{code:"SBD",symbol:"$"},"Seychelles Rupee":{code:"SCR",symbol:"₨"},"Sudanese Pound":{code:"SDG",symbol:""},"Swedish Krona":{code:"SEK",symbol:"kr"},"Singapore Dollar":{code:"SGD",symbol:"$"},"Saint Helena Pound":{code:"SHP",symbol:"£"},Leone:{code:"SLL",symbol:""},"Somali Shilling":{code:"SOS",symbol:"S"},"Surinam Dollar":{code:"SRD",symbol:"$"},Dobra:{code:"STD",symbol:""},"El Salvador Colon US Dollar":{code:"SVC USD",symbol:"$"},"Syrian Pound":{code:"SYP",symbol:"£"},Lilangeni:{code:"SZL",symbol:""},Baht:{code:"THB",symbol:"฿"},Somoni:{code:"TJS",symbol:""},Manat:{code:"TMT",symbol:""},"Tunisian Dinar":{code:"TND",symbol:""},"Pa'anga":{code:"TOP",symbol:""},"Turkish Lira":{code:"TRY",symbol:"TL"},"Trinidad and Tobago Dollar":{code:"TTD",symbol:"TT$"},"New Taiwan Dollar":{code:"TWD",symbol:"NT$"},"Tanzanian Shilling":{code:"TZS",symbol:""},Hryvnia:{code:"UAH",symbol:"₴"},"Uganda Shilling":{code:"UGX",symbol:""},"US Dollar":{code:"USD",symbol:"$"},"Peso Uruguayo Uruguay Peso en Unidades Indexadas":{code:"UYU UYI",symbol:"$U"},"Uzbekistan Sum":{code:"UZS",symbol:"лв"},"Bolivar Fuerte":{code:"VEF",symbol:"Bs"},Dong:{code:"VND",symbol:"₫"},Vatu:{code:"VUV",symbol:""},Tala:{code:"WST",symbol:""},"CFA Franc BEAC":{code:"XAF",symbol:""},Silver:{code:"XAG",symbol:""},Gold:{code:"XAU",symbol:""},"Bond Markets Units European Composite Unit (EURCO)":{code:"XBA",symbol:""},"European Monetary Unit (E.M.U.-6)":{code:"XBB",symbol:""},"European Unit of Account 9(E.U.A.-9)":{code:"XBC",symbol:""},"European Unit of Account 17(E.U.A.-17)":{code:"XBD",symbol:""},"East Caribbean Dollar":{code:"XCD",symbol:"$"},SDR:{code:"XDR",symbol:""},"UIC-Franc":{code:"XFU",symbol:""},"CFA Franc BCEAO":{code:"XOF",symbol:""},Palladium:{code:"XPD",symbol:""},"CFP Franc":{code:"XPF",symbol:""},Platinum:{code:"XPT",symbol:""},"Codes specifically reserved for testing purposes":{code:"XTS",symbol:""},"Yemeni Rial":{code:"YER",symbol:"﷼"},Rand:{code:"ZAR",symbol:"R"},"Rand Loti":{code:"ZAR LSL",symbol:""},"Rand Namibia Dollar":{code:"ZAR NAD",symbol:""},"Zambian Kwacha":{code:"ZMK",symbol:""},"Zimbabwe Dollar":{code:"ZWL",symbol:""}}},{}],96:[function(e,t,a){var i={};t.exports=i,i.account_type=e("./account_type"),i.transaction_type=e("./transaction_type"),i.currency=e("./currency")},{"./account_type":94,"./currency":95,"./transaction_type":97}],97:[function(e,t,a){t.exports=["deposit","withdrawal","payment","invoice"]},{}],98:[function(e,t,a){t.exports=["TCP","HTTP","SDD","RAM","GB","CSS","SSL","AGP","SQL","FTP","PCI","AI","ADP","RSS","XML","EXE","COM","HDD","THX","SMTP","SMS","USB","PNG","SAS","IB","SCSI","JSON","XSS","JBOD"]},{}],99:[function(e,t,a){t.exports=["auxiliary","primary","back-end","digital","open-source","virtual","cross-platform","redundant","online","haptic","multi-byte","bluetooth","wireless","1080p","neural","optical","solid state","mobile"]},{}],100:[function(e,t,a){var i={};t.exports=i,i.abbreviation=e("./abbreviation"),i.adjective=e("./adjective"),i.noun=e("./noun"),i.verb=e("./verb"),i.ingverb=e("./ingverb")},{"./abbreviation":98,"./adjective":99,"./ingverb":101,"./noun":102,"./verb":103}],101:[function(e,t,a){t.exports=["backing up","bypassing","hacking","overriding","compressing","copying","navigating","indexing","connecting","generating","quantifying","calculating","synthesizing","transmitting","programming","parsing"]},{}],102:[function(e,t,a){t.exports=["driver","protocol","bandwidth","panel","microchip","program","port","card","array","interface","system","sensor","firewall","hard drive","pixel","alarm","feed","monitor","application","transmitter","bus","circuit","capacitor","matrix"]},{}],103:[function(e,t,a){t.exports=["back up","bypass","hack","override","compress","copy","navigate","index","connect","generate","quantify","calculate","synthesize","input","transmit","program","reboot","parse"]},{}],104:[function(e,t,a){var i={};t.exports=i,i.title="English",i.separator=" & ",i.address=e("./address"),i.credit_card=e("./credit_card"),i.company=e("./company"),i.internet=e("./internet"),i.lorem=e("./lorem"),i.name=e("./name"),i.phone_number=e("./phone_number"),i.cell_phone=e("./cell_phone"),i.business=e("./business"),i.commerce=e("./commerce"),i.team=e("./team"),i.hacker=e("./hacker"),i.app=e("./app"),i.finance=e("./finance"),i.date=e("./date")},{"./address":47,"./app":58,"./business":64,"./cell_phone":66,"./commerce":69,"./company":76,"./credit_card":83,"./date":91,"./finance":96,"./hacker":100,"./internet":108,"./lorem":109,"./name":113,"./phone_number":120,"./team":122}],105:[function(e,t,a){t.exports=["https://s3.amazonaws.com/uifaces/faces/twitter/jarjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahdif/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sprayaga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruzinav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Skyhartman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moscoz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurafire/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/91bilal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/igorgarybaldi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malykhinv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelhelin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kushsolitary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowshade/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/holdenweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heyimjuani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/envex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/unterdreht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/collegeman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peejfancher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andyisonline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ultragex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fuck_you_two/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adellecharles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ateneupopular/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetalpbalkan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Stievius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerem/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osvaldas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelceballos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrykoblentz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peterlandt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weglov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandclay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flame_kaizar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetsulek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolasfolliot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayrobinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorerixon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michzen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markjenkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolai_larsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noxdzine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alagoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/idiot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadengle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutlu82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/simobenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vocino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guiiipontes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soyjavi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshaustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomaslau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VinThomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ManikRathee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/langate/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cemshid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leemunroe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_shahedk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BillSKenney/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/divya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshhemsley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sindresorhus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soffes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/9lessons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linux29/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Chakintosh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anaami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joreira/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shadeed9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottkclark/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jedbridges/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salleedesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marakasina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BrianPurkiss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelmartinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bublienko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devankoshal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ZacharyZorbas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timmillwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuasortino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/damenleeturks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomas_janousek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herrhaase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/RussellBishop/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brajeshwar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nachtmeister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cbracco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bermonpainter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdullindenis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isacosta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suprb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yalozhkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chandlervdw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamgarth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_victa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/commadelimited/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roybarberuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/axel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladarbatov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ffbel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/syropian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ankitind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/traneblow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flashmurphy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ChrisFarina78/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baliomega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschamt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jm_denis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kennyadr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chatyrko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dingyi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mds/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terryxlife/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaroni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kinday/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prrstn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eduardostuart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhilipsiva/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/GavicoInd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rohixx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakesimkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leeiio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjrus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uberschizo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefoundry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/claudioguglieri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ripplemdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/exentrich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jakemoore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joaoedumedeiros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/poormini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tereshenkov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keryilmaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haydn_woods/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/llun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sgaurav_baghel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jamiebrittain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/badlittleduck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pifagor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agromov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benefritz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/erwanhesry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diesellaws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiaha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/koridhandy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewcohen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smaczny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gonzalorobaina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nandini_m/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sydlawrence/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdharrison/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgerken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lewisainslie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliecwaite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robbschiller/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flexrs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattdetails/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raquelwilson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrmartineau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/opnsrce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hgharrygo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximseshuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxalex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samihah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chanpory/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sharvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josemarques/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jefffis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krystalfister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lokesh_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedamianhdez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dpmachado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/funwatercat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timothycd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ivanfilipovbg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/picard102/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcobarbosa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krasnoukhov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/g3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ademilter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickdt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/operatino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bungiwan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugomano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/logorado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dc_user/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/horaciobella/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SlaapMe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teeragit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqonicd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ilya_pestov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewarrow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssiskind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/HenryHoffman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdsaunders/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamsxu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousoffice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themadray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michigangraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kohette/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nickfratter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/runningskull/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madysondesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenton_clarke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyshen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bradenhamm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurtinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amanruzaini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyhaggard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Karimmove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronalfred/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wtrsld/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jitachi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/therealmarvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pmeissner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ooomz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chacky14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jesseddy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinmatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shanehudson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/IsaryAmairani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arthurholcombe1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andychipster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/boxmodel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ehsandiary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/LucasPerdidao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shalt0ni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swaplord/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaelifa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plbabin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guillemboti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arindam_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/renbyrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thiagovernetti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmillspaysbills/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikemai2awesome/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jervo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mekal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sta1ex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robergd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipecsl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrea211087/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/garand/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhooyenga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abovefunction/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pcridesagain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/randomlies/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BryanHorsey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heykenneth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dahparra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allthingssmitty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvernon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beweinreich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/increase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falvarad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxndrustinov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souuf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/orkuncaylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AM_Kn2/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gearpixels/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bassamology/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vimarethomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kosmar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SULiik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrjamesnoble/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silvanmuhlemann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shaneIxD/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nacho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yigitpinarbasi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buzzusborne/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronkwhite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rmlewisuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giancarlon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nbirckel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_nny_m_cher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sdidonato/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atariboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abotap/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karalek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psdesignuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ludwiczakpawel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nemanjaivanovic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baluli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmadajmi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vovkasolovev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samgrover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derienzo777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonathansimmons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelsonjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/S0ufi4n3/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xtopherpaul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oaktreemedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nateschulte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/findingjenny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/namankreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyzotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/we_social/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leehambley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/solid_color/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abelcabans/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilderbach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kkusaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jordyvdboom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosgavina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pechkinator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vc27/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdbannon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/croakx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerihenare/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catadeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gcmorley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duivvv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschadroste/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorDubugras/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wintopia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattbilotti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taylorling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/megdraws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meln1ks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahmoudmetwally/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Silveredge9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekebradley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/happypeter1983/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travis_arnold/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artem_kostenko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adobi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daykiine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alek_djuric/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scips/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelmendes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrhee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alsobrooks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mcflydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/santi_urso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allfordesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stayuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bertboerland/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marosholly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamnac/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cynthiasavard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muringa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hiemil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jackiesaik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zacsnider/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iduuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antjanus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aroon_sharma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dshster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thehacker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelbrooksjr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanmclaughlin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/clubb3rry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taybenlor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xripunov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/myastro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adityasutomo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/digitalmaverick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hjartstrorn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itolmach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vaughanmoffitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdots/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isnifer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeysafonov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scrapdnb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrismj83/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitorleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sokaniwaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zaki3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/illyzoren/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mocabyte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmanince/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/djsherman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidhemphill/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/waghner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/necodymiconer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/praveen_vijaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbrucci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cliffseal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travishines/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kuldarkalvik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Elt_n/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/phillapier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okseanjay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/id835559/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kudretkeskin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anjhero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duck4fuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scott_riley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noufalibrahim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/h1brd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borges_marcos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devinhalladay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ciaranr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefooo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikebeecham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tonymillion/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuaraichur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/irae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petrangr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmitriychuta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliegann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arashmanteghi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ainsleywagon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/svenlen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/faisalabid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beshur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlyson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dutchnadia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teddyzetterlund/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samuelkraft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aoimedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/toddrew/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codepoet_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artvavs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benoitboucart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jomarmen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolmarlopez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/creartinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/homka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gaborenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinclediere/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximsorokin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plasticine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j2deme/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peachananr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kapaluccio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/de_ascanio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dawidwu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpatey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/popey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rehatkathuria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_purplebunny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/1markiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ajaxy_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenmurrell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dudestein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskarlevinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorstuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nehfy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vicivadeline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leandrovaranda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottgallant/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victor_haydin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawrb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryhanhassan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amayvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_brixen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karolkrakowiak_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herkulano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geran7/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cggaurav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_witko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lososina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/polarity/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattlat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonburke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/constantx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teylorfeliz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigelimeliah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rachelreveley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reabo101/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rahmeen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickyyean/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j04ntoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spbroma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sebashton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpenico/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/francis_vega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oktayelipek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kikillo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbianz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrygerard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BroumiYoussef/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/0therplanet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilalsiddique1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ionuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grrr_nl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/liminha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rawdiggie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryandownie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sethlouey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pixage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arpitnj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/switmer777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josevnclch/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kanickairaj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/puzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tbakdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/besbujupi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supjoey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lowie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linkibol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balintorosz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imcoding/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agustincruiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gusoto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasschrijer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/superoutman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kalmerrautam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielizalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gojeanyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidbaldie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_vojto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laurengray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mymyboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nellleo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marciotoledo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ninjad3m0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/to_soham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hasslunsford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muridrahhal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/levisan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grahamkennery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepetitogre/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antongenkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nessoila/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amandabuzard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/safrankov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cocolero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dss49/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matt3224/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluesix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/quailandquasar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AlbertoCococi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepinski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sementiy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhudobivnik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thibaut_re/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olgary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shojberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mtolokonnikov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bereto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naupintos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wegotvices/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xadhix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/macxim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rodnylobos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madcampos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebyvadim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartoszdawydzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supervova/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markretzloff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vonachoo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darylws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stevedesigner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mylesb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herbigt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/depaulawagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gizmeedevil1991/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_scottburgess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lisovsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidsasda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artd_sign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/YoungCutlass/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mgonto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itstotallyamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorquinn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmond/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oksanafrewer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zauerkraut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkeithmason/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nitinhayaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lmjabreu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mandalareopens/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinkleft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ponchomendivil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juamperro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brunodesign1206/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caseycavanagh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/luxe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dotgridline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spedwig/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madewulf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattsapii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/helderleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisstumph/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayphen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nsamoylov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisvanderkooi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justme_timothyg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/otozk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prinzadi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gu5taf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cyril_gaillard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_kobelyatsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daniloc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nwdsha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/romanbulah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/skkirilov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dvdwinden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dannol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thekevinjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jwalter14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timgthomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buddhasource/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxpiper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thatonetommy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diansigitp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adrienths/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klimmka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gkaam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekcramer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyyo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerrsoft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xalionmalik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edhenderson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keyuri85/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roxanejammet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kimcool/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edkf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alessandroribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacksonlatka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebronjennan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kostaspt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karlkanall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moynihan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danpliego/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saulihirvi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wesleytrankin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fjaguero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bowbrick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mashaaaaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yassiryahya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dparrelli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fotomagin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aka_james/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/denisepires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqbalperkasa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martinansty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jarsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_oy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielrosser/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malgordon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlfairclough/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelabehsera/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierrestoffe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enjoythetau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/loganjlambert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpeezy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyginnivan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michalhron/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/msveet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lingeswaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolsvein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peter576/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reideiredale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joeymurdah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raphaelnikson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mvdheuvel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maxlinderman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jimmuirhead/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/begreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/frankiefreesbie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robturlinckx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Talbi_ConSept/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/longlivemyword/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vanchesz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maiklam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hermanobrother/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rez___a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregsqueeb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/greenbes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_ragzor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anthonysukow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fluidbrush/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dactrtr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jehnglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bergmartin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugocornejo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_kkga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dzantievm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawalazar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sovesove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonsgotwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byryan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vytautas_a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizhgan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cicerobr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshelmersson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d33pthought/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davecraige/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nckjrvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexandermayes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jcubic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigrcoles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bagawarman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rob_thomas10/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cofla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maikelk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtgibbons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russell_baylis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhesslow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codysanfilippo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/webtanya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebybrenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dcalonaci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perfectflow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjsiii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saarabpreet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kumarrajan12123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamsteffen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themikenagle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ceekaytweet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrybolt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/conspirator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dallasbpeters/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n3dmax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terpimost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirillz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byrnecore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j_drake_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russoedu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hoangloi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tobysaxon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gofrasdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dimaposnyy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjisousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okandungel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/billyroshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskamaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/motionthinks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/knilob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashocka18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marrimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartjo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/omnizya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ernestsemerda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andreas_pr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edgarchris99/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasgeisen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gseguin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joannefournier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/demersdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adammarsbar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nasirwd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n_tassone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/javorszky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themrdave/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yecidsm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicollerich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/canapud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicoleglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/judzhin_miles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/designervzm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kianoshp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evandrix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alterchuca/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhrubo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ma_tiax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssbb_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dorphern/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mauriolg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bruno_mart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mactopus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_winslet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joemdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Shriiiiimp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacobbennett/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nfedoroff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamglimy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allagringaus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aiiaiiaii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olaolusoga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buryaknick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wim1k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicklacke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a1chapone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/steynviljoen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/strikewan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryankirkman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewabogado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doooon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jagan123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariffsetiawan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elenadissi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mwarkentin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrymeier_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_garcia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmackerman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borantula/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/konus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spacewood_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryuchi311/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evanshajed/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tristanlegros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shoaib253/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aislinnkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okcoker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timpetricola/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunshinedgirl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleclarsoniv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nomidesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petebernardo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottiedude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/millinet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imsoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imammuht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benjamin_knight/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nepdud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joki4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lanceguyatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bboy1895/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amywebbb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rweve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haruintesettden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ricburton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelshd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/batsirai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/primozcigler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jffgrdnr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/8d3k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geneseleznev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/al_li/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souperphly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mslarkina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/2fockus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdavis565/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xiel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/turkutuuli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxward/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebinoclard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauravjassal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidmerrique/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mdsisto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewofficer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kojourin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnirmal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_shiznit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aluisio_azevedo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cloudstudio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvierich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexivanichkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fran_mchamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perretmagali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/betraydan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cadikkara/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matbeedotcom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyworboys/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bpartridge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelkoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silv3rgvn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alevizio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnsmithagency/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lawlbwoy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitor376/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/desastrozo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thimo_cz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jasonmarkjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lhausermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xravil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guischmitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vigobronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panghal0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelkooreman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/surgeonist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/christianoliff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caspergrl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkarna/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ipavelek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierre_nel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/y2graphic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sterlingrules/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elbuscainfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bennyjien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stushona/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/estebanuribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/embrcecreations/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danillos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charlesrpratt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmeffess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosblanco_eu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leonfedotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rangafangs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_frees/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgormtx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bryan_topham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpscribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mighty55/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carbontwelve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isaacfifth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamjdeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowwrite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/barputro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/drewbyreese/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachacorazzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bistrianiosip/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magoo04/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pehamondello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yayteejay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_harris88/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/algunsanabria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zforrester/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ovall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosjgsousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geobikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ah_lice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/looneydoodle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerdgr8/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ddggccaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zackeeler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/normanbox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/el_fuertisimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ismail_biltagi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juangomezw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jnmnrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/patrickcoombe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanjohnson_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markolschesky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeffgolenski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kvasnic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lindseyzilla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauchomatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/afusinatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okansurreel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamawesomeface/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emileboudeling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arishi_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juanmamartinez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wikiziner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danthms/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mkginfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terrorpixel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousonaut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prheemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcolenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/foczzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martip07/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaodang17/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johncafazza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinlayfield/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/franciscoamk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdulhyeuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marklamb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edobene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresenfredrik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikaeljorhult/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisslowik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vinciarts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meelford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotnolten/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yehudab/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vijaykarthik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bfrohs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josep_martins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/attacks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sur4dye/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tumski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/instalox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mangosango/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/paulfarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kazaky999/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kiwiupover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nvkznemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tom_even/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ratbus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodsman001/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshmedeski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thewillbeard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psaikali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joe_black/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleinadsays/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcusgorillius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hota_v/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jghyllebert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shinze/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/janpalounek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiespoken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/her_ruu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dansowter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipeapiress/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magugzbrand2d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/posterjob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nathalie_fs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobbytwoshoes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dreizle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremymouton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elisabethkjaer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/notbadart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mohanrohith/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jlsolerdeltoro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itskawsar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/slowspock/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zvchkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wiljanslofstra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craighenneberry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trubeatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juaumlol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samscouto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BenouarradeM/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gipsy_raf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/netonet_il/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arkokoley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itsajimithing/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smalonso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victordeanda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_dwite_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richardgarretts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregrwilkinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anatolinicolae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lu4sh1i/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanotirloni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ostirbu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darcystonge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naitanamoreno/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcomiskey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhiardana/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcomano_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidcazalis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falconerie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregkilian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bcrad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bolzanmarco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/low_res/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vlajki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petar_prog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonkspr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmalfikri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mfacchinello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atanism/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/harry_sistalam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/murrayswift/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobwassermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gavr1l0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madshensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_subtle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deviljho_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salimianoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joetruesdell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/twittypork/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/airskylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnezkumar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgajjar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cherif_b/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salvafc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/louis_currie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deeenright/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cybind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eyronn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vickyshits/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sweetdelisa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cboller1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresdjasso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/melvindidit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andysolomon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaisselenator_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lvovenok/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giuliusa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/belyaev_rs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overcloacked/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kamal_chaneman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/incubo82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hellofeverrrr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhaligowski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunlandictwin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bu7921/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andytlaw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/finchjke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manigm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/umurgdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottfeltham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ganserene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutu_krish/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jodytaggart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ntfblog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tanveerrao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hfalucas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxleroydeval/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kucingbelang4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bargaorobalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colgruv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stalewine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefrost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumannzone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcolberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachingawas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjshaw14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ramanathan_pdy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johndezember/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshoenson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonmorreale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nutzumi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonflatsoda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeyalmone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klefue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirangopal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumann_alex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matthewkay_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jay_wilburn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shesgared/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/apriendeau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnriordan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wake_gs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleksitappura/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emsgulam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xilantra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imomenui/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sircalebgrove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/newbrushes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hsinyo23/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m4rio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/katiemdaly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/s4f1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ecommerceil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marlinjayakody/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swooshycueb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sangdth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coderdiaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluefx_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vivekprvr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sasha_shestakov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eugeneeweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgclegg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n1ght_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dixchen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakehawksworth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trueblood_33/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hai_ninh_nguyen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marclgonzales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yesmeck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stephcoue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doronmalki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruehldesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anasnakawa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kijanmaharjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wearesavas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefvdham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tweetubhai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alecarpentier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fiterik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyryndya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d00maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/theonlyzeke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/missaaamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manekenthe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reetajayendra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyshimko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrgraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanozoffoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrebay007/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shvelo96/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pyronite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedjpetersen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtyukmaev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_williamguerra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/albertaugustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikashpathak18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinjohndayy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vj_demien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colirpixoil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/goddardlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laasli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jqiuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heycamtaylor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nastya_mane/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mastermindesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ccinojasso1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nyancecom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sandywoodruff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bighanddesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sbtransparent/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aviddayentonbay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richwild/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaysix_dizzy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tur8le/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/seyedhossein1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/privetwagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmandenn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dev_essentials/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmfsocial/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_yardenoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mateaodviteza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weavermedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mufaddal_mw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hafeeskhan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashernatali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sulaqo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eddiechen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josecarlospsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vm_f/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enricocicconi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danmartin70/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gmourier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/donjain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrxloka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_pedropinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eitarafa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oscarowusu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ralph_lam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panchajanyag/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodydotmx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jerrybai1907/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marshallchen_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xamorep/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aio___/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaabane_wail/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/txcx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akashsharma39/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falling_soul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sainraja/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mugukamil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johannesneu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markwienands/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karthipanraj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balakayuriy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alan_zhang_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/layerssss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaspernordkvist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mirfanqureshi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hanna_smi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VMilescu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aeon56/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m_kalibry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sreejithexp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dicesales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhoot_amit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smenov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lonesomelemon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladimirdevic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelcipriano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haligaliharun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buleswapnil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/serefka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ifarafonow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikasvinfotech/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/urrutimeoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areandacom/128.jpg"]; +},{}],106:[function(e,t,a){t.exports=["com","biz","info","name","net","org"]},{}],107:[function(e,t,a){t.exports=["gmail.com","yahoo.com","hotmail.com"]},{}],108:[function(e,t,a){var i={};t.exports=i,i.free_email=e("./free_email"),i.domain_suffix=e("./domain_suffix"),i.avatar_uri=e("./avatar_uri")},{"./avatar_uri":105,"./domain_suffix":106,"./free_email":107}],109:[function(e,t,a){var i={};t.exports=i,i.words=e("./words"),i.supplemental=e("./supplemental")},{"./supplemental":110,"./words":111}],110:[function(e,t,a){t.exports=["abbas","abduco","abeo","abscido","absconditus","absens","absorbeo","absque","abstergo","absum","abundans","abutor","accedo","accendo","acceptus","accipio","accommodo","accusator","acer","acerbitas","acervus","acidus","acies","acquiro","acsi","adamo","adaugeo","addo","adduco","ademptio","adeo","adeptio","adfectus","adfero","adficio","adflicto","adhaero","adhuc","adicio","adimpleo","adinventitias","adipiscor","adiuvo","administratio","admiratio","admitto","admoneo","admoveo","adnuo","adopto","adsidue","adstringo","adsuesco","adsum","adulatio","adulescens","adultus","aduro","advenio","adversus","advoco","aedificium","aeger","aegre","aegrotatio","aegrus","aeneus","aequitas","aequus","aer","aestas","aestivus","aestus","aetas","aeternus","ager","aggero","aggredior","agnitio","agnosco","ago","ait","aiunt","alienus","alii","alioqui","aliqua","alius","allatus","alo","alter","altus","alveus","amaritudo","ambitus","ambulo","amicitia","amiculum","amissio","amita","amitto","amo","amor","amoveo","amplexus","amplitudo","amplus","ancilla","angelus","angulus","angustus","animadverto","animi","animus","annus","anser","ante","antea","antepono","antiquus","aperio","aperte","apostolus","apparatus","appello","appono","appositus","approbo","apto","aptus","apud","aqua","ara","aranea","arbitro","arbor","arbustum","arca","arceo","arcesso","arcus","argentum","argumentum","arguo","arma","armarium","armo","aro","ars","articulus","artificiose","arto","arx","ascisco","ascit","asper","aspicio","asporto","assentator","astrum","atavus","ater","atqui","atrocitas","atrox","attero","attollo","attonbitus","auctor","auctus","audacia","audax","audentia","audeo","audio","auditor","aufero","aureus","auris","aurum","aut","autem","autus","auxilium","avaritia","avarus","aveho","averto","avoco","baiulus","balbus","barba","bardus","basium","beatus","bellicus","bellum","bene","beneficium","benevolentia","benigne","bestia","bibo","bis","blandior","bonus","bos","brevis","cado","caecus","caelestis","caelum","calamitas","calcar","calco","calculus","callide","campana","candidus","canis","canonicus","canto","capillus","capio","capitulus","capto","caput","carbo","carcer","careo","caries","cariosus","caritas","carmen","carpo","carus","casso","caste","casus","catena","caterva","cattus","cauda","causa","caute","caveo","cavus","cedo","celebrer","celer","celo","cena","cenaculum","ceno","censura","centum","cerno","cernuus","certe","certo","certus","cervus","cetera","charisma","chirographum","cibo","cibus","cicuta","cilicium","cimentarius","ciminatio","cinis","circumvenio","cito","civis","civitas","clam","clamo","claro","clarus","claudeo","claustrum","clementia","clibanus","coadunatio","coaegresco","coepi","coerceo","cogito","cognatus","cognomen","cogo","cohaero","cohibeo","cohors","colligo","colloco","collum","colo","color","coma","combibo","comburo","comedo","comes","cometes","comis","comitatus","commemoro","comminor","commodo","communis","comparo","compello","complectus","compono","comprehendo","comptus","conatus","concedo","concido","conculco","condico","conduco","confero","confido","conforto","confugo","congregatio","conicio","coniecto","conitor","coniuratio","conor","conqueror","conscendo","conservo","considero","conspergo","constans","consuasor","contabesco","contego","contigo","contra","conturbo","conventus","convoco","copia","copiose","cornu","corona","corpus","correptius","corrigo","corroboro","corrumpo","coruscus","cotidie","crapula","cras","crastinus","creator","creber","crebro","credo","creo","creptio","crepusculum","cresco","creta","cribro","crinis","cruciamentum","crudelis","cruentus","crur","crustulum","crux","cubicularis","cubitum","cubo","cui","cuius","culpa","culpo","cultellus","cultura","cum","cunabula","cunae","cunctatio","cupiditas","cupio","cuppedia","cupressus","cur","cura","curatio","curia","curiositas","curis","curo","curriculum","currus","cursim","curso","cursus","curto","curtus","curvo","curvus","custodia","damnatio","damno","dapifer","debeo","debilito","decens","decerno","decet","decimus","decipio","decor","decretum","decumbo","dedecor","dedico","deduco","defaeco","defendo","defero","defessus","defetiscor","deficio","defigo","defleo","defluo","defungo","degenero","degero","degusto","deinde","delectatio","delego","deleo","delibero","delicate","delinquo","deludo","demens","demergo","demitto","demo","demonstro","demoror","demulceo","demum","denego","denique","dens","denuncio","denuo","deorsum","depereo","depono","depopulo","deporto","depraedor","deprecator","deprimo","depromo","depulso","deputo","derelinquo","derideo","deripio","desidero","desino","desipio","desolo","desparatus","despecto","despirmatio","infit","inflammatio","paens","patior","patria","patrocinor","patruus","pauci","paulatim","pauper","pax","peccatus","pecco","pecto","pectus","pecunia","pecus","peior","pel","ocer","socius","sodalitas","sol","soleo","solio","solitudo","solium","sollers","sollicito","solum","solus","solutio","solvo","somniculosus","somnus","sonitus","sono","sophismata","sopor","sordeo","sortitus","spargo","speciosus","spectaculum","speculum","sperno","spero","spes","spiculum","spiritus","spoliatio","sponte","stabilis","statim","statua","stella","stillicidium","stipes","stips","sto","strenuus","strues","studio","stultus","suadeo","suasoria","sub","subito","subiungo","sublime","subnecto","subseco","substantia","subvenio","succedo","succurro","sufficio","suffoco","suffragium","suggero","sui","sulum","sum","summa","summisse","summopere","sumo","sumptus","supellex","super","suppellex","supplanto","suppono","supra","surculus","surgo","sursum","suscipio","suspendo","sustineo","suus","synagoga","tabella","tabernus","tabesco","tabgo","tabula","taceo","tactus","taedium","talio","talis","talus","tam","tamdiu","tamen","tametsi","tamisium","tamquam","tandem","tantillus","tantum","tardus","tego","temeritas","temperantia","templum","temptatio","tempus","tenax","tendo","teneo","tener","tenuis","tenus","tepesco","tepidus","ter","terebro","teres","terga","tergeo","tergiversatio","tergo","tergum","termes","terminatio","tero","terra","terreo","territo","terror","tersus","tertius","testimonium","texo","textilis","textor","textus","thalassinus","theatrum","theca","thema","theologus","thermae","thesaurus","thesis","thorax","thymbra","thymum","tibi","timidus","timor","titulus","tolero","tollo","tondeo","tonsor","torqueo","torrens","tot","totidem","toties","totus","tracto","trado","traho","trans","tredecim","tremo","trepide","tres","tribuo","tricesimus","triduana","triginta","tripudio","tristis","triumphus","trucido","truculenter","tubineus","tui","tum","tumultus","tunc","turba","turbo","turpe","turpis","tutamen","tutis","tyrannus","uberrime","ubi","ulciscor","ullus","ulterius","ultio","ultra","umbra","umerus","umquam","una","unde","undique","universe","unus","urbanus","urbs","uredo","usitas","usque","ustilo","ustulo","usus","uter","uterque","utilis","utique","utor","utpote","utrimque","utroque","utrum","uxor","vaco","vacuus","vado","vae","valde","valens","valeo","valetudo","validus","vallum","vapulus","varietas","varius","vehemens","vel","velociter","velum","velut","venia","venio","ventito","ventosus","ventus","venustas","ver","verbera","verbum","vere","verecundia","vereor","vergo","veritas","vero","versus","verto","verumtamen","verus","vesco","vesica","vesper","vespillo","vester","vestigium","vestrum","vetus","via","vicinus","vicissitudo","victoria","victus","videlicet","video","viduata","viduo","vigilo","vigor","vilicus","vilis","vilitas","villa","vinco","vinculum","vindico","vinitor","vinum","vir","virga","virgo","viridis","viriliter","virtus","vis","viscus","vita","vitiosus","vitium","vito","vivo","vix","vobis","vociferor","voco","volaticus","volo","volubilis","voluntarius","volup","volutabrum","volva","vomer","vomica","vomito","vorago","vorax","voro","vos","votum","voveo","vox","vulariter","vulgaris","vulgivagus","vulgo","vulgus","vulnero","vulnus","vulpes","vulticulus","vultuosus","xiphias"]},{}],111:[function(e,t,a){t.exports=["alias","consequatur","aut","perferendis","sit","voluptatem","accusantium","doloremque","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni","dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","dolorem","ipsum","quia","dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut","labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum","exercitationem","ullam","corporis","nemo","enim","ipsam","voluptatem","quia","voluptas","sit","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis","autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","et","iusto","odio","dignissimos","ducimus","qui","blanditiis","praesentium","laudantium","totam","rem","voluptatum","deleniti","atque","corrupti","quos","dolores","et","quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","sed","ut","perspiciatis","unde","omnis","iste","natus","error","similique","sunt","in","culpa","qui","officia","deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et","expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo","porro","quisquam","est","qui","minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus","temporibus","autem","quibusdam","et","aut","consequatur","vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et","voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente","delectus","ut","aut","reiciendis","voluptatibus","maiores","doloribus","asperiores","repellat"]},{}],112:[function(e,t,a){t.exports=["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zula"]; +},{}],113:[function(e,t,a){var i={};t.exports=i,i.first_name=e("./first_name"),i.last_name=e("./last_name"),i.prefix=e("./prefix"),i.suffix=e("./suffix"),i.title=e("./title"),i.name=e("./name")},{"./first_name":112,"./last_name":114,"./name":115,"./prefix":116,"./suffix":117,"./title":118}],114:[function(e,t,a){t.exports=["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Gutmann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Hartmann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","MacGyver","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"]},{}],115:[function(e,t,a){t.exports=["#{prefix} #{first_name} #{last_name}","#{first_name} #{last_name} #{suffix}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{first_name} #{last_name}"]},{}],116:[function(e,t,a){t.exports=["Mr.","Mrs.","Ms.","Miss","Dr."]},{}],117:[function(e,t,a){t.exports=["Jr.","Sr.","I","II","III","IV","V","MD","DDS","PhD","DVM"]},{}],118:[function(e,t,a){t.exports={descriptor:["Lead","Senior","Direct","Corporate","Dynamic","Future","Product","National","Regional","District","Central","Global","Customer","Investor","Dynamic","International","Legacy","Forward","Internal","Human","Chief","Principal"],level:["Solutions","Program","Brand","Security","Research","Marketing","Directives","Implementation","Integration","Functionality","Response","Paradigm","Tactics","Identity","Markets","Group","Division","Applications","Optimization","Operations","Infrastructure","Intranet","Communications","Web","Branding","Quality","Assurance","Mobility","Accounts","Data","Creative","Configuration","Accountability","Interactions","Factors","Usability","Metrics"],job:["Supervisor","Associate","Executive","Liason","Officer","Manager","Engineer","Specialist","Director","Coordinator","Administrator","Architect","Analyst","Designer","Planner","Orchestrator","Technician","Developer","Producer","Consultant","Assistant","Facilitator","Agent","Representative","Strategist"]}},{}],119:[function(e,t,a){t.exports=["###-###-####","(###) ###-####","1-###-###-####","###.###.####","###-###-####","(###) ###-####","1-###-###-####","###.###.####","###-###-#### x###","(###) ###-#### x###","1-###-###-#### x###","###.###.#### x###","###-###-#### x####","(###) ###-#### x####","1-###-###-#### x####","###.###.#### x####","###-###-#### x#####","(###) ###-#### x#####","1-###-###-#### x#####","###.###.#### x#####"]},{}],120:[function(e,t,a){var i={};t.exports=i,i.formats=e("./formats")},{"./formats":119}],121:[function(e,t,a){t.exports=["ants","bats","bears","bees","birds","buffalo","cats","chickens","cattle","dogs","dolphins","ducks","elephants","fishes","foxes","frogs","geese","goats","horses","kangaroos","lions","monkeys","owls","oxen","penguins","people","pigs","rabbits","sheep","tigers","whales","wolves","zebras","banshees","crows","black cats","chimeras","ghosts","conspirators","dragons","dwarves","elves","enchanters","exorcists","sons","foes","giants","gnomes","goblins","gooses","griffins","lycanthropes","nemesis","ogres","oracles","prophets","sorcerors","spiders","spirits","vampires","warlocks","vixens","werewolves","witches","worshipers","zombies","druids"]},{}],122:[function(e,t,a){var i={};t.exports=i,i.creature=e("./creature"),i.name=e("./name")},{"./creature":121,"./name":123}],123:[function(e,t,a){t.exports=["#{Address.state} #{creature}"]},{}],124:[function(e,t,a){var i=function(e){var t=this,a=e.helpers;return t.words=function(t){return"undefined"==typeof t&&(t=3),a.shuffle(e.definitions.lorem.words).slice(0,t)},t.sentence=function(t,a){"undefined"==typeof t&&(t=3),"undefined"==typeof a&&(a=7);var i=e.lorem.words(t+e.random.number(a)).join(" ");return i.charAt(0).toUpperCase()+i.slice(1)+"."},t.sentences=function(t){"undefined"==typeof t&&(t=3);var a=[];for(t;t>0;t--)a.push(e.lorem.sentence());return a.join("\n")},t.paragraph=function(t){return"undefined"==typeof t&&(t=3),e.lorem.sentences(t+e.random.number(3))},t.paragraphs=function(t,a){"undefined"==typeof a&&(a="\n \r"),"undefined"==typeof t&&(t=3);var i=[];for(t;t>0;t--)i.push(e.lorem.paragraph());return i.join(a)},t};t.exports=i},{}],125:[function(e,t,a){function i(e){this.firstName=function(t){return"undefined"!=typeof e.definitions.name.male_first_name&&"undefined"!=typeof e.definitions.name.female_first_name?("number"!=typeof t&&(t=e.random.number(1)),0===t?e.random.arrayElement(e.locales[e.locale].name.male_first_name):e.random.arrayElement(e.locales[e.locale].name.female_first_name)):e.random.arrayElement(e.definitions.name.first_name)},this.lastName=function(t){return"undefined"!=typeof e.definitions.name.male_last_name&&"undefined"!=typeof e.definitions.name.female_last_name?("number"!=typeof t&&(t=e.random.number(1)),0===t?e.random.arrayElement(e.locales[e.locale].name.male_last_name):e.random.arrayElement(e.locales[e.locale].name.female_last_name)):e.random.arrayElement(e.definitions.name.last_name)},this.findName=function(t,a,i){var n,r,s=e.random.number(8);switch("number"!=typeof i&&(i=e.random.number(1)),t=t||e.name.firstName(i),a=a||e.name.lastName(i),s){case 0:if(n=e.name.prefix())return n+" "+t+" "+a;case 1:if(r=e.name.prefix())return t+" "+a+" "+r}return t+" "+a},this.jobTitle=function(){return e.name.jobDescriptor()+" "+e.name.jobArea()+" "+e.name.jobType()},this.prefix=function(){return e.random.arrayElement(e.definitions.name.prefix)},this.suffix=function(){return e.random.arrayElement(e.definitions.name.suffix)},this.title=function(){var t=e.random.arrayElement(e.definitions.name.title.descriptor),a=e.random.arrayElement(e.definitions.name.title.level),i=e.random.arrayElement(e.definitions.name.title.job);return t+" "+a+" "+i},this.jobDescriptor=function(){return e.random.arrayElement(e.definitions.name.title.descriptor)},this.jobArea=function(){return e.random.arrayElement(e.definitions.name.title.level)},this.jobType=function(){return e.random.arrayElement(e.definitions.name.title.job)}}t.exports=i},{}],126:[function(e,t,a){var i=function(e){var t=this;return t.phoneNumber=function(t){return t=t||e.phone.phoneFormats(),e.helpers.replaceSymbolWithNumber(t)},t.phoneNumberFormat=function(t){return t=t||0,e.helpers.replaceSymbolWithNumber(e.definitions.phone_number.formats[t])},t.phoneFormats=function(){return e.random.arrayElement(e.definitions.phone_number.formats)},t};t.exports=i},{}],127:[function(e,t,a){function i(e,t){return t&&(Array.isArray(t)&&t.length?n.seed_array(t):n.seed(t)),this.number=function(e){"number"==typeof e&&(e={max:e}),e=e||{},"undefined"==typeof e.min&&(e.min=0),"undefined"==typeof e.max&&(e.max=99999),"undefined"==typeof e.precision&&(e.precision=1);var t=e.max;t>=0&&(t+=e.precision);var a=e.precision*Math.floor(n.rand(t/e.precision,e.min/e.precision));return a},this.arrayElement=function(t){t=t||["a","b","c"];var a=e.random.number({max:t.length-1});return t[a]},this.objectElement=function(t,a){t=t||{foo:"bar",too:"car"};var i=Object.keys(t),n=e.random.arrayElement(i);return"key"===a?n:t[n]},this.uuid=function(){var e="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",t=function(e){var t=16*Math.random()|0,a="x"==e?t:3&t|8;return a.toString(16)};return e.replace(/[xy]/g,t)},this["boolean"]=function(){return!!e.random.number(1)},this}var n=e("../vendor/mersenne");t.exports=i},{"../vendor/mersenne":129}],128:[function(e,t,a){var i=e("../lib"),n=new i({locale:"en",localeFallback:"en"});n.locales.en=e("../lib/locales/en"),n.locales.en=e("../lib/locales/en"),t.exports=n},{"../lib":37,"../lib/locales/en":104}],129:[function(e,t,a){function i(){function e(e){return 0>e?(e^o)+o:e}function t(t,a){return a>t?e(4294967296-(a-t)&4294967295):t-a}function a(t,a){return e(t+a&4294967295)}function i(t,i){for(var n=0,r=0;32>r;++r)t>>>r&1&&(n=a(n,e(i<m;m++)u[m]=a(i(1812433253,e(u[m-1]^u[m-1]>>>30)),m),u[m]=e(4294967295&u[m])},this.init_by_array=function(r,s){var o,c,m;for(this.init_genrand(19650218),o=1,c=0,m=n>s?n:s;m;m--)u[o]=a(a(e(u[o]^i(e(u[o-1]^u[o-1]>>>30),1664525)),r[c]),c),u[o]=e(4294967295&u[o]),o++,c++,o>=n&&(u[0]=u[n-1],o=1),c>=s&&(c=0);for(m=n-1;m;m--)u[o]=t(e((dbg=u[o])^i(e(u[o-1]^u[o-1]>>>30),1566083941)),o),u[o]=e(4294967295&u[o]),o++,o>=n&&(u[0]=u[n-1],o=1);u[0]=2147483648};var f=[0,s];this.genrand_int32=function(){var t;if(m>=n){var a;for(m==n+1&&this.init_genrand(5489),a=0;n-r>a;a++)t=e(u[a]&o|u[a+1]&c),u[a]=e(u[a+r]^t>>>1^f[1&t]);for(;n-1>a;a++)t=e(u[a]&o|u[a+1]&c),u[a]=e(u[a+(r-n)]^t>>>1^f[1&t]);t=e(u[n-1]&o|u[0]&c),u[n-1]=e(u[r-1]^t>>>1^f[1&t]),m=0}return t=u[m++],t=e(t^t>>>11),t=e(t^t<<7&2636928640),t=e(t^t<<15&4022730752),t=e(t^t>>>18)},this.genrand_int31=function(){return this.genrand_int32()>>>1},this.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},this.genrand_real2=function(){return this.genrand_int32()*(1/4294967296)},this.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},this.genrand_res53=function(){var e=this.genrand_int32()>>>5,t=this.genrand_int32()>>>6;return(67108864*e+t)*(1/9007199254740992)}}a.MersenneTwister19937=i;var n=new i;n.init_genrand((new Date).getTime()%1e9),a.rand=function(e,t){return void 0===e&&(t=0,e=32768),Math.floor(n.genrand_real2()*(e-t)+t)},a.seed=function(e){if("number"!=typeof e)throw new Error("seed(S) must take numeric argument; is "+typeof e);n.init_genrand(e)},a.seed_array=function(e){if("object"!=typeof e)throw new Error("seed_array(A) must take array of numbers; is "+typeof e);n.init_by_array(e)}},{}],130:[function(e,t,a){!function(e){var i,n,r,s,o;r=/[a-zA-Z]$/,o=/[aeiouAEIOU]$/,n=/[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]$/,i=e.localPasswordGeneratorLibraryName||"generatePassword",s=function(e,t,a,i){var r,c;return null==e&&(e=10),null==t&&(t=!0),null==a&&(a=/\w/),null==i&&(i=""),i.length>=e?i:(t&&(a=i.match(n)?o:n),c=Math.floor(94*Math.random())+33,r=String.fromCharCode(c),t&&(r=r.toLowerCase()),r.match(a)?s(e,t,a,""+i+r):s(e,t,a,i))},("undefined"!=typeof a?a:e)[i]=s,"undefined"!=typeof a&&"undefined"!=typeof t&&t.exports&&(t.exports=s)}(this)},{}],131:[function(e,t,a){function i(e,t){if(e=e||0,t=t||100,"number"==typeof t&&"number"==typeof e)return function(e,t){if(e>t)throw new RangeError("expected min <= max; got min = "+e+", max = "+t);return Math.floor(Math.random()*(t-e+1))+e}(e,t);if("[object Array]"===Object.prototype.toString.call(e))return e[Math.floor(Math.random()*e.length)];if(e&&"object"==typeof e)return function(e){var t,a,n=i(0,100)/100,r=0,s=0;for(t in e)if(e.hasOwnProperty(t)){if(s=e[t]+r,a=t,n>=r&&s>=n)break;r+=e[t]}return a}(e);throw new TypeError("Invalid arguments passed to rnd. ("+(t?e+", "+t:e)+")")}function n(){return i(["AB","AF","AN","AR","AS","AZ","BE","BG","BN","BO","BR","BS","CA","CE","CO","CS","CU","CY","DA","DE","EL","EN","EO","ES","ET","EU","FA","FI","FJ","FO","FR","FY","GA","GD","GL","GV","HE","HI","HR","HT","HU","HY","ID","IS","IT","JA","JV","KA","KG","KO","KU","KW","KY","LA","LB","LI","LN","LT","LV","MG","MK","MN","MO","MS","MT","MY","NB","NE","NL","NN","NO","OC","PL","PT","RM","RO","RU","SC","SE","SK","SL","SO","SQ","SR","SV","SW","TK","TR","TY","UK","UR","UZ","VI","VO","YI","ZH"])}function r(){var e=i({chrome:.45132810566,iexplorer:.27477061836,firefox:.19384170608,safari:.06186781118,opera:.01574236955}),t={chrome:{win:.89,mac:.09,lin:.02},firefox:{win:.83,mac:.16,lin:.01},opera:{win:.91,mac:.03,lin:.06},safari:{win:.04,mac:.96},iexplorer:["win"]};return[e,i(t[e])]}function s(e){var t={lin:["i686","x86_64"],mac:{Intel:.48,PPC:.01,"U; Intel":.48,"U; PPC":.01},win:["","WOW64","Win64; x64"]};return i(t[e])}function o(e){for(var t="",a=0;e>a;a++)t+="."+i(0,9);return t}var c={net:function(){return[i(1,4),i(0,9),i(1e4,99999),i(0,9)].join(".")},nt:function(){return i(5,6)+"."+i(0,3)},ie:function(){return i(7,11)},trident:function(){return i(3,7)+"."+i(0,1)},osx:function(e){return[10,i(5,10),i(0,9)].join(e||".")},chrome:function(){return[i(13,39),0,i(800,899),0].join(".")},presto:function(){return"2.9."+i(160,190)},presto2:function(){return i(10,12)+".00"},safari:function(){return i(531,538)+"."+i(0,2)+"."+i(0,2)}},u={firefox:function(e){var t=i(5,15)+o(2),a="Gecko/20100101 Firefox/"+t,n=s(e),r="win"===e?"(Windows NT "+c.nt()+(n?"; "+n:""):"mac"===e?"(Macintosh; "+n+" Mac OS X "+c.osx():"(X11; Linux "+n;return"Mozilla/5.0 "+r+"; rv:"+t.slice(0,-2)+") "+a},iexplorer:function(){var e=c.ie();return e>=11?"Mozilla/5.0 (Windows NT 6."+i(1,3)+"; Trident/7.0; "+i(["Touch; ",""])+"rv:11.0) like Gecko":"Mozilla/5.0 (compatible; MSIE "+e+".0; Windows NT "+c.nt()+"; Trident/"+c.trident()+(1===i(0,1)?"; .NET CLR "+c.net():"")+")"},opera:function(e){var t=" Presto/"+c.presto()+" Version/"+c.presto2()+")",a="win"===e?"(Windows NT "+c.nt()+"; U; "+n()+t:"lin"===e?"(X11; Linux "+s(e)+"; U; "+n()+t:"(Macintosh; Intel Mac OS X "+c.osx()+" U; "+n()+" Presto/"+c.presto()+" Version/"+c.presto2()+")";return"Opera/"+i(9,14)+"."+i(0,99)+" "+a},safari:function m(e){var m=c.safari(),t=i(4,7)+"."+i(0,1)+"."+i(0,10),a="mac"===e?"(Macintosh; "+s("mac")+" Mac OS X "+c.osx("_")+" rv:"+i(2,6)+".0; "+n()+") ":"(Windows; U; Windows NT "+c.nt()+")";return"Mozilla/5.0 "+a+"AppleWebKit/"+m+" (KHTML, like Gecko) Version/"+t+" Safari/"+m},chrome:function(e){var t=c.safari(),a="mac"===e?"(Macintosh; "+s("mac")+" Mac OS X "+c.osx("_")+") ":"win"===e?"(Windows; U; Windows NT "+c.nt()+")":"(X11; Linux "+s(e);return"Mozilla/5.0 "+a+" AppleWebKit/"+t+" (KHTML, like Gecko) Chrome/"+c.chrome()+" Safari/"+t}};a.generate=function(){var e=r();return u[e[0]](e[1])}},{}],132:[function(e,t,a){a.read=function(e,t,a,i,n){var r,s,o=8*n-i-1,c=(1<>1,m=-7,f=a?n-1:0,p=a?-1:1,l=e[t+f];for(f+=p,r=l&(1<<-m)-1,l>>=-m,m+=o;m>0;r=256*r+e[t+f],f+=p,m-=8);for(s=r&(1<<-m)-1,r>>=-m,m+=i;m>0;s=256*s+e[t+f],f+=p,m-=8);if(0===r)r=1-u;else{if(r===c)return s?NaN:(l?-1:1)*(1/0);s+=Math.pow(2,i),r-=u}return(l?-1:1)*s*Math.pow(2,r-i)},a.write=function(e,t,a,i,n,r){var s,o,c,u=8*r-n-1,m=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,l=i?0:r-1,h=i?1:-1,d=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,s=m):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),t+=s+f>=1?p/c:p*Math.pow(2,1-f),t*c>=2&&(s++,c/=2),s+f>=m?(o=0,s=m):s+f>=1?(o=(t*c-1)*Math.pow(2,n),s+=f):(o=t*Math.pow(2,f-1)*Math.pow(2,n),s=0));n>=8;e[a+l]=255&o,l+=h,o/=256,n-=8);for(s=s<0;e[a+l]=255&s,l+=h,s/=256,u-=8);e[a+l-h]|=128*d}},{}],133:[function(e,t,a){t.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},{}],134:[function(e,t,a){!function(a){"use strict";var i,n=a.Base64,r="2.1.9";if("undefined"!=typeof t&&t.exports)try{i=e("buffer").Buffer}catch(s){}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=function(e){for(var t={},a=0,i=e.length;i>a;a++)t[e.charAt(a)]=a;return t}(o),u=String.fromCharCode,m=function(e){if(e.length<2){var t=e.charCodeAt(0);return 128>t?e:2048>t?u(192|t>>>6)+u(128|63&t):u(224|t>>>12&15)+u(128|t>>>6&63)+u(128|63&t)}var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return u(240|t>>>18&7)+u(128|t>>>12&63)+u(128|t>>>6&63)+u(128|63&t)},f=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,p=function(e){return e.replace(f,m)},l=function(e){var t=[0,2,1][e.length%3],a=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0),i=[o.charAt(a>>>18),o.charAt(a>>>12&63),t>=2?"=":o.charAt(a>>>6&63),t>=1?"=":o.charAt(63&a)];return i.join("")},h=a.btoa?function(e){return a.btoa(e)}:function(e){return e.replace(/[\s\S]{1,3}/g,l)},d=i?function(e){return(e.constructor===i.constructor?e:new i(e)).toString("base64")}:function(e){return h(p(e))},g=function(e,t){return t?d(String(e)).replace(/[+\/]/g,function(e){return"+"==e?"-":"_"}).replace(/=/g,""):d(String(e))},w=function(e){return g(e,!0)},y=new RegExp(["[À-ß][€-¿]","[à-ï][€-¿]{2}","[ð-÷][€-¿]{3}"].join("|"),"g"),b=function(e){switch(e.length){case 4:var t=(7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3),a=t-65536;return u((a>>>10)+55296)+u((1023&a)+56320);case 3:return u((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return u((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},v=function(e){return e.replace(y,b)},j=function(e){var t=e.length,a=t%4,i=(t>0?c[e.charAt(0)]<<18:0)|(t>1?c[e.charAt(1)]<<12:0)|(t>2?c[e.charAt(2)]<<6:0)|(t>3?c[e.charAt(3)]:0),n=[u(i>>>16),u(i>>>8&255),u(255&i)];return n.length-=[0,0,2,1][a],n.join("")},z=a.atob?function(e){return a.atob(e)}:function(e){return e.replace(/[\s\S]{1,4}/g,j)},E=i?function(e){return(e.constructor===i.constructor?e:new i(e,"base64")).toString()}:function(e){return v(z(e))},A=function(e){return E(String(e).replace(/[-_]/g,function(e){return"-"==e?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))},x=function(){var e=a.Base64;return a.Base64=n,e};if(a.Base64={VERSION:r,atob:z,btoa:h,fromBase64:A,toBase64:g,utob:p,encode:g,encodeURI:w,btou:v,decode:A,noConflict:x},"function"==typeof Object.defineProperty){var S=function(e){return{value:e,enumerable:!1,writable:!0,configurable:!0}};a.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",S(function(){return A(this)})),Object.defineProperty(String.prototype,"toBase64",S(function(e){return g(this,e)})),Object.defineProperty(String.prototype,"toBase64URI",S(function(){return g(this,!0)}))}}a.Meteor&&(Base64=a.Base64)}(this)},{buffer:15}],135:[function(e,t,a){"use strict";function i(e){return"enum"===e||"required"===e||"definitions"===e}function n(e,t,a){var n=m();try{var r=100;return s(n(e,t,a),[],function f(e){if(!r)return delete e.$ref,delete e.oneOf,delete e.anyOf,delete e.allOf,e;if("string"==typeof e.$ref){var t=e.$ref;delete e.$ref,r--,u(e,n.util.findByRef(t,n.refs))}if(Array.isArray(e.allOf)){var a=e.allOf;delete e.allOf,a.forEach(function(t){u(e,f(t))})}if(Array.isArray(e.oneOf||e.anyOf)){var s=e.oneOf||e.anyOf;delete e.anyOf,delete e.oneOf,u(e,c.pick(s))}for(var o in e)!Array.isArray(e[o])&&"object"!=typeof e[o]||i(o)||(e[o]=f(e[o]));return e})}catch(o){throw o.path?new Error(o.message+" in /"+o.path.join("/")):o}}var r=e("./util/container"),s=e("./util/traverse"),o=e("./util/formats"),c=e("./util/random"),u=e("./util/merge"),m=e("deref");n.formats=o,n.extend=r.set,t.exports=n},{"./util/container":143,"./util/formats":145,"./util/merge":148,"./util/random":150,"./util/traverse":151,deref:21}],136:[function(e,t,a){"use strict";function i(e,t,a,i,n){function s(e){var t=JSON.stringify(e);-1===c.indexOf(t)&&(c.push(t),o.push(e))}var o=[],c=[];t.forEach(s);for(var u=100;o.length!==t.length&&(s(r(a.items||i,e,n)),u--););return o}var n=e("../util/random"),r=e("../util/traverse"),s=e("../util/has-props"),o=e("../util/error");t.exports=function(e,t,a){var c=[];if(!e.items&&!e.additionalItems){if(s(e,"minItems","maxItems","uniqueItems"))throw new o("missing items for "+JSON.stringify(e),t);return c}if(Array.isArray(e.items))return Array.prototype.concat.apply(c,e.items.map(function(e,i){return r(e,t.concat(["items",i]),a)}));for(var u=n(e.minItems,e.maxItems,1,5),m="object"==typeof e.additionalItems?e.additionalItems:{},f=c.length;u>f;f+=1)c.push(r(e.items||m,t.concat(["items",f]),a));return e.uniqueItems?i(t.concat(["items"]),c,e,m,a):c}},{"../util/error":144,"../util/has-props":146,"../util/random":150,"../util/traverse":151}],137:[function(e,t,a){"use strict";t.exports=function(){return Math.random()>.5}},{}],138:[function(e,t,a){"use strict";var i=e("./number");t.exports=function(e){e.hasPrecision=!1;var t=i(e);return t>0?Math.floor(t):Math.ceil(t)}},{"./number":140}],139:[function(e,t,a){"use strict";t.exports=function(){return null}},{}],140:[function(e,t,a){"use strict";var i=-1e8,n=1e8,r=e("./string"),s=e("../util/random");t.exports=function(e){if(e.faker||e.chance)return r(e);var t="undefined"==typeof e.minimum?i:e.minimum,a="undefined"==typeof e.maximum?n:e.maximum;if(e.exclusiveMinimum&&e.minimum&&(t+=1),e.exclusiveMaximum&&e.maximum&&(a-=1),e.multipleOf){for(var o=s(Math.floor(t/e.multipleOf),Math.floor(a/e.multipleOf))*e.multipleOf;t>o;)o+=e.multipleOf;return o}return e.hasPrecision?s(!1,t,a):s(Math.random()>.5,t,a)}},{"../util/random":150,"./string":142}],141:[function(e,t,a){"use strict";var i=e("../util/container"),n=e("../util/random"),r=e("../util/traverse"),s=e("../util/has-props"),o=i.get("faker"),c=i.get("randexp"),u=c.randexp,m=e("../util/error");t.exports=function(e,t,a){var i={};if(!(e.properties||e.patternProperties||e.additionalProperties)){if(s(e,"minProperties","maxProperties","dependencies","required"))throw new m("missing properties for "+JSON.stringify(e),t);return i}var c=e.required||[],f=e.properties?Object.keys(e.properties):[];c.forEach(function(t){e.properties&&e.properties[t]&&(i[t]=e.properties[t])});var p=f.filter(function(e){return-1===c.indexOf(e)});e.patternProperties&&(p=Array.prototype.concat.apply(p,Object.keys(e.patternProperties)));var l=n(e.minProperties,e.maxProperties,0,p.length);n.shuffle(p).slice(0,l).forEach(function(t){e.properties&&e.properties[t]?i[t]=e.properties[t]:i[u(t)]=e.patternProperties[t]});var h=Object.keys(i).length,d="object"==typeof e.additionalProperties?e.additionalProperties:{};return l>h&&o.lorem.words(l-h).forEach(function(e){i[e+u("\\w{1,10}")]=d}),r(i,t.concat(["properties"]),a)}},{"../util/container":143,"../util/error":144,"../util/has-props":146,"../util/random":150,"../util/traverse":151}],142:[function(e,t,a){"use strict";function i(e,t){for(var a=t.split(".");a.length;){var i=a.shift();if(!e[i])break;e=e[i]}return e}function n(e){if(e.use){var t=[],a=e.key;"object"==typeof a&&(a=Object.keys(a)[0],Array.isArray(e.key[a])?t=e.key[a]:t.push(e.key[a]));var n=i(e.gen,a);if("function"!=typeof n)throw new Error("unknown "+e.use+"-generator for "+JSON.stringify(e.key));return n.apply(e.gen,t)}switch(e.format){case"date-time":return new Date(m(0,1e14)).toISOString();case"email":case"hostname":case"ipv6":case"uri":return u(p[e.format]).replace(/\{(\w+)\}/,function(e,t){return u(p[t])});case"ipv4":return[0,0,0,0].map(function(){return m(0,255)}).join(".");default:var r=f(e.format);if("function"!=typeof r)throw new Error("unknown generator for "+JSON.stringify(e.format));var c={faker:s,chance:o,randexp:u};return r(c,e)}}var r=e("../util/container"),s=r.get("faker"),o=r.get("chance"),c=r.get("randexp"),u=c.randexp,m=e("../util/random"),f=e("../util/formats"),p={email:"[a-zA-Z\\d][a-zA-Z\\d-]{1,13}[a-zA-Z\\d]@{hostname}",hostname:"[a-zA-Z]{1,33}\\.[a-z]{2,4}",ipv6:"[abcdef\\d]{4}(:[abcdef\\d]{4}){7}",uri:"[a-zA-Z][a-zA-Z0-9+-.]*"};t.exports=function(e){if(e.faker||e.chance)return n({use:e.faker?"faker":"chance",gen:e.faker?s:o,key:e.faker||e.chance});if(e.format)return n(e);if(e.pattern)return u(e.pattern);if(e.minLength||e.maxLength){var t=Math.max(0,e.minLength||0),a=m(t,e.maxLength);return u(".{"+t+","+a+"}")}return s.lorem.words(m(1,5)).join(" ")}},{"../util/container":143,"../util/formats":145,"../util/random":150}],143:[function(e,t,a){"use strict";var i=e("chance"),n={faker:e("faker"),chance:new i,randexp:e("randexp")};t.exports={set:function(e,t){if("undefined"==typeof n[e])throw new ReferenceError('"'+e+"\" dependency doesn't exist.");n[e]=t(n[e])},get:function(e){return n[e]}}},{chance:17,faker:128,randexp:164}],144:[function(e,t,a){"use strict";function i(e,t){this.message=e,this.path=t,this.name="ParseError"}i.prototype=Error.prototype,t.exports=i},{}],145:[function(e,t,a){"use strict";var i={};t.exports=function(e,t){if(t)i[e]=t;else if("object"==typeof e)for(var a in e)i[a]=e[a];else if(e)return i[e];return i}},{}],146:[function(e,t,a){"use strict";t.exports=function(e){return Array.prototype.slice.call(arguments,1).filter(function(t){return"undefined"!=typeof e[t]}).length>0}},{}],147:[function(e,t,a){"use strict";function i(e,t,a){return Object.keys(e).filter(function(e){return a.indexOf(e)>-1&&-1===r.indexOf(t[t.length-1])?!0:void 0}).length>0}var n={array:["additionalItems","items","maxItems","minItems","uniqueItems"],integer:["exclusiveMaximum","exclusiveMinimum","maximum","minimum","multipleOf"],object:["additionalProperties","dependencies","maxProperties","minProperties","patternProperties","properties","required"],string:["maxLength","menlength","pattern"]},r=["additionalItems","items","additionalProperties","dependencies","patternProperties","properties"];n.number=n.integer,t.exports=function(e,t){for(var a in n)if(i(e,t,n[a]))return a}},{}],148:[function(e,t,a){"use strict";function i(e){var t=[];return e.forEach(function(e,a){"object"==typeof e&&null!==e?t[a]=Array.isArray(e)?i(e):n({},e):t[a]=e}),t}var n;n=t.exports=function(e,t){for(var a in t)"object"!=typeof t[a]||null===t[a]?e[a]=t[a]:Array.isArray(t[a])?e[a]=(e[a]||[]).concat(i(t[a])):"object"!=typeof e[a]||null===e[a]||Array.isArray(e[a])?e[a]=n({},t[a]):e[a]=n(e[a],t[a]);return e}},{}],149:[function(e,t,a){"use strict";t.exports={array:e("../types/array"),"boolean":e("../types/boolean"),integer:e("../types/integer"),number:e("../types/number"),"null":e("../types/null"),object:e("../types/object"),string:e("../types/string")}},{"../types/array":136,"../types/boolean":137,"../types/integer":138,"../types/null":139,"../types/number":140,"../types/object":141,"../types/string":142}],150:[function(e,t,a){"use strict";var i=e("./container"),n=i.get("faker"),r=t.exports=function(e,t,a,i){var s=!0;return"boolean"==typeof e&&(s=e,e=arguments[1],t=arguments[2],a=arguments[3],i=arguments[4]),a="undefined"==typeof a?r.MIN_NUMBER:a,i="undefined"==typeof i?r.MAX_NUMBER:i,e="undefined"==typeof e?a:e,t="undefined"==typeof t?i:t,e>t&&(t+=e),n.random.number({min:e,max:t,precision:s?1:Math.random()})};r.shuffle=function(e){for(var t=e.slice(),a=e.length;a>0;){var i=Math.floor(Math.random()*a),n=t[--a];t[a]=t[i],t[i]=n}return t},r.pick=function(e){return e[Math.floor(Math.random()*e.length)]},r.MIN_NUMBER=-100,r.MAX_NUMBER=100},{"./container":143}],151:[function(e,t,a){"use strict";function i(e,t,a){a(e);var c={};if(Array.isArray(e)&&(c=[]),Array.isArray(e["enum"]))return n.pick(e["enum"]);var u=e.type;if(Array.isArray(u)?u=n.pick(u):"undefined"==typeof u&&(u=s(e,t)||u),"string"==typeof u){if(!o[u])throw new r("unknown primitive "+JSON.stringify(u),t.concat(["type"]));try{return o[u](e,t,a)}catch(m){if("undefined"==typeof m.path)throw new r(m.message,t);throw m}}for(var f in e)"object"==typeof e[f]&&"definitions"!==f?c[f]=i(e[f],t.concat([f]),a):c[f]=e[f];return c}var n=e("./random"),r=e("./error"),s=e("./inferred"),o=null;t.exports=function(){return o=o||e("./primitives"),i.apply(null,arguments)}},{"./error":144,"./inferred":147,"./primitives":149,"./random":150}],152:[function(e,t,a){function i(e,t,a){if(null!=e){void 0!==a&&a in n(e)&&(t=[a]);for(var i=0,r=t.length;null!=e&&r>i;)e=e[t[i++]];return i&&i==r?e:void 0}}function n(e){return r(e)?e:Object(e)}function r(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}t.exports=i},{}],153:[function(e,t,a){function i(e){return null==e?"":e+""}function n(e){if(r(e))return e;var t=[];return i(e).replace(s,function(e,a,i,n){t.push(i?n.replace(o,"$1"):a||e)}),t}var r=e("lodash.isarray"),s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,o=/\\(\\)?/g;t.exports=n},{"lodash.isarray":155}],154:[function(e,t,a){function i(e,t,a){var i=null==e?void 0:n(e,r(t),t+"");return void 0===i?a:i}var n=e("lodash._baseget"),r=e("lodash._topath");t.exports=i},{"lodash._baseget":152,"lodash._topath":153}],155:[function(e,t,a){function i(e){return!!e&&"object"==typeof e}function n(e,t){var a=null==e?void 0:e[t];return c(a)?a:void 0; +}function r(e){return"number"==typeof e&&e>-1&&e%1==0&&y>=e}function s(e){return o(e)&&d.call(e)==m}function o(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function c(e){return null==e?!1:s(e)?g.test(l.call(e)):i(e)&&f.test(e)}var u="[object Array]",m="[object Function]",f=/^\[object .+?Constructor\]$/,p=Object.prototype,l=Function.prototype.toString,h=p.hasOwnProperty,d=p.toString,g=RegExp("^"+l.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),w=n(Array,"isArray"),y=9007199254740991,b=w||function(e){return i(e)&&r(e.length)&&d.call(e)==u};t.exports=b},{}],156:[function(e,t,a){function i(e){if(e=""+e,!(e.length>1e4)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var a=parseFloat(t[1]),i=(t[2]||"ms").toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return a*f;case"days":case"day":case"d":return a*m;case"hours":case"hour":case"hrs":case"hr":case"h":return a*u;case"minutes":case"minute":case"mins":case"min":case"m":return a*c;case"seconds":case"second":case"secs":case"sec":case"s":return a*o;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a}}}}function n(e){return e>=m?Math.round(e/m)+"d":e>=u?Math.round(e/u)+"h":e>=c?Math.round(e/c)+"m":e>=o?Math.round(e/o)+"s":e+"ms"}function r(e){return s(e,m,"day")||s(e,u,"hour")||s(e,c,"minute")||s(e,o,"second")||e+" ms"}function s(e,t,a){return t>e?void 0:1.5*t>e?Math.floor(e/t)+" "+a:Math.ceil(e/t)+" "+a+"s"}var o=1e3,c=60*o,u=60*c,m=24*u,f=365.25*m;t.exports=function(e,t){return t=t||{},"string"==typeof e?i(e):t["long"]?r(e):n(e)}},{}],157:[function(t,a,i){(function(t){!function(t,i,n){i[t]=i[t]||n(),"undefined"!=typeof a&&a.exports?a.exports=i[t]:"function"==typeof e&&e.amd&&e(function(){return i[t]})}("Promise","undefined"!=typeof t?t:this,function(){"use strict";function e(e,t){p.add(e,t),f||(f=h(p.drain))}function t(e){var t,a=typeof e;return null==e||"object"!=a&&"function"!=a||(t=e.then),"function"==typeof t?t:!1}function a(){for(var e=0;e0&&e(a,c))}catch(u){r.call(new o(c),u)}}}function r(t){var i=this;i.triggered||(i.triggered=!0,i.def&&(i=i.def),i.msg=t,i.state=2,i.chain.length>0&&e(a,i))}function s(e,t,a,i){for(var n=0;n1)for(var a=1;a1&&(i=a[0]+"@",e=a[1]),e=e.replace(P,".");var n=e.split("."),r=s(n,t).join(".");return i+r}function c(e){for(var t,a,i=[],n=0,r=e.length;r>n;)t=e.charCodeAt(n++),t>=55296&&56319>=t&&r>n?(a=e.charCodeAt(n++),56320==(64512&a)?i.push(((1023&t)<<10)+(1023&a)+65536):(i.push(t),n--)):i.push(t);return i}function u(e){return s(e,function(e){var t="";return e>65535&&(e-=65536,t+=L(e>>>10&1023|55296),e=56320|1023&e),t+=L(e)}).join("")}function m(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:E}function f(e,t){return e+22+75*(26>e)-((0!=t)<<5)}function p(e,t,a){var i=0;for(e=a?O(e/_):e>>1,e+=O(e/t);e>T*x>>1;i+=E)e=O(e/T);return O(i+(T+1)*e/(e+S))}function l(e){var t,a,i,n,s,o,c,f,l,h,d=[],g=e.length,w=0,y=R,b=M;for(a=e.lastIndexOf(k),0>a&&(a=0),i=0;a>i;++i)e.charCodeAt(i)>=128&&r("not-basic"),d.push(e.charCodeAt(i));for(n=a>0?a+1:0;g>n;){for(s=w,o=1,c=E;n>=g&&r("invalid-input"),f=m(e.charCodeAt(n++)),(f>=E||f>O((z-w)/o))&&r("overflow"),w+=f*o,l=b>=c?A:c>=b+x?x:c-b,!(l>f);c+=E)h=E-l,o>O(z/h)&&r("overflow"),o*=h;t=d.length+1,b=p(w-s,t,0==s),O(w/t)>z-y&&r("overflow"),y+=O(w/t),w%=t,d.splice(w++,0,y)}return u(d)}function h(e){var t,a,i,n,s,o,u,m,l,h,d,g,w,y,b,v=[];for(e=c(e),g=e.length,t=R,a=0,s=M,o=0;g>o;++o)d=e[o],128>d&&v.push(L(d));for(i=n=v.length,n&&v.push(k);g>i;){for(u=z,o=0;g>o;++o)d=e[o],d>=t&&u>d&&(u=d);for(w=i+1,u-t>O((z-a)/w)&&r("overflow"),a+=(u-t)*w,t=u,o=0;g>o;++o)if(d=e[o],t>d&&++a>z&&r("overflow"),d==t){for(m=a,l=E;h=s>=l?A:l>=s+x?x:l-s,!(h>m);l+=E)b=m-h,y=E-h,v.push(L(f(h+b%y,0))),m=O(b/y);v.push(L(f(m,0))),s=p(a,w,i==n),a=0,++i}++a,++t}return v.join("")}function d(e){return o(e,function(e){return C.test(e)?l(e.slice(4).toLowerCase()):e})}function g(e){return o(e,function(e){return D.test(e)?"xn--"+h(e):e})}var w="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof a&&a&&!a.nodeType&&a,b="object"==typeof t&&t;(b.global===b||b.window===b||b.self===b)&&(n=b);var v,j,z=2147483647,E=36,A=1,x=26,S=38,_=700,M=72,R=128,k="-",C=/^xn--/,D=/[^\x20-\x7E]/,P=/[\x2E\u3002\uFF0E\uFF61]/g,I={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},T=E-A,O=Math.floor,L=String.fromCharCode;if(v={version:"1.3.2",ucs2:{decode:c,encode:u},decode:l,encode:h,toASCII:g,toUnicode:d},"function"==typeof e&&"object"==typeof e.amd&&e.amd)e("punycode",function(){return v});else if(w&&y)if(a.exports==w)y.exports=v;else for(j in v)v.hasOwnProperty(j)&&(w[j]=v[j]);else n.punycode=v}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],161:[function(e,t,a){"use strict";function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,a,r){t=t||"&",a=a||"=";var s={};if("string"!=typeof e||0===e.length)return s;var o=/\+/g;e=e.split(t);var c=1e3;r&&"number"==typeof r.maxKeys&&(c=r.maxKeys);var u=e.length;c>0&&u>c&&(u=c);for(var m=0;u>m;++m){var f,p,l,h,d=e[m].replace(o,"%20"),g=d.indexOf(a);g>=0?(f=d.substr(0,g),p=d.substr(g+1)):(f=d,p=""),l=decodeURIComponent(f),h=decodeURIComponent(p),i(s,l)?n(s[l])?s[l].push(h):s[l]=[s[l],h]:s[l]=h}return s};var n=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],162:[function(e,t,a){"use strict";function i(e,t){if(e.map)return e.map(t);for(var a=[],i=0;i=97&&122>=e?-32:e>=65&&90>=e?32:0)}function n(){return!this.randInt(0,1)}function r(e){return e instanceof u?e.index(this.randInt(0,e.length-1)):e[this.randInt(0,e.length-1)]}function s(e){if(e.type===c.types.CHAR)return new u(e.value);if(e.type===c.types.RANGE)return new u(e.from,e.to);if(e.type===c.types.SET){for(var t=new u,a=0;af;f++)c+=o.call(this,a[f],t);return e.remember&&(t[e.groupNumber]=c),c;case m.POSITION:return"";case m.SET:var l=s.call(this,e);return l.length?String.fromCharCode(r.call(this,l)):"";case m.REPETITION:for(u=this.randInt(e.min,e.max===1/0?e.min+this.max:e.max),c="",f=0;u>f;f++)c+=o.call(this,e.value,t);return c;case m.REFERENCE:return t[e.value-1]||"";case m.CHAR:var h=this.ignoreCase&&n.call(this)?i(e.value):e.value;return String.fromCharCode(h)}}var c=e("ret"),u=e("discontinuous-range"),m=c.types,f=t.exports=function(e,t){if(this.defaultRange=this.defaultRange.clone(),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,"number"==typeof e.max&&(this.max=e.max),e=e.source;else{if("string"!=typeof e)throw new Error("Expected a regexp or string");this.ignoreCase=t&&-1!==t.indexOf("i"),this.multiline=t&&-1!==t.indexOf("m")}this.tokens=c(e)};f.prototype.max=100,f.prototype.gen=function(){return o.call(this,this.tokens,[])},f.randexp=function(e,t){var a;return void 0===e._randexp?(a=new f(e,t),e._randexp=a):(a=e._randexp,"number"==typeof e.max&&(a.max=e.max),e.defaultRange instanceof u&&(a.defaultRange=e.defaultRange),"function"==typeof e.randInt&&(a.randInt=e.randInt)),a.gen()},f.sugar=function(){RegExp.prototype.gen=function(){return f.randexp(this)}},f.prototype.defaultRange=new u(32,126),f.prototype.randInt=function(e,t){return e+Math.floor(Math.random()*(1+t-e))}},{"discontinuous-range":27,ret:165}],165:[function(e,t,a){var i=e("./util"),n=e("./types"),r=e("./sets"),s=e("./positions");t.exports=function(e){var t,a,o=0,c={type:n.ROOT,stack:[]},u=c,m=c.stack,f=[],p=function(t){i.error(e,"Nothing to repeat at column "+(t-1))},l=i.strToChars(e);for(t=l.length;t>o;)switch(a=l[o++]){case"\\":switch(a=l[o++]){case"b":m.push(s.wordBoundary());break;case"B":m.push(s.nonWordBoundary());break;case"w":m.push(r.words());break;case"W":m.push(r.notWords());break;case"d":m.push(r.ints());break;case"D":m.push(r.notInts());break;case"s":m.push(r.whitespace());break;case"S":m.push(r.notWhitespace());break;default:/\d/.test(a)?m.push({type:n.REFERENCE,value:parseInt(a,10)}):m.push({type:n.CHAR,value:a.charCodeAt(0)})}break;case"^":m.push(s.begin());break;case"$":m.push(s.end());break;case"[":var h;"^"===l[o]?(h=!0,o++):h=!1;var d=i.tokenizeClass(l.slice(o),e);o+=d[1],m.push({type:n.SET,set:d[0],not:h});break;case".":m.push(r.anyChar());break;case"(":var g={type:n.GROUP,stack:[],remember:!0};a=l[o],"?"===a&&(a=l[o+1],o+=2,"="===a?g.followedBy=!0:"!"===a?g.notFollowedBy=!0:":"!==a&&i.error(e,"Invalid group, character '"+a+"' after '?' at column "+(o-1)),g.remember=!1),m.push(g),f.push(u),u=g,m=g.stack;break;case")":0===f.length&&i.error(e,"Unmatched ) at column "+(o-1)),u=f.pop(),m=u.options?u.options[u.options.length-1]:u.stack;break;case"|":u.options||(u.options=[u.stack],delete u.stack);var w=[];u.options.push(w),m=w;break;case"{":var y,b,v=/^(\d+)(,(\d+)?)?\}/.exec(l.slice(o));null!==v?(y=parseInt(v[1],10),b=v[2]?v[3]?parseInt(v[3],10):1/0:y,o+=v[0].length,m.push({type:n.REPETITION,min:y,max:b,value:m.pop()})):m.push({type:n.CHAR,value:123});break;case"?":0===m.length&&p(o),m.push({type:n.REPETITION,min:0,max:1,value:m.pop()});break;case"+":0===m.length&&p(o),m.push({type:n.REPETITION,min:1,max:1/0,value:m.pop()});break;case"*":0===m.length&&p(o),m.push({type:n.REPETITION,min:0,max:1/0,value:m.pop()});break;default:m.push({type:n.CHAR,value:a.charCodeAt(0)})}return 0!==f.length&&i.error(e,"Unterminated group"),c},t.exports.types=n},{"./positions":166,"./sets":167,"./types":168,"./util":169}],166:[function(e,t,a){var i=e("./types");a.wordBoundary=function(){return{type:i.POSITION,value:"b"}},a.nonWordBoundary=function(){return{type:i.POSITION,value:"B"}},a.begin=function(){return{type:i.POSITION,value:"^"}},a.end=function(){return{type:i.POSITION,value:"$"}}},{"./types":168}],167:[function(e,t,a){var i=e("./types"),n=function(){return[{type:i.RANGE,from:48,to:57}]},r=function(){return[{type:i.CHAR,value:95},{type:i.RANGE,from:97,to:122},{type:i.RANGE,from:65,to:90}].concat(n())},s=function(){return[{type:i.CHAR,value:9},{type:i.CHAR,value:10},{type:i.CHAR,value:11},{type:i.CHAR,value:12},{type:i.CHAR,value:13},{type:i.CHAR,value:32},{type:i.CHAR,value:160},{type:i.CHAR,value:5760},{type:i.CHAR,value:6158},{type:i.CHAR,value:8192},{type:i.CHAR,value:8193},{type:i.CHAR,value:8194},{type:i.CHAR,value:8195},{type:i.CHAR,value:8196},{type:i.CHAR,value:8197},{type:i.CHAR,value:8198},{type:i.CHAR,value:8199},{type:i.CHAR,value:8200},{type:i.CHAR,value:8201},{type:i.CHAR,value:8202},{type:i.CHAR,value:8232},{type:i.CHAR,value:8233},{type:i.CHAR,value:8239},{type:i.CHAR,value:8287},{type:i.CHAR,value:12288},{type:i.CHAR,value:65279}]},o=function(){return[{type:i.CHAR,value:10},{type:i.CHAR,value:13},{type:i.CHAR,value:8232},{type:i.CHAR,value:8233}]};a.words=function(){return{type:i.SET,set:r(),not:!1}},a.notWords=function(){return{type:i.SET,set:r(),not:!0}},a.ints=function(){return{type:i.SET,set:n(),not:!1}},a.notInts=function(){return{type:i.SET,set:n(),not:!0}},a.whitespace=function(){return{type:i.SET,set:s(),not:!1}},a.notWhitespace=function(){return{type:i.SET,set:s(),not:!0}},a.anyChar=function(){return{type:i.SET,set:o(),not:!0}}},{"./types":168}],168:[function(e,t,a){t.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},{}],169:[function(e,t,a){var i=e("./types"),n=e("./sets"),r="@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?",s={0:0,t:9,n:10,v:11,f:12,r:13};a.strToChars=function(e){var t=/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z\[\\\]\^?])|([0tnvfr]))/g;return e=e.replace(t,function(e,t,a,i,n,o,c,u){if(a)return e;var m=t?8:i?parseInt(i,16):n?parseInt(n,16):o?parseInt(o,8):c?r.indexOf(c):u?s[u]:void 0,f=String.fromCharCode(m);return/[\[\]{}\^$.|?*+()]/.test(f)&&(f="\\"+f),f})},a.tokenizeClass=function(e,t){for(var r,s,o=[],c=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g;null!=(r=c.exec(e));)if(r[1])o.push(n.words());else if(r[2])o.push(n.ints());else if(r[3])o.push(n.whitespace());else if(r[4])o.push(n.notWords());else if(r[5])o.push(n.notInts());else if(r[6])o.push(n.notWhitespace());else if(r[7])o.push({type:i.RANGE,from:(r[8]||r[9]).charCodeAt(0),to:r[10].charCodeAt(0)});else{if(!(s=r[12]))return[o,c.lastIndex];o.push({type:i.CHAR,value:s.charCodeAt(0)})}a.error(t,"Unterminated character class")},a.error=function(e,t){throw new SyntaxError("Invalid regular expression: /"+e+"/: "+t)}},{"./sets":167,"./types":168}],170:[function(e,t,a){"use strict";function i(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function n(e,t,a){if(e&&u.isObject(e)&&e instanceof i)return e;var n=new i;return n.parse(e,t,a),n}function r(e){return u.isString(e)&&(e=n(e)),e instanceof i?e.format():i.prototype.format.call(e)}function s(e,t){return n(e,!1,!0).resolve(t)}function o(e,t){return e?n(e,!1,!0).resolveObject(t):t}var c=e("punycode"),u=e("./util");a.parse=n,a.resolve=s,a.resolveObject=o,a.format=r,a.Url=i;var m=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["<",">",'"',"`"," ","\r","\n"," "],h=["{","}","|","\\","^","`"].concat(l),d=["'"].concat(h),g=["%","/","?",";","#"].concat(d),w=["/","?","#"],y=255,b=/^[+a-z0-9A-Z_-]{0,63}$/,v=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,j={javascript:!0,"javascript:":!0},z={javascript:!0,"javascript:":!0},E={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},A=e("querystring");i.prototype.parse=function(e,t,a){if(!u.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var i=e.indexOf("?"),n=-1!==i&&iM)&&(S=M)}var R,k;k=-1===S?o.lastIndexOf("@"):o.lastIndexOf("@",S),-1!==k&&(R=o.slice(0,k),o=o.slice(k+1),this.auth=decodeURIComponent(R)),S=-1;for(var _=0;_M)&&(S=M)}-1===S&&(S=o.length),this.host=o.slice(0,S),o=o.slice(S),this.parseHost(),this.hostname=this.hostname||"";var C="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!C)for(var D=this.hostname.split(/\./),_=0,P=D.length;P>_;_++){var I=D[_];if(I&&!I.match(b)){for(var T="",O=0,L=I.length;L>O;O++)T+=I.charCodeAt(O)>127?"x":I[O];if(!T.match(b)){var N=D.slice(0,_),B=D.slice(_+1),F=I.match(v);F&&(N.push(F[1]),B.unshift(F[2])),B.length&&(o="/"+B.join(".")+o),this.hostname=N.join(".");break}}}this.hostname.length>y?this.hostname="":this.hostname=this.hostname.toLowerCase(),C||(this.hostname=c.toASCII(this.hostname));var U=this.port?":"+this.port:"",K=this.hostname||"";this.host=K+U,this.href+=this.host,C&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!j[h])for(var _=0,P=d.length;P>_;_++){var $=d[_];if(-1!==o.indexOf($)){var J=encodeURIComponent($);J===$&&(J=escape($)),o=o.split($).join(J)}}var G=o.indexOf("#");-1!==G&&(this.hash=o.substr(G),o=o.slice(0,G));var H=o.indexOf("?");if(-1!==H?(this.search=o.substr(H),this.query=o.substr(H+1),t&&(this.query=A.parse(this.query)),o=o.slice(0,H)):t&&(this.search="",this.query={}),o&&(this.pathname=o),E[h]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",W=this.search||"";this.path=U+W}return this.href=this.format(),this},i.prototype.format=function(){var e=this.auth||"";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,":"),e+="@");var t=this.protocol||"",a=this.pathname||"",i=this.hash||"",n=!1,r="";this.host?n=e+this.host:this.hostname&&(n=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u.isObject(this.query)&&Object.keys(this.query).length&&(r=A.stringify(this.query));var s=this.search||r&&"?"+r||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||E[t])&&n!==!1?(n="//"+(n||""),a&&"/"!==a.charAt(0)&&(a="/"+a)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),a=a.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),s=s.replace("#","%23"),t+n+a+s+i},i.prototype.resolve=function(e){return this.resolveObject(n(e,!1,!0)).format()},i.prototype.resolveObject=function(e){if(u.isString(e)){var t=new i;t.parse(e,!1,!0),e=t}for(var a=new i,n=Object.keys(this),r=0;r0?a.host.split("@"):!1;x&&(a.auth=x.shift(),a.host=a.hostname=x.shift())}return a.search=e.search,a.query=e.query,u.isNull(a.pathname)&&u.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.href=a.format(),a}if(!j.length)return a.pathname=null,a.search?a.path="/"+a.search:a.path=null,a.href=a.format(),a;for(var S=j.slice(-1)[0],_=(a.host||e.host||j.length>1)&&("."===S||".."===S)||""===S,M=0,R=j.length;R>=0;R--)S=j[R],"."===S?j.splice(R,1):".."===S?(j.splice(R,1),M++):M&&(j.splice(R,1),M--);if(!b&&!v)for(;M--;M)j.unshift("..");!b||""===j[0]||j[0]&&"/"===j[0].charAt(0)||j.unshift(""),_&&"/"!==j.join("/").substr(-1)&&j.push("");var k=""===j[0]||j[0]&&"/"===j[0].charAt(0);if(A){a.hostname=a.host=k?"":j.length?j.shift():"";var x=a.host&&a.host.indexOf("@")>0?a.host.split("@"):!1;x&&(a.auth=x.shift(),a.host=a.hostname=x.shift())}return b=b||a.host&&j.length,b&&!k&&j.unshift(""),j.length?a.pathname=j.join("/"):(a.pathname=null,a.path=null),u.isNull(a.pathname)&&u.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.auth=e.auth||a.auth,a.slashes=a.slashes||e.slashes,a.href=a.format(),a},i.prototype.parseHost=function(){var e=this.host,t=f.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{"./util":171,punycode:160,querystring:163}],171:[function(e,t,a){"use strict";t.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],172:[function(t,a,i){!function(t,n){"undefined"!=typeof i&&"undefined"!=typeof a?a.exports=n():"function"==typeof e&&"object"==typeof e.amd?e(n):"function"==typeof e&&"object"==typeof e.petal?e(t,[],n):this[t]=n()}("validator",function(e){"use strict";function t(e){var t,a,i,n,r=e.match(D);if(r){if(t=r[21],!t)return null;if("z"===t||"Z"===t)return 0;a=r[22],-1!==t.indexOf(":")?(i=parseInt(r[23]),n=parseInt(r[24])):(i=0,n=parseInt(r[23]))}else{if(e=e.toLowerCase(),t=e.match(/(?:\s|gmt\s*)(-|\+)(\d{1,4})(\s|$)/),!t)return-1!==e.indexOf("gmt")?0:null;a=t[1];var s=t[2];3===s.length&&(s="0"+s),s.length<=2?(i=0,n=parseInt(s)):(i=parseInt(s.slice(0,2)),n=parseInt(s.slice(2,4)))}return(60*i+n)*("-"===a?1:-1)}function a(e,t){e=e||{};for(var a in t)"undefined"==typeof e[a]&&(e[a]=t[a]);return e}function i(e){var t="(\\"+e.symbol.replace(/\./g,"\\.")+")"+(e.require_symbol?"":"?"),a="-?",i="[1-9]\\d*",n="[1-9]\\d{0,2}(\\"+e.thousands_separator+"\\d{3})*",r=["0",i,n],s="("+r.join("|")+")?",o="(\\"+e.decimal_separator+"\\d{2})?",c=s+o;return e.allow_negatives&&!e.parens_for_negatives&&(e.negative_sign_after_digits?c+=a:e.negative_sign_before_digits&&(c=a+c)),e.allow_negative_sign_placeholder?c="( (?!\\-))?"+c:e.allow_space_after_symbol?c=" ?"+c:e.allow_space_after_digits&&(c+="( (?!$))?"),e.symbol_after_digits?c+=t:c=t+c,e.allow_negatives&&(e.parens_for_negatives?c="(\\("+c+"\\)|"+c+")":e.negative_sign_before_digits||e.negative_sign_after_digits||(c=a+c)),new RegExp("^(?!-? )(?=.*\\d)"+c+"$")}e={version:"4.5.0"};var n=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,r=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,s=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,o=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i,c=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i,u=/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,m=/^[A-Z]{2}[0-9A-Z]{9}[0-9]$/,f=/^(?:[0-9]{9}X|[0-9]{10})$/,p=/^(?:[0-9]{13})$/,l=/^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/,h=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,d=/^[0-9A-F]{1,4}$/i,g={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i},w=/^[A-Z]+$/i,y=/^[0-9A-Z]+$/i,b=/^[-+]?[0-9]+$/,v=/^(?:[-+]?(?:0|[1-9][0-9]*))$/,j=/^(?:[-+]?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/,z=/^[0-9A-F]+$/i,E=/^[-+]?([0-9]+|\.[0-9]+|[0-9]+\.[0-9]+)$/,A=/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i,x=/^[\x00-\x7F]+$/,S=/[^\x00-\x7F]/,_=/[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,M=/[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,R=/[\uD800-\uDBFF][\uDC00-\uDFFF]/,k=/^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i,C={ +"zh-CN":/^(\+?0?86\-?)?((13\d|14[57]|15[^4,\D]|17[678]|18\d)\d{8}|170[059]\d{7})$/,"zh-TW":/^(\+?886\-?|0)?9\d{8}$/,"en-ZA":/^(\+?27|0)\d{9}$/,"en-AU":/^(\+?61|0)4\d{8}$/,"en-HK":/^(\+?852\-?)?[569]\d{3}\-?\d{4}$/,"fr-FR":/^(\+?33|0)[67]\d{8}$/,"pt-PT":/^(\+351)?9[1236]\d{7}$/,"el-GR":/^(\+?30)?(69\d{8})$/,"en-GB":/^(\+?44|0)7\d{9}$/,"en-US":/^(\+?1)?[2-9]\d{2}[2-9](?!11)\d{6}$/,"en-ZM":/^(\+26)?09[567]\d{7}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/,"nb-NO":/^(\+?47)?[49]\d{7}$/,"nn-NO":/^(\+?47)?[49]\d{7}$/,"vi-VN":/^(0|\+?84)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$/,"en-NZ":/^(\+?64|0)2\d{7,9}$/,"en-IN":/^(\+?91|0)?[789]\d{9}$/},D=/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;e.extend=function(t,a){e[t]=function(){var t=Array.prototype.slice.call(arguments);return t[0]=e.toString(t[0]),a.apply(e,t)}},e.init=function(){for(var t in e)"function"==typeof e[t]&&"toString"!==t&&"toDate"!==t&&"extend"!==t&&"init"!==t&&e.extend(t,e[t])},e.toString=function(e){return"object"==typeof e&&null!==e&&e.toString?e=e.toString():(null===e||"undefined"==typeof e||isNaN(e)&&!e.length)&&(e=""),""+e},e.toDate=function(e){return"[object Date]"===Object.prototype.toString.call(e)?e:(e=Date.parse(e),isNaN(e)?null:new Date(e))},e.toFloat=function(e){return parseFloat(e)},e.toInt=function(e,t){return parseInt(e,t||10)},e.toBoolean=function(e,t){return t?"1"===e||"true"===e:"0"!==e&&"false"!==e&&""!==e},e.equals=function(t,a){return t===e.toString(a)},e.contains=function(t,a){return t.indexOf(e.toString(a))>=0},e.matches=function(e,t,a){return"[object RegExp]"!==Object.prototype.toString.call(t)&&(t=new RegExp(t,a)),t.test(e)};var P={allow_display_name:!1,allow_utf8_local_part:!0,require_tld:!0};e.isEmail=function(t,i){if(i=a(i,P),i.allow_display_name){var u=t.match(c);u&&(t=u[1])}var m=t.split("@"),f=m.pop(),p=m.join("@"),l=f.toLowerCase();if(("gmail.com"===l||"googlemail.com"===l)&&(p=p.replace(/\./g,"").toLowerCase()),!e.isByteLength(p,0,64)||!e.isByteLength(f,0,256))return!1;if(!e.isFQDN(f,{require_tld:i.require_tld}))return!1;if('"'===p[0])return p=p.slice(1,p.length-1),i.allow_utf8_local_part?o.test(p):r.test(p);for(var h=i.allow_utf8_local_part?s:n,d=p.split("."),g=0;g=2083||/\s/.test(t))return!1;if(0===t.indexOf("mailto:"))return!1;i=a(i,I);var n,r,s,o,c,u,m;if(m=t.split("://"),m.length>1){if(n=m.shift(),i.require_valid_protocol&&-1===i.protocols.indexOf(n))return!1}else{if(i.require_protocol)return!1;i.allow_protocol_relative_urls&&"//"===t.substr(0,2)&&(m[0]=t.substr(2))}return t=m.join("://"),m=t.split("#"),t=m.shift(),m=t.split("?"),t=m.shift(),m=t.split("/"),t=m.shift(),m=t.split("@"),m.length>1&&(r=m.shift(),r.indexOf(":")>=0&&r.split(":").length>2)?!1:(o=m.join("@"),m=o.split(":"),s=m.shift(),m.length&&(u=m.join(":"),c=parseInt(u,10),!/^[0-9]+$/.test(u)||0>=c||c>65535)?!1:e.isIP(s)||e.isFQDN(s,i)||"localhost"===s?i.host_whitelist&&-1===i.host_whitelist.indexOf(s)?!1:i.host_blacklist&&-1!==i.host_blacklist.indexOf(s)?!1:!0:!1)},e.isMACAddress=function(e){return l.test(e)},e.isIP=function(t,a){if(a=e.toString(a),!a)return e.isIP(t,4)||e.isIP(t,6);if("4"===a){if(!h.test(t))return!1;var i=t.split(".").sort(function(e,t){return e-t});return i[3]<=255}if("6"===a){var n=t.split(":"),r=!1,s=e.isIP(n[n.length-1],4),o=s?7:8;if(n.length>o)return!1;if("::"===t)return!0;"::"===t.substr(0,2)?(n.shift(),n.shift(),r=!0):"::"===t.substr(t.length-2)&&(n.pop(),n.pop(),r=!0);for(var c=0;c0&&c=1:n.length===o}return!1};var T={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1};e.isFQDN=function(e,t){t=a(t,T),t.allow_trailing_dot&&"."===e[e.length-1]&&(e=e.substring(0,e.length-1));var i=e.split(".");if(t.require_tld){var n=i.pop();if(!i.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(n))return!1}for(var r,s=0;s=0)return!1;r=r.replace(/_/g,"")}if(!/^[a-z\u00a1-\uffff0-9-]+$/i.test(r))return!1;if(/[\uff01-\uff5e]/.test(r))return!1;if("-"===r[0]||"-"===r[r.length-1])return!1;if(r.indexOf("---")>=0&&"xn--"!==r.slice(0,4))return!1}return!0},e.isBoolean=function(e){return["true","false","1","0"].indexOf(e)>=0},e.isAlpha=function(e){return w.test(e)},e.isAlphanumeric=function(e){return y.test(e)},e.isNumeric=function(e){return b.test(e)},e.isDecimal=function(e){return""!==e&&E.test(e)},e.isHexadecimal=function(e){return z.test(e)},e.isHexColor=function(e){return A.test(e)},e.isLowercase=function(e){return e===e.toLowerCase()},e.isUppercase=function(e){return e===e.toUpperCase()},e.isInt=function(e,t){return t=t||{},v.test(e)&&(!t.hasOwnProperty("min")||e>=t.min)&&(!t.hasOwnProperty("max")||e<=t.max)},e.isFloat=function(e,t){return t=t||{},""===e||"."===e?!1:j.test(e)&&(!t.hasOwnProperty("min")||e>=t.min)&&(!t.hasOwnProperty("max")||e<=t.max)},e.isDivisibleBy=function(t,a){return e.toFloat(t)%e.toInt(a)===0},e.isNull=function(e){return 0===e.length},e.isLength=function(e,t,a){var i=e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[],n=e.length-i.length;return n>=t&&("undefined"==typeof a||a>=n)},e.isByteLength=function(e,t,a){var i=encodeURI(e).split(/%..|./).length-1;return i>=t&&("undefined"==typeof a||a>=i)},e.isUUID=function(e,t){var a=g[t?t:"all"];return a&&a.test(e)},e.isDate=function(e){var a=new Date(Date.parse(e));if(isNaN(a))return!1;var i=t(e);if(null!==i){var n=a.getTimezoneOffset()-i;a=new Date(a.getTime()+6e4*n)}var r,s,o,c=String(a.getDate());return(s=e.match(/(^|[^:\d])[23]\d([^:\d]|$)/g))?(r=s.map(function(e){return e.match(/\d+/g)[0]}).join("/"),o=String(a.getFullYear()).slice(-2),r===c||r===o?!0:r===c+"/"+o||r===o+"/"+c?!0:!1):!0},e.isAfter=function(t,a){var i=e.toDate(a||new Date),n=e.toDate(t);return!!(n&&i&&n>i)},e.isBefore=function(t,a){var i=e.toDate(a||new Date),n=e.toDate(t);return!!(n&&i&&i>n)},e.isIn=function(t,a){var i;if("[object Array]"===Object.prototype.toString.call(a)){var n=[];for(i in a)n[i]=e.toString(a[i]);return n.indexOf(t)>=0}return"object"==typeof a?a.hasOwnProperty(t):a&&"function"==typeof a.indexOf?a.indexOf(t)>=0:!1},e.isWhitelisted=function(e,t){for(var a=e.length-1;a>=0;a--)if(-1===t.indexOf(e[a]))return!1;return!0},e.isCreditCard=function(e){var t=e.replace(/[^0-9]+/g,"");if(!u.test(t))return!1;for(var a,i,n,r=0,s=t.length-1;s>=0;s--)a=t.substring(s,s+1),i=parseInt(a,10),n?(i*=2,r+=i>=10?i%10+1:i):r+=i,n=!n;return!!(r%10===0?t:!1)},e.isISIN=function(e){if(!m.test(e))return!1;for(var t,a,i=e.replace(/[A-Z]/g,function(e){return parseInt(e,36)}),n=0,r=!0,s=i.length-2;s>=0;s--)t=i.substring(s,s+1),a=parseInt(t,10),r?(a*=2,n+=a>=10?a+1:a):n+=a,r=!r;return parseInt(e.substr(e.length-1),10)===(1e4-n)%10},e.isISBN=function(t,a){if(a=e.toString(a),!a)return e.isISBN(t,10)||e.isISBN(t,13);var i,n=t.replace(/[\s-]+/g,""),r=0;if("10"===a){if(!f.test(n))return!1;for(i=0;9>i;i++)r+=(i+1)*n.charAt(i);if(r+="X"===n.charAt(9)?100:10*n.charAt(9),r%11===0)return!!n}else if("13"===a){if(!p.test(n))return!1;var s=[1,3];for(i=0;12>i;i++)r+=s[i%2]*n.charAt(i);if(n.charAt(12)-(10-r%10)%10===0)return!!n}return!1},e.isMobilePhone=function(e,t){return t in C?C[t].test(e):!1};var O={symbol:"$",require_symbol:!1,allow_space_after_symbol:!1,symbol_after_digits:!1,allow_negatives:!0,parens_for_negatives:!1,negative_sign_before_digits:!1,negative_sign_after_digits:!1,allow_negative_sign_placeholder:!1,thousands_separator:",",decimal_separator:".",allow_space_after_digits:!1};e.isCurrency=function(e,t){return t=a(t,O),i(t).test(e)},e.isJSON=function(e){try{var t=JSON.parse(e);return!!t&&"object"==typeof t}catch(a){}return!1},e.isMultibyte=function(e){return S.test(e)},e.isAscii=function(e){return x.test(e)},e.isFullWidth=function(e){return _.test(e)},e.isHalfWidth=function(e){return M.test(e)},e.isVariableWidth=function(e){return _.test(e)&&M.test(e)},e.isSurrogatePair=function(e){return R.test(e)},e.isBase64=function(e){return k.test(e)},e.isMongoId=function(t){return e.isHexadecimal(t)&&24===t.length},e.isISO8601=function(e){return D.test(e)},e.ltrim=function(e,t){var a=t?new RegExp("^["+t+"]+","g"):/^\s+/g;return e.replace(a,"")},e.rtrim=function(e,t){var a=t?new RegExp("["+t+"]+$","g"):/\s+$/g;return e.replace(a,"")},e.trim=function(e,t){var a=t?new RegExp("^["+t+"]+|["+t+"]+$","g"):/^\s+|\s+$/g;return e.replace(a,"")},e.escape=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">").replace(/\//g,"/").replace(/\`/g,"`")},e.stripLow=function(t,a){var i=a?"\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F":"\\x00-\\x1F\\x7F";return e.blacklist(t,i)},e.whitelist=function(e,t){return e.replace(new RegExp("[^"+t+"]+","g"),"")},e.blacklist=function(e,t){return e.replace(new RegExp("["+t+"]+","g"),"")};var L={lowercase:!0,remove_dots:!0,remove_extension:!0};return e.normalizeEmail=function(t,i){if(i=a(i,L),!e.isEmail(t))return!1;var n=t.split("@",2);if(n[1]=n[1].toLowerCase(),"gmail.com"===n[1]||"googlemail.com"===n[1]){if(i.remove_extension&&(n[0]=n[0].split("+")[0]),i.remove_dots&&(n[0]=n[0].replace(/\./g,"")),!n[0].length)return!1;n[0]=n[0].toLowerCase(),n[1]="gmail.com"}else i.lowercase&&(n[0]=n[0].toLowerCase());return n.join("@")},e.init(),e})},{}],173:[function(e,t,a){"use strict";t.exports={INVALID_TYPE:"Expected type {0} but found type {1}",INVALID_FORMAT:"Object didn't pass validation for format {0}: {1}",ENUM_MISMATCH:"No enum match for: {0}",ANY_OF_MISSING:"Data does not match any schemas from 'anyOf'",ONE_OF_MISSING:"Data does not match any schemas from 'oneOf'",ONE_OF_MULTIPLE:"Data is valid against more than one schema from 'oneOf'",NOT_PASSED:"Data matches schema from 'not'",ARRAY_LENGTH_SHORT:"Array is too short ({0}), minimum {1}",ARRAY_LENGTH_LONG:"Array is too long ({0}), maximum {1}",ARRAY_UNIQUE:"Array items are not unique (indexes {0} and {1})",ARRAY_ADDITIONAL_ITEMS:"Additional items not allowed",MULTIPLE_OF:"Value {0} is not a multiple of {1}",MINIMUM:"Value {0} is less than minimum {1}",MINIMUM_EXCLUSIVE:"Value {0} is equal or less than exclusive minimum {1}",MAXIMUM:"Value {0} is greater than maximum {1}",MAXIMUM_EXCLUSIVE:"Value {0} is equal or greater than exclusive maximum {1}",OBJECT_PROPERTIES_MINIMUM:"Too few properties defined ({0}), minimum {1}",OBJECT_PROPERTIES_MAXIMUM:"Too many properties defined ({0}), maximum {1}",OBJECT_MISSING_REQUIRED_PROPERTY:"Missing required property: {0}",OBJECT_ADDITIONAL_PROPERTIES:"Additional properties not allowed: {0}",OBJECT_DEPENDENCY_KEY:"Dependency failed - key must exist: {0} (due to key: {1})",MIN_LENGTH:"String is too short ({0} chars), minimum {1}",MAX_LENGTH:"String is too long ({0} chars), maximum {1}",PATTERN:"String does not match pattern {0}: {1}",KEYWORD_TYPE_EXPECTED:"Keyword '{0}' is expected to be of type '{1}'",KEYWORD_UNDEFINED_STRICT:"Keyword '{0}' must be defined in strict mode",KEYWORD_UNEXPECTED:"Keyword '{0}' is not expected to appear in the schema",KEYWORD_MUST_BE:"Keyword '{0}' must be {1}",KEYWORD_DEPENDENCY:"Keyword '{0}' requires keyword '{1}'",KEYWORD_PATTERN:"Keyword '{0}' is not a valid RegExp pattern: {1}",KEYWORD_VALUE_TYPE:"Each element of keyword '{0}' array must be a '{1}'",UNKNOWN_FORMAT:"There is no validation function for format '{0}'",CUSTOM_MODE_FORCE_PROPERTIES:"{0} must define at least one property if present",REF_UNRESOLVED:"Reference has not been resolved during compilation: {0}",UNRESOLVABLE_REFERENCE:"Reference could not be resolved: {0}",SCHEMA_NOT_REACHABLE:"Validator was not able to read schema with uri: {0}",SCHEMA_TYPE_EXPECTED:"Schema is expected to be of type 'object'",SCHEMA_NOT_AN_OBJECT:"Schema is not an object: {0}",ASYNC_TIMEOUT:"{0} asynchronous task(s) have timed out after {1} ms",PARENT_SCHEMA_VALIDATION_FAILED:"Schema failed to validate against its parent schema, see inner errors for details.",REMOTE_NOT_VALID:"Remote reference didn't compile successfully: {0}"}},{}],174:[function(e,t,a){var i=e("validator"),n={date:function(e){if("string"!=typeof e)return!0;var t=/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/.exec(e);return null===t?!1:t[2]<"01"||t[2]>"12"||t[3]<"01"||t[3]>"31"?!1:!0},"date-time":function(e){if("string"!=typeof e)return!0;var t=e.toLowerCase().split("t");if(!n.date(t[0]))return!1;var a=/^([0-9]{2}):([0-9]{2}):([0-9]{2})(.[0-9]+)?(z|([+-][0-9]{2}:[0-9]{2}))$/.exec(t[1]);return null===a?!1:a[1]>"23"||a[2]>"59"||a[3]>"59"?!1:!0},email:function(e){return"string"!=typeof e?!0:i.isEmail(e,{require_tld:!0})},hostname:function(e){if("string"!=typeof e)return!0;var t=/^[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?(\.[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?)*$/.test(e);if(t){if(e.length>255)return!1;for(var a=e.split("."),i=0;i63)return!1}return t},"host-name":function(e){return n.hostname.call(this,e)},ipv4:function(e){return"string"!=typeof e?!0:i.isIP(e,4)},ipv6:function(e){return"string"!=typeof e?!0:i.isIP(e,6)},regex:function(e){try{return RegExp(e),!0}catch(t){return!1}},uri:function(e){return this.options.strictUris?n["strict-uri"].apply(this,arguments):"string"!=typeof e||RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?").test(e)},"strict-uri":function(e){return"string"!=typeof e||i.isURL(e)}};t.exports=n},{validator:172}],175:[function(e,t,a){"use strict";var i=e("./FormatValidators"),n=e("./Report"),r=e("./Utils"),s={multipleOf:function(e,t,a){"number"==typeof a&&"integer"!==r.whatIs(a/t.multipleOf)&&e.addError("MULTIPLE_OF",[a,t.multipleOf],null,t.description)},maximum:function(e,t,a){"number"==typeof a&&(t.exclusiveMaximum!==!0?a>t.maximum&&e.addError("MAXIMUM",[a,t.maximum],null,t.description):a>=t.maximum&&e.addError("MAXIMUM_EXCLUSIVE",[a,t.maximum],null,t.description))},exclusiveMaximum:function(){},minimum:function(e,t,a){"number"==typeof a&&(t.exclusiveMinimum!==!0?at.maxLength&&e.addError("MAX_LENGTH",[a.length,t.maxLength],null,t.description)},minLength:function(e,t,a){"string"==typeof a&&r.ucs2decode(a).lengtht.items.length&&e.addError("ARRAY_ADDITIONAL_ITEMS",null,null,t.description)},items:function(){},maxItems:function(e,t,a){Array.isArray(a)&&a.length>t.maxItems&&e.addError("ARRAY_LENGTH_LONG",[a.length,t.maxItems],null,t.description)},minItems:function(e,t,a){Array.isArray(a)&&a.lengtht.maxProperties&&e.addError("OBJECT_PROPERTIES_MAXIMUM",[i,t.maxProperties],null,t.description)}},minProperties:function(e,t,a){if("object"===r.whatIs(a)){var i=Object.keys(a).length;i0){var p=this.options.assumeAdditional.length;if(p)for(;p--;){var l=s.indexOf(this.options.assumeAdditional[p]);-1!==l&&s.splice(l,1)}s.length>0&&e.addError("OBJECT_ADDITIONAL_PROPERTIES",[s],null,t.description)}}}},dependencies:function(e,t,i){if("object"===r.whatIs(i))for(var n=Object.keys(t.dependencies),s=n.length;s--;){var o=n[s];if(i[o]){var c=t.dependencies[o];if("object"===r.whatIs(c))a.validate.call(this,e,c,i);else for(var u=c.length;u--;){var m=c[u];void 0===i[m]&&e.addError("OBJECT_DEPENDENCY_KEY",[m,o],null,t.description)}}}},"enum":function(e,t,a){for(var i=!1,n=t["enum"].length;n--;)if(r.areEqual(a,t["enum"][n])){i=!0;break}i===!1&&e.addError("ENUM_MISMATCH",[a],null,t.description)},allOf:function(e,t,i){for(var n=t.allOf.length;n--;){var r=a.validate.call(this,e,t.allOf[n],i);if(this.options.breakOnFirstError&&r===!1)break}},anyOf:function(e,t,i){for(var r=[],s=!1,o=t.anyOf.length;o--&&s===!1;){var c=new n(e);r.push(c),s=a.validate.call(this,c,t.anyOf[o],i)}s===!1&&e.addError("ANY_OF_MISSING",void 0,r,t.description)},oneOf:function(e,t,i){for(var r=0,s=[],o=t.oneOf.length;o--;){var c=new n(e,{maxErrors:1});s.push(c),a.validate.call(this,c,t.oneOf[o],i)===!0&&r++}0===r?e.addError("ONE_OF_MISSING",void 0,s,t.description):r>1&&e.addError("ONE_OF_MULTIPLE",null,null,t.description)},not:function(e,t,i){var r=new n(e);a.validate.call(this,r,t.not,i)===!0&&e.addError("NOT_PASSED",null,null,t.description)},definitions:function(){},format:function(e,t,a){var n=i[t.format];"function"==typeof n?2===n.length?e.addAsyncTask(n,[a],function(i){i!==!0&&e.addError("INVALID_FORMAT",[t.format,a],null,t.description)}):n.call(this,a)!==!0&&e.addError("INVALID_FORMAT",[t.format,a],null,t.description):this.options.ignoreUnknownFormats!==!0&&e.addError("UNKNOWN_FORMAT",[t.format],null,t.description)}},o=function(e,t,i){var n=i.length;if(Array.isArray(t.items))for(;n--;)n0;){if(!t.__$refResolved){e.addError("REF_UNRESOLVED",[t.$ref],null,t.description);break}if(t.__$refResolved===t)break;t=t.__$refResolved,n=Object.keys(t),m--}if(0===m)throw new Error("Circular dependency by $ref references!")}var f=r.whatIs(a);if(t.type)if("string"==typeof t.type){if(f!==t.type&&("integer"!==f||"number"!==t.type)&&(e.addError("INVALID_TYPE",[t.type,f],null,t.description),this.options.breakOnFirstError))return!1}else if(-1===t.type.indexOf(f)&&("integer"!==f||-1===t.type.indexOf("number"))&&(e.addError("INVALID_TYPE",[t.type,f],null,t.description),this.options.breakOnFirstError))return!1;for(var p=n.length;p--&&!(s[n[p]]&&(s[n[p]].call(this,e,t,a),e.errors.length&&this.options.breakOnFirstError)););return(0===e.errors.length||this.options.breakOnFirstError===!1)&&("array"===f?o.call(this,e,t,a):"object"===f&&c.call(this,e,t,a)),u&&(e.rootSchema=void 0),0===e.errors.length}},{"./FormatValidators":174,"./Report":177,"./Utils":181}],176:[function(e,t,a){"function"!=typeof Number.isFinite&&(Number.isFinite=function(e){return"number"!=typeof e?!1:e!==e||e===1/0||e===-(1/0)?!1:!0})},{}],177:[function(e,t,a){(function(a){"use strict";function i(e,t){this.parentReport=e instanceof i?e:void 0,this.options=e instanceof i?e.options:e||{},this.reportOptions=t||{},this.errors=[],this.path=[],this.asyncTasks=[]}var n=e("lodash.get"),r=e("./Errors"),s=e("./Utils");i.prototype.isValid=function(){if(this.asyncTasks.length>0)throw new Error("Async tasks pending, can't answer isValid");return 0===this.errors.length},i.prototype.addAsyncTask=function(e,t,a){this.asyncTasks.push([e,t,a])},i.prototype.processAsyncTasks=function(e,t){function i(){a.nextTick(function(){var e=0===u.errors.length,a=e?void 0:u.errors;t(a,e)})}function n(e){return function(t){c||(e(t),0===--s&&i())}}var r=e||2e3,s=this.asyncTasks.length,o=s,c=!1,u=this;if(0===s||this.errors.length>0)return void i();for(;o--;){var m=this.asyncTasks[o];m[0].apply(null,m[1].concat(n(m[2])))}setTimeout(function(){s>0&&(c=!0,u.addError("ASYNC_TIMEOUT",[s,r]),t(u.errors,!1))},r)},i.prototype.getPath=function(){var e=[];return this.parentReport&&(e=e.concat(this.parentReport.path)),e=e.concat(this.path),this.options.reportPathAsArray!==!0&&(e="#/"+e.map(function(e){return s.isAbsoluteUri(e)?"uri("+e+")":e.replace(/\~/g,"~0").replace(/\//g,"~1")}).join("/")),e},i.prototype.getSchemaId=function(){if(!this.rootSchema)return null;var e=[];for(this.parentReport&&(e=e.concat(this.parentReport.path)),e=e.concat(this.path);e.length>0;){var t=n(this.rootSchema,e);if(t&&t.id)return t.id;e.pop()}return this.rootSchema.id},i.prototype.hasError=function(e,t){for(var a=this.errors.length;a--;)if(this.errors[a].code===e){for(var i=!0,n=this.errors[a].params.length;n--;)this.errors[a].params[n]!==t[n]&&(i=!1);if(i)return i}return!1},i.prototype.addError=function(e,t,a,i){if(!(this.errors.length>=this.reportOptions.maxErrors)){if(!e)throw new Error("No errorCode passed into addError()");if(!r[e])throw new Error("No errorMessage known for code "+e);t=t||[];for(var n=t.length,o=r[e];n--;){var c=s.whatIs(t[n]),u="object"===c||"null"===c?JSON.stringify(t[n]):t[n];o=o.replace("{"+n+"}",u)}var m={code:e,params:t,message:o,path:this.getPath(),schemaId:this.getSchemaId()};if(i&&(m.description=i),null!=a){for(Array.isArray(a)||(a=[a]),m.inner=[],n=a.length;n--;)for(var f=a[n],p=f.errors.length;p--;)m.inner.push(f.errors[p]);0===m.inner.length&&(m.inner=void 0)}this.errors.push(m)}},t.exports=i}).call(this,e("_process"))},{"./Errors":173,"./Utils":181,_process:159,"lodash.get":154}],178:[function(e,t,a){"use strict";function i(e){return decodeURIComponent(e).replace(/~[0-1]/g,function(e){return"~1"===e?"/":"~"})}function n(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function r(e){var t=e.indexOf("#"),a=-1===t?void 0:e.slice(t+1);return a}function s(e,t){if("object"==typeof e&&null!==e){if(!t)return e;if(e.id&&(e.id===t||"#"===e.id[0]&&e.id.substring(1)===t))return e;var a,i;if(Array.isArray(e)){for(a=e.length;a--;)if(i=s(e[a],t))return i}else{var n=Object.keys(e);for(a=n.length;a--;){var r=n[a];if(0!==r.indexOf("__$")&&(i=s(e[r],t)))return i}}}}var o=e("./Report"),c=e("./SchemaCompilation"),u=e("./SchemaValidation"),m=e("./Utils");a.cacheSchemaByUri=function(e,t){var a=n(e);a&&(this.cache[a]=t)},a.removeFromCacheByUri=function(e){var t=n(e);t&&delete this.cache[t]},a.checkCacheForUri=function(e){var t=n(e);return t?null!=this.cache[t]:!1},a.getSchema=function(e,t){return"object"==typeof t&&(t=a.getSchemaByReference.call(this,e,t)),"string"==typeof t&&(t=a.getSchemaByUri.call(this,e,t)),t},a.getSchemaByReference=function(e,t){for(var a=this.referenceCache.length;a--;)if(this.referenceCache[a][0]===t)return this.referenceCache[a][1];var i=m.cloneDeep(t);return this.referenceCache.push([t,i]),i},a.getSchemaByUri=function(e,t,a){var m=n(t),f=r(t),p=m?this.cache[m]:a;if(p&&m){var l=p!==a;if(l){e.path.push(m);var h=new o(e);c.compileSchema.call(this,h,p)&&u.validateSchema.call(this,h,p);var d=h.isValid();if(d||e.addError("REMOTE_NOT_VALID",[t],h),e.path.pop(),!d)return}}if(p&&f)for(var g=f.split("/"),w=0,y=g.length;p&&y>w;w++){var b=i(g[w]);p=0===w?s(p,b):p[b]}return p},a.getRemotePath=n},{"./Report":177,"./SchemaCompilation":179,"./SchemaValidation":180,"./Utils":181}],179:[function(e,t,a){"use strict";function i(e,t){if(c.isAbsoluteUri(t))return t;var a,i=e.join(""),n=c.isAbsoluteUri(i),r=c.isRelativeUri(i),s=c.isRelativeUri(t);n&&s?(a=i.match(/\/[^\/]*$/),a&&(i=i.slice(0,a.index+1))):r&&s?i="":(a=i.match(/[^#\/]+$/),a&&(i=i.slice(0,a.index)));var o=i+t;return o=o.replace(/##/,"#")}function n(e,t,a,r){if(t=t||[],a=a||[],r=r||[],"object"!=typeof e||null===e)return t;"string"==typeof e.id&&a.push(e.id),"string"==typeof e.$ref&&"undefined"==typeof e.__$refResolved&&t.push({ref:i(a,e.$ref),key:"$ref",obj:e,path:r.slice(0)}),"string"==typeof e.$schema&&"undefined"==typeof e.__$schemaResolved&&t.push({ref:i(a,e.$schema),key:"$schema",obj:e,path:r.slice(0)});var s;if(Array.isArray(e))for(s=e.length;s--;)r.push(s.toString()),n(e[s],t,a,r),r.pop();else{var o=Object.keys(e);for(s=o.length;s--;)0!==o[s].indexOf("__$")&&(r.push(o[s]),n(e[o[s]],t,a,r),r.pop())}return"string"==typeof e.id&&a.pop(),t}function r(e,t){for(var a=e.length;a--;)if(e[a].id===t)return e[a];return null}var s=e("./Report"),o=e("./SchemaCache"),c=e("./Utils"),u=function(e,t){for(var i=t.length,n=0;i--;){var r=new s(e),o=a.compileSchema.call(this,r,t[i]);o&&n++,e.errors=e.errors.concat(r.errors)}return n},m=function(e,t){var a,i=0;do{for(var n=e.errors.length;n--;)"UNRESOLVABLE_REFERENCE"===e.errors[n].code&&e.errors.splice(n,1);for(a=i,i=u.call(this,e,t),n=t.length;n--;){var s=t[n];if(s.__$missingReferences){for(var o=s.__$missingReferences.length;o--;){var c=s.__$missingReferences[o],m=r(t,c.ref);m&&(c.obj["__"+c.key+"Resolved"]=m,s.__$missingReferences.splice(o,1))}0===s.__$missingReferences.length&&delete s.__$missingReferences}}}while(i!==t.length&&i!==a);return e.isValid()};a.compileSchema=function(e,t){if(e.commonErrorMessage="SCHEMA_COMPILATION_FAILED","string"==typeof t){var i=o.getSchemaByUri.call(this,e,t);if(!i)return e.addError("SCHEMA_NOT_REACHABLE",[t]),!1;t=i}if(Array.isArray(t))return m.call(this,e,t);if(t.__$compiled&&t.id&&o.checkCacheForUri.call(this,t.id)===!1&&(t.__$compiled=void 0),t.__$compiled)return!0;t.id&&"string"==typeof t.id&&o.cacheSchemaByUri.call(this,t.id,t);var r=!1;e.rootSchema||(e.rootSchema=t,r=!0);var u=e.isValid();delete t.__$missingReferences;for(var f=n.call(this,t),p=f.length;p--;){var l=f[p],h=o.getSchemaByUri.call(this,e,l.ref,t);if(!h){var d=this.getSchemaReader();if(d){var g=d(l.ref);if(g){g.id=l.ref;var w=new s(e);a.compileSchema.call(this,w,g)?h=o.getSchemaByUri.call(this,e,l.ref,t):e.errors=e.errors.concat(w.errors)}}}if(!h){var y=e.hasError("REMOTE_NOT_VALID",[l.ref]),b=c.isAbsoluteUri(l.ref),v=!1,j=this.options.ignoreUnresolvableReferences===!0;b&&(v=o.checkCacheForUri.call(this,l.ref)),y||j&&b||v||(Array.prototype.push.apply(e.path,l.path),e.addError("UNRESOLVABLE_REFERENCE",[l.ref]),e.path=e.path.slice(0,-l.path.length),u&&(t.__$missingReferences=t.__$missingReferences||[],t.__$missingReferences.push(l)))}l.obj["__"+l.key+"Resolved"]=h}var z=e.isValid();return z?t.__$compiled=!0:t.id&&"string"==typeof t.id&&o.removeFromCacheByUri.call(this,t.id),r&&(e.rootSchema=void 0),z}},{"./Report":177,"./SchemaCache":178,"./Utils":181}],180:[function(e,t,a){"use strict";var i=e("./FormatValidators"),n=e("./JsonValidation"),r=e("./Report"),s=e("./Utils"),o={$ref:function(e,t){"string"!=typeof t.$ref&&e.addError("KEYWORD_TYPE_EXPECTED",["$ref","string"])},$schema:function(e,t){"string"!=typeof t.$schema&&e.addError("KEYWORD_TYPE_EXPECTED",["$schema","string"])},multipleOf:function(e,t){"number"!=typeof t.multipleOf?e.addError("KEYWORD_TYPE_EXPECTED",["multipleOf","number"]):t.multipleOf<=0&&e.addError("KEYWORD_MUST_BE",["multipleOf","strictly greater than 0"])},maximum:function(e,t){"number"!=typeof t.maximum&&e.addError("KEYWORD_TYPE_EXPECTED",["maximum","number"])},exclusiveMaximum:function(e,t){"boolean"!=typeof t.exclusiveMaximum?e.addError("KEYWORD_TYPE_EXPECTED",["exclusiveMaximum","boolean"]):void 0===t.maximum&&e.addError("KEYWORD_DEPENDENCY",["exclusiveMaximum","maximum"])},minimum:function(e,t){"number"!=typeof t.minimum&&e.addError("KEYWORD_TYPE_EXPECTED",["minimum","number"])},exclusiveMinimum:function(e,t){"boolean"!=typeof t.exclusiveMinimum?e.addError("KEYWORD_TYPE_EXPECTED",["exclusiveMinimum","boolean"]):void 0===t.minimum&&e.addError("KEYWORD_DEPENDENCY",["exclusiveMinimum","minimum"])},maxLength:function(e,t){"integer"!==s.whatIs(t.maxLength)?e.addError("KEYWORD_TYPE_EXPECTED",["maxLength","integer"]):t.maxLength<0&&e.addError("KEYWORD_MUST_BE",["maxLength","greater than, or equal to 0"])},minLength:function(e,t){"integer"!==s.whatIs(t.minLength)?e.addError("KEYWORD_TYPE_EXPECTED",["minLength","integer"]):t.minLength<0&&e.addError("KEYWORD_MUST_BE",["minLength","greater than, or equal to 0"])},pattern:function(e,t){if("string"!=typeof t.pattern)e.addError("KEYWORD_TYPE_EXPECTED",["pattern","string"]);else try{RegExp(t.pattern)}catch(a){e.addError("KEYWORD_PATTERN",["pattern",t.pattern])}},additionalItems:function(e,t){var i=s.whatIs(t.additionalItems);"boolean"!==i&&"object"!==i?e.addError("KEYWORD_TYPE_EXPECTED",["additionalItems",["boolean","object"]]):"object"===i&&(e.path.push("additionalItems"),a.validateSchema.call(this,e,t.additionalItems),e.path.pop())},items:function(e,t){var i=s.whatIs(t.items);if("object"===i)e.path.push("items"),a.validateSchema.call(this,e,t.items),e.path.pop();else if("array"===i)for(var n=t.items.length;n--;)e.path.push("items"),e.path.push(n.toString()),a.validateSchema.call(this,e,t.items[n]),e.path.pop(),e.path.pop();else e.addError("KEYWORD_TYPE_EXPECTED",["items",["array","object"]]);this.options.forceAdditional===!0&&void 0===t.additionalItems&&Array.isArray(t.items)&&e.addError("KEYWORD_UNDEFINED_STRICT",["additionalItems"]),this.options.assumeAdditional&&void 0===t.additionalItems&&Array.isArray(t.items)&&(t.additionalItems=!1)},maxItems:function(e,t){"number"!=typeof t.maxItems?e.addError("KEYWORD_TYPE_EXPECTED",["maxItems","integer"]):t.maxItems<0&&e.addError("KEYWORD_MUST_BE",["maxItems","greater than, or equal to 0"])},minItems:function(e,t){"integer"!==s.whatIs(t.minItems)?e.addError("KEYWORD_TYPE_EXPECTED",["minItems","integer"]):t.minItems<0&&e.addError("KEYWORD_MUST_BE",["minItems","greater than, or equal to 0"])},uniqueItems:function(e,t){"boolean"!=typeof t.uniqueItems&&e.addError("KEYWORD_TYPE_EXPECTED",["uniqueItems","boolean"])},maxProperties:function(e,t){"integer"!==s.whatIs(t.maxProperties)?e.addError("KEYWORD_TYPE_EXPECTED",["maxProperties","integer"]):t.maxProperties<0&&e.addError("KEYWORD_MUST_BE",["maxProperties","greater than, or equal to 0"])},minProperties:function(e,t){"integer"!==s.whatIs(t.minProperties)?e.addError("KEYWORD_TYPE_EXPECTED",["minProperties","integer"]):t.minProperties<0&&e.addError("KEYWORD_MUST_BE",["minProperties","greater than, or equal to 0"])},required:function(e,t){if("array"!==s.whatIs(t.required))e.addError("KEYWORD_TYPE_EXPECTED",["required","array"]);else if(0===t.required.length)e.addError("KEYWORD_MUST_BE",["required","an array with at least one element"]);else{ +for(var a=t.required.length;a--;)"string"!=typeof t.required[a]&&e.addError("KEYWORD_VALUE_TYPE",["required","string"]);s.isUniqueArray(t.required)===!1&&e.addError("KEYWORD_MUST_BE",["required","an array with unique items"])}},additionalProperties:function(e,t){var i=s.whatIs(t.additionalProperties);"boolean"!==i&&"object"!==i?e.addError("KEYWORD_TYPE_EXPECTED",["additionalProperties",["boolean","object"]]):"object"===i&&(e.path.push("additionalProperties"),a.validateSchema.call(this,e,t.additionalProperties),e.path.pop())},properties:function(e,t){if("object"!==s.whatIs(t.properties))return void e.addError("KEYWORD_TYPE_EXPECTED",["properties","object"]);for(var i=Object.keys(t.properties),n=i.length;n--;){var r=i[n],o=t.properties[r];e.path.push("properties"),e.path.push(r),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}this.options.forceAdditional===!0&&void 0===t.additionalProperties&&e.addError("KEYWORD_UNDEFINED_STRICT",["additionalProperties"]),this.options.assumeAdditional&&void 0===t.additionalProperties&&(t.additionalProperties=!1),this.options.forceProperties===!0&&0===i.length&&e.addError("CUSTOM_MODE_FORCE_PROPERTIES",["properties"])},patternProperties:function(e,t){if("object"!==s.whatIs(t.patternProperties))return void e.addError("KEYWORD_TYPE_EXPECTED",["patternProperties","object"]);for(var i=Object.keys(t.patternProperties),n=i.length;n--;){var r=i[n],o=t.patternProperties[r];try{RegExp(r)}catch(c){e.addError("KEYWORD_PATTERN",["patternProperties",r])}e.path.push("patternProperties"),e.path.push(r.toString()),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}this.options.forceProperties===!0&&0===i.length&&e.addError("CUSTOM_MODE_FORCE_PROPERTIES",["patternProperties"])},dependencies:function(e,t){if("object"!==s.whatIs(t.dependencies))e.addError("KEYWORD_TYPE_EXPECTED",["dependencies","object"]);else for(var i=Object.keys(t.dependencies),n=i.length;n--;){var r=i[n],o=t.dependencies[r],c=s.whatIs(o);if("object"===c)e.path.push("dependencies"),e.path.push(r),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop();else if("array"===c){var u=o.length;for(0===u&&e.addError("KEYWORD_MUST_BE",["dependencies","not empty array"]);u--;)"string"!=typeof o[u]&&e.addError("KEYWORD_VALUE_TYPE",["dependensices","string"]);s.isUniqueArray(o)===!1&&e.addError("KEYWORD_MUST_BE",["dependencies","an array with unique items"])}else e.addError("KEYWORD_VALUE_TYPE",["dependencies","object or array"])}},"enum":function(e,t){Array.isArray(t["enum"])===!1?e.addError("KEYWORD_TYPE_EXPECTED",["enum","array"]):0===t["enum"].length?e.addError("KEYWORD_MUST_BE",["enum","an array with at least one element"]):s.isUniqueArray(t["enum"])===!1&&e.addError("KEYWORD_MUST_BE",["enum","an array with unique elements"])},type:function(e,t){var a=["array","boolean","integer","number","null","object","string"],i=a.join(","),n=Array.isArray(t.type);if(n){for(var r=t.type.length;r--;)-1===a.indexOf(t.type[r])&&e.addError("KEYWORD_TYPE_EXPECTED",["type",i]);s.isUniqueArray(t.type)===!1&&e.addError("KEYWORD_MUST_BE",["type","an object with unique properties"])}else"string"==typeof t.type?-1===a.indexOf(t.type)&&e.addError("KEYWORD_TYPE_EXPECTED",["type",i]):e.addError("KEYWORD_TYPE_EXPECTED",["type",["string","array"]]);this.options.noEmptyStrings===!0&&("string"===t.type||n&&-1!==t.type.indexOf("string"))&&void 0===t.minLength&&void 0===t["enum"]&&void 0===t.format&&(t.minLength=1),this.options.noEmptyArrays===!0&&("array"===t.type||n&&-1!==t.type.indexOf("array"))&&void 0===t.minItems&&(t.minItems=1),this.options.forceProperties===!0&&("object"===t.type||n&&-1!==t.type.indexOf("object"))&&void 0===t.properties&&void 0===t.patternProperties&&e.addError("KEYWORD_UNDEFINED_STRICT",["properties"]),this.options.forceItems===!0&&("array"===t.type||n&&-1!==t.type.indexOf("array"))&&void 0===t.items&&e.addError("KEYWORD_UNDEFINED_STRICT",["items"]),this.options.forceMinItems===!0&&("array"===t.type||n&&-1!==t.type.indexOf("array"))&&void 0===t.minItems&&e.addError("KEYWORD_UNDEFINED_STRICT",["minItems"]),this.options.forceMaxItems===!0&&("array"===t.type||n&&-1!==t.type.indexOf("array"))&&void 0===t.maxItems&&e.addError("KEYWORD_UNDEFINED_STRICT",["maxItems"]),this.options.forceMinLength===!0&&("string"===t.type||n&&-1!==t.type.indexOf("string"))&&void 0===t.minLength&&void 0===t.format&&void 0===t["enum"]&&void 0===t.pattern&&e.addError("KEYWORD_UNDEFINED_STRICT",["minLength"]),this.options.forceMaxLength===!0&&("string"===t.type||n&&-1!==t.type.indexOf("string"))&&void 0===t.maxLength&&void 0===t.format&&void 0===t["enum"]&&void 0===t.pattern&&e.addError("KEYWORD_UNDEFINED_STRICT",["maxLength"])},allOf:function(e,t){if(Array.isArray(t.allOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["allOf","array"]);else if(0===t.allOf.length)e.addError("KEYWORD_MUST_BE",["allOf","an array with at least one element"]);else for(var i=t.allOf.length;i--;)e.path.push("allOf"),e.path.push(i.toString()),a.validateSchema.call(this,e,t.allOf[i]),e.path.pop(),e.path.pop()},anyOf:function(e,t){if(Array.isArray(t.anyOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["anyOf","array"]);else if(0===t.anyOf.length)e.addError("KEYWORD_MUST_BE",["anyOf","an array with at least one element"]);else for(var i=t.anyOf.length;i--;)e.path.push("anyOf"),e.path.push(i.toString()),a.validateSchema.call(this,e,t.anyOf[i]),e.path.pop(),e.path.pop()},oneOf:function(e,t){if(Array.isArray(t.oneOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["oneOf","array"]);else if(0===t.oneOf.length)e.addError("KEYWORD_MUST_BE",["oneOf","an array with at least one element"]);else for(var i=t.oneOf.length;i--;)e.path.push("oneOf"),e.path.push(i.toString()),a.validateSchema.call(this,e,t.oneOf[i]),e.path.pop(),e.path.pop()},not:function(e,t){"object"!==s.whatIs(t.not)?e.addError("KEYWORD_TYPE_EXPECTED",["not","object"]):(e.path.push("not"),a.validateSchema.call(this,e,t.not),e.path.pop())},definitions:function(e,t){if("object"!==s.whatIs(t.definitions))e.addError("KEYWORD_TYPE_EXPECTED",["definitions","object"]);else for(var i=Object.keys(t.definitions),n=i.length;n--;){var r=i[n],o=t.definitions[r];e.path.push("definitions"),e.path.push(r),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}},format:function(e,t){"string"!=typeof t.format?e.addError("KEYWORD_TYPE_EXPECTED",["format","string"]):void 0===i[t.format]&&this.options.ignoreUnknownFormats!==!0&&e.addError("UNKNOWN_FORMAT",[t.format])},id:function(e,t){"string"!=typeof t.id&&e.addError("KEYWORD_TYPE_EXPECTED",["id","string"])},title:function(e,t){"string"!=typeof t.title&&e.addError("KEYWORD_TYPE_EXPECTED",["title","string"])},description:function(e,t){"string"!=typeof t.description&&e.addError("KEYWORD_TYPE_EXPECTED",["description","string"])},"default":function(){}},c=function(e,t){for(var i=t.length;i--;)a.validateSchema.call(this,e,t[i]);return e.isValid()};a.validateSchema=function(e,t){if(e.commonErrorMessage="SCHEMA_VALIDATION_FAILED",Array.isArray(t))return c.call(this,e,t);if(t.__$validated)return!0;var a=t.$schema&&t.id!==t.$schema;if(a)if(t.__$schemaResolved&&t.__$schemaResolved!==t){var i=new r(e),u=n.validate.call(this,i,t.__$schemaResolved,t);u===!1&&e.addError("PARENT_SCHEMA_VALIDATION_FAILED",null,i)}else this.options.ignoreUnresolvableReferences!==!0&&e.addError("REF_UNRESOLVED",[t.$schema]);if(this.options.noTypeless===!0){if(void 0!==t.type){var m=[];Array.isArray(t.anyOf)&&(m=m.concat(t.anyOf)),Array.isArray(t.oneOf)&&(m=m.concat(t.oneOf)),Array.isArray(t.allOf)&&(m=m.concat(t.allOf)),m.forEach(function(e){e.type||(e.type=t.type)})}void 0===t["enum"]&&void 0===t.type&&void 0===t.anyOf&&void 0===t.oneOf&&void 0===t.not&&void 0===t.$ref&&e.addError("KEYWORD_UNDEFINED_STRICT",["type"])}for(var f=Object.keys(t),p=f.length;p--;){var l=f[p];0!==l.indexOf("__")&&(void 0!==o[l]?o[l].call(this,e,t):a||this.options.noExtraKeywords===!0&&e.addError("KEYWORD_UNEXPECTED",[l]))}if(this.options.pedanticCheck===!0){if(t["enum"]){var h=s.clone(t);for(delete h["enum"],delete h["default"],e.path.push("enum"),p=t["enum"].length;p--;)e.path.push(p.toString()),n.validate.call(this,e,h,t["enum"][p]),e.path.pop();e.path.pop()}t["default"]&&(e.path.push("default"),n.validate.call(this,e,t,t["default"]),e.path.pop())}var d=e.isValid();return d&&(t.__$validated=!0),d}},{"./FormatValidators":174,"./JsonValidation":175,"./Report":177,"./Utils":181}],181:[function(e,t,a){"use strict";a.isAbsoluteUri=function(e){return/^https?:\/\//.test(e)},a.isRelativeUri=function(e){return/.+#/.test(e)},a.whatIs=function(e){var t=typeof e;return"object"===t?null===e?"null":Array.isArray(e)?"array":"object":"number"===t?Number.isFinite(e)?e%1===0?"integer":"number":Number.isNaN(e)?"not-a-number":"unknown-number":t},a.areEqual=function i(e,t){if(e===t)return!0;var n,r;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(r=e.length,n=0;r>n;n++)if(!i(e[n],t[n]))return!1;return!0}if("object"===a.whatIs(e)&&"object"===a.whatIs(t)){var s=Object.keys(e),o=Object.keys(t);if(!i(s,o))return!1;for(r=s.length,n=0;r>n;n++)if(!i(e[s[n]],t[s[n]]))return!1;return!0}return!1},a.isUniqueArray=function(e,t){var i,n,r=e.length;for(i=0;r>i;i++)for(n=i+1;r>n;n++)if(a.areEqual(e[i],e[n]))return t&&t.push(i,n),!1;return!0},a.difference=function(e,t){for(var a=[],i=e.length;i--;)-1===t.indexOf(e[i])&&a.push(e[i]);return a},a.clone=function(e){if("undefined"!=typeof e){if("object"!=typeof e||null===e)return e;var t,a;if(Array.isArray(e))for(t=[],a=e.length;a--;)t[a]=e[a];else{t={};var i=Object.keys(e);for(a=i.length;a--;){var n=i[a];t[n]=e[n]}}return t}},a.cloneDeep=function(e){function t(e){if("object"!=typeof e||null===e)return e;var n,r,s;if(s=a.indexOf(e),-1!==s)return i[s];if(a.push(e),Array.isArray(e))for(n=[],i.push(n),r=e.length;r--;)n[r]=t(e[r]);else{n={},i.push(n);var o=Object.keys(e);for(r=o.length;r--;){var c=o[r];n[c]=t(e[c])}}return n}var a=[],i=[];return t(e)},a.ucs2decode=function(e){for(var t,a,i=[],n=0,r=e.length;r>n;)t=e.charCodeAt(n++),t>=55296&&56319>=t&&r>n?(a=e.charCodeAt(n++),56320==(64512&a)?i.push(((1023&t)<<10)+(1023&a)+65536):(i.push(t),n--)):i.push(t);return i}},{}],182:[function(e,t,a){(function(a){"use strict";function i(e){if(this.cache={},this.referenceCache=[],this.setRemoteReference("http://json-schema.org/draft-04/schema",p),this.setRemoteReference("http://json-schema.org/draft-04/hyper-schema",l),"object"==typeof e){for(var t,a=Object.keys(e),i=a.length;i--;)if(t=a[i],void 0===h[t])throw new Error("Unexpected option passed to constructor: "+t);for(a=Object.keys(h),i=a.length;i--;)t=a[i],void 0===e[t]&&(e[t]=f.clone(h[t]));this.options=e}else this.options=f.clone(h);this.options.strictMode===!0&&(this.options.forceAdditional=!0,this.options.forceItems=!0,this.options.forceMaxLength=!0,this.options.forceProperties=!0,this.options.noExtraKeywords=!0,this.options.noTypeless=!0,this.options.noEmptyStrings=!0,this.options.noEmptyArrays=!0)}e("./Polyfills");var n=e("lodash.get"),r=e("./Report"),s=e("./FormatValidators"),o=e("./JsonValidation"),c=e("./SchemaCache"),u=e("./SchemaCompilation"),m=e("./SchemaValidation"),f=e("./Utils"),p=e("./schemas/schema.json"),l=e("./schemas/hyper-schema.json"),h={asyncTimeout:2e3,forceAdditional:!1,assumeAdditional:!1,forceItems:!1,forceMinItems:!1,forceMaxItems:!1,forceMinLength:!1,forceMaxLength:!1,forceProperties:!1,ignoreUnresolvableReferences:!1,noExtraKeywords:!1,noTypeless:!1,noEmptyStrings:!1,noEmptyArrays:!1,strictUris:!1,strictMode:!1,reportPathAsArray:!1,breakOnFirstError:!0,pedanticCheck:!1,ignoreUnknownFormats:!1};i.prototype.compileSchema=function(e){var t=new r(this.options);return e=c.getSchema.call(this,t,e),u.compileSchema.call(this,t,e),this.lastReport=t,t.isValid()},i.prototype.validateSchema=function(e){if(Array.isArray(e)&&0===e.length)throw new Error(".validateSchema was called with an empty array");var t=new r(this.options);e=c.getSchema.call(this,t,e);var a=u.compileSchema.call(this,t,e);return a&&m.validateSchema.call(this,t,e),this.lastReport=t,t.isValid()},i.prototype.validate=function(e,t,i,s){"function"===f.whatIs(i)&&(s=i,i={}),i||(i={});var p=f.whatIs(t);if("string"!==p&&"object"!==p){var l=new Error("Invalid .validate call - schema must be an string or object but "+p+" was passed!");if(s)return void a.nextTick(function(){s(l,!1)});throw l}var h=!1,d=new r(this.options);if("string"==typeof t){var g=t;if(t=c.getSchema.call(this,d,g),!t)throw new Error("Schema with id '"+g+"' wasn't found in the validator cache!")}else t=c.getSchema.call(this,d,t);var w=!1;h||(w=u.compileSchema.call(this,d,t)),w||(this.lastReport=d,h=!0);var y=!1;if(h||(y=m.validateSchema.call(this,d,t)),y||(this.lastReport=d,h=!0),i.schemaPath&&(d.rootSchema=t,t=n(t,i.schemaPath),!t))throw new Error("Schema path '"+i.schemaPath+"' wasn't found in the schema!");if(h||o.validate.call(this,d,t,e),s)return void d.processAsyncTasks(this.options.asyncTimeout,s);if(d.asyncTasks.length>0)throw new Error("This validation has async tasks and cannot be done in sync mode, please provide callback argument.");return this.lastReport=d,d.isValid()},i.prototype.getLastError=function(){if(0===this.lastReport.errors.length)return null;var e=new Error;return e.name="z-schema validation error",e.message=this.lastReport.commonErrorMessage,e.details=this.lastReport.errors,e},i.prototype.getLastErrors=function(){return this.lastReport&&this.lastReport.errors.length>0?this.lastReport.errors:void 0},i.prototype.getMissingReferences=function(e){e=e||this.lastReport.errors;for(var t=[],a=e.length;a--;){var i=e[a];if("UNRESOLVABLE_REFERENCE"===i.code){var n=i.params[0];-1===t.indexOf(n)&&t.push(n)}i.inner&&(t=t.concat(this.getMissingReferences(i.inner)))}return t},i.prototype.getMissingRemoteReferences=function(){for(var e=this.getMissingReferences(),t=[],a=e.length;a--;){var i=c.getRemotePath(e[a]);i&&-1===t.indexOf(i)&&t.push(i)}return t},i.prototype.setRemoteReference=function(e,t){t="string"==typeof t?JSON.parse(t):f.cloneDeep(t),c.cacheSchemaByUri.call(this,e,t)},i.prototype.getResolvedSchema=function(e){var t=new r(this.options);e=c.getSchema.call(this,t,e),e=f.cloneDeep(e);var a=[],i=function(e){var t,n=f.whatIs(e);if(("object"===n||"array"===n)&&!e.___$visited){if(e.___$visited=!0,a.push(e),e.$ref&&e.__$refResolved){var r=e.__$refResolved,s=e;delete e.$ref,delete e.__$refResolved;for(t in r)r.hasOwnProperty(t)&&(s[t]=r[t])}for(t in e)e.hasOwnProperty(t)&&(0===t.indexOf("__$")?delete e[t]:i(e[t]))}};if(i(e),a.forEach(function(e){delete e.___$visited}),this.lastReport=t,t.isValid())return e;throw this.getLastError()},i.prototype.setSchemaReader=function(e){return i.setSchemaReader(e)},i.prototype.getSchemaReader=function(){return i.schemaReader},i.setSchemaReader=function(e){i.schemaReader=e},i.registerFormat=function(e,t){s[e]=t},i.unregisterFormat=function(e){delete s[e]},i.getRegisteredFormats=function(){return Object.keys(s)},i.getDefaultOptions=function(){return f.cloneDeep(h)},t.exports=i}).call(this,e("_process"))},{"./FormatValidators":174,"./JsonValidation":175,"./Polyfills":176,"./Report":177,"./SchemaCache":178,"./SchemaCompilation":179,"./SchemaValidation":180,"./Utils":181,"./schemas/hyper-schema.json":183,"./schemas/schema.json":184,_process:159,"lodash.get":154}],183:[function(e,t,a){t.exports={$schema:"http://json-schema.org/draft-04/hyper-schema#",id:"http://json-schema.org/draft-04/hyper-schema#",title:"JSON Hyper-Schema",allOf:[{$ref:"http://json-schema.org/draft-04/schema#"}],properties:{additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}]},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}]},dependencies:{additionalProperties:{anyOf:[{$ref:"#"},{type:"array"}]}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}]},definitions:{additionalProperties:{$ref:"#"}},patternProperties:{additionalProperties:{$ref:"#"}},properties:{additionalProperties:{$ref:"#"}},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"},links:{type:"array",items:{$ref:"#/definitions/linkDescription"}},fragmentResolution:{type:"string"},media:{type:"object",properties:{type:{description:"A media type, as described in RFC 2046",type:"string"},binaryEncoding:{description:"A content encoding scheme, as described in RFC 2045",type:"string"}}},pathStart:{description:"Instances' URIs must start with this value for this schema to apply to them",type:"string",format:"uri"}},definitions:{schemaArray:{type:"array",items:{$ref:"#"}},linkDescription:{title:"Link Description Object",type:"object",required:["href","rel"],properties:{href:{description:"a URI template, as defined by RFC 6570, with the addition of the $, ( and ) characters for pre-processing",type:"string"},rel:{description:"relation to the target resource of the link",type:"string"},title:{description:"a title for the link",type:"string"},targetSchema:{description:"JSON Schema describing the link target",$ref:"#"},mediaType:{description:"media type (as defined by RFC 2046) describing the link target",type:"string"},method:{description:'method for requesting the target of the link (e.g. for HTTP this might be "GET" or "DELETE")',type:"string"},encType:{description:"The media type in which to submit data along with the request",type:"string","default":"application/json"},schema:{description:"Schema describing the data to submit along with the request",$ref:"#"}}}}}},{}],184:[function(e,t,a){t.exports={id:"http://json-schema.org/draft-04/schema#",$schema:"http://json-schema.org/draft-04/schema#",description:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},positiveInteger:{type:"integer",minimum:0},positiveIntegerDefault0:{allOf:[{$ref:"#/definitions/positiveInteger"},{"default":0}]},simpleTypes:{"enum":["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},minItems:1,uniqueItems:!0}},type:"object",properties:{id:{type:"string",format:"uri"},$schema:{type:"string",format:"uri"},title:{type:"string"},description:{type:"string"},"default":{},multipleOf:{type:"number",minimum:0,exclusiveMinimum:!0},maximum:{type:"number"},exclusiveMaximum:{type:"boolean","default":!1},minimum:{type:"number"},exclusiveMinimum:{type:"boolean","default":!1},maxLength:{$ref:"#/definitions/positiveInteger"},minLength:{$ref:"#/definitions/positiveIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],"default":{}},maxItems:{$ref:"#/definitions/positiveInteger"},minItems:{$ref:"#/definitions/positiveIntegerDefault0"},uniqueItems:{type:"boolean","default":!1},maxProperties:{$ref:"#/definitions/positiveInteger"},minProperties:{$ref:"#/definitions/positiveIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},definitions:{type:"object",additionalProperties:{$ref:"#"},"default":{}},properties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},"enum":{type:"array",minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},dependencies:{exclusiveMaximum:["maximum"],exclusiveMinimum:["minimum"]},"default":{}}},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/browser/sway-standalone-min.js b/browser/sway-standalone-min.js index dc1cc09..0a3a546 100644 --- a/browser/sway-standalone-min.js +++ b/browser/sway-standalone-min.js @@ -1,18 +1,19 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.SwaggerApi=e()}}(function(){var e;return function t(e,a,n){function r(s,o){if(!a[s]){if(!e[s]){var u="function"==typeof require&&require;if(!o&&u)return u(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=a[s]={exports:{}};e[s][0].call(l.exports,function(t){var a=e[s][1][t];return r(a?a:t)},l,l.exports,t,e,a,n)}return a[s].exports}for(var i="function"==typeof require&&require,s=0;s0&&t.errors.push.apply(t.errors,n.errors),n.warnings.length>0&&t.warnings.push.apply(t.warnings,n.warnings)}var t={errors:[],warnings:[]},a=this;return e(this.plugin.getStructuralValidator()),0===t.errors.length&&(r.forEach(this.plugin.getSemanticValidators(),e),r.forEach(this.customValidators,e)),t},t.exports=n},{debug:22,lodash:194,url:222}],5:[function(e,t,a){"use strict";function n(e,t,a,n,s,o,u){this.api=e,this.pathObject=t,this.method=a,this.ptr=n,this.definition=s,r.assign(this,s),this.consumes=o,this.produces=u,i("Found operation at %s",n),this.parameterObjects=e.plugin.getOperationParameters(this),this.responseObjects=e.plugin.getOperationResponses(this),this.securityDefinitions=r.reduce(s.security,function(t,a){return r.each(a,function(a,n){var i=e.resolved.securityDefinitions?e.resolved.securityDefinitions[n]:void 0;r.isUndefined(i)||(t[n]=i)}),t},{})}var r=e("lodash"),i=e("debug")("sway:operation"),s=e("../helpers");n.prototype.getParameter=function(e,t){return r.find(this.parameterObjects,function(a){return a.name===e&&(r.isUndefined(t)?!0:a["in"]===t)})},n.prototype.getParameters=function(){return this.parameterObjects},n.prototype.getResponse=function(e){return r.isUndefined(e)?e="default":r.isNumber(e)&&(e=e.toString()),r.find(this.getResponses(),function(t){return t.statusCode===e})},n.prototype.getResponses=function(){return this.responseObjects},n.prototype.validateRequest=function(e){var t={errors:[],warnings:[]};return["post","put"].indexOf(this.method)>-1&&s.validateContentType(e.headers["content-type"]||"application/octet-stream",this.consumes,t),r.each(this.getParameters(),function(a){var n,r=a.getValue(e);r.valid||(n={code:"INVALID_REQUEST_PARAMETER",errors:r.error.errors||[{code:r.error.code,message:r.error.message,path:r.error.path}],"in":r.parameterObject["in"],message:"Invalid parameter ("+a.name+"): "+((r.errors||[]).length>1?"Value failed JSON Schema validation":r.error.message),name:r.parameterObject.name,path:r.error.path},t.errors.push(n))}),t},n.prototype.validateResponse=function(e){var t={errors:[],warnings:[]},a=e?e.statusCode:"default",n=this.getResponse(a);return r.isUndefined(n)?(n=this.getResponse("default"),r.isUndefined(n)&&t.errors.push({code:"INVALID_RESPONSE_CODE",message:"This operation does not have a defined '"+("default"===a?a:a+"' or 'default")+"' response code",path:[]})):t=n.validateResponse(e),t},t.exports=n},{"../helpers":2,debug:22,lodash:194}],6:[function(e,t,a){"use strict";function n(e,t){var a,n,o,u=e.pathObject.api.plugin,c=s.pathFromPtr(e.ptr),l=!1,f=e.computedSchema;this.parameterObject=e,this.raw=t,Object.defineProperties(this,{error:{enumerable:!0,get:function(){return this.valid===!0?void 0:a}},valid:{enumerable:!0,get:function(){var t,s,o={errors:[],warnings:[]},l=!1;if(r.isUndefined(n))if(n=!0,t=this.value,r.isUndefined(a))try{if(e.required===!0&&r.isUndefined(t))throw s=new Error("Value is required but was not provided"),s.code="REQUIRED",s;if(e.required===!1&&r.isUndefined(t)?l=!0:f.allowEmptyValue===!0&&""===t?l=!0:"file"===e.type?l=!0:"string"===f.type&&(["date","date-time"].indexOf(f.format)>-1&&r.isDate(t)?l=!0:"string"===f.type&&r.isFunction(t.readUInt8)&&(l=!0)),l||(o=i.validateAgainstSchema(u.getJSONSchemaValidator(),e.getSchema(),t)),o.errors.length>0)throw s=new Error("Value failed JSON Schema validation"),s.code="SCHEMA_VALIDATION_FAILED",s.errors=o.errors,s}catch(p){p.failedValidation=!0,p.path=c,a=p,n=!1}else n=!1;return n}},value:{enumerable:!0,get:function(){if(!l){if("file"===f.type)o=t;else{try{o=u.convertValue(f,{collectionFormat:e.collectionFormat},t)}catch(n){a=n}r.isUndefined(o)&&r.isUndefined(a)&&("array"===f.type?r.isArray(f.items)?(o=r.reduce(f.items,function(e,t){return e.push(t["default"]),e},[]),r.all(o,r.isUndefined)&&(o=void 0)):r.isUndefined(f.items)||r.isUndefined(f.items["default"])||(o=[f.items["default"]]):r.isUndefined(f["default"])||(o=f["default"]))}l=!0}return o}}})}var r=e("lodash"),i=e("../helpers"),s=e("json-refs");t.exports=n},{"../helpers":2,"json-refs":172,lodash:194}],7:[function(e,t,a){"use strict";function n(e,t,a,n){this.computedSchema=n,this.definition=a,this.ptr=t,e instanceof s?(this.operationObject=e,this.pathObject=e.pathObject):(this.operationObject=void 0,this.pathObject=e),r.assign(this,a),i("Found %s parameter (%s in %s) at %s",r.isUndefined(this.operationObject)?"path-level":"operation",a.name,a["in"],t)}var r=e("lodash"),i=e("debug")("sway:parameter"),s=e("./operation"),o=e("./parameter-value"),u=e("url").parse;n.prototype.getSchema=function(){return this.computedSchema},n.prototype.getSample=function(){return this.pathObject.api.plugin.getSample(this.computedSchema)},n.prototype.getValue=function(e){var t=(this.operationObject||this.pathObject).api;if(r.isUndefined(e))throw new TypeError("req is required");if(-1===t.plugin.parameterLocations.indexOf(this["in"]))throw new Error("Invalid 'in' value: "+this["in"]);var a,n,i=this,s=this.computedSchema.type||"object";switch(this["in"]){case"body":n=e.body;break;case"formData":if("file"===s){if(r.isUndefined(e.files))throw new Error("req.files must be provided for 'formData' parameters of type 'file'");n=e.files[this.name]}else{if(r.isUndefined(e.body))throw new Error("req.body must be provided for 'formData' parameters");n=e.body[this.name]}break;case"header":if(r.isUndefined(e.headers))throw new Error("req.headers must be provided for 'header' parameters");n=e.headers[this.name.toLowerCase()];break;case"path":if(r.isUndefined(e.url))throw new Error("req.url must be provided for 'path' parameters");a=this.pathObject.regexp.exec(u(decodeURIComponent(e.url)).pathname),a&&(n=a[r.findIndex(this.pathObject.regexp.keys,function(e){return e.name===i.name})+1]);break;case"query":if(r.isUndefined(e.query))throw new Error("req.query must be provided for 'query' parameters");n=r.get(e.query,this.name)}return new o(this,n)},t.exports=n},{"./operation":5,"./parameter-value":6,debug:22,lodash:194,url:222}],8:[function(e,t,a){"use strict";function n(e,t,a,n,s){this.api=e,this.path=t,this.ptr=a,this.definition=n,this.regexp=s,r.assign(this,n),i("Found path at %s",a),this.parameterObjects=e.plugin.getPathParameters(this),this.operationObjects=e.plugin.getOperations(this)}var r=e("lodash"),i=e("debug")("sway:path");n.prototype.getOperation=function(e){return r.find(this.operationObjects,function(t){return t.method===e})},n.prototype.getOperations=function(){return this.operationObjects},n.prototype.getOperationsByTag=function(e){return r.filter(this.operationObjects,function(t){return r.contains(t.tags,e)})},n.prototype.getParameters=function(){return this.parameterObjects},t.exports=n},{debug:22,lodash:194}],9:[function(e,t,a){"use strict";function n(e,t,a,n){this.definition=a,this.operationObject=e,this.ptr=t,this.statusCode=n,i.assign(this,a),s("Found %s response at %s",n,t),r=e.api.plugin.getJSONSchemaValidator()}var r,i=e("lodash"),s=e("debug")("sway:response"),o=e("../helpers"),u=e("js-yaml");n.prototype.getExample=function(e){var t;return i.isPlainObject(this.definition.examples)&&(t=this.definition.examples[e]),i.isUndefined(t)||i.isString(t)||("application/json"===e?t=JSON.stringify(t,null,2):"application/x-yaml"===e&&(t=u.safeDump(t,{indent:2}))),t},n.prototype.getSample=function(){var e;return i.isUndefined(this.definition.schema)||(e=this.operationObject.api.plugin.getSample(this.definition.schema)),e},n.prototype.validateResponse=function(e){var t,a,n={errors:[],warnings:[]},s=this;if(i.isUndefined(e)&&(e={}),i.isUndefined(e.headers)&&(e.headers={}),i.isUndefined(this.definition.schema)||-1!==i.indexOf(["204","304"],this.statusCode)||o.validateContentType(e.headers["content-type"],this.operationObject.produces,n),i.forEach(this.headers,function(t,a){var u,c;try{u=s.operationObject.api.plugin.convertValue(t,{collectionFormat:t.collectionFormat},e.headers[a.toLowerCase()]||e.headers[a]||t["default"])}catch(l){n.errors.push({code:"INVALID_RESPONSE_HEADER",errors:l.errors||[{code:l.code,message:l.message,path:l.path}],message:"Invalid header ("+a+"): "+l.message,name:a,path:l.path})}i.isUndefined(u)||i.isDate(u)||(c=o.validateAgainstSchema(r,t,u),c.errors.length>0&&n.errors.push({code:"INVALID_RESPONSE_HEADER",errors:c.errors,message:"Invalid header ("+a+"): "+(c.errors.length>1?"Value failed JSON Schema validation":c.errors[0].message),name:a,path:[]}))}),!i.isUndefined(this.definition.schema)&&-1===i.indexOf(["204","304"],this.statusCode)){try{t=s.operationObject.api.plugin.convertValue(this.definition.schema,{encoding:e.encoding},e.body),a=o.validateAgainstSchema(r,this.definition.schema,t)}catch(u){a={errors:[{code:u.code,message:u.message,path:u.path}]}}a.errors.length>0&&n.errors.push({code:"INVALID_RESPONSE_BODY",errors:a.errors,message:"Invalid body: "+(a.errors.length>1?"Value failed JSON Schema validation":a.errors[0].message),path:[]})}return n},t.exports=n},{"../helpers":2,debug:22,"js-yaml":142,lodash:194}],10:[function(e,t,a){"use strict";function n(e){var t=r.cloneDeep(e);return delete t.format,t}var r=e("lodash"),i=e("js-base64").Base64,s=e("json-schema-faker/lib/types/string");t.exports["byte"]=function(e,t){return i.encode(s(n(t)))},t.exports.password=function(e,t){return s(n(t))}},{"js-base64":141,"json-schema-faker/lib/types/string":180,lodash:194}],11:[function(e,t,a){"use strict";function n(){return!0}var r=e("lodash");t.exports.int32=t.exports.int64=function(e){return r.isNumber(e)&&e%1===0},t.exports["byte"]=n,t.exports["double"]=n,t.exports["float"]=n,t.exports.password=n},{lodash:194}],12:[function(e,t,a){"use strict";var n=e("lodash"),r=["allowEmptyValue","default","description","enum","exclusiveMaximum","exclusiveMinimum","format","items","maxItems","maxLength","maximum","minItems","minLength","minimum","multipleOf","pattern","type","uniqueItems"];t.exports.getParameterSchema=function(e){var t;return n.isUndefined(e.schema)?(t={},n.forEach(r,function(a){n.isUndefined(e[a])||(t[a]=e[a])})):t=e.schema,t},t.exports.supportedHttpMethods=["get","put","post","delete","options","head","patch"]},{lodash:194}],13:[function(e,t,a){"use strict";function n(e,t,a){var r,s=a,o=i.isPlainObject(e)?e.type:void 0,u=a,c=typeof u;if(i.has(e,"type")&&-1===x.indexOf(o))throw new TypeError("Invalid 'type' value: "+o);if(i.isUndefined(o))return a;if(i.isUndefined(a))return a;if(i.isFunction(a.readUInt8)&&(a=a.toString(t.encoding),u=a,c=typeof a),e.allowEmptyValue&&""===a)return a;if(["array","object"].indexOf(o)>-1)try{a=JSON.parse(a)}catch(r){}switch(o){case"array":if(i.isString(a)){if(-1===v.indexOf(t.collectionFormat))throw new TypeError("Invalid 'collectionFormat' value: "+t.collectionFormat);switch(t.collectionFormat){case"csv":case void 0:a=a.split(",");break;case"multi":a=[a];break;case"pipes":a=a.split("|");break;case"ssv":a=a.split(" ");break;case"tsv":a=a.split(" ")}}i.isArray(a)&&(a=i.map(a,function(a,r){return n(i.isArray(e.items)?e.items[r]:e.items,t,a)}));break;case"boolean":i.isBoolean(a)||("true"===a?a=!0:"false"===a?a=!1:r=new TypeError("Not a valid boolean: "+a));break;case"integer":i.isNumber(a)||(i.isString(a)&&0===i.trim(a).length&&(a=NaN),a=Number(a),i.isNaN(a)&&(r=new TypeError("Not a valid integer: "+s)));break;case"number":i.isNumber(a)||(i.isString(a)&&0===i.trim(a).length&&(a=NaN),a=Number(a),i.isNaN(a)&&(r=new TypeError("Not a valid number: "+s)));break;case"string":["date","date-time"].indexOf(e.format)>-1?(i.isString(a)&&(a=new Date(a)),i.isDate(a)&&"Invalid Date"!==a.toString()||(r=new TypeError("Not a valid "+e.format+" string: "+s),r.code="INVALID_FORMAT")):i.isString(a)||(r=new TypeError("Not a valid string: "+a))}if(!i.isUndefined(r))throw i.isUndefined(r.code)?(r.code="INVALID_TYPE",r.message="Expected type "+o+" but found type "+c):r.message="Object didn't pass validation for format "+e.format+": "+u,r.failedValidation=!0,r.path=[],r;return a}function r(e){function t(a,n,r){function s(e,n){r.push(n),t(a,e,r),r.pop()}-1===a.indexOf(n)?(a.push(n),(i.isArray(n)||i.isPlainObject(n))&&i.each(n,function(e,t){s(e,t.toString())})):i.set(e,r,{}),a.pop()}t([],e,[])}var i=e("lodash"),s=e("path").dirname,o=e("./format-generators"),u=e("../../helpers"),c=e("json-refs"),l=e("../../types/operation"),f=e("../../types/parameter"),p=e("../../types/path"),m=e("path-to-regexp"),h=e("../../types/response"),d=e("../../types/api"),g=e("./validators"),y=e("./helpers"),w=e("js-yaml"),v=[void 0,"csv","multi","pipes","ssv","tsv"],b=e("./format-validators"),E="https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md",A=u.createJSONValidator({formatValidators:b}),D=u.createJSONSchemaMocker({formatGenerators:o}),j=["body","formData","header","path","query"],x=["array","boolean","integer","object","number","string"],C="2.0";t.exports.collectionFormats=v,t.exports.documentation=E,t.exports.parameterLocations=j,t.exports.supportedHttpMethods=y.supportedHttpMethods,t.exports.types=x,t.exports.version=C,t.exports.canProcess=function(e){return e.swagger===C},t.exports.convertValue=function(e,t,a){return n(e,t,a)},t.exports.createSwaggerApi=function(e,a){var n=i.cloneDeep(a),o=n.jsonRefs||{};return o.includeInvalid=!0,i.isString(n.definition)&&(o.relativeBase=s(n.definition)),i.isUndefined(o.loaderOptions)&&(o.loaderOptions={}),i.isUndefined(o.loaderOptions.processContent)&&(o.loaderOptions.processContent=function(e,t){t(void 0,w.safeLoad(e.text))}),c.resolveRefs(e,o).then(function(n){return r(n.resolved),new d(t.exports,e,n.resolved,n.refs,a)})},t.exports.getJSONSchemaValidator=function(){return A},t.exports.getOperations=function(e){var t=[],a=c.pathFromPtr(e.ptr),n=i.reduce(e.definition.parameters,function(e,t,n){return e[t.name+":"+t["in"]]={path:a.concat(["parameters",n.toString()]),definition:t},e},{});return i.forEach(e.definition,function(r,s){if(-1!==i.indexOf(y.supportedHttpMethods,s)){var o=i.cloneDeep(r),u={},f=a.concat(s);i.forEach(n,function(e,t){u[t]=e}),i.forEach(r.parameters,function(e,t){u[e.name+":"+e["in"]]={path:f.concat(["parameters",t.toString()]),definition:e}}),o.parameters=i.map(i.values(u),function(e){return e.definition.$$$ptr$$$=c.pathToPtr(e.path),e.definition}),i.isUndefined(o.security)&&(o.security=e.api.resolved.security),t.push(new l(e.api,e,s,c.pathToPtr(f),o,o.consumes||e.api.resolved.consumes||[],o.produces||e.api.resolved.produces||[]))}}),t},t.exports.getOperationParameters=function(e){var t=i.reduce(e.pathObject.getParameters(),function(e,t){return e[t.ptr]=t,e},{});return i.map(e.parameters,function(a){var n=a.$$$ptr$$$,r=t[n];return delete a.$$$ptr$$$,i.isUndefined(r)?new f(e,n,a,y.getParameterSchema(a)):r})},t.exports.getOperationResponses=function(e){return i.map(e.definition.responses,function(t,a){return new h(e,c.pathToPtr(c.pathFromPtr(e.ptr).concat(["responses",a])),t,a)})},t.exports.getPathParameters=function(e){return i.map(e.definition.parameters,function(t,a){return new f(e,c.pathToPtr(c.pathFromPtr(e.ptr).concat(a.toString())),t,y.getParameterSchema(t))})},t.exports.getPaths=function(e){var t=e.resolved.basePath||"/";return"/"===t.charAt(t.length-1)&&(t=t.substring(0,t.length-1)),i.map(e.resolved.paths,function(a,n){return new p(e,n,c.pathToPtr(["paths",n]),a,m(t+n.replace(/\{/g,":").replace(/\}/g,"")))})},t.exports.getSample=function(e){return D(e)},t.exports.getSemanticValidators=function(){return g.semanticValidators},t.exports.getStructuralValidator=function(){return g.jsonSchemaValidator}},{"../../helpers":2,"../../types/api":4,"../../types/operation":5,"../../types/parameter":7,"../../types/path":8,"../../types/response":9,"./format-generators":10,"./format-validators":11,"./helpers":12,"./validators":15,"js-yaml":142,"json-refs":172,lodash:194,path:197,"path-to-regexp":201}],14:[function(e,t,a){t.exports={title:"A JSON Schema for Swagger 2.0 API.",id:"http://swagger.io/v2/schema.json#",$schema:"http://json-schema.org/draft-04/schema#",type:"object",required:["swagger","info","paths"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{swagger:{type:"string","enum":["2.0"],description:"The Swagger version of this document."},info:{$ref:"#/definitions/info"},host:{type:"string",pattern:"^[^{}/ :\\\\]+(?::\\d+)?$",description:"The host (name or ip) of the API. Example: 'swagger.io'"},basePath:{type:"string",pattern:"^/",description:"The base path to the API. Example: '/api'."},schemes:{$ref:"#/definitions/schemesList"},consumes:{description:"A list of MIME types accepted by the API.",$ref:"#/definitions/mediaTypeList"},produces:{description:"A list of MIME types the API can produce.",$ref:"#/definitions/mediaTypeList"},paths:{$ref:"#/definitions/paths"},definitions:{$ref:"#/definitions/definitions"},parameters:{$ref:"#/definitions/parameterDefinitions"},responses:{$ref:"#/definitions/responseDefinitions"},security:{$ref:"#/definitions/security"},securityDefinitions:{$ref:"#/definitions/securityDefinitions"},tags:{type:"array",items:{$ref:"#/definitions/tag"},uniqueItems:!0},externalDocs:{$ref:"#/definitions/externalDocs"}},definitions:{info:{type:"object",description:"General information about the API.",required:["version","title"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{title:{type:"string",description:"A unique and precise title of the API."},version:{type:"string",description:"A semantic version number of the API."},description:{type:"string",description:"A longer description of the API. Should be different from the title. GitHub Flavored Markdown is allowed."},termsOfService:{type:"string",description:"The terms of service for the API."},contact:{$ref:"#/definitions/contact"},license:{$ref:"#/definitions/license"}}},contact:{type:"object",description:"Contact information for the owners of the API.",additionalProperties:!1,properties:{name:{type:"string",description:"The identifying name of the contact person/organization."},url:{type:"string",description:"The URL pointing to the contact information.",format:"uri"},email:{type:"string",description:"The email address of the contact person/organization.",format:"email"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},license:{type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"The name of the license type. It's encouraged to use an OSI compatible license."},url:{type:"string",description:"The URL pointing to the license.",format:"uri"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},paths:{type:"object",description:"Relative paths to the individual endpoints. They must be relative to the 'basePath'.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"},"^/":{$ref:"#/definitions/pathItem"}},additionalProperties:!1},definitions:{type:"object",additionalProperties:{$ref:"#/definitions/schema"},description:"One or more JSON objects describing the schemas being consumed and produced by the API."},parameterDefinitions:{type:"object",additionalProperties:{$ref:"#/definitions/parameter"},description:"One or more JSON representations for parameters"},responseDefinitions:{type:"object",additionalProperties:{$ref:"#/definitions/response"},description:"One or more JSON representations for parameters"},externalDocs:{type:"object",additionalProperties:!1,description:"information about external documentation",required:["url"],properties:{description:{type:"string"},url:{type:"string",format:"uri"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},examples:{type:"object",additionalProperties:!0},mimeType:{type:"string",description:"The MIME type of the HTTP message."},operation:{type:"object",required:["responses"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{tags:{type:"array",items:{type:"string"},uniqueItems:!0},summary:{type:"string",description:"A brief summary of the operation."},description:{type:"string",description:"A longer description of the operation, GitHub Flavored Markdown is allowed."},externalDocs:{$ref:"#/definitions/externalDocs"},operationId:{type:"string",description:"A unique identifier of the operation."},produces:{description:"A list of MIME types the API can produce.",$ref:"#/definitions/mediaTypeList"},consumes:{description:"A list of MIME types the API can consume.",$ref:"#/definitions/mediaTypeList"},parameters:{$ref:"#/definitions/parametersList"},responses:{$ref:"#/definitions/responses"},schemes:{$ref:"#/definitions/schemesList"},deprecated:{type:"boolean","default":!1},security:{$ref:"#/definitions/security"}}},pathItem:{type:"object",additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{$ref:{type:"string"},get:{$ref:"#/definitions/operation"},put:{$ref:"#/definitions/operation"},post:{$ref:"#/definitions/operation"},"delete":{$ref:"#/definitions/operation"},options:{$ref:"#/definitions/operation"},head:{$ref:"#/definitions/operation"},patch:{$ref:"#/definitions/operation"},parameters:{$ref:"#/definitions/parametersList"}}},responses:{type:"object",description:"Response objects names can either be any valid HTTP status code or 'default'.",minProperties:1,additionalProperties:!1,patternProperties:{"^([0-9]{3})$|^(default)$":{$ref:"#/definitions/responseValue"},"^x-":{$ref:"#/definitions/vendorExtension"}},not:{type:"object",additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}}},responseValue:{oneOf:[{$ref:"#/definitions/response"},{$ref:"#/definitions/jsonReference"}]},response:{type:"object",required:["description"],properties:{description:{type:"string"},schema:{oneOf:[{$ref:"#/definitions/schema"},{$ref:"#/definitions/fileSchema"}]},headers:{$ref:"#/definitions/headers"},examples:{$ref:"#/definitions/examples"}},additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},headers:{type:"object",additionalProperties:{$ref:"#/definitions/header"}},header:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{type:"string","enum":["string","number","integer","boolean","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},vendorExtension:{description:"Any property starting with x- is valid.",additionalProperties:!0,additionalItems:!0},bodyParameter:{type:"object",required:["name","in","schema"],patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},"in":{type:"string",description:"Determines the location of the parameter.","enum":["body"]},required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},schema:{$ref:"#/definitions/schema"}},additionalProperties:!1},headerParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["header"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum" -},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},queryParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["query"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},allowEmptyValue:{type:"boolean","default":!1,description:"allows sending a parameter by name only or with an empty value."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormatWithMulti"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},formDataParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["formData"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},allowEmptyValue:{type:"boolean","default":!1,description:"allows sending a parameter by name only or with an empty value."},type:{type:"string","enum":["string","number","boolean","integer","array","file"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormatWithMulti"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},pathParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},required:["required"],properties:{required:{type:"boolean","enum":[!0],description:"Determines whether or not this parameter is required or optional."},"in":{type:"string",description:"Determines the location of the parameter.","enum":["path"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},nonBodyParameter:{type:"object",required:["name","in","type"],oneOf:[{$ref:"#/definitions/headerParameterSubSchema"},{$ref:"#/definitions/formDataParameterSubSchema"},{$ref:"#/definitions/queryParameterSubSchema"},{$ref:"#/definitions/pathParameterSubSchema"}]},parameter:{oneOf:[{$ref:"#/definitions/bodyParameter"},{$ref:"#/definitions/nonBodyParameter"}]},schema:{type:"object",description:"A deterministic version of a JSON Schema object.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{$ref:{type:"string"},format:{type:"string"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},multipleOf:{$ref:"http://json-schema.org/draft-04/schema#/properties/multipleOf"},maximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/maximum"},exclusiveMaximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"},minimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/minimum"},exclusiveMinimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"},maxLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},pattern:{$ref:"http://json-schema.org/draft-04/schema#/properties/pattern"},maxItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},uniqueItems:{$ref:"http://json-schema.org/draft-04/schema#/properties/uniqueItems"},maxProperties:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minProperties:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},required:{$ref:"http://json-schema.org/draft-04/schema#/definitions/stringArray"},"enum":{$ref:"http://json-schema.org/draft-04/schema#/properties/enum"},additionalProperties:{anyOf:[{$ref:"#/definitions/schema"},{type:"boolean"}],"default":{}},type:{$ref:"http://json-schema.org/draft-04/schema#/properties/type"},items:{anyOf:[{$ref:"#/definitions/schema"},{type:"array",minItems:1,items:{$ref:"#/definitions/schema"}}],"default":{}},allOf:{type:"array",minItems:1,items:{$ref:"#/definitions/schema"}},properties:{type:"object",additionalProperties:{$ref:"#/definitions/schema"},"default":{}},discriminator:{type:"string"},readOnly:{type:"boolean","default":!1},xml:{$ref:"#/definitions/xml"},externalDocs:{$ref:"#/definitions/externalDocs"},example:{}},additionalProperties:!1},fileSchema:{type:"object",description:"A deterministic version of a JSON Schema object.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},required:["type"],properties:{format:{type:"string"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},required:{$ref:"http://json-schema.org/draft-04/schema#/definitions/stringArray"},type:{type:"string","enum":["file"]},readOnly:{type:"boolean","default":!1},externalDocs:{$ref:"#/definitions/externalDocs"},example:{}},additionalProperties:!1},primitivesItems:{type:"object",additionalProperties:!1,properties:{type:{type:"string","enum":["string","number","integer","boolean","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},security:{type:"array",items:{$ref:"#/definitions/securityRequirement"},uniqueItems:!0},securityRequirement:{type:"object",additionalProperties:{type:"array",items:{type:"string"},uniqueItems:!0}},xml:{type:"object",additionalProperties:!1,properties:{name:{type:"string"},namespace:{type:"string"},prefix:{type:"string"},attribute:{type:"boolean","default":!1},wrapped:{type:"boolean","default":!1}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},tag:{type:"object",additionalProperties:!1,required:["name"],properties:{name:{type:"string"},description:{type:"string"},externalDocs:{$ref:"#/definitions/externalDocs"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},securityDefinitions:{type:"object",additionalProperties:{oneOf:[{$ref:"#/definitions/basicAuthenticationSecurity"},{$ref:"#/definitions/apiKeySecurity"},{$ref:"#/definitions/oauth2ImplicitSecurity"},{$ref:"#/definitions/oauth2PasswordSecurity"},{$ref:"#/definitions/oauth2ApplicationSecurity"},{$ref:"#/definitions/oauth2AccessCodeSecurity"}]}},basicAuthenticationSecurity:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{type:"string","enum":["basic"]},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},apiKeySecurity:{type:"object",additionalProperties:!1,required:["type","name","in"],properties:{type:{type:"string","enum":["apiKey"]},name:{type:"string"},"in":{type:"string","enum":["header","query"]},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2ImplicitSecurity:{type:"object",additionalProperties:!1,required:["type","flow","authorizationUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["implicit"]},scopes:{$ref:"#/definitions/oauth2Scopes"},authorizationUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2PasswordSecurity:{type:"object",additionalProperties:!1,required:["type","flow","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["password"]},scopes:{$ref:"#/definitions/oauth2Scopes"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2ApplicationSecurity:{type:"object",additionalProperties:!1,required:["type","flow","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["application"]},scopes:{$ref:"#/definitions/oauth2Scopes"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2AccessCodeSecurity:{type:"object",additionalProperties:!1,required:["type","flow","authorizationUrl","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["accessCode"]},scopes:{$ref:"#/definitions/oauth2Scopes"},authorizationUrl:{type:"string",format:"uri"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2Scopes:{type:"object",additionalProperties:{type:"string"}},mediaTypeList:{type:"array",items:{$ref:"#/definitions/mimeType"},uniqueItems:!0},parametersList:{type:"array",description:"The parameters needed to send a valid API call.",additionalItems:!1,items:{oneOf:[{$ref:"#/definitions/parameter"},{$ref:"#/definitions/jsonReference"}]},uniqueItems:!0},schemesList:{type:"array",description:"The transfer protocol of the API.",items:{type:"string","enum":["http","https","ws","wss"]},uniqueItems:!0},collectionFormat:{type:"string","enum":["csv","ssv","tsv","pipes"],"default":"csv"},collectionFormatWithMulti:{type:"string","enum":["csv","ssv","tsv","pipes","multi"],"default":"csv"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},multipleOf:{$ref:"http://json-schema.org/draft-04/schema#/properties/multipleOf"},maximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/maximum"},exclusiveMaximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"},minimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/minimum"},exclusiveMinimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"},maxLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},pattern:{$ref:"http://json-schema.org/draft-04/schema#/properties/pattern"},maxItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},uniqueItems:{$ref:"http://json-schema.org/draft-04/schema#/properties/uniqueItems"},"enum":{$ref:"http://json-schema.org/draft-04/schema#/properties/enum"},jsonReference:{type:"object",required:["$ref"],additionalProperties:!1,properties:{$ref:{type:"string"}}}}}},{}],15:[function(e,t,a){"use strict";function n(e){var t=p.keys(e.properties);return p.forEach(e.allOf,function(e){p.forEach(n(e),function(e){-1===p.indexOf(t,e)&&t.push(e)})}),t}function r(e,t,a,n,i,s){function o(e){return p.indexOf(t,h.pathToPtr(e))>-1}function u(a,n){o(n)||p.forEach(a,function(a,o){p.isNumber(o)&&(o=o.toString()),r(e,t,a,n.concat(o),i,s)})}var c=a.type||"object";o(n)||(p.isUndefined(a.schema)?"array"!==c||p.isUndefined(a.items)?"object"===c&&(p.isUndefined(a.additionalProperties)||r(e,t,a.additionalProperties,n.concat("additionalProperties"),i,s),p.forEach(["allOf","properties"],function(e){p.isUndefined(a[e])||u(a[e],n.concat(e))})):p.isArray(a.items)?u(a.items,n.concat("items")):r(e,t,a.items,n.concat("items"),i,s):r(e,t,a.schema,n.concat("schema"),i,s),p.forEach(i,function(t){t(e,s,a,n)}))}function i(e){var t=m.validateAgainstSchema(e.plugin.getJSONSchemaValidator(),d,e.resolved);return t.errors=t.errors.map(function(e){var t=["additionalProperties","items"].indexOf(e.path[e.path.length-1])>-1?"schema":e.path[e.path.length-2];if(["ANY_OF_MISSING","ONE_OF_MISSING"].indexOf(e.code)>-1){switch(t){case"parameters":t="parameter";break;case"responses":t="response";break;case"schema":t+=" "+e.path[e.path.length-1]}e.message="Not a valid "+t+" definition"}return e}),p.each(e.references,function(e,a){var n,r=h.pathFromPtr(a);e.missing?(n={code:"UNRESOLVABLE_REFERENCE",message:"Reference could not be resolved: "+e.uri,path:r.concat("$ref")},p.has(e,"error")&&(n.error=e.error),t.errors.push(n)):"invalid"===e.type&&t.errors.push({code:"INVALID_REFERENCE",message:e.error||"Invalid JSON Reference",path:r.concat("$ref")})}),t}function s(e,t,a,n){"array"===a.type&&p.isUndefined(a.items)&&t.errors.push({code:"OBJECT_MISSING_REQUIRED_PROPERTY",message:"Missing required property: items",path:n})}function o(e,t,a,n){var r;p.isUndefined(a["default"])||(r=m.validateAgainstSchema(e.plugin.getJSONSchemaValidator(),a,a["default"]),p.forEach(r.errors,function(e){e.path=n.concat(e.path.concat("default")),t.errors.push(e)}),p.forEach(r.warnings,function(e){e.path=n.concat(e.path.push("default")),t.warnings.push(e)}))}function u(e,t,a,r){p.forEach(p.difference(a.required||[],n(a)),function(e){t.errors.push({code:"OBJECT_MISSING_REQUIRED_PROPERTY_DEFINITION",message:"Missing required property definition: "+e,path:r})})}function c(e){function t(e,t){p.has(i,e)?i[e].parents.push(t):i[e]={lineage:[],parents:[t]}}function a(e,t){-1===p.indexOf(o,e)&&(p.isUndefined(o[e])&&(o[e]=[]),e.indexOf("allOf")>-1&&a(e.substring(0,e.lastIndexOf("/allOf"))),o[e].push(t))}function n(e){return function(t,n){p.forEach(t,function(t,r){var i=["securityDefinitions",r],o=h.pathToPtr(i),c=e.concat([n.toString(),r]);-1===p.indexOf(s,o)?u.errors.push({code:"UNRESOLVABLE_REFERENCE",message:"Security definition could not be resolved: "+r,path:c}):(a(o,h.pathToPtr(c)),p.forEach(t,function(e,t){var n=c.concat(t.toString()),r=h.pathToPtr(i.concat(["scopes",e]));-1===p.indexOf(s,r)?u.errors.push({code:"UNRESOLVABLE_REFERENCE",message:"Security scope definition could not be resolved: "+e,path:n}):a(h.pathToPtr(i.concat(["scopes",e])),r)}))})}}function r(e,t,a){var n=i[t||e];n&&p.each(n.parents,function(t){a.push(t),e!==t&&r(e,t,a)})}var i={},s=[],o={},u={errors:[],warnings:[]};return p.forEach(e.resolved.definitions,function(e,t){s.push(h.pathToPtr(["definitions",t]))}),p.forEach(e.resolved.parameters,function(e,t){s.push(h.pathToPtr(["parameters",t]))}),p.forEach(e.resolved.responses,function(e,t){s.push(h.pathToPtr(["responses",t]))}),p.forEach(e.resolved.securityDefinitions,function(e,t){var a=["securityDefinitions",t];s.push(h.pathToPtr(a)),p.forEach(e.scopes,function(e,t){var n=h.pathToPtr(a.concat(["scopes",t]));-1===p.indexOf(s,n)&&s.push(n)})}),p.forEach(e.references,function(e,n){var r=h.pathFromPtr(n);p.has(e,"missing")||(a(e.uri,n),"allOf"===r[r.length-2]&&t(h.pathToPtr(r.slice(0,r.length-2)),e.uri))}),p.forEach(i,function(e,t){r(t,void 0,e.lineage),(e.lineage.length>1&&e.lineage[e.lineage.length-1]===t||e.parents[0]===t)&&u.errors.push({code:"CIRCULAR_INHERITANCE",lineage:[t].concat(e.lineage),message:"Schema object inherits from itself: "+t,path:h.pathFromPtr(t)})}),p.forEach(e.resolved.security,n(["security"])),p.forEach(e.resolved.paths,function(e,t){var a=["paths",t];p.forEach(e.security,n(a.concat("security"))),p.forEach(e,function(e,t){-1!==p.indexOf(g.supportedHttpMethods,t)&&p.forEach(e.security,n(a.concat([t,"security"])))})}),p.forEach(p.difference(s,Object.keys(o)),function(e){u.warnings.push({code:"UNUSED_DEFINITION",message:"Definition is not used: "+e,path:h.pathFromPtr(e)})}),u}function l(e){function t(t,a){p.forEach(t,function(t,s){var o;p.isNumber(s)&&(s=s.toString()),o=a.concat(s),"body"!==t["in"]&&(t=g.getParameterSchema(t)),r(e,n,t,o,c,i)})}function a(t,a){p.forEach(t,function(t,s){var o=a.concat(s);p.forEach(t.headers,function(t,a){r(e,n,t,o.concat(["headers",a]),c,i)}),p.isUndefined(t.schema)||r(e,n,t.schema,o.concat("schema"),c,i)})}var n=p.reduce(e.references,function(e,t,a){var n=h.pathFromPtr(a);return e.push(h.pathToPtr(n)),e},[]),i={errors:[],warnings:[]},c=[s,o,u];return p.forEach(e.resolved.definitions,function(t,a){r(e,n,t,["definitions",a],c,i)}),t(e.resolved.parameters,["parameters"]),a(e.resolved.responses,["responses"]),p.forEach(e.resolved.paths,function(e,n){var r=["paths",n];t(e.parameters,r.concat("parameters")),p.forEach(e,function(e,n){var i=r.concat(n);-1!==p.indexOf(g.supportedHttpMethods,n)&&(t(e.parameters,i.concat("parameters")),a(e.responses,i.concat("responses")))})}),i}function f(e){function t(e,t,n){var r=t["in"]+":"+t.name;return p.indexOf(e,r)>-1?a.errors.push({code:"DUPLICATE_PARAMETER",message:"Operation cannot have duplicate parameters: "+h.pathToPtr(n),path:n}):e.push(r),e}var a={errors:[],warnings:[]};return p.reduce(e.resolved.paths,function(n,r,i){var s=[],o=i,u=["paths",i];return p.forEach(i.match(/\{(.*?)\}/g),function(e,t){s.push(e.replace(/[{}]/g,"")),o=o.replace(e,"arg"+t)}),s.indexOf("")>-1&&a.errors.push({code:"EMPTY_PATH_PARAMETER_DECLARATION",message:"Path parameter declaration cannot be empty: "+i,path:["paths",i]}),p.indexOf(n.paths,o)>-1?a.errors.push({code:"EQUIVALENT_PATH",message:"Equivalent path already exists: "+i,path:u}):n.paths.push(o),p.reduce(r.parameters,function(e,a,n){return t(e,a,u.concat(["parameters",n.toString()]))},[]),p.forEach(r,function(r,o){var c,l,f={},m=u.concat(o),d=r.operationId;-1!==p.indexOf(g.supportedHttpMethods,o)&&(p.isUndefined(d)||(-1!==p.indexOf(n.operationIds,d)?a.errors.push({code:"DUPLICATE_OPERATIONID",message:"Cannot have multiple operations with the same operationId: "+d,path:m.concat(["operationId"])}):n.operationIds.push(d)),p.reduce(r.parameters,function(e,a,n){return t(e,a,m.concat(["parameters",n.toString()]))},[]),l=e.getOperation(i,o).getParameters(),c=p.reduce(l,function(e,t){return"path"===t["in"]?f[t.name]=t.ptr:"body"===t["in"]?e.bodyParameteters+=1:"formData"===t["in"]&&(e.formParameters+=1),e},{bodyParameteters:0,formParameters:0}),c.bodyParameteters>1&&a.errors.push({code:"MULTIPLE_BODY_PARAMETERS",message:"Operation cannot have multiple body parameters",path:m}),c.bodyParameteters>0&&c.formParameters>0&&a.errors.push({code:"INVALID_PARAMETER_COMBINATION",message:"Operation cannot have a body parameter and a formData parameter",path:m}),p.forEach(p.difference(s,p.keys(f)),function(e){a.errors.push({code:"MISSING_PATH_PARAMETER_DEFINITION",message:"Path parameter is declared but is not defined: "+e,path:m})}),p.forEach(p.difference(p.keys(f),s),function(e){a.errors.push({code:"MISSING_PATH_PARAMETER_DECLARATION",message:"Path parameter is defined but is not declared: "+e,path:h.pathFromPtr(f[e])})}))}),n},{paths:[],operationIds:[]}),a}var p=e("lodash"),m=e("../../helpers"),h=e("json-refs"),d=e("./schema.json"),g=e("./helpers");t.exports={jsonSchemaValidator:i,semanticValidators:[c,l,f]}},{"../../helpers":2,"./helpers":12,"./schema.json":14,"json-refs":172,lodash:194}],16:[function(e,t,a){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(e){"use strict";function t(e){var t=e.charCodeAt(0);return t===s||t===f?62:t===o||t===p?63:u>t?-1:u+10>t?t-u+26+26:l+26>t?t-l:c+26>t?t-c+26:void 0}function a(e){function a(e){c[f++]=e}var n,r,s,o,u,c;if(e.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var l=e.length;u="="===e.charAt(l-2)?2:"="===e.charAt(l-1)?1:0,c=new i(3*e.length/4-u),s=u>0?e.length-4:e.length;var f=0;for(n=0,r=0;s>n;n+=4,r+=3)o=t(e.charAt(n))<<18|t(e.charAt(n+1))<<12|t(e.charAt(n+2))<<6|t(e.charAt(n+3)),a((16711680&o)>>16),a((65280&o)>>8),a(255&o);return 2===u?(o=t(e.charAt(n))<<2|t(e.charAt(n+1))>>4,a(255&o)):1===u&&(o=t(e.charAt(n))<<10|t(e.charAt(n+1))<<4|t(e.charAt(n+2))>>2,a(o>>8&255),a(255&o)),c}function r(e){function t(e){return n.charAt(e)}function a(e){return t(e>>18&63)+t(e>>12&63)+t(e>>6&63)+t(63&e)}var r,i,s,o=e.length%3,u="";for(r=0,s=e.length-o;s>r;r+=3)i=(e[r]<<16)+(e[r+1]<<8)+e[r+2],u+=a(i);switch(o){case 1:i=e[e.length-1],u+=t(i>>2),u+=t(i<<4&63),u+="==";break;case 2:i=(e[e.length-2]<<8)+e[e.length-1],u+=t(i>>10),u+=t(i>>4&63),u+=t(i<<2&63),u+="="}return u}var i="undefined"!=typeof Uint8Array?Uint8Array:Array,s="+".charCodeAt(0),o="/".charCodeAt(0),u="0".charCodeAt(0),c="a".charCodeAt(0),l="A".charCodeAt(0),f="-".charCodeAt(0),p="_".charCodeAt(0);e.toByteArray=a,e.fromByteArray=r}("undefined"==typeof a?this.base64js={}:a)},{}],17:[function(e,t,a){},{}],18:[function(e,t,a){(function(t){"use strict";function n(){function e(){}try{var t=new Uint8Array(1);return t.foo=function(){return 42},t.constructor=e,42===t.foo()&&t.constructor===e&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(a){return!1}}function r(){return i.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function i(e){return this instanceof i?(i.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof e?s(this,e):"string"==typeof e?o(this,e,arguments.length>1?arguments[1]:"utf8"):u(this,e)):arguments.length>1?new i(e,arguments[1]):new i(e)}function s(e,t){if(e=d(e,0>t?0:0|g(t)),!i.TYPED_ARRAY_SUPPORT)for(var a=0;t>a;a++)e[a]=0;return e}function o(e,t,a){("string"!=typeof a||""===a)&&(a="utf8");var n=0|w(t,a);return e=d(e,n),e.write(t,a),e}function u(e,t){if(i.isBuffer(t))return c(e,t);if(Y(t))return l(e,t);if(null==t)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(t.buffer instanceof ArrayBuffer)return f(e,t);if(t instanceof ArrayBuffer)return p(e,t)}return t.length?m(e,t):h(e,t)}function c(e,t){var a=0|g(t.length);return e=d(e,a),t.copy(e,0,0,a),e}function l(e,t){var a=0|g(t.length);e=d(e,a);for(var n=0;a>n;n+=1)e[n]=255&t[n];return e}function f(e,t){var a=0|g(t.length);e=d(e,a);for(var n=0;a>n;n+=1)e[n]=255&t[n];return e}function p(e,t){return i.TYPED_ARRAY_SUPPORT?(t.byteLength,e=i._augment(new Uint8Array(t))):e=f(e,new Uint8Array(t)),e}function m(e,t){var a=0|g(t.length);e=d(e,a);for(var n=0;a>n;n+=1)e[n]=255&t[n];return e}function h(e,t){var a,n=0;"Buffer"===t.type&&Y(t.data)&&(a=t.data,n=0|g(a.length)),e=d(e,n);for(var r=0;n>r;r+=1)e[r]=255&a[r];return e}function d(e,t){i.TYPED_ARRAY_SUPPORT?(e=i._augment(new Uint8Array(t)),e.__proto__=i.prototype):(e.length=t,e._isBuffer=!0);var a=0!==t&&t<=i.poolSize>>>1;return a&&(e.parent=Z),e}function g(e){if(e>=r())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r().toString(16)+" bytes");return 0|e}function y(e,t){if(!(this instanceof y))return new y(e,t);var a=new i(e,t);return delete a.parent,a}function w(e,t){"string"!=typeof e&&(e=""+e);var a=e.length;if(0===a)return 0;for(var n=!1;;)switch(t){case"ascii":case"binary":case"raw":case"raws":return a;case"utf8":case"utf-8":return K(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*a;case"hex":return a>>>1;case"base64":return J(e).length;default:if(n)return K(e).length;t=(""+t).toLowerCase(),n=!0}}function v(e,t,a){var n=!1;if(t=0|t,a=void 0===a||a===1/0?this.length:0|a,e||(e="utf8"),0>t&&(t=0),a>this.length&&(a=this.length),t>=a)return"";for(;;)switch(e){case"hex":return k(this,t,a);case"utf8":case"utf-8":return _(this,t,a);case"ascii":return z(this,t,a);case"binary":return F(this,t,a);case"base64":return C(this,t,a);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,t,a);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function b(e,t,a,n){a=Number(a)||0;var r=e.length-a;n?(n=Number(n),n>r&&(n=r)):n=r;var i=t.length;if(i%2!==0)throw new Error("Invalid hex string");n>i/2&&(n=i/2);for(var s=0;n>s;s++){var o=parseInt(t.substr(2*s,2),16);if(isNaN(o))throw new Error("Invalid hex string");e[a+s]=o}return s}function E(e,t,a,n){return q(K(t,e.length-a),e,a,n)}function A(e,t,a,n){return q(H(t),e,a,n)}function D(e,t,a,n){return A(e,t,a,n)}function j(e,t,a,n){return q(J(t),e,a,n)}function x(e,t,a,n){return q(G(t,e.length-a),e,a,n)}function C(e,t,a){return 0===t&&a===e.length?W.fromByteArray(e):W.fromByteArray(e.slice(t,a))}function _(e,t,a){a=Math.min(e.length,a);for(var n=[],r=t;a>r;){var i=e[r],s=null,o=i>239?4:i>223?3:i>191?2:1;if(a>=r+o){var u,c,l,f;switch(o){case 1:128>i&&(s=i);break;case 2:u=e[r+1],128===(192&u)&&(f=(31&i)<<6|63&u,f>127&&(s=f));break;case 3:u=e[r+1],c=e[r+2],128===(192&u)&&128===(192&c)&&(f=(15&i)<<12|(63&u)<<6|63&c,f>2047&&(55296>f||f>57343)&&(s=f));break;case 4:u=e[r+1],c=e[r+2],l=e[r+3],128===(192&u)&&128===(192&c)&&128===(192&l)&&(f=(15&i)<<18|(63&u)<<12|(63&c)<<6|63&l,f>65535&&1114112>f&&(s=f))}}null===s?(s=65533,o=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),r+=o}return S(n)}function S(e){var t=e.length;if(X>=t)return String.fromCharCode.apply(String,e);for(var a="",n=0;t>n;)a+=String.fromCharCode.apply(String,e.slice(n,n+=X));return a}function z(e,t,a){var n="";a=Math.min(e.length,a);for(var r=t;a>r;r++)n+=String.fromCharCode(127&e[r]);return n}function F(e,t,a){var n="";a=Math.min(e.length,a);for(var r=t;a>r;r++)n+=String.fromCharCode(e[r]);return n}function k(e,t,a){var n=e.length;(!t||0>t)&&(t=0),(!a||0>a||a>n)&&(a=n);for(var r="",i=t;a>i;i++)r+=$(e[i]);return r}function I(e,t,a){for(var n=e.slice(t,a),r="",i=0;ie)throw new RangeError("offset is not uint");if(e+t>a)throw new RangeError("Trying to access beyond buffer length")}function M(e,t,a,n,r,s){if(!i.isBuffer(e))throw new TypeError("buffer must be a Buffer instance");if(t>r||s>t)throw new RangeError("value is out of bounds");if(a+n>e.length)throw new RangeError("index out of range")}function P(e,t,a,n){0>t&&(t=65535+t+1);for(var r=0,i=Math.min(e.length-a,2);i>r;r++)e[a+r]=(t&255<<8*(n?r:1-r))>>>8*(n?r:1-r)}function O(e,t,a,n){0>t&&(t=4294967295+t+1);for(var r=0,i=Math.min(e.length-a,4);i>r;r++)e[a+r]=t>>>8*(n?r:3-r)&255}function B(e,t,a,n,r,i){if(t>r||i>t)throw new RangeError("value is out of bounds");if(a+n>e.length)throw new RangeError("index out of range");if(0>a)throw new RangeError("index out of range")}function T(e,t,a,n,r){return r||B(e,t,a,4,3.4028234663852886e38,-3.4028234663852886e38),V.write(e,t,a,n,23,4),a+4}function L(e,t,a,n,r){return r||B(e,t,a,8,1.7976931348623157e308,-1.7976931348623157e308),V.write(e,t,a,n,52,8),a+8}function N(e){if(e=U(e).replace(ee,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function U(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function $(e){return 16>e?"0"+e.toString(16):e.toString(16)}function K(e,t){t=t||1/0;for(var a,n=e.length,r=null,i=[],s=0;n>s;s++){if(a=e.charCodeAt(s),a>55295&&57344>a){if(!r){if(a>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&i.push(239,191,189);continue}r=a;continue}if(56320>a){(t-=3)>-1&&i.push(239,191,189),r=a;continue}a=(r-55296<<10|a-56320)+65536}else r&&(t-=3)>-1&&i.push(239,191,189);if(r=null,128>a){if((t-=1)<0)break;i.push(a)}else if(2048>a){if((t-=2)<0)break;i.push(a>>6|192,63&a|128)}else if(65536>a){if((t-=3)<0)break;i.push(a>>12|224,a>>6&63|128,63&a|128)}else{if(!(1114112>a))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(a>>18|240,a>>12&63|128,a>>6&63|128,63&a|128)}}return i}function H(e){for(var t=[],a=0;a>8,r=a%256,i.push(r),i.push(n);return i}function J(e){return W.toByteArray(N(e))}function q(e,t,a,n){for(var r=0;n>r&&!(r+a>=t.length||r>=e.length);r++)t[r+a]=e[r];return r}var W=e("base64-js"),V=e("ieee754"),Y=e("isarray");a.Buffer=i,a.SlowBuffer=y,a.INSPECT_MAX_BYTES=50,i.poolSize=8192;var Z={};i.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:n(),i.TYPED_ARRAY_SUPPORT?(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array):(i.prototype.length=void 0,i.prototype.parent=void 0),i.isBuffer=function(e){return!(null==e||!e._isBuffer)},i.compare=function(e,t){if(!i.isBuffer(e)||!i.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var a=e.length,n=t.length,r=0,s=Math.min(a,n);s>r&&e[r]===t[r];)++r;return r!==s&&(a=e[r],n=t[r]),n>a?-1:a>n?1:0},i.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},i.concat=function(e,t){if(!Y(e))throw new TypeError("list argument must be an Array of Buffers.");if(0===e.length)return new i(0);var a;if(void 0===t)for(t=0,a=0;a0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},i.prototype.compare=function(e){if(!i.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?0:i.compare(this,e)},i.prototype.indexOf=function(e,t){function a(e,t,a){for(var n=-1,r=0;a+r2147483647?t=2147483647:-2147483648>t&&(t=-2147483648),t>>=0,0===this.length)return-1;if(t>=this.length)return-1;if(0>t&&(t=Math.max(this.length+t,0)),"string"==typeof e)return 0===e.length?-1:String.prototype.indexOf.call(this,e,t);if(i.isBuffer(e))return a(this,e,t);if("number"==typeof e)return i.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,t):a(this,[e],t);throw new TypeError("val must be string, number or Buffer")},i.prototype.get=function(e){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(e)},i.prototype.set=function(e,t){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(e,t)},i.prototype.write=function(e,t,a,n){if(void 0===t)n="utf8",a=this.length,t=0;else if(void 0===a&&"string"==typeof t)n=t,a=this.length,t=0;else if(isFinite(t))t=0|t,isFinite(a)?(a=0|a,void 0===n&&(n="utf8")):(n=a,a=void 0);else{var r=n;n=t,t=0|a,a=r}var i=this.length-t;if((void 0===a||a>i)&&(a=i),e.length>0&&(0>a||0>t)||t>this.length)throw new RangeError("attempt to write outside buffer bounds");n||(n="utf8");for(var s=!1;;)switch(n){case"hex":return b(this,e,t,a);case"utf8":case"utf-8":return E(this,e,t,a);case"ascii":return A(this,e,t,a);case"binary":return D(this,e,t,a);case"base64":return j(this,e,t,a);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,a);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var X=4096;i.prototype.slice=function(e,t){var a=this.length;e=~~e,t=void 0===t?a:~~t,0>e?(e+=a,0>e&&(e=0)):e>a&&(e=a),0>t?(t+=a,0>t&&(t=0)):t>a&&(t=a),e>t&&(t=e);var n;if(i.TYPED_ARRAY_SUPPORT)n=i._augment(this.subarray(e,t));else{var r=t-e;n=new i(r,void 0);for(var s=0;r>s;s++)n[s]=this[s+e]}return n.length&&(n.parent=this.parent||this),n},i.prototype.readUIntLE=function(e,t,a){e=0|e,t=0|t,a||R(e,t,this.length);for(var n=this[e],r=1,i=0;++i0&&(r*=256);)n+=this[e+--t]*r;return n},i.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},i.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},i.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},i.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},i.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},i.prototype.readIntLE=function(e,t,a){e=0|e,t=0|t,a||R(e,t,this.length);for(var n=this[e],r=1,i=0;++i=r&&(n-=Math.pow(2,8*t)),n},i.prototype.readIntBE=function(e,t,a){e=0|e,t=0|t,a||R(e,t,this.length);for(var n=t,r=1,i=this[e+--n];n>0&&(r*=256);)i+=this[e+--n]*r;return r*=128,i>=r&&(i-=Math.pow(2,8*t)),i},i.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},i.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var a=this[e]|this[e+1]<<8;return 32768&a?4294901760|a:a},i.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var a=this[e+1]|this[e]<<8;return 32768&a?4294901760|a:a},i.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},i.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},i.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),V.read(this,e,!0,23,4)},i.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),V.read(this,e,!1,23,4)},i.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),V.read(this,e,!0,52,8)},i.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),V.read(this,e,!1,52,8)},i.prototype.writeUIntLE=function(e,t,a,n){e=+e,t=0|t,a=0|a,n||M(this,e,t,a,Math.pow(2,8*a),0);var r=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+r]=e/i&255;return t+a},i.prototype.writeUInt8=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,1,255,0),i.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},i.prototype.writeUInt16LE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):P(this,e,t,!0),t+2},i.prototype.writeUInt16BE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):P(this,e,t,!1),t+2},i.prototype.writeUInt32LE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):O(this,e,t,!0),t+4},i.prototype.writeUInt32BE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},i.prototype.writeIntLE=function(e,t,a,n){if(e=+e,t=0|t,!n){var r=Math.pow(2,8*a-1);M(this,e,t,a,r-1,-r)}var i=0,s=1,o=0>e?1:0;for(this[t]=255&e;++i>0)-o&255;return t+a},i.prototype.writeIntBE=function(e,t,a,n){if(e=+e,t=0|t,!n){var r=Math.pow(2,8*a-1);M(this,e,t,a,r-1,-r)}var i=a-1,s=1,o=0>e?1:0;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=(e/s>>0)-o&255;return t+a},i.prototype.writeInt8=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,1,127,-128),i.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},i.prototype.writeInt16LE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):P(this,e,t,!0),t+2},i.prototype.writeInt16BE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):P(this,e,t,!1),t+2},i.prototype.writeInt32LE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):O(this,e,t,!0),t+4},i.prototype.writeInt32BE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},i.prototype.writeFloatLE=function(e,t,a){return T(this,e,t,!0,a)},i.prototype.writeFloatBE=function(e,t,a){return T(this,e,t,!1,a)},i.prototype.writeDoubleLE=function(e,t,a){return L(this,e,t,!0,a)},i.prototype.writeDoubleBE=function(e,t,a){return L(this,e,t,!1,a)},i.prototype.copy=function(e,t,a,n){if(a||(a=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&a>n&&(n=a),n===a)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError("targetStart out of bounds");if(0>a||a>=this.length)throw new RangeError("sourceStart out of bounds");if(0>n)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-ta&&n>t)for(r=s-1;r>=0;r--)e[r+t]=this[r+a];else if(1e3>s||!i.TYPED_ARRAY_SUPPORT)for(r=0;s>r;r++)e[r+t]=this[r+a];else e._set(this.subarray(a,a+s),t);return s},i.prototype.fill=function(e,t,a){if(e||(e=0),t||(t=0),a||(a=this.length),t>a)throw new RangeError("end < start");if(a!==t&&0!==this.length){if(0>t||t>=this.length)throw new RangeError("start out of bounds");if(0>a||a>this.length)throw new RangeError("end out of bounds");var n;if("number"==typeof e)for(n=t;a>n;n++)this[n]=e;else{var r=K(e.toString()),i=r.length;for(n=t;a>n;n++)this[n]=r[n%i]}return this}},i.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(i.TYPED_ARRAY_SUPPORT)return new i(this).buffer;for(var e=new Uint8Array(this.length),t=0,a=e.length;a>t;t+=1)e[t]=this[t];return e.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser")};var Q=i.prototype;i._augment=function(e){return e.constructor=i,e._isBuffer=!0,e._set=e.set,e.get=Q.get,e.set=Q.set,e.write=Q.write,e.toString=Q.toString,e.toLocaleString=Q.toString,e.toJSON=Q.toJSON,e.equals=Q.equals,e.compare=Q.compare,e.indexOf=Q.indexOf,e.copy=Q.copy,e.slice=Q.slice,e.readUIntLE=Q.readUIntLE,e.readUIntBE=Q.readUIntBE,e.readUInt8=Q.readUInt8,e.readUInt16LE=Q.readUInt16LE,e.readUInt16BE=Q.readUInt16BE,e.readUInt32LE=Q.readUInt32LE,e.readUInt32BE=Q.readUInt32BE,e.readIntLE=Q.readIntLE,e.readIntBE=Q.readIntBE,e.readInt8=Q.readInt8,e.readInt16LE=Q.readInt16LE,e.readInt16BE=Q.readInt16BE,e.readInt32LE=Q.readInt32LE,e.readInt32BE=Q.readInt32BE,e.readFloatLE=Q.readFloatLE,e.readFloatBE=Q.readFloatBE,e.readDoubleLE=Q.readDoubleLE,e.readDoubleBE=Q.readDoubleBE,e.writeUInt8=Q.writeUInt8,e.writeUIntLE=Q.writeUIntLE,e.writeUIntBE=Q.writeUIntBE,e.writeUInt16LE=Q.writeUInt16LE,e.writeUInt16BE=Q.writeUInt16BE,e.writeUInt32LE=Q.writeUInt32LE,e.writeUInt32BE=Q.writeUInt32BE,e.writeIntLE=Q.writeIntLE,e.writeIntBE=Q.writeIntBE,e.writeInt8=Q.writeInt8,e.writeInt16LE=Q.writeInt16LE,e.writeInt16BE=Q.writeInt16BE,e.writeInt32LE=Q.writeInt32LE,e.writeInt32BE=Q.writeInt32BE,e.writeFloatLE=Q.writeFloatLE,e.writeFloatBE=Q.writeFloatBE,e.writeDoubleLE=Q.writeDoubleLE,e.writeDoubleBE=Q.writeDoubleBE,e.fill=Q.fill,e.inspect=Q.inspect,e.toArrayBuffer=Q.toArrayBuffer,e};var ee=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":16,ieee754:137,isarray:19}],19:[function(e,t,a){var n={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},{}],20:[function(t,a,n){(function(t){!function(){function r(e){if(!(this instanceof r))return null==e?new r:new r(e);if("function"==typeof e)return this.random=e,this;arguments.length&&(this.seed=0);for(var t=0;tr;r++)a=n[r],t[a]=e[a]||t[a]}function c(e,t){for(var a=0,n=e.length;n>a;a++)t[a]=e[a]}function l(e,t){var a=Array.isArray(e),n=t||(a?new Array(e.length):{});return a?c(e,n):u(e,n),n}var f=9007199254740992,p=-f,m="0123456789",h="abcdefghijklmnopqrstuvwxyz",d=h.toUpperCase(),g=m+"abcdef",y=Array.prototype.slice;r.prototype.VERSION="0.8.0";var w=function(){throw new Error("No Base64 encoder available.")};!function(){"function"==typeof btoa?w=btoa:"function"==typeof t&&(w=function(e){return new t(e).toString("base64")})}(),r.prototype.bool=function(e){return e=i(e,{likelihood:50}),s(e.likelihood<0||e.likelihood>100,"Chance: Likelihood accepts values from 0 to 100."),100*this.random()n,"Chance: Max specified is out of range with fixed. Max should be, at most, "+n),e=i(e,{min:r,max:n}),t=this.integer({min:e.min*a,max:e.max*a});var o=(t/a).toFixed(e.fixed);return parseFloat(o)},r.prototype.integer=function(e){return e=i(e,{min:p,max:f}),s(e.min>e.max,"Chance: Min cannot be greater than Max."),Math.floor(this.random()*(e.max-e.min+1)+e.min)},r.prototype.natural=function(e){return e=i(e,{min:0,max:f}),s(e.min<0,"Chance: Min cannot be less than zero."),this.integer(e)},r.prototype.string=function(e){e=i(e,{length:this.natural({min:5,max:20})}),s(e.length<0,"Chance: Length cannot be less than zero.");var t=e.length,a=this.n(this.character,t,e);return a.join("")},r.prototype.capitalize=function(e){return e.charAt(0).toUpperCase()+e.substr(1)},r.prototype.mixin=function(e){for(var t in e)r.prototype[t]=e[t];return this},r.prototype.unique=function(e,t,a){s("function"!=typeof e,"Chance: The first argument must be a function."),a=i(a,{comparator:function(e,t){return-1!==e.indexOf(t)}});for(var n,r=[],o=0,u=50*t,c=y.call(arguments,2);r.lengthu)throw new RangeError("Chance: num is likely too large for sample set");return r},r.prototype.n=function(e,t){s("function"!=typeof e,"Chance: The first argument must be a function."),"undefined"==typeof t&&(t=1);var a=t,n=[],r=y.call(arguments,2);for(a=Math.max(0,a),null;a--;null)n.push(e.apply(this,r));return n},r.prototype.pad=function(e,t,a){return a=a||"0",e+="",e.length>=t?e:new Array(t-e.length+1).join(a)+e},r.prototype.pick=function(e,t){if(0===e.length)throw new RangeError("Chance: Cannot pick() from an empty array");return t&&1!==t?this.shuffle(e).slice(0,t):e[this.natural({max:e.length-1})]},r.prototype.shuffle=function(e){for(var t=e.slice(0),a=[],n=0,r=Number(t.length),i=0;r>i;i++)n=this.natural({max:t.length-1}),a[i]=t[n],t.splice(n,1);return a},r.prototype.weighted=function(e,t){if(e.length!==t.length)throw new RangeError("Chance: length of array and weights must match");for(var a=t.length-1;a>=0;--a)t[a]<=0&&(e.splice(a,1),t.splice(a,1));if(t.some(function(e){return 1>e})){var n=t.reduce(function(e,t){return e>t?t:e},t[0]),r=1/n;t=t.map(function(e){return e*r})}var i,s=t.reduce(function(e,t){return e+t},0),o=this.natural({min:1,max:s}),u=0;return t.some(function(t,a){return u+t>=o?(i=e[a],!0):(u+=t,!1)}),i},r.prototype.paragraph=function(e){e=i(e);var t=e.sentences||this.natural({min:3,max:7}),a=this.n(this.sentence,t);return a.join(" ")},r.prototype.sentence=function(e){e=i(e);var t,a=e.words||this.natural({min:12,max:18}),n=e.punctuation,r=this.n(this.word,a);return t=r.join(" "),t=this.capitalize(t),n===!1||/^[\.\?;!:]$/.test(n)||(n="."),n&&(t+=n),t},r.prototype.syllable=function(e){e=i(e);for(var t,a=e.length||this.natural({min:2,max:3}),n="bcdfghjklmnprstvwz",r="aeiou",s=n+r,o="",u=0;a>u;u++)t=0===u?this.character({pool:s}):-1===n.indexOf(t)?this.character({pool:n}):this.character({pool:r}),o+=t;return o},r.prototype.word=function(e){e=i(e),s(e.syllables&&e.length,"Chance: Cannot specify both syllables AND length.");var t=e.syllables||this.natural({min:1,max:3}),a="";if(e.length){do a+=this.syllable();while(a.lengthn;n++)a+=this.syllable();return a},r.prototype.age=function(e){e=i(e);var t;switch(e.type){case"child":t={min:1,max:12};break;case"teen":t={min:13,max:19};break;case"adult":t={min:18,max:65};break;case"senior":t={min:65,max:100};break;case"all":t={min:1,max:100};break;default:t={min:18,max:65}}return this.natural(t)},r.prototype.birthday=function(e){return e=i(e,{year:(new Date).getFullYear()-this.age(e)}),this.date(e)},r.prototype.cpf=function(){var e=this.n(this.natural,9,{max:9}),t=2*e[8]+3*e[7]+4*e[6]+5*e[5]+6*e[4]+7*e[3]+8*e[2]+9*e[1]+10*e[0];t=11-t%11,t>=10&&(t=0);var a=2*t+3*e[8]+4*e[7]+5*e[6]+6*e[5]+7*e[4]+8*e[3]+9*e[2]+10*e[1]+11*e[0];return a=11-a%11,a>=10&&(a=0),""+e[0]+e[1]+e[2]+"."+e[3]+e[4]+e[5]+"."+e[6]+e[7]+e[8]+"-"+t+a},r.prototype.first=function(e){return e=i(e,{gender:this.gender()}),this.pick(this.get("firstNames")[e.gender.toLowerCase()])},r.prototype.gender=function(){return this.pick(["Male","Female"])},r.prototype.last=function(){return this.pick(this.get("lastNames"))},r.prototype.israelId=function(){for(var e=this.string({pool:"0123456789",length:8}),t=0,a=0;a0?"."+this.pick(e.extensions):"",a=e.domain_prefix?e.domain_prefix+"."+e.domain:e.domain;return e.protocol+"://"+a+"/"+e.path+t},r.prototype.address=function(e){return e=i(e),this.natural({min:5,max:2e3})+" "+this.street(e)},r.prototype.altitude=function(e){return e=i(e,{fixed:5,min:0,max:8848}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},r.prototype.areacode=function(e){e=i(e,{parens:!0});var t=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:8}).toString()+this.natural({min:0,max:9}).toString();return e.parens?"("+t+")":t},r.prototype.city=function(){return this.capitalize(this.word({syllables:3}))},r.prototype.coordinates=function(e){return this.latitude(e)+", "+this.longitude(e)},r.prototype.countries=function(){return this.get("countries")},r.prototype.country=function(e){e=i(e);var t=this.pick(this.countries());return e.full?t.name:t.abbreviation},r.prototype.depth=function(e){return e=i(e,{fixed:5,min:-10994,max:0}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},r.prototype.geohash=function(e){return e=i(e,{length:7}),this.string({length:e.length,pool:"0123456789bcdefghjkmnpqrstuvwxyz"})},r.prototype.geojson=function(e){return this.latitude(e)+", "+this.longitude(e)+", "+this.altitude(e)},r.prototype.latitude=function(e){return e=i(e,{fixed:5,min:-90,max:90}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},r.prototype.longitude=function(e){return e=i(e,{fixed:5,min:-180,max:180}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},r.prototype.phone=function(e){var t,a=this,n=function(e){var t=[];return e.sections.forEach(function(e){t.push(a.string({pool:"0123456789",length:e}))}),e.area+t.join(" ")};e=i(e,{formatted:!0,country:"us",mobile:!1}),e.formatted||(e.parens=!1);var r;switch(e.country){case"fr":e.mobile?(t=this.pick(["06","07"])+a.string({pool:"0123456789",length:8}),r=e.formatted?t.match(/../g).join(" "):t):(t=this.pick(["01"+this.pick(["30","34","39","40","41","42","43","44","45","46","47","48","49","53","55","56","58","60","64","69","70","72","73","74","75","76","77","78","79","80","81","82","83"])+a.string({pool:"0123456789",length:6}),"02"+this.pick(["14","18","22","23","28","29","30","31","32","33","34","35","36","37","38","40","41","43","44","45","46","47","48","49","50","51","52","53","54","56","57","61","62","69","72","76","77","78","85","90","96","97","98","99"])+a.string({pool:"0123456789",length:6}),"03"+this.pick(["10","20","21","22","23","24","25","26","27","28","29","39","44","45","51","52","54","55","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","80","81","82","83","84","85","86","87","88","89","90"])+a.string({pool:"0123456789",length:6}),"04"+this.pick(["11","13","15","20","22","26","27","30","32","34","37","42","43","44","50","56","57","63","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","88","89","90","91","92","93","94","95","97","98"])+a.string({pool:"0123456789",length:6}),"05"+this.pick(["08","16","17","19","24","31","32","33","34","35","40","45","46","47","49","53","55","56","57","58","59","61","62","63","64","65","67","79","81","82","86","87","90","94"])+a.string({pool:"0123456789",length:6}),"09"+a.string({pool:"0123456789",length:8})]),r=e.formatted?t.match(/../g).join(" "):t);break;case"uk":e.mobile?(t=this.pick([{area:"07"+this.pick(["4","5","7","8","9"]),sections:[2,6]},{area:"07624 ",sections:[6]}]),r=e.formatted?n(t):n(t).replace(" ","")):(t=this.pick([{area:"01"+this.character({pool:"234569"})+"1 ",sections:[3,4]},{area:"020 "+this.character({pool:"378"}),sections:[3,4]},{area:"023 "+this.character({pool:"89"}),sections:[3,4]},{area:"024 7",sections:[3,4]},{area:"028 "+this.pick(["25","28","37","71","82","90","92","95"]),sections:[2,4]},{area:"012"+this.pick(["04","08","54","76","97","98"])+" ",sections:[5]},{area:"013"+this.pick(["63","64","84","86"])+" ",sections:[5]},{area:"014"+this.pick(["04","20","60","61","80","88"])+" ",sections:[5]},{area:"015"+this.pick(["24","27","62","66"])+" ",sections:[5]},{area:"016"+this.pick(["06","29","35","47","59","95"])+" ",sections:[5]},{area:"017"+this.pick(["26","44","50","68"])+" ",sections:[5]},{area:"018"+this.pick(["27","37","84","97"])+" ",sections:[5]},{area:"019"+this.pick(["00","05","35","46","49","63","95"])+" ",sections:[5]}]),r=e.formatted?n(t):n(t).replace(" ","","g"));break;case"us":var s=this.areacode(e).toString(),o=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:9}).toString()+this.natural({min:0,max:9}).toString(),u=this.natural({min:1e3,max:9999}).toString();r=e.formatted?s+" "+o+"-"+u:s+o+u}return r},r.prototype.postal=function(){var e=this.character({pool:"XVTSRPNKLMHJGECBA"}),t=e+this.natural({max:9})+this.character({alpha:!0,casing:"upper"}),a=this.natural({max:9})+this.character({alpha:!0,casing:"upper"})+this.natural({max:9});return t+" "+a},r.prototype.provinces=function(){return this.get("provinces")},r.prototype.province=function(e){return e&&e.full?this.pick(this.provinces()).name:this.pick(this.provinces()).abbreviation},r.prototype.state=function(e){return e&&e.full?this.pick(this.states(e)).name:this.pick(this.states(e)).abbreviation},r.prototype.states=function(e){e=i(e,{us_states_and_dc:!0});var t,a=this.get("us_states_and_dc"),n=this.get("territories"),r=this.get("armed_forces");return t=[],e.us_states_and_dc&&(t=t.concat(a)),e.territories&&(t=t.concat(n)),e.armed_forces&&(t=t.concat(r)),t},r.prototype.street=function(e){e=i(e);var t=this.word({syllables:2});return t=this.capitalize(t),t+=" ",t+=e.short_suffix?this.street_suffix().abbreviation:this.street_suffix().name},r.prototype.street_suffix=function(){return this.pick(this.street_suffixes())},r.prototype.street_suffixes=function(){return this.get("street_suffixes")},r.prototype.zip=function(e){var t=this.n(this.natural,5,{max:9});return e&&e.plusfour===!0&&(t.push("-"),t=t.concat(this.n(this.natural,4,{max:9}))),t.join("")},r.prototype.ampm=function(){return this.bool()?"am":"pm"},r.prototype.date=function(e){var t,a;if(e&&(e.min||e.max)){e=i(e,{american:!0,string:!1});var n="undefined"!=typeof e.min?e.min.getTime():1,r="undefined"!=typeof e.max?e.max.getTime():864e13;a=new Date(this.natural({min:n,max:r}))}else{var s=this.month({raw:!0}),o=s.days;e&&e.month&&(o=this.get("months")[(e.month%12+12)%12].days),e=i(e,{year:parseInt(this.year(),10),month:s.numeric-1,day:this.natural({min:1,max:o}),hour:this.hour(),minute:this.minute(),second:this.second(),millisecond:this.millisecond(),american:!0,string:!1}),a=new Date(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond)}return t=e.american?a.getMonth()+1+"/"+a.getDate()+"/"+a.getFullYear():a.getDate()+"/"+(a.getMonth()+1)+"/"+a.getFullYear(),e.string?t:a},r.prototype.hammertime=function(e){return this.date(e).getTime()},r.prototype.hour=function(e){return e=i(e,{min:1,max:e&&e.twentyfour?24:12}),s(e.min<1,"Chance: Min cannot be less than 1."),s(e.twentyfour&&e.max>24,"Chance: Max cannot be greater than 24 for twentyfour option."),s(!e.twentyfour&&e.max>12,"Chance: Max cannot be greater than 12."),s(e.min>e.max,"Chance: Min cannot be greater than Max."),this.natural({min:e.min,max:e.max})},r.prototype.millisecond=function(){return this.natural({max:999})},r.prototype.minute=r.prototype.second=function(e){return e=i(e,{min:0,max:59}),s(e.min<0,"Chance: Min cannot be less than 0."),s(e.max>59,"Chance: Max cannot be greater than 59."),s(e.min>e.max,"Chance: Min cannot be greater than Max."),this.natural({min:e.min,max:e.max})},r.prototype.month=function(e){e=i(e,{min:1,max:12}),s(e.min<1,"Chance: Min cannot be less than 1."),s(e.max>12,"Chance: Max cannot be greater than 12."),s(e.min>e.max,"Chance: Min cannot be greater than Max.");var t=this.pick(this.months().slice(e.min-1,e.max));return e.raw?t:t.name},r.prototype.months=function(){return this.get("months")},r.prototype.second=function(){return this.natural({max:59})},r.prototype.timestamp=function(){return this.natural({min:1,max:parseInt((new Date).getTime()/1e3,10)})},r.prototype.year=function(e){return e=i(e,{min:(new Date).getFullYear()}),e.max="undefined"!=typeof e.max?e.max:e.min+100,this.natural(e).toString()},r.prototype.cc=function(e){ -e=i(e);var t,a,n;return t=e.type?this.cc_type({name:e.type,raw:!0}):this.cc_type({raw:!0}),a=t.prefix.split(""),n=t.length-t.prefix.length-1,a=a.concat(this.n(this.integer,n,{min:0,max:9})),a.push(this.luhn_calculate(a.join(""))),a.join("")},r.prototype.cc_types=function(){return this.get("cc_types")},r.prototype.cc_type=function(e){e=i(e);var t=this.cc_types(),a=null;if(e.name){for(var n=0;nt?"-$"+t.replace("-",""):"$"+t},r.prototype.exp=function(e){e=i(e);var t={};return t.year=this.exp_year(),t.year===(new Date).getFullYear().toString()?t.month=this.exp_month({future:!0}):t.month=this.exp_month(),e.raw?t:t.month+"/"+t.year},r.prototype.exp_month=function(e){e=i(e);var t,a,n=(new Date).getMonth()+1;if(e.future){do t=this.month({raw:!0}).numeric,a=parseInt(t,10);while(n>=a)}else t=this.month({raw:!0}).numeric;return t},r.prototype.exp_year=function(){return this.year({max:(new Date).getFullYear()+10})},r.prototype.pl_pesel=function(){for(var e=this.natural({min:1,max:9999999999}),t=this.pad(e,10).split(""),a=0;a0;r--)n[r-1]=this.natural({min:1,max:a[1]});return"undefined"!=typeof t.sum&&t.sum?n.reduce(function(e,t){return e+t}):n}throw new RangeError("A type of die roll must be included")},r.prototype.guid=function(e){e=i(e,{version:5});var t="abcdef1234567890",a="ab89",n=this.string({pool:t,length:8})+"-"+this.string({pool:t,length:4})+"-"+e.version+this.string({pool:t,length:3})+"-"+this.string({pool:a,length:1})+this.string({pool:t,length:3})+"-"+this.string({pool:t,length:12});return n},r.prototype.hash=function(e){e=i(e,{length:40,casing:"lower"});var t="upper"===e.casing?g.toUpperCase():g;return this.string({pool:t,length:e.length})},r.prototype.luhn_check=function(e){var t=e.toString(),a=+t.substring(t.length-1);return a===this.luhn_calculate(+t.substring(0,t.length-1))},r.prototype.luhn_calculate=function(e){for(var t,a=e.toString().split("").reverse(),n=0,r=0,i=a.length;i>r;++r)t=+a[r],r%2===0&&(t*=2,t>9&&(t-=9)),n+=t;return 9*n%10},r.prototype.md5=function(e){var t={str:"",key:null,raw:!1};if(e)if("string"==typeof e)t.str=e,e={};else{if("object"!=typeof e)return null;if("Array"===e.constructor)return null}else t.str=this.string(),e={};if(t=i(e,t),!t.str)throw new Error("A parameter is required to return an md5 hash.");return this.bimd5.md5(t.str,t.key,t.raw)};var v={firstNames:{male:["James","John","Robert","Michael","William","David","Richard","Joseph","Charles","Thomas","Christopher","Daniel","Matthew","George","Donald","Anthony","Paul","Mark","Edward","Steven","Kenneth","Andrew","Brian","Joshua","Kevin","Ronald","Timothy","Jason","Jeffrey","Frank","Gary","Ryan","Nicholas","Eric","Stephen","Jacob","Larry","Jonathan","Scott","Raymond","Justin","Brandon","Gregory","Samuel","Benjamin","Patrick","Jack","Henry","Walter","Dennis","Jerry","Alexander","Peter","Tyler","Douglas","Harold","Aaron","Jose","Adam","Arthur","Zachary","Carl","Nathan","Albert","Kyle","Lawrence","Joe","Willie","Gerald","Roger","Keith","Jeremy","Terry","Harry","Ralph","Sean","Jesse","Roy","Louis","Billy","Austin","Bruce","Eugene","Christian","Bryan","Wayne","Russell","Howard","Fred","Ethan","Jordan","Philip","Alan","Juan","Randy","Vincent","Bobby","Dylan","Johnny","Phillip","Victor","Clarence","Ernest","Martin","Craig","Stanley","Shawn","Travis","Bradley","Leonard","Earl","Gabriel","Jimmy","Francis","Todd","Noah","Danny","Dale","Cody","Carlos","Allen","Frederick","Logan","Curtis","Alex","Joel","Luis","Norman","Marvin","Glenn","Tony","Nathaniel","Rodney","Melvin","Alfred","Steve","Cameron","Chad","Edwin","Caleb","Evan","Antonio","Lee","Herbert","Jeffery","Isaac","Derek","Ricky","Marcus","Theodore","Elijah","Luke","Jesus","Eddie","Troy","Mike","Dustin","Ray","Adrian","Bernard","Leroy","Angel","Randall","Wesley","Ian","Jared","Mason","Hunter","Calvin","Oscar","Clifford","Jay","Shane","Ronnie","Barry","Lucas","Corey","Manuel","Leo","Tommy","Warren","Jackson","Isaiah","Connor","Don","Dean","Jon","Julian","Miguel","Bill","Lloyd","Charlie","Mitchell","Leon","Jerome","Darrell","Jeremiah","Alvin","Brett","Seth","Floyd","Jim","Blake","Micheal","Gordon","Trevor","Lewis","Erik","Edgar","Vernon","Devin","Gavin","Jayden","Chris","Clyde","Tom","Derrick","Mario","Brent","Marc","Herman","Chase","Dominic","Ricardo","Franklin","Maurice","Max","Aiden","Owen","Lester","Gilbert","Elmer","Gene","Francisco","Glen","Cory","Garrett","Clayton","Sam","Jorge","Chester","Alejandro","Jeff","Harvey","Milton","Cole","Ivan","Andre","Duane","Landon"],female:["Mary","Emma","Elizabeth","Minnie","Margaret","Ida","Alice","Bertha","Sarah","Annie","Clara","Ella","Florence","Cora","Martha","Laura","Nellie","Grace","Carrie","Maude","Mabel","Bessie","Jennie","Gertrude","Julia","Hattie","Edith","Mattie","Rose","Catherine","Lillian","Ada","Lillie","Helen","Jessie","Louise","Ethel","Lula","Myrtle","Eva","Frances","Lena","Lucy","Edna","Maggie","Pearl","Daisy","Fannie","Josephine","Dora","Rosa","Katherine","Agnes","Marie","Nora","May","Mamie","Blanche","Stella","Ellen","Nancy","Effie","Sallie","Nettie","Della","Lizzie","Flora","Susie","Maud","Mae","Etta","Harriet","Sadie","Caroline","Katie","Lydia","Elsie","Kate","Susan","Mollie","Alma","Addie","Georgia","Eliza","Lulu","Nannie","Lottie","Amanda","Belle","Charlotte","Rebecca","Ruth","Viola","Olive","Amelia","Hannah","Jane","Virginia","Emily","Matilda","Irene","Kathryn","Esther","Willie","Henrietta","Ollie","Amy","Rachel","Sara","Estella","Theresa","Augusta","Ora","Pauline","Josie","Lola","Sophia","Leona","Anne","Mildred","Ann","Beulah","Callie","Lou","Delia","Eleanor","Barbara","Iva","Louisa","Maria","Mayme","Evelyn","Estelle","Nina","Betty","Marion","Bettie","Dorothy","Luella","Inez","Lela","Rosie","Allie","Millie","Janie","Cornelia","Victoria","Ruby","Winifred","Alta","Celia","Christine","Beatrice","Birdie","Harriett","Mable","Myra","Sophie","Tillie","Isabel","Sylvia","Carolyn","Isabelle","Leila","Sally","Ina","Essie","Bertie","Nell","Alberta","Katharine","Lora","Rena","Mina","Rhoda","Mathilda","Abbie","Eula","Dollie","Hettie","Eunice","Fanny","Ola","Lenora","Adelaide","Christina","Lelia","Nelle","Sue","Johanna","Lilly","Lucinda","Minerva","Lettie","Roxie","Cynthia","Helena","Hilda","Hulda","Bernice","Genevieve","Jean","Cordelia","Marian","Francis","Jeanette","Adeline","Gussie","Leah","Lois","Lura","Mittie","Hallie","Isabella","Olga","Phoebe","Teresa","Hester","Lida","Lina","Winnie","Claudia","Marguerite","Vera","Cecelia","Bess","Emilie","John","Rosetta","Verna","Myrtie","Cecilia","Elva","Olivia","Ophelia","Georgie","Elnora","Violet","Adele","Lily","Linnie","Loretta","Madge","Polly","Virgie","Eugenia","Lucile","Lucille","Mabelle","Rosalie"]},lastNames:["Smith","Johnson","Williams","Jones","Brown","Davis","Miller","Wilson","Moore","Taylor","Anderson","Thomas","Jackson","White","Harris","Martin","Thompson","Garcia","Martinez","Robinson","Clark","Rodriguez","Lewis","Lee","Walker","Hall","Allen","Young","Hernandez","King","Wright","Lopez","Hill","Scott","Green","Adams","Baker","Gonzalez","Nelson","Carter","Mitchell","Perez","Roberts","Turner","Phillips","Campbell","Parker","Evans","Edwards","Collins","Stewart","Sanchez","Morris","Rogers","Reed","Cook","Morgan","Bell","Murphy","Bailey","Rivera","Cooper","Richardson","Cox","Howard","Ward","Torres","Peterson","Gray","Ramirez","James","Watson","Brooks","Kelly","Sanders","Price","Bennett","Wood","Barnes","Ross","Henderson","Coleman","Jenkins","Perry","Powell","Long","Patterson","Hughes","Flores","Washington","Butler","Simmons","Foster","Gonzales","Bryant","Alexander","Russell","Griffin","Diaz","Hayes","Myers","Ford","Hamilton","Graham","Sullivan","Wallace","Woods","Cole","West","Jordan","Owens","Reynolds","Fisher","Ellis","Harrison","Gibson","McDonald","Cruz","Marshall","Ortiz","Gomez","Murray","Freeman","Wells","Webb","Simpson","Stevens","Tucker","Porter","Hunter","Hicks","Crawford","Henry","Boyd","Mason","Morales","Kennedy","Warren","Dixon","Ramos","Reyes","Burns","Gordon","Shaw","Holmes","Rice","Robertson","Hunt","Black","Daniels","Palmer","Mills","Nichols","Grant","Knight","Ferguson","Rose","Stone","Hawkins","Dunn","Perkins","Hudson","Spencer","Gardner","Stephens","Payne","Pierce","Berry","Matthews","Arnold","Wagner","Willis","Ray","Watkins","Olson","Carroll","Duncan","Snyder","Hart","Cunningham","Bradley","Lane","Andrews","Ruiz","Harper","Fox","Riley","Armstrong","Carpenter","Weaver","Greene","Lawrence","Elliott","Chavez","Sims","Austin","Peters","Kelley","Franklin","Lawson","Fields","Gutierrez","Ryan","Schmidt","Carr","Vasquez","Castillo","Wheeler","Chapman","Oliver","Montgomery","Richards","Williamson","Johnston","Banks","Meyer","Bishop","McCoy","Howell","Alvarez","Morrison","Hansen","Fernandez","Garza","Harvey","Little","Burton","Stanley","Nguyen","George","Jacobs","Reid","Kim","Fuller","Lynch","Dean","Gilbert","Garrett","Romero","Welch","Larson","Frazier","Burke","Hanson","Day","Mendoza","Moreno","Bowman","Medina","Fowler","Brewer","Hoffman","Carlson","Silva","Pearson","Holland","Douglas","Fleming","Jensen","Vargas","Byrd","Davidson","Hopkins","May","Terry","Herrera","Wade","Soto","Walters","Curtis","Neal","Caldwell","Lowe","Jennings","Barnett","Graves","Jimenez","Horton","Shelton","Barrett","Obrien","Castro","Sutton","Gregory","McKinney","Lucas","Miles","Craig","Rodriquez","Chambers","Holt","Lambert","Fletcher","Watts","Bates","Hale","Rhodes","Pena","Beck","Newman","Haynes","McDaniel","Mendez","Bush","Vaughn","Parks","Dawson","Santiago","Norris","Hardy","Love","Steele","Curry","Powers","Schultz","Barker","Guzman","Page","Munoz","Ball","Keller","Chandler","Weber","Leonard","Walsh","Lyons","Ramsey","Wolfe","Schneider","Mullins","Benson","Sharp","Bowen","Daniel","Barber","Cummings","Hines","Baldwin","Griffith","Valdez","Hubbard","Salazar","Reeves","Warner","Stevenson","Burgess","Santos","Tate","Cross","Garner","Mann","Mack","Moss","Thornton","Dennis","McGee","Farmer","Delgado","Aguilar","Vega","Glover","Manning","Cohen","Harmon","Rodgers","Robbins","Newton","Todd","Blair","Higgins","Ingram","Reese","Cannon","Strickland","Townsend","Potter","Goodwin","Walton","Rowe","Hampton","Ortega","Patton","Swanson","Joseph","Francis","Goodman","Maldonado","Yates","Becker","Erickson","Hodges","Rios","Conner","Adkins","Webster","Norman","Malone","Hammond","Flowers","Cobb","Moody","Quinn","Blake","Maxwell","Pope","Floyd","Osborne","Paul","McCarthy","Guerrero","Lindsey","Estrada","Sandoval","Gibbs","Tyler","Gross","Fitzgerald","Stokes","Doyle","Sherman","Saunders","Wise","Colon","Gill","Alvarado","Greer","Padilla","Simon","Waters","Nunez","Ballard","Schwartz","McBride","Houston","Christensen","Klein","Pratt","Briggs","Parsons","McLaughlin","Zimmerman","French","Buchanan","Moran","Copeland","Roy","Pittman","Brady","McCormick","Holloway","Brock","Poole","Frank","Logan","Owen","Bass","Marsh","Drake","Wong","Jefferson","Park","Morton","Abbott","Sparks","Patrick","Norton","Huff","Clayton","Massey","Lloyd","Figueroa","Carson","Bowers","Roberson","Barton","Tran","Lamb","Harrington","Casey","Boone","Cortez","Clarke","Mathis","Singleton","Wilkins","Cain","Bryan","Underwood","Hogan","McKenzie","Collier","Luna","Phelps","McGuire","Allison","Bridges","Wilkerson","Nash","Summers","Atkins"],countries:[{name:"Afghanistan",abbreviation:"AF"},{name:"Albania",abbreviation:"AL"},{name:"Algeria",abbreviation:"DZ"},{name:"American Samoa",abbreviation:"AS"},{name:"Andorra",abbreviation:"AD"},{name:"Angola",abbreviation:"AO"},{name:"Anguilla",abbreviation:"AI"},{name:"Antarctica",abbreviation:"AQ"},{name:"Antigua and Barbuda",abbreviation:"AG"},{name:"Argentina",abbreviation:"AR"},{name:"Armenia",abbreviation:"AM"},{name:"Aruba",abbreviation:"AW"},{name:"Australia",abbreviation:"AU"},{name:"Austria",abbreviation:"AT"},{name:"Azerbaijan",abbreviation:"AZ"},{name:"Bahamas",abbreviation:"BS"},{name:"Bahrain",abbreviation:"BH"},{name:"Bangladesh",abbreviation:"BD"},{name:"Barbados",abbreviation:"BB"},{name:"Belarus",abbreviation:"BY"},{name:"Belgium",abbreviation:"BE"},{name:"Belize",abbreviation:"BZ"},{name:"Benin",abbreviation:"BJ"},{name:"Bermuda",abbreviation:"BM"},{name:"Bhutan",abbreviation:"BT"},{name:"Bolivia",abbreviation:"BO"},{name:"Bosnia and Herzegovina",abbreviation:"BA"},{name:"Botswana",abbreviation:"BW"},{name:"Bouvet Island",abbreviation:"BV"},{name:"Brazil",abbreviation:"BR"},{name:"British Antarctic Territory",abbreviation:"BQ"},{name:"British Indian Ocean Territory",abbreviation:"IO"},{name:"British Virgin Islands",abbreviation:"VG"},{name:"Brunei",abbreviation:"BN"},{name:"Bulgaria",abbreviation:"BG"},{name:"Burkina Faso",abbreviation:"BF"},{name:"Burundi",abbreviation:"BI"},{name:"Cambodia",abbreviation:"KH"},{name:"Cameroon",abbreviation:"CM"},{name:"Canada",abbreviation:"CA"},{name:"Canton and Enderbury Islands",abbreviation:"CT"},{name:"Cape Verde",abbreviation:"CV"},{name:"Cayman Islands",abbreviation:"KY"},{name:"Central African Republic",abbreviation:"CF"},{name:"Chad",abbreviation:"TD"},{name:"Chile",abbreviation:"CL"},{name:"China",abbreviation:"CN"},{name:"Christmas Island",abbreviation:"CX"},{name:"Cocos [Keeling] Islands",abbreviation:"CC"},{name:"Colombia",abbreviation:"CO"},{name:"Comoros",abbreviation:"KM"},{name:"Congo - Brazzaville",abbreviation:"CG"},{name:"Congo - Kinshasa",abbreviation:"CD"},{name:"Cook Islands",abbreviation:"CK"},{name:"Costa Rica",abbreviation:"CR"},{name:"Croatia",abbreviation:"HR"},{name:"Cuba",abbreviation:"CU"},{name:"Cyprus",abbreviation:"CY"},{name:"Czech Republic",abbreviation:"CZ"},{name:"Côte d’Ivoire",abbreviation:"CI"},{name:"Denmark",abbreviation:"DK"},{name:"Djibouti",abbreviation:"DJ"},{name:"Dominica",abbreviation:"DM"},{name:"Dominican Republic",abbreviation:"DO"},{name:"Dronning Maud Land",abbreviation:"NQ"},{name:"East Germany",abbreviation:"DD"},{name:"Ecuador",abbreviation:"EC"},{name:"Egypt",abbreviation:"EG"},{name:"El Salvador",abbreviation:"SV"},{name:"Equatorial Guinea",abbreviation:"GQ"},{name:"Eritrea",abbreviation:"ER"},{name:"Estonia",abbreviation:"EE"},{name:"Ethiopia",abbreviation:"ET"},{name:"Falkland Islands",abbreviation:"FK"},{name:"Faroe Islands",abbreviation:"FO"},{name:"Fiji",abbreviation:"FJ"},{name:"Finland",abbreviation:"FI"},{name:"France",abbreviation:"FR"},{name:"French Guiana",abbreviation:"GF"},{name:"French Polynesia",abbreviation:"PF"},{name:"French Southern Territories",abbreviation:"TF"},{name:"French Southern and Antarctic Territories",abbreviation:"FQ"},{name:"Gabon",abbreviation:"GA"},{name:"Gambia",abbreviation:"GM"},{name:"Georgia",abbreviation:"GE"},{name:"Germany",abbreviation:"DE"},{name:"Ghana",abbreviation:"GH"},{name:"Gibraltar",abbreviation:"GI"},{name:"Greece",abbreviation:"GR"},{name:"Greenland",abbreviation:"GL"},{name:"Grenada",abbreviation:"GD"},{name:"Guadeloupe",abbreviation:"GP"},{name:"Guam",abbreviation:"GU"},{name:"Guatemala",abbreviation:"GT"},{name:"Guernsey",abbreviation:"GG"},{name:"Guinea",abbreviation:"GN"},{name:"Guinea-Bissau",abbreviation:"GW"},{name:"Guyana",abbreviation:"GY"},{name:"Haiti",abbreviation:"HT"},{name:"Heard Island and McDonald Islands",abbreviation:"HM"},{name:"Honduras",abbreviation:"HN"},{name:"Hong Kong SAR China",abbreviation:"HK"},{name:"Hungary",abbreviation:"HU"},{name:"Iceland",abbreviation:"IS"},{name:"India",abbreviation:"IN"},{name:"Indonesia",abbreviation:"ID"},{name:"Iran",abbreviation:"IR"},{name:"Iraq",abbreviation:"IQ"},{name:"Ireland",abbreviation:"IE"},{name:"Isle of Man",abbreviation:"IM"},{name:"Israel",abbreviation:"IL"},{name:"Italy",abbreviation:"IT"},{name:"Jamaica",abbreviation:"JM"},{name:"Japan",abbreviation:"JP"},{name:"Jersey",abbreviation:"JE"},{name:"Johnston Island",abbreviation:"JT"},{name:"Jordan",abbreviation:"JO"},{name:"Kazakhstan",abbreviation:"KZ"},{name:"Kenya",abbreviation:"KE"},{name:"Kiribati",abbreviation:"KI"},{name:"Kuwait",abbreviation:"KW"},{name:"Kyrgyzstan",abbreviation:"KG"},{name:"Laos",abbreviation:"LA"},{name:"Latvia",abbreviation:"LV"},{name:"Lebanon",abbreviation:"LB"},{name:"Lesotho",abbreviation:"LS"},{name:"Liberia",abbreviation:"LR"},{name:"Libya",abbreviation:"LY"},{name:"Liechtenstein",abbreviation:"LI"},{name:"Lithuania",abbreviation:"LT"},{name:"Luxembourg",abbreviation:"LU"},{name:"Macau SAR China",abbreviation:"MO"},{name:"Macedonia",abbreviation:"MK"},{name:"Madagascar",abbreviation:"MG"},{name:"Malawi",abbreviation:"MW"},{name:"Malaysia",abbreviation:"MY"},{name:"Maldives",abbreviation:"MV"},{name:"Mali",abbreviation:"ML"},{name:"Malta",abbreviation:"MT"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Martinique",abbreviation:"MQ"},{name:"Mauritania",abbreviation:"MR"},{name:"Mauritius",abbreviation:"MU"},{name:"Mayotte",abbreviation:"YT"},{name:"Metropolitan France",abbreviation:"FX"},{name:"Mexico",abbreviation:"MX"},{name:"Micronesia",abbreviation:"FM"},{name:"Midway Islands",abbreviation:"MI"},{name:"Moldova",abbreviation:"MD"},{name:"Monaco",abbreviation:"MC"},{name:"Mongolia",abbreviation:"MN"},{name:"Montenegro",abbreviation:"ME"},{name:"Montserrat",abbreviation:"MS"},{name:"Morocco",abbreviation:"MA"},{name:"Mozambique",abbreviation:"MZ"},{name:"Myanmar [Burma]",abbreviation:"MM"},{name:"Namibia",abbreviation:"NA"},{name:"Nauru",abbreviation:"NR"},{name:"Nepal",abbreviation:"NP"},{name:"Netherlands",abbreviation:"NL"},{name:"Netherlands Antilles",abbreviation:"AN"},{name:"Neutral Zone",abbreviation:"NT"},{name:"New Caledonia",abbreviation:"NC"},{name:"New Zealand",abbreviation:"NZ"},{name:"Nicaragua",abbreviation:"NI"},{name:"Niger",abbreviation:"NE"},{name:"Nigeria",abbreviation:"NG"},{name:"Niue",abbreviation:"NU"},{name:"Norfolk Island",abbreviation:"NF"},{name:"North Korea",abbreviation:"KP"},{name:"North Vietnam",abbreviation:"VD"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Norway",abbreviation:"NO"},{name:"Oman",abbreviation:"OM"},{name:"Pacific Islands Trust Territory",abbreviation:"PC"},{name:"Pakistan",abbreviation:"PK"},{name:"Palau",abbreviation:"PW"},{name:"Palestinian Territories",abbreviation:"PS"},{name:"Panama",abbreviation:"PA"},{name:"Panama Canal Zone",abbreviation:"PZ"},{name:"Papua New Guinea",abbreviation:"PG"},{name:"Paraguay",abbreviation:"PY"},{name:"People's Democratic Republic of Yemen",abbreviation:"YD"},{name:"Peru",abbreviation:"PE"},{name:"Philippines",abbreviation:"PH"},{name:"Pitcairn Islands",abbreviation:"PN"},{name:"Poland",abbreviation:"PL"},{name:"Portugal",abbreviation:"PT"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Qatar",abbreviation:"QA"},{name:"Romania",abbreviation:"RO"},{name:"Russia",abbreviation:"RU"},{name:"Rwanda",abbreviation:"RW"},{name:"Réunion",abbreviation:"RE"},{name:"Saint Barthélemy",abbreviation:"BL"},{name:"Saint Helena",abbreviation:"SH"},{name:"Saint Kitts and Nevis",abbreviation:"KN"},{name:"Saint Lucia",abbreviation:"LC"},{name:"Saint Martin",abbreviation:"MF"},{name:"Saint Pierre and Miquelon",abbreviation:"PM"},{name:"Saint Vincent and the Grenadines",abbreviation:"VC"},{name:"Samoa",abbreviation:"WS"},{name:"San Marino",abbreviation:"SM"},{name:"Saudi Arabia",abbreviation:"SA"},{name:"Senegal",abbreviation:"SN"},{name:"Serbia",abbreviation:"RS"},{name:"Serbia and Montenegro",abbreviation:"CS"},{name:"Seychelles",abbreviation:"SC"},{name:"Sierra Leone",abbreviation:"SL"},{name:"Singapore",abbreviation:"SG"},{name:"Slovakia",abbreviation:"SK"},{name:"Slovenia",abbreviation:"SI"},{name:"Solomon Islands",abbreviation:"SB"},{name:"Somalia",abbreviation:"SO"},{name:"South Africa",abbreviation:"ZA"},{name:"South Georgia and the South Sandwich Islands",abbreviation:"GS"},{name:"South Korea",abbreviation:"KR"},{name:"Spain",abbreviation:"ES"},{name:"Sri Lanka",abbreviation:"LK"},{name:"Sudan",abbreviation:"SD"},{name:"Suriname",abbreviation:"SR"},{name:"Svalbard and Jan Mayen",abbreviation:"SJ"},{name:"Swaziland",abbreviation:"SZ"},{name:"Sweden",abbreviation:"SE"},{name:"Switzerland",abbreviation:"CH"},{name:"Syria",abbreviation:"SY"},{name:"São Tomé and Príncipe",abbreviation:"ST"},{name:"Taiwan",abbreviation:"TW"},{name:"Tajikistan",abbreviation:"TJ"},{name:"Tanzania",abbreviation:"TZ"},{name:"Thailand",abbreviation:"TH"},{name:"Timor-Leste",abbreviation:"TL"},{name:"Togo",abbreviation:"TG"},{name:"Tokelau",abbreviation:"TK"},{name:"Tonga",abbreviation:"TO"},{name:"Trinidad and Tobago",abbreviation:"TT"},{name:"Tunisia",abbreviation:"TN"},{name:"Turkey",abbreviation:"TR"},{name:"Turkmenistan",abbreviation:"TM"},{name:"Turks and Caicos Islands",abbreviation:"TC"},{name:"Tuvalu",abbreviation:"TV"},{name:"U.S. Minor Outlying Islands",abbreviation:"UM"},{name:"U.S. Miscellaneous Pacific Islands",abbreviation:"PU"},{name:"U.S. Virgin Islands",abbreviation:"VI"},{name:"Uganda",abbreviation:"UG"},{name:"Ukraine",abbreviation:"UA"},{name:"Union of Soviet Socialist Republics",abbreviation:"SU"},{name:"United Arab Emirates",abbreviation:"AE"},{name:"United Kingdom",abbreviation:"GB"},{name:"United States",abbreviation:"US"},{name:"Unknown or Invalid Region",abbreviation:"ZZ"},{name:"Uruguay",abbreviation:"UY"},{name:"Uzbekistan",abbreviation:"UZ"},{name:"Vanuatu",abbreviation:"VU"},{name:"Vatican City",abbreviation:"VA"},{name:"Venezuela",abbreviation:"VE"},{name:"Vietnam",abbreviation:"VN"},{name:"Wake Island",abbreviation:"WK"},{name:"Wallis and Futuna",abbreviation:"WF"},{name:"Western Sahara",abbreviation:"EH"},{name:"Yemen",abbreviation:"YE"},{name:"Zambia",abbreviation:"ZM"},{name:"Zimbabwe",abbreviation:"ZW"},{name:"Åland Islands",abbreviation:"AX"}],provinces:[{name:"Alberta",abbreviation:"AB"},{name:"British Columbia",abbreviation:"BC"},{name:"Manitoba",abbreviation:"MB"},{name:"New Brunswick",abbreviation:"NB"},{name:"Newfoundland and Labrador",abbreviation:"NL"},{name:"Nova Scotia",abbreviation:"NS"},{name:"Ontario",abbreviation:"ON"},{name:"Prince Edward Island",abbreviation:"PE"},{name:"Quebec",abbreviation:"QC"},{name:"Saskatchewan",abbreviation:"SK"},{name:"Northwest Territories",abbreviation:"NT"},{name:"Nunavut",abbreviation:"NU"},{name:"Yukon",abbreviation:"YT"}],us_states_and_dc:[{name:"Alabama",abbreviation:"AL"},{name:"Alaska",abbreviation:"AK"},{name:"Arizona",abbreviation:"AZ"},{name:"Arkansas",abbreviation:"AR"},{name:"California",abbreviation:"CA"},{name:"Colorado",abbreviation:"CO"},{name:"Connecticut",abbreviation:"CT"},{name:"Delaware",abbreviation:"DE"},{name:"District of Columbia",abbreviation:"DC"},{name:"Florida",abbreviation:"FL"},{name:"Georgia",abbreviation:"GA"},{name:"Hawaii",abbreviation:"HI"},{name:"Idaho",abbreviation:"ID"},{name:"Illinois",abbreviation:"IL"},{name:"Indiana",abbreviation:"IN"},{name:"Iowa",abbreviation:"IA"},{name:"Kansas",abbreviation:"KS"},{name:"Kentucky",abbreviation:"KY"},{name:"Louisiana",abbreviation:"LA"},{name:"Maine",abbreviation:"ME"},{name:"Maryland",abbreviation:"MD"},{name:"Massachusetts",abbreviation:"MA"},{name:"Michigan",abbreviation:"MI"},{name:"Minnesota",abbreviation:"MN"},{name:"Mississippi",abbreviation:"MS"},{name:"Missouri",abbreviation:"MO"},{name:"Montana",abbreviation:"MT"},{name:"Nebraska",abbreviation:"NE"},{name:"Nevada",abbreviation:"NV"},{name:"New Hampshire",abbreviation:"NH"},{name:"New Jersey",abbreviation:"NJ"},{name:"New Mexico",abbreviation:"NM"},{name:"New York",abbreviation:"NY"},{name:"North Carolina",abbreviation:"NC"},{name:"North Dakota",abbreviation:"ND"},{name:"Ohio",abbreviation:"OH"},{name:"Oklahoma",abbreviation:"OK"},{name:"Oregon",abbreviation:"OR"},{name:"Pennsylvania",abbreviation:"PA"},{name:"Rhode Island",abbreviation:"RI"},{name:"South Carolina",abbreviation:"SC"},{name:"South Dakota",abbreviation:"SD"},{name:"Tennessee",abbreviation:"TN"},{name:"Texas",abbreviation:"TX"},{name:"Utah",abbreviation:"UT"},{name:"Vermont",abbreviation:"VT"},{name:"Virginia",abbreviation:"VA"},{name:"Washington",abbreviation:"WA"},{name:"West Virginia",abbreviation:"WV"},{name:"Wisconsin",abbreviation:"WI"},{name:"Wyoming",abbreviation:"WY"}],territories:[{name:"American Samoa",abbreviation:"AS"},{name:"Federated States of Micronesia",abbreviation:"FM"},{name:"Guam",abbreviation:"GU"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Virgin Islands, U.S.",abbreviation:"VI"}],armed_forces:[{name:"Armed Forces Europe",abbreviation:"AE"},{name:"Armed Forces Pacific",abbreviation:"AP"},{name:"Armed Forces the Americas",abbreviation:"AA"}],street_suffixes:[{name:"Avenue",abbreviation:"Ave"},{name:"Boulevard",abbreviation:"Blvd"},{name:"Center",abbreviation:"Ctr"},{name:"Circle",abbreviation:"Cir"},{name:"Court",abbreviation:"Ct"},{name:"Drive",abbreviation:"Dr"},{name:"Extension",abbreviation:"Ext"},{name:"Glen",abbreviation:"Gln"},{name:"Grove",abbreviation:"Grv"},{name:"Heights",abbreviation:"Hts"},{name:"Highway",abbreviation:"Hwy"},{name:"Junction",abbreviation:"Jct"},{name:"Key",abbreviation:"Key"},{name:"Lane",abbreviation:"Ln"},{name:"Loop",abbreviation:"Loop"},{name:"Manor",abbreviation:"Mnr"},{name:"Mill",abbreviation:"Mill"},{name:"Park",abbreviation:"Park"},{name:"Parkway",abbreviation:"Pkwy"},{name:"Pass",abbreviation:"Pass"},{name:"Path",abbreviation:"Path"},{name:"Pike",abbreviation:"Pike"},{name:"Place",abbreviation:"Pl"},{name:"Plaza",abbreviation:"Plz"},{name:"Point",abbreviation:"Pt"},{name:"Ridge",abbreviation:"Rdg"},{name:"River",abbreviation:"Riv"},{name:"Road",abbreviation:"Rd"},{name:"Square",abbreviation:"Sq"},{name:"Street",abbreviation:"St"},{name:"Terrace",abbreviation:"Ter"},{name:"Trail",abbreviation:"Trl"},{name:"Turnpike",abbreviation:"Tpke"},{name:"View",abbreviation:"Vw"},{name:"Way",abbreviation:"Way"}],months:[{name:"January",short_name:"Jan",numeric:"01",days:31},{name:"February",short_name:"Feb",numeric:"02",days:28},{name:"March",short_name:"Mar",numeric:"03",days:31},{name:"April",short_name:"Apr",numeric:"04",days:30},{name:"May",short_name:"May",numeric:"05",days:31},{name:"June",short_name:"Jun",numeric:"06",days:30},{name:"July",short_name:"Jul",numeric:"07",days:31},{name:"August",short_name:"Aug",numeric:"08",days:31},{name:"September",short_name:"Sep",numeric:"09",days:30},{name:"October",short_name:"Oct",numeric:"10",days:31},{name:"November",short_name:"Nov",numeric:"11",days:30},{name:"December",short_name:"Dec",numeric:"12",days:31}],cc_types:[{name:"American Express",short_name:"amex",prefix:"34",length:15},{name:"Bankcard",short_name:"bankcard",prefix:"5610",length:16},{name:"China UnionPay",short_name:"chinaunion",prefix:"62",length:16},{name:"Diners Club Carte Blanche",short_name:"dccarte",prefix:"300",length:14},{name:"Diners Club enRoute",short_name:"dcenroute",prefix:"2014",length:15},{name:"Diners Club International",short_name:"dcintl",prefix:"36",length:14},{name:"Diners Club United States & Canada",short_name:"dcusc",prefix:"54",length:16},{name:"Discover Card",short_name:"discover",prefix:"6011",length:16},{name:"InstaPayment",short_name:"instapay",prefix:"637",length:16},{name:"JCB",short_name:"jcb",prefix:"3528",length:16},{name:"Laser",short_name:"laser",prefix:"6304",length:16},{name:"Maestro",short_name:"maestro",prefix:"5018",length:16},{name:"Mastercard",short_name:"mc",prefix:"51",length:16},{name:"Solo",short_name:"solo",prefix:"6334",length:16},{name:"Switch",short_name:"switch",prefix:"4903",length:16},{name:"Visa",short_name:"visa",prefix:"4",length:16},{name:"Visa Electron",short_name:"electron",prefix:"4026",length:16}],currency_types:[{code:"AED",name:"United Arab Emirates Dirham"},{code:"AFN",name:"Afghanistan Afghani"},{code:"ALL",name:"Albania Lek"},{code:"AMD",name:"Armenia Dram"},{code:"ANG",name:"Netherlands Antilles Guilder"},{code:"AOA",name:"Angola Kwanza"},{code:"ARS",name:"Argentina Peso"},{code:"AUD",name:"Australia Dollar"},{code:"AWG",name:"Aruba Guilder"},{code:"AZN",name:"Azerbaijan New Manat"},{code:"BAM",name:"Bosnia and Herzegovina Convertible Marka"},{code:"BBD",name:"Barbados Dollar"},{code:"BDT",name:"Bangladesh Taka"},{code:"BGN",name:"Bulgaria Lev"},{code:"BHD",name:"Bahrain Dinar"},{code:"BIF",name:"Burundi Franc"},{code:"BMD",name:"Bermuda Dollar"},{code:"BND",name:"Brunei Darussalam Dollar"},{code:"BOB",name:"Bolivia Boliviano"},{code:"BRL",name:"Brazil Real"},{code:"BSD",name:"Bahamas Dollar"},{code:"BTN",name:"Bhutan Ngultrum"},{code:"BWP",name:"Botswana Pula"},{code:"BYR",name:"Belarus Ruble"},{code:"BZD",name:"Belize Dollar"},{code:"CAD",name:"Canada Dollar"},{code:"CDF",name:"Congo/Kinshasa Franc"},{code:"CHF",name:"Switzerland Franc"},{code:"CLP",name:"Chile Peso"},{code:"CNY",name:"China Yuan Renminbi"},{code:"COP",name:"Colombia Peso"},{code:"CRC",name:"Costa Rica Colon"},{code:"CUC",name:"Cuba Convertible Peso"},{code:"CUP",name:"Cuba Peso"},{code:"CVE",name:"Cape Verde Escudo"},{code:"CZK",name:"Czech Republic Koruna"},{code:"DJF",name:"Djibouti Franc"},{code:"DKK",name:"Denmark Krone"},{code:"DOP",name:"Dominican Republic Peso"},{code:"DZD",name:"Algeria Dinar"},{code:"EGP",name:"Egypt Pound"},{code:"ERN",name:"Eritrea Nakfa"},{code:"ETB",name:"Ethiopia Birr"},{code:"EUR",name:"Euro Member Countries"},{code:"FJD",name:"Fiji Dollar"},{code:"FKP",name:"Falkland Islands (Malvinas) Pound"},{code:"GBP",name:"United Kingdom Pound"},{code:"GEL",name:"Georgia Lari"},{code:"GGP",name:"Guernsey Pound"},{code:"GHS",name:"Ghana Cedi"},{code:"GIP",name:"Gibraltar Pound"},{code:"GMD",name:"Gambia Dalasi"},{code:"GNF",name:"Guinea Franc"},{code:"GTQ",name:"Guatemala Quetzal"},{code:"GYD",name:"Guyana Dollar"},{code:"HKD",name:"Hong Kong Dollar"},{code:"HNL",name:"Honduras Lempira"},{code:"HRK",name:"Croatia Kuna"},{code:"HTG",name:"Haiti Gourde"},{code:"HUF",name:"Hungary Forint"},{code:"IDR",name:"Indonesia Rupiah"},{code:"ILS",name:"Israel Shekel"},{code:"IMP",name:"Isle of Man Pound"},{code:"INR",name:"India Rupee"},{code:"IQD",name:"Iraq Dinar"},{code:"IRR",name:"Iran Rial"},{code:"ISK",name:"Iceland Krona"},{code:"JEP",name:"Jersey Pound"},{code:"JMD",name:"Jamaica Dollar"},{code:"JOD",name:"Jordan Dinar"},{code:"JPY",name:"Japan Yen"},{code:"KES",name:"Kenya Shilling"},{code:"KGS",name:"Kyrgyzstan Som" -},{code:"KHR",name:"Cambodia Riel"},{code:"KMF",name:"Comoros Franc"},{code:"KPW",name:"Korea (North) Won"},{code:"KRW",name:"Korea (South) Won"},{code:"KWD",name:"Kuwait Dinar"},{code:"KYD",name:"Cayman Islands Dollar"},{code:"KZT",name:"Kazakhstan Tenge"},{code:"LAK",name:"Laos Kip"},{code:"LBP",name:"Lebanon Pound"},{code:"LKR",name:"Sri Lanka Rupee"},{code:"LRD",name:"Liberia Dollar"},{code:"LSL",name:"Lesotho Loti"},{code:"LTL",name:"Lithuania Litas"},{code:"LYD",name:"Libya Dinar"},{code:"MAD",name:"Morocco Dirham"},{code:"MDL",name:"Moldova Leu"},{code:"MGA",name:"Madagascar Ariary"},{code:"MKD",name:"Macedonia Denar"},{code:"MMK",name:"Myanmar (Burma) Kyat"},{code:"MNT",name:"Mongolia Tughrik"},{code:"MOP",name:"Macau Pataca"},{code:"MRO",name:"Mauritania Ouguiya"},{code:"MUR",name:"Mauritius Rupee"},{code:"MVR",name:"Maldives (Maldive Islands) Rufiyaa"},{code:"MWK",name:"Malawi Kwacha"},{code:"MXN",name:"Mexico Peso"},{code:"MYR",name:"Malaysia Ringgit"},{code:"MZN",name:"Mozambique Metical"},{code:"NAD",name:"Namibia Dollar"},{code:"NGN",name:"Nigeria Naira"},{code:"NIO",name:"Nicaragua Cordoba"},{code:"NOK",name:"Norway Krone"},{code:"NPR",name:"Nepal Rupee"},{code:"NZD",name:"New Zealand Dollar"},{code:"OMR",name:"Oman Rial"},{code:"PAB",name:"Panama Balboa"},{code:"PEN",name:"Peru Nuevo Sol"},{code:"PGK",name:"Papua New Guinea Kina"},{code:"PHP",name:"Philippines Peso"},{code:"PKR",name:"Pakistan Rupee"},{code:"PLN",name:"Poland Zloty"},{code:"PYG",name:"Paraguay Guarani"},{code:"QAR",name:"Qatar Riyal"},{code:"RON",name:"Romania New Leu"},{code:"RSD",name:"Serbia Dinar"},{code:"RUB",name:"Russia Ruble"},{code:"RWF",name:"Rwanda Franc"},{code:"SAR",name:"Saudi Arabia Riyal"},{code:"SBD",name:"Solomon Islands Dollar"},{code:"SCR",name:"Seychelles Rupee"},{code:"SDG",name:"Sudan Pound"},{code:"SEK",name:"Sweden Krona"},{code:"SGD",name:"Singapore Dollar"},{code:"SHP",name:"Saint Helena Pound"},{code:"SLL",name:"Sierra Leone Leone"},{code:"SOS",name:"Somalia Shilling"},{code:"SPL",name:"Seborga Luigino"},{code:"SRD",name:"Suriname Dollar"},{code:"STD",name:"São Tomé and Príncipe Dobra"},{code:"SVC",name:"El Salvador Colon"},{code:"SYP",name:"Syria Pound"},{code:"SZL",name:"Swaziland Lilangeni"},{code:"THB",name:"Thailand Baht"},{code:"TJS",name:"Tajikistan Somoni"},{code:"TMT",name:"Turkmenistan Manat"},{code:"TND",name:"Tunisia Dinar"},{code:"TOP",name:"Tonga Pa'anga"},{code:"TRY",name:"Turkey Lira"},{code:"TTD",name:"Trinidad and Tobago Dollar"},{code:"TVD",name:"Tuvalu Dollar"},{code:"TWD",name:"Taiwan New Dollar"},{code:"TZS",name:"Tanzania Shilling"},{code:"UAH",name:"Ukraine Hryvnia"},{code:"UGX",name:"Uganda Shilling"},{code:"USD",name:"United States Dollar"},{code:"UYU",name:"Uruguay Peso"},{code:"UZS",name:"Uzbekistan Som"},{code:"VEF",name:"Venezuela Bolivar"},{code:"VND",name:"Viet Nam Dong"},{code:"VUV",name:"Vanuatu Vatu"},{code:"WST",name:"Samoa Tala"},{code:"XAF",name:"Communauté Financière Africaine (BEAC) CFA Franc BEAC"},{code:"XCD",name:"East Caribbean Dollar"},{code:"XDR",name:"International Monetary Fund (IMF) Special Drawing Rights"},{code:"XOF",name:"Communauté Financière Africaine (BCEAO) Franc"},{code:"XPF",name:"Comptoirs Français du Pacifique (CFP) Franc"},{code:"YER",name:"Yemen Rial"},{code:"ZAR",name:"South Africa Rand"},{code:"ZMW",name:"Zambia Kwacha"},{code:"ZWD",name:"Zimbabwe Dollar"}]},b=Object.prototype.hasOwnProperty,E=Object.keys||function(e){var t=[];for(var a in e)b.call(e,a)&&t.push(a);return t};r.prototype.get=function(e){return l(v[e])},r.prototype.mac_address=function(e){e=i(e),e.separator||(e.separator=e.networkVersion?".":":");var t="ABCDEF1234567890",a="";return a=e.networkVersion?this.n(this.string,3,{pool:t,length:4}).join(e.separator):this.n(this.string,6,{pool:t,length:2}).join(e.separator)},r.prototype.normal=function(e){e=i(e,{mean:0,dev:1});var t,a,n,r,s=e.mean,o=e.dev;do a=2*this.random()-1,n=2*this.random()-1,t=a*a+n*n;while(t>=1);return r=a*Math.sqrt(-2*Math.log(t)/t),o*r+s},r.prototype.radio=function(e){e=i(e,{side:"?"});var t="";switch(e.side.toLowerCase()){case"east":case"e":t="W";break;case"west":case"w":t="K";break;default:t=this.character({pool:"KW"})}return t+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})},r.prototype.set=function(e,t){"string"==typeof e?v[e]=t:v=l(e,v)},r.prototype.tv=function(e){return this.radio(e)},r.prototype.cnpj=function(){var e=this.n(this.natural,8,{max:9}),t=2+6*e[7]+7*e[6]+8*e[5]+9*e[4]+2*e[3]+3*e[2]+4*e[1]+5*e[0];t=11-t%11,t>=10&&(t=0);var a=2*t+3+7*e[7]+8*e[6]+9*e[5]+2*e[4]+3*e[3]+4*e[2]+5*e[1]+6*e[0];return a=11-a%11,a>=10&&(a=0),""+e[0]+e[1]+"."+e[2]+e[3]+e[4]+"."+e[5]+e[6]+e[7]+"/0001-"+t+a},r.prototype.mersenne_twister=function(e){return new A(e)},r.prototype.blueimp_md5=function(){return new D};var A=function(e){void 0===e&&(e=Math.floor(Math.random()*Math.pow(10,13))),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(e)};A.prototype.init_genrand=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti>>30,this.mt[this.mti]=(1812433253*((4294901760&e)>>>16)<<16)+1812433253*(65535&e)+this.mti,this.mt[this.mti]>>>=0},A.prototype.init_by_array=function(e,t){var a,n,r=1,i=0;for(this.init_genrand(19650218),a=this.N>t?this.N:t;a;a--)n=this.mt[r-1]^this.mt[r-1]>>>30,this.mt[r]=(this.mt[r]^(1664525*((4294901760&n)>>>16)<<16)+1664525*(65535&n))+e[i]+i,this.mt[r]>>>=0,r++,i++,r>=this.N&&(this.mt[0]=this.mt[this.N-1],r=1),i>=t&&(i=0);for(a=this.N-1;a;a--)n=this.mt[r-1]^this.mt[r-1]>>>30,this.mt[r]=(this.mt[r]^(1566083941*((4294901760&n)>>>16)<<16)+1566083941*(65535&n))-r,this.mt[r]>>>=0,r++,r>=this.N&&(this.mt[0]=this.mt[this.N-1],r=1);this.mt[0]=2147483648},A.prototype.genrand_int32=function(){var e,t=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var a;for(this.mti===this.N+1&&this.init_genrand(5489),a=0;a>>1^t[1&e];for(;a>>1^t[1&e];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^t[1&e],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0},A.prototype.genrand_int31=function(){return this.genrand_int32()>>>1},A.prototype.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},A.prototype.random=function(){return this.genrand_int32()*(1/4294967296)},A.prototype.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},A.prototype.genrand_res53=function(){var e=this.genrand_int32()>>>5,t=this.genrand_int32()>>>6;return(67108864*e+t)*(1/9007199254740992)};var D=function(){};D.prototype.VERSION="1.0.1",D.prototype.safe_add=function(e,t){var a=(65535&e)+(65535&t),n=(e>>16)+(t>>16)+(a>>16);return n<<16|65535&a},D.prototype.bit_roll=function(e,t){return e<>>32-t},D.prototype.md5_cmn=function(e,t,a,n,r,i){return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(t,e),this.safe_add(n,i)),r),a)},D.prototype.md5_ff=function(e,t,a,n,r,i,s){return this.md5_cmn(t&a|~t&n,e,t,r,i,s)},D.prototype.md5_gg=function(e,t,a,n,r,i,s){return this.md5_cmn(t&n|a&~n,e,t,r,i,s)},D.prototype.md5_hh=function(e,t,a,n,r,i,s){return this.md5_cmn(t^a^n,e,t,r,i,s)},D.prototype.md5_ii=function(e,t,a,n,r,i,s){return this.md5_cmn(a^(t|~n),e,t,r,i,s)},D.prototype.binl_md5=function(e,t){e[t>>5]|=128<>>9<<4)+14]=t;var a,n,r,i,s,o=1732584193,u=-271733879,c=-1732584194,l=271733878;for(a=0;a>5]>>>t%32&255);return a},D.prototype.rstr2binl=function(e){var t,a=[];for(a[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<16&&(r=this.binl_md5(r,8*e.length)),a=0;16>a;a+=1)i[a]=909522486^r[a],s[a]=1549556828^r[a];return n=this.binl_md5(i.concat(this.rstr2binl(t)),512+8*t.length),this.binl2rstr(this.binl_md5(s.concat(n),640))},D.prototype.rstr2hex=function(e){var t,a,n="0123456789abcdef",r="";for(a=0;a>>4&15)+n.charAt(15&t);return r},D.prototype.str2rstr_utf8=function(e){return unescape(encodeURIComponent(e))},D.prototype.raw_md5=function(e){return this.rstr_md5(this.str2rstr_utf8(e))},D.prototype.hex_md5=function(e){return this.rstr2hex(this.raw_md5(e))},D.prototype.raw_hmac_md5=function(e,t){return this.rstr_hmac_md5(this.str2rstr_utf8(e),this.str2rstr_utf8(t))},D.prototype.hex_hmac_md5=function(e,t){return this.rstr2hex(this.raw_hmac_md5(e,t))},D.prototype.md5=function(e,t,a){return t?a?this.raw_hmac_md5(t,e):this.hex_hmac_md5(t,e):a?this.raw_md5(e):this.hex_md5(e)},"undefined"!=typeof n&&("undefined"!=typeof a&&a.exports&&(n=a.exports=r),n.Chance=r),"function"==typeof e&&e.amd&&e([],function(){return r}),"undefined"!=typeof importScripts&&(chance=new r),"object"==typeof window&&"object"==typeof window.document&&(window.Chance=r,window.chance=new r)}()}).call(this,t("buffer").Buffer)},{buffer:18}],21:[function(e,t,a){function n(e){return e?r(e):void 0}function r(e){for(var t in n.prototype)e[t]=n.prototype[t];return e}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks[e]=this._callbacks[e]||[]).push(t),this},n.prototype.once=function(e,t){function a(){n.off(e,a),t.apply(this,arguments)}var n=this;return this._callbacks=this._callbacks||{},a.fn=t,this.on(e,a),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var a=this._callbacks[e];if(!a)return this;if(1==arguments.length)return delete this._callbacks[e],this;for(var n,r=0;rn;++n)a[n].apply(this,t)}return this},n.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks[e]||[]},n.prototype.hasListeners=function(e){return!!this.listeners(e).length}},{}],22:[function(e,t,a){function n(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function r(){var e=arguments,t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+a.humanize(this.diff),!t)return e;var n="color: "+this.color;e=[e[0],n,"color: inherit"].concat(Array.prototype.slice.call(e,1));var r=0,i=0;return e[0].replace(/%[a-z%]/g,function(e){"%%"!==e&&(r++,"%c"===e&&(i=r))}),e.splice(i,0,n),e}function i(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(e){try{null==e?a.storage.removeItem("debug"):a.storage.debug=e}catch(t){}}function o(){var e;try{e=a.storage.debug}catch(t){}return e}function u(){try{return window.localStorage}catch(e){}}a=t.exports=e("./debug"),a.log=i,a.formatArgs=r,a.save=s,a.load=o,a.useColors=n,a.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),a.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],a.formatters.j=function(e){return JSON.stringify(e)},a.enable(o())},{"./debug":23}],23:[function(e,t,a){function n(){return a.colors[l++%a.colors.length]}function r(e){function t(){}function r(){var e=r,t=+new Date,i=t-(c||t);e.diff=i,e.prev=c,e.curr=t,c=t,null==e.useColors&&(e.useColors=a.useColors()),null==e.color&&e.useColors&&(e.color=n());var s=Array.prototype.slice.call(arguments);s[0]=a.coerce(s[0]),"string"!=typeof s[0]&&(s=["%o"].concat(s));var o=0;s[0]=s[0].replace(/%([a-z%])/g,function(t,n){if("%%"===t)return t;o++;var r=a.formatters[n];if("function"==typeof r){var i=s[o];t=r.call(e,i),s.splice(o,1),o--}return t}),"function"==typeof a.formatArgs&&(s=a.formatArgs.apply(e,s));var u=r.log||a.log||console.log.bind(console);u.apply(e,s)}t.enabled=!1,r.enabled=!0;var i=a.enabled(e)?r:t;return i.namespace=e,i}function i(e){a.save(e);for(var t=(e||"").split(/[\s,]+/),n=t.length,r=0;n>r;r++)t[r]&&(e=t[r].replace(/\*/g,".*?"),"-"===e[0]?a.skips.push(new RegExp("^"+e.substr(1)+"$")):a.names.push(new RegExp("^"+e+"$")))}function s(){a.enable("")}function o(e){var t,n;for(t=0,n=a.skips.length;n>t;t++)if(a.skips[t].test(e))return!1;for(t=0,n=a.names.length;n>t;t++)if(a.names[t].test(e))return!0;return!1}function u(e){return e instanceof Error?e.stack||e.message:e}a=t.exports=r,a.coerce=u,a.disable=s,a.enable=i,a.enabled=o,a.humanize=e("ms"),a.names=[],a.skips=[],a.formatters={};var c,l=0},{ms:195}],24:[function(e,t,a){(function(e){"use strict";function a(t){return t instanceof e||t instanceof Date||t instanceof RegExp?!0:!1}function n(t){if(t instanceof e){var a=new e(t.length);return t.copy(a),a}if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return new RegExp(t);throw new Error("Unexpected situation")}function r(e){var t=[];return e.forEach(function(e,s){"object"==typeof e&&null!==e?Array.isArray(e)?t[s]=r(e):a(e)?t[s]=n(e):t[s]=i({},e):t[s]=e}),t}var i=t.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,s=arguments[0],o=Array.prototype.slice.call(arguments,1);return o.forEach(function(o){"object"!=typeof o||Array.isArray(o)||Object.keys(o).forEach(function(u){return t=s[u],e=o[u],e===s?void 0:"object"!=typeof e||null===e?void(s[u]=e):Array.isArray(e)?void(s[u]=r(e)):a(e)?void(s[u]=n(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(s[u]=i({},e)):void(s[u]=i(t,e))})}),s}}).call(this,e("buffer").Buffer)},{buffer:18}],25:[function(e,t,a){"use strict";var n=e("./util/uri-helpers");n.findByRef=e("./util/find-reference"),n.resolveSchema=e("./util/resolve-schema"),n.normalizeSchema=e("./util/normalize-schema");var r=t.exports=function(){function e(t,a,r,i){function s(a){if("string"==typeof a.id){var r=n.resolveURL(t,a.id).replace(/\/#?$/,"");if(r.indexOf("#")>-1){var i=r.split("#");r="/"===i[1].charAt()?i[0]:i[1]||i[0]}e.refs[r]||(e.refs[r]=a)}}if("object"==typeof t&&(i=r,r=a,a=t,t=void 0),"object"!=typeof a)throw new Error("schema must be an object");if("object"==typeof r&&null!==r){var o=r;r=[];for(var u in o)o[u].id=o[u].id||u,r.push(o[u])}return"undefined"==typeof r||Array.isArray(r)||(i=!!r,r=[]),(r||[]).concat([a]).forEach(function(e){a=n.normalizeSchema(t,e,s),s(a)}),n.resolveSchema(a,e.refs,i)}return e.refs={},e.util=n,e};r.util=n},{"./util/find-reference":27,"./util/normalize-schema":28,"./util/resolve-schema":29,"./util/uri-helpers":30}],26:[function(e,t,a){"use strict";var n=t.exports=function(e,t){function a(e,a){r[e]=n(a,t)}if(t=t||[],t.indexOf(e)>-1)throw new Error("unable dereference circular structures");if(!e||"object"!=typeof e)return e;t=t.concat([e]);var r=Array.isArray(e)?[]:{};return Array.isArray(r)?e.forEach(function(e,t){a(t,e)}):"[object Object]"===Object.prototype.toString.call(e)&&Object.keys(e).forEach(function(t){a(t,e[t])}),r}},{}],27:[function(e,t,a){"use strict";function n(e,t){for(var a=t.split("#")[1],n=a.split("/").slice(1);n.length;){var r=decodeURIComponent(n.shift()).replace(/~1/g,"/").replace(/~0/g,"~");if("undefined"==typeof e[r])throw new Error("JSON pointer not found: "+t);e=e[r]}return e}var r=e("./uri-helpers"),i=t.exports=function(e,t){var a=t[e]||t[e.split("#")[1]]||t[r.getDocumentURI(e)];if(a)a=e.indexOf("#/")>-1?n(a,e):a;else for(var s in t)if(r.resolveURL(t[s].id,e)===t[s].id){a=t[s];break}if(!a)throw new Error("Reference not found: "+e);for(;a.$ref;)a=i(a.$ref,t);return a}},{"./uri-helpers":30}],28:[function(e,t,a){"use strict";function n(e,t,a){if(e){var i="string"==typeof e.id?e.id:"#";r.isURL(i)||(i=r.resolveURL(t===i?null:t,i)),"string"!=typeof e.$ref||r.isURL(e.$ref)||(e.$ref=r.resolveURL(i,e.$ref)),"string"==typeof e.id&&(e.id=t=i)}for(var s in e){var o=e[s];"object"==typeof o&&"enum"!==s&&"required"!==s&&n(o,t,a)}"function"==typeof a&&a(e)}var r=e("./uri-helpers"),i=e("./clone-obj"),s=["http://json-schema.org/schema#","http://json-schema.org/draft-04/schema#"];t.exports=function(e,t,a){"object"==typeof e&&(a=t,t=e,e=null);var o=e||"",u=i(t);if(u.$schema&&-1===s.indexOf(u.$schema))throw new Error("Unsupported schema version (v4 only)");return o=r.resolveURL(u.$schema||s[0],o),n(u,r.resolveURL(u.id||"#",o),a),u.id=u.id||o,u}},{"./clone-obj":26,"./uri-helpers":30}],29:[function(e,t,a){"use strict";function n(e){return"enum"===e||"required"===e||"definitions"===e}function r(e,t,a,u){var c=Array.isArray(e)?[]:{};if("string"==typeof e.$ref){var l=i.getDocumentURI(e.$ref);if(a!==l||u&&e.$ref.indexOf("#/")>-1){var f=s(e.$ref,t);o(e,f),delete e.$ref,delete e.id}}for(var p in e)"object"!=typeof e[p]||n(p)?c[p]=e[p]:c[p]=r(e[p],t,a,u);return c}var i=e("./uri-helpers"),s=e("./find-reference"),o=e("deep-extend");t.exports=function(e,t,a){var n=i.resolveURL(e.$schema,e.id),s=i.getDocumentURI(n);return r(e,t,s,a)}},{"./find-reference":27,"./uri-helpers":30,"deep-extend":24}],30:[function(e,t,a){"use strict";function n(e,t){e=e.replace(/^\.\//,"");var a=String(e).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@]*)(?::([^:@]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);if(!a)throw new RangeError;var r=a[0]||"",i=a[1]||"",s=a[2]||"",o=a[3]||"",u=a[4]||"",c=a[5]||"",l=a[6]||"",f=a[7]||"",p=a[8]||"",m=a[9]||"";if(void 0!==t){var h=new n(t),d=""===i&&""===u&&""===s;d&&""===f&&""===p&&(p=h.search),d&&"/"!==f.charAt(0)&&(f=""!==f?h.pathname.slice(0,h.pathname.lastIndexOf("/")+1)+f:h.pathname);var g=[];f.replace(/\/?[^\/]+/g,function(e){"/.."===e?g.pop():g.push(e)}),f=g.join("")||"/",d&&(l=h.port,c=h.hostname,u=h.host,o=h.password,s=h.username),""===i&&(i=h.protocol),r=i+(""!==u?"//":"")+(""!==s?s+(""!==o?":"+o:"")+"@":"")+u+f+p+m}this.href=r,this.origin=i+(""!==u?"//"+u:""),this.protocol=i,this.username=s,this.password=o,this.host=u,this.hostname=c,this.port=l,this.pathname=f,this.search=p,this.hash=m}function r(e){return"string"==typeof e&&/^\w+:\/\//.test(e)?!0:void 0}function i(e,t){return new n(e,t)}function s(e,t){return e=e||"http://json-schema.org/schema#",t=i(t,e),e=i(e),e.hash&&!t.hash?t.href+e.hash:t.href}function o(e){return"string"==typeof e&&e.split("#")[0]}t.exports={isURL:r,parseURI:i,resolveURL:s,getDocumentURI:o}},{}],31:[function(e,t,a){function n(e,t){this.low=e,this.high=t,this.length=1+t-e}function r(e,t){return this instanceof r?(this.ranges=[],this.length=0,void 0!==e&&this.add(e,t),void 0):new r(e,t)}function i(e){e.length=e.ranges.reduce(function(e,t){return e+t.length},0)}n.prototype.overlaps=function(e){return!(this.highe.high)},n.prototype.touches=function(e){return!(this.high+1e.high)},n.prototype.add=function(e){return this.touches(e)&&new n(Math.min(this.low,e.low),Math.max(this.high,e.high))},n.prototype.subtract=function(e){return this.overlaps(e)?e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.high=this.ranges.length?null:this.ranges[t].low+e},r.prototype.toString=function(){return"[ "+this.ranges.join(", ")+" ]"},r.prototype.clone=function(){return new r(this)},t.exports=r},{}],32:[function(t,a,n){!function(t,a){"use strict";"function"==typeof e&&e.amd?e(["exports"],a):a("undefined"!=typeof n?n:t.esprima={})}(this,function(e){"use strict";function t(e,t){if(!e)throw new Error("ASSERT: "+t)}function a(e){return e>=48&&57>=e}function n(e){return"0123456789abcdefABCDEF".indexOf(e)>=0}function r(e){return"01234567".indexOf(e)>=0}function i(e){var t="0"!==e,a="01234567".indexOf(e);return wa>oa&&r(ia[oa])&&(t=!0,a=8*a+"01234567".indexOf(ia[oa++]),"0123".indexOf(e)>=0&&wa>oa&&r(ia[oa])&&(a=8*a+"01234567".indexOf(ia[oa++]))),{code:a,octal:t}}function s(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0}function o(e){return 10===e||13===e||8232===e||8233===e}function u(e){return 65536>e?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10))+String.fromCharCode(56320+(e-65536&1023))}function c(e){return 36===e||95===e||e>=65&&90>=e||e>=97&&122>=e||92===e||e>=128&&ra.NonAsciiIdentifierStart.test(u(e))}function l(e){return 36===e||95===e||e>=65&&90>=e||e>=97&&122>=e||e>=48&&57>=e||92===e||e>=128&&ra.NonAsciiIdentifierPart.test(u(e))}function f(e){switch(e){case"enum":case"export":case"import":case"super":return!0;default:return!1}}function p(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}}function m(e){return"eval"===e||"arguments"===e}function h(e){switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e||"let"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}}function d(e,a,n,r,i){var s;t("number"==typeof n,"Comment must have valid position"),ba.lastCommentStart=n,s={type:e,value:a},Ea.range&&(s.range=[n,r]),Ea.loc&&(s.loc=i),Ea.comments.push(s),Ea.attachComment&&(Ea.leadingComments.push(s),Ea.trailingComments.push(s)),Ea.tokenize&&(s.type=s.type+"Comment",Ea.delegate&&(s=Ea.delegate(s)),Ea.tokens.push(s))}function g(e){var t,a,n,r;for(t=oa-e,a={start:{line:ua,column:oa-ca-e}};wa>oa;)if(n=ia.charCodeAt(oa),++oa,o(n))return la=!0,Ea.comments&&(r=ia.slice(t+e,oa-1),a.end={line:ua,column:oa-ca-1},d("Line",r,t,oa-1,a)),13===n&&10===ia.charCodeAt(oa)&&++oa,++ua,void(ca=oa);Ea.comments&&(r=ia.slice(t+e,oa),a.end={line:ua,column:oa-ca},d("Line",r,t,oa,a))}function y(){var e,t,a,n;for(Ea.comments&&(e=oa-2,t={start:{line:ua,column:oa-ca-2}});wa>oa;)if(a=ia.charCodeAt(oa),o(a))13===a&&10===ia.charCodeAt(oa+1)&&++oa,la=!0,++ua,++oa,ca=oa;else if(42===a){if(47===ia.charCodeAt(oa+1))return++oa,++oa,void(Ea.comments&&(n=ia.slice(e+2,oa-2),t.end={line:ua,column:oa-ca},d("Block",n,e,oa,t)));++oa}else++oa;Ea.comments&&(t.end={line:ua,column:oa-ca},n=ia.slice(e+2,oa),d("Block",n,e,oa,t)),ae()}function w(){var e,t;for(la=!1,t=0===oa;wa>oa;)if(e=ia.charCodeAt(oa),s(e))++oa;else if(o(e))la=!0,++oa,13===e&&10===ia.charCodeAt(oa)&&++oa,++ua,ca=oa,t=!0;else if(47===e)if(e=ia.charCodeAt(oa+1),47===e)++oa,++oa,g(2),t=!0;else{if(42!==e)break;++oa,++oa,y()}else if(t&&45===e){if(45!==ia.charCodeAt(oa+1)||62!==ia.charCodeAt(oa+2))break;oa+=3,g(3)}else{if(60!==e)break;if("!--"!==ia.slice(oa+1,oa+4))break;++oa,++oa,++oa,++oa,g(4)}}function v(e){var t,a,r,i=0;for(a="u"===e?4:2,t=0;a>t;++t){if(!(wa>oa&&n(ia[oa])))return"";r=ia[oa++],i=16*i+"0123456789abcdef".indexOf(r.toLowerCase())}return String.fromCharCode(i)}function b(){var e,t;for(e=ia[oa],t=0,"}"===e&&te();wa>oa&&(e=ia[oa++],n(e));)t=16*t+"0123456789abcdef".indexOf(e.toLowerCase());return(t>1114111||"}"!==e)&&te(),u(t)}function E(e){var t,a,n;return t=ia.charCodeAt(e),t>=55296&&56319>=t&&(n=ia.charCodeAt(e+1),n>=56320&&57343>=n&&(a=t,t=1024*(a-55296)+n-56320+65536)),t}function A(){var e,t,a;for(e=E(oa),a=u(e),oa+=a.length,92===e&&(117!==ia.charCodeAt(oa)&&te(),++oa,"{"===ia[oa]?(++oa,t=b()):(t=v("u"),e=t.charCodeAt(0),t&&"\\"!==t&&c(e)||te()),a=t);wa>oa&&(e=E(oa),l(e));)t=u(e),a+=t,oa+=t.length,92===e&&(a=a.substr(0,a.length-1),117!==ia.charCodeAt(oa)&&te(),++oa,"{"===ia[oa]?(++oa,t=b()):(t=v("u"),e=t.charCodeAt(0),t&&"\\"!==t&&l(e)||te()),a+=t);return a}function D(){var e,t;for(e=oa++;wa>oa;){if(t=ia.charCodeAt(oa),92===t)return oa=e,A();if(t>=55296&&57343>t)return oa=e,A();if(!l(t))break;++oa}return ia.slice(e,oa)}function j(){var e,t,a;return e=oa,t=92===ia.charCodeAt(oa)?A():D(),a=1===t.length?Xt.Identifier:h(t)?Xt.Keyword:"null"===t?Xt.NullLiteral:"true"===t||"false"===t?Xt.BooleanLiteral:Xt.Identifier,{type:a,value:t,lineNumber:ua,lineStart:ca,start:e,end:oa}}function x(){var e,t;switch(e={type:Xt.Punctuator,value:"",lineNumber:ua,lineStart:ca,start:oa,end:oa},t=ia[oa]){case"(":Ea.tokenize&&(Ea.openParenToken=Ea.tokenValues.length),++oa;break;case"{":Ea.tokenize&&(Ea.openCurlyToken=Ea.tokenValues.length),ba.curlyStack.push("{"),++oa;break;case".":++oa,"."===ia[oa]&&"."===ia[oa+1]&&(oa+=2,t="...");break;case"}":++oa,ba.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++oa;break;default:t=ia.substr(oa,4),">>>="===t?oa+=4:(t=t.substr(0,3),"==="===t||"!=="===t||">>>"===t||"<<="===t||">>="===t?oa+=3:(t=t.substr(0,2),"&&"===t||"||"===t||"=="===t||"!="===t||"+="===t||"-="===t||"*="===t||"/="===t||"++"===t||"--"===t||"<<"===t||">>"===t||"&="===t||"|="===t||"^="===t||"%="===t||"<="===t||">="===t||"=>"===t?oa+=2:(t=ia[oa],"<>=!+-*%&|^/".indexOf(t)>=0&&++oa)))}return oa===e.start&&te(),e.end=oa,e.value=t,e}function C(e){for(var t="";wa>oa&&n(ia[oa]);)t+=ia[oa++];return 0===t.length&&te(),c(ia.charCodeAt(oa))&&te(),{type:Xt.NumericLiteral,value:parseInt("0x"+t,16),lineNumber:ua,lineStart:ca,start:e,end:oa}}function _(e){var t,n;for(n="";wa>oa&&(t=ia[oa],"0"===t||"1"===t);)n+=ia[oa++];return 0===n.length&&te(),wa>oa&&(t=ia.charCodeAt(oa),(c(t)||a(t))&&te()),{type:Xt.NumericLiteral,value:parseInt(n,2),lineNumber:ua,lineStart:ca,start:e,end:oa}}function S(e,t){var n,i;for(r(e)?(i=!0,n="0"+ia[oa++]):(i=!1,++oa,n="");wa>oa&&r(ia[oa]);)n+=ia[oa++];return i||0!==n.length||te(),(c(ia.charCodeAt(oa))||a(ia.charCodeAt(oa)))&&te(),{type:Xt.NumericLiteral,value:parseInt(n,8),octal:i,lineNumber:ua,lineStart:ca,start:t,end:oa}}function z(){var e,t;for(e=oa+1;wa>e;++e){if(t=ia[e],"8"===t||"9"===t)return!1;if(!r(t))return!0}return!0}function F(){var e,n,i;if(i=ia[oa],t(a(i.charCodeAt(0))||"."===i,"Numeric literal must start with a decimal digit or a decimal point"),n=oa,e="","."!==i){if(e=ia[oa++],i=ia[oa],"0"===e){if("x"===i||"X"===i)return++oa,C(n);if("b"===i||"B"===i)return++oa,_(n);if("o"===i||"O"===i)return S(i,n);if(r(i)&&z())return S(i,n)}for(;a(ia.charCodeAt(oa));)e+=ia[oa++];i=ia[oa]}if("."===i){for(e+=ia[oa++];a(ia.charCodeAt(oa));)e+=ia[oa++];i=ia[oa]}if("e"===i||"E"===i)if(e+=ia[oa++],i=ia[oa],("+"===i||"-"===i)&&(e+=ia[oa++]),a(ia.charCodeAt(oa)))for(;a(ia.charCodeAt(oa));)e+=ia[oa++];else te();return c(ia.charCodeAt(oa))&&te(),{type:Xt.NumericLiteral,value:parseFloat(e),lineNumber:ua,lineStart:ca,start:n,end:oa}}function k(){var e,a,n,s,u,c="",l=!1;for(e=ia[oa],t("'"===e||'"'===e,"String literal must starts with a quote"),a=oa,++oa;wa>oa;){if(n=ia[oa++],n===e){e="";break}if("\\"===n)if(n=ia[oa++],n&&o(n.charCodeAt(0)))++ua,"\r"===n&&"\n"===ia[oa]&&++oa,ca=oa;else switch(n){case"u":case"x":if("{"===ia[oa])++oa,c+=b();else{if(s=v(n),!s)throw te();c+=s}break;case"n":c+="\n";break;case"r":c+="\r";break;case"t":c+=" ";break;case"b":c+="\b"; -break;case"f":c+="\f";break;case"v":c+="\x0B";break;case"8":case"9":c+=n,ae();break;default:r(n)?(u=i(n),l=u.octal||l,c+=String.fromCharCode(u.code)):c+=n}else{if(o(n.charCodeAt(0)))break;c+=n}}return""!==e&&te(),{type:Xt.StringLiteral,value:c,octal:l,lineNumber:da,lineStart:ga,start:a,end:oa}}function I(){var e,t,n,i,s,u,c,l,f="";for(i=!1,u=!1,t=oa,s="`"===ia[oa],n=2,++oa;wa>oa;){if(e=ia[oa++],"`"===e){n=1,u=!0,i=!0;break}if("$"===e){if("{"===ia[oa]){ba.curlyStack.push("${"),++oa,i=!0;break}f+=e}else if("\\"===e)if(e=ia[oa++],o(e.charCodeAt(0)))++ua,"\r"===e&&"\n"===ia[oa]&&++oa,ca=oa;else switch(e){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+=" ";break;case"u":case"x":"{"===ia[oa]?(++oa,f+=b()):(c=oa,l=v(e),l?f+=l:(oa=c,f+=e));break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+="\x0B";break;default:"0"===e?(a(ia.charCodeAt(oa))&&X(na.TemplateOctalLiteral),f+="\x00"):r(e)?X(na.TemplateOctalLiteral):f+=e}else o(e.charCodeAt(0))?(++ua,"\r"===e&&"\n"===ia[oa]&&++oa,ca=oa,f+="\n"):f+=e}return i||te(),s||ba.curlyStack.pop(),{type:Xt.Template,value:{cooked:f,raw:ia.slice(t+1,oa-n)},head:s,tail:u,lineNumber:ua,lineStart:ca,start:t,end:oa}}function R(e,t){var a="￿",n=e;t.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,function(e,t,n){var r=parseInt(t||n,16);return r>1114111&&te(null,na.InvalidRegExp),65535>=r?String.fromCharCode(r):a}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,a));try{RegExp(n)}catch(r){te(null,na.InvalidRegExp)}try{return new RegExp(e,t)}catch(i){return null}}function M(){var e,a,n,r,i;for(e=ia[oa],t("/"===e,"Regular expression literal must start with a slash"),a=ia[oa++],n=!1,r=!1;wa>oa;)if(e=ia[oa++],a+=e,"\\"===e)e=ia[oa++],o(e.charCodeAt(0))&&te(null,na.UnterminatedRegExp),a+=e;else if(o(e.charCodeAt(0)))te(null,na.UnterminatedRegExp);else if(n)"]"===e&&(n=!1);else{if("/"===e){r=!0;break}"["===e&&(n=!0)}return r||te(null,na.UnterminatedRegExp),i=a.substr(1,a.length-2),{value:i,literal:a}}function P(){var e,t,a,n;for(t="",a="";wa>oa&&(e=ia[oa],l(e.charCodeAt(0)));)if(++oa,"\\"===e&&wa>oa)if(e=ia[oa],"u"===e){if(++oa,n=oa,e=v("u"))for(a+=e,t+="\\u";oa>n;++n)t+=ia[n];else oa=n,a+="u",t+="\\u";ae()}else t+="\\",ae();else a+=e,t+=e;return{value:a,literal:t}}function O(){var e,t,a,n;return ya=!0,va=null,w(),e=oa,t=M(),a=P(),n=R(t.value,a.value),ya=!1,Ea.tokenize?{type:Xt.RegularExpression,value:n,regex:{pattern:t.value,flags:a.value},lineNumber:ua,lineStart:ca,start:e,end:oa}:{literal:t.literal+a.literal,value:n,regex:{pattern:t.value,flags:a.value},start:e,end:oa}}function B(){var e,t,a,n;return w(),e=oa,t={start:{line:ua,column:oa-ca}},a=O(),t.end={line:ua,column:oa-ca},Ea.tokenize||(Ea.tokens.length>0&&(n=Ea.tokens[Ea.tokens.length-1],n.range[0]===e&&"Punctuator"===n.type&&("/"===n.value||"/="===n.value)&&Ea.tokens.pop()),Ea.tokens.push({type:"RegularExpression",value:a.literal,regex:a.regex,range:[e,oa],loc:t})),a}function T(e){return e.type===Xt.Identifier||e.type===Xt.Keyword||e.type===Xt.BooleanLiteral||e.type===Xt.NullLiteral}function L(){function e(e){return e&&e.length>1&&e[0]>="a"&&e[0]<="z"}var t,a,n;switch(a=Ea.tokenValues[Ea.tokens.length-1],t=null!==a,a){case"this":case"]":t=!1;break;case")":n=Ea.tokenValues[Ea.openParenToken-1],t="if"===n||"while"===n||"for"===n||"with"===n;break;case"}":t=!1,e(Ea.tokenValues[Ea.openCurlyToken-3])?(n=Ea.tokenValues[Ea.openCurlyToken-4],t=n?ea.indexOf(n)<0:!1):e(Ea.tokenValues[Ea.openCurlyToken-4])&&(n=Ea.tokenValues[Ea.openCurlyToken-5],t=n?ea.indexOf(n)<0:!0)}return t?B():x()}function N(){var e,t;return oa>=wa?{type:Xt.EOF,lineNumber:ua,lineStart:ca,start:oa,end:oa}:(e=ia.charCodeAt(oa),c(e)?(t=j(),sa&&p(t.value)&&(t.type=Xt.Keyword),t):40===e||41===e||59===e?x():39===e||34===e?k():46===e?a(ia.charCodeAt(oa+1))?F():x():a(e)?F():Ea.tokenize&&47===e?L():96===e||125===e&&"${"===ba.curlyStack[ba.curlyStack.length-1]?I():e>=55296&&57343>e&&(e=E(oa),c(e))?j():x())}function U(){var e,t,a,n;return e={start:{line:ua,column:oa-ca}},t=N(),e.end={line:ua,column:oa-ca},t.type!==Xt.EOF&&(a=ia.slice(t.start,t.end),n={type:Qt[t.type],value:a,range:[t.start,t.end],loc:e},t.regex&&(n.regex={pattern:t.regex.pattern,flags:t.regex.flags}),Ea.tokenValues&&Ea.tokenValues.push("Punctuator"===n.type||"Keyword"===n.type?n.value:null),Ea.tokenize&&(Ea.range||delete n.range,Ea.loc||delete n.loc,Ea.delegate&&(n=Ea.delegate(n))),Ea.tokens.push(n)),t}function $(){var e;return ya=!0,fa=oa,pa=ua,ma=ca,w(),e=va,ha=oa,da=ua,ga=ca,va="undefined"!=typeof Ea.tokens?U():N(),ya=!1,e}function K(){ya=!0,w(),fa=oa,pa=ua,ma=ca,ha=oa,da=ua,ga=ca,va="undefined"!=typeof Ea.tokens?U():N(),ya=!1}function H(){this.line=da,this.column=ha-ga}function G(){this.start=new H,this.end=null}function J(e){this.start={line:e.lineNumber,column:e.start-e.lineStart},this.end=null}function q(){Ea.range&&(this.range=[ha,0]),Ea.loc&&(this.loc=new G)}function W(e){Ea.range&&(this.range=[e.start,0]),Ea.loc&&(this.loc=new J(e))}function V(e){var t,a;for(t=0;t>="===e||">>>="===e||"&="===e||"^="===e||"|="===e)}function le(){return 59===ia.charCodeAt(ha)||se(";")?void $():void(la||(fa=ha,pa=da,ma=ga,va.type===Xt.EOF||se("}")||te(va)))}function fe(e){var t,a=Aa,n=Da,r=ja;return Aa=!0,Da=!0,ja=null,t=e(),null!==ja&&te(ja),Aa=a,Da=n,ja=r,t}function pe(e){var t,a=Aa,n=Da,r=ja;return Aa=!0,Da=!0,ja=null,t=e(),Aa=Aa&&a,Da=Da&&n,ja=r||ja,t}function me(e,t){var a,n,r=new q,i=[];for(ne("[");!se("]");)if(se(","))$(),i.push(null);else{if(se("...")){n=new q,$(),e.push(va),a=Qe(t),i.push(n.finishRestElement(a));break}i.push(ye(e,t)),se("]")||ne(",")}return ne("]"),r.finishArrayPattern(i)}function he(e,t){var a,n,r,i=new q,s=se("[");if(va.type===Xt.Identifier){if(n=va,a=Qe(),se("="))return e.push(n),$(),r=We(),i.finishProperty("init",a,!1,new W(n).finishAssignmentPattern(a,r),!1,!1);if(!se(":"))return e.push(n),i.finishProperty("init",a,!1,a,!1,!0)}else a=Ee();return ne(":"),r=ye(e,t),i.finishProperty("init",a,s,r,!1,!1)}function de(e,t){var a=new q,n=[];for(ne("{");!se("}");)n.push(he(e,t)),se("}")||ne(",");return $(),a.finishObjectPattern(n)}function ge(e,t){return se("[")?me(e,t):se("{")?de(e,t):(oe("let")&&("const"===t||"let"===t)&&ae(va,na.UnexpectedToken),e.push(va),Qe(t))}function ye(e,t){var a,n,r,i=va;return a=ge(e,t),se("=")&&($(),n=ba.allowYield,ba.allowYield=!0,r=fe(We),ba.allowYield=n,a=new W(i).finishAssignmentPattern(a,r)),a}function we(){var e,t=[],a=new q;for(ne("[");!se("]");)se(",")?($(),t.push(null)):se("...")?(e=new q,$(),e.finishSpreadElement(pe(We)),se("]")||(Da=Aa=!1,ne(",")),t.push(e)):(t.push(pe(We)),se("]")||ne(","));return $(),a.finishArrayExpression(t)}function ve(e,t,a){var n,r;return Da=Aa=!1,n=sa,r=fe(_t),sa&&t.firstRestricted&&ae(t.firstRestricted,t.message),sa&&t.stricted&&ae(t.stricted,t.message),sa=n,e.finishFunctionExpression(null,t.params,t.defaults,r,a)}function be(){var e,t,a=new q,n=ba.allowYield;return ba.allowYield=!1,e=Ft(),ba.allowYield=n,ba.allowYield=!1,t=ve(a,e,!1),ba.allowYield=n,t}function Ee(){var e,t,a=new q;switch(e=$(),e.type){case Xt.StringLiteral:case Xt.NumericLiteral:return sa&&e.octal&&ae(e,na.StrictOctalLiteral),a.finishLiteral(e);case Xt.Identifier:case Xt.BooleanLiteral:case Xt.NullLiteral:case Xt.Keyword:return a.finishIdentifier(e.value);case Xt.Punctuator:if("["===e.value)return t=fe(We),ne("]"),t}te(e)}function Ae(){switch(va.type){case Xt.Identifier:case Xt.StringLiteral:case Xt.BooleanLiteral:case Xt.NullLiteral:case Xt.NumericLiteral:case Xt.Keyword:return!0;case Xt.Punctuator:return"["===va.value}return!1}function De(e,t,a,n){var r,i,s,o,u=ba.allowYield;if(e.type===Xt.Identifier){if("get"===e.value&&Ae())return a=se("["),t=Ee(),s=new q,ne("("),ne(")"),ba.allowYield=!1,r=ve(s,{params:[],defaults:[],stricted:null,firstRestricted:null,message:null},!1),ba.allowYield=u,n.finishProperty("get",t,a,r,!1,!1);if("set"===e.value&&Ae())return a=se("["),t=Ee(),s=new q,ne("("),i={params:[],defaultCount:0,defaults:[],firstRestricted:null,paramSet:{}},se(")")?ae(va):(ba.allowYield=!1,zt(i),ba.allowYield=u,0===i.defaultCount&&(i.defaults=[])),ne(")"),ba.allowYield=!1,r=ve(s,i,!1),ba.allowYield=u,n.finishProperty("set",t,a,r,!1,!1)}else if(e.type===Xt.Punctuator&&"*"===e.value&&Ae())return a=se("["),t=Ee(),s=new q,ba.allowYield=!0,o=Ft(),ba.allowYield=u,ba.allowYield=!1,r=ve(s,o,!0),ba.allowYield=u,n.finishProperty("init",t,a,r,!0,!1);return t&&se("(")?(r=be(),n.finishProperty("init",t,a,r,!0,!1)):null}function je(e){var t,a,n,r,i,s=va,o=new q;return t=se("["),se("*")?$():a=Ee(),(n=De(s,a,t,o))?n:(a||te(va),t||(r=a.type===ta.Identifier&&"__proto__"===a.name||a.type===ta.Literal&&"__proto__"===a.value,e.value&&r&&Q(na.DuplicateProtoProperty),e.value|=r),se(":")?($(),i=pe(We),o.finishProperty("init",a,t,i,!1,!1)):s.type===Xt.Identifier?se("=")?(ja=va,$(),i=fe(We),o.finishProperty("init",a,t,new W(s).finishAssignmentPattern(a,i),!1,!0)):o.finishProperty("init",a,t,a,!1,!0):void te(va))}function xe(){var e=[],t={value:!1},a=new q;for(ne("{");!se("}");)e.push(je(t)),se("}")||re();return ne("}"),a.finishObjectExpression(e)}function Ce(e){var t;switch(e.type){case ta.Identifier:case ta.MemberExpression:case ta.RestElement:case ta.AssignmentPattern:break;case ta.SpreadElement:e.type=ta.RestElement,Ce(e.argument);break;case ta.ArrayExpression:for(e.type=ta.ArrayPattern,t=0;t")||ne("=>"),{type:aa.ArrowParameterPlaceHolder,params:[],rawParams:[]};if(a=va,se("..."))return e=ct(r),ne(")"),se("=>")||ne("=>"),{type:aa.ArrowParameterPlaceHolder,params:[e]};if(Aa=!0,e=pe(We),se(",")){for(Da=!1,t=[e];wa>ha&&se(",");){if($(),se("...")){for(Aa||te(va),t.push(ct(r)),ne(")"),se("=>")||ne("=>"),Aa=!1,n=0;n")){if(e.type===ta.Identifier&&"yield"===e.name)return{type:aa.ArrowParameterPlaceHolder,params:[e]};if(Aa||te(va),e.type===ta.SequenceExpression)for(n=0;nha&&(se("...")?(e=new q,$(),e.finishSpreadElement(fe(We))):e=fe(We),t.push(e),!se(")"));)re();return ne(")"),t}function Ie(){var e,t=new q;return e=$(),T(e)||te(e),t.finishIdentifier(e.value)}function Re(){return ne("."),Ie()}function Me(){var e;return ne("["),e=fe(Ve),ne("]"),e}function Pe(){var e,t,a=new q;if(ie("new"),se(".")){if($(),va.type===Xt.Identifier&&"target"===va.value&&ba.inFunctionBody)return $(),a.finishMetaProperty("new","target");te(va)}return e=fe(Be),t=se("(")?ke():[],Da=Aa=!1,a.finishNewExpression(e,t)}function Oe(){var e,t,a,n,r,i=ba.allowIn;for(r=va,ba.allowIn=!0,oe("super")&&ba.inFunctionBody?(t=new q,$(),t=t.finishSuper(),se("(")||se(".")||se("[")||te(va)):t=pe(oe("new")?Pe:Fe);;)if(se("."))Aa=!1,Da=!0,n=Re(),t=new W(r).finishMemberExpression(".",t,n);else if(se("("))Aa=!1,Da=!1,a=ke(),t=new W(r).finishCallExpression(t,a);else if(se("["))Aa=!1,Da=!0,n=Me(),t=new W(r).finishMemberExpression("[",t,n);else{if(va.type!==Xt.Template||!va.head)break;e=Se(),t=new W(r).finishTaggedTemplateExpression(t,e)}return ba.allowIn=i,t}function Be(){var e,a,n,r;for(t(ba.allowIn,"callee of new expression always allow in keyword."),r=va,oe("super")&&ba.inFunctionBody?(a=new q,$(),a=a.finishSuper(),se("[")||se(".")||te(va)):a=pe(oe("new")?Pe:Fe);;)if(se("["))Aa=!1,Da=!0,n=Me(),a=new W(r).finishMemberExpression("[",a,n);else if(se("."))Aa=!1,Da=!0,n=Re(),a=new W(r).finishMemberExpression(".",a,n);else{if(va.type!==Xt.Template||!va.head)break;e=Se(),a=new W(r).finishTaggedTemplateExpression(a,e)}return a}function Te(){var e,t,a=va;return e=pe(Oe),la||va.type!==Xt.Punctuator||(se("++")||se("--"))&&(sa&&e.type===ta.Identifier&&m(e.name)&&Q(na.StrictLHSPostfix),Da||Q(na.InvalidLHSInAssignment),Da=Aa=!1,t=$(),e=new W(a).finishPostfixExpression(t.value,e)),e}function Le(){var e,t,a;return va.type!==Xt.Punctuator&&va.type!==Xt.Keyword?t=Te():se("++")||se("--")?(a=va,e=$(),t=pe(Le),sa&&t.type===ta.Identifier&&m(t.name)&&Q(na.StrictLHSPrefix),Da||Q(na.InvalidLHSInAssignment),t=new W(a).finishUnaryExpression(e.value,t),Da=Aa=!1):se("+")||se("-")||se("~")||se("!")?(a=va,e=$(),t=pe(Le),t=new W(a).finishUnaryExpression(e.value,t),Da=Aa=!1):oe("delete")||oe("void")||oe("typeof")?(a=va,e=$(),t=pe(Le),t=new W(a).finishUnaryExpression(e.value,t),sa&&"delete"===t.operator&&t.argument.type===ta.Identifier&&Q(na.StrictDelete),Da=Aa=!1):t=Te(),t}function Ne(e,t){var a=0;if(e.type!==Xt.Punctuator&&e.type!==Xt.Keyword)return 0;switch(e.value){case"||":a=1;break;case"&&":a=2;break;case"|":a=3;break;case"^":a=4;break;case"&":a=5;break;case"==":case"!=":case"===":case"!==":a=6;break;case"<":case">":case"<=":case">=":case"instanceof":a=7;break;case"in":a=t?7:0;break;case"<<":case">>":case">>>":a=8;break;case"+":case"-":a=9;break;case"*":case"/":case"%":a=11}return a}function Ue(){var e,t,a,n,r,i,s,o,u,c;if(e=va,u=pe(Le),n=va,r=Ne(n,ba.allowIn),0===r)return u;for(Da=Aa=!1,n.prec=r,$(),t=[e,va],s=fe(Le),i=[u,n,s];(r=Ne(va,ba.allowIn))>0;){for(;i.length>2&&r<=i[i.length-2].prec;)s=i.pop(),o=i.pop().value,u=i.pop(),t.pop(),a=new W(t[t.length-1]).finishBinaryExpression(o,u,s),i.push(a);n=$(),n.prec=r,i.push(n),t.push(va),a=fe(Le),i.push(a)}for(c=i.length-1,a=i[c],t.pop();c>1;)a=new W(t.pop()).finishBinaryExpression(i[c-1].value,i[c-2],a),c-=2;return a}function $e(){var e,t,a,n,r;return r=va,e=pe(Ue),se("?")&&($(),t=ba.allowIn,ba.allowIn=!0,a=fe(We),ba.allowIn=t,ne(":"),n=fe(We),e=new W(r).finishConditionalExpression(e,a,n),Da=Aa=!1),e}function Ke(){return se("{")?_t():fe(We)}function He(e,a){var n;switch(a.type){case ta.Identifier:St(e,a,a.name);break;case ta.RestElement:He(e,a.argument);break;case ta.AssignmentPattern:He(e,a.left);break;case ta.ArrayPattern:for(n=0;nt;t+=1)switch(n=r[t],n.type){case ta.AssignmentPattern:r[t]=n.left,n.right.type===ta.YieldExpression&&(n.right.argument&&te(va),n.right.type=ta.Identifier,n.right.name="yield",delete n.right.argument,delete n.right.delegate),i.push(n.right),++s,He(o,n.left);break;default:He(o,n),r[t]=n,i.push(null)}if(sa||!ba.allowYield)for(t=0,a=r.length;a>t;t+=1)n=r[t],n.type===ta.YieldExpression&&te(va);return o.message===na.StrictParamDupe&&(u=sa?o.stricted:o.firstRestricted,te(u,o.message)),0===s&&(i=[]),{params:r,defaults:i,stricted:o.stricted,firstRestricted:o.firstRestricted,message:o.message}}function Je(e,t){var a,n,r;return la&&ae(va),ne("=>"),a=sa,n=ba.allowYield,ba.allowYield=!0,r=Ke(),sa&&e.firstRestricted&&te(e.firstRestricted,e.message),sa&&e.stricted&&ae(e.stricted,e.message),sa=a,ba.allowYield=n,t.finishArrowFunctionExpression(e.params,e.defaults,r,r.type!==ta.BlockStatement)}function qe(){var e,t,a,n;return e=null,t=new q,a=!1,ie("yield"),la||(n=ba.allowYield,ba.allowYield=!1,a=se("*"),a?($(),e=We()):se(";")||se("}")||se(")")||va.type===Xt.EOF||(e=We()),ba.allowYield=n),t.finishYieldExpression(e,a)}function We(){var e,t,a,n,r;return r=va,e=va,!ba.allowYield&&oe("yield")?qe():(t=$e(),t.type===aa.ArrowParameterPlaceHolder||se("=>")?(Da=Aa=!1,n=Ge(t),n?(ja=null,Je(n,new W(r))):t):(ce()&&(Da||Q(na.InvalidLHSInAssignment),sa&&t.type===ta.Identifier&&(m(t.name)&&ae(e,na.StrictLHSAssignment),p(t.name)&&ae(e,na.StrictReservedWord)),se("=")?Ce(t):Da=Aa=!1,e=$(),a=fe(We),t=new W(r).finishAssignmentExpression(e.value,t,a),ja=null),t))}function Ve(){var e,t,a=va;if(e=fe(We),se(",")){for(t=[e];wa>ha&&se(",");)$(),t.push(fe(We));e=new W(a).finishSequenceExpression(t)}return e}function Ye(){if(va.type===Xt.Keyword)switch(va.value){case"export":return"module"!==ba.sourceType&&ae(va,na.IllegalExportDeclaration),Ut();case"import":return"module"!==ba.sourceType&&ae(va,na.IllegalImportDeclaration),Jt();case"const":return ut({inFor:!1});case"function":return kt(new q);case"class":return Mt()}return oe("let")&&ot()?ut({inFor:!1}):Ct()}function Ze(){for(var e=[];wa>ha&&!se("}");)e.push(Ye());return e}function Xe(){var e,t=new q;return ne("{"),e=Ze(),ne("}"),t.finishBlockStatement(e)}function Qe(e){var t,a=new q;return t=$(),t.type===Xt.Keyword&&"yield"===t.value?(sa&&ae(t,na.StrictReservedWord),ba.allowYield||te(t)):t.type!==Xt.Identifier?sa&&t.type===Xt.Keyword&&p(t.value)?ae(t,na.StrictReservedWord):(sa||"let"!==t.value||"var"!==e)&&te(t):"module"===ba.sourceType&&t.type===Xt.Identifier&&"await"===t.value&&ae(t),a.finishIdentifier(t.value)}function et(e){var t,a=null,n=new q,r=[];return t=ge(r,"var"),sa&&m(t.name)&&Q(na.StrictVarName),se("=")?($(),a=fe(We)):t.type===ta.Identifier||e.inFor||ne("="),n.finishVariableDeclarator(t,a)}function tt(e){var t,a;for(t={inFor:e.inFor},a=[et(t)];se(",");)$(),a.push(et(t));return a}function at(e){var t;return ie("var"),t=tt({inFor:!1}),le(),e.finishVariableDeclaration(t)}function nt(e,t){var a,n=null,r=new q,i=[];return a=ge(i,e),sa&&a.type===ta.Identifier&&m(a.name)&&Q(na.StrictVarName),"const"===e?oe("in")||ue("of")||(ne("="),n=fe(We)):(!t.inFor&&a.type!==ta.Identifier||se("="))&&(ne("="),n=fe(We)),r.finishVariableDeclarator(a,n)}function rt(e,t){for(var a=[nt(e,t)];se(",");)$(),a.push(nt(e,t));return a}function it(){return{index:oa,lineNumber:ua,lineStart:ca,hasLineTerminator:la,lastIndex:fa,lastLineNumber:pa,lastLineStart:ma,startIndex:ha,startLineNumber:da,startLineStart:ga,lookahead:va,tokenCount:Ea.tokens?Ea.tokens.length:0}}function st(e){oa=e.index,ua=e.lineNumber,ca=e.lineStart,la=e.hasLineTerminator,fa=e.lastIndex,pa=e.lastLineNumber,ma=e.lastLineStart,ha=e.startIndex,da=e.startLineNumber,ga=e.startLineStart,va=e.lookahead,Ea.tokens&&Ea.tokens.splice(e.tokenCount,Ea.tokens.length)}function ot(){var e,t;return t=it(),$(),e=va.type===Xt.Identifier||se("[")||se("{")||oe("let")||oe("yield"),st(t),e}function ut(e){var a,n,r=new q;return a=$().value,t("let"===a||"const"===a,"Lexical declaration must be either let or const"),n=rt(a,e),le(),r.finishLexicalDeclaration(n,a)}function ct(e){var t,a=new q;return $(),se("{")&&X(na.ObjectPatternAsRestParameter),e.push(va),t=Qe(),se("=")&&X(na.DefaultRestParameter),se(")")||X(na.ParameterAfterRestParameter),a.finishRestElement(t)}function lt(e){return ne(";"),e.finishEmptyStatement()}function ft(e){var t=Ve();return le(),e.finishExpressionStatement(t)}function pt(e){var t,a,n;return ie("if"),ne("("),t=Ve(),ne(")"),a=Ct(),oe("else")?($(),n=Ct()):n=null,e.finishIfStatement(t,a,n)}function mt(e){var t,a,n;return ie("do"),n=ba.inIteration,ba.inIteration=!0,t=Ct(),ba.inIteration=n,ie("while"),ne("("),a=Ve(),ne(")"),se(";")&&$(),e.finishDoWhileStatement(t,a)}function ht(e){var t,a,n;return ie("while"),ne("("),t=Ve(),ne(")"),n=ba.inIteration,ba.inIteration=!0,a=Ct(),ba.inIteration=n,e.finishWhileStatement(t,a)}function dt(e){var t,a,n,r,i,s,o,u,c,l,f,p,m=ba.allowIn;if(t=i=s=null,a=!0,ie("for"),ne("("),se(";"))$();else if(oe("var"))t=new q,$(),ba.allowIn=!1,l=tt({inFor:!0}),ba.allowIn=m,1===l.length&&oe("in")?(t=t.finishVariableDeclaration(l),$(),o=t,u=Ve(),t=null):1===l.length&&null===l[0].init&&ue("of")?(t=t.finishVariableDeclaration(l),$(),o=t,u=We(),t=null,a=!1):(t=t.finishVariableDeclaration(l),ne(";"));else if(oe("const")||oe("let"))t=new q,c=$().value,sa||"in"!==va.value?(ba.allowIn=!1,l=rt(c,{inFor:!0}),ba.allowIn=m,1===l.length&&null===l[0].init&&oe("in")?(t=t.finishLexicalDeclaration(l,c),$(),o=t,u=Ve(),t=null):1===l.length&&null===l[0].init&&ue("of")?(t=t.finishLexicalDeclaration(l,c),$(),o=t,u=We(),t=null,a=!1):(le(),t=t.finishLexicalDeclaration(l,c))):(t=t.finishIdentifier(c),$(),o=t,u=Ve(),t=null);else if(r=va,ba.allowIn=!1,t=pe(We),ba.allowIn=m,oe("in"))Da||Q(na.InvalidLHSInForIn),$(),Ce(t),o=t,u=Ve(),t=null;else if(ue("of"))Da||Q(na.InvalidLHSInForLoop),$(),Ce(t),o=t,u=We(),t=null,a=!1;else{if(se(",")){for(n=[t];se(",");)$(),n.push(fe(We));t=new W(r).finishSequenceExpression(n)}ne(";")}return"undefined"==typeof o&&(se(";")||(i=Ve()),ne(";"),se(")")||(s=Ve())),ne(")"),p=ba.inIteration,ba.inIteration=!0,f=fe(Ct),ba.inIteration=p,"undefined"==typeof o?e.finishForStatement(t,i,s,f):a?e.finishForInStatement(o,u,f):e.finishForOfStatement(o,u,f)}function gt(e){var t,a=null;return ie("continue"),59===ia.charCodeAt(ha)?($(),ba.inIteration||X(na.IllegalContinue),e.finishContinueStatement(null)):la?(ba.inIteration||X(na.IllegalContinue),e.finishContinueStatement(null)):(va.type===Xt.Identifier&&(a=Qe(),t="$"+a.name,Object.prototype.hasOwnProperty.call(ba.labelSet,t)||X(na.UnknownLabel,a.name)),le(),null!==a||ba.inIteration||X(na.IllegalContinue),e.finishContinueStatement(a))}function yt(e){var t,a=null;return ie("break"),59===ia.charCodeAt(fa)?($(),ba.inIteration||ba.inSwitch||X(na.IllegalBreak),e.finishBreakStatement(null)):(la?ba.inIteration||ba.inSwitch||X(na.IllegalBreak):va.type===Xt.Identifier&&(a=Qe(),t="$"+a.name,Object.prototype.hasOwnProperty.call(ba.labelSet,t)||X(na.UnknownLabel,a.name)),le(),null!==a||ba.inIteration||ba.inSwitch||X(na.IllegalBreak),e.finishBreakStatement(a))}function wt(e){var t=null;return ie("return"),ba.inFunctionBody||Q(na.IllegalReturn),32===ia.charCodeAt(fa)&&c(ia.charCodeAt(fa+1))?(t=Ve(),le(),e.finishReturnStatement(t)):la?e.finishReturnStatement(null):(se(";")||se("}")||va.type===Xt.EOF||(t=Ve()),le(),e.finishReturnStatement(t))}function vt(e){var t,a;return sa&&Q(na.StrictModeWith),ie("with"),ne("("),t=Ve(),ne(")"),a=Ct(),e.finishWithStatement(t,a)}function bt(){var e,t,a=[],n=new q;for(oe("default")?($(),e=null):(ie("case"),e=Ve()),ne(":");wa>ha&&!(se("}")||oe("default")||oe("case"));)t=Ye(),a.push(t);return n.finishSwitchCase(e,a)}function Et(e){var t,a,n,r,i;if(ie("switch"),ne("("),t=Ve(),ne(")"),ne("{"),a=[],se("}"))return $(),e.finishSwitchStatement(t,a);for(r=ba.inSwitch,ba.inSwitch=!0,i=!1;wa>ha&&!se("}");)n=bt(),null===n.test&&(i&&X(na.MultipleDefaultsInSwitch),i=!0),a.push(n);return ba.inSwitch=r,ne("}"),e.finishSwitchStatement(t,a)}function At(e){var t;return ie("throw"),la&&X(na.NewlineAfterThrow),t=Ve(),le(),e.finishThrowStatement(t)}function Dt(){var e,t,a,n,r=[],i={},s=new q;for(ie("catch"),ne("("),se(")")&&te(va),e=ge(r),a=0;aha&&va.type===Xt.StringLiteral&&(t=va,e=Ye(),c.push(e),e.expression.type===ta.Literal);)a=ia.slice(t.start+1,t.end-1),"use strict"===a?(sa=!0,n&&ae(n,na.StrictOctalLiteral)):!n&&t.octal&&(n=t);for(r=ba.labelSet,i=ba.inIteration,s=ba.inSwitch,o=ba.inFunctionBody,u=ba.parenthesizedCount,ba.labelSet={},ba.inIteration=!1,ba.inSwitch=!1,ba.inFunctionBody=!0,ba.parenthesizedCount=0;wa>ha&&!se("}");)c.push(Ye());return ne("}"),ba.labelSet=r,ba.inIteration=i,ba.inSwitch=s,ba.inFunctionBody=o,ba.parenthesizedCount=u,l.finishBlockStatement(c)}function St(e,t,a){var n="$"+a;sa?(m(a)&&(e.stricted=t,e.message=na.StrictParamName),Object.prototype.hasOwnProperty.call(e.paramSet,n)&&(e.stricted=t,e.message=na.StrictParamDupe)):e.firstRestricted||(m(a)?(e.firstRestricted=t,e.message=na.StrictParamName):p(a)?(e.firstRestricted=t,e.message=na.StrictReservedWord):Object.prototype.hasOwnProperty.call(e.paramSet,n)&&(e.stricted=t,e.message=na.StrictParamDupe)),e.paramSet[n]=!0}function zt(e){var t,a,n,r,i=[];if(t=va,"..."===t.value)return a=ct(i),St(e,a.argument,a.argument.name),e.params.push(a),e.defaults.push(null),!1;for(a=ye(i),n=0;nha&&zt(t);)ne(",");return ne(")"),0===t.defaultCount&&(t.defaults=[]),{params:t.params,defaults:t.defaults,stricted:t.stricted,firstRestricted:t.firstRestricted,message:t.message}}function kt(e,t){var a,n,r,i,s,o,u,c,l,f=null,h=[],d=[];return l=ba.allowYield,ie("function"),c=se("*"),c&&$(),t&&se("(")||(n=va,f=Qe(),sa?m(n.value)&&ae(n,na.StrictFunctionName):m(n.value)?(s=n,o=na.StrictFunctionName):p(n.value)&&(s=n,o=na.StrictReservedWord)),ba.allowYield=!c,i=Ft(s),h=i.params,d=i.defaults,r=i.stricted,s=i.firstRestricted,i.message&&(o=i.message),u=sa,a=_t(),sa&&s&&te(s,o),sa&&r&&ae(r,o),sa=u,ba.allowYield=l,e.finishFunctionDeclaration(f,h,d,a,c)}function It(){var e,t,a,n,r,i,s,o,u,c=null,l=[],f=[],h=new q;return u=ba.allowYield,ie("function"),o=se("*"),o&&$(),ba.allowYield=!o,se("(")||(e=va,c=sa||o||!oe("yield")?Qe():Ie(),sa?m(e.value)&&ae(e,na.StrictFunctionName):m(e.value)?(a=e,n=na.StrictFunctionName):p(e.value)&&(a=e,n=na.StrictReservedWord)),r=Ft(a),l=r.params,f=r.defaults,t=r.stricted,a=r.firstRestricted,r.message&&(n=r.message),s=sa,i=_t(),sa&&a&&te(a,n),sa&&t&&ae(t,n),sa=s,ba.allowYield=u,h.finishFunctionExpression(c,l,f,i,o)}function Rt(){var e,t,a,n,r,i,s,o=!1;for(e=new q,ne("{"),n=[];!se("}");)se(";")?$():(r=new q,t=va,a=!1,i=se("["),se("*")?$():(s=Ee(),"static"===s.name&&(Ae()||se("*"))&&(t=va,a=!0,i=se("["),se("*")?$():s=Ee())),r=De(t,s,i,r),r?(r["static"]=a,"init"===r.kind&&(r.kind="method"),a?r.computed||"prototype"!==(r.key.name||r.key.value.toString())||te(t,na.StaticPrototype):r.computed||"constructor"!==(r.key.name||r.key.value.toString())||(("method"!==r.kind||!r.method||r.value.generator)&&te(t,na.ConstructorSpecialMethod),o?te(t,na.DuplicateConstructor):o=!0,r.kind="constructor"),r.type=ta.MethodDefinition,delete r.method,delete r.shorthand,n.push(r)):te(va));return $(),e.finishClassBody(n)}function Mt(e){var t,a=null,n=null,r=new q,i=sa;return sa=!0,ie("class"),e&&va.type!==Xt.Identifier||(a=Qe()),oe("extends")&&($(),n=fe(Oe)),t=Rt(),sa=i,r.finishClassDeclaration(a,n,t)}function Pt(){var e,t=null,a=null,n=new q,r=sa;return sa=!0,ie("class"),va.type===Xt.Identifier&&(t=Qe()),oe("extends")&&($(),a=fe(Oe)),e=Rt(),sa=r,n.finishClassExpression(t,a,e)}function Ot(){var e=new q;return va.type!==Xt.StringLiteral&&X(na.InvalidModuleSpecifier),e.finishLiteral($())}function Bt(){var e,t,a,n=new q;return oe("default")?(a=new q,$(),t=a.finishIdentifier("default")):t=Qe(),ue("as")&&($(),e=Ie()),n.finishExportSpecifier(t,e)}function Tt(e){var t,a=null,n=null,r=[];if(va.type===Xt.Keyword)switch(va.value){case"let":case"const":return a=ut({inFor:!1}),e.finishExportNamedDeclaration(a,r,null);case"var":case"class":case"function":return a=Ye(),e.finishExportNamedDeclaration(a,r,null)}for(ne("{");!se("}")&&(t=t||oe("default"),r.push(Bt()),se("}")||(ne(","),!se("}"))););return ne("}"),ue("from")?($(),n=Ot(),le()):t?X(va.value?na.UnexpectedToken:na.MissingFromClause,va.value):le(),e.finishExportNamedDeclaration(a,r,n)}function Lt(e){var t=null,a=null;return ie("default"),oe("function")?(t=kt(new q,!0),e.finishExportDefaultDeclaration(t)):oe("class")?(t=Mt(!0),e.finishExportDefaultDeclaration(t)):(ue("from")&&X(na.UnexpectedToken,va.value), -a=se("{")?xe():se("[")?we():We(),le(),e.finishExportDefaultDeclaration(a))}function Nt(e){var t;return ne("*"),ue("from")||X(va.value?na.UnexpectedToken:na.MissingFromClause,va.value),$(),t=Ot(),le(),e.finishExportAllDeclaration(t)}function Ut(){var e=new q;return ba.inFunctionBody&&X(na.IllegalExportDeclaration),ie("export"),oe("default")?Lt(e):se("*")?Nt(e):Tt(e)}function $t(){var e,t,a=new q;return t=Ie(),ue("as")&&($(),e=Qe()),a.finishImportSpecifier(e,t)}function Kt(){var e=[];for(ne("{");!se("}")&&(e.push($t()),se("}")||(ne(","),!se("}"))););return ne("}"),e}function Ht(){var e,t=new q;return e=Ie(),t.finishImportDefaultSpecifier(e)}function Gt(){var e,t=new q;return ne("*"),ue("as")||X(na.NoAsAfterImportNamespace),$(),e=Ie(),t.finishImportNamespaceSpecifier(e)}function Jt(){var e,t=[],a=new q;return ba.inFunctionBody&&X(na.IllegalImportDeclaration),ie("import"),va.type===Xt.StringLiteral?e=Ot():(se("{")?t=t.concat(Kt()):se("*")?t.push(Gt()):T(va)&&!oe("default")?(t.push(Ht()),se(",")&&($(),se("*")?t.push(Gt()):se("{")?t=t.concat(Kt()):te(va))):te($()),ue("from")||X(va.value?na.UnexpectedToken:na.MissingFromClause,va.value),$(),e=Ot()),le(),a.finishImportDeclaration(t,e)}function qt(){for(var e,t,a,n,r=[];wa>ha&&(t=va,t.type===Xt.StringLiteral)&&(e=Ye(),r.push(e),e.expression.type===ta.Literal);)a=ia.slice(t.start+1,t.end-1),"use strict"===a?(sa=!0,n&&ae(n,na.StrictOctalLiteral)):!n&&t.octal&&(n=t);for(;wa>ha&&(e=Ye(),"undefined"!=typeof e);)r.push(e);return r}function Wt(){var e,t;return K(),t=new q,e=qt(),t.finishProgram(e,ba.sourceType)}function Vt(){var e,t,a,n=[];for(e=0;e0?1:0,ca=0,ha=oa,da=ua,ga=ca,wa=ia.length,va=null,ba={allowIn:!0,allowYield:!0,labelSet:{},inFunctionBody:!1,inIteration:!1,inSwitch:!1,lastCommentStart:-1,curlyStack:[]},Ea={},t=t||{},t.tokens=!0,Ea.tokens=[],Ea.tokenValues=[],Ea.tokenize=!0,Ea.delegate=a,Ea.openParenToken=-1,Ea.openCurlyToken=-1,Ea.range="boolean"==typeof t.range&&t.range,Ea.loc="boolean"==typeof t.loc&&t.loc,"boolean"==typeof t.comment&&t.comment&&(Ea.comments=[]),"boolean"==typeof t.tolerant&&t.tolerant&&(Ea.errors=[]);try{if(K(),va.type===Xt.EOF)return Ea.tokens;for($();va.type!==Xt.EOF;)try{$()}catch(i){if(Ea.errors){V(i);break}throw i}r=Ea.tokens,"undefined"!=typeof Ea.errors&&(r.errors=Ea.errors)}catch(s){throw s}finally{Ea={}}return r}function Zt(e,t){var a,n;n=String,"string"==typeof e||e instanceof String||(e=n(e)),ia=e,oa=0,ua=ia.length>0?1:0,ca=0,ha=oa,da=ua,ga=ca,wa=ia.length,va=null,ba={allowIn:!0,allowYield:!0,labelSet:{},inFunctionBody:!1,inIteration:!1,inSwitch:!1,lastCommentStart:-1,curlyStack:[],sourceType:"script"},sa=!1,Ea={},"undefined"!=typeof t&&(Ea.range="boolean"==typeof t.range&&t.range,Ea.loc="boolean"==typeof t.loc&&t.loc,Ea.attachComment="boolean"==typeof t.attachComment&&t.attachComment,Ea.loc&&null!==t.source&&void 0!==t.source&&(Ea.source=n(t.source)),"boolean"==typeof t.tokens&&t.tokens&&(Ea.tokens=[]),"boolean"==typeof t.comment&&t.comment&&(Ea.comments=[]),"boolean"==typeof t.tolerant&&t.tolerant&&(Ea.errors=[]),Ea.attachComment&&(Ea.range=!0,Ea.comments=[],Ea.bottomRightStack=[],Ea.trailingComments=[],Ea.leadingComments=[]),"module"===t.sourceType&&(ba.sourceType=t.sourceType,sa=!0));try{a=Wt(),"undefined"!=typeof Ea.comments&&(a.comments=Ea.comments),"undefined"!=typeof Ea.tokens&&(Vt(),a.tokens=Ea.tokens),"undefined"!=typeof Ea.errors&&(a.errors=Ea.errors)}catch(r){throw r}finally{Ea={}}return a}var Xt,Qt,ea,ta,aa,na,ra,ia,sa,oa,ua,ca,la,fa,pa,ma,ha,da,ga,ya,wa,va,ba,Ea,Aa,Da,ja;Xt={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8,RegularExpression:9,Template:10},Qt={},Qt[Xt.BooleanLiteral]="Boolean",Qt[Xt.EOF]="",Qt[Xt.Identifier]="Identifier",Qt[Xt.Keyword]="Keyword",Qt[Xt.NullLiteral]="Null",Qt[Xt.NumericLiteral]="Numeric",Qt[Xt.Punctuator]="Punctuator",Qt[Xt.StringLiteral]="String",Qt[Xt.RegularExpression]="RegularExpression",Qt[Xt.Template]="Template",ea=["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="],ta={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"},aa={ArrowParameterPlaceHolder:"ArrowParameterPlaceHolder"},na={UnexpectedToken:"Unexpected token %0",UnexpectedNumber:"Unexpected number",UnexpectedString:"Unexpected string",UnexpectedIdentifier:"Unexpected identifier",UnexpectedReserved:"Unexpected reserved word",UnexpectedTemplate:"Unexpected quasi %0",UnexpectedEOS:"Unexpected end of input",NewlineAfterThrow:"Illegal newline after throw",InvalidRegExp:"Invalid regular expression",UnterminatedRegExp:"Invalid regular expression: missing /",InvalidLHSInAssignment:"Invalid left-hand side in assignment",InvalidLHSInForIn:"Invalid left-hand side in for-in",InvalidLHSInForLoop:"Invalid left-hand side in for-loop",MultipleDefaultsInSwitch:"More than one default clause in switch statement",NoCatchOrFinally:"Missing catch or finally after try",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared",IllegalContinue:"Illegal continue statement",IllegalBreak:"Illegal break statement",IllegalReturn:"Illegal return statement",StrictModeWith:"Strict mode code may not include a with statement",StrictCatchVariable:"Catch variable may not be eval or arguments in strict mode",StrictVarName:"Variable name may not be eval or arguments in strict mode",StrictParamName:"Parameter name eval or arguments is not allowed in strict mode",StrictParamDupe:"Strict mode function may not have duplicate parameter names",StrictFunctionName:"Function name may not be eval or arguments in strict mode",StrictOctalLiteral:"Octal literals are not allowed in strict mode.",StrictDelete:"Delete of an unqualified identifier in strict mode.",StrictLHSAssignment:"Assignment to eval or arguments is not allowed in strict mode",StrictLHSPostfix:"Postfix increment/decrement may not have eval or arguments operand in strict mode",StrictLHSPrefix:"Prefix increment/decrement may not have eval or arguments operand in strict mode",StrictReservedWord:"Use of future reserved word in strict mode",TemplateOctalLiteral:"Octal literals are not allowed in template strings.",ParameterAfterRestParameter:"Rest parameter must be last formal parameter",DefaultRestParameter:"Unexpected token =",ObjectPatternAsRestParameter:"Unexpected token {",DuplicateProtoProperty:"Duplicate __proto__ fields are not allowed in object literals",ConstructorSpecialMethod:"Class constructor may not be an accessor",DuplicateConstructor:"A class may only have one constructor",StaticPrototype:"Classes may not have static property named prototype",MissingFromClause:"Unexpected token",NoAsAfterImportNamespace:"Unexpected token",InvalidModuleSpecifier:"Unexpected token",IllegalImportDeclaration:"Unexpected token",IllegalExportDeclaration:"Unexpected token",DuplicateBinding:"Duplicate binding %0"},ra={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDE00-\uDE11\uDE13-\uDE2B\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDE00-\uDE2F\uDE44\uDE80-\uDEAA]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDD0-\uDDDA\uDE00-\uDE11\uDE13-\uDE37\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF01-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},W.prototype=q.prototype={processComment:function(){var e,t,a,n,r,i,s=Ea.bottomRightStack,o=s[s.length-1];if(!(this.type===ta.Program&&this.body.length>0)){if(this.type===ta.BlockStatement&&0===this.body.length){for(t=[],r=Ea.leadingComments.length-1;r>=0;--r)i=Ea.leadingComments[r],this.range[1]>=i.range[1]&&(t.unshift(i),Ea.leadingComments.splice(r,1),Ea.trailingComments.splice(r,1));if(t.length)return void(this.innerComments=t)}if(Ea.trailingComments.length>0){for(n=[],r=Ea.trailingComments.length-1;r>=0;--r)i=Ea.trailingComments[r],i.range[0]>=this.range[1]&&(n.unshift(i),Ea.trailingComments.splice(r,1));Ea.trailingComments=[]}else o&&o.trailingComments&&o.trailingComments[0].range[0]>=this.range[1]&&(n=o.trailingComments,delete o.trailingComments);for(;o&&o.range[0]>=this.range[0];)e=s.pop(),o=s[s.length-1];if(e){if(e.leadingComments){for(a=[],r=e.leadingComments.length-1;r>=0;--r)i=e.leadingComments[r],i.range[1]<=this.range[0]&&(a.unshift(i),e.leadingComments.splice(r,1));e.leadingComments.length||(e.leadingComments=void 0)}}else if(Ea.leadingComments.length>0)for(a=[],r=Ea.leadingComments.length-1;r>=0;--r)i=Ea.leadingComments[r],i.range[1]<=this.range[0]&&(a.unshift(i),Ea.leadingComments.splice(r,1));a&&a.length>0&&(this.leadingComments=a),n&&n.length>0&&(this.trailingComments=n),s.push(this)}},finish:function(){Ea.range&&(this.range[1]=fa),Ea.loc&&(this.loc.end={line:pa,column:fa-ma},Ea.source&&(this.loc.source=Ea.source)),Ea.attachComment&&this.processComment()},finishArrayExpression:function(e){return this.type=ta.ArrayExpression,this.elements=e,this.finish(),this},finishArrayPattern:function(e){return this.type=ta.ArrayPattern,this.elements=e,this.finish(),this},finishArrowFunctionExpression:function(e,t,a,n){return this.type=ta.ArrowFunctionExpression,this.id=null,this.params=e,this.defaults=t,this.body=a,this.generator=!1,this.expression=n,this.finish(),this},finishAssignmentExpression:function(e,t,a){return this.type=ta.AssignmentExpression,this.operator=e,this.left=t,this.right=a,this.finish(),this},finishAssignmentPattern:function(e,t){return this.type=ta.AssignmentPattern,this.left=e,this.right=t,this.finish(),this},finishBinaryExpression:function(e,t,a){return this.type="||"===e||"&&"===e?ta.LogicalExpression:ta.BinaryExpression,this.operator=e,this.left=t,this.right=a,this.finish(),this},finishBlockStatement:function(e){return this.type=ta.BlockStatement,this.body=e,this.finish(),this},finishBreakStatement:function(e){return this.type=ta.BreakStatement,this.label=e,this.finish(),this},finishCallExpression:function(e,t){return this.type=ta.CallExpression,this.callee=e,this.arguments=t,this.finish(),this},finishCatchClause:function(e,t){return this.type=ta.CatchClause,this.param=e,this.body=t,this.finish(),this},finishClassBody:function(e){return this.type=ta.ClassBody,this.body=e,this.finish(),this},finishClassDeclaration:function(e,t,a){return this.type=ta.ClassDeclaration,this.id=e,this.superClass=t,this.body=a,this.finish(),this},finishClassExpression:function(e,t,a){return this.type=ta.ClassExpression,this.id=e,this.superClass=t,this.body=a,this.finish(),this},finishConditionalExpression:function(e,t,a){return this.type=ta.ConditionalExpression,this.test=e,this.consequent=t,this.alternate=a,this.finish(),this},finishContinueStatement:function(e){return this.type=ta.ContinueStatement,this.label=e,this.finish(),this},finishDebuggerStatement:function(){return this.type=ta.DebuggerStatement,this.finish(),this},finishDoWhileStatement:function(e,t){return this.type=ta.DoWhileStatement,this.body=e,this.test=t,this.finish(),this},finishEmptyStatement:function(){return this.type=ta.EmptyStatement,this.finish(),this},finishExpressionStatement:function(e){return this.type=ta.ExpressionStatement,this.expression=e,this.finish(),this},finishForStatement:function(e,t,a,n){return this.type=ta.ForStatement,this.init=e,this.test=t,this.update=a,this.body=n,this.finish(),this},finishForOfStatement:function(e,t,a){return this.type=ta.ForOfStatement,this.left=e,this.right=t,this.body=a,this.finish(),this},finishForInStatement:function(e,t,a){return this.type=ta.ForInStatement,this.left=e,this.right=t,this.body=a,this.each=!1,this.finish(),this},finishFunctionDeclaration:function(e,t,a,n,r){return this.type=ta.FunctionDeclaration,this.id=e,this.params=t,this.defaults=a,this.body=n,this.generator=r,this.expression=!1,this.finish(),this},finishFunctionExpression:function(e,t,a,n,r){return this.type=ta.FunctionExpression,this.id=e,this.params=t,this.defaults=a,this.body=n,this.generator=r,this.expression=!1,this.finish(),this},finishIdentifier:function(e){return this.type=ta.Identifier,this.name=e,this.finish(),this},finishIfStatement:function(e,t,a){return this.type=ta.IfStatement,this.test=e,this.consequent=t,this.alternate=a,this.finish(),this},finishLabeledStatement:function(e,t){return this.type=ta.LabeledStatement,this.label=e,this.body=t,this.finish(),this},finishLiteral:function(e){return this.type=ta.Literal,this.value=e.value,this.raw=ia.slice(e.start,e.end),e.regex&&(this.regex=e.regex),this.finish(),this},finishMemberExpression:function(e,t,a){return this.type=ta.MemberExpression,this.computed="["===e,this.object=t,this.property=a,this.finish(),this},finishMetaProperty:function(e,t){return this.type=ta.MetaProperty,this.meta=e,this.property=t,this.finish(),this},finishNewExpression:function(e,t){return this.type=ta.NewExpression,this.callee=e,this.arguments=t,this.finish(),this},finishObjectExpression:function(e){return this.type=ta.ObjectExpression,this.properties=e,this.finish(),this},finishObjectPattern:function(e){return this.type=ta.ObjectPattern,this.properties=e,this.finish(),this},finishPostfixExpression:function(e,t){return this.type=ta.UpdateExpression,this.operator=e,this.argument=t,this.prefix=!1,this.finish(),this},finishProgram:function(e,t){return this.type=ta.Program,this.body=e,this.sourceType=t,this.finish(),this},finishProperty:function(e,t,a,n,r,i){return this.type=ta.Property,this.key=t,this.computed=a,this.value=n,this.kind=e,this.method=r,this.shorthand=i,this.finish(),this},finishRestElement:function(e){return this.type=ta.RestElement,this.argument=e,this.finish(),this},finishReturnStatement:function(e){return this.type=ta.ReturnStatement,this.argument=e,this.finish(),this},finishSequenceExpression:function(e){return this.type=ta.SequenceExpression,this.expressions=e,this.finish(),this},finishSpreadElement:function(e){return this.type=ta.SpreadElement,this.argument=e,this.finish(),this},finishSwitchCase:function(e,t){return this.type=ta.SwitchCase,this.test=e,this.consequent=t,this.finish(),this},finishSuper:function(){return this.type=ta.Super,this.finish(),this},finishSwitchStatement:function(e,t){return this.type=ta.SwitchStatement,this.discriminant=e,this.cases=t,this.finish(),this},finishTaggedTemplateExpression:function(e,t){return this.type=ta.TaggedTemplateExpression,this.tag=e,this.quasi=t,this.finish(),this},finishTemplateElement:function(e,t){return this.type=ta.TemplateElement,this.value=e,this.tail=t,this.finish(),this},finishTemplateLiteral:function(e,t){return this.type=ta.TemplateLiteral,this.quasis=e,this.expressions=t,this.finish(),this},finishThisExpression:function(){return this.type=ta.ThisExpression,this.finish(),this},finishThrowStatement:function(e){return this.type=ta.ThrowStatement,this.argument=e,this.finish(),this},finishTryStatement:function(e,t,a){return this.type=ta.TryStatement,this.block=e,this.guardedHandlers=[],this.handlers=t?[t]:[],this.handler=t,this.finalizer=a,this.finish(),this},finishUnaryExpression:function(e,t){return this.type="++"===e||"--"===e?ta.UpdateExpression:ta.UnaryExpression,this.operator=e,this.argument=t,this.prefix=!0,this.finish(),this},finishVariableDeclaration:function(e){return this.type=ta.VariableDeclaration,this.declarations=e,this.kind="var",this.finish(),this},finishLexicalDeclaration:function(e,t){return this.type=ta.VariableDeclaration,this.declarations=e,this.kind=t,this.finish(),this},finishVariableDeclarator:function(e,t){return this.type=ta.VariableDeclarator,this.id=e,this.init=t,this.finish(),this},finishWhileStatement:function(e,t){return this.type=ta.WhileStatement,this.test=e,this.body=t,this.finish(),this},finishWithStatement:function(e,t){return this.type=ta.WithStatement, -this.object=e,this.body=t,this.finish(),this},finishExportSpecifier:function(e,t){return this.type=ta.ExportSpecifier,this.exported=t||e,this.local=e,this.finish(),this},finishImportDefaultSpecifier:function(e){return this.type=ta.ImportDefaultSpecifier,this.local=e,this.finish(),this},finishImportNamespaceSpecifier:function(e){return this.type=ta.ImportNamespaceSpecifier,this.local=e,this.finish(),this},finishExportNamedDeclaration:function(e,t,a){return this.type=ta.ExportNamedDeclaration,this.declaration=e,this.specifiers=t,this.source=a,this.finish(),this},finishExportDefaultDeclaration:function(e){return this.type=ta.ExportDefaultDeclaration,this.declaration=e,this.finish(),this},finishExportAllDeclaration:function(e){return this.type=ta.ExportAllDeclaration,this.source=e,this.finish(),this},finishImportSpecifier:function(e,t){return this.type=ta.ImportSpecifier,this.local=e||t,this.imported=t,this.finish(),this},finishImportDeclaration:function(e,t){return this.type=ta.ImportDeclaration,this.specifiers=e,this.source=t,this.finish(),this},finishYieldExpression:function(e,t){return this.type=ta.YieldExpression,this.argument=e,this.delegate=t,this.finish(),this}},e.version="2.7.1",e.tokenize=Yt,e.parse=Zt,e.Syntax=function(){var e,t={};"function"==typeof Object.create&&(t=Object.create(null));for(e in ta)ta.hasOwnProperty(e)&&(t[e]=ta[e]);return"function"==typeof Object.freeze&&Object.freeze(t),t}()})},{}],33:[function(e,t,a){function n(e){var t=e.fake,a=e.helpers;return this.zipCode=function(t){if("undefined"==typeof t){var n=e.definitions.address.postcode;t="string"==typeof n?n:e.random.arrayElement(n)}return a.replaceSymbols(t)},this.city=function(a){var n=["{{address.cityPrefix}} {{name.firstName}} {{address.citySuffix}}","{{address.cityPrefix}} {{name.firstName}}","{{name.firstName}} {{address.citySuffix}}","{{name.lastName}} {{address.citySuffix}}"];return"number"!=typeof a&&(a=e.random.number(n.length-1)),t(n[a])},this.cityPrefix=function(){return e.random.arrayElement(e.definitions.address.city_prefix)},this.citySuffix=function(){return e.random.arrayElement(e.definitions.address.city_suffix)},this.streetName=function(){var t,a=e.address.streetSuffix();switch(""!==a&&(a=" "+a),e.random.number(1)){case 0:t=e.name.lastName()+a;break;case 1:t=e.name.firstName()+a}return t},this.streetAddress=function(t){void 0===t&&(t=!1);var n="";switch(e.random.number(2)){case 0:n=a.replaceSymbolWithNumber("#####")+" "+e.address.streetName();break;case 1:n=a.replaceSymbolWithNumber("####")+" "+e.address.streetName();break;case 2:n=a.replaceSymbolWithNumber("###")+" "+e.address.streetName()}return t?n+" "+e.address.secondaryAddress():n},this.streetSuffix=function(){return e.random.arrayElement(e.definitions.address.street_suffix)},this.streetPrefix=function(){return e.random.arrayElement(e.definitions.address.street_prefix)},this.secondaryAddress=function(){return a.replaceSymbolWithNumber(e.random.arrayElement(["Apt. ###","Suite ###"]))},this.county=function(){return e.random.arrayElement(e.definitions.address.county)},this.country=function(){return e.random.arrayElement(e.definitions.address.country)},this.countryCode=function(){return e.random.arrayElement(e.definitions.address.country_code)},this.state=function(t){return e.random.arrayElement(e.definitions.address.state)},this.stateAbbr=function(){return e.random.arrayElement(e.definitions.address.state_abbr)},this.latitude=function(){return(e.random.number(18e5)/1e4-90).toFixed(4)},this.longitude=function(){return(e.random.number(36e5)/1e4-180).toFixed(4)},this}t.exports=n},{}],34:[function(e,t,a){var n=function(e){var t=this;return t.color=function(){return e.random.arrayElement(e.definitions.commerce.color)},t.department=function(t,a){return e.random.arrayElement(e.definitions.commerce.department)},t.productName=function(){return e.commerce.productAdjective()+" "+e.commerce.productMaterial()+" "+e.commerce.product()},t.price=function(e,t,a,n){return e=e||0,t=t||1e3,a=a||2,n=n||"",0>e||0>t?n+0:n+(Math.round((Math.random()*(t-e)+e)*Math.pow(10,a))/Math.pow(10,a)).toFixed(a)},t.productAdjective=function(){return e.random.arrayElement(e.definitions.commerce.product_name.adjective)},t.productMaterial=function(){return e.random.arrayElement(e.definitions.commerce.product_name.material)},t.product=function(){return e.random.arrayElement(e.definitions.commerce.product_name.product)},t};t.exports=n},{}],35:[function(e,t,a){var n=function(e){var t=e.fake;this.suffixes=function(){return e.definitions.company.suffix.slice(0)},this.companyName=function(a){var n=["{{name.lastName}} {{company.companySuffix}}","{{name.lastName}} - {{name.lastName}}","{{name.lastName}}, {{name.lastName}} and {{name.lastName}}"];return"number"!=typeof a&&(a=e.random.number(n.length-1)),t(n[a])},this.companySuffix=function(){return e.random.arrayElement(e.company.suffixes())},this.catchPhrase=function(){return t("{{company.catchPhraseAdjective}} {{company.catchPhraseDescriptor}} {{company.catchPhraseNoun}}")},this.bs=function(){return t("{{company.bsAdjective}} {{company.bsBuzz}} {{company.bsNoun}}")},this.catchPhraseAdjective=function(){return e.random.arrayElement(e.definitions.company.adjective)},this.catchPhraseDescriptor=function(){return e.random.arrayElement(e.definitions.company.descriptor)},this.catchPhraseNoun=function(){return e.random.arrayElement(e.definitions.company.noun)},this.bsAdjective=function(){return e.random.arrayElement(e.definitions.company.bs_adjective)},this.bsBuzz=function(){return e.random.arrayElement(e.definitions.company.bs_verb)},this.bsNoun=function(){return e.random.arrayElement(e.definitions.company.bs_noun)}};t.exports=n},{}],36:[function(e,t,a){var n=function(e){var t=this;return t.past=function(t,a){var n=a?new Date(Date.parse(a)):new Date,r={min:1e3,max:365*(t||1)*24*3600*1e3},i=n.getTime();return i-=e.random.number(r),n.setTime(i),n},t.future=function(t,a){var n=a?new Date(Date.parse(a)):new Date,r={min:1e3,max:365*(t||1)*24*3600*1e3},i=n.getTime();return i+=e.random.number(r),n.setTime(i),n},t.between=function(t,a){var n=Date.parse(t),r=e.random.number(Date.parse(a)-n),i=new Date(n+r);return i},t.recent=function(t){var a=new Date,n={min:1e3,max:24*(t||1)*3600*1e3},r=a.getTime();return r-=e.random.number(n),a.setTime(r),a},t.month=function(t){t=t||{};var a="wide";t.abbr&&(a="abbr"),t.context&&"undefined"!=typeof e.definitions.date.month[a+"_context"]&&(a+="_context");var n=e.definitions.date.month[a];return e.random.arrayElement(n)},t.weekday=function(t){t=t||{};var a="wide";t.abbr&&(a="abbr"),t.context&&"undefined"!=typeof e.definitions.date.weekday[a+"_context"]&&(a+="_context");var n=e.definitions.date.weekday[a];return e.random.arrayElement(n)},t};t.exports=n},{}],37:[function(e,t,a){function n(e){return this.fake=function t(a){var n="";if("string"!=typeof a||0===a.length)return n="string parameter is required!";var r=a.search("{{"),i=a.search("}}");if(-1===r&&-1===i)return a;var s=a.substr(r+2,i-r-2);s=s.replace("}}",""),s=s.replace("{{","");var o=s.split(".");if("undefined"==typeof e[o[0]])throw new Error("Invalid module: "+o[0]);if("undefined"==typeof e[o[0]][o[1]])throw new Error("Invalid method: "+o[0]+"."+o[1]);var u=e[o[0]][o[1]];return n=a.replace("{{"+s+"}}",u()),t(n)},this}t.exports=n},{}],38:[function(e,t,a){var n=function(e){var t=e.helpers,a=this;a.account=function(e){e=e||8;for(var a="",n=0;e>n;n++)a+="#";return e=null,t.replaceSymbolWithNumber(a)},a.accountName=function(){return[t.randomize(e.definitions.finance.account_type),"Account"].join(" ")},a.mask=function(e,a,n){e=0!=e&&e&&"undefined"!=typeof e?e:4,a=null===a?!0:a,n=null===n?!0:n;for(var r="",i=0;e>i;i++)r+="#";return r=n?["...",r].join(""):r,r=a?["(",r,")"].join(""):r,r=t.replaceSymbolWithNumber(r)},a.amount=function(e,t,a,n){return e=e||0,t=t||1e3,a=a||2,n=n||"",n+(Math.round((Math.random()*(t-e)+e)*Math.pow(10,a))/Math.pow(10,a)).toFixed(a)},a.transactionType=function(){return t.randomize(e.definitions.finance.transaction_type)},a.currencyCode=function(){return e.random.objectElement(e.definitions.finance.currency).code},a.currencyName=function(){return e.random.objectElement(e.definitions.finance.currency,"key")},a.currencySymbol=function(){for(var t;!t;)t=e.random.objectElement(e.definitions.finance.currency).symbol;return t}};t.exports=n},{}],39:[function(e,t,a){var n=function(e){var t=this;return t.abbreviation=function(){return e.random.arrayElement(e.definitions.hacker.abbreviation)},t.adjective=function(){return e.random.arrayElement(e.definitions.hacker.adjective)},t.noun=function(){return e.random.arrayElement(e.definitions.hacker.noun)},t.verb=function(){return e.random.arrayElement(e.definitions.hacker.verb)},t.ingverb=function(){return e.random.arrayElement(e.definitions.hacker.ingverb)},t.phrase=function(){var a={abbreviation:t.abbreviation(),adjective:t.adjective(),ingverb:t.ingverb(),noun:t.noun(),verb:t.verb()},n=e.random.arrayElement(["If we {{verb}} the {{noun}}, we can get to the {{abbreviation}} {{noun}} through the {{adjective}} {{abbreviation}} {{noun}}!","We need to {{verb}} the {{adjective}} {{abbreviation}} {{noun}}!","Try to {{verb}} the {{abbreviation}} {{noun}}, maybe it will {{verb}} the {{adjective}} {{noun}}!","You can't {{verb}} the {{noun}} without {{ingverb}} the {{adjective}} {{abbreviation}} {{noun}}!","Use the {{adjective}} {{abbreviation}} {{noun}}, then you can {{verb}} the {{adjective}} {{noun}}!","The {{abbreviation}} {{noun}} is down, {{verb}} the {{adjective}} {{noun}} so we can {{verb}} the {{abbreviation}} {{noun}}!","{{ingverb}} the {{noun}} won't do anything, we need to {{verb}} the {{adjective}} {{abbreviation}} {{noun}}!","I'll {{verb}} the {{adjective}} {{abbreviation}} {{noun}}, that should {{noun}} the {{abbreviation}} {{noun}}!"]);return e.helpers.mustache(n,a)},t};t.exports=n},{}],40:[function(e,t,a){var n=function(e){var t=this;return t.randomize=function(t){return t=t||["a","b","c"],e.random.arrayElement(t)},t.slugify=function(e){return e=e||"",e.replace(/ /g,"-").replace(/[^\w\.\-]+/g,"")},t.replaceSymbolWithNumber=function(t,a){t=t||"",void 0===a&&(a="#");for(var n="",r=0;r?|\"])/gi,"").toLowerCase()},t.ip=function(){for(var t=function(){return e.random.number(255).toFixed(0)},a=[],n=0;4>n;n++)a[n]=t();return a.join(".")},t.userAgent=function(){return r.generate()},t.color=function(t,a,n){t=t||0,a=a||0,n=n||0;var r=Math.floor((e.random.number(256)+t)/2),i=Math.floor((e.random.number(256)+a)/2),s=Math.floor((e.random.number(256)+n)/2),o=r.toString(16),u=i.toString(16),c=s.toString(16);return"#"+(1===o.length?"0":"")+o+(1===u.length?"0":"")+u+(1===c.length?"0":"")+c},t.mac=function(){var e,t="";for(e=0;12>e;e++)t+=parseInt(16*Math.random()).toString(16),e%2==1&&11!=e&&(t+=":");return t},t.password=function(e,t,a,r){return e=e||15,"undefined"==typeof t&&(t=!1),n(e,t,a,r)}};t.exports=i},{"../vendor/password-generator.js":135,"../vendor/user-agent":136}],44:[function(e,t,a){t.exports=["#####","####","###"]},{}],45:[function(e,t,a){t.exports=["#{city_prefix} #{Name.first_name}#{city_suffix}","#{city_prefix} #{Name.first_name}","#{Name.first_name}#{city_suffix}","#{Name.last_name}#{city_suffix}"]},{}],46:[function(e,t,a){t.exports=["North","East","West","South","New","Lake","Port"]},{}],47:[function(e,t,a){t.exports=["town","ton","land","ville","berg","burgh","borough","bury","view","port","mouth","stad","furt","chester","mouth","fort","haven","side","shire"]},{}],48:[function(e,t,a){t.exports=["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica (the territory South of 60 deg S)","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island (Bouvetoya)","Brazil","British Indian Ocean Territory (Chagos Archipelago)","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Congo","Cook Islands","Costa Rica","Cote d'Ivoire","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Faroe Islands","Falkland Islands (Malvinas)","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and McDonald Islands","Holy See (Vatican City State)","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Democratic People's Republic of Korea","Republic of Korea","Kuwait","Kyrgyz Republic","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands Antilles","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Barthelemy","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Martin","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Slovakia (Slovak Republic)","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname","Svalbard & Jan Mayen Islands","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Taiwan","Tajikistan","Tanzania","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States of America","United States Minor Outlying Islands","Uruguay","Uzbekistan","Vanuatu","Venezuela","Vietnam","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"]},{}],49:[function(e,t,a){t.exports=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"]},{}],50:[function(e,t,a){t.exports=["Avon","Bedfordshire","Berkshire","Borders","Buckinghamshire","Cambridgeshire"]},{}],51:[function(e,t,a){t.exports=["United States of America"]},{}],52:[function(e,t,a){var n={};t.exports=n,n.city_prefix=e("./city_prefix"),n.city_suffix=e("./city_suffix"),n.county=e("./county"),n.country=e("./country"),n.country_code=e("./country_code"),n.building_number=e("./building_number"),n.street_suffix=e("./street_suffix"),n.secondary_address=e("./secondary_address"),n.postcode=e("./postcode"),n.postcode_by_state=e("./postcode_by_state"),n.state=e("./state"),n.state_abbr=e("./state_abbr"),n.time_zone=e("./time_zone"),n.city=e("./city"),n.street_name=e("./street_name"),n.street_address=e("./street_address"),n.default_country=e("./default_country")},{"./building_number":44,"./city":45,"./city_prefix":46,"./city_suffix":47,"./country":48,"./country_code":49,"./county":50,"./default_country":51,"./postcode":53,"./postcode_by_state":54,"./secondary_address":55,"./state":56,"./state_abbr":57,"./street_address":58,"./street_name":59,"./street_suffix":60,"./time_zone":61}],53:[function(e,t,a){t.exports=["#####","#####-####"]},{}],54:[function(e,t,a){arguments[4][53][0].apply(a,arguments)},{dup:53}],55:[function(e,t,a){t.exports=["Apt. ###","Suite ###"]},{}],56:[function(e,t,a){t.exports=["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]},{}],57:[function(e,t,a){t.exports=["AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"]},{}],58:[function(e,t,a){t.exports=["#{building_number} #{street_name}"]},{}],59:[function(e,t,a){t.exports=["#{Name.first_name} #{street_suffix}","#{Name.last_name} #{street_suffix}"]},{}],60:[function(e,t,a){t.exports=["Alley","Avenue","Branch","Bridge","Brook","Brooks","Burg","Burgs","Bypass","Camp","Canyon","Cape","Causeway","Center","Centers","Circle","Circles","Cliff","Cliffs","Club","Common","Corner","Corners","Course","Court","Courts","Cove","Coves","Creek","Crescent","Crest","Crossing","Crossroad","Curve","Dale","Dam","Divide","Drive","Drive","Drives","Estate","Estates","Expressway","Extension","Extensions","Fall","Falls","Ferry","Field","Fields","Flat","Flats","Ford","Fords","Forest","Forge","Forges","Fork","Forks","Fort","Freeway","Garden","Gardens","Gateway","Glen","Glens","Green","Greens","Grove","Groves","Harbor","Harbors","Haven","Heights","Highway","Hill","Hills","Hollow","Inlet","Inlet","Island","Island","Islands","Islands","Isle","Isle","Junction","Junctions","Key","Keys","Knoll","Knolls","Lake","Lakes","Land","Landing","Lane","Light","Lights","Loaf","Lock","Locks","Locks","Lodge","Lodge","Loop","Mall","Manor","Manors","Meadow","Meadows","Mews","Mill","Mills","Mission","Mission","Motorway","Mount","Mountain","Mountain","Mountains","Mountains","Neck","Orchard","Oval","Overpass","Park","Parks","Parkway","Parkways","Pass","Passage","Path","Pike","Pine","Pines","Place","Plain","Plains","Plains","Plaza","Plaza","Point","Points","Port","Port","Ports","Ports","Prairie","Prairie","Radial","Ramp","Ranch","Rapid","Rapids","Rest","Ridge","Ridges","River","Road","Road","Roads","Roads","Route","Row","Rue","Run","Shoal","Shoals","Shore","Shores","Skyway","Spring","Springs","Springs","Spur","Spurs","Square","Square","Squares","Squares","Station","Station","Stravenue","Stravenue","Stream","Stream","Street","Street","Streets","Summit","Summit","Terrace","Throughway","Trace","Track","Trafficway","Trail","Trail","Tunnel","Tunnel","Turnpike","Turnpike","Underpass","Union","Unions","Valley","Valleys","Via","Viaduct","View","Views","Village","Village","Villages","Ville","Vista","Vista","Walk","Walks","Wall","Way","Ways","Well","Wells"]},{}],61:[function(e,t,a){t.exports=["Pacific/Midway","Pacific/Pago_Pago","Pacific/Honolulu","America/Juneau","America/Los_Angeles","America/Tijuana","America/Denver","America/Phoenix","America/Chihuahua","America/Mazatlan","America/Chicago","America/Regina","America/Mexico_City","America/Mexico_City","America/Monterrey","America/Guatemala","America/New_York","America/Indiana/Indianapolis","America/Bogota","America/Lima","America/Lima","America/Halifax","America/Caracas","America/La_Paz","America/Santiago","America/St_Johns","America/Sao_Paulo","America/Argentina/Buenos_Aires","America/Guyana","America/Godthab","Atlantic/South_Georgia","Atlantic/Azores","Atlantic/Cape_Verde","Europe/Dublin","Europe/London","Europe/Lisbon","Europe/London","Africa/Casablanca","Africa/Monrovia","Etc/UTC","Europe/Belgrade","Europe/Bratislava","Europe/Budapest","Europe/Ljubljana","Europe/Prague","Europe/Sarajevo","Europe/Skopje","Europe/Warsaw","Europe/Zagreb","Europe/Brussels","Europe/Copenhagen","Europe/Madrid","Europe/Paris","Europe/Amsterdam","Europe/Berlin","Europe/Berlin","Europe/Rome","Europe/Stockholm","Europe/Vienna","Africa/Algiers","Europe/Bucharest","Africa/Cairo","Europe/Helsinki","Europe/Kiev","Europe/Riga","Europe/Sofia","Europe/Tallinn","Europe/Vilnius","Europe/Athens","Europe/Istanbul","Europe/Minsk","Asia/Jerusalem","Africa/Harare","Africa/Johannesburg","Europe/Moscow","Europe/Moscow","Europe/Moscow","Asia/Kuwait","Asia/Riyadh","Africa/Nairobi","Asia/Baghdad","Asia/Tehran","Asia/Muscat","Asia/Muscat","Asia/Baku","Asia/Tbilisi","Asia/Yerevan","Asia/Kabul","Asia/Yekaterinburg","Asia/Karachi","Asia/Karachi","Asia/Tashkent","Asia/Kolkata","Asia/Kolkata","Asia/Kolkata","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Dhaka","Asia/Colombo","Asia/Almaty","Asia/Novosibirsk","Asia/Rangoon","Asia/Bangkok","Asia/Bangkok","Asia/Jakarta","Asia/Krasnoyarsk","Asia/Shanghai","Asia/Chongqing","Asia/Hong_Kong","Asia/Urumqi","Asia/Kuala_Lumpur","Asia/Singapore","Asia/Taipei","Australia/Perth","Asia/Irkutsk","Asia/Ulaanbaatar","Asia/Seoul","Asia/Tokyo","Asia/Tokyo","Asia/Tokyo","Asia/Yakutsk","Australia/Darwin","Australia/Adelaide","Australia/Melbourne","Australia/Melbourne","Australia/Sydney","Australia/Brisbane","Australia/Hobart","Asia/Vladivostok","Pacific/Guam","Pacific/Port_Moresby","Asia/Magadan","Asia/Magadan","Pacific/Noumea","Pacific/Fiji","Asia/Kamchatka","Pacific/Majuro","Pacific/Auckland","Pacific/Auckland","Pacific/Tongatapu","Pacific/Fakaofo","Pacific/Apia"]},{}],62:[function(e,t,a){t.exports=["#{Name.name}","#{Company.name}"]},{}],63:[function(e,t,a){var n={};t.exports=n,n.name=e("./name"),n.version=e("./version"),n.author=e("./author")},{"./author":62,"./name":64,"./version":65}],64:[function(e,t,a){t.exports=["Redhold","Treeflex","Trippledex","Kanlam","Bigtax","Daltfresh","Toughjoyfax","Mat Lam Tam","Otcom","Tres-Zap","Y-Solowarm","Tresom","Voltsillam","Biodex","Greenlam","Viva","Matsoft","Temp","Zoolab","Subin","Rank","Job","Stringtough","Tin","It","Home Ing","Zamit","Sonsing","Konklab","Alpha","Latlux","Voyatouch","Alphazap","Holdlamis","Zaam-Dox","Sub-Ex","Quo Lux","Bamity","Ventosanzap","Lotstring","Hatity","Tempsoft","Overhold","Fixflex","Konklux","Zontrax","Tampflex","Span","Namfix","Transcof","Stim","Fix San","Sonair","Stronghold","Fintone","Y-find","Opela","Lotlux","Ronstring","Zathin","Duobam","Keylex"]},{}],65:[function(e,t,a){t.exports=["0.#.#","0.##","#.##","#.#","#.#.#"]},{}],66:[function(e,t,a){t.exports=["2011-10-12","2012-11-12","2015-11-11","2013-9-12"]},{}],67:[function(e,t,a){t.exports=["1234-2121-1221-1211","1212-1221-1121-1234","1211-1221-1234-2201","1228-1221-1221-1431"]},{}],68:[function(e,t,a){t.exports=["visa","mastercard","americanexpress","discover"]},{}],69:[function(e,t,a){var n={};t.exports=n,n.credit_card_numbers=e("./credit_card_numbers"),n.credit_card_expiry_dates=e("./credit_card_expiry_dates"),n.credit_card_types=e("./credit_card_types")},{"./credit_card_expiry_dates":66,"./credit_card_numbers":67, -"./credit_card_types":68}],70:[function(e,t,a){t.exports=["###-###-####","(###) ###-####","1-###-###-####","###.###.####"]},{}],71:[function(e,t,a){var n={};t.exports=n,n.formats=e("./formats")},{"./formats":70}],72:[function(e,t,a){t.exports=["red","green","blue","yellow","purple","mint green","teal","white","black","orange","pink","grey","maroon","violet","turquoise","tan","sky blue","salmon","plum","orchid","olive","magenta","lime","ivory","indigo","gold","fuchsia","cyan","azure","lavender","silver"]},{}],73:[function(e,t,a){t.exports=["Books","Movies","Music","Games","Electronics","Computers","Home","Garden","Tools","Grocery","Health","Beauty","Toys","Kids","Baby","Clothing","Shoes","Jewelery","Sports","Outdoors","Automotive","Industrial"]},{}],74:[function(e,t,a){var n={};t.exports=n,n.color=e("./color"),n.department=e("./department"),n.product_name=e("./product_name")},{"./color":72,"./department":73,"./product_name":75}],75:[function(e,t,a){t.exports={adjective:["Small","Ergonomic","Rustic","Intelligent","Gorgeous","Incredible","Fantastic","Practical","Sleek","Awesome","Generic","Handcrafted","Handmade","Licensed","Refined","Unbranded","Tasty"],material:["Steel","Wooden","Concrete","Plastic","Cotton","Granite","Rubber","Metal","Soft","Fresh","Frozen"],product:["Chair","Car","Computer","Keyboard","Mouse","Bike","Ball","Gloves","Pants","Shirt","Table","Shoes","Hat","Towels","Soap","Tuna","Chicken","Fish","Cheese","Bacon","Pizza","Salad","Sausages","Chips"]}},{}],76:[function(e,t,a){t.exports=["Adaptive","Advanced","Ameliorated","Assimilated","Automated","Balanced","Business-focused","Centralized","Cloned","Compatible","Configurable","Cross-group","Cross-platform","Customer-focused","Customizable","Decentralized","De-engineered","Devolved","Digitized","Distributed","Diverse","Down-sized","Enhanced","Enterprise-wide","Ergonomic","Exclusive","Expanded","Extended","Face to face","Focused","Front-line","Fully-configurable","Function-based","Fundamental","Future-proofed","Grass-roots","Horizontal","Implemented","Innovative","Integrated","Intuitive","Inverse","Managed","Mandatory","Monitored","Multi-channelled","Multi-lateral","Multi-layered","Multi-tiered","Networked","Object-based","Open-architected","Open-source","Operative","Optimized","Optional","Organic","Organized","Persevering","Persistent","Phased","Polarised","Pre-emptive","Proactive","Profit-focused","Profound","Programmable","Progressive","Public-key","Quality-focused","Reactive","Realigned","Re-contextualized","Re-engineered","Reduced","Reverse-engineered","Right-sized","Robust","Seamless","Secured","Self-enabling","Sharable","Stand-alone","Streamlined","Switchable","Synchronised","Synergistic","Synergized","Team-oriented","Total","Triple-buffered","Universal","Up-sized","Upgradable","User-centric","User-friendly","Versatile","Virtual","Visionary","Vision-oriented"]},{}],77:[function(e,t,a){t.exports=["clicks-and-mortar","value-added","vertical","proactive","robust","revolutionary","scalable","leading-edge","innovative","intuitive","strategic","e-business","mission-critical","sticky","one-to-one","24/7","end-to-end","global","B2B","B2C","granular","frictionless","virtual","viral","dynamic","24/365","best-of-breed","killer","magnetic","bleeding-edge","web-enabled","interactive","dot-com","sexy","back-end","real-time","efficient","front-end","distributed","seamless","extensible","turn-key","world-class","open-source","cross-platform","cross-media","synergistic","bricks-and-clicks","out-of-the-box","enterprise","integrated","impactful","wireless","transparent","next-generation","cutting-edge","user-centric","visionary","customized","ubiquitous","plug-and-play","collaborative","compelling","holistic","rich"]},{}],78:[function(e,t,a){t.exports=["synergies","web-readiness","paradigms","markets","partnerships","infrastructures","platforms","initiatives","channels","eyeballs","communities","ROI","solutions","e-tailers","e-services","action-items","portals","niches","technologies","content","vortals","supply-chains","convergence","relationships","architectures","interfaces","e-markets","e-commerce","systems","bandwidth","infomediaries","models","mindshare","deliverables","users","schemas","networks","applications","metrics","e-business","functionalities","experiences","web services","methodologies"]},{}],79:[function(e,t,a){t.exports=["implement","utilize","integrate","streamline","optimize","evolve","transform","embrace","enable","orchestrate","leverage","reinvent","aggregate","architect","enhance","incentivize","morph","empower","envisioneer","monetize","harness","facilitate","seize","disintermediate","synergize","strategize","deploy","brand","grow","target","syndicate","synthesize","deliver","mesh","incubate","engage","maximize","benchmark","expedite","reintermediate","whiteboard","visualize","repurpose","innovate","scale","unleash","drive","extend","engineer","revolutionize","generate","exploit","transition","e-enable","iterate","cultivate","matrix","productize","redefine","recontextualize"]},{}],80:[function(e,t,a){t.exports=["24 hour","24/7","3rd generation","4th generation","5th generation","6th generation","actuating","analyzing","asymmetric","asynchronous","attitude-oriented","background","bandwidth-monitored","bi-directional","bifurcated","bottom-line","clear-thinking","client-driven","client-server","coherent","cohesive","composite","context-sensitive","contextually-based","content-based","dedicated","demand-driven","didactic","directional","discrete","disintermediate","dynamic","eco-centric","empowering","encompassing","even-keeled","executive","explicit","exuding","fault-tolerant","foreground","fresh-thinking","full-range","global","grid-enabled","heuristic","high-level","holistic","homogeneous","human-resource","hybrid","impactful","incremental","intangible","interactive","intermediate","leading edge","local","logistical","maximized","methodical","mission-critical","mobile","modular","motivating","multimedia","multi-state","multi-tasking","national","needs-based","neutral","next generation","non-volatile","object-oriented","optimal","optimizing","radical","real-time","reciprocal","regional","responsive","scalable","secondary","solution-oriented","stable","static","systematic","systemic","system-worthy","tangible","tertiary","transitional","uniform","upward-trending","user-facing","value-added","web-enabled","well-modulated","zero administration","zero defect","zero tolerance"]},{}],81:[function(e,t,a){var n={};t.exports=n,n.suffix=e("./suffix"),n.adjective=e("./adjective"),n.descriptor=e("./descriptor"),n.noun=e("./noun"),n.bs_verb=e("./bs_verb"),n.bs_adjective=e("./bs_adjective"),n.bs_noun=e("./bs_noun"),n.name=e("./name")},{"./adjective":76,"./bs_adjective":77,"./bs_noun":78,"./bs_verb":79,"./descriptor":80,"./name":82,"./noun":83,"./suffix":84}],82:[function(e,t,a){t.exports=["#{Name.last_name} #{suffix}","#{Name.last_name}-#{Name.last_name}","#{Name.last_name}, #{Name.last_name} and #{Name.last_name}"]},{}],83:[function(e,t,a){t.exports=["ability","access","adapter","algorithm","alliance","analyzer","application","approach","architecture","archive","artificial intelligence","array","attitude","benchmark","budgetary management","capability","capacity","challenge","circuit","collaboration","complexity","concept","conglomeration","contingency","core","customer loyalty","database","data-warehouse","definition","emulation","encoding","encryption","extranet","firmware","flexibility","focus group","forecast","frame","framework","function","functionalities","Graphic Interface","groupware","Graphical User Interface","hardware","help-desk","hierarchy","hub","implementation","info-mediaries","infrastructure","initiative","installation","instruction set","interface","internet solution","intranet","knowledge user","knowledge base","local area network","leverage","matrices","matrix","methodology","middleware","migration","model","moderator","monitoring","moratorium","neural-net","open architecture","open system","orchestration","paradigm","parallelism","policy","portal","pricing structure","process improvement","product","productivity","project","projection","protocol","secured line","service-desk","software","solution","standardization","strategy","structure","success","superstructure","support","synergy","system engine","task-force","throughput","time-frame","toolset","utilisation","website","workforce"]},{}],84:[function(e,t,a){t.exports=["Inc","and Sons","LLC","Group"]},{}],85:[function(e,t,a){t.exports=["/34##-######-####L/","/37##-######-####L/"]},{}],86:[function(e,t,a){t.exports=["/30[0-5]#-######-###L/","/368#-######-###L/"]},{}],87:[function(e,t,a){t.exports=["/6011-####-####-###L/","/65##-####-####-###L/","/64[4-9]#-####-####-###L/","/6011-62##-####-####-###L/","/65##-62##-####-####-###L/","/64[4-9]#-62##-####-####-###L/"]},{}],88:[function(e,t,a){var n={};t.exports=n,n.visa=e("./visa"),n.mastercard=e("./mastercard"),n.discover=e("./discover"),n.american_express=e("./american_express"),n.diners_club=e("./diners_club"),n.jcb=e("./jcb"),n["switch"]=e("./switch"),n.solo=e("./solo"),n.maestro=e("./maestro"),n.laser=e("./laser")},{"./american_express":85,"./diners_club":86,"./discover":87,"./jcb":89,"./laser":90,"./maestro":91,"./mastercard":92,"./solo":93,"./switch":94,"./visa":95}],89:[function(e,t,a){t.exports=["/3528-####-####-###L/","/3529-####-####-###L/","/35[3-8]#-####-####-###L/"]},{}],90:[function(e,t,a){t.exports=["/6304###########L/","/6706###########L/","/6771###########L/","/6709###########L/","/6304#########{5,6}L/","/6706#########{5,6}L/","/6771#########{5,6}L/","/6709#########{5,6}L/"]},{}],91:[function(e,t,a){t.exports=["/50#{9,16}L/","/5[6-8]#{9,16}L/","/56##{9,16}L/"]},{}],92:[function(e,t,a){t.exports=["/5[1-5]##-####-####-###L/","/6771-89##-####-###L/"]},{}],93:[function(e,t,a){t.exports=["/6767-####-####-###L/","/6767-####-####-####-#L/","/6767-####-####-####-##L/"]},{}],94:[function(e,t,a){t.exports=["/6759-####-####-###L/","/6759-####-####-####-#L/","/6759-####-####-####-##L/"]},{}],95:[function(e,t,a){t.exports=["/4###########L/","/4###-####-####-###L/"]},{}],96:[function(e,t,a){var n={};t.exports=n,n.month=e("./month"),n.weekday=e("./weekday")},{"./month":97,"./weekday":98}],97:[function(e,t,a){t.exports={wide:["January","February","March","April","May","June","July","August","September","October","November","December"],wide_context:["January","February","March","April","May","June","July","August","September","October","November","December"],abbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],abbr_context:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}},{}],98:[function(e,t,a){t.exports={wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],wide_context:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],abbr_context:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]}},{}],99:[function(e,t,a){t.exports=["Checking","Savings","Money Market","Investment","Home Loan","Credit Card","Auto Loan","Personal Loan"]},{}],100:[function(e,t,a){t.exports={"UAE Dirham":{code:"AED",symbol:""},Afghani:{code:"AFN",symbol:"؋"},Lek:{code:"ALL",symbol:"Lek"},"Armenian Dram":{code:"AMD",symbol:""},"Netherlands Antillian Guilder":{code:"ANG",symbol:"ƒ"},Kwanza:{code:"AOA",symbol:""},"Argentine Peso":{code:"ARS",symbol:"$"},"Australian Dollar":{code:"AUD",symbol:"$"},"Aruban Guilder":{code:"AWG",symbol:"ƒ"},"Azerbaijanian Manat":{code:"AZN",symbol:"ман"},"Convertible Marks":{code:"BAM",symbol:"KM"},"Barbados Dollar":{code:"BBD",symbol:"$"},Taka:{code:"BDT",symbol:""},"Bulgarian Lev":{code:"BGN",symbol:"лв"},"Bahraini Dinar":{code:"BHD",symbol:""},"Burundi Franc":{code:"BIF",symbol:""},"Bermudian Dollar (customarily known as Bermuda Dollar)":{code:"BMD",symbol:"$"},"Brunei Dollar":{code:"BND",symbol:"$"},"Boliviano Mvdol":{code:"BOB BOV",symbol:"$b"},"Brazilian Real":{code:"BRL",symbol:"R$"},"Bahamian Dollar":{code:"BSD",symbol:"$"},Pula:{code:"BWP",symbol:"P"},"Belarussian Ruble":{code:"BYR",symbol:"p."},"Belize Dollar":{code:"BZD",symbol:"BZ$"},"Canadian Dollar":{code:"CAD",symbol:"$"},"Congolese Franc":{code:"CDF",symbol:""},"Swiss Franc":{code:"CHF",symbol:"CHF"},"Chilean Peso Unidades de fomento":{code:"CLP CLF",symbol:"$"},"Yuan Renminbi":{code:"CNY",symbol:"¥"},"Colombian Peso Unidad de Valor Real":{code:"COP COU",symbol:"$"},"Costa Rican Colon":{code:"CRC",symbol:"₡"},"Cuban Peso Peso Convertible":{code:"CUP CUC",symbol:"₱"},"Cape Verde Escudo":{code:"CVE",symbol:""},"Czech Koruna":{code:"CZK",symbol:"Kč"},"Djibouti Franc":{code:"DJF",symbol:""},"Danish Krone":{code:"DKK",symbol:"kr"},"Dominican Peso":{code:"DOP",symbol:"RD$"},"Algerian Dinar":{code:"DZD",symbol:""},Kroon:{code:"EEK",symbol:""},"Egyptian Pound":{code:"EGP",symbol:"£"},Nakfa:{code:"ERN",symbol:""},"Ethiopian Birr":{code:"ETB",symbol:""},Euro:{code:"EUR",symbol:"€"},"Fiji Dollar":{code:"FJD",symbol:"$"},"Falkland Islands Pound":{code:"FKP",symbol:"£"},"Pound Sterling":{code:"GBP",symbol:"£"},Lari:{code:"GEL",symbol:""},Cedi:{code:"GHS",symbol:""},"Gibraltar Pound":{code:"GIP",symbol:"£"},Dalasi:{code:"GMD",symbol:""},"Guinea Franc":{code:"GNF",symbol:""},Quetzal:{code:"GTQ",symbol:"Q"},"Guyana Dollar":{code:"GYD",symbol:"$"},"Hong Kong Dollar":{code:"HKD",symbol:"$"},Lempira:{code:"HNL",symbol:"L"},"Croatian Kuna":{code:"HRK",symbol:"kn"},"Gourde US Dollar":{code:"HTG USD",symbol:""},Forint:{code:"HUF",symbol:"Ft"},Rupiah:{code:"IDR",symbol:"Rp"},"New Israeli Sheqel":{code:"ILS",symbol:"₪"},"Indian Rupee":{code:"INR",symbol:""},"Indian Rupee Ngultrum":{code:"INR BTN",symbol:""},"Iraqi Dinar":{code:"IQD",symbol:""},"Iranian Rial":{code:"IRR",symbol:"﷼"},"Iceland Krona":{code:"ISK",symbol:"kr"},"Jamaican Dollar":{code:"JMD",symbol:"J$"},"Jordanian Dinar":{code:"JOD",symbol:""},Yen:{code:"JPY",symbol:"¥"},"Kenyan Shilling":{code:"KES",symbol:""},Som:{code:"KGS",symbol:"лв"},Riel:{code:"KHR",symbol:"៛"},"Comoro Franc":{code:"KMF",symbol:""},"North Korean Won":{code:"KPW",symbol:"₩"},Won:{code:"KRW",symbol:"₩"},"Kuwaiti Dinar":{code:"KWD",symbol:""},"Cayman Islands Dollar":{code:"KYD",symbol:"$"},Tenge:{code:"KZT",symbol:"лв"},Kip:{code:"LAK",symbol:"₭"},"Lebanese Pound":{code:"LBP",symbol:"£"},"Sri Lanka Rupee":{code:"LKR",symbol:"₨"},"Liberian Dollar":{code:"LRD",symbol:"$"},"Lithuanian Litas":{code:"LTL",symbol:"Lt"},"Latvian Lats":{code:"LVL",symbol:"Ls"},"Libyan Dinar":{code:"LYD",symbol:""},"Moroccan Dirham":{code:"MAD",symbol:""},"Moldovan Leu":{code:"MDL",symbol:""},"Malagasy Ariary":{code:"MGA",symbol:""},Denar:{code:"MKD",symbol:"ден"},Kyat:{code:"MMK",symbol:""},Tugrik:{code:"MNT",symbol:"₮"},Pataca:{code:"MOP",symbol:""},Ouguiya:{code:"MRO",symbol:""},"Mauritius Rupee":{code:"MUR",symbol:"₨"},Rufiyaa:{code:"MVR",symbol:""},Kwacha:{code:"MWK",symbol:""},"Mexican Peso Mexican Unidad de Inversion (UDI)":{code:"MXN MXV",symbol:"$"},"Malaysian Ringgit":{code:"MYR",symbol:"RM"},Metical:{code:"MZN",symbol:"MT"},Naira:{code:"NGN",symbol:"₦"},"Cordoba Oro":{code:"NIO",symbol:"C$"},"Norwegian Krone":{code:"NOK",symbol:"kr"},"Nepalese Rupee":{code:"NPR",symbol:"₨"},"New Zealand Dollar":{code:"NZD",symbol:"$"},"Rial Omani":{code:"OMR",symbol:"﷼"},"Balboa US Dollar":{code:"PAB USD",symbol:"B/."},"Nuevo Sol":{code:"PEN",symbol:"S/."},Kina:{code:"PGK",symbol:""},"Philippine Peso":{code:"PHP",symbol:"Php"},"Pakistan Rupee":{code:"PKR",symbol:"₨"},Zloty:{code:"PLN",symbol:"zł"},Guarani:{code:"PYG",symbol:"Gs"},"Qatari Rial":{code:"QAR",symbol:"﷼"},"New Leu":{code:"RON",symbol:"lei"},"Serbian Dinar":{code:"RSD",symbol:"Дин."},"Russian Ruble":{code:"RUB",symbol:"руб"},"Rwanda Franc":{code:"RWF",symbol:""},"Saudi Riyal":{code:"SAR",symbol:"﷼"},"Solomon Islands Dollar":{code:"SBD",symbol:"$"},"Seychelles Rupee":{code:"SCR",symbol:"₨"},"Sudanese Pound":{code:"SDG",symbol:""},"Swedish Krona":{code:"SEK",symbol:"kr"},"Singapore Dollar":{code:"SGD",symbol:"$"},"Saint Helena Pound":{code:"SHP",symbol:"£"},Leone:{code:"SLL",symbol:""},"Somali Shilling":{code:"SOS",symbol:"S"},"Surinam Dollar":{code:"SRD",symbol:"$"},Dobra:{code:"STD",symbol:""},"El Salvador Colon US Dollar":{code:"SVC USD",symbol:"$"},"Syrian Pound":{code:"SYP",symbol:"£"},Lilangeni:{code:"SZL",symbol:""},Baht:{code:"THB",symbol:"฿"},Somoni:{code:"TJS",symbol:""},Manat:{code:"TMT",symbol:""},"Tunisian Dinar":{code:"TND",symbol:""},"Pa'anga":{code:"TOP",symbol:""},"Turkish Lira":{code:"TRY",symbol:"TL"},"Trinidad and Tobago Dollar":{code:"TTD",symbol:"TT$"},"New Taiwan Dollar":{code:"TWD",symbol:"NT$"},"Tanzanian Shilling":{code:"TZS",symbol:""},Hryvnia:{code:"UAH",symbol:"₴"},"Uganda Shilling":{code:"UGX",symbol:""},"US Dollar":{code:"USD",symbol:"$"},"Peso Uruguayo Uruguay Peso en Unidades Indexadas":{code:"UYU UYI",symbol:"$U"},"Uzbekistan Sum":{code:"UZS",symbol:"лв"},"Bolivar Fuerte":{code:"VEF",symbol:"Bs"},Dong:{code:"VND",symbol:"₫"},Vatu:{code:"VUV",symbol:""},Tala:{code:"WST",symbol:""},"CFA Franc BEAC":{code:"XAF",symbol:""},Silver:{code:"XAG",symbol:""},Gold:{code:"XAU",symbol:""},"Bond Markets Units European Composite Unit (EURCO)":{code:"XBA",symbol:""},"European Monetary Unit (E.M.U.-6)":{code:"XBB",symbol:""},"European Unit of Account 9(E.U.A.-9)":{code:"XBC",symbol:""},"European Unit of Account 17(E.U.A.-17)":{code:"XBD",symbol:""},"East Caribbean Dollar":{code:"XCD",symbol:"$"},SDR:{code:"XDR",symbol:""},"UIC-Franc":{code:"XFU",symbol:""},"CFA Franc BCEAO":{code:"XOF",symbol:""},Palladium:{code:"XPD",symbol:""},"CFP Franc":{code:"XPF",symbol:""},Platinum:{code:"XPT",symbol:""},"Codes specifically reserved for testing purposes":{code:"XTS",symbol:""},"Yemeni Rial":{code:"YER",symbol:"﷼"},Rand:{code:"ZAR",symbol:"R"},"Rand Loti":{code:"ZAR LSL",symbol:""},"Rand Namibia Dollar":{code:"ZAR NAD",symbol:""},"Zambian Kwacha":{code:"ZMK",symbol:""},"Zimbabwe Dollar":{code:"ZWL",symbol:""}}},{}],101:[function(e,t,a){var n={};t.exports=n,n.account_type=e("./account_type"),n.transaction_type=e("./transaction_type"),n.currency=e("./currency")},{"./account_type":99,"./currency":100,"./transaction_type":102}],102:[function(e,t,a){t.exports=["deposit","withdrawal","payment","invoice"]},{}],103:[function(e,t,a){t.exports=["TCP","HTTP","SDD","RAM","GB","CSS","SSL","AGP","SQL","FTP","PCI","AI","ADP","RSS","XML","EXE","COM","HDD","THX","SMTP","SMS","USB","PNG","SAS","IB","SCSI","JSON","XSS","JBOD"]},{}],104:[function(e,t,a){t.exports=["auxiliary","primary","back-end","digital","open-source","virtual","cross-platform","redundant","online","haptic","multi-byte","bluetooth","wireless","1080p","neural","optical","solid state","mobile"]},{}],105:[function(e,t,a){var n={};t.exports=n,n.abbreviation=e("./abbreviation"),n.adjective=e("./adjective"),n.noun=e("./noun"),n.verb=e("./verb"),n.ingverb=e("./ingverb")},{"./abbreviation":103,"./adjective":104,"./ingverb":106,"./noun":107,"./verb":108}],106:[function(e,t,a){t.exports=["backing up","bypassing","hacking","overriding","compressing","copying","navigating","indexing","connecting","generating","quantifying","calculating","synthesizing","transmitting","programming","parsing"]},{}],107:[function(e,t,a){t.exports=["driver","protocol","bandwidth","panel","microchip","program","port","card","array","interface","system","sensor","firewall","hard drive","pixel","alarm","feed","monitor","application","transmitter","bus","circuit","capacitor","matrix"]},{}],108:[function(e,t,a){t.exports=["back up","bypass","hack","override","compress","copy","navigate","index","connect","generate","quantify","calculate","synthesize","input","transmit","program","reboot","parse"]},{}],109:[function(e,t,a){var n={};t.exports=n,n.title="English",n.separator=" & ",n.address=e("./address"),n.credit_card=e("./credit_card"),n.company=e("./company"),n.internet=e("./internet"),n.lorem=e("./lorem"),n.name=e("./name"),n.phone_number=e("./phone_number"),n.cell_phone=e("./cell_phone"),n.business=e("./business"),n.commerce=e("./commerce"),n.team=e("./team"),n.hacker=e("./hacker"),n.app=e("./app"),n.finance=e("./finance"),n.date=e("./date")},{"./address":52,"./app":63,"./business":69,"./cell_phone":71,"./commerce":74,"./company":81,"./credit_card":88,"./date":96,"./finance":101,"./hacker":105,"./internet":113,"./lorem":114,"./name":118,"./phone_number":125,"./team":127}],110:[function(e,t,a){t.exports=["https://s3.amazonaws.com/uifaces/faces/twitter/jarjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahdif/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sprayaga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruzinav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Skyhartman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moscoz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurafire/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/91bilal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/igorgarybaldi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malykhinv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelhelin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kushsolitary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowshade/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/holdenweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heyimjuani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/envex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/unterdreht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/collegeman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peejfancher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andyisonline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ultragex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fuck_you_two/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adellecharles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ateneupopular/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetalpbalkan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Stievius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerem/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osvaldas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelceballos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrykoblentz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peterlandt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weglov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandclay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flame_kaizar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetsulek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolasfolliot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayrobinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorerixon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michzen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markjenkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolai_larsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noxdzine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alagoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/idiot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadengle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutlu82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/simobenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vocino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guiiipontes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soyjavi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshaustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomaslau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VinThomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ManikRathee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/langate/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cemshid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leemunroe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_shahedk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BillSKenney/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/divya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshhemsley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sindresorhus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soffes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/9lessons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linux29/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Chakintosh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anaami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joreira/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shadeed9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottkclark/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jedbridges/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salleedesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marakasina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BrianPurkiss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelmartinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bublienko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devankoshal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ZacharyZorbas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timmillwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuasortino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/damenleeturks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomas_janousek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herrhaase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/RussellBishop/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brajeshwar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nachtmeister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cbracco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bermonpainter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdullindenis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isacosta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suprb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yalozhkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chandlervdw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamgarth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_victa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/commadelimited/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roybarberuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/axel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladarbatov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ffbel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/syropian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ankitind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/traneblow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flashmurphy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ChrisFarina78/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baliomega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschamt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jm_denis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kennyadr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chatyrko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dingyi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mds/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terryxlife/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaroni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kinday/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prrstn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eduardostuart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhilipsiva/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/GavicoInd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rohixx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakesimkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leeiio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjrus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uberschizo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefoundry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/claudioguglieri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ripplemdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/exentrich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jakemoore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joaoedumedeiros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/poormini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tereshenkov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keryilmaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haydn_woods/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/llun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sgaurav_baghel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jamiebrittain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/badlittleduck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pifagor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agromov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benefritz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/erwanhesry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diesellaws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiaha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/koridhandy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewcohen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smaczny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gonzalorobaina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nandini_m/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sydlawrence/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdharrison/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgerken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lewisainslie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliecwaite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robbschiller/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flexrs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattdetails/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raquelwilson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrmartineau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/opnsrce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hgharrygo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximseshuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxalex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samihah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chanpory/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sharvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josemarques/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jefffis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krystalfister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lokesh_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedamianhdez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dpmachado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/funwatercat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timothycd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ivanfilipovbg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/picard102/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcobarbosa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krasnoukhov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/g3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ademilter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickdt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/operatino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bungiwan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugomano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/logorado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dc_user/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/horaciobella/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SlaapMe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teeragit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqonicd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ilya_pestov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewarrow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssiskind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/HenryHoffman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdsaunders/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamsxu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousoffice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themadray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michigangraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kohette/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nickfratter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/runningskull/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madysondesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenton_clarke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyshen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bradenhamm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurtinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amanruzaini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyhaggard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Karimmove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronalfred/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wtrsld/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jitachi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/therealmarvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pmeissner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ooomz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chacky14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jesseddy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinmatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shanehudson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/IsaryAmairani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arthurholcombe1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andychipster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/boxmodel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ehsandiary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/LucasPerdidao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shalt0ni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swaplord/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaelifa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plbabin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guillemboti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arindam_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/renbyrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thiagovernetti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmillspaysbills/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikemai2awesome/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jervo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mekal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sta1ex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robergd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipecsl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrea211087/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/garand/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhooyenga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abovefunction/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pcridesagain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/randomlies/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BryanHorsey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heykenneth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dahparra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allthingssmitty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvernon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beweinreich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/increase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falvarad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxndrustinov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souuf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/orkuncaylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AM_Kn2/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gearpixels/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bassamology/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vimarethomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kosmar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SULiik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrjamesnoble/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silvanmuhlemann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shaneIxD/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nacho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yigitpinarbasi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buzzusborne/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronkwhite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rmlewisuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giancarlon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nbirckel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_nny_m_cher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sdidonato/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atariboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abotap/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karalek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psdesignuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ludwiczakpawel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nemanjaivanovic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baluli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmadajmi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vovkasolovev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samgrover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derienzo777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonathansimmons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelsonjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/S0ufi4n3/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xtopherpaul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oaktreemedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nateschulte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/findingjenny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/namankreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyzotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/we_social/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leehambley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/solid_color/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abelcabans/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilderbach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kkusaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jordyvdboom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosgavina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pechkinator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vc27/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdbannon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/croakx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerihenare/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catadeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gcmorley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duivvv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschadroste/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorDubugras/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wintopia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattbilotti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taylorling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/megdraws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meln1ks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahmoudmetwally/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Silveredge9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekebradley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/happypeter1983/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travis_arnold/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artem_kostenko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adobi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daykiine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alek_djuric/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scips/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelmendes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrhee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alsobrooks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mcflydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/santi_urso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allfordesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stayuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bertboerland/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marosholly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamnac/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cynthiasavard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muringa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hiemil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jackiesaik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zacsnider/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iduuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antjanus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aroon_sharma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dshster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thehacker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelbrooksjr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanmclaughlin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/clubb3rry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taybenlor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xripunov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/myastro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adityasutomo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/digitalmaverick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hjartstrorn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itolmach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vaughanmoffitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdots/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isnifer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeysafonov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scrapdnb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrismj83/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitorleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sokaniwaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zaki3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/illyzoren/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mocabyte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmanince/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/djsherman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidhemphill/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/waghner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/necodymiconer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/praveen_vijaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbrucci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cliffseal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travishines/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kuldarkalvik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Elt_n/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/phillapier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okseanjay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/id835559/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kudretkeskin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anjhero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duck4fuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scott_riley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noufalibrahim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/h1brd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borges_marcos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devinhalladay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ciaranr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefooo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikebeecham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tonymillion/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuaraichur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/irae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petrangr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmitriychuta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliegann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arashmanteghi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ainsleywagon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/svenlen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/faisalabid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beshur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlyson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dutchnadia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teddyzetterlund/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samuelkraft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aoimedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/toddrew/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codepoet_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artvavs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benoitboucart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jomarmen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolmarlopez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/creartinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/homka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gaborenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinclediere/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximsorokin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plasticine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j2deme/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peachananr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kapaluccio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/de_ascanio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dawidwu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpatey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/popey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rehatkathuria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_purplebunny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/1markiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ajaxy_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenmurrell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dudestein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskarlevinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorstuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nehfy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vicivadeline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leandrovaranda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottgallant/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victor_haydin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawrb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryhanhassan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amayvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_brixen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karolkrakowiak_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herkulano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geran7/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cggaurav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_witko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lososina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/polarity/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattlat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonburke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/constantx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teylorfeliz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigelimeliah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rachelreveley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reabo101/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rahmeen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickyyean/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j04ntoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spbroma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sebashton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpenico/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/francis_vega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oktayelipek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kikillo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbianz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrygerard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BroumiYoussef/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/0therplanet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilalsiddique1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ionuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grrr_nl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/liminha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rawdiggie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryandownie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sethlouey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pixage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arpitnj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/switmer777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josevnclch/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kanickairaj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/puzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tbakdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/besbujupi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supjoey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lowie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linkibol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balintorosz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imcoding/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agustincruiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gusoto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasschrijer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/superoutman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kalmerrautam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielizalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gojeanyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidbaldie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_vojto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laurengray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mymyboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nellleo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marciotoledo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ninjad3m0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/to_soham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hasslunsford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muridrahhal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/levisan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grahamkennery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepetitogre/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antongenkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nessoila/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amandabuzard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/safrankov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cocolero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dss49/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matt3224/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluesix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/quailandquasar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AlbertoCococi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepinski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sementiy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhudobivnik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thibaut_re/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olgary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shojberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mtolokonnikov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bereto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naupintos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wegotvices/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xadhix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/macxim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rodnylobos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madcampos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebyvadim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartoszdawydzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supervova/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markretzloff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vonachoo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darylws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stevedesigner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mylesb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herbigt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/depaulawagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gizmeedevil1991/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_scottburgess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lisovsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidsasda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artd_sign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/YoungCutlass/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mgonto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itstotallyamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorquinn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmond/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oksanafrewer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zauerkraut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkeithmason/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nitinhayaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lmjabreu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mandalareopens/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinkleft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ponchomendivil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juamperro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brunodesign1206/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caseycavanagh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/luxe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dotgridline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spedwig/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madewulf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattsapii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/helderleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisstumph/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayphen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nsamoylov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisvanderkooi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justme_timothyg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/otozk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prinzadi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gu5taf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cyril_gaillard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_kobelyatsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daniloc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nwdsha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/romanbulah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/skkirilov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dvdwinden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dannol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thekevinjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jwalter14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timgthomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buddhasource/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxpiper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thatonetommy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diansigitp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adrienths/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klimmka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gkaam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekcramer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyyo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerrsoft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xalionmalik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edhenderson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keyuri85/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roxanejammet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kimcool/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edkf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alessandroribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacksonlatka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebronjennan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kostaspt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karlkanall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moynihan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danpliego/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saulihirvi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wesleytrankin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fjaguero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bowbrick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mashaaaaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yassiryahya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dparrelli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fotomagin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aka_james/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/denisepires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqbalperkasa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martinansty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jarsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_oy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielrosser/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malgordon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlfairclough/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelabehsera/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierrestoffe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enjoythetau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/loganjlambert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpeezy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyginnivan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michalhron/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/msveet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lingeswaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolsvein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peter576/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reideiredale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joeymurdah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raphaelnikson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mvdheuvel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maxlinderman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jimmuirhead/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/begreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/frankiefreesbie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robturlinckx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Talbi_ConSept/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/longlivemyword/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vanchesz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maiklam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hermanobrother/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rez___a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregsqueeb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/greenbes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_ragzor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anthonysukow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fluidbrush/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dactrtr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jehnglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bergmartin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugocornejo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_kkga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dzantievm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawalazar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sovesove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonsgotwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byryan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vytautas_a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizhgan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cicerobr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshelmersson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d33pthought/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davecraige/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nckjrvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexandermayes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jcubic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigrcoles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bagawarman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rob_thomas10/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cofla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maikelk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtgibbons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russell_baylis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhesslow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codysanfilippo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/webtanya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebybrenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dcalonaci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perfectflow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjsiii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saarabpreet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kumarrajan12123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamsteffen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themikenagle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ceekaytweet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrybolt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/conspirator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dallasbpeters/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n3dmax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terpimost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirillz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byrnecore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j_drake_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russoedu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hoangloi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tobysaxon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gofrasdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dimaposnyy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjisousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okandungel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/billyroshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskamaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/motionthinks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/knilob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashocka18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marrimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartjo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/omnizya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ernestsemerda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andreas_pr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edgarchris99/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasgeisen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gseguin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joannefournier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/demersdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adammarsbar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nasirwd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n_tassone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/javorszky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themrdave/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yecidsm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicollerich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/canapud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicoleglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/judzhin_miles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/designervzm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kianoshp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evandrix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alterchuca/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhrubo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ma_tiax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssbb_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dorphern/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mauriolg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bruno_mart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mactopus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_winslet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joemdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Shriiiiimp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacobbennett/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nfedoroff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamglimy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allagringaus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aiiaiiaii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olaolusoga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buryaknick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wim1k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicklacke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a1chapone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/steynviljoen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/strikewan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryankirkman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewabogado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doooon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jagan123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariffsetiawan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elenadissi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mwarkentin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrymeier_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_garcia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmackerman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borantula/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/konus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spacewood_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryuchi311/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evanshajed/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tristanlegros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shoaib253/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aislinnkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okcoker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timpetricola/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunshinedgirl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleclarsoniv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nomidesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petebernardo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottiedude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/millinet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imsoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imammuht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benjamin_knight/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nepdud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joki4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lanceguyatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bboy1895/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amywebbb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rweve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haruintesettden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ricburton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelshd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/batsirai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/primozcigler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jffgrdnr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/8d3k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geneseleznev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/al_li/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souperphly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mslarkina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/2fockus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdavis565/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xiel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/turkutuuli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxward/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebinoclard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauravjassal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidmerrique/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mdsisto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewofficer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kojourin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnirmal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_shiznit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aluisio_azevedo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cloudstudio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvierich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexivanichkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fran_mchamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perretmagali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/betraydan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cadikkara/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matbeedotcom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyworboys/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bpartridge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelkoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silv3rgvn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alevizio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnsmithagency/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lawlbwoy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitor376/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/desastrozo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thimo_cz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jasonmarkjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lhausermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xravil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guischmitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vigobronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panghal0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelkooreman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/surgeonist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/christianoliff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caspergrl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkarna/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ipavelek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierre_nel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/y2graphic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sterlingrules/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elbuscainfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bennyjien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stushona/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/estebanuribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/embrcecreations/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danillos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charlesrpratt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmeffess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosblanco_eu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leonfedotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rangafangs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_frees/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgormtx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bryan_topham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpscribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mighty55/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carbontwelve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isaacfifth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamjdeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowwrite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/barputro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/drewbyreese/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachacorazzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bistrianiosip/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magoo04/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pehamondello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yayteejay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_harris88/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/algunsanabria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zforrester/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ovall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosjgsousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geobikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ah_lice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/looneydoodle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerdgr8/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ddggccaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zackeeler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/normanbox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/el_fuertisimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ismail_biltagi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juangomezw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jnmnrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/patrickcoombe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanjohnson_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markolschesky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeffgolenski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kvasnic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lindseyzilla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauchomatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/afusinatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okansurreel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamawesomeface/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emileboudeling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arishi_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juanmamartinez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wikiziner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danthms/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mkginfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terrorpixel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousonaut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prheemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcolenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/foczzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martip07/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaodang17/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johncafazza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinlayfield/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/franciscoamk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdulhyeuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marklamb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edobene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresenfredrik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikaeljorhult/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisslowik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vinciarts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meelford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotnolten/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yehudab/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vijaykarthik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bfrohs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josep_martins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/attacks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sur4dye/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tumski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/instalox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mangosango/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/paulfarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kazaky999/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kiwiupover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nvkznemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tom_even/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ratbus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodsman001/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshmedeski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thewillbeard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psaikali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joe_black/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleinadsays/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcusgorillius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hota_v/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jghyllebert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shinze/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/janpalounek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiespoken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/her_ruu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dansowter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipeapiress/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magugzbrand2d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/posterjob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nathalie_fs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobbytwoshoes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dreizle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremymouton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elisabethkjaer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/notbadart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mohanrohith/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jlsolerdeltoro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itskawsar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/slowspock/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zvchkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wiljanslofstra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craighenneberry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trubeatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juaumlol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samscouto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BenouarradeM/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gipsy_raf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/netonet_il/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arkokoley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itsajimithing/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smalonso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victordeanda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_dwite_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richardgarretts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregrwilkinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anatolinicolae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lu4sh1i/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanotirloni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ostirbu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darcystonge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naitanamoreno/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcomiskey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhiardana/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcomano_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidcazalis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falconerie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregkilian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bcrad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bolzanmarco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/low_res/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vlajki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petar_prog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonkspr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmalfikri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mfacchinello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atanism/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/harry_sistalam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/murrayswift/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobwassermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gavr1l0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madshensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_subtle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deviljho_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salimianoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joetruesdell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/twittypork/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/airskylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnezkumar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgajjar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cherif_b/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salvafc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/louis_currie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deeenright/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cybind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eyronn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vickyshits/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sweetdelisa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cboller1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresdjasso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/melvindidit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andysolomon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaisselenator_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lvovenok/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giuliusa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/belyaev_rs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overcloacked/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kamal_chaneman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/incubo82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hellofeverrrr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhaligowski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunlandictwin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bu7921/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andytlaw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/finchjke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manigm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/umurgdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottfeltham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ganserene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutu_krish/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jodytaggart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ntfblog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tanveerrao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hfalucas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxleroydeval/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kucingbelang4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bargaorobalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colgruv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stalewine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefrost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumannzone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcolberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachingawas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjshaw14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ramanathan_pdy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johndezember/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshoenson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonmorreale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nutzumi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonflatsoda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeyalmone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klefue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirangopal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumann_alex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matthewkay_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jay_wilburn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shesgared/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/apriendeau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnriordan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wake_gs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleksitappura/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emsgulam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xilantra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imomenui/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sircalebgrove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/newbrushes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hsinyo23/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m4rio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/katiemdaly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/s4f1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ecommerceil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marlinjayakody/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swooshycueb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sangdth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coderdiaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluefx_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vivekprvr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sasha_shestakov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eugeneeweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgclegg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n1ght_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dixchen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakehawksworth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trueblood_33/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hai_ninh_nguyen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marclgonzales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yesmeck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stephcoue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doronmalki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruehldesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anasnakawa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kijanmaharjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wearesavas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefvdham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tweetubhai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alecarpentier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fiterik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyryndya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d00maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/theonlyzeke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/missaaamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manekenthe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reetajayendra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyshimko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrgraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanozoffoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrebay007/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shvelo96/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pyronite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedjpetersen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtyukmaev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_williamguerra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/albertaugustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikashpathak18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinjohndayy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vj_demien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colirpixoil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/goddardlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laasli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jqiuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heycamtaylor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nastya_mane/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mastermindesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ccinojasso1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nyancecom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sandywoodruff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bighanddesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sbtransparent/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aviddayentonbay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richwild/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaysix_dizzy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tur8le/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/seyedhossein1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/privetwagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmandenn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dev_essentials/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmfsocial/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_yardenoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mateaodviteza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weavermedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mufaddal_mw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hafeeskhan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashernatali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sulaqo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eddiechen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josecarlospsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vm_f/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enricocicconi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danmartin70/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gmourier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/donjain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrxloka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_pedropinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eitarafa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oscarowusu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ralph_lam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panchajanyag/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodydotmx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jerrybai1907/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marshallchen_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xamorep/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aio___/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaabane_wail/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/txcx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akashsharma39/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falling_soul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sainraja/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mugukamil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johannesneu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markwienands/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karthipanraj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balakayuriy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alan_zhang_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/layerssss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaspernordkvist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mirfanqureshi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hanna_smi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VMilescu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aeon56/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m_kalibry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sreejithexp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dicesales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhoot_amit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smenov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lonesomelemon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladimirdevic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelcipriano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haligaliharun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buleswapnil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/serefka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ifarafonow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikasvinfotech/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/urrutimeoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areandacom/128.jpg"]; -},{}],111:[function(e,t,a){t.exports=["com","biz","info","name","net","org"]},{}],112:[function(e,t,a){t.exports=["gmail.com","yahoo.com","hotmail.com"]},{}],113:[function(e,t,a){var n={};t.exports=n,n.free_email=e("./free_email"),n.domain_suffix=e("./domain_suffix"),n.avatar_uri=e("./avatar_uri")},{"./avatar_uri":110,"./domain_suffix":111,"./free_email":112}],114:[function(e,t,a){var n={};t.exports=n,n.words=e("./words"),n.supplemental=e("./supplemental")},{"./supplemental":115,"./words":116}],115:[function(e,t,a){t.exports=["abbas","abduco","abeo","abscido","absconditus","absens","absorbeo","absque","abstergo","absum","abundans","abutor","accedo","accendo","acceptus","accipio","accommodo","accusator","acer","acerbitas","acervus","acidus","acies","acquiro","acsi","adamo","adaugeo","addo","adduco","ademptio","adeo","adeptio","adfectus","adfero","adficio","adflicto","adhaero","adhuc","adicio","adimpleo","adinventitias","adipiscor","adiuvo","administratio","admiratio","admitto","admoneo","admoveo","adnuo","adopto","adsidue","adstringo","adsuesco","adsum","adulatio","adulescens","adultus","aduro","advenio","adversus","advoco","aedificium","aeger","aegre","aegrotatio","aegrus","aeneus","aequitas","aequus","aer","aestas","aestivus","aestus","aetas","aeternus","ager","aggero","aggredior","agnitio","agnosco","ago","ait","aiunt","alienus","alii","alioqui","aliqua","alius","allatus","alo","alter","altus","alveus","amaritudo","ambitus","ambulo","amicitia","amiculum","amissio","amita","amitto","amo","amor","amoveo","amplexus","amplitudo","amplus","ancilla","angelus","angulus","angustus","animadverto","animi","animus","annus","anser","ante","antea","antepono","antiquus","aperio","aperte","apostolus","apparatus","appello","appono","appositus","approbo","apto","aptus","apud","aqua","ara","aranea","arbitro","arbor","arbustum","arca","arceo","arcesso","arcus","argentum","argumentum","arguo","arma","armarium","armo","aro","ars","articulus","artificiose","arto","arx","ascisco","ascit","asper","aspicio","asporto","assentator","astrum","atavus","ater","atqui","atrocitas","atrox","attero","attollo","attonbitus","auctor","auctus","audacia","audax","audentia","audeo","audio","auditor","aufero","aureus","auris","aurum","aut","autem","autus","auxilium","avaritia","avarus","aveho","averto","avoco","baiulus","balbus","barba","bardus","basium","beatus","bellicus","bellum","bene","beneficium","benevolentia","benigne","bestia","bibo","bis","blandior","bonus","bos","brevis","cado","caecus","caelestis","caelum","calamitas","calcar","calco","calculus","callide","campana","candidus","canis","canonicus","canto","capillus","capio","capitulus","capto","caput","carbo","carcer","careo","caries","cariosus","caritas","carmen","carpo","carus","casso","caste","casus","catena","caterva","cattus","cauda","causa","caute","caveo","cavus","cedo","celebrer","celer","celo","cena","cenaculum","ceno","censura","centum","cerno","cernuus","certe","certo","certus","cervus","cetera","charisma","chirographum","cibo","cibus","cicuta","cilicium","cimentarius","ciminatio","cinis","circumvenio","cito","civis","civitas","clam","clamo","claro","clarus","claudeo","claustrum","clementia","clibanus","coadunatio","coaegresco","coepi","coerceo","cogito","cognatus","cognomen","cogo","cohaero","cohibeo","cohors","colligo","colloco","collum","colo","color","coma","combibo","comburo","comedo","comes","cometes","comis","comitatus","commemoro","comminor","commodo","communis","comparo","compello","complectus","compono","comprehendo","comptus","conatus","concedo","concido","conculco","condico","conduco","confero","confido","conforto","confugo","congregatio","conicio","coniecto","conitor","coniuratio","conor","conqueror","conscendo","conservo","considero","conspergo","constans","consuasor","contabesco","contego","contigo","contra","conturbo","conventus","convoco","copia","copiose","cornu","corona","corpus","correptius","corrigo","corroboro","corrumpo","coruscus","cotidie","crapula","cras","crastinus","creator","creber","crebro","credo","creo","creptio","crepusculum","cresco","creta","cribro","crinis","cruciamentum","crudelis","cruentus","crur","crustulum","crux","cubicularis","cubitum","cubo","cui","cuius","culpa","culpo","cultellus","cultura","cum","cunabula","cunae","cunctatio","cupiditas","cupio","cuppedia","cupressus","cur","cura","curatio","curia","curiositas","curis","curo","curriculum","currus","cursim","curso","cursus","curto","curtus","curvo","curvus","custodia","damnatio","damno","dapifer","debeo","debilito","decens","decerno","decet","decimus","decipio","decor","decretum","decumbo","dedecor","dedico","deduco","defaeco","defendo","defero","defessus","defetiscor","deficio","defigo","defleo","defluo","defungo","degenero","degero","degusto","deinde","delectatio","delego","deleo","delibero","delicate","delinquo","deludo","demens","demergo","demitto","demo","demonstro","demoror","demulceo","demum","denego","denique","dens","denuncio","denuo","deorsum","depereo","depono","depopulo","deporto","depraedor","deprecator","deprimo","depromo","depulso","deputo","derelinquo","derideo","deripio","desidero","desino","desipio","desolo","desparatus","despecto","despirmatio","infit","inflammatio","paens","patior","patria","patrocinor","patruus","pauci","paulatim","pauper","pax","peccatus","pecco","pecto","pectus","pecunia","pecus","peior","pel","ocer","socius","sodalitas","sol","soleo","solio","solitudo","solium","sollers","sollicito","solum","solus","solutio","solvo","somniculosus","somnus","sonitus","sono","sophismata","sopor","sordeo","sortitus","spargo","speciosus","spectaculum","speculum","sperno","spero","spes","spiculum","spiritus","spoliatio","sponte","stabilis","statim","statua","stella","stillicidium","stipes","stips","sto","strenuus","strues","studio","stultus","suadeo","suasoria","sub","subito","subiungo","sublime","subnecto","subseco","substantia","subvenio","succedo","succurro","sufficio","suffoco","suffragium","suggero","sui","sulum","sum","summa","summisse","summopere","sumo","sumptus","supellex","super","suppellex","supplanto","suppono","supra","surculus","surgo","sursum","suscipio","suspendo","sustineo","suus","synagoga","tabella","tabernus","tabesco","tabgo","tabula","taceo","tactus","taedium","talio","talis","talus","tam","tamdiu","tamen","tametsi","tamisium","tamquam","tandem","tantillus","tantum","tardus","tego","temeritas","temperantia","templum","temptatio","tempus","tenax","tendo","teneo","tener","tenuis","tenus","tepesco","tepidus","ter","terebro","teres","terga","tergeo","tergiversatio","tergo","tergum","termes","terminatio","tero","terra","terreo","territo","terror","tersus","tertius","testimonium","texo","textilis","textor","textus","thalassinus","theatrum","theca","thema","theologus","thermae","thesaurus","thesis","thorax","thymbra","thymum","tibi","timidus","timor","titulus","tolero","tollo","tondeo","tonsor","torqueo","torrens","tot","totidem","toties","totus","tracto","trado","traho","trans","tredecim","tremo","trepide","tres","tribuo","tricesimus","triduana","triginta","tripudio","tristis","triumphus","trucido","truculenter","tubineus","tui","tum","tumultus","tunc","turba","turbo","turpe","turpis","tutamen","tutis","tyrannus","uberrime","ubi","ulciscor","ullus","ulterius","ultio","ultra","umbra","umerus","umquam","una","unde","undique","universe","unus","urbanus","urbs","uredo","usitas","usque","ustilo","ustulo","usus","uter","uterque","utilis","utique","utor","utpote","utrimque","utroque","utrum","uxor","vaco","vacuus","vado","vae","valde","valens","valeo","valetudo","validus","vallum","vapulus","varietas","varius","vehemens","vel","velociter","velum","velut","venia","venio","ventito","ventosus","ventus","venustas","ver","verbera","verbum","vere","verecundia","vereor","vergo","veritas","vero","versus","verto","verumtamen","verus","vesco","vesica","vesper","vespillo","vester","vestigium","vestrum","vetus","via","vicinus","vicissitudo","victoria","victus","videlicet","video","viduata","viduo","vigilo","vigor","vilicus","vilis","vilitas","villa","vinco","vinculum","vindico","vinitor","vinum","vir","virga","virgo","viridis","viriliter","virtus","vis","viscus","vita","vitiosus","vitium","vito","vivo","vix","vobis","vociferor","voco","volaticus","volo","volubilis","voluntarius","volup","volutabrum","volva","vomer","vomica","vomito","vorago","vorax","voro","vos","votum","voveo","vox","vulariter","vulgaris","vulgivagus","vulgo","vulgus","vulnero","vulnus","vulpes","vulticulus","vultuosus","xiphias"]},{}],116:[function(e,t,a){t.exports=["alias","consequatur","aut","perferendis","sit","voluptatem","accusantium","doloremque","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni","dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","dolorem","ipsum","quia","dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut","labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum","exercitationem","ullam","corporis","nemo","enim","ipsam","voluptatem","quia","voluptas","sit","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis","autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","et","iusto","odio","dignissimos","ducimus","qui","blanditiis","praesentium","laudantium","totam","rem","voluptatum","deleniti","atque","corrupti","quos","dolores","et","quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","sed","ut","perspiciatis","unde","omnis","iste","natus","error","similique","sunt","in","culpa","qui","officia","deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et","expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo","porro","quisquam","est","qui","minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus","temporibus","autem","quibusdam","et","aut","consequatur","vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et","voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente","delectus","ut","aut","reiciendis","voluptatibus","maiores","doloribus","asperiores","repellat"]},{}],117:[function(e,t,a){t.exports=["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zula"]; -},{}],118:[function(e,t,a){var n={};t.exports=n,n.first_name=e("./first_name"),n.last_name=e("./last_name"),n.prefix=e("./prefix"),n.suffix=e("./suffix"),n.title=e("./title"),n.name=e("./name")},{"./first_name":117,"./last_name":119,"./name":120,"./prefix":121,"./suffix":122,"./title":123}],119:[function(e,t,a){t.exports=["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Gutmann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Hartmann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","MacGyver","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"]},{}],120:[function(e,t,a){t.exports=["#{prefix} #{first_name} #{last_name}","#{first_name} #{last_name} #{suffix}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{first_name} #{last_name}"]},{}],121:[function(e,t,a){t.exports=["Mr.","Mrs.","Ms.","Miss","Dr."]},{}],122:[function(e,t,a){t.exports=["Jr.","Sr.","I","II","III","IV","V","MD","DDS","PhD","DVM"]},{}],123:[function(e,t,a){t.exports={descriptor:["Lead","Senior","Direct","Corporate","Dynamic","Future","Product","National","Regional","District","Central","Global","Customer","Investor","Dynamic","International","Legacy","Forward","Internal","Human","Chief","Principal"],level:["Solutions","Program","Brand","Security","Research","Marketing","Directives","Implementation","Integration","Functionality","Response","Paradigm","Tactics","Identity","Markets","Group","Division","Applications","Optimization","Operations","Infrastructure","Intranet","Communications","Web","Branding","Quality","Assurance","Mobility","Accounts","Data","Creative","Configuration","Accountability","Interactions","Factors","Usability","Metrics"],job:["Supervisor","Associate","Executive","Liason","Officer","Manager","Engineer","Specialist","Director","Coordinator","Administrator","Architect","Analyst","Designer","Planner","Orchestrator","Technician","Developer","Producer","Consultant","Assistant","Facilitator","Agent","Representative","Strategist"]}},{}],124:[function(e,t,a){t.exports=["###-###-####","(###) ###-####","1-###-###-####","###.###.####","###-###-####","(###) ###-####","1-###-###-####","###.###.####","###-###-#### x###","(###) ###-#### x###","1-###-###-#### x###","###.###.#### x###","###-###-#### x####","(###) ###-#### x####","1-###-###-#### x####","###.###.#### x####","###-###-#### x#####","(###) ###-#### x#####","1-###-###-#### x#####","###.###.#### x#####"]},{}],125:[function(e,t,a){var n={};t.exports=n,n.formats=e("./formats")},{"./formats":124}],126:[function(e,t,a){t.exports=["ants","bats","bears","bees","birds","buffalo","cats","chickens","cattle","dogs","dolphins","ducks","elephants","fishes","foxes","frogs","geese","goats","horses","kangaroos","lions","monkeys","owls","oxen","penguins","people","pigs","rabbits","sheep","tigers","whales","wolves","zebras","banshees","crows","black cats","chimeras","ghosts","conspirators","dragons","dwarves","elves","enchanters","exorcists","sons","foes","giants","gnomes","goblins","gooses","griffins","lycanthropes","nemesis","ogres","oracles","prophets","sorcerors","spiders","spirits","vampires","warlocks","vixens","werewolves","witches","worshipers","zombies","druids"]},{}],127:[function(e,t,a){var n={};t.exports=n,n.creature=e("./creature"),n.name=e("./name")},{"./creature":126,"./name":128}],128:[function(e,t,a){t.exports=["#{Address.state} #{creature}"]},{}],129:[function(e,t,a){var n=function(e){var t=this,a=e.helpers;return t.words=function(t){return"undefined"==typeof t&&(t=3),a.shuffle(e.definitions.lorem.words).slice(0,t)},t.sentence=function(t,a){"undefined"==typeof t&&(t=3),"undefined"==typeof a&&(a=7);var n=e.lorem.words(t+e.random.number(a)).join(" ");return n.charAt(0).toUpperCase()+n.slice(1)+"."},t.sentences=function(t){"undefined"==typeof t&&(t=3);var a=[];for(t;t>0;t--)a.push(e.lorem.sentence());return a.join("\n")},t.paragraph=function(t){return"undefined"==typeof t&&(t=3),e.lorem.sentences(t+e.random.number(3))},t.paragraphs=function(t,a){"undefined"==typeof a&&(a="\n \r"),"undefined"==typeof t&&(t=3);var n=[];for(t;t>0;t--)n.push(e.lorem.paragraph());return n.join(a)},t};t.exports=n},{}],130:[function(e,t,a){function n(e){this.firstName=function(t){return"undefined"!=typeof e.definitions.name.male_first_name&&"undefined"!=typeof e.definitions.name.female_first_name?("number"!=typeof t&&(t=e.random.number(1)),0===t?e.random.arrayElement(e.locales[e.locale].name.male_first_name):e.random.arrayElement(e.locales[e.locale].name.female_first_name)):e.random.arrayElement(e.definitions.name.first_name)},this.lastName=function(t){return"undefined"!=typeof e.definitions.name.male_last_name&&"undefined"!=typeof e.definitions.name.female_last_name?("number"!=typeof t&&(t=e.random.number(1)),0===t?e.random.arrayElement(e.locales[e.locale].name.male_last_name):e.random.arrayElement(e.locales[e.locale].name.female_last_name)):e.random.arrayElement(e.definitions.name.last_name)},this.findName=function(t,a,n){var r,i,s=e.random.number(8);switch("number"!=typeof n&&(n=e.random.number(1)),t=t||e.name.firstName(n),a=a||e.name.lastName(n),s){case 0:if(r=e.name.prefix())return r+" "+t+" "+a;case 1:if(i=e.name.prefix())return t+" "+a+" "+i}return t+" "+a},this.jobTitle=function(){return e.name.jobDescriptor()+" "+e.name.jobArea()+" "+e.name.jobType()},this.prefix=function(){return e.random.arrayElement(e.definitions.name.prefix)},this.suffix=function(){return e.random.arrayElement(e.definitions.name.suffix)},this.title=function(){var t=e.random.arrayElement(e.definitions.name.title.descriptor),a=e.random.arrayElement(e.definitions.name.title.level),n=e.random.arrayElement(e.definitions.name.title.job);return t+" "+a+" "+n},this.jobDescriptor=function(){return e.random.arrayElement(e.definitions.name.title.descriptor)},this.jobArea=function(){return e.random.arrayElement(e.definitions.name.title.level)},this.jobType=function(){return e.random.arrayElement(e.definitions.name.title.job)}}t.exports=n},{}],131:[function(e,t,a){var n=function(e){var t=this;return t.phoneNumber=function(t){return t=t||e.phone.phoneFormats(),e.helpers.replaceSymbolWithNumber(t)},t.phoneNumberFormat=function(t){return t=t||0,e.helpers.replaceSymbolWithNumber(e.definitions.phone_number.formats[t])},t.phoneFormats=function(){return e.random.arrayElement(e.definitions.phone_number.formats)},t};t.exports=n},{}],132:[function(e,t,a){function n(e,t){return t&&(Array.isArray(t)&&t.length?r.seed_array(t):r.seed(t)),this.number=function(e){"number"==typeof e&&(e={max:e}),e=e||{},"undefined"==typeof e.min&&(e.min=0),"undefined"==typeof e.max&&(e.max=99999),"undefined"==typeof e.precision&&(e.precision=1);var t=e.max;t>=0&&(t+=e.precision);var a=e.precision*Math.floor(r.rand(t/e.precision,e.min/e.precision));return a},this.arrayElement=function(t){t=t||["a","b","c"];var a=e.random.number({max:t.length-1});return t[a]},this.objectElement=function(t,a){t=t||{foo:"bar",too:"car"};var n=Object.keys(t),r=e.random.arrayElement(n);return"key"===a?r:t[r]},this.uuid=function(){var e="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",t=function(e){var t=16*Math.random()|0,a="x"==e?t:3&t|8;return a.toString(16)};return e.replace(/[xy]/g,t)},this["boolean"]=function(){return!!e.random.number(1)},this}var r=e("../vendor/mersenne");t.exports=n},{"../vendor/mersenne":134}],133:[function(e,t,a){var n=e("../lib"),r=new n({locale:"en",localeFallback:"en"});r.locales.en=e("../lib/locales/en"),r.locales.en=e("../lib/locales/en"),t.exports=r},{"../lib":42,"../lib/locales/en":109}],134:[function(e,t,a){function n(){function e(e){return 0>e?(e^o)+o:e}function t(t,a){return a>t?e(4294967296-(a-t)&4294967295):t-a}function a(t,a){return e(t+a&4294967295)}function n(t,n){for(var r=0,i=0;32>i;++i)t>>>i&1&&(r=a(r,e(n<l;l++)c[l]=a(n(1812433253,e(c[l-1]^c[l-1]>>>30)),l),c[l]=e(4294967295&c[l])},this.init_by_array=function(i,s){var o,u,l;for(this.init_genrand(19650218),o=1,u=0,l=r>s?r:s;l;l--)c[o]=a(a(e(c[o]^n(e(c[o-1]^c[o-1]>>>30),1664525)),i[u]),u),c[o]=e(4294967295&c[o]),o++,u++,o>=r&&(c[0]=c[r-1],o=1),u>=s&&(u=0);for(l=r-1;l;l--)c[o]=t(e((dbg=c[o])^n(e(c[o-1]^c[o-1]>>>30),1566083941)),o),c[o]=e(4294967295&c[o]),o++,o>=r&&(c[0]=c[r-1],o=1);c[0]=2147483648};var f=[0,s];this.genrand_int32=function(){var t;if(l>=r){var a;for(l==r+1&&this.init_genrand(5489),a=0;r-i>a;a++)t=e(c[a]&o|c[a+1]&u),c[a]=e(c[a+i]^t>>>1^f[1&t]);for(;r-1>a;a++)t=e(c[a]&o|c[a+1]&u),c[a]=e(c[a+(i-r)]^t>>>1^f[1&t]);t=e(c[r-1]&o|c[0]&u),c[r-1]=e(c[i-1]^t>>>1^f[1&t]),l=0}return t=c[l++],t=e(t^t>>>11),t=e(t^t<<7&2636928640),t=e(t^t<<15&4022730752),t=e(t^t>>>18)},this.genrand_int31=function(){return this.genrand_int32()>>>1},this.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},this.genrand_real2=function(){return this.genrand_int32()*(1/4294967296)},this.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},this.genrand_res53=function(){var e=this.genrand_int32()>>>5,t=this.genrand_int32()>>>6;return(67108864*e+t)*(1/9007199254740992)}}a.MersenneTwister19937=n;var r=new n;r.init_genrand((new Date).getTime()%1e9),a.rand=function(e,t){return void 0===e&&(t=0,e=32768),Math.floor(r.genrand_real2()*(e-t)+t)},a.seed=function(e){if("number"!=typeof e)throw new Error("seed(S) must take numeric argument; is "+typeof e);r.init_genrand(e)},a.seed_array=function(e){if("object"!=typeof e)throw new Error("seed_array(A) must take array of numbers; is "+typeof e);r.init_by_array(e)}},{}],135:[function(e,t,a){!function(e){var n,r,i,s,o;i=/[a-zA-Z]$/,o=/[aeiouAEIOU]$/,r=/[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]$/,n=e.localPasswordGeneratorLibraryName||"generatePassword",s=function(e,t,a,n){var i,u;return null==e&&(e=10),null==t&&(t=!0),null==a&&(a=/\w/),null==n&&(n=""),n.length>=e?n:(t&&(a=n.match(r)?o:r),u=Math.floor(94*Math.random())+33,i=String.fromCharCode(u),t&&(i=i.toLowerCase()),i.match(a)?s(e,t,a,""+n+i):s(e,t,a,n))},("undefined"!=typeof a?a:e)[n]=s,"undefined"!=typeof a&&"undefined"!=typeof t&&t.exports&&(t.exports=s)}(this)},{}],136:[function(e,t,a){function n(e,t){if(e=e||0,t=t||100,"number"==typeof t&&"number"==typeof e)return function(e,t){if(e>t)throw new RangeError("expected min <= max; got min = "+e+", max = "+t);return Math.floor(Math.random()*(t-e+1))+e}(e,t);if("[object Array]"===Object.prototype.toString.call(e))return e[Math.floor(Math.random()*e.length)];if(e&&"object"==typeof e)return function(e){var t,a,r=n(0,100)/100,i=0,s=0;for(t in e)if(e.hasOwnProperty(t)){if(s=e[t]+i,a=t,r>=i&&s>=r)break;i+=e[t]}return a}(e);throw new TypeError("Invalid arguments passed to rnd. ("+(t?e+", "+t:e)+")")}function r(){return n(["AB","AF","AN","AR","AS","AZ","BE","BG","BN","BO","BR","BS","CA","CE","CO","CS","CU","CY","DA","DE","EL","EN","EO","ES","ET","EU","FA","FI","FJ","FO","FR","FY","GA","GD","GL","GV","HE","HI","HR","HT","HU","HY","ID","IS","IT","JA","JV","KA","KG","KO","KU","KW","KY","LA","LB","LI","LN","LT","LV","MG","MK","MN","MO","MS","MT","MY","NB","NE","NL","NN","NO","OC","PL","PT","RM","RO","RU","SC","SE","SK","SL","SO","SQ","SR","SV","SW","TK","TR","TY","UK","UR","UZ","VI","VO","YI","ZH"])}function i(){var e=n({chrome:.45132810566,iexplorer:.27477061836,firefox:.19384170608,safari:.06186781118,opera:.01574236955}),t={chrome:{win:.89,mac:.09,lin:.02},firefox:{win:.83,mac:.16,lin:.01},opera:{win:.91,mac:.03,lin:.06},safari:{win:.04,mac:.96},iexplorer:["win"]};return[e,n(t[e])]}function s(e){var t={lin:["i686","x86_64"],mac:{Intel:.48,PPC:.01,"U; Intel":.48,"U; PPC":.01},win:["","WOW64","Win64; x64"]};return n(t[e])}function o(e){for(var t="",a=0;e>a;a++)t+="."+n(0,9);return t}var u={net:function(){return[n(1,4),n(0,9),n(1e4,99999),n(0,9)].join(".")},nt:function(){return n(5,6)+"."+n(0,3)},ie:function(){return n(7,11)},trident:function(){return n(3,7)+"."+n(0,1)},osx:function(e){return[10,n(5,10),n(0,9)].join(e||".")},chrome:function(){return[n(13,39),0,n(800,899),0].join(".")},presto:function(){return"2.9."+n(160,190)},presto2:function(){return n(10,12)+".00"},safari:function(){return n(531,538)+"."+n(0,2)+"."+n(0,2)}},c={firefox:function(e){var t=n(5,15)+o(2),a="Gecko/20100101 Firefox/"+t,r=s(e),i="win"===e?"(Windows NT "+u.nt()+(r?"; "+r:""):"mac"===e?"(Macintosh; "+r+" Mac OS X "+u.osx():"(X11; Linux "+r;return"Mozilla/5.0 "+i+"; rv:"+t.slice(0,-2)+") "+a},iexplorer:function(){var e=u.ie();return e>=11?"Mozilla/5.0 (Windows NT 6."+n(1,3)+"; Trident/7.0; "+n(["Touch; ",""])+"rv:11.0) like Gecko":"Mozilla/5.0 (compatible; MSIE "+e+".0; Windows NT "+u.nt()+"; Trident/"+u.trident()+(1===n(0,1)?"; .NET CLR "+u.net():"")+")"},opera:function(e){var t=" Presto/"+u.presto()+" Version/"+u.presto2()+")",a="win"===e?"(Windows NT "+u.nt()+"; U; "+r()+t:"lin"===e?"(X11; Linux "+s(e)+"; U; "+r()+t:"(Macintosh; Intel Mac OS X "+u.osx()+" U; "+r()+" Presto/"+u.presto()+" Version/"+u.presto2()+")";return"Opera/"+n(9,14)+"."+n(0,99)+" "+a},safari:function l(e){var l=u.safari(),t=n(4,7)+"."+n(0,1)+"."+n(0,10),a="mac"===e?"(Macintosh; "+s("mac")+" Mac OS X "+u.osx("_")+" rv:"+n(2,6)+".0; "+r()+") ":"(Windows; U; Windows NT "+u.nt()+")";return"Mozilla/5.0 "+a+"AppleWebKit/"+l+" (KHTML, like Gecko) Version/"+t+" Safari/"+l},chrome:function(e){var t=u.safari(),a="mac"===e?"(Macintosh; "+s("mac")+" Mac OS X "+u.osx("_")+") ":"win"===e?"(Windows; U; Windows NT "+u.nt()+")":"(X11; Linux "+s(e);return"Mozilla/5.0 "+a+" AppleWebKit/"+t+" (KHTML, like Gecko) Chrome/"+u.chrome()+" Safari/"+t}};a.generate=function(){var e=i();return c[e[0]](e[1])}},{}],137:[function(e,t,a){a.read=function(e,t,a,n,r){var i,s,o=8*r-n-1,u=(1<>1,l=-7,f=a?r-1:0,p=a?-1:1,m=e[t+f];for(f+=p,i=m&(1<<-l)-1,m>>=-l,l+=o;l>0;i=256*i+e[t+f],f+=p,l-=8);for(s=i&(1<<-l)-1,i>>=-l,l+=n;l>0;s=256*s+e[t+f],f+=p,l-=8);if(0===i)i=1-c;else{if(i===u)return s?NaN:(m?-1:1)*(1/0);s+=Math.pow(2,n),i-=c}return(m?-1:1)*s*Math.pow(2,i-n)},a.write=function(e,t,a,n,r,i){var s,o,u,c=8*i-r-1,l=(1<>1,p=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,m=n?0:i-1,h=n?1:-1,d=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,s=l):(s=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-s))<1&&(s--,u*=2),t+=s+f>=1?p/u:p*Math.pow(2,1-f),t*u>=2&&(s++,u/=2),s+f>=l?(o=0,s=l):s+f>=1?(o=(t*u-1)*Math.pow(2,r),s+=f):(o=t*Math.pow(2,f-1)*Math.pow(2,r),s=0));r>=8;e[a+m]=255&o,m+=h,o/=256,r-=8);for(s=s<0;e[a+m]=255&s,m+=h,s/=256,c-=8);e[a+m-h]|=128*d}},{}],138:[function(e,t,a){t.exports=e("./lib/inherit")},{"./lib/inherit":139}],139:[function(t,a,n){!function(t){function r(e){var t=p(e);if(w)for(var a,n=0;a=E[n++];)e.hasOwnProperty(a)&&t.push(a);return t}function i(e,t,a){for(var n,i,s=r(a),o=0,c=s.length;c>o;)"__self"!==(n=s[o++])&&(i=a[n],g(i)&&(!u||i.toString().indexOf(".__base")>-1)?t[n]=function(a,n){var r=e[a]?e[a]:"__constructor"===a?t.__self.__parent:y;return function(){var e=this.__base;this.__base=r;var t=n.apply(this,arguments);return this.__base=e,t}}(n,i):t[n]=i)}function s(e,t){for(var a,n=1;a=e[n++];)t?g(a)?o.self(t,a.prototype,a):o.self(t,a):t=g(a)?o(e[0],a.prototype,a):o(e[0],a);return t||e[0]}function o(){var e=arguments,t=d(e[0]),a=t||g(e[0]),n=a?t?s(e[0]):e[0]:c,r=e[a?1:0]||{},o=e[a?2:1],u=r.__constructor||a&&n.prototype.__constructor?function(){return this.__constructor.apply(this,arguments)}:a?function(){return n.apply(this,arguments)}:function(){};if(!a)return u.prototype=r,u.prototype.__self=u.prototype.constructor=u,m(u,o);m(u,n),u.__parent=n;var l=n.prototype,p=u.prototype=f(l);return p.__self=p.constructor=u,r&&i(l,p,r),o&&i(n,u,o),u}var u=function(){"_"}.toString().indexOf("_")>-1,c=function(){},l=Object.prototype.hasOwnProperty,f=Object.create||function(e){var t=function(){};return t.prototype=e,new t},p=Object.keys||function(e){var t=[];for(var a in e)l.call(e,a)&&t.push(a);return t},m=function(e,t){for(var a in t)l.call(t,a)&&(e[a]=t[a]);return e},h=Object.prototype.toString,d=Array.isArray||function(e){return"[object Array]"===h.call(e)},g=function(e){return"[object Function]"===h.call(e)},y=function(){},w=!0,v={toString:""};for(var b in v)v.hasOwnProperty(b)&&(w=!1);var E=w?["toString","valueOf"]:null;o.self=function(){var e=arguments,t=d(e[0]),a=t?s(e[0],e[0][0]):e[0],n=e[1],r=e[2],o=a.prototype;return n&&i(o,o,n),r&&i(a,a,r),a};var A=!0;"object"==typeof n&&(a.exports=o,A=!1),"object"==typeof modules&&(modules.define("inherit",function(e){e(o)}),A=!1),"function"==typeof e&&(e(function(e,t,a){a.exports=o}),A=!1),A&&(t.inherit=o)}(this)},{}],140:[function(e,t,a){t.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},{}],141:[function(e,t,a){!function(a){"use strict";var n,r=a.Base64,i="2.1.9";if("undefined"!=typeof t&&t.exports)try{n=e("buffer").Buffer}catch(s){}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=function(e){for(var t={},a=0,n=e.length;n>a;a++)t[e.charAt(a)]=a;return t}(o),c=String.fromCharCode,l=function(e){if(e.length<2){var t=e.charCodeAt(0);return 128>t?e:2048>t?c(192|t>>>6)+c(128|63&t):c(224|t>>>12&15)+c(128|t>>>6&63)+c(128|63&t)}var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return c(240|t>>>18&7)+c(128|t>>>12&63)+c(128|t>>>6&63)+c(128|63&t)},f=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,p=function(e){return e.replace(f,l)},m=function(e){var t=[0,2,1][e.length%3],a=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0),n=[o.charAt(a>>>18),o.charAt(a>>>12&63),t>=2?"=":o.charAt(a>>>6&63),t>=1?"=":o.charAt(63&a)];return n.join("")},h=a.btoa?function(e){return a.btoa(e)}:function(e){return e.replace(/[\s\S]{1,3}/g,m)},d=n?function(e){return(e.constructor===n.constructor?e:new n(e)).toString("base64")}:function(e){return h(p(e))},g=function(e,t){return t?d(String(e)).replace(/[+\/]/g,function(e){return"+"==e?"-":"_"}).replace(/=/g,""):d(String(e))},y=function(e){return g(e,!0)},w=new RegExp(["[À-ß][€-¿]","[à-ï][€-¿]{2}","[ð-÷][€-¿]{3}"].join("|"),"g"),v=function(e){switch(e.length){case 4:var t=(7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3),a=t-65536;return c((a>>>10)+55296)+c((1023&a)+56320);case 3:return c((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return c((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},b=function(e){return e.replace(w,v)},E=function(e){var t=e.length,a=t%4,n=(t>0?u[e.charAt(0)]<<18:0)|(t>1?u[e.charAt(1)]<<12:0)|(t>2?u[e.charAt(2)]<<6:0)|(t>3?u[e.charAt(3)]:0),r=[c(n>>>16),c(n>>>8&255),c(255&n)];return r.length-=[0,0,2,1][a],r.join("")},A=a.atob?function(e){return a.atob(e)}:function(e){return e.replace(/[\s\S]{1,4}/g,E)},D=n?function(e){return(e.constructor===n.constructor?e:new n(e,"base64")).toString()}:function(e){return b(A(e))},j=function(e){return D(String(e).replace(/[-_]/g,function(e){return"-"==e?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))},x=function(){var e=a.Base64;return a.Base64=r,e};if(a.Base64={VERSION:i,atob:A,btoa:h,fromBase64:j,toBase64:g,utob:p,encode:g,encodeURI:y,btou:b,decode:j,noConflict:x},"function"==typeof Object.defineProperty){var C=function(e){return{value:e,enumerable:!1,writable:!0,configurable:!0}};a.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",C(function(){return j(this)})),Object.defineProperty(String.prototype,"toBase64",C(function(e){return g(this,e)})),Object.defineProperty(String.prototype,"toBase64URI",C(function(){return g(this,!0)}))}}a.Meteor&&(Base64=a.Base64)}(this)},{buffer:18}],142:[function(e,t,a){"use strict";var n=e("./lib/js-yaml.js");t.exports=n},{"./lib/js-yaml.js":143}],143:[function(e,t,a){"use strict";function n(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var r=e("./js-yaml/loader"),i=e("./js-yaml/dumper");t.exports.Type=e("./js-yaml/type"),t.exports.Schema=e("./js-yaml/schema"),t.exports.FAILSAFE_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.JSON_SCHEMA=e("./js-yaml/schema/json"),t.exports.CORE_SCHEMA=e("./js-yaml/schema/core"),t.exports.DEFAULT_SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_FULL_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.load=r.load,t.exports.loadAll=r.loadAll,t.exports.safeLoad=r.safeLoad,t.exports.safeLoadAll=r.safeLoadAll,t.exports.dump=i.dump,t.exports.safeDump=i.safeDump,t.exports.YAMLException=e("./js-yaml/exception"),t.exports.MINIMAL_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.scan=n("scan"),t.exports.parse=n("parse"),t.exports.compose=n("compose"),t.exports.addConstructor=n("addConstructor")},{"./js-yaml/dumper":145,"./js-yaml/exception":146,"./js-yaml/loader":147,"./js-yaml/schema":149,"./js-yaml/schema/core":150,"./js-yaml/schema/default_full":151,"./js-yaml/schema/default_safe":152,"./js-yaml/schema/failsafe":153,"./js-yaml/schema/json":154,"./js-yaml/type":155}],144:[function(e,t,a){"use strict";function n(e){return"undefined"==typeof e||null===e}function r(e){return"object"==typeof e&&null!==e}function i(e){return Array.isArray(e)?e:n(e)?[]:[e]}function s(e,t){var a,n,r,i;if(t)for(i=Object.keys(t),a=0,n=i.length;n>a;a+=1)r=i[a],e[r]=t[r];return e}function o(e,t){var a,n="";for(a=0;t>a;a+=1)n+=e;return n}function u(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e}t.exports.isNothing=n,t.exports.isObject=r,t.exports.toArray=i,t.exports.repeat=o,t.exports.isNegativeZero=u,t.exports.extend=s},{}],145:[function(e,t,a){"use strict";function n(e,t){var a,n,r,i,s,o,u;if(null===t)return{};for(a={},n=Object.keys(t),r=0,i=n.length;i>r;r+=1)s=n[r],o=String(t[s]),"!!"===s.slice(0,2)&&(s="tag:yaml.org,2002:"+s.slice(2)),u=e.compiledTypeMap[s],u&&F.call(u.styleAliases,o)&&(o=u.styleAliases[o]),a[s]=o;return a}function r(e){var t,a,n;if(t=e.toString(16).toUpperCase(),255>=e)a="x",n=2;else if(65535>=e)a="u",n=4;else{if(!(4294967295>=e))throw new C("code point within a string may not be greater than 0xFFFFFFFF");a="U",n=8}return"\\"+a+x.repeat("0",n-t.length)+t}function i(e){this.schema=e.schema||_,this.indent=Math.max(1,e.indent||2),this.skipInvalid=e.skipInvalid||!1,this.flowLevel=x.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=n(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function s(e,t){for(var a,n=x.repeat(" ",t),r=0,i=-1,s="",o=e.length;o>r;)i=e.indexOf("\n",r),-1===i?(a=e.slice(r),r=o):(a=e.slice(r,i+1),r=i+1),a.length&&"\n"!==a&&(s+=n),s+=a;return s}function o(e,t){return"\n"+x.repeat(" ",e.indent*t)}function u(e,t){var a,n,r;for(a=0,n=e.implicitTypes.length;n>a;a+=1)if(r=e.implicitTypes[a],r.resolve(t))return!0;return!1}function c(e){this.source=e,this.result="",this.checkpoint=0}function l(e,t,a,n){var r,i,o,l,p,d,g,y,w,v,b,E,A,D,j,x,C,_,S,z,F;if(0===t.length)return void(e.dump="''");if(-1!==te.indexOf(t))return void(e.dump="'"+t+"'");for(r=!0,i=t.length?t.charCodeAt(0):0,o=M===i||M===t.charCodeAt(t.length-1),(K===i||J===i||q===i||Y===i)&&(r=!1),o?(r=!1,l=!1,p=!1):(l=!n,p=!n),d=!0,g=new c(t),y=!1,w=0,v=0,b=e.indent*a,E=e.lineWidth,-1===E&&(E=9007199254740991),40>b?E-=b:E=40,D=0;D0&&(C=t.charCodeAt(D-1),C===M&&(p=!1,l=!1)),l&&(_=D-w,w=D,_>v&&(v=_))),A!==O&&(d=!1),g.takeUpTo(D),g.escapeChar())}if(r&&u(e,t)&&(r=!1),S="",(l||p)&&(z=0,t.charCodeAt(t.length-1)===I&&(z+=1,t.charCodeAt(t.length-2)===I&&(z+=1)),0===z?S="-":2===z&&(S="+")),p&&E>v&&(l=!1),y||(p=!1),r)e.dump=t;else if(d)e.dump="'"+t+"'";else if(l)F=f(t,E),e.dump=">"+S+"\n"+s(F,b);else if(p)S||(t=t.replace(/\n$/,"")),e.dump="|"+S+"\n"+s(t,b);else{if(!g)throw new Error("Failed to dump scalar value");g.finish(),e.dump='"'+g.result+'"'}}function f(e,t){var a,n="",r=0,i=e.length,s=/\n+$/.exec(e);for(s&&(i=s.index+1);i>r;)a=e.indexOf("\n",r),a>i||-1===a?(n&&(n+="\n\n"),n+=p(e.slice(r,i),t),r=i):(n&&(n+="\n\n"),n+=p(e.slice(r,a),t),r=a+1);return s&&"\n"!==s[0]&&(n+=s[0]),n}function p(e,t){if(""===e)return e;for(var a,n,r,i=/[^\s] [^\s]/g,s="",o=0,u=0,c=i.exec(e);c;)a=c.index,a-u>t&&(n=o!==u?o:a,s&&(s+="\n"),r=e.slice(u,n),s+=r,u=n+1),o=a+1,c=i.exec(e);return s&&(s+="\n"),s+=u!==o&&e.length-u>t?e.slice(u,o)+"\n"+e.slice(o+1):e.slice(u)}function m(e){return k!==e&&I!==e&&R!==e&&$!==e&&W!==e&&V!==e&&Z!==e&&Q!==e&&B!==e&&L!==e&&U!==e&&P!==e&&X!==e&&G!==e&&N!==e&&O!==e&&T!==e&&H!==e&&!ee[e]&&!h(e)}function h(e){return!(e>=32&&126>=e||133===e||e>=160&&55295>=e||e>=57344&&65533>=e||e>=65536&&1114111>=e)}function d(e,t,a){var n,r,i="",s=e.tag;for(n=0,r=a.length;r>n;n+=1)b(e,t,a[n],!1,!1)&&(0!==n&&(i+=", "),i+=e.dump);e.tag=s,e.dump="["+i+"]"}function g(e,t,a,n){var r,i,s="",u=e.tag;for(r=0,i=a.length;i>r;r+=1)b(e,t+1,a[r],!0,!0)&&(n&&0===r||(s+=o(e,t)),s+="- "+e.dump);e.tag=u,e.dump=s||"[]"}function y(e,t,a){var n,r,i,s,o,u="",c=e.tag,l=Object.keys(a);for(n=0,r=l.length;r>n;n+=1)o="",0!==n&&(o+=", "),i=l[n],s=a[i],b(e,t,i,!1,!1)&&(e.dump.length>1024&&(o+="? "),o+=e.dump+": ",b(e,t,s,!1,!1)&&(o+=e.dump,u+=o));e.tag=c,e.dump="{"+u+"}"}function w(e,t,a,n){var r,i,s,u,c,l,f="",p=e.tag,m=Object.keys(a);if(e.sortKeys===!0)m.sort();else if("function"==typeof e.sortKeys)m.sort(e.sortKeys);else if(e.sortKeys)throw new C("sortKeys must be a boolean or a function");for(r=0,i=m.length;i>r;r+=1)l="",n&&0===r||(l+=o(e,t)),s=m[r],u=a[s],b(e,t+1,s,!0,!0,!0)&&(c=null!==e.tag&&"?"!==e.tag||e.dump&&e.dump.length>1024,c&&(l+=e.dump&&I===e.dump.charCodeAt(0)?"?":"? "),l+=e.dump,c&&(l+=o(e,t)),b(e,t+1,u,!0,c)&&(l+=e.dump&&I===e.dump.charCodeAt(0)?":":": ",l+=e.dump,f+=l));e.tag=p,e.dump=f||"{}"}function v(e,t,a){var n,r,i,s,o,u;for(r=a?e.explicitTypes:e.implicitTypes,i=0,s=r.length;s>i;i+=1)if(o=r[i],(o.instanceOf||o.predicate)&&(!o.instanceOf||"object"==typeof t&&t instanceof o.instanceOf)&&(!o.predicate||o.predicate(t))){if(e.tag=a?o.tag:"?",o.represent){if(u=e.styleMap[o.tag]||o.defaultStyle,"[object Function]"===z.call(o.represent))n=o.represent(t,u);else{if(!F.call(o.represent,u))throw new C("!<"+o.tag+'> tag resolver accepts not "'+u+'" style');n=o.represent[u](t,u)}e.dump=n}return!0}return!1}function b(e,t,a,n,r,i){e.tag=null,e.dump=a,v(e,a,!1)||v(e,a,!0);var s=z.call(e.dump);n&&(n=0>e.flowLevel||e.flowLevel>t);var o,u,c="[object Object]"===s||"[object Array]"===s;if(c&&(o=e.duplicates.indexOf(a),u=-1!==o),(null!==e.tag&&"?"!==e.tag||u||2!==e.indent&&t>0)&&(r=!1),u&&e.usedDuplicates[o])e.dump="*ref_"+o;else{if(c&&u&&!e.usedDuplicates[o]&&(e.usedDuplicates[o]=!0),"[object Object]"===s)n&&0!==Object.keys(e.dump).length?(w(e,t,e.dump,r),u&&(e.dump="&ref_"+o+e.dump)):(y(e,t,e.dump),u&&(e.dump="&ref_"+o+" "+e.dump));else if("[object Array]"===s)n&&0!==e.dump.length?(g(e,t,e.dump,r),u&&(e.dump="&ref_"+o+e.dump)):(d(e,t,e.dump),u&&(e.dump="&ref_"+o+" "+e.dump));else{if("[object String]"!==s){if(e.skipInvalid)return!1;throw new C("unacceptable kind of an object to dump "+s)}"?"!==e.tag&&l(e,e.dump,t,i)}null!==e.tag&&"?"!==e.tag&&(e.dump="!<"+e.tag+"> "+e.dump)}return!0}function E(e,t){var a,n,r=[],i=[];for(A(e,r,i),a=0,n=i.length;n>a;a+=1)t.duplicates.push(r[i[a]]);t.usedDuplicates=new Array(n)}function A(e,t,a){var n,r,i;if(null!==e&&"object"==typeof e)if(r=t.indexOf(e),-1!==r)-1===a.indexOf(r)&&a.push(r);else if(t.push(e),Array.isArray(e))for(r=0,i=e.length;i>r;r+=1)A(e[r],t,a);else for(n=Object.keys(e),r=0,i=n.length;i>r;r+=1)A(e[n[r]],t,a); -}function D(e,t){t=t||{};var a=new i(t);return E(e,a),b(a,0,e,!0,!0)?a.dump+"\n":""}function j(e,t){return D(e,x.extend({schema:S},t))}var x=e("./common"),C=e("./exception"),_=e("./schema/default_full"),S=e("./schema/default_safe"),z=Object.prototype.toString,F=Object.prototype.hasOwnProperty,k=9,I=10,R=13,M=32,P=33,O=34,B=35,T=37,L=38,N=39,U=42,$=44,K=45,H=58,G=62,J=63,q=64,W=91,V=93,Y=96,Z=123,X=124,Q=125,ee={};ee[0]="\\0",ee[7]="\\a",ee[8]="\\b",ee[9]="\\t",ee[10]="\\n",ee[11]="\\v",ee[12]="\\f",ee[13]="\\r",ee[27]="\\e",ee[34]='\\"',ee[92]="\\\\",ee[133]="\\N",ee[160]="\\_",ee[8232]="\\L",ee[8233]="\\P";var te=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];c.prototype.takeUpTo=function(e){var t;if(e checkpoint"),t.position=e,t.checkpoint=this.checkpoint,t;return this.result+=this.source.slice(this.checkpoint,e),this.checkpoint=e,this},c.prototype.escapeChar=function(){var e,t;return e=this.source.charCodeAt(this.checkpoint),t=ee[e]||r(e),this.result+=t,this.checkpoint+=1,this},c.prototype.finish=function(){this.source.length>this.checkpoint&&this.takeUpTo(this.source.length)},t.exports.dump=D,t.exports.safeDump=j},{"./common":144,"./exception":146,"./schema/default_full":151,"./schema/default_safe":152}],146:[function(e,t,a){"use strict";function n(e,t){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name="YAMLException",this.reason=e,this.mark=t,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():"")}var r=e("inherit");r(n,Error),n.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t},t.exports=n},{inherit:138}],147:[function(e,t,a){"use strict";function n(e){return 10===e||13===e}function r(e){return 9===e||32===e}function i(e){return 9===e||32===e||10===e||13===e}function s(e){return 44===e||91===e||93===e||123===e||125===e}function o(e){var t;return e>=48&&57>=e?e-48:(t=32|e,t>=97&&102>=t?t-97+10:-1)}function u(e){return 120===e?2:117===e?4:85===e?8:0}function c(e){return e>=48&&57>=e?e-48:-1}function l(e){return 48===e?"\x00":97===e?"":98===e?"\b":116===e?" ":9===e?" ":110===e?"\n":118===e?"\x0B":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"…":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function f(e){return 65535>=e?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function p(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||H,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function m(e,t){return new U(t,new $(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function h(e,t){throw m(e,t)}function d(e,t){e.onWarning&&e.onWarning.call(null,m(e,t))}function g(e,t,a,n){var r,i,s,o;if(a>t){if(o=e.input.slice(t,a),n)for(r=0,i=o.length;i>r;r+=1)s=o.charCodeAt(r),9===s||s>=32&&1114111>=s||h(e,"expected valid JSON character");else Q.test(o)&&h(e,"the stream contains non-printable characters");e.result+=o}}function y(e,t,a){var n,r,i,s;for(N.isObject(a)||h(e,"cannot merge mappings; the provided source object is unacceptable"),n=Object.keys(a),i=0,s=n.length;s>i;i+=1)r=n[i],G.call(t,r)||(t[r]=a[r])}function w(e,t,a,n,r){var i,s;if(n=String(n),null===t&&(t={}),"tag:yaml.org,2002:merge"===a)if(Array.isArray(r))for(i=0,s=r.length;s>i;i+=1)y(e,t,r[i]);else y(e,t,r);else t[n]=r;return t}function v(e){var t;t=e.input.charCodeAt(e.position),10===t?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):h(e,"a line break is expected"),e.line+=1,e.lineStart=e.position}function b(e,t,a){for(var i=0,s=e.input.charCodeAt(e.position);0!==s;){for(;r(s);)s=e.input.charCodeAt(++e.position);if(t&&35===s)do s=e.input.charCodeAt(++e.position);while(10!==s&&13!==s&&0!==s);if(!n(s))break;for(v(e),s=e.input.charCodeAt(e.position),i++,e.lineIndent=0;32===s;)e.lineIndent++,s=e.input.charCodeAt(++e.position)}return-1!==a&&0!==i&&e.lineIndent1&&(e.result+=N.repeat("\n",t-1))}function D(e,t,a){var o,u,c,l,f,p,m,h,d,y=e.kind,w=e.result;if(d=e.input.charCodeAt(e.position),i(d)||s(d)||35===d||38===d||42===d||33===d||124===d||62===d||39===d||34===d||37===d||64===d||96===d)return!1;if((63===d||45===d)&&(u=e.input.charCodeAt(e.position+1),i(u)||a&&s(u)))return!1;for(e.kind="scalar",e.result="",c=l=e.position,f=!1;0!==d;){if(58===d){if(u=e.input.charCodeAt(e.position+1),i(u)||a&&s(u))break}else if(35===d){if(o=e.input.charCodeAt(e.position-1),i(o))break}else{if(e.position===e.lineStart&&E(e)||a&&s(d))break;if(n(d)){if(p=e.line,m=e.lineStart,h=e.lineIndent,b(e,!1,-1),e.lineIndent>=t){f=!0,d=e.input.charCodeAt(e.position);continue}e.position=l,e.line=p,e.lineStart=m,e.lineIndent=h;break}}f&&(g(e,c,l,!1),A(e,e.line-p),c=l=e.position,f=!1),r(d)||(l=e.position+1),d=e.input.charCodeAt(++e.position)}return g(e,c,l,!1),e.result?!0:(e.kind=y,e.result=w,!1)}function j(e,t){var a,r,i;if(a=e.input.charCodeAt(e.position),39!==a)return!1;for(e.kind="scalar",e.result="",e.position++,r=i=e.position;0!==(a=e.input.charCodeAt(e.position));)if(39===a){if(g(e,r,e.position,!0),a=e.input.charCodeAt(++e.position),39!==a)return!0;r=i=e.position,e.position++}else n(a)?(g(e,r,i,!0),A(e,b(e,!1,t)),r=i=e.position):e.position===e.lineStart&&E(e)?h(e,"unexpected end of the document within a single quoted scalar"):(e.position++,i=e.position);h(e,"unexpected end of the stream within a single quoted scalar")}function x(e,t){var a,r,i,s,c,l;if(l=e.input.charCodeAt(e.position),34!==l)return!1;for(e.kind="scalar",e.result="",e.position++,a=r=e.position;0!==(l=e.input.charCodeAt(e.position));){if(34===l)return g(e,a,e.position,!0),e.position++,!0;if(92===l){if(g(e,a,e.position,!0),l=e.input.charCodeAt(++e.position),n(l))b(e,!1,t);else if(256>l&&re[l])e.result+=ie[l],e.position++;else if((c=u(l))>0){for(i=c,s=0;i>0;i--)l=e.input.charCodeAt(++e.position),(c=o(l))>=0?s=(s<<4)+c:h(e,"expected hexadecimal character");e.result+=f(s),e.position++}else h(e,"unknown escape sequence");a=r=e.position}else n(l)?(g(e,a,r,!0),A(e,b(e,!1,t)),a=r=e.position):e.position===e.lineStart&&E(e)?h(e,"unexpected end of the document within a double quoted scalar"):(e.position++,r=e.position)}h(e,"unexpected end of the stream within a double quoted scalar")}function C(e,t){var a,n,r,s,o,u,c,l,f,p,m,d=!0,g=e.tag,y=e.anchor;if(m=e.input.charCodeAt(e.position),91===m)s=93,c=!1,n=[];else{if(123!==m)return!1;s=125,c=!0,n={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=n),m=e.input.charCodeAt(++e.position);0!==m;){if(b(e,!0,t),m=e.input.charCodeAt(e.position),m===s)return e.position++,e.tag=g,e.anchor=y,e.kind=c?"mapping":"sequence",e.result=n,!0;d||h(e,"missed comma between flow collection entries"),f=l=p=null,o=u=!1,63===m&&(r=e.input.charCodeAt(e.position+1),i(r)&&(o=u=!0,e.position++,b(e,!0,t))),a=e.line,R(e,t,J,!1,!0),f=e.tag,l=e.result,b(e,!0,t),m=e.input.charCodeAt(e.position),!u&&e.line!==a||58!==m||(o=!0,m=e.input.charCodeAt(++e.position),b(e,!0,t),R(e,t,J,!1,!0),p=e.result),c?w(e,n,f,l,p):o?n.push(w(e,null,f,l,p)):n.push(l),b(e,!0,t),m=e.input.charCodeAt(e.position),44===m?(d=!0,m=e.input.charCodeAt(++e.position)):d=!1}h(e,"unexpected end of the stream within a flow collection")}function _(e,t){var a,i,s,o,u=Y,l=!1,f=t,p=0,m=!1;if(o=e.input.charCodeAt(e.position),124===o)i=!1;else{if(62!==o)return!1;i=!0}for(e.kind="scalar",e.result="";0!==o;)if(o=e.input.charCodeAt(++e.position),43===o||45===o)Y===u?u=43===o?X:Z:h(e,"repeat of a chomping mode identifier");else{if(!((s=c(o))>=0))break;0===s?h(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?h(e,"repeat of an indentation width identifier"):(f=t+s-1,l=!0)}if(r(o)){do o=e.input.charCodeAt(++e.position);while(r(o));if(35===o)do o=e.input.charCodeAt(++e.position);while(!n(o)&&0!==o)}for(;0!==o;){for(v(e),e.lineIndent=0,o=e.input.charCodeAt(e.position);(!l||e.lineIndentf&&(f=e.lineIndent),n(o))p++;else{if(e.lineIndentt)&&0!==r)h(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(R(e,t,V,!0,s)&&(g?m=e.result:d=e.result),g||(w(e,f,p,m,d),p=m=d=null),b(e,!0,-1),u=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==u)h(e,"bad indentation of a mapping entry");else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentu;u+=1)if(l=e.implicitTypes[u],l.resolve(e.result)){e.result=l.construct(e.result),e.tag=l.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else G.call(e.typeMap,e.tag)?(l=e.typeMap[e.tag],null!==e.result&&l.kind!==e.kind&&h(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):h(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):h(e,"unknown tag !<"+e.tag+">");return null!==e.tag||null!==e.anchor||g}function M(e){var t,a,s,o,u=e.position,c=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(o=e.input.charCodeAt(e.position))&&(b(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(c=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!i(o);)o=e.input.charCodeAt(++e.position);for(a=e.input.slice(t,e.position),s=[],a.length<1&&h(e,"directive name must not be less than one character in length");0!==o;){for(;r(o);)o=e.input.charCodeAt(++e.position);if(35===o){do o=e.input.charCodeAt(++e.position);while(0!==o&&!n(o));break}if(n(o))break;for(t=e.position;0!==o&&!i(o);)o=e.input.charCodeAt(++e.position);s.push(e.input.slice(t,e.position))}0!==o&&v(e),G.call(oe,a)?oe[a](e,a,s):d(e,'unknown document directive "'+a+'"')}return b(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,b(e,!0,-1)):c&&h(e,"directives end mark is expected"),R(e,e.lineIndent-1,V,!1,!0),b(e,!0,-1),e.checkLineBreaks&&ee.test(e.input.slice(u,e.position))&&d(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&E(e)?void(46===e.input.charCodeAt(e.position)&&(e.position+=3,b(e,!0,-1))):void(e.positionn;n+=1)t(i[n])}function B(e,t){var a=P(e,t);if(0!==a.length){if(1===a.length)return a[0];throw new U("expected a single document in the stream, but found more")}}function T(e,t,a){O(e,t,N.extend({schema:K},a))}function L(e,t){return B(e,N.extend({schema:K},t))}for(var N=e("./common"),U=e("./exception"),$=e("./mark"),K=e("./schema/default_safe"),H=e("./schema/default_full"),G=Object.prototype.hasOwnProperty,J=1,q=2,W=3,V=4,Y=1,Z=2,X=3,Q=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,ee=/[\x85\u2028\u2029]/,te=/[,\[\]\{\}]/,ae=/^(?:!|!!|![a-z\-]+!)$/i,ne=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i,re=new Array(256),ie=new Array(256),se=0;256>se;se++)re[se]=l(se)?1:0,ie[se]=l(se);var oe={YAML:function(e,t,a){var n,r,i;null!==e.version&&h(e,"duplication of %YAML directive"),1!==a.length&&h(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(a[0]),null===n&&h(e,"ill-formed argument of the YAML directive"),r=parseInt(n[1],10),i=parseInt(n[2],10),1!==r&&h(e,"unacceptable YAML version of the document"),e.version=a[0],e.checkLineBreaks=2>i,1!==i&&2!==i&&d(e,"unsupported YAML version of the document")},TAG:function(e,t,a){var n,r;2!==a.length&&h(e,"TAG directive accepts exactly two arguments"),n=a[0],r=a[1],ae.test(n)||h(e,"ill-formed tag handle (first argument) of the TAG directive"),G.call(e.tagMap,n)&&h(e,'there is a previously declared suffix for "'+n+'" tag handle'),ne.test(r)||h(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=r}};t.exports.loadAll=O,t.exports.load=B,t.exports.safeLoadAll=T,t.exports.safeLoad=L},{"./common":144,"./exception":146,"./mark":148,"./schema/default_full":151,"./schema/default_safe":152}],148:[function(e,t,a){"use strict";function n(e,t,a,n,r){this.name=e,this.buffer=t,this.position=a,this.line=n,this.column=r}var r=e("./common");n.prototype.getSnippet=function(e,t){var a,n,i,s,o;if(!this.buffer)return null;for(e=e||4,t=t||75,a="",n=this.position;n>0&&-1==="\x00\r\n…\u2028\u2029".indexOf(this.buffer.charAt(n-1));)if(n-=1,this.position-n>t/2-1){a=" ... ",n+=5;break}for(i="",s=this.position;st/2-1){i=" ... ",s-=5;break}return o=this.buffer.slice(n,s),r.repeat(" ",e)+a+o+i+"\n"+r.repeat(" ",e+this.position-n+a.length)+"^"},n.prototype.toString=function(e){var t,a="";return this.name&&(a+='in "'+this.name+'" '),a+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(a+=":\n"+t)),a},t.exports=n},{"./common":144}],149:[function(e,t,a){"use strict";function n(e,t,a){var r=[];return e.include.forEach(function(e){a=n(e,t,a)}),e[t].forEach(function(e){a.forEach(function(t,a){t.tag===e.tag&&r.push(a)}),a.push(e)}),a.filter(function(e,t){return-1===r.indexOf(t)})}function r(){function e(e){n[e.tag]=e}var t,a,n={};for(t=0,a=arguments.length;a>t;t+=1)arguments[t].forEach(e);return n}function i(e){this.include=e.include||[],this.implicit=e.implicit||[],this.explicit=e.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=n(this,"implicit",[]),this.compiledExplicit=n(this,"explicit",[]),this.compiledTypeMap=r(this.compiledImplicit,this.compiledExplicit)}var s=e("./common"),o=e("./exception"),u=e("./type");i.DEFAULT=null,i.create=function(){var e,t;switch(arguments.length){case 1:e=i.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new o("Wrong number of arguments for Schema.create function")}if(e=s.toArray(e),t=s.toArray(t),!e.every(function(e){return e instanceof i}))throw new o("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!t.every(function(e){return e instanceof u}))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new i({include:e,explicit:t})},t.exports=i},{"./common":144,"./exception":146,"./type":155}],150:[function(e,t,a){"use strict";var n=e("../schema");t.exports=new n({include:[e("./json")]})},{"../schema":149,"./json":154}],151:[function(e,t,a){"use strict";var n=e("../schema");t.exports=n.DEFAULT=new n({include:[e("./default_safe")],explicit:[e("../type/js/undefined"),e("../type/js/regexp"),e("../type/js/function")]})},{"../schema":149,"../type/js/function":160,"../type/js/regexp":161,"../type/js/undefined":162,"./default_safe":152}],152:[function(e,t,a){"use strict";var n=e("../schema");t.exports=new n({include:[e("./core")],implicit:[e("../type/timestamp"),e("../type/merge")],explicit:[e("../type/binary"),e("../type/omap"),e("../type/pairs"),e("../type/set")]})},{"../schema":149,"../type/binary":156,"../type/merge":164,"../type/omap":166,"../type/pairs":167,"../type/set":169,"../type/timestamp":171,"./core":150}],153:[function(e,t,a){"use strict";var n=e("../schema");t.exports=new n({explicit:[e("../type/str"),e("../type/seq"),e("../type/map")]})},{"../schema":149,"../type/map":163,"../type/seq":168,"../type/str":170}],154:[function(e,t,a){"use strict";var n=e("../schema");t.exports=new n({include:[e("./failsafe")],implicit:[e("../type/null"),e("../type/bool"),e("../type/int"),e("../type/float")]})},{"../schema":149,"../type/bool":157,"../type/float":158,"../type/int":159,"../type/null":165,"./failsafe":153}],155:[function(e,t,a){"use strict";function n(e){var t={};return null!==e&&Object.keys(e).forEach(function(a){e[a].forEach(function(e){t[String(e)]=a})}),t}function r(e,t){if(t=t||{},Object.keys(t).forEach(function(t){if(-1===s.indexOf(t))throw new i('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.defaultStyle=t.defaultStyle||null,this.styleAliases=n(t.styleAliases||null),-1===o.indexOf(this.kind))throw new i('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var i=e("./exception"),s=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],o=["scalar","sequence","mapping"];t.exports=r},{"./exception":146}],156:[function(e,t,a){"use strict";function n(e){if(null===e)return!1;var t,a,n=0,r=e.length,i=c;for(a=0;r>a;a++)if(t=i.indexOf(e.charAt(a)),!(t>64)){if(0>t)return!1;n+=6}return n%8===0}function r(e){var t,a,n=e.replace(/[\r\n=]/g,""),r=n.length,i=c,s=0,u=[];for(t=0;r>t;t++)t%4===0&&t&&(u.push(s>>16&255),u.push(s>>8&255),u.push(255&s)),s=s<<6|i.indexOf(n.charAt(t));return a=r%4*6,0===a?(u.push(s>>16&255),u.push(s>>8&255),u.push(255&s)):18===a?(u.push(s>>10&255),u.push(s>>2&255)):12===a&&u.push(s>>4&255),o?new o(u):u}function i(e){var t,a,n="",r=0,i=e.length,s=c;for(t=0;i>t;t++)t%3===0&&t&&(n+=s[r>>18&63],n+=s[r>>12&63],n+=s[r>>6&63],n+=s[63&r]),r=(r<<8)+e[t];return a=i%3,0===a?(n+=s[r>>18&63],n+=s[r>>12&63],n+=s[r>>6&63],n+=s[63&r]):2===a?(n+=s[r>>10&63],n+=s[r>>4&63],n+=s[r<<2&63],n+=s[64]):1===a&&(n+=s[r>>2&63],n+=s[r<<4&63],n+=s[64],n+=s[64]),n}function s(e){return o&&o.isBuffer(e)}var o=e("buffer").Buffer,u=e("../type"),c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";t.exports=new u("tag:yaml.org,2002:binary",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i})},{"../type":155,buffer:17}],157:[function(e,t,a){"use strict";function n(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)}function r(e){return"true"===e||"True"===e||"TRUE"===e}function i(e){return"[object Boolean]"===Object.prototype.toString.call(e)}var s=e("../type");t.exports=new s("tag:yaml.org,2002:bool",{kind:"scalar",resolve:n,construct:r,predicate:i,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},{"../type":155}],158:[function(e,t,a){"use strict";function n(e){return null===e?!1:c.test(e)?!0:!1}function r(e){var t,a,n,r;return t=e.replace(/_/g,"").toLowerCase(),a="-"===t[0]?-1:1,r=[],0<="+-".indexOf(t[0])&&(t=t.slice(1)),".inf"===t?1===a?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:0<=t.indexOf(":")?(t.split(":").forEach(function(e){r.unshift(parseFloat(e,10))}),t=0,n=1,r.forEach(function(e){t+=e*n,n*=60}),a*t):a*parseFloat(t,10)}function i(e,t){var a;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(o.isNegativeZero(e))return"-0.0";return a=e.toString(10),l.test(a)?a.replace("e",".e"):a}function s(e){return"[object Number]"===Object.prototype.toString.call(e)&&(0!==e%1||o.isNegativeZero(e))}var o=e("../common"),u=e("../type"),c=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),l=/^[-+]?[0-9]+e/;t.exports=new u("tag:yaml.org,2002:float",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i,defaultStyle:"lowercase"})},{"../common":144,"../type":155}],159:[function(e,t,a){"use strict";function n(e){return e>=48&&57>=e||e>=65&&70>=e||e>=97&&102>=e}function r(e){return e>=48&&55>=e}function i(e){return e>=48&&57>=e}function s(e){if(null===e)return!1;var t,a=e.length,s=0,o=!1;if(!a)return!1;if(t=e[s],("-"===t||"+"===t)&&(t=e[++s]),"0"===t){if(s+1===a)return!0;if(t=e[++s],"b"===t){for(s++;a>s;s++)if(t=e[s],"_"!==t){if("0"!==t&&"1"!==t)return!1;o=!0}return o}if("x"===t){for(s++;a>s;s++)if(t=e[s],"_"!==t){if(!n(e.charCodeAt(s)))return!1;o=!0}return o}for(;a>s;s++)if(t=e[s],"_"!==t){if(!r(e.charCodeAt(s)))return!1;o=!0}return o}for(;a>s;s++)if(t=e[s],"_"!==t){if(":"===t)break;if(!i(e.charCodeAt(s)))return!1;o=!0}return o?":"!==t?!0:/^(:[0-5]?[0-9])+$/.test(e.slice(s)):!1}function o(e){var t,a,n=e,r=1,i=[];return-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),t=n[0],("-"===t||"+"===t)&&("-"===t&&(r=-1),n=n.slice(1),t=n[0]),"0"===n?0:"0"===t?"b"===n[1]?r*parseInt(n.slice(2),2):"x"===n[1]?r*parseInt(n,16):r*parseInt(n,8):-1!==n.indexOf(":")?(n.split(":").forEach(function(e){i.unshift(parseInt(e,10))}),n=0,a=1,i.forEach(function(e){n+=e*a,a*=60}),r*n):r*parseInt(n,10)}function u(e){return"[object Number]"===Object.prototype.toString.call(e)&&0===e%1&&!c.isNegativeZero(e)}var c=e("../common"),l=e("../type");t.exports=new l("tag:yaml.org,2002:int",{kind:"scalar",resolve:s,construct:o,predicate:u,represent:{binary:function(e){return"0b"+e.toString(2)},octal:function(e){return"0"+e.toString(8)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return"0x"+e.toString(16).toUpperCase()}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},{"../common":144,"../type":155}],160:[function(e,t,a){"use strict";function n(e){if(null===e)return!1;try{var t="("+e+")",a=o.parse(t,{range:!0});return"Program"!==a.type||1!==a.body.length||"ExpressionStatement"!==a.body[0].type||"FunctionExpression"!==a.body[0].expression.type?!1:!0}catch(n){return!1}}function r(e){var t,a="("+e+")",n=o.parse(a,{range:!0}),r=[];if("Program"!==n.type||1!==n.body.length||"ExpressionStatement"!==n.body[0].type||"FunctionExpression"!==n.body[0].expression.type)throw new Error("Failed to resolve function");return n.body[0].expression.params.forEach(function(e){r.push(e.name)}),t=n.body[0].expression.body.range,new Function(r,a.slice(t[0]+1,t[1]-1))}function i(e){return e.toString()}function s(e){return"[object Function]"===Object.prototype.toString.call(e)}var o;try{o=e("esprima")}catch(u){"undefined"!=typeof window&&(o=window.esprima)}var c=e("../../type");t.exports=new c("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i})},{"../../type":155,esprima:32}],161:[function(e,t,a){"use strict";function n(e){if(null===e)return!1;if(0===e.length)return!1;var t=e,a=/\/([gim]*)$/.exec(e),n="";if("/"===t[0]){if(a&&(n=a[1]),n.length>3)return!1;if("/"!==t[t.length-n.length-1])return!1;t=t.slice(1,t.length-n.length-1)}try{return!0}catch(r){return!1}}function r(e){var t=e,a=/\/([gim]*)$/.exec(e),n="";return"/"===t[0]&&(a&&(n=a[1]),t=t.slice(1,t.length-n.length-1)),new RegExp(t,n)}function i(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}function s(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var o=e("../../type");t.exports=new o("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i})},{"../../type":155}],162:[function(e,t,a){"use strict";function n(){return!0}function r(){}function i(){return""}function s(e){return"undefined"==typeof e}var o=e("../../type");t.exports=new o("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i})},{"../../type":155}],163:[function(e,t,a){"use strict";var n=e("../type");t.exports=new n("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},{"../type":155}],164:[function(e,t,a){"use strict";function n(e){return"<<"===e||null===e}var r=e("../type");t.exports=new r("tag:yaml.org,2002:merge",{kind:"scalar",resolve:n})},{"../type":155}],165:[function(e,t,a){"use strict";function n(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)}function r(){return null}function i(e){return null===e}var s=e("../type");t.exports=new s("tag:yaml.org,2002:null",{kind:"scalar",resolve:n,construct:r,predicate:i,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},{"../type":155}],166:[function(e,t,a){"use strict";function n(e){if(null===e)return!0;var t,a,n,r,i,u=[],c=e;for(t=0,a=c.length;a>t;t+=1){if(n=c[t],i=!1,"[object Object]"!==o.call(n))return!1;for(r in n)if(s.call(n,r)){if(i)return!1;i=!0}if(!i)return!1;if(-1!==u.indexOf(r))return!1;u.push(r)}return!0}function r(e){return null!==e?e:[]}var i=e("../type"),s=Object.prototype.hasOwnProperty,o=Object.prototype.toString;t.exports=new i("tag:yaml.org,2002:omap",{kind:"sequence",resolve:n,construct:r})},{"../type":155}],167:[function(e,t,a){"use strict";function n(e){if(null===e)return!0;var t,a,n,r,i,o=e;for(i=new Array(o.length),t=0,a=o.length;a>t;t+=1){if(n=o[t],"[object Object]"!==s.call(n))return!1;if(r=Object.keys(n),1!==r.length)return!1;i[t]=[r[0],n[r[0]]]}return!0}function r(e){if(null===e)return[];var t,a,n,r,i,s=e;for(i=new Array(s.length),t=0,a=s.length;a>t;t+=1)n=s[t],r=Object.keys(n),i[t]=[r[0],n[r[0]]];return i}var i=e("../type"),s=Object.prototype.toString;t.exports=new i("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:n,construct:r})},{"../type":155}],168:[function(e,t,a){"use strict";var n=e("../type");t.exports=new n("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}})},{"../type":155}],169:[function(e,t,a){"use strict";function n(e){if(null===e)return!0;var t,a=e;for(t in a)if(s.call(a,t)&&null!==a[t])return!1;return!0}function r(e){return null!==e?e:{}}var i=e("../type"),s=Object.prototype.hasOwnProperty;t.exports=new i("tag:yaml.org,2002:set",{kind:"mapping",resolve:n,construct:r})},{"../type":155}],170:[function(e,t,a){"use strict";var n=e("../type");t.exports=new n("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}})},{"../type":155}],171:[function(e,t,a){"use strict";function n(e){return null===e?!1:null===o.exec(e)?!1:!0}function r(e){var t,a,n,r,i,s,u,c,l,f,p=0,m=null;if(t=o.exec(e),null===t)throw new Error("Date resolve error"); -if(a=+t[1],n=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(a,n,r));if(i=+t[4],s=+t[5],u=+t[6],t[7]){for(p=t[7].slice(0,3);p.length<3;)p+="0";p=+p}return t[9]&&(c=+t[10],l=+(t[11]||0),m=6e4*(60*c+l),"-"===t[9]&&(m=-m)),f=new Date(Date.UTC(a,n,r,i,s,u,p)),m&&f.setTime(f.getTime()-m),f}function i(e){return e.toISOString()}var s=e("../type"),o=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?)?$");t.exports=new s("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:n,construct:r,instanceOf:Date,represent:i})},{"../type":155}],172:[function(e,t,a){"use strict";function n(e){var t;return h(e,"Array")?(t=[],e.forEach(function(e,a){t[a]=n(e)})):h(e,"Object")?(t={},Object.keys(e).forEach(function(a){t[a]=n(e[a])})):t=e,t}function r(e,t){function a(e){return h(e,"Undefined")||""===e?[]:e.split("/")}function n(e){".."===e?r.pop():r.push(e)}var r=[];return a(e).concat(a(t)).forEach(n),0===r.length?"":r.join("/")}function i(e,t){function a(e){Object.keys(e).forEach(function(t){n[t]=e[t]})}var n={};return a(R.parse(e||"")),a(R.parse(t||"")),0===Object.keys(n).length?void 0:R.stringify(n)}function s(e,t){h(e,"String")&&(e=M(e)),h(t,"String")&&(t=M(t));var a,n,s=P.parse(h(t,"Undefined")?"":t);return"absolute"===s.reference||"uri"===s.reference?n=s:(a=h(e,"Undefined")?void 0:P.parse(e),h(a,"Undefined")?n=s:(n=a,n.path=P.normalize(r(a.path,s.path)),n.query=i(a.query,s.query))),n.fragment=void 0,P.serialize(n)}function o(e,t){var a=d(e),n={},r=z(g(e));return Object.keys(t).forEach(function(i){var s=t[i];a(s,S(i))===!0&&i.indexOf(r)>-1&&("invalid"!==s.type||e.includeInvalid===!0)&&(n[i]=s)}),n}function u(e,t){var a=[],n=e;return t.slice(0,t.length-1).forEach(function(e){e in n&&(n=n[e],a.push(n))}),a}function c(e,t,a,r,i){var o=Promise.resolve(),u=D(e,t);return Object.keys(u).forEach(function(e){var l,f,p=u[e],m=S(e);T.indexOf(p.type)>-1&&(l=s(t.relativeBase,p.uri),f=a.indexOf(l),-1===f?o=o.then(function(){var e=r.concat(m),s=n(t);return delete s.subDocPath,s.relativeBase=l.substring(0,l.lastIndexOf("/")),j(p.uri,t).then(function(t){return t.location=l,p.uriDetails.fragment?(t.refs={},i[z(e)]=t,t):(Object.keys(t.refs).forEach(function(a){t.refs[a].parentLocation=z(e)}),i[z(e)]=t,c(t.value,s,a.concat(l),e,i))},function(e){p.error=e.message,p.missing=!0})}):(a.slice(f).forEach(function(e){Object.keys(i).forEach(function(t){var a=i[t];a.location===e&&(a.circular=!0)})}),i[z(r)].refs[e].circular=!0))}),o=o.then(function(){return 0===r.length&&Object.keys(i).forEach(function(e){var t=i[e];Object.keys(t.refs).forEach(function(a){var n=z(S(e).concat(S(a))),r=u[n];h(r,"Undefined")&&(u[n]=t.refs[a])}),u[e].value=t.value,t.circular&&(u[e].circular=!0)}),u})}function l(e,t,a){var n=e;try{t.forEach(function(e){if(!(e in n))throw Error("JSON Pointer points to missing location: "+z(t));n=n[e]})}catch(r){if(a!==!0)throw r;n=void 0}return n}function f(e){return Object.keys(e).filter(function(e){return"$ref"!==e})}function p(e,t){var a=B[e],r=Promise.resolve(),i=n(t.loaderOptions||{});return h(a,"Undefined")?(h(i.processContent,"Undefined")&&(i.processContent=function(e,t){t(void 0,JSON.parse(e.text))}),r=I.load(e,i),r=r.then(function(t){return B[e]={value:t},t})["catch"](function(t){throw B[e]={error:t},t})):r=r.then(function(){return a.value}),r=r.then(function(e){return n(e)})}function m(e,t){var a=!0;try{if(!h(e,"Object"))throw new Error("obj is not an Object");if(!h(e.$ref,"String"))throw new Error("obj.$ref is not a String")}catch(n){if(t)throw n;a=!1}return a}function h(e,t){return"Undefined"===t?"undefined"==typeof e:Object.prototype.toString.call(e)==="[object "+t+"]"}function d(e){var t;return t=h(e.filter,"Array")||h(e.filter,"String")?function(t){var a=h(e.filter,"String")?[e.filter]:e.filter;return a.indexOf(t.type)>-1}:h(e.filter,"Function")?e.filter:function(){return!0}}function g(e){var t=[];return h(e.subDocPath,"Array")?t=e.subDocPath:h(e.subDocPath,"String")&&(t=S(e.subDocPath)),t}function y(e,t,a){l(e,t.slice(0,t.length-1))[t[t.length-1]]=a}function w(e,t,a,n){function r(t,r){a.push(r),w(e,t,a,n),a.pop()}var i=!0;h(n,"Function")&&(i=n(e,t,a)),-1===e.indexOf(t)&&(e.push(t),i!==!1&&(h(t,"Array")?t.forEach(function(e,t){r(e,t.toString())}):h(t,"Object")&&Object.keys(t).forEach(function(e){r(t[e],e)}))),e.pop()}function v(e){if(!h(e,"Undefined")){if(!h(e,"Object"))throw new TypeError("options must be an Object");if(!(h(e.filter,"Undefined")||h(e.filter,"Array")||h(e.filter,"Function")||h(e.filter,"String")))throw new TypeError("options.filter must be an Array, a Function of a String");if(!h(e.includeInvalid,"Undefined")&&!h(e.includeInvalid,"Boolean"))throw new TypeError("options.includeInvalid must be a Boolean");if(!h(e.refPreProcessor,"Undefined")&&!h(e.refPreProcessor,"Function"))throw new TypeError("options.refPreProcessor must be a Function");if(!h(e.refPostProcessor,"Undefined")&&!h(e.refPostProcessor,"Function"))throw new TypeError("options.refPostProcessor must be a Function");if(!h(e.subDocPath,"Undefined")&&!h(e.subDocPath,"Array")&&!C(e.subDocPath))throw new TypeError("options.subDocPath must be an Array of path segments or a valid JSON Pointer")}}function b(){B={}}function E(e){if(!h(e,"Array"))throw new TypeError("path must be an array");return e.map(function(e){return h(e,"String")||(e=JSON.stringify(e)),e.replace(/~1/g,"/").replace(/~0/g,"~")})}function A(e){if(!h(e,"Array"))throw new TypeError("path must be an array");return e.map(function(e){return h(e,"String")||(e=JSON.stringify(e)),e.replace(/~/g,"~0").replace(/\//g,"~1")})}function D(e,t){var a,n,r=[],i=e,s={};if(!h(e,"Array")&&!h(e,"Object"))throw new TypeError("obj must be an Array or an Object");return h(t,"Undefined")&&(t={}),v(t),a=g(t),n=d(t),a.length>0&&(r=u(e,a),i=l(e,a)),w(r,i,a,function(e,a,r){var i,o=!0;return m(a)&&(h(t.refPreProcessor,"Undefined")||(a=t.refPreProcessor(a,r)),i=x(a),("invalid"!==i.type||t.includeInvalid===!0)&&(n(i,r)===!0&&(h(t.refPostProcessor,"Undefined")||(i=t.refPostProcessor(i,r)),s[z(r)]=i),f(a).length>0&&(o=!1))),o}),s}function j(e,t){var a=Promise.resolve();return a=a.then(function(){var a;if(!h(e,"String"))throw new TypeError("location must be a string");return h(t,"Undefined")&&(t={}),v(t),a=n(t),e=s(t.relativeBase,e),a.relativeBase=e.substring(0,e.lastIndexOf("/")),p(e,a)}).then(function(a){var r,i=n(B[e]);return h(i.refs,"Undefined")&&(r=n(t),delete r.filter,delete r.subDocPath,r.includeInvalid=!0,B[e].refs=D(a,r),i.refs=o(t,B[e].refs)),i})}function x(e){var t,a,n,r={def:e};try{if(m(e,!0)){if(t=e.$ref,n=L[t],h(n,"Undefined")&&(n=L[t]=P.parse(t)),r.uri=t,r.uriDetails=n,h(n.error,"Undefined"))switch(n.reference){case"absolute":case"uri":r.type="remote";break;case"same-document":r.type="local";break;default:r.type=n.reference}else r.error=r.uriDetails.error,r.type="invalid";a=f(e),a.length>0&&(r.warning="Extra JSON Reference properties will be ignored: "+a.join(", "))}else r.type="invalid"}catch(i){r.error=i.message,r.type="invalid"}return r}function C(e,t){var a,n=!0;try{if(!h(e,"String"))throw new Error("ptr is not a String");if(""!==e){if(a=e.charAt(0),-1===["#","/"].indexOf(a))throw new Error("ptr must start with a / or #/");if("#"===a&&"#"!==e&&"/"!==e.charAt(1))throw new Error("ptr must start with a / or #/");if(e.match(O))throw new Error("ptr has invalid token(s)")}}catch(r){if(t===!0)throw r;n=!1}return n}function _(e,t){return m(e,t)&&"invalid"!==x(e,t).type}function S(e){if(!C(e))throw new Error("ptr must be a JSON Pointer");var t=e.split("/");return t.shift(),E(t)}function z(e,t){if(!h(e,"Array"))throw new Error("path must be an Array");return(t!==!1?"#":"")+(e.length>0?"/":"")+A(e).join("/")}function F(e,t){var a=Promise.resolve();return a=a.then(function(){if(!h(e,"Array")&&!h(e,"Object"))throw new TypeError("obj must be an Array or an Object");h(t,"Undefined")&&(t={}),v(t)}).then(function(){return c(e,t,[],[],{})}).then(function(t){var a=n(e),r=[];return Object.keys(t).forEach(function(e){var n,r=t[e];if(T.indexOf(r.type)>-1)if(h(r.error,"Undefined")&&"invalid"!==r.type)try{n=l(r.value||{},r.uriDetails.fragment?S(r.uriDetails.fragment):[]),y(a,S(e),n),h(r.value,"Undefined")?r.circular&&(r.value={}):r.value=n}catch(i){r.error=i.message,r.missing=!0}else r.missing=!0}),Object.keys(t).forEach(function(e){var n,i=t[e],s=i.parentLocation;if(h(s,"Undefined")||-1!==r.indexOf(e)||r.push(e),-1===T.indexOf(i.type)&&"invalid"!==i.type)if(h(i.error,"Undefined")){e.indexOf(i.uri)>-1?(i.circular=!0,n={}):h(s,"Undefined")||(n=l(l(a,S(s)),i.uriDetails.fragment?S(i.uriDetails.fragment):[],!0));try{h(n,"Undefined")&&(n=l(a,i.uriDetails.fragment?S(i.uriDetails.fragment):[])),y(a,S(e),n),i.value=n}catch(o){i.error=o.message,i.missing=!0}}else i.missing=!0}),r.forEach(function(e){delete t[e].parentLocation}),{refs:t,resolved:a}})}function k(e,t){var a=Promise.resolve();return a=a.then(function(){var a;if(!h(e,"String"))throw new TypeError("location must be a string");return h(t,"Undefined")&&(t={}),v(t),a=n(t),e=s(t.relativeBase,e),a.relativeBase=e.substring(0,e.lastIndexOf("/")),p(e,a)}).then(function(e){return F(e,t).then(function(t){return{refs:t.refs,resolved:t.resolved,value:e}})})}var I=e("path-loader"),R=e("querystring"),M=e("slash"),P=e("uri-js"),O=/~(?:[^01]|$)/g,B={},T=["relative","remote"],L={};"undefined"==typeof Promise&&e("native-promise-only"),t.exports.clearCache=b,t.exports.decodePath=E,t.exports.encodePath=A,t.exports.findRefs=D,t.exports.findRefsAt=j,t.exports.getRefDetails=x,t.exports.isPtr=C,t.exports.isRef=_,t.exports.pathFromPtr=S,t.exports.pathToPtr=z,t.exports.resolveRefs=F,t.exports.resolveRefsAt=k},{"native-promise-only":196,"path-loader":198,querystring:206,slash:214,"uri-js":221}],173:[function(e,t,a){"use strict";function n(e){return"enum"===e||"required"===e||"definitions"===e}function r(e,t,a){var r=l();try{var i=100;return s(r(e,t,a),[],function f(e){if(!i)return delete e.$ref,delete e.oneOf,delete e.anyOf,delete e.allOf,e;if("string"==typeof e.$ref){var t=e.$ref;delete e.$ref,i--,c(e,r.util.findByRef(t,r.refs))}if(Array.isArray(e.allOf)){var a=e.allOf;delete e.allOf,a.forEach(function(t){c(e,f(t))})}if(Array.isArray(e.oneOf||e.anyOf)){var s=e.oneOf||e.anyOf;delete e.anyOf,delete e.oneOf,c(e,u.pick(s))}for(var o in e)!Array.isArray(e[o])&&"object"!=typeof e[o]||n(o)||(e[o]=f(e[o]));return e})}catch(o){throw o.path?new Error(o.message+" in /"+o.path.join("/")):o}}var i=e("./util/container"),s=e("./util/traverse"),o=e("./util/formats"),u=e("./util/random"),c=e("./util/merge"),l=e("deref");r.formats=o,r.extend=i.set,t.exports=r},{"./util/container":181,"./util/formats":183,"./util/merge":186,"./util/random":188,"./util/traverse":189,deref:25}],174:[function(e,t,a){"use strict";function n(e,t,a,n,r){function s(e){var t=JSON.stringify(e);-1===u.indexOf(t)&&(u.push(t),o.push(e))}var o=[],u=[];t.forEach(s);for(var c=100;o.length!==t.length&&(s(i(a.items||n,e,r)),c--););return o}var r=e("../util/random"),i=e("../util/traverse"),s=e("../util/has-props"),o=e("../util/error");t.exports=function(e,t,a){var u=[];if(!e.items&&!e.additionalItems){if(s(e,"minItems","maxItems","uniqueItems"))throw new o("missing items for "+JSON.stringify(e),t);return u}if(Array.isArray(e.items))return Array.prototype.concat.apply(u,e.items.map(function(e,n){return i(e,t.concat(["items",n]),a)}));for(var c=r(e.minItems,e.maxItems,1,5),l="object"==typeof e.additionalItems?e.additionalItems:{},f=u.length;c>f;f+=1)u.push(i(e.items||l,t.concat(["items",f]),a));return e.uniqueItems?n(t.concat(["items"]),u,e,l,a):u}},{"../util/error":182,"../util/has-props":184,"../util/random":188,"../util/traverse":189}],175:[function(e,t,a){"use strict";t.exports=function(){return Math.random()>.5}},{}],176:[function(e,t,a){"use strict";var n=e("./number");t.exports=function(e){e.hasPrecision=!1;var t=n(e);return t>0?Math.floor(t):Math.ceil(t)}},{"./number":178}],177:[function(e,t,a){"use strict";t.exports=function(){return null}},{}],178:[function(e,t,a){"use strict";var n=-1e8,r=1e8,i=e("./string"),s=e("../util/random");t.exports=function(e){if(e.faker||e.chance)return i(e);var t="undefined"==typeof e.minimum?n:e.minimum,a="undefined"==typeof e.maximum?r:e.maximum;if(e.exclusiveMinimum&&e.minimum&&(t+=1),e.exclusiveMaximum&&e.maximum&&(a-=1),e.multipleOf){for(var o=s(Math.floor(t/e.multipleOf),Math.floor(a/e.multipleOf))*e.multipleOf;t>o;)o+=e.multipleOf;return o}return e.hasPrecision?s(!1,t,a):s(Math.random()>.5,t,a)}},{"../util/random":188,"./string":180}],179:[function(e,t,a){"use strict";var n=e("../util/container"),r=e("../util/random"),i=e("../util/traverse"),s=e("../util/has-props"),o=n.get("faker"),u=n.get("randexp"),c=u.randexp,l=e("../util/error");t.exports=function(e,t,a){var n={};if(!(e.properties||e.patternProperties||e.additionalProperties)){if(s(e,"minProperties","maxProperties","dependencies","required"))throw new l("missing properties for "+JSON.stringify(e),t);return n}var u=e.required||[],f=e.properties?Object.keys(e.properties):[];u.forEach(function(t){e.properties&&e.properties[t]&&(n[t]=e.properties[t])});var p=f.filter(function(e){return-1===u.indexOf(e)});e.patternProperties&&(p=Array.prototype.concat.apply(p,Object.keys(e.patternProperties)));var m=r(e.minProperties,e.maxProperties,0,p.length);r.shuffle(p).slice(0,m).forEach(function(t){e.properties&&e.properties[t]?n[t]=e.properties[t]:n[c(t)]=e.patternProperties[t]});var h=Object.keys(n).length,d="object"==typeof e.additionalProperties?e.additionalProperties:{};return m>h&&o.lorem.words(m-h).forEach(function(e){n[e+c("\\w{1,10}")]=d}),i(n,t.concat(["properties"]),a)}},{"../util/container":181,"../util/error":182,"../util/has-props":184,"../util/random":188,"../util/traverse":189}],180:[function(e,t,a){"use strict";function n(e,t){for(var a=t.split(".");a.length;){var n=a.shift();if(!e[n])break;e=e[n]}return e}function r(e){if(e.use){var t=[],a=e.key;"object"==typeof a&&(a=Object.keys(a)[0],Array.isArray(e.key[a])?t=e.key[a]:t.push(e.key[a]));var r=n(e.gen,a);if("function"!=typeof r)throw new Error("unknown "+e.use+"-generator for "+JSON.stringify(e.key));return r.apply(e.gen,t)}switch(e.format){case"date-time":return new Date(l(0,1e14)).toISOString();case"email":case"hostname":case"ipv6":case"uri":return c(p[e.format]).replace(/\{(\w+)\}/,function(e,t){return c(p[t])});case"ipv4":return[0,0,0,0].map(function(){return l(0,255)}).join(".");default:var i=f(e.format);if("function"!=typeof i)throw new Error("unknown generator for "+JSON.stringify(e.format));var u={faker:s,chance:o,randexp:c};return i(u,e)}}var i=e("../util/container"),s=i.get("faker"),o=i.get("chance"),u=i.get("randexp"),c=u.randexp,l=e("../util/random"),f=e("../util/formats"),p={email:"[a-zA-Z\\d][a-zA-Z\\d-]{1,13}[a-zA-Z\\d]@{hostname}",hostname:"[a-zA-Z]{1,33}\\.[a-z]{2,4}",ipv6:"[abcdef\\d]{4}(:[abcdef\\d]{4}){7}",uri:"[a-zA-Z][a-zA-Z0-9+-.]*"};t.exports=function(e){if(e.faker||e.chance)return r({use:e.faker?"faker":"chance",gen:e.faker?s:o,key:e.faker||e.chance});if(e.format)return r(e);if(e.pattern)return c(e.pattern);if(e.minLength||e.maxLength){var t=Math.max(0,e.minLength||0),a=l(t,e.maxLength);return c(".{"+t+","+a+"}")}return s.lorem.words(l(1,5)).join(" ")}},{"../util/container":181,"../util/formats":183,"../util/random":188}],181:[function(e,t,a){"use strict";var n=e("chance"),r={faker:e("faker"),chance:new n,randexp:e("randexp")};t.exports={set:function(e,t){if("undefined"==typeof r[e])throw new ReferenceError('"'+e+"\" dependency doesn't exist.");r[e]=t(r[e])},get:function(e){return r[e]}}},{chance:20,faker:133,randexp:207}],182:[function(e,t,a){"use strict";function n(e,t){this.message=e,this.path=t,this.name="ParseError"}n.prototype=Error.prototype,t.exports=n},{}],183:[function(e,t,a){"use strict";var n={};t.exports=function(e,t){if(t)n[e]=t;else if("object"==typeof e)for(var a in e)n[a]=e[a];else if(e)return n[e];return n}},{}],184:[function(e,t,a){"use strict";t.exports=function(e){return Array.prototype.slice.call(arguments,1).filter(function(t){return"undefined"!=typeof e[t]}).length>0}},{}],185:[function(e,t,a){"use strict";function n(e,t,a){return Object.keys(e).filter(function(e){return a.indexOf(e)>-1&&-1===i.indexOf(t[t.length-1])?!0:void 0}).length>0}var r={array:["additionalItems","items","maxItems","minItems","uniqueItems"],integer:["exclusiveMaximum","exclusiveMinimum","maximum","minimum","multipleOf"],object:["additionalProperties","dependencies","maxProperties","minProperties","patternProperties","properties","required"],string:["maxLength","menlength","pattern"]},i=["additionalItems","items","additionalProperties","dependencies","patternProperties","properties"];r.number=r.integer,t.exports=function(e,t){for(var a in r)if(n(e,t,r[a]))return a}},{}],186:[function(e,t,a){"use strict";function n(e){var t=[];return e.forEach(function(e,a){"object"==typeof e&&null!==e?t[a]=Array.isArray(e)?n(e):r({},e):t[a]=e}),t}var r;r=t.exports=function(e,t){for(var a in t)"object"!=typeof t[a]||null===t[a]?e[a]=t[a]:Array.isArray(t[a])?e[a]=(e[a]||[]).concat(n(t[a])):"object"!=typeof e[a]||null===e[a]||Array.isArray(e[a])?e[a]=r({},t[a]):e[a]=r(e[a],t[a]);return e}},{}],187:[function(e,t,a){"use strict";t.exports={array:e("../types/array"),"boolean":e("../types/boolean"),integer:e("../types/integer"),number:e("../types/number"),"null":e("../types/null"),object:e("../types/object"),string:e("../types/string")}},{"../types/array":174,"../types/boolean":175,"../types/integer":176,"../types/null":177,"../types/number":178,"../types/object":179,"../types/string":180}],188:[function(e,t,a){"use strict";var n=e("./container"),r=n.get("faker"),i=t.exports=function(e,t,a,n){var s=!0;return"boolean"==typeof e&&(s=e,e=arguments[1],t=arguments[2],a=arguments[3],n=arguments[4]),a="undefined"==typeof a?i.MIN_NUMBER:a,n="undefined"==typeof n?i.MAX_NUMBER:n,e="undefined"==typeof e?a:e,t="undefined"==typeof t?n:t,e>t&&(t+=e),r.random.number({min:e,max:t,precision:s?1:Math.random()})};i.shuffle=function(e){for(var t=e.slice(),a=e.length;a>0;){var n=Math.floor(Math.random()*a),r=t[--a];t[a]=t[n],t[n]=r}return t},i.pick=function(e){return e[Math.floor(Math.random()*e.length)]},i.MIN_NUMBER=-100,i.MAX_NUMBER=100},{"./container":181}],189:[function(e,t,a){"use strict";function n(e,t,a){a(e);var u={};if(Array.isArray(e)&&(u=[]),Array.isArray(e["enum"]))return r.pick(e["enum"]);var c=e.type;if(Array.isArray(c)?c=r.pick(c):"undefined"==typeof c&&(c=s(e,t)||c),"string"==typeof c){if(!o[c])throw new i("unknown primitive "+JSON.stringify(c),t.concat(["type"]));try{return o[c](e,t,a)}catch(l){if("undefined"==typeof l.path)throw new i(l.message,t);throw l}}for(var f in e)"object"==typeof e[f]&&"definitions"!==f?u[f]=n(e[f],t.concat([f]),a):u[f]=e[f];return u}var r=e("./random"),i=e("./error"),s=e("./inferred"),o=null;t.exports=function(){return o=o||e("./primitives"),n.apply(null,arguments)}},{"./error":182,"./inferred":185,"./primitives":187,"./random":188}],190:[function(e,t,a){function n(e,t,a){if(null!=e){void 0!==a&&a in r(e)&&(t=[a]);for(var n=0,i=t.length;null!=e&&i>n;)e=e[t[n++]];return n&&n==i?e:void 0}}function r(e){return i(e)?e:Object(e)}function i(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}t.exports=n},{}],191:[function(e,t,a){function n(e){return null==e?"":e+""}function r(e){if(i(e))return e;var t=[];return n(e).replace(s,function(e,a,n,r){t.push(n?r.replace(o,"$1"):a||e)}),t}var i=e("lodash.isarray"),s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,o=/\\(\\)?/g;t.exports=r},{"lodash.isarray":193}],192:[function(e,t,a){function n(e,t,a){var n=null==e?void 0:r(e,i(t),t+"");return void 0===n?a:n}var r=e("lodash._baseget"),i=e("lodash._topath");t.exports=n},{"lodash._baseget":190,"lodash._topath":191}],193:[function(e,t,a){function n(e){return!!e&&"object"==typeof e}function r(e,t){var a=null==e?void 0:e[t];return u(a)?a:void 0}function i(e){return"number"==typeof e&&e>-1&&e%1==0&&w>=e}function s(e){return o(e)&&d.call(e)==l}function o(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function u(e){return null==e?!1:s(e)?g.test(m.call(e)):n(e)&&f.test(e)}var c="[object Array]",l="[object Function]",f=/^\[object .+?Constructor\]$/,p=Object.prototype,m=Function.prototype.toString,h=p.hasOwnProperty,d=p.toString,g=RegExp("^"+m.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=r(Array,"isArray"),w=9007199254740991,v=y||function(e){return n(e)&&i(e.length)&&d.call(e)==c};t.exports=v},{}],194:[function(t,a,n){(function(t){(function(){function r(e,t){if(e!==t){var a=null===e,n=e===C,r=e===e,i=null===t,s=t===C,o=t===t;if(e>t&&!i||!r||a&&!s&&o||n&&o)return 1;if(t>e&&!a||!o||i&&!n&&r||s&&r)return-1}return 0}function i(e,t,a){for(var n=e.length,r=a?n:-1;a?r--:++r-1;);return a}function l(e,t){for(var a=e.length;a--&&t.indexOf(e.charAt(a))>-1;);return a}function f(e,t){return r(e.criteria,t.criteria)||e.index-t.index}function p(e,t,a){for(var n=-1,i=e.criteria,s=t.criteria,o=i.length,u=a.length;++n=u)return c;var l=a[n];return c*("asc"===l||l===!0?1:-1)}}return e.index-t.index}function m(e){return Ge[e]}function h(e){return Je[e]}function d(e,t,a){return t?e=Ve[e]:a&&(e=Ye[e]),"\\"+e}function g(e){return"\\"+Ye[e]}function y(e,t,a){for(var n=e.length,r=t+(a?0:-1);a?r--:++r=e&&e>=9&&13>=e||32==e||160==e||5760==e||6158==e||e>=8192&&(8202>=e||8232==e||8233==e||8239==e||8287==e||12288==e||65279==e)}function b(e,t){for(var a=-1,n=e.length,r=-1,i=[];++at,r=a?e.length:0,i=Ga(0,r,this.__views__),s=i.start,o=i.end,u=o-s,c=n?o:s-1,l=this.__iteratees__,f=l.length,p=0,m=As(u,this.__takeCount__);if(!a||U>r||r==u&&m==u)return aa(n&&a?e.reverse():e,this.__actions__);var h=[];e:for(;u--&&m>p;){c+=t;for(var d=-1,g=e[c];++d=U?ha(t):null,c=t.length;u&&(i=Ze,o=!1,t=u);e:for(;++ra&&(a=-a>r?0:r+a),n=n===C||n>r?r:+n||0,0>n&&(n+=r),r=a>n?0:n>>>0,a>>>=0;r>a;)e[a++]=t;return e}function _t(e,t){var a=[];return Ps(e,function(e,n,r){t(e,n,r)&&a.push(e)}),a}function St(e,t,a,n){var r;return a(e,function(e,a,i){return t(e,a,i)?(r=n?a:e,!1):void 0}),r}function zt(e,t,a,n){n||(n=[]);for(var r=-1,i=e.length;++rn;)e=e[t[n++]];return n&&n==r?e:C}}function Pt(e,t,a,n,r,i){return e===t?!0:null==e||null==t||!Mr(e)&&!w(t)?e!==e&&t!==t:Ot(e,t,Pt,a,n,r,i)}function Ot(e,t,a,n,r,i,s){var o=zo(e),u=zo(t),c=q,l=q;o||(c=as.call(e),c==J?c=ee:c!=ee&&(o=Kr(e))),u||(l=as.call(t),l==J?l=ee:l!=ee&&(u=Kr(t)));var f=c==ee,p=l==ee,m=c==l;if(m&&!o&&!f)return Ta(e,t,c);if(!r){var h=f&&es.call(e,"__wrapped__"),d=p&&es.call(t,"__wrapped__");if(h||d)return a(h?e.value():e,d?t.value():t,n,r,i,s)}if(!m)return!1;i||(i=[]),s||(s=[]);for(var g=i.length;g--;)if(i[g]==e)return s[g]==t;i.push(e),s.push(t);var y=(o?Ba:La)(e,t,a,n,r,i,s);return i.pop(),s.pop(),y}function Bt(e,t,a){var n=t.length,r=n,i=!a;if(null==e)return!r;for(e=fn(e);n--;){var s=t[n];if(i&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++nt&&(t=-t>r?0:r+t),a=a===C||a>r?r:+a||0,0>a&&(a+=r),r=t>a?0:a-t>>>0,t>>>=0;for(var i=Ni(r);++n=U,u=o?ha():null,c=[];u?(n=Ze,i=!1):(o=!1,u=t?[]:c);e:for(;++a=r){for(;r>n;){var i=n+r>>>1,s=e[i];(a?t>=s:t>s)&&null!==s?n=i+1:r=i}return r}return ra(e,t,_i,a)}function ra(e,t,a,n){t=a(t);for(var r=0,i=e?e.length:0,s=t!==t,o=null===t,u=t===C;i>r;){var c=ys((r+i)/2),l=a(e[c]),f=l!==C,p=l===l;if(s)var m=p||n;else m=o?p&&f&&(n||null!=l):u?p&&(n||f):null==l?!1:n?t>=l:t>l;m?r=c+1:i=c}return As(i,zs)}function ia(e,t,a){if("function"!=typeof e)return _i;if(t===C)return e;switch(a){case 1:return function(a){return e.call(t,a)};case 3:return function(a,n,r){return e.call(t,a,n,r)};case 4:return function(a,n,r,i){return e.call(t,a,n,r,i)};case 5:return function(a,n,r,i,s){ -return e.call(t,a,n,r,i,s)}}return function(){return e.apply(t,arguments)}}function sa(e){var t=new is(e.byteLength),a=new ms(t);return a.set(new ms(e)),t}function oa(e,t,a){for(var n=a.length,r=-1,i=Es(e.length-n,0),s=-1,o=t.length,u=Ni(o+i);++s2?a[r-2]:C,s=r>2?a[2]:C,o=r>1?a[r-1]:C;for("function"==typeof i?(i=ia(i,o,5),r-=2):(i="function"==typeof o?o:C,r-=i?1:0),s&&Xa(a[0],a[1],s)&&(i=3>r?C:i,r=1);++n-1?a[s]:C}return St(a,n,e)}}function Ea(e){return function(t,a,n){return t&&t.length?(a=Na(a,n,3),i(t,a,e)):-1}}function Aa(e){return function(t,a,n){return a=Na(a,n,3),St(t,a,e,!0)}}function Da(e){return function(){for(var t,a=arguments.length,r=e?a:-1,i=0,s=Ni(a);e?r--:++r=U)return t.plant(n).value();for(var r=0,i=a?s[r].apply(this,e):n;++rw){var j=o?et(o):C,x=Es(c-w,0),_=h?D:C,F=h?C:D,k=h?E:C,I=h?C:E;t|=h?R:M,t&=~(h?M:R),d||(t&=~(S|z));var P=[e,t,a,k,_,I,F,j,u,x],O=ka.apply(C,P);return en(e)&&$s(O,P),O.placeholder=A,O}}var B=p?a:this,T=m?B[e]:e;return o&&(E=un(E,o)),f&&u=t||!vs(t))return"";var r=t-n;return a=null==a?" ":a+"",gi(a,ds(r/a.length)).slice(0,r)}function Ra(e,t,a,n){function r(){for(var t=-1,o=arguments.length,u=-1,c=n.length,l=Ni(c+o);++uu))return!1;for(;++o-1&&e%1==0&&t>e}function Xa(e,t,a){if(!Mr(a))return!1;var n=typeof t;if("number"==n?Ya(a)&&Za(t,a.length):"string"==n&&t in a){var r=a[t];return e===e?e===r:r!==r}return!1}function Qa(e,t){var a=typeof e;if("string"==a&&Ce.test(e)||"number"==a)return!0;if(zo(e))return!1;var n=!xe.test(e);return n||null!=t&&e in fn(t)}function en(e){var a=Ua(e);if(!(a in v.prototype))return!1;var n=t[a];if(e===n)return!0;var r=Ns(n);return!!r&&e===r[0]}function tn(e){return"number"==typeof e&&e>-1&&e%1==0&&ks>=e}function an(e){return e===e&&!Mr(e)}function nn(e,t){var a=e[1],n=t[1],r=a|n,i=P>r,s=n==P&&a==k||n==P&&a==O&&e[7].length<=t[8]||n==(P|O)&&a==k;if(!i&&!s)return e;n&S&&(e[2]=t[2],r|=a&S?0:F);var o=t[3];if(o){var u=e[3];e[3]=u?oa(u,o,t[4]):et(o),e[4]=u?b(e[3],G):et(t[4])}return o=t[5],o&&(u=e[5],e[5]=u?ua(u,o,t[6]):et(o),e[6]=u?b(e[5],G):et(t[6])),o=t[7],o&&(e[7]=et(o)),n&P&&(e[8]=null==e[8]?t[8]:As(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=r,e}function rn(e,t){return e===C?t:Fo(e,t,rn)}function sn(e,t){e=fn(e);for(var a=-1,n=t.length,r={};++an;)s[++i]=Wt(e,n,n+=t);return s}function dn(e){for(var t=-1,a=e?e.length:0,n=-1,r=[];++tt?0:t)):[]}function yn(e,t,a){var n=e?e.length:0;return n?((a?Xa(e,t,a):null==t)&&(t=1),t=n-(+t||0),Wt(e,0,0>t?0:t)):[]}function wn(e,t,a){return e&&e.length?ta(e,Na(t,a,3),!0,!0):[]}function vn(e,t,a){return e&&e.length?ta(e,Na(t,a,3),!0):[]}function bn(e,t,a,n){var r=e?e.length:0;return r?(a&&"number"!=typeof a&&Xa(e,t,a)&&(a=0,n=r),Ct(e,t,a,n)):[]}function En(e){return e?e[0]:C}function An(e,t,a){var n=e?e.length:0;return a&&Xa(e,t,a)&&(t=!1),n?zt(e,t):[]}function Dn(e){var t=e?e.length:0;return t?zt(e,!0):[]}function jn(e,t,a){var n=e?e.length:0;if(!n)return-1;if("number"==typeof a)a=0>a?Es(n+a,0):a;else if(a){var r=na(e,t);return n>r&&(t===t?t===e[r]:e[r]!==e[r])?r:-1}return s(e,t,a||0)}function xn(e){return yn(e,1)}function Cn(e){var t=e?e.length:0;return t?e[t-1]:C}function _n(e,t,a){var n=e?e.length:0;if(!n)return-1;var r=n;if("number"==typeof a)r=(0>a?Es(n+a,0):As(a||0,n-1))+1;else if(a){r=na(e,t,!0)-1;var i=e[r];return(t===t?t===i:i!==i)?r:-1}if(t!==t)return y(e,r,!0);for(;r--;)if(e[r]===t)return r;return-1}function Sn(){var e=arguments,t=e[0];if(!t||!t.length)return t;for(var a=0,n=$a(),r=e.length;++a-1;)ps.call(t,i,1);return t}function zn(e,t,a){var n=[];if(!e||!e.length)return n;var r=-1,i=[],s=e.length;for(t=Na(t,a,3);++rt?0:t)):[]}function Rn(e,t,a){var n=e?e.length:0;return n?((a?Xa(e,t,a):null==t)&&(t=1),t=n-(+t||0),Wt(e,0>t?0:t)):[]}function Mn(e,t,a){return e&&e.length?ta(e,Na(t,a,3),!1,!0):[]}function Pn(e,t,a){return e&&e.length?ta(e,Na(t,a,3)):[]}function On(e,t,a,n){var r=e?e.length:0;if(!r)return[];null!=t&&"boolean"!=typeof t&&(n=a,a=Xa(e,t,n)?C:t,t=!1);var i=Na();return(null!=a||i!==bt)&&(a=i(a,n,3)),t&&$a()==s?E(e,a):Qt(e,a)}function Bn(e){if(!e||!e.length)return[];var t=-1,a=0;e=ot(e,function(e){return Ya(e)?(a=Es(e.length,a),!0):void 0});for(var n=Ni(a);++ta?Es(r+a,0):a||0,"string"==typeof e||!zo(e)&&$r(e)?r>=a&&e.indexOf(t,a)>-1:!!r&&$a(e,t,a)>-1}function er(e,t,a){var n=zo(e)?ut:Tt;return t=Na(t,a,3),n(e,t)}function tr(e,t){return er(e,Ri(t))}function ar(e,t,a){var n=zo(e)?ot:_t;return t=Na(t,a,3),n(e,function(e,a,n){return!t(e,a,n)})}function nr(e,t,a){if(a?Xa(e,t,a):null==t){e=ln(e);var n=e.length;return n>0?e[Jt(0,n-1)]:C}var r=-1,i=qr(e),n=i.length,s=n-1;for(t=As(0>t?0:+t||0,n);++r0&&(a=t.apply(this,arguments)),1>=e&&(t=C),a}}function mr(e,t,a){function n(){m&&ss(m),c&&ss(c),d=0,c=m=h=C}function r(t,a){a&&ss(a),c=m=h=C,t&&(d=ho(),l=e.apply(p,u),m||c||(u=p=C))}function i(){var e=t-(ho()-f);0>=e||e>t?r(h,c):m=fs(i,e)}function s(){r(y,m)}function o(){if(u=arguments,f=ho(),p=this,h=y&&(m||!w),g===!1)var a=w&&!m;else{c||w||(d=f);var n=g-(f-d),r=0>=n||n>g;r?(c&&(c=ss(c)),d=f,l=e.apply(p,u)):c||(c=fs(s,n))}return r&&m?m=ss(m):m||t===g||(m=fs(i,t)),a&&(r=!0,l=e.apply(p,u)),!r||m||c||(u=p=C),l}var u,c,l,f,p,m,h,d=0,g=!1,y=!0;if("function"!=typeof e)throw new Vi(H);if(t=0>t?0:+t||0,a===!0){var w=!0;y=!1}else Mr(a)&&(w=!!a.leading,g="maxWait"in a&&Es(+a.maxWait||0,t),y="trailing"in a?!!a.trailing:y);return o.cancel=n,o}function hr(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new Vi(H);var a=function(){var n=arguments,r=t?t.apply(this,n):n[0],i=a.cache;if(i.has(r))return i.get(r);var s=e.apply(this,n);return a.cache=i.set(r,s),s};return a.cache=new hr.Cache,a}function dr(e){if("function"!=typeof e)throw new Vi(H);return function(){return!e.apply(this,arguments)}}function gr(e){return pr(2,e)}function yr(e,t){if("function"!=typeof e)throw new Vi(H);return t=Es(t===C?e.length-1:+t||0,0),function(){for(var a=arguments,n=-1,r=Es(a.length-t,0),i=Ni(r);++nt}function jr(e,t){return e>=t}function xr(e){return w(e)&&Ya(e)&&es.call(e,"callee")&&!cs.call(e,"callee")}function Cr(e){return e===!0||e===!1||w(e)&&as.call(e)==W}function _r(e){return w(e)&&as.call(e)==V}function Sr(e){return!!e&&1===e.nodeType&&w(e)&&!Nr(e)}function zr(e){return null==e?!0:Ya(e)&&(zo(e)||$r(e)||xr(e)||w(e)&&Rr(e.splice))?!e.length:!No(e).length}function Fr(e,t,a,n){a="function"==typeof a?ia(a,n,3):C;var r=a?a(e,t):C;return r===C?Pt(e,t,a):!!r}function kr(e){return w(e)&&"string"==typeof e.message&&as.call(e)==Y}function Ir(e){return"number"==typeof e&&vs(e)}function Rr(e){return Mr(e)&&as.call(e)==Z}function Mr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Pr(e,t,a,n){return a="function"==typeof a?ia(a,n,3):C,Bt(e,Ka(t),a)}function Or(e){return Lr(e)&&e!=+e}function Br(e){return null==e?!1:Rr(e)?rs.test(Qi.call(e)):w(e)&&Pe.test(e)}function Tr(e){return null===e}function Lr(e){return"number"==typeof e||w(e)&&as.call(e)==Q}function Nr(e){var t;if(!w(e)||as.call(e)!=ee||xr(e)||!es.call(e,"constructor")&&(t=e.constructor,"function"==typeof t&&!(t instanceof t)))return!1;var a;return Ft(e,function(e,t){a=t}),a===C||es.call(e,a)}function Ur(e){return Mr(e)&&as.call(e)==te}function $r(e){return"string"==typeof e||w(e)&&as.call(e)==ne}function Kr(e){return w(e)&&tn(e.length)&&!!Ke[as.call(e)]}function Hr(e){return e===C}function Gr(e,t){return t>e}function Jr(e,t){return t>=e}function qr(e){var t=e?Us(e):0;return tn(t)?t?et(e):[]:ii(e)}function Wr(e){return vt(e,ei(e))}function Vr(e,t,a){var n=Ms(e);return a&&Xa(e,t,a)&&(t=C),t?yt(n,t):n}function Yr(e){return Rt(e,ei(e))}function Zr(e,t,a){var n=null==e?C:Mt(e,pn(t),t+"");return n===C?a:n}function Xr(e,t){if(null==e)return!1;var a=es.call(e,t);if(!a&&!Qa(t)){if(t=pn(t),e=1==t.length?e:Mt(e,Wt(t,0,-1)),null==e)return!1;t=Cn(t),a=es.call(e,t)}return a||tn(e.length)&&Za(t,e.length)&&(zo(e)||xr(e))}function Qr(e,t,a){a&&Xa(e,t,a)&&(t=C);for(var n=-1,r=No(e),i=r.length,s={};++n0;++n=As(t,a)&&ea?0:+a||0,n),a-=t.length,a>=0&&e.indexOf(t,a)==a}function pi(e){return e=u(e),e&&Ee.test(e)?e.replace(ve,h):e}function mi(e){return e=u(e),e&&ze.test(e)?e.replace(Se,d):e||"(?:)"}function hi(e,t,a){e=u(e),t=+t;var n=e.length;if(n>=t||!vs(t))return e;var r=(t-n)/2,i=ys(r),s=ds(r);return a=Ia("",s,a),a.slice(0,i)+e+a}function di(e,t,a){return(a?Xa(e,t,a):null==t)?t=0:t&&(t=+t),e=vi(e),js(e,t||(Me.test(e)?16:10))}function gi(e,t){var a="";if(e=u(e),t=+t,1>t||!e||!vs(t))return a;do t%2&&(a+=e),t=ys(t/2),e+=e;while(t);return a}function yi(e,t,a){return e=u(e),a=null==a?0:As(0>a?0:+a||0,e.length),e.lastIndexOf(t,a)==a}function wi(e,a,n){var r=t.templateSettings;n&&Xa(e,a,n)&&(a=n=C),e=u(e),a=gt(yt({},n||a),r,dt);var i,s,o=gt(yt({},a.imports),r.imports,dt),c=No(o),l=ea(o,c),f=0,p=a.interpolate||Te,m="__p += '",h=qi((a.escape||Te).source+"|"+p.source+"|"+(p===je?Ie:Te).source+"|"+(a.evaluate||Te).source+"|$","g"),d="//# sourceURL="+("sourceURL"in a?a.sourceURL:"lodash.templateSources["+ ++$e+"]")+"\n";e.replace(h,function(t,a,n,r,o,u){return n||(n=r),m+=e.slice(f,u).replace(Le,g),a&&(i=!0,m+="' +\n__e("+a+") +\n'"),o&&(s=!0,m+="';\n"+o+";\n__p += '"),n&&(m+="' +\n((__t = ("+n+")) == null ? '' : __t) +\n'"),f=u+t.length,t}),m+="';\n";var y=a.variable;y||(m="with (obj) {\n"+m+"\n}\n"),m=(s?m.replace(de,""):m).replace(ge,"$1").replace(ye,"$1;"),m="function("+(y||"obj")+") {\n"+(y?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(s?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+m+"return __p\n}";var w=Zo(function(){return Ki(c,d+"return "+m).apply(C,l)});if(w.source=m,kr(w))throw w;return w}function vi(e,t,a){var n=e;return(e=u(e))?(a?Xa(n,t,a):null==t)?e.slice(A(e),D(e)+1):(t+="",e.slice(c(e,t),l(e,t)+1)):e}function bi(e,t,a){var n=e;return e=u(e),e?(a?Xa(n,t,a):null==t)?e.slice(A(e)):e.slice(c(e,t+"")):e}function Ei(e,t,a){var n=e;return e=u(e),e?(a?Xa(n,t,a):null==t)?e.slice(0,D(e)+1):e.slice(0,l(e,t+"")+1):e}function Ai(e,t,a){a&&Xa(e,t,a)&&(t=C);var n=B,r=T;if(null!=t)if(Mr(t)){var i="separator"in t?t.separator:i;n="length"in t?+t.length||0:n,r="omission"in t?u(t.omission):r}else n=+t||0;if(e=u(e),n>=e.length)return e;var s=n-r.length;if(1>s)return r;var o=e.slice(0,s);if(null==i)return o+r;if(Ur(i)){if(e.slice(s).search(i)){var c,l,f=e.slice(0,s);for(i.global||(i=qi(i.source,(Re.exec(i)||"")+"g")),i.lastIndex=0;c=i.exec(f);)l=c.index;o=o.slice(0,null==l?s:l)}}else if(e.indexOf(i,s)!=s){var p=o.lastIndexOf(i);p>-1&&(o=o.slice(0,p))}return o+r}function Di(e){return e=u(e),e&&be.test(e)?e.replace(we,j):e}function ji(e,t,a){return a&&Xa(e,t,a)&&(t=C),e=u(e),e.match(t||Ne)||[]}function xi(e,t,a){return a&&Xa(e,t,a)&&(t=C),w(e)?Si(e):bt(e,t)}function Ci(e){return function(){return e}}function _i(e){return e}function Si(e){return Lt(Et(e,!0))}function zi(e,t){return Nt(e,Et(t,!0))}function Fi(e,t,a){if(null==a){var n=Mr(t),r=n?No(t):C,i=r&&r.length?Rt(t,r):C;(i?i.length:n)||(i=!1,a=t,t=e,e=this)}i||(i=Rt(t,No(t)));var s=!0,o=-1,u=Rr(e),c=i.length;a===!1?s=!1:Mr(a)&&"chain"in a&&(s=a.chain);for(;++oe||!vs(e))return[];var n=-1,r=Ni(As(e,Ss));for(t=ia(t,a,1);++nn?r[n]=t(n):t(n);return r}function Bi(e){var t=++ts;return u(e)+t}function Ti(e,t){return(+e||0)+(+t||0)}function Li(e,t,a){return a&&Xa(e,t,a)&&(t=C),t=Na(t,a,3),1==t.length?mt(zo(e)?e:ln(e),t):Xt(e,t)}e=e?rt.defaults(nt.Object(),e,rt.pick(nt,Ue)):nt;var Ni=e.Array,Ui=e.Date,$i=e.Error,Ki=e.Function,Hi=e.Math,Gi=e.Number,Ji=e.Object,qi=e.RegExp,Wi=e.String,Vi=e.TypeError,Yi=Ni.prototype,Zi=Ji.prototype,Xi=Wi.prototype,Qi=Ki.prototype.toString,es=Zi.hasOwnProperty,ts=0,as=Zi.toString,ns=nt._,rs=qi("^"+Qi.call(es).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),is=e.ArrayBuffer,ss=e.clearTimeout,os=e.parseFloat,us=Hi.pow,cs=Zi.propertyIsEnumerable,ls=Ha(e,"Set"),fs=e.setTimeout,ps=Yi.splice,ms=e.Uint8Array,hs=Ha(e,"WeakMap"),ds=Hi.ceil,gs=Ha(Ji,"create"),ys=Hi.floor,ws=Ha(Ni,"isArray"),vs=e.isFinite,bs=Ha(Ji,"keys"),Es=Hi.max,As=Hi.min,Ds=Ha(Ui,"now"),js=e.parseInt,xs=Hi.random,Cs=Gi.NEGATIVE_INFINITY,_s=Gi.POSITIVE_INFINITY,Ss=4294967295,zs=Ss-1,Fs=Ss>>>1,ks=9007199254740991,Is=hs&&new hs,Rs={};t.support={};t.templateSettings={escape:Ae,evaluate:De,interpolate:je,variable:"",imports:{_:t}};var Ms=function(){function e(){}return function(t){if(Mr(t)){e.prototype=t;var a=new e;e.prototype=C}return a||{}}}(),Ps=fa(kt),Os=fa(It,!0),Bs=pa(),Ts=pa(!0),Ls=Is?function(e,t){return Is.set(e,t),e}:_i,Ns=Is?function(e){return Is.get(e)}:Ii,Us=Kt("length"),$s=function(){var e=0,t=0;return function(a,n){var r=ho(),i=N-(r-t);if(t=r,i>0){if(++e>=L)return a}else e=0;return Ls(a,n)}}(),Ks=yr(function(e,t){return w(e)&&Ya(e)?Dt(e,zt(t,!1,!0)):[]}),Hs=Ea(),Gs=Ea(!0),Js=yr(function(e){for(var t=e.length,a=t,n=Ni(f),r=$a(),i=r==s,o=[];a--;){var u=e[a]=Ya(u=e[a])?u:[];n[a]=i&&u.length>=120?ha(a&&u):null}var c=e[0],l=-1,f=c?c.length:0,p=n[0];e:for(;++l2?e[t-2]:C,n=t>1?e[t-1]:C;return t>2&&"function"==typeof a?t-=2:(a=t>1&&"function"==typeof n?(--t,n):C,n=C),e.length=t,Tn(e,a,n)}),eo=yr(function(e){return e=zt(e),this.thru(function(t){return Qe(zo(t)?t:[fn(t)],e)})}),to=yr(function(e,t){return wt(e,zt(t))}),ao=ca(function(e,t,a){es.call(e,a)?++e[a]:e[a]=1}),no=ba(Ps),ro=ba(Os,!0),io=ja(tt,Ps),so=ja(at,Os),oo=ca(function(e,t,a){es.call(e,a)?e[a].push(t):e[a]=[t]}),uo=ca(function(e,t,a){e[a]=t}),co=yr(function(e,t,a){var n=-1,r="function"==typeof t,i=Qa(t),s=Ya(e)?Ni(e.length):[];return Ps(e,function(e){var o=r?t:i&&null!=e?e[t]:C;s[++n]=o?o.apply(e,a):Va(e,t,a)}),s}),lo=ca(function(e,t,a){e[a?0:1].push(t)},function(){return[[],[]]}),fo=Fa(lt,Ps),po=Fa(ft,Os),mo=yr(function(e,t){if(null==e)return[];var a=t[2];return a&&Xa(t[0],t[1],a)&&(t.length=1),Zt(e,zt(t),[])}),ho=Ds||function(){return(new Ui).getTime()},go=yr(function(e,t,a){var n=S;if(a.length){var r=b(a,go.placeholder);n|=R}return Oa(e,n,t,a,r)}),yo=yr(function(e,t){t=t.length?zt(t):Yr(e);for(var a=-1,n=t.length;++a0||0>t)?new v(a):(0>e?a=a.takeRight(-e):e&&(a=a.drop(e)),t!==C&&(t=+t||0,a=0>t?a.dropRight(-t):a.take(t-e)),a)},v.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},v.prototype.toArray=function(){return this.take(_s)},kt(v.prototype,function(e,a){var r=/^(?:filter|map|reject)|While$/.test(a),i=/^(?:first|last)$/.test(a),s=t[i?"take"+("last"==a?"Right":""):a];s&&(t.prototype[a]=function(){var t=i?[1]:arguments,a=this.__chain__,o=this.__wrapped__,u=!!this.__actions__.length,c=o instanceof v,l=t[0],f=c||zo(o);f&&r&&"function"==typeof l&&1!=l.length&&(c=f=!1);var p=function(e){return i&&a?s(e,1)[0]:s.apply(C,ct([e],t))},m={func:Kn,args:[p],thisArg:C},h=c&&!u;if(i&&!a)return h?(o=o.clone(),o.__actions__.push(m),e.call(o)):s.call(C,this.value())[0];if(!i&&f){o=h?o:new v(this);var d=e.apply(o,t);return d.__actions__.push(m),new n(d,a)}return this.thru(p)})}),tt(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(e){var a=(/^(?:replace|split)$/.test(e)?Xi:Yi)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:join|pop|replace|shift)$/.test(e);t.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?a.apply(this.value(),e):this[n](function(t){return a.apply(t,e)})}}),kt(v.prototype,function(e,a){var n=t[a];if(n){var r=n.name,i=Rs[r]||(Rs[r]=[]);i.push({name:a,func:n})}}),Rs[ka(C,z).name]=[{name:"wrapper",func:C}],v.prototype.clone=X,v.prototype.reverse=ae,v.prototype.value=re,t.prototype.chain=Hn,t.prototype.commit=Gn,t.prototype.concat=eo,t.prototype.plant=Jn,t.prototype.reverse=qn,t.prototype.toString=Wn,t.prototype.run=t.prototype.toJSON=t.prototype.valueOf=t.prototype.value=Vn,t.prototype.collect=t.prototype.map,t.prototype.head=t.prototype.first,t.prototype.select=t.prototype.filter,t.prototype.tail=t.prototype.rest,t}var C,_="3.10.1",S=1,z=2,F=4,k=8,I=16,R=32,M=64,P=128,O=256,B=30,T="...",L=150,N=16,U=200,$=1,K=2,H="Expected a function",G="__lodash_placeholder__",J="[object Arguments]",q="[object Array]",W="[object Boolean]",V="[object Date]",Y="[object Error]",Z="[object Function]",X="[object Map]",Q="[object Number]",ee="[object Object]",te="[object RegExp]",ae="[object Set]",ne="[object String]",re="[object WeakMap]",ie="[object ArrayBuffer]",se="[object Float32Array]",oe="[object Float64Array]",ue="[object Int8Array]",ce="[object Int16Array]",le="[object Int32Array]",fe="[object Uint8Array]",pe="[object Uint8ClampedArray]",me="[object Uint16Array]",he="[object Uint32Array]",de=/\b__p \+= '';/g,ge=/\b(__p \+=) '' \+/g,ye=/(__e\(.*?\)|\b__t\)) \+\n'';/g,we=/&(?:amp|lt|gt|quot|#39|#96);/g,ve=/[&<>"'`]/g,be=RegExp(we.source),Ee=RegExp(ve.source),Ae=/<%-([\s\S]+?)%>/g,De=/<%([\s\S]+?)%>/g,je=/<%=([\s\S]+?)%>/g,xe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,Ce=/^\w*$/,_e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,Se=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,ze=RegExp(Se.source),Fe=/[\u0300-\u036f\ufe20-\ufe23]/g,ke=/\\(\\)?/g,Ie=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Re=/\w*$/,Me=/^0[xX]/,Pe=/^\[object .+?Constructor\]$/,Oe=/^\d+$/,Be=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Te=/($^)/,Le=/['\n\r\u2028\u2029\\]/g,Ne=function(){var e="[A-Z\\xc0-\\xd6\\xd8-\\xde]",t="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(e+"+(?="+e+t+")|"+e+"?"+t+"|"+e+"+|[0-9]+","g")}(),Ue=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"],$e=-1,Ke={};Ke[se]=Ke[oe]=Ke[ue]=Ke[ce]=Ke[le]=Ke[fe]=Ke[pe]=Ke[me]=Ke[he]=!0,Ke[J]=Ke[q]=Ke[ie]=Ke[W]=Ke[V]=Ke[Y]=Ke[Z]=Ke[X]=Ke[Q]=Ke[ee]=Ke[te]=Ke[ae]=Ke[ne]=Ke[re]=!1;var He={};He[J]=He[q]=He[ie]=He[W]=He[V]=He[se]=He[oe]=He[ue]=He[ce]=He[le]=He[Q]=He[ee]=He[te]=He[ne]=He[fe]=He[pe]=He[me]=He[he]=!0,He[Y]=He[Z]=He[X]=He[ae]=He[re]=!1;var Ge={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Je={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},qe={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},We={"function":!0,object:!0},Ve={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ye={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ze=We[typeof n]&&n&&!n.nodeType&&n,Xe=We[typeof a]&&a&&!a.nodeType&&a,Qe=Ze&&Xe&&"object"==typeof t&&t&&t.Object&&t,et=We[typeof self]&&self&&self.Object&&self,tt=We[typeof window]&&window&&window.Object&&window,at=Xe&&Xe.exports===Ze&&Ze,nt=Qe||tt!==(this&&this.window)&&tt||et||this,rt=x();"function"==typeof e&&"object"==typeof e.amd&&e.amd?(nt._=rt,e(function(){return rt})):Ze&&Xe?at?(Xe.exports=rt)._=rt:Ze._=rt:nt._=rt}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],195:[function(e,t,a){function n(e){if(e=""+e,!(e.length>1e4)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var a=parseFloat(t[1]),n=(t[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return a*f;case"days":case"day":case"d":return a*l;case"hours":case"hour":case"hrs":case"hr":case"h":return a*c;case"minutes":case"minute":case"mins":case"min":case"m":return a*u;case"seconds":case"second":case"secs":case"sec":case"s":return a*o;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a}}}}function r(e){return e>=l?Math.round(e/l)+"d":e>=c?Math.round(e/c)+"h":e>=u?Math.round(e/u)+"m":e>=o?Math.round(e/o)+"s":e+"ms"}function i(e){return s(e,l,"day")||s(e,c,"hour")||s(e,u,"minute")||s(e,o,"second")||e+" ms"}function s(e,t,a){return t>e?void 0:1.5*t>e?Math.floor(e/t)+" "+a:Math.ceil(e/t)+" "+a+"s"}var o=1e3,u=60*o,c=60*u,l=24*c,f=365.25*l;t.exports=function(e,t){return t=t||{},"string"==typeof e?n(e):t["long"]?i(e):r(e)}},{}],196:[function(t,a,n){(function(t){!function(t,n,r){n[t]=n[t]||r(),"undefined"!=typeof a&&a.exports?a.exports=n[t]:"function"==typeof e&&e.amd&&e(function(){return n[t]})}("Promise","undefined"!=typeof t?t:this,function(){"use strict";function e(e,t){p.add(e,t),f||(f=h(p.drain))}function t(e){var t,a=typeof e;return null==e||"object"!=a&&"function"!=a||(t=e.then),"function"==typeof t?t:!1}function a(){for(var e=0;e0&&e(a,u))}catch(c){i.call(new o(u),c)}}}function i(t){var n=this;n.triggered||(n.triggered=!0,n.def&&(n=n.def),n.msg=t,n.state=2,n.chain.length>0&&e(a,n))}function s(e,t,a,n){for(var r=0;r=0;n--){var r=e[n];"."===r?e.splice(n,1):".."===r?(e.splice(n,1),a++):a&&(e.splice(n,1),a--)}if(t)for(;a--;a)e.unshift("..");return e}function n(e,t){if(e.filter)return e.filter(t);for(var a=[],n=0;n=-1&&!r;i--){var s=i>=0?arguments[i]:e.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(a=s+"/"+a,r="/"===s.charAt(0))}return a=t(n(a.split("/"),function(e){return!!e}),!r).join("/"),(r?"/":"")+a||"."},a.normalize=function(e){var r=a.isAbsolute(e),i="/"===s(e,-1);return e=t(n(e.split("/"),function(e){return!!e}),!r).join("/"),e||r||(e="."),e&&i&&(e+="/"),(r?"/":"")+e},a.isAbsolute=function(e){return"/"===e.charAt(0)},a.join=function(){var e=Array.prototype.slice.call(arguments,0);return a.normalize(n(e,function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},a.relative=function(e,t){function n(e){for(var t=0;t=0&&""===e[a];a--);return t>a?[]:e.slice(t,a-t+1)}e=a.resolve(e).substr(1),t=a.resolve(t).substr(1);for(var r=n(e.split("/")),i=n(t.split("/")),s=Math.min(r.length,i.length),o=s,u=0;s>u;u++)if(r[u]!==i[u]){o=u;break}for(var c=[],u=o;ut&&(t=e.length+t),e.substr(t,a)}}).call(this,e("_process"))},{_process:202}],198:[function(e,t,a){"use strict";function n(e){return"undefined"!=typeof e&&(e=-1===e.indexOf("://")?"":e.split("://")[0]),e}function r(e){var t=n(e),a=i[t];if("undefined"==typeof a){if(""!==t)throw new Error("Unsupported scheme: "+t);a=s}return a}var i={file:e("./lib/loaders/file"),http:e("./lib/loaders/http"),https:e("./lib/loaders/http")},s="object"==typeof window||"function"==typeof importScripts?i.http:i.file;"undefined"==typeof Promise&&e("native-promise-only"),t.exports.load=function(e,t){var a=Promise.resolve();return"undefined"==typeof t&&(t={}),a=a.then(function(){if("undefined"==typeof e)throw new TypeError("location is required");if("string"!=typeof e)throw new TypeError("location must be a string");if("undefined"!=typeof t){if("object"!=typeof t)throw new TypeError("options must be an object");if("undefined"!=typeof t.processContent&&"function"!=typeof t.processContent)throw new TypeError("options.processContent must be a function")}}),a=a.then(function(){return new Promise(function(a,n){var i=r(e);i.load(e,t||{},function(e,t){e?n(e):a(t)})})}).then(function(e){return t.processContent?new Promise(function(a,n){t.processContent("object"==typeof e?e:{text:e},function(e,t){e?n(e):a(t)})}):"object"==typeof e?e.text:e})}},{"./lib/loaders/file":199,"./lib/loaders/http":200,"native-promise-only":196}],199:[function(e,t,a){"use strict";var n=new TypeError("The 'file' scheme is not supported in the browser");t.exports.getBase=function(){throw n},t.exports.load=function(){var e=arguments[arguments.length-1];if("function"!=typeof e)throw n;e(n)}},{}],200:[function(e,t,a){"use strict";var n=e("superagent"),r=["delete","get","head","patch","post","put"];t.exports.load=function(e,t,a){function i(e,t){e?a(e):("function"==typeof t.buffer&&t.buffer(!0),t.end(function(e,t){e?a(e):a(void 0,t)}))}var s,o,u=t.method?t.method.toLowerCase():"get";if("undefined"!=typeof t.method?"string"!=typeof t.method?s=new TypeError("options.method must be a string"):-1===r.indexOf(t.method)&&(s=new TypeError("options.method must be one of the following: "+r.slice(0,r.length-1).join(", ")+" or "+r[r.length-1])):"undefined"!=typeof t.prepareRequest&&"function"!=typeof t.prepareRequest&&(s=new TypeError("options.prepareRequest must be a function")),s)a(s);else if(o=n["delete"===u?"del":u](e),t.prepareRequest)try{t.prepareRequest(o,i)}catch(c){a(c)}else i(void 0,o)}},{superagent:215}],201:[function(e,t,a){function n(e){for(var t,a=[],n=0,r=0,i="";null!=(t=g.exec(e));){var s=t[0],u=t[1],c=t.index;if(i+=e.slice(r,c),r=c+s.length,u)i+=u[1];else{i&&(a.push(i),i="");var l=t[2],f=t[3],p=t[4],m=t[5],h=t[6],d=t[7],y="+"===h||"*"===h,w="?"===h||"*"===h,v=l||"/",b=p||m||(d?".*":"[^"+v+"]+?");a.push({name:f||n++,prefix:l||"",delimiter:v,optional:w,repeat:y,pattern:o(b)})}}return r1)for(var a=1;a1&&(n=a[0]+"@",e=a[1]),e=e.replace(R,".");var r=e.split("."),i=s(r,t).join(".");return n+i}function u(e){for(var t,a,n=[],r=0,i=e.length;i>r;)t=e.charCodeAt(r++),t>=55296&&56319>=t&&i>r?(a=e.charCodeAt(r++),56320==(64512&a)?n.push(((1023&t)<<10)+(1023&a)+65536):(n.push(t),r--)):n.push(t);return n}function c(e){return s(e,function(e){var t="";return e>65535&&(e-=65536,t+=B(e>>>10&1023|55296),e=56320|1023&e),t+=B(e)}).join("")}function l(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:D}function f(e,t){return e+22+75*(26>e)-((0!=t)<<5)}function p(e,t,a){var n=0;for(e=a?O(e/_):e>>1,e+=O(e/t);e>P*x>>1;n+=D)e=O(e/P);return O(n+(P+1)*e/(e+C))}function m(e){var t,a,n,r,s,o,u,f,m,h,d=[],g=e.length,y=0,w=z,v=S;for(a=e.lastIndexOf(F),0>a&&(a=0),n=0;a>n;++n)e.charCodeAt(n)>=128&&i("not-basic"),d.push(e.charCodeAt(n));for(r=a>0?a+1:0;g>r;){for(s=y,o=1,u=D;r>=g&&i("invalid-input"),f=l(e.charCodeAt(r++)),(f>=D||f>O((A-y)/o))&&i("overflow"),y+=f*o,m=v>=u?j:u>=v+x?x:u-v,!(m>f);u+=D)h=D-m,o>O(A/h)&&i("overflow"),o*=h;t=d.length+1,v=p(y-s,t,0==s),O(y/t)>A-w&&i("overflow"),w+=O(y/t),y%=t,d.splice(y++,0,w)}return c(d)}function h(e){var t,a,n,r,s,o,c,l,m,h,d,g,y,w,v,b=[];for(e=u(e),g=e.length,t=z,a=0,s=S,o=0;g>o;++o)d=e[o],128>d&&b.push(B(d));for(n=r=b.length,r&&b.push(F);g>n;){for(c=A,o=0;g>o;++o)d=e[o],d>=t&&c>d&&(c=d);for(y=n+1,c-t>O((A-a)/y)&&i("overflow"),a+=(c-t)*y,t=c,o=0;g>o;++o)if(d=e[o],t>d&&++a>A&&i("overflow"),d==t){for(l=a,m=D;h=s>=m?j:m>=s+x?x:m-s,!(h>l);m+=D)v=l-h,w=D-h,b.push(B(f(h+v%w,0))),l=O(v/w);b.push(B(f(l,0))),s=p(a,y,n==r),a=0,++n}++a,++t}return b.join("")}function d(e){return o(e,function(e){return k.test(e)?m(e.slice(4).toLowerCase()):e})}function g(e){return o(e,function(e){return I.test(e)?"xn--"+h(e):e})}var y="object"==typeof n&&n&&!n.nodeType&&n,w="object"==typeof a&&a&&!a.nodeType&&a,v="object"==typeof t&&t;(v.global===v||v.window===v||v.self===v)&&(r=v);var b,E,A=2147483647,D=36,j=1,x=26,C=38,_=700,S=72,z=128,F="-",k=/^xn--/,I=/[^\x20-\x7E]/,R=/[\x2E\u3002\uFF0E\uFF61]/g,M={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},P=D-j,O=Math.floor,B=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:u,encode:c},decode:m,encode:h,toASCII:g,toUnicode:d},"function"==typeof e&&"object"==typeof e.amd&&e.amd)e("punycode",function(){return b});else if(y&&w)if(a.exports==y)w.exports=b;else for(E in b)b.hasOwnProperty(E)&&(y[E]=b[E]);else r.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],204:[function(e,t,a){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,a,i){t=t||"&",a=a||"=";var s={};if("string"!=typeof e||0===e.length)return s;var o=/\+/g;e=e.split(t);var u=1e3;i&&"number"==typeof i.maxKeys&&(u=i.maxKeys);var c=e.length;u>0&&c>u&&(c=u);for(var l=0;c>l;++l){var f,p,m,h,d=e[l].replace(o,"%20"),g=d.indexOf(a);g>=0?(f=d.substr(0,g),p=d.substr(g+1)):(f=d,p=""),m=decodeURIComponent(f),h=decodeURIComponent(p),n(s,m)?r(s[m])?s[m].push(h):s[m]=[s[m],h]:s[m]=h}return s};var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],205:[function(e,t,a){"use strict";function n(e,t){if(e.map)return e.map(t);for(var a=[],n=0;n=97&&122>=e?-32:e>=65&&90>=e?32:0)}function r(){return!this.randInt(0,1)}function i(e){return e instanceof c?e.index(this.randInt(0,e.length-1)):e[this.randInt(0,e.length-1)]}function s(e){if(e.type===u.types.CHAR)return new c(e.value);if(e.type===u.types.RANGE)return new c(e.from,e.to);if(e.type===u.types.SET){for(var t=new c,a=0;af;f++)u+=o.call(this,a[f],t);return e.remember&&(t[e.groupNumber]=u),u;case l.POSITION:return"";case l.SET:var m=s.call(this,e);return m.length?String.fromCharCode(i.call(this,m)):"";case l.REPETITION:for(c=this.randInt(e.min,e.max===1/0?e.min+this.max:e.max),u="",f=0;c>f;f++)u+=o.call(this,e.value,t);return u;case l.REFERENCE:return t[e.value-1]||"";case l.CHAR:var h=this.ignoreCase&&r.call(this)?n(e.value):e.value;return String.fromCharCode(h)}}var u=e("ret"),c=e("discontinuous-range"),l=u.types,f=t.exports=function(e,t){if(this.defaultRange=this.defaultRange.clone(),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,"number"==typeof e.max&&(this.max=e.max),e=e.source;else{if("string"!=typeof e)throw new Error("Expected a regexp or string");this.ignoreCase=t&&-1!==t.indexOf("i"),this.multiline=t&&-1!==t.indexOf("m")}this.tokens=u(e)};f.prototype.max=100,f.prototype.gen=function(){return o.call(this,this.tokens,[])},f.randexp=function(e,t){var a;return void 0===e._randexp?(a=new f(e,t),e._randexp=a):(a=e._randexp,"number"==typeof e.max&&(a.max=e.max),e.defaultRange instanceof c&&(a.defaultRange=e.defaultRange),"function"==typeof e.randInt&&(a.randInt=e.randInt)),a.gen()},f.sugar=function(){RegExp.prototype.gen=function(){return f.randexp(this)}},f.prototype.defaultRange=new c(32,126),f.prototype.randInt=function(e,t){return e+Math.floor(Math.random()*(1+t-e))}},{"discontinuous-range":31,ret:209}],208:[function(e,t,a){t.exports=function(e,t,a){for(var n=0,r=e.length,i=3==arguments.length?a:e[n++];r>n;)i=t.call(null,i,e[n],++n,e);return i}},{}],209:[function(e,t,a){var n=e("./util"),r=e("./types"),i=e("./sets"),s=e("./positions");t.exports=function(e){var t,a,o=0,u={type:r.ROOT,stack:[]},c=u,l=u.stack,f=[],p=function(t){n.error(e,"Nothing to repeat at column "+(t-1))},m=n.strToChars(e);for(t=m.length;t>o;)switch(a=m[o++]){case"\\":switch(a=m[o++]){case"b":l.push(s.wordBoundary());break;case"B":l.push(s.nonWordBoundary());break;case"w":l.push(i.words());break;case"W":l.push(i.notWords());break;case"d":l.push(i.ints());break;case"D":l.push(i.notInts());break;case"s":l.push(i.whitespace());break;case"S":l.push(i.notWhitespace());break;default:/\d/.test(a)?l.push({type:r.REFERENCE,value:parseInt(a,10)}):l.push({type:r.CHAR,value:a.charCodeAt(0)})}break;case"^":l.push(s.begin());break;case"$":l.push(s.end());break;case"[":var h;"^"===m[o]?(h=!0,o++):h=!1;var d=n.tokenizeClass(m.slice(o),e);o+=d[1],l.push({type:r.SET,set:d[0],not:h});break;case".":l.push(i.anyChar());break;case"(":var g={type:r.GROUP,stack:[],remember:!0};a=m[o],"?"===a&&(a=m[o+1],o+=2,"="===a?g.followedBy=!0:"!"===a?g.notFollowedBy=!0:":"!==a&&n.error(e,"Invalid group, character '"+a+"' after '?' at column "+(o-1)),g.remember=!1),l.push(g),f.push(c),c=g,l=g.stack;break;case")":0===f.length&&n.error(e,"Unmatched ) at column "+(o-1)),c=f.pop(),l=c.options?c.options[c.options.length-1]:c.stack;break;case"|":c.options||(c.options=[c.stack],delete c.stack);var y=[];c.options.push(y),l=y;break;case"{":var w,v,b=/^(\d+)(,(\d+)?)?\}/.exec(m.slice(o));null!==b?(w=parseInt(b[1],10),v=b[2]?b[3]?parseInt(b[3],10):1/0:w,o+=b[0].length,l.push({type:r.REPETITION,min:w,max:v,value:l.pop()})):l.push({type:r.CHAR,value:123});break;case"?":0===l.length&&p(o),l.push({type:r.REPETITION,min:0,max:1,value:l.pop()});break;case"+":0===l.length&&p(o),l.push({type:r.REPETITION,min:1,max:1/0,value:l.pop()});break;case"*":0===l.length&&p(o),l.push({type:r.REPETITION,min:0,max:1/0,value:l.pop()});break;default:l.push({type:r.CHAR,value:a.charCodeAt(0)})}return 0!==f.length&&n.error(e,"Unterminated group"),u},t.exports.types=r},{"./positions":210,"./sets":211,"./types":212,"./util":213}],210:[function(e,t,a){var n=e("./types");a.wordBoundary=function(){return{type:n.POSITION,value:"b"}},a.nonWordBoundary=function(){return{type:n.POSITION,value:"B"}},a.begin=function(){return{type:n.POSITION,value:"^"}},a.end=function(){return{type:n.POSITION,value:"$"}}},{"./types":212}],211:[function(e,t,a){var n=e("./types"),r=function(){return[{type:n.RANGE,from:48,to:57}]},i=function(){return[{type:n.CHAR,value:95},{type:n.RANGE,from:97,to:122},{type:n.RANGE,from:65,to:90}].concat(r())},s=function(){return[{type:n.CHAR,value:9},{type:n.CHAR,value:10},{type:n.CHAR,value:11},{type:n.CHAR,value:12},{type:n.CHAR,value:13},{type:n.CHAR,value:32},{type:n.CHAR,value:160},{type:n.CHAR,value:5760},{type:n.CHAR,value:6158},{type:n.CHAR,value:8192},{type:n.CHAR,value:8193},{type:n.CHAR,value:8194},{type:n.CHAR,value:8195},{type:n.CHAR,value:8196},{type:n.CHAR,value:8197},{type:n.CHAR,value:8198},{type:n.CHAR,value:8199},{type:n.CHAR,value:8200},{type:n.CHAR,value:8201},{type:n.CHAR,value:8202},{type:n.CHAR,value:8232},{type:n.CHAR,value:8233},{type:n.CHAR,value:8239},{type:n.CHAR,value:8287},{type:n.CHAR,value:12288},{type:n.CHAR,value:65279}]},o=function(){return[{type:n.CHAR,value:10},{type:n.CHAR,value:13},{type:n.CHAR,value:8232},{type:n.CHAR,value:8233}]};a.words=function(){return{type:n.SET,set:i(),not:!1}},a.notWords=function(){return{type:n.SET,set:i(),not:!0}},a.ints=function(){return{type:n.SET,set:r(),not:!1}},a.notInts=function(){return{type:n.SET,set:r(),not:!0}},a.whitespace=function(){return{type:n.SET,set:s(),not:!1}},a.notWhitespace=function(){return{type:n.SET,set:s(),not:!0}},a.anyChar=function(){return{type:n.SET,set:o(),not:!0}}},{"./types":212}],212:[function(e,t,a){t.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},{}],213:[function(e,t,a){var n=e("./types"),r=e("./sets"),i="@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?",s={0:0,t:9,n:10,v:11,f:12,r:13};a.strToChars=function(e){var t=/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z\[\\\]\^?])|([0tnvfr]))/g;return e=e.replace(t,function(e,t,a,n,r,o,u,c){if(a)return e;var l=t?8:n?parseInt(n,16):r?parseInt(r,16):o?parseInt(o,8):u?i.indexOf(u):c?s[c]:void 0,f=String.fromCharCode(l);return/[\[\]{}\^$.|?*+()]/.test(f)&&(f="\\"+f),f})},a.tokenizeClass=function(e,t){for(var i,s,o=[],u=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g;null!=(i=u.exec(e));)if(i[1])o.push(r.words());else if(i[2])o.push(r.ints());else if(i[3])o.push(r.whitespace());else if(i[4])o.push(r.notWords());else if(i[5])o.push(r.notInts());else if(i[6])o.push(r.notWhitespace());else if(i[7])o.push({ -type:n.RANGE,from:(i[8]||i[9]).charCodeAt(0),to:i[10].charCodeAt(0)});else{if(!(s=i[12]))return[o,u.lastIndex];o.push({type:n.CHAR,value:s.charCodeAt(0)})}a.error(t,"Unterminated character class")},a.error=function(e,t){throw new SyntaxError("Invalid regular expression: /"+e+"/: "+t)}},{"./sets":211,"./types":212}],214:[function(e,t,a){"use strict";t.exports=function(e){var t=/^\\\\\?\\/.test(e),a=/[^\x00-\x80]+/.test(e);return t||a?e:e.replace(/\\/g,"/")}},{}],215:[function(e,t,a){function n(){}function r(e){var t={}.toString.call(e);switch(t){case"[object File]":case"[object Blob]":case"[object FormData]":return!0;default:return!1}}function i(e){return e===Object(e)}function s(e){if(!i(e))return e;var t=[];for(var a in e)null!=e[a]&&o(t,a,e[a]);return t.join("&")}function o(e,t,a){return Array.isArray(a)?a.forEach(function(a){o(e,t,a)}):void e.push(encodeURIComponent(t)+"="+encodeURIComponent(a))}function u(e){for(var t,a,n={},r=e.split("&"),i=0,s=r.length;s>i;++i)a=r[i],t=a.split("="),n[decodeURIComponent(t[0])]=decodeURIComponent(t[1]);return n}function c(e){var t,a,n,r,i=e.split(/\r?\n/),s={};i.pop();for(var o=0,u=i.length;u>o;++o)a=i[o],t=a.indexOf(":"),n=a.slice(0,t).toLowerCase(),r=b(a.slice(t+1)),s[n]=r;return s}function l(e){return/[\/+]json\b/.test(e)}function f(e){return e.split(/ *; */).shift()}function p(e){return v(e.split(/ *; */),function(e,t){var a=t.split(/ *= */),n=a.shift(),r=a.shift();return n&&r&&(e[n]=r),e},{})}function m(e,t){t=t||{},this.req=e,this.xhr=this.req.xhr,this.text="HEAD"!=this.req.method&&(""===this.xhr.responseType||"text"===this.xhr.responseType)||"undefined"==typeof this.xhr.responseType?this.xhr.responseText:null,this.statusText=this.req.xhr.statusText,this.setStatusProperties(this.xhr.status),this.header=this.headers=c(this.xhr.getAllResponseHeaders()),this.header["content-type"]=this.xhr.getResponseHeader("content-type"),this.setHeaderProperties(this.header),this.body="HEAD"!=this.req.method?this.parseBody(this.text?this.text:this.xhr.response):null}function h(e,t){var a=this;w.call(this),this._query=this._query||[],this.method=e,this.url=t,this.header={},this._header={},this.on("end",function(){var e=null,t=null;try{t=new m(a)}catch(n){return e=new Error("Parser is unable to parse the response"),e.parse=!0,e.original=n,e.rawResponse=a.xhr&&a.xhr.responseText?a.xhr.responseText:null,a.callback(e)}if(a.emit("response",t),e)return a.callback(e,t);if(t.status>=200&&t.status<300)return a.callback(e,t);var r=new Error(t.statusText||"Unsuccessful HTTP response");r.original=e,r.response=t,r.status=t.status,a.callback(r,t)})}function d(e,t){return"function"==typeof t?new h("GET",e).end(t):1==arguments.length?new h("GET",e):new h(e,t)}function g(e,t){var a=d("DELETE",e);return t&&a.end(t),a}var y,w=e("emitter"),v=e("reduce");y="undefined"!=typeof window?window:"undefined"!=typeof self?self:this,d.getXHR=function(){if(!(!y.XMLHttpRequest||y.location&&"file:"==y.location.protocol&&y.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}return!1};var b="".trim?function(e){return e.trim()}:function(e){return e.replace(/(^\s*|\s*$)/g,"")};d.serializeObject=s,d.parseString=u,d.types={html:"text/html",json:"application/json",xml:"application/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},d.serialize={"application/x-www-form-urlencoded":s,"application/json":JSON.stringify},d.parse={"application/x-www-form-urlencoded":u,"application/json":JSON.parse},m.prototype.get=function(e){return this.header[e.toLowerCase()]},m.prototype.setHeaderProperties=function(e){var t=this.header["content-type"]||"";this.type=f(t);var a=p(t);for(var n in a)this[n]=a[n]},m.prototype.parseBody=function(e){var t=d.parse[this.type];return t&&e&&(e.length||e instanceof Object)?t(e):null},m.prototype.setStatusProperties=function(e){1223===e&&(e=204);var t=e/100|0;this.status=this.statusCode=e,this.statusType=t,this.info=1==t,this.ok=2==t,this.clientError=4==t,this.serverError=5==t,this.error=4==t||5==t?this.toError():!1,this.accepted=202==e,this.noContent=204==e,this.badRequest=400==e,this.unauthorized=401==e,this.notAcceptable=406==e,this.notFound=404==e,this.forbidden=403==e},m.prototype.toError=function(){var e=this.req,t=e.method,a=e.url,n="cannot "+t+" "+a+" ("+this.status+")",r=new Error(n);return r.status=this.status,r.method=t,r.url=a,r},d.Response=m,w(h.prototype),h.prototype.use=function(e){return e(this),this},h.prototype.timeout=function(e){return this._timeout=e,this},h.prototype.clearTimeout=function(){return this._timeout=0,clearTimeout(this._timer),this},h.prototype.abort=function(){return this.aborted?void 0:(this.aborted=!0,this.xhr.abort(),this.clearTimeout(),this.emit("abort"),this)},h.prototype.set=function(e,t){if(i(e)){for(var a in e)this.set(a,e[a]);return this}return this._header[e.toLowerCase()]=t,this.header[e]=t,this},h.prototype.unset=function(e){return delete this._header[e.toLowerCase()],delete this.header[e],this},h.prototype.getHeader=function(e){return this._header[e.toLowerCase()]},h.prototype.type=function(e){return this.set("Content-Type",d.types[e]||e),this},h.prototype.parse=function(e){return this._parser=e,this},h.prototype.accept=function(e){return this.set("Accept",d.types[e]||e),this},h.prototype.auth=function(e,t){var a=btoa(e+":"+t);return this.set("Authorization","Basic "+a),this},h.prototype.query=function(e){return"string"!=typeof e&&(e=s(e)),e&&this._query.push(e),this},h.prototype.field=function(e,t){return this._formData||(this._formData=new y.FormData),this._formData.append(e,t),this},h.prototype.attach=function(e,t,a){return this._formData||(this._formData=new y.FormData),this._formData.append(e,t,a),this},h.prototype.send=function(e){var t=i(e),a=this.getHeader("Content-Type");if(t&&i(this._data))for(var n in e)this._data[n]=e[n];else"string"==typeof e?(a||this.type("form"),a=this.getHeader("Content-Type"),"application/x-www-form-urlencoded"==a?this._data=this._data?this._data+"&"+e:e:this._data=(this._data||"")+e):this._data=e;return!t||r(e)?this:(a||this.type("json"),this)},h.prototype.callback=function(e,t){var a=this._callback;this.clearTimeout(),a(e,t)},h.prototype.crossDomainError=function(){var e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},h.prototype.timeoutError=function(){var e=this._timeout,t=new Error("timeout of "+e+"ms exceeded");t.timeout=e,this.callback(t)},h.prototype.withCredentials=function(){return this._withCredentials=!0,this},h.prototype.end=function(e){var t=this,a=this.xhr=d.getXHR(),i=this._query.join("&"),s=this._timeout,o=this._formData||this._data;this._callback=e||n,a.onreadystatechange=function(){if(4==a.readyState){var e;try{e=a.status}catch(n){e=0}if(0==e){if(t.timedout)return t.timeoutError();if(t.aborted)return;return t.crossDomainError()}t.emit("end")}};var u=function(e){e.total>0&&(e.percent=e.loaded/e.total*100),t.emit("progress",e)};this.hasListeners("progress")&&(a.onprogress=u);try{a.upload&&this.hasListeners("progress")&&(a.upload.onprogress=u)}catch(c){}if(s&&!this._timer&&(this._timer=setTimeout(function(){t.timedout=!0,t.abort()},s)),i&&(i=d.serializeObject(i),this.url+=~this.url.indexOf("?")?"&"+i:"?"+i),a.open(this.method,this.url,!0),this._withCredentials&&(a.withCredentials=!0),"GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof o&&!r(o)){var f=this.getHeader("Content-Type"),p=this._parser||d.serialize[f?f.split(";")[0]:""];!p&&l(f)&&(p=d.serialize["application/json"]),p&&(o=p(o))}for(var m in this.header)null!=this.header[m]&&a.setRequestHeader(m,this.header[m]);return this.emit("request",this),a.send("undefined"!=typeof o?o:null),this},h.prototype.then=function(e,t){return this.end(function(a,n){a?t(a):e(n)})},d.Request=h,d.get=function(e,t,a){var n=d("GET",e);return"function"==typeof t&&(a=t,t=null),t&&n.query(t),a&&n.end(a),n},d.head=function(e,t,a){var n=d("HEAD",e);return"function"==typeof t&&(a=t,t=null),t&&n.send(t),a&&n.end(a),n},d.del=g,d["delete"]=g,d.patch=function(e,t,a){var n=d("PATCH",e);return"function"==typeof t&&(a=t,t=null),t&&n.send(t),a&&n.end(a),n},d.post=function(e,t,a){var n=d("POST",e);return"function"==typeof t&&(a=t,t=null),t&&n.send(t),a&&n.end(a),n},d.put=function(e,t,a){var n=d("PUT",e);return"function"==typeof t&&(a=t,t=null),t&&n.send(t),a&&n.end(a),n},t.exports=d},{emitter:21,reduce:208}],216:[function(e,t,a){var n=function(){function e(e){throw new RangeError(x[e])}function t(e,t){for(var a=e.length,n=[];a--;)n[a]=t(e[a]);return n}function a(e,a){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(j,".");var i=e.split("."),s=t(i,a).join(".");return r+s}function n(e){for(var t,a,n=[],r=0,i=e.length;i>r;)t=e.charCodeAt(r++),t>=55296&&56319>=t&&i>r?(a=e.charCodeAt(r++),56320==(64512&a)?n.push(((1023&t)<<10)+(1023&a)+65536):(n.push(t),r--)):n.push(t);return n}function r(e){return t(e,function(e){var t="";return e>65535&&(e-=65536,t+=S(e>>>10&1023|55296),e=56320|1023&e),t+=S(e)}).join("")}function i(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:h}function s(e,t){return e+22+75*(26>e)-((0!=t)<<5)}function o(e,t,a){var n=0;for(e=a?_(e/w):e>>1,e+=_(e/t);e>C*g>>1;n+=h)e=_(e/C);return _(n+(C+1)*e/(e+y))}function u(t){var a,n,s,u,c,l,f,p,y,w,A=[],D=t.length,j=0,x=b,C=v;for(n=t.lastIndexOf(E),0>n&&(n=0),s=0;n>s;++s)t.charCodeAt(s)>=128&&e("not-basic"),A.push(t.charCodeAt(s));for(u=n>0?n+1:0;D>u;){for(c=j,l=1,f=h;u>=D&&e("invalid-input"),p=i(t.charCodeAt(u++)),(p>=h||p>_((m-j)/l))&&e("overflow"),j+=p*l,y=C>=f?d:f>=C+g?g:f-C,!(y>p);f+=h)w=h-y,l>_(m/w)&&e("overflow"),l*=w;a=A.length+1,C=o(j-c,a,0==c),_(j/a)>m-x&&e("overflow"),x+=_(j/a),j%=a,A.splice(j++,0,x)}return r(A)}function c(t){var a,r,i,u,c,l,f,p,y,w,A,D,j,x,C,z=[];for(t=n(t),D=t.length,a=b,r=0,c=v,l=0;D>l;++l)A=t[l],128>A&&z.push(S(A));for(i=u=z.length,u&&z.push(E);D>i;){for(f=m,l=0;D>l;++l)A=t[l],A>=a&&f>A&&(f=A);for(j=i+1,f-a>_((m-r)/j)&&e("overflow"),r+=(f-a)*j,a=f,l=0;D>l;++l)if(A=t[l],a>A&&++r>m&&e("overflow"),A==a){for(p=r,y=h;w=c>=y?d:y>=c+g?g:y-c,!(w>p);y+=h)C=p-w,x=h-w,z.push(S(s(w+C%x,0))),p=_(C/x);z.push(S(s(p,0))),c=o(r,j,i==u),r=0,++i}++r,++a}return z.join("")}function l(e){return a(e,function(e){return A.test(e)?u(e.slice(4).toLowerCase()):e})}function f(e){return a(e,function(e){return D.test(e)?"xn--"+c(e):e})}var p,m=2147483647,h=36,d=1,g=26,y=38,w=700,v=72,b=128,E="-",A=/^xn--/,D=/[^\x20-\x7E]/,j=/[\x2E\u3002\uFF0E\uFF61]/g,x={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},C=h-d,_=Math.floor,S=String.fromCharCode;return p={version:"1.3.2",ucs2:{decode:n,encode:r},decode:u,encode:c,toASCII:f,toUnicode:l}}();"undefined"==typeof COMPILED&&"undefined"!=typeof t&&(t.exports=n)},{}],217:[function(e,t,a){e("./schemes/http"),e("./schemes/urn"),e("./schemes/mailto")},{"./schemes/http":218,"./schemes/mailto":219,"./schemes/urn":220}],218:[function(e,t,a){if("undefined"==typeof COMPILED&&"undefined"==typeof n&&"function"==typeof e)var n=e("../uri");n.SCHEMES.http=n.SCHEMES.https={domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,t){return(e.port===("https"!==String(e.scheme).toLowerCase()?80:443)||""===e.port)&&(e.port=void 0),e.path||(e.path="/"),e}}},{"../uri":221}],219:[function(e,t,a){if("undefined"==typeof COMPILED&&"undefined"==typeof n&&"function"==typeof e)var n=e("../uri"),r=e("../punycode");!function(){function e(){for(var e=[],t=0;t1){e[0]=e[0].slice(0,-1);for(var a=e.length-1,n=1;a>n;++n)e[n]=e[n].slice(1,-1);return e[a]=e[a].slice(1),e.join("")}return e[0]}function t(e){return"(?:"+e+")"}function a(e){return e.toUpperCase()}function i(e){var t=n.pctDecChars(e);return t.match(k)?t:e}function s(e){return void 0!==e&&null!==e?e instanceof Array&&!e.callee?e:"number"!=typeof e.length||e.split||e.setInterval||e.call?[e]:Array.prototype.slice.call(e):[]}var o={},u=n.IRI_SUPPORT,c="[A-Za-z0-9\\-\\.\\_\\~"+(u?"\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF":"")+"]",l="[0-9A-Fa-f]",f=t(t("%[EFef]"+l+"%"+l+l+"%"+l+l)+"|"+t("%[89A-Fa-f]"+l+"%"+l+l)+"|"+t("%"+l+l)),p="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",m="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",h=e(m,'[\\"\\\\]'),d=t(p+"+"+t("\\."+p+"+")+"*"),g=t("\\\\"+h),y=t(m+"|"+g),w=t('\\"'+y+'*\\"'),v="[\\x21-\\x5A\\x5E-\\x7E]",b="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",E=t(c+"|"+f+"|"+b),A=t(d+"|\\["+v+"*\\]"),D=t(d+"|"+w),j=t(D+"\\@"+A),x=t(j+t("\\,"+j)+"*"),C=t(E+"*"),_=C,S=t(C+"\\="+_),z=t(S+t("\\&"+S)+"*"),F=t("\\?"+z),k=(n.VALIDATE_SUPPORT&&new RegExp("^mailto\\:"+x+"?"+F+"?$"),new RegExp(c,"g")),I=new RegExp(f,"g"),R=new RegExp(e("[^]",p,"[\\.]",'[\\"]',h),"g"),M=new RegExp(e("[^]",p,"[\\.]","[\\[]",v,"[\\]]"),"g"),P=new RegExp(e("[^]",c,b),"g"),O=P,B=n.VALIDATE_SUPPORT&&new RegExp("^"+x+"$"),T=n.VALIDATE_SUPPORT&&new RegExp("^"+z+"$");n.SCHEMES.mailto={parse:function(e,t){n.VALIDATE_SUPPORT&&!e.error&&(e.path&&!B.test(e.path)?e.error="Email address is not valid":e.query&&!T.test(e.query)&&(e.error="Header fields are invalid"));var a=e.to=e.path?e.path.split(","):[];if(e.path=void 0,e.query){for(var i=!1,s={},o=e.query.split("&"),u=0,c=o.length;c>u;++u){var l=o[u].split("=");switch(l[0]){case"to":for(var f=l[1].split(","),p=0,m=f.length;m>p;++p)a.push(f[p]);break;case"subject":e.subject=n.unescapeComponent(l[1],t);break;case"body":e.body=n.unescapeComponent(l[1],t);break;default:i=!0,s[n.unescapeComponent(l[0],t)]=n.unescapeComponent(l[1],t)}}i&&(e.headers=s)}e.query=void 0;for(var u=0,c=a.length;c>u;++u){var h=a[u].split("@");if(h[0]=n.unescapeComponent(h[0]),"undefined"==typeof r||t.unicodeSupport)h[1]=n.unescapeComponent(h[1],t).toLowerCase();else try{h[1]=r.toASCII(n.unescapeComponent(h[1],t).toLowerCase())}catch(d){e.error=e.error||"Email address's domain name can not be converted to ASCII via punycode: "+d}a[u]=h.join("@")}return e},serialize:function(e,t){var u=s(e.to);if(u){for(var c=0,l=u.length;l>c;++c){var f=String(u[c]),p=f.lastIndexOf("@"),m=f.slice(0,p),h=f.slice(p+1);if(m=m.replace(I,i).replace(I,a).replace(R,n.pctEncChar),"undefined"!=typeof r)try{h=t.iri?r.toUnicode(h):r.toASCII(n.unescapeComponent(h,t).toLowerCase())}catch(d){e.error=e.error||"Email address's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+d}else h=h.replace(I,i).toLowerCase().replace(I,a).replace(M,n.pctEncChar);u[c]=m+"@"+h}e.path=u.join(",")}var g=e.headers=e.headers||{};e.subject&&(g.subject=e.subject),e.body&&(g.body=e.body);var y=[];for(var w in g)g[w]!==o[w]&&y.push(w.replace(I,i).replace(I,a).replace(P,n.pctEncChar)+"="+g[w].replace(I,i).replace(I,a).replace(O,n.pctEncChar));return y.length&&(e.query=y.join("&")),e}}}()},{"../punycode":216,"../uri":221}],220:[function(e,t,a){if("undefined"==typeof COMPILED&&"undefined"==typeof n&&"function"==typeof e)var n=e("../uri");!function(){var e=n.pctEncChar,t="(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})",a="(?:\\%[0-9A-Fa-f]{2})",r="[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]",i="(?:(?:"+a+"|"+r+")+)",s=new RegExp("^urn\\:("+t+")$"),o=new RegExp("^("+t+")\\:("+i+")$"),u=/^([^\:]+)\:(.*)/,c=/[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g,l=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/;n.SCHEMES.urn={parse:function(e,t){var a,r,i=e.path.match(o);return i||(t.tolerant||(e.error=e.error||"URN is not strictly valid."),i=e.path.match(u)),i?(a="urn:"+i[1].toLowerCase(),r=n.SCHEMES[a],r||(r=n.SCHEMES[a]={parse:function(e,t){return e},serialize:n.SCHEMES.urn.serialize}),e.scheme=a,e.path=i[2],e=r.parse(e,t)):e.error=e.error||"URN can not be parsed.",e},serialize:function(t,a){var n,r=t.scheme||a.scheme;if(r&&"urn"!==r){var n=r.match(s);n||(n=["urn:"+r,r]),t.scheme="urn",t.path=n[1]+":"+(t.path?t.path.replace(c,e):"")}return t}},n.SCHEMES["urn:uuid"]={parse:function(e,t){return t.tolerant||e.path&&e.path.match(l)||(e.error=e.error||"UUID is not valid."),e},serialize:function(e,t){return t.tolerant||e.path&&e.path.match(l)?e.path=(e.path||"").toLowerCase():e.scheme=void 0,n.SCHEMES.urn.serialize(e,t)}}}()},{"../uri":221}],221:[function(e,t,a){var n=!1,r=!0,i=!0,s=function(){function e(){for(var e=[],t=0;t1){e[0]=e[0].slice(0,-1);for(var a=e.length-1,n=1;a>n;++n)e[n]=e[n].slice(1,-1);return e[a]=e[a].slice(1),e.join("")}return e[0]}function t(e){return"(?:"+e+")"}function a(a){var n="[A-Za-z]",r="[0-9]",s=e(r,"[A-Fa-f]"),o=t(t("%[EFef]"+s+"%"+s+s+"%"+s+s)+"|"+t("%[89A-Fa-f]"+s+"%"+s+s)+"|"+t("%"+s+s)),u="[\\:\\/\\?\\#\\[\\]\\@]",c="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",l=e(u,c),f=a?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",p=a?"[\\uE000-\\uF8FF]":"[]",m=e(n,r,"[\\-\\.\\_\\~]",f),h=t(n+e(n,r,"[\\+\\-\\.]")+"*"),d=t(t(o+"|"+e(m,c,"[\\:]"))+"*"),g=t(t("25[0-5]")+"|"+t("2[0-4]"+r)+"|"+t("1"+r+r)+"|"+t("[1-9]"+r)+"|"+r),y=t(g+"\\."+g+"\\."+g+"\\."+g),w=t(s+"{1,4}"),v=(t(t(w+"\\:"+w)+"|"+y),t(e(m,c,"[\\:]")+"+")),b=t("v"+s+"+\\."+e(m,c,"[\\:]")+"+"),E=t("\\["+t(v+"|"+b)+"\\]"),A=t(t(o+"|"+e(m,c))+"*"),D=t(E+"|"+y+"(?!"+A+")|"+A),j=t(r+"*"),x=t(t(d+"@")+"?"+D+t("\\:"+j)+"?"),C=t(o+"|"+e(m,c,"[\\:\\@]")),_=t(C+"*"),S=t(C+"+"),z=t(t(o+"|"+e(m,c,"[\\@]"))+"+"),F=t(t("\\/"+_)+"*"),k=t("\\/"+t(S+F)+"?"),I=t(z+F),R=t(S+F),M="(?!"+C+")",P=(t(F+"|"+k+"|"+I+"|"+R+"|"+M),t(t(C+"|"+e("[\\/\\?]",p))+"*")),O=t(t(C+"|[\\/\\?]")+"*"),B=t(t("\\/\\/"+x+F)+"|"+k+"|"+R+"|"+M),T=t(h+"\\:"+B+t("\\?"+P)+"?"+t("\\#"+O)+"?"),L=t(t("\\/\\/"+x+F)+"|"+k+"|"+I+"|"+M),N=t(L+t("\\?"+P)+"?"+t("\\#"+O)+"?"),U=(t(T+"|"+N),t(h+"\\:"+B+t("\\?"+P)+"?"),"^("+h+")\\:"+t(t("\\/\\/("+t("("+d+")@")+"?("+D+")"+t("\\:("+j+")")+"?)")+"?("+F+"|"+k+"|"+R+"|"+M+")")+t("\\?("+P+")")+"?"+t("\\#("+O+")")+"?$"),$="^(){0}"+t(t("\\/\\/("+t("("+d+")@")+"?("+D+")"+t("\\:("+j+")")+"?)")+"?("+F+"|"+k+"|"+I+"|"+M+")")+t("\\?("+P+")")+"?"+t("\\#("+O+")")+"?$";"^("+h+")\\:"+t(t("\\/\\/("+t("("+d+")@")+"?("+D+")"+t("\\:("+j+")")+"?)")+"?("+F+"|"+k+"|"+R+"|"+M+")")+t("\\?("+P+")")+"?$","^"+t("\\#("+O+")")+"?$","^"+t("("+d+")@")+"?("+D+")"+t("\\:("+j+")")+"?$";return{URI_REF:i&&new RegExp("("+U+")|("+$+")"),NOT_SCHEME:new RegExp(e("[^]",n,r,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(e("[^\\%\\:]",m,c),"g"),NOT_HOST:new RegExp(e("[^\\%]",m,c),"g"),NOT_PATH:new RegExp(e("[^\\%\\/\\:\\@]",m,c),"g"),NOT_PATH_NOSCHEME:new RegExp(e("[^\\%\\/\\@]",m,c),"g"),NOT_QUERY:new RegExp(e("[^\\%]",m,c,"[\\:\\@\\/\\?]",p),"g"),NOT_FRAGMENT:new RegExp(e("[^\\%]",m,c,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(e("[^]",m,c),"g"),UNRESERVED:new RegExp(m,"g"),OTHER_CHARS:new RegExp(e("[^\\%]",m,l),"g"),PCT_ENCODED:new RegExp(o,"g")}}function n(e){var t,a=e.charCodeAt(0);return t=16>a?"%0"+a.toString(16).toUpperCase():128>a?"%"+a.toString(16).toUpperCase():2048>a?"%"+(a>>6|192).toString(16).toUpperCase()+"%"+(63&a|128).toString(16).toUpperCase():"%"+(a>>12|224).toString(16).toUpperCase()+"%"+(a>>6&63|128).toString(16).toUpperCase()+"%"+(63&a|128).toString(16).toUpperCase()}function s(e){for(var t,a,n,r="",i=0,s=e.length;s>i;)t=parseInt(e.substr(i+1,2),16),128>t?(r+=String.fromCharCode(t),i+=3):t>=194&&224>t?(s-i>=6?(a=parseInt(e.substr(i+4,2),16),r+=String.fromCharCode((31&t)<<6|63&a)):r+=e.substr(i,6),i+=6):t>=224?(s-i>=9?(a=parseInt(e.substr(i+4,2),16),n=parseInt(e.substr(i+7,2),16),r+=String.fromCharCode((15&t)<<12|(63&a)<<6|63&n)):r+=e.substr(i,9),i+=9):(r+=e.substr(i,3),i+=3);return r}function u(e){return void 0===e?"undefined":null===e?"null":Object.prototype.toString.call(e).split(" ").pop().split("]").shift().toLowerCase()}function c(e){return e.toUpperCase()}function l(e,t){function a(e){var a=s(e);return a.match(t.UNRESERVED)?a:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,a).toLowerCase().replace(t.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,a).replace(t.NOT_USERINFO,n).replace(t.PCT_ENCODED,c)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,a).toLowerCase().replace(t.NOT_HOST,n).replace(t.PCT_ENCODED,c)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,a).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,n).replace(t.PCT_ENCODED,c)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,a).replace(t.NOT_QUERY,n).replace(t.PCT_ENCODED,c)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,a).replace(t.NOT_FRAGMENT,n).replace(t.PCT_ENCODED,c)),e}function f(e,t){void 0===t&&(t={});var a,n,u=r&&t.iri!==!1?A:E,c=!1,f={};if("suffix"===t.reference&&(e=(t.scheme?t.scheme+":":"")+"//"+e),i?(a=e.match(u.URI_REF),a&&(a=a[1]?a.slice(1,10):a.slice(10,19)),a||(c=!0,t.tolerant||(f.error=f.error||"URI is not strictly valid."),a=e.match(D))):a=e.match(D),a){if(S?(f.scheme=a[1],f.userinfo=a[3],f.host=a[4],f.port=parseInt(a[5],10),f.path=a[6]||"",f.query=a[7],f.fragment=a[8],isNaN(f.port)&&(f.port=a[5])):(f.scheme=a[1]||void 0,f.userinfo=-1!==e.indexOf("@")?a[3]:void 0,f.host=-1!==e.indexOf("//")?a[4]:void 0,f.port=parseInt(a[5],10),f.path=a[6]||"",f.query=-1!==e.indexOf("?")?a[7]:void 0,f.fragment=-1!==e.indexOf("#")?a[8]:void 0,isNaN(f.port)&&(f.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?a[4]:void 0)),void 0!==f.scheme||void 0!==f.userinfo||void 0!==f.host||void 0!==f.port||f.path||void 0!==f.query?void 0===f.scheme?f.reference="relative":void 0===f.fragment?f.reference="absolute":f.reference="uri":f.reference="same-document",t.reference&&"suffix"!==t.reference&&t.reference!==f.reference&&(f.error=f.error||"URI is not a "+t.reference+" reference."),n=z[(t.scheme||f.scheme||"").toLowerCase()],!r||"undefined"==typeof o||t.unicodeSupport||n&&n.unicodeSupport)l(f,u);else{if(f.host&&(t.domainHost||n&&n.domainHost))try{f.host=o.toASCII(f.host.replace(u.PCT_ENCODED,s).toLowerCase())}catch(p){f.error=f.error||"Host's domain name can not be converted to ASCII via punycode: "+p}l(f,E)}n&&n.parse&&n.parse(f,t)}else c=!0,f.error=f.error||"URI can not be parsed.";return f}function p(e,t){var a=[];return void 0!==e.userinfo&&(a.push(e.userinfo),a.push("@")),void 0!==e.host&&a.push(e.host),"number"==typeof e.port&&(a.push(":"),a.push(e.port.toString(10))),a.length?a.join(""):void 0}function m(e){for(var t,a=[];e.length;)e.match(j)?e=e.replace(j,""):e.match(x)?e=e.replace(x,"/"):e.match(C)?(e=e.replace(C,"/"),a.pop()):"."===e||".."===e?e="":(t=e.match(_)[0],e=e.slice(t.length),a.push(t));return a.join("")}function h(e,t){void 0===t&&(t={});var a,n,i,u=r&&t.iri?A:E,c=[];if(a=z[(t.scheme||e.scheme||"").toLowerCase()],a&&a.serialize&&a.serialize(e,t),r&&"undefined"!=typeof o&&e.host&&(t.domainHost||a&&a.domainHost))try{e.host=t.iri?o.toUnicode(e.host):o.toASCII(e.host.replace(u.PCT_ENCODED,s).toLowerCase())}catch(f){e.error=e.error||"Host's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+f}return l(e,u),"suffix"!==t.reference&&e.scheme&&(c.push(e.scheme),c.push(":")),n=p(e,t),void 0!==n&&("suffix"!==t.reference&&c.push("//"),c.push(n),e.path&&"/"!==e.path.charAt(0)&&c.push("/")),void 0!==e.path&&(i=e.path,t.absolutePath||a&&a.absolutePath||(i=m(i)),void 0===n&&(i=i.replace(/^\/\//,"/%2F")),c.push(i)),void 0!==e.query&&(c.push("?"),c.push(e.query)),void 0!==e.fragment&&(c.push("#"),c.push(e.fragment)),c.join("")}function d(e,t,a,n){void 0===a&&(a={});var r={};return n||(e=f(h(e,a),a),t=f(h(t,a),a)),a=a||{},!a.tolerant&&t.scheme?(r.scheme=t.scheme,r.userinfo=t.userinfo,r.host=t.host,r.port=t.port,r.path=m(t.path),r.query=t.query):(void 0!==t.userinfo||void 0!==t.host||void 0!==t.port?(r.userinfo=t.userinfo,r.host=t.host,r.port=t.port,r.path=m(t.path),r.query=t.query):(t.path?("/"===t.path.charAt(0)?r.path=m(t.path):(void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?r.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path:r.path=t.path:r.path="/"+t.path,r.path=m(r.path)),r.query=t.query):(r.path=e.path,void 0!==t.query?r.query=t.query:r.query=e.query),r.userinfo=e.userinfo,r.host=e.host,r.port=e.port),r.scheme=e.scheme),r.fragment=t.fragment,r}function g(e,t,a){return h(d(f(e,a),f(t,a),a,!0),a)}function y(e,t){return"string"==typeof e?e=h(f(e,t),t):"object"===u(e)&&(e=f(h(e,t),t)),e}function w(e,t,a){return"string"==typeof e?e=h(f(e,a),a):"object"===u(e)&&(e=h(e,a)),"string"==typeof t?t=h(f(t,a),a):"object"===u(t)&&(t=h(t,a)),e===t}function v(e,t){return e&&e.toString().replace(r&&t&&t.iri?A.ESCAPE:E.ESCAPE,n)}function b(e,t){return e&&e.toString().replace(r&&t&&t.iri?A.PCT_ENCODED:E.PCT_ENCODED,s)}var E=a(!1),A=r?a(!0):void 0,D=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?([^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n)*))?/i,j=/^\.\.?\//,x=/^\/\.(\/|$)/,C=/^\/\.\.(\/|$)/,_=/^\/?(?:.|\n)*?(?=\/|$)/,S=void 0==="".match(/(){0}/)[1],z={};return{IRI_SUPPORT:r,VALIDATE_SUPPORT:i,pctEncChar:n,pctDecChars:s,SCHEMES:z,parse:f,_recomposeAuthority:p,removeDotSegments:m,serialize:h,resolveComponents:d,resolve:g,normalize:y,equal:w,escapeComponent:v,unescapeComponent:b}}();if(!n&&"undefined"!=typeof t&&"function"==typeof e){var o=e("./punycode");t.exports=s,e("./schemes")}},{"./punycode":216,"./schemes":217}],222:[function(e,t,a){"use strict";function n(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function r(e,t,a){if(e&&c.isObject(e)&&e instanceof n)return e;var r=new n;return r.parse(e,t,a),r}function i(e){return c.isString(e)&&(e=r(e)),e instanceof n?e.format():n.prototype.format.call(e)}function s(e,t){return r(e,!1,!0).resolve(t)}function o(e,t){return e?r(e,!1,!0).resolveObject(t):t}var u=e("punycode"),c=e("./util");a.parse=r,a.resolve=s,a.resolveObject=o,a.format=i,a.Url=n;var l=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,m=["<",">",'"',"`"," ","\r","\n"," "],h=["{","}","|","\\","^","`"].concat(m),d=["'"].concat(h),g=["%","/","?",";","#"].concat(d),y=["/","?","#"],w=255,v=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},A={javascript:!0,"javascript:":!0},D={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},j=e("querystring");n.prototype.parse=function(e,t,a){if(!c.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e.indexOf("?"),r=-1!==n&&nS)&&(C=S)}var z,F;F=-1===C?o.lastIndexOf("@"):o.lastIndexOf("@",C),-1!==F&&(z=o.slice(0,F),o=o.slice(F+1),this.auth=decodeURIComponent(z)),C=-1;for(var _=0;_S)&&(C=S)}-1===C&&(C=o.length),this.host=o.slice(0,C),o=o.slice(C),this.parseHost(),this.hostname=this.hostname||"";var k="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!k)for(var I=this.hostname.split(/\./),_=0,R=I.length;R>_;_++){var M=I[_];if(M&&!M.match(v)){for(var P="",O=0,B=M.length;B>O;O++)P+=M.charCodeAt(O)>127?"x":M[O];if(!P.match(v)){var T=I.slice(0,_),L=I.slice(_+1),N=M.match(b);N&&(T.push(N[1]),L.unshift(N[2])),L.length&&(o="/"+L.join(".")+o),this.hostname=T.join(".");break}}}this.hostname.length>w?this.hostname="":this.hostname=this.hostname.toLowerCase(),k||(this.hostname=u.toASCII(this.hostname));var U=this.port?":"+this.port:"",$=this.hostname||"";this.host=$+U,this.href+=this.host,k&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!E[h])for(var _=0,R=d.length;R>_;_++){var K=d[_];if(-1!==o.indexOf(K)){var H=encodeURIComponent(K);H===K&&(H=escape(K)),o=o.split(K).join(H)}}var G=o.indexOf("#");-1!==G&&(this.hash=o.substr(G),o=o.slice(0,G));var J=o.indexOf("?");if(-1!==J?(this.search=o.substr(J),this.query=o.substr(J+1),t&&(this.query=j.parse(this.query)),o=o.slice(0,J)):t&&(this.search="",this.query={}),o&&(this.pathname=o),D[h]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",q=this.search||"";this.path=U+q}return this.href=this.format(),this},n.prototype.format=function(){var e=this.auth||"";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,":"),e+="@");var t=this.protocol||"",a=this.pathname||"",n=this.hash||"",r=!1,i="";this.host?r=e+this.host:this.hostname&&(r=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(r+=":"+this.port)),this.query&&c.isObject(this.query)&&Object.keys(this.query).length&&(i=j.stringify(this.query));var s=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||D[t])&&r!==!1?(r="//"+(r||""),a&&"/"!==a.charAt(0)&&(a="/"+a)):r||(r=""),n&&"#"!==n.charAt(0)&&(n="#"+n),s&&"?"!==s.charAt(0)&&(s="?"+s),a=a.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),s=s.replace("#","%23"),t+r+a+s+n},n.prototype.resolve=function(e){return this.resolveObject(r(e,!1,!0)).format()},n.prototype.resolveObject=function(e){if(c.isString(e)){var t=new n;t.parse(e,!1,!0),e=t}for(var a=new n,r=Object.keys(this),i=0;i0?a.host.split("@"):!1;x&&(a.auth=x.shift(),a.host=a.hostname=x.shift()); -}return a.search=e.search,a.query=e.query,c.isNull(a.pathname)&&c.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.href=a.format(),a}if(!E.length)return a.pathname=null,a.search?a.path="/"+a.search:a.path=null,a.href=a.format(),a;for(var C=E.slice(-1)[0],_=(a.host||e.host||E.length>1)&&("."===C||".."===C)||""===C,S=0,z=E.length;z>=0;z--)C=E[z],"."===C?E.splice(z,1):".."===C?(E.splice(z,1),S++):S&&(E.splice(z,1),S--);if(!v&&!b)for(;S--;S)E.unshift("..");!v||""===E[0]||E[0]&&"/"===E[0].charAt(0)||E.unshift(""),_&&"/"!==E.join("/").substr(-1)&&E.push("");var F=""===E[0]||E[0]&&"/"===E[0].charAt(0);if(j){a.hostname=a.host=F?"":E.length?E.shift():"";var x=a.host&&a.host.indexOf("@")>0?a.host.split("@"):!1;x&&(a.auth=x.shift(),a.host=a.hostname=x.shift())}return v=v||a.host&&E.length,v&&!F&&E.unshift(""),E.length?a.pathname=E.join("/"):(a.pathname=null,a.path=null),c.isNull(a.pathname)&&c.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.auth=e.auth||a.auth,a.slashes=a.slashes||e.slashes,a.href=a.format(),a},n.prototype.parseHost=function(){var e=this.host,t=f.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{"./util":223,punycode:203,querystring:206}],223:[function(e,t,a){"use strict";t.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],224:[function(t,a,n){!function(t,r){"undefined"!=typeof n&&"undefined"!=typeof a?a.exports=r():"function"==typeof e&&"object"==typeof e.amd?e(r):"function"==typeof e&&"object"==typeof e.petal?e(t,[],r):this[t]=r()}("validator",function(e){"use strict";function t(e){var t,a,n,r,i=e.match(I);if(i){if(t=i[21],!t)return null;if("z"===t||"Z"===t)return 0;a=i[22],-1!==t.indexOf(":")?(n=parseInt(i[23]),r=parseInt(i[24])):(n=0,r=parseInt(i[23]))}else{if(e=e.toLowerCase(),t=e.match(/(?:\s|gmt\s*)(-|\+)(\d{1,4})(\s|$)/),!t)return-1!==e.indexOf("gmt")?0:null;a=t[1];var s=t[2];3===s.length&&(s="0"+s),s.length<=2?(n=0,r=parseInt(s)):(n=parseInt(s.slice(0,2)),r=parseInt(s.slice(2,4)))}return(60*n+r)*("-"===a?1:-1)}function a(e,t){e=e||{};for(var a in t)"undefined"==typeof e[a]&&(e[a]=t[a]);return e}function n(e){var t="(\\"+e.symbol.replace(/\./g,"\\.")+")"+(e.require_symbol?"":"?"),a="-?",n="[1-9]\\d*",r="[1-9]\\d{0,2}(\\"+e.thousands_separator+"\\d{3})*",i=["0",n,r],s="("+i.join("|")+")?",o="(\\"+e.decimal_separator+"\\d{2})?",u=s+o;return e.allow_negatives&&!e.parens_for_negatives&&(e.negative_sign_after_digits?u+=a:e.negative_sign_before_digits&&(u=a+u)),e.allow_negative_sign_placeholder?u="( (?!\\-))?"+u:e.allow_space_after_symbol?u=" ?"+u:e.allow_space_after_digits&&(u+="( (?!$))?"),e.symbol_after_digits?u+=t:u=t+u,e.allow_negatives&&(e.parens_for_negatives?u="(\\("+u+"\\)|"+u+")":e.negative_sign_before_digits||e.negative_sign_after_digits||(u=a+u)),new RegExp("^(?!-? )(?=.*\\d)"+u+"$")}e={version:"4.5.0"};var r=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,i=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,s=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,o=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i,u=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i,c=/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,l=/^[A-Z]{2}[0-9A-Z]{9}[0-9]$/,f=/^(?:[0-9]{9}X|[0-9]{10})$/,p=/^(?:[0-9]{13})$/,m=/^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/,h=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,d=/^[0-9A-F]{1,4}$/i,g={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i},y=/^[A-Z]+$/i,w=/^[0-9A-Z]+$/i,v=/^[-+]?[0-9]+$/,b=/^(?:[-+]?(?:0|[1-9][0-9]*))$/,E=/^(?:[-+]?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/,A=/^[0-9A-F]+$/i,D=/^[-+]?([0-9]+|\.[0-9]+|[0-9]+\.[0-9]+)$/,j=/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i,x=/^[\x00-\x7F]+$/,C=/[^\x00-\x7F]/,_=/[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,S=/[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,z=/[\uD800-\uDBFF][\uDC00-\uDFFF]/,F=/^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i,k={"zh-CN":/^(\+?0?86\-?)?((13\d|14[57]|15[^4,\D]|17[678]|18\d)\d{8}|170[059]\d{7})$/,"zh-TW":/^(\+?886\-?|0)?9\d{8}$/,"en-ZA":/^(\+?27|0)\d{9}$/,"en-AU":/^(\+?61|0)4\d{8}$/,"en-HK":/^(\+?852\-?)?[569]\d{3}\-?\d{4}$/,"fr-FR":/^(\+?33|0)[67]\d{8}$/,"pt-PT":/^(\+351)?9[1236]\d{7}$/,"el-GR":/^(\+?30)?(69\d{8})$/,"en-GB":/^(\+?44|0)7\d{9}$/,"en-US":/^(\+?1)?[2-9]\d{2}[2-9](?!11)\d{6}$/,"en-ZM":/^(\+26)?09[567]\d{7}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/,"nb-NO":/^(\+?47)?[49]\d{7}$/,"nn-NO":/^(\+?47)?[49]\d{7}$/,"vi-VN":/^(0|\+?84)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$/,"en-NZ":/^(\+?64|0)2\d{7,9}$/,"en-IN":/^(\+?91|0)?[789]\d{9}$/},I=/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;e.extend=function(t,a){e[t]=function(){var t=Array.prototype.slice.call(arguments);return t[0]=e.toString(t[0]),a.apply(e,t)}},e.init=function(){for(var t in e)"function"==typeof e[t]&&"toString"!==t&&"toDate"!==t&&"extend"!==t&&"init"!==t&&e.extend(t,e[t])},e.toString=function(e){return"object"==typeof e&&null!==e&&e.toString?e=e.toString():(null===e||"undefined"==typeof e||isNaN(e)&&!e.length)&&(e=""),""+e},e.toDate=function(e){return"[object Date]"===Object.prototype.toString.call(e)?e:(e=Date.parse(e),isNaN(e)?null:new Date(e))},e.toFloat=function(e){return parseFloat(e)},e.toInt=function(e,t){return parseInt(e,t||10)},e.toBoolean=function(e,t){return t?"1"===e||"true"===e:"0"!==e&&"false"!==e&&""!==e},e.equals=function(t,a){return t===e.toString(a)},e.contains=function(t,a){return t.indexOf(e.toString(a))>=0},e.matches=function(e,t,a){return"[object RegExp]"!==Object.prototype.toString.call(t)&&(t=new RegExp(t,a)),t.test(e)};var R={allow_display_name:!1,allow_utf8_local_part:!0,require_tld:!0};e.isEmail=function(t,n){if(n=a(n,R),n.allow_display_name){var c=t.match(u);c&&(t=c[1])}var l=t.split("@"),f=l.pop(),p=l.join("@"),m=f.toLowerCase();if(("gmail.com"===m||"googlemail.com"===m)&&(p=p.replace(/\./g,"").toLowerCase()),!e.isByteLength(p,0,64)||!e.isByteLength(f,0,256))return!1;if(!e.isFQDN(f,{require_tld:n.require_tld}))return!1;if('"'===p[0])return p=p.slice(1,p.length-1),n.allow_utf8_local_part?o.test(p):i.test(p);for(var h=n.allow_utf8_local_part?s:r,d=p.split("."),g=0;g=2083||/\s/.test(t))return!1;if(0===t.indexOf("mailto:"))return!1;n=a(n,M);var r,i,s,o,u,c,l;if(l=t.split("://"),l.length>1){if(r=l.shift(),n.require_valid_protocol&&-1===n.protocols.indexOf(r))return!1}else{if(n.require_protocol)return!1;n.allow_protocol_relative_urls&&"//"===t.substr(0,2)&&(l[0]=t.substr(2))}return t=l.join("://"),l=t.split("#"),t=l.shift(),l=t.split("?"),t=l.shift(),l=t.split("/"),t=l.shift(),l=t.split("@"),l.length>1&&(i=l.shift(),i.indexOf(":")>=0&&i.split(":").length>2)?!1:(o=l.join("@"),l=o.split(":"),s=l.shift(),l.length&&(c=l.join(":"),u=parseInt(c,10),!/^[0-9]+$/.test(c)||0>=u||u>65535)?!1:e.isIP(s)||e.isFQDN(s,n)||"localhost"===s?n.host_whitelist&&-1===n.host_whitelist.indexOf(s)?!1:n.host_blacklist&&-1!==n.host_blacklist.indexOf(s)?!1:!0:!1)},e.isMACAddress=function(e){return m.test(e)},e.isIP=function(t,a){if(a=e.toString(a),!a)return e.isIP(t,4)||e.isIP(t,6);if("4"===a){if(!h.test(t))return!1;var n=t.split(".").sort(function(e,t){return e-t});return n[3]<=255}if("6"===a){var r=t.split(":"),i=!1,s=e.isIP(r[r.length-1],4),o=s?7:8;if(r.length>o)return!1;if("::"===t)return!0;"::"===t.substr(0,2)?(r.shift(),r.shift(),i=!0):"::"===t.substr(t.length-2)&&(r.pop(),r.pop(),i=!0);for(var u=0;u0&&u=1:r.length===o}return!1};var P={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1};e.isFQDN=function(e,t){t=a(t,P),t.allow_trailing_dot&&"."===e[e.length-1]&&(e=e.substring(0,e.length-1));var n=e.split(".");if(t.require_tld){var r=n.pop();if(!n.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(r))return!1}for(var i,s=0;s=0)return!1;i=i.replace(/_/g,"")}if(!/^[a-z\u00a1-\uffff0-9-]+$/i.test(i))return!1;if(/[\uff01-\uff5e]/.test(i))return!1;if("-"===i[0]||"-"===i[i.length-1])return!1;if(i.indexOf("---")>=0&&"xn--"!==i.slice(0,4))return!1}return!0},e.isBoolean=function(e){return["true","false","1","0"].indexOf(e)>=0},e.isAlpha=function(e){return y.test(e)},e.isAlphanumeric=function(e){return w.test(e)},e.isNumeric=function(e){return v.test(e)},e.isDecimal=function(e){return""!==e&&D.test(e)},e.isHexadecimal=function(e){return A.test(e)},e.isHexColor=function(e){return j.test(e)},e.isLowercase=function(e){return e===e.toLowerCase()},e.isUppercase=function(e){return e===e.toUpperCase()},e.isInt=function(e,t){return t=t||{},b.test(e)&&(!t.hasOwnProperty("min")||e>=t.min)&&(!t.hasOwnProperty("max")||e<=t.max)},e.isFloat=function(e,t){return t=t||{},""===e||"."===e?!1:E.test(e)&&(!t.hasOwnProperty("min")||e>=t.min)&&(!t.hasOwnProperty("max")||e<=t.max)},e.isDivisibleBy=function(t,a){return e.toFloat(t)%e.toInt(a)===0},e.isNull=function(e){return 0===e.length},e.isLength=function(e,t,a){var n=e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[],r=e.length-n.length;return r>=t&&("undefined"==typeof a||a>=r)},e.isByteLength=function(e,t,a){var n=encodeURI(e).split(/%..|./).length-1;return n>=t&&("undefined"==typeof a||a>=n)},e.isUUID=function(e,t){var a=g[t?t:"all"];return a&&a.test(e)},e.isDate=function(e){var a=new Date(Date.parse(e));if(isNaN(a))return!1;var n=t(e);if(null!==n){var r=a.getTimezoneOffset()-n;a=new Date(a.getTime()+6e4*r)}var i,s,o,u=String(a.getDate());return(s=e.match(/(^|[^:\d])[23]\d([^:\d]|$)/g))?(i=s.map(function(e){return e.match(/\d+/g)[0]}).join("/"),o=String(a.getFullYear()).slice(-2),i===u||i===o?!0:i===u+"/"+o||i===o+"/"+u?!0:!1):!0},e.isAfter=function(t,a){var n=e.toDate(a||new Date),r=e.toDate(t);return!!(r&&n&&r>n)},e.isBefore=function(t,a){var n=e.toDate(a||new Date),r=e.toDate(t);return!!(r&&n&&n>r)},e.isIn=function(t,a){var n;if("[object Array]"===Object.prototype.toString.call(a)){var r=[];for(n in a)r[n]=e.toString(a[n]);return r.indexOf(t)>=0}return"object"==typeof a?a.hasOwnProperty(t):a&&"function"==typeof a.indexOf?a.indexOf(t)>=0:!1},e.isWhitelisted=function(e,t){for(var a=e.length-1;a>=0;a--)if(-1===t.indexOf(e[a]))return!1;return!0},e.isCreditCard=function(e){var t=e.replace(/[^0-9]+/g,"");if(!c.test(t))return!1;for(var a,n,r,i=0,s=t.length-1;s>=0;s--)a=t.substring(s,s+1),n=parseInt(a,10),r?(n*=2,i+=n>=10?n%10+1:n):i+=n,r=!r;return!!(i%10===0?t:!1)},e.isISIN=function(e){if(!l.test(e))return!1;for(var t,a,n=e.replace(/[A-Z]/g,function(e){return parseInt(e,36)}),r=0,i=!0,s=n.length-2;s>=0;s--)t=n.substring(s,s+1),a=parseInt(t,10),i?(a*=2,r+=a>=10?a+1:a):r+=a,i=!i;return parseInt(e.substr(e.length-1),10)===(1e4-r)%10},e.isISBN=function(t,a){if(a=e.toString(a),!a)return e.isISBN(t,10)||e.isISBN(t,13);var n,r=t.replace(/[\s-]+/g,""),i=0;if("10"===a){if(!f.test(r))return!1;for(n=0;9>n;n++)i+=(n+1)*r.charAt(n);if(i+="X"===r.charAt(9)?100:10*r.charAt(9),i%11===0)return!!r}else if("13"===a){if(!p.test(r))return!1;var s=[1,3];for(n=0;12>n;n++)i+=s[n%2]*r.charAt(n);if(r.charAt(12)-(10-i%10)%10===0)return!!r}return!1},e.isMobilePhone=function(e,t){return t in k?k[t].test(e):!1};var O={symbol:"$",require_symbol:!1,allow_space_after_symbol:!1,symbol_after_digits:!1,allow_negatives:!0,parens_for_negatives:!1,negative_sign_before_digits:!1,negative_sign_after_digits:!1,allow_negative_sign_placeholder:!1,thousands_separator:",",decimal_separator:".",allow_space_after_digits:!1};e.isCurrency=function(e,t){return t=a(t,O),n(t).test(e)},e.isJSON=function(e){try{var t=JSON.parse(e);return!!t&&"object"==typeof t}catch(a){}return!1},e.isMultibyte=function(e){return C.test(e)},e.isAscii=function(e){return x.test(e)},e.isFullWidth=function(e){return _.test(e)},e.isHalfWidth=function(e){return S.test(e)},e.isVariableWidth=function(e){return _.test(e)&&S.test(e)},e.isSurrogatePair=function(e){return z.test(e)},e.isBase64=function(e){return F.test(e)},e.isMongoId=function(t){return e.isHexadecimal(t)&&24===t.length},e.isISO8601=function(e){return I.test(e)},e.ltrim=function(e,t){var a=t?new RegExp("^["+t+"]+","g"):/^\s+/g;return e.replace(a,"")},e.rtrim=function(e,t){var a=t?new RegExp("["+t+"]+$","g"):/\s+$/g;return e.replace(a,"")},e.trim=function(e,t){var a=t?new RegExp("^["+t+"]+|["+t+"]+$","g"):/^\s+|\s+$/g;return e.replace(a,"")},e.escape=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">").replace(/\//g,"/").replace(/\`/g,"`")},e.stripLow=function(t,a){var n=a?"\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F":"\\x00-\\x1F\\x7F";return e.blacklist(t,n)},e.whitelist=function(e,t){return e.replace(new RegExp("[^"+t+"]+","g"),"")},e.blacklist=function(e,t){return e.replace(new RegExp("["+t+"]+","g"),"")};var B={lowercase:!0,remove_dots:!0,remove_extension:!0};return e.normalizeEmail=function(t,n){if(n=a(n,B),!e.isEmail(t))return!1;var r=t.split("@",2);if(r[1]=r[1].toLowerCase(),"gmail.com"===r[1]||"googlemail.com"===r[1]){if(n.remove_extension&&(r[0]=r[0].split("+")[0]),n.remove_dots&&(r[0]=r[0].replace(/\./g,"")),!r[0].length)return!1;r[0]=r[0].toLowerCase(),r[1]="gmail.com"}else n.lowercase&&(r[0]=r[0].toLowerCase());return r.join("@")},e.init(),e})},{}],225:[function(e,t,a){"use strict";t.exports={INVALID_TYPE:"Expected type {0} but found type {1}",INVALID_FORMAT:"Object didn't pass validation for format {0}: {1}",ENUM_MISMATCH:"No enum match for: {0}",ANY_OF_MISSING:"Data does not match any schemas from 'anyOf'",ONE_OF_MISSING:"Data does not match any schemas from 'oneOf'",ONE_OF_MULTIPLE:"Data is valid against more than one schema from 'oneOf'",NOT_PASSED:"Data matches schema from 'not'",ARRAY_LENGTH_SHORT:"Array is too short ({0}), minimum {1}",ARRAY_LENGTH_LONG:"Array is too long ({0}), maximum {1}",ARRAY_UNIQUE:"Array items are not unique (indexes {0} and {1})",ARRAY_ADDITIONAL_ITEMS:"Additional items not allowed",MULTIPLE_OF:"Value {0} is not a multiple of {1}",MINIMUM:"Value {0} is less than minimum {1}",MINIMUM_EXCLUSIVE:"Value {0} is equal or less than exclusive minimum {1}",MAXIMUM:"Value {0} is greater than maximum {1}",MAXIMUM_EXCLUSIVE:"Value {0} is equal or greater than exclusive maximum {1}",OBJECT_PROPERTIES_MINIMUM:"Too few properties defined ({0}), minimum {1}",OBJECT_PROPERTIES_MAXIMUM:"Too many properties defined ({0}), maximum {1}",OBJECT_MISSING_REQUIRED_PROPERTY:"Missing required property: {0}",OBJECT_ADDITIONAL_PROPERTIES:"Additional properties not allowed: {0}",OBJECT_DEPENDENCY_KEY:"Dependency failed - key must exist: {0} (due to key: {1})",MIN_LENGTH:"String is too short ({0} chars), minimum {1}",MAX_LENGTH:"String is too long ({0} chars), maximum {1}",PATTERN:"String does not match pattern {0}: {1}",KEYWORD_TYPE_EXPECTED:"Keyword '{0}' is expected to be of type '{1}'",KEYWORD_UNDEFINED_STRICT:"Keyword '{0}' must be defined in strict mode",KEYWORD_UNEXPECTED:"Keyword '{0}' is not expected to appear in the schema",KEYWORD_MUST_BE:"Keyword '{0}' must be {1}",KEYWORD_DEPENDENCY:"Keyword '{0}' requires keyword '{1}'",KEYWORD_PATTERN:"Keyword '{0}' is not a valid RegExp pattern: {1}",KEYWORD_VALUE_TYPE:"Each element of keyword '{0}' array must be a '{1}'",UNKNOWN_FORMAT:"There is no validation function for format '{0}'",CUSTOM_MODE_FORCE_PROPERTIES:"{0} must define at least one property if present",REF_UNRESOLVED:"Reference has not been resolved during compilation: {0}",UNRESOLVABLE_REFERENCE:"Reference could not be resolved: {0}",SCHEMA_NOT_REACHABLE:"Validator was not able to read schema with uri: {0}",SCHEMA_TYPE_EXPECTED:"Schema is expected to be of type 'object'",SCHEMA_NOT_AN_OBJECT:"Schema is not an object: {0}",ASYNC_TIMEOUT:"{0} asynchronous task(s) have timed out after {1} ms",PARENT_SCHEMA_VALIDATION_FAILED:"Schema failed to validate against its parent schema, see inner errors for details.",REMOTE_NOT_VALID:"Remote reference didn't compile successfully: {0}"}},{}],226:[function(e,t,a){var n=e("validator"),r={date:function(e){if("string"!=typeof e)return!0;var t=/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/.exec(e);return null===t?!1:t[2]<"01"||t[2]>"12"||t[3]<"01"||t[3]>"31"?!1:!0},"date-time":function(e){if("string"!=typeof e)return!0;var t=e.toLowerCase().split("t");if(!r.date(t[0]))return!1;var a=/^([0-9]{2}):([0-9]{2}):([0-9]{2})(.[0-9]+)?(z|([+-][0-9]{2}:[0-9]{2}))$/.exec(t[1]);return null===a?!1:a[1]>"23"||a[2]>"59"||a[3]>"59"?!1:!0},email:function(e){return"string"!=typeof e?!0:n.isEmail(e,{require_tld:!0})},hostname:function(e){if("string"!=typeof e)return!0;var t=/^[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?(\.[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?)*$/.test(e);if(t){if(e.length>255)return!1;for(var a=e.split("."),n=0;n63)return!1}return t},"host-name":function(e){return r.hostname.call(this,e)},ipv4:function(e){return"string"!=typeof e?!0:n.isIP(e,4)},ipv6:function(e){return"string"!=typeof e?!0:n.isIP(e,6)},regex:function(e){try{return RegExp(e),!0}catch(t){return!1}},uri:function(e){return this.options.strictUris?r["strict-uri"].apply(this,arguments):"string"!=typeof e||RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?").test(e)},"strict-uri":function(e){return"string"!=typeof e||n.isURL(e)}};t.exports=r},{validator:224}],227:[function(e,t,a){"use strict";var n=e("./FormatValidators"),r=e("./Report"),i=e("./Utils"),s={multipleOf:function(e,t,a){"number"==typeof a&&"integer"!==i.whatIs(a/t.multipleOf)&&e.addError("MULTIPLE_OF",[a,t.multipleOf],null,t.description)},maximum:function(e,t,a){"number"==typeof a&&(t.exclusiveMaximum!==!0?a>t.maximum&&e.addError("MAXIMUM",[a,t.maximum],null,t.description):a>=t.maximum&&e.addError("MAXIMUM_EXCLUSIVE",[a,t.maximum],null,t.description))},exclusiveMaximum:function(){},minimum:function(e,t,a){"number"==typeof a&&(t.exclusiveMinimum!==!0?at.maxLength&&e.addError("MAX_LENGTH",[a.length,t.maxLength],null,t.description)},minLength:function(e,t,a){"string"==typeof a&&i.ucs2decode(a).lengtht.items.length&&e.addError("ARRAY_ADDITIONAL_ITEMS",null,null,t.description)},items:function(){},maxItems:function(e,t,a){Array.isArray(a)&&a.length>t.maxItems&&e.addError("ARRAY_LENGTH_LONG",[a.length,t.maxItems],null,t.description)},minItems:function(e,t,a){Array.isArray(a)&&a.lengtht.maxProperties&&e.addError("OBJECT_PROPERTIES_MAXIMUM",[n,t.maxProperties],null,t.description)}},minProperties:function(e,t,a){if("object"===i.whatIs(a)){var n=Object.keys(a).length;n0){var p=this.options.assumeAdditional.length;if(p)for(;p--;){var m=s.indexOf(this.options.assumeAdditional[p]);-1!==m&&s.splice(m,1)}s.length>0&&e.addError("OBJECT_ADDITIONAL_PROPERTIES",[s],null,t.description)}}}},dependencies:function(e,t,n){if("object"===i.whatIs(n))for(var r=Object.keys(t.dependencies),s=r.length;s--;){var o=r[s];if(n[o]){var u=t.dependencies[o];if("object"===i.whatIs(u))a.validate.call(this,e,u,n);else for(var c=u.length;c--;){var l=u[c];void 0===n[l]&&e.addError("OBJECT_DEPENDENCY_KEY",[l,o],null,t.description)}}}},"enum":function(e,t,a){for(var n=!1,r=t["enum"].length;r--;)if(i.areEqual(a,t["enum"][r])){n=!0;break}n===!1&&e.addError("ENUM_MISMATCH",[a],null,t.description)},allOf:function(e,t,n){for(var r=t.allOf.length;r--;){var i=a.validate.call(this,e,t.allOf[r],n);if(this.options.breakOnFirstError&&i===!1)break}},anyOf:function(e,t,n){for(var i=[],s=!1,o=t.anyOf.length;o--&&s===!1;){var u=new r(e);i.push(u),s=a.validate.call(this,u,t.anyOf[o],n)}s===!1&&e.addError("ANY_OF_MISSING",void 0,i,t.description)},oneOf:function(e,t,n){for(var i=0,s=[],o=t.oneOf.length;o--;){var u=new r(e,{maxErrors:1});s.push(u),a.validate.call(this,u,t.oneOf[o],n)===!0&&i++}0===i?e.addError("ONE_OF_MISSING",void 0,s,t.description):i>1&&e.addError("ONE_OF_MULTIPLE",null,null,t.description)},not:function(e,t,n){var i=new r(e);a.validate.call(this,i,t.not,n)===!0&&e.addError("NOT_PASSED",null,null,t.description)},definitions:function(){},format:function(e,t,a){var r=n[t.format];"function"==typeof r?2===r.length?e.addAsyncTask(r,[a],function(n){n!==!0&&e.addError("INVALID_FORMAT",[t.format,a],null,t.description)}):r.call(this,a)!==!0&&e.addError("INVALID_FORMAT",[t.format,a],null,t.description):this.options.ignoreUnknownFormats!==!0&&e.addError("UNKNOWN_FORMAT",[t.format],null,t.description)}},o=function(e,t,n){var r=n.length;if(Array.isArray(t.items))for(;r--;)r0;){if(!t.__$refResolved){e.addError("REF_UNRESOLVED",[t.$ref],null,t.description);break}if(t.__$refResolved===t)break;t=t.__$refResolved,r=Object.keys(t),l--}if(0===l)throw new Error("Circular dependency by $ref references!")}var f=i.whatIs(a);if(t.type)if("string"==typeof t.type){if(f!==t.type&&("integer"!==f||"number"!==t.type)&&(e.addError("INVALID_TYPE",[t.type,f],null,t.description),this.options.breakOnFirstError))return!1}else if(-1===t.type.indexOf(f)&&("integer"!==f||-1===t.type.indexOf("number"))&&(e.addError("INVALID_TYPE",[t.type,f],null,t.description),this.options.breakOnFirstError))return!1;for(var p=r.length;p--&&!(s[r[p]]&&(s[r[p]].call(this,e,t,a),e.errors.length&&this.options.breakOnFirstError)););return(0===e.errors.length||this.options.breakOnFirstError===!1)&&("array"===f?o.call(this,e,t,a):"object"===f&&u.call(this,e,t,a)),c&&(e.rootSchema=void 0),0===e.errors.length}},{"./FormatValidators":226,"./Report":229,"./Utils":233}],228:[function(e,t,a){"function"!=typeof Number.isFinite&&(Number.isFinite=function(e){return"number"!=typeof e?!1:e!==e||e===1/0||e===-(1/0)?!1:!0})},{}],229:[function(e,t,a){(function(a){"use strict";function n(e,t){this.parentReport=e instanceof n?e:void 0,this.options=e instanceof n?e.options:e||{},this.reportOptions=t||{},this.errors=[],this.path=[],this.asyncTasks=[]}var r=e("lodash.get"),i=e("./Errors"),s=e("./Utils");n.prototype.isValid=function(){if(this.asyncTasks.length>0)throw new Error("Async tasks pending, can't answer isValid");return 0===this.errors.length},n.prototype.addAsyncTask=function(e,t,a){this.asyncTasks.push([e,t,a])},n.prototype.processAsyncTasks=function(e,t){function n(){a.nextTick(function(){var e=0===c.errors.length,a=e?void 0:c.errors;t(a,e)})}function r(e){return function(t){u||(e(t),0===--s&&n())}}var i=e||2e3,s=this.asyncTasks.length,o=s,u=!1,c=this;if(0===s||this.errors.length>0)return void n();for(;o--;){var l=this.asyncTasks[o];l[0].apply(null,l[1].concat(r(l[2])))}setTimeout(function(){s>0&&(u=!0,c.addError("ASYNC_TIMEOUT",[s,i]),t(c.errors,!1))},i)},n.prototype.getPath=function(){var e=[];return this.parentReport&&(e=e.concat(this.parentReport.path)),e=e.concat(this.path),this.options.reportPathAsArray!==!0&&(e="#/"+e.map(function(e){return s.isAbsoluteUri(e)?"uri("+e+")":e.replace(/\~/g,"~0").replace(/\//g,"~1")}).join("/")),e},n.prototype.getSchemaId=function(){if(!this.rootSchema)return null;var e=[];for(this.parentReport&&(e=e.concat(this.parentReport.path)),e=e.concat(this.path);e.length>0;){var t=r(this.rootSchema,e);if(t&&t.id)return t.id;e.pop()}return this.rootSchema.id},n.prototype.hasError=function(e,t){for(var a=this.errors.length;a--;)if(this.errors[a].code===e){for(var n=!0,r=this.errors[a].params.length;r--;)this.errors[a].params[r]!==t[r]&&(n=!1);if(n)return n}return!1},n.prototype.addError=function(e,t,a,n){if(!(this.errors.length>=this.reportOptions.maxErrors)){if(!e)throw new Error("No errorCode passed into addError()");if(!i[e])throw new Error("No errorMessage known for code "+e);t=t||[];for(var r=t.length,o=i[e];r--;){var u=s.whatIs(t[r]),c="object"===u||"null"===u?JSON.stringify(t[r]):t[r];o=o.replace("{"+r+"}",c)}var l={code:e,params:t,message:o,path:this.getPath(),schemaId:this.getSchemaId()};if(n&&(l.description=n),null!=a){for(Array.isArray(a)||(a=[a]),l.inner=[],r=a.length;r--;)for(var f=a[r],p=f.errors.length;p--;)l.inner.push(f.errors[p]);0===l.inner.length&&(l.inner=void 0)}this.errors.push(l)}},t.exports=n}).call(this,e("_process"))},{"./Errors":225,"./Utils":233,_process:202,"lodash.get":192}],230:[function(e,t,a){"use strict";function n(e){return decodeURIComponent(e).replace(/~[0-1]/g,function(e){return"~1"===e?"/":"~"})}function r(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function i(e){var t=e.indexOf("#"),a=-1===t?void 0:e.slice(t+1);return a}function s(e,t){if("object"==typeof e&&null!==e){if(!t)return e;if(e.id&&(e.id===t||"#"===e.id[0]&&e.id.substring(1)===t))return e;var a,n;if(Array.isArray(e)){for(a=e.length;a--;)if(n=s(e[a],t))return n}else{var r=Object.keys(e);for(a=r.length;a--;){var i=r[a];if(0!==i.indexOf("__$")&&(n=s(e[i],t)))return n}}}}var o=e("./Report"),u=e("./SchemaCompilation"),c=e("./SchemaValidation"),l=e("./Utils");a.cacheSchemaByUri=function(e,t){var a=r(e);a&&(this.cache[a]=t)},a.removeFromCacheByUri=function(e){var t=r(e);t&&delete this.cache[t]},a.checkCacheForUri=function(e){var t=r(e);return t?null!=this.cache[t]:!1},a.getSchema=function(e,t){return"object"==typeof t&&(t=a.getSchemaByReference.call(this,e,t)),"string"==typeof t&&(t=a.getSchemaByUri.call(this,e,t)),t},a.getSchemaByReference=function(e,t){for(var a=this.referenceCache.length;a--;)if(this.referenceCache[a][0]===t)return this.referenceCache[a][1];var n=l.cloneDeep(t);return this.referenceCache.push([t,n]),n},a.getSchemaByUri=function(e,t,a){var l=r(t),f=i(t),p=l?this.cache[l]:a;if(p&&l){var m=p!==a;if(m){e.path.push(l);var h=new o(e);u.compileSchema.call(this,h,p)&&c.validateSchema.call(this,h,p);var d=h.isValid();if(d||e.addError("REMOTE_NOT_VALID",[t],h),e.path.pop(),!d)return}}if(p&&f)for(var g=f.split("/"),y=0,w=g.length;p&&w>y;y++){var v=n(g[y]);p=0===y?s(p,v):p[v]}return p},a.getRemotePath=r},{"./Report":229,"./SchemaCompilation":231,"./SchemaValidation":232,"./Utils":233}],231:[function(e,t,a){"use strict";function n(e,t){if(u.isAbsoluteUri(t))return t;var a,n=e.join(""),r=u.isAbsoluteUri(n),i=u.isRelativeUri(n),s=u.isRelativeUri(t);r&&s?(a=n.match(/\/[^\/]*$/),a&&(n=n.slice(0,a.index+1))):i&&s?n="":(a=n.match(/[^#\/]+$/),a&&(n=n.slice(0,a.index)));var o=n+t;return o=o.replace(/##/,"#")}function r(e,t,a,i){if(t=t||[],a=a||[],i=i||[],"object"!=typeof e||null===e)return t;"string"==typeof e.id&&a.push(e.id),"string"==typeof e.$ref&&"undefined"==typeof e.__$refResolved&&t.push({ref:n(a,e.$ref),key:"$ref",obj:e,path:i.slice(0)}),"string"==typeof e.$schema&&"undefined"==typeof e.__$schemaResolved&&t.push({ref:n(a,e.$schema),key:"$schema",obj:e,path:i.slice(0)});var s;if(Array.isArray(e))for(s=e.length;s--;)i.push(s.toString()),r(e[s],t,a,i),i.pop();else{var o=Object.keys(e);for(s=o.length;s--;)0!==o[s].indexOf("__$")&&(i.push(o[s]),r(e[o[s]],t,a,i),i.pop())}return"string"==typeof e.id&&a.pop(),t}function i(e,t){for(var a=e.length;a--;)if(e[a].id===t)return e[a];return null}var s=e("./Report"),o=e("./SchemaCache"),u=e("./Utils"),c=function(e,t){for(var n=t.length,r=0;n--;){var i=new s(e),o=a.compileSchema.call(this,i,t[n]);o&&r++,e.errors=e.errors.concat(i.errors)}return r},l=function(e,t){var a,n=0;do{for(var r=e.errors.length;r--;)"UNRESOLVABLE_REFERENCE"===e.errors[r].code&&e.errors.splice(r,1);for(a=n,n=c.call(this,e,t),r=t.length;r--;){var s=t[r];if(s.__$missingReferences){for(var o=s.__$missingReferences.length;o--;){var u=s.__$missingReferences[o],l=i(t,u.ref);l&&(u.obj["__"+u.key+"Resolved"]=l,s.__$missingReferences.splice(o,1))}0===s.__$missingReferences.length&&delete s.__$missingReferences}}}while(n!==t.length&&n!==a);return e.isValid()};a.compileSchema=function(e,t){if(e.commonErrorMessage="SCHEMA_COMPILATION_FAILED","string"==typeof t){var n=o.getSchemaByUri.call(this,e,t);if(!n)return e.addError("SCHEMA_NOT_REACHABLE",[t]),!1;t=n}if(Array.isArray(t))return l.call(this,e,t);if(t.__$compiled&&t.id&&o.checkCacheForUri.call(this,t.id)===!1&&(t.__$compiled=void 0),t.__$compiled)return!0;t.id&&"string"==typeof t.id&&o.cacheSchemaByUri.call(this,t.id,t); -var i=!1;e.rootSchema||(e.rootSchema=t,i=!0);var c=e.isValid();delete t.__$missingReferences;for(var f=r.call(this,t),p=f.length;p--;){var m=f[p],h=o.getSchemaByUri.call(this,e,m.ref,t);if(!h){var d=this.getSchemaReader();if(d){var g=d(m.ref);if(g){g.id=m.ref;var y=new s(e);a.compileSchema.call(this,y,g)?h=o.getSchemaByUri.call(this,e,m.ref,t):e.errors=e.errors.concat(y.errors)}}}if(!h){var w=e.hasError("REMOTE_NOT_VALID",[m.ref]),v=u.isAbsoluteUri(m.ref),b=!1,E=this.options.ignoreUnresolvableReferences===!0;v&&(b=o.checkCacheForUri.call(this,m.ref)),w||E&&v||b||(Array.prototype.push.apply(e.path,m.path),e.addError("UNRESOLVABLE_REFERENCE",[m.ref]),e.path=e.path.slice(0,-m.path.length),c&&(t.__$missingReferences=t.__$missingReferences||[],t.__$missingReferences.push(m)))}m.obj["__"+m.key+"Resolved"]=h}var A=e.isValid();return A?t.__$compiled=!0:t.id&&"string"==typeof t.id&&o.removeFromCacheByUri.call(this,t.id),i&&(e.rootSchema=void 0),A}},{"./Report":229,"./SchemaCache":230,"./Utils":233}],232:[function(e,t,a){"use strict";var n=e("./FormatValidators"),r=e("./JsonValidation"),i=e("./Report"),s=e("./Utils"),o={$ref:function(e,t){"string"!=typeof t.$ref&&e.addError("KEYWORD_TYPE_EXPECTED",["$ref","string"])},$schema:function(e,t){"string"!=typeof t.$schema&&e.addError("KEYWORD_TYPE_EXPECTED",["$schema","string"])},multipleOf:function(e,t){"number"!=typeof t.multipleOf?e.addError("KEYWORD_TYPE_EXPECTED",["multipleOf","number"]):t.multipleOf<=0&&e.addError("KEYWORD_MUST_BE",["multipleOf","strictly greater than 0"])},maximum:function(e,t){"number"!=typeof t.maximum&&e.addError("KEYWORD_TYPE_EXPECTED",["maximum","number"])},exclusiveMaximum:function(e,t){"boolean"!=typeof t.exclusiveMaximum?e.addError("KEYWORD_TYPE_EXPECTED",["exclusiveMaximum","boolean"]):void 0===t.maximum&&e.addError("KEYWORD_DEPENDENCY",["exclusiveMaximum","maximum"])},minimum:function(e,t){"number"!=typeof t.minimum&&e.addError("KEYWORD_TYPE_EXPECTED",["minimum","number"])},exclusiveMinimum:function(e,t){"boolean"!=typeof t.exclusiveMinimum?e.addError("KEYWORD_TYPE_EXPECTED",["exclusiveMinimum","boolean"]):void 0===t.minimum&&e.addError("KEYWORD_DEPENDENCY",["exclusiveMinimum","minimum"])},maxLength:function(e,t){"integer"!==s.whatIs(t.maxLength)?e.addError("KEYWORD_TYPE_EXPECTED",["maxLength","integer"]):t.maxLength<0&&e.addError("KEYWORD_MUST_BE",["maxLength","greater than, or equal to 0"])},minLength:function(e,t){"integer"!==s.whatIs(t.minLength)?e.addError("KEYWORD_TYPE_EXPECTED",["minLength","integer"]):t.minLength<0&&e.addError("KEYWORD_MUST_BE",["minLength","greater than, or equal to 0"])},pattern:function(e,t){if("string"!=typeof t.pattern)e.addError("KEYWORD_TYPE_EXPECTED",["pattern","string"]);else try{RegExp(t.pattern)}catch(a){e.addError("KEYWORD_PATTERN",["pattern",t.pattern])}},additionalItems:function(e,t){var n=s.whatIs(t.additionalItems);"boolean"!==n&&"object"!==n?e.addError("KEYWORD_TYPE_EXPECTED",["additionalItems",["boolean","object"]]):"object"===n&&(e.path.push("additionalItems"),a.validateSchema.call(this,e,t.additionalItems),e.path.pop())},items:function(e,t){var n=s.whatIs(t.items);if("object"===n)e.path.push("items"),a.validateSchema.call(this,e,t.items),e.path.pop();else if("array"===n)for(var r=t.items.length;r--;)e.path.push("items"),e.path.push(r.toString()),a.validateSchema.call(this,e,t.items[r]),e.path.pop(),e.path.pop();else e.addError("KEYWORD_TYPE_EXPECTED",["items",["array","object"]]);this.options.forceAdditional===!0&&void 0===t.additionalItems&&Array.isArray(t.items)&&e.addError("KEYWORD_UNDEFINED_STRICT",["additionalItems"]),this.options.assumeAdditional&&void 0===t.additionalItems&&Array.isArray(t.items)&&(t.additionalItems=!1)},maxItems:function(e,t){"number"!=typeof t.maxItems?e.addError("KEYWORD_TYPE_EXPECTED",["maxItems","integer"]):t.maxItems<0&&e.addError("KEYWORD_MUST_BE",["maxItems","greater than, or equal to 0"])},minItems:function(e,t){"integer"!==s.whatIs(t.minItems)?e.addError("KEYWORD_TYPE_EXPECTED",["minItems","integer"]):t.minItems<0&&e.addError("KEYWORD_MUST_BE",["minItems","greater than, or equal to 0"])},uniqueItems:function(e,t){"boolean"!=typeof t.uniqueItems&&e.addError("KEYWORD_TYPE_EXPECTED",["uniqueItems","boolean"])},maxProperties:function(e,t){"integer"!==s.whatIs(t.maxProperties)?e.addError("KEYWORD_TYPE_EXPECTED",["maxProperties","integer"]):t.maxProperties<0&&e.addError("KEYWORD_MUST_BE",["maxProperties","greater than, or equal to 0"])},minProperties:function(e,t){"integer"!==s.whatIs(t.minProperties)?e.addError("KEYWORD_TYPE_EXPECTED",["minProperties","integer"]):t.minProperties<0&&e.addError("KEYWORD_MUST_BE",["minProperties","greater than, or equal to 0"])},required:function(e,t){if("array"!==s.whatIs(t.required))e.addError("KEYWORD_TYPE_EXPECTED",["required","array"]);else if(0===t.required.length)e.addError("KEYWORD_MUST_BE",["required","an array with at least one element"]);else{for(var a=t.required.length;a--;)"string"!=typeof t.required[a]&&e.addError("KEYWORD_VALUE_TYPE",["required","string"]);s.isUniqueArray(t.required)===!1&&e.addError("KEYWORD_MUST_BE",["required","an array with unique items"])}},additionalProperties:function(e,t){var n=s.whatIs(t.additionalProperties);"boolean"!==n&&"object"!==n?e.addError("KEYWORD_TYPE_EXPECTED",["additionalProperties",["boolean","object"]]):"object"===n&&(e.path.push("additionalProperties"),a.validateSchema.call(this,e,t.additionalProperties),e.path.pop())},properties:function(e,t){if("object"!==s.whatIs(t.properties))return void e.addError("KEYWORD_TYPE_EXPECTED",["properties","object"]);for(var n=Object.keys(t.properties),r=n.length;r--;){var i=n[r],o=t.properties[i];e.path.push("properties"),e.path.push(i),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}this.options.forceAdditional===!0&&void 0===t.additionalProperties&&e.addError("KEYWORD_UNDEFINED_STRICT",["additionalProperties"]),this.options.assumeAdditional&&void 0===t.additionalProperties&&(t.additionalProperties=!1),this.options.forceProperties===!0&&0===n.length&&e.addError("CUSTOM_MODE_FORCE_PROPERTIES",["properties"])},patternProperties:function(e,t){if("object"!==s.whatIs(t.patternProperties))return void e.addError("KEYWORD_TYPE_EXPECTED",["patternProperties","object"]);for(var n=Object.keys(t.patternProperties),r=n.length;r--;){var i=n[r],o=t.patternProperties[i];try{RegExp(i)}catch(u){e.addError("KEYWORD_PATTERN",["patternProperties",i])}e.path.push("patternProperties"),e.path.push(i.toString()),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}this.options.forceProperties===!0&&0===n.length&&e.addError("CUSTOM_MODE_FORCE_PROPERTIES",["patternProperties"])},dependencies:function(e,t){if("object"!==s.whatIs(t.dependencies))e.addError("KEYWORD_TYPE_EXPECTED",["dependencies","object"]);else for(var n=Object.keys(t.dependencies),r=n.length;r--;){var i=n[r],o=t.dependencies[i],u=s.whatIs(o);if("object"===u)e.path.push("dependencies"),e.path.push(i),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop();else if("array"===u){var c=o.length;for(0===c&&e.addError("KEYWORD_MUST_BE",["dependencies","not empty array"]);c--;)"string"!=typeof o[c]&&e.addError("KEYWORD_VALUE_TYPE",["dependensices","string"]);s.isUniqueArray(o)===!1&&e.addError("KEYWORD_MUST_BE",["dependencies","an array with unique items"])}else e.addError("KEYWORD_VALUE_TYPE",["dependencies","object or array"])}},"enum":function(e,t){Array.isArray(t["enum"])===!1?e.addError("KEYWORD_TYPE_EXPECTED",["enum","array"]):0===t["enum"].length?e.addError("KEYWORD_MUST_BE",["enum","an array with at least one element"]):s.isUniqueArray(t["enum"])===!1&&e.addError("KEYWORD_MUST_BE",["enum","an array with unique elements"])},type:function(e,t){var a=["array","boolean","integer","number","null","object","string"],n=a.join(","),r=Array.isArray(t.type);if(r){for(var i=t.type.length;i--;)-1===a.indexOf(t.type[i])&&e.addError("KEYWORD_TYPE_EXPECTED",["type",n]);s.isUniqueArray(t.type)===!1&&e.addError("KEYWORD_MUST_BE",["type","an object with unique properties"])}else"string"==typeof t.type?-1===a.indexOf(t.type)&&e.addError("KEYWORD_TYPE_EXPECTED",["type",n]):e.addError("KEYWORD_TYPE_EXPECTED",["type",["string","array"]]);this.options.noEmptyStrings===!0&&("string"===t.type||r&&-1!==t.type.indexOf("string"))&&void 0===t.minLength&&void 0===t["enum"]&&void 0===t.format&&(t.minLength=1),this.options.noEmptyArrays===!0&&("array"===t.type||r&&-1!==t.type.indexOf("array"))&&void 0===t.minItems&&(t.minItems=1),this.options.forceProperties===!0&&("object"===t.type||r&&-1!==t.type.indexOf("object"))&&void 0===t.properties&&void 0===t.patternProperties&&e.addError("KEYWORD_UNDEFINED_STRICT",["properties"]),this.options.forceItems===!0&&("array"===t.type||r&&-1!==t.type.indexOf("array"))&&void 0===t.items&&e.addError("KEYWORD_UNDEFINED_STRICT",["items"]),this.options.forceMinItems===!0&&("array"===t.type||r&&-1!==t.type.indexOf("array"))&&void 0===t.minItems&&e.addError("KEYWORD_UNDEFINED_STRICT",["minItems"]),this.options.forceMaxItems===!0&&("array"===t.type||r&&-1!==t.type.indexOf("array"))&&void 0===t.maxItems&&e.addError("KEYWORD_UNDEFINED_STRICT",["maxItems"]),this.options.forceMinLength===!0&&("string"===t.type||r&&-1!==t.type.indexOf("string"))&&void 0===t.minLength&&void 0===t.format&&void 0===t["enum"]&&void 0===t.pattern&&e.addError("KEYWORD_UNDEFINED_STRICT",["minLength"]),this.options.forceMaxLength===!0&&("string"===t.type||r&&-1!==t.type.indexOf("string"))&&void 0===t.maxLength&&void 0===t.format&&void 0===t["enum"]&&void 0===t.pattern&&e.addError("KEYWORD_UNDEFINED_STRICT",["maxLength"])},allOf:function(e,t){if(Array.isArray(t.allOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["allOf","array"]);else if(0===t.allOf.length)e.addError("KEYWORD_MUST_BE",["allOf","an array with at least one element"]);else for(var n=t.allOf.length;n--;)e.path.push("allOf"),e.path.push(n.toString()),a.validateSchema.call(this,e,t.allOf[n]),e.path.pop(),e.path.pop()},anyOf:function(e,t){if(Array.isArray(t.anyOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["anyOf","array"]);else if(0===t.anyOf.length)e.addError("KEYWORD_MUST_BE",["anyOf","an array with at least one element"]);else for(var n=t.anyOf.length;n--;)e.path.push("anyOf"),e.path.push(n.toString()),a.validateSchema.call(this,e,t.anyOf[n]),e.path.pop(),e.path.pop()},oneOf:function(e,t){if(Array.isArray(t.oneOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["oneOf","array"]);else if(0===t.oneOf.length)e.addError("KEYWORD_MUST_BE",["oneOf","an array with at least one element"]);else for(var n=t.oneOf.length;n--;)e.path.push("oneOf"),e.path.push(n.toString()),a.validateSchema.call(this,e,t.oneOf[n]),e.path.pop(),e.path.pop()},not:function(e,t){"object"!==s.whatIs(t.not)?e.addError("KEYWORD_TYPE_EXPECTED",["not","object"]):(e.path.push("not"),a.validateSchema.call(this,e,t.not),e.path.pop())},definitions:function(e,t){if("object"!==s.whatIs(t.definitions))e.addError("KEYWORD_TYPE_EXPECTED",["definitions","object"]);else for(var n=Object.keys(t.definitions),r=n.length;r--;){var i=n[r],o=t.definitions[i];e.path.push("definitions"),e.path.push(i),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}},format:function(e,t){"string"!=typeof t.format?e.addError("KEYWORD_TYPE_EXPECTED",["format","string"]):void 0===n[t.format]&&this.options.ignoreUnknownFormats!==!0&&e.addError("UNKNOWN_FORMAT",[t.format])},id:function(e,t){"string"!=typeof t.id&&e.addError("KEYWORD_TYPE_EXPECTED",["id","string"])},title:function(e,t){"string"!=typeof t.title&&e.addError("KEYWORD_TYPE_EXPECTED",["title","string"])},description:function(e,t){"string"!=typeof t.description&&e.addError("KEYWORD_TYPE_EXPECTED",["description","string"])},"default":function(){}},u=function(e,t){for(var n=t.length;n--;)a.validateSchema.call(this,e,t[n]);return e.isValid()};a.validateSchema=function(e,t){if(e.commonErrorMessage="SCHEMA_VALIDATION_FAILED",Array.isArray(t))return u.call(this,e,t);if(t.__$validated)return!0;var a=t.$schema&&t.id!==t.$schema;if(a)if(t.__$schemaResolved&&t.__$schemaResolved!==t){var n=new i(e),c=r.validate.call(this,n,t.__$schemaResolved,t);c===!1&&e.addError("PARENT_SCHEMA_VALIDATION_FAILED",null,n)}else this.options.ignoreUnresolvableReferences!==!0&&e.addError("REF_UNRESOLVED",[t.$schema]);if(this.options.noTypeless===!0){if(void 0!==t.type){var l=[];Array.isArray(t.anyOf)&&(l=l.concat(t.anyOf)),Array.isArray(t.oneOf)&&(l=l.concat(t.oneOf)),Array.isArray(t.allOf)&&(l=l.concat(t.allOf)),l.forEach(function(e){e.type||(e.type=t.type)})}void 0===t["enum"]&&void 0===t.type&&void 0===t.anyOf&&void 0===t.oneOf&&void 0===t.not&&void 0===t.$ref&&e.addError("KEYWORD_UNDEFINED_STRICT",["type"])}for(var f=Object.keys(t),p=f.length;p--;){var m=f[p];0!==m.indexOf("__")&&(void 0!==o[m]?o[m].call(this,e,t):a||this.options.noExtraKeywords===!0&&e.addError("KEYWORD_UNEXPECTED",[m]))}if(this.options.pedanticCheck===!0){if(t["enum"]){var h=s.clone(t);for(delete h["enum"],delete h["default"],e.path.push("enum"),p=t["enum"].length;p--;)e.path.push(p.toString()),r.validate.call(this,e,h,t["enum"][p]),e.path.pop();e.path.pop()}t["default"]&&(e.path.push("default"),r.validate.call(this,e,t,t["default"]),e.path.pop())}var d=e.isValid();return d&&(t.__$validated=!0),d}},{"./FormatValidators":226,"./JsonValidation":227,"./Report":229,"./Utils":233}],233:[function(e,t,a){"use strict";a.isAbsoluteUri=function(e){return/^https?:\/\//.test(e)},a.isRelativeUri=function(e){return/.+#/.test(e)},a.whatIs=function(e){var t=typeof e;return"object"===t?null===e?"null":Array.isArray(e)?"array":"object":"number"===t?Number.isFinite(e)?e%1===0?"integer":"number":Number.isNaN(e)?"not-a-number":"unknown-number":t},a.areEqual=function n(e,t){if(e===t)return!0;var r,i;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(i=e.length,r=0;i>r;r++)if(!n(e[r],t[r]))return!1;return!0}if("object"===a.whatIs(e)&&"object"===a.whatIs(t)){var s=Object.keys(e),o=Object.keys(t);if(!n(s,o))return!1;for(i=s.length,r=0;i>r;r++)if(!n(e[s[r]],t[s[r]]))return!1;return!0}return!1},a.isUniqueArray=function(e,t){var n,r,i=e.length;for(n=0;i>n;n++)for(r=n+1;i>r;r++)if(a.areEqual(e[n],e[r]))return t&&t.push(n,r),!1;return!0},a.difference=function(e,t){for(var a=[],n=e.length;n--;)-1===t.indexOf(e[n])&&a.push(e[n]);return a},a.clone=function(e){if("undefined"!=typeof e){if("object"!=typeof e||null===e)return e;var t,a;if(Array.isArray(e))for(t=[],a=e.length;a--;)t[a]=e[a];else{t={};var n=Object.keys(e);for(a=n.length;a--;){var r=n[a];t[r]=e[r]}}return t}},a.cloneDeep=function(e){function t(e){if("object"!=typeof e||null===e)return e;var r,i,s;if(s=a.indexOf(e),-1!==s)return n[s];if(a.push(e),Array.isArray(e))for(r=[],n.push(r),i=e.length;i--;)r[i]=t(e[i]);else{r={},n.push(r);var o=Object.keys(e);for(i=o.length;i--;){var u=o[i];r[u]=t(e[u])}}return r}var a=[],n=[];return t(e)},a.ucs2decode=function(e){for(var t,a,n=[],r=0,i=e.length;i>r;)t=e.charCodeAt(r++),t>=55296&&56319>=t&&i>r?(a=e.charCodeAt(r++),56320==(64512&a)?n.push(((1023&t)<<10)+(1023&a)+65536):(n.push(t),r--)):n.push(t);return n}},{}],234:[function(e,t,a){(function(a){"use strict";function n(e){if(this.cache={},this.referenceCache=[],this.setRemoteReference("http://json-schema.org/draft-04/schema",p),this.setRemoteReference("http://json-schema.org/draft-04/hyper-schema",m),"object"==typeof e){for(var t,a=Object.keys(e),n=a.length;n--;)if(t=a[n],void 0===h[t])throw new Error("Unexpected option passed to constructor: "+t);for(a=Object.keys(h),n=a.length;n--;)t=a[n],void 0===e[t]&&(e[t]=f.clone(h[t]));this.options=e}else this.options=f.clone(h);this.options.strictMode===!0&&(this.options.forceAdditional=!0,this.options.forceItems=!0,this.options.forceMaxLength=!0,this.options.forceProperties=!0,this.options.noExtraKeywords=!0,this.options.noTypeless=!0,this.options.noEmptyStrings=!0,this.options.noEmptyArrays=!0)}e("./Polyfills");var r=e("lodash.get"),i=e("./Report"),s=e("./FormatValidators"),o=e("./JsonValidation"),u=e("./SchemaCache"),c=e("./SchemaCompilation"),l=e("./SchemaValidation"),f=e("./Utils"),p=e("./schemas/schema.json"),m=e("./schemas/hyper-schema.json"),h={asyncTimeout:2e3,forceAdditional:!1,assumeAdditional:!1,forceItems:!1,forceMinItems:!1,forceMaxItems:!1,forceMinLength:!1,forceMaxLength:!1,forceProperties:!1,ignoreUnresolvableReferences:!1,noExtraKeywords:!1,noTypeless:!1,noEmptyStrings:!1,noEmptyArrays:!1,strictUris:!1,strictMode:!1,reportPathAsArray:!1,breakOnFirstError:!0,pedanticCheck:!1,ignoreUnknownFormats:!1};n.prototype.compileSchema=function(e){var t=new i(this.options);return e=u.getSchema.call(this,t,e),c.compileSchema.call(this,t,e),this.lastReport=t,t.isValid()},n.prototype.validateSchema=function(e){if(Array.isArray(e)&&0===e.length)throw new Error(".validateSchema was called with an empty array");var t=new i(this.options);e=u.getSchema.call(this,t,e);var a=c.compileSchema.call(this,t,e);return a&&l.validateSchema.call(this,t,e),this.lastReport=t,t.isValid()},n.prototype.validate=function(e,t,n,s){"function"===f.whatIs(n)&&(s=n,n={}),n||(n={});var p=f.whatIs(t);if("string"!==p&&"object"!==p){var m=new Error("Invalid .validate call - schema must be an string or object but "+p+" was passed!");if(s)return void a.nextTick(function(){s(m,!1)});throw m}var h=!1,d=new i(this.options);if("string"==typeof t){var g=t;if(t=u.getSchema.call(this,d,g),!t)throw new Error("Schema with id '"+g+"' wasn't found in the validator cache!")}else t=u.getSchema.call(this,d,t);var y=!1;h||(y=c.compileSchema.call(this,d,t)),y||(this.lastReport=d,h=!0);var w=!1;if(h||(w=l.validateSchema.call(this,d,t)),w||(this.lastReport=d,h=!0),n.schemaPath&&(d.rootSchema=t,t=r(t,n.schemaPath),!t))throw new Error("Schema path '"+n.schemaPath+"' wasn't found in the schema!");if(h||o.validate.call(this,d,t,e),s)return void d.processAsyncTasks(this.options.asyncTimeout,s);if(d.asyncTasks.length>0)throw new Error("This validation has async tasks and cannot be done in sync mode, please provide callback argument.");return this.lastReport=d,d.isValid()},n.prototype.getLastError=function(){if(0===this.lastReport.errors.length)return null;var e=new Error;return e.name="z-schema validation error",e.message=this.lastReport.commonErrorMessage,e.details=this.lastReport.errors,e},n.prototype.getLastErrors=function(){return this.lastReport&&this.lastReport.errors.length>0?this.lastReport.errors:void 0},n.prototype.getMissingReferences=function(e){e=e||this.lastReport.errors;for(var t=[],a=e.length;a--;){var n=e[a];if("UNRESOLVABLE_REFERENCE"===n.code){var r=n.params[0];-1===t.indexOf(r)&&t.push(r)}n.inner&&(t=t.concat(this.getMissingReferences(n.inner)))}return t},n.prototype.getMissingRemoteReferences=function(){for(var e=this.getMissingReferences(),t=[],a=e.length;a--;){var n=u.getRemotePath(e[a]);n&&-1===t.indexOf(n)&&t.push(n)}return t},n.prototype.setRemoteReference=function(e,t){t="string"==typeof t?JSON.parse(t):f.cloneDeep(t),u.cacheSchemaByUri.call(this,e,t)},n.prototype.getResolvedSchema=function(e){var t=new i(this.options);e=u.getSchema.call(this,t,e),e=f.cloneDeep(e);var a=[],n=function(e){var t,r=f.whatIs(e);if(("object"===r||"array"===r)&&!e.___$visited){if(e.___$visited=!0,a.push(e),e.$ref&&e.__$refResolved){var i=e.__$refResolved,s=e;delete e.$ref,delete e.__$refResolved;for(t in i)i.hasOwnProperty(t)&&(s[t]=i[t])}for(t in e)e.hasOwnProperty(t)&&(0===t.indexOf("__$")?delete e[t]:n(e[t]))}};if(n(e),a.forEach(function(e){delete e.___$visited}),this.lastReport=t,t.isValid())return e;throw this.getLastError()},n.prototype.setSchemaReader=function(e){return n.setSchemaReader(e)},n.prototype.getSchemaReader=function(){return n.schemaReader},n.setSchemaReader=function(e){n.schemaReader=e},n.registerFormat=function(e,t){s[e]=t},n.unregisterFormat=function(e){delete s[e]},n.getRegisteredFormats=function(){return Object.keys(s)},n.getDefaultOptions=function(){return f.cloneDeep(h)},t.exports=n}).call(this,e("_process"))},{"./FormatValidators":226,"./JsonValidation":227,"./Polyfills":228,"./Report":229,"./SchemaCache":230,"./SchemaCompilation":231,"./SchemaValidation":232,"./Utils":233,"./schemas/hyper-schema.json":235,"./schemas/schema.json":236,_process:202,"lodash.get":192}],235:[function(e,t,a){t.exports={$schema:"http://json-schema.org/draft-04/hyper-schema#",id:"http://json-schema.org/draft-04/hyper-schema#",title:"JSON Hyper-Schema",allOf:[{$ref:"http://json-schema.org/draft-04/schema#"}],properties:{additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}]},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}]},dependencies:{additionalProperties:{anyOf:[{$ref:"#"},{type:"array"}]}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}]},definitions:{additionalProperties:{$ref:"#"}},patternProperties:{additionalProperties:{$ref:"#"}},properties:{additionalProperties:{$ref:"#"}},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"},links:{type:"array",items:{$ref:"#/definitions/linkDescription"}},fragmentResolution:{type:"string"},media:{type:"object",properties:{type:{description:"A media type, as described in RFC 2046",type:"string"},binaryEncoding:{description:"A content encoding scheme, as described in RFC 2045",type:"string"}}},pathStart:{description:"Instances' URIs must start with this value for this schema to apply to them",type:"string",format:"uri"}},definitions:{schemaArray:{type:"array",items:{$ref:"#"}},linkDescription:{title:"Link Description Object",type:"object",required:["href","rel"],properties:{href:{description:"a URI template, as defined by RFC 6570, with the addition of the $, ( and ) characters for pre-processing",type:"string"},rel:{description:"relation to the target resource of the link",type:"string"},title:{description:"a title for the link",type:"string"},targetSchema:{description:"JSON Schema describing the link target",$ref:"#"},mediaType:{description:"media type (as defined by RFC 2046) describing the link target",type:"string"},method:{description:'method for requesting the target of the link (e.g. for HTTP this might be "GET" or "DELETE")',type:"string"},encType:{description:"The media type in which to submit data along with the request",type:"string","default":"application/json"},schema:{description:"Schema describing the data to submit along with the request",$ref:"#"}}}}}},{}],236:[function(e,t,a){t.exports={id:"http://json-schema.org/draft-04/schema#",$schema:"http://json-schema.org/draft-04/schema#",description:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},positiveInteger:{type:"integer",minimum:0},positiveIntegerDefault0:{allOf:[{$ref:"#/definitions/positiveInteger"},{"default":0}]},simpleTypes:{"enum":["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},minItems:1,uniqueItems:!0}},type:"object",properties:{id:{type:"string",format:"uri"},$schema:{type:"string",format:"uri"},title:{type:"string"},description:{type:"string"},"default":{},multipleOf:{type:"number",minimum:0,exclusiveMinimum:!0},maximum:{type:"number"},exclusiveMaximum:{type:"boolean","default":!1},minimum:{type:"number"},exclusiveMinimum:{type:"boolean","default":!1},maxLength:{$ref:"#/definitions/positiveInteger"},minLength:{$ref:"#/definitions/positiveIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],"default":{}},maxItems:{$ref:"#/definitions/positiveInteger"},minItems:{$ref:"#/definitions/positiveIntegerDefault0"},uniqueItems:{type:"boolean","default":!1},maxProperties:{$ref:"#/definitions/positiveInteger"},minProperties:{$ref:"#/definitions/positiveIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},definitions:{type:"object",additionalProperties:{$ref:"#"},"default":{}},properties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},"enum":{type:"array",minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},dependencies:{exclusiveMaximum:["maximum"],exclusiveMinimum:["minimum"]},"default":{}}},{}]},{},[1])(1)}); \ No newline at end of file +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Sway=e()}}(function(){var e;return function t(e,a,n){function r(s,o){if(!a[s]){if(!e[s]){var u="function"==typeof require&&require;if(!o&&u)return u(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=a[s]={exports:{}};e[s][0].call(l.exports,function(t){var a=e[s][1][t];return r(a?a:t)},l,l.exports,t,e,a,n)}return a[s].exports}for(var i="function"==typeof require&&require,s=0;s-1)try{a=JSON.parse(a)}catch(n){}switch(i){case"array":if(s.isString(a)){if(-1===f.indexOf(t.collectionFormat))throw new TypeError("Invalid 'collectionFormat' value: "+t.collectionFormat);switch(t.collectionFormat){case"csv":case void 0:a=a.split(",");break;case"multi":a=[a];break;case"pipes":a=a.split("|");break;case"ssv":a=a.split(" ");break;case"tsv":a=a.split(" ")}}s.isArray(a)&&(a=s.map(a,function(a,n){return w(s.isArray(e.items)?e.items[n]:e.items,t,a)}));break;case"boolean":s.isBoolean(a)||("true"===a?a=!0:"false"===a?a=!1:n=new TypeError("Not a valid boolean: "+a));break;case"integer":s.isNumber(a)||(s.isString(a)&&0===s.trim(a).length&&(a=NaN),a=Number(a),s.isNaN(a)&&(n=new TypeError("Not a valid integer: "+r)));break;case"number":s.isNumber(a)||(s.isString(a)&&0===s.trim(a).length&&(a=NaN),a=Number(a),s.isNaN(a)&&(n=new TypeError("Not a valid number: "+r)));break;case"string":["date","date-time"].indexOf(e.format)>-1?(s.isString(a)&&(a=new Date(a)),s.isDate(a)&&"Invalid Date"!==a.toString()||(n=new TypeError("Not a valid "+e.format+" string: "+r),n.code="INVALID_FORMAT")):s.isString(a)||(n=new TypeError("Not a valid string: "+a))}if(!s.isUndefined(n))throw s.isUndefined(n.code)?(n.code="INVALID_TYPE",n.message="Expected type "+i+" but found type "+u):n.message="Object didn't pass validation for format "+e.format+": "+o,n.failedValidation=!0,n.path=[],n;return a};t.exports.getJSONSchemaMocker=function(){return h},t.exports.getJSONSchemaValidator=function(){return d},t.exports.parameterLocations=["body","formData","header","path","query"],t.exports.removeCirculars=function(e){function t(a,n,r){function i(e,n){r.push(n),t(a,e,r),r.pop()}-1===a.indexOf(n)?(a.push(n),(s.isArray(n)||s.isPlainObject(n))&&s.each(n,function(e,t){i(e,t.toString())})):s.set(e,r,{}),a.pop()}t([],e,[])},t.exports.supportedHttpMethods=["get","put","post","delete","options","head","patch"],t.exports.validateAgainstSchema=function(e,t,a){t=s.cloneDeep(t);var n={errors:[],warnings:[]};return e.validate(a,t)||(n.errors=s.map(e.getLastErrors(),function(e){return i(e),e})),n},t.exports.validateContentType=function(e,t,a){var n=e;s.isUndefined(e)||(e=e.split(";")[0]),-1===s.indexOf(t,n)&&-1===s.indexOf(t,e)&&a.errors.push({code:"INVALID_CONTENT_TYPE",message:"Invalid Content-Type ("+e+"). These are supported: "+t.join(", "),path:[]})}},{"./json-schema-draft-04.json":3,"./validation/format-generators":10,"./validation/format-validators":11,"json-schema-faker":171,lodash:192,"z-schema":232}],3:[function(e,t,a){t.exports={id:"http://json-schema.org/draft-04/schema#",$schema:"http://json-schema.org/draft-04/schema#",description:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},positiveInteger:{type:"integer",minimum:0},positiveIntegerDefault0:{allOf:[{$ref:"#/definitions/positiveInteger"},{"default":0}]},simpleTypes:{"enum":["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},minItems:1,uniqueItems:!0}},type:"object",properties:{id:{type:"string",format:"uri"},$schema:{type:"string",format:"uri"},title:{type:"string"},description:{type:"string"},"default":{},multipleOf:{type:"number",minimum:0,exclusiveMinimum:!0},maximum:{type:"number"},exclusiveMaximum:{type:"boolean","default":!1},minimum:{type:"number"},exclusiveMinimum:{type:"boolean","default":!1},maxLength:{$ref:"#/definitions/positiveInteger"},minLength:{$ref:"#/definitions/positiveIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],"default":{}},maxItems:{$ref:"#/definitions/positiveInteger"},minItems:{$ref:"#/definitions/positiveIntegerDefault0"},uniqueItems:{type:"boolean","default":!1},maxProperties:{$ref:"#/definitions/positiveInteger"},minProperties:{$ref:"#/definitions/positiveIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},definitions:{type:"object",additionalProperties:{$ref:"#"},"default":{}},properties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},"enum":{type:"array",minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},dependencies:{exclusiveMaximum:["maximum"],exclusiveMinimum:["minimum"]},"default":{}}},{}],4:[function(e,t,a){"use strict";function n(e,t,a,s,u){var c=this;this.customValidators=[],this.definition=e,this.definitionAllResolved=a,this.definitionRemotesResolved=t,this.documentation="https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md",this.options=u,this.references=s,this.version="2.0",r.assign(this,e),r.each(u.customValidators,n.prototype.registerValidator,this),this.pathObjects=r.map(a.paths,function(e,t){return new o(c,t,e,["paths",t])}),i("Creating SwaggerApi from %s",r.isString(u.definition)?u.definition:"the provided document")}var r=e("lodash"),i=e("debug")("sway:api"),s=e("url").parse,o=e("./path"),u=e("../validation/validators");n.prototype.getOperation=function(e,t){var a,n=this.getPath(e);return r.isUndefined(n)||(r.isObject(e)&&(t=e.method),r.isUndefined(t)||(t=t.toLowerCase()),a=n.getOperation(t)),a},n.prototype.getOperations=function(e){var t,a=[];return r.isUndefined(e)?r.each(this.pathObjects,function(e){a.push.apply(a,e.getOperations())}):(t=this.getPath(e),r.isUndefined(t)||(a=t.getOperations())),a},n.prototype.getOperationsByTag=function(e){return r.reduce(this.pathObjects,function(t,a){return t.push.apply(t,a.getOperationsByTag(e)),t},[])},n.prototype.getPath=function(e){var t;return r.isObject(e)?(t=s(e.url).pathname,r.find(this.pathObjects,function(e){return r.isArray(e.regexp.exec(t))})):r.find(this.pathObjects,function(t){return e===t.path})},n.prototype.getPaths=function(){return this.pathObjects},n.prototype.registerValidator=function(e){if(r.isUndefined(e))throw new TypeError("validator is required");if(!r.isFunction(e))throw new TypeError("validator must be a function");this.customValidators.push(e)},n.prototype.validate=function(){function e(e){var n=e(a);n.errors.length>0&&t.errors.push.apply(t.errors,n.errors),n.warnings.length>0&&t.warnings.push.apply(t.warnings,n.warnings)}var t={errors:[],warnings:[]},a=this;return e(u.jsonSchemaValidator),0===t.errors.length&&(r.each(u.semanticValidators,e),r.each(this.customValidators,e)),t},t.exports=n},{"../validation/validators":13,"./path":8,debug:20,lodash:192,url:220}],5:[function(e,t,a){"use strict";function n(e,t,a,n){var c=[],l=this;this.consumes=a.consumes||e.api.consumes||[],this.definition=r.cloneDeep(a),this.method=t,this.parameterObjects=[],this.pathObject=e,this.pathToDefinition=n,this.produces=a.produces||e.api.produces||[],this.ptr=s.pathToPtr(n),r.assign(this,a),r.isUndefined(this.security)&&(this.security=this.definition.security=e.api.definitionAllResolved.security),this.parameterObjects=r.map(e.parameterObjects,function(e){return c.push(e["in"]+":"+e.name),e}),r.each(a.parameters,function(e,t){var a=e["in"]+":"+e.name,r=c.indexOf(a),i=new o(l,e,n.concat(["parameters",t.toString()]));r>-1?l.parameterObjects[r]=i:(l.parameterObjects.push(i),c.push(a))}),this.parameters=this.definition.parameters=r.map(this.parameterObjects,function(e){return e.definition}),this.responseObjects=r.map(a.responses,function(e,t){return new u(l,t,e,n.concat(["responses",t]))}),this.securityDefinitions=r.reduce(this.security,function(t,a){return r.each(a,function(a,n){var i=e.api.definitionAllResolved.securityDefinitions?e.api.definitionAllResolved.securityDefinitions[n]:void 0;r.isUndefined(i)||(t[n]=i)}),t},{}),i("Found operation at %s",this.ptr)}var r=e("lodash"),i=e("debug")("sway:operation"),s=e("json-refs"),o=e("./parameter"),u=e("./response"),c=e("../helpers");n.prototype.getParameter=function(e,t){return r.find(this.parameterObjects,function(a){return a.name===e&&(r.isUndefined(t)?!0:a["in"]===t)})},n.prototype.getParameters=function(){return this.parameterObjects},n.prototype.getResponse=function(e){return r.isUndefined(e)?e="default":r.isNumber(e)&&(e=e.toString()),r.find(this.getResponses(),function(t){return t.statusCode===e})},n.prototype.getResponses=function(){return this.responseObjects},n.prototype.validateRequest=function(e){var t={errors:[],warnings:[]};return["post","put"].indexOf(this.method)>-1&&c.validateContentType(e.headers["content-type"]||"application/octet-stream",this.consumes,t),r.each(this.getParameters(),function(a){var n,r=a.getValue(e);r.valid||(n={code:"INVALID_REQUEST_PARAMETER",errors:r.error.errors||[{code:r.error.code,message:r.error.message,path:r.error.path}],"in":r.parameterObject["in"],message:"Invalid parameter ("+a.name+"): "+((r.errors||[]).length>1?"Value failed JSON Schema validation":r.error.message),name:r.parameterObject.name,path:r.error.path},t.errors.push(n))}),t},n.prototype.validateResponse=function(e){var t={errors:[],warnings:[]},a=e?e.statusCode:"default",n=this.getResponse(a);return r.isUndefined(n)?(n=this.getResponse("default"),r.isUndefined(n)&&t.errors.push({code:"INVALID_RESPONSE_CODE",message:"This operation does not have a defined '"+("default"===a?a:a+"' or 'default")+"' response code",path:[]})):t=n.validateResponse(e),t},t.exports=n},{"../helpers":2,"./parameter":7,"./response":9,debug:20,"json-refs":170,lodash:192}],6:[function(e,t,a){"use strict";function n(e,t){var a,n,o,u=s.pathFromPtr(e.ptr),c=!1,l=e.computedSchema;this.parameterObject=e,this.raw=t,Object.defineProperties(this,{error:{enumerable:!0,get:function(){return this.valid===!0?void 0:a}},valid:{enumerable:!0,get:function(){var t,s,o={errors:[],warnings:[]},c=!1;if(r.isUndefined(n))if(n=!0,t=this.value,r.isUndefined(a))try{if(e.required===!0&&r.isUndefined(t))throw s=new Error("Value is required but was not provided"),s.code="REQUIRED",s;if(e.required===!1&&r.isUndefined(t)?c=!0:l.allowEmptyValue===!0&&""===t?c=!0:"file"===e.type?c=!0:"string"===l.type&&(["date","date-time"].indexOf(l.format)>-1&&r.isDate(t)?c=!0:"string"===l.type&&r.isFunction(t.readUInt8)&&(c=!0)),c||(o=i.validateAgainstSchema(i.getJSONSchemaValidator(),e.getSchema(),t)),o.errors.length>0)throw s=new Error("Value failed JSON Schema validation"),s.code="SCHEMA_VALIDATION_FAILED",s.errors=o.errors,s}catch(f){f.failedValidation=!0,f.path=u,a=f,n=!1}else n=!1;return n}},value:{enumerable:!0,get:function(){if(!c){if("file"===l.type)o=t;else{try{o=i.convertValue(l,{collectionFormat:e.collectionFormat},t)}catch(n){a=n}r.isUndefined(o)&&r.isUndefined(a)&&("array"===l.type?r.isArray(l.items)?(o=r.reduce(l.items,function(e,t){return e.push(t["default"]),e},[]),r.all(o,r.isUndefined)&&(o=void 0)):r.isUndefined(l.items)||r.isUndefined(l.items["default"])||(o=[l.items["default"]]):r.isUndefined(l["default"])||(o=l["default"]))}c=!0}return o}}})}var r=e("lodash"),i=e("../helpers"),s=e("json-refs");t.exports=n},{"../helpers":2,"json-refs":170,lodash:192}],7:[function(e,t,a){"use strict";function n(e,t,a){this.computedSchema=s.computeParameterSchema(t),this.definition=t,this.pathToDefinition=a,this.ptr=o.pathToPtr(a),r.has(e,"consumes")?(this.operationObject=e,this.pathObject=e.pathObject):(this.operationObject=void 0,this.pathObject=e),r.assign(this,t),i("Found %s parameter (%s in %s) at %s",r.isUndefined(this.operationObject)?"path-level":"operation",t.name,t["in"],this.ptr)}var r=e("lodash"),i=e("debug")("sway:parameter"),s=e("../helpers"),o=e("json-refs"),u=e("./parameter-value"),c=e("url").parse;n.prototype.getSchema=function(){return this.computedSchema},n.prototype.getSample=function(){return s.getJSONSchemaMocker()(this.computedSchema)},n.prototype.getValue=function(e){if(r.isUndefined(e))throw new TypeError("req is required");if(-1===s.parameterLocations.indexOf(this["in"]))throw new Error("Invalid 'in' value: "+this["in"]);var t,a,n=this,i=this.computedSchema.type||"object";switch(this["in"]){case"body":a=e.body;break;case"formData":if("file"===i){if(r.isUndefined(e.files))throw new Error("req.files must be provided for 'formData' parameters of type 'file'");a=e.files[this.name]}else{if(r.isUndefined(e.body))throw new Error("req.body must be provided for 'formData' parameters");a=e.body[this.name]}break;case"header":if(r.isUndefined(e.headers))throw new Error("req.headers must be provided for 'header' parameters");a=e.headers[this.name.toLowerCase()];break;case"path":if(r.isUndefined(e.url))throw new Error("req.url must be provided for 'path' parameters");t=this.pathObject.regexp.exec(c(decodeURIComponent(e.url)).pathname),t&&(a=t[r.findIndex(this.pathObject.regexp.keys,function(e){return e.name===n.name})+1]);break;case"query":if(r.isUndefined(e.query))throw new Error("req.query must be provided for 'query' parameters");a=r.get(e.query,this.name)}return new u(this,a)},t.exports=n},{"../helpers":2,"./parameter-value":6,debug:20,"json-refs":170,lodash:192,url:220}],8:[function(e,t,a){"use strict";function n(e,t,a,n){var f=e.definitionAllResolved.basePath||"/",p=this;"/"===f.charAt(f.length-1)&&(f=f.substring(0,f.length-1)),this.api=e,this.definition=a,this.path=t,this.pathToDefinition=n,this.ptr=o.pathToPtr(n),this.regexp=l(f+t.replace(/\{/g,":").replace(/\}/g,"")),r.assign(this,a),this.parameterObjects=r.map(a.parameters,function(e,t){return new c(p,e,n.concat(["parameters",t.toString()]))}),this.operationObjects=r.reduce(a,function(e,t,a){return s.supportedHttpMethods.indexOf(a)>-1&&e.push(new u(p,a,t,n.concat(a))),e},[]),i("Found path at %s",this.ptr)}var r=e("lodash"),i=e("debug")("sway:path"),s=e("../helpers"),o=e("json-refs"),u=e("./operation"),c=e("./parameter"),l=e("path-to-regexp");n.prototype.getOperation=function(e){return r.find(this.operationObjects,function(t){return t.method===e})},n.prototype.getOperations=function(){return this.operationObjects},n.prototype.getOperationsByTag=function(e){return r.filter(this.operationObjects,function(t){return r.contains(t.tags,e)})},n.prototype.getParameters=function(){return this.parameterObjects},t.exports=n},{"../helpers":2,"./operation":5,"./parameter":7,debug:20,"json-refs":170,lodash:192,"path-to-regexp":199}],9:[function(e,t,a){"use strict";function n(e,t,a,n){this.definition=a,this.operationObject=e,this.pathToDefinition=n,this.ptr=u.pathToPtr(n),this.statusCode=t,r.assign(this,a),i("Found %s response at %s",t,this.ptr)}var r=e("lodash"),i=e("debug")("sway:response"),s=e("../helpers"),o=s.getJSONSchemaValidator(),u=e("json-refs"),c=e("js-yaml");n.prototype.getExample=function(e){var t;return r.isPlainObject(this.definition.examples)&&(t=this.definition.examples[e]),r.isUndefined(t)||r.isString(t)||("application/json"===e?t=JSON.stringify(t,null,2):"application/x-yaml"===e&&(t=c.safeDump(t,{indent:2}))),t},n.prototype.getSample=function(){var e;return r.isUndefined(this.definition.schema)||(e=s.getJSONSchemaMocker()(this.definition.schema)),e},n.prototype.validateResponse=function(e){var t,a,n={errors:[],warnings:[]};if(r.isUndefined(e)&&(e={}),r.isUndefined(e.headers)&&(e.headers={}),r.isUndefined(this.definition.schema)||-1!==r.indexOf(["204","304"],this.statusCode)||s.validateContentType(e.headers["content-type"],this.operationObject.produces,n),r.forEach(this.headers,function(t,a){var i,u;try{i=s.convertValue(t,{collectionFormat:t.collectionFormat},e.headers[a.toLowerCase()]||e.headers[a]||t["default"])}catch(c){n.errors.push({code:"INVALID_RESPONSE_HEADER",errors:c.errors||[{code:c.code,message:c.message,path:c.path}],message:"Invalid header ("+a+"): "+c.message,name:a,path:c.path})}r.isUndefined(i)||r.isDate(i)||(u=s.validateAgainstSchema(o,t,i),u.errors.length>0&&n.errors.push({code:"INVALID_RESPONSE_HEADER",errors:u.errors,message:"Invalid header ("+a+"): "+(u.errors.length>1?"Value failed JSON Schema validation":u.errors[0].message),name:a,path:[]}))}),!r.isUndefined(this.definition.schema)&&-1===r.indexOf(["204","304"],this.statusCode)){try{t=s.convertValue(this.definition.schema,{encoding:e.encoding},e.body),a=s.validateAgainstSchema(o,this.definition.schema,t)}catch(i){a={errors:[{code:i.code,message:i.message,path:i.path}]}}a.errors.length>0&&n.errors.push({code:"INVALID_RESPONSE_BODY",errors:a.errors,message:"Invalid body: "+(a.errors.length>1?"Value failed JSON Schema validation":a.errors[0].message),path:[]})}return n},t.exports=n},{"../helpers":2,debug:20,"js-yaml":140,"json-refs":170,lodash:192}],10:[function(e,t,a){"use strict";function n(e){var t=r.cloneDeep(e);return delete t.format,t}var r=e("lodash"),i=e("js-base64").Base64,s=e("json-schema-faker/lib/types/string");t.exports["byte"]=function(e,t){return i.encode(s(n(t)))},t.exports.password=function(e,t){return s(n(t))}},{"js-base64":139,"json-schema-faker/lib/types/string":178,lodash:192}],11:[function(e,t,a){"use strict";function n(){return!0}var r=e("lodash");t.exports.int32=t.exports.int64=function(e){return r.isNumber(e)&&e%1===0},t.exports["byte"]=n,t.exports["double"]=n,t.exports["float"]=n,t.exports.password=n},{lodash:192}],12:[function(e,t,a){t.exports={title:"A JSON Schema for Swagger 2.0 API.",id:"http://swagger.io/v2/schema.json#",$schema:"http://json-schema.org/draft-04/schema#",type:"object",required:["swagger","info","paths"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{swagger:{type:"string","enum":["2.0"],description:"The Swagger version of this document."},info:{$ref:"#/definitions/info"},host:{type:"string",pattern:"^[^{}/ :\\\\]+(?::\\d+)?$",description:"The host (name or ip) of the API. Example: 'swagger.io'"},basePath:{type:"string",pattern:"^/",description:"The base path to the API. Example: '/api'."},schemes:{$ref:"#/definitions/schemesList"},consumes:{description:"A list of MIME types accepted by the API.",$ref:"#/definitions/mediaTypeList"},produces:{description:"A list of MIME types the API can produce.",$ref:"#/definitions/mediaTypeList"},paths:{$ref:"#/definitions/paths"},definitions:{$ref:"#/definitions/definitions"},parameters:{$ref:"#/definitions/parameterDefinitions"},responses:{$ref:"#/definitions/responseDefinitions"},security:{$ref:"#/definitions/security"},securityDefinitions:{$ref:"#/definitions/securityDefinitions"},tags:{type:"array",items:{$ref:"#/definitions/tag"},uniqueItems:!0},externalDocs:{$ref:"#/definitions/externalDocs"}},definitions:{info:{type:"object",description:"General information about the API.",required:["version","title"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{title:{type:"string",description:"A unique and precise title of the API."},version:{type:"string",description:"A semantic version number of the API."},description:{type:"string",description:"A longer description of the API. Should be different from the title. GitHub Flavored Markdown is allowed."},termsOfService:{type:"string",description:"The terms of service for the API."},contact:{$ref:"#/definitions/contact"},license:{$ref:"#/definitions/license"}}},contact:{type:"object",description:"Contact information for the owners of the API.",additionalProperties:!1,properties:{name:{type:"string",description:"The identifying name of the contact person/organization."},url:{type:"string",description:"The URL pointing to the contact information.",format:"uri"},email:{type:"string",description:"The email address of the contact person/organization.",format:"email"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},license:{type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"The name of the license type. It's encouraged to use an OSI compatible license."},url:{type:"string",description:"The URL pointing to the license.",format:"uri"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},paths:{type:"object",description:"Relative paths to the individual endpoints. They must be relative to the 'basePath'.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"},"^/":{$ref:"#/definitions/pathItem"}},additionalProperties:!1},definitions:{type:"object",additionalProperties:{$ref:"#/definitions/schema"},description:"One or more JSON objects describing the schemas being consumed and produced by the API."},parameterDefinitions:{type:"object",additionalProperties:{$ref:"#/definitions/parameter"},description:"One or more JSON representations for parameters"},responseDefinitions:{type:"object",additionalProperties:{$ref:"#/definitions/response"},description:"One or more JSON representations for parameters"},externalDocs:{type:"object",additionalProperties:!1,description:"information about external documentation",required:["url"],properties:{description:{type:"string"},url:{type:"string",format:"uri"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},examples:{type:"object",additionalProperties:!0},mimeType:{type:"string",description:"The MIME type of the HTTP message."},operation:{type:"object",required:["responses"],additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{tags:{type:"array",items:{type:"string"},uniqueItems:!0},summary:{type:"string",description:"A brief summary of the operation."},description:{type:"string",description:"A longer description of the operation, GitHub Flavored Markdown is allowed."},externalDocs:{$ref:"#/definitions/externalDocs"},operationId:{type:"string",description:"A unique identifier of the operation."},produces:{description:"A list of MIME types the API can produce.",$ref:"#/definitions/mediaTypeList"},consumes:{description:"A list of MIME types the API can consume.",$ref:"#/definitions/mediaTypeList"},parameters:{$ref:"#/definitions/parametersList"},responses:{$ref:"#/definitions/responses"},schemes:{$ref:"#/definitions/schemesList"},deprecated:{type:"boolean","default":!1},security:{$ref:"#/definitions/security"}}},pathItem:{type:"object",additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{$ref:{type:"string"},get:{$ref:"#/definitions/operation"},put:{$ref:"#/definitions/operation"},post:{$ref:"#/definitions/operation"},"delete":{$ref:"#/definitions/operation"},options:{$ref:"#/definitions/operation"},head:{$ref:"#/definitions/operation"},patch:{$ref:"#/definitions/operation"},parameters:{$ref:"#/definitions/parametersList"}}},responses:{type:"object",description:"Response objects names can either be any valid HTTP status code or 'default'.",minProperties:1,additionalProperties:!1,patternProperties:{"^([0-9]{3})$|^(default)$":{$ref:"#/definitions/responseValue"},"^x-":{$ref:"#/definitions/vendorExtension"}},not:{type:"object",additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}}},responseValue:{oneOf:[{$ref:"#/definitions/response"},{$ref:"#/definitions/jsonReference"}]},response:{type:"object",required:["description"],properties:{description:{type:"string"},schema:{oneOf:[{$ref:"#/definitions/schema"},{$ref:"#/definitions/fileSchema"}]},headers:{$ref:"#/definitions/headers"},examples:{$ref:"#/definitions/examples"}},additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},headers:{type:"object",additionalProperties:{$ref:"#/definitions/header"}},header:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{type:"string","enum":["string","number","integer","boolean","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},vendorExtension:{description:"Any property starting with x- is valid.",additionalProperties:!0,additionalItems:!0},bodyParameter:{type:"object",required:["name","in","schema"],patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},"in":{type:"string",description:"Determines the location of the parameter.","enum":["body"]},required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},schema:{$ref:"#/definitions/schema"}},additionalProperties:!1},headerParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["header"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},queryParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["query"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},allowEmptyValue:{type:"boolean","default":!1,description:"allows sending a parameter by name only or with an empty value."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{ +$ref:"#/definitions/collectionFormatWithMulti"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},formDataParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{required:{type:"boolean",description:"Determines whether or not this parameter is required or optional.","default":!1},"in":{type:"string",description:"Determines the location of the parameter.","enum":["formData"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},allowEmptyValue:{type:"boolean","default":!1,description:"allows sending a parameter by name only or with an empty value."},type:{type:"string","enum":["string","number","boolean","integer","array","file"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormatWithMulti"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},pathParameterSubSchema:{additionalProperties:!1,patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},required:["required"],properties:{required:{type:"boolean","enum":[!0],description:"Determines whether or not this parameter is required or optional."},"in":{type:"string",description:"Determines the location of the parameter.","enum":["path"]},description:{type:"string",description:"A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."},name:{type:"string",description:"The name of the parameter."},type:{type:"string","enum":["string","number","boolean","integer","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}}},nonBodyParameter:{type:"object",required:["name","in","type"],oneOf:[{$ref:"#/definitions/headerParameterSubSchema"},{$ref:"#/definitions/formDataParameterSubSchema"},{$ref:"#/definitions/queryParameterSubSchema"},{$ref:"#/definitions/pathParameterSubSchema"}]},parameter:{oneOf:[{$ref:"#/definitions/bodyParameter"},{$ref:"#/definitions/nonBodyParameter"}]},schema:{type:"object",description:"A deterministic version of a JSON Schema object.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},properties:{$ref:{type:"string"},format:{type:"string"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},multipleOf:{$ref:"http://json-schema.org/draft-04/schema#/properties/multipleOf"},maximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/maximum"},exclusiveMaximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"},minimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/minimum"},exclusiveMinimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"},maxLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},pattern:{$ref:"http://json-schema.org/draft-04/schema#/properties/pattern"},maxItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},uniqueItems:{$ref:"http://json-schema.org/draft-04/schema#/properties/uniqueItems"},maxProperties:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minProperties:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},required:{$ref:"http://json-schema.org/draft-04/schema#/definitions/stringArray"},"enum":{$ref:"http://json-schema.org/draft-04/schema#/properties/enum"},additionalProperties:{anyOf:[{$ref:"#/definitions/schema"},{type:"boolean"}],"default":{}},type:{$ref:"http://json-schema.org/draft-04/schema#/properties/type"},items:{anyOf:[{$ref:"#/definitions/schema"},{type:"array",minItems:1,items:{$ref:"#/definitions/schema"}}],"default":{}},allOf:{type:"array",minItems:1,items:{$ref:"#/definitions/schema"}},properties:{type:"object",additionalProperties:{$ref:"#/definitions/schema"},"default":{}},discriminator:{type:"string"},readOnly:{type:"boolean","default":!1},xml:{$ref:"#/definitions/xml"},externalDocs:{$ref:"#/definitions/externalDocs"},example:{}},additionalProperties:!1},fileSchema:{type:"object",description:"A deterministic version of a JSON Schema object.",patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}},required:["type"],properties:{format:{type:"string"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},required:{$ref:"http://json-schema.org/draft-04/schema#/definitions/stringArray"},type:{type:"string","enum":["file"]},readOnly:{type:"boolean","default":!1},externalDocs:{$ref:"#/definitions/externalDocs"},example:{}},additionalProperties:!1},primitivesItems:{type:"object",additionalProperties:!1,properties:{type:{type:"string","enum":["string","number","integer","boolean","array"]},format:{type:"string"},items:{$ref:"#/definitions/primitivesItems"},collectionFormat:{$ref:"#/definitions/collectionFormat"},"default":{$ref:"#/definitions/default"},maximum:{$ref:"#/definitions/maximum"},exclusiveMaximum:{$ref:"#/definitions/exclusiveMaximum"},minimum:{$ref:"#/definitions/minimum"},exclusiveMinimum:{$ref:"#/definitions/exclusiveMinimum"},maxLength:{$ref:"#/definitions/maxLength"},minLength:{$ref:"#/definitions/minLength"},pattern:{$ref:"#/definitions/pattern"},maxItems:{$ref:"#/definitions/maxItems"},minItems:{$ref:"#/definitions/minItems"},uniqueItems:{$ref:"#/definitions/uniqueItems"},"enum":{$ref:"#/definitions/enum"},multipleOf:{$ref:"#/definitions/multipleOf"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},security:{type:"array",items:{$ref:"#/definitions/securityRequirement"},uniqueItems:!0},securityRequirement:{type:"object",additionalProperties:{type:"array",items:{type:"string"},uniqueItems:!0}},xml:{type:"object",additionalProperties:!1,properties:{name:{type:"string"},namespace:{type:"string"},prefix:{type:"string"},attribute:{type:"boolean","default":!1},wrapped:{type:"boolean","default":!1}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},tag:{type:"object",additionalProperties:!1,required:["name"],properties:{name:{type:"string"},description:{type:"string"},externalDocs:{$ref:"#/definitions/externalDocs"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},securityDefinitions:{type:"object",additionalProperties:{oneOf:[{$ref:"#/definitions/basicAuthenticationSecurity"},{$ref:"#/definitions/apiKeySecurity"},{$ref:"#/definitions/oauth2ImplicitSecurity"},{$ref:"#/definitions/oauth2PasswordSecurity"},{$ref:"#/definitions/oauth2ApplicationSecurity"},{$ref:"#/definitions/oauth2AccessCodeSecurity"}]}},basicAuthenticationSecurity:{type:"object",additionalProperties:!1,required:["type"],properties:{type:{type:"string","enum":["basic"]},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},apiKeySecurity:{type:"object",additionalProperties:!1,required:["type","name","in"],properties:{type:{type:"string","enum":["apiKey"]},name:{type:"string"},"in":{type:"string","enum":["header","query"]},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2ImplicitSecurity:{type:"object",additionalProperties:!1,required:["type","flow","authorizationUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["implicit"]},scopes:{$ref:"#/definitions/oauth2Scopes"},authorizationUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2PasswordSecurity:{type:"object",additionalProperties:!1,required:["type","flow","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["password"]},scopes:{$ref:"#/definitions/oauth2Scopes"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2ApplicationSecurity:{type:"object",additionalProperties:!1,required:["type","flow","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["application"]},scopes:{$ref:"#/definitions/oauth2Scopes"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2AccessCodeSecurity:{type:"object",additionalProperties:!1,required:["type","flow","authorizationUrl","tokenUrl"],properties:{type:{type:"string","enum":["oauth2"]},flow:{type:"string","enum":["accessCode"]},scopes:{$ref:"#/definitions/oauth2Scopes"},authorizationUrl:{type:"string",format:"uri"},tokenUrl:{type:"string",format:"uri"},description:{type:"string"}},patternProperties:{"^x-":{$ref:"#/definitions/vendorExtension"}}},oauth2Scopes:{type:"object",additionalProperties:{type:"string"}},mediaTypeList:{type:"array",items:{$ref:"#/definitions/mimeType"},uniqueItems:!0},parametersList:{type:"array",description:"The parameters needed to send a valid API call.",additionalItems:!1,items:{oneOf:[{$ref:"#/definitions/parameter"},{$ref:"#/definitions/jsonReference"}]},uniqueItems:!0},schemesList:{type:"array",description:"The transfer protocol of the API.",items:{type:"string","enum":["http","https","ws","wss"]},uniqueItems:!0},collectionFormat:{type:"string","enum":["csv","ssv","tsv","pipes"],"default":"csv"},collectionFormatWithMulti:{type:"string","enum":["csv","ssv","tsv","pipes","multi"],"default":"csv"},title:{$ref:"http://json-schema.org/draft-04/schema#/properties/title"},description:{$ref:"http://json-schema.org/draft-04/schema#/properties/description"},"default":{$ref:"http://json-schema.org/draft-04/schema#/properties/default"},multipleOf:{$ref:"http://json-schema.org/draft-04/schema#/properties/multipleOf"},maximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/maximum"},exclusiveMaximum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"},minimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/minimum"},exclusiveMinimum:{$ref:"http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"},maxLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minLength:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},pattern:{$ref:"http://json-schema.org/draft-04/schema#/properties/pattern"},maxItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveInteger"},minItems:{$ref:"http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"},uniqueItems:{$ref:"http://json-schema.org/draft-04/schema#/properties/uniqueItems"},"enum":{$ref:"http://json-schema.org/draft-04/schema#/properties/enum"},jsonReference:{type:"object",required:["$ref"],additionalProperties:!1,properties:{$ref:{type:"string"}}}}}},{}],13:[function(e,t,a){"use strict";function n(e){var t=p.keys(e.properties);return p.forEach(e.allOf,function(e){p.forEach(n(e),function(e){-1===p.indexOf(t,e)&&t.push(e)})}),t}function r(e,t,a,n,i,s){function o(e){return p.indexOf(t,h.pathToPtr(e))>-1}function u(a,n){o(n)||p.forEach(a,function(a,o){p.isNumber(o)&&(o=o.toString()),r(e,t,a,n.concat(o),i,s)})}var c=a.type||"object";o(n)||(p.isUndefined(a.schema)?"array"!==c||p.isUndefined(a.items)?"object"===c&&(p.isUndefined(a.additionalProperties)||r(e,t,a.additionalProperties,n.concat("additionalProperties"),i,s),p.forEach(["allOf","properties"],function(e){p.isUndefined(a[e])||u(a[e],n.concat(e))})):p.isArray(a.items)?u(a.items,n.concat("items")):r(e,t,a.items,n.concat("items"),i,s):r(e,t,a.schema,n.concat("schema"),i,s),p.forEach(i,function(t){t(e,s,a,n)}))}function i(e){var t=m.validateAgainstSchema(m.getJSONSchemaValidator(),d,e.definitionAllResolved);return t.errors=t.errors.map(function(e){var t=["additionalProperties","items"].indexOf(e.path[e.path.length-1])>-1?"schema":e.path[e.path.length-2];if(["ANY_OF_MISSING","ONE_OF_MISSING"].indexOf(e.code)>-1){switch(t){case"parameters":t="parameter";break;case"responses":t="response";break;case"schema":t+=" "+e.path[e.path.length-1]}e.message="Not a valid "+t+" definition"}return e}),p.each(e.references,function(e,a){var n,r=h.pathFromPtr(a);e.missing?(n={code:"UNRESOLVABLE_REFERENCE",message:"Reference could not be resolved: "+e.uri,path:r.concat("$ref")},p.has(e,"error")&&(n.error=e.error),t.errors.push(n)):"invalid"===e.type&&t.errors.push({code:"INVALID_REFERENCE",message:e.error||"Invalid JSON Reference",path:r.concat("$ref")})}),t}function s(e,t,a,n){"array"===a.type&&p.isUndefined(a.items)&&t.errors.push({code:"OBJECT_MISSING_REQUIRED_PROPERTY",message:"Missing required property: items",path:n})}function o(e,t,a,n){var r;p.isUndefined(a["default"])||(r=m.validateAgainstSchema(m.getJSONSchemaValidator(),a,a["default"]),p.forEach(r.errors,function(e){e.path=n.concat(e.path.concat("default")),t.errors.push(e)}),p.forEach(r.warnings,function(e){e.path=n.concat(e.path.push("default")),t.warnings.push(e)}))}function u(e,t,a,r){p.forEach(p.difference(a.required||[],n(a)),function(e){t.errors.push({code:"OBJECT_MISSING_REQUIRED_PROPERTY_DEFINITION",message:"Missing required property definition: "+e,path:r})})}function c(e){function t(e,t){p.has(i,e)?i[e].parents.push(t):i[e]={lineage:[],parents:[t]}}function a(e,t){-1===p.indexOf(o,e)&&(p.isUndefined(o[e])&&(o[e]=[]),e.indexOf("allOf")>-1&&a(e.substring(0,e.lastIndexOf("/allOf"))),o[e].push(t))}function n(e){return function(t,n){p.forEach(t,function(t,r){var i=["securityDefinitions",r],o=h.pathToPtr(i),c=e.concat([n.toString(),r]);-1===p.indexOf(s,o)?u.errors.push({code:"UNRESOLVABLE_REFERENCE",message:"Security definition could not be resolved: "+r,path:c}):(a(o,h.pathToPtr(c)),p.forEach(t,function(e,t){var n=c.concat(t.toString()),r=h.pathToPtr(i.concat(["scopes",e]));-1===p.indexOf(s,r)?u.errors.push({code:"UNRESOLVABLE_REFERENCE",message:"Security scope definition could not be resolved: "+e,path:n}):a(h.pathToPtr(i.concat(["scopes",e])),r)}))})}}function r(e,t,a){var n=i[t||e];n&&p.each(n.parents,function(t){a.push(t),e!==t&&r(e,t,a)})}var i={},s=[],o={},u={errors:[],warnings:[]};return p.forEach(e.definitionAllResolved.definitions,function(e,t){s.push(h.pathToPtr(["definitions",t]))}),p.forEach(e.definitionAllResolved.parameters,function(e,t){s.push(h.pathToPtr(["parameters",t]))}),p.forEach(e.definitionAllResolved.responses,function(e,t){s.push(h.pathToPtr(["responses",t]))}),p.forEach(e.definitionAllResolved.securityDefinitions,function(e,t){var a=["securityDefinitions",t];s.push(h.pathToPtr(a)),p.forEach(e.scopes,function(e,t){var n=h.pathToPtr(a.concat(["scopes",t]));-1===p.indexOf(s,n)&&s.push(n)})}),p.forEach(e.references,function(e,n){var r=h.pathFromPtr(n);p.has(e,"missing")||(a(e.uri,n),"allOf"===r[r.length-2]&&t(h.pathToPtr(r.slice(0,r.length-2)),e.uri))}),p.forEach(i,function(e,t){r(t,void 0,e.lineage),(e.lineage.length>1&&e.lineage[e.lineage.length-1]===t||e.parents[0]===t)&&u.errors.push({code:"CIRCULAR_INHERITANCE",lineage:[t].concat(e.lineage),message:"Schema object inherits from itself: "+t,path:h.pathFromPtr(t)})}),p.forEach(e.definitionAllResolved.security,n(["security"])),p.forEach(e.definitionAllResolved.paths,function(e,t){var a=["paths",t];p.forEach(e.security,n(a.concat("security"))),p.forEach(e,function(e,t){-1!==p.indexOf(m.supportedHttpMethods,t)&&p.forEach(e.security,n(a.concat([t,"security"])))})}),p.forEach(p.difference(s,Object.keys(o)),function(e){u.warnings.push({code:"UNUSED_DEFINITION",message:"Definition is not used: "+e,path:h.pathFromPtr(e)})}),u}function l(e){function t(t,a){p.forEach(t,function(t,s){var o;p.isNumber(s)&&(s=s.toString()),o=a.concat(s),"body"!==t["in"]&&(t=m.computeParameterSchema(t)),r(e,n,t,o,c,i)})}function a(t,a){p.forEach(t,function(t,s){var o=a.concat(s);p.forEach(t.headers,function(t,a){r(e,n,t,o.concat(["headers",a]),c,i)}),p.isUndefined(t.schema)||r(e,n,t.schema,o.concat("schema"),c,i)})}var n=p.reduce(e.references,function(e,t,a){var n=h.pathFromPtr(a);return e.push(h.pathToPtr(n)),e},[]),i={errors:[],warnings:[]},c=[s,o,u];return p.forEach(e.definitionAllResolved.definitions,function(t,a){r(e,n,t,["definitions",a],c,i)}),t(e.definitionAllResolved.parameters,["parameters"]),a(e.definitionAllResolved.responses,["responses"]),p.forEach(e.definitionAllResolved.paths,function(e,n){var r=["paths",n];t(e.parameters,r.concat("parameters")),p.forEach(e,function(e,n){var i=r.concat(n);-1!==p.indexOf(m.supportedHttpMethods,n)&&(t(e.parameters,i.concat("parameters")),a(e.responses,i.concat("responses")))})}),i}function f(e){function t(e,t,n){var r=t["in"]+":"+t.name;return p.indexOf(e,r)>-1?a.errors.push({code:"DUPLICATE_PARAMETER",message:"Operation cannot have duplicate parameters: "+h.pathToPtr(n),path:n}):e.push(r),e}var a={errors:[],warnings:[]};return p.reduce(e.definitionAllResolved.paths,function(n,r,i){var s=[],o=i,u=["paths",i];return p.forEach(i.match(/\{(.*?)\}/g),function(e,t){s.push(e.replace(/[{}]/g,"")),o=o.replace(e,"arg"+t)}),s.indexOf("")>-1&&a.errors.push({code:"EMPTY_PATH_PARAMETER_DECLARATION",message:"Path parameter declaration cannot be empty: "+i,path:["paths",i]}),p.indexOf(n.paths,o)>-1?a.errors.push({code:"EQUIVALENT_PATH",message:"Equivalent path already exists: "+i,path:u}):n.paths.push(o),p.reduce(r.parameters,function(e,a,n){return t(e,a,u.concat(["parameters",n.toString()]))},[]),p.forEach(r,function(r,o){var c,l,f={},d=u.concat(o),g=r.operationId;-1!==p.indexOf(m.supportedHttpMethods,o)&&(p.isUndefined(g)||(-1!==p.indexOf(n.operationIds,g)?a.errors.push({code:"DUPLICATE_OPERATIONID",message:"Cannot have multiple operations with the same operationId: "+g,path:d.concat(["operationId"])}):n.operationIds.push(g)),p.reduce(r.parameters,function(e,a,n){return t(e,a,d.concat(["parameters",n.toString()]))},[]),l=e.getOperation(i,o).getParameters(),c=p.reduce(l,function(e,t){return"path"===t["in"]?f[t.name]=t.ptr:"body"===t["in"]?e.bodyParameteters+=1:"formData"===t["in"]&&(e.formParameters+=1),e},{bodyParameteters:0,formParameters:0}),c.bodyParameteters>1&&a.errors.push({code:"MULTIPLE_BODY_PARAMETERS",message:"Operation cannot have multiple body parameters",path:d}),c.bodyParameteters>0&&c.formParameters>0&&a.errors.push({code:"INVALID_PARAMETER_COMBINATION",message:"Operation cannot have a body parameter and a formData parameter",path:d}),p.forEach(p.difference(s,p.keys(f)),function(e){a.errors.push({code:"MISSING_PATH_PARAMETER_DEFINITION",message:"Path parameter is declared but is not defined: "+e,path:d})}),p.forEach(p.difference(p.keys(f),s),function(e){a.errors.push({code:"MISSING_PATH_PARAMETER_DECLARATION",message:"Path parameter is defined but is not declared: "+e,path:h.pathFromPtr(f[e])})}))}),n},{paths:[],operationIds:[]}),a}var p=e("lodash"),m=e("../helpers"),h=e("json-refs"),d=e("./schema.json");t.exports={jsonSchemaValidator:i,semanticValidators:[c,l,f]}},{"../helpers":2,"./schema.json":12,"json-refs":170,lodash:192}],14:[function(e,t,a){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(e){"use strict";function t(e){var t=e.charCodeAt(0);return t===s||t===f?62:t===o||t===p?63:u>t?-1:u+10>t?t-u+26+26:l+26>t?t-l:c+26>t?t-c+26:void 0}function a(e){function a(e){c[f++]=e}var n,r,s,o,u,c;if(e.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var l=e.length;u="="===e.charAt(l-2)?2:"="===e.charAt(l-1)?1:0,c=new i(3*e.length/4-u),s=u>0?e.length-4:e.length;var f=0;for(n=0,r=0;s>n;n+=4,r+=3)o=t(e.charAt(n))<<18|t(e.charAt(n+1))<<12|t(e.charAt(n+2))<<6|t(e.charAt(n+3)),a((16711680&o)>>16),a((65280&o)>>8),a(255&o);return 2===u?(o=t(e.charAt(n))<<2|t(e.charAt(n+1))>>4,a(255&o)):1===u&&(o=t(e.charAt(n))<<10|t(e.charAt(n+1))<<4|t(e.charAt(n+2))>>2,a(o>>8&255),a(255&o)),c}function r(e){function t(e){return n.charAt(e)}function a(e){return t(e>>18&63)+t(e>>12&63)+t(e>>6&63)+t(63&e)}var r,i,s,o=e.length%3,u="";for(r=0,s=e.length-o;s>r;r+=3)i=(e[r]<<16)+(e[r+1]<<8)+e[r+2],u+=a(i);switch(o){case 1:i=e[e.length-1],u+=t(i>>2),u+=t(i<<4&63),u+="==";break;case 2:i=(e[e.length-2]<<8)+e[e.length-1],u+=t(i>>10),u+=t(i>>4&63),u+=t(i<<2&63),u+="="}return u}var i="undefined"!=typeof Uint8Array?Uint8Array:Array,s="+".charCodeAt(0),o="/".charCodeAt(0),u="0".charCodeAt(0),c="a".charCodeAt(0),l="A".charCodeAt(0),f="-".charCodeAt(0),p="_".charCodeAt(0);e.toByteArray=a,e.fromByteArray=r}("undefined"==typeof a?this.base64js={}:a)},{}],15:[function(e,t,a){},{}],16:[function(e,t,a){(function(t){"use strict";function n(){function e(){}try{var t=new Uint8Array(1);return t.foo=function(){return 42},t.constructor=e,42===t.foo()&&t.constructor===e&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(a){return!1}}function r(){return i.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function i(e){return this instanceof i?(i.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof e?s(this,e):"string"==typeof e?o(this,e,arguments.length>1?arguments[1]:"utf8"):u(this,e)):arguments.length>1?new i(e,arguments[1]):new i(e)}function s(e,t){if(e=d(e,0>t?0:0|g(t)),!i.TYPED_ARRAY_SUPPORT)for(var a=0;t>a;a++)e[a]=0;return e}function o(e,t,a){("string"!=typeof a||""===a)&&(a="utf8");var n=0|w(t,a);return e=d(e,n),e.write(t,a),e}function u(e,t){if(i.isBuffer(t))return c(e,t);if(Y(t))return l(e,t);if(null==t)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(t.buffer instanceof ArrayBuffer)return f(e,t);if(t instanceof ArrayBuffer)return p(e,t)}return t.length?m(e,t):h(e,t)}function c(e,t){var a=0|g(t.length);return e=d(e,a),t.copy(e,0,0,a),e}function l(e,t){var a=0|g(t.length);e=d(e,a);for(var n=0;a>n;n+=1)e[n]=255&t[n];return e}function f(e,t){var a=0|g(t.length);e=d(e,a);for(var n=0;a>n;n+=1)e[n]=255&t[n];return e}function p(e,t){return i.TYPED_ARRAY_SUPPORT?(t.byteLength,e=i._augment(new Uint8Array(t))):e=f(e,new Uint8Array(t)),e}function m(e,t){var a=0|g(t.length);e=d(e,a);for(var n=0;a>n;n+=1)e[n]=255&t[n];return e}function h(e,t){var a,n=0;"Buffer"===t.type&&Y(t.data)&&(a=t.data,n=0|g(a.length)),e=d(e,n);for(var r=0;n>r;r+=1)e[r]=255&a[r];return e}function d(e,t){i.TYPED_ARRAY_SUPPORT?(e=i._augment(new Uint8Array(t)),e.__proto__=i.prototype):(e.length=t,e._isBuffer=!0);var a=0!==t&&t<=i.poolSize>>>1;return a&&(e.parent=Z),e}function g(e){if(e>=r())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r().toString(16)+" bytes");return 0|e}function y(e,t){if(!(this instanceof y))return new y(e,t);var a=new i(e,t);return delete a.parent,a}function w(e,t){"string"!=typeof e&&(e=""+e);var a=e.length;if(0===a)return 0;for(var n=!1;;)switch(t){case"ascii":case"binary":case"raw":case"raws":return a;case"utf8":case"utf-8":return $(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*a;case"hex":return a>>>1;case"base64":return G(e).length;default:if(n)return $(e).length;t=(""+t).toLowerCase(),n=!0}}function v(e,t,a){var n=!1;if(t=0|t,a=void 0===a||a===1/0?this.length:0|a,e||(e="utf8"),0>t&&(t=0),a>this.length&&(a=this.length),t>=a)return"";for(;;)switch(e){case"hex":return k(this,t,a);case"utf8":case"utf-8":return _(this,t,a);case"ascii":return z(this,t,a);case"binary":return F(this,t,a);case"base64":return C(this,t,a);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,a);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function b(e,t,a,n){a=Number(a)||0;var r=e.length-a;n?(n=Number(n),n>r&&(n=r)):n=r;var i=t.length;if(i%2!==0)throw new Error("Invalid hex string");n>i/2&&(n=i/2);for(var s=0;n>s;s++){var o=parseInt(t.substr(2*s,2),16);if(isNaN(o))throw new Error("Invalid hex string");e[a+s]=o}return s}function E(e,t,a,n){return q($(t,e.length-a),e,a,n)}function A(e,t,a,n){return q(H(t),e,a,n)}function D(e,t,a,n){return A(e,t,a,n)}function j(e,t,a,n){return q(G(t),e,a,n)}function x(e,t,a,n){return q(J(t,e.length-a),e,a,n)}function C(e,t,a){return 0===t&&a===e.length?W.fromByteArray(e):W.fromByteArray(e.slice(t,a))}function _(e,t,a){a=Math.min(e.length,a);for(var n=[],r=t;a>r;){var i=e[r],s=null,o=i>239?4:i>223?3:i>191?2:1;if(a>=r+o){var u,c,l,f;switch(o){case 1:128>i&&(s=i);break;case 2:u=e[r+1],128===(192&u)&&(f=(31&i)<<6|63&u,f>127&&(s=f));break;case 3:u=e[r+1],c=e[r+2],128===(192&u)&&128===(192&c)&&(f=(15&i)<<12|(63&u)<<6|63&c,f>2047&&(55296>f||f>57343)&&(s=f));break;case 4:u=e[r+1],c=e[r+2],l=e[r+3],128===(192&u)&&128===(192&c)&&128===(192&l)&&(f=(15&i)<<18|(63&u)<<12|(63&c)<<6|63&l,f>65535&&1114112>f&&(s=f))}}null===s?(s=65533,o=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),r+=o}return S(n)}function S(e){var t=e.length;if(X>=t)return String.fromCharCode.apply(String,e);for(var a="",n=0;t>n;)a+=String.fromCharCode.apply(String,e.slice(n,n+=X));return a}function z(e,t,a){var n="";a=Math.min(e.length,a);for(var r=t;a>r;r++)n+=String.fromCharCode(127&e[r]);return n}function F(e,t,a){var n="";a=Math.min(e.length,a);for(var r=t;a>r;r++)n+=String.fromCharCode(e[r]);return n}function k(e,t,a){var n=e.length;(!t||0>t)&&(t=0),(!a||0>a||a>n)&&(a=n);for(var r="",i=t;a>i;i++)r+=K(e[i]);return r}function R(e,t,a){for(var n=e.slice(t,a),r="",i=0;ie)throw new RangeError("offset is not uint");if(e+t>a)throw new RangeError("Trying to access beyond buffer length")}function M(e,t,a,n,r,s){if(!i.isBuffer(e))throw new TypeError("buffer must be a Buffer instance");if(t>r||s>t)throw new RangeError("value is out of bounds");if(a+n>e.length)throw new RangeError("index out of range")}function P(e,t,a,n){0>t&&(t=65535+t+1);for(var r=0,i=Math.min(e.length-a,2);i>r;r++)e[a+r]=(t&255<<8*(n?r:1-r))>>>8*(n?r:1-r)}function O(e,t,a,n){0>t&&(t=4294967295+t+1);for(var r=0,i=Math.min(e.length-a,4);i>r;r++)e[a+r]=t>>>8*(n?r:3-r)&255}function B(e,t,a,n,r,i){if(t>r||i>t)throw new RangeError("value is out of bounds");if(a+n>e.length)throw new RangeError("index out of range");if(0>a)throw new RangeError("index out of range")}function T(e,t,a,n,r){return r||B(e,t,a,4,3.4028234663852886e38,-3.4028234663852886e38),V.write(e,t,a,n,23,4),a+4}function L(e,t,a,n,r){return r||B(e,t,a,8,1.7976931348623157e308,-1.7976931348623157e308),V.write(e,t,a,n,52,8),a+8}function N(e){if(e=U(e).replace(ee,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function U(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function K(e){return 16>e?"0"+e.toString(16):e.toString(16)}function $(e,t){t=t||1/0;for(var a,n=e.length,r=null,i=[],s=0;n>s;s++){if(a=e.charCodeAt(s),a>55295&&57344>a){if(!r){if(a>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&i.push(239,191,189);continue}r=a;continue}if(56320>a){(t-=3)>-1&&i.push(239,191,189),r=a;continue}a=(r-55296<<10|a-56320)+65536}else r&&(t-=3)>-1&&i.push(239,191,189);if(r=null,128>a){if((t-=1)<0)break;i.push(a)}else if(2048>a){if((t-=2)<0)break;i.push(a>>6|192,63&a|128)}else if(65536>a){if((t-=3)<0)break;i.push(a>>12|224,a>>6&63|128,63&a|128)}else{if(!(1114112>a))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(a>>18|240,a>>12&63|128,a>>6&63|128,63&a|128)}}return i}function H(e){for(var t=[],a=0;a>8,r=a%256,i.push(r),i.push(n);return i}function G(e){return W.toByteArray(N(e))}function q(e,t,a,n){for(var r=0;n>r&&!(r+a>=t.length||r>=e.length);r++)t[r+a]=e[r];return r}var W=e("base64-js"),V=e("ieee754"),Y=e("isarray");a.Buffer=i,a.SlowBuffer=y,a.INSPECT_MAX_BYTES=50,i.poolSize=8192;var Z={};i.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:n(),i.TYPED_ARRAY_SUPPORT?(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array):(i.prototype.length=void 0,i.prototype.parent=void 0),i.isBuffer=function(e){return!(null==e||!e._isBuffer)},i.compare=function(e,t){if(!i.isBuffer(e)||!i.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var a=e.length,n=t.length,r=0,s=Math.min(a,n);s>r&&e[r]===t[r];)++r;return r!==s&&(a=e[r],n=t[r]),n>a?-1:a>n?1:0},i.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},i.concat=function(e,t){if(!Y(e))throw new TypeError("list argument must be an Array of Buffers.");if(0===e.length)return new i(0);var a;if(void 0===t)for(t=0,a=0;a0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},i.prototype.compare=function(e){if(!i.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?0:i.compare(this,e)},i.prototype.indexOf=function(e,t){function a(e,t,a){for(var n=-1,r=0;a+r2147483647?t=2147483647:-2147483648>t&&(t=-2147483648),t>>=0,0===this.length)return-1;if(t>=this.length)return-1;if(0>t&&(t=Math.max(this.length+t,0)),"string"==typeof e)return 0===e.length?-1:String.prototype.indexOf.call(this,e,t);if(i.isBuffer(e))return a(this,e,t);if("number"==typeof e)return i.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,t):a(this,[e],t);throw new TypeError("val must be string, number or Buffer"); +},i.prototype.get=function(e){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(e)},i.prototype.set=function(e,t){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(e,t)},i.prototype.write=function(e,t,a,n){if(void 0===t)n="utf8",a=this.length,t=0;else if(void 0===a&&"string"==typeof t)n=t,a=this.length,t=0;else if(isFinite(t))t=0|t,isFinite(a)?(a=0|a,void 0===n&&(n="utf8")):(n=a,a=void 0);else{var r=n;n=t,t=0|a,a=r}var i=this.length-t;if((void 0===a||a>i)&&(a=i),e.length>0&&(0>a||0>t)||t>this.length)throw new RangeError("attempt to write outside buffer bounds");n||(n="utf8");for(var s=!1;;)switch(n){case"hex":return b(this,e,t,a);case"utf8":case"utf-8":return E(this,e,t,a);case"ascii":return A(this,e,t,a);case"binary":return D(this,e,t,a);case"base64":return j(this,e,t,a);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,a);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var X=4096;i.prototype.slice=function(e,t){var a=this.length;e=~~e,t=void 0===t?a:~~t,0>e?(e+=a,0>e&&(e=0)):e>a&&(e=a),0>t?(t+=a,0>t&&(t=0)):t>a&&(t=a),e>t&&(t=e);var n;if(i.TYPED_ARRAY_SUPPORT)n=i._augment(this.subarray(e,t));else{var r=t-e;n=new i(r,void 0);for(var s=0;r>s;s++)n[s]=this[s+e]}return n.length&&(n.parent=this.parent||this),n},i.prototype.readUIntLE=function(e,t,a){e=0|e,t=0|t,a||I(e,t,this.length);for(var n=this[e],r=1,i=0;++i0&&(r*=256);)n+=this[e+--t]*r;return n},i.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},i.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},i.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},i.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},i.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},i.prototype.readIntLE=function(e,t,a){e=0|e,t=0|t,a||I(e,t,this.length);for(var n=this[e],r=1,i=0;++i=r&&(n-=Math.pow(2,8*t)),n},i.prototype.readIntBE=function(e,t,a){e=0|e,t=0|t,a||I(e,t,this.length);for(var n=t,r=1,i=this[e+--n];n>0&&(r*=256);)i+=this[e+--n]*r;return r*=128,i>=r&&(i-=Math.pow(2,8*t)),i},i.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},i.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var a=this[e]|this[e+1]<<8;return 32768&a?4294901760|a:a},i.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var a=this[e+1]|this[e]<<8;return 32768&a?4294901760|a:a},i.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},i.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},i.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),V.read(this,e,!0,23,4)},i.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),V.read(this,e,!1,23,4)},i.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),V.read(this,e,!0,52,8)},i.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),V.read(this,e,!1,52,8)},i.prototype.writeUIntLE=function(e,t,a,n){e=+e,t=0|t,a=0|a,n||M(this,e,t,a,Math.pow(2,8*a),0);var r=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+r]=e/i&255;return t+a},i.prototype.writeUInt8=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,1,255,0),i.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},i.prototype.writeUInt16LE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):P(this,e,t,!0),t+2},i.prototype.writeUInt16BE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):P(this,e,t,!1),t+2},i.prototype.writeUInt32LE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):O(this,e,t,!0),t+4},i.prototype.writeUInt32BE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},i.prototype.writeIntLE=function(e,t,a,n){if(e=+e,t=0|t,!n){var r=Math.pow(2,8*a-1);M(this,e,t,a,r-1,-r)}var i=0,s=1,o=0>e?1:0;for(this[t]=255&e;++i>0)-o&255;return t+a},i.prototype.writeIntBE=function(e,t,a,n){if(e=+e,t=0|t,!n){var r=Math.pow(2,8*a-1);M(this,e,t,a,r-1,-r)}var i=a-1,s=1,o=0>e?1:0;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=(e/s>>0)-o&255;return t+a},i.prototype.writeInt8=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,1,127,-128),i.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},i.prototype.writeInt16LE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):P(this,e,t,!0),t+2},i.prototype.writeInt16BE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):P(this,e,t,!1),t+2},i.prototype.writeInt32LE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):O(this,e,t,!0),t+4},i.prototype.writeInt32BE=function(e,t,a){return e=+e,t=0|t,a||M(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},i.prototype.writeFloatLE=function(e,t,a){return T(this,e,t,!0,a)},i.prototype.writeFloatBE=function(e,t,a){return T(this,e,t,!1,a)},i.prototype.writeDoubleLE=function(e,t,a){return L(this,e,t,!0,a)},i.prototype.writeDoubleBE=function(e,t,a){return L(this,e,t,!1,a)},i.prototype.copy=function(e,t,a,n){if(a||(a=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&a>n&&(n=a),n===a)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError("targetStart out of bounds");if(0>a||a>=this.length)throw new RangeError("sourceStart out of bounds");if(0>n)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-ta&&n>t)for(r=s-1;r>=0;r--)e[r+t]=this[r+a];else if(1e3>s||!i.TYPED_ARRAY_SUPPORT)for(r=0;s>r;r++)e[r+t]=this[r+a];else e._set(this.subarray(a,a+s),t);return s},i.prototype.fill=function(e,t,a){if(e||(e=0),t||(t=0),a||(a=this.length),t>a)throw new RangeError("end < start");if(a!==t&&0!==this.length){if(0>t||t>=this.length)throw new RangeError("start out of bounds");if(0>a||a>this.length)throw new RangeError("end out of bounds");var n;if("number"==typeof e)for(n=t;a>n;n++)this[n]=e;else{var r=$(e.toString()),i=r.length;for(n=t;a>n;n++)this[n]=r[n%i]}return this}},i.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(i.TYPED_ARRAY_SUPPORT)return new i(this).buffer;for(var e=new Uint8Array(this.length),t=0,a=e.length;a>t;t+=1)e[t]=this[t];return e.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser")};var Q=i.prototype;i._augment=function(e){return e.constructor=i,e._isBuffer=!0,e._set=e.set,e.get=Q.get,e.set=Q.set,e.write=Q.write,e.toString=Q.toString,e.toLocaleString=Q.toString,e.toJSON=Q.toJSON,e.equals=Q.equals,e.compare=Q.compare,e.indexOf=Q.indexOf,e.copy=Q.copy,e.slice=Q.slice,e.readUIntLE=Q.readUIntLE,e.readUIntBE=Q.readUIntBE,e.readUInt8=Q.readUInt8,e.readUInt16LE=Q.readUInt16LE,e.readUInt16BE=Q.readUInt16BE,e.readUInt32LE=Q.readUInt32LE,e.readUInt32BE=Q.readUInt32BE,e.readIntLE=Q.readIntLE,e.readIntBE=Q.readIntBE,e.readInt8=Q.readInt8,e.readInt16LE=Q.readInt16LE,e.readInt16BE=Q.readInt16BE,e.readInt32LE=Q.readInt32LE,e.readInt32BE=Q.readInt32BE,e.readFloatLE=Q.readFloatLE,e.readFloatBE=Q.readFloatBE,e.readDoubleLE=Q.readDoubleLE,e.readDoubleBE=Q.readDoubleBE,e.writeUInt8=Q.writeUInt8,e.writeUIntLE=Q.writeUIntLE,e.writeUIntBE=Q.writeUIntBE,e.writeUInt16LE=Q.writeUInt16LE,e.writeUInt16BE=Q.writeUInt16BE,e.writeUInt32LE=Q.writeUInt32LE,e.writeUInt32BE=Q.writeUInt32BE,e.writeIntLE=Q.writeIntLE,e.writeIntBE=Q.writeIntBE,e.writeInt8=Q.writeInt8,e.writeInt16LE=Q.writeInt16LE,e.writeInt16BE=Q.writeInt16BE,e.writeInt32LE=Q.writeInt32LE,e.writeInt32BE=Q.writeInt32BE,e.writeFloatLE=Q.writeFloatLE,e.writeFloatBE=Q.writeFloatBE,e.writeDoubleLE=Q.writeDoubleLE,e.writeDoubleBE=Q.writeDoubleBE,e.fill=Q.fill,e.inspect=Q.inspect,e.toArrayBuffer=Q.toArrayBuffer,e};var ee=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":14,ieee754:135,isarray:17}],17:[function(e,t,a){var n={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},{}],18:[function(t,a,n){(function(t){!function(){function r(e){if(!(this instanceof r))return null==e?new r:new r(e);if("function"==typeof e)return this.random=e,this;arguments.length&&(this.seed=0);for(var t=0;tr;r++)a=n[r],t[a]=e[a]||t[a]}function c(e,t){for(var a=0,n=e.length;n>a;a++)t[a]=e[a]}function l(e,t){var a=Array.isArray(e),n=t||(a?new Array(e.length):{});return a?c(e,n):u(e,n),n}var f=9007199254740992,p=-f,m="0123456789",h="abcdefghijklmnopqrstuvwxyz",d=h.toUpperCase(),g=m+"abcdef",y=Array.prototype.slice;r.prototype.VERSION="0.8.0";var w=function(){throw new Error("No Base64 encoder available.")};!function(){"function"==typeof btoa?w=btoa:"function"==typeof t&&(w=function(e){return new t(e).toString("base64")})}(),r.prototype.bool=function(e){return e=i(e,{likelihood:50}),s(e.likelihood<0||e.likelihood>100,"Chance: Likelihood accepts values from 0 to 100."),100*this.random()n,"Chance: Max specified is out of range with fixed. Max should be, at most, "+n),e=i(e,{min:r,max:n}),t=this.integer({min:e.min*a,max:e.max*a});var o=(t/a).toFixed(e.fixed);return parseFloat(o)},r.prototype.integer=function(e){return e=i(e,{min:p,max:f}),s(e.min>e.max,"Chance: Min cannot be greater than Max."),Math.floor(this.random()*(e.max-e.min+1)+e.min)},r.prototype.natural=function(e){return e=i(e,{min:0,max:f}),s(e.min<0,"Chance: Min cannot be less than zero."),this.integer(e)},r.prototype.string=function(e){e=i(e,{length:this.natural({min:5,max:20})}),s(e.length<0,"Chance: Length cannot be less than zero.");var t=e.length,a=this.n(this.character,t,e);return a.join("")},r.prototype.capitalize=function(e){return e.charAt(0).toUpperCase()+e.substr(1)},r.prototype.mixin=function(e){for(var t in e)r.prototype[t]=e[t];return this},r.prototype.unique=function(e,t,a){s("function"!=typeof e,"Chance: The first argument must be a function."),a=i(a,{comparator:function(e,t){return-1!==e.indexOf(t)}});for(var n,r=[],o=0,u=50*t,c=y.call(arguments,2);r.lengthu)throw new RangeError("Chance: num is likely too large for sample set");return r},r.prototype.n=function(e,t){s("function"!=typeof e,"Chance: The first argument must be a function."),"undefined"==typeof t&&(t=1);var a=t,n=[],r=y.call(arguments,2);for(a=Math.max(0,a),null;a--;null)n.push(e.apply(this,r));return n},r.prototype.pad=function(e,t,a){return a=a||"0",e+="",e.length>=t?e:new Array(t-e.length+1).join(a)+e},r.prototype.pick=function(e,t){if(0===e.length)throw new RangeError("Chance: Cannot pick() from an empty array");return t&&1!==t?this.shuffle(e).slice(0,t):e[this.natural({max:e.length-1})]},r.prototype.shuffle=function(e){for(var t=e.slice(0),a=[],n=0,r=Number(t.length),i=0;r>i;i++)n=this.natural({max:t.length-1}),a[i]=t[n],t.splice(n,1);return a},r.prototype.weighted=function(e,t){if(e.length!==t.length)throw new RangeError("Chance: length of array and weights must match");for(var a=t.length-1;a>=0;--a)t[a]<=0&&(e.splice(a,1),t.splice(a,1));if(t.some(function(e){return 1>e})){var n=t.reduce(function(e,t){return e>t?t:e},t[0]),r=1/n;t=t.map(function(e){return e*r})}var i,s=t.reduce(function(e,t){return e+t},0),o=this.natural({min:1,max:s}),u=0;return t.some(function(t,a){return u+t>=o?(i=e[a],!0):(u+=t,!1)}),i},r.prototype.paragraph=function(e){e=i(e);var t=e.sentences||this.natural({min:3,max:7}),a=this.n(this.sentence,t);return a.join(" ")},r.prototype.sentence=function(e){e=i(e);var t,a=e.words||this.natural({min:12,max:18}),n=e.punctuation,r=this.n(this.word,a);return t=r.join(" "),t=this.capitalize(t),n===!1||/^[\.\?;!:]$/.test(n)||(n="."),n&&(t+=n),t},r.prototype.syllable=function(e){e=i(e);for(var t,a=e.length||this.natural({min:2,max:3}),n="bcdfghjklmnprstvwz",r="aeiou",s=n+r,o="",u=0;a>u;u++)t=0===u?this.character({pool:s}):-1===n.indexOf(t)?this.character({pool:n}):this.character({pool:r}),o+=t;return o},r.prototype.word=function(e){e=i(e),s(e.syllables&&e.length,"Chance: Cannot specify both syllables AND length.");var t=e.syllables||this.natural({min:1,max:3}),a="";if(e.length){do a+=this.syllable();while(a.lengthn;n++)a+=this.syllable();return a},r.prototype.age=function(e){e=i(e);var t;switch(e.type){case"child":t={min:1,max:12};break;case"teen":t={min:13,max:19};break;case"adult":t={min:18,max:65};break;case"senior":t={min:65,max:100};break;case"all":t={min:1,max:100};break;default:t={min:18,max:65}}return this.natural(t)},r.prototype.birthday=function(e){return e=i(e,{year:(new Date).getFullYear()-this.age(e)}),this.date(e)},r.prototype.cpf=function(){var e=this.n(this.natural,9,{max:9}),t=2*e[8]+3*e[7]+4*e[6]+5*e[5]+6*e[4]+7*e[3]+8*e[2]+9*e[1]+10*e[0];t=11-t%11,t>=10&&(t=0);var a=2*t+3*e[8]+4*e[7]+5*e[6]+6*e[5]+7*e[4]+8*e[3]+9*e[2]+10*e[1]+11*e[0];return a=11-a%11,a>=10&&(a=0),""+e[0]+e[1]+e[2]+"."+e[3]+e[4]+e[5]+"."+e[6]+e[7]+e[8]+"-"+t+a},r.prototype.first=function(e){return e=i(e,{gender:this.gender()}),this.pick(this.get("firstNames")[e.gender.toLowerCase()])},r.prototype.gender=function(){return this.pick(["Male","Female"])},r.prototype.last=function(){return this.pick(this.get("lastNames"))},r.prototype.israelId=function(){for(var e=this.string({pool:"0123456789",length:8}),t=0,a=0;a0?"."+this.pick(e.extensions):"",a=e.domain_prefix?e.domain_prefix+"."+e.domain:e.domain;return e.protocol+"://"+a+"/"+e.path+t},r.prototype.address=function(e){return e=i(e),this.natural({min:5,max:2e3})+" "+this.street(e)},r.prototype.altitude=function(e){return e=i(e,{fixed:5,min:0,max:8848}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},r.prototype.areacode=function(e){e=i(e,{parens:!0});var t=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:8}).toString()+this.natural({min:0,max:9}).toString();return e.parens?"("+t+")":t},r.prototype.city=function(){return this.capitalize(this.word({syllables:3}))},r.prototype.coordinates=function(e){return this.latitude(e)+", "+this.longitude(e)},r.prototype.countries=function(){return this.get("countries")},r.prototype.country=function(e){e=i(e);var t=this.pick(this.countries());return e.full?t.name:t.abbreviation},r.prototype.depth=function(e){return e=i(e,{fixed:5,min:-10994,max:0}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},r.prototype.geohash=function(e){return e=i(e,{length:7}),this.string({length:e.length,pool:"0123456789bcdefghjkmnpqrstuvwxyz"})},r.prototype.geojson=function(e){return this.latitude(e)+", "+this.longitude(e)+", "+this.altitude(e)},r.prototype.latitude=function(e){return e=i(e,{fixed:5,min:-90,max:90}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},r.prototype.longitude=function(e){return e=i(e,{fixed:5,min:-180,max:180}),this.floating({min:e.min,max:e.max,fixed:e.fixed})},r.prototype.phone=function(e){var t,a=this,n=function(e){var t=[];return e.sections.forEach(function(e){t.push(a.string({pool:"0123456789",length:e}))}),e.area+t.join(" ")};e=i(e,{formatted:!0,country:"us",mobile:!1}),e.formatted||(e.parens=!1);var r;switch(e.country){case"fr":e.mobile?(t=this.pick(["06","07"])+a.string({pool:"0123456789",length:8}),r=e.formatted?t.match(/../g).join(" "):t):(t=this.pick(["01"+this.pick(["30","34","39","40","41","42","43","44","45","46","47","48","49","53","55","56","58","60","64","69","70","72","73","74","75","76","77","78","79","80","81","82","83"])+a.string({pool:"0123456789",length:6}),"02"+this.pick(["14","18","22","23","28","29","30","31","32","33","34","35","36","37","38","40","41","43","44","45","46","47","48","49","50","51","52","53","54","56","57","61","62","69","72","76","77","78","85","90","96","97","98","99"])+a.string({pool:"0123456789",length:6}),"03"+this.pick(["10","20","21","22","23","24","25","26","27","28","29","39","44","45","51","52","54","55","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","80","81","82","83","84","85","86","87","88","89","90"])+a.string({pool:"0123456789",length:6}),"04"+this.pick(["11","13","15","20","22","26","27","30","32","34","37","42","43","44","50","56","57","63","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","88","89","90","91","92","93","94","95","97","98"])+a.string({pool:"0123456789",length:6}),"05"+this.pick(["08","16","17","19","24","31","32","33","34","35","40","45","46","47","49","53","55","56","57","58","59","61","62","63","64","65","67","79","81","82","86","87","90","94"])+a.string({pool:"0123456789",length:6}),"09"+a.string({pool:"0123456789",length:8})]),r=e.formatted?t.match(/../g).join(" "):t);break;case"uk":e.mobile?(t=this.pick([{area:"07"+this.pick(["4","5","7","8","9"]),sections:[2,6]},{area:"07624 ",sections:[6]}]),r=e.formatted?n(t):n(t).replace(" ","")):(t=this.pick([{area:"01"+this.character({pool:"234569"})+"1 ",sections:[3,4]},{area:"020 "+this.character({pool:"378"}),sections:[3,4]},{area:"023 "+this.character({pool:"89"}),sections:[3,4]},{area:"024 7",sections:[3,4]},{area:"028 "+this.pick(["25","28","37","71","82","90","92","95"]),sections:[2,4]},{area:"012"+this.pick(["04","08","54","76","97","98"])+" ",sections:[5]},{area:"013"+this.pick(["63","64","84","86"])+" ",sections:[5]},{area:"014"+this.pick(["04","20","60","61","80","88"])+" ",sections:[5]},{area:"015"+this.pick(["24","27","62","66"])+" ",sections:[5]},{area:"016"+this.pick(["06","29","35","47","59","95"])+" ",sections:[5]},{area:"017"+this.pick(["26","44","50","68"])+" ",sections:[5]},{area:"018"+this.pick(["27","37","84","97"])+" ",sections:[5]},{area:"019"+this.pick(["00","05","35","46","49","63","95"])+" ",sections:[5]}]),r=e.formatted?n(t):n(t).replace(" ","","g"));break;case"us":var s=this.areacode(e).toString(),o=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:9}).toString()+this.natural({min:0,max:9}).toString(),u=this.natural({min:1e3,max:9999}).toString();r=e.formatted?s+" "+o+"-"+u:s+o+u}return r},r.prototype.postal=function(){var e=this.character({pool:"XVTSRPNKLMHJGECBA"}),t=e+this.natural({max:9})+this.character({alpha:!0,casing:"upper"}),a=this.natural({max:9})+this.character({alpha:!0,casing:"upper"})+this.natural({max:9});return t+" "+a},r.prototype.provinces=function(){return this.get("provinces")},r.prototype.province=function(e){return e&&e.full?this.pick(this.provinces()).name:this.pick(this.provinces()).abbreviation},r.prototype.state=function(e){return e&&e.full?this.pick(this.states(e)).name:this.pick(this.states(e)).abbreviation},r.prototype.states=function(e){e=i(e,{us_states_and_dc:!0});var t,a=this.get("us_states_and_dc"),n=this.get("territories"),r=this.get("armed_forces");return t=[],e.us_states_and_dc&&(t=t.concat(a)),e.territories&&(t=t.concat(n)),e.armed_forces&&(t=t.concat(r)),t},r.prototype.street=function(e){e=i(e);var t=this.word({syllables:2});return t=this.capitalize(t),t+=" ",t+=e.short_suffix?this.street_suffix().abbreviation:this.street_suffix().name},r.prototype.street_suffix=function(){return this.pick(this.street_suffixes())},r.prototype.street_suffixes=function(){return this.get("street_suffixes")},r.prototype.zip=function(e){var t=this.n(this.natural,5,{max:9});return e&&e.plusfour===!0&&(t.push("-"),t=t.concat(this.n(this.natural,4,{max:9}))),t.join("")},r.prototype.ampm=function(){return this.bool()?"am":"pm"},r.prototype.date=function(e){var t,a;if(e&&(e.min||e.max)){e=i(e,{american:!0,string:!1});var n="undefined"!=typeof e.min?e.min.getTime():1,r="undefined"!=typeof e.max?e.max.getTime():864e13;a=new Date(this.natural({min:n,max:r}))}else{var s=this.month({raw:!0}),o=s.days;e&&e.month&&(o=this.get("months")[(e.month%12+12)%12].days),e=i(e,{year:parseInt(this.year(),10),month:s.numeric-1,day:this.natural({min:1,max:o}),hour:this.hour(),minute:this.minute(),second:this.second(),millisecond:this.millisecond(),american:!0,string:!1}),a=new Date(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond)}return t=e.american?a.getMonth()+1+"/"+a.getDate()+"/"+a.getFullYear():a.getDate()+"/"+(a.getMonth()+1)+"/"+a.getFullYear(),e.string?t:a},r.prototype.hammertime=function(e){return this.date(e).getTime()},r.prototype.hour=function(e){return e=i(e,{min:1,max:e&&e.twentyfour?24:12}),s(e.min<1,"Chance: Min cannot be less than 1."),s(e.twentyfour&&e.max>24,"Chance: Max cannot be greater than 24 for twentyfour option."),s(!e.twentyfour&&e.max>12,"Chance: Max cannot be greater than 12."),s(e.min>e.max,"Chance: Min cannot be greater than Max."),this.natural({min:e.min,max:e.max})},r.prototype.millisecond=function(){return this.natural({max:999})},r.prototype.minute=r.prototype.second=function(e){return e=i(e,{min:0,max:59}),s(e.min<0,"Chance: Min cannot be less than 0."),s(e.max>59,"Chance: Max cannot be greater than 59."),s(e.min>e.max,"Chance: Min cannot be greater than Max."),this.natural({min:e.min,max:e.max})},r.prototype.month=function(e){e=i(e,{min:1,max:12}),s(e.min<1,"Chance: Min cannot be less than 1."),s(e.max>12,"Chance: Max cannot be greater than 12."),s(e.min>e.max,"Chance: Min cannot be greater than Max.");var t=this.pick(this.months().slice(e.min-1,e.max));return e.raw?t:t.name},r.prototype.months=function(){return this.get("months")},r.prototype.second=function(){return this.natural({max:59})},r.prototype.timestamp=function(){return this.natural({min:1,max:parseInt((new Date).getTime()/1e3,10)})},r.prototype.year=function(e){return e=i(e,{min:(new Date).getFullYear()}),e.max="undefined"!=typeof e.max?e.max:e.min+100,this.natural(e).toString()},r.prototype.cc=function(e){e=i(e);var t,a,n;return t=e.type?this.cc_type({name:e.type,raw:!0}):this.cc_type({raw:!0}),a=t.prefix.split(""),n=t.length-t.prefix.length-1,a=a.concat(this.n(this.integer,n,{min:0,max:9})),a.push(this.luhn_calculate(a.join(""))),a.join("")},r.prototype.cc_types=function(){return this.get("cc_types")},r.prototype.cc_type=function(e){e=i(e);var t=this.cc_types(),a=null;if(e.name){for(var n=0;nt?"-$"+t.replace("-",""):"$"+t},r.prototype.exp=function(e){e=i(e);var t={};return t.year=this.exp_year(),t.year===(new Date).getFullYear().toString()?t.month=this.exp_month({future:!0}):t.month=this.exp_month(),e.raw?t:t.month+"/"+t.year},r.prototype.exp_month=function(e){e=i(e);var t,a,n=(new Date).getMonth()+1;if(e.future){do t=this.month({raw:!0}).numeric,a=parseInt(t,10);while(n>=a)}else t=this.month({raw:!0}).numeric;return t},r.prototype.exp_year=function(){return this.year({max:(new Date).getFullYear()+10})},r.prototype.pl_pesel=function(){for(var e=this.natural({min:1,max:9999999999}),t=this.pad(e,10).split(""),a=0;a0;r--)n[r-1]=this.natural({min:1,max:a[1]});return"undefined"!=typeof t.sum&&t.sum?n.reduce(function(e,t){return e+t}):n}throw new RangeError("A type of die roll must be included")},r.prototype.guid=function(e){e=i(e,{version:5});var t="abcdef1234567890",a="ab89",n=this.string({pool:t,length:8})+"-"+this.string({pool:t,length:4})+"-"+e.version+this.string({pool:t,length:3})+"-"+this.string({pool:a,length:1})+this.string({pool:t,length:3})+"-"+this.string({pool:t,length:12});return n},r.prototype.hash=function(e){e=i(e,{length:40,casing:"lower"});var t="upper"===e.casing?g.toUpperCase():g;return this.string({pool:t,length:e.length})},r.prototype.luhn_check=function(e){var t=e.toString(),a=+t.substring(t.length-1);return a===this.luhn_calculate(+t.substring(0,t.length-1))},r.prototype.luhn_calculate=function(e){for(var t,a=e.toString().split("").reverse(),n=0,r=0,i=a.length;i>r;++r)t=+a[r],r%2===0&&(t*=2,t>9&&(t-=9)),n+=t;return 9*n%10},r.prototype.md5=function(e){var t={str:"",key:null,raw:!1};if(e)if("string"==typeof e)t.str=e,e={};else{if("object"!=typeof e)return null;if("Array"===e.constructor)return null}else t.str=this.string(),e={};if(t=i(e,t),!t.str)throw new Error("A parameter is required to return an md5 hash.");return this.bimd5.md5(t.str,t.key,t.raw)};var v={firstNames:{male:["James","John","Robert","Michael","William","David","Richard","Joseph","Charles","Thomas","Christopher","Daniel","Matthew","George","Donald","Anthony","Paul","Mark","Edward","Steven","Kenneth","Andrew","Brian","Joshua","Kevin","Ronald","Timothy","Jason","Jeffrey","Frank","Gary","Ryan","Nicholas","Eric","Stephen","Jacob","Larry","Jonathan","Scott","Raymond","Justin","Brandon","Gregory","Samuel","Benjamin","Patrick","Jack","Henry","Walter","Dennis","Jerry","Alexander","Peter","Tyler","Douglas","Harold","Aaron","Jose","Adam","Arthur","Zachary","Carl","Nathan","Albert","Kyle","Lawrence","Joe","Willie","Gerald","Roger","Keith","Jeremy","Terry","Harry","Ralph","Sean","Jesse","Roy","Louis","Billy","Austin","Bruce","Eugene","Christian","Bryan","Wayne","Russell","Howard","Fred","Ethan","Jordan","Philip","Alan","Juan","Randy","Vincent","Bobby","Dylan","Johnny","Phillip","Victor","Clarence","Ernest","Martin","Craig","Stanley","Shawn","Travis","Bradley","Leonard","Earl","Gabriel","Jimmy","Francis","Todd","Noah","Danny","Dale","Cody","Carlos","Allen","Frederick","Logan","Curtis","Alex","Joel","Luis","Norman","Marvin","Glenn","Tony","Nathaniel","Rodney","Melvin","Alfred","Steve","Cameron","Chad","Edwin","Caleb","Evan","Antonio","Lee","Herbert","Jeffery","Isaac","Derek","Ricky","Marcus","Theodore","Elijah","Luke","Jesus","Eddie","Troy","Mike","Dustin","Ray","Adrian","Bernard","Leroy","Angel","Randall","Wesley","Ian","Jared","Mason","Hunter","Calvin","Oscar","Clifford","Jay","Shane","Ronnie","Barry","Lucas","Corey","Manuel","Leo","Tommy","Warren","Jackson","Isaiah","Connor","Don","Dean","Jon","Julian","Miguel","Bill","Lloyd","Charlie","Mitchell","Leon","Jerome","Darrell","Jeremiah","Alvin","Brett","Seth","Floyd","Jim","Blake","Micheal","Gordon","Trevor","Lewis","Erik","Edgar","Vernon","Devin","Gavin","Jayden","Chris","Clyde","Tom","Derrick","Mario","Brent","Marc","Herman","Chase","Dominic","Ricardo","Franklin","Maurice","Max","Aiden","Owen","Lester","Gilbert","Elmer","Gene","Francisco","Glen","Cory","Garrett","Clayton","Sam","Jorge","Chester","Alejandro","Jeff","Harvey","Milton","Cole","Ivan","Andre","Duane","Landon"],female:["Mary","Emma","Elizabeth","Minnie","Margaret","Ida","Alice","Bertha","Sarah","Annie","Clara","Ella","Florence","Cora","Martha","Laura","Nellie","Grace","Carrie","Maude","Mabel","Bessie","Jennie","Gertrude","Julia","Hattie","Edith","Mattie","Rose","Catherine","Lillian","Ada","Lillie","Helen","Jessie","Louise","Ethel","Lula","Myrtle","Eva","Frances","Lena","Lucy","Edna","Maggie","Pearl","Daisy","Fannie","Josephine","Dora","Rosa","Katherine","Agnes","Marie","Nora","May","Mamie","Blanche","Stella","Ellen","Nancy","Effie","Sallie","Nettie","Della","Lizzie","Flora","Susie","Maud","Mae","Etta","Harriet","Sadie","Caroline","Katie","Lydia","Elsie","Kate","Susan","Mollie","Alma","Addie","Georgia","Eliza","Lulu","Nannie","Lottie","Amanda","Belle","Charlotte","Rebecca","Ruth","Viola","Olive","Amelia","Hannah","Jane","Virginia","Emily","Matilda","Irene","Kathryn","Esther","Willie","Henrietta","Ollie","Amy","Rachel","Sara","Estella","Theresa","Augusta","Ora","Pauline","Josie","Lola","Sophia","Leona","Anne","Mildred","Ann","Beulah","Callie","Lou","Delia","Eleanor","Barbara","Iva","Louisa","Maria","Mayme","Evelyn","Estelle","Nina","Betty","Marion","Bettie","Dorothy","Luella","Inez","Lela","Rosie","Allie","Millie","Janie","Cornelia","Victoria","Ruby","Winifred","Alta","Celia","Christine","Beatrice","Birdie","Harriett","Mable","Myra","Sophie","Tillie","Isabel","Sylvia","Carolyn","Isabelle","Leila","Sally","Ina","Essie","Bertie","Nell","Alberta","Katharine","Lora","Rena","Mina","Rhoda","Mathilda","Abbie","Eula","Dollie","Hettie","Eunice","Fanny","Ola","Lenora","Adelaide","Christina","Lelia","Nelle","Sue","Johanna","Lilly","Lucinda","Minerva","Lettie","Roxie","Cynthia","Helena","Hilda","Hulda","Bernice","Genevieve","Jean","Cordelia","Marian","Francis","Jeanette","Adeline","Gussie","Leah","Lois","Lura","Mittie","Hallie","Isabella","Olga","Phoebe","Teresa","Hester","Lida","Lina","Winnie","Claudia","Marguerite","Vera","Cecelia","Bess","Emilie","John","Rosetta","Verna","Myrtie","Cecilia","Elva","Olivia","Ophelia","Georgie","Elnora","Violet","Adele","Lily","Linnie","Loretta","Madge","Polly","Virgie","Eugenia","Lucile","Lucille","Mabelle","Rosalie"]},lastNames:["Smith","Johnson","Williams","Jones","Brown","Davis","Miller","Wilson","Moore","Taylor","Anderson","Thomas","Jackson","White","Harris","Martin","Thompson","Garcia","Martinez","Robinson","Clark","Rodriguez","Lewis","Lee","Walker","Hall","Allen","Young","Hernandez","King","Wright","Lopez","Hill","Scott","Green","Adams","Baker","Gonzalez","Nelson","Carter","Mitchell","Perez","Roberts","Turner","Phillips","Campbell","Parker","Evans","Edwards","Collins","Stewart","Sanchez","Morris","Rogers","Reed","Cook","Morgan","Bell","Murphy","Bailey","Rivera","Cooper","Richardson","Cox","Howard","Ward","Torres","Peterson","Gray","Ramirez","James","Watson","Brooks","Kelly","Sanders","Price","Bennett","Wood","Barnes","Ross","Henderson","Coleman","Jenkins","Perry","Powell","Long","Patterson","Hughes","Flores","Washington","Butler","Simmons","Foster","Gonzales","Bryant","Alexander","Russell","Griffin","Diaz","Hayes","Myers","Ford","Hamilton","Graham","Sullivan","Wallace","Woods","Cole","West","Jordan","Owens","Reynolds","Fisher","Ellis","Harrison","Gibson","McDonald","Cruz","Marshall","Ortiz","Gomez","Murray","Freeman","Wells","Webb","Simpson","Stevens","Tucker","Porter","Hunter","Hicks","Crawford","Henry","Boyd","Mason","Morales","Kennedy","Warren","Dixon","Ramos","Reyes","Burns","Gordon","Shaw","Holmes","Rice","Robertson","Hunt","Black","Daniels","Palmer","Mills","Nichols","Grant","Knight","Ferguson","Rose","Stone","Hawkins","Dunn","Perkins","Hudson","Spencer","Gardner","Stephens","Payne","Pierce","Berry","Matthews","Arnold","Wagner","Willis","Ray","Watkins","Olson","Carroll","Duncan","Snyder","Hart","Cunningham","Bradley","Lane","Andrews","Ruiz","Harper","Fox","Riley","Armstrong","Carpenter","Weaver","Greene","Lawrence","Elliott","Chavez","Sims","Austin","Peters","Kelley","Franklin","Lawson","Fields","Gutierrez","Ryan","Schmidt","Carr","Vasquez","Castillo","Wheeler","Chapman","Oliver","Montgomery","Richards","Williamson","Johnston","Banks","Meyer","Bishop","McCoy","Howell","Alvarez","Morrison","Hansen","Fernandez","Garza","Harvey","Little","Burton","Stanley","Nguyen","George","Jacobs","Reid","Kim","Fuller","Lynch","Dean","Gilbert","Garrett","Romero","Welch","Larson","Frazier","Burke","Hanson","Day","Mendoza","Moreno","Bowman","Medina","Fowler","Brewer","Hoffman","Carlson","Silva","Pearson","Holland","Douglas","Fleming","Jensen","Vargas","Byrd","Davidson","Hopkins","May","Terry","Herrera","Wade","Soto","Walters","Curtis","Neal","Caldwell","Lowe","Jennings","Barnett","Graves","Jimenez","Horton","Shelton","Barrett","Obrien","Castro","Sutton","Gregory","McKinney","Lucas","Miles","Craig","Rodriquez","Chambers","Holt","Lambert","Fletcher","Watts","Bates","Hale","Rhodes","Pena","Beck","Newman","Haynes","McDaniel","Mendez","Bush","Vaughn","Parks","Dawson","Santiago","Norris","Hardy","Love","Steele","Curry","Powers","Schultz","Barker","Guzman","Page","Munoz","Ball","Keller","Chandler","Weber","Leonard","Walsh","Lyons","Ramsey","Wolfe","Schneider","Mullins","Benson","Sharp","Bowen","Daniel","Barber","Cummings","Hines","Baldwin","Griffith","Valdez","Hubbard","Salazar","Reeves","Warner","Stevenson","Burgess","Santos","Tate","Cross","Garner","Mann","Mack","Moss","Thornton","Dennis","McGee","Farmer","Delgado","Aguilar","Vega","Glover","Manning","Cohen","Harmon","Rodgers","Robbins","Newton","Todd","Blair","Higgins","Ingram","Reese","Cannon","Strickland","Townsend","Potter","Goodwin","Walton","Rowe","Hampton","Ortega","Patton","Swanson","Joseph","Francis","Goodman","Maldonado","Yates","Becker","Erickson","Hodges","Rios","Conner","Adkins","Webster","Norman","Malone","Hammond","Flowers","Cobb","Moody","Quinn","Blake","Maxwell","Pope","Floyd","Osborne","Paul","McCarthy","Guerrero","Lindsey","Estrada","Sandoval","Gibbs","Tyler","Gross","Fitzgerald","Stokes","Doyle","Sherman","Saunders","Wise","Colon","Gill","Alvarado","Greer","Padilla","Simon","Waters","Nunez","Ballard","Schwartz","McBride","Houston","Christensen","Klein","Pratt","Briggs","Parsons","McLaughlin","Zimmerman","French","Buchanan","Moran","Copeland","Roy","Pittman","Brady","McCormick","Holloway","Brock","Poole","Frank","Logan","Owen","Bass","Marsh","Drake","Wong","Jefferson","Park","Morton","Abbott","Sparks","Patrick","Norton","Huff","Clayton","Massey","Lloyd","Figueroa","Carson","Bowers","Roberson","Barton","Tran","Lamb","Harrington","Casey","Boone","Cortez","Clarke","Mathis","Singleton","Wilkins","Cain","Bryan","Underwood","Hogan","McKenzie","Collier","Luna","Phelps","McGuire","Allison","Bridges","Wilkerson","Nash","Summers","Atkins"],countries:[{name:"Afghanistan",abbreviation:"AF"},{name:"Albania",abbreviation:"AL"},{name:"Algeria",abbreviation:"DZ"},{name:"American Samoa",abbreviation:"AS"},{name:"Andorra",abbreviation:"AD"},{name:"Angola",abbreviation:"AO"},{name:"Anguilla",abbreviation:"AI"},{name:"Antarctica",abbreviation:"AQ"},{name:"Antigua and Barbuda",abbreviation:"AG"},{name:"Argentina",abbreviation:"AR"},{name:"Armenia",abbreviation:"AM"},{name:"Aruba",abbreviation:"AW"},{name:"Australia",abbreviation:"AU"},{name:"Austria",abbreviation:"AT"},{name:"Azerbaijan",abbreviation:"AZ"},{name:"Bahamas",abbreviation:"BS"},{name:"Bahrain",abbreviation:"BH"},{name:"Bangladesh",abbreviation:"BD"},{name:"Barbados",abbreviation:"BB"},{name:"Belarus",abbreviation:"BY"},{name:"Belgium",abbreviation:"BE"},{name:"Belize",abbreviation:"BZ"},{name:"Benin",abbreviation:"BJ"},{name:"Bermuda",abbreviation:"BM"},{name:"Bhutan",abbreviation:"BT"},{name:"Bolivia",abbreviation:"BO"},{name:"Bosnia and Herzegovina",abbreviation:"BA"},{name:"Botswana",abbreviation:"BW"},{name:"Bouvet Island",abbreviation:"BV"},{name:"Brazil",abbreviation:"BR"},{name:"British Antarctic Territory",abbreviation:"BQ"},{name:"British Indian Ocean Territory",abbreviation:"IO"},{name:"British Virgin Islands",abbreviation:"VG"},{name:"Brunei",abbreviation:"BN"},{name:"Bulgaria",abbreviation:"BG"},{name:"Burkina Faso",abbreviation:"BF"},{name:"Burundi",abbreviation:"BI"},{name:"Cambodia",abbreviation:"KH"},{name:"Cameroon",abbreviation:"CM"},{name:"Canada",abbreviation:"CA"},{name:"Canton and Enderbury Islands",abbreviation:"CT"},{name:"Cape Verde",abbreviation:"CV"},{name:"Cayman Islands",abbreviation:"KY"},{name:"Central African Republic",abbreviation:"CF"},{name:"Chad",abbreviation:"TD"},{name:"Chile",abbreviation:"CL"},{name:"China",abbreviation:"CN"},{name:"Christmas Island",abbreviation:"CX"},{name:"Cocos [Keeling] Islands",abbreviation:"CC"},{name:"Colombia",abbreviation:"CO"},{name:"Comoros",abbreviation:"KM"},{name:"Congo - Brazzaville",abbreviation:"CG"},{name:"Congo - Kinshasa",abbreviation:"CD"},{name:"Cook Islands",abbreviation:"CK"},{name:"Costa Rica",abbreviation:"CR"},{name:"Croatia",abbreviation:"HR"},{name:"Cuba",abbreviation:"CU"},{name:"Cyprus",abbreviation:"CY"},{name:"Czech Republic",abbreviation:"CZ"},{name:"Côte d’Ivoire",abbreviation:"CI"},{name:"Denmark",abbreviation:"DK"},{name:"Djibouti",abbreviation:"DJ"},{name:"Dominica",abbreviation:"DM"},{name:"Dominican Republic",abbreviation:"DO"},{name:"Dronning Maud Land",abbreviation:"NQ"},{name:"East Germany",abbreviation:"DD"},{name:"Ecuador",abbreviation:"EC"},{name:"Egypt",abbreviation:"EG"},{name:"El Salvador",abbreviation:"SV"},{name:"Equatorial Guinea",abbreviation:"GQ"},{name:"Eritrea",abbreviation:"ER"},{name:"Estonia",abbreviation:"EE"},{name:"Ethiopia",abbreviation:"ET"},{name:"Falkland Islands",abbreviation:"FK"},{name:"Faroe Islands",abbreviation:"FO"},{name:"Fiji",abbreviation:"FJ"},{name:"Finland",abbreviation:"FI"},{name:"France",abbreviation:"FR"},{name:"French Guiana",abbreviation:"GF"},{name:"French Polynesia",abbreviation:"PF"},{name:"French Southern Territories",abbreviation:"TF"},{name:"French Southern and Antarctic Territories",abbreviation:"FQ"},{name:"Gabon",abbreviation:"GA"},{name:"Gambia",abbreviation:"GM"},{name:"Georgia",abbreviation:"GE"},{name:"Germany",abbreviation:"DE"},{name:"Ghana",abbreviation:"GH"},{name:"Gibraltar",abbreviation:"GI"},{name:"Greece",abbreviation:"GR"},{name:"Greenland",abbreviation:"GL"},{name:"Grenada",abbreviation:"GD"},{name:"Guadeloupe",abbreviation:"GP"},{name:"Guam",abbreviation:"GU"},{name:"Guatemala",abbreviation:"GT"},{name:"Guernsey",abbreviation:"GG"},{name:"Guinea",abbreviation:"GN"},{name:"Guinea-Bissau",abbreviation:"GW"},{name:"Guyana",abbreviation:"GY"},{name:"Haiti",abbreviation:"HT"},{name:"Heard Island and McDonald Islands",abbreviation:"HM"},{name:"Honduras",abbreviation:"HN"},{name:"Hong Kong SAR China",abbreviation:"HK"},{name:"Hungary",abbreviation:"HU"},{name:"Iceland",abbreviation:"IS"},{name:"India",abbreviation:"IN"},{name:"Indonesia",abbreviation:"ID"},{name:"Iran",abbreviation:"IR"},{name:"Iraq",abbreviation:"IQ"},{name:"Ireland",abbreviation:"IE"},{name:"Isle of Man",abbreviation:"IM"},{name:"Israel",abbreviation:"IL"},{name:"Italy",abbreviation:"IT"},{name:"Jamaica",abbreviation:"JM"},{name:"Japan",abbreviation:"JP"},{name:"Jersey",abbreviation:"JE"},{name:"Johnston Island",abbreviation:"JT"},{name:"Jordan",abbreviation:"JO"},{name:"Kazakhstan",abbreviation:"KZ"},{name:"Kenya",abbreviation:"KE"},{name:"Kiribati",abbreviation:"KI"},{name:"Kuwait",abbreviation:"KW"},{name:"Kyrgyzstan",abbreviation:"KG"},{name:"Laos",abbreviation:"LA"},{name:"Latvia",abbreviation:"LV"},{name:"Lebanon",abbreviation:"LB"},{name:"Lesotho",abbreviation:"LS"},{name:"Liberia",abbreviation:"LR"},{name:"Libya",abbreviation:"LY"},{name:"Liechtenstein",abbreviation:"LI"},{name:"Lithuania",abbreviation:"LT"},{name:"Luxembourg",abbreviation:"LU"},{name:"Macau SAR China",abbreviation:"MO"},{name:"Macedonia",abbreviation:"MK"},{name:"Madagascar",abbreviation:"MG"},{name:"Malawi",abbreviation:"MW"},{name:"Malaysia",abbreviation:"MY"},{name:"Maldives",abbreviation:"MV"},{name:"Mali",abbreviation:"ML"},{name:"Malta",abbreviation:"MT"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Martinique",abbreviation:"MQ"},{name:"Mauritania",abbreviation:"MR"},{name:"Mauritius",abbreviation:"MU"},{name:"Mayotte",abbreviation:"YT"},{name:"Metropolitan France",abbreviation:"FX"},{name:"Mexico",abbreviation:"MX"},{name:"Micronesia",abbreviation:"FM"},{name:"Midway Islands",abbreviation:"MI"},{name:"Moldova",abbreviation:"MD"},{name:"Monaco",abbreviation:"MC"},{name:"Mongolia",abbreviation:"MN"},{name:"Montenegro",abbreviation:"ME"},{name:"Montserrat",abbreviation:"MS"},{name:"Morocco",abbreviation:"MA"},{name:"Mozambique",abbreviation:"MZ"},{name:"Myanmar [Burma]",abbreviation:"MM"},{name:"Namibia",abbreviation:"NA"},{name:"Nauru",abbreviation:"NR"},{name:"Nepal",abbreviation:"NP"},{name:"Netherlands",abbreviation:"NL"},{name:"Netherlands Antilles",abbreviation:"AN"},{name:"Neutral Zone",abbreviation:"NT"},{name:"New Caledonia",abbreviation:"NC"},{name:"New Zealand",abbreviation:"NZ"},{name:"Nicaragua",abbreviation:"NI"},{name:"Niger",abbreviation:"NE"},{name:"Nigeria",abbreviation:"NG"},{name:"Niue",abbreviation:"NU"},{name:"Norfolk Island",abbreviation:"NF"},{name:"North Korea",abbreviation:"KP"},{name:"North Vietnam",abbreviation:"VD"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Norway",abbreviation:"NO"},{name:"Oman",abbreviation:"OM"},{name:"Pacific Islands Trust Territory",abbreviation:"PC"},{name:"Pakistan",abbreviation:"PK"},{name:"Palau",abbreviation:"PW"},{name:"Palestinian Territories",abbreviation:"PS"},{name:"Panama",abbreviation:"PA"},{name:"Panama Canal Zone",abbreviation:"PZ"},{name:"Papua New Guinea",abbreviation:"PG"},{name:"Paraguay",abbreviation:"PY"},{name:"People's Democratic Republic of Yemen",abbreviation:"YD"},{name:"Peru",abbreviation:"PE"},{name:"Philippines",abbreviation:"PH"},{name:"Pitcairn Islands",abbreviation:"PN"},{name:"Poland",abbreviation:"PL"},{name:"Portugal",abbreviation:"PT"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Qatar",abbreviation:"QA"},{name:"Romania",abbreviation:"RO"},{name:"Russia",abbreviation:"RU"},{name:"Rwanda",abbreviation:"RW"},{name:"Réunion",abbreviation:"RE"},{name:"Saint Barthélemy",abbreviation:"BL"},{name:"Saint Helena",abbreviation:"SH"},{name:"Saint Kitts and Nevis",abbreviation:"KN"},{name:"Saint Lucia",abbreviation:"LC"},{name:"Saint Martin",abbreviation:"MF"},{name:"Saint Pierre and Miquelon",abbreviation:"PM"},{name:"Saint Vincent and the Grenadines",abbreviation:"VC"},{name:"Samoa",abbreviation:"WS"},{name:"San Marino",abbreviation:"SM"},{name:"Saudi Arabia",abbreviation:"SA"},{name:"Senegal",abbreviation:"SN"},{name:"Serbia",abbreviation:"RS"},{name:"Serbia and Montenegro",abbreviation:"CS"},{name:"Seychelles",abbreviation:"SC"},{name:"Sierra Leone",abbreviation:"SL"},{name:"Singapore",abbreviation:"SG"},{name:"Slovakia",abbreviation:"SK"},{name:"Slovenia",abbreviation:"SI"},{name:"Solomon Islands",abbreviation:"SB"},{name:"Somalia",abbreviation:"SO"},{name:"South Africa",abbreviation:"ZA"},{name:"South Georgia and the South Sandwich Islands",abbreviation:"GS"},{name:"South Korea",abbreviation:"KR"},{name:"Spain",abbreviation:"ES"},{name:"Sri Lanka",abbreviation:"LK"},{name:"Sudan",abbreviation:"SD"},{name:"Suriname",abbreviation:"SR"},{name:"Svalbard and Jan Mayen",abbreviation:"SJ"},{name:"Swaziland",abbreviation:"SZ"},{name:"Sweden",abbreviation:"SE"},{name:"Switzerland",abbreviation:"CH"},{name:"Syria",abbreviation:"SY"},{name:"São Tomé and Príncipe",abbreviation:"ST"},{name:"Taiwan",abbreviation:"TW"},{name:"Tajikistan",abbreviation:"TJ"},{name:"Tanzania",abbreviation:"TZ"},{name:"Thailand",abbreviation:"TH"},{name:"Timor-Leste",abbreviation:"TL"},{name:"Togo",abbreviation:"TG"},{name:"Tokelau",abbreviation:"TK"},{name:"Tonga",abbreviation:"TO"},{name:"Trinidad and Tobago",abbreviation:"TT"},{name:"Tunisia",abbreviation:"TN"},{name:"Turkey",abbreviation:"TR"},{name:"Turkmenistan",abbreviation:"TM"},{name:"Turks and Caicos Islands",abbreviation:"TC"},{name:"Tuvalu",abbreviation:"TV"},{name:"U.S. Minor Outlying Islands",abbreviation:"UM"},{name:"U.S. Miscellaneous Pacific Islands",abbreviation:"PU"},{name:"U.S. Virgin Islands",abbreviation:"VI"},{name:"Uganda",abbreviation:"UG"},{name:"Ukraine",abbreviation:"UA"},{name:"Union of Soviet Socialist Republics",abbreviation:"SU"},{name:"United Arab Emirates",abbreviation:"AE"},{name:"United Kingdom",abbreviation:"GB"},{name:"United States",abbreviation:"US"},{name:"Unknown or Invalid Region",abbreviation:"ZZ"},{name:"Uruguay",abbreviation:"UY"},{name:"Uzbekistan",abbreviation:"UZ"},{name:"Vanuatu",abbreviation:"VU"},{name:"Vatican City",abbreviation:"VA"},{name:"Venezuela",abbreviation:"VE"},{name:"Vietnam",abbreviation:"VN"},{name:"Wake Island",abbreviation:"WK"},{name:"Wallis and Futuna",abbreviation:"WF"},{name:"Western Sahara",abbreviation:"EH"},{name:"Yemen",abbreviation:"YE"},{name:"Zambia",abbreviation:"ZM"},{name:"Zimbabwe",abbreviation:"ZW"},{name:"Åland Islands",abbreviation:"AX"}],provinces:[{name:"Alberta",abbreviation:"AB"},{name:"British Columbia",abbreviation:"BC"},{name:"Manitoba",abbreviation:"MB"},{name:"New Brunswick",abbreviation:"NB"},{name:"Newfoundland and Labrador",abbreviation:"NL"},{name:"Nova Scotia",abbreviation:"NS"},{name:"Ontario",abbreviation:"ON"},{name:"Prince Edward Island",abbreviation:"PE"},{name:"Quebec",abbreviation:"QC"},{name:"Saskatchewan",abbreviation:"SK"},{name:"Northwest Territories",abbreviation:"NT"},{name:"Nunavut",abbreviation:"NU"},{name:"Yukon",abbreviation:"YT"}],us_states_and_dc:[{name:"Alabama",abbreviation:"AL"},{name:"Alaska",abbreviation:"AK"},{name:"Arizona",abbreviation:"AZ"},{name:"Arkansas",abbreviation:"AR"},{name:"California",abbreviation:"CA"},{name:"Colorado",abbreviation:"CO"},{name:"Connecticut",abbreviation:"CT"},{name:"Delaware",abbreviation:"DE"},{name:"District of Columbia",abbreviation:"DC"},{name:"Florida",abbreviation:"FL"},{name:"Georgia",abbreviation:"GA"},{name:"Hawaii",abbreviation:"HI"},{name:"Idaho",abbreviation:"ID"},{name:"Illinois",abbreviation:"IL"},{name:"Indiana",abbreviation:"IN"},{name:"Iowa",abbreviation:"IA"},{name:"Kansas",abbreviation:"KS"},{name:"Kentucky",abbreviation:"KY"},{name:"Louisiana",abbreviation:"LA"},{name:"Maine",abbreviation:"ME"},{name:"Maryland",abbreviation:"MD"},{name:"Massachusetts",abbreviation:"MA"},{name:"Michigan",abbreviation:"MI"},{name:"Minnesota",abbreviation:"MN"},{name:"Mississippi",abbreviation:"MS"},{name:"Missouri",abbreviation:"MO"},{name:"Montana",abbreviation:"MT"},{name:"Nebraska",abbreviation:"NE"},{name:"Nevada",abbreviation:"NV"},{name:"New Hampshire",abbreviation:"NH"},{name:"New Jersey",abbreviation:"NJ"},{name:"New Mexico",abbreviation:"NM"},{name:"New York",abbreviation:"NY"},{name:"North Carolina",abbreviation:"NC"},{name:"North Dakota",abbreviation:"ND"},{name:"Ohio",abbreviation:"OH"},{name:"Oklahoma",abbreviation:"OK"},{name:"Oregon",abbreviation:"OR"},{name:"Pennsylvania",abbreviation:"PA"},{name:"Rhode Island",abbreviation:"RI"},{name:"South Carolina",abbreviation:"SC"},{name:"South Dakota",abbreviation:"SD"},{name:"Tennessee",abbreviation:"TN"},{name:"Texas",abbreviation:"TX"},{name:"Utah",abbreviation:"UT"},{name:"Vermont",abbreviation:"VT"},{name:"Virginia",abbreviation:"VA"},{name:"Washington",abbreviation:"WA"},{name:"West Virginia",abbreviation:"WV"},{name:"Wisconsin",abbreviation:"WI"},{name:"Wyoming",abbreviation:"WY"}],territories:[{name:"American Samoa",abbreviation:"AS"},{name:"Federated States of Micronesia",abbreviation:"FM"},{name:"Guam",abbreviation:"GU"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Virgin Islands, U.S.",abbreviation:"VI"}],armed_forces:[{name:"Armed Forces Europe",abbreviation:"AE"},{name:"Armed Forces Pacific",abbreviation:"AP"},{name:"Armed Forces the Americas",abbreviation:"AA"}],street_suffixes:[{name:"Avenue",abbreviation:"Ave"},{name:"Boulevard",abbreviation:"Blvd"},{name:"Center",abbreviation:"Ctr"},{name:"Circle",abbreviation:"Cir"},{name:"Court",abbreviation:"Ct"},{name:"Drive",abbreviation:"Dr"},{name:"Extension",abbreviation:"Ext"},{name:"Glen",abbreviation:"Gln"},{name:"Grove",abbreviation:"Grv"},{name:"Heights",abbreviation:"Hts"},{name:"Highway",abbreviation:"Hwy"},{name:"Junction",abbreviation:"Jct"},{name:"Key",abbreviation:"Key"},{name:"Lane",abbreviation:"Ln"},{name:"Loop",abbreviation:"Loop"},{name:"Manor",abbreviation:"Mnr"},{name:"Mill",abbreviation:"Mill"},{name:"Park",abbreviation:"Park"},{name:"Parkway",abbreviation:"Pkwy"},{name:"Pass",abbreviation:"Pass"},{name:"Path",abbreviation:"Path"},{name:"Pike",abbreviation:"Pike"},{name:"Place",abbreviation:"Pl"},{name:"Plaza",abbreviation:"Plz"},{name:"Point",abbreviation:"Pt"},{name:"Ridge",abbreviation:"Rdg"},{name:"River",abbreviation:"Riv"},{name:"Road",abbreviation:"Rd"},{name:"Square",abbreviation:"Sq"},{name:"Street",abbreviation:"St"},{name:"Terrace",abbreviation:"Ter"},{name:"Trail",abbreviation:"Trl"},{name:"Turnpike",abbreviation:"Tpke"},{name:"View",abbreviation:"Vw"},{name:"Way",abbreviation:"Way"}],months:[{name:"January",short_name:"Jan",numeric:"01",days:31},{name:"February",short_name:"Feb",numeric:"02",days:28},{name:"March",short_name:"Mar",numeric:"03",days:31},{name:"April",short_name:"Apr",numeric:"04",days:30},{name:"May",short_name:"May",numeric:"05",days:31},{name:"June",short_name:"Jun",numeric:"06",days:30},{name:"July",short_name:"Jul",numeric:"07",days:31},{name:"August",short_name:"Aug",numeric:"08",days:31},{name:"September",short_name:"Sep",numeric:"09",days:30},{name:"October",short_name:"Oct",numeric:"10",days:31},{name:"November",short_name:"Nov",numeric:"11",days:30},{name:"December",short_name:"Dec",numeric:"12",days:31}],cc_types:[{name:"American Express",short_name:"amex",prefix:"34",length:15},{name:"Bankcard",short_name:"bankcard",prefix:"5610",length:16},{name:"China UnionPay",short_name:"chinaunion",prefix:"62",length:16},{name:"Diners Club Carte Blanche",short_name:"dccarte",prefix:"300",length:14},{name:"Diners Club enRoute",short_name:"dcenroute",prefix:"2014",length:15},{name:"Diners Club International",short_name:"dcintl",prefix:"36",length:14},{name:"Diners Club United States & Canada",short_name:"dcusc",prefix:"54",length:16},{name:"Discover Card",short_name:"discover",prefix:"6011",length:16},{name:"InstaPayment",short_name:"instapay",prefix:"637",length:16},{name:"JCB",short_name:"jcb",prefix:"3528",length:16},{name:"Laser",short_name:"laser",prefix:"6304",length:16},{name:"Maestro",short_name:"maestro",prefix:"5018",length:16},{name:"Mastercard",short_name:"mc",prefix:"51",length:16},{name:"Solo",short_name:"solo",prefix:"6334",length:16},{name:"Switch",short_name:"switch",prefix:"4903",length:16},{name:"Visa",short_name:"visa",prefix:"4",length:16},{name:"Visa Electron",short_name:"electron",prefix:"4026",length:16}],currency_types:[{code:"AED",name:"United Arab Emirates Dirham"},{code:"AFN",name:"Afghanistan Afghani"},{code:"ALL",name:"Albania Lek"},{code:"AMD",name:"Armenia Dram"},{code:"ANG",name:"Netherlands Antilles Guilder"},{code:"AOA",name:"Angola Kwanza"},{code:"ARS",name:"Argentina Peso"},{code:"AUD",name:"Australia Dollar"},{code:"AWG",name:"Aruba Guilder"},{code:"AZN",name:"Azerbaijan New Manat"},{code:"BAM",name:"Bosnia and Herzegovina Convertible Marka"},{code:"BBD",name:"Barbados Dollar"},{code:"BDT",name:"Bangladesh Taka"},{code:"BGN",name:"Bulgaria Lev"},{code:"BHD",name:"Bahrain Dinar"},{code:"BIF",name:"Burundi Franc"},{code:"BMD",name:"Bermuda Dollar"},{code:"BND",name:"Brunei Darussalam Dollar"},{code:"BOB",name:"Bolivia Boliviano"},{code:"BRL",name:"Brazil Real"},{code:"BSD",name:"Bahamas Dollar"},{code:"BTN",name:"Bhutan Ngultrum"},{code:"BWP",name:"Botswana Pula"},{code:"BYR",name:"Belarus Ruble"},{code:"BZD",name:"Belize Dollar"},{code:"CAD",name:"Canada Dollar"},{code:"CDF",name:"Congo/Kinshasa Franc"},{code:"CHF",name:"Switzerland Franc"},{code:"CLP",name:"Chile Peso"},{code:"CNY",name:"China Yuan Renminbi"},{code:"COP",name:"Colombia Peso"},{code:"CRC",name:"Costa Rica Colon"},{code:"CUC",name:"Cuba Convertible Peso"},{code:"CUP",name:"Cuba Peso"},{code:"CVE",name:"Cape Verde Escudo"},{code:"CZK",name:"Czech Republic Koruna"},{code:"DJF",name:"Djibouti Franc"},{code:"DKK",name:"Denmark Krone"},{code:"DOP",name:"Dominican Republic Peso"},{code:"DZD",name:"Algeria Dinar"},{code:"EGP",name:"Egypt Pound"},{code:"ERN",name:"Eritrea Nakfa"},{code:"ETB",name:"Ethiopia Birr"},{code:"EUR",name:"Euro Member Countries"},{code:"FJD",name:"Fiji Dollar"},{code:"FKP",name:"Falkland Islands (Malvinas) Pound"},{code:"GBP",name:"United Kingdom Pound"},{code:"GEL",name:"Georgia Lari"},{code:"GGP",name:"Guernsey Pound"},{code:"GHS",name:"Ghana Cedi"},{code:"GIP",name:"Gibraltar Pound"},{code:"GMD",name:"Gambia Dalasi"},{code:"GNF",name:"Guinea Franc"},{code:"GTQ",name:"Guatemala Quetzal"},{code:"GYD",name:"Guyana Dollar"},{code:"HKD",name:"Hong Kong Dollar"},{code:"HNL",name:"Honduras Lempira"},{code:"HRK",name:"Croatia Kuna"},{code:"HTG",name:"Haiti Gourde"},{code:"HUF",name:"Hungary Forint"},{code:"IDR",name:"Indonesia Rupiah"},{code:"ILS",name:"Israel Shekel"},{code:"IMP",name:"Isle of Man Pound"},{code:"INR",name:"India Rupee"},{code:"IQD",name:"Iraq Dinar"},{code:"IRR",name:"Iran Rial"},{code:"ISK",name:"Iceland Krona"},{code:"JEP",name:"Jersey Pound"},{code:"JMD",name:"Jamaica Dollar"},{code:"JOD",name:"Jordan Dinar"},{code:"JPY",name:"Japan Yen"},{code:"KES",name:"Kenya Shilling"},{code:"KGS",name:"Kyrgyzstan Som"},{code:"KHR",name:"Cambodia Riel"},{code:"KMF",name:"Comoros Franc"},{code:"KPW",name:"Korea (North) Won"},{code:"KRW",name:"Korea (South) Won"},{code:"KWD",name:"Kuwait Dinar"},{code:"KYD",name:"Cayman Islands Dollar"},{code:"KZT",name:"Kazakhstan Tenge"},{code:"LAK",name:"Laos Kip"},{code:"LBP",name:"Lebanon Pound"},{code:"LKR",name:"Sri Lanka Rupee"},{code:"LRD",name:"Liberia Dollar"},{code:"LSL",name:"Lesotho Loti"},{code:"LTL",name:"Lithuania Litas"},{code:"LYD",name:"Libya Dinar"},{code:"MAD",name:"Morocco Dirham"},{code:"MDL",name:"Moldova Leu"},{code:"MGA",name:"Madagascar Ariary"},{code:"MKD",name:"Macedonia Denar"},{code:"MMK",name:"Myanmar (Burma) Kyat"},{code:"MNT",name:"Mongolia Tughrik"},{code:"MOP",name:"Macau Pataca"},{code:"MRO",name:"Mauritania Ouguiya"},{code:"MUR",name:"Mauritius Rupee"},{code:"MVR",name:"Maldives (Maldive Islands) Rufiyaa"},{code:"MWK",name:"Malawi Kwacha"},{code:"MXN",name:"Mexico Peso"},{code:"MYR",name:"Malaysia Ringgit"},{code:"MZN",name:"Mozambique Metical"},{code:"NAD",name:"Namibia Dollar"},{code:"NGN",name:"Nigeria Naira"},{code:"NIO",name:"Nicaragua Cordoba" +},{code:"NOK",name:"Norway Krone"},{code:"NPR",name:"Nepal Rupee"},{code:"NZD",name:"New Zealand Dollar"},{code:"OMR",name:"Oman Rial"},{code:"PAB",name:"Panama Balboa"},{code:"PEN",name:"Peru Nuevo Sol"},{code:"PGK",name:"Papua New Guinea Kina"},{code:"PHP",name:"Philippines Peso"},{code:"PKR",name:"Pakistan Rupee"},{code:"PLN",name:"Poland Zloty"},{code:"PYG",name:"Paraguay Guarani"},{code:"QAR",name:"Qatar Riyal"},{code:"RON",name:"Romania New Leu"},{code:"RSD",name:"Serbia Dinar"},{code:"RUB",name:"Russia Ruble"},{code:"RWF",name:"Rwanda Franc"},{code:"SAR",name:"Saudi Arabia Riyal"},{code:"SBD",name:"Solomon Islands Dollar"},{code:"SCR",name:"Seychelles Rupee"},{code:"SDG",name:"Sudan Pound"},{code:"SEK",name:"Sweden Krona"},{code:"SGD",name:"Singapore Dollar"},{code:"SHP",name:"Saint Helena Pound"},{code:"SLL",name:"Sierra Leone Leone"},{code:"SOS",name:"Somalia Shilling"},{code:"SPL",name:"Seborga Luigino"},{code:"SRD",name:"Suriname Dollar"},{code:"STD",name:"São Tomé and Príncipe Dobra"},{code:"SVC",name:"El Salvador Colon"},{code:"SYP",name:"Syria Pound"},{code:"SZL",name:"Swaziland Lilangeni"},{code:"THB",name:"Thailand Baht"},{code:"TJS",name:"Tajikistan Somoni"},{code:"TMT",name:"Turkmenistan Manat"},{code:"TND",name:"Tunisia Dinar"},{code:"TOP",name:"Tonga Pa'anga"},{code:"TRY",name:"Turkey Lira"},{code:"TTD",name:"Trinidad and Tobago Dollar"},{code:"TVD",name:"Tuvalu Dollar"},{code:"TWD",name:"Taiwan New Dollar"},{code:"TZS",name:"Tanzania Shilling"},{code:"UAH",name:"Ukraine Hryvnia"},{code:"UGX",name:"Uganda Shilling"},{code:"USD",name:"United States Dollar"},{code:"UYU",name:"Uruguay Peso"},{code:"UZS",name:"Uzbekistan Som"},{code:"VEF",name:"Venezuela Bolivar"},{code:"VND",name:"Viet Nam Dong"},{code:"VUV",name:"Vanuatu Vatu"},{code:"WST",name:"Samoa Tala"},{code:"XAF",name:"Communauté Financière Africaine (BEAC) CFA Franc BEAC"},{code:"XCD",name:"East Caribbean Dollar"},{code:"XDR",name:"International Monetary Fund (IMF) Special Drawing Rights"},{code:"XOF",name:"Communauté Financière Africaine (BCEAO) Franc"},{code:"XPF",name:"Comptoirs Français du Pacifique (CFP) Franc"},{code:"YER",name:"Yemen Rial"},{code:"ZAR",name:"South Africa Rand"},{code:"ZMW",name:"Zambia Kwacha"},{code:"ZWD",name:"Zimbabwe Dollar"}]},b=Object.prototype.hasOwnProperty,E=Object.keys||function(e){var t=[];for(var a in e)b.call(e,a)&&t.push(a);return t};r.prototype.get=function(e){return l(v[e])},r.prototype.mac_address=function(e){e=i(e),e.separator||(e.separator=e.networkVersion?".":":");var t="ABCDEF1234567890",a="";return a=e.networkVersion?this.n(this.string,3,{pool:t,length:4}).join(e.separator):this.n(this.string,6,{pool:t,length:2}).join(e.separator)},r.prototype.normal=function(e){e=i(e,{mean:0,dev:1});var t,a,n,r,s=e.mean,o=e.dev;do a=2*this.random()-1,n=2*this.random()-1,t=a*a+n*n;while(t>=1);return r=a*Math.sqrt(-2*Math.log(t)/t),o*r+s},r.prototype.radio=function(e){e=i(e,{side:"?"});var t="";switch(e.side.toLowerCase()){case"east":case"e":t="W";break;case"west":case"w":t="K";break;default:t=this.character({pool:"KW"})}return t+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})},r.prototype.set=function(e,t){"string"==typeof e?v[e]=t:v=l(e,v)},r.prototype.tv=function(e){return this.radio(e)},r.prototype.cnpj=function(){var e=this.n(this.natural,8,{max:9}),t=2+6*e[7]+7*e[6]+8*e[5]+9*e[4]+2*e[3]+3*e[2]+4*e[1]+5*e[0];t=11-t%11,t>=10&&(t=0);var a=2*t+3+7*e[7]+8*e[6]+9*e[5]+2*e[4]+3*e[3]+4*e[2]+5*e[1]+6*e[0];return a=11-a%11,a>=10&&(a=0),""+e[0]+e[1]+"."+e[2]+e[3]+e[4]+"."+e[5]+e[6]+e[7]+"/0001-"+t+a},r.prototype.mersenne_twister=function(e){return new A(e)},r.prototype.blueimp_md5=function(){return new D};var A=function(e){void 0===e&&(e=Math.floor(Math.random()*Math.pow(10,13))),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(e)};A.prototype.init_genrand=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti>>30,this.mt[this.mti]=(1812433253*((4294901760&e)>>>16)<<16)+1812433253*(65535&e)+this.mti,this.mt[this.mti]>>>=0},A.prototype.init_by_array=function(e,t){var a,n,r=1,i=0;for(this.init_genrand(19650218),a=this.N>t?this.N:t;a;a--)n=this.mt[r-1]^this.mt[r-1]>>>30,this.mt[r]=(this.mt[r]^(1664525*((4294901760&n)>>>16)<<16)+1664525*(65535&n))+e[i]+i,this.mt[r]>>>=0,r++,i++,r>=this.N&&(this.mt[0]=this.mt[this.N-1],r=1),i>=t&&(i=0);for(a=this.N-1;a;a--)n=this.mt[r-1]^this.mt[r-1]>>>30,this.mt[r]=(this.mt[r]^(1566083941*((4294901760&n)>>>16)<<16)+1566083941*(65535&n))-r,this.mt[r]>>>=0,r++,r>=this.N&&(this.mt[0]=this.mt[this.N-1],r=1);this.mt[0]=2147483648},A.prototype.genrand_int32=function(){var e,t=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var a;for(this.mti===this.N+1&&this.init_genrand(5489),a=0;a>>1^t[1&e];for(;a>>1^t[1&e];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^t[1&e],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0},A.prototype.genrand_int31=function(){return this.genrand_int32()>>>1},A.prototype.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},A.prototype.random=function(){return this.genrand_int32()*(1/4294967296)},A.prototype.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},A.prototype.genrand_res53=function(){var e=this.genrand_int32()>>>5,t=this.genrand_int32()>>>6;return(67108864*e+t)*(1/9007199254740992)};var D=function(){};D.prototype.VERSION="1.0.1",D.prototype.safe_add=function(e,t){var a=(65535&e)+(65535&t),n=(e>>16)+(t>>16)+(a>>16);return n<<16|65535&a},D.prototype.bit_roll=function(e,t){return e<>>32-t},D.prototype.md5_cmn=function(e,t,a,n,r,i){return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(t,e),this.safe_add(n,i)),r),a)},D.prototype.md5_ff=function(e,t,a,n,r,i,s){return this.md5_cmn(t&a|~t&n,e,t,r,i,s)},D.prototype.md5_gg=function(e,t,a,n,r,i,s){return this.md5_cmn(t&n|a&~n,e,t,r,i,s)},D.prototype.md5_hh=function(e,t,a,n,r,i,s){return this.md5_cmn(t^a^n,e,t,r,i,s)},D.prototype.md5_ii=function(e,t,a,n,r,i,s){return this.md5_cmn(a^(t|~n),e,t,r,i,s)},D.prototype.binl_md5=function(e,t){e[t>>5]|=128<>>9<<4)+14]=t;var a,n,r,i,s,o=1732584193,u=-271733879,c=-1732584194,l=271733878;for(a=0;a>5]>>>t%32&255);return a},D.prototype.rstr2binl=function(e){var t,a=[];for(a[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<16&&(r=this.binl_md5(r,8*e.length)),a=0;16>a;a+=1)i[a]=909522486^r[a],s[a]=1549556828^r[a];return n=this.binl_md5(i.concat(this.rstr2binl(t)),512+8*t.length),this.binl2rstr(this.binl_md5(s.concat(n),640))},D.prototype.rstr2hex=function(e){var t,a,n="0123456789abcdef",r="";for(a=0;a>>4&15)+n.charAt(15&t);return r},D.prototype.str2rstr_utf8=function(e){return unescape(encodeURIComponent(e))},D.prototype.raw_md5=function(e){return this.rstr_md5(this.str2rstr_utf8(e))},D.prototype.hex_md5=function(e){return this.rstr2hex(this.raw_md5(e))},D.prototype.raw_hmac_md5=function(e,t){return this.rstr_hmac_md5(this.str2rstr_utf8(e),this.str2rstr_utf8(t))},D.prototype.hex_hmac_md5=function(e,t){return this.rstr2hex(this.raw_hmac_md5(e,t))},D.prototype.md5=function(e,t,a){return t?a?this.raw_hmac_md5(t,e):this.hex_hmac_md5(t,e):a?this.raw_md5(e):this.hex_md5(e)},"undefined"!=typeof n&&("undefined"!=typeof a&&a.exports&&(n=a.exports=r),n.Chance=r),"function"==typeof e&&e.amd&&e([],function(){return r}),"undefined"!=typeof importScripts&&(chance=new r),"object"==typeof window&&"object"==typeof window.document&&(window.Chance=r,window.chance=new r)}()}).call(this,t("buffer").Buffer)},{buffer:16}],19:[function(e,t,a){function n(e){return e?r(e):void 0}function r(e){for(var t in n.prototype)e[t]=n.prototype[t];return e}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks[e]=this._callbacks[e]||[]).push(t),this},n.prototype.once=function(e,t){function a(){n.off(e,a),t.apply(this,arguments)}var n=this;return this._callbacks=this._callbacks||{},a.fn=t,this.on(e,a),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var a=this._callbacks[e];if(!a)return this;if(1==arguments.length)return delete this._callbacks[e],this;for(var n,r=0;rn;++n)a[n].apply(this,t)}return this},n.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks[e]||[]},n.prototype.hasListeners=function(e){return!!this.listeners(e).length}},{}],20:[function(e,t,a){function n(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function r(){var e=arguments,t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+a.humanize(this.diff),!t)return e;var n="color: "+this.color;e=[e[0],n,"color: inherit"].concat(Array.prototype.slice.call(e,1));var r=0,i=0;return e[0].replace(/%[a-z%]/g,function(e){"%%"!==e&&(r++,"%c"===e&&(i=r))}),e.splice(i,0,n),e}function i(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(e){try{null==e?a.storage.removeItem("debug"):a.storage.debug=e}catch(t){}}function o(){var e;try{e=a.storage.debug}catch(t){}return e}function u(){try{return window.localStorage}catch(e){}}a=t.exports=e("./debug"),a.log=i,a.formatArgs=r,a.save=s,a.load=o,a.useColors=n,a.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),a.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],a.formatters.j=function(e){return JSON.stringify(e)},a.enable(o())},{"./debug":21}],21:[function(e,t,a){function n(){return a.colors[l++%a.colors.length]}function r(e){function t(){}function r(){var e=r,t=+new Date,i=t-(c||t);e.diff=i,e.prev=c,e.curr=t,c=t,null==e.useColors&&(e.useColors=a.useColors()),null==e.color&&e.useColors&&(e.color=n());var s=Array.prototype.slice.call(arguments);s[0]=a.coerce(s[0]),"string"!=typeof s[0]&&(s=["%o"].concat(s));var o=0;s[0]=s[0].replace(/%([a-z%])/g,function(t,n){if("%%"===t)return t;o++;var r=a.formatters[n];if("function"==typeof r){var i=s[o];t=r.call(e,i),s.splice(o,1),o--}return t}),"function"==typeof a.formatArgs&&(s=a.formatArgs.apply(e,s));var u=r.log||a.log||console.log.bind(console);u.apply(e,s)}t.enabled=!1,r.enabled=!0;var i=a.enabled(e)?r:t;return i.namespace=e,i}function i(e){a.save(e);for(var t=(e||"").split(/[\s,]+/),n=t.length,r=0;n>r;r++)t[r]&&(e=t[r].replace(/\*/g,".*?"),"-"===e[0]?a.skips.push(new RegExp("^"+e.substr(1)+"$")):a.names.push(new RegExp("^"+e+"$")))}function s(){a.enable("")}function o(e){var t,n;for(t=0,n=a.skips.length;n>t;t++)if(a.skips[t].test(e))return!1;for(t=0,n=a.names.length;n>t;t++)if(a.names[t].test(e))return!0;return!1}function u(e){return e instanceof Error?e.stack||e.message:e}a=t.exports=r,a.coerce=u,a.disable=s,a.enable=i,a.enabled=o,a.humanize=e("ms"),a.names=[],a.skips=[],a.formatters={};var c,l=0},{ms:193}],22:[function(e,t,a){(function(e){"use strict";function a(t){return t instanceof e||t instanceof Date||t instanceof RegExp?!0:!1}function n(t){if(t instanceof e){var a=new e(t.length);return t.copy(a),a}if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return new RegExp(t);throw new Error("Unexpected situation")}function r(e){var t=[];return e.forEach(function(e,s){"object"==typeof e&&null!==e?Array.isArray(e)?t[s]=r(e):a(e)?t[s]=n(e):t[s]=i({},e):t[s]=e}),t}var i=t.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,s=arguments[0],o=Array.prototype.slice.call(arguments,1);return o.forEach(function(o){"object"!=typeof o||Array.isArray(o)||Object.keys(o).forEach(function(u){return t=s[u],e=o[u],e===s?void 0:"object"!=typeof e||null===e?void(s[u]=e):Array.isArray(e)?void(s[u]=r(e)):a(e)?void(s[u]=n(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(s[u]=i({},e)):void(s[u]=i(t,e))})}),s}}).call(this,e("buffer").Buffer)},{buffer:16}],23:[function(e,t,a){"use strict";var n=e("./util/uri-helpers");n.findByRef=e("./util/find-reference"),n.resolveSchema=e("./util/resolve-schema"),n.normalizeSchema=e("./util/normalize-schema");var r=t.exports=function(){function e(t,a,r,i){function s(a){if("string"==typeof a.id){var r=n.resolveURL(t,a.id).replace(/\/#?$/,"");if(r.indexOf("#")>-1){var i=r.split("#");r="/"===i[1].charAt()?i[0]:i[1]||i[0]}e.refs[r]||(e.refs[r]=a)}}if("object"==typeof t&&(i=r,r=a,a=t,t=void 0),"object"!=typeof a)throw new Error("schema must be an object");if("object"==typeof r&&null!==r){var o=r;r=[];for(var u in o)o[u].id=o[u].id||u,r.push(o[u])}return"undefined"==typeof r||Array.isArray(r)||(i=!!r,r=[]),(r||[]).concat([a]).forEach(function(e){a=n.normalizeSchema(t,e,s),s(a)}),n.resolveSchema(a,e.refs,i)}return e.refs={},e.util=n,e};r.util=n},{"./util/find-reference":25,"./util/normalize-schema":26,"./util/resolve-schema":27,"./util/uri-helpers":28}],24:[function(e,t,a){"use strict";var n=t.exports=function(e,t){function a(e,a){r[e]=n(a,t)}if(t=t||[],t.indexOf(e)>-1)throw new Error("unable dereference circular structures");if(!e||"object"!=typeof e)return e;t=t.concat([e]);var r=Array.isArray(e)?[]:{};return Array.isArray(r)?e.forEach(function(e,t){a(t,e)}):"[object Object]"===Object.prototype.toString.call(e)&&Object.keys(e).forEach(function(t){a(t,e[t])}),r}},{}],25:[function(e,t,a){"use strict";function n(e,t){for(var a=t.split("#")[1],n=a.split("/").slice(1);n.length;){var r=decodeURIComponent(n.shift()).replace(/~1/g,"/").replace(/~0/g,"~");if("undefined"==typeof e[r])throw new Error("JSON pointer not found: "+t);e=e[r]}return e}var r=e("./uri-helpers"),i=t.exports=function(e,t){var a=t[e]||t[e.split("#")[1]]||t[r.getDocumentURI(e)];if(a)a=e.indexOf("#/")>-1?n(a,e):a;else for(var s in t)if(r.resolveURL(t[s].id,e)===t[s].id){a=t[s];break}if(!a)throw new Error("Reference not found: "+e);for(;a.$ref;)a=i(a.$ref,t);return a}},{"./uri-helpers":28}],26:[function(e,t,a){"use strict";function n(e,t,a){if(e){var i="string"==typeof e.id?e.id:"#";r.isURL(i)||(i=r.resolveURL(t===i?null:t,i)),"string"!=typeof e.$ref||r.isURL(e.$ref)||(e.$ref=r.resolveURL(i,e.$ref)),"string"==typeof e.id&&(e.id=t=i)}for(var s in e){var o=e[s];"object"==typeof o&&"enum"!==s&&"required"!==s&&n(o,t,a)}"function"==typeof a&&a(e)}var r=e("./uri-helpers"),i=e("./clone-obj"),s=["http://json-schema.org/schema#","http://json-schema.org/draft-04/schema#"];t.exports=function(e,t,a){"object"==typeof e&&(a=t,t=e,e=null);var o=e||"",u=i(t);if(u.$schema&&-1===s.indexOf(u.$schema))throw new Error("Unsupported schema version (v4 only)");return o=r.resolveURL(u.$schema||s[0],o),n(u,r.resolveURL(u.id||"#",o),a),u.id=u.id||o,u}},{"./clone-obj":24,"./uri-helpers":28}],27:[function(e,t,a){"use strict";function n(e){return"enum"===e||"required"===e||"definitions"===e}function r(e,t,a,u){var c=Array.isArray(e)?[]:{};if("string"==typeof e.$ref){var l=i.getDocumentURI(e.$ref);if(a!==l||u&&e.$ref.indexOf("#/")>-1){var f=s(e.$ref,t);o(e,f),delete e.$ref,delete e.id}}for(var p in e)"object"!=typeof e[p]||n(p)?c[p]=e[p]:c[p]=r(e[p],t,a,u);return c}var i=e("./uri-helpers"),s=e("./find-reference"),o=e("deep-extend");t.exports=function(e,t,a){var n=i.resolveURL(e.$schema,e.id),s=i.getDocumentURI(n);return r(e,t,s,a)}},{"./find-reference":25,"./uri-helpers":28,"deep-extend":22}],28:[function(e,t,a){"use strict";function n(e,t){e=e.replace(/^\.\//,"");var a=String(e).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@]*)(?::([^:@]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);if(!a)throw new RangeError;var r=a[0]||"",i=a[1]||"",s=a[2]||"",o=a[3]||"",u=a[4]||"",c=a[5]||"",l=a[6]||"",f=a[7]||"",p=a[8]||"",m=a[9]||"";if(void 0!==t){var h=new n(t),d=""===i&&""===u&&""===s;d&&""===f&&""===p&&(p=h.search),d&&"/"!==f.charAt(0)&&(f=""!==f?h.pathname.slice(0,h.pathname.lastIndexOf("/")+1)+f:h.pathname);var g=[];f.replace(/\/?[^\/]+/g,function(e){"/.."===e?g.pop():g.push(e)}),f=g.join("")||"/",d&&(l=h.port,c=h.hostname,u=h.host,o=h.password,s=h.username),""===i&&(i=h.protocol),r=i+(""!==u?"//":"")+(""!==s?s+(""!==o?":"+o:"")+"@":"")+u+f+p+m}this.href=r,this.origin=i+(""!==u?"//"+u:""),this.protocol=i,this.username=s,this.password=o,this.host=u,this.hostname=c,this.port=l,this.pathname=f,this.search=p,this.hash=m}function r(e){return"string"==typeof e&&/^\w+:\/\//.test(e)?!0:void 0}function i(e,t){return new n(e,t)}function s(e,t){return e=e||"http://json-schema.org/schema#",t=i(t,e),e=i(e),e.hash&&!t.hash?t.href+e.hash:t.href}function o(e){return"string"==typeof e&&e.split("#")[0]}t.exports={isURL:r,parseURI:i,resolveURL:s,getDocumentURI:o}},{}],29:[function(e,t,a){function n(e,t){this.low=e,this.high=t,this.length=1+t-e}function r(e,t){return this instanceof r?(this.ranges=[],this.length=0,void 0!==e&&this.add(e,t),void 0):new r(e,t)}function i(e){e.length=e.ranges.reduce(function(e,t){return e+t.length},0)}n.prototype.overlaps=function(e){return!(this.highe.high)},n.prototype.touches=function(e){return!(this.high+1e.high)},n.prototype.add=function(e){return this.touches(e)&&new n(Math.min(this.low,e.low),Math.max(this.high,e.high))},n.prototype.subtract=function(e){return this.overlaps(e)?e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.high=this.ranges.length?null:this.ranges[t].low+e},r.prototype.toString=function(){return"[ "+this.ranges.join(", ")+" ]"},r.prototype.clone=function(){return new r(this)},t.exports=r},{}],30:[function(t,a,n){!function(t,a){"use strict";"function"==typeof e&&e.amd?e(["exports"],a):a("undefined"!=typeof n?n:t.esprima={})}(this,function(e){"use strict";function t(e,t){if(!e)throw new Error("ASSERT: "+t)}function a(e){return e>=48&&57>=e}function n(e){return"0123456789abcdefABCDEF".indexOf(e)>=0}function r(e){return"01234567".indexOf(e)>=0}function i(e){var t="0"!==e,a="01234567".indexOf(e);return wa>oa&&r(ia[oa])&&(t=!0,a=8*a+"01234567".indexOf(ia[oa++]),"0123".indexOf(e)>=0&&wa>oa&&r(ia[oa])&&(a=8*a+"01234567".indexOf(ia[oa++]))),{code:a,octal:t}}function s(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0}function o(e){return 10===e||13===e||8232===e||8233===e}function u(e){return 65536>e?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10))+String.fromCharCode(56320+(e-65536&1023))}function c(e){return 36===e||95===e||e>=65&&90>=e||e>=97&&122>=e||92===e||e>=128&&ra.NonAsciiIdentifierStart.test(u(e))}function l(e){return 36===e||95===e||e>=65&&90>=e||e>=97&&122>=e||e>=48&&57>=e||92===e||e>=128&&ra.NonAsciiIdentifierPart.test(u(e))}function f(e){switch(e){case"enum":case"export":case"import":case"super":return!0;default:return!1}}function p(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}}function m(e){return"eval"===e||"arguments"===e}function h(e){switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e||"let"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}}function d(e,a,n,r,i){var s;t("number"==typeof n,"Comment must have valid position"),ba.lastCommentStart=n,s={type:e,value:a},Ea.range&&(s.range=[n,r]),Ea.loc&&(s.loc=i),Ea.comments.push(s),Ea.attachComment&&(Ea.leadingComments.push(s),Ea.trailingComments.push(s)),Ea.tokenize&&(s.type=s.type+"Comment",Ea.delegate&&(s=Ea.delegate(s)),Ea.tokens.push(s))}function g(e){var t,a,n,r;for(t=oa-e,a={start:{line:ua,column:oa-ca-e}};wa>oa;)if(n=ia.charCodeAt(oa),++oa,o(n))return la=!0,Ea.comments&&(r=ia.slice(t+e,oa-1),a.end={line:ua,column:oa-ca-1},d("Line",r,t,oa-1,a)),13===n&&10===ia.charCodeAt(oa)&&++oa,++ua,void(ca=oa);Ea.comments&&(r=ia.slice(t+e,oa),a.end={line:ua,column:oa-ca},d("Line",r,t,oa,a))}function y(){var e,t,a,n;for(Ea.comments&&(e=oa-2,t={start:{line:ua,column:oa-ca-2}});wa>oa;)if(a=ia.charCodeAt(oa),o(a))13===a&&10===ia.charCodeAt(oa+1)&&++oa,la=!0,++ua,++oa,ca=oa;else if(42===a){if(47===ia.charCodeAt(oa+1))return++oa,++oa,void(Ea.comments&&(n=ia.slice(e+2,oa-2),t.end={line:ua,column:oa-ca},d("Block",n,e,oa,t)));++oa}else++oa;Ea.comments&&(t.end={line:ua,column:oa-ca},n=ia.slice(e+2,oa),d("Block",n,e,oa,t)),ae()}function w(){var e,t;for(la=!1,t=0===oa;wa>oa;)if(e=ia.charCodeAt(oa),s(e))++oa;else if(o(e))la=!0,++oa,13===e&&10===ia.charCodeAt(oa)&&++oa,++ua,ca=oa,t=!0;else if(47===e)if(e=ia.charCodeAt(oa+1),47===e)++oa,++oa,g(2),t=!0;else{if(42!==e)break;++oa,++oa,y()}else if(t&&45===e){if(45!==ia.charCodeAt(oa+1)||62!==ia.charCodeAt(oa+2))break;oa+=3,g(3)}else{if(60!==e)break;if("!--"!==ia.slice(oa+1,oa+4))break;++oa,++oa,++oa,++oa,g(4)}}function v(e){var t,a,r,i=0;for(a="u"===e?4:2,t=0;a>t;++t){if(!(wa>oa&&n(ia[oa])))return"";r=ia[oa++],i=16*i+"0123456789abcdef".indexOf(r.toLowerCase())}return String.fromCharCode(i)}function b(){var e,t;for(e=ia[oa],t=0,"}"===e&&te();wa>oa&&(e=ia[oa++],n(e));)t=16*t+"0123456789abcdef".indexOf(e.toLowerCase());return(t>1114111||"}"!==e)&&te(),u(t)}function E(e){var t,a,n;return t=ia.charCodeAt(e),t>=55296&&56319>=t&&(n=ia.charCodeAt(e+1),n>=56320&&57343>=n&&(a=t,t=1024*(a-55296)+n-56320+65536)),t}function A(){var e,t,a;for(e=E(oa),a=u(e),oa+=a.length,92===e&&(117!==ia.charCodeAt(oa)&&te(),++oa,"{"===ia[oa]?(++oa,t=b()):(t=v("u"),e=t.charCodeAt(0),t&&"\\"!==t&&c(e)||te()),a=t);wa>oa&&(e=E(oa),l(e));)t=u(e),a+=t,oa+=t.length,92===e&&(a=a.substr(0,a.length-1),117!==ia.charCodeAt(oa)&&te(),++oa,"{"===ia[oa]?(++oa,t=b()):(t=v("u"),e=t.charCodeAt(0),t&&"\\"!==t&&l(e)||te()),a+=t);return a}function D(){var e,t;for(e=oa++;wa>oa;){if(t=ia.charCodeAt(oa),92===t)return oa=e,A();if(t>=55296&&57343>t)return oa=e,A();if(!l(t))break;++oa}return ia.slice(e,oa)}function j(){var e,t,a;return e=oa,t=92===ia.charCodeAt(oa)?A():D(),a=1===t.length?Xt.Identifier:h(t)?Xt.Keyword:"null"===t?Xt.NullLiteral:"true"===t||"false"===t?Xt.BooleanLiteral:Xt.Identifier,{type:a,value:t,lineNumber:ua,lineStart:ca,start:e,end:oa}}function x(){var e,t;switch(e={type:Xt.Punctuator,value:"",lineNumber:ua,lineStart:ca,start:oa,end:oa},t=ia[oa]){case"(":Ea.tokenize&&(Ea.openParenToken=Ea.tokenValues.length),++oa;break;case"{":Ea.tokenize&&(Ea.openCurlyToken=Ea.tokenValues.length),ba.curlyStack.push("{"),++oa;break;case".":++oa,"."===ia[oa]&&"."===ia[oa+1]&&(oa+=2,t="...");break;case"}":++oa,ba.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++oa;break;default:t=ia.substr(oa,4),">>>="===t?oa+=4:(t=t.substr(0,3),"==="===t||"!=="===t||">>>"===t||"<<="===t||">>="===t?oa+=3:(t=t.substr(0,2),"&&"===t||"||"===t||"=="===t||"!="===t||"+="===t||"-="===t||"*="===t||"/="===t||"++"===t||"--"===t||"<<"===t||">>"===t||"&="===t||"|="===t||"^="===t||"%="===t||"<="===t||">="===t||"=>"===t?oa+=2:(t=ia[oa],"<>=!+-*%&|^/".indexOf(t)>=0&&++oa)))}return oa===e.start&&te(),e.end=oa,e.value=t,e}function C(e){for(var t="";wa>oa&&n(ia[oa]);)t+=ia[oa++];return 0===t.length&&te(),c(ia.charCodeAt(oa))&&te(),{type:Xt.NumericLiteral,value:parseInt("0x"+t,16),lineNumber:ua,lineStart:ca,start:e,end:oa}}function _(e){var t,n;for(n="";wa>oa&&(t=ia[oa],"0"===t||"1"===t);)n+=ia[oa++];return 0===n.length&&te(),wa>oa&&(t=ia.charCodeAt(oa),(c(t)||a(t))&&te()),{type:Xt.NumericLiteral,value:parseInt(n,2),lineNumber:ua,lineStart:ca,start:e,end:oa}}function S(e,t){var n,i;for(r(e)?(i=!0,n="0"+ia[oa++]):(i=!1,++oa,n="");wa>oa&&r(ia[oa]);)n+=ia[oa++];return i||0!==n.length||te(),(c(ia.charCodeAt(oa))||a(ia.charCodeAt(oa)))&&te(),{type:Xt.NumericLiteral,value:parseInt(n,8),octal:i,lineNumber:ua,lineStart:ca,start:t,end:oa}}function z(){var e,t;for(e=oa+1;wa>e;++e){if(t=ia[e],"8"===t||"9"===t)return!1;if(!r(t))return!0}return!0}function F(){var e,n,i;if(i=ia[oa],t(a(i.charCodeAt(0))||"."===i,"Numeric literal must start with a decimal digit or a decimal point"),n=oa,e="","."!==i){if(e=ia[oa++],i=ia[oa],"0"===e){if("x"===i||"X"===i)return++oa,C(n);if("b"===i||"B"===i)return++oa,_(n);if("o"===i||"O"===i)return S(i,n);if(r(i)&&z())return S(i,n)}for(;a(ia.charCodeAt(oa));)e+=ia[oa++];i=ia[oa]}if("."===i){for(e+=ia[oa++];a(ia.charCodeAt(oa));)e+=ia[oa++];i=ia[oa]}if("e"===i||"E"===i)if(e+=ia[oa++],i=ia[oa],("+"===i||"-"===i)&&(e+=ia[oa++]),a(ia.charCodeAt(oa)))for(;a(ia.charCodeAt(oa));)e+=ia[oa++];else te();return c(ia.charCodeAt(oa))&&te(),{type:Xt.NumericLiteral,value:parseFloat(e),lineNumber:ua,lineStart:ca,start:n,end:oa}}function k(){var e,a,n,s,u,c="",l=!1;for(e=ia[oa],t("'"===e||'"'===e,"String literal must starts with a quote"),a=oa,++oa;wa>oa;){if(n=ia[oa++],n===e){e="";break}if("\\"===n)if(n=ia[oa++],n&&o(n.charCodeAt(0)))++ua,"\r"===n&&"\n"===ia[oa]&&++oa,ca=oa;else switch(n){case"u":case"x":if("{"===ia[oa])++oa,c+=b();else{if(s=v(n),!s)throw te();c+=s}break;case"n":c+="\n";break;case"r":c+="\r";break;case"t":c+=" ";break;case"b":c+="\b";break;case"f":c+="\f";break;case"v":c+="\x0B";break;case"8":case"9":c+=n,ae();break;default:r(n)?(u=i(n),l=u.octal||l,c+=String.fromCharCode(u.code)):c+=n}else{if(o(n.charCodeAt(0)))break;c+=n}}return""!==e&&te(),{type:Xt.StringLiteral,value:c,octal:l,lineNumber:da,lineStart:ga,start:a,end:oa}}function R(){var e,t,n,i,s,u,c,l,f="";for(i=!1,u=!1,t=oa,s="`"===ia[oa],n=2,++oa;wa>oa;){if(e=ia[oa++],"`"===e){n=1,u=!0,i=!0;break}if("$"===e){if("{"===ia[oa]){ba.curlyStack.push("${"),++oa,i=!0;break}f+=e}else if("\\"===e)if(e=ia[oa++],o(e.charCodeAt(0)))++ua,"\r"===e&&"\n"===ia[oa]&&++oa,ca=oa;else switch(e){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+=" ";break;case"u":case"x":"{"===ia[oa]?(++oa,f+=b()):(c=oa,l=v(e),l?f+=l:(oa=c,f+=e));break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+="\x0B";break;default:"0"===e?(a(ia.charCodeAt(oa))&&X(na.TemplateOctalLiteral),f+="\x00"):r(e)?X(na.TemplateOctalLiteral):f+=e}else o(e.charCodeAt(0))?(++ua,"\r"===e&&"\n"===ia[oa]&&++oa,ca=oa,f+="\n"):f+=e}return i||te(),s||ba.curlyStack.pop(),{type:Xt.Template,value:{cooked:f,raw:ia.slice(t+1,oa-n)},head:s, +tail:u,lineNumber:ua,lineStart:ca,start:t,end:oa}}function I(e,t){var a="￿",n=e;t.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,function(e,t,n){var r=parseInt(t||n,16);return r>1114111&&te(null,na.InvalidRegExp),65535>=r?String.fromCharCode(r):a}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,a));try{RegExp(n)}catch(r){te(null,na.InvalidRegExp)}try{return new RegExp(e,t)}catch(i){return null}}function M(){var e,a,n,r,i;for(e=ia[oa],t("/"===e,"Regular expression literal must start with a slash"),a=ia[oa++],n=!1,r=!1;wa>oa;)if(e=ia[oa++],a+=e,"\\"===e)e=ia[oa++],o(e.charCodeAt(0))&&te(null,na.UnterminatedRegExp),a+=e;else if(o(e.charCodeAt(0)))te(null,na.UnterminatedRegExp);else if(n)"]"===e&&(n=!1);else{if("/"===e){r=!0;break}"["===e&&(n=!0)}return r||te(null,na.UnterminatedRegExp),i=a.substr(1,a.length-2),{value:i,literal:a}}function P(){var e,t,a,n;for(t="",a="";wa>oa&&(e=ia[oa],l(e.charCodeAt(0)));)if(++oa,"\\"===e&&wa>oa)if(e=ia[oa],"u"===e){if(++oa,n=oa,e=v("u"))for(a+=e,t+="\\u";oa>n;++n)t+=ia[n];else oa=n,a+="u",t+="\\u";ae()}else t+="\\",ae();else a+=e,t+=e;return{value:a,literal:t}}function O(){var e,t,a,n;return ya=!0,va=null,w(),e=oa,t=M(),a=P(),n=I(t.value,a.value),ya=!1,Ea.tokenize?{type:Xt.RegularExpression,value:n,regex:{pattern:t.value,flags:a.value},lineNumber:ua,lineStart:ca,start:e,end:oa}:{literal:t.literal+a.literal,value:n,regex:{pattern:t.value,flags:a.value},start:e,end:oa}}function B(){var e,t,a,n;return w(),e=oa,t={start:{line:ua,column:oa-ca}},a=O(),t.end={line:ua,column:oa-ca},Ea.tokenize||(Ea.tokens.length>0&&(n=Ea.tokens[Ea.tokens.length-1],n.range[0]===e&&"Punctuator"===n.type&&("/"===n.value||"/="===n.value)&&Ea.tokens.pop()),Ea.tokens.push({type:"RegularExpression",value:a.literal,regex:a.regex,range:[e,oa],loc:t})),a}function T(e){return e.type===Xt.Identifier||e.type===Xt.Keyword||e.type===Xt.BooleanLiteral||e.type===Xt.NullLiteral}function L(){function e(e){return e&&e.length>1&&e[0]>="a"&&e[0]<="z"}var t,a,n;switch(a=Ea.tokenValues[Ea.tokens.length-1],t=null!==a,a){case"this":case"]":t=!1;break;case")":n=Ea.tokenValues[Ea.openParenToken-1],t="if"===n||"while"===n||"for"===n||"with"===n;break;case"}":t=!1,e(Ea.tokenValues[Ea.openCurlyToken-3])?(n=Ea.tokenValues[Ea.openCurlyToken-4],t=n?ea.indexOf(n)<0:!1):e(Ea.tokenValues[Ea.openCurlyToken-4])&&(n=Ea.tokenValues[Ea.openCurlyToken-5],t=n?ea.indexOf(n)<0:!0)}return t?B():x()}function N(){var e,t;return oa>=wa?{type:Xt.EOF,lineNumber:ua,lineStart:ca,start:oa,end:oa}:(e=ia.charCodeAt(oa),c(e)?(t=j(),sa&&p(t.value)&&(t.type=Xt.Keyword),t):40===e||41===e||59===e?x():39===e||34===e?k():46===e?a(ia.charCodeAt(oa+1))?F():x():a(e)?F():Ea.tokenize&&47===e?L():96===e||125===e&&"${"===ba.curlyStack[ba.curlyStack.length-1]?R():e>=55296&&57343>e&&(e=E(oa),c(e))?j():x())}function U(){var e,t,a,n;return e={start:{line:ua,column:oa-ca}},t=N(),e.end={line:ua,column:oa-ca},t.type!==Xt.EOF&&(a=ia.slice(t.start,t.end),n={type:Qt[t.type],value:a,range:[t.start,t.end],loc:e},t.regex&&(n.regex={pattern:t.regex.pattern,flags:t.regex.flags}),Ea.tokenValues&&Ea.tokenValues.push("Punctuator"===n.type||"Keyword"===n.type?n.value:null),Ea.tokenize&&(Ea.range||delete n.range,Ea.loc||delete n.loc,Ea.delegate&&(n=Ea.delegate(n))),Ea.tokens.push(n)),t}function K(){var e;return ya=!0,fa=oa,pa=ua,ma=ca,w(),e=va,ha=oa,da=ua,ga=ca,va="undefined"!=typeof Ea.tokens?U():N(),ya=!1,e}function $(){ya=!0,w(),fa=oa,pa=ua,ma=ca,ha=oa,da=ua,ga=ca,va="undefined"!=typeof Ea.tokens?U():N(),ya=!1}function H(){this.line=da,this.column=ha-ga}function J(){this.start=new H,this.end=null}function G(e){this.start={line:e.lineNumber,column:e.start-e.lineStart},this.end=null}function q(){Ea.range&&(this.range=[ha,0]),Ea.loc&&(this.loc=new J)}function W(e){Ea.range&&(this.range=[e.start,0]),Ea.loc&&(this.loc=new G(e))}function V(e){var t,a;for(t=0;t>="===e||">>>="===e||"&="===e||"^="===e||"|="===e)}function le(){return 59===ia.charCodeAt(ha)||se(";")?void K():void(la||(fa=ha,pa=da,ma=ga,va.type===Xt.EOF||se("}")||te(va)))}function fe(e){var t,a=Aa,n=Da,r=ja;return Aa=!0,Da=!0,ja=null,t=e(),null!==ja&&te(ja),Aa=a,Da=n,ja=r,t}function pe(e){var t,a=Aa,n=Da,r=ja;return Aa=!0,Da=!0,ja=null,t=e(),Aa=Aa&&a,Da=Da&&n,ja=r||ja,t}function me(e,t){var a,n,r=new q,i=[];for(ne("[");!se("]");)if(se(","))K(),i.push(null);else{if(se("...")){n=new q,K(),e.push(va),a=Qe(t),i.push(n.finishRestElement(a));break}i.push(ye(e,t)),se("]")||ne(",")}return ne("]"),r.finishArrayPattern(i)}function he(e,t){var a,n,r,i=new q,s=se("[");if(va.type===Xt.Identifier){if(n=va,a=Qe(),se("="))return e.push(n),K(),r=We(),i.finishProperty("init",a,!1,new W(n).finishAssignmentPattern(a,r),!1,!1);if(!se(":"))return e.push(n),i.finishProperty("init",a,!1,a,!1,!0)}else a=Ee();return ne(":"),r=ye(e,t),i.finishProperty("init",a,s,r,!1,!1)}function de(e,t){var a=new q,n=[];for(ne("{");!se("}");)n.push(he(e,t)),se("}")||ne(",");return K(),a.finishObjectPattern(n)}function ge(e,t){return se("[")?me(e,t):se("{")?de(e,t):(oe("let")&&("const"===t||"let"===t)&&ae(va,na.UnexpectedToken),e.push(va),Qe(t))}function ye(e,t){var a,n,r,i=va;return a=ge(e,t),se("=")&&(K(),n=ba.allowYield,ba.allowYield=!0,r=fe(We),ba.allowYield=n,a=new W(i).finishAssignmentPattern(a,r)),a}function we(){var e,t=[],a=new q;for(ne("[");!se("]");)se(",")?(K(),t.push(null)):se("...")?(e=new q,K(),e.finishSpreadElement(pe(We)),se("]")||(Da=Aa=!1,ne(",")),t.push(e)):(t.push(pe(We)),se("]")||ne(","));return K(),a.finishArrayExpression(t)}function ve(e,t,a){var n,r;return Da=Aa=!1,n=sa,r=fe(_t),sa&&t.firstRestricted&&ae(t.firstRestricted,t.message),sa&&t.stricted&&ae(t.stricted,t.message),sa=n,e.finishFunctionExpression(null,t.params,t.defaults,r,a)}function be(){var e,t,a=new q,n=ba.allowYield;return ba.allowYield=!1,e=Ft(),ba.allowYield=n,ba.allowYield=!1,t=ve(a,e,!1),ba.allowYield=n,t}function Ee(){var e,t,a=new q;switch(e=K(),e.type){case Xt.StringLiteral:case Xt.NumericLiteral:return sa&&e.octal&&ae(e,na.StrictOctalLiteral),a.finishLiteral(e);case Xt.Identifier:case Xt.BooleanLiteral:case Xt.NullLiteral:case Xt.Keyword:return a.finishIdentifier(e.value);case Xt.Punctuator:if("["===e.value)return t=fe(We),ne("]"),t}te(e)}function Ae(){switch(va.type){case Xt.Identifier:case Xt.StringLiteral:case Xt.BooleanLiteral:case Xt.NullLiteral:case Xt.NumericLiteral:case Xt.Keyword:return!0;case Xt.Punctuator:return"["===va.value}return!1}function De(e,t,a,n){var r,i,s,o,u=ba.allowYield;if(e.type===Xt.Identifier){if("get"===e.value&&Ae())return a=se("["),t=Ee(),s=new q,ne("("),ne(")"),ba.allowYield=!1,r=ve(s,{params:[],defaults:[],stricted:null,firstRestricted:null,message:null},!1),ba.allowYield=u,n.finishProperty("get",t,a,r,!1,!1);if("set"===e.value&&Ae())return a=se("["),t=Ee(),s=new q,ne("("),i={params:[],defaultCount:0,defaults:[],firstRestricted:null,paramSet:{}},se(")")?ae(va):(ba.allowYield=!1,zt(i),ba.allowYield=u,0===i.defaultCount&&(i.defaults=[])),ne(")"),ba.allowYield=!1,r=ve(s,i,!1),ba.allowYield=u,n.finishProperty("set",t,a,r,!1,!1)}else if(e.type===Xt.Punctuator&&"*"===e.value&&Ae())return a=se("["),t=Ee(),s=new q,ba.allowYield=!0,o=Ft(),ba.allowYield=u,ba.allowYield=!1,r=ve(s,o,!0),ba.allowYield=u,n.finishProperty("init",t,a,r,!0,!1);return t&&se("(")?(r=be(),n.finishProperty("init",t,a,r,!0,!1)):null}function je(e){var t,a,n,r,i,s=va,o=new q;return t=se("["),se("*")?K():a=Ee(),(n=De(s,a,t,o))?n:(a||te(va),t||(r=a.type===ta.Identifier&&"__proto__"===a.name||a.type===ta.Literal&&"__proto__"===a.value,e.value&&r&&Q(na.DuplicateProtoProperty),e.value|=r),se(":")?(K(),i=pe(We),o.finishProperty("init",a,t,i,!1,!1)):s.type===Xt.Identifier?se("=")?(ja=va,K(),i=fe(We),o.finishProperty("init",a,t,new W(s).finishAssignmentPattern(a,i),!1,!0)):o.finishProperty("init",a,t,a,!1,!0):void te(va))}function xe(){var e=[],t={value:!1},a=new q;for(ne("{");!se("}");)e.push(je(t)),se("}")||re();return ne("}"),a.finishObjectExpression(e)}function Ce(e){var t;switch(e.type){case ta.Identifier:case ta.MemberExpression:case ta.RestElement:case ta.AssignmentPattern:break;case ta.SpreadElement:e.type=ta.RestElement,Ce(e.argument);break;case ta.ArrayExpression:for(e.type=ta.ArrayPattern,t=0;t")||ne("=>"),{type:aa.ArrowParameterPlaceHolder,params:[],rawParams:[]};if(a=va,se("..."))return e=ct(r),ne(")"),se("=>")||ne("=>"),{type:aa.ArrowParameterPlaceHolder,params:[e]};if(Aa=!0,e=pe(We),se(",")){for(Da=!1,t=[e];wa>ha&&se(",");){if(K(),se("...")){for(Aa||te(va),t.push(ct(r)),ne(")"),se("=>")||ne("=>"),Aa=!1,n=0;n")){if(e.type===ta.Identifier&&"yield"===e.name)return{type:aa.ArrowParameterPlaceHolder,params:[e]};if(Aa||te(va),e.type===ta.SequenceExpression)for(n=0;nha&&(se("...")?(e=new q,K(),e.finishSpreadElement(fe(We))):e=fe(We),t.push(e),!se(")"));)re();return ne(")"),t}function Re(){var e,t=new q;return e=K(),T(e)||te(e),t.finishIdentifier(e.value)}function Ie(){return ne("."),Re()}function Me(){var e;return ne("["),e=fe(Ve),ne("]"),e}function Pe(){var e,t,a=new q;if(ie("new"),se(".")){if(K(),va.type===Xt.Identifier&&"target"===va.value&&ba.inFunctionBody)return K(),a.finishMetaProperty("new","target");te(va)}return e=fe(Be),t=se("(")?ke():[],Da=Aa=!1,a.finishNewExpression(e,t)}function Oe(){var e,t,a,n,r,i=ba.allowIn;for(r=va,ba.allowIn=!0,oe("super")&&ba.inFunctionBody?(t=new q,K(),t=t.finishSuper(),se("(")||se(".")||se("[")||te(va)):t=pe(oe("new")?Pe:Fe);;)if(se("."))Aa=!1,Da=!0,n=Ie(),t=new W(r).finishMemberExpression(".",t,n);else if(se("("))Aa=!1,Da=!1,a=ke(),t=new W(r).finishCallExpression(t,a);else if(se("["))Aa=!1,Da=!0,n=Me(),t=new W(r).finishMemberExpression("[",t,n);else{if(va.type!==Xt.Template||!va.head)break;e=Se(),t=new W(r).finishTaggedTemplateExpression(t,e)}return ba.allowIn=i,t}function Be(){var e,a,n,r;for(t(ba.allowIn,"callee of new expression always allow in keyword."),r=va,oe("super")&&ba.inFunctionBody?(a=new q,K(),a=a.finishSuper(),se("[")||se(".")||te(va)):a=pe(oe("new")?Pe:Fe);;)if(se("["))Aa=!1,Da=!0,n=Me(),a=new W(r).finishMemberExpression("[",a,n);else if(se("."))Aa=!1,Da=!0,n=Ie(),a=new W(r).finishMemberExpression(".",a,n);else{if(va.type!==Xt.Template||!va.head)break;e=Se(),a=new W(r).finishTaggedTemplateExpression(a,e)}return a}function Te(){var e,t,a=va;return e=pe(Oe),la||va.type!==Xt.Punctuator||(se("++")||se("--"))&&(sa&&e.type===ta.Identifier&&m(e.name)&&Q(na.StrictLHSPostfix),Da||Q(na.InvalidLHSInAssignment),Da=Aa=!1,t=K(),e=new W(a).finishPostfixExpression(t.value,e)),e}function Le(){var e,t,a;return va.type!==Xt.Punctuator&&va.type!==Xt.Keyword?t=Te():se("++")||se("--")?(a=va,e=K(),t=pe(Le),sa&&t.type===ta.Identifier&&m(t.name)&&Q(na.StrictLHSPrefix),Da||Q(na.InvalidLHSInAssignment),t=new W(a).finishUnaryExpression(e.value,t),Da=Aa=!1):se("+")||se("-")||se("~")||se("!")?(a=va,e=K(),t=pe(Le),t=new W(a).finishUnaryExpression(e.value,t),Da=Aa=!1):oe("delete")||oe("void")||oe("typeof")?(a=va,e=K(),t=pe(Le),t=new W(a).finishUnaryExpression(e.value,t),sa&&"delete"===t.operator&&t.argument.type===ta.Identifier&&Q(na.StrictDelete),Da=Aa=!1):t=Te(),t}function Ne(e,t){var a=0;if(e.type!==Xt.Punctuator&&e.type!==Xt.Keyword)return 0;switch(e.value){case"||":a=1;break;case"&&":a=2;break;case"|":a=3;break;case"^":a=4;break;case"&":a=5;break;case"==":case"!=":case"===":case"!==":a=6;break;case"<":case">":case"<=":case">=":case"instanceof":a=7;break;case"in":a=t?7:0;break;case"<<":case">>":case">>>":a=8;break;case"+":case"-":a=9;break;case"*":case"/":case"%":a=11}return a}function Ue(){var e,t,a,n,r,i,s,o,u,c;if(e=va,u=pe(Le),n=va,r=Ne(n,ba.allowIn),0===r)return u;for(Da=Aa=!1,n.prec=r,K(),t=[e,va],s=fe(Le),i=[u,n,s];(r=Ne(va,ba.allowIn))>0;){for(;i.length>2&&r<=i[i.length-2].prec;)s=i.pop(),o=i.pop().value,u=i.pop(),t.pop(),a=new W(t[t.length-1]).finishBinaryExpression(o,u,s),i.push(a);n=K(),n.prec=r,i.push(n),t.push(va),a=fe(Le),i.push(a)}for(c=i.length-1,a=i[c],t.pop();c>1;)a=new W(t.pop()).finishBinaryExpression(i[c-1].value,i[c-2],a),c-=2;return a}function Ke(){var e,t,a,n,r;return r=va,e=pe(Ue),se("?")&&(K(),t=ba.allowIn,ba.allowIn=!0,a=fe(We),ba.allowIn=t,ne(":"),n=fe(We),e=new W(r).finishConditionalExpression(e,a,n),Da=Aa=!1),e}function $e(){return se("{")?_t():fe(We)}function He(e,a){var n;switch(a.type){case ta.Identifier:St(e,a,a.name);break;case ta.RestElement:He(e,a.argument);break;case ta.AssignmentPattern:He(e,a.left);break;case ta.ArrayPattern:for(n=0;nt;t+=1)switch(n=r[t],n.type){case ta.AssignmentPattern:r[t]=n.left,n.right.type===ta.YieldExpression&&(n.right.argument&&te(va),n.right.type=ta.Identifier,n.right.name="yield",delete n.right.argument,delete n.right.delegate),i.push(n.right),++s,He(o,n.left);break;default:He(o,n),r[t]=n,i.push(null)}if(sa||!ba.allowYield)for(t=0,a=r.length;a>t;t+=1)n=r[t],n.type===ta.YieldExpression&&te(va);return o.message===na.StrictParamDupe&&(u=sa?o.stricted:o.firstRestricted,te(u,o.message)),0===s&&(i=[]),{params:r,defaults:i,stricted:o.stricted,firstRestricted:o.firstRestricted,message:o.message}}function Ge(e,t){var a,n,r;return la&&ae(va),ne("=>"),a=sa,n=ba.allowYield,ba.allowYield=!0,r=$e(),sa&&e.firstRestricted&&te(e.firstRestricted,e.message),sa&&e.stricted&&ae(e.stricted,e.message),sa=a,ba.allowYield=n,t.finishArrowFunctionExpression(e.params,e.defaults,r,r.type!==ta.BlockStatement)}function qe(){var e,t,a,n;return e=null,t=new q,a=!1,ie("yield"),la||(n=ba.allowYield,ba.allowYield=!1,a=se("*"),a?(K(),e=We()):se(";")||se("}")||se(")")||va.type===Xt.EOF||(e=We()),ba.allowYield=n),t.finishYieldExpression(e,a)}function We(){var e,t,a,n,r;return r=va,e=va,!ba.allowYield&&oe("yield")?qe():(t=Ke(),t.type===aa.ArrowParameterPlaceHolder||se("=>")?(Da=Aa=!1,n=Je(t),n?(ja=null,Ge(n,new W(r))):t):(ce()&&(Da||Q(na.InvalidLHSInAssignment),sa&&t.type===ta.Identifier&&(m(t.name)&&ae(e,na.StrictLHSAssignment),p(t.name)&&ae(e,na.StrictReservedWord)),se("=")?Ce(t):Da=Aa=!1,e=K(),a=fe(We),t=new W(r).finishAssignmentExpression(e.value,t,a),ja=null),t))}function Ve(){var e,t,a=va;if(e=fe(We),se(",")){for(t=[e];wa>ha&&se(",");)K(),t.push(fe(We));e=new W(a).finishSequenceExpression(t)}return e}function Ye(){if(va.type===Xt.Keyword)switch(va.value){case"export":return"module"!==ba.sourceType&&ae(va,na.IllegalExportDeclaration),Ut();case"import":return"module"!==ba.sourceType&&ae(va,na.IllegalImportDeclaration),Gt();case"const":return ut({inFor:!1});case"function":return kt(new q);case"class":return Mt()}return oe("let")&&ot()?ut({inFor:!1}):Ct()}function Ze(){for(var e=[];wa>ha&&!se("}");)e.push(Ye());return e}function Xe(){var e,t=new q;return ne("{"),e=Ze(),ne("}"),t.finishBlockStatement(e)}function Qe(e){var t,a=new q;return t=K(),t.type===Xt.Keyword&&"yield"===t.value?(sa&&ae(t,na.StrictReservedWord),ba.allowYield||te(t)):t.type!==Xt.Identifier?sa&&t.type===Xt.Keyword&&p(t.value)?ae(t,na.StrictReservedWord):(sa||"let"!==t.value||"var"!==e)&&te(t):"module"===ba.sourceType&&t.type===Xt.Identifier&&"await"===t.value&&ae(t),a.finishIdentifier(t.value)}function et(e){var t,a=null,n=new q,r=[];return t=ge(r,"var"),sa&&m(t.name)&&Q(na.StrictVarName),se("=")?(K(),a=fe(We)):t.type===ta.Identifier||e.inFor||ne("="),n.finishVariableDeclarator(t,a)}function tt(e){var t,a;for(t={inFor:e.inFor},a=[et(t)];se(",");)K(),a.push(et(t));return a}function at(e){var t;return ie("var"),t=tt({inFor:!1}),le(),e.finishVariableDeclaration(t)}function nt(e,t){var a,n=null,r=new q,i=[];return a=ge(i,e),sa&&a.type===ta.Identifier&&m(a.name)&&Q(na.StrictVarName),"const"===e?oe("in")||ue("of")||(ne("="),n=fe(We)):(!t.inFor&&a.type!==ta.Identifier||se("="))&&(ne("="),n=fe(We)),r.finishVariableDeclarator(a,n)}function rt(e,t){for(var a=[nt(e,t)];se(",");)K(),a.push(nt(e,t));return a}function it(){return{index:oa,lineNumber:ua,lineStart:ca,hasLineTerminator:la,lastIndex:fa,lastLineNumber:pa,lastLineStart:ma,startIndex:ha,startLineNumber:da,startLineStart:ga,lookahead:va,tokenCount:Ea.tokens?Ea.tokens.length:0}}function st(e){oa=e.index,ua=e.lineNumber,ca=e.lineStart,la=e.hasLineTerminator,fa=e.lastIndex,pa=e.lastLineNumber,ma=e.lastLineStart,ha=e.startIndex,da=e.startLineNumber,ga=e.startLineStart,va=e.lookahead,Ea.tokens&&Ea.tokens.splice(e.tokenCount,Ea.tokens.length)}function ot(){var e,t;return t=it(),K(),e=va.type===Xt.Identifier||se("[")||se("{")||oe("let")||oe("yield"),st(t),e}function ut(e){var a,n,r=new q;return a=K().value,t("let"===a||"const"===a,"Lexical declaration must be either let or const"),n=rt(a,e),le(),r.finishLexicalDeclaration(n,a)}function ct(e){var t,a=new q;return K(),se("{")&&X(na.ObjectPatternAsRestParameter),e.push(va),t=Qe(),se("=")&&X(na.DefaultRestParameter),se(")")||X(na.ParameterAfterRestParameter),a.finishRestElement(t)}function lt(e){return ne(";"),e.finishEmptyStatement()}function ft(e){var t=Ve();return le(),e.finishExpressionStatement(t)}function pt(e){var t,a,n;return ie("if"),ne("("),t=Ve(),ne(")"),a=Ct(),oe("else")?(K(),n=Ct()):n=null,e.finishIfStatement(t,a,n)}function mt(e){var t,a,n;return ie("do"),n=ba.inIteration,ba.inIteration=!0,t=Ct(),ba.inIteration=n,ie("while"),ne("("),a=Ve(),ne(")"),se(";")&&K(),e.finishDoWhileStatement(t,a)}function ht(e){var t,a,n;return ie("while"),ne("("),t=Ve(),ne(")"),n=ba.inIteration,ba.inIteration=!0,a=Ct(),ba.inIteration=n,e.finishWhileStatement(t,a)}function dt(e){var t,a,n,r,i,s,o,u,c,l,f,p,m=ba.allowIn;if(t=i=s=null,a=!0,ie("for"),ne("("),se(";"))K();else if(oe("var"))t=new q,K(),ba.allowIn=!1,l=tt({inFor:!0}),ba.allowIn=m,1===l.length&&oe("in")?(t=t.finishVariableDeclaration(l),K(),o=t,u=Ve(),t=null):1===l.length&&null===l[0].init&&ue("of")?(t=t.finishVariableDeclaration(l),K(),o=t,u=We(),t=null,a=!1):(t=t.finishVariableDeclaration(l),ne(";"));else if(oe("const")||oe("let"))t=new q,c=K().value,sa||"in"!==va.value?(ba.allowIn=!1,l=rt(c,{inFor:!0}),ba.allowIn=m,1===l.length&&null===l[0].init&&oe("in")?(t=t.finishLexicalDeclaration(l,c),K(),o=t,u=Ve(),t=null):1===l.length&&null===l[0].init&&ue("of")?(t=t.finishLexicalDeclaration(l,c),K(),o=t,u=We(),t=null,a=!1):(le(),t=t.finishLexicalDeclaration(l,c))):(t=t.finishIdentifier(c),K(),o=t,u=Ve(),t=null);else if(r=va,ba.allowIn=!1,t=pe(We),ba.allowIn=m,oe("in"))Da||Q(na.InvalidLHSInForIn),K(),Ce(t),o=t,u=Ve(),t=null;else if(ue("of"))Da||Q(na.InvalidLHSInForLoop),K(),Ce(t),o=t,u=We(),t=null,a=!1;else{if(se(",")){for(n=[t];se(",");)K(),n.push(fe(We));t=new W(r).finishSequenceExpression(n)}ne(";")}return"undefined"==typeof o&&(se(";")||(i=Ve()),ne(";"),se(")")||(s=Ve())),ne(")"),p=ba.inIteration,ba.inIteration=!0,f=fe(Ct),ba.inIteration=p,"undefined"==typeof o?e.finishForStatement(t,i,s,f):a?e.finishForInStatement(o,u,f):e.finishForOfStatement(o,u,f)}function gt(e){var t,a=null;return ie("continue"),59===ia.charCodeAt(ha)?(K(),ba.inIteration||X(na.IllegalContinue),e.finishContinueStatement(null)):la?(ba.inIteration||X(na.IllegalContinue),e.finishContinueStatement(null)):(va.type===Xt.Identifier&&(a=Qe(),t="$"+a.name,Object.prototype.hasOwnProperty.call(ba.labelSet,t)||X(na.UnknownLabel,a.name)),le(),null!==a||ba.inIteration||X(na.IllegalContinue),e.finishContinueStatement(a))}function yt(e){var t,a=null;return ie("break"),59===ia.charCodeAt(fa)?(K(),ba.inIteration||ba.inSwitch||X(na.IllegalBreak),e.finishBreakStatement(null)):(la?ba.inIteration||ba.inSwitch||X(na.IllegalBreak):va.type===Xt.Identifier&&(a=Qe(),t="$"+a.name,Object.prototype.hasOwnProperty.call(ba.labelSet,t)||X(na.UnknownLabel,a.name)),le(),null!==a||ba.inIteration||ba.inSwitch||X(na.IllegalBreak),e.finishBreakStatement(a))}function wt(e){var t=null;return ie("return"),ba.inFunctionBody||Q(na.IllegalReturn),32===ia.charCodeAt(fa)&&c(ia.charCodeAt(fa+1))?(t=Ve(),le(),e.finishReturnStatement(t)):la?e.finishReturnStatement(null):(se(";")||se("}")||va.type===Xt.EOF||(t=Ve()),le(),e.finishReturnStatement(t))}function vt(e){var t,a;return sa&&Q(na.StrictModeWith),ie("with"),ne("("),t=Ve(),ne(")"),a=Ct(),e.finishWithStatement(t,a)}function bt(){var e,t,a=[],n=new q;for(oe("default")?(K(),e=null):(ie("case"),e=Ve()),ne(":");wa>ha&&!(se("}")||oe("default")||oe("case"));)t=Ye(),a.push(t);return n.finishSwitchCase(e,a)}function Et(e){var t,a,n,r,i;if(ie("switch"),ne("("),t=Ve(),ne(")"),ne("{"),a=[],se("}"))return K(),e.finishSwitchStatement(t,a);for(r=ba.inSwitch,ba.inSwitch=!0,i=!1;wa>ha&&!se("}");)n=bt(),null===n.test&&(i&&X(na.MultipleDefaultsInSwitch),i=!0),a.push(n);return ba.inSwitch=r,ne("}"),e.finishSwitchStatement(t,a)}function At(e){var t;return ie("throw"),la&&X(na.NewlineAfterThrow),t=Ve(),le(),e.finishThrowStatement(t)}function Dt(){var e,t,a,n,r=[],i={},s=new q;for(ie("catch"),ne("("),se(")")&&te(va),e=ge(r),a=0;aha&&va.type===Xt.StringLiteral&&(t=va,e=Ye(),c.push(e),e.expression.type===ta.Literal);)a=ia.slice(t.start+1,t.end-1),"use strict"===a?(sa=!0,n&&ae(n,na.StrictOctalLiteral)):!n&&t.octal&&(n=t);for(r=ba.labelSet,i=ba.inIteration,s=ba.inSwitch,o=ba.inFunctionBody,u=ba.parenthesizedCount,ba.labelSet={},ba.inIteration=!1,ba.inSwitch=!1,ba.inFunctionBody=!0,ba.parenthesizedCount=0;wa>ha&&!se("}");)c.push(Ye());return ne("}"),ba.labelSet=r,ba.inIteration=i,ba.inSwitch=s,ba.inFunctionBody=o,ba.parenthesizedCount=u,l.finishBlockStatement(c)}function St(e,t,a){var n="$"+a;sa?(m(a)&&(e.stricted=t,e.message=na.StrictParamName),Object.prototype.hasOwnProperty.call(e.paramSet,n)&&(e.stricted=t,e.message=na.StrictParamDupe)):e.firstRestricted||(m(a)?(e.firstRestricted=t,e.message=na.StrictParamName):p(a)?(e.firstRestricted=t,e.message=na.StrictReservedWord):Object.prototype.hasOwnProperty.call(e.paramSet,n)&&(e.stricted=t,e.message=na.StrictParamDupe)),e.paramSet[n]=!0}function zt(e){var t,a,n,r,i=[];if(t=va,"..."===t.value)return a=ct(i),St(e,a.argument,a.argument.name),e.params.push(a),e.defaults.push(null),!1;for(a=ye(i),n=0;nha&&zt(t);)ne(",");return ne(")"),0===t.defaultCount&&(t.defaults=[]),{params:t.params,defaults:t.defaults,stricted:t.stricted,firstRestricted:t.firstRestricted,message:t.message}}function kt(e,t){var a,n,r,i,s,o,u,c,l,f=null,h=[],d=[];return l=ba.allowYield,ie("function"),c=se("*"),c&&K(),t&&se("(")||(n=va,f=Qe(),sa?m(n.value)&&ae(n,na.StrictFunctionName):m(n.value)?(s=n,o=na.StrictFunctionName):p(n.value)&&(s=n,o=na.StrictReservedWord)),ba.allowYield=!c,i=Ft(s),h=i.params,d=i.defaults,r=i.stricted,s=i.firstRestricted,i.message&&(o=i.message),u=sa,a=_t(),sa&&s&&te(s,o),sa&&r&&ae(r,o),sa=u,ba.allowYield=l,e.finishFunctionDeclaration(f,h,d,a,c)}function Rt(){var e,t,a,n,r,i,s,o,u,c=null,l=[],f=[],h=new q;return u=ba.allowYield,ie("function"),o=se("*"),o&&K(),ba.allowYield=!o,se("(")||(e=va,c=sa||o||!oe("yield")?Qe():Re(),sa?m(e.value)&&ae(e,na.StrictFunctionName):m(e.value)?(a=e,n=na.StrictFunctionName):p(e.value)&&(a=e,n=na.StrictReservedWord)),r=Ft(a),l=r.params,f=r.defaults,t=r.stricted,a=r.firstRestricted,r.message&&(n=r.message),s=sa,i=_t(),sa&&a&&te(a,n),sa&&t&&ae(t,n),sa=s,ba.allowYield=u,h.finishFunctionExpression(c,l,f,i,o)}function It(){var e,t,a,n,r,i,s,o=!1;for(e=new q,ne("{"),n=[];!se("}");)se(";")?K():(r=new q,t=va,a=!1,i=se("["),se("*")?K():(s=Ee(),"static"===s.name&&(Ae()||se("*"))&&(t=va,a=!0,i=se("["),se("*")?K():s=Ee())),r=De(t,s,i,r),r?(r["static"]=a,"init"===r.kind&&(r.kind="method"),a?r.computed||"prototype"!==(r.key.name||r.key.value.toString())||te(t,na.StaticPrototype):r.computed||"constructor"!==(r.key.name||r.key.value.toString())||(("method"!==r.kind||!r.method||r.value.generator)&&te(t,na.ConstructorSpecialMethod),o?te(t,na.DuplicateConstructor):o=!0,r.kind="constructor"),r.type=ta.MethodDefinition,delete r.method,delete r.shorthand,n.push(r)):te(va));return K(),e.finishClassBody(n)}function Mt(e){var t,a=null,n=null,r=new q,i=sa;return sa=!0,ie("class"),e&&va.type!==Xt.Identifier||(a=Qe()),oe("extends")&&(K(),n=fe(Oe)),t=It(),sa=i,r.finishClassDeclaration(a,n,t)}function Pt(){var e,t=null,a=null,n=new q,r=sa;return sa=!0,ie("class"),va.type===Xt.Identifier&&(t=Qe()),oe("extends")&&(K(),a=fe(Oe)),e=It(),sa=r,n.finishClassExpression(t,a,e)}function Ot(){var e=new q;return va.type!==Xt.StringLiteral&&X(na.InvalidModuleSpecifier),e.finishLiteral(K())}function Bt(){var e,t,a,n=new q;return oe("default")?(a=new q,K(),t=a.finishIdentifier("default")):t=Qe(),ue("as")&&(K(),e=Re()),n.finishExportSpecifier(t,e)}function Tt(e){var t,a=null,n=null,r=[];if(va.type===Xt.Keyword)switch(va.value){case"let":case"const":return a=ut({inFor:!1}),e.finishExportNamedDeclaration(a,r,null);case"var":case"class":case"function":return a=Ye(),e.finishExportNamedDeclaration(a,r,null)}for(ne("{");!se("}")&&(t=t||oe("default"),r.push(Bt()),se("}")||(ne(","),!se("}"))););return ne("}"),ue("from")?(K(),n=Ot(),le()):t?X(va.value?na.UnexpectedToken:na.MissingFromClause,va.value):le(),e.finishExportNamedDeclaration(a,r,n)}function Lt(e){var t=null,a=null;return ie("default"),oe("function")?(t=kt(new q,!0),e.finishExportDefaultDeclaration(t)):oe("class")?(t=Mt(!0),e.finishExportDefaultDeclaration(t)):(ue("from")&&X(na.UnexpectedToken,va.value),a=se("{")?xe():se("[")?we():We(),le(),e.finishExportDefaultDeclaration(a))}function Nt(e){var t;return ne("*"),ue("from")||X(va.value?na.UnexpectedToken:na.MissingFromClause,va.value),K(),t=Ot(),le(),e.finishExportAllDeclaration(t)}function Ut(){var e=new q;return ba.inFunctionBody&&X(na.IllegalExportDeclaration),ie("export"),oe("default")?Lt(e):se("*")?Nt(e):Tt(e)}function Kt(){var e,t,a=new q;return t=Re(),ue("as")&&(K(),e=Qe()),a.finishImportSpecifier(e,t)}function $t(){var e=[];for(ne("{");!se("}")&&(e.push(Kt()),se("}")||(ne(","),!se("}"))););return ne("}"),e}function Ht(){var e,t=new q;return e=Re(),t.finishImportDefaultSpecifier(e)}function Jt(){var e,t=new q;return ne("*"),ue("as")||X(na.NoAsAfterImportNamespace),K(),e=Re(),t.finishImportNamespaceSpecifier(e)}function Gt(){var e,t=[],a=new q;return ba.inFunctionBody&&X(na.IllegalImportDeclaration),ie("import"),va.type===Xt.StringLiteral?e=Ot():(se("{")?t=t.concat($t()):se("*")?t.push(Jt()):T(va)&&!oe("default")?(t.push(Ht()),se(",")&&(K(),se("*")?t.push(Jt()):se("{")?t=t.concat($t()):te(va))):te(K()),ue("from")||X(va.value?na.UnexpectedToken:na.MissingFromClause,va.value), +K(),e=Ot()),le(),a.finishImportDeclaration(t,e)}function qt(){for(var e,t,a,n,r=[];wa>ha&&(t=va,t.type===Xt.StringLiteral)&&(e=Ye(),r.push(e),e.expression.type===ta.Literal);)a=ia.slice(t.start+1,t.end-1),"use strict"===a?(sa=!0,n&&ae(n,na.StrictOctalLiteral)):!n&&t.octal&&(n=t);for(;wa>ha&&(e=Ye(),"undefined"!=typeof e);)r.push(e);return r}function Wt(){var e,t;return $(),t=new q,e=qt(),t.finishProgram(e,ba.sourceType)}function Vt(){var e,t,a,n=[];for(e=0;e0?1:0,ca=0,ha=oa,da=ua,ga=ca,wa=ia.length,va=null,ba={allowIn:!0,allowYield:!0,labelSet:{},inFunctionBody:!1,inIteration:!1,inSwitch:!1,lastCommentStart:-1,curlyStack:[]},Ea={},t=t||{},t.tokens=!0,Ea.tokens=[],Ea.tokenValues=[],Ea.tokenize=!0,Ea.delegate=a,Ea.openParenToken=-1,Ea.openCurlyToken=-1,Ea.range="boolean"==typeof t.range&&t.range,Ea.loc="boolean"==typeof t.loc&&t.loc,"boolean"==typeof t.comment&&t.comment&&(Ea.comments=[]),"boolean"==typeof t.tolerant&&t.tolerant&&(Ea.errors=[]);try{if($(),va.type===Xt.EOF)return Ea.tokens;for(K();va.type!==Xt.EOF;)try{K()}catch(i){if(Ea.errors){V(i);break}throw i}r=Ea.tokens,"undefined"!=typeof Ea.errors&&(r.errors=Ea.errors)}catch(s){throw s}finally{Ea={}}return r}function Zt(e,t){var a,n;n=String,"string"==typeof e||e instanceof String||(e=n(e)),ia=e,oa=0,ua=ia.length>0?1:0,ca=0,ha=oa,da=ua,ga=ca,wa=ia.length,va=null,ba={allowIn:!0,allowYield:!0,labelSet:{},inFunctionBody:!1,inIteration:!1,inSwitch:!1,lastCommentStart:-1,curlyStack:[],sourceType:"script"},sa=!1,Ea={},"undefined"!=typeof t&&(Ea.range="boolean"==typeof t.range&&t.range,Ea.loc="boolean"==typeof t.loc&&t.loc,Ea.attachComment="boolean"==typeof t.attachComment&&t.attachComment,Ea.loc&&null!==t.source&&void 0!==t.source&&(Ea.source=n(t.source)),"boolean"==typeof t.tokens&&t.tokens&&(Ea.tokens=[]),"boolean"==typeof t.comment&&t.comment&&(Ea.comments=[]),"boolean"==typeof t.tolerant&&t.tolerant&&(Ea.errors=[]),Ea.attachComment&&(Ea.range=!0,Ea.comments=[],Ea.bottomRightStack=[],Ea.trailingComments=[],Ea.leadingComments=[]),"module"===t.sourceType&&(ba.sourceType=t.sourceType,sa=!0));try{a=Wt(),"undefined"!=typeof Ea.comments&&(a.comments=Ea.comments),"undefined"!=typeof Ea.tokens&&(Vt(),a.tokens=Ea.tokens),"undefined"!=typeof Ea.errors&&(a.errors=Ea.errors)}catch(r){throw r}finally{Ea={}}return a}var Xt,Qt,ea,ta,aa,na,ra,ia,sa,oa,ua,ca,la,fa,pa,ma,ha,da,ga,ya,wa,va,ba,Ea,Aa,Da,ja;Xt={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8,RegularExpression:9,Template:10},Qt={},Qt[Xt.BooleanLiteral]="Boolean",Qt[Xt.EOF]="",Qt[Xt.Identifier]="Identifier",Qt[Xt.Keyword]="Keyword",Qt[Xt.NullLiteral]="Null",Qt[Xt.NumericLiteral]="Numeric",Qt[Xt.Punctuator]="Punctuator",Qt[Xt.StringLiteral]="String",Qt[Xt.RegularExpression]="RegularExpression",Qt[Xt.Template]="Template",ea=["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="],ta={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"},aa={ArrowParameterPlaceHolder:"ArrowParameterPlaceHolder"},na={UnexpectedToken:"Unexpected token %0",UnexpectedNumber:"Unexpected number",UnexpectedString:"Unexpected string",UnexpectedIdentifier:"Unexpected identifier",UnexpectedReserved:"Unexpected reserved word",UnexpectedTemplate:"Unexpected quasi %0",UnexpectedEOS:"Unexpected end of input",NewlineAfterThrow:"Illegal newline after throw",InvalidRegExp:"Invalid regular expression",UnterminatedRegExp:"Invalid regular expression: missing /",InvalidLHSInAssignment:"Invalid left-hand side in assignment",InvalidLHSInForIn:"Invalid left-hand side in for-in",InvalidLHSInForLoop:"Invalid left-hand side in for-loop",MultipleDefaultsInSwitch:"More than one default clause in switch statement",NoCatchOrFinally:"Missing catch or finally after try",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared",IllegalContinue:"Illegal continue statement",IllegalBreak:"Illegal break statement",IllegalReturn:"Illegal return statement",StrictModeWith:"Strict mode code may not include a with statement",StrictCatchVariable:"Catch variable may not be eval or arguments in strict mode",StrictVarName:"Variable name may not be eval or arguments in strict mode",StrictParamName:"Parameter name eval or arguments is not allowed in strict mode",StrictParamDupe:"Strict mode function may not have duplicate parameter names",StrictFunctionName:"Function name may not be eval or arguments in strict mode",StrictOctalLiteral:"Octal literals are not allowed in strict mode.",StrictDelete:"Delete of an unqualified identifier in strict mode.",StrictLHSAssignment:"Assignment to eval or arguments is not allowed in strict mode",StrictLHSPostfix:"Postfix increment/decrement may not have eval or arguments operand in strict mode",StrictLHSPrefix:"Prefix increment/decrement may not have eval or arguments operand in strict mode",StrictReservedWord:"Use of future reserved word in strict mode",TemplateOctalLiteral:"Octal literals are not allowed in template strings.",ParameterAfterRestParameter:"Rest parameter must be last formal parameter",DefaultRestParameter:"Unexpected token =",ObjectPatternAsRestParameter:"Unexpected token {",DuplicateProtoProperty:"Duplicate __proto__ fields are not allowed in object literals",ConstructorSpecialMethod:"Class constructor may not be an accessor",DuplicateConstructor:"A class may only have one constructor",StaticPrototype:"Classes may not have static property named prototype",MissingFromClause:"Unexpected token",NoAsAfterImportNamespace:"Unexpected token",InvalidModuleSpecifier:"Unexpected token",IllegalImportDeclaration:"Unexpected token",IllegalExportDeclaration:"Unexpected token",DuplicateBinding:"Duplicate binding %0"},ra={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDE00-\uDE11\uDE13-\uDE2B\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDE00-\uDE2F\uDE44\uDE80-\uDEAA]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDD0-\uDDDA\uDE00-\uDE11\uDE13-\uDE37\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF01-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},W.prototype=q.prototype={processComment:function(){var e,t,a,n,r,i,s=Ea.bottomRightStack,o=s[s.length-1];if(!(this.type===ta.Program&&this.body.length>0)){if(this.type===ta.BlockStatement&&0===this.body.length){for(t=[],r=Ea.leadingComments.length-1;r>=0;--r)i=Ea.leadingComments[r],this.range[1]>=i.range[1]&&(t.unshift(i),Ea.leadingComments.splice(r,1),Ea.trailingComments.splice(r,1));if(t.length)return void(this.innerComments=t)}if(Ea.trailingComments.length>0){for(n=[],r=Ea.trailingComments.length-1;r>=0;--r)i=Ea.trailingComments[r],i.range[0]>=this.range[1]&&(n.unshift(i),Ea.trailingComments.splice(r,1));Ea.trailingComments=[]}else o&&o.trailingComments&&o.trailingComments[0].range[0]>=this.range[1]&&(n=o.trailingComments,delete o.trailingComments);for(;o&&o.range[0]>=this.range[0];)e=s.pop(),o=s[s.length-1];if(e){if(e.leadingComments){for(a=[],r=e.leadingComments.length-1;r>=0;--r)i=e.leadingComments[r],i.range[1]<=this.range[0]&&(a.unshift(i),e.leadingComments.splice(r,1));e.leadingComments.length||(e.leadingComments=void 0)}}else if(Ea.leadingComments.length>0)for(a=[],r=Ea.leadingComments.length-1;r>=0;--r)i=Ea.leadingComments[r],i.range[1]<=this.range[0]&&(a.unshift(i),Ea.leadingComments.splice(r,1));a&&a.length>0&&(this.leadingComments=a),n&&n.length>0&&(this.trailingComments=n),s.push(this)}},finish:function(){Ea.range&&(this.range[1]=fa),Ea.loc&&(this.loc.end={line:pa,column:fa-ma},Ea.source&&(this.loc.source=Ea.source)),Ea.attachComment&&this.processComment()},finishArrayExpression:function(e){return this.type=ta.ArrayExpression,this.elements=e,this.finish(),this},finishArrayPattern:function(e){return this.type=ta.ArrayPattern,this.elements=e,this.finish(),this},finishArrowFunctionExpression:function(e,t,a,n){return this.type=ta.ArrowFunctionExpression,this.id=null,this.params=e,this.defaults=t,this.body=a,this.generator=!1,this.expression=n,this.finish(),this},finishAssignmentExpression:function(e,t,a){return this.type=ta.AssignmentExpression,this.operator=e,this.left=t,this.right=a,this.finish(),this},finishAssignmentPattern:function(e,t){return this.type=ta.AssignmentPattern,this.left=e,this.right=t,this.finish(),this},finishBinaryExpression:function(e,t,a){return this.type="||"===e||"&&"===e?ta.LogicalExpression:ta.BinaryExpression,this.operator=e,this.left=t,this.right=a,this.finish(),this},finishBlockStatement:function(e){return this.type=ta.BlockStatement,this.body=e,this.finish(),this},finishBreakStatement:function(e){return this.type=ta.BreakStatement,this.label=e,this.finish(),this},finishCallExpression:function(e,t){return this.type=ta.CallExpression,this.callee=e,this.arguments=t,this.finish(),this},finishCatchClause:function(e,t){return this.type=ta.CatchClause,this.param=e,this.body=t,this.finish(),this},finishClassBody:function(e){return this.type=ta.ClassBody,this.body=e,this.finish(),this},finishClassDeclaration:function(e,t,a){return this.type=ta.ClassDeclaration,this.id=e,this.superClass=t,this.body=a,this.finish(),this},finishClassExpression:function(e,t,a){return this.type=ta.ClassExpression,this.id=e,this.superClass=t,this.body=a,this.finish(),this},finishConditionalExpression:function(e,t,a){return this.type=ta.ConditionalExpression,this.test=e,this.consequent=t,this.alternate=a,this.finish(),this},finishContinueStatement:function(e){return this.type=ta.ContinueStatement,this.label=e,this.finish(),this},finishDebuggerStatement:function(){return this.type=ta.DebuggerStatement,this.finish(),this},finishDoWhileStatement:function(e,t){return this.type=ta.DoWhileStatement,this.body=e,this.test=t,this.finish(),this},finishEmptyStatement:function(){return this.type=ta.EmptyStatement,this.finish(),this},finishExpressionStatement:function(e){return this.type=ta.ExpressionStatement,this.expression=e,this.finish(),this},finishForStatement:function(e,t,a,n){return this.type=ta.ForStatement,this.init=e,this.test=t,this.update=a,this.body=n,this.finish(),this},finishForOfStatement:function(e,t,a){return this.type=ta.ForOfStatement,this.left=e,this.right=t,this.body=a,this.finish(),this},finishForInStatement:function(e,t,a){return this.type=ta.ForInStatement,this.left=e,this.right=t,this.body=a,this.each=!1,this.finish(),this},finishFunctionDeclaration:function(e,t,a,n,r){return this.type=ta.FunctionDeclaration,this.id=e,this.params=t,this.defaults=a,this.body=n,this.generator=r,this.expression=!1,this.finish(),this},finishFunctionExpression:function(e,t,a,n,r){return this.type=ta.FunctionExpression,this.id=e,this.params=t,this.defaults=a,this.body=n,this.generator=r,this.expression=!1,this.finish(),this},finishIdentifier:function(e){return this.type=ta.Identifier,this.name=e,this.finish(),this},finishIfStatement:function(e,t,a){return this.type=ta.IfStatement,this.test=e,this.consequent=t,this.alternate=a,this.finish(),this},finishLabeledStatement:function(e,t){return this.type=ta.LabeledStatement,this.label=e,this.body=t,this.finish(),this},finishLiteral:function(e){return this.type=ta.Literal,this.value=e.value,this.raw=ia.slice(e.start,e.end),e.regex&&(this.regex=e.regex),this.finish(),this},finishMemberExpression:function(e,t,a){return this.type=ta.MemberExpression,this.computed="["===e,this.object=t,this.property=a,this.finish(),this},finishMetaProperty:function(e,t){return this.type=ta.MetaProperty,this.meta=e,this.property=t,this.finish(),this},finishNewExpression:function(e,t){return this.type=ta.NewExpression,this.callee=e,this.arguments=t,this.finish(),this},finishObjectExpression:function(e){return this.type=ta.ObjectExpression,this.properties=e,this.finish(),this},finishObjectPattern:function(e){return this.type=ta.ObjectPattern,this.properties=e,this.finish(),this},finishPostfixExpression:function(e,t){return this.type=ta.UpdateExpression,this.operator=e,this.argument=t,this.prefix=!1,this.finish(),this},finishProgram:function(e,t){return this.type=ta.Program,this.body=e,this.sourceType=t,this.finish(),this},finishProperty:function(e,t,a,n,r,i){return this.type=ta.Property,this.key=t,this.computed=a,this.value=n,this.kind=e,this.method=r,this.shorthand=i,this.finish(),this},finishRestElement:function(e){return this.type=ta.RestElement,this.argument=e,this.finish(),this},finishReturnStatement:function(e){return this.type=ta.ReturnStatement,this.argument=e,this.finish(),this},finishSequenceExpression:function(e){return this.type=ta.SequenceExpression,this.expressions=e,this.finish(),this},finishSpreadElement:function(e){return this.type=ta.SpreadElement,this.argument=e,this.finish(),this},finishSwitchCase:function(e,t){return this.type=ta.SwitchCase,this.test=e,this.consequent=t,this.finish(),this},finishSuper:function(){return this.type=ta.Super,this.finish(),this},finishSwitchStatement:function(e,t){return this.type=ta.SwitchStatement,this.discriminant=e,this.cases=t,this.finish(),this},finishTaggedTemplateExpression:function(e,t){return this.type=ta.TaggedTemplateExpression,this.tag=e,this.quasi=t,this.finish(),this},finishTemplateElement:function(e,t){return this.type=ta.TemplateElement,this.value=e,this.tail=t,this.finish(),this},finishTemplateLiteral:function(e,t){return this.type=ta.TemplateLiteral,this.quasis=e,this.expressions=t,this.finish(),this},finishThisExpression:function(){return this.type=ta.ThisExpression,this.finish(),this},finishThrowStatement:function(e){return this.type=ta.ThrowStatement,this.argument=e,this.finish(),this},finishTryStatement:function(e,t,a){return this.type=ta.TryStatement,this.block=e,this.guardedHandlers=[],this.handlers=t?[t]:[],this.handler=t,this.finalizer=a,this.finish(),this},finishUnaryExpression:function(e,t){return this.type="++"===e||"--"===e?ta.UpdateExpression:ta.UnaryExpression,this.operator=e,this.argument=t,this.prefix=!0,this.finish(),this},finishVariableDeclaration:function(e){return this.type=ta.VariableDeclaration,this.declarations=e,this.kind="var",this.finish(),this},finishLexicalDeclaration:function(e,t){return this.type=ta.VariableDeclaration,this.declarations=e,this.kind=t,this.finish(),this},finishVariableDeclarator:function(e,t){return this.type=ta.VariableDeclarator,this.id=e,this.init=t,this.finish(),this},finishWhileStatement:function(e,t){return this.type=ta.WhileStatement,this.test=e,this.body=t,this.finish(),this},finishWithStatement:function(e,t){return this.type=ta.WithStatement,this.object=e,this.body=t,this.finish(),this},finishExportSpecifier:function(e,t){return this.type=ta.ExportSpecifier,this.exported=t||e,this.local=e,this.finish(),this},finishImportDefaultSpecifier:function(e){return this.type=ta.ImportDefaultSpecifier,this.local=e,this.finish(),this},finishImportNamespaceSpecifier:function(e){return this.type=ta.ImportNamespaceSpecifier,this.local=e,this.finish(),this},finishExportNamedDeclaration:function(e,t,a){return this.type=ta.ExportNamedDeclaration,this.declaration=e,this.specifiers=t,this.source=a,this.finish(),this},finishExportDefaultDeclaration:function(e){return this.type=ta.ExportDefaultDeclaration,this.declaration=e,this.finish(),this},finishExportAllDeclaration:function(e){return this.type=ta.ExportAllDeclaration,this.source=e,this.finish(),this},finishImportSpecifier:function(e,t){return this.type=ta.ImportSpecifier,this.local=e||t,this.imported=t,this.finish(),this},finishImportDeclaration:function(e,t){return this.type=ta.ImportDeclaration,this.specifiers=e,this.source=t,this.finish(),this},finishYieldExpression:function(e,t){return this.type=ta.YieldExpression,this.argument=e, +this.delegate=t,this.finish(),this}},e.version="2.7.1",e.tokenize=Yt,e.parse=Zt,e.Syntax=function(){var e,t={};"function"==typeof Object.create&&(t=Object.create(null));for(e in ta)ta.hasOwnProperty(e)&&(t[e]=ta[e]);return"function"==typeof Object.freeze&&Object.freeze(t),t}()})},{}],31:[function(e,t,a){function n(e){var t=e.fake,a=e.helpers;return this.zipCode=function(t){if("undefined"==typeof t){var n=e.definitions.address.postcode;t="string"==typeof n?n:e.random.arrayElement(n)}return a.replaceSymbols(t)},this.city=function(a){var n=["{{address.cityPrefix}} {{name.firstName}} {{address.citySuffix}}","{{address.cityPrefix}} {{name.firstName}}","{{name.firstName}} {{address.citySuffix}}","{{name.lastName}} {{address.citySuffix}}"];return"number"!=typeof a&&(a=e.random.number(n.length-1)),t(n[a])},this.cityPrefix=function(){return e.random.arrayElement(e.definitions.address.city_prefix)},this.citySuffix=function(){return e.random.arrayElement(e.definitions.address.city_suffix)},this.streetName=function(){var t,a=e.address.streetSuffix();switch(""!==a&&(a=" "+a),e.random.number(1)){case 0:t=e.name.lastName()+a;break;case 1:t=e.name.firstName()+a}return t},this.streetAddress=function(t){void 0===t&&(t=!1);var n="";switch(e.random.number(2)){case 0:n=a.replaceSymbolWithNumber("#####")+" "+e.address.streetName();break;case 1:n=a.replaceSymbolWithNumber("####")+" "+e.address.streetName();break;case 2:n=a.replaceSymbolWithNumber("###")+" "+e.address.streetName()}return t?n+" "+e.address.secondaryAddress():n},this.streetSuffix=function(){return e.random.arrayElement(e.definitions.address.street_suffix)},this.streetPrefix=function(){return e.random.arrayElement(e.definitions.address.street_prefix)},this.secondaryAddress=function(){return a.replaceSymbolWithNumber(e.random.arrayElement(["Apt. ###","Suite ###"]))},this.county=function(){return e.random.arrayElement(e.definitions.address.county)},this.country=function(){return e.random.arrayElement(e.definitions.address.country)},this.countryCode=function(){return e.random.arrayElement(e.definitions.address.country_code)},this.state=function(t){return e.random.arrayElement(e.definitions.address.state)},this.stateAbbr=function(){return e.random.arrayElement(e.definitions.address.state_abbr)},this.latitude=function(){return(e.random.number(18e5)/1e4-90).toFixed(4)},this.longitude=function(){return(e.random.number(36e5)/1e4-180).toFixed(4)},this}t.exports=n},{}],32:[function(e,t,a){var n=function(e){var t=this;return t.color=function(){return e.random.arrayElement(e.definitions.commerce.color)},t.department=function(t,a){return e.random.arrayElement(e.definitions.commerce.department)},t.productName=function(){return e.commerce.productAdjective()+" "+e.commerce.productMaterial()+" "+e.commerce.product()},t.price=function(e,t,a,n){return e=e||0,t=t||1e3,a=a||2,n=n||"",0>e||0>t?n+0:n+(Math.round((Math.random()*(t-e)+e)*Math.pow(10,a))/Math.pow(10,a)).toFixed(a)},t.productAdjective=function(){return e.random.arrayElement(e.definitions.commerce.product_name.adjective)},t.productMaterial=function(){return e.random.arrayElement(e.definitions.commerce.product_name.material)},t.product=function(){return e.random.arrayElement(e.definitions.commerce.product_name.product)},t};t.exports=n},{}],33:[function(e,t,a){var n=function(e){var t=e.fake;this.suffixes=function(){return e.definitions.company.suffix.slice(0)},this.companyName=function(a){var n=["{{name.lastName}} {{company.companySuffix}}","{{name.lastName}} - {{name.lastName}}","{{name.lastName}}, {{name.lastName}} and {{name.lastName}}"];return"number"!=typeof a&&(a=e.random.number(n.length-1)),t(n[a])},this.companySuffix=function(){return e.random.arrayElement(e.company.suffixes())},this.catchPhrase=function(){return t("{{company.catchPhraseAdjective}} {{company.catchPhraseDescriptor}} {{company.catchPhraseNoun}}")},this.bs=function(){return t("{{company.bsAdjective}} {{company.bsBuzz}} {{company.bsNoun}}")},this.catchPhraseAdjective=function(){return e.random.arrayElement(e.definitions.company.adjective)},this.catchPhraseDescriptor=function(){return e.random.arrayElement(e.definitions.company.descriptor)},this.catchPhraseNoun=function(){return e.random.arrayElement(e.definitions.company.noun)},this.bsAdjective=function(){return e.random.arrayElement(e.definitions.company.bs_adjective)},this.bsBuzz=function(){return e.random.arrayElement(e.definitions.company.bs_verb)},this.bsNoun=function(){return e.random.arrayElement(e.definitions.company.bs_noun)}};t.exports=n},{}],34:[function(e,t,a){var n=function(e){var t=this;return t.past=function(t,a){var n=a?new Date(Date.parse(a)):new Date,r={min:1e3,max:365*(t||1)*24*3600*1e3},i=n.getTime();return i-=e.random.number(r),n.setTime(i),n},t.future=function(t,a){var n=a?new Date(Date.parse(a)):new Date,r={min:1e3,max:365*(t||1)*24*3600*1e3},i=n.getTime();return i+=e.random.number(r),n.setTime(i),n},t.between=function(t,a){var n=Date.parse(t),r=e.random.number(Date.parse(a)-n),i=new Date(n+r);return i},t.recent=function(t){var a=new Date,n={min:1e3,max:24*(t||1)*3600*1e3},r=a.getTime();return r-=e.random.number(n),a.setTime(r),a},t.month=function(t){t=t||{};var a="wide";t.abbr&&(a="abbr"),t.context&&"undefined"!=typeof e.definitions.date.month[a+"_context"]&&(a+="_context");var n=e.definitions.date.month[a];return e.random.arrayElement(n)},t.weekday=function(t){t=t||{};var a="wide";t.abbr&&(a="abbr"),t.context&&"undefined"!=typeof e.definitions.date.weekday[a+"_context"]&&(a+="_context");var n=e.definitions.date.weekday[a];return e.random.arrayElement(n)},t};t.exports=n},{}],35:[function(e,t,a){function n(e){return this.fake=function t(a){var n="";if("string"!=typeof a||0===a.length)return n="string parameter is required!";var r=a.search("{{"),i=a.search("}}");if(-1===r&&-1===i)return a;var s=a.substr(r+2,i-r-2);s=s.replace("}}",""),s=s.replace("{{","");var o=s.split(".");if("undefined"==typeof e[o[0]])throw new Error("Invalid module: "+o[0]);if("undefined"==typeof e[o[0]][o[1]])throw new Error("Invalid method: "+o[0]+"."+o[1]);var u=e[o[0]][o[1]];return n=a.replace("{{"+s+"}}",u()),t(n)},this}t.exports=n},{}],36:[function(e,t,a){var n=function(e){var t=e.helpers,a=this;a.account=function(e){e=e||8;for(var a="",n=0;e>n;n++)a+="#";return e=null,t.replaceSymbolWithNumber(a)},a.accountName=function(){return[t.randomize(e.definitions.finance.account_type),"Account"].join(" ")},a.mask=function(e,a,n){e=0!=e&&e&&"undefined"!=typeof e?e:4,a=null===a?!0:a,n=null===n?!0:n;for(var r="",i=0;e>i;i++)r+="#";return r=n?["...",r].join(""):r,r=a?["(",r,")"].join(""):r,r=t.replaceSymbolWithNumber(r)},a.amount=function(e,t,a,n){return e=e||0,t=t||1e3,a=a||2,n=n||"",n+(Math.round((Math.random()*(t-e)+e)*Math.pow(10,a))/Math.pow(10,a)).toFixed(a)},a.transactionType=function(){return t.randomize(e.definitions.finance.transaction_type)},a.currencyCode=function(){return e.random.objectElement(e.definitions.finance.currency).code},a.currencyName=function(){return e.random.objectElement(e.definitions.finance.currency,"key")},a.currencySymbol=function(){for(var t;!t;)t=e.random.objectElement(e.definitions.finance.currency).symbol;return t}};t.exports=n},{}],37:[function(e,t,a){var n=function(e){var t=this;return t.abbreviation=function(){return e.random.arrayElement(e.definitions.hacker.abbreviation)},t.adjective=function(){return e.random.arrayElement(e.definitions.hacker.adjective)},t.noun=function(){return e.random.arrayElement(e.definitions.hacker.noun)},t.verb=function(){return e.random.arrayElement(e.definitions.hacker.verb)},t.ingverb=function(){return e.random.arrayElement(e.definitions.hacker.ingverb)},t.phrase=function(){var a={abbreviation:t.abbreviation(),adjective:t.adjective(),ingverb:t.ingverb(),noun:t.noun(),verb:t.verb()},n=e.random.arrayElement(["If we {{verb}} the {{noun}}, we can get to the {{abbreviation}} {{noun}} through the {{adjective}} {{abbreviation}} {{noun}}!","We need to {{verb}} the {{adjective}} {{abbreviation}} {{noun}}!","Try to {{verb}} the {{abbreviation}} {{noun}}, maybe it will {{verb}} the {{adjective}} {{noun}}!","You can't {{verb}} the {{noun}} without {{ingverb}} the {{adjective}} {{abbreviation}} {{noun}}!","Use the {{adjective}} {{abbreviation}} {{noun}}, then you can {{verb}} the {{adjective}} {{noun}}!","The {{abbreviation}} {{noun}} is down, {{verb}} the {{adjective}} {{noun}} so we can {{verb}} the {{abbreviation}} {{noun}}!","{{ingverb}} the {{noun}} won't do anything, we need to {{verb}} the {{adjective}} {{abbreviation}} {{noun}}!","I'll {{verb}} the {{adjective}} {{abbreviation}} {{noun}}, that should {{noun}} the {{abbreviation}} {{noun}}!"]);return e.helpers.mustache(n,a)},t};t.exports=n},{}],38:[function(e,t,a){var n=function(e){var t=this;return t.randomize=function(t){return t=t||["a","b","c"],e.random.arrayElement(t)},t.slugify=function(e){return e=e||"",e.replace(/ /g,"-").replace(/[^\w\.\-]+/g,"")},t.replaceSymbolWithNumber=function(t,a){t=t||"",void 0===a&&(a="#");for(var n="",r=0;r?|\"])/gi,"").toLowerCase()},t.ip=function(){for(var t=function(){return e.random.number(255).toFixed(0)},a=[],n=0;4>n;n++)a[n]=t();return a.join(".")},t.userAgent=function(){return r.generate()},t.color=function(t,a,n){t=t||0,a=a||0,n=n||0;var r=Math.floor((e.random.number(256)+t)/2),i=Math.floor((e.random.number(256)+a)/2),s=Math.floor((e.random.number(256)+n)/2),o=r.toString(16),u=i.toString(16),c=s.toString(16);return"#"+(1===o.length?"0":"")+o+(1===u.length?"0":"")+u+(1===c.length?"0":"")+c},t.mac=function(){var e,t="";for(e=0;12>e;e++)t+=parseInt(16*Math.random()).toString(16),e%2==1&&11!=e&&(t+=":");return t},t.password=function(e,t,a,r){return e=e||15,"undefined"==typeof t&&(t=!1),n(e,t,a,r)}};t.exports=i},{"../vendor/password-generator.js":133,"../vendor/user-agent":134}],42:[function(e,t,a){t.exports=["#####","####","###"]},{}],43:[function(e,t,a){t.exports=["#{city_prefix} #{Name.first_name}#{city_suffix}","#{city_prefix} #{Name.first_name}","#{Name.first_name}#{city_suffix}","#{Name.last_name}#{city_suffix}"]},{}],44:[function(e,t,a){t.exports=["North","East","West","South","New","Lake","Port"]},{}],45:[function(e,t,a){t.exports=["town","ton","land","ville","berg","burgh","borough","bury","view","port","mouth","stad","furt","chester","mouth","fort","haven","side","shire"]},{}],46:[function(e,t,a){t.exports=["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica (the territory South of 60 deg S)","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island (Bouvetoya)","Brazil","British Indian Ocean Territory (Chagos Archipelago)","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Congo","Cook Islands","Costa Rica","Cote d'Ivoire","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Faroe Islands","Falkland Islands (Malvinas)","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and McDonald Islands","Holy See (Vatican City State)","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Democratic People's Republic of Korea","Republic of Korea","Kuwait","Kyrgyz Republic","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands Antilles","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Barthelemy","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Martin","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Slovakia (Slovak Republic)","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname","Svalbard & Jan Mayen Islands","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Taiwan","Tajikistan","Tanzania","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States of America","United States Minor Outlying Islands","Uruguay","Uzbekistan","Vanuatu","Venezuela","Vietnam","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"]},{}],47:[function(e,t,a){t.exports=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"]},{}],48:[function(e,t,a){t.exports=["Avon","Bedfordshire","Berkshire","Borders","Buckinghamshire","Cambridgeshire"]},{}],49:[function(e,t,a){t.exports=["United States of America"]},{}],50:[function(e,t,a){var n={};t.exports=n,n.city_prefix=e("./city_prefix"),n.city_suffix=e("./city_suffix"),n.county=e("./county"),n.country=e("./country"),n.country_code=e("./country_code"),n.building_number=e("./building_number"),n.street_suffix=e("./street_suffix"),n.secondary_address=e("./secondary_address"),n.postcode=e("./postcode"),n.postcode_by_state=e("./postcode_by_state"),n.state=e("./state"),n.state_abbr=e("./state_abbr"),n.time_zone=e("./time_zone"),n.city=e("./city"),n.street_name=e("./street_name"),n.street_address=e("./street_address"),n.default_country=e("./default_country")},{"./building_number":42,"./city":43,"./city_prefix":44,"./city_suffix":45,"./country":46,"./country_code":47,"./county":48,"./default_country":49,"./postcode":51,"./postcode_by_state":52,"./secondary_address":53,"./state":54,"./state_abbr":55,"./street_address":56,"./street_name":57,"./street_suffix":58,"./time_zone":59}],51:[function(e,t,a){t.exports=["#####","#####-####"]},{}],52:[function(e,t,a){arguments[4][51][0].apply(a,arguments)},{dup:51}],53:[function(e,t,a){t.exports=["Apt. ###","Suite ###"]},{}],54:[function(e,t,a){t.exports=["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]},{}],55:[function(e,t,a){t.exports=["AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"]},{}],56:[function(e,t,a){t.exports=["#{building_number} #{street_name}"]},{}],57:[function(e,t,a){t.exports=["#{Name.first_name} #{street_suffix}","#{Name.last_name} #{street_suffix}"]},{}],58:[function(e,t,a){t.exports=["Alley","Avenue","Branch","Bridge","Brook","Brooks","Burg","Burgs","Bypass","Camp","Canyon","Cape","Causeway","Center","Centers","Circle","Circles","Cliff","Cliffs","Club","Common","Corner","Corners","Course","Court","Courts","Cove","Coves","Creek","Crescent","Crest","Crossing","Crossroad","Curve","Dale","Dam","Divide","Drive","Drive","Drives","Estate","Estates","Expressway","Extension","Extensions","Fall","Falls","Ferry","Field","Fields","Flat","Flats","Ford","Fords","Forest","Forge","Forges","Fork","Forks","Fort","Freeway","Garden","Gardens","Gateway","Glen","Glens","Green","Greens","Grove","Groves","Harbor","Harbors","Haven","Heights","Highway","Hill","Hills","Hollow","Inlet","Inlet","Island","Island","Islands","Islands","Isle","Isle","Junction","Junctions","Key","Keys","Knoll","Knolls","Lake","Lakes","Land","Landing","Lane","Light","Lights","Loaf","Lock","Locks","Locks","Lodge","Lodge","Loop","Mall","Manor","Manors","Meadow","Meadows","Mews","Mill","Mills","Mission","Mission","Motorway","Mount","Mountain","Mountain","Mountains","Mountains","Neck","Orchard","Oval","Overpass","Park","Parks","Parkway","Parkways","Pass","Passage","Path","Pike","Pine","Pines","Place","Plain","Plains","Plains","Plaza","Plaza","Point","Points","Port","Port","Ports","Ports","Prairie","Prairie","Radial","Ramp","Ranch","Rapid","Rapids","Rest","Ridge","Ridges","River","Road","Road","Roads","Roads","Route","Row","Rue","Run","Shoal","Shoals","Shore","Shores","Skyway","Spring","Springs","Springs","Spur","Spurs","Square","Square","Squares","Squares","Station","Station","Stravenue","Stravenue","Stream","Stream","Street","Street","Streets","Summit","Summit","Terrace","Throughway","Trace","Track","Trafficway","Trail","Trail","Tunnel","Tunnel","Turnpike","Turnpike","Underpass","Union","Unions","Valley","Valleys","Via","Viaduct","View","Views","Village","Village","Villages","Ville","Vista","Vista","Walk","Walks","Wall","Way","Ways","Well","Wells"]},{}],59:[function(e,t,a){t.exports=["Pacific/Midway","Pacific/Pago_Pago","Pacific/Honolulu","America/Juneau","America/Los_Angeles","America/Tijuana","America/Denver","America/Phoenix","America/Chihuahua","America/Mazatlan","America/Chicago","America/Regina","America/Mexico_City","America/Mexico_City","America/Monterrey","America/Guatemala","America/New_York","America/Indiana/Indianapolis","America/Bogota","America/Lima","America/Lima","America/Halifax","America/Caracas","America/La_Paz","America/Santiago","America/St_Johns","America/Sao_Paulo","America/Argentina/Buenos_Aires","America/Guyana","America/Godthab","Atlantic/South_Georgia","Atlantic/Azores","Atlantic/Cape_Verde","Europe/Dublin","Europe/London","Europe/Lisbon","Europe/London","Africa/Casablanca","Africa/Monrovia","Etc/UTC","Europe/Belgrade","Europe/Bratislava","Europe/Budapest","Europe/Ljubljana","Europe/Prague","Europe/Sarajevo","Europe/Skopje","Europe/Warsaw","Europe/Zagreb","Europe/Brussels","Europe/Copenhagen","Europe/Madrid","Europe/Paris","Europe/Amsterdam","Europe/Berlin","Europe/Berlin","Europe/Rome","Europe/Stockholm","Europe/Vienna","Africa/Algiers","Europe/Bucharest","Africa/Cairo","Europe/Helsinki","Europe/Kiev","Europe/Riga","Europe/Sofia","Europe/Tallinn","Europe/Vilnius","Europe/Athens","Europe/Istanbul","Europe/Minsk","Asia/Jerusalem","Africa/Harare","Africa/Johannesburg","Europe/Moscow","Europe/Moscow","Europe/Moscow","Asia/Kuwait","Asia/Riyadh","Africa/Nairobi","Asia/Baghdad","Asia/Tehran","Asia/Muscat","Asia/Muscat","Asia/Baku","Asia/Tbilisi","Asia/Yerevan","Asia/Kabul","Asia/Yekaterinburg","Asia/Karachi","Asia/Karachi","Asia/Tashkent","Asia/Kolkata","Asia/Kolkata","Asia/Kolkata","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Dhaka","Asia/Colombo","Asia/Almaty","Asia/Novosibirsk","Asia/Rangoon","Asia/Bangkok","Asia/Bangkok","Asia/Jakarta","Asia/Krasnoyarsk","Asia/Shanghai","Asia/Chongqing","Asia/Hong_Kong","Asia/Urumqi","Asia/Kuala_Lumpur","Asia/Singapore","Asia/Taipei","Australia/Perth","Asia/Irkutsk","Asia/Ulaanbaatar","Asia/Seoul","Asia/Tokyo","Asia/Tokyo","Asia/Tokyo","Asia/Yakutsk","Australia/Darwin","Australia/Adelaide","Australia/Melbourne","Australia/Melbourne","Australia/Sydney","Australia/Brisbane","Australia/Hobart","Asia/Vladivostok","Pacific/Guam","Pacific/Port_Moresby","Asia/Magadan","Asia/Magadan","Pacific/Noumea","Pacific/Fiji","Asia/Kamchatka","Pacific/Majuro","Pacific/Auckland","Pacific/Auckland","Pacific/Tongatapu","Pacific/Fakaofo","Pacific/Apia"]},{}],60:[function(e,t,a){t.exports=["#{Name.name}","#{Company.name}"]},{}],61:[function(e,t,a){var n={};t.exports=n,n.name=e("./name"),n.version=e("./version"),n.author=e("./author")},{"./author":60,"./name":62,"./version":63}],62:[function(e,t,a){t.exports=["Redhold","Treeflex","Trippledex","Kanlam","Bigtax","Daltfresh","Toughjoyfax","Mat Lam Tam","Otcom","Tres-Zap","Y-Solowarm","Tresom","Voltsillam","Biodex","Greenlam","Viva","Matsoft","Temp","Zoolab","Subin","Rank","Job","Stringtough","Tin","It","Home Ing","Zamit","Sonsing","Konklab","Alpha","Latlux","Voyatouch","Alphazap","Holdlamis","Zaam-Dox","Sub-Ex","Quo Lux","Bamity","Ventosanzap","Lotstring","Hatity","Tempsoft","Overhold","Fixflex","Konklux","Zontrax","Tampflex","Span","Namfix","Transcof","Stim","Fix San","Sonair","Stronghold","Fintone","Y-find","Opela","Lotlux","Ronstring","Zathin","Duobam","Keylex"]},{}],63:[function(e,t,a){t.exports=["0.#.#","0.##","#.##","#.#","#.#.#"]},{}],64:[function(e,t,a){t.exports=["2011-10-12","2012-11-12","2015-11-11","2013-9-12"]},{}],65:[function(e,t,a){t.exports=["1234-2121-1221-1211","1212-1221-1121-1234","1211-1221-1234-2201","1228-1221-1221-1431"]},{}],66:[function(e,t,a){t.exports=["visa","mastercard","americanexpress","discover"]},{}],67:[function(e,t,a){var n={};t.exports=n,n.credit_card_numbers=e("./credit_card_numbers"),n.credit_card_expiry_dates=e("./credit_card_expiry_dates"),n.credit_card_types=e("./credit_card_types")},{"./credit_card_expiry_dates":64,"./credit_card_numbers":65,"./credit_card_types":66}],68:[function(e,t,a){t.exports=["###-###-####","(###) ###-####","1-###-###-####","###.###.####"]},{}],69:[function(e,t,a){var n={};t.exports=n,n.formats=e("./formats")},{"./formats":68}],70:[function(e,t,a){t.exports=["red","green","blue","yellow","purple","mint green","teal","white","black","orange","pink","grey","maroon","violet","turquoise","tan","sky blue","salmon","plum","orchid","olive","magenta","lime","ivory","indigo","gold","fuchsia","cyan","azure","lavender","silver"]},{}],71:[function(e,t,a){t.exports=["Books","Movies","Music","Games","Electronics","Computers","Home","Garden","Tools","Grocery","Health","Beauty","Toys","Kids","Baby","Clothing","Shoes","Jewelery","Sports","Outdoors","Automotive","Industrial"]},{}],72:[function(e,t,a){var n={};t.exports=n,n.color=e("./color"),n.department=e("./department"),n.product_name=e("./product_name")},{"./color":70,"./department":71,"./product_name":73}],73:[function(e,t,a){t.exports={adjective:["Small","Ergonomic","Rustic","Intelligent","Gorgeous","Incredible","Fantastic","Practical","Sleek","Awesome","Generic","Handcrafted","Handmade","Licensed","Refined","Unbranded","Tasty"], +material:["Steel","Wooden","Concrete","Plastic","Cotton","Granite","Rubber","Metal","Soft","Fresh","Frozen"],product:["Chair","Car","Computer","Keyboard","Mouse","Bike","Ball","Gloves","Pants","Shirt","Table","Shoes","Hat","Towels","Soap","Tuna","Chicken","Fish","Cheese","Bacon","Pizza","Salad","Sausages","Chips"]}},{}],74:[function(e,t,a){t.exports=["Adaptive","Advanced","Ameliorated","Assimilated","Automated","Balanced","Business-focused","Centralized","Cloned","Compatible","Configurable","Cross-group","Cross-platform","Customer-focused","Customizable","Decentralized","De-engineered","Devolved","Digitized","Distributed","Diverse","Down-sized","Enhanced","Enterprise-wide","Ergonomic","Exclusive","Expanded","Extended","Face to face","Focused","Front-line","Fully-configurable","Function-based","Fundamental","Future-proofed","Grass-roots","Horizontal","Implemented","Innovative","Integrated","Intuitive","Inverse","Managed","Mandatory","Monitored","Multi-channelled","Multi-lateral","Multi-layered","Multi-tiered","Networked","Object-based","Open-architected","Open-source","Operative","Optimized","Optional","Organic","Organized","Persevering","Persistent","Phased","Polarised","Pre-emptive","Proactive","Profit-focused","Profound","Programmable","Progressive","Public-key","Quality-focused","Reactive","Realigned","Re-contextualized","Re-engineered","Reduced","Reverse-engineered","Right-sized","Robust","Seamless","Secured","Self-enabling","Sharable","Stand-alone","Streamlined","Switchable","Synchronised","Synergistic","Synergized","Team-oriented","Total","Triple-buffered","Universal","Up-sized","Upgradable","User-centric","User-friendly","Versatile","Virtual","Visionary","Vision-oriented"]},{}],75:[function(e,t,a){t.exports=["clicks-and-mortar","value-added","vertical","proactive","robust","revolutionary","scalable","leading-edge","innovative","intuitive","strategic","e-business","mission-critical","sticky","one-to-one","24/7","end-to-end","global","B2B","B2C","granular","frictionless","virtual","viral","dynamic","24/365","best-of-breed","killer","magnetic","bleeding-edge","web-enabled","interactive","dot-com","sexy","back-end","real-time","efficient","front-end","distributed","seamless","extensible","turn-key","world-class","open-source","cross-platform","cross-media","synergistic","bricks-and-clicks","out-of-the-box","enterprise","integrated","impactful","wireless","transparent","next-generation","cutting-edge","user-centric","visionary","customized","ubiquitous","plug-and-play","collaborative","compelling","holistic","rich"]},{}],76:[function(e,t,a){t.exports=["synergies","web-readiness","paradigms","markets","partnerships","infrastructures","platforms","initiatives","channels","eyeballs","communities","ROI","solutions","e-tailers","e-services","action-items","portals","niches","technologies","content","vortals","supply-chains","convergence","relationships","architectures","interfaces","e-markets","e-commerce","systems","bandwidth","infomediaries","models","mindshare","deliverables","users","schemas","networks","applications","metrics","e-business","functionalities","experiences","web services","methodologies"]},{}],77:[function(e,t,a){t.exports=["implement","utilize","integrate","streamline","optimize","evolve","transform","embrace","enable","orchestrate","leverage","reinvent","aggregate","architect","enhance","incentivize","morph","empower","envisioneer","monetize","harness","facilitate","seize","disintermediate","synergize","strategize","deploy","brand","grow","target","syndicate","synthesize","deliver","mesh","incubate","engage","maximize","benchmark","expedite","reintermediate","whiteboard","visualize","repurpose","innovate","scale","unleash","drive","extend","engineer","revolutionize","generate","exploit","transition","e-enable","iterate","cultivate","matrix","productize","redefine","recontextualize"]},{}],78:[function(e,t,a){t.exports=["24 hour","24/7","3rd generation","4th generation","5th generation","6th generation","actuating","analyzing","asymmetric","asynchronous","attitude-oriented","background","bandwidth-monitored","bi-directional","bifurcated","bottom-line","clear-thinking","client-driven","client-server","coherent","cohesive","composite","context-sensitive","contextually-based","content-based","dedicated","demand-driven","didactic","directional","discrete","disintermediate","dynamic","eco-centric","empowering","encompassing","even-keeled","executive","explicit","exuding","fault-tolerant","foreground","fresh-thinking","full-range","global","grid-enabled","heuristic","high-level","holistic","homogeneous","human-resource","hybrid","impactful","incremental","intangible","interactive","intermediate","leading edge","local","logistical","maximized","methodical","mission-critical","mobile","modular","motivating","multimedia","multi-state","multi-tasking","national","needs-based","neutral","next generation","non-volatile","object-oriented","optimal","optimizing","radical","real-time","reciprocal","regional","responsive","scalable","secondary","solution-oriented","stable","static","systematic","systemic","system-worthy","tangible","tertiary","transitional","uniform","upward-trending","user-facing","value-added","web-enabled","well-modulated","zero administration","zero defect","zero tolerance"]},{}],79:[function(e,t,a){var n={};t.exports=n,n.suffix=e("./suffix"),n.adjective=e("./adjective"),n.descriptor=e("./descriptor"),n.noun=e("./noun"),n.bs_verb=e("./bs_verb"),n.bs_adjective=e("./bs_adjective"),n.bs_noun=e("./bs_noun"),n.name=e("./name")},{"./adjective":74,"./bs_adjective":75,"./bs_noun":76,"./bs_verb":77,"./descriptor":78,"./name":80,"./noun":81,"./suffix":82}],80:[function(e,t,a){t.exports=["#{Name.last_name} #{suffix}","#{Name.last_name}-#{Name.last_name}","#{Name.last_name}, #{Name.last_name} and #{Name.last_name}"]},{}],81:[function(e,t,a){t.exports=["ability","access","adapter","algorithm","alliance","analyzer","application","approach","architecture","archive","artificial intelligence","array","attitude","benchmark","budgetary management","capability","capacity","challenge","circuit","collaboration","complexity","concept","conglomeration","contingency","core","customer loyalty","database","data-warehouse","definition","emulation","encoding","encryption","extranet","firmware","flexibility","focus group","forecast","frame","framework","function","functionalities","Graphic Interface","groupware","Graphical User Interface","hardware","help-desk","hierarchy","hub","implementation","info-mediaries","infrastructure","initiative","installation","instruction set","interface","internet solution","intranet","knowledge user","knowledge base","local area network","leverage","matrices","matrix","methodology","middleware","migration","model","moderator","monitoring","moratorium","neural-net","open architecture","open system","orchestration","paradigm","parallelism","policy","portal","pricing structure","process improvement","product","productivity","project","projection","protocol","secured line","service-desk","software","solution","standardization","strategy","structure","success","superstructure","support","synergy","system engine","task-force","throughput","time-frame","toolset","utilisation","website","workforce"]},{}],82:[function(e,t,a){t.exports=["Inc","and Sons","LLC","Group"]},{}],83:[function(e,t,a){t.exports=["/34##-######-####L/","/37##-######-####L/"]},{}],84:[function(e,t,a){t.exports=["/30[0-5]#-######-###L/","/368#-######-###L/"]},{}],85:[function(e,t,a){t.exports=["/6011-####-####-###L/","/65##-####-####-###L/","/64[4-9]#-####-####-###L/","/6011-62##-####-####-###L/","/65##-62##-####-####-###L/","/64[4-9]#-62##-####-####-###L/"]},{}],86:[function(e,t,a){var n={};t.exports=n,n.visa=e("./visa"),n.mastercard=e("./mastercard"),n.discover=e("./discover"),n.american_express=e("./american_express"),n.diners_club=e("./diners_club"),n.jcb=e("./jcb"),n["switch"]=e("./switch"),n.solo=e("./solo"),n.maestro=e("./maestro"),n.laser=e("./laser")},{"./american_express":83,"./diners_club":84,"./discover":85,"./jcb":87,"./laser":88,"./maestro":89,"./mastercard":90,"./solo":91,"./switch":92,"./visa":93}],87:[function(e,t,a){t.exports=["/3528-####-####-###L/","/3529-####-####-###L/","/35[3-8]#-####-####-###L/"]},{}],88:[function(e,t,a){t.exports=["/6304###########L/","/6706###########L/","/6771###########L/","/6709###########L/","/6304#########{5,6}L/","/6706#########{5,6}L/","/6771#########{5,6}L/","/6709#########{5,6}L/"]},{}],89:[function(e,t,a){t.exports=["/50#{9,16}L/","/5[6-8]#{9,16}L/","/56##{9,16}L/"]},{}],90:[function(e,t,a){t.exports=["/5[1-5]##-####-####-###L/","/6771-89##-####-###L/"]},{}],91:[function(e,t,a){t.exports=["/6767-####-####-###L/","/6767-####-####-####-#L/","/6767-####-####-####-##L/"]},{}],92:[function(e,t,a){t.exports=["/6759-####-####-###L/","/6759-####-####-####-#L/","/6759-####-####-####-##L/"]},{}],93:[function(e,t,a){t.exports=["/4###########L/","/4###-####-####-###L/"]},{}],94:[function(e,t,a){var n={};t.exports=n,n.month=e("./month"),n.weekday=e("./weekday")},{"./month":95,"./weekday":96}],95:[function(e,t,a){t.exports={wide:["January","February","March","April","May","June","July","August","September","October","November","December"],wide_context:["January","February","March","April","May","June","July","August","September","October","November","December"],abbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],abbr_context:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}},{}],96:[function(e,t,a){t.exports={wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],wide_context:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],abbr_context:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]}},{}],97:[function(e,t,a){t.exports=["Checking","Savings","Money Market","Investment","Home Loan","Credit Card","Auto Loan","Personal Loan"]},{}],98:[function(e,t,a){t.exports={"UAE Dirham":{code:"AED",symbol:""},Afghani:{code:"AFN",symbol:"؋"},Lek:{code:"ALL",symbol:"Lek"},"Armenian Dram":{code:"AMD",symbol:""},"Netherlands Antillian Guilder":{code:"ANG",symbol:"ƒ"},Kwanza:{code:"AOA",symbol:""},"Argentine Peso":{code:"ARS",symbol:"$"},"Australian Dollar":{code:"AUD",symbol:"$"},"Aruban Guilder":{code:"AWG",symbol:"ƒ"},"Azerbaijanian Manat":{code:"AZN",symbol:"ман"},"Convertible Marks":{code:"BAM",symbol:"KM"},"Barbados Dollar":{code:"BBD",symbol:"$"},Taka:{code:"BDT",symbol:""},"Bulgarian Lev":{code:"BGN",symbol:"лв"},"Bahraini Dinar":{code:"BHD",symbol:""},"Burundi Franc":{code:"BIF",symbol:""},"Bermudian Dollar (customarily known as Bermuda Dollar)":{code:"BMD",symbol:"$"},"Brunei Dollar":{code:"BND",symbol:"$"},"Boliviano Mvdol":{code:"BOB BOV",symbol:"$b"},"Brazilian Real":{code:"BRL",symbol:"R$"},"Bahamian Dollar":{code:"BSD",symbol:"$"},Pula:{code:"BWP",symbol:"P"},"Belarussian Ruble":{code:"BYR",symbol:"p."},"Belize Dollar":{code:"BZD",symbol:"BZ$"},"Canadian Dollar":{code:"CAD",symbol:"$"},"Congolese Franc":{code:"CDF",symbol:""},"Swiss Franc":{code:"CHF",symbol:"CHF"},"Chilean Peso Unidades de fomento":{code:"CLP CLF",symbol:"$"},"Yuan Renminbi":{code:"CNY",symbol:"¥"},"Colombian Peso Unidad de Valor Real":{code:"COP COU",symbol:"$"},"Costa Rican Colon":{code:"CRC",symbol:"₡"},"Cuban Peso Peso Convertible":{code:"CUP CUC",symbol:"₱"},"Cape Verde Escudo":{code:"CVE",symbol:""},"Czech Koruna":{code:"CZK",symbol:"Kč"},"Djibouti Franc":{code:"DJF",symbol:""},"Danish Krone":{code:"DKK",symbol:"kr"},"Dominican Peso":{code:"DOP",symbol:"RD$"},"Algerian Dinar":{code:"DZD",symbol:""},Kroon:{code:"EEK",symbol:""},"Egyptian Pound":{code:"EGP",symbol:"£"},Nakfa:{code:"ERN",symbol:""},"Ethiopian Birr":{code:"ETB",symbol:""},Euro:{code:"EUR",symbol:"€"},"Fiji Dollar":{code:"FJD",symbol:"$"},"Falkland Islands Pound":{code:"FKP",symbol:"£"},"Pound Sterling":{code:"GBP",symbol:"£"},Lari:{code:"GEL",symbol:""},Cedi:{code:"GHS",symbol:""},"Gibraltar Pound":{code:"GIP",symbol:"£"},Dalasi:{code:"GMD",symbol:""},"Guinea Franc":{code:"GNF",symbol:""},Quetzal:{code:"GTQ",symbol:"Q"},"Guyana Dollar":{code:"GYD",symbol:"$"},"Hong Kong Dollar":{code:"HKD",symbol:"$"},Lempira:{code:"HNL",symbol:"L"},"Croatian Kuna":{code:"HRK",symbol:"kn"},"Gourde US Dollar":{code:"HTG USD",symbol:""},Forint:{code:"HUF",symbol:"Ft"},Rupiah:{code:"IDR",symbol:"Rp"},"New Israeli Sheqel":{code:"ILS",symbol:"₪"},"Indian Rupee":{code:"INR",symbol:""},"Indian Rupee Ngultrum":{code:"INR BTN",symbol:""},"Iraqi Dinar":{code:"IQD",symbol:""},"Iranian Rial":{code:"IRR",symbol:"﷼"},"Iceland Krona":{code:"ISK",symbol:"kr"},"Jamaican Dollar":{code:"JMD",symbol:"J$"},"Jordanian Dinar":{code:"JOD",symbol:""},Yen:{code:"JPY",symbol:"¥"},"Kenyan Shilling":{code:"KES",symbol:""},Som:{code:"KGS",symbol:"лв"},Riel:{code:"KHR",symbol:"៛"},"Comoro Franc":{code:"KMF",symbol:""},"North Korean Won":{code:"KPW",symbol:"₩"},Won:{code:"KRW",symbol:"₩"},"Kuwaiti Dinar":{code:"KWD",symbol:""},"Cayman Islands Dollar":{code:"KYD",symbol:"$"},Tenge:{code:"KZT",symbol:"лв"},Kip:{code:"LAK",symbol:"₭"},"Lebanese Pound":{code:"LBP",symbol:"£"},"Sri Lanka Rupee":{code:"LKR",symbol:"₨"},"Liberian Dollar":{code:"LRD",symbol:"$"},"Lithuanian Litas":{code:"LTL",symbol:"Lt"},"Latvian Lats":{code:"LVL",symbol:"Ls"},"Libyan Dinar":{code:"LYD",symbol:""},"Moroccan Dirham":{code:"MAD",symbol:""},"Moldovan Leu":{code:"MDL",symbol:""},"Malagasy Ariary":{code:"MGA",symbol:""},Denar:{code:"MKD",symbol:"ден"},Kyat:{code:"MMK",symbol:""},Tugrik:{code:"MNT",symbol:"₮"},Pataca:{code:"MOP",symbol:""},Ouguiya:{code:"MRO",symbol:""},"Mauritius Rupee":{code:"MUR",symbol:"₨"},Rufiyaa:{code:"MVR",symbol:""},Kwacha:{code:"MWK",symbol:""},"Mexican Peso Mexican Unidad de Inversion (UDI)":{code:"MXN MXV",symbol:"$"},"Malaysian Ringgit":{code:"MYR",symbol:"RM"},Metical:{code:"MZN",symbol:"MT"},Naira:{code:"NGN",symbol:"₦"},"Cordoba Oro":{code:"NIO",symbol:"C$"},"Norwegian Krone":{code:"NOK",symbol:"kr"},"Nepalese Rupee":{code:"NPR",symbol:"₨"},"New Zealand Dollar":{code:"NZD",symbol:"$"},"Rial Omani":{code:"OMR",symbol:"﷼"},"Balboa US Dollar":{code:"PAB USD",symbol:"B/."},"Nuevo Sol":{code:"PEN",symbol:"S/."},Kina:{code:"PGK",symbol:""},"Philippine Peso":{code:"PHP",symbol:"Php"},"Pakistan Rupee":{code:"PKR",symbol:"₨"},Zloty:{code:"PLN",symbol:"zł"},Guarani:{code:"PYG",symbol:"Gs"},"Qatari Rial":{code:"QAR",symbol:"﷼"},"New Leu":{code:"RON",symbol:"lei"},"Serbian Dinar":{code:"RSD",symbol:"Дин."},"Russian Ruble":{code:"RUB",symbol:"руб"},"Rwanda Franc":{code:"RWF",symbol:""},"Saudi Riyal":{code:"SAR",symbol:"﷼"},"Solomon Islands Dollar":{code:"SBD",symbol:"$"},"Seychelles Rupee":{code:"SCR",symbol:"₨"},"Sudanese Pound":{code:"SDG",symbol:""},"Swedish Krona":{code:"SEK",symbol:"kr"},"Singapore Dollar":{code:"SGD",symbol:"$"},"Saint Helena Pound":{code:"SHP",symbol:"£"},Leone:{code:"SLL",symbol:""},"Somali Shilling":{code:"SOS",symbol:"S"},"Surinam Dollar":{code:"SRD",symbol:"$"},Dobra:{code:"STD",symbol:""},"El Salvador Colon US Dollar":{code:"SVC USD",symbol:"$"},"Syrian Pound":{code:"SYP",symbol:"£"},Lilangeni:{code:"SZL",symbol:""},Baht:{code:"THB",symbol:"฿"},Somoni:{code:"TJS",symbol:""},Manat:{code:"TMT",symbol:""},"Tunisian Dinar":{code:"TND",symbol:""},"Pa'anga":{code:"TOP",symbol:""},"Turkish Lira":{code:"TRY",symbol:"TL"},"Trinidad and Tobago Dollar":{code:"TTD",symbol:"TT$"},"New Taiwan Dollar":{code:"TWD",symbol:"NT$"},"Tanzanian Shilling":{code:"TZS",symbol:""},Hryvnia:{code:"UAH",symbol:"₴"},"Uganda Shilling":{code:"UGX",symbol:""},"US Dollar":{code:"USD",symbol:"$"},"Peso Uruguayo Uruguay Peso en Unidades Indexadas":{code:"UYU UYI",symbol:"$U"},"Uzbekistan Sum":{code:"UZS",symbol:"лв"},"Bolivar Fuerte":{code:"VEF",symbol:"Bs"},Dong:{code:"VND",symbol:"₫"},Vatu:{code:"VUV",symbol:""},Tala:{code:"WST",symbol:""},"CFA Franc BEAC":{code:"XAF",symbol:""},Silver:{code:"XAG",symbol:""},Gold:{code:"XAU",symbol:""},"Bond Markets Units European Composite Unit (EURCO)":{code:"XBA",symbol:""},"European Monetary Unit (E.M.U.-6)":{code:"XBB",symbol:""},"European Unit of Account 9(E.U.A.-9)":{code:"XBC",symbol:""},"European Unit of Account 17(E.U.A.-17)":{code:"XBD",symbol:""},"East Caribbean Dollar":{code:"XCD",symbol:"$"},SDR:{code:"XDR",symbol:""},"UIC-Franc":{code:"XFU",symbol:""},"CFA Franc BCEAO":{code:"XOF",symbol:""},Palladium:{code:"XPD",symbol:""},"CFP Franc":{code:"XPF",symbol:""},Platinum:{code:"XPT",symbol:""},"Codes specifically reserved for testing purposes":{code:"XTS",symbol:""},"Yemeni Rial":{code:"YER",symbol:"﷼"},Rand:{code:"ZAR",symbol:"R"},"Rand Loti":{code:"ZAR LSL",symbol:""},"Rand Namibia Dollar":{code:"ZAR NAD",symbol:""},"Zambian Kwacha":{code:"ZMK",symbol:""},"Zimbabwe Dollar":{code:"ZWL",symbol:""}}},{}],99:[function(e,t,a){var n={};t.exports=n,n.account_type=e("./account_type"),n.transaction_type=e("./transaction_type"),n.currency=e("./currency")},{"./account_type":97,"./currency":98,"./transaction_type":100}],100:[function(e,t,a){t.exports=["deposit","withdrawal","payment","invoice"]},{}],101:[function(e,t,a){t.exports=["TCP","HTTP","SDD","RAM","GB","CSS","SSL","AGP","SQL","FTP","PCI","AI","ADP","RSS","XML","EXE","COM","HDD","THX","SMTP","SMS","USB","PNG","SAS","IB","SCSI","JSON","XSS","JBOD"]},{}],102:[function(e,t,a){t.exports=["auxiliary","primary","back-end","digital","open-source","virtual","cross-platform","redundant","online","haptic","multi-byte","bluetooth","wireless","1080p","neural","optical","solid state","mobile"]},{}],103:[function(e,t,a){var n={};t.exports=n,n.abbreviation=e("./abbreviation"),n.adjective=e("./adjective"),n.noun=e("./noun"),n.verb=e("./verb"),n.ingverb=e("./ingverb")},{"./abbreviation":101,"./adjective":102,"./ingverb":104,"./noun":105,"./verb":106}],104:[function(e,t,a){t.exports=["backing up","bypassing","hacking","overriding","compressing","copying","navigating","indexing","connecting","generating","quantifying","calculating","synthesizing","transmitting","programming","parsing"]},{}],105:[function(e,t,a){t.exports=["driver","protocol","bandwidth","panel","microchip","program","port","card","array","interface","system","sensor","firewall","hard drive","pixel","alarm","feed","monitor","application","transmitter","bus","circuit","capacitor","matrix"]},{}],106:[function(e,t,a){t.exports=["back up","bypass","hack","override","compress","copy","navigate","index","connect","generate","quantify","calculate","synthesize","input","transmit","program","reboot","parse"]},{}],107:[function(e,t,a){var n={};t.exports=n,n.title="English",n.separator=" & ",n.address=e("./address"),n.credit_card=e("./credit_card"),n.company=e("./company"),n.internet=e("./internet"),n.lorem=e("./lorem"),n.name=e("./name"),n.phone_number=e("./phone_number"),n.cell_phone=e("./cell_phone"),n.business=e("./business"),n.commerce=e("./commerce"),n.team=e("./team"),n.hacker=e("./hacker"),n.app=e("./app"),n.finance=e("./finance"),n.date=e("./date")},{"./address":50,"./app":61,"./business":67,"./cell_phone":69,"./commerce":72,"./company":79,"./credit_card":86,"./date":94,"./finance":99,"./hacker":103,"./internet":111,"./lorem":112,"./name":116,"./phone_number":123,"./team":125}],108:[function(e,t,a){t.exports=["https://s3.amazonaws.com/uifaces/faces/twitter/jarjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahdif/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sprayaga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruzinav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Skyhartman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moscoz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurafire/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/91bilal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/igorgarybaldi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malykhinv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelhelin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kushsolitary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowshade/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/holdenweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heyimjuani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/envex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/unterdreht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/collegeman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peejfancher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andyisonline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ultragex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fuck_you_two/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adellecharles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ateneupopular/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetalpbalkan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Stievius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerem/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osvaldas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelceballos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrykoblentz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peterlandt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weglov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandclay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flame_kaizar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetsulek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolasfolliot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayrobinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorerixon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michzen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markjenkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolai_larsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noxdzine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alagoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/idiot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadengle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutlu82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/simobenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vocino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guiiipontes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soyjavi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshaustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomaslau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VinThomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ManikRathee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/langate/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cemshid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leemunroe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_shahedk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BillSKenney/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/divya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshhemsley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sindresorhus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soffes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/9lessons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linux29/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Chakintosh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anaami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joreira/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shadeed9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottkclark/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jedbridges/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salleedesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marakasina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BrianPurkiss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelmartinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bublienko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devankoshal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ZacharyZorbas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timmillwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuasortino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/damenleeturks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomas_janousek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herrhaase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/RussellBishop/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brajeshwar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nachtmeister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cbracco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bermonpainter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdullindenis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isacosta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suprb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yalozhkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chandlervdw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamgarth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_victa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/commadelimited/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roybarberuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/axel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladarbatov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ffbel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/syropian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ankitind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/traneblow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flashmurphy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ChrisFarina78/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baliomega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschamt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jm_denis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kennyadr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chatyrko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dingyi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mds/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terryxlife/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaroni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kinday/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prrstn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eduardostuart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhilipsiva/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/GavicoInd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rohixx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakesimkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leeiio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjrus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uberschizo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefoundry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/claudioguglieri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ripplemdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/exentrich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jakemoore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joaoedumedeiros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/poormini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tereshenkov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keryilmaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haydn_woods/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/llun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sgaurav_baghel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jamiebrittain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/badlittleduck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pifagor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agromov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benefritz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/erwanhesry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diesellaws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiaha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/koridhandy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewcohen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smaczny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gonzalorobaina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nandini_m/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sydlawrence/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdharrison/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgerken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lewisainslie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliecwaite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robbschiller/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flexrs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattdetails/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raquelwilson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrmartineau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/opnsrce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hgharrygo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximseshuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxalex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samihah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chanpory/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sharvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josemarques/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jefffis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krystalfister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lokesh_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedamianhdez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dpmachado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/funwatercat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timothycd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ivanfilipovbg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/picard102/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcobarbosa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krasnoukhov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/g3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ademilter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickdt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/operatino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bungiwan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugomano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/logorado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dc_user/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/horaciobella/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SlaapMe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teeragit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqonicd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ilya_pestov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewarrow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssiskind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/HenryHoffman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdsaunders/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamsxu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousoffice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themadray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michigangraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kohette/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nickfratter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/runningskull/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madysondesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenton_clarke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyshen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bradenhamm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurtinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amanruzaini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyhaggard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Karimmove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronalfred/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wtrsld/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jitachi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/therealmarvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pmeissner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ooomz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chacky14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jesseddy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinmatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shanehudson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/IsaryAmairani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arthurholcombe1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andychipster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/boxmodel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ehsandiary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/LucasPerdidao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shalt0ni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swaplord/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaelifa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plbabin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guillemboti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arindam_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/renbyrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thiagovernetti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmillspaysbills/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikemai2awesome/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jervo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mekal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sta1ex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robergd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipecsl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrea211087/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/garand/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhooyenga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abovefunction/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pcridesagain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/randomlies/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BryanHorsey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heykenneth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dahparra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allthingssmitty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvernon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beweinreich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/increase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falvarad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxndrustinov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souuf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/orkuncaylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AM_Kn2/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gearpixels/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bassamology/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vimarethomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kosmar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SULiik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrjamesnoble/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silvanmuhlemann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shaneIxD/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nacho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yigitpinarbasi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buzzusborne/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronkwhite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rmlewisuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giancarlon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nbirckel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_nny_m_cher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sdidonato/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atariboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abotap/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karalek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psdesignuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ludwiczakpawel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nemanjaivanovic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baluli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmadajmi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vovkasolovev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samgrover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derienzo777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonathansimmons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelsonjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/S0ufi4n3/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xtopherpaul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oaktreemedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nateschulte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/findingjenny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/namankreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyzotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/we_social/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leehambley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/solid_color/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abelcabans/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilderbach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kkusaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jordyvdboom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosgavina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pechkinator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vc27/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdbannon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/croakx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerihenare/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catadeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gcmorley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duivvv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschadroste/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorDubugras/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wintopia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattbilotti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taylorling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/megdraws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meln1ks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahmoudmetwally/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Silveredge9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekebradley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/happypeter1983/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travis_arnold/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artem_kostenko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adobi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daykiine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alek_djuric/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scips/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelmendes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrhee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alsobrooks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mcflydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/santi_urso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allfordesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stayuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bertboerland/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marosholly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamnac/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cynthiasavard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muringa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hiemil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jackiesaik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zacsnider/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iduuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antjanus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aroon_sharma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dshster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thehacker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelbrooksjr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanmclaughlin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/clubb3rry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taybenlor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xripunov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/myastro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adityasutomo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/digitalmaverick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hjartstrorn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itolmach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vaughanmoffitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdots/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isnifer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeysafonov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scrapdnb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrismj83/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitorleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sokaniwaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zaki3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/illyzoren/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mocabyte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmanince/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/djsherman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidhemphill/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/waghner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/necodymiconer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/praveen_vijaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbrucci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cliffseal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travishines/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kuldarkalvik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Elt_n/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/phillapier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okseanjay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/id835559/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kudretkeskin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anjhero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duck4fuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scott_riley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noufalibrahim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/h1brd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borges_marcos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devinhalladay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ciaranr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefooo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikebeecham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tonymillion/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuaraichur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/irae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petrangr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmitriychuta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliegann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arashmanteghi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ainsleywagon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/svenlen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/faisalabid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beshur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlyson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dutchnadia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teddyzetterlund/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samuelkraft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aoimedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/toddrew/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codepoet_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artvavs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benoitboucart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jomarmen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolmarlopez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/creartinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/homka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gaborenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinclediere/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximsorokin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plasticine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j2deme/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peachananr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kapaluccio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/de_ascanio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dawidwu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpatey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/popey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rehatkathuria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_purplebunny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/1markiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ajaxy_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenmurrell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dudestein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskarlevinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorstuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nehfy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vicivadeline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leandrovaranda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottgallant/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victor_haydin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawrb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryhanhassan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amayvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_brixen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karolkrakowiak_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herkulano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geran7/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cggaurav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_witko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lososina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/polarity/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattlat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonburke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/constantx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teylorfeliz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigelimeliah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rachelreveley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reabo101/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rahmeen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickyyean/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j04ntoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spbroma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sebashton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpenico/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/francis_vega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oktayelipek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kikillo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbianz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrygerard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BroumiYoussef/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/0therplanet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilalsiddique1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ionuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grrr_nl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/liminha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rawdiggie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryandownie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sethlouey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pixage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arpitnj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/switmer777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josevnclch/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kanickairaj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/puzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tbakdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/besbujupi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supjoey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lowie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linkibol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balintorosz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imcoding/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agustincruiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gusoto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasschrijer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/superoutman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kalmerrautam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielizalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gojeanyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidbaldie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_vojto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laurengray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mymyboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nellleo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marciotoledo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ninjad3m0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/to_soham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hasslunsford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muridrahhal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/levisan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grahamkennery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepetitogre/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antongenkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nessoila/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amandabuzard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/safrankov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cocolero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dss49/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matt3224/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluesix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/quailandquasar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AlbertoCococi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepinski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sementiy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhudobivnik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thibaut_re/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olgary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shojberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mtolokonnikov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bereto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naupintos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wegotvices/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xadhix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/macxim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rodnylobos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madcampos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebyvadim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartoszdawydzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supervova/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markretzloff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vonachoo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darylws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stevedesigner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mylesb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herbigt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/depaulawagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gizmeedevil1991/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_scottburgess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lisovsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidsasda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artd_sign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/YoungCutlass/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mgonto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itstotallyamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorquinn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmond/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oksanafrewer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zauerkraut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkeithmason/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nitinhayaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lmjabreu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mandalareopens/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinkleft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ponchomendivil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juamperro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brunodesign1206/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caseycavanagh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/luxe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dotgridline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spedwig/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madewulf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattsapii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/helderleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisstumph/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayphen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nsamoylov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisvanderkooi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justme_timothyg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/otozk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prinzadi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gu5taf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cyril_gaillard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_kobelyatsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daniloc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nwdsha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/romanbulah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/skkirilov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dvdwinden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dannol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thekevinjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jwalter14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timgthomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buddhasource/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxpiper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thatonetommy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diansigitp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adrienths/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klimmka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gkaam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekcramer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyyo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerrsoft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xalionmalik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edhenderson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keyuri85/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roxanejammet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kimcool/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edkf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alessandroribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacksonlatka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebronjennan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kostaspt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karlkanall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moynihan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danpliego/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saulihirvi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wesleytrankin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fjaguero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bowbrick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mashaaaaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yassiryahya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dparrelli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fotomagin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aka_james/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/denisepires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqbalperkasa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martinansty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jarsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_oy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielrosser/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malgordon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlfairclough/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelabehsera/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierrestoffe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enjoythetau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/loganjlambert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpeezy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyginnivan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michalhron/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/msveet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lingeswaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolsvein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peter576/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reideiredale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joeymurdah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raphaelnikson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mvdheuvel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maxlinderman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jimmuirhead/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/begreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/frankiefreesbie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robturlinckx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Talbi_ConSept/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/longlivemyword/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vanchesz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maiklam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hermanobrother/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rez___a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregsqueeb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/greenbes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_ragzor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anthonysukow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fluidbrush/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dactrtr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jehnglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bergmartin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugocornejo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_kkga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dzantievm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawalazar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sovesove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonsgotwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byryan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vytautas_a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizhgan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cicerobr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshelmersson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d33pthought/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davecraige/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nckjrvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexandermayes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jcubic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigrcoles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bagawarman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rob_thomas10/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cofla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maikelk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtgibbons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russell_baylis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhesslow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codysanfilippo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/webtanya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebybrenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dcalonaci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perfectflow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjsiii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saarabpreet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kumarrajan12123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamsteffen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themikenagle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ceekaytweet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrybolt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/conspirator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dallasbpeters/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n3dmax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terpimost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirillz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byrnecore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j_drake_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russoedu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hoangloi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tobysaxon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gofrasdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dimaposnyy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjisousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okandungel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/billyroshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskamaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/motionthinks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/knilob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashocka18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marrimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartjo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/omnizya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ernestsemerda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andreas_pr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edgarchris99/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasgeisen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gseguin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joannefournier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/demersdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adammarsbar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nasirwd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n_tassone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/javorszky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themrdave/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yecidsm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicollerich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/canapud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicoleglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/judzhin_miles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/designervzm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kianoshp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evandrix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alterchuca/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhrubo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ma_tiax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssbb_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dorphern/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mauriolg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bruno_mart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mactopus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_winslet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joemdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Shriiiiimp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacobbennett/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nfedoroff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamglimy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allagringaus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aiiaiiaii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olaolusoga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buryaknick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wim1k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicklacke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a1chapone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/steynviljoen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/strikewan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryankirkman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewabogado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doooon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jagan123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariffsetiawan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elenadissi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mwarkentin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrymeier_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_garcia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmackerman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borantula/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/konus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spacewood_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryuchi311/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evanshajed/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tristanlegros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shoaib253/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aislinnkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okcoker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timpetricola/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunshinedgirl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleclarsoniv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nomidesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petebernardo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottiedude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/millinet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imsoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imammuht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benjamin_knight/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nepdud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joki4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lanceguyatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bboy1895/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amywebbb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rweve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haruintesettden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ricburton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelshd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/batsirai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/primozcigler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jffgrdnr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/8d3k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geneseleznev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/al_li/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souperphly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mslarkina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/2fockus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdavis565/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xiel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/turkutuuli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxward/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebinoclard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauravjassal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidmerrique/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mdsisto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewofficer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kojourin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnirmal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_shiznit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aluisio_azevedo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cloudstudio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvierich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexivanichkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fran_mchamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perretmagali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/betraydan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cadikkara/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matbeedotcom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyworboys/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bpartridge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelkoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silv3rgvn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alevizio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnsmithagency/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lawlbwoy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitor376/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/desastrozo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thimo_cz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jasonmarkjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lhausermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xravil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guischmitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vigobronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panghal0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelkooreman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/surgeonist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/christianoliff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caspergrl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkarna/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ipavelek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierre_nel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/y2graphic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sterlingrules/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elbuscainfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bennyjien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stushona/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/estebanuribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/embrcecreations/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danillos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charlesrpratt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmeffess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosblanco_eu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leonfedotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rangafangs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_frees/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgormtx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bryan_topham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpscribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mighty55/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carbontwelve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isaacfifth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamjdeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowwrite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/barputro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/drewbyreese/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachacorazzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bistrianiosip/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magoo04/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pehamondello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yayteejay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_harris88/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/algunsanabria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zforrester/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ovall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosjgsousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geobikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ah_lice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/looneydoodle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerdgr8/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ddggccaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zackeeler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/normanbox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/el_fuertisimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ismail_biltagi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juangomezw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jnmnrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/patrickcoombe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanjohnson_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markolschesky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeffgolenski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kvasnic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lindseyzilla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauchomatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/afusinatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okansurreel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamawesomeface/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emileboudeling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arishi_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juanmamartinez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wikiziner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danthms/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mkginfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terrorpixel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousonaut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prheemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcolenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/foczzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martip07/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaodang17/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johncafazza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinlayfield/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/franciscoamk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdulhyeuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marklamb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edobene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresenfredrik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikaeljorhult/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisslowik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vinciarts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meelford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotnolten/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yehudab/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vijaykarthik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bfrohs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josep_martins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/attacks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sur4dye/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tumski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/instalox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mangosango/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/paulfarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kazaky999/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kiwiupover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nvkznemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tom_even/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ratbus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodsman001/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshmedeski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thewillbeard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psaikali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joe_black/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleinadsays/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcusgorillius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hota_v/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jghyllebert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shinze/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/janpalounek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiespoken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/her_ruu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dansowter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipeapiress/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magugzbrand2d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/posterjob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nathalie_fs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobbytwoshoes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dreizle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremymouton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elisabethkjaer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/notbadart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mohanrohith/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jlsolerdeltoro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itskawsar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/slowspock/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zvchkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wiljanslofstra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craighenneberry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trubeatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juaumlol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samscouto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BenouarradeM/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gipsy_raf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/netonet_il/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arkokoley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itsajimithing/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smalonso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victordeanda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_dwite_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richardgarretts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregrwilkinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anatolinicolae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lu4sh1i/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanotirloni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ostirbu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darcystonge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naitanamoreno/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcomiskey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhiardana/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcomano_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidcazalis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falconerie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregkilian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bcrad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bolzanmarco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/low_res/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vlajki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petar_prog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonkspr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmalfikri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mfacchinello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atanism/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/harry_sistalam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/murrayswift/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobwassermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gavr1l0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madshensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_subtle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deviljho_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salimianoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joetruesdell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/twittypork/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/airskylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnezkumar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgajjar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cherif_b/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salvafc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/louis_currie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deeenright/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cybind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eyronn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vickyshits/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sweetdelisa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cboller1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresdjasso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/melvindidit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andysolomon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaisselenator_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lvovenok/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giuliusa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/belyaev_rs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overcloacked/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kamal_chaneman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/incubo82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hellofeverrrr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhaligowski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunlandictwin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bu7921/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andytlaw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/finchjke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manigm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/umurgdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottfeltham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ganserene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutu_krish/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jodytaggart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ntfblog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tanveerrao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hfalucas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxleroydeval/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kucingbelang4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bargaorobalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colgruv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stalewine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefrost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumannzone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcolberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachingawas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjshaw14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ramanathan_pdy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johndezember/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshoenson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonmorreale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nutzumi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonflatsoda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeyalmone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klefue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirangopal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumann_alex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matthewkay_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jay_wilburn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shesgared/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/apriendeau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnriordan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wake_gs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleksitappura/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emsgulam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xilantra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imomenui/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sircalebgrove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/newbrushes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hsinyo23/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m4rio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/katiemdaly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/s4f1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ecommerceil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marlinjayakody/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swooshycueb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sangdth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coderdiaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluefx_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vivekprvr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sasha_shestakov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eugeneeweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgclegg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n1ght_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dixchen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakehawksworth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trueblood_33/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hai_ninh_nguyen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marclgonzales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yesmeck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stephcoue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doronmalki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruehldesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anasnakawa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kijanmaharjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wearesavas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefvdham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tweetubhai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alecarpentier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fiterik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyryndya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d00maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/theonlyzeke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/missaaamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manekenthe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reetajayendra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyshimko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrgraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanozoffoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrebay007/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shvelo96/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pyronite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedjpetersen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtyukmaev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_williamguerra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/albertaugustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikashpathak18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinjohndayy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vj_demien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colirpixoil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/goddardlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laasli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jqiuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heycamtaylor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nastya_mane/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mastermindesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ccinojasso1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nyancecom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sandywoodruff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bighanddesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sbtransparent/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aviddayentonbay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richwild/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaysix_dizzy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tur8le/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/seyedhossein1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/privetwagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmandenn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dev_essentials/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmfsocial/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_yardenoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mateaodviteza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weavermedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mufaddal_mw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hafeeskhan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashernatali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sulaqo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eddiechen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josecarlospsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vm_f/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enricocicconi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danmartin70/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gmourier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/donjain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrxloka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_pedropinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eitarafa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oscarowusu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ralph_lam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panchajanyag/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodydotmx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jerrybai1907/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marshallchen_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xamorep/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aio___/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaabane_wail/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/txcx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akashsharma39/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falling_soul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sainraja/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mugukamil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johannesneu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markwienands/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karthipanraj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balakayuriy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alan_zhang_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/layerssss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaspernordkvist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mirfanqureshi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hanna_smi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VMilescu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aeon56/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m_kalibry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sreejithexp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dicesales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhoot_amit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smenov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lonesomelemon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladimirdevic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelcipriano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haligaliharun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buleswapnil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/serefka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ifarafonow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikasvinfotech/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/urrutimeoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areandacom/128.jpg"]; +},{}],109:[function(e,t,a){t.exports=["com","biz","info","name","net","org"]},{}],110:[function(e,t,a){t.exports=["gmail.com","yahoo.com","hotmail.com"]},{}],111:[function(e,t,a){var n={};t.exports=n,n.free_email=e("./free_email"),n.domain_suffix=e("./domain_suffix"),n.avatar_uri=e("./avatar_uri")},{"./avatar_uri":108,"./domain_suffix":109,"./free_email":110}],112:[function(e,t,a){var n={};t.exports=n,n.words=e("./words"),n.supplemental=e("./supplemental")},{"./supplemental":113,"./words":114}],113:[function(e,t,a){t.exports=["abbas","abduco","abeo","abscido","absconditus","absens","absorbeo","absque","abstergo","absum","abundans","abutor","accedo","accendo","acceptus","accipio","accommodo","accusator","acer","acerbitas","acervus","acidus","acies","acquiro","acsi","adamo","adaugeo","addo","adduco","ademptio","adeo","adeptio","adfectus","adfero","adficio","adflicto","adhaero","adhuc","adicio","adimpleo","adinventitias","adipiscor","adiuvo","administratio","admiratio","admitto","admoneo","admoveo","adnuo","adopto","adsidue","adstringo","adsuesco","adsum","adulatio","adulescens","adultus","aduro","advenio","adversus","advoco","aedificium","aeger","aegre","aegrotatio","aegrus","aeneus","aequitas","aequus","aer","aestas","aestivus","aestus","aetas","aeternus","ager","aggero","aggredior","agnitio","agnosco","ago","ait","aiunt","alienus","alii","alioqui","aliqua","alius","allatus","alo","alter","altus","alveus","amaritudo","ambitus","ambulo","amicitia","amiculum","amissio","amita","amitto","amo","amor","amoveo","amplexus","amplitudo","amplus","ancilla","angelus","angulus","angustus","animadverto","animi","animus","annus","anser","ante","antea","antepono","antiquus","aperio","aperte","apostolus","apparatus","appello","appono","appositus","approbo","apto","aptus","apud","aqua","ara","aranea","arbitro","arbor","arbustum","arca","arceo","arcesso","arcus","argentum","argumentum","arguo","arma","armarium","armo","aro","ars","articulus","artificiose","arto","arx","ascisco","ascit","asper","aspicio","asporto","assentator","astrum","atavus","ater","atqui","atrocitas","atrox","attero","attollo","attonbitus","auctor","auctus","audacia","audax","audentia","audeo","audio","auditor","aufero","aureus","auris","aurum","aut","autem","autus","auxilium","avaritia","avarus","aveho","averto","avoco","baiulus","balbus","barba","bardus","basium","beatus","bellicus","bellum","bene","beneficium","benevolentia","benigne","bestia","bibo","bis","blandior","bonus","bos","brevis","cado","caecus","caelestis","caelum","calamitas","calcar","calco","calculus","callide","campana","candidus","canis","canonicus","canto","capillus","capio","capitulus","capto","caput","carbo","carcer","careo","caries","cariosus","caritas","carmen","carpo","carus","casso","caste","casus","catena","caterva","cattus","cauda","causa","caute","caveo","cavus","cedo","celebrer","celer","celo","cena","cenaculum","ceno","censura","centum","cerno","cernuus","certe","certo","certus","cervus","cetera","charisma","chirographum","cibo","cibus","cicuta","cilicium","cimentarius","ciminatio","cinis","circumvenio","cito","civis","civitas","clam","clamo","claro","clarus","claudeo","claustrum","clementia","clibanus","coadunatio","coaegresco","coepi","coerceo","cogito","cognatus","cognomen","cogo","cohaero","cohibeo","cohors","colligo","colloco","collum","colo","color","coma","combibo","comburo","comedo","comes","cometes","comis","comitatus","commemoro","comminor","commodo","communis","comparo","compello","complectus","compono","comprehendo","comptus","conatus","concedo","concido","conculco","condico","conduco","confero","confido","conforto","confugo","congregatio","conicio","coniecto","conitor","coniuratio","conor","conqueror","conscendo","conservo","considero","conspergo","constans","consuasor","contabesco","contego","contigo","contra","conturbo","conventus","convoco","copia","copiose","cornu","corona","corpus","correptius","corrigo","corroboro","corrumpo","coruscus","cotidie","crapula","cras","crastinus","creator","creber","crebro","credo","creo","creptio","crepusculum","cresco","creta","cribro","crinis","cruciamentum","crudelis","cruentus","crur","crustulum","crux","cubicularis","cubitum","cubo","cui","cuius","culpa","culpo","cultellus","cultura","cum","cunabula","cunae","cunctatio","cupiditas","cupio","cuppedia","cupressus","cur","cura","curatio","curia","curiositas","curis","curo","curriculum","currus","cursim","curso","cursus","curto","curtus","curvo","curvus","custodia","damnatio","damno","dapifer","debeo","debilito","decens","decerno","decet","decimus","decipio","decor","decretum","decumbo","dedecor","dedico","deduco","defaeco","defendo","defero","defessus","defetiscor","deficio","defigo","defleo","defluo","defungo","degenero","degero","degusto","deinde","delectatio","delego","deleo","delibero","delicate","delinquo","deludo","demens","demergo","demitto","demo","demonstro","demoror","demulceo","demum","denego","denique","dens","denuncio","denuo","deorsum","depereo","depono","depopulo","deporto","depraedor","deprecator","deprimo","depromo","depulso","deputo","derelinquo","derideo","deripio","desidero","desino","desipio","desolo","desparatus","despecto","despirmatio","infit","inflammatio","paens","patior","patria","patrocinor","patruus","pauci","paulatim","pauper","pax","peccatus","pecco","pecto","pectus","pecunia","pecus","peior","pel","ocer","socius","sodalitas","sol","soleo","solio","solitudo","solium","sollers","sollicito","solum","solus","solutio","solvo","somniculosus","somnus","sonitus","sono","sophismata","sopor","sordeo","sortitus","spargo","speciosus","spectaculum","speculum","sperno","spero","spes","spiculum","spiritus","spoliatio","sponte","stabilis","statim","statua","stella","stillicidium","stipes","stips","sto","strenuus","strues","studio","stultus","suadeo","suasoria","sub","subito","subiungo","sublime","subnecto","subseco","substantia","subvenio","succedo","succurro","sufficio","suffoco","suffragium","suggero","sui","sulum","sum","summa","summisse","summopere","sumo","sumptus","supellex","super","suppellex","supplanto","suppono","supra","surculus","surgo","sursum","suscipio","suspendo","sustineo","suus","synagoga","tabella","tabernus","tabesco","tabgo","tabula","taceo","tactus","taedium","talio","talis","talus","tam","tamdiu","tamen","tametsi","tamisium","tamquam","tandem","tantillus","tantum","tardus","tego","temeritas","temperantia","templum","temptatio","tempus","tenax","tendo","teneo","tener","tenuis","tenus","tepesco","tepidus","ter","terebro","teres","terga","tergeo","tergiversatio","tergo","tergum","termes","terminatio","tero","terra","terreo","territo","terror","tersus","tertius","testimonium","texo","textilis","textor","textus","thalassinus","theatrum","theca","thema","theologus","thermae","thesaurus","thesis","thorax","thymbra","thymum","tibi","timidus","timor","titulus","tolero","tollo","tondeo","tonsor","torqueo","torrens","tot","totidem","toties","totus","tracto","trado","traho","trans","tredecim","tremo","trepide","tres","tribuo","tricesimus","triduana","triginta","tripudio","tristis","triumphus","trucido","truculenter","tubineus","tui","tum","tumultus","tunc","turba","turbo","turpe","turpis","tutamen","tutis","tyrannus","uberrime","ubi","ulciscor","ullus","ulterius","ultio","ultra","umbra","umerus","umquam","una","unde","undique","universe","unus","urbanus","urbs","uredo","usitas","usque","ustilo","ustulo","usus","uter","uterque","utilis","utique","utor","utpote","utrimque","utroque","utrum","uxor","vaco","vacuus","vado","vae","valde","valens","valeo","valetudo","validus","vallum","vapulus","varietas","varius","vehemens","vel","velociter","velum","velut","venia","venio","ventito","ventosus","ventus","venustas","ver","verbera","verbum","vere","verecundia","vereor","vergo","veritas","vero","versus","verto","verumtamen","verus","vesco","vesica","vesper","vespillo","vester","vestigium","vestrum","vetus","via","vicinus","vicissitudo","victoria","victus","videlicet","video","viduata","viduo","vigilo","vigor","vilicus","vilis","vilitas","villa","vinco","vinculum","vindico","vinitor","vinum","vir","virga","virgo","viridis","viriliter","virtus","vis","viscus","vita","vitiosus","vitium","vito","vivo","vix","vobis","vociferor","voco","volaticus","volo","volubilis","voluntarius","volup","volutabrum","volva","vomer","vomica","vomito","vorago","vorax","voro","vos","votum","voveo","vox","vulariter","vulgaris","vulgivagus","vulgo","vulgus","vulnero","vulnus","vulpes","vulticulus","vultuosus","xiphias"]},{}],114:[function(e,t,a){t.exports=["alias","consequatur","aut","perferendis","sit","voluptatem","accusantium","doloremque","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni","dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","dolorem","ipsum","quia","dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut","labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum","exercitationem","ullam","corporis","nemo","enim","ipsam","voluptatem","quia","voluptas","sit","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis","autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","et","iusto","odio","dignissimos","ducimus","qui","blanditiis","praesentium","laudantium","totam","rem","voluptatum","deleniti","atque","corrupti","quos","dolores","et","quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","sed","ut","perspiciatis","unde","omnis","iste","natus","error","similique","sunt","in","culpa","qui","officia","deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et","expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo","porro","quisquam","est","qui","minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus","temporibus","autem","quibusdam","et","aut","consequatur","vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et","voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente","delectus","ut","aut","reiciendis","voluptatibus","maiores","doloribus","asperiores","repellat"]},{}],115:[function(e,t,a){t.exports=["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zula"]; +},{}],116:[function(e,t,a){var n={};t.exports=n,n.first_name=e("./first_name"),n.last_name=e("./last_name"),n.prefix=e("./prefix"),n.suffix=e("./suffix"),n.title=e("./title"),n.name=e("./name")},{"./first_name":115,"./last_name":117,"./name":118,"./prefix":119,"./suffix":120,"./title":121}],117:[function(e,t,a){t.exports=["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Gutmann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Hartmann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","MacGyver","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"]},{}],118:[function(e,t,a){t.exports=["#{prefix} #{first_name} #{last_name}","#{first_name} #{last_name} #{suffix}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{first_name} #{last_name}"]},{}],119:[function(e,t,a){t.exports=["Mr.","Mrs.","Ms.","Miss","Dr."]},{}],120:[function(e,t,a){t.exports=["Jr.","Sr.","I","II","III","IV","V","MD","DDS","PhD","DVM"]},{}],121:[function(e,t,a){t.exports={descriptor:["Lead","Senior","Direct","Corporate","Dynamic","Future","Product","National","Regional","District","Central","Global","Customer","Investor","Dynamic","International","Legacy","Forward","Internal","Human","Chief","Principal"],level:["Solutions","Program","Brand","Security","Research","Marketing","Directives","Implementation","Integration","Functionality","Response","Paradigm","Tactics","Identity","Markets","Group","Division","Applications","Optimization","Operations","Infrastructure","Intranet","Communications","Web","Branding","Quality","Assurance","Mobility","Accounts","Data","Creative","Configuration","Accountability","Interactions","Factors","Usability","Metrics"],job:["Supervisor","Associate","Executive","Liason","Officer","Manager","Engineer","Specialist","Director","Coordinator","Administrator","Architect","Analyst","Designer","Planner","Orchestrator","Technician","Developer","Producer","Consultant","Assistant","Facilitator","Agent","Representative","Strategist"]}},{}],122:[function(e,t,a){t.exports=["###-###-####","(###) ###-####","1-###-###-####","###.###.####","###-###-####","(###) ###-####","1-###-###-####","###.###.####","###-###-#### x###","(###) ###-#### x###","1-###-###-#### x###","###.###.#### x###","###-###-#### x####","(###) ###-#### x####","1-###-###-#### x####","###.###.#### x####","###-###-#### x#####","(###) ###-#### x#####","1-###-###-#### x#####","###.###.#### x#####"]},{}],123:[function(e,t,a){var n={};t.exports=n,n.formats=e("./formats")},{"./formats":122}],124:[function(e,t,a){t.exports=["ants","bats","bears","bees","birds","buffalo","cats","chickens","cattle","dogs","dolphins","ducks","elephants","fishes","foxes","frogs","geese","goats","horses","kangaroos","lions","monkeys","owls","oxen","penguins","people","pigs","rabbits","sheep","tigers","whales","wolves","zebras","banshees","crows","black cats","chimeras","ghosts","conspirators","dragons","dwarves","elves","enchanters","exorcists","sons","foes","giants","gnomes","goblins","gooses","griffins","lycanthropes","nemesis","ogres","oracles","prophets","sorcerors","spiders","spirits","vampires","warlocks","vixens","werewolves","witches","worshipers","zombies","druids"]},{}],125:[function(e,t,a){var n={};t.exports=n,n.creature=e("./creature"),n.name=e("./name")},{"./creature":124,"./name":126}],126:[function(e,t,a){t.exports=["#{Address.state} #{creature}"]},{}],127:[function(e,t,a){var n=function(e){var t=this,a=e.helpers;return t.words=function(t){return"undefined"==typeof t&&(t=3),a.shuffle(e.definitions.lorem.words).slice(0,t)},t.sentence=function(t,a){"undefined"==typeof t&&(t=3),"undefined"==typeof a&&(a=7);var n=e.lorem.words(t+e.random.number(a)).join(" ");return n.charAt(0).toUpperCase()+n.slice(1)+"."},t.sentences=function(t){"undefined"==typeof t&&(t=3);var a=[];for(t;t>0;t--)a.push(e.lorem.sentence());return a.join("\n")},t.paragraph=function(t){return"undefined"==typeof t&&(t=3),e.lorem.sentences(t+e.random.number(3))},t.paragraphs=function(t,a){"undefined"==typeof a&&(a="\n \r"),"undefined"==typeof t&&(t=3);var n=[];for(t;t>0;t--)n.push(e.lorem.paragraph());return n.join(a)},t};t.exports=n},{}],128:[function(e,t,a){function n(e){this.firstName=function(t){return"undefined"!=typeof e.definitions.name.male_first_name&&"undefined"!=typeof e.definitions.name.female_first_name?("number"!=typeof t&&(t=e.random.number(1)),0===t?e.random.arrayElement(e.locales[e.locale].name.male_first_name):e.random.arrayElement(e.locales[e.locale].name.female_first_name)):e.random.arrayElement(e.definitions.name.first_name)},this.lastName=function(t){return"undefined"!=typeof e.definitions.name.male_last_name&&"undefined"!=typeof e.definitions.name.female_last_name?("number"!=typeof t&&(t=e.random.number(1)),0===t?e.random.arrayElement(e.locales[e.locale].name.male_last_name):e.random.arrayElement(e.locales[e.locale].name.female_last_name)):e.random.arrayElement(e.definitions.name.last_name)},this.findName=function(t,a,n){var r,i,s=e.random.number(8);switch("number"!=typeof n&&(n=e.random.number(1)),t=t||e.name.firstName(n),a=a||e.name.lastName(n),s){case 0:if(r=e.name.prefix())return r+" "+t+" "+a;case 1:if(i=e.name.prefix())return t+" "+a+" "+i}return t+" "+a},this.jobTitle=function(){return e.name.jobDescriptor()+" "+e.name.jobArea()+" "+e.name.jobType()},this.prefix=function(){return e.random.arrayElement(e.definitions.name.prefix)},this.suffix=function(){return e.random.arrayElement(e.definitions.name.suffix)},this.title=function(){var t=e.random.arrayElement(e.definitions.name.title.descriptor),a=e.random.arrayElement(e.definitions.name.title.level),n=e.random.arrayElement(e.definitions.name.title.job);return t+" "+a+" "+n},this.jobDescriptor=function(){return e.random.arrayElement(e.definitions.name.title.descriptor)},this.jobArea=function(){return e.random.arrayElement(e.definitions.name.title.level)},this.jobType=function(){return e.random.arrayElement(e.definitions.name.title.job)}}t.exports=n},{}],129:[function(e,t,a){var n=function(e){var t=this;return t.phoneNumber=function(t){return t=t||e.phone.phoneFormats(),e.helpers.replaceSymbolWithNumber(t)},t.phoneNumberFormat=function(t){return t=t||0,e.helpers.replaceSymbolWithNumber(e.definitions.phone_number.formats[t])},t.phoneFormats=function(){return e.random.arrayElement(e.definitions.phone_number.formats)},t};t.exports=n},{}],130:[function(e,t,a){function n(e,t){return t&&(Array.isArray(t)&&t.length?r.seed_array(t):r.seed(t)),this.number=function(e){"number"==typeof e&&(e={max:e}),e=e||{},"undefined"==typeof e.min&&(e.min=0),"undefined"==typeof e.max&&(e.max=99999),"undefined"==typeof e.precision&&(e.precision=1);var t=e.max;t>=0&&(t+=e.precision);var a=e.precision*Math.floor(r.rand(t/e.precision,e.min/e.precision));return a},this.arrayElement=function(t){t=t||["a","b","c"];var a=e.random.number({max:t.length-1});return t[a]},this.objectElement=function(t,a){t=t||{foo:"bar",too:"car"};var n=Object.keys(t),r=e.random.arrayElement(n);return"key"===a?r:t[r]},this.uuid=function(){var e="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",t=function(e){var t=16*Math.random()|0,a="x"==e?t:3&t|8;return a.toString(16)};return e.replace(/[xy]/g,t)},this["boolean"]=function(){return!!e.random.number(1)},this}var r=e("../vendor/mersenne");t.exports=n},{"../vendor/mersenne":132}],131:[function(e,t,a){var n=e("../lib"),r=new n({locale:"en",localeFallback:"en"});r.locales.en=e("../lib/locales/en"),r.locales.en=e("../lib/locales/en"),t.exports=r},{"../lib":40,"../lib/locales/en":107}],132:[function(e,t,a){function n(){function e(e){return 0>e?(e^o)+o:e}function t(t,a){return a>t?e(4294967296-(a-t)&4294967295):t-a}function a(t,a){return e(t+a&4294967295)}function n(t,n){for(var r=0,i=0;32>i;++i)t>>>i&1&&(r=a(r,e(n<l;l++)c[l]=a(n(1812433253,e(c[l-1]^c[l-1]>>>30)),l),c[l]=e(4294967295&c[l])},this.init_by_array=function(i,s){var o,u,l;for(this.init_genrand(19650218),o=1,u=0,l=r>s?r:s;l;l--)c[o]=a(a(e(c[o]^n(e(c[o-1]^c[o-1]>>>30),1664525)),i[u]),u),c[o]=e(4294967295&c[o]),o++,u++,o>=r&&(c[0]=c[r-1],o=1),u>=s&&(u=0);for(l=r-1;l;l--)c[o]=t(e((dbg=c[o])^n(e(c[o-1]^c[o-1]>>>30),1566083941)),o),c[o]=e(4294967295&c[o]),o++,o>=r&&(c[0]=c[r-1],o=1);c[0]=2147483648};var f=[0,s];this.genrand_int32=function(){var t;if(l>=r){var a;for(l==r+1&&this.init_genrand(5489),a=0;r-i>a;a++)t=e(c[a]&o|c[a+1]&u),c[a]=e(c[a+i]^t>>>1^f[1&t]);for(;r-1>a;a++)t=e(c[a]&o|c[a+1]&u),c[a]=e(c[a+(i-r)]^t>>>1^f[1&t]);t=e(c[r-1]&o|c[0]&u),c[r-1]=e(c[i-1]^t>>>1^f[1&t]),l=0}return t=c[l++],t=e(t^t>>>11),t=e(t^t<<7&2636928640),t=e(t^t<<15&4022730752),t=e(t^t>>>18)},this.genrand_int31=function(){return this.genrand_int32()>>>1},this.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},this.genrand_real2=function(){return this.genrand_int32()*(1/4294967296)},this.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},this.genrand_res53=function(){var e=this.genrand_int32()>>>5,t=this.genrand_int32()>>>6;return(67108864*e+t)*(1/9007199254740992)}}a.MersenneTwister19937=n;var r=new n;r.init_genrand((new Date).getTime()%1e9),a.rand=function(e,t){return void 0===e&&(t=0,e=32768),Math.floor(r.genrand_real2()*(e-t)+t)},a.seed=function(e){if("number"!=typeof e)throw new Error("seed(S) must take numeric argument; is "+typeof e);r.init_genrand(e)},a.seed_array=function(e){if("object"!=typeof e)throw new Error("seed_array(A) must take array of numbers; is "+typeof e);r.init_by_array(e)}},{}],133:[function(e,t,a){!function(e){var n,r,i,s,o;i=/[a-zA-Z]$/,o=/[aeiouAEIOU]$/,r=/[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]$/,n=e.localPasswordGeneratorLibraryName||"generatePassword",s=function(e,t,a,n){var i,u;return null==e&&(e=10),null==t&&(t=!0),null==a&&(a=/\w/),null==n&&(n=""),n.length>=e?n:(t&&(a=n.match(r)?o:r),u=Math.floor(94*Math.random())+33,i=String.fromCharCode(u),t&&(i=i.toLowerCase()),i.match(a)?s(e,t,a,""+n+i):s(e,t,a,n))},("undefined"!=typeof a?a:e)[n]=s,"undefined"!=typeof a&&"undefined"!=typeof t&&t.exports&&(t.exports=s)}(this)},{}],134:[function(e,t,a){function n(e,t){if(e=e||0,t=t||100,"number"==typeof t&&"number"==typeof e)return function(e,t){if(e>t)throw new RangeError("expected min <= max; got min = "+e+", max = "+t);return Math.floor(Math.random()*(t-e+1))+e}(e,t);if("[object Array]"===Object.prototype.toString.call(e))return e[Math.floor(Math.random()*e.length)];if(e&&"object"==typeof e)return function(e){var t,a,r=n(0,100)/100,i=0,s=0;for(t in e)if(e.hasOwnProperty(t)){if(s=e[t]+i,a=t,r>=i&&s>=r)break;i+=e[t]}return a}(e);throw new TypeError("Invalid arguments passed to rnd. ("+(t?e+", "+t:e)+")")}function r(){return n(["AB","AF","AN","AR","AS","AZ","BE","BG","BN","BO","BR","BS","CA","CE","CO","CS","CU","CY","DA","DE","EL","EN","EO","ES","ET","EU","FA","FI","FJ","FO","FR","FY","GA","GD","GL","GV","HE","HI","HR","HT","HU","HY","ID","IS","IT","JA","JV","KA","KG","KO","KU","KW","KY","LA","LB","LI","LN","LT","LV","MG","MK","MN","MO","MS","MT","MY","NB","NE","NL","NN","NO","OC","PL","PT","RM","RO","RU","SC","SE","SK","SL","SO","SQ","SR","SV","SW","TK","TR","TY","UK","UR","UZ","VI","VO","YI","ZH"])}function i(){var e=n({chrome:.45132810566,iexplorer:.27477061836,firefox:.19384170608,safari:.06186781118,opera:.01574236955}),t={chrome:{win:.89,mac:.09,lin:.02},firefox:{win:.83,mac:.16,lin:.01},opera:{win:.91,mac:.03,lin:.06},safari:{win:.04,mac:.96},iexplorer:["win"]};return[e,n(t[e])]}function s(e){var t={lin:["i686","x86_64"],mac:{Intel:.48,PPC:.01,"U; Intel":.48,"U; PPC":.01},win:["","WOW64","Win64; x64"]};return n(t[e])}function o(e){for(var t="",a=0;e>a;a++)t+="."+n(0,9);return t}var u={net:function(){return[n(1,4),n(0,9),n(1e4,99999),n(0,9)].join(".")},nt:function(){return n(5,6)+"."+n(0,3)},ie:function(){return n(7,11)},trident:function(){return n(3,7)+"."+n(0,1)},osx:function(e){return[10,n(5,10),n(0,9)].join(e||".")},chrome:function(){return[n(13,39),0,n(800,899),0].join(".")},presto:function(){return"2.9."+n(160,190)},presto2:function(){return n(10,12)+".00"},safari:function(){return n(531,538)+"."+n(0,2)+"."+n(0,2)}},c={firefox:function(e){var t=n(5,15)+o(2),a="Gecko/20100101 Firefox/"+t,r=s(e),i="win"===e?"(Windows NT "+u.nt()+(r?"; "+r:""):"mac"===e?"(Macintosh; "+r+" Mac OS X "+u.osx():"(X11; Linux "+r;return"Mozilla/5.0 "+i+"; rv:"+t.slice(0,-2)+") "+a},iexplorer:function(){var e=u.ie();return e>=11?"Mozilla/5.0 (Windows NT 6."+n(1,3)+"; Trident/7.0; "+n(["Touch; ",""])+"rv:11.0) like Gecko":"Mozilla/5.0 (compatible; MSIE "+e+".0; Windows NT "+u.nt()+"; Trident/"+u.trident()+(1===n(0,1)?"; .NET CLR "+u.net():"")+")"},opera:function(e){var t=" Presto/"+u.presto()+" Version/"+u.presto2()+")",a="win"===e?"(Windows NT "+u.nt()+"; U; "+r()+t:"lin"===e?"(X11; Linux "+s(e)+"; U; "+r()+t:"(Macintosh; Intel Mac OS X "+u.osx()+" U; "+r()+" Presto/"+u.presto()+" Version/"+u.presto2()+")";return"Opera/"+n(9,14)+"."+n(0,99)+" "+a},safari:function l(e){var l=u.safari(),t=n(4,7)+"."+n(0,1)+"."+n(0,10),a="mac"===e?"(Macintosh; "+s("mac")+" Mac OS X "+u.osx("_")+" rv:"+n(2,6)+".0; "+r()+") ":"(Windows; U; Windows NT "+u.nt()+")";return"Mozilla/5.0 "+a+"AppleWebKit/"+l+" (KHTML, like Gecko) Version/"+t+" Safari/"+l},chrome:function(e){var t=u.safari(),a="mac"===e?"(Macintosh; "+s("mac")+" Mac OS X "+u.osx("_")+") ":"win"===e?"(Windows; U; Windows NT "+u.nt()+")":"(X11; Linux "+s(e);return"Mozilla/5.0 "+a+" AppleWebKit/"+t+" (KHTML, like Gecko) Chrome/"+u.chrome()+" Safari/"+t}};a.generate=function(){var e=i();return c[e[0]](e[1])}},{}],135:[function(e,t,a){a.read=function(e,t,a,n,r){var i,s,o=8*r-n-1,u=(1<>1,l=-7,f=a?r-1:0,p=a?-1:1,m=e[t+f];for(f+=p,i=m&(1<<-l)-1,m>>=-l,l+=o;l>0;i=256*i+e[t+f],f+=p,l-=8);for(s=i&(1<<-l)-1,i>>=-l,l+=n;l>0;s=256*s+e[t+f],f+=p,l-=8);if(0===i)i=1-c;else{if(i===u)return s?NaN:(m?-1:1)*(1/0);s+=Math.pow(2,n),i-=c}return(m?-1:1)*s*Math.pow(2,i-n)},a.write=function(e,t,a,n,r,i){var s,o,u,c=8*i-r-1,l=(1<>1,p=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,m=n?0:i-1,h=n?1:-1,d=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,s=l):(s=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-s))<1&&(s--,u*=2),t+=s+f>=1?p/u:p*Math.pow(2,1-f),t*u>=2&&(s++,u/=2),s+f>=l?(o=0,s=l):s+f>=1?(o=(t*u-1)*Math.pow(2,r),s+=f):(o=t*Math.pow(2,f-1)*Math.pow(2,r),s=0));r>=8;e[a+m]=255&o,m+=h,o/=256,r-=8);for(s=s<0;e[a+m]=255&s,m+=h,s/=256,c-=8);e[a+m-h]|=128*d}},{}],136:[function(e,t,a){t.exports=e("./lib/inherit")},{"./lib/inherit":137}],137:[function(t,a,n){!function(t){function r(e){var t=p(e);if(w)for(var a,n=0;a=E[n++];)e.hasOwnProperty(a)&&t.push(a);return t}function i(e,t,a){for(var n,i,s=r(a),o=0,c=s.length;c>o;)"__self"!==(n=s[o++])&&(i=a[n],g(i)&&(!u||i.toString().indexOf(".__base")>-1)?t[n]=function(a,n){var r=e[a]?e[a]:"__constructor"===a?t.__self.__parent:y;return function(){var e=this.__base;this.__base=r;var t=n.apply(this,arguments);return this.__base=e,t}}(n,i):t[n]=i)}function s(e,t){for(var a,n=1;a=e[n++];)t?g(a)?o.self(t,a.prototype,a):o.self(t,a):t=g(a)?o(e[0],a.prototype,a):o(e[0],a);return t||e[0]}function o(){var e=arguments,t=d(e[0]),a=t||g(e[0]),n=a?t?s(e[0]):e[0]:c,r=e[a?1:0]||{},o=e[a?2:1],u=r.__constructor||a&&n.prototype.__constructor?function(){return this.__constructor.apply(this,arguments)}:a?function(){return n.apply(this,arguments)}:function(){};if(!a)return u.prototype=r,u.prototype.__self=u.prototype.constructor=u,m(u,o);m(u,n),u.__parent=n;var l=n.prototype,p=u.prototype=f(l);return p.__self=p.constructor=u,r&&i(l,p,r),o&&i(n,u,o),u}var u=function(){"_"}.toString().indexOf("_")>-1,c=function(){},l=Object.prototype.hasOwnProperty,f=Object.create||function(e){var t=function(){};return t.prototype=e,new t},p=Object.keys||function(e){var t=[];for(var a in e)l.call(e,a)&&t.push(a);return t},m=function(e,t){for(var a in t)l.call(t,a)&&(e[a]=t[a]);return e},h=Object.prototype.toString,d=Array.isArray||function(e){return"[object Array]"===h.call(e)},g=function(e){return"[object Function]"===h.call(e)},y=function(){},w=!0,v={toString:""};for(var b in v)v.hasOwnProperty(b)&&(w=!1);var E=w?["toString","valueOf"]:null;o.self=function(){var e=arguments,t=d(e[0]),a=t?s(e[0],e[0][0]):e[0],n=e[1],r=e[2],o=a.prototype;return n&&i(o,o,n),r&&i(a,a,r),a};var A=!0;"object"==typeof n&&(a.exports=o,A=!1),"object"==typeof modules&&(modules.define("inherit",function(e){e(o)}),A=!1),"function"==typeof e&&(e(function(e,t,a){a.exports=o}),A=!1),A&&(t.inherit=o)}(this)},{}],138:[function(e,t,a){t.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},{}],139:[function(e,t,a){!function(a){"use strict";var n,r=a.Base64,i="2.1.9";if("undefined"!=typeof t&&t.exports)try{n=e("buffer").Buffer}catch(s){}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=function(e){for(var t={},a=0,n=e.length;n>a;a++)t[e.charAt(a)]=a;return t}(o),c=String.fromCharCode,l=function(e){if(e.length<2){var t=e.charCodeAt(0);return 128>t?e:2048>t?c(192|t>>>6)+c(128|63&t):c(224|t>>>12&15)+c(128|t>>>6&63)+c(128|63&t)}var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return c(240|t>>>18&7)+c(128|t>>>12&63)+c(128|t>>>6&63)+c(128|63&t)},f=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,p=function(e){return e.replace(f,l)},m=function(e){var t=[0,2,1][e.length%3],a=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0),n=[o.charAt(a>>>18),o.charAt(a>>>12&63),t>=2?"=":o.charAt(a>>>6&63),t>=1?"=":o.charAt(63&a)];return n.join("")},h=a.btoa?function(e){return a.btoa(e)}:function(e){return e.replace(/[\s\S]{1,3}/g,m)},d=n?function(e){return(e.constructor===n.constructor?e:new n(e)).toString("base64")}:function(e){return h(p(e))},g=function(e,t){return t?d(String(e)).replace(/[+\/]/g,function(e){return"+"==e?"-":"_"}).replace(/=/g,""):d(String(e))},y=function(e){return g(e,!0)},w=new RegExp(["[À-ß][€-¿]","[à-ï][€-¿]{2}","[ð-÷][€-¿]{3}"].join("|"),"g"),v=function(e){switch(e.length){case 4:var t=(7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3),a=t-65536;return c((a>>>10)+55296)+c((1023&a)+56320);case 3:return c((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return c((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},b=function(e){return e.replace(w,v)},E=function(e){var t=e.length,a=t%4,n=(t>0?u[e.charAt(0)]<<18:0)|(t>1?u[e.charAt(1)]<<12:0)|(t>2?u[e.charAt(2)]<<6:0)|(t>3?u[e.charAt(3)]:0),r=[c(n>>>16),c(n>>>8&255),c(255&n)];return r.length-=[0,0,2,1][a],r.join("")},A=a.atob?function(e){return a.atob(e)}:function(e){return e.replace(/[\s\S]{1,4}/g,E)},D=n?function(e){return(e.constructor===n.constructor?e:new n(e,"base64")).toString()}:function(e){return b(A(e))},j=function(e){return D(String(e).replace(/[-_]/g,function(e){return"-"==e?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))},x=function(){var e=a.Base64;return a.Base64=r,e};if(a.Base64={VERSION:i,atob:A,btoa:h,fromBase64:j,toBase64:g,utob:p,encode:g,encodeURI:y,btou:b,decode:j,noConflict:x},"function"==typeof Object.defineProperty){var C=function(e){return{value:e,enumerable:!1,writable:!0,configurable:!0}};a.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",C(function(){return j(this)})),Object.defineProperty(String.prototype,"toBase64",C(function(e){return g(this,e)})),Object.defineProperty(String.prototype,"toBase64URI",C(function(){return g(this,!0)}))}}a.Meteor&&(Base64=a.Base64)}(this)},{buffer:16}],140:[function(e,t,a){"use strict";var n=e("./lib/js-yaml.js");t.exports=n},{"./lib/js-yaml.js":141}],141:[function(e,t,a){"use strict";function n(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var r=e("./js-yaml/loader"),i=e("./js-yaml/dumper");t.exports.Type=e("./js-yaml/type"),t.exports.Schema=e("./js-yaml/schema"),t.exports.FAILSAFE_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.JSON_SCHEMA=e("./js-yaml/schema/json"),t.exports.CORE_SCHEMA=e("./js-yaml/schema/core"),t.exports.DEFAULT_SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_FULL_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.load=r.load,t.exports.loadAll=r.loadAll,t.exports.safeLoad=r.safeLoad,t.exports.safeLoadAll=r.safeLoadAll,t.exports.dump=i.dump,t.exports.safeDump=i.safeDump,t.exports.YAMLException=e("./js-yaml/exception"),t.exports.MINIMAL_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.scan=n("scan"),t.exports.parse=n("parse"),t.exports.compose=n("compose"),t.exports.addConstructor=n("addConstructor")},{"./js-yaml/dumper":143,"./js-yaml/exception":144,"./js-yaml/loader":145,"./js-yaml/schema":147,"./js-yaml/schema/core":148,"./js-yaml/schema/default_full":149,"./js-yaml/schema/default_safe":150,"./js-yaml/schema/failsafe":151,"./js-yaml/schema/json":152,"./js-yaml/type":153}],142:[function(e,t,a){"use strict";function n(e){return"undefined"==typeof e||null===e}function r(e){return"object"==typeof e&&null!==e}function i(e){return Array.isArray(e)?e:n(e)?[]:[e]}function s(e,t){var a,n,r,i;if(t)for(i=Object.keys(t),a=0,n=i.length;n>a;a+=1)r=i[a],e[r]=t[r];return e}function o(e,t){var a,n="";for(a=0;t>a;a+=1)n+=e;return n}function u(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e}t.exports.isNothing=n,t.exports.isObject=r,t.exports.toArray=i,t.exports.repeat=o,t.exports.isNegativeZero=u,t.exports.extend=s},{}],143:[function(e,t,a){"use strict";function n(e,t){var a,n,r,i,s,o,u;if(null===t)return{};for(a={},n=Object.keys(t),r=0,i=n.length;i>r;r+=1)s=n[r],o=String(t[s]),"!!"===s.slice(0,2)&&(s="tag:yaml.org,2002:"+s.slice(2)),u=e.compiledTypeMap[s],u&&F.call(u.styleAliases,o)&&(o=u.styleAliases[o]),a[s]=o;return a}function r(e){var t,a,n;if(t=e.toString(16).toUpperCase(),255>=e)a="x",n=2;else if(65535>=e)a="u",n=4;else{if(!(4294967295>=e))throw new C("code point within a string may not be greater than 0xFFFFFFFF");a="U",n=8}return"\\"+a+x.repeat("0",n-t.length)+t}function i(e){this.schema=e.schema||_,this.indent=Math.max(1,e.indent||2),this.skipInvalid=e.skipInvalid||!1,this.flowLevel=x.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=n(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function s(e,t){for(var a,n=x.repeat(" ",t),r=0,i=-1,s="",o=e.length;o>r;)i=e.indexOf("\n",r),-1===i?(a=e.slice(r),r=o):(a=e.slice(r,i+1),r=i+1),a.length&&"\n"!==a&&(s+=n),s+=a;return s}function o(e,t){return"\n"+x.repeat(" ",e.indent*t)}function u(e,t){var a,n,r;for(a=0,n=e.implicitTypes.length;n>a;a+=1)if(r=e.implicitTypes[a],r.resolve(t))return!0;return!1}function c(e){this.source=e,this.result="",this.checkpoint=0}function l(e,t,a,n){var r,i,o,l,p,d,g,y,w,v,b,E,A,D,j,x,C,_,S,z,F;if(0===t.length)return void(e.dump="''");if(-1!==te.indexOf(t))return void(e.dump="'"+t+"'");for(r=!0,i=t.length?t.charCodeAt(0):0,o=M===i||M===t.charCodeAt(t.length-1),($===i||G===i||q===i||Y===i)&&(r=!1),o?(r=!1,l=!1,p=!1):(l=!n,p=!n),d=!0,g=new c(t),y=!1,w=0,v=0,b=e.indent*a,E=e.lineWidth,-1===E&&(E=9007199254740991),40>b?E-=b:E=40,D=0;D0&&(C=t.charCodeAt(D-1),C===M&&(p=!1,l=!1)),l&&(_=D-w,w=D,_>v&&(v=_))),A!==O&&(d=!1),g.takeUpTo(D),g.escapeChar())}if(r&&u(e,t)&&(r=!1),S="",(l||p)&&(z=0,t.charCodeAt(t.length-1)===R&&(z+=1,t.charCodeAt(t.length-2)===R&&(z+=1)),0===z?S="-":2===z&&(S="+")),p&&E>v&&(l=!1),y||(p=!1),r)e.dump=t;else if(d)e.dump="'"+t+"'";else if(l)F=f(t,E),e.dump=">"+S+"\n"+s(F,b);else if(p)S||(t=t.replace(/\n$/,"")),e.dump="|"+S+"\n"+s(t,b);else{if(!g)throw new Error("Failed to dump scalar value");g.finish(),e.dump='"'+g.result+'"'}}function f(e,t){var a,n="",r=0,i=e.length,s=/\n+$/.exec(e);for(s&&(i=s.index+1);i>r;)a=e.indexOf("\n",r),a>i||-1===a?(n&&(n+="\n\n"),n+=p(e.slice(r,i),t),r=i):(n&&(n+="\n\n"),n+=p(e.slice(r,a),t),r=a+1);return s&&"\n"!==s[0]&&(n+=s[0]),n}function p(e,t){if(""===e)return e;for(var a,n,r,i=/[^\s] [^\s]/g,s="",o=0,u=0,c=i.exec(e);c;)a=c.index,a-u>t&&(n=o!==u?o:a,s&&(s+="\n"),r=e.slice(u,n),s+=r,u=n+1),o=a+1,c=i.exec(e);return s&&(s+="\n"),s+=u!==o&&e.length-u>t?e.slice(u,o)+"\n"+e.slice(o+1):e.slice(u)}function m(e){return k!==e&&R!==e&&I!==e&&K!==e&&W!==e&&V!==e&&Z!==e&&Q!==e&&B!==e&&L!==e&&U!==e&&P!==e&&X!==e&&J!==e&&N!==e&&O!==e&&T!==e&&H!==e&&!ee[e]&&!h(e)}function h(e){return!(e>=32&&126>=e||133===e||e>=160&&55295>=e||e>=57344&&65533>=e||e>=65536&&1114111>=e)}function d(e,t,a){var n,r,i="",s=e.tag;for(n=0,r=a.length;r>n;n+=1)b(e,t,a[n],!1,!1)&&(0!==n&&(i+=", "),i+=e.dump);e.tag=s,e.dump="["+i+"]"}function g(e,t,a,n){var r,i,s="",u=e.tag;for(r=0,i=a.length;i>r;r+=1)b(e,t+1,a[r],!0,!0)&&(n&&0===r||(s+=o(e,t)),s+="- "+e.dump);e.tag=u,e.dump=s||"[]"}function y(e,t,a){var n,r,i,s,o,u="",c=e.tag,l=Object.keys(a);for(n=0,r=l.length;r>n;n+=1)o="",0!==n&&(o+=", "),i=l[n],s=a[i],b(e,t,i,!1,!1)&&(e.dump.length>1024&&(o+="? "),o+=e.dump+": ",b(e,t,s,!1,!1)&&(o+=e.dump,u+=o));e.tag=c,e.dump="{"+u+"}"}function w(e,t,a,n){var r,i,s,u,c,l,f="",p=e.tag,m=Object.keys(a);if(e.sortKeys===!0)m.sort();else if("function"==typeof e.sortKeys)m.sort(e.sortKeys);else if(e.sortKeys)throw new C("sortKeys must be a boolean or a function");for(r=0,i=m.length;i>r;r+=1)l="",n&&0===r||(l+=o(e,t)),s=m[r],u=a[s],b(e,t+1,s,!0,!0,!0)&&(c=null!==e.tag&&"?"!==e.tag||e.dump&&e.dump.length>1024,c&&(l+=e.dump&&R===e.dump.charCodeAt(0)?"?":"? "),l+=e.dump,c&&(l+=o(e,t)),b(e,t+1,u,!0,c)&&(l+=e.dump&&R===e.dump.charCodeAt(0)?":":": ",l+=e.dump,f+=l));e.tag=p,e.dump=f||"{}"}function v(e,t,a){var n,r,i,s,o,u;for(r=a?e.explicitTypes:e.implicitTypes,i=0,s=r.length;s>i;i+=1)if(o=r[i],(o.instanceOf||o.predicate)&&(!o.instanceOf||"object"==typeof t&&t instanceof o.instanceOf)&&(!o.predicate||o.predicate(t))){if(e.tag=a?o.tag:"?",o.represent){if(u=e.styleMap[o.tag]||o.defaultStyle,"[object Function]"===z.call(o.represent))n=o.represent(t,u);else{if(!F.call(o.represent,u))throw new C("!<"+o.tag+'> tag resolver accepts not "'+u+'" style');n=o.represent[u](t,u)}e.dump=n}return!0}return!1}function b(e,t,a,n,r,i){e.tag=null,e.dump=a,v(e,a,!1)||v(e,a,!0);var s=z.call(e.dump);n&&(n=0>e.flowLevel||e.flowLevel>t);var o,u,c="[object Object]"===s||"[object Array]"===s;if(c&&(o=e.duplicates.indexOf(a),u=-1!==o),(null!==e.tag&&"?"!==e.tag||u||2!==e.indent&&t>0)&&(r=!1),u&&e.usedDuplicates[o])e.dump="*ref_"+o;else{if(c&&u&&!e.usedDuplicates[o]&&(e.usedDuplicates[o]=!0),"[object Object]"===s)n&&0!==Object.keys(e.dump).length?(w(e,t,e.dump,r),u&&(e.dump="&ref_"+o+e.dump)):(y(e,t,e.dump),u&&(e.dump="&ref_"+o+" "+e.dump));else if("[object Array]"===s)n&&0!==e.dump.length?(g(e,t,e.dump,r),u&&(e.dump="&ref_"+o+e.dump)):(d(e,t,e.dump),u&&(e.dump="&ref_"+o+" "+e.dump));else{if("[object String]"!==s){if(e.skipInvalid)return!1;throw new C("unacceptable kind of an object to dump "+s)}"?"!==e.tag&&l(e,e.dump,t,i)}null!==e.tag&&"?"!==e.tag&&(e.dump="!<"+e.tag+"> "+e.dump)}return!0}function E(e,t){var a,n,r=[],i=[];for(A(e,r,i),a=0,n=i.length;n>a;a+=1)t.duplicates.push(r[i[a]]);t.usedDuplicates=new Array(n)}function A(e,t,a){var n,r,i;if(null!==e&&"object"==typeof e)if(r=t.indexOf(e),-1!==r)-1===a.indexOf(r)&&a.push(r);else if(t.push(e),Array.isArray(e))for(r=0,i=e.length;i>r;r+=1)A(e[r],t,a);else for(n=Object.keys(e),r=0,i=n.length;i>r;r+=1)A(e[n[r]],t,a); +}function D(e,t){t=t||{};var a=new i(t);return E(e,a),b(a,0,e,!0,!0)?a.dump+"\n":""}function j(e,t){return D(e,x.extend({schema:S},t))}var x=e("./common"),C=e("./exception"),_=e("./schema/default_full"),S=e("./schema/default_safe"),z=Object.prototype.toString,F=Object.prototype.hasOwnProperty,k=9,R=10,I=13,M=32,P=33,O=34,B=35,T=37,L=38,N=39,U=42,K=44,$=45,H=58,J=62,G=63,q=64,W=91,V=93,Y=96,Z=123,X=124,Q=125,ee={};ee[0]="\\0",ee[7]="\\a",ee[8]="\\b",ee[9]="\\t",ee[10]="\\n",ee[11]="\\v",ee[12]="\\f",ee[13]="\\r",ee[27]="\\e",ee[34]='\\"',ee[92]="\\\\",ee[133]="\\N",ee[160]="\\_",ee[8232]="\\L",ee[8233]="\\P";var te=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];c.prototype.takeUpTo=function(e){var t;if(e checkpoint"),t.position=e,t.checkpoint=this.checkpoint,t;return this.result+=this.source.slice(this.checkpoint,e),this.checkpoint=e,this},c.prototype.escapeChar=function(){var e,t;return e=this.source.charCodeAt(this.checkpoint),t=ee[e]||r(e),this.result+=t,this.checkpoint+=1,this},c.prototype.finish=function(){this.source.length>this.checkpoint&&this.takeUpTo(this.source.length)},t.exports.dump=D,t.exports.safeDump=j},{"./common":142,"./exception":144,"./schema/default_full":149,"./schema/default_safe":150}],144:[function(e,t,a){"use strict";function n(e,t){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name="YAMLException",this.reason=e,this.mark=t,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():"")}var r=e("inherit");r(n,Error),n.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t},t.exports=n},{inherit:136}],145:[function(e,t,a){"use strict";function n(e){return 10===e||13===e}function r(e){return 9===e||32===e}function i(e){return 9===e||32===e||10===e||13===e}function s(e){return 44===e||91===e||93===e||123===e||125===e}function o(e){var t;return e>=48&&57>=e?e-48:(t=32|e,t>=97&&102>=t?t-97+10:-1)}function u(e){return 120===e?2:117===e?4:85===e?8:0}function c(e){return e>=48&&57>=e?e-48:-1}function l(e){return 48===e?"\x00":97===e?"":98===e?"\b":116===e?" ":9===e?" ":110===e?"\n":118===e?"\x0B":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"…":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function f(e){return 65535>=e?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function p(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||H,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function m(e,t){return new U(t,new K(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function h(e,t){throw m(e,t)}function d(e,t){e.onWarning&&e.onWarning.call(null,m(e,t))}function g(e,t,a,n){var r,i,s,o;if(a>t){if(o=e.input.slice(t,a),n)for(r=0,i=o.length;i>r;r+=1)s=o.charCodeAt(r),9===s||s>=32&&1114111>=s||h(e,"expected valid JSON character");else Q.test(o)&&h(e,"the stream contains non-printable characters");e.result+=o}}function y(e,t,a){var n,r,i,s;for(N.isObject(a)||h(e,"cannot merge mappings; the provided source object is unacceptable"),n=Object.keys(a),i=0,s=n.length;s>i;i+=1)r=n[i],J.call(t,r)||(t[r]=a[r])}function w(e,t,a,n,r){var i,s;if(n=String(n),null===t&&(t={}),"tag:yaml.org,2002:merge"===a)if(Array.isArray(r))for(i=0,s=r.length;s>i;i+=1)y(e,t,r[i]);else y(e,t,r);else t[n]=r;return t}function v(e){var t;t=e.input.charCodeAt(e.position),10===t?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):h(e,"a line break is expected"),e.line+=1,e.lineStart=e.position}function b(e,t,a){for(var i=0,s=e.input.charCodeAt(e.position);0!==s;){for(;r(s);)s=e.input.charCodeAt(++e.position);if(t&&35===s)do s=e.input.charCodeAt(++e.position);while(10!==s&&13!==s&&0!==s);if(!n(s))break;for(v(e),s=e.input.charCodeAt(e.position),i++,e.lineIndent=0;32===s;)e.lineIndent++,s=e.input.charCodeAt(++e.position)}return-1!==a&&0!==i&&e.lineIndent1&&(e.result+=N.repeat("\n",t-1))}function D(e,t,a){var o,u,c,l,f,p,m,h,d,y=e.kind,w=e.result;if(d=e.input.charCodeAt(e.position),i(d)||s(d)||35===d||38===d||42===d||33===d||124===d||62===d||39===d||34===d||37===d||64===d||96===d)return!1;if((63===d||45===d)&&(u=e.input.charCodeAt(e.position+1),i(u)||a&&s(u)))return!1;for(e.kind="scalar",e.result="",c=l=e.position,f=!1;0!==d;){if(58===d){if(u=e.input.charCodeAt(e.position+1),i(u)||a&&s(u))break}else if(35===d){if(o=e.input.charCodeAt(e.position-1),i(o))break}else{if(e.position===e.lineStart&&E(e)||a&&s(d))break;if(n(d)){if(p=e.line,m=e.lineStart,h=e.lineIndent,b(e,!1,-1),e.lineIndent>=t){f=!0,d=e.input.charCodeAt(e.position);continue}e.position=l,e.line=p,e.lineStart=m,e.lineIndent=h;break}}f&&(g(e,c,l,!1),A(e,e.line-p),c=l=e.position,f=!1),r(d)||(l=e.position+1),d=e.input.charCodeAt(++e.position)}return g(e,c,l,!1),e.result?!0:(e.kind=y,e.result=w,!1)}function j(e,t){var a,r,i;if(a=e.input.charCodeAt(e.position),39!==a)return!1;for(e.kind="scalar",e.result="",e.position++,r=i=e.position;0!==(a=e.input.charCodeAt(e.position));)if(39===a){if(g(e,r,e.position,!0),a=e.input.charCodeAt(++e.position),39!==a)return!0;r=i=e.position,e.position++}else n(a)?(g(e,r,i,!0),A(e,b(e,!1,t)),r=i=e.position):e.position===e.lineStart&&E(e)?h(e,"unexpected end of the document within a single quoted scalar"):(e.position++,i=e.position);h(e,"unexpected end of the stream within a single quoted scalar")}function x(e,t){var a,r,i,s,c,l;if(l=e.input.charCodeAt(e.position),34!==l)return!1;for(e.kind="scalar",e.result="",e.position++,a=r=e.position;0!==(l=e.input.charCodeAt(e.position));){if(34===l)return g(e,a,e.position,!0),e.position++,!0;if(92===l){if(g(e,a,e.position,!0),l=e.input.charCodeAt(++e.position),n(l))b(e,!1,t);else if(256>l&&re[l])e.result+=ie[l],e.position++;else if((c=u(l))>0){for(i=c,s=0;i>0;i--)l=e.input.charCodeAt(++e.position),(c=o(l))>=0?s=(s<<4)+c:h(e,"expected hexadecimal character");e.result+=f(s),e.position++}else h(e,"unknown escape sequence");a=r=e.position}else n(l)?(g(e,a,r,!0),A(e,b(e,!1,t)),a=r=e.position):e.position===e.lineStart&&E(e)?h(e,"unexpected end of the document within a double quoted scalar"):(e.position++,r=e.position)}h(e,"unexpected end of the stream within a double quoted scalar")}function C(e,t){var a,n,r,s,o,u,c,l,f,p,m,d=!0,g=e.tag,y=e.anchor;if(m=e.input.charCodeAt(e.position),91===m)s=93,c=!1,n=[];else{if(123!==m)return!1;s=125,c=!0,n={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=n),m=e.input.charCodeAt(++e.position);0!==m;){if(b(e,!0,t),m=e.input.charCodeAt(e.position),m===s)return e.position++,e.tag=g,e.anchor=y,e.kind=c?"mapping":"sequence",e.result=n,!0;d||h(e,"missed comma between flow collection entries"),f=l=p=null,o=u=!1,63===m&&(r=e.input.charCodeAt(e.position+1),i(r)&&(o=u=!0,e.position++,b(e,!0,t))),a=e.line,I(e,t,G,!1,!0),f=e.tag,l=e.result,b(e,!0,t),m=e.input.charCodeAt(e.position),!u&&e.line!==a||58!==m||(o=!0,m=e.input.charCodeAt(++e.position),b(e,!0,t),I(e,t,G,!1,!0),p=e.result),c?w(e,n,f,l,p):o?n.push(w(e,null,f,l,p)):n.push(l),b(e,!0,t),m=e.input.charCodeAt(e.position),44===m?(d=!0,m=e.input.charCodeAt(++e.position)):d=!1}h(e,"unexpected end of the stream within a flow collection")}function _(e,t){var a,i,s,o,u=Y,l=!1,f=t,p=0,m=!1;if(o=e.input.charCodeAt(e.position),124===o)i=!1;else{if(62!==o)return!1;i=!0}for(e.kind="scalar",e.result="";0!==o;)if(o=e.input.charCodeAt(++e.position),43===o||45===o)Y===u?u=43===o?X:Z:h(e,"repeat of a chomping mode identifier");else{if(!((s=c(o))>=0))break;0===s?h(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?h(e,"repeat of an indentation width identifier"):(f=t+s-1,l=!0)}if(r(o)){do o=e.input.charCodeAt(++e.position);while(r(o));if(35===o)do o=e.input.charCodeAt(++e.position);while(!n(o)&&0!==o)}for(;0!==o;){for(v(e),e.lineIndent=0,o=e.input.charCodeAt(e.position);(!l||e.lineIndentf&&(f=e.lineIndent),n(o))p++;else{if(e.lineIndentt)&&0!==r)h(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(I(e,t,V,!0,s)&&(g?m=e.result:d=e.result),g||(w(e,f,p,m,d),p=m=d=null),b(e,!0,-1),u=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==u)h(e,"bad indentation of a mapping entry");else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentu;u+=1)if(l=e.implicitTypes[u],l.resolve(e.result)){e.result=l.construct(e.result),e.tag=l.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else J.call(e.typeMap,e.tag)?(l=e.typeMap[e.tag],null!==e.result&&l.kind!==e.kind&&h(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):h(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):h(e,"unknown tag !<"+e.tag+">");return null!==e.tag||null!==e.anchor||g}function M(e){var t,a,s,o,u=e.position,c=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(o=e.input.charCodeAt(e.position))&&(b(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(c=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!i(o);)o=e.input.charCodeAt(++e.position);for(a=e.input.slice(t,e.position),s=[],a.length<1&&h(e,"directive name must not be less than one character in length");0!==o;){for(;r(o);)o=e.input.charCodeAt(++e.position);if(35===o){do o=e.input.charCodeAt(++e.position);while(0!==o&&!n(o));break}if(n(o))break;for(t=e.position;0!==o&&!i(o);)o=e.input.charCodeAt(++e.position);s.push(e.input.slice(t,e.position))}0!==o&&v(e),J.call(oe,a)?oe[a](e,a,s):d(e,'unknown document directive "'+a+'"')}return b(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,b(e,!0,-1)):c&&h(e,"directives end mark is expected"),I(e,e.lineIndent-1,V,!1,!0),b(e,!0,-1),e.checkLineBreaks&&ee.test(e.input.slice(u,e.position))&&d(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&E(e)?void(46===e.input.charCodeAt(e.position)&&(e.position+=3,b(e,!0,-1))):void(e.positionn;n+=1)t(i[n])}function B(e,t){var a=P(e,t);if(0!==a.length){if(1===a.length)return a[0];throw new U("expected a single document in the stream, but found more")}}function T(e,t,a){O(e,t,N.extend({schema:$},a))}function L(e,t){return B(e,N.extend({schema:$},t))}for(var N=e("./common"),U=e("./exception"),K=e("./mark"),$=e("./schema/default_safe"),H=e("./schema/default_full"),J=Object.prototype.hasOwnProperty,G=1,q=2,W=3,V=4,Y=1,Z=2,X=3,Q=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,ee=/[\x85\u2028\u2029]/,te=/[,\[\]\{\}]/,ae=/^(?:!|!!|![a-z\-]+!)$/i,ne=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i,re=new Array(256),ie=new Array(256),se=0;256>se;se++)re[se]=l(se)?1:0,ie[se]=l(se);var oe={YAML:function(e,t,a){var n,r,i;null!==e.version&&h(e,"duplication of %YAML directive"),1!==a.length&&h(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(a[0]),null===n&&h(e,"ill-formed argument of the YAML directive"),r=parseInt(n[1],10),i=parseInt(n[2],10),1!==r&&h(e,"unacceptable YAML version of the document"),e.version=a[0],e.checkLineBreaks=2>i,1!==i&&2!==i&&d(e,"unsupported YAML version of the document")},TAG:function(e,t,a){var n,r;2!==a.length&&h(e,"TAG directive accepts exactly two arguments"),n=a[0],r=a[1],ae.test(n)||h(e,"ill-formed tag handle (first argument) of the TAG directive"),J.call(e.tagMap,n)&&h(e,'there is a previously declared suffix for "'+n+'" tag handle'),ne.test(r)||h(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=r}};t.exports.loadAll=O,t.exports.load=B,t.exports.safeLoadAll=T,t.exports.safeLoad=L},{"./common":142,"./exception":144,"./mark":146,"./schema/default_full":149,"./schema/default_safe":150}],146:[function(e,t,a){"use strict";function n(e,t,a,n,r){this.name=e,this.buffer=t,this.position=a,this.line=n,this.column=r}var r=e("./common");n.prototype.getSnippet=function(e,t){var a,n,i,s,o;if(!this.buffer)return null;for(e=e||4,t=t||75,a="",n=this.position;n>0&&-1==="\x00\r\n…\u2028\u2029".indexOf(this.buffer.charAt(n-1));)if(n-=1,this.position-n>t/2-1){a=" ... ",n+=5;break}for(i="",s=this.position;st/2-1){i=" ... ",s-=5;break}return o=this.buffer.slice(n,s),r.repeat(" ",e)+a+o+i+"\n"+r.repeat(" ",e+this.position-n+a.length)+"^"},n.prototype.toString=function(e){var t,a="";return this.name&&(a+='in "'+this.name+'" '),a+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(a+=":\n"+t)),a},t.exports=n},{"./common":142}],147:[function(e,t,a){"use strict";function n(e,t,a){var r=[];return e.include.forEach(function(e){a=n(e,t,a)}),e[t].forEach(function(e){a.forEach(function(t,a){t.tag===e.tag&&r.push(a)}),a.push(e)}),a.filter(function(e,t){return-1===r.indexOf(t)})}function r(){function e(e){n[e.tag]=e}var t,a,n={};for(t=0,a=arguments.length;a>t;t+=1)arguments[t].forEach(e);return n}function i(e){this.include=e.include||[],this.implicit=e.implicit||[],this.explicit=e.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=n(this,"implicit",[]),this.compiledExplicit=n(this,"explicit",[]),this.compiledTypeMap=r(this.compiledImplicit,this.compiledExplicit)}var s=e("./common"),o=e("./exception"),u=e("./type");i.DEFAULT=null,i.create=function(){var e,t;switch(arguments.length){case 1:e=i.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new o("Wrong number of arguments for Schema.create function")}if(e=s.toArray(e),t=s.toArray(t),!e.every(function(e){return e instanceof i}))throw new o("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!t.every(function(e){return e instanceof u}))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new i({include:e,explicit:t})},t.exports=i},{"./common":142,"./exception":144,"./type":153}],148:[function(e,t,a){"use strict";var n=e("../schema");t.exports=new n({include:[e("./json")]})},{"../schema":147,"./json":152}],149:[function(e,t,a){"use strict";var n=e("../schema");t.exports=n.DEFAULT=new n({include:[e("./default_safe")],explicit:[e("../type/js/undefined"),e("../type/js/regexp"),e("../type/js/function")]})},{"../schema":147,"../type/js/function":158,"../type/js/regexp":159,"../type/js/undefined":160,"./default_safe":150}],150:[function(e,t,a){"use strict";var n=e("../schema");t.exports=new n({include:[e("./core")],implicit:[e("../type/timestamp"),e("../type/merge")],explicit:[e("../type/binary"),e("../type/omap"),e("../type/pairs"),e("../type/set")]})},{"../schema":147,"../type/binary":154,"../type/merge":162,"../type/omap":164,"../type/pairs":165,"../type/set":167,"../type/timestamp":169,"./core":148}],151:[function(e,t,a){"use strict";var n=e("../schema");t.exports=new n({explicit:[e("../type/str"),e("../type/seq"),e("../type/map")]})},{"../schema":147,"../type/map":161,"../type/seq":166,"../type/str":168}],152:[function(e,t,a){"use strict";var n=e("../schema");t.exports=new n({include:[e("./failsafe")],implicit:[e("../type/null"),e("../type/bool"),e("../type/int"),e("../type/float")]})},{"../schema":147,"../type/bool":155,"../type/float":156,"../type/int":157,"../type/null":163,"./failsafe":151}],153:[function(e,t,a){"use strict";function n(e){var t={};return null!==e&&Object.keys(e).forEach(function(a){e[a].forEach(function(e){t[String(e)]=a})}),t}function r(e,t){if(t=t||{},Object.keys(t).forEach(function(t){if(-1===s.indexOf(t))throw new i('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.defaultStyle=t.defaultStyle||null,this.styleAliases=n(t.styleAliases||null),-1===o.indexOf(this.kind))throw new i('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var i=e("./exception"),s=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],o=["scalar","sequence","mapping"];t.exports=r},{"./exception":144}],154:[function(e,t,a){"use strict";function n(e){if(null===e)return!1;var t,a,n=0,r=e.length,i=c;for(a=0;r>a;a++)if(t=i.indexOf(e.charAt(a)),!(t>64)){if(0>t)return!1;n+=6}return n%8===0}function r(e){var t,a,n=e.replace(/[\r\n=]/g,""),r=n.length,i=c,s=0,u=[];for(t=0;r>t;t++)t%4===0&&t&&(u.push(s>>16&255),u.push(s>>8&255),u.push(255&s)),s=s<<6|i.indexOf(n.charAt(t));return a=r%4*6,0===a?(u.push(s>>16&255),u.push(s>>8&255),u.push(255&s)):18===a?(u.push(s>>10&255),u.push(s>>2&255)):12===a&&u.push(s>>4&255),o?new o(u):u}function i(e){var t,a,n="",r=0,i=e.length,s=c;for(t=0;i>t;t++)t%3===0&&t&&(n+=s[r>>18&63],n+=s[r>>12&63],n+=s[r>>6&63],n+=s[63&r]),r=(r<<8)+e[t];return a=i%3,0===a?(n+=s[r>>18&63],n+=s[r>>12&63],n+=s[r>>6&63],n+=s[63&r]):2===a?(n+=s[r>>10&63],n+=s[r>>4&63],n+=s[r<<2&63],n+=s[64]):1===a&&(n+=s[r>>2&63],n+=s[r<<4&63],n+=s[64],n+=s[64]),n}function s(e){return o&&o.isBuffer(e)}var o=e("buffer").Buffer,u=e("../type"),c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";t.exports=new u("tag:yaml.org,2002:binary",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i})},{"../type":153,buffer:15}],155:[function(e,t,a){"use strict";function n(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)}function r(e){return"true"===e||"True"===e||"TRUE"===e}function i(e){return"[object Boolean]"===Object.prototype.toString.call(e)}var s=e("../type");t.exports=new s("tag:yaml.org,2002:bool",{kind:"scalar",resolve:n,construct:r,predicate:i,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},{"../type":153}],156:[function(e,t,a){"use strict";function n(e){return null===e?!1:c.test(e)?!0:!1}function r(e){var t,a,n,r;return t=e.replace(/_/g,"").toLowerCase(),a="-"===t[0]?-1:1,r=[],0<="+-".indexOf(t[0])&&(t=t.slice(1)),".inf"===t?1===a?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:0<=t.indexOf(":")?(t.split(":").forEach(function(e){r.unshift(parseFloat(e,10))}),t=0,n=1,r.forEach(function(e){t+=e*n,n*=60}),a*t):a*parseFloat(t,10)}function i(e,t){var a;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(o.isNegativeZero(e))return"-0.0";return a=e.toString(10),l.test(a)?a.replace("e",".e"):a}function s(e){return"[object Number]"===Object.prototype.toString.call(e)&&(0!==e%1||o.isNegativeZero(e))}var o=e("../common"),u=e("../type"),c=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),l=/^[-+]?[0-9]+e/;t.exports=new u("tag:yaml.org,2002:float",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i,defaultStyle:"lowercase"})},{"../common":142,"../type":153}],157:[function(e,t,a){"use strict";function n(e){return e>=48&&57>=e||e>=65&&70>=e||e>=97&&102>=e}function r(e){return e>=48&&55>=e}function i(e){return e>=48&&57>=e}function s(e){if(null===e)return!1;var t,a=e.length,s=0,o=!1;if(!a)return!1;if(t=e[s],("-"===t||"+"===t)&&(t=e[++s]),"0"===t){if(s+1===a)return!0;if(t=e[++s],"b"===t){for(s++;a>s;s++)if(t=e[s],"_"!==t){if("0"!==t&&"1"!==t)return!1;o=!0}return o}if("x"===t){for(s++;a>s;s++)if(t=e[s],"_"!==t){if(!n(e.charCodeAt(s)))return!1;o=!0}return o}for(;a>s;s++)if(t=e[s],"_"!==t){if(!r(e.charCodeAt(s)))return!1;o=!0}return o}for(;a>s;s++)if(t=e[s],"_"!==t){if(":"===t)break;if(!i(e.charCodeAt(s)))return!1;o=!0}return o?":"!==t?!0:/^(:[0-5]?[0-9])+$/.test(e.slice(s)):!1}function o(e){var t,a,n=e,r=1,i=[];return-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),t=n[0],("-"===t||"+"===t)&&("-"===t&&(r=-1),n=n.slice(1),t=n[0]),"0"===n?0:"0"===t?"b"===n[1]?r*parseInt(n.slice(2),2):"x"===n[1]?r*parseInt(n,16):r*parseInt(n,8):-1!==n.indexOf(":")?(n.split(":").forEach(function(e){i.unshift(parseInt(e,10))}),n=0,a=1,i.forEach(function(e){n+=e*a,a*=60}),r*n):r*parseInt(n,10)}function u(e){return"[object Number]"===Object.prototype.toString.call(e)&&0===e%1&&!c.isNegativeZero(e)}var c=e("../common"),l=e("../type");t.exports=new l("tag:yaml.org,2002:int",{kind:"scalar",resolve:s,construct:o,predicate:u,represent:{binary:function(e){return"0b"+e.toString(2)},octal:function(e){return"0"+e.toString(8)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return"0x"+e.toString(16).toUpperCase()}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},{"../common":142,"../type":153}],158:[function(e,t,a){"use strict";function n(e){if(null===e)return!1;try{var t="("+e+")",a=o.parse(t,{range:!0});return"Program"!==a.type||1!==a.body.length||"ExpressionStatement"!==a.body[0].type||"FunctionExpression"!==a.body[0].expression.type?!1:!0}catch(n){return!1}}function r(e){var t,a="("+e+")",n=o.parse(a,{range:!0}),r=[];if("Program"!==n.type||1!==n.body.length||"ExpressionStatement"!==n.body[0].type||"FunctionExpression"!==n.body[0].expression.type)throw new Error("Failed to resolve function");return n.body[0].expression.params.forEach(function(e){r.push(e.name)}),t=n.body[0].expression.body.range,new Function(r,a.slice(t[0]+1,t[1]-1))}function i(e){return e.toString()}function s(e){return"[object Function]"===Object.prototype.toString.call(e)}var o;try{o=e("esprima")}catch(u){"undefined"!=typeof window&&(o=window.esprima)}var c=e("../../type");t.exports=new c("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i})},{"../../type":153,esprima:30}],159:[function(e,t,a){"use strict";function n(e){if(null===e)return!1;if(0===e.length)return!1;var t=e,a=/\/([gim]*)$/.exec(e),n="";if("/"===t[0]){if(a&&(n=a[1]),n.length>3)return!1;if("/"!==t[t.length-n.length-1])return!1;t=t.slice(1,t.length-n.length-1)}try{return!0}catch(r){return!1}}function r(e){var t=e,a=/\/([gim]*)$/.exec(e),n="";return"/"===t[0]&&(a&&(n=a[1]),t=t.slice(1,t.length-n.length-1)),new RegExp(t,n)}function i(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}function s(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var o=e("../../type");t.exports=new o("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i})},{"../../type":153}],160:[function(e,t,a){"use strict";function n(){return!0}function r(){}function i(){return""}function s(e){return"undefined"==typeof e}var o=e("../../type");t.exports=new o("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:n,construct:r,predicate:s,represent:i})},{"../../type":153}],161:[function(e,t,a){"use strict";var n=e("../type");t.exports=new n("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},{"../type":153}],162:[function(e,t,a){"use strict";function n(e){return"<<"===e||null===e}var r=e("../type");t.exports=new r("tag:yaml.org,2002:merge",{kind:"scalar",resolve:n})},{"../type":153}],163:[function(e,t,a){"use strict";function n(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)}function r(){return null}function i(e){return null===e}var s=e("../type");t.exports=new s("tag:yaml.org,2002:null",{kind:"scalar",resolve:n,construct:r,predicate:i,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},{"../type":153}],164:[function(e,t,a){"use strict";function n(e){if(null===e)return!0;var t,a,n,r,i,u=[],c=e;for(t=0,a=c.length;a>t;t+=1){if(n=c[t],i=!1,"[object Object]"!==o.call(n))return!1;for(r in n)if(s.call(n,r)){if(i)return!1;i=!0}if(!i)return!1;if(-1!==u.indexOf(r))return!1;u.push(r)}return!0}function r(e){return null!==e?e:[]}var i=e("../type"),s=Object.prototype.hasOwnProperty,o=Object.prototype.toString;t.exports=new i("tag:yaml.org,2002:omap",{kind:"sequence",resolve:n,construct:r})},{"../type":153}],165:[function(e,t,a){"use strict";function n(e){if(null===e)return!0;var t,a,n,r,i,o=e;for(i=new Array(o.length),t=0,a=o.length;a>t;t+=1){if(n=o[t],"[object Object]"!==s.call(n))return!1;if(r=Object.keys(n),1!==r.length)return!1;i[t]=[r[0],n[r[0]]]}return!0}function r(e){if(null===e)return[];var t,a,n,r,i,s=e;for(i=new Array(s.length),t=0,a=s.length;a>t;t+=1)n=s[t],r=Object.keys(n),i[t]=[r[0],n[r[0]]];return i}var i=e("../type"),s=Object.prototype.toString;t.exports=new i("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:n,construct:r})},{"../type":153}],166:[function(e,t,a){"use strict";var n=e("../type");t.exports=new n("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}})},{"../type":153}],167:[function(e,t,a){"use strict";function n(e){if(null===e)return!0;var t,a=e;for(t in a)if(s.call(a,t)&&null!==a[t])return!1;return!0}function r(e){return null!==e?e:{}}var i=e("../type"),s=Object.prototype.hasOwnProperty;t.exports=new i("tag:yaml.org,2002:set",{kind:"mapping",resolve:n,construct:r})},{"../type":153}],168:[function(e,t,a){"use strict";var n=e("../type");t.exports=new n("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}})},{"../type":153}],169:[function(e,t,a){"use strict";function n(e){return null===e?!1:null===o.exec(e)?!1:!0}function r(e){var t,a,n,r,i,s,u,c,l,f,p=0,m=null;if(t=o.exec(e),null===t)throw new Error("Date resolve error"); +if(a=+t[1],n=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(a,n,r));if(i=+t[4],s=+t[5],u=+t[6],t[7]){for(p=t[7].slice(0,3);p.length<3;)p+="0";p=+p}return t[9]&&(c=+t[10],l=+(t[11]||0),m=6e4*(60*c+l),"-"===t[9]&&(m=-m)),f=new Date(Date.UTC(a,n,r,i,s,u,p)),m&&f.setTime(f.getTime()-m),f}function i(e){return e.toISOString()}var s=e("../type"),o=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?)?$");t.exports=new s("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:n,construct:r,instanceOf:Date,represent:i})},{"../type":153}],170:[function(e,t,a){"use strict";function n(e){var t;return h(e,"Array")?(t=[],e.forEach(function(e,a){t[a]=n(e)})):h(e,"Object")?(t={},Object.keys(e).forEach(function(a){t[a]=n(e[a])})):t=e,t}function r(e,t){function a(e){return h(e,"Undefined")||""===e?[]:e.split("/")}function n(e){".."===e?r.pop():r.push(e)}var r=[];return a(e).concat(a(t)).forEach(n),0===r.length?"":r.join("/")}function i(e,t){function a(e){Object.keys(e).forEach(function(t){n[t]=e[t]})}var n={};return a(M.parse(e||"")),a(M.parse(t||"")),0===Object.keys(n).length?void 0:M.stringify(n)}function s(e,t){h(e,"String")&&(e=P(e)),h(t,"String")&&(t=P(t));var a,n,s=O.parse(h(t,"Undefined")?"":t);return"absolute"===s.reference||"uri"===s.reference?n=s:(a=h(e,"Undefined")?void 0:O.parse(e),h(a,"Undefined")?n=s:(n=a,n.path=O.normalize(r(a.path,s.path)),n.query=i(a.query,s.query))),n.fragment=void 0,O.serialize(n)}function o(e,t){var a=d(e),n={},r=z(g(e));return Object.keys(t).forEach(function(i){var s=t[i];a(s,S(i))===!0&&i.indexOf(r)>-1&&("invalid"!==s.type||e.includeInvalid===!0)&&(n[i]=s)}),n}function u(e,t){var a=[],n=e;return t.slice(0,t.length-1).forEach(function(e){e in n&&(n=n[e],a.push(n))}),a}function c(e,t,a,r,i){var o=Promise.resolve(),u=D(e,t);return console.log(t.relativeBase),Object.keys(u).forEach(function(e){var l,f,p=u[e],m=S(e);L.indexOf(p.type)>-1&&(l=s(t.relativeBase,p.uri),f=a.indexOf(l),-1===f?o=o.then(function(){var e=r.concat(m),s=n(t);return delete s.subDocPath,delete s.relativeBase,j(l,s).then(function(t){return t.location=l,p.uriDetails.fragment?(t.refs={},i[z(e)]=t,t):(Object.keys(t.refs).forEach(function(a){t.refs[a].parentLocation=z(e)}),i[z(e)]=t,s.relativeBase=R(l),c(t.value,s,a.concat(l),e,i))},function(e){p.error=e.message,p.missing=!0})}):(a.slice(f).forEach(function(e){Object.keys(i).forEach(function(t){var a=i[t];a.location===e&&(a.circular=!0)})}),i[z(r)].refs[e].circular=!0))}),o=o.then(function(){return 0===r.length&&Object.keys(i).forEach(function(e){var t=i[e];Object.keys(t.refs).forEach(function(a){var n=z(S(e).concat(S(a))),r=u[n];h(r,"Undefined")&&(u[n]=t.refs[a])}),u[e].value=t.value,t.circular&&(u[e].circular=!0)}),u})}function l(e,t,a){var n=e;try{t.forEach(function(e){if(!(e in n))throw Error("JSON Pointer points to missing location: "+z(t));n=n[e]})}catch(r){if(a!==!0)throw r;n=void 0}return n}function f(e){return Object.keys(e).filter(function(e){return"$ref"!==e})}function p(e,t){var a=T[e],r=Promise.resolve(),i=n(t.loaderOptions||{});return h(a,"Undefined")?(h(i.processContent,"Undefined")&&(i.processContent=function(e,t){t(void 0,JSON.parse(e.text))}),r=I.load(e,i),r=r.then(function(t){return T[e]={value:t},t})["catch"](function(t){throw T[e]={error:t},t})):r=r.then(function(){return a.value}),r=r.then(function(e){return n(e)})}function m(e,t){var a=!0;try{if(!h(e,"Object"))throw new Error("obj is not an Object");if(!h(e.$ref,"String"))throw new Error("obj.$ref is not a String")}catch(n){if(t)throw n;a=!1}return a}function h(e,t){return"Undefined"===t?"undefined"==typeof e:Object.prototype.toString.call(e)==="[object "+t+"]"}function d(e){var t;return t=h(e.filter,"Array")||h(e.filter,"String")?function(t){var a=h(e.filter,"String")?[e.filter]:e.filter;return a.indexOf(t.type)>-1}:h(e.filter,"Function")?e.filter:function(){return!0}}function g(e){var t=[];return h(e.subDocPath,"Array")?t=e.subDocPath:h(e.subDocPath,"String")&&(t=S(e.subDocPath)),t}function y(e,t,a){l(e,t.slice(0,t.length-1))[t[t.length-1]]=a}function w(e,t,a,n){function r(t,r){a.push(r),w(e,t,a,n),a.pop()}var i=!0;h(n,"Function")&&(i=n(e,t,a)),-1===e.indexOf(t)&&(e.push(t),i!==!1&&(h(t,"Array")?t.forEach(function(e,t){r(e,t.toString())}):h(t,"Object")&&Object.keys(t).forEach(function(e){r(t[e],e)}))),e.pop()}function v(e){if(!h(e,"Undefined")){if(!h(e,"Object"))throw new TypeError("options must be an Object");if(!(h(e.filter,"Undefined")||h(e.filter,"Array")||h(e.filter,"Function")||h(e.filter,"String")))throw new TypeError("options.filter must be an Array, a Function of a String");if(!h(e.includeInvalid,"Undefined")&&!h(e.includeInvalid,"Boolean"))throw new TypeError("options.includeInvalid must be a Boolean");if(!h(e.refPreProcessor,"Undefined")&&!h(e.refPreProcessor,"Function"))throw new TypeError("options.refPreProcessor must be a Function");if(!h(e.refPostProcessor,"Undefined")&&!h(e.refPostProcessor,"Function"))throw new TypeError("options.refPostProcessor must be a Function");if(!h(e.subDocPath,"Undefined")&&!h(e.subDocPath,"Array")&&!C(e.subDocPath))throw new TypeError("options.subDocPath must be an Array of path segments or a valid JSON Pointer")}}function b(){T={}}function E(e){if(!h(e,"Array"))throw new TypeError("path must be an array");return e.map(function(e){return h(e,"String")||(e=JSON.stringify(e)),e.replace(/~1/g,"/").replace(/~0/g,"~")})}function A(e){if(!h(e,"Array"))throw new TypeError("path must be an array");return e.map(function(e){return h(e,"String")||(e=JSON.stringify(e)),e.replace(/~/g,"~0").replace(/\//g,"~1")})}function D(e,t){var a,n,r=[],i=e,s={};if(!h(e,"Array")&&!h(e,"Object"))throw new TypeError("obj must be an Array or an Object");return h(t,"Undefined")&&(t={}),v(t),a=g(t),n=d(t),a.length>0&&(r=u(e,a),i=l(e,a)),w(r,i,a,function(e,a,r){var i,o=!0;return m(a)&&(h(t.refPreProcessor,"Undefined")||(a=t.refPreProcessor(a,r)),i=x(a),("invalid"!==i.type||t.includeInvalid===!0)&&(n(i,r)===!0&&(h(t.refPostProcessor,"Undefined")||(i=t.refPostProcessor(i,r)),s[z(r)]=i),f(a).length>0&&(o=!1))),o}),s}function j(e,t){var a=Promise.resolve();return a=a.then(function(){if(!h(e,"String"))throw new TypeError("location must be a string");return h(t,"Undefined")&&(t={}),v(t),e=s(t.relativeBase,e),p(e,t)}).then(function(a){var r,i=n(T[e]);return h(i.refs,"Undefined")&&(r=n(t),delete r.filter,delete r.subDocPath,r.includeInvalid=!0,T[e].refs=D(a,r),i.refs=o(t,T[e].refs)),i})}function x(e){var t,a,n,r={def:e};try{if(m(e,!0)){if(t=e.$ref,n=N[t],h(n,"Undefined")&&(n=N[t]=O.parse(t)),r.uri=t,r.uriDetails=n,h(n.error,"Undefined"))switch(n.reference){case"absolute":case"uri":r.type="remote";break;case"same-document":r.type="local";break;default:r.type=n.reference}else r.error=r.uriDetails.error,r.type="invalid";a=f(e),a.length>0&&(r.warning="Extra JSON Reference properties will be ignored: "+a.join(", "))}else r.type="invalid"}catch(i){r.error=i.message,r.type="invalid"}return r}function C(e,t){var a,n=!0;try{if(!h(e,"String"))throw new Error("ptr is not a String");if(""!==e){if(a=e.charAt(0),-1===["#","/"].indexOf(a))throw new Error("ptr must start with a / or #/");if("#"===a&&"#"!==e&&"/"!==e.charAt(1))throw new Error("ptr must start with a / or #/");if(e.match(B))throw new Error("ptr has invalid token(s)")}}catch(r){if(t===!0)throw r;n=!1}return n}function _(e,t){return m(e,t)&&"invalid"!==x(e,t).type}function S(e){if(!C(e))throw new Error("ptr must be a JSON Pointer");var t=e.split("/");return t.shift(),E(t)}function z(e,t){if(!h(e,"Array"))throw new Error("path must be an Array");return(t!==!1?"#":"")+(e.length>0?"/":"")+A(e).join("/")}function F(e,t){var a=Promise.resolve();return a=a.then(function(){if(!h(e,"Array")&&!h(e,"Object"))throw new TypeError("obj must be an Array or an Object");h(t,"Undefined")&&(t={}),v(t)}).then(function(){return c(e,t,[],[],{})}).then(function(t){var a=n(e),r=[];return Object.keys(t).forEach(function(e){var n,r=t[e];if(L.indexOf(r.type)>-1)if(h(r.error,"Undefined")&&"invalid"!==r.type)try{n=l(r.value||{},r.uriDetails.fragment?S(r.uriDetails.fragment):[]),y(a,S(e),n),h(r.value,"Undefined")?r.circular&&(r.value={}):r.value=n}catch(i){r.error=i.message,r.missing=!0}else r.missing=!0}),Object.keys(t).forEach(function(e){var n,i=t[e],s=i.parentLocation;if(h(s,"Undefined")||-1!==r.indexOf(e)||r.push(e),-1===L.indexOf(i.type)&&"invalid"!==i.type)if(h(i.error,"Undefined")){e.indexOf(i.uri)>-1?(i.circular=!0,n={}):h(s,"Undefined")||(n=l(l(a,S(s)),i.uriDetails.fragment?S(i.uriDetails.fragment):[],!0));try{h(n,"Undefined")&&(n=l(a,i.uriDetails.fragment?S(i.uriDetails.fragment):[])),y(a,S(e),n),i.value=n}catch(o){i.error=o.message,i.missing=!0}}else i.missing=!0}),r.forEach(function(e){delete t[e].parentLocation}),{refs:t,resolved:a}})}function k(e,t){var a=Promise.resolve();return a=a.then(function(){if(!h(e,"String"))throw new TypeError("location must be a string");return h(t,"Undefined")&&(t={}),v(t),e=s(t.relativeBase,e),p(e,t)}).then(function(a){var r=n(t);return r.relativeBase=R(e),F(a,r).then(function(e){return{refs:e.refs,resolved:e.resolved,value:a}})})}function n(e){var t;return h(e,"Array")?(t=[],e.forEach(function(e,a){t[a]=n(e)})):h(e,"Object")?(t={},Object.keys(e).forEach(function(a){t[a]=n(e[a])})):t=e,t}function r(e,t){function a(e){return h(e,"Undefined")||""===e?[]:e.split("/")}function n(e){".."===e?r.pop():r.push(e)}var r=[];return a(e).concat(a(t)).forEach(n),0===r.length?"":r.join("/")}function i(e,t){function a(e){Object.keys(e).forEach(function(t){n[t]=e[t]})}var n={};return a(M.parse(e||"")),a(M.parse(t||"")),0===Object.keys(n).length?void 0:M.stringify(n)}function s(e,t){h(e,"String")&&(e=P(e)),h(t,"String")&&(t=P(t));var a,n,s=O.parse(h(t,"Undefined")?"":t);return"absolute"===s.reference||"uri"===s.reference?n=s:(a=h(e,"Undefined")?void 0:O.parse(e),h(a,"Undefined")?n=s:(n=a,n.path=O.normalize(r(a.path,s.path)),n.query=i(a.query,s.query))),n.fragment=void 0,O.serialize(n)}function o(e,t){var a=d(e),n={},r=z(g(e));return Object.keys(t).forEach(function(i){var s=t[i];a(s,S(i))===!0&&i.indexOf(r)>-1&&("invalid"!==s.type||e.includeInvalid===!0)&&(n[i]=s)}),n}function u(e,t){var a=[],n=e;return t.slice(0,t.length-1).forEach(function(e){e in n&&(n=n[e],a.push(n))}),a}function c(e,t,a,r,i){var o=Promise.resolve(),u=D(e,t);return Object.keys(u).forEach(function(e){var l,f,p=u[e],m=S(e);L.indexOf(p.type)>-1&&(l=s(t.relativeBase,p.uri),f=a.indexOf(l),-1===f?o=o.then(function(){var e=r.concat(m),s=n(t);return delete s.subDocPath,s.relativeBase=l.substring(0,l.lastIndexOf("/")),j(p.uri,t).then(function(t){return t.location=l,p.uriDetails.fragment?(t.refs={},i[z(e)]=t,t):(Object.keys(t.refs).forEach(function(a){t.refs[a].parentLocation=z(e)}),i[z(e)]=t,c(t.value,s,a.concat(l),e,i))},function(e){p.error=e.message,p.missing=!0})}):(a.slice(f).forEach(function(e){Object.keys(i).forEach(function(t){var a=i[t];a.location===e&&(a.circular=!0)})}),i[z(r)].refs[e].circular=!0))}),o=o.then(function(){return 0===r.length&&Object.keys(i).forEach(function(e){var t=i[e];Object.keys(t.refs).forEach(function(a){var n=z(S(e).concat(S(a))),r=u[n];h(r,"Undefined")&&(u[n]=t.refs[a])}),u[e].value=t.value,t.circular&&(u[e].circular=!0)}),u})}function l(e,t,a){var n=e;try{t.forEach(function(e){if(!(e in n))throw Error("JSON Pointer points to missing location: "+z(t));n=n[e]})}catch(r){if(a!==!0)throw r;n=void 0}return n}function f(e){return Object.keys(e).filter(function(e){return"$ref"!==e})}function p(e,t){var a=T[e],r=Promise.resolve(),i=n(t.loaderOptions||{});return h(a,"Undefined")?(h(i.processContent,"Undefined")&&(i.processContent=function(e,t){t(void 0,JSON.parse(e.text))}),r=I.load(e,i),r=r.then(function(t){return T[e]={value:t},t})["catch"](function(t){throw T[e]={error:t},t})):r=r.then(function(){return a.value}),r=r.then(function(e){return n(e)})}function m(e,t){var a=!0;try{if(!h(e,"Object"))throw new Error("obj is not an Object");if(!h(e.$ref,"String"))throw new Error("obj.$ref is not a String")}catch(n){if(t)throw n;a=!1}return a}function h(e,t){return"Undefined"===t?"undefined"==typeof e:Object.prototype.toString.call(e)==="[object "+t+"]"}function d(e){var t;return t=h(e.filter,"Array")||h(e.filter,"String")?function(t){var a=h(e.filter,"String")?[e.filter]:e.filter;return a.indexOf(t.type)>-1}:h(e.filter,"Function")?e.filter:function(){return!0}}function g(e){var t=[];return h(e.subDocPath,"Array")?t=e.subDocPath:h(e.subDocPath,"String")&&(t=S(e.subDocPath)),t}function y(e,t,a){l(e,t.slice(0,t.length-1))[t[t.length-1]]=a}function w(e,t,a,n){function r(t,r){a.push(r),w(e,t,a,n),a.pop()}var i=!0;h(n,"Function")&&(i=n(e,t,a)),-1===e.indexOf(t)&&(e.push(t),i!==!1&&(h(t,"Array")?t.forEach(function(e,t){r(e,t.toString())}):h(t,"Object")&&Object.keys(t).forEach(function(e){r(t[e],e)}))),e.pop()}function v(e){if(!h(e,"Undefined")){if(!h(e,"Object"))throw new TypeError("options must be an Object");if(!(h(e.filter,"Undefined")||h(e.filter,"Array")||h(e.filter,"Function")||h(e.filter,"String")))throw new TypeError("options.filter must be an Array, a Function of a String");if(!h(e.includeInvalid,"Undefined")&&!h(e.includeInvalid,"Boolean"))throw new TypeError("options.includeInvalid must be a Boolean");if(!h(e.refPreProcessor,"Undefined")&&!h(e.refPreProcessor,"Function"))throw new TypeError("options.refPreProcessor must be a Function");if(!h(e.refPostProcessor,"Undefined")&&!h(e.refPostProcessor,"Function"))throw new TypeError("options.refPostProcessor must be a Function");if(!h(e.subDocPath,"Undefined")&&!h(e.subDocPath,"Array")&&!C(e.subDocPath))throw new TypeError("options.subDocPath must be an Array of path segments or a valid JSON Pointer")}}function b(){T={}}function E(e){if(!h(e,"Array"))throw new TypeError("path must be an array");return e.map(function(e){return h(e,"String")||(e=JSON.stringify(e)),e.replace(/~1/g,"/").replace(/~0/g,"~")})}function A(e){if(!h(e,"Array"))throw new TypeError("path must be an array");return e.map(function(e){return h(e,"String")||(e=JSON.stringify(e)),e.replace(/~/g,"~0").replace(/\//g,"~1")})}function D(e,t){var a,n,r=[],i=e,s={};if(!h(e,"Array")&&!h(e,"Object"))throw new TypeError("obj must be an Array or an Object");return h(t,"Undefined")&&(t={}),v(t),a=g(t),n=d(t),a.length>0&&(r=u(e,a),i=l(e,a)),w(r,i,a,function(e,a,r){var i,o=!0;return m(a)&&(h(t.refPreProcessor,"Undefined")||(a=t.refPreProcessor(a,r)),i=x(a),("invalid"!==i.type||t.includeInvalid===!0)&&(n(i,r)===!0&&(h(t.refPostProcessor,"Undefined")||(i=t.refPostProcessor(i,r)),s[z(r)]=i),f(a).length>0&&(o=!1))),o}),s}function j(e,t){var a=Promise.resolve();return a=a.then(function(){var a;if(!h(e,"String"))throw new TypeError("location must be a string");return h(t,"Undefined")&&(t={}),v(t),a=n(t),e=s(t.relativeBase,e),a.relativeBase=e.substring(0,e.lastIndexOf("/")),p(e,a)}).then(function(a){var r,i=n(T[e]);return h(i.refs,"Undefined")&&(r=n(t),delete r.filter,delete r.subDocPath,r.includeInvalid=!0,T[e].refs=D(a,r),i.refs=o(t,T[e].refs)),i})}function x(e){var t,a,n,r={def:e};try{if(m(e,!0)){if(t=e.$ref,n=N[t],h(n,"Undefined")&&(n=N[t]=O.parse(t)),r.uri=t,r.uriDetails=n,h(n.error,"Undefined"))switch(n.reference){case"absolute":case"uri":r.type="remote";break;case"same-document":r.type="local";break;default:r.type=n.reference}else r.error=r.uriDetails.error,r.type="invalid";a=f(e),a.length>0&&(r.warning="Extra JSON Reference properties will be ignored: "+a.join(", "))}else r.type="invalid"}catch(i){r.error=i.message,r.type="invalid"}return r}function C(e,t){var a,n=!0;try{if(!h(e,"String"))throw new Error("ptr is not a String");if(""!==e){if(a=e.charAt(0),-1===["#","/"].indexOf(a))throw new Error("ptr must start with a / or #/");if("#"===a&&"#"!==e&&"/"!==e.charAt(1))throw new Error("ptr must start with a / or #/");if(e.match(B))throw new Error("ptr has invalid token(s)")}}catch(r){if(t===!0)throw r;n=!1}return n}function _(e,t){return m(e,t)&&"invalid"!==x(e,t).type}function S(e){if(!C(e))throw new Error("ptr must be a JSON Pointer");var t=e.split("/");return t.shift(),E(t)}function z(e,t){if(!h(e,"Array"))throw new Error("path must be an Array");return(t!==!1?"#":"")+(e.length>0?"/":"")+A(e).join("/")}function F(e,t){var a=Promise.resolve();return a=a.then(function(){if(!h(e,"Array")&&!h(e,"Object"))throw new TypeError("obj must be an Array or an Object");h(t,"Undefined")&&(t={}),v(t)}).then(function(){return c(e,t,[],[],{})}).then(function(t){var a=n(e),r=[];return Object.keys(t).forEach(function(e){var n,r=t[e];if(L.indexOf(r.type)>-1)if(h(r.error,"Undefined")&&"invalid"!==r.type)try{n=l(r.value||{},r.uriDetails.fragment?S(r.uriDetails.fragment):[]),y(a,S(e),n),h(r.value,"Undefined")?r.circular&&(r.value={}):r.value=n}catch(i){r.error=i.message,r.missing=!0}else r.missing=!0}),Object.keys(t).forEach(function(e){var n,i=t[e],s=i.parentLocation;if(h(s,"Undefined")||-1!==r.indexOf(e)||r.push(e),-1===L.indexOf(i.type)&&"invalid"!==i.type)if(h(i.error,"Undefined")){e.indexOf(i.uri)>-1?(i.circular=!0,n={}):h(s,"Undefined")||(n=l(l(a,S(s)),i.uriDetails.fragment?S(i.uriDetails.fragment):[],!0));try{h(n,"Undefined")&&(n=l(a,i.uriDetails.fragment?S(i.uriDetails.fragment):[])),y(a,S(e),n),i.value=n}catch(o){i.error=o.message,i.missing=!0}}else i.missing=!0}),r.forEach(function(e){delete t[e].parentLocation}),{refs:t,resolved:a}})}function k(e,t){var a=Promise.resolve();return a=a.then(function(){var a;if(!h(e,"String"))throw new TypeError("location must be a string");return h(t,"Undefined")&&(t={}),v(t),a=n(t),e=s(t.relativeBase,e),a.relativeBase=e.substring(0,e.lastIndexOf("/")),p(e,a)}).then(function(e){return F(e,t).then(function(t){return{refs:t.refs,resolved:t.resolved,value:e}})})}var R=e("path").dirname,I=e("path-loader"),M=e("querystring"),P=e("slash"),O=e("uri-js"),B=/~(?:[^01]|$)/g,T={},L=["relative","remote"],N={};"undefined"==typeof Promise&&e("native-promise-only"),t.exports.clearCache=b,t.exports.decodePath=E,t.exports.encodePath=A,t.exports.findRefs=D,t.exports.findRefsAt=j,t.exports.getRefDetails=x,t.exports.isPtr=C,t.exports.isRef=_,t.exports.pathFromPtr=S,t.exports.pathToPtr=z,t.exports.resolveRefs=F,t.exports.resolveRefsAt=k;var I=e("path-loader"),M=e("querystring"),P=e("slash"),O=e("uri-js"),B=/~(?:[^01]|$)/g,T={},L=["relative","remote"],N={};"undefined"==typeof Promise&&e("native-promise-only"),t.exports.clearCache=b,t.exports.decodePath=E,t.exports.encodePath=A,t.exports.findRefs=D,t.exports.findRefsAt=j,t.exports.getRefDetails=x,t.exports.isPtr=C,t.exports.isRef=_,t.exports.pathFromPtr=S,t.exports.pathToPtr=z,t.exports.resolveRefs=F,t.exports.resolveRefsAt=k},{"native-promise-only":194,path:195,"path-loader":196,querystring:204,slash:212,"uri-js":219}],171:[function(e,t,a){"use strict";function n(e){return"enum"===e||"required"===e||"definitions"===e}function r(e,t,a){var r=l();try{var i=100;return s(r(e,t,a),[],function f(e){if(!i)return delete e.$ref,delete e.oneOf,delete e.anyOf,delete e.allOf,e;if("string"==typeof e.$ref){var t=e.$ref;delete e.$ref,i--,c(e,r.util.findByRef(t,r.refs))}if(Array.isArray(e.allOf)){var a=e.allOf;delete e.allOf,a.forEach(function(t){c(e,f(t))})}if(Array.isArray(e.oneOf||e.anyOf)){var s=e.oneOf||e.anyOf;delete e.anyOf,delete e.oneOf,c(e,u.pick(s))}for(var o in e)!Array.isArray(e[o])&&"object"!=typeof e[o]||n(o)||(e[o]=f(e[o]));return e})}catch(o){throw o.path?new Error(o.message+" in /"+o.path.join("/")):o}}var i=e("./util/container"),s=e("./util/traverse"),o=e("./util/formats"),u=e("./util/random"),c=e("./util/merge"),l=e("deref");r.formats=o,r.extend=i.set,t.exports=r},{"./util/container":179,"./util/formats":181,"./util/merge":184,"./util/random":186,"./util/traverse":187,deref:23}],172:[function(e,t,a){"use strict";function n(e,t,a,n,r){function s(e){var t=JSON.stringify(e);-1===u.indexOf(t)&&(u.push(t),o.push(e))}var o=[],u=[];t.forEach(s);for(var c=100;o.length!==t.length&&(s(i(a.items||n,e,r)),c--););return o}var r=e("../util/random"),i=e("../util/traverse"),s=e("../util/has-props"),o=e("../util/error");t.exports=function(e,t,a){var u=[];if(!e.items&&!e.additionalItems){if(s(e,"minItems","maxItems","uniqueItems"))throw new o("missing items for "+JSON.stringify(e),t);return u}if(Array.isArray(e.items))return Array.prototype.concat.apply(u,e.items.map(function(e,n){return i(e,t.concat(["items",n]),a)}));for(var c=r(e.minItems,e.maxItems,1,5),l="object"==typeof e.additionalItems?e.additionalItems:{},f=u.length;c>f;f+=1)u.push(i(e.items||l,t.concat(["items",f]),a));return e.uniqueItems?n(t.concat(["items"]),u,e,l,a):u}},{"../util/error":180,"../util/has-props":182,"../util/random":186,"../util/traverse":187}],173:[function(e,t,a){"use strict";t.exports=function(){return Math.random()>.5}},{}],174:[function(e,t,a){"use strict";var n=e("./number");t.exports=function(e){e.hasPrecision=!1;var t=n(e);return t>0?Math.floor(t):Math.ceil(t)}},{"./number":176}],175:[function(e,t,a){"use strict";t.exports=function(){return null}},{}],176:[function(e,t,a){"use strict";var n=-1e8,r=1e8,i=e("./string"),s=e("../util/random");t.exports=function(e){if(e.faker||e.chance)return i(e);var t="undefined"==typeof e.minimum?n:e.minimum,a="undefined"==typeof e.maximum?r:e.maximum;if(e.exclusiveMinimum&&e.minimum&&(t+=1),e.exclusiveMaximum&&e.maximum&&(a-=1),e.multipleOf){for(var o=s(Math.floor(t/e.multipleOf),Math.floor(a/e.multipleOf))*e.multipleOf;t>o;)o+=e.multipleOf;return o}return e.hasPrecision?s(!1,t,a):s(Math.random()>.5,t,a)}},{"../util/random":186,"./string":178}],177:[function(e,t,a){"use strict";var n=e("../util/container"),r=e("../util/random"),i=e("../util/traverse"),s=e("../util/has-props"),o=n.get("faker"),u=n.get("randexp"),c=u.randexp,l=e("../util/error");t.exports=function(e,t,a){var n={};if(!(e.properties||e.patternProperties||e.additionalProperties)){if(s(e,"minProperties","maxProperties","dependencies","required"))throw new l("missing properties for "+JSON.stringify(e),t);return n}var u=e.required||[],f=e.properties?Object.keys(e.properties):[];u.forEach(function(t){e.properties&&e.properties[t]&&(n[t]=e.properties[t])});var p=f.filter(function(e){return-1===u.indexOf(e)});e.patternProperties&&(p=Array.prototype.concat.apply(p,Object.keys(e.patternProperties)));var m=r(e.minProperties,e.maxProperties,0,p.length);r.shuffle(p).slice(0,m).forEach(function(t){e.properties&&e.properties[t]?n[t]=e.properties[t]:n[c(t)]=e.patternProperties[t]});var h=Object.keys(n).length,d="object"==typeof e.additionalProperties?e.additionalProperties:{};return m>h&&o.lorem.words(m-h).forEach(function(e){n[e+c("\\w{1,10}")]=d}),i(n,t.concat(["properties"]),a)}},{"../util/container":179,"../util/error":180,"../util/has-props":182,"../util/random":186,"../util/traverse":187}],178:[function(e,t,a){"use strict";function n(e,t){for(var a=t.split(".");a.length;){var n=a.shift();if(!e[n])break;e=e[n]}return e}function r(e){if(e.use){var t=[],a=e.key;"object"==typeof a&&(a=Object.keys(a)[0],Array.isArray(e.key[a])?t=e.key[a]:t.push(e.key[a]));var r=n(e.gen,a);if("function"!=typeof r)throw new Error("unknown "+e.use+"-generator for "+JSON.stringify(e.key));return r.apply(e.gen,t)}switch(e.format){case"date-time":return new Date(l(0,1e14)).toISOString();case"email":case"hostname":case"ipv6":case"uri":return c(p[e.format]).replace(/\{(\w+)\}/,function(e,t){return c(p[t])});case"ipv4":return[0,0,0,0].map(function(){return l(0,255)}).join(".");default:var i=f(e.format);if("function"!=typeof i)throw new Error("unknown generator for "+JSON.stringify(e.format));var u={faker:s,chance:o,randexp:c};return i(u,e)}}var i=e("../util/container"),s=i.get("faker"),o=i.get("chance"),u=i.get("randexp"),c=u.randexp,l=e("../util/random"),f=e("../util/formats"),p={email:"[a-zA-Z\\d][a-zA-Z\\d-]{1,13}[a-zA-Z\\d]@{hostname}",hostname:"[a-zA-Z]{1,33}\\.[a-z]{2,4}",ipv6:"[abcdef\\d]{4}(:[abcdef\\d]{4}){7}",uri:"[a-zA-Z][a-zA-Z0-9+-.]*"};t.exports=function(e){if(e.faker||e.chance)return r({use:e.faker?"faker":"chance",gen:e.faker?s:o,key:e.faker||e.chance});if(e.format)return r(e);if(e.pattern)return c(e.pattern);if(e.minLength||e.maxLength){var t=Math.max(0,e.minLength||0),a=l(t,e.maxLength);return c(".{"+t+","+a+"}")}return s.lorem.words(l(1,5)).join(" ")}},{"../util/container":179,"../util/formats":181,"../util/random":186}],179:[function(e,t,a){"use strict";var n=e("chance"),r={faker:e("faker"),chance:new n,randexp:e("randexp")};t.exports={set:function(e,t){if("undefined"==typeof r[e])throw new ReferenceError('"'+e+"\" dependency doesn't exist.");r[e]=t(r[e])},get:function(e){return r[e]}}},{chance:18,faker:131,randexp:205}],180:[function(e,t,a){"use strict";function n(e,t){this.message=e,this.path=t,this.name="ParseError"}n.prototype=Error.prototype,t.exports=n},{}],181:[function(e,t,a){"use strict";var n={};t.exports=function(e,t){if(t)n[e]=t;else if("object"==typeof e)for(var a in e)n[a]=e[a];else if(e)return n[e];return n}},{}],182:[function(e,t,a){"use strict";t.exports=function(e){return Array.prototype.slice.call(arguments,1).filter(function(t){return"undefined"!=typeof e[t]}).length>0}},{}],183:[function(e,t,a){"use strict";function n(e,t,a){return Object.keys(e).filter(function(e){return a.indexOf(e)>-1&&-1===i.indexOf(t[t.length-1])?!0:void 0}).length>0}var r={array:["additionalItems","items","maxItems","minItems","uniqueItems"],integer:["exclusiveMaximum","exclusiveMinimum","maximum","minimum","multipleOf"],object:["additionalProperties","dependencies","maxProperties","minProperties","patternProperties","properties","required"],string:["maxLength","menlength","pattern"]},i=["additionalItems","items","additionalProperties","dependencies","patternProperties","properties"];r.number=r.integer,t.exports=function(e,t){for(var a in r)if(n(e,t,r[a]))return a}},{}],184:[function(e,t,a){"use strict";function n(e){var t=[];return e.forEach(function(e,a){"object"==typeof e&&null!==e?t[a]=Array.isArray(e)?n(e):r({},e):t[a]=e}),t}var r;r=t.exports=function(e,t){for(var a in t)"object"!=typeof t[a]||null===t[a]?e[a]=t[a]:Array.isArray(t[a])?e[a]=(e[a]||[]).concat(n(t[a])):"object"!=typeof e[a]||null===e[a]||Array.isArray(e[a])?e[a]=r({},t[a]):e[a]=r(e[a],t[a]);return e}},{}],185:[function(e,t,a){"use strict";t.exports={array:e("../types/array"),"boolean":e("../types/boolean"),integer:e("../types/integer"),number:e("../types/number"),"null":e("../types/null"),object:e("../types/object"),string:e("../types/string")}},{"../types/array":172,"../types/boolean":173,"../types/integer":174,"../types/null":175,"../types/number":176,"../types/object":177,"../types/string":178}],186:[function(e,t,a){"use strict";var n=e("./container"),r=n.get("faker"),i=t.exports=function(e,t,a,n){var s=!0;return"boolean"==typeof e&&(s=e,e=arguments[1],t=arguments[2],a=arguments[3],n=arguments[4]),a="undefined"==typeof a?i.MIN_NUMBER:a,n="undefined"==typeof n?i.MAX_NUMBER:n,e="undefined"==typeof e?a:e,t="undefined"==typeof t?n:t,e>t&&(t+=e),r.random.number({min:e,max:t,precision:s?1:Math.random()})};i.shuffle=function(e){for(var t=e.slice(),a=e.length;a>0;){var n=Math.floor(Math.random()*a),r=t[--a];t[a]=t[n],t[n]=r}return t},i.pick=function(e){return e[Math.floor(Math.random()*e.length)]},i.MIN_NUMBER=-100,i.MAX_NUMBER=100},{"./container":179}],187:[function(e,t,a){"use strict";function n(e,t,a){a(e);var u={};if(Array.isArray(e)&&(u=[]),Array.isArray(e["enum"]))return r.pick(e["enum"]);var c=e.type;if(Array.isArray(c)?c=r.pick(c):"undefined"==typeof c&&(c=s(e,t)||c),"string"==typeof c){if(!o[c])throw new i("unknown primitive "+JSON.stringify(c),t.concat(["type"]));try{return o[c](e,t,a)}catch(l){if("undefined"==typeof l.path)throw new i(l.message,t);throw l}}for(var f in e)"object"==typeof e[f]&&"definitions"!==f?u[f]=n(e[f],t.concat([f]),a):u[f]=e[f];return u}var r=e("./random"),i=e("./error"),s=e("./inferred"),o=null;t.exports=function(){return o=o||e("./primitives"),n.apply(null,arguments)}},{"./error":180,"./inferred":183,"./primitives":185,"./random":186}],188:[function(e,t,a){function n(e,t,a){if(null!=e){void 0!==a&&a in r(e)&&(t=[a]);for(var n=0,i=t.length;null!=e&&i>n;)e=e[t[n++]];return n&&n==i?e:void 0}}function r(e){return i(e)?e:Object(e)}function i(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}t.exports=n},{}],189:[function(e,t,a){function n(e){return null==e?"":e+""}function r(e){if(i(e))return e;var t=[];return n(e).replace(s,function(e,a,n,r){t.push(n?r.replace(o,"$1"):a||e)}),t}var i=e("lodash.isarray"),s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,o=/\\(\\)?/g;t.exports=r},{"lodash.isarray":191}],190:[function(e,t,a){function n(e,t,a){var n=null==e?void 0:r(e,i(t),t+"");return void 0===n?a:n}var r=e("lodash._baseget"),i=e("lodash._topath");t.exports=n},{"lodash._baseget":188,"lodash._topath":189}],191:[function(e,t,a){function n(e){return!!e&&"object"==typeof e}function r(e,t){var a=null==e?void 0:e[t];return u(a)?a:void 0}function i(e){return"number"==typeof e&&e>-1&&e%1==0&&w>=e}function s(e){return o(e)&&d.call(e)==l}function o(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function u(e){return null==e?!1:s(e)?g.test(m.call(e)):n(e)&&f.test(e)}var c="[object Array]",l="[object Function]",f=/^\[object .+?Constructor\]$/,p=Object.prototype,m=Function.prototype.toString,h=p.hasOwnProperty,d=p.toString,g=RegExp("^"+m.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=r(Array,"isArray"),w=9007199254740991,v=y||function(e){return n(e)&&i(e.length)&&d.call(e)==c};t.exports=v},{}],192:[function(t,a,n){(function(t){(function(){function r(e,t){if(e!==t){var a=null===e,n=e===C,r=e===e,i=null===t,s=t===C,o=t===t;if(e>t&&!i||!r||a&&!s&&o||n&&o)return 1;if(t>e&&!a||!o||i&&!n&&r||s&&r)return-1}return 0}function i(e,t,a){for(var n=e.length,r=a?n:-1;a?r--:++r-1;);return a}function l(e,t){for(var a=e.length;a--&&t.indexOf(e.charAt(a))>-1;);return a}function f(e,t){return r(e.criteria,t.criteria)||e.index-t.index}function p(e,t,a){for(var n=-1,i=e.criteria,s=t.criteria,o=i.length,u=a.length;++n=u)return c;var l=a[n];return c*("asc"===l||l===!0?1:-1)}}return e.index-t.index}function m(e){return Je[e]}function h(e){return Ge[e]}function d(e,t,a){return t?e=Ve[e]:a&&(e=Ye[e]),"\\"+e}function g(e){return"\\"+Ye[e]}function y(e,t,a){for(var n=e.length,r=t+(a?0:-1);a?r--:++r=e&&e>=9&&13>=e||32==e||160==e||5760==e||6158==e||e>=8192&&(8202>=e||8232==e||8233==e||8239==e||8287==e||12288==e||65279==e)}function b(e,t){for(var a=-1,n=e.length,r=-1,i=[];++at,r=a?e.length:0,i=Ja(0,r,this.__views__),s=i.start,o=i.end,u=o-s,c=n?o:s-1,l=this.__iteratees__,f=l.length,p=0,m=As(u,this.__takeCount__);if(!a||U>r||r==u&&m==u)return aa(n&&a?e.reverse():e,this.__actions__);var h=[];e:for(;u--&&m>p;){c+=t;for(var d=-1,g=e[c];++d=U?ha(t):null,c=t.length;u&&(i=Ze,o=!1,t=u);e:for(;++ra&&(a=-a>r?0:r+a),n=n===C||n>r?r:+n||0,0>n&&(n+=r),r=a>n?0:n>>>0,a>>>=0;r>a;)e[a++]=t;return e}function _t(e,t){var a=[];return Ps(e,function(e,n,r){t(e,n,r)&&a.push(e)}),a}function St(e,t,a,n){var r;return a(e,function(e,a,i){return t(e,a,i)?(r=n?a:e,!1):void 0}),r}function zt(e,t,a,n){n||(n=[]);for(var r=-1,i=e.length;++rn;)e=e[t[n++]];return n&&n==r?e:C}}function Pt(e,t,a,n,r,i){return e===t?!0:null==e||null==t||!Mr(e)&&!w(t)?e!==e&&t!==t:Ot(e,t,Pt,a,n,r,i)}function Ot(e,t,a,n,r,i,s){var o=zo(e),u=zo(t),c=q,l=q;o||(c=as.call(e),c==G?c=ee:c!=ee&&(o=$r(e))),u||(l=as.call(t),l==G?l=ee:l!=ee&&(u=$r(t)));var f=c==ee,p=l==ee,m=c==l;if(m&&!o&&!f)return Ta(e,t,c);if(!r){var h=f&&es.call(e,"__wrapped__"),d=p&&es.call(t,"__wrapped__");if(h||d)return a(h?e.value():e,d?t.value():t,n,r,i,s)}if(!m)return!1;i||(i=[]),s||(s=[]);for(var g=i.length;g--;)if(i[g]==e)return s[g]==t;i.push(e),s.push(t);var y=(o?Ba:La)(e,t,a,n,r,i,s);return i.pop(),s.pop(),y}function Bt(e,t,a){var n=t.length,r=n,i=!a;if(null==e)return!r;for(e=fn(e);n--;){var s=t[n];if(i&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++nt&&(t=-t>r?0:r+t),a=a===C||a>r?r:+a||0,0>a&&(a+=r),r=t>a?0:a-t>>>0,t>>>=0;for(var i=Ni(r);++n=U,u=o?ha():null,c=[];u?(n=Ze,i=!1):(o=!1,u=t?[]:c);e:for(;++a=r){for(;r>n;){var i=n+r>>>1,s=e[i];(a?t>=s:t>s)&&null!==s?n=i+1:r=i}return r}return ra(e,t,_i,a)}function ra(e,t,a,n){t=a(t);for(var r=0,i=e?e.length:0,s=t!==t,o=null===t,u=t===C;i>r;){var c=ys((r+i)/2),l=a(e[c]),f=l!==C,p=l===l;if(s)var m=p||n;else m=o?p&&f&&(n||null!=l):u?p&&(n||f):null==l?!1:n?t>=l:t>l;m?r=c+1:i=c}return As(i,zs)}function ia(e,t,a){if("function"!=typeof e)return _i;if(t===C)return e;switch(a){case 1:return function(a){return e.call(t,a)};case 3:return function(a,n,r){return e.call(t,a,n,r)};case 4:return function(a,n,r,i){return e.call(t,a,n,r,i)};case 5:return function(a,n,r,i,s){return e.call(t,a,n,r,i,s)}}return function(){return e.apply(t,arguments)}}function sa(e){var t=new is(e.byteLength),a=new ms(t);return a.set(new ms(e)),t}function oa(e,t,a){for(var n=a.length,r=-1,i=Es(e.length-n,0),s=-1,o=t.length,u=Ni(o+i);++s2?a[r-2]:C,s=r>2?a[2]:C,o=r>1?a[r-1]:C;for("function"==typeof i?(i=ia(i,o,5),r-=2):(i="function"==typeof o?o:C,r-=i?1:0),s&&Xa(a[0],a[1],s)&&(i=3>r?C:i,r=1);++n-1?a[s]:C}return St(a,n,e)}}function Ea(e){return function(t,a,n){return t&&t.length?(a=Na(a,n,3),i(t,a,e)):-1}}function Aa(e){return function(t,a,n){return a=Na(a,n,3),St(t,a,e,!0)}}function Da(e){return function(){for(var t,a=arguments.length,r=e?a:-1,i=0,s=Ni(a);e?r--:++r=U)return t.plant(n).value();for(var r=0,i=a?s[r].apply(this,e):n;++rw){var j=o?et(o):C,x=Es(c-w,0),_=h?D:C,F=h?C:D,k=h?E:C,R=h?C:E;t|=h?I:M,t&=~(h?M:I),d||(t&=~(S|z));var P=[e,t,a,k,_,R,F,j,u,x],O=ka.apply(C,P);return en(e)&&Ks(O,P),O.placeholder=A,O}}var B=p?a:this,T=m?B[e]:e;return o&&(E=un(E,o)),f&&u=t||!vs(t))return"";var r=t-n;return a=null==a?" ":a+"",gi(a,ds(r/a.length)).slice(0,r)}function Ia(e,t,a,n){function r(){for(var t=-1,o=arguments.length,u=-1,c=n.length,l=Ni(c+o);++uu))return!1;for(;++o-1&&e%1==0&&t>e}function Xa(e,t,a){if(!Mr(a))return!1;var n=typeof t;if("number"==n?Ya(a)&&Za(t,a.length):"string"==n&&t in a){var r=a[t];return e===e?e===r:r!==r}return!1}function Qa(e,t){var a=typeof e;if("string"==a&&Ce.test(e)||"number"==a)return!0;if(zo(e))return!1;var n=!xe.test(e);return n||null!=t&&e in fn(t)}function en(e){var a=Ua(e);if(!(a in v.prototype))return!1;var n=t[a];if(e===n)return!0;var r=Ns(n);return!!r&&e===r[0]}function tn(e){return"number"==typeof e&&e>-1&&e%1==0&&ks>=e}function an(e){return e===e&&!Mr(e)}function nn(e,t){var a=e[1],n=t[1],r=a|n,i=P>r,s=n==P&&a==k||n==P&&a==O&&e[7].length<=t[8]||n==(P|O)&&a==k;if(!i&&!s)return e;n&S&&(e[2]=t[2],r|=a&S?0:F);var o=t[3];if(o){var u=e[3];e[3]=u?oa(u,o,t[4]):et(o),e[4]=u?b(e[3],J):et(t[4])}return o=t[5],o&&(u=e[5],e[5]=u?ua(u,o,t[6]):et(o),e[6]=u?b(e[5],J):et(t[6])),o=t[7],o&&(e[7]=et(o)),n&P&&(e[8]=null==e[8]?t[8]:As(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=r,e}function rn(e,t){return e===C?t:Fo(e,t,rn)}function sn(e,t){e=fn(e);for(var a=-1,n=t.length,r={};++an;)s[++i]=Wt(e,n,n+=t);return s}function dn(e){for(var t=-1,a=e?e.length:0,n=-1,r=[];++tt?0:t)):[]}function yn(e,t,a){var n=e?e.length:0;return n?((a?Xa(e,t,a):null==t)&&(t=1),t=n-(+t||0),Wt(e,0,0>t?0:t)):[]}function wn(e,t,a){return e&&e.length?ta(e,Na(t,a,3),!0,!0):[]}function vn(e,t,a){return e&&e.length?ta(e,Na(t,a,3),!0):[]}function bn(e,t,a,n){var r=e?e.length:0;return r?(a&&"number"!=typeof a&&Xa(e,t,a)&&(a=0,n=r),Ct(e,t,a,n)):[]}function En(e){return e?e[0]:C}function An(e,t,a){var n=e?e.length:0;return a&&Xa(e,t,a)&&(t=!1),n?zt(e,t):[]}function Dn(e){var t=e?e.length:0;return t?zt(e,!0):[]}function jn(e,t,a){var n=e?e.length:0;if(!n)return-1;if("number"==typeof a)a=0>a?Es(n+a,0):a;else if(a){var r=na(e,t);return n>r&&(t===t?t===e[r]:e[r]!==e[r])?r:-1}return s(e,t,a||0)}function xn(e){return yn(e,1)}function Cn(e){var t=e?e.length:0;return t?e[t-1]:C}function _n(e,t,a){var n=e?e.length:0;if(!n)return-1;var r=n;if("number"==typeof a)r=(0>a?Es(n+a,0):As(a||0,n-1))+1;else if(a){r=na(e,t,!0)-1;var i=e[r];return(t===t?t===i:i!==i)?r:-1}if(t!==t)return y(e,r,!0);for(;r--;)if(e[r]===t)return r;return-1}function Sn(){var e=arguments,t=e[0];if(!t||!t.length)return t;for(var a=0,n=Ka(),r=e.length;++a-1;)ps.call(t,i,1);return t}function zn(e,t,a){var n=[];if(!e||!e.length)return n;var r=-1,i=[],s=e.length;for(t=Na(t,a,3);++rt?0:t)):[]}function In(e,t,a){var n=e?e.length:0;return n?((a?Xa(e,t,a):null==t)&&(t=1),t=n-(+t||0),Wt(e,0>t?0:t)):[]}function Mn(e,t,a){return e&&e.length?ta(e,Na(t,a,3),!1,!0):[]}function Pn(e,t,a){return e&&e.length?ta(e,Na(t,a,3)):[]}function On(e,t,a,n){var r=e?e.length:0;if(!r)return[];null!=t&&"boolean"!=typeof t&&(n=a,a=Xa(e,t,n)?C:t,t=!1);var i=Na();return(null!=a||i!==bt)&&(a=i(a,n,3)),t&&Ka()==s?E(e,a):Qt(e,a)}function Bn(e){if(!e||!e.length)return[];var t=-1,a=0;e=ot(e,function(e){return Ya(e)?(a=Es(e.length,a),!0):void 0});for(var n=Ni(a);++ta?Es(r+a,0):a||0,"string"==typeof e||!zo(e)&&Kr(e)?r>=a&&e.indexOf(t,a)>-1:!!r&&Ka(e,t,a)>-1}function er(e,t,a){var n=zo(e)?ut:Tt;return t=Na(t,a,3),n(e,t)}function tr(e,t){return er(e,Ii(t))}function ar(e,t,a){var n=zo(e)?ot:_t;return t=Na(t,a,3),n(e,function(e,a,n){return!t(e,a,n)})}function nr(e,t,a){if(a?Xa(e,t,a):null==t){e=ln(e);var n=e.length;return n>0?e[Gt(0,n-1)]:C}var r=-1,i=qr(e),n=i.length,s=n-1;for(t=As(0>t?0:+t||0,n);++r0&&(a=t.apply(this,arguments)),1>=e&&(t=C),a}}function mr(e,t,a){function n(){m&&ss(m),c&&ss(c),d=0,c=m=h=C}function r(t,a){a&&ss(a),c=m=h=C,t&&(d=ho(),l=e.apply(p,u),m||c||(u=p=C))}function i(){var e=t-(ho()-f);0>=e||e>t?r(h,c):m=fs(i,e)}function s(){r(y,m)}function o(){if(u=arguments,f=ho(),p=this,h=y&&(m||!w),g===!1)var a=w&&!m;else{c||w||(d=f);var n=g-(f-d),r=0>=n||n>g;r?(c&&(c=ss(c)),d=f,l=e.apply(p,u)):c||(c=fs(s,n))}return r&&m?m=ss(m):m||t===g||(m=fs(i,t)),a&&(r=!0,l=e.apply(p,u)),!r||m||c||(u=p=C),l}var u,c,l,f,p,m,h,d=0,g=!1,y=!0;if("function"!=typeof e)throw new Vi(H);if(t=0>t?0:+t||0,a===!0){var w=!0;y=!1}else Mr(a)&&(w=!!a.leading,g="maxWait"in a&&Es(+a.maxWait||0,t),y="trailing"in a?!!a.trailing:y);return o.cancel=n,o}function hr(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new Vi(H);var a=function(){var n=arguments,r=t?t.apply(this,n):n[0],i=a.cache;if(i.has(r))return i.get(r);var s=e.apply(this,n);return a.cache=i.set(r,s),s};return a.cache=new hr.Cache,a}function dr(e){if("function"!=typeof e)throw new Vi(H);return function(){return!e.apply(this,arguments)}}function gr(e){return pr(2,e)}function yr(e,t){if("function"!=typeof e)throw new Vi(H);return t=Es(t===C?e.length-1:+t||0,0),function(){for(var a=arguments,n=-1,r=Es(a.length-t,0),i=Ni(r);++nt}function jr(e,t){return e>=t}function xr(e){return w(e)&&Ya(e)&&es.call(e,"callee")&&!cs.call(e,"callee")}function Cr(e){return e===!0||e===!1||w(e)&&as.call(e)==W}function _r(e){return w(e)&&as.call(e)==V}function Sr(e){return!!e&&1===e.nodeType&&w(e)&&!Nr(e)}function zr(e){return null==e?!0:Ya(e)&&(zo(e)||Kr(e)||xr(e)||w(e)&&Ir(e.splice))?!e.length:!No(e).length}function Fr(e,t,a,n){a="function"==typeof a?ia(a,n,3):C;var r=a?a(e,t):C;return r===C?Pt(e,t,a):!!r}function kr(e){return w(e)&&"string"==typeof e.message&&as.call(e)==Y}function Rr(e){return"number"==typeof e&&vs(e)}function Ir(e){return Mr(e)&&as.call(e)==Z}function Mr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Pr(e,t,a,n){return a="function"==typeof a?ia(a,n,3):C,Bt(e,$a(t),a)}function Or(e){return Lr(e)&&e!=+e}function Br(e){return null==e?!1:Ir(e)?rs.test(Qi.call(e)):w(e)&&Pe.test(e)}function Tr(e){return null===e}function Lr(e){return"number"==typeof e||w(e)&&as.call(e)==Q}function Nr(e){var t;if(!w(e)||as.call(e)!=ee||xr(e)||!es.call(e,"constructor")&&(t=e.constructor,"function"==typeof t&&!(t instanceof t)))return!1;var a;return Ft(e,function(e,t){a=t}),a===C||es.call(e,a)}function Ur(e){return Mr(e)&&as.call(e)==te}function Kr(e){return"string"==typeof e||w(e)&&as.call(e)==ne}function $r(e){return w(e)&&tn(e.length)&&!!$e[as.call(e)]}function Hr(e){return e===C}function Jr(e,t){return t>e}function Gr(e,t){return t>=e}function qr(e){var t=e?Us(e):0;return tn(t)?t?et(e):[]:ii(e)}function Wr(e){return vt(e,ei(e))}function Vr(e,t,a){var n=Ms(e);return a&&Xa(e,t,a)&&(t=C),t?yt(n,t):n}function Yr(e){return It(e,ei(e))}function Zr(e,t,a){var n=null==e?C:Mt(e,pn(t),t+"");return n===C?a:n}function Xr(e,t){if(null==e)return!1;var a=es.call(e,t);if(!a&&!Qa(t)){if(t=pn(t),e=1==t.length?e:Mt(e,Wt(t,0,-1)),null==e)return!1;t=Cn(t),a=es.call(e,t)}return a||tn(e.length)&&Za(t,e.length)&&(zo(e)||xr(e))}function Qr(e,t,a){a&&Xa(e,t,a)&&(t=C);for(var n=-1,r=No(e),i=r.length,s={};++n0;++n=As(t,a)&&ea?0:+a||0,n),a-=t.length,a>=0&&e.indexOf(t,a)==a}function pi(e){return e=u(e),e&&Ee.test(e)?e.replace(ve,h):e}function mi(e){return e=u(e),e&&ze.test(e)?e.replace(Se,d):e||"(?:)"}function hi(e,t,a){e=u(e),t=+t;var n=e.length;if(n>=t||!vs(t))return e;var r=(t-n)/2,i=ys(r),s=ds(r);return a=Ra("",s,a),a.slice(0,i)+e+a}function di(e,t,a){return(a?Xa(e,t,a):null==t)?t=0:t&&(t=+t),e=vi(e),js(e,t||(Me.test(e)?16:10))}function gi(e,t){var a="";if(e=u(e),t=+t,1>t||!e||!vs(t))return a;do t%2&&(a+=e),t=ys(t/2),e+=e;while(t);return a}function yi(e,t,a){return e=u(e),a=null==a?0:As(0>a?0:+a||0,e.length),e.lastIndexOf(t,a)==a}function wi(e,a,n){var r=t.templateSettings;n&&Xa(e,a,n)&&(a=n=C),e=u(e),a=gt(yt({},n||a),r,dt);var i,s,o=gt(yt({},a.imports),r.imports,dt),c=No(o),l=ea(o,c),f=0,p=a.interpolate||Te,m="__p += '",h=qi((a.escape||Te).source+"|"+p.source+"|"+(p===je?Re:Te).source+"|"+(a.evaluate||Te).source+"|$","g"),d="//# sourceURL="+("sourceURL"in a?a.sourceURL:"lodash.templateSources["+ ++Ke+"]")+"\n";e.replace(h,function(t,a,n,r,o,u){return n||(n=r),m+=e.slice(f,u).replace(Le,g),a&&(i=!0,m+="' +\n__e("+a+") +\n'"),o&&(s=!0,m+="';\n"+o+";\n__p += '"),n&&(m+="' +\n((__t = ("+n+")) == null ? '' : __t) +\n'"),f=u+t.length,t}),m+="';\n";var y=a.variable;y||(m="with (obj) {\n"+m+"\n}\n"),m=(s?m.replace(de,""):m).replace(ge,"$1").replace(ye,"$1;"),m="function("+(y||"obj")+") {\n"+(y?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(s?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+m+"return __p\n}";var w=Zo(function(){return $i(c,d+"return "+m).apply(C,l)});if(w.source=m,kr(w))throw w;return w}function vi(e,t,a){var n=e;return(e=u(e))?(a?Xa(n,t,a):null==t)?e.slice(A(e),D(e)+1):(t+="",e.slice(c(e,t),l(e,t)+1)):e}function bi(e,t,a){var n=e;return e=u(e),e?(a?Xa(n,t,a):null==t)?e.slice(A(e)):e.slice(c(e,t+"")):e}function Ei(e,t,a){var n=e;return e=u(e),e?(a?Xa(n,t,a):null==t)?e.slice(0,D(e)+1):e.slice(0,l(e,t+"")+1):e}function Ai(e,t,a){a&&Xa(e,t,a)&&(t=C);var n=B,r=T;if(null!=t)if(Mr(t)){var i="separator"in t?t.separator:i;n="length"in t?+t.length||0:n,r="omission"in t?u(t.omission):r}else n=+t||0;if(e=u(e),n>=e.length)return e;var s=n-r.length;if(1>s)return r;var o=e.slice(0,s); +if(null==i)return o+r;if(Ur(i)){if(e.slice(s).search(i)){var c,l,f=e.slice(0,s);for(i.global||(i=qi(i.source,(Ie.exec(i)||"")+"g")),i.lastIndex=0;c=i.exec(f);)l=c.index;o=o.slice(0,null==l?s:l)}}else if(e.indexOf(i,s)!=s){var p=o.lastIndexOf(i);p>-1&&(o=o.slice(0,p))}return o+r}function Di(e){return e=u(e),e&&be.test(e)?e.replace(we,j):e}function ji(e,t,a){return a&&Xa(e,t,a)&&(t=C),e=u(e),e.match(t||Ne)||[]}function xi(e,t,a){return a&&Xa(e,t,a)&&(t=C),w(e)?Si(e):bt(e,t)}function Ci(e){return function(){return e}}function _i(e){return e}function Si(e){return Lt(Et(e,!0))}function zi(e,t){return Nt(e,Et(t,!0))}function Fi(e,t,a){if(null==a){var n=Mr(t),r=n?No(t):C,i=r&&r.length?It(t,r):C;(i?i.length:n)||(i=!1,a=t,t=e,e=this)}i||(i=It(t,No(t)));var s=!0,o=-1,u=Ir(e),c=i.length;a===!1?s=!1:Mr(a)&&"chain"in a&&(s=a.chain);for(;++oe||!vs(e))return[];var n=-1,r=Ni(As(e,Ss));for(t=ia(t,a,1);++nn?r[n]=t(n):t(n);return r}function Bi(e){var t=++ts;return u(e)+t}function Ti(e,t){return(+e||0)+(+t||0)}function Li(e,t,a){return a&&Xa(e,t,a)&&(t=C),t=Na(t,a,3),1==t.length?mt(zo(e)?e:ln(e),t):Xt(e,t)}e=e?rt.defaults(nt.Object(),e,rt.pick(nt,Ue)):nt;var Ni=e.Array,Ui=e.Date,Ki=e.Error,$i=e.Function,Hi=e.Math,Ji=e.Number,Gi=e.Object,qi=e.RegExp,Wi=e.String,Vi=e.TypeError,Yi=Ni.prototype,Zi=Gi.prototype,Xi=Wi.prototype,Qi=$i.prototype.toString,es=Zi.hasOwnProperty,ts=0,as=Zi.toString,ns=nt._,rs=qi("^"+Qi.call(es).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),is=e.ArrayBuffer,ss=e.clearTimeout,os=e.parseFloat,us=Hi.pow,cs=Zi.propertyIsEnumerable,ls=Ha(e,"Set"),fs=e.setTimeout,ps=Yi.splice,ms=e.Uint8Array,hs=Ha(e,"WeakMap"),ds=Hi.ceil,gs=Ha(Gi,"create"),ys=Hi.floor,ws=Ha(Ni,"isArray"),vs=e.isFinite,bs=Ha(Gi,"keys"),Es=Hi.max,As=Hi.min,Ds=Ha(Ui,"now"),js=e.parseInt,xs=Hi.random,Cs=Ji.NEGATIVE_INFINITY,_s=Ji.POSITIVE_INFINITY,Ss=4294967295,zs=Ss-1,Fs=Ss>>>1,ks=9007199254740991,Rs=hs&&new hs,Is={};t.support={};t.templateSettings={escape:Ae,evaluate:De,interpolate:je,variable:"",imports:{_:t}};var Ms=function(){function e(){}return function(t){if(Mr(t)){e.prototype=t;var a=new e;e.prototype=C}return a||{}}}(),Ps=fa(kt),Os=fa(Rt,!0),Bs=pa(),Ts=pa(!0),Ls=Rs?function(e,t){return Rs.set(e,t),e}:_i,Ns=Rs?function(e){return Rs.get(e)}:Ri,Us=$t("length"),Ks=function(){var e=0,t=0;return function(a,n){var r=ho(),i=N-(r-t);if(t=r,i>0){if(++e>=L)return a}else e=0;return Ls(a,n)}}(),$s=yr(function(e,t){return w(e)&&Ya(e)?Dt(e,zt(t,!1,!0)):[]}),Hs=Ea(),Js=Ea(!0),Gs=yr(function(e){for(var t=e.length,a=t,n=Ni(f),r=Ka(),i=r==s,o=[];a--;){var u=e[a]=Ya(u=e[a])?u:[];n[a]=i&&u.length>=120?ha(a&&u):null}var c=e[0],l=-1,f=c?c.length:0,p=n[0];e:for(;++l2?e[t-2]:C,n=t>1?e[t-1]:C;return t>2&&"function"==typeof a?t-=2:(a=t>1&&"function"==typeof n?(--t,n):C,n=C),e.length=t,Tn(e,a,n)}),eo=yr(function(e){return e=zt(e),this.thru(function(t){return Qe(zo(t)?t:[fn(t)],e)})}),to=yr(function(e,t){return wt(e,zt(t))}),ao=ca(function(e,t,a){es.call(e,a)?++e[a]:e[a]=1}),no=ba(Ps),ro=ba(Os,!0),io=ja(tt,Ps),so=ja(at,Os),oo=ca(function(e,t,a){es.call(e,a)?e[a].push(t):e[a]=[t]}),uo=ca(function(e,t,a){e[a]=t}),co=yr(function(e,t,a){var n=-1,r="function"==typeof t,i=Qa(t),s=Ya(e)?Ni(e.length):[];return Ps(e,function(e){var o=r?t:i&&null!=e?e[t]:C;s[++n]=o?o.apply(e,a):Va(e,t,a)}),s}),lo=ca(function(e,t,a){e[a?0:1].push(t)},function(){return[[],[]]}),fo=Fa(lt,Ps),po=Fa(ft,Os),mo=yr(function(e,t){if(null==e)return[];var a=t[2];return a&&Xa(t[0],t[1],a)&&(t.length=1),Zt(e,zt(t),[])}),ho=Ds||function(){return(new Ui).getTime()},go=yr(function(e,t,a){var n=S;if(a.length){var r=b(a,go.placeholder);n|=I}return Oa(e,n,t,a,r)}),yo=yr(function(e,t){t=t.length?zt(t):Yr(e);for(var a=-1,n=t.length;++a0||0>t)?new v(a):(0>e?a=a.takeRight(-e):e&&(a=a.drop(e)),t!==C&&(t=+t||0,a=0>t?a.dropRight(-t):a.take(t-e)),a)},v.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},v.prototype.toArray=function(){return this.take(_s)},kt(v.prototype,function(e,a){var r=/^(?:filter|map|reject)|While$/.test(a),i=/^(?:first|last)$/.test(a),s=t[i?"take"+("last"==a?"Right":""):a];s&&(t.prototype[a]=function(){var t=i?[1]:arguments,a=this.__chain__,o=this.__wrapped__,u=!!this.__actions__.length,c=o instanceof v,l=t[0],f=c||zo(o);f&&r&&"function"==typeof l&&1!=l.length&&(c=f=!1);var p=function(e){return i&&a?s(e,1)[0]:s.apply(C,ct([e],t))},m={func:$n,args:[p],thisArg:C},h=c&&!u;if(i&&!a)return h?(o=o.clone(),o.__actions__.push(m),e.call(o)):s.call(C,this.value())[0];if(!i&&f){o=h?o:new v(this);var d=e.apply(o,t);return d.__actions__.push(m),new n(d,a)}return this.thru(p)})}),tt(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(e){var a=(/^(?:replace|split)$/.test(e)?Xi:Yi)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:join|pop|replace|shift)$/.test(e);t.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?a.apply(this.value(),e):this[n](function(t){return a.apply(t,e)})}}),kt(v.prototype,function(e,a){var n=t[a];if(n){var r=n.name,i=Is[r]||(Is[r]=[]);i.push({name:a,func:n})}}),Is[ka(C,z).name]=[{name:"wrapper",func:C}],v.prototype.clone=X,v.prototype.reverse=ae,v.prototype.value=re,t.prototype.chain=Hn,t.prototype.commit=Jn,t.prototype.concat=eo,t.prototype.plant=Gn,t.prototype.reverse=qn,t.prototype.toString=Wn,t.prototype.run=t.prototype.toJSON=t.prototype.valueOf=t.prototype.value=Vn,t.prototype.collect=t.prototype.map,t.prototype.head=t.prototype.first,t.prototype.select=t.prototype.filter,t.prototype.tail=t.prototype.rest,t}var C,_="3.10.1",S=1,z=2,F=4,k=8,R=16,I=32,M=64,P=128,O=256,B=30,T="...",L=150,N=16,U=200,K=1,$=2,H="Expected a function",J="__lodash_placeholder__",G="[object Arguments]",q="[object Array]",W="[object Boolean]",V="[object Date]",Y="[object Error]",Z="[object Function]",X="[object Map]",Q="[object Number]",ee="[object Object]",te="[object RegExp]",ae="[object Set]",ne="[object String]",re="[object WeakMap]",ie="[object ArrayBuffer]",se="[object Float32Array]",oe="[object Float64Array]",ue="[object Int8Array]",ce="[object Int16Array]",le="[object Int32Array]",fe="[object Uint8Array]",pe="[object Uint8ClampedArray]",me="[object Uint16Array]",he="[object Uint32Array]",de=/\b__p \+= '';/g,ge=/\b(__p \+=) '' \+/g,ye=/(__e\(.*?\)|\b__t\)) \+\n'';/g,we=/&(?:amp|lt|gt|quot|#39|#96);/g,ve=/[&<>"'`]/g,be=RegExp(we.source),Ee=RegExp(ve.source),Ae=/<%-([\s\S]+?)%>/g,De=/<%([\s\S]+?)%>/g,je=/<%=([\s\S]+?)%>/g,xe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,Ce=/^\w*$/,_e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,Se=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,ze=RegExp(Se.source),Fe=/[\u0300-\u036f\ufe20-\ufe23]/g,ke=/\\(\\)?/g,Re=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ie=/\w*$/,Me=/^0[xX]/,Pe=/^\[object .+?Constructor\]$/,Oe=/^\d+$/,Be=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Te=/($^)/,Le=/['\n\r\u2028\u2029\\]/g,Ne=function(){var e="[A-Z\\xc0-\\xd6\\xd8-\\xde]",t="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(e+"+(?="+e+t+")|"+e+"?"+t+"|"+e+"+|[0-9]+","g")}(),Ue=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"],Ke=-1,$e={};$e[se]=$e[oe]=$e[ue]=$e[ce]=$e[le]=$e[fe]=$e[pe]=$e[me]=$e[he]=!0,$e[G]=$e[q]=$e[ie]=$e[W]=$e[V]=$e[Y]=$e[Z]=$e[X]=$e[Q]=$e[ee]=$e[te]=$e[ae]=$e[ne]=$e[re]=!1;var He={};He[G]=He[q]=He[ie]=He[W]=He[V]=He[se]=He[oe]=He[ue]=He[ce]=He[le]=He[Q]=He[ee]=He[te]=He[ne]=He[fe]=He[pe]=He[me]=He[he]=!0,He[Y]=He[Z]=He[X]=He[ae]=He[re]=!1;var Je={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Ge={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},qe={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},We={"function":!0,object:!0},Ve={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ye={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ze=We[typeof n]&&n&&!n.nodeType&&n,Xe=We[typeof a]&&a&&!a.nodeType&&a,Qe=Ze&&Xe&&"object"==typeof t&&t&&t.Object&&t,et=We[typeof self]&&self&&self.Object&&self,tt=We[typeof window]&&window&&window.Object&&window,at=Xe&&Xe.exports===Ze&&Ze,nt=Qe||tt!==(this&&this.window)&&tt||et||this,rt=x();"function"==typeof e&&"object"==typeof e.amd&&e.amd?(nt._=rt,e(function(){return rt})):Ze&&Xe?at?(Xe.exports=rt)._=rt:Ze._=rt:nt._=rt}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],193:[function(e,t,a){function n(e){if(e=""+e,!(e.length>1e4)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var a=parseFloat(t[1]),n=(t[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return a*f;case"days":case"day":case"d":return a*l;case"hours":case"hour":case"hrs":case"hr":case"h":return a*c;case"minutes":case"minute":case"mins":case"min":case"m":return a*u;case"seconds":case"second":case"secs":case"sec":case"s":return a*o;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a}}}}function r(e){return e>=l?Math.round(e/l)+"d":e>=c?Math.round(e/c)+"h":e>=u?Math.round(e/u)+"m":e>=o?Math.round(e/o)+"s":e+"ms"}function i(e){return s(e,l,"day")||s(e,c,"hour")||s(e,u,"minute")||s(e,o,"second")||e+" ms"}function s(e,t,a){return t>e?void 0:1.5*t>e?Math.floor(e/t)+" "+a:Math.ceil(e/t)+" "+a+"s"}var o=1e3,u=60*o,c=60*u,l=24*c,f=365.25*l;t.exports=function(e,t){return t=t||{},"string"==typeof e?n(e):t["long"]?i(e):r(e)}},{}],194:[function(t,a,n){(function(t){!function(t,n,r){n[t]=n[t]||r(),"undefined"!=typeof a&&a.exports?a.exports=n[t]:"function"==typeof e&&e.amd&&e(function(){return n[t]})}("Promise","undefined"!=typeof t?t:this,function(){"use strict";function e(e,t){p.add(e,t),f||(f=h(p.drain))}function t(e){var t,a=typeof e;return null==e||"object"!=a&&"function"!=a||(t=e.then),"function"==typeof t?t:!1}function a(){for(var e=0;e0&&e(a,u))}catch(c){i.call(new o(u),c)}}}function i(t){var n=this;n.triggered||(n.triggered=!0,n.def&&(n=n.def),n.msg=t,n.state=2,n.chain.length>0&&e(a,n))}function s(e,t,a,n){for(var r=0;r=0;n--){var r=e[n];"."===r?e.splice(n,1):".."===r?(e.splice(n,1),a++):a&&(e.splice(n,1),a--)}if(t)for(;a--;a)e.unshift("..");return e}function n(e,t){if(e.filter)return e.filter(t);for(var a=[],n=0;n=-1&&!r;i--){var s=i>=0?arguments[i]:e.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(a=s+"/"+a,r="/"===s.charAt(0))}return a=t(n(a.split("/"),function(e){return!!e}),!r).join("/"),(r?"/":"")+a||"."},a.normalize=function(e){var r=a.isAbsolute(e),i="/"===s(e,-1);return e=t(n(e.split("/"),function(e){return!!e}),!r).join("/"),e||r||(e="."),e&&i&&(e+="/"),(r?"/":"")+e},a.isAbsolute=function(e){return"/"===e.charAt(0)},a.join=function(){var e=Array.prototype.slice.call(arguments,0);return a.normalize(n(e,function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},a.relative=function(e,t){function n(e){for(var t=0;t=0&&""===e[a];a--);return t>a?[]:e.slice(t,a-t+1)}e=a.resolve(e).substr(1),t=a.resolve(t).substr(1);for(var r=n(e.split("/")),i=n(t.split("/")),s=Math.min(r.length,i.length),o=s,u=0;s>u;u++)if(r[u]!==i[u]){o=u;break}for(var c=[],u=o;ut&&(t=e.length+t),e.substr(t,a)}}).call(this,e("_process"))},{_process:200}],196:[function(e,t,a){"use strict";function n(e){return"undefined"!=typeof e&&(e=-1===e.indexOf("://")?"":e.split("://")[0]),e}function r(e){var t=n(e),a=i[t];if("undefined"==typeof a){if(""!==t)throw new Error("Unsupported scheme: "+t);a=s}return a}var i={file:e("./lib/loaders/file"),http:e("./lib/loaders/http"),https:e("./lib/loaders/http")},s="object"==typeof window||"function"==typeof importScripts?i.http:i.file;"undefined"==typeof Promise&&e("native-promise-only"),t.exports.load=function(e,t){var a=Promise.resolve();return"undefined"==typeof t&&(t={}),a=a.then(function(){if("undefined"==typeof e)throw new TypeError("location is required");if("string"!=typeof e)throw new TypeError("location must be a string");if("undefined"!=typeof t){if("object"!=typeof t)throw new TypeError("options must be an object");if("undefined"!=typeof t.processContent&&"function"!=typeof t.processContent)throw new TypeError("options.processContent must be a function")}}),a=a.then(function(){return new Promise(function(a,n){var i=r(e);i.load(e,t||{},function(e,t){e?n(e):a(t)})})}).then(function(e){return t.processContent?new Promise(function(a,n){t.processContent("object"==typeof e?e:{text:e},function(e,t){e?n(e):a(t)})}):"object"==typeof e?e.text:e})}},{"./lib/loaders/file":197,"./lib/loaders/http":198,"native-promise-only":194}],197:[function(e,t,a){"use strict";var n=new TypeError("The 'file' scheme is not supported in the browser");t.exports.getBase=function(){throw n},t.exports.load=function(){var e=arguments[arguments.length-1];if("function"!=typeof e)throw n;e(n)}},{}],198:[function(e,t,a){"use strict";var n=e("superagent"),r=["delete","get","head","patch","post","put"];t.exports.load=function(e,t,a){function i(e,t){e?a(e):("function"==typeof t.buffer&&t.buffer(!0),t.end(function(e,t){e?a(e):a(void 0,t)}))}var s,o,u=t.method?t.method.toLowerCase():"get";if("undefined"!=typeof t.method?"string"!=typeof t.method?s=new TypeError("options.method must be a string"):-1===r.indexOf(t.method)&&(s=new TypeError("options.method must be one of the following: "+r.slice(0,r.length-1).join(", ")+" or "+r[r.length-1])):"undefined"!=typeof t.prepareRequest&&"function"!=typeof t.prepareRequest&&(s=new TypeError("options.prepareRequest must be a function")),s)a(s);else if(o=n["delete"===u?"del":u](e),t.prepareRequest)try{t.prepareRequest(o,i)}catch(c){a(c)}else i(void 0,o)}},{superagent:213}],199:[function(e,t,a){function n(e){for(var t,a=[],n=0,r=0,i="";null!=(t=g.exec(e));){var s=t[0],u=t[1],c=t.index;if(i+=e.slice(r,c),r=c+s.length,u)i+=u[1];else{i&&(a.push(i),i="");var l=t[2],f=t[3],p=t[4],m=t[5],h=t[6],d=t[7],y="+"===h||"*"===h,w="?"===h||"*"===h,v=l||"/",b=p||m||(d?".*":"[^"+v+"]+?");a.push({name:f||n++,prefix:l||"",delimiter:v,optional:w,repeat:y,pattern:o(b)})}}return r1)for(var a=1;a1&&(n=a[0]+"@",e=a[1]),e=e.replace(I,".");var r=e.split("."),i=s(r,t).join(".");return n+i}function u(e){for(var t,a,n=[],r=0,i=e.length;i>r;)t=e.charCodeAt(r++),t>=55296&&56319>=t&&i>r?(a=e.charCodeAt(r++),56320==(64512&a)?n.push(((1023&t)<<10)+(1023&a)+65536):(n.push(t),r--)):n.push(t);return n}function c(e){return s(e,function(e){var t="";return e>65535&&(e-=65536,t+=B(e>>>10&1023|55296),e=56320|1023&e),t+=B(e)}).join("")}function l(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:D}function f(e,t){return e+22+75*(26>e)-((0!=t)<<5)}function p(e,t,a){var n=0;for(e=a?O(e/_):e>>1,e+=O(e/t);e>P*x>>1;n+=D)e=O(e/P);return O(n+(P+1)*e/(e+C))}function m(e){var t,a,n,r,s,o,u,f,m,h,d=[],g=e.length,y=0,w=z,v=S;for(a=e.lastIndexOf(F),0>a&&(a=0),n=0;a>n;++n)e.charCodeAt(n)>=128&&i("not-basic"),d.push(e.charCodeAt(n));for(r=a>0?a+1:0;g>r;){for(s=y,o=1,u=D;r>=g&&i("invalid-input"),f=l(e.charCodeAt(r++)),(f>=D||f>O((A-y)/o))&&i("overflow"),y+=f*o,m=v>=u?j:u>=v+x?x:u-v,!(m>f);u+=D)h=D-m,o>O(A/h)&&i("overflow"),o*=h;t=d.length+1,v=p(y-s,t,0==s),O(y/t)>A-w&&i("overflow"),w+=O(y/t),y%=t,d.splice(y++,0,w)}return c(d)}function h(e){var t,a,n,r,s,o,c,l,m,h,d,g,y,w,v,b=[];for(e=u(e),g=e.length,t=z,a=0,s=S,o=0;g>o;++o)d=e[o],128>d&&b.push(B(d));for(n=r=b.length,r&&b.push(F);g>n;){for(c=A,o=0;g>o;++o)d=e[o],d>=t&&c>d&&(c=d);for(y=n+1,c-t>O((A-a)/y)&&i("overflow"),a+=(c-t)*y,t=c,o=0;g>o;++o)if(d=e[o],t>d&&++a>A&&i("overflow"),d==t){for(l=a,m=D;h=s>=m?j:m>=s+x?x:m-s,!(h>l);m+=D)v=l-h,w=D-h,b.push(B(f(h+v%w,0))),l=O(v/w);b.push(B(f(l,0))),s=p(a,y,n==r),a=0,++n}++a,++t}return b.join("")}function d(e){return o(e,function(e){return k.test(e)?m(e.slice(4).toLowerCase()):e})}function g(e){return o(e,function(e){return R.test(e)?"xn--"+h(e):e})}var y="object"==typeof n&&n&&!n.nodeType&&n,w="object"==typeof a&&a&&!a.nodeType&&a,v="object"==typeof t&&t;(v.global===v||v.window===v||v.self===v)&&(r=v);var b,E,A=2147483647,D=36,j=1,x=26,C=38,_=700,S=72,z=128,F="-",k=/^xn--/,R=/[^\x20-\x7E]/,I=/[\x2E\u3002\uFF0E\uFF61]/g,M={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},P=D-j,O=Math.floor,B=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:u,encode:c},decode:m, +encode:h,toASCII:g,toUnicode:d},"function"==typeof e&&"object"==typeof e.amd&&e.amd)e("punycode",function(){return b});else if(y&&w)if(a.exports==y)w.exports=b;else for(E in b)b.hasOwnProperty(E)&&(y[E]=b[E]);else r.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],202:[function(e,t,a){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,a,i){t=t||"&",a=a||"=";var s={};if("string"!=typeof e||0===e.length)return s;var o=/\+/g;e=e.split(t);var u=1e3;i&&"number"==typeof i.maxKeys&&(u=i.maxKeys);var c=e.length;u>0&&c>u&&(c=u);for(var l=0;c>l;++l){var f,p,m,h,d=e[l].replace(o,"%20"),g=d.indexOf(a);g>=0?(f=d.substr(0,g),p=d.substr(g+1)):(f=d,p=""),m=decodeURIComponent(f),h=decodeURIComponent(p),n(s,m)?r(s[m])?s[m].push(h):s[m]=[s[m],h]:s[m]=h}return s};var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],203:[function(e,t,a){"use strict";function n(e,t){if(e.map)return e.map(t);for(var a=[],n=0;n=97&&122>=e?-32:e>=65&&90>=e?32:0)}function r(){return!this.randInt(0,1)}function i(e){return e instanceof c?e.index(this.randInt(0,e.length-1)):e[this.randInt(0,e.length-1)]}function s(e){if(e.type===u.types.CHAR)return new c(e.value);if(e.type===u.types.RANGE)return new c(e.from,e.to);if(e.type===u.types.SET){for(var t=new c,a=0;af;f++)u+=o.call(this,a[f],t);return e.remember&&(t[e.groupNumber]=u),u;case l.POSITION:return"";case l.SET:var m=s.call(this,e);return m.length?String.fromCharCode(i.call(this,m)):"";case l.REPETITION:for(c=this.randInt(e.min,e.max===1/0?e.min+this.max:e.max),u="",f=0;c>f;f++)u+=o.call(this,e.value,t);return u;case l.REFERENCE:return t[e.value-1]||"";case l.CHAR:var h=this.ignoreCase&&r.call(this)?n(e.value):e.value;return String.fromCharCode(h)}}var u=e("ret"),c=e("discontinuous-range"),l=u.types,f=t.exports=function(e,t){if(this.defaultRange=this.defaultRange.clone(),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,"number"==typeof e.max&&(this.max=e.max),e=e.source;else{if("string"!=typeof e)throw new Error("Expected a regexp or string");this.ignoreCase=t&&-1!==t.indexOf("i"),this.multiline=t&&-1!==t.indexOf("m")}this.tokens=u(e)};f.prototype.max=100,f.prototype.gen=function(){return o.call(this,this.tokens,[])},f.randexp=function(e,t){var a;return void 0===e._randexp?(a=new f(e,t),e._randexp=a):(a=e._randexp,"number"==typeof e.max&&(a.max=e.max),e.defaultRange instanceof c&&(a.defaultRange=e.defaultRange),"function"==typeof e.randInt&&(a.randInt=e.randInt)),a.gen()},f.sugar=function(){RegExp.prototype.gen=function(){return f.randexp(this)}},f.prototype.defaultRange=new c(32,126),f.prototype.randInt=function(e,t){return e+Math.floor(Math.random()*(1+t-e))}},{"discontinuous-range":29,ret:207}],206:[function(e,t,a){t.exports=function(e,t,a){for(var n=0,r=e.length,i=3==arguments.length?a:e[n++];r>n;)i=t.call(null,i,e[n],++n,e);return i}},{}],207:[function(e,t,a){var n=e("./util"),r=e("./types"),i=e("./sets"),s=e("./positions");t.exports=function(e){var t,a,o=0,u={type:r.ROOT,stack:[]},c=u,l=u.stack,f=[],p=function(t){n.error(e,"Nothing to repeat at column "+(t-1))},m=n.strToChars(e);for(t=m.length;t>o;)switch(a=m[o++]){case"\\":switch(a=m[o++]){case"b":l.push(s.wordBoundary());break;case"B":l.push(s.nonWordBoundary());break;case"w":l.push(i.words());break;case"W":l.push(i.notWords());break;case"d":l.push(i.ints());break;case"D":l.push(i.notInts());break;case"s":l.push(i.whitespace());break;case"S":l.push(i.notWhitespace());break;default:/\d/.test(a)?l.push({type:r.REFERENCE,value:parseInt(a,10)}):l.push({type:r.CHAR,value:a.charCodeAt(0)})}break;case"^":l.push(s.begin());break;case"$":l.push(s.end());break;case"[":var h;"^"===m[o]?(h=!0,o++):h=!1;var d=n.tokenizeClass(m.slice(o),e);o+=d[1],l.push({type:r.SET,set:d[0],not:h});break;case".":l.push(i.anyChar());break;case"(":var g={type:r.GROUP,stack:[],remember:!0};a=m[o],"?"===a&&(a=m[o+1],o+=2,"="===a?g.followedBy=!0:"!"===a?g.notFollowedBy=!0:":"!==a&&n.error(e,"Invalid group, character '"+a+"' after '?' at column "+(o-1)),g.remember=!1),l.push(g),f.push(c),c=g,l=g.stack;break;case")":0===f.length&&n.error(e,"Unmatched ) at column "+(o-1)),c=f.pop(),l=c.options?c.options[c.options.length-1]:c.stack;break;case"|":c.options||(c.options=[c.stack],delete c.stack);var y=[];c.options.push(y),l=y;break;case"{":var w,v,b=/^(\d+)(,(\d+)?)?\}/.exec(m.slice(o));null!==b?(w=parseInt(b[1],10),v=b[2]?b[3]?parseInt(b[3],10):1/0:w,o+=b[0].length,l.push({type:r.REPETITION,min:w,max:v,value:l.pop()})):l.push({type:r.CHAR,value:123});break;case"?":0===l.length&&p(o),l.push({type:r.REPETITION,min:0,max:1,value:l.pop()});break;case"+":0===l.length&&p(o),l.push({type:r.REPETITION,min:1,max:1/0,value:l.pop()});break;case"*":0===l.length&&p(o),l.push({type:r.REPETITION,min:0,max:1/0,value:l.pop()});break;default:l.push({type:r.CHAR,value:a.charCodeAt(0)})}return 0!==f.length&&n.error(e,"Unterminated group"),u},t.exports.types=r},{"./positions":208,"./sets":209,"./types":210,"./util":211}],208:[function(e,t,a){var n=e("./types");a.wordBoundary=function(){return{type:n.POSITION,value:"b"}},a.nonWordBoundary=function(){return{type:n.POSITION,value:"B"}},a.begin=function(){return{type:n.POSITION,value:"^"}},a.end=function(){return{type:n.POSITION,value:"$"}}},{"./types":210}],209:[function(e,t,a){var n=e("./types"),r=function(){return[{type:n.RANGE,from:48,to:57}]},i=function(){return[{type:n.CHAR,value:95},{type:n.RANGE,from:97,to:122},{type:n.RANGE,from:65,to:90}].concat(r())},s=function(){return[{type:n.CHAR,value:9},{type:n.CHAR,value:10},{type:n.CHAR,value:11},{type:n.CHAR,value:12},{type:n.CHAR,value:13},{type:n.CHAR,value:32},{type:n.CHAR,value:160},{type:n.CHAR,value:5760},{type:n.CHAR,value:6158},{type:n.CHAR,value:8192},{type:n.CHAR,value:8193},{type:n.CHAR,value:8194},{type:n.CHAR,value:8195},{type:n.CHAR,value:8196},{type:n.CHAR,value:8197},{type:n.CHAR,value:8198},{type:n.CHAR,value:8199},{type:n.CHAR,value:8200},{type:n.CHAR,value:8201},{type:n.CHAR,value:8202},{type:n.CHAR,value:8232},{type:n.CHAR,value:8233},{type:n.CHAR,value:8239},{type:n.CHAR,value:8287},{type:n.CHAR,value:12288},{type:n.CHAR,value:65279}]},o=function(){return[{type:n.CHAR,value:10},{type:n.CHAR,value:13},{type:n.CHAR,value:8232},{type:n.CHAR,value:8233}]};a.words=function(){return{type:n.SET,set:i(),not:!1}},a.notWords=function(){return{type:n.SET,set:i(),not:!0}},a.ints=function(){return{type:n.SET,set:r(),not:!1}},a.notInts=function(){return{type:n.SET,set:r(),not:!0}},a.whitespace=function(){return{type:n.SET,set:s(),not:!1}},a.notWhitespace=function(){return{type:n.SET,set:s(),not:!0}},a.anyChar=function(){return{type:n.SET,set:o(),not:!0}}},{"./types":210}],210:[function(e,t,a){t.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},{}],211:[function(e,t,a){var n=e("./types"),r=e("./sets"),i="@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?",s={0:0,t:9,n:10,v:11,f:12,r:13};a.strToChars=function(e){var t=/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z\[\\\]\^?])|([0tnvfr]))/g;return e=e.replace(t,function(e,t,a,n,r,o,u,c){if(a)return e;var l=t?8:n?parseInt(n,16):r?parseInt(r,16):o?parseInt(o,8):u?i.indexOf(u):c?s[c]:void 0,f=String.fromCharCode(l);return/[\[\]{}\^$.|?*+()]/.test(f)&&(f="\\"+f),f})},a.tokenizeClass=function(e,t){for(var i,s,o=[],u=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g;null!=(i=u.exec(e));)if(i[1])o.push(r.words());else if(i[2])o.push(r.ints());else if(i[3])o.push(r.whitespace());else if(i[4])o.push(r.notWords());else if(i[5])o.push(r.notInts());else if(i[6])o.push(r.notWhitespace());else if(i[7])o.push({type:n.RANGE,from:(i[8]||i[9]).charCodeAt(0),to:i[10].charCodeAt(0)});else{if(!(s=i[12]))return[o,u.lastIndex];o.push({type:n.CHAR,value:s.charCodeAt(0)})}a.error(t,"Unterminated character class")},a.error=function(e,t){throw new SyntaxError("Invalid regular expression: /"+e+"/: "+t)}},{"./sets":209,"./types":210}],212:[function(e,t,a){"use strict";t.exports=function(e){var t=/^\\\\\?\\/.test(e),a=/[^\x00-\x80]+/.test(e);return t||a?e:e.replace(/\\/g,"/")}},{}],213:[function(e,t,a){function n(){}function r(e){var t={}.toString.call(e);switch(t){case"[object File]":case"[object Blob]":case"[object FormData]":return!0;default:return!1}}function i(e){return e===Object(e)}function s(e){if(!i(e))return e;var t=[];for(var a in e)null!=e[a]&&o(t,a,e[a]);return t.join("&")}function o(e,t,a){return Array.isArray(a)?a.forEach(function(a){o(e,t,a)}):void e.push(encodeURIComponent(t)+"="+encodeURIComponent(a))}function u(e){for(var t,a,n={},r=e.split("&"),i=0,s=r.length;s>i;++i)a=r[i],t=a.split("="),n[decodeURIComponent(t[0])]=decodeURIComponent(t[1]);return n}function c(e){var t,a,n,r,i=e.split(/\r?\n/),s={};i.pop();for(var o=0,u=i.length;u>o;++o)a=i[o],t=a.indexOf(":"),n=a.slice(0,t).toLowerCase(),r=b(a.slice(t+1)),s[n]=r;return s}function l(e){return/[\/+]json\b/.test(e)}function f(e){return e.split(/ *; */).shift()}function p(e){return v(e.split(/ *; */),function(e,t){var a=t.split(/ *= */),n=a.shift(),r=a.shift();return n&&r&&(e[n]=r),e},{})}function m(e,t){t=t||{},this.req=e,this.xhr=this.req.xhr,this.text="HEAD"!=this.req.method&&(""===this.xhr.responseType||"text"===this.xhr.responseType)||"undefined"==typeof this.xhr.responseType?this.xhr.responseText:null,this.statusText=this.req.xhr.statusText,this.setStatusProperties(this.xhr.status),this.header=this.headers=c(this.xhr.getAllResponseHeaders()),this.header["content-type"]=this.xhr.getResponseHeader("content-type"),this.setHeaderProperties(this.header),this.body="HEAD"!=this.req.method?this.parseBody(this.text?this.text:this.xhr.response):null}function h(e,t){var a=this;w.call(this),this._query=this._query||[],this.method=e,this.url=t,this.header={},this._header={},this.on("end",function(){var e=null,t=null;try{t=new m(a)}catch(n){return e=new Error("Parser is unable to parse the response"),e.parse=!0,e.original=n,e.rawResponse=a.xhr&&a.xhr.responseText?a.xhr.responseText:null,a.callback(e)}if(a.emit("response",t),e)return a.callback(e,t);if(t.status>=200&&t.status<300)return a.callback(e,t);var r=new Error(t.statusText||"Unsuccessful HTTP response");r.original=e,r.response=t,r.status=t.status,a.callback(r,t)})}function d(e,t){return"function"==typeof t?new h("GET",e).end(t):1==arguments.length?new h("GET",e):new h(e,t)}function g(e,t){var a=d("DELETE",e);return t&&a.end(t),a}var y,w=e("emitter"),v=e("reduce");y="undefined"!=typeof window?window:"undefined"!=typeof self?self:this,d.getXHR=function(){if(!(!y.XMLHttpRequest||y.location&&"file:"==y.location.protocol&&y.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}return!1};var b="".trim?function(e){return e.trim()}:function(e){return e.replace(/(^\s*|\s*$)/g,"")};d.serializeObject=s,d.parseString=u,d.types={html:"text/html",json:"application/json",xml:"application/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},d.serialize={"application/x-www-form-urlencoded":s,"application/json":JSON.stringify},d.parse={"application/x-www-form-urlencoded":u,"application/json":JSON.parse},m.prototype.get=function(e){return this.header[e.toLowerCase()]},m.prototype.setHeaderProperties=function(e){var t=this.header["content-type"]||"";this.type=f(t);var a=p(t);for(var n in a)this[n]=a[n]},m.prototype.parseBody=function(e){var t=d.parse[this.type];return t&&e&&(e.length||e instanceof Object)?t(e):null},m.prototype.setStatusProperties=function(e){1223===e&&(e=204);var t=e/100|0;this.status=this.statusCode=e,this.statusType=t,this.info=1==t,this.ok=2==t,this.clientError=4==t,this.serverError=5==t,this.error=4==t||5==t?this.toError():!1,this.accepted=202==e,this.noContent=204==e,this.badRequest=400==e,this.unauthorized=401==e,this.notAcceptable=406==e,this.notFound=404==e,this.forbidden=403==e},m.prototype.toError=function(){var e=this.req,t=e.method,a=e.url,n="cannot "+t+" "+a+" ("+this.status+")",r=new Error(n);return r.status=this.status,r.method=t,r.url=a,r},d.Response=m,w(h.prototype),h.prototype.use=function(e){return e(this),this},h.prototype.timeout=function(e){return this._timeout=e,this},h.prototype.clearTimeout=function(){return this._timeout=0,clearTimeout(this._timer),this},h.prototype.abort=function(){return this.aborted?void 0:(this.aborted=!0,this.xhr.abort(),this.clearTimeout(),this.emit("abort"),this)},h.prototype.set=function(e,t){if(i(e)){for(var a in e)this.set(a,e[a]);return this}return this._header[e.toLowerCase()]=t,this.header[e]=t,this},h.prototype.unset=function(e){return delete this._header[e.toLowerCase()],delete this.header[e],this},h.prototype.getHeader=function(e){return this._header[e.toLowerCase()]},h.prototype.type=function(e){return this.set("Content-Type",d.types[e]||e),this},h.prototype.parse=function(e){return this._parser=e,this},h.prototype.accept=function(e){return this.set("Accept",d.types[e]||e),this},h.prototype.auth=function(e,t){var a=btoa(e+":"+t);return this.set("Authorization","Basic "+a),this},h.prototype.query=function(e){return"string"!=typeof e&&(e=s(e)),e&&this._query.push(e),this},h.prototype.field=function(e,t){return this._formData||(this._formData=new y.FormData),this._formData.append(e,t),this},h.prototype.attach=function(e,t,a){return this._formData||(this._formData=new y.FormData),this._formData.append(e,t,a),this},h.prototype.send=function(e){var t=i(e),a=this.getHeader("Content-Type");if(t&&i(this._data))for(var n in e)this._data[n]=e[n];else"string"==typeof e?(a||this.type("form"),a=this.getHeader("Content-Type"),"application/x-www-form-urlencoded"==a?this._data=this._data?this._data+"&"+e:e:this._data=(this._data||"")+e):this._data=e;return!t||r(e)?this:(a||this.type("json"),this)},h.prototype.callback=function(e,t){var a=this._callback;this.clearTimeout(),a(e,t)},h.prototype.crossDomainError=function(){var e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},h.prototype.timeoutError=function(){var e=this._timeout,t=new Error("timeout of "+e+"ms exceeded");t.timeout=e,this.callback(t)},h.prototype.withCredentials=function(){return this._withCredentials=!0,this},h.prototype.end=function(e){var t=this,a=this.xhr=d.getXHR(),i=this._query.join("&"),s=this._timeout,o=this._formData||this._data;this._callback=e||n,a.onreadystatechange=function(){if(4==a.readyState){var e;try{e=a.status}catch(n){e=0}if(0==e){if(t.timedout)return t.timeoutError();if(t.aborted)return;return t.crossDomainError()}t.emit("end")}};var u=function(e){e.total>0&&(e.percent=e.loaded/e.total*100),t.emit("progress",e)};this.hasListeners("progress")&&(a.onprogress=u);try{a.upload&&this.hasListeners("progress")&&(a.upload.onprogress=u)}catch(c){}if(s&&!this._timer&&(this._timer=setTimeout(function(){t.timedout=!0,t.abort()},s)),i&&(i=d.serializeObject(i),this.url+=~this.url.indexOf("?")?"&"+i:"?"+i),a.open(this.method,this.url,!0),this._withCredentials&&(a.withCredentials=!0),"GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof o&&!r(o)){var f=this.getHeader("Content-Type"),p=this._parser||d.serialize[f?f.split(";")[0]:""];!p&&l(f)&&(p=d.serialize["application/json"]),p&&(o=p(o))}for(var m in this.header)null!=this.header[m]&&a.setRequestHeader(m,this.header[m]);return this.emit("request",this),a.send("undefined"!=typeof o?o:null),this},h.prototype.then=function(e,t){return this.end(function(a,n){a?t(a):e(n)})},d.Request=h,d.get=function(e,t,a){var n=d("GET",e);return"function"==typeof t&&(a=t,t=null),t&&n.query(t),a&&n.end(a),n},d.head=function(e,t,a){var n=d("HEAD",e);return"function"==typeof t&&(a=t,t=null),t&&n.send(t),a&&n.end(a),n},d.del=g,d["delete"]=g,d.patch=function(e,t,a){var n=d("PATCH",e);return"function"==typeof t&&(a=t,t=null),t&&n.send(t),a&&n.end(a),n},d.post=function(e,t,a){var n=d("POST",e);return"function"==typeof t&&(a=t,t=null),t&&n.send(t),a&&n.end(a),n},d.put=function(e,t,a){var n=d("PUT",e);return"function"==typeof t&&(a=t,t=null),t&&n.send(t),a&&n.end(a),n},t.exports=d},{emitter:19,reduce:206}],214:[function(e,t,a){var n=function(){function e(e){throw new RangeError(x[e])}function t(e,t){for(var a=e.length,n=[];a--;)n[a]=t(e[a]);return n}function a(e,a){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(j,".");var i=e.split("."),s=t(i,a).join(".");return r+s}function n(e){for(var t,a,n=[],r=0,i=e.length;i>r;)t=e.charCodeAt(r++),t>=55296&&56319>=t&&i>r?(a=e.charCodeAt(r++),56320==(64512&a)?n.push(((1023&t)<<10)+(1023&a)+65536):(n.push(t),r--)):n.push(t);return n}function r(e){return t(e,function(e){var t="";return e>65535&&(e-=65536,t+=S(e>>>10&1023|55296),e=56320|1023&e),t+=S(e)}).join("")}function i(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:h}function s(e,t){return e+22+75*(26>e)-((0!=t)<<5)}function o(e,t,a){var n=0;for(e=a?_(e/w):e>>1,e+=_(e/t);e>C*g>>1;n+=h)e=_(e/C);return _(n+(C+1)*e/(e+y))}function u(t){var a,n,s,u,c,l,f,p,y,w,A=[],D=t.length,j=0,x=b,C=v;for(n=t.lastIndexOf(E),0>n&&(n=0),s=0;n>s;++s)t.charCodeAt(s)>=128&&e("not-basic"),A.push(t.charCodeAt(s));for(u=n>0?n+1:0;D>u;){for(c=j,l=1,f=h;u>=D&&e("invalid-input"),p=i(t.charCodeAt(u++)),(p>=h||p>_((m-j)/l))&&e("overflow"),j+=p*l,y=C>=f?d:f>=C+g?g:f-C,!(y>p);f+=h)w=h-y,l>_(m/w)&&e("overflow"),l*=w;a=A.length+1,C=o(j-c,a,0==c),_(j/a)>m-x&&e("overflow"),x+=_(j/a),j%=a,A.splice(j++,0,x)}return r(A)}function c(t){var a,r,i,u,c,l,f,p,y,w,A,D,j,x,C,z=[];for(t=n(t),D=t.length,a=b,r=0,c=v,l=0;D>l;++l)A=t[l],128>A&&z.push(S(A));for(i=u=z.length,u&&z.push(E);D>i;){for(f=m,l=0;D>l;++l)A=t[l],A>=a&&f>A&&(f=A);for(j=i+1,f-a>_((m-r)/j)&&e("overflow"),r+=(f-a)*j,a=f,l=0;D>l;++l)if(A=t[l],a>A&&++r>m&&e("overflow"),A==a){for(p=r,y=h;w=c>=y?d:y>=c+g?g:y-c,!(w>p);y+=h)C=p-w,x=h-w,z.push(S(s(w+C%x,0))),p=_(C/x);z.push(S(s(p,0))),c=o(r,j,i==u),r=0,++i}++r,++a}return z.join("")}function l(e){return a(e,function(e){return A.test(e)?u(e.slice(4).toLowerCase()):e})}function f(e){return a(e,function(e){return D.test(e)?"xn--"+c(e):e})}var p,m=2147483647,h=36,d=1,g=26,y=38,w=700,v=72,b=128,E="-",A=/^xn--/,D=/[^\x20-\x7E]/,j=/[\x2E\u3002\uFF0E\uFF61]/g,x={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},C=h-d,_=Math.floor,S=String.fromCharCode;return p={version:"1.3.2",ucs2:{decode:n,encode:r},decode:u,encode:c,toASCII:f,toUnicode:l}}();"undefined"==typeof COMPILED&&"undefined"!=typeof t&&(t.exports=n)},{}],215:[function(e,t,a){e("./schemes/http"),e("./schemes/urn"),e("./schemes/mailto")},{"./schemes/http":216,"./schemes/mailto":217,"./schemes/urn":218}],216:[function(e,t,a){if("undefined"==typeof COMPILED&&"undefined"==typeof n&&"function"==typeof e)var n=e("../uri");n.SCHEMES.http=n.SCHEMES.https={domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,t){return(e.port===("https"!==String(e.scheme).toLowerCase()?80:443)||""===e.port)&&(e.port=void 0),e.path||(e.path="/"),e}}},{"../uri":219}],217:[function(e,t,a){if("undefined"==typeof COMPILED&&"undefined"==typeof n&&"function"==typeof e)var n=e("../uri"),r=e("../punycode");!function(){function e(){for(var e=[],t=0;t1){e[0]=e[0].slice(0,-1);for(var a=e.length-1,n=1;a>n;++n)e[n]=e[n].slice(1,-1);return e[a]=e[a].slice(1),e.join("")}return e[0]}function t(e){return"(?:"+e+")"}function a(e){return e.toUpperCase()}function i(e){var t=n.pctDecChars(e);return t.match(k)?t:e}function s(e){return void 0!==e&&null!==e?e instanceof Array&&!e.callee?e:"number"!=typeof e.length||e.split||e.setInterval||e.call?[e]:Array.prototype.slice.call(e):[]}var o={},u=n.IRI_SUPPORT,c="[A-Za-z0-9\\-\\.\\_\\~"+(u?"\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF":"")+"]",l="[0-9A-Fa-f]",f=t(t("%[EFef]"+l+"%"+l+l+"%"+l+l)+"|"+t("%[89A-Fa-f]"+l+"%"+l+l)+"|"+t("%"+l+l)),p="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",m="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",h=e(m,'[\\"\\\\]'),d=t(p+"+"+t("\\."+p+"+")+"*"),g=t("\\\\"+h),y=t(m+"|"+g),w=t('\\"'+y+'*\\"'),v="[\\x21-\\x5A\\x5E-\\x7E]",b="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",E=t(c+"|"+f+"|"+b),A=t(d+"|\\["+v+"*\\]"),D=t(d+"|"+w),j=t(D+"\\@"+A),x=t(j+t("\\,"+j)+"*"),C=t(E+"*"),_=C,S=t(C+"\\="+_),z=t(S+t("\\&"+S)+"*"),F=t("\\?"+z),k=(n.VALIDATE_SUPPORT&&new RegExp("^mailto\\:"+x+"?"+F+"?$"),new RegExp(c,"g")),R=new RegExp(f,"g"),I=new RegExp(e("[^]",p,"[\\.]",'[\\"]',h),"g"),M=new RegExp(e("[^]",p,"[\\.]","[\\[]",v,"[\\]]"),"g"),P=new RegExp(e("[^]",c,b),"g"),O=P,B=n.VALIDATE_SUPPORT&&new RegExp("^"+x+"$"),T=n.VALIDATE_SUPPORT&&new RegExp("^"+z+"$");n.SCHEMES.mailto={parse:function(e,t){n.VALIDATE_SUPPORT&&!e.error&&(e.path&&!B.test(e.path)?e.error="Email address is not valid":e.query&&!T.test(e.query)&&(e.error="Header fields are invalid"));var a=e.to=e.path?e.path.split(","):[];if(e.path=void 0,e.query){for(var i=!1,s={},o=e.query.split("&"),u=0,c=o.length;c>u;++u){var l=o[u].split("=");switch(l[0]){case"to":for(var f=l[1].split(","),p=0,m=f.length;m>p;++p)a.push(f[p]);break;case"subject":e.subject=n.unescapeComponent(l[1],t);break;case"body":e.body=n.unescapeComponent(l[1],t);break;default:i=!0,s[n.unescapeComponent(l[0],t)]=n.unescapeComponent(l[1],t)}}i&&(e.headers=s)}e.query=void 0;for(var u=0,c=a.length;c>u;++u){var h=a[u].split("@");if(h[0]=n.unescapeComponent(h[0]),"undefined"==typeof r||t.unicodeSupport)h[1]=n.unescapeComponent(h[1],t).toLowerCase();else try{h[1]=r.toASCII(n.unescapeComponent(h[1],t).toLowerCase())}catch(d){e.error=e.error||"Email address's domain name can not be converted to ASCII via punycode: "+d}a[u]=h.join("@")}return e},serialize:function(e,t){var u=s(e.to);if(u){for(var c=0,l=u.length;l>c;++c){var f=String(u[c]),p=f.lastIndexOf("@"),m=f.slice(0,p),h=f.slice(p+1);if(m=m.replace(R,i).replace(R,a).replace(I,n.pctEncChar),"undefined"!=typeof r)try{h=t.iri?r.toUnicode(h):r.toASCII(n.unescapeComponent(h,t).toLowerCase())}catch(d){e.error=e.error||"Email address's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+d}else h=h.replace(R,i).toLowerCase().replace(R,a).replace(M,n.pctEncChar);u[c]=m+"@"+h}e.path=u.join(",")}var g=e.headers=e.headers||{};e.subject&&(g.subject=e.subject),e.body&&(g.body=e.body);var y=[];for(var w in g)g[w]!==o[w]&&y.push(w.replace(R,i).replace(R,a).replace(P,n.pctEncChar)+"="+g[w].replace(R,i).replace(R,a).replace(O,n.pctEncChar));return y.length&&(e.query=y.join("&")),e}}}()},{"../punycode":214,"../uri":219}],218:[function(e,t,a){if("undefined"==typeof COMPILED&&"undefined"==typeof n&&"function"==typeof e)var n=e("../uri");!function(){var e=n.pctEncChar,t="(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})",a="(?:\\%[0-9A-Fa-f]{2})",r="[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]",i="(?:(?:"+a+"|"+r+")+)",s=new RegExp("^urn\\:("+t+")$"),o=new RegExp("^("+t+")\\:("+i+")$"),u=/^([^\:]+)\:(.*)/,c=/[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g,l=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/;n.SCHEMES.urn={parse:function(e,t){var a,r,i=e.path.match(o);return i||(t.tolerant||(e.error=e.error||"URN is not strictly valid."),i=e.path.match(u)),i?(a="urn:"+i[1].toLowerCase(),r=n.SCHEMES[a],r||(r=n.SCHEMES[a]={parse:function(e,t){return e},serialize:n.SCHEMES.urn.serialize}),e.scheme=a,e.path=i[2],e=r.parse(e,t)):e.error=e.error||"URN can not be parsed.",e},serialize:function(t,a){var n,r=t.scheme||a.scheme;if(r&&"urn"!==r){var n=r.match(s);n||(n=["urn:"+r,r]),t.scheme="urn",t.path=n[1]+":"+(t.path?t.path.replace(c,e):"")}return t}},n.SCHEMES["urn:uuid"]={parse:function(e,t){return t.tolerant||e.path&&e.path.match(l)||(e.error=e.error||"UUID is not valid."),e},serialize:function(e,t){return t.tolerant||e.path&&e.path.match(l)?e.path=(e.path||"").toLowerCase():e.scheme=void 0,n.SCHEMES.urn.serialize(e,t)}}}()},{"../uri":219}],219:[function(e,t,a){var n=!1,r=!0,i=!0,s=function(){function e(){for(var e=[],t=0;t1){e[0]=e[0].slice(0,-1);for(var a=e.length-1,n=1;a>n;++n)e[n]=e[n].slice(1,-1);return e[a]=e[a].slice(1),e.join("")}return e[0]}function t(e){return"(?:"+e+")"}function a(a){var n="[A-Za-z]",r="[0-9]",s=e(r,"[A-Fa-f]"),o=t(t("%[EFef]"+s+"%"+s+s+"%"+s+s)+"|"+t("%[89A-Fa-f]"+s+"%"+s+s)+"|"+t("%"+s+s)),u="[\\:\\/\\?\\#\\[\\]\\@]",c="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",l=e(u,c),f=a?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",p=a?"[\\uE000-\\uF8FF]":"[]",m=e(n,r,"[\\-\\.\\_\\~]",f),h=t(n+e(n,r,"[\\+\\-\\.]")+"*"),d=t(t(o+"|"+e(m,c,"[\\:]"))+"*"),g=t(t("25[0-5]")+"|"+t("2[0-4]"+r)+"|"+t("1"+r+r)+"|"+t("[1-9]"+r)+"|"+r),y=t(g+"\\."+g+"\\."+g+"\\."+g),w=t(s+"{1,4}"),v=(t(t(w+"\\:"+w)+"|"+y),t(e(m,c,"[\\:]")+"+")),b=t("v"+s+"+\\."+e(m,c,"[\\:]")+"+"),E=t("\\["+t(v+"|"+b)+"\\]"),A=t(t(o+"|"+e(m,c))+"*"),D=t(E+"|"+y+"(?!"+A+")|"+A),j=t(r+"*"),x=t(t(d+"@")+"?"+D+t("\\:"+j)+"?"),C=t(o+"|"+e(m,c,"[\\:\\@]")),_=t(C+"*"),S=t(C+"+"),z=t(t(o+"|"+e(m,c,"[\\@]"))+"+"),F=t(t("\\/"+_)+"*"),k=t("\\/"+t(S+F)+"?"),R=t(z+F),I=t(S+F),M="(?!"+C+")",P=(t(F+"|"+k+"|"+R+"|"+I+"|"+M),t(t(C+"|"+e("[\\/\\?]",p))+"*")),O=t(t(C+"|[\\/\\?]")+"*"),B=t(t("\\/\\/"+x+F)+"|"+k+"|"+I+"|"+M),T=t(h+"\\:"+B+t("\\?"+P)+"?"+t("\\#"+O)+"?"),L=t(t("\\/\\/"+x+F)+"|"+k+"|"+R+"|"+M),N=t(L+t("\\?"+P)+"?"+t("\\#"+O)+"?"),U=(t(T+"|"+N),t(h+"\\:"+B+t("\\?"+P)+"?"),"^("+h+")\\:"+t(t("\\/\\/("+t("("+d+")@")+"?("+D+")"+t("\\:("+j+")")+"?)")+"?("+F+"|"+k+"|"+I+"|"+M+")")+t("\\?("+P+")")+"?"+t("\\#("+O+")")+"?$"),K="^(){0}"+t(t("\\/\\/("+t("("+d+")@")+"?("+D+")"+t("\\:("+j+")")+"?)")+"?("+F+"|"+k+"|"+R+"|"+M+")")+t("\\?("+P+")")+"?"+t("\\#("+O+")")+"?$";"^("+h+")\\:"+t(t("\\/\\/("+t("("+d+")@")+"?("+D+")"+t("\\:("+j+")")+"?)")+"?("+F+"|"+k+"|"+I+"|"+M+")")+t("\\?("+P+")")+"?$","^"+t("\\#("+O+")")+"?$","^"+t("("+d+")@")+"?("+D+")"+t("\\:("+j+")")+"?$";return{URI_REF:i&&new RegExp("("+U+")|("+K+")"),NOT_SCHEME:new RegExp(e("[^]",n,r,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(e("[^\\%\\:]",m,c),"g"),NOT_HOST:new RegExp(e("[^\\%]",m,c),"g"),NOT_PATH:new RegExp(e("[^\\%\\/\\:\\@]",m,c),"g"),NOT_PATH_NOSCHEME:new RegExp(e("[^\\%\\/\\@]",m,c),"g"),NOT_QUERY:new RegExp(e("[^\\%]",m,c,"[\\:\\@\\/\\?]",p),"g"),NOT_FRAGMENT:new RegExp(e("[^\\%]",m,c,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(e("[^]",m,c),"g"),UNRESERVED:new RegExp(m,"g"),OTHER_CHARS:new RegExp(e("[^\\%]",m,l),"g"),PCT_ENCODED:new RegExp(o,"g")}}function n(e){var t,a=e.charCodeAt(0);return t=16>a?"%0"+a.toString(16).toUpperCase():128>a?"%"+a.toString(16).toUpperCase():2048>a?"%"+(a>>6|192).toString(16).toUpperCase()+"%"+(63&a|128).toString(16).toUpperCase():"%"+(a>>12|224).toString(16).toUpperCase()+"%"+(a>>6&63|128).toString(16).toUpperCase()+"%"+(63&a|128).toString(16).toUpperCase()}function s(e){for(var t,a,n,r="",i=0,s=e.length;s>i;)t=parseInt(e.substr(i+1,2),16),128>t?(r+=String.fromCharCode(t),i+=3):t>=194&&224>t?(s-i>=6?(a=parseInt(e.substr(i+4,2),16),r+=String.fromCharCode((31&t)<<6|63&a)):r+=e.substr(i,6),i+=6):t>=224?(s-i>=9?(a=parseInt(e.substr(i+4,2),16),n=parseInt(e.substr(i+7,2),16),r+=String.fromCharCode((15&t)<<12|(63&a)<<6|63&n)):r+=e.substr(i,9),i+=9):(r+=e.substr(i,3),i+=3);return r}function u(e){return void 0===e?"undefined":null===e?"null":Object.prototype.toString.call(e).split(" ").pop().split("]").shift().toLowerCase()}function c(e){return e.toUpperCase()}function l(e,t){function a(e){var a=s(e);return a.match(t.UNRESERVED)?a:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,a).toLowerCase().replace(t.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,a).replace(t.NOT_USERINFO,n).replace(t.PCT_ENCODED,c)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,a).toLowerCase().replace(t.NOT_HOST,n).replace(t.PCT_ENCODED,c)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,a).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,n).replace(t.PCT_ENCODED,c)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,a).replace(t.NOT_QUERY,n).replace(t.PCT_ENCODED,c)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,a).replace(t.NOT_FRAGMENT,n).replace(t.PCT_ENCODED,c)),e}function f(e,t){void 0===t&&(t={});var a,n,u=r&&t.iri!==!1?A:E,c=!1,f={};if("suffix"===t.reference&&(e=(t.scheme?t.scheme+":":"")+"//"+e),i?(a=e.match(u.URI_REF),a&&(a=a[1]?a.slice(1,10):a.slice(10,19)),a||(c=!0,t.tolerant||(f.error=f.error||"URI is not strictly valid."),a=e.match(D))):a=e.match(D),a){if(S?(f.scheme=a[1],f.userinfo=a[3],f.host=a[4],f.port=parseInt(a[5],10),f.path=a[6]||"",f.query=a[7],f.fragment=a[8],isNaN(f.port)&&(f.port=a[5])):(f.scheme=a[1]||void 0,f.userinfo=-1!==e.indexOf("@")?a[3]:void 0,f.host=-1!==e.indexOf("//")?a[4]:void 0,f.port=parseInt(a[5],10),f.path=a[6]||"",f.query=-1!==e.indexOf("?")?a[7]:void 0,f.fragment=-1!==e.indexOf("#")?a[8]:void 0,isNaN(f.port)&&(f.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?a[4]:void 0)),void 0!==f.scheme||void 0!==f.userinfo||void 0!==f.host||void 0!==f.port||f.path||void 0!==f.query?void 0===f.scheme?f.reference="relative":void 0===f.fragment?f.reference="absolute":f.reference="uri":f.reference="same-document",t.reference&&"suffix"!==t.reference&&t.reference!==f.reference&&(f.error=f.error||"URI is not a "+t.reference+" reference."),n=z[(t.scheme||f.scheme||"").toLowerCase()],!r||"undefined"==typeof o||t.unicodeSupport||n&&n.unicodeSupport)l(f,u);else{if(f.host&&(t.domainHost||n&&n.domainHost))try{f.host=o.toASCII(f.host.replace(u.PCT_ENCODED,s).toLowerCase())}catch(p){f.error=f.error||"Host's domain name can not be converted to ASCII via punycode: "+p}l(f,E)}n&&n.parse&&n.parse(f,t)}else c=!0,f.error=f.error||"URI can not be parsed.";return f}function p(e,t){var a=[];return void 0!==e.userinfo&&(a.push(e.userinfo),a.push("@")),void 0!==e.host&&a.push(e.host),"number"==typeof e.port&&(a.push(":"),a.push(e.port.toString(10))),a.length?a.join(""):void 0}function m(e){for(var t,a=[];e.length;)e.match(j)?e=e.replace(j,""):e.match(x)?e=e.replace(x,"/"):e.match(C)?(e=e.replace(C,"/"), +a.pop()):"."===e||".."===e?e="":(t=e.match(_)[0],e=e.slice(t.length),a.push(t));return a.join("")}function h(e,t){void 0===t&&(t={});var a,n,i,u=r&&t.iri?A:E,c=[];if(a=z[(t.scheme||e.scheme||"").toLowerCase()],a&&a.serialize&&a.serialize(e,t),r&&"undefined"!=typeof o&&e.host&&(t.domainHost||a&&a.domainHost))try{e.host=t.iri?o.toUnicode(e.host):o.toASCII(e.host.replace(u.PCT_ENCODED,s).toLowerCase())}catch(f){e.error=e.error||"Host's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+f}return l(e,u),"suffix"!==t.reference&&e.scheme&&(c.push(e.scheme),c.push(":")),n=p(e,t),void 0!==n&&("suffix"!==t.reference&&c.push("//"),c.push(n),e.path&&"/"!==e.path.charAt(0)&&c.push("/")),void 0!==e.path&&(i=e.path,t.absolutePath||a&&a.absolutePath||(i=m(i)),void 0===n&&(i=i.replace(/^\/\//,"/%2F")),c.push(i)),void 0!==e.query&&(c.push("?"),c.push(e.query)),void 0!==e.fragment&&(c.push("#"),c.push(e.fragment)),c.join("")}function d(e,t,a,n){void 0===a&&(a={});var r={};return n||(e=f(h(e,a),a),t=f(h(t,a),a)),a=a||{},!a.tolerant&&t.scheme?(r.scheme=t.scheme,r.userinfo=t.userinfo,r.host=t.host,r.port=t.port,r.path=m(t.path),r.query=t.query):(void 0!==t.userinfo||void 0!==t.host||void 0!==t.port?(r.userinfo=t.userinfo,r.host=t.host,r.port=t.port,r.path=m(t.path),r.query=t.query):(t.path?("/"===t.path.charAt(0)?r.path=m(t.path):(void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?r.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path:r.path=t.path:r.path="/"+t.path,r.path=m(r.path)),r.query=t.query):(r.path=e.path,void 0!==t.query?r.query=t.query:r.query=e.query),r.userinfo=e.userinfo,r.host=e.host,r.port=e.port),r.scheme=e.scheme),r.fragment=t.fragment,r}function g(e,t,a){return h(d(f(e,a),f(t,a),a,!0),a)}function y(e,t){return"string"==typeof e?e=h(f(e,t),t):"object"===u(e)&&(e=f(h(e,t),t)),e}function w(e,t,a){return"string"==typeof e?e=h(f(e,a),a):"object"===u(e)&&(e=h(e,a)),"string"==typeof t?t=h(f(t,a),a):"object"===u(t)&&(t=h(t,a)),e===t}function v(e,t){return e&&e.toString().replace(r&&t&&t.iri?A.ESCAPE:E.ESCAPE,n)}function b(e,t){return e&&e.toString().replace(r&&t&&t.iri?A.PCT_ENCODED:E.PCT_ENCODED,s)}var E=a(!1),A=r?a(!0):void 0,D=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?([^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n)*))?/i,j=/^\.\.?\//,x=/^\/\.(\/|$)/,C=/^\/\.\.(\/|$)/,_=/^\/?(?:.|\n)*?(?=\/|$)/,S=void 0==="".match(/(){0}/)[1],z={};return{IRI_SUPPORT:r,VALIDATE_SUPPORT:i,pctEncChar:n,pctDecChars:s,SCHEMES:z,parse:f,_recomposeAuthority:p,removeDotSegments:m,serialize:h,resolveComponents:d,resolve:g,normalize:y,equal:w,escapeComponent:v,unescapeComponent:b}}();if(!n&&"undefined"!=typeof t&&"function"==typeof e){var o=e("./punycode");t.exports=s,e("./schemes")}},{"./punycode":214,"./schemes":215}],220:[function(e,t,a){"use strict";function n(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function r(e,t,a){if(e&&c.isObject(e)&&e instanceof n)return e;var r=new n;return r.parse(e,t,a),r}function i(e){return c.isString(e)&&(e=r(e)),e instanceof n?e.format():n.prototype.format.call(e)}function s(e,t){return r(e,!1,!0).resolve(t)}function o(e,t){return e?r(e,!1,!0).resolveObject(t):t}var u=e("punycode"),c=e("./util");a.parse=r,a.resolve=s,a.resolveObject=o,a.format=i,a.Url=n;var l=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,m=["<",">",'"',"`"," ","\r","\n"," "],h=["{","}","|","\\","^","`"].concat(m),d=["'"].concat(h),g=["%","/","?",";","#"].concat(d),y=["/","?","#"],w=255,v=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},A={javascript:!0,"javascript:":!0},D={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},j=e("querystring");n.prototype.parse=function(e,t,a){if(!c.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e.indexOf("?"),r=-1!==n&&nS)&&(C=S)}var z,F;F=-1===C?o.lastIndexOf("@"):o.lastIndexOf("@",C),-1!==F&&(z=o.slice(0,F),o=o.slice(F+1),this.auth=decodeURIComponent(z)),C=-1;for(var _=0;_S)&&(C=S)}-1===C&&(C=o.length),this.host=o.slice(0,C),o=o.slice(C),this.parseHost(),this.hostname=this.hostname||"";var k="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!k)for(var R=this.hostname.split(/\./),_=0,I=R.length;I>_;_++){var M=R[_];if(M&&!M.match(v)){for(var P="",O=0,B=M.length;B>O;O++)P+=M.charCodeAt(O)>127?"x":M[O];if(!P.match(v)){var T=R.slice(0,_),L=R.slice(_+1),N=M.match(b);N&&(T.push(N[1]),L.unshift(N[2])),L.length&&(o="/"+L.join(".")+o),this.hostname=T.join(".");break}}}this.hostname.length>w?this.hostname="":this.hostname=this.hostname.toLowerCase(),k||(this.hostname=u.toASCII(this.hostname));var U=this.port?":"+this.port:"",K=this.hostname||"";this.host=K+U,this.href+=this.host,k&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!E[h])for(var _=0,I=d.length;I>_;_++){var $=d[_];if(-1!==o.indexOf($)){var H=encodeURIComponent($);H===$&&(H=escape($)),o=o.split($).join(H)}}var J=o.indexOf("#");-1!==J&&(this.hash=o.substr(J),o=o.slice(0,J));var G=o.indexOf("?");if(-1!==G?(this.search=o.substr(G),this.query=o.substr(G+1),t&&(this.query=j.parse(this.query)),o=o.slice(0,G)):t&&(this.search="",this.query={}),o&&(this.pathname=o),D[h]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",q=this.search||"";this.path=U+q}return this.href=this.format(),this},n.prototype.format=function(){var e=this.auth||"";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,":"),e+="@");var t=this.protocol||"",a=this.pathname||"",n=this.hash||"",r=!1,i="";this.host?r=e+this.host:this.hostname&&(r=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(r+=":"+this.port)),this.query&&c.isObject(this.query)&&Object.keys(this.query).length&&(i=j.stringify(this.query));var s=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||D[t])&&r!==!1?(r="//"+(r||""),a&&"/"!==a.charAt(0)&&(a="/"+a)):r||(r=""),n&&"#"!==n.charAt(0)&&(n="#"+n),s&&"?"!==s.charAt(0)&&(s="?"+s),a=a.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),s=s.replace("#","%23"),t+r+a+s+n},n.prototype.resolve=function(e){return this.resolveObject(r(e,!1,!0)).format()},n.prototype.resolveObject=function(e){if(c.isString(e)){var t=new n;t.parse(e,!1,!0),e=t}for(var a=new n,r=Object.keys(this),i=0;i0?a.host.split("@"):!1;x&&(a.auth=x.shift(),a.host=a.hostname=x.shift())}return a.search=e.search,a.query=e.query,c.isNull(a.pathname)&&c.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.href=a.format(),a}if(!E.length)return a.pathname=null,a.search?a.path="/"+a.search:a.path=null,a.href=a.format(),a;for(var C=E.slice(-1)[0],_=(a.host||e.host||E.length>1)&&("."===C||".."===C)||""===C,S=0,z=E.length;z>=0;z--)C=E[z],"."===C?E.splice(z,1):".."===C?(E.splice(z,1),S++):S&&(E.splice(z,1),S--);if(!v&&!b)for(;S--;S)E.unshift("..");!v||""===E[0]||E[0]&&"/"===E[0].charAt(0)||E.unshift(""),_&&"/"!==E.join("/").substr(-1)&&E.push("");var F=""===E[0]||E[0]&&"/"===E[0].charAt(0);if(j){a.hostname=a.host=F?"":E.length?E.shift():"";var x=a.host&&a.host.indexOf("@")>0?a.host.split("@"):!1;x&&(a.auth=x.shift(),a.host=a.hostname=x.shift())}return v=v||a.host&&E.length,v&&!F&&E.unshift(""),E.length?a.pathname=E.join("/"):(a.pathname=null,a.path=null),c.isNull(a.pathname)&&c.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.auth=e.auth||a.auth,a.slashes=a.slashes||e.slashes,a.href=a.format(),a},n.prototype.parseHost=function(){var e=this.host,t=f.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{"./util":221,punycode:201,querystring:204}],221:[function(e,t,a){"use strict";t.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],222:[function(t,a,n){!function(t,r){"undefined"!=typeof n&&"undefined"!=typeof a?a.exports=r():"function"==typeof e&&"object"==typeof e.amd?e(r):"function"==typeof e&&"object"==typeof e.petal?e(t,[],r):this[t]=r()}("validator",function(e){"use strict";function t(e){var t,a,n,r,i=e.match(R);if(i){if(t=i[21],!t)return null;if("z"===t||"Z"===t)return 0;a=i[22],-1!==t.indexOf(":")?(n=parseInt(i[23]),r=parseInt(i[24])):(n=0,r=parseInt(i[23]))}else{if(e=e.toLowerCase(),t=e.match(/(?:\s|gmt\s*)(-|\+)(\d{1,4})(\s|$)/),!t)return-1!==e.indexOf("gmt")?0:null;a=t[1];var s=t[2];3===s.length&&(s="0"+s),s.length<=2?(n=0,r=parseInt(s)):(n=parseInt(s.slice(0,2)),r=parseInt(s.slice(2,4)))}return(60*n+r)*("-"===a?1:-1)}function a(e,t){e=e||{};for(var a in t)"undefined"==typeof e[a]&&(e[a]=t[a]);return e}function n(e){var t="(\\"+e.symbol.replace(/\./g,"\\.")+")"+(e.require_symbol?"":"?"),a="-?",n="[1-9]\\d*",r="[1-9]\\d{0,2}(\\"+e.thousands_separator+"\\d{3})*",i=["0",n,r],s="("+i.join("|")+")?",o="(\\"+e.decimal_separator+"\\d{2})?",u=s+o;return e.allow_negatives&&!e.parens_for_negatives&&(e.negative_sign_after_digits?u+=a:e.negative_sign_before_digits&&(u=a+u)),e.allow_negative_sign_placeholder?u="( (?!\\-))?"+u:e.allow_space_after_symbol?u=" ?"+u:e.allow_space_after_digits&&(u+="( (?!$))?"),e.symbol_after_digits?u+=t:u=t+u,e.allow_negatives&&(e.parens_for_negatives?u="(\\("+u+"\\)|"+u+")":e.negative_sign_before_digits||e.negative_sign_after_digits||(u=a+u)),new RegExp("^(?!-? )(?=.*\\d)"+u+"$")}e={version:"4.5.0"};var r=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,i=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,s=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,o=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i,u=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i,c=/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,l=/^[A-Z]{2}[0-9A-Z]{9}[0-9]$/,f=/^(?:[0-9]{9}X|[0-9]{10})$/,p=/^(?:[0-9]{13})$/,m=/^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/,h=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,d=/^[0-9A-F]{1,4}$/i,g={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i},y=/^[A-Z]+$/i,w=/^[0-9A-Z]+$/i,v=/^[-+]?[0-9]+$/,b=/^(?:[-+]?(?:0|[1-9][0-9]*))$/,E=/^(?:[-+]?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/,A=/^[0-9A-F]+$/i,D=/^[-+]?([0-9]+|\.[0-9]+|[0-9]+\.[0-9]+)$/,j=/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i,x=/^[\x00-\x7F]+$/,C=/[^\x00-\x7F]/,_=/[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,S=/[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,z=/[\uD800-\uDBFF][\uDC00-\uDFFF]/,F=/^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i,k={"zh-CN":/^(\+?0?86\-?)?((13\d|14[57]|15[^4,\D]|17[678]|18\d)\d{8}|170[059]\d{7})$/,"zh-TW":/^(\+?886\-?|0)?9\d{8}$/,"en-ZA":/^(\+?27|0)\d{9}$/,"en-AU":/^(\+?61|0)4\d{8}$/,"en-HK":/^(\+?852\-?)?[569]\d{3}\-?\d{4}$/,"fr-FR":/^(\+?33|0)[67]\d{8}$/,"pt-PT":/^(\+351)?9[1236]\d{7}$/,"el-GR":/^(\+?30)?(69\d{8})$/,"en-GB":/^(\+?44|0)7\d{9}$/,"en-US":/^(\+?1)?[2-9]\d{2}[2-9](?!11)\d{6}$/,"en-ZM":/^(\+26)?09[567]\d{7}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/,"nb-NO":/^(\+?47)?[49]\d{7}$/,"nn-NO":/^(\+?47)?[49]\d{7}$/,"vi-VN":/^(0|\+?84)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$/,"en-NZ":/^(\+?64|0)2\d{7,9}$/,"en-IN":/^(\+?91|0)?[789]\d{9}$/},R=/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;e.extend=function(t,a){e[t]=function(){var t=Array.prototype.slice.call(arguments);return t[0]=e.toString(t[0]),a.apply(e,t)}},e.init=function(){for(var t in e)"function"==typeof e[t]&&"toString"!==t&&"toDate"!==t&&"extend"!==t&&"init"!==t&&e.extend(t,e[t])},e.toString=function(e){return"object"==typeof e&&null!==e&&e.toString?e=e.toString():(null===e||"undefined"==typeof e||isNaN(e)&&!e.length)&&(e=""),""+e},e.toDate=function(e){return"[object Date]"===Object.prototype.toString.call(e)?e:(e=Date.parse(e),isNaN(e)?null:new Date(e))},e.toFloat=function(e){return parseFloat(e)},e.toInt=function(e,t){return parseInt(e,t||10)},e.toBoolean=function(e,t){return t?"1"===e||"true"===e:"0"!==e&&"false"!==e&&""!==e},e.equals=function(t,a){return t===e.toString(a)},e.contains=function(t,a){return t.indexOf(e.toString(a))>=0},e.matches=function(e,t,a){return"[object RegExp]"!==Object.prototype.toString.call(t)&&(t=new RegExp(t,a)),t.test(e)};var I={allow_display_name:!1,allow_utf8_local_part:!0,require_tld:!0};e.isEmail=function(t,n){if(n=a(n,I),n.allow_display_name){var c=t.match(u);c&&(t=c[1])}var l=t.split("@"),f=l.pop(),p=l.join("@"),m=f.toLowerCase();if(("gmail.com"===m||"googlemail.com"===m)&&(p=p.replace(/\./g,"").toLowerCase()),!e.isByteLength(p,0,64)||!e.isByteLength(f,0,256))return!1;if(!e.isFQDN(f,{require_tld:n.require_tld}))return!1;if('"'===p[0])return p=p.slice(1,p.length-1),n.allow_utf8_local_part?o.test(p):i.test(p);for(var h=n.allow_utf8_local_part?s:r,d=p.split("."),g=0;g=2083||/\s/.test(t))return!1;if(0===t.indexOf("mailto:"))return!1;n=a(n,M);var r,i,s,o,u,c,l;if(l=t.split("://"),l.length>1){if(r=l.shift(),n.require_valid_protocol&&-1===n.protocols.indexOf(r))return!1}else{if(n.require_protocol)return!1;n.allow_protocol_relative_urls&&"//"===t.substr(0,2)&&(l[0]=t.substr(2))}return t=l.join("://"),l=t.split("#"),t=l.shift(),l=t.split("?"),t=l.shift(),l=t.split("/"),t=l.shift(),l=t.split("@"),l.length>1&&(i=l.shift(),i.indexOf(":")>=0&&i.split(":").length>2)?!1:(o=l.join("@"),l=o.split(":"),s=l.shift(),l.length&&(c=l.join(":"),u=parseInt(c,10),!/^[0-9]+$/.test(c)||0>=u||u>65535)?!1:e.isIP(s)||e.isFQDN(s,n)||"localhost"===s?n.host_whitelist&&-1===n.host_whitelist.indexOf(s)?!1:n.host_blacklist&&-1!==n.host_blacklist.indexOf(s)?!1:!0:!1)},e.isMACAddress=function(e){return m.test(e)},e.isIP=function(t,a){if(a=e.toString(a),!a)return e.isIP(t,4)||e.isIP(t,6);if("4"===a){if(!h.test(t))return!1;var n=t.split(".").sort(function(e,t){return e-t});return n[3]<=255}if("6"===a){var r=t.split(":"),i=!1,s=e.isIP(r[r.length-1],4),o=s?7:8;if(r.length>o)return!1;if("::"===t)return!0;"::"===t.substr(0,2)?(r.shift(),r.shift(),i=!0):"::"===t.substr(t.length-2)&&(r.pop(),r.pop(),i=!0);for(var u=0;u0&&u=1:r.length===o}return!1};var P={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1};e.isFQDN=function(e,t){t=a(t,P),t.allow_trailing_dot&&"."===e[e.length-1]&&(e=e.substring(0,e.length-1));var n=e.split(".");if(t.require_tld){var r=n.pop();if(!n.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(r))return!1}for(var i,s=0;s=0)return!1;i=i.replace(/_/g,"")}if(!/^[a-z\u00a1-\uffff0-9-]+$/i.test(i))return!1;if(/[\uff01-\uff5e]/.test(i))return!1;if("-"===i[0]||"-"===i[i.length-1])return!1;if(i.indexOf("---")>=0&&"xn--"!==i.slice(0,4))return!1}return!0},e.isBoolean=function(e){return["true","false","1","0"].indexOf(e)>=0},e.isAlpha=function(e){return y.test(e)},e.isAlphanumeric=function(e){return w.test(e)},e.isNumeric=function(e){return v.test(e)},e.isDecimal=function(e){return""!==e&&D.test(e)},e.isHexadecimal=function(e){return A.test(e)},e.isHexColor=function(e){return j.test(e)},e.isLowercase=function(e){return e===e.toLowerCase()},e.isUppercase=function(e){return e===e.toUpperCase()},e.isInt=function(e,t){return t=t||{},b.test(e)&&(!t.hasOwnProperty("min")||e>=t.min)&&(!t.hasOwnProperty("max")||e<=t.max)},e.isFloat=function(e,t){return t=t||{},""===e||"."===e?!1:E.test(e)&&(!t.hasOwnProperty("min")||e>=t.min)&&(!t.hasOwnProperty("max")||e<=t.max)},e.isDivisibleBy=function(t,a){return e.toFloat(t)%e.toInt(a)===0},e.isNull=function(e){return 0===e.length},e.isLength=function(e,t,a){var n=e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[],r=e.length-n.length;return r>=t&&("undefined"==typeof a||a>=r)},e.isByteLength=function(e,t,a){var n=encodeURI(e).split(/%..|./).length-1;return n>=t&&("undefined"==typeof a||a>=n)},e.isUUID=function(e,t){var a=g[t?t:"all"];return a&&a.test(e)},e.isDate=function(e){var a=new Date(Date.parse(e));if(isNaN(a))return!1;var n=t(e);if(null!==n){var r=a.getTimezoneOffset()-n;a=new Date(a.getTime()+6e4*r)}var i,s,o,u=String(a.getDate());return(s=e.match(/(^|[^:\d])[23]\d([^:\d]|$)/g))?(i=s.map(function(e){return e.match(/\d+/g)[0]}).join("/"),o=String(a.getFullYear()).slice(-2),i===u||i===o?!0:i===u+"/"+o||i===o+"/"+u?!0:!1):!0},e.isAfter=function(t,a){var n=e.toDate(a||new Date),r=e.toDate(t);return!!(r&&n&&r>n)},e.isBefore=function(t,a){var n=e.toDate(a||new Date),r=e.toDate(t);return!!(r&&n&&n>r)},e.isIn=function(t,a){var n;if("[object Array]"===Object.prototype.toString.call(a)){var r=[];for(n in a)r[n]=e.toString(a[n]);return r.indexOf(t)>=0}return"object"==typeof a?a.hasOwnProperty(t):a&&"function"==typeof a.indexOf?a.indexOf(t)>=0:!1},e.isWhitelisted=function(e,t){for(var a=e.length-1;a>=0;a--)if(-1===t.indexOf(e[a]))return!1;return!0},e.isCreditCard=function(e){var t=e.replace(/[^0-9]+/g,"");if(!c.test(t))return!1;for(var a,n,r,i=0,s=t.length-1;s>=0;s--)a=t.substring(s,s+1),n=parseInt(a,10),r?(n*=2,i+=n>=10?n%10+1:n):i+=n,r=!r;return!!(i%10===0?t:!1)},e.isISIN=function(e){if(!l.test(e))return!1;for(var t,a,n=e.replace(/[A-Z]/g,function(e){return parseInt(e,36)}),r=0,i=!0,s=n.length-2;s>=0;s--)t=n.substring(s,s+1),a=parseInt(t,10),i?(a*=2,r+=a>=10?a+1:a):r+=a,i=!i;return parseInt(e.substr(e.length-1),10)===(1e4-r)%10},e.isISBN=function(t,a){if(a=e.toString(a),!a)return e.isISBN(t,10)||e.isISBN(t,13);var n,r=t.replace(/[\s-]+/g,""),i=0;if("10"===a){if(!f.test(r))return!1;for(n=0;9>n;n++)i+=(n+1)*r.charAt(n);if(i+="X"===r.charAt(9)?100:10*r.charAt(9),i%11===0)return!!r}else if("13"===a){if(!p.test(r))return!1;var s=[1,3];for(n=0;12>n;n++)i+=s[n%2]*r.charAt(n);if(r.charAt(12)-(10-i%10)%10===0)return!!r}return!1},e.isMobilePhone=function(e,t){return t in k?k[t].test(e):!1};var O={symbol:"$",require_symbol:!1,allow_space_after_symbol:!1,symbol_after_digits:!1,allow_negatives:!0,parens_for_negatives:!1,negative_sign_before_digits:!1,negative_sign_after_digits:!1,allow_negative_sign_placeholder:!1,thousands_separator:",",decimal_separator:".",allow_space_after_digits:!1};e.isCurrency=function(e,t){return t=a(t,O),n(t).test(e)},e.isJSON=function(e){try{var t=JSON.parse(e);return!!t&&"object"==typeof t}catch(a){}return!1},e.isMultibyte=function(e){return C.test(e)},e.isAscii=function(e){return x.test(e)},e.isFullWidth=function(e){return _.test(e)},e.isHalfWidth=function(e){return S.test(e)},e.isVariableWidth=function(e){return _.test(e)&&S.test(e)},e.isSurrogatePair=function(e){return z.test(e)},e.isBase64=function(e){return F.test(e)},e.isMongoId=function(t){return e.isHexadecimal(t)&&24===t.length},e.isISO8601=function(e){return R.test(e)},e.ltrim=function(e,t){var a=t?new RegExp("^["+t+"]+","g"):/^\s+/g;return e.replace(a,"")},e.rtrim=function(e,t){var a=t?new RegExp("["+t+"]+$","g"):/\s+$/g;return e.replace(a,"")},e.trim=function(e,t){var a=t?new RegExp("^["+t+"]+|["+t+"]+$","g"):/^\s+|\s+$/g;return e.replace(a,"")},e.escape=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">").replace(/\//g,"/").replace(/\`/g,"`")},e.stripLow=function(t,a){var n=a?"\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F":"\\x00-\\x1F\\x7F";return e.blacklist(t,n)},e.whitelist=function(e,t){return e.replace(new RegExp("[^"+t+"]+","g"),"")},e.blacklist=function(e,t){return e.replace(new RegExp("["+t+"]+","g"),"")};var B={lowercase:!0,remove_dots:!0,remove_extension:!0};return e.normalizeEmail=function(t,n){if(n=a(n,B),!e.isEmail(t))return!1;var r=t.split("@",2);if(r[1]=r[1].toLowerCase(),"gmail.com"===r[1]||"googlemail.com"===r[1]){if(n.remove_extension&&(r[0]=r[0].split("+")[0]),n.remove_dots&&(r[0]=r[0].replace(/\./g,"")),!r[0].length)return!1;r[0]=r[0].toLowerCase(),r[1]="gmail.com"}else n.lowercase&&(r[0]=r[0].toLowerCase());return r.join("@")},e.init(),e})},{}],223:[function(e,t,a){"use strict";t.exports={INVALID_TYPE:"Expected type {0} but found type {1}",INVALID_FORMAT:"Object didn't pass validation for format {0}: {1}",ENUM_MISMATCH:"No enum match for: {0}",ANY_OF_MISSING:"Data does not match any schemas from 'anyOf'",ONE_OF_MISSING:"Data does not match any schemas from 'oneOf'",ONE_OF_MULTIPLE:"Data is valid against more than one schema from 'oneOf'",NOT_PASSED:"Data matches schema from 'not'",ARRAY_LENGTH_SHORT:"Array is too short ({0}), minimum {1}",ARRAY_LENGTH_LONG:"Array is too long ({0}), maximum {1}",ARRAY_UNIQUE:"Array items are not unique (indexes {0} and {1})",ARRAY_ADDITIONAL_ITEMS:"Additional items not allowed",MULTIPLE_OF:"Value {0} is not a multiple of {1}",MINIMUM:"Value {0} is less than minimum {1}",MINIMUM_EXCLUSIVE:"Value {0} is equal or less than exclusive minimum {1}",MAXIMUM:"Value {0} is greater than maximum {1}",MAXIMUM_EXCLUSIVE:"Value {0} is equal or greater than exclusive maximum {1}",OBJECT_PROPERTIES_MINIMUM:"Too few properties defined ({0}), minimum {1}",OBJECT_PROPERTIES_MAXIMUM:"Too many properties defined ({0}), maximum {1}",OBJECT_MISSING_REQUIRED_PROPERTY:"Missing required property: {0}",OBJECT_ADDITIONAL_PROPERTIES:"Additional properties not allowed: {0}",OBJECT_DEPENDENCY_KEY:"Dependency failed - key must exist: {0} (due to key: {1})",MIN_LENGTH:"String is too short ({0} chars), minimum {1}",MAX_LENGTH:"String is too long ({0} chars), maximum {1}",PATTERN:"String does not match pattern {0}: {1}",KEYWORD_TYPE_EXPECTED:"Keyword '{0}' is expected to be of type '{1}'",KEYWORD_UNDEFINED_STRICT:"Keyword '{0}' must be defined in strict mode",KEYWORD_UNEXPECTED:"Keyword '{0}' is not expected to appear in the schema",KEYWORD_MUST_BE:"Keyword '{0}' must be {1}",KEYWORD_DEPENDENCY:"Keyword '{0}' requires keyword '{1}'",KEYWORD_PATTERN:"Keyword '{0}' is not a valid RegExp pattern: {1}",KEYWORD_VALUE_TYPE:"Each element of keyword '{0}' array must be a '{1}'",UNKNOWN_FORMAT:"There is no validation function for format '{0}'",CUSTOM_MODE_FORCE_PROPERTIES:"{0} must define at least one property if present",REF_UNRESOLVED:"Reference has not been resolved during compilation: {0}",UNRESOLVABLE_REFERENCE:"Reference could not be resolved: {0}",SCHEMA_NOT_REACHABLE:"Validator was not able to read schema with uri: {0}",SCHEMA_TYPE_EXPECTED:"Schema is expected to be of type 'object'",SCHEMA_NOT_AN_OBJECT:"Schema is not an object: {0}",ASYNC_TIMEOUT:"{0} asynchronous task(s) have timed out after {1} ms",PARENT_SCHEMA_VALIDATION_FAILED:"Schema failed to validate against its parent schema, see inner errors for details.",REMOTE_NOT_VALID:"Remote reference didn't compile successfully: {0}"}},{}],224:[function(e,t,a){var n=e("validator"),r={date:function(e){if("string"!=typeof e)return!0;var t=/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/.exec(e);return null===t?!1:t[2]<"01"||t[2]>"12"||t[3]<"01"||t[3]>"31"?!1:!0},"date-time":function(e){if("string"!=typeof e)return!0;var t=e.toLowerCase().split("t");if(!r.date(t[0]))return!1;var a=/^([0-9]{2}):([0-9]{2}):([0-9]{2})(.[0-9]+)?(z|([+-][0-9]{2}:[0-9]{2}))$/.exec(t[1]);return null===a?!1:a[1]>"23"||a[2]>"59"||a[3]>"59"?!1:!0},email:function(e){return"string"!=typeof e?!0:n.isEmail(e,{require_tld:!0})},hostname:function(e){if("string"!=typeof e)return!0;var t=/^[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?(\.[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?)*$/.test(e);if(t){if(e.length>255)return!1;for(var a=e.split("."),n=0;n63)return!1}return t},"host-name":function(e){return r.hostname.call(this,e)},ipv4:function(e){return"string"!=typeof e?!0:n.isIP(e,4)},ipv6:function(e){return"string"!=typeof e?!0:n.isIP(e,6)},regex:function(e){try{return RegExp(e),!0}catch(t){return!1}},uri:function(e){return this.options.strictUris?r["strict-uri"].apply(this,arguments):"string"!=typeof e||RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?").test(e)},"strict-uri":function(e){return"string"!=typeof e||n.isURL(e)}};t.exports=r},{validator:222}],225:[function(e,t,a){"use strict";var n=e("./FormatValidators"),r=e("./Report"),i=e("./Utils"),s={multipleOf:function(e,t,a){"number"==typeof a&&"integer"!==i.whatIs(a/t.multipleOf)&&e.addError("MULTIPLE_OF",[a,t.multipleOf],null,t.description)},maximum:function(e,t,a){"number"==typeof a&&(t.exclusiveMaximum!==!0?a>t.maximum&&e.addError("MAXIMUM",[a,t.maximum],null,t.description):a>=t.maximum&&e.addError("MAXIMUM_EXCLUSIVE",[a,t.maximum],null,t.description))},exclusiveMaximum:function(){},minimum:function(e,t,a){"number"==typeof a&&(t.exclusiveMinimum!==!0?at.maxLength&&e.addError("MAX_LENGTH",[a.length,t.maxLength],null,t.description)},minLength:function(e,t,a){"string"==typeof a&&i.ucs2decode(a).lengtht.items.length&&e.addError("ARRAY_ADDITIONAL_ITEMS",null,null,t.description)},items:function(){},maxItems:function(e,t,a){Array.isArray(a)&&a.length>t.maxItems&&e.addError("ARRAY_LENGTH_LONG",[a.length,t.maxItems],null,t.description)},minItems:function(e,t,a){Array.isArray(a)&&a.lengtht.maxProperties&&e.addError("OBJECT_PROPERTIES_MAXIMUM",[n,t.maxProperties],null,t.description)}},minProperties:function(e,t,a){if("object"===i.whatIs(a)){var n=Object.keys(a).length;n0){var p=this.options.assumeAdditional.length;if(p)for(;p--;){var m=s.indexOf(this.options.assumeAdditional[p]);-1!==m&&s.splice(m,1)}s.length>0&&e.addError("OBJECT_ADDITIONAL_PROPERTIES",[s],null,t.description)}}}},dependencies:function(e,t,n){if("object"===i.whatIs(n))for(var r=Object.keys(t.dependencies),s=r.length;s--;){var o=r[s];if(n[o]){var u=t.dependencies[o];if("object"===i.whatIs(u))a.validate.call(this,e,u,n);else for(var c=u.length;c--;){var l=u[c];void 0===n[l]&&e.addError("OBJECT_DEPENDENCY_KEY",[l,o],null,t.description)}}}},"enum":function(e,t,a){for(var n=!1,r=t["enum"].length;r--;)if(i.areEqual(a,t["enum"][r])){n=!0;break}n===!1&&e.addError("ENUM_MISMATCH",[a],null,t.description)},allOf:function(e,t,n){for(var r=t.allOf.length;r--;){var i=a.validate.call(this,e,t.allOf[r],n);if(this.options.breakOnFirstError&&i===!1)break}},anyOf:function(e,t,n){for(var i=[],s=!1,o=t.anyOf.length;o--&&s===!1;){var u=new r(e);i.push(u),s=a.validate.call(this,u,t.anyOf[o],n)}s===!1&&e.addError("ANY_OF_MISSING",void 0,i,t.description)},oneOf:function(e,t,n){for(var i=0,s=[],o=t.oneOf.length;o--;){var u=new r(e,{maxErrors:1});s.push(u),a.validate.call(this,u,t.oneOf[o],n)===!0&&i++}0===i?e.addError("ONE_OF_MISSING",void 0,s,t.description):i>1&&e.addError("ONE_OF_MULTIPLE",null,null,t.description); +},not:function(e,t,n){var i=new r(e);a.validate.call(this,i,t.not,n)===!0&&e.addError("NOT_PASSED",null,null,t.description)},definitions:function(){},format:function(e,t,a){var r=n[t.format];"function"==typeof r?2===r.length?e.addAsyncTask(r,[a],function(n){n!==!0&&e.addError("INVALID_FORMAT",[t.format,a],null,t.description)}):r.call(this,a)!==!0&&e.addError("INVALID_FORMAT",[t.format,a],null,t.description):this.options.ignoreUnknownFormats!==!0&&e.addError("UNKNOWN_FORMAT",[t.format],null,t.description)}},o=function(e,t,n){var r=n.length;if(Array.isArray(t.items))for(;r--;)r0;){if(!t.__$refResolved){e.addError("REF_UNRESOLVED",[t.$ref],null,t.description);break}if(t.__$refResolved===t)break;t=t.__$refResolved,r=Object.keys(t),l--}if(0===l)throw new Error("Circular dependency by $ref references!")}var f=i.whatIs(a);if(t.type)if("string"==typeof t.type){if(f!==t.type&&("integer"!==f||"number"!==t.type)&&(e.addError("INVALID_TYPE",[t.type,f],null,t.description),this.options.breakOnFirstError))return!1}else if(-1===t.type.indexOf(f)&&("integer"!==f||-1===t.type.indexOf("number"))&&(e.addError("INVALID_TYPE",[t.type,f],null,t.description),this.options.breakOnFirstError))return!1;for(var p=r.length;p--&&!(s[r[p]]&&(s[r[p]].call(this,e,t,a),e.errors.length&&this.options.breakOnFirstError)););return(0===e.errors.length||this.options.breakOnFirstError===!1)&&("array"===f?o.call(this,e,t,a):"object"===f&&u.call(this,e,t,a)),c&&(e.rootSchema=void 0),0===e.errors.length}},{"./FormatValidators":224,"./Report":227,"./Utils":231}],226:[function(e,t,a){"function"!=typeof Number.isFinite&&(Number.isFinite=function(e){return"number"!=typeof e?!1:e!==e||e===1/0||e===-(1/0)?!1:!0})},{}],227:[function(e,t,a){(function(a){"use strict";function n(e,t){this.parentReport=e instanceof n?e:void 0,this.options=e instanceof n?e.options:e||{},this.reportOptions=t||{},this.errors=[],this.path=[],this.asyncTasks=[]}var r=e("lodash.get"),i=e("./Errors"),s=e("./Utils");n.prototype.isValid=function(){if(this.asyncTasks.length>0)throw new Error("Async tasks pending, can't answer isValid");return 0===this.errors.length},n.prototype.addAsyncTask=function(e,t,a){this.asyncTasks.push([e,t,a])},n.prototype.processAsyncTasks=function(e,t){function n(){a.nextTick(function(){var e=0===c.errors.length,a=e?void 0:c.errors;t(a,e)})}function r(e){return function(t){u||(e(t),0===--s&&n())}}var i=e||2e3,s=this.asyncTasks.length,o=s,u=!1,c=this;if(0===s||this.errors.length>0)return void n();for(;o--;){var l=this.asyncTasks[o];l[0].apply(null,l[1].concat(r(l[2])))}setTimeout(function(){s>0&&(u=!0,c.addError("ASYNC_TIMEOUT",[s,i]),t(c.errors,!1))},i)},n.prototype.getPath=function(){var e=[];return this.parentReport&&(e=e.concat(this.parentReport.path)),e=e.concat(this.path),this.options.reportPathAsArray!==!0&&(e="#/"+e.map(function(e){return s.isAbsoluteUri(e)?"uri("+e+")":e.replace(/\~/g,"~0").replace(/\//g,"~1")}).join("/")),e},n.prototype.getSchemaId=function(){if(!this.rootSchema)return null;var e=[];for(this.parentReport&&(e=e.concat(this.parentReport.path)),e=e.concat(this.path);e.length>0;){var t=r(this.rootSchema,e);if(t&&t.id)return t.id;e.pop()}return this.rootSchema.id},n.prototype.hasError=function(e,t){for(var a=this.errors.length;a--;)if(this.errors[a].code===e){for(var n=!0,r=this.errors[a].params.length;r--;)this.errors[a].params[r]!==t[r]&&(n=!1);if(n)return n}return!1},n.prototype.addError=function(e,t,a,n){if(!(this.errors.length>=this.reportOptions.maxErrors)){if(!e)throw new Error("No errorCode passed into addError()");if(!i[e])throw new Error("No errorMessage known for code "+e);t=t||[];for(var r=t.length,o=i[e];r--;){var u=s.whatIs(t[r]),c="object"===u||"null"===u?JSON.stringify(t[r]):t[r];o=o.replace("{"+r+"}",c)}var l={code:e,params:t,message:o,path:this.getPath(),schemaId:this.getSchemaId()};if(n&&(l.description=n),null!=a){for(Array.isArray(a)||(a=[a]),l.inner=[],r=a.length;r--;)for(var f=a[r],p=f.errors.length;p--;)l.inner.push(f.errors[p]);0===l.inner.length&&(l.inner=void 0)}this.errors.push(l)}},t.exports=n}).call(this,e("_process"))},{"./Errors":223,"./Utils":231,_process:200,"lodash.get":190}],228:[function(e,t,a){"use strict";function n(e){return decodeURIComponent(e).replace(/~[0-1]/g,function(e){return"~1"===e?"/":"~"})}function r(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function i(e){var t=e.indexOf("#"),a=-1===t?void 0:e.slice(t+1);return a}function s(e,t){if("object"==typeof e&&null!==e){if(!t)return e;if(e.id&&(e.id===t||"#"===e.id[0]&&e.id.substring(1)===t))return e;var a,n;if(Array.isArray(e)){for(a=e.length;a--;)if(n=s(e[a],t))return n}else{var r=Object.keys(e);for(a=r.length;a--;){var i=r[a];if(0!==i.indexOf("__$")&&(n=s(e[i],t)))return n}}}}var o=e("./Report"),u=e("./SchemaCompilation"),c=e("./SchemaValidation"),l=e("./Utils");a.cacheSchemaByUri=function(e,t){var a=r(e);a&&(this.cache[a]=t)},a.removeFromCacheByUri=function(e){var t=r(e);t&&delete this.cache[t]},a.checkCacheForUri=function(e){var t=r(e);return t?null!=this.cache[t]:!1},a.getSchema=function(e,t){return"object"==typeof t&&(t=a.getSchemaByReference.call(this,e,t)),"string"==typeof t&&(t=a.getSchemaByUri.call(this,e,t)),t},a.getSchemaByReference=function(e,t){for(var a=this.referenceCache.length;a--;)if(this.referenceCache[a][0]===t)return this.referenceCache[a][1];var n=l.cloneDeep(t);return this.referenceCache.push([t,n]),n},a.getSchemaByUri=function(e,t,a){var l=r(t),f=i(t),p=l?this.cache[l]:a;if(p&&l){var m=p!==a;if(m){e.path.push(l);var h=new o(e);u.compileSchema.call(this,h,p)&&c.validateSchema.call(this,h,p);var d=h.isValid();if(d||e.addError("REMOTE_NOT_VALID",[t],h),e.path.pop(),!d)return}}if(p&&f)for(var g=f.split("/"),y=0,w=g.length;p&&w>y;y++){var v=n(g[y]);p=0===y?s(p,v):p[v]}return p},a.getRemotePath=r},{"./Report":227,"./SchemaCompilation":229,"./SchemaValidation":230,"./Utils":231}],229:[function(e,t,a){"use strict";function n(e,t){if(u.isAbsoluteUri(t))return t;var a,n=e.join(""),r=u.isAbsoluteUri(n),i=u.isRelativeUri(n),s=u.isRelativeUri(t);r&&s?(a=n.match(/\/[^\/]*$/),a&&(n=n.slice(0,a.index+1))):i&&s?n="":(a=n.match(/[^#\/]+$/),a&&(n=n.slice(0,a.index)));var o=n+t;return o=o.replace(/##/,"#")}function r(e,t,a,i){if(t=t||[],a=a||[],i=i||[],"object"!=typeof e||null===e)return t;"string"==typeof e.id&&a.push(e.id),"string"==typeof e.$ref&&"undefined"==typeof e.__$refResolved&&t.push({ref:n(a,e.$ref),key:"$ref",obj:e,path:i.slice(0)}),"string"==typeof e.$schema&&"undefined"==typeof e.__$schemaResolved&&t.push({ref:n(a,e.$schema),key:"$schema",obj:e,path:i.slice(0)});var s;if(Array.isArray(e))for(s=e.length;s--;)i.push(s.toString()),r(e[s],t,a,i),i.pop();else{var o=Object.keys(e);for(s=o.length;s--;)0!==o[s].indexOf("__$")&&(i.push(o[s]),r(e[o[s]],t,a,i),i.pop())}return"string"==typeof e.id&&a.pop(),t}function i(e,t){for(var a=e.length;a--;)if(e[a].id===t)return e[a];return null}var s=e("./Report"),o=e("./SchemaCache"),u=e("./Utils"),c=function(e,t){for(var n=t.length,r=0;n--;){var i=new s(e),o=a.compileSchema.call(this,i,t[n]);o&&r++,e.errors=e.errors.concat(i.errors)}return r},l=function(e,t){var a,n=0;do{for(var r=e.errors.length;r--;)"UNRESOLVABLE_REFERENCE"===e.errors[r].code&&e.errors.splice(r,1);for(a=n,n=c.call(this,e,t),r=t.length;r--;){var s=t[r];if(s.__$missingReferences){for(var o=s.__$missingReferences.length;o--;){var u=s.__$missingReferences[o],l=i(t,u.ref);l&&(u.obj["__"+u.key+"Resolved"]=l,s.__$missingReferences.splice(o,1))}0===s.__$missingReferences.length&&delete s.__$missingReferences}}}while(n!==t.length&&n!==a);return e.isValid()};a.compileSchema=function(e,t){if(e.commonErrorMessage="SCHEMA_COMPILATION_FAILED","string"==typeof t){var n=o.getSchemaByUri.call(this,e,t);if(!n)return e.addError("SCHEMA_NOT_REACHABLE",[t]),!1;t=n}if(Array.isArray(t))return l.call(this,e,t);if(t.__$compiled&&t.id&&o.checkCacheForUri.call(this,t.id)===!1&&(t.__$compiled=void 0),t.__$compiled)return!0;t.id&&"string"==typeof t.id&&o.cacheSchemaByUri.call(this,t.id,t);var i=!1;e.rootSchema||(e.rootSchema=t,i=!0);var c=e.isValid();delete t.__$missingReferences;for(var f=r.call(this,t),p=f.length;p--;){var m=f[p],h=o.getSchemaByUri.call(this,e,m.ref,t);if(!h){var d=this.getSchemaReader();if(d){var g=d(m.ref);if(g){g.id=m.ref;var y=new s(e);a.compileSchema.call(this,y,g)?h=o.getSchemaByUri.call(this,e,m.ref,t):e.errors=e.errors.concat(y.errors)}}}if(!h){var w=e.hasError("REMOTE_NOT_VALID",[m.ref]),v=u.isAbsoluteUri(m.ref),b=!1,E=this.options.ignoreUnresolvableReferences===!0;v&&(b=o.checkCacheForUri.call(this,m.ref)),w||E&&v||b||(Array.prototype.push.apply(e.path,m.path),e.addError("UNRESOLVABLE_REFERENCE",[m.ref]),e.path=e.path.slice(0,-m.path.length),c&&(t.__$missingReferences=t.__$missingReferences||[],t.__$missingReferences.push(m)))}m.obj["__"+m.key+"Resolved"]=h}var A=e.isValid();return A?t.__$compiled=!0:t.id&&"string"==typeof t.id&&o.removeFromCacheByUri.call(this,t.id),i&&(e.rootSchema=void 0),A}},{"./Report":227,"./SchemaCache":228,"./Utils":231}],230:[function(e,t,a){"use strict";var n=e("./FormatValidators"),r=e("./JsonValidation"),i=e("./Report"),s=e("./Utils"),o={$ref:function(e,t){"string"!=typeof t.$ref&&e.addError("KEYWORD_TYPE_EXPECTED",["$ref","string"])},$schema:function(e,t){"string"!=typeof t.$schema&&e.addError("KEYWORD_TYPE_EXPECTED",["$schema","string"])},multipleOf:function(e,t){"number"!=typeof t.multipleOf?e.addError("KEYWORD_TYPE_EXPECTED",["multipleOf","number"]):t.multipleOf<=0&&e.addError("KEYWORD_MUST_BE",["multipleOf","strictly greater than 0"])},maximum:function(e,t){"number"!=typeof t.maximum&&e.addError("KEYWORD_TYPE_EXPECTED",["maximum","number"])},exclusiveMaximum:function(e,t){"boolean"!=typeof t.exclusiveMaximum?e.addError("KEYWORD_TYPE_EXPECTED",["exclusiveMaximum","boolean"]):void 0===t.maximum&&e.addError("KEYWORD_DEPENDENCY",["exclusiveMaximum","maximum"])},minimum:function(e,t){"number"!=typeof t.minimum&&e.addError("KEYWORD_TYPE_EXPECTED",["minimum","number"])},exclusiveMinimum:function(e,t){"boolean"!=typeof t.exclusiveMinimum?e.addError("KEYWORD_TYPE_EXPECTED",["exclusiveMinimum","boolean"]):void 0===t.minimum&&e.addError("KEYWORD_DEPENDENCY",["exclusiveMinimum","minimum"])},maxLength:function(e,t){"integer"!==s.whatIs(t.maxLength)?e.addError("KEYWORD_TYPE_EXPECTED",["maxLength","integer"]):t.maxLength<0&&e.addError("KEYWORD_MUST_BE",["maxLength","greater than, or equal to 0"])},minLength:function(e,t){"integer"!==s.whatIs(t.minLength)?e.addError("KEYWORD_TYPE_EXPECTED",["minLength","integer"]):t.minLength<0&&e.addError("KEYWORD_MUST_BE",["minLength","greater than, or equal to 0"])},pattern:function(e,t){if("string"!=typeof t.pattern)e.addError("KEYWORD_TYPE_EXPECTED",["pattern","string"]);else try{RegExp(t.pattern)}catch(a){e.addError("KEYWORD_PATTERN",["pattern",t.pattern])}},additionalItems:function(e,t){var n=s.whatIs(t.additionalItems);"boolean"!==n&&"object"!==n?e.addError("KEYWORD_TYPE_EXPECTED",["additionalItems",["boolean","object"]]):"object"===n&&(e.path.push("additionalItems"),a.validateSchema.call(this,e,t.additionalItems),e.path.pop())},items:function(e,t){var n=s.whatIs(t.items);if("object"===n)e.path.push("items"),a.validateSchema.call(this,e,t.items),e.path.pop();else if("array"===n)for(var r=t.items.length;r--;)e.path.push("items"),e.path.push(r.toString()),a.validateSchema.call(this,e,t.items[r]),e.path.pop(),e.path.pop();else e.addError("KEYWORD_TYPE_EXPECTED",["items",["array","object"]]);this.options.forceAdditional===!0&&void 0===t.additionalItems&&Array.isArray(t.items)&&e.addError("KEYWORD_UNDEFINED_STRICT",["additionalItems"]),this.options.assumeAdditional&&void 0===t.additionalItems&&Array.isArray(t.items)&&(t.additionalItems=!1)},maxItems:function(e,t){"number"!=typeof t.maxItems?e.addError("KEYWORD_TYPE_EXPECTED",["maxItems","integer"]):t.maxItems<0&&e.addError("KEYWORD_MUST_BE",["maxItems","greater than, or equal to 0"])},minItems:function(e,t){"integer"!==s.whatIs(t.minItems)?e.addError("KEYWORD_TYPE_EXPECTED",["minItems","integer"]):t.minItems<0&&e.addError("KEYWORD_MUST_BE",["minItems","greater than, or equal to 0"])},uniqueItems:function(e,t){"boolean"!=typeof t.uniqueItems&&e.addError("KEYWORD_TYPE_EXPECTED",["uniqueItems","boolean"])},maxProperties:function(e,t){"integer"!==s.whatIs(t.maxProperties)?e.addError("KEYWORD_TYPE_EXPECTED",["maxProperties","integer"]):t.maxProperties<0&&e.addError("KEYWORD_MUST_BE",["maxProperties","greater than, or equal to 0"])},minProperties:function(e,t){"integer"!==s.whatIs(t.minProperties)?e.addError("KEYWORD_TYPE_EXPECTED",["minProperties","integer"]):t.minProperties<0&&e.addError("KEYWORD_MUST_BE",["minProperties","greater than, or equal to 0"])},required:function(e,t){if("array"!==s.whatIs(t.required))e.addError("KEYWORD_TYPE_EXPECTED",["required","array"]);else if(0===t.required.length)e.addError("KEYWORD_MUST_BE",["required","an array with at least one element"]);else{for(var a=t.required.length;a--;)"string"!=typeof t.required[a]&&e.addError("KEYWORD_VALUE_TYPE",["required","string"]);s.isUniqueArray(t.required)===!1&&e.addError("KEYWORD_MUST_BE",["required","an array with unique items"])}},additionalProperties:function(e,t){var n=s.whatIs(t.additionalProperties);"boolean"!==n&&"object"!==n?e.addError("KEYWORD_TYPE_EXPECTED",["additionalProperties",["boolean","object"]]):"object"===n&&(e.path.push("additionalProperties"),a.validateSchema.call(this,e,t.additionalProperties),e.path.pop())},properties:function(e,t){if("object"!==s.whatIs(t.properties))return void e.addError("KEYWORD_TYPE_EXPECTED",["properties","object"]);for(var n=Object.keys(t.properties),r=n.length;r--;){var i=n[r],o=t.properties[i];e.path.push("properties"),e.path.push(i),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}this.options.forceAdditional===!0&&void 0===t.additionalProperties&&e.addError("KEYWORD_UNDEFINED_STRICT",["additionalProperties"]),this.options.assumeAdditional&&void 0===t.additionalProperties&&(t.additionalProperties=!1),this.options.forceProperties===!0&&0===n.length&&e.addError("CUSTOM_MODE_FORCE_PROPERTIES",["properties"])},patternProperties:function(e,t){if("object"!==s.whatIs(t.patternProperties))return void e.addError("KEYWORD_TYPE_EXPECTED",["patternProperties","object"]);for(var n=Object.keys(t.patternProperties),r=n.length;r--;){var i=n[r],o=t.patternProperties[i];try{RegExp(i)}catch(u){e.addError("KEYWORD_PATTERN",["patternProperties",i])}e.path.push("patternProperties"),e.path.push(i.toString()),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}this.options.forceProperties===!0&&0===n.length&&e.addError("CUSTOM_MODE_FORCE_PROPERTIES",["patternProperties"])},dependencies:function(e,t){if("object"!==s.whatIs(t.dependencies))e.addError("KEYWORD_TYPE_EXPECTED",["dependencies","object"]);else for(var n=Object.keys(t.dependencies),r=n.length;r--;){var i=n[r],o=t.dependencies[i],u=s.whatIs(o);if("object"===u)e.path.push("dependencies"),e.path.push(i),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop();else if("array"===u){var c=o.length;for(0===c&&e.addError("KEYWORD_MUST_BE",["dependencies","not empty array"]);c--;)"string"!=typeof o[c]&&e.addError("KEYWORD_VALUE_TYPE",["dependensices","string"]);s.isUniqueArray(o)===!1&&e.addError("KEYWORD_MUST_BE",["dependencies","an array with unique items"])}else e.addError("KEYWORD_VALUE_TYPE",["dependencies","object or array"])}},"enum":function(e,t){Array.isArray(t["enum"])===!1?e.addError("KEYWORD_TYPE_EXPECTED",["enum","array"]):0===t["enum"].length?e.addError("KEYWORD_MUST_BE",["enum","an array with at least one element"]):s.isUniqueArray(t["enum"])===!1&&e.addError("KEYWORD_MUST_BE",["enum","an array with unique elements"])},type:function(e,t){var a=["array","boolean","integer","number","null","object","string"],n=a.join(","),r=Array.isArray(t.type);if(r){for(var i=t.type.length;i--;)-1===a.indexOf(t.type[i])&&e.addError("KEYWORD_TYPE_EXPECTED",["type",n]);s.isUniqueArray(t.type)===!1&&e.addError("KEYWORD_MUST_BE",["type","an object with unique properties"])}else"string"==typeof t.type?-1===a.indexOf(t.type)&&e.addError("KEYWORD_TYPE_EXPECTED",["type",n]):e.addError("KEYWORD_TYPE_EXPECTED",["type",["string","array"]]);this.options.noEmptyStrings===!0&&("string"===t.type||r&&-1!==t.type.indexOf("string"))&&void 0===t.minLength&&void 0===t["enum"]&&void 0===t.format&&(t.minLength=1),this.options.noEmptyArrays===!0&&("array"===t.type||r&&-1!==t.type.indexOf("array"))&&void 0===t.minItems&&(t.minItems=1),this.options.forceProperties===!0&&("object"===t.type||r&&-1!==t.type.indexOf("object"))&&void 0===t.properties&&void 0===t.patternProperties&&e.addError("KEYWORD_UNDEFINED_STRICT",["properties"]),this.options.forceItems===!0&&("array"===t.type||r&&-1!==t.type.indexOf("array"))&&void 0===t.items&&e.addError("KEYWORD_UNDEFINED_STRICT",["items"]),this.options.forceMinItems===!0&&("array"===t.type||r&&-1!==t.type.indexOf("array"))&&void 0===t.minItems&&e.addError("KEYWORD_UNDEFINED_STRICT",["minItems"]),this.options.forceMaxItems===!0&&("array"===t.type||r&&-1!==t.type.indexOf("array"))&&void 0===t.maxItems&&e.addError("KEYWORD_UNDEFINED_STRICT",["maxItems"]),this.options.forceMinLength===!0&&("string"===t.type||r&&-1!==t.type.indexOf("string"))&&void 0===t.minLength&&void 0===t.format&&void 0===t["enum"]&&void 0===t.pattern&&e.addError("KEYWORD_UNDEFINED_STRICT",["minLength"]),this.options.forceMaxLength===!0&&("string"===t.type||r&&-1!==t.type.indexOf("string"))&&void 0===t.maxLength&&void 0===t.format&&void 0===t["enum"]&&void 0===t.pattern&&e.addError("KEYWORD_UNDEFINED_STRICT",["maxLength"])},allOf:function(e,t){if(Array.isArray(t.allOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["allOf","array"]);else if(0===t.allOf.length)e.addError("KEYWORD_MUST_BE",["allOf","an array with at least one element"]);else for(var n=t.allOf.length;n--;)e.path.push("allOf"),e.path.push(n.toString()),a.validateSchema.call(this,e,t.allOf[n]),e.path.pop(),e.path.pop()},anyOf:function(e,t){if(Array.isArray(t.anyOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["anyOf","array"]);else if(0===t.anyOf.length)e.addError("KEYWORD_MUST_BE",["anyOf","an array with at least one element"]);else for(var n=t.anyOf.length;n--;)e.path.push("anyOf"),e.path.push(n.toString()),a.validateSchema.call(this,e,t.anyOf[n]),e.path.pop(),e.path.pop()},oneOf:function(e,t){if(Array.isArray(t.oneOf)===!1)e.addError("KEYWORD_TYPE_EXPECTED",["oneOf","array"]);else if(0===t.oneOf.length)e.addError("KEYWORD_MUST_BE",["oneOf","an array with at least one element"]);else for(var n=t.oneOf.length;n--;)e.path.push("oneOf"),e.path.push(n.toString()),a.validateSchema.call(this,e,t.oneOf[n]),e.path.pop(),e.path.pop()},not:function(e,t){"object"!==s.whatIs(t.not)?e.addError("KEYWORD_TYPE_EXPECTED",["not","object"]):(e.path.push("not"),a.validateSchema.call(this,e,t.not),e.path.pop())},definitions:function(e,t){if("object"!==s.whatIs(t.definitions))e.addError("KEYWORD_TYPE_EXPECTED",["definitions","object"]);else for(var n=Object.keys(t.definitions),r=n.length;r--;){var i=n[r],o=t.definitions[i];e.path.push("definitions"),e.path.push(i),a.validateSchema.call(this,e,o),e.path.pop(),e.path.pop()}},format:function(e,t){"string"!=typeof t.format?e.addError("KEYWORD_TYPE_EXPECTED",["format","string"]):void 0===n[t.format]&&this.options.ignoreUnknownFormats!==!0&&e.addError("UNKNOWN_FORMAT",[t.format])},id:function(e,t){"string"!=typeof t.id&&e.addError("KEYWORD_TYPE_EXPECTED",["id","string"])},title:function(e,t){"string"!=typeof t.title&&e.addError("KEYWORD_TYPE_EXPECTED",["title","string"])},description:function(e,t){"string"!=typeof t.description&&e.addError("KEYWORD_TYPE_EXPECTED",["description","string"])},"default":function(){}},u=function(e,t){for(var n=t.length;n--;)a.validateSchema.call(this,e,t[n]);return e.isValid()};a.validateSchema=function(e,t){if(e.commonErrorMessage="SCHEMA_VALIDATION_FAILED",Array.isArray(t))return u.call(this,e,t);if(t.__$validated)return!0;var a=t.$schema&&t.id!==t.$schema;if(a)if(t.__$schemaResolved&&t.__$schemaResolved!==t){var n=new i(e),c=r.validate.call(this,n,t.__$schemaResolved,t);c===!1&&e.addError("PARENT_SCHEMA_VALIDATION_FAILED",null,n)}else this.options.ignoreUnresolvableReferences!==!0&&e.addError("REF_UNRESOLVED",[t.$schema]);if(this.options.noTypeless===!0){if(void 0!==t.type){var l=[];Array.isArray(t.anyOf)&&(l=l.concat(t.anyOf)),Array.isArray(t.oneOf)&&(l=l.concat(t.oneOf)),Array.isArray(t.allOf)&&(l=l.concat(t.allOf)),l.forEach(function(e){e.type||(e.type=t.type)})}void 0===t["enum"]&&void 0===t.type&&void 0===t.anyOf&&void 0===t.oneOf&&void 0===t.not&&void 0===t.$ref&&e.addError("KEYWORD_UNDEFINED_STRICT",["type"])}for(var f=Object.keys(t),p=f.length;p--;){var m=f[p];0!==m.indexOf("__")&&(void 0!==o[m]?o[m].call(this,e,t):a||this.options.noExtraKeywords===!0&&e.addError("KEYWORD_UNEXPECTED",[m]))}if(this.options.pedanticCheck===!0){if(t["enum"]){var h=s.clone(t);for(delete h["enum"],delete h["default"],e.path.push("enum"),p=t["enum"].length;p--;)e.path.push(p.toString()),r.validate.call(this,e,h,t["enum"][p]),e.path.pop();e.path.pop()}t["default"]&&(e.path.push("default"),r.validate.call(this,e,t,t["default"]),e.path.pop())}var d=e.isValid();return d&&(t.__$validated=!0),d}},{"./FormatValidators":224,"./JsonValidation":225,"./Report":227,"./Utils":231}],231:[function(e,t,a){"use strict";a.isAbsoluteUri=function(e){return/^https?:\/\//.test(e)},a.isRelativeUri=function(e){return/.+#/.test(e)},a.whatIs=function(e){var t=typeof e;return"object"===t?null===e?"null":Array.isArray(e)?"array":"object":"number"===t?Number.isFinite(e)?e%1===0?"integer":"number":Number.isNaN(e)?"not-a-number":"unknown-number":t},a.areEqual=function n(e,t){if(e===t)return!0;var r,i;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(i=e.length,r=0;i>r;r++)if(!n(e[r],t[r]))return!1;return!0}if("object"===a.whatIs(e)&&"object"===a.whatIs(t)){var s=Object.keys(e),o=Object.keys(t);if(!n(s,o))return!1;for(i=s.length,r=0;i>r;r++)if(!n(e[s[r]],t[s[r]]))return!1;return!0}return!1},a.isUniqueArray=function(e,t){var n,r,i=e.length;for(n=0;i>n;n++)for(r=n+1;i>r;r++)if(a.areEqual(e[n],e[r]))return t&&t.push(n,r),!1;return!0},a.difference=function(e,t){for(var a=[],n=e.length;n--;)-1===t.indexOf(e[n])&&a.push(e[n]);return a},a.clone=function(e){if("undefined"!=typeof e){if("object"!=typeof e||null===e)return e;var t,a;if(Array.isArray(e))for(t=[],a=e.length;a--;)t[a]=e[a];else{t={};var n=Object.keys(e);for(a=n.length;a--;){var r=n[a];t[r]=e[r]}}return t}},a.cloneDeep=function(e){function t(e){if("object"!=typeof e||null===e)return e;var r,i,s;if(s=a.indexOf(e),-1!==s)return n[s];if(a.push(e),Array.isArray(e))for(r=[],n.push(r),i=e.length;i--;)r[i]=t(e[i]);else{r={},n.push(r);var o=Object.keys(e);for(i=o.length;i--;){var u=o[i];r[u]=t(e[u])}}return r}var a=[],n=[];return t(e)},a.ucs2decode=function(e){for(var t,a,n=[],r=0,i=e.length;i>r;)t=e.charCodeAt(r++),t>=55296&&56319>=t&&i>r?(a=e.charCodeAt(r++),56320==(64512&a)?n.push(((1023&t)<<10)+(1023&a)+65536):(n.push(t),r--)):n.push(t);return n}},{}],232:[function(e,t,a){(function(a){"use strict";function n(e){if(this.cache={},this.referenceCache=[],this.setRemoteReference("http://json-schema.org/draft-04/schema",p),this.setRemoteReference("http://json-schema.org/draft-04/hyper-schema",m),"object"==typeof e){for(var t,a=Object.keys(e),n=a.length;n--;)if(t=a[n],void 0===h[t])throw new Error("Unexpected option passed to constructor: "+t);for(a=Object.keys(h),n=a.length;n--;)t=a[n],void 0===e[t]&&(e[t]=f.clone(h[t]));this.options=e}else this.options=f.clone(h);this.options.strictMode===!0&&(this.options.forceAdditional=!0,this.options.forceItems=!0,this.options.forceMaxLength=!0,this.options.forceProperties=!0,this.options.noExtraKeywords=!0,this.options.noTypeless=!0,this.options.noEmptyStrings=!0,this.options.noEmptyArrays=!0)}e("./Polyfills");var r=e("lodash.get"),i=e("./Report"),s=e("./FormatValidators"),o=e("./JsonValidation"),u=e("./SchemaCache"),c=e("./SchemaCompilation"),l=e("./SchemaValidation"),f=e("./Utils"),p=e("./schemas/schema.json"),m=e("./schemas/hyper-schema.json"),h={asyncTimeout:2e3,forceAdditional:!1,assumeAdditional:!1,forceItems:!1,forceMinItems:!1,forceMaxItems:!1,forceMinLength:!1,forceMaxLength:!1,forceProperties:!1,ignoreUnresolvableReferences:!1,noExtraKeywords:!1,noTypeless:!1,noEmptyStrings:!1,noEmptyArrays:!1,strictUris:!1,strictMode:!1,reportPathAsArray:!1,breakOnFirstError:!0,pedanticCheck:!1,ignoreUnknownFormats:!1};n.prototype.compileSchema=function(e){var t=new i(this.options);return e=u.getSchema.call(this,t,e),c.compileSchema.call(this,t,e),this.lastReport=t,t.isValid()},n.prototype.validateSchema=function(e){if(Array.isArray(e)&&0===e.length)throw new Error(".validateSchema was called with an empty array");var t=new i(this.options);e=u.getSchema.call(this,t,e);var a=c.compileSchema.call(this,t,e);return a&&l.validateSchema.call(this,t,e),this.lastReport=t,t.isValid()},n.prototype.validate=function(e,t,n,s){"function"===f.whatIs(n)&&(s=n,n={}),n||(n={});var p=f.whatIs(t);if("string"!==p&&"object"!==p){var m=new Error("Invalid .validate call - schema must be an string or object but "+p+" was passed!");if(s)return void a.nextTick(function(){s(m,!1)});throw m}var h=!1,d=new i(this.options);if("string"==typeof t){var g=t;if(t=u.getSchema.call(this,d,g),!t)throw new Error("Schema with id '"+g+"' wasn't found in the validator cache!")}else t=u.getSchema.call(this,d,t);var y=!1;h||(y=c.compileSchema.call(this,d,t)),y||(this.lastReport=d,h=!0);var w=!1;if(h||(w=l.validateSchema.call(this,d,t)),w||(this.lastReport=d,h=!0),n.schemaPath&&(d.rootSchema=t,t=r(t,n.schemaPath),!t))throw new Error("Schema path '"+n.schemaPath+"' wasn't found in the schema!");if(h||o.validate.call(this,d,t,e),s)return void d.processAsyncTasks(this.options.asyncTimeout,s);if(d.asyncTasks.length>0)throw new Error("This validation has async tasks and cannot be done in sync mode, please provide callback argument.");return this.lastReport=d,d.isValid()},n.prototype.getLastError=function(){if(0===this.lastReport.errors.length)return null;var e=new Error;return e.name="z-schema validation error",e.message=this.lastReport.commonErrorMessage,e.details=this.lastReport.errors,e},n.prototype.getLastErrors=function(){return this.lastReport&&this.lastReport.errors.length>0?this.lastReport.errors:void 0},n.prototype.getMissingReferences=function(e){e=e||this.lastReport.errors;for(var t=[],a=e.length;a--;){var n=e[a];if("UNRESOLVABLE_REFERENCE"===n.code){var r=n.params[0];-1===t.indexOf(r)&&t.push(r)}n.inner&&(t=t.concat(this.getMissingReferences(n.inner)))}return t},n.prototype.getMissingRemoteReferences=function(){for(var e=this.getMissingReferences(),t=[],a=e.length;a--;){var n=u.getRemotePath(e[a]);n&&-1===t.indexOf(n)&&t.push(n)}return t},n.prototype.setRemoteReference=function(e,t){t="string"==typeof t?JSON.parse(t):f.cloneDeep(t),u.cacheSchemaByUri.call(this,e,t)},n.prototype.getResolvedSchema=function(e){var t=new i(this.options);e=u.getSchema.call(this,t,e),e=f.cloneDeep(e);var a=[],n=function(e){var t,r=f.whatIs(e);if(("object"===r||"array"===r)&&!e.___$visited){if(e.___$visited=!0,a.push(e),e.$ref&&e.__$refResolved){var i=e.__$refResolved,s=e;delete e.$ref,delete e.__$refResolved;for(t in i)i.hasOwnProperty(t)&&(s[t]=i[t])}for(t in e)e.hasOwnProperty(t)&&(0===t.indexOf("__$")?delete e[t]:n(e[t]))}};if(n(e),a.forEach(function(e){delete e.___$visited}),this.lastReport=t,t.isValid())return e;throw this.getLastError()},n.prototype.setSchemaReader=function(e){return n.setSchemaReader(e)},n.prototype.getSchemaReader=function(){return n.schemaReader},n.setSchemaReader=function(e){n.schemaReader=e},n.registerFormat=function(e,t){s[e]=t},n.unregisterFormat=function(e){delete s[e]},n.getRegisteredFormats=function(){return Object.keys(s)},n.getDefaultOptions=function(){return f.cloneDeep(h)},t.exports=n}).call(this,e("_process"))},{"./FormatValidators":224,"./JsonValidation":225,"./Polyfills":226,"./Report":227,"./SchemaCache":228,"./SchemaCompilation":229,"./SchemaValidation":230,"./Utils":231,"./schemas/hyper-schema.json":233,"./schemas/schema.json":234,_process:200,"lodash.get":190}],233:[function(e,t,a){t.exports={$schema:"http://json-schema.org/draft-04/hyper-schema#",id:"http://json-schema.org/draft-04/hyper-schema#",title:"JSON Hyper-Schema",allOf:[{$ref:"http://json-schema.org/draft-04/schema#"}],properties:{additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}]},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}]},dependencies:{additionalProperties:{anyOf:[{$ref:"#"},{type:"array"}]}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}]},definitions:{additionalProperties:{$ref:"#"}},patternProperties:{additionalProperties:{$ref:"#"}},properties:{additionalProperties:{$ref:"#"}},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"},links:{type:"array",items:{$ref:"#/definitions/linkDescription"}},fragmentResolution:{type:"string"},media:{type:"object",properties:{type:{description:"A media type, as described in RFC 2046",type:"string"},binaryEncoding:{description:"A content encoding scheme, as described in RFC 2045",type:"string"}}},pathStart:{description:"Instances' URIs must start with this value for this schema to apply to them",type:"string",format:"uri"}},definitions:{schemaArray:{type:"array",items:{$ref:"#"}},linkDescription:{title:"Link Description Object",type:"object",required:["href","rel"],properties:{href:{description:"a URI template, as defined by RFC 6570, with the addition of the $, ( and ) characters for pre-processing",type:"string"},rel:{description:"relation to the target resource of the link",type:"string"},title:{description:"a title for the link",type:"string"},targetSchema:{description:"JSON Schema describing the link target",$ref:"#"},mediaType:{description:"media type (as defined by RFC 2046) describing the link target",type:"string"},method:{description:'method for requesting the target of the link (e.g. for HTTP this might be "GET" or "DELETE")',type:"string"},encType:{description:"The media type in which to submit data along with the request",type:"string","default":"application/json"},schema:{description:"Schema describing the data to submit along with the request",$ref:"#"}}}}}},{}],234:[function(e,t,a){t.exports={id:"http://json-schema.org/draft-04/schema#",$schema:"http://json-schema.org/draft-04/schema#",description:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},positiveInteger:{type:"integer",minimum:0},positiveIntegerDefault0:{allOf:[{$ref:"#/definitions/positiveInteger"},{"default":0}]},simpleTypes:{"enum":["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},minItems:1, +uniqueItems:!0}},type:"object",properties:{id:{type:"string",format:"uri"},$schema:{type:"string",format:"uri"},title:{type:"string"},description:{type:"string"},"default":{},multipleOf:{type:"number",minimum:0,exclusiveMinimum:!0},maximum:{type:"number"},exclusiveMaximum:{type:"boolean","default":!1},minimum:{type:"number"},exclusiveMinimum:{type:"boolean","default":!1},maxLength:{$ref:"#/definitions/positiveInteger"},minLength:{$ref:"#/definitions/positiveIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],"default":{}},maxItems:{$ref:"#/definitions/positiveInteger"},minItems:{$ref:"#/definitions/positiveIntegerDefault0"},uniqueItems:{type:"boolean","default":!1},maxProperties:{$ref:"#/definitions/positiveInteger"},minProperties:{$ref:"#/definitions/positiveIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},definitions:{type:"object",additionalProperties:{$ref:"#"},"default":{}},properties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},"enum":{type:"array",minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},dependencies:{exclusiveMaximum:["maximum"],exclusiveMinimum:["minimum"]},"default":{}}},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/browser/sway-standalone.js b/browser/sway-standalone.js index 2bd496f..495cbc7 100644 --- a/browser/sway-standalone.js +++ b/browser/sway-standalone.js @@ -1,4 +1,4 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.SwaggerApi = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o -1) { + try { + value = JSON.parse(value); + } catch (err) { + // Nothing to do here, just fall through + } + } + + switch (type) { + case 'array': + if (_.isString(value)) { + if (collectionFormats.indexOf(options.collectionFormat) === -1) { + throw new TypeError('Invalid \'collectionFormat\' value: ' + options.collectionFormat); + } + + switch (options.collectionFormat) { + case 'csv': + case undefined: + value = value.split(','); + break; + case 'multi': + value = [value]; + break; + case 'pipes': + value = value.split('|'); + break; + case 'ssv': + value = value.split(' '); + break; + case 'tsv': + value = value.split('\t'); + break; + + // no default + } + } + + if (_.isArray(value)) { + value = _.map(value, function (item, index) { + return convertValue(_.isArray(schema.items) ? schema.items[index] : schema.items, options, item); + }); + } + + break; + case 'boolean': + if (!_.isBoolean(value)) { + if (value === 'true') { + value = true; + } else if (value === 'false') { + value = false; + } else { + err = new TypeError('Not a valid boolean: ' + value); + } + } + + break; + case 'integer': + if (!_.isNumber(value)) { + if (_.isString(value) && _.trim(value).length === 0) { + value = NaN; + } + + value = Number(value); + + if (_.isNaN(value)) { + err = new TypeError('Not a valid integer: ' + originalValue); + } + } + + break; + case 'number': + if (!_.isNumber(value)) { + if (_.isString(value) && _.trim(value).length === 0) { + value = NaN; + } + + value = Number(value); + + if (_.isNaN(value)) { + err = new TypeError('Not a valid number: ' + originalValue); + } + } + break; + case 'string': + if (['date', 'date-time'].indexOf(schema.format) > -1) { + if (_.isString(value)) { + value = new Date(value); + } + + if (!_.isDate(value) || value.toString() === 'Invalid Date') { + err = new TypeError('Not a valid ' + schema.format + ' string: ' + originalValue); + + err.code = 'INVALID_FORMAT'; + } + } else if (!_.isString(value)) { + err = new TypeError('Not a valid string: ' + value); + } + + break; + + // no default + } + + if (!_.isUndefined(err)) { + // Convert the error to be more like a JSON Schema validation error + if (_.isUndefined(err.code)) { + err.code = 'INVALID_TYPE'; + err.message = 'Expected type ' + type + ' but found type ' + pType; + } else { + err.message = 'Object didn\'t pass validation for format ' + schema.format + ': ' + pValue; + } + + // Format and type errors resemble JSON Schema validation errors + err.failedValidation = true; + err.path = []; + + throw err; + } + + return value; }; +/** + * Returns a json-schema-faker mocker. + * + * @returns {object} The json-schema-faker mocker to use + */ +module.exports.getJSONSchemaMocker = function () { + return jsonMocker; +}; + +/** + * Returns a z-schema validator. + * + * @returns {object} The z-schema validator to use + */ +module.exports.getJSONSchemaValidator = function () { + return jsonSchemaValidator; +}; + +module.exports.parameterLocations = ['body', 'formData', 'header', 'path', 'query']; + +/** + * Replaces the circular references in the provided object with an empty object. + * + * @param {object} obj - The JavaScript object + */ +module.exports.removeCirculars = function (obj) { + function walk (ancestors, node, path) { + function walkItem (item, segment) { + path.push(segment); + walk(ancestors, item, path); + path.pop(); + } + + // We do not process circular objects again + if (ancestors.indexOf(node) === -1) { + ancestors.push(node); + + if (_.isArray(node) || _.isPlainObject(node)) { + _.each(node, function (member, indexOrKey) { + walkItem(member, indexOrKey.toString()); + }); + } + } else { + _.set(obj, path, {}); + } + + ancestors.pop(); + } + + walk([], obj, []); +} + +module.exports.supportedHttpMethods = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch']; + /** * Validates the provided value against the JSON Schema by name or value. * @@ -331,15 +635,15 @@ module.exports.validateContentType = function (contentType, supportedTypes, resu // Check for exact match or mime-type only match if (_.indexOf(supportedTypes, rawContentType) === -1 && _.indexOf(supportedTypes, contentType) === -1) { results.errors.push({ - code: 'INVALID_CONTENT_TYPE', - message: 'Invalid Content-Type (' + contentType + '). These are supported: ' + - supportedTypes.join(', '), - path: [] - }); + code: 'INVALID_CONTENT_TYPE', + message: 'Invalid Content-Type (' + contentType + '). These are supported: ' + + supportedTypes.join(', '), + path: [] + }); } }; -},{"./json-schema-draft-04.json":3,"json-schema-faker":173,"lodash":194,"z-schema":234}],3:[function(require,module,exports){ +},{"./json-schema-draft-04.json":3,"./validation/format-generators":10,"./validation/format-validators":11,"json-schema-faker":171,"lodash":192,"z-schema":232}],3:[function(require,module,exports){ module.exports={ "id": "http://json-schema.org/draft-04/schema#", "$schema": "http://json-schema.org/draft-04/schema#", @@ -521,6 +825,8 @@ module.exports={ var _ = require('lodash'); var debug = require('debug')('sway:api'); var parseUrl = require('url').parse; +var Path = require('./path'); +var validators = require('../validation/validators'); /** * The Swagger API object. @@ -530,43 +836,53 @@ var parseUrl = require('url').parse; * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {object} plugin - The Swagger version plugin - * @param {object} definition - The Swagger definition - * @param {object} resolved - The fully resolved Swagger definition + * @param {object} definition - The original Swagger definition + * @param {obejct} definitionRemotesResolved - The Swagger definition with all of its remote references resolved + * @param {object} definitionAllResolved - The Swagger definition with all of its references resolved * @param {object} references - The location and resolution of the resolved references in the Swagger definition * @param {object} options - The options passed to swaggerApi.create - * @param {ValidatorCallback} [options.customValidators] - The custom validators * * @property {ValidatorCallback[]} customValidators - The array of custom validators - * @property {object} definition - The API definition + * @property {object} definition - The original Swagger definition + * @property {obejct} definitionRemotesResolved - The Swagger definition with all of its remote references resolved + * @property {object} definitionAllResolved - The Swagger definition with all of its references resolved * @property {string} documentation - The URL to the Swagger documentation * @property {Path[]} pathObjects - The unique path objects * @property {object} options - The options passed to the constructor * @property {object} references - The reference metadata *(See [JsonRefs~ResolvedRefDetails](https://github.com/whitlockjc/json-refs/blob/master/docs/API.md#module_JsonRefs..ResolvedRefDetails))* - * @property {object} resolved - The fully resolved API definition * @property {string} version - The Swagger API version * * @constructor */ -function SwaggerApi (plugin, definition, resolved, references, options) { +function SwaggerApi (definition, definitionRemotesResolved, definitionAllResolved, references, options) { + var that = this; + + // Assign local properties this.customValidators = []; this.definition = definition; - this.documentation = plugin.documentation; + this.definitionAllResolved = definitionAllResolved; + this.definitionRemotesResolved = definitionRemotesResolved; + this.documentation = 'https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md'; this.options = options; - this.plugin = plugin; this.references = references; - this.resolved = resolved; - this.version = plugin.version; + this.version = '2.0'; - // Assign Swagger definition properties to the api for easy access + // Assign local properties from the Swagger definition properties _.assign(this, definition); - debug('Initializing Sway using %s', _.isString(options.definition) ? options.definition : 'the provided document'); - - this.pathObjects = plugin.getPaths(this); - // Register custom validators - _.forEach(options.customValidators, SwaggerApi.prototype.registerValidator, this); + _.each(options.customValidators, SwaggerApi.prototype.registerValidator, this); + + // Create the Path objects + this.pathObjects = _.map(definitionAllResolved.paths, function (pathDef, path) { + return new Path(that, + path, + pathDef, + ['paths', path]); + + }); + + debug('Creating SwaggerApi from %s', _.isString(options.definition) ? options.definition : 'the provided document'); } /** @@ -725,15 +1041,15 @@ SwaggerApi.prototype.validate = function () { } // Validate the document structurally - doValidation(this.plugin.getStructuralValidator()); + doValidation(validators.jsonSchemaValidator); // Perform remaining validation only if the document is structurally valid if (results.errors.length === 0) { // Run plugin validators - _.forEach(this.plugin.getSemanticValidators(), doValidation); + _.each(validators.semanticValidators, doValidation); // Run custom validators - _.forEach(this.customValidators, doValidation); + _.each(this.customValidators, doValidation); } return results; @@ -741,7 +1057,7 @@ SwaggerApi.prototype.validate = function () { module.exports = SwaggerApi; -},{"debug":22,"lodash":194,"url":222}],5:[function(require,module,exports){ +},{"../validation/validators":13,"./path":8,"debug":20,"lodash":192,"url":220}],5:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -770,7 +1086,10 @@ module.exports = SwaggerApi; var _ = require('lodash'); var debug = require('debug')('sway:operation'); -var sHelpers = require('../helpers'); +var JsonRefs = require('json-refs'); +var Parameter = require('./parameter'); +var Response = require('./response'); +var helpers = require('../helpers'); /** * The Swagger Operation object. @@ -780,47 +1099,85 @@ var sHelpers = require('../helpers'); * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {SwaggerApi} api - The Swagger API object * @param {Path} pathObject - The Path object * @param {string} method - The operation method - * @param {string} ptr - The JSON Pointer to the operation * @param {object} definition - The operation definition - * @param {string[]} consumes - The mime types this operation consumes - * @param {string[]} produces - The mime types this operation produces + * @param {string[]} pathToDefinition - The path segments to the operation definition * - * @property {SwaggerApi} api - The Swagger API object * @property {object} definition - The operation definition * @property {string} method - The HTTP method for this operation * @property {Path} pathObject - The Path object + * @property {string[]} pathToDefinition - The path segments to the operation definition * @property {Parameter[]} parameterObjects - The Parameter objects * @property {string} ptr - The JSON Pointer to the operation * @property {object} securityDefinitions - The security definitions used by this operation * * @constructor */ -function Operation (api, pathObject, method, ptr, definition, consumes, produces) { - this.api = api; - this.pathObject = pathObject; - this.method = method; - this.ptr = ptr; - this.definition = definition; +function Operation (pathObject, method, definition, pathToDefinition) { + var seenParameters = []; + var that = this; - // Assign Swagger definition properties to the operation for easy access + // Assign local properties + this.consumes = definition.consumes || pathObject.api.consumes || []; + this.definition = _.cloneDeep(definition); // Clone so we do not alter the original + this.method = method; + this.parameterObjects = []; // Computed below + this.pathObject = pathObject; + this.pathToDefinition = pathToDefinition; + this.produces = definition.produces || pathObject.api.produces || []; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); + + // Assign local properties from the Swagger definition properties _.assign(this, definition); - // Assign consumes/produces after merging properties - this.consumes = consumes; - this.produces = produces; + // Default to the global security + if (_.isUndefined(this.security)) { + this.security = this.definition.security = pathObject.api.definitionAllResolved.security; + } - debug('Found operation at %s', ptr); + // Add the Parameter objects from the Path object that were not redefined in the operation definition + this.parameterObjects = _.map(pathObject.parameterObjects, function (parameterObject) { + seenParameters.push(parameterObject.in + ':' + parameterObject.name); - this.parameterObjects = api.plugin.getOperationParameters(this); - this.responseObjects = api.plugin.getOperationResponses(this); + return parameterObject; + }); + + // Create Parameter objects from parameters defined in the operation definition + _.each(definition.parameters, function (paramDef, index) { + var key = paramDef.in + ':' + paramDef.name; + var seenIndex = seenParameters.indexOf(key); + var parameterObject = new Parameter(that, + paramDef, + pathToDefinition.concat(['parameters', index.toString()])); + + if (seenIndex > -1) { + that.parameterObjects[seenIndex] = parameterObject; + } else { + that.parameterObjects.push(parameterObject); + + seenParameters.push(key); + } + }); + + this.parameters = this.definition.parameters = _.map(this.parameterObjects, function (parameterObject) { + return parameterObject.definition; + }); + + // Create response objects from responses defined in the operation definition + this.responseObjects = _.map(definition.responses, function (responseDef, code) { + return new Response(that, + code, + responseDef, + pathToDefinition.concat(['responses', code])); + }); // Bring in the security definitions for easier access - this.securityDefinitions = _.reduce(definition.security, function (defs, reqs) { + this.securityDefinitions = _.reduce(this.security, function (defs, reqs) { _.each(reqs, function (req, name) { - var def = api.resolved.securityDefinitions ? api.resolved.securityDefinitions[name] : undefined; + var def = pathObject.api.definitionAllResolved.securityDefinitions ? + pathObject.api.definitionAllResolved.securityDefinitions[name] : + undefined; if (!_.isUndefined(def)) { defs[name] = def; @@ -829,10 +1186,12 @@ function Operation (api, pathObject, method, ptr, definition, consumes, produces return defs; }, {}); + + debug('Found operation at %s', this.ptr); } /** - * Returns the parameter with the provided location and name. + * Returns the parameter with the provided name and location when provided. * * @param {string} name - The name of the parameter * @param {string} [location] - The location *(`in`)* of the parameter *(Used for disambiguation)* @@ -911,7 +1270,7 @@ Operation.prototype.validateRequest = function (req) { // Validate the Content-Type but only for POST and PUT (The rest do not have bodies) if (['post', 'put'].indexOf(this.method) > -1) { // Defaults to application/octet-stream per http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1 - sHelpers.validateContentType(req.headers['content-type'] || 'application/octet-stream', this.consumes, results); + helpers.validateContentType(req.headers['content-type'] || 'application/octet-stream', this.consumes, results); } // Validate the parameters @@ -982,7 +1341,7 @@ Operation.prototype.validateResponse = function (res) { module.exports = Operation; -},{"../helpers":2,"debug":22,"lodash":194}],6:[function(require,module,exports){ +},{"../helpers":2,"./parameter":7,"./response":9,"debug":20,"json-refs":170,"lodash":192}],6:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -1018,7 +1377,7 @@ var JsonRefs = require('json-refs'); * * **Note:** Do not use directly. * - * @param {Parameter} parameter - The Parameter Object + * @param {Parameter} parameterObject - The Parameter Object * @param {*} raw - The original/raw value * * @property {Error} error - The error(s) encountered during processing/validating the parameter value @@ -1032,16 +1391,15 @@ var JsonRefs = require('json-refs'); * * @constructor */ -function ParameterValue (parameter, raw) { - var plugin = parameter.pathObject.api.plugin; - var pPath = JsonRefs.pathFromPtr(parameter.ptr); +function ParameterValue (parameterObject, raw) { + var pPath = JsonRefs.pathFromPtr(parameterObject.ptr); var processed = false; - var schema = parameter.computedSchema; + var schema = parameterObject.computedSchema; var error; var isValid; var processedValue; - this.parameterObject = parameter; + this.parameterObject = parameterObject; this.raw = raw; // Use Object.defineProperty for 'value' to allow for lazy processing of the raw value @@ -1075,7 +1433,7 @@ function ParameterValue (parameter, raw) { if (_.isUndefined(error)) { try { // Validate requiredness - if (parameter.required === true && _.isUndefined(value)) { + if (parameterObject.required === true && _.isUndefined(value)) { vError = new Error('Value is required but was not provided'); vError.code = 'REQUIRED'; @@ -1090,11 +1448,11 @@ function ParameterValue (parameter, raw) { // * The schema defines a file parameter // * The schema is for a string type with date/date-time format and the value is a date // * The schema is for a string type and the value is a Buffer - if (parameter.required === false && _.isUndefined(value)) { + if (parameterObject.required === false && _.isUndefined(value)) { skipValidation = true; } else if (schema.allowEmptyValue === true && value === '') { skipValidation = true; - } else if (parameter.type === 'file') { + } else if (parameterObject.type === 'file') { skipValidation = true; } else if (schema.type === 'string') { if (['date', 'date-time'].indexOf(schema.format) > -1 && _.isDate(value)) { @@ -1106,7 +1464,7 @@ function ParameterValue (parameter, raw) { if (!skipValidation) { // Validate against JSON Schema - result = helpers.validateAgainstSchema(plugin.getJSONSchemaValidator(), parameter.getSchema(), value); + result = helpers.validateAgainstSchema(helpers.getJSONSchemaValidator(), parameterObject.getSchema(), value); } if (result.errors.length > 0) { @@ -1141,8 +1499,8 @@ function ParameterValue (parameter, raw) { } else { // Convert/Coerce the raw value from the request object try { - processedValue = plugin.convertValue(schema, { - collectionFormat: parameter.collectionFormat + processedValue = helpers.convertValue(schema, { + collectionFormat: parameterObject.collectionFormat }, raw); } catch (err) { error = err; @@ -1186,7 +1544,7 @@ function ParameterValue (parameter, raw) { module.exports = ParameterValue; -},{"../helpers":2,"json-refs":172,"lodash":194}],7:[function(require,module,exports){ +},{"../helpers":2,"json-refs":170,"lodash":192}],7:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -1215,7 +1573,8 @@ module.exports = ParameterValue; var _ = require('lodash'); var debug = require('debug')('sway:parameter'); -var Operation = require('./operation'); +var helpers = require('../helpers'); +var JsonRefs = require('json-refs'); var ParameterValue = require('./parameter-value'); var parseUrl = require('url').parse; @@ -1227,40 +1586,43 @@ var parseUrl = require('url').parse; * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {Operation|Path} opOrPath - The Operation or Path object - * @param {string} ptr - The JSON Pointer to the parameter + * @param {Operation|Path} opOrPathObject - The `Operation` or `Path` object * @param {object} definition - The parameter definition - * @param {object} schema - The JSON Schema for the parameter + * @param {string[]} pathToDefinition - The path segments to the parameter definition * + * @property {object} computedSchema - The computed JSON Schema for the parameter * @property {object} definition - The parameter definition - * @property {Operation} operationObject - The Operation object (Can be undefined for path-level parameters) - * @property {Path} pathObject - The Path object + * @property {Operation} operationObject - The `Operation` object the parameter belongs to *(Can be undefined for + * path-level parameters)* + * @property {Path} pathObject - The `Path` object the parameter belongs t + * @property {string[]} pathToDefinition - The path segments to the parameter definition * @property {string} ptr - The JSON Pointer to the parameter definition - * @property {object} schema - The JSON Schema for the parameter * * @constructor */ -function Parameter (opOrPath, ptr, definition, schema) { - this.computedSchema = schema; +function Parameter (opOrPathObject, definition, pathToDefinition) { + // Assign local properties + this.computedSchema = helpers.computeParameterSchema(definition); this.definition = definition; - this.ptr = ptr; + this.pathToDefinition = pathToDefinition; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); - if (opOrPath instanceof Operation) { - this.operationObject = opOrPath; - this.pathObject = opOrPath.pathObject; + if (_.has(opOrPathObject, 'consumes')) { + this.operationObject = opOrPathObject; + this.pathObject = opOrPathObject.pathObject; } else { this.operationObject = undefined; - this.pathObject = opOrPath; + this.pathObject = opOrPathObject; } - // Assign Swagger definition properties to the parameter for easy access + // Assign local properties from the Swagger definition properties _.assign(this, definition); debug('Found %s parameter (%s in %s) at %s', _.isUndefined(this.operationObject) ? 'path-level' : 'operation', definition.name, definition.in, - ptr); + this.ptr); } /** @@ -1278,7 +1640,7 @@ Parameter.prototype.getSchema = function () { * @returns {*} The sample value */ Parameter.prototype.getSample = function () { - return this.pathObject.api.plugin.getSample(this.computedSchema); + return helpers.getJSONSchemaMocker()(this.computedSchema); }; /** @@ -1305,11 +1667,9 @@ Parameter.prototype.getSample = function () { * parameter is missing. */ Parameter.prototype.getValue = function (req) { - var api = (this.operationObject || this.pathObject).api; - if (_.isUndefined(req)) { throw new TypeError('req is required'); - } else if (api.plugin.parameterLocations.indexOf(this.in) === -1) { + } else if (helpers.parameterLocations.indexOf(this.in) === -1) { throw new Error('Invalid \'in\' value: ' + this.in); } @@ -1378,7 +1738,7 @@ Parameter.prototype.getValue = function (req) { module.exports = Parameter; -},{"./operation":5,"./parameter-value":6,"debug":22,"lodash":194,"url":222}],8:[function(require,module,exports){ +},{"../helpers":2,"./parameter-value":6,"debug":20,"json-refs":170,"lodash":192,"url":220}],8:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -1407,6 +1767,11 @@ module.exports = Parameter; var _ = require('lodash'); var debug = require('debug')('sway:path'); +var helpers = require('../helpers'); +var JsonRefs = require('json-refs'); +var Operation = require('./operation'); +var Parameter = require('./parameter'); +var pathToRegexp = require('path-to-regexp'); /** * The Path object. @@ -1418,34 +1783,59 @@ var debug = require('debug')('sway:path'); * * @param {SwaggerApi} api - The Swagger API object * @param {string} path - The path string - * @param {ptr} ptr - The JSON Pointer to the path * @param {object} definition - The path definition - * @param {regexp} regexp - The regexp used to match request paths against this path + * @param {string[]} pathToDefinition - The path segments to the path definition * * @property {SwaggerApi} api - The Swagger API object * @property {object} definition - The path definition - * @property {Operation[]} operationObjects - The operation objects - * @property {Parameter[]} parameterObjects - The path-level parameter objects + * @property {Operation[]} operationObjects - The `Operation` objects + * @property {Parameter[]} parameterObjects - The path-level `Parameter` objects * @property {string} path - The path string + * @property {string[]} pathToDefinition - The path segments to the path definition * @property {ptr} ptr - The JSON Pointer to the path - * @property {regexp} regexp - The regexp used to match request paths against this path + * @property {regexp} regexp - The `RegExp` used to match request paths against this path * * @constructor */ -function Path (api, path, ptr, definition, regexp) { - this.api = api; - this.path = path; - this.ptr = ptr; - this.definition = definition; - this.regexp = regexp; +function Path (api, path, definition, pathToDefinition) { + var basePathPrefix = api.definitionAllResolved.basePath || '/'; + var that = this; - // Assign Swagger definition properties to the operation for easy access + // TODO: We could/should refactor this to use the path module + + // Remove trailing slash from the basePathPrefix so we do not end up with double slashes + if (basePathPrefix.charAt(basePathPrefix.length - 1) === '/') { + basePathPrefix = basePathPrefix.substring(0, basePathPrefix.length - 1); + } + + // Assign local properties + this.api = api; + this.definition = definition; + this.path = path; + this.pathToDefinition = pathToDefinition; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); + this.regexp = pathToRegexp(basePathPrefix + path.replace(/\{/g, ':').replace(/\}/g, '')); + + // Assign local properties from the Swagger definition properties _.assign(this, definition); - debug('Found path at %s', ptr); + this.parameterObjects = _.map(definition.parameters, function (paramDef, index) { + return new Parameter(that, + paramDef, + pathToDefinition.concat(['parameters', index.toString()])); + }); + this.operationObjects = _.reduce(definition, function (operations, operationDef, method) { + if (helpers.supportedHttpMethods.indexOf(method) > -1) { + operations.push(new Operation(that, + method, + operationDef, + pathToDefinition.concat(method))); + } - this.parameterObjects = api.plugin.getPathParameters(this); - this.operationObjects = api.plugin.getOperations(this); + return operations; + }, []); + + debug('Found path at %s', this.ptr); } /** @@ -1495,7 +1885,7 @@ Path.prototype.getParameters = function () { module.exports = Path; -},{"debug":22,"lodash":194}],9:[function(require,module,exports){ +},{"../helpers":2,"./operation":5,"./parameter":7,"debug":20,"json-refs":170,"lodash":192,"path-to-regexp":199}],9:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -1524,11 +1914,11 @@ module.exports = Path; var _ = require('lodash'); var debug = require('debug')('sway:response'); -var sHelpers = require('../helpers'); +var helpers = require('../helpers'); +var jsonValidator = helpers.getJSONSchemaValidator(); +var JsonRefs = require('json-refs'); var YAML = require('js-yaml'); -var jsonValidator; - /** * The Swagger Response object. * @@ -1537,30 +1927,31 @@ var jsonValidator; * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {Operation} operation - The Operation object - * @param {string} ptr - The JSON Pointer to the response - * @param {object} definition - The parameter definition + * @param {Operation} operationObject - The `Operation` object * @param {string} statusCode - The status code + * @param {object} definition - The parameter definition + * @param {string[]} pathToDefinition - The path segments to the path definition * * @property {object} definition - The response definition * @property {Operation} operationObject - The Operation object + * @property {string[]} pathToDefinition - The path segments to the path definition * @property {string} ptr - The JSON Pointer to the response definition * @property {string} statusCode - The status code * * @constructor */ -function Response (operation, ptr, definition, statusCode) { +function Response (operationObject, statusCode, definition, pathToDefinition) { + // Assign local properties this.definition = definition; - this.operationObject = operation; - this.ptr = ptr; + this.operationObject = operationObject; + this.pathToDefinition = pathToDefinition; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); this.statusCode = statusCode; - // Assign Swagger definition properties to the parameter for easy access + // Assign local properties from the Swagger definition properties _.assign(this, definition); - debug('Found %s response at %s', statusCode, ptr); - - jsonValidator = operation.api.plugin.getJSONSchemaValidator(); + debug('Found %s response at %s', statusCode, this.ptr); } /** @@ -1597,7 +1988,7 @@ Response.prototype.getSample = function () { var sample; if (!_.isUndefined(this.definition.schema)) { - sample = this.operationObject.api.plugin.getSample(this.definition.schema); + sample = helpers.getJSONSchemaMocker()(this.definition.schema); } return sample; @@ -1615,7 +2006,6 @@ Response.prototype.validateResponse = function (res) { errors: [], warnings: [] }; - var that = this; var bodyValue; var bvResults; @@ -1630,7 +2020,7 @@ Response.prototype.validateResponse = function (res) { // Validate the Content-Type except for void responses, 204 responses and 304 responses as they have no body if (!_.isUndefined(this.definition.schema) && _.indexOf(['204', '304'], this.statusCode) === -1) { - sHelpers.validateContentType(res.headers['content-type'], this.operationObject.produces, results); + helpers.validateContentType(res.headers['content-type'], this.operationObject.produces, results); } // Validate the response headers @@ -1639,28 +2029,28 @@ Response.prototype.validateResponse = function (res) { var hvResults; try { - headerValue = that.operationObject.api.plugin.convertValue(schema, - { - collectionFormat: schema.collectionFormat - }, - // Overly cautious - res.headers[name.toLowerCase()] || - res.headers[name] || - schema.default); + headerValue = helpers.convertValue(schema, + { + collectionFormat: schema.collectionFormat + }, + // Overly cautious + res.headers[name.toLowerCase()] || + res.headers[name] || + schema.default); } catch (err) { results.errors.push({ - code: 'INVALID_RESPONSE_HEADER', - errors: err.errors || [ - { - code: err.code, - message: err.message, - path: err.path - } - ], - message: 'Invalid header (' + name + '): ' + err.message, - name: name, - path: err.path - }); + code: 'INVALID_RESPONSE_HEADER', + errors: err.errors || [ + { + code: err.code, + message: err.message, + path: err.path + } + ], + message: 'Invalid header (' + name + '): ' + err.message, + name: name, + path: err.path + }); } // Due to ambiguity in the Swagger 2.0 Specification (https://github.com/swagger-api/swagger-spec/issues/321), it @@ -1670,7 +2060,7 @@ Response.prototype.validateResponse = function (res) { // We also do not want to validate date objects because it is redundant. If we have already converted the value // from a string+format to a date, we know it passes schema validation. if (!_.isUndefined(headerValue) && !_.isDate(headerValue)) { - hvResults = sHelpers.validateAgainstSchema(jsonValidator, schema, headerValue); + hvResults = helpers.validateAgainstSchema(jsonValidator, schema, headerValue); if (hvResults.errors.length > 0) { results.errors.push({ @@ -1691,10 +2081,10 @@ Response.prototype.validateResponse = function (res) { // Validate response for non-void responses if (!_.isUndefined(this.definition.schema) && _.indexOf(['204', '304'], this.statusCode) === -1) { try { - bodyValue = that.operationObject.api.plugin.convertValue(this.definition.schema, { + bodyValue = helpers.convertValue(this.definition.schema, { encoding: res.encoding }, res.body); - bvResults = sHelpers.validateAgainstSchema(jsonValidator, this.definition.schema, bodyValue); + bvResults = helpers.validateAgainstSchema(jsonValidator, this.definition.schema, bodyValue); } catch (err) { bvResults = { errors: [ @@ -1724,7 +2114,7 @@ Response.prototype.validateResponse = function (res) { module.exports = Response; -},{"../helpers":2,"debug":22,"js-yaml":142,"lodash":194}],10:[function(require,module,exports){ +},{"../helpers":2,"debug":20,"js-yaml":140,"json-refs":170,"lodash":192}],10:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -1779,7 +2169,7 @@ module.exports.password = function (gen, schema) { return stringMocker(filterSchema(schema)); }; -},{"js-base64":141,"json-schema-faker/lib/types/string":180,"lodash":194}],11:[function(require,module,exports){ +},{"js-base64":139,"json-schema-faker/lib/types/string":178,"lodash":192}],11:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -1825,594 +2215,7 @@ module.exports.double = returnTrue; module.exports.float = returnTrue; module.exports.password = returnTrue; -},{"lodash":194}],12:[function(require,module,exports){ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 Apigee Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -'use strict'; - -var _ = require('lodash'); - -// https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#parameter-object -var parameterSchemaProperties = [ - 'allowEmptyValue', - 'default', - 'description', - 'enum', - 'exclusiveMaximum', - 'exclusiveMinimum', - 'format', - 'items', - 'maxItems', - 'maxLength', - 'maximum', - 'minItems', - 'minLength', - 'minimum', - 'multipleOf', - 'pattern', - 'type', - 'uniqueItems' -]; - -module.exports.getParameterSchema = function (parameter) { - var schema; - - if (_.isUndefined(parameter.schema)) { - schema = {}; - - // Build the schema from the schema-like parameter structure - _.forEach(parameterSchemaProperties, function (name) { - if (!_.isUndefined(parameter[name])) { - schema[name] = parameter[name]; - } - }); - } else { - schema = parameter.schema; - } - - return schema; -}; - -module.exports.supportedHttpMethods = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch']; - -},{"lodash":194}],13:[function(require,module,exports){ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 Apigee Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -'use strict'; - -var _ = require('lodash'); -var dirname = require('path').dirname; -var formatGenerators = require('./format-generators'); -var helpers = require('../../helpers'); -var JsonRefs = require('json-refs'); -var Operation = require('../../types/operation'); -var Parameter = require('../../types/parameter'); -var Path = require('../../types/path'); -var pathToRegexp = require('path-to-regexp'); -var Response = require('../../types/response'); -var SwaggerApi = require('../../types/api'); -var validators = require('./validators'); -var vHelpers = require('./helpers'); -var YAML = require('js-yaml'); - -var collectionFormats = [undefined, 'csv', 'multi', 'pipes', 'ssv', 'tsv']; -var customFormatValidators = require('./format-validators'); -var docsUrl = 'https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md'; -var jsonSchemaValidator = helpers.createJSONValidator({ - formatValidators: customFormatValidators -}); -var mocker = helpers.createJSONSchemaMocker({ - formatGenerators: formatGenerators -}); -var parameterLocations = ['body', 'formData', 'header', 'path', 'query']; -var types = ['array', 'boolean', 'integer', 'object', 'number', 'string']; -var version = '2.0'; - -function realConvertValue (schema, options, value) { - var originalValue = value; // Used in error reporting for invalid values - var type = _.isPlainObject(schema) ? schema.type : undefined; - var pValue = value; - var pType = typeof pValue; - var err; - - // If there is an explicit type provided, make sure it's one of the supported ones - if (_.has(schema, 'type') && types.indexOf(type) === -1) { - throw new TypeError('Invalid \'type\' value: ' + type); - } - - // Since JSON Schema allows you to not specify a type and it is treated as a wildcard of sorts, we should not do any - // coercion for these types of values. - if (_.isUndefined(type)) { - return value; - } - - // If there is no value, do not convert it - if (_.isUndefined(value)) { - return value; - } - - // Convert Buffer value to String - // (We use this type of check to identify Buffer objects. The browser does not have a Buffer type and to avoid having - // import the browserify buffer module, we just do a simple check. This is brittle but should work.) - if (_.isFunction(value.readUInt8)) { - value = value.toString(options.encoding); - pValue = value; - pType = typeof value; - } - - // If the value is empty and empty is allowed, use it - if (schema.allowEmptyValue && value === '') { - return value; - } - - // Attempt to parse the string as JSON if the type is array or object - if (['array', 'object'].indexOf(type) > -1) { - try { - value = JSON.parse(value); - } catch (err) { - // Nothing to do here, just fall through - } - } - - switch (type) { - case 'array': - if (_.isString(value)) { - if (collectionFormats.indexOf(options.collectionFormat) === -1) { - throw new TypeError('Invalid \'collectionFormat\' value: ' + options.collectionFormat); - } - - switch (options.collectionFormat) { - case 'csv': - case undefined: - value = value.split(','); - break; - case 'multi': - value = [value]; - break; - case 'pipes': - value = value.split('|'); - break; - case 'ssv': - value = value.split(' '); - break; - case 'tsv': - value = value.split('\t'); - break; - - // no default - } - } - - if (_.isArray(value)) { - value = _.map(value, function (item, index) { - return realConvertValue(_.isArray(schema.items) ? schema.items[index] : schema.items, options, item); - }); - } - - break; - case 'boolean': - if (!_.isBoolean(value)) { - if (value === 'true') { - value = true; - } else if (value === 'false') { - value = false; - } else { - err = new TypeError('Not a valid boolean: ' + value); - } - } - - break; - case 'integer': - if (!_.isNumber(value)) { - if (_.isString(value) && _.trim(value).length === 0) { - value = NaN; - } - - value = Number(value); - - if (_.isNaN(value)) { - err = new TypeError('Not a valid integer: ' + originalValue); - } - } - - break; - case 'number': - if (!_.isNumber(value)) { - if (_.isString(value) && _.trim(value).length === 0) { - value = NaN; - } - - value = Number(value); - - if (_.isNaN(value)) { - err = new TypeError('Not a valid number: ' + originalValue); - } - } - break; - case 'string': - if (['date', 'date-time'].indexOf(schema.format) > -1) { - if (_.isString(value)) { - value = new Date(value); - } - - if (!_.isDate(value) || value.toString() === 'Invalid Date') { - err = new TypeError('Not a valid ' + schema.format + ' string: ' + originalValue); - - err.code = 'INVALID_FORMAT'; - } - } else if (!_.isString(value)) { - err = new TypeError('Not a valid string: ' + value); - } - - break; - - // no default - } - - if (!_.isUndefined(err)) { - // Convert the error to be more like a JSON Schema validation error - if (_.isUndefined(err.code)) { - err.code = 'INVALID_TYPE'; - err.message = 'Expected type ' + type + ' but found type ' + pType; - } else { - err.message = 'Object didn\'t pass validation for format ' + schema.format + ': ' + pValue; - } - - // Format and type errors resemble JSON Schema validation errors - err.failedValidation = true; - err.path = []; - - throw err; - } - - return value; -} - -function removeCirculars (doc) { - function walk (ancestors, node, path) { - function walkItem (item, segment) { - path.push(segment); - walk(ancestors, item, path); - path.pop(); - } - - // We do not process circular objects again - if (ancestors.indexOf(node) === -1) { - ancestors.push(node); - - if (_.isArray(node) || _.isPlainObject(node)) { - _.each(node, function (member, indexOrKey) { - walkItem(member, indexOrKey.toString()); - }); - } - } else { - _.set(doc, path, {}); - } - - ancestors.pop(); - } - - walk([], doc, []); -} - -module.exports.collectionFormats = collectionFormats; - -// The URL to the Swagger 2.0 documentation -module.exports.documentation = docsUrl; - -module.exports.parameterLocations = parameterLocations; - -// The array of supported HTTP methods for each path -module.exports.supportedHttpMethods = vHelpers.supportedHttpMethods; - -module.exports.types = types; - -// The version for this Swagger version -module.exports.version = version; - -/** - * Returns whether or not the provided definition can be processed. - * - * @param {object} definition - The potential Swagger definition to test - * - * @returns {boolean} Returns true only if the definition represents a Swagger 2.0 definition - */ -module.exports.canProcess = function (definition) { - return definition.swagger === version; -}; - -/** - * Converts a raw JavaScript value to a JSON Schema value based on its schema. - * - * @param {object} schema - The schema for the value - * @param {object} options - The conversion options - * @param {string} [options.collectionFormat] - The collection format - * @param {string} [options.encoding] - The encoding if the raw value is a `Buffer` - * @param {*} value - The value to convert - * - * @returns {*} The converted value - */ -module.exports.convertValue = function (schema, options, value) { - return realConvertValue(schema, options, value); -}; - -/** - * Creates a SwaggerApi object from the provided Swagger definition. - * - * @param {object} definition - The Swagger definition - * @param {object} options - The options passed to swaggerApi.create - * - * @returns {Promise} A promise that resolves the SwaggerApi after processing - */ -module.exports.createSwaggerApi = function (definition, options) { - var cOptions = _.cloneDeep(options); - var jsonRefsOptions = cOptions.jsonRefs || {}; - - // Include invalid reference information - jsonRefsOptions.includeInvalid = true; - - // Update the json-refs options to use the definition location - if (_.isString(cOptions.definition)) { - jsonRefsOptions.relativeBase = dirname(cOptions.definition); - } - - // Update the json-refs options to process YAML - if (_.isUndefined(jsonRefsOptions.loaderOptions)) { - jsonRefsOptions.loaderOptions = {}; - } - - if (_.isUndefined(jsonRefsOptions.loaderOptions.processContent)) { - jsonRefsOptions.loaderOptions.processContent = function (res, cb) { - cb(undefined, YAML.safeLoad(res.text)); - }; - } - - return JsonRefs.resolveRefs(definition, jsonRefsOptions) - .then(function (results) { - // We need to remove all circular objects as z-schema does not work with them: - // https://github.com/zaggino/z-schema/issues/137 - removeCirculars(results.resolved); - - return new SwaggerApi(module.exports, definition, results.resolved, results.refs, options); - }); -}; - -/** - * Returns a z-schema validator. - * - * @returns {Object} The z-schema validator to use - */ -module.exports.getJSONSchemaValidator = function () { - return jsonSchemaValidator; -} - -/** - * Creates an array of Operation objects for each operation defined in path definition. - * - * @param {Path} pathObject - The Path object - * - * @returns {Operation[]} The Operation object array - */ -module.exports.getOperations = function (pathObject) { - var operations = []; - var pPath = JsonRefs.pathFromPtr(pathObject.ptr); - var pParams = _.reduce(pathObject.definition.parameters, function (parameters, paramDef, index) { - parameters[paramDef.name + ':' + paramDef.in] = { - path: pPath.concat(['parameters', index.toString()]), - definition: paramDef - }; - - return parameters; - }, {}); - - _.forEach(pathObject.definition, function (operation, method) { - // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { - return; - } - - var cOperation = _.cloneDeep(operation); // Clone so we do not alter the input - var oParams = {}; // Used to keep track of unique parameters - var oPath = pPath.concat(method); - - // Add path parameters - _.forEach(pParams, function (pParam, key) { - oParams[key] = pParam; - }); - - // Add operation parameters (Overrides path-level parameters of same name+in combination) - _.forEach(operation.parameters, function (paramDef, index) { - oParams[paramDef.name + ':' + paramDef.in] = { - path: oPath.concat(['parameters', index.toString()]), - definition: paramDef - }; - }); - - // Attach our computed parameters/security to the operation - cOperation.parameters = _.map(_.values(oParams), function (parameter) { - // Used later by getOperationParameters to circumvent the chicken/egg situation (Removed there as well) - parameter.definition.$$$ptr$$$ = JsonRefs.pathToPtr(parameter.path); - - return parameter.definition; - }); - - - if (_.isUndefined(cOperation.security)) { - cOperation.security = pathObject.api.resolved.security; - } - - operations.push(new Operation(pathObject.api, - pathObject, - method, - JsonRefs.pathToPtr(oPath), - cOperation, - cOperation.consumes || pathObject.api.resolved.consumes || [], - cOperation.produces || pathObject.api.resolved.produces || [])); - }); - - return operations; -}; - -/** - * Returns an array of Parameter objects for the provided Operation. - * - * @param {Operation} operation - The Operation object - * - * @returns {Parameter[]} The Parameter object array - */ -module.exports.getOperationParameters = function (operation) { - var pParams = _.reduce(operation.pathObject.getParameters(), function (params, param) { - params[param.ptr] = param; - - return params; - }, {}); - - return _.map(operation.parameters, function (paramDef) { - var ptr = paramDef.$$$ptr$$$; - var pParam = pParams[ptr]; - - // Remove so we do not have these properties littered throughout the document - delete paramDef.$$$ptr$$$; - - if (_.isUndefined(pParam)) { - return new Parameter(operation, ptr, paramDef, vHelpers.getParameterSchema(paramDef)); - } else { - return pParam; - } - }); -}; - -/** - * Returns an array of Response objects for the provided Operation. - * - * @param {Operation} operation - The Operation object - * - * @returns {Response[]} The Response object array - */ -module.exports.getOperationResponses = function (operation) { - return _.map(operation.definition.responses, function (responseDef, code) { - return new Response(operation, - JsonRefs.pathToPtr(JsonRefs.pathFromPtr(operation.ptr).concat(['responses', code])), - responseDef, - code); - }); -}; - -/** - * Returns an array of path-level Parameter objects for the provided Path. - * - * @param {Path} path - The Path object - * - * @returns {Parameter[]} The Parameter object array - */ -module.exports.getPathParameters = function (path) { - return _.map(path.definition.parameters, function (paramDef, index) { - return new Parameter(path, - JsonRefs.pathToPtr(JsonRefs.pathFromPtr(path.ptr).concat(index.toString())), - paramDef, - vHelpers.getParameterSchema(paramDef)); - }); -}; - -/** - * Creates an array of Path objects for each path defined in the Swagger document. - * - * @param {SwaggerApi} api - The Swagger API object - * - * @returns {Path[]} The Operation object array - */ -module.exports.getPaths = function (api) { - var basePathPrefix = api.resolved.basePath || '/'; - - // Remove trailing slash from the basePathPrefix so we do not end up with double slashes - if (basePathPrefix.charAt(basePathPrefix.length - 1) === '/') { - basePathPrefix = basePathPrefix.substring(0, basePathPrefix.length - 1); - } - - return _.map(api.resolved.paths, function (pathDef, path) { - return new Path(api, - path, - JsonRefs.pathToPtr(['paths', path]), - pathDef, - pathToRegexp(basePathPrefix + path.replace(/\{/g, ':').replace(/\}/g, ''))); - - }); -}; - -/** - * Creates a sample value for the provided JSON Schema. - * - * @param {*} schema - The JSON Schema - * - * @returns {*} The sample value - */ -module.exports.getSample = function (schema) { - return mocker(schema); -}; - -/** - * Returns an array of functions used to validate Swagger 2.0 documents semantically. - * - * @returns {function[]} The validators to use - */ -module.exports.getSemanticValidators = function () { - return validators.semanticValidators; -}; - -/** - * Returns a function used to validate Swagger 2.0 documents against its JSON Schema. - * - * @returns {function} The validator to use - */ -module.exports.getStructuralValidator = function () { - return validators.jsonSchemaValidator; -}; - -},{"../../helpers":2,"../../types/api":4,"../../types/operation":5,"../../types/parameter":7,"../../types/path":8,"../../types/response":9,"./format-generators":10,"./format-validators":11,"./helpers":12,"./validators":15,"js-yaml":142,"json-refs":172,"lodash":194,"path":197,"path-to-regexp":201}],14:[function(require,module,exports){ +},{"lodash":192}],12:[function(require,module,exports){ module.exports={ "title": "A JSON Schema for Swagger 2.0 API.", "id": "http://swagger.io/v2/schema.json#", @@ -4004,7 +3807,7 @@ module.exports={ } } } -},{}],15:[function(require,module,exports){ +},{}],13:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -4032,10 +3835,9 @@ module.exports={ 'use strict'; var _ = require('lodash'); -var helpers = require('../../helpers'); +var helpers = require('../helpers'); var JsonRefs = require('json-refs'); var swaggerSchema = require('./schema.json'); -var vHelpers = require('./helpers'); function getSchemaProperties (schema) { var properties = _.keys(schema.properties); // Start with the defined properties @@ -4112,7 +3914,7 @@ function walkSchema (api, blacklist, schema, path, handlers, response) { * @returns {object} Object containing the errors and warnings of the validation */ function validateStructure (api) { - var results = helpers.validateAgainstSchema(api.plugin.getJSONSchemaValidator(), swaggerSchema, api.resolved); + var results = helpers.validateAgainstSchema(helpers.getJSONSchemaValidator(), swaggerSchema, api.definitionAllResolved); // Make complex JSON Schema validation errors easier to understand (Issue 15) results.errors = results.errors.map(function (error) { @@ -4187,7 +3989,7 @@ function validateDefaultValue (api, response, schema, path) { var result; if (!_.isUndefined(schema.default)) { - result = helpers.validateAgainstSchema(api.plugin.getJSONSchemaValidator(), schema, schema.default); + result = helpers.validateAgainstSchema(helpers.getJSONSchemaValidator(), schema, schema.default); _.forEach(result.errors, function (error) { error.path = path.concat(error.path.concat('default')); @@ -4312,19 +4114,19 @@ function validateReferences (api) { } // Identify referenceable definitions - _.forEach(api.resolved.definitions, function (def, name) { + _.forEach(api.definitionAllResolved.definitions, function (def, name) { referenceable.push(JsonRefs.pathToPtr(['definitions', name])); }); - _.forEach(api.resolved.parameters, function (def, name) { + _.forEach(api.definitionAllResolved.parameters, function (def, name) { referenceable.push(JsonRefs.pathToPtr(['parameters', name])); }); - _.forEach(api.resolved.responses, function (def, name) { + _.forEach(api.definitionAllResolved.responses, function (def, name) { referenceable.push(JsonRefs.pathToPtr(['responses', name])); }); - _.forEach(api.resolved.securityDefinitions, function (def, name) { + _.forEach(api.definitionAllResolved.securityDefinitions, function (def, name) { var sPath = ['securityDefinitions', name]; referenceable.push(JsonRefs.pathToPtr(sPath)); @@ -4367,16 +4169,16 @@ function validateReferences (api) { }); // Identify references and validate missing references for non-JSON References (security) - _.forEach(api.resolved.security, createSecurityProcessor(['security'])); + _.forEach(api.definitionAllResolved.security, createSecurityProcessor(['security'])); - _.forEach(api.resolved.paths, function (pathDef, name) { + _.forEach(api.definitionAllResolved.paths, function (pathDef, name) { var pPath = ['paths', name]; _.forEach(pathDef.security, createSecurityProcessor(pPath.concat('security'))); _.forEach(pathDef, function (operationDef, method) { // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { + if (_.indexOf(helpers.supportedHttpMethods, method) === -1) { return; } @@ -4440,7 +4242,7 @@ function validateSchemaObjects (api) { // Create JSON Schema for non-body parameters if (parameterDef.in !== 'body') { - parameterDef = vHelpers.getParameterSchema(parameterDef); + parameterDef = helpers.computeParameterSchema(parameterDef); } walkSchema(api, blacklist, parameterDef, pPath, validators, response); @@ -4462,18 +4264,18 @@ function validateSchemaObjects (api) { } // Validate definitions - _.forEach(api.resolved.definitions, function (definitionDef, name) { + _.forEach(api.definitionAllResolved.definitions, function (definitionDef, name) { walkSchema(api, blacklist, definitionDef, ['definitions', name], validators, response); }); // Validate global parameter definitions - validateParameters(api.resolved.parameters, ['parameters']); + validateParameters(api.definitionAllResolved.parameters, ['parameters']); // Validate global response definitions - validateResponses(api.resolved.responses, ['responses']); + validateResponses(api.definitionAllResolved.responses, ['responses']); // Validate paths and operations - _.forEach(api.resolved.paths, function (pathDef, path) { + _.forEach(api.definitionAllResolved.paths, function (pathDef, path) { var pPath = ['paths', path]; // Validate path-level parameter definitions @@ -4483,7 +4285,7 @@ function validateSchemaObjects (api) { var oPath = pPath.concat(method); // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { + if (_.indexOf(helpers.supportedHttpMethods, method) === -1) { return; } @@ -4537,7 +4339,7 @@ function validatePathsAndOperations (api) { return seenParameters; } - _.reduce(api.resolved.paths, function (metadata, pathDef, path) { + _.reduce(api.definitionAllResolved.paths, function (metadata, pathDef, path) { var declaredPathParameters = []; var normalizedPath = path; var pPath = ['paths', path]; @@ -4583,7 +4385,7 @@ function validatePathsAndOperations (api) { var parameters; // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { + if (_.indexOf(helpers.supportedHttpMethods, method) === -1) { return; } @@ -4673,7 +4475,7 @@ module.exports = { ] }; -},{"../../helpers":2,"./helpers":12,"./schema.json":14,"json-refs":172,"lodash":194}],16:[function(require,module,exports){ +},{"../helpers":2,"./schema.json":12,"json-refs":170,"lodash":192}],14:[function(require,module,exports){ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; ;(function (exports) { @@ -4799,9 +4601,9 @@ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; exports.fromByteArray = uint8ToBase64 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) -},{}],17:[function(require,module,exports){ +},{}],15:[function(require,module,exports){ -},{}],18:[function(require,module,exports){ +},{}],16:[function(require,module,exports){ (function (global){ /*! * The buffer module from node.js, for the browser. @@ -6354,14 +6156,14 @@ function blitBuffer (src, dst, offset, length) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"base64-js":16,"ieee754":137,"isarray":19}],19:[function(require,module,exports){ +},{"base64-js":14,"ieee754":135,"isarray":17}],17:[function(require,module,exports){ var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; -},{}],20:[function(require,module,exports){ +},{}],18:[function(require,module,exports){ (function (Buffer){ // Chance.js 0.8.0 // http://chancejs.com @@ -8959,7 +8761,7 @@ module.exports = Array.isArray || function (arr) { }).call(this,require("buffer").Buffer) -},{"buffer":18}],21:[function(require,module,exports){ +},{"buffer":16}],19:[function(require,module,exports){ /** * Expose `Emitter`. @@ -9125,7 +8927,7 @@ Emitter.prototype.hasListeners = function(event){ return !! this.listeners(event).length; }; -},{}],22:[function(require,module,exports){ +},{}],20:[function(require,module,exports){ /** * This is the web browser implementation of `debug()`. @@ -9295,7 +9097,7 @@ function localstorage(){ } catch (e) {} } -},{"./debug":23}],23:[function(require,module,exports){ +},{"./debug":21}],21:[function(require,module,exports){ /** * This is the common logic for both the Node.js and web browser @@ -9494,7 +9296,7 @@ function coerce(val) { return val; } -},{"ms":195}],24:[function(require,module,exports){ +},{"ms":193}],22:[function(require,module,exports){ (function (Buffer){ /*! * @description Recursive object extending @@ -9643,7 +9445,7 @@ var deepExtend = module.exports = function (/*obj_1, [obj_2], [obj_N]*/) { }).call(this,require("buffer").Buffer) -},{"buffer":18}],25:[function(require,module,exports){ +},{"buffer":16}],23:[function(require,module,exports){ 'use strict'; var $ = require('./util/uri-helpers'); @@ -9717,7 +9519,7 @@ var instance = module.exports = function() { instance.util = $; -},{"./util/find-reference":27,"./util/normalize-schema":28,"./util/resolve-schema":29,"./util/uri-helpers":30}],26:[function(require,module,exports){ +},{"./util/find-reference":25,"./util/normalize-schema":26,"./util/resolve-schema":27,"./util/uri-helpers":28}],24:[function(require,module,exports){ 'use strict'; var clone = module.exports = function(obj, seen) { @@ -9752,7 +9554,7 @@ var clone = module.exports = function(obj, seen) { return target; }; -},{}],27:[function(require,module,exports){ +},{}],25:[function(require,module,exports){ 'use strict'; var $ = require('./uri-helpers'); @@ -9800,7 +9602,7 @@ var find = module.exports = function(id, refs) { return target; }; -},{"./uri-helpers":30}],28:[function(require,module,exports){ +},{"./uri-helpers":28}],26:[function(require,module,exports){ 'use strict'; var $ = require('./uri-helpers'); @@ -9865,7 +9667,7 @@ module.exports = function(fakeroot, schema, push) { return copy; }; -},{"./clone-obj":26,"./uri-helpers":30}],29:[function(require,module,exports){ +},{"./clone-obj":24,"./uri-helpers":28}],27:[function(require,module,exports){ 'use strict'; var $ = require('./uri-helpers'); @@ -9912,7 +9714,7 @@ module.exports = function(obj, refs, resolve) { return copy(obj, refs, parent, resolve); }; -},{"./find-reference":27,"./uri-helpers":30,"deep-extend":24}],30:[function(require,module,exports){ +},{"./find-reference":25,"./uri-helpers":28,"deep-extend":22}],28:[function(require,module,exports){ 'use strict'; // https://gist.github.com/pjt33/efb2f1134bab986113fd @@ -10016,7 +9818,7 @@ module.exports = { getDocumentURI: getDocumentURI }; -},{}],31:[function(require,module,exports){ +},{}],29:[function(require,module,exports){ //protected helper class function _SubRange(low, high) { this.low = low; @@ -10162,7 +9964,7 @@ DiscontinuousRange.prototype.clone = function () { module.exports = DiscontinuousRange; -},{}],32:[function(require,module,exports){ +},{}],30:[function(require,module,exports){ /* Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved. @@ -15905,7 +15707,7 @@ module.exports = DiscontinuousRange; })); /* vim: set sw=4 ts=4 et tw=80 : */ -},{}],33:[function(require,module,exports){ +},{}],31:[function(require,module,exports){ function Address (faker) { var f = faker.fake, Helpers = faker.helpers; @@ -16036,7 +15838,7 @@ function Address (faker) { module.exports = Address; -},{}],34:[function(require,module,exports){ +},{}],32:[function(require,module,exports){ var Commerce = function (faker) { var self = this; @@ -16126,7 +15928,7 @@ var Commerce = function (faker) { }; module['exports'] = Commerce; -},{}],35:[function(require,module,exports){ +},{}],33:[function(require,module,exports){ var Company = function (faker) { var self = this; @@ -16191,7 +15993,7 @@ var Company = function (faker) { } module['exports'] = Company; -},{}],36:[function(require,module,exports){ +},{}],34:[function(require,module,exports){ var _Date = function (faker) { var self = this; self.past = function (years, refDate) { @@ -16282,7 +16084,7 @@ var _Date = function (faker) { }; module['exports'] = _Date; -},{}],37:[function(require,module,exports){ +},{}],35:[function(require,module,exports){ /* fake.js - generator method for combining faker methods based on string input @@ -16346,7 +16148,7 @@ function Fake (faker) { } module['exports'] = Fake; -},{}],38:[function(require,module,exports){ +},{}],36:[function(require,module,exports){ var Finance = function (faker) { var Helpers = faker.helpers, self = this; @@ -16433,7 +16235,7 @@ var Finance = function (faker) { } module['exports'] = Finance; -},{}],39:[function(require,module,exports){ +},{}],37:[function(require,module,exports){ var Hacker = function (faker) { var self = this; @@ -16485,7 +16287,7 @@ var Hacker = function (faker) { }; module['exports'] = Hacker; -},{}],40:[function(require,module,exports){ +},{}],38:[function(require,module,exports){ var Helpers = function (faker) { var self = this; @@ -16687,7 +16489,7 @@ String.prototype.capitalize = function () { //v1.0 */ module['exports'] = Helpers; -},{}],41:[function(require,module,exports){ +},{}],39:[function(require,module,exports){ var Image = function (faker) { var self = this; @@ -16751,7 +16553,7 @@ var Image = function (faker) { } module["exports"] = Image; -},{}],42:[function(require,module,exports){ +},{}],40:[function(require,module,exports){ /* this index.js file is used for including the faker library as a CommonJS module, instead of a bundle @@ -16886,7 +16688,7 @@ Faker.prototype.seed = function(value) { } module['exports'] = Faker; -},{"./address":33,"./commerce":34,"./company":35,"./date":36,"./fake":37,"./finance":38,"./hacker":39,"./helpers":40,"./image":41,"./internet":43,"./lorem":129,"./name":130,"./phone_number":131,"./random":132}],43:[function(require,module,exports){ +},{"./address":31,"./commerce":32,"./company":33,"./date":34,"./fake":35,"./finance":36,"./hacker":37,"./helpers":38,"./image":39,"./internet":41,"./lorem":127,"./name":128,"./phone_number":129,"./random":130}],41:[function(require,module,exports){ var password_generator = require('../vendor/password-generator.js'), random_ua = require('../vendor/user-agent'); @@ -17001,14 +16803,14 @@ var Internet = function (faker) { module["exports"] = Internet; -},{"../vendor/password-generator.js":135,"../vendor/user-agent":136}],44:[function(require,module,exports){ +},{"../vendor/password-generator.js":133,"../vendor/user-agent":134}],42:[function(require,module,exports){ module["exports"] = [ "#####", "####", "###" ]; -},{}],45:[function(require,module,exports){ +},{}],43:[function(require,module,exports){ module["exports"] = [ "#{city_prefix} #{Name.first_name}#{city_suffix}", "#{city_prefix} #{Name.first_name}", @@ -17016,7 +16818,7 @@ module["exports"] = [ "#{Name.last_name}#{city_suffix}" ]; -},{}],46:[function(require,module,exports){ +},{}],44:[function(require,module,exports){ module["exports"] = [ "North", "East", @@ -17027,7 +16829,7 @@ module["exports"] = [ "Port" ]; -},{}],47:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ module["exports"] = [ "town", "ton", @@ -17050,7 +16852,7 @@ module["exports"] = [ "shire" ]; -},{}],48:[function(require,module,exports){ +},{}],46:[function(require,module,exports){ module["exports"] = [ "Afghanistan", "Albania", @@ -17299,7 +17101,7 @@ module["exports"] = [ "Zimbabwe" ]; -},{}],49:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ module["exports"] = [ "AD", "AE", @@ -17553,7 +17355,7 @@ module["exports"] = [ "ZW" ]; -},{}],50:[function(require,module,exports){ +},{}],48:[function(require,module,exports){ module["exports"] = [ "Avon", "Bedfordshire", @@ -17563,12 +17365,12 @@ module["exports"] = [ "Cambridgeshire" ]; -},{}],51:[function(require,module,exports){ +},{}],49:[function(require,module,exports){ module["exports"] = [ "United States of America" ]; -},{}],52:[function(require,module,exports){ +},{}],50:[function(require,module,exports){ var address = {}; module['exports'] = address; address.city_prefix = require("./city_prefix"); @@ -17589,21 +17391,21 @@ address.street_name = require("./street_name"); address.street_address = require("./street_address"); address.default_country = require("./default_country"); -},{"./building_number":44,"./city":45,"./city_prefix":46,"./city_suffix":47,"./country":48,"./country_code":49,"./county":50,"./default_country":51,"./postcode":53,"./postcode_by_state":54,"./secondary_address":55,"./state":56,"./state_abbr":57,"./street_address":58,"./street_name":59,"./street_suffix":60,"./time_zone":61}],53:[function(require,module,exports){ +},{"./building_number":42,"./city":43,"./city_prefix":44,"./city_suffix":45,"./country":46,"./country_code":47,"./county":48,"./default_country":49,"./postcode":51,"./postcode_by_state":52,"./secondary_address":53,"./state":54,"./state_abbr":55,"./street_address":56,"./street_name":57,"./street_suffix":58,"./time_zone":59}],51:[function(require,module,exports){ module["exports"] = [ "#####", "#####-####" ]; -},{}],54:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"dup":53}],55:[function(require,module,exports){ +},{}],52:[function(require,module,exports){ +arguments[4][51][0].apply(exports,arguments) +},{"dup":51}],53:[function(require,module,exports){ module["exports"] = [ "Apt. ###", "Suite ###" ]; -},{}],56:[function(require,module,exports){ +},{}],54:[function(require,module,exports){ module["exports"] = [ "Alabama", "Alaska", @@ -17657,7 +17459,7 @@ module["exports"] = [ "Wyoming" ]; -},{}],57:[function(require,module,exports){ +},{}],55:[function(require,module,exports){ module["exports"] = [ "AL", "AK", @@ -17711,18 +17513,18 @@ module["exports"] = [ "WY" ]; -},{}],58:[function(require,module,exports){ +},{}],56:[function(require,module,exports){ module["exports"] = [ "#{building_number} #{street_name}" ]; -},{}],59:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ module["exports"] = [ "#{Name.first_name} #{street_suffix}", "#{Name.last_name} #{street_suffix}" ]; -},{}],60:[function(require,module,exports){ +},{}],58:[function(require,module,exports){ module["exports"] = [ "Alley", "Avenue", @@ -17951,7 +17753,7 @@ module["exports"] = [ "Wells" ]; -},{}],61:[function(require,module,exports){ +},{}],59:[function(require,module,exports){ module["exports"] = [ "Pacific/Midway", "Pacific/Pago_Pago", @@ -18098,20 +17900,20 @@ module["exports"] = [ "Pacific/Apia" ]; -},{}],62:[function(require,module,exports){ +},{}],60:[function(require,module,exports){ module["exports"] = [ "#{Name.name}", "#{Company.name}" ]; -},{}],63:[function(require,module,exports){ +},{}],61:[function(require,module,exports){ var app = {}; module['exports'] = app; app.name = require("./name"); app.version = require("./version"); app.author = require("./author"); -},{"./author":62,"./name":64,"./version":65}],64:[function(require,module,exports){ +},{"./author":60,"./name":62,"./version":63}],62:[function(require,module,exports){ module["exports"] = [ "Redhold", "Treeflex", @@ -18177,7 +17979,7 @@ module["exports"] = [ "Keylex" ]; -},{}],65:[function(require,module,exports){ +},{}],63:[function(require,module,exports){ module["exports"] = [ "0.#.#", "0.##", @@ -18186,7 +17988,7 @@ module["exports"] = [ "#.#.#" ]; -},{}],66:[function(require,module,exports){ +},{}],64:[function(require,module,exports){ module["exports"] = [ "2011-10-12", "2012-11-12", @@ -18194,7 +17996,7 @@ module["exports"] = [ "2013-9-12" ]; -},{}],67:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ module["exports"] = [ "1234-2121-1221-1211", "1212-1221-1121-1234", @@ -18202,7 +18004,7 @@ module["exports"] = [ "1228-1221-1221-1431" ]; -},{}],68:[function(require,module,exports){ +},{}],66:[function(require,module,exports){ module["exports"] = [ "visa", "mastercard", @@ -18210,14 +18012,14 @@ module["exports"] = [ "discover" ]; -},{}],69:[function(require,module,exports){ +},{}],67:[function(require,module,exports){ var business = {}; module['exports'] = business; business.credit_card_numbers = require("./credit_card_numbers"); business.credit_card_expiry_dates = require("./credit_card_expiry_dates"); business.credit_card_types = require("./credit_card_types"); -},{"./credit_card_expiry_dates":66,"./credit_card_numbers":67,"./credit_card_types":68}],70:[function(require,module,exports){ +},{"./credit_card_expiry_dates":64,"./credit_card_numbers":65,"./credit_card_types":66}],68:[function(require,module,exports){ module["exports"] = [ "###-###-####", "(###) ###-####", @@ -18225,12 +18027,12 @@ module["exports"] = [ "###.###.####" ]; -},{}],71:[function(require,module,exports){ +},{}],69:[function(require,module,exports){ var cell_phone = {}; module['exports'] = cell_phone; cell_phone.formats = require("./formats"); -},{"./formats":70}],72:[function(require,module,exports){ +},{"./formats":68}],70:[function(require,module,exports){ module["exports"] = [ "red", "green", @@ -18265,7 +18067,7 @@ module["exports"] = [ "silver" ]; -},{}],73:[function(require,module,exports){ +},{}],71:[function(require,module,exports){ module["exports"] = [ "Books", "Movies", @@ -18291,14 +18093,14 @@ module["exports"] = [ "Industrial" ]; -},{}],74:[function(require,module,exports){ +},{}],72:[function(require,module,exports){ var commerce = {}; module['exports'] = commerce; commerce.color = require("./color"); commerce.department = require("./department"); commerce.product_name = require("./product_name"); -},{"./color":72,"./department":73,"./product_name":75}],75:[function(require,module,exports){ +},{"./color":70,"./department":71,"./product_name":73}],73:[function(require,module,exports){ module["exports"] = { "adjective": [ "Small", @@ -18360,7 +18162,7 @@ module["exports"] = { ] }; -},{}],76:[function(require,module,exports){ +},{}],74:[function(require,module,exports){ module["exports"] = [ "Adaptive", "Advanced", @@ -18464,7 +18266,7 @@ module["exports"] = [ "Vision-oriented" ]; -},{}],77:[function(require,module,exports){ +},{}],75:[function(require,module,exports){ module["exports"] = [ "clicks-and-mortar", "value-added", @@ -18533,7 +18335,7 @@ module["exports"] = [ "rich" ]; -},{}],78:[function(require,module,exports){ +},{}],76:[function(require,module,exports){ module["exports"] = [ "synergies", "web-readiness", @@ -18581,7 +18383,7 @@ module["exports"] = [ "methodologies" ]; -},{}],79:[function(require,module,exports){ +},{}],77:[function(require,module,exports){ module["exports"] = [ "implement", "utilize", @@ -18645,7 +18447,7 @@ module["exports"] = [ "recontextualize" ]; -},{}],80:[function(require,module,exports){ +},{}],78:[function(require,module,exports){ module["exports"] = [ "24 hour", "24/7", @@ -18750,7 +18552,7 @@ module["exports"] = [ "zero tolerance" ]; -},{}],81:[function(require,module,exports){ +},{}],79:[function(require,module,exports){ var company = {}; module['exports'] = company; company.suffix = require("./suffix"); @@ -18762,14 +18564,14 @@ company.bs_adjective = require("./bs_adjective"); company.bs_noun = require("./bs_noun"); company.name = require("./name"); -},{"./adjective":76,"./bs_adjective":77,"./bs_noun":78,"./bs_verb":79,"./descriptor":80,"./name":82,"./noun":83,"./suffix":84}],82:[function(require,module,exports){ +},{"./adjective":74,"./bs_adjective":75,"./bs_noun":76,"./bs_verb":77,"./descriptor":78,"./name":80,"./noun":81,"./suffix":82}],80:[function(require,module,exports){ module["exports"] = [ "#{Name.last_name} #{suffix}", "#{Name.last_name}-#{Name.last_name}", "#{Name.last_name}, #{Name.last_name} and #{Name.last_name}" ]; -},{}],83:[function(require,module,exports){ +},{}],81:[function(require,module,exports){ module["exports"] = [ "ability", "access", @@ -18877,7 +18679,7 @@ module["exports"] = [ "workforce" ]; -},{}],84:[function(require,module,exports){ +},{}],82:[function(require,module,exports){ module["exports"] = [ "Inc", "and Sons", @@ -18885,19 +18687,19 @@ module["exports"] = [ "Group" ]; -},{}],85:[function(require,module,exports){ +},{}],83:[function(require,module,exports){ module["exports"] = [ "/34##-######-####L/", "/37##-######-####L/" ]; -},{}],86:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ module["exports"] = [ "/30[0-5]#-######-###L/", "/368#-######-###L/" ]; -},{}],87:[function(require,module,exports){ +},{}],85:[function(require,module,exports){ module["exports"] = [ "/6011-####-####-###L/", "/65##-####-####-###L/", @@ -18907,7 +18709,7 @@ module["exports"] = [ "/64[4-9]#-62##-####-####-###L/" ]; -},{}],88:[function(require,module,exports){ +},{}],86:[function(require,module,exports){ var credit_card = {}; module['exports'] = credit_card; credit_card.visa = require("./visa"); @@ -18921,14 +18723,14 @@ credit_card.solo = require("./solo"); credit_card.maestro = require("./maestro"); credit_card.laser = require("./laser"); -},{"./american_express":85,"./diners_club":86,"./discover":87,"./jcb":89,"./laser":90,"./maestro":91,"./mastercard":92,"./solo":93,"./switch":94,"./visa":95}],89:[function(require,module,exports){ +},{"./american_express":83,"./diners_club":84,"./discover":85,"./jcb":87,"./laser":88,"./maestro":89,"./mastercard":90,"./solo":91,"./switch":92,"./visa":93}],87:[function(require,module,exports){ module["exports"] = [ "/3528-####-####-###L/", "/3529-####-####-###L/", "/35[3-8]#-####-####-###L/" ]; -},{}],90:[function(require,module,exports){ +},{}],88:[function(require,module,exports){ module["exports"] = [ "/6304###########L/", "/6706###########L/", @@ -18940,46 +18742,46 @@ module["exports"] = [ "/6709#########{5,6}L/" ]; -},{}],91:[function(require,module,exports){ +},{}],89:[function(require,module,exports){ module["exports"] = [ "/50#{9,16}L/", "/5[6-8]#{9,16}L/", "/56##{9,16}L/" ]; -},{}],92:[function(require,module,exports){ +},{}],90:[function(require,module,exports){ module["exports"] = [ "/5[1-5]##-####-####-###L/", "/6771-89##-####-###L/" ]; -},{}],93:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ module["exports"] = [ "/6767-####-####-###L/", "/6767-####-####-####-#L/", "/6767-####-####-####-##L/" ]; -},{}],94:[function(require,module,exports){ +},{}],92:[function(require,module,exports){ module["exports"] = [ "/6759-####-####-###L/", "/6759-####-####-####-#L/", "/6759-####-####-####-##L/" ]; -},{}],95:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ module["exports"] = [ "/4###########L/", "/4###-####-####-###L/" ]; -},{}],96:[function(require,module,exports){ +},{}],94:[function(require,module,exports){ var date = {}; module["exports"] = date; date.month = require("./month"); date.weekday = require("./weekday"); -},{"./month":97,"./weekday":98}],97:[function(require,module,exports){ +},{"./month":95,"./weekday":96}],95:[function(require,module,exports){ // Source: http://unicode.org/cldr/trac/browser/tags/release-27/common/main/en.xml#L1799 module["exports"] = { wide: [ @@ -19044,7 +18846,7 @@ module["exports"] = { ] }; -},{}],98:[function(require,module,exports){ +},{}],96:[function(require,module,exports){ // Source: http://unicode.org/cldr/trac/browser/tags/release-27/common/main/en.xml#L1847 module["exports"] = { wide: [ @@ -19089,7 +18891,7 @@ module["exports"] = { ] }; -},{}],99:[function(require,module,exports){ +},{}],97:[function(require,module,exports){ module["exports"] = [ "Checking", "Savings", @@ -19101,7 +18903,7 @@ module["exports"] = [ "Personal Loan" ]; -},{}],100:[function(require,module,exports){ +},{}],98:[function(require,module,exports){ module["exports"] = { "UAE Dirham": { "code": "AED", @@ -19781,14 +19583,14 @@ module["exports"] = { } }; -},{}],101:[function(require,module,exports){ +},{}],99:[function(require,module,exports){ var finance = {}; module['exports'] = finance; finance.account_type = require("./account_type"); finance.transaction_type = require("./transaction_type"); finance.currency = require("./currency"); -},{"./account_type":99,"./currency":100,"./transaction_type":102}],102:[function(require,module,exports){ +},{"./account_type":97,"./currency":98,"./transaction_type":100}],100:[function(require,module,exports){ module["exports"] = [ "deposit", "withdrawal", @@ -19796,7 +19598,7 @@ module["exports"] = [ "invoice" ]; -},{}],103:[function(require,module,exports){ +},{}],101:[function(require,module,exports){ module["exports"] = [ "TCP", "HTTP", @@ -19829,7 +19631,7 @@ module["exports"] = [ "JBOD" ]; -},{}],104:[function(require,module,exports){ +},{}],102:[function(require,module,exports){ module["exports"] = [ "auxiliary", "primary", @@ -19851,7 +19653,7 @@ module["exports"] = [ "mobile" ]; -},{}],105:[function(require,module,exports){ +},{}],103:[function(require,module,exports){ var hacker = {}; module['exports'] = hacker; hacker.abbreviation = require("./abbreviation"); @@ -19860,7 +19662,7 @@ hacker.noun = require("./noun"); hacker.verb = require("./verb"); hacker.ingverb = require("./ingverb"); -},{"./abbreviation":103,"./adjective":104,"./ingverb":106,"./noun":107,"./verb":108}],106:[function(require,module,exports){ +},{"./abbreviation":101,"./adjective":102,"./ingverb":104,"./noun":105,"./verb":106}],104:[function(require,module,exports){ module["exports"] = [ "backing up", "bypassing", @@ -19880,7 +19682,7 @@ module["exports"] = [ "parsing" ]; -},{}],107:[function(require,module,exports){ +},{}],105:[function(require,module,exports){ module["exports"] = [ "driver", "protocol", @@ -19908,7 +19710,7 @@ module["exports"] = [ "matrix" ]; -},{}],108:[function(require,module,exports){ +},{}],106:[function(require,module,exports){ module["exports"] = [ "back up", "bypass", @@ -19930,7 +19732,7 @@ module["exports"] = [ "parse" ]; -},{}],109:[function(require,module,exports){ +},{}],107:[function(require,module,exports){ var en = {}; module['exports'] = en; en.title = "English"; @@ -19951,7 +19753,7 @@ en.app = require("./app"); en.finance = require("./finance"); en.date = require("./date"); -},{"./address":52,"./app":63,"./business":69,"./cell_phone":71,"./commerce":74,"./company":81,"./credit_card":88,"./date":96,"./finance":101,"./hacker":105,"./internet":113,"./lorem":114,"./name":118,"./phone_number":125,"./team":127}],110:[function(require,module,exports){ +},{"./address":50,"./app":61,"./business":67,"./cell_phone":69,"./commerce":72,"./company":79,"./credit_card":86,"./date":94,"./finance":99,"./hacker":103,"./internet":111,"./lorem":112,"./name":116,"./phone_number":123,"./team":125}],108:[function(require,module,exports){ module["exports"] = [ "https://s3.amazonaws.com/uifaces/faces/twitter/jarjan/128.jpg", "https://s3.amazonaws.com/uifaces/faces/twitter/mahdif/128.jpg", @@ -21221,7 +21023,7 @@ module["exports"] = [ "https://s3.amazonaws.com/uifaces/faces/twitter/areandacom/128.jpg" ]; -},{}],111:[function(require,module,exports){ +},{}],109:[function(require,module,exports){ module["exports"] = [ "com", "biz", @@ -21231,27 +21033,27 @@ module["exports"] = [ "org" ]; -},{}],112:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ module["exports"] = [ "gmail.com", "yahoo.com", "hotmail.com" ]; -},{}],113:[function(require,module,exports){ +},{}],111:[function(require,module,exports){ var internet = {}; module['exports'] = internet; internet.free_email = require("./free_email"); internet.domain_suffix = require("./domain_suffix"); internet.avatar_uri = require("./avatar_uri"); -},{"./avatar_uri":110,"./domain_suffix":111,"./free_email":112}],114:[function(require,module,exports){ +},{"./avatar_uri":108,"./domain_suffix":109,"./free_email":110}],112:[function(require,module,exports){ var lorem = {}; module['exports'] = lorem; lorem.words = require("./words"); lorem.supplemental = require("./supplemental"); -},{"./supplemental":115,"./words":116}],115:[function(require,module,exports){ +},{"./supplemental":113,"./words":114}],113:[function(require,module,exports){ module["exports"] = [ "abbas", "abduco", @@ -22095,7 +21897,7 @@ module["exports"] = [ "xiphias" ]; -},{}],116:[function(require,module,exports){ +},{}],114:[function(require,module,exports){ module["exports"] = [ "alias", "consequatur", @@ -22348,7 +22150,7 @@ module["exports"] = [ "repellat" ]; -},{}],117:[function(require,module,exports){ +},{}],115:[function(require,module,exports){ module["exports"] = [ "Aaliyah", "Aaron", @@ -25359,7 +25161,7 @@ module["exports"] = [ "Zula" ]; -},{}],118:[function(require,module,exports){ +},{}],116:[function(require,module,exports){ var name = {}; module['exports'] = name; name.first_name = require("./first_name"); @@ -25369,7 +25171,7 @@ name.suffix = require("./suffix"); name.title = require("./title"); name.name = require("./name"); -},{"./first_name":117,"./last_name":119,"./name":120,"./prefix":121,"./suffix":122,"./title":123}],119:[function(require,module,exports){ +},{"./first_name":115,"./last_name":117,"./name":118,"./prefix":119,"./suffix":120,"./title":121}],117:[function(require,module,exports){ module["exports"] = [ "Abbott", "Abernathy", @@ -25847,7 +25649,7 @@ module["exports"] = [ "Zulauf" ]; -},{}],120:[function(require,module,exports){ +},{}],118:[function(require,module,exports){ module["exports"] = [ "#{prefix} #{first_name} #{last_name}", "#{first_name} #{last_name} #{suffix}", @@ -25857,7 +25659,7 @@ module["exports"] = [ "#{first_name} #{last_name}" ]; -},{}],121:[function(require,module,exports){ +},{}],119:[function(require,module,exports){ module["exports"] = [ "Mr.", "Mrs.", @@ -25866,7 +25668,7 @@ module["exports"] = [ "Dr." ]; -},{}],122:[function(require,module,exports){ +},{}],120:[function(require,module,exports){ module["exports"] = [ "Jr.", "Sr.", @@ -25881,7 +25683,7 @@ module["exports"] = [ "DVM" ]; -},{}],123:[function(require,module,exports){ +},{}],121:[function(require,module,exports){ module["exports"] = { "descriptor": [ "Lead", @@ -25975,7 +25777,7 @@ module["exports"] = { ] }; -},{}],124:[function(require,module,exports){ +},{}],122:[function(require,module,exports){ module["exports"] = [ "###-###-####", "(###) ###-####", @@ -25999,12 +25801,12 @@ module["exports"] = [ "###.###.#### x#####" ]; -},{}],125:[function(require,module,exports){ +},{}],123:[function(require,module,exports){ var phone_number = {}; module['exports'] = phone_number; phone_number.formats = require("./formats"); -},{"./formats":124}],126:[function(require,module,exports){ +},{"./formats":122}],124:[function(require,module,exports){ module["exports"] = [ "ants", "bats", @@ -26075,18 +25877,18 @@ module["exports"] = [ "druids" ]; -},{}],127:[function(require,module,exports){ +},{}],125:[function(require,module,exports){ var team = {}; module['exports'] = team; team.creature = require("./creature"); team.name = require("./name"); -},{"./creature":126,"./name":128}],128:[function(require,module,exports){ +},{"./creature":124,"./name":126}],126:[function(require,module,exports){ module["exports"] = [ "#{Address.state} #{creature}" ]; -},{}],129:[function(require,module,exports){ +},{}],127:[function(require,module,exports){ var Lorem = function (faker) { var self = this; @@ -26140,7 +25942,7 @@ var Lorem = function (faker) { module["exports"] = Lorem; -},{}],130:[function(require,module,exports){ +},{}],128:[function(require,module,exports){ function Name (faker) { this.firstName = function (gender) { @@ -26238,7 +26040,7 @@ function Name (faker) { } module['exports'] = Name; -},{}],131:[function(require,module,exports){ +},{}],129:[function(require,module,exports){ var Phone = function (faker) { var self = this; @@ -26262,7 +26064,7 @@ var Phone = function (faker) { }; module['exports'] = Phone; -},{}],132:[function(require,module,exports){ +},{}],130:[function(require,module,exports){ var mersenne = require('../vendor/mersenne'); function Random (faker, seed) { @@ -26350,14 +26152,14 @@ module['exports'] = Random; // module.exports = random; -},{"../vendor/mersenne":134}],133:[function(require,module,exports){ +},{"../vendor/mersenne":132}],131:[function(require,module,exports){ var Faker = require('../lib'); var faker = new Faker({ locale: 'en', localeFallback: 'en' }); faker.locales['en'] = require('../lib/locales/en'); faker.locales['en'] = require('../lib/locales/en'); module['exports'] = faker; -},{"../lib":42,"../lib/locales/en":109}],134:[function(require,module,exports){ +},{"../lib":40,"../lib/locales/en":107}],132:[function(require,module,exports){ // this program is a JavaScript version of Mersenne Twister, with concealment and encapsulation in class, // an almost straight conversion from the original program, mt19937ar.c, // translated by y. okada on July 17, 2006. @@ -26645,7 +26447,7 @@ exports.seed_array = function(A) { gen.init_by_array(A); } -},{}],135:[function(require,module,exports){ +},{}],133:[function(require,module,exports){ /* * password-generator * Copyright(c) 2011-2013 Bermi Ferrer @@ -26711,7 +26513,7 @@ exports.seed_array = function(A) { // Establish the root object, `window` in the browser, or `global` on the server. }(this)); -},{}],136:[function(require,module,exports){ +},{}],134:[function(require,module,exports){ /* Copyright (c) 2012-2014 Jeffrey Mealo @@ -26922,7 +26724,7 @@ exports.generate = function generate() { return browser[random[0]](random[1]); }; -},{}],137:[function(require,module,exports){ +},{}],135:[function(require,module,exports){ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = nBytes * 8 - mLen - 1 @@ -27008,7 +26810,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { buffer[offset + i - d] |= s * 128 } -},{}],138:[function(require,module,exports){ +},{}],136:[function(require,module,exports){ /*! * node-inherit * Copyright(c) 2011 Dmitry Filatov @@ -27017,7 +26819,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { module.exports = require('./lib/inherit'); -},{"./lib/inherit":139}],139:[function(require,module,exports){ +},{"./lib/inherit":137}],137:[function(require,module,exports){ /** * @module inherit * @version 2.2.2 @@ -27207,12 +27009,12 @@ defineAsGlobal && (global.inherit = inherit); })(this); -},{}],140:[function(require,module,exports){ +},{}],138:[function(require,module,exports){ module.exports = Array.isArray || function (arr) { return Object.prototype.toString.call(arr) == '[object Array]'; }; -},{}],141:[function(require,module,exports){ +},{}],139:[function(require,module,exports){ /* * $Id: base64.js,v 2.15 2014/04/05 12:58:57 dankogai Exp dankogai $ * @@ -27408,7 +27210,7 @@ module.exports = Array.isArray || function (arr) { } })(this); -},{"buffer":18}],142:[function(require,module,exports){ +},{"buffer":16}],140:[function(require,module,exports){ 'use strict'; @@ -27417,7 +27219,7 @@ var yaml = require('./lib/js-yaml.js'); module.exports = yaml; -},{"./lib/js-yaml.js":143}],143:[function(require,module,exports){ +},{"./lib/js-yaml.js":141}],141:[function(require,module,exports){ 'use strict'; @@ -27458,7 +27260,7 @@ module.exports.parse = deprecated('parse'); module.exports.compose = deprecated('compose'); module.exports.addConstructor = deprecated('addConstructor'); -},{"./js-yaml/dumper":145,"./js-yaml/exception":146,"./js-yaml/loader":147,"./js-yaml/schema":149,"./js-yaml/schema/core":150,"./js-yaml/schema/default_full":151,"./js-yaml/schema/default_safe":152,"./js-yaml/schema/failsafe":153,"./js-yaml/schema/json":154,"./js-yaml/type":155}],144:[function(require,module,exports){ +},{"./js-yaml/dumper":143,"./js-yaml/exception":144,"./js-yaml/loader":145,"./js-yaml/schema":147,"./js-yaml/schema/core":148,"./js-yaml/schema/default_full":149,"./js-yaml/schema/default_safe":150,"./js-yaml/schema/failsafe":151,"./js-yaml/schema/json":152,"./js-yaml/type":153}],142:[function(require,module,exports){ 'use strict'; @@ -27521,7 +27323,7 @@ module.exports.repeat = repeat; module.exports.isNegativeZero = isNegativeZero; module.exports.extend = extend; -},{}],145:[function(require,module,exports){ +},{}],143:[function(require,module,exports){ 'use strict'; /*eslint-disable no-use-before-define*/ @@ -28371,7 +28173,7 @@ function safeDump(input, options) { module.exports.dump = dump; module.exports.safeDump = safeDump; -},{"./common":144,"./exception":146,"./schema/default_full":151,"./schema/default_safe":152}],146:[function(require,module,exports){ +},{"./common":142,"./exception":144,"./schema/default_full":149,"./schema/default_safe":150}],144:[function(require,module,exports){ // YAML error class. http://stackoverflow.com/questions/8458984 // 'use strict'; @@ -28419,7 +28221,7 @@ YAMLException.prototype.toString = function toString(compact) { module.exports = YAMLException; -},{"inherit":138}],147:[function(require,module,exports){ +},{"inherit":136}],145:[function(require,module,exports){ 'use strict'; /*eslint-disable max-len,no-use-before-define*/ @@ -29999,7 +29801,7 @@ module.exports.load = load; module.exports.safeLoadAll = safeLoadAll; module.exports.safeLoad = safeLoad; -},{"./common":144,"./exception":146,"./mark":148,"./schema/default_full":151,"./schema/default_safe":152}],148:[function(require,module,exports){ +},{"./common":142,"./exception":144,"./mark":146,"./schema/default_full":149,"./schema/default_safe":150}],146:[function(require,module,exports){ 'use strict'; @@ -30079,7 +29881,7 @@ Mark.prototype.toString = function toString(compact) { module.exports = Mark; -},{"./common":144}],149:[function(require,module,exports){ +},{"./common":142}],147:[function(require,module,exports){ 'use strict'; /*eslint-disable max-len*/ @@ -30185,7 +29987,7 @@ Schema.create = function createSchema() { module.exports = Schema; -},{"./common":144,"./exception":146,"./type":155}],150:[function(require,module,exports){ +},{"./common":142,"./exception":144,"./type":153}],148:[function(require,module,exports){ // Standard YAML's Core schema. // http://www.yaml.org/spec/1.2/spec.html#id2804923 // @@ -30205,7 +30007,7 @@ module.exports = new Schema({ ] }); -},{"../schema":149,"./json":154}],151:[function(require,module,exports){ +},{"../schema":147,"./json":152}],149:[function(require,module,exports){ // JS-YAML's default schema for `load` function. // It is not described in the YAML specification. // @@ -30232,7 +30034,7 @@ module.exports = Schema.DEFAULT = new Schema({ ] }); -},{"../schema":149,"../type/js/function":160,"../type/js/regexp":161,"../type/js/undefined":162,"./default_safe":152}],152:[function(require,module,exports){ +},{"../schema":147,"../type/js/function":158,"../type/js/regexp":159,"../type/js/undefined":160,"./default_safe":150}],150:[function(require,module,exports){ // JS-YAML's default schema for `safeLoad` function. // It is not described in the YAML specification. // @@ -30262,7 +30064,7 @@ module.exports = new Schema({ ] }); -},{"../schema":149,"../type/binary":156,"../type/merge":164,"../type/omap":166,"../type/pairs":167,"../type/set":169,"../type/timestamp":171,"./core":150}],153:[function(require,module,exports){ +},{"../schema":147,"../type/binary":154,"../type/merge":162,"../type/omap":164,"../type/pairs":165,"../type/set":167,"../type/timestamp":169,"./core":148}],151:[function(require,module,exports){ // Standard YAML's Failsafe schema. // http://www.yaml.org/spec/1.2/spec.html#id2802346 @@ -30281,7 +30083,7 @@ module.exports = new Schema({ ] }); -},{"../schema":149,"../type/map":163,"../type/seq":168,"../type/str":170}],154:[function(require,module,exports){ +},{"../schema":147,"../type/map":161,"../type/seq":166,"../type/str":168}],152:[function(require,module,exports){ // Standard YAML's JSON schema. // http://www.yaml.org/spec/1.2/spec.html#id2803231 // @@ -30308,7 +30110,7 @@ module.exports = new Schema({ ] }); -},{"../schema":149,"../type/bool":157,"../type/float":158,"../type/int":159,"../type/null":165,"./failsafe":153}],155:[function(require,module,exports){ +},{"../schema":147,"../type/bool":155,"../type/float":156,"../type/int":157,"../type/null":163,"./failsafe":151}],153:[function(require,module,exports){ 'use strict'; var YAMLException = require('./exception'); @@ -30371,7 +30173,7 @@ function Type(tag, options) { module.exports = Type; -},{"./exception":146}],156:[function(require,module,exports){ +},{"./exception":144}],154:[function(require,module,exports){ 'use strict'; /*eslint-disable no-bitwise*/ @@ -30507,7 +30309,7 @@ module.exports = new Type('tag:yaml.org,2002:binary', { represent: representYamlBinary }); -},{"../type":155,"buffer":17}],157:[function(require,module,exports){ +},{"../type":153,"buffer":15}],155:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -30546,7 +30348,7 @@ module.exports = new Type('tag:yaml.org,2002:bool', { defaultStyle: 'lowercase' }); -},{"../type":155}],158:[function(require,module,exports){ +},{"../type":153}],156:[function(require,module,exports){ 'use strict'; var common = require('../common'); @@ -30665,7 +30467,7 @@ module.exports = new Type('tag:yaml.org,2002:float', { defaultStyle: 'lowercase' }); -},{"../common":144,"../type":155}],159:[function(require,module,exports){ +},{"../common":142,"../type":153}],157:[function(require,module,exports){ 'use strict'; var common = require('../common'); @@ -30850,7 +30652,7 @@ module.exports = new Type('tag:yaml.org,2002:int', { } }); -},{"../common":144,"../type":155}],160:[function(require,module,exports){ +},{"../common":142,"../type":153}],158:[function(require,module,exports){ 'use strict'; var esprima; @@ -30936,7 +30738,7 @@ module.exports = new Type('tag:yaml.org,2002:js/function', { represent: representJavascriptFunction }); -},{"../../type":155,"esprima":32}],161:[function(require,module,exports){ +},{"../../type":153,"esprima":30}],159:[function(require,module,exports){ 'use strict'; var Type = require('../../type'); @@ -31021,7 +30823,7 @@ module.exports = new Type('tag:yaml.org,2002:js/regexp', { represent: representJavascriptRegExp }); -},{"../../type":155}],162:[function(require,module,exports){ +},{"../../type":153}],160:[function(require,module,exports){ 'use strict'; var Type = require('../../type'); @@ -31051,7 +30853,7 @@ module.exports = new Type('tag:yaml.org,2002:js/undefined', { represent: representJavascriptUndefined }); -},{"../../type":155}],163:[function(require,module,exports){ +},{"../../type":153}],161:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -31061,7 +30863,7 @@ module.exports = new Type('tag:yaml.org,2002:map', { construct: function (data) { return null !== data ? data : {}; } }); -},{"../type":155}],164:[function(require,module,exports){ +},{"../type":153}],162:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -31075,7 +30877,7 @@ module.exports = new Type('tag:yaml.org,2002:merge', { resolve: resolveYamlMerge }); -},{"../type":155}],165:[function(require,module,exports){ +},{"../type":153}],163:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -31113,7 +30915,7 @@ module.exports = new Type('tag:yaml.org,2002:null', { defaultStyle: 'lowercase' }); -},{"../type":155}],166:[function(require,module,exports){ +},{"../type":153}],164:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -31171,7 +30973,7 @@ module.exports = new Type('tag:yaml.org,2002:omap', { construct: constructYamlOmap }); -},{"../type":155}],167:[function(require,module,exports){ +},{"../type":153}],165:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -31234,7 +31036,7 @@ module.exports = new Type('tag:yaml.org,2002:pairs', { construct: constructYamlPairs }); -},{"../type":155}],168:[function(require,module,exports){ +},{"../type":153}],166:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -31244,7 +31046,7 @@ module.exports = new Type('tag:yaml.org,2002:seq', { construct: function (data) { return null !== data ? data : []; } }); -},{"../type":155}],169:[function(require,module,exports){ +},{"../type":153}],167:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -31279,7 +31081,7 @@ module.exports = new Type('tag:yaml.org,2002:set', { construct: constructYamlSet }); -},{"../type":155}],170:[function(require,module,exports){ +},{"../type":153}],168:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -31289,7 +31091,7 @@ module.exports = new Type('tag:yaml.org,2002:str', { construct: function (data) { return null !== data ? data : ''; } }); -},{"../type":155}],171:[function(require,module,exports){ +},{"../type":153}],169:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -31384,7 +31186,1309 @@ module.exports = new Type('tag:yaml.org,2002:timestamp', { represent: representYamlTimestamp }); -},{"../type":155}],172:[function(require,module,exports){ +},{"../type":153}],170:[function(require,module,exports){ +/* + * The MIT License (MIT) + * + * Copyright (c) 2014 Jeremy Whitlock + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +'use strict'; + +/** + * Various utilities for JSON References *(http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03)* and + * JSON Pointers *(https://tools.ietf.org/html/rfc6901)*. + * + * @module JsonRefs + */ + +var dirname = require('path').dirname; +var pathLoader = require('path-loader'); +var qs = require('querystring'); +var slash = require('slash'); +var URI = require('uri-js'); + +var badPtrTokenRegex = /~(?:[^01]|$)/g; +var remoteCache = {}; +var remoteTypes = ['relative', 'remote']; +var uriDetailsCache = {}; + +// Load promises polyfill if necessary +/* istanbul ignore if */ +if (typeof Promise === 'undefined') { + require('native-promise-only'); +} + +/* Internal Functions */ + +// This is a very simplistic clone function that does not take into account non-JSON types. For these types the +// original value is used as the clone. So while it's not a complete deep clone, for the needs of this project +// this should be sufficient. +function clone (obj) { + var cloned; + + if (isType(obj, 'Array')) { + cloned = []; + + obj.forEach(function (value, index) { + cloned[index] = clone(value); + }); + } else if (isType(obj, 'Object')) { + cloned = {}; + + Object.keys(obj).forEach(function (key) { + cloned[key] = clone(obj[key]); + }); + } else { + cloned = obj; + } + + return cloned; +} + +function combinePaths (p1, p2) { + var combined = []; + + function pathToSegments (path) { + return isType(path, 'Undefined') || path === '' ? [] : path.split('/'); + } + + function handleSegment (seg) { + if (seg === '..') { + combined.pop(); + } else { + combined.push(seg); + } + } + + pathToSegments(p1).concat(pathToSegments(p2)).forEach(handleSegment); + + return combined.length === 0 ? '' : combined.join('/'); +} + +function combineQueryParams (qs1, qs2) { + var combined = {}; + + function mergeQueryParams (obj) { + Object.keys(obj).forEach(function (key) { + combined[key] = obj[key]; + }); + } + + mergeQueryParams(qs.parse(qs1 || '')); + mergeQueryParams(qs.parse(qs2 || '')); + + return Object.keys(combined).length === 0 ? undefined : qs.stringify(combined); +} + +function combineURIs (u1, u2) { + // Convert Windows paths + if (isType(u1, 'String')) { + u1 = slash(u1); + } + + if (isType(u2, 'String')) { + u2 = slash(u2); + } + + var u2Details = URI.parse(isType(u2, 'Undefined') ? '' : u2); + var u1Details; + var combinedDetails; + + if (u2Details.reference === 'absolute' || u2Details.reference === 'uri') { + combinedDetails = u2Details; + } else { + u1Details = isType(u1, 'Undefined') ? undefined : URI.parse(u1); + + if (!isType(u1Details, 'Undefined')) { + combinedDetails = u1Details; + + // Join the paths + combinedDetails.path = URI.normalize(combinePaths(u1Details.path, u2Details.path)); + + // Join query parameters + combinedDetails.query = combineQueryParams(u1Details.query, u2Details.query); + } else { + combinedDetails = u2Details; + } + } + + // Remove the fragment + combinedDetails.fragment = undefined; + + return URI.serialize(combinedDetails); +} + +function filterRefs (options, refs) { + var refFilter = makeRefFilter(options); + var filtered = {}; + var subDocPrefix = pathToPtr(makeSubDocPath(options)); + + Object.keys(refs).forEach(function (refPtr) { + var refDetails = refs[refPtr]; + + if (refFilter(refDetails, pathFromPtr(refPtr)) === true && + refPtr.indexOf(subDocPrefix) > -1 && + (refDetails.type !== 'invalid' || options.includeInvalid === true)) { + filtered[refPtr] = refDetails; + } + }); + + return filtered; +} + +function findAncestors (obj, path) { + var ancestors = []; + var node = obj; + + path.slice(0, path.length - 1).forEach(function (seg) { + if (seg in node) { + node = node[seg]; + + ancestors.push(node); + } + }); + + return ancestors; +} + +// Should this be its own exported API? +function findAllRefs (obj, options, parents, parentPath, documents) { + var allTasks = Promise.resolve(); + var refs = findRefs(obj, options); + + console.log(options.relativeBase); + + Object.keys(refs).forEach(function (refPtr) { + var refDetails = refs[refPtr]; + var refPath = pathFromPtr(refPtr); + var location; + var parentIndex; + + // Only process remote references + if (remoteTypes.indexOf(refDetails.type) > -1) { + location = combineURIs(options.relativeBase, refDetails.uri); + parentIndex = parents.indexOf(location); + + if (parentIndex === -1) { + allTasks = allTasks + .then(function () { + var rParentPath = parentPath.concat(refPath); + var rOptions = clone(options); + + // Remove the sub document path + delete rOptions.subDocPath; + + // Remove the relative base + delete rOptions.relativeBase; + + return findRefsAt(location, rOptions) + .then(function (rRefs) { + // Record the location for circular reference identification + rRefs.location = location; + + if (refDetails.uriDetails.fragment) { + // If the remote reference was for a fragment, do not include the reference details + rRefs.refs = {}; + + // Record the remote document + documents[pathToPtr(rParentPath)] = rRefs; + + return rRefs; + } else { + // Record the location in the document where the parent document was resolved + Object.keys(rRefs.refs).forEach(function (refPtr) { + rRefs.refs[refPtr].parentLocation = pathToPtr(rParentPath); + }); + + // Record the remote document + documents[pathToPtr(rParentPath)] = rRefs; + + rOptions.relativeBase = dirname(location); + + // Find all important references within the document + return findAllRefs(rRefs.value, rOptions, parents.concat(location), rParentPath, documents); + } + }, function (err) { + refDetails.error = err.message; + refDetails.missing = true; + }); + }); + } else { + // Mark seen ancestors as circular + parents.slice(parentIndex).forEach(function (parent) { + Object.keys(documents).forEach(function (cRefPtr) { + var document = documents[cRefPtr]; + + if (document.location === parent) { + document.circular = true; + } + }); + }); + + // Mark self as circular + documents[pathToPtr(parentPath)].refs[refPtr].circular = true; + } + } + }); + + allTasks = allTasks + .then(function () { + // Only collapse the documents when we're back at the top of the promise stack + if (parentPath.length === 0) { + // Collapse all references together into one list + Object.keys(documents).forEach(function (refPtr) { + var document = documents[refPtr]; + + // Merge each reference into the root document's references + Object.keys(document.refs).forEach(function (cRefPtr) { + var fPtr = pathToPtr(pathFromPtr(refPtr).concat(pathFromPtr(cRefPtr))); + var refDetails = refs[fPtr]; + + if (isType(refDetails, 'Undefined')) { + refs[fPtr] = document.refs[cRefPtr]; + } + }); + + // Record the value of the remote reference + refs[refPtr].value = document.value; + + // Mark the remote reference itself as circular + if (document.circular) { + refs[refPtr].circular = true; + } + }); + } + + return refs; + }); + + return allTasks; +} + +function findValue (obj, path, ignore) { + var value = obj; + + try { + path.forEach(function (seg) { + if (seg in value) { + value = value[seg]; + } else { + throw Error('JSON Pointer points to missing location: ' + pathToPtr(path)); + } + }); + } catch (err) { + if (ignore === true) { + value = undefined; + } else { + throw err; + } + } + + return value; +} + +function getExtraRefKeys (ref) { + return Object.keys(ref).filter(function (key) { + return key !== '$ref'; + }); +} + +function getRemoteDocument (url, options) { + var cacheEntry = remoteCache[url]; + var allTasks = Promise.resolve(); + var loaderOptions = clone(options.loaderOptions || {}); + + if (isType(cacheEntry, 'Undefined')) { + // If there is no content processor, default to processing the raw response as JSON + if (isType(loaderOptions.processContent, 'Undefined')) { + loaderOptions.processContent = function (res, callback) { + callback(undefined, JSON.parse(res.text)); + }; + } + + // Attempt to load the resource using path-loader + allTasks = pathLoader.load(url, loaderOptions); + + // Update the cache + allTasks = allTasks + .then(function (res) { + remoteCache[url] = { + value: res + }; + + return res; + }) + .catch(function (err) { + remoteCache[url] = { + error: err + }; + + throw err; + }); + } else { + // Return the cached version + allTasks = allTasks.then(function () { + return cacheEntry.value; + }); + } + + // Return a cloned version to avoid updating the cache + allTasks = allTasks.then(function (res) { + return clone(res); + }); + + return allTasks; +} + +function isRefLike (obj, throwWithDetails) { + var refLike = true; + + try { + if (!isType(obj, 'Object')) { + throw new Error('obj is not an Object'); + } else if (!isType(obj.$ref, 'String')) { + throw new Error('obj.$ref is not a String'); + } + } catch (err) { + if (throwWithDetails) { + throw err; + } + + refLike = false; + } + + return refLike; +} + +function isType (obj, type) { + // A PhantomJS bug (https://github.com/ariya/phantomjs/issues/11722) prohibits us from using the same approach for + // undefined checking that we use for other types. + if (type === 'Undefined') { + return typeof obj === 'undefined'; + } else { + return Object.prototype.toString.call(obj) === '[object ' + type + ']'; + } +} + +function makeRefFilter (options) { + var refFilter; + + if (isType(options.filter, 'Array') || isType(options.filter, 'String')) { + refFilter = function (refDetails) { + var validTypes = isType(options.filter, 'String') ? [options.filter] : options.filter; + + return validTypes.indexOf(refDetails.type) > -1; + }; + } else if (isType(options.filter, 'Function')) { + refFilter = options.filter; + } else { + refFilter = function () { + return true; + }; + } + + return refFilter; +} + +function makeSubDocPath (options) { + var fromPath = []; + + if (isType(options.subDocPath, 'Array')) { + fromPath = options.subDocPath; + } else if (isType(options.subDocPath, 'String')) { + fromPath = pathFromPtr(options.subDocPath); + } + + return fromPath; +} + +function setValue (obj, refPath, value) { + findValue(obj, refPath.slice(0, refPath.length - 1))[refPath[refPath.length - 1]] = value; +} + +function walk (ancestors, node, path, fn) { + var processChildren = true; + + function walkItem (item, segment) { + path.push(segment); + walk(ancestors, item, path, fn); + path.pop(); + } + + // Call the iteratee + if (isType(fn, 'Function')) { + processChildren = fn(ancestors, node, path); + } + + // We do not process circular objects again + if (ancestors.indexOf(node) === -1) { + ancestors.push(node); + + if (processChildren !== false) { + if (isType(node, 'Array')) { + node.forEach(function (member, index) { + walkItem(member, index.toString()); + }); + } else if (isType(node, 'Object')) { + Object.keys(node).forEach(function (key) { + walkItem(node[key], key); + }); + } + } + } + + ancestors.pop(); +} + +function validateOptions (options) { + if (!isType(options, 'Undefined')) { + if (!isType(options, 'Object')) { + throw new TypeError('options must be an Object'); + } else if (!isType(options.filter, 'Undefined') && + !isType(options.filter, 'Array') && + !isType(options.filter, 'Function') && + !isType(options.filter, 'String')) { + throw new TypeError('options.filter must be an Array, a Function of a String'); + } else if (!isType(options.includeInvalid, 'Undefined') && + !isType(options.includeInvalid, 'Boolean')) { + throw new TypeError('options.includeInvalid must be a Boolean'); + } else if (!isType(options.refPreProcessor, 'Undefined') && + !isType(options.refPreProcessor, 'Function')) { + throw new TypeError('options.refPreProcessor must be a Function'); + } else if (!isType(options.refPostProcessor, 'Undefined') && + !isType(options.refPostProcessor, 'Function')) { + throw new TypeError('options.refPostProcessor must be a Function'); + } else if (!isType(options.subDocPath, 'Undefined') && + !isType(options.subDocPath, 'Array') && + !isPtr(options.subDocPath)) { + // If a pointer is provided, throw an error if it's not the proper type + throw new TypeError('options.subDocPath must be an Array of path segments or a valid JSON Pointer'); + } + } +} + +/* Module Members */ + +/* + * Each of the functions below are defined as function statements and *then* exported in two steps instead of one due + * to a bug in jsdoc (https://github.com/jsdoc2md/jsdoc-parse/issues/18) that causes our documentation to be + * generated improperly. The impact to the user is significant enough for us to warrant working around it until this + * is fixed. + */ + +/** + * The options used for various JsonRefs APIs. + * + * @typedef {object} JsonRefsOptions + * + * @param {string|string[]|function} [filter=function () {return true;}] - The filter to use when gathering JSON + * References *(If this value is a single string or an array of strings, the value(s) are expected to be the `type(s)` + * you are interested in collecting as described in {@link module:JsonRefs.getRefDetails}. If it is a function, it is + * expected that the function behaves like {@link module:JsonRefs~RefDetailsFilter}.)* + * @param {boolean} [includeInvalid=false] - Whether or not to include invalid JSON Reference details *(This will make + * it so that objects that are like JSON Reference objects, as in they are an `Object` and the have a `$ref` property, + * but fail validation will be included. This is very useful for when you want to know if you have invalid JSON + * Reference definitions. This will not mean that APIs will process invalid JSON References but the reasons as to why + * the JSON References are invalid will be included in the returned metadata.)* + * @param {object} [loaderOptions] - The options to pass to + * {@link https://github.com/whitlockjc/path-loader/blob/master/docs/API.md#module_PathLoader.load|PathLoader~load} + * @param {RefPreProcessor} [refPreProcessor] - The callback used to pre-process a JSON Reference like + * object *(This is called prior to validating the JSON Reference like object and getting its details)* + * @param {RefPostProcessor} [refPostProcessor] - The callback used to post-process the JSON Reference + * metadata *(This is called prior filtering the references)* + * @param {string} [options.relativeBase] - The base location to use when resolving relative references *(Only useful + * for APIs that do remote reference resolution. If this value is not defined, + * {@link https://github.com/whitlockjc/path-loader|path-loader} will use `window.location.href` for the browser and + * `process.cwd()` for Node.js.)* + * @param {string|string[]} [options.subDocPath=[]] - The JSON Pointer or array of path segments to the sub document + * location to search from + */ + +/** + * Simple function used to filter out JSON References. + * + * @typedef {function} RefDetailsFilter + * + * @param {UnresolvedRefDetails} refDetails - The JSON Reference details to test + * @param {string[]} path - The path to the JSON Reference + * + * @returns {boolean} whether the JSON Reference should be filtered *(out)* or not + */ + +/** + * Simple function used to pre-process a JSON Reference like object. + * + * @typedef {function} RefPreProcessor + * + * @param {object} obj - The JSON Reference like object + * @param {string[]} path - The path to the JSON Reference like object + * + * @returns {object} the processed JSON Reference like object + */ + +/** + * Simple function used to post-process a JSON Reference details. + * + * @typedef {function} RefPostProcessor + * + * @param {UnresolvedRefDetails} refDetails - The JSON Reference details to test + * @param {string[]} path - The path to the JSON Reference + * + * @returns {object} the processed JSON Reference details object + */ + +/** + * Detailed information about resolved JSON References. + * + * @typedef {UnresolvedRefDetails} ResolvedRefDetails + * + * @property {boolean} [circular] - Whether or not the JSON Reference is circular *(Will not be set if the JSON + * Reference is not circular)* + * @property {boolean} [missing] - Whether or not the referenced value was missing or not *(Will not be set if the + * referenced value is not missing)* + * @property {*} [value] - The referenced value *(Will not be set if the referenced value is missing)* + */ + +/** + * The results of resolving the JSON References of an array/object. + * + * @typedef {object} ResolvedRefsResults + * + * @property {ResolvedRefDetails} refs - An object whose keys are JSON Pointers *(fragment version)* + * to where the JSON Reference is defined and whose values are {@link module:JsonRefs~ResolvedRefDetails} + * @property {object} value - The array/object with its JSON References fully resolved + */ + +/** + * An object containing the retrieved document and detailed information about its JSON References. + * + * @typedef {object} RetrievedRefsResults + * + * @property {UnresolvedRefDetails} refs - An object whose keys are JSON Pointers *(fragment version)* + * to where the JSON Reference is defined and whose values are {@link module:JsonRefs~UnresolvedRefDetails} + * @property {object} value - The retrieved document + */ + +/** + * An object containing the retrieved document, the document with its references resolved and detailed information + * about its JSON References. + * + * @typedef {object} RetrievedResolvedRefsResults + * + * @property {UnresolvedRefDetails} refs - An object whose keys are JSON Pointers *(fragment version)* + * to where the JSON Reference is defined and whose values are {@link module:JsonRefs~UnresolvedRefDetails} + * @property {ResolvedRefsResults} - An object whose keys are JSON Pointers *(fragment version)* + * to where the JSON Reference is defined and whose values are {@link module:JsonRefs~ResolvedRefDetails} + * @property {object} value - The retrieved document + */ + +/** + * Detailed information about unresolved JSON References. + * + * @typedef {object} UnresolvedRefDetails + * + * @property {object} def - The JSON Reference definition + * @property {string} [error] - The error information for invalid JSON Reference definition *(Only present when the + * JSON Reference definition is invalid or there was a problem retrieving a remote reference during resolution)* + * @property {string} uri - The URI portion of the JSON Reference + * @property {object} uriDetails - Detailed information about the URI as provided by + * {@link https://github.com/garycourt/uri-js|URI.parse}. + * @property {string} type - The JSON Reference type *(This value can be one of the following: `invalid`, `local`, + * `relative` or `remote`.)* + * @property {string} [warning] - The warning information *(Only present when the JSON Reference definition produces a + * warning)* + */ + +/** + * Clears the internal cache of remote documents, reference details, etc. + * + * @alias module:JsonRefs.clearCache + */ +function clearCache () { + remoteCache = {}; +} + +/** + * Takes an array of path segments and decodes the JSON Pointer tokens in them. + * + * @param {string[]} path - The array of path segments + * + * @returns {string} the array of path segments with their JSON Pointer tokens decoded + * + * @throws {Error} if the path is not an `Array` + * + * @see {@link https://tools.ietf.org/html/rfc6901#section-3} + * + * @alias module:JsonRefs.decodePath + */ +function decodePath (path) { + if (!isType(path, 'Array')) { + throw new TypeError('path must be an array'); + } + + return path.map(function (seg) { + if (!isType(seg, 'String')) { + seg = JSON.stringify(seg); + } + + return seg.replace(/~1/g, '/').replace(/~0/g, '~'); + }); +} + +/** + * Takes an array of path segments and encodes the special JSON Pointer characters in them. + * + * @param {string[]} path - The array of path segments + * + * @returns {string} the array of path segments with their JSON Pointer tokens encoded + * + * @throws {Error} if the path is not an `Array` + * + * @see {@link https://tools.ietf.org/html/rfc6901#section-3} + * + * @alias module:JsonRefs.encodePath + */ +function encodePath (path) { + if (!isType(path, 'Array')) { + throw new TypeError('path must be an array'); + } + + return path.map(function (seg) { + if (!isType(seg, 'String')) { + seg = JSON.stringify(seg); + } + + return seg.replace(/~/g, '~0').replace(/\//g, '~1'); + }); +} + +/** + * Finds JSON References defined within the provided array/object. + * + * @param {array|object} obj - The structure to find JSON References within + * @param {JsonRefsOptions} [options] - The JsonRefs options + * + * @returns {object} an object whose keys are JSON Pointers *(fragment version)* to where the JSON Reference is defined + * and whose values are {@link module:JsonRefs~UnresolvedRefDetails}. + * + * @throws {Error} when the input arguments fail validation or if `options.subDocPath` points to an invalid location + * + * @alias module:JsonRefs.findRefs + * + * @example + * // Finding all valid references + * var allRefs = JsonRefs.findRefs(obj); + * // Finding all remote references + * var remoteRefs = JsonRefs.findRefs(obj, {filter: ['relative', 'remote']}); + * // Finding all invalid references + * var invalidRefs = JsonRefs.findRefs(obj, {filter: 'invalid', includeInvalid: true}); + */ +function findRefs (obj, options) { + var ancestors = []; + var fromObj = obj; + var fromPath; + var refs = {}; + var refFilter; + + // Validate the provided document + if (!isType(obj, 'Array') && !isType(obj, 'Object')) { + throw new TypeError('obj must be an Array or an Object'); + } + + // Set default for options + if (isType(options, 'Undefined')) { + options = {}; + } + + // Validate options + validateOptions(options); + + // Convert from to a pointer + fromPath = makeSubDocPath(options); + + // Convert options.filter from an Array/String to a Function + refFilter = makeRefFilter(options); + + if (fromPath.length > 0) { + ancestors = findAncestors(obj, fromPath); + fromObj = findValue(obj, fromPath); + } + + // Walk the document (or sub document) and find all JSON References + walk(ancestors, fromObj, fromPath, function (ancestors, node, path) { + var processChildren = true; + var refDetails; + + if (isRefLike(node)) { + // Pre-process the node when necessary + if (!isType(options.refPreProcessor, 'Undefined')) { + node = options.refPreProcessor(node, path); + } + + refDetails = getRefDetails(node); + + if (refDetails.type !== 'invalid' || options.includeInvalid === true) { + if (refFilter(refDetails, path) === true) { + // Post-process the reference details when necessary + if (!isType(options.refPostProcessor, 'Undefined')) { + refDetails = options.refPostProcessor(refDetails, path); + } + + refs[pathToPtr(path)] = refDetails; + } + + // Whenever a JSON Reference has extra children, its children should be ignored so we want to stop processing. + // See: http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3 + if (getExtraRefKeys(node).length > 0) { + processChildren = false; + } + } + } + + return processChildren; + }); + + return refs; +} + +/** + * Finds JSON References defined within the document at the provided location. + * + * This API is identical to {@link module:JsonRefs.findRefs} except this API will retrieve a remote document and then + * return the result of {@link module:JsonRefs.findRefs} on the retrieved document. + * + * @param {string} location - The location to retrieve *(Can be relative or absolute, just make sure you look at the + * {@link module:JsonRefs~JsonRefsOptions|options documentation} to see how relative references are handled.)* + * @param {JsonRefsOptions} [options] - The JsonRefs options + * + * @returns {Promise} a promise that resolves a {@link module:JsonRefs~RetrievedRefsResults} and rejects with an + * `Error` when the input arguments fail validation, when `options.subDocPath` points to an invalid location or when + * the location argument points to an unloadable resource + * + * @alias module:JsonRefs.findRefsAt + * + * @example + * // Example that only resolves references within a sub document + * JsonRefs.findRefsAt('http://petstore.swagger.io/v2/swagger.json', { + * subDocPath: '#/definitions' + * }) + * .then(function (res) { + * // Do something with the response + * // + * // res.refs: JSON Reference locations and details + * // res.value: The retrieved document + * }, function (err) { + * console.log(err.stack); + * }); + */ +function findRefsAt (location, options) { + var allTasks = Promise.resolve(); + + allTasks = allTasks + .then(function () { + // Validate the provided location + if (!isType(location, 'String')) { + throw new TypeError('location must be a string'); + } + + // Set default for options + if (isType(options, 'Undefined')) { + options = {}; + } + + // Validate options (Doing this here for a quick) + validateOptions(options); + + // Combine the location and the optional relative base + location = combineURIs(options.relativeBase, location); + + return getRemoteDocument(location, options); + }) + .then(function (res) { + var cacheEntry = clone(remoteCache[location]); + var cOptions; + + if (isType(cacheEntry.refs, 'Undefined')) { + cOptions = clone(options); + + // Do not filter any references so the cache is complete + delete cOptions.filter; + delete cOptions.subDocPath; + + cOptions.includeInvalid = true; + + remoteCache[location].refs = findRefs(res, cOptions); + + // Filter out the references based on options.filter and options.subDocPath + cacheEntry.refs = filterRefs(options, remoteCache[location].refs); + } + + return cacheEntry; + }); + + return allTasks; +} + +/** + * Returns detailed information about the JSON Reference. + * + * @param {object} obj - The JSON Reference definition + * + * @returns {UnresolvedRefDetails} the detailed information + * + * @alias module:JsonRefs.getRefDetails + */ +function getRefDetails (obj) { + var details = { + def: obj + }; + var cacheKey; + var extraKeys; + var uriDetails; + + try { + if (isRefLike(obj, true)) { + cacheKey = obj.$ref; + uriDetails = uriDetailsCache[cacheKey]; + + if (isType(uriDetails, 'Undefined')) { + uriDetails = uriDetailsCache[cacheKey] = URI.parse(cacheKey); + } + + details.uri = cacheKey; + details.uriDetails = uriDetails; + + if (isType(uriDetails.error, 'Undefined')) { + // Convert the URI reference to one of our types + switch (uriDetails.reference) { + case 'absolute': + case 'uri': + details.type = 'remote'; + break; + case 'same-document': + details.type = 'local'; + break; + default: + details.type = uriDetails.reference; + } + } else { + details.error = details.uriDetails.error; + details.type = 'invalid'; + } + + // Identify warning + extraKeys = getExtraRefKeys(obj); + + if (extraKeys.length > 0) { + details.warning = 'Extra JSON Reference properties will be ignored: ' + extraKeys.join(', '); + } + } else { + details.type = 'invalid'; + } + } catch (err) { + details.error = err.message; + details.type = 'invalid'; + } + + return details; +} + +/** + * Returns whether the argument represents a JSON Pointer. + * + * A string is a JSON Pointer if the following are all true: + * + * * The string is of type `String` + * * The string must be empty, `#` or start with a `/` or `#/` + * + * @param {string} ptr - The string to check + * @param {boolean} [throwWithDetails=false] - Whether or not to throw an `Error` with the details as to why the value + * provided is invalid + * + * @returns {boolean} the result of the check + * + * @throws {error} when the provided value is invalid and the `throwWithDetails` argument is `true` + * + * @alias module:JsonRefs.isPtr + * + * @see {@link https://tools.ietf.org/html/rfc6901#section-3} + * + * @example + * // Separating the different ways to invoke isPtr for demonstration purposes + * if (isPtr(str)) { + * // Handle a valid JSON Pointer + * } else { + * // Get the reason as to why the value is not a JSON Pointer so you can fix/report it + * try { + * isPtr(str, true); + * } catch (err) { + * // The error message contains the details as to why the provided value is not a JSON Pointer + * } + * } + */ +function isPtr (ptr, throwWithDetails) { + var valid = true; + var firstChar; + + try { + if (isType(ptr, 'String')) { + if (ptr !== '') { + firstChar = ptr.charAt(0); + + if (['#', '/'].indexOf(firstChar) === -1) { + throw new Error('ptr must start with a / or #/'); + } else if (firstChar === '#' && ptr !== '#' && ptr.charAt(1) !== '/') { + throw new Error('ptr must start with a / or #/'); + } else if (ptr.match(badPtrTokenRegex)) { + throw new Error('ptr has invalid token(s)'); + } + } + } else { + throw new Error('ptr is not a String'); + } + } catch (err) { + if (throwWithDetails === true) { + throw err; + } + + valid = false; + } + + return valid; +} + +/** + * Returns whether the argument represents a JSON Reference. + * + * An object is a JSON Reference only if the following are all true: + * + * * The object is of type `Object` + * * The object has a `$ref` property + * * The `$ref` property is a valid URI + * + * @param {object} obj - The object to check + * @param {boolean} [throwWithDetails=false] - Whether or not to throw an `Error` with the details as to why the value + * provided is invalid + * + * @returns {boolean} the result of the check + * + * @throws {error} when the provided value is invalid and the `throwWithDetails` argument is `true` + * + * @alias module:JsonRefs.isRef + * + * @see {@link http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3} + * + * @example + * // Separating the different ways to invoke isRef for demonstration purposes + * if (isRef(obj)) { + * // Handle a valid JSON Reference + * } else { + * // Get the reason as to why the value is not a JSON Reference so you can fix/report it + * try { + * isRef(str, true); + * } catch (err) { + * // The error message contains the details as to why the provided value is not a JSON Reference + * } + * } + */ +function isRef (obj, throwWithDetails) { + return isRefLike(obj, throwWithDetails) && getRefDetails(obj, throwWithDetails).type !== 'invalid'; +} + +/** + * Returns an array of path segments for the provided JSON Pointer. + * + * @param {string} ptr - The JSON Pointer + * + * @returns {string[]} the path segments + * + * @throws {Error} if the provided `ptr` argument is not a JSON Pointer + * + * @alias module:JsonRefs.pathFromPtr + */ +function pathFromPtr (ptr) { + if (!isPtr(ptr)) { + throw new Error('ptr must be a JSON Pointer'); + } + + var segments = ptr.split('/'); + + // Remove the first segment + segments.shift(); + + return decodePath(segments); +} + +/** + * Returns a JSON Pointer for the provided array of path segments. + * + * **Note:** If a path segment in `path` is not a `String`, it will be converted to one using `JSON.stringify`. + * + * @param {string[]} path - The array of path segments + * @param {boolean} [hashPrefix=true] - Whether or not create a hash-prefixed JSON Pointer + * + * @returns {string} the corresponding JSON Pointer + * + * @throws {Error} if the `path` argument is not an array + * + * @alias module:JsonRefs.pathToPtr + */ +function pathToPtr (path, hashPrefix) { + if (!isType(path, 'Array')) { + throw new Error('path must be an Array'); + } + + // Encode each segment and return + return (hashPrefix !== false ? '#' : '') + (path.length > 0 ? '/' : '') + encodePath(path).join('/'); +} + +/** + * Finds JSON References defined within the provided array/object and resolves them. + * + * @param {array|object} obj - The structure to find JSON References within + * @param {JsonRefsOptions} [options] - The JsonRefs options + * + * @returns {Promise} a promise that resolves a {@link module:JsonRefs~ResolvedRefsResults} and rejects with an + * `Error` when the input arguments fail validation, when `options.subDocPath` points to an invalid location or when + * the location argument points to an unloadable resource + * + * @alias module:JsonRefs.resolveRefs + * + * @example + * // Example that only resolves relative and remote references + * JsonRefs.resolveRefs(swaggerObj, { + * filter: ['relative', 'remote'] + * }) + * .then(function (res) { + * // Do something with the response + * // + * // res.refs: JSON Reference locations and details + * // res.resolved: The document with the appropriate JSON References resolved + * }, function (err) { + * console.log(err.stack); + * }); + */ +function resolveRefs (obj, options) { + var allTasks = Promise.resolve(); + + allTasks = allTasks + .then(function () { + // Validate the provided document + if (!isType(obj, 'Array') && !isType(obj, 'Object')) { + throw new TypeError('obj must be an Array or an Object'); + } + + // Set default for options + if (isType(options, 'Undefined')) { + options = {}; + } + + // Validate options + validateOptions(options); + }) + .then(function () { + // Find all references recursively + return findAllRefs(obj, options, [], [], {}); + }) + .then(function (aRefs) { + var cloned = clone(obj); + var parentLocations = []; + + // Replace remote references first + Object.keys(aRefs).forEach(function (refPtr) { + var refDetails = aRefs[refPtr]; + var value; + + if (remoteTypes.indexOf(refDetails.type) > -1) { + if (isType(refDetails.error, 'Undefined') && refDetails.type !== 'invalid') { + try { + value = findValue(refDetails.value || {}, + refDetails.uriDetails.fragment ? + pathFromPtr(refDetails.uriDetails.fragment) : + []); + setValue(cloned, pathFromPtr(refPtr), value); + + // The reference includes a fragment so update the reference details + if (!isType(refDetails.value, 'Undefined')) { + refDetails.value = value; + } else if (refDetails.circular) { + // If there is no value and it's circular, set its value to an empty value + refDetails.value = {}; + } + } catch (err) { + refDetails.error = err.message; + refDetails.missing = true; + } + } else { + refDetails.missing = true; + } + } + }); + + // Replace local references + Object.keys(aRefs).forEach(function (refPtr) { + var refDetails = aRefs[refPtr]; + var parentLocation = refDetails.parentLocation; + var value; + + // Record that this reference has parent location details so we can clean it up later + if (!isType(parentLocation, 'Undefined') && parentLocations.indexOf(refPtr) === -1) { + parentLocations.push(refPtr); + } + + if (remoteTypes.indexOf(refDetails.type) === -1 && refDetails.type !== 'invalid') { + if (isType(refDetails.error, 'Undefined')) { + if (refPtr.indexOf(refDetails.uri) > -1) { + refDetails.circular = true; + value = {}; + } else { + if (!isType(parentLocation, 'Undefined')) { + // Attempt to get the referenced value from the remote document first + value = findValue(findValue(cloned, pathFromPtr(parentLocation)), + refDetails.uriDetails.fragment ? + pathFromPtr(refDetails.uriDetails.fragment) : + [], true); + } + } + + try { + if (isType(value, 'Undefined')) { + value = findValue(cloned, + refDetails.uriDetails.fragment ? + pathFromPtr(refDetails.uriDetails.fragment) : + []); + } + + setValue(cloned, pathFromPtr(refPtr), value); + + refDetails.value = value; + } catch (err) { + refDetails.error = err.message; + refDetails.missing = true; + } + } else { + refDetails.missing = true; + } + } + }); + + // Remove all parentLocation values + parentLocations.forEach(function (refPtr) { + delete aRefs[refPtr].parentLocation; + }); + + return { + refs: aRefs, + resolved: cloned + }; + }); + + return allTasks; +} + +/** + * Resolves JSON References defined within the document at the provided location. + * + * This API is identical to {@link module:JsonRefs.resolveRefs} except this API will retrieve a remote document and then + * return the result of {@link module:JsonRefs.resolveRefs} on the retrieved document. + * + * @param {string} location - The location to retrieve *(Can be relative or absolute, just make sure you look at the + * {@link module:JsonRefs~JsonRefsOptions|options documentation} to see how relative references are handled.)* + * @param {JsonRefsOptions} [options] - The JsonRefs options + * + * @returns {Promise} a promise that resolves a {@link module:JsonRefs~RetrievedResolvedRefsResults} and rejects with an + * `Error` when the input arguments fail validation, when `options.subDocPath` points to an invalid location or when + * the location argument points to an unloadable resource + * + * @alias module:JsonRefs.resolveRefsAt + * + * @example + * // Example that loads a JSON document (No options.loaderOptions.processContent required) and resolves all references + * JsonRefs.resolveRefsAt('./swagger.json') + * .then(function (res) { + * // Do something with the response + * // + * // res.refs: JSON Reference locations and details + * // res.resolved: The document with the appropriate JSON References resolved + * // res.value: The retrieved document + * }, function (err) { + * console.log(err.stack); + * }); + */ +function resolveRefsAt (location, options) { + var allTasks = Promise.resolve(); + + allTasks = allTasks + .then(function () { + // Validate the provided location + if (!isType(location, 'String')) { + throw new TypeError('location must be a string'); + } + + // Set default for options + if (isType(options, 'Undefined')) { + options = {}; + } + + // Validate options (Doing this here for a quick) + validateOptions(options); + + // Combine the location and the optional relative base + location = combineURIs(options.relativeBase, location); + + return getRemoteDocument(location, options); + }) + .then(function (res) { + var cOptions = clone(options); + + // Update the relative base based on the retrieved location + cOptions.relativeBase = dirname(location); + + return resolveRefs(res, cOptions) + .then(function (res2) { + return { + refs: res2.refs, + resolved: res2.resolved, + value: res + }; + }); + }); + + return allTasks; +} + +/* Export the module members */ +module.exports.clearCache = clearCache; +module.exports.decodePath = decodePath; +module.exports.encodePath = encodePath; +module.exports.findRefs = findRefs; +module.exports.findRefsAt = findRefsAt; +module.exports.getRefDetails = getRefDetails; +module.exports.isPtr = isPtr; +module.exports.isRef = isRef; +module.exports.pathFromPtr = pathFromPtr; +module.exports.pathToPtr = pathToPtr; +module.exports.resolveRefs = resolveRefs; +module.exports.resolveRefsAt = resolveRefsAt; /* * The MIT License (MIT) * @@ -32710,7 +33814,7 @@ module.exports.pathToPtr = pathToPtr; module.exports.resolveRefs = resolveRefs; module.exports.resolveRefsAt = resolveRefsAt; -},{"native-promise-only":196,"path-loader":198,"querystring":206,"slash":214,"uri-js":221}],173:[function(require,module,exports){ +},{"native-promise-only":194,"path":195,"path-loader":196,"querystring":204,"slash":212,"uri-js":219}],171:[function(require,module,exports){ 'use strict'; var container = require('./util/container'), @@ -32793,7 +33897,7 @@ generate.extend = container.set; module.exports = generate; -},{"./util/container":181,"./util/formats":183,"./util/merge":186,"./util/random":188,"./util/traverse":189,"deref":25}],174:[function(require,module,exports){ +},{"./util/container":179,"./util/formats":181,"./util/merge":184,"./util/random":186,"./util/traverse":187,"deref":23}],172:[function(require,module,exports){ 'use strict'; var random = require('../util/random'), @@ -32862,14 +33966,14 @@ module.exports = function(value, path, resolve) { return items; }; -},{"../util/error":182,"../util/has-props":184,"../util/random":188,"../util/traverse":189}],175:[function(require,module,exports){ +},{"../util/error":180,"../util/has-props":182,"../util/random":186,"../util/traverse":187}],173:[function(require,module,exports){ 'use strict'; module.exports = function() { return Math.random() > 0.5; }; -},{}],176:[function(require,module,exports){ +},{}],174:[function(require,module,exports){ 'use strict'; var number = require('./number'); @@ -32886,14 +33990,14 @@ module.exports = function(value) { return generated > 0 ? Math.floor(generated) : Math.ceil(generated); }; -},{"./number":178}],177:[function(require,module,exports){ +},{"./number":176}],175:[function(require,module,exports){ 'use strict'; module.exports = function() { return null; }; -},{}],178:[function(require,module,exports){ +},{}],176:[function(require,module,exports){ 'use strict'; var MIN_INTEGER = -100000000, @@ -32935,7 +34039,7 @@ module.exports = function(value) { return random(Math.random() > 0.5, min, max); }; -},{"../util/random":188,"./string":180}],179:[function(require,module,exports){ +},{"../util/random":186,"./string":178}],177:[function(require,module,exports){ 'use strict'; var container = require('../util/container'), @@ -32999,7 +34103,7 @@ module.exports = function(value, path, resolve) { return traverse(props, path.concat(['properties']), resolve); }; -},{"../util/container":181,"../util/error":182,"../util/has-props":184,"../util/random":188,"../util/traverse":189}],180:[function(require,module,exports){ +},{"../util/container":179,"../util/error":180,"../util/has-props":182,"../util/random":186,"../util/traverse":187}],178:[function(require,module,exports){ 'use strict'; var container = require('../util/container'); @@ -33120,7 +34224,7 @@ module.exports = function(value) { return faker.lorem.words(random(1, 5)).join(' '); }; -},{"../util/container":181,"../util/formats":183,"../util/random":188}],181:[function(require,module,exports){ +},{"../util/container":179,"../util/formats":181,"../util/random":186}],179:[function(require,module,exports){ 'use strict'; // static requires - handle both initial dependency load (deps will be available @@ -33146,7 +34250,7 @@ module.exports = { } }; -},{"chance":20,"faker":133,"randexp":207}],182:[function(require,module,exports){ +},{"chance":18,"faker":131,"randexp":205}],180:[function(require,module,exports){ 'use strict'; function ParseError(message, path) { @@ -33159,7 +34263,7 @@ ParseError.prototype = Error.prototype; module.exports = ParseError; -},{}],183:[function(require,module,exports){ +},{}],181:[function(require,module,exports){ 'use strict'; var registry = {}; @@ -33178,7 +34282,7 @@ module.exports = function(name, callback) { return registry; }; -},{}],184:[function(require,module,exports){ +},{}],182:[function(require,module,exports){ 'use strict'; module.exports = function(obj) { @@ -33187,7 +34291,7 @@ module.exports = function(obj) { }).length > 0; }; -},{}],185:[function(require,module,exports){ +},{}],183:[function(require,module,exports){ 'use strict'; var inferredProperties = { @@ -33246,7 +34350,7 @@ module.exports = function(obj, path) { } }; -},{}],186:[function(require,module,exports){ +},{}],184:[function(require,module,exports){ 'use strict'; var merge; @@ -33281,7 +34385,7 @@ merge = module.exports = function(a, b) { return a; }; -},{}],187:[function(require,module,exports){ +},{}],185:[function(require,module,exports){ 'use strict'; module.exports = { @@ -33294,7 +34398,7 @@ module.exports = { string: require('../types/string') }; -},{"../types/array":174,"../types/boolean":175,"../types/integer":176,"../types/null":177,"../types/number":178,"../types/object":179,"../types/string":180}],188:[function(require,module,exports){ +},{"../types/array":172,"../types/boolean":173,"../types/integer":174,"../types/null":175,"../types/number":176,"../types/object":177,"../types/string":178}],186:[function(require,module,exports){ 'use strict'; var container = require('./container'); @@ -33352,7 +34456,7 @@ random.pick = function(obj) { random.MIN_NUMBER = -100; random.MAX_NUMBER = 100; -},{"./container":181}],189:[function(require,module,exports){ +},{"./container":179}],187:[function(require,module,exports){ 'use strict'; var random = require('./random'); @@ -33418,7 +34522,7 @@ module.exports = function() { return traverse.apply(null, arguments); }; -},{"./error":182,"./inferred":185,"./primitives":187,"./random":188}],190:[function(require,module,exports){ +},{"./error":180,"./inferred":183,"./primitives":185,"./random":186}],188:[function(require,module,exports){ /** * lodash 3.7.2 (Custom Build) * Build: `lodash modern modularize exports="npm" -o ./` @@ -33494,7 +34598,7 @@ function isObject(value) { module.exports = baseGet; -},{}],191:[function(require,module,exports){ +},{}],189:[function(require,module,exports){ /** * lodash 3.8.1 (Custom Build) * Build: `lodash modern modularize exports="npm" -o ./` @@ -33543,7 +34647,7 @@ function toPath(value) { module.exports = toPath; -},{"lodash.isarray":193}],192:[function(require,module,exports){ +},{"lodash.isarray":191}],190:[function(require,module,exports){ /** * lodash 3.7.0 (Custom Build) * Build: `lodash modern modularize exports="npm" -o ./` @@ -33586,7 +34690,7 @@ function get(object, path, defaultValue) { module.exports = get; -},{"lodash._baseget":190,"lodash._topath":191}],193:[function(require,module,exports){ +},{"lodash._baseget":188,"lodash._topath":189}],191:[function(require,module,exports){ /** * lodash 3.0.4 (Custom Build) * Build: `lodash modern modularize exports="npm" -o ./` @@ -33768,7 +34872,7 @@ function isNative(value) { module.exports = isArray; -},{}],194:[function(require,module,exports){ +},{}],192:[function(require,module,exports){ (function (global){ /** * @license @@ -46124,7 +47228,7 @@ module.exports = isArray; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],195:[function(require,module,exports){ +},{}],193:[function(require,module,exports){ /** * Helpers. */ @@ -46251,7 +47355,7 @@ function plural(ms, n, name) { return Math.ceil(ms / n) + ' ' + name + 's'; } -},{}],196:[function(require,module,exports){ +},{}],194:[function(require,module,exports){ (function (global){ /*! Native Promise Only v0.8.1 (c) Kyle Simpson @@ -46629,7 +47733,7 @@ function plural(ms, n, name) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],197:[function(require,module,exports){ +},{}],195:[function(require,module,exports){ (function (process){ // Copyright Joyent, Inc. and other Node contributors. // @@ -46858,7 +47962,7 @@ var substr = 'ab'.substr(-1) === 'b' }).call(this,require('_process')) -},{"_process":202}],198:[function(require,module,exports){ +},{"_process":200}],196:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -47089,7 +48193,7 @@ module.exports.load = function (location, options) { return allTasks; }; -},{"./lib/loaders/file":199,"./lib/loaders/http":200,"native-promise-only":196}],199:[function(require,module,exports){ +},{"./lib/loaders/file":197,"./lib/loaders/http":198,"native-promise-only":194}],197:[function(require,module,exports){ /* * The MIT License (MIT) * @@ -47140,7 +48244,7 @@ module.exports.load = function () { } }; -},{}],200:[function(require,module,exports){ +},{}],198:[function(require,module,exports){ /* eslint-env node, browser */ /* @@ -47238,7 +48342,7 @@ module.exports.load = function (location, options, callback) { } }; -},{"superagent":215}],201:[function(require,module,exports){ +},{"superagent":213}],199:[function(require,module,exports){ var isarray = require('isarray') /** @@ -47630,7 +48734,7 @@ function pathToRegexp (path, keys, options) { return stringToRegexp(path, keys, options) } -},{"isarray":140}],202:[function(require,module,exports){ +},{"isarray":138}],200:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; @@ -47723,7 +48827,7 @@ process.chdir = function (dir) { }; process.umask = function() { return 0; }; -},{}],203:[function(require,module,exports){ +},{}],201:[function(require,module,exports){ (function (global){ /*! https://mths.be/punycode v1.4.0 by @mathias */ ;(function(root) { @@ -48261,7 +49365,7 @@ process.umask = function() { return 0; }; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],204:[function(require,module,exports){ +},{}],202:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -48347,7 +49451,7 @@ var isArray = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; -},{}],205:[function(require,module,exports){ +},{}],203:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -48434,13 +49538,13 @@ var objectKeys = Object.keys || function (obj) { return res; }; -},{}],206:[function(require,module,exports){ +},{}],204:[function(require,module,exports){ 'use strict'; exports.decode = exports.parse = require('./decode'); exports.encode = exports.stringify = require('./encode'); -},{"./decode":204,"./encode":205}],207:[function(require,module,exports){ +},{"./decode":202,"./encode":203}],205:[function(require,module,exports){ var ret = require('ret'); var DRange = require('discontinuous-range'); var types = ret.types; @@ -48678,7 +49782,7 @@ function gen(token, groups) { -},{"discontinuous-range":31,"ret":209}],208:[function(require,module,exports){ +},{"discontinuous-range":29,"ret":207}],206:[function(require,module,exports){ /** * Reduce `arr` with `fn`. @@ -48703,7 +49807,7 @@ module.exports = function(arr, fn, initial){ return curr; }; -},{}],209:[function(require,module,exports){ +},{}],207:[function(require,module,exports){ var util = require('./util'); var types = require('./types'); var sets = require('./sets'); @@ -48983,7 +50087,7 @@ module.exports = function(regexpStr) { module.exports.types = types; -},{"./positions":210,"./sets":211,"./types":212,"./util":213}],210:[function(require,module,exports){ +},{"./positions":208,"./sets":209,"./types":210,"./util":211}],208:[function(require,module,exports){ var types = require('./types'); exports.wordBoundary = function() { @@ -49002,7 +50106,7 @@ exports.end = function() { return { type: types.POSITION, value: '$' }; }; -},{"./types":212}],211:[function(require,module,exports){ +},{"./types":210}],209:[function(require,module,exports){ var types = require('./types'); var INTS = function() { @@ -49086,7 +50190,7 @@ exports.anyChar = function() { return { type: types.SET, set: NOTANYCHAR(), not: true }; }; -},{"./types":212}],212:[function(require,module,exports){ +},{"./types":210}],210:[function(require,module,exports){ module.exports = { ROOT : 0 , GROUP : 1 @@ -49098,7 +50202,7 @@ module.exports = { , CHAR : 7 }; -},{}],213:[function(require,module,exports){ +},{}],211:[function(require,module,exports){ var types = require('./types'); var sets = require('./sets'); @@ -49211,7 +50315,7 @@ exports.error = function(regexp, msg) { throw new SyntaxError('Invalid regular expression: /' + regexp + '/: ' + msg); }; -},{"./sets":211,"./types":212}],214:[function(require,module,exports){ +},{"./sets":209,"./types":210}],212:[function(require,module,exports){ 'use strict'; module.exports = function (str) { var isExtendedLengthPath = /^\\\\\?\\/.test(str); @@ -49224,7 +50328,7 @@ module.exports = function (str) { return str.replace(/\\/g, '/'); }; -},{}],215:[function(require,module,exports){ +},{}],213:[function(require,module,exports){ /** * Module dependencies. */ @@ -50427,7 +51531,7 @@ request.put = function(url, data, fn){ module.exports = request; -},{"emitter":21,"reduce":208}],216:[function(require,module,exports){ +},{"emitter":19,"reduce":206}],214:[function(require,module,exports){ /*! https://mths.be/punycode v1.3.2 by @mathias, modified for URI.js */ var punycode = (function () { @@ -50925,13 +52029,13 @@ var punycode = (function () { }()); if (typeof COMPILED === "undefined" && typeof module !== "undefined") module.exports = punycode; -},{}],217:[function(require,module,exports){ +},{}],215:[function(require,module,exports){ /// require("./schemes/http"); require("./schemes/urn"); require("./schemes/mailto"); -},{"./schemes/http":218,"./schemes/mailto":219,"./schemes/urn":220}],218:[function(require,module,exports){ +},{"./schemes/http":216,"./schemes/mailto":217,"./schemes/urn":218}],216:[function(require,module,exports){ /// if (typeof COMPILED === "undefined" && typeof URI === "undefined" && typeof require === "function") var URI = require("../uri"); @@ -50960,7 +52064,7 @@ URI.SCHEMES["http"] = URI.SCHEMES["https"] = { } }; -},{"../uri":221}],219:[function(require,module,exports){ +},{"../uri":219}],217:[function(require,module,exports){ /// if (typeof COMPILED === "undefined" && typeof URI === "undefined" && typeof require === "function") { var URI = require("../uri"), punycode = require("../punycode"); @@ -51119,7 +52223,7 @@ if (typeof COMPILED === "undefined" && typeof URI === "undefined" && typeof requ }; })(); -},{"../punycode":216,"../uri":221}],220:[function(require,module,exports){ +},{"../punycode":214,"../uri":219}],218:[function(require,module,exports){ /// if (typeof COMPILED === "undefined" && typeof URI === "undefined" && typeof require === "function") var URI = require("../uri"); @@ -51194,7 +52298,7 @@ if (typeof COMPILED === "undefined" && typeof URI === "undefined" && typeof requ }; }()); -},{"../uri":221}],221:[function(require,module,exports){ +},{"../uri":219}],219:[function(require,module,exports){ /** * URI.js * @@ -51694,7 +52798,7 @@ if (!COMPILED && typeof module !== "undefined" && typeof require === "function") require("./schemes"); } -},{"./punycode":216,"./schemes":217}],222:[function(require,module,exports){ +},{"./punycode":214,"./schemes":215}],220:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -52428,7 +53532,7 @@ Url.prototype.parseHost = function() { if (host) this.hostname = host; }; -},{"./util":223,"punycode":203,"querystring":206}],223:[function(require,module,exports){ +},{"./util":221,"punycode":201,"querystring":204}],221:[function(require,module,exports){ 'use strict'; module.exports = { @@ -52446,7 +53550,7 @@ module.exports = { } }; -},{}],224:[function(require,module,exports){ +},{}],222:[function(require,module,exports){ /*! * Copyright (c) 2015 Chris O'Hara * @@ -53347,7 +54451,7 @@ module.exports = { }); -},{}],225:[function(require,module,exports){ +},{}],223:[function(require,module,exports){ "use strict"; module.exports = { @@ -53408,7 +54512,7 @@ module.exports = { }; -},{}],226:[function(require,module,exports){ +},{}],224:[function(require,module,exports){ /*jshint maxlen: false*/ var validator = require("validator"); @@ -53539,7 +54643,7 @@ var FormatValidators = { module.exports = FormatValidators; -},{"validator":224}],227:[function(require,module,exports){ +},{"validator":222}],225:[function(require,module,exports){ "use strict"; var FormatValidators = require("./FormatValidators"), @@ -54078,7 +55182,7 @@ exports.validate = function (report, schema, json) { }; -},{"./FormatValidators":226,"./Report":229,"./Utils":233}],228:[function(require,module,exports){ +},{"./FormatValidators":224,"./Report":227,"./Utils":231}],226:[function(require,module,exports){ // Number.isFinite polyfill // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite if (typeof Number.isFinite !== "function") { @@ -54096,7 +55200,7 @@ if (typeof Number.isFinite !== "function") { }; } -},{}],229:[function(require,module,exports){ +},{}],227:[function(require,module,exports){ (function (process){ "use strict"; @@ -54299,7 +55403,7 @@ module.exports = Report; }).call(this,require('_process')) -},{"./Errors":225,"./Utils":233,"_process":202,"lodash.get":192}],230:[function(require,module,exports){ +},{"./Errors":223,"./Utils":231,"_process":200,"lodash.get":190}],228:[function(require,module,exports){ "use strict"; var Report = require("./Report"); @@ -54454,7 +55558,7 @@ exports.getSchemaByUri = function (report, uri, root) { exports.getRemotePath = getRemotePath; -},{"./Report":229,"./SchemaCompilation":231,"./SchemaValidation":232,"./Utils":233}],231:[function(require,module,exports){ +},{"./Report":227,"./SchemaCompilation":229,"./SchemaValidation":230,"./Utils":231}],229:[function(require,module,exports){ "use strict"; var Report = require("./Report"); @@ -54755,7 +55859,7 @@ exports.compileSchema = function (report, schema) { }; -},{"./Report":229,"./SchemaCache":230,"./Utils":233}],232:[function(require,module,exports){ +},{"./Report":227,"./SchemaCache":228,"./Utils":231}],230:[function(require,module,exports){ "use strict"; var FormatValidators = require("./FormatValidators"), @@ -55364,7 +56468,7 @@ exports.validateSchema = function (report, schema) { return isValid; }; -},{"./FormatValidators":226,"./JsonValidation":227,"./Report":229,"./Utils":233}],233:[function(require,module,exports){ +},{"./FormatValidators":224,"./JsonValidation":225,"./Report":227,"./Utils":231}],231:[function(require,module,exports){ "use strict"; exports.isAbsoluteUri = function (uri) { @@ -55583,7 +56687,7 @@ exports.ucs2decode = function (string) { }; /*jshint +W016*/ -},{}],234:[function(require,module,exports){ +},{}],232:[function(require,module,exports){ (function (process){ "use strict"; @@ -55938,7 +57042,7 @@ module.exports = ZSchema; }).call(this,require('_process')) -},{"./FormatValidators":226,"./JsonValidation":227,"./Polyfills":228,"./Report":229,"./SchemaCache":230,"./SchemaCompilation":231,"./SchemaValidation":232,"./Utils":233,"./schemas/hyper-schema.json":235,"./schemas/schema.json":236,"_process":202,"lodash.get":192}],235:[function(require,module,exports){ +},{"./FormatValidators":224,"./JsonValidation":225,"./Polyfills":226,"./Report":227,"./SchemaCache":228,"./SchemaCompilation":229,"./SchemaValidation":230,"./Utils":231,"./schemas/hyper-schema.json":233,"./schemas/schema.json":234,"_process":200,"lodash.get":190}],233:[function(require,module,exports){ module.exports={ "$schema": "http://json-schema.org/draft-04/hyper-schema#", "id": "http://json-schema.org/draft-04/hyper-schema#", @@ -56098,7 +57202,7 @@ module.exports={ } -},{}],236:[function(require,module,exports){ +},{}],234:[function(require,module,exports){ module.exports={ "id": "http://json-schema.org/draft-04/schema#", "$schema": "http://json-schema.org/draft-04/schema#", @@ -56253,4 +57357,4 @@ module.exports={ },{}]},{},[1])(1) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC5qcyIsImxpYi9oZWxwZXJzLmpzIiwibGliL2pzb24tc2NoZW1hLWRyYWZ0LTA0Lmpzb24iLCJsaWIvdHlwZXMvYXBpLmpzIiwibGliL3R5cGVzL29wZXJhdGlvbi5qcyIsImxpYi90eXBlcy9wYXJhbWV0ZXItdmFsdWUuanMiLCJsaWIvdHlwZXMvcGFyYW1ldGVyLmpzIiwibGliL3R5cGVzL3BhdGguanMiLCJsaWIvdHlwZXMvcmVzcG9uc2UuanMiLCJsaWIvdmVyc2lvbnMvMi4wL2Zvcm1hdC1nZW5lcmF0b3JzLmpzIiwibGliL3ZlcnNpb25zLzIuMC9mb3JtYXQtdmFsaWRhdG9ycy5qcyIsImxpYi92ZXJzaW9ucy8yLjAvaGVscGVycy5qcyIsImxpYi92ZXJzaW9ucy8yLjAvaW5kZXguanMiLCJsaWIvdmVyc2lvbnMvMi4wL3NjaGVtYS5qc29uIiwibGliL3ZlcnNpb25zLzIuMC92YWxpZGF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9saWIvYjY0LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXItcmVzb2x2ZS9lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVmZmVyL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NoYW5jZS9jaGFuY2UuanMiLCJub2RlX21vZHVsZXMvY29tcG9uZW50LWVtaXR0ZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGVidWcvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9kZWJ1Zy9kZWJ1Zy5qcyIsIm5vZGVfbW9kdWxlcy9kZWVwLWV4dGVuZC9saWIvZGVlcC1leHRlbmQuanMiLCJub2RlX21vZHVsZXMvZGVyZWYvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL2Nsb25lLW9iai5qcyIsIm5vZGVfbW9kdWxlcy9kZXJlZi9saWIvdXRpbC9maW5kLXJlZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9kZXJlZi9saWIvdXRpbC9ub3JtYWxpemUtc2NoZW1hLmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL3Jlc29sdmUtc2NoZW1hLmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL3VyaS1oZWxwZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Rpc2NvbnRpbnVvdXMtcmFuZ2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXNwcmltYS9lc3ByaW1hLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9hZGRyZXNzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9jb21tZXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvY29tcGFueS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvZmFrZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvZmluYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvaGFja2VyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9oZWxwZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9pbWFnZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2ludGVybmV0LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvYnVpbGRpbmdfbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY2l0eS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NpdHlfcHJlZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY2l0eV9zdWZmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9jb3VudHJ5LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY291bnRyeV9jb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY291bnR5LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvZGVmYXVsdF9jb3VudHJ5LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9wb3N0Y29kZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL3NlY29uZGFyeV9hZGRyZXNzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3Mvc3RhdGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9zdGF0ZV9hYmJyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3Mvc3RyZWV0X2FkZHJlc3MuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9zdHJlZXRfbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL3N0cmVldF9zdWZmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy90aW1lX3pvbmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYXBwL2F1dGhvci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hcHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYXBwL25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYXBwL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYnVzaW5lc3MvY3JlZGl0X2NhcmRfZXhwaXJ5X2RhdGVzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2J1c2luZXNzL2NyZWRpdF9jYXJkX251bWJlcnMuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYnVzaW5lc3MvY3JlZGl0X2NhcmRfdHlwZXMuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYnVzaW5lc3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY2VsbF9waG9uZS9mb3JtYXRzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NlbGxfcGhvbmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tbWVyY2UvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tbWVyY2UvZGVwYXJ0bWVudC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21tZXJjZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21tZXJjZS9wcm9kdWN0X25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9hZGplY3RpdmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9ic19hZGplY3RpdmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9ic19ub3VuLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvYnNfdmVyYi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21wYW55L2Rlc2NyaXB0b3IuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21wYW55L25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9ub3VuLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvc3VmZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2FtZXJpY2FuX2V4cHJlc3MuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvZGluZXJzX2NsdWIuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvZGlzY292ZXIuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvamNiLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2xhc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL21hZXN0cm8uanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvbWFzdGVyY2FyZC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9zb2xvLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL3N3aXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC92aXNhLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2RhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZGF0ZS9tb250aC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9kYXRlL3dlZWtkYXkuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZmluYW5jZS9hY2NvdW50X3R5cGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZmluYW5jZS9jdXJyZW5jeS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9maW5hbmNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ZpbmFuY2UvdHJhbnNhY3Rpb25fdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvYWJicmV2aWF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci9hZGplY3RpdmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vaGFja2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci9pbmd2ZXJiLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci9ub3VuLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci92ZXJiLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ludGVybmV0L2F2YXRhcl91cmkuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vaW50ZXJuZXQvZG9tYWluX3N1ZmZpeC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9pbnRlcm5ldC9mcmVlX2VtYWlsLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ludGVybmV0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2xvcmVtL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2xvcmVtL3N1cHBsZW1lbnRhbC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9sb3JlbS93b3Jkcy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9uYW1lL2ZpcnN0X25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9uYW1lL2xhc3RfbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9uYW1lL25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9wcmVmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9zdWZmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS90aXRsZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9waG9uZV9udW1iZXIvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9waG9uZV9udW1iZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vdGVhbS9jcmVhdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi90ZWFtL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL3RlYW0vbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9yZW0uanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL3Bob25lX251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvcmFuZG9tLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xvY2FsZS9lbi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci92ZW5kb3IvbWVyc2VubmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvdmVuZG9yL3Bhc3N3b3JkLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci92ZW5kb3IvdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2luaGVyaXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaW5oZXJpdC9saWIvaW5oZXJpdC5qcyIsIm5vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJhc2U2NC9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZHVtcGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZXhjZXB0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbG9hZGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbWFyay5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2JpbmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYm9vbC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvZnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3JlZ2V4cC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvdW5kZWZpbmVkLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tYXAuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9udWxsLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9vbWFwLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9wYWlycy5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2VxLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3N0ci5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvdGltZXN0YW1wLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tcmVmcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3R5cGVzL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9ib29sZWFuLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9pbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9udWxsLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3R5cGVzL29iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi91dGlsL2NvbnRhaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9lcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9mb3JtYXRzLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi91dGlsL2hhcy1wcm9wcy5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9pbmZlcnJlZC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9tZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9wcmltaXRpdmVzLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi91dGlsL3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC90cmF2ZXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2guX2Jhc2VnZXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoLl90b3BhdGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoLmdldC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2guaXNhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmF0aXZlLXByb21pc2Utb25seS9saWIvbnBvLnNyYy5qcyIsIm5vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGF0aC1sb2FkZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGF0aC1sb2FkZXIvbGliL2xvYWRlcnMvZmlsZS1icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3BhdGgtbG9hZGVyL2xpYi9sb2FkZXJzL2h0dHAuanMiLCJub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmFuZGV4cC9saWIvcmFuZGV4cC5qcyIsIm5vZGVfbW9kdWxlcy9yZWR1Y2UtY29tcG9uZW50L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JldC9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmV0L2xpYi9wb3NpdGlvbnMuanMiLCJub2RlX21vZHVsZXMvcmV0L2xpYi9zZXRzLmpzIiwibm9kZV9tb2R1bGVzL3JldC9saWIvdHlwZXMuanMiLCJub2RlX21vZHVsZXMvcmV0L2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL3NsYXNoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N1cGVyYWdlbnQvbGliL2NsaWVudC5qcyIsIm5vZGVfbW9kdWxlcy91cmktanMvYnVpbGQvcHVueWNvZGUuanMiLCJub2RlX21vZHVsZXMvdXJpLWpzL2J1aWxkL3NjaGVtZXMuanMiLCJub2RlX21vZHVsZXMvdXJpLWpzL2J1aWxkL3NjaGVtZXMvaHR0cC5qcyIsIm5vZGVfbW9kdWxlcy91cmktanMvYnVpbGQvc2NoZW1lcy9tYWlsdG8uanMiLCJub2RlX21vZHVsZXMvdXJpLWpzL2J1aWxkL3NjaGVtZXMvdXJuLmpzIiwibm9kZV9tb2R1bGVzL3VyaS1qcy9idWlsZC91cmkuanMiLCJub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy91cmwvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy92YWxpZGF0b3IvdmFsaWRhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9FcnJvcnMuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL0Zvcm1hdFZhbGlkYXRvcnMuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL0pzb25WYWxpZGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9Qb2x5ZmlsbHMuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL1JlcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvU2NoZW1hQ2FjaGUuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL1NjaGVtYUNvbXBpbGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9TY2hlbWFWYWxpZGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9VdGlscy5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvWlNjaGVtYS5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvc2NoZW1hcy9oeXBlci1zY2hlbWEuanNvbiIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvc2NoZW1hcy9zY2hlbWEuanNvbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGpEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SEE7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDNWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqaUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDck1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3bUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0cUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcHZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDajhGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVMQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFpREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1eUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMvallBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDclhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDanJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbjRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6aEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3RNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9sQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDek5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzlWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIHBhdGhMb2FkZXIgPSByZXF1aXJlKCdwYXRoLWxvYWRlcicpO1xudmFyIFlBTUwgPSByZXF1aXJlKCdqcy15YW1sJyk7XG5cbi8vIExvYWQgcHJvbWlzZXMgcG9seWZpbGwgaWYgbmVjZXNzYXJ5XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgcmVxdWlyZSgnbmF0aXZlLXByb21pc2Utb25seScpO1xufVxuXG52YXIgc3VwcG9ydGVkVmVyc2lvbnMgPSB7XG4gICcyLjAnOiByZXF1aXJlKCcuL2xpYi92ZXJzaW9ucy8yLjAvJylcbn07XG5cbi8qKlxuICogQSBsaWJyYXJ5IGZvciBzaW1wbGVyIFtTd2FnZ2VyXShodHRwOi8vc3dhZ2dlci5pby8pIGludGVncmF0aW9ucy5cbiAqXG4gKiBAbW9kdWxlIFN3YXlcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIHVzZWQgZm9yIHZhbGlkYXRpb24uXG4gKlxuICogQHR5cGVkZWYge2Z1bmN0aW9ufSBWYWxpZGF0b3JDYWxsYmFja1xuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXIgQVBJIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtWYWxpZGF0aW9uUmVzdWx0c30gVGhlIHZhbGlkYXRpb24gcmVzdWx0cy5cbiAqL1xuXG4vKipcbiAqIFNlcnZlciByZXNwb25zZSB3cmFwcGVyLlxuICpcbiAqIFNpbmNlIHRoZSBsb3cgbGV2ZWwgYGh0dHAuU2VydmVyUmVzcG9uc2VgIG9iamVjdCBpcyBub3QgYWx3YXlzIGd1YXJhbnRlZWQgYW5kIGV2ZW4gaWYgaXQgaXMsIHRoZXJlIGlzIG5vIHB1YmxpYyB3YXlcbiAqIHRvIGdhdGhlciB0aGUgbmVjZXNzYXJ5IHBhcnRzIG9mIHRoZSByZXNwb25zZSB0byBwZXJmb3JtIHZhbGlkYXRpb24sIHRoaXMgb2JqZWN0IGVuY2Fwc3VsYXRlcyB0aGUgcmVxdWlyZWQgcmVzcG9uc2VcbiAqIGluZm9ybWF0aW9uIHRvIHBlcmZvcm0gcmVzcG9uc2UgdmFsaWRhdGlvbi5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTZXJ2ZXJSZXNwb25zZVdyYXBwZXJcbiAqXG4gKiBAcHJvcGVydHkgeyp9IGJvZHkgLSBUaGUgcmVzcG9uc2UgYm9keVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlbmNvZGluZ10gLSBUaGUgZW5jb2Rpbmcgb2YgdGhlIGJvZHkgd2hlbiB0aGUgYm9keSBpcyBhIGBCdWZmZXJgXG4gKiBAcHJvcGVydHkge29iamVjdH0gaGVhZGVycyAtIFRoZSByZXNwb25zZSBoZWFkZXJzXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IFtzdGF0dXNDb2RlPWRlZmF1bHRdIC0gVGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlXG4gKi9cblxuLyoqXG4gKiBWYWxpZGF0aW9uIGVycm9yL3dhcm5pbmcgb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZhbGlkYXRpb25FbnRyeVxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb2RlIC0gVGhlIGNvZGUgdXNlZCB0byBpZGVudGlmeSB0aGUgZXJyb3Ivd2FybmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlcnJvcl0gLSBXaGVuZXZlciB0aGVyZSBpcyBhbiB1cHN0cmVhbSBgRXJyb3JgIGVuY291bnRlcmVkLCBpdHMgbWVzc2FnZSBpcyBoZXJlXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRpb25FbnRyeVtdfSBbZXJyb3JzXSAtIFRoZSBuZXN0ZWQgZXJyb3IocykgZW5jb3VudGVyZWQgZHVyaW5nIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtsaW5lYWdlXSAtIENvbnRhaW5zIHRoZSBjb21wb3NpdGlvbiBsaW5lYWdlIGZvciBjaXJjdWxhciBjb21wb3NpdGlvbiBlcnJvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvci93YXJuaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gVGhlIGhlYWRlciBuYW1lIGZvciBoZWFkZXIgdmFsaWRhdGlvbiBlcnJvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgbG9jYXRpb24gaW4gdGhlIGRvY3VtZW50IHdoZXJlIHRoZSBlcnJvci93YXJuaW5nIG9jY3VycmVkXG4gKi9cblxuLyoqXG4gKiBWYWxpZGF0aW9uIHJlc3VsdHMgb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZhbGlkYXRpb25SZXN1bHRzXG4gKlxuICogQHByb3BlcnR5IHtWYWxpZGF0aW9uRW50cnlbXX0gZXJyb3JzIC0gVGhlIHZhbGlkYXRpb24gZXJyb3JzXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRpb25FbnRyeVtdfSB3YXJuaW5ncyAtIFRoZSB2YWxpZGF0aW9uIHdhcm5pbmdzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgU3dhZ2dlckFwaSBvYmplY3QgZnJvbSBpdHMgU3dhZ2dlciBkZWZpbml0aW9uKHMpLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGxvYWRpbmcgdGhlIGRlZmluaXRpb24ocylcbiAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gb3B0aW9ucy5kZWZpbml0aW9uIC0gVGhlIFN3YWdnZXIgZGVmaW5pdGlvbiBsb2NhdGlvbiBvciBzdHJ1Y3R1cmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5qc29uUmVmc10gLSAqKFNlZSBbSnNvblJlZnN+SnNvblJlZnNPcHRpb25zXShodHRwczovL2dpdGh1Yi5jb20vd2hpdGxvY2tqYy9qc29uLXJlZnMvYmxvYi9tYXN0ZXIvZG9jcy9BUEkubWQjbW9kdWxlX0pzb25SZWZzLi5Kc29uUmVmc09wdGlvbnMpKSpcbiAqIEBwYXJhbSB7VmFsaWRhdG9yQ2FsbGJhY2tbXX0gW29wdGlvbnMuY3VzdG9tVmFsaWRhdG9yc10gLSBUaGUgY3VzdG9tIHZhbGlkYXRvcnNcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIHByb21pc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogU3dhZ2dlckFwaS5jcmVhdGUoe2RlZmluaXRpb246ICdodHRwOi8vcGV0c3RvcmUuc3dhZ2dlci5pby92Mi9zd2FnZ2VyLnlhbWwnfSlcbiAqICAgLnRoZW4oZnVuY3Rpb24gKGFwaSkge1xuICogICAgIGNvbnNvbGUubG9nKCdEb2N1bWVudGF0aW9uIFVSTDogJywgYXBpLmRvY3VtZW50YXRpb24pO1xuICogICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gKiAgICAgY29uc29sZS5lcnJvcihlcnIuc3RhY2spO1xuICogICB9KTtcbiAqL1xubW9kdWxlLmV4cG9ydHMuY3JlYXRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLy8gVmFsaWRhdGUgYXJndW1lbnRzXG4gIGFsbFRhc2tzID0gYWxsVGFza3MudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChvcHRpb25zKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9IGVsc2UgaWYgKCFfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgfSBlbHNlIGlmIChfLmlzVW5kZWZpbmVkKG9wdGlvbnMuZGVmaW5pdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5kZWZpbml0aW9uIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9IGVsc2UgaWYgKCFfLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5kZWZpbml0aW9uKSAmJiAhXy5pc1N0cmluZyhvcHRpb25zLmRlZmluaXRpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuZGVmaW5pdGlvbiBtdXN0IGJlIGVpdGhlciBhbiBvYmplY3Qgb3IgYSBzdHJpbmcnKTtcbiAgICAgIH0gZWxzZSBpZiAoIV8uaXNVbmRlZmluZWQob3B0aW9ucy5qc29uUmVmcykgJiYgIV8uaXNQbGFpbk9iamVjdChvcHRpb25zLmpzb25SZWZzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLmpzb25SZWZzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFfLmlzVW5kZWZpbmVkKG9wdGlvbnMuY3VzdG9tVmFsaWRhdG9ycykgJiYgIV8uaXNBcnJheShvcHRpb25zLmN1c3RvbVZhbGlkYXRvcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuY3VzdG9tVmFsaWRhdG9ycyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9XG5cbiAgICAgIF8uZm9yRWFjaChvcHRpb25zLmN1c3RvbVZhbGlkYXRvcnMsIGZ1bmN0aW9uICh2YWxpZGF0b3IsIGluZGV4KSB7XG4gICAgICAgIGlmICghXy5pc0Z1bmN0aW9uKHZhbGlkYXRvcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLmN1c3RvbVZhbGlkYXRvcnMgYXQgaW5kZXggJyArIGluZGV4ICsgJyBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIGlucHV0IG9wdGlvbnMgc28gYXMgbm90IHRvIGFsdGVyIHRoZW1cbiAgb3B0aW9ucyA9IF8uY2xvbmVEZWVwKG9wdGlvbnMpO1xuXG4gIC8vIFJldHJpZXZlIHRoZSBkZWZpbml0aW9uIGlmIGl0IGlzIGEgcGF0aC9VUkwgKFRoZSByZWFzb24gd2UgZG8gdGhpcyBoZXJlIGluc3RlYWQgb2YgdXNpbmcgSnNvblJlZnMjcmVzb2x2ZVJlZnNBdCBpc1xuICAvLyBiZWNhdXNlIHdlIHVzZSB0aGlzIHRvIGlkZW50aWZ5IHdoaWNoIHBsdWdpbiB3ZSB3YW50IHRvIHVzZS4pXG4gIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAvLyBMb2FkIHRoZSByZW1vdGUgZGVmaW5pdGlvbiBvciByZXR1cm4gb3B0aW9ucy5kZWZpbml0aW9uXG4gICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcob3B0aW9ucy5kZWZpbml0aW9uKSkge1xuICAgICAgICByZXR1cm4gcGF0aExvYWRlci5sb2FkKG9wdGlvbnMuanNvblJlZnMgJiYgb3B0aW9ucy5qc29uUmVmcy5yZWxhdGl2ZUJhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKG9wdGlvbnMuanNvblJlZnMucmVsYXRpdmVCYXNlLCBvcHRpb25zLmRlZmluaXRpb24pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmpzb25SZWZzICYmIG9wdGlvbnMuanNvblJlZnMubG9hZGVyT3B0aW9ucyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmpzb25SZWZzLmxvYWRlck9wdGlvbnMgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oWUFNTC5zYWZlTG9hZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZWZpbml0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIC8vIFByb2Nlc3MgdGhlIFN3YWdnZXIgZGVmaW5pdGlvbiAoaWYgcG9zc2libGUpXG4gIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAudGhlbihmdW5jdGlvbiAoYXBpRGVmaW5pdGlvbikge1xuICAgICAgdmFyIGRlZmluaXRpb24gPSBfLmZpbmQoc3VwcG9ydGVkVmVyc2lvbnMsIGZ1bmN0aW9uIChwRGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gcERlZmluaXRpb24uY2FuUHJvY2VzcyhhcGlEZWZpbml0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChkZWZpbml0aW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gaWRlbnRpZnkgdGhlIFN3YWdnZXIgdmVyc2lvbiBvciB0aGUgU3dhZ2dlciB2ZXJzaW9uIGlzIHVuc3VwcG9ydGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWZpbml0aW9uLmNyZWF0ZVN3YWdnZXJBcGkoYXBpRGVmaW5pdGlvbiwgb3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGFsbFRhc2tzO1xufTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG52YXIgbW9ja2VyID0gcmVxdWlyZSgnanNvbi1zY2hlbWEtZmFrZXInKTtcbnZhciBaU2NoZW1hID0gcmVxdWlyZSgnei1zY2hlbWEnKTtcblxudmFyIGRyYWZ0MDRKc29uID0gcmVxdWlyZSgnLi9qc29uLXNjaGVtYS1kcmFmdC0wNC5qc29uJyk7XG52YXIgZHJhZnQwNFVybCA9ICdodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSc7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUVycm9yIChvYmopIHtcbiAgLy8gUmVtb3ZlIGZpZWxkcyB0aGF0IGFyZSBub3QgaW1wb3J0YW50IG9yIGFyZSBub3QgYSBwYXJ0IG9mIHRoZSBleHBvc2VkIGNvbnRyYWN0XG4gIGRlbGV0ZSBvYmoucGFyYW1zO1xuICBkZWxldGUgb2JqLnNjaGVtYUlkO1xuXG4gIGlmIChvYmouaW5uZXIpIHtcbiAgICBfLmVhY2gob2JqLmlubmVyLCBmdW5jdGlvbiAobk9iaikge1xuICAgICAgbm9ybWFsaXplRXJyb3Iobk9iaik7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhIEpTT04gU2NoZW1hIE1vY2tlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gVGhlIG1vY2tlciBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMuZm9ybWF0R2VuZXJhdG9yc10gLSBUaGUgY3VzdG9tIGZvcm1hdCBnZW5lcmF0b3JzIHRvIHVzZVxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBKU09OIFNjaGVtYSBtb2NrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMuY3JlYXRlSlNPTlNjaGVtYU1vY2tlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXy5pc1VuZGVmaW5lZChvcHRpb25zKSkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIC8vIEV4dGVuZCBmYWtlci5qcyB0byBvbmx5IGluY2x1ZGUgdGhlICdlbicgbG9jYWxlXG4gIG1vY2tlci5leHRlbmQoJ2Zha2VyJywgZnVuY3Rpb24gKGZha2VyKSB7XG4gICAgZmFrZXIubG9jYWxlID0gJ2VuJztcblxuICAgIHJldHVybiBmYWtlcjtcbiAgfSk7XG5cbiAgLy8gQWRkIHRoZSBjdXN0b20gZm9ybWF0IGdlbmVyYXRvcnNcbiAgXy5lYWNoKG9wdGlvbnMuZm9ybWF0R2VuZXJhdG9ycywgZnVuY3Rpb24gKGhhbmRsZXIsIG5hbWUpIHtcbiAgICBtb2NrZXIuZm9ybWF0cyhuYW1lLCBoYW5kbGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1vY2tlcjtcbn07XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBjcmVhdGUgYSBKU09OIFZhbGlkYXRvci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gVGhlIHZhbGlkYXRvciBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMuZm9ybWF0VmFsaWRhdG9yc10gLSBUaGUgY3VzdG9tIGZvcm1hdCB2YWxpZGF0b3JzIHRvIHVzZVxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBKU09OIFNjaGVtYSB2YWxpZGF0b3JcbiAqL1xubW9kdWxlLmV4cG9ydHMuY3JlYXRlSlNPTlZhbGlkYXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHZhciB2YWxpZGF0b3IgPSBuZXcgWlNjaGVtYSh7XG4gICAgaWdub3JlVW5rbm93bkZvcm1hdHM6IHRydWUsXG4gICAgcmVwb3J0UGF0aEFzQXJyYXk6IHRydWVcbiAgfSk7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChfLmlzVW5kZWZpbmVkKG9wdGlvbnMpKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgLy8gQWRkIHRoZSBkcmFmdC0wNCBzcGVjXG4gIHZhbGlkYXRvci5zZXRSZW1vdGVSZWZlcmVuY2UoZHJhZnQwNFVybCwgZHJhZnQwNEpzb24pO1xuXG4gIC8vIEFkZCB0aGUgY3VzdG9tIHZhbGlkYXRvcnNcbiAgXy5lYWNoKG9wdGlvbnMuZm9ybWF0VmFsaWRhdG9ycywgZnVuY3Rpb24gKGhhbmRsZXIsIG5hbWUpIHtcbiAgICBaU2NoZW1hLnJlZ2lzdGVyRm9ybWF0KG5hbWUsIGhhbmRsZXIpO1xuICB9KTtcblxuICByZXR1cm4gdmFsaWRhdG9yO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIHZhbHVlIGFnYWluc3QgdGhlIEpTT04gU2NoZW1hIGJ5IG5hbWUgb3IgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHZhbGlkYXRvciAtIFRoZSBKU09OIFNjaGVtYSB2YWxpZGF0b3IgY3JlYXRlZCB2aWEge0BsaW5rICNjcmVhdGVKU09OVmFsaWRhdG9yfVxuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSAtIFRoZSBKU09OIFNjaGVtYVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZVxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIG9mIHRoZSB2YWxpZGF0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYSA9IGZ1bmN0aW9uICh2YWxpZGF0b3IsIHNjaGVtYSwgdmFsdWUpIHtcbiAgc2NoZW1hID0gXy5jbG9uZURlZXAoc2NoZW1hKTsgLy8gQ2xvbmUgdGhlIHNjaGVtYSBhcyB6LXNjaGVtYSBhbHRlcnMgdGhlIHByb3ZpZGVkIGRvY3VtZW50XG5cbiAgdmFyIHJlc3BvbnNlID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG5cbiAgaWYgKCF2YWxpZGF0b3IudmFsaWRhdGUodmFsdWUsIHNjaGVtYSkpIHtcbiAgICByZXNwb25zZS5lcnJvcnMgPSBfLm1hcCh2YWxpZGF0b3IuZ2V0TGFzdEVycm9ycygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBub3JtYWxpemVFcnJvcihlcnIpO1xuXG4gICAgICByZXR1cm4gZXJyO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGNvbnRlbnQgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFR5cGUgLSBUaGUgQ29udGVudC1UeXBlIHZhbHVlIG9mIHRoZSByZXF1ZXN0L3Jlc3BvbnNlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBzdXBwb3J0ZWRUeXBlcyAtIFRoZSBzdXBwb3J0ZWQgKGRlY2xhcmVkKSBDb250ZW50LVR5cGUgdmFsdWVzIGZvciB0aGUgcmVxdWVzdC9yZXNwb25zZVxuICogQHBhcmFtIHtvYmplY3R9IHJlc3VsdHMgLSBUaGUgcmVzdWx0cyBvYmplY3QgdG8gdXBkYXRlIGluIHRoZSBldmVudCBvZiBhbiBpbnZhbGlkIGNvbnRlbnQgdHlwZVxuICovXG5tb2R1bGUuZXhwb3J0cy52YWxpZGF0ZUNvbnRlbnRUeXBlID0gZnVuY3Rpb24gKGNvbnRlbnRUeXBlLCBzdXBwb3J0ZWRUeXBlcywgcmVzdWx0cykge1xuICB2YXIgcmF3Q29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcblxuICBpZiAoIV8uaXNVbmRlZmluZWQoY29udGVudFR5cGUpKSB7XG4gICAgLy8gaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxNC5odG1sI3NlYzE0LjE3XG4gICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdOyAvLyBTdHJpcCB0aGUgcGFyYW1ldGVyKHMpIGZyb20gdGhlIGNvbnRlbnQgdHlwZVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGV4YWN0IG1hdGNoIG9yIG1pbWUtdHlwZSBvbmx5IG1hdGNoXG4gIGlmIChfLmluZGV4T2Yoc3VwcG9ydGVkVHlwZXMsIHJhd0NvbnRlbnRUeXBlKSA9PT0gLTEgJiYgXy5pbmRleE9mKHN1cHBvcnRlZFR5cGVzLCBjb250ZW50VHlwZSkgPT09IC0xKSB7XG4gICAgcmVzdWx0cy5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJTlZBTElEX0NPTlRFTlRfVFlQRScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIENvbnRlbnQtVHlwZSAoJyArIGNvbnRlbnRUeXBlICsgJykuICBUaGVzZSBhcmUgc3VwcG9ydGVkOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXMuam9pbignLCAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICAgIFwiaWRcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIixcbiAgICBcIiRzY2hlbWFcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIixcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29yZSBzY2hlbWEgbWV0YS1zY2hlbWFcIixcbiAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgICAgXCJzY2hlbWFBcnJheVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicG9zaXRpdmVJbnRlZ2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwicG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIjoge1xuICAgICAgICAgICAgXCJhbGxPZlwiOiBbIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LCB7IFwiZGVmYXVsdFwiOiAwIH0gXVxuICAgICAgICB9LFxuICAgICAgICBcInNpbXBsZVR5cGVzXCI6IHtcbiAgICAgICAgICAgIFwiZW51bVwiOiBbIFwiYXJyYXlcIiwgXCJib29sZWFuXCIsIFwiaW50ZWdlclwiLCBcIm51bGxcIiwgXCJudW1iZXJcIiwgXCJvYmplY3RcIiwgXCJzdHJpbmdcIiBdXG4gICAgICAgIH0sXG4gICAgICAgIFwic3RyaW5nQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcInR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiaWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiJHNjaGVtYVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aXRsZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7fSxcbiAgICAgICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJtaW5pbXVtXCI6IDAsXG4gICAgICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJyZWdleFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbEl0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJ0eXBlXCI6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LFxuICAgICAgICBcIm1pbkl0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4UHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5Qcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCIgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXlcIiB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzXCIgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWxsT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm9uZU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwibm90XCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICB9LFxuICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IFsgXCJtYXhpbXVtXCIgXSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IFsgXCJtaW5pbXVtXCIgXVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHt9XG59XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc3dheTphcGknKTtcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xuXG4vKipcbiAqIFRoZSBTd2FnZ2VyIEFQSSBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwbHVnaW4gLSBUaGUgU3dhZ2dlciB2ZXJzaW9uIHBsdWdpblxuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgU3dhZ2dlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzb2x2ZWQgLSBUaGUgZnVsbHkgcmVzb2x2ZWQgU3dhZ2dlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlcyAtIFRoZSBsb2NhdGlvbiBhbmQgcmVzb2x1dGlvbiBvZiB0aGUgcmVzb2x2ZWQgcmVmZXJlbmNlcyBpbiB0aGUgU3dhZ2dlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHBhc3NlZCB0byBzd2FnZ2VyQXBpLmNyZWF0ZVxuICogQHBhcmFtIHtWYWxpZGF0b3JDYWxsYmFja30gW29wdGlvbnMuY3VzdG9tVmFsaWRhdG9yc10gLSBUaGUgY3VzdG9tIHZhbGlkYXRvcnNcbiAqXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRvckNhbGxiYWNrW119IGN1c3RvbVZhbGlkYXRvcnMgLSBUaGUgYXJyYXkgb2YgY3VzdG9tIHZhbGlkYXRvcnNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIEFQSSBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZG9jdW1lbnRhdGlvbiAtIFRoZSBVUkwgdG8gdGhlIFN3YWdnZXIgZG9jdW1lbnRhdGlvblxuICogQHByb3BlcnR5IHtQYXRoW119IHBhdGhPYmplY3RzIC0gVGhlIHVuaXF1ZSBwYXRoIG9iamVjdHNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvclxuICogQHByb3BlcnR5IHtvYmplY3R9IHJlZmVyZW5jZXMgLSBUaGUgcmVmZXJlbmNlIG1ldGFkYXRhICooU2VlIFtKc29uUmVmc35SZXNvbHZlZFJlZkRldGFpbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS93aGl0bG9ja2pjL2pzb24tcmVmcy9ibG9iL21hc3Rlci9kb2NzL0FQSS5tZCNtb2R1bGVfSnNvblJlZnMuLlJlc29sdmVkUmVmRGV0YWlscykpKlxuICogQHByb3BlcnR5IHtvYmplY3R9IHJlc29sdmVkIC0gVGhlIGZ1bGx5IHJlc29sdmVkIEFQSSBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBTd2FnZ2VyIEFQSSB2ZXJzaW9uXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFN3YWdnZXJBcGkgKHBsdWdpbiwgZGVmaW5pdGlvbiwgcmVzb2x2ZWQsIHJlZmVyZW5jZXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5jdXN0b21WYWxpZGF0b3JzID0gW107XG4gIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG4gIHRoaXMuZG9jdW1lbnRhdGlvbiA9IHBsdWdpbi5kb2N1bWVudGF0aW9uO1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgdGhpcy5yZWZlcmVuY2VzID0gcmVmZXJlbmNlcztcbiAgdGhpcy5yZXNvbHZlZCA9IHJlc29sdmVkO1xuICB0aGlzLnZlcnNpb24gPSBwbHVnaW4udmVyc2lvbjtcblxuICAvLyBBc3NpZ24gU3dhZ2dlciBkZWZpbml0aW9uIHByb3BlcnRpZXMgdG8gdGhlIGFwaSBmb3IgZWFzeSBhY2Nlc3NcbiAgXy5hc3NpZ24odGhpcywgZGVmaW5pdGlvbik7XG5cbiAgZGVidWcoJ0luaXRpYWxpemluZyBTd2F5IHVzaW5nICVzJywgXy5pc1N0cmluZyhvcHRpb25zLmRlZmluaXRpb24pID8gb3B0aW9ucy5kZWZpbml0aW9uIDogJ3RoZSBwcm92aWRlZCBkb2N1bWVudCcpO1xuXG4gIHRoaXMucGF0aE9iamVjdHMgPSBwbHVnaW4uZ2V0UGF0aHModGhpcyk7XG5cbiAgLy8gUmVnaXN0ZXIgY3VzdG9tIHZhbGlkYXRvcnNcbiAgXy5mb3JFYWNoKG9wdGlvbnMuY3VzdG9tVmFsaWRhdG9ycywgU3dhZ2dlckFwaS5wcm90b3R5cGUucmVnaXN0ZXJWYWxpZGF0b3IsIHRoaXMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIHBhdGggYW5kIG9wZXJhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogQmVsb3cgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB1c2VkIHdoZW4gYHJlcU9yUGF0aGAgaXMgYW4gYGh0dHAuQ2xpZW50UmVxdWVzdGAgKihvciBlcXVpdmFsZW50KSo6XG4gKlxuICogICAqIGBtZXRob2RgXG4gKiAgICogYHVybGBcbiAqXG4gKiAqKFNlZToge0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfY2xhc3NfaHR0cF9jbGllbnRyZXF1ZXN0fSkqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBwYXRoT3JSZXEgLSBUaGUgU3dhZ2dlciBwYXRoIHN0cmluZyBvciB0aGUgaHR0cCBjbGllbnQgcmVxdWVzdCAqKG9yIGVxdWl2YWxlbnQpKlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXRob2RdIC0gVGhlIFN3YWdnZXIgb3BlcmF0aW9uIG1ldGhvZFxuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb259IFRoZSBvcGVyYXRpb24gZm9yIHRoZSBwcm92aWRlZCBwYXRoIGFuZCBtZXRob2Qgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIG9wZXJhdGlvbiBmb3IgdGhhdFxuICogICAgICAgICAgICAgICAgICAgICAgcGF0aCBhbmQgbWV0aG9kIGNvbWJpbmF0aW9uLlxuICovXG5Td2FnZ2VyQXBpLnByb3RvdHlwZS5nZXRPcGVyYXRpb24gPSBmdW5jdGlvbiAocGF0aE9yUmVxLCBtZXRob2QpIHtcbiAgdmFyIHBhdGhPYmplY3QgPSB0aGlzLmdldFBhdGgocGF0aE9yUmVxKTtcbiAgdmFyIG9wZXJhdGlvbjtcblxuICBpZiAoIV8uaXNVbmRlZmluZWQocGF0aE9iamVjdCkpIHtcbiAgICBpZiAoXy5pc09iamVjdChwYXRoT3JSZXEpKSB7XG4gICAgICBtZXRob2QgPSBwYXRoT3JSZXEubWV0aG9kO1xuICAgIH1cblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChtZXRob2QpKSB7XG4gICAgICBtZXRob2QgPSBtZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBvcGVyYXRpb24gPSBwYXRoT2JqZWN0LmdldE9wZXJhdGlvbihtZXRob2QpO1xuICB9XG5cbiAgcmV0dXJuIG9wZXJhdGlvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgb3BlcmF0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIHBhdGggb3IgYWxsIG9wZXJhdGlvbnMgaW4gdGhlIEFQSS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhdIC0gVGhlIFN3YWdnZXIgcGF0aFxuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb25bXX0gQWxsIG9wZXJhdGlvbnMgZm9yIHRoZSBwcm92aWRlZCBwYXRoIG9yIGFsbCBBUEkgb3BlcmF0aW9ucy5cbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUuZ2V0T3BlcmF0aW9ucyA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gIHZhciBvcGVyYXRpb25zID0gW107XG4gIHZhciBwYXRoT2JqZWN0O1xuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhdGgpKSB7XG4gICAgXy5lYWNoKHRoaXMucGF0aE9iamVjdHMsIGZ1bmN0aW9uIChwT2JqZWN0KSB7XG4gICAgICBvcGVyYXRpb25zLnB1c2guYXBwbHkob3BlcmF0aW9ucywgcE9iamVjdC5nZXRPcGVyYXRpb25zKCkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHBhdGhPYmplY3QgPSB0aGlzLmdldFBhdGgocGF0aCk7XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocGF0aE9iamVjdCkpIHtcbiAgICAgIG9wZXJhdGlvbnMgPSBwYXRoT2JqZWN0LmdldE9wZXJhdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3BlcmF0aW9ucztcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgb3BlcmF0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIHRhZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3RhZ10gLSBUaGUgU3dhZ2dlciB0YWdcbiAqXG4gKiBAcmV0dXJucyB7T3BlcmF0aW9uW119IEFsbCBvcGVyYXRpb25zIGZvciB0aGUgcHJvdmlkZWQgdGFnLlxuICovXG5Td2FnZ2VyQXBpLnByb3RvdHlwZS5nZXRPcGVyYXRpb25zQnlUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHJldHVybiBfLnJlZHVjZSh0aGlzLnBhdGhPYmplY3RzLCBmdW5jdGlvbiAob3BlcmF0aW9ucywgcGF0aE9iamVjdCkge1xuICAgIG9wZXJhdGlvbnMucHVzaC5hcHBseShvcGVyYXRpb25zLCBwYXRoT2JqZWN0LmdldE9wZXJhdGlvbnNCeVRhZyh0YWcpKTtcblxuICAgIHJldHVybiBvcGVyYXRpb25zO1xuICB9LCBbXSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhdGggb2JqZWN0IGZvciB0aGUgZ2l2ZW4gcGF0aCBvciByZXF1ZXN0LlxuICpcbiAqICoqTm90ZToqKiBCZWxvdyBpcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHVzZWQgd2hlbiBgcmVxT3JQYXRoYCBpcyBhbiBgaHR0cC5DbGllbnRSZXF1ZXN0YCAqKG9yIGVxdWl2YWxlbnQpKjpcbiAqXG4gKiAgICogYHVybGBcbiAqXG4gKiAqKFNlZToge0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfY2xhc3NfaHR0cF9jbGllbnRyZXF1ZXN0fSkqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBwYXRoT3JSZXEgLSBUaGUgU3dhZ2dlciBwYXRoIHN0cmluZyBvciB0aGUgaHR0cCBjbGllbnQgcmVxdWVzdCAqKG9yIGVxdWl2YWxlbnQpKlxuICpcbiAqIEByZXR1cm5zIHtQYXRofSBUaGUgY29ycmVzcG9uZGluZyBQYXRoIG9iamVjdCBmb3IgdGhlIHJlcXVlc3RlZCBwYXRoIG9yIHJlcXVlc3QuXG4gKi9cblN3YWdnZXJBcGkucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbiAocGF0aE9yUmVxKSB7XG4gIHZhciB1cmw7XG5cbiAgaWYgKF8uaXNPYmplY3QocGF0aE9yUmVxKSkge1xuICAgIHVybCA9IHBhcnNlVXJsKHBhdGhPclJlcS51cmwpLnBhdGhuYW1lO1xuXG4gICAgcmV0dXJuIF8uZmluZCh0aGlzLnBhdGhPYmplY3RzLCBmdW5jdGlvbiAocGF0aE9iamVjdCkge1xuICAgICAgcmV0dXJuIF8uaXNBcnJheShwYXRoT2JqZWN0LnJlZ2V4cC5leGVjKHVybCkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfLmZpbmQodGhpcy5wYXRoT2JqZWN0cywgZnVuY3Rpb24gKHBhdGhPYmplY3QpIHtcbiAgICAgIHJldHVybiBwYXRoT3JSZXEgPT09IHBhdGhPYmplY3QucGF0aDtcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBwYXRoIG9iamVjdHMgZm9yIHRoZSBTd2FnZ2VyIEFQSS5cbiAqXG4gKiBAcmV0dXJucyB7UGF0aFtdfSBUaGUgUGF0aCBvYmplY3RzXG4gKi9cblN3YWdnZXJBcGkucHJvdG90eXBlLmdldFBhdGhzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wYXRoT2JqZWN0cztcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgdmFsaWRhdG9yLlxuICpcbiAqIEBwYXJhbSB7dmFsaWRhdG9yQ2FsbGJhY2t9IHZhbGlkYXRvciAtIFRoZSB2YWxpZGF0b3JcbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSB2YWxpZGF0b3IgaXMgbm90IGEgZnVuY3Rpb25cbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUucmVnaXN0ZXJWYWxpZGF0b3IgPSBmdW5jdGlvbiAodmFsaWRhdG9yKSB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHZhbGlkYXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWxpZGF0b3IgaXMgcmVxdWlyZWQnKTtcbiAgfSBlbHNlIGlmICghXy5pc0Z1bmN0aW9uKHZhbGlkYXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWxpZGF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB0aGlzLmN1c3RvbVZhbGlkYXRvcnMucHVzaCh2YWxpZGF0b3IpO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB2YWxpZGF0aW9uIG9mIHRoZSBTd2FnZ2VyIEFQSSBkb2N1bWVudChzKS5cbiAqXG4gKiBAcmV0dXJucyB7VmFsaWRhdGlvblJlc3VsdHN9IFRoZSB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXN1bHRzID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmdW5jdGlvbiBkb1ZhbGlkYXRpb24gKHZhbGlkYXRvcikge1xuICAgIHZhciB2UmVzdWx0cyA9IHZhbGlkYXRvcihzZWxmKTtcblxuICAgIGlmICh2UmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaC5hcHBseShyZXN1bHRzLmVycm9ycywgdlJlc3VsdHMuZXJyb3JzKTtcbiAgICB9XG5cbiAgICBpZiAodlJlc3VsdHMud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy53YXJuaW5ncy5wdXNoLmFwcGx5KHJlc3VsdHMud2FybmluZ3MsIHZSZXN1bHRzLndhcm5pbmdzKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0aGUgZG9jdW1lbnQgc3RydWN0dXJhbGx5XG4gIGRvVmFsaWRhdGlvbih0aGlzLnBsdWdpbi5nZXRTdHJ1Y3R1cmFsVmFsaWRhdG9yKCkpO1xuXG4gIC8vIFBlcmZvcm0gcmVtYWluaW5nIHZhbGlkYXRpb24gb25seSBpZiB0aGUgZG9jdW1lbnQgaXMgc3RydWN0dXJhbGx5IHZhbGlkXG4gIGlmIChyZXN1bHRzLmVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBSdW4gcGx1Z2luIHZhbGlkYXRvcnNcbiAgICBfLmZvckVhY2godGhpcy5wbHVnaW4uZ2V0U2VtYW50aWNWYWxpZGF0b3JzKCksIGRvVmFsaWRhdGlvbik7XG5cbiAgICAvLyBSdW4gY3VzdG9tIHZhbGlkYXRvcnNcbiAgICBfLmZvckVhY2godGhpcy5jdXN0b21WYWxpZGF0b3JzLCBkb1ZhbGlkYXRpb24pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN3YWdnZXJBcGk7XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc3dheTpvcGVyYXRpb24nKTtcbnZhciBzSGVscGVycyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMnKTtcblxuLyoqXG4gKiBUaGUgU3dhZ2dlciBPcGVyYXRpb24gb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBEbyBub3QgdXNlIGRpcmVjdGx5LlxuICpcbiAqICoqRXh0cmEgUHJvcGVydGllczoqKiBPdGhlciB0aGFuIHRoZSBkb2N1bWVudGVkIHByb3BlcnRpZXMsIHRoaXMgb2JqZWN0IGFsc28gZXhwb3NlcyBhbGwgcHJvcGVydGllcyBvZiB0aGUgZGVmaW5pdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyIEFQSSBvYmplY3RcbiAqIEBwYXJhbSB7UGF0aH0gcGF0aE9iamVjdCAtIFRoZSBQYXRoIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCAtIFRoZSBvcGVyYXRpb24gbWV0aG9kXG4gKiBAcGFyYW0ge3N0cmluZ30gcHRyIC0gVGhlIEpTT04gUG9pbnRlciB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBvcGVyYXRpb24gZGVmaW5pdGlvblxuICogQHBhcmFtIHtzdHJpbmdbXX0gY29uc3VtZXMgLSBUaGUgbWltZSB0eXBlcyB0aGlzIG9wZXJhdGlvbiBjb25zdW1lc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvZHVjZXMgLSBUaGUgbWltZSB0eXBlcyB0aGlzIG9wZXJhdGlvbiBwcm9kdWNlc1xuICpcbiAqIEBwcm9wZXJ0eSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXIgQVBJIG9iamVjdFxuICogQHByb3BlcnR5IHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgb3BlcmF0aW9uIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRob2QgLSBUaGUgSFRUUCBtZXRob2QgZm9yIHRoaXMgb3BlcmF0aW9uXG4gKiBAcHJvcGVydHkge1BhdGh9IHBhdGhPYmplY3QgLSBUaGUgUGF0aCBvYmplY3RcbiAqIEBwcm9wZXJ0eSB7UGFyYW1ldGVyW119IHBhcmFtZXRlck9iamVjdHMgLSBUaGUgUGFyYW1ldGVyIG9iamVjdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwdHIgLSBUaGUgSlNPTiBQb2ludGVyIHRvIHRoZSBvcGVyYXRpb25cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBzZWN1cml0eURlZmluaXRpb25zIC0gVGhlIHNlY3VyaXR5IGRlZmluaXRpb25zIHVzZWQgYnkgdGhpcyBvcGVyYXRpb25cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gT3BlcmF0aW9uIChhcGksIHBhdGhPYmplY3QsIG1ldGhvZCwgcHRyLCBkZWZpbml0aW9uLCBjb25zdW1lcywgcHJvZHVjZXMpIHtcbiAgdGhpcy5hcGkgPSBhcGk7XG4gIHRoaXMucGF0aE9iamVjdCA9IHBhdGhPYmplY3Q7XG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICB0aGlzLnB0ciA9IHB0cjtcbiAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcblxuICAvLyBBc3NpZ24gU3dhZ2dlciBkZWZpbml0aW9uIHByb3BlcnRpZXMgdG8gdGhlIG9wZXJhdGlvbiBmb3IgZWFzeSBhY2Nlc3NcbiAgXy5hc3NpZ24odGhpcywgZGVmaW5pdGlvbik7XG5cbiAgLy8gQXNzaWduIGNvbnN1bWVzL3Byb2R1Y2VzIGFmdGVyIG1lcmdpbmcgcHJvcGVydGllc1xuICB0aGlzLmNvbnN1bWVzID0gY29uc3VtZXM7XG4gIHRoaXMucHJvZHVjZXMgPSBwcm9kdWNlcztcblxuICBkZWJ1ZygnRm91bmQgb3BlcmF0aW9uIGF0ICVzJywgcHRyKTtcblxuICB0aGlzLnBhcmFtZXRlck9iamVjdHMgPSBhcGkucGx1Z2luLmdldE9wZXJhdGlvblBhcmFtZXRlcnModGhpcyk7XG4gIHRoaXMucmVzcG9uc2VPYmplY3RzID0gYXBpLnBsdWdpbi5nZXRPcGVyYXRpb25SZXNwb25zZXModGhpcyk7XG5cbiAgLy8gQnJpbmcgaW4gdGhlIHNlY3VyaXR5IGRlZmluaXRpb25zIGZvciBlYXNpZXIgYWNjZXNzXG4gIHRoaXMuc2VjdXJpdHlEZWZpbml0aW9ucyA9IF8ucmVkdWNlKGRlZmluaXRpb24uc2VjdXJpdHksIGZ1bmN0aW9uIChkZWZzLCByZXFzKSB7XG4gICAgXy5lYWNoKHJlcXMsIGZ1bmN0aW9uIChyZXEsIG5hbWUpIHtcbiAgICAgIHZhciBkZWYgPSBhcGkucmVzb2x2ZWQuc2VjdXJpdHlEZWZpbml0aW9ucyA/IGFwaS5yZXNvbHZlZC5zZWN1cml0eURlZmluaXRpb25zW25hbWVdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmKSkge1xuICAgICAgICBkZWZzW25hbWVdID0gZGVmO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlZnM7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgd2l0aCB0aGUgcHJvdmlkZWQgbG9jYXRpb24gYW5kIG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2xvY2F0aW9uXSAtIFRoZSBsb2NhdGlvbiAqKGBpbmApKiBvZiB0aGUgcGFyYW1ldGVyICooVXNlZCBmb3IgZGlzYW1iaWd1YXRpb24pKlxuICpcbiAqIEByZXR1cm5zIHtQYXJhbWV0ZXJ9IFRoZSBwYXJhbWV0ZXIgbWF0Y2hpbmcgdGhlIGxvY2F0aW9uIGFuZCBuYW1lIGNvbWJpbmF0aW9uIG9yIGB1bmRlZmluZWRgIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICovXG5PcGVyYXRpb24ucHJvdG90eXBlLmdldFBhcmFtZXRlciA9IGZ1bmN0aW9uIChuYW1lLCBsb2NhdGlvbikge1xuICByZXR1cm4gXy5maW5kKHRoaXMucGFyYW1ldGVyT2JqZWN0cywgZnVuY3Rpb24gKHBhcmFtZXRlck9iamVjdCkge1xuICAgIHJldHVybiBwYXJhbWV0ZXJPYmplY3QubmFtZSA9PT0gbmFtZSAmJiAoXy5pc1VuZGVmaW5lZChsb2NhdGlvbikgPyB0cnVlIDogcGFyYW1ldGVyT2JqZWN0LmluID09PSBsb2NhdGlvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtQYXJhbWV0ZXJbXX0gQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBvcGVyYXRpb24uXG4gKi9cbk9wZXJhdGlvbi5wcm90b3R5cGUuZ2V0UGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGFyYW1ldGVyT2JqZWN0cztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0ZWQgc3RhdHVzIGNvZGUgb3IgdGhlIGRlZmF1bHQgcmVzcG9uc2UgKihpZiBhdmFpbGFibGUpKiBpZiBub25lIGlzIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW3N0YXR1c0NvZGU9J2RlZmF1bHQnXSAtIFRoZSBzdGF0dXMgY29kZVxuICpcbiAqIEByZXR1cm5zIHtSZXNwb25zZX0gVGhlIHJlc3BvbnNlIG9yIHVuZGVmaW5lZCBpZiBvbmUgY2Fubm90IGJlIGZvdW5kXG4gKi9cbk9wZXJhdGlvbi5wcm90b3R5cGUuZ2V0UmVzcG9uc2UgPSBmdW5jdGlvbiAoc3RhdHVzQ29kZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChzdGF0dXNDb2RlKSkge1xuICAgIHN0YXR1c0NvZGUgPSAnZGVmYXVsdCc7XG4gIH0gZWxzZSBpZiAoXy5pc051bWJlcihzdGF0dXNDb2RlKSkge1xuICAgIHN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlLnRvU3RyaW5nKCk7XG4gIH1cblxuICByZXR1cm4gXy5maW5kKHRoaXMuZ2V0UmVzcG9uc2VzKCksIGZ1bmN0aW9uIChyZXNwb25zZU9iamVjdCkge1xuICAgIHJldHVybiByZXNwb25zZU9iamVjdC5zdGF0dXNDb2RlID09PSBzdGF0dXNDb2RlO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgcmVzcG9uc2VzIGZvciB0aGUgb3BlcmF0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtSZXNwb25zZVtdfSBBbGwgcmVzcG9uc2VzIGZvciB0aGUgb3BlcmF0aW9uLlxuICovXG5PcGVyYXRpb24ucHJvdG90eXBlLmdldFJlc3BvbnNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVzcG9uc2VPYmplY3RzO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHJlcXVlc3QuXG4gKlxuICogKipOb3RlOioqIEJlbG93IGlzIHRoZSBsaXN0IG9mIGByZXFgIHByb3BlcnRpZXMgdXNlZCAqKHJlcSBzaG91bGQgYmUgYW4gYGh0dHAuQ2xpZW50UmVxdWVzdGAgb3IgZXF1aXZhbGVudCkqOlxuICpcbiAqICAgKiBgYm9keWA6IFVzZWQgZm9yIGBib2R5YCBhbmQgYGZvcm1EYXRhYCBwYXJhbWV0ZXJzXG4gKiAgICogYGZpbGVzYDogVXNlZCBmb3IgYGZvcm1EYXRhYCBwYXJhbWV0ZXJzIHdob3NlIGB0eXBlYCBpcyBgZmlsZWBcbiAqICAgKiBgaGVhZGVyc2A6IFVzZWQgZm9yIGBoZWFkZXJgIHBhcmFtZXRlcnMgYW5kIGNvbnN1bWVzXG4gKiAgICogYHF1ZXJ5YDogVXNlZCBmb3IgYHF1ZXJ5YCBwYXJhbWV0ZXJzXG4gKiAgICogYHVybGA6IHVzZWQgZm9yIGBwYXRoYCBwYXJhbWV0ZXJzXG4gKlxuICogRm9yIGBwYXRoYCBwYXJhbWV0ZXJzLCB3ZSB3aWxsIHVzZSB0aGUgb3BlcmF0aW9uJ3MgYHJlZ2V4cGAgcHJvcGVydHkgdG8gcGFyc2Ugb3V0IHBhdGggcGFyYW1ldGVycyB1c2luZyB0aGUgYHVybGBcbiAqIHByb3BlcnR5LlxuICpcbiAqICooU2VlOiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9jbGFzc19odHRwX2NsaWVudHJlcXVlc3R9KSpcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVxIC0gVGhlIGh0dHAgY2xpZW50IHJlcXVlc3QgKihvciBlcXVpdmFsZW50KSpcbiAqXG4gKiBAcmV0dXJucyB7VmFsaWRhdGlvblJlc3VsdHN9IFRoZSB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuT3BlcmF0aW9uLnByb3RvdHlwZS52YWxpZGF0ZVJlcXVlc3QgPSBmdW5jdGlvbiAocmVxKSB7XG4gIHZhciByZXN1bHRzID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG5cbiAgLy8gVmFsaWRhdGUgdGhlIENvbnRlbnQtVHlwZSBidXQgb25seSBmb3IgUE9TVCBhbmQgUFVUIChUaGUgcmVzdCBkbyBub3QgaGF2ZSBib2RpZXMpXG4gIGlmIChbJ3Bvc3QnLCAncHV0J10uaW5kZXhPZih0aGlzLm1ldGhvZCkgPiAtMSkge1xuICAgIC8vIERlZmF1bHRzIHRvIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSBwZXIgaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM3Lmh0bWwjc2VjNy4yLjFcbiAgICBzSGVscGVycy52YWxpZGF0ZUNvbnRlbnRUeXBlKHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgdGhpcy5jb25zdW1lcywgcmVzdWx0cyk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0aGUgcGFyYW1ldGVyc1xuICBfLmVhY2godGhpcy5nZXRQYXJhbWV0ZXJzKCksIGZ1bmN0aW9uIChwYXJhbSkge1xuICAgIHZhciBwYXJhbVZhbHVlID0gcGFyYW0uZ2V0VmFsdWUocmVxKTtcbiAgICB2YXIgdkVycjtcblxuICAgIGlmICghcGFyYW1WYWx1ZS52YWxpZCkge1xuICAgICAgdkVyciA9IHtcbiAgICAgICAgY29kZTogJ0lOVkFMSURfUkVRVUVTVF9QQVJBTUVURVInLFxuICAgICAgICBlcnJvcnM6IHBhcmFtVmFsdWUuZXJyb3IuZXJyb3JzIHx8IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiBwYXJhbVZhbHVlLmVycm9yLmNvZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBwYXJhbVZhbHVlLmVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICBwYXRoOiBwYXJhbVZhbHVlLmVycm9yLnBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGluOiBwYXJhbVZhbHVlLnBhcmFtZXRlck9iamVjdC5pbixcbiAgICAgICAgLy8gUmVwb3J0IHRoZSBhY3R1YWwgZXJyb3IgaWYgdGhlcmUgaXMgb25seSBvbmUgZXJyb3IuICBPdGhlcndpc2UsIHJlcG9ydCBhIEpTT04gU2NoZW1hIHZhbGlkYXRpb24gZXJyb3IuXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHBhcmFtZXRlciAoJyArIHBhcmFtLm5hbWUgKyAnKTogJyArICgocGFyYW1WYWx1ZS5lcnJvcnMgfHwgW10pLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZhbHVlIGZhaWxlZCBKU09OIFNjaGVtYSB2YWxpZGF0aW9uJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlLmVycm9yLm1lc3NhZ2UpLFxuICAgICAgICBuYW1lOiBwYXJhbVZhbHVlLnBhcmFtZXRlck9iamVjdC5uYW1lLFxuICAgICAgICBwYXRoOiBwYXJhbVZhbHVlLmVycm9yLnBhdGhcbiAgICAgIH07XG5cbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2godkVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge1NlcnZlclJlc3BvbnNlV3JhcHBlcn0gcmVzIC0gVGhlIHJlc3BvbnNlIG9yIHJlc3BvbnNlIGxpa2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMge1ZhbGlkYXRpb25SZXN1bHRzfSBUaGUgdmFsaWRhdGlvbiByZXN1bHRzXG4gKi9cbk9wZXJhdGlvbi5wcm90b3R5cGUudmFsaWRhdGVSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgdmFyIHJlc3VsdHMgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcbiAgdmFyIHJlYWxTdGF0dXNDb2RlID0gcmVzID8gcmVzLnN0YXR1c0NvZGUgOiAnZGVmYXVsdCc7XG4gIHZhciByZXNwb25zZSA9IHRoaXMuZ2V0UmVzcG9uc2UocmVhbFN0YXR1c0NvZGUpO1xuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHJlc3BvbnNlKSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIHJlc3BvbnNlIGZvciB0aGUgcmVxdWVzdGVkIHN0YXR1cywgdXNlIHRoZSBkZWZhdWx0IGlmIHRoZXJlIGlzIG9uZSAoVGhpcyBpcyBTd2FnZ2VyJ3MgYXBwcm9hY2gpXG4gICAgcmVzcG9uc2UgPSB0aGlzLmdldFJlc3BvbnNlKCdkZWZhdWx0Jyk7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXNwb25zZSkpIHtcbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFX0NPREUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGlzIG9wZXJhdGlvbiBkb2VzIG5vdCBoYXZlIGEgZGVmaW5lZCBcXCcnICsgKHJlYWxTdGF0dXNDb2RlID09PSAnZGVmYXVsdCcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbFN0YXR1c0NvZGUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxTdGF0dXNDb2RlICsgJ1xcJyBvciBcXCdkZWZhdWx0JykgKyAnXFwnIHJlc3BvbnNlIGNvZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN1bHRzID0gcmVzcG9uc2UudmFsaWRhdGVSZXNwb25zZShyZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9wZXJhdGlvbjtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMnKTtcbnZhciBKc29uUmVmcyA9IHJlcXVpcmUoJ2pzb24tcmVmcycpO1xuXG4vKipcbiAqIE9iamVjdCByZXByZXNlbnRpbmcgYSBwYXJhbWV0ZXIgdmFsdWUuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtQYXJhbWV0ZXJ9IHBhcmFtZXRlciAtIFRoZSBQYXJhbWV0ZXIgT2JqZWN0XG4gKiBAcGFyYW0geyp9IHJhdyAtIFRoZSBvcmlnaW5hbC9yYXcgdmFsdWVcbiAqXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvciAtIFRoZSBlcnJvcihzKSBlbmNvdW50ZXJlZCBkdXJpbmcgcHJvY2Vzc2luZy92YWxpZGF0aW5nIHRoZSBwYXJhbWV0ZXIgdmFsdWVcbiAqIEBwcm9wZXJ0eSB7UGFyYW1ldGVyfSBwYXJhbWV0ZXJPYmplY3QgLSBUaGUgUGFyYW1ldGVyIG9iamVjdFxuICogQHByb3BlcnR5IHsqfSByYXcgLSBUaGUgb3JpZ2luYWwgcGFyYW1ldGVyIHZhbHVlICooRG9lcyBub3QgdGFrZSBkZWZhdWx0IHZhbHVlcyBpbnRvIGFjY291bnQpKlxuICogQHByb3BlcnR5IHtib29sZWFufSB2YWxpZCAtIFdoZXRoZXIgb3Igbm90IHRoaXMgcGFyYW1ldGVyIGlzIHZhbGlkIGJhc2VkIG9uIGl0cyBKU09OIFNjaGVtYVxuICogQHByb3BlcnR5IHsqfSB2YWx1ZSAtIFRoZSBwcm9jZXNzZWQgdmFsdWUgKihUYWtlcyBkZWZhdWx0IHZhbHVlcyBpbnRvIGFjY291bnQgYW5kIGRvZXMgdHlwZSBjb2VyY2lvbiB3aGVuIG5lY2Vzc2FyeVxuICogICAgICAgICAgICAgICAgICAgICAgIGFuZCBwb3NzaWJsZSkqLiAgVGhpcyBjYW4gdGhlIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBldmVudCB0aGF0IHByb2Nlc3NpbmcgdGhlIHZhbHVlIGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgaW1wb3NzaWJsZSAqKG1pc3Npbmcgc2NoZW1hIHR5cGUpKiBvciBgdW5kZWZpbmVkYCBpZiBwcm9jZXNzaW5nIHRoZSB2YWx1ZSBmYWlsZWQgKihpbnZhbGlkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMsIGV0Yy4pKi5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUGFyYW1ldGVyVmFsdWUgKHBhcmFtZXRlciwgcmF3KSB7XG4gIHZhciBwbHVnaW4gPSBwYXJhbWV0ZXIucGF0aE9iamVjdC5hcGkucGx1Z2luO1xuICB2YXIgcFBhdGggPSBKc29uUmVmcy5wYXRoRnJvbVB0cihwYXJhbWV0ZXIucHRyKTtcbiAgdmFyIHByb2Nlc3NlZCA9IGZhbHNlO1xuICB2YXIgc2NoZW1hID0gcGFyYW1ldGVyLmNvbXB1dGVkU2NoZW1hO1xuICB2YXIgZXJyb3I7XG4gIHZhciBpc1ZhbGlkO1xuICB2YXIgcHJvY2Vzc2VkVmFsdWU7XG5cbiAgdGhpcy5wYXJhbWV0ZXJPYmplY3QgPSBwYXJhbWV0ZXI7XG4gIHRoaXMucmF3ID0gcmF3O1xuXG4gIC8vIFVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgZm9yICd2YWx1ZScgdG8gYWxsb3cgZm9yIGxhenkgcHJvY2Vzc2luZyBvZiB0aGUgcmF3IHZhbHVlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICBlcnJvcjoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBBbHdheXMgY2FsbCB0aGlzLnZhbGlkIHRvIGVuc3VyZSB3ZSB2YWxpZGF0ZSB0aGUgdmFsdWUgcHJpb3IgdG8gcmV0dXJuaW5nIGFueSB2YWx1ZXNcbiAgICAgICAgaWYgKHRoaXMudmFsaWQgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWQ6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgIHdhcm5pbmdzOiBbXVxuICAgICAgICB9O1xuICAgICAgICB2YXIgc2tpcFZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICB2YXIgdkVycm9yO1xuXG4gICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKGlzVmFsaWQpKSB7XG4gICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQoZXJyb3IpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZG5lc3NcbiAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5yZXF1aXJlZCA9PT0gdHJ1ZSAmJiBfLmlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZFcnJvciA9IG5ldyBFcnJvcignVmFsdWUgaXMgcmVxdWlyZWQgYnV0IHdhcyBub3QgcHJvdmlkZWQnKTtcblxuICAgICAgICAgICAgICAgIHZFcnJvci5jb2RlID0gJ1JFUVVJUkVEJztcblxuICAgICAgICAgICAgICAgIHRocm93IHZFcnJvcjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIENhc2VzIHdlIGRvIG5vdCB3YW50IHRvIGRvIHNjaGVtYSB2YWxpZGF0aW9uOlxuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyAgICogVGhlIHNjaGVtYSBleHBsaWNpdGx5IGFsbG93cyBlbXB0eSB2YWx1ZXMgYW5kIHRoZSB2YWx1ZSBpcyBlbXB0eVxuICAgICAgICAgICAgICAvLyAgICogVGhlIHNjaGVtYSBhbGxvdyBvcHRpb25hbCB2YWx1ZXMgYW5kIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgLy8gICAqIFRoZSBzY2hlbWEgZGVmaW5lcyBhIGZpbGUgcGFyYW1ldGVyXG4gICAgICAgICAgICAgIC8vICAgKiBUaGUgc2NoZW1hIGlzIGZvciBhIHN0cmluZyB0eXBlIHdpdGggZGF0ZS9kYXRlLXRpbWUgZm9ybWF0IGFuZCB0aGUgdmFsdWUgaXMgYSBkYXRlXG4gICAgICAgICAgICAgIC8vICAgKiBUaGUgc2NoZW1hIGlzIGZvciBhIHN0cmluZyB0eXBlIGFuZCB0aGUgdmFsdWUgaXMgYSBCdWZmZXJcbiAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5yZXF1aXJlZCA9PT0gZmFsc2UgJiYgXy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmFsbG93RW1wdHlWYWx1ZSA9PT0gdHJ1ZSAmJiB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAoWydkYXRlJywgJ2RhdGUtdGltZSddLmluZGV4T2Yoc2NoZW1hLmZvcm1hdCkgPiAtMSAmJiBfLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS50eXBlID09PSAnc3RyaW5nJyAmJiBfLmlzRnVuY3Rpb24odmFsdWUucmVhZFVJbnQ4KSkge1xuICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBhZ2FpbnN0IEpTT04gU2NoZW1hXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaGVscGVycy52YWxpZGF0ZUFnYWluc3RTY2hlbWEocGx1Z2luLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKSwgcGFyYW1ldGVyLmdldFNjaGVtYSgpLCB2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdkVycm9yID0gbmV3IEVycm9yKCdWYWx1ZSBmYWlsZWQgSlNPTiBTY2hlbWEgdmFsaWRhdGlvbicpO1xuXG4gICAgICAgICAgICAgICAgdkVycm9yLmNvZGUgPSAnU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEJztcbiAgICAgICAgICAgICAgICB2RXJyb3IuZXJyb3JzID0gcmVzdWx0LmVycm9ycztcblxuICAgICAgICAgICAgICAgIHRocm93IHZFcnJvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGVyci5mYWlsZWRWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZXJyLnBhdGggPSBwUGF0aDtcblxuICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZToge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXByb2Nlc3NlZCkge1xuICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IHJhdztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydC9Db2VyY2UgdGhlIHJhdyB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkVmFsdWUgPSBwbHVnaW4uY29udmVydFZhbHVlKHNjaGVtYSwge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IHBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0XG4gICAgICAgICAgICAgIH0sIHJhdyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIHN0aWxsIG5vIHZhbHVlIGFuZCB0aGVyZSBhcmUgbm8gZXJyb3JzLCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgaWYgYXZhaWxhYmxlIChubyBjb2VyY2lvbilcbiAgICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHByb2Nlc3NlZFZhbHVlKSAmJiBfLmlzVW5kZWZpbmVkKGVycm9yKSkge1xuICAgICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBpZiAoXy5pc0FycmF5KHNjaGVtYS5pdGVtcykpIHtcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFZhbHVlID0gXy5yZWR1Y2Uoc2NoZW1hLml0ZW1zLCBmdW5jdGlvbiAoaXRlbXMsIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtLmRlZmF1bHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgICAgICAgICAgIH0sIFtdKTtcblxuICAgICAgICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgaXRlbXMgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgcmVzZXQgdGhlIHByb2Nlc3NlZCB2YWx1ZSB0byAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgaWYgKF8uYWxsKHByb2Nlc3NlZFZhbHVlLCBfLmlzVW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHNjaGVtYS5pdGVtcykgJiYgIV8uaXNVbmRlZmluZWQoc2NoZW1hLml0ZW1zLmRlZmF1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFZhbHVlID0gW3NjaGVtYS5pdGVtcy5kZWZhdWx0XTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkVmFsdWUgPSBzY2hlbWEuZGVmYXVsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyYW1ldGVyVmFsdWU7XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc3dheTpwYXJhbWV0ZXInKTtcbnZhciBPcGVyYXRpb24gPSByZXF1aXJlKCcuL29wZXJhdGlvbicpO1xudmFyIFBhcmFtZXRlclZhbHVlID0gcmVxdWlyZSgnLi9wYXJhbWV0ZXItdmFsdWUnKTtcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xuXG4vKipcbiAqIFRoZSBTd2FnZ2VyIFBhcmFtZXRlciBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPcGVyYXRpb258UGF0aH0gb3BPclBhdGggLSBUaGUgT3BlcmF0aW9uIG9yIFBhdGggb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHRyIC0gVGhlIEpTT04gUG9pbnRlciB0byB0aGUgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBwYXJhbWV0ZXIgZGVmaW5pdGlvblxuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSAtIFRoZSBKU09OIFNjaGVtYSBmb3IgdGhlIHBhcmFtZXRlclxuICpcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge09wZXJhdGlvbn0gb3BlcmF0aW9uT2JqZWN0IC0gVGhlIE9wZXJhdGlvbiBvYmplY3QgKENhbiBiZSB1bmRlZmluZWQgZm9yIHBhdGgtbGV2ZWwgcGFyYW1ldGVycylcbiAqIEBwcm9wZXJ0eSB7UGF0aH0gcGF0aE9iamVjdCAtIFRoZSBQYXRoIG9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHB0ciAtIFRoZSBKU09OIFBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge29iamVjdH0gc2NoZW1hIC0gVGhlIEpTT04gU2NoZW1hIGZvciB0aGUgcGFyYW1ldGVyXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFBhcmFtZXRlciAob3BPclBhdGgsIHB0ciwgZGVmaW5pdGlvbiwgc2NoZW1hKSB7XG4gIHRoaXMuY29tcHV0ZWRTY2hlbWEgPSBzY2hlbWE7XG4gIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG4gIHRoaXMucHRyID0gcHRyO1xuXG4gIGlmIChvcE9yUGF0aCBpbnN0YW5jZW9mIE9wZXJhdGlvbikge1xuICAgIHRoaXMub3BlcmF0aW9uT2JqZWN0ID0gb3BPclBhdGg7XG4gICAgdGhpcy5wYXRoT2JqZWN0ID0gb3BPclBhdGgucGF0aE9iamVjdDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wZXJhdGlvbk9iamVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhdGhPYmplY3QgPSBvcE9yUGF0aDtcbiAgfVxuXG4gIC8vIEFzc2lnbiBTd2FnZ2VyIGRlZmluaXRpb24gcHJvcGVydGllcyB0byB0aGUgcGFyYW1ldGVyIGZvciBlYXN5IGFjY2Vzc1xuICBfLmFzc2lnbih0aGlzLCBkZWZpbml0aW9uKTtcblxuICBkZWJ1ZygnRm91bmQgJXMgcGFyYW1ldGVyICglcyBpbiAlcykgYXQgJXMnLFxuICAgICAgICBfLmlzVW5kZWZpbmVkKHRoaXMub3BlcmF0aW9uT2JqZWN0KSA/ICdwYXRoLWxldmVsJyA6ICdvcGVyYXRpb24nLFxuICAgICAgICBkZWZpbml0aW9uLm5hbWUsXG4gICAgICAgIGRlZmluaXRpb24uaW4sXG4gICAgICAgIHB0cik7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29tcHV0ZWQgSlNPTiBTY2hlbWEgZm9yIHRoaXMgcGFyYW1ldGVyIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgSlNPTiBTY2hlbWFcbiAqL1xuUGFyYW1ldGVyLnByb3RvdHlwZS5nZXRTY2hlbWEgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNvbXB1dGVkU2NoZW1hO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc2FtcGxlIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyIGJhc2VkIG9uIGl0cyBzY2hlbWE7XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSBzYW1wbGUgdmFsdWVcbiAqL1xuUGFyYW1ldGVyLnByb3RvdHlwZS5nZXRTYW1wbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBhdGhPYmplY3QuYXBpLnBsdWdpbi5nZXRTYW1wbGUodGhpcy5jb21wdXRlZFNjaGVtYSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0LlxuICpcbiAqICoqTm90ZToqKiBCZWxvdyBpcyB0aGUgbGlzdCBvZiBgcmVxYCBwcm9wZXJ0aWVzIHVzZWQgKihyZXEgc2hvdWxkIGJlIGFuIGBodHRwLkNsaWVudFJlcXVlc3RgIG9yIGVxdWl2YWxlbnQpKjpcbiAqXG4gKiAgICogYGJvZHlgOiBVc2VkIGZvciBgYm9keWAgYW5kIGBmb3JtRGF0YWAgcGFyYW1ldGVyc1xuICogICAqIGBmaWxlc2A6IFVzZWQgZm9yIGBmb3JtRGF0YWAgcGFyYW1ldGVycyB3aG9zZSBgdHlwZWAgaXMgYGZpbGVgXG4gKiAgICogYGhlYWRlcnNgOiBVc2VkIGZvciBgaGVhZGVyYCBwYXJhbWV0ZXJzXG4gKiAgICogYHF1ZXJ5YDogVXNlZCBmb3IgYHF1ZXJ5YCBwYXJhbWV0ZXJzXG4gKiAgICogYHVybGA6IHVzZWQgZm9yIGBwYXRoYCBwYXJhbWV0ZXJzXG4gKlxuICogRm9yIGBwYXRoYCBwYXJhbWV0ZXJzLCB3ZSB3aWxsIHVzZSB0aGUgb3BlcmF0aW9uJ3MgYHJlZ2V4cGAgcHJvcGVydHkgdG8gcGFyc2Ugb3V0IHBhdGggcGFyYW1ldGVycyB1c2luZyB0aGUgYHVybGBcbiAqIHByb3BlcnR5LlxuICpcbiAqICooU2VlOiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9jbGFzc19odHRwX2NsaWVudHJlcXVlc3R9KSpcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVxIC0gVGhlIGh0dHAgY2xpZW50IHJlcXVlc3QgKihvciBlcXVpdmFsZW50KSpcbiAqXG4gKiBAcmV0dXJucyB7UGFyYW1ldGVyVmFsdWV9IFRoZSBwYXJhbWV0ZXIgdmFsdWUgb2JqZWN0XG4gKlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBgaW5gIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIncyBzY2hlbWEgaXMgbm90IHZhbGlkIG9yIGlmIHRoZSBgcmVxYCBwcm9wZXJ0eSB0byByZXRyaWV2ZSB0aGVcbiAqICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgaXMgbWlzc2luZy5cbiAqL1xuUGFyYW1ldGVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChyZXEpIHtcbiAgdmFyIGFwaSA9ICh0aGlzLm9wZXJhdGlvbk9iamVjdCB8fCB0aGlzLnBhdGhPYmplY3QpLmFwaTtcblxuICBpZiAoXy5pc1VuZGVmaW5lZChyZXEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVxIGlzIHJlcXVpcmVkJyk7XG4gIH0gZWxzZSBpZiAoYXBpLnBsdWdpbi5wYXJhbWV0ZXJMb2NhdGlvbnMuaW5kZXhPZih0aGlzLmluKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgXFwnaW5cXCcgdmFsdWU6ICcgKyB0aGlzLmluKTtcbiAgfVxuXG4gIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgdGhlIHR5cGUgb2YgcmVxXG5cbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIgdHlwZSA9IHRoaXMuY29tcHV0ZWRTY2hlbWEudHlwZSB8fCAnb2JqZWN0JztcbiAgdmFyIHBhdGhNYXRjaDtcbiAgdmFyIHZhbHVlO1xuXG4gIHN3aXRjaCAodGhpcy5pbikge1xuICBjYXNlICdib2R5JzpcbiAgICB2YWx1ZSA9IHJlcS5ib2R5O1xuICAgIGJyZWFrO1xuICBjYXNlICdmb3JtRGF0YSc6XG4gICAgLy8gRm9yIGZvcm1EYXRhLCBlaXRoZXIgdGhlIHZhbHVlIGlzIGEgZmlsZSBvciBhIHByb3BlcnR5IG9mIHJlcS5ib2R5LiAgcmVxLmJvZHkgYXMgYSB3aG9sZSBjYW4gbmV2ZXIgYmUgdGhlXG4gICAgLy8gdmFsdWUgc2luY2UgdGhlIEpTT04gU2NoZW1hIGZvciBmb3JtRGF0YSBwYXJhbWV0ZXJzIGRvZXMgbm90IGFsbG93IGEgdHlwZSBvZiAnb2JqZWN0Jy5cbiAgICBpZiAodHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXEuZmlsZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVxLmZpbGVzIG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ2Zvcm1EYXRhXFwnIHBhcmFtZXRlcnMgb2YgdHlwZSBcXCdmaWxlXFwnJyk7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gcmVxLmZpbGVzW3RoaXMubmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcS5ib2R5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS5ib2R5IG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ2Zvcm1EYXRhXFwnIHBhcmFtZXRlcnMnKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gcmVxLmJvZHlbdGhpcy5uYW1lXTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgJ2hlYWRlcic6XG4gICAgaWYgKF8uaXNVbmRlZmluZWQocmVxLmhlYWRlcnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS5oZWFkZXJzIG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ2hlYWRlclxcJyBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgdmFsdWUgPSByZXEuaGVhZGVyc1t0aGlzLm5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgYnJlYWs7XG4gIGNhc2UgJ3BhdGgnOlxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcS51cmwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS51cmwgbXVzdCBiZSBwcm92aWRlZCBmb3IgXFwncGF0aFxcJyBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgLy8gU2luY2Ugd2UgZ2V0IHRoZSByYXcgcGF0aCBwYXJhbWV0ZXIgdmFsdWUsIHdlIG5lZWQgdG8gVVJJIGRlY29kZSBpdFxuICAgIHBhdGhNYXRjaCA9IHRoaXMucGF0aE9iamVjdC5yZWdleHAuZXhlYyhwYXJzZVVybChkZWNvZGVVUklDb21wb25lbnQocmVxLnVybCkpLnBhdGhuYW1lKTtcblxuICAgIGlmIChwYXRoTWF0Y2gpIHtcbiAgICAgIHZhbHVlID0gcGF0aE1hdGNoW18uZmluZEluZGV4KHRoaXMucGF0aE9iamVjdC5yZWdleHAua2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5Lm5hbWUgPT09IHRoYXQubmFtZTtcbiAgICAgIH0pICsgMV07XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlICdxdWVyeSc6XG4gICAgaWYgKF8uaXNVbmRlZmluZWQocmVxLnF1ZXJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXEucXVlcnkgbXVzdCBiZSBwcm92aWRlZCBmb3IgXFwncXVlcnlcXCcgcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIHZhbHVlID0gXy5nZXQocmVxLnF1ZXJ5LCB0aGlzLm5hbWUpO1xuXG4gICAgYnJlYWs7XG5cbiAgICAvLyBubyBkZWZhdWx0XG4gIH1cblxuICByZXR1cm4gbmV3IFBhcmFtZXRlclZhbHVlKHRoaXMsIHZhbHVlKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyYW1ldGVyO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N3YXk6cGF0aCcpO1xuXG4vKipcbiAqIFRoZSBQYXRoIG9iamVjdC5cbiAqXG4gKiAqKk5vdGU6KiogRG8gbm90IHVzZSBkaXJlY3RseS5cbiAqXG4gKiAqKkV4dHJhIFByb3BlcnRpZXM6KiogT3RoZXIgdGhhbiB0aGUgZG9jdW1lbnRlZCBwcm9wZXJ0aWVzLCB0aGlzIG9iamVjdCBhbHNvIGV4cG9zZXMgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGRlZmluaXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtTd2FnZ2VyQXBpfSBhcGkgLSBUaGUgU3dhZ2dlciBBUEkgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHN0cmluZ1xuICogQHBhcmFtIHtwdHJ9IHB0ciAtIFRoZSBKU09OIFBvaW50ZXIgdG8gdGhlIHBhdGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhdGggZGVmaW5pdGlvblxuICogQHBhcmFtIHtyZWdleHB9IHJlZ2V4cCAtIFRoZSByZWdleHAgdXNlZCB0byBtYXRjaCByZXF1ZXN0IHBhdGhzIGFnYWluc3QgdGhpcyBwYXRoXG4gKlxuICogQHByb3BlcnR5IHtTd2FnZ2VyQXBpfSBhcGkgLSBUaGUgU3dhZ2dlciBBUEkgb2JqZWN0XG4gKiBAcHJvcGVydHkge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBwYXRoIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7T3BlcmF0aW9uW119IG9wZXJhdGlvbk9iamVjdHMgLSBUaGUgb3BlcmF0aW9uIG9iamVjdHNcbiAqIEBwcm9wZXJ0eSB7UGFyYW1ldGVyW119IHBhcmFtZXRlck9iamVjdHMgLSBUaGUgcGF0aC1sZXZlbCBwYXJhbWV0ZXIgb2JqZWN0c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBzdHJpbmdcbiAqIEBwcm9wZXJ0eSB7cHRyfSBwdHIgLSBUaGUgSlNPTiBQb2ludGVyIHRvIHRoZSBwYXRoXG4gKiBAcHJvcGVydHkge3JlZ2V4cH0gcmVnZXhwIC0gVGhlIHJlZ2V4cCB1c2VkIHRvIG1hdGNoIHJlcXVlc3QgcGF0aHMgYWdhaW5zdCB0aGlzIHBhdGhcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUGF0aCAoYXBpLCBwYXRoLCBwdHIsIGRlZmluaXRpb24sIHJlZ2V4cCkge1xuICB0aGlzLmFwaSA9IGFwaTtcbiAgdGhpcy5wYXRoID0gcGF0aDtcbiAgdGhpcy5wdHIgPSBwdHI7XG4gIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG4gIHRoaXMucmVnZXhwID0gcmVnZXhwO1xuXG4gIC8vIEFzc2lnbiBTd2FnZ2VyIGRlZmluaXRpb24gcHJvcGVydGllcyB0byB0aGUgb3BlcmF0aW9uIGZvciBlYXN5IGFjY2Vzc1xuICBfLmFzc2lnbih0aGlzLCBkZWZpbml0aW9uKTtcblxuICBkZWJ1ZygnRm91bmQgcGF0aCBhdCAlcycsIHB0cik7XG5cbiAgdGhpcy5wYXJhbWV0ZXJPYmplY3RzID0gYXBpLnBsdWdpbi5nZXRQYXRoUGFyYW1ldGVycyh0aGlzKTtcbiAgdGhpcy5vcGVyYXRpb25PYmplY3RzID0gYXBpLnBsdWdpbi5nZXRPcGVyYXRpb25zKHRoaXMpO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgb3BlcmF0aW9uIGZvciB0aGlzIHBhdGggYW5kIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gVGhlIG1ldGhvZFxuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb25bXX0gVGhlIE9wZXJhdGlvbiBvYmplY3RzIGZvciB0aGlzIHBhdGggYW5kIG1ldGhvZCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm8gb3BlcmF0aW9uIGZvciB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgbWV0aG9kLlxuICovXG5QYXRoLnByb3RvdHlwZS5nZXRPcGVyYXRpb24gPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gIHJldHVybiBfLmZpbmQodGhpcy5vcGVyYXRpb25PYmplY3RzLCBmdW5jdGlvbiAob3BlcmF0aW9uT2JqZWN0KSB7XG4gICAgcmV0dXJuIG9wZXJhdGlvbk9iamVjdC5tZXRob2QgPT09IG1ldGhvZDtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgb3BlcmF0aW9ucyBmb3IgdGhpcyBwYXRoLlxuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb25bXX0gVGhlIE9wZXJhdGlvbiBvYmplY3RzIGZvciB0aGlzIHBhdGguXG4gKi9cblBhdGgucHJvdG90eXBlLmdldE9wZXJhdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm9wZXJhdGlvbk9iamVjdHM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgb3BlcmF0aW9ucyBmb3IgdGhpcyBwYXRoIGFuZCB0YWcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyAtIFRoZSB0YWdcbiAqXG4gKiBAcmV0dXJucyB7T3BlcmF0aW9uW119IFRoZSBPcGVyYXRpb24gb2JqZWN0cyBmb3IgdGhpcyBwYXRoIGFuZCB0YWdcbiAqL1xuUGF0aC5wcm90b3R5cGUuZ2V0T3BlcmF0aW9uc0J5VGFnID0gZnVuY3Rpb24gKHRhZykge1xuICByZXR1cm4gXy5maWx0ZXIodGhpcy5vcGVyYXRpb25PYmplY3RzLCBmdW5jdGlvbiAob3BlcmF0aW9uT2JqZWN0KSB7XG4gICAgcmV0dXJuIF8uY29udGFpbnMob3BlcmF0aW9uT2JqZWN0LnRhZ3MsIHRhZyk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHBhcmFtZXRlcnMgZm9yIHRoaXMgcGF0aC5cbiAqXG4gKiBAcmV0dXJucyB7UGFyYW1ldGVyW119IFRoZSBQYXJhbWV0ZXIgb2JqZWN0cyBmb3IgdGhpcyBwYXRoLlxuICovXG5QYXRoLnByb3RvdHlwZS5nZXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJPYmplY3RzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXRoO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N3YXk6cmVzcG9uc2UnKTtcbnZhciBzSGVscGVycyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMnKTtcbnZhciBZQU1MID0gcmVxdWlyZSgnanMteWFtbCcpO1xuXG52YXIganNvblZhbGlkYXRvcjtcblxuLyoqXG4gKiBUaGUgU3dhZ2dlciBSZXNwb25zZSBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPcGVyYXRpb259IG9wZXJhdGlvbiAtIFRoZSBPcGVyYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHRyIC0gVGhlIEpTT04gUG9pbnRlciB0byB0aGUgcmVzcG9uc2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzQ29kZSAtIFRoZSBzdGF0dXMgY29kZVxuICpcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHJlc3BvbnNlIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7T3BlcmF0aW9ufSBvcGVyYXRpb25PYmplY3QgLSBUaGUgT3BlcmF0aW9uIG9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHB0ciAtIFRoZSBKU09OIFBvaW50ZXIgdG8gdGhlIHJlc3BvbnNlIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGF0dXNDb2RlIC0gVGhlIHN0YXR1cyBjb2RlXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFJlc3BvbnNlIChvcGVyYXRpb24sIHB0ciwgZGVmaW5pdGlvbiwgc3RhdHVzQ29kZSkge1xuICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICB0aGlzLm9wZXJhdGlvbk9iamVjdCA9IG9wZXJhdGlvbjtcbiAgdGhpcy5wdHIgPSBwdHI7XG4gIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG5cbiAgLy8gQXNzaWduIFN3YWdnZXIgZGVmaW5pdGlvbiBwcm9wZXJ0aWVzIHRvIHRoZSBwYXJhbWV0ZXIgZm9yIGVhc3kgYWNjZXNzXG4gIF8uYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuXG4gIGRlYnVnKCdGb3VuZCAlcyByZXNwb25zZSBhdCAlcycsIHN0YXR1c0NvZGUsIHB0cik7XG5cbiAganNvblZhbGlkYXRvciA9IG9wZXJhdGlvbi5hcGkucGx1Z2luLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSByZXNwb25zZSBleGFtcGxlIGZvciB0aGUgbWltZS10eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWltZVR5cGVdIC0gVGhlIG1pbWUgdHlwZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByZXNwb25zZSBleGFtcGxlIGFzIGEgc3RyaW5nIG9yIGB1bmRlZmluZWRgIGlmIHRoZSByZXNwb25zZSBjb2RlIGFuZC9vciBtaW1lLXR5cGUgaXMgbWlzc2luZ1xuICovXG5SZXNwb25zZS5wcm90b3R5cGUuZ2V0RXhhbXBsZSA9IGZ1bmN0aW9uIChtaW1lVHlwZSkge1xuICB2YXIgZXhhbXBsZTtcblxuICBpZiAoXy5pc1BsYWluT2JqZWN0KHRoaXMuZGVmaW5pdGlvbi5leGFtcGxlcykpIHtcbiAgICBleGFtcGxlID0gdGhpcy5kZWZpbml0aW9uLmV4YW1wbGVzW21pbWVUeXBlXTtcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZChleGFtcGxlKSAmJiAhXy5pc1N0cmluZyhleGFtcGxlKSkge1xuICAgIGlmIChtaW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICBleGFtcGxlID0gSlNPTi5zdHJpbmdpZnkoZXhhbXBsZSwgbnVsbCwgMik7XG4gICAgfSBlbHNlIGlmIChtaW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gteWFtbCcpIHtcbiAgICAgIGV4YW1wbGUgPSBZQU1MLnNhZmVEdW1wKGV4YW1wbGUsIHtpbmRlbnQ6IDJ9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhhbXBsZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHNhbXBsZSB2YWx1ZS5cbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHNhbXBsZSB2YWx1ZSBmb3IgdGhlIHJlc3BvbnNlLCB3aGljaCBjYW4gYmUgdW5kZWZpbmVkIGlmIHRoZSByZXNwb25zZSBzY2hlbWEgaXMgbm90IHByb3ZpZGVkXG4gKi9cblJlc3BvbnNlLnByb3RvdHlwZS5nZXRTYW1wbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzYW1wbGU7XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZGVmaW5pdGlvbi5zY2hlbWEpKSB7XG4gICAgc2FtcGxlID0gdGhpcy5vcGVyYXRpb25PYmplY3QuYXBpLnBsdWdpbi5nZXRTYW1wbGUodGhpcy5kZWZpbml0aW9uLnNjaGVtYSk7XG4gIH1cblxuICByZXR1cm4gc2FtcGxlO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7U2VydmVyUmVzcG9uc2VXcmFwcGVyfSByZXMgLSBUaGUgcmVzcG9uc2Ugb3IgcmVzcG9uc2UgbGlrZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7VmFsaWRhdGlvblJlc3VsdHN9IFRoZSB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuUmVzcG9uc2UucHJvdG90eXBlLnZhbGlkYXRlUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzKSB7XG4gIHZhciByZXN1bHRzID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGJvZHlWYWx1ZTtcbiAgdmFyIGJ2UmVzdWx0cztcblxuICAvLyBTZXQgc29tZSBkZWZhdWx0IGp1c3QgaW4gY2FzZVxuICBpZiAoXy5pc1VuZGVmaW5lZChyZXMpKSB7XG4gICAgcmVzID0ge307XG4gIH1cblxuICBpZiAoXy5pc1VuZGVmaW5lZChyZXMuaGVhZGVycykpIHtcbiAgICByZXMuaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgdGhlIENvbnRlbnQtVHlwZSBleGNlcHQgZm9yIHZvaWQgcmVzcG9uc2VzLCAyMDQgcmVzcG9uc2VzIGFuZCAzMDQgcmVzcG9uc2VzIGFzIHRoZXkgaGF2ZSBubyBib2R5XG4gIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmRlZmluaXRpb24uc2NoZW1hKSAmJiBfLmluZGV4T2YoWycyMDQnLCAnMzA0J10sIHRoaXMuc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgc0hlbHBlcnMudmFsaWRhdGVDb250ZW50VHlwZShyZXMuaGVhZGVyc1snY29udGVudC10eXBlJ10sIHRoaXMub3BlcmF0aW9uT2JqZWN0LnByb2R1Y2VzLCByZXN1bHRzKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHRoZSByZXNwb25zZSBoZWFkZXJzXG4gIF8uZm9yRWFjaCh0aGlzLmhlYWRlcnMsIGZ1bmN0aW9uIChzY2hlbWEsIG5hbWUpIHtcbiAgICB2YXIgaGVhZGVyVmFsdWU7XG4gICAgdmFyIGh2UmVzdWx0cztcblxuICAgIHRyeSB7XG4gICAgICBoZWFkZXJWYWx1ZSA9IHRoYXQub3BlcmF0aW9uT2JqZWN0LmFwaS5wbHVnaW4uY29udmVydFZhbHVlKHNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IHNjaGVtYS5jb2xsZWN0aW9uRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJseSBjYXV0aW91c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuaGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmhlYWRlcnNbbmFtZV0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZGVmYXVsdCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXN1bHRzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRV9IRUFERVInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yczogZXJyLmVycm9ycyB8fCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGVyci5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZXJyLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGhlYWRlciAoJyArIG5hbWUgKyAnKTogJyArIGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZXJyLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRHVlIHRvIGFtYmlndWl0eSBpbiB0aGUgU3dhZ2dlciAyLjAgU3BlY2lmaWNhdGlvbiAoaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItc3BlYy9pc3N1ZXMvMzIxKSwgaXRcbiAgICAvLyBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEgdG8gZG8gcmVxdWlyZWRuZXNzIGNoZWNrcyBmb3IgcmVzcG9uc2UgaGVhZGVycy4gIFRoaXMgbWVhbnMgd2Ugd2lsbCB2YWxpZGF0ZVxuICAgIC8vIGV4aXN0aW5nIGhlYWRlcnMgYnV0IHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIGEgaGVhZGVyIGlzIGRlZmluZWQgaW4gYSByZXNwb25zZSBzY2hlbWEgYnV0IG5vdCBpbiB0aGUgcmVzcG9uc2UuXG4gICAgLy9cbiAgICAvLyBXZSBhbHNvIGRvIG5vdCB3YW50IHRvIHZhbGlkYXRlIGRhdGUgb2JqZWN0cyBiZWNhdXNlIGl0IGlzIHJlZHVuZGFudC4gIElmIHdlIGhhdmUgYWxyZWFkeSBjb252ZXJ0ZWQgdGhlIHZhbHVlXG4gICAgLy8gZnJvbSBhIHN0cmluZytmb3JtYXQgdG8gYSBkYXRlLCB3ZSBrbm93IGl0IHBhc3NlcyBzY2hlbWEgdmFsaWRhdGlvbi5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQoaGVhZGVyVmFsdWUpICYmICFfLmlzRGF0ZShoZWFkZXJWYWx1ZSkpIHtcbiAgICAgIGh2UmVzdWx0cyA9IHNIZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShqc29uVmFsaWRhdG9yLCBzY2hlbWEsIGhlYWRlclZhbHVlKTtcblxuICAgICAgaWYgKGh2UmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRV9IRUFERVInLFxuICAgICAgICAgIGVycm9yczogaHZSZXN1bHRzLmVycm9ycyxcbiAgICAgICAgICAvLyBSZXBvcnQgdGhlIGFjdHVhbCBlcnJvciBpZiB0aGVyZSBpcyBvbmx5IG9uZSBlcnJvci4gIE90aGVyd2lzZSwgcmVwb3J0IGEgSlNPTiBTY2hlbWFcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGVycm9yLlxuICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGhlYWRlciAoJyArIG5hbWUgKyAnKTogJyArIChodlJlc3VsdHMuZXJyb3JzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmFsdWUgZmFpbGVkIEpTT04gU2NoZW1hIHZhbGlkYXRpb24nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHZSZXN1bHRzLmVycm9yc1swXS5tZXNzYWdlKSxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHBhdGg6IFtdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gVmFsaWRhdGUgcmVzcG9uc2UgZm9yIG5vbi12b2lkIHJlc3BvbnNlc1xuICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5kZWZpbml0aW9uLnNjaGVtYSkgJiYgXy5pbmRleE9mKFsnMjA0JywgJzMwNCddLCB0aGlzLnN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHRyeSB7XG4gICAgICBib2R5VmFsdWUgPSB0aGF0Lm9wZXJhdGlvbk9iamVjdC5hcGkucGx1Z2luLmNvbnZlcnRWYWx1ZSh0aGlzLmRlZmluaXRpb24uc2NoZW1hLCB7XG4gICAgICAgIGVuY29kaW5nOiByZXMuZW5jb2RpbmdcbiAgICAgIH0sIHJlcy5ib2R5KTtcbiAgICAgIGJ2UmVzdWx0cyA9IHNIZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShqc29uVmFsaWRhdG9yLCB0aGlzLmRlZmluaXRpb24uc2NoZW1hLCBib2R5VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYnZSZXN1bHRzID0ge1xuICAgICAgICBlcnJvcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgcGF0aDogZXJyLnBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGJ2UmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFX0JPRFknLFxuICAgICAgICBlcnJvcnM6IGJ2UmVzdWx0cy5lcnJvcnMsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGJvZHk6ICcgKyAoYnZSZXN1bHRzLmVycm9ycy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmFsdWUgZmFpbGVkIEpTT04gU2NoZW1hIHZhbGlkYXRpb24nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidlJlc3VsdHMuZXJyb3JzWzBdLm1lc3NhZ2UpLFxuICAgICAgICBwYXRoOiBbXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc3BvbnNlO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBCYXNlNjQgPSByZXF1aXJlKCdqcy1iYXNlNjQnKS5CYXNlNjQ7XG52YXIgc3RyaW5nTW9ja2VyID0gcmVxdWlyZSgnanNvbi1zY2hlbWEtZmFrZXIvbGliL3R5cGVzL3N0cmluZycpO1xuXG4vKipcbiAqIFdlIGhhdmUgdG8gZmlsdGVyIHRoZSBzY2hlbWEgdG8gYXZvaWQgYSBtYXhpbXVtIGNhbGxzdGFjayBpc3N1ZSBieSBkZWxldGluZyB0aGUgZm9ybWF0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWEgLSBUaGUgSlNPTiBTY2hlbWEgb2JqZWN0XG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIGZpbHRlcmVkIHNjaGVtYVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTY2hlbWEgKHNjaGVtYSkge1xuICB2YXIgY1NjaGVtYSA9IF8uY2xvbmVEZWVwKHNjaGVtYSk7XG5cbiAgZGVsZXRlIGNTY2hlbWEuZm9ybWF0O1xuXG4gIHJldHVybiBjU2NoZW1hO1xufVxuXG4vLyBCdWlsZCB0aGUgbGlzdCBvZiBjdXN0b20gSlNPTiBTY2hlbWEgZ2VuZXJhdG9yIGZvcm1hdHNcbm1vZHVsZS5leHBvcnRzLmJ5dGUgPSBmdW5jdGlvbiAoZ2VuLCBzY2hlbWEpIHtcbiAgcmV0dXJuIEJhc2U2NC5lbmNvZGUoc3RyaW5nTW9ja2VyKGZpbHRlclNjaGVtYShzY2hlbWEpKSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5wYXNzd29yZCA9IGZ1bmN0aW9uIChnZW4sIHNjaGVtYSkge1xuICByZXR1cm4gc3RyaW5nTW9ja2VyKGZpbHRlclNjaGVtYShzY2hlbWEpKTtcbn07XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlICgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzLmludDMyID0gbW9kdWxlLmV4cG9ydHMuaW50NjQgPSBmdW5jdGlvbiAodmFsKSB7XG4gIC8vIHotc2NoZW1hIHNlZW1zIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIGZvcm1hdCBldmVuIHdoZW4gdGhlIHR5cGUgaXMga25vd24gdG8gYmUgaW52YWxpZCBzbyB3ZSBtdXN0IGRvIGEgdHlwZVxuICAvLyBjaGVjayBwcmlvciB0byB2YWxpZGF0aW5nIHRoaXMgZm9ybWF0LlxuICByZXR1cm4gXy5pc051bWJlcih2YWwpICYmIHZhbCAlIDEgPT09IDA7XG59O1xuXG4vLyBUaGVzZSBmb3JtYXQgdmFsaWRhdG9ycyB3aWxsIGFsd2F5cyByZXR1cm4gJ3RydWUnIGJlY2F1c2UgdGhleSBhcmUgYWxyZWFkeSB0eXBlIHZhbGlkIGFuZCB0aGVyZSBhcmUgbm8gY29uc3RyYWludHNcbi8vIG9uIHRoZSBmb3JtYXQgdGhhdCB3b3VsZCBwcm9kdWNlIGFuIGludmFsaWQgdmFsdWUuXG5tb2R1bGUuZXhwb3J0cy5ieXRlID0gcmV0dXJuVHJ1ZTtcbm1vZHVsZS5leHBvcnRzLmRvdWJsZSA9IHJldHVyblRydWU7XG5tb2R1bGUuZXhwb3J0cy5mbG9hdCA9IHJldHVyblRydWU7XG5tb2R1bGUuZXhwb3J0cy5wYXNzd29yZCA9IHJldHVyblRydWU7XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2Jsb2IvbWFzdGVyL3ZlcnNpb25zLzIuMC5tZCNwYXJhbWV0ZXItb2JqZWN0XG52YXIgcGFyYW1ldGVyU2NoZW1hUHJvcGVydGllcyA9IFtcbiAgJ2FsbG93RW1wdHlWYWx1ZScsXG4gICdkZWZhdWx0JyxcbiAgJ2Rlc2NyaXB0aW9uJyxcbiAgJ2VudW0nLFxuICAnZXhjbHVzaXZlTWF4aW11bScsXG4gICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgJ2Zvcm1hdCcsXG4gICdpdGVtcycsXG4gICdtYXhJdGVtcycsXG4gICdtYXhMZW5ndGgnLFxuICAnbWF4aW11bScsXG4gICdtaW5JdGVtcycsXG4gICdtaW5MZW5ndGgnLFxuICAnbWluaW11bScsXG4gICdtdWx0aXBsZU9mJyxcbiAgJ3BhdHRlcm4nLFxuICAndHlwZScsXG4gICd1bmlxdWVJdGVtcydcbl07XG5cbm1vZHVsZS5leHBvcnRzLmdldFBhcmFtZXRlclNjaGVtYSA9IGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcbiAgdmFyIHNjaGVtYTtcblxuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbWV0ZXIuc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHt9O1xuXG4gICAgLy8gQnVpbGQgdGhlIHNjaGVtYSBmcm9tIHRoZSBzY2hlbWEtbGlrZSBwYXJhbWV0ZXIgc3RydWN0dXJlXG4gICAgXy5mb3JFYWNoKHBhcmFtZXRlclNjaGVtYVByb3BlcnRpZXMsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1ldGVyW25hbWVdKSkge1xuICAgICAgICBzY2hlbWFbbmFtZV0gPSBwYXJhbWV0ZXJbbmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2NoZW1hID0gcGFyYW1ldGVyLnNjaGVtYTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWE7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5zdXBwb3J0ZWRIdHRwTWV0aG9kcyA9IFsnZ2V0JywgJ3B1dCcsICdwb3N0JywgJ2RlbGV0ZScsICdvcHRpb25zJywgJ2hlYWQnLCAncGF0Y2gnXTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG52YXIgZGlybmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5kaXJuYW1lO1xudmFyIGZvcm1hdEdlbmVyYXRvcnMgPSByZXF1aXJlKCcuL2Zvcm1hdC1nZW5lcmF0b3JzJyk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlcnMnKTtcbnZhciBKc29uUmVmcyA9IHJlcXVpcmUoJ2pzb24tcmVmcycpO1xudmFyIE9wZXJhdGlvbiA9IHJlcXVpcmUoJy4uLy4uL3R5cGVzL29wZXJhdGlvbicpO1xudmFyIFBhcmFtZXRlciA9IHJlcXVpcmUoJy4uLy4uL3R5cGVzL3BhcmFtZXRlcicpO1xudmFyIFBhdGggPSByZXF1aXJlKCcuLi8uLi90eXBlcy9wYXRoJyk7XG52YXIgcGF0aFRvUmVnZXhwID0gcmVxdWlyZSgncGF0aC10by1yZWdleHAnKTtcbnZhciBSZXNwb25zZSA9IHJlcXVpcmUoJy4uLy4uL3R5cGVzL3Jlc3BvbnNlJyk7XG52YXIgU3dhZ2dlckFwaSA9IHJlcXVpcmUoJy4uLy4uL3R5cGVzL2FwaScpO1xudmFyIHZhbGlkYXRvcnMgPSByZXF1aXJlKCcuL3ZhbGlkYXRvcnMnKTtcbnZhciB2SGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xudmFyIFlBTUwgPSByZXF1aXJlKCdqcy15YW1sJyk7XG5cbnZhciBjb2xsZWN0aW9uRm9ybWF0cyA9IFt1bmRlZmluZWQsICdjc3YnLCAnbXVsdGknLCAncGlwZXMnLCAnc3N2JywgJ3RzdiddO1xudmFyIGN1c3RvbUZvcm1hdFZhbGlkYXRvcnMgPSByZXF1aXJlKCcuL2Zvcm1hdC12YWxpZGF0b3JzJyk7XG52YXIgZG9jc1VybCA9ICdodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2Jsb2IvbWFzdGVyL3ZlcnNpb25zLzIuMC5tZCc7XG52YXIganNvblNjaGVtYVZhbGlkYXRvciA9IGhlbHBlcnMuY3JlYXRlSlNPTlZhbGlkYXRvcih7XG4gIGZvcm1hdFZhbGlkYXRvcnM6IGN1c3RvbUZvcm1hdFZhbGlkYXRvcnNcbn0pO1xudmFyIG1vY2tlciA9IGhlbHBlcnMuY3JlYXRlSlNPTlNjaGVtYU1vY2tlcih7XG4gIGZvcm1hdEdlbmVyYXRvcnM6IGZvcm1hdEdlbmVyYXRvcnNcbn0pO1xudmFyIHBhcmFtZXRlckxvY2F0aW9ucyA9IFsnYm9keScsICdmb3JtRGF0YScsICdoZWFkZXInLCAncGF0aCcsICdxdWVyeSddO1xudmFyIHR5cGVzID0gWydhcnJheScsICdib29sZWFuJywgJ2ludGVnZXInLCAnb2JqZWN0JywgJ251bWJlcicsICdzdHJpbmcnXTtcbnZhciB2ZXJzaW9uID0gJzIuMCc7XG5cbmZ1bmN0aW9uIHJlYWxDb252ZXJ0VmFsdWUgKHNjaGVtYSwgb3B0aW9ucywgdmFsdWUpIHtcbiAgdmFyIG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTsgLy8gVXNlZCBpbiBlcnJvciByZXBvcnRpbmcgZm9yIGludmFsaWQgdmFsdWVzXG4gIHZhciB0eXBlID0gXy5pc1BsYWluT2JqZWN0KHNjaGVtYSkgPyBzY2hlbWEudHlwZSA6IHVuZGVmaW5lZDtcbiAgdmFyIHBWYWx1ZSA9IHZhbHVlO1xuICB2YXIgcFR5cGUgPSB0eXBlb2YgcFZhbHVlO1xuICB2YXIgZXJyO1xuXG4gIC8vIElmIHRoZXJlIGlzIGFuIGV4cGxpY2l0IHR5cGUgcHJvdmlkZWQsIG1ha2Ugc3VyZSBpdCdzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIG9uZXNcbiAgaWYgKF8uaGFzKHNjaGVtYSwgJ3R5cGUnKSAmJiB0eXBlcy5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgXFwndHlwZVxcJyB2YWx1ZTogJyArIHR5cGUpO1xuICB9XG5cbiAgLy8gU2luY2UgSlNPTiBTY2hlbWEgYWxsb3dzIHlvdSB0byBub3Qgc3BlY2lmeSBhIHR5cGUgYW5kIGl0IGlzIHRyZWF0ZWQgYXMgYSB3aWxkY2FyZCBvZiBzb3J0cywgd2Ugc2hvdWxkIG5vdCBkbyBhbnlcbiAgLy8gY29lcmNpb24gZm9yIHRoZXNlIHR5cGVzIG9mIHZhbHVlcy5cbiAgaWYgKF8uaXNVbmRlZmluZWQodHlwZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBpcyBubyB2YWx1ZSwgZG8gbm90IGNvbnZlcnQgaXRcbiAgaWYgKF8uaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy8gQ29udmVydCBCdWZmZXIgdmFsdWUgdG8gU3RyaW5nXG4gIC8vIChXZSB1c2UgdGhpcyB0eXBlIG9mIGNoZWNrIHRvIGlkZW50aWZ5IEJ1ZmZlciBvYmplY3RzLiAgVGhlIGJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIEJ1ZmZlciB0eXBlIGFuZCB0byBhdm9pZCBoYXZpbmdcbiAgLy8gIGltcG9ydCB0aGUgYnJvd3NlcmlmeSBidWZmZXIgbW9kdWxlLCB3ZSBqdXN0IGRvIGEgc2ltcGxlIGNoZWNrLiAgVGhpcyBpcyBicml0dGxlIGJ1dCBzaG91bGQgd29yay4pXG4gIGlmIChfLmlzRnVuY3Rpb24odmFsdWUucmVhZFVJbnQ4KSkge1xuICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgcFZhbHVlID0gdmFsdWU7XG4gICAgcFR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIH1cblxuICAvLyBJZiB0aGUgdmFsdWUgaXMgZW1wdHkgYW5kIGVtcHR5IGlzIGFsbG93ZWQsIHVzZSBpdFxuICBpZiAoc2NoZW1hLmFsbG93RW1wdHlWYWx1ZSAmJiB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvLyBBdHRlbXB0IHRvIHBhcnNlIHRoZSBzdHJpbmcgYXMgSlNPTiBpZiB0aGUgdHlwZSBpcyBhcnJheSBvciBvYmplY3RcbiAgaWYgKFsnYXJyYXknLCAnb2JqZWN0J10uaW5kZXhPZih0eXBlKSA+IC0xKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUsIGp1c3QgZmFsbCB0aHJvdWdoXG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gIGNhc2UgJ2FycmF5JzpcbiAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uRm9ybWF0cy5pbmRleE9mKG9wdGlvbnMuY29sbGVjdGlvbkZvcm1hdCkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgXFwnY29sbGVjdGlvbkZvcm1hdFxcJyB2YWx1ZTogJyArIG9wdGlvbnMuY29sbGVjdGlvbkZvcm1hdCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAob3B0aW9ucy5jb2xsZWN0aW9uRm9ybWF0KSB7XG4gICAgICBjYXNlICdjc3YnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtdWx0aSc6XG4gICAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwaXBlcyc6XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJ3wnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzc3YnOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndHN2JzpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnXFx0Jyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSBfLm1hcCh2YWx1ZSwgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiByZWFsQ29udmVydFZhbHVlKF8uaXNBcnJheShzY2hlbWEuaXRlbXMpID8gc2NoZW1hLml0ZW1zW2luZGV4XSA6IHNjaGVtYS5pdGVtcywgb3B0aW9ucywgaXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBicmVhaztcbiAgY2FzZSAnYm9vbGVhbic6XG4gICAgaWYgKCFfLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ05vdCBhIHZhbGlkIGJvb2xlYW46ICcgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYnJlYWs7XG4gIGNhc2UgJ2ludGVnZXInOlxuICAgIGlmICghXy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSAmJiBfLnRyaW0odmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YWx1ZSA9IE5hTjtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXG4gICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgZXJyID0gbmV3IFR5cGVFcnJvcignTm90IGEgdmFsaWQgaW50ZWdlcjogJyArIG9yaWdpbmFsVmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJyZWFrO1xuICBjYXNlICdudW1iZXInOlxuICAgIGlmICghXy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSAmJiBfLnRyaW0odmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YWx1ZSA9IE5hTjtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXG4gICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgZXJyID0gbmV3IFR5cGVFcnJvcignTm90IGEgdmFsaWQgbnVtYmVyOiAnICsgb3JpZ2luYWxWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlICdzdHJpbmcnOlxuICAgIGlmIChbJ2RhdGUnLCAnZGF0ZS10aW1lJ10uaW5kZXhPZihzY2hlbWEuZm9ybWF0KSA+IC0xKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghXy5pc0RhdGUodmFsdWUpIHx8IHZhbHVlLnRvU3RyaW5nKCkgPT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ05vdCBhIHZhbGlkICcgKyBzY2hlbWEuZm9ybWF0ICsgJyBzdHJpbmc6ICcgKyBvcmlnaW5hbFZhbHVlKTtcblxuICAgICAgICBlcnIuY29kZSA9ICdJTlZBTElEX0ZPUk1BVCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghXy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ05vdCBhIHZhbGlkIHN0cmluZzogJyArIHZhbHVlKTtcbiAgICB9XG5cbiAgICBicmVhaztcblxuICAgIC8vIG5vIGRlZmF1bHRcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZChlcnIpKSB7XG4gICAgLy8gQ29udmVydCB0aGUgZXJyb3IgdG8gYmUgbW9yZSBsaWtlIGEgSlNPTiBTY2hlbWEgdmFsaWRhdGlvbiBlcnJvclxuICAgIGlmIChfLmlzVW5kZWZpbmVkKGVyci5jb2RlKSkge1xuICAgICAgZXJyLmNvZGUgPSAnSU5WQUxJRF9UWVBFJztcbiAgICAgIGVyci5tZXNzYWdlID0gJ0V4cGVjdGVkIHR5cGUgJyArIHR5cGUgKyAnIGJ1dCBmb3VuZCB0eXBlICcgKyBwVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyLm1lc3NhZ2UgPSAnT2JqZWN0IGRpZG5cXCd0IHBhc3MgdmFsaWRhdGlvbiBmb3IgZm9ybWF0ICcgKyBzY2hlbWEuZm9ybWF0ICsgJzogJyArIHBWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBGb3JtYXQgYW5kIHR5cGUgZXJyb3JzIHJlc2VtYmxlIEpTT04gU2NoZW1hIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgZXJyLmZhaWxlZFZhbGlkYXRpb24gPSB0cnVlO1xuICAgIGVyci5wYXRoID0gW107XG5cbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNpcmN1bGFycyAoZG9jKSB7XG4gIGZ1bmN0aW9uIHdhbGsgKGFuY2VzdG9ycywgbm9kZSwgcGF0aCkge1xuICAgIGZ1bmN0aW9uIHdhbGtJdGVtIChpdGVtLCBzZWdtZW50KSB7XG4gICAgICBwYXRoLnB1c2goc2VnbWVudCk7XG4gICAgICB3YWxrKGFuY2VzdG9ycywgaXRlbSwgcGF0aCk7XG4gICAgICBwYXRoLnBvcCgpO1xuICAgIH1cblxuICAgIC8vIFdlIGRvIG5vdCBwcm9jZXNzIGNpcmN1bGFyIG9iamVjdHMgYWdhaW5cbiAgICBpZiAoYW5jZXN0b3JzLmluZGV4T2Yobm9kZSkgPT09IC0xKSB7XG4gICAgICBhbmNlc3RvcnMucHVzaChub2RlKTtcblxuICAgICAgaWYgKF8uaXNBcnJheShub2RlKSB8fCBfLmlzUGxhaW5PYmplY3Qobm9kZSkpIHtcbiAgICAgICAgXy5lYWNoKG5vZGUsIGZ1bmN0aW9uIChtZW1iZXIsIGluZGV4T3JLZXkpIHtcbiAgICAgICAgICB3YWxrSXRlbShtZW1iZXIsIGluZGV4T3JLZXkudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfLnNldChkb2MsIHBhdGgsIHt9KTtcbiAgICB9XG5cbiAgICBhbmNlc3RvcnMucG9wKCk7XG4gIH1cblxuICB3YWxrKFtdLCBkb2MsIFtdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMuY29sbGVjdGlvbkZvcm1hdHMgPSBjb2xsZWN0aW9uRm9ybWF0cztcblxuLy8gVGhlIFVSTCB0byB0aGUgU3dhZ2dlciAyLjAgZG9jdW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMuZG9jdW1lbnRhdGlvbiA9IGRvY3NVcmw7XG5cbm1vZHVsZS5leHBvcnRzLnBhcmFtZXRlckxvY2F0aW9ucyA9IHBhcmFtZXRlckxvY2F0aW9ucztcblxuLy8gVGhlIGFycmF5IG9mIHN1cHBvcnRlZCBIVFRQIG1ldGhvZHMgZm9yIGVhY2ggcGF0aFxubW9kdWxlLmV4cG9ydHMuc3VwcG9ydGVkSHR0cE1ldGhvZHMgPSB2SGVscGVycy5zdXBwb3J0ZWRIdHRwTWV0aG9kcztcblxubW9kdWxlLmV4cG9ydHMudHlwZXMgPSB0eXBlcztcblxuLy8gVGhlIHZlcnNpb24gZm9yIHRoaXMgU3dhZ2dlciB2ZXJzaW9uXG5tb2R1bGUuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBkZWZpbml0aW9uIGNhbiBiZSBwcm9jZXNzZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgcG90ZW50aWFsIFN3YWdnZXIgZGVmaW5pdGlvbiB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBkZWZpbml0aW9uIHJlcHJlc2VudHMgYSBTd2FnZ2VyIDIuMCBkZWZpbml0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzLmNhblByb2Nlc3MgPSBmdW5jdGlvbiAoZGVmaW5pdGlvbikge1xuICByZXR1cm4gZGVmaW5pdGlvbi5zd2FnZ2VyID09PSB2ZXJzaW9uO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHJhdyBKYXZhU2NyaXB0IHZhbHVlIHRvIGEgSlNPTiBTY2hlbWEgdmFsdWUgYmFzZWQgb24gaXRzIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hIC0gVGhlIHNjaGVtYSBmb3IgdGhlIHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBjb252ZXJzaW9uIG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb2xsZWN0aW9uRm9ybWF0XSAtIFRoZSBjb2xsZWN0aW9uIGZvcm1hdFxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmVuY29kaW5nXSAtIFRoZSBlbmNvZGluZyBpZiB0aGUgcmF3IHZhbHVlIGlzIGEgYEJ1ZmZlcmBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY29udmVydFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgY29udmVydGVkIHZhbHVlXG4gKi9cbm1vZHVsZS5leHBvcnRzLmNvbnZlcnRWYWx1ZSA9IGZ1bmN0aW9uIChzY2hlbWEsIG9wdGlvbnMsIHZhbHVlKSB7XG4gIHJldHVybiByZWFsQ29udmVydFZhbHVlKHNjaGVtYSwgb3B0aW9ucywgdmFsdWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgU3dhZ2dlckFwaSBvYmplY3QgZnJvbSB0aGUgcHJvdmlkZWQgU3dhZ2dlciBkZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIFN3YWdnZXIgZGVmaW5pdGlvblxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gc3dhZ2dlckFwaS5jcmVhdGVcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIFN3YWdnZXJBcGkgYWZ0ZXIgcHJvY2Vzc2luZ1xuICovXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVTd2FnZ2VyQXBpID0gZnVuY3Rpb24gKGRlZmluaXRpb24sIG9wdGlvbnMpIHtcbiAgdmFyIGNPcHRpb25zID0gXy5jbG9uZURlZXAob3B0aW9ucyk7XG4gIHZhciBqc29uUmVmc09wdGlvbnMgPSBjT3B0aW9ucy5qc29uUmVmcyB8fCB7fTtcblxuICAvLyBJbmNsdWRlIGludmFsaWQgcmVmZXJlbmNlIGluZm9ybWF0aW9uXG4gIGpzb25SZWZzT3B0aW9ucy5pbmNsdWRlSW52YWxpZCA9IHRydWU7XG5cbiAgLy8gVXBkYXRlIHRoZSBqc29uLXJlZnMgb3B0aW9ucyB0byB1c2UgdGhlIGRlZmluaXRpb24gbG9jYXRpb25cbiAgaWYgKF8uaXNTdHJpbmcoY09wdGlvbnMuZGVmaW5pdGlvbikpIHtcbiAgICBqc29uUmVmc09wdGlvbnMucmVsYXRpdmVCYXNlID0gZGlybmFtZShjT3B0aW9ucy5kZWZpbml0aW9uKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSB0aGUganNvbi1yZWZzIG9wdGlvbnMgdG8gcHJvY2VzcyBZQU1MXG4gIGlmIChfLmlzVW5kZWZpbmVkKGpzb25SZWZzT3B0aW9ucy5sb2FkZXJPcHRpb25zKSkge1xuICAgIGpzb25SZWZzT3B0aW9ucy5sb2FkZXJPcHRpb25zID0ge307XG4gIH1cblxuICBpZiAoXy5pc1VuZGVmaW5lZChqc29uUmVmc09wdGlvbnMubG9hZGVyT3B0aW9ucy5wcm9jZXNzQ29udGVudCkpIHtcbiAgICBqc29uUmVmc09wdGlvbnMubG9hZGVyT3B0aW9ucy5wcm9jZXNzQ29udGVudCA9IGZ1bmN0aW9uIChyZXMsIGNiKSB7XG4gICAgICBjYih1bmRlZmluZWQsIFlBTUwuc2FmZUxvYWQocmVzLnRleHQpKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIEpzb25SZWZzLnJlc29sdmVSZWZzKGRlZmluaXRpb24sIGpzb25SZWZzT3B0aW9ucylcbiAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgYWxsIGNpcmN1bGFyIG9iamVjdHMgYXMgei1zY2hlbWEgZG9lcyBub3Qgd29yayB3aXRoIHRoZW06XG4gICAgICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96YWdnaW5vL3otc2NoZW1hL2lzc3Vlcy8xMzdcbiAgICAgIHJlbW92ZUNpcmN1bGFycyhyZXN1bHRzLnJlc29sdmVkKTtcblxuICAgICAgcmV0dXJuIG5ldyBTd2FnZ2VyQXBpKG1vZHVsZS5leHBvcnRzLCBkZWZpbml0aW9uLCByZXN1bHRzLnJlc29sdmVkLCByZXN1bHRzLnJlZnMsIG9wdGlvbnMpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgei1zY2hlbWEgdmFsaWRhdG9yLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSB6LXNjaGVtYSB2YWxpZGF0b3IgdG8gdXNlXG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldEpTT05TY2hlbWFWYWxpZGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBqc29uU2NoZW1hVmFsaWRhdG9yO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgT3BlcmF0aW9uIG9iamVjdHMgZm9yIGVhY2ggb3BlcmF0aW9uIGRlZmluZWQgaW4gcGF0aCBkZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSB7UGF0aH0gcGF0aE9iamVjdCAtIFRoZSBQYXRoIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb25bXX0gVGhlIE9wZXJhdGlvbiBvYmplY3QgYXJyYXlcbiAqL1xubW9kdWxlLmV4cG9ydHMuZ2V0T3BlcmF0aW9ucyA9IGZ1bmN0aW9uIChwYXRoT2JqZWN0KSB7XG4gIHZhciBvcGVyYXRpb25zID0gW107XG4gIHZhciBwUGF0aCA9IEpzb25SZWZzLnBhdGhGcm9tUHRyKHBhdGhPYmplY3QucHRyKTtcbiAgdmFyIHBQYXJhbXMgPSBfLnJlZHVjZShwYXRoT2JqZWN0LmRlZmluaXRpb24ucGFyYW1ldGVycywgZnVuY3Rpb24gKHBhcmFtZXRlcnMsIHBhcmFtRGVmLCBpbmRleCkge1xuICAgIHBhcmFtZXRlcnNbcGFyYW1EZWYubmFtZSArICc6JyArIHBhcmFtRGVmLmluXSA9IHtcbiAgICAgIHBhdGg6IHBQYXRoLmNvbmNhdChbJ3BhcmFtZXRlcnMnLCBpbmRleC50b1N0cmluZygpXSksXG4gICAgICBkZWZpbml0aW9uOiBwYXJhbURlZlxuICAgIH07XG5cbiAgICByZXR1cm4gcGFyYW1ldGVycztcbiAgfSwge30pO1xuXG4gIF8uZm9yRWFjaChwYXRoT2JqZWN0LmRlZmluaXRpb24sIGZ1bmN0aW9uIChvcGVyYXRpb24sIG1ldGhvZCkge1xuICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgaWYgKF8uaW5kZXhPZih2SGVscGVycy5zdXBwb3J0ZWRIdHRwTWV0aG9kcywgbWV0aG9kKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY09wZXJhdGlvbiA9IF8uY2xvbmVEZWVwKG9wZXJhdGlvbik7IC8vIENsb25lIHNvIHdlIGRvIG5vdCBhbHRlciB0aGUgaW5wdXRcbiAgICB2YXIgb1BhcmFtcyA9IHt9OyAvLyBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdW5pcXVlIHBhcmFtZXRlcnNcbiAgICB2YXIgb1BhdGggPSBwUGF0aC5jb25jYXQobWV0aG9kKTtcblxuICAgIC8vIEFkZCBwYXRoIHBhcmFtZXRlcnNcbiAgICBfLmZvckVhY2gocFBhcmFtcywgZnVuY3Rpb24gKHBQYXJhbSwga2V5KSB7XG4gICAgICBvUGFyYW1zW2tleV0gPSBwUGFyYW07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgb3BlcmF0aW9uIHBhcmFtZXRlcnMgKE92ZXJyaWRlcyBwYXRoLWxldmVsIHBhcmFtZXRlcnMgb2Ygc2FtZSBuYW1lK2luIGNvbWJpbmF0aW9uKVxuICAgIF8uZm9yRWFjaChvcGVyYXRpb24ucGFyYW1ldGVycywgZnVuY3Rpb24gKHBhcmFtRGVmLCBpbmRleCkge1xuICAgICAgb1BhcmFtc1twYXJhbURlZi5uYW1lICsgJzonICsgcGFyYW1EZWYuaW5dID0ge1xuICAgICAgICBwYXRoOiBvUGF0aC5jb25jYXQoWydwYXJhbWV0ZXJzJywgaW5kZXgudG9TdHJpbmcoKV0pLFxuICAgICAgICBkZWZpbml0aW9uOiBwYXJhbURlZlxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEF0dGFjaCBvdXIgY29tcHV0ZWQgcGFyYW1ldGVycy9zZWN1cml0eSB0byB0aGUgb3BlcmF0aW9uXG4gICAgY09wZXJhdGlvbi5wYXJhbWV0ZXJzID0gXy5tYXAoXy52YWx1ZXMob1BhcmFtcyksIGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcbiAgICAgIC8vIFVzZWQgbGF0ZXIgYnkgZ2V0T3BlcmF0aW9uUGFyYW1ldGVycyB0byBjaXJjdW12ZW50IHRoZSBjaGlja2VuL2VnZyBzaXR1YXRpb24gKFJlbW92ZWQgdGhlcmUgYXMgd2VsbClcbiAgICAgIHBhcmFtZXRlci5kZWZpbml0aW9uLiQkJHB0ciQkJCA9IEpzb25SZWZzLnBhdGhUb1B0cihwYXJhbWV0ZXIucGF0aCk7XG5cbiAgICAgIHJldHVybiBwYXJhbWV0ZXIuZGVmaW5pdGlvbjtcbiAgICB9KTtcblxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoY09wZXJhdGlvbi5zZWN1cml0eSkpIHtcbiAgICAgIGNPcGVyYXRpb24uc2VjdXJpdHkgPSBwYXRoT2JqZWN0LmFwaS5yZXNvbHZlZC5zZWN1cml0eTtcbiAgICB9XG5cbiAgICBvcGVyYXRpb25zLnB1c2gobmV3IE9wZXJhdGlvbihwYXRoT2JqZWN0LmFwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKc29uUmVmcy5wYXRoVG9QdHIob1BhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNPcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY09wZXJhdGlvbi5jb25zdW1lcyB8fCBwYXRoT2JqZWN0LmFwaS5yZXNvbHZlZC5jb25zdW1lcyB8fCBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjT3BlcmF0aW9uLnByb2R1Y2VzIHx8IHBhdGhPYmplY3QuYXBpLnJlc29sdmVkLnByb2R1Y2VzIHx8IFtdKSk7XG4gIH0pO1xuXG4gIHJldHVybiBvcGVyYXRpb25zO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIFBhcmFtZXRlciBvYmplY3RzIGZvciB0aGUgcHJvdmlkZWQgT3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7T3BlcmF0aW9ufSBvcGVyYXRpb24gLSBUaGUgT3BlcmF0aW9uIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtQYXJhbWV0ZXJbXX0gVGhlIFBhcmFtZXRlciBvYmplY3QgYXJyYXlcbiAqL1xubW9kdWxlLmV4cG9ydHMuZ2V0T3BlcmF0aW9uUGFyYW1ldGVycyA9IGZ1bmN0aW9uIChvcGVyYXRpb24pIHtcbiAgdmFyIHBQYXJhbXMgPSBfLnJlZHVjZShvcGVyYXRpb24ucGF0aE9iamVjdC5nZXRQYXJhbWV0ZXJzKCksIGZ1bmN0aW9uIChwYXJhbXMsIHBhcmFtKSB7XG4gICAgcGFyYW1zW3BhcmFtLnB0cl0gPSBwYXJhbTtcblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gXy5tYXAob3BlcmF0aW9uLnBhcmFtZXRlcnMsIGZ1bmN0aW9uIChwYXJhbURlZikge1xuICAgIHZhciBwdHIgPSBwYXJhbURlZi4kJCRwdHIkJCQ7XG4gICAgdmFyIHBQYXJhbSA9IHBQYXJhbXNbcHRyXTtcblxuICAgIC8vIFJlbW92ZSBzbyB3ZSBkbyBub3QgaGF2ZSB0aGVzZSBwcm9wZXJ0aWVzIGxpdHRlcmVkIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50XG4gICAgZGVsZXRlIHBhcmFtRGVmLiQkJHB0ciQkJDtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBQYXJhbSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVyKG9wZXJhdGlvbiwgcHRyLCBwYXJhbURlZiwgdkhlbHBlcnMuZ2V0UGFyYW1ldGVyU2NoZW1hKHBhcmFtRGVmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwUGFyYW07XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBSZXNwb25zZSBvYmplY3RzIGZvciB0aGUgcHJvdmlkZWQgT3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7T3BlcmF0aW9ufSBvcGVyYXRpb24gLSBUaGUgT3BlcmF0aW9uIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtSZXNwb25zZVtdfSBUaGUgUmVzcG9uc2Ugb2JqZWN0IGFycmF5XG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldE9wZXJhdGlvblJlc3BvbnNlcyA9IGZ1bmN0aW9uIChvcGVyYXRpb24pIHtcbiAgcmV0dXJuIF8ubWFwKG9wZXJhdGlvbi5kZWZpbml0aW9uLnJlc3BvbnNlcywgZnVuY3Rpb24gKHJlc3BvbnNlRGVmLCBjb2RlKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShvcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBKc29uUmVmcy5wYXRoVG9QdHIoSnNvblJlZnMucGF0aEZyb21QdHIob3BlcmF0aW9uLnB0cikuY29uY2F0KFsncmVzcG9uc2VzJywgY29kZV0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRGVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIHBhdGgtbGV2ZWwgUGFyYW1ldGVyIG9iamVjdHMgZm9yIHRoZSBwcm92aWRlZCBQYXRoLlxuICpcbiAqIEBwYXJhbSB7UGF0aH0gcGF0aCAtIFRoZSBQYXRoIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtQYXJhbWV0ZXJbXX0gVGhlIFBhcmFtZXRlciBvYmplY3QgYXJyYXlcbiAqL1xubW9kdWxlLmV4cG9ydHMuZ2V0UGF0aFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAocGF0aCkge1xuICByZXR1cm4gXy5tYXAocGF0aC5kZWZpbml0aW9uLnBhcmFtZXRlcnMsIGZ1bmN0aW9uIChwYXJhbURlZiwgaW5kZXgpIHtcbiAgICByZXR1cm4gbmV3IFBhcmFtZXRlcihwYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgIEpzb25SZWZzLnBhdGhUb1B0cihKc29uUmVmcy5wYXRoRnJvbVB0cihwYXRoLnB0cikuY29uY2F0KGluZGV4LnRvU3RyaW5nKCkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbURlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICB2SGVscGVycy5nZXRQYXJhbWV0ZXJTY2hlbWEocGFyYW1EZWYpKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgUGF0aCBvYmplY3RzIGZvciBlYWNoIHBhdGggZGVmaW5lZCBpbiB0aGUgU3dhZ2dlciBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyIEFQSSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7UGF0aFtdfSBUaGUgT3BlcmF0aW9uIG9iamVjdCBhcnJheVxuICovXG5tb2R1bGUuZXhwb3J0cy5nZXRQYXRocyA9IGZ1bmN0aW9uIChhcGkpIHtcbiAgdmFyIGJhc2VQYXRoUHJlZml4ID0gYXBpLnJlc29sdmVkLmJhc2VQYXRoIHx8ICcvJztcblxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgYmFzZVBhdGhQcmVmaXggc28gd2UgZG8gbm90IGVuZCB1cCB3aXRoIGRvdWJsZSBzbGFzaGVzXG4gIGlmIChiYXNlUGF0aFByZWZpeC5jaGFyQXQoYmFzZVBhdGhQcmVmaXgubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgIGJhc2VQYXRoUHJlZml4ID0gYmFzZVBhdGhQcmVmaXguc3Vic3RyaW5nKDAsIGJhc2VQYXRoUHJlZml4Lmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIF8ubWFwKGFwaS5yZXNvbHZlZC5wYXRocywgZnVuY3Rpb24gKHBhdGhEZWYsIHBhdGgpIHtcbiAgICByZXR1cm4gbmV3IFBhdGgoYXBpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgICAgICBKc29uUmVmcy5wYXRoVG9QdHIoWydwYXRocycsIHBhdGhdKSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aERlZixcbiAgICAgICAgICAgICAgICAgICAgcGF0aFRvUmVnZXhwKGJhc2VQYXRoUHJlZml4ICsgcGF0aC5yZXBsYWNlKC9cXHsvZywgJzonKS5yZXBsYWNlKC9cXH0vZywgJycpKSk7XG5cbiAgfSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzYW1wbGUgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBKU09OIFNjaGVtYS5cbiAqXG4gKiBAcGFyYW0geyp9IHNjaGVtYSAtIFRoZSBKU09OIFNjaGVtYVxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgc2FtcGxlIHZhbHVlXG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldFNhbXBsZSA9IGZ1bmN0aW9uIChzY2hlbWEpIHtcbiAgcmV0dXJuIG1vY2tlcihzY2hlbWEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIHZhbGlkYXRlIFN3YWdnZXIgMi4wIGRvY3VtZW50cyBzZW1hbnRpY2FsbHkuXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9uW119IFRoZSB2YWxpZGF0b3JzIHRvIHVzZVxuICovXG5tb2R1bGUuZXhwb3J0cy5nZXRTZW1hbnRpY1ZhbGlkYXRvcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB2YWxpZGF0b3JzLnNlbWFudGljVmFsaWRhdG9ycztcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHVzZWQgdG8gdmFsaWRhdGUgU3dhZ2dlciAyLjAgZG9jdW1lbnRzIGFnYWluc3QgaXRzIEpTT04gU2NoZW1hLlxuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gVGhlIHZhbGlkYXRvciB0byB1c2VcbiAqL1xubW9kdWxlLmV4cG9ydHMuZ2V0U3RydWN0dXJhbFZhbGlkYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHZhbGlkYXRvcnMuanNvblNjaGVtYVZhbGlkYXRvcjtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwidGl0bGVcIjogXCJBIEpTT04gU2NoZW1hIGZvciBTd2FnZ2VyIDIuMCBBUEkuXCIsXG4gIFwiaWRcIjogXCJodHRwOi8vc3dhZ2dlci5pby92Mi9zY2hlbWEuanNvbiNcIixcbiAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcInN3YWdnZXJcIixcbiAgICBcImluZm9cIixcbiAgICBcInBhdGhzXCJcbiAgXSxcbiAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgXCJeeC1cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgIH1cbiAgfSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcInN3YWdnZXJcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImVudW1cIjogW1xuICAgICAgICBcIjIuMFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBTd2FnZ2VyIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudC5cIlxuICAgIH0sXG4gICAgXCJpbmZvXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvaW5mb1wiXG4gICAgfSxcbiAgICBcImhvc3RcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcInBhdHRlcm5cIjogXCJeW157fS8gOlxcXFxcXFxcXSsoPzo6XFxcXGQrKT8kXCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIGhvc3QgKG5hbWUgb3IgaXApIG9mIHRoZSBBUEkuIEV4YW1wbGU6ICdzd2FnZ2VyLmlvJ1wiXG4gICAgfSxcbiAgICBcImJhc2VQYXRoXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJwYXR0ZXJuXCI6IFwiXi9cIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgYmFzZSBwYXRoIHRvIHRoZSBBUEkuIEV4YW1wbGU6ICcvYXBpJy5cIlxuICAgIH0sXG4gICAgXCJzY2hlbWVzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1lc0xpc3RcIlxuICAgIH0sXG4gICAgXCJjb25zdW1lc1wiOiB7XG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsaXN0IG9mIE1JTUUgdHlwZXMgYWNjZXB0ZWQgYnkgdGhlIEFQSS5cIixcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWVkaWFUeXBlTGlzdFwiXG4gICAgfSxcbiAgICBcInByb2R1Y2VzXCI6IHtcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGxpc3Qgb2YgTUlNRSB0eXBlcyB0aGUgQVBJIGNhbiBwcm9kdWNlLlwiLFxuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tZWRpYVR5cGVMaXN0XCJcbiAgICB9LFxuICAgIFwicGF0aHNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXRoc1wiXG4gICAgfSxcbiAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmaW5pdGlvbnNcIlxuICAgIH0sXG4gICAgXCJwYXJhbWV0ZXJzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyRGVmaW5pdGlvbnNcIlxuICAgIH0sXG4gICAgXCJyZXNwb25zZXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZURlZmluaXRpb25zXCJcbiAgICB9LFxuICAgIFwic2VjdXJpdHlcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eVwiXG4gICAgfSxcbiAgICBcInNlY3VyaXR5RGVmaW5pdGlvbnNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eURlZmluaXRpb25zXCJcbiAgICB9LFxuICAgIFwidGFnc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdGFnXCJcbiAgICAgIH0sXG4gICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwiZXh0ZXJuYWxEb2NzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXh0ZXJuYWxEb2NzXCJcbiAgICB9XG4gIH0sXG4gIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgIFwiaW5mb1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBUEkuXCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwidGl0bGVcIlxuICAgICAgXSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIHVuaXF1ZSBhbmQgcHJlY2lzZSB0aXRsZSBvZiB0aGUgQVBJLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgc2VtYW50aWMgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEFQSS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIEFQSS4gU2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZSB0aXRsZS4gIEdpdEh1YiBGbGF2b3JlZCBNYXJrZG93biBpcyBhbGxvd2VkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGVybXNPZlNlcnZpY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgdGVybXMgb2Ygc2VydmljZSBmb3IgdGhlIEFQSS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRhY3RcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvY29udGFjdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGljZW5zZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9saWNlbnNlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJjb250YWN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRhY3QgaW5mb3JtYXRpb24gZm9yIHRoZSBvd25lcnMgb2YgdGhlIEFQSS5cIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgaWRlbnRpZnlpbmcgbmFtZSBvZiB0aGUgY29udGFjdCBwZXJzb24vb3JnYW5pemF0aW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIFVSTCBwb2ludGluZyB0byB0aGUgY29udGFjdCBpbmZvcm1hdGlvbi5cIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW1haWxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgY29udGFjdCBwZXJzb24vb3JnYW5pemF0aW9uLlwiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwiZW1haWxcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwibGljZW5zZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIlxuICAgICAgXSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgbGljZW5zZSB0eXBlLiBJdCdzIGVuY291cmFnZWQgdG8gdXNlIGFuIE9TSSBjb21wYXRpYmxlIGxpY2Vuc2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgVVJMIHBvaW50aW5nIHRvIHRoZSBsaWNlbnNlLlwiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcInBhdGhzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlbGF0aXZlIHBhdGhzIHRvIHRoZSBpbmRpdmlkdWFsIGVuZHBvaW50cy4gVGhleSBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoZSAnYmFzZVBhdGgnLlwiLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiXi9cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGF0aEl0ZW1cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICB9LFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9uZSBvciBtb3JlIEpTT04gb2JqZWN0cyBkZXNjcmliaW5nIHRoZSBzY2hlbWFzIGJlaW5nIGNvbnN1bWVkIGFuZCBwcm9kdWNlZCBieSB0aGUgQVBJLlwiXG4gICAgfSxcbiAgICBcInBhcmFtZXRlckRlZmluaXRpb25zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyXCJcbiAgICAgIH0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT25lIG9yIG1vcmUgSlNPTiByZXByZXNlbnRhdGlvbnMgZm9yIHBhcmFtZXRlcnNcIlxuICAgIH0sXG4gICAgXCJyZXNwb25zZURlZmluaXRpb25zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcmVzcG9uc2VcIlxuICAgICAgfSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPbmUgb3IgbW9yZSBKU09OIHJlcHJlc2VudGF0aW9ucyBmb3IgcGFyYW1ldGVyc1wiXG4gICAgfSxcbiAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5mb3JtYXRpb24gYWJvdXQgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvblwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidXJsXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiZXhhbXBsZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWVcbiAgICB9LFxuICAgIFwibWltZVR5cGVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIE1JTUUgdHlwZSBvZiB0aGUgSFRUUCBtZXNzYWdlLlwiXG4gICAgfSxcbiAgICBcIm9wZXJhdGlvblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlc3BvbnNlc1wiXG4gICAgICBdLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0YWdzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcInN1bW1hcnlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIHN1bW1hcnkgb2YgdGhlIG9wZXJhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIG9wZXJhdGlvbiwgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRlcm5hbERvY3NcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXh0ZXJuYWxEb2NzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvcGVyYXRpb25JZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIG9wZXJhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInByb2R1Y2VzXCI6IHtcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsaXN0IG9mIE1JTUUgdHlwZXMgdGhlIEFQSSBjYW4gcHJvZHVjZS5cIixcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21lZGlhVHlwZUxpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbnN1bWVzXCI6IHtcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsaXN0IG9mIE1JTUUgdHlwZXMgdGhlIEFQSSBjYW4gY29uc3VtZS5cIixcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21lZGlhVHlwZUxpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhcmFtZXRlcnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyc0xpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlc3BvbnNlc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInNjaGVtZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1lc0xpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcHJlY2F0ZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWN1cml0eVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicGF0aEl0ZW1cIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIiRyZWZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHV0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicG9zdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vcGVyYXRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlbGV0ZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vcGVyYXRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcIm9wdGlvbnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3BlcmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJoZWFkXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0Y2hcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3BlcmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJhbWV0ZXJzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhcmFtZXRlcnNMaXN0XCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJyZXNwb25zZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVzcG9uc2Ugb2JqZWN0cyBuYW1lcyBjYW4gZWl0aGVyIGJlIGFueSB2YWxpZCBIVFRQIHN0YXR1cyBjb2RlIG9yICdkZWZhdWx0Jy5cIixcbiAgICAgIFwibWluUHJvcGVydGllc1wiOiAxLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl4oWzAtOV17M30pJHxeKGRlZmF1bHQpJFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZVZhbHVlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwibm90XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicmVzcG9uc2VWYWx1ZVwiOiB7XG4gICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcmVzcG9uc2VcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9qc29uUmVmZXJlbmNlXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJyZXNwb25zZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImRlc2NyaXB0aW9uXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInNjaGVtYVwiOiB7XG4gICAgICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZmlsZVNjaGVtYVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImhlYWRlcnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvaGVhZGVyc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhhbXBsZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhhbXBsZXNcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImhlYWRlcnNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9oZWFkZXJcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJoZWFkZXJcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJhcnJheVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wcmltaXRpdmVzSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbGxlY3Rpb25Gb3JtYXRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvY29sbGVjdGlvbkZvcm1hdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9kZWZhdWx0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhMZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkxlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5MZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGF0dGVyblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4SXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy91bmlxdWVJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9lbnVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL211bHRpcGxlT2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwidmVuZG9yRXh0ZW5zaW9uXCI6IHtcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBbnkgcHJvcGVydHkgc3RhcnRpbmcgd2l0aCB4LSBpcyB2YWxpZC5cIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgIFwiYWRkaXRpb25hbEl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwiYm9keVBhcmFtZXRlclwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJpblwiLFxuICAgICAgICBcInNjaGVtYVwiXG4gICAgICBdLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVyLiBUaGlzIGNvdWxkIGNvbnRhaW4gZXhhbXBsZXMgb2YgdXNlLiAgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJib2R5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJzY2hlbWFcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICB9LFxuICAgIFwiaGVhZGVyUGFyYW1ldGVyU3ViU2NoZW1hXCI6IHtcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJpblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRldGVybWluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiaGVhZGVyXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYXJyYXlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcHJpbWl0aXZlc0l0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2NvbGxlY3Rpb25Gb3JtYXRcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNaW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4TGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluTGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heEl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5JdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tdWx0aXBsZU9mXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJxdWVyeVBhcmFtZXRlclN1YlNjaGVtYVwiOiB7XG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInJlcXVpcmVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgb3Igb3B0aW9uYWwuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGFyYW1ldGVyLlwiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInF1ZXJ5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWxsb3dFbXB0eVZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvd3Mgc2VuZGluZyBhIHBhcmFtZXRlciBieSBuYW1lIG9ubHkgb3Igd2l0aCBhbiBlbXB0eSB2YWx1ZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImFycmF5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0V2l0aE11bHRpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiZm9ybURhdGFQYXJhbWV0ZXJTdWJTY2hlbWFcIjoge1xuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIG9yIG9wdGlvbmFsLlwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJmb3JtRGF0YVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVyLiBUaGlzIGNvdWxkIGNvbnRhaW4gZXhhbXBsZXMgb2YgdXNlLiAgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImFsbG93RW1wdHlWYWx1ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3dzIHNlbmRpbmcgYSBwYXJhbWV0ZXIgYnkgbmFtZSBvbmx5IG9yIHdpdGggYW4gZW1wdHkgdmFsdWUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJmaWxlXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0V2l0aE11bHRpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicGF0aFBhcmFtZXRlclN1YlNjaGVtYVwiOiB7XG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJyZXF1aXJlZFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJwYXRoXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYXJyYXlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcHJpbWl0aXZlc0l0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2NvbGxlY3Rpb25Gb3JtYXRcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNaW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4TGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluTGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heEl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5JdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tdWx0aXBsZU9mXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJub25Cb2R5UGFyYW1ldGVyXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImluXCIsXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2hlYWRlclBhcmFtZXRlclN1YlNjaGVtYVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2Zvcm1EYXRhUGFyYW1ldGVyU3ViU2NoZW1hXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcXVlcnlQYXJhbWV0ZXJTdWJTY2hlbWFcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXRoUGFyYW1ldGVyU3ViU2NoZW1hXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJwYXJhbWV0ZXJcIjoge1xuICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2JvZHlQYXJhbWV0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9ub25Cb2R5UGFyYW1ldGVyXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJzY2hlbWFcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBkZXRlcm1pbmlzdGljIHZlcnNpb24gb2YgYSBKU09OIFNjaGVtYSBvYmplY3QuXCIsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3RpdGxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL211bHRpcGxlT2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3R5cGVcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImFsbE9mXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkaXNjcmltaW5hdG9yXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwieG1sXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3htbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0ZXJuYWxEb2NzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4dGVybmFsRG9jc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhhbXBsZVwiOiB7fVxuICAgICAgfSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICB9LFxuICAgIFwiZmlsZVNjaGVtYVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGRldGVybWluaXN0aWMgdmVyc2lvbiBvZiBhIEpTT04gU2NoZW1hIG9iamVjdC5cIixcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3RpdGxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXlcIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcImZpbGVcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJyZWFkT25seVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leHRlcm5hbERvY3NcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4YW1wbGVcIjoge31cbiAgICAgIH0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgfSxcbiAgICBcInByaW1pdGl2ZXNJdGVtc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImFycmF5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJzZWN1cml0eVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2VjdXJpdHlSZXF1aXJlbWVudFwiXG4gICAgICB9LFxuICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgfSxcbiAgICBcInNlY3VyaXR5UmVxdWlyZW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBcInhtbFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInByZWZpeFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdHRyaWJ1dGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3cmFwcGVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJ0YWdcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leHRlcm5hbERvY3NcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwic2VjdXJpdHlEZWZpbml0aW9uc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2Jhc2ljQXV0aGVudGljYXRpb25TZWN1cml0eVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2FwaUtleVNlY3VyaXR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgySW1wbGljaXRTZWN1cml0eVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29hdXRoMlBhc3N3b3JkU2VjdXJpdHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJBcHBsaWNhdGlvblNlY3VyaXR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyQWNjZXNzQ29kZVNlY3VyaXR5XCJcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiYmFzaWNBdXRoZW50aWNhdGlvblNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYmFzaWNcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFwaUtleVNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwiaW5cIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYXBpS2V5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiaGVhZGVyXCIsXG4gICAgICAgICAgICBcInF1ZXJ5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJvYXV0aDJJbXBsaWNpdFNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmbG93XCIsXG4gICAgICAgIFwiYXV0aG9yaXphdGlvblVybFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJvYXV0aDJcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmbG93XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJpbXBsaWNpdFwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJTY29wZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvcml6YXRpb25VcmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm9hdXRoMlBhc3N3b3JkU2VjdXJpdHlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcImZsb3dcIixcbiAgICAgICAgXCJ0b2tlblVybFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJvYXV0aDJcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmbG93XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJwYXNzd29yZFwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJTY29wZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInRva2VuVXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJvYXV0aDJBcHBsaWNhdGlvblNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmbG93XCIsXG4gICAgICAgIFwidG9rZW5VcmxcIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwib2F1dGgyXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmxvd1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb25cIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzY29wZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyU2NvcGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0b2tlblVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwib2F1dGgyQWNjZXNzQ29kZVNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmbG93XCIsXG4gICAgICAgIFwiYXV0aG9yaXphdGlvblVybFwiLFxuICAgICAgICBcInRva2VuVXJsXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcIm9hdXRoMlwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZsb3dcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcImFjY2Vzc0NvZGVcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzY29wZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyU2NvcGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JpemF0aW9uVXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidG9rZW5VcmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm9hdXRoMlNjb3Blc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJtZWRpYVR5cGVMaXN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW1lVHlwZVwiXG4gICAgICB9LFxuICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgfSxcbiAgICBcInBhcmFtZXRlcnNMaXN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIHNlbmQgYSB2YWxpZCBBUEkgY2FsbC5cIixcbiAgICAgIFwiYWRkaXRpb25hbEl0ZW1zXCI6IGZhbHNlLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwib25lT2ZcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvanNvblJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgfSxcbiAgICBcInNjaGVtZXNMaXN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHRyYW5zZmVyIHByb3RvY29sIG9mIHRoZSBBUEkuXCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgXCJodHRwXCIsXG4gICAgICAgICAgXCJodHRwc1wiLFxuICAgICAgICAgIFwid3NcIixcbiAgICAgICAgICBcIndzc1wiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgIFwiY3N2XCIsXG4gICAgICAgIFwic3N2XCIsXG4gICAgICAgIFwidHN2XCIsXG4gICAgICAgIFwicGlwZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVmYXVsdFwiOiBcImNzdlwiXG4gICAgfSxcbiAgICBcImNvbGxlY3Rpb25Gb3JtYXRXaXRoTXVsdGlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImVudW1cIjogW1xuICAgICAgICBcImNzdlwiLFxuICAgICAgICBcInNzdlwiLFxuICAgICAgICBcInRzdlwiLFxuICAgICAgICBcInBpcGVzXCIsXG4gICAgICAgIFwibXVsdGlcIlxuICAgICAgXSxcbiAgICAgIFwiZGVmYXVsdFwiOiBcImNzdlwiXG4gICAgfSxcbiAgICBcInRpdGxlXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3RpdGxlXCJcbiAgICB9LFxuICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVzY3JpcHRpb25cIlxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2RlZmF1bHRcIlxuICAgIH0sXG4gICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL211bHRpcGxlT2ZcIlxuICAgIH0sXG4gICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21heGltdW1cIlxuICAgIH0sXG4gICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgIH0sXG4gICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21pbmltdW1cIlxuICAgIH0sXG4gICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgIH0sXG4gICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiXG4gICAgfSxcbiAgICBcIm1pbkxlbmd0aFwiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIlxuICAgIH0sXG4gICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3BhdHRlcm5cIlxuICAgIH0sXG4gICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCJcbiAgICB9LFxuICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdW5pcXVlSXRlbXNcIlxuICAgIH0sXG4gICAgXCJlbnVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2VudW1cIlxuICAgIH0sXG4gICAgXCJqc29uUmVmZXJlbmNlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiJHJlZlwiXG4gICAgICBdLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlcnMnKTtcbnZhciBKc29uUmVmcyA9IHJlcXVpcmUoJ2pzb24tcmVmcycpO1xudmFyIHN3YWdnZXJTY2hlbWEgPSByZXF1aXJlKCcuL3NjaGVtYS5qc29uJyk7XG52YXIgdkhlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcblxuZnVuY3Rpb24gZ2V0U2NoZW1hUHJvcGVydGllcyAoc2NoZW1hKSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gXy5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzKTsgLy8gU3RhcnQgd2l0aCB0aGUgZGVmaW5lZCBwcm9wZXJ0aWVzXG5cbiAgLy8gQWRkIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgcGFyZW50XG4gIF8uZm9yRWFjaChzY2hlbWEuYWxsT2YsIGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICBfLmZvckVhY2goZ2V0U2NoZW1hUHJvcGVydGllcyhwYXJlbnQpLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgIGlmIChfLmluZGV4T2YocHJvcGVydGllcywgcHJvcGVydHkpID09PSAtMSkge1xuICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gd2Fsa1NjaGVtYSAoYXBpLCBibGFja2xpc3QsIHNjaGVtYSwgcGF0aCwgaGFuZGxlcnMsIHJlc3BvbnNlKSB7XG4gIHZhciB0eXBlID0gc2NoZW1hLnR5cGUgfHwgJ29iamVjdCc7XG5cbiAgZnVuY3Rpb24gc2hvdWxkU2tpcCAoY1BhdGgpIHtcbiAgICByZXR1cm4gXy5pbmRleE9mKGJsYWNrbGlzdCwgSnNvblJlZnMucGF0aFRvUHRyKGNQYXRoKSkgPiAtMTtcbiAgfVxuXG4gIC8vIERvIG5vdCBwcm9jZXNzIGl0ZW1zIGluIHRoZSBibGFja2xpc3QgYXMgdGhleSd2ZSBiZWVuIHByb2Nlc3NlZCBhbHJlYWR5XG4gIGlmIChzaG91bGRTa2lwKHBhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gd2Fsa2VyIChwU2NoZW1hLCBwUGF0aCkge1xuICAgIC8vIERvIG5vdCBwcm9jZXNzIGl0ZW1zIGluIHRoZSBibGFja2xpc3QgYXMgdGhleSd2ZSBiZWVuIHByb2Nlc3NlZCBhbHJlYWR5XG4gICAgaWYgKHNob3VsZFNraXAocFBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXy5mb3JFYWNoKHBTY2hlbWEsIGZ1bmN0aW9uIChpdGVtLCBuYW1lKSB7XG4gICAgICBpZiAoXy5pc051bWJlcihuYW1lKSkge1xuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCBpdGVtLCBwUGF0aC5jb25jYXQobmFtZSksIGhhbmRsZXJzLCByZXNwb25zZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIV8uaXNVbmRlZmluZWQoc2NoZW1hLnNjaGVtYSkpIHtcbiAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCBzY2hlbWEuc2NoZW1hLCBwYXRoLmNvbmNhdCgnc2NoZW1hJyksIGhhbmRsZXJzLCByZXNwb25zZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2FycmF5JyAmJiAhXy5pc1VuZGVmaW5lZChzY2hlbWEuaXRlbXMpKSB7XG4gICAgaWYgKF8uaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICB3YWxrZXIoc2NoZW1hLml0ZW1zLCBwYXRoLmNvbmNhdCgnaXRlbXMnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIHNjaGVtYS5pdGVtcywgcGF0aC5jb25jYXQoJ2l0ZW1zJyksIGhhbmRsZXJzLCByZXNwb25zZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcykpIHtcbiAgICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcywgcGF0aC5jb25jYXQoJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyksIGhhbmRsZXJzLCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgXy5mb3JFYWNoKFsnYWxsT2YnLCAncHJvcGVydGllcyddLCBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWFbcHJvcE5hbWVdKSkge1xuICAgICAgICB3YWxrZXIoc2NoZW1hW3Byb3BOYW1lXSwgcGF0aC5jb25jYXQocHJvcE5hbWUpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF8uZm9yRWFjaChoYW5kbGVycywgZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICBoYW5kbGVyKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgcmVzb2x2ZWQgU3dhZ2dlciBkb2N1bWVudCBhZ2FpbnN0IHRoZSBTd2FnZ2VyIDIuMCBKU09OIFNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyQXBpIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIG9mIHRoZSB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RydWN0dXJlIChhcGkpIHtcbiAgdmFyIHJlc3VsdHMgPSBoZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShhcGkucGx1Z2luLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKSwgc3dhZ2dlclNjaGVtYSwgYXBpLnJlc29sdmVkKTtcblxuICAvLyBNYWtlIGNvbXBsZXggSlNPTiBTY2hlbWEgdmFsaWRhdGlvbiBlcnJvcnMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgKElzc3VlIDE1KVxuICByZXN1bHRzLmVycm9ycyA9IHJlc3VsdHMuZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICB2YXIgZGVmVHlwZSA9IFsnYWRkaXRpb25hbFByb3BlcnRpZXMnLCAnaXRlbXMnXS5pbmRleE9mKGVycm9yLnBhdGhbZXJyb3IucGF0aC5sZW5ndGggLSAxXSkgPiAtMSA/XG4gICAgICAgICAgJ3NjaGVtYScgOlxuICAgICAgICAgIGVycm9yLnBhdGhbZXJyb3IucGF0aC5sZW5ndGggLSAyXTtcblxuICAgIGlmIChbJ0FOWV9PRl9NSVNTSU5HJywgJ09ORV9PRl9NSVNTSU5HJ10uaW5kZXhPZihlcnJvci5jb2RlKSA+IC0xKSB7XG4gICAgICBzd2l0Y2ggKGRlZlR5cGUpIHtcbiAgICAgIGNhc2UgJ3BhcmFtZXRlcnMnOlxuICAgICAgICBkZWZUeXBlID0gJ3BhcmFtZXRlcic7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXNwb25zZXMnOlxuICAgICAgICBkZWZUeXBlID0gJ3Jlc3BvbnNlJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3NjaGVtYSc6XG4gICAgICAgIGRlZlR5cGUgKz0gJyAnICsgZXJyb3IucGF0aFtlcnJvci5wYXRoLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICAgIH1cblxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdOb3QgYSB2YWxpZCAnICsgZGVmVHlwZSArICcgZGVmaW5pdGlvbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9yO1xuICB9KTtcblxuICAvLyBUcmVhdCBpbnZhbGlkL21pc3NpbmcgcmVmZXJlbmNlcyBhcyBzdHJ1Y3R1cmFsIGVycm9yc1xuICBfLmVhY2goYXBpLnJlZmVyZW5jZXMsIGZ1bmN0aW9uIChyZWZEZXRhaWxzLCByZWZQdHIpIHtcbiAgICB2YXIgcmVmUGF0aCA9IEpzb25SZWZzLnBhdGhGcm9tUHRyKHJlZlB0cik7XG4gICAgdmFyIGVycjtcblxuICAgIGlmIChyZWZEZXRhaWxzLm1pc3NpbmcpIHtcbiAgICAgIGVyciA9IHtcbiAgICAgICAgY29kZTogJ1VOUkVTT0xWQUJMRV9SRUZFUkVOQ0UnLFxuICAgICAgICBtZXNzYWdlOiAnUmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJyArIHJlZkRldGFpbHMudXJpLFxuICAgICAgICBwYXRoOiByZWZQYXRoLmNvbmNhdCgnJHJlZicpXG4gICAgICB9O1xuXG4gICAgICBpZiAoXy5oYXMocmVmRGV0YWlscywgJ2Vycm9yJykpIHtcbiAgICAgICAgZXJyLmVycm9yID0gcmVmRGV0YWlscy5lcnJvcjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaChlcnIpO1xuICAgIH0gZWxzZSBpZiAocmVmRGV0YWlscy50eXBlID09PSAnaW52YWxpZCcpIHtcbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2goe1xuICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRUZFUkVOQ0UnLFxuICAgICAgICBtZXNzYWdlOiByZWZEZXRhaWxzLmVycm9yIHx8ICdJbnZhbGlkIEpTT04gUmVmZXJlbmNlJyxcbiAgICAgICAgcGF0aDogcmVmUGF0aC5jb25jYXQoJyRyZWYnKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyogU2NoZW1hIE9iamVjdCBWYWxpZGF0b3JzICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXlUeXBlSXRlbXNFeGlzdGVuY2UgKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCkge1xuICBpZiAoc2NoZW1hLnR5cGUgPT09ICdhcnJheScgJiYgXy5pc1VuZGVmaW5lZChzY2hlbWEuaXRlbXMpKSB7XG4gICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgY29kZTogJ09CSkVDVF9NSVNTSU5HX1JFUVVJUkVEX1BST1BFUlRZJyxcbiAgICAgIG1lc3NhZ2U6ICdNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiBpdGVtcycsXG4gICAgICBwYXRoOiBwYXRoXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEZWZhdWx0VmFsdWUgKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCkge1xuICB2YXIgcmVzdWx0O1xuXG4gIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICByZXN1bHQgPSBoZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShhcGkucGx1Z2luLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKSwgc2NoZW1hLCBzY2hlbWEuZGVmYXVsdCk7XG5cbiAgICBfLmZvckVhY2gocmVzdWx0LmVycm9ycywgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBlcnJvci5wYXRoID0gcGF0aC5jb25jYXQoZXJyb3IucGF0aC5jb25jYXQoJ2RlZmF1bHQnKSk7XG5cbiAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgICB9KTtcblxuICAgIF8uZm9yRWFjaChyZXN1bHQud2FybmluZ3MsIGZ1bmN0aW9uICh3YXJuaW5nKSB7XG4gICAgICB3YXJuaW5nLnBhdGggPSBwYXRoLmNvbmNhdCh3YXJuaW5nLnBhdGgucHVzaCgnZGVmYXVsdCcpKTtcblxuICAgICAgcmVzcG9uc2Uud2FybmluZ3MucHVzaCh3YXJuaW5nKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYVByb3BlcnRpZXMgKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCkge1xuICBfLmZvckVhY2goXy5kaWZmZXJlbmNlKHNjaGVtYS5yZXF1aXJlZCB8fCBbXSwgZ2V0U2NoZW1hUHJvcGVydGllcyhzY2hlbWEpKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICBjb2RlOiAnT0JKRUNUX01JU1NJTkdfUkVRVUlSRURfUFJPUEVSVFlfREVGSU5JVElPTicsXG4gICAgICBtZXNzYWdlOiAnTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAnICsgbmFtZSxcbiAgICAgIHBhdGg6IHBhdGhcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFsbCByZWZlcmVuY2VzLlxuICpcbiAqICogSWRlbnRpZmllcyBjaXJjdWxhciBpbmhlcml0YW5jZSByZWZlcmVuY2VzXG4gKiAqIElkZW50aWZpZXMgdW5yZWZlcmVuY2VkIHJlZmVyZW5jZWFibGUgZGVmaW5pdGlvbnNcbiAqICogSWRlbnRpZmllcyB1bnJlc29sdmFibGUgcmVmZXJlbmNlc1xuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXJBcGkgb2JqZWN0XG4gKlxuICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3Mgb2YgdGhlIHZhbGlkYXRpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VzIChhcGkpIHtcbiAgdmFyIGluaGVyaXRhbmNlRGV0YWlscyA9IHt9O1xuICB2YXIgcmVmZXJlbmNlYWJsZSA9IFtdO1xuICB2YXIgcmVmZXJlbmNlcyA9IHt9O1xuICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcblxuICBmdW5jdGlvbiBhZGRBbmNlc3RvciAoZHNjLCBhbmMpIHtcbiAgICBpZiAoIV8uaGFzKGluaGVyaXRhbmNlRGV0YWlscywgZHNjKSkge1xuICAgICAgaW5oZXJpdGFuY2VEZXRhaWxzW2RzY10gPSB7XG4gICAgICAgIGxpbmVhZ2U6IFtdLFxuICAgICAgICBwYXJlbnRzOiBbXG4gICAgICAgICAgYW5jXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaGVyaXRhbmNlRGV0YWlsc1tkc2NdLnBhcmVudHMucHVzaChhbmMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFJlZmVyZW5jZSAocmVmLCBwdHIpIHtcbiAgICBpZiAoXy5pbmRleE9mKHJlZmVyZW5jZXMsIHJlZikgPT09IC0xKSB7XG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChyZWZlcmVuY2VzW3JlZl0pKSB7XG4gICAgICAgIHJlZmVyZW5jZXNbcmVmXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgcmVmZXJlbmNlcyB0byBhbmNlc3RvcnNcbiAgICAgIGlmIChyZWYuaW5kZXhPZignYWxsT2YnKSA+IC0xKSB7XG4gICAgICAgIGFkZFJlZmVyZW5jZShyZWYuc3Vic3RyaW5nKDAsIHJlZi5sYXN0SW5kZXhPZignL2FsbE9mJykpKTtcbiAgICAgIH1cblxuICAgICAgcmVmZXJlbmNlc1tyZWZdLnB1c2gocHRyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTZWN1cml0eVByb2Nlc3NvciAocGF0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc2VjdXJpdHksIGluZGV4KSB7XG4gICAgICBfLmZvckVhY2goc2VjdXJpdHksIGZ1bmN0aW9uIChzY29wZXMsIG5hbWUpIHtcbiAgICAgICAgdmFyIHNkUGF0aCA9IFsnc2VjdXJpdHlEZWZpbml0aW9ucycsIG5hbWVdO1xuICAgICAgICB2YXIgc2RQdHIgPSBKc29uUmVmcy5wYXRoVG9QdHIoc2RQYXRoKTtcbiAgICAgICAgdmFyIHNyUGF0aCA9IHBhdGguY29uY2F0KFtpbmRleC50b1N0cmluZygpLCBuYW1lXSk7XG5cbiAgICAgICAgLy8gSWRlbnRpZnkgbWlzc2luZyByZWZlcmVuY2UgdG8gdGhlIHNlY3VyaXR5IGRlZmluaXRpb25cbiAgICAgICAgaWYgKF8uaW5kZXhPZihyZWZlcmVuY2VhYmxlLCBzZFB0cikgPT09IC0xKSB7XG4gICAgICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogJ1VOUkVTT0xWQUJMRV9SRUZFUkVOQ0UnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1NlY3VyaXR5IGRlZmluaXRpb24gY291bGQgbm90IGJlIHJlc29sdmVkOiAnICsgbmFtZSxcbiAgICAgICAgICAgIHBhdGg6IHNyUGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZFJlZmVyZW5jZShzZFB0ciwgSnNvblJlZnMucGF0aFRvUHRyKHNyUGF0aCkpO1xuXG4gICAgICAgICAgXy5mb3JFYWNoKHNjb3BlcywgZnVuY3Rpb24gKHNjb3BlLCBzSW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBzc3JQYXRoID0gc3JQYXRoLmNvbmNhdChzSW5kZXgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB2YXIgc3NyUHRyID0gSnNvblJlZnMucGF0aFRvUHRyKHNkUGF0aC5jb25jYXQoWydzY29wZXMnLCBzY29wZV0pKTtcblxuICAgICAgICAgICAgaWYgKF8uaW5kZXhPZihyZWZlcmVuY2VhYmxlLCBzc3JQdHIpID09PSAtMSkge1xuICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogJ1VOUkVTT0xWQUJMRV9SRUZFUkVOQ0UnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdTZWN1cml0eSBzY29wZSBkZWZpbml0aW9uIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJyArIHNjb3BlLFxuICAgICAgICAgICAgICAgIHBhdGg6IHNzclBhdGhcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRSZWZlcmVuY2UoSnNvblJlZnMucGF0aFRvUHRyKHNkUGF0aC5jb25jYXQoWydzY29wZXMnLCBzY29wZV0pKSwgc3NyUHRyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhbGtMaW5lYWdlIChyb290LCBpZCwgbGluZWFnZSkge1xuICAgIHZhciBkZXRhaWxzID0gaW5oZXJpdGFuY2VEZXRhaWxzW2lkIHx8IHJvb3RdO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIF8uZWFjaChkZXRhaWxzLnBhcmVudHMsIGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgbGluZWFnZS5wdXNoKHBhcmVudCk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IHBhcmVudCkge1xuICAgICAgICAgIHdhbGtMaW5lYWdlKHJvb3QsIHBhcmVudCwgbGluZWFnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIElkZW50aWZ5IHJlZmVyZW5jZWFibGUgZGVmaW5pdGlvbnNcbiAgXy5mb3JFYWNoKGFwaS5yZXNvbHZlZC5kZWZpbml0aW9ucywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgIHJlZmVyZW5jZWFibGUucHVzaChKc29uUmVmcy5wYXRoVG9QdHIoWydkZWZpbml0aW9ucycsIG5hbWVdKSk7XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChhcGkucmVzb2x2ZWQucGFyYW1ldGVycywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgIHJlZmVyZW5jZWFibGUucHVzaChKc29uUmVmcy5wYXRoVG9QdHIoWydwYXJhbWV0ZXJzJywgbmFtZV0pKTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGFwaS5yZXNvbHZlZC5yZXNwb25zZXMsIGZ1bmN0aW9uIChkZWYsIG5hbWUpIHtcbiAgICByZWZlcmVuY2VhYmxlLnB1c2goSnNvblJlZnMucGF0aFRvUHRyKFsncmVzcG9uc2VzJywgbmFtZV0pKTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGFwaS5yZXNvbHZlZC5zZWN1cml0eURlZmluaXRpb25zLCBmdW5jdGlvbiAoZGVmLCBuYW1lKSB7XG4gICAgdmFyIHNQYXRoID0gWydzZWN1cml0eURlZmluaXRpb25zJywgbmFtZV07XG5cbiAgICByZWZlcmVuY2VhYmxlLnB1c2goSnNvblJlZnMucGF0aFRvUHRyKHNQYXRoKSk7XG5cbiAgICBfLmZvckVhY2goZGVmLnNjb3BlcywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uLCBzY29wZSkge1xuICAgICAgdmFyIHB0ciA9IEpzb25SZWZzLnBhdGhUb1B0cihzUGF0aC5jb25jYXQoWydzY29wZXMnLCBzY29wZV0pKTtcblxuICAgICAgaWYgKF8uaW5kZXhPZihyZWZlcmVuY2VhYmxlLCBwdHIpID09PSAtMSkge1xuICAgICAgICByZWZlcmVuY2VhYmxlLnB1c2gocHRyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gSWRlbnRpZnkgcmVmZXJlbmNlcyBhbmQgYnVpbGQgaW5oZXJpdGFuY2UgbW9kZWxcbiAgXy5mb3JFYWNoKGFwaS5yZWZlcmVuY2VzLCBmdW5jdGlvbiAobWV0YWRhdGEsIHB0cikge1xuICAgIHZhciBwdHJQYXRoID0gSnNvblJlZnMucGF0aEZyb21QdHIocHRyKTtcblxuICAgIGlmICghXy5oYXMobWV0YWRhdGEsICdtaXNzaW5nJykpIHtcbiAgICAgIGFkZFJlZmVyZW5jZShtZXRhZGF0YS51cmksIHB0cik7XG5cbiAgICAgIGlmIChwdHJQYXRoW3B0clBhdGgubGVuZ3RoIC0gMl0gPT09ICdhbGxPZicpIHtcbiAgICAgICAgYWRkQW5jZXN0b3IoSnNvblJlZnMucGF0aFRvUHRyKHB0clBhdGguc2xpY2UoMCwgcHRyUGF0aC5sZW5ndGggLSAyKSksIG1ldGFkYXRhLnVyaSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBJZGVudGlmeSBjaXJjdWxhciBpbmhlcml0YW5jZVxuICBfLmZvckVhY2goaW5oZXJpdGFuY2VEZXRhaWxzLCBmdW5jdGlvbiAoZGV0YWlscywgcHRyKSB7XG4gICAgd2Fsa0xpbmVhZ2UocHRyLCB1bmRlZmluZWQsIGRldGFpbHMubGluZWFnZSk7XG5cbiAgICBpZiAoZGV0YWlscy5saW5lYWdlLmxlbmd0aCA+IDEgJiYgZGV0YWlscy5saW5lYWdlW2RldGFpbHMubGluZWFnZS5sZW5ndGggLSAxXSA9PT0gcHRyIHx8XG4gICAgICAgIGRldGFpbHMucGFyZW50c1swXSA9PT0gcHRyKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdDSVJDVUxBUl9JTkhFUklUQU5DRScsXG4gICAgICAgIGxpbmVhZ2U6IFtwdHJdLmNvbmNhdChkZXRhaWxzLmxpbmVhZ2UpLFxuICAgICAgICBtZXNzYWdlOiAnU2NoZW1hIG9iamVjdCBpbmhlcml0cyBmcm9tIGl0c2VsZjogJyArIHB0cixcbiAgICAgICAgcGF0aDogSnNvblJlZnMucGF0aEZyb21QdHIocHRyKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBJZGVudGlmeSByZWZlcmVuY2VzIGFuZCB2YWxpZGF0ZSBtaXNzaW5nIHJlZmVyZW5jZXMgZm9yIG5vbi1KU09OIFJlZmVyZW5jZXMgKHNlY3VyaXR5KVxuICBfLmZvckVhY2goYXBpLnJlc29sdmVkLnNlY3VyaXR5LCBjcmVhdGVTZWN1cml0eVByb2Nlc3NvcihbJ3NlY3VyaXR5J10pKTtcblxuICBfLmZvckVhY2goYXBpLnJlc29sdmVkLnBhdGhzLCBmdW5jdGlvbiAocGF0aERlZiwgbmFtZSkge1xuICAgIHZhciBwUGF0aCA9IFsncGF0aHMnLCBuYW1lXTtcblxuICAgIF8uZm9yRWFjaChwYXRoRGVmLnNlY3VyaXR5LCBjcmVhdGVTZWN1cml0eVByb2Nlc3NvcihwUGF0aC5jb25jYXQoJ3NlY3VyaXR5JykpKTtcblxuICAgIF8uZm9yRWFjaChwYXRoRGVmLCBmdW5jdGlvbiAob3BlcmF0aW9uRGVmLCBtZXRob2QpIHtcbiAgICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgICBpZiAoXy5pbmRleE9mKHZIZWxwZXJzLnN1cHBvcnRlZEh0dHBNZXRob2RzLCBtZXRob2QpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF8uZm9yRWFjaChvcGVyYXRpb25EZWYuc2VjdXJpdHksXG4gICAgICAgICAgICAgICAgY3JlYXRlU2VjdXJpdHlQcm9jZXNzb3IocFBhdGguY29uY2F0KFttZXRob2QsICdzZWN1cml0eSddKSkpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBJZGVudGlmeSB1bnVzZWQgcmVmZXJlbmNlcyAobWlzc2luZyByZWZlcmVuY2VzIGFyZSBhbHJlYWR5IGhhbmRsZWQgYWJvdmUpXG4gIF8uZm9yRWFjaChfLmRpZmZlcmVuY2UocmVmZXJlbmNlYWJsZSwgT2JqZWN0LmtleXMocmVmZXJlbmNlcykpLCBmdW5jdGlvbiAocHRyKSB7XG4gICAgcmVzcG9uc2Uud2FybmluZ3MucHVzaCh7XG4gICAgICBjb2RlOiAnVU5VU0VEX0RFRklOSVRJT04nLFxuICAgICAgbWVzc2FnZTogJ0RlZmluaXRpb24gaXMgbm90IHVzZWQ6ICcgKyBwdHIsXG4gICAgICBwYXRoOiBKc29uUmVmcy5wYXRoRnJvbVB0cihwdHIpXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYWxsIHNjaGVtYSBvYmplY3RzIGFuZCBzY2hlbWEtbGlrZSBvYmplY3RzIChub24tYm9keSBwYXRoIHBhcmFtZXRlcnMpLlxuICpcbiAqICogVmFsaWRhdGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgcmVsYXRlZCB0byBjb21wb3NpdGlvbi9pbmhlcml0YW5jZVxuICogKiBWYWxpZGF0ZXMgdGhhdCBhbGwgYXJyYXkgdHlwZXMgaGF2ZSB0aGVpciByZXF1aXJlZCBpdGVtcyBwcm9wZXJ0eVxuICogICAgIChAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2lzc3Vlcy8xNzR9KVxuICogKiBWYWxpZGF0ZXMgdGhhdCBhbGwgZGVmYXVsdCB2YWx1ZXMgYXJlIHZhbGlkIGJhc2VkIG9uIGl0cyByZXNwZWN0aXZlIHNjaGVtYVxuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXJBcGkgb2JqZWN0XG4gKlxuICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3Mgb2YgdGhlIHZhbGlkYXRpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWFPYmplY3RzIChhcGkpIHtcbiAgLy8gQnVpbGQgYSBibGFja2xpc3QgdG8gYXZvaWQgY2FzY2FkaW5nIGVycm9ycy93YXJuaW5nc1xuICB2YXIgYmxhY2tsaXN0ID0gXy5yZWR1Y2UoYXBpLnJlZmVyZW5jZXMsIGZ1bmN0aW9uIChsaXN0LCBtZXRhZGF0YSwgcHRyKSB7XG4gICAgdmFyIHJlZlBhdGggPSBKc29uUmVmcy5wYXRoRnJvbVB0cihwdHIpO1xuXG4gICAgbGlzdC5wdXNoKEpzb25SZWZzLnBhdGhUb1B0cihyZWZQYXRoKSk7XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfSwgW10pO1xuICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcbiAgdmFyIHZhbGlkYXRvcnMgPSBbXG4gICAgdmFsaWRhdGVBcnJheVR5cGVJdGVtc0V4aXN0ZW5jZSxcbiAgICB2YWxpZGF0ZURlZmF1bHRWYWx1ZSxcbiAgICB2YWxpZGF0ZVNjaGVtYVByb3BlcnRpZXNcbiAgXTtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZVBhcmFtZXRlcnMgKHBhcmFtZXRlcnMsIHBhdGgpIHtcbiAgICBfLmZvckVhY2gocGFyYW1ldGVycywgZnVuY3Rpb24gKHBhcmFtZXRlckRlZiwgbmFtZSkge1xuICAgICAgdmFyIHBQYXRoO1xuXG4gICAgICBpZiAoXy5pc051bWJlcihuYW1lKSkge1xuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBwUGF0aCA9IHBhdGguY29uY2F0KG5hbWUpO1xuXG4gICAgICAvLyBDcmVhdGUgSlNPTiBTY2hlbWEgZm9yIG5vbi1ib2R5IHBhcmFtZXRlcnNcbiAgICAgIGlmIChwYXJhbWV0ZXJEZWYuaW4gIT09ICdib2R5Jykge1xuICAgICAgICBwYXJhbWV0ZXJEZWYgPSB2SGVscGVycy5nZXRQYXJhbWV0ZXJTY2hlbWEocGFyYW1ldGVyRGVmKTtcbiAgICAgIH1cblxuICAgICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgcGFyYW1ldGVyRGVmLCBwUGF0aCwgdmFsaWRhdG9ycywgcmVzcG9uc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVSZXNwb25zZXMgKHJlc3BvbnNlcywgcGF0aCkge1xuICAgIF8uZm9yRWFjaChyZXNwb25zZXMsIGZ1bmN0aW9uIChyZXNwb25zZURlZiwgbmFtZSkge1xuICAgICAgdmFyIHJQYXRoID0gcGF0aC5jb25jYXQobmFtZSk7XG5cbiAgICAgIF8uZm9yRWFjaChyZXNwb25zZURlZi5oZWFkZXJzLCBmdW5jdGlvbiAoaGVhZGVyLCBoTmFtZSkge1xuICAgICAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCBoZWFkZXIsIHJQYXRoLmNvbmNhdChbJ2hlYWRlcnMnLCBoTmFtZV0pLCB2YWxpZGF0b3JzLCByZXNwb25zZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHJlc3BvbnNlRGVmLnNjaGVtYSkpIHtcbiAgICAgICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgcmVzcG9uc2VEZWYuc2NoZW1hLCByUGF0aC5jb25jYXQoJ3NjaGVtYScpLCB2YWxpZGF0b3JzLCByZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBkZWZpbml0aW9uc1xuICBfLmZvckVhY2goYXBpLnJlc29sdmVkLmRlZmluaXRpb25zLCBmdW5jdGlvbiAoZGVmaW5pdGlvbkRlZiwgbmFtZSkge1xuICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIGRlZmluaXRpb25EZWYsIFsnZGVmaW5pdGlvbnMnLCBuYW1lXSwgdmFsaWRhdG9ycywgcmVzcG9uc2UpO1xuICB9KTtcblxuICAvLyBWYWxpZGF0ZSBnbG9iYWwgcGFyYW1ldGVyIGRlZmluaXRpb25zXG4gIHZhbGlkYXRlUGFyYW1ldGVycyhhcGkucmVzb2x2ZWQucGFyYW1ldGVycywgWydwYXJhbWV0ZXJzJ10pO1xuXG4gIC8vIFZhbGlkYXRlIGdsb2JhbCByZXNwb25zZSBkZWZpbml0aW9uc1xuICB2YWxpZGF0ZVJlc3BvbnNlcyhhcGkucmVzb2x2ZWQucmVzcG9uc2VzLCBbJ3Jlc3BvbnNlcyddKTtcblxuICAvLyBWYWxpZGF0ZSBwYXRocyBhbmQgb3BlcmF0aW9uc1xuICBfLmZvckVhY2goYXBpLnJlc29sdmVkLnBhdGhzLCBmdW5jdGlvbiAocGF0aERlZiwgcGF0aCkge1xuICAgIHZhciBwUGF0aCA9IFsncGF0aHMnLCBwYXRoXTtcblxuICAgIC8vIFZhbGlkYXRlIHBhdGgtbGV2ZWwgcGFyYW1ldGVyIGRlZmluaXRpb25zXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXJzKHBhdGhEZWYucGFyYW1ldGVycywgcFBhdGguY29uY2F0KCdwYXJhbWV0ZXJzJykpO1xuXG4gICAgXy5mb3JFYWNoKHBhdGhEZWYsIGZ1bmN0aW9uIChvcGVyYXRpb25EZWYsIG1ldGhvZCkge1xuICAgICAgdmFyIG9QYXRoID0gcFBhdGguY29uY2F0KG1ldGhvZCk7XG5cbiAgICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgICBpZiAoXy5pbmRleE9mKHZIZWxwZXJzLnN1cHBvcnRlZEh0dHBNZXRob2RzLCBtZXRob2QpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIG9wZXJhdGlvbiBwYXJhbWV0ZXIgZGVmaW5pdGlvbnNcbiAgICAgIHZhbGlkYXRlUGFyYW1ldGVycyhvcGVyYXRpb25EZWYucGFyYW1ldGVycywgb1BhdGguY29uY2F0KCdwYXJhbWV0ZXJzJykpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBvcGVyYXRpb24gcmVzcG9uc2UgZGVmaW5pdGlvbnNcbiAgICAgIHZhbGlkYXRlUmVzcG9uc2VzKG9wZXJhdGlvbkRlZi5yZXNwb25zZXMsIG9QYXRoLmNvbmNhdCgncmVzcG9uc2VzJykpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHBhdGhzIGFuZCBvcGVyYXRpb25zIChXcml0dGVuIGFzIG9uZSB2YWxpZGF0b3IgdG8gYXZvaWQgbXVsdGlwbGUgcGFzc2VzKVxuICpcbiAqICogRW5zdXJlIHRoYXQgcGF0aCBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGZvciBlYWNoIHBhdGggcGFyYW1ldGVyIGRlY2xhcmF0aW9uXG4gKiAqIEVuc3VyZSB0aGF0IGRlZmluZWQgcGF0aCBwYXJhbWV0ZXJzIG1hdGNoIGEgZGVjbGFyZWQgcGF0aCBwYXJhbWV0ZXJcbiAqICogRW5zdXJlIHRoYXQgcGF0aHMgYXJlIGZ1bmN0aW9uYWxseSBkaWZmZXJlbnRcbiAqICogRW5zdXJlIHRoYXQgYW4gb3BlcmF0aW9uIG9ubHkgaGFzIG9uZSBib2R5IHBhcmFtZXRlclxuICogKiBFbnN1cmUgdGhhdCBhbiBvcGVyYXRpb24gaGFzIG9ubHkgYSBib2R5IG9yIGZvcm1EYXRhIHBhcmFtZXRlciBidXQgbm90IGJvdGhcbiAqICogRW5zdXJlIHRoYXQgYWxsIG9wZXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSB1bmlxdWUgKGluICsgbmFtZSlcbiAqICogRW5zdXJlIHRoYXQgYWxsIG9wZXJhdGlvbiBpZHMgYXJlIHVuaXF1ZVxuICogKiBFbnN1cmUgdGhhdCBwYXRoIHBhcmFtZXRlcnMgaGF2ZSBhIG5hbWVcbiAqXG4gKiBAcGFyYW0ge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyQXBpIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIG9mIHRoZSB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUGF0aHNBbmRPcGVyYXRpb25zIChhcGkpIHtcbiAgdmFyIHJlc3BvbnNlID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVEdXBsaWNhdGVQYXJhbWV0ZXIgKHNlZW5QYXJhbWV0ZXJzLCBwYXJhbWV0ZXIsIHBhdGgpIHtcbiAgICB2YXIgcE5hbWUgPSBwYXJhbWV0ZXIuaW4gKyAnOicgKyBwYXJhbWV0ZXIubmFtZTtcblxuICAgIC8vIElkZW50aWZ5IGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXNcbiAgICBpZiAoXy5pbmRleE9mKHNlZW5QYXJhbWV0ZXJzLCBwTmFtZSkgPiAtMSkge1xuICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICBjb2RlOiAnRFVQTElDQVRFX1BBUkFNRVRFUicsXG4gICAgICAgIG1lc3NhZ2U6ICdPcGVyYXRpb24gY2Fubm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlcnM6ICcgKyBKc29uUmVmcy5wYXRoVG9QdHIocGF0aCksXG4gICAgICAgIHBhdGg6IHBhdGhcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWVuUGFyYW1ldGVycy5wdXNoKHBOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VlblBhcmFtZXRlcnM7XG4gIH1cblxuICBfLnJlZHVjZShhcGkucmVzb2x2ZWQucGF0aHMsIGZ1bmN0aW9uIChtZXRhZGF0YSwgcGF0aERlZiwgcGF0aCkge1xuICAgIHZhciBkZWNsYXJlZFBhdGhQYXJhbWV0ZXJzID0gW107XG4gICAgdmFyIG5vcm1hbGl6ZWRQYXRoID0gcGF0aDtcbiAgICB2YXIgcFBhdGggPSBbJ3BhdGhzJywgcGF0aF07XG5cbiAgICBfLmZvckVhY2gocGF0aC5tYXRjaCgvXFx7KC4qPylcXH0vZyksIGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIHBhdGggcGFyYW1ldGVyIG5hbWVcbiAgICAgIGRlY2xhcmVkUGF0aFBhcmFtZXRlcnMucHVzaChhcmcucmVwbGFjZSgvW3t9XS9nLCAnJykpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIG5vcm1hbGl6ZWQgcGF0aFxuICAgICAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5yZXBsYWNlKGFyZywgJ2FyZycgKyBpbmRleCk7XG4gICAgfSk7XG5cbiAgICAvLyBJZGVudGlmeSBwYXRocyB3aXRoIGVtcHR5IHBhcmFtZXRlciBkZWNsYXJhdGlvbnNcbiAgICBpZiAoZGVjbGFyZWRQYXRoUGFyYW1ldGVycy5pbmRleE9mKCcnKSA+IC0xKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdFTVBUWV9QQVRIX1BBUkFNRVRFUl9ERUNMQVJBVElPTicsXG4gICAgICAgIG1lc3NhZ2U6ICdQYXRoIHBhcmFtZXRlciBkZWNsYXJhdGlvbiBjYW5ub3QgYmUgZW1wdHk6ICcgKyBwYXRoLFxuICAgICAgICBwYXRoOiBbJ3BhdGhzJywgcGF0aF1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElkZW5maXR5IHBhdGhzIHRoYXQgYXJlIGZ1bmN0aW9uYWxseSB0aGUgc2FtZVxuICAgIGlmIChfLmluZGV4T2YobWV0YWRhdGEucGF0aHMsIG5vcm1hbGl6ZWRQYXRoKSA+IC0xKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdFUVVJVkFMRU5UX1BBVEgnLFxuICAgICAgICBtZXNzYWdlOiAnRXF1aXZhbGVudCBwYXRoIGFscmVhZHkgZXhpc3RzOiAnICsgcGF0aCxcbiAgICAgICAgcGF0aDogcFBhdGhcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXRhZGF0YS5wYXRocy5wdXNoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBJZGVudGlmeSBkdXBsaWNhdGUgcGF0aC1sZXZlbCBwYXJhbWV0ZXJzIChXZSBkbyB0aGlzIG1hbnVhbGx5IHNpbmNlIFN3YWdnZXJBcGkjZ2V0T3BlcmF0aW9uIGNvbnNvbGlkYXRlcyB0aGVtKVxuICAgIF8ucmVkdWNlKHBhdGhEZWYucGFyYW1ldGVycywgZnVuY3Rpb24gKHNlZW5QYXJhbWV0ZXJzLCBwYXJhbWV0ZXIsIGluZGV4KSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVEdXBsaWNhdGVQYXJhbWV0ZXIoc2VlblBhcmFtZXRlcnMsIHBhcmFtZXRlciwgcFBhdGguY29uY2F0KFsncGFyYW1ldGVycycsIGluZGV4LnRvU3RyaW5nKCldKSk7XG4gICAgfSwgW10pO1xuXG4gICAgXy5mb3JFYWNoKHBhdGhEZWYsIGZ1bmN0aW9uIChvcGVyYXRpb25EZWYsIG1ldGhvZCkge1xuICAgICAgdmFyIGRlZmluZWRQYXRoUGFyYW1ldGVycyA9IHt9O1xuICAgICAgdmFyIG9QYXRoID0gcFBhdGguY29uY2F0KG1ldGhvZCk7XG4gICAgICB2YXIgb3BlcmF0aW9uSWQgPSBvcGVyYXRpb25EZWYub3BlcmF0aW9uSWQ7XG4gICAgICB2YXIgcGF0aE1ldGFkYXRhO1xuICAgICAgdmFyIHBhcmFtZXRlcnM7XG5cbiAgICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgICBpZiAoXy5pbmRleE9mKHZIZWxwZXJzLnN1cHBvcnRlZEh0dHBNZXRob2RzLCBtZXRob2QpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIElkZW50aWZ5IGR1cGxpY2F0ZSBvcGVyYXRpb25JZHNcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChvcGVyYXRpb25JZCkpIHtcbiAgICAgICAgaWYgKF8uaW5kZXhPZihtZXRhZGF0YS5vcGVyYXRpb25JZHMsIG9wZXJhdGlvbklkKSAhPT0gLTEpIHtcbiAgICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiAnRFVQTElDQVRFX09QRVJBVElPTklEJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDYW5ub3QgaGF2ZSBtdWx0aXBsZSBvcGVyYXRpb25zIHdpdGggdGhlIHNhbWUgb3BlcmF0aW9uSWQ6ICcgKyBvcGVyYXRpb25JZCxcbiAgICAgICAgICAgIHBhdGg6IG9QYXRoLmNvbmNhdChbJ29wZXJhdGlvbklkJ10pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWV0YWRhdGEub3BlcmF0aW9uSWRzLnB1c2gob3BlcmF0aW9uSWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElkZW50aWZ5IGR1cGxpY2F0ZSBvcGVyYXRpb24tbGV2ZWwgcGFyYW1ldGVycyAoV2UgZG8gdGhpcyBtYW51YWxseSBmb3IgdGhlIHNhbWUgcmVhc29ucyBhYm92ZSlcbiAgICAgIF8ucmVkdWNlKG9wZXJhdGlvbkRlZi5wYXJhbWV0ZXJzLCBmdW5jdGlvbiAoc2VlblBhcmFtZXRlcnMsIHBhcmFtZXRlciwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRHVwbGljYXRlUGFyYW1ldGVyKHNlZW5QYXJhbWV0ZXJzLCBwYXJhbWV0ZXIsIG9QYXRoLmNvbmNhdChbJ3BhcmFtZXRlcnMnLCBpbmRleC50b1N0cmluZygpXSkpO1xuICAgICAgfSwgW10pO1xuXG4gICAgICAvLyBVc2UgU3dhZ2dlckFwaSNnZXRPcGVyYXRpb24gdG8gYXZvaWQgaGF2aW5nIHRvIGNvbnNvbGlkYXRlIHBhcmFtZXRlcnNcbiAgICAgIHBhcmFtZXRlcnMgPSBhcGkuZ2V0T3BlcmF0aW9uKHBhdGgsIG1ldGhvZCkuZ2V0UGFyYW1ldGVycygpO1xuXG4gICAgICBwYXRoTWV0YWRhdGEgPSBfLnJlZHVjZShwYXJhbWV0ZXJzLCBmdW5jdGlvbiAocE1ldGFkYXRhLCBwYXJhbWV0ZXIpIHtcbiAgICAgICAgLy8gUmVjb3JkIHBhdGggcGFyYW1ldGVyc1xuICAgICAgICBpZiAocGFyYW1ldGVyLmluID09PSAncGF0aCcpIHtcbiAgICAgICAgICBkZWZpbmVkUGF0aFBhcmFtZXRlcnNbcGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVyLnB0cjtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIuaW4gPT09ICdib2R5Jykge1xuICAgICAgICAgIHBNZXRhZGF0YS5ib2R5UGFyYW1ldGV0ZXJzICs9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLmluID09PSAnZm9ybURhdGEnKSB7XG4gICAgICAgICAgcE1ldGFkYXRhLmZvcm1QYXJhbWV0ZXJzICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcE1ldGFkYXRhO1xuICAgICAgfSwge2JvZHlQYXJhbWV0ZXRlcnM6IDAsIGZvcm1QYXJhbWV0ZXJzOiAwfSk7XG5cbiAgICAgIC8vIElkZW50aWZ5IG11bHRpcGxlIGJvZHkgcGFyYW1ldGVyc1xuICAgICAgaWYgKHBhdGhNZXRhZGF0YS5ib2R5UGFyYW1ldGV0ZXJzID4gMSkge1xuICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ01VTFRJUExFX0JPRFlfUEFSQU1FVEVSUycsXG4gICAgICAgICAgbWVzc2FnZTogJ09wZXJhdGlvbiBjYW5ub3QgaGF2ZSBtdWx0aXBsZSBib2R5IHBhcmFtZXRlcnMnLFxuICAgICAgICAgIHBhdGg6IG9QYXRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVudGlmeSBoYXZpbmcgYm90aCBhIGJvZHkgYW5kIGEgZm9ybSBwYXJhbWV0ZXJcbiAgICAgIGlmIChwYXRoTWV0YWRhdGEuYm9keVBhcmFtZXRldGVycyA+IDAgJiYgcGF0aE1ldGFkYXRhLmZvcm1QYXJhbWV0ZXJzID4gMCkge1xuICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ0lOVkFMSURfUEFSQU1FVEVSX0NPTUJJTkFUSU9OJyxcbiAgICAgICAgICBtZXNzYWdlOiAnT3BlcmF0aW9uIGNhbm5vdCBoYXZlIGEgYm9keSBwYXJhbWV0ZXIgYW5kIGEgZm9ybURhdGEgcGFyYW1ldGVyJyxcbiAgICAgICAgICBwYXRoOiBvUGF0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSWRlbnRpZnkgdW5kZWZpbmVkIHBhdGggcGFyYW1ldGVyc1xuICAgICAgXy5mb3JFYWNoKF8uZGlmZmVyZW5jZShkZWNsYXJlZFBhdGhQYXJhbWV0ZXJzLCBfLmtleXMoZGVmaW5lZFBhdGhQYXJhbWV0ZXJzKSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnTUlTU0lOR19QQVRIX1BBUkFNRVRFUl9ERUZJTklUSU9OJyxcbiAgICAgICAgICBtZXNzYWdlOiAnUGF0aCBwYXJhbWV0ZXIgaXMgZGVjbGFyZWQgYnV0IGlzIG5vdCBkZWZpbmVkOiAnICsgbmFtZSxcbiAgICAgICAgICBwYXRoOiBvUGF0aFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZGVudGlmeSB1bmRlY2xhcmVkIHBhdGggcGFyYW1ldGVyc1xuICAgICAgXy5mb3JFYWNoKF8uZGlmZmVyZW5jZShfLmtleXMoZGVmaW5lZFBhdGhQYXJhbWV0ZXJzKSwgZGVjbGFyZWRQYXRoUGFyYW1ldGVycyksIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnTUlTU0lOR19QQVRIX1BBUkFNRVRFUl9ERUNMQVJBVElPTicsXG4gICAgICAgICAgbWVzc2FnZTogJ1BhdGggcGFyYW1ldGVyIGlzIGRlZmluZWQgYnV0IGlzIG5vdCBkZWNsYXJlZDogJyArIG5hbWUsXG4gICAgICAgICAgcGF0aDogSnNvblJlZnMucGF0aEZyb21QdHIoZGVmaW5lZFBhdGhQYXJhbWV0ZXJzW25hbWVdKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9LCB7cGF0aHM6IFtdLCBvcGVyYXRpb25JZHM6IFtdfSk7XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAganNvblNjaGVtYVZhbGlkYXRvcjogdmFsaWRhdGVTdHJ1Y3R1cmUsXG4gIHNlbWFudGljVmFsaWRhdG9yczogW1xuICAgIHZhbGlkYXRlUmVmZXJlbmNlcyxcbiAgICB2YWxpZGF0ZVNjaGVtYU9iamVjdHMsXG4gICAgdmFsaWRhdGVQYXRoc0FuZE9wZXJhdGlvbnNcbiAgXVxufTtcbiIsInZhciBsb29rdXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cbjsoZnVuY3Rpb24gKGV4cG9ydHMpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG4gIHZhciBBcnIgPSAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKVxuICAgID8gVWludDhBcnJheVxuICAgIDogQXJyYXlcblxuXHR2YXIgUExVUyAgID0gJysnLmNoYXJDb2RlQXQoMClcblx0dmFyIFNMQVNIICA9ICcvJy5jaGFyQ29kZUF0KDApXG5cdHZhciBOVU1CRVIgPSAnMCcuY2hhckNvZGVBdCgwKVxuXHR2YXIgTE9XRVIgID0gJ2EnLmNoYXJDb2RlQXQoMClcblx0dmFyIFVQUEVSICA9ICdBJy5jaGFyQ29kZUF0KDApXG5cdHZhciBQTFVTX1VSTF9TQUZFID0gJy0nLmNoYXJDb2RlQXQoMClcblx0dmFyIFNMQVNIX1VSTF9TQUZFID0gJ18nLmNoYXJDb2RlQXQoMClcblxuXHRmdW5jdGlvbiBkZWNvZGUgKGVsdCkge1xuXHRcdHZhciBjb2RlID0gZWx0LmNoYXJDb2RlQXQoMClcblx0XHRpZiAoY29kZSA9PT0gUExVUyB8fFxuXHRcdCAgICBjb2RlID09PSBQTFVTX1VSTF9TQUZFKVxuXHRcdFx0cmV0dXJuIDYyIC8vICcrJ1xuXHRcdGlmIChjb2RlID09PSBTTEFTSCB8fFxuXHRcdCAgICBjb2RlID09PSBTTEFTSF9VUkxfU0FGRSlcblx0XHRcdHJldHVybiA2MyAvLyAnLydcblx0XHRpZiAoY29kZSA8IE5VTUJFUilcblx0XHRcdHJldHVybiAtMSAvL25vIG1hdGNoXG5cdFx0aWYgKGNvZGUgPCBOVU1CRVIgKyAxMClcblx0XHRcdHJldHVybiBjb2RlIC0gTlVNQkVSICsgMjYgKyAyNlxuXHRcdGlmIChjb2RlIDwgVVBQRVIgKyAyNilcblx0XHRcdHJldHVybiBjb2RlIC0gVVBQRVJcblx0XHRpZiAoY29kZSA8IExPV0VSICsgMjYpXG5cdFx0XHRyZXR1cm4gY29kZSAtIExPV0VSICsgMjZcblx0fVxuXG5cdGZ1bmN0aW9uIGI2NFRvQnl0ZUFycmF5IChiNjQpIHtcblx0XHR2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuXG5cdFx0aWYgKGI2NC5sZW5ndGggJSA0ID4gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Jylcblx0XHR9XG5cblx0XHQvLyB0aGUgbnVtYmVyIG9mIGVxdWFsIHNpZ25zIChwbGFjZSBob2xkZXJzKVxuXHRcdC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcblx0XHQvLyByZXByZXNlbnQgb25lIGJ5dGVcblx0XHQvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiB0aGUgdGhyZWUgY2hhcmFjdGVycyBiZWZvcmUgaXQgcmVwcmVzZW50IDIgYnl0ZXNcblx0XHQvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG5cdFx0dmFyIGxlbiA9IGI2NC5sZW5ndGhcblx0XHRwbGFjZUhvbGRlcnMgPSAnPScgPT09IGI2NC5jaGFyQXQobGVuIC0gMikgPyAyIDogJz0nID09PSBiNjQuY2hhckF0KGxlbiAtIDEpID8gMSA6IDBcblxuXHRcdC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuXHRcdGFyciA9IG5ldyBBcnIoYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG5cdFx0Ly8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuXHRcdGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gYjY0Lmxlbmd0aCAtIDQgOiBiNjQubGVuZ3RoXG5cblx0XHR2YXIgTCA9IDBcblxuXHRcdGZ1bmN0aW9uIHB1c2ggKHYpIHtcblx0XHRcdGFycltMKytdID0gdlxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTgpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgMTIpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAyKSkgPDwgNikgfCBkZWNvZGUoYjY0LmNoYXJBdChpICsgMykpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDAwMCkgPj4gMTYpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDApID4+IDgpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fVxuXG5cdFx0aWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuXHRcdFx0dG1wID0gKGRlY29kZShiNjQuY2hhckF0KGkpKSA8PCAyKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpID4+IDQpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fSBlbHNlIGlmIChwbGFjZUhvbGRlcnMgPT09IDEpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTApIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgNCkgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDIpKSA+PiAyKVxuXHRcdFx0cHVzaCgodG1wID4+IDgpICYgMHhGRilcblx0XHRcdHB1c2godG1wICYgMHhGRilcblx0XHR9XG5cblx0XHRyZXR1cm4gYXJyXG5cdH1cblxuXHRmdW5jdGlvbiB1aW50OFRvQmFzZTY0ICh1aW50OCkge1xuXHRcdHZhciBpLFxuXHRcdFx0ZXh0cmFCeXRlcyA9IHVpbnQ4Lmxlbmd0aCAlIDMsIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG5cdFx0XHRvdXRwdXQgPSBcIlwiLFxuXHRcdFx0dGVtcCwgbGVuZ3RoXG5cblx0XHRmdW5jdGlvbiBlbmNvZGUgKG51bSkge1xuXHRcdFx0cmV0dXJuIGxvb2t1cC5jaGFyQXQobnVtKVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlKG51bSA+PiAxOCAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiAxMiAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiA2ICYgMHgzRikgKyBlbmNvZGUobnVtICYgMHgzRilcblx0XHR9XG5cblx0XHQvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG5cdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gdWludDgubGVuZ3RoIC0gZXh0cmFCeXRlczsgaSA8IGxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHR0ZW1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuXHRcdFx0b3V0cHV0ICs9IHRyaXBsZXRUb0Jhc2U2NCh0ZW1wKVxuXHRcdH1cblxuXHRcdC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcblx0XHRzd2l0Y2ggKGV4dHJhQnl0ZXMpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0dGVtcCA9IHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDFdXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUodGVtcCA+PiAyKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wIDw8IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9ICc9PSdcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0dGVtcCA9ICh1aW50OFt1aW50OC5sZW5ndGggLSAyXSA8PCA4KSArICh1aW50OFt1aW50OC5sZW5ndGggLSAxXSlcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSh0ZW1wID4+IDEwKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wID4+IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSgodGVtcCA8PCAyKSAmIDB4M0YpXG5cdFx0XHRcdG91dHB1dCArPSAnPSdcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cblxuXHRleHBvcnRzLnRvQnl0ZUFycmF5ID0gYjY0VG9CeXRlQXJyYXlcblx0ZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gdWludDhUb0Jhc2U2NFxufSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcgPyAodGhpcy5iYXNlNjRqcyA9IHt9KSA6IGV4cG9ydHMpKVxuIiwiIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG52YXIgcm9vdFBhcmVudCA9IHt9XG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gU2FmYXJpIDUtNyBsYWNrcyBzdXBwb3J0IGZvciBjaGFuZ2luZyB0aGUgYE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3JgIHByb3BlcnR5XG4gKiAgICAgb24gb2JqZWN0cy5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIGZ1bmN0aW9uIEJhciAoKSB7fVxuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5mb28gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9XG4gICAgYXJyLmNvbnN0cnVjdG9yID0gQmFyXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgYXJyLmNvbnN0cnVjdG9yID09PSBCYXIgJiYgLy8gY29uc3RydWN0b3IgY2FuIGJlIHNldFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG4vKipcbiAqIENsYXNzOiBCdWZmZXJcbiAqID09PT09PT09PT09PT1cbiAqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGFyZSBhdWdtZW50ZWRcbiAqIHdpdGggZnVuY3Rpb24gcHJvcGVydGllcyBmb3IgYWxsIHRoZSBub2RlIGBCdWZmZXJgIEFQSSBmdW5jdGlvbnMuIFdlIHVzZVxuICogYFVpbnQ4QXJyYXlgIHNvIHRoYXQgc3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXQgcmV0dXJuc1xuICogYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogQnkgYXVnbWVudGluZyB0aGUgaW5zdGFuY2VzLCB3ZSBjYW4gYXZvaWQgbW9kaWZ5aW5nIHRoZSBgVWludDhBcnJheWBcbiAqIHByb3RvdHlwZS5cbiAqL1xuZnVuY3Rpb24gQnVmZmVyIChhcmcpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICAvLyBBdm9pZCBnb2luZyB0aHJvdWdoIGFuIEFyZ3VtZW50c0FkYXB0b3JUcmFtcG9saW5lIGluIHRoZSBjb21tb24gY2FzZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHJldHVybiBuZXcgQnVmZmVyKGFyZywgYXJndW1lbnRzWzFdKVxuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZylcbiAgfVxuXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmcm9tTnVtYmVyKHRoaXMsIGFyZylcbiAgfVxuXG4gIC8vIFNsaWdodGx5IGxlc3MgY29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoaXMsIGFyZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiAndXRmOCcpXG4gIH1cblxuICAvLyBVbnVzdWFsLlxuICByZXR1cm4gZnJvbU9iamVjdCh0aGlzLCBhcmcpXG59XG5cbmZ1bmN0aW9uIGZyb21OdW1iZXIgKHRoYXQsIGxlbmd0aCkge1xuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGxlbmd0aCkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgLy8gQXNzdW1wdGlvbjogYnl0ZUxlbmd0aCgpIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgPCBrTWF4TGVuZ3RoLlxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcblxuICB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iamVjdCkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iamVjdCkpIHJldHVybiBmcm9tQnVmZmVyKHRoYXQsIG9iamVjdClcblxuICBpZiAoaXNBcnJheShvYmplY3QpKSByZXR1cm4gZnJvbUFycmF5KHRoYXQsIG9iamVjdClcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHN0YXJ0IHdpdGggbnVtYmVyLCBidWZmZXIsIGFycmF5IG9yIHN0cmluZycpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChvYmplY3QuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBmcm9tVHlwZWRBcnJheSh0aGF0LCBvYmplY3QpXG4gICAgfVxuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCBvYmplY3QpXG4gICAgfVxuICB9XG5cbiAgaWYgKG9iamVjdC5sZW5ndGgpIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iamVjdClcblxuICByZXR1cm4gZnJvbUpzb25PYmplY3QodGhhdCwgb2JqZWN0KVxufVxuXG5mdW5jdGlvbiBmcm9tQnVmZmVyICh0aGF0LCBidWZmZXIpIHtcbiAgdmFyIGxlbmd0aCA9IGNoZWNrZWQoYnVmZmVyLmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG4gIGJ1ZmZlci5jb3B5KHRoYXQsIDAsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5ICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLy8gRHVwbGljYXRlIG9mIGZyb21BcnJheSgpIHRvIGtlZXAgZnJvbUFycmF5KCkgbW9ub21vcnBoaWMuXG5mdW5jdGlvbiBmcm9tVHlwZWRBcnJheSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcbiAgLy8gVHJ1bmNhdGluZyB0aGUgZWxlbWVudHMgaXMgcHJvYmFibHkgbm90IHdoYXQgcGVvcGxlIGV4cGVjdCBmcm9tIHR5cGVkXG4gIC8vIGFycmF5cyB3aXRoIEJZVEVTX1BFUl9FTEVNRU5UID4gMSBidXQgaXQncyBjb21wYXRpYmxlIHdpdGggdGhlIGJlaGF2aW9yXG4gIC8vIG9mIHRoZSBvbGQgQnVmZmVyIGNvbnN0cnVjdG9yLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSkge1xuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICBhcnJheS5ieXRlTGVuZ3RoXG4gICAgdGhhdCA9IEJ1ZmZlci5fYXVnbWVudChuZXcgVWludDhBcnJheShhcnJheSkpXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tVHlwZWRBcnJheSh0aGF0LCBuZXcgVWludDhBcnJheShhcnJheSkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8vIERlc2VyaWFsaXplIHsgdHlwZTogJ0J1ZmZlcicsIGRhdGE6IFsxLDIsMywuLi5dIH0gaW50byBhIEJ1ZmZlciBvYmplY3QuXG4vLyBSZXR1cm5zIGEgemVyby1sZW5ndGggYnVmZmVyIGZvciBpbnB1dHMgdGhhdCBkb24ndCBjb25mb3JtIHRvIHRoZSBzcGVjLlxuZnVuY3Rpb24gZnJvbUpzb25PYmplY3QgKHRoYXQsIG9iamVjdCkge1xuICB2YXIgYXJyYXlcbiAgdmFyIGxlbmd0aCA9IDBcblxuICBpZiAob2JqZWN0LnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqZWN0LmRhdGEpKSB7XG4gICAgYXJyYXkgPSBvYmplY3QuZGF0YVxuICAgIGxlbmd0aCA9IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgfVxuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxufSBlbHNlIHtcbiAgLy8gcHJlLXNldCBmb3IgdmFsdWVzIHRoYXQgbWF5IGV4aXN0IGluIHRoZSBmdXR1cmVcbiAgQnVmZmVyLnByb3RvdHlwZS5sZW5ndGggPSB1bmRlZmluZWRcbiAgQnVmZmVyLnByb3RvdHlwZS5wYXJlbnQgPSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gYWxsb2NhdGUgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gQnVmZmVyLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGxlbmd0aCkpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gICAgdGhhdC5faXNCdWZmZXIgPSB0cnVlXG4gIH1cblxuICB2YXIgZnJvbVBvb2wgPSBsZW5ndGggIT09IDAgJiYgbGVuZ3RoIDw9IEJ1ZmZlci5wb29sU2l6ZSA+Pj4gMVxuICBpZiAoZnJvbVBvb2wpIHRoYXQucGFyZW50ID0gcm9vdFBhcmVudFxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAoc3ViamVjdCwgZW5jb2RpbmcpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNsb3dCdWZmZXIpKSByZXR1cm4gbmV3IFNsb3dCdWZmZXIoc3ViamVjdCwgZW5jb2RpbmcpXG5cbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoc3ViamVjdCwgZW5jb2RpbmcpXG4gIGRlbGV0ZSBidWYucGFyZW50XG4gIHJldHVybiBidWZcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIHZhciBpID0gMFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkgYnJlYWtcblxuICAgICsraVxuICB9XG5cbiAgaWYgKGkgIT09IGxlbikge1xuICAgIHggPSBhW2ldXG4gICAgeSA9IGJbaV1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAncmF3JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbGlzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMuJylcblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcigwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgaXRlbS5jb3B5KGJ1ZiwgcG9zKVxuICAgIHBvcyArPSBpdGVtLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHN0cmluZyA9ICcnICsgc3RyaW5nXG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAvLyBEZXByZWNhdGVkXG4gICAgICBjYXNlICdyYXcnOlxuICAgICAgY2FzZSAncmF3cyc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgc3RhcnQgPSBzdGFydCB8IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID09PSBJbmZpbml0eSA/IHRoaXMubGVuZ3RoIDogZW5kIHwgMFxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG4gIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiAnJ1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGJpbmFyeVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gMFxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYilcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0KSB7XG4gIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgYnl0ZU9mZnNldCA+Pj0gMFxuXG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG4gIGlmIChieXRlT2Zmc2V0ID49IHRoaXMubGVuZ3RoKSByZXR1cm4gLTFcblxuICAvLyBOZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoICsgYnl0ZU9mZnNldCwgMClcblxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xIC8vIHNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nIGFsd2F5cyBmYWlsc1xuICAgIHJldHVybiBTdHJpbmcucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCB2YWwsIGJ5dGVPZmZzZXQpXG4gIH1cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcywgdmFsLCBieXRlT2Zmc2V0KVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKHRoaXMsIFsgdmFsIF0sIGJ5dGVPZmZzZXQpXG4gIH1cblxuICBmdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0KSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAodmFyIGkgPSAwOyBieXRlT2Zmc2V0ICsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycltieXRlT2Zmc2V0ICsgaV0gPT09IHZhbFtmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleF0pIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWwubGVuZ3RoKSByZXR1cm4gYnl0ZU9mZnNldCArIGZvdW5kSW5kZXhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTFcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbi8vIGBnZXRgIGlzIGRlcHJlY2F0ZWRcbkJ1ZmZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChvZmZzZXQpIHtcbiAgY29uc29sZS5sb2coJy5nZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLicpXG4gIHJldHVybiB0aGlzLnJlYWRVSW50OChvZmZzZXQpXG59XG5cbi8vIGBzZXRgIGlzIGRlcHJlY2F0ZWRcbkJ1ZmZlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gc2V0ICh2LCBvZmZzZXQpIHtcbiAgY29uc29sZS5sb2coJy5zZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLicpXG4gIHJldHVybiB0aGlzLndyaXRlVUludDgodiwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJpbmFyeVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3dhcCA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBvZmZzZXQgPSBsZW5ndGggfCAwXG4gICAgbGVuZ3RoID0gc3dhcFxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBiaW5hcnlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSBCdWZmZXIuX2F1Z21lbnQodGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSlcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyBpKyspIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIGlmIChuZXdCdWYubGVuZ3RoKSBuZXdCdWYucGFyZW50ID0gdGhpcy5wYXJlbnQgfHwgdGhpc1xuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCd2YWx1ZSBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSwgMClcblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSwgMClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyBpKyspIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgaSsrKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IHZhbHVlIDwgMCA/IDEgOiAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gdmFsdWUgPCAwID8gMSA6IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmFsdWUgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRhcmdldC5fc2V0KHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSwgdGFyZ2V0U3RhcnQpXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIGZpbGwodmFsdWUsIHN0YXJ0PTAsIGVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCF2YWx1ZSkgdmFsdWUgPSAwXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCkgZW5kID0gdGhpcy5sZW5ndGhcblxuICBpZiAoZW5kIDwgc3RhcnQpIHRocm93IG5ldyBSYW5nZUVycm9yKCdlbmQgPCBzdGFydCcpXG5cbiAgLy8gRmlsbCAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdGhpc1tpXSA9IHZhbHVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IHV0ZjhUb0J5dGVzKHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHRoaXNbaV0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBgQXJyYXlCdWZmZXJgIHdpdGggdGhlICpjb3BpZWQqIG1lbW9yeSBvZiB0aGUgYnVmZmVyIGluc3RhbmNlLlxuICogQWRkZWQgaW4gTm9kZSAwLjEyLiBPbmx5IGF2YWlsYWJsZSBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgQXJyYXlCdWZmZXIuXG4gKi9cbkJ1ZmZlci5wcm90b3R5cGUudG9BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIHRvQXJyYXlCdWZmZXIgKCkge1xuICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgICByZXR1cm4gKG5ldyBCdWZmZXIodGhpcykpLmJ1ZmZlclxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgpXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnVmLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIGJ1ZltpXSA9IHRoaXNbaV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBidWYuYnVmZmVyXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1ZmZlci50b0FycmF5QnVmZmVyIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyJylcbiAgfVxufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBCUCA9IEJ1ZmZlci5wcm90b3R5cGVcblxuLyoqXG4gKiBBdWdtZW50IGEgVWludDhBcnJheSAqaW5zdGFuY2UqIChub3QgdGhlIFVpbnQ4QXJyYXkgY2xhc3MhKSB3aXRoIEJ1ZmZlciBtZXRob2RzXG4gKi9cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIF9hdWdtZW50IChhcnIpIHtcbiAgYXJyLmNvbnN0cnVjdG9yID0gQnVmZmVyXG4gIGFyci5faXNCdWZmZXIgPSB0cnVlXG5cbiAgLy8gc2F2ZSByZWZlcmVuY2UgdG8gb3JpZ2luYWwgVWludDhBcnJheSBzZXQgbWV0aG9kIGJlZm9yZSBvdmVyd3JpdGluZ1xuICBhcnIuX3NldCA9IGFyci5zZXRcblxuICAvLyBkZXByZWNhdGVkXG4gIGFyci5nZXQgPSBCUC5nZXRcbiAgYXJyLnNldCA9IEJQLnNldFxuXG4gIGFyci53cml0ZSA9IEJQLndyaXRlXG4gIGFyci50b1N0cmluZyA9IEJQLnRvU3RyaW5nXG4gIGFyci50b0xvY2FsZVN0cmluZyA9IEJQLnRvU3RyaW5nXG4gIGFyci50b0pTT04gPSBCUC50b0pTT05cbiAgYXJyLmVxdWFscyA9IEJQLmVxdWFsc1xuICBhcnIuY29tcGFyZSA9IEJQLmNvbXBhcmVcbiAgYXJyLmluZGV4T2YgPSBCUC5pbmRleE9mXG4gIGFyci5jb3B5ID0gQlAuY29weVxuICBhcnIuc2xpY2UgPSBCUC5zbGljZVxuICBhcnIucmVhZFVJbnRMRSA9IEJQLnJlYWRVSW50TEVcbiAgYXJyLnJlYWRVSW50QkUgPSBCUC5yZWFkVUludEJFXG4gIGFyci5yZWFkVUludDggPSBCUC5yZWFkVUludDhcbiAgYXJyLnJlYWRVSW50MTZMRSA9IEJQLnJlYWRVSW50MTZMRVxuICBhcnIucmVhZFVJbnQxNkJFID0gQlAucmVhZFVJbnQxNkJFXG4gIGFyci5yZWFkVUludDMyTEUgPSBCUC5yZWFkVUludDMyTEVcbiAgYXJyLnJlYWRVSW50MzJCRSA9IEJQLnJlYWRVSW50MzJCRVxuICBhcnIucmVhZEludExFID0gQlAucmVhZEludExFXG4gIGFyci5yZWFkSW50QkUgPSBCUC5yZWFkSW50QkVcbiAgYXJyLnJlYWRJbnQ4ID0gQlAucmVhZEludDhcbiAgYXJyLnJlYWRJbnQxNkxFID0gQlAucmVhZEludDE2TEVcbiAgYXJyLnJlYWRJbnQxNkJFID0gQlAucmVhZEludDE2QkVcbiAgYXJyLnJlYWRJbnQzMkxFID0gQlAucmVhZEludDMyTEVcbiAgYXJyLnJlYWRJbnQzMkJFID0gQlAucmVhZEludDMyQkVcbiAgYXJyLnJlYWRGbG9hdExFID0gQlAucmVhZEZsb2F0TEVcbiAgYXJyLnJlYWRGbG9hdEJFID0gQlAucmVhZEZsb2F0QkVcbiAgYXJyLnJlYWREb3VibGVMRSA9IEJQLnJlYWREb3VibGVMRVxuICBhcnIucmVhZERvdWJsZUJFID0gQlAucmVhZERvdWJsZUJFXG4gIGFyci53cml0ZVVJbnQ4ID0gQlAud3JpdGVVSW50OFxuICBhcnIud3JpdGVVSW50TEUgPSBCUC53cml0ZVVJbnRMRVxuICBhcnIud3JpdGVVSW50QkUgPSBCUC53cml0ZVVJbnRCRVxuICBhcnIud3JpdGVVSW50MTZMRSA9IEJQLndyaXRlVUludDE2TEVcbiAgYXJyLndyaXRlVUludDE2QkUgPSBCUC53cml0ZVVJbnQxNkJFXG4gIGFyci53cml0ZVVJbnQzMkxFID0gQlAud3JpdGVVSW50MzJMRVxuICBhcnIud3JpdGVVSW50MzJCRSA9IEJQLndyaXRlVUludDMyQkVcbiAgYXJyLndyaXRlSW50TEUgPSBCUC53cml0ZUludExFXG4gIGFyci53cml0ZUludEJFID0gQlAud3JpdGVJbnRCRVxuICBhcnIud3JpdGVJbnQ4ID0gQlAud3JpdGVJbnQ4XG4gIGFyci53cml0ZUludDE2TEUgPSBCUC53cml0ZUludDE2TEVcbiAgYXJyLndyaXRlSW50MTZCRSA9IEJQLndyaXRlSW50MTZCRVxuICBhcnIud3JpdGVJbnQzMkxFID0gQlAud3JpdGVJbnQzMkxFXG4gIGFyci53cml0ZUludDMyQkUgPSBCUC53cml0ZUludDMyQkVcbiAgYXJyLndyaXRlRmxvYXRMRSA9IEJQLndyaXRlRmxvYXRMRVxuICBhcnIud3JpdGVGbG9hdEJFID0gQlAud3JpdGVGbG9hdEJFXG4gIGFyci53cml0ZURvdWJsZUxFID0gQlAud3JpdGVEb3VibGVMRVxuICBhcnIud3JpdGVEb3VibGVCRSA9IEJQLndyaXRlRG91YmxlQkVcbiAgYXJyLmZpbGwgPSBCUC5maWxsXG4gIGFyci5pbnNwZWN0ID0gQlAuaW5zcGVjdFxuICBhcnIudG9BcnJheUJ1ZmZlciA9IEJQLnRvQXJyYXlCdWZmZXJcblxuICByZXR1cm4gYXJyXG59XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCIvLyAgQ2hhbmNlLmpzIDAuOC4wXG4vLyAgaHR0cDovL2NoYW5jZWpzLmNvbVxuLy8gIChjKSAyMDEzIFZpY3RvciBRdWlublxuLy8gIENoYW5jZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIENvbnN0YW50c1xuICAgIHZhciBNQVhfSU5UID0gOTAwNzE5OTI1NDc0MDk5MjtcbiAgICB2YXIgTUlOX0lOVCA9IC1NQVhfSU5UO1xuICAgIHZhciBOVU1CRVJTID0gJzAxMjM0NTY3ODknO1xuICAgIHZhciBDSEFSU19MT1dFUiA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG4gICAgdmFyIENIQVJTX1VQUEVSID0gQ0hBUlNfTE9XRVIudG9VcHBlckNhc2UoKTtcbiAgICB2YXIgSEVYX1BPT0wgID0gTlVNQkVSUyArIFwiYWJjZGVmXCI7XG5cbiAgICAvLyBDYWNoZWQgYXJyYXkgaGVscGVyc1xuICAgIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuICAgIC8vIENvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gQ2hhbmNlIChzZWVkKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDaGFuY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VlZCA9PSBudWxsID8gbmV3IENoYW5jZSgpIDogbmV3IENoYW5jZShzZWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHVzZXIgaGFzIHByb3ZpZGVkIGEgZnVuY3Rpb24sIHVzZSB0aGF0IGFzIHRoZSBnZW5lcmF0b3JcbiAgICAgICAgaWYgKHR5cGVvZiBzZWVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnJhbmRvbSA9IHNlZWQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzZXQgYSBzdGFydGluZyB2YWx1ZSBvZiB6ZXJvIHNvIHdlIGNhbiBhZGQgdG8gaXRcbiAgICAgICAgICAgIHRoaXMuc2VlZCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvdGhlcndpc2UsIGxlYXZlIHRoaXMuc2VlZCBibGFuayBzbyB0aGF0IE1UIHdpbGwgcmVjZWl2ZSBhIGJsYW5rXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzZWVkbGluZyA9IDA7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50c1tpXSkgPT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcmd1bWVudHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgbnVtZXJpYyBoYXNoIGZvciBlYWNoIGFyZ3VtZW50LCBhZGQgdG8gc2VlZGxpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGFyZ3VtZW50c1tpXS5jaGFyQ29kZUF0KGspICsgKGhhc2ggPDwgNikgKyAoaGFzaCA8PCAxNikgLSBoYXNoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlZWRsaW5nICs9IGhhc2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWVkbGluZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VlZCArPSAoYXJndW1lbnRzLmxlbmd0aCAtIGkpICogc2VlZGxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBubyBnZW5lcmF0b3IgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB1c2Ugb3VyIE1UXG4gICAgICAgIHRoaXMubXQgPSB0aGlzLm1lcnNlbm5lX3R3aXN0ZXIodGhpcy5zZWVkKTtcbiAgICAgICAgdGhpcy5iaW1kNSA9IHRoaXMuYmx1ZWltcF9tZDUoKTtcbiAgICAgICAgdGhpcy5yYW5kb20gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tdC5yYW5kb20odGhpcy5zZWVkKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLlZFUlNJT04gPSBcIjAuOC4wXCI7XG5cbiAgICAvLyBSYW5kb20gaGVscGVyIGZ1bmN0aW9uc1xuICAgIGZ1bmN0aW9uIGluaXRPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gICAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG5cbiAgICAgICAgaWYgKGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gZGVmYXVsdHNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGVzdFJhbmdlKHRlc3QsIGVycm9yTWVzc2FnZSkge1xuICAgICAgICBpZiAodGVzdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuY29kZSB0aGUgaW5wdXQgc3RyaW5nIHdpdGggQmFzZTY0LlxuICAgICAqL1xuICAgIHZhciBiYXNlNjQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBCYXNlNjQgZW5jb2RlciBhdmFpbGFibGUuJyk7XG4gICAgfTtcblxuICAgIC8vIFNlbGVjdCBwcm9wZXIgQmFzZTY0IGVuY29kZXIuXG4gICAgKGZ1bmN0aW9uIGRldGVybWluZUJhc2U2NEVuY29kZXIoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYmFzZTY0ID0gYnRvYTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBiYXNlNjQgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKGlucHV0KS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSkoKTtcblxuICAgIC8vIC0tIEJhc2ljcyAtLVxuXG4gICAgLyoqXG4gICAgICogIFJldHVybiBhIHJhbmRvbSBib29sLCBlaXRoZXIgdHJ1ZSBvciBmYWxzZVxuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17IGxpa2VsaWhvb2Q6IDUwIH1dIGFsdGVyIHRoZSBsaWtlbGlob29kIG9mXG4gICAgICogICAgcmVjZWl2aW5nIGEgdHJ1ZSBvciBmYWxzZSB2YWx1ZSBiYWNrLlxuICAgICAqICBAdGhyb3dzIHtSYW5nZUVycm9yfSBpZiB0aGUgbGlrZWxpaG9vZCBpcyBvdXQgb2YgYm91bmRzXG4gICAgICogIEByZXR1cm5zIHtCb29sfSBlaXRoZXIgdHJ1ZSBvciBmYWxzZVxuICAgICAqL1xuICAgIENoYW5jZS5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIC8vIGxpa2VsaWhvb2Qgb2Ygc3VjY2VzcyAodHJ1ZSlcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtsaWtlbGlob29kIDogNTB9KTtcblxuICAgICAgICAvLyBOb3RlLCB3ZSBjb3VsZCBnZXQgc29tZSBtaW5vciBwZXJmIG9wdGltaXphdGlvbnMgYnkgY2hlY2tpbmcgcmFuZ2VcbiAgICAgICAgLy8gcHJpb3IgdG8gaW5pdGlhbGl6aW5nIGRlZmF1bHRzLCBidXQgdGhhdCBtYWtlcyBjb2RlIGEgYml0IG1lc3NpZXJcbiAgICAgICAgLy8gYW5kIHRoZSBjaGVjayBtb3JlIGNvbXBsaWNhdGVkIGFzIHdlIGhhdmUgdG8gY2hlY2sgZXhpc3RlbmNlIG9mXG4gICAgICAgIC8vIHRoZSBvYmplY3QgdGhlbiBleGlzdGVuY2Ugb2YgdGhlIGtleSBiZWZvcmUgY2hlY2tpbmcgY29uc3RyYWludHMuXG4gICAgICAgIC8vIFNpbmNlIHRoZSBvcHRpb25zIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBtaW5vciBjb21wdXRhdGlvbmFsbHksXG4gICAgICAgIC8vIGRlY2lzaW9uIG1hZGUgZm9yIGNvZGUgY2xlYW5saW5lc3MgaW50ZW50aW9uYWxseS4gVGhpcyBpcyBtZW50aW9uZWRcbiAgICAgICAgLy8gaGVyZSBhcyBpdCdzIHRoZSBmaXJzdCBvY2N1cnJlbmNlLCB3aWxsIG5vdCBiZSBtZW50aW9uZWQgYWdhaW4uXG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIG9wdGlvbnMubGlrZWxpaG9vZCA8IDAgfHwgb3B0aW9ucy5saWtlbGlob29kID4gMTAwLFxuICAgICAgICAgICAgXCJDaGFuY2U6IExpa2VsaWhvb2QgYWNjZXB0cyB2YWx1ZXMgZnJvbSAwIHRvIDEwMC5cIlxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJhbmRvbSgpICogMTAwIDwgb3B0aW9ucy5saWtlbGlob29kO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJuIGEgcmFuZG9tIGNoYXJhY3Rlci5cbiAgICAgKlxuICAgICAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIGNhbiBzcGVjaWZ5IGEgY2hhcmFjdGVyIHBvb2wsIG9ubHkgYWxwaGEsXG4gICAgICogICAgb25seSBzeW1ib2xzLCBhbmQgY2FzaW5nIChsb3dlciBvciB1cHBlcilcbiAgICAgKiAgQHJldHVybnMge1N0cmluZ30gYSBzaW5nbGUgcmFuZG9tIGNoYXJhY3RlclxuICAgICAqICBAdGhyb3dzIHtSYW5nZUVycm9yfSBDYW4gb25seSBzcGVjaWZ5IGFscGhhIG9yIHN5bWJvbHMsIG5vdCBib3RoXG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jaGFyYWN0ZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIG9wdGlvbnMuYWxwaGEgJiYgb3B0aW9ucy5zeW1ib2xzLFxuICAgICAgICAgICAgXCJDaGFuY2U6IENhbm5vdCBzcGVjaWZ5IGJvdGggYWxwaGEgYW5kIHN5bWJvbHMuXCJcbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgc3ltYm9scyA9IFwiIUAjJCVeJiooKVtdXCIsXG4gICAgICAgICAgICBsZXR0ZXJzLCBwb29sO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmNhc2luZyA9PT0gJ2xvd2VyJykge1xuICAgICAgICAgICAgbGV0dGVycyA9IENIQVJTX0xPV0VSO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2FzaW5nID09PSAndXBwZXInKSB7XG4gICAgICAgICAgICBsZXR0ZXJzID0gQ0hBUlNfVVBQRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXR0ZXJzID0gQ0hBUlNfTE9XRVIgKyBDSEFSU19VUFBFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBvb2wpIHtcbiAgICAgICAgICAgIHBvb2wgPSBvcHRpb25zLnBvb2w7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hbHBoYSkge1xuICAgICAgICAgICAgcG9vbCA9IGxldHRlcnM7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zeW1ib2xzKSB7XG4gICAgICAgICAgICBwb29sID0gc3ltYm9scztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvb2wgPSBsZXR0ZXJzICsgTlVNQkVSUyArIHN5bWJvbHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcG9vbC5jaGFyQXQodGhpcy5uYXR1cmFsKHttYXg6IChwb29sLmxlbmd0aCAtIDEpfSkpO1xuICAgIH07XG5cbiAgICAvLyBOb3RlLCB3YW50ZWQgdG8gdXNlIFwiZmxvYXRcIiBvciBcImRvdWJsZVwiIGJ1dCB0aG9zZSBhcmUgYm90aCBKUyByZXNlcnZlZCB3b3Jkcy5cblxuICAgIC8vIE5vdGUsIGZpeGVkIG1lYW5zIE4gT1IgTEVTUyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwuIFRoaXMgYmVjYXVzZVxuICAgIC8vIEl0IGNvdWxkIGJlIDE0LjkwMDAgYnV0IGluIEphdmFTY3JpcHQsIHdoZW4gdGhpcyBpcyBjYXN0IGFzIGEgbnVtYmVyLFxuICAgIC8vIHRoZSB0cmFpbGluZyB6ZXJvZXMgYXJlIGRyb3BwZWQuIExlZnQgdG8gdGhlIGNvbnN1bWVyIGlmIHRyYWlsaW5nIHplcm9lcyBhcmVcbiAgICAvLyBuZWVkZWRcbiAgICAvKipcbiAgICAgKiAgUmV0dXJuIGEgcmFuZG9tIGZsb2F0aW5nIHBvaW50IG51bWJlclxuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gY2FuIHNwZWNpZnkgYSBmaXhlZCBwcmVjaXNpb24sIG1pbiwgbWF4XG4gICAgICogIEByZXR1cm5zIHtOdW1iZXJ9IGEgc2luZ2xlIGZsb2F0aW5nIHBvaW50IG51bWJlclxuICAgICAqICBAdGhyb3dzIHtSYW5nZUVycm9yfSBDYW4gb25seSBzcGVjaWZ5IGZpeGVkIG9yIHByZWNpc2lvbiwgbm90IGJvdGguIEFsc29cbiAgICAgKiAgICBtaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhcbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLmZsb2F0aW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtmaXhlZCA6IDR9KTtcbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgb3B0aW9ucy5maXhlZCAmJiBvcHRpb25zLnByZWNpc2lvbixcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBDYW5ub3Qgc3BlY2lmeSBib3RoIGZpeGVkIGFuZCBwcmVjaXNpb24uXCJcbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgbnVtO1xuICAgICAgICB2YXIgZml4ZWQgPSBNYXRoLnBvdygxMCwgb3B0aW9ucy5maXhlZCk7XG5cbiAgICAgICAgdmFyIG1heCA9IE1BWF9JTlQgLyBmaXhlZDtcbiAgICAgICAgdmFyIG1pbiA9IC1tYXg7XG5cbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgb3B0aW9ucy5taW4gJiYgb3B0aW9ucy5maXhlZCAmJiBvcHRpb25zLm1pbiA8IG1pbixcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBNaW4gc3BlY2lmaWVkIGlzIG91dCBvZiByYW5nZSB3aXRoIGZpeGVkLiBNaW4gc2hvdWxkIGJlLCBhdCBsZWFzdCwgXCIgKyBtaW5cbiAgICAgICAgKTtcbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgb3B0aW9ucy5tYXggJiYgb3B0aW9ucy5maXhlZCAmJiBvcHRpb25zLm1heCA+IG1heCxcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBNYXggc3BlY2lmaWVkIGlzIG91dCBvZiByYW5nZSB3aXRoIGZpeGVkLiBNYXggc2hvdWxkIGJlLCBhdCBtb3N0LCBcIiArIG1heFxuICAgICAgICApO1xuXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IG1pbiA6IG1pbiwgbWF4IDogbWF4IH0pO1xuXG4gICAgICAgIC8vIFRvZG8gLSBNYWtlIHRoaXMgd29yayFcbiAgICAgICAgLy8gb3B0aW9ucy5wcmVjaXNpb24gPSAodHlwZW9mIG9wdGlvbnMucHJlY2lzaW9uICE9PSBcInVuZGVmaW5lZFwiKSA/IG9wdGlvbnMucHJlY2lzaW9uIDogZmFsc2U7XG5cbiAgICAgICAgbnVtID0gdGhpcy5pbnRlZ2VyKHttaW46IG9wdGlvbnMubWluICogZml4ZWQsIG1heDogb3B0aW9ucy5tYXggKiBmaXhlZH0pO1xuICAgICAgICB2YXIgbnVtX2ZpeGVkID0gKG51bSAvIGZpeGVkKS50b0ZpeGVkKG9wdGlvbnMuZml4ZWQpO1xuXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG51bV9maXhlZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBSZXR1cm4gYSByYW5kb20gaW50ZWdlclxuICAgICAqXG4gICAgICogIE5PVEUgdGhlIG1heCBhbmQgbWluIGFyZSBJTkNMVURFRCBpbiB0aGUgcmFuZ2UuIFNvOlxuICAgICAqICBjaGFuY2UuaW50ZWdlcih7bWluOiAxLCBtYXg6IDN9KTtcbiAgICAgKiAgd291bGQgcmV0dXJuIGVpdGhlciAxLCAyLCBvciAzLlxuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gY2FuIHNwZWNpZnkgYSBtaW4gYW5kL29yIG1heFxuICAgICAqICBAcmV0dXJucyB7TnVtYmVyfSBhIHNpbmdsZSByYW5kb20gaW50ZWdlciBudW1iZXJcbiAgICAgKiAgQHRocm93cyB7UmFuZ2VFcnJvcn0gbWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4XG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5pbnRlZ2VyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gOTAwNzE5OTI1NDc0MDk5MiAoMl41MykgaXMgdGhlIG1heCBpbnRlZ2VyIG51bWJlciBpbiBKYXZhU2NyaXB0XG4gICAgICAgIC8vIFNlZTogaHR0cDovL3ZxLmlvLzEzMnNhMmpcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttaW46IE1JTl9JTlQsIG1heDogTUFYX0lOVH0pO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPiBvcHRpb25zLm1heCwgXCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heC5cIik7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5yYW5kb20oKSAqIChvcHRpb25zLm1heCAtIG9wdGlvbnMubWluICsgMSkgKyBvcHRpb25zLm1pbik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBSZXR1cm4gYSByYW5kb20gbmF0dXJhbFxuICAgICAqXG4gICAgICogIE5PVEUgdGhlIG1heCBhbmQgbWluIGFyZSBJTkNMVURFRCBpbiB0aGUgcmFuZ2UuIFNvOlxuICAgICAqICBjaGFuY2UubmF0dXJhbCh7bWluOiAxLCBtYXg6IDN9KTtcbiAgICAgKiAgd291bGQgcmV0dXJuIGVpdGhlciAxLCAyLCBvciAzLlxuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gY2FuIHNwZWNpZnkgYSBtaW4gYW5kL29yIG1heFxuICAgICAqICBAcmV0dXJucyB7TnVtYmVyfSBhIHNpbmdsZSByYW5kb20gaW50ZWdlciBudW1iZXJcbiAgICAgKiAgQHRocm93cyB7UmFuZ2VFcnJvcn0gbWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4XG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uYXR1cmFsID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttaW46IDAsIG1heDogTUFYX0lOVH0pO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPCAwLCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyby5cIik7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVnZXIob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBSZXR1cm4gYSByYW5kb20gc3RyaW5nXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBjYW4gc3BlY2lmeSBhIGxlbmd0aFxuICAgICAqICBAcmV0dXJucyB7U3RyaW5nfSBhIHN0cmluZyBvZiByYW5kb20gbGVuZ3RoXG4gICAgICogIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGxlbmd0aCBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm9cbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IGxlbmd0aDogdGhpcy5uYXR1cmFsKHttaW46IDUsIG1heDogMjB9KSB9KTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubGVuZ3RoIDwgMCwgXCJDaGFuY2U6IExlbmd0aCBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8uXCIpO1xuICAgICAgICB2YXIgbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgICB0ZXh0ID0gdGhpcy5uKHRoaXMuY2hhcmFjdGVyLCBsZW5ndGgsIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0ZXh0LmpvaW4oXCJcIik7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBCYXNpY3MgLS1cblxuICAgIC8vIC0tIEhlbHBlcnMgLS1cblxuICAgIENoYW5jZS5wcm90b3R5cGUuY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zdWJzdHIoMSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubWl4aW4gPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGZvciAodmFyIGZ1bmNfbmFtZSBpbiBvYmopIHtcbiAgICAgICAgICAgIENoYW5jZS5wcm90b3R5cGVbZnVuY19uYW1lXSA9IG9ialtmdW5jX25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgR2l2ZW4gYSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBzb21ldGhpbmcgcmFuZG9tIGFuZCBhIG51bWJlciBvZiBpdGVtcyB0byBnZW5lcmF0ZSxcbiAgICAgKiAgICByZXR1cm4gYW4gYXJyYXkgb2YgaXRlbXMgd2hlcmUgbm9uZSByZXBlYXQuXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhlIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHNvbWV0aGluZyByYW5kb21cbiAgICAgKiAgQHBhcmFtIHtOdW1iZXJ9IG51bSBudW1iZXIgb2YgdGVybXMgdG8gZ2VuZXJhdGVcbiAgICAgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYW55IG9wdGlvbnMgdG8gcGFzcyBvbiB0byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uXG4gICAgICogIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgbGVuZ3RoIGBudW1gIHdpdGggZXZlcnkgaXRlbSBnZW5lcmF0ZWQgYnkgYGZuYCBhbmQgdW5pcXVlXG4gICAgICpcbiAgICAgKiAgVGhlcmUgY2FuIGJlIG1vcmUgcGFyYW1ldGVycyBhZnRlciB0aGVzZS4gQWxsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQgdG8gdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS51bmlxdWUgPSBmdW5jdGlvbihmbiwgbnVtLCBvcHRpb25zKSB7XG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgXCJDaGFuY2U6IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24uXCJcbiAgICAgICAgKTtcblxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge1xuICAgICAgICAgICAgLy8gRGVmYXVsdCBjb21wYXJhdG9yIHRvIGNoZWNrIHRoYXQgdmFsIGlzIG5vdCBhbHJlYWR5IGluIGFyci5cbiAgICAgICAgICAgIC8vIFNob3VsZCByZXR1cm4gYGZhbHNlYCBpZiBpdGVtIG5vdCBpbiBhcnJheSwgYHRydWVgIG90aGVyd2lzZVxuICAgICAgICAgICAgY29tcGFyYXRvcjogZnVuY3Rpb24oYXJyLCB2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBhcnIgPSBbXSwgY291bnQgPSAwLCByZXN1bHQsIE1BWF9EVVBMSUNBVEVTID0gbnVtICogNTAsIHBhcmFtcyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcblxuICAgICAgICB3aGlsZSAoYXJyLmxlbmd0aCA8IG51bSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZm4uYXBwbHkodGhpcywgcGFyYW1zKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5jb21wYXJhdG9yKGFyciwgcmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY291bnQgd2hlbiB1bmlxdWUgZm91bmRcbiAgICAgICAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgrK2NvdW50ID4gTUFYX0RVUExJQ0FURVMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNoYW5jZTogbnVtIGlzIGxpa2VseSB0b28gbGFyZ2UgZm9yIHNhbXBsZSBzZXRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIEdpdmVzIGFuIGFycmF5IG9mIG4gcmFuZG9tIHRlcm1zXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhlIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHNvbWV0aGluZyByYW5kb21cbiAgICAgKiAgQHBhcmFtIHtOdW1iZXJ9IG4gbnVtYmVyIG9mIHRlcm1zIHRvIGdlbmVyYXRlXG4gICAgICogIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgbGVuZ3RoIGBuYCB3aXRoIGl0ZW1zIGdlbmVyYXRlZCBieSBgZm5gXG4gICAgICpcbiAgICAgKiAgVGhlcmUgY2FuIGJlIG1vcmUgcGFyYW1ldGVycyBhZnRlciB0aGVzZS4gQWxsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQgdG8gdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uID0gZnVuY3Rpb24oZm4sIG4pIHtcbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgdHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICBcIkNoYW5jZTogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbi5cIlxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG4gPSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpID0gbiwgYXJyID0gW10sIHBhcmFtcyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcblxuICAgICAgICAvLyBQcm92aWRpbmcgYSBuZWdhdGl2ZSBjb3VudCBzaG91bGQgcmVzdWx0IGluIGEgbm9vcC5cbiAgICAgICAgaSA9IE1hdGgubWF4KCAwLCBpICk7XG5cbiAgICAgICAgZm9yIChudWxsOyBpLS07IG51bGwpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKGZuLmFwcGx5KHRoaXMsIHBhcmFtcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuXG4gICAgLy8gSC9UIHRvIFNPIGZvciB0aGlzIG9uZTogaHR0cDovL3ZxLmlvL090VXJaNVxuICAgIENoYW5jZS5wcm90b3R5cGUucGFkID0gZnVuY3Rpb24gKG51bWJlciwgd2lkdGgsIHBhZCkge1xuICAgICAgICAvLyBEZWZhdWx0IHBhZCB0byAwIGlmIG5vbmUgcHJvdmlkZWRcbiAgICAgICAgcGFkID0gcGFkIHx8ICcwJztcbiAgICAgICAgLy8gQ29udmVydCBudW1iZXIgdG8gYSBzdHJpbmdcbiAgICAgICAgbnVtYmVyID0gbnVtYmVyICsgJyc7XG4gICAgICAgIHJldHVybiBudW1iZXIubGVuZ3RoID49IHdpZHRoID8gbnVtYmVyIDogbmV3IEFycmF5KHdpZHRoIC0gbnVtYmVyLmxlbmd0aCArIDEpLmpvaW4ocGFkKSArIG51bWJlcjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5waWNrID0gZnVuY3Rpb24gKGFyciwgY291bnQpIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2hhbmNlOiBDYW5ub3QgcGljaygpIGZyb20gYW4gZW1wdHkgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb3VudCB8fCBjb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyclt0aGlzLm5hdHVyYWwoe21heDogYXJyLmxlbmd0aCAtIDF9KV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaHVmZmxlKGFycikuc2xpY2UoMCwgY291bnQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc2h1ZmZsZSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgdmFyIG9sZF9hcnJheSA9IGFyci5zbGljZSgwKSxcbiAgICAgICAgICAgIG5ld19hcnJheSA9IFtdLFxuICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICBsZW5ndGggPSBOdW1iZXIob2xkX2FycmF5Lmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gUGljayBhIHJhbmRvbSBpbmRleCBmcm9tIHRoZSBhcnJheVxuICAgICAgICAgICAgaiA9IHRoaXMubmF0dXJhbCh7bWF4OiBvbGRfYXJyYXkubGVuZ3RoIC0gMX0pO1xuICAgICAgICAgICAgLy8gQWRkIGl0IHRvIHRoZSBuZXcgYXJyYXlcbiAgICAgICAgICAgIG5ld19hcnJheVtpXSA9IG9sZF9hcnJheVtqXTtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGF0IGVsZW1lbnQgZnJvbSB0aGUgb3JpZ2luYWwgYXJyYXlcbiAgICAgICAgICAgIG9sZF9hcnJheS5zcGxpY2UoaiwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3X2FycmF5O1xuICAgIH07XG5cbiAgICAvLyBSZXR1cm5zIGEgc2luZ2xlIGl0ZW0gZnJvbSBhbiBhcnJheSB3aXRoIHJlbGF0aXZlIHdlaWdodGluZyBvZiBvZGRzXG4gICAgQ2hhbmNlLnByb3RvdHlwZS53ZWlnaHRlZCA9IGZ1bmN0aW9uKGFyciwgd2VpZ2h0cykge1xuICAgICAgICBpZiAoYXJyLmxlbmd0aCAhPT0gd2VpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2hhbmNlOiBsZW5ndGggb2YgYXJyYXkgYW5kIHdlaWdodHMgbXVzdCBtYXRjaFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSB3ZWlnaHRzIHRoYXQgYXJlIGxlc3Mgb3IgZXF1YWwgdG8gemVyby5cbiAgICAgICAgZm9yICh2YXIgd2VpZ2h0SW5kZXggPSB3ZWlnaHRzLmxlbmd0aCAtIDE7IHdlaWdodEluZGV4ID49IDA7IC0td2VpZ2h0SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB3ZWlnaHQgaXMgbGVzcyBvciBlcXVhbCB0byB6ZXJvLCByZW1vdmUgaXQgYW5kIHRoZSB2YWx1ZS5cbiAgICAgICAgICAgIGlmICh3ZWlnaHRzW3dlaWdodEluZGV4XSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZSh3ZWlnaHRJbmRleCwxKTtcbiAgICAgICAgICAgICAgICB3ZWlnaHRzLnNwbGljZSh3ZWlnaHRJbmRleCwxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGFueSBvZiB0aGUgd2VpZ2h0cyBhcmUgbGVzcyB0aGFuIDEsIHdlIHdhbnQgdG8gc2NhbGUgdGhlbSB1cCB0byB3aG9sZVxuICAgICAgICAvLyAgIG51bWJlcnMgZm9yIHRoZSByZXN0IG9mIHRoaXMgbG9naWMgdG8gd29ya1xuICAgICAgICBpZiAod2VpZ2h0cy5zb21lKGZ1bmN0aW9uKHdlaWdodCkgeyByZXR1cm4gd2VpZ2h0IDwgMTsgfSkpIHtcbiAgICAgICAgICAgIHZhciBtaW4gPSB3ZWlnaHRzLnJlZHVjZShmdW5jdGlvbihtaW4sIHdlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAod2VpZ2h0IDwgbWluKSA/IHdlaWdodCA6IG1pbjtcbiAgICAgICAgICAgIH0sIHdlaWdodHNbMF0pO1xuXG4gICAgICAgICAgICB2YXIgc2NhbGluZ19mYWN0b3IgPSAxIC8gbWluO1xuXG4gICAgICAgICAgICB3ZWlnaHRzID0gd2VpZ2h0cy5tYXAoZnVuY3Rpb24od2VpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdlaWdodCAqIHNjYWxpbmdfZmFjdG9yO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3VtID0gd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24odG90YWwsIHdlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRvdGFsICsgd2VpZ2h0O1xuICAgICAgICB9LCAwKTtcblxuICAgICAgICAvLyBnZXQgYW4gaW5kZXhcbiAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5uYXR1cmFsKHsgbWluOiAxLCBtYXg6IHN1bSB9KTtcblxuICAgICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgICB2YXIgY2hvc2VuO1xuICAgICAgICAvLyBVc2luZyBzb21lKCkgaGVyZSBzbyB3ZSBjYW4gYmFpbCBhcyBzb29uIGFzIHdlIGdldCBvdXIgbWF0Y2hcbiAgICAgICAgd2VpZ2h0cy5zb21lKGZ1bmN0aW9uKHdlaWdodCwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCA8PSB0b3RhbCArIHdlaWdodCkge1xuICAgICAgICAgICAgICAgIGNob3NlbiA9IGFycltpbmRleF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjaG9zZW47XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBIZWxwZXJzIC0tXG5cbiAgICAvLyAtLSBUZXh0IC0tXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBhcmFncmFwaCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgc2VudGVuY2VzID0gb3B0aW9ucy5zZW50ZW5jZXMgfHwgdGhpcy5uYXR1cmFsKHttaW46IDMsIG1heDogN30pLFxuICAgICAgICAgICAgc2VudGVuY2VfYXJyYXkgPSB0aGlzLm4odGhpcy5zZW50ZW5jZSwgc2VudGVuY2VzKTtcblxuICAgICAgICByZXR1cm4gc2VudGVuY2VfYXJyYXkuam9pbignICcpO1xuICAgIH07XG5cbiAgICAvLyBDb3VsZCBnZXQgc21hcnRlciBhYm91dCB0aGlzIHRoYW4gZ2VuZXJhdGluZyByYW5kb20gd29yZHMgYW5kXG4gICAgLy8gY2hhaW5pbmcgdGhlbSB0b2dldGhlci4gU3VjaCBhczogaHR0cDovL3ZxLmlvLzFhNWNlT2hcbiAgICBDaGFuY2UucHJvdG90eXBlLnNlbnRlbmNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciB3b3JkcyA9IG9wdGlvbnMud29yZHMgfHwgdGhpcy5uYXR1cmFsKHttaW46IDEyLCBtYXg6IDE4fSksXG4gICAgICAgICAgICBwdW5jdHVhdGlvbiA9IG9wdGlvbnMucHVuY3R1YXRpb24sXG4gICAgICAgICAgICB0ZXh0LCB3b3JkX2FycmF5ID0gdGhpcy5uKHRoaXMud29yZCwgd29yZHMpO1xuXG4gICAgICAgIHRleHQgPSB3b3JkX2FycmF5LmpvaW4oJyAnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENhcGl0YWxpemUgZmlyc3QgbGV0dGVyIG9mIHNlbnRlbmNlXG4gICAgICAgIHRleHQgPSB0aGlzLmNhcGl0YWxpemUodGV4dCk7XG4gICAgICAgIFxuICAgICAgICAvLyBNYWtlIHN1cmUgcHVuY3R1YXRpb24gaGFzIGEgdXNhYmxlIHZhbHVlXG4gICAgICAgIGlmIChwdW5jdHVhdGlvbiAhPT0gZmFsc2UgJiYgIS9eW1xcLlxcPzshOl0kLy50ZXN0KHB1bmN0dWF0aW9uKSkge1xuICAgICAgICAgICAgcHVuY3R1YXRpb24gPSAnLic7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEFkZCBwdW5jdHVhdGlvbiBtYXJrXG4gICAgICAgIGlmIChwdW5jdHVhdGlvbikge1xuICAgICAgICAgICAgdGV4dCArPSBwdW5jdHVhdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN5bGxhYmxlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBsZW5ndGggPSBvcHRpb25zLmxlbmd0aCB8fCB0aGlzLm5hdHVyYWwoe21pbjogMiwgbWF4OiAzfSksXG4gICAgICAgICAgICBjb25zb25hbnRzID0gJ2JjZGZnaGprbG1ucHJzdHZ3eicsIC8vIGNvbnNvbmFudHMgZXhjZXB0IGhhcmQgdG8gc3BlYWsgb25lc1xuICAgICAgICAgICAgdm93ZWxzID0gJ2FlaW91JywgLy8gdm93ZWxzXG4gICAgICAgICAgICBhbGwgPSBjb25zb25hbnRzICsgdm93ZWxzLCAvLyBhbGxcbiAgICAgICAgICAgIHRleHQgPSAnJyxcbiAgICAgICAgICAgIGNocjtcblxuICAgICAgICAvLyBJJ20gc3VyZSB0aGVyZSdzIGEgbW9yZSBlbGVnYW50IHdheSB0byBkbyB0aGlzLCBidXQgdGhpcyB3b3Jrc1xuICAgICAgICAvLyBkZWNlbnRseSB3ZWxsLlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIEZpcnN0IGNoYXJhY3RlciBjYW4gYmUgYW55dGhpbmdcbiAgICAgICAgICAgICAgICBjaHIgPSB0aGlzLmNoYXJhY3Rlcih7cG9vbDogYWxsfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnNvbmFudHMuaW5kZXhPZihjaHIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIExhc3QgY2hhcmFjdGVyIHdhcyBhIHZvd2VsLCBub3cgd2Ugd2FudCBhIGNvbnNvbmFudFxuICAgICAgICAgICAgICAgIGNociA9IHRoaXMuY2hhcmFjdGVyKHtwb29sOiBjb25zb25hbnRzfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIExhc3QgY2hhcmFjdGVyIHdhcyBhIGNvbnNvbmFudCwgbm93IHdlIHdhbnQgYSB2b3dlbFxuICAgICAgICAgICAgICAgIGNociA9IHRoaXMuY2hhcmFjdGVyKHtwb29sOiB2b3dlbHN9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGV4dCArPSBjaHI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS53b3JkID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIG9wdGlvbnMuc3lsbGFibGVzICYmIG9wdGlvbnMubGVuZ3RoLFxuICAgICAgICAgICAgXCJDaGFuY2U6IENhbm5vdCBzcGVjaWZ5IGJvdGggc3lsbGFibGVzIEFORCBsZW5ndGguXCJcbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgc3lsbGFibGVzID0gb3B0aW9ucy5zeWxsYWJsZXMgfHwgdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogM30pLFxuICAgICAgICAgICAgdGV4dCA9ICcnO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRWl0aGVyIGJvdW5kIHdvcmQgYnkgbGVuZ3RoXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSB0aGlzLnN5bGxhYmxlKCk7XG4gICAgICAgICAgICB9IHdoaWxlICh0ZXh0Lmxlbmd0aCA8IG9wdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBvcHRpb25zLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBPciBieSBudW1iZXIgb2Ygc3lsbGFibGVzXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bGxhYmxlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSB0aGlzLnN5bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBUZXh0IC0tXG5cbiAgICAvLyAtLSBQZXJzb24gLS1cblxuICAgIENoYW5jZS5wcm90b3R5cGUuYWdlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgYWdlUmFuZ2U7XG5cbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2NoaWxkJzpcbiAgICAgICAgICAgICAgICBhZ2VSYW5nZSA9IHttaW46IDEsIG1heDogMTJ9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGVlbic6XG4gICAgICAgICAgICAgICAgYWdlUmFuZ2UgPSB7bWluOiAxMywgbWF4OiAxOX07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZHVsdCc6XG4gICAgICAgICAgICAgICAgYWdlUmFuZ2UgPSB7bWluOiAxOCwgbWF4OiA2NX07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZW5pb3InOlxuICAgICAgICAgICAgICAgIGFnZVJhbmdlID0ge21pbjogNjUsIG1heDogMTAwfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgICAgICAgICAgYWdlUmFuZ2UgPSB7bWluOiAxLCBtYXg6IDEwMH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFnZVJhbmdlID0ge21pbjogMTgsIG1heDogNjV9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbChhZ2VSYW5nZSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuYmlydGhkYXkgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge1xuICAgICAgICAgICAgeWVhcjogKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIHRoaXMuYWdlKG9wdGlvbnMpKVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICAvLyBDUEY7IElEIHRvIGlkZW50aWZ5IHRheHBheWVycyBpbiBCcmF6aWxcbiAgICBDaGFuY2UucHJvdG90eXBlLmNwZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLm4odGhpcy5uYXR1cmFsLCA5LCB7IG1heDogOSB9KTtcbiAgICAgICAgdmFyIGQxID0gbls4XSoyK25bN10qMytuWzZdKjQrbls1XSo1K25bNF0qNituWzNdKjcrblsyXSo4K25bMV0qOStuWzBdKjEwO1xuICAgICAgICBkMSA9IDExIC0gKGQxICUgMTEpO1xuICAgICAgICBpZiAoZDE+PTEwKSB7XG4gICAgICAgICAgICBkMSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGQyID0gZDEqMituWzhdKjMrbls3XSo0K25bNl0qNStuWzVdKjYrbls0XSo3K25bM10qOCtuWzJdKjkrblsxXSoxMCtuWzBdKjExO1xuICAgICAgICBkMiA9IDExIC0gKGQyICUgMTEpO1xuICAgICAgICBpZiAoZDI+PTEwKSB7XG4gICAgICAgICAgICBkMiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnK25bMF0rblsxXStuWzJdKycuJytuWzNdK25bNF0rbls1XSsnLicrbls2XStuWzddK25bOF0rJy0nK2QxK2QyO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmZpcnN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtnZW5kZXI6IHRoaXMuZ2VuZGVyKCl9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGljayh0aGlzLmdldChcImZpcnN0TmFtZXNcIilbb3B0aW9ucy5nZW5kZXIudG9Mb3dlckNhc2UoKV0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmdlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGljayhbJ01hbGUnLCAnRmVtYWxlJ10pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmxhc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy5nZXQoXCJsYXN0TmFtZXNcIikpO1xuICAgIH07XG4gICAgXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5pc3JhZWxJZD1mdW5jdGlvbigpe1xuICAgICAgICB2YXIgeD10aGlzLnN0cmluZyh7cG9vbDogJzAxMjM0NTY3ODknLGxlbmd0aDo4fSk7XG4gICAgICAgIHZhciB5PTA7XG4gICAgICAgIGZvciAodmFyIGk9MDtpPHgubGVuZ3RoO2krKyl7XG4gICAgICAgICAgICB2YXIgdGhpc0RpZ2l0PSAgeFtpXSAqICAoaS8yPT09cGFyc2VJbnQoaS8yKSA/IDEgOiAyKTtcbiAgICAgICAgICAgIHRoaXNEaWdpdD10aGlzLnBhZCh0aGlzRGlnaXQsMikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXNEaWdpdD1wYXJzZUludCh0aGlzRGlnaXRbMF0pICsgcGFyc2VJbnQodGhpc0RpZ2l0WzFdKTtcbiAgICAgICAgICAgIHk9eSt0aGlzRGlnaXQ7XG4gICAgICAgIH1cbiAgICAgICAgeD14KygxMC1wYXJzZUludCh5LnRvU3RyaW5nKCkuc2xpY2UoLTEpKSkudG9TdHJpbmcoKS5zbGljZSgtMSk7XG4gICAgICAgIHJldHVybiB4O1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm1yeiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciBjaGVja0RpZ2l0ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICB2YXIgYWxwaGEgPSBcIjxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWFpcIi5zcGxpdCgnJyksXG4gICAgICAgICAgICAgICAgbXVsdGlwbGllcnMgPSBbIDcsIDMsIDEgXSxcbiAgICAgICAgICAgICAgICBydW5uaW5nVG90YWwgPSAwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5wdXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24oY2hhcmFjdGVyLCBpZHgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gYWxwaGEuaW5kZXhPZihjaGFyYWN0ZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYocG9zICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBwb3MgPT09IDAgPyAwIDogcG9zICsgOTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBwYXJzZUludChjaGFyYWN0ZXIsIDEwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyICo9IG11bHRpcGxpZXJzW2lkeCAlIG11bHRpcGxpZXJzLmxlbmd0aF07XG4gICAgICAgICAgICAgICAgcnVubmluZ1RvdGFsICs9IGNoYXJhY3RlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJ1bm5pbmdUb3RhbCAlIDEwO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2VuZXJhdGUgPSBmdW5jdGlvbiAob3B0cykge1xuICAgICAgICAgICAgdmFyIHBhZCA9IGZ1bmN0aW9uIChsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5KGxlbmd0aCArIDEpLmpvaW4oJzwnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gWyAnUDwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5pc3N1ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmxhc3QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICc8PCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpcnN0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQoMzkgLSAob3B0cy5sYXN0Lmxlbmd0aCArIG9wdHMuZmlyc3QubGVuZ3RoICsgMikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5wYXNzcG9ydE51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRGlnaXQob3B0cy5wYXNzcG9ydE51bWJlciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLm5hdGlvbmFsaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5kb2IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0RpZ2l0KG9wdHMuZG9iKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZ2VuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5leHBpcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0RpZ2l0KG9wdHMuZXhwaXJ5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCgxNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0RpZ2l0KHBhZCgxNCkpIF0uam9pbignJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChjaGVja0RpZ2l0KG51bWJlci5zdWJzdHIoNDQsIDEwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLnN1YnN0cig1NywgNykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlci5zdWJzdHIoNjUsIDcpKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICAgICAgICBmaXJzdDogdGhpcy5maXJzdCgpLFxuICAgICAgICAgICAgbGFzdDogdGhpcy5sYXN0KCksXG4gICAgICAgICAgICBwYXNzcG9ydE51bWJlcjogdGhpcy5pbnRlZ2VyKHttaW46IDEwMDAwMDAwMCwgbWF4OiA5OTk5OTk5OTl9KSxcbiAgICAgICAgICAgIGRvYjogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IHRoYXQuYmlydGhkYXkoe3R5cGU6ICdhZHVsdCd9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2RhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnN1YnN0cigyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQucGFkKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5wYWQoZGF0ZS5nZXREYXRlKCksIDIpXS5qb2luKCcnKTtcbiAgICAgICAgICAgIH0oKSksXG4gICAgICAgICAgICBleHBpcnk6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbKGRhdGUuZ2V0RnVsbFllYXIoKSArIDUpLnRvU3RyaW5nKCkuc3Vic3RyKDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5wYWQoZGF0ZS5nZXRNb250aCgpICsgMSwgMiksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnBhZChkYXRlLmdldERhdGUoKSwgMildLmpvaW4oJycpO1xuICAgICAgICAgICAgfSgpKSxcbiAgICAgICAgICAgIGdlbmRlcjogdGhpcy5nZW5kZXIoKSA9PT0gJ0ZlbWFsZScgPyAnRic6ICdNJyxcbiAgICAgICAgICAgIGlzc3VlcjogJ0dCUicsXG4gICAgICAgICAgICBuYXRpb25hbGl0eTogJ0dCUidcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBnZW5lcmF0ZSAob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgZmlyc3QgPSB0aGlzLmZpcnN0KG9wdGlvbnMpLFxuICAgICAgICAgICAgbGFzdCA9IHRoaXMubGFzdCgpLFxuICAgICAgICAgICAgbmFtZTtcblxuICAgICAgICBpZiAob3B0aW9ucy5taWRkbGUpIHtcbiAgICAgICAgICAgIG5hbWUgPSBmaXJzdCArICcgJyArIHRoaXMuZmlyc3Qob3B0aW9ucykgKyAnICcgKyBsYXN0O1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubWlkZGxlX2luaXRpYWwpIHtcbiAgICAgICAgICAgIG5hbWUgPSBmaXJzdCArICcgJyArIHRoaXMuY2hhcmFjdGVyKHthbHBoYTogdHJ1ZSwgY2FzaW5nOiAndXBwZXInfSkgKyAnLiAnICsgbGFzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUgPSBmaXJzdCArICcgJyArIGxhc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXgpIHtcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnByZWZpeChvcHRpb25zKSArICcgJyArIG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zdWZmaXgpIHtcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgJyAnICsgdGhpcy5zdWZmaXgob3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9O1xuXG4gICAgLy8gUmV0dXJuIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBuYW1lIHByZWZpeGVzIGJhc2VkIG9uIHN1cHBsaWVkIGdlbmRlci5cbiAgICBDaGFuY2UucHJvdG90eXBlLm5hbWVfcHJlZml4ZXMgPSBmdW5jdGlvbiAoZ2VuZGVyKSB7XG4gICAgICAgIGdlbmRlciA9IGdlbmRlciB8fCBcImFsbFwiO1xuICAgICAgICBnZW5kZXIgPSBnZW5kZXIudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICB2YXIgcHJlZml4ZXMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6ICdEb2N0b3InLCBhYmJyZXZpYXRpb246ICdEci4nIH1cbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZ2VuZGVyID09PSBcIm1hbGVcIiB8fCBnZW5kZXIgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgICAgIHByZWZpeGVzLnB1c2goeyBuYW1lOiAnTWlzdGVyJywgYWJicmV2aWF0aW9uOiAnTXIuJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnZW5kZXIgPT09IFwiZmVtYWxlXCIgfHwgZ2VuZGVyID09PSBcImFsbFwiKSB7XG4gICAgICAgICAgICBwcmVmaXhlcy5wdXNoKHsgbmFtZTogJ01pc3MnLCBhYmJyZXZpYXRpb246ICdNaXNzJyB9KTtcbiAgICAgICAgICAgIHByZWZpeGVzLnB1c2goeyBuYW1lOiAnTWlzc2VzJywgYWJicmV2aWF0aW9uOiAnTXJzLicgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJlZml4ZXM7XG4gICAgfTtcblxuICAgIC8vIEFsaWFzIGZvciBuYW1lX3ByZWZpeFxuICAgIENoYW5jZS5wcm90b3R5cGUucHJlZml4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZV9wcmVmaXgob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubmFtZV9wcmVmaXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyBnZW5kZXI6IFwiYWxsXCIgfSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZ1bGwgP1xuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMubmFtZV9wcmVmaXhlcyhvcHRpb25zLmdlbmRlcikpLm5hbWUgOlxuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMubmFtZV9wcmVmaXhlcyhvcHRpb25zLmdlbmRlcikpLmFiYnJldmlhdGlvbjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zc24gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge3NzbkZvdXI6IGZhbHNlLCBkYXNoZXM6IHRydWV9KTtcbiAgICAgICAgdmFyIHNzbl9wb29sID0gXCIxMjM0NTY3ODkwXCIsXG4gICAgICAgICAgICBzc24sXG4gICAgICAgICAgICBkYXNoID0gb3B0aW9ucy5kYXNoZXMgPyAnLScgOiAnJztcblxuICAgICAgICBpZighb3B0aW9ucy5zc25Gb3VyKSB7XG4gICAgICAgICAgICBzc24gPSB0aGlzLnN0cmluZyh7cG9vbDogc3NuX3Bvb2wsIGxlbmd0aDogM30pICsgZGFzaCArXG4gICAgICAgICAgICB0aGlzLnN0cmluZyh7cG9vbDogc3NuX3Bvb2wsIGxlbmd0aDogMn0pICsgZGFzaCArXG4gICAgICAgICAgICB0aGlzLnN0cmluZyh7cG9vbDogc3NuX3Bvb2wsIGxlbmd0aDogNH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3NuID0gdGhpcy5zdHJpbmcoe3Bvb2w6IHNzbl9wb29sLCBsZW5ndGg6IDR9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3NuO1xuICAgIH07XG5cbiAgICAvLyBSZXR1cm4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG5hbWUgc3VmZml4ZXNcbiAgICBDaGFuY2UucHJvdG90eXBlLm5hbWVfc3VmZml4ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdWZmaXhlcyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0RvY3RvciBvZiBPc3Rlb3BhdGhpYyBNZWRpY2luZScsIGFiYnJldmlhdGlvbjogJ0QuTy4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdEb2N0b3Igb2YgUGhpbG9zb3BoeScsIGFiYnJldmlhdGlvbjogJ1BoLkQuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnRXNxdWlyZScsIGFiYnJldmlhdGlvbjogJ0VzcS4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdKdW5pb3InLCBhYmJyZXZpYXRpb246ICdKci4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdKdXJpcyBEb2N0b3InLCBhYmJyZXZpYXRpb246ICdKLkQuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTWFzdGVyIG9mIEFydHMnLCBhYmJyZXZpYXRpb246ICdNLkEuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTWFzdGVyIG9mIEJ1c2luZXNzIEFkbWluaXN0cmF0aW9uJywgYWJicmV2aWF0aW9uOiAnTS5CLkEuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTWFzdGVyIG9mIFNjaWVuY2UnLCBhYmJyZXZpYXRpb246ICdNLlMuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTWVkaWNhbCBEb2N0b3InLCBhYmJyZXZpYXRpb246ICdNLkQuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnU2VuaW9yJywgYWJicmV2aWF0aW9uOiAnU3IuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnVGhlIFRoaXJkJywgYWJicmV2aWF0aW9uOiAnSUlJJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnVGhlIEZvdXJ0aCcsIGFiYnJldmlhdGlvbjogJ0lWJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQmFjaGVsb3Igb2YgRW5naW5lZXJpbmcnLCBhYmJyZXZpYXRpb246ICdCLkUnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCYWNoZWxvciBvZiBUZWNobm9sb2d5JywgYWJicmV2aWF0aW9uOiAnQi5URUNIJyB9XG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBzdWZmaXhlcztcbiAgICB9O1xuXG4gICAgLy8gQWxpYXMgZm9yIG5hbWVfc3VmZml4XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zdWZmaXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lX3N1ZmZpeChvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uYW1lX3N1ZmZpeCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZnVsbCA/XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5uYW1lX3N1ZmZpeGVzKCkpLm5hbWUgOlxuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMubmFtZV9zdWZmaXhlcygpKS5hYmJyZXZpYXRpb247XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBQZXJzb24gLS1cblxuICAgIC8vIC0tIE1vYmlsZSAtLVxuICAgIC8vIEFuZHJvaWQgR0NNIFJlZ2lzdHJhdGlvbiBJRFxuICAgIENoYW5jZS5wcm90b3R5cGUuYW5kcm9pZF9pZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiQVBBOTFcIiArIHRoaXMuc3RyaW5nKHsgcG9vbDogXCIwMTIzNDU2Nzg5YWJjZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIiwgbGVuZ3RoOiAxNzggfSk7XG4gICAgfTtcblxuICAgIC8vIEFwcGxlIFB1c2ggVG9rZW5cbiAgICBDaGFuY2UucHJvdG90eXBlLmFwcGxlX3Rva2VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcoeyBwb29sOiBcImFiY2RlZjEyMzQ1Njc4OTBcIiwgbGVuZ3RoOiA2NCB9KTtcbiAgICB9O1xuXG4gICAgLy8gV2luZG93cyBQaG9uZSA4IEFOSUQyXG4gICAgQ2hhbmNlLnByb3RvdHlwZS53cDhfYW5pZDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBiYXNlNjQoIHRoaXMuaGFzaCggeyBsZW5ndGggOiAzMiB9ICkgKTtcbiAgICB9O1xuXG4gICAgLy8gV2luZG93cyBQaG9uZSA3IEFOSURcbiAgICBDaGFuY2UucHJvdG90eXBlLndwN19hbmlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ0E9JyArIHRoaXMuZ3VpZCgpLnJlcGxhY2UoLy0vZywgJycpLnRvVXBwZXJDYXNlKCkgKyAnJkU9JyArIHRoaXMuaGFzaCh7IGxlbmd0aDozIH0pICsgJyZXPScgKyB0aGlzLmludGVnZXIoeyBtaW46MCwgbWF4OjkgfSk7XG4gICAgfTtcblxuICAgIC8vIEJsYWNrQmVycnkgRGV2aWNlIFBJTlxuICAgIENoYW5jZS5wcm90b3R5cGUuYmJfcGluID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNoKHsgbGVuZ3RoOiA4IH0pO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgTW9iaWxlIC0tXG5cbiAgICAvLyAtLSBXZWIgLS1cbiAgICBDaGFuY2UucHJvdG90eXBlLmF2YXRhciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciB1cmwgPSBudWxsO1xuICAgICAgICB2YXIgVVJMX0JBU0UgPSAnLy93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci8nO1xuICAgICAgICB2YXIgUFJPVE9DT0xTID0ge1xuICAgICAgICAgICAgaHR0cDogJ2h0dHAnLFxuICAgICAgICAgICAgaHR0cHM6ICdodHRwcydcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIEZJTEVfVFlQRVMgPSB7XG4gICAgICAgICAgICBibXA6ICdibXAnLFxuICAgICAgICAgICAgZ2lmOiAnZ2lmJyxcbiAgICAgICAgICAgIGpwZzogJ2pwZycsXG4gICAgICAgICAgICBwbmc6ICdwbmcnXG4gICAgICAgIH07XG4gICAgICAgIHZhciBGQUxMQkFDS1MgPSB7XG4gICAgICAgICAgICAnNDA0JzogJzQwNCcsIC8vIFJldHVybiA0MDQgaWYgbm90IGZvdW5kXG4gICAgICAgICAgICBtbTogJ21tJywgLy8gTXlzdGVyeSBtYW5cbiAgICAgICAgICAgIGlkZW50aWNvbjogJ2lkZW50aWNvbicsIC8vIEdlb21ldHJpYyBwYXR0ZXJuIGJhc2VkIG9uIGhhc2hcbiAgICAgICAgICAgIG1vbnN0ZXJpZDogJ21vbnN0ZXJpZCcsIC8vIEEgZ2VuZXJhdGVkIG1vbnN0ZXIgaWNvblxuICAgICAgICAgICAgd2F2YXRhcjogJ3dhdmF0YXInLCAvLyBBIGdlbmVyYXRlZCBmYWNlXG4gICAgICAgICAgICByZXRybzogJ3JldHJvJywgLy8gOC1iaXQgaWNvblxuICAgICAgICAgICAgYmxhbms6ICdibGFuaycgLy8gQSB0cmFuc3BhcmVudCBwbmdcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIFJBVElOR1MgPSB7XG4gICAgICAgICAgICBnOiAnZycsXG4gICAgICAgICAgICBwZzogJ3BnJyxcbiAgICAgICAgICAgIHI6ICdyJyxcbiAgICAgICAgICAgIHg6ICd4J1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHByb3RvY29sOiBudWxsLFxuICAgICAgICAgICAgZW1haWw6IG51bGwsXG4gICAgICAgICAgICBmaWxlRXh0ZW5zaW9uOiBudWxsLFxuICAgICAgICAgICAgc2l6ZTogbnVsbCxcbiAgICAgICAgICAgIGZhbGxiYWNrOiBudWxsLFxuICAgICAgICAgICAgcmF0aW5nOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBTZXQgdG8gYSByYW5kb20gZW1haWxcbiAgICAgICAgICAgIG9wdHMuZW1haWwgPSB0aGlzLmVtYWlsKCk7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBvcHRzLmVtYWlsID0gb3B0aW9ucztcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuY29uc3RydWN0b3IgPT09ICdBcnJheScpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0cyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIG9wdHMpO1xuXG4gICAgICAgIGlmICghb3B0cy5lbWFpbCkge1xuICAgICAgICAgICAgLy8gU2V0IHRvIGEgcmFuZG9tIGVtYWlsXG4gICAgICAgICAgICBvcHRzLmVtYWlsID0gdGhpcy5lbWFpbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2FmZSBjaGVja2luZyBmb3IgcGFyYW1zXG4gICAgICAgIG9wdHMucHJvdG9jb2wgPSBQUk9UT0NPTFNbb3B0cy5wcm90b2NvbF0gPyBvcHRzLnByb3RvY29sICsgJzonIDogJyc7XG4gICAgICAgIG9wdHMuc2l6ZSA9IHBhcnNlSW50KG9wdHMuc2l6ZSwgMCkgPyBvcHRzLnNpemUgOiAnJztcbiAgICAgICAgb3B0cy5yYXRpbmcgPSBSQVRJTkdTW29wdHMucmF0aW5nXSA/IG9wdHMucmF0aW5nIDogJyc7XG4gICAgICAgIG9wdHMuZmFsbGJhY2sgPSBGQUxMQkFDS1Nbb3B0cy5mYWxsYmFja10gPyBvcHRzLmZhbGxiYWNrIDogJyc7XG4gICAgICAgIG9wdHMuZmlsZUV4dGVuc2lvbiA9IEZJTEVfVFlQRVNbb3B0cy5maWxlRXh0ZW5zaW9uXSA/IG9wdHMuZmlsZUV4dGVuc2lvbiA6ICcnO1xuXG4gICAgICAgIHVybCA9XG4gICAgICAgICAgICBvcHRzLnByb3RvY29sICtcbiAgICAgICAgICAgIFVSTF9CQVNFICtcbiAgICAgICAgICAgIHRoaXMuYmltZDUubWQ1KG9wdHMuZW1haWwpICtcbiAgICAgICAgICAgIChvcHRzLmZpbGVFeHRlbnNpb24gPyAnLicgKyBvcHRzLmZpbGVFeHRlbnNpb24gOiAnJykgK1xuICAgICAgICAgICAgKG9wdHMuc2l6ZSB8fCBvcHRzLnJhdGluZyB8fCBvcHRzLmZhbGxiYWNrID8gJz8nIDogJycpICtcbiAgICAgICAgICAgIChvcHRzLnNpemUgPyAnJnM9JyArIG9wdHMuc2l6ZS50b1N0cmluZygpIDogJycpICtcbiAgICAgICAgICAgIChvcHRzLnJhdGluZyA/ICcmcj0nICsgb3B0cy5yYXRpbmcgOiAnJykgK1xuICAgICAgICAgICAgKG9wdHMuZmFsbGJhY2sgPyAnJmQ9JyArIG9wdHMuZmFsbGJhY2sgOiAnJylcbiAgICAgICAgICAgIDtcblxuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNvbG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgZnVuY3Rpb24gZ3JheSh2YWx1ZSwgZGVsaW1pdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZhbHVlLCB2YWx1ZSwgdmFsdWVdLmpvaW4oZGVsaW1pdGVyIHx8ICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMucGljayhbJ2hleCcsICdzaG9ydGhleCcsICdyZ2InLCAncmdiYScsICcweCddKSxcbiAgICAgICAgICAgIGdyYXlzY2FsZTogZmFsc2UsXG4gICAgICAgICAgICBjYXNpbmc6ICdsb3dlcidcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGlzR3JheXNjYWxlID0gb3B0aW9ucy5ncmF5c2NhbGU7XG4gICAgICAgIHZhciBjb2xvclZhbHVlO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ2hleCcpIHtcbiAgICAgICAgICAgIGNvbG9yVmFsdWUgPSAnIycgKyAoaXNHcmF5c2NhbGUgPyBncmF5KHRoaXMuaGFzaCh7bGVuZ3RoOiAyfSkpIDogdGhpcy5oYXNoKHtsZW5ndGg6IDZ9KSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ3Nob3J0aGV4Jykge1xuICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICcjJyArIChpc0dyYXlzY2FsZSA/IGdyYXkodGhpcy5oYXNoKHtsZW5ndGg6IDF9KSkgOiB0aGlzLmhhc2goe2xlbmd0aDogM30pKTtcblxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAncmdiJykge1xuICAgICAgICAgICAgaWYgKGlzR3JheXNjYWxlKSB7XG4gICAgICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICdyZ2IoJyArIGdyYXkodGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pLCAnLCcpICsgJyknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvclZhbHVlID0gJ3JnYignICsgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJywnICsgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJywnICsgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJyknO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAncmdiYScpIHtcbiAgICAgICAgICAgIGlmIChpc0dyYXlzY2FsZSkge1xuICAgICAgICAgICAgICAgIGNvbG9yVmFsdWUgPSAncmdiYSgnICsgZ3JheSh0aGlzLm5hdHVyYWwoe21heDogMjU1fSksICcsJykgKyAnLCcgKyB0aGlzLmZsb2F0aW5nKHttaW46MCwgbWF4OjF9KSArICcpJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICdyZ2JhKCcgKyB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLCcgKyB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLCcgKyB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLCcgKyB0aGlzLmZsb2F0aW5nKHttaW46MCwgbWF4OjF9KSArICcpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJzB4Jykge1xuICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICcweCcgKyAoaXNHcmF5c2NhbGUgPyBncmF5KHRoaXMuaGFzaCh7bGVuZ3RoOiAyfSkpIDogdGhpcy5oYXNoKHtsZW5ndGg6IDZ9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBmb3JtYXQgcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIG9uZSBvZiBcImhleFwiLCBcInNob3J0aGV4XCIsIFwicmdiXCIsIFwicmdiYVwiLCBvciBcIjB4XCIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jYXNpbmcgPT09ICd1cHBlcicgKSB7XG4gICAgICAgICAgICBjb2xvclZhbHVlID0gY29sb3JWYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbG9yVmFsdWU7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZG9tYWluID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy53b3JkKCkgKyAnLicgKyAob3B0aW9ucy50bGQgfHwgdGhpcy50bGQoKSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZW1haWwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmQoe2xlbmd0aDogb3B0aW9ucy5sZW5ndGh9KSArICdAJyArIChvcHRpb25zLmRvbWFpbiB8fCB0aGlzLmRvbWFpbigpKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5mYmlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoJzEwMDAwJyArIHRoaXMubmF0dXJhbCh7bWF4OiAxMDAwMDAwMDAwMDB9KSwgMTApO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmdvb2dsZV9hbmFseXRpY3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhY2NvdW50ID0gdGhpcy5wYWQodGhpcy5uYXR1cmFsKHttYXg6IDk5OTk5OX0pLCA2KTtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYWQodGhpcy5uYXR1cmFsKHttYXg6IDk5fSksIDIpO1xuXG4gICAgICAgIHJldHVybiAnVUEtJyArIGFjY291bnQgKyAnLScgKyBwcm9wZXJ0eTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5oYXNodGFnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJyMnICsgdGhpcy53b3JkKCk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuaXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRvZG86IFRoaXMgY291bGQgcmV0dXJuIHNvbWUgcmVzZXJ2ZWQgSVBzLiBTZWUgaHR0cDovL3ZxLmlvLzEzN2RnWXlcbiAgICAgICAgLy8gdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXBkYXRlZCB0byBhY2NvdW50IGZvciB0aGF0IHJhcmUgYXMgaXQgbWF5IGJlXG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLicgK1xuICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJy4nICtcbiAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcuJyArXG4gICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoe21heDogMjU1fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuaXB2NiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlwX2FkZHIgPSB0aGlzLm4odGhpcy5oYXNoLCA4LCB7bGVuZ3RoOiA0fSk7XG5cbiAgICAgICAgcmV0dXJuIGlwX2FkZHIuam9pbihcIjpcIik7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUua2xvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiA5OX0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnRsZHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbJ2NvbScsICdvcmcnLCAnZWR1JywgJ2dvdicsICdjby51aycsICduZXQnLCAnaW8nXTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS50bGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy50bGRzKCkpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnR3aXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnQCcgKyB0aGlzLndvcmQoKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS51cmwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyBwcm90b2NvbDogXCJodHRwXCIsIGRvbWFpbjogdGhpcy5kb21haW4ob3B0aW9ucyksIGRvbWFpbl9wcmVmaXg6IFwiXCIsIHBhdGg6IHRoaXMud29yZCgpLCBleHRlbnNpb25zOiBbXX0pO1xuXG4gICAgICAgIHZhciBleHRlbnNpb24gPSBvcHRpb25zLmV4dGVuc2lvbnMubGVuZ3RoID4gMCA/IFwiLlwiICsgdGhpcy5waWNrKG9wdGlvbnMuZXh0ZW5zaW9ucykgOiBcIlwiO1xuICAgICAgICB2YXIgZG9tYWluID0gb3B0aW9ucy5kb21haW5fcHJlZml4ID8gb3B0aW9ucy5kb21haW5fcHJlZml4ICsgXCIuXCIgKyBvcHRpb25zLmRvbWFpbiA6IG9wdGlvbnMuZG9tYWluO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnByb3RvY29sICsgXCI6Ly9cIiArIGRvbWFpbiArIFwiL1wiICsgb3B0aW9ucy5wYXRoICsgZXh0ZW5zaW9uO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgV2ViIC0tXG5cbiAgICAvLyAtLSBMb2NhdGlvbiAtLVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hZGRyZXNzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttaW46IDUsIG1heDogMjAwMH0pICsgJyAnICsgdGhpcy5zdHJlZXQob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuYWx0aXR1ZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2ZpeGVkOiA1LCBtaW46IDAsIG1heDogODg0OH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5mbG9hdGluZyh7XG4gICAgICAgICAgICBtaW46IG9wdGlvbnMubWluLFxuICAgICAgICAgICAgbWF4OiBvcHRpb25zLm1heCxcbiAgICAgICAgICAgIGZpeGVkOiBvcHRpb25zLmZpeGVkXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmFyZWFjb2RlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtwYXJlbnMgOiB0cnVlfSk7XG4gICAgICAgIC8vIERvbid0IHdhbnQgYXJlYSBjb2RlcyB0byBzdGFydCB3aXRoIDEsIG9yIGhhdmUgYSA5IGFzIHRoZSBzZWNvbmQgZGlnaXRcbiAgICAgICAgdmFyIGFyZWFjb2RlID0gdGhpcy5uYXR1cmFsKHttaW46IDIsIG1heDogOX0pLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbCh7bWluOiAwLCBtYXg6IDh9KS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoe21pbjogMCwgbWF4OiA5fSkudG9TdHJpbmcoKTtcblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5wYXJlbnMgPyAnKCcgKyBhcmVhY29kZSArICcpJyA6IGFyZWFjb2RlO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcGl0YWxpemUodGhpcy53b3JkKHtzeWxsYWJsZXM6IDN9KSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuY29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXRpdHVkZShvcHRpb25zKSArICcsICcgKyB0aGlzLmxvbmdpdHVkZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jb3VudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldChcImNvdW50cmllc1wiKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jb3VudHJ5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgY291bnRyeSA9IHRoaXMucGljayh0aGlzLmNvdW50cmllcygpKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZnVsbCA/IGNvdW50cnkubmFtZSA6IGNvdW50cnkuYWJicmV2aWF0aW9uO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmRlcHRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtmaXhlZDogNSwgbWluOiAtMTA5OTQsIG1heDogMH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5mbG9hdGluZyh7XG4gICAgICAgICAgICBtaW46IG9wdGlvbnMubWluLFxuICAgICAgICAgICAgbWF4OiBvcHRpb25zLm1heCxcbiAgICAgICAgICAgIGZpeGVkOiBvcHRpb25zLmZpeGVkXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmdlb2hhc2ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyBsZW5ndGg6IDcgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZyh7IGxlbmd0aDogb3B0aW9ucy5sZW5ndGgsIHBvb2w6ICcwMTIzNDU2Nzg5YmNkZWZnaGprbW5wcXJzdHV2d3h5eicgfSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZ2VvanNvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhdGl0dWRlKG9wdGlvbnMpICsgJywgJyArIHRoaXMubG9uZ2l0dWRlKG9wdGlvbnMpICsgJywgJyArIHRoaXMuYWx0aXR1ZGUob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubGF0aXR1ZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2ZpeGVkOiA1LCBtaW46IC05MCwgbWF4OiA5MH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5mbG9hdGluZyh7bWluOiBvcHRpb25zLm1pbiwgbWF4OiBvcHRpb25zLm1heCwgZml4ZWQ6IG9wdGlvbnMuZml4ZWR9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5sb25naXR1ZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2ZpeGVkOiA1LCBtaW46IC0xODAsIG1heDogMTgwfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZsb2F0aW5nKHttaW46IG9wdGlvbnMubWluLCBtYXg6IG9wdGlvbnMubWF4LCBmaXhlZDogb3B0aW9ucy5maXhlZH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBob25lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgbnVtUGljayxcbiAgICAgICAgICAgIHVrTnVtID0gZnVuY3Rpb24gKHBhcnRzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBbXTtcbiAgICAgICAgICAgICAgICAvL2ZpbGxzIHRoZSBzZWN0aW9uIHBhcnQgb2YgdGhlIHBob25lIG51bWJlciB3aXRoIHJhbmRvbSBudW1iZXJzLlxuICAgICAgICAgICAgICAgIHBhcnRzLnNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24obikge1xuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnB1c2goc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogbn0pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydHMuYXJlYSArIHNlY3Rpb24uam9pbignICcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvdW50cnk6ICd1cycsXG4gICAgICAgICAgICBtb2JpbGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhcmVucyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwaG9uZTtcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLmNvdW50cnkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ZyJzpcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bVBpY2sgPSB0aGlzLnBpY2soW1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgem9uZSBhbmQgZMOpcGFydGVtZW50IGNvZGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgJzAxJyArIHRoaXMucGljayhbJzMwJywgJzM0JywgJzM5JywgJzQwJywgJzQxJywgJzQyJywgJzQzJywgJzQ0JywgJzQ1JywgJzQ2JywgJzQ3JywgJzQ4JywgJzQ5JywgJzUzJywgJzU1JywgJzU2JywgJzU4JywgJzYwJywgJzY0JywgJzY5JywgJzcwJywgJzcyJywgJzczJywgJzc0JywgJzc1JywgJzc2JywgJzc3JywgJzc4JywgJzc5JywgJzgwJywgJzgxJywgJzgyJywgJzgzJ10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzAyJyArIHRoaXMucGljayhbJzE0JywgJzE4JywgJzIyJywgJzIzJywgJzI4JywgJzI5JywgJzMwJywgJzMxJywgJzMyJywgJzMzJywgJzM0JywgJzM1JywgJzM2JywgJzM3JywgJzM4JywgJzQwJywgJzQxJywgJzQzJywgJzQ0JywgJzQ1JywgJzQ2JywgJzQ3JywgJzQ4JywgJzQ5JywgJzUwJywgJzUxJywgJzUyJywgJzUzJywgJzU0JywgJzU2JywgJzU3JywgJzYxJywgJzYyJywgJzY5JywgJzcyJywgJzc2JywgJzc3JywgJzc4JywgJzg1JywgJzkwJywgJzk2JywgJzk3JywgJzk4JywgJzk5J10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzAzJyArIHRoaXMucGljayhbJzEwJywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI0JywgJzI1JywgJzI2JywgJzI3JywgJzI4JywgJzI5JywgJzM5JywgJzQ0JywgJzQ1JywgJzUxJywgJzUyJywgJzU0JywgJzU1JywgJzU3JywgJzU4JywgJzU5JywgJzYwJywgJzYxJywgJzYyJywgJzYzJywgJzY0JywgJzY1JywgJzY2JywgJzY3JywgJzY4JywgJzY5JywgJzcwJywgJzcxJywgJzcyJywgJzczJywgJzgwJywgJzgxJywgJzgyJywgJzgzJywgJzg0JywgJzg1JywgJzg2JywgJzg3JywgJzg4JywgJzg5JywgJzkwJ10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzA0JyArIHRoaXMucGljayhbJzExJywgJzEzJywgJzE1JywgJzIwJywgJzIyJywgJzI2JywgJzI3JywgJzMwJywgJzMyJywgJzM0JywgJzM3JywgJzQyJywgJzQzJywgJzQ0JywgJzUwJywgJzU2JywgJzU3JywgJzYzJywgJzY2JywgJzY3JywgJzY4JywgJzY5JywgJzcwJywgJzcxJywgJzcyJywgJzczJywgJzc0JywgJzc1JywgJzc2JywgJzc3JywgJzc4JywgJzc5JywgJzgwJywgJzgxJywgJzgyJywgJzgzJywgJzg0JywgJzg1JywgJzg2JywgJzg4JywgJzg5JywgJzkwJywgJzkxJywgJzkyJywgJzkzJywgJzk0JywgJzk1JywgJzk3JywgJzk4J10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzA1JyArIHRoaXMucGljayhbJzA4JywgJzE2JywgJzE3JywgJzE5JywgJzI0JywgJzMxJywgJzMyJywgJzMzJywgJzM0JywgJzM1JywgJzQwJywgJzQ1JywgJzQ2JywgJzQ3JywgJzQ5JywgJzUzJywgJzU1JywgJzU2JywgJzU3JywgJzU4JywgJzU5JywgJzYxJywgJzYyJywgJzYzJywgJzY0JywgJzY1JywgJzY3JywgJzc5JywgJzgxJywgJzgyJywgJzg2JywgJzg3JywgJzkwJywgJzk0J10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzA5JyArIHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IDh9KSxcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgICAgIHBob25lID0gb3B0aW9ucy5mb3JtYXR0ZWQgPyBudW1QaWNrLm1hdGNoKC8uLi9nKS5qb2luKCcgJykgOiBudW1QaWNrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG51bVBpY2sgPSB0aGlzLnBpY2soWycwNicsICcwNyddKSArIHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IDh9KTtcbiAgICAgICAgICAgICAgICAgICAgcGhvbmUgPSBvcHRpb25zLmZvcm1hdHRlZCA/IG51bVBpY2subWF0Y2goLy4uL2cpLmpvaW4oJyAnKSA6IG51bVBpY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndWsnOlxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtUGljayA9IHRoaXMucGljayhbXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3ZhbGlkIGFyZWEgY29kZXMgb2YgbWFqb3IgY2l0aWVzL2NvdW50aWVzIGZvbGxvd2VkIGJ5IHJhbmRvbSBudW1iZXJzIGluIHJlcXVpcmVkIGZvcm1hdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxJyArIHRoaXMuY2hhcmFjdGVyKHsgcG9vbDogJzIzNDU2OScgfSkgKyAnMSAnLCBzZWN0aW9uczogWzMsNF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAyMCAnICsgdGhpcy5jaGFyYWN0ZXIoeyBwb29sOiAnMzc4JyB9KSwgc2VjdGlvbnM6IFszLDRdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMjMgJyArIHRoaXMuY2hhcmFjdGVyKHsgcG9vbDogJzg5JyB9KSwgc2VjdGlvbnM6IFszLDRdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMjQgNycsIHNlY3Rpb25zOiBbMyw0XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDI4ICcgKyB0aGlzLnBpY2soWycyNScsJzI4JywnMzcnLCc3MScsJzgyJywnOTAnLCc5MicsJzk1J10pLCBzZWN0aW9uczogWzIsNF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxMicgKyB0aGlzLnBpY2soWycwNCcsJzA4JywnNTQnLCc3NicsJzk3JywnOTgnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxMycgKyB0aGlzLnBpY2soWyc2MycsJzY0JywnODQnLCc4NiddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDE0JyArIHRoaXMucGljayhbJzA0JywnMjAnLCc2MCcsJzYxJywnODAnLCc4OCddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDE1JyArIHRoaXMucGljayhbJzI0JywnMjcnLCc2MicsJzY2J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTYnICsgdGhpcy5waWNrKFsnMDYnLCcyOScsJzM1JywnNDcnLCc1OScsJzk1J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTcnICsgdGhpcy5waWNrKFsnMjYnLCc0NCcsJzUwJywnNjgnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxOCcgKyB0aGlzLnBpY2soWycyNycsJzM3JywnODQnLCc5NyddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDE5JyArIHRoaXMucGljayhbJzAwJywnMDUnLCczNScsJzQ2JywnNDknLCc2MycsJzk1J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH1cbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgICAgIHBob25lID0gb3B0aW9ucy5mb3JtYXR0ZWQgPyB1a051bShudW1QaWNrKSA6IHVrTnVtKG51bVBpY2spLnJlcGxhY2UoJyAnLCAnJywgJ2cnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBudW1QaWNrID0gdGhpcy5waWNrKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzA3JyArIHRoaXMucGljayhbJzQnLCc1JywnNycsJzgnLCc5J10pLCBzZWN0aW9uczogWzIsNl0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzA3NjI0ICcsIHNlY3Rpb25zOiBbNl0gfVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgcGhvbmUgPSBvcHRpb25zLmZvcm1hdHRlZCA/IHVrTnVtKG51bVBpY2spIDogdWtOdW0obnVtUGljaykucmVwbGFjZSgnICcsICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd1cyc6XG4gICAgICAgICAgICAgICAgdmFyIGFyZWFjb2RlID0gdGhpcy5hcmVhY29kZShvcHRpb25zKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhciBleGNoYW5nZSA9IHRoaXMubmF0dXJhbCh7IG1pbjogMiwgbWF4OiA5IH0pLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoeyBtaW46IDAsIG1heDogOSB9KS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsKHsgbWluOiAwLCBtYXg6IDkgfSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IHRoaXMubmF0dXJhbCh7IG1pbjogMTAwMCwgbWF4OiA5OTk5IH0pLnRvU3RyaW5nKCk7IC8vIHRoaXMgY291bGQgYmUgcmFuZG9tIFswLTldezR9XG4gICAgICAgICAgICAgICAgcGhvbmUgPSBvcHRpb25zLmZvcm1hdHRlZCA/IGFyZWFjb2RlICsgJyAnICsgZXhjaGFuZ2UgKyAnLScgKyBzdWJzY3JpYmVyIDogYXJlYWNvZGUgKyBleGNoYW5nZSArIHN1YnNjcmliZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBob25lO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBvc3RhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUG9zdGFsIERpc3RyaWN0XG4gICAgICAgIHZhciBwZCA9IHRoaXMuY2hhcmFjdGVyKHtwb29sOiBcIlhWVFNSUE5LTE1ISkdFQ0JBXCJ9KTtcbiAgICAgICAgLy8gRm9yd2FyZCBTb3J0YXRpb24gQXJlYSAoRlNBKVxuICAgICAgICB2YXIgZnNhID0gcGQgKyB0aGlzLm5hdHVyYWwoe21heDogOX0pICsgdGhpcy5jaGFyYWN0ZXIoe2FscGhhOiB0cnVlLCBjYXNpbmc6IFwidXBwZXJcIn0pO1xuICAgICAgICAvLyBMb2NhbCBEZWxpdmVyeSBVbnV0IChMRFUpXG4gICAgICAgIHZhciBsZHUgPSB0aGlzLm5hdHVyYWwoe21heDogOX0pICsgdGhpcy5jaGFyYWN0ZXIoe2FscGhhOiB0cnVlLCBjYXNpbmc6IFwidXBwZXJcIn0pICsgdGhpcy5uYXR1cmFsKHttYXg6IDl9KTtcblxuICAgICAgICByZXR1cm4gZnNhICsgXCIgXCIgKyBsZHU7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucHJvdmluY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJwcm92aW5jZXNcIik7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucHJvdmluY2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gKG9wdGlvbnMgJiYgb3B0aW9ucy5mdWxsKSA/XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5wcm92aW5jZXMoKSkubmFtZSA6XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5wcm92aW5jZXMoKSkuYWJicmV2aWF0aW9uO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0YXRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIChvcHRpb25zICYmIG9wdGlvbnMuZnVsbCkgP1xuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMuc3RhdGVzKG9wdGlvbnMpKS5uYW1lIDpcbiAgICAgICAgICAgIHRoaXMucGljayh0aGlzLnN0YXRlcyhvcHRpb25zKSkuYWJicmV2aWF0aW9uO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0YXRlcyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IHVzX3N0YXRlc19hbmRfZGM6IHRydWUgfSk7XG5cbiAgICAgICAgdmFyIHN0YXRlcyxcbiAgICAgICAgICAgIHVzX3N0YXRlc19hbmRfZGMgPSB0aGlzLmdldChcInVzX3N0YXRlc19hbmRfZGNcIiksXG4gICAgICAgICAgICB0ZXJyaXRvcmllcyA9IHRoaXMuZ2V0KFwidGVycml0b3JpZXNcIiksXG4gICAgICAgICAgICBhcm1lZF9mb3JjZXMgPSB0aGlzLmdldChcImFybWVkX2ZvcmNlc1wiKTtcblxuICAgICAgICBzdGF0ZXMgPSBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy51c19zdGF0ZXNfYW5kX2RjKSB7XG4gICAgICAgICAgICBzdGF0ZXMgPSBzdGF0ZXMuY29uY2F0KHVzX3N0YXRlc19hbmRfZGMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRlcnJpdG9yaWVzKSB7XG4gICAgICAgICAgICBzdGF0ZXMgPSBzdGF0ZXMuY29uY2F0KHRlcnJpdG9yaWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5hcm1lZF9mb3JjZXMpIHtcbiAgICAgICAgICAgIHN0YXRlcyA9IHN0YXRlcy5jb25jYXQoYXJtZWRfZm9yY2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdGF0ZXM7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc3RyZWV0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBzdHJlZXQgPSB0aGlzLndvcmQoe3N5bGxhYmxlczogMn0pO1xuICAgICAgICBzdHJlZXQgPSB0aGlzLmNhcGl0YWxpemUoc3RyZWV0KTtcbiAgICAgICAgc3RyZWV0ICs9ICcgJztcbiAgICAgICAgc3RyZWV0ICs9IG9wdGlvbnMuc2hvcnRfc3VmZml4ID9cbiAgICAgICAgICAgIHRoaXMuc3RyZWV0X3N1ZmZpeCgpLmFiYnJldmlhdGlvbiA6XG4gICAgICAgICAgICB0aGlzLnN0cmVldF9zdWZmaXgoKS5uYW1lO1xuICAgICAgICByZXR1cm4gc3RyZWV0O1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0cmVldF9zdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy5zdHJlZXRfc3VmZml4ZXMoKSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc3RyZWV0X3N1ZmZpeGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIG1vc3QgY29tbW9uIHN1ZmZpeGVzLlxuICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJzdHJlZXRfc3VmZml4ZXNcIik7XG4gICAgfTtcblxuICAgIC8vIE5vdGU6IG9ubHkgcmV0dXJuaW5nIFVTIHppcCBjb2RlcywgaW50ZXJuYXRpb25hbGl6YXRpb24gd2lsbCBiZSBhIHdob2xlXG4gICAgLy8gb3RoZXIgYmVhc3QgdG8gdGFja2xlIGF0IHNvbWUgcG9pbnQuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS56aXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgemlwID0gdGhpcy5uKHRoaXMubmF0dXJhbCwgNSwge21heDogOX0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGx1c2ZvdXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHppcC5wdXNoKCctJyk7XG4gICAgICAgICAgICB6aXAgPSB6aXAuY29uY2F0KHRoaXMubih0aGlzLm5hdHVyYWwsIDQsIHttYXg6IDl9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gemlwLmpvaW4oXCJcIik7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBMb2NhdGlvbiAtLVxuXG4gICAgLy8gLS0gVGltZVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hbXBtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib29sKCkgPyAnYW0nIDogJ3BtJztcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kYXRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGRhdGVfc3RyaW5nLCBkYXRlO1xuXG4gICAgICAgIC8vIElmIGludGVydmFsIGlzIHNwZWNpZmllZCB3ZSBpZ25vcmUgcHJlc2V0XG4gICAgICAgIGlmKG9wdGlvbnMgJiYgKG9wdGlvbnMubWluIHx8IG9wdGlvbnMubWF4KSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgICBhbWVyaWNhbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdHJpbmc6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBtaW4gPSB0eXBlb2Ygb3B0aW9ucy5taW4gIT09IFwidW5kZWZpbmVkXCIgPyBvcHRpb25zLm1pbi5nZXRUaW1lKCkgOiAxO1xuICAgICAgICAgICAgLy8gMTAwLDAwMCwwMDAgZGF5cyBtZWFzdXJlZCByZWxhdGl2ZSB0byBtaWRuaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIDAxIEphbnVhcnksIDE5NzAgVVRDLiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gICAgICAgICAgICB2YXIgbWF4ID0gdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiID8gb3B0aW9ucy5tYXguZ2V0VGltZSgpIDogODY0MDAwMDAwMDAwMDAwMDtcblxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHRoaXMubmF0dXJhbCh7bWluOiBtaW4sIG1heDogbWF4fSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG0gPSB0aGlzLm1vbnRoKHtyYXc6IHRydWV9KTtcbiAgICAgICAgICAgIHZhciBkYXlzSW5Nb250aCA9IG0uZGF5cztcblxuICAgICAgICAgICAgaWYob3B0aW9ucyAmJiBvcHRpb25zLm1vbnRoKSB7XG4gICAgICAgICAgICAgICAgLy8gTW9kIDEyIHRvIGFsbG93IG1vbnRocyBvdXRzaWRlIHJhbmdlIG9mIDAtMTEgKG5vdCBlbmNvdXJhZ2VkLCBidXQgYWxzbyBub3QgcHJldmVudGVkKS5cbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aCA9IHRoaXMuZ2V0KCdtb250aHMnKVsoKG9wdGlvbnMubW9udGggJSAxMikgKyAxMikgJSAxMl0uZGF5cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgICB5ZWFyOiBwYXJzZUludCh0aGlzLnllYXIoKSwgMTApLFxuICAgICAgICAgICAgICAgIC8vIE5lY2Vzc2FyeSB0byBzdWJ0cmFjdCAxIGJlY2F1c2UgRGF0ZSgpIDAtaW5kZXhlcyBtb250aCBidXQgbm90IGRheSBvciB5ZWFyXG4gICAgICAgICAgICAgICAgLy8gZm9yIHNvbWUgcmVhc29uLlxuICAgICAgICAgICAgICAgIG1vbnRoOiBtLm51bWVyaWMgLSAxLFxuICAgICAgICAgICAgICAgIGRheTogdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogZGF5c0luTW9udGh9KSxcbiAgICAgICAgICAgICAgICBob3VyOiB0aGlzLmhvdXIoKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IHRoaXMubWludXRlKCksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiB0aGlzLnNlY29uZCgpLFxuICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kOiB0aGlzLm1pbGxpc2Vjb25kKCksXG4gICAgICAgICAgICAgICAgYW1lcmljYW46IHRydWUsXG4gICAgICAgICAgICAgICAgc3RyaW5nOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShvcHRpb25zLnllYXIsIG9wdGlvbnMubW9udGgsIG9wdGlvbnMuZGF5LCBvcHRpb25zLmhvdXIsIG9wdGlvbnMubWludXRlLCBvcHRpb25zLnNlY29uZCwgb3B0aW9ucy5taWxsaXNlY29uZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hbWVyaWNhbikge1xuICAgICAgICAgICAgLy8gQWRkaW5nIDEgdG8gdGhlIG1vbnRoIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIERhdGUoKSAwLWluZGV4ZXNcbiAgICAgICAgICAgIC8vIG1vbnRocyBidXQgbm90IGRheSBmb3Igc29tZSBvZGQgcmVhc29uLlxuICAgICAgICAgICAgZGF0ZV9zdHJpbmcgPSAoZGF0ZS5nZXRNb250aCgpICsgMSkgKyAnLycgKyBkYXRlLmdldERhdGUoKSArICcvJyArIGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVfc3RyaW5nID0gZGF0ZS5nZXREYXRlKCkgKyAnLycgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkgKyAnLycgKyBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5zdHJpbmcgPyBkYXRlX3N0cmluZyA6IGRhdGU7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuaGFtbWVydGltZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGUob3B0aW9ucykuZ2V0VGltZSgpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmhvdXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21pbjogMSwgbWF4OiBvcHRpb25zICYmIG9wdGlvbnMudHdlbnR5Zm91ciA/IDI0IDogMTJ9KTtcblxuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPCAxLCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBsZXNzIHRoYW4gMS5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLnR3ZW50eWZvdXIgJiYgb3B0aW9ucy5tYXggPiAyNCwgXCJDaGFuY2U6IE1heCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDI0IGZvciB0d2VudHlmb3VyIG9wdGlvbi5cIik7XG4gICAgICAgIHRlc3RSYW5nZSghb3B0aW9ucy50d2VudHlmb3VyICYmIG9wdGlvbnMubWF4ID4gMTIsIFwiQ2hhbmNlOiBNYXggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAxMi5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA+IG9wdGlvbnMubWF4LCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4LlwiKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttaW46IG9wdGlvbnMubWluLCBtYXg6IG9wdGlvbnMubWF4fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubWlsbGlzZWNvbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21heDogOTk5fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubWludXRlID0gQ2hhbmNlLnByb3RvdHlwZS5zZWNvbmQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21pbjogMCwgbWF4OiA1OX0pO1xuXG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA8IDAsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGxlc3MgdGhhbiAwLlwiKTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWF4ID4gNTksIFwiQ2hhbmNlOiBNYXggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiA1OS5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA+IG9wdGlvbnMubWF4LCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4LlwiKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttaW46IG9wdGlvbnMubWluLCBtYXg6IG9wdGlvbnMubWF4fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubW9udGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21pbjogMSwgbWF4OiAxMn0pO1xuXG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA8IDEsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGxlc3MgdGhhbiAxLlwiKTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWF4ID4gMTIsIFwiQ2hhbmNlOiBNYXggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAxMi5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA+IG9wdGlvbnMubWF4LCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4LlwiKTtcblxuICAgICAgICB2YXIgbW9udGggPSB0aGlzLnBpY2sodGhpcy5tb250aHMoKS5zbGljZShvcHRpb25zLm1pbiAtIDEsIG9wdGlvbnMubWF4KSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnJhdyA/IG1vbnRoIDogbW9udGgubmFtZTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5tb250aHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldChcIm1vbnRoc1wiKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zZWNvbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21heDogNTl9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS50aW1lc3RhbXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDAsIDEwKX0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnllYXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgeWVhciBhcyBtaW4gaWYgbm9uZSBzcGVjaWZpZWRcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttaW46IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKX0pO1xuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gb25lIGNlbnR1cnkgYWZ0ZXIgY3VycmVudCB5ZWFyIGFzIG1heCBpZiBub25lIHNwZWNpZmllZFxuICAgICAgICBvcHRpb25zLm1heCA9ICh0eXBlb2Ygb3B0aW9ucy5tYXggIT09IFwidW5kZWZpbmVkXCIpID8gb3B0aW9ucy5tYXggOiBvcHRpb25zLm1pbiArIDEwMDtcblxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKG9wdGlvbnMpLnRvU3RyaW5nKCk7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBUaW1lXG5cbiAgICAvLyAtLSBGaW5hbmNlIC0tXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNjID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciB0eXBlLCBudW1iZXIsIHRvX2dlbmVyYXRlO1xuXG4gICAgICAgIHR5cGUgPSAob3B0aW9ucy50eXBlKSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2NfdHlwZSh7IG5hbWU6IG9wdGlvbnMudHlwZSwgcmF3OiB0cnVlIH0pIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jY190eXBlKHsgcmF3OiB0cnVlIH0pO1xuXG4gICAgICAgIG51bWJlciA9IHR5cGUucHJlZml4LnNwbGl0KFwiXCIpO1xuICAgICAgICB0b19nZW5lcmF0ZSA9IHR5cGUubGVuZ3RoIC0gdHlwZS5wcmVmaXgubGVuZ3RoIC0gMTtcblxuICAgICAgICAvLyBHZW5lcmF0ZXMgbiAtIDEgZGlnaXRzXG4gICAgICAgIG51bWJlciA9IG51bWJlci5jb25jYXQodGhpcy5uKHRoaXMuaW50ZWdlciwgdG9fZ2VuZXJhdGUsIHttaW46IDAsIG1heDogOX0pKTtcblxuICAgICAgICAvLyBHZW5lcmF0ZXMgdGhlIGxhc3QgZGlnaXQgYWNjb3JkaW5nIHRvIEx1aG4gYWxnb3JpdGhtXG4gICAgICAgIG51bWJlci5wdXNoKHRoaXMubHVobl9jYWxjdWxhdGUobnVtYmVyLmpvaW4oXCJcIikpKTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyLmpvaW4oXCJcIik7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuY2NfdHlwZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFua19jYXJkX251bWJlciNJc3N1ZXJfaWRlbnRpZmljYXRpb25fbnVtYmVyXy4yOElJTi4yOVxuICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJjY190eXBlc1wiKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jY190eXBlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgdHlwZXMgPSB0aGlzLmNjX3R5cGVzKCksXG4gICAgICAgICAgICB0eXBlID0gbnVsbDtcblxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gQWNjZXB0IGVpdGhlciBuYW1lIG9yIHNob3J0X25hbWUgdG8gc3BlY2lmeSBjYXJkIHR5cGVcbiAgICAgICAgICAgICAgICBpZiAodHlwZXNbaV0ubmFtZSA9PT0gb3B0aW9ucy5uYW1lIHx8IHR5cGVzW2ldLnNob3J0X25hbWUgPT09IG9wdGlvbnMubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcmVkaXQgY2FyZCB0eXBlICdcIiArIG9wdGlvbnMubmFtZSArIFwiJycgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHR5cGUgPSB0aGlzLnBpY2sodHlwZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmF3ID8gdHlwZSA6IHR5cGUubmFtZTtcbiAgICB9O1xuXG4gICAgLy9yZXR1cm4gYWxsIHdvcmxkIGN1cnJlbmN5IGJ5IElTTyA0MjE3XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jdXJyZW5jeV90eXBlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwiY3VycmVuY3lfdHlwZXNcIik7XG4gICAgfTtcblxuICAgIC8vcmV0dXJuIHJhbmRvbSB3b3JsZCBjdXJyZW5jeSBieSBJU08gNDIxN1xuICAgIENoYW5jZS5wcm90b3R5cGUuY3VycmVuY3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy5jdXJyZW5jeV90eXBlcygpKTtcbiAgICB9O1xuXG4gICAgLy9SZXR1cm4gcmFuZG9tIGNvcnJlY3QgY3VycmVuY3kgZXhjaGFuZ2UgcGFpciAoZS5nLiBFVVIvVVNEKSBvciBhcnJheSBvZiBjdXJyZW5jeSBjb2RlXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jdXJyZW5jeV9wYWlyID0gZnVuY3Rpb24gKHJldHVybkFzU3RyaW5nKSB7XG4gICAgICAgIHZhciBjdXJyZW5jaWVzID0gdGhpcy51bmlxdWUodGhpcy5jdXJyZW5jeSwgMiwge1xuICAgICAgICAgICAgY29tcGFyYXRvcjogZnVuY3Rpb24oYXJyLCB2YWwpIHtcblxuICAgICAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uKGFjYywgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIG1hdGNoIGhhcyBiZWVuIGZvdW5kLCBzaG9ydCBjaXJjdWl0IGNoZWNrIGFuZCBqdXN0IHJldHVyblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjIHx8IChpdGVtLmNvZGUgPT09IHZhbC5jb2RlKTtcbiAgICAgICAgICAgICAgICB9LCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXR1cm5Bc1N0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbmNpZXNbMF0uY29kZSArICcvJyArIGN1cnJlbmNpZXNbMV0uY29kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW5jaWVzO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZG9sbGFyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQnkgZGVmYXVsdCwgYSBzb21ld2hhdCBtb3JlIHNhbmUgbWF4IGZvciBkb2xsYXIgdGhhbiBhbGwgYXZhaWxhYmxlIG51bWJlcnNcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttYXggOiAxMDAwMCwgbWluIDogMH0pO1xuXG4gICAgICAgIHZhciBkb2xsYXIgPSB0aGlzLmZsb2F0aW5nKHttaW46IG9wdGlvbnMubWluLCBtYXg6IG9wdGlvbnMubWF4LCBmaXhlZDogMn0pLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBjZW50cyA9IGRvbGxhci5zcGxpdCgnLicpWzFdO1xuXG4gICAgICAgIGlmIChjZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2xsYXIgKz0gJy4wMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY2VudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgZG9sbGFyID0gZG9sbGFyICsgJzAnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvbGxhciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnLSQnICsgZG9sbGFyLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyQnICsgZG9sbGFyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZXhwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgZXhwID0ge307XG5cbiAgICAgICAgZXhwLnllYXIgPSB0aGlzLmV4cF95ZWFyKCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHllYXIgaXMgdGhpcyB5ZWFyLCBuZWVkIHRvIGVuc3VyZSBtb250aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4gICAgICAgIC8vIGN1cnJlbnQgbW9udGggb3IgdGhpcyBleHBpcmF0aW9uIHdpbGwgbm90IGJlIHZhbGlkXG4gICAgICAgIGlmIChleHAueWVhciA9PT0gKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSkudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgZXhwLm1vbnRoID0gdGhpcy5leHBfbW9udGgoe2Z1dHVyZTogdHJ1ZX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwLm1vbnRoID0gdGhpcy5leHBfbW9udGgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnJhdyA/IGV4cCA6IGV4cC5tb250aCArICcvJyArIGV4cC55ZWFyO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmV4cF9tb250aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdmFyIG1vbnRoLCBtb250aF9pbnQsXG4gICAgICAgICAgICAvLyBEYXRlIG9iamVjdCBtb250aHMgYXJlIDAgaW5kZXhlZFxuICAgICAgICAgICAgY3VyTW9udGggPSBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZ1dHVyZSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIG1vbnRoID0gdGhpcy5tb250aCh7cmF3OiB0cnVlfSkubnVtZXJpYztcbiAgICAgICAgICAgICAgICBtb250aF9pbnQgPSBwYXJzZUludChtb250aCwgMTApO1xuICAgICAgICAgICAgfSB3aGlsZSAobW9udGhfaW50IDw9IGN1ck1vbnRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vbnRoID0gdGhpcy5tb250aCh7cmF3OiB0cnVlfSkubnVtZXJpYztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb250aDtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5leHBfeWVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcih7bWF4OiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgKyAxMH0pO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgRmluYW5jZVxuXG4gICAgLy8gLS0gUmVnaW9uYWxcblxuICAgIENoYW5jZS5wcm90b3R5cGUucGxfcGVzZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiA5OTk5OTk5OTk5fSk7XG4gICAgICAgIHZhciBhcnIgPSB0aGlzLnBhZChudW1iZXIsIDEwKS5zcGxpdCgnJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSBwYXJzZUludChhcnJbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbnRyb2xOdW1iZXIgPSAoMSAqIGFyclswXSArIDMgKiBhcnJbMV0gKyA3ICogYXJyWzJdICsgOSAqIGFyclszXSArIDEgKiBhcnJbNF0gKyAzICogYXJyWzVdICsgNyAqIGFycls2XSArIDkgKiBhcnJbN10gKyAxICogYXJyWzhdICsgMyAqIGFycls5XSkgJSAxMDtcbiAgICAgICAgaWYoY29udHJvbE51bWJlciAhPT0gMCkge1xuICAgICAgICAgICAgY29udHJvbE51bWJlciA9IDEwIC0gY29udHJvbE51bWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnIuam9pbignJykgKyBjb250cm9sTnVtYmVyO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBsX25pcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IDk5OTk5OTk5OX0pO1xuICAgICAgICB2YXIgYXJyID0gdGhpcy5wYWQobnVtYmVyLCA5KS5zcGxpdCgnJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSBwYXJzZUludChhcnJbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbnRyb2xOdW1iZXIgPSAoNiAqIGFyclswXSArIDUgKiBhcnJbMV0gKyA3ICogYXJyWzJdICsgMiAqIGFyclszXSArIDMgKiBhcnJbNF0gKyA0ICogYXJyWzVdICsgNSAqIGFycls2XSArIDYgKiBhcnJbN10gKyA3ICogYXJyWzhdKSAlIDExO1xuICAgICAgICBpZihjb250cm9sTnVtYmVyID09PSAxMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGxfbmlwKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oJycpICsgY29udHJvbE51bWJlcjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wbF9yZWdvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IDk5OTk5OTk5fSk7XG4gICAgICAgIHZhciBhcnIgPSB0aGlzLnBhZChudW1iZXIsIDgpLnNwbGl0KCcnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFycltpXSA9IHBhcnNlSW50KGFycltpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY29udHJvbE51bWJlciA9ICg4ICogYXJyWzBdICsgOSAqIGFyclsxXSArIDIgKiBhcnJbMl0gKyAzICogYXJyWzNdICsgNCAqIGFycls0XSArIDUgKiBhcnJbNV0gKyA2ICogYXJyWzZdICsgNyAqIGFycls3XSkgJSAxMTtcbiAgICAgICAgaWYoY29udHJvbE51bWJlciA9PT0gMTApIHtcbiAgICAgICAgICAgIGNvbnRyb2xOdW1iZXIgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyci5qb2luKCcnKSArIGNvbnRyb2xOdW1iZXI7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBSZWdpb25hbFxuXG4gICAgLy8gLS0gTWlzY2VsbGFuZW91cyAtLVxuXG4gICAgLy8gRGljZSAtIEZvciBhbGwgdGhlIGJvYXJkIGdhbWUgZ2Vla3Mgb3V0IHRoZXJlLCBteXNlbGYgaW5jbHVkZWQgOylcbiAgICBmdW5jdGlvbiBkaWNlRm4gKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHJhbmdlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kNCA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDR9KTtcbiAgICBDaGFuY2UucHJvdG90eXBlLmQ2ID0gZGljZUZuKHttaW46IDEsIG1heDogNn0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDggPSBkaWNlRm4oe21pbjogMSwgbWF4OiA4fSk7XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kMTAgPSBkaWNlRm4oe21pbjogMSwgbWF4OiAxMH0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDEyID0gZGljZUZuKHttaW46IDEsIG1heDogMTJ9KTtcbiAgICBDaGFuY2UucHJvdG90eXBlLmQyMCA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDIwfSk7XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kMzAgPSBkaWNlRm4oe21pbjogMSwgbWF4OiAzMH0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDEwMCA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDEwMH0pO1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5ycGcgPSBmdW5jdGlvbiAodGhyb3duLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKCF0aHJvd24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQSB0eXBlIG9mIGRpZSByb2xsIG11c3QgYmUgaW5jbHVkZWRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgYml0cyA9IHRocm93bi50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiZFwiKSxcbiAgICAgICAgICAgICAgICByb2xscyA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoYml0cy5sZW5ndGggIT09IDIgfHwgIXBhcnNlSW50KGJpdHNbMF0sIDEwKSB8fCAhcGFyc2VJbnQoYml0c1sxXSwgMTApKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBmb3JtYXQgcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlICNkIyB3aGVyZSB0aGUgZmlyc3QgIyBpcyB0aGUgbnVtYmVyIG9mIGRpY2UgdG8gcm9sbCwgdGhlIHNlY29uZCAjIGlzIHRoZSBtYXggb2YgZWFjaCBkaWVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gYml0c1swXTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHJvbGxzW2kgLSAxXSA9IHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IGJpdHNbMV19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAodHlwZW9mIG9wdGlvbnMuc3VtICE9PSAndW5kZWZpbmVkJyAmJiBvcHRpb25zLnN1bSkgPyByb2xscy5yZWR1Y2UoZnVuY3Rpb24gKHAsIGMpIHsgcmV0dXJuIHAgKyBjOyB9KSA6IHJvbGxzO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIEd1aWRcbiAgICBDaGFuY2UucHJvdG90eXBlLmd1aWQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyB2ZXJzaW9uOiA1IH0pO1xuXG4gICAgICAgIHZhciBndWlkX3Bvb2wgPSBcImFiY2RlZjEyMzQ1Njc4OTBcIixcbiAgICAgICAgICAgIHZhcmlhbnRfcG9vbCA9IFwiYWI4OVwiLFxuICAgICAgICAgICAgZ3VpZCA9IHRoaXMuc3RyaW5nKHsgcG9vbDogZ3VpZF9wb29sLCBsZW5ndGg6IDggfSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKHsgcG9vbDogZ3VpZF9wb29sLCBsZW5ndGg6IDQgfSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgIC8vIFRoZSBWZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgb3B0aW9ucy52ZXJzaW9uICtcbiAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZyh7IHBvb2w6IGd1aWRfcG9vbCwgbGVuZ3RoOiAzIH0pICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAvLyBUaGUgVmFyaWFudFxuICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKHsgcG9vbDogdmFyaWFudF9wb29sLCBsZW5ndGg6IDEgfSkgK1xuICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKHsgcG9vbDogZ3VpZF9wb29sLCBsZW5ndGg6IDMgfSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKHsgcG9vbDogZ3VpZF9wb29sLCBsZW5ndGg6IDEyIH0pO1xuICAgICAgICByZXR1cm4gZ3VpZDtcbiAgICB9O1xuXG4gICAgLy8gSGFzaFxuICAgIENoYW5jZS5wcm90b3R5cGUuaGFzaCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bGVuZ3RoIDogNDAsIGNhc2luZzogJ2xvd2VyJ30pO1xuICAgICAgICB2YXIgcG9vbCA9IG9wdGlvbnMuY2FzaW5nID09PSAndXBwZXInID8gSEVYX1BPT0wudG9VcHBlckNhc2UoKSA6IEhFWF9QT09MO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcoe3Bvb2w6IHBvb2wsIGxlbmd0aDogb3B0aW9ucy5sZW5ndGh9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5sdWhuX2NoZWNrID0gZnVuY3Rpb24gKG51bSkge1xuICAgICAgICB2YXIgc3RyID0gbnVtLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhciBjaGVja0RpZ2l0ID0gK3N0ci5zdWJzdHJpbmcoc3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICByZXR1cm4gY2hlY2tEaWdpdCA9PT0gdGhpcy5sdWhuX2NhbGN1bGF0ZSgrc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMSkpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmx1aG5fY2FsY3VsYXRlID0gZnVuY3Rpb24gKG51bSkge1xuICAgICAgICB2YXIgZGlnaXRzID0gbnVtLnRvU3RyaW5nKCkuc3BsaXQoXCJcIikucmV2ZXJzZSgpO1xuICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgdmFyIGRpZ2l0O1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aDsgbCA+IGk7ICsraSkge1xuICAgICAgICAgICAgZGlnaXQgPSArZGlnaXRzW2ldO1xuICAgICAgICAgICAgaWYgKGkgJSAyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZGlnaXQgKj0gMjtcbiAgICAgICAgICAgICAgICBpZiAoZGlnaXQgPiA5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZ2l0IC09IDk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3VtICs9IGRpZ2l0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc3VtICogOSkgJSAxMDtcbiAgICB9O1xuXG4gICAgLy8gTUQ1IEhhc2hcbiAgICBDaGFuY2UucHJvdG90eXBlLm1kNSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIG9wdHMgPSB7IHN0cjogJycsIGtleTogbnVsbCwgcmF3OiBmYWxzZSB9O1xuXG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0cy5zdHIgPSB0aGlzLnN0cmluZygpO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgb3B0cy5zdHIgPSBvcHRpb25zO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihvcHRpb25zLmNvbnN0cnVjdG9yID09PSAnQXJyYXknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdHMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCBvcHRzKTtcblxuICAgICAgICBpZighb3B0cy5zdHIpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byByZXR1cm4gYW4gbWQ1IGhhc2guJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5iaW1kNS5tZDUob3B0cy5zdHIsIG9wdHMua2V5LCBvcHRzLnJhdyk7XG4gICAgfTtcblxuICAgIHZhciBkYXRhID0ge1xuXG4gICAgICAgIGZpcnN0TmFtZXM6IHtcbiAgICAgICAgICAgIFwibWFsZVwiOiBbXCJKYW1lc1wiLCBcIkpvaG5cIiwgXCJSb2JlcnRcIiwgXCJNaWNoYWVsXCIsIFwiV2lsbGlhbVwiLCBcIkRhdmlkXCIsIFwiUmljaGFyZFwiLCBcIkpvc2VwaFwiLCBcIkNoYXJsZXNcIiwgXCJUaG9tYXNcIiwgXCJDaHJpc3RvcGhlclwiLCBcIkRhbmllbFwiLCBcIk1hdHRoZXdcIiwgXCJHZW9yZ2VcIiwgXCJEb25hbGRcIiwgXCJBbnRob255XCIsIFwiUGF1bFwiLCBcIk1hcmtcIiwgXCJFZHdhcmRcIiwgXCJTdGV2ZW5cIiwgXCJLZW5uZXRoXCIsIFwiQW5kcmV3XCIsIFwiQnJpYW5cIiwgXCJKb3NodWFcIiwgXCJLZXZpblwiLCBcIlJvbmFsZFwiLCBcIlRpbW90aHlcIiwgXCJKYXNvblwiLCBcIkplZmZyZXlcIiwgXCJGcmFua1wiLCBcIkdhcnlcIiwgXCJSeWFuXCIsIFwiTmljaG9sYXNcIiwgXCJFcmljXCIsIFwiU3RlcGhlblwiLCBcIkphY29iXCIsIFwiTGFycnlcIiwgXCJKb25hdGhhblwiLCBcIlNjb3R0XCIsIFwiUmF5bW9uZFwiLCBcIkp1c3RpblwiLCBcIkJyYW5kb25cIiwgXCJHcmVnb3J5XCIsIFwiU2FtdWVsXCIsIFwiQmVuamFtaW5cIiwgXCJQYXRyaWNrXCIsIFwiSmFja1wiLCBcIkhlbnJ5XCIsIFwiV2FsdGVyXCIsIFwiRGVubmlzXCIsIFwiSmVycnlcIiwgXCJBbGV4YW5kZXJcIiwgXCJQZXRlclwiLCBcIlR5bGVyXCIsIFwiRG91Z2xhc1wiLCBcIkhhcm9sZFwiLCBcIkFhcm9uXCIsIFwiSm9zZVwiLCBcIkFkYW1cIiwgXCJBcnRodXJcIiwgXCJaYWNoYXJ5XCIsIFwiQ2FybFwiLCBcIk5hdGhhblwiLCBcIkFsYmVydFwiLCBcIkt5bGVcIiwgXCJMYXdyZW5jZVwiLCBcIkpvZVwiLCBcIldpbGxpZVwiLCBcIkdlcmFsZFwiLCBcIlJvZ2VyXCIsIFwiS2VpdGhcIiwgXCJKZXJlbXlcIiwgXCJUZXJyeVwiLCBcIkhhcnJ5XCIsIFwiUmFscGhcIiwgXCJTZWFuXCIsIFwiSmVzc2VcIiwgXCJSb3lcIiwgXCJMb3Vpc1wiLCBcIkJpbGx5XCIsIFwiQXVzdGluXCIsIFwiQnJ1Y2VcIiwgXCJFdWdlbmVcIiwgXCJDaHJpc3RpYW5cIiwgXCJCcnlhblwiLCBcIldheW5lXCIsIFwiUnVzc2VsbFwiLCBcIkhvd2FyZFwiLCBcIkZyZWRcIiwgXCJFdGhhblwiLCBcIkpvcmRhblwiLCBcIlBoaWxpcFwiLCBcIkFsYW5cIiwgXCJKdWFuXCIsIFwiUmFuZHlcIiwgXCJWaW5jZW50XCIsIFwiQm9iYnlcIiwgXCJEeWxhblwiLCBcIkpvaG5ueVwiLCBcIlBoaWxsaXBcIiwgXCJWaWN0b3JcIiwgXCJDbGFyZW5jZVwiLCBcIkVybmVzdFwiLCBcIk1hcnRpblwiLCBcIkNyYWlnXCIsIFwiU3RhbmxleVwiLCBcIlNoYXduXCIsIFwiVHJhdmlzXCIsIFwiQnJhZGxleVwiLCBcIkxlb25hcmRcIiwgXCJFYXJsXCIsIFwiR2FicmllbFwiLCBcIkppbW15XCIsIFwiRnJhbmNpc1wiLCBcIlRvZGRcIiwgXCJOb2FoXCIsIFwiRGFubnlcIiwgXCJEYWxlXCIsIFwiQ29keVwiLCBcIkNhcmxvc1wiLCBcIkFsbGVuXCIsIFwiRnJlZGVyaWNrXCIsIFwiTG9nYW5cIiwgXCJDdXJ0aXNcIiwgXCJBbGV4XCIsIFwiSm9lbFwiLCBcIkx1aXNcIiwgXCJOb3JtYW5cIiwgXCJNYXJ2aW5cIiwgXCJHbGVublwiLCBcIlRvbnlcIiwgXCJOYXRoYW5pZWxcIiwgXCJSb2RuZXlcIiwgXCJNZWx2aW5cIiwgXCJBbGZyZWRcIiwgXCJTdGV2ZVwiLCBcIkNhbWVyb25cIiwgXCJDaGFkXCIsIFwiRWR3aW5cIiwgXCJDYWxlYlwiLCBcIkV2YW5cIiwgXCJBbnRvbmlvXCIsIFwiTGVlXCIsIFwiSGVyYmVydFwiLCBcIkplZmZlcnlcIiwgXCJJc2FhY1wiLCBcIkRlcmVrXCIsIFwiUmlja3lcIiwgXCJNYXJjdXNcIiwgXCJUaGVvZG9yZVwiLCBcIkVsaWphaFwiLCBcIkx1a2VcIiwgXCJKZXN1c1wiLCBcIkVkZGllXCIsIFwiVHJveVwiLCBcIk1pa2VcIiwgXCJEdXN0aW5cIiwgXCJSYXlcIiwgXCJBZHJpYW5cIiwgXCJCZXJuYXJkXCIsIFwiTGVyb3lcIiwgXCJBbmdlbFwiLCBcIlJhbmRhbGxcIiwgXCJXZXNsZXlcIiwgXCJJYW5cIiwgXCJKYXJlZFwiLCBcIk1hc29uXCIsIFwiSHVudGVyXCIsIFwiQ2FsdmluXCIsIFwiT3NjYXJcIiwgXCJDbGlmZm9yZFwiLCBcIkpheVwiLCBcIlNoYW5lXCIsIFwiUm9ubmllXCIsIFwiQmFycnlcIiwgXCJMdWNhc1wiLCBcIkNvcmV5XCIsIFwiTWFudWVsXCIsIFwiTGVvXCIsIFwiVG9tbXlcIiwgXCJXYXJyZW5cIiwgXCJKYWNrc29uXCIsIFwiSXNhaWFoXCIsIFwiQ29ubm9yXCIsIFwiRG9uXCIsIFwiRGVhblwiLCBcIkpvblwiLCBcIkp1bGlhblwiLCBcIk1pZ3VlbFwiLCBcIkJpbGxcIiwgXCJMbG95ZFwiLCBcIkNoYXJsaWVcIiwgXCJNaXRjaGVsbFwiLCBcIkxlb25cIiwgXCJKZXJvbWVcIiwgXCJEYXJyZWxsXCIsIFwiSmVyZW1pYWhcIiwgXCJBbHZpblwiLCBcIkJyZXR0XCIsIFwiU2V0aFwiLCBcIkZsb3lkXCIsIFwiSmltXCIsIFwiQmxha2VcIiwgXCJNaWNoZWFsXCIsIFwiR29yZG9uXCIsIFwiVHJldm9yXCIsIFwiTGV3aXNcIiwgXCJFcmlrXCIsIFwiRWRnYXJcIiwgXCJWZXJub25cIiwgXCJEZXZpblwiLCBcIkdhdmluXCIsIFwiSmF5ZGVuXCIsIFwiQ2hyaXNcIiwgXCJDbHlkZVwiLCBcIlRvbVwiLCBcIkRlcnJpY2tcIiwgXCJNYXJpb1wiLCBcIkJyZW50XCIsIFwiTWFyY1wiLCBcIkhlcm1hblwiLCBcIkNoYXNlXCIsIFwiRG9taW5pY1wiLCBcIlJpY2FyZG9cIiwgXCJGcmFua2xpblwiLCBcIk1hdXJpY2VcIiwgXCJNYXhcIiwgXCJBaWRlblwiLCBcIk93ZW5cIiwgXCJMZXN0ZXJcIiwgXCJHaWxiZXJ0XCIsIFwiRWxtZXJcIiwgXCJHZW5lXCIsIFwiRnJhbmNpc2NvXCIsIFwiR2xlblwiLCBcIkNvcnlcIiwgXCJHYXJyZXR0XCIsIFwiQ2xheXRvblwiLCBcIlNhbVwiLCBcIkpvcmdlXCIsIFwiQ2hlc3RlclwiLCBcIkFsZWphbmRyb1wiLCBcIkplZmZcIiwgXCJIYXJ2ZXlcIiwgXCJNaWx0b25cIiwgXCJDb2xlXCIsIFwiSXZhblwiLCBcIkFuZHJlXCIsIFwiRHVhbmVcIiwgXCJMYW5kb25cIl0sXG4gICAgICAgICAgICBcImZlbWFsZVwiOiBbXCJNYXJ5XCIsIFwiRW1tYVwiLCBcIkVsaXphYmV0aFwiLCBcIk1pbm5pZVwiLCBcIk1hcmdhcmV0XCIsIFwiSWRhXCIsIFwiQWxpY2VcIiwgXCJCZXJ0aGFcIiwgXCJTYXJhaFwiLCBcIkFubmllXCIsIFwiQ2xhcmFcIiwgXCJFbGxhXCIsIFwiRmxvcmVuY2VcIiwgXCJDb3JhXCIsIFwiTWFydGhhXCIsIFwiTGF1cmFcIiwgXCJOZWxsaWVcIiwgXCJHcmFjZVwiLCBcIkNhcnJpZVwiLCBcIk1hdWRlXCIsIFwiTWFiZWxcIiwgXCJCZXNzaWVcIiwgXCJKZW5uaWVcIiwgXCJHZXJ0cnVkZVwiLCBcIkp1bGlhXCIsIFwiSGF0dGllXCIsIFwiRWRpdGhcIiwgXCJNYXR0aWVcIiwgXCJSb3NlXCIsIFwiQ2F0aGVyaW5lXCIsIFwiTGlsbGlhblwiLCBcIkFkYVwiLCBcIkxpbGxpZVwiLCBcIkhlbGVuXCIsIFwiSmVzc2llXCIsIFwiTG91aXNlXCIsIFwiRXRoZWxcIiwgXCJMdWxhXCIsIFwiTXlydGxlXCIsIFwiRXZhXCIsIFwiRnJhbmNlc1wiLCBcIkxlbmFcIiwgXCJMdWN5XCIsIFwiRWRuYVwiLCBcIk1hZ2dpZVwiLCBcIlBlYXJsXCIsIFwiRGFpc3lcIiwgXCJGYW5uaWVcIiwgXCJKb3NlcGhpbmVcIiwgXCJEb3JhXCIsIFwiUm9zYVwiLCBcIkthdGhlcmluZVwiLCBcIkFnbmVzXCIsIFwiTWFyaWVcIiwgXCJOb3JhXCIsIFwiTWF5XCIsIFwiTWFtaWVcIiwgXCJCbGFuY2hlXCIsIFwiU3RlbGxhXCIsIFwiRWxsZW5cIiwgXCJOYW5jeVwiLCBcIkVmZmllXCIsIFwiU2FsbGllXCIsIFwiTmV0dGllXCIsIFwiRGVsbGFcIiwgXCJMaXp6aWVcIiwgXCJGbG9yYVwiLCBcIlN1c2llXCIsIFwiTWF1ZFwiLCBcIk1hZVwiLCBcIkV0dGFcIiwgXCJIYXJyaWV0XCIsIFwiU2FkaWVcIiwgXCJDYXJvbGluZVwiLCBcIkthdGllXCIsIFwiTHlkaWFcIiwgXCJFbHNpZVwiLCBcIkthdGVcIiwgXCJTdXNhblwiLCBcIk1vbGxpZVwiLCBcIkFsbWFcIiwgXCJBZGRpZVwiLCBcIkdlb3JnaWFcIiwgXCJFbGl6YVwiLCBcIkx1bHVcIiwgXCJOYW5uaWVcIiwgXCJMb3R0aWVcIiwgXCJBbWFuZGFcIiwgXCJCZWxsZVwiLCBcIkNoYXJsb3R0ZVwiLCBcIlJlYmVjY2FcIiwgXCJSdXRoXCIsIFwiVmlvbGFcIiwgXCJPbGl2ZVwiLCBcIkFtZWxpYVwiLCBcIkhhbm5haFwiLCBcIkphbmVcIiwgXCJWaXJnaW5pYVwiLCBcIkVtaWx5XCIsIFwiTWF0aWxkYVwiLCBcIklyZW5lXCIsIFwiS2F0aHJ5blwiLCBcIkVzdGhlclwiLCBcIldpbGxpZVwiLCBcIkhlbnJpZXR0YVwiLCBcIk9sbGllXCIsIFwiQW15XCIsIFwiUmFjaGVsXCIsIFwiU2FyYVwiLCBcIkVzdGVsbGFcIiwgXCJUaGVyZXNhXCIsIFwiQXVndXN0YVwiLCBcIk9yYVwiLCBcIlBhdWxpbmVcIiwgXCJKb3NpZVwiLCBcIkxvbGFcIiwgXCJTb3BoaWFcIiwgXCJMZW9uYVwiLCBcIkFubmVcIiwgXCJNaWxkcmVkXCIsIFwiQW5uXCIsIFwiQmV1bGFoXCIsIFwiQ2FsbGllXCIsIFwiTG91XCIsIFwiRGVsaWFcIiwgXCJFbGVhbm9yXCIsIFwiQmFyYmFyYVwiLCBcIkl2YVwiLCBcIkxvdWlzYVwiLCBcIk1hcmlhXCIsIFwiTWF5bWVcIiwgXCJFdmVseW5cIiwgXCJFc3RlbGxlXCIsIFwiTmluYVwiLCBcIkJldHR5XCIsIFwiTWFyaW9uXCIsIFwiQmV0dGllXCIsIFwiRG9yb3RoeVwiLCBcIkx1ZWxsYVwiLCBcIkluZXpcIiwgXCJMZWxhXCIsIFwiUm9zaWVcIiwgXCJBbGxpZVwiLCBcIk1pbGxpZVwiLCBcIkphbmllXCIsIFwiQ29ybmVsaWFcIiwgXCJWaWN0b3JpYVwiLCBcIlJ1YnlcIiwgXCJXaW5pZnJlZFwiLCBcIkFsdGFcIiwgXCJDZWxpYVwiLCBcIkNocmlzdGluZVwiLCBcIkJlYXRyaWNlXCIsIFwiQmlyZGllXCIsIFwiSGFycmlldHRcIiwgXCJNYWJsZVwiLCBcIk15cmFcIiwgXCJTb3BoaWVcIiwgXCJUaWxsaWVcIiwgXCJJc2FiZWxcIiwgXCJTeWx2aWFcIiwgXCJDYXJvbHluXCIsIFwiSXNhYmVsbGVcIiwgXCJMZWlsYVwiLCBcIlNhbGx5XCIsIFwiSW5hXCIsIFwiRXNzaWVcIiwgXCJCZXJ0aWVcIiwgXCJOZWxsXCIsIFwiQWxiZXJ0YVwiLCBcIkthdGhhcmluZVwiLCBcIkxvcmFcIiwgXCJSZW5hXCIsIFwiTWluYVwiLCBcIlJob2RhXCIsIFwiTWF0aGlsZGFcIiwgXCJBYmJpZVwiLCBcIkV1bGFcIiwgXCJEb2xsaWVcIiwgXCJIZXR0aWVcIiwgXCJFdW5pY2VcIiwgXCJGYW5ueVwiLCBcIk9sYVwiLCBcIkxlbm9yYVwiLCBcIkFkZWxhaWRlXCIsIFwiQ2hyaXN0aW5hXCIsIFwiTGVsaWFcIiwgXCJOZWxsZVwiLCBcIlN1ZVwiLCBcIkpvaGFubmFcIiwgXCJMaWxseVwiLCBcIkx1Y2luZGFcIiwgXCJNaW5lcnZhXCIsIFwiTGV0dGllXCIsIFwiUm94aWVcIiwgXCJDeW50aGlhXCIsIFwiSGVsZW5hXCIsIFwiSGlsZGFcIiwgXCJIdWxkYVwiLCBcIkJlcm5pY2VcIiwgXCJHZW5ldmlldmVcIiwgXCJKZWFuXCIsIFwiQ29yZGVsaWFcIiwgXCJNYXJpYW5cIiwgXCJGcmFuY2lzXCIsIFwiSmVhbmV0dGVcIiwgXCJBZGVsaW5lXCIsIFwiR3Vzc2llXCIsIFwiTGVhaFwiLCBcIkxvaXNcIiwgXCJMdXJhXCIsIFwiTWl0dGllXCIsIFwiSGFsbGllXCIsIFwiSXNhYmVsbGFcIiwgXCJPbGdhXCIsIFwiUGhvZWJlXCIsIFwiVGVyZXNhXCIsIFwiSGVzdGVyXCIsIFwiTGlkYVwiLCBcIkxpbmFcIiwgXCJXaW5uaWVcIiwgXCJDbGF1ZGlhXCIsIFwiTWFyZ3Vlcml0ZVwiLCBcIlZlcmFcIiwgXCJDZWNlbGlhXCIsIFwiQmVzc1wiLCBcIkVtaWxpZVwiLCBcIkpvaG5cIiwgXCJSb3NldHRhXCIsIFwiVmVybmFcIiwgXCJNeXJ0aWVcIiwgXCJDZWNpbGlhXCIsIFwiRWx2YVwiLCBcIk9saXZpYVwiLCBcIk9waGVsaWFcIiwgXCJHZW9yZ2llXCIsIFwiRWxub3JhXCIsIFwiVmlvbGV0XCIsIFwiQWRlbGVcIiwgXCJMaWx5XCIsIFwiTGlubmllXCIsIFwiTG9yZXR0YVwiLCBcIk1hZGdlXCIsIFwiUG9sbHlcIiwgXCJWaXJnaWVcIiwgXCJFdWdlbmlhXCIsIFwiTHVjaWxlXCIsIFwiTHVjaWxsZVwiLCBcIk1hYmVsbGVcIiwgXCJSb3NhbGllXCJdXG4gICAgICAgIH0sXG5cbiAgICAgICAgbGFzdE5hbWVzOiBbJ1NtaXRoJywgJ0pvaG5zb24nLCAnV2lsbGlhbXMnLCAnSm9uZXMnLCAnQnJvd24nLCAnRGF2aXMnLCAnTWlsbGVyJywgJ1dpbHNvbicsICdNb29yZScsICdUYXlsb3InLCAnQW5kZXJzb24nLCAnVGhvbWFzJywgJ0phY2tzb24nLCAnV2hpdGUnLCAnSGFycmlzJywgJ01hcnRpbicsICdUaG9tcHNvbicsICdHYXJjaWEnLCAnTWFydGluZXonLCAnUm9iaW5zb24nLCAnQ2xhcmsnLCAnUm9kcmlndWV6JywgJ0xld2lzJywgJ0xlZScsICdXYWxrZXInLCAnSGFsbCcsICdBbGxlbicsICdZb3VuZycsICdIZXJuYW5kZXonLCAnS2luZycsICdXcmlnaHQnLCAnTG9wZXonLCAnSGlsbCcsICdTY290dCcsICdHcmVlbicsICdBZGFtcycsICdCYWtlcicsICdHb256YWxleicsICdOZWxzb24nLCAnQ2FydGVyJywgJ01pdGNoZWxsJywgJ1BlcmV6JywgJ1JvYmVydHMnLCAnVHVybmVyJywgJ1BoaWxsaXBzJywgJ0NhbXBiZWxsJywgJ1BhcmtlcicsICdFdmFucycsICdFZHdhcmRzJywgJ0NvbGxpbnMnLCAnU3Rld2FydCcsICdTYW5jaGV6JywgJ01vcnJpcycsICdSb2dlcnMnLCAnUmVlZCcsICdDb29rJywgJ01vcmdhbicsICdCZWxsJywgJ011cnBoeScsICdCYWlsZXknLCAnUml2ZXJhJywgJ0Nvb3BlcicsICdSaWNoYXJkc29uJywgJ0NveCcsICdIb3dhcmQnLCAnV2FyZCcsICdUb3JyZXMnLCAnUGV0ZXJzb24nLCAnR3JheScsICdSYW1pcmV6JywgJ0phbWVzJywgJ1dhdHNvbicsICdCcm9va3MnLCAnS2VsbHknLCAnU2FuZGVycycsICdQcmljZScsICdCZW5uZXR0JywgJ1dvb2QnLCAnQmFybmVzJywgJ1Jvc3MnLCAnSGVuZGVyc29uJywgJ0NvbGVtYW4nLCAnSmVua2lucycsICdQZXJyeScsICdQb3dlbGwnLCAnTG9uZycsICdQYXR0ZXJzb24nLCAnSHVnaGVzJywgJ0Zsb3JlcycsICdXYXNoaW5ndG9uJywgJ0J1dGxlcicsICdTaW1tb25zJywgJ0Zvc3RlcicsICdHb256YWxlcycsICdCcnlhbnQnLCAnQWxleGFuZGVyJywgJ1J1c3NlbGwnLCAnR3JpZmZpbicsICdEaWF6JywgJ0hheWVzJywgJ015ZXJzJywgJ0ZvcmQnLCAnSGFtaWx0b24nLCAnR3JhaGFtJywgJ1N1bGxpdmFuJywgJ1dhbGxhY2UnLCAnV29vZHMnLCAnQ29sZScsICdXZXN0JywgJ0pvcmRhbicsICdPd2VucycsICdSZXlub2xkcycsICdGaXNoZXInLCAnRWxsaXMnLCAnSGFycmlzb24nLCAnR2lic29uJywgJ01jRG9uYWxkJywgJ0NydXonLCAnTWFyc2hhbGwnLCAnT3J0aXonLCAnR29tZXonLCAnTXVycmF5JywgJ0ZyZWVtYW4nLCAnV2VsbHMnLCAnV2ViYicsICdTaW1wc29uJywgJ1N0ZXZlbnMnLCAnVHVja2VyJywgJ1BvcnRlcicsICdIdW50ZXInLCAnSGlja3MnLCAnQ3Jhd2ZvcmQnLCAnSGVucnknLCAnQm95ZCcsICdNYXNvbicsICdNb3JhbGVzJywgJ0tlbm5lZHknLCAnV2FycmVuJywgJ0RpeG9uJywgJ1JhbW9zJywgJ1JleWVzJywgJ0J1cm5zJywgJ0dvcmRvbicsICdTaGF3JywgJ0hvbG1lcycsICdSaWNlJywgJ1JvYmVydHNvbicsICdIdW50JywgJ0JsYWNrJywgJ0RhbmllbHMnLCAnUGFsbWVyJywgJ01pbGxzJywgJ05pY2hvbHMnLCAnR3JhbnQnLCAnS25pZ2h0JywgJ0Zlcmd1c29uJywgJ1Jvc2UnLCAnU3RvbmUnLCAnSGF3a2lucycsICdEdW5uJywgJ1BlcmtpbnMnLCAnSHVkc29uJywgJ1NwZW5jZXInLCAnR2FyZG5lcicsICdTdGVwaGVucycsICdQYXluZScsICdQaWVyY2UnLCAnQmVycnknLCAnTWF0dGhld3MnLCAnQXJub2xkJywgJ1dhZ25lcicsICdXaWxsaXMnLCAnUmF5JywgJ1dhdGtpbnMnLCAnT2xzb24nLCAnQ2Fycm9sbCcsICdEdW5jYW4nLCAnU255ZGVyJywgJ0hhcnQnLCAnQ3VubmluZ2hhbScsICdCcmFkbGV5JywgJ0xhbmUnLCAnQW5kcmV3cycsICdSdWl6JywgJ0hhcnBlcicsICdGb3gnLCAnUmlsZXknLCAnQXJtc3Ryb25nJywgJ0NhcnBlbnRlcicsICdXZWF2ZXInLCAnR3JlZW5lJywgJ0xhd3JlbmNlJywgJ0VsbGlvdHQnLCAnQ2hhdmV6JywgJ1NpbXMnLCAnQXVzdGluJywgJ1BldGVycycsICdLZWxsZXknLCAnRnJhbmtsaW4nLCAnTGF3c29uJywgJ0ZpZWxkcycsICdHdXRpZXJyZXonLCAnUnlhbicsICdTY2htaWR0JywgJ0NhcnInLCAnVmFzcXVleicsICdDYXN0aWxsbycsICdXaGVlbGVyJywgJ0NoYXBtYW4nLCAnT2xpdmVyJywgJ01vbnRnb21lcnknLCAnUmljaGFyZHMnLCAnV2lsbGlhbXNvbicsICdKb2huc3RvbicsICdCYW5rcycsICdNZXllcicsICdCaXNob3AnLCAnTWNDb3knLCAnSG93ZWxsJywgJ0FsdmFyZXonLCAnTW9ycmlzb24nLCAnSGFuc2VuJywgJ0Zlcm5hbmRleicsICdHYXJ6YScsICdIYXJ2ZXknLCAnTGl0dGxlJywgJ0J1cnRvbicsICdTdGFubGV5JywgJ05ndXllbicsICdHZW9yZ2UnLCAnSmFjb2JzJywgJ1JlaWQnLCAnS2ltJywgJ0Z1bGxlcicsICdMeW5jaCcsICdEZWFuJywgJ0dpbGJlcnQnLCAnR2FycmV0dCcsICdSb21lcm8nLCAnV2VsY2gnLCAnTGFyc29uJywgJ0ZyYXppZXInLCAnQnVya2UnLCAnSGFuc29uJywgJ0RheScsICdNZW5kb3phJywgJ01vcmVubycsICdCb3dtYW4nLCAnTWVkaW5hJywgJ0Zvd2xlcicsICdCcmV3ZXInLCAnSG9mZm1hbicsICdDYXJsc29uJywgJ1NpbHZhJywgJ1BlYXJzb24nLCAnSG9sbGFuZCcsICdEb3VnbGFzJywgJ0ZsZW1pbmcnLCAnSmVuc2VuJywgJ1ZhcmdhcycsICdCeXJkJywgJ0Rhdmlkc29uJywgJ0hvcGtpbnMnLCAnTWF5JywgJ1RlcnJ5JywgJ0hlcnJlcmEnLCAnV2FkZScsICdTb3RvJywgJ1dhbHRlcnMnLCAnQ3VydGlzJywgJ05lYWwnLCAnQ2FsZHdlbGwnLCAnTG93ZScsICdKZW5uaW5ncycsICdCYXJuZXR0JywgJ0dyYXZlcycsICdKaW1lbmV6JywgJ0hvcnRvbicsICdTaGVsdG9uJywgJ0JhcnJldHQnLCAnT2JyaWVuJywgJ0Nhc3RybycsICdTdXR0b24nLCAnR3JlZ29yeScsICdNY0tpbm5leScsICdMdWNhcycsICdNaWxlcycsICdDcmFpZycsICdSb2RyaXF1ZXonLCAnQ2hhbWJlcnMnLCAnSG9sdCcsICdMYW1iZXJ0JywgJ0ZsZXRjaGVyJywgJ1dhdHRzJywgJ0JhdGVzJywgJ0hhbGUnLCAnUmhvZGVzJywgJ1BlbmEnLCAnQmVjaycsICdOZXdtYW4nLCAnSGF5bmVzJywgJ01jRGFuaWVsJywgJ01lbmRleicsICdCdXNoJywgJ1ZhdWdobicsICdQYXJrcycsICdEYXdzb24nLCAnU2FudGlhZ28nLCAnTm9ycmlzJywgJ0hhcmR5JywgJ0xvdmUnLCAnU3RlZWxlJywgJ0N1cnJ5JywgJ1Bvd2VycycsICdTY2h1bHR6JywgJ0JhcmtlcicsICdHdXptYW4nLCAnUGFnZScsICdNdW5veicsICdCYWxsJywgJ0tlbGxlcicsICdDaGFuZGxlcicsICdXZWJlcicsICdMZW9uYXJkJywgJ1dhbHNoJywgJ0x5b25zJywgJ1JhbXNleScsICdXb2xmZScsICdTY2huZWlkZXInLCAnTXVsbGlucycsICdCZW5zb24nLCAnU2hhcnAnLCAnQm93ZW4nLCAnRGFuaWVsJywgJ0JhcmJlcicsICdDdW1taW5ncycsICdIaW5lcycsICdCYWxkd2luJywgJ0dyaWZmaXRoJywgJ1ZhbGRleicsICdIdWJiYXJkJywgJ1NhbGF6YXInLCAnUmVldmVzJywgJ1dhcm5lcicsICdTdGV2ZW5zb24nLCAnQnVyZ2VzcycsICdTYW50b3MnLCAnVGF0ZScsICdDcm9zcycsICdHYXJuZXInLCAnTWFubicsICdNYWNrJywgJ01vc3MnLCAnVGhvcm50b24nLCAnRGVubmlzJywgJ01jR2VlJywgJ0Zhcm1lcicsICdEZWxnYWRvJywgJ0FndWlsYXInLCAnVmVnYScsICdHbG92ZXInLCAnTWFubmluZycsICdDb2hlbicsICdIYXJtb24nLCAnUm9kZ2VycycsICdSb2JiaW5zJywgJ05ld3RvbicsICdUb2RkJywgJ0JsYWlyJywgJ0hpZ2dpbnMnLCAnSW5ncmFtJywgJ1JlZXNlJywgJ0Nhbm5vbicsICdTdHJpY2tsYW5kJywgJ1Rvd25zZW5kJywgJ1BvdHRlcicsICdHb29kd2luJywgJ1dhbHRvbicsICdSb3dlJywgJ0hhbXB0b24nLCAnT3J0ZWdhJywgJ1BhdHRvbicsICdTd2Fuc29uJywgJ0pvc2VwaCcsICdGcmFuY2lzJywgJ0dvb2RtYW4nLCAnTWFsZG9uYWRvJywgJ1lhdGVzJywgJ0JlY2tlcicsICdFcmlja3NvbicsICdIb2RnZXMnLCAnUmlvcycsICdDb25uZXInLCAnQWRraW5zJywgJ1dlYnN0ZXInLCAnTm9ybWFuJywgJ01hbG9uZScsICdIYW1tb25kJywgJ0Zsb3dlcnMnLCAnQ29iYicsICdNb29keScsICdRdWlubicsICdCbGFrZScsICdNYXh3ZWxsJywgJ1BvcGUnLCAnRmxveWQnLCAnT3Nib3JuZScsICdQYXVsJywgJ01jQ2FydGh5JywgJ0d1ZXJyZXJvJywgJ0xpbmRzZXknLCAnRXN0cmFkYScsICdTYW5kb3ZhbCcsICdHaWJicycsICdUeWxlcicsICdHcm9zcycsICdGaXR6Z2VyYWxkJywgJ1N0b2tlcycsICdEb3lsZScsICdTaGVybWFuJywgJ1NhdW5kZXJzJywgJ1dpc2UnLCAnQ29sb24nLCAnR2lsbCcsICdBbHZhcmFkbycsICdHcmVlcicsICdQYWRpbGxhJywgJ1NpbW9uJywgJ1dhdGVycycsICdOdW5leicsICdCYWxsYXJkJywgJ1NjaHdhcnR6JywgJ01jQnJpZGUnLCAnSG91c3RvbicsICdDaHJpc3RlbnNlbicsICdLbGVpbicsICdQcmF0dCcsICdCcmlnZ3MnLCAnUGFyc29ucycsICdNY0xhdWdobGluJywgJ1ppbW1lcm1hbicsICdGcmVuY2gnLCAnQnVjaGFuYW4nLCAnTW9yYW4nLCAnQ29wZWxhbmQnLCAnUm95JywgJ1BpdHRtYW4nLCAnQnJhZHknLCAnTWNDb3JtaWNrJywgJ0hvbGxvd2F5JywgJ0Jyb2NrJywgJ1Bvb2xlJywgJ0ZyYW5rJywgJ0xvZ2FuJywgJ093ZW4nLCAnQmFzcycsICdNYXJzaCcsICdEcmFrZScsICdXb25nJywgJ0plZmZlcnNvbicsICdQYXJrJywgJ01vcnRvbicsICdBYmJvdHQnLCAnU3BhcmtzJywgJ1BhdHJpY2snLCAnTm9ydG9uJywgJ0h1ZmYnLCAnQ2xheXRvbicsICdNYXNzZXknLCAnTGxveWQnLCAnRmlndWVyb2EnLCAnQ2Fyc29uJywgJ0Jvd2VycycsICdSb2JlcnNvbicsICdCYXJ0b24nLCAnVHJhbicsICdMYW1iJywgJ0hhcnJpbmd0b24nLCAnQ2FzZXknLCAnQm9vbmUnLCAnQ29ydGV6JywgJ0NsYXJrZScsICdNYXRoaXMnLCAnU2luZ2xldG9uJywgJ1dpbGtpbnMnLCAnQ2FpbicsICdCcnlhbicsICdVbmRlcndvb2QnLCAnSG9nYW4nLCAnTWNLZW56aWUnLCAnQ29sbGllcicsICdMdW5hJywgJ1BoZWxwcycsICdNY0d1aXJlJywgJ0FsbGlzb24nLCAnQnJpZGdlcycsICdXaWxrZXJzb24nLCAnTmFzaCcsICdTdW1tZXJzJywgJ0F0a2lucyddLFxuXG4gICAgICAgIC8vIERhdGEgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdW1waXJza3kvY291bnRyeS1saXN0L2Jsb2IvbWFzdGVyL2NvdW50cnkvY2xkci9lbl9VUy9jb3VudHJ5Lmpzb25cbiAgICAgICAgY291bnRyaWVzOiBbe1wibmFtZVwiOlwiQWZnaGFuaXN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiQUZcIn0se1wibmFtZVwiOlwiQWxiYW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBTFwifSx7XCJuYW1lXCI6XCJBbGdlcmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkRaXCJ9LHtcIm5hbWVcIjpcIkFtZXJpY2FuIFNhbW9hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFTXCJ9LHtcIm5hbWVcIjpcIkFuZG9ycmFcIixcImFiYnJldmlhdGlvblwiOlwiQURcIn0se1wibmFtZVwiOlwiQW5nb2xhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFPXCJ9LHtcIm5hbWVcIjpcIkFuZ3VpbGxhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFJXCJ9LHtcIm5hbWVcIjpcIkFudGFyY3RpY2FcIixcImFiYnJldmlhdGlvblwiOlwiQVFcIn0se1wibmFtZVwiOlwiQW50aWd1YSBhbmQgQmFyYnVkYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBR1wifSx7XCJuYW1lXCI6XCJBcmdlbnRpbmFcIixcImFiYnJldmlhdGlvblwiOlwiQVJcIn0se1wibmFtZVwiOlwiQXJtZW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBTVwifSx7XCJuYW1lXCI6XCJBcnViYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBV1wifSx7XCJuYW1lXCI6XCJBdXN0cmFsaWFcIixcImFiYnJldmlhdGlvblwiOlwiQVVcIn0se1wibmFtZVwiOlwiQXVzdHJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBVFwifSx7XCJuYW1lXCI6XCJBemVyYmFpamFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFaXCJ9LHtcIm5hbWVcIjpcIkJhaGFtYXNcIixcImFiYnJldmlhdGlvblwiOlwiQlNcIn0se1wibmFtZVwiOlwiQmFocmFpblwiLFwiYWJicmV2aWF0aW9uXCI6XCJCSFwifSx7XCJuYW1lXCI6XCJCYW5nbGFkZXNoXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJEXCJ9LHtcIm5hbWVcIjpcIkJhcmJhZG9zXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJCXCJ9LHtcIm5hbWVcIjpcIkJlbGFydXNcIixcImFiYnJldmlhdGlvblwiOlwiQllcIn0se1wibmFtZVwiOlwiQmVsZ2l1bVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCRVwifSx7XCJuYW1lXCI6XCJCZWxpemVcIixcImFiYnJldmlhdGlvblwiOlwiQlpcIn0se1wibmFtZVwiOlwiQmVuaW5cIixcImFiYnJldmlhdGlvblwiOlwiQkpcIn0se1wibmFtZVwiOlwiQmVybXVkYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCTVwifSx7XCJuYW1lXCI6XCJCaHV0YW5cIixcImFiYnJldmlhdGlvblwiOlwiQlRcIn0se1wibmFtZVwiOlwiQm9saXZpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCT1wifSx7XCJuYW1lXCI6XCJCb3NuaWEgYW5kIEhlcnplZ292aW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJBXCJ9LHtcIm5hbWVcIjpcIkJvdHN3YW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJXXCJ9LHtcIm5hbWVcIjpcIkJvdXZldCBJc2xhbmRcIixcImFiYnJldmlhdGlvblwiOlwiQlZcIn0se1wibmFtZVwiOlwiQnJhemlsXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJSXCJ9LHtcIm5hbWVcIjpcIkJyaXRpc2ggQW50YXJjdGljIFRlcnJpdG9yeVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCUVwifSx7XCJuYW1lXCI6XCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcIixcImFiYnJldmlhdGlvblwiOlwiSU9cIn0se1wibmFtZVwiOlwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJWR1wifSx7XCJuYW1lXCI6XCJCcnVuZWlcIixcImFiYnJldmlhdGlvblwiOlwiQk5cIn0se1wibmFtZVwiOlwiQnVsZ2FyaWFcIixcImFiYnJldmlhdGlvblwiOlwiQkdcIn0se1wibmFtZVwiOlwiQnVya2luYSBGYXNvXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJGXCJ9LHtcIm5hbWVcIjpcIkJ1cnVuZGlcIixcImFiYnJldmlhdGlvblwiOlwiQklcIn0se1wibmFtZVwiOlwiQ2FtYm9kaWFcIixcImFiYnJldmlhdGlvblwiOlwiS0hcIn0se1wibmFtZVwiOlwiQ2FtZXJvb25cIixcImFiYnJldmlhdGlvblwiOlwiQ01cIn0se1wibmFtZVwiOlwiQ2FuYWRhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNBXCJ9LHtcIm5hbWVcIjpcIkNhbnRvbiBhbmQgRW5kZXJidXJ5IElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiQ1RcIn0se1wibmFtZVwiOlwiQ2FwZSBWZXJkZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDVlwifSx7XCJuYW1lXCI6XCJDYXltYW4gSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJLWVwifSx7XCJuYW1lXCI6XCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcIixcImFiYnJldmlhdGlvblwiOlwiQ0ZcIn0se1wibmFtZVwiOlwiQ2hhZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJURFwifSx7XCJuYW1lXCI6XCJDaGlsZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDTFwifSx7XCJuYW1lXCI6XCJDaGluYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDTlwifSx7XCJuYW1lXCI6XCJDaHJpc3RtYXMgSXNsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNYXCJ9LHtcIm5hbWVcIjpcIkNvY29zIFtLZWVsaW5nXSBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNDXCJ9LHtcIm5hbWVcIjpcIkNvbG9tYmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNPXCJ9LHtcIm5hbWVcIjpcIkNvbW9yb3NcIixcImFiYnJldmlhdGlvblwiOlwiS01cIn0se1wibmFtZVwiOlwiQ29uZ28gLSBCcmF6emF2aWxsZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDR1wifSx7XCJuYW1lXCI6XCJDb25nbyAtIEtpbnNoYXNhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNEXCJ9LHtcIm5hbWVcIjpcIkNvb2sgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJDS1wifSx7XCJuYW1lXCI6XCJDb3N0YSBSaWNhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNSXCJ9LHtcIm5hbWVcIjpcIkNyb2F0aWFcIixcImFiYnJldmlhdGlvblwiOlwiSFJcIn0se1wibmFtZVwiOlwiQ3ViYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDVVwifSx7XCJuYW1lXCI6XCJDeXBydXNcIixcImFiYnJldmlhdGlvblwiOlwiQ1lcIn0se1wibmFtZVwiOlwiQ3plY2ggUmVwdWJsaWNcIixcImFiYnJldmlhdGlvblwiOlwiQ1pcIn0se1wibmFtZVwiOlwiQ8O0dGUgZOKAmUl2b2lyZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDSVwifSx7XCJuYW1lXCI6XCJEZW5tYXJrXCIsXCJhYmJyZXZpYXRpb25cIjpcIkRLXCJ9LHtcIm5hbWVcIjpcIkRqaWJvdXRpXCIsXCJhYmJyZXZpYXRpb25cIjpcIkRKXCJ9LHtcIm5hbWVcIjpcIkRvbWluaWNhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkRNXCJ9LHtcIm5hbWVcIjpcIkRvbWluaWNhbiBSZXB1YmxpY1wiLFwiYWJicmV2aWF0aW9uXCI6XCJET1wifSx7XCJuYW1lXCI6XCJEcm9ubmluZyBNYXVkIExhbmRcIixcImFiYnJldmlhdGlvblwiOlwiTlFcIn0se1wibmFtZVwiOlwiRWFzdCBHZXJtYW55XCIsXCJhYmJyZXZpYXRpb25cIjpcIkREXCJ9LHtcIm5hbWVcIjpcIkVjdWFkb3JcIixcImFiYnJldmlhdGlvblwiOlwiRUNcIn0se1wibmFtZVwiOlwiRWd5cHRcIixcImFiYnJldmlhdGlvblwiOlwiRUdcIn0se1wibmFtZVwiOlwiRWwgU2FsdmFkb3JcIixcImFiYnJldmlhdGlvblwiOlwiU1ZcIn0se1wibmFtZVwiOlwiRXF1YXRvcmlhbCBHdWluZWFcIixcImFiYnJldmlhdGlvblwiOlwiR1FcIn0se1wibmFtZVwiOlwiRXJpdHJlYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJFUlwifSx7XCJuYW1lXCI6XCJFc3RvbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkVFXCJ9LHtcIm5hbWVcIjpcIkV0aGlvcGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkVUXCJ9LHtcIm5hbWVcIjpcIkZhbGtsYW5kIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiRktcIn0se1wibmFtZVwiOlwiRmFyb2UgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJGT1wifSx7XCJuYW1lXCI6XCJGaWppXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZKXCJ9LHtcIm5hbWVcIjpcIkZpbmxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiRklcIn0se1wibmFtZVwiOlwiRnJhbmNlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZSXCJ9LHtcIm5hbWVcIjpcIkZyZW5jaCBHdWlhbmFcIixcImFiYnJldmlhdGlvblwiOlwiR0ZcIn0se1wibmFtZVwiOlwiRnJlbmNoIFBvbHluZXNpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQRlwifSx7XCJuYW1lXCI6XCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcIixcImFiYnJldmlhdGlvblwiOlwiVEZcIn0se1wibmFtZVwiOlwiRnJlbmNoIFNvdXRoZXJuIGFuZCBBbnRhcmN0aWMgVGVycml0b3JpZXNcIixcImFiYnJldmlhdGlvblwiOlwiRlFcIn0se1wibmFtZVwiOlwiR2Fib25cIixcImFiYnJldmlhdGlvblwiOlwiR0FcIn0se1wibmFtZVwiOlwiR2FtYmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdNXCJ9LHtcIm5hbWVcIjpcIkdlb3JnaWFcIixcImFiYnJldmlhdGlvblwiOlwiR0VcIn0se1wibmFtZVwiOlwiR2VybWFueVwiLFwiYWJicmV2aWF0aW9uXCI6XCJERVwifSx7XCJuYW1lXCI6XCJHaGFuYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHSFwifSx7XCJuYW1lXCI6XCJHaWJyYWx0YXJcIixcImFiYnJldmlhdGlvblwiOlwiR0lcIn0se1wibmFtZVwiOlwiR3JlZWNlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdSXCJ9LHtcIm5hbWVcIjpcIkdyZWVubGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJHTFwifSx7XCJuYW1lXCI6XCJHcmVuYWRhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdEXCJ9LHtcIm5hbWVcIjpcIkd1YWRlbG91cGVcIixcImFiYnJldmlhdGlvblwiOlwiR1BcIn0se1wibmFtZVwiOlwiR3VhbVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHVVwifSx7XCJuYW1lXCI6XCJHdWF0ZW1hbGFcIixcImFiYnJldmlhdGlvblwiOlwiR1RcIn0se1wibmFtZVwiOlwiR3Vlcm5zZXlcIixcImFiYnJldmlhdGlvblwiOlwiR0dcIn0se1wibmFtZVwiOlwiR3VpbmVhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdOXCJ9LHtcIm5hbWVcIjpcIkd1aW5lYS1CaXNzYXVcIixcImFiYnJldmlhdGlvblwiOlwiR1dcIn0se1wibmFtZVwiOlwiR3V5YW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdZXCJ9LHtcIm5hbWVcIjpcIkhhaXRpXCIsXCJhYmJyZXZpYXRpb25cIjpcIkhUXCJ9LHtcIm5hbWVcIjpcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJITVwifSx7XCJuYW1lXCI6XCJIb25kdXJhc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJITlwifSx7XCJuYW1lXCI6XCJIb25nIEtvbmcgU0FSIENoaW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkhLXCJ9LHtcIm5hbWVcIjpcIkh1bmdhcnlcIixcImFiYnJldmlhdGlvblwiOlwiSFVcIn0se1wibmFtZVwiOlwiSWNlbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJJU1wifSx7XCJuYW1lXCI6XCJJbmRpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJJTlwifSx7XCJuYW1lXCI6XCJJbmRvbmVzaWFcIixcImFiYnJldmlhdGlvblwiOlwiSURcIn0se1wibmFtZVwiOlwiSXJhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJJUlwifSx7XCJuYW1lXCI6XCJJcmFxXCIsXCJhYmJyZXZpYXRpb25cIjpcIklRXCJ9LHtcIm5hbWVcIjpcIklyZWxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiSUVcIn0se1wibmFtZVwiOlwiSXNsZSBvZiBNYW5cIixcImFiYnJldmlhdGlvblwiOlwiSU1cIn0se1wibmFtZVwiOlwiSXNyYWVsXCIsXCJhYmJyZXZpYXRpb25cIjpcIklMXCJ9LHtcIm5hbWVcIjpcIkl0YWx5XCIsXCJhYmJyZXZpYXRpb25cIjpcIklUXCJ9LHtcIm5hbWVcIjpcIkphbWFpY2FcIixcImFiYnJldmlhdGlvblwiOlwiSk1cIn0se1wibmFtZVwiOlwiSmFwYW5cIixcImFiYnJldmlhdGlvblwiOlwiSlBcIn0se1wibmFtZVwiOlwiSmVyc2V5XCIsXCJhYmJyZXZpYXRpb25cIjpcIkpFXCJ9LHtcIm5hbWVcIjpcIkpvaG5zdG9uIElzbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJKVFwifSx7XCJuYW1lXCI6XCJKb3JkYW5cIixcImFiYnJldmlhdGlvblwiOlwiSk9cIn0se1wibmFtZVwiOlwiS2F6YWtoc3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJLWlwifSx7XCJuYW1lXCI6XCJLZW55YVwiLFwiYWJicmV2aWF0aW9uXCI6XCJLRVwifSx7XCJuYW1lXCI6XCJLaXJpYmF0aVwiLFwiYWJicmV2aWF0aW9uXCI6XCJLSVwifSx7XCJuYW1lXCI6XCJLdXdhaXRcIixcImFiYnJldmlhdGlvblwiOlwiS1dcIn0se1wibmFtZVwiOlwiS3lyZ3l6c3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJLR1wifSx7XCJuYW1lXCI6XCJMYW9zXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxBXCJ9LHtcIm5hbWVcIjpcIkxhdHZpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMVlwifSx7XCJuYW1lXCI6XCJMZWJhbm9uXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxCXCJ9LHtcIm5hbWVcIjpcIkxlc290aG9cIixcImFiYnJldmlhdGlvblwiOlwiTFNcIn0se1wibmFtZVwiOlwiTGliZXJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMUlwifSx7XCJuYW1lXCI6XCJMaWJ5YVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMWVwifSx7XCJuYW1lXCI6XCJMaWVjaHRlbnN0ZWluXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxJXCJ9LHtcIm5hbWVcIjpcIkxpdGh1YW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMVFwifSx7XCJuYW1lXCI6XCJMdXhlbWJvdXJnXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxVXCJ9LHtcIm5hbWVcIjpcIk1hY2F1IFNBUiBDaGluYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNT1wifSx7XCJuYW1lXCI6XCJNYWNlZG9uaWFcIixcImFiYnJldmlhdGlvblwiOlwiTUtcIn0se1wibmFtZVwiOlwiTWFkYWdhc2NhclwiLFwiYWJicmV2aWF0aW9uXCI6XCJNR1wifSx7XCJuYW1lXCI6XCJNYWxhd2lcIixcImFiYnJldmlhdGlvblwiOlwiTVdcIn0se1wibmFtZVwiOlwiTWFsYXlzaWFcIixcImFiYnJldmlhdGlvblwiOlwiTVlcIn0se1wibmFtZVwiOlwiTWFsZGl2ZXNcIixcImFiYnJldmlhdGlvblwiOlwiTVZcIn0se1wibmFtZVwiOlwiTWFsaVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNTFwifSx7XCJuYW1lXCI6XCJNYWx0YVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNVFwifSx7XCJuYW1lXCI6XCJNYXJzaGFsbCBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1IXCJ9LHtcIm5hbWVcIjpcIk1hcnRpbmlxdWVcIixcImFiYnJldmlhdGlvblwiOlwiTVFcIn0se1wibmFtZVwiOlwiTWF1cml0YW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNUlwifSx7XCJuYW1lXCI6XCJNYXVyaXRpdXNcIixcImFiYnJldmlhdGlvblwiOlwiTVVcIn0se1wibmFtZVwiOlwiTWF5b3R0ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJZVFwifSx7XCJuYW1lXCI6XCJNZXRyb3BvbGl0YW4gRnJhbmNlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZYXCJ9LHtcIm5hbWVcIjpcIk1leGljb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNWFwifSx7XCJuYW1lXCI6XCJNaWNyb25lc2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZNXCJ9LHtcIm5hbWVcIjpcIk1pZHdheSBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1JXCJ9LHtcIm5hbWVcIjpcIk1vbGRvdmFcIixcImFiYnJldmlhdGlvblwiOlwiTURcIn0se1wibmFtZVwiOlwiTW9uYWNvXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1DXCJ9LHtcIm5hbWVcIjpcIk1vbmdvbGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1OXCJ9LHtcIm5hbWVcIjpcIk1vbnRlbmVncm9cIixcImFiYnJldmlhdGlvblwiOlwiTUVcIn0se1wibmFtZVwiOlwiTW9udHNlcnJhdFwiLFwiYWJicmV2aWF0aW9uXCI6XCJNU1wifSx7XCJuYW1lXCI6XCJNb3JvY2NvXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1BXCJ9LHtcIm5hbWVcIjpcIk1vemFtYmlxdWVcIixcImFiYnJldmlhdGlvblwiOlwiTVpcIn0se1wibmFtZVwiOlwiTXlhbm1hciBbQnVybWFdXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1NXCJ9LHtcIm5hbWVcIjpcIk5hbWliaWFcIixcImFiYnJldmlhdGlvblwiOlwiTkFcIn0se1wibmFtZVwiOlwiTmF1cnVcIixcImFiYnJldmlhdGlvblwiOlwiTlJcIn0se1wibmFtZVwiOlwiTmVwYWxcIixcImFiYnJldmlhdGlvblwiOlwiTlBcIn0se1wibmFtZVwiOlwiTmV0aGVybGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiTkxcIn0se1wibmFtZVwiOlwiTmV0aGVybGFuZHMgQW50aWxsZXNcIixcImFiYnJldmlhdGlvblwiOlwiQU5cIn0se1wibmFtZVwiOlwiTmV1dHJhbCBab25lXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5UXCJ9LHtcIm5hbWVcIjpcIk5ldyBDYWxlZG9uaWFcIixcImFiYnJldmlhdGlvblwiOlwiTkNcIn0se1wibmFtZVwiOlwiTmV3IFplYWxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiTlpcIn0se1wibmFtZVwiOlwiTmljYXJhZ3VhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5JXCJ9LHtcIm5hbWVcIjpcIk5pZ2VyXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5FXCJ9LHtcIm5hbWVcIjpcIk5pZ2VyaWFcIixcImFiYnJldmlhdGlvblwiOlwiTkdcIn0se1wibmFtZVwiOlwiTml1ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJOVVwifSx7XCJuYW1lXCI6XCJOb3Jmb2xrIElzbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJORlwifSx7XCJuYW1lXCI6XCJOb3J0aCBLb3JlYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJLUFwifSx7XCJuYW1lXCI6XCJOb3J0aCBWaWV0bmFtXCIsXCJhYmJyZXZpYXRpb25cIjpcIlZEXCJ9LHtcIm5hbWVcIjpcIk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNUFwifSx7XCJuYW1lXCI6XCJOb3J3YXlcIixcImFiYnJldmlhdGlvblwiOlwiTk9cIn0se1wibmFtZVwiOlwiT21hblwiLFwiYWJicmV2aWF0aW9uXCI6XCJPTVwifSx7XCJuYW1lXCI6XCJQYWNpZmljIElzbGFuZHMgVHJ1c3QgVGVycml0b3J5XCIsXCJhYmJyZXZpYXRpb25cIjpcIlBDXCJ9LHtcIm5hbWVcIjpcIlBha2lzdGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBLXCJ9LHtcIm5hbWVcIjpcIlBhbGF1XCIsXCJhYmJyZXZpYXRpb25cIjpcIlBXXCJ9LHtcIm5hbWVcIjpcIlBhbGVzdGluaWFuIFRlcnJpdG9yaWVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBTXCJ9LHtcIm5hbWVcIjpcIlBhbmFtYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQQVwifSx7XCJuYW1lXCI6XCJQYW5hbWEgQ2FuYWwgWm9uZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQWlwifSx7XCJuYW1lXCI6XCJQYXB1YSBOZXcgR3VpbmVhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBHXCJ9LHtcIm5hbWVcIjpcIlBhcmFndWF5XCIsXCJhYmJyZXZpYXRpb25cIjpcIlBZXCJ9LHtcIm5hbWVcIjpcIlBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgWWVtZW5cIixcImFiYnJldmlhdGlvblwiOlwiWURcIn0se1wibmFtZVwiOlwiUGVydVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQRVwifSx7XCJuYW1lXCI6XCJQaGlsaXBwaW5lc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJQSFwifSx7XCJuYW1lXCI6XCJQaXRjYWlybiBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBOXCJ9LHtcIm5hbWVcIjpcIlBvbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJQTFwifSx7XCJuYW1lXCI6XCJQb3J0dWdhbFwiLFwiYWJicmV2aWF0aW9uXCI6XCJQVFwifSx7XCJuYW1lXCI6XCJQdWVydG8gUmljb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJQUlwifSx7XCJuYW1lXCI6XCJRYXRhclwiLFwiYWJicmV2aWF0aW9uXCI6XCJRQVwifSx7XCJuYW1lXCI6XCJSb21hbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlJPXCJ9LHtcIm5hbWVcIjpcIlJ1c3NpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJSVVwifSx7XCJuYW1lXCI6XCJSd2FuZGFcIixcImFiYnJldmlhdGlvblwiOlwiUldcIn0se1wibmFtZVwiOlwiUsOpdW5pb25cIixcImFiYnJldmlhdGlvblwiOlwiUkVcIn0se1wibmFtZVwiOlwiU2FpbnQgQmFydGjDqWxlbXlcIixcImFiYnJldmlhdGlvblwiOlwiQkxcIn0se1wibmFtZVwiOlwiU2FpbnQgSGVsZW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNIXCJ9LHtcIm5hbWVcIjpcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJLTlwifSx7XCJuYW1lXCI6XCJTYWludCBMdWNpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMQ1wifSx7XCJuYW1lXCI6XCJTYWludCBNYXJ0aW5cIixcImFiYnJldmlhdGlvblwiOlwiTUZcIn0se1wibmFtZVwiOlwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblwiLFwiYWJicmV2aWF0aW9uXCI6XCJQTVwifSx7XCJuYW1lXCI6XCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJWQ1wifSx7XCJuYW1lXCI6XCJTYW1vYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJXU1wifSx7XCJuYW1lXCI6XCJTYW4gTWFyaW5vXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNNXCJ9LHtcIm5hbWVcIjpcIlNhdWRpIEFyYWJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTQVwifSx7XCJuYW1lXCI6XCJTZW5lZ2FsXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNOXCJ9LHtcIm5hbWVcIjpcIlNlcmJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJSU1wifSx7XCJuYW1lXCI6XCJTZXJiaWEgYW5kIE1vbnRlbmVncm9cIixcImFiYnJldmlhdGlvblwiOlwiQ1NcIn0se1wibmFtZVwiOlwiU2V5Y2hlbGxlc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJTQ1wifSx7XCJuYW1lXCI6XCJTaWVycmEgTGVvbmVcIixcImFiYnJldmlhdGlvblwiOlwiU0xcIn0se1wibmFtZVwiOlwiU2luZ2Fwb3JlXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNHXCJ9LHtcIm5hbWVcIjpcIlNsb3Zha2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNLXCJ9LHtcIm5hbWVcIjpcIlNsb3ZlbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNJXCJ9LHtcIm5hbWVcIjpcIlNvbG9tb24gSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJTQlwifSx7XCJuYW1lXCI6XCJTb21hbGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNPXCJ9LHtcIm5hbWVcIjpcIlNvdXRoIEFmcmljYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJaQVwifSx7XCJuYW1lXCI6XCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJHU1wifSx7XCJuYW1lXCI6XCJTb3V0aCBLb3JlYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJLUlwifSx7XCJuYW1lXCI6XCJTcGFpblwiLFwiYWJicmV2aWF0aW9uXCI6XCJFU1wifSx7XCJuYW1lXCI6XCJTcmkgTGFua2FcIixcImFiYnJldmlhdGlvblwiOlwiTEtcIn0se1wibmFtZVwiOlwiU3VkYW5cIixcImFiYnJldmlhdGlvblwiOlwiU0RcIn0se1wibmFtZVwiOlwiU3VyaW5hbWVcIixcImFiYnJldmlhdGlvblwiOlwiU1JcIn0se1wibmFtZVwiOlwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblwiLFwiYWJicmV2aWF0aW9uXCI6XCJTSlwifSx7XCJuYW1lXCI6XCJTd2F6aWxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiU1pcIn0se1wibmFtZVwiOlwiU3dlZGVuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNFXCJ9LHtcIm5hbWVcIjpcIlN3aXR6ZXJsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNIXCJ9LHtcIm5hbWVcIjpcIlN5cmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNZXCJ9LHtcIm5hbWVcIjpcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTVFwifSx7XCJuYW1lXCI6XCJUYWl3YW5cIixcImFiYnJldmlhdGlvblwiOlwiVFdcIn0se1wibmFtZVwiOlwiVGFqaWtpc3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJUSlwifSx7XCJuYW1lXCI6XCJUYW56YW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUWlwifSx7XCJuYW1lXCI6XCJUaGFpbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJUSFwifSx7XCJuYW1lXCI6XCJUaW1vci1MZXN0ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUTFwifSx7XCJuYW1lXCI6XCJUb2dvXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRHXCJ9LHtcIm5hbWVcIjpcIlRva2VsYXVcIixcImFiYnJldmlhdGlvblwiOlwiVEtcIn0se1wibmFtZVwiOlwiVG9uZ2FcIixcImFiYnJldmlhdGlvblwiOlwiVE9cIn0se1wibmFtZVwiOlwiVHJpbmlkYWQgYW5kIFRvYmFnb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJUVFwifSx7XCJuYW1lXCI6XCJUdW5pc2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlROXCJ9LHtcIm5hbWVcIjpcIlR1cmtleVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUUlwifSx7XCJuYW1lXCI6XCJUdXJrbWVuaXN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiVE1cIn0se1wibmFtZVwiOlwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRDXCJ9LHtcIm5hbWVcIjpcIlR1dmFsdVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUVlwifSx7XCJuYW1lXCI6XCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiVU1cIn0se1wibmFtZVwiOlwiVS5TLiBNaXNjZWxsYW5lb3VzIFBhY2lmaWMgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJQVVwifSx7XCJuYW1lXCI6XCJVLlMuIFZpcmdpbiBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlZJXCJ9LHtcIm5hbWVcIjpcIlVnYW5kYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJVR1wifSx7XCJuYW1lXCI6XCJVa3JhaW5lXCIsXCJhYmJyZXZpYXRpb25cIjpcIlVBXCJ9LHtcIm5hbWVcIjpcIlVuaW9uIG9mIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWNzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNVXCJ9LHtcIm5hbWVcIjpcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFFXCJ9LHtcIm5hbWVcIjpcIlVuaXRlZCBLaW5nZG9tXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdCXCJ9LHtcIm5hbWVcIjpcIlVuaXRlZCBTdGF0ZXNcIixcImFiYnJldmlhdGlvblwiOlwiVVNcIn0se1wibmFtZVwiOlwiVW5rbm93biBvciBJbnZhbGlkIFJlZ2lvblwiLFwiYWJicmV2aWF0aW9uXCI6XCJaWlwifSx7XCJuYW1lXCI6XCJVcnVndWF5XCIsXCJhYmJyZXZpYXRpb25cIjpcIlVZXCJ9LHtcIm5hbWVcIjpcIlV6YmVraXN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiVVpcIn0se1wibmFtZVwiOlwiVmFudWF0dVwiLFwiYWJicmV2aWF0aW9uXCI6XCJWVVwifSx7XCJuYW1lXCI6XCJWYXRpY2FuIENpdHlcIixcImFiYnJldmlhdGlvblwiOlwiVkFcIn0se1wibmFtZVwiOlwiVmVuZXp1ZWxhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlZFXCJ9LHtcIm5hbWVcIjpcIlZpZXRuYW1cIixcImFiYnJldmlhdGlvblwiOlwiVk5cIn0se1wibmFtZVwiOlwiV2FrZSBJc2xhbmRcIixcImFiYnJldmlhdGlvblwiOlwiV0tcIn0se1wibmFtZVwiOlwiV2FsbGlzIGFuZCBGdXR1bmFcIixcImFiYnJldmlhdGlvblwiOlwiV0ZcIn0se1wibmFtZVwiOlwiV2VzdGVybiBTYWhhcmFcIixcImFiYnJldmlhdGlvblwiOlwiRUhcIn0se1wibmFtZVwiOlwiWWVtZW5cIixcImFiYnJldmlhdGlvblwiOlwiWUVcIn0se1wibmFtZVwiOlwiWmFtYmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlpNXCJ9LHtcIm5hbWVcIjpcIlppbWJhYndlXCIsXCJhYmJyZXZpYXRpb25cIjpcIlpXXCJ9LHtcIm5hbWVcIjpcIsOFbGFuZCBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFYXCJ9XSxcblxuICAgICAgICBwcm92aW5jZXM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnQWxiZXJ0YScsIGFiYnJldmlhdGlvbjogJ0FCJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0JyaXRpc2ggQ29sdW1iaWEnLCBhYmJyZXZpYXRpb246ICdCQyd9LFxuICAgICAgICAgICAge25hbWU6ICdNYW5pdG9iYScsIGFiYnJldmlhdGlvbjogJ01CJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldyBCcnVuc3dpY2snLCBhYmJyZXZpYXRpb246ICdOQid9LFxuICAgICAgICAgICAge25hbWU6ICdOZXdmb3VuZGxhbmQgYW5kIExhYnJhZG9yJywgYWJicmV2aWF0aW9uOiAnTkwnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTm92YSBTY290aWEnLCBhYmJyZXZpYXRpb246ICdOUyd9LFxuICAgICAgICAgICAge25hbWU6ICdPbnRhcmlvJywgYWJicmV2aWF0aW9uOiAnT04nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUHJpbmNlIEVkd2FyZCBJc2xhbmQnLCBhYmJyZXZpYXRpb246ICdQRSd9LFxuICAgICAgICAgICAge25hbWU6ICdRdWViZWMnLCBhYmJyZXZpYXRpb246ICdRQyd9LFxuICAgICAgICAgICAge25hbWU6ICdTYXNrYXRjaGV3YW4nLCBhYmJyZXZpYXRpb246ICdTSyd9LFxuXG4gICAgICAgICAgICAvLyBUaGUgY2FzZSBjb3VsZCBiZSBtYWRlIHRoYXQgdGhlIGZvbGxvd2luZyBhcmUgbm90IGFjdHVhbGx5IHByb3ZpbmNlc1xuICAgICAgICAgICAgLy8gc2luY2UgdGhleSBhcmUgdGVjaG5pY2FsbHkgY29uc2lkZXJlZCBcInRlcnJpdG9yaWVzXCIgaG93ZXZlciB0aGV5IGFsbFxuICAgICAgICAgICAgLy8gbG9vayB0aGUgc2FtZSBvbiBhbiBlbnZlbG9wZSFcbiAgICAgICAgICAgIHtuYW1lOiAnTm9ydGh3ZXN0IFRlcnJpdG9yaWVzJywgYWJicmV2aWF0aW9uOiAnTlQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTnVuYXZ1dCcsIGFiYnJldmlhdGlvbjogJ05VJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1l1a29uJywgYWJicmV2aWF0aW9uOiAnWVQnfVxuICAgICAgICBdLFxuXG4gICAgICAgIHVzX3N0YXRlc19hbmRfZGM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnQWxhYmFtYScsIGFiYnJldmlhdGlvbjogJ0FMJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0FsYXNrYScsIGFiYnJldmlhdGlvbjogJ0FLJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0FyaXpvbmEnLCBhYmJyZXZpYXRpb246ICdBWid9LFxuICAgICAgICAgICAge25hbWU6ICdBcmthbnNhcycsIGFiYnJldmlhdGlvbjogJ0FSJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0NhbGlmb3JuaWEnLCBhYmJyZXZpYXRpb246ICdDQSd9LFxuICAgICAgICAgICAge25hbWU6ICdDb2xvcmFkbycsIGFiYnJldmlhdGlvbjogJ0NPJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0Nvbm5lY3RpY3V0JywgYWJicmV2aWF0aW9uOiAnQ1QnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnRGVsYXdhcmUnLCBhYmJyZXZpYXRpb246ICdERSd9LFxuICAgICAgICAgICAge25hbWU6ICdEaXN0cmljdCBvZiBDb2x1bWJpYScsIGFiYnJldmlhdGlvbjogJ0RDJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0Zsb3JpZGEnLCBhYmJyZXZpYXRpb246ICdGTCd9LFxuICAgICAgICAgICAge25hbWU6ICdHZW9yZ2lhJywgYWJicmV2aWF0aW9uOiAnR0EnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSGF3YWlpJywgYWJicmV2aWF0aW9uOiAnSEknfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSWRhaG8nLCBhYmJyZXZpYXRpb246ICdJRCd9LFxuICAgICAgICAgICAge25hbWU6ICdJbGxpbm9pcycsIGFiYnJldmlhdGlvbjogJ0lMJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0luZGlhbmEnLCBhYmJyZXZpYXRpb246ICdJTid9LFxuICAgICAgICAgICAge25hbWU6ICdJb3dhJywgYWJicmV2aWF0aW9uOiAnSUEnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnS2Fuc2FzJywgYWJicmV2aWF0aW9uOiAnS1MnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnS2VudHVja3knLCBhYmJyZXZpYXRpb246ICdLWSd9LFxuICAgICAgICAgICAge25hbWU6ICdMb3Vpc2lhbmEnLCBhYmJyZXZpYXRpb246ICdMQSd9LFxuICAgICAgICAgICAge25hbWU6ICdNYWluZScsIGFiYnJldmlhdGlvbjogJ01FJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01hcnlsYW5kJywgYWJicmV2aWF0aW9uOiAnTUQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWFzc2FjaHVzZXR0cycsIGFiYnJldmlhdGlvbjogJ01BJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01pY2hpZ2FuJywgYWJicmV2aWF0aW9uOiAnTUknfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWlubmVzb3RhJywgYWJicmV2aWF0aW9uOiAnTU4nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWlzc2lzc2lwcGknLCBhYmJyZXZpYXRpb246ICdNUyd9LFxuICAgICAgICAgICAge25hbWU6ICdNaXNzb3VyaScsIGFiYnJldmlhdGlvbjogJ01PJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01vbnRhbmEnLCBhYmJyZXZpYXRpb246ICdNVCd9LFxuICAgICAgICAgICAge25hbWU6ICdOZWJyYXNrYScsIGFiYnJldmlhdGlvbjogJ05FJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldmFkYScsIGFiYnJldmlhdGlvbjogJ05WJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldyBIYW1wc2hpcmUnLCBhYmJyZXZpYXRpb246ICdOSCd9LFxuICAgICAgICAgICAge25hbWU6ICdOZXcgSmVyc2V5JywgYWJicmV2aWF0aW9uOiAnTkonfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTmV3IE1leGljbycsIGFiYnJldmlhdGlvbjogJ05NJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldyBZb3JrJywgYWJicmV2aWF0aW9uOiAnTlknfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTm9ydGggQ2Fyb2xpbmEnLCBhYmJyZXZpYXRpb246ICdOQyd9LFxuICAgICAgICAgICAge25hbWU6ICdOb3J0aCBEYWtvdGEnLCBhYmJyZXZpYXRpb246ICdORCd9LFxuICAgICAgICAgICAge25hbWU6ICdPaGlvJywgYWJicmV2aWF0aW9uOiAnT0gnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnT2tsYWhvbWEnLCBhYmJyZXZpYXRpb246ICdPSyd9LFxuICAgICAgICAgICAge25hbWU6ICdPcmVnb24nLCBhYmJyZXZpYXRpb246ICdPUid9LFxuICAgICAgICAgICAge25hbWU6ICdQZW5uc3lsdmFuaWEnLCBhYmJyZXZpYXRpb246ICdQQSd9LFxuICAgICAgICAgICAge25hbWU6ICdSaG9kZSBJc2xhbmQnLCBhYmJyZXZpYXRpb246ICdSSSd9LFxuICAgICAgICAgICAge25hbWU6ICdTb3V0aCBDYXJvbGluYScsIGFiYnJldmlhdGlvbjogJ1NDJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1NvdXRoIERha290YScsIGFiYnJldmlhdGlvbjogJ1NEJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1Rlbm5lc3NlZScsIGFiYnJldmlhdGlvbjogJ1ROJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1RleGFzJywgYWJicmV2aWF0aW9uOiAnVFgnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVXRhaCcsIGFiYnJldmlhdGlvbjogJ1VUJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1Zlcm1vbnQnLCBhYmJyZXZpYXRpb246ICdWVCd9LFxuICAgICAgICAgICAge25hbWU6ICdWaXJnaW5pYScsIGFiYnJldmlhdGlvbjogJ1ZBJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1dhc2hpbmd0b24nLCBhYmJyZXZpYXRpb246ICdXQSd9LFxuICAgICAgICAgICAge25hbWU6ICdXZXN0IFZpcmdpbmlhJywgYWJicmV2aWF0aW9uOiAnV1YnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnV2lzY29uc2luJywgYWJicmV2aWF0aW9uOiAnV0knfSxcbiAgICAgICAgICAgIHtuYW1lOiAnV3lvbWluZycsIGFiYnJldmlhdGlvbjogJ1dZJ31cbiAgICAgICAgXSxcblxuICAgICAgICB0ZXJyaXRvcmllczogW1xuICAgICAgICAgICAge25hbWU6ICdBbWVyaWNhbiBTYW1vYScsIGFiYnJldmlhdGlvbjogJ0FTJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0ZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYScsIGFiYnJldmlhdGlvbjogJ0ZNJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0d1YW0nLCBhYmJyZXZpYXRpb246ICdHVSd9LFxuICAgICAgICAgICAge25hbWU6ICdNYXJzaGFsbCBJc2xhbmRzJywgYWJicmV2aWF0aW9uOiAnTUgnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzJywgYWJicmV2aWF0aW9uOiAnTVAnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUHVlcnRvIFJpY28nLCBhYmJyZXZpYXRpb246ICdQUid9LFxuICAgICAgICAgICAge25hbWU6ICdWaXJnaW4gSXNsYW5kcywgVS5TLicsIGFiYnJldmlhdGlvbjogJ1ZJJ31cbiAgICAgICAgXSxcblxuICAgICAgICBhcm1lZF9mb3JjZXM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnQXJtZWQgRm9yY2VzIEV1cm9wZScsIGFiYnJldmlhdGlvbjogJ0FFJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0FybWVkIEZvcmNlcyBQYWNpZmljJywgYWJicmV2aWF0aW9uOiAnQVAnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQXJtZWQgRm9yY2VzIHRoZSBBbWVyaWNhcycsIGFiYnJldmlhdGlvbjogJ0FBJ31cbiAgICAgICAgXSxcblxuICAgICAgICBzdHJlZXRfc3VmZml4ZXM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnQXZlbnVlJywgYWJicmV2aWF0aW9uOiAnQXZlJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0JvdWxldmFyZCcsIGFiYnJldmlhdGlvbjogJ0JsdmQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQ2VudGVyJywgYWJicmV2aWF0aW9uOiAnQ3RyJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0NpcmNsZScsIGFiYnJldmlhdGlvbjogJ0Npcid9LFxuICAgICAgICAgICAge25hbWU6ICdDb3VydCcsIGFiYnJldmlhdGlvbjogJ0N0J30sXG4gICAgICAgICAgICB7bmFtZTogJ0RyaXZlJywgYWJicmV2aWF0aW9uOiAnRHInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnRXh0ZW5zaW9uJywgYWJicmV2aWF0aW9uOiAnRXh0J30sXG4gICAgICAgICAgICB7bmFtZTogJ0dsZW4nLCBhYmJyZXZpYXRpb246ICdHbG4nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnR3JvdmUnLCBhYmJyZXZpYXRpb246ICdHcnYnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSGVpZ2h0cycsIGFiYnJldmlhdGlvbjogJ0h0cyd9LFxuICAgICAgICAgICAge25hbWU6ICdIaWdod2F5JywgYWJicmV2aWF0aW9uOiAnSHd5J30sXG4gICAgICAgICAgICB7bmFtZTogJ0p1bmN0aW9uJywgYWJicmV2aWF0aW9uOiAnSmN0J30sXG4gICAgICAgICAgICB7bmFtZTogJ0tleScsIGFiYnJldmlhdGlvbjogJ0tleSd9LFxuICAgICAgICAgICAge25hbWU6ICdMYW5lJywgYWJicmV2aWF0aW9uOiAnTG4nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTG9vcCcsIGFiYnJldmlhdGlvbjogJ0xvb3AnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWFub3InLCBhYmJyZXZpYXRpb246ICdNbnInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWlsbCcsIGFiYnJldmlhdGlvbjogJ01pbGwnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGFyaycsIGFiYnJldmlhdGlvbjogJ1BhcmsnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGFya3dheScsIGFiYnJldmlhdGlvbjogJ1Brd3knfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGFzcycsIGFiYnJldmlhdGlvbjogJ1Bhc3MnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGF0aCcsIGFiYnJldmlhdGlvbjogJ1BhdGgnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGlrZScsIGFiYnJldmlhdGlvbjogJ1Bpa2UnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGxhY2UnLCBhYmJyZXZpYXRpb246ICdQbCd9LFxuICAgICAgICAgICAge25hbWU6ICdQbGF6YScsIGFiYnJldmlhdGlvbjogJ1Bseid9LFxuICAgICAgICAgICAge25hbWU6ICdQb2ludCcsIGFiYnJldmlhdGlvbjogJ1B0J30sXG4gICAgICAgICAgICB7bmFtZTogJ1JpZGdlJywgYWJicmV2aWF0aW9uOiAnUmRnJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1JpdmVyJywgYWJicmV2aWF0aW9uOiAnUml2J30sXG4gICAgICAgICAgICB7bmFtZTogJ1JvYWQnLCBhYmJyZXZpYXRpb246ICdSZCd9LFxuICAgICAgICAgICAge25hbWU6ICdTcXVhcmUnLCBhYmJyZXZpYXRpb246ICdTcSd9LFxuICAgICAgICAgICAge25hbWU6ICdTdHJlZXQnLCBhYmJyZXZpYXRpb246ICdTdCd9LFxuICAgICAgICAgICAge25hbWU6ICdUZXJyYWNlJywgYWJicmV2aWF0aW9uOiAnVGVyJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1RyYWlsJywgYWJicmV2aWF0aW9uOiAnVHJsJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1R1cm5waWtlJywgYWJicmV2aWF0aW9uOiAnVHBrZSd9LFxuICAgICAgICAgICAge25hbWU6ICdWaWV3JywgYWJicmV2aWF0aW9uOiAnVncnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnV2F5JywgYWJicmV2aWF0aW9uOiAnV2F5J31cbiAgICAgICAgXSxcblxuICAgICAgICBtb250aHM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnSmFudWFyeScsIHNob3J0X25hbWU6ICdKYW4nLCBudW1lcmljOiAnMDEnLCBkYXlzOiAzMX0sXG4gICAgICAgICAgICAvLyBOb3QgbWVzc2luZyB3aXRoIGxlYXAgeWVhcnMuLi5cbiAgICAgICAgICAgIHtuYW1lOiAnRmVicnVhcnknLCBzaG9ydF9uYW1lOiAnRmViJywgbnVtZXJpYzogJzAyJywgZGF5czogMjh9LFxuICAgICAgICAgICAge25hbWU6ICdNYXJjaCcsIHNob3J0X25hbWU6ICdNYXInLCBudW1lcmljOiAnMDMnLCBkYXlzOiAzMX0sXG4gICAgICAgICAgICB7bmFtZTogJ0FwcmlsJywgc2hvcnRfbmFtZTogJ0FwcicsIG51bWVyaWM6ICcwNCcsIGRheXM6IDMwfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWF5Jywgc2hvcnRfbmFtZTogJ01heScsIG51bWVyaWM6ICcwNScsIGRheXM6IDMxfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSnVuZScsIHNob3J0X25hbWU6ICdKdW4nLCBudW1lcmljOiAnMDYnLCBkYXlzOiAzMH0sXG4gICAgICAgICAgICB7bmFtZTogJ0p1bHknLCBzaG9ydF9uYW1lOiAnSnVsJywgbnVtZXJpYzogJzA3JywgZGF5czogMzF9LFxuICAgICAgICAgICAge25hbWU6ICdBdWd1c3QnLCBzaG9ydF9uYW1lOiAnQXVnJywgbnVtZXJpYzogJzA4JywgZGF5czogMzF9LFxuICAgICAgICAgICAge25hbWU6ICdTZXB0ZW1iZXInLCBzaG9ydF9uYW1lOiAnU2VwJywgbnVtZXJpYzogJzA5JywgZGF5czogMzB9LFxuICAgICAgICAgICAge25hbWU6ICdPY3RvYmVyJywgc2hvcnRfbmFtZTogJ09jdCcsIG51bWVyaWM6ICcxMCcsIGRheXM6IDMxfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTm92ZW1iZXInLCBzaG9ydF9uYW1lOiAnTm92JywgbnVtZXJpYzogJzExJywgZGF5czogMzB9LFxuICAgICAgICAgICAge25hbWU6ICdEZWNlbWJlcicsIHNob3J0X25hbWU6ICdEZWMnLCBudW1lcmljOiAnMTInLCBkYXlzOiAzMX1cbiAgICAgICAgXSxcblxuICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JhbmtfY2FyZF9udW1iZXIjSXNzdWVyX2lkZW50aWZpY2F0aW9uX251bWJlcl8uMjhJSU4uMjlcbiAgICAgICAgY2NfdHlwZXM6IFtcbiAgICAgICAgICAgIHtuYW1lOiBcIkFtZXJpY2FuIEV4cHJlc3NcIiwgc2hvcnRfbmFtZTogJ2FtZXgnLCBwcmVmaXg6ICczNCcsIGxlbmd0aDogMTV9LFxuICAgICAgICAgICAge25hbWU6IFwiQmFua2NhcmRcIiwgc2hvcnRfbmFtZTogJ2JhbmtjYXJkJywgcHJlZml4OiAnNTYxMCcsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiQ2hpbmEgVW5pb25QYXlcIiwgc2hvcnRfbmFtZTogJ2NoaW5hdW5pb24nLCBwcmVmaXg6ICc2MicsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiRGluZXJzIENsdWIgQ2FydGUgQmxhbmNoZVwiLCBzaG9ydF9uYW1lOiAnZGNjYXJ0ZScsIHByZWZpeDogJzMwMCcsIGxlbmd0aDogMTR9LFxuICAgICAgICAgICAge25hbWU6IFwiRGluZXJzIENsdWIgZW5Sb3V0ZVwiLCBzaG9ydF9uYW1lOiAnZGNlbnJvdXRlJywgcHJlZml4OiAnMjAxNCcsIGxlbmd0aDogMTV9LFxuICAgICAgICAgICAge25hbWU6IFwiRGluZXJzIENsdWIgSW50ZXJuYXRpb25hbFwiLCBzaG9ydF9uYW1lOiAnZGNpbnRsJywgcHJlZml4OiAnMzYnLCBsZW5ndGg6IDE0fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkRpbmVycyBDbHViIFVuaXRlZCBTdGF0ZXMgJiBDYW5hZGFcIiwgc2hvcnRfbmFtZTogJ2RjdXNjJywgcHJlZml4OiAnNTQnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkRpc2NvdmVyIENhcmRcIiwgc2hvcnRfbmFtZTogJ2Rpc2NvdmVyJywgcHJlZml4OiAnNjAxMScsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiSW5zdGFQYXltZW50XCIsIHNob3J0X25hbWU6ICdpbnN0YXBheScsIHByZWZpeDogJzYzNycsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiSkNCXCIsIHNob3J0X25hbWU6ICdqY2InLCBwcmVmaXg6ICczNTI4JywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJMYXNlclwiLCBzaG9ydF9uYW1lOiAnbGFzZXInLCBwcmVmaXg6ICc2MzA0JywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJNYWVzdHJvXCIsIHNob3J0X25hbWU6ICdtYWVzdHJvJywgcHJlZml4OiAnNTAxOCcsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiTWFzdGVyY2FyZFwiLCBzaG9ydF9uYW1lOiAnbWMnLCBwcmVmaXg6ICc1MScsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiU29sb1wiLCBzaG9ydF9uYW1lOiAnc29sbycsIHByZWZpeDogJzYzMzQnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIlN3aXRjaFwiLCBzaG9ydF9uYW1lOiAnc3dpdGNoJywgcHJlZml4OiAnNDkwMycsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiVmlzYVwiLCBzaG9ydF9uYW1lOiAndmlzYScsIHByZWZpeDogJzQnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIlZpc2EgRWxlY3Ryb25cIiwgc2hvcnRfbmFtZTogJ2VsZWN0cm9uJywgcHJlZml4OiAnNDAyNicsIGxlbmd0aDogMTZ9XG4gICAgICAgIF0sXG5cbiAgICAgICAgLy9yZXR1cm4gYWxsIHdvcmxkIGN1cnJlbmN5IGJ5IElTTyA0MjE3XG4gICAgICAgIGN1cnJlbmN5X3R5cGVzOiBbXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FFRCcsICduYW1lJyA6ICdVbml0ZWQgQXJhYiBFbWlyYXRlcyBEaXJoYW0nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQUZOJywgJ25hbWUnIDogJ0FmZ2hhbmlzdGFuIEFmZ2hhbmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQUxMJywgJ25hbWUnIDogJ0FsYmFuaWEgTGVrJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FNRCcsICduYW1lJyA6ICdBcm1lbmlhIERyYW0nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQU5HJywgJ25hbWUnIDogJ05ldGhlcmxhbmRzIEFudGlsbGVzIEd1aWxkZXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQU9BJywgJ25hbWUnIDogJ0FuZ29sYSBLd2FuemEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQVJTJywgJ25hbWUnIDogJ0FyZ2VudGluYSBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FVRCcsICduYW1lJyA6ICdBdXN0cmFsaWEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FXRycsICduYW1lJyA6ICdBcnViYSBHdWlsZGVyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FaTicsICduYW1lJyA6ICdBemVyYmFpamFuIE5ldyBNYW5hdCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCQU0nLCAnbmFtZScgOiAnQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSBDb252ZXJ0aWJsZSBNYXJrYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCQkQnLCAnbmFtZScgOiAnQmFyYmFkb3MgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JEVCcsICduYW1lJyA6ICdCYW5nbGFkZXNoIFRha2EnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQkdOJywgJ25hbWUnIDogJ0J1bGdhcmlhIExldid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCSEQnLCAnbmFtZScgOiAnQmFocmFpbiBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCSUYnLCAnbmFtZScgOiAnQnVydW5kaSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCTUQnLCAnbmFtZScgOiAnQmVybXVkYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQk5EJywgJ25hbWUnIDogJ0JydW5laSBEYXJ1c3NhbGFtIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCT0InLCAnbmFtZScgOiAnQm9saXZpYSBCb2xpdmlhbm8nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQlJMJywgJ25hbWUnIDogJ0JyYXppbCBSZWFsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JTRCcsICduYW1lJyA6ICdCYWhhbWFzIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCVE4nLCAnbmFtZScgOiAnQmh1dGFuIE5ndWx0cnVtJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JXUCcsICduYW1lJyA6ICdCb3Rzd2FuYSBQdWxhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JZUicsICduYW1lJyA6ICdCZWxhcnVzIFJ1YmxlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JaRCcsICduYW1lJyA6ICdCZWxpemUgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NBRCcsICduYW1lJyA6ICdDYW5hZGEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NERicsICduYW1lJyA6ICdDb25nby9LaW5zaGFzYSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDSEYnLCAnbmFtZScgOiAnU3dpdHplcmxhbmQgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ0xQJywgJ25hbWUnIDogJ0NoaWxlIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ05ZJywgJ25hbWUnIDogJ0NoaW5hIFl1YW4gUmVubWluYmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ09QJywgJ25hbWUnIDogJ0NvbG9tYmlhIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ1JDJywgJ25hbWUnIDogJ0Nvc3RhIFJpY2EgQ29sb24nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ1VDJywgJ25hbWUnIDogJ0N1YmEgQ29udmVydGlibGUgUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDVVAnLCAnbmFtZScgOiAnQ3ViYSBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NWRScsICduYW1lJyA6ICdDYXBlIFZlcmRlIEVzY3Vkbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDWksnLCAnbmFtZScgOiAnQ3plY2ggUmVwdWJsaWMgS29ydW5hJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0RKRicsICduYW1lJyA6ICdEamlib3V0aSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdES0snLCAnbmFtZScgOiAnRGVubWFyayBLcm9uZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdET1AnLCAnbmFtZScgOiAnRG9taW5pY2FuIFJlcHVibGljIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRFpEJywgJ25hbWUnIDogJ0FsZ2VyaWEgRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRUdQJywgJ25hbWUnIDogJ0VneXB0IFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0VSTicsICduYW1lJyA6ICdFcml0cmVhIE5ha2ZhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0VUQicsICduYW1lJyA6ICdFdGhpb3BpYSBCaXJyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0VVUicsICduYW1lJyA6ICdFdXJvIE1lbWJlciBDb3VudHJpZXMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRkpEJywgJ25hbWUnIDogJ0ZpamkgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0ZLUCcsICduYW1lJyA6ICdGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcykgUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR0JQJywgJ25hbWUnIDogJ1VuaXRlZCBLaW5nZG9tIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dFTCcsICduYW1lJyA6ICdHZW9yZ2lhIExhcmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR0dQJywgJ25hbWUnIDogJ0d1ZXJuc2V5IFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dIUycsICduYW1lJyA6ICdHaGFuYSBDZWRpJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dJUCcsICduYW1lJyA6ICdHaWJyYWx0YXIgUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR01EJywgJ25hbWUnIDogJ0dhbWJpYSBEYWxhc2knfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR05GJywgJ25hbWUnIDogJ0d1aW5lYSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHVFEnLCAnbmFtZScgOiAnR3VhdGVtYWxhIFF1ZXR6YWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR1lEJywgJ25hbWUnIDogJ0d1eWFuYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSEtEJywgJ25hbWUnIDogJ0hvbmcgS29uZyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSE5MJywgJ25hbWUnIDogJ0hvbmR1cmFzIExlbXBpcmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSFJLJywgJ25hbWUnIDogJ0Nyb2F0aWEgS3VuYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdIVEcnLCAnbmFtZScgOiAnSGFpdGkgR291cmRlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0hVRicsICduYW1lJyA6ICdIdW5nYXJ5IEZvcmludCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJRFInLCAnbmFtZScgOiAnSW5kb25lc2lhIFJ1cGlhaCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJTFMnLCAnbmFtZScgOiAnSXNyYWVsIFNoZWtlbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJTVAnLCAnbmFtZScgOiAnSXNsZSBvZiBNYW4gUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSU5SJywgJ25hbWUnIDogJ0luZGlhIFJ1cGVlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0lRRCcsICduYW1lJyA6ICdJcmFxIERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0lSUicsICduYW1lJyA6ICdJcmFuIFJpYWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSVNLJywgJ25hbWUnIDogJ0ljZWxhbmQgS3JvbmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSkVQJywgJ25hbWUnIDogJ0plcnNleSBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdKTUQnLCAnbmFtZScgOiAnSmFtYWljYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSk9EJywgJ25hbWUnIDogJ0pvcmRhbiBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdKUFknLCAnbmFtZScgOiAnSmFwYW4gWWVuJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tFUycsICduYW1lJyA6ICdLZW55YSBTaGlsbGluZyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLR1MnLCAnbmFtZScgOiAnS3lyZ3l6c3RhbiBTb20nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS0hSJywgJ25hbWUnIDogJ0NhbWJvZGlhIFJpZWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS01GJywgJ25hbWUnIDogJ0NvbW9yb3MgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS1BXJywgJ25hbWUnIDogJ0tvcmVhIChOb3J0aCkgV29uJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tSVycsICduYW1lJyA6ICdLb3JlYSAoU291dGgpIFdvbid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLV0QnLCAnbmFtZScgOiAnS3V3YWl0IERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tZRCcsICduYW1lJyA6ICdDYXltYW4gSXNsYW5kcyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS1pUJywgJ25hbWUnIDogJ0themFraHN0YW4gVGVuZ2UnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTEFLJywgJ25hbWUnIDogJ0xhb3MgS2lwJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xCUCcsICduYW1lJyA6ICdMZWJhbm9uIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xLUicsICduYW1lJyA6ICdTcmkgTGFua2EgUnVwZWUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTFJEJywgJ25hbWUnIDogJ0xpYmVyaWEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xTTCcsICduYW1lJyA6ICdMZXNvdGhvIExvdGknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTFRMJywgJ25hbWUnIDogJ0xpdGh1YW5pYSBMaXRhcyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdMWUQnLCAnbmFtZScgOiAnTGlieWEgRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTUFEJywgJ25hbWUnIDogJ01vcm9jY28gRGlyaGFtJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01ETCcsICduYW1lJyA6ICdNb2xkb3ZhIExldSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNR0EnLCAnbmFtZScgOiAnTWFkYWdhc2NhciBBcmlhcnknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTUtEJywgJ25hbWUnIDogJ01hY2Vkb25pYSBEZW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNTUsnLCAnbmFtZScgOiAnTXlhbm1hciAoQnVybWEpIEt5YXQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTU5UJywgJ25hbWUnIDogJ01vbmdvbGlhIFR1Z2hyaWsnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTU9QJywgJ25hbWUnIDogJ01hY2F1IFBhdGFjYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNUk8nLCAnbmFtZScgOiAnTWF1cml0YW5pYSBPdWd1aXlhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01VUicsICduYW1lJyA6ICdNYXVyaXRpdXMgUnVwZWUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVZSJywgJ25hbWUnIDogJ01hbGRpdmVzIChNYWxkaXZlIElzbGFuZHMpIFJ1Zml5YWEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVdLJywgJ25hbWUnIDogJ01hbGF3aSBLd2FjaGEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVhOJywgJ25hbWUnIDogJ01leGljbyBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01ZUicsICduYW1lJyA6ICdNYWxheXNpYSBSaW5nZ2l0J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01aTicsICduYW1lJyA6ICdNb3phbWJpcXVlIE1ldGljYWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTkFEJywgJ25hbWUnIDogJ05hbWliaWEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ05HTicsICduYW1lJyA6ICdOaWdlcmlhIE5haXJhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ05JTycsICduYW1lJyA6ICdOaWNhcmFndWEgQ29yZG9iYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdOT0snLCAnbmFtZScgOiAnTm9yd2F5IEtyb25lJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ05QUicsICduYW1lJyA6ICdOZXBhbCBSdXBlZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdOWkQnLCAnbmFtZScgOiAnTmV3IFplYWxhbmQgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ09NUicsICduYW1lJyA6ICdPbWFuIFJpYWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUEFCJywgJ25hbWUnIDogJ1BhbmFtYSBCYWxib2EnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUEVOJywgJ25hbWUnIDogJ1BlcnUgTnVldm8gU29sJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1BHSycsICduYW1lJyA6ICdQYXB1YSBOZXcgR3VpbmVhIEtpbmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUEhQJywgJ25hbWUnIDogJ1BoaWxpcHBpbmVzIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUEtSJywgJ25hbWUnIDogJ1Bha2lzdGFuIFJ1cGVlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1BMTicsICduYW1lJyA6ICdQb2xhbmQgWmxvdHknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUFlHJywgJ25hbWUnIDogJ1BhcmFndWF5IEd1YXJhbmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUUFSJywgJ25hbWUnIDogJ1FhdGFyIFJpeWFsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1JPTicsICduYW1lJyA6ICdSb21hbmlhIE5ldyBMZXUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUlNEJywgJ25hbWUnIDogJ1NlcmJpYSBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdSVUInLCAnbmFtZScgOiAnUnVzc2lhIFJ1YmxlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1JXRicsICduYW1lJyA6ICdSd2FuZGEgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0FSJywgJ25hbWUnIDogJ1NhdWRpIEFyYWJpYSBSaXlhbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTQkQnLCAnbmFtZScgOiAnU29sb21vbiBJc2xhbmRzIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTQ1InLCAnbmFtZScgOiAnU2V5Y2hlbGxlcyBSdXBlZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTREcnLCAnbmFtZScgOiAnU3VkYW4gUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0VLJywgJ25hbWUnIDogJ1N3ZWRlbiBLcm9uYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTR0QnLCAnbmFtZScgOiAnU2luZ2Fwb3JlIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTSFAnLCAnbmFtZScgOiAnU2FpbnQgSGVsZW5hIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NMTCcsICduYW1lJyA6ICdTaWVycmEgTGVvbmUgTGVvbmUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU09TJywgJ25hbWUnIDogJ1NvbWFsaWEgU2hpbGxpbmcnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU1BMJywgJ25hbWUnIDogJ1NlYm9yZ2EgTHVpZ2lubyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTUkQnLCAnbmFtZScgOiAnU3VyaW5hbWUgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NURCcsICduYW1lJyA6ICdTw6NvIFRvbcOpIGFuZCBQcsOtbmNpcGUgRG9icmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU1ZDJywgJ25hbWUnIDogJ0VsIFNhbHZhZG9yIENvbG9uJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NZUCcsICduYW1lJyA6ICdTeXJpYSBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTWkwnLCAnbmFtZScgOiAnU3dhemlsYW5kIExpbGFuZ2VuaSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUSEInLCAnbmFtZScgOiAnVGhhaWxhbmQgQmFodCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUSlMnLCAnbmFtZScgOiAnVGFqaWtpc3RhbiBTb21vbmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVE1UJywgJ25hbWUnIDogJ1R1cmttZW5pc3RhbiBNYW5hdCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUTkQnLCAnbmFtZScgOiAnVHVuaXNpYSBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUT1AnLCAnbmFtZScgOiAnVG9uZ2EgUGFcXCdhbmdhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RSWScsICduYW1lJyA6ICdUdXJrZXkgTGlyYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUVEQnLCAnbmFtZScgOiAnVHJpbmlkYWQgYW5kIFRvYmFnbyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVFZEJywgJ25hbWUnIDogJ1R1dmFsdSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVFdEJywgJ25hbWUnIDogJ1RhaXdhbiBOZXcgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RaUycsICduYW1lJyA6ICdUYW56YW5pYSBTaGlsbGluZyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdVQUgnLCAnbmFtZScgOiAnVWtyYWluZSBIcnl2bmlhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1VHWCcsICduYW1lJyA6ICdVZ2FuZGEgU2hpbGxpbmcnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVVNEJywgJ25hbWUnIDogJ1VuaXRlZCBTdGF0ZXMgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1VZVScsICduYW1lJyA6ICdVcnVndWF5IFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVVpTJywgJ25hbWUnIDogJ1V6YmVraXN0YW4gU29tJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1ZFRicsICduYW1lJyA6ICdWZW5lenVlbGEgQm9saXZhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdWTkQnLCAnbmFtZScgOiAnVmlldCBOYW0gRG9uZyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdWVVYnLCAnbmFtZScgOiAnVmFudWF0dSBWYXR1J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1dTVCcsICduYW1lJyA6ICdTYW1vYSBUYWxhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1hBRicsICduYW1lJyA6ICdDb21tdW5hdXTDqSBGaW5hbmNpw6hyZSBBZnJpY2FpbmUgKEJFQUMpIENGQSBGcmFuYyBCRUFDJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1hDRCcsICduYW1lJyA6ICdFYXN0IENhcmliYmVhbiBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWERSJywgJ25hbWUnIDogJ0ludGVybmF0aW9uYWwgTW9uZXRhcnkgRnVuZCAoSU1GKSBTcGVjaWFsIERyYXdpbmcgUmlnaHRzJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1hPRicsICduYW1lJyA6ICdDb21tdW5hdXTDqSBGaW5hbmNpw6hyZSBBZnJpY2FpbmUgKEJDRUFPKSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdYUEYnLCAnbmFtZScgOiAnQ29tcHRvaXJzIEZyYW7Dp2FpcyBkdSBQYWNpZmlxdWUgKENGUCkgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWUVSJywgJ25hbWUnIDogJ1llbWVuIFJpYWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWkFSJywgJ25hbWUnIDogJ1NvdXRoIEFmcmljYSBSYW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1pNVycsICduYW1lJyA6ICdaYW1iaWEgS3dhY2hhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1pXRCcsICduYW1lJyA6ICdaaW1iYWJ3ZSBEb2xsYXInfVxuICAgICAgICBdXG4gICAgfTtcblxuICAgIHZhciBvX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgICB2YXIgb19rZXlzID0gKE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAob19oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb3B5T2JqZWN0KHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgICB2YXIga2V5cyA9IG9fa2V5cyhzb3VyY2UpO1xuICAgICAgdmFyIGtleTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldIHx8IHRhcmdldFtrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jb3B5QXJyYXkoc291cmNlLCB0YXJnZXQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc291cmNlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB0YXJnZXRbaV0gPSBzb3VyY2VbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIF90YXJnZXQpIHtcbiAgICAgICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNvdXJjZSk7XG4gICAgICAgIHZhciB0YXJnZXQgPSBfdGFyZ2V0IHx8IChpc0FycmF5ID8gbmV3IEFycmF5KHNvdXJjZS5sZW5ndGgpIDoge30pO1xuXG4gICAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgICAgX2NvcHlBcnJheShzb3VyY2UsIHRhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX2NvcHlPYmplY3Qoc291cmNlLCB0YXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSBkYXRhIGJhc2VkIG9uIGtleSoqL1xuICAgIENoYW5jZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNvcHlPYmplY3QoZGF0YVtuYW1lXSk7XG4gICAgfTtcblxuICAgIC8vIE1hYyBBZGRyZXNzXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5tYWNfYWRkcmVzcyA9IGZ1bmN0aW9uKG9wdGlvbnMpe1xuICAgICAgICAvLyB0eXBpY2FsbHkgbWFjIGFkZHJlc3NlcyBhcmUgc2VwYXJhdGVkIGJ5IFwiOlwiXG4gICAgICAgIC8vIGhvd2V2ZXIgdGhleSBjYW4gYWxzbyBiZSBzZXBhcmF0ZWQgYnkgXCItXCJcbiAgICAgICAgLy8gdGhlIG5ldHdvcmsgdmFyaWFudCB1c2VzIGEgZG90IGV2ZXJ5IGZvdXJ0aCBieXRlXG5cbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZighb3B0aW9ucy5zZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc2VwYXJhdG9yID0gIG9wdGlvbnMubmV0d29ya1ZlcnNpb24gPyBcIi5cIiA6IFwiOlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1hY19wb29sPVwiQUJDREVGMTIzNDU2Nzg5MFwiLFxuICAgICAgICAgICAgbWFjID0gXCJcIjtcbiAgICAgICAgaWYoIW9wdGlvbnMubmV0d29ya1ZlcnNpb24pIHtcbiAgICAgICAgICAgIG1hYyA9IHRoaXMubih0aGlzLnN0cmluZywgNiwgeyBwb29sOiBtYWNfcG9vbCwgbGVuZ3RoOjIgfSkuam9pbihvcHRpb25zLnNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYWMgPSB0aGlzLm4odGhpcy5zdHJpbmcsIDMsIHsgcG9vbDogbWFjX3Bvb2wsIGxlbmd0aDo0IH0pLmpvaW4ob3B0aW9ucy5zZXBhcmF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hYztcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5ub3JtYWwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21lYW4gOiAwLCBkZXYgOiAxfSk7XG5cbiAgICAgICAgLy8gVGhlIE1hcnNhZ2xpYSBQb2xhciBtZXRob2RcbiAgICAgICAgdmFyIHMsIHUsIHYsIG5vcm0sXG4gICAgICAgICAgICBtZWFuID0gb3B0aW9ucy5tZWFuLFxuICAgICAgICAgICAgZGV2ID0gb3B0aW9ucy5kZXY7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgLy8gVSBhbmQgViBhcmUgZnJvbSB0aGUgdW5pZm9ybSBkaXN0cmlidXRpb24gb24gKC0xLCAxKVxuICAgICAgICAgICAgdSA9IHRoaXMucmFuZG9tKCkgKiAyIC0gMTtcbiAgICAgICAgICAgIHYgPSB0aGlzLnJhbmRvbSgpICogMiAtIDE7XG5cbiAgICAgICAgICAgIHMgPSB1ICogdSArIHYgKiB2O1xuICAgICAgICB9IHdoaWxlIChzID49IDEpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHN0YW5kYXJkIG5vcm1hbCB2YXJpYXRlXG4gICAgICAgIG5vcm0gPSB1ICogTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocykgLyBzKTtcblxuICAgICAgICAvLyBTaGFwZSBhbmQgc2NhbGVcbiAgICAgICAgcmV0dXJuIGRldiAqIG5vcm0gKyBtZWFuO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnJhZGlvID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gSW5pdGlhbCBMZXR0ZXIgKFR5cGljYWxseSBEZXNpZ25hdGVkIGJ5IFNpZGUgb2YgTWlzc2lzc2lwcGkgUml2ZXIpXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7c2lkZSA6IFwiP1wifSk7XG4gICAgICAgIHZhciBmbCA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy5zaWRlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSBcImVhc3RcIjpcbiAgICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgICAgIGZsID0gXCJXXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIndlc3RcIjpcbiAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIGZsID0gXCJLXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGZsID0gdGhpcy5jaGFyYWN0ZXIoe3Bvb2w6IFwiS1dcIn0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmwgKyB0aGlzLmNoYXJhY3Rlcih7YWxwaGE6IHRydWUsIGNhc2luZzogXCJ1cHBlclwifSkgK1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcmFjdGVyKHthbHBoYTogdHJ1ZSwgY2FzaW5nOiBcInVwcGVyXCJ9KSArXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFyYWN0ZXIoe2FscGhhOiB0cnVlLCBjYXNpbmc6IFwidXBwZXJcIn0pO1xuICAgIH07XG5cbiAgICAvLyBTZXQgdGhlIGRhdGEgYXMga2V5IGFuZCBkYXRhIG9yIHRoZSBkYXRhIG1hcFxuICAgIENoYW5jZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlcykge1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gY29weU9iamVjdChuYW1lLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnR2ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFkaW8ob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIC8vIElEIG51bWJlciBmb3IgQnJhemlsIGNvbXBhbmllc1xuICAgIENoYW5jZS5wcm90b3R5cGUuY25waiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLm4odGhpcy5uYXR1cmFsLCA4LCB7IG1heDogOSB9KTtcbiAgICAgICAgdmFyIGQxID0gMituWzddKjYrbls2XSo3K25bNV0qOCtuWzRdKjkrblszXSoyK25bMl0qMytuWzFdKjQrblswXSo1O1xuICAgICAgICBkMSA9IDExIC0gKGQxICUgMTEpO1xuICAgICAgICBpZiAoZDE+PTEwKXtcbiAgICAgICAgICAgIGQxID0gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZDIgPSBkMSoyKzMrbls3XSo3K25bNl0qOCtuWzVdKjkrbls0XSoyK25bM10qMytuWzJdKjQrblsxXSo1K25bMF0qNjtcbiAgICAgICAgZDIgPSAxMSAtIChkMiAlIDExKTtcbiAgICAgICAgaWYgKGQyPj0xMCl7XG4gICAgICAgICAgICBkMiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnK25bMF0rblsxXSsnLicrblsyXStuWzNdK25bNF0rJy4nK25bNV0rbls2XStuWzddKycvMDAwMS0nK2QxK2QyO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgTWlzY2VsbGFuZW91cyAtLVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5tZXJzZW5uZV90d2lzdGVyID0gZnVuY3Rpb24gKHNlZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXJzZW5uZVR3aXN0ZXIoc2VlZCk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuYmx1ZWltcF9tZDUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmx1ZUltcE1ENSgpO1xuICAgIH07XG5cbiAgICAvLyBNZXJzZW5uZSBUd2lzdGVyIGZyb20gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYmFua3NlYW4vMzAwNDk0XG4gICAgdmFyIE1lcnNlbm5lVHdpc3RlciA9IGZ1bmN0aW9uIChzZWVkKSB7XG4gICAgICAgIGlmIChzZWVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGtlcHQgcmFuZG9tIG51bWJlciBzYW1lIHNpemUgYXMgdGltZSB1c2VkIHByZXZpb3VzbHkgdG8gZW5zdXJlIG5vIHVuZXhwZWN0ZWQgcmVzdWx0cyBkb3duc3RyZWFtXG4gICAgICAgICAgICBzZWVkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk1hdGgucG93KDEwLDEzKSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogUGVyaW9kIHBhcmFtZXRlcnMgKi9cbiAgICAgICAgdGhpcy5OID0gNjI0O1xuICAgICAgICB0aGlzLk0gPSAzOTc7XG4gICAgICAgIHRoaXMuTUFUUklYX0EgPSAweDk5MDhiMGRmOyAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovXG4gICAgICAgIHRoaXMuVVBQRVJfTUFTSyA9IDB4ODAwMDAwMDA7IC8qIG1vc3Qgc2lnbmlmaWNhbnQgdy1yIGJpdHMgKi9cbiAgICAgICAgdGhpcy5MT1dFUl9NQVNLID0gMHg3ZmZmZmZmZjsgLyogbGVhc3Qgc2lnbmlmaWNhbnQgciBiaXRzICovXG5cbiAgICAgICAgdGhpcy5tdCA9IG5ldyBBcnJheSh0aGlzLk4pOyAvKiB0aGUgYXJyYXkgZm9yIHRoZSBzdGF0ZSB2ZWN0b3IgKi9cbiAgICAgICAgdGhpcy5tdGkgPSB0aGlzLk4gKyAxOyAvKiBtdGk9PU4gKyAxIG1lYW5zIG10W05dIGlzIG5vdCBpbml0aWFsaXplZCAqL1xuXG4gICAgICAgIHRoaXMuaW5pdF9nZW5yYW5kKHNlZWQpO1xuICAgIH07XG5cbiAgICAvKiBpbml0aWFsaXplcyBtdFtOXSB3aXRoIGEgc2VlZCAqL1xuICAgIE1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuaW5pdF9nZW5yYW5kID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgdGhpcy5tdFswXSA9IHMgPj4+IDA7XG4gICAgICAgIGZvciAodGhpcy5tdGkgPSAxOyB0aGlzLm10aSA8IHRoaXMuTjsgdGhpcy5tdGkrKykge1xuICAgICAgICAgICAgcyA9IHRoaXMubXRbdGhpcy5tdGkgLSAxXSBeICh0aGlzLm10W3RoaXMubXRpIC0gMV0gPj4+IDMwKTtcbiAgICAgICAgICAgIHRoaXMubXRbdGhpcy5tdGldID0gKCgoKChzICYgMHhmZmZmMDAwMCkgPj4+IDE2KSAqIDE4MTI0MzMyNTMpIDw8IDE2KSArIChzICYgMHgwMDAwZmZmZikgKiAxODEyNDMzMjUzKSArIHRoaXMubXRpO1xuICAgICAgICAgICAgLyogU2VlIEtudXRoIFRBT0NQIFZvbDIuIDNyZCBFZC4gUC4xMDYgZm9yIG11bHRpcGxpZXIuICovXG4gICAgICAgICAgICAvKiBJbiB0aGUgcHJldmlvdXMgdmVyc2lvbnMsIE1TQnMgb2YgdGhlIHNlZWQgYWZmZWN0ICAgKi9cbiAgICAgICAgICAgIC8qIG9ubHkgTVNCcyBvZiB0aGUgYXJyYXkgbXRbXS4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgLyogMjAwMi8wMS8wOSBtb2RpZmllZCBieSBNYWtvdG8gTWF0c3Vtb3RvICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLm10W3RoaXMubXRpXSA+Pj49IDA7XG4gICAgICAgICAgICAvKiBmb3IgPjMyIGJpdCBtYWNoaW5lcyAqL1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qIGluaXRpYWxpemUgYnkgYW4gYXJyYXkgd2l0aCBhcnJheS1sZW5ndGggKi9cbiAgICAvKiBpbml0X2tleSBpcyB0aGUgYXJyYXkgZm9yIGluaXRpYWxpemluZyBrZXlzICovXG4gICAgLyoga2V5X2xlbmd0aCBpcyBpdHMgbGVuZ3RoICovXG4gICAgLyogc2xpZ2h0IGNoYW5nZSBmb3IgQysrLCAyMDA0LzIvMjYgKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmluaXRfYnlfYXJyYXkgPSBmdW5jdGlvbiAoaW5pdF9rZXksIGtleV9sZW5ndGgpIHtcbiAgICAgICAgdmFyIGkgPSAxLCBqID0gMCwgaywgcztcbiAgICAgICAgdGhpcy5pbml0X2dlbnJhbmQoMTk2NTAyMTgpO1xuICAgICAgICBrID0gKHRoaXMuTiA+IGtleV9sZW5ndGggPyB0aGlzLk4gOiBrZXlfbGVuZ3RoKTtcbiAgICAgICAgZm9yICg7IGs7IGstLSkge1xuICAgICAgICAgICAgcyA9IHRoaXMubXRbaSAtIDFdIF4gKHRoaXMubXRbaSAtIDFdID4+PiAzMCk7XG4gICAgICAgICAgICB0aGlzLm10W2ldID0gKHRoaXMubXRbaV0gXiAoKCgoKHMgJiAweGZmZmYwMDAwKSA+Pj4gMTYpICogMTY2NDUyNSkgPDwgMTYpICsgKChzICYgMHgwMDAwZmZmZikgKiAxNjY0NTI1KSkpICsgaW5pdF9rZXlbal0gKyBqOyAvKiBub24gbGluZWFyICovXG4gICAgICAgICAgICB0aGlzLm10W2ldID4+Pj0gMDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIGlmIChpID49IHRoaXMuTikgeyB0aGlzLm10WzBdID0gdGhpcy5tdFt0aGlzLk4gLSAxXTsgaSA9IDE7IH1cbiAgICAgICAgICAgIGlmIChqID49IGtleV9sZW5ndGgpIHsgaiA9IDA7IH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGsgPSB0aGlzLk4gLSAxOyBrOyBrLS0pIHtcbiAgICAgICAgICAgIHMgPSB0aGlzLm10W2kgLSAxXSBeICh0aGlzLm10W2kgLSAxXSA+Pj4gMzApO1xuICAgICAgICAgICAgdGhpcy5tdFtpXSA9ICh0aGlzLm10W2ldIF4gKCgoKChzICYgMHhmZmZmMDAwMCkgPj4+IDE2KSAqIDE1NjYwODM5NDEpIDw8IDE2KSArIChzICYgMHgwMDAwZmZmZikgKiAxNTY2MDgzOTQxKSkgLSBpOyAvKiBub24gbGluZWFyICovXG4gICAgICAgICAgICB0aGlzLm10W2ldID4+Pj0gMDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGlmIChpID49IHRoaXMuTikgeyB0aGlzLm10WzBdID0gdGhpcy5tdFt0aGlzLk4gLSAxXTsgaSA9IDE7IH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubXRbMF0gPSAweDgwMDAwMDAwOyAvKiBNU0IgaXMgMTsgYXNzdXJpbmcgbm9uLXplcm8gaW5pdGlhbCBhcnJheSAqL1xuICAgIH07XG5cbiAgICAvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4ZmZmZmZmZmZdLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5nZW5yYW5kX2ludDMyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgeTtcbiAgICAgICAgdmFyIG1hZzAxID0gbmV3IEFycmF5KDB4MCwgdGhpcy5NQVRSSVhfQSk7XG4gICAgICAgIC8qIG1hZzAxW3hdID0geCAqIE1BVFJJWF9BICBmb3IgeD0wLDEgKi9cblxuICAgICAgICBpZiAodGhpcy5tdGkgPj0gdGhpcy5OKSB7IC8qIGdlbmVyYXRlIE4gd29yZHMgYXQgb25lIHRpbWUgKi9cbiAgICAgICAgICAgIHZhciBraztcblxuICAgICAgICAgICAgaWYgKHRoaXMubXRpID09PSB0aGlzLk4gKyAxKSB7ICAgLyogaWYgaW5pdF9nZW5yYW5kKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCwgKi9cbiAgICAgICAgICAgICAgICB0aGlzLmluaXRfZ2VucmFuZCg1NDg5KTsgLyogYSBkZWZhdWx0IGluaXRpYWwgc2VlZCBpcyB1c2VkICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGtrID0gMDsga2sgPCB0aGlzLk4gLSB0aGlzLk07IGtrKyspIHtcbiAgICAgICAgICAgICAgICB5ID0gKHRoaXMubXRba2tdJnRoaXMuVVBQRVJfTUFTSyl8KHRoaXMubXRba2sgKyAxXSZ0aGlzLkxPV0VSX01BU0spO1xuICAgICAgICAgICAgICAgIHRoaXMubXRba2tdID0gdGhpcy5tdFtrayArIHRoaXMuTV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoO2trIDwgdGhpcy5OIC0gMTsga2srKykge1xuICAgICAgICAgICAgICAgIHkgPSAodGhpcy5tdFtra10mdGhpcy5VUFBFUl9NQVNLKXwodGhpcy5tdFtrayArIDFdJnRoaXMuTE9XRVJfTUFTSyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tdFtra10gPSB0aGlzLm10W2trICsgKHRoaXMuTSAtIHRoaXMuTildIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5ID0gKHRoaXMubXRbdGhpcy5OIC0gMV0mdGhpcy5VUFBFUl9NQVNLKXwodGhpcy5tdFswXSZ0aGlzLkxPV0VSX01BU0spO1xuICAgICAgICAgICAgdGhpcy5tdFt0aGlzLk4gLSAxXSA9IHRoaXMubXRbdGhpcy5NIC0gMV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcblxuICAgICAgICAgICAgdGhpcy5tdGkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgeSA9IHRoaXMubXRbdGhpcy5tdGkrK107XG5cbiAgICAgICAgLyogVGVtcGVyaW5nICovXG4gICAgICAgIHkgXj0gKHkgPj4+IDExKTtcbiAgICAgICAgeSBePSAoeSA8PCA3KSAmIDB4OWQyYzU2ODA7XG4gICAgICAgIHkgXj0gKHkgPDwgMTUpICYgMHhlZmM2MDAwMDtcbiAgICAgICAgeSBePSAoeSA+Pj4gMTgpO1xuXG4gICAgICAgIHJldHVybiB5ID4+PiAwO1xuICAgIH07XG5cbiAgICAvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4N2ZmZmZmZmZdLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5nZW5yYW5kX2ludDMxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZ2VucmFuZF9pbnQzMigpID4+PiAxKTtcbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxXS1yZWFsLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5nZW5yYW5kX3JlYWwxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5yYW5kX2ludDMyKCkgKiAoMS4wIC8gNDI5NDk2NzI5NS4wKTtcbiAgICAgICAgLyogZGl2aWRlZCBieSAyXjMyLTEgKi9cbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKS1yZWFsLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb20gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbnJhbmRfaW50MzIoKSAqICgxLjAgLyA0Mjk0OTY3Mjk2LjApO1xuICAgICAgICAvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiAoMCwxKS1yZWFsLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5nZW5yYW5kX3JlYWwzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZ2VucmFuZF9pbnQzMigpICsgMC41KSAqICgxLjAgLyA0Mjk0OTY3Mjk2LjApO1xuICAgICAgICAvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKSB3aXRoIDUzLWJpdCByZXNvbHV0aW9uKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmdlbnJhbmRfcmVzNTMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhID0gdGhpcy5nZW5yYW5kX2ludDMyKCk+Pj41LCBiID0gdGhpcy5nZW5yYW5kX2ludDMyKCk+Pj42O1xuICAgICAgICByZXR1cm4gKGEgKiA2NzEwODg2NC4wICsgYikgKiAoMS4wIC8gOTAwNzE5OTI1NDc0MDk5Mi4wKTtcbiAgICB9O1xuXG4gICAgLy8gQmx1ZUltcCBNRDUgaGFzaGluZyBhbGdvcml0aG0gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9KYXZhU2NyaXB0LU1ENVxuICAgIHZhciBCbHVlSW1wTUQ1ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5WRVJTSU9OID0gJzEuMC4xJztcblxuICAgIC8qXG4gICAgKiBBZGQgaW50ZWdlcnMsIHdyYXBwaW5nIGF0IDJeMzIuIFRoaXMgdXNlcyAxNi1iaXQgb3BlcmF0aW9ucyBpbnRlcm5hbGx5XG4gICAgKiB0byB3b3JrIGFyb3VuZCBidWdzIGluIHNvbWUgSlMgaW50ZXJwcmV0ZXJzLlxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuc2FmZV9hZGQgPSBmdW5jdGlvbiBzYWZlX2FkZCh4LCB5KSB7XG4gICAgICAgIHZhciBsc3cgPSAoeCAmIDB4RkZGRikgKyAoeSAmIDB4RkZGRiksXG4gICAgICAgICAgICBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgICAgICAgcmV0dXJuIChtc3cgPDwgMTYpIHwgKGxzdyAmIDB4RkZGRik7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5iaXRfcm9sbCA9IGZ1bmN0aW9uIChudW0sIGNudCkge1xuICAgICAgICByZXR1cm4gKG51bSA8PCBjbnQpIHwgKG51bSA+Pj4gKDMyIC0gY250KSk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmaXZlIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUubWQ1X2NtbiA9IGZ1bmN0aW9uIChxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVfYWRkKHRoaXMuYml0X3JvbGwodGhpcy5zYWZlX2FkZCh0aGlzLnNhZmVfYWRkKGEsIHEpLCB0aGlzLnNhZmVfYWRkKHgsIHQpKSwgcyksIGIpO1xuICAgIH07XG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUubWQ1X2ZmID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWQ1X2NtbigoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG4gICAgfTtcbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5tZDVfZ2cgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZDVfY21uKChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLm1kNV9oaCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1kNV9jbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLm1kNV9paSA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1kNV9jbW4oYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcywgYW5kIGEgYml0IGxlbmd0aC5cbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLmJpbmxfbWQ1ID0gZnVuY3Rpb24gKHgsIGxlbikge1xuICAgICAgICAvKiBhcHBlbmQgcGFkZGluZyAqL1xuICAgICAgICB4W2xlbiA+PiA1XSB8PSAweDgwIDw8IChsZW4gJSAzMik7XG4gICAgICAgIHhbKCgobGVuICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IGxlbjtcblxuICAgICAgICB2YXIgaSwgb2xkYSwgb2xkYiwgb2xkYywgb2xkZCxcbiAgICAgICAgICAgIGEgPSAgMTczMjU4NDE5MyxcbiAgICAgICAgICAgIGIgPSAtMjcxNzMzODc5LFxuICAgICAgICAgICAgYyA9IC0xNzMyNTg0MTk0LFxuICAgICAgICAgICAgZCA9ICAyNzE3MzM4Nzg7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgICAgICAgICBvbGRhID0gYTtcbiAgICAgICAgICAgIG9sZGIgPSBiO1xuICAgICAgICAgICAgb2xkYyA9IGM7XG4gICAgICAgICAgICBvbGRkID0gZDtcblxuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaV0sICAgICAgIDcsIC02ODA4NzY5MzYpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArICAxXSwgMTIsIC0zODk1NjQ1ODYpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArICAyXSwgMTcsICA2MDYxMDU4MTkpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArICAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAgNF0sICA3LCAtMTc2NDE4ODk3KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyAgNV0sIDEyLCAgMTIwMDA4MDQyNik7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArICA3XSwgMjIsIC00NTcwNTk4Myk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZmYoYSwgYiwgYywgZCwgeFtpICsgIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArICA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE3LCAtNDIwNjMpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDExXSwgMjIsIC0xOTkwNDA0MTYyKTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sICA3LCAgMTgwNDYwMzY4Mik7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgMTNdLCAxMiwgLTQwMzQxMTAxKTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgMTVdLCAyMiwgIDEyMzY1MzUzMjkpO1xuXG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZ2coYSwgYiwgYywgZCwgeFtpICsgIDFdLCAgNSwgLTE2NTc5NjUxMCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgIDZdLCAgOSwgLTEwNjk1MDE2MzIpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsICA2NDM3MTc3MTMpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2dnKGIsIGMsIGQsIGEsIHhbaV0sICAgICAgMjAsIC0zNzM4OTczMDIpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArICA1XSwgIDUsIC03MDE1NTg2OTEpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgIDksICAzODAxNjA4Myk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgIDRdLCAyMCwgLTQwNTUzNzg0OCk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZ2coYSwgYiwgYywgZCwgeFtpICsgIDldLCAgNSwgIDU2ODQ0NjQzOCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgMTRdLCAgOSwgLTEwMTk4MDM2OTApO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArICAzXSwgMTQsIC0xODczNjM5NjEpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArICA4XSwgMjAsICAxMTYzNTMxNTAxKTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyAxM10sICA1LCAtMTQ0NDY4MTQ2Nyk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgIDJdLCAgOSwgLTUxNDAzNzg0KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9nZyhjLCBkLCBhLCBiLCB4W2kgKyAgN10sIDE0LCAgMTczNTMyODQ3Myk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xuXG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgIDVdLCAgNCwgLTM3ODU1OCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsICAxODM5MDMwNTYyKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArICAxXSwgIDQsIC0xNTMwOTkyMDYwKTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9oaChkLCBhLCBiLCBjLCB4W2kgKyAgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgIDddLCAxNiwgLTE1NTQ5NzYzMik7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgIDQsICA2ODEyNzkxNzQpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2hoKGQsIGEsIGIsIGMsIHhbaV0sICAgICAgMTEsIC0zNTg1MzcyMjIpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArICAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArICA2XSwgMjMsICA3NjAyOTE4OSk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgIDldLCAgNCwgLTY0MDM2NDQ4Nyk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgMTJdLCAxMSwgLTQyMTgxNTgzNSk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgIDUzMDc0MjUyMCk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgIDJdLCAyMywgLTk5NTMzODY1MSk7XG5cbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9paShhLCBiLCBjLCBkLCB4W2ldLCAgICAgICA2LCAtMTk4NjMwODQ0KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAgN10sIDEwLCAgMTEyNjg5MTQxNSk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArICA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgMTJdLCAgNiwgIDE3MDA0ODU1NzEpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSArICAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSArICA4XSwgIDYsICAxODczMzEzMzU5KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArICA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9paShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAgMTMwOTE1MTY0OSk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgIDRdLCAgNiwgLTE0NTUyMzA3MCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArICAyXSwgMTUsICA3MTg3ODcyNTkpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArICA5XSwgMjEsIC0zNDM0ODU1NTEpO1xuXG4gICAgICAgICAgICBhID0gdGhpcy5zYWZlX2FkZChhLCBvbGRhKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLnNhZmVfYWRkKGIsIG9sZGIpO1xuICAgICAgICAgICAgYyA9IHRoaXMuc2FmZV9hZGQoYywgb2xkYyk7XG4gICAgICAgICAgICBkID0gdGhpcy5zYWZlX2FkZChkLCBvbGRkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2EsIGIsIGMsIGRdO1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGEgc3RyaW5nXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5iaW5sMnJzdHIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXRwdXQgPSAnJztcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCAqIDMyOyBpICs9IDgpIHtcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChpbnB1dFtpID4+IDVdID4+PiAoaSAlIDMyKSkgJiAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ29udmVydCBhIHJhdyBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICAgICogQ2hhcmFjdGVycyA+MjU1IGhhdmUgdGhlaXIgaGlnaC1ieXRlIHNpbGVudGx5IGlnbm9yZWQuXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5yc3RyMmJpbmwgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXRwdXQgPSBbXTtcbiAgICAgICAgb3V0cHV0WyhpbnB1dC5sZW5ndGggPj4gMikgLSAxXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgb3V0cHV0W2ldID0gMDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoICogODsgaSArPSA4KSB7XG4gICAgICAgICAgICBvdXRwdXRbaSA+PiA1XSB8PSAoaW5wdXQuY2hhckNvZGVBdChpIC8gOCkgJiAweEZGKSA8PCAoaSAlIDMyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYSByYXcgc3RyaW5nXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5yc3RyX21kNSA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJpbmwycnN0cih0aGlzLmJpbmxfbWQ1KHRoaXMucnN0cjJiaW5sKHMpLCBzLmxlbmd0aCAqIDgpKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIENhbGN1bGF0ZSB0aGUgSE1BQy1NRDUsIG9mIGEga2V5IGFuZCBzb21lIGRhdGEgKHJhdyBzdHJpbmdzKVxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUucnN0cl9obWFjX21kNSA9IGZ1bmN0aW9uIChrZXksIGRhdGEpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBia2V5ID0gdGhpcy5yc3RyMmJpbmwoa2V5KSxcbiAgICAgICAgICAgIGlwYWQgPSBbXSxcbiAgICAgICAgICAgIG9wYWQgPSBbXSxcbiAgICAgICAgICAgIGhhc2g7XG4gICAgICAgIGlwYWRbMTVdID0gb3BhZFsxNV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChia2V5Lmxlbmd0aCA+IDE2KSB7XG4gICAgICAgICAgICBia2V5ID0gdGhpcy5iaW5sX21kNShia2V5LCBrZXkubGVuZ3RoICogOCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlwYWRbaV0gPSBia2V5W2ldIF4gMHgzNjM2MzYzNjtcbiAgICAgICAgICAgIG9wYWRbaV0gPSBia2V5W2ldIF4gMHg1QzVDNUM1QztcbiAgICAgICAgfVxuICAgICAgICBoYXNoID0gdGhpcy5iaW5sX21kNShpcGFkLmNvbmNhdCh0aGlzLnJzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogOCk7XG4gICAgICAgIHJldHVybiB0aGlzLmJpbmwycnN0cih0aGlzLmJpbmxfbWQ1KG9wYWQuY29uY2F0KGhhc2gpLCA1MTIgKyAxMjgpKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIENvbnZlcnQgYSByYXcgc3RyaW5nIHRvIGEgaGV4IHN0cmluZ1xuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUucnN0cjJoZXggPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgdmFyIGhleF90YWIgPSAnMDEyMzQ1Njc4OWFiY2RlZicsXG4gICAgICAgICAgICBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHggPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgb3V0cHV0ICs9IGhleF90YWIuY2hhckF0KCh4ID4+PiA0KSAmIDB4MEYpICtcbiAgICAgICAgICAgICAgICBoZXhfdGFiLmNoYXJBdCh4ICYgMHgwRik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIEVuY29kZSBhIHN0cmluZyBhcyB1dGYtOFxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuc3RyMnJzdHJfdXRmOCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KSk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBUYWtlIHN0cmluZyBhcmd1bWVudHMgYW5kIHJldHVybiBlaXRoZXIgcmF3IG9yIGhleCBlbmNvZGVkIHN0cmluZ3NcbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLnJhd19tZDUgPSBmdW5jdGlvbiAocykge1xuICAgICAgICByZXR1cm4gdGhpcy5yc3RyX21kNSh0aGlzLnN0cjJyc3RyX3V0ZjgocykpO1xuICAgIH07XG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuaGV4X21kNSA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJzdHIyaGV4KHRoaXMucmF3X21kNShzKSk7XG4gICAgfTtcbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5yYXdfaG1hY19tZDUgPSBmdW5jdGlvbiAoaywgZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yc3RyX2htYWNfbWQ1KHRoaXMuc3RyMnJzdHJfdXRmOChrKSwgdGhpcy5zdHIycnN0cl91dGY4KGQpKTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLmhleF9obWFjX21kNSA9IGZ1bmN0aW9uIChrLCBkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJzdHIyaGV4KHRoaXMucmF3X2htYWNfbWQ1KGssIGQpKTtcbiAgICB9O1xuXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUubWQ1ID0gZnVuY3Rpb24gKHN0cmluZywga2V5LCByYXcpIHtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIGlmICghcmF3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGV4X21kNShzdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYXdfbWQ1KHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJhdykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGV4X2htYWNfbWQ1KGtleSwgc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJhd19obWFjX21kNShrZXksIHN0cmluZyk7XG4gICAgfTtcblxuICAgIC8vIENvbW1vbkpTIG1vZHVsZVxuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBDaGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0cy5DaGFuY2UgPSBDaGFuY2U7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIEFNRCBtb2R1bGVcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIENoYW5jZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBpbXBvcnRzU2NyaXBzIG9iamVjdCBkZWZpbmUgY2hhbmNlIGZvciB3b3JrZXJcbiAgICBpZiAodHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNoYW5jZSA9IG5ldyBDaGFuY2UoKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHdpbmRvdyBvYmplY3QsIHRoYXQgYXQgbGVhc3QgaGFzIGEgZG9jdW1lbnQgcHJvcGVydHksXG4gICAgLy8gaW5zdGFudGlhdGUgYW5kIGRlZmluZSBjaGFuY2Ugb24gdGhlIHdpbmRvd1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgd2luZG93LkNoYW5jZSA9IENoYW5jZTtcbiAgICAgICAgd2luZG93LmNoYW5jZSA9IG5ldyBDaGFuY2UoKTtcbiAgICB9XG59KSgpO1xuIiwiXG4vKipcbiAqIEV4cG9zZSBgRW1pdHRlcmAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBFbWl0dGVyO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYEVtaXR0ZXJgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gRW1pdHRlcihvYmopIHtcbiAgaWYgKG9iaikgcmV0dXJuIG1peGluKG9iaik7XG59O1xuXG4vKipcbiAqIE1peGluIHRoZSBlbWl0dGVyIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gIGZvciAodmFyIGtleSBpbiBFbWl0dGVyLnByb3RvdHlwZSkge1xuICAgIG9ialtrZXldID0gRW1pdHRlci5wcm90b3R5cGVba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIExpc3RlbiBvbiB0aGUgZ2l2ZW4gYGV2ZW50YCB3aXRoIGBmbmAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RW1pdHRlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUub24gPVxuRW1pdHRlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgKHRoaXMuX2NhbGxiYWNrc1tldmVudF0gPSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdIHx8IFtdKVxuICAgIC5wdXNoKGZuKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFkZHMgYW4gYGV2ZW50YCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBhIHNpbmdsZVxuICogdGltZSB0aGVuIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24oZXZlbnQsIGZuKXtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG5cbiAgZnVuY3Rpb24gb24oKSB7XG4gICAgc2VsZi5vZmYoZXZlbnQsIG9uKTtcbiAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgb24uZm4gPSBmbjtcbiAgdGhpcy5vbihldmVudCwgb24pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBnaXZlbiBjYWxsYmFjayBmb3IgYGV2ZW50YCBvciBhbGxcbiAqIHJlZ2lzdGVyZWQgY2FsbGJhY2tzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcblxuICAvLyBhbGxcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1tldmVudF07XG4gIGlmICghY2FsbGJhY2tzKSByZXR1cm4gdGhpcztcblxuICAvLyByZW1vdmUgYWxsIGhhbmRsZXJzXG4gIGlmICgxID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW2V2ZW50XTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHJlbW92ZSBzcGVjaWZpYyBoYW5kbGVyXG4gIHZhciBjYjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICBjYiA9IGNhbGxiYWNrc1tpXTtcbiAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgY2FsbGJhY2tzLnNwbGljZShpLCAxKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRW1pdCBgZXZlbnRgIHdpdGggdGhlIGdpdmVuIGFyZ3MuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge01peGVkfSAuLi5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKVxuICAgICwgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XTtcblxuICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIGNhbGxiYWNrc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmV0dXJuIGFycmF5IG9mIGNhbGxiYWNrcyBmb3IgYGV2ZW50YC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudCl7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgcmV0dXJuIHRoaXMuX2NhbGxiYWNrc1tldmVudF0gfHwgW107XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoaXMgZW1pdHRlciBoYXMgYGV2ZW50YCBoYW5kbGVycy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgcmV0dXJuICEhIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG59O1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqXG4gKiBFeHBvc2UgYGRlYnVnKClgIGFzIHRoZSBtb2R1bGUuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kZWJ1ZycpO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9ICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWVcbiAgICAgICAgICAgICAgICYmICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWUuc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgPyBjaHJvbWUuc3RvcmFnZS5sb2NhbFxuICAgICAgICAgICAgICAgICAgOiBsb2NhbHN0b3JhZ2UoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG4gICdsaWdodHNlYWdyZWVuJyxcbiAgJ2ZvcmVzdGdyZWVuJyxcbiAgJ2dvbGRlbnJvZCcsXG4gICdkb2RnZXJibHVlJyxcbiAgJ2RhcmtvcmNoaWQnLFxuICAnY3JpbXNvbidcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICAvLyBpcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuICByZXR1cm4gKCdXZWJraXRBcHBlYXJhbmNlJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpIHx8XG4gICAgLy8gaXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuICAgICh3aW5kb3cuY29uc29sZSAmJiAoY29uc29sZS5maXJlYnVnIHx8IChjb25zb2xlLmV4Y2VwdGlvbiAmJiBjb25zb2xlLnRhYmxlKSkpIHx8XG4gICAgLy8gaXMgZmlyZWZveCA+PSB2MzE/XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG4gICAgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKTtcbn1cblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbn07XG5cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIHVzZUNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuXG4gIGFyZ3NbMF0gPSAodXNlQ29sb3JzID8gJyVjJyA6ICcnKVxuICAgICsgdGhpcy5uYW1lc3BhY2VcbiAgICArICh1c2VDb2xvcnMgPyAnICVjJyA6ICcgJylcbiAgICArIGFyZ3NbMF1cbiAgICArICh1c2VDb2xvcnMgPyAnJWMgJyA6ICcgJylcbiAgICArICcrJyArIGV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuICBpZiAoIXVzZUNvbG9ycykgcmV0dXJuIGFyZ3M7XG5cbiAgdmFyIGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuICBhcmdzID0gW2FyZ3NbMF0sIGMsICdjb2xvcjogaW5oZXJpdCddLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7XG5cbiAgLy8gdGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcbiAgLy8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3RDID0gMDtcbiAgYXJnc1swXS5yZXBsYWNlKC8lW2EteiVdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgaWYgKCclJScgPT09IG1hdGNoKSByZXR1cm47XG4gICAgaW5kZXgrKztcbiAgICBpZiAoJyVjJyA9PT0gbWF0Y2gpIHtcbiAgICAgIC8vIHdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuICAgICAgLy8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcbiAgICAgIGxhc3RDID0gaW5kZXg7XG4gICAgfVxuICB9KTtcblxuICBhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUubG9nKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5sb2dgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgLy8gdGhpcyBoYWNrZXJ5IGlzIHJlcXVpcmVkIGZvciBJRTgvOSwgd2hlcmVcbiAgLy8gdGhlIGBjb25zb2xlLmxvZ2AgZnVuY3Rpb24gZG9lc24ndCBoYXZlICdhcHBseSdcbiAgcmV0dXJuICdvYmplY3QnID09PSB0eXBlb2YgY29uc29sZVxuICAgICYmIGNvbnNvbGUubG9nXG4gICAgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UuZGVidWcgPSBuYW1lc3BhY2VzO1xuICAgIH1cbiAgfSBjYXRjaChlKSB7fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuICB0cnkge1xuICAgIHIgPSBleHBvcnRzLnN0b3JhZ2UuZGVidWc7XG4gIH0gY2F0Y2goZSkge31cbiAgcmV0dXJuIHI7XG59XG5cbi8qKlxuICogRW5hYmxlIG5hbWVzcGFjZXMgbGlzdGVkIGluIGBsb2NhbFN0b3JhZ2UuZGVidWdgIGluaXRpYWxseS5cbiAqL1xuXG5leHBvcnRzLmVuYWJsZShsb2FkKCkpO1xuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpe1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICB9IGNhdGNoIChlKSB7fVxufVxuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGRlYnVnO1xuZXhwb3J0cy5jb2VyY2UgPSBjb2VyY2U7XG5leHBvcnRzLmRpc2FibGUgPSBkaXNhYmxlO1xuZXhwb3J0cy5lbmFibGUgPSBlbmFibGU7XG5leHBvcnRzLmVuYWJsZWQgPSBlbmFibGVkO1xuZXhwb3J0cy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cbi8qKlxuICogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG4gKi9cblxuZXhwb3J0cy5uYW1lcyA9IFtdO1xuZXhwb3J0cy5za2lwcyA9IFtdO1xuXG4vKipcbiAqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cbiAqXG4gKiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlcmNhc2VkIGxldHRlciwgaS5lLiBcIm5cIi5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMgPSB7fTtcblxuLyoqXG4gKiBQcmV2aW91c2x5IGFzc2lnbmVkIGNvbG9yLlxuICovXG5cbnZhciBwcmV2Q29sb3IgPSAwO1xuXG4vKipcbiAqIFByZXZpb3VzIGxvZyB0aW1lc3RhbXAuXG4gKi9cblxudmFyIHByZXZUaW1lO1xuXG4vKipcbiAqIFNlbGVjdCBhIGNvbG9yLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNlbGVjdENvbG9yKCkge1xuICByZXR1cm4gZXhwb3J0cy5jb2xvcnNbcHJldkNvbG9yKysgJSBleHBvcnRzLmNvbG9ycy5sZW5ndGhdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZWJ1ZyhuYW1lc3BhY2UpIHtcblxuICAvLyBkZWZpbmUgdGhlIGBkaXNhYmxlZGAgdmVyc2lvblxuICBmdW5jdGlvbiBkaXNhYmxlZCgpIHtcbiAgfVxuICBkaXNhYmxlZC5lbmFibGVkID0gZmFsc2U7XG5cbiAgLy8gZGVmaW5lIHRoZSBgZW5hYmxlZGAgdmVyc2lvblxuICBmdW5jdGlvbiBlbmFibGVkKCkge1xuXG4gICAgdmFyIHNlbGYgPSBlbmFibGVkO1xuXG4gICAgLy8gc2V0IGBkaWZmYCB0aW1lc3RhbXBcbiAgICB2YXIgY3VyciA9ICtuZXcgRGF0ZSgpO1xuICAgIHZhciBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG4gICAgc2VsZi5kaWZmID0gbXM7XG4gICAgc2VsZi5wcmV2ID0gcHJldlRpbWU7XG4gICAgc2VsZi5jdXJyID0gY3VycjtcbiAgICBwcmV2VGltZSA9IGN1cnI7XG5cbiAgICAvLyBhZGQgdGhlIGBjb2xvcmAgaWYgbm90IHNldFxuICAgIGlmIChudWxsID09IHNlbGYudXNlQ29sb3JzKSBzZWxmLnVzZUNvbG9ycyA9IGV4cG9ydHMudXNlQ29sb3JzKCk7XG4gICAgaWYgKG51bGwgPT0gc2VsZi5jb2xvciAmJiBzZWxmLnVzZUNvbG9ycykgc2VsZi5jb2xvciA9IHNlbGVjdENvbG9yKCk7XG5cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICBhcmdzWzBdID0gZXhwb3J0cy5jb2VyY2UoYXJnc1swXSk7XG5cbiAgICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBhcmdzWzBdKSB7XG4gICAgICAvLyBhbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlb1xuICAgICAgYXJncyA9IFsnJW8nXS5jb25jYXQoYXJncyk7XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EteiVdKS9nLCBmdW5jdGlvbihtYXRjaCwgZm9ybWF0KSB7XG4gICAgICAvLyBpZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG4gICAgICBpZiAobWF0Y2ggPT09ICclJScpIHJldHVybiBtYXRjaDtcbiAgICAgIGluZGV4Kys7XG4gICAgICB2YXIgZm9ybWF0dGVyID0gZXhwb3J0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG4gICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGZvcm1hdHRlcikge1xuICAgICAgICB2YXIgdmFsID0gYXJnc1tpbmRleF07XG4gICAgICAgIG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuICAgICAgICAvLyBub3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG4gICAgICAgIGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgaW5kZXgtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcblxuICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZXhwb3J0cy5mb3JtYXRBcmdzKSB7XG4gICAgICBhcmdzID0gZXhwb3J0cy5mb3JtYXRBcmdzLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cbiAgICB2YXIgbG9nRm4gPSBlbmFibGVkLmxvZyB8fCBleHBvcnRzLmxvZyB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuICAgIGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICB9XG4gIGVuYWJsZWQuZW5hYmxlZCA9IHRydWU7XG5cbiAgdmFyIGZuID0gZXhwb3J0cy5lbmFibGVkKG5hbWVzcGFjZSkgPyBlbmFibGVkIDogZGlzYWJsZWQ7XG5cbiAgZm4ubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXG4gIHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG4gKiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gIGV4cG9ydHMuc2F2ZShuYW1lc3BhY2VzKTtcblxuICB2YXIgc3BsaXQgPSAobmFtZXNwYWNlcyB8fCAnJykuc3BsaXQoL1tcXHMsXSsvKTtcbiAgdmFyIGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKCFzcGxpdFtpXSkgY29udGludWU7IC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG4gICAgbmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG4gICAgaWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuICAgICAgZXhwb3J0cy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zdWJzdHIoMSkgKyAnJCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwb3J0cy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgZXhwb3J0cy5lbmFibGUoJycpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG4gIHZhciBpLCBsZW47XG4gIGZvciAoaSA9IDAsIGxlbiA9IGV4cG9ydHMuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoZXhwb3J0cy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGZvciAoaSA9IDAsIGxlbiA9IGV4cG9ydHMubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoZXhwb3J0cy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvZXJjZSBgdmFsYC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSB2YWxcbiAqIEByZXR1cm4ge01peGVkfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuICBpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG4gIHJldHVybiB2YWw7XG59XG4iLCIvKiFcbiAqIEBkZXNjcmlwdGlvbiBSZWN1cnNpdmUgb2JqZWN0IGV4dGVuZGluZ1xuICogQGF1dGhvciBWaWFjaGVzbGF2IExvdHNtYW5vdiA8bG90c21hbm92ODlAZ21haWwuY29tPlxuICogQGxpY2Vuc2UgTUlUXG4gKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUgVmlhY2hlc2xhdiBMb3RzbWFub3ZcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG4gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluXG4gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvXG4gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZlxuICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTXG4gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1JcbiAqIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUlxuICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBpc1NwZWNpZmljVmFsdWUodmFsKSB7XG5cdHJldHVybiAoXG5cdFx0dmFsIGluc3RhbmNlb2YgQnVmZmVyXG5cdFx0fHwgdmFsIGluc3RhbmNlb2YgRGF0ZVxuXHRcdHx8IHZhbCBpbnN0YW5jZW9mIFJlZ0V4cFxuXHQpID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjbG9uZVNwZWNpZmljVmFsdWUodmFsKSB7XG5cdGlmICh2YWwgaW5zdGFuY2VvZiBCdWZmZXIpIHtcblx0XHR2YXIgeCA9IG5ldyBCdWZmZXIodmFsLmxlbmd0aCk7XG5cdFx0dmFsLmNvcHkoeCk7XG5cdFx0cmV0dXJuIHg7XG5cdH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdHJldHVybiBuZXcgRGF0ZSh2YWwuZ2V0VGltZSgpKTtcblx0fSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBSZWdFeHApIHtcblx0XHRyZXR1cm4gbmV3IFJlZ0V4cCh2YWwpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzaXR1YXRpb24nKTtcblx0fVxufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZSBjbG9uaW5nIGFycmF5LlxuICovXG5mdW5jdGlvbiBkZWVwQ2xvbmVBcnJheShhcnIpIHtcblx0dmFyIGNsb25lID0gW107XG5cdGFyci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuXHRcdGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcblx0XHRcdFx0Y2xvbmVbaW5kZXhdID0gZGVlcENsb25lQXJyYXkoaXRlbSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzU3BlY2lmaWNWYWx1ZShpdGVtKSkge1xuXHRcdFx0XHRjbG9uZVtpbmRleF0gPSBjbG9uZVNwZWNpZmljVmFsdWUoaXRlbSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZVtpbmRleF0gPSBkZWVwRXh0ZW5kKHt9LCBpdGVtKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2xvbmVbaW5kZXhdID0gaXRlbTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gY2xvbmU7XG59XG5cbi8qKlxuICogRXh0ZW5pbmcgb2JqZWN0IHRoYXQgZW50ZXJlZCBpbiBmaXJzdCBhcmd1bWVudC5cbiAqXG4gKiBSZXR1cm5zIGV4dGVuZGVkIG9iamVjdCBvciBmYWxzZSBpZiBoYXZlIG5vIHRhcmdldCBvYmplY3Qgb3IgaW5jb3JyZWN0IHR5cGUuXG4gKlxuICogSWYgeW91IHdpc2ggdG8gY2xvbmUgc291cmNlIG9iamVjdCAod2l0aG91dCBtb2RpZnkgaXQpLCBqdXN0IHVzZSBlbXB0eSBuZXdcbiAqIG9iamVjdCBhcyBmaXJzdCBhcmd1bWVudCwgbGlrZSB0aGlzOlxuICogICBkZWVwRXh0ZW5kKHt9LCB5b3VyT2JqXzEsIFt5b3VyT2JqX05dKTtcbiAqL1xudmFyIGRlZXBFeHRlbmQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgvKm9ial8xLCBbb2JqXzJdLCBbb2JqX05dKi8pIHtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8IHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50c1swXTtcblx0fVxuXG5cdHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMF07XG5cblx0Ly8gY29udmVydCBhcmd1bWVudHMgdG8gYXJyYXkgYW5kIGN1dCBvZmYgdGFyZ2V0IG9iamVjdFxuXHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cblx0dmFyIHZhbCwgc3JjLCBjbG9uZTtcblxuXHRhcmdzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuXHRcdC8vIHNraXAgYXJndW1lbnQgaWYgaXQgaXMgYXJyYXkgb3IgaXNuJ3Qgb2JqZWN0XG5cdFx0aWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob2JqKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRzcmMgPSB0YXJnZXRba2V5XTsgLy8gc291cmNlIHZhbHVlXG5cdFx0XHR2YWwgPSBvYmpba2V5XTsgLy8gbmV3IHZhbHVlXG5cblx0XHRcdC8vIHJlY3Vyc2lvbiBwcmV2ZW50aW9uXG5cdFx0XHRpZiAodmFsID09PSB0YXJnZXQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIGlmIG5ldyB2YWx1ZSBpc24ndCBvYmplY3QgdGhlbiBqdXN0IG92ZXJ3cml0ZSBieSBuZXcgdmFsdWVcblx0XHRcdCAqIGluc3RlYWQgb2YgZXh0ZW5kaW5nLlxuXHRcdFx0ICovXG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWwgIT09ICdvYmplY3QnIHx8IHZhbCA9PT0gbnVsbCkge1xuXHRcdFx0XHR0YXJnZXRba2V5XSA9IHZhbDtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHQvLyBqdXN0IGNsb25lIGFycmF5cyAoYW5kIHJlY3Vyc2l2ZSBjbG9uZSBvYmplY3RzIGluc2lkZSlcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHRcdHRhcmdldFtrZXldID0gZGVlcENsb25lQXJyYXkodmFsKTtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHQvLyBjdXN0b20gY2xvbmluZyBhbmQgb3ZlcndyaXRlIGZvciBzcGVjaWZpYyBvYmplY3RzXG5cdFx0XHR9IGVsc2UgaWYgKGlzU3BlY2lmaWNWYWx1ZSh2YWwpKSB7XG5cdFx0XHRcdHRhcmdldFtrZXldID0gY2xvbmVTcGVjaWZpY1ZhbHVlKHZhbCk7XG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0Ly8gb3ZlcndyaXRlIGJ5IG5ldyB2YWx1ZSBpZiBzb3VyY2UgaXNuJ3Qgb2JqZWN0IG9yIGFycmF5XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzcmMgIT09ICdvYmplY3QnIHx8IHNyYyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHNyYykpIHtcblx0XHRcdFx0dGFyZ2V0W2tleV0gPSBkZWVwRXh0ZW5kKHt9LCB2YWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdC8vIHNvdXJjZSB2YWx1ZSBhbmQgbmV3IHZhbHVlIGlzIG9iamVjdHMgYm90aCwgZXh0ZW5kaW5nLi4uXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0YXJnZXRba2V5XSA9IGRlZXBFeHRlbmQoc3JjLCB2YWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHJldHVybiB0YXJnZXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkID0gcmVxdWlyZSgnLi91dGlsL3VyaS1oZWxwZXJzJyk7XG5cbiQuZmluZEJ5UmVmID0gcmVxdWlyZSgnLi91dGlsL2ZpbmQtcmVmZXJlbmNlJyk7XG4kLnJlc29sdmVTY2hlbWEgPSByZXF1aXJlKCcuL3V0aWwvcmVzb2x2ZS1zY2hlbWEnKTtcbiQubm9ybWFsaXplU2NoZW1hID0gcmVxdWlyZSgnLi91dGlsL25vcm1hbGl6ZS1zY2hlbWEnKTtcblxudmFyIGluc3RhbmNlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gJHJlZihmYWtlcm9vdCwgc2NoZW1hLCByZWZzLCBleCkge1xuICAgIGlmICh0eXBlb2YgZmFrZXJvb3QgPT09ICdvYmplY3QnKSB7XG4gICAgICBleCA9IHJlZnM7XG4gICAgICByZWZzID0gc2NoZW1hO1xuICAgICAgc2NoZW1hID0gZmFrZXJvb3Q7XG4gICAgICBmYWtlcm9vdCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2NoZW1hIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWZzID09PSAnb2JqZWN0JyAmJiByZWZzICE9PSBudWxsKSB7XG4gICAgICB2YXIgYXV4ID0gcmVmcztcblxuICAgICAgcmVmcyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBrIGluIGF1eCkge1xuICAgICAgICBhdXhba10uaWQgPSBhdXhba10uaWQgfHwgaztcbiAgICAgICAgcmVmcy5wdXNoKGF1eFtrXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWZzICE9PSAndW5kZWZpbmVkJyAmJiAhQXJyYXkuaXNBcnJheShyZWZzKSkge1xuICAgICAgZXggPSAhIXJlZnM7XG4gICAgICByZWZzID0gW107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaChyZWYpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVmLmlkID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgaWQgPSAkLnJlc29sdmVVUkwoZmFrZXJvb3QsIHJlZi5pZCkucmVwbGFjZSgvXFwvIz8kLywgJycpO1xuXG4gICAgICAgIGlmIChpZC5pbmRleE9mKCcjJykgPiAtMSkge1xuICAgICAgICAgIHZhciBwYXJ0cyA9IGlkLnNwbGl0KCcjJyk7XG5cbiAgICAgICAgICBpZiAocGFydHNbMV0uY2hhckF0KCkgPT09ICcvJykge1xuICAgICAgICAgICAgaWQgPSBwYXJ0c1swXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWQgPSBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISRyZWYucmVmc1tpZF0pIHtcbiAgICAgICAgICAkcmVmLnJlZnNbaWRdID0gcmVmO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgKHJlZnMgfHwgW10pLmNvbmNhdChbc2NoZW1hXSkuZm9yRWFjaChmdW5jdGlvbihyZWYpIHtcbiAgICAgIHNjaGVtYSA9ICQubm9ybWFsaXplU2NoZW1hKGZha2Vyb290LCByZWYsIHB1c2gpO1xuICAgICAgcHVzaChzY2hlbWEpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICQucmVzb2x2ZVNjaGVtYShzY2hlbWEsICRyZWYucmVmcywgZXgpO1xuICB9XG5cbiAgJHJlZi5yZWZzID0ge307XG4gICRyZWYudXRpbCA9ICQ7XG5cbiAgcmV0dXJuICRyZWY7XG59O1xuXG5pbnN0YW5jZS51dGlsID0gJDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNsb25lID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNlZW4pIHtcbiAgc2VlbiA9IHNlZW4gfHwgW107XG5cbiAgaWYgKHNlZW4uaW5kZXhPZihvYmopID4gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSBkZXJlZmVyZW5jZSBjaXJjdWxhciBzdHJ1Y3R1cmVzJyk7XG4gIH1cblxuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBzZWVuID0gc2Vlbi5jb25jYXQoW29ial0pO1xuXG4gIHZhciB0YXJnZXQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBbXSA6IHt9O1xuXG4gIGZ1bmN0aW9uIGNvcHkoa2V5LCB2YWx1ZSkge1xuICAgIHRhcmdldFtrZXldID0gY2xvbmUodmFsdWUsIHNlZW4pO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIGNvcHkoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgY29weShrZXksIG9ialtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJCA9IHJlcXVpcmUoJy4vdXJpLWhlbHBlcnMnKTtcblxuZnVuY3Rpb24gZ2V0KG9iaiwgcGF0aCkge1xuICB2YXIgaGFzaCA9IHBhdGguc3BsaXQoJyMnKVsxXTtcblxuICB2YXIgcGFydHMgPSBoYXNoLnNwbGl0KCcvJykuc2xpY2UoMSk7XG5cbiAgd2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQocGFydHMuc2hpZnQoKSkucmVwbGFjZSgvfjEvZywgJy8nKS5yZXBsYWNlKC9+MC9nLCAnficpO1xuXG4gICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTiBwb2ludGVyIG5vdCBmb3VuZDogJyArIHBhdGgpO1xuICAgIH1cblxuICAgIG9iaiA9IG9ialtrZXldO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxudmFyIGZpbmQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlkLCByZWZzKSB7XG4gIHZhciB0YXJnZXQgPSByZWZzW2lkXSB8fCByZWZzW2lkLnNwbGl0KCcjJylbMV1dIHx8IHJlZnNbJC5nZXREb2N1bWVudFVSSShpZCldO1xuXG4gIGlmICh0YXJnZXQpIHtcbiAgICB0YXJnZXQgPSBpZC5pbmRleE9mKCcjLycpID4gLTEgPyBnZXQodGFyZ2V0LCBpZCkgOiB0YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHJlZnMpIHtcbiAgICAgIGlmICgkLnJlc29sdmVVUkwocmVmc1trZXldLmlkLCBpZCkgPT09IHJlZnNba2V5XS5pZCkge1xuICAgICAgICB0YXJnZXQgPSByZWZzW2tleV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWZlcmVuY2Ugbm90IGZvdW5kOiAnICsgaWQpO1xuICB9XG5cbiAgd2hpbGUgKHRhcmdldC4kcmVmKSB7XG4gICAgdGFyZ2V0ID0gZmluZCh0YXJnZXQuJHJlZiwgcmVmcyk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICQgPSByZXF1aXJlKCcuL3VyaS1oZWxwZXJzJyk7XG5cbnZhciBjbG9uZU9iaiA9IHJlcXVpcmUoJy4vY2xvbmUtb2JqJyk7XG5cbnZhciBTQ0hFTUFfVVJJID0gW1xuICAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjJyxcbiAgJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIydcbl07XG5cbmZ1bmN0aW9uIGV4cGFuZChvYmosIHBhcmVudCwgY2FsbGJhY2spIHtcbiAgaWYgKG9iaikge1xuICAgIHZhciBpZCA9IHR5cGVvZiBvYmouaWQgPT09ICdzdHJpbmcnID8gb2JqLmlkIDogJyMnO1xuXG4gICAgaWYgKCEkLmlzVVJMKGlkKSkge1xuICAgICAgaWQgPSAkLnJlc29sdmVVUkwocGFyZW50ID09PSBpZCA/IG51bGwgOiBwYXJlbnQsIGlkKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iai4kcmVmID09PSAnc3RyaW5nJyAmJiAhJC5pc1VSTChvYmouJHJlZikpIHtcbiAgICAgIG9iai4kcmVmID0gJC5yZXNvbHZlVVJMKGlkLCBvYmouJHJlZik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvYmouaWQgPSBwYXJlbnQgPSBpZDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhKGtleSA9PT0gJ2VudW0nIHx8IGtleSA9PT0gJ3JlcXVpcmVkJykpIHtcbiAgICAgIGV4cGFuZCh2YWx1ZSwgcGFyZW50LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrKG9iaik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmYWtlcm9vdCwgc2NoZW1hLCBwdXNoKSB7XG4gIGlmICh0eXBlb2YgZmFrZXJvb3QgPT09ICdvYmplY3QnKSB7XG4gICAgcHVzaCA9IHNjaGVtYTtcbiAgICBzY2hlbWEgPSBmYWtlcm9vdDtcbiAgICBmYWtlcm9vdCA9IG51bGw7XG4gIH1cblxuICB2YXIgYmFzZSA9IGZha2Vyb290IHx8ICcnLFxuICAgICAgY29weSA9IGNsb25lT2JqKHNjaGVtYSk7XG5cbiAgaWYgKGNvcHkuJHNjaGVtYSAmJiBTQ0hFTUFfVVJJLmluZGV4T2YoY29weS4kc2NoZW1hKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHNjaGVtYSB2ZXJzaW9uICh2NCBvbmx5KScpO1xuICB9XG5cbiAgYmFzZSA9ICQucmVzb2x2ZVVSTChjb3B5LiRzY2hlbWEgfHwgU0NIRU1BX1VSSVswXSwgYmFzZSk7XG5cbiAgZXhwYW5kKGNvcHksICQucmVzb2x2ZVVSTChjb3B5LmlkIHx8ICcjJywgYmFzZSksIHB1c2gpO1xuXG4gIGNvcHkuaWQgPSBjb3B5LmlkIHx8IGJhc2U7XG5cbiAgcmV0dXJuIGNvcHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJCA9IHJlcXVpcmUoJy4vdXJpLWhlbHBlcnMnKTtcblxudmFyIGZpbmQgPSByZXF1aXJlKCcuL2ZpbmQtcmVmZXJlbmNlJyk7XG5cbnZhciBkZWVwRXh0ZW5kID0gcmVxdWlyZSgnZGVlcC1leHRlbmQnKTtcblxuZnVuY3Rpb24gaXNLZXkocHJvcCkge1xuICByZXR1cm4gcHJvcCA9PT0gJ2VudW0nIHx8IHByb3AgPT09ICdyZXF1aXJlZCcgfHwgcHJvcCA9PT0gJ2RlZmluaXRpb25zJztcbn1cblxuZnVuY3Rpb24gY29weShvYmosIHJlZnMsIHBhcmVudCwgcmVzb2x2ZSkge1xuICB2YXIgdGFyZ2V0ID0gIEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDoge307XG5cbiAgaWYgKHR5cGVvZiBvYmouJHJlZiA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgYmFzZSA9ICQuZ2V0RG9jdW1lbnRVUkkob2JqLiRyZWYpO1xuXG4gICAgaWYgKHBhcmVudCAhPT0gYmFzZSB8fCAocmVzb2x2ZSAmJiBvYmouJHJlZi5pbmRleE9mKCcjLycpID4gLTEpKSB7XG4gICAgICB2YXIgZml4ZWQgPSBmaW5kKG9iai4kcmVmLCByZWZzKTtcblxuICAgICAgZGVlcEV4dGVuZChvYmosIGZpeGVkKTtcblxuICAgICAgZGVsZXRlIG9iai4kcmVmO1xuICAgICAgZGVsZXRlIG9iai5pZDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xuICAgIGlmICh0eXBlb2Ygb2JqW3Byb3BdID09PSAnb2JqZWN0JyAmJiAhaXNLZXkocHJvcCkpIHtcbiAgICAgIHRhcmdldFtwcm9wXSA9IGNvcHkob2JqW3Byb3BdLCByZWZzLCBwYXJlbnQsIHJlc29sdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHJlZnMsIHJlc29sdmUpIHtcbiAgdmFyIGZpeGVkSWQgPSAkLnJlc29sdmVVUkwob2JqLiRzY2hlbWEsIG9iai5pZCksXG4gICAgICBwYXJlbnQgPSAkLmdldERvY3VtZW50VVJJKGZpeGVkSWQpO1xuXG4gIHJldHVybiBjb3B5KG9iaiwgcmVmcywgcGFyZW50LCByZXNvbHZlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BqdDMzL2VmYjJmMTEzNGJhYjk4NjExM2ZkXG5cbmZ1bmN0aW9uIFVSTFV0aWxzKHVybCwgYmFzZVVSTCkge1xuICAvLyByZW1vdmUgbGVhZGluZyAuL1xuICB1cmwgPSB1cmwucmVwbGFjZSgvXlxcLlxcLy8sICcnKTtcblxuICB2YXIgbSA9IFN0cmluZyh1cmwpLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKS5tYXRjaCgvXihbXjpcXC8/I10rOik/KD86XFwvXFwvKD86KFteOkBdKikoPzo6KFteOkBdKikpP0ApPygoW146XFwvPyNdKikoPzo6KFxcZCopKT8pKT8oW14/I10qKShcXD9bXiNdKik/KCNbXFxzXFxTXSopPy8pO1xuICBpZiAoIW0pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigpO1xuICB9XG4gIHZhciBocmVmID0gbVswXSB8fCAnJztcbiAgdmFyIHByb3RvY29sID0gbVsxXSB8fCAnJztcbiAgdmFyIHVzZXJuYW1lID0gbVsyXSB8fCAnJztcbiAgdmFyIHBhc3N3b3JkID0gbVszXSB8fCAnJztcbiAgdmFyIGhvc3QgPSBtWzRdIHx8ICcnO1xuICB2YXIgaG9zdG5hbWUgPSBtWzVdIHx8ICcnO1xuICB2YXIgcG9ydCA9IG1bNl0gfHwgJyc7XG4gIHZhciBwYXRobmFtZSA9IG1bN10gfHwgJyc7XG4gIHZhciBzZWFyY2ggPSBtWzhdIHx8ICcnO1xuICB2YXIgaGFzaCA9IG1bOV0gfHwgJyc7XG4gIGlmIChiYXNlVVJMICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgYmFzZSA9IG5ldyBVUkxVdGlscyhiYXNlVVJMKTtcbiAgICB2YXIgZmxhZyA9IHByb3RvY29sID09PSAnJyAmJiBob3N0ID09PSAnJyAmJiB1c2VybmFtZSA9PT0gJyc7XG4gICAgaWYgKGZsYWcgJiYgcGF0aG5hbWUgPT09ICcnICYmIHNlYXJjaCA9PT0gJycpIHtcbiAgICAgIHNlYXJjaCA9IGJhc2Uuc2VhcmNoO1xuICAgIH1cbiAgICBpZiAoZmxhZyAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgcGF0aG5hbWUgPSAocGF0aG5hbWUgIT09ICcnID8gKGJhc2UucGF0aG5hbWUuc2xpY2UoMCwgYmFzZS5wYXRobmFtZS5sYXN0SW5kZXhPZignLycpICsgMSkgKyBwYXRobmFtZSkgOiBiYXNlLnBhdGhuYW1lKTtcbiAgICB9XG4gICAgLy8gZG90IHNlZ21lbnRzIHJlbW92YWxcbiAgICB2YXIgb3V0cHV0ID0gW107XG5cbiAgICBwYXRobmFtZS5yZXBsYWNlKC9cXC8/W15cXC9dKy9nLCBmdW5jdGlvbihwKSB7XG4gICAgICBpZiAocCA9PT0gJy8uLicpIHtcbiAgICAgICAgb3V0cHV0LnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0LnB1c2gocCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBwYXRobmFtZSA9IG91dHB1dC5qb2luKCcnKSB8fCAnLyc7XG5cbiAgICBpZiAoZmxhZykge1xuICAgICAgcG9ydCA9IGJhc2UucG9ydDtcbiAgICAgIGhvc3RuYW1lID0gYmFzZS5ob3N0bmFtZTtcbiAgICAgIGhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICBwYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICB1c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgfVxuICAgIGlmIChwcm90b2NvbCA9PT0gJycpIHtcbiAgICAgIHByb3RvY29sID0gYmFzZS5wcm90b2NvbDtcbiAgICB9XG4gICAgaHJlZiA9IHByb3RvY29sICsgKGhvc3QgIT09ICcnID8gJy8vJyA6ICcnKSArICh1c2VybmFtZSAhPT0gJycgPyB1c2VybmFtZSArIChwYXNzd29yZCAhPT0gJycgPyAnOicgKyBwYXNzd29yZCA6ICcnKSArICdAJyA6ICcnKSArIGhvc3QgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG4gIH1cbiAgdGhpcy5ocmVmID0gaHJlZjtcbiAgdGhpcy5vcmlnaW4gPSBwcm90b2NvbCArIChob3N0ICE9PSAnJyA/ICcvLycgKyBob3N0IDogJycpO1xuICB0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7XG4gIHRoaXMudXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkO1xuICB0aGlzLmhvc3QgPSBob3N0O1xuICB0aGlzLmhvc3RuYW1lID0gaG9zdG5hbWU7XG4gIHRoaXMucG9ydCA9IHBvcnQ7XG4gIHRoaXMucGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgdGhpcy5zZWFyY2ggPSBzZWFyY2g7XG4gIHRoaXMuaGFzaCA9IGhhc2g7XG59XG5cbmZ1bmN0aW9uIGlzVVJMKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyAmJiAvXlxcdys6XFwvXFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VVUkkoaHJlZiwgYmFzZSkge1xuICByZXR1cm4gbmV3IFVSTFV0aWxzKGhyZWYsIGJhc2UpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVVJMKGJhc2UsIGhyZWYpIHtcbiAgYmFzZSA9IGJhc2UgfHwgJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hIyc7XG5cbiAgaHJlZiA9IHBhcnNlVVJJKGhyZWYsIGJhc2UpO1xuICBiYXNlID0gcGFyc2VVUkkoYmFzZSk7XG5cbiAgaWYgKGJhc2UuaGFzaCAmJiAhaHJlZi5oYXNoKSB7XG4gICAgcmV0dXJuIGhyZWYuaHJlZiArIGJhc2UuaGFzaDtcbiAgfVxuXG4gIHJldHVybiBocmVmLmhyZWY7XG59XG5cbmZ1bmN0aW9uIGdldERvY3VtZW50VVJJKHVyaSkge1xuICByZXR1cm4gdHlwZW9mIHVyaSA9PT0gJ3N0cmluZycgJiYgdXJpLnNwbGl0KCcjJylbMF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1VSTDogaXNVUkwsXG4gIHBhcnNlVVJJOiBwYXJzZVVSSSxcbiAgcmVzb2x2ZVVSTDogcmVzb2x2ZVVSTCxcbiAgZ2V0RG9jdW1lbnRVUkk6IGdldERvY3VtZW50VVJJXG59O1xuIiwiLy9wcm90ZWN0ZWQgaGVscGVyIGNsYXNzXG5mdW5jdGlvbiBfU3ViUmFuZ2UobG93LCBoaWdoKSB7XG4gICAgdGhpcy5sb3cgPSBsb3c7XG4gICAgdGhpcy5oaWdoID0gaGlnaDtcbiAgICB0aGlzLmxlbmd0aCA9IDEgKyBoaWdoIC0gbG93O1xufVxuXG5fU3ViUmFuZ2UucHJvdG90eXBlLm92ZXJsYXBzID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgcmV0dXJuICEodGhpcy5oaWdoIDwgcmFuZ2UubG93IHx8IHRoaXMubG93ID4gcmFuZ2UuaGlnaCk7XG59O1xuXG5fU3ViUmFuZ2UucHJvdG90eXBlLnRvdWNoZXMgPSBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICByZXR1cm4gISh0aGlzLmhpZ2ggKyAxIDwgcmFuZ2UubG93IHx8IHRoaXMubG93IC0gMSA+IHJhbmdlLmhpZ2gpO1xufTtcblxuLy9yZXR1cm5zIGluY2x1c2l2ZSBjb21iaW5hdGlvbiBvZiBfU3ViUmFuZ2VzIGFzIGEgX1N1YlJhbmdlXG5fU3ViUmFuZ2UucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIHJldHVybiB0aGlzLnRvdWNoZXMocmFuZ2UpICYmIG5ldyBfU3ViUmFuZ2UoTWF0aC5taW4odGhpcy5sb3csIHJhbmdlLmxvdyksIE1hdGgubWF4KHRoaXMuaGlnaCwgcmFuZ2UuaGlnaCkpO1xufTtcblxuLy9yZXR1cm5zIHN1YnRyYWN0aW9uIG9mIF9TdWJSYW5nZXMgYXMgYW4gYXJyYXkgb2YgX1N1YlJhbmdlcyAodGhlcmUncyBhIGNhc2Ugd2hlcmUgc3VidHJhY3Rpb24gZGl2aWRlcyBpdCBpbiAyKVxuX1N1YlJhbmdlLnByb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIGlmICghdGhpcy5vdmVybGFwcyhyYW5nZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocmFuZ2UubG93IDw9IHRoaXMubG93ICYmIHJhbmdlLmhpZ2ggPj0gdGhpcy5oaWdoKSByZXR1cm4gW107XG4gICAgaWYgKHJhbmdlLmxvdyA+IHRoaXMubG93ICYmIHJhbmdlLmhpZ2ggPCB0aGlzLmhpZ2gpIHJldHVybiBbbmV3IF9TdWJSYW5nZSh0aGlzLmxvdywgcmFuZ2UubG93IC0gMSksIG5ldyBfU3ViUmFuZ2UocmFuZ2UuaGlnaCArIDEsIHRoaXMuaGlnaCldO1xuICAgIGlmIChyYW5nZS5sb3cgPD0gdGhpcy5sb3cpIHJldHVybiBbbmV3IF9TdWJSYW5nZShyYW5nZS5oaWdoICsgMSwgdGhpcy5oaWdoKV07XG4gICAgcmV0dXJuIFtuZXcgX1N1YlJhbmdlKHRoaXMubG93LCByYW5nZS5sb3cgLSAxKV07XG59O1xuXG5fU3ViUmFuZ2UucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmxvdyA9PSB0aGlzLmhpZ2gpIHJldHVybiB0aGlzLmxvdy50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmxvdyArICctJyArIHRoaXMuaGlnaDtcbn07XG5cbl9TdWJSYW5nZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBfU3ViUmFuZ2UodGhpcy5sb3csIHRoaXMuaGlnaCk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEaXNjb250aW51b3VzUmFuZ2UoYSwgYikge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRGlzY29udGludW91c1JhbmdlKSB7XG4gICAgICAgIHRoaXMucmFuZ2VzID0gW107XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgaWYgKGEgIT09IHVuZGVmaW5lZCkgdGhpcy5hZGQoYSwgYik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEaXNjb250aW51b3VzUmFuZ2UoYSwgYik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlX2xlbmd0aChzZWxmKSB7XG4gICAgc2VsZi5sZW5ndGggPSBzZWxmLnJhbmdlcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzLCByYW5nZSkge3JldHVybiBwcmV2aW91cyArIHJhbmdlLmxlbmd0aH0sIDApO1xufVxuXG5EaXNjb250aW51b3VzUmFuZ2UucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIF9hZGQoc3VicmFuZ2UpIHtcbiAgICAgICAgdmFyIG5ld19yYW5nZXMgPSBbXTtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHNlbGYucmFuZ2VzLmxlbmd0aCAmJiAhc3VicmFuZ2UudG91Y2hlcyhzZWxmLnJhbmdlc1tpXSkpIHtcbiAgICAgICAgICAgIG5ld19yYW5nZXMucHVzaChzZWxmLnJhbmdlc1tpXS5jbG9uZSgpKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaSA8IHNlbGYucmFuZ2VzLmxlbmd0aCAmJiBzdWJyYW5nZS50b3VjaGVzKHNlbGYucmFuZ2VzW2ldKSkge1xuICAgICAgICAgICAgc3VicmFuZ2UgPSBzdWJyYW5nZS5hZGQoc2VsZi5yYW5nZXNbaV0pO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIG5ld19yYW5nZXMucHVzaChzdWJyYW5nZSk7XG4gICAgICAgIHdoaWxlIChpIDwgc2VsZi5yYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXdfcmFuZ2VzLnB1c2goc2VsZi5yYW5nZXNbaV0uY2xvbmUoKSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5yYW5nZXMgPSBuZXdfcmFuZ2VzO1xuICAgICAgICBfdXBkYXRlX2xlbmd0aChzZWxmKTtcbiAgICB9XG5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIERpc2NvbnRpbnVvdXNSYW5nZSkge1xuICAgICAgICBhLnJhbmdlcy5mb3JFYWNoKF9hZGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgX1N1YlJhbmdlKSB7XG4gICAgICAgICAgICBfYWRkKGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkgYiA9IGE7XG4gICAgICAgICAgICBfYWRkKG5ldyBfU3ViUmFuZ2UoYSwgYikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuRGlzY29udGludW91c1JhbmdlLnByb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIF9zdWJ0cmFjdChzdWJyYW5nZSkge1xuICAgICAgICB2YXIgbmV3X3JhbmdlcyA9IFtdO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc2VsZi5yYW5nZXMubGVuZ3RoICYmICFzdWJyYW5nZS5vdmVybGFwcyhzZWxmLnJhbmdlc1tpXSkpIHtcbiAgICAgICAgICAgIG5ld19yYW5nZXMucHVzaChzZWxmLnJhbmdlc1tpXS5jbG9uZSgpKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaSA8IHNlbGYucmFuZ2VzLmxlbmd0aCAmJiBzdWJyYW5nZS5vdmVybGFwcyhzZWxmLnJhbmdlc1tpXSkpIHtcbiAgICAgICAgICAgIG5ld19yYW5nZXMgPSBuZXdfcmFuZ2VzLmNvbmNhdChzZWxmLnJhbmdlc1tpXS5zdWJ0cmFjdChzdWJyYW5nZSkpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChpIDwgc2VsZi5yYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXdfcmFuZ2VzLnB1c2goc2VsZi5yYW5nZXNbaV0uY2xvbmUoKSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5yYW5nZXMgPSBuZXdfcmFuZ2VzO1xuICAgICAgICBfdXBkYXRlX2xlbmd0aChzZWxmKTtcbiAgICB9XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEaXNjb250aW51b3VzUmFuZ2UpIHtcbiAgICAgICAgYS5yYW5nZXMuZm9yRWFjaChfc3VidHJhY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgX1N1YlJhbmdlKSB7XG4gICAgICAgICAgICBfc3VidHJhY3QoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYiA9PT0gdW5kZWZpbmVkKSBiID0gYTtcbiAgICAgICAgICAgIF9zdWJ0cmFjdChuZXcgX1N1YlJhbmdlKGEsIGIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuRGlzY29udGludW91c1JhbmdlLnByb3RvdHlwZS5pbmRleCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHRoaXMucmFuZ2VzLmxlbmd0aCAmJiB0aGlzLnJhbmdlc1tpXS5sZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgaW5kZXggLT0gdGhpcy5yYW5nZXNbaV0ubGVuZ3RoO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIGlmIChpID49IHRoaXMucmFuZ2VzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzW2ldLmxvdyArIGluZGV4O1xufTtcblxuXG5EaXNjb250aW51b3VzUmFuZ2UucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnWyAnICsgdGhpcy5yYW5nZXMuam9pbignLCAnKSArICcgXSdcbn07XG5cbkRpc2NvbnRpbnVvdXNSYW5nZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBEaXNjb250aW51b3VzUmFuZ2UodGhpcyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERpc2NvbnRpbnVvdXNSYW5nZTtcbiIsIi8qXG4gIENvcHlyaWdodCAoYykgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gYW5kIENvbnRyaWJ1dG9ycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsXG4gICAgLy8gUmhpbm8sIGFuZCBwbGFpbiBicm93c2VyIGxvYWRpbmcuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmYWN0b3J5KGV4cG9ydHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZhY3RvcnkoKHJvb3QuZXNwcmltYSA9IHt9KSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBUb2tlbixcbiAgICAgICAgVG9rZW5OYW1lLFxuICAgICAgICBGbkV4cHJUb2tlbnMsXG4gICAgICAgIFN5bnRheCxcbiAgICAgICAgUGxhY2VIb2xkZXJzLFxuICAgICAgICBNZXNzYWdlcyxcbiAgICAgICAgUmVnZXgsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RyaWN0LFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0LFxuICAgICAgICBoYXNMaW5lVGVybWluYXRvcixcbiAgICAgICAgbGFzdEluZGV4LFxuICAgICAgICBsYXN0TGluZU51bWJlcixcbiAgICAgICAgbGFzdExpbmVTdGFydCxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RhcnRMaW5lTnVtYmVyLFxuICAgICAgICBzdGFydExpbmVTdGFydCxcbiAgICAgICAgc2Nhbm5pbmcsXG4gICAgICAgIGxlbmd0aCxcbiAgICAgICAgbG9va2FoZWFkLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgZXh0cmEsXG4gICAgICAgIGlzQmluZGluZ0VsZW1lbnQsXG4gICAgICAgIGlzQXNzaWdubWVudFRhcmdldCxcbiAgICAgICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yO1xuXG4gICAgVG9rZW4gPSB7XG4gICAgICAgIEJvb2xlYW5MaXRlcmFsOiAxLFxuICAgICAgICBFT0Y6IDIsXG4gICAgICAgIElkZW50aWZpZXI6IDMsXG4gICAgICAgIEtleXdvcmQ6IDQsXG4gICAgICAgIE51bGxMaXRlcmFsOiA1LFxuICAgICAgICBOdW1lcmljTGl0ZXJhbDogNixcbiAgICAgICAgUHVuY3R1YXRvcjogNyxcbiAgICAgICAgU3RyaW5nTGl0ZXJhbDogOCxcbiAgICAgICAgUmVndWxhckV4cHJlc3Npb246IDksXG4gICAgICAgIFRlbXBsYXRlOiAxMFxuICAgIH07XG5cbiAgICBUb2tlbk5hbWUgPSB7fTtcbiAgICBUb2tlbk5hbWVbVG9rZW4uQm9vbGVhbkxpdGVyYWxdID0gJ0Jvb2xlYW4nO1xuICAgIFRva2VuTmFtZVtUb2tlbi5FT0ZdID0gJzxlbmQ+JztcbiAgICBUb2tlbk5hbWVbVG9rZW4uSWRlbnRpZmllcl0gPSAnSWRlbnRpZmllcic7XG4gICAgVG9rZW5OYW1lW1Rva2VuLktleXdvcmRdID0gJ0tleXdvcmQnO1xuICAgIFRva2VuTmFtZVtUb2tlbi5OdWxsTGl0ZXJhbF0gPSAnTnVsbCc7XG4gICAgVG9rZW5OYW1lW1Rva2VuLk51bWVyaWNMaXRlcmFsXSA9ICdOdW1lcmljJztcbiAgICBUb2tlbk5hbWVbVG9rZW4uUHVuY3R1YXRvcl0gPSAnUHVuY3R1YXRvcic7XG4gICAgVG9rZW5OYW1lW1Rva2VuLlN0cmluZ0xpdGVyYWxdID0gJ1N0cmluZyc7XG4gICAgVG9rZW5OYW1lW1Rva2VuLlJlZ3VsYXJFeHByZXNzaW9uXSA9ICdSZWd1bGFyRXhwcmVzc2lvbic7XG4gICAgVG9rZW5OYW1lW1Rva2VuLlRlbXBsYXRlXSA9ICdUZW1wbGF0ZSc7XG5cbiAgICAvLyBBIGZ1bmN0aW9uIGZvbGxvd2luZyBvbmUgb2YgdGhvc2UgdG9rZW5zIGlzIGFuIGV4cHJlc3Npb24uXG4gICAgRm5FeHByVG9rZW5zID0gWycoJywgJ3snLCAnWycsICdpbicsICd0eXBlb2YnLCAnaW5zdGFuY2VvZicsICduZXcnLFxuICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywgJ2Nhc2UnLCAnZGVsZXRlJywgJ3Rocm93JywgJ3ZvaWQnLFxuICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgICAgICAnPScsICcrPScsICctPScsICcqPScsICcvPScsICclPScsICc8PD0nLCAnPj49JywgJz4+Pj0nLFxuICAgICAgICAgICAgICAgICAgICAnJj0nLCAnfD0nLCAnXj0nLCAnLCcsXG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbmFyeS91bmFyeSBvcGVyYXRvcnNcbiAgICAgICAgICAgICAgICAgICAgJysnLCAnLScsICcqJywgJy8nLCAnJScsICcrKycsICctLScsICc8PCcsICc+PicsICc+Pj4nLCAnJicsXG4gICAgICAgICAgICAgICAgICAgICd8JywgJ14nLCAnIScsICd+JywgJyYmJywgJ3x8JywgJz8nLCAnOicsICc9PT0nLCAnPT0nLCAnPj0nLFxuICAgICAgICAgICAgICAgICAgICAnPD0nLCAnPCcsICc+JywgJyE9JywgJyE9PSddO1xuXG4gICAgU3ludGF4ID0ge1xuICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJyxcbiAgICAgICAgQXNzaWdubWVudFBhdHRlcm46ICdBc3NpZ25tZW50UGF0dGVybicsXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsXG4gICAgICAgIEFycmF5UGF0dGVybjogJ0FycmF5UGF0dGVybicsXG4gICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nLFxuICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLFxuICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JyxcbiAgICAgICAgQ2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsXG4gICAgICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLFxuICAgICAgICBDbGFzc0JvZHk6ICdDbGFzc0JvZHknLFxuICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiAnQ2xhc3NEZWNsYXJhdGlvbicsXG4gICAgICAgIENsYXNzRXhwcmVzc2lvbjogJ0NsYXNzRXhwcmVzc2lvbicsXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLFxuICAgICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsXG4gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLFxuICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JyxcbiAgICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb246ICdFeHBvcnRBbGxEZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiAnRXhwb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLFxuICAgICAgICBGb3JPZlN0YXRlbWVudDogJ0Zvck9mU3RhdGVtZW50JyxcbiAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsXG4gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJyxcbiAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICAgICAgSWRlbnRpZmllcjogJ0lkZW50aWZpZXInLFxuICAgICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JyxcbiAgICAgICAgSW1wb3J0RGVjbGFyYXRpb246ICdJbXBvcnREZWNsYXJhdGlvbicsXG4gICAgICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyxcbiAgICAgICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyxcbiAgICAgICAgSW1wb3J0U3BlY2lmaWVyOiAnSW1wb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLFxuICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0YXRlbWVudCcsXG4gICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4cHJlc3Npb24nLFxuICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbicsXG4gICAgICAgIE1ldGFQcm9wZXJ0eTogJ01ldGFQcm9wZXJ0eScsXG4gICAgICAgIE1ldGhvZERlZmluaXRpb246ICdNZXRob2REZWZpbml0aW9uJyxcbiAgICAgICAgTmV3RXhwcmVzc2lvbjogJ05ld0V4cHJlc3Npb24nLFxuICAgICAgICBPYmplY3RFeHByZXNzaW9uOiAnT2JqZWN0RXhwcmVzc2lvbicsXG4gICAgICAgIE9iamVjdFBhdHRlcm46ICdPYmplY3RQYXR0ZXJuJyxcbiAgICAgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLFxuICAgICAgICBQcm9wZXJ0eTogJ1Byb3BlcnR5JyxcbiAgICAgICAgUmVzdEVsZW1lbnQ6ICdSZXN0RWxlbWVudCcsXG4gICAgICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsXG4gICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbicsXG4gICAgICAgIFNwcmVhZEVsZW1lbnQ6ICdTcHJlYWRFbGVtZW50JyxcbiAgICAgICAgU3VwZXI6ICdTdXBlcicsXG4gICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJyxcbiAgICAgICAgU3dpdGNoU3RhdGVtZW50OiAnU3dpdGNoU3RhdGVtZW50JyxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJyxcbiAgICAgICAgVGVtcGxhdGVFbGVtZW50OiAnVGVtcGxhdGVFbGVtZW50JyxcbiAgICAgICAgVGVtcGxhdGVMaXRlcmFsOiAnVGVtcGxhdGVMaXRlcmFsJyxcbiAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsXG4gICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLFxuICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLFxuICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJyxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJyxcbiAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsXG4gICAgICAgIFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JyxcbiAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRFeHByZXNzaW9uJ1xuICAgIH07XG5cbiAgICBQbGFjZUhvbGRlcnMgPSB7XG4gICAgICAgIEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXI6ICdBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyJ1xuICAgIH07XG5cbiAgICAvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIFY4LlxuICAgIE1lc3NhZ2VzID0ge1xuICAgICAgICBVbmV4cGVjdGVkVG9rZW46ICdVbmV4cGVjdGVkIHRva2VuICUwJyxcbiAgICAgICAgVW5leHBlY3RlZE51bWJlcjogJ1VuZXhwZWN0ZWQgbnVtYmVyJyxcbiAgICAgICAgVW5leHBlY3RlZFN0cmluZzogJ1VuZXhwZWN0ZWQgc3RyaW5nJyxcbiAgICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLFxuICAgICAgICBVbmV4cGVjdGVkUmVzZXJ2ZWQ6ICdVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmQnLFxuICAgICAgICBVbmV4cGVjdGVkVGVtcGxhdGU6ICdVbmV4cGVjdGVkIHF1YXNpICUwJyxcbiAgICAgICAgVW5leHBlY3RlZEVPUzogJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0JyxcbiAgICAgICAgTmV3bGluZUFmdGVyVGhyb3c6ICdJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3cnLFxuICAgICAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLFxuICAgICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvJyxcbiAgICAgICAgSW52YWxpZExIU0luQXNzaWdubWVudDogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gYXNzaWdubWVudCcsXG4gICAgICAgIEludmFsaWRMSFNJbkZvckluOiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItaW4nLFxuICAgICAgICBJbnZhbGlkTEhTSW5Gb3JMb29wOiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcCcsXG4gICAgICAgIE11bHRpcGxlRGVmYXVsdHNJblN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudCcsXG4gICAgICAgIE5vQ2F0Y2hPckZpbmFsbHk6ICdNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5JyxcbiAgICAgICAgVW5rbm93bkxhYmVsOiAnVW5kZWZpbmVkIGxhYmVsIFxcJyUwXFwnJyxcbiAgICAgICAgUmVkZWNsYXJhdGlvbjogJyUwIFxcJyUxXFwnIGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWQnLFxuICAgICAgICBJbGxlZ2FsQ29udGludWU6ICdJbGxlZ2FsIGNvbnRpbnVlIHN0YXRlbWVudCcsXG4gICAgICAgIElsbGVnYWxCcmVhazogJ0lsbGVnYWwgYnJlYWsgc3RhdGVtZW50JyxcbiAgICAgICAgSWxsZWdhbFJldHVybjogJ0lsbGVnYWwgcmV0dXJuIHN0YXRlbWVudCcsXG4gICAgICAgIFN0cmljdE1vZGVXaXRoOiAnU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudCcsXG4gICAgICAgIFN0cmljdENhdGNoVmFyaWFibGU6ICdDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJyxcbiAgICAgICAgU3RyaWN0VmFyTmFtZTogJ1ZhcmlhYmxlIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsXG4gICAgICAgIFN0cmljdFBhcmFtTmFtZTogJ1BhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJyxcbiAgICAgICAgU3RyaWN0UGFyYW1EdXBlOiAnU3RyaWN0IG1vZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMnLFxuICAgICAgICBTdHJpY3RGdW5jdGlvbk5hbWU6ICdGdW5jdGlvbiBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLFxuICAgICAgICBTdHJpY3RPY3RhbExpdGVyYWw6ICdPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuJyxcbiAgICAgICAgU3RyaWN0RGVsZXRlOiAnRGVsZXRlIG9mIGFuIHVucXVhbGlmaWVkIGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUuJyxcbiAgICAgICAgU3RyaWN0TEhTQXNzaWdubWVudDogJ0Fzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnLFxuICAgICAgICBTdHJpY3RMSFNQb3N0Zml4OiAnUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJyxcbiAgICAgICAgU3RyaWN0TEhTUHJlZml4OiAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLFxuICAgICAgICBTdHJpY3RSZXNlcnZlZFdvcmQ6ICdVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGUnLFxuICAgICAgICBUZW1wbGF0ZU9jdGFsTGl0ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiB0ZW1wbGF0ZSBzdHJpbmdzLicsXG4gICAgICAgIFBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRlcjogJ1Jlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyJyxcbiAgICAgICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6ICdVbmV4cGVjdGVkIHRva2VuID0nLFxuICAgICAgICBPYmplY3RQYXR0ZXJuQXNSZXN0UGFyYW1ldGVyOiAnVW5leHBlY3RlZCB0b2tlbiB7JyxcbiAgICAgICAgRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eTogJ0R1cGxpY2F0ZSBfX3Byb3RvX18gZmllbGRzIGFyZSBub3QgYWxsb3dlZCBpbiBvYmplY3QgbGl0ZXJhbHMnLFxuICAgICAgICBDb25zdHJ1Y3RvclNwZWNpYWxNZXRob2Q6ICdDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yJyxcbiAgICAgICAgRHVwbGljYXRlQ29uc3RydWN0b3I6ICdBIGNsYXNzIG1heSBvbmx5IGhhdmUgb25lIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgU3RhdGljUHJvdG90eXBlOiAnQ2xhc3NlcyBtYXkgbm90IGhhdmUgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZScsXG4gICAgICAgIE1pc3NpbmdGcm9tQ2xhdXNlOiAnVW5leHBlY3RlZCB0b2tlbicsXG4gICAgICAgIE5vQXNBZnRlckltcG9ydE5hbWVzcGFjZTogJ1VuZXhwZWN0ZWQgdG9rZW4nLFxuICAgICAgICBJbnZhbGlkTW9kdWxlU3BlY2lmaWVyOiAnVW5leHBlY3RlZCB0b2tlbicsXG4gICAgICAgIElsbGVnYWxJbXBvcnREZWNsYXJhdGlvbjogJ1VuZXhwZWN0ZWQgdG9rZW4nLFxuICAgICAgICBJbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb246ICdVbmV4cGVjdGVkIHRva2VuJyxcbiAgICAgICAgRHVwbGljYXRlQmluZGluZzogJ0R1cGxpY2F0ZSBiaW5kaW5nICUwJ1xuICAgIH07XG5cbiAgICAvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LmpzLlxuICAgIFJlZ2V4ID0ge1xuICAgICAgICAvLyBFQ01BU2NyaXB0IDYvVW5pY29kZSB2Ny4wLjAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6XG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiAvW1xceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDhBMC1cXHUwOEIyXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4XFx1MEM1OVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDYwXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUMxLVxcdTE5QzdcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjFcXHUxQ0Y1XFx1MUNGNlxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTgtXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTYwLVxcdTIxODhcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUItXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0FEXFx1QTdCMFxcdUE3QjFcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI1RlxcdUFCNjRcXHVBQjY1XFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REQ0MC1cXHVERDc0XFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYzMC1cXHVERjRBXFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXFx1REZEMS1cXHVERkQ1XXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTMzXFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OF18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDODAtXFx1RENBRlxcdURDQzRcXHVEQ0M1XFx1RENDN1xcdUREODAtXFx1RERBRVxcdURFMDAtXFx1REUyRlxcdURFNDRcXHVERTgwLVxcdURFQUFdfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdURFQzAtXFx1REVGOF18XFx1RDgwOFtcXHVEQzAwLVxcdURGOThdfFxcdUQ4MDlbXFx1REMwMC1cXHVEQzZFXXxbXFx1RDgwQ1xcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q11bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REYwMC1cXHVERjQ0XFx1REY1MFxcdURGOTMtXFx1REY5Rl18XFx1RDgyQ1tcXHVEQzAwXFx1REMwMV18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzQVtcXHVEQzAwLVxcdURDQzRdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRF18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdLyxcblxuICAgICAgICAvLyBFQ01BU2NyaXB0IDYvVW5pY29kZSB2Ny4wLjAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDpcbiAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDogL1tcXHhBQVxceEI1XFx4QjdcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzAwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4My1cXHUwNDg3XFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MTAtXFx1MDYxQVxcdTA2MjAtXFx1MDY2OVxcdTA2NkUtXFx1MDZEM1xcdTA2RDUtXFx1MDZEQ1xcdTA2REYtXFx1MDZFOFxcdTA2RUEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwLVxcdTA3NEFcXHUwNzRELVxcdTA3QjFcXHUwN0MwLVxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODJEXFx1MDg0MC1cXHUwODVCXFx1MDhBMC1cXHUwOEIyXFx1MDhFNC1cXHUwOTYzXFx1MDk2Ni1cXHUwOTZGXFx1MDk3MS1cXHUwOTgzXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCQy1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0VcXHUwOUQ3XFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTNcXHUwOUU2LVxcdTA5RjFcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2M1xcdTBCNjYtXFx1MEI2RlxcdTBCNzFcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJFRlxcdTBDMDAtXFx1MEMwM1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OFxcdTBDNTlcXHUwQzYwLVxcdTBDNjNcXHUwQzY2LVxcdTBDNkZcXHUwQzgxLVxcdTBDODNcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JDLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDREVcXHUwQ0UwLVxcdTBDRTNcXHUwQ0U2LVxcdTBDRUZcXHUwQ0YxXFx1MENGMlxcdTBEMDEtXFx1MEQwM1xcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0QtXFx1MEQ0NFxcdTBENDYtXFx1MEQ0OFxcdTBENEEtXFx1MEQ0RVxcdTBENTdcXHUwRDYwLVxcdTBENjNcXHUwRDY2LVxcdTBENkZcXHUwRDdBLVxcdTBEN0ZcXHUwRDgyXFx1MEQ4M1xcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERTYtXFx1MERFRlxcdTBERjJcXHUwREYzXFx1MEUwMS1cXHUwRTNBXFx1MEU0MC1cXHUwRTRFXFx1MEU1MC1cXHUwRTU5XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjlcXHUwRUJCLVxcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVDOC1cXHUwRUNEXFx1MEVEMC1cXHUwRUQ5XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGMThcXHUwRjE5XFx1MEYyMC1cXHUwRjI5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRS1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY3MS1cXHUwRjg0XFx1MEY4Ni1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMDAtXFx1MTA0OVxcdTEwNTAtXFx1MTA5RFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzVELVxcdTEzNUZcXHUxMzY5LVxcdTEzNzFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTRcXHUxNzIwLVxcdTE3MzRcXHUxNzQwLVxcdTE3NTNcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzcyXFx1MTc3M1xcdTE3ODAtXFx1MTdEM1xcdTE3RDdcXHUxN0RDXFx1MTdERFxcdTE3RTAtXFx1MTdFOVxcdTE4MEItXFx1MTgwRFxcdTE4MTAtXFx1MTgxOVxcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5MjAtXFx1MTkyQlxcdTE5MzAtXFx1MTkzQlxcdTE5NDYtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTE5RDAtXFx1MTlEQVxcdTFBMDAtXFx1MUExQlxcdTFBMjAtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0YtXFx1MUE4OVxcdTFBOTAtXFx1MUE5OVxcdTFBQTdcXHUxQUIwLVxcdTFBQkRcXHUxQjAwLVxcdTFCNEJcXHUxQjUwLVxcdTFCNTlcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCRjNcXHUxQzAwLVxcdTFDMzdcXHUxQzQwLVxcdTFDNDlcXHUxQzRELVxcdTFDN0RcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRjZcXHUxQ0Y4XFx1MUNGOVxcdTFEMDAtXFx1MURGNVxcdTFERkMtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDBDXFx1MjAwRFxcdTIwM0ZcXHUyMDQwXFx1MjA1NFxcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBGMFxcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTgtXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTYwLVxcdTIxODhcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDdGLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyREUwLVxcdTJERkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5LVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MkJcXHVBNjQwLVxcdUE2NkZcXHVBNjc0LVxcdUE2N0RcXHVBNjdGLVxcdUE2OURcXHVBNjlGLVxcdUE2RjFcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3OEVcXHVBNzkwLVxcdUE3QURcXHVBN0IwXFx1QTdCMVxcdUE3RjctXFx1QTgyN1xcdUE4NDAtXFx1QTg3M1xcdUE4ODAtXFx1QThDNFxcdUE4RDAtXFx1QThEOVxcdUE4RTAtXFx1QThGN1xcdUE4RkJcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBOUUwLVxcdUE5RkVcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBLVxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUZcXHVBQUYyLVxcdUFBRjZcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNUZcXHVBQjY0XFx1QUI2NVxcdUFCQzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkRcXHVGRTMzXFx1RkUzNFxcdUZFNEQtXFx1RkU0RlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGM0ZcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERDQwLVxcdURENzRcXHVEREZEXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REVFMFxcdURGMDAtXFx1REYxRlxcdURGMzAtXFx1REY0QVxcdURGNTAtXFx1REY3QVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRlxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0EwLVxcdURDQTlcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMC1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzNcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU2XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OF18XFx1RDgwNFtcXHVEQzAwLVxcdURDNDZcXHVEQzY2LVxcdURDNkZcXHVEQzdGLVxcdURDQkFcXHVEQ0QwLVxcdURDRThcXHVEQ0YwLVxcdURDRjlcXHVERDAwLVxcdUREMzRcXHVERDM2LVxcdUREM0ZcXHVERDUwLVxcdURENzNcXHVERDc2XFx1REQ4MC1cXHVEREM0XFx1REREMC1cXHVERERBXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTM3XFx1REVCMC1cXHVERUVBXFx1REVGMC1cXHVERUY5XFx1REYwMS1cXHVERjAzXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0MtXFx1REY0NFxcdURGNDdcXHVERjQ4XFx1REY0Qi1cXHVERjREXFx1REY1N1xcdURGNUQtXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQzgwLVxcdURDQzVcXHVEQ0M3XFx1RENEMC1cXHVEQ0Q5XFx1REQ4MC1cXHVEREI1XFx1RERCOC1cXHVEREMwXFx1REUwMC1cXHVERTQwXFx1REU0NFxcdURFNTAtXFx1REU1OVxcdURFODAtXFx1REVCN1xcdURFQzAtXFx1REVDOV18XFx1RDgwNltcXHVEQ0EwLVxcdURDRTlcXHVEQ0ZGXFx1REVDMC1cXHVERUY4XXxcXHVEODA4W1xcdURDMDAtXFx1REY5OF18XFx1RDgwOVtcXHVEQzAwLVxcdURDNkVdfFtcXHVEODBDXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFNjAtXFx1REU2OVxcdURFRDAtXFx1REVFRFxcdURFRjAtXFx1REVGNFxcdURGMDAtXFx1REYzNlxcdURGNDAtXFx1REY0M1xcdURGNTAtXFx1REY1OVxcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERjAwLVxcdURGNDRcXHVERjUwLVxcdURGN0VcXHVERjhGLVxcdURGOUZdfFxcdUQ4MkNbXFx1REMwMFxcdURDMDFdfFxcdUQ4MkZbXFx1REMwMC1cXHVEQzZBXFx1REM3MC1cXHVEQzdDXFx1REM4MC1cXHVEQzg4XFx1REM5MC1cXHVEQzk5XFx1REM5RFxcdURDOUVdfFxcdUQ4MzRbXFx1REQ2NS1cXHVERDY5XFx1REQ2RC1cXHVERDcyXFx1REQ3Qi1cXHVERDgyXFx1REQ4NS1cXHVERDhCXFx1RERBQS1cXHVEREFEXFx1REU0Mi1cXHVERTQ0XXxcXHVEODM1W1xcdURDMDAtXFx1REM1NFxcdURDNTYtXFx1REM5Q1xcdURDOUVcXHVEQzlGXFx1RENBMlxcdURDQTVcXHVEQ0E2XFx1RENBOS1cXHVEQ0FDXFx1RENBRS1cXHVEQ0I5XFx1RENCQlxcdURDQkQtXFx1RENDM1xcdURDQzUtXFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMUUtXFx1REQzOVxcdUREM0ItXFx1REQzRVxcdURENDAtXFx1REQ0NFxcdURENDZcXHVERDRBLVxcdURENTBcXHVERDUyLVxcdURFQTVcXHVERUE4LVxcdURFQzBcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRkFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMzRcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNkVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGQThcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQ0JcXHVERkNFLVxcdURGRkZdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1RENEMC1cXHVEQ0Q2XXxcXHVEODNCW1xcdURFMDAtXFx1REUwM1xcdURFMDUtXFx1REUxRlxcdURFMjFcXHVERTIyXFx1REUyNFxcdURFMjdcXHVERTI5LVxcdURFMzJcXHVERTM0LVxcdURFMzdcXHVERTM5XFx1REUzQlxcdURFNDJcXHVERTQ3XFx1REU0OVxcdURFNEJcXHVERTRELVxcdURFNEZcXHVERTUxXFx1REU1MlxcdURFNTRcXHVERTU3XFx1REU1OVxcdURFNUJcXHVERTVEXFx1REU1RlxcdURFNjFcXHVERTYyXFx1REU2NFxcdURFNjctXFx1REU2QVxcdURFNkMtXFx1REU3MlxcdURFNzQtXFx1REU3N1xcdURFNzktXFx1REU3Q1xcdURFN0VcXHVERTgwLVxcdURFODlcXHVERThCLVxcdURFOUJcXHVERUExLVxcdURFQTNcXHVERUE1LVxcdURFQTlcXHVERUFCLVxcdURFQkJdfFxcdUQ4NjlbXFx1REMwMC1cXHVERUQ2XFx1REYwMC1cXHVERkZGXXxcXHVEODZEW1xcdURDMDAtXFx1REYzNFxcdURGNDAtXFx1REZGRl18XFx1RDg2RVtcXHVEQzAwLVxcdURDMURdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEQjQwW1xcdUREMDAtXFx1RERFRl0vXG4gICAgfTtcblxuICAgIC8vIEVuc3VyZSB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90aGVyd2lzZSB0aHJvdyBhbiBlcnJvci5cbiAgICAvLyBUaGlzIGlzIG9ubHkgdG8gaGF2ZSBhIGJldHRlciBjb250cmFjdCBzZW1hbnRpYywgaS5lLiBhbm90aGVyIHNhZmV0eSBuZXRcbiAgICAvLyB0byBjYXRjaCBhIGxvZ2ljIGVycm9yLiBUaGUgY29uZGl0aW9uIHNoYWxsIGJlIGZ1bGZpbGxlZCBpbiBub3JtYWwgY2FzZS5cbiAgICAvLyBEbyBOT1QgdXNlIHRoaXMgdG8gZW5mb3JjZSBhIGNlcnRhaW4gY29uZGl0aW9uIG9uIGFueSB1c2VyIGlucHV0LlxuXG4gICAgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQVNTRVJUOiAnICsgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSk7ICAgLy8gMC4uOVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHtcbiAgICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5YWJjZGVmQUJDREVGJy5pbmRleE9mKGNoKSA+PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKSA+PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9jdGFsVG9EZWNpbWFsKGNoKSB7XG4gICAgICAgIC8vIFxcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlXG4gICAgICAgIHZhciBvY3RhbCA9IChjaCAhPT0gJzAnKSwgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7XG5cbiAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgb2N0YWwgPSB0cnVlO1xuICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG5cbiAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzXG4gICAgICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDNcbiAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2luZGV4KytdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiBjb2RlLFxuICAgICAgICAgICAgb2N0YWw6IG9jdGFsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTEuMiBXaGl0ZSBTcGFjZVxuXG4gICAgZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMS4zIExpbmUgVGVybWluYXRvcnNcblxuICAgIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgwQSkgfHwgKGNoID09PSAweDBEKSB8fCAoY2ggPT09IDB4MjAyOCkgfHwgKGNoID09PSAweDIwMjkpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDExLjYgSWRlbnRpZmllciBOYW1lcyBhbmQgSWRlbnRpZmllcnNcblxuICAgIGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoY3ApIHtcbiAgICAgICAgcmV0dXJuIChjcCA8IDB4MTAwMDApID8gU3RyaW5nLmZyb21DaGFyQ29kZShjcCkgOlxuICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MDAgKyAoKGNwIC0gMHgxMDAwMCkgPj4gMTApKSArXG4gICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4REMwMCArICgoY3AgLSAweDEwMDAwKSAmIDEwMjMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKVxuICAgICAgICAgICAgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aXG4gICAgICAgICAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnpcbiAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChmcm9tQ29kZVBvaW50KGNoKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclBhcnQoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAgICAgICAgIC8vIDAuLjlcbiAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGZyb21Db2RlUG9pbnQoY2gpKSk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTEuNi4yLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzXG5cbiAgICBmdW5jdGlvbiBpc0Z1dHVyZVJlc2VydmVkV29yZChpZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICBjYXNlICdleHBvcnQnOlxuICAgICAgICBjYXNlICdpbXBvcnQnOlxuICAgICAgICBjYXNlICdzdXBlcic6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChpZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgIGNhc2UgJ2ltcGxlbWVudHMnOlxuICAgICAgICBjYXNlICdpbnRlcmZhY2UnOlxuICAgICAgICBjYXNlICdwYWNrYWdlJzpcbiAgICAgICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICAgIGNhc2UgJ3Byb3RlY3RlZCc6XG4gICAgICAgIGNhc2UgJ3B1YmxpYyc6XG4gICAgICAgIGNhc2UgJ3N0YXRpYyc6XG4gICAgICAgIGNhc2UgJ3lpZWxkJzpcbiAgICAgICAgY2FzZSAnbGV0JzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZXN0cmljdGVkV29yZChpZCkge1xuICAgICAgICByZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTEuNi4yLjEgS2V5d29yZHNcblxuICAgIGZ1bmN0aW9uIGlzS2V5d29yZChpZCkge1xuICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0gJ2RvJyk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8fCAoaWQgPT09ICdmb3InKSB8fCAoaWQgPT09ICduZXcnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ3RyeScpIHx8IChpZCA9PT0gJ2xldCcpO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAndGhpcycpIHx8IChpZCA9PT0gJ2Vsc2UnKSB8fCAoaWQgPT09ICdjYXNlJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICd2b2lkJykgfHwgKGlkID09PSAnd2l0aCcpIHx8IChpZCA9PT0gJ2VudW0nKTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3doaWxlJykgfHwgKGlkID09PSAnYnJlYWsnKSB8fCAoaWQgPT09ICdjYXRjaCcpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAndGhyb3cnKSB8fCAoaWQgPT09ICdjb25zdCcpIHx8IChpZCA9PT0gJ3lpZWxkJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICdjbGFzcycpIHx8IChpZCA9PT0gJ3N1cGVyJyk7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdyZXR1cm4nKSB8fCAoaWQgPT09ICd0eXBlb2YnKSB8fCAoaWQgPT09ICdkZWxldGUnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ3N3aXRjaCcpIHx8IChpZCA9PT0gJ2V4cG9ydCcpIHx8IChpZCA9PT0gJ2ltcG9ydCcpO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZGVmYXVsdCcpIHx8IChpZCA9PT0gJ2ZpbmFsbHknKSB8fCAoaWQgPT09ICdleHRlbmRzJyk7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdmdW5jdGlvbicpIHx8IChpZCA9PT0gJ2NvbnRpbnVlJykgfHwgKGlkID09PSAnZGVidWdnZXInKTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpbnN0YW5jZW9mJyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMS40IENvbW1lbnRzXG5cbiAgICBmdW5jdGlvbiBhZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHtcbiAgICAgICAgdmFyIGNvbW1lbnQ7XG5cbiAgICAgICAgYXNzZXJ0KHR5cGVvZiBzdGFydCA9PT0gJ251bWJlcicsICdDb21tZW50IG11c3QgaGF2ZSB2YWxpZCBwb3NpdGlvbicpO1xuXG4gICAgICAgIHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPSBzdGFydDtcblxuICAgICAgICBjb21tZW50ID0ge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbW1lbnQucmFuZ2UgPSBbc3RhcnQsIGVuZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICAgICAgY29tbWVudC5sb2MgPSBsb2M7XG4gICAgICAgIH1cbiAgICAgICAgZXh0cmEuY29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHtcbiAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS50b2tlbml6ZSkge1xuICAgICAgICAgICAgY29tbWVudC50eXBlID0gY29tbWVudC50eXBlICsgJ0NvbW1lbnQnO1xuICAgICAgICAgICAgaWYgKGV4dHJhLmRlbGVnYXRlKSB7XG4gICAgICAgICAgICAgICAgY29tbWVudCA9IGV4dHJhLmRlbGVnYXRlKGNvbW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goY29tbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7XG4gICAgICAgIHZhciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDtcblxuICAgICAgICBzdGFydCA9IGluZGV4IC0gb2Zmc2V0O1xuICAgICAgICBsb2MgPSB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIG9mZnNldFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICAgICAgaGFzTGluZVRlcm1pbmF0b3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0LCBpbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAxXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBjb21tZW50LCBzdGFydCwgaW5kZXggLSAxLCBsb2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDEzICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXgpO1xuICAgICAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhZGRDb21tZW50KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2tpcE11bHRpTGluZUNvbW1lbnQoKSB7XG4gICAgICAgIHZhciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDtcblxuICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gaW5kZXggLSAyO1xuICAgICAgICAgICAgbG9jID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgwQSkge1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYXNMaW5lVGVybWluYXRvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7XG4gICAgICAgICAgICAgICAgLy8gQmxvY2sgY29tbWVudCBlbmRzIHdpdGggJyovJy5cbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRikge1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAyLCBpbmRleCAtIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KCdCbG9jaycsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSYW4gb2ZmIHRoZSBlbmQgb2YgdGhlIGZpbGUgLSB0aGUgd2hvbGUgdGhpbmcgaXMgYSBjb21tZW50XG4gICAgICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgMiwgaW5kZXgpO1xuICAgICAgICAgICAgYWRkQ29tbWVudCgnQmxvY2snLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7XG4gICAgICAgIH1cbiAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBza2lwQ29tbWVudCgpIHtcbiAgICAgICAgdmFyIGNoLCBzdGFydDtcbiAgICAgICAgaGFzTGluZVRlcm1pbmF0b3IgPSBmYWxzZTtcblxuICAgICAgICBzdGFydCA9IChpbmRleCA9PT0gMCk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAgICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICBoYXNMaW5lVGVybWluYXRvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJGKSB7IC8vIFUrMDAyRiBpcyAnLydcbiAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJGKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgyKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsgIC8vIFUrMDAyQSBpcyAnKidcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgc2tpcE11bHRpTGluZUNvbW1lbnQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGNoID09PSAweDJEKSB7IC8vIFUrMDAyRCBpcyAnLSdcbiAgICAgICAgICAgICAgICAvLyBVKzAwM0UgaXMgJz4nXG4gICAgICAgICAgICAgICAgaWYgKChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDJEKSAmJiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAyKSA9PT0gMHgzRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicgaXMgYSBzaW5nbGUtbGluZSBjb21tZW50XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDM7XG4gICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNDKSB7IC8vIFUrMDAzQyBpcyAnPCdcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLnNsaWNlKGluZGV4ICsgMSwgaW5kZXggKyA0KSA9PT0gJyEtLScpIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYDxgXG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAhYFxuICAgICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWBcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gXG4gICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCg0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NhbkhleEVzY2FwZShwcmVmaXgpIHtcbiAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwO1xuXG4gICAgICAgIGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0IDogMjtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCkge1xuICAgICAgICB2YXIgY2gsIGNvZGU7XG5cbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBjb2RlID0gMDtcblxuICAgICAgICAvLyBBdCBsZWFzdCwgb25lIGhleCBkaWdpdCBpcyByZXF1aXJlZC5cbiAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgaWYgKCFpc0hleERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPiAweDEwRkZGRiB8fCBjaCAhPT0gJ30nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZyb21Db2RlUG9pbnQoY29kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29kZVBvaW50QXQoaSkge1xuICAgICAgICB2YXIgY3AsIGZpcnN0LCBzZWNvbmQ7XG5cbiAgICAgICAgY3AgPSBzb3VyY2UuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGNwID49IDB4RDgwMCAmJiBjcCA8PSAweERCRkYpIHtcbiAgICAgICAgICAgIHNlY29uZCA9IHNvdXJjZS5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gMHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHtcbiAgICAgICAgICAgICAgICBmaXJzdCA9IGNwO1xuICAgICAgICAgICAgICAgIGNwID0gKGZpcnN0IC0gMHhEODAwKSAqIDB4NDAwICsgc2Vjb25kIC0gMHhEQzAwICsgMHgxMDAwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDb21wbGV4SWRlbnRpZmllcigpIHtcbiAgICAgICAgdmFyIGNwLCBjaCwgaWQ7XG5cbiAgICAgICAgY3AgPSBjb2RlUG9pbnRBdChpbmRleCk7XG4gICAgICAgIGlkID0gZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgIGluZGV4ICs9IGlkLmxlbmd0aDtcblxuICAgICAgICAvLyAnXFx1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChjcCA9PT0gMHg1Qykge1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09ICd7Jykge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgY2ggPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTtcbiAgICAgICAgICAgICAgICBjcCA9IGNoLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcXFwnIHx8ICFpc0lkZW50aWZpZXJTdGFydChjcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZCA9IGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjcCA9IGNvZGVQb2ludEF0KGluZGV4KTtcbiAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyUGFydChjcCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoID0gZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgICAgICBpZCArPSBjaDtcbiAgICAgICAgICAgIGluZGV4ICs9IGNoLmxlbmd0aDtcblxuICAgICAgICAgICAgLy8gJ1xcdScgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgaWYgKGNwID09PSAweDVDKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgY2ggPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpO1xuICAgICAgICAgICAgICAgICAgICBjcCA9IGNoLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXFxcJyB8fCAhaXNJZGVudGlmaWVyUGFydChjcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWQgKz0gY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHtcbiAgICAgICAgdmFyIHN0YXJ0LCBjaDtcblxuICAgICAgICBzdGFydCA9IGluZGV4Kys7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHtcbiAgICAgICAgICAgICAgICAvLyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgIGluZGV4ID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBsZXhJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID49IDB4RDgwMCAmJiBjaCA8IDB4REZGRikge1xuICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gaGFuZGxlIHN1cnJvZ2F0ZSBwYWlycy5cbiAgICAgICAgICAgICAgICBpbmRleCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb21wbGV4SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NhbklkZW50aWZpZXIoKSB7XG4gICAgICAgIHZhciBzdGFydCwgaWQsIHR5cGU7XG5cbiAgICAgICAgc3RhcnQgPSBpbmRleDtcblxuICAgICAgICAvLyBCYWNrc2xhc2ggKFUrMDA1Qykgc3RhcnRzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICBpZCA9IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUMpID8gZ2V0Q29tcGxleElkZW50aWZpZXIoKSA6IGdldElkZW50aWZpZXIoKTtcblxuICAgICAgICAvLyBUaGVyZSBpcyBubyBrZXl3b3JkIG9yIGxpdGVyYWwgd2l0aCBvbmx5IG9uZSBjaGFyYWN0ZXIuXG4gICAgICAgIC8vIFRodXMsIGl0IG11c3QgYmUgYW4gaWRlbnRpZmllci5cbiAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNLZXl3b3JkKGlkKSkge1xuICAgICAgICAgICAgdHlwZSA9IFRva2VuLktleXdvcmQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICdudWxsJykge1xuICAgICAgICAgICAgdHlwZSA9IFRva2VuLk51bGxMaXRlcmFsO1xuICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5Cb29sZWFuTGl0ZXJhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG5cbiAgICAvLyBFQ01BLTI2MiAxMS43IFB1bmN0dWF0b3JzXG5cbiAgICBmdW5jdGlvbiBzY2FuUHVuY3R1YXRvcigpIHtcbiAgICAgICAgdmFyIHRva2VuLCBzdHI7XG5cbiAgICAgICAgdG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgc3RhcnQ6IGluZGV4LFxuICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLlxuICAgICAgICBzdHIgPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBzd2l0Y2ggKHN0cikge1xuXG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7XG4gICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSBleHRyYS50b2tlblZhbHVlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHtcbiAgICAgICAgICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IGV4dHJhLnRva2VuVmFsdWVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucHVzaCgneycpO1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJy4nOlxuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAnLicgJiYgc291cmNlW2luZGV4ICsgMV0gPT09ICcuJykge1xuICAgICAgICAgICAgICAgIC8vIFNwcmVhZCBvcGVyYXRvcjogLi4uXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgICAgICBzdHIgPSAnLi4uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ30nOlxuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKSc6XG4gICAgICAgIGNhc2UgJzsnOlxuICAgICAgICBjYXNlICcsJzpcbiAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICBjYXNlICc6JzpcbiAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgIGNhc2UgJ34nOlxuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyA0LWNoYXJhY3RlciBwdW5jdHVhdG9yLlxuICAgICAgICAgICAgc3RyID0gc291cmNlLnN1YnN0cihpbmRleCwgNCk7XG4gICAgICAgICAgICBpZiAoc3RyID09PSAnPj4+PScpIHtcbiAgICAgICAgICAgICAgICBpbmRleCArPSA0O1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLlxuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMyk7XG4gICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJz09PScgfHwgc3RyID09PSAnIT09JyB8fCBzdHIgPT09ICc+Pj4nIHx8XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJzw8PScgfHwgc3RyID09PSAnPj49Jykge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gMi1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICcmJicgfHwgc3RyID09PSAnfHwnIHx8IHN0ciA9PT0gJz09JyB8fCBzdHIgPT09ICchPScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJys9JyB8fCBzdHIgPT09ICctPScgfHwgc3RyID09PSAnKj0nIHx8IHN0ciA9PT0gJy89JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnKysnIHx8IHN0ciA9PT0gJy0tJyB8fCBzdHIgPT09ICc8PCcgfHwgc3RyID09PSAnPj4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICcmPScgfHwgc3RyID09PSAnfD0nIHx8IHN0ciA9PT0gJ149JyB8fCBzdHIgPT09ICclPScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJzw9JyB8fCBzdHIgPT09ICc+PScgfHwgc3RyID09PSAnPT4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAxLWNoYXJhY3RlciBwdW5jdHVhdG9ycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzw+PSErLSolJnxeLycuaW5kZXhPZihzdHIpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSB0b2tlbi5zdGFydCkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRva2VuLmVuZCA9IGluZGV4O1xuICAgICAgICB0b2tlbi52YWx1ZSA9IHN0cjtcbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDExLjguMyBOdW1lcmljIExpdGVyYWxzXG5cbiAgICBmdW5jdGlvbiBzY2FuSGV4TGl0ZXJhbChzdGFydCkge1xuICAgICAgICB2YXIgbnVtYmVyID0gJyc7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoIWlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KCcweCcgKyBudW1iZXIsIDE2KSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogaW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FuQmluYXJ5TGl0ZXJhbChzdGFydCkge1xuICAgICAgICB2YXIgY2gsIG51bWJlcjtcblxuICAgICAgICBudW1iZXIgPSAnJztcblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChjaCAhPT0gJzAnICYmIGNoICE9PSAnMScpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gb25seSAwYiBvciAwQlxuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBpc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgMiksXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nhbk9jdGFsTGl0ZXJhbChwcmVmaXgsIHN0YXJ0KSB7XG4gICAgICAgIHZhciBudW1iZXIsIG9jdGFsO1xuXG4gICAgICAgIGlmIChpc09jdGFsRGlnaXQocHJlZml4KSkge1xuICAgICAgICAgICAgb2N0YWwgPSB0cnVlO1xuICAgICAgICAgICAgbnVtYmVyID0gJzAnICsgc291cmNlW2luZGV4KytdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2N0YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBudW1iZXIgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9jdGFsICYmIG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIG9ubHkgMG8gb3IgME9cbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSB8fCBpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgOCksXG4gICAgICAgICAgICBvY3RhbDogb2N0YWwsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJbXBsaWNpdE9jdGFsTGl0ZXJhbCgpIHtcbiAgICAgICAgdmFyIGksIGNoO1xuXG4gICAgICAgIC8vIEltcGxpY2l0IG9jdGFsLCB1bmxlc3MgdGhlcmUgaXMgYSBub24tb2N0YWwgZGlnaXQuXG4gICAgICAgIC8vIChBbm5leCBCLjEuMSBvbiBOdW1lcmljIExpdGVyYWxzKVxuICAgICAgICBmb3IgKGkgPSBpbmRleCArIDE7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaV07XG4gICAgICAgICAgICBpZiAoY2ggPT09ICc4JyB8fCBjaCA9PT0gJzknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FuTnVtZXJpY0xpdGVyYWwoKSB7XG4gICAgICAgIHZhciBudW1iZXIsIHN0YXJ0LCBjaDtcblxuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGFzc2VydChpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSB8fCAoY2ggPT09ICcuJyksXG4gICAgICAgICAgICAnTnVtZXJpYyBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50Jyk7XG5cbiAgICAgICAgc3RhcnQgPSBpbmRleDtcbiAgICAgICAgbnVtYmVyID0gJyc7XG4gICAgICAgIGlmIChjaCAhPT0gJy4nKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG5cbiAgICAgICAgICAgIC8vIEhleCBudW1iZXIgc3RhcnRzIHdpdGggJzB4Jy5cbiAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0aCAnMCcuXG4gICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIgaW4gRVM2IHN0YXJ0cyB3aXRoICcwbycuXG4gICAgICAgICAgICAvLyBCaW5hcnkgbnVtYmVyIGluIEVTNiBzdGFydHMgd2l0aCAnMGInLlxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykge1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkhleExpdGVyYWwoc3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdiJyB8fCBjaCA9PT0gJ0InKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuQmluYXJ5TGl0ZXJhbChzdGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ28nIHx8IGNoID09PSAnTycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbXBsaWNpdE9jdGFsTGl0ZXJhbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJhbChjaCwgc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHtcbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogaW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMS44LjQgU3RyaW5nIExpdGVyYWxzXG5cbiAgICBmdW5jdGlvbiBzY2FuU3RyaW5nTGl0ZXJhbCgpIHtcbiAgICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgc3RhcnQsIGNoLCB1bmVzY2FwZWQsIG9jdFRvRGVjLCBvY3RhbCA9IGZhbHNlO1xuXG4gICAgICAgIHF1b3RlID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1xcJycgfHwgcXVvdGUgPT09ICdcIicpLFxuICAgICAgICAgICAgJ1N0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZScpO1xuXG4gICAgICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICsraW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICAgICAgICAgIHF1b3RlID0gJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgICAgICBpZiAoIWNoIHx8ICFpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09ICd7Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5lc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xccic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcdCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcYic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcZic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xceDBCJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICc4JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnOSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0VG9EZWMgPSBvY3RhbFRvRGVjaW1hbChjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RhbCA9IG9jdFRvRGVjLm9jdGFsIHx8IG9jdGFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG9jdFRvRGVjLmNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXFxyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHF1b3RlICE9PSAnJykge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5TdHJpbmdMaXRlcmFsLFxuICAgICAgICAgICAgdmFsdWU6IHN0cixcbiAgICAgICAgICAgIG9jdGFsOiBvY3RhbCxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IHN0YXJ0TGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogc3RhcnRMaW5lU3RhcnQsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTEuOC42IFRlbXBsYXRlIExpdGVyYWwgTGV4aWNhbCBDb21wb25lbnRzXG5cbiAgICBmdW5jdGlvbiBzY2FuVGVtcGxhdGUoKSB7XG4gICAgICAgIHZhciBjb29rZWQgPSAnJywgY2gsIHN0YXJ0LCByYXdPZmZzZXQsIHRlcm1pbmF0ZWQsIGhlYWQsIHRhaWwsIHJlc3RvcmUsIHVuZXNjYXBlZDtcblxuICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgICAgIHRhaWwgPSBmYWxzZTtcbiAgICAgICAgc3RhcnQgPSBpbmRleDtcbiAgICAgICAgaGVhZCA9IChzb3VyY2VbaW5kZXhdID09PSAnYCcpO1xuICAgICAgICByYXdPZmZzZXQgPSAyO1xuXG4gICAgICAgICsraW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ2AnKSB7XG4gICAgICAgICAgICAgICAgcmF3T2Zmc2V0ID0gMTtcbiAgICAgICAgICAgICAgICB0YWlsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICckJykge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wdXNoKCckeycpO1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgICAgIGlmICghaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcXHInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcXHQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gdW5lc2NhcGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFxiJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFxmJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFx2JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWw6IFxcMDEgXFwwMiBhbmQgc28gb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFwwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWw6IFxcMSBcXDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLlRlbXBsYXRlT2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgY29va2VkICs9ICdcXG4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhlYWQpIHtcbiAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uVGVtcGxhdGUsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGNvb2tlZDogY29va2VkLFxuICAgICAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHN0YXJ0ICsgMSwgaW5kZXggLSByYXdPZmZzZXQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZDogaGVhZCxcbiAgICAgICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTEuOC41IFJlZ3VsYXIgRXhwcmVzc2lvbiBMaXRlcmFsc1xuXG4gICAgZnVuY3Rpb24gdGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFncykge1xuICAgICAgICAvLyBUaGUgQk1QIGNoYXJhY3RlciB0byB1c2UgYXMgYSByZXBsYWNlbWVudCBmb3IgYXN0cmFsIHN5bWJvbHMgd2hlblxuICAgICAgICAvLyB0cmFuc2xhdGluZyBhbiBFUzYgXCJ1XCItZmxhZ2dlZCBwYXR0ZXJuIHRvIGFuIEVTNS1jb21wYXRpYmxlXG4gICAgICAgIC8vIGFwcHJveGltYXRpb24uXG4gICAgICAgIC8vIE5vdGU6IHJlcGxhY2luZyB3aXRoICdcXHVGRkZGJyBlbmFibGVzIGZhbHNlIHBvc2l0aXZlcyBpbiB1bmxpa2VseVxuICAgICAgICAvLyBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1xcdXsxMDQ0Zn0tXFx1ezEwNDQwfV1gIGlzIGFuIGludmFsaWRcbiAgICAgICAgLy8gcGF0dGVybiB0aGF0IHdvdWxkIG5vdCBiZSBkZXRlY3RlZCBieSB0aGlzIHN1YnN0aXR1dGlvbi5cbiAgICAgICAgdmFyIGFzdHJhbFN1YnN0aXR1dGUgPSAnXFx1RkZGRicsXG4gICAgICAgICAgICB0bXAgPSBwYXR0ZXJuO1xuXG4gICAgICAgIGlmIChmbGFncy5pbmRleE9mKCd1JykgPj0gMCkge1xuICAgICAgICAgICAgdG1wID0gdG1wXG4gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBldmVyeSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlcXVpdmFsZW50XG4gICAgICAgICAgICAgICAgLy8gQk1QIGNoYXJhY3RlciBvciBhIGNvbnN0YW50IEFTQ0lJIGNvZGUgcG9pbnQgaW4gdGhlIGNhc2Ugb2ZcbiAgICAgICAgICAgICAgICAvLyBhc3RyYWwgc3ltYm9scy4gKFNlZSB0aGUgYWJvdmUgbm90ZSBvbiBgYXN0cmFsU3Vic3RpdHV0ZWBcbiAgICAgICAgICAgICAgICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFx1XFx7KFswLTlhLWZBLUZdKylcXH18XFxcXHUoW2EtZkEtRjAtOV17NH0pL2csIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBwYXJzZUludCgkMSB8fCAkMiwgMTYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29kZVBvaW50ID4gMHgxMEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKG51bGwsIE1lc3NhZ2VzLkludmFsaWRSZWdFeHApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlUG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhc3RyYWxTdWJzdGl0dXRlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBlYWNoIHBhaXJlZCBzdXJyb2dhdGUgd2l0aCBhIHNpbmdsZSBBU0NJSSBzeW1ib2wgdG9cbiAgICAgICAgICAgICAgICAvLyBhdm9pZCB0aHJvd2luZyBvbiByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIG9ubHkgdmFsaWQgaW5cbiAgICAgICAgICAgICAgICAvLyBjb21iaW5hdGlvbiB3aXRoIHRoZSBcInVcIiBmbGFnLlxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nLFxuICAgICAgICAgICAgICAgICAgICBhc3RyYWxTdWJzdGl0dXRlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBkZXRlY3QgaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb25zLlxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgUmVnRXhwKHRtcCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKG51bGwsIE1lc3NhZ2VzLkludmFsaWRSZWdFeHApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBmb3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3JcbiAgICAgICAgLy8gYG51bGxgIGluIGNhc2UgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBmbGFncyBpdFxuICAgICAgICAvLyB1c2VzLlxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NhblJlZ0V4cEJvZHkoKSB7XG4gICAgICAgIHZhciBjaCwgc3RyLCBjbGFzc01hcmtlciwgdGVybWluYXRlZCwgYm9keTtcblxuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGFzc2VydChjaCA9PT0gJy8nLCAnUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2gnKTtcbiAgICAgICAgc3RyID0gc291cmNlW2luZGV4KytdO1xuXG4gICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7XG4gICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICAgICAgLy8gRUNNQS0yNjIgNy44LjVcbiAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihudWxsLCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihudWxsLCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc01hcmtlcikge1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKG51bGwsIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLlxuICAgICAgICBib2R5ID0gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogYm9keSxcbiAgICAgICAgICAgIGxpdGVyYWw6IHN0clxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHBGbGFncygpIHtcbiAgICAgICAgdmFyIGNoLCBzdHIsIGZsYWdzLCByZXN0b3JlO1xuXG4gICAgICAgIHN0ciA9ICcnO1xuICAgICAgICBmbGFncyA9ICcnO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXFxcXCcgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RyICs9ICdcXFxcdSc7IHJlc3RvcmUgPCBpbmRleDsgKytyZXN0b3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHNvdXJjZVtyZXN0b3JlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9ICd1JztcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXHUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXFxcJztcbiAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoO1xuICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogZmxhZ3MsXG4gICAgICAgICAgICBsaXRlcmFsOiBzdHJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FuUmVnRXhwKCkge1xuICAgICAgICB2YXIgc3RhcnQsIGJvZHksIGZsYWdzLCB2YWx1ZTtcbiAgICAgICAgc2Nhbm5pbmcgPSB0cnVlO1xuXG4gICAgICAgIGxvb2thaGVhZCA9IG51bGw7XG4gICAgICAgIHNraXBDb21tZW50KCk7XG4gICAgICAgIHN0YXJ0ID0gaW5kZXg7XG5cbiAgICAgICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7XG4gICAgICAgIGZsYWdzID0gc2NhblJlZ0V4cEZsYWdzKCk7XG4gICAgICAgIHZhbHVlID0gdGVzdFJlZ0V4cChib2R5LnZhbHVlLCBmbGFncy52YWx1ZSk7XG4gICAgICAgIHNjYW5uaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChleHRyYS50b2tlbml6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgcmVnZXg6IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogYm9keS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICByZWdleDoge1xuICAgICAgICAgICAgICAgIHBhdHRlcm46IGJvZHkudmFsdWUsXG4gICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbGxlY3RSZWdleCgpIHtcbiAgICAgICAgdmFyIHBvcywgbG9jLCByZWdleCwgdG9rZW47XG5cbiAgICAgICAgc2tpcENvbW1lbnQoKTtcblxuICAgICAgICBwb3MgPSBpbmRleDtcbiAgICAgICAgbG9jID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZWdleCA9IHNjYW5SZWdFeHAoKTtcblxuICAgICAgICBsb2MuZW5kID0ge1xuICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgfTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoIWV4dHJhLnRva2VuaXplKSB7XG4gICAgICAgICAgICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2VuLCB3aGljaCBpcyBsaWtlbHkgJy8nIG9yICcvPSdcbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSAnUHVuY3R1YXRvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnLycgfHwgdG9rZW4udmFsdWUgPT09ICcvPScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdSZWd1bGFyRXhwcmVzc2lvbicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlZ2V4LmxpdGVyYWwsXG4gICAgICAgICAgICAgICAgcmVnZXg6IHJlZ2V4LnJlZ2V4LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbcG9zLCBpbmRleF0sXG4gICAgICAgICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllck5hbWUodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHxcbiAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQgfHxcbiAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsIHx8XG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbDtcbiAgICB9XG5cbiAgICAvLyBVc2luZyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnblxuXG4gICAgZnVuY3Rpb24gYWR2YW5jZVNsYXNoKCkge1xuICAgICAgICB2YXIgcmVnZXgsIHByZXZpb3VzLCBjaGVjaztcblxuICAgICAgICBmdW5jdGlvbiB0ZXN0S2V5d29yZCh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICYmICh2YWx1ZS5sZW5ndGggPiAxKSAmJiAodmFsdWVbMF0gPj0gJ2EnKSAmJiAodmFsdWVbMF0gPD0gJ3onKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzID0gZXh0cmEudG9rZW5WYWx1ZXNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICByZWdleCA9IChwcmV2aW91cyAhPT0gbnVsbCk7XG5cbiAgICAgICAgc3dpdGNoIChwcmV2aW91cykge1xuICAgICAgICBjYXNlICd0aGlzJzpcbiAgICAgICAgY2FzZSAnXSc6XG4gICAgICAgICAgICByZWdleCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnKSc6XG4gICAgICAgICAgICBjaGVjayA9IGV4dHJhLnRva2VuVmFsdWVzW2V4dHJhLm9wZW5QYXJlblRva2VuIC0gMV07XG4gICAgICAgICAgICByZWdleCA9IChjaGVjayA9PT0gJ2lmJyB8fCBjaGVjayA9PT0gJ3doaWxlJyB8fCBjaGVjayA9PT0gJ2ZvcicgfHwgY2hlY2sgPT09ICd3aXRoJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVuY3Rpb24gYnkgYW55dGhpbmcgbWFrZXMgbGl0dGxlIHNlbnNlLFxuICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgdG8gY2hlY2sgZm9yIHRoYXQuXG4gICAgICAgICAgICByZWdleCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRlc3RLZXl3b3JkKGV4dHJhLnRva2VuVmFsdWVzW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10pKSB7XG4gICAgICAgICAgICAgICAgLy8gQW5vbnltb3VzIGZ1bmN0aW9uLCBlLmcuIGZ1bmN0aW9uKCl7fSAvNDJcbiAgICAgICAgICAgICAgICBjaGVjayA9IGV4dHJhLnRva2VuVmFsdWVzW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF07XG4gICAgICAgICAgICAgICAgcmVnZXggPSBjaGVjayA/IChGbkV4cHJUb2tlbnMuaW5kZXhPZihjaGVjaykgPCAwKSA6IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0S2V5d29yZChleHRyYS50b2tlblZhbHVlc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdKSkge1xuICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZ1bmN0aW9uLCBlLmcuIGZ1bmN0aW9uIGYoKXt9IC80Mi9cbiAgICAgICAgICAgICAgICBjaGVjayA9IGV4dHJhLnRva2VuVmFsdWVzW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNV07XG4gICAgICAgICAgICAgICAgcmVnZXggPSBjaGVjayA/IChGbkV4cHJUb2tlbnMuaW5kZXhPZihjaGVjaykgPCAwKSA6IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXggPyBjb2xsZWN0UmVnZXgoKSA6IHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICAgICAgdmFyIGNwLCB0b2tlbjtcblxuICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLkVPRixcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBpbmRleCxcbiAgICAgICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY3AgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNwKSkge1xuICAgICAgICAgICAgdG9rZW4gPSBzY2FuSWRlbnRpZmllcigpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9IFRva2VuLktleXdvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWZXJ5IGNvbW1vbjogKCBhbmQgKSBhbmQgO1xuICAgICAgICBpZiAoY3AgPT09IDB4MjggfHwgY3AgPT09IDB4MjkgfHwgY3AgPT09IDB4M0IpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xlIHF1b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS5cbiAgICAgICAgaWYgKGNwID09PSAweDI3IHx8IGNwID09PSAweDIyKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhblN0cmluZ0xpdGVyYWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvdCAoLikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0aGUgbmVlZFxuICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChjcCA9PT0gMHgyRSkge1xuICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXguXG4gICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjcCA9PT0gMHgyRikge1xuICAgICAgICAgICAgcmV0dXJuIGFkdmFuY2VTbGFzaCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGVtcGxhdGUgbGl0ZXJhbHMgc3RhcnQgd2l0aCBgIChVKzAwNjApIGZvciB0ZW1wbGF0ZSBoZWFkXG4gICAgICAgIC8vIG9yIH0gKFUrMDA3RCkgZm9yIHRlbXBsYXRlIG1pZGRsZSBvciB0ZW1wbGF0ZSB0YWlsLlxuICAgICAgICBpZiAoY3AgPT09IDB4NjAgfHwgKGNwID09PSAweDdEICYmIHN0YXRlLmN1cmx5U3RhY2tbc3RhdGUuY3VybHlTdGFjay5sZW5ndGggLSAxXSA9PT0gJyR7JykpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBvc3NpYmxlIGlkZW50aWZpZXIgc3RhcnQgaW4gYSBzdXJyb2dhdGUgcGFpci5cbiAgICAgICAgaWYgKGNwID49IDB4RDgwMCAmJiBjcCA8IDB4REZGRikge1xuICAgICAgICAgICAgY3AgPSBjb2RlUG9pbnRBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5JZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb2xsZWN0VG9rZW4oKSB7XG4gICAgICAgIHZhciBsb2MsIHRva2VuLCB2YWx1ZSwgZW50cnk7XG5cbiAgICAgICAgbG9jID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0b2tlbiA9IGFkdmFuY2UoKTtcbiAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgdmFsdWUgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7XG4gICAgICAgICAgICBlbnRyeSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbk5hbWVbdG9rZW4udHlwZV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbdG9rZW4uc3RhcnQsIHRva2VuLmVuZF0sXG4gICAgICAgICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS5yZWdleCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogdG9rZW4ucmVnZXgucGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHRva2VuLnJlZ2V4LmZsYWdzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlblZhbHVlcykge1xuICAgICAgICAgICAgICAgIGV4dHJhLnRva2VuVmFsdWVzLnB1c2goKGVudHJ5LnR5cGUgPT09ICdQdW5jdHVhdG9yJyB8fCBlbnRyeS50eXBlID09PSAnS2V5d29yZCcpID8gZW50cnkudmFsdWUgOiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSkge1xuICAgICAgICAgICAgICAgIGlmICghZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVudHJ5LnJhbmdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWV4dHJhLmxvYykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZW50cnkubG9jO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuZGVsZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkgPSBleHRyYS5kZWxlZ2F0ZShlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goZW50cnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICBzY2FubmluZyA9IHRydWU7XG5cbiAgICAgICAgbGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGxhc3RMaW5lTnVtYmVyID0gbGluZU51bWJlcjtcbiAgICAgICAgbGFzdExpbmVTdGFydCA9IGxpbmVTdGFydDtcblxuICAgICAgICBza2lwQ29tbWVudCgpO1xuXG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgIHN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcjtcbiAgICAgICAgc3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7XG5cbiAgICAgICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpO1xuICAgICAgICBzY2FubmluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGVlaygpIHtcbiAgICAgICAgc2Nhbm5pbmcgPSB0cnVlO1xuXG4gICAgICAgIHNraXBDb21tZW50KCk7XG5cbiAgICAgICAgbGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGxhc3RMaW5lTnVtYmVyID0gbGluZU51bWJlcjtcbiAgICAgICAgbGFzdExpbmVTdGFydCA9IGxpbmVTdGFydDtcblxuICAgICAgICBzdGFydEluZGV4ID0gaW5kZXg7XG4gICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7XG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0O1xuXG4gICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTtcbiAgICAgICAgc2Nhbm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBQb3NpdGlvbigpIHtcbiAgICAgICAgdGhpcy5saW5lID0gc3RhcnRMaW5lTnVtYmVyO1xuICAgICAgICB0aGlzLmNvbHVtbiA9IHN0YXJ0SW5kZXggLSBzdGFydExpbmVTdGFydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBTb3VyY2VMb2NhdGlvbigpIHtcbiAgICAgICAgdGhpcy5zdGFydCA9IG5ldyBQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmVuZCA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gV3JhcHBpbmdTb3VyY2VMb2NhdGlvbihzdGFydFRva2VuKSB7XG4gICAgICAgIHRoaXMuc3RhcnQgPSB7XG4gICAgICAgICAgICBsaW5lOiBzdGFydFRva2VuLmxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IHN0YXJ0VG9rZW4uc3RhcnQgLSBzdGFydFRva2VuLmxpbmVTdGFydFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVuZCA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTm9kZSgpIHtcbiAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnJhbmdlID0gW3N0YXJ0SW5kZXgsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgICAgIHRoaXMubG9jID0gbmV3IFNvdXJjZUxvY2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikge1xuICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmFuZ2UgPSBbc3RhcnRUb2tlbi5zdGFydCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICAgICAgdGhpcy5sb2MgPSBuZXcgV3JhcHBpbmdTb3VyY2VMb2NhdGlvbihzdGFydFRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFdyYXBwaW5nTm9kZS5wcm90b3R5cGUgPSBOb2RlLnByb3RvdHlwZSA9IHtcblxuICAgICAgICBwcm9jZXNzQ29tbWVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGxhc3RDaGlsZCxcbiAgICAgICAgICAgICAgICBpbm5lckNvbW1lbnRzLFxuICAgICAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cyxcbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLFxuICAgICAgICAgICAgICAgIGJvdHRvbVJpZ2h0ID0gZXh0cmEuYm90dG9tUmlnaHRTdGFjayxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgICAgICAgbGFzdCA9IGJvdHRvbVJpZ2h0W2JvdHRvbVJpZ2h0Lmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBTeW50YXguUHJvZ3JhbSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBwYXRjaCBpbm5uZXJDb21tZW50cyBmb3IgcHJvcGVydGllcyBlbXB0eSBibG9ja1xuICAgICAgICAgICAgICogYGZ1bmN0aW9uIGEoKSB7LyoqIGNvbW1lbnRzICoqXFwvfWBcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBTeW50YXguQmxvY2tTdGF0ZW1lbnQgJiYgdGhpcy5ib2R5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlubmVyQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSBleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGV4dHJhLmxlYWRpbmdDb21tZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2VbMV0gPj0gY29tbWVudC5yYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJDb21tZW50cy51bnNoaWZ0KGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbm5lckNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubmVyQ29tbWVudHMgPSBpbm5lckNvbW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICAvL2JvdHRvbVJpZ2h0LnB1c2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChpID0gZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZXh0cmEudHJhaWxpbmdDb21tZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQucmFuZ2VbMF0gPj0gdGhpcy5yYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cy51bnNoaWZ0KGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAmJiBsYXN0LnRyYWlsaW5nQ29tbWVudHMgJiYgbGFzdC50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IHRoaXMucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGxhc3QudHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3QudHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suXG4gICAgICAgICAgICB3aGlsZSAobGFzdCAmJiBsYXN0LnJhbmdlWzBdID49IHRoaXMucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSBib3R0b21SaWdodC5wb3AoKTtcbiAgICAgICAgICAgICAgICBsYXN0ID0gYm90dG9tUmlnaHRbYm90dG9tUmlnaHQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAobGFzdENoaWxkLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5yYW5nZVsxXSA8PSB0aGlzLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRzLnVuc2hpZnQoY29tbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IGV4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5yYW5nZVsxXSA8PSB0aGlzLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMudW5zaGlmdChjb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGxlYWRpbmdDb21tZW50cyAmJiBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGVhZGluZ0NvbW1lbnRzID0gbGVhZGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMgJiYgdHJhaWxpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFpbGluZ0NvbW1lbnRzID0gdHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYm90dG9tUmlnaHQucHVzaCh0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChleHRyYS5yYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VbMV0gPSBsYXN0SW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXh0cmEubG9jKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2MuZW5kID0ge1xuICAgICAgICAgICAgICAgICAgICBsaW5lOiBsYXN0TGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBsYXN0SW5kZXggLSBsYXN0TGluZVN0YXJ0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jLnNvdXJjZSA9IGV4dHJhLnNvdXJjZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ29tbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEFycmF5RXhwcmVzc2lvbjogZnVuY3Rpb24gKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQXJyYXlFeHByZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEFycmF5UGF0dGVybjogZnVuY3Rpb24gKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQXJyYXlQYXR0ZXJuO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAocGFyYW1zLCBkZWZhdWx0cywgYm9keSwgZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy5pZCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hBc3NpZ25tZW50UGF0dGVybjogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQXNzaWdubWVudFBhdHRlcm47XG4gICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IChvcGVyYXRvciA9PT0gJ3x8JyB8fCBvcGVyYXRvciA9PT0gJyYmJykgPyBTeW50YXguTG9naWNhbEV4cHJlc3Npb24gOiBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQmxvY2tTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5CcmVha1N0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNhbGxFeHByZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoQ2F0Y2hDbGF1c2U6IGZ1bmN0aW9uIChwYXJhbSwgYm9keSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNhdGNoQ2xhdXNlO1xuICAgICAgICAgICAgdGhpcy5wYXJhbSA9IHBhcmFtO1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hDbGFzc0JvZHk6IGZ1bmN0aW9uIChib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQ2xhc3NCb2R5O1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hDbGFzc0RlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5DbGFzc0RlY2xhcmF0aW9uO1xuICAgICAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFzcztcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoQ2xhc3NFeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5DbGFzc0V4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgICAgICB0aGlzLnN1cGVyQ2xhc3MgPSBzdXBlckNsYXNzO1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0O1xuICAgICAgICAgICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDtcbiAgICAgICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaENvbnRpbnVlU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Db250aW51ZVN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaERvV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5LCB0ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRG9XaGlsZVN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRW1wdHlTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24gKGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Gb3JTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmluaXQgPSBpbml0O1xuICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlID0gdXBkYXRlO1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hGb3JPZlN0YXRlbWVudDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRm9yT2ZTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hGb3JJblN0YXRlbWVudDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRm9ySW5TdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZWFjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEZ1bmN0aW9uRGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSwgZ2VuZXJhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHksIGdlbmVyYXRvcikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoSWRlbnRpZmllcjogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5JZGVudGlmaWVyO1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hJZlN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LklmU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG4gICAgICAgICAgICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hMYWJlbGVkU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwsIGJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5MYWJlbGVkU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hMaXRlcmFsOiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5MaXRlcmFsO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRva2VuLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5yYXcgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7XG4gICAgICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2V4ID0gdG9rZW4ucmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFjY2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQgPSBhY2Nlc3NvciA9PT0gJ1snO1xuICAgICAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG4gICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoTWV0YVByb3BlcnR5OiBmdW5jdGlvbiAobWV0YSwgcHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5NZXRhUHJvcGVydHk7XG4gICAgICAgICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaE5ld0V4cHJlc3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5OZXdFeHByZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5PYmplY3RFeHByZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hPYmplY3RQYXR0ZXJuOiBmdW5jdGlvbiAocHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4Lk9iamVjdFBhdHRlcm47XG4gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVXBkYXRlRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDtcbiAgICAgICAgICAgIHRoaXMucHJlZml4ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoUHJvZ3JhbTogZnVuY3Rpb24gKGJvZHksIHNvdXJjZVR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Qcm9ncmFtO1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlVHlwZSA9IHNvdXJjZVR5cGU7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoUHJvcGVydHk6IGZ1bmN0aW9uIChraW5kLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Qcm9wZXJ0eTtcbiAgICAgICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5raW5kID0ga2luZDtcbiAgICAgICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICAgICAgdGhpcy5zaG9ydGhhbmQgPSBzaG9ydGhhbmQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoUmVzdEVsZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlJlc3RFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFJldHVyblN0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguUmV0dXJuU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9ucyA9IGV4cHJlc3Npb25zO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFNwcmVhZEVsZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlNwcmVhZEVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoU3dpdGNoQ2FzZTogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Td2l0Y2hDYXNlO1xuICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoU3VwZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5TdXBlcjtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChkaXNjcmltaW5hbnQsIGNhc2VzKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU3dpdGNoU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5kaXNjcmltaW5hbnQgPSBkaXNjcmltaW5hbnQ7XG4gICAgICAgICAgICB0aGlzLmNhc2VzID0gY2FzZXM7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBmdW5jdGlvbiAodGFnLCBxdWFzaSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICAgICAgdGhpcy5xdWFzaSA9IHF1YXNpO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFRlbXBsYXRlRWxlbWVudDogZnVuY3Rpb24gKHZhbHVlLCB0YWlsKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVGVtcGxhdGVFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50YWlsID0gdGFpbDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hUZW1wbGF0ZUxpdGVyYWw6IGZ1bmN0aW9uIChxdWFzaXMsIGV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVGVtcGxhdGVMaXRlcmFsO1xuICAgICAgICAgICAgdGhpcy5xdWFzaXMgPSBxdWFzaXM7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoVGhpc0V4cHJlc3Npb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5UaGlzRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVGhyb3dTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoVHJ5U3RhdGVtZW50OiBmdW5jdGlvbiAoYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRyeVN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMuYmxvY2sgPSBibG9jaztcbiAgICAgICAgICAgIHRoaXMuZ3VhcmRlZEhhbmRsZXJzID0gW107XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJzID0gaGFuZGxlciA/IFtoYW5kbGVyXSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgIHRoaXMuZmluYWxpemVyID0gZmluYWxpemVyO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFVuYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gKG9wZXJhdG9yID09PSAnKysnIHx8IG9wZXJhdG9yID09PSAnLS0nKSA/IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uIDogU3ludGF4LlVuYXJ5RXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDtcbiAgICAgICAgICAgIHRoaXMucHJlZml4ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgICAgICAgICAgdGhpcy5raW5kID0gJ3Zhcic7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zLCBraW5kKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgICAgICAgICAgdGhpcy5raW5kID0ga2luZDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hWYXJpYWJsZURlY2xhcmF0b3I6IGZ1bmN0aW9uIChpZCwgaW5pdCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvcjtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgICAgIHRoaXMuaW5pdCA9IGluaXQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguV2hpbGVTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0O1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hXaXRoU3RhdGVtZW50OiBmdW5jdGlvbiAob2JqZWN0LCBib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguV2l0aFN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hFeHBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uIChsb2NhbCwgZXhwb3J0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHBvcnRTcGVjaWZpZXI7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydGVkID0gZXhwb3J0ZWQgfHwgbG9jYWw7XG4gICAgICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogZnVuY3Rpb24gKGxvY2FsKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguSW1wb3J0RGVmYXVsdFNwZWNpZmllcjtcbiAgICAgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6IGZ1bmN0aW9uIChsb2NhbCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjtcbiAgICAgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNyYykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkV4cG9ydE5hbWVkRGVjbGFyYXRpb247XG4gICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247XG4gICAgICAgICAgICB0aGlzLnNwZWNpZmllcnMgPSBzcGVjaWZpZXJzO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzcmM7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb247XG4gICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRXhwb3J0QWxsRGVjbGFyYXRpb246IGZ1bmN0aW9uIChzcmMpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHBvcnRBbGxEZWNsYXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gc3JjO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEltcG9ydFNwZWNpZmllcjogZnVuY3Rpb24gKGxvY2FsLCBpbXBvcnRlZCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkltcG9ydFNwZWNpZmllcjtcbiAgICAgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbCB8fCBpbXBvcnRlZDtcbiAgICAgICAgICAgIHRoaXMuaW1wb3J0ZWQgPSBpbXBvcnRlZDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gKHNwZWNpZmllcnMsIHNyYykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkltcG9ydERlY2xhcmF0aW9uO1xuICAgICAgICAgICAgdGhpcy5zcGVjaWZpZXJzID0gc3BlY2lmaWVycztcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gc3JjO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFlpZWxkRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFyZ3VtZW50LCBkZWxlZ2F0ZSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LllpZWxkRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIHJlY29yZEVycm9yKGVycm9yKSB7XG4gICAgICAgIHZhciBlLCBleGlzdGluZztcblxuICAgICAgICBmb3IgKGUgPSAwOyBlIDwgZXh0cmEuZXJyb3JzLmxlbmd0aDsgZSsrKSB7XG4gICAgICAgICAgICBleGlzdGluZyA9IGV4dHJhLmVycm9yc1tlXTtcbiAgICAgICAgICAgIC8vIFByZXZlbnQgZHVwbGljYXRlZCBlcnJvci5cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICBpZiAoZXhpc3RpbmcuaW5kZXggPT09IGVycm9yLmluZGV4ICYmIGV4aXN0aW5nLm1lc3NhZ2UgPT09IGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRyYS5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uc3RydWN0RXJyb3IobXNnLCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSBjYXRjaCAoYmFzZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChPYmplY3QuY3JlYXRlICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gT2JqZWN0LmNyZWF0ZShiYXNlKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdjb2x1bW4nLCB7IHZhbHVlOiBjb2x1bW4gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVFcnJvcihsaW5lLCBwb3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHZhciBtc2csIGNvbHVtbiwgZXJyb3I7XG5cbiAgICAgICAgbXNnID0gJ0xpbmUgJyArIGxpbmUgKyAnOiAnICsgZGVzY3JpcHRpb247XG4gICAgICAgIGNvbHVtbiA9IHBvcyAtIChzY2FubmluZyA/IGxpbmVTdGFydCA6IGxhc3RMaW5lU3RhcnQpICsgMTtcbiAgICAgICAgZXJyb3IgPSBjb25zdHJ1Y3RFcnJvcihtc2csIGNvbHVtbik7XG4gICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSBsaW5lO1xuICAgICAgICBlcnJvci5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICBlcnJvci5pbmRleCA9IHBvcztcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvblxuXG4gICAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlRm9ybWF0KSB7XG4gICAgICAgIHZhciBhcmdzLCBtc2c7XG5cbiAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVwbGFjZSgvJShcXGQpL2csXG4gICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGlkeCkge1xuICAgICAgICAgICAgICAgIGFzc2VydChpZHggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHRocm93IGNyZWF0ZUVycm9yKGxhc3RMaW5lTnVtYmVyLCBsYXN0SW5kZXgsIG1zZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9sZXJhdGVFcnJvcihtZXNzYWdlRm9ybWF0KSB7XG4gICAgICAgIHZhciBhcmdzLCBtc2csIGVycm9yO1xuXG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoLyUoXFxkKS9nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpZHgpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoaWR4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBlcnJvciA9IGNyZWF0ZUVycm9yKGxpbmVOdW1iZXIsIGxhc3RJbmRleCwgbXNnKTtcbiAgICAgICAgaWYgKGV4dHJhLmVycm9ycykge1xuICAgICAgICAgICAgcmVjb3JkRXJyb3IoZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4uXG5cbiAgICBmdW5jdGlvbiB1bmV4cGVjdGVkVG9rZW5FcnJvcih0b2tlbiwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgdmFsdWUsIG1zZyA9IG1lc3NhZ2UgfHwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuO1xuXG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgbXNnID0gKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikgPyBNZXNzYWdlcy5VbmV4cGVjdGVkRU9TIDpcbiAgICAgICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpID8gTWVzc2FnZXMuVW5leHBlY3RlZElkZW50aWZpZXIgOlxuICAgICAgICAgICAgICAgICAgICAodG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpID8gTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlciA6XG4gICAgICAgICAgICAgICAgICAgICh0b2tlbi50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSA/IE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcgOlxuICAgICAgICAgICAgICAgICAgICAodG9rZW4udHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUpID8gTWVzc2FnZXMuVW5leHBlY3RlZFRlbXBsYXRlIDpcbiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVkO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlID0gKHRva2VuLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSA/IHRva2VuLnZhbHVlLnJhdyA6IHRva2VuLnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSAnSUxMRUdBTCc7XG4gICAgICAgIH1cblxuICAgICAgICBtc2cgPSBtc2cucmVwbGFjZSgnJTAnLCB2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuICh0b2tlbiAmJiB0eXBlb2YgdG9rZW4ubGluZU51bWJlciA9PT0gJ251bWJlcicpID9cbiAgICAgICAgICAgIGNyZWF0ZUVycm9yKHRva2VuLmxpbmVOdW1iZXIsIHRva2VuLnN0YXJ0LCBtc2cpIDpcbiAgICAgICAgICAgIGNyZWF0ZUVycm9yKHNjYW5uaW5nID8gbGluZU51bWJlciA6IGxhc3RMaW5lTnVtYmVyLCBzY2FubmluZyA/IGluZGV4IDogbGFzdEluZGV4LCBtc2cpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IHVuZXhwZWN0ZWRUb2tlbkVycm9yKHRva2VuLCBtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkVG9rZW5FcnJvcih0b2tlbiwgbWVzc2FnZSk7XG4gICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHtcbiAgICAgICAgICAgIHJlY29yZEVycm9yKGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci5cbiAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi5cblxuICAgIGZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkge1xuICAgICAgICB2YXIgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgfHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBleHBlY3RDb21tYVNlcGFyYXRvclxuICAgICAqIEBkZXNjcmlwdGlvbiBRdWlldGx5IGV4cGVjdCBhIGNvbW1hIHdoZW4gaW4gdG9sZXJhbnQgbW9kZSwgb3RoZXJ3aXNlIGRlbGVnYXRlc1xuICAgICAqIHRvIDxjb2RlPmV4cGVjdCh2YWx1ZSk8L2NvZGU+XG4gICAgICogQHNpbmNlIDIuMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV4cGVjdENvbW1hU2VwYXJhdG9yKCkge1xuICAgICAgICB2YXIgdG9rZW47XG5cbiAgICAgICAgaWYgKGV4dHJhLmVycm9ycykge1xuICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0gJywnKSB7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICc7Jykge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBlY3QoJywnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuXG4gICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cbiAgICBmdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdvcmQpIHtcbiAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci5cblxuICAgIGZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkXG5cbiAgICBmdW5jdGlvbiBtYXRjaEtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQgJiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkO1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjb250ZXh0dWFsIGtleXdvcmRcbiAgICAvLyAod2hlcmUgYW4gaWRlbnRpZmllciBpcyBzb21ldGltZXMgYSBrZXl3b3JkIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dClcblxuICAgIGZ1bmN0aW9uIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgJiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkO1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3JcblxuICAgIGZ1bmN0aW9uIG1hdGNoQXNzaWduKCkge1xuICAgICAgICB2YXIgb3A7XG5cbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb3AgPSBsb29rYWhlYWQudmFsdWU7XG4gICAgICAgIHJldHVybiBvcCA9PT0gJz0nIHx8XG4gICAgICAgICAgICBvcCA9PT0gJyo9JyB8fFxuICAgICAgICAgICAgb3AgPT09ICcvPScgfHxcbiAgICAgICAgICAgIG9wID09PSAnJT0nIHx8XG4gICAgICAgICAgICBvcCA9PT0gJys9JyB8fFxuICAgICAgICAgICAgb3AgPT09ICctPScgfHxcbiAgICAgICAgICAgIG9wID09PSAnPDw9JyB8fFxuICAgICAgICAgICAgb3AgPT09ICc+Pj0nIHx8XG4gICAgICAgICAgICBvcCA9PT0gJz4+Pj0nIHx8XG4gICAgICAgICAgICBvcCA9PT0gJyY9JyB8fFxuICAgICAgICAgICAgb3AgPT09ICdePScgfHxcbiAgICAgICAgICAgIG9wID09PSAnfD0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnN1bWVTZW1pY29sb24oKSB7XG4gICAgICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS5cbiAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KHN0YXJ0SW5kZXgpID09PSAweDNCIHx8IG1hdGNoKCc7JykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0xpbmVUZXJtaW5hdG9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGSVhNRShpa2FyaWVuYXRvcik6IHRoaXMgaXMgc2VlbWluZ2x5IGFuIGlzc3VlIGluIHRoZSBwcmV2aW91cyBsb2NhdGlvbiBpbmZvIGNvbnZlbnRpb24uXG4gICAgICAgIGxhc3RJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgIGxhc3RMaW5lTnVtYmVyID0gc3RhcnRMaW5lTnVtYmVyO1xuICAgICAgICBsYXN0TGluZVN0YXJ0ID0gc3RhcnRMaW5lU3RhcnQ7XG5cbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YgJiYgIW1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb3ZlciBncmFtbWFyIHN1cHBvcnQuXG4gICAgLy9cbiAgICAvLyBXaGVuIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBwb3NpdGlvbiBzdGFydHMgd2l0aCBhbiBsZWZ0IHBhcmVudGhlc2lzLCB0aGUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgdHlwZVxuICAgIC8vIG9mIHRoZSBzeW50YXggaXMgdG8gYmUgZGVmZXJyZWQgYXJiaXRyYXJpbHkgbG9uZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwYXJlbnRoZXNlcyBwYWlyIChwbHVzIGEgbG9va2FoZWFkKVxuICAgIC8vIG9yIHRoZSBmaXJzdCBjb21tYS4gVGhpcyBzaXR1YXRpb24gYWxzbyBkZWZlcnMgdGhlIGRldGVybWluYXRpb24gb2YgYWxsIHRoZSBleHByZXNzaW9ucyBuZXN0ZWQgaW4gdGhlIHBhaXIuXG4gICAgLy9cbiAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcHJvZHVjdGlvbnMgdGhhdCBjYW4gYmUgcGFyc2VkIGluIGEgcGFyZW50aGVzZXMgcGFpciB0aGF0IG5lZWRzIHRvIGJlIGRldGVybWluZWRcbiAgICAvLyBhZnRlciB0aGUgb3V0ZXJtb3N0IHBhaXIgaXMgY2xvc2VkLiBUaGV5IGFyZTpcbiAgICAvL1xuICAgIC8vICAgMS4gQXNzaWdubWVudEV4cHJlc3Npb25cbiAgICAvLyAgIDIuIEJpbmRpbmdFbGVtZW50c1xuICAgIC8vICAgMy4gQXNzaWdubWVudFRhcmdldHNcbiAgICAvL1xuICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGV4cG9uZW50aWFsIGJhY2t0cmFja2luZywgd2UgdXNlIHR3byBmbGFncyB0byBkZW5vdGUgaWYgdGhlIHByb2R1Y3Rpb24gY2FuIGJlXG4gICAgLy8gYmluZGluZyBlbGVtZW50IG9yIGFzc2lnbm1lbnQgdGFyZ2V0LlxuICAgIC8vXG4gICAgLy8gVGhlIHRocmVlIHByb2R1Y3Rpb25zIGhhdmUgdGhlIHJlbGF0aW9uc2hpcDpcbiAgICAvL1xuICAgIC8vICAgQmluZGluZ0VsZW1lbnRzIOKKhiBBc3NpZ25tZW50VGFyZ2V0cyDiioYgQXNzaWdubWVudEV4cHJlc3Npb25cbiAgICAvL1xuICAgIC8vIHdpdGggYSBzaW5nbGUgZXhjZXB0aW9uIHRoYXQgQ292ZXJJbml0aWFsaXplZE5hbWUgd2hlbiB1c2VkIGRpcmVjdGx5IGluIGFuIEV4cHJlc3Npb24sIGdlbmVyYXRlc1xuICAgIC8vIGFuIGVhcmx5IGVycm9yLiBUaGVyZWZvcmUsIHdlIG5lZWQgdGhlIHRoaXJkIHN0YXRlLCBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IsIHRvIHRyYWNrIHRoZVxuICAgIC8vIGZpcnN0IHVzYWdlIG9mIENvdmVySW5pdGlhbGl6ZWROYW1lIGFuZCByZXBvcnQgaXQgd2hlbiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHBhcmVudGhlc2VzIHBhaXIuXG4gICAgLy9cbiAgICAvLyBpc29sYXRlQ292ZXJHcmFtbWFyIGZ1bmN0aW9uIHJ1bnMgdGhlIGdpdmVuIHBhcnNlciBmdW5jdGlvbiB3aXRoIGEgbmV3IGNvdmVyIGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IGRvZXMgbm90XG4gICAgLy8gZWZmZWN0IHRoZSBjdXJyZW50IGZsYWdzLiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIG9ubHkgdXNlZCBhcyBhbiBleHByZXNzaW9uLiBUaGVyZWZvcmVcbiAgICAvLyB0aGUgQ292ZXJJbml0aWFsaXplZE5hbWUgY2hlY2sgaXMgY29uZHVjdGVkLlxuICAgIC8vXG4gICAgLy8gaW5oZXJpdENvdmVyR3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZSBmdW5jdGlvbiB3aXRoIGEgbmV3IGNvdmVyIGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IHByb3BhZ2F0ZXNcbiAgICAvLyB0aGUgZmxhZ3Mgb3V0c2lkZSBvZiB0aGUgcGFyc2VyLiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIHVzZWQgYXMgYSBwYXJ0IG9mIGEgcG90ZW50aWFsXG4gICAgLy8gcGF0dGVybi4gVGhlIENvdmVySW5pdGlhbGl6ZWROYW1lIGNoZWNrIGlzIGRlZmVycmVkLlxuICAgIGZ1bmN0aW9uIGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VyKSB7XG4gICAgICAgIHZhciBvbGRJc0JpbmRpbmdFbGVtZW50ID0gaXNCaW5kaW5nRWxlbWVudCxcbiAgICAgICAgICAgIG9sZElzQXNzaWdubWVudFRhcmdldCA9IGlzQXNzaWdubWVudFRhcmdldCxcbiAgICAgICAgICAgIG9sZEZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcixcbiAgICAgICAgICAgIHJlc3VsdDtcbiAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7XG4gICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7XG4gICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7XG4gICAgICAgIHJlc3VsdCA9IHBhcnNlcigpO1xuICAgICAgICBpZiAoZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBvbGRJc0JpbmRpbmdFbGVtZW50O1xuICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBvbGRJc0Fzc2lnbm1lbnRUYXJnZXQ7XG4gICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG9sZEZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlcikge1xuICAgICAgICB2YXIgb2xkSXNCaW5kaW5nRWxlbWVudCA9IGlzQmluZGluZ0VsZW1lbnQsXG4gICAgICAgICAgICBvbGRJc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0Fzc2lnbm1lbnRUYXJnZXQsXG4gICAgICAgICAgICBvbGRGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IsXG4gICAgICAgICAgICByZXN1bHQ7XG4gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSB0cnVlO1xuICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlO1xuICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsO1xuICAgICAgICByZXN1bHQgPSBwYXJzZXIoKTtcbiAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGlzQmluZGluZ0VsZW1lbnQgJiYgb2xkSXNCaW5kaW5nRWxlbWVudDtcbiAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNBc3NpZ25tZW50VGFyZ2V0ICYmIG9sZElzQXNzaWdubWVudFRhcmdldDtcbiAgICAgICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gb2xkRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yIHx8IGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy4zLjMgRGVzdHJ1Y3R1cmluZyBCaW5kaW5nIFBhdHRlcm5zXG5cbiAgICBmdW5jdGlvbiBwYXJzZUFycmF5UGF0dGVybihwYXJhbXMsIGtpbmQpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpLCBlbGVtZW50cyA9IFtdLCByZXN0LCByZXN0Tm9kZTtcbiAgICAgICAgZXhwZWN0KCdbJyk7XG5cbiAgICAgICAgd2hpbGUgKCFtYXRjaCgnXScpKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2goJywnKSkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnLi4uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdE5vZGUgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gobG9va2FoZWFkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHJlc3ROb2RlLmZpbmlzaFJlc3RFbGVtZW50KHJlc3QpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJhbXMsIGtpbmQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KCddJyk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQXJyYXlQYXR0ZXJuKGVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVByb3BlcnR5UGF0dGVybihwYXJhbXMsIGtpbmQpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpLCBrZXksIGtleVRva2VuLCBjb21wdXRlZCA9IG1hdGNoKCdbJyksIGluaXQ7XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICAgICAga2V5VG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICAgICAgaWYgKG1hdGNoKCc9JykpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChrZXlUb2tlbik7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICAnaW5pdCcsIGtleSwgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG5ldyBXcmFwcGluZ05vZGUoa2V5VG9rZW4pLmZpbmlzaEFzc2lnbm1lbnRQYXR0ZXJuKGtleSwgaW5pdCksIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFtYXRjaCgnOicpKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goa2V5VG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBmYWxzZSwga2V5LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KCc6Jyk7XG4gICAgICAgIGluaXQgPSBwYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJhbXMsIGtpbmQpO1xuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwgY29tcHV0ZWQsIGluaXQsIGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VPYmplY3RQYXR0ZXJuKHBhcmFtcywga2luZCkge1xuICAgICAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCksIHByb3BlcnRpZXMgPSBbXTtcblxuICAgICAgICBleHBlY3QoJ3snKTtcblxuICAgICAgICB3aGlsZSAoIW1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChwYXJzZVByb3BlcnR5UGF0dGVybihwYXJhbXMsIGtpbmQpKTtcbiAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoT2JqZWN0UGF0dGVybihwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVBhdHRlcm4ocGFyYW1zLCBraW5kKSB7XG4gICAgICAgIGlmIChtYXRjaCgnWycpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJheVBhdHRlcm4ocGFyYW1zLCBraW5kKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgneycpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RQYXR0ZXJuKHBhcmFtcywga2luZCk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3JkKCdsZXQnKSkge1xuICAgICAgICAgICAgaWYgKGtpbmQgPT09ICdjb25zdCcgfHwga2luZCA9PT0gJ2xldCcpIHtcbiAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQsIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwYXJhbXMucHVzaChsb29rYWhlYWQpO1xuICAgICAgICByZXR1cm4gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKSB7XG4gICAgICAgIHZhciBzdGFydFRva2VuID0gbG9va2FoZWFkLCBwYXR0ZXJuLCBwcmV2aW91c0FsbG93WWllbGQsIHJpZ2h0O1xuICAgICAgICBwYXR0ZXJuID0gcGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7XG4gICAgICAgIGlmIChtYXRjaCgnPScpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHByZXZpb3VzQWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJpZ2h0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG4gICAgICAgICAgICBwYXR0ZXJuID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hBc3NpZ25tZW50UGF0dGVybihwYXR0ZXJuLCByaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTIuMi41IEFycmF5IEluaXRpYWxpemVyXG5cbiAgICBmdW5jdGlvbiBwYXJzZUFycmF5SW5pdGlhbGl6ZXIoKSB7XG4gICAgICAgIHZhciBlbGVtZW50cyA9IFtdLCBub2RlID0gbmV3IE5vZGUoKSwgcmVzdFNwcmVhZDtcblxuICAgICAgICBleHBlY3QoJ1snKTtcblxuICAgICAgICB3aGlsZSAoIW1hdGNoKCddJykpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy4uLicpKSB7XG4gICAgICAgICAgICAgICAgcmVzdFNwcmVhZCA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgcmVzdFNwcmVhZC5maW5pc2hTcHJlYWRFbGVtZW50KGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocmVzdFNwcmVhZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCddJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi4yLjYgT2JqZWN0IEluaXRpYWxpemVyXG5cbiAgICBmdW5jdGlvbiBwYXJzZVByb3BlcnR5RnVuY3Rpb24obm9kZSwgcGFyYW1JbmZvLCBpc0dlbmVyYXRvcikge1xuICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIGJvZHk7XG5cbiAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXG4gICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgICAgICBib2R5ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMpO1xuXG4gICAgICAgIGlmIChzdHJpY3QgJiYgcGFyYW1JbmZvLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ocGFyYW1JbmZvLmZpcnN0UmVzdHJpY3RlZCwgcGFyYW1JbmZvLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpY3QgJiYgcGFyYW1JbmZvLnN0cmljdGVkKSB7XG4gICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihwYXJhbUluZm8uc3RyaWN0ZWQsIHBhcmFtSW5mby5tZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hGdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1JbmZvLnBhcmFtcywgcGFyYW1JbmZvLmRlZmF1bHRzLCBib2R5LCBpc0dlbmVyYXRvcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFyYW1zLCBtZXRob2QsIG5vZGUgPSBuZXcgTm9kZSgpLFxuICAgICAgICAgICAgcHJldmlvdXNBbGxvd1lpZWxkID0gc3RhdGUuYWxsb3dZaWVsZDtcblxuICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7XG4gICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKCk7XG4gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlO1xuICAgICAgICBtZXRob2QgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obm9kZSwgcGFyYW1zLCBmYWxzZSk7XG4gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCkge1xuICAgICAgICB2YXIgdG9rZW4sIG5vZGUgPSBuZXcgTm9kZSgpLCBleHByO1xuXG4gICAgICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICAgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBhcnNlT2JqZWN0UHJvcGVydHkoKSwgd2hlcmVcbiAgICAgICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuXG5cbiAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW4uU3RyaW5nTGl0ZXJhbDpcbiAgICAgICAgY2FzZSBUb2tlbi5OdW1lcmljTGl0ZXJhbDpcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHtcbiAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaExpdGVyYWwodG9rZW4pO1xuICAgICAgICBjYXNlIFRva2VuLklkZW50aWZpZXI6XG4gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVsbExpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDpcbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaElkZW50aWZpZXIodG9rZW4udmFsdWUpO1xuICAgICAgICBjYXNlIFRva2VuLlB1bmN0dWF0b3I6XG4gICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdbJykge1xuICAgICAgICAgICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIGV4cGVjdCgnXScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBleHByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpIHtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudHlwZSkge1xuICAgICAgICBjYXNlIFRva2VuLklkZW50aWZpZXI6XG4gICAgICAgIGNhc2UgVG9rZW4uU3RyaW5nTGl0ZXJhbDpcbiAgICAgICAgY2FzZSBUb2tlbi5Cb29sZWFuTGl0ZXJhbDpcbiAgICAgICAgY2FzZSBUb2tlbi5OdWxsTGl0ZXJhbDpcbiAgICAgICAgY2FzZSBUb2tlbi5OdW1lcmljTGl0ZXJhbDpcbiAgICAgICAgY2FzZSBUb2tlbi5LZXl3b3JkOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNhc2UgVG9rZW4uUHVuY3R1YXRvcjpcbiAgICAgICAgICAgIHJldHVybiBsb29rYWhlYWQudmFsdWUgPT09ICdbJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB0byB0cnkgdG8gcGFyc2UgYSBNZXRob2REZWZpbml0aW9uIGFzIGRlZmluZWQgaW4gMTQuMy4gQnV0IGluIHRoZSBjYXNlIG9mIG9iamVjdCBsaXRlcmFscyxcbiAgICAvLyBpdCBtaWdodCBiZSBjYWxsZWQgYXQgYSBwb3NpdGlvbiB3aGVyZSB0aGVyZSBpcyBpbiBmYWN0IGEgc2hvcnQgaGFuZCBpZGVudGlmaWVyIHBhdHRlcm4gb3IgYSBkYXRhIHByb3BlcnR5LlxuICAgIC8vIFRoaXMgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBhZnRlciB3ZSBjb25zdW1lZCB1cCB0byB0aGUgbGVmdCBwYXJlbnRoZXNlcy5cbiAgICAvL1xuICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGJhY2sgdHJhY2tpbmcsIGl0IHJldHVybnMgYG51bGxgIGlmIHRoZSBwb3NpdGlvbiBpcyBub3QgYSBNZXRob2REZWZpbml0aW9uIGFuZCB0aGUgY2FsbGVyXG4gICAgLy8gaXMgcmVzcG9uc2libGUgdG8gdmlzaXQgb3RoZXIgb3B0aW9ucy5cbiAgICBmdW5jdGlvbiB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG5vZGUpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBvcHRpb25zLCBtZXRob2ROb2RlLCBwYXJhbXMsXG4gICAgICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxkO1xuXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgYGdldGAgYW5kIGBzZXRgO1xuXG4gICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpO1xuICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgICAgICBtZXRob2ROb2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoJygnKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoJyknKTtcblxuICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihtZXRob2ROb2RlLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgICAgICAgICAgIH0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2dldCcsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3NldCcgJiYgbG9va2FoZWFkUHJvcGVydHlOYW1lKCkpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKCdbJyk7XG4gICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgICAgIG1ldGhvZE5vZGUgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpO1xuXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvdW50OiAwLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0czogW10sXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1TZXQ6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyknKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VQYXJhbShvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRlZmF1bHRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obWV0aG9kTm9kZSwgb3B0aW9ucywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgnc2V0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0gJyonICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKCdbJyk7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgICAgICAgICBtZXRob2ROb2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHRydWU7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcygpO1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcblxuICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obWV0aG9kTm9kZSwgcGFyYW1zLCB0cnVlKTtcbiAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgJiYgbWF0Y2goJygnKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdCBhIE1ldGhvZERlZmluaXRpb24uXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoaGFzUHJvdG8pIHtcbiAgICAgICAgdmFyIHRva2VuID0gbG9va2FoZWFkLCBub2RlID0gbmV3IE5vZGUoKSwgY29tcHV0ZWQsIGtleSwgbWF5YmVNZXRob2QsIHByb3RvLCB2YWx1ZTtcblxuICAgICAgICBjb21wdXRlZCA9IG1hdGNoKCdbJyk7XG4gICAgICAgIGlmIChtYXRjaCgnKicpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgfVxuICAgICAgICBtYXliZU1ldGhvZCA9IHRyeVBhcnNlTWV0aG9kRGVmaW5pdGlvbih0b2tlbiwga2V5LCBjb21wdXRlZCwgbm9kZSk7XG4gICAgICAgIGlmIChtYXliZU1ldGhvZCkge1xuICAgICAgICAgICAgcmV0dXJuIG1heWJlTWV0aG9kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlZCBfX3Byb3RvX19cbiAgICAgICAgaWYgKCFjb21wdXRlZCkge1xuICAgICAgICAgICAgcHJvdG8gPSAoa2V5LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGtleS5uYW1lID09PSAnX19wcm90b19fJykgfHxcbiAgICAgICAgICAgICAgICAoa2V5LnR5cGUgPT09IFN5bnRheC5MaXRlcmFsICYmIGtleS52YWx1ZSA9PT0gJ19fcHJvdG9fXycpO1xuICAgICAgICAgICAgaWYgKGhhc1Byb3RvLnZhbHVlICYmIHByb3RvKSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5EdXBsaWNhdGVQcm90b1Byb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhc1Byb3RvLnZhbHVlIHw9IHByb3RvO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoKCc6JykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgdmFsdWUgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2goJz0nKSkge1xuICAgICAgICAgICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLFxuICAgICAgICAgICAgICAgICAgICBuZXcgV3JhcHBpbmdOb2RlKHRva2VuKS5maW5pc2hBc3NpZ25tZW50UGF0dGVybihrZXksIHZhbHVlKSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCBrZXksIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VPYmplY3RJbml0aWFsaXplcigpIHtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXSwgaGFzUHJvdG8gPSB7dmFsdWU6IGZhbHNlfSwgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgZXhwZWN0KCd7Jyk7XG5cbiAgICAgICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocGFyc2VPYmplY3RQcm9wZXJ0eShoYXNQcm90bykpO1xuXG4gICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgICAgICBleHBlY3RDb21tYVNlcGFyYXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KCd9Jyk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcikge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICAgICAgY2FzZSBTeW50YXguSWRlbnRpZmllcjpcbiAgICAgICAgY2FzZSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbjpcbiAgICAgICAgY2FzZSBTeW50YXguUmVzdEVsZW1lbnQ6XG4gICAgICAgIGNhc2UgU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU3ludGF4LlNwcmVhZEVsZW1lbnQ6XG4gICAgICAgICAgICBleHByLnR5cGUgPSBTeW50YXguUmVzdEVsZW1lbnQ7XG4gICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5hcmd1bWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW50YXguQXJyYXlFeHByZXNzaW9uOlxuICAgICAgICAgICAgZXhwci50eXBlID0gU3ludGF4LkFycmF5UGF0dGVybjtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cHIuZWxlbWVudHNbaV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuZWxlbWVudHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFN5bnRheC5PYmplY3RFeHByZXNzaW9uOlxuICAgICAgICAgICAgZXhwci50eXBlID0gU3ludGF4Lk9iamVjdFBhdHRlcm47XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIucHJvcGVydGllc1tpXS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb246XG4gICAgICAgICAgICBleHByLnR5cGUgPSBTeW50YXguQXNzaWdubWVudFBhdHRlcm47XG4gICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5sZWZ0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gQWxsb3cgb3RoZXIgbm9kZSB0eXBlIGZvciB0b2xlcmFudCBwYXJzaW5nLlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi4yLjkgVGVtcGxhdGUgTGl0ZXJhbHNcblxuICAgIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVFbGVtZW50KG9wdGlvbikge1xuICAgICAgICB2YXIgbm9kZSwgdG9rZW47XG5cbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5UZW1wbGF0ZSB8fCAob3B0aW9uLmhlYWQgJiYgIWxvb2thaGVhZC5oZWFkKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFRlbXBsYXRlRWxlbWVudCh7IHJhdzogdG9rZW4udmFsdWUucmF3LCBjb29rZWQ6IHRva2VuLnZhbHVlLmNvb2tlZCB9LCB0b2tlbi50YWlsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpIHtcbiAgICAgICAgdmFyIHF1YXNpLCBxdWFzaXMsIGV4cHJlc3Npb25zLCBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVFbGVtZW50KHsgaGVhZDogdHJ1ZSB9KTtcbiAgICAgICAgcXVhc2lzID0gW3F1YXNpXTtcbiAgICAgICAgZXhwcmVzc2lvbnMgPSBbXTtcblxuICAgICAgICB3aGlsZSAoIXF1YXNpLnRhaWwpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlRWxlbWVudCh7IGhlYWQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgcXVhc2lzLnB1c2gocXVhc2kpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVGVtcGxhdGVMaXRlcmFsKHF1YXNpcywgZXhwcmVzc2lvbnMpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEyLjIuMTAgVGhlIEdyb3VwaW5nIE9wZXJhdG9yXG5cbiAgICBmdW5jdGlvbiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGV4cHIsIGV4cHJlc3Npb25zLCBzdGFydFRva2VuLCBpLCBwYXJhbXMgPSBbXTtcblxuICAgICAgICBleHBlY3QoJygnKTtcblxuICAgICAgICBpZiAobWF0Y2goJyknKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKCc9PicpKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCc9PicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBQbGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIHJhd1BhcmFtczogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICBpZiAobWF0Y2goJy4uLicpKSB7XG4gICAgICAgICAgICBleHByID0gcGFyc2VSZXN0RWxlbWVudChwYXJhbXMpO1xuICAgICAgICAgICAgZXhwZWN0KCcpJyk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKCc9PicpKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCc9PicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBQbGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtleHByXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSB0cnVlO1xuICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcblxuICAgICAgICBpZiAobWF0Y2goJywnKSkge1xuICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBleHByZXNzaW9ucyA9IFtleHByXTtcblxuICAgICAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxleCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcuLi4nKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQmluZGluZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChwYXJzZVJlc3RFbGVtZW50KHBhcmFtcykpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoJyknKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnPT4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCc9PicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcmVzc2lvbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBQbGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hTZXF1ZW5jZUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpO1xuICAgICAgICB9XG5cblxuICAgICAgICBleHBlY3QoJyknKTtcblxuICAgICAgICBpZiAobWF0Y2goJz0+JykpIHtcbiAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGV4cHIubmFtZSA9PT0gJ3lpZWxkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtleHByXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNCaW5kaW5nRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwci5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5leHByZXNzaW9uc1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4cHIgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBleHByLnR5cGUgPT09IFN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24gPyBleHByLmV4cHJlc3Npb25zIDogW2V4cHJdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG5cbiAgICAvLyBFQ01BLTI2MiAxMi4yIFByaW1hcnkgRXhwcmVzc2lvbnNcblxuICAgIGZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciB0eXBlLCB0b2tlbiwgZXhwciwgbm9kZTtcblxuICAgICAgICBpZiAobWF0Y2goJygnKSkge1xuICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VHcm91cEV4cHJlc3Npb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoKCdbJykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQXJyYXlJbml0aWFsaXplcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2goJ3snKSkge1xuICAgICAgICAgICAgcmV0dXJuIGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VPYmplY3RJbml0aWFsaXplcik7XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlID0gbG9va2FoZWFkLnR5cGU7XG4gICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuc291cmNlVHlwZSA9PT0gJ21vZHVsZScgJiYgbG9va2FoZWFkLnZhbHVlID09PSAnYXdhaXQnKSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cHIgPSBub2RlLmZpbmlzaElkZW50aWZpZXIobGV4KCkudmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHtcbiAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgbG9va2FoZWFkLm9jdGFsKSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwciA9IG5vZGUuZmluaXNoTGl0ZXJhbChsZXgoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgc3RhdGUuYWxsb3dZaWVsZCAmJiBtYXRjaEtleXdvcmQoJ3lpZWxkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiBtYXRjaEtleXdvcmQoJ2xldCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSWRlbnRpZmllcihsZXgoKS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCd0aGlzJykpIHtcbiAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hUaGlzRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnY2xhc3MnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNsYXNzRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obGV4KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsKSB7XG4gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICAgICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7XG4gICAgICAgICAgICBleHByID0gbm9kZS5maW5pc2hMaXRlcmFsKHRva2VuKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbCkge1xuICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgICAgIHRva2VuLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGV4cHIgPSBub2RlLmZpbmlzaExpdGVyYWwodG9rZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcvJykgfHwgbWF0Y2goJy89JykpIHtcbiAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBjb2xsZWN0UmVnZXgoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuUmVnRXhwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGV4cHIgPSBub2RlLmZpbmlzaExpdGVyYWwodG9rZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7XG4gICAgICAgICAgICBleHByID0gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxleCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEyLjMgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnNcblxuICAgIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBleHByO1xuXG4gICAgICAgIGV4cGVjdCgnKCcpO1xuXG4gICAgICAgIGlmICghbWF0Y2goJyknKSkge1xuICAgICAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2goJy4uLicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5maW5pc2hTcHJlYWRFbGVtZW50KGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goZXhwcik7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcpJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cGVjdENvbW1hU2VwYXJhdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QoJyknKTtcblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcblxuICAgICAgICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJZGVudGlmaWVyKHRva2VuLnZhbHVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkge1xuICAgICAgICBleHBlY3QoJy4nKTtcblxuICAgICAgICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VDb21wdXRlZE1lbWJlcigpIHtcbiAgICAgICAgdmFyIGV4cHI7XG5cbiAgICAgICAgZXhwZWN0KCdbJyk7XG5cbiAgICAgICAgZXhwciA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VFeHByZXNzaW9uKTtcblxuICAgICAgICBleHBlY3QoJ10nKTtcblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi4zLjMgVGhlIG5ldyBPcGVyYXRvclxuXG4gICAgZnVuY3Rpb24gcGFyc2VOZXdFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgY2FsbGVlLCBhcmdzLCBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCduZXcnKTtcblxuICAgICAgICBpZiAobWF0Y2goJy4nKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgJiYgbG9va2FoZWFkLnZhbHVlID09PSAndGFyZ2V0Jykge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoTWV0YVByb3BlcnR5KCduZXcnLCAndGFyZ2V0Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxlZSA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTtcbiAgICAgICAgYXJncyA9IG1hdGNoKCcoJykgPyBwYXJzZUFyZ3VtZW50cygpIDogW107XG5cbiAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaE5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi4zLjQgRnVuY3Rpb24gQ2FsbHNcblxuICAgIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpIHtcbiAgICAgICAgdmFyIHF1YXNpLCBleHByLCBhcmdzLCBwcm9wZXJ0eSwgc3RhcnRUb2tlbiwgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjtcblxuICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcblxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdzdXBlcicpICYmIHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgICAgICBleHByID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgZXhwciA9IGV4cHIuZmluaXNoU3VwZXIoKTtcbiAgICAgICAgICAgIGlmICghbWF0Y2goJygnKSAmJiAhbWF0Y2goJy4nKSAmJiAhbWF0Y2goJ1snKSkge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICBpZiAobWF0Y2goJy4nKSkge1xuICAgICAgICAgICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaE1lbWJlckV4cHJlc3Npb24oJy4nLCBleHByLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcoJykpIHtcbiAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7XG4gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJncyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCdbJykpIHtcbiAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIoKTtcbiAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUgJiYgbG9va2FoZWFkLmhlYWQpIHtcbiAgICAgICAgICAgICAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7XG4gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHF1YXNpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi4zIExlZnQtSGFuZC1TaWRlIEV4cHJlc3Npb25zXG5cbiAgICBmdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciBxdWFzaSwgZXhwciwgcHJvcGVydHksIHN0YXJ0VG9rZW47XG4gICAgICAgIGFzc2VydChzdGF0ZS5hbGxvd0luLCAnY2FsbGVlIG9mIG5ldyBleHByZXNzaW9uIGFsd2F5cyBhbGxvdyBpbiBrZXl3b3JkLicpO1xuXG4gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnc3VwZXInKSAmJiBzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICAgICAgZXhwciA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGV4cHIgPSBleHByLmZpbmlzaFN1cGVyKCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKCdbJykgJiYgIW1hdGNoKCcuJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIobWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lvbiA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgaWYgKG1hdGNoKCdbJykpIHtcbiAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIoKTtcbiAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnLicpKSB7XG4gICAgICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCk7XG4gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoTWVtYmVyRXhwcmVzc2lvbignLicsIGV4cHIsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlICYmIGxvb2thaGVhZC5oZWFkKSB7XG4gICAgICAgICAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEyLjQgUG9zdGZpeCBFeHByZXNzaW9uc1xuXG4gICAgZnVuY3Rpb24gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGV4cHIsIHRva2VuLCBzdGFydFRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7XG5cbiAgICAgICAgaWYgKCFoYXNMaW5lVGVybWluYXRvciAmJiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikge1xuICAgICAgICAgICAgaWYgKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSB7XG4gICAgICAgICAgICAgICAgLy8gRUNNQS0yNjIgMTEuMy4xLCAxMS4zLjJcbiAgICAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuU3RyaWN0TEhTUG9zdGZpeCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFBvc3RmaXhFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEyLjUgVW5hcnkgT3BlcmF0b3JzXG5cbiAgICBmdW5jdGlvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIHRva2VuLCBleHByLCBzdGFydFRva2VuO1xuXG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkge1xuICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZVVuYXJ5RXhwcmVzc2lvbik7XG4gICAgICAgICAgICAvLyBFQ01BLTI2MiAxMS40LjQsIDExLjQuNVxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKycpIHx8IG1hdGNoKCctJykgfHwgbWF0Y2goJ34nKSB8fCBtYXRjaCgnIScpKSB7XG4gICAgICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7XG4gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3JkKCdkZWxldGUnKSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7XG4gICAgICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09ICdkZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdERlbGV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgYWxsb3dJbikge1xuICAgICAgICB2YXIgcHJlYyA9IDA7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3x8JzpcbiAgICAgICAgICAgIHByZWMgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnJiYnOlxuICAgICAgICAgICAgcHJlYyA9IDI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd8JzpcbiAgICAgICAgICAgIHByZWMgPSAzO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnXic6XG4gICAgICAgICAgICBwcmVjID0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJyYnOlxuICAgICAgICAgICAgcHJlYyA9IDU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICc9PSc6XG4gICAgICAgIGNhc2UgJyE9JzpcbiAgICAgICAgY2FzZSAnPT09JzpcbiAgICAgICAgY2FzZSAnIT09JzpcbiAgICAgICAgICAgIHByZWMgPSA2O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhc2UgJz4nOlxuICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgIGNhc2UgJz49JzpcbiAgICAgICAgY2FzZSAnaW5zdGFuY2VvZic6XG4gICAgICAgICAgICBwcmVjID0gNztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2luJzpcbiAgICAgICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICc8PCc6XG4gICAgICAgIGNhc2UgJz4+JzpcbiAgICAgICAgY2FzZSAnPj4+JzpcbiAgICAgICAgICAgIHByZWMgPSA4O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgICAgcHJlYyA9IDk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgcHJlYyA9IDExO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByZWM7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTIuNiBNdWx0aXBsaWNhdGl2ZSBPcGVyYXRvcnNcbiAgICAvLyBFQ01BLTI2MiAxMi43IEFkZGl0aXZlIE9wZXJhdG9yc1xuICAgIC8vIEVDTUEtMjYyIDEyLjggQml0d2lzZSBTaGlmdCBPcGVyYXRvcnNcbiAgICAvLyBFQ01BLTI2MiAxMi45IFJlbGF0aW9uYWwgT3BlcmF0b3JzXG4gICAgLy8gRUNNQS0yNjIgMTIuMTAgRXF1YWxpdHkgT3BlcmF0b3JzXG4gICAgLy8gRUNNQS0yNjIgMTIuMTEgQmluYXJ5IEJpdHdpc2UgT3BlcmF0b3JzXG4gICAgLy8gRUNNQS0yNjIgMTIuMTIgQmluYXJ5IExvZ2ljYWwgT3BlcmF0b3JzXG5cbiAgICBmdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciBtYXJrZXIsIG1hcmtlcnMsIGV4cHIsIHRva2VuLCBwcmVjLCBzdGFjaywgcmlnaHQsIG9wZXJhdG9yLCBsZWZ0LCBpO1xuXG4gICAgICAgIG1hcmtlciA9IGxvb2thaGVhZDtcbiAgICAgICAgbGVmdCA9IGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VVbmFyeUV4cHJlc3Npb24pO1xuXG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICBwcmVjID0gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgc3RhdGUuYWxsb3dJbik7XG4gICAgICAgIGlmIChwcmVjID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbGVmdDtcbiAgICAgICAgfVxuICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIHRva2VuLnByZWMgPSBwcmVjO1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBtYXJrZXJzID0gW21hcmtlciwgbG9va2FoZWFkXTtcbiAgICAgICAgcmlnaHQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTtcblxuICAgICAgICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRdO1xuXG4gICAgICAgIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBzdGF0ZS5hbGxvd0luKSkgPiAwKSB7XG5cbiAgICAgICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy5cbiAgICAgICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHtcbiAgICAgICAgICAgICAgICByaWdodCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gc3RhY2sucG9wKCkudmFsdWU7XG4gICAgICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7XG4gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUobWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdKS5maW5pc2hCaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCk7XG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChleHByKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2hpZnQuXG4gICAgICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIG1hcmtlcnMucHVzaChsb29rYWhlYWQpO1xuICAgICAgICAgICAgZXhwciA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VVbmFyeUV4cHJlc3Npb24pO1xuICAgICAgICAgICAgc3RhY2sucHVzaChleHByKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmFsIHJlZHVjZSB0byBjbGVhbi11cCB0aGUgc3RhY2suXG4gICAgICAgIGkgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBleHByID0gc3RhY2tbaV07XG4gICAgICAgIG1hcmtlcnMucG9wKCk7XG4gICAgICAgIHdoaWxlIChpID4gMSkge1xuICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUobWFya2Vycy5wb3AoKSkuZmluaXNoQmluYXJ5RXhwcmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kgLSAyXSwgZXhwcik7XG4gICAgICAgICAgICBpIC09IDI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cblxuICAgIC8vIEVDTUEtMjYyIDEyLjEzIENvbmRpdGlvbmFsIE9wZXJhdG9yXG5cbiAgICBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGV4cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLCBzdGFydFRva2VuO1xuXG4gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7XG5cbiAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VCaW5hcnlFeHByZXNzaW9uKTtcbiAgICAgICAgaWYgKG1hdGNoKCc/JykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjtcbiAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlO1xuICAgICAgICAgICAgY29uc2VxdWVudCA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuICAgICAgICAgICAgZXhwZWN0KCc6Jyk7XG4gICAgICAgICAgICBhbHRlcm5hdGUgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXG4gICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbiAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDE0LjIgQXJyb3cgRnVuY3Rpb24gRGVmaW5pdGlvbnNcblxuICAgIGZ1bmN0aW9uIHBhcnNlQ29uY2lzZUJvZHkoKSB7XG4gICAgICAgIGlmIChtYXRjaCgneycpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0pIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHN3aXRjaCAocGFyYW0udHlwZSkge1xuICAgICAgICBjYXNlIFN5bnRheC5JZGVudGlmaWVyOlxuICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwgcGFyYW0ubmFtZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW50YXguUmVzdEVsZW1lbnQ6XG4gICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1bWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW50YXguQXNzaWdubWVudFBhdHRlcm46XG4gICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5sZWZ0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFN5bnRheC5BcnJheVBhdHRlcm46XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW0uZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW0uZWxlbWVudHNbaV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0uZWxlbWVudHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFN5bnRheC5ZaWVsZEV4cHJlc3Npb246XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydChwYXJhbS50eXBlID09PSBTeW50YXguT2JqZWN0UGF0dGVybiwgJ0ludmFsaWQgdHlwZScpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcmFtLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5wcm9wZXJ0aWVzW2ldLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KGV4cHIpIHtcbiAgICAgICAgdmFyIGksIGxlbiwgcGFyYW0sIHBhcmFtcywgZGVmYXVsdHMsIGRlZmF1bHRDb3VudCwgb3B0aW9ucywgdG9rZW47XG5cbiAgICAgICAgZGVmYXVsdHMgPSBbXTtcbiAgICAgICAgZGVmYXVsdENvdW50ID0gMDtcbiAgICAgICAgcGFyYW1zID0gW2V4cHJdO1xuXG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgIGNhc2UgU3ludGF4LklkZW50aWZpZXI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBQbGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcjpcbiAgICAgICAgICAgIHBhcmFtcyA9IGV4cHIucGFyYW1zO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBwYXJhbVNldDoge31cbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJhbXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHBhcmFtID0gcGFyYW1zW2ldO1xuICAgICAgICAgICAgc3dpdGNoIChwYXJhbS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjpcbiAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBwYXJhbS5sZWZ0O1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC50eXBlID09PSBTeW50YXguWWllbGRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC5hcmd1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC50eXBlID0gU3ludGF4LklkZW50aWZpZXI7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtLnJpZ2h0Lm5hbWUgPSAneWllbGQnO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuYXJndW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5kZWxlZ2F0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdHMucHVzaChwYXJhbS5yaWdodCk7XG4gICAgICAgICAgICAgICAgKytkZWZhdWx0Q291bnQ7XG4gICAgICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0ubGVmdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtKTtcbiAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0cy5wdXNoKG51bGwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCB8fCAhc3RhdGUuYWxsb3dZaWVsZCkge1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyYW1zLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgcGFyYW0gPSBwYXJhbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IFN5bnRheC5ZaWVsZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5tZXNzYWdlID09PSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGUpIHtcbiAgICAgICAgICAgIHRva2VuID0gc3RyaWN0ID8gb3B0aW9ucy5zdHJpY3RlZCA6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkO1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG9wdGlvbnMubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVmYXVsdENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBkZWZhdWx0cyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgZGVmYXVsdHM6IGRlZmF1bHRzLFxuICAgICAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsXG4gICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLFxuICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihvcHRpb25zLCBub2RlKSB7XG4gICAgICAgIHZhciBwcmV2aW91c1N0cmljdCwgcHJldmlvdXNBbGxvd1lpZWxkLCBib2R5O1xuXG4gICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikge1xuICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoJz0+Jyk7XG5cbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7XG4gICAgICAgIHByZXZpb3VzQWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7XG4gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSB0cnVlO1xuXG4gICAgICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7XG5cbiAgICAgICAgaWYgKHN0cmljdCAmJiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4ob3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsIG9wdGlvbnMubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmljdCAmJiBvcHRpb25zLnN0cmljdGVkKSB7XG4gICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihvcHRpb25zLnN0cmljdGVkLCBvcHRpb25zLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG4gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ob3B0aW9ucy5wYXJhbXMsIG9wdGlvbnMuZGVmYXVsdHMsIGJvZHksIGJvZHkudHlwZSAhPT0gU3ludGF4LkJsb2NrU3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxNC40IFlpZWxkIGV4cHJlc3Npb25cblxuICAgIGZ1bmN0aW9uIHBhcnNlWWllbGRFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgYXJndW1lbnQsIGV4cHIsIGRlbGVnYXRlLCBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgYXJndW1lbnQgPSBudWxsO1xuICAgICAgICBleHByID0gbmV3IE5vZGUoKTtcbiAgICAgICAgZGVsZWdhdGUgPSBmYWxzZTtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCd5aWVsZCcpO1xuXG4gICAgICAgIGlmICghaGFzTGluZVRlcm1pbmF0b3IpIHtcbiAgICAgICAgICAgIHByZXZpb3VzQWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7XG4gICAgICAgICAgICBkZWxlZ2F0ZSA9IG1hdGNoKCcqJyk7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnOycpICYmICFtYXRjaCgnfScpICYmICFtYXRjaCgnKScpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByLmZpbmlzaFlpZWxkRXhwcmVzc2lvbihhcmd1bWVudCwgZGVsZWdhdGUpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEyLjE0IEFzc2lnbm1lbnQgT3BlcmF0b3JzXG5cbiAgICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgdG9rZW4sIGV4cHIsIHJpZ2h0LCBsaXN0LCBzdGFydFRva2VuO1xuXG4gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgIGlmICghc3RhdGUuYWxsb3dZaWVsZCAmJiBtYXRjaEtleXdvcmQoJ3lpZWxkJykpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVlpZWxkRXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwciA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIgfHwgbWF0Y2goJz0+JykpIHtcbiAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxpc3QgPSByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChleHByKTtcblxuICAgICAgICAgICAgaWYgKGxpc3QpIHtcbiAgICAgICAgICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKGxpc3QsIG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZXhwcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaEFzc2lnbigpKSB7XG4gICAgICAgICAgICBpZiAoIWlzQXNzaWdubWVudFRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVDTUEtMjYyIDEyLjEuMVxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghbWF0Y2goJz0nKSkge1xuICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICAgICAgcmlnaHQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoQXNzaWdubWVudEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIsIHJpZ2h0KTtcbiAgICAgICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi4xNSBDb21tYSBPcGVyYXRvclxuXG4gICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgZXhwciwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZCwgZXhwcmVzc2lvbnM7XG5cbiAgICAgICAgZXhwciA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG5cbiAgICAgICAgaWYgKG1hdGNoKCcsJykpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zID0gW2V4cHJdO1xuXG4gICAgICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjIgQmxvY2tcblxuICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSB7XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2V4cG9ydCc6XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNvdXJjZVR5cGUgIT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCwgTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgICAgICAgICAgIGNhc2UgJ2ltcG9ydCc6XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNvdXJjZVR5cGUgIT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCwgTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKTtcbiAgICAgICAgICAgIGNhc2UgJ2NvbnN0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oe2luRm9yOiBmYWxzZX0pO1xuICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24obmV3IE5vZGUoKSk7XG4gICAgICAgICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2xhc3NEZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnbGV0JykgJiYgaXNMZXhpY2FsRGVjbGFyYXRpb24oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHtpbkZvcjogZmFsc2V9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdCgpIHtcbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaXN0LnB1c2gocGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlQmxvY2soKSB7XG4gICAgICAgIHZhciBibG9jaywgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgZXhwZWN0KCd7Jyk7XG5cbiAgICAgICAgYmxvY2sgPSBwYXJzZVN0YXRlbWVudExpc3QoKTtcblxuICAgICAgICBleHBlY3QoJ30nKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hCbG9ja1N0YXRlbWVudChibG9jayk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTMuMy4yIFZhcmlhYmxlIFN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCkge1xuICAgICAgICB2YXIgdG9rZW4sIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQgJiYgdG9rZW4udmFsdWUgPT09ICd5aWVsZCcpIHtcbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTtcbiAgICAgICAgICAgIH0gaWYgKCFzdGF0ZS5hbGxvd1lpZWxkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgfHwgdG9rZW4udmFsdWUgIT09ICdsZXQnIHx8IGtpbmQgIT09ICd2YXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuc291cmNlVHlwZSA9PT0gJ21vZHVsZScgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAmJiB0b2tlbi52YWx1ZSA9PT0gJ2F3YWl0Jykge1xuICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSWRlbnRpZmllcih0b2tlbi52YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGluaXQgPSBudWxsLCBpZCwgbm9kZSA9IG5ldyBOb2RlKCksIHBhcmFtcyA9IFtdO1xuXG4gICAgICAgIGlkID0gcGFyc2VQYXR0ZXJuKHBhcmFtcywgJ3ZhcicpO1xuXG4gICAgICAgIC8vIEVDTUEtMjYyIDEyLjIuMVxuICAgICAgICBpZiAoc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQoaWQubmFtZSkpIHtcbiAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuU3RyaWN0VmFyTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2goJz0nKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBpbml0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChpZC50eXBlICE9PSBTeW50YXguSWRlbnRpZmllciAmJiAhb3B0aW9ucy5pbkZvcikge1xuICAgICAgICAgICAgZXhwZWN0KCc9Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hWYXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qob3B0aW9ucykge1xuICAgICAgICB2YXIgb3B0LCBsaXN0O1xuXG4gICAgICAgIG9wdCA9IHsgaW5Gb3I6IG9wdGlvbnMuaW5Gb3IgfTtcbiAgICAgICAgbGlzdCA9IFtwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24ob3B0KV07XG5cbiAgICAgICAgd2hpbGUgKG1hdGNoKCcsJykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihvcHQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgZGVjbGFyYXRpb25zO1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ3ZhcicpO1xuXG4gICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoeyBpbkZvcjogZmFsc2UgfSk7XG5cbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy4zLjEgTGV0IGFuZCBDb25zdCBEZWNsYXJhdGlvbnNcblxuICAgIGZ1bmN0aW9uIHBhcnNlTGV4aWNhbEJpbmRpbmcoa2luZCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgaW5pdCA9IG51bGwsIGlkLCBub2RlID0gbmV3IE5vZGUoKSwgcGFyYW1zID0gW107XG5cbiAgICAgICAgaWQgPSBwYXJzZVBhdHRlcm4ocGFyYW1zLCBraW5kKTtcblxuICAgICAgICAvLyBFQ01BLTI2MiAxMi4yLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBpZC50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7XG4gICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdFZhck5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtpbmQgPT09ICdjb25zdCcpIHtcbiAgICAgICAgICAgIGlmICghbWF0Y2hLZXl3b3JkKCdpbicpICYmICFtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdvZicpKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCc9Jyk7XG4gICAgICAgICAgICAgICAgaW5pdCA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKCFvcHRpb25zLmluRm9yICYmIGlkLnR5cGUgIT09IFN5bnRheC5JZGVudGlmaWVyKSB8fCBtYXRjaCgnPScpKSB7XG4gICAgICAgICAgICBleHBlY3QoJz0nKTtcbiAgICAgICAgICAgIGluaXQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUJpbmRpbmdMaXN0KGtpbmQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGxpc3QgPSBbcGFyc2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKV07XG5cbiAgICAgICAgd2hpbGUgKG1hdGNoKCcsJykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNlTGV4aWNhbEJpbmRpbmcoa2luZCwgb3B0aW9ucykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiB0b2tlbml6ZXJTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIGhhc0xpbmVUZXJtaW5hdG9yOiBoYXNMaW5lVGVybWluYXRvcixcbiAgICAgICAgICAgIGxhc3RJbmRleDogbGFzdEluZGV4LFxuICAgICAgICAgICAgbGFzdExpbmVOdW1iZXI6IGxhc3RMaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGFzdExpbmVTdGFydDogbGFzdExpbmVTdGFydCxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBzdGFydExpbmVOdW1iZXI6IHN0YXJ0TGluZU51bWJlcixcbiAgICAgICAgICAgIHN0YXJ0TGluZVN0YXJ0OiBzdGFydExpbmVTdGFydCxcbiAgICAgICAgICAgIGxvb2thaGVhZDogbG9va2FoZWFkLFxuICAgICAgICAgICAgdG9rZW5Db3VudDogZXh0cmEudG9rZW5zID8gZXh0cmEudG9rZW5zLmxlbmd0aCA6IDBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNldFRva2VuaXplclN0YXRlKHRzKSB7XG4gICAgICAgIGluZGV4ID0gdHMuaW5kZXg7XG4gICAgICAgIGxpbmVOdW1iZXIgPSB0cy5saW5lTnVtYmVyO1xuICAgICAgICBsaW5lU3RhcnQgPSB0cy5saW5lU3RhcnQ7XG4gICAgICAgIGhhc0xpbmVUZXJtaW5hdG9yID0gdHMuaGFzTGluZVRlcm1pbmF0b3I7XG4gICAgICAgIGxhc3RJbmRleCA9IHRzLmxhc3RJbmRleDtcbiAgICAgICAgbGFzdExpbmVOdW1iZXIgPSB0cy5sYXN0TGluZU51bWJlcjtcbiAgICAgICAgbGFzdExpbmVTdGFydCA9IHRzLmxhc3RMaW5lU3RhcnQ7XG4gICAgICAgIHN0YXJ0SW5kZXggPSB0cy5zdGFydEluZGV4O1xuICAgICAgICBzdGFydExpbmVOdW1iZXIgPSB0cy5zdGFydExpbmVOdW1iZXI7XG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gdHMuc3RhcnRMaW5lU3RhcnQ7XG4gICAgICAgIGxvb2thaGVhZCA9IHRzLmxvb2thaGVhZDtcbiAgICAgICAgaWYgKGV4dHJhLnRva2Vucykge1xuICAgICAgICAgICAgZXh0cmEudG9rZW5zLnNwbGljZSh0cy50b2tlbkNvdW50LCBleHRyYS50b2tlbnMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGV4aWNhbERlY2xhcmF0aW9uKCkge1xuICAgICAgICB2YXIgbGV4aWNhbCwgdHM7XG5cbiAgICAgICAgdHMgPSB0b2tlbml6ZXJTdGF0ZSgpO1xuXG4gICAgICAgIGxleCgpO1xuICAgICAgICBsZXhpY2FsID0gKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB8fCBtYXRjaCgnWycpIHx8IG1hdGNoKCd7JykgfHxcbiAgICAgICAgICAgIG1hdGNoS2V5d29yZCgnbGV0JykgfHwgbWF0Y2hLZXl3b3JkKCd5aWVsZCcpO1xuXG4gICAgICAgIHJlc2V0VG9rZW5pemVyU3RhdGUodHMpO1xuXG4gICAgICAgIHJldHVybiBsZXhpY2FsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGtpbmQsIGRlY2xhcmF0aW9ucywgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAga2luZCA9IGxleCgpLnZhbHVlO1xuICAgICAgICBhc3NlcnQoa2luZCA9PT0gJ2xldCcgfHwga2luZCA9PT0gJ2NvbnN0JywgJ0xleGljYWwgZGVjbGFyYXRpb24gbXVzdCBiZSBlaXRoZXIgbGV0IG9yIGNvbnN0Jyk7XG5cbiAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VCaW5kaW5nTGlzdChraW5kLCBvcHRpb25zKTtcblxuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VSZXN0RWxlbWVudChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhcmFtLCBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAobWF0Y2goJ3snKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5PYmplY3RQYXR0ZXJuQXNSZXN0UGFyYW1ldGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmFtcy5wdXNoKGxvb2thaGVhZCk7XG5cbiAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgIGlmIChtYXRjaCgnPScpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWF0Y2goJyknKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5QYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUmVzdEVsZW1lbnQocGFyYW0pO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjQgRW1wdHkgU3RhdGVtZW50XG5cbiAgICBmdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgZXhwZWN0KCc7Jyk7XG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEVtcHR5U3RhdGVtZW50KCk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjYgSWYgc3RhdGVtZW50XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZTtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdpZicpO1xuXG4gICAgICAgIGV4cGVjdCgnKCcpO1xuXG4gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgICAgICBleHBlY3QoJyknKTtcblxuICAgICAgICBjb25zZXF1ZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdlbHNlJykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgYWx0ZXJuYXRlID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJZlN0YXRlbWVudCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjcgSXRlcmF0aW9uIFN0YXRlbWVudHNcblxuICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBib2R5LCB0ZXN0LCBvbGRJbkl0ZXJhdGlvbjtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdkbycpO1xuXG4gICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247XG4gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTtcblxuICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uO1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7XG5cbiAgICAgICAgZXhwZWN0KCcoJyk7XG5cbiAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgICAgIGV4cGVjdCgnKScpO1xuXG4gICAgICAgIGlmIChtYXRjaCgnOycpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaERvV2hpbGVTdGF0ZW1lbnQoYm9keSwgdGVzdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VXaGlsZVN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciB0ZXN0LCBib2R5LCBvbGRJbkl0ZXJhdGlvbjtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpO1xuXG4gICAgICAgIGV4cGVjdCgnKCcpO1xuXG4gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgICAgICBleHBlY3QoJyknKTtcblxuICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7XG5cbiAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUZvclN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBpbml0LCBmb3JJbiwgaW5pdFNlcSwgaW5pdFN0YXJ0VG9rZW4sIHRlc3QsIHVwZGF0ZSwgbGVmdCwgcmlnaHQsIGtpbmQsIGRlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgIGJvZHksIG9sZEluSXRlcmF0aW9uLCBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luO1xuXG4gICAgICAgIGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDtcbiAgICAgICAgZm9ySW4gPSB0cnVlO1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ2ZvcicpO1xuXG4gICAgICAgIGV4cGVjdCgnKCcpO1xuXG4gICAgICAgIGlmIChtYXRjaCgnOycpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3ZhcicpKSB7XG4gICAgICAgICAgICAgICAgaW5pdCA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh7IGluRm9yOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBtYXRjaEtleXdvcmQoJ2luJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGluaXQuZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBkZWNsYXJhdGlvbnNbMF0uaW5pdCA9PT0gbnVsbCAmJiBtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdvZicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvckluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGluaXQuZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZCgnY29uc3QnKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcpKSB7XG4gICAgICAgICAgICAgICAgaW5pdCA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICAgICAga2luZCA9IGxleCgpLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgbG9va2FoZWFkLnZhbHVlID09PSAnaW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlzaElkZW50aWZpZXIoa2luZCk7XG4gICAgICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZUJpbmRpbmdMaXN0KGtpbmQsIHtpbkZvcjogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIG1hdGNoS2V5d29yZCgnaW4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGluaXQuZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVjbGFyYXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGluaXQuZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gaW5pdC5maW5pc2hMZXhpY2FsRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5pdFN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGluaXQgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdpbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNBc3NpZ25tZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckluKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oaW5pdCk7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuSW52YWxpZExIU0luRm9yTG9vcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpO1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VxID0gW2luaXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG1hdGNoKCcsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VxLnB1c2goaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbmV3IFdyYXBwaW5nTm9kZShpbml0U3RhcnRUb2tlbikuZmluaXNoU2VxdWVuY2VFeHByZXNzaW9uKGluaXRTZXEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnOycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7XG4gICAgICAgICAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwZWN0KCc7Jyk7XG5cbiAgICAgICAgICAgIGlmICghbWF0Y2goJyknKSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KCcpJyk7XG5cbiAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlO1xuXG4gICAgICAgIGJvZHkgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlU3RhdGVtZW50KTtcblxuICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uO1xuXG4gICAgICAgIHJldHVybiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSA/XG4gICAgICAgICAgICAgICAgbm9kZS5maW5pc2hGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSA6XG4gICAgICAgICAgICAgICAgZm9ySW4gPyBub2RlLmZpbmlzaEZvckluU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KSA6XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuZmluaXNoRm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjggVGhlIGNvbnRpbnVlIHN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IG51bGwsIGtleTtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdjb250aW51ZScpO1xuXG4gICAgICAgIC8vIE9wdGltaXplIHRoZSBtb3N0IGNvbW1vbiBmb3JtOiAnY29udGludWU7Jy5cbiAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KHN0YXJ0SW5kZXgpID09PSAweDNCKSB7XG4gICAgICAgICAgICBsZXgoKTtcblxuICAgICAgICAgICAgaWYgKCFzdGF0ZS5pbkl0ZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQ29udGludWVTdGF0ZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzTGluZVRlcm1pbmF0b3IpIHtcbiAgICAgICAgICAgIGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaENvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5hbWU7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hDb250aW51ZVN0YXRlbWVudChsYWJlbCk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTMuOSBUaGUgYnJlYWsgc3RhdGVtZW50XG5cbiAgICBmdW5jdGlvbiBwYXJzZUJyZWFrU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5O1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7XG5cbiAgICAgICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLlxuICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQobGFzdEluZGV4KSA9PT0gMHgzQikge1xuICAgICAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQnJlYWtTdGF0ZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzTGluZVRlcm1pbmF0b3IpIHtcbiAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICAgICAgbGFiZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgICAgICBrZXkgPSAnJCcgKyBsYWJlbC5uYW1lO1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hCcmVha1N0YXRlbWVudChsYWJlbCk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTMuMTAgVGhlIHJldHVybiBzdGF0ZW1lbnRcblxuICAgIGZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIGFyZ3VtZW50ID0gbnVsbDtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdyZXR1cm4nKTtcblxuICAgICAgICBpZiAoIXN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gJ3JldHVybicgZm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQgYW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi5cbiAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGxhc3RJbmRleCkgPT09IDB4MjApIHtcbiAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChsYXN0SW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0xpbmVUZXJtaW5hdG9yKSB7XG4gICAgICAgICAgICAvLyBIQUNLXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hSZXR1cm5TdGF0ZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1hdGNoKCc7JykpIHtcbiAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjExIFRoZSB3aXRoIHN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VXaXRoU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIG9iamVjdCwgYm9keTtcblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ3dpdGgnKTtcblxuICAgICAgICBleHBlY3QoJygnKTtcblxuICAgICAgICBvYmplY3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgICAgICBleHBlY3QoJyknKTtcblxuICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hXaXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTMuMTIgVGhlIHN3aXRjaCBzdGF0ZW1lbnRcblxuICAgIGZ1bmN0aW9uIHBhcnNlU3dpdGNoQ2FzZSgpIHtcbiAgICAgICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQgPSBbXSwgc3RhdGVtZW50LCBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgdGVzdCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXNlJyk7XG4gICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KCc6Jyk7XG5cbiAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaCgnfScpIHx8IG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpIHx8IG1hdGNoS2V5d29yZCgnY2FzZScpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7XG4gICAgICAgICAgICBjb25zZXF1ZW50LnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgZGlzY3JpbWluYW50LCBjYXNlcywgY2xhdXNlLCBvbGRJblN3aXRjaCwgZGVmYXVsdEZvdW5kO1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ3N3aXRjaCcpO1xuXG4gICAgICAgIGV4cGVjdCgnKCcpO1xuXG4gICAgICAgIGRpc2NyaW1pbmFudCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgICAgIGV4cGVjdCgnKScpO1xuXG4gICAgICAgIGV4cGVjdCgneycpO1xuXG4gICAgICAgIGNhc2VzID0gW107XG5cbiAgICAgICAgaWYgKG1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3aXRjaDtcbiAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlO1xuICAgICAgICBkZWZhdWx0Rm91bmQgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsYXVzZSA9IHBhcnNlU3dpdGNoQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGNsYXVzZS50ZXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlcy5wdXNoKGNsYXVzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoO1xuXG4gICAgICAgIGV4cGVjdCgnfScpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy4xNCBUaGUgdGhyb3cgc3RhdGVtZW50XG5cbiAgICBmdW5jdGlvbiBwYXJzZVRocm93U3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIGFyZ3VtZW50O1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ3Rocm93Jyk7XG5cbiAgICAgICAgaWYgKGhhc0xpbmVUZXJtaW5hdG9yKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFRocm93U3RhdGVtZW50KGFyZ3VtZW50KTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy4xNSBUaGUgdHJ5IHN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZSgpIHtcbiAgICAgICAgdmFyIHBhcmFtLCBwYXJhbXMgPSBbXSwgcGFyYW1NYXAgPSB7fSwga2V5LCBpLCBib2R5LCBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXRjaCcpO1xuXG4gICAgICAgIGV4cGVjdCgnKCcpO1xuICAgICAgICBpZiAobWF0Y2goJyknKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmFtID0gcGFyc2VQYXR0ZXJuKHBhcmFtcyk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGtleSA9ICckJyArIHBhcmFtc1tpXS52YWx1ZTtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1NYXAsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLkR1cGxpY2F0ZUJpbmRpbmcsIHBhcmFtc1tpXS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJhbU1hcFtrZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVDTUEtMjYyIDEyLjE0LjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7XG4gICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KCcpJyk7XG4gICAgICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7XG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaENhdGNoQ2xhdXNlKHBhcmFtLCBib2R5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVRyeVN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBibG9jaywgaGFuZGxlciA9IG51bGwsIGZpbmFsaXplciA9IG51bGw7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgndHJ5Jyk7XG5cbiAgICAgICAgYmxvY2sgPSBwYXJzZUJsb2NrKCk7XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnY2F0Y2gnKSkge1xuICAgICAgICAgICAgaGFuZGxlciA9IHBhcnNlQ2F0Y2hDbGF1c2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2ZpbmFsbHknKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBmaW5hbGl6ZXIgPSBwYXJzZUJsb2NrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhhbmRsZXIgJiYgIWZpbmFsaXplcikge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFRyeVN0YXRlbWVudChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy4xNiBUaGUgZGVidWdnZXIgc3RhdGVtZW50XG5cbiAgICBmdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgZXhwZWN0S2V5d29yZCgnZGVidWdnZXInKTtcblxuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRGVidWdnZXJTdGF0ZW1lbnQoKTtcbiAgICB9XG5cbiAgICAvLyAxMyBTdGF0ZW1lbnRzXG5cbiAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudCgpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBsb29rYWhlYWQudHlwZSxcbiAgICAgICAgICAgIGV4cHIsXG4gICAgICAgICAgICBsYWJlbGVkQm9keSxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIG5vZGU7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gJ3snKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VCbG9jaygpO1xuICAgICAgICB9XG4gICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSB0cnVlO1xuICAgICAgICBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJzsnOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUVtcHR5U3RhdGVtZW50KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnKCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2JyZWFrJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VCcmVha1N0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDb250aW51ZVN0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ2RlYnVnZ2VyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VEZWJ1Z2dlclN0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ2RvJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VEb1doaWxlU3RhdGVtZW50KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnZm9yJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGb3JTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ2lmJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJZlN0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ3JldHVybic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmV0dXJuU3RhdGVtZW50KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnc3dpdGNoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICd0aHJvdyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGhyb3dTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICd0cnknOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRyeVN0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ3Zhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICd3aGlsZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlV2hpbGVTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICd3aXRoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VXaXRoU3RhdGVtZW50KG5vZGUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgICAgICAvLyBFQ01BLTI2MiAxMi4xMiBMYWJlbGxlZCBTdGF0ZW1lbnRzXG4gICAgICAgIGlmICgoZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgJiYgbWF0Y2goJzonKSkge1xuICAgICAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgICAgIGtleSA9ICckJyArIGV4cHIubmFtZTtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLlJlZGVjbGFyYXRpb24sICdMYWJlbCcsIGV4cHIubmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXRlLmxhYmVsU2V0W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgbGFiZWxlZEJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmxhYmVsU2V0W2tleV07XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDE0LjEgRnVuY3Rpb24gRGVmaW5pdGlvblxuXG4gICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCkge1xuICAgICAgICB2YXIgc3RhdGVtZW50LCBib2R5ID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgICAgIG9sZExhYmVsU2V0LCBvbGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBvbGRQYXJlbnRoZXNpc0NvdW50LFxuICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgZXhwZWN0KCd7Jyk7XG5cbiAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG5cbiAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKTtcbiAgICAgICAgICAgIGJvZHkucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQgKyAxLCB0b2tlbi5lbmQgLSAxKTtcbiAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3RyaWN0Jykge1xuICAgICAgICAgICAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvbGRMYWJlbFNldCA9IHN0YXRlLmxhYmVsU2V0O1xuICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoO1xuICAgICAgICBvbGRJbkZ1bmN0aW9uQm9keSA9IHN0YXRlLmluRnVuY3Rpb25Cb2R5O1xuICAgICAgICBvbGRQYXJlbnRoZXNpc0NvdW50ID0gc3RhdGUucGFyZW50aGVzaXplZENvdW50O1xuXG4gICAgICAgIHN0YXRlLmxhYmVsU2V0ID0ge307XG4gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluU3dpdGNoID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucGFyZW50aGVzaXplZENvdW50ID0gMDtcblxuICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvZHkucHVzaChwYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KCd9Jyk7XG5cbiAgICAgICAgc3RhdGUubGFiZWxTZXQgPSBvbGRMYWJlbFNldDtcbiAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcbiAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDtcbiAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSBvbGRJbkZ1bmN0aW9uQm9keTtcbiAgICAgICAgc3RhdGUucGFyZW50aGVzaXplZENvdW50ID0gb2xkUGFyZW50aGVzaXNDb3VudDtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hCbG9ja1N0YXRlbWVudChib2R5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7XG4gICAgICAgIHZhciBrZXkgPSAnJCcgKyBuYW1lO1xuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZChuYW1lKSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMucGFyYW1TZXQsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQgPSBwYXJhbTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLnBhcmFtU2V0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnBhcmFtU2V0W2tleV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW0ob3B0aW9ucykge1xuICAgICAgICB2YXIgdG9rZW4sIHBhcmFtLCBwYXJhbXMgPSBbXSwgaSwgZGVmO1xuXG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcuLi4nKSB7XG4gICAgICAgICAgICBwYXJhbSA9IHBhcnNlUmVzdEVsZW1lbnQocGFyYW1zKTtcbiAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0uYXJndW1lbnQsIHBhcmFtLmFyZ3VtZW50Lm5hbWUpO1xuICAgICAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHRzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJhbSA9IHBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcyk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW1zW2ldLCBwYXJhbXNbaV0udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IFN5bnRheC5Bc3NpZ25tZW50UGF0dGVybikge1xuICAgICAgICAgICAgZGVmID0gcGFyYW0ucmlnaHQ7XG4gICAgICAgICAgICBwYXJhbSA9IHBhcmFtLmxlZnQ7XG4gICAgICAgICAgICArK29wdGlvbnMuZGVmYXVsdENvdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdHMucHVzaChkZWYpO1xuXG4gICAgICAgIHJldHVybiAhbWF0Y2goJyknKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnM7XG5cbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICBkZWZhdWx0Q291bnQ6IDAsXG4gICAgICAgICAgICBkZWZhdWx0czogW10sXG4gICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3RlZFxuICAgICAgICB9O1xuXG4gICAgICAgIGV4cGVjdCgnKCcpO1xuXG4gICAgICAgIGlmICghbWF0Y2goJyknKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5wYXJhbVNldCA9IHt9O1xuICAgICAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlUGFyYW0ob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KCcpJyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHRzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcbiAgICAgICAgICAgIGRlZmF1bHRzOiBvcHRpb25zLmRlZmF1bHRzLFxuICAgICAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsXG4gICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLFxuICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUsIGlkZW50aWZpZXJJc09wdGlvbmFsKSB7XG4gICAgICAgIHZhciBpZCA9IG51bGwsIHBhcmFtcyA9IFtdLCBkZWZhdWx0cyA9IFtdLCBib2R5LCB0b2tlbiwgc3RyaWN0ZWQsIHRtcCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlLCBwcmV2aW91c1N0cmljdCxcbiAgICAgICAgICAgIGlzR2VuZXJhdG9yLCBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgcHJldmlvdXNBbGxvd1lpZWxkID0gc3RhdGUuYWxsb3dZaWVsZDtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdmdW5jdGlvbicpO1xuXG4gICAgICAgIGlzR2VuZXJhdG9yID0gbWF0Y2goJyonKTtcbiAgICAgICAgaWYgKGlzR2VuZXJhdG9yKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaWRlbnRpZmllcklzT3B0aW9uYWwgfHwgIW1hdGNoKCcoJykpIHtcbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9ICFpc0dlbmVyYXRvcjtcbiAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKTtcbiAgICAgICAgcGFyYW1zID0gdG1wLnBhcmFtcztcbiAgICAgICAgZGVmYXVsdHMgPSB0bXAuZGVmYXVsdHM7XG4gICAgICAgIHN0cmljdGVkID0gdG1wLnN0cmljdGVkO1xuICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmlyc3RSZXN0cmljdGVkO1xuICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSB0bXAubWVzc2FnZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7XG4gICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcbiAgICAgICAgaWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmljdCAmJiBzdHJpY3RlZCkge1xuICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG4gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSwgaXNHZW5lcmF0b3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgdG9rZW4sIGlkID0gbnVsbCwgc3RyaWN0ZWQsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgdG1wLFxuICAgICAgICAgICAgcGFyYW1zID0gW10sIGRlZmF1bHRzID0gW10sIGJvZHksIHByZXZpb3VzU3RyaWN0LCBub2RlID0gbmV3IE5vZGUoKSxcbiAgICAgICAgICAgIGlzR2VuZXJhdG9yLCBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgcHJldmlvdXNBbGxvd1lpZWxkID0gc3RhdGUuYWxsb3dZaWVsZDtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdmdW5jdGlvbicpO1xuXG4gICAgICAgIGlzR2VuZXJhdG9yID0gbWF0Y2goJyonKTtcbiAgICAgICAgaWYgKGlzR2VuZXJhdG9yKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSAhaXNHZW5lcmF0b3I7XG4gICAgICAgIGlmICghbWF0Y2goJygnKSkge1xuICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgICAgICBpZCA9ICghc3RyaWN0ICYmICFpc0dlbmVyYXRvciAmJiBtYXRjaEtleXdvcmQoJ3lpZWxkJykpID8gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgOiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKTtcbiAgICAgICAgcGFyYW1zID0gdG1wLnBhcmFtcztcbiAgICAgICAgZGVmYXVsdHMgPSB0bXAuZGVmYXVsdHM7XG4gICAgICAgIHN0cmljdGVkID0gdG1wLnN0cmljdGVkO1xuICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmlyc3RSZXN0cmljdGVkO1xuICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSB0bXAubWVzc2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHksIGlzR2VuZXJhdG9yKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxNC41IENsYXNzIERlZmluaXRpb25zXG5cbiAgICBmdW5jdGlvbiBwYXJzZUNsYXNzQm9keSgpIHtcbiAgICAgICAgdmFyIGNsYXNzQm9keSwgdG9rZW4sIGlzU3RhdGljLCBoYXNDb25zdHJ1Y3RvciA9IGZhbHNlLCBib2R5LCBtZXRob2QsIGNvbXB1dGVkLCBrZXk7XG5cbiAgICAgICAgY2xhc3NCb2R5ID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBleHBlY3QoJ3snKTtcbiAgICAgICAgYm9keSA9IFtdO1xuICAgICAgICB3aGlsZSAoIW1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaCgnOycpKSB7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1ldGhvZCA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgICAgICAgICAgaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKCdbJyk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcqJykpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5Lm5hbWUgPT09ICdzdGF0aWMnICYmIChsb29rYWhlYWRQcm9wZXJ0eU5hbWUoKSB8fCBtYXRjaCgnKicpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKCdbJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyonKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWV0aG9kID0gdHJ5UGFyc2VNZXRob2REZWZpbml0aW9uKHRva2VuLCBrZXksIGNvbXB1dGVkLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kWydzdGF0aWMnXSA9IGlzU3RhdGljOyAvLyBqc2NzOmlnbm9yZSByZXF1aXJlRG90Tm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5raW5kID09PSAnaW5pdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC5raW5kID0gJ21ldGhvZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXRob2QuY29tcHV0ZWQgJiYgKG1ldGhvZC5rZXkubmFtZSB8fCBtZXRob2Qua2V5LnZhbHVlLnRvU3RyaW5nKCkpID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5raW5kICE9PSAnbWV0aG9kJyB8fCAhbWV0aG9kLm1ldGhvZCB8fCBtZXRob2QudmFsdWUuZ2VuZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5Db25zdHJ1Y3RvclNwZWNpYWxNZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLkR1cGxpY2F0ZUNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNDb25zdHJ1Y3RvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC5raW5kID0gJ2NvbnN0cnVjdG9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIChtZXRob2Qua2V5Lm5hbWUgfHwgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RhdGljUHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtZXRob2QudHlwZSA9IFN5bnRheC5NZXRob2REZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbWV0aG9kLm1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1ldGhvZC5zaG9ydGhhbmQ7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkucHVzaChtZXRob2QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm4gY2xhc3NCb2R5LmZpbmlzaENsYXNzQm9keShib2R5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUNsYXNzRGVjbGFyYXRpb24oaWRlbnRpZmllcklzT3B0aW9uYWwpIHtcbiAgICAgICAgdmFyIGlkID0gbnVsbCwgc3VwZXJDbGFzcyA9IG51bGwsIGNsYXNzTm9kZSA9IG5ldyBOb2RlKCksIGNsYXNzQm9keSwgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7XG4gICAgICAgIHN0cmljdCA9IHRydWU7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnY2xhc3MnKTtcblxuICAgICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdleHRlbmRzJykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgc3VwZXJDbGFzcyA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKTtcbiAgICAgICAgfVxuICAgICAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcblxuICAgICAgICByZXR1cm4gY2xhc3NOb2RlLmZpbmlzaENsYXNzRGVjbGFyYXRpb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VDbGFzc0V4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciBpZCA9IG51bGwsIHN1cGVyQ2xhc3MgPSBudWxsLCBjbGFzc05vZGUgPSBuZXcgTm9kZSgpLCBjbGFzc0JvZHksIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgICAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdleHRlbmRzJykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgc3VwZXJDbGFzcyA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKTtcbiAgICAgICAgfVxuICAgICAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcblxuICAgICAgICByZXR1cm4gY2xhc3NOb2RlLmZpbmlzaENsYXNzRXhwcmVzc2lvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxNS4yIE1vZHVsZXNcblxuICAgIGZ1bmN0aW9uIHBhcnNlTW9kdWxlU3BlY2lmaWVyKCkge1xuICAgICAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLkludmFsaWRNb2R1bGVTcGVjaWZpZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaExpdGVyYWwobGV4KCkpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDE1LjIuMyBFeHBvcnRzXG5cbiAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcigpIHtcbiAgICAgICAgdmFyIGV4cG9ydGVkLCBsb2NhbCwgbm9kZSA9IG5ldyBOb2RlKCksIGRlZjtcbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gJ3NvbWV0aGluZyc7XG4gICAgICAgICAgICBkZWYgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBsb2NhbCA9IGRlZi5maW5pc2hJZGVudGlmaWVyKCdkZWZhdWx0Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2NhbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgZXhwb3J0ZWQgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnRTcGVjaWZpZXIobG9jYWwsIGV4cG9ydGVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSBudWxsLFxuICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllcixcbiAgICAgICAgICAgIHNyYyA9IG51bGwsIHNwZWNpZmllcnMgPSBbXTtcblxuICAgICAgICAvLyBub24tZGVmYXVsdCBleHBvcnRcbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxO1xuICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdsZXQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnN0JzpcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZUxleGljYWxEZWNsYXJhdGlvbih7aW5Gb3I6IGZhbHNlfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIG51bGwpO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3Zhcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KCd7Jyk7XG4gICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgfHwgbWF0Y2hLZXl3b3JkKCdkZWZhdWx0Jyk7XG4gICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VFeHBvcnRTcGVjaWZpZXIoKSk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoJywnKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KCd9Jyk7XG5cbiAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkge1xuICAgICAgICAgICAgLy8gY292ZXJpbmc6XG4gICAgICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gJ2Zvbyc7XG4gICAgICAgICAgICAvLyBleHBvcnQge2Zvb30gZnJvbSAnZm9vJztcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0V4cG9ydEZyb21JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAvLyBjb3ZlcmluZzpcbiAgICAgICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH07IC8vIG1pc3NpbmcgZnJvbUNsYXVzZVxuICAgICAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQudmFsdWUgP1xuICAgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNvdmVyXG4gICAgICAgICAgICAvLyBleHBvcnQge2Zvb307XG4gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgc3JjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IG51bGwsXG4gICAgICAgICAgICBleHByZXNzaW9uID0gbnVsbDtcblxuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLlxuICAgICAgICBleHBlY3RLZXl3b3JkKCdkZWZhdWx0Jyk7XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9vICgpIHt9XG4gICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fVxuICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24obmV3IE5vZGUoKSwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2NsYXNzJykpIHtcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBsb29rYWhlYWQudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCB7fTtcbiAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgW107XG4gICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0ICgxICsgMik7XG4gICAgICAgIGlmIChtYXRjaCgneycpKSB7XG4gICAgICAgICAgICBleHByZXNzaW9uID0gcGFyc2VPYmplY3RJbml0aWFsaXplcigpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCdbJykpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUFycmF5SW5pdGlhbGl6ZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIHZhciBzcmM7XG5cbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgKiBmcm9tICdmb28nO1xuICAgICAgICBleHBlY3QoJyonKTtcbiAgICAgICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IobG9va2FoZWFkLnZhbHVlID9cbiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnRBbGxEZWNsYXJhdGlvbihzcmMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgICAgIHZhciBub2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdleHBvcnQnKTtcblxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2goJyonKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0QWxsRGVjbGFyYXRpb24obm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0TmFtZWREZWNsYXJhdGlvbihub2RlKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxNS4yLjIgSW1wb3J0c1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7XG4gICAgICAgIC8vIGltcG9ydCB7PGZvbyBhcyBiYXI+fSAuLi47XG4gICAgICAgIHZhciBsb2NhbCwgaW1wb3J0ZWQsIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIGltcG9ydGVkID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG4gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEltcG9ydFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTmFtZWRJbXBvcnRzKCkge1xuICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdO1xuICAgICAgICAvLyB7Zm9vLCBiYXIgYXMgYmFzfVxuICAgICAgICBleHBlY3QoJ3snKTtcbiAgICAgICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnRTcGVjaWZpZXIoKSk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoJywnKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KCd9Jyk7XG4gICAgICAgIHJldHVybiBzcGVjaWZpZXJzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpIHtcbiAgICAgICAgLy8gaW1wb3J0IDxmb28+IC4uLjtcbiAgICAgICAgdmFyIGxvY2FsLCBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEltcG9ydERlZmF1bHRTcGVjaWZpZXIobG9jYWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkge1xuICAgICAgICAvLyBpbXBvcnQgPCogYXMgZm9vPiAuLi47XG4gICAgICAgIHZhciBsb2NhbCwgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgZXhwZWN0KCcqJyk7XG4gICAgICAgIGlmICghbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXMnKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgICAgIGxleCgpO1xuICAgICAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpIHtcbiAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXSwgc3JjLCBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBpZiAoc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpO1xuXG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICAgICAgLy8gaW1wb3J0ICdmb28nO1xuICAgICAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKCd7JykpIHtcbiAgICAgICAgICAgICAgICAvLyBpbXBvcnQge2Jhcn1cbiAgICAgICAgICAgICAgICBzcGVjaWZpZXJzID0gc3BlY2lmaWVycy5jb25jYXQocGFyc2VOYW1lZEltcG9ydHMoKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcqJykpIHtcbiAgICAgICAgICAgICAgICAvLyBpbXBvcnQgKiBhcyBmb29cbiAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllck5hbWUobG9va2FoZWFkKSAmJiAhbWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHtcbiAgICAgICAgICAgICAgICAvLyBpbXBvcnQgZm9vXG4gICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2goJywnKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcqJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28sICogYXMgZm9vXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ3snKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZvbywge2Jhcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcnMgPSBzcGVjaWZpZXJzLmNvbmNhdChwYXJzZU5hbWVkSW1wb3J0cygpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxleCgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZC52YWx1ZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSW1wb3J0RGVjbGFyYXRpb24oc3BlY2lmaWVycywgc3JjKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxNS4xIFNjcmlwdHNcblxuICAgIGZ1bmN0aW9uIHBhcnNlU2NyaXB0Qm9keSgpIHtcbiAgICAgICAgdmFyIHN0YXRlbWVudCwgYm9keSA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQ7XG5cbiAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpO1xuICAgICAgICAgICAgYm9keS5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmVcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpO1xuICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7XG4gICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keS5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtKCkge1xuICAgICAgICB2YXIgYm9keSwgbm9kZTtcblxuICAgICAgICBwZWVrKCk7XG4gICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIGJvZHkgPSBwYXJzZVNjcmlwdEJvZHkoKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvZ3JhbShib2R5LCBzdGF0ZS5zb3VyY2VUeXBlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkge1xuICAgICAgICB2YXIgaSwgZW50cnksIHRva2VuLCB0b2tlbnMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEudG9rZW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBlbnRyeSA9IGV4dHJhLnRva2Vuc1tpXTtcbiAgICAgICAgICAgIHRva2VuID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGVudHJ5LnJlZ2V4KSB7XG4gICAgICAgICAgICAgICAgdG9rZW4ucmVnZXggPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IGVudHJ5LnJlZ2V4LnBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzOiBlbnRyeS5yZWdleC5mbGFnc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0b2tlbi5yYW5nZSA9IGVudHJ5LnJhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICAgICAgICAgIHRva2VuLmxvYyA9IGVudHJ5LmxvYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4dHJhLnRva2VucyA9IHRva2VucztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkge1xuICAgICAgICB2YXIgdG9TdHJpbmcsXG4gICAgICAgICAgICB0b2tlbnM7XG5cbiAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7XG4gICAgICAgIGlmICh0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlID0gY29kZTtcbiAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwO1xuICAgICAgICBsaW5lU3RhcnQgPSAwO1xuICAgICAgICBzdGFydEluZGV4ID0gaW5kZXg7XG4gICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7XG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICBsb29rYWhlYWQgPSBudWxsO1xuICAgICAgICBzdGF0ZSA9IHtcbiAgICAgICAgICAgIGFsbG93SW46IHRydWUsXG4gICAgICAgICAgICBhbGxvd1lpZWxkOiB0cnVlLFxuICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LFxuICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLFxuICAgICAgICAgICAgaW5JdGVyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLFxuICAgICAgICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEsXG4gICAgICAgICAgICBjdXJseVN0YWNrOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIGV4dHJhID0ge307XG5cbiAgICAgICAgLy8gT3B0aW9ucyBtYXRjaGluZy5cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgLy8gT2YgY291cnNlIHdlIGNvbGxlY3QgdG9rZW5zIGhlcmUuXG4gICAgICAgIG9wdGlvbnMudG9rZW5zID0gdHJ1ZTtcbiAgICAgICAgZXh0cmEudG9rZW5zID0gW107XG4gICAgICAgIGV4dHJhLnRva2VuVmFsdWVzID0gW107XG4gICAgICAgIGV4dHJhLnRva2VuaXplID0gdHJ1ZTtcbiAgICAgICAgZXh0cmEuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmaWVsZHMgYXJlIG5lY2Vzc2FyeSB0byBjb21wdXRlIHRoZSBSZWdleCB0b2tlbnMuXG4gICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gLTE7XG4gICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gLTE7XG5cbiAgICAgICAgZXh0cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5yYW5nZTtcbiAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxvYztcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkge1xuICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7XG4gICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwZWVrKCk7XG4gICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHRyYS50b2tlbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgd2hpbGUgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRFcnJvcihsZXhFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGJyZWFrIG9uIHRoZSBmaXJzdCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGxleEVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2tlbnMgPSBleHRyYS50b2tlbnM7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICB0b2tlbnMuZXJyb3JzID0gZXh0cmEuZXJyb3JzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZXh0cmEgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHByb2dyYW0sIHRvU3RyaW5nO1xuXG4gICAgICAgIHRvU3RyaW5nID0gU3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEoY29kZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZSA9IGNvZGU7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICAgICAgbGluZVN0YXJ0ID0gMDtcbiAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4O1xuICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyO1xuICAgICAgICBzdGFydExpbmVTdGFydCA9IGxpbmVTdGFydDtcbiAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICAgICAgc3RhdGUgPSB7XG4gICAgICAgICAgICBhbGxvd0luOiB0cnVlLFxuICAgICAgICAgICAgYWxsb3dZaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgIGxhYmVsU2V0OiB7fSxcbiAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSxcbiAgICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGluU3dpdGNoOiBmYWxzZSxcbiAgICAgICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xLFxuICAgICAgICAgICAgY3VybHlTdGFjazogW10sXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiAnc2NyaXB0J1xuICAgICAgICB9O1xuICAgICAgICBzdHJpY3QgPSBmYWxzZTtcblxuICAgICAgICBleHRyYSA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlO1xuICAgICAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxvYztcbiAgICAgICAgICAgIGV4dHJhLmF0dGFjaENvbW1lbnQgPSAodHlwZW9mIG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmF0dGFjaENvbW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5zb3VyY2UgIT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGV4dHJhLnNvdXJjZSA9IHRvU3RyaW5nKG9wdGlvbnMuc291cmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7XG4gICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkge1xuICAgICAgICAgICAgICAgIGV4dHJhLnJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VUeXBlID09PSAnbW9kdWxlJykge1xuICAgICAgICAgICAgICAgIC8vIHZlcnkgcmVzdHJpY3RpdmUgY29uZGl0aW9uIGZvciBub3dcbiAgICAgICAgICAgICAgICBzdGF0ZS5zb3VyY2VUeXBlID0gb3B0aW9ucy5zb3VyY2VUeXBlO1xuICAgICAgICAgICAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbSgpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBwcm9ncmFtLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS50b2tlbnMgPSBleHRyYS50b2tlbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBwcm9ncmFtLmVycm9ycyA9IGV4dHJhLmVycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGV4dHJhID0ge307XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvZ3JhbTtcbiAgICB9XG5cbiAgICAvLyBTeW5jIHdpdGggKi5qc29uIG1hbmlmZXN0cy5cbiAgICBleHBvcnRzLnZlcnNpb24gPSAnMi43LjEnO1xuXG4gICAgZXhwb3J0cy50b2tlbml6ZSA9IHRva2VuaXplO1xuXG4gICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuXG4gICAgLy8gRGVlcCBjb3B5LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZXhwb3J0cy5TeW50YXggPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmFtZSwgdHlwZXMgPSB7fTtcblxuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobmFtZSBpbiBTeW50YXgpIHtcbiAgICAgICAgICAgIGlmIChTeW50YXguaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0eXBlc1tuYW1lXSA9IFN5bnRheFtuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSh0eXBlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgfSgpKTtcblxufSkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsImZ1bmN0aW9uIEFkZHJlc3MgKGZha2VyKSB7XG4gIHZhciBmID0gZmFrZXIuZmFrZSxcbiAgICAgIEhlbHBlcnMgPSBmYWtlci5oZWxwZXJzO1xuXG4gIHRoaXMuemlwQ29kZSA9IGZ1bmN0aW9uKGZvcm1hdCkge1xuICAgIC8vIGlmIHppcCBmb3JtYXQgaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSB6aXAgZm9ybWF0IGRlZmluZWQgZm9yIHRoZSBsb2NhbGVcbiAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBsb2NhbGVGb3JtYXQgPSBmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLnBvc3Rjb2RlO1xuICAgICAgaWYgKHR5cGVvZiBsb2NhbGVGb3JtYXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZvcm1hdCA9IGxvY2FsZUZvcm1hdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1hdCA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQobG9jYWxlRm9ybWF0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEhlbHBlcnMucmVwbGFjZVN5bWJvbHMoZm9ybWF0KTtcbiAgfVxuXG4gIHRoaXMuY2l0eSA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICB2YXIgZm9ybWF0cyA9IFtcbiAgICAgICd7e2FkZHJlc3MuY2l0eVByZWZpeH19IHt7bmFtZS5maXJzdE5hbWV9fSB7e2FkZHJlc3MuY2l0eVN1ZmZpeH19JyxcbiAgICAgICd7e2FkZHJlc3MuY2l0eVByZWZpeH19IHt7bmFtZS5maXJzdE5hbWV9fScsXG4gICAgICAne3tuYW1lLmZpcnN0TmFtZX19IHt7YWRkcmVzcy5jaXR5U3VmZml4fX0nLFxuICAgICAgJ3t7bmFtZS5sYXN0TmFtZX19IHt7YWRkcmVzcy5jaXR5U3VmZml4fX0nXG4gICAgXTtcblxuICAgIGlmICh0eXBlb2YgZm9ybWF0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICBmb3JtYXQgPSBmYWtlci5yYW5kb20ubnVtYmVyKGZvcm1hdHMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGYoZm9ybWF0c1tmb3JtYXRdKTtcblxuICB9XG5cbiAgdGhpcy5jaXR5UHJlZml4ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3MuY2l0eV9wcmVmaXgpO1xuICB9XG5cbiAgdGhpcy5jaXR5U3VmZml4ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3MuY2l0eV9zdWZmaXgpO1xuICB9XG5cbiAgdGhpcy5zdHJlZXROYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHZhciBzdWZmaXggPSBmYWtlci5hZGRyZXNzLnN0cmVldFN1ZmZpeCgpO1xuICAgICAgaWYgKHN1ZmZpeCAhPT0gXCJcIikge1xuICAgICAgICAgIHN1ZmZpeCA9IFwiIFwiICsgc3VmZml4XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZmFrZXIucmFuZG9tLm51bWJlcigxKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJlc3VsdCA9IGZha2VyLm5hbWUubGFzdE5hbWUoKSArIHN1ZmZpeDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXN1bHQgPSBmYWtlci5uYW1lLmZpcnN0TmFtZSgpICsgc3VmZml4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vXG4gIC8vIFRPRE86IGNoYW5nZSBhbGwgdGhlc2UgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIGJvb2xlYW4gdG8gaW5zdGVhZCBhY2NlcHQgYW4gb3B0aW9ucyBoYXNoLlxuICAvL1xuICB0aGlzLnN0cmVldEFkZHJlc3MgPSBmdW5jdGlvbiAodXNlRnVsbEFkZHJlc3MpIHtcbiAgICAgIGlmICh1c2VGdWxsQWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7IHVzZUZ1bGxBZGRyZXNzID0gZmFsc2U7IH1cbiAgICAgIHZhciBhZGRyZXNzID0gXCJcIjtcbiAgICAgIHN3aXRjaCAoZmFrZXIucmFuZG9tLm51bWJlcigyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAgIGFkZHJlc3MgPSBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKFwiIyMjIyNcIikgKyBcIiBcIiArIGZha2VyLmFkZHJlc3Muc3RyZWV0TmFtZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICAgIGFkZHJlc3MgPSBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKFwiIyMjI1wiKSArICBcIiBcIiArIGZha2VyLmFkZHJlc3Muc3RyZWV0TmFtZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICAgIGFkZHJlc3MgPSBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKFwiIyMjXCIpICsgXCIgXCIgKyBmYWtlci5hZGRyZXNzLnN0cmVldE5hbWUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJldHVybiB1c2VGdWxsQWRkcmVzcyA/IChhZGRyZXNzICsgXCIgXCIgKyBmYWtlci5hZGRyZXNzLnNlY29uZGFyeUFkZHJlc3MoKSkgOiBhZGRyZXNzO1xuICB9XG5cbiAgdGhpcy5zdHJlZXRTdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLnN0cmVldF9zdWZmaXgpO1xuICB9XG4gIFxuICB0aGlzLnN0cmVldFByZWZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3Muc3RyZWV0X3ByZWZpeCk7XG4gIH1cblxuICB0aGlzLnNlY29uZGFyeUFkZHJlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcihmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KFxuICAgICAgICAgIFtcbiAgICAgICAgICAgICAgJ0FwdC4gIyMjJyxcbiAgICAgICAgICAgICAgJ1N1aXRlICMjIydcbiAgICAgICAgICBdXG4gICAgICApKTtcbiAgfVxuXG4gIHRoaXMuY291bnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3MuY291bnR5KTtcbiAgfVxuXG4gIHRoaXMuY291bnRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLmNvdW50cnkpO1xuICB9XG5cbiAgdGhpcy5jb3VudHJ5Q29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLmNvdW50cnlfY29kZSk7XG4gIH1cblxuICB0aGlzLnN0YXRlID0gZnVuY3Rpb24gKHVzZUFiYnIpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3Muc3RhdGUpO1xuICB9XG5cbiAgdGhpcy5zdGF0ZUFiYnIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLnN0YXRlX2FiYnIpO1xuICB9XG5cbiAgdGhpcy5sYXRpdHVkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoZmFrZXIucmFuZG9tLm51bWJlcigxODAgKiAxMDAwMCkgLyAxMDAwMC4wIC0gOTAuMCkudG9GaXhlZCg0KTtcbiAgfVxuXG4gIHRoaXMubG9uZ2l0dWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChmYWtlci5yYW5kb20ubnVtYmVyKDM2MCAqIDEwMDAwKSAvIDEwMDAwLjAgLSAxODAuMCkudG9GaXhlZCg0KTtcbiAgfVxuICBcbiAgcmV0dXJuIHRoaXM7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBBZGRyZXNzO1xuIiwidmFyIENvbW1lcmNlID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBzZWxmLmNvbG9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5jb2xvcik7XG4gIH07XG5cbiAgc2VsZi5kZXBhcnRtZW50ID0gZnVuY3Rpb24obWF4LCBmaXhlZEFtb3VudCkge1xuICAgIFxuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UuZGVwYXJ0bWVudCk7XG4gICAgICAvKlxuICAgICAgbWF4ID0gbWF4IHx8IDM7XG5cbiAgICAgIHZhciBudW0gPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogbWF4KSArIDEpO1xuICAgICAgaWYgKGZpeGVkQW1vdW50KSB7XG4gICAgICAgICAgbnVtID0gbWF4O1xuICAgICAgfVxuXG4gICAgICB2YXIgY2F0ZWdvcmllcyA9IGZha2VyLmNvbW1lcmNlLmNhdGVnb3JpZXMobnVtKTtcblxuICAgICAgaWYobnVtID4gMSkge1xuICAgICAgICAgIHJldHVybiBmYWtlci5jb21tZXJjZS5tZXJnZUNhdGVnb3JpZXMoY2F0ZWdvcmllcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYXRlZ29yaWVzWzBdO1xuICAgICAgKi9cbiAgfTtcblxuICBzZWxmLnByb2R1Y3ROYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmFrZXIuY29tbWVyY2UucHJvZHVjdEFkamVjdGl2ZSgpICsgXCIgXCIgK1xuICAgICAgICAgICAgICBmYWtlci5jb21tZXJjZS5wcm9kdWN0TWF0ZXJpYWwoKSArIFwiIFwiICtcbiAgICAgICAgICAgICAgZmFrZXIuY29tbWVyY2UucHJvZHVjdCgpO1xuICB9O1xuXG4gIHNlbGYucHJpY2UgPSBmdW5jdGlvbihtaW4sIG1heCwgZGVjLCBzeW1ib2wpIHtcbiAgICAgIG1pbiA9IG1pbiB8fCAwO1xuICAgICAgbWF4ID0gbWF4IHx8IDEwMDA7XG4gICAgICBkZWMgPSBkZWMgfHwgMjtcbiAgICAgIHN5bWJvbCA9IHN5bWJvbCB8fCAnJztcblxuICAgICAgaWYobWluIDwgMCB8fCBtYXggPCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHN5bWJvbCArIDAuMDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzeW1ib2wgKyAoTWF0aC5yb3VuZCgoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluKSAqIE1hdGgucG93KDEwLCBkZWMpKSAvIE1hdGgucG93KDEwLCBkZWMpKS50b0ZpeGVkKGRlYyk7XG4gIH07XG5cbiAgLypcbiAgc2VsZi5jYXRlZ29yaWVzID0gZnVuY3Rpb24obnVtKSB7XG4gICAgICB2YXIgY2F0ZWdvcmllcyA9IFtdO1xuXG4gICAgICBkbyB7XG4gICAgICAgICAgdmFyIGNhdGVnb3J5ID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5kZXBhcnRtZW50KTtcbiAgICAgICAgICBpZihjYXRlZ29yaWVzLmluZGV4T2YoY2F0ZWdvcnkpID09PSAtMSkge1xuICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xuICAgICAgICAgIH1cbiAgICAgIH0gd2hpbGUoY2F0ZWdvcmllcy5sZW5ndGggPCBudW0pO1xuXG4gICAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgfTtcblxuICAqL1xuICAvKlxuICBzZWxmLm1lcmdlQ2F0ZWdvcmllcyA9IGZ1bmN0aW9uKGNhdGVnb3JpZXMpIHtcbiAgICAgIHZhciBzZXBhcmF0b3IgPSBmYWtlci5kZWZpbml0aW9ucy5zZXBhcmF0b3IgfHwgXCIgJlwiO1xuICAgICAgLy8gVE9ETzogZmluZCB1bmRlZmluZWQgaGVyZVxuICAgICAgY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXMgfHwgZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UuY2F0ZWdvcmllcztcbiAgICAgIHZhciBjb21tYVNlcGFyYXRlZCA9IGNhdGVnb3JpZXMuc2xpY2UoMCwgLTEpLmpvaW4oJywgJyk7XG5cbiAgICAgIHJldHVybiBbY29tbWFTZXBhcmF0ZWQsIGNhdGVnb3JpZXNbY2F0ZWdvcmllcy5sZW5ndGggLSAxXV0uam9pbihzZXBhcmF0b3IgKyBcIiBcIik7XG4gIH07XG4gICovXG5cbiAgc2VsZi5wcm9kdWN0QWRqZWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5wcm9kdWN0X25hbWUuYWRqZWN0aXZlKTtcbiAgfTtcblxuICBzZWxmLnByb2R1Y3RNYXRlcmlhbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UucHJvZHVjdF9uYW1lLm1hdGVyaWFsKTtcbiAgfTtcblxuICBzZWxmLnByb2R1Y3QgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbW1lcmNlLnByb2R1Y3RfbmFtZS5wcm9kdWN0KTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufTtcblxubW9kdWxlWydleHBvcnRzJ10gPSBDb21tZXJjZTsiLCJ2YXIgQ29tcGFueSA9IGZ1bmN0aW9uIChmYWtlcikge1xuICBcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgZiA9IGZha2VyLmZha2U7XG4gIFxuICB0aGlzLnN1ZmZpeGVzID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIERvbid0IHdhbnQgdGhlIHNvdXJjZSBhcnJheSBleHBvc2VkIHRvIG1vZGlmaWNhdGlvbiwgc28gcmV0dXJuIGEgY29weVxuICAgIHJldHVybiBmYWtlci5kZWZpbml0aW9ucy5jb21wYW55LnN1ZmZpeC5zbGljZSgwKTtcbiAgfVxuXG4gIHRoaXMuY29tcGFueU5hbWUgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG5cbiAgICB2YXIgZm9ybWF0cyA9IFtcbiAgICAgICd7e25hbWUubGFzdE5hbWV9fSB7e2NvbXBhbnkuY29tcGFueVN1ZmZpeH19JyxcbiAgICAgICd7e25hbWUubGFzdE5hbWV9fSAtIHt7bmFtZS5sYXN0TmFtZX19JyxcbiAgICAgICd7e25hbWUubGFzdE5hbWV9fSwge3tuYW1lLmxhc3ROYW1lfX0gYW5kIHt7bmFtZS5sYXN0TmFtZX19J1xuICAgIF07XG5cbiAgICBpZiAodHlwZW9mIGZvcm1hdCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgZm9ybWF0ID0gZmFrZXIucmFuZG9tLm51bWJlcihmb3JtYXRzLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBmKGZvcm1hdHNbZm9ybWF0XSk7XG4gIH1cblxuICB0aGlzLmNvbXBhbnlTdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5jb21wYW55LnN1ZmZpeGVzKCkpO1xuICB9XG5cbiAgdGhpcy5jYXRjaFBocmFzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZigne3tjb21wYW55LmNhdGNoUGhyYXNlQWRqZWN0aXZlfX0ge3tjb21wYW55LmNhdGNoUGhyYXNlRGVzY3JpcHRvcn19IHt7Y29tcGFueS5jYXRjaFBocmFzZU5vdW59fScpXG4gIH1cblxuICB0aGlzLmJzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmKCd7e2NvbXBhbnkuYnNBZGplY3RpdmV9fSB7e2NvbXBhbnkuYnNCdXp6fX0ge3tjb21wYW55LmJzTm91bn19Jyk7XG4gIH1cblxuICB0aGlzLmNhdGNoUGhyYXNlQWRqZWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5hZGplY3RpdmUpO1xuICB9XG5cbiAgdGhpcy5jYXRjaFBocmFzZURlc2NyaXB0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21wYW55LmRlc2NyaXB0b3IpO1xuICB9XG5cbiAgdGhpcy5jYXRjaFBocmFzZU5vdW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21wYW55Lm5vdW4pO1xuICB9XG5cbiAgdGhpcy5ic0FkamVjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbXBhbnkuYnNfYWRqZWN0aXZlKTtcbiAgfVxuXG4gIHRoaXMuYnNCdXp6ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5ic192ZXJiKTtcbiAgfVxuXG4gIHRoaXMuYnNOb3VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5ic19ub3VuKTtcbiAgfVxuICBcbn1cblxubW9kdWxlWydleHBvcnRzJ10gPSBDb21wYW55OyIsInZhciBfRGF0ZSA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYucGFzdCA9IGZ1bmN0aW9uICh5ZWFycywgcmVmRGF0ZSkge1xuICAgICAgdmFyIGRhdGUgPSAocmVmRGF0ZSkgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKHJlZkRhdGUpKSA6IG5ldyBEYXRlKCk7XG4gICAgICB2YXIgcmFuZ2UgPSB7XG4gICAgICAgIG1pbjogMTAwMCxcbiAgICAgICAgbWF4OiAoeWVhcnMgfHwgMSkgKiAzNjUgKiAyNCAqIDM2MDAgKiAxMDAwXG4gICAgICB9O1xuXG4gICAgICB2YXIgcGFzdCA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgcGFzdCAtPSBmYWtlci5yYW5kb20ubnVtYmVyKHJhbmdlKTsgLy8gc29tZSB0aW1lIGZyb20gbm93IHRvIE4geWVhcnMgYWdvLCBpbiBtaWxsaXNlY29uZHNcbiAgICAgIGRhdGUuc2V0VGltZShwYXN0KTtcblxuICAgICAgcmV0dXJuIGRhdGU7XG4gIH07XG5cbiAgc2VsZi5mdXR1cmUgPSBmdW5jdGlvbiAoeWVhcnMsIHJlZkRhdGUpIHtcbiAgICAgIHZhciBkYXRlID0gKHJlZkRhdGUpID8gbmV3IERhdGUoRGF0ZS5wYXJzZShyZWZEYXRlKSkgOiBuZXcgRGF0ZSgpO1xuICAgICAgdmFyIHJhbmdlID0ge1xuICAgICAgICBtaW46IDEwMDAsXG4gICAgICAgIG1heDogKHllYXJzIHx8IDEpICogMzY1ICogMjQgKiAzNjAwICogMTAwMFxuICAgICAgfTtcblxuICAgICAgdmFyIGZ1dHVyZSA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgZnV0dXJlICs9IGZha2VyLnJhbmRvbS5udW1iZXIocmFuZ2UpOyAvLyBzb21lIHRpbWUgZnJvbSBub3cgdG8gTiB5ZWFycyBsYXRlciwgaW4gbWlsbGlzZWNvbmRzXG4gICAgICBkYXRlLnNldFRpbWUoZnV0dXJlKTtcblxuICAgICAgcmV0dXJuIGRhdGU7XG4gIH07XG5cbiAgc2VsZi5iZXR3ZWVuID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gICAgICB2YXIgZnJvbU1pbGxpID0gRGF0ZS5wYXJzZShmcm9tKTtcbiAgICAgIHZhciBkYXRlT2Zmc2V0ID0gZmFrZXIucmFuZG9tLm51bWJlcihEYXRlLnBhcnNlKHRvKSAtIGZyb21NaWxsaSk7XG5cbiAgICAgIHZhciBuZXdEYXRlID0gbmV3IERhdGUoZnJvbU1pbGxpICsgZGF0ZU9mZnNldCk7XG5cbiAgICAgIHJldHVybiBuZXdEYXRlO1xuICB9O1xuXG4gIHNlbGYucmVjZW50ID0gZnVuY3Rpb24gKGRheXMpIHtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIHZhciByYW5nZSA9IHtcbiAgICAgICAgbWluOiAxMDAwLFxuICAgICAgICBtYXg6IChkYXlzIHx8IDEpICogMjQgKiAzNjAwICogMTAwMFxuICAgICAgfTtcblxuICAgICAgdmFyIGZ1dHVyZSA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgZnV0dXJlIC09IGZha2VyLnJhbmRvbS5udW1iZXIocmFuZ2UpOyAvLyBzb21lIHRpbWUgZnJvbSBub3cgdG8gTiBkYXlzIGFnbywgaW4gbWlsbGlzZWNvbmRzXG4gICAgICBkYXRlLnNldFRpbWUoZnV0dXJlKTtcblxuICAgICAgcmV0dXJuIGRhdGU7XG4gIH07XG5cbiAgc2VsZi5tb250aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgdmFyIHR5cGUgPSAnd2lkZSc7XG4gICAgICBpZiAob3B0aW9ucy5hYmJyKSB7XG4gICAgICAgICAgdHlwZSA9ICdhYmJyJztcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmNvbnRleHQgJiYgdHlwZW9mIGZha2VyLmRlZmluaXRpb25zLmRhdGUubW9udGhbdHlwZSArICdfY29udGV4dCddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHR5cGUgKz0gJ19jb250ZXh0JztcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZSA9IGZha2VyLmRlZmluaXRpb25zLmRhdGUubW9udGhbdHlwZV07XG5cbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KHNvdXJjZSk7XG4gIH07XG5cbiAgc2VsZi53ZWVrZGF5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICB2YXIgdHlwZSA9ICd3aWRlJztcbiAgICAgIGlmIChvcHRpb25zLmFiYnIpIHtcbiAgICAgICAgICB0eXBlID0gJ2FiYnInO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuY29udGV4dCAmJiB0eXBlb2YgZmFrZXIuZGVmaW5pdGlvbnMuZGF0ZS53ZWVrZGF5W3R5cGUgKyAnX2NvbnRleHQnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0eXBlICs9ICdfY29udGV4dCc7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2UgPSBmYWtlci5kZWZpbml0aW9ucy5kYXRlLndlZWtkYXlbdHlwZV07XG5cbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KHNvdXJjZSk7XG4gIH07XG4gIFxuICByZXR1cm4gc2VsZjtcbiAgXG59O1xuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IF9EYXRlOyIsIi8qXG4gIGZha2UuanMgLSBnZW5lcmF0b3IgbWV0aG9kIGZvciBjb21iaW5pbmcgZmFrZXIgbWV0aG9kcyBiYXNlZCBvbiBzdHJpbmcgaW5wdXRcblxuKi9cblxuZnVuY3Rpb24gRmFrZSAoZmFrZXIpIHtcbiAgXG4gIHRoaXMuZmFrZSA9IGZ1bmN0aW9uIGZha2UgKHN0cikge1xuICAgIC8vIHNldHVwIGRlZmF1bHQgcmVzcG9uc2UgYXMgZW1wdHkgc3RyaW5nXG4gICAgdmFyIHJlcyA9ICcnO1xuXG4gICAgLy8gaWYgaW5jb21pbmcgc3RyIHBhcmFtZXRlciBpcyBub3QgcHJvdmlkZWQsIHJldHVybiBlcnJvciBtZXNzYWdlXG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnIHx8IHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlcyA9ICdzdHJpbmcgcGFyYW1ldGVyIGlzIHJlcXVpcmVkISc7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIGZpbmQgZmlyc3QgbWF0Y2hpbmcge3sgYW5kIH19XG4gICAgdmFyIHN0YXJ0ID0gc3RyLnNlYXJjaCgne3snKTtcbiAgICB2YXIgZW5kID0gc3RyLnNlYXJjaCgnfX0nKTtcblxuICAgIC8vIGlmIG5vIHt7IGFuZCB9fSBpcyBmb3VuZCwgd2UgYXJlIGRvbmVcbiAgICBpZiAoc3RhcnQgPT09IC0xICYmIGVuZCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coJ2F0dGVtcHRpbmcgdG8gcGFyc2UnLCBzdHIpO1xuXG4gICAgLy8gZXh0cmFjdCBtZXRob2QgbmFtZSBmcm9tIGJldHdlZW4gdGhlIHt7IH19IHRoYXQgd2UgZm91bmRcbiAgICAvLyBmb3IgZXhhbXBsZToge3tuYW1lLmZpcnN0TmFtZX19XG4gICAgdmFyIG1ldGhvZCA9IHN0ci5zdWJzdHIoc3RhcnQgKyAyLCAgZW5kIC0gc3RhcnQgLSAyKTtcbiAgICBtZXRob2QgPSBtZXRob2QucmVwbGFjZSgnfX0nLCAnJyk7XG4gICAgbWV0aG9kID0gbWV0aG9kLnJlcGxhY2UoJ3t7JywgJycpO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ21ldGhvZCcsIG1ldGhvZClcblxuICAgIC8vIHNwbGl0IHRoZSBtZXRob2QgaW50byBtb2R1bGUgYW5kIGZ1bmN0aW9uXG4gICAgdmFyIHBhcnRzID0gbWV0aG9kLnNwbGl0KCcuJyk7XG5cbiAgICBpZiAodHlwZW9mIGZha2VyW3BhcnRzWzBdXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1vZHVsZTogJyArIHBhcnRzWzBdKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZha2VyW3BhcnRzWzBdXVtwYXJ0c1sxXV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2Q6ICcgKyBwYXJ0c1swXSArIFwiLlwiICsgcGFydHNbMV0pO1xuICAgIH1cblxuICAgIC8vIGFzc2lnbiB0aGUgZnVuY3Rpb24gZnJvbSB0aGUgbW9kdWxlLmZ1bmN0aW9uIG5hbWVzcGFjZVxuICAgIHZhciBmbiA9IGZha2VyW3BhcnRzWzBdXVtwYXJ0c1sxXV07XG5cbiAgICAvLyByZXBsYWNlIHRoZSBmb3VuZCB0YWcgd2l0aCB0aGUgcmV0dXJuZWQgZmFrZSB2YWx1ZVxuICAgIHJlcyA9IHN0ci5yZXBsYWNlKCd7eycgKyBtZXRob2QgKyAnfX0nLCBmbigpKTtcblxuICAgIC8vIHJldHVybiB0aGUgcmVzcG9uc2UgcmVjdXJzaXZlbHkgdW50aWwgd2UgYXJlIGRvbmUgZmluZGluZyBhbGwgdGFnc1xuICAgIHJldHVybiBmYWtlKHJlcyk7ICAgIFxuICB9XG4gIFxuICByZXR1cm4gdGhpcztcbiAgXG4gIFxufVxuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IEZha2U7IiwidmFyIEZpbmFuY2UgPSBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgdmFyIEhlbHBlcnMgPSBmYWtlci5oZWxwZXJzLFxuICAgICAgc2VsZiA9IHRoaXM7XG5cbiAgc2VsZi5hY2NvdW50ID0gZnVuY3Rpb24gKGxlbmd0aCkge1xuXG4gICAgICBsZW5ndGggPSBsZW5ndGggfHwgODtcblxuICAgICAgdmFyIHRlbXBsYXRlID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlICsgJyMnO1xuICAgICAgfVxuICAgICAgbGVuZ3RoID0gbnVsbDtcbiAgICAgIHJldHVybiBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKHRlbXBsYXRlKTtcbiAgfVxuXG4gIHNlbGYuYWNjb3VudE5hbWUgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgIHJldHVybiBbSGVscGVycy5yYW5kb21pemUoZmFrZXIuZGVmaW5pdGlvbnMuZmluYW5jZS5hY2NvdW50X3R5cGUpLCAnQWNjb3VudCddLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHNlbGYubWFzayA9IGZ1bmN0aW9uIChsZW5ndGgsIHBhcmVucywgZWxpcHNpcykge1xuXG5cbiAgICAgIC8vc2V0IGRlZmF1bHRzXG4gICAgICBsZW5ndGggPSAobGVuZ3RoID09IDAgfHwgIWxlbmd0aCB8fCB0eXBlb2YgbGVuZ3RoID09ICd1bmRlZmluZWQnKSA/IDQgOiBsZW5ndGg7XG4gICAgICBwYXJlbnMgPSAocGFyZW5zID09PSBudWxsKSA/IHRydWUgOiBwYXJlbnM7XG4gICAgICBlbGlwc2lzID0gKGVsaXBzaXMgPT09IG51bGwpID8gdHJ1ZSA6IGVsaXBzaXM7XG5cbiAgICAgIC8vY3JlYXRlIGEgdGVtcGxhdGUgZm9yIGxlbmd0aFxuICAgICAgdmFyIHRlbXBsYXRlID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlICsgJyMnO1xuICAgICAgfVxuXG4gICAgICAvL3ByZWZpeCB3aXRoIGVsaXBzaXNcbiAgICAgIHRlbXBsYXRlID0gKGVsaXBzaXMpID8gWycuLi4nLCB0ZW1wbGF0ZV0uam9pbignJykgOiB0ZW1wbGF0ZTtcblxuICAgICAgdGVtcGxhdGUgPSAocGFyZW5zKSA/IFsnKCcsIHRlbXBsYXRlLCAnKSddLmpvaW4oJycpIDogdGVtcGxhdGU7XG5cbiAgICAgIC8vZ2VuZXJhdGUgcmFuZG9tIG51bWJlcnNcbiAgICAgIHRlbXBsYXRlID0gSGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcih0ZW1wbGF0ZSk7XG5cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcblxuICB9XG5cbiAgLy9taW4gYW5kIG1heCB0YWtlIGluIG1pbmltdW0gYW5kIG1heGltdW0gYW1vdW50cywgZGVjIGlzIHRoZSBkZWNpbWFsIHBsYWNlIHlvdSB3YW50IHJvdW5kZWQgdG8sIHN5bWJvbCBpcyAkLCDigqwsIMKjLCBldGNcbiAgLy9OT1RFOiB0aGlzIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLCBpZiB5b3Ugd2FudCBhIG51bWJlciB1c2UgcGFyc2VGbG9hdCBhbmQgbm8gc3ltYm9sXG5cbiAgc2VsZi5hbW91bnQgPSBmdW5jdGlvbiAobWluLCBtYXgsIGRlYywgc3ltYm9sKSB7XG5cbiAgICAgIG1pbiA9IG1pbiB8fCAwO1xuICAgICAgbWF4ID0gbWF4IHx8IDEwMDA7XG4gICAgICBkZWMgPSBkZWMgfHwgMjtcbiAgICAgIHN5bWJvbCA9IHN5bWJvbCB8fCAnJztcblxuICAgICAgcmV0dXJuIHN5bWJvbCArIChNYXRoLnJvdW5kKChNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW4pICogTWF0aC5wb3coMTAsIGRlYykpIC8gTWF0aC5wb3coMTAsIGRlYykpLnRvRml4ZWQoZGVjKTtcblxuICB9XG5cbiAgc2VsZi50cmFuc2FjdGlvblR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSGVscGVycy5yYW5kb21pemUoZmFrZXIuZGVmaW5pdGlvbnMuZmluYW5jZS50cmFuc2FjdGlvbl90eXBlKTtcbiAgfVxuXG4gIHNlbGYuY3VycmVuY3lDb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5vYmplY3RFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmZpbmFuY2UuY3VycmVuY3kpWydjb2RlJ107XG4gIH1cblxuICBzZWxmLmN1cnJlbmN5TmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20ub2JqZWN0RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5maW5hbmNlLmN1cnJlbmN5LCAna2V5Jyk7XG4gIH1cblxuICBzZWxmLmN1cnJlbmN5U3ltYm9sID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN5bWJvbDtcblxuICAgICAgd2hpbGUgKCFzeW1ib2wpIHtcbiAgICAgICAgICBzeW1ib2wgPSBmYWtlci5yYW5kb20ub2JqZWN0RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5maW5hbmNlLmN1cnJlbmN5KVsnc3ltYm9sJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gRmluYW5jZTsiLCJ2YXIgSGFja2VyID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgXG4gIHNlbGYuYWJicmV2aWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmhhY2tlci5hYmJyZXZpYXRpb24pO1xuICB9O1xuXG4gIHNlbGYuYWRqZWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmhhY2tlci5hZGplY3RpdmUpO1xuICB9O1xuXG4gIHNlbGYubm91biA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5oYWNrZXIubm91bik7XG4gIH07XG5cbiAgc2VsZi52ZXJiID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmhhY2tlci52ZXJiKTtcbiAgfTtcblxuICBzZWxmLmluZ3ZlcmIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaGFja2VyLmluZ3ZlcmIpO1xuICB9O1xuXG4gIHNlbGYucGhyYXNlID0gZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBhYmJyZXZpYXRpb246IHNlbGYuYWJicmV2aWF0aW9uKCksXG4gICAgICBhZGplY3RpdmU6IHNlbGYuYWRqZWN0aXZlKCksXG4gICAgICBpbmd2ZXJiOiBzZWxmLmluZ3ZlcmIoKSxcbiAgICAgIG5vdW46IHNlbGYubm91bigpLFxuICAgICAgdmVyYjogc2VsZi52ZXJiKClcbiAgICB9O1xuXG4gICAgdmFyIHBocmFzZSA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoWyBcIklmIHdlIHt7dmVyYn19IHRoZSB7e25vdW59fSwgd2UgY2FuIGdldCB0byB0aGUge3thYmJyZXZpYXRpb259fSB7e25vdW59fSB0aHJvdWdoIHRoZSB7e2FkamVjdGl2ZX19IHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0hXCIsXG4gICAgICBcIldlIG5lZWQgdG8ge3t2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIixcbiAgICAgIFwiVHJ5IHRvIHt7dmVyYn19IHRoZSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19LCBtYXliZSBpdCB3aWxsIHt7dmVyYn19IHRoZSB7e2FkamVjdGl2ZX19IHt7bm91bn19IVwiLFxuICAgICAgXCJZb3UgY2FuJ3Qge3t2ZXJifX0gdGhlIHt7bm91bn19IHdpdGhvdXQge3tpbmd2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIixcbiAgICAgIFwiVXNlIHRoZSB7e2FkamVjdGl2ZX19IHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0sIHRoZW4geW91IGNhbiB7e3ZlcmJ9fSB0aGUge3thZGplY3RpdmV9fSB7e25vdW59fSFcIixcbiAgICAgIFwiVGhlIHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0gaXMgZG93biwge3t2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3tub3VufX0gc28gd2UgY2FuIHt7dmVyYn19IHRoZSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19IVwiLFxuICAgICAgXCJ7e2luZ3ZlcmJ9fSB0aGUge3tub3VufX0gd29uJ3QgZG8gYW55dGhpbmcsIHdlIG5lZWQgdG8ge3t2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIixcbiAgICAgIFwiSSdsbCB7e3ZlcmJ9fSB0aGUge3thZGplY3RpdmV9fSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19LCB0aGF0IHNob3VsZCB7e25vdW59fSB0aGUge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIlxuICAgXSk7XG5cbiAgIHJldHVybiBmYWtlci5oZWxwZXJzLm11c3RhY2hlKHBocmFzZSwgZGF0YSk7XG5cbiAgfTtcbiAgXG4gIHJldHVybiBzZWxmO1xufTtcblxubW9kdWxlWydleHBvcnRzJ10gPSBIYWNrZXI7IiwidmFyIEhlbHBlcnMgPSBmdW5jdGlvbiAoZmFrZXIpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gYmFja3dvcmQtY29tcGF0aWJpbGl0eVxuICBzZWxmLnJhbmRvbWl6ZSA9IGZ1bmN0aW9uIChhcnJheSkge1xuICAgICAgYXJyYXkgPSBhcnJheSB8fCBbXCJhXCIsIFwiYlwiLCBcImNcIl07XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChhcnJheSk7XG4gIH07XG5cbiAgLy8gc2x1Z2lmaWVzIHN0cmluZ1xuICBzZWxmLnNsdWdpZnkgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgfHwgXCJcIjtcbiAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvIC9nLCAnLScpLnJlcGxhY2UoL1teXFx3XFwuXFwtXSsvZywgJycpO1xuICB9O1xuXG4gIC8vIHBhcnNlcyBzdHJpbmcgZm9yIGEgc3ltYm9sIGFuZCByZXBsYWNlIGl0IHdpdGggYSByYW5kb20gbnVtYmVyIGZyb20gMS0xMFxuICBzZWxmLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyID0gZnVuY3Rpb24gKHN0cmluZywgc3ltYm9sKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgfHwgXCJcIjtcbiAgICAgIC8vIGRlZmF1bHQgc3ltYm9sIGlzICcjJ1xuICAgICAgaWYgKHN5bWJvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3ltYm9sID0gJyMnO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RyID0gJyc7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChzdHJpbmcuY2hhckF0KGkpID09IHN5bWJvbCkge1xuICAgICAgICAgICAgICBzdHIgKz0gZmFrZXIucmFuZG9tLm51bWJlcig5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdHIgKz0gc3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIC8vIHBhcnNlcyBzdHJpbmcgZm9yIHN5bWJvbHMgKG51bWJlcnMgb3IgbGV0dGVycykgYW5kIHJlcGxhY2VzIHRoZW0gYXBwcm9wcmlhdGVseVxuICBzZWxmLnJlcGxhY2VTeW1ib2xzID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nIHx8IFwiXCI7XG4gIFx0dmFyIGFscGhhID0gWydBJywnQicsJ0MnLCdEJywnRScsJ0YnLCdHJywnSCcsJ0knLCdKJywnSycsJ0wnLCdNJywnTicsJ08nLCdQJywnUScsJ1InLCdTJywnVCcsJ1UnLCdWJywnVycsJ1gnLCdZJywnWiddXG4gICAgICB2YXIgc3RyID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHN0cmluZy5jaGFyQXQoaSkgPT0gXCIjXCIpIHtcbiAgICAgICAgICAgICAgc3RyICs9IGZha2VyLnJhbmRvbS5udW1iZXIoOSk7XG4gIFx0XHR9IGVsc2UgaWYgKHN0cmluZy5jaGFyQXQoaSkgPT0gXCI/XCIpIHtcbiAgXHRcdFx0c3RyICs9IGFscGhhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFscGhhLmxlbmd0aCldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0ciArPSBzdHJpbmcuY2hhckF0KGkpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgLy8gdGFrZXMgYW4gYXJyYXkgYW5kIHJldHVybnMgaXQgcmFuZG9taXplZFxuICBzZWxmLnNodWZmbGUgPSBmdW5jdGlvbiAobykge1xuICAgICAgbyA9IG8gfHwgW1wiYVwiLCBcImJcIiwgXCJjXCJdO1xuICAgICAgZm9yICh2YXIgaiwgeCwgaSA9IG8ubGVuZ3RoLTE7IGk7IGogPSBmYWtlci5yYW5kb20ubnVtYmVyKGkpLCB4ID0gb1stLWldLCBvW2ldID0gb1tqXSwgb1tqXSA9IHgpO1xuICAgICAgcmV0dXJuIG87XG4gIH07XG5cbiAgc2VsZi5tdXN0YWNoZSA9IGZ1bmN0aW9uIChzdHIsIGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgZm9yKHZhciBwIGluIGRhdGEpIHtcbiAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJ3t7JyArIHAgKyAnfX0nLCAnZycpXG4gICAgICBzdHIgPSBzdHIucmVwbGFjZShyZSwgZGF0YVtwXSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgc2VsZi5jcmVhdGVDYXJkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBcIm5hbWVcIjogZmFrZXIubmFtZS5maW5kTmFtZSgpLFxuICAgICAgICAgIFwidXNlcm5hbWVcIjogZmFrZXIuaW50ZXJuZXQudXNlck5hbWUoKSxcbiAgICAgICAgICBcImVtYWlsXCI6IGZha2VyLmludGVybmV0LmVtYWlsKCksXG4gICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgXCJzdHJlZXRBXCI6IGZha2VyLmFkZHJlc3Muc3RyZWV0TmFtZSgpLFxuICAgICAgICAgICAgICBcInN0cmVldEJcIjogZmFrZXIuYWRkcmVzcy5zdHJlZXRBZGRyZXNzKCksXG4gICAgICAgICAgICAgIFwic3RyZWV0Q1wiOiBmYWtlci5hZGRyZXNzLnN0cmVldEFkZHJlc3ModHJ1ZSksXG4gICAgICAgICAgICAgIFwic3RyZWV0RFwiOiBmYWtlci5hZGRyZXNzLnNlY29uZGFyeUFkZHJlc3MoKSxcbiAgICAgICAgICAgICAgXCJjaXR5XCI6IGZha2VyLmFkZHJlc3MuY2l0eSgpLFxuICAgICAgICAgICAgICBcInN0YXRlXCI6IGZha2VyLmFkZHJlc3Muc3RhdGUoKSxcbiAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IGZha2VyLmFkZHJlc3MuY291bnRyeSgpLFxuICAgICAgICAgICAgICBcInppcGNvZGVcIjogZmFrZXIuYWRkcmVzcy56aXBDb2RlKCksXG4gICAgICAgICAgICAgIFwiZ2VvXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibGF0XCI6IGZha2VyLmFkZHJlc3MubGF0aXR1ZGUoKSxcbiAgICAgICAgICAgICAgICAgIFwibG5nXCI6IGZha2VyLmFkZHJlc3MubG9uZ2l0dWRlKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwaG9uZVwiOiBmYWtlci5waG9uZS5waG9uZU51bWJlcigpLFxuICAgICAgICAgIFwid2Vic2l0ZVwiOiBmYWtlci5pbnRlcm5ldC5kb21haW5OYW1lKCksXG4gICAgICAgICAgXCJjb21wYW55XCI6IHtcbiAgICAgICAgICAgICAgXCJuYW1lXCI6IGZha2VyLmNvbXBhbnkuY29tcGFueU5hbWUoKSxcbiAgICAgICAgICAgICAgXCJjYXRjaFBocmFzZVwiOiBmYWtlci5jb21wYW55LmNhdGNoUGhyYXNlKCksXG4gICAgICAgICAgICAgIFwiYnNcIjogZmFrZXIuY29tcGFueS5icygpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvc3RzXCI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgXCJ3b3Jkc1wiOiBmYWtlci5sb3JlbS53b3JkcygpLFxuICAgICAgICAgICAgICAgICAgXCJzZW50ZW5jZVwiOiBmYWtlci5sb3JlbS5zZW50ZW5jZSgpLFxuICAgICAgICAgICAgICAgICAgXCJzZW50ZW5jZXNcIjogZmFrZXIubG9yZW0uc2VudGVuY2VzKCksXG4gICAgICAgICAgICAgICAgICBcInBhcmFncmFwaFwiOiBmYWtlci5sb3JlbS5wYXJhZ3JhcGgoKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBcIndvcmRzXCI6IGZha2VyLmxvcmVtLndvcmRzKCksXG4gICAgICAgICAgICAgICAgICBcInNlbnRlbmNlXCI6IGZha2VyLmxvcmVtLnNlbnRlbmNlKCksXG4gICAgICAgICAgICAgICAgICBcInNlbnRlbmNlc1wiOiBmYWtlci5sb3JlbS5zZW50ZW5jZXMoKSxcbiAgICAgICAgICAgICAgICAgIFwicGFyYWdyYXBoXCI6IGZha2VyLmxvcmVtLnBhcmFncmFwaCgpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFwid29yZHNcIjogZmFrZXIubG9yZW0ud29yZHMoKSxcbiAgICAgICAgICAgICAgICAgIFwic2VudGVuY2VcIjogZmFrZXIubG9yZW0uc2VudGVuY2UoKSxcbiAgICAgICAgICAgICAgICAgIFwic2VudGVuY2VzXCI6IGZha2VyLmxvcmVtLnNlbnRlbmNlcygpLFxuICAgICAgICAgICAgICAgICAgXCJwYXJhZ3JhcGhcIjogZmFrZXIubG9yZW0ucGFyYWdyYXBoKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJhY2NvdW50SGlzdG9yeVwiOiBbZmFrZXIuaGVscGVycy5jcmVhdGVUcmFuc2FjdGlvbigpLCBmYWtlci5oZWxwZXJzLmNyZWF0ZVRyYW5zYWN0aW9uKCksIGZha2VyLmhlbHBlcnMuY3JlYXRlVHJhbnNhY3Rpb24oKV1cbiAgICAgIH07XG4gIH07XG5cbiAgc2VsZi5jb250ZXh0dWFsQ2FyZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmFtZSA9IGZha2VyLm5hbWUuZmlyc3ROYW1lKCksXG4gICAgICAgIHVzZXJOYW1lID0gZmFrZXIuaW50ZXJuZXQudXNlck5hbWUobmFtZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgXCJuYW1lXCI6IG5hbWUsXG4gICAgICAgIFwidXNlcm5hbWVcIjogdXNlck5hbWUsXG4gICAgICAgIFwiYXZhdGFyXCI6IGZha2VyLmludGVybmV0LmF2YXRhcigpLFxuICAgICAgICBcImVtYWlsXCI6IGZha2VyLmludGVybmV0LmVtYWlsKHVzZXJOYW1lKSxcbiAgICAgICAgXCJkb2JcIjogZmFrZXIuZGF0ZS5wYXN0KDUwLCBuZXcgRGF0ZShcIlNhdCBTZXAgMjAgMTk5MiAyMTozNTowMiBHTVQrMDIwMCAoQ0VTVClcIikpLFxuICAgICAgICBcInBob25lXCI6IGZha2VyLnBob25lLnBob25lTnVtYmVyKCksXG4gICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICBcInN0cmVldFwiOiBmYWtlci5hZGRyZXNzLnN0cmVldE5hbWUodHJ1ZSksXG4gICAgICAgICAgICBcInN1aXRlXCI6IGZha2VyLmFkZHJlc3Muc2Vjb25kYXJ5QWRkcmVzcygpLFxuICAgICAgICAgICAgXCJjaXR5XCI6IGZha2VyLmFkZHJlc3MuY2l0eSgpLFxuICAgICAgICAgICAgXCJ6aXBjb2RlXCI6IGZha2VyLmFkZHJlc3MuemlwQ29kZSgpLFxuICAgICAgICAgICAgXCJnZW9cIjoge1xuICAgICAgICAgICAgICAgIFwibGF0XCI6IGZha2VyLmFkZHJlc3MubGF0aXR1ZGUoKSxcbiAgICAgICAgICAgICAgICBcImxuZ1wiOiBmYWtlci5hZGRyZXNzLmxvbmdpdHVkZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vic2l0ZVwiOiBmYWtlci5pbnRlcm5ldC5kb21haW5OYW1lKCksXG4gICAgICAgIFwiY29tcGFueVwiOiB7XG4gICAgICAgICAgICBcIm5hbWVcIjogZmFrZXIuY29tcGFueS5jb21wYW55TmFtZSgpLFxuICAgICAgICAgICAgXCJjYXRjaFBocmFzZVwiOiBmYWtlci5jb21wYW55LmNhdGNoUGhyYXNlKCksXG4gICAgICAgICAgICBcImJzXCI6IGZha2VyLmNvbXBhbnkuYnMoKVxuICAgICAgICB9XG4gICAgfTtcbiAgfTtcblxuXG4gIHNlbGYudXNlckNhcmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAgIFwibmFtZVwiOiBmYWtlci5uYW1lLmZpbmROYW1lKCksXG4gICAgICAgICAgXCJ1c2VybmFtZVwiOiBmYWtlci5pbnRlcm5ldC51c2VyTmFtZSgpLFxuICAgICAgICAgIFwiZW1haWxcIjogZmFrZXIuaW50ZXJuZXQuZW1haWwoKSxcbiAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICBcInN0cmVldFwiOiBmYWtlci5hZGRyZXNzLnN0cmVldE5hbWUodHJ1ZSksXG4gICAgICAgICAgICAgIFwic3VpdGVcIjogZmFrZXIuYWRkcmVzcy5zZWNvbmRhcnlBZGRyZXNzKCksXG4gICAgICAgICAgICAgIFwiY2l0eVwiOiBmYWtlci5hZGRyZXNzLmNpdHkoKSxcbiAgICAgICAgICAgICAgXCJ6aXBjb2RlXCI6IGZha2VyLmFkZHJlc3MuemlwQ29kZSgpLFxuICAgICAgICAgICAgICBcImdlb1wiOiB7XG4gICAgICAgICAgICAgICAgICBcImxhdFwiOiBmYWtlci5hZGRyZXNzLmxhdGl0dWRlKCksXG4gICAgICAgICAgICAgICAgICBcImxuZ1wiOiBmYWtlci5hZGRyZXNzLmxvbmdpdHVkZSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGhvbmVcIjogZmFrZXIucGhvbmUucGhvbmVOdW1iZXIoKSxcbiAgICAgICAgICBcIndlYnNpdGVcIjogZmFrZXIuaW50ZXJuZXQuZG9tYWluTmFtZSgpLFxuICAgICAgICAgIFwiY29tcGFueVwiOiB7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiBmYWtlci5jb21wYW55LmNvbXBhbnlOYW1lKCksXG4gICAgICAgICAgICAgIFwiY2F0Y2hQaHJhc2VcIjogZmFrZXIuY29tcGFueS5jYXRjaFBocmFzZSgpLFxuICAgICAgICAgICAgICBcImJzXCI6IGZha2VyLmNvbXBhbnkuYnMoKVxuICAgICAgICAgIH1cbiAgICAgIH07XG4gIH07XG5cbiAgc2VsZi5jcmVhdGVUcmFuc2FjdGlvbiA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwiYW1vdW50XCIgOiBmYWtlci5maW5hbmNlLmFtb3VudCgpLFxuICAgICAgXCJkYXRlXCIgOiBuZXcgRGF0ZSgyMDEyLCAxLCAyKSwgIC8vVE9ETzogYWRkIGEgcmFuZ2VkIGRhdGUgbWV0aG9kXG4gICAgICBcImJ1c2luZXNzXCI6IGZha2VyLmNvbXBhbnkuY29tcGFueU5hbWUoKSxcbiAgICAgIFwibmFtZVwiOiBbZmFrZXIuZmluYW5jZS5hY2NvdW50TmFtZSgpLCBmYWtlci5maW5hbmNlLm1hc2soKV0uam9pbignICcpLFxuICAgICAgXCJ0eXBlXCIgOiBzZWxmLnJhbmRvbWl6ZShmYWtlci5kZWZpbml0aW9ucy5maW5hbmNlLnRyYW5zYWN0aW9uX3R5cGUpLFxuICAgICAgXCJhY2NvdW50XCIgOiBmYWtlci5maW5hbmNlLmFjY291bnQoKVxuICAgIH07XG4gIH07XG4gIFxuICByZXR1cm4gc2VsZjtcbiAgXG59O1xuXG5cbi8qXG5TdHJpbmcucHJvdG90eXBlLmNhcGl0YWxpemUgPSBmdW5jdGlvbiAoKSB7IC8vdjEuMFxuICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL1xcdysvZywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIGEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBhLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xufTtcbiovXG5cbm1vZHVsZVsnZXhwb3J0cyddID0gSGVscGVyczsiLCJ2YXIgSW1hZ2UgPSBmdW5jdGlvbiAoZmFrZXIpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgc2VsZi5pbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2F0ZWdvcmllcyA9IFtcImFic3RyYWN0XCIsIFwiYW5pbWFsc1wiLCBcImJ1c2luZXNzXCIsIFwiY2F0c1wiLCBcImNpdHlcIiwgXCJmb29kXCIsIFwibmlnaHRsaWZlXCIsIFwiZmFzaGlvblwiLCBcInBlb3BsZVwiLCBcIm5hdHVyZVwiLCBcInNwb3J0c1wiLCBcInRlY2huaWNzXCIsIFwidHJhbnNwb3J0XCJdO1xuICAgIHJldHVybiBzZWxmW2Zha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoY2F0ZWdvcmllcyldKCk7XG4gIH07XG4gIHNlbGYuYXZhdGFyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5pbnRlcm5ldC5hdmF0YXIoKTtcbiAgfTtcbiAgc2VsZi5pbWFnZVVybCA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBjYXRlZ29yeSkge1xuICAgICAgdmFyIHdpZHRoID0gd2lkdGggfHwgNjQwO1xuICAgICAgdmFyIGhlaWdodCA9IGhlaWdodCB8fCA0ODA7XG5cbiAgICAgIHZhciB1cmwgPSdodHRwOi8vbG9yZW1waXhlbC5jb20vJyArIHdpZHRoICsgJy8nICsgaGVpZ2h0O1xuICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdXJsICs9ICcvJyArIGNhdGVnb3J5O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVybDtcbiAgfTtcbiAgc2VsZi5hYnN0cmFjdCA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdhYnN0cmFjdCcpO1xuICB9O1xuICBzZWxmLmFuaW1hbHMgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnYW5pbWFscycpO1xuICB9O1xuICBzZWxmLmJ1c2luZXNzID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ2J1c2luZXNzJyk7XG4gIH07XG4gIHNlbGYuY2F0cyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdjYXRzJyk7XG4gIH07XG4gIHNlbGYuY2l0eSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdjaXR5Jyk7XG4gIH07XG4gIHNlbGYuZm9vZCA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdmb29kJyk7XG4gIH07XG4gIHNlbGYubmlnaHRsaWZlID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ25pZ2h0bGlmZScpO1xuICB9O1xuICBzZWxmLmZhc2hpb24gPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnZmFzaGlvbicpO1xuICB9O1xuICBzZWxmLnBlb3BsZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdwZW9wbGUnKTtcbiAgfTtcbiAgc2VsZi5uYXR1cmUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnbmF0dXJlJyk7XG4gIH07XG4gIHNlbGYuc3BvcnRzID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ3Nwb3J0cycpO1xuICB9O1xuICBzZWxmLnRlY2huaWNzID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ3RlY2huaWNzJyk7XG4gIH07XG4gIHNlbGYudHJhbnNwb3J0ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ3RyYW5zcG9ydCcpO1xuICB9ICBcbn1cblxubW9kdWxlW1wiZXhwb3J0c1wiXSA9IEltYWdlOyIsIi8qXG5cbiAgIHRoaXMgaW5kZXguanMgZmlsZSBpcyB1c2VkIGZvciBpbmNsdWRpbmcgdGhlIGZha2VyIGxpYnJhcnkgYXMgYSBDb21tb25KUyBtb2R1bGUsIGluc3RlYWQgb2YgYSBidW5kbGVcblxuICAgeW91IGNhbiBpbmNsdWRlIHRoZSBmYWtlciBsaWJyYXJ5IGludG8geW91ciBleGlzdGluZyBub2RlLmpzIGFwcGxpY2F0aW9uIGJ5IHJlcXVpcmluZyB0aGUgZW50aXJlIC9mYWtlciBkaXJlY3RvcnlcblxuICAgIHZhciBmYWtlciA9IHJlcXVpcmUoLi9mYWtlcik7XG4gICAgdmFyIHJhbmRvbU5hbWUgPSBmYWtlci5uYW1lLmZpbmROYW1lKCk7XG5cbiAgIHlvdSBjYW4gYWxzbyBzaW1wbHkgaW5jbHVkZSB0aGUgXCJmYWtlci5qc1wiIGZpbGUgd2hpY2ggaXMgdGhlIGF1dG8tZ2VuZXJhdGVkIGJ1bmRsZWQgdmVyc2lvbiBvZiB0aGUgZmFrZXIgbGlicmFyeVxuXG4gICAgdmFyIGZha2VyID0gcmVxdWlyZSguL2N1c3RvbUFwcFBhdGgvZmFrZXIpO1xuICAgIHZhciByYW5kb21OYW1lID0gZmFrZXIubmFtZS5maW5kTmFtZSgpO1xuXG5cbiAgaWYgeW91IHBsYW4gb24gbW9kaWZ5aW5nIHRoZSBmYWtlciBsaWJyYXJ5IHlvdSBzaG91bGQgYmUgcGVyZm9ybWluZyB5b3VyIGNoYW5nZXMgaW4gdGhlIC9saWIvIGRpcmVjdG9yeVxuXG4qL1xuXG5mdW5jdGlvbiBGYWtlciAob3B0cykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAvLyBhc3NpZ24gb3B0aW9uc1xuICB2YXIgbG9jYWxlcyA9IHNlbGYubG9jYWxlcyB8fCBvcHRzLmxvY2FsZXMgfHwge307XG4gIHZhciBsb2NhbGUgPSBzZWxmLmxvY2FsZSB8fCBvcHRzLmxvY2FsZSB8fCBcImVuXCI7XG4gIHZhciBsb2NhbGVGYWxsYmFjayA9IHNlbGYubG9jYWxlRmFsbGJhY2sgfHwgb3B0cy5sb2NhbGVGYWxsYmFjayB8fCBcImVuXCI7XG5cbiAgc2VsZi5sb2NhbGVzID0gbG9jYWxlcztcbiAgc2VsZi5sb2NhbGUgPSBsb2NhbGU7XG4gIHNlbGYubG9jYWxlRmFsbGJhY2sgPSBsb2NhbGVGYWxsYmFjaztcblxuICBzZWxmLmRlZmluaXRpb25zID0ge307XG5cbiAgdmFyIEZha2UgPSByZXF1aXJlKCcuL2Zha2UnKTtcbiAgc2VsZi5mYWtlID0gbmV3IEZha2Uoc2VsZikuZmFrZTtcblxuICB2YXIgUmFuZG9tID0gcmVxdWlyZSgnLi9yYW5kb20nKTtcbiAgc2VsZi5yYW5kb20gPSBuZXcgUmFuZG9tKHNlbGYpO1xuICAvLyBzZWxmLnJhbmRvbSA9IHJlcXVpcmUoJy4vcmFuZG9tJyk7XG5cbiAgdmFyIEhlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcbiAgc2VsZi5oZWxwZXJzID0gbmV3IEhlbHBlcnMoc2VsZik7XG5cbiAgdmFyIE5hbWUgPSByZXF1aXJlKCcuL25hbWUnKTtcbiAgc2VsZi5uYW1lID0gbmV3IE5hbWUoc2VsZik7XG4gIC8vIHNlbGYubmFtZSA9IHJlcXVpcmUoJy4vbmFtZScpO1xuXG4gIHZhciBBZGRyZXNzID0gcmVxdWlyZSgnLi9hZGRyZXNzJyk7XG4gIHNlbGYuYWRkcmVzcyA9IG5ldyBBZGRyZXNzKHNlbGYpO1xuXG4gIHZhciBDb21wYW55ID0gcmVxdWlyZSgnLi9jb21wYW55Jyk7XG4gIHNlbGYuY29tcGFueSA9IG5ldyBDb21wYW55KHNlbGYpO1xuXG4gIHZhciBGaW5hbmNlID0gcmVxdWlyZSgnLi9maW5hbmNlJyk7XG4gIHNlbGYuZmluYW5jZSA9IG5ldyBGaW5hbmNlKHNlbGYpO1xuXG4gIHZhciBJbWFnZSA9IHJlcXVpcmUoJy4vaW1hZ2UnKTtcbiAgc2VsZi5pbWFnZSA9IG5ldyBJbWFnZShzZWxmKTtcblxuICB2YXIgTG9yZW0gPSByZXF1aXJlKCcuL2xvcmVtJyk7XG4gIHNlbGYubG9yZW0gPSBuZXcgTG9yZW0oc2VsZik7XG5cbiAgdmFyIEhhY2tlciA9IHJlcXVpcmUoJy4vaGFja2VyJyk7XG4gIHNlbGYuaGFja2VyID0gbmV3IEhhY2tlcihzZWxmKTtcblxuICB2YXIgSW50ZXJuZXQgPSByZXF1aXJlKCcuL2ludGVybmV0Jyk7XG4gIHNlbGYuaW50ZXJuZXQgPSBuZXcgSW50ZXJuZXQoc2VsZik7XG5cbiAgdmFyIFBob25lID0gcmVxdWlyZSgnLi9waG9uZV9udW1iZXInKTtcbiAgc2VsZi5waG9uZSA9IG5ldyBQaG9uZShzZWxmKTtcblxuICB2YXIgX0RhdGUgPSByZXF1aXJlKCcuL2RhdGUnKTtcbiAgc2VsZi5kYXRlID0gbmV3IF9EYXRlKHNlbGYpO1xuXG4gIHZhciBDb21tZXJjZSA9IHJlcXVpcmUoJy4vY29tbWVyY2UnKTtcbiAgc2VsZi5jb21tZXJjZSA9IG5ldyBDb21tZXJjZShzZWxmKTtcblxuICAvLyBUT0RPOiBmaXggc2VsZi5jb21tZXJjZSA9IHJlcXVpcmUoJy4vY29tbWVyY2UnKTtcblxuICB2YXIgX2RlZmluaXRpb25zID0ge1xuICAgIFwibmFtZVwiOiBbXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwicHJlZml4XCIsIFwic3VmZml4XCIsIFwidGl0bGVcIiwgXCJtYWxlX2ZpcnN0X25hbWVcIiwgXCJmZW1hbGVfZmlyc3RfbmFtZVwiLCBcIm1hbGVfbWlkZGxlX25hbWVcIiwgXCJmZW1hbGVfbWlkZGxlX25hbWVcIiwgXCJtYWxlX2xhc3RfbmFtZVwiLCBcImZlbWFsZV9sYXN0X25hbWVcIl0sXG4gICAgXCJhZGRyZXNzXCI6IFtcImNpdHlfcHJlZml4XCIsIFwiY2l0eV9zdWZmaXhcIiwgXCJzdHJlZXRfc3VmZml4XCIsIFwiY291bnR5XCIsIFwiY291bnRyeVwiLCBcImNvdW50cnlfY29kZVwiLCBcInN0YXRlXCIsIFwic3RhdGVfYWJiclwiLCBcInN0cmVldF9wcmVmaXhcIiwgXCJwb3N0Y29kZVwiXSxcbiAgICBcImNvbXBhbnlcIjogW1wiYWRqZWN0aXZlXCIsIFwibm91blwiLCBcImRlc2NyaXB0b3JcIiwgXCJic19hZGplY3RpdmVcIiwgXCJic19ub3VuXCIsIFwiYnNfdmVyYlwiLCBcInN1ZmZpeFwiXSxcbiAgICBcImxvcmVtXCI6IFtcIndvcmRzXCJdLFxuICAgIFwiaGFja2VyXCI6IFtcImFiYnJldmlhdGlvblwiLCBcImFkamVjdGl2ZVwiLCBcIm5vdW5cIiwgXCJ2ZXJiXCIsIFwiaW5ndmVyYlwiXSxcbiAgICBcInBob25lX251bWJlclwiOiBbXCJmb3JtYXRzXCJdLFxuICAgIFwiZmluYW5jZVwiOiBbXCJhY2NvdW50X3R5cGVcIiwgXCJ0cmFuc2FjdGlvbl90eXBlXCIsIFwiY3VycmVuY3lcIl0sXG4gICAgXCJpbnRlcm5ldFwiOiBbXCJhdmF0YXJfdXJpXCIsIFwiZG9tYWluX3N1ZmZpeFwiLCBcImZyZWVfZW1haWxcIiwgXCJwYXNzd29yZFwiXSxcbiAgICBcImNvbW1lcmNlXCI6IFtcImNvbG9yXCIsIFwiZGVwYXJ0bWVudFwiLCBcInByb2R1Y3RfbmFtZVwiLCBcInByaWNlXCIsIFwiY2F0ZWdvcmllc1wiXSxcbiAgICBcImRhdGVcIjogW1wibW9udGhcIiwgXCJ3ZWVrZGF5XCJdLFxuICAgIFwidGl0bGVcIjogXCJcIixcbiAgICBcInNlcGFyYXRvclwiOiBcIlwiXG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgR2V0dGVyIGZvciBhbGwgZGVmaW5pdGlvbnMuZm9vLmJhciBwcm9wZXRyaWVzXG4gIE9iamVjdC5rZXlzKF9kZWZpbml0aW9ucykuZm9yRWFjaChmdW5jdGlvbihkKXtcbiAgICBpZiAodHlwZW9mIHNlbGYuZGVmaW5pdGlvbnNbZF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHNlbGYuZGVmaW5pdGlvbnNbZF0gPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9kZWZpbml0aW9uc1tkXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzZWxmLmRlZmluaXRpb25zW2RdID0gX2RlZmluaXRpb25zW2RdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIF9kZWZpbml0aW9uc1tkXS5mb3JFYWNoKGZ1bmN0aW9uKHApe1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuZGVmaW5pdGlvbnNbZF0sIHAsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzZWxmLmxvY2FsZXNbc2VsZi5sb2NhbGVdW2RdID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzZWxmLmxvY2FsZXNbc2VsZi5sb2NhbGVdW2RdW3BdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvLyBjZXJ0YWluIGxvY2FsaXphdGlvbiBzZXRzIGNvbnRhaW4gbGVzcyBkYXRhIHRoZW4gb3RoZXJzLlxuICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgYSBtaXNzaW5nIGRlZmludGlvbiwgdXNlIHRoZSBkZWZhdWx0IGxvY2FsZUZhbGxiYWNrIHRvIHN1YnN0aXR1dGUgdGhlIG1pc3Npbmcgc2V0IGRhdGFcbiAgICAgICAgICAgIC8vIHRocm93IG5ldyBFcnJvcigndW5rbm93biBwcm9wZXJ0eSAnICsgZCArIHApXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5sb2NhbGVzW2xvY2FsZUZhbGxiYWNrXVtkXVtwXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGxvY2FsaXplZCBkYXRhXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5sb2NhbGVzW3NlbGYubG9jYWxlXVtkXVtwXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxufTtcblxuRmFrZXIucHJvdG90eXBlLnNlZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgUmFuZG9tID0gcmVxdWlyZSgnLi9yYW5kb20nKTtcbiAgdGhpcy5zZWVkVmFsdWUgPSB2YWx1ZTtcbiAgdGhpcy5yYW5kb20gPSBuZXcgUmFuZG9tKHRoaXMsIHRoaXMuc2VlZFZhbHVlKTtcbn1cbm1vZHVsZVsnZXhwb3J0cyddID0gRmFrZXI7XG4iLCJ2YXIgcGFzc3dvcmRfZ2VuZXJhdG9yID0gcmVxdWlyZSgnLi4vdmVuZG9yL3Bhc3N3b3JkLWdlbmVyYXRvci5qcycpLFxuICAgIHJhbmRvbV91YSA9IHJlcXVpcmUoJy4uL3ZlbmRvci91c2VyLWFnZW50Jyk7XG5cbnZhciBJbnRlcm5ldCA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYuYXZhdGFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaW50ZXJuZXQuYXZhdGFyX3VyaSk7XG4gIH07XG5cbiAgc2VsZi5lbWFpbCA9IGZ1bmN0aW9uIChmaXJzdE5hbWUsIGxhc3ROYW1lLCBwcm92aWRlcikge1xuICAgICAgcHJvdmlkZXIgPSBwcm92aWRlciB8fCBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmludGVybmV0LmZyZWVfZW1haWwpO1xuICAgICAgcmV0dXJuICBmYWtlci5oZWxwZXJzLnNsdWdpZnkoZmFrZXIuaW50ZXJuZXQudXNlck5hbWUoZmlyc3ROYW1lLCBsYXN0TmFtZSkpICsgXCJAXCIgKyBwcm92aWRlcjtcbiAgfTtcblxuICBzZWxmLnVzZXJOYW1lID0gZnVuY3Rpb24gKGZpcnN0TmFtZSwgbGFzdE5hbWUpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBmaXJzdE5hbWUgPSBmaXJzdE5hbWUgfHwgZmFrZXIubmFtZS5maXJzdE5hbWUoKTtcbiAgICAgIGxhc3ROYW1lID0gbGFzdE5hbWUgfHwgZmFrZXIubmFtZS5sYXN0TmFtZSgpO1xuICAgICAgc3dpdGNoIChmYWtlci5yYW5kb20ubnVtYmVyKDIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgICAgcmVzdWx0ID0gZmlyc3ROYW1lICsgZmFrZXIucmFuZG9tLm51bWJlcig5OSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgICAgcmVzdWx0ID0gZmlyc3ROYW1lICsgZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChbXCIuXCIsIFwiX1wiXSkgKyBsYXN0TmFtZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXN1bHQgPSBmaXJzdE5hbWUgKyBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KFtcIi5cIiwgXCJfXCJdKSArIGxhc3ROYW1lICsgZmFrZXIucmFuZG9tLm51bWJlcig5OSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSByZXN1bHQudG9TdHJpbmcoKS5yZXBsYWNlKC8nL2csIFwiXCIpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLyAvZywgXCJcIik7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHNlbGYucHJvdG9jb2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvdG9jb2xzID0gWydodHRwJywnaHR0cHMnXTtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KHByb3RvY29scyk7XG4gIH07XG5cbiAgc2VsZi51cmwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIuaW50ZXJuZXQucHJvdG9jb2woKSArICc6Ly8nICsgZmFrZXIuaW50ZXJuZXQuZG9tYWluTmFtZSgpO1xuICB9O1xuXG4gIHNlbGYuZG9tYWluTmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5pbnRlcm5ldC5kb21haW5Xb3JkKCkgKyBcIi5cIiArIGZha2VyLmludGVybmV0LmRvbWFpblN1ZmZpeCgpO1xuICB9O1xuXG4gIHNlbGYuZG9tYWluU3VmZml4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaW50ZXJuZXQuZG9tYWluX3N1ZmZpeCk7XG4gIH07XG5cbiAgc2VsZi5kb21haW5Xb3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLm5hbWUuZmlyc3ROYW1lKCkucmVwbGFjZSgvKFtcXFxcfiMmKnt9Lzo8Pj98XFxcIl0pL2lnLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfTtcblxuICBzZWxmLmlwID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJhbmROdW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIChmYWtlci5yYW5kb20ubnVtYmVyKDI1NSkpLnRvRml4ZWQoMCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgIHJlc3VsdFtpXSA9IHJhbmROdW0oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKFwiLlwiKTtcbiAgfTtcblxuICBzZWxmLnVzZXJBZ2VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmFuZG9tX3VhLmdlbmVyYXRlKCk7XG4gIH07XG5cbiAgc2VsZi5jb2xvciA9IGZ1bmN0aW9uIChiYXNlUmVkMjU1LCBiYXNlR3JlZW4yNTUsIGJhc2VCbHVlMjU1KSB7XG4gICAgICBiYXNlUmVkMjU1ID0gYmFzZVJlZDI1NSB8fCAwO1xuICAgICAgYmFzZUdyZWVuMjU1ID0gYmFzZUdyZWVuMjU1IHx8IDA7XG4gICAgICBiYXNlQmx1ZTI1NSA9IGJhc2VCbHVlMjU1IHx8IDA7XG4gICAgICAvLyBiYXNlZCBvbiBhd2Vzb21lIHJlc3BvbnNlIDogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MzA0NC9hbGdvcml0aG0tdG8tcmFuZG9tbHktZ2VuZXJhdGUtYW4tYWVzdGhldGljYWxseS1wbGVhc2luZy1jb2xvci1wYWxldHRlXG4gICAgICB2YXIgcmVkID0gTWF0aC5mbG9vcigoZmFrZXIucmFuZG9tLm51bWJlcigyNTYpICsgYmFzZVJlZDI1NSkgLyAyKTtcbiAgICAgIHZhciBncmVlbiA9IE1hdGguZmxvb3IoKGZha2VyLnJhbmRvbS5udW1iZXIoMjU2KSArIGJhc2VHcmVlbjI1NSkgLyAyKTtcbiAgICAgIHZhciBibHVlID0gTWF0aC5mbG9vcigoZmFrZXIucmFuZG9tLm51bWJlcigyNTYpICsgYmFzZUJsdWUyNTUpIC8gMik7XG4gICAgICB2YXIgcmVkU3RyID0gcmVkLnRvU3RyaW5nKDE2KTtcbiAgICAgIHZhciBncmVlblN0ciA9IGdyZWVuLnRvU3RyaW5nKDE2KTtcbiAgICAgIHZhciBibHVlU3RyID0gYmx1ZS50b1N0cmluZygxNik7XG4gICAgICByZXR1cm4gJyMnICtcbiAgICAgICAgKHJlZFN0ci5sZW5ndGggPT09IDEgPyAnMCcgOiAnJykgKyByZWRTdHIgK1xuICAgICAgICAoZ3JlZW5TdHIubGVuZ3RoID09PSAxID8gJzAnIDogJycpICsgZ3JlZW5TdHIgK1xuICAgICAgICAoYmx1ZVN0ci5sZW5ndGggPT09IDEgPyAnMCc6ICcnKSArIGJsdWVTdHI7XG5cbiAgfTtcblxuICBzZWxmLm1hYyA9IGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgaSwgbWFjID0gXCJcIjtcbiAgICAgIGZvciAoaT0wOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgIG1hYys9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkqMTYpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICBpZiAoaSUyPT0xICYmIGkgIT0gMTEpIHtcbiAgICAgICAgICAgICAgbWFjKz1cIjpcIjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFjO1xuICB9O1xuXG4gIHNlbGYucGFzc3dvcmQgPSBmdW5jdGlvbiAobGVuLCBtZW1vcmFibGUsIHBhdHRlcm4sIHByZWZpeCkge1xuICAgIGxlbiA9IGxlbiB8fCAxNTtcbiAgICBpZiAodHlwZW9mIG1lbW9yYWJsZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbWVtb3JhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBwYXNzd29yZF9nZW5lcmF0b3IobGVuLCBtZW1vcmFibGUsIHBhdHRlcm4sIHByZWZpeCk7XG4gIH1cbiAgXG59O1xuXG5cbm1vZHVsZVtcImV4cG9ydHNcIl0gPSBJbnRlcm5ldDtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiIyMjIyNcIixcbiAgXCIjIyMjXCIsXG4gIFwiIyMjXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiN7Y2l0eV9wcmVmaXh9ICN7TmFtZS5maXJzdF9uYW1lfSN7Y2l0eV9zdWZmaXh9XCIsXG4gIFwiI3tjaXR5X3ByZWZpeH0gI3tOYW1lLmZpcnN0X25hbWV9XCIsXG4gIFwiI3tOYW1lLmZpcnN0X25hbWV9I3tjaXR5X3N1ZmZpeH1cIixcbiAgXCIje05hbWUubGFzdF9uYW1lfSN7Y2l0eV9zdWZmaXh9XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIk5vcnRoXCIsXG4gIFwiRWFzdFwiLFxuICBcIldlc3RcIixcbiAgXCJTb3V0aFwiLFxuICBcIk5ld1wiLFxuICBcIkxha2VcIixcbiAgXCJQb3J0XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcInRvd25cIixcbiAgXCJ0b25cIixcbiAgXCJsYW5kXCIsXG4gIFwidmlsbGVcIixcbiAgXCJiZXJnXCIsXG4gIFwiYnVyZ2hcIixcbiAgXCJib3JvdWdoXCIsXG4gIFwiYnVyeVwiLFxuICBcInZpZXdcIixcbiAgXCJwb3J0XCIsXG4gIFwibW91dGhcIixcbiAgXCJzdGFkXCIsXG4gIFwiZnVydFwiLFxuICBcImNoZXN0ZXJcIixcbiAgXCJtb3V0aFwiLFxuICBcImZvcnRcIixcbiAgXCJoYXZlblwiLFxuICBcInNpZGVcIixcbiAgXCJzaGlyZVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBZmdoYW5pc3RhblwiLFxuICBcIkFsYmFuaWFcIixcbiAgXCJBbGdlcmlhXCIsXG4gIFwiQW1lcmljYW4gU2Ftb2FcIixcbiAgXCJBbmRvcnJhXCIsXG4gIFwiQW5nb2xhXCIsXG4gIFwiQW5ndWlsbGFcIixcbiAgXCJBbnRhcmN0aWNhICh0aGUgdGVycml0b3J5IFNvdXRoIG9mIDYwIGRlZyBTKVwiLFxuICBcIkFudGlndWEgYW5kIEJhcmJ1ZGFcIixcbiAgXCJBcmdlbnRpbmFcIixcbiAgXCJBcm1lbmlhXCIsXG4gIFwiQXJ1YmFcIixcbiAgXCJBdXN0cmFsaWFcIixcbiAgXCJBdXN0cmlhXCIsXG4gIFwiQXplcmJhaWphblwiLFxuICBcIkJhaGFtYXNcIixcbiAgXCJCYWhyYWluXCIsXG4gIFwiQmFuZ2xhZGVzaFwiLFxuICBcIkJhcmJhZG9zXCIsXG4gIFwiQmVsYXJ1c1wiLFxuICBcIkJlbGdpdW1cIixcbiAgXCJCZWxpemVcIixcbiAgXCJCZW5pblwiLFxuICBcIkJlcm11ZGFcIixcbiAgXCJCaHV0YW5cIixcbiAgXCJCb2xpdmlhXCIsXG4gIFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVwiLFxuICBcIkJvdHN3YW5hXCIsXG4gIFwiQm91dmV0IElzbGFuZCAoQm91dmV0b3lhKVwiLFxuICBcIkJyYXppbFwiLFxuICBcIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeSAoQ2hhZ29zIEFyY2hpcGVsYWdvKVwiLFxuICBcIkJydW5laSBEYXJ1c3NhbGFtXCIsXG4gIFwiQnVsZ2FyaWFcIixcbiAgXCJCdXJraW5hIEZhc29cIixcbiAgXCJCdXJ1bmRpXCIsXG4gIFwiQ2FtYm9kaWFcIixcbiAgXCJDYW1lcm9vblwiLFxuICBcIkNhbmFkYVwiLFxuICBcIkNhcGUgVmVyZGVcIixcbiAgXCJDYXltYW4gSXNsYW5kc1wiLFxuICBcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1wiLFxuICBcIkNoYWRcIixcbiAgXCJDaGlsZVwiLFxuICBcIkNoaW5hXCIsXG4gIFwiQ2hyaXN0bWFzIElzbGFuZFwiLFxuICBcIkNvY29zIChLZWVsaW5nKSBJc2xhbmRzXCIsXG4gIFwiQ29sb21iaWFcIixcbiAgXCJDb21vcm9zXCIsXG4gIFwiQ29uZ29cIixcbiAgXCJDb25nb1wiLFxuICBcIkNvb2sgSXNsYW5kc1wiLFxuICBcIkNvc3RhIFJpY2FcIixcbiAgXCJDb3RlIGQnSXZvaXJlXCIsXG4gIFwiQ3JvYXRpYVwiLFxuICBcIkN1YmFcIixcbiAgXCJDeXBydXNcIixcbiAgXCJDemVjaCBSZXB1YmxpY1wiLFxuICBcIkRlbm1hcmtcIixcbiAgXCJEamlib3V0aVwiLFxuICBcIkRvbWluaWNhXCIsXG4gIFwiRG9taW5pY2FuIFJlcHVibGljXCIsXG4gIFwiRWN1YWRvclwiLFxuICBcIkVneXB0XCIsXG4gIFwiRWwgU2FsdmFkb3JcIixcbiAgXCJFcXVhdG9yaWFsIEd1aW5lYVwiLFxuICBcIkVyaXRyZWFcIixcbiAgXCJFc3RvbmlhXCIsXG4gIFwiRXRoaW9waWFcIixcbiAgXCJGYXJvZSBJc2xhbmRzXCIsXG4gIFwiRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpXCIsXG4gIFwiRmlqaVwiLFxuICBcIkZpbmxhbmRcIixcbiAgXCJGcmFuY2VcIixcbiAgXCJGcmVuY2ggR3VpYW5hXCIsXG4gIFwiRnJlbmNoIFBvbHluZXNpYVwiLFxuICBcIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllc1wiLFxuICBcIkdhYm9uXCIsXG4gIFwiR2FtYmlhXCIsXG4gIFwiR2VvcmdpYVwiLFxuICBcIkdlcm1hbnlcIixcbiAgXCJHaGFuYVwiLFxuICBcIkdpYnJhbHRhclwiLFxuICBcIkdyZWVjZVwiLFxuICBcIkdyZWVubGFuZFwiLFxuICBcIkdyZW5hZGFcIixcbiAgXCJHdWFkZWxvdXBlXCIsXG4gIFwiR3VhbVwiLFxuICBcIkd1YXRlbWFsYVwiLFxuICBcIkd1ZXJuc2V5XCIsXG4gIFwiR3VpbmVhXCIsXG4gIFwiR3VpbmVhLUJpc3NhdVwiLFxuICBcIkd1eWFuYVwiLFxuICBcIkhhaXRpXCIsXG4gIFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXCIsXG4gIFwiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSlcIixcbiAgXCJIb25kdXJhc1wiLFxuICBcIkhvbmcgS29uZ1wiLFxuICBcIkh1bmdhcnlcIixcbiAgXCJJY2VsYW5kXCIsXG4gIFwiSW5kaWFcIixcbiAgXCJJbmRvbmVzaWFcIixcbiAgXCJJcmFuXCIsXG4gIFwiSXJhcVwiLFxuICBcIklyZWxhbmRcIixcbiAgXCJJc2xlIG9mIE1hblwiLFxuICBcIklzcmFlbFwiLFxuICBcIkl0YWx5XCIsXG4gIFwiSmFtYWljYVwiLFxuICBcIkphcGFuXCIsXG4gIFwiSmVyc2V5XCIsXG4gIFwiSm9yZGFuXCIsXG4gIFwiS2F6YWtoc3RhblwiLFxuICBcIktlbnlhXCIsXG4gIFwiS2lyaWJhdGlcIixcbiAgXCJEZW1vY3JhdGljIFBlb3BsZSdzIFJlcHVibGljIG9mIEtvcmVhXCIsXG4gIFwiUmVwdWJsaWMgb2YgS29yZWFcIixcbiAgXCJLdXdhaXRcIixcbiAgXCJLeXJneXogUmVwdWJsaWNcIixcbiAgXCJMYW8gUGVvcGxlJ3MgRGVtb2NyYXRpYyBSZXB1YmxpY1wiLFxuICBcIkxhdHZpYVwiLFxuICBcIkxlYmFub25cIixcbiAgXCJMZXNvdGhvXCIsXG4gIFwiTGliZXJpYVwiLFxuICBcIkxpYnlhbiBBcmFiIEphbWFoaXJpeWFcIixcbiAgXCJMaWVjaHRlbnN0ZWluXCIsXG4gIFwiTGl0aHVhbmlhXCIsXG4gIFwiTHV4ZW1ib3VyZ1wiLFxuICBcIk1hY2FvXCIsXG4gIFwiTWFjZWRvbmlhXCIsXG4gIFwiTWFkYWdhc2NhclwiLFxuICBcIk1hbGF3aVwiLFxuICBcIk1hbGF5c2lhXCIsXG4gIFwiTWFsZGl2ZXNcIixcbiAgXCJNYWxpXCIsXG4gIFwiTWFsdGFcIixcbiAgXCJNYXJzaGFsbCBJc2xhbmRzXCIsXG4gIFwiTWFydGluaXF1ZVwiLFxuICBcIk1hdXJpdGFuaWFcIixcbiAgXCJNYXVyaXRpdXNcIixcbiAgXCJNYXlvdHRlXCIsXG4gIFwiTWV4aWNvXCIsXG4gIFwiTWljcm9uZXNpYVwiLFxuICBcIk1vbGRvdmFcIixcbiAgXCJNb25hY29cIixcbiAgXCJNb25nb2xpYVwiLFxuICBcIk1vbnRlbmVncm9cIixcbiAgXCJNb250c2VycmF0XCIsXG4gIFwiTW9yb2Njb1wiLFxuICBcIk1vemFtYmlxdWVcIixcbiAgXCJNeWFubWFyXCIsXG4gIFwiTmFtaWJpYVwiLFxuICBcIk5hdXJ1XCIsXG4gIFwiTmVwYWxcIixcbiAgXCJOZXRoZXJsYW5kcyBBbnRpbGxlc1wiLFxuICBcIk5ldGhlcmxhbmRzXCIsXG4gIFwiTmV3IENhbGVkb25pYVwiLFxuICBcIk5ldyBaZWFsYW5kXCIsXG4gIFwiTmljYXJhZ3VhXCIsXG4gIFwiTmlnZXJcIixcbiAgXCJOaWdlcmlhXCIsXG4gIFwiTml1ZVwiLFxuICBcIk5vcmZvbGsgSXNsYW5kXCIsXG4gIFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXCIsXG4gIFwiTm9yd2F5XCIsXG4gIFwiT21hblwiLFxuICBcIlBha2lzdGFuXCIsXG4gIFwiUGFsYXVcIixcbiAgXCJQYWxlc3RpbmlhbiBUZXJyaXRvcnlcIixcbiAgXCJQYW5hbWFcIixcbiAgXCJQYXB1YSBOZXcgR3VpbmVhXCIsXG4gIFwiUGFyYWd1YXlcIixcbiAgXCJQZXJ1XCIsXG4gIFwiUGhpbGlwcGluZXNcIixcbiAgXCJQaXRjYWlybiBJc2xhbmRzXCIsXG4gIFwiUG9sYW5kXCIsXG4gIFwiUG9ydHVnYWxcIixcbiAgXCJQdWVydG8gUmljb1wiLFxuICBcIlFhdGFyXCIsXG4gIFwiUmV1bmlvblwiLFxuICBcIlJvbWFuaWFcIixcbiAgXCJSdXNzaWFuIEZlZGVyYXRpb25cIixcbiAgXCJSd2FuZGFcIixcbiAgXCJTYWludCBCYXJ0aGVsZW15XCIsXG4gIFwiU2FpbnQgSGVsZW5hXCIsXG4gIFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXCIsXG4gIFwiU2FpbnQgTHVjaWFcIixcbiAgXCJTYWludCBNYXJ0aW5cIixcbiAgXCJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uXCIsXG4gIFwiU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXNcIixcbiAgXCJTYW1vYVwiLFxuICBcIlNhbiBNYXJpbm9cIixcbiAgXCJTYW8gVG9tZSBhbmQgUHJpbmNpcGVcIixcbiAgXCJTYXVkaSBBcmFiaWFcIixcbiAgXCJTZW5lZ2FsXCIsXG4gIFwiU2VyYmlhXCIsXG4gIFwiU2V5Y2hlbGxlc1wiLFxuICBcIlNpZXJyYSBMZW9uZVwiLFxuICBcIlNpbmdhcG9yZVwiLFxuICBcIlNsb3Zha2lhIChTbG92YWsgUmVwdWJsaWMpXCIsXG4gIFwiU2xvdmVuaWFcIixcbiAgXCJTb2xvbW9uIElzbGFuZHNcIixcbiAgXCJTb21hbGlhXCIsXG4gIFwiU291dGggQWZyaWNhXCIsXG4gIFwiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcIixcbiAgXCJTcGFpblwiLFxuICBcIlNyaSBMYW5rYVwiLFxuICBcIlN1ZGFuXCIsXG4gIFwiU3VyaW5hbWVcIixcbiAgXCJTdmFsYmFyZCAmIEphbiBNYXllbiBJc2xhbmRzXCIsXG4gIFwiU3dhemlsYW5kXCIsXG4gIFwiU3dlZGVuXCIsXG4gIFwiU3dpdHplcmxhbmRcIixcbiAgXCJTeXJpYW4gQXJhYiBSZXB1YmxpY1wiLFxuICBcIlRhaXdhblwiLFxuICBcIlRhamlraXN0YW5cIixcbiAgXCJUYW56YW5pYVwiLFxuICBcIlRoYWlsYW5kXCIsXG4gIFwiVGltb3ItTGVzdGVcIixcbiAgXCJUb2dvXCIsXG4gIFwiVG9rZWxhdVwiLFxuICBcIlRvbmdhXCIsXG4gIFwiVHJpbmlkYWQgYW5kIFRvYmFnb1wiLFxuICBcIlR1bmlzaWFcIixcbiAgXCJUdXJrZXlcIixcbiAgXCJUdXJrbWVuaXN0YW5cIixcbiAgXCJUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHNcIixcbiAgXCJUdXZhbHVcIixcbiAgXCJVZ2FuZGFcIixcbiAgXCJVa3JhaW5lXCIsXG4gIFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcIixcbiAgXCJVbml0ZWQgS2luZ2RvbVwiLFxuICBcIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYVwiLFxuICBcIlVuaXRlZCBTdGF0ZXMgTWlub3IgT3V0bHlpbmcgSXNsYW5kc1wiLFxuICBcIlVydWd1YXlcIixcbiAgXCJVemJla2lzdGFuXCIsXG4gIFwiVmFudWF0dVwiLFxuICBcIlZlbmV6dWVsYVwiLFxuICBcIlZpZXRuYW1cIixcbiAgXCJWaXJnaW4gSXNsYW5kcywgQnJpdGlzaFwiLFxuICBcIlZpcmdpbiBJc2xhbmRzLCBVLlMuXCIsXG4gIFwiV2FsbGlzIGFuZCBGdXR1bmFcIixcbiAgXCJXZXN0ZXJuIFNhaGFyYVwiLFxuICBcIlllbWVuXCIsXG4gIFwiWmFtYmlhXCIsXG4gIFwiWmltYmFid2VcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQURcIixcbiAgXCJBRVwiLFxuICBcIkFGXCIsXG4gIFwiQUdcIixcbiAgXCJBSVwiLFxuICBcIkFMXCIsXG4gIFwiQU1cIixcbiAgXCJBT1wiLFxuICBcIkFRXCIsXG4gIFwiQVJcIixcbiAgXCJBU1wiLFxuICBcIkFUXCIsXG4gIFwiQVVcIixcbiAgXCJBV1wiLFxuICBcIkFYXCIsXG4gIFwiQVpcIixcbiAgXCJCQVwiLFxuICBcIkJCXCIsXG4gIFwiQkRcIixcbiAgXCJCRVwiLFxuICBcIkJGXCIsXG4gIFwiQkdcIixcbiAgXCJCSFwiLFxuICBcIkJJXCIsXG4gIFwiQkpcIixcbiAgXCJCTFwiLFxuICBcIkJNXCIsXG4gIFwiQk5cIixcbiAgXCJCT1wiLFxuICBcIkJRXCIsXG4gIFwiQlFcIixcbiAgXCJCUlwiLFxuICBcIkJTXCIsXG4gIFwiQlRcIixcbiAgXCJCVlwiLFxuICBcIkJXXCIsXG4gIFwiQllcIixcbiAgXCJCWlwiLFxuICBcIkNBXCIsXG4gIFwiQ0NcIixcbiAgXCJDRFwiLFxuICBcIkNGXCIsXG4gIFwiQ0dcIixcbiAgXCJDSFwiLFxuICBcIkNJXCIsXG4gIFwiQ0tcIixcbiAgXCJDTFwiLFxuICBcIkNNXCIsXG4gIFwiQ05cIixcbiAgXCJDT1wiLFxuICBcIkNSXCIsXG4gIFwiQ1VcIixcbiAgXCJDVlwiLFxuICBcIkNXXCIsXG4gIFwiQ1hcIixcbiAgXCJDWVwiLFxuICBcIkNaXCIsXG4gIFwiREVcIixcbiAgXCJESlwiLFxuICBcIkRLXCIsXG4gIFwiRE1cIixcbiAgXCJET1wiLFxuICBcIkRaXCIsXG4gIFwiRUNcIixcbiAgXCJFRVwiLFxuICBcIkVHXCIsXG4gIFwiRUhcIixcbiAgXCJFUlwiLFxuICBcIkVTXCIsXG4gIFwiRVRcIixcbiAgXCJGSVwiLFxuICBcIkZKXCIsXG4gIFwiRktcIixcbiAgXCJGTVwiLFxuICBcIkZPXCIsXG4gIFwiRlJcIixcbiAgXCJHQVwiLFxuICBcIkdCXCIsXG4gIFwiR0RcIixcbiAgXCJHRVwiLFxuICBcIkdGXCIsXG4gIFwiR0dcIixcbiAgXCJHSFwiLFxuICBcIkdJXCIsXG4gIFwiR0xcIixcbiAgXCJHTVwiLFxuICBcIkdOXCIsXG4gIFwiR1BcIixcbiAgXCJHUVwiLFxuICBcIkdSXCIsXG4gIFwiR1NcIixcbiAgXCJHVFwiLFxuICBcIkdVXCIsXG4gIFwiR1dcIixcbiAgXCJHWVwiLFxuICBcIkhLXCIsXG4gIFwiSE1cIixcbiAgXCJITlwiLFxuICBcIkhSXCIsXG4gIFwiSFRcIixcbiAgXCJIVVwiLFxuICBcIklEXCIsXG4gIFwiSUVcIixcbiAgXCJJTFwiLFxuICBcIklNXCIsXG4gIFwiSU5cIixcbiAgXCJJT1wiLFxuICBcIklRXCIsXG4gIFwiSVJcIixcbiAgXCJJU1wiLFxuICBcIklUXCIsXG4gIFwiSkVcIixcbiAgXCJKTVwiLFxuICBcIkpPXCIsXG4gIFwiSlBcIixcbiAgXCJLRVwiLFxuICBcIktHXCIsXG4gIFwiS0hcIixcbiAgXCJLSVwiLFxuICBcIktNXCIsXG4gIFwiS05cIixcbiAgXCJLUFwiLFxuICBcIktSXCIsXG4gIFwiS1dcIixcbiAgXCJLWVwiLFxuICBcIktaXCIsXG4gIFwiTEFcIixcbiAgXCJMQlwiLFxuICBcIkxDXCIsXG4gIFwiTElcIixcbiAgXCJMS1wiLFxuICBcIkxSXCIsXG4gIFwiTFNcIixcbiAgXCJMVFwiLFxuICBcIkxVXCIsXG4gIFwiTFZcIixcbiAgXCJMWVwiLFxuICBcIk1BXCIsXG4gIFwiTUNcIixcbiAgXCJNRFwiLFxuICBcIk1FXCIsXG4gIFwiTUZcIixcbiAgXCJNR1wiLFxuICBcIk1IXCIsXG4gIFwiTUtcIixcbiAgXCJNTFwiLFxuICBcIk1NXCIsXG4gIFwiTU5cIixcbiAgXCJNT1wiLFxuICBcIk1QXCIsXG4gIFwiTVFcIixcbiAgXCJNUlwiLFxuICBcIk1TXCIsXG4gIFwiTVRcIixcbiAgXCJNVVwiLFxuICBcIk1WXCIsXG4gIFwiTVdcIixcbiAgXCJNWFwiLFxuICBcIk1ZXCIsXG4gIFwiTVpcIixcbiAgXCJOQVwiLFxuICBcIk5DXCIsXG4gIFwiTkVcIixcbiAgXCJORlwiLFxuICBcIk5HXCIsXG4gIFwiTklcIixcbiAgXCJOTFwiLFxuICBcIk5PXCIsXG4gIFwiTlBcIixcbiAgXCJOUlwiLFxuICBcIk5VXCIsXG4gIFwiTlpcIixcbiAgXCJPTVwiLFxuICBcIlBBXCIsXG4gIFwiUEVcIixcbiAgXCJQRlwiLFxuICBcIlBHXCIsXG4gIFwiUEhcIixcbiAgXCJQS1wiLFxuICBcIlBMXCIsXG4gIFwiUE1cIixcbiAgXCJQTlwiLFxuICBcIlBSXCIsXG4gIFwiUFNcIixcbiAgXCJQVFwiLFxuICBcIlBXXCIsXG4gIFwiUFlcIixcbiAgXCJRQVwiLFxuICBcIlJFXCIsXG4gIFwiUk9cIixcbiAgXCJSU1wiLFxuICBcIlJVXCIsXG4gIFwiUldcIixcbiAgXCJTQVwiLFxuICBcIlNCXCIsXG4gIFwiU0NcIixcbiAgXCJTRFwiLFxuICBcIlNFXCIsXG4gIFwiU0dcIixcbiAgXCJTSFwiLFxuICBcIlNJXCIsXG4gIFwiU0pcIixcbiAgXCJTS1wiLFxuICBcIlNMXCIsXG4gIFwiU01cIixcbiAgXCJTTlwiLFxuICBcIlNPXCIsXG4gIFwiU1JcIixcbiAgXCJTU1wiLFxuICBcIlNUXCIsXG4gIFwiU1ZcIixcbiAgXCJTWFwiLFxuICBcIlNZXCIsXG4gIFwiU1pcIixcbiAgXCJUQ1wiLFxuICBcIlREXCIsXG4gIFwiVEZcIixcbiAgXCJUR1wiLFxuICBcIlRIXCIsXG4gIFwiVEpcIixcbiAgXCJUS1wiLFxuICBcIlRMXCIsXG4gIFwiVE1cIixcbiAgXCJUTlwiLFxuICBcIlRPXCIsXG4gIFwiVFJcIixcbiAgXCJUVFwiLFxuICBcIlRWXCIsXG4gIFwiVFdcIixcbiAgXCJUWlwiLFxuICBcIlVBXCIsXG4gIFwiVUdcIixcbiAgXCJVTVwiLFxuICBcIlVTXCIsXG4gIFwiVVlcIixcbiAgXCJVWlwiLFxuICBcIlZBXCIsXG4gIFwiVkNcIixcbiAgXCJWRVwiLFxuICBcIlZHXCIsXG4gIFwiVklcIixcbiAgXCJWTlwiLFxuICBcIlZVXCIsXG4gIFwiV0ZcIixcbiAgXCJXU1wiLFxuICBcIllFXCIsXG4gIFwiWVRcIixcbiAgXCJaQVwiLFxuICBcIlpNXCIsXG4gIFwiWldcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQXZvblwiLFxuICBcIkJlZGZvcmRzaGlyZVwiLFxuICBcIkJlcmtzaGlyZVwiLFxuICBcIkJvcmRlcnNcIixcbiAgXCJCdWNraW5naGFtc2hpcmVcIixcbiAgXCJDYW1icmlkZ2VzaGlyZVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2FcIlxuXTtcbiIsInZhciBhZGRyZXNzID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGFkZHJlc3M7XG5hZGRyZXNzLmNpdHlfcHJlZml4ID0gcmVxdWlyZShcIi4vY2l0eV9wcmVmaXhcIik7XG5hZGRyZXNzLmNpdHlfc3VmZml4ID0gcmVxdWlyZShcIi4vY2l0eV9zdWZmaXhcIik7XG5hZGRyZXNzLmNvdW50eSA9IHJlcXVpcmUoXCIuL2NvdW50eVwiKTtcbmFkZHJlc3MuY291bnRyeSA9IHJlcXVpcmUoXCIuL2NvdW50cnlcIik7XG5hZGRyZXNzLmNvdW50cnlfY29kZSA9IHJlcXVpcmUoXCIuL2NvdW50cnlfY29kZVwiKTtcbmFkZHJlc3MuYnVpbGRpbmdfbnVtYmVyID0gcmVxdWlyZShcIi4vYnVpbGRpbmdfbnVtYmVyXCIpO1xuYWRkcmVzcy5zdHJlZXRfc3VmZml4ID0gcmVxdWlyZShcIi4vc3RyZWV0X3N1ZmZpeFwiKTtcbmFkZHJlc3Muc2Vjb25kYXJ5X2FkZHJlc3MgPSByZXF1aXJlKFwiLi9zZWNvbmRhcnlfYWRkcmVzc1wiKTtcbmFkZHJlc3MucG9zdGNvZGUgPSByZXF1aXJlKFwiLi9wb3N0Y29kZVwiKTtcbmFkZHJlc3MucG9zdGNvZGVfYnlfc3RhdGUgPSByZXF1aXJlKFwiLi9wb3N0Y29kZV9ieV9zdGF0ZVwiKTtcbmFkZHJlc3Muc3RhdGUgPSByZXF1aXJlKFwiLi9zdGF0ZVwiKTtcbmFkZHJlc3Muc3RhdGVfYWJiciA9IHJlcXVpcmUoXCIuL3N0YXRlX2FiYnJcIik7XG5hZGRyZXNzLnRpbWVfem9uZSA9IHJlcXVpcmUoXCIuL3RpbWVfem9uZVwiKTtcbmFkZHJlc3MuY2l0eSA9IHJlcXVpcmUoXCIuL2NpdHlcIik7XG5hZGRyZXNzLnN0cmVldF9uYW1lID0gcmVxdWlyZShcIi4vc3RyZWV0X25hbWVcIik7XG5hZGRyZXNzLnN0cmVldF9hZGRyZXNzID0gcmVxdWlyZShcIi4vc3RyZWV0X2FkZHJlc3NcIik7XG5hZGRyZXNzLmRlZmF1bHRfY291bnRyeSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRfY291bnRyeVwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiIyMjIyNcIixcbiAgXCIjIyMjIy0jIyMjXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFwdC4gIyMjXCIsXG4gIFwiU3VpdGUgIyMjXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFsYWJhbWFcIixcbiAgXCJBbGFza2FcIixcbiAgXCJBcml6b25hXCIsXG4gIFwiQXJrYW5zYXNcIixcbiAgXCJDYWxpZm9ybmlhXCIsXG4gIFwiQ29sb3JhZG9cIixcbiAgXCJDb25uZWN0aWN1dFwiLFxuICBcIkRlbGF3YXJlXCIsXG4gIFwiRmxvcmlkYVwiLFxuICBcIkdlb3JnaWFcIixcbiAgXCJIYXdhaWlcIixcbiAgXCJJZGFob1wiLFxuICBcIklsbGlub2lzXCIsXG4gIFwiSW5kaWFuYVwiLFxuICBcIklvd2FcIixcbiAgXCJLYW5zYXNcIixcbiAgXCJLZW50dWNreVwiLFxuICBcIkxvdWlzaWFuYVwiLFxuICBcIk1haW5lXCIsXG4gIFwiTWFyeWxhbmRcIixcbiAgXCJNYXNzYWNodXNldHRzXCIsXG4gIFwiTWljaGlnYW5cIixcbiAgXCJNaW5uZXNvdGFcIixcbiAgXCJNaXNzaXNzaXBwaVwiLFxuICBcIk1pc3NvdXJpXCIsXG4gIFwiTW9udGFuYVwiLFxuICBcIk5lYnJhc2thXCIsXG4gIFwiTmV2YWRhXCIsXG4gIFwiTmV3IEhhbXBzaGlyZVwiLFxuICBcIk5ldyBKZXJzZXlcIixcbiAgXCJOZXcgTWV4aWNvXCIsXG4gIFwiTmV3IFlvcmtcIixcbiAgXCJOb3J0aCBDYXJvbGluYVwiLFxuICBcIk5vcnRoIERha290YVwiLFxuICBcIk9oaW9cIixcbiAgXCJPa2xhaG9tYVwiLFxuICBcIk9yZWdvblwiLFxuICBcIlBlbm5zeWx2YW5pYVwiLFxuICBcIlJob2RlIElzbGFuZFwiLFxuICBcIlNvdXRoIENhcm9saW5hXCIsXG4gIFwiU291dGggRGFrb3RhXCIsXG4gIFwiVGVubmVzc2VlXCIsXG4gIFwiVGV4YXNcIixcbiAgXCJVdGFoXCIsXG4gIFwiVmVybW9udFwiLFxuICBcIlZpcmdpbmlhXCIsXG4gIFwiV2FzaGluZ3RvblwiLFxuICBcIldlc3QgVmlyZ2luaWFcIixcbiAgXCJXaXNjb25zaW5cIixcbiAgXCJXeW9taW5nXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFMXCIsXG4gIFwiQUtcIixcbiAgXCJBWlwiLFxuICBcIkFSXCIsXG4gIFwiQ0FcIixcbiAgXCJDT1wiLFxuICBcIkNUXCIsXG4gIFwiREVcIixcbiAgXCJGTFwiLFxuICBcIkdBXCIsXG4gIFwiSElcIixcbiAgXCJJRFwiLFxuICBcIklMXCIsXG4gIFwiSU5cIixcbiAgXCJJQVwiLFxuICBcIktTXCIsXG4gIFwiS1lcIixcbiAgXCJMQVwiLFxuICBcIk1FXCIsXG4gIFwiTURcIixcbiAgXCJNQVwiLFxuICBcIk1JXCIsXG4gIFwiTU5cIixcbiAgXCJNU1wiLFxuICBcIk1PXCIsXG4gIFwiTVRcIixcbiAgXCJORVwiLFxuICBcIk5WXCIsXG4gIFwiTkhcIixcbiAgXCJOSlwiLFxuICBcIk5NXCIsXG4gIFwiTllcIixcbiAgXCJOQ1wiLFxuICBcIk5EXCIsXG4gIFwiT0hcIixcbiAgXCJPS1wiLFxuICBcIk9SXCIsXG4gIFwiUEFcIixcbiAgXCJSSVwiLFxuICBcIlNDXCIsXG4gIFwiU0RcIixcbiAgXCJUTlwiLFxuICBcIlRYXCIsXG4gIFwiVVRcIixcbiAgXCJWVFwiLFxuICBcIlZBXCIsXG4gIFwiV0FcIixcbiAgXCJXVlwiLFxuICBcIldJXCIsXG4gIFwiV1lcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3tidWlsZGluZ19udW1iZXJ9ICN7c3RyZWV0X25hbWV9XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiN7TmFtZS5maXJzdF9uYW1lfSAje3N0cmVldF9zdWZmaXh9XCIsXG4gIFwiI3tOYW1lLmxhc3RfbmFtZX0gI3tzdHJlZXRfc3VmZml4fVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBbGxleVwiLFxuICBcIkF2ZW51ZVwiLFxuICBcIkJyYW5jaFwiLFxuICBcIkJyaWRnZVwiLFxuICBcIkJyb29rXCIsXG4gIFwiQnJvb2tzXCIsXG4gIFwiQnVyZ1wiLFxuICBcIkJ1cmdzXCIsXG4gIFwiQnlwYXNzXCIsXG4gIFwiQ2FtcFwiLFxuICBcIkNhbnlvblwiLFxuICBcIkNhcGVcIixcbiAgXCJDYXVzZXdheVwiLFxuICBcIkNlbnRlclwiLFxuICBcIkNlbnRlcnNcIixcbiAgXCJDaXJjbGVcIixcbiAgXCJDaXJjbGVzXCIsXG4gIFwiQ2xpZmZcIixcbiAgXCJDbGlmZnNcIixcbiAgXCJDbHViXCIsXG4gIFwiQ29tbW9uXCIsXG4gIFwiQ29ybmVyXCIsXG4gIFwiQ29ybmVyc1wiLFxuICBcIkNvdXJzZVwiLFxuICBcIkNvdXJ0XCIsXG4gIFwiQ291cnRzXCIsXG4gIFwiQ292ZVwiLFxuICBcIkNvdmVzXCIsXG4gIFwiQ3JlZWtcIixcbiAgXCJDcmVzY2VudFwiLFxuICBcIkNyZXN0XCIsXG4gIFwiQ3Jvc3NpbmdcIixcbiAgXCJDcm9zc3JvYWRcIixcbiAgXCJDdXJ2ZVwiLFxuICBcIkRhbGVcIixcbiAgXCJEYW1cIixcbiAgXCJEaXZpZGVcIixcbiAgXCJEcml2ZVwiLFxuICBcIkRyaXZlXCIsXG4gIFwiRHJpdmVzXCIsXG4gIFwiRXN0YXRlXCIsXG4gIFwiRXN0YXRlc1wiLFxuICBcIkV4cHJlc3N3YXlcIixcbiAgXCJFeHRlbnNpb25cIixcbiAgXCJFeHRlbnNpb25zXCIsXG4gIFwiRmFsbFwiLFxuICBcIkZhbGxzXCIsXG4gIFwiRmVycnlcIixcbiAgXCJGaWVsZFwiLFxuICBcIkZpZWxkc1wiLFxuICBcIkZsYXRcIixcbiAgXCJGbGF0c1wiLFxuICBcIkZvcmRcIixcbiAgXCJGb3Jkc1wiLFxuICBcIkZvcmVzdFwiLFxuICBcIkZvcmdlXCIsXG4gIFwiRm9yZ2VzXCIsXG4gIFwiRm9ya1wiLFxuICBcIkZvcmtzXCIsXG4gIFwiRm9ydFwiLFxuICBcIkZyZWV3YXlcIixcbiAgXCJHYXJkZW5cIixcbiAgXCJHYXJkZW5zXCIsXG4gIFwiR2F0ZXdheVwiLFxuICBcIkdsZW5cIixcbiAgXCJHbGVuc1wiLFxuICBcIkdyZWVuXCIsXG4gIFwiR3JlZW5zXCIsXG4gIFwiR3JvdmVcIixcbiAgXCJHcm92ZXNcIixcbiAgXCJIYXJib3JcIixcbiAgXCJIYXJib3JzXCIsXG4gIFwiSGF2ZW5cIixcbiAgXCJIZWlnaHRzXCIsXG4gIFwiSGlnaHdheVwiLFxuICBcIkhpbGxcIixcbiAgXCJIaWxsc1wiLFxuICBcIkhvbGxvd1wiLFxuICBcIklubGV0XCIsXG4gIFwiSW5sZXRcIixcbiAgXCJJc2xhbmRcIixcbiAgXCJJc2xhbmRcIixcbiAgXCJJc2xhbmRzXCIsXG4gIFwiSXNsYW5kc1wiLFxuICBcIklzbGVcIixcbiAgXCJJc2xlXCIsXG4gIFwiSnVuY3Rpb25cIixcbiAgXCJKdW5jdGlvbnNcIixcbiAgXCJLZXlcIixcbiAgXCJLZXlzXCIsXG4gIFwiS25vbGxcIixcbiAgXCJLbm9sbHNcIixcbiAgXCJMYWtlXCIsXG4gIFwiTGFrZXNcIixcbiAgXCJMYW5kXCIsXG4gIFwiTGFuZGluZ1wiLFxuICBcIkxhbmVcIixcbiAgXCJMaWdodFwiLFxuICBcIkxpZ2h0c1wiLFxuICBcIkxvYWZcIixcbiAgXCJMb2NrXCIsXG4gIFwiTG9ja3NcIixcbiAgXCJMb2Nrc1wiLFxuICBcIkxvZGdlXCIsXG4gIFwiTG9kZ2VcIixcbiAgXCJMb29wXCIsXG4gIFwiTWFsbFwiLFxuICBcIk1hbm9yXCIsXG4gIFwiTWFub3JzXCIsXG4gIFwiTWVhZG93XCIsXG4gIFwiTWVhZG93c1wiLFxuICBcIk1ld3NcIixcbiAgXCJNaWxsXCIsXG4gIFwiTWlsbHNcIixcbiAgXCJNaXNzaW9uXCIsXG4gIFwiTWlzc2lvblwiLFxuICBcIk1vdG9yd2F5XCIsXG4gIFwiTW91bnRcIixcbiAgXCJNb3VudGFpblwiLFxuICBcIk1vdW50YWluXCIsXG4gIFwiTW91bnRhaW5zXCIsXG4gIFwiTW91bnRhaW5zXCIsXG4gIFwiTmVja1wiLFxuICBcIk9yY2hhcmRcIixcbiAgXCJPdmFsXCIsXG4gIFwiT3ZlcnBhc3NcIixcbiAgXCJQYXJrXCIsXG4gIFwiUGFya3NcIixcbiAgXCJQYXJrd2F5XCIsXG4gIFwiUGFya3dheXNcIixcbiAgXCJQYXNzXCIsXG4gIFwiUGFzc2FnZVwiLFxuICBcIlBhdGhcIixcbiAgXCJQaWtlXCIsXG4gIFwiUGluZVwiLFxuICBcIlBpbmVzXCIsXG4gIFwiUGxhY2VcIixcbiAgXCJQbGFpblwiLFxuICBcIlBsYWluc1wiLFxuICBcIlBsYWluc1wiLFxuICBcIlBsYXphXCIsXG4gIFwiUGxhemFcIixcbiAgXCJQb2ludFwiLFxuICBcIlBvaW50c1wiLFxuICBcIlBvcnRcIixcbiAgXCJQb3J0XCIsXG4gIFwiUG9ydHNcIixcbiAgXCJQb3J0c1wiLFxuICBcIlByYWlyaWVcIixcbiAgXCJQcmFpcmllXCIsXG4gIFwiUmFkaWFsXCIsXG4gIFwiUmFtcFwiLFxuICBcIlJhbmNoXCIsXG4gIFwiUmFwaWRcIixcbiAgXCJSYXBpZHNcIixcbiAgXCJSZXN0XCIsXG4gIFwiUmlkZ2VcIixcbiAgXCJSaWRnZXNcIixcbiAgXCJSaXZlclwiLFxuICBcIlJvYWRcIixcbiAgXCJSb2FkXCIsXG4gIFwiUm9hZHNcIixcbiAgXCJSb2Fkc1wiLFxuICBcIlJvdXRlXCIsXG4gIFwiUm93XCIsXG4gIFwiUnVlXCIsXG4gIFwiUnVuXCIsXG4gIFwiU2hvYWxcIixcbiAgXCJTaG9hbHNcIixcbiAgXCJTaG9yZVwiLFxuICBcIlNob3Jlc1wiLFxuICBcIlNreXdheVwiLFxuICBcIlNwcmluZ1wiLFxuICBcIlNwcmluZ3NcIixcbiAgXCJTcHJpbmdzXCIsXG4gIFwiU3B1clwiLFxuICBcIlNwdXJzXCIsXG4gIFwiU3F1YXJlXCIsXG4gIFwiU3F1YXJlXCIsXG4gIFwiU3F1YXJlc1wiLFxuICBcIlNxdWFyZXNcIixcbiAgXCJTdGF0aW9uXCIsXG4gIFwiU3RhdGlvblwiLFxuICBcIlN0cmF2ZW51ZVwiLFxuICBcIlN0cmF2ZW51ZVwiLFxuICBcIlN0cmVhbVwiLFxuICBcIlN0cmVhbVwiLFxuICBcIlN0cmVldFwiLFxuICBcIlN0cmVldFwiLFxuICBcIlN0cmVldHNcIixcbiAgXCJTdW1taXRcIixcbiAgXCJTdW1taXRcIixcbiAgXCJUZXJyYWNlXCIsXG4gIFwiVGhyb3VnaHdheVwiLFxuICBcIlRyYWNlXCIsXG4gIFwiVHJhY2tcIixcbiAgXCJUcmFmZmljd2F5XCIsXG4gIFwiVHJhaWxcIixcbiAgXCJUcmFpbFwiLFxuICBcIlR1bm5lbFwiLFxuICBcIlR1bm5lbFwiLFxuICBcIlR1cm5waWtlXCIsXG4gIFwiVHVybnBpa2VcIixcbiAgXCJVbmRlcnBhc3NcIixcbiAgXCJVbmlvblwiLFxuICBcIlVuaW9uc1wiLFxuICBcIlZhbGxleVwiLFxuICBcIlZhbGxleXNcIixcbiAgXCJWaWFcIixcbiAgXCJWaWFkdWN0XCIsXG4gIFwiVmlld1wiLFxuICBcIlZpZXdzXCIsXG4gIFwiVmlsbGFnZVwiLFxuICBcIlZpbGxhZ2VcIixcbiAgXCJWaWxsYWdlc1wiLFxuICBcIlZpbGxlXCIsXG4gIFwiVmlzdGFcIixcbiAgXCJWaXN0YVwiLFxuICBcIldhbGtcIixcbiAgXCJXYWxrc1wiLFxuICBcIldhbGxcIixcbiAgXCJXYXlcIixcbiAgXCJXYXlzXCIsXG4gIFwiV2VsbFwiLFxuICBcIldlbGxzXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIlBhY2lmaWMvTWlkd2F5XCIsXG4gIFwiUGFjaWZpYy9QYWdvX1BhZ29cIixcbiAgXCJQYWNpZmljL0hvbm9sdWx1XCIsXG4gIFwiQW1lcmljYS9KdW5lYXVcIixcbiAgXCJBbWVyaWNhL0xvc19BbmdlbGVzXCIsXG4gIFwiQW1lcmljYS9UaWp1YW5hXCIsXG4gIFwiQW1lcmljYS9EZW52ZXJcIixcbiAgXCJBbWVyaWNhL1Bob2VuaXhcIixcbiAgXCJBbWVyaWNhL0NoaWh1YWh1YVwiLFxuICBcIkFtZXJpY2EvTWF6YXRsYW5cIixcbiAgXCJBbWVyaWNhL0NoaWNhZ29cIixcbiAgXCJBbWVyaWNhL1JlZ2luYVwiLFxuICBcIkFtZXJpY2EvTWV4aWNvX0NpdHlcIixcbiAgXCJBbWVyaWNhL01leGljb19DaXR5XCIsXG4gIFwiQW1lcmljYS9Nb250ZXJyZXlcIixcbiAgXCJBbWVyaWNhL0d1YXRlbWFsYVwiLFxuICBcIkFtZXJpY2EvTmV3X1lvcmtcIixcbiAgXCJBbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzXCIsXG4gIFwiQW1lcmljYS9Cb2dvdGFcIixcbiAgXCJBbWVyaWNhL0xpbWFcIixcbiAgXCJBbWVyaWNhL0xpbWFcIixcbiAgXCJBbWVyaWNhL0hhbGlmYXhcIixcbiAgXCJBbWVyaWNhL0NhcmFjYXNcIixcbiAgXCJBbWVyaWNhL0xhX1BhelwiLFxuICBcIkFtZXJpY2EvU2FudGlhZ29cIixcbiAgXCJBbWVyaWNhL1N0X0pvaG5zXCIsXG4gIFwiQW1lcmljYS9TYW9fUGF1bG9cIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXNcIixcbiAgXCJBbWVyaWNhL0d1eWFuYVwiLFxuICBcIkFtZXJpY2EvR29kdGhhYlwiLFxuICBcIkF0bGFudGljL1NvdXRoX0dlb3JnaWFcIixcbiAgXCJBdGxhbnRpYy9Bem9yZXNcIixcbiAgXCJBdGxhbnRpYy9DYXBlX1ZlcmRlXCIsXG4gIFwiRXVyb3BlL0R1YmxpblwiLFxuICBcIkV1cm9wZS9Mb25kb25cIixcbiAgXCJFdXJvcGUvTGlzYm9uXCIsXG4gIFwiRXVyb3BlL0xvbmRvblwiLFxuICBcIkFmcmljYS9DYXNhYmxhbmNhXCIsXG4gIFwiQWZyaWNhL01vbnJvdmlhXCIsXG4gIFwiRXRjL1VUQ1wiLFxuICBcIkV1cm9wZS9CZWxncmFkZVwiLFxuICBcIkV1cm9wZS9CcmF0aXNsYXZhXCIsXG4gIFwiRXVyb3BlL0J1ZGFwZXN0XCIsXG4gIFwiRXVyb3BlL0xqdWJsamFuYVwiLFxuICBcIkV1cm9wZS9QcmFndWVcIixcbiAgXCJFdXJvcGUvU2FyYWpldm9cIixcbiAgXCJFdXJvcGUvU2tvcGplXCIsXG4gIFwiRXVyb3BlL1dhcnNhd1wiLFxuICBcIkV1cm9wZS9aYWdyZWJcIixcbiAgXCJFdXJvcGUvQnJ1c3NlbHNcIixcbiAgXCJFdXJvcGUvQ29wZW5oYWdlblwiLFxuICBcIkV1cm9wZS9NYWRyaWRcIixcbiAgXCJFdXJvcGUvUGFyaXNcIixcbiAgXCJFdXJvcGUvQW1zdGVyZGFtXCIsXG4gIFwiRXVyb3BlL0JlcmxpblwiLFxuICBcIkV1cm9wZS9CZXJsaW5cIixcbiAgXCJFdXJvcGUvUm9tZVwiLFxuICBcIkV1cm9wZS9TdG9ja2hvbG1cIixcbiAgXCJFdXJvcGUvVmllbm5hXCIsXG4gIFwiQWZyaWNhL0FsZ2llcnNcIixcbiAgXCJFdXJvcGUvQnVjaGFyZXN0XCIsXG4gIFwiQWZyaWNhL0NhaXJvXCIsXG4gIFwiRXVyb3BlL0hlbHNpbmtpXCIsXG4gIFwiRXVyb3BlL0tpZXZcIixcbiAgXCJFdXJvcGUvUmlnYVwiLFxuICBcIkV1cm9wZS9Tb2ZpYVwiLFxuICBcIkV1cm9wZS9UYWxsaW5uXCIsXG4gIFwiRXVyb3BlL1ZpbG5pdXNcIixcbiAgXCJFdXJvcGUvQXRoZW5zXCIsXG4gIFwiRXVyb3BlL0lzdGFuYnVsXCIsXG4gIFwiRXVyb3BlL01pbnNrXCIsXG4gIFwiQXNpYS9KZXJ1c2FsZW1cIixcbiAgXCJBZnJpY2EvSGFyYXJlXCIsXG4gIFwiQWZyaWNhL0pvaGFubmVzYnVyZ1wiLFxuICBcIkV1cm9wZS9Nb3Njb3dcIixcbiAgXCJFdXJvcGUvTW9zY293XCIsXG4gIFwiRXVyb3BlL01vc2Nvd1wiLFxuICBcIkFzaWEvS3V3YWl0XCIsXG4gIFwiQXNpYS9SaXlhZGhcIixcbiAgXCJBZnJpY2EvTmFpcm9iaVwiLFxuICBcIkFzaWEvQmFnaGRhZFwiLFxuICBcIkFzaWEvVGVocmFuXCIsXG4gIFwiQXNpYS9NdXNjYXRcIixcbiAgXCJBc2lhL011c2NhdFwiLFxuICBcIkFzaWEvQmFrdVwiLFxuICBcIkFzaWEvVGJpbGlzaVwiLFxuICBcIkFzaWEvWWVyZXZhblwiLFxuICBcIkFzaWEvS2FidWxcIixcbiAgXCJBc2lhL1lla2F0ZXJpbmJ1cmdcIixcbiAgXCJBc2lhL0thcmFjaGlcIixcbiAgXCJBc2lhL0thcmFjaGlcIixcbiAgXCJBc2lhL1Rhc2hrZW50XCIsXG4gIFwiQXNpYS9Lb2xrYXRhXCIsXG4gIFwiQXNpYS9Lb2xrYXRhXCIsXG4gIFwiQXNpYS9Lb2xrYXRhXCIsXG4gIFwiQXNpYS9Lb2xrYXRhXCIsXG4gIFwiQXNpYS9LYXRobWFuZHVcIixcbiAgXCJBc2lhL0RoYWthXCIsXG4gIFwiQXNpYS9EaGFrYVwiLFxuICBcIkFzaWEvQ29sb21ib1wiLFxuICBcIkFzaWEvQWxtYXR5XCIsXG4gIFwiQXNpYS9Ob3Zvc2liaXJza1wiLFxuICBcIkFzaWEvUmFuZ29vblwiLFxuICBcIkFzaWEvQmFuZ2tva1wiLFxuICBcIkFzaWEvQmFuZ2tva1wiLFxuICBcIkFzaWEvSmFrYXJ0YVwiLFxuICBcIkFzaWEvS3Jhc25veWFyc2tcIixcbiAgXCJBc2lhL1NoYW5naGFpXCIsXG4gIFwiQXNpYS9DaG9uZ3FpbmdcIixcbiAgXCJBc2lhL0hvbmdfS29uZ1wiLFxuICBcIkFzaWEvVXJ1bXFpXCIsXG4gIFwiQXNpYS9LdWFsYV9MdW1wdXJcIixcbiAgXCJBc2lhL1NpbmdhcG9yZVwiLFxuICBcIkFzaWEvVGFpcGVpXCIsXG4gIFwiQXVzdHJhbGlhL1BlcnRoXCIsXG4gIFwiQXNpYS9Jcmt1dHNrXCIsXG4gIFwiQXNpYS9VbGFhbmJhYXRhclwiLFxuICBcIkFzaWEvU2VvdWxcIixcbiAgXCJBc2lhL1Rva3lvXCIsXG4gIFwiQXNpYS9Ub2t5b1wiLFxuICBcIkFzaWEvVG9reW9cIixcbiAgXCJBc2lhL1lha3V0c2tcIixcbiAgXCJBdXN0cmFsaWEvRGFyd2luXCIsXG4gIFwiQXVzdHJhbGlhL0FkZWxhaWRlXCIsXG4gIFwiQXVzdHJhbGlhL01lbGJvdXJuZVwiLFxuICBcIkF1c3RyYWxpYS9NZWxib3VybmVcIixcbiAgXCJBdXN0cmFsaWEvU3lkbmV5XCIsXG4gIFwiQXVzdHJhbGlhL0JyaXNiYW5lXCIsXG4gIFwiQXVzdHJhbGlhL0hvYmFydFwiLFxuICBcIkFzaWEvVmxhZGl2b3N0b2tcIixcbiAgXCJQYWNpZmljL0d1YW1cIixcbiAgXCJQYWNpZmljL1BvcnRfTW9yZXNieVwiLFxuICBcIkFzaWEvTWFnYWRhblwiLFxuICBcIkFzaWEvTWFnYWRhblwiLFxuICBcIlBhY2lmaWMvTm91bWVhXCIsXG4gIFwiUGFjaWZpYy9GaWppXCIsXG4gIFwiQXNpYS9LYW1jaGF0a2FcIixcbiAgXCJQYWNpZmljL01hanVyb1wiLFxuICBcIlBhY2lmaWMvQXVja2xhbmRcIixcbiAgXCJQYWNpZmljL0F1Y2tsYW5kXCIsXG4gIFwiUGFjaWZpYy9Ub25nYXRhcHVcIixcbiAgXCJQYWNpZmljL0Zha2FvZm9cIixcbiAgXCJQYWNpZmljL0FwaWFcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3tOYW1lLm5hbWV9XCIsXG4gIFwiI3tDb21wYW55Lm5hbWV9XCJcbl07XG4iLCJ2YXIgYXBwID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGFwcDtcbmFwcC5uYW1lID0gcmVxdWlyZShcIi4vbmFtZVwiKTtcbmFwcC52ZXJzaW9uID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmFwcC5hdXRob3IgPSByZXF1aXJlKFwiLi9hdXRob3JcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIlJlZGhvbGRcIixcbiAgXCJUcmVlZmxleFwiLFxuICBcIlRyaXBwbGVkZXhcIixcbiAgXCJLYW5sYW1cIixcbiAgXCJCaWd0YXhcIixcbiAgXCJEYWx0ZnJlc2hcIixcbiAgXCJUb3VnaGpveWZheFwiLFxuICBcIk1hdCBMYW0gVGFtXCIsXG4gIFwiT3Rjb21cIixcbiAgXCJUcmVzLVphcFwiLFxuICBcIlktU29sb3dhcm1cIixcbiAgXCJUcmVzb21cIixcbiAgXCJWb2x0c2lsbGFtXCIsXG4gIFwiQmlvZGV4XCIsXG4gIFwiR3JlZW5sYW1cIixcbiAgXCJWaXZhXCIsXG4gIFwiTWF0c29mdFwiLFxuICBcIlRlbXBcIixcbiAgXCJab29sYWJcIixcbiAgXCJTdWJpblwiLFxuICBcIlJhbmtcIixcbiAgXCJKb2JcIixcbiAgXCJTdHJpbmd0b3VnaFwiLFxuICBcIlRpblwiLFxuICBcIkl0XCIsXG4gIFwiSG9tZSBJbmdcIixcbiAgXCJaYW1pdFwiLFxuICBcIlNvbnNpbmdcIixcbiAgXCJLb25rbGFiXCIsXG4gIFwiQWxwaGFcIixcbiAgXCJMYXRsdXhcIixcbiAgXCJWb3lhdG91Y2hcIixcbiAgXCJBbHBoYXphcFwiLFxuICBcIkhvbGRsYW1pc1wiLFxuICBcIlphYW0tRG94XCIsXG4gIFwiU3ViLUV4XCIsXG4gIFwiUXVvIEx1eFwiLFxuICBcIkJhbWl0eVwiLFxuICBcIlZlbnRvc2FuemFwXCIsXG4gIFwiTG90c3RyaW5nXCIsXG4gIFwiSGF0aXR5XCIsXG4gIFwiVGVtcHNvZnRcIixcbiAgXCJPdmVyaG9sZFwiLFxuICBcIkZpeGZsZXhcIixcbiAgXCJLb25rbHV4XCIsXG4gIFwiWm9udHJheFwiLFxuICBcIlRhbXBmbGV4XCIsXG4gIFwiU3BhblwiLFxuICBcIk5hbWZpeFwiLFxuICBcIlRyYW5zY29mXCIsXG4gIFwiU3RpbVwiLFxuICBcIkZpeCBTYW5cIixcbiAgXCJTb25haXJcIixcbiAgXCJTdHJvbmdob2xkXCIsXG4gIFwiRmludG9uZVwiLFxuICBcIlktZmluZFwiLFxuICBcIk9wZWxhXCIsXG4gIFwiTG90bHV4XCIsXG4gIFwiUm9uc3RyaW5nXCIsXG4gIFwiWmF0aGluXCIsXG4gIFwiRHVvYmFtXCIsXG4gIFwiS2V5bGV4XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIjAuIy4jXCIsXG4gIFwiMC4jI1wiLFxuICBcIiMuIyNcIixcbiAgXCIjLiNcIixcbiAgXCIjLiMuI1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIyMDExLTEwLTEyXCIsXG4gIFwiMjAxMi0xMS0xMlwiLFxuICBcIjIwMTUtMTEtMTFcIixcbiAgXCIyMDEzLTktMTJcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiMTIzNC0yMTIxLTEyMjEtMTIxMVwiLFxuICBcIjEyMTItMTIyMS0xMTIxLTEyMzRcIixcbiAgXCIxMjExLTEyMjEtMTIzNC0yMjAxXCIsXG4gIFwiMTIyOC0xMjIxLTEyMjEtMTQzMVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJ2aXNhXCIsXG4gIFwibWFzdGVyY2FyZFwiLFxuICBcImFtZXJpY2FuZXhwcmVzc1wiLFxuICBcImRpc2NvdmVyXCJcbl07XG4iLCJ2YXIgYnVzaW5lc3MgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gYnVzaW5lc3M7XG5idXNpbmVzcy5jcmVkaXRfY2FyZF9udW1iZXJzID0gcmVxdWlyZShcIi4vY3JlZGl0X2NhcmRfbnVtYmVyc1wiKTtcbmJ1c2luZXNzLmNyZWRpdF9jYXJkX2V4cGlyeV9kYXRlcyA9IHJlcXVpcmUoXCIuL2NyZWRpdF9jYXJkX2V4cGlyeV9kYXRlc1wiKTtcbmJ1c2luZXNzLmNyZWRpdF9jYXJkX3R5cGVzID0gcmVxdWlyZShcIi4vY3JlZGl0X2NhcmRfdHlwZXNcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiMjIy0jIyMtIyMjI1wiLFxuICBcIigjIyMpICMjIy0jIyMjXCIsXG4gIFwiMS0jIyMtIyMjLSMjIyNcIixcbiAgXCIjIyMuIyMjLiMjIyNcIlxuXTtcbiIsInZhciBjZWxsX3Bob25lID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGNlbGxfcGhvbmU7XG5jZWxsX3Bob25lLmZvcm1hdHMgPSByZXF1aXJlKFwiLi9mb3JtYXRzXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJyZWRcIixcbiAgXCJncmVlblwiLFxuICBcImJsdWVcIixcbiAgXCJ5ZWxsb3dcIixcbiAgXCJwdXJwbGVcIixcbiAgXCJtaW50IGdyZWVuXCIsXG4gIFwidGVhbFwiLFxuICBcIndoaXRlXCIsXG4gIFwiYmxhY2tcIixcbiAgXCJvcmFuZ2VcIixcbiAgXCJwaW5rXCIsXG4gIFwiZ3JleVwiLFxuICBcIm1hcm9vblwiLFxuICBcInZpb2xldFwiLFxuICBcInR1cnF1b2lzZVwiLFxuICBcInRhblwiLFxuICBcInNreSBibHVlXCIsXG4gIFwic2FsbW9uXCIsXG4gIFwicGx1bVwiLFxuICBcIm9yY2hpZFwiLFxuICBcIm9saXZlXCIsXG4gIFwibWFnZW50YVwiLFxuICBcImxpbWVcIixcbiAgXCJpdm9yeVwiLFxuICBcImluZGlnb1wiLFxuICBcImdvbGRcIixcbiAgXCJmdWNoc2lhXCIsXG4gIFwiY3lhblwiLFxuICBcImF6dXJlXCIsXG4gIFwibGF2ZW5kZXJcIixcbiAgXCJzaWx2ZXJcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQm9va3NcIixcbiAgXCJNb3ZpZXNcIixcbiAgXCJNdXNpY1wiLFxuICBcIkdhbWVzXCIsXG4gIFwiRWxlY3Ryb25pY3NcIixcbiAgXCJDb21wdXRlcnNcIixcbiAgXCJIb21lXCIsXG4gIFwiR2FyZGVuXCIsXG4gIFwiVG9vbHNcIixcbiAgXCJHcm9jZXJ5XCIsXG4gIFwiSGVhbHRoXCIsXG4gIFwiQmVhdXR5XCIsXG4gIFwiVG95c1wiLFxuICBcIktpZHNcIixcbiAgXCJCYWJ5XCIsXG4gIFwiQ2xvdGhpbmdcIixcbiAgXCJTaG9lc1wiLFxuICBcIkpld2VsZXJ5XCIsXG4gIFwiU3BvcnRzXCIsXG4gIFwiT3V0ZG9vcnNcIixcbiAgXCJBdXRvbW90aXZlXCIsXG4gIFwiSW5kdXN0cmlhbFwiXG5dO1xuIiwidmFyIGNvbW1lcmNlID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGNvbW1lcmNlO1xuY29tbWVyY2UuY29sb3IgPSByZXF1aXJlKFwiLi9jb2xvclwiKTtcbmNvbW1lcmNlLmRlcGFydG1lbnQgPSByZXF1aXJlKFwiLi9kZXBhcnRtZW50XCIpO1xuY29tbWVyY2UucHJvZHVjdF9uYW1lID0gcmVxdWlyZShcIi4vcHJvZHVjdF9uYW1lXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IHtcbiAgXCJhZGplY3RpdmVcIjogW1xuICAgIFwiU21hbGxcIixcbiAgICBcIkVyZ29ub21pY1wiLFxuICAgIFwiUnVzdGljXCIsXG4gICAgXCJJbnRlbGxpZ2VudFwiLFxuICAgIFwiR29yZ2VvdXNcIixcbiAgICBcIkluY3JlZGlibGVcIixcbiAgICBcIkZhbnRhc3RpY1wiLFxuICAgIFwiUHJhY3RpY2FsXCIsXG4gICAgXCJTbGVla1wiLFxuICAgIFwiQXdlc29tZVwiLFxuICAgIFwiR2VuZXJpY1wiLFxuICAgIFwiSGFuZGNyYWZ0ZWRcIixcbiAgICBcIkhhbmRtYWRlXCIsXG4gICAgXCJMaWNlbnNlZFwiLFxuICAgIFwiUmVmaW5lZFwiLFxuICAgIFwiVW5icmFuZGVkXCIsXG4gICAgXCJUYXN0eVwiXG4gIF0sXG4gIFwibWF0ZXJpYWxcIjogW1xuICAgIFwiU3RlZWxcIixcbiAgICBcIldvb2RlblwiLFxuICAgIFwiQ29uY3JldGVcIixcbiAgICBcIlBsYXN0aWNcIixcbiAgICBcIkNvdHRvblwiLFxuICAgIFwiR3Jhbml0ZVwiLFxuICAgIFwiUnViYmVyXCIsXG4gICAgXCJNZXRhbFwiLFxuICAgIFwiU29mdFwiLFxuICAgIFwiRnJlc2hcIixcbiAgICBcIkZyb3plblwiXG4gIF0sXG4gIFwicHJvZHVjdFwiOiBbXG4gICAgXCJDaGFpclwiLFxuICAgIFwiQ2FyXCIsXG4gICAgXCJDb21wdXRlclwiLFxuICAgIFwiS2V5Ym9hcmRcIixcbiAgICBcIk1vdXNlXCIsXG4gICAgXCJCaWtlXCIsXG4gICAgXCJCYWxsXCIsXG4gICAgXCJHbG92ZXNcIixcbiAgICBcIlBhbnRzXCIsXG4gICAgXCJTaGlydFwiLFxuICAgIFwiVGFibGVcIixcbiAgICBcIlNob2VzXCIsXG4gICAgXCJIYXRcIixcbiAgICBcIlRvd2Vsc1wiLFxuICAgIFwiU29hcFwiLFxuICAgIFwiVHVuYVwiLFxuICAgIFwiQ2hpY2tlblwiLFxuICAgIFwiRmlzaFwiLFxuICAgIFwiQ2hlZXNlXCIsXG4gICAgXCJCYWNvblwiLFxuICAgIFwiUGl6emFcIixcbiAgICBcIlNhbGFkXCIsXG4gICAgXCJTYXVzYWdlc1wiLFxuICAgIFwiQ2hpcHNcIlxuICBdXG59O1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBZGFwdGl2ZVwiLFxuICBcIkFkdmFuY2VkXCIsXG4gIFwiQW1lbGlvcmF0ZWRcIixcbiAgXCJBc3NpbWlsYXRlZFwiLFxuICBcIkF1dG9tYXRlZFwiLFxuICBcIkJhbGFuY2VkXCIsXG4gIFwiQnVzaW5lc3MtZm9jdXNlZFwiLFxuICBcIkNlbnRyYWxpemVkXCIsXG4gIFwiQ2xvbmVkXCIsXG4gIFwiQ29tcGF0aWJsZVwiLFxuICBcIkNvbmZpZ3VyYWJsZVwiLFxuICBcIkNyb3NzLWdyb3VwXCIsXG4gIFwiQ3Jvc3MtcGxhdGZvcm1cIixcbiAgXCJDdXN0b21lci1mb2N1c2VkXCIsXG4gIFwiQ3VzdG9taXphYmxlXCIsXG4gIFwiRGVjZW50cmFsaXplZFwiLFxuICBcIkRlLWVuZ2luZWVyZWRcIixcbiAgXCJEZXZvbHZlZFwiLFxuICBcIkRpZ2l0aXplZFwiLFxuICBcIkRpc3RyaWJ1dGVkXCIsXG4gIFwiRGl2ZXJzZVwiLFxuICBcIkRvd24tc2l6ZWRcIixcbiAgXCJFbmhhbmNlZFwiLFxuICBcIkVudGVycHJpc2Utd2lkZVwiLFxuICBcIkVyZ29ub21pY1wiLFxuICBcIkV4Y2x1c2l2ZVwiLFxuICBcIkV4cGFuZGVkXCIsXG4gIFwiRXh0ZW5kZWRcIixcbiAgXCJGYWNlIHRvIGZhY2VcIixcbiAgXCJGb2N1c2VkXCIsXG4gIFwiRnJvbnQtbGluZVwiLFxuICBcIkZ1bGx5LWNvbmZpZ3VyYWJsZVwiLFxuICBcIkZ1bmN0aW9uLWJhc2VkXCIsXG4gIFwiRnVuZGFtZW50YWxcIixcbiAgXCJGdXR1cmUtcHJvb2ZlZFwiLFxuICBcIkdyYXNzLXJvb3RzXCIsXG4gIFwiSG9yaXpvbnRhbFwiLFxuICBcIkltcGxlbWVudGVkXCIsXG4gIFwiSW5ub3ZhdGl2ZVwiLFxuICBcIkludGVncmF0ZWRcIixcbiAgXCJJbnR1aXRpdmVcIixcbiAgXCJJbnZlcnNlXCIsXG4gIFwiTWFuYWdlZFwiLFxuICBcIk1hbmRhdG9yeVwiLFxuICBcIk1vbml0b3JlZFwiLFxuICBcIk11bHRpLWNoYW5uZWxsZWRcIixcbiAgXCJNdWx0aS1sYXRlcmFsXCIsXG4gIFwiTXVsdGktbGF5ZXJlZFwiLFxuICBcIk11bHRpLXRpZXJlZFwiLFxuICBcIk5ldHdvcmtlZFwiLFxuICBcIk9iamVjdC1iYXNlZFwiLFxuICBcIk9wZW4tYXJjaGl0ZWN0ZWRcIixcbiAgXCJPcGVuLXNvdXJjZVwiLFxuICBcIk9wZXJhdGl2ZVwiLFxuICBcIk9wdGltaXplZFwiLFxuICBcIk9wdGlvbmFsXCIsXG4gIFwiT3JnYW5pY1wiLFxuICBcIk9yZ2FuaXplZFwiLFxuICBcIlBlcnNldmVyaW5nXCIsXG4gIFwiUGVyc2lzdGVudFwiLFxuICBcIlBoYXNlZFwiLFxuICBcIlBvbGFyaXNlZFwiLFxuICBcIlByZS1lbXB0aXZlXCIsXG4gIFwiUHJvYWN0aXZlXCIsXG4gIFwiUHJvZml0LWZvY3VzZWRcIixcbiAgXCJQcm9mb3VuZFwiLFxuICBcIlByb2dyYW1tYWJsZVwiLFxuICBcIlByb2dyZXNzaXZlXCIsXG4gIFwiUHVibGljLWtleVwiLFxuICBcIlF1YWxpdHktZm9jdXNlZFwiLFxuICBcIlJlYWN0aXZlXCIsXG4gIFwiUmVhbGlnbmVkXCIsXG4gIFwiUmUtY29udGV4dHVhbGl6ZWRcIixcbiAgXCJSZS1lbmdpbmVlcmVkXCIsXG4gIFwiUmVkdWNlZFwiLFxuICBcIlJldmVyc2UtZW5naW5lZXJlZFwiLFxuICBcIlJpZ2h0LXNpemVkXCIsXG4gIFwiUm9idXN0XCIsXG4gIFwiU2VhbWxlc3NcIixcbiAgXCJTZWN1cmVkXCIsXG4gIFwiU2VsZi1lbmFibGluZ1wiLFxuICBcIlNoYXJhYmxlXCIsXG4gIFwiU3RhbmQtYWxvbmVcIixcbiAgXCJTdHJlYW1saW5lZFwiLFxuICBcIlN3aXRjaGFibGVcIixcbiAgXCJTeW5jaHJvbmlzZWRcIixcbiAgXCJTeW5lcmdpc3RpY1wiLFxuICBcIlN5bmVyZ2l6ZWRcIixcbiAgXCJUZWFtLW9yaWVudGVkXCIsXG4gIFwiVG90YWxcIixcbiAgXCJUcmlwbGUtYnVmZmVyZWRcIixcbiAgXCJVbml2ZXJzYWxcIixcbiAgXCJVcC1zaXplZFwiLFxuICBcIlVwZ3JhZGFibGVcIixcbiAgXCJVc2VyLWNlbnRyaWNcIixcbiAgXCJVc2VyLWZyaWVuZGx5XCIsXG4gIFwiVmVyc2F0aWxlXCIsXG4gIFwiVmlydHVhbFwiLFxuICBcIlZpc2lvbmFyeVwiLFxuICBcIlZpc2lvbi1vcmllbnRlZFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJjbGlja3MtYW5kLW1vcnRhclwiLFxuICBcInZhbHVlLWFkZGVkXCIsXG4gIFwidmVydGljYWxcIixcbiAgXCJwcm9hY3RpdmVcIixcbiAgXCJyb2J1c3RcIixcbiAgXCJyZXZvbHV0aW9uYXJ5XCIsXG4gIFwic2NhbGFibGVcIixcbiAgXCJsZWFkaW5nLWVkZ2VcIixcbiAgXCJpbm5vdmF0aXZlXCIsXG4gIFwiaW50dWl0aXZlXCIsXG4gIFwic3RyYXRlZ2ljXCIsXG4gIFwiZS1idXNpbmVzc1wiLFxuICBcIm1pc3Npb24tY3JpdGljYWxcIixcbiAgXCJzdGlja3lcIixcbiAgXCJvbmUtdG8tb25lXCIsXG4gIFwiMjQvN1wiLFxuICBcImVuZC10by1lbmRcIixcbiAgXCJnbG9iYWxcIixcbiAgXCJCMkJcIixcbiAgXCJCMkNcIixcbiAgXCJncmFudWxhclwiLFxuICBcImZyaWN0aW9ubGVzc1wiLFxuICBcInZpcnR1YWxcIixcbiAgXCJ2aXJhbFwiLFxuICBcImR5bmFtaWNcIixcbiAgXCIyNC8zNjVcIixcbiAgXCJiZXN0LW9mLWJyZWVkXCIsXG4gIFwia2lsbGVyXCIsXG4gIFwibWFnbmV0aWNcIixcbiAgXCJibGVlZGluZy1lZGdlXCIsXG4gIFwid2ViLWVuYWJsZWRcIixcbiAgXCJpbnRlcmFjdGl2ZVwiLFxuICBcImRvdC1jb21cIixcbiAgXCJzZXh5XCIsXG4gIFwiYmFjay1lbmRcIixcbiAgXCJyZWFsLXRpbWVcIixcbiAgXCJlZmZpY2llbnRcIixcbiAgXCJmcm9udC1lbmRcIixcbiAgXCJkaXN0cmlidXRlZFwiLFxuICBcInNlYW1sZXNzXCIsXG4gIFwiZXh0ZW5zaWJsZVwiLFxuICBcInR1cm4ta2V5XCIsXG4gIFwid29ybGQtY2xhc3NcIixcbiAgXCJvcGVuLXNvdXJjZVwiLFxuICBcImNyb3NzLXBsYXRmb3JtXCIsXG4gIFwiY3Jvc3MtbWVkaWFcIixcbiAgXCJzeW5lcmdpc3RpY1wiLFxuICBcImJyaWNrcy1hbmQtY2xpY2tzXCIsXG4gIFwib3V0LW9mLXRoZS1ib3hcIixcbiAgXCJlbnRlcnByaXNlXCIsXG4gIFwiaW50ZWdyYXRlZFwiLFxuICBcImltcGFjdGZ1bFwiLFxuICBcIndpcmVsZXNzXCIsXG4gIFwidHJhbnNwYXJlbnRcIixcbiAgXCJuZXh0LWdlbmVyYXRpb25cIixcbiAgXCJjdXR0aW5nLWVkZ2VcIixcbiAgXCJ1c2VyLWNlbnRyaWNcIixcbiAgXCJ2aXNpb25hcnlcIixcbiAgXCJjdXN0b21pemVkXCIsXG4gIFwidWJpcXVpdG91c1wiLFxuICBcInBsdWctYW5kLXBsYXlcIixcbiAgXCJjb2xsYWJvcmF0aXZlXCIsXG4gIFwiY29tcGVsbGluZ1wiLFxuICBcImhvbGlzdGljXCIsXG4gIFwicmljaFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJzeW5lcmdpZXNcIixcbiAgXCJ3ZWItcmVhZGluZXNzXCIsXG4gIFwicGFyYWRpZ21zXCIsXG4gIFwibWFya2V0c1wiLFxuICBcInBhcnRuZXJzaGlwc1wiLFxuICBcImluZnJhc3RydWN0dXJlc1wiLFxuICBcInBsYXRmb3Jtc1wiLFxuICBcImluaXRpYXRpdmVzXCIsXG4gIFwiY2hhbm5lbHNcIixcbiAgXCJleWViYWxsc1wiLFxuICBcImNvbW11bml0aWVzXCIsXG4gIFwiUk9JXCIsXG4gIFwic29sdXRpb25zXCIsXG4gIFwiZS10YWlsZXJzXCIsXG4gIFwiZS1zZXJ2aWNlc1wiLFxuICBcImFjdGlvbi1pdGVtc1wiLFxuICBcInBvcnRhbHNcIixcbiAgXCJuaWNoZXNcIixcbiAgXCJ0ZWNobm9sb2dpZXNcIixcbiAgXCJjb250ZW50XCIsXG4gIFwidm9ydGFsc1wiLFxuICBcInN1cHBseS1jaGFpbnNcIixcbiAgXCJjb252ZXJnZW5jZVwiLFxuICBcInJlbGF0aW9uc2hpcHNcIixcbiAgXCJhcmNoaXRlY3R1cmVzXCIsXG4gIFwiaW50ZXJmYWNlc1wiLFxuICBcImUtbWFya2V0c1wiLFxuICBcImUtY29tbWVyY2VcIixcbiAgXCJzeXN0ZW1zXCIsXG4gIFwiYmFuZHdpZHRoXCIsXG4gIFwiaW5mb21lZGlhcmllc1wiLFxuICBcIm1vZGVsc1wiLFxuICBcIm1pbmRzaGFyZVwiLFxuICBcImRlbGl2ZXJhYmxlc1wiLFxuICBcInVzZXJzXCIsXG4gIFwic2NoZW1hc1wiLFxuICBcIm5ldHdvcmtzXCIsXG4gIFwiYXBwbGljYXRpb25zXCIsXG4gIFwibWV0cmljc1wiLFxuICBcImUtYnVzaW5lc3NcIixcbiAgXCJmdW5jdGlvbmFsaXRpZXNcIixcbiAgXCJleHBlcmllbmNlc1wiLFxuICBcIndlYiBzZXJ2aWNlc1wiLFxuICBcIm1ldGhvZG9sb2dpZXNcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiaW1wbGVtZW50XCIsXG4gIFwidXRpbGl6ZVwiLFxuICBcImludGVncmF0ZVwiLFxuICBcInN0cmVhbWxpbmVcIixcbiAgXCJvcHRpbWl6ZVwiLFxuICBcImV2b2x2ZVwiLFxuICBcInRyYW5zZm9ybVwiLFxuICBcImVtYnJhY2VcIixcbiAgXCJlbmFibGVcIixcbiAgXCJvcmNoZXN0cmF0ZVwiLFxuICBcImxldmVyYWdlXCIsXG4gIFwicmVpbnZlbnRcIixcbiAgXCJhZ2dyZWdhdGVcIixcbiAgXCJhcmNoaXRlY3RcIixcbiAgXCJlbmhhbmNlXCIsXG4gIFwiaW5jZW50aXZpemVcIixcbiAgXCJtb3JwaFwiLFxuICBcImVtcG93ZXJcIixcbiAgXCJlbnZpc2lvbmVlclwiLFxuICBcIm1vbmV0aXplXCIsXG4gIFwiaGFybmVzc1wiLFxuICBcImZhY2lsaXRhdGVcIixcbiAgXCJzZWl6ZVwiLFxuICBcImRpc2ludGVybWVkaWF0ZVwiLFxuICBcInN5bmVyZ2l6ZVwiLFxuICBcInN0cmF0ZWdpemVcIixcbiAgXCJkZXBsb3lcIixcbiAgXCJicmFuZFwiLFxuICBcImdyb3dcIixcbiAgXCJ0YXJnZXRcIixcbiAgXCJzeW5kaWNhdGVcIixcbiAgXCJzeW50aGVzaXplXCIsXG4gIFwiZGVsaXZlclwiLFxuICBcIm1lc2hcIixcbiAgXCJpbmN1YmF0ZVwiLFxuICBcImVuZ2FnZVwiLFxuICBcIm1heGltaXplXCIsXG4gIFwiYmVuY2htYXJrXCIsXG4gIFwiZXhwZWRpdGVcIixcbiAgXCJyZWludGVybWVkaWF0ZVwiLFxuICBcIndoaXRlYm9hcmRcIixcbiAgXCJ2aXN1YWxpemVcIixcbiAgXCJyZXB1cnBvc2VcIixcbiAgXCJpbm5vdmF0ZVwiLFxuICBcInNjYWxlXCIsXG4gIFwidW5sZWFzaFwiLFxuICBcImRyaXZlXCIsXG4gIFwiZXh0ZW5kXCIsXG4gIFwiZW5naW5lZXJcIixcbiAgXCJyZXZvbHV0aW9uaXplXCIsXG4gIFwiZ2VuZXJhdGVcIixcbiAgXCJleHBsb2l0XCIsXG4gIFwidHJhbnNpdGlvblwiLFxuICBcImUtZW5hYmxlXCIsXG4gIFwiaXRlcmF0ZVwiLFxuICBcImN1bHRpdmF0ZVwiLFxuICBcIm1hdHJpeFwiLFxuICBcInByb2R1Y3RpemVcIixcbiAgXCJyZWRlZmluZVwiLFxuICBcInJlY29udGV4dHVhbGl6ZVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIyNCBob3VyXCIsXG4gIFwiMjQvN1wiLFxuICBcIjNyZCBnZW5lcmF0aW9uXCIsXG4gIFwiNHRoIGdlbmVyYXRpb25cIixcbiAgXCI1dGggZ2VuZXJhdGlvblwiLFxuICBcIjZ0aCBnZW5lcmF0aW9uXCIsXG4gIFwiYWN0dWF0aW5nXCIsXG4gIFwiYW5hbHl6aW5nXCIsXG4gIFwiYXN5bW1ldHJpY1wiLFxuICBcImFzeW5jaHJvbm91c1wiLFxuICBcImF0dGl0dWRlLW9yaWVudGVkXCIsXG4gIFwiYmFja2dyb3VuZFwiLFxuICBcImJhbmR3aWR0aC1tb25pdG9yZWRcIixcbiAgXCJiaS1kaXJlY3Rpb25hbFwiLFxuICBcImJpZnVyY2F0ZWRcIixcbiAgXCJib3R0b20tbGluZVwiLFxuICBcImNsZWFyLXRoaW5raW5nXCIsXG4gIFwiY2xpZW50LWRyaXZlblwiLFxuICBcImNsaWVudC1zZXJ2ZXJcIixcbiAgXCJjb2hlcmVudFwiLFxuICBcImNvaGVzaXZlXCIsXG4gIFwiY29tcG9zaXRlXCIsXG4gIFwiY29udGV4dC1zZW5zaXRpdmVcIixcbiAgXCJjb250ZXh0dWFsbHktYmFzZWRcIixcbiAgXCJjb250ZW50LWJhc2VkXCIsXG4gIFwiZGVkaWNhdGVkXCIsXG4gIFwiZGVtYW5kLWRyaXZlblwiLFxuICBcImRpZGFjdGljXCIsXG4gIFwiZGlyZWN0aW9uYWxcIixcbiAgXCJkaXNjcmV0ZVwiLFxuICBcImRpc2ludGVybWVkaWF0ZVwiLFxuICBcImR5bmFtaWNcIixcbiAgXCJlY28tY2VudHJpY1wiLFxuICBcImVtcG93ZXJpbmdcIixcbiAgXCJlbmNvbXBhc3NpbmdcIixcbiAgXCJldmVuLWtlZWxlZFwiLFxuICBcImV4ZWN1dGl2ZVwiLFxuICBcImV4cGxpY2l0XCIsXG4gIFwiZXh1ZGluZ1wiLFxuICBcImZhdWx0LXRvbGVyYW50XCIsXG4gIFwiZm9yZWdyb3VuZFwiLFxuICBcImZyZXNoLXRoaW5raW5nXCIsXG4gIFwiZnVsbC1yYW5nZVwiLFxuICBcImdsb2JhbFwiLFxuICBcImdyaWQtZW5hYmxlZFwiLFxuICBcImhldXJpc3RpY1wiLFxuICBcImhpZ2gtbGV2ZWxcIixcbiAgXCJob2xpc3RpY1wiLFxuICBcImhvbW9nZW5lb3VzXCIsXG4gIFwiaHVtYW4tcmVzb3VyY2VcIixcbiAgXCJoeWJyaWRcIixcbiAgXCJpbXBhY3RmdWxcIixcbiAgXCJpbmNyZW1lbnRhbFwiLFxuICBcImludGFuZ2libGVcIixcbiAgXCJpbnRlcmFjdGl2ZVwiLFxuICBcImludGVybWVkaWF0ZVwiLFxuICBcImxlYWRpbmcgZWRnZVwiLFxuICBcImxvY2FsXCIsXG4gIFwibG9naXN0aWNhbFwiLFxuICBcIm1heGltaXplZFwiLFxuICBcIm1ldGhvZGljYWxcIixcbiAgXCJtaXNzaW9uLWNyaXRpY2FsXCIsXG4gIFwibW9iaWxlXCIsXG4gIFwibW9kdWxhclwiLFxuICBcIm1vdGl2YXRpbmdcIixcbiAgXCJtdWx0aW1lZGlhXCIsXG4gIFwibXVsdGktc3RhdGVcIixcbiAgXCJtdWx0aS10YXNraW5nXCIsXG4gIFwibmF0aW9uYWxcIixcbiAgXCJuZWVkcy1iYXNlZFwiLFxuICBcIm5ldXRyYWxcIixcbiAgXCJuZXh0IGdlbmVyYXRpb25cIixcbiAgXCJub24tdm9sYXRpbGVcIixcbiAgXCJvYmplY3Qtb3JpZW50ZWRcIixcbiAgXCJvcHRpbWFsXCIsXG4gIFwib3B0aW1pemluZ1wiLFxuICBcInJhZGljYWxcIixcbiAgXCJyZWFsLXRpbWVcIixcbiAgXCJyZWNpcHJvY2FsXCIsXG4gIFwicmVnaW9uYWxcIixcbiAgXCJyZXNwb25zaXZlXCIsXG4gIFwic2NhbGFibGVcIixcbiAgXCJzZWNvbmRhcnlcIixcbiAgXCJzb2x1dGlvbi1vcmllbnRlZFwiLFxuICBcInN0YWJsZVwiLFxuICBcInN0YXRpY1wiLFxuICBcInN5c3RlbWF0aWNcIixcbiAgXCJzeXN0ZW1pY1wiLFxuICBcInN5c3RlbS13b3J0aHlcIixcbiAgXCJ0YW5naWJsZVwiLFxuICBcInRlcnRpYXJ5XCIsXG4gIFwidHJhbnNpdGlvbmFsXCIsXG4gIFwidW5pZm9ybVwiLFxuICBcInVwd2FyZC10cmVuZGluZ1wiLFxuICBcInVzZXItZmFjaW5nXCIsXG4gIFwidmFsdWUtYWRkZWRcIixcbiAgXCJ3ZWItZW5hYmxlZFwiLFxuICBcIndlbGwtbW9kdWxhdGVkXCIsXG4gIFwiemVybyBhZG1pbmlzdHJhdGlvblwiLFxuICBcInplcm8gZGVmZWN0XCIsXG4gIFwiemVybyB0b2xlcmFuY2VcIlxuXTtcbiIsInZhciBjb21wYW55ID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGNvbXBhbnk7XG5jb21wYW55LnN1ZmZpeCA9IHJlcXVpcmUoXCIuL3N1ZmZpeFwiKTtcbmNvbXBhbnkuYWRqZWN0aXZlID0gcmVxdWlyZShcIi4vYWRqZWN0aXZlXCIpO1xuY29tcGFueS5kZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vZGVzY3JpcHRvclwiKTtcbmNvbXBhbnkubm91biA9IHJlcXVpcmUoXCIuL25vdW5cIik7XG5jb21wYW55LmJzX3ZlcmIgPSByZXF1aXJlKFwiLi9ic192ZXJiXCIpO1xuY29tcGFueS5ic19hZGplY3RpdmUgPSByZXF1aXJlKFwiLi9ic19hZGplY3RpdmVcIik7XG5jb21wYW55LmJzX25vdW4gPSByZXF1aXJlKFwiLi9ic19ub3VuXCIpO1xuY29tcGFueS5uYW1lID0gcmVxdWlyZShcIi4vbmFtZVwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3tOYW1lLmxhc3RfbmFtZX0gI3tzdWZmaXh9XCIsXG4gIFwiI3tOYW1lLmxhc3RfbmFtZX0tI3tOYW1lLmxhc3RfbmFtZX1cIixcbiAgXCIje05hbWUubGFzdF9uYW1lfSwgI3tOYW1lLmxhc3RfbmFtZX0gYW5kICN7TmFtZS5sYXN0X25hbWV9XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImFiaWxpdHlcIixcbiAgXCJhY2Nlc3NcIixcbiAgXCJhZGFwdGVyXCIsXG4gIFwiYWxnb3JpdGhtXCIsXG4gIFwiYWxsaWFuY2VcIixcbiAgXCJhbmFseXplclwiLFxuICBcImFwcGxpY2F0aW9uXCIsXG4gIFwiYXBwcm9hY2hcIixcbiAgXCJhcmNoaXRlY3R1cmVcIixcbiAgXCJhcmNoaXZlXCIsXG4gIFwiYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2VcIixcbiAgXCJhcnJheVwiLFxuICBcImF0dGl0dWRlXCIsXG4gIFwiYmVuY2htYXJrXCIsXG4gIFwiYnVkZ2V0YXJ5IG1hbmFnZW1lbnRcIixcbiAgXCJjYXBhYmlsaXR5XCIsXG4gIFwiY2FwYWNpdHlcIixcbiAgXCJjaGFsbGVuZ2VcIixcbiAgXCJjaXJjdWl0XCIsXG4gIFwiY29sbGFib3JhdGlvblwiLFxuICBcImNvbXBsZXhpdHlcIixcbiAgXCJjb25jZXB0XCIsXG4gIFwiY29uZ2xvbWVyYXRpb25cIixcbiAgXCJjb250aW5nZW5jeVwiLFxuICBcImNvcmVcIixcbiAgXCJjdXN0b21lciBsb3lhbHR5XCIsXG4gIFwiZGF0YWJhc2VcIixcbiAgXCJkYXRhLXdhcmVob3VzZVwiLFxuICBcImRlZmluaXRpb25cIixcbiAgXCJlbXVsYXRpb25cIixcbiAgXCJlbmNvZGluZ1wiLFxuICBcImVuY3J5cHRpb25cIixcbiAgXCJleHRyYW5ldFwiLFxuICBcImZpcm13YXJlXCIsXG4gIFwiZmxleGliaWxpdHlcIixcbiAgXCJmb2N1cyBncm91cFwiLFxuICBcImZvcmVjYXN0XCIsXG4gIFwiZnJhbWVcIixcbiAgXCJmcmFtZXdvcmtcIixcbiAgXCJmdW5jdGlvblwiLFxuICBcImZ1bmN0aW9uYWxpdGllc1wiLFxuICBcIkdyYXBoaWMgSW50ZXJmYWNlXCIsXG4gIFwiZ3JvdXB3YXJlXCIsXG4gIFwiR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlXCIsXG4gIFwiaGFyZHdhcmVcIixcbiAgXCJoZWxwLWRlc2tcIixcbiAgXCJoaWVyYXJjaHlcIixcbiAgXCJodWJcIixcbiAgXCJpbXBsZW1lbnRhdGlvblwiLFxuICBcImluZm8tbWVkaWFyaWVzXCIsXG4gIFwiaW5mcmFzdHJ1Y3R1cmVcIixcbiAgXCJpbml0aWF0aXZlXCIsXG4gIFwiaW5zdGFsbGF0aW9uXCIsXG4gIFwiaW5zdHJ1Y3Rpb24gc2V0XCIsXG4gIFwiaW50ZXJmYWNlXCIsXG4gIFwiaW50ZXJuZXQgc29sdXRpb25cIixcbiAgXCJpbnRyYW5ldFwiLFxuICBcImtub3dsZWRnZSB1c2VyXCIsXG4gIFwia25vd2xlZGdlIGJhc2VcIixcbiAgXCJsb2NhbCBhcmVhIG5ldHdvcmtcIixcbiAgXCJsZXZlcmFnZVwiLFxuICBcIm1hdHJpY2VzXCIsXG4gIFwibWF0cml4XCIsXG4gIFwibWV0aG9kb2xvZ3lcIixcbiAgXCJtaWRkbGV3YXJlXCIsXG4gIFwibWlncmF0aW9uXCIsXG4gIFwibW9kZWxcIixcbiAgXCJtb2RlcmF0b3JcIixcbiAgXCJtb25pdG9yaW5nXCIsXG4gIFwibW9yYXRvcml1bVwiLFxuICBcIm5ldXJhbC1uZXRcIixcbiAgXCJvcGVuIGFyY2hpdGVjdHVyZVwiLFxuICBcIm9wZW4gc3lzdGVtXCIsXG4gIFwib3JjaGVzdHJhdGlvblwiLFxuICBcInBhcmFkaWdtXCIsXG4gIFwicGFyYWxsZWxpc21cIixcbiAgXCJwb2xpY3lcIixcbiAgXCJwb3J0YWxcIixcbiAgXCJwcmljaW5nIHN0cnVjdHVyZVwiLFxuICBcInByb2Nlc3MgaW1wcm92ZW1lbnRcIixcbiAgXCJwcm9kdWN0XCIsXG4gIFwicHJvZHVjdGl2aXR5XCIsXG4gIFwicHJvamVjdFwiLFxuICBcInByb2plY3Rpb25cIixcbiAgXCJwcm90b2NvbFwiLFxuICBcInNlY3VyZWQgbGluZVwiLFxuICBcInNlcnZpY2UtZGVza1wiLFxuICBcInNvZnR3YXJlXCIsXG4gIFwic29sdXRpb25cIixcbiAgXCJzdGFuZGFyZGl6YXRpb25cIixcbiAgXCJzdHJhdGVneVwiLFxuICBcInN0cnVjdHVyZVwiLFxuICBcInN1Y2Nlc3NcIixcbiAgXCJzdXBlcnN0cnVjdHVyZVwiLFxuICBcInN1cHBvcnRcIixcbiAgXCJzeW5lcmd5XCIsXG4gIFwic3lzdGVtIGVuZ2luZVwiLFxuICBcInRhc2stZm9yY2VcIixcbiAgXCJ0aHJvdWdocHV0XCIsXG4gIFwidGltZS1mcmFtZVwiLFxuICBcInRvb2xzZXRcIixcbiAgXCJ1dGlsaXNhdGlvblwiLFxuICBcIndlYnNpdGVcIixcbiAgXCJ3b3JrZm9yY2VcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiSW5jXCIsXG4gIFwiYW5kIFNvbnNcIixcbiAgXCJMTENcIixcbiAgXCJHcm91cFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvMzQjIy0jIyMjIyMtIyMjI0wvXCIsXG4gIFwiLzM3IyMtIyMjIyMjLSMjIyNML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvMzBbMC01XSMtIyMjIyMjLSMjI0wvXCIsXG4gIFwiLzM2OCMtIyMjIyMjLSMjI0wvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi82MDExLSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NSMjLSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NFs0LTldIy0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvNjAxMS02MiMjLSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NSMjLTYyIyMtIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY0WzQtOV0jLTYyIyMtIyMjIy0jIyMjLSMjI0wvXCJcbl07XG4iLCJ2YXIgY3JlZGl0X2NhcmQgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gY3JlZGl0X2NhcmQ7XG5jcmVkaXRfY2FyZC52aXNhID0gcmVxdWlyZShcIi4vdmlzYVwiKTtcbmNyZWRpdF9jYXJkLm1hc3RlcmNhcmQgPSByZXF1aXJlKFwiLi9tYXN0ZXJjYXJkXCIpO1xuY3JlZGl0X2NhcmQuZGlzY292ZXIgPSByZXF1aXJlKFwiLi9kaXNjb3ZlclwiKTtcbmNyZWRpdF9jYXJkLmFtZXJpY2FuX2V4cHJlc3MgPSByZXF1aXJlKFwiLi9hbWVyaWNhbl9leHByZXNzXCIpO1xuY3JlZGl0X2NhcmQuZGluZXJzX2NsdWIgPSByZXF1aXJlKFwiLi9kaW5lcnNfY2x1YlwiKTtcbmNyZWRpdF9jYXJkLmpjYiA9IHJlcXVpcmUoXCIuL2pjYlwiKTtcbmNyZWRpdF9jYXJkLnN3aXRjaCA9IHJlcXVpcmUoXCIuL3N3aXRjaFwiKTtcbmNyZWRpdF9jYXJkLnNvbG8gPSByZXF1aXJlKFwiLi9zb2xvXCIpO1xuY3JlZGl0X2NhcmQubWFlc3RybyA9IHJlcXVpcmUoXCIuL21hZXN0cm9cIik7XG5jcmVkaXRfY2FyZC5sYXNlciA9IHJlcXVpcmUoXCIuL2xhc2VyXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvMzUyOC0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvMzUyOS0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvMzVbMy04XSMtIyMjIy0jIyMjLSMjI0wvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi82MzA0IyMjIyMjIyMjIyNML1wiLFxuICBcIi82NzA2IyMjIyMjIyMjIyNML1wiLFxuICBcIi82NzcxIyMjIyMjIyMjIyNML1wiLFxuICBcIi82NzA5IyMjIyMjIyMjIyNML1wiLFxuICBcIi82MzA0IyMjIyMjIyMjezUsNn1ML1wiLFxuICBcIi82NzA2IyMjIyMjIyMjezUsNn1ML1wiLFxuICBcIi82NzcxIyMjIyMjIyMjezUsNn1ML1wiLFxuICBcIi82NzA5IyMjIyMjIyMjezUsNn1ML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNTAjezksMTZ9TC9cIixcbiAgXCIvNVs2LThdI3s5LDE2fUwvXCIsXG4gIFwiLzU2IyN7OSwxNn1ML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNVsxLTVdIyMtIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY3NzEtODkjIy0jIyMjLSMjI0wvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi82NzY3LSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NzY3LSMjIyMtIyMjIy0jIyMjLSNML1wiLFxuICBcIi82NzY3LSMjIyMtIyMjIy0jIyMjLSMjTC9cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzY3NTktIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY3NTktIyMjIy0jIyMjLSMjIyMtI0wvXCIsXG4gIFwiLzY3NTktIyMjIy0jIyMjLSMjIyMtIyNML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNCMjIyMjIyMjIyMjTC9cIixcbiAgXCIvNCMjIy0jIyMjLSMjIyMtIyMjTC9cIlxuXTtcbiIsInZhciBkYXRlID0ge307XG5tb2R1bGVbXCJleHBvcnRzXCJdID0gZGF0ZTtcbmRhdGUubW9udGggPSByZXF1aXJlKFwiLi9tb250aFwiKTtcbmRhdGUud2Vla2RheSA9IHJlcXVpcmUoXCIuL3dlZWtkYXlcIik7XG4iLCIvLyBTb3VyY2U6IGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL3RyYWMvYnJvd3Nlci90YWdzL3JlbGVhc2UtMjcvY29tbW9uL21haW4vZW4ueG1sI0wxNzk5XG5tb2R1bGVbXCJleHBvcnRzXCJdID0ge1xuICB3aWRlOiBbXG4gICAgXCJKYW51YXJ5XCIsXG4gICAgXCJGZWJydWFyeVwiLFxuICAgIFwiTWFyY2hcIixcbiAgICBcIkFwcmlsXCIsXG4gICAgXCJNYXlcIixcbiAgICBcIkp1bmVcIixcbiAgICBcIkp1bHlcIixcbiAgICBcIkF1Z3VzdFwiLFxuICAgIFwiU2VwdGVtYmVyXCIsXG4gICAgXCJPY3RvYmVyXCIsXG4gICAgXCJOb3ZlbWJlclwiLFxuICAgIFwiRGVjZW1iZXJcIlxuICBdLFxuICAvLyBQcm9wZXJ0eSBcIndpZGVfY29udGV4dFwiIGlzIG9wdGlvbmFsLCBpZiBub3Qgc2V0IHRoZW4gXCJ3aWRlXCIgd2lsbCBiZSB1c2VkIGluc3RlYWRcbiAgLy8gSXQgaXMgdXNlZCB0byBzcGVjaWZ5IGEgd29yZCBpbiBjb250ZXh0LCB3aGljaCBtYXkgZGlmZmVyIGZyb20gYSBzdGFuZC1hbG9uZSB3b3JkXG4gIHdpZGVfY29udGV4dDogW1xuICAgIFwiSmFudWFyeVwiLFxuICAgIFwiRmVicnVhcnlcIixcbiAgICBcIk1hcmNoXCIsXG4gICAgXCJBcHJpbFwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5lXCIsXG4gICAgXCJKdWx5XCIsXG4gICAgXCJBdWd1c3RcIixcbiAgICBcIlNlcHRlbWJlclwiLFxuICAgIFwiT2N0b2JlclwiLFxuICAgIFwiTm92ZW1iZXJcIixcbiAgICBcIkRlY2VtYmVyXCJcbiAgXSxcbiAgYWJicjogW1xuICAgIFwiSmFuXCIsXG4gICAgXCJGZWJcIixcbiAgICBcIk1hclwiLFxuICAgIFwiQXByXCIsXG4gICAgXCJNYXlcIixcbiAgICBcIkp1blwiLFxuICAgIFwiSnVsXCIsXG4gICAgXCJBdWdcIixcbiAgICBcIlNlcFwiLFxuICAgIFwiT2N0XCIsXG4gICAgXCJOb3ZcIixcbiAgICBcIkRlY1wiXG4gIF0sXG4gIC8vIFByb3BlcnR5IFwiYWJicl9jb250ZXh0XCIgaXMgb3B0aW9uYWwsIGlmIG5vdCBzZXQgdGhlbiBcImFiYnJcIiB3aWxsIGJlIHVzZWQgaW5zdGVhZFxuICAvLyBJdCBpcyB1c2VkIHRvIHNwZWNpZnkgYSB3b3JkIGluIGNvbnRleHQsIHdoaWNoIG1heSBkaWZmZXIgZnJvbSBhIHN0YW5kLWFsb25lIHdvcmRcbiAgYWJicl9jb250ZXh0OiBbXG4gICAgXCJKYW5cIixcbiAgICBcIkZlYlwiLFxuICAgIFwiTWFyXCIsXG4gICAgXCJBcHJcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuXCIsXG4gICAgXCJKdWxcIixcbiAgICBcIkF1Z1wiLFxuICAgIFwiU2VwXCIsXG4gICAgXCJPY3RcIixcbiAgICBcIk5vdlwiLFxuICAgIFwiRGVjXCJcbiAgXVxufTtcbiIsIi8vIFNvdXJjZTogaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvdHJhYy9icm93c2VyL3RhZ3MvcmVsZWFzZS0yNy9jb21tb24vbWFpbi9lbi54bWwjTDE4NDdcbm1vZHVsZVtcImV4cG9ydHNcIl0gPSB7XG4gIHdpZGU6IFtcbiAgICBcIlN1bmRheVwiLFxuICAgIFwiTW9uZGF5XCIsXG4gICAgXCJUdWVzZGF5XCIsXG4gICAgXCJXZWRuZXNkYXlcIixcbiAgICBcIlRodXJzZGF5XCIsXG4gICAgXCJGcmlkYXlcIixcbiAgICBcIlNhdHVyZGF5XCJcbiAgXSxcbiAgLy8gUHJvcGVydHkgXCJ3aWRlX2NvbnRleHRcIiBpcyBvcHRpb25hbCwgaWYgbm90IHNldCB0aGVuIFwid2lkZVwiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkXG4gIC8vIEl0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIHdvcmQgaW4gY29udGV4dCwgd2hpY2ggbWF5IGRpZmZlciBmcm9tIGEgc3RhbmQtYWxvbmUgd29yZFxuICB3aWRlX2NvbnRleHQ6IFtcbiAgICBcIlN1bmRheVwiLFxuICAgIFwiTW9uZGF5XCIsXG4gICAgXCJUdWVzZGF5XCIsXG4gICAgXCJXZWRuZXNkYXlcIixcbiAgICBcIlRodXJzZGF5XCIsXG4gICAgXCJGcmlkYXlcIixcbiAgICBcIlNhdHVyZGF5XCJcbiAgXSxcbiAgYWJicjogW1xuICAgIFwiU3VuXCIsXG4gICAgXCJNb25cIixcbiAgICBcIlR1ZVwiLFxuICAgIFwiV2VkXCIsXG4gICAgXCJUaHVcIixcbiAgICBcIkZyaVwiLFxuICAgIFwiU2F0XCJcbiAgXSxcbiAgLy8gUHJvcGVydHkgXCJhYmJyX2NvbnRleHRcIiBpcyBvcHRpb25hbCwgaWYgbm90IHNldCB0aGVuIFwiYWJiclwiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkXG4gIC8vIEl0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIHdvcmQgaW4gY29udGV4dCwgd2hpY2ggbWF5IGRpZmZlciBmcm9tIGEgc3RhbmQtYWxvbmUgd29yZFxuICBhYmJyX2NvbnRleHQ6IFtcbiAgICBcIlN1blwiLFxuICAgIFwiTW9uXCIsXG4gICAgXCJUdWVcIixcbiAgICBcIldlZFwiLFxuICAgIFwiVGh1XCIsXG4gICAgXCJGcmlcIixcbiAgICBcIlNhdFwiXG4gIF1cbn07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkNoZWNraW5nXCIsXG4gIFwiU2F2aW5nc1wiLFxuICBcIk1vbmV5IE1hcmtldFwiLFxuICBcIkludmVzdG1lbnRcIixcbiAgXCJIb21lIExvYW5cIixcbiAgXCJDcmVkaXQgQ2FyZFwiLFxuICBcIkF1dG8gTG9hblwiLFxuICBcIlBlcnNvbmFsIExvYW5cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSB7XG4gIFwiVUFFIERpcmhhbVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQUVEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkFmZ2hhbmlcIjoge1xuICAgIFwiY29kZVwiOiBcIkFGTlwiLFxuICAgIFwic3ltYm9sXCI6IFwi2ItcIlxuICB9LFxuICBcIkxla1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQUxMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJMZWtcIlxuICB9LFxuICBcIkFybWVuaWFuIERyYW1cIjoge1xuICAgIFwiY29kZVwiOiBcIkFNRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJOZXRoZXJsYW5kcyBBbnRpbGxpYW4gR3VpbGRlclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQU5HXCIsXG4gICAgXCJzeW1ib2xcIjogXCLGklwiXG4gIH0sXG4gIFwiS3dhbnphXCI6IHtcbiAgICBcImNvZGVcIjogXCJBT0FcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQXJnZW50aW5lIFBlc29cIjoge1xuICAgIFwiY29kZVwiOiBcIkFSU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiQXVzdHJhbGlhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkFVRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiQXJ1YmFuIEd1aWxkZXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkFXR1wiLFxuICAgIFwic3ltYm9sXCI6IFwixpJcIlxuICB9LFxuICBcIkF6ZXJiYWlqYW5pYW4gTWFuYXRcIjoge1xuICAgIFwiY29kZVwiOiBcIkFaTlwiLFxuICAgIFwic3ltYm9sXCI6IFwi0LzQsNC9XCJcbiAgfSxcbiAgXCJDb252ZXJ0aWJsZSBNYXJrc1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQkFNXCIsXG4gICAgXCJzeW1ib2xcIjogXCJLTVwiXG4gIH0sXG4gIFwiQmFyYmFkb3MgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJCQkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlRha2FcIjoge1xuICAgIFwiY29kZVwiOiBcIkJEVFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJCdWxnYXJpYW4gTGV2XCI6IHtcbiAgICBcImNvZGVcIjogXCJCR05cIixcbiAgICBcInN5bWJvbFwiOiBcItC70LJcIlxuICB9LFxuICBcIkJhaHJhaW5pIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJCSERcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQnVydW5kaSBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQklGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkJlcm11ZGlhbiBEb2xsYXIgKGN1c3RvbWFyaWx5IGtub3duIGFzIEJlcm11ZGEgRG9sbGFyKVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQk1EXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJCcnVuZWkgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJCTkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkJvbGl2aWFubyBNdmRvbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQk9CIEJPVlwiLFxuICAgIFwic3ltYm9sXCI6IFwiJGJcIlxuICB9LFxuICBcIkJyYXppbGlhbiBSZWFsXCI6IHtcbiAgICBcImNvZGVcIjogXCJCUkxcIixcbiAgICBcInN5bWJvbFwiOiBcIlIkXCJcbiAgfSxcbiAgXCJCYWhhbWlhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkJTRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiUHVsYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQldQXCIsXG4gICAgXCJzeW1ib2xcIjogXCJQXCJcbiAgfSxcbiAgXCJCZWxhcnVzc2lhbiBSdWJsZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQllSXCIsXG4gICAgXCJzeW1ib2xcIjogXCJwLlwiXG4gIH0sXG4gIFwiQmVsaXplIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQlpEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJCWiRcIlxuICB9LFxuICBcIkNhbmFkaWFuIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ0FEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJDb25nb2xlc2UgRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIkNERlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJTd2lzcyBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ0hGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJDSEZcIlxuICB9LFxuICBcIkNoaWxlYW4gUGVzbyBVbmlkYWRlcyBkZSBmb21lbnRvXCI6IHtcbiAgICBcImNvZGVcIjogXCJDTFAgQ0xGXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJZdWFuIFJlbm1pbmJpXCI6IHtcbiAgICBcImNvZGVcIjogXCJDTllcIixcbiAgICBcInN5bWJvbFwiOiBcIsKlXCJcbiAgfSxcbiAgXCJDb2xvbWJpYW4gUGVzbyBVbmlkYWQgZGUgVmFsb3IgUmVhbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ09QIENPVVwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiQ29zdGEgUmljYW4gQ29sb25cIjoge1xuICAgIFwiY29kZVwiOiBcIkNSQ1wiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKhXCJcbiAgfSxcbiAgXCJDdWJhbiBQZXNvIFBlc28gQ29udmVydGlibGVcIjoge1xuICAgIFwiY29kZVwiOiBcIkNVUCBDVUNcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCsVwiXG4gIH0sXG4gIFwiQ2FwZSBWZXJkZSBFc2N1ZG9cIjoge1xuICAgIFwiY29kZVwiOiBcIkNWRVwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDemVjaCBLb3J1bmFcIjoge1xuICAgIFwiY29kZVwiOiBcIkNaS1wiLFxuICAgIFwic3ltYm9sXCI6IFwiS8SNXCJcbiAgfSxcbiAgXCJEamlib3V0aSBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiREpGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkRhbmlzaCBLcm9uZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiREtLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJrclwiXG4gIH0sXG4gIFwiRG9taW5pY2FuIFBlc29cIjoge1xuICAgIFwiY29kZVwiOiBcIkRPUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiUkQkXCJcbiAgfSxcbiAgXCJBbGdlcmlhbiBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiRFpEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIktyb29uXCI6IHtcbiAgICBcImNvZGVcIjogXCJFRUtcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRWd5cHRpYW4gUG91bmRcIjoge1xuICAgIFwiY29kZVwiOiBcIkVHUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqNcIlxuICB9LFxuICBcIk5ha2ZhXCI6IHtcbiAgICBcImNvZGVcIjogXCJFUk5cIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRXRoaW9waWFuIEJpcnJcIjoge1xuICAgIFwiY29kZVwiOiBcIkVUQlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJFdXJvXCI6IHtcbiAgICBcImNvZGVcIjogXCJFVVJcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCrFwiXG4gIH0sXG4gIFwiRmlqaSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkZKRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiRmFsa2xhbmQgSXNsYW5kcyBQb3VuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiRktQXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCo1wiXG4gIH0sXG4gIFwiUG91bmQgU3RlcmxpbmdcIjoge1xuICAgIFwiY29kZVwiOiBcIkdCUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqNcIlxuICB9LFxuICBcIkxhcmlcIjoge1xuICAgIFwiY29kZVwiOiBcIkdFTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDZWRpXCI6IHtcbiAgICBcImNvZGVcIjogXCJHSFNcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiR2licmFsdGFyIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJHSVBcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJEYWxhc2lcIjoge1xuICAgIFwiY29kZVwiOiBcIkdNRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJHdWluZWEgRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIkdORlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJRdWV0emFsXCI6IHtcbiAgICBcImNvZGVcIjogXCJHVFFcIixcbiAgICBcInN5bWJvbFwiOiBcIlFcIlxuICB9LFxuICBcIkd1eWFuYSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkdZRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiSG9uZyBLb25nIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSEtEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJMZW1waXJhXCI6IHtcbiAgICBcImNvZGVcIjogXCJITkxcIixcbiAgICBcInN5bWJvbFwiOiBcIkxcIlxuICB9LFxuICBcIkNyb2F0aWFuIEt1bmFcIjoge1xuICAgIFwiY29kZVwiOiBcIkhSS1wiLFxuICAgIFwic3ltYm9sXCI6IFwia25cIlxuICB9LFxuICBcIkdvdXJkZSBVUyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkhURyBVU0RcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRm9yaW50XCI6IHtcbiAgICBcImNvZGVcIjogXCJIVUZcIixcbiAgICBcInN5bWJvbFwiOiBcIkZ0XCJcbiAgfSxcbiAgXCJSdXBpYWhcIjoge1xuICAgIFwiY29kZVwiOiBcIklEUlwiLFxuICAgIFwic3ltYm9sXCI6IFwiUnBcIlxuICB9LFxuICBcIk5ldyBJc3JhZWxpIFNoZXFlbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSUxTXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqpcIlxuICB9LFxuICBcIkluZGlhbiBSdXBlZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSU5SXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkluZGlhbiBSdXBlZSBOZ3VsdHJ1bVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSU5SIEJUTlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJJcmFxaSBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSVFEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIklyYW5pYW4gUmlhbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSVJSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLvt7xcIlxuICB9LFxuICBcIkljZWxhbmQgS3JvbmFcIjoge1xuICAgIFwiY29kZVwiOiBcIklTS1wiLFxuICAgIFwic3ltYm9sXCI6IFwia3JcIlxuICB9LFxuICBcIkphbWFpY2FuIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSk1EXCIsXG4gICAgXCJzeW1ib2xcIjogXCJKJFwiXG4gIH0sXG4gIFwiSm9yZGFuaWFuIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJKT0RcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiWWVuXCI6IHtcbiAgICBcImNvZGVcIjogXCJKUFlcIixcbiAgICBcInN5bWJvbFwiOiBcIsKlXCJcbiAgfSxcbiAgXCJLZW55YW4gU2hpbGxpbmdcIjoge1xuICAgIFwiY29kZVwiOiBcIktFU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJTb21cIjoge1xuICAgIFwiY29kZVwiOiBcIktHU1wiLFxuICAgIFwic3ltYm9sXCI6IFwi0LvQslwiXG4gIH0sXG4gIFwiUmllbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiS0hSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLhn5tcIlxuICB9LFxuICBcIkNvbW9ybyBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiS01GXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk5vcnRoIEtvcmVhbiBXb25cIjoge1xuICAgIFwiY29kZVwiOiBcIktQV1wiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKpXCJcbiAgfSxcbiAgXCJXb25cIjoge1xuICAgIFwiY29kZVwiOiBcIktSV1wiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKpXCJcbiAgfSxcbiAgXCJLdXdhaXRpIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJLV0RcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQ2F5bWFuIElzbGFuZHMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJLWURcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlRlbmdlXCI6IHtcbiAgICBcImNvZGVcIjogXCJLWlRcIixcbiAgICBcInN5bWJvbFwiOiBcItC70LJcIlxuICB9LFxuICBcIktpcFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTEFLXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigq1cIlxuICB9LFxuICBcIkxlYmFuZXNlIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJMQlBcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJTcmkgTGFua2EgUnVwZWVcIjoge1xuICAgIFwiY29kZVwiOiBcIkxLUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKoXCJcbiAgfSxcbiAgXCJMaWJlcmlhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkxSRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiTGl0aHVhbmlhbiBMaXRhc1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiTFRMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJMdFwiXG4gIH0sXG4gIFwiTGF0dmlhbiBMYXRzXCI6IHtcbiAgICBcImNvZGVcIjogXCJMVkxcIixcbiAgICBcInN5bWJvbFwiOiBcIkxzXCJcbiAgfSxcbiAgXCJMaWJ5YW4gRGluYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkxZRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJNb3JvY2NhbiBEaXJoYW1cIjoge1xuICAgIFwiY29kZVwiOiBcIk1BRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJNb2xkb3ZhbiBMZXVcIjoge1xuICAgIFwiY29kZVwiOiBcIk1ETFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJNYWxhZ2FzeSBBcmlhcnlcIjoge1xuICAgIFwiY29kZVwiOiBcIk1HQVwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJEZW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTUtEXCIsXG4gICAgXCJzeW1ib2xcIjogXCLQtNC10L1cIlxuICB9LFxuICBcIkt5YXRcIjoge1xuICAgIFwiY29kZVwiOiBcIk1NS1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJUdWdyaWtcIjoge1xuICAgIFwiY29kZVwiOiBcIk1OVFwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKuXCJcbiAgfSxcbiAgXCJQYXRhY2FcIjoge1xuICAgIFwiY29kZVwiOiBcIk1PUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJPdWd1aXlhXCI6IHtcbiAgICBcImNvZGVcIjogXCJNUk9cIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTWF1cml0aXVzIFJ1cGVlXCI6IHtcbiAgICBcImNvZGVcIjogXCJNVVJcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqFwiXG4gIH0sXG4gIFwiUnVmaXlhYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTVZSXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkt3YWNoYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTVdLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk1leGljYW4gUGVzbyBNZXhpY2FuIFVuaWRhZCBkZSBJbnZlcnNpb24gKFVESSlcIjoge1xuICAgIFwiY29kZVwiOiBcIk1YTiBNWFZcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIk1hbGF5c2lhbiBSaW5nZ2l0XCI6IHtcbiAgICBcImNvZGVcIjogXCJNWVJcIixcbiAgICBcInN5bWJvbFwiOiBcIlJNXCJcbiAgfSxcbiAgXCJNZXRpY2FsXCI6IHtcbiAgICBcImNvZGVcIjogXCJNWk5cIixcbiAgICBcInN5bWJvbFwiOiBcIk1UXCJcbiAgfSxcbiAgXCJOYWlyYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTkdOXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqZcIlxuICB9LFxuICBcIkNvcmRvYmEgT3JvXCI6IHtcbiAgICBcImNvZGVcIjogXCJOSU9cIixcbiAgICBcInN5bWJvbFwiOiBcIkMkXCJcbiAgfSxcbiAgXCJOb3J3ZWdpYW4gS3JvbmVcIjoge1xuICAgIFwiY29kZVwiOiBcIk5PS1wiLFxuICAgIFwic3ltYm9sXCI6IFwia3JcIlxuICB9LFxuICBcIk5lcGFsZXNlIFJ1cGVlXCI6IHtcbiAgICBcImNvZGVcIjogXCJOUFJcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqFwiXG4gIH0sXG4gIFwiTmV3IFplYWxhbmQgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJOWkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlJpYWwgT21hbmlcIjoge1xuICAgIFwiY29kZVwiOiBcIk9NUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi77e8XCJcbiAgfSxcbiAgXCJCYWxib2EgVVMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJQQUIgVVNEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJCLy5cIlxuICB9LFxuICBcIk51ZXZvIFNvbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUEVOXCIsXG4gICAgXCJzeW1ib2xcIjogXCJTLy5cIlxuICB9LFxuICBcIktpbmFcIjoge1xuICAgIFwiY29kZVwiOiBcIlBHS1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJQaGlsaXBwaW5lIFBlc29cIjoge1xuICAgIFwiY29kZVwiOiBcIlBIUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiUGhwXCJcbiAgfSxcbiAgXCJQYWtpc3RhbiBSdXBlZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUEtSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqhcIlxuICB9LFxuICBcIlpsb3R5XCI6IHtcbiAgICBcImNvZGVcIjogXCJQTE5cIixcbiAgICBcInN5bWJvbFwiOiBcInrFglwiXG4gIH0sXG4gIFwiR3VhcmFuaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUFlHXCIsXG4gICAgXCJzeW1ib2xcIjogXCJHc1wiXG4gIH0sXG4gIFwiUWF0YXJpIFJpYWxcIjoge1xuICAgIFwiY29kZVwiOiBcIlFBUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi77e8XCJcbiAgfSxcbiAgXCJOZXcgTGV1XCI6IHtcbiAgICBcImNvZGVcIjogXCJST05cIixcbiAgICBcInN5bWJvbFwiOiBcImxlaVwiXG4gIH0sXG4gIFwiU2VyYmlhbiBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUlNEXCIsXG4gICAgXCJzeW1ib2xcIjogXCLQlNC40L0uXCJcbiAgfSxcbiAgXCJSdXNzaWFuIFJ1YmxlXCI6IHtcbiAgICBcImNvZGVcIjogXCJSVUJcIixcbiAgICBcInN5bWJvbFwiOiBcItGA0YPQsVwiXG4gIH0sXG4gIFwiUndhbmRhIEZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJSV0ZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiU2F1ZGkgUml5YWxcIjoge1xuICAgIFwiY29kZVwiOiBcIlNBUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi77e8XCJcbiAgfSxcbiAgXCJTb2xvbW9uIElzbGFuZHMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJTQkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlNleWNoZWxsZXMgUnVwZWVcIjoge1xuICAgIFwiY29kZVwiOiBcIlNDUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKoXCJcbiAgfSxcbiAgXCJTdWRhbmVzZSBQb3VuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0RHXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlN3ZWRpc2ggS3JvbmFcIjoge1xuICAgIFwiY29kZVwiOiBcIlNFS1wiLFxuICAgIFwic3ltYm9sXCI6IFwia3JcIlxuICB9LFxuICBcIlNpbmdhcG9yZSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlNHRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiU2FpbnQgSGVsZW5hIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJTSFBcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJMZW9uZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0xMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlNvbWFsaSBTaGlsbGluZ1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiU09TXCIsXG4gICAgXCJzeW1ib2xcIjogXCJTXCJcbiAgfSxcbiAgXCJTdXJpbmFtIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU1JEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJEb2JyYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU1REXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkVsIFNhbHZhZG9yIENvbG9uIFVTIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU1ZDIFVTRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiU3lyaWFuIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJTWVBcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJMaWxhbmdlbmlcIjoge1xuICAgIFwiY29kZVwiOiBcIlNaTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJCYWh0XCI6IHtcbiAgICBcImNvZGVcIjogXCJUSEJcIixcbiAgICBcInN5bWJvbFwiOiBcIuC4v1wiXG4gIH0sXG4gIFwiU29tb25pXCI6IHtcbiAgICBcImNvZGVcIjogXCJUSlNcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTWFuYXRcIjoge1xuICAgIFwiY29kZVwiOiBcIlRNVFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJUdW5pc2lhbiBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVE5EXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlBhJ2FuZ2FcIjoge1xuICAgIFwiY29kZVwiOiBcIlRPUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJUdXJraXNoIExpcmFcIjoge1xuICAgIFwiY29kZVwiOiBcIlRSWVwiLFxuICAgIFwic3ltYm9sXCI6IFwiVExcIlxuICB9LFxuICBcIlRyaW5pZGFkIGFuZCBUb2JhZ28gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJUVERcIixcbiAgICBcInN5bWJvbFwiOiBcIlRUJFwiXG4gIH0sXG4gIFwiTmV3IFRhaXdhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlRXRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiTlQkXCJcbiAgfSxcbiAgXCJUYW56YW5pYW4gU2hpbGxpbmdcIjoge1xuICAgIFwiY29kZVwiOiBcIlRaU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJIcnl2bmlhXCI6IHtcbiAgICBcImNvZGVcIjogXCJVQUhcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCtFwiXG4gIH0sXG4gIFwiVWdhbmRhIFNoaWxsaW5nXCI6IHtcbiAgICBcImNvZGVcIjogXCJVR1hcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiVVMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJVU0RcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlBlc28gVXJ1Z3VheW8gVXJ1Z3VheSBQZXNvIGVuIFVuaWRhZGVzIEluZGV4YWRhc1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiVVlVIFVZSVwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFVcIlxuICB9LFxuICBcIlV6YmVraXN0YW4gU3VtXCI6IHtcbiAgICBcImNvZGVcIjogXCJVWlNcIixcbiAgICBcInN5bWJvbFwiOiBcItC70LJcIlxuICB9LFxuICBcIkJvbGl2YXIgRnVlcnRlXCI6IHtcbiAgICBcImNvZGVcIjogXCJWRUZcIixcbiAgICBcInN5bWJvbFwiOiBcIkJzXCJcbiAgfSxcbiAgXCJEb25nXCI6IHtcbiAgICBcImNvZGVcIjogXCJWTkRcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCq1wiXG4gIH0sXG4gIFwiVmF0dVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVlVWXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlRhbGFcIjoge1xuICAgIFwiY29kZVwiOiBcIldTVFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDRkEgRnJhbmMgQkVBQ1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEFGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlNpbHZlclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEFHXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkdvbGRcIjoge1xuICAgIFwiY29kZVwiOiBcIlhBVVwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJCb25kIE1hcmtldHMgVW5pdHMgRXVyb3BlYW4gQ29tcG9zaXRlIFVuaXQgKEVVUkNPKVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEJBXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkV1cm9wZWFuIE1vbmV0YXJ5IFVuaXQgKEUuTS5VLi02KVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEJCXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkV1cm9wZWFuIFVuaXQgb2YgQWNjb3VudCA5KEUuVS5BLi05KVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEJDXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkV1cm9wZWFuIFVuaXQgb2YgQWNjb3VudCAxNyhFLlUuQS4tMTcpXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQkRcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRWFzdCBDYXJpYmJlYW4gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQ0RcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlNEUlwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWERSXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlVJQy1GcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEZVXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkNGQSBGcmFuYyBCQ0VBT1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiWE9GXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlBhbGxhZGl1bVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWFBEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkNGUCBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiWFBGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlBsYXRpbnVtXCI6IHtcbiAgICBcImNvZGVcIjogXCJYUFRcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQ29kZXMgc3BlY2lmaWNhbGx5IHJlc2VydmVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzXCI6IHtcbiAgICBcImNvZGVcIjogXCJYVFNcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiWWVtZW5pIFJpYWxcIjoge1xuICAgIFwiY29kZVwiOiBcIllFUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi77e8XCJcbiAgfSxcbiAgXCJSYW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJaQVJcIixcbiAgICBcInN5bWJvbFwiOiBcIlJcIlxuICB9LFxuICBcIlJhbmQgTG90aVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWkFSIExTTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJSYW5kIE5hbWliaWEgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJaQVIgTkFEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlphbWJpYW4gS3dhY2hhXCI6IHtcbiAgICBcImNvZGVcIjogXCJaTUtcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiWmltYmFid2UgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJaV0xcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH1cbn07XG4iLCJ2YXIgZmluYW5jZSA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBmaW5hbmNlO1xuZmluYW5jZS5hY2NvdW50X3R5cGUgPSByZXF1aXJlKFwiLi9hY2NvdW50X3R5cGVcIik7XG5maW5hbmNlLnRyYW5zYWN0aW9uX3R5cGUgPSByZXF1aXJlKFwiLi90cmFuc2FjdGlvbl90eXBlXCIpO1xuZmluYW5jZS5jdXJyZW5jeSA9IHJlcXVpcmUoXCIuL2N1cnJlbmN5XCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJkZXBvc2l0XCIsXG4gIFwid2l0aGRyYXdhbFwiLFxuICBcInBheW1lbnRcIixcbiAgXCJpbnZvaWNlXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIlRDUFwiLFxuICBcIkhUVFBcIixcbiAgXCJTRERcIixcbiAgXCJSQU1cIixcbiAgXCJHQlwiLFxuICBcIkNTU1wiLFxuICBcIlNTTFwiLFxuICBcIkFHUFwiLFxuICBcIlNRTFwiLFxuICBcIkZUUFwiLFxuICBcIlBDSVwiLFxuICBcIkFJXCIsXG4gIFwiQURQXCIsXG4gIFwiUlNTXCIsXG4gIFwiWE1MXCIsXG4gIFwiRVhFXCIsXG4gIFwiQ09NXCIsXG4gIFwiSEREXCIsXG4gIFwiVEhYXCIsXG4gIFwiU01UUFwiLFxuICBcIlNNU1wiLFxuICBcIlVTQlwiLFxuICBcIlBOR1wiLFxuICBcIlNBU1wiLFxuICBcIklCXCIsXG4gIFwiU0NTSVwiLFxuICBcIkpTT05cIixcbiAgXCJYU1NcIixcbiAgXCJKQk9EXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImF1eGlsaWFyeVwiLFxuICBcInByaW1hcnlcIixcbiAgXCJiYWNrLWVuZFwiLFxuICBcImRpZ2l0YWxcIixcbiAgXCJvcGVuLXNvdXJjZVwiLFxuICBcInZpcnR1YWxcIixcbiAgXCJjcm9zcy1wbGF0Zm9ybVwiLFxuICBcInJlZHVuZGFudFwiLFxuICBcIm9ubGluZVwiLFxuICBcImhhcHRpY1wiLFxuICBcIm11bHRpLWJ5dGVcIixcbiAgXCJibHVldG9vdGhcIixcbiAgXCJ3aXJlbGVzc1wiLFxuICBcIjEwODBwXCIsXG4gIFwibmV1cmFsXCIsXG4gIFwib3B0aWNhbFwiLFxuICBcInNvbGlkIHN0YXRlXCIsXG4gIFwibW9iaWxlXCJcbl07XG4iLCJ2YXIgaGFja2VyID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGhhY2tlcjtcbmhhY2tlci5hYmJyZXZpYXRpb24gPSByZXF1aXJlKFwiLi9hYmJyZXZpYXRpb25cIik7XG5oYWNrZXIuYWRqZWN0aXZlID0gcmVxdWlyZShcIi4vYWRqZWN0aXZlXCIpO1xuaGFja2VyLm5vdW4gPSByZXF1aXJlKFwiLi9ub3VuXCIpO1xuaGFja2VyLnZlcmIgPSByZXF1aXJlKFwiLi92ZXJiXCIpO1xuaGFja2VyLmluZ3ZlcmIgPSByZXF1aXJlKFwiLi9pbmd2ZXJiXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJiYWNraW5nIHVwXCIsXG4gIFwiYnlwYXNzaW5nXCIsXG4gIFwiaGFja2luZ1wiLFxuICBcIm92ZXJyaWRpbmdcIixcbiAgXCJjb21wcmVzc2luZ1wiLFxuICBcImNvcHlpbmdcIixcbiAgXCJuYXZpZ2F0aW5nXCIsXG4gIFwiaW5kZXhpbmdcIixcbiAgXCJjb25uZWN0aW5nXCIsXG4gIFwiZ2VuZXJhdGluZ1wiLFxuICBcInF1YW50aWZ5aW5nXCIsXG4gIFwiY2FsY3VsYXRpbmdcIixcbiAgXCJzeW50aGVzaXppbmdcIixcbiAgXCJ0cmFuc21pdHRpbmdcIixcbiAgXCJwcm9ncmFtbWluZ1wiLFxuICBcInBhcnNpbmdcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiZHJpdmVyXCIsXG4gIFwicHJvdG9jb2xcIixcbiAgXCJiYW5kd2lkdGhcIixcbiAgXCJwYW5lbFwiLFxuICBcIm1pY3JvY2hpcFwiLFxuICBcInByb2dyYW1cIixcbiAgXCJwb3J0XCIsXG4gIFwiY2FyZFwiLFxuICBcImFycmF5XCIsXG4gIFwiaW50ZXJmYWNlXCIsXG4gIFwic3lzdGVtXCIsXG4gIFwic2Vuc29yXCIsXG4gIFwiZmlyZXdhbGxcIixcbiAgXCJoYXJkIGRyaXZlXCIsXG4gIFwicGl4ZWxcIixcbiAgXCJhbGFybVwiLFxuICBcImZlZWRcIixcbiAgXCJtb25pdG9yXCIsXG4gIFwiYXBwbGljYXRpb25cIixcbiAgXCJ0cmFuc21pdHRlclwiLFxuICBcImJ1c1wiLFxuICBcImNpcmN1aXRcIixcbiAgXCJjYXBhY2l0b3JcIixcbiAgXCJtYXRyaXhcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiYmFjayB1cFwiLFxuICBcImJ5cGFzc1wiLFxuICBcImhhY2tcIixcbiAgXCJvdmVycmlkZVwiLFxuICBcImNvbXByZXNzXCIsXG4gIFwiY29weVwiLFxuICBcIm5hdmlnYXRlXCIsXG4gIFwiaW5kZXhcIixcbiAgXCJjb25uZWN0XCIsXG4gIFwiZ2VuZXJhdGVcIixcbiAgXCJxdWFudGlmeVwiLFxuICBcImNhbGN1bGF0ZVwiLFxuICBcInN5bnRoZXNpemVcIixcbiAgXCJpbnB1dFwiLFxuICBcInRyYW5zbWl0XCIsXG4gIFwicHJvZ3JhbVwiLFxuICBcInJlYm9vdFwiLFxuICBcInBhcnNlXCJcbl07XG4iLCJ2YXIgZW4gPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gZW47XG5lbi50aXRsZSA9IFwiRW5nbGlzaFwiO1xuZW4uc2VwYXJhdG9yID0gXCIgJiBcIjtcbmVuLmFkZHJlc3MgPSByZXF1aXJlKFwiLi9hZGRyZXNzXCIpO1xuZW4uY3JlZGl0X2NhcmQgPSByZXF1aXJlKFwiLi9jcmVkaXRfY2FyZFwiKTtcbmVuLmNvbXBhbnkgPSByZXF1aXJlKFwiLi9jb21wYW55XCIpO1xuZW4uaW50ZXJuZXQgPSByZXF1aXJlKFwiLi9pbnRlcm5ldFwiKTtcbmVuLmxvcmVtID0gcmVxdWlyZShcIi4vbG9yZW1cIik7XG5lbi5uYW1lID0gcmVxdWlyZShcIi4vbmFtZVwiKTtcbmVuLnBob25lX251bWJlciA9IHJlcXVpcmUoXCIuL3Bob25lX251bWJlclwiKTtcbmVuLmNlbGxfcGhvbmUgPSByZXF1aXJlKFwiLi9jZWxsX3Bob25lXCIpO1xuZW4uYnVzaW5lc3MgPSByZXF1aXJlKFwiLi9idXNpbmVzc1wiKTtcbmVuLmNvbW1lcmNlID0gcmVxdWlyZShcIi4vY29tbWVyY2VcIik7XG5lbi50ZWFtID0gcmVxdWlyZShcIi4vdGVhbVwiKTtcbmVuLmhhY2tlciA9IHJlcXVpcmUoXCIuL2hhY2tlclwiKTtcbmVuLmFwcCA9IHJlcXVpcmUoXCIuL2FwcFwiKTtcbmVuLmZpbmFuY2UgPSByZXF1aXJlKFwiLi9maW5hbmNlXCIpO1xuZW4uZGF0ZSA9IHJlcXVpcmUoXCIuL2RhdGVcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFyamFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21haGRpZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zcHJheWFnYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydXppbmF2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1NreWhhcnRtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbW9zY296LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t1cmFmaXJlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzkxYmlsYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWdvcmdhcnliYWxkaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYWxlYm9nZGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbHlraGludi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2VsaGVsaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3VzaHNvbGl0YXJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvcmV5d2ViLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nub3dzaGFkZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmV1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ob2xkZW53ZWIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGV5aW1qdWFuaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbnZleC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91bnRlcmRyZWh0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbGxlZ2VtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVlamZhbmNoZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5keWlzb25saW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3VsdHJhZ2V4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Z1Y2tfeW91X3R3by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGVsbGVjaGFybGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F0ZW5ldXBvcHVsYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWhtZXRhbHBiYWxrYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU3RpZXZpdXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2VyZW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3N2YWxkYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5nZWxjZWJhbGxvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGllcnJ5a29ibGVudHovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGV0ZXJsYW5kdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXRhcmluby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZWdsb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJhbmRjbGF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZsYW1lX2thaXphci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haG1ldHN1bGVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pY29sYXNmb2xsaW90LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pheXJvYmluc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvcmVyaXhvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb2xhZ2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaHplbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJramVua2lucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWNvbGFpX2xhcnNlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ndC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ub3hkemluZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGFnb29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lkaW90LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pemtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYWRlbmdsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdXRsdTgyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NpbW9iZW5zby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92b2Npbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3VpaWlwb250ZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc295amF2aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NoYXVzdGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RvbWFzbGF1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1ZpblRob21hcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9NYW5pa1JhdGhlZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYW5nYXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NlbXNoaWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVlbXVucm9lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL19zaGFoZWRrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VuZGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQmlsbFNLZW5uZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGl2eWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zaGhlbXNsZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2luZHJlc29yaHVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NvZmZlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci85bGVzc29ucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saW51eDI5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0NoYWtpbnRvc2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5hYW1pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvcmVpcmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hhZGVlZDkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2NvdHRrY2xhcmsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVkYnJpZGdlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWxsZWVkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyYWthc2luYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmlpbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9CcmlhblB1cmtpc3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFlbG1hcnRpbmhvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J1YmxpZW5rby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXZhbmtvc2hhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9aYWNoYXJ5Wm9yYmFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RpbW1pbGx3b29kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2h1YXNvcnRpbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFtZW5sZWV0dXJrcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b21hc19qYW5vdXNlay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXJyaGFhc2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvUnVzc2VsbEJpc2hvcC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmFqZXNod2FyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hY2h0bWVpc3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYnJhY2NvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jlcm1vbnBhaW50ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWJkdWxsaW5kZW5pcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pc2Fjb3N0YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdXByYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95YWxvemhraW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhbmRsZXJ2ZHcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWFtZ2FydGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3ZpY3RhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbW1hZGVsaW1pdGVkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JveWJhcmJlcnVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F4ZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmxhZGFyYmF0b3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmZiZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3lyb3BpYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5raXRpbmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHJhbmVibG93LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZsYXNobXVycGh5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0NocmlzRmFyaW5hNzgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFsaW9tZWdhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nhc2NoYW10LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ptX2RlbmlzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fub2ZmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tlbm55YWRyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYXR5cmtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rpbmd5aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGVycnl4bGlmZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYXJvbmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2luZGF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BycnN0bi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lZHVhcmRvc3R1YXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RoaWxpcHNpdmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvR2F2aWNvSW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhaXJlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2hpeHgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmlnbWFuY2hvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JsYWtlc2lta2lucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZWVpaW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGpydXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdWJlcnNjaGl6by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9reWxlZm91bmRyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jbGF1ZGlvZ3VnbGllcmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmlwcGxlbWRrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2V4ZW50cmljaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYWtlbW9vcmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9hb2VkdW1lZGVpcm9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Bvb3JtaW5pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RlcmVzaGVua292LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tlcnlpbG1hei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYXlkbl93b29kcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydWRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xsdW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2dhdXJhdl9iYWdoZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFtaWVicml0dGFpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYWRsaXR0bGVkdWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BpZmFnb3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWdyb21vdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZW5lZnJpdHovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXJ3YW5oZXNyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaWVzZWxsYXdzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcmVtaWFoYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb3JpZGhhbmR5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYWVuc2VsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJld2NvaGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NtYWN6bnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ29uemFsb3JvYmFpbmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFuZGluaV9tLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N5ZGxhd3JlbmNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NkaGFycmlzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGdlcmtlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZXdpc2FpbnNsaWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhcmxpZWN3YWl0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2Jic2NoaWxsZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmxleHJzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdHRkZXRhaWxzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhcXVlbHdpbHNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXJzaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tcm1hcnRpbmVhdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vcG5zcmNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hnaGFycnlnby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXhpbXNlc2h1ay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91eGFsZXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FtaWhhaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFucG9yeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGFydmluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2VtYXJxdWVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plZmZmaXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3J5c3RhbGZpc3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb2tlc2hfY29kZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlZGFtaWFuaGRlei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kcG1hY2hhZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZnVud2F0ZXJjYXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGltb3RoeWNkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2l2YW5maWxpcG92YmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGljYXJkMTAyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmNvYmFyYm9zYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rcmFzbm91a2hvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nM2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRlbWlsdGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JpY2tkdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vcGVyYXRpbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnVuZ2l3YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaHVnb21hbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9nb3JhZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGNfdXNlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ob3JhY2lvYmVsbGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU2xhYXBNZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZWVyYWdpdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pcW9uaWNkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lseWFfcGVzdG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJld2Fycm93LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NzaXNraW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvSGVucnlIb2ZmbWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Jkc2F1bmRlcnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRhbXN4dS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jdXJpb3Vzb2ZmaWNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZW1hZHJheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoaWdhbmdyYWhhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb2hldHRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pY2tmcmF0dGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J1bm5pbmdza3VsbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWR5c29uZGVzaWducy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmVudG9uX2NsYXJrZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZW5ueXNoZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJhZGVuaGFtbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdXJ0aW5jLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FtYW5ydXphaW5pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvcmV5aGFnZ2FyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9LYXJpbW1vdmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWFyb25hbGZyZWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd3Ryc2xkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ppdGFjaGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlcmVhbG1hcnZpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wbWVpc3NuZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb29vbXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhY2t5MTQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVzc2VkZHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpbm1hdHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hhbmVodWRzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWttdXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvSXNhcnlBbWFpcmFuaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcnRodXJob2xjb21iZTEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5keWNoaXBzdGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JveG1vZGVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Voc2FuZGlhcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvTHVjYXNQZXJkaWRhby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGFsdDBuaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zd2FwbG9yZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYWVsaWZhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BsYmFiaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3VpbGxlbWJvdGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJpbmRhbV8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmVuYnlyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGlhZ292ZXJuZXR0aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qbWlsbHNwYXlzYmlsbHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlrZW1haTJhd2Vzb21lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcnZvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21la2FsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0YTFleC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2JlcmdkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZlbGlwZWNzbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZWEyMTEwODcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2FyYW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rob295ZW5nYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYm92ZWZ1bmN0aW9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BjcmlkZXNhZ2Fpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYW5kb21saWVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0JyeWFuSG9yc2V5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hleWtlbm5ldGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFocGFycmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxsdGhpbmdzc21pdHR5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbnZlcm5vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXdlaW5yZWljaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbmNyZWFzZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWx2YXJhZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbHhuZHJ1c3Rpbm92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NvdXVmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29ya3VuY2F5bGFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0FNX0tuMi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nZWFycGl4ZWxzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jhc3NhbW9sb2d5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpbWFyZXRob21hcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb3NtYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU1VMaWlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21yamFtZXNub2JsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaWx2YW5tdWhsZW1hbm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hhbmVJeEQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFjaG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveWlnaXRwaW5hcmJhc2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnV6enVzYm9ybmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWFyb25rd2hpdGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm1sZXdpc3VrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dpYW5jYXJsb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmJpcmNrZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZF9ubnlfbV9jaGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NkaWRvbmF0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hdGFyaWJveS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYm90YXAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FyYWxlay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wc2Rlc2lnbnVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2x1ZHdpY3pha3Bhd2VsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lbWFuamFpdmFub3ZpYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYWx1bGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWhtYWRham1pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Zvdmthc29sb3Zldi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW1ncm92ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVyaWVuem83NzcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9uYXRoYW5zaW1tb25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lbHNvbmpveWNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1MwdWZpNG4zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3h0b3BoZXJwYXVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29ha3RyZWVtZWRpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYXRlc2NodWx0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9maW5kaW5namVubnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFtYW5rcmVhdGl2ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbnRvbnl6b3Rvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZV9zb2NpYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVlaGFtYmxleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zb2xpZF9jb2xvci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYmVsY2FiYW5zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21iaWxkZXJiYWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2trdXNhYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3JkeXZkYm9vbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJsb3NnYXZpbmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVjaGtpbmF0b3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmMyNy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZGJhbm5vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jcm9ha3gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VyaWJibGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tlcmloZW5hcmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2F0YWRlbGVvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nY21vcmxleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kdWl2dnYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FzY2hhZHJvc3RlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvckR1YnVncmFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dpbnRvcGlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdHRiaWxvdHRpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RheWxvcmxpbmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWVnZHJhd3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWVsbjFrcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWhtb3VkbWV0d2FsbHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU2lsdmVyZWRnZTkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVyZWtlYnJhZGxleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYXBweXBldGVyMTk4My8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90cmF2aXNfYXJub2xkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FydGVtX2tvc3RlbmtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fkb2JpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RheWtpaW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZWtfZGp1cmljLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NjaXBzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pZ3VlbG1lbmRlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdXN0aW5yaGVlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fsc29icm9va3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZnJvbngvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWNmbHlkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FudGlfdXJzby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGxmb3JkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RheXViZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVydGJvZXJsYW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcm9zaG9sbHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRhbW5hYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jeW50aGlhc2F2YXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211cmluZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFucm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGllbWlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phY2tpZXNhaWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvemFjc25pZGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lkdXVjay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbnRqYW51cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcm9vbl9zaGFybWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHNoc3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVoYWNrZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFlbGJyb29rc2pyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J5YW5tY2xhdWdobGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NsdWJiM3JyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90YXliZW5sb3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveHJpcHVub3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXlhc3Ryby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGl0eWFzdXRvbW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGlnaXRhbG1hdmVyaWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hqYXJ0c3Ryb3JuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2l0b2xtYWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZhdWdoYW5tb2ZmaXR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FiZG90cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pc25pZmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NlcmdleXNhZm9ub3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NjcmFwZG5iLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NocmlzbWo4My8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aXRvcmxlYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc29rYW5pd2FhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci96YWtpM2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWxseXpvcmVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21vY2FieXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29zbWFuaW5jZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kanNoZXJtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF2aWRoZW1waGlsbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93YWdobmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lY29keW1pY29uZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJhdmVlbl92aWpheWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmFiYnJ1Y2NpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NsaWZmc2VhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90cmF2aXNoaW5lcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdWxkYXJrYWx2aWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvRWx0X24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGhpbGxhcGllci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9va3NlYW5qYXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWQ4MzU1NTkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3VkcmV0a2Vza2luLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fuamhlcm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHVjazRmdWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Njb3R0X3JpbGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25vdWZhbGlicmFoaW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaDFicmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm9yZ2VzX21hcmNvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXZpbmhhbGxhZGF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NpYXJhbnIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RlZm9vby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWtlYmVlY2hhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b255bWlsbGlvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NodWFyYWljaHVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lyYWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGV0cmFuZ3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG1pdHJpeWNodXRhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYXJsaWVnYW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FyYXNobWFudGVnaGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRoYW1kYW5uYXdheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haW5zbGV5d2Fnb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3Zlbmxlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWlzYWxhYmlkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jlc2h1ci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJseXNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kdXRjaG5hZGlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RlZGR5emV0dGVybHVuZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW11ZWxrcmFmdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hb2ltZWRpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b2RkcmV3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvZGVwb2V0X3J1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FydHZhdnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVub2l0Ym91Y2FydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb21hcm1lbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb2xtYXJsb3Blei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jcmVhcnRpbmMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaG9ta2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2Fib3JlbnRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2JpbmNsZWRpZXJlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21heGltc29yb2tpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wbGFzdGljaW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2oyZGVtZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZWFjaGFuYW5yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thcGFsdWNjaW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVfYXNjYW5pby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yaWthcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXdpZHd1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmNvcmFtaXJlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmdlbGNyZWF0aXZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JwYXRleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wb3BleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZWhhdGthdGh1cmlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZV9wdXJwbGVidW5ueS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci8xbWFya2l6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FqYXh5X3J1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyZW5tdXJyZWxsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2R1ZGVzdGVpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vc2thcmxldmluc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvcnN0dWJlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZWhmeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWNpdmFkZWxpbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVhbmRyb3ZhcmFuZGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2NvdHRnYWxsYW50LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3Rvcl9oYXlkaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2F3cmIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnloYW5oYXNzYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW1heXZzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FfYnJpeGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thcm9sa3Jha293aWFrXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXJrdWxhbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2VyYW43LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NnZ2F1cmF2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NocmlzX3dpdGtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvc29zaW5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BvbGFyaXR5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdHRsYXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJhbmRvbmJ1cmtlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbnN0YW50eC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZXlsb3JmZWxpei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jcmFpZ2VsaW1lbGlhaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYWNoZWxyZXZlbGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JlYWJvMTAxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhaG1lZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmlja3l5ZWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2owNG50b2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3Bicm9tYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZWJhc2h0b24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanBlbmljby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mcmFuY2lzX3ZlZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2t0YXllbGlwZWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2lraWxsby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWJiaWFuei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYXJyeWdlcmFyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9Ccm91bWlZb3Vzc2VmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzB0aGVycGxhbmV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21iaWxhbHNpZGRpcXVlMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pb251c3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3Jycl9ubC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saW1pbmhhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Jhd2RpZ2dpZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yeWFuZG93bmllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NldGhsb3VleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9waXhhZ2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJwaXRuai8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zd2l0bWVyNzc3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2V2bmNsY2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FuaWNrYWlyYWovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHV6aWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGJha2Rlc2lnbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVzYnVqdXBpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cGpvZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG93aWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGlua2lib2wvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFsaW50b3Jvc3ovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW1jb2RpbmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWd1c3RpbmNydWl6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2d1c290by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aG9tYXNzY2hyaWplci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdXBlcm91dG1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYWxtZXJyYXV0YW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2FicmllbGl6YWxvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dvamVhbnluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhdmlkYmFsZGllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL192b2p0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYXVyZW5ncmF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p5ZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL215bXlib3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVsbGxlby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJjaW90b2xlZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmluamFkM20wLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RvX3NvaGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhc3NsdW5zZm9yZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdXJpZHJhaGhhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZXZpc2FuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dyYWhhbWtlbm5lcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVwZXRpdG9ncmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW50b25nZW5raW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVzc29pbGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW1hbmRhYnV6YXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhZnJhbmtvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2NvbGVyby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kc3M0OS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXR0MzIyNC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ibHVlc2l4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3F1YWlsYW5kcXVhc2FyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0FsYmVydG9Db2NvY2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVwaW5za2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2VtZW50aXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWh1ZG9iaXZuaWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpYmF1dF9yZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vbGdhcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hvamJlcmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXRvbG9rb25uaWtvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXJldG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmF1cGludG9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dlZ290dmljZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveGFkaGl4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hY3hpbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2RueWxvYm9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZGNhbXBvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWRlYnl2YWRpbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXJ0b3N6ZGF3eWR6aWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VwZXJ2b3ZhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmtyZXR6bG9mZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92b25hY2hvby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXJ5bHdzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZXZlZGVzaWduZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXlsZXNiLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlcmJpZ3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVwYXVsYXdhZ25lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nZXNoYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2l6bWVlZGV2aWwxOTkxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL19zY290dGJ1cmdlc3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGlzb3Zza3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF2aWRzYXNkYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcnRkX3NpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvWW91bmdDdXRsYXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21nb250by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pdHN0b3RhbGx5YW15LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvcnF1aW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29zbW9uZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9va3NhbmFmcmV3ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvemF1ZXJrcmF1dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pYW1rZWl0aG1hc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pdGluaGF5YXJhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sbWphYnJldS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYW5kYWxhcmVvcGVucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGlua2xlZnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcG9uY2hvbWVuZGl2aWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVhbXBlcnJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JydW5vZGVzaWduMTIwNi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXNleWNhdmFuYWdoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2x1eGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG90Z3JpZGxpbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3BlZHdpZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWRld3VsZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXR0c2FwaWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGVsZGVybGVhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaHJpc3N0dW1waC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXlwaGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25zYW1veWxvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaHJpc3ZhbmRlcmtvb2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVzdG1lX3RpbW90aHlnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL290b3prLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ByaW56YWRpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2d1NXRhZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jeXJpbF9nYWlsbGFyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kX2tvYmVseWF0c2t5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rhbmlsb2MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbndkc2hhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvbWFuYnVsYWgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2traXJpbG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2R2ZHdpbmRlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW5ub2wvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhla2V2aW5qb25lcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qd2FsdGVyMTQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGltZ3Rob21hcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9idWRkaGFzb3VyY2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdXhwaXBlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGF0b25ldG9tbXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGlhbnNpZ2l0cC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZHJpZW50aHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2xpbW1rYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9na2FhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXJla2NyYW1lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZW5ueXlvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lcnJzb2Z0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3hhbGlvbm1hbGlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VkaGVuZGVyc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tleXVyaTg1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JveGFuZWphbW1ldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raW1jb29sLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Vka2YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0a2lucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGVzc2FuZHJvcmliZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYWNrc29ubGF0a2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVicm9uamVubmFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvc3Rhc3B0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thcmxrYW5hbGwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbW95bmloYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFucGxpZWdvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhdWxpaGlydmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2VzbGV5dHJhbmtpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mamFndWVyby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ib3dicmljay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXNoYWFhYWFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3lhc3NpcnlhaHlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RwYXJyZWxsaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mb3RvbWFnaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWthX2phbWVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlbmlzZXBpcmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lxYmFscGVya2FzYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJ0aW5hbnN0eS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXJzZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcl9veS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdXN0aW5yb2IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2FicmllbHJvc3Nlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWxnb3Jkb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FybGZhaXJjbG91Z2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFlbGFiZWhzZXJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BpZXJyZXN0b2ZmZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbmpveXRoZXRhdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb2dhbmpsYW1iZXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JwZWV6eS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb3JleWdpbm5pdmFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hhbGhyb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXN2ZWV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xpbmdlc3dhcmFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvbHN2ZWluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BldGVyNTc2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JlaWRlaXJlZGFsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2V5bXVyZGFoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhcGhhZWxuaWtzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXZkaGV1dmVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21heGxpbmRlcm1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qaW1tdWlyaGVhZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZWdyZWF0aXZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZyYW5raWVmcmVlc2JpZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2J0dXJsaW5ja3gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvVGFsYmlfQ29uU2VwdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb25nbGl2ZW15d29yZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92YW5jaGVzei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWlrbGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlcm1hbm9icm90aGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Jlel9fX2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3JlZ3NxdWVlYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ncmVlbmJlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fcmFnem9yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FudGhvbnlzdWtvdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mbHVpZGJydXNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhY3RydHIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVobmdseW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JlcmdtYXJ0aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaHVnb2Nvcm5lam8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX2trZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHphbnRpZXZtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nhd2FsYXphci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zb3Zlc292ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb25zZ290d29vZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ieXJ5YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdnl0YXV0YXNfYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taXpoZ2FuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NpY2Vyb2JyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pbHNoZWxtZXJzc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2QzM3B0aG91Z2h0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhdmVjcmFpZ2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmNranJ2cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGV4YW5kZXJtYXllcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qY3ViaWMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3JhaWdyY29sZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFnYXdhcm1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2JfdGhvbWFzMTAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29mbGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFpa2Vsay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydGdpYmJvbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnVzc2VsbF9iYXlsaXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWhlc3Nsb3cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29keXNhbmZpbGlwcG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2VidGFueWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFkZWJ5YnJlbnRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kY2Fsb25hY2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVyZmVjdGZsb3cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvampzaWlpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhYXJhYnByZWV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t1bWFycmFqYW4xMjEyMy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pYW1zdGVmZmVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZW1pa2VuYWdsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jZWVrYXl0d2VldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYXJyeWJvbHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29uc3BpcmF0b3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFsbGFzYnBldGVycy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uM2RtYXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGVycGltb3N0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tpcmlsbHovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnlybmVjb3JlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pfZHJha2VfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhbGViam95Y2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnVzc29lZHUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaG9hbmdsb2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdG9ieXNheG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dvZnJhc2Rlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaW1hcG9zbnl5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RqaXNvdXNhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29rYW5kdW5nZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmlsbHlyb3NoYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3NrYW1heWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbW90aW9udGhpbmtzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tuaWxvYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hc2hvY2thMTgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFycmltby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXJ0am8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb21uaXp5YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lcm5lc3RzZW1lcmRhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJlYXNfcHIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWRnYXJjaHJpczk5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Rob21hc2dlaXNlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nc2VndWluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvYW5uZWZvdXJuaWVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlbWVyc2Rlc2lnbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRhbW1hcnNiYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFzaXJ3ZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uX3Rhc3NvbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamF2b3Jzemt5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZW1yZGF2ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95ZWNpZHNtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pY29sbGVyaWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhbmFwdWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmljb2xlZ2x5bm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVkemhpbl9taWxlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXNpZ25lcnZ6bS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raWFub3NocC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ldmFuZHJpeC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbHRlcmNodWNhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RocnViby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYV90aWF4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NzYmJfbWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG9ycGhlcm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF1cmlvbGcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJ1bm9fbWFydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWN0b3B1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVfd2luc2xldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2VtZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1NocmlpaWlpbXAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFjb2JiZW5uZXR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25mZWRvcm9mZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pYW1nbGlteS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGxhZ3JpbmdhdXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWlpYWlpYWlpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29sYW9sdXNvZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnVyeWFrbmljay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93aW0xay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWNrbGFja2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYTFjaGFwb25lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZXludmlsam9lbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdHJpa2V3YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnlhbmtpcmttYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmV3YWJvZ2Fkby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kb29vb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFnYW4xMjMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJpZmZzZXRpYXdhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbGVuYWRpc3NpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL213YXJrZW50aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpZXJyeW1laWVyXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yX2dhcmNpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kbWFja2VybWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JvcmFudHVsYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb251cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zcGFjZXdvb2RfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J5dWNoaTMxMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ldmFuc2hhamVkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RyaXN0YW5sZWdyb3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hvYWliMjUzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fpc2xpbm5rZWxseS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9va2Nva2VyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RpbXBldHJpY29sYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdW5zaGluZWRnaXJsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYWRhbWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxlY2xhcnNvbml2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25vbWlkZXNpZ25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BldGViZXJuYXJkby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zY290dGllZHVkZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWxsaW5ldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbXNvcGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ltYW1tdWh0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JlbmphbWluX2tuaWdodC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZXBkdWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9raTQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGFuY2VndXlhdHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmJveTE4OTUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW15d2ViYmIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcndldmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFydWludGVzZXR0ZGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JpY2J1cnRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZWxzaGQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmF0c2lyYWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJpbW96Y2lnbGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pmZmdyZG5yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzhkM2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2VuZXNlbGV6bmV2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsX2xpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NvdXBlcnBobHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXNsYXJraW5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzJmb2NrdXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2RhdmlzNTY1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3hpZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHVya3V0dXVsaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91eHdhcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGViaW5vY2xhcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2F1cmF2amFzc2FsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhdmlkbWVycmlxdWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWRzaXN0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZXdvZmZpY2VyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvam91cmluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RuaXJtYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2V2a2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXJfc2hpem5pdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbHVpc2lvX2F6ZXZlZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2xvdWRzdHVkaW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFudmllcmljaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGV4aXZhbmljaGtpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mcmFuX21jaGFteS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZXJyZXRtYWdhbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmV0cmF5ZGFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhZGlra2FyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXRiZWVkb3Rjb20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVyZW15d29yYm95cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icGFydHJpZGdlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hhZWxrb3Blci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaWx2M3Jndm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxldml6aW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9obnNtaXRoYWdlbmN5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xhd2xid295LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpdG9yMzc2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rlc2FzdHJvem8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpbW9fY3ovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFzb25tYXJram9uZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGhhdXNlcm1hbm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveHJhdmlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2d1aXNjaG1pdHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmlnb2Jyb254LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BhbmdoYWwwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pZ3VlbGtvb3JlbWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cmdlb25pc3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hyaXN0aWFub2xpZmYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FzcGVyZ3JsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lhbWthcm5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lwYXZlbGVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BpZXJyZV9uZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveTJncmFwaGljLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZXJsaW5ncnVsZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWxidXNjYWluZm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVubnlqaWVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0dXNob25hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VzdGViYW51cmliZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbWJyY2VjcmVhdGlvbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFuaWxsb3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWxsaW90bGV3aXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhcmxlc3JwcmF0dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92bGFkeW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW1tZWZmZXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nhcmxvc2JsYW5jb19ldS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZW9uZmVkb3Rvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYW5nYWZhbmdzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NocmlzX2ZyZWVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Rnb3JtdHgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJ5YW5fdG9waGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pwc2NyaWJibGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pZ2h0eTU1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhcmJvbnR3ZWx2ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pc2FhY2ZpZnRoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lhbWpkZWxlb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc25vd3dyaXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhcnB1dHJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RyZXdieXJlZXNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhY2hhY29yYXp6aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iaXN0cmlhbmlvc2lwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZ29vMDQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVoYW1vbmRlbGxvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3lheXRlZWpheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hX2hhcnJpczg4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZ3Vuc2FuYWJyaWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvemZvcnJlc3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vdmFsbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJsb3NqZ3NvdXNhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dlb2Jpa2FzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FoX2xpY2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9vbmV5ZG9vZGxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lcmRncjgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGRnZ2NjYWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvemFja2VlbGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25vcm1hbmJveC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbF9mdWVydGlzaW1vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lzbWFpbF9iaWx0YWdpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1YW5nb21lencvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam5tbnJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BhdHJpY2tjb29tYmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnlhbmpvaG5zb25fbWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFya29sc2NoZXNreS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZWZmZ29sZW5za2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3Zhc25pYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saW5kc2V5emlsbGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2F1Y2hvbWF0dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZnVzaW5hdHRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tldmlub2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2thbnN1cnJlZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRhbWF3ZXNvbWVmYWNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VtaWxlYm91ZGVsaW5nLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FyaXNoaV8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVhbm1hbWFydGluZXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2lraXppbmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbnRobXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWtnaW5mby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZXJyb3JwaXhlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jdXJpb3Vzb25hdXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJoZWVtby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoYWVsY29sZW5zby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mb2N6emkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFydGlwMDcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhhb2RhbmcxNy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2huY2FmYXp6YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2JpbmxheWZpZWxkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZyYW5jaXNjb2Ftay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYmR1bGh5ZXVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmtsYW1iLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Vkb2JlbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmVzZW5mcmVkcmlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pa2FlbGpvcmh1bHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hyaXNzbG93aWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmluY2lhcnRzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21lZWxmb3JkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VsbGlvdG5vbHRlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95ZWh1ZGFiLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpamF5a2FydGhpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZnJvaHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zZXBfbWFydGlucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hdHRhY2tzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cjRkeWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHVtc2tpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2luc3RhbG94LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbmdvc2FuZ28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGF1bGZhcmluby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXpha3k5OTkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2l3aXVwb3Zlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9udmt6bmVtby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b21fZXZlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYXRidXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd29vZHNtYW4wMDEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zaG1lZGVza2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhld2lsbGJlYXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BzYWlrYWxpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvZV9ibGFjay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGVpbmFkc2F5cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJjdXNnb3JpbGxpdXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaG90YV92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pnaHlsbGViZXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NoaW56ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYW5wYWxvdW5lay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJlbWllc3Bva2VuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlcl9ydXUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFuc293dGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZlbGlwZWFwaXJlc3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFndWd6YnJhbmQyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wb3N0ZXJqb2IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmF0aGFsaWVfZnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm9iYnl0d29zaG9lcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kcmVpemxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcmVteW1vdXRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbGlzYWJldGhramFlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ub3RiYWRhcnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbW9oYW5yb2hpdGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamxzb2xlcmRlbHRvcm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXRza2F3c2FyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nsb3dzcG9jay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci96dmNoa2VsbHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2lsamFuc2xvZnN0cmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3JhaWdoZW5uZWJlcnJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RydWJlYXR0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdWF1bWxvbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW1zY291dG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQmVub3VhcnJhZGVNLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dpcHN5X3JhZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZXRvbmV0X2lsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fya29rb2xleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pdHNhamltaXRoaW5nLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NtYWxvbnNvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvcmRlYW5kYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fZHdpdGVfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JpY2hhcmRnYXJyZXR0cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ncmVncndpbGtpbnNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmF0b2xpbmljb2xhZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sdTRzaDFpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZWZhbm90aXJsb25pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29zdGlyYnUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFyY3lzdG9uZ2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFpdGFuYW1vcmVuby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoYWVsY29taXNrZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRoaWFyZGFuYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJjb21hbm9fLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhdmlkY2F6YWxpcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWxjb25lcmllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dyZWdraWxpYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmNyYWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm9semFubWFyY28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG93X3Jlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92bGFqa2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGV0YXJfcHJvZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb25rc3ByLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FrbWFsZmlrcmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWZhY2NoaW5lbGxvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F0YW5pc20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFycnlfc2lzdGFsYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXVycmF5c3dpZnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm9id2Fzc2VybWFubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYXZyMWwwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZHNoZW5zZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXJfc3VidGxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RldmlsamhvXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWxpbWlhbm9mZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2V0cnVlc2RlbGwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHdpdHR5cG9yay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haXJza3lsYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG5lemt1bWFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RnYWpqYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hlcmlmX2IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FsdmFmYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb3Vpc19jdXJyaWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVlZW5yaWdodC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jeWJpbmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXlyb25uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY2t5c2hpdHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3dlZXRkZWxpc2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2JvbGxlcjEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmVzZGphc3NvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21lbHZpbmRpZGl0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHlzb2xvbW9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoYWlzc2VsZW5hdG9yXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sdm92ZW5vay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9naXVsaXVzYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZWx5YWV2X3JzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL292ZXJjbG9hY2tlZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYW1hbF9jaGFuZW1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbmN1Ym84Mi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZWxsb2ZldmVycnJyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21oYWxpZ293c2tpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1bmxhbmRpY3R3aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnU3OTIxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHl0bGF3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcmVtZXJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZpbmNoamtlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbmlnbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91bXVyZ2RrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Njb3R0ZmVsdGhhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYW5zZXJlbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXV0dV9rcmlzaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2R5dGFnZ2FydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9udGZibG9nLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RhbnZlZXJyYW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGZhbHVjYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWx4bGVyb3lkZXZhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdWNpbmdiZWxhbmc0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jhcmdhb3JvYmFsby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2xncnV2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0YWxld2luZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9reWxlZnJvc3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmF1bWFubnpvbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5nZWxjb2xiZXJnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhY2hpbmdhd2FzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pqc2hhdzE0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhbWFuYXRoYW5fcGR5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvaG5kZXplbWJlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWxzaG9lbnNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmFuZG9ubW9ycmVhbGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbnV0enVtaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmFuZG9uZmxhdHNvZGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2VyZ2V5YWxtb25lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tsZWZ1ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raXJhbmdvcGFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhdW1hbm5fYWxleC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXR0aGV3a2F5Xy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXlfd2lsYnVybi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGVzZ2FyZWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXByaWVuZGVhdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2hucmlvcmRhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93YWtlX2dzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZWtzaXRhcHB1cmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW1zZ3VsYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveGlsYW50cmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW1vbWVudWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2lyY2FsZWJncm92ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZXdicnVzaGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hzaW55bzIzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL200cmlvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thdGllbWRhbHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvczRmMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lY29tbWVyY2VpbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJsaW5qYXlha29keS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zd29vc2h5Y3VlYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW5nZHRoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvZGVyZGlhei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ibHVlZnhfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpdmVrcHJ2ci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYXNoYV9zaGVzdGFrb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXVnZW5lZXdlYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZ2NsZWdnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL24xZ2h0X2NvZGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RpeGNoZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmxha2VoYXdrc3dvcnRoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RydWVibG9vZF8zMy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYWlfbmluaF9uZ3V5ZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyY2xnb256YWxlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95ZXNtZWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZXBoY291ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kb3Jvbm1hbGtpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J1ZWhsZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuYXNuYWthd2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2lqYW5tYWhhcmphbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZWFyZXNhdmFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZWZ2ZGhhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90d2VldHViaGFpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZWNhcnBlbnRpZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZml0ZXJpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbnRvbnlyeW5keWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZDAwbWF6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZW9ubHl6ZWtlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pc3NhYWFteS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJsb3NtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbmVrZW50aGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmVldGFqYXllbmRyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJlbXlzaGlta28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVzdGlucmdyYWhhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGVmYW5vem9mZm9saS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vdmVycmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXJlYmF5MDA3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NodmVsbzk2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3B5cm9uaXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZWRqcGV0ZXJzZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnR5dWttYWV2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL193aWxsaWFtZ3VlcnJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsYmVydGF1Z3VzdGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Zpa2FzaHBhdGhhazE4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tldmluam9obmRheXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmpfZGVtaWVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbGlycGl4b2lsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dvZGRhcmRsZXdpcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYWFzbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanFpdXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hleWNhbXRheWxvci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYXN0eWFfbWFuZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXN0ZXJtaW5kZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2Npbm9qYXNzbzEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbnlhbmNlY29tLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbmR5d29vZHJ1ZmYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmlnaGFuZGRlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYnRyYW5zcGFyZW50LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F2aWRkYXllbnRvbmJheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yaWNod2lsZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXlzaXhfZGl6enkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHVyOGxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NleWVkaG9zc2VpbjEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJpdmV0d2FnbmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VtbWFuZGVubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXZfZXNzZW50aWFscy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qbWZzb2NpYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3lhcmRlbm9vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXRlYW9kdml0ZXphLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dlYXZlcm1lZGlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211ZmFkZGFsX213LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhZmVlc2toYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXNoZXJuYXRhbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VsYXFvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VkZGllY2hlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NlY2FybG9zcHNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZtX2YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW5yaWNvY2ljY29uaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW5tYXJ0aW43MC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nbW91cmllci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kb25qYWluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21yeGxva2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3BlZHJvcGluaG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWl0YXJhZmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3NjYXJvd3VzdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYWxwaF9sYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGFuY2hhamFueWFnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dvb2R5ZG90bXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVycnliYWkxOTA3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcnNoYWxsY2hlbl8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveGFtb3JlcC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haW9fX18vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhYWJhbmVfd2FpbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90eGN4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FrYXNoc2hhcm1hMzkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmFsbGluZ19zb3VsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhaW5yYWphLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211Z3VrYW1pbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2hhbm5lc25ldS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJrd2llbmFuZHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FydGhpcGFucmFqLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhbGFrYXl1cml5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsYW5femhhbmdfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xheWVyc3Nzcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXNwZXJub3Jka3Zpc3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlyZmFucXVyZXNoaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYW5uYV9zbWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvVk1pbGVzY3UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWVvbjU2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21fa2FsaWJyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zcmVlaml0aGV4cC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaWNlc2FsZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGhvb3RfYW1pdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zbWVub3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9uZXNvbWVsZW1vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92bGFkaW1pcmRldmljLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvZWxjaXByaWFuby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYWxpZ2FsaWhhcnVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J1bGVzd2FwbmlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NlcmVma2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWZhcmFmb25vdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWthc3ZpbmZvdGVjaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91cnJ1dGltZW9saS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmVhbmRhY29tLzEyOC5qcGdcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiY29tXCIsXG4gIFwiYml6XCIsXG4gIFwiaW5mb1wiLFxuICBcIm5hbWVcIixcbiAgXCJuZXRcIixcbiAgXCJvcmdcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiZ21haWwuY29tXCIsXG4gIFwieWFob28uY29tXCIsXG4gIFwiaG90bWFpbC5jb21cIlxuXTtcbiIsInZhciBpbnRlcm5ldCA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBpbnRlcm5ldDtcbmludGVybmV0LmZyZWVfZW1haWwgPSByZXF1aXJlKFwiLi9mcmVlX2VtYWlsXCIpO1xuaW50ZXJuZXQuZG9tYWluX3N1ZmZpeCA9IHJlcXVpcmUoXCIuL2RvbWFpbl9zdWZmaXhcIik7XG5pbnRlcm5ldC5hdmF0YXJfdXJpID0gcmVxdWlyZShcIi4vYXZhdGFyX3VyaVwiKTtcbiIsInZhciBsb3JlbSA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBsb3JlbTtcbmxvcmVtLndvcmRzID0gcmVxdWlyZShcIi4vd29yZHNcIik7XG5sb3JlbS5zdXBwbGVtZW50YWwgPSByZXF1aXJlKFwiLi9zdXBwbGVtZW50YWxcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImFiYmFzXCIsXG4gIFwiYWJkdWNvXCIsXG4gIFwiYWJlb1wiLFxuICBcImFic2NpZG9cIixcbiAgXCJhYnNjb25kaXR1c1wiLFxuICBcImFic2Vuc1wiLFxuICBcImFic29yYmVvXCIsXG4gIFwiYWJzcXVlXCIsXG4gIFwiYWJzdGVyZ29cIixcbiAgXCJhYnN1bVwiLFxuICBcImFidW5kYW5zXCIsXG4gIFwiYWJ1dG9yXCIsXG4gIFwiYWNjZWRvXCIsXG4gIFwiYWNjZW5kb1wiLFxuICBcImFjY2VwdHVzXCIsXG4gIFwiYWNjaXBpb1wiLFxuICBcImFjY29tbW9kb1wiLFxuICBcImFjY3VzYXRvclwiLFxuICBcImFjZXJcIixcbiAgXCJhY2VyYml0YXNcIixcbiAgXCJhY2VydnVzXCIsXG4gIFwiYWNpZHVzXCIsXG4gIFwiYWNpZXNcIixcbiAgXCJhY3F1aXJvXCIsXG4gIFwiYWNzaVwiLFxuICBcImFkYW1vXCIsXG4gIFwiYWRhdWdlb1wiLFxuICBcImFkZG9cIixcbiAgXCJhZGR1Y29cIixcbiAgXCJhZGVtcHRpb1wiLFxuICBcImFkZW9cIixcbiAgXCJhZGVwdGlvXCIsXG4gIFwiYWRmZWN0dXNcIixcbiAgXCJhZGZlcm9cIixcbiAgXCJhZGZpY2lvXCIsXG4gIFwiYWRmbGljdG9cIixcbiAgXCJhZGhhZXJvXCIsXG4gIFwiYWRodWNcIixcbiAgXCJhZGljaW9cIixcbiAgXCJhZGltcGxlb1wiLFxuICBcImFkaW52ZW50aXRpYXNcIixcbiAgXCJhZGlwaXNjb3JcIixcbiAgXCJhZGl1dm9cIixcbiAgXCJhZG1pbmlzdHJhdGlvXCIsXG4gIFwiYWRtaXJhdGlvXCIsXG4gIFwiYWRtaXR0b1wiLFxuICBcImFkbW9uZW9cIixcbiAgXCJhZG1vdmVvXCIsXG4gIFwiYWRudW9cIixcbiAgXCJhZG9wdG9cIixcbiAgXCJhZHNpZHVlXCIsXG4gIFwiYWRzdHJpbmdvXCIsXG4gIFwiYWRzdWVzY29cIixcbiAgXCJhZHN1bVwiLFxuICBcImFkdWxhdGlvXCIsXG4gIFwiYWR1bGVzY2Vuc1wiLFxuICBcImFkdWx0dXNcIixcbiAgXCJhZHVyb1wiLFxuICBcImFkdmVuaW9cIixcbiAgXCJhZHZlcnN1c1wiLFxuICBcImFkdm9jb1wiLFxuICBcImFlZGlmaWNpdW1cIixcbiAgXCJhZWdlclwiLFxuICBcImFlZ3JlXCIsXG4gIFwiYWVncm90YXRpb1wiLFxuICBcImFlZ3J1c1wiLFxuICBcImFlbmV1c1wiLFxuICBcImFlcXVpdGFzXCIsXG4gIFwiYWVxdXVzXCIsXG4gIFwiYWVyXCIsXG4gIFwiYWVzdGFzXCIsXG4gIFwiYWVzdGl2dXNcIixcbiAgXCJhZXN0dXNcIixcbiAgXCJhZXRhc1wiLFxuICBcImFldGVybnVzXCIsXG4gIFwiYWdlclwiLFxuICBcImFnZ2Vyb1wiLFxuICBcImFnZ3JlZGlvclwiLFxuICBcImFnbml0aW9cIixcbiAgXCJhZ25vc2NvXCIsXG4gIFwiYWdvXCIsXG4gIFwiYWl0XCIsXG4gIFwiYWl1bnRcIixcbiAgXCJhbGllbnVzXCIsXG4gIFwiYWxpaVwiLFxuICBcImFsaW9xdWlcIixcbiAgXCJhbGlxdWFcIixcbiAgXCJhbGl1c1wiLFxuICBcImFsbGF0dXNcIixcbiAgXCJhbG9cIixcbiAgXCJhbHRlclwiLFxuICBcImFsdHVzXCIsXG4gIFwiYWx2ZXVzXCIsXG4gIFwiYW1hcml0dWRvXCIsXG4gIFwiYW1iaXR1c1wiLFxuICBcImFtYnVsb1wiLFxuICBcImFtaWNpdGlhXCIsXG4gIFwiYW1pY3VsdW1cIixcbiAgXCJhbWlzc2lvXCIsXG4gIFwiYW1pdGFcIixcbiAgXCJhbWl0dG9cIixcbiAgXCJhbW9cIixcbiAgXCJhbW9yXCIsXG4gIFwiYW1vdmVvXCIsXG4gIFwiYW1wbGV4dXNcIixcbiAgXCJhbXBsaXR1ZG9cIixcbiAgXCJhbXBsdXNcIixcbiAgXCJhbmNpbGxhXCIsXG4gIFwiYW5nZWx1c1wiLFxuICBcImFuZ3VsdXNcIixcbiAgXCJhbmd1c3R1c1wiLFxuICBcImFuaW1hZHZlcnRvXCIsXG4gIFwiYW5pbWlcIixcbiAgXCJhbmltdXNcIixcbiAgXCJhbm51c1wiLFxuICBcImFuc2VyXCIsXG4gIFwiYW50ZVwiLFxuICBcImFudGVhXCIsXG4gIFwiYW50ZXBvbm9cIixcbiAgXCJhbnRpcXV1c1wiLFxuICBcImFwZXJpb1wiLFxuICBcImFwZXJ0ZVwiLFxuICBcImFwb3N0b2x1c1wiLFxuICBcImFwcGFyYXR1c1wiLFxuICBcImFwcGVsbG9cIixcbiAgXCJhcHBvbm9cIixcbiAgXCJhcHBvc2l0dXNcIixcbiAgXCJhcHByb2JvXCIsXG4gIFwiYXB0b1wiLFxuICBcImFwdHVzXCIsXG4gIFwiYXB1ZFwiLFxuICBcImFxdWFcIixcbiAgXCJhcmFcIixcbiAgXCJhcmFuZWFcIixcbiAgXCJhcmJpdHJvXCIsXG4gIFwiYXJib3JcIixcbiAgXCJhcmJ1c3R1bVwiLFxuICBcImFyY2FcIixcbiAgXCJhcmNlb1wiLFxuICBcImFyY2Vzc29cIixcbiAgXCJhcmN1c1wiLFxuICBcImFyZ2VudHVtXCIsXG4gIFwiYXJndW1lbnR1bVwiLFxuICBcImFyZ3VvXCIsXG4gIFwiYXJtYVwiLFxuICBcImFybWFyaXVtXCIsXG4gIFwiYXJtb1wiLFxuICBcImFyb1wiLFxuICBcImFyc1wiLFxuICBcImFydGljdWx1c1wiLFxuICBcImFydGlmaWNpb3NlXCIsXG4gIFwiYXJ0b1wiLFxuICBcImFyeFwiLFxuICBcImFzY2lzY29cIixcbiAgXCJhc2NpdFwiLFxuICBcImFzcGVyXCIsXG4gIFwiYXNwaWNpb1wiLFxuICBcImFzcG9ydG9cIixcbiAgXCJhc3NlbnRhdG9yXCIsXG4gIFwiYXN0cnVtXCIsXG4gIFwiYXRhdnVzXCIsXG4gIFwiYXRlclwiLFxuICBcImF0cXVpXCIsXG4gIFwiYXRyb2NpdGFzXCIsXG4gIFwiYXRyb3hcIixcbiAgXCJhdHRlcm9cIixcbiAgXCJhdHRvbGxvXCIsXG4gIFwiYXR0b25iaXR1c1wiLFxuICBcImF1Y3RvclwiLFxuICBcImF1Y3R1c1wiLFxuICBcImF1ZGFjaWFcIixcbiAgXCJhdWRheFwiLFxuICBcImF1ZGVudGlhXCIsXG4gIFwiYXVkZW9cIixcbiAgXCJhdWRpb1wiLFxuICBcImF1ZGl0b3JcIixcbiAgXCJhdWZlcm9cIixcbiAgXCJhdXJldXNcIixcbiAgXCJhdXJpc1wiLFxuICBcImF1cnVtXCIsXG4gIFwiYXV0XCIsXG4gIFwiYXV0ZW1cIixcbiAgXCJhdXR1c1wiLFxuICBcImF1eGlsaXVtXCIsXG4gIFwiYXZhcml0aWFcIixcbiAgXCJhdmFydXNcIixcbiAgXCJhdmVob1wiLFxuICBcImF2ZXJ0b1wiLFxuICBcImF2b2NvXCIsXG4gIFwiYmFpdWx1c1wiLFxuICBcImJhbGJ1c1wiLFxuICBcImJhcmJhXCIsXG4gIFwiYmFyZHVzXCIsXG4gIFwiYmFzaXVtXCIsXG4gIFwiYmVhdHVzXCIsXG4gIFwiYmVsbGljdXNcIixcbiAgXCJiZWxsdW1cIixcbiAgXCJiZW5lXCIsXG4gIFwiYmVuZWZpY2l1bVwiLFxuICBcImJlbmV2b2xlbnRpYVwiLFxuICBcImJlbmlnbmVcIixcbiAgXCJiZXN0aWFcIixcbiAgXCJiaWJvXCIsXG4gIFwiYmlzXCIsXG4gIFwiYmxhbmRpb3JcIixcbiAgXCJib251c1wiLFxuICBcImJvc1wiLFxuICBcImJyZXZpc1wiLFxuICBcImNhZG9cIixcbiAgXCJjYWVjdXNcIixcbiAgXCJjYWVsZXN0aXNcIixcbiAgXCJjYWVsdW1cIixcbiAgXCJjYWxhbWl0YXNcIixcbiAgXCJjYWxjYXJcIixcbiAgXCJjYWxjb1wiLFxuICBcImNhbGN1bHVzXCIsXG4gIFwiY2FsbGlkZVwiLFxuICBcImNhbXBhbmFcIixcbiAgXCJjYW5kaWR1c1wiLFxuICBcImNhbmlzXCIsXG4gIFwiY2Fub25pY3VzXCIsXG4gIFwiY2FudG9cIixcbiAgXCJjYXBpbGx1c1wiLFxuICBcImNhcGlvXCIsXG4gIFwiY2FwaXR1bHVzXCIsXG4gIFwiY2FwdG9cIixcbiAgXCJjYXB1dFwiLFxuICBcImNhcmJvXCIsXG4gIFwiY2FyY2VyXCIsXG4gIFwiY2FyZW9cIixcbiAgXCJjYXJpZXNcIixcbiAgXCJjYXJpb3N1c1wiLFxuICBcImNhcml0YXNcIixcbiAgXCJjYXJtZW5cIixcbiAgXCJjYXJwb1wiLFxuICBcImNhcnVzXCIsXG4gIFwiY2Fzc29cIixcbiAgXCJjYXN0ZVwiLFxuICBcImNhc3VzXCIsXG4gIFwiY2F0ZW5hXCIsXG4gIFwiY2F0ZXJ2YVwiLFxuICBcImNhdHR1c1wiLFxuICBcImNhdWRhXCIsXG4gIFwiY2F1c2FcIixcbiAgXCJjYXV0ZVwiLFxuICBcImNhdmVvXCIsXG4gIFwiY2F2dXNcIixcbiAgXCJjZWRvXCIsXG4gIFwiY2VsZWJyZXJcIixcbiAgXCJjZWxlclwiLFxuICBcImNlbG9cIixcbiAgXCJjZW5hXCIsXG4gIFwiY2VuYWN1bHVtXCIsXG4gIFwiY2Vub1wiLFxuICBcImNlbnN1cmFcIixcbiAgXCJjZW50dW1cIixcbiAgXCJjZXJub1wiLFxuICBcImNlcm51dXNcIixcbiAgXCJjZXJ0ZVwiLFxuICBcImNlcnRvXCIsXG4gIFwiY2VydHVzXCIsXG4gIFwiY2VydnVzXCIsXG4gIFwiY2V0ZXJhXCIsXG4gIFwiY2hhcmlzbWFcIixcbiAgXCJjaGlyb2dyYXBodW1cIixcbiAgXCJjaWJvXCIsXG4gIFwiY2lidXNcIixcbiAgXCJjaWN1dGFcIixcbiAgXCJjaWxpY2l1bVwiLFxuICBcImNpbWVudGFyaXVzXCIsXG4gIFwiY2ltaW5hdGlvXCIsXG4gIFwiY2luaXNcIixcbiAgXCJjaXJjdW12ZW5pb1wiLFxuICBcImNpdG9cIixcbiAgXCJjaXZpc1wiLFxuICBcImNpdml0YXNcIixcbiAgXCJjbGFtXCIsXG4gIFwiY2xhbW9cIixcbiAgXCJjbGFyb1wiLFxuICBcImNsYXJ1c1wiLFxuICBcImNsYXVkZW9cIixcbiAgXCJjbGF1c3RydW1cIixcbiAgXCJjbGVtZW50aWFcIixcbiAgXCJjbGliYW51c1wiLFxuICBcImNvYWR1bmF0aW9cIixcbiAgXCJjb2FlZ3Jlc2NvXCIsXG4gIFwiY29lcGlcIixcbiAgXCJjb2VyY2VvXCIsXG4gIFwiY29naXRvXCIsXG4gIFwiY29nbmF0dXNcIixcbiAgXCJjb2dub21lblwiLFxuICBcImNvZ29cIixcbiAgXCJjb2hhZXJvXCIsXG4gIFwiY29oaWJlb1wiLFxuICBcImNvaG9yc1wiLFxuICBcImNvbGxpZ29cIixcbiAgXCJjb2xsb2NvXCIsXG4gIFwiY29sbHVtXCIsXG4gIFwiY29sb1wiLFxuICBcImNvbG9yXCIsXG4gIFwiY29tYVwiLFxuICBcImNvbWJpYm9cIixcbiAgXCJjb21idXJvXCIsXG4gIFwiY29tZWRvXCIsXG4gIFwiY29tZXNcIixcbiAgXCJjb21ldGVzXCIsXG4gIFwiY29taXNcIixcbiAgXCJjb21pdGF0dXNcIixcbiAgXCJjb21tZW1vcm9cIixcbiAgXCJjb21taW5vclwiLFxuICBcImNvbW1vZG9cIixcbiAgXCJjb21tdW5pc1wiLFxuICBcImNvbXBhcm9cIixcbiAgXCJjb21wZWxsb1wiLFxuICBcImNvbXBsZWN0dXNcIixcbiAgXCJjb21wb25vXCIsXG4gIFwiY29tcHJlaGVuZG9cIixcbiAgXCJjb21wdHVzXCIsXG4gIFwiY29uYXR1c1wiLFxuICBcImNvbmNlZG9cIixcbiAgXCJjb25jaWRvXCIsXG4gIFwiY29uY3VsY29cIixcbiAgXCJjb25kaWNvXCIsXG4gIFwiY29uZHVjb1wiLFxuICBcImNvbmZlcm9cIixcbiAgXCJjb25maWRvXCIsXG4gIFwiY29uZm9ydG9cIixcbiAgXCJjb25mdWdvXCIsXG4gIFwiY29uZ3JlZ2F0aW9cIixcbiAgXCJjb25pY2lvXCIsXG4gIFwiY29uaWVjdG9cIixcbiAgXCJjb25pdG9yXCIsXG4gIFwiY29uaXVyYXRpb1wiLFxuICBcImNvbm9yXCIsXG4gIFwiY29ucXVlcm9yXCIsXG4gIFwiY29uc2NlbmRvXCIsXG4gIFwiY29uc2Vydm9cIixcbiAgXCJjb25zaWRlcm9cIixcbiAgXCJjb25zcGVyZ29cIixcbiAgXCJjb25zdGFuc1wiLFxuICBcImNvbnN1YXNvclwiLFxuICBcImNvbnRhYmVzY29cIixcbiAgXCJjb250ZWdvXCIsXG4gIFwiY29udGlnb1wiLFxuICBcImNvbnRyYVwiLFxuICBcImNvbnR1cmJvXCIsXG4gIFwiY29udmVudHVzXCIsXG4gIFwiY29udm9jb1wiLFxuICBcImNvcGlhXCIsXG4gIFwiY29waW9zZVwiLFxuICBcImNvcm51XCIsXG4gIFwiY29yb25hXCIsXG4gIFwiY29ycHVzXCIsXG4gIFwiY29ycmVwdGl1c1wiLFxuICBcImNvcnJpZ29cIixcbiAgXCJjb3Jyb2Jvcm9cIixcbiAgXCJjb3JydW1wb1wiLFxuICBcImNvcnVzY3VzXCIsXG4gIFwiY290aWRpZVwiLFxuICBcImNyYXB1bGFcIixcbiAgXCJjcmFzXCIsXG4gIFwiY3Jhc3RpbnVzXCIsXG4gIFwiY3JlYXRvclwiLFxuICBcImNyZWJlclwiLFxuICBcImNyZWJyb1wiLFxuICBcImNyZWRvXCIsXG4gIFwiY3Jlb1wiLFxuICBcImNyZXB0aW9cIixcbiAgXCJjcmVwdXNjdWx1bVwiLFxuICBcImNyZXNjb1wiLFxuICBcImNyZXRhXCIsXG4gIFwiY3JpYnJvXCIsXG4gIFwiY3JpbmlzXCIsXG4gIFwiY3J1Y2lhbWVudHVtXCIsXG4gIFwiY3J1ZGVsaXNcIixcbiAgXCJjcnVlbnR1c1wiLFxuICBcImNydXJcIixcbiAgXCJjcnVzdHVsdW1cIixcbiAgXCJjcnV4XCIsXG4gIFwiY3ViaWN1bGFyaXNcIixcbiAgXCJjdWJpdHVtXCIsXG4gIFwiY3Vib1wiLFxuICBcImN1aVwiLFxuICBcImN1aXVzXCIsXG4gIFwiY3VscGFcIixcbiAgXCJjdWxwb1wiLFxuICBcImN1bHRlbGx1c1wiLFxuICBcImN1bHR1cmFcIixcbiAgXCJjdW1cIixcbiAgXCJjdW5hYnVsYVwiLFxuICBcImN1bmFlXCIsXG4gIFwiY3VuY3RhdGlvXCIsXG4gIFwiY3VwaWRpdGFzXCIsXG4gIFwiY3VwaW9cIixcbiAgXCJjdXBwZWRpYVwiLFxuICBcImN1cHJlc3N1c1wiLFxuICBcImN1clwiLFxuICBcImN1cmFcIixcbiAgXCJjdXJhdGlvXCIsXG4gIFwiY3VyaWFcIixcbiAgXCJjdXJpb3NpdGFzXCIsXG4gIFwiY3VyaXNcIixcbiAgXCJjdXJvXCIsXG4gIFwiY3VycmljdWx1bVwiLFxuICBcImN1cnJ1c1wiLFxuICBcImN1cnNpbVwiLFxuICBcImN1cnNvXCIsXG4gIFwiY3Vyc3VzXCIsXG4gIFwiY3VydG9cIixcbiAgXCJjdXJ0dXNcIixcbiAgXCJjdXJ2b1wiLFxuICBcImN1cnZ1c1wiLFxuICBcImN1c3RvZGlhXCIsXG4gIFwiZGFtbmF0aW9cIixcbiAgXCJkYW1ub1wiLFxuICBcImRhcGlmZXJcIixcbiAgXCJkZWJlb1wiLFxuICBcImRlYmlsaXRvXCIsXG4gIFwiZGVjZW5zXCIsXG4gIFwiZGVjZXJub1wiLFxuICBcImRlY2V0XCIsXG4gIFwiZGVjaW11c1wiLFxuICBcImRlY2lwaW9cIixcbiAgXCJkZWNvclwiLFxuICBcImRlY3JldHVtXCIsXG4gIFwiZGVjdW1ib1wiLFxuICBcImRlZGVjb3JcIixcbiAgXCJkZWRpY29cIixcbiAgXCJkZWR1Y29cIixcbiAgXCJkZWZhZWNvXCIsXG4gIFwiZGVmZW5kb1wiLFxuICBcImRlZmVyb1wiLFxuICBcImRlZmVzc3VzXCIsXG4gIFwiZGVmZXRpc2NvclwiLFxuICBcImRlZmljaW9cIixcbiAgXCJkZWZpZ29cIixcbiAgXCJkZWZsZW9cIixcbiAgXCJkZWZsdW9cIixcbiAgXCJkZWZ1bmdvXCIsXG4gIFwiZGVnZW5lcm9cIixcbiAgXCJkZWdlcm9cIixcbiAgXCJkZWd1c3RvXCIsXG4gIFwiZGVpbmRlXCIsXG4gIFwiZGVsZWN0YXRpb1wiLFxuICBcImRlbGVnb1wiLFxuICBcImRlbGVvXCIsXG4gIFwiZGVsaWJlcm9cIixcbiAgXCJkZWxpY2F0ZVwiLFxuICBcImRlbGlucXVvXCIsXG4gIFwiZGVsdWRvXCIsXG4gIFwiZGVtZW5zXCIsXG4gIFwiZGVtZXJnb1wiLFxuICBcImRlbWl0dG9cIixcbiAgXCJkZW1vXCIsXG4gIFwiZGVtb25zdHJvXCIsXG4gIFwiZGVtb3JvclwiLFxuICBcImRlbXVsY2VvXCIsXG4gIFwiZGVtdW1cIixcbiAgXCJkZW5lZ29cIixcbiAgXCJkZW5pcXVlXCIsXG4gIFwiZGVuc1wiLFxuICBcImRlbnVuY2lvXCIsXG4gIFwiZGVudW9cIixcbiAgXCJkZW9yc3VtXCIsXG4gIFwiZGVwZXJlb1wiLFxuICBcImRlcG9ub1wiLFxuICBcImRlcG9wdWxvXCIsXG4gIFwiZGVwb3J0b1wiLFxuICBcImRlcHJhZWRvclwiLFxuICBcImRlcHJlY2F0b3JcIixcbiAgXCJkZXByaW1vXCIsXG4gIFwiZGVwcm9tb1wiLFxuICBcImRlcHVsc29cIixcbiAgXCJkZXB1dG9cIixcbiAgXCJkZXJlbGlucXVvXCIsXG4gIFwiZGVyaWRlb1wiLFxuICBcImRlcmlwaW9cIixcbiAgXCJkZXNpZGVyb1wiLFxuICBcImRlc2lub1wiLFxuICBcImRlc2lwaW9cIixcbiAgXCJkZXNvbG9cIixcbiAgXCJkZXNwYXJhdHVzXCIsXG4gIFwiZGVzcGVjdG9cIixcbiAgXCJkZXNwaXJtYXRpb1wiLFxuICBcImluZml0XCIsXG4gIFwiaW5mbGFtbWF0aW9cIixcbiAgXCJwYWVuc1wiLFxuICBcInBhdGlvclwiLFxuICBcInBhdHJpYVwiLFxuICBcInBhdHJvY2lub3JcIixcbiAgXCJwYXRydXVzXCIsXG4gIFwicGF1Y2lcIixcbiAgXCJwYXVsYXRpbVwiLFxuICBcInBhdXBlclwiLFxuICBcInBheFwiLFxuICBcInBlY2NhdHVzXCIsXG4gIFwicGVjY29cIixcbiAgXCJwZWN0b1wiLFxuICBcInBlY3R1c1wiLFxuICBcInBlY3VuaWFcIixcbiAgXCJwZWN1c1wiLFxuICBcInBlaW9yXCIsXG4gIFwicGVsXCIsXG4gIFwib2NlclwiLFxuICBcInNvY2l1c1wiLFxuICBcInNvZGFsaXRhc1wiLFxuICBcInNvbFwiLFxuICBcInNvbGVvXCIsXG4gIFwic29saW9cIixcbiAgXCJzb2xpdHVkb1wiLFxuICBcInNvbGl1bVwiLFxuICBcInNvbGxlcnNcIixcbiAgXCJzb2xsaWNpdG9cIixcbiAgXCJzb2x1bVwiLFxuICBcInNvbHVzXCIsXG4gIFwic29sdXRpb1wiLFxuICBcInNvbHZvXCIsXG4gIFwic29tbmljdWxvc3VzXCIsXG4gIFwic29tbnVzXCIsXG4gIFwic29uaXR1c1wiLFxuICBcInNvbm9cIixcbiAgXCJzb3BoaXNtYXRhXCIsXG4gIFwic29wb3JcIixcbiAgXCJzb3JkZW9cIixcbiAgXCJzb3J0aXR1c1wiLFxuICBcInNwYXJnb1wiLFxuICBcInNwZWNpb3N1c1wiLFxuICBcInNwZWN0YWN1bHVtXCIsXG4gIFwic3BlY3VsdW1cIixcbiAgXCJzcGVybm9cIixcbiAgXCJzcGVyb1wiLFxuICBcInNwZXNcIixcbiAgXCJzcGljdWx1bVwiLFxuICBcInNwaXJpdHVzXCIsXG4gIFwic3BvbGlhdGlvXCIsXG4gIFwic3BvbnRlXCIsXG4gIFwic3RhYmlsaXNcIixcbiAgXCJzdGF0aW1cIixcbiAgXCJzdGF0dWFcIixcbiAgXCJzdGVsbGFcIixcbiAgXCJzdGlsbGljaWRpdW1cIixcbiAgXCJzdGlwZXNcIixcbiAgXCJzdGlwc1wiLFxuICBcInN0b1wiLFxuICBcInN0cmVudXVzXCIsXG4gIFwic3RydWVzXCIsXG4gIFwic3R1ZGlvXCIsXG4gIFwic3R1bHR1c1wiLFxuICBcInN1YWRlb1wiLFxuICBcInN1YXNvcmlhXCIsXG4gIFwic3ViXCIsXG4gIFwic3ViaXRvXCIsXG4gIFwic3ViaXVuZ29cIixcbiAgXCJzdWJsaW1lXCIsXG4gIFwic3VibmVjdG9cIixcbiAgXCJzdWJzZWNvXCIsXG4gIFwic3Vic3RhbnRpYVwiLFxuICBcInN1YnZlbmlvXCIsXG4gIFwic3VjY2Vkb1wiLFxuICBcInN1Y2N1cnJvXCIsXG4gIFwic3VmZmljaW9cIixcbiAgXCJzdWZmb2NvXCIsXG4gIFwic3VmZnJhZ2l1bVwiLFxuICBcInN1Z2dlcm9cIixcbiAgXCJzdWlcIixcbiAgXCJzdWx1bVwiLFxuICBcInN1bVwiLFxuICBcInN1bW1hXCIsXG4gIFwic3VtbWlzc2VcIixcbiAgXCJzdW1tb3BlcmVcIixcbiAgXCJzdW1vXCIsXG4gIFwic3VtcHR1c1wiLFxuICBcInN1cGVsbGV4XCIsXG4gIFwic3VwZXJcIixcbiAgXCJzdXBwZWxsZXhcIixcbiAgXCJzdXBwbGFudG9cIixcbiAgXCJzdXBwb25vXCIsXG4gIFwic3VwcmFcIixcbiAgXCJzdXJjdWx1c1wiLFxuICBcInN1cmdvXCIsXG4gIFwic3Vyc3VtXCIsXG4gIFwic3VzY2lwaW9cIixcbiAgXCJzdXNwZW5kb1wiLFxuICBcInN1c3RpbmVvXCIsXG4gIFwic3V1c1wiLFxuICBcInN5bmFnb2dhXCIsXG4gIFwidGFiZWxsYVwiLFxuICBcInRhYmVybnVzXCIsXG4gIFwidGFiZXNjb1wiLFxuICBcInRhYmdvXCIsXG4gIFwidGFidWxhXCIsXG4gIFwidGFjZW9cIixcbiAgXCJ0YWN0dXNcIixcbiAgXCJ0YWVkaXVtXCIsXG4gIFwidGFsaW9cIixcbiAgXCJ0YWxpc1wiLFxuICBcInRhbHVzXCIsXG4gIFwidGFtXCIsXG4gIFwidGFtZGl1XCIsXG4gIFwidGFtZW5cIixcbiAgXCJ0YW1ldHNpXCIsXG4gIFwidGFtaXNpdW1cIixcbiAgXCJ0YW1xdWFtXCIsXG4gIFwidGFuZGVtXCIsXG4gIFwidGFudGlsbHVzXCIsXG4gIFwidGFudHVtXCIsXG4gIFwidGFyZHVzXCIsXG4gIFwidGVnb1wiLFxuICBcInRlbWVyaXRhc1wiLFxuICBcInRlbXBlcmFudGlhXCIsXG4gIFwidGVtcGx1bVwiLFxuICBcInRlbXB0YXRpb1wiLFxuICBcInRlbXB1c1wiLFxuICBcInRlbmF4XCIsXG4gIFwidGVuZG9cIixcbiAgXCJ0ZW5lb1wiLFxuICBcInRlbmVyXCIsXG4gIFwidGVudWlzXCIsXG4gIFwidGVudXNcIixcbiAgXCJ0ZXBlc2NvXCIsXG4gIFwidGVwaWR1c1wiLFxuICBcInRlclwiLFxuICBcInRlcmVicm9cIixcbiAgXCJ0ZXJlc1wiLFxuICBcInRlcmdhXCIsXG4gIFwidGVyZ2VvXCIsXG4gIFwidGVyZ2l2ZXJzYXRpb1wiLFxuICBcInRlcmdvXCIsXG4gIFwidGVyZ3VtXCIsXG4gIFwidGVybWVzXCIsXG4gIFwidGVybWluYXRpb1wiLFxuICBcInRlcm9cIixcbiAgXCJ0ZXJyYVwiLFxuICBcInRlcnJlb1wiLFxuICBcInRlcnJpdG9cIixcbiAgXCJ0ZXJyb3JcIixcbiAgXCJ0ZXJzdXNcIixcbiAgXCJ0ZXJ0aXVzXCIsXG4gIFwidGVzdGltb25pdW1cIixcbiAgXCJ0ZXhvXCIsXG4gIFwidGV4dGlsaXNcIixcbiAgXCJ0ZXh0b3JcIixcbiAgXCJ0ZXh0dXNcIixcbiAgXCJ0aGFsYXNzaW51c1wiLFxuICBcInRoZWF0cnVtXCIsXG4gIFwidGhlY2FcIixcbiAgXCJ0aGVtYVwiLFxuICBcInRoZW9sb2d1c1wiLFxuICBcInRoZXJtYWVcIixcbiAgXCJ0aGVzYXVydXNcIixcbiAgXCJ0aGVzaXNcIixcbiAgXCJ0aG9yYXhcIixcbiAgXCJ0aHltYnJhXCIsXG4gIFwidGh5bXVtXCIsXG4gIFwidGliaVwiLFxuICBcInRpbWlkdXNcIixcbiAgXCJ0aW1vclwiLFxuICBcInRpdHVsdXNcIixcbiAgXCJ0b2xlcm9cIixcbiAgXCJ0b2xsb1wiLFxuICBcInRvbmRlb1wiLFxuICBcInRvbnNvclwiLFxuICBcInRvcnF1ZW9cIixcbiAgXCJ0b3JyZW5zXCIsXG4gIFwidG90XCIsXG4gIFwidG90aWRlbVwiLFxuICBcInRvdGllc1wiLFxuICBcInRvdHVzXCIsXG4gIFwidHJhY3RvXCIsXG4gIFwidHJhZG9cIixcbiAgXCJ0cmFob1wiLFxuICBcInRyYW5zXCIsXG4gIFwidHJlZGVjaW1cIixcbiAgXCJ0cmVtb1wiLFxuICBcInRyZXBpZGVcIixcbiAgXCJ0cmVzXCIsXG4gIFwidHJpYnVvXCIsXG4gIFwidHJpY2VzaW11c1wiLFxuICBcInRyaWR1YW5hXCIsXG4gIFwidHJpZ2ludGFcIixcbiAgXCJ0cmlwdWRpb1wiLFxuICBcInRyaXN0aXNcIixcbiAgXCJ0cml1bXBodXNcIixcbiAgXCJ0cnVjaWRvXCIsXG4gIFwidHJ1Y3VsZW50ZXJcIixcbiAgXCJ0dWJpbmV1c1wiLFxuICBcInR1aVwiLFxuICBcInR1bVwiLFxuICBcInR1bXVsdHVzXCIsXG4gIFwidHVuY1wiLFxuICBcInR1cmJhXCIsXG4gIFwidHVyYm9cIixcbiAgXCJ0dXJwZVwiLFxuICBcInR1cnBpc1wiLFxuICBcInR1dGFtZW5cIixcbiAgXCJ0dXRpc1wiLFxuICBcInR5cmFubnVzXCIsXG4gIFwidWJlcnJpbWVcIixcbiAgXCJ1YmlcIixcbiAgXCJ1bGNpc2NvclwiLFxuICBcInVsbHVzXCIsXG4gIFwidWx0ZXJpdXNcIixcbiAgXCJ1bHRpb1wiLFxuICBcInVsdHJhXCIsXG4gIFwidW1icmFcIixcbiAgXCJ1bWVydXNcIixcbiAgXCJ1bXF1YW1cIixcbiAgXCJ1bmFcIixcbiAgXCJ1bmRlXCIsXG4gIFwidW5kaXF1ZVwiLFxuICBcInVuaXZlcnNlXCIsXG4gIFwidW51c1wiLFxuICBcInVyYmFudXNcIixcbiAgXCJ1cmJzXCIsXG4gIFwidXJlZG9cIixcbiAgXCJ1c2l0YXNcIixcbiAgXCJ1c3F1ZVwiLFxuICBcInVzdGlsb1wiLFxuICBcInVzdHVsb1wiLFxuICBcInVzdXNcIixcbiAgXCJ1dGVyXCIsXG4gIFwidXRlcnF1ZVwiLFxuICBcInV0aWxpc1wiLFxuICBcInV0aXF1ZVwiLFxuICBcInV0b3JcIixcbiAgXCJ1dHBvdGVcIixcbiAgXCJ1dHJpbXF1ZVwiLFxuICBcInV0cm9xdWVcIixcbiAgXCJ1dHJ1bVwiLFxuICBcInV4b3JcIixcbiAgXCJ2YWNvXCIsXG4gIFwidmFjdXVzXCIsXG4gIFwidmFkb1wiLFxuICBcInZhZVwiLFxuICBcInZhbGRlXCIsXG4gIFwidmFsZW5zXCIsXG4gIFwidmFsZW9cIixcbiAgXCJ2YWxldHVkb1wiLFxuICBcInZhbGlkdXNcIixcbiAgXCJ2YWxsdW1cIixcbiAgXCJ2YXB1bHVzXCIsXG4gIFwidmFyaWV0YXNcIixcbiAgXCJ2YXJpdXNcIixcbiAgXCJ2ZWhlbWVuc1wiLFxuICBcInZlbFwiLFxuICBcInZlbG9jaXRlclwiLFxuICBcInZlbHVtXCIsXG4gIFwidmVsdXRcIixcbiAgXCJ2ZW5pYVwiLFxuICBcInZlbmlvXCIsXG4gIFwidmVudGl0b1wiLFxuICBcInZlbnRvc3VzXCIsXG4gIFwidmVudHVzXCIsXG4gIFwidmVudXN0YXNcIixcbiAgXCJ2ZXJcIixcbiAgXCJ2ZXJiZXJhXCIsXG4gIFwidmVyYnVtXCIsXG4gIFwidmVyZVwiLFxuICBcInZlcmVjdW5kaWFcIixcbiAgXCJ2ZXJlb3JcIixcbiAgXCJ2ZXJnb1wiLFxuICBcInZlcml0YXNcIixcbiAgXCJ2ZXJvXCIsXG4gIFwidmVyc3VzXCIsXG4gIFwidmVydG9cIixcbiAgXCJ2ZXJ1bXRhbWVuXCIsXG4gIFwidmVydXNcIixcbiAgXCJ2ZXNjb1wiLFxuICBcInZlc2ljYVwiLFxuICBcInZlc3BlclwiLFxuICBcInZlc3BpbGxvXCIsXG4gIFwidmVzdGVyXCIsXG4gIFwidmVzdGlnaXVtXCIsXG4gIFwidmVzdHJ1bVwiLFxuICBcInZldHVzXCIsXG4gIFwidmlhXCIsXG4gIFwidmljaW51c1wiLFxuICBcInZpY2lzc2l0dWRvXCIsXG4gIFwidmljdG9yaWFcIixcbiAgXCJ2aWN0dXNcIixcbiAgXCJ2aWRlbGljZXRcIixcbiAgXCJ2aWRlb1wiLFxuICBcInZpZHVhdGFcIixcbiAgXCJ2aWR1b1wiLFxuICBcInZpZ2lsb1wiLFxuICBcInZpZ29yXCIsXG4gIFwidmlsaWN1c1wiLFxuICBcInZpbGlzXCIsXG4gIFwidmlsaXRhc1wiLFxuICBcInZpbGxhXCIsXG4gIFwidmluY29cIixcbiAgXCJ2aW5jdWx1bVwiLFxuICBcInZpbmRpY29cIixcbiAgXCJ2aW5pdG9yXCIsXG4gIFwidmludW1cIixcbiAgXCJ2aXJcIixcbiAgXCJ2aXJnYVwiLFxuICBcInZpcmdvXCIsXG4gIFwidmlyaWRpc1wiLFxuICBcInZpcmlsaXRlclwiLFxuICBcInZpcnR1c1wiLFxuICBcInZpc1wiLFxuICBcInZpc2N1c1wiLFxuICBcInZpdGFcIixcbiAgXCJ2aXRpb3N1c1wiLFxuICBcInZpdGl1bVwiLFxuICBcInZpdG9cIixcbiAgXCJ2aXZvXCIsXG4gIFwidml4XCIsXG4gIFwidm9iaXNcIixcbiAgXCJ2b2NpZmVyb3JcIixcbiAgXCJ2b2NvXCIsXG4gIFwidm9sYXRpY3VzXCIsXG4gIFwidm9sb1wiLFxuICBcInZvbHViaWxpc1wiLFxuICBcInZvbHVudGFyaXVzXCIsXG4gIFwidm9sdXBcIixcbiAgXCJ2b2x1dGFicnVtXCIsXG4gIFwidm9sdmFcIixcbiAgXCJ2b21lclwiLFxuICBcInZvbWljYVwiLFxuICBcInZvbWl0b1wiLFxuICBcInZvcmFnb1wiLFxuICBcInZvcmF4XCIsXG4gIFwidm9yb1wiLFxuICBcInZvc1wiLFxuICBcInZvdHVtXCIsXG4gIFwidm92ZW9cIixcbiAgXCJ2b3hcIixcbiAgXCJ2dWxhcml0ZXJcIixcbiAgXCJ2dWxnYXJpc1wiLFxuICBcInZ1bGdpdmFndXNcIixcbiAgXCJ2dWxnb1wiLFxuICBcInZ1bGd1c1wiLFxuICBcInZ1bG5lcm9cIixcbiAgXCJ2dWxudXNcIixcbiAgXCJ2dWxwZXNcIixcbiAgXCJ2dWx0aWN1bHVzXCIsXG4gIFwidnVsdHVvc3VzXCIsXG4gIFwieGlwaGlhc1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJhbGlhc1wiLFxuICBcImNvbnNlcXVhdHVyXCIsXG4gIFwiYXV0XCIsXG4gIFwicGVyZmVyZW5kaXNcIixcbiAgXCJzaXRcIixcbiAgXCJ2b2x1cHRhdGVtXCIsXG4gIFwiYWNjdXNhbnRpdW1cIixcbiAgXCJkb2xvcmVtcXVlXCIsXG4gIFwiYXBlcmlhbVwiLFxuICBcImVhcXVlXCIsXG4gIFwiaXBzYVwiLFxuICBcInF1YWVcIixcbiAgXCJhYlwiLFxuICBcImlsbG9cIixcbiAgXCJpbnZlbnRvcmVcIixcbiAgXCJ2ZXJpdGF0aXNcIixcbiAgXCJldFwiLFxuICBcInF1YXNpXCIsXG4gIFwiYXJjaGl0ZWN0b1wiLFxuICBcImJlYXRhZVwiLFxuICBcInZpdGFlXCIsXG4gIFwiZGljdGFcIixcbiAgXCJzdW50XCIsXG4gIFwiZXhwbGljYWJvXCIsXG4gIFwiYXNwZXJuYXR1clwiLFxuICBcImF1dFwiLFxuICBcIm9kaXRcIixcbiAgXCJhdXRcIixcbiAgXCJmdWdpdFwiLFxuICBcInNlZFwiLFxuICBcInF1aWFcIixcbiAgXCJjb25zZXF1dW50dXJcIixcbiAgXCJtYWduaVwiLFxuICBcImRvbG9yZXNcIixcbiAgXCJlb3NcIixcbiAgXCJxdWlcIixcbiAgXCJyYXRpb25lXCIsXG4gIFwidm9sdXB0YXRlbVwiLFxuICBcInNlcXVpXCIsXG4gIFwibmVzY2l1bnRcIixcbiAgXCJuZXF1ZVwiLFxuICBcImRvbG9yZW1cIixcbiAgXCJpcHN1bVwiLFxuICBcInF1aWFcIixcbiAgXCJkb2xvclwiLFxuICBcInNpdFwiLFxuICBcImFtZXRcIixcbiAgXCJjb25zZWN0ZXR1clwiLFxuICBcImFkaXBpc2NpXCIsXG4gIFwidmVsaXRcIixcbiAgXCJzZWRcIixcbiAgXCJxdWlhXCIsXG4gIFwibm9uXCIsXG4gIFwibnVtcXVhbVwiLFxuICBcImVpdXNcIixcbiAgXCJtb2RpXCIsXG4gIFwidGVtcG9yYVwiLFxuICBcImluY2lkdW50XCIsXG4gIFwidXRcIixcbiAgXCJsYWJvcmVcIixcbiAgXCJldFwiLFxuICBcImRvbG9yZVwiLFxuICBcIm1hZ25hbVwiLFxuICBcImFsaXF1YW1cIixcbiAgXCJxdWFlcmF0XCIsXG4gIFwidm9sdXB0YXRlbVwiLFxuICBcInV0XCIsXG4gIFwiZW5pbVwiLFxuICBcImFkXCIsXG4gIFwibWluaW1hXCIsXG4gIFwidmVuaWFtXCIsXG4gIFwicXVpc1wiLFxuICBcIm5vc3RydW1cIixcbiAgXCJleGVyY2l0YXRpb25lbVwiLFxuICBcInVsbGFtXCIsXG4gIFwiY29ycG9yaXNcIixcbiAgXCJuZW1vXCIsXG4gIFwiZW5pbVwiLFxuICBcImlwc2FtXCIsXG4gIFwidm9sdXB0YXRlbVwiLFxuICBcInF1aWFcIixcbiAgXCJ2b2x1cHRhc1wiLFxuICBcInNpdFwiLFxuICBcInN1c2NpcGl0XCIsXG4gIFwibGFib3Jpb3NhbVwiLFxuICBcIm5pc2lcIixcbiAgXCJ1dFwiLFxuICBcImFsaXF1aWRcIixcbiAgXCJleFwiLFxuICBcImVhXCIsXG4gIFwiY29tbW9kaVwiLFxuICBcImNvbnNlcXVhdHVyXCIsXG4gIFwicXVpc1wiLFxuICBcImF1dGVtXCIsXG4gIFwidmVsXCIsXG4gIFwiZXVtXCIsXG4gIFwiaXVyZVwiLFxuICBcInJlcHJlaGVuZGVyaXRcIixcbiAgXCJxdWlcIixcbiAgXCJpblwiLFxuICBcImVhXCIsXG4gIFwidm9sdXB0YXRlXCIsXG4gIFwidmVsaXRcIixcbiAgXCJlc3NlXCIsXG4gIFwicXVhbVwiLFxuICBcIm5paGlsXCIsXG4gIFwibW9sZXN0aWFlXCIsXG4gIFwiZXRcIixcbiAgXCJpdXN0b1wiLFxuICBcIm9kaW9cIixcbiAgXCJkaWduaXNzaW1vc1wiLFxuICBcImR1Y2ltdXNcIixcbiAgXCJxdWlcIixcbiAgXCJibGFuZGl0aWlzXCIsXG4gIFwicHJhZXNlbnRpdW1cIixcbiAgXCJsYXVkYW50aXVtXCIsXG4gIFwidG90YW1cIixcbiAgXCJyZW1cIixcbiAgXCJ2b2x1cHRhdHVtXCIsXG4gIFwiZGVsZW5pdGlcIixcbiAgXCJhdHF1ZVwiLFxuICBcImNvcnJ1cHRpXCIsXG4gIFwicXVvc1wiLFxuICBcImRvbG9yZXNcIixcbiAgXCJldFwiLFxuICBcInF1YXNcIixcbiAgXCJtb2xlc3RpYXNcIixcbiAgXCJleGNlcHR1cmlcIixcbiAgXCJzaW50XCIsXG4gIFwib2NjYWVjYXRpXCIsXG4gIFwiY3VwaWRpdGF0ZVwiLFxuICBcIm5vblwiLFxuICBcInByb3ZpZGVudFwiLFxuICBcInNlZFwiLFxuICBcInV0XCIsXG4gIFwicGVyc3BpY2lhdGlzXCIsXG4gIFwidW5kZVwiLFxuICBcIm9tbmlzXCIsXG4gIFwiaXN0ZVwiLFxuICBcIm5hdHVzXCIsXG4gIFwiZXJyb3JcIixcbiAgXCJzaW1pbGlxdWVcIixcbiAgXCJzdW50XCIsXG4gIFwiaW5cIixcbiAgXCJjdWxwYVwiLFxuICBcInF1aVwiLFxuICBcIm9mZmljaWFcIixcbiAgXCJkZXNlcnVudFwiLFxuICBcIm1vbGxpdGlhXCIsXG4gIFwiYW5pbWlcIixcbiAgXCJpZFwiLFxuICBcImVzdFwiLFxuICBcImxhYm9ydW1cIixcbiAgXCJldFwiLFxuICBcImRvbG9ydW1cIixcbiAgXCJmdWdhXCIsXG4gIFwiZXRcIixcbiAgXCJoYXJ1bVwiLFxuICBcInF1aWRlbVwiLFxuICBcInJlcnVtXCIsXG4gIFwiZmFjaWxpc1wiLFxuICBcImVzdFwiLFxuICBcImV0XCIsXG4gIFwiZXhwZWRpdGFcIixcbiAgXCJkaXN0aW5jdGlvXCIsXG4gIFwibmFtXCIsXG4gIFwibGliZXJvXCIsXG4gIFwidGVtcG9yZVwiLFxuICBcImN1bVwiLFxuICBcInNvbHV0YVwiLFxuICBcIm5vYmlzXCIsXG4gIFwiZXN0XCIsXG4gIFwiZWxpZ2VuZGlcIixcbiAgXCJvcHRpb1wiLFxuICBcImN1bXF1ZVwiLFxuICBcIm5paGlsXCIsXG4gIFwiaW1wZWRpdFwiLFxuICBcInF1b1wiLFxuICBcInBvcnJvXCIsXG4gIFwicXVpc3F1YW1cIixcbiAgXCJlc3RcIixcbiAgXCJxdWlcIixcbiAgXCJtaW51c1wiLFxuICBcImlkXCIsXG4gIFwicXVvZFwiLFxuICBcIm1heGltZVwiLFxuICBcInBsYWNlYXRcIixcbiAgXCJmYWNlcmVcIixcbiAgXCJwb3NzaW11c1wiLFxuICBcIm9tbmlzXCIsXG4gIFwidm9sdXB0YXNcIixcbiAgXCJhc3N1bWVuZGFcIixcbiAgXCJlc3RcIixcbiAgXCJvbW5pc1wiLFxuICBcImRvbG9yXCIsXG4gIFwicmVwZWxsZW5kdXNcIixcbiAgXCJ0ZW1wb3JpYnVzXCIsXG4gIFwiYXV0ZW1cIixcbiAgXCJxdWlidXNkYW1cIixcbiAgXCJldFwiLFxuICBcImF1dFwiLFxuICBcImNvbnNlcXVhdHVyXCIsXG4gIFwidmVsXCIsXG4gIFwiaWxsdW1cIixcbiAgXCJxdWlcIixcbiAgXCJkb2xvcmVtXCIsXG4gIFwiZXVtXCIsXG4gIFwiZnVnaWF0XCIsXG4gIFwicXVvXCIsXG4gIFwidm9sdXB0YXNcIixcbiAgXCJudWxsYVwiLFxuICBcInBhcmlhdHVyXCIsXG4gIFwiYXRcIixcbiAgXCJ2ZXJvXCIsXG4gIFwiZW9zXCIsXG4gIFwiZXRcIixcbiAgXCJhY2N1c2FtdXNcIixcbiAgXCJvZmZpY2lpc1wiLFxuICBcImRlYml0aXNcIixcbiAgXCJhdXRcIixcbiAgXCJyZXJ1bVwiLFxuICBcIm5lY2Vzc2l0YXRpYnVzXCIsXG4gIFwic2FlcGVcIixcbiAgXCJldmVuaWV0XCIsXG4gIFwidXRcIixcbiAgXCJldFwiLFxuICBcInZvbHVwdGF0ZXNcIixcbiAgXCJyZXB1ZGlhbmRhZVwiLFxuICBcInNpbnRcIixcbiAgXCJldFwiLFxuICBcIm1vbGVzdGlhZVwiLFxuICBcIm5vblwiLFxuICBcInJlY3VzYW5kYWVcIixcbiAgXCJpdGFxdWVcIixcbiAgXCJlYXJ1bVwiLFxuICBcInJlcnVtXCIsXG4gIFwiaGljXCIsXG4gIFwidGVuZXR1clwiLFxuICBcImFcIixcbiAgXCJzYXBpZW50ZVwiLFxuICBcImRlbGVjdHVzXCIsXG4gIFwidXRcIixcbiAgXCJhdXRcIixcbiAgXCJyZWljaWVuZGlzXCIsXG4gIFwidm9sdXB0YXRpYnVzXCIsXG4gIFwibWFpb3Jlc1wiLFxuICBcImRvbG9yaWJ1c1wiLFxuICBcImFzcGVyaW9yZXNcIixcbiAgXCJyZXBlbGxhdFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBYWxpeWFoXCIsXG4gIFwiQWFyb25cIixcbiAgXCJBYmFnYWlsXCIsXG4gIFwiQWJiZXlcIixcbiAgXCJBYmJpZVwiLFxuICBcIkFiYmlnYWlsXCIsXG4gIFwiQWJieVwiLFxuICBcIkFiZGllbFwiLFxuICBcIkFiZHVsXCIsXG4gIFwiQWJkdWxsYWhcIixcbiAgXCJBYmVcIixcbiAgXCJBYmVsXCIsXG4gIFwiQWJlbGFyZG9cIixcbiAgXCJBYmlnYWlsXCIsXG4gIFwiQWJpZ2FsZVwiLFxuICBcIkFiaWdheWxlXCIsXG4gIFwiQWJuZXJcIixcbiAgXCJBYnJhaGFtXCIsXG4gIFwiQWRhXCIsXG4gIFwiQWRhaFwiLFxuICBcIkFkYWxiZXJ0b1wiLFxuICBcIkFkYWxpbmVcIixcbiAgXCJBZGFtXCIsXG4gIFwiQWRhblwiLFxuICBcIkFkZGllXCIsXG4gIFwiQWRkaXNvblwiLFxuICBcIkFkZWxhXCIsXG4gIFwiQWRlbGJlcnRcIixcbiAgXCJBZGVsZVwiLFxuICBcIkFkZWxpYVwiLFxuICBcIkFkZWxpbmVcIixcbiAgXCJBZGVsbFwiLFxuICBcIkFkZWxsYVwiLFxuICBcIkFkZWxsZVwiLFxuICBcIkFkaXR5YVwiLFxuICBcIkFkb2xmXCIsXG4gIFwiQWRvbGZvXCIsXG4gIFwiQWRvbHBoXCIsXG4gIFwiQWRvbHBodXNcIixcbiAgXCJBZG9uaXNcIixcbiAgXCJBZHJhaW5cIixcbiAgXCJBZHJpYW5cIixcbiAgXCJBZHJpYW5hXCIsXG4gIFwiQWRyaWFubmFcIixcbiAgXCJBZHJpZWxcIixcbiAgXCJBZHJpZW5cIixcbiAgXCJBZHJpZW5uZVwiLFxuICBcIkFmdG9uXCIsXG4gIFwiQWdsYWVcIixcbiAgXCJBZ25lc1wiLFxuICBcIkFndXN0aW5cIixcbiAgXCJBZ3VzdGluYVwiLFxuICBcIkFobWFkXCIsXG4gIFwiQWhtZWRcIixcbiAgXCJBaWRhXCIsXG4gIFwiQWlkYW5cIixcbiAgXCJBaWRlblwiLFxuICBcIkFpbGVlblwiLFxuICBcIkFpbWVlXCIsXG4gIFwiQWlzaGFcIixcbiAgXCJBaXlhbmFcIixcbiAgXCJBa2VlbVwiLFxuICBcIkFsXCIsXG4gIFwiQWxhaW5hXCIsXG4gIFwiQWxhblwiLFxuICBcIkFsYW5hXCIsXG4gIFwiQWxhbmlzXCIsXG4gIFwiQWxhbm5hXCIsXG4gIFwiQWxheW5hXCIsXG4gIFwiQWxiYVwiLFxuICBcIkFsYmVydFwiLFxuICBcIkFsYmVydGFcIixcbiAgXCJBbGJlcnRoYVwiLFxuICBcIkFsYmVydG9cIixcbiAgXCJBbGJpblwiLFxuICBcIkFsYmluYVwiLFxuICBcIkFsZGFcIixcbiAgXCJBbGRlblwiLFxuICBcIkFsZWNcIixcbiAgXCJBbGVlblwiLFxuICBcIkFsZWphbmRyYVwiLFxuICBcIkFsZWphbmRyaW5cIixcbiAgXCJBbGVrXCIsXG4gIFwiQWxlbmFcIixcbiAgXCJBbGVuZVwiLFxuICBcIkFsZXNzYW5kcmFcIixcbiAgXCJBbGVzc2FuZHJvXCIsXG4gIFwiQWxlc3NpYVwiLFxuICBcIkFsZXRoYVwiLFxuICBcIkFsZXhcIixcbiAgXCJBbGV4YVwiLFxuICBcIkFsZXhhbmRlclwiLFxuICBcIkFsZXhhbmRyYVwiLFxuICBcIkFsZXhhbmRyZVwiLFxuICBcIkFsZXhhbmRyZWFcIixcbiAgXCJBbGV4YW5kcmlhXCIsXG4gIFwiQWxleGFuZHJpbmVcIixcbiAgXCJBbGV4YW5kcm9cIixcbiAgXCJBbGV4YW5lXCIsXG4gIFwiQWxleGFubmVcIixcbiAgXCJBbGV4aWVcIixcbiAgXCJBbGV4aXNcIixcbiAgXCJBbGV4eXNcIixcbiAgXCJBbGV4emFuZGVyXCIsXG4gIFwiQWxmXCIsXG4gIFwiQWxmb25zb1wiLFxuICBcIkFsZm9uem9cIixcbiAgXCJBbGZvcmRcIixcbiAgXCJBbGZyZWRcIixcbiAgXCJBbGZyZWRhXCIsXG4gIFwiQWxmcmVkb1wiLFxuICBcIkFsaVwiLFxuICBcIkFsaWFcIixcbiAgXCJBbGljZVwiLFxuICBcIkFsaWNpYVwiLFxuICBcIkFsaXNhXCIsXG4gIFwiQWxpc2hhXCIsXG4gIFwiQWxpc29uXCIsXG4gIFwiQWxpdmlhXCIsXG4gIFwiQWxpeWFcIixcbiAgXCJBbGl5YWhcIixcbiAgXCJBbGl6YVwiLFxuICBcIkFsaXplXCIsXG4gIFwiQWxsYW5cIixcbiAgXCJBbGxlblwiLFxuICBcIkFsbGVuZVwiLFxuICBcIkFsbGllXCIsXG4gIFwiQWxsaXNvblwiLFxuICBcIkFsbHlcIixcbiAgXCJBbHBob25zb1wiLFxuICBcIkFsdGFcIixcbiAgXCJBbHRoZWFcIixcbiAgXCJBbHZhXCIsXG4gIFwiQWx2YWhcIixcbiAgXCJBbHZlbmFcIixcbiAgXCJBbHZlcmFcIixcbiAgXCJBbHZlcnRhXCIsXG4gIFwiQWx2aW5hXCIsXG4gIFwiQWx2aXNcIixcbiAgXCJBbHljZVwiLFxuICBcIkFseWNpYVwiLFxuICBcIkFseXNhXCIsXG4gIFwiQWx5c2hhXCIsXG4gIFwiQWx5c29uXCIsXG4gIFwiQWx5c3NvblwiLFxuICBcIkFtYWxpYVwiLFxuICBcIkFtYW5kYVwiLFxuICBcIkFtYW5pXCIsXG4gIFwiQW1hcmFcIixcbiAgXCJBbWFyaVwiLFxuICBcIkFtYXlhXCIsXG4gIFwiQW1iZXJcIixcbiAgXCJBbWJyb3NlXCIsXG4gIFwiQW1lbGlhXCIsXG4gIFwiQW1lbGllXCIsXG4gIFwiQW1lbHlcIixcbiAgXCJBbWVyaWNhXCIsXG4gIFwiQW1lcmljb1wiLFxuICBcIkFtaWVcIixcbiAgXCJBbWluYVwiLFxuICBcIkFtaXJcIixcbiAgXCJBbWlyYVwiLFxuICBcIkFtaXlhXCIsXG4gIFwiQW1vc1wiLFxuICBcIkFtcGFyb1wiLFxuICBcIkFteVwiLFxuICBcIkFteWFcIixcbiAgXCJBbmFcIixcbiAgXCJBbmFiZWxcIixcbiAgXCJBbmFiZWxsZVwiLFxuICBcIkFuYWhpXCIsXG4gIFwiQW5haXNcIixcbiAgXCJBbmFzdGFjaW9cIixcbiAgXCJBbmFzdGFzaWFcIixcbiAgXCJBbmRlcnNvblwiLFxuICBcIkFuZHJlXCIsXG4gIFwiQW5kcmVhbmVcIixcbiAgXCJBbmRyZWFubmVcIixcbiAgXCJBbmRyZXNcIixcbiAgXCJBbmRyZXdcIixcbiAgXCJBbmR5XCIsXG4gIFwiQW5nZWxcIixcbiAgXCJBbmdlbGFcIixcbiAgXCJBbmdlbGljYVwiLFxuICBcIkFuZ2VsaW5hXCIsXG4gIFwiQW5nZWxpbmVcIixcbiAgXCJBbmdlbGl0YVwiLFxuICBcIkFuZ2Vsb1wiLFxuICBcIkFuZ2llXCIsXG4gIFwiQW5ndXNcIixcbiAgXCJBbmliYWxcIixcbiAgXCJBbmlrYVwiLFxuICBcIkFuaXNzYVwiLFxuICBcIkFuaXRhXCIsXG4gIFwiQW5peWFcIixcbiAgXCJBbml5YWhcIixcbiAgXCJBbmphbGlcIixcbiAgXCJBbm5hXCIsXG4gIFwiQW5uYWJlbFwiLFxuICBcIkFubmFiZWxsXCIsXG4gIFwiQW5uYWJlbGxlXCIsXG4gIFwiQW5uYWxpc2VcIixcbiAgXCJBbm5hbWFlXCIsXG4gIFwiQW5uYW1hcmllXCIsXG4gIFwiQW5uZVwiLFxuICBcIkFubmV0dGFcIixcbiAgXCJBbm5ldHRlXCIsXG4gIFwiQW5uaWVcIixcbiAgXCJBbnNlbFwiLFxuICBcIkFuc2xleVwiLFxuICBcIkFudGhvbnlcIixcbiAgXCJBbnRvaW5ldHRlXCIsXG4gIFwiQW50b25lXCIsXG4gIFwiQW50b25ldHRhXCIsXG4gIFwiQW50b25ldHRlXCIsXG4gIFwiQW50b25pYVwiLFxuICBcIkFudG9uaWV0dGFcIixcbiAgXCJBbnRvbmluYVwiLFxuICBcIkFudG9uaW9cIixcbiAgXCJBbnR3YW5cIixcbiAgXCJBbnR3b25cIixcbiAgXCJBbnlhXCIsXG4gIFwiQXByaWxcIixcbiAgXCJBcmFcIixcbiAgXCJBcmFjZWxpXCIsXG4gIFwiQXJhY2VseVwiLFxuICBcIkFyY2hcIixcbiAgXCJBcmNoaWJhbGRcIixcbiAgXCJBcmRlbGxhXCIsXG4gIFwiQXJkZW5cIixcbiAgXCJBcmRpdGhcIixcbiAgXCJBcmVseVwiLFxuICBcIkFyaVwiLFxuICBcIkFyaWFuZVwiLFxuICBcIkFyaWFubmFcIixcbiAgXCJBcmljXCIsXG4gIFwiQXJpZWxcIixcbiAgXCJBcmllbGxlXCIsXG4gIFwiQXJqdW5cIixcbiAgXCJBcmxlbmVcIixcbiAgXCJBcmxpZVwiLFxuICBcIkFybG9cIixcbiAgXCJBcm1hbmRcIixcbiAgXCJBcm1hbmRvXCIsXG4gIFwiQXJtYW5pXCIsXG4gIFwiQXJuYWxkb1wiLFxuICBcIkFybmVcIixcbiAgXCJBcm5vXCIsXG4gIFwiQXJub2xkXCIsXG4gIFwiQXJub2xkb1wiLFxuICBcIkFybnVsZm9cIixcbiAgXCJBcm9uXCIsXG4gIFwiQXJ0XCIsXG4gIFwiQXJ0aHVyXCIsXG4gIFwiQXJ0dXJvXCIsXG4gIFwiQXJ2ZWxcIixcbiAgXCJBcnZpZFwiLFxuICBcIkFydmlsbGFcIixcbiAgXCJBcnlhbm5hXCIsXG4gIFwiQXNhXCIsXG4gIFwiQXNoYVwiLFxuICBcIkFzaGxlZVwiLFxuICBcIkFzaGxlaWdoXCIsXG4gIFwiQXNobGV5XCIsXG4gIFwiQXNobHlcIixcbiAgXCJBc2hseW5uXCIsXG4gIFwiQXNodG9uXCIsXG4gIFwiQXNodHluXCIsXG4gIFwiQXNpYVwiLFxuICBcIkFzc3VudGFcIixcbiAgXCJBc3RyaWRcIixcbiAgXCJBdGhlbmFcIixcbiAgXCJBdWJyZWVcIixcbiAgXCJBdWJyZXlcIixcbiAgXCJBdWRpZVwiLFxuICBcIkF1ZHJhXCIsXG4gIFwiQXVkcmVhbm5lXCIsXG4gIFwiQXVkcmV5XCIsXG4gIFwiQXVndXN0XCIsXG4gIFwiQXVndXN0YVwiLFxuICBcIkF1Z3VzdGluZVwiLFxuICBcIkF1Z3VzdHVzXCIsXG4gIFwiQXVyZWxpYVwiLFxuICBcIkF1cmVsaWVcIixcbiAgXCJBdXJlbGlvXCIsXG4gIFwiQXVyb3JlXCIsXG4gIFwiQXVzdGVuXCIsXG4gIFwiQXVzdGluXCIsXG4gIFwiQXVzdHluXCIsXG4gIFwiQXV0dW1uXCIsXG4gIFwiQXZhXCIsXG4gIFwiQXZlcnlcIixcbiAgXCJBdmlzXCIsXG4gIFwiQXhlbFwiLFxuICBcIkF5YW5hXCIsXG4gIFwiQXlkZW5cIixcbiAgXCJBeWxhXCIsXG4gIFwiQXlsaW5cIixcbiAgXCJCYWJ5XCIsXG4gIFwiQmFpbGVlXCIsXG4gIFwiQmFpbGV5XCIsXG4gIFwiQmFyYmFyYVwiLFxuICBcIkJhcm5leVwiLFxuICBcIkJhcm9uXCIsXG4gIFwiQmFycmV0dFwiLFxuICBcIkJhcnJ5XCIsXG4gIFwiQmFydFwiLFxuICBcIkJhcnRob2xvbWVcIixcbiAgXCJCYXJ0b25cIixcbiAgXCJCYXlsZWVcIixcbiAgXCJCZWF0cmljZVwiLFxuICBcIkJlYXVcIixcbiAgXCJCZWF1bGFoXCIsXG4gIFwiQmVsbFwiLFxuICBcIkJlbGxhXCIsXG4gIFwiQmVsbGVcIixcbiAgXCJCZW5cIixcbiAgXCJCZW5lZGljdFwiLFxuICBcIkJlbmphbWluXCIsXG4gIFwiQmVubmV0dFwiLFxuICBcIkJlbm5pZVwiLFxuICBcIkJlbm55XCIsXG4gIFwiQmVudG9uXCIsXG4gIFwiQmVyZW5pY2VcIixcbiAgXCJCZXJuYWRldHRlXCIsXG4gIFwiQmVybmFkaW5lXCIsXG4gIFwiQmVybmFyZFwiLFxuICBcIkJlcm5hcmRvXCIsXG4gIFwiQmVybmVpY2VcIixcbiAgXCJCZXJuaGFyZFwiLFxuICBcIkJlcm5pY2VcIixcbiAgXCJCZXJuaWVcIixcbiAgXCJCZXJuaWVjZVwiLFxuICBcIkJlcm5pdGFcIixcbiAgXCJCZXJyeVwiLFxuICBcIkJlcnRcIixcbiAgXCJCZXJ0YVwiLFxuICBcIkJlcnRoYVwiLFxuICBcIkJlcnRyYW1cIixcbiAgXCJCZXJ0cmFuZFwiLFxuICBcIkJlcnlsXCIsXG4gIFwiQmVzc2llXCIsXG4gIFwiQmV0aFwiLFxuICBcIkJldGhhbnlcIixcbiAgXCJCZXRoZWxcIixcbiAgXCJCZXRzeVwiLFxuICBcIkJldHRlXCIsXG4gIFwiQmV0dGllXCIsXG4gIFwiQmV0dHlcIixcbiAgXCJCZXR0eWVcIixcbiAgXCJCZXVsYWhcIixcbiAgXCJCZXZlcmx5XCIsXG4gIFwiQmlhbmthXCIsXG4gIFwiQmlsbFwiLFxuICBcIkJpbGxpZVwiLFxuICBcIkJpbGx5XCIsXG4gIFwiQmlyZGllXCIsXG4gIFwiQmxhaXJcIixcbiAgXCJCbGFpc2VcIixcbiAgXCJCbGFrZVwiLFxuICBcIkJsYW5jYVwiLFxuICBcIkJsYW5jaGVcIixcbiAgXCJCbGF6ZVwiLFxuICBcIkJvXCIsXG4gIFwiQm9iYmllXCIsXG4gIFwiQm9iYnlcIixcbiAgXCJCb25pdGFcIixcbiAgXCJCb25uaWVcIixcbiAgXCJCb3Jpc1wiLFxuICBcIkJveWRcIixcbiAgXCJCcmFkXCIsXG4gIFwiQnJhZGVuXCIsXG4gIFwiQnJhZGZvcmRcIixcbiAgXCJCcmFkbGV5XCIsXG4gIFwiQnJhZGx5XCIsXG4gIFwiQnJhZHlcIixcbiAgXCJCcmFlZGVuXCIsXG4gIFwiQnJhaW5cIixcbiAgXCJCcmFuZGlcIixcbiAgXCJCcmFuZG9cIixcbiAgXCJCcmFuZG9uXCIsXG4gIFwiQnJhbmR0XCIsXG4gIFwiQnJhbmR5XCIsXG4gIFwiQnJhbmR5blwiLFxuICBcIkJyYW5ub25cIixcbiAgXCJCcmFuc29uXCIsXG4gIFwiQnJhbnRcIixcbiAgXCJCcmF1bGlvXCIsXG4gIFwiQnJheHRvblwiLFxuICBcIkJyYXlhblwiLFxuICBcIkJyZWFuYVwiLFxuICBcIkJyZWFubmFcIixcbiAgXCJCcmVhbm5lXCIsXG4gIFwiQnJlbmRhXCIsXG4gIFwiQnJlbmRhblwiLFxuICBcIkJyZW5kZW5cIixcbiAgXCJCcmVuZG9uXCIsXG4gIFwiQnJlbm5hXCIsXG4gIFwiQnJlbm5hblwiLFxuICBcIkJyZW5ub25cIixcbiAgXCJCcmVudFwiLFxuICBcIkJyZXRcIixcbiAgXCJCcmV0dFwiLFxuICBcIkJyaWFcIixcbiAgXCJCcmlhblwiLFxuICBcIkJyaWFuYVwiLFxuICBcIkJyaWFubmVcIixcbiAgXCJCcmljZVwiLFxuICBcIkJyaWRnZXRcIixcbiAgXCJCcmlkZ2V0dGVcIixcbiAgXCJCcmlkaWVcIixcbiAgXCJCcmllbGxlXCIsXG4gIFwiQnJpZ2l0dGVcIixcbiAgXCJCcmlvbm5hXCIsXG4gIFwiQnJpc2FcIixcbiAgXCJCcml0bmV5XCIsXG4gIFwiQnJpdHRhbnlcIixcbiAgXCJCcm9ja1wiLFxuICBcIkJyb2Rlcmlja1wiLFxuICBcIkJyb2R5XCIsXG4gIFwiQnJvb2tcIixcbiAgXCJCcm9va2VcIixcbiAgXCJCcm9va2x5blwiLFxuICBcIkJyb29rc1wiLFxuICBcIkJyb3duXCIsXG4gIFwiQnJ1Y2VcIixcbiAgXCJCcnlhbmFcIixcbiAgXCJCcnljZVwiLFxuICBcIkJyeWNlblwiLFxuICBcIkJyeW9uXCIsXG4gIFwiQnVja1wiLFxuICBcIkJ1ZFwiLFxuICBcIkJ1ZGR5XCIsXG4gIFwiQnVmb3JkXCIsXG4gIFwiQnVsYWhcIixcbiAgXCJCdXJkZXR0ZVwiLFxuICBcIkJ1cmxleVwiLFxuICBcIkJ1cm5pY2VcIixcbiAgXCJCdXN0ZXJcIixcbiAgXCJDYWRlXCIsXG4gIFwiQ2FkZW5cIixcbiAgXCJDYWVzYXJcIixcbiAgXCJDYWl0bHluXCIsXG4gIFwiQ2FsZVwiLFxuICBcIkNhbGViXCIsXG4gIFwiQ2FsZWlnaFwiLFxuICBcIkNhbGlcIixcbiAgXCJDYWxpc3RhXCIsXG4gIFwiQ2FsbGllXCIsXG4gIFwiQ2FtZGVuXCIsXG4gIFwiQ2FtZXJvblwiLFxuICBcIkNhbWlsYVwiLFxuICBcIkNhbWlsbGFcIixcbiAgXCJDYW1pbGxlXCIsXG4gIFwiQ2FtcmVuXCIsXG4gIFwiQ2Ftcm9uXCIsXG4gIFwiQ2FtcnluXCIsXG4gIFwiQ2FteWxsZVwiLFxuICBcIkNhbmRhY2VcIixcbiAgXCJDYW5kZWxhcmlvXCIsXG4gIFwiQ2FuZGljZVwiLFxuICBcIkNhbmRpZGFcIixcbiAgXCJDYW5kaWRvXCIsXG4gIFwiQ2FyYVwiLFxuICBcIkNhcmV5XCIsXG4gIFwiQ2FyaXNzYVwiLFxuICBcIkNhcmxlZVwiLFxuICBcIkNhcmxldG9uXCIsXG4gIFwiQ2FybGV5XCIsXG4gIFwiQ2FybGlcIixcbiAgXCJDYXJsaWVcIixcbiAgXCJDYXJsb1wiLFxuICBcIkNhcmxvc1wiLFxuICBcIkNhcmxvdHRhXCIsXG4gIFwiQ2FybWVsXCIsXG4gIFwiQ2FybWVsYVwiLFxuICBcIkNhcm1lbGxhXCIsXG4gIFwiQ2FybWVsb1wiLFxuICBcIkNhcm1lblwiLFxuICBcIkNhcm1pbmVcIixcbiAgXCJDYXJvbFwiLFxuICBcIkNhcm9sYW5uZVwiLFxuICBcIkNhcm9sZVwiLFxuICBcIkNhcm9saW5hXCIsXG4gIFwiQ2Fyb2xpbmVcIixcbiAgXCJDYXJvbHluXCIsXG4gIFwiQ2Fyb2x5bmVcIixcbiAgXCJDYXJyaWVcIixcbiAgXCJDYXJyb2xsXCIsXG4gIFwiQ2Fyc29uXCIsXG4gIFwiQ2FydGVyXCIsXG4gIFwiQ2FyeVwiLFxuICBcIkNhc2FuZHJhXCIsXG4gIFwiQ2FzZXlcIixcbiAgXCJDYXNpbWVyXCIsXG4gIFwiQ2FzaW1pclwiLFxuICBcIkNhc3BlclwiLFxuICBcIkNhc3NhbmRyYVwiLFxuICBcIkNhc3NhbmRyZVwiLFxuICBcIkNhc3NpZHlcIixcbiAgXCJDYXNzaWVcIixcbiAgXCJDYXRhbGluYVwiLFxuICBcIkNhdGVyaW5hXCIsXG4gIFwiQ2F0aGFyaW5lXCIsXG4gIFwiQ2F0aGVyaW5lXCIsXG4gIFwiQ2F0aHJpbmVcIixcbiAgXCJDYXRocnluXCIsXG4gIFwiQ2F0aHlcIixcbiAgXCJDYXlsYVwiLFxuICBcIkNlYXNhclwiLFxuICBcIkNlY2VsaWFcIixcbiAgXCJDZWNpbFwiLFxuICBcIkNlY2lsZVwiLFxuICBcIkNlY2lsaWFcIixcbiAgXCJDZWRyaWNrXCIsXG4gIFwiQ2VsZXN0aW5lXCIsXG4gIFwiQ2VsZXN0aW5vXCIsXG4gIFwiQ2VsaWFcIixcbiAgXCJDZWxpbmVcIixcbiAgXCJDZXNhclwiLFxuICBcIkNoYWRcIixcbiAgXCJDaGFkZFwiLFxuICBcIkNoYWRyaWNrXCIsXG4gIFwiQ2hhaW1cIixcbiAgXCJDaGFuY2VcIixcbiAgXCJDaGFuZGxlclwiLFxuICBcIkNoYW5lbFwiLFxuICBcIkNoYW5lbGxlXCIsXG4gIFwiQ2hhcml0eVwiLFxuICBcIkNoYXJsZW5lXCIsXG4gIFwiQ2hhcmxlc1wiLFxuICBcIkNoYXJsZXlcIixcbiAgXCJDaGFybGllXCIsXG4gIFwiQ2hhcmxvdHRlXCIsXG4gIFwiQ2hhc2VcIixcbiAgXCJDaGFzaXR5XCIsXG4gIFwiQ2hhdW5jZXlcIixcbiAgXCJDaGF5YVwiLFxuICBcIkNoYXpcIixcbiAgXCJDaGVsc2VhXCIsXG4gIFwiQ2hlbHNleVwiLFxuICBcIkNoZWxzaWVcIixcbiAgXCJDaGVzbGV5XCIsXG4gIFwiQ2hlc3RlclwiLFxuICBcIkNoZXRcIixcbiAgXCJDaGV5YW5uZVwiLFxuICBcIkNoZXllbm5lXCIsXG4gIFwiQ2hsb2VcIixcbiAgXCJDaHJpc1wiLFxuICBcIkNocmlzdFwiLFxuICBcIkNocmlzdGFcIixcbiAgXCJDaHJpc3RlbGxlXCIsXG4gIFwiQ2hyaXN0aWFuXCIsXG4gIFwiQ2hyaXN0aWFuYVwiLFxuICBcIkNocmlzdGluYVwiLFxuICBcIkNocmlzdGluZVwiLFxuICBcIkNocmlzdG9wXCIsXG4gIFwiQ2hyaXN0b3BoZVwiLFxuICBcIkNocmlzdG9waGVyXCIsXG4gIFwiQ2hyaXN0eVwiLFxuICBcIkNoeW5hXCIsXG4gIFwiQ2lhcmFcIixcbiAgXCJDaWNlcm9cIixcbiAgXCJDaWVsb1wiLFxuICBcIkNpZXJyYVwiLFxuICBcIkNpbmR5XCIsXG4gIFwiQ2l0bGFsbGlcIixcbiAgXCJDbGFpclwiLFxuICBcIkNsYWlyZVwiLFxuICBcIkNsYXJhXCIsXG4gIFwiQ2xhcmFiZWxsZVwiLFxuICBcIkNsYXJlXCIsXG4gIFwiQ2xhcmlzc2FcIixcbiAgXCJDbGFya1wiLFxuICBcIkNsYXVkXCIsXG4gIFwiQ2xhdWRlXCIsXG4gIFwiQ2xhdWRpYVwiLFxuICBcIkNsYXVkaWVcIixcbiAgXCJDbGF1ZGluZVwiLFxuICBcIkNsYXlcIixcbiAgXCJDbGVtZW5zXCIsXG4gIFwiQ2xlbWVudFwiLFxuICBcIkNsZW1lbnRpbmFcIixcbiAgXCJDbGVtZW50aW5lXCIsXG4gIFwiQ2xlbW1pZVwiLFxuICBcIkNsZW9cIixcbiAgXCJDbGVvcmFcIixcbiAgXCJDbGV0YVwiLFxuICBcIkNsZXR1c1wiLFxuICBcIkNsZXZlXCIsXG4gIFwiQ2xldmVsYW5kXCIsXG4gIFwiQ2xpZmZvcmRcIixcbiAgXCJDbGlmdG9uXCIsXG4gIFwiQ2xpbnRcIixcbiAgXCJDbGludG9uXCIsXG4gIFwiQ2xvdGlsZGVcIixcbiAgXCJDbG92aXNcIixcbiAgXCJDbG95ZFwiLFxuICBcIkNseWRlXCIsXG4gIFwiQ29ieVwiLFxuICBcIkNvZHlcIixcbiAgXCJDb2xieVwiLFxuICBcIkNvbGVcIixcbiAgXCJDb2xlbWFuXCIsXG4gIFwiQ29saW5cIixcbiAgXCJDb2xsZWVuXCIsXG4gIFwiQ29sbGluXCIsXG4gIFwiQ29sdFwiLFxuICBcIkNvbHRlblwiLFxuICBcIkNvbHRvblwiLFxuICBcIkNvbHVtYnVzXCIsXG4gIFwiQ29uY2VwY2lvblwiLFxuICBcIkNvbm5lclwiLFxuICBcIkNvbm5pZVwiLFxuICBcIkNvbm5vclwiLFxuICBcIkNvbm9yXCIsXG4gIFwiQ29ucmFkXCIsXG4gIFwiQ29uc3RhbmNlXCIsXG4gIFwiQ29uc3RhbnRpblwiLFxuICBcIkNvbnN1ZWxvXCIsXG4gIFwiQ29vcGVyXCIsXG4gIFwiQ29yYVwiLFxuICBcIkNvcmFsaWVcIixcbiAgXCJDb3JiaW5cIixcbiAgXCJDb3JkZWxpYVwiLFxuICBcIkNvcmRlbGxcIixcbiAgXCJDb3JkaWFcIixcbiAgXCJDb3JkaWVcIixcbiAgXCJDb3JlbmVcIixcbiAgXCJDb3JpbmVcIixcbiAgXCJDb3JuZWxpdXNcIixcbiAgXCJDb3JuZWxsXCIsXG4gIFwiQ29ycmluZVwiLFxuICBcIkNvcnRlelwiLFxuICBcIkNvcnRuZXlcIixcbiAgXCJDb3J5XCIsXG4gIFwiQ290eVwiLFxuICBcIkNvdXJ0bmV5XCIsXG4gIFwiQ295XCIsXG4gIFwiQ3JhaWdcIixcbiAgXCJDcmF3Zm9yZFwiLFxuICBcIkNyZW9sYVwiLFxuICBcIkNyaXN0YWxcIixcbiAgXCJDcmlzdGlhblwiLFxuICBcIkNyaXN0aW5hXCIsXG4gIFwiQ3Jpc3RvYmFsXCIsXG4gIFwiQ3Jpc3RvcGhlclwiLFxuICBcIkNydXpcIixcbiAgXCJDcnlzdGFsXCIsXG4gIFwiQ3J5c3RlbFwiLFxuICBcIkN1bGxlblwiLFxuICBcIkN1cnRcIixcbiAgXCJDdXJ0aXNcIixcbiAgXCJDeWRuZXlcIixcbiAgXCJDeW50aGlhXCIsXG4gIFwiQ3lyaWxcIixcbiAgXCJDeXJ1c1wiLFxuICBcIkRhZ21hclwiLFxuICBcIkRhaGxpYVwiLFxuICBcIkRhaWphXCIsXG4gIFwiRGFpc2hhXCIsXG4gIFwiRGFpc3lcIixcbiAgXCJEYWtvdGFcIixcbiAgXCJEYWxlXCIsXG4gIFwiRGFsbGFzXCIsXG4gIFwiRGFsbGluXCIsXG4gIFwiRGFsdG9uXCIsXG4gIFwiRGFtYXJpc1wiLFxuICBcIkRhbWVvblwiLFxuICBcIkRhbWlhblwiLFxuICBcIkRhbWllblwiLFxuICBcIkRhbWlvblwiLFxuICBcIkRhbW9uXCIsXG4gIFwiRGFuXCIsXG4gIFwiRGFuYVwiLFxuICBcIkRhbmRyZVwiLFxuICBcIkRhbmVcIixcbiAgXCJEJ2FuZ2Vsb1wiLFxuICBcIkRhbmdlbG9cIixcbiAgXCJEYW5pYWxcIixcbiAgXCJEYW5pZWxhXCIsXG4gIFwiRGFuaWVsbGFcIixcbiAgXCJEYW5pZWxsZVwiLFxuICBcIkRhbmlrYVwiLFxuICBcIkRhbm5pZVwiLFxuICBcIkRhbm55XCIsXG4gIFwiRGFudGVcIixcbiAgXCJEYW55a2FcIixcbiAgXCJEYXBobmVcIixcbiAgXCJEYXBobmVlXCIsXG4gIFwiRGFwaG5leVwiLFxuICBcIkRhcmJ5XCIsXG4gIFwiRGFyZW5cIixcbiAgXCJEYXJpYW5cIixcbiAgXCJEYXJpYW5hXCIsXG4gIFwiRGFyaWVuXCIsXG4gIFwiRGFyaW9cIixcbiAgXCJEYXJpb25cIixcbiAgXCJEYXJpdXNcIixcbiAgXCJEYXJsZW5lXCIsXG4gIFwiRGFyb25cIixcbiAgXCJEYXJyZWxcIixcbiAgXCJEYXJyZWxsXCIsXG4gIFwiRGFycmVuXCIsXG4gIFwiRGFycmlja1wiLFxuICBcIkRhcnJpblwiLFxuICBcIkRhcnJpb25cIixcbiAgXCJEYXJyb25cIixcbiAgXCJEYXJyeWxcIixcbiAgXCJEYXJ3aW5cIixcbiAgXCJEYXJ5bFwiLFxuICBcIkRhc2hhd25cIixcbiAgXCJEYXNpYVwiLFxuICBcIkRhdmVcIixcbiAgXCJEYXZpZFwiLFxuICBcIkRhdmluXCIsXG4gIFwiRGF2aW9uXCIsXG4gIFwiRGF2b25cIixcbiAgXCJEYXZvbnRlXCIsXG4gIFwiRGF3blwiLFxuICBcIkRhd3NvblwiLFxuICBcIkRheFwiLFxuICBcIkRheWFuYVwiLFxuICBcIkRheW5hXCIsXG4gIFwiRGF5bmVcIixcbiAgXCJEYXl0b25cIixcbiAgXCJEZWFuXCIsXG4gIFwiRGVhbmdlbG9cIixcbiAgXCJEZWFubmFcIixcbiAgXCJEZWJvcmFoXCIsXG4gIFwiRGVjbGFuXCIsXG4gIFwiRGVkcmljXCIsXG4gIFwiRGVkcmlja1wiLFxuICBcIkRlZVwiLFxuICBcIkRlaW9uXCIsXG4gIFwiRGVqYVwiLFxuICBcIkRlamFoXCIsXG4gIFwiRGVqb25cIixcbiAgXCJEZWp1YW5cIixcbiAgXCJEZWxhbmV5XCIsXG4gIFwiRGVsYmVydFwiLFxuICBcIkRlbGZpbmFcIixcbiAgXCJEZWxpYVwiLFxuICBcIkRlbGlsYWhcIixcbiAgXCJEZWxsXCIsXG4gIFwiRGVsbGFcIixcbiAgXCJEZWxtZXJcIixcbiAgXCJEZWxvcmVzXCIsXG4gIFwiRGVscGhhXCIsXG4gIFwiRGVscGhpYVwiLFxuICBcIkRlbHBoaW5lXCIsXG4gIFwiRGVsdGFcIixcbiAgXCJEZW1hcmNvXCIsXG4gIFwiRGVtYXJjdXNcIixcbiAgXCJEZW1hcmlvXCIsXG4gIFwiRGVtZXRyaXNcIixcbiAgXCJEZW1ldHJpdXNcIixcbiAgXCJEZW1vbmRcIixcbiAgXCJEZW5hXCIsXG4gIFwiRGVuaXNcIixcbiAgXCJEZW5uaXNcIixcbiAgXCJEZW9uXCIsXG4gIFwiRGVvbmRyZVwiLFxuICBcIkRlb250YWVcIixcbiAgXCJEZW9udGVcIixcbiAgXCJEZXJlY2tcIixcbiAgXCJEZXJla1wiLFxuICBcIkRlcmlja1wiLFxuICBcIkRlcm9uXCIsXG4gIFwiRGVycmlja1wiLFxuICBcIkRlc2hhdW5cIixcbiAgXCJEZXNoYXduXCIsXG4gIFwiRGVzaXJlZVwiLFxuICBcIkRlc21vbmRcIixcbiAgXCJEZXNzaWVcIixcbiAgXCJEZXN0YW55XCIsXG4gIFwiRGVzdGluXCIsXG4gIFwiRGVzdGluZWVcIixcbiAgXCJEZXN0aW5leVwiLFxuICBcIkRlc3RpbmlcIixcbiAgXCJEZXN0aW55XCIsXG4gIFwiRGV2YW5cIixcbiAgXCJEZXZhbnRlXCIsXG4gIFwiRGV2ZW5cIixcbiAgXCJEZXZpblwiLFxuICBcIkRldm9uXCIsXG4gIFwiRGV2b250ZVwiLFxuICBcIkRldnluXCIsXG4gIFwiRGV3YXluZVwiLFxuICBcIkRld2l0dFwiLFxuICBcIkRleHRlclwiLFxuICBcIkRpYW1vbmRcIixcbiAgXCJEaWFuYVwiLFxuICBcIkRpYW5uYVwiLFxuICBcIkRpZWdvXCIsXG4gIFwiRGlsbGFuXCIsXG4gIFwiRGlsbG9uXCIsXG4gIFwiRGltaXRyaVwiLFxuICBcIkRpbmFcIixcbiAgXCJEaW5vXCIsXG4gIFwiRGlvblwiLFxuICBcIkRpeGllXCIsXG4gIFwiRG9ja1wiLFxuICBcIkRvbGx5XCIsXG4gIFwiRG9sb3Jlc1wiLFxuICBcIkRvbWVuaWNcIixcbiAgXCJEb21lbmljYVwiLFxuICBcIkRvbWVuaWNrXCIsXG4gIFwiRG9tZW5pY29cIixcbiAgXCJEb21pbmdvXCIsXG4gIFwiRG9taW5pY1wiLFxuICBcIkRvbWluaXF1ZVwiLFxuICBcIkRvblwiLFxuICBcIkRvbmFsZFwiLFxuICBcIkRvbmF0b1wiLFxuICBcIkRvbmF2b25cIixcbiAgXCJEb25uYVwiLFxuICBcIkRvbm5lbGxcIixcbiAgXCJEb25uaWVcIixcbiAgXCJEb25ueVwiLFxuICBcIkRvcmFcIixcbiAgXCJEb3JjYXNcIixcbiAgXCJEb3JpYW5cIixcbiAgXCJEb3Jpc1wiLFxuICBcIkRvcm90aGVhXCIsXG4gIFwiRG9yb3RoeVwiLFxuICBcIkRvcnJpc1wiLFxuICBcIkRvcnRoYVwiLFxuICBcIkRvcnRoeVwiLFxuICBcIkRvdWdcIixcbiAgXCJEb3VnbGFzXCIsXG4gIFwiRG92aWVcIixcbiAgXCJEb3lsZVwiLFxuICBcIkRyYWtlXCIsXG4gIFwiRHJld1wiLFxuICBcIkR1YW5lXCIsXG4gIFwiRHVkbGV5XCIsXG4gIFwiRHVsY2VcIixcbiAgXCJEdW5jYW5cIixcbiAgXCJEdXJ3YXJkXCIsXG4gIFwiRHVzdGluXCIsXG4gIFwiRHVzdHlcIixcbiAgXCJEd2lnaHRcIixcbiAgXCJEeWxhblwiLFxuICBcIkVhcmxcIixcbiAgXCJFYXJsZW5lXCIsXG4gIFwiRWFybGluZVwiLFxuICBcIkVhcm5lc3RcIixcbiAgXCJFYXJuZXN0aW5lXCIsXG4gIFwiRWFzdGVyXCIsXG4gIFwiRWFzdG9uXCIsXG4gIFwiRWJiYVwiLFxuICBcIkVib255XCIsXG4gIFwiRWRcIixcbiAgXCJFZGFcIixcbiAgXCJFZGRcIixcbiAgXCJFZGRpZVwiLFxuICBcIkVkZW5cIixcbiAgXCJFZGdhclwiLFxuICBcIkVkZ2FyZG9cIixcbiAgXCJFZGlzb25cIixcbiAgXCJFZG1vbmRcIixcbiAgXCJFZG11bmRcIixcbiAgXCJFZG5hXCIsXG4gIFwiRWR1YXJkb1wiLFxuICBcIkVkd2FyZFwiLFxuICBcIkVkd2FyZG9cIixcbiAgXCJFZHdpblwiLFxuICBcIkVkd2luYVwiLFxuICBcIkVkeXRoXCIsXG4gIFwiRWR5dGhlXCIsXG4gIFwiRWZmaWVcIixcbiAgXCJFZnJhaW5cIixcbiAgXCJFZnJlblwiLFxuICBcIkVpbGVlblwiLFxuICBcIkVpbmFyXCIsXG4gIFwiRWlub1wiLFxuICBcIkVsYWRpb1wiLFxuICBcIkVsYWluYVwiLFxuICBcIkVsYmVydFwiLFxuICBcIkVsZGFcIixcbiAgXCJFbGRvblwiLFxuICBcIkVsZG9yYVwiLFxuICBcIkVsZHJlZFwiLFxuICBcIkVsZHJpZGdlXCIsXG4gIFwiRWxlYW5vcmFcIixcbiAgXCJFbGVhbm9yZVwiLFxuICBcIkVsZWF6YXJcIixcbiAgXCJFbGVjdGFcIixcbiAgXCJFbGVuYVwiLFxuICBcIkVsZW5vclwiLFxuICBcIkVsZW5vcmFcIixcbiAgXCJFbGVvbm9yZVwiLFxuICBcIkVsZnJpZWRhXCIsXG4gIFwiRWxpXCIsXG4gIFwiRWxpYW5cIixcbiAgXCJFbGlhbmVcIixcbiAgXCJFbGlhc1wiLFxuICBcIkVsaWV6ZXJcIixcbiAgXCJFbGlqYWhcIixcbiAgXCJFbGlub3JcIixcbiAgXCJFbGlub3JlXCIsXG4gIFwiRWxpc2FcIixcbiAgXCJFbGlzYWJldGhcIixcbiAgXCJFbGlzZVwiLFxuICBcIkVsaXNlb1wiLFxuICBcIkVsaXNoYVwiLFxuICBcIkVsaXNzYVwiLFxuICBcIkVsaXphXCIsXG4gIFwiRWxpemFiZXRoXCIsXG4gIFwiRWxsYVwiLFxuICBcIkVsbGVuXCIsXG4gIFwiRWxsaWVcIixcbiAgXCJFbGxpb3RcIixcbiAgXCJFbGxpb3R0XCIsXG4gIFwiRWxsaXNcIixcbiAgXCJFbGxzd29ydGhcIixcbiAgXCJFbG1lclwiLFxuICBcIkVsbWlyYVwiLFxuICBcIkVsbW9cIixcbiAgXCJFbG1vcmVcIixcbiAgXCJFbG5hXCIsXG4gIFwiRWxub3JhXCIsXG4gIFwiRWxvZHlcIixcbiAgXCJFbG9pc2FcIixcbiAgXCJFbG9pc2VcIixcbiAgXCJFbG91aXNlXCIsXG4gIFwiRWxveVwiLFxuICBcIkVscm95XCIsXG4gIFwiRWxzYVwiLFxuICBcIkVsc2VcIixcbiAgXCJFbHNpZVwiLFxuICBcIkVsdGFcIixcbiAgXCJFbHRvblwiLFxuICBcIkVsdmFcIixcbiAgXCJFbHZlcmFcIixcbiAgXCJFbHZpZVwiLFxuICBcIkVsdmlzXCIsXG4gIFwiRWx3aW5cIixcbiAgXCJFbHd5blwiLFxuICBcIkVseXNlXCIsXG4gIFwiRWx5c3NhXCIsXG4gIFwiRWx6YVwiLFxuICBcIkVtYW51ZWxcIixcbiAgXCJFbWVsaWFcIixcbiAgXCJFbWVsaWVcIixcbiAgXCJFbWVseVwiLFxuICBcIkVtZXJhbGRcIixcbiAgXCJFbWVyc29uXCIsXG4gIFwiRW1lcnlcIixcbiAgXCJFbWllXCIsXG4gIFwiRW1pbFwiLFxuICBcIkVtaWxlXCIsXG4gIFwiRW1pbGlhXCIsXG4gIFwiRW1pbGlhbm9cIixcbiAgXCJFbWlsaWVcIixcbiAgXCJFbWlsaW9cIixcbiAgXCJFbWlseVwiLFxuICBcIkVtbWFcIixcbiAgXCJFbW1hbGVlXCIsXG4gIFwiRW1tYW51ZWxcIixcbiAgXCJFbW1hbnVlbGxlXCIsXG4gIFwiRW1tZXRcIixcbiAgXCJFbW1ldHRcIixcbiAgXCJFbW1pZVwiLFxuICBcIkVtbWl0dFwiLFxuICBcIkVtbXlcIixcbiAgXCJFbW9yeVwiLFxuICBcIkVuYVwiLFxuICBcIkVuaWRcIixcbiAgXCJFbm9jaFwiLFxuICBcIkVub2xhXCIsXG4gIFwiRW5vc1wiLFxuICBcIkVucmljb1wiLFxuICBcIkVucmlxdWVcIixcbiAgXCJFcGhyYWltXCIsXG4gIFwiRXJhXCIsXG4gIFwiRXJpYmVydG9cIixcbiAgXCJFcmljXCIsXG4gIFwiRXJpY2FcIixcbiAgXCJFcmljaFwiLFxuICBcIkVyaWNrXCIsXG4gIFwiRXJpY2thXCIsXG4gIFwiRXJpa1wiLFxuICBcIkVyaWthXCIsXG4gIFwiRXJpblwiLFxuICBcIkVybGluZ1wiLFxuICBcIkVybmFcIixcbiAgXCJFcm5lc3RcIixcbiAgXCJFcm5lc3RpbmFcIixcbiAgXCJFcm5lc3RpbmVcIixcbiAgXCJFcm5lc3RvXCIsXG4gIFwiRXJuaWVcIixcbiAgXCJFcnZpblwiLFxuICBcIkVyd2luXCIsXG4gIFwiRXJ5blwiLFxuICBcIkVzbWVyYWxkYVwiLFxuICBcIkVzcGVyYW56YVwiLFxuICBcIkVzdGFcIixcbiAgXCJFc3RlYmFuXCIsXG4gIFwiRXN0ZWZhbmlhXCIsXG4gIFwiRXN0ZWxcIixcbiAgXCJFc3RlbGxcIixcbiAgXCJFc3RlbGxhXCIsXG4gIFwiRXN0ZWxsZVwiLFxuICBcIkVzdGV2YW5cIixcbiAgXCJFc3RoZXJcIixcbiAgXCJFc3RyZWxsYVwiLFxuICBcIkV0aGFcIixcbiAgXCJFdGhhblwiLFxuICBcIkV0aGVsXCIsXG4gIFwiRXRoZWx5blwiLFxuICBcIkV0aHlsXCIsXG4gIFwiRXR0aWVcIixcbiAgXCJFdWRvcmFcIixcbiAgXCJFdWdlbmVcIixcbiAgXCJFdWdlbmlhXCIsXG4gIFwiRXVsYVwiLFxuICBcIkV1bGFoXCIsXG4gIFwiRXVsYWxpYVwiLFxuICBcIkV1bmFcIixcbiAgXCJFdW5pY2VcIixcbiAgXCJFdXNlYmlvXCIsXG4gIFwiRXZhXCIsXG4gIFwiRXZhbHluXCIsXG4gIFwiRXZhblwiLFxuICBcIkV2YW5nZWxpbmVcIixcbiAgXCJFdmFuc1wiLFxuICBcIkV2ZVwiLFxuICBcIkV2ZWxpbmVcIixcbiAgXCJFdmVseW5cIixcbiAgXCJFdmVyYXJkb1wiLFxuICBcIkV2ZXJldHRcIixcbiAgXCJFdmVyZXR0ZVwiLFxuICBcIkV2ZXJ0XCIsXG4gIFwiRXZpZVwiLFxuICBcIkV3YWxkXCIsXG4gIFwiRXdlbGxcIixcbiAgXCJFemVraWVsXCIsXG4gIFwiRXplcXVpZWxcIixcbiAgXCJFenJhXCIsXG4gIFwiRmFiaWFuXCIsXG4gIFwiRmFiaW9sYVwiLFxuICBcIkZhZVwiLFxuICBcIkZhbm5pZVwiLFxuICBcIkZhbm55XCIsXG4gIFwiRmF0aW1hXCIsXG4gIFwiRmF1c3Rpbm9cIixcbiAgXCJGYXVzdG9cIixcbiAgXCJGYXZpYW5cIixcbiAgXCJGYXlcIixcbiAgXCJGYXllXCIsXG4gIFwiRmVkZXJpY29cIixcbiAgXCJGZWxpY2lhXCIsXG4gIFwiRmVsaWNpdGFcIixcbiAgXCJGZWxpY2l0eVwiLFxuICBcIkZlbGlwYVwiLFxuICBcIkZlbGlwZVwiLFxuICBcIkZlbGl4XCIsXG4gIFwiRmVsdG9uXCIsXG4gIFwiRmVybWluXCIsXG4gIFwiRmVyblwiLFxuICBcIkZlcm5hbmRvXCIsXG4gIFwiRmVybmVcIixcbiAgXCJGaWRlbFwiLFxuICBcIkZpbGliZXJ0b1wiLFxuICBcIkZpbG9tZW5hXCIsXG4gIFwiRmlublwiLFxuICBcIkZpb25hXCIsXG4gIFwiRmxhdmllXCIsXG4gIFwiRmxhdmlvXCIsXG4gIFwiRmxldGFcIixcbiAgXCJGbGV0Y2hlclwiLFxuICBcIkZsb1wiLFxuICBcIkZsb3JlbmNlXCIsXG4gIFwiRmxvcmVuY2lvXCIsXG4gIFwiRmxvcmlhblwiLFxuICBcIkZsb3JpZGFcIixcbiAgXCJGbG9yaW5lXCIsXG4gIFwiRmxvc3NpZVwiLFxuICBcIkZsb3lcIixcbiAgXCJGbG95ZFwiLFxuICBcIkZvcmRcIixcbiAgXCJGb3Jlc3RcIixcbiAgXCJGb3JyZXN0XCIsXG4gIFwiRm9zdGVyXCIsXG4gIFwiRnJhbmNlc1wiLFxuICBcIkZyYW5jZXNjYVwiLFxuICBcIkZyYW5jZXNjb1wiLFxuICBcIkZyYW5jaXNcIixcbiAgXCJGcmFuY2lzY2FcIixcbiAgXCJGcmFuY2lzY29cIixcbiAgXCJGcmFuY29cIixcbiAgXCJGcmFua1wiLFxuICBcIkZyYW5raWVcIixcbiAgXCJGcmFuelwiLFxuICBcIkZyZWRcIixcbiAgXCJGcmVkYVwiLFxuICBcIkZyZWRkaWVcIixcbiAgXCJGcmVkZHlcIixcbiAgXCJGcmVkZXJpY1wiLFxuICBcIkZyZWRlcmlja1wiLFxuICBcIkZyZWRlcmlrXCIsXG4gIFwiRnJlZGVyaXF1ZVwiLFxuICBcIkZyZWRyaWNrXCIsXG4gIFwiRnJlZHlcIixcbiAgXCJGcmVlZGFcIixcbiAgXCJGcmVlbWFuXCIsXG4gIFwiRnJlaWRhXCIsXG4gIFwiRnJpZGFcIixcbiAgXCJGcmllZGFcIixcbiAgXCJGcmllZHJpY2hcIixcbiAgXCJGcml0elwiLFxuICBcIkZ1cm1hblwiLFxuICBcIkdhYmVcIixcbiAgXCJHYWJyaWVsXCIsXG4gIFwiR2FicmllbGxhXCIsXG4gIFwiR2FicmllbGxlXCIsXG4gIFwiR2FldGFub1wiLFxuICBcIkdhZ2VcIixcbiAgXCJHYWlsXCIsXG4gIFwiR2FyZG5lclwiLFxuICBcIkdhcmV0dFwiLFxuICBcIkdhcmZpZWxkXCIsXG4gIFwiR2FybGFuZFwiLFxuICBcIkdhcm5ldFwiLFxuICBcIkdhcm5ldHRcIixcbiAgXCJHYXJyZXRcIixcbiAgXCJHYXJyZXR0XCIsXG4gIFwiR2Fycmlja1wiLFxuICBcIkdhcnJpc29uXCIsXG4gIFwiR2FycnlcIixcbiAgXCJHYXJ0aFwiLFxuICBcIkdhc3RvblwiLFxuICBcIkdhdmluXCIsXG4gIFwiR2F5XCIsXG4gIFwiR2F5bGVcIixcbiAgXCJHYXlsb3JkXCIsXG4gIFwiR2VuZVwiLFxuICBcIkdlbmVyYWxcIixcbiAgXCJHZW5lc2lzXCIsXG4gIFwiR2VuZXZpZXZlXCIsXG4gIFwiR2VubmFyb1wiLFxuICBcIkdlbm92ZXZhXCIsXG4gIFwiR2VvXCIsXG4gIFwiR2VvZmZyZXlcIixcbiAgXCJHZW9yZ2VcIixcbiAgXCJHZW9yZ2V0dGVcIixcbiAgXCJHZW9yZ2lhbmFcIixcbiAgXCJHZW9yZ2lhbm5hXCIsXG4gIFwiR2VvdmFubmlcIixcbiAgXCJHZW92YW5ueVwiLFxuICBcIkdlb3ZhbnlcIixcbiAgXCJHZXJhbGRcIixcbiAgXCJHZXJhbGRpbmVcIixcbiAgXCJHZXJhcmRcIixcbiAgXCJHZXJhcmRvXCIsXG4gIFwiR2VyZGFcIixcbiAgXCJHZXJoYXJkXCIsXG4gIFwiR2VybWFpbmVcIixcbiAgXCJHZXJtYW5cIixcbiAgXCJHZXJyeVwiLFxuICBcIkdlcnNvblwiLFxuICBcIkdlcnRydWRlXCIsXG4gIFwiR2lhXCIsXG4gIFwiR2lhbm5pXCIsXG4gIFwiR2lkZW9uXCIsXG4gIFwiR2lsYmVydFwiLFxuICBcIkdpbGJlcnRvXCIsXG4gIFwiR2lsZGFcIixcbiAgXCJHaWxlc1wiLFxuICBcIkdpbGxpYW5cIixcbiAgXCJHaW5hXCIsXG4gIFwiR2lub1wiLFxuICBcIkdpb3ZhbmlcIixcbiAgXCJHaW92YW5uYVwiLFxuICBcIkdpb3Zhbm5pXCIsXG4gIFwiR2lvdmFubnlcIixcbiAgXCJHaXNzZWxsZVwiLFxuICBcIkdpdXNlcHBlXCIsXG4gIFwiR2xhZHljZVwiLFxuICBcIkdsYWR5c1wiLFxuICBcIkdsZW5cIixcbiAgXCJHbGVuZGFcIixcbiAgXCJHbGVubmFcIixcbiAgXCJHbGVubmllXCIsXG4gIFwiR2xvcmlhXCIsXG4gIFwiR29kZnJleVwiLFxuICBcIkdvbGRhXCIsXG4gIFwiR29sZGVuXCIsXG4gIFwiR29uemFsb1wiLFxuICBcIkdvcmRvblwiLFxuICBcIkdyYWNlXCIsXG4gIFwiR3JhY2llXCIsXG4gIFwiR3JhY2llbGFcIixcbiAgXCJHcmFkeVwiLFxuICBcIkdyYWhhbVwiLFxuICBcIkdyYW50XCIsXG4gIFwiR3JhbnZpbGxlXCIsXG4gIFwiR3JheWNlXCIsXG4gIFwiR3JheXNvblwiLFxuICBcIkdyZWVuXCIsXG4gIFwiR3JlZ1wiLFxuICBcIkdyZWdnXCIsXG4gIFwiR3JlZ29yaWFcIixcbiAgXCJHcmVnb3Jpb1wiLFxuICBcIkdyZWdvcnlcIixcbiAgXCJHcmV0YVwiLFxuICBcIkdyZXRjaGVuXCIsXG4gIFwiR3JleXNvblwiLFxuICBcIkdyaWZmaW5cIixcbiAgXCJHcm92ZXJcIixcbiAgXCJHdWFkYWx1cGVcIixcbiAgXCJHdWRydW5cIixcbiAgXCJHdWlkb1wiLFxuICBcIkd1aWxsZXJtb1wiLFxuICBcIkd1aXNlcHBlXCIsXG4gIFwiR3VubmFyXCIsXG4gIFwiR3VubmVyXCIsXG4gIFwiR3VzXCIsXG4gIFwiR3Vzc2llXCIsXG4gIFwiR3VzdFwiLFxuICBcIkd1c3RhdmVcIixcbiAgXCJHdXlcIixcbiAgXCJHd2VuXCIsXG4gIFwiR3dlbmRvbHluXCIsXG4gIFwiSGFkbGV5XCIsXG4gIFwiSGFpbGVlXCIsXG4gIFwiSGFpbGV5XCIsXG4gIFwiSGFpbGllXCIsXG4gIFwiSGFsXCIsXG4gIFwiSGFsZWlnaFwiLFxuICBcIkhhbGV5XCIsXG4gIFwiSGFsaWVcIixcbiAgXCJIYWxsZVwiLFxuICBcIkhhbGxpZVwiLFxuICBcIkhhbmtcIixcbiAgXCJIYW5uYVwiLFxuICBcIkhhbm5haFwiLFxuICBcIkhhbnNcIixcbiAgXCJIYXJkeVwiLFxuICBcIkhhcmxleVwiLFxuICBcIkhhcm1vblwiLFxuICBcIkhhcm1vbnlcIixcbiAgXCJIYXJvbGRcIixcbiAgXCJIYXJyaXNvblwiLFxuICBcIkhhcnJ5XCIsXG4gIFwiSGFydmV5XCIsXG4gIFwiSGFza2VsbFwiLFxuICBcIkhhc3NhblwiLFxuICBcIkhhc3NpZVwiLFxuICBcIkhhdHRpZVwiLFxuICBcIkhhdmVuXCIsXG4gIFwiSGF5ZGVuXCIsXG4gIFwiSGF5bGVlXCIsXG4gIFwiSGF5bGV5XCIsXG4gIFwiSGF5bGllXCIsXG4gIFwiSGF6ZWxcIixcbiAgXCJIYXpsZVwiLFxuICBcIkhlYXRoXCIsXG4gIFwiSGVhdGhlclwiLFxuICBcIkhlYXZlblwiLFxuICBcIkhlYmVyXCIsXG4gIFwiSGVjdG9yXCIsXG4gIFwiSGVpZGlcIixcbiAgXCJIZWxlblwiLFxuICBcIkhlbGVuYVwiLFxuICBcIkhlbGVuZVwiLFxuICBcIkhlbGdhXCIsXG4gIFwiSGVsbGVuXCIsXG4gIFwiSGVsbWVyXCIsXG4gIFwiSGVsb2lzZVwiLFxuICBcIkhlbmRlcnNvblwiLFxuICBcIkhlbnJpXCIsXG4gIFwiSGVucmlldHRlXCIsXG4gIFwiSGVucnlcIixcbiAgXCJIZXJiZXJ0XCIsXG4gIFwiSGVybWFuXCIsXG4gIFwiSGVybWFublwiLFxuICBcIkhlcm1pbmFcIixcbiAgXCJIZXJtaW5pYVwiLFxuICBcIkhlcm1pbmlvXCIsXG4gIFwiSGVyc2hlbFwiLFxuICBcIkhlcnRhXCIsXG4gIFwiSGVydGhhXCIsXG4gIFwiSGVzdGVyXCIsXG4gIFwiSGV0dGllXCIsXG4gIFwiSGlsYXJpb1wiLFxuICBcIkhpbGJlcnRcIixcbiAgXCJIaWxkYVwiLFxuICBcIkhpbGRlZ2FyZFwiLFxuICBcIkhpbGxhcmRcIixcbiAgXCJIaWxsYXJ5XCIsXG4gIFwiSGlsbWFcIixcbiAgXCJIaWx0b25cIixcbiAgXCJIaXBvbGl0b1wiLFxuICBcIkhpcmFtXCIsXG4gIFwiSG9iYXJ0XCIsXG4gIFwiSG9sZGVuXCIsXG4gIFwiSG9sbGllXCIsXG4gIFwiSG9sbGlzXCIsXG4gIFwiSG9sbHlcIixcbiAgXCJIb3BlXCIsXG4gIFwiSG9yYWNlXCIsXG4gIFwiSG9yYWNpb1wiLFxuICBcIkhvcnRlbnNlXCIsXG4gIFwiSG9zZWFcIixcbiAgXCJIb3VzdG9uXCIsXG4gIFwiSG93YXJkXCIsXG4gIFwiSG93ZWxsXCIsXG4gIFwiSG95dFwiLFxuICBcIkh1YmVydFwiLFxuICBcIkh1ZHNvblwiLFxuICBcIkh1Z2hcIixcbiAgXCJIdWxkYVwiLFxuICBcIkh1bWJlcnRvXCIsXG4gIFwiSHVudGVyXCIsXG4gIFwiSHltYW5cIixcbiAgXCJJYW5cIixcbiAgXCJJYnJhaGltXCIsXG4gIFwiSWNpZVwiLFxuICBcIklkYVwiLFxuICBcIklkZWxsXCIsXG4gIFwiSWRlbGxhXCIsXG4gIFwiSWduYWNpb1wiLFxuICBcIklnbmF0aXVzXCIsXG4gIFwiSWtlXCIsXG4gIFwiSWxhXCIsXG4gIFwiSWxlbmVcIixcbiAgXCJJbGlhbmFcIixcbiAgXCJJbWFcIixcbiAgXCJJbWFuaVwiLFxuICBcIkltZWxkYVwiLFxuICBcIkltbWFudWVsXCIsXG4gIFwiSW1vZ2VuZVwiLFxuICBcIkluZXNcIixcbiAgXCJJcm1hXCIsXG4gIFwiSXJ2aW5nXCIsXG4gIFwiSXJ3aW5cIixcbiAgXCJJc2FhY1wiLFxuICBcIklzYWJlbFwiLFxuICBcIklzYWJlbGxcIixcbiAgXCJJc2FiZWxsYVwiLFxuICBcIklzYWJlbGxlXCIsXG4gIFwiSXNhY1wiLFxuICBcIklzYWRvcmVcIixcbiAgXCJJc2FpXCIsXG4gIFwiSXNhaWFoXCIsXG4gIFwiSXNhaWFzXCIsXG4gIFwiSXNpZHJvXCIsXG4gIFwiSXNtYWVsXCIsXG4gIFwiSXNvYmVsXCIsXG4gIFwiSXNvbVwiLFxuICBcIklzcmFlbFwiLFxuICBcIklzc2FjXCIsXG4gIFwiSXR6ZWxcIixcbiAgXCJJdmFcIixcbiAgXCJJdmFoXCIsXG4gIFwiSXZvcnlcIixcbiAgXCJJdnlcIixcbiAgXCJJemFiZWxsYVwiLFxuICBcIkl6YWlhaFwiLFxuICBcIkphYmFyaVwiLFxuICBcIkphY2VcIixcbiAgXCJKYWNleVwiLFxuICBcIkphY2ludGhlXCIsXG4gIFwiSmFjaW50b1wiLFxuICBcIkphY2tcIixcbiAgXCJKYWNrZWxpbmVcIixcbiAgXCJKYWNraWVcIixcbiAgXCJKYWNrbHluXCIsXG4gIFwiSmFja3NvblwiLFxuICBcIkphY2t5XCIsXG4gIFwiSmFjbHluXCIsXG4gIFwiSmFjcXVlbHluXCIsXG4gIFwiSmFjcXVlc1wiLFxuICBcIkphY3ludGhlXCIsXG4gIFwiSmFkYVwiLFxuICBcIkphZGVcIixcbiAgXCJKYWRlblwiLFxuICBcIkphZG9uXCIsXG4gIFwiSmFkeW5cIixcbiAgXCJKYWVkZW5cIixcbiAgXCJKYWlkYVwiLFxuICBcIkphaWRlblwiLFxuICBcIkphaWx5blwiLFxuICBcIkphaW1lXCIsXG4gIFwiSmFpcm9cIixcbiAgXCJKYWtheWxhXCIsXG4gIFwiSmFrZVwiLFxuICBcIkpha29iXCIsXG4gIFwiSmFsZWVsXCIsXG4gIFwiSmFsZW5cIixcbiAgXCJKYWxvblwiLFxuICBcIkphbHluXCIsXG4gIFwiSmFtYWFsXCIsXG4gIFwiSmFtYWxcIixcbiAgXCJKYW1hclwiLFxuICBcIkphbWFyY3VzXCIsXG4gIFwiSmFtZWxcIixcbiAgXCJKYW1lc29uXCIsXG4gIFwiSmFtZXlcIixcbiAgXCJKYW1pZVwiLFxuICBcIkphbWlsXCIsXG4gIFwiSmFtaXJcIixcbiAgXCJKYW1pc29uXCIsXG4gIFwiSmFtbWllXCIsXG4gIFwiSmFuXCIsXG4gIFwiSmFuYVwiLFxuICBcIkphbmFlXCIsXG4gIFwiSmFuZVwiLFxuICBcIkphbmVsbGVcIixcbiAgXCJKYW5lc3NhXCIsXG4gIFwiSmFuZXRcIixcbiAgXCJKYW5pY2VcIixcbiAgXCJKYW5pY2tcIixcbiAgXCJKYW5pZVwiLFxuICBcIkphbmlzXCIsXG4gIFwiSmFuaXlhXCIsXG4gIFwiSmFubmllXCIsXG4gIFwiSmFueVwiLFxuICBcIkphcXVhblwiLFxuICBcIkphcXVlbGluXCIsXG4gIFwiSmFxdWVsaW5lXCIsXG4gIFwiSmFyZWRcIixcbiAgXCJKYXJlblwiLFxuICBcIkphcm9kXCIsXG4gIFwiSmFyb25cIixcbiAgXCJKYXJyZWRcIixcbiAgXCJKYXJyZWxsXCIsXG4gIFwiSmFycmV0XCIsXG4gIFwiSmFycmV0dFwiLFxuICBcIkphcnJvZFwiLFxuICBcIkphcnZpc1wiLFxuICBcIkphc2VuXCIsXG4gIFwiSmFzbWluXCIsXG4gIFwiSmFzb25cIixcbiAgXCJKYXNwZXJcIixcbiAgXCJKYXVuaXRhXCIsXG4gIFwiSmF2aWVyXCIsXG4gIFwiSmF2b25cIixcbiAgXCJKYXZvbnRlXCIsXG4gIFwiSmF5XCIsXG4gIFwiSmF5Y2VcIixcbiAgXCJKYXljZWVcIixcbiAgXCJKYXlkYVwiLFxuICBcIkpheWRlXCIsXG4gIFwiSmF5ZGVuXCIsXG4gIFwiSmF5ZG9uXCIsXG4gIFwiSmF5bGFuXCIsXG4gIFwiSmF5bGVuXCIsXG4gIFwiSmF5bGluXCIsXG4gIFwiSmF5bG9uXCIsXG4gIFwiSmF5bWVcIixcbiAgXCJKYXluZVwiLFxuICBcIkpheXNvblwiLFxuICBcIkphemx5blwiLFxuICBcIkphem1pblwiLFxuICBcIkphem15blwiLFxuICBcIkphem15bmVcIixcbiAgXCJKZWFuXCIsXG4gIFwiSmVhbmV0dGVcIixcbiAgXCJKZWFuaWVcIixcbiAgXCJKZWFubmVcIixcbiAgXCJKZWRcIixcbiAgXCJKZWRlZGlhaFwiLFxuICBcIkplZGlkaWFoXCIsXG4gIFwiSmVmZlwiLFxuICBcIkplZmZlcmV5XCIsXG4gIFwiSmVmZmVyeVwiLFxuICBcIkplZmZyZXlcIixcbiAgXCJKZWZmcnlcIixcbiAgXCJKZW5hXCIsXG4gIFwiSmVuaWZlclwiLFxuICBcIkplbm5pZVwiLFxuICBcIkplbm5pZmVyXCIsXG4gIFwiSmVubmluZ3NcIixcbiAgXCJKZW5ueWZlclwiLFxuICBcIkplbnNlblwiLFxuICBcIkplcmFkXCIsXG4gIFwiSmVyYWxkXCIsXG4gIFwiSmVyYW1pZVwiLFxuICBcIkplcmFteVwiLFxuICBcIkplcmVsXCIsXG4gIFwiSmVyZW1pZVwiLFxuICBcIkplcmVteVwiLFxuICBcIkplcm1haW5cIixcbiAgXCJKZXJtYWluZVwiLFxuICBcIkplcm1leVwiLFxuICBcIkplcm9kXCIsXG4gIFwiSmVyb21lXCIsXG4gIFwiSmVyb215XCIsXG4gIFwiSmVycmVsbFwiLFxuICBcIkplcnJvZFwiLFxuICBcIkplcnJvbGRcIixcbiAgXCJKZXJyeVwiLFxuICBcIkplc3NcIixcbiAgXCJKZXNzZVwiLFxuICBcIkplc3NpY2FcIixcbiAgXCJKZXNzaWVcIixcbiAgXCJKZXNzaWthXCIsXG4gIFwiSmVzc3lcIixcbiAgXCJKZXNzeWNhXCIsXG4gIFwiSmVzdXNcIixcbiAgXCJKZXR0XCIsXG4gIFwiSmV0dGllXCIsXG4gIFwiSmV2b25cIixcbiAgXCJKZXdlbFwiLFxuICBcIkpld2VsbFwiLFxuICBcIkppbGxpYW5cIixcbiAgXCJKaW1taWVcIixcbiAgXCJKaW1teVwiLFxuICBcIkpvXCIsXG4gIFwiSm9hblwiLFxuICBcIkpvYW5hXCIsXG4gIFwiSm9hbmllXCIsXG4gIFwiSm9hbm5lXCIsXG4gIFwiSm9hbm5pZVwiLFxuICBcIkpvYW5ueVwiLFxuICBcIkpvYW55XCIsXG4gIFwiSm9hcXVpblwiLFxuICBcIkpvY2VseW5cIixcbiAgXCJKb2RpZVwiLFxuICBcIkpvZHlcIixcbiAgXCJKb2VcIixcbiAgXCJKb2VsXCIsXG4gIFwiSm9lbGxlXCIsXG4gIFwiSm9lc3BoXCIsXG4gIFwiSm9leVwiLFxuICBcIkpvaGFuXCIsXG4gIFwiSm9oYW5uXCIsXG4gIFwiSm9oYW5uYVwiLFxuICBcIkpvaGF0aGFuXCIsXG4gIFwiSm9oblwiLFxuICBcIkpvaG5hdGhhblwiLFxuICBcIkpvaG5hdGhvblwiLFxuICBcIkpvaG5uaWVcIixcbiAgXCJKb2hubnlcIixcbiAgXCJKb2hucGF1bFwiLFxuICBcIkpvaG5zb25cIixcbiAgXCJKb2xpZVwiLFxuICBcIkpvblwiLFxuICBcIkpvbmFzXCIsXG4gIFwiSm9uYXRhblwiLFxuICBcIkpvbmF0aGFuXCIsXG4gIFwiSm9uYXRob25cIixcbiAgXCJKb3JkYW5cIixcbiAgXCJKb3JkYW5lXCIsXG4gIFwiSm9yZGlcIixcbiAgXCJKb3Jkb25cIixcbiAgXCJKb3JkeVwiLFxuICBcIkpvcmR5blwiLFxuICBcIkpvcmdlXCIsXG4gIFwiSm9zZVwiLFxuICBcIkpvc2VmYVwiLFxuICBcIkpvc2VmaW5hXCIsXG4gIFwiSm9zZXBoXCIsXG4gIFwiSm9zZXBoaW5lXCIsXG4gIFwiSm9zaFwiLFxuICBcIkpvc2h1YVwiLFxuICBcIkpvc2h1YWhcIixcbiAgXCJKb3NpYWhcIixcbiAgXCJKb3NpYW5lXCIsXG4gIFwiSm9zaWFubmVcIixcbiAgXCJKb3NpZVwiLFxuICBcIkpvc3VlXCIsXG4gIFwiSm92YW5cIixcbiAgXCJKb3ZhbmlcIixcbiAgXCJKb3Zhbm55XCIsXG4gIFwiSm92YW55XCIsXG4gIFwiSm95XCIsXG4gIFwiSm95Y2VcIixcbiAgXCJKdWFuYVwiLFxuICBcIkp1YW5pdGFcIixcbiAgXCJKdWRhaFwiLFxuICBcIkp1ZGRcIixcbiAgXCJKdWRlXCIsXG4gIFwiSnVkZ2VcIixcbiAgXCJKdWRzb25cIixcbiAgXCJKdWR5XCIsXG4gIFwiSnVsZXNcIixcbiAgXCJKdWxpYVwiLFxuICBcIkp1bGlhblwiLFxuICBcIkp1bGlhbmFcIixcbiAgXCJKdWxpYW5uZVwiLFxuICBcIkp1bGllXCIsXG4gIFwiSnVsaWVuXCIsXG4gIFwiSnVsaWV0XCIsXG4gIFwiSnVsaW9cIixcbiAgXCJKdWxpdXNcIixcbiAgXCJKdW5lXCIsXG4gIFwiSnVuaW9yXCIsXG4gIFwiSnVuaXVzXCIsXG4gIFwiSnVzdGVuXCIsXG4gIFwiSnVzdGljZVwiLFxuICBcIkp1c3RpbmFcIixcbiAgXCJKdXN0aW5lXCIsXG4gIFwiSnVzdG9uXCIsXG4gIFwiSnVzdHVzXCIsXG4gIFwiSnVzdHluXCIsXG4gIFwiSnV2ZW5hbFwiLFxuICBcIkp1d2FuXCIsXG4gIFwiS2FjZXlcIixcbiAgXCJLYWNpXCIsXG4gIFwiS2FjaWVcIixcbiAgXCJLYWRlXCIsXG4gIFwiS2FkZW5cIixcbiAgXCJLYWRpblwiLFxuICBcIkthZWxhXCIsXG4gIFwiS2FlbHluXCIsXG4gIFwiS2FpYVwiLFxuICBcIkthaWxlZVwiLFxuICBcIkthaWxleVwiLFxuICBcIkthaWx5blwiLFxuICBcIkthaXRsaW5cIixcbiAgXCJLYWl0bHluXCIsXG4gIFwiS2FsZVwiLFxuICBcIkthbGViXCIsXG4gIFwiS2FsZWlnaFwiLFxuICBcIkthbGV5XCIsXG4gIFwiS2FsaVwiLFxuICBcIkthbGxpZVwiLFxuICBcIkthbWVyb25cIixcbiAgXCJLYW1pbGxlXCIsXG4gIFwiS2FtcmVuXCIsXG4gIFwiS2Ftcm9uXCIsXG4gIFwiS2FtcnluXCIsXG4gIFwiS2FuZVwiLFxuICBcIkthcmFcIixcbiAgXCJLYXJlZW1cIixcbiAgXCJLYXJlbGxlXCIsXG4gIFwiS2FyZW5cIixcbiAgXCJLYXJpXCIsXG4gIFwiS2FyaWFuZVwiLFxuICBcIkthcmlhbm5lXCIsXG4gIFwiS2FyaW5hXCIsXG4gIFwiS2FyaW5lXCIsXG4gIFwiS2FybFwiLFxuICBcIkthcmxlZVwiLFxuICBcIkthcmxleVwiLFxuICBcIkthcmxpXCIsXG4gIFwiS2FybGllXCIsXG4gIFwiS2Fyb2xhbm5cIixcbiAgXCJLYXJzb25cIixcbiAgXCJLYXNhbmRyYVwiLFxuICBcIkthc2V5XCIsXG4gIFwiS2Fzc2FuZHJhXCIsXG4gIFwiS2F0YXJpbmFcIixcbiAgXCJLYXRlbGluXCIsXG4gIFwiS2F0ZWx5blwiLFxuICBcIkthdGVseW5uXCIsXG4gIFwiS2F0aGFyaW5hXCIsXG4gIFwiS2F0aGVyaW5lXCIsXG4gIFwiS2F0aGVyeW5cIixcbiAgXCJLYXRobGVlblwiLFxuICBcIkthdGhseW5cIixcbiAgXCJLYXRocnluXCIsXG4gIFwiS2F0aHJ5bmVcIixcbiAgXCJLYXRseW5cIixcbiAgXCJLYXRseW5uXCIsXG4gIFwiS2F0cmluYVwiLFxuICBcIkthdHJpbmVcIixcbiAgXCJLYXR0aWVcIixcbiAgXCJLYXZvblwiLFxuICBcIktheVwiLFxuICBcIktheWFcIixcbiAgXCJLYXljZWVcIixcbiAgXCJLYXlkZW5cIixcbiAgXCJLYXlsYVwiLFxuICBcIktheWxhaFwiLFxuICBcIktheWxlZVwiLFxuICBcIktheWxlaWdoXCIsXG4gIFwiS2F5bGV5XCIsXG4gIFwiS2F5bGlcIixcbiAgXCJLYXlsaWVcIixcbiAgXCJLYXlsaW5cIixcbiAgXCJLZWFnYW5cIixcbiAgXCJLZWFudVwiLFxuICBcIktlYXJhXCIsXG4gIFwiS2VhdG9uXCIsXG4gIFwiS2VlZ2FuXCIsXG4gIFwiS2VlbGV5XCIsXG4gIFwiS2VlbHlcIixcbiAgXCJLZWVuYW5cIixcbiAgXCJLZWlyYVwiLFxuICBcIktlaXRoXCIsXG4gIFwiS2VsbGVuXCIsXG4gIFwiS2VsbGV5XCIsXG4gIFwiS2VsbGlcIixcbiAgXCJLZWxsaWVcIixcbiAgXCJLZWxseVwiLFxuICBcIktlbHNpXCIsXG4gIFwiS2Vsc2llXCIsXG4gIFwiS2VsdG9uXCIsXG4gIFwiS2VsdmluXCIsXG4gIFwiS2VuXCIsXG4gIFwiS2VuZGFsbFwiLFxuICBcIktlbmRyYVwiLFxuICBcIktlbmRyaWNrXCIsXG4gIFwiS2VubmFcIixcbiAgXCJLZW5uZWRpXCIsXG4gIFwiS2VubmVkeVwiLFxuICBcIktlbm5ldGhcIixcbiAgXCJLZW5uaXRoXCIsXG4gIFwiS2VubnlcIixcbiAgXCJLZW50b25cIixcbiAgXCJLZW55YVwiLFxuICBcIktlbnlhdHRhXCIsXG4gIFwiS2VueW9uXCIsXG4gIFwiS2VvblwiLFxuICBcIktlc2hhdW5cIixcbiAgXCJLZXNoYXduXCIsXG4gIFwiS2V2ZW5cIixcbiAgXCJLZXZpblwiLFxuICBcIktldm9uXCIsXG4gIFwiS2V5b25cIixcbiAgXCJLZXlzaGF3blwiLFxuICBcIktoYWxpZFwiLFxuICBcIktoYWxpbFwiLFxuICBcIktpYW5cIixcbiAgXCJLaWFuYVwiLFxuICBcIktpYW5uYVwiLFxuICBcIktpYXJhXCIsXG4gIFwiS2lhcnJhXCIsXG4gIFwiS2llbFwiLFxuICBcIktpZXJhXCIsXG4gIFwiS2llcmFuXCIsXG4gIFwiS2lsZXlcIixcbiAgXCJLaW1cIixcbiAgXCJLaW1iZXJseVwiLFxuICBcIktpbmdcIixcbiAgXCJLaXBcIixcbiAgXCJLaXJhXCIsXG4gIFwiS2lya1wiLFxuICBcIktpcnN0ZW5cIixcbiAgXCJLaXJzdGluXCIsXG4gIFwiS2l0dHlcIixcbiAgXCJLb2JlXCIsXG4gIFwiS29ieVwiLFxuICBcIktvZHlcIixcbiAgXCJLb2xieVwiLFxuICBcIktvbGVcIixcbiAgXCJLb3JiaW5cIixcbiAgXCJLb3JleVwiLFxuICBcIktvcnlcIixcbiAgXCJLcmFpZ1wiLFxuICBcIktyaXNcIixcbiAgXCJLcmlzdGFcIixcbiAgXCJLcmlzdGlhblwiLFxuICBcIktyaXN0aW5cIixcbiAgXCJLcmlzdGluYVwiLFxuICBcIktyaXN0b2ZlclwiLFxuICBcIktyaXN0b2ZmZXJcIixcbiAgXCJLcmlzdG9waGVyXCIsXG4gIFwiS3Jpc3R5XCIsXG4gIFwiS3J5c3RhbFwiLFxuICBcIktyeXN0ZWxcIixcbiAgXCJLcnlzdGluYVwiLFxuICBcIkt1cnRcIixcbiAgXCJLdXJ0aXNcIixcbiAgXCJLeWxhXCIsXG4gIFwiS3lsZVwiLFxuICBcIkt5bGVlXCIsXG4gIFwiS3lsZWlnaFwiLFxuICBcIkt5bGVyXCIsXG4gIFwiS3lsaWVcIixcbiAgXCJLeXJhXCIsXG4gIFwiTGFjZXlcIixcbiAgXCJMYWN5XCIsXG4gIFwiTGFkYXJpdXNcIixcbiAgXCJMYWZheWV0dGVcIixcbiAgXCJMYWlsYVwiLFxuICBcIkxhaXNoYVwiLFxuICBcIkxhbWFyXCIsXG4gIFwiTGFtYmVydFwiLFxuICBcIkxhbW9udFwiLFxuICBcIkxhbmNlXCIsXG4gIFwiTGFuZGVuXCIsXG4gIFwiTGFuZVwiLFxuICBcIkxhbmV5XCIsXG4gIFwiTGFyaXNzYVwiLFxuICBcIkxhcm9uXCIsXG4gIFwiTGFycnlcIixcbiAgXCJMYXJ1ZVwiLFxuICBcIkxhdXJhXCIsXG4gIFwiTGF1cmVsXCIsXG4gIFwiTGF1cmVuXCIsXG4gIFwiTGF1cmVuY2VcIixcbiAgXCJMYXVyZXR0YVwiLFxuICBcIkxhdXJpYW5lXCIsXG4gIFwiTGF1cmlhbm5lXCIsXG4gIFwiTGF1cmllXCIsXG4gIFwiTGF1cmluZVwiLFxuICBcIkxhdXJ5XCIsXG4gIFwiTGF1cnluXCIsXG4gIFwiTGF2YWRhXCIsXG4gIFwiTGF2ZXJuXCIsXG4gIFwiTGF2ZXJuYVwiLFxuICBcIkxhdmVybmVcIixcbiAgXCJMYXZpbmFcIixcbiAgXCJMYXZpbmlhXCIsXG4gIFwiTGF2b25cIixcbiAgXCJMYXZvbm5lXCIsXG4gIFwiTGF3cmVuY2VcIixcbiAgXCJMYXdzb25cIixcbiAgXCJMYXlsYVwiLFxuICBcIkxheW5lXCIsXG4gIFwiTGF6YXJvXCIsXG4gIFwiTGVhXCIsXG4gIFwiTGVhbm5cIixcbiAgXCJMZWFubmFcIixcbiAgXCJMZWFubmVcIixcbiAgXCJMZWF0aGFcIixcbiAgXCJMZWRhXCIsXG4gIFwiTGVlXCIsXG4gIFwiTGVpZlwiLFxuICBcIkxlaWxhXCIsXG4gIFwiTGVpbGFuaVwiLFxuICBcIkxlbGFcIixcbiAgXCJMZWxhaFwiLFxuICBcIkxlbGFuZFwiLFxuICBcIkxlbGlhXCIsXG4gIFwiTGVtcGlcIixcbiAgXCJMZW11ZWxcIixcbiAgXCJMZW5uYVwiLFxuICBcIkxlbm5pZVwiLFxuICBcIkxlbm55XCIsXG4gIFwiTGVub3JhXCIsXG4gIFwiTGVub3JlXCIsXG4gIFwiTGVvXCIsXG4gIFwiTGVvbGFcIixcbiAgXCJMZW9uXCIsXG4gIFwiTGVvbmFyZFwiLFxuICBcIkxlb25hcmRvXCIsXG4gIFwiTGVvbmVcIixcbiAgXCJMZW9uZWxcIixcbiAgXCJMZW9uaWVcIixcbiAgXCJMZW9ub3JcIixcbiAgXCJMZW9ub3JhXCIsXG4gIFwiTGVvcG9sZFwiLFxuICBcIkxlb3BvbGRvXCIsXG4gIFwiTGVvcmFcIixcbiAgXCJMZXJhXCIsXG4gIFwiTGVzbGV5XCIsXG4gIFwiTGVzbGllXCIsXG4gIFwiTGVzbHlcIixcbiAgXCJMZXNzaWVcIixcbiAgXCJMZXN0ZXJcIixcbiAgXCJMZXRhXCIsXG4gIFwiTGV0aGFcIixcbiAgXCJMZXRpdGlhXCIsXG4gIFwiTGV2aVwiLFxuICBcIkxld1wiLFxuICBcIkxld2lzXCIsXG4gIFwiTGV4aVwiLFxuICBcIkxleGllXCIsXG4gIFwiTGV4dXNcIixcbiAgXCJMaWFcIixcbiAgXCJMaWFtXCIsXG4gIFwiTGlhbmFcIixcbiAgXCJMaWJiaWVcIixcbiAgXCJMaWJieVwiLFxuICBcIkxpbGFcIixcbiAgXCJMaWxpYW5cIixcbiAgXCJMaWxpYW5hXCIsXG4gIFwiTGlsaWFuZVwiLFxuICBcIkxpbGxhXCIsXG4gIFwiTGlsbGlhblwiLFxuICBcIkxpbGxpYW5hXCIsXG4gIFwiTGlsbGllXCIsXG4gIFwiTGlsbHlcIixcbiAgXCJMaWx5XCIsXG4gIFwiTGlseWFuXCIsXG4gIFwiTGluYVwiLFxuICBcIkxpbmNvbG5cIixcbiAgXCJMaW5kYVwiLFxuICBcIkxpbmRzYXlcIixcbiAgXCJMaW5kc2V5XCIsXG4gIFwiTGlubmVhXCIsXG4gIFwiTGlubmllXCIsXG4gIFwiTGlud29vZFwiLFxuICBcIkxpb25lbFwiLFxuICBcIkxpc2FcIixcbiAgXCJMaXNhbmRyb1wiLFxuICBcIkxpc2V0dGVcIixcbiAgXCJMaXR6eVwiLFxuICBcIkxpemFcIixcbiAgXCJMaXpldGhcIixcbiAgXCJMaXp6aWVcIixcbiAgXCJMbGV3ZWxseW5cIixcbiAgXCJMbG95ZFwiLFxuICBcIkxvZ2FuXCIsXG4gIFwiTG9pc1wiLFxuICBcIkxvbGFcIixcbiAgXCJMb2xpdGFcIixcbiAgXCJMb21hXCIsXG4gIFwiTG9uXCIsXG4gIFwiTG9uZG9uXCIsXG4gIFwiTG9uaWVcIixcbiAgXCJMb25uaWVcIixcbiAgXCJMb25ueVwiLFxuICBcIkxvbnpvXCIsXG4gIFwiTG9yYVwiLFxuICBcIkxvcmFpbmVcIixcbiAgXCJMb3JlblwiLFxuICBcIkxvcmVuYVwiLFxuICBcIkxvcmVuelwiLFxuICBcIkxvcmVuemFcIixcbiAgXCJMb3JlbnpvXCIsXG4gIFwiTG9yaVwiLFxuICBcIkxvcmluZVwiLFxuICBcIkxvcm5hXCIsXG4gIFwiTG90dGllXCIsXG4gIFwiTG91XCIsXG4gIFwiTG91aWVcIixcbiAgXCJMb3Vpc2FcIixcbiAgXCJMb3VyZGVzXCIsXG4gIFwiTG91dmVuaWFcIixcbiAgXCJMb3dlbGxcIixcbiAgXCJMb3lcIixcbiAgXCJMb3lhbFwiLFxuICBcIkxveWNlXCIsXG4gIFwiTHVjYXNcIixcbiAgXCJMdWNpYW5vXCIsXG4gIFwiTHVjaWVcIixcbiAgXCJMdWNpZW5uZVwiLFxuICBcIkx1Y2lsZVwiLFxuICBcIkx1Y2luZGFcIixcbiAgXCJMdWNpb1wiLFxuICBcIkx1Y2lvdXNcIixcbiAgXCJMdWNpdXNcIixcbiAgXCJMdWN5XCIsXG4gIFwiTHVkaWVcIixcbiAgXCJMdWR3aWdcIixcbiAgXCJMdWVcIixcbiAgXCJMdWVsbGFcIixcbiAgXCJMdWlnaVwiLFxuICBcIkx1aXNcIixcbiAgXCJMdWlzYVwiLFxuICBcIkx1a2FzXCIsXG4gIFwiTHVsYVwiLFxuICBcIkx1bHVcIixcbiAgXCJMdW5hXCIsXG4gIFwiTHVwZVwiLFxuICBcIkx1cmFcIixcbiAgXCJMdXJsaW5lXCIsXG4gIFwiTHV0aGVyXCIsXG4gIFwiTHV6XCIsXG4gIFwiTHlkYVwiLFxuICBcIkx5ZGlhXCIsXG4gIFwiTHlsYVwiLFxuICBcIkx5bm5cIixcbiAgXCJMeXJpY1wiLFxuICBcIkx5c2FubmVcIixcbiAgXCJNYWJlbFwiLFxuICBcIk1hYmVsbGVcIixcbiAgXCJNYWJsZVwiLFxuICBcIk1hY1wiLFxuICBcIk1hY2V5XCIsXG4gIFwiTWFjaVwiLFxuICBcIk1hY2llXCIsXG4gIFwiTWFja1wiLFxuICBcIk1hY2tlbnppZVwiLFxuICBcIk1hY3lcIixcbiAgXCJNYWRhbGluZVwiLFxuICBcIk1hZGFseW5cIixcbiAgXCJNYWRkaXNvblwiLFxuICBcIk1hZGVsaW5lXCIsXG4gIFwiTWFkZWx5blwiLFxuICBcIk1hZGVseW5uXCIsXG4gIFwiTWFkZ2VcIixcbiAgXCJNYWRpZVwiLFxuICBcIk1hZGlseW5cIixcbiAgXCJNYWRpc2VuXCIsXG4gIFwiTWFkaXNvblwiLFxuICBcIk1hZGlzeW5cIixcbiAgXCJNYWRvbm5hXCIsXG4gIFwiTWFkeXNvblwiLFxuICBcIk1hZVwiLFxuICBcIk1hZWdhblwiLFxuICBcIk1hZXZlXCIsXG4gIFwiTWFmYWxkYVwiLFxuICBcIk1hZ2FsaVwiLFxuICBcIk1hZ2RhbGVuXCIsXG4gIFwiTWFnZGFsZW5hXCIsXG4gIFwiTWFnZ2llXCIsXG4gIFwiTWFnbm9saWFcIixcbiAgXCJNYWdudXNcIixcbiAgXCJNYWlhXCIsXG4gIFwiTWFpZGFcIixcbiAgXCJNYWl5YVwiLFxuICBcIk1ham9yXCIsXG4gIFwiTWFrYXlsYVwiLFxuICBcIk1ha2VubmFcIixcbiAgXCJNYWtlbnppZVwiLFxuICBcIk1hbGFjaGlcIixcbiAgXCJNYWxjb2xtXCIsXG4gIFwiTWFsaWthXCIsXG4gIFwiTWFsaW5kYVwiLFxuICBcIk1hbGxpZVwiLFxuICBcIk1hbGxvcnlcIixcbiAgXCJNYWx2aW5hXCIsXG4gIFwiTWFuZHlcIixcbiAgXCJNYW5sZXlcIixcbiAgXCJNYW51ZWxcIixcbiAgXCJNYW51ZWxhXCIsXG4gIFwiTWFyYVwiLFxuICBcIk1hcmNcIixcbiAgXCJNYXJjZWxcIixcbiAgXCJNYXJjZWxpbmFcIixcbiAgXCJNYXJjZWxpbm9cIixcbiAgXCJNYXJjZWxsYVwiLFxuICBcIk1hcmNlbGxlXCIsXG4gIFwiTWFyY2VsbHVzXCIsXG4gIFwiTWFyY2Vsb1wiLFxuICBcIk1hcmNpYVwiLFxuICBcIk1hcmNvXCIsXG4gIFwiTWFyY29zXCIsXG4gIFwiTWFyY3VzXCIsXG4gIFwiTWFyZ2FyZXRcIixcbiAgXCJNYXJnYXJldGVcIixcbiAgXCJNYXJnYXJldHRcIixcbiAgXCJNYXJnYXJldHRhXCIsXG4gIFwiTWFyZ2FyZXR0ZVwiLFxuICBcIk1hcmdhcml0YVwiLFxuICBcIk1hcmdlXCIsXG4gIFwiTWFyZ2llXCIsXG4gIFwiTWFyZ290XCIsXG4gIFwiTWFyZ3JldFwiLFxuICBcIk1hcmd1ZXJpdGVcIixcbiAgXCJNYXJpYVwiLFxuICBcIk1hcmlhaFwiLFxuICBcIk1hcmlhbVwiLFxuICBcIk1hcmlhblwiLFxuICBcIk1hcmlhbmFcIixcbiAgXCJNYXJpYW5lXCIsXG4gIFwiTWFyaWFubmFcIixcbiAgXCJNYXJpYW5uZVwiLFxuICBcIk1hcmlhbm9cIixcbiAgXCJNYXJpYmVsXCIsXG4gIFwiTWFyaWVcIixcbiAgXCJNYXJpZWxhXCIsXG4gIFwiTWFyaWVsbGVcIixcbiAgXCJNYXJpZXR0YVwiLFxuICBcIk1hcmlsaWVcIixcbiAgXCJNYXJpbG91XCIsXG4gIFwiTWFyaWx5bmVcIixcbiAgXCJNYXJpbmFcIixcbiAgXCJNYXJpb1wiLFxuICBcIk1hcmlvblwiLFxuICBcIk1hcmlzYVwiLFxuICBcIk1hcmlzb2xcIixcbiAgXCJNYXJpdHphXCIsXG4gIFwiTWFyam9sYWluZVwiLFxuICBcIk1hcmpvcmllXCIsXG4gIFwiTWFyam9yeVwiLFxuICBcIk1hcmtcIixcbiAgXCJNYXJrdXNcIixcbiAgXCJNYXJsZWVcIixcbiAgXCJNYXJsZW5cIixcbiAgXCJNYXJsZW5lXCIsXG4gIFwiTWFybGV5XCIsXG4gIFwiTWFybGluXCIsXG4gIFwiTWFybG9uXCIsXG4gIFwiTWFycXVlc1wiLFxuICBcIk1hcnF1aXNcIixcbiAgXCJNYXJxdWlzZVwiLFxuICBcIk1hcnNoYWxsXCIsXG4gIFwiTWFydGFcIixcbiAgXCJNYXJ0aW5cIixcbiAgXCJNYXJ0aW5hXCIsXG4gIFwiTWFydGluZVwiLFxuICBcIk1hcnR5XCIsXG4gIFwiTWFydmluXCIsXG4gIFwiTWFyeVwiLFxuICBcIk1hcnlhbVwiLFxuICBcIk1hcnlqYW5lXCIsXG4gIFwiTWFyeXNlXCIsXG4gIFwiTWFzb25cIixcbiAgXCJNYXRlb1wiLFxuICBcIk1hdGhld1wiLFxuICBcIk1hdGhpYXNcIixcbiAgXCJNYXRoaWxkZVwiLFxuICBcIk1hdGlsZGFcIixcbiAgXCJNYXRpbGRlXCIsXG4gIFwiTWF0dFwiLFxuICBcIk1hdHRlb1wiLFxuICBcIk1hdHRpZVwiLFxuICBcIk1hdWRcIixcbiAgXCJNYXVkZVwiLFxuICBcIk1hdWRpZVwiLFxuICBcIk1hdXJlZW5cIixcbiAgXCJNYXVyaWNlXCIsXG4gIFwiTWF1cmljaW9cIixcbiAgXCJNYXVyaW5lXCIsXG4gIFwiTWF2ZXJpY2tcIixcbiAgXCJNYXZpc1wiLFxuICBcIk1heFwiLFxuICBcIk1heGllXCIsXG4gIFwiTWF4aW1lXCIsXG4gIFwiTWF4aW1pbGlhblwiLFxuICBcIk1heGltaWxsaWFcIixcbiAgXCJNYXhpbWlsbGlhblwiLFxuICBcIk1heGltb1wiLFxuICBcIk1heGltdXNcIixcbiAgXCJNYXhpbmVcIixcbiAgXCJNYXh3ZWxsXCIsXG4gIFwiTWF5XCIsXG4gIFwiTWF5YVwiLFxuICBcIk1heWJlbGxcIixcbiAgXCJNYXliZWxsZVwiLFxuICBcIk1heWVcIixcbiAgXCJNYXltaWVcIixcbiAgXCJNYXluYXJkXCIsXG4gIFwiTWF5cmFcIixcbiAgXCJNYXppZVwiLFxuICBcIk1ja2F5bGFcIixcbiAgXCJNY2tlbm5hXCIsXG4gIFwiTWNrZW56aWVcIixcbiAgXCJNZWFnYW5cIixcbiAgXCJNZWFnaGFuXCIsXG4gIFwiTWVkYVwiLFxuICBcIk1lZ2FuZVwiLFxuICBcIk1lZ2dpZVwiLFxuICBcIk1lZ2hhblwiLFxuICBcIk1la2hpXCIsXG4gIFwiTWVsYW55XCIsXG4gIFwiTWVsYmFcIixcbiAgXCJNZWxpc2FcIixcbiAgXCJNZWxpc3NhXCIsXG4gIFwiTWVsbGllXCIsXG4gIFwiTWVsb2R5XCIsXG4gIFwiTWVsdmluXCIsXG4gIFwiTWVsdmluYVwiLFxuICBcIk1lbHluYVwiLFxuICBcIk1lbHlzc2FcIixcbiAgXCJNZXJjZWRlc1wiLFxuICBcIk1lcmVkaXRoXCIsXG4gIFwiTWVybFwiLFxuICBcIk1lcmxlXCIsXG4gIFwiTWVybGluXCIsXG4gIFwiTWVycml0dFwiLFxuICBcIk1lcnRpZVwiLFxuICBcIk1lcnZpblwiLFxuICBcIk1ldGFcIixcbiAgXCJNaWFcIixcbiAgXCJNaWNhZWxhXCIsXG4gIFwiTWljYWhcIixcbiAgXCJNaWNoYWVsXCIsXG4gIFwiTWljaGFlbGFcIixcbiAgXCJNaWNoYWxlXCIsXG4gIFwiTWljaGVhbFwiLFxuICBcIk1pY2hlbFwiLFxuICBcIk1pY2hlbGVcIixcbiAgXCJNaWNoZWxsZVwiLFxuICBcIk1pZ3VlbFwiLFxuICBcIk1pa2F5bGFcIixcbiAgXCJNaWtlXCIsXG4gIFwiTWlrZWxcIixcbiAgXCJNaWxhblwiLFxuICBcIk1pbGVzXCIsXG4gIFwiTWlsZm9yZFwiLFxuICBcIk1pbGxlclwiLFxuICBcIk1pbGxpZVwiLFxuICBcIk1pbG9cIixcbiAgXCJNaWx0b25cIixcbiAgXCJNaW5hXCIsXG4gIFwiTWluZXJ2YVwiLFxuICBcIk1pbm5pZVwiLFxuICBcIk1pcmFjbGVcIixcbiAgXCJNaXJlaWxsZVwiLFxuICBcIk1pcmV5YVwiLFxuICBcIk1pc2FlbFwiLFxuICBcIk1pc3NvdXJpXCIsXG4gIFwiTWlzdHlcIixcbiAgXCJNaXRjaGVsXCIsXG4gIFwiTWl0Y2hlbGxcIixcbiAgXCJNaXR0aWVcIixcbiAgXCJNb2Rlc3RhXCIsXG4gIFwiTW9kZXN0b1wiLFxuICBcIk1vaGFtZWRcIixcbiAgXCJNb2hhbW1hZFwiLFxuICBcIk1vaGFtbWVkXCIsXG4gIFwiTW9pc2VzXCIsXG4gIFwiTW9sbGllXCIsXG4gIFwiTW9sbHlcIixcbiAgXCJNb25hXCIsXG4gIFwiTW9uaWNhXCIsXG4gIFwiTW9uaXF1ZVwiLFxuICBcIk1vbnJvZVwiLFxuICBcIk1vbnNlcnJhdFwiLFxuICBcIk1vbnNlcnJhdGVcIixcbiAgXCJNb250YW5hXCIsXG4gIFwiTW9udGVcIixcbiAgXCJNb250eVwiLFxuICBcIk1vcmdhblwiLFxuICBcIk1vcmlhaFwiLFxuICBcIk1vcnJpc1wiLFxuICBcIk1vcnRpbWVyXCIsXG4gIFwiTW9ydG9uXCIsXG4gIFwiTW9zZVwiLFxuICBcIk1vc2VzXCIsXG4gIFwiTW9zaGVcIixcbiAgXCJNb3NzaWVcIixcbiAgXCJNb3plbGxcIixcbiAgXCJNb3plbGxlXCIsXG4gIFwiTXVoYW1tYWRcIixcbiAgXCJNdXJpZWxcIixcbiAgXCJNdXJsXCIsXG4gIFwiTXVycGh5XCIsXG4gIFwiTXVycmF5XCIsXG4gIFwiTXVzdGFmYVwiLFxuICBcIk15YVwiLFxuICBcIk15YWhcIixcbiAgXCJNeWxlbmVcIixcbiAgXCJNeWxlc1wiLFxuICBcIk15cmFcIixcbiAgXCJNeXJpYW1cIixcbiAgXCJNeXJsXCIsXG4gIFwiTXlybmFcIixcbiAgXCJNeXJvblwiLFxuICBcIk15cnRpY2VcIixcbiAgXCJNeXJ0aWVcIixcbiAgXCJNeXJ0aXNcIixcbiAgXCJNeXJ0bGVcIixcbiAgXCJOYWRpYVwiLFxuICBcIk5ha2lhXCIsXG4gIFwiTmFtZVwiLFxuICBcIk5hbm5pZVwiLFxuICBcIk5hb21pXCIsXG4gIFwiTmFvbWllXCIsXG4gIFwiTmFwb2xlb25cIixcbiAgXCJOYXJjaXNvXCIsXG4gIFwiTmFzaFwiLFxuICBcIk5hc2lyXCIsXG4gIFwiTmF0XCIsXG4gIFwiTmF0YWxpYVwiLFxuICBcIk5hdGFsaWVcIixcbiAgXCJOYXRhc2hhXCIsXG4gIFwiTmF0aGFuXCIsXG4gIFwiTmF0aGFuYWVsXCIsXG4gIFwiTmF0aGFuaWFsXCIsXG4gIFwiTmF0aGFuaWVsXCIsXG4gIFwiTmF0aGVuXCIsXG4gIFwiTmF5ZWxpXCIsXG4gIFwiTmVhbFwiLFxuICBcIk5lZFwiLFxuICBcIk5lZHJhXCIsXG4gIFwiTmVoYVwiLFxuICBcIk5laWxcIixcbiAgXCJOZWxkYVwiLFxuICBcIk5lbGxhXCIsXG4gIFwiTmVsbGVcIixcbiAgXCJOZWxsaWVcIixcbiAgXCJOZWxzXCIsXG4gIFwiTmVsc29uXCIsXG4gIFwiTmVvbWFcIixcbiAgXCJOZXN0b3JcIixcbiAgXCJOZXR0aWVcIixcbiAgXCJOZXZhXCIsXG4gIFwiTmV3ZWxsXCIsXG4gIFwiTmV3dG9uXCIsXG4gIFwiTmlhXCIsXG4gIFwiTmljaG9sYXNcIixcbiAgXCJOaWNob2xhdXNcIixcbiAgXCJOaWNob2xlXCIsXG4gIFwiTmlja1wiLFxuICBcIk5pY2tsYXVzXCIsXG4gIFwiTmlja29sYXNcIixcbiAgXCJOaWNvXCIsXG4gIFwiTmljb2xhXCIsXG4gIFwiTmljb2xhc1wiLFxuICBcIk5pY29sZVwiLFxuICBcIk5pY29sZXR0ZVwiLFxuICBcIk5pZ2VsXCIsXG4gIFwiTmlraXRhXCIsXG4gIFwiTmlra2lcIixcbiAgXCJOaWtrb1wiLFxuICBcIk5pa29cIixcbiAgXCJOaWtvbGFzXCIsXG4gIFwiTmlsc1wiLFxuICBcIk5pbmFcIixcbiAgXCJOb2FoXCIsXG4gIFwiTm9ibGVcIixcbiAgXCJOb2VcIixcbiAgXCJOb2VsXCIsXG4gIFwiTm9lbGlhXCIsXG4gIFwiTm9lbWlcIixcbiAgXCJOb2VtaWVcIixcbiAgXCJOb2VteVwiLFxuICBcIk5vbGFcIixcbiAgXCJOb2xhblwiLFxuICBcIk5vbmFcIixcbiAgXCJOb3JhXCIsXG4gIFwiTm9yYmVydFwiLFxuICBcIk5vcmJlcnRvXCIsXG4gIFwiTm9yZW5lXCIsXG4gIFwiTm9ybWFcIixcbiAgXCJOb3JyaXNcIixcbiAgXCJOb3J2YWxcIixcbiAgXCJOb3J3b29kXCIsXG4gIFwiTm92YVwiLFxuICBcIk5vdmVsbGFcIixcbiAgXCJOeWFcIixcbiAgXCJOeWFoXCIsXG4gIFwiTnlhc2lhXCIsXG4gIFwiT2JpZVwiLFxuICBcIk9jZWFuZVwiLFxuICBcIk9jaWVcIixcbiAgXCJPY3RhdmlhXCIsXG4gIFwiT2RhXCIsXG4gIFwiT2RlbGxcIixcbiAgXCJPZGVzc2FcIixcbiAgXCJPZGllXCIsXG4gIFwiT2ZlbGlhXCIsXG4gIFwiT2tleVwiLFxuICBcIk9sYVwiLFxuICBcIk9sYWZcIixcbiAgXCJPbGVcIixcbiAgXCJPbGVuXCIsXG4gIFwiT2xldGFcIixcbiAgXCJPbGdhXCIsXG4gIFwiT2xpblwiLFxuICBcIk9saXZlclwiLFxuICBcIk9sbGllXCIsXG4gIFwiT21hXCIsXG4gIFwiT21hcmlcIixcbiAgXCJPbWVyXCIsXG4gIFwiT25hXCIsXG4gIFwiT25pZVwiLFxuICBcIk9wYWxcIixcbiAgXCJPcGhlbGlhXCIsXG4gIFwiT3JhXCIsXG4gIFwiT3JhbFwiLFxuICBcIk9yYW5cIixcbiAgXCJPcmVuXCIsXG4gIFwiT3JpZVwiLFxuICBcIk9yaW5cIixcbiAgXCJPcmlvblwiLFxuICBcIk9ybGFuZFwiLFxuICBcIk9ybGFuZG9cIixcbiAgXCJPcmxvXCIsXG4gIFwiT3JwaGFcIixcbiAgXCJPcnJpblwiLFxuICBcIk9ydmFsXCIsXG4gIFwiT3J2aWxsZVwiLFxuICBcIk9zYmFsZG9cIixcbiAgXCJPc2Jvcm5lXCIsXG4gIFwiT3NjYXJcIixcbiAgXCJPc3ZhbGRvXCIsXG4gIFwiT3N3YWxkXCIsXG4gIFwiT3N3YWxkb1wiLFxuICBcIk90aGFcIixcbiAgXCJPdGhvXCIsXG4gIFwiT3RpbGlhXCIsXG4gIFwiT3Rpc1wiLFxuICBcIk90dGlsaWVcIixcbiAgXCJPdHRpc1wiLFxuICBcIk90dG9cIixcbiAgXCJPdmFcIixcbiAgXCJPd2VuXCIsXG4gIFwiT3plbGxhXCIsXG4gIFwiUGFibG9cIixcbiAgXCJQYWlnZVwiLFxuICBcIlBhbG1hXCIsXG4gIFwiUGFtZWxhXCIsXG4gIFwiUGFuc3lcIixcbiAgXCJQYW9sb1wiLFxuICBcIlBhcmlzXCIsXG4gIFwiUGFya2VyXCIsXG4gIFwiUGFzY2FsZVwiLFxuICBcIlBhc3F1YWxlXCIsXG4gIFwiUGF0XCIsXG4gIFwiUGF0aWVuY2VcIixcbiAgXCJQYXRyaWNpYVwiLFxuICBcIlBhdHJpY2tcIixcbiAgXCJQYXRzeVwiLFxuICBcIlBhdHRpZVwiLFxuICBcIlBhdWxcIixcbiAgXCJQYXVsYVwiLFxuICBcIlBhdWxpbmVcIixcbiAgXCJQYXh0b25cIixcbiAgXCJQYXl0b25cIixcbiAgXCJQZWFybFwiLFxuICBcIlBlYXJsaWVcIixcbiAgXCJQZWFybGluZVwiLFxuICBcIlBlZHJvXCIsXG4gIFwiUGVnZ2llXCIsXG4gIFwiUGVuZWxvcGVcIixcbiAgXCJQZXJjaXZhbFwiLFxuICBcIlBlcmN5XCIsXG4gIFwiUGVycnlcIixcbiAgXCJQZXRlXCIsXG4gIFwiUGV0ZXJcIixcbiAgXCJQZXRyYVwiLFxuICBcIlBleXRvblwiLFxuICBcIlBoaWxpcFwiLFxuICBcIlBob2ViZVwiLFxuICBcIlBoeWxsaXNcIixcbiAgXCJQaWVyY2VcIixcbiAgXCJQaWVycmVcIixcbiAgXCJQaWV0cm9cIixcbiAgXCJQaW5rXCIsXG4gIFwiUGlua2llXCIsXG4gIFwiUGlwZXJcIixcbiAgXCJQb2xseVwiLFxuICBcIlBvcnRlclwiLFxuICBcIlByZWNpb3VzXCIsXG4gIFwiUHJlc2xleVwiLFxuICBcIlByZXN0b25cIixcbiAgXCJQcmljZVwiLFxuICBcIlByaW5jZVwiLFxuICBcIlByaW5jZXNzXCIsXG4gIFwiUHJpc2NpbGxhXCIsXG4gIFwiUHJvdmlkZW5jaVwiLFxuICBcIlBydWRlbmNlXCIsXG4gIFwiUXVlZW5cIixcbiAgXCJRdWVlbmllXCIsXG4gIFwiUXVlbnRpblwiLFxuICBcIlF1aW5jeVwiLFxuICBcIlF1aW5uXCIsXG4gIFwiUXVpbnRlblwiLFxuICBcIlF1aW50b25cIixcbiAgXCJSYWNoYWVsXCIsXG4gIFwiUmFjaGVsXCIsXG4gIFwiUmFjaGVsbGVcIixcbiAgXCJSYWVcIixcbiAgXCJSYWVnYW5cIixcbiAgXCJSYWZhZWxcIixcbiAgXCJSYWZhZWxhXCIsXG4gIFwiUmFoZWVtXCIsXG4gIFwiUmFoc2FhblwiLFxuICBcIlJhaHVsXCIsXG4gIFwiUmFpbmFcIixcbiAgXCJSYWxlaWdoXCIsXG4gIFwiUmFscGhcIixcbiAgXCJSYW1pcm9cIixcbiAgXCJSYW1vblwiLFxuICBcIlJhbW9uYVwiLFxuICBcIlJhbmRhbFwiLFxuICBcIlJhbmRhbGxcIixcbiAgXCJSYW5kaVwiLFxuICBcIlJhbmR5XCIsXG4gIFwiUmFuc29tXCIsXG4gIFwiUmFvdWxcIixcbiAgXCJSYXBoYWVsXCIsXG4gIFwiUmFwaGFlbGxlXCIsXG4gIFwiUmFxdWVsXCIsXG4gIFwiUmFzaGFkXCIsXG4gIFwiUmFzaGF3blwiLFxuICBcIlJhc2hlZWRcIixcbiAgXCJSYXVsXCIsXG4gIFwiUmF2ZW5cIixcbiAgXCJSYXlcIixcbiAgXCJSYXltb25kXCIsXG4gIFwiUmF5bXVuZG9cIixcbiAgXCJSZWFnYW5cIixcbiAgXCJSZWFubmFcIixcbiAgXCJSZWJhXCIsXG4gIFwiUmViZWNhXCIsXG4gIFwiUmViZWNjYVwiLFxuICBcIlJlYmVrYVwiLFxuICBcIlJlYmVrYWhcIixcbiAgXCJSZWVjZVwiLFxuICBcIlJlZWRcIixcbiAgXCJSZWVzZVwiLFxuICBcIlJlZ2FuXCIsXG4gIFwiUmVnZ2llXCIsXG4gIFwiUmVnaW5hbGRcIixcbiAgXCJSZWlkXCIsXG4gIFwiUmVpbGx5XCIsXG4gIFwiUmVpbmFcIixcbiAgXCJSZWluaG9sZFwiLFxuICBcIlJlbWluZ3RvblwiLFxuICBcIlJlbmVcIixcbiAgXCJSZW5lZVwiLFxuICBcIlJlc3NpZVwiLFxuICBcIlJldGFcIixcbiAgXCJSZXRoYVwiLFxuICBcIlJldHRhXCIsXG4gIFwiUmV1YmVuXCIsXG4gIFwiUmV2YVwiLFxuICBcIlJleFwiLFxuICBcIlJleVwiLFxuICBcIlJleWVzXCIsXG4gIFwiUmV5bXVuZG9cIixcbiAgXCJSZXluYVwiLFxuICBcIlJleW5vbGRcIixcbiAgXCJSaGVhXCIsXG4gIFwiUmhldHRcIixcbiAgXCJSaGlhbm5hXCIsXG4gIFwiUmhpYW5ub25cIixcbiAgXCJSaG9kYVwiLFxuICBcIlJpY2FyZG9cIixcbiAgXCJSaWNoYXJkXCIsXG4gIFwiUmljaGllXCIsXG4gIFwiUmljaG1vbmRcIixcbiAgXCJSaWNrXCIsXG4gIFwiUmlja2V5XCIsXG4gIFwiUmlja2llXCIsXG4gIFwiUmlja3lcIixcbiAgXCJSaWNvXCIsXG4gIFwiUmlnb2JlcnRvXCIsXG4gIFwiUmlsZXlcIixcbiAgXCJSaXRhXCIsXG4gIFwiUml2ZXJcIixcbiAgXCJSb2JiXCIsXG4gIFwiUm9iYmllXCIsXG4gIFwiUm9iZXJ0XCIsXG4gIFwiUm9iZXJ0YVwiLFxuICBcIlJvYmVydG9cIixcbiAgXCJSb2JpblwiLFxuICBcIlJvYnluXCIsXG4gIFwiUm9jaW9cIixcbiAgXCJSb2NreVwiLFxuICBcIlJvZFwiLFxuICBcIlJvZGVyaWNrXCIsXG4gIFwiUm9kZ2VyXCIsXG4gIFwiUm9kb2xmb1wiLFxuICBcIlJvZHJpY2tcIixcbiAgXCJSb2RyaWdvXCIsXG4gIFwiUm9lbFwiLFxuICBcIlJvZ2VsaW9cIixcbiAgXCJSb2dlclwiLFxuICBcIlJvZ2Vyc1wiLFxuICBcIlJvbGFuZG9cIixcbiAgXCJSb2xsaW5cIixcbiAgXCJSb21hXCIsXG4gIFwiUm9tYWluZVwiLFxuICBcIlJvbWFuXCIsXG4gIFwiUm9uXCIsXG4gIFwiUm9uYWxkb1wiLFxuICBcIlJvbm55XCIsXG4gIFwiUm9vc2V2ZWx0XCIsXG4gIFwiUm9yeVwiLFxuICBcIlJvc2FcIixcbiAgXCJSb3NhbGVlXCIsXG4gIFwiUm9zYWxpYVwiLFxuICBcIlJvc2FsaW5kXCIsXG4gIFwiUm9zYWxpbmRhXCIsXG4gIFwiUm9zYWx5blwiLFxuICBcIlJvc2Ftb25kXCIsXG4gIFwiUm9zYW5uYVwiLFxuICBcIlJvc2FyaW9cIixcbiAgXCJSb3Njb2VcIixcbiAgXCJSb3NlXCIsXG4gIFwiUm9zZWxsYVwiLFxuICBcIlJvc2VseW5cIixcbiAgXCJSb3NlbWFyaWVcIixcbiAgXCJSb3NlbWFyeVwiLFxuICBcIlJvc2VuZG9cIixcbiAgXCJSb3NldHRhXCIsXG4gIFwiUm9zaWVcIixcbiAgXCJSb3NpbmFcIixcbiAgXCJSb3NseW5cIixcbiAgXCJSb3NzXCIsXG4gIFwiUm9zc2llXCIsXG4gIFwiUm93YW5cIixcbiAgXCJSb3dlbmFcIixcbiAgXCJSb3dsYW5kXCIsXG4gIFwiUm94YW5lXCIsXG4gIFwiUm94YW5uZVwiLFxuICBcIlJveVwiLFxuICBcIlJveWFsXCIsXG4gIFwiUm95Y2VcIixcbiAgXCJSb3plbGxhXCIsXG4gIFwiUnViZW5cIixcbiAgXCJSdWJpZVwiLFxuICBcIlJ1YnlcIixcbiAgXCJSdWJ5ZVwiLFxuICBcIlJ1ZG9scGhcIixcbiAgXCJSdWR5XCIsXG4gIFwiUnVwZXJ0XCIsXG4gIFwiUnVzc1wiLFxuICBcIlJ1c3NlbFwiLFxuICBcIlJ1c3NlbGxcIixcbiAgXCJSdXN0eVwiLFxuICBcIlJ1dGhcIixcbiAgXCJSdXRoZVwiLFxuICBcIlJ1dGhpZVwiLFxuICBcIlJ5YW5cIixcbiAgXCJSeWFublwiLFxuICBcIlJ5ZGVyXCIsXG4gIFwiUnlsYW5cIixcbiAgXCJSeWxlZVwiLFxuICBcIlJ5bGVpZ2hcIixcbiAgXCJSeWxleVwiLFxuICBcIlNhYmluYVwiLFxuICBcIlNhYnJpbmFcIixcbiAgXCJTYWJyeW5hXCIsXG4gIFwiU2FkaWVcIixcbiAgXCJTYWR5ZVwiLFxuICBcIlNhZ2VcIixcbiAgXCJTYWlnZVwiLFxuICBcIlNhbGxpZVwiLFxuICBcIlNhbGx5XCIsXG4gIFwiU2FsbWFcIixcbiAgXCJTYWx2YWRvclwiLFxuICBcIlNhbHZhdG9yZVwiLFxuICBcIlNhbVwiLFxuICBcIlNhbWFudGFcIixcbiAgXCJTYW1hbnRoYVwiLFxuICBcIlNhbWFyYVwiLFxuICBcIlNhbWlyXCIsXG4gIFwiU2FtbWllXCIsXG4gIFwiU2FtbXlcIixcbiAgXCJTYW1zb25cIixcbiAgXCJTYW5kcmFcIixcbiAgXCJTYW5kcmluZVwiLFxuICBcIlNhbmR5XCIsXG4gIFwiU2FuZm9yZFwiLFxuICBcIlNhbnRhXCIsXG4gIFwiU2FudGlhZ29cIixcbiAgXCJTYW50aW5hXCIsXG4gIFwiU2FudGlub1wiLFxuICBcIlNhbnRvc1wiLFxuICBcIlNhcmFoXCIsXG4gIFwiU2FyYWlcIixcbiAgXCJTYXJpbmFcIixcbiAgXCJTYXNoYVwiLFxuICBcIlNhdWxcIixcbiAgXCJTYXZhbmFoXCIsXG4gIFwiU2F2YW5uYVwiLFxuICBcIlNhdmFubmFoXCIsXG4gIFwiU2F2aW9uXCIsXG4gIFwiU2NhcmxldHRcIixcbiAgXCJTY2h1eWxlclwiLFxuICBcIlNjb3RcIixcbiAgXCJTY290dGllXCIsXG4gIFwiU2NvdHR5XCIsXG4gIFwiU2VhbXVzXCIsXG4gIFwiU2VhblwiLFxuICBcIlNlYmFzdGlhblwiLFxuICBcIlNlZHJpY2tcIixcbiAgXCJTZWxlbmFcIixcbiAgXCJTZWxpbmFcIixcbiAgXCJTZWxtZXJcIixcbiAgXCJTZXJlbmFcIixcbiAgXCJTZXJlbml0eVwiLFxuICBcIlNldGhcIixcbiAgXCJTaGFkXCIsXG4gIFwiU2hhaW5hXCIsXG4gIFwiU2hha2lyYVwiLFxuICBcIlNoYW5hXCIsXG4gIFwiU2hhbmVcIixcbiAgXCJTaGFuZWxcIixcbiAgXCJTaGFuZWxsZVwiLFxuICBcIlNoYW5pYVwiLFxuICBcIlNoYW5pZVwiLFxuICBcIlNoYW5peWFcIixcbiAgXCJTaGFubmFcIixcbiAgXCJTaGFubm9uXCIsXG4gIFwiU2hhbm55XCIsXG4gIFwiU2hhbm9uXCIsXG4gIFwiU2hhbnlcIixcbiAgXCJTaGFyb25cIixcbiAgXCJTaGF1blwiLFxuICBcIlNoYXduXCIsXG4gIFwiU2hhd25hXCIsXG4gIFwiU2hheWxlZVwiLFxuICBcIlNoYXluYVwiLFxuICBcIlNoYXluZVwiLFxuICBcIlNoZWFcIixcbiAgXCJTaGVpbGFcIixcbiAgXCJTaGVsZG9uXCIsXG4gIFwiU2hlbWFyXCIsXG4gIFwiU2hlcmlkYW5cIixcbiAgXCJTaGVybWFuXCIsXG4gIFwiU2hlcndvb2RcIixcbiAgXCJTaGlybGV5XCIsXG4gIFwiU2h5YW5uXCIsXG4gIFwiU2h5YW5uZVwiLFxuICBcIlNpYnlsXCIsXG4gIFwiU2lkXCIsXG4gIFwiU2lkbmV5XCIsXG4gIFwiU2llbm5hXCIsXG4gIFwiU2llcnJhXCIsXG4gIFwiU2lnbXVuZFwiLFxuICBcIlNpZ3JpZFwiLFxuICBcIlNpZ3VyZFwiLFxuICBcIlNpbGFzXCIsXG4gIFwiU2ltXCIsXG4gIFwiU2ltZW9uXCIsXG4gIFwiU2ltb25lXCIsXG4gIFwiU2luY2VyZVwiLFxuICBcIlNpc3RlclwiLFxuICBcIlNreWVcIixcbiAgXCJTa3lsYVwiLFxuICBcIlNreWxhclwiLFxuICBcIlNvZmlhXCIsXG4gIFwiU29sZWRhZFwiLFxuICBcIlNvbG9uXCIsXG4gIFwiU29uaWFcIixcbiAgXCJTb25ueVwiLFxuICBcIlNvbnlhXCIsXG4gIFwiU29waGlhXCIsXG4gIFwiU29waGllXCIsXG4gIFwiU3BlbmNlclwiLFxuICBcIlN0YWNleVwiLFxuICBcIlN0YWN5XCIsXG4gIFwiU3RhblwiLFxuICBcIlN0YW5mb3JkXCIsXG4gIFwiU3RhbmxleVwiLFxuICBcIlN0YW50b25cIixcbiAgXCJTdGVmYW5cIixcbiAgXCJTdGVmYW5pZVwiLFxuICBcIlN0ZWxsYVwiLFxuICBcIlN0ZXBoYW5cIixcbiAgXCJTdGVwaGFuaWFcIixcbiAgXCJTdGVwaGFuaWVcIixcbiAgXCJTdGVwaGFueVwiLFxuICBcIlN0ZXBoZW5cIixcbiAgXCJTdGVwaG9uXCIsXG4gIFwiU3RlcmxpbmdcIixcbiAgXCJTdGV2ZVwiLFxuICBcIlN0ZXZpZVwiLFxuICBcIlN0ZXdhcnRcIixcbiAgXCJTdG9uZVwiLFxuICBcIlN0dWFydFwiLFxuICBcIlN1bW1lclwiLFxuICBcIlN1bm55XCIsXG4gIFwiU3VzYW5cIixcbiAgXCJTdXNhbmFcIixcbiAgXCJTdXNhbm5hXCIsXG4gIFwiU3VzaWVcIixcbiAgXCJTdXphbm5lXCIsXG4gIFwiU3ZlblwiLFxuICBcIlN5YmxlXCIsXG4gIFwiU3lkbmVlXCIsXG4gIFwiU3lkbmV5XCIsXG4gIFwiU3lkbmlcIixcbiAgXCJTeWRuaWVcIixcbiAgXCJTeWx2YW5cIixcbiAgXCJTeWx2ZXN0ZXJcIixcbiAgXCJTeWx2aWFcIixcbiAgXCJUYWJpdGhhXCIsXG4gIFwiVGFkXCIsXG4gIFwiVGFsaWFcIixcbiAgXCJUYWxvblwiLFxuICBcIlRhbWFyYVwiLFxuICBcIlRhbWlhXCIsXG4gIFwiVGFuaWFcIixcbiAgXCJUYW5uZXJcIixcbiAgXCJUYW55YVwiLFxuICBcIlRhcmFcIixcbiAgXCJUYXJ5blwiLFxuICBcIlRhdGVcIixcbiAgXCJUYXR1bVwiLFxuICBcIlRhdHlhbmFcIixcbiAgXCJUYXVyZWFuXCIsXG4gIFwiVGF2YXJlc1wiLFxuICBcIlRheWFcIixcbiAgXCJUYXlsb3JcIixcbiAgXCJUZWFnYW5cIixcbiAgXCJUZWRcIixcbiAgXCJUZWxseVwiLFxuICBcIlRlcmVuY2VcIixcbiAgXCJUZXJlc2FcIixcbiAgXCJUZXJyYW5jZVwiLFxuICBcIlRlcnJlbGxcIixcbiAgXCJUZXJyZW5jZVwiLFxuICBcIlRlcnJpbGxcIixcbiAgXCJUZXJyeVwiLFxuICBcIlRlc3NcIixcbiAgXCJUZXNzaWVcIixcbiAgXCJUZXZpblwiLFxuICBcIlRoYWRcIixcbiAgXCJUaGFkZGV1c1wiLFxuICBcIlRoYWxpYVwiLFxuICBcIlRoZWFcIixcbiAgXCJUaGVsbWFcIixcbiAgXCJUaGVvXCIsXG4gIFwiVGhlb2RvcmFcIixcbiAgXCJUaGVvZG9yZVwiLFxuICBcIlRoZXJlc2FcIixcbiAgXCJUaGVyZXNlXCIsXG4gIFwiVGhlcmVzaWFcIixcbiAgXCJUaGVyb25cIixcbiAgXCJUaG9tYXNcIixcbiAgXCJUaG9yYVwiLFxuICBcIlRodXJtYW5cIixcbiAgXCJUaWFcIixcbiAgXCJUaWFuYVwiLFxuICBcIlRpYW5uYVwiLFxuICBcIlRpYXJhXCIsXG4gIFwiVGllcnJhXCIsXG4gIFwiVGlmZmFueVwiLFxuICBcIlRpbGxtYW5cIixcbiAgXCJUaW1tb3RoeVwiLFxuICBcIlRpbW15XCIsXG4gIFwiVGltb3RoeVwiLFxuICBcIlRpbmFcIixcbiAgXCJUaXRvXCIsXG4gIFwiVGl0dXNcIixcbiAgXCJUb2JpblwiLFxuICBcIlRvYnlcIixcbiAgXCJUb2RcIixcbiAgXCJUb21cIixcbiAgXCJUb21hc1wiLFxuICBcIlRvbWFzYVwiLFxuICBcIlRvbW1pZVwiLFxuICBcIlRvbmV5XCIsXG4gIFwiVG9uaVwiLFxuICBcIlRvbnlcIixcbiAgXCJUb3JleVwiLFxuICBcIlRvcnJhbmNlXCIsXG4gIFwiVG9ycmV5XCIsXG4gIFwiVG95XCIsXG4gIFwiVHJhY2VcIixcbiAgXCJUcmFjZXlcIixcbiAgXCJUcmFjeVwiLFxuICBcIlRyYXZpc1wiLFxuICBcIlRyYXZvblwiLFxuICBcIlRyZVwiLFxuICBcIlRyZW1haW5lXCIsXG4gIFwiVHJlbWF5bmVcIixcbiAgXCJUcmVudFwiLFxuICBcIlRyZW50b25cIixcbiAgXCJUcmVzc2FcIixcbiAgXCJUcmVzc2llXCIsXG4gIFwiVHJldmFcIixcbiAgXCJUcmV2ZXJcIixcbiAgXCJUcmV2aW9uXCIsXG4gIFwiVHJldm9yXCIsXG4gIFwiVHJleVwiLFxuICBcIlRyaW5pdHlcIixcbiAgXCJUcmlzaGFcIixcbiAgXCJUcmlzdGlhblwiLFxuICBcIlRyaXN0aW5cIixcbiAgXCJUcmlzdG9uXCIsXG4gIFwiVHJveVwiLFxuICBcIlRydWRpZVwiLFxuICBcIlRyeWNpYVwiLFxuICBcIlRyeXN0YW5cIixcbiAgXCJUdXJuZXJcIixcbiAgXCJUd2lsYVwiLFxuICBcIlR5bGVyXCIsXG4gIFwiVHlyYVwiLFxuICBcIlR5cmVlXCIsXG4gIFwiVHlyZWVrXCIsXG4gIFwiVHlyZWxcIixcbiAgXCJUeXJlbGxcIixcbiAgXCJUeXJlc2VcIixcbiAgXCJUeXJpcXVlXCIsXG4gIFwiVHlzaGF3blwiLFxuICBcIlR5c29uXCIsXG4gIFwiVWJhbGRvXCIsXG4gIFwiVWxpY2VzXCIsXG4gIFwiVWxpc2VzXCIsXG4gIFwiVW5hXCIsXG4gIFwiVW5pcXVlXCIsXG4gIFwiVXJiYW5cIixcbiAgXCJVcmlhaFwiLFxuICBcIlVyaWVsXCIsXG4gIFwiVXJzdWxhXCIsXG4gIFwiVmFkYVwiLFxuICBcIlZhbGVudGluXCIsXG4gIFwiVmFsZW50aW5hXCIsXG4gIFwiVmFsZW50aW5lXCIsXG4gIFwiVmFsZXJpZVwiLFxuICBcIlZhbGxpZVwiLFxuICBcIlZhblwiLFxuICBcIlZhbmNlXCIsXG4gIFwiVmFuZXNzYVwiLFxuICBcIlZhdWdoblwiLFxuICBcIlZlZGFcIixcbiAgXCJWZWxkYVwiLFxuICBcIlZlbGxhXCIsXG4gIFwiVmVsbWFcIixcbiAgXCJWZWx2YVwiLFxuICBcIlZlbmFcIixcbiAgXCJWZXJkYVwiLFxuICBcIlZlcmRpZVwiLFxuICBcIlZlcmdpZVwiLFxuICBcIlZlcmxhXCIsXG4gIFwiVmVybGllXCIsXG4gIFwiVmVyblwiLFxuICBcIlZlcm5hXCIsXG4gIFwiVmVybmVyXCIsXG4gIFwiVmVybmljZVwiLFxuICBcIlZlcm5pZVwiLFxuICBcIlZlcm5vblwiLFxuICBcIlZlcm9uYVwiLFxuICBcIlZlcm9uaWNhXCIsXG4gIFwiVmVzdGFcIixcbiAgXCJWaWNlbnRhXCIsXG4gIFwiVmljZW50ZVwiLFxuICBcIlZpY2tpZVwiLFxuICBcIlZpY2t5XCIsXG4gIFwiVmljdG9yXCIsXG4gIFwiVmljdG9yaWFcIixcbiAgXCJWaWRhXCIsXG4gIFwiVmlkYWxcIixcbiAgXCJWaWxtYVwiLFxuICBcIlZpbmNlXCIsXG4gIFwiVmluY2VudFwiLFxuICBcIlZpbmNlbnphXCIsXG4gIFwiVmluY2Vuem9cIixcbiAgXCJWaW5uaWVcIixcbiAgXCJWaW9sYVwiLFxuICBcIlZpb2xldFwiLFxuICBcIlZpb2xldHRlXCIsXG4gIFwiVmlyZ2llXCIsXG4gIFwiVmlyZ2lsXCIsXG4gIFwiVmlyZ2luaWFcIixcbiAgXCJWaXJnaW5pZVwiLFxuICBcIlZpdGFcIixcbiAgXCJWaXRvXCIsXG4gIFwiVml2YVwiLFxuICBcIlZpdmlhblwiLFxuICBcIlZpdmlhbmVcIixcbiAgXCJWaXZpYW5uZVwiLFxuICBcIlZpdmllblwiLFxuICBcIlZpdmllbm5lXCIsXG4gIFwiVmxhZGltaXJcIixcbiAgXCJXYWRlXCIsXG4gIFwiV2Fpbm9cIixcbiAgXCJXYWxkb1wiLFxuICBcIldhbGtlclwiLFxuICBcIldhbGxhY2VcIixcbiAgXCJXYWx0ZXJcIixcbiAgXCJXYWx0b25cIixcbiAgXCJXYW5kYVwiLFxuICBcIldhcmRcIixcbiAgXCJXYXJyZW5cIixcbiAgXCJXYXRzb25cIixcbiAgXCJXYXZhXCIsXG4gIFwiV2F5bG9uXCIsXG4gIFwiV2F5bmVcIixcbiAgXCJXZWJzdGVyXCIsXG4gIFwiV2VsZG9uXCIsXG4gIFwiV2VsbGluZ3RvblwiLFxuICBcIldlbmRlbGxcIixcbiAgXCJXZW5keVwiLFxuICBcIldlcm5lclwiLFxuICBcIldlc3RsZXlcIixcbiAgXCJXZXN0b25cIixcbiAgXCJXaGl0bmV5XCIsXG4gIFwiV2lsYmVyXCIsXG4gIFwiV2lsYmVydFwiLFxuICBcIldpbGJ1cm5cIixcbiAgXCJXaWxleVwiLFxuICBcIldpbGZvcmRcIixcbiAgXCJXaWxmcmVkXCIsXG4gIFwiV2lsZnJlZG9cIixcbiAgXCJXaWxmcmlkXCIsXG4gIFwiV2lsaGVsbVwiLFxuICBcIldpbGhlbG1pbmVcIixcbiAgXCJXaWxsXCIsXG4gIFwiV2lsbGFcIixcbiAgXCJXaWxsYXJkXCIsXG4gIFwiV2lsbGlhbVwiLFxuICBcIldpbGxpZVwiLFxuICBcIldpbGxpc1wiLFxuICBcIldpbGxvd1wiLFxuICBcIldpbGx5XCIsXG4gIFwiV2lsbWFcIixcbiAgXCJXaWxtZXJcIixcbiAgXCJXaWxzb25cIixcbiAgXCJXaWx0b25cIixcbiAgXCJXaW5maWVsZFwiLFxuICBcIldpbmlmcmVkXCIsXG4gIFwiV2lubmlmcmVkXCIsXG4gIFwiV2lub25hXCIsXG4gIFwiV2luc3RvblwiLFxuICBcIldvb2Ryb3dcIixcbiAgXCJXeWF0dFwiLFxuICBcIld5bWFuXCIsXG4gIFwiWGFuZGVyXCIsXG4gIFwiWGF2aWVyXCIsXG4gIFwiWHphdmllclwiLFxuICBcIllhZGlyYVwiLFxuICBcIllhc21lZW5cIixcbiAgXCJZYXNtaW5cIixcbiAgXCJZYXNtaW5lXCIsXG4gIFwiWWF6bWluXCIsXG4gIFwiWWVzZW5pYVwiLFxuICBcIlllc3NlbmlhXCIsXG4gIFwiWW9sYW5kYVwiLFxuICBcIllvc2hpa29cIixcbiAgXCJZdmV0dGVcIixcbiAgXCJZdm9ubmVcIixcbiAgXCJaYWNoYXJpYWhcIixcbiAgXCJaYWNoYXJ5XCIsXG4gIFwiWmFjaGVyeVwiLFxuICBcIlphY2tcIixcbiAgXCJaYWNrYXJ5XCIsXG4gIFwiWmFja2VyeVwiLFxuICBcIlpha2FyeVwiLFxuICBcIlphbmRlclwiLFxuICBcIlphbmVcIixcbiAgXCJaYXJpYVwiLFxuICBcIlplY2hhcmlhaFwiLFxuICBcIlplbGRhXCIsXG4gIFwiWmVsbGFcIixcbiAgXCJaZWxtYVwiLFxuICBcIlplbmFcIixcbiAgXCJaZXR0YVwiLFxuICBcIlppb25cIixcbiAgXCJaaXRhXCIsXG4gIFwiWm9lXCIsXG4gIFwiWm9leVwiLFxuICBcIlpvaWVcIixcbiAgXCJab2lsYVwiLFxuICBcIlpvbGFcIixcbiAgXCJab3JhXCIsXG4gIFwiWnVsYVwiXG5dO1xuIiwidmFyIG5hbWUgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gbmFtZTtcbm5hbWUuZmlyc3RfbmFtZSA9IHJlcXVpcmUoXCIuL2ZpcnN0X25hbWVcIik7XG5uYW1lLmxhc3RfbmFtZSA9IHJlcXVpcmUoXCIuL2xhc3RfbmFtZVwiKTtcbm5hbWUucHJlZml4ID0gcmVxdWlyZShcIi4vcHJlZml4XCIpO1xubmFtZS5zdWZmaXggPSByZXF1aXJlKFwiLi9zdWZmaXhcIik7XG5uYW1lLnRpdGxlID0gcmVxdWlyZShcIi4vdGl0bGVcIik7XG5uYW1lLm5hbWUgPSByZXF1aXJlKFwiLi9uYW1lXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBYmJvdHRcIixcbiAgXCJBYmVybmF0aHlcIixcbiAgXCJBYnNoaXJlXCIsXG4gIFwiQWRhbXNcIixcbiAgXCJBbHRlbndlcnRoXCIsXG4gIFwiQW5kZXJzb25cIixcbiAgXCJBbmt1bmRpbmdcIixcbiAgXCJBcm1zdHJvbmdcIixcbiAgXCJBdWVyXCIsXG4gIFwiQXVmZGVyaGFyXCIsXG4gIFwiQmFocmluZ2VyXCIsXG4gIFwiQmFpbGV5XCIsXG4gIFwiQmFsaXN0cmVyaVwiLFxuICBcIkJhcnJvd3NcIixcbiAgXCJCYXJ0ZWxsXCIsXG4gIFwiQmFydG9sZXR0aVwiLFxuICBcIkJhcnRvblwiLFxuICBcIkJhc2hpcmlhblwiLFxuICBcIkJhdHpcIixcbiAgXCJCYXVjaFwiLFxuICBcIkJhdW1iYWNoXCIsXG4gIFwiQmF5ZXJcIixcbiAgXCJCZWFoYW5cIixcbiAgXCJCZWF0dHlcIixcbiAgXCJCZWNodGVsYXJcIixcbiAgXCJCZWNrZXJcIixcbiAgXCJCZWRuYXJcIixcbiAgXCJCZWVyXCIsXG4gIFwiQmVpZXJcIixcbiAgXCJCZXJnZVwiLFxuICBcIkJlcmduYXVtXCIsXG4gIFwiQmVyZ3N0cm9tXCIsXG4gIFwiQmVybmhhcmRcIixcbiAgXCJCZXJuaWVyXCIsXG4gIFwiQmluc1wiLFxuICBcIkJsYW5kYVwiLFxuICBcIkJsaWNrXCIsXG4gIFwiQmxvY2tcIixcbiAgXCJCb2RlXCIsXG4gIFwiQm9laG1cIixcbiAgXCJCb2dhblwiLFxuICBcIkJvZ2lzaWNoXCIsXG4gIFwiQm9yZXJcIixcbiAgXCJCb3Njb1wiLFxuICBcIkJvdHNmb3JkXCIsXG4gIFwiQm95ZXJcIixcbiAgXCJCb3lsZVwiLFxuICBcIkJyYWR0a2VcIixcbiAgXCJCcmFrdXNcIixcbiAgXCJCcmF1blwiLFxuICBcIkJyZWl0ZW5iZXJnXCIsXG4gIFwiQnJla2tlXCIsXG4gIFwiQnJvd25cIixcbiAgXCJCcnVlblwiLFxuICBcIkJ1Y2tyaWRnZVwiLFxuICBcIkNhcnJvbGxcIixcbiAgXCJDYXJ0ZXJcIixcbiAgXCJDYXJ0d3JpZ2h0XCIsXG4gIFwiQ2FzcGVyXCIsXG4gIFwiQ2Fzc2luXCIsXG4gIFwiQ2hhbXBsaW5cIixcbiAgXCJDaHJpc3RpYW5zZW5cIixcbiAgXCJDb2xlXCIsXG4gIFwiQ29sbGllclwiLFxuICBcIkNvbGxpbnNcIixcbiAgXCJDb25uXCIsXG4gIFwiQ29ubmVsbHlcIixcbiAgXCJDb25yb3lcIixcbiAgXCJDb25zaWRpbmVcIixcbiAgXCJDb3JrZXJ5XCIsXG4gIFwiQ29ybWllclwiLFxuICBcIkNvcndpblwiLFxuICBcIkNyZW1pblwiLFxuICBcIkNyaXN0XCIsXG4gIFwiQ3JvbmFcIixcbiAgXCJDcm9uaW5cIixcbiAgXCJDcm9va3NcIixcbiAgXCJDcnVpY2tzaGFua1wiLFxuICBcIkN1bW1lcmF0YVwiLFxuICBcIkN1bW1pbmdzXCIsXG4gIFwiRGFjaFwiLFxuICBcIkQnQW1vcmVcIixcbiAgXCJEYW5pZWxcIixcbiAgXCJEYXJlXCIsXG4gIFwiRGF1Z2hlcnR5XCIsXG4gIFwiRGF2aXNcIixcbiAgXCJEZWNrb3dcIixcbiAgXCJEZW5lc2lrXCIsXG4gIFwiRGliYmVydFwiLFxuICBcIkRpY2tlbnNcIixcbiAgXCJEaWNraVwiLFxuICBcIkRpY2tpbnNvblwiLFxuICBcIkRpZXRyaWNoXCIsXG4gIFwiRG9ubmVsbHlcIixcbiAgXCJEb29sZXlcIixcbiAgXCJEb3VnbGFzXCIsXG4gIFwiRG95bGVcIixcbiAgXCJEdUJ1cXVlXCIsXG4gIFwiRHVyZ2FuXCIsXG4gIFwiRWJlcnRcIixcbiAgXCJFZmZlcnR6XCIsXG4gIFwiRWljaG1hbm5cIixcbiAgXCJFbWFyZFwiLFxuICBcIkVtbWVyaWNoXCIsXG4gIFwiRXJkbWFuXCIsXG4gIFwiRXJuc2VyXCIsXG4gIFwiRmFkZWxcIixcbiAgXCJGYWhleVwiLFxuICBcIkZhcnJlbGxcIixcbiAgXCJGYXlcIixcbiAgXCJGZWVuZXlcIixcbiAgXCJGZWVzdFwiLFxuICBcIkZlaWxcIixcbiAgXCJGZXJyeVwiLFxuICBcIkZpc2hlclwiLFxuICBcIkZsYXRsZXlcIixcbiAgXCJGcmFtaVwiLFxuICBcIkZyYW5lY2tpXCIsXG4gIFwiRnJpZXNlblwiLFxuICBcIkZyaXRzY2hcIixcbiAgXCJGdW5rXCIsXG4gIFwiR2F5bG9yZFwiLFxuICBcIkdlcmhvbGRcIixcbiAgXCJHZXJsYWNoXCIsXG4gIFwiR2lic29uXCIsXG4gIFwiR2lzbGFzb25cIixcbiAgXCJHbGVhc29uXCIsXG4gIFwiR2xlaWNobmVyXCIsXG4gIFwiR2xvdmVyXCIsXG4gIFwiR29sZG5lclwiLFxuICBcIkdvb2R3aW5cIixcbiAgXCJHb3JjemFueVwiLFxuICBcIkdvdHRsaWViXCIsXG4gIFwiR295ZXR0ZVwiLFxuICBcIkdyYWR5XCIsXG4gIFwiR3JhaGFtXCIsXG4gIFwiR3JhbnRcIixcbiAgXCJHcmVlblwiLFxuICBcIkdyZWVuZmVsZGVyXCIsXG4gIFwiR3JlZW5ob2x0XCIsXG4gIFwiR3JpbWVzXCIsXG4gIFwiR3VsZ293c2tpXCIsXG4gIFwiR3VzaWtvd3NraVwiLFxuICBcIkd1dGtvd3NraVwiLFxuICBcIkd1dG1hbm5cIixcbiAgXCJIYWFnXCIsXG4gIFwiSGFja2V0dFwiLFxuICBcIkhhZ2VuZXNcIixcbiAgXCJIYWhuXCIsXG4gIFwiSGFsZXlcIixcbiAgXCJIYWx2b3Jzb25cIixcbiAgXCJIYW1pbGxcIixcbiAgXCJIYW1tZXNcIixcbiAgXCJIYW5kXCIsXG4gIFwiSGFuZVwiLFxuICBcIkhhbnNlblwiLFxuICBcIkhhcmJlclwiLFxuICBcIkhhcnJpc1wiLFxuICBcIkhhcnRtYW5uXCIsXG4gIFwiSGFydmV5XCIsXG4gIFwiSGF1Y2tcIixcbiAgXCJIYXllc1wiLFxuICBcIkhlYW5leVwiLFxuICBcIkhlYXRoY290ZVwiLFxuICBcIkhlZ21hbm5cIixcbiAgXCJIZWlkZW5yZWljaFwiLFxuICBcIkhlbGxlclwiLFxuICBcIkhlcm1hblwiLFxuICBcIkhlcm1hbm5cIixcbiAgXCJIZXJtaXN0b25cIixcbiAgXCJIZXJ6b2dcIixcbiAgXCJIZXNzZWxcIixcbiAgXCJIZXR0aW5nZXJcIixcbiAgXCJIaWNrbGVcIixcbiAgXCJIaWxsbFwiLFxuICBcIkhpbGxzXCIsXG4gIFwiSGlscGVydFwiLFxuICBcIkhpbnR6XCIsXG4gIFwiSGlydGhlXCIsXG4gIFwiSG9ka2lld2ljelwiLFxuICBcIkhvZWdlclwiLFxuICBcIkhvbWVuaWNrXCIsXG4gIFwiSG9wcGVcIixcbiAgXCJIb3dlXCIsXG4gIFwiSG93ZWxsXCIsXG4gIFwiSHVkc29uXCIsXG4gIFwiSHVlbFwiLFxuICBcIkh1ZWxzXCIsXG4gIFwiSHlhdHRcIixcbiAgXCJKYWNvYmlcIixcbiAgXCJKYWNvYnNcIixcbiAgXCJKYWNvYnNvblwiLFxuICBcIkpha3Vib3dza2lcIixcbiAgXCJKYXNrb2xza2lcIixcbiAgXCJKYXN0XCIsXG4gIFwiSmVua2luc1wiLFxuICBcIkplcmRlXCIsXG4gIFwiSm9obnNcIixcbiAgXCJKb2huc29uXCIsXG4gIFwiSm9obnN0b25cIixcbiAgXCJKb25lc1wiLFxuICBcIkthc3N1bGtlXCIsXG4gIFwiS2F1dHplclwiLFxuICBcIktlZWJsZXJcIixcbiAgXCJLZWVsaW5nXCIsXG4gIFwiS2VtbWVyXCIsXG4gIFwiS2VybHVrZVwiLFxuICBcIktlcnR6bWFublwiLFxuICBcIktlc3NsZXJcIixcbiAgXCJLaWVoblwiLFxuICBcIktpaG5cIixcbiAgXCJLaWxiYWNrXCIsXG4gIFwiS2luZ1wiLFxuICBcIktpcmxpblwiLFxuICBcIktsZWluXCIsXG4gIFwiS2xpbmdcIixcbiAgXCJLbG9ja29cIixcbiAgXCJLb2NoXCIsXG4gIFwiS29lbHBpblwiLFxuICBcIktvZXBwXCIsXG4gIFwiS29obGVyXCIsXG4gIFwiS29ub3BlbHNraVwiLFxuICBcIktvc3NcIixcbiAgXCJLb3ZhY2VrXCIsXG4gIFwiS296ZXlcIixcbiAgXCJLcmFqY2lrXCIsXG4gIFwiS3JlaWdlclwiLFxuICBcIktyaXNcIixcbiAgXCJLc2hsZXJpblwiLFxuICBcIkt1YlwiLFxuICBcIkt1aGljXCIsXG4gIFwiS3VobG1hblwiLFxuICBcIkt1aG5cIixcbiAgXCJLdWxhc1wiLFxuICBcIkt1bmRlXCIsXG4gIFwiS3VuemVcIixcbiAgXCJLdXBoYWxcIixcbiAgXCJLdXRjaFwiLFxuICBcIkt1dmFsaXNcIixcbiAgXCJMYWJhZGllXCIsXG4gIFwiTGFraW5cIixcbiAgXCJMYW5nXCIsXG4gIFwiTGFuZ29zaFwiLFxuICBcIkxhbmd3b3J0aFwiLFxuICBcIkxhcmtpblwiLFxuICBcIkxhcnNvblwiLFxuICBcIkxlYW5ub25cIixcbiAgXCJMZWJzYWNrXCIsXG4gIFwiTGVkbmVyXCIsXG4gIFwiTGVmZmxlclwiLFxuICBcIkxlZ3Jvc1wiLFxuICBcIkxlaG5lclwiLFxuICBcIkxlbWtlXCIsXG4gIFwiTGVzY2hcIixcbiAgXCJMZXVzY2hrZVwiLFxuICBcIkxpbmRcIixcbiAgXCJMaW5kZ3JlblwiLFxuICBcIkxpdHRlbFwiLFxuICBcIkxpdHRsZVwiLFxuICBcIkxvY2ttYW5cIixcbiAgXCJMb3dlXCIsXG4gIFwiTHVib3dpdHpcIixcbiAgXCJMdWVpbHdpdHpcIixcbiAgXCJMdWV0dGdlblwiLFxuICBcIkx5bmNoXCIsXG4gIFwiTWFjZWprb3ZpY1wiLFxuICBcIk1hY0d5dmVyXCIsXG4gIFwiTWFnZ2lvXCIsXG4gIFwiTWFublwiLFxuICBcIk1hbnRlXCIsXG4gIFwiTWFya3NcIixcbiAgXCJNYXJxdWFyZHRcIixcbiAgXCJNYXJ2aW5cIixcbiAgXCJNYXllclwiLFxuICBcIk1heWVydFwiLFxuICBcIk1jQ2x1cmVcIixcbiAgXCJNY0N1bGxvdWdoXCIsXG4gIFwiTWNEZXJtb3R0XCIsXG4gIFwiTWNHbHlublwiLFxuICBcIk1jS2VuemllXCIsXG4gIFwiTWNMYXVnaGxpblwiLFxuICBcIk1lZGh1cnN0XCIsXG4gIFwiTWVydHpcIixcbiAgXCJNZXR6XCIsXG4gIFwiTWlsbGVyXCIsXG4gIFwiTWlsbHNcIixcbiAgXCJNaXRjaGVsbFwiLFxuICBcIk1vZW5cIixcbiAgXCJNb2hyXCIsXG4gIFwiTW9uYWhhblwiLFxuICBcIk1vb3JlXCIsXG4gIFwiTW9yYXJcIixcbiAgXCJNb3Jpc3NldHRlXCIsXG4gIFwiTW9zY2lza2lcIixcbiAgXCJNcmF6XCIsXG4gIFwiTXVlbGxlclwiLFxuICBcIk11bGxlclwiLFxuICBcIk11cmF6aWtcIixcbiAgXCJNdXJwaHlcIixcbiAgXCJNdXJyYXlcIixcbiAgXCJOYWRlclwiLFxuICBcIk5pY29sYXNcIixcbiAgXCJOaWVub3dcIixcbiAgXCJOaWtvbGF1c1wiLFxuICBcIk5pdHpzY2hlXCIsXG4gIFwiTm9sYW5cIixcbiAgXCJPYmVyYnJ1bm5lclwiLFxuICBcIk8nQ29ubmVsbFwiLFxuICBcIk8nQ29ubmVyXCIsXG4gIFwiTydIYXJhXCIsXG4gIFwiTydLZWVmZVwiLFxuICBcIk8nS29uXCIsXG4gIFwiT2t1bmV2YVwiLFxuICBcIk9sc29uXCIsXG4gIFwiT25kcmlja2FcIixcbiAgXCJPJ1JlaWxseVwiLFxuICBcIk9yblwiLFxuICBcIk9ydGl6XCIsXG4gIFwiT3NpbnNraVwiLFxuICBcIlBhY29jaGFcIixcbiAgXCJQYWRiZXJnXCIsXG4gIFwiUGFnYWNcIixcbiAgXCJQYXJpc2lhblwiLFxuICBcIlBhcmtlclwiLFxuICBcIlBhdWNla1wiLFxuICBcIlBmYW5uZXJzdGlsbFwiLFxuICBcIlBmZWZmZXJcIixcbiAgXCJQb2xsaWNoXCIsXG4gIFwiUG91cm9zXCIsXG4gIFwiUG93bG93c2tpXCIsXG4gIFwiUHJlZG92aWNcIixcbiAgXCJQcmljZVwiLFxuICBcIlByb2hhc2thXCIsXG4gIFwiUHJvc2FjY29cIixcbiAgXCJQdXJkeVwiLFxuICBcIlF1aWdsZXlcIixcbiAgXCJRdWl0em9uXCIsXG4gIFwiUmF0aFwiLFxuICBcIlJhdGtlXCIsXG4gIFwiUmF1XCIsXG4gIFwiUmF5bm9yXCIsXG4gIFwiUmVpY2hlbFwiLFxuICBcIlJlaWNoZXJ0XCIsXG4gIFwiUmVpbGx5XCIsXG4gIFwiUmVpbmdlclwiLFxuICBcIlJlbXBlbFwiLFxuICBcIlJlbm5lclwiLFxuICBcIlJleW5vbGRzXCIsXG4gIFwiUmljZVwiLFxuICBcIlJpcHBpblwiLFxuICBcIlJpdGNoaWVcIixcbiAgXCJSb2JlbFwiLFxuICBcIlJvYmVydHNcIixcbiAgXCJSb2RyaWd1ZXpcIixcbiAgXCJSb2dhaG5cIixcbiAgXCJSb2hhblwiLFxuICBcIlJvbGZzb25cIixcbiAgXCJSb21hZ3VlcmFcIixcbiAgXCJSb29iXCIsXG4gIFwiUm9zZW5iYXVtXCIsXG4gIFwiUm93ZVwiLFxuICBcIlJ1ZWNrZXJcIixcbiAgXCJSdW5vbGZzZG90dGlyXCIsXG4gIFwiUnVub2xmc3NvblwiLFxuICBcIlJ1bnRlXCIsXG4gIFwiUnVzc2VsXCIsXG4gIFwiUnV0aGVyZm9yZFwiLFxuICBcIlJ5YW5cIixcbiAgXCJTYW5mb3JkXCIsXG4gIFwiU2F0dGVyZmllbGRcIixcbiAgXCJTYXVlclwiLFxuICBcIlNhd2F5blwiLFxuICBcIlNjaGFkZW5cIixcbiAgXCJTY2hhZWZlclwiLFxuICBcIlNjaGFtYmVyZ2VyXCIsXG4gIFwiU2NoaWxsZXJcIixcbiAgXCJTY2hpbW1lbFwiLFxuICBcIlNjaGlubmVyXCIsXG4gIFwiU2NobWVsZXJcIixcbiAgXCJTY2htaWR0XCIsXG4gIFwiU2NobWl0dFwiLFxuICBcIlNjaG5laWRlclwiLFxuICBcIlNjaG9lblwiLFxuICBcIlNjaG93YWx0ZXJcIixcbiAgXCJTY2hyb2VkZXJcIixcbiAgXCJTY2h1bGlzdFwiLFxuICBcIlNjaHVsdHpcIixcbiAgXCJTY2h1bW1cIixcbiAgXCJTY2h1cHBlXCIsXG4gIFwiU2NodXN0ZXJcIixcbiAgXCJTZW5nZXJcIixcbiAgXCJTaGFuYWhhblwiLFxuICBcIlNoaWVsZHNcIixcbiAgXCJTaW1vbmlzXCIsXG4gIFwiU2lwZXNcIixcbiAgXCJTa2lsZXNcIixcbiAgXCJTbWl0aFwiLFxuICBcIlNtaXRoYW1cIixcbiAgXCJTcGVuY2VyXCIsXG4gIFwiU3BpbmthXCIsXG4gIFwiU3BvcmVyXCIsXG4gIFwiU3RhbW1cIixcbiAgXCJTdGFudG9uXCIsXG4gIFwiU3RhcmtcIixcbiAgXCJTdGVoclwiLFxuICBcIlN0ZXViZXJcIixcbiAgXCJTdGllZGVtYW5uXCIsXG4gIFwiU3Rva2VzXCIsXG4gIFwiU3RvbHRlbmJlcmdcIixcbiAgXCJTdHJhY2tlXCIsXG4gIFwiU3RyZWljaFwiLFxuICBcIlN0cm9tYW5cIixcbiAgXCJTdHJvc2luXCIsXG4gIFwiU3dhbmlhd3NraVwiLFxuICBcIlN3aWZ0XCIsXG4gIFwiVGVycnlcIixcbiAgXCJUaGllbFwiLFxuICBcIlRob21wc29uXCIsXG4gIFwiVGlsbG1hblwiLFxuICBcIlRvcnBcIixcbiAgXCJUb3JwaHlcIixcbiAgXCJUb3duZVwiLFxuICBcIlRveVwiLFxuICBcIlRyYW50b3dcIixcbiAgXCJUcmVtYmxheVwiLFxuICBcIlRyZXV0ZWxcIixcbiAgXCJUcm9tcFwiLFxuICBcIlR1cmNvdHRlXCIsXG4gIFwiVHVybmVyXCIsXG4gIFwiVWxscmljaFwiLFxuICBcIlVwdG9uXCIsXG4gIFwiVmFuZGVydm9ydFwiLFxuICBcIlZldW1cIixcbiAgXCJWb2xrbWFuXCIsXG4gIFwiVm9uXCIsXG4gIFwiVm9uUnVlZGVuXCIsXG4gIFwiV2FlbGNoaVwiLFxuICBcIldhbGtlclwiLFxuICBcIldhbHNoXCIsXG4gIFwiV2FsdGVyXCIsXG4gIFwiV2FyZFwiLFxuICBcIldhdGVyc1wiLFxuICBcIldhdHNpY2FcIixcbiAgXCJXZWJlclwiLFxuICBcIldlaG5lclwiLFxuICBcIldlaW1hbm5cIixcbiAgXCJXZWlzc25hdFwiLFxuICBcIldlbGNoXCIsXG4gIFwiV2VzdFwiLFxuICBcIldoaXRlXCIsXG4gIFwiV2llZ2FuZFwiLFxuICBcIldpbGRlcm1hblwiLFxuICBcIldpbGtpbnNvblwiLFxuICBcIldpbGxcIixcbiAgXCJXaWxsaWFtc29uXCIsXG4gIFwiV2lsbG1zXCIsXG4gIFwiV2luZGxlclwiLFxuICBcIldpbnRoZWlzZXJcIixcbiAgXCJXaXNva3lcIixcbiAgXCJXaXNvemtcIixcbiAgXCJXaXR0aW5nXCIsXG4gIFwiV2l6YVwiLFxuICBcIldvbGZcIixcbiAgXCJXb2xmZlwiLFxuICBcIld1Y2tlcnRcIixcbiAgXCJXdW5zY2hcIixcbiAgXCJXeW1hblwiLFxuICBcIllvc3RcIixcbiAgXCJZdW5kdFwiLFxuICBcIlpib25jYWtcIixcbiAgXCJaZW1sYWtcIixcbiAgXCJaaWVtYW5uXCIsXG4gIFwiWmllbWVcIixcbiAgXCJadWxhdWZcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3twcmVmaXh9ICN7Zmlyc3RfbmFtZX0gI3tsYXN0X25hbWV9XCIsXG4gIFwiI3tmaXJzdF9uYW1lfSAje2xhc3RfbmFtZX0gI3tzdWZmaXh9XCIsXG4gIFwiI3tmaXJzdF9uYW1lfSAje2xhc3RfbmFtZX1cIixcbiAgXCIje2ZpcnN0X25hbWV9ICN7bGFzdF9uYW1lfVwiLFxuICBcIiN7Zmlyc3RfbmFtZX0gI3tsYXN0X25hbWV9XCIsXG4gIFwiI3tmaXJzdF9uYW1lfSAje2xhc3RfbmFtZX1cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiTXIuXCIsXG4gIFwiTXJzLlwiLFxuICBcIk1zLlwiLFxuICBcIk1pc3NcIixcbiAgXCJEci5cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiSnIuXCIsXG4gIFwiU3IuXCIsXG4gIFwiSVwiLFxuICBcIklJXCIsXG4gIFwiSUlJXCIsXG4gIFwiSVZcIixcbiAgXCJWXCIsXG4gIFwiTURcIixcbiAgXCJERFNcIixcbiAgXCJQaERcIixcbiAgXCJEVk1cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSB7XG4gIFwiZGVzY3JpcHRvclwiOiBbXG4gICAgXCJMZWFkXCIsXG4gICAgXCJTZW5pb3JcIixcbiAgICBcIkRpcmVjdFwiLFxuICAgIFwiQ29ycG9yYXRlXCIsXG4gICAgXCJEeW5hbWljXCIsXG4gICAgXCJGdXR1cmVcIixcbiAgICBcIlByb2R1Y3RcIixcbiAgICBcIk5hdGlvbmFsXCIsXG4gICAgXCJSZWdpb25hbFwiLFxuICAgIFwiRGlzdHJpY3RcIixcbiAgICBcIkNlbnRyYWxcIixcbiAgICBcIkdsb2JhbFwiLFxuICAgIFwiQ3VzdG9tZXJcIixcbiAgICBcIkludmVzdG9yXCIsXG4gICAgXCJEeW5hbWljXCIsXG4gICAgXCJJbnRlcm5hdGlvbmFsXCIsXG4gICAgXCJMZWdhY3lcIixcbiAgICBcIkZvcndhcmRcIixcbiAgICBcIkludGVybmFsXCIsXG4gICAgXCJIdW1hblwiLFxuICAgIFwiQ2hpZWZcIixcbiAgICBcIlByaW5jaXBhbFwiXG4gIF0sXG4gIFwibGV2ZWxcIjogW1xuICAgIFwiU29sdXRpb25zXCIsXG4gICAgXCJQcm9ncmFtXCIsXG4gICAgXCJCcmFuZFwiLFxuICAgIFwiU2VjdXJpdHlcIixcbiAgICBcIlJlc2VhcmNoXCIsXG4gICAgXCJNYXJrZXRpbmdcIixcbiAgICBcIkRpcmVjdGl2ZXNcIixcbiAgICBcIkltcGxlbWVudGF0aW9uXCIsXG4gICAgXCJJbnRlZ3JhdGlvblwiLFxuICAgIFwiRnVuY3Rpb25hbGl0eVwiLFxuICAgIFwiUmVzcG9uc2VcIixcbiAgICBcIlBhcmFkaWdtXCIsXG4gICAgXCJUYWN0aWNzXCIsXG4gICAgXCJJZGVudGl0eVwiLFxuICAgIFwiTWFya2V0c1wiLFxuICAgIFwiR3JvdXBcIixcbiAgICBcIkRpdmlzaW9uXCIsXG4gICAgXCJBcHBsaWNhdGlvbnNcIixcbiAgICBcIk9wdGltaXphdGlvblwiLFxuICAgIFwiT3BlcmF0aW9uc1wiLFxuICAgIFwiSW5mcmFzdHJ1Y3R1cmVcIixcbiAgICBcIkludHJhbmV0XCIsXG4gICAgXCJDb21tdW5pY2F0aW9uc1wiLFxuICAgIFwiV2ViXCIsXG4gICAgXCJCcmFuZGluZ1wiLFxuICAgIFwiUXVhbGl0eVwiLFxuICAgIFwiQXNzdXJhbmNlXCIsXG4gICAgXCJNb2JpbGl0eVwiLFxuICAgIFwiQWNjb3VudHNcIixcbiAgICBcIkRhdGFcIixcbiAgICBcIkNyZWF0aXZlXCIsXG4gICAgXCJDb25maWd1cmF0aW9uXCIsXG4gICAgXCJBY2NvdW50YWJpbGl0eVwiLFxuICAgIFwiSW50ZXJhY3Rpb25zXCIsXG4gICAgXCJGYWN0b3JzXCIsXG4gICAgXCJVc2FiaWxpdHlcIixcbiAgICBcIk1ldHJpY3NcIlxuICBdLFxuICBcImpvYlwiOiBbXG4gICAgXCJTdXBlcnZpc29yXCIsXG4gICAgXCJBc3NvY2lhdGVcIixcbiAgICBcIkV4ZWN1dGl2ZVwiLFxuICAgIFwiTGlhc29uXCIsXG4gICAgXCJPZmZpY2VyXCIsXG4gICAgXCJNYW5hZ2VyXCIsXG4gICAgXCJFbmdpbmVlclwiLFxuICAgIFwiU3BlY2lhbGlzdFwiLFxuICAgIFwiRGlyZWN0b3JcIixcbiAgICBcIkNvb3JkaW5hdG9yXCIsXG4gICAgXCJBZG1pbmlzdHJhdG9yXCIsXG4gICAgXCJBcmNoaXRlY3RcIixcbiAgICBcIkFuYWx5c3RcIixcbiAgICBcIkRlc2lnbmVyXCIsXG4gICAgXCJQbGFubmVyXCIsXG4gICAgXCJPcmNoZXN0cmF0b3JcIixcbiAgICBcIlRlY2huaWNpYW5cIixcbiAgICBcIkRldmVsb3BlclwiLFxuICAgIFwiUHJvZHVjZXJcIixcbiAgICBcIkNvbnN1bHRhbnRcIixcbiAgICBcIkFzc2lzdGFudFwiLFxuICAgIFwiRmFjaWxpdGF0b3JcIixcbiAgICBcIkFnZW50XCIsXG4gICAgXCJSZXByZXNlbnRhdGl2ZVwiLFxuICAgIFwiU3RyYXRlZ2lzdFwiXG4gIF1cbn07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiMjIy0jIyMtIyMjI1wiLFxuICBcIigjIyMpICMjIy0jIyMjXCIsXG4gIFwiMS0jIyMtIyMjLSMjIyNcIixcbiAgXCIjIyMuIyMjLiMjIyNcIixcbiAgXCIjIyMtIyMjLSMjIyNcIixcbiAgXCIoIyMjKSAjIyMtIyMjI1wiLFxuICBcIjEtIyMjLSMjIy0jIyMjXCIsXG4gIFwiIyMjLiMjIy4jIyMjXCIsXG4gIFwiIyMjLSMjIy0jIyMjIHgjIyNcIixcbiAgXCIoIyMjKSAjIyMtIyMjIyB4IyMjXCIsXG4gIFwiMS0jIyMtIyMjLSMjIyMgeCMjI1wiLFxuICBcIiMjIy4jIyMuIyMjIyB4IyMjXCIsXG4gIFwiIyMjLSMjIy0jIyMjIHgjIyMjXCIsXG4gIFwiKCMjIykgIyMjLSMjIyMgeCMjIyNcIixcbiAgXCIxLSMjIy0jIyMtIyMjIyB4IyMjI1wiLFxuICBcIiMjIy4jIyMuIyMjIyB4IyMjI1wiLFxuICBcIiMjIy0jIyMtIyMjIyB4IyMjIyNcIixcbiAgXCIoIyMjKSAjIyMtIyMjIyB4IyMjIyNcIixcbiAgXCIxLSMjIy0jIyMtIyMjIyB4IyMjIyNcIixcbiAgXCIjIyMuIyMjLiMjIyMgeCMjIyMjXCJcbl07XG4iLCJ2YXIgcGhvbmVfbnVtYmVyID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IHBob25lX251bWJlcjtcbnBob25lX251bWJlci5mb3JtYXRzID0gcmVxdWlyZShcIi4vZm9ybWF0c1wiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiYW50c1wiLFxuICBcImJhdHNcIixcbiAgXCJiZWFyc1wiLFxuICBcImJlZXNcIixcbiAgXCJiaXJkc1wiLFxuICBcImJ1ZmZhbG9cIixcbiAgXCJjYXRzXCIsXG4gIFwiY2hpY2tlbnNcIixcbiAgXCJjYXR0bGVcIixcbiAgXCJkb2dzXCIsXG4gIFwiZG9scGhpbnNcIixcbiAgXCJkdWNrc1wiLFxuICBcImVsZXBoYW50c1wiLFxuICBcImZpc2hlc1wiLFxuICBcImZveGVzXCIsXG4gIFwiZnJvZ3NcIixcbiAgXCJnZWVzZVwiLFxuICBcImdvYXRzXCIsXG4gIFwiaG9yc2VzXCIsXG4gIFwia2FuZ2Fyb29zXCIsXG4gIFwibGlvbnNcIixcbiAgXCJtb25rZXlzXCIsXG4gIFwib3dsc1wiLFxuICBcIm94ZW5cIixcbiAgXCJwZW5ndWluc1wiLFxuICBcInBlb3BsZVwiLFxuICBcInBpZ3NcIixcbiAgXCJyYWJiaXRzXCIsXG4gIFwic2hlZXBcIixcbiAgXCJ0aWdlcnNcIixcbiAgXCJ3aGFsZXNcIixcbiAgXCJ3b2x2ZXNcIixcbiAgXCJ6ZWJyYXNcIixcbiAgXCJiYW5zaGVlc1wiLFxuICBcImNyb3dzXCIsXG4gIFwiYmxhY2sgY2F0c1wiLFxuICBcImNoaW1lcmFzXCIsXG4gIFwiZ2hvc3RzXCIsXG4gIFwiY29uc3BpcmF0b3JzXCIsXG4gIFwiZHJhZ29uc1wiLFxuICBcImR3YXJ2ZXNcIixcbiAgXCJlbHZlc1wiLFxuICBcImVuY2hhbnRlcnNcIixcbiAgXCJleG9yY2lzdHNcIixcbiAgXCJzb25zXCIsXG4gIFwiZm9lc1wiLFxuICBcImdpYW50c1wiLFxuICBcImdub21lc1wiLFxuICBcImdvYmxpbnNcIixcbiAgXCJnb29zZXNcIixcbiAgXCJncmlmZmluc1wiLFxuICBcImx5Y2FudGhyb3Blc1wiLFxuICBcIm5lbWVzaXNcIixcbiAgXCJvZ3Jlc1wiLFxuICBcIm9yYWNsZXNcIixcbiAgXCJwcm9waGV0c1wiLFxuICBcInNvcmNlcm9yc1wiLFxuICBcInNwaWRlcnNcIixcbiAgXCJzcGlyaXRzXCIsXG4gIFwidmFtcGlyZXNcIixcbiAgXCJ3YXJsb2Nrc1wiLFxuICBcInZpeGVuc1wiLFxuICBcIndlcmV3b2x2ZXNcIixcbiAgXCJ3aXRjaGVzXCIsXG4gIFwid29yc2hpcGVyc1wiLFxuICBcInpvbWJpZXNcIixcbiAgXCJkcnVpZHNcIlxuXTtcbiIsInZhciB0ZWFtID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IHRlYW07XG50ZWFtLmNyZWF0dXJlID0gcmVxdWlyZShcIi4vY3JlYXR1cmVcIik7XG50ZWFtLm5hbWUgPSByZXF1aXJlKFwiLi9uYW1lXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIje0FkZHJlc3Muc3RhdGV9ICN7Y3JlYXR1cmV9XCJcbl07XG4iLCJcbnZhciBMb3JlbSA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBIZWxwZXJzID0gZmFrZXIuaGVscGVycztcblxuICBzZWxmLndvcmRzID0gZnVuY3Rpb24gKG51bSkge1xuICAgICAgaWYgKHR5cGVvZiBudW0gPT0gJ3VuZGVmaW5lZCcpIHsgbnVtID0gMzsgfVxuICAgICAgcmV0dXJuIEhlbHBlcnMuc2h1ZmZsZShmYWtlci5kZWZpbml0aW9ucy5sb3JlbS53b3Jkcykuc2xpY2UoMCwgbnVtKTtcbiAgfTtcblxuICBzZWxmLnNlbnRlbmNlID0gZnVuY3Rpb24gKHdvcmRDb3VudCwgcmFuZ2UpIHtcbiAgICAgIGlmICh0eXBlb2Ygd29yZENvdW50ID09ICd1bmRlZmluZWQnKSB7IHdvcmRDb3VudCA9IDM7IH1cbiAgICAgIGlmICh0eXBlb2YgcmFuZ2UgPT0gJ3VuZGVmaW5lZCcpIHsgcmFuZ2UgPSA3OyB9XG5cbiAgICAgIC8vIHN0cmFuZ2UgaXNzdWUgd2l0aCB0aGUgbm9kZV9taW5fdGVzdCBmYWlsaW5nIGZvciBjYXB0aWFsaXplLCBwbGVhc2UgZml4IGFuZCBhZGQgZmFrZXIubG9yZW0uYmFja1xuICAgICAgLy9yZXR1cm4gIGZha2VyLmxvcmVtLndvcmRzKHdvcmRDb3VudCArIEhlbHBlcnMucmFuZG9tTnVtYmVyKHJhbmdlKSkuam9pbignICcpLmNhcGl0YWxpemUoKTtcblxuICAgICAgdmFyIHNlbnRlbmNlID0gZmFrZXIubG9yZW0ud29yZHMod29yZENvdW50ICsgZmFrZXIucmFuZG9tLm51bWJlcihyYW5nZSkpLmpvaW4oJyAnKTtcbiAgICAgIHJldHVybiBzZW50ZW5jZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlbnRlbmNlLnNsaWNlKDEpICsgJy4nO1xuICB9O1xuXG4gIHNlbGYuc2VudGVuY2VzID0gZnVuY3Rpb24gKHNlbnRlbmNlQ291bnQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2VudGVuY2VDb3VudCA9PSAndW5kZWZpbmVkJykgeyBzZW50ZW5jZUNvdW50ID0gMzsgfVxuICAgICAgdmFyIHNlbnRlbmNlcyA9IFtdO1xuICAgICAgZm9yIChzZW50ZW5jZUNvdW50OyBzZW50ZW5jZUNvdW50ID4gMDsgc2VudGVuY2VDb3VudC0tKSB7XG4gICAgICAgIHNlbnRlbmNlcy5wdXNoKGZha2VyLmxvcmVtLnNlbnRlbmNlKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbnRlbmNlcy5qb2luKFwiXFxuXCIpO1xuICB9O1xuXG4gIHNlbGYucGFyYWdyYXBoID0gZnVuY3Rpb24gKHNlbnRlbmNlQ291bnQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2VudGVuY2VDb3VudCA9PSAndW5kZWZpbmVkJykgeyBzZW50ZW5jZUNvdW50ID0gMzsgfVxuICAgICAgcmV0dXJuIGZha2VyLmxvcmVtLnNlbnRlbmNlcyhzZW50ZW5jZUNvdW50ICsgZmFrZXIucmFuZG9tLm51bWJlcigzKSk7XG4gIH07XG5cbiAgc2VsZi5wYXJhZ3JhcGhzID0gZnVuY3Rpb24gKHBhcmFncmFwaENvdW50LCBzZXBhcmF0b3IpIHtcbiAgICBpZiAodHlwZW9mIHNlcGFyYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgc2VwYXJhdG9yID0gXCJcXG4gXFxyXCI7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYWdyYXBoQ291bnQgPT0gJ3VuZGVmaW5lZCcpIHsgcGFyYWdyYXBoQ291bnQgPSAzOyB9XG4gICAgdmFyIHBhcmFncmFwaHMgPSBbXTtcbiAgICBmb3IgKHBhcmFncmFwaENvdW50OyBwYXJhZ3JhcGhDb3VudCA+IDA7IHBhcmFncmFwaENvdW50LS0pIHtcbiAgICAgICAgcGFyYWdyYXBocy5wdXNoKGZha2VyLmxvcmVtLnBhcmFncmFwaCgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFncmFwaHMuam9pbihzZXBhcmF0b3IpO1xuICB9XG4gIFxuICByZXR1cm4gc2VsZjtcbn07XG5cblxubW9kdWxlW1wiZXhwb3J0c1wiXSA9IExvcmVtO1xuIiwiZnVuY3Rpb24gTmFtZSAoZmFrZXIpIHtcblxuICB0aGlzLmZpcnN0TmFtZSA9IGZ1bmN0aW9uIChnZW5kZXIpIHtcbiAgICBpZiAodHlwZW9mIGZha2VyLmRlZmluaXRpb25zLm5hbWUubWFsZV9maXJzdF9uYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBmYWtlci5kZWZpbml0aW9ucy5uYW1lLmZlbWFsZV9maXJzdF9uYW1lICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAvLyBzb21lIGxvY2FsZSBkYXRhc2V0cyAoIGxpa2UgcnUgKSBoYXZlIGZpcnN0X25hbWUgc3BsaXQgYnkgZ2VuZGVyLiBzaW5jZSB0aGUgbmFtZS5maXJzdF9uYW1lIGZpZWxkIGRvZXMgbm90IGV4aXN0IGluIHRoZXNlIGRhdGFzZXRzLFxuICAgICAgLy8gd2UgbXVzdCByYW5kb21seSBwaWNrIGEgbmFtZSBmcm9tIGVpdGhlciBnZW5kZXIgYXJyYXkgc28gZmFrZXIubmFtZS5maXJzdE5hbWUgd2lsbCByZXR1cm4gdGhlIGNvcnJlY3QgbG9jYWxlIGRhdGEgKCBhbmQgbm90IGZhbGxiYWNrIClcbiAgICAgIGlmICh0eXBlb2YgZ2VuZGVyICE9PSAnbnVtYmVyJykge1xuICAgICAgICBnZW5kZXIgPSBmYWtlci5yYW5kb20ubnVtYmVyKDEpO1xuICAgICAgfVxuICAgICAgaWYgKGdlbmRlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5sb2NhbGVzW2Zha2VyLmxvY2FsZV0ubmFtZS5tYWxlX2ZpcnN0X25hbWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5sb2NhbGVzW2Zha2VyLmxvY2FsZV0ubmFtZS5mZW1hbGVfZmlyc3RfbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUuZmlyc3RfbmFtZSk7XG4gIH07XG5cbiAgdGhpcy5sYXN0TmFtZSA9IGZ1bmN0aW9uIChnZW5kZXIpIHtcbiAgICBpZiAodHlwZW9mIGZha2VyLmRlZmluaXRpb25zLm5hbWUubWFsZV9sYXN0X25hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGZha2VyLmRlZmluaXRpb25zLm5hbWUuZmVtYWxlX2xhc3RfbmFtZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgLy8gc29tZSBsb2NhbGUgZGF0YXNldHMgKCBsaWtlIHJ1ICkgaGF2ZSBsYXN0X25hbWUgc3BsaXQgYnkgZ2VuZGVyLiBpIGhhdmUgbm8gaWRlYSBob3cgbGFzdCBuYW1lcyBjYW4gaGF2ZSBnZW5kZXJzLCBidXQgYWxzbyBpIGRvIG5vdCBzcGVhayBydXNzaWFuXG4gICAgICAvLyBzZWUgYWJvdmUgY29tbWVudCBvZiBmaXJzdE5hbWUgbWV0aG9kXG4gICAgICBpZiAodHlwZW9mIGdlbmRlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgZ2VuZGVyID0gZmFrZXIucmFuZG9tLm51bWJlcigxKTtcbiAgICAgIH1cbiAgICAgIGlmIChnZW5kZXIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIubG9jYWxlc1tmYWtlci5sb2NhbGVdLm5hbWUubWFsZV9sYXN0X25hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIubG9jYWxlc1tmYWtlci5sb2NhbGVdLm5hbWUuZmVtYWxlX2xhc3RfbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUubGFzdF9uYW1lKTtcbiAgfTtcblxuICB0aGlzLmZpbmROYW1lID0gZnVuY3Rpb24gKGZpcnN0TmFtZSwgbGFzdE5hbWUsIGdlbmRlcikge1xuICAgICAgdmFyIHIgPSBmYWtlci5yYW5kb20ubnVtYmVyKDgpO1xuICAgICAgdmFyIHByZWZpeCwgc3VmZml4O1xuICAgICAgLy8gaW4gcGFydGljdWxhciBsb2NhbGVzIGZpcnN0IGFuZCBsYXN0IG5hbWVzIHNwbGl0IGJ5IGdlbmRlcixcbiAgICAgIC8vIHRodXMgd2Uga2VlcCBjb25zaXN0ZW5jeSBieSBwYXNzaW5nIDAgYXMgbWFsZSBhbmQgMSBhcyBmZW1hbGVcbiAgICAgIGlmICh0eXBlb2YgZ2VuZGVyICE9PSAnbnVtYmVyJykge1xuICAgICAgICBnZW5kZXIgPSBmYWtlci5yYW5kb20ubnVtYmVyKDEpO1xuICAgICAgfVxuICAgICAgZmlyc3ROYW1lID0gZmlyc3ROYW1lIHx8IGZha2VyLm5hbWUuZmlyc3ROYW1lKGdlbmRlcik7XG4gICAgICBsYXN0TmFtZSA9IGxhc3ROYW1lIHx8IGZha2VyLm5hbWUubGFzdE5hbWUoZ2VuZGVyKTtcbiAgICAgIHN3aXRjaCAocikge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAgIHByZWZpeCA9IGZha2VyLm5hbWUucHJlZml4KCk7XG4gICAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgXCIgXCIgKyBmaXJzdE5hbWUgKyBcIiBcIiArIGxhc3ROYW1lO1xuICAgICAgICAgIH1cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzdWZmaXggPSBmYWtlci5uYW1lLnByZWZpeCgpO1xuICAgICAgICAgIGlmIChzdWZmaXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TmFtZSArIFwiIFwiICsgbGFzdE5hbWUgKyBcIiBcIiArIHN1ZmZpeDtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaXJzdE5hbWUgKyBcIiBcIiArIGxhc3ROYW1lO1xuICB9O1xuXG4gIHRoaXMuam9iVGl0bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICBmYWtlci5uYW1lLmpvYkRlc2NyaXB0b3IoKSArIFwiIFwiICtcbiAgICAgIGZha2VyLm5hbWUuam9iQXJlYSgpICsgXCIgXCIgK1xuICAgICAgZmFrZXIubmFtZS5qb2JUeXBlKCk7XG4gIH07XG5cbiAgdGhpcy5wcmVmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnByZWZpeCk7XG4gIH07XG5cbiAgdGhpcy5zdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnN1ZmZpeCk7XG4gIH07XG5cbiAgdGhpcy50aXRsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnRpdGxlLmRlc2NyaXB0b3IpLFxuICAgICAgICAgIGxldmVsICAgICAgID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnRpdGxlLmxldmVsKSxcbiAgICAgICAgICBqb2IgICAgICAgICA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS50aXRsZS5qb2IpO1xuXG4gICAgICByZXR1cm4gZGVzY3JpcHRvciArIFwiIFwiICsgbGV2ZWwgKyBcIiBcIiArIGpvYjtcbiAgfTtcblxuICB0aGlzLmpvYkRlc2NyaXB0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS50aXRsZS5kZXNjcmlwdG9yKTtcbiAgfTtcblxuICB0aGlzLmpvYkFyZWEgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS50aXRsZS5sZXZlbCk7XG4gIH07XG5cbiAgdGhpcy5qb2JUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUudGl0bGUuam9iKTtcbiAgfTtcblxufVxuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IE5hbWU7IiwidmFyIFBob25lID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBzZWxmLnBob25lTnVtYmVyID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8IGZha2VyLnBob25lLnBob25lRm9ybWF0cygpO1xuICAgICAgcmV0dXJuIGZha2VyLmhlbHBlcnMucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIoZm9ybWF0KTtcbiAgfTtcblxuICAvLyBGSVhNRTogdGhpcyBpcyBzdHJhbmdlIHBhc3NpbmcgaW4gYW4gYXJyYXkgaW5kZXguXG4gIHNlbGYucGhvbmVOdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiAocGhvbmVGb3JtYXRzQXJyYXlJbmRleCkge1xuICAgICAgcGhvbmVGb3JtYXRzQXJyYXlJbmRleCA9IHBob25lRm9ybWF0c0FycmF5SW5kZXggfHwgMDtcbiAgICAgIHJldHVybiBmYWtlci5oZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKGZha2VyLmRlZmluaXRpb25zLnBob25lX251bWJlci5mb3JtYXRzW3Bob25lRm9ybWF0c0FycmF5SW5kZXhdKTtcbiAgfTtcblxuICBzZWxmLnBob25lRm9ybWF0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5waG9uZV9udW1iZXIuZm9ybWF0cyk7XG4gIH07XG4gIFxuICByZXR1cm4gc2VsZjtcblxufTtcblxubW9kdWxlWydleHBvcnRzJ10gPSBQaG9uZTsiLCJ2YXIgbWVyc2VubmUgPSByZXF1aXJlKCcuLi92ZW5kb3IvbWVyc2VubmUnKTtcblxuZnVuY3Rpb24gUmFuZG9tIChmYWtlciwgc2VlZCkge1xuICAvLyBVc2UgYSB1c2VyIHByb3ZpZGVkIHNlZWQgaWYgaXQgZXhpc3RzXG4gIGlmIChzZWVkKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2VlZCkgJiYgc2VlZC5sZW5ndGgpIHtcbiAgICAgIG1lcnNlbm5lLnNlZWRfYXJyYXkoc2VlZCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbWVyc2VubmUuc2VlZChzZWVkKTtcbiAgICB9XG4gIH1cbiAgLy8gcmV0dXJucyBhIHNpbmdsZSByYW5kb20gbnVtYmVyIGJhc2VkIG9uIGEgbWF4IG51bWJlciBvciByYW5nZVxuICB0aGlzLm51bWJlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIG1heDogb3B0aW9uc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5taW4gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIG9wdGlvbnMubWluID0gMDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubWF4ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBvcHRpb25zLm1heCA9IDk5OTk5O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJlY2lzaW9uID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBvcHRpb25zLnByZWNpc2lvbiA9IDE7XG4gICAgfVxuXG4gICAgLy8gTWFrZSB0aGUgcmFuZ2UgaW5jbHVzaXZlIG9mIHRoZSBtYXggdmFsdWVcbiAgICB2YXIgbWF4ID0gb3B0aW9ucy5tYXg7XG4gICAgaWYgKG1heCA+PSAwKSB7XG4gICAgICBtYXggKz0gb3B0aW9ucy5wcmVjaXNpb247XG4gICAgfVxuXG4gICAgdmFyIHJhbmRvbU51bWJlciA9IG9wdGlvbnMucHJlY2lzaW9uICogTWF0aC5mbG9vcihcbiAgICAgIG1lcnNlbm5lLnJhbmQobWF4IC8gb3B0aW9ucy5wcmVjaXNpb24sIG9wdGlvbnMubWluIC8gb3B0aW9ucy5wcmVjaXNpb24pKTtcblxuICAgIHJldHVybiByYW5kb21OdW1iZXI7XG5cbiAgfVxuXG4gIC8vIHRha2VzIGFuIGFycmF5IGFuZCByZXR1cm5zIGEgcmFuZG9tIGVsZW1lbnQgb2YgdGhlIGFycmF5XG4gIHRoaXMuYXJyYXlFbGVtZW50ID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgICBhcnJheSA9IGFycmF5IHx8IFtcImFcIiwgXCJiXCIsIFwiY1wiXTtcbiAgICAgIHZhciByID0gZmFrZXIucmFuZG9tLm51bWJlcih7IG1heDogYXJyYXkubGVuZ3RoIC0gMSB9KTtcbiAgICAgIHJldHVybiBhcnJheVtyXTtcbiAgfVxuXG4gIC8vIHRha2VzIGFuIG9iamVjdCBhbmQgcmV0dXJucyB0aGUgcmFuZG9tbHkga2V5IG9yIHZhbHVlXG4gIHRoaXMub2JqZWN0RWxlbWVudCA9IGZ1bmN0aW9uIChvYmplY3QsIGZpZWxkKSB7XG4gICAgICBvYmplY3QgPSBvYmplY3QgfHwgeyBcImZvb1wiOiBcImJhclwiLCBcInRvb1wiOiBcImNhclwiIH07XG4gICAgICB2YXIgYXJyYXkgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICAgICAgdmFyIGtleSA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoYXJyYXkpO1xuXG4gICAgICByZXR1cm4gZmllbGQgPT09IFwia2V5XCIgPyBrZXkgOiBvYmplY3Rba2V5XTtcbiAgfVxuXG4gIHRoaXMudXVpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBSRkM0MTIyX1RFTVBMQVRFID0gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCc7XG4gICAgICB2YXIgcmVwbGFjZVBsYWNlaG9sZGVycyA9IGZ1bmN0aW9uIChwbGFjZWhvbGRlcikge1xuICAgICAgICAgIHZhciByYW5kb20gPSBNYXRoLnJhbmRvbSgpKjE2fDA7XG4gICAgICAgICAgdmFyIHZhbHVlID0gcGxhY2Vob2xkZXIgPT0gJ3gnID8gcmFuZG9tIDogKHJhbmRvbSAmMHgzIHwgMHg4KTtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoMTYpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBSRkM0MTIyX1RFTVBMQVRFLnJlcGxhY2UoL1t4eV0vZywgcmVwbGFjZVBsYWNlaG9sZGVycyk7XG4gIH1cblxuICB0aGlzLmJvb2xlYW4gPWZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhIWZha2VyLnJhbmRvbS5udW1iZXIoMSlcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xuXG59XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gUmFuZG9tO1xuXG5cblxuLy8gbW9kdWxlLmV4cG9ydHMgPSByYW5kb207XG4iLCJ2YXIgRmFrZXIgPSByZXF1aXJlKCcuLi9saWInKTtcbnZhciBmYWtlciA9IG5ldyBGYWtlcih7IGxvY2FsZTogJ2VuJywgbG9jYWxlRmFsbGJhY2s6ICdlbicgfSk7XG5mYWtlci5sb2NhbGVzWydlbiddID0gcmVxdWlyZSgnLi4vbGliL2xvY2FsZXMvZW4nKTtcbmZha2VyLmxvY2FsZXNbJ2VuJ10gPSByZXF1aXJlKCcuLi9saWIvbG9jYWxlcy9lbicpO1xubW9kdWxlWydleHBvcnRzJ10gPSBmYWtlcjtcbiIsIi8vIHRoaXMgcHJvZ3JhbSBpcyBhIEphdmFTY3JpcHQgdmVyc2lvbiBvZiBNZXJzZW5uZSBUd2lzdGVyLCB3aXRoIGNvbmNlYWxtZW50IGFuZCBlbmNhcHN1bGF0aW9uIGluIGNsYXNzLFxuLy8gYW4gYWxtb3N0IHN0cmFpZ2h0IGNvbnZlcnNpb24gZnJvbSB0aGUgb3JpZ2luYWwgcHJvZ3JhbSwgbXQxOTkzN2FyLmMsXG4vLyB0cmFuc2xhdGVkIGJ5IHkuIG9rYWRhIG9uIEp1bHkgMTcsIDIwMDYuXG4vLyBhbmQgbW9kaWZpZWQgYSBsaXR0bGUgYXQganVseSAyMCwgMjAwNiwgYnV0IHRoZXJlIGFyZSBub3QgYW55IHN1YnN0YW50aWFsIGRpZmZlcmVuY2VzLlxuLy8gaW4gdGhpcyBwcm9ncmFtLCBwcm9jZWR1cmUgZGVzY3JpcHRpb25zIGFuZCBjb21tZW50cyBvZiBvcmlnaW5hbCBzb3VyY2UgY29kZSB3ZXJlIG5vdCByZW1vdmVkLlxuLy8gbGluZXMgY29tbWVudGVkIHdpdGggLy9jLy8gd2VyZSBvcmlnaW5hbGx5IGRlc2NyaXB0aW9ucyBvZiBjIHByb2NlZHVyZS4gYW5kIGEgZmV3IGZvbGxvd2luZyBsaW5lcyBhcmUgYXBwcm9wcmlhdGUgSmF2YVNjcmlwdCBkZXNjcmlwdGlvbnMuXG4vLyBsaW5lcyBjb21tZW50ZWQgd2l0aCAvKiBhbmQgKi8gYXJlIG9yaWdpbmFsIGNvbW1lbnRzLlxuLy8gbGluZXMgY29tbWVudGVkIHdpdGggLy8gYXJlIGFkZGl0aW9uYWwgY29tbWVudHMgaW4gdGhpcyBKYXZhU2NyaXB0IHZlcnNpb24uXG4vLyBiZWZvcmUgdXNpbmcgdGhpcyB2ZXJzaW9uLCBjcmVhdGUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIE1lcnNlbm5lVHdpc3RlcjE5OTM3IGNsYXNzLCBhbmQgaW5pdGlhbGl6ZSB0aGUgZWFjaCBzdGF0ZSwgZ2l2ZW4gYmVsb3cgaW4gYyBjb21tZW50cywgb2YgYWxsIHRoZSBpbnN0YW5jZXMuXG4vKlxuICAgQSBDLXByb2dyYW0gZm9yIE1UMTk5MzcsIHdpdGggaW5pdGlhbGl6YXRpb24gaW1wcm92ZWQgMjAwMi8xLzI2LlxuICAgQ29kZWQgYnkgVGFrdWppIE5pc2hpbXVyYSBhbmQgTWFrb3RvIE1hdHN1bW90by5cblxuICAgQmVmb3JlIHVzaW5nLCBpbml0aWFsaXplIHRoZSBzdGF0ZSBieSB1c2luZyBpbml0X2dlbnJhbmQoc2VlZClcbiAgIG9yIGluaXRfYnlfYXJyYXkoaW5pdF9rZXksIGtleV9sZW5ndGgpLlxuXG4gICBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDAyLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBUYWt1amkgTmlzaGltdXJhLFxuICAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbiAgIGFyZSBtZXQ6XG5cbiAgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgICAzLiBUaGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlXG4gICAgICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlblxuICAgICAgICBwZXJtaXNzaW9uLlxuXG4gICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gICBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUlxuICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsXG4gICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sXG4gICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1JcbiAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0ZcbiAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXG4gICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5cbiAgIEFueSBmZWVkYmFjayBpcyB2ZXJ5IHdlbGNvbWUuXG4gICBodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9lbXQuaHRtbFxuICAgZW1haWw6IG0tbWF0IEAgbWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAgKHJlbW92ZSBzcGFjZSlcbiovXG5cbmZ1bmN0aW9uIE1lcnNlbm5lVHdpc3RlcjE5OTM3KClcbntcblx0LyogY29uc3RhbnRzIHNob3VsZCBiZSBzY29wZWQgaW5zaWRlIHRoZSBjbGFzcyAqL1xuXHR2YXIgTiwgTSwgTUFUUklYX0EsIFVQUEVSX01BU0ssIExPV0VSX01BU0s7XG5cdC8qIFBlcmlvZCBwYXJhbWV0ZXJzICovXG5cdC8vYy8vI2RlZmluZSBOIDYyNFxuXHQvL2MvLyNkZWZpbmUgTSAzOTdcblx0Ly9jLy8jZGVmaW5lIE1BVFJJWF9BIDB4OTkwOGIwZGZVTCAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovXG5cdC8vYy8vI2RlZmluZSBVUFBFUl9NQVNLIDB4ODAwMDAwMDBVTCAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovXG5cdC8vYy8vI2RlZmluZSBMT1dFUl9NQVNLIDB4N2ZmZmZmZmZVTCAvKiBsZWFzdCBzaWduaWZpY2FudCByIGJpdHMgKi9cblx0TiA9IDYyNDtcblx0TSA9IDM5Nztcblx0TUFUUklYX0EgPSAweDk5MDhiMGRmOyAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovXG5cdFVQUEVSX01BU0sgPSAweDgwMDAwMDAwOyAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovXG5cdExPV0VSX01BU0sgPSAweDdmZmZmZmZmOyAvKiBsZWFzdCBzaWduaWZpY2FudCByIGJpdHMgKi9cblx0Ly9jLy9zdGF0aWMgdW5zaWduZWQgbG9uZyBtdFtOXTsgLyogdGhlIGFycmF5IGZvciB0aGUgc3RhdGUgdmVjdG9yICAqL1xuXHQvL2MvL3N0YXRpYyBpbnQgbXRpPU4rMTsgLyogbXRpPT1OKzEgbWVhbnMgbXRbTl0gaXMgbm90IGluaXRpYWxpemVkICovXG5cdHZhciBtdCA9IG5ldyBBcnJheShOKTsgICAvKiB0aGUgYXJyYXkgZm9yIHRoZSBzdGF0ZSB2ZWN0b3IgICovXG5cdHZhciBtdGkgPSBOKzE7ICAgICAgICAgICAvKiBtdGk9PU4rMSBtZWFucyBtdFtOXSBpcyBub3QgaW5pdGlhbGl6ZWQgKi9cblxuXHRmdW5jdGlvbiB1bnNpZ25lZDMyIChuMSkgLy8gcmV0dXJucyBhIDMyLWJpdHMgdW5zaWdlZCBpbnRlZ2VyIGZyb20gYW4gb3BlcmFuZCB0byB3aGljaCBhcHBsaWVkIGEgYml0IG9wZXJhdG9yLlxuXHR7XG5cdFx0cmV0dXJuIG4xIDwgMCA/IChuMSBeIFVQUEVSX01BU0spICsgVVBQRVJfTUFTSyA6IG4xO1xuXHR9XG5cblx0ZnVuY3Rpb24gc3VidHJhY3Rpb24zMiAobjEsIG4yKSAvLyBlbXVsYXRlcyBsb3dlcmZsb3cgb2YgYSBjIDMyLWJpdHMgdW5zaWdlZCBpbnRlZ2VyIHZhcmlhYmxlLCBpbnN0ZWFkIG9mIHRoZSBvcGVyYXRvciAtLiB0aGVzZSBib3RoIGFyZ3VtZW50cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycyBleHByZXNzaWJsZSB1c2luZyB1bnNpZ25lZCAzMiBiaXRzLlxuXHR7XG5cdFx0cmV0dXJuIG4xIDwgbjIgPyB1bnNpZ25lZDMyKCgweDEwMDAwMDAwMCAtIChuMiAtIG4xKSkgJiAweGZmZmZmZmZmKSA6IG4xIC0gbjI7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRpdGlvbjMyIChuMSwgbjIpIC8vIGVtdWxhdGVzIG92ZXJmbG93IG9mIGEgYyAzMi1iaXRzIHVuc2lnZWQgaW50ZWdlciB2YXJpYWJsZSwgaW5zdGVhZCBvZiB0aGUgb3BlcmF0b3IgKy4gdGhlc2UgYm90aCBhcmd1bWVudHMgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlcnMgZXhwcmVzc2libGUgdXNpbmcgdW5zaWduZWQgMzIgYml0cy5cblx0e1xuXHRcdHJldHVybiB1bnNpZ25lZDMyKChuMSArIG4yKSAmIDB4ZmZmZmZmZmYpXG5cdH1cblxuXHRmdW5jdGlvbiBtdWx0aXBsaWNhdGlvbjMyIChuMSwgbjIpIC8vIGVtdWxhdGVzIG92ZXJmbG93IG9mIGEgYyAzMi1iaXRzIHVuc2lnZWQgaW50ZWdlciB2YXJpYWJsZSwgaW5zdGVhZCBvZiB0aGUgb3BlcmF0b3IgKi4gdGhlc2UgYm90aCBhcmd1bWVudHMgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlcnMgZXhwcmVzc2libGUgdXNpbmcgdW5zaWduZWQgMzIgYml0cy5cblx0e1xuXHRcdHZhciBzdW0gPSAwO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzI7ICsraSl7XG5cdFx0XHRpZiAoKG4xID4+PiBpKSAmIDB4MSl7XG5cdFx0XHRcdHN1bSA9IGFkZGl0aW9uMzIoc3VtLCB1bnNpZ25lZDMyKG4yIDw8IGkpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHN1bTtcblx0fVxuXG5cdC8qIGluaXRpYWxpemVzIG10W05dIHdpdGggYSBzZWVkICovXG5cdC8vYy8vdm9pZCBpbml0X2dlbnJhbmQodW5zaWduZWQgbG9uZyBzKVxuXHR0aGlzLmluaXRfZ2VucmFuZCA9IGZ1bmN0aW9uIChzKVxuXHR7XG5cdFx0Ly9jLy9tdFswXT0gcyAmIDB4ZmZmZmZmZmY7XG5cdFx0bXRbMF09IHVuc2lnbmVkMzIocyAmIDB4ZmZmZmZmZmYpO1xuXHRcdGZvciAobXRpPTE7IG10aTxOOyBtdGkrKykge1xuXHRcdFx0bXRbbXRpXSA9XG5cdFx0XHQvL2MvLygxODEyNDMzMjUzICogKG10W210aS0xXSBeIChtdFttdGktMV0gPj4gMzApKSArIG10aSk7XG5cdFx0XHRhZGRpdGlvbjMyKG11bHRpcGxpY2F0aW9uMzIoMTgxMjQzMzI1MywgdW5zaWduZWQzMihtdFttdGktMV0gXiAobXRbbXRpLTFdID4+PiAzMCkpKSwgbXRpKTtcblx0XHRcdC8qIFNlZSBLbnV0aCBUQU9DUCBWb2wyLiAzcmQgRWQuIFAuMTA2IGZvciBtdWx0aXBsaWVyLiAqL1xuXHRcdFx0LyogSW4gdGhlIHByZXZpb3VzIHZlcnNpb25zLCBNU0JzIG9mIHRoZSBzZWVkIGFmZmVjdCAgICovXG5cdFx0XHQvKiBvbmx5IE1TQnMgb2YgdGhlIGFycmF5IG10W10uICAgICAgICAgICAgICAgICAgICAgICAgKi9cblx0XHRcdC8qIDIwMDIvMDEvMDkgbW9kaWZpZWQgYnkgTWFrb3RvIE1hdHN1bW90byAgICAgICAgICAgICAqL1xuXHRcdFx0Ly9jLy9tdFttdGldICY9IDB4ZmZmZmZmZmY7XG5cdFx0XHRtdFttdGldID0gdW5zaWduZWQzMihtdFttdGldICYgMHhmZmZmZmZmZik7XG5cdFx0XHQvKiBmb3IgPjMyIGJpdCBtYWNoaW5lcyAqL1xuXHRcdH1cblx0fVxuXG5cdC8qIGluaXRpYWxpemUgYnkgYW4gYXJyYXkgd2l0aCBhcnJheS1sZW5ndGggKi9cblx0LyogaW5pdF9rZXkgaXMgdGhlIGFycmF5IGZvciBpbml0aWFsaXppbmcga2V5cyAqL1xuXHQvKiBrZXlfbGVuZ3RoIGlzIGl0cyBsZW5ndGggKi9cblx0Lyogc2xpZ2h0IGNoYW5nZSBmb3IgQysrLCAyMDA0LzIvMjYgKi9cblx0Ly9jLy92b2lkIGluaXRfYnlfYXJyYXkodW5zaWduZWQgbG9uZyBpbml0X2tleVtdLCBpbnQga2V5X2xlbmd0aClcblx0dGhpcy5pbml0X2J5X2FycmF5ID0gZnVuY3Rpb24gKGluaXRfa2V5LCBrZXlfbGVuZ3RoKVxuXHR7XG5cdFx0Ly9jLy9pbnQgaSwgaiwgaztcblx0XHR2YXIgaSwgaiwgaztcblx0XHQvL2MvL2luaXRfZ2VucmFuZCgxOTY1MDIxOCk7XG5cdFx0dGhpcy5pbml0X2dlbnJhbmQoMTk2NTAyMTgpO1xuXHRcdGk9MTsgaj0wO1xuXHRcdGsgPSAoTj5rZXlfbGVuZ3RoID8gTiA6IGtleV9sZW5ndGgpO1xuXHRcdGZvciAoOyBrOyBrLS0pIHtcblx0XHRcdC8vYy8vbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTY2NDUyNSkpXG5cdFx0XHQvL2MvL1x0KyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi9cblx0XHRcdG10W2ldID0gYWRkaXRpb24zMihhZGRpdGlvbjMyKHVuc2lnbmVkMzIobXRbaV0gXiBtdWx0aXBsaWNhdGlvbjMyKHVuc2lnbmVkMzIobXRbaS0xXSBeIChtdFtpLTFdID4+PiAzMCkpLCAxNjY0NTI1KSksIGluaXRfa2V5W2pdKSwgaik7XG5cdFx0XHRtdFtpXSA9XG5cdFx0XHQvL2MvL210W2ldICY9IDB4ZmZmZmZmZmY7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovXG5cdFx0XHR1bnNpZ25lZDMyKG10W2ldICYgMHhmZmZmZmZmZik7XG5cdFx0XHRpKys7IGorKztcblx0XHRcdGlmIChpPj1OKSB7IG10WzBdID0gbXRbTi0xXTsgaT0xOyB9XG5cdFx0XHRpZiAoaj49a2V5X2xlbmd0aCkgaj0wO1xuXHRcdH1cblx0XHRmb3IgKGs9Ti0xOyBrOyBrLS0pIHtcblx0XHRcdC8vYy8vbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTU2NjA4Mzk0MSkpXG5cdFx0XHQvL2MvLy0gaTsgLyogbm9uIGxpbmVhciAqL1xuXHRcdFx0bXRbaV0gPSBzdWJ0cmFjdGlvbjMyKHVuc2lnbmVkMzIoKGRiZz1tdFtpXSkgXiBtdWx0aXBsaWNhdGlvbjMyKHVuc2lnbmVkMzIobXRbaS0xXSBeIChtdFtpLTFdID4+PiAzMCkpLCAxNTY2MDgzOTQxKSksIGkpO1xuXHRcdFx0Ly9jLy9tdFtpXSAmPSAweGZmZmZmZmZmOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqL1xuXHRcdFx0bXRbaV0gPSB1bnNpZ25lZDMyKG10W2ldICYgMHhmZmZmZmZmZik7XG5cdFx0XHRpKys7XG5cdFx0XHRpZiAoaT49TikgeyBtdFswXSA9IG10W04tMV07IGk9MTsgfVxuXHRcdH1cblx0XHRtdFswXSA9IDB4ODAwMDAwMDA7IC8qIE1TQiBpcyAxOyBhc3N1cmluZyBub24temVybyBpbml0aWFsIGFycmF5ICovXG5cdH1cblxuICAgIC8qIG1vdmVkIG91dHNpZGUgb2YgZ2VucmFuZF9pbnQzMigpIGJ5IGp3YXR0ZSAyMDEwLTExLTE3OyBnZW5lcmF0ZSBsZXNzIGdhcmJhZ2UgKi9cbiAgICB2YXIgbWFnMDEgPSBbMHgwLCBNQVRSSVhfQV07XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwweGZmZmZmZmZmXS1pbnRlcnZhbCAqL1xuXHQvL2MvL3Vuc2lnbmVkIGxvbmcgZ2VucmFuZF9pbnQzMih2b2lkKVxuXHR0aGlzLmdlbnJhbmRfaW50MzIgPSBmdW5jdGlvbiAoKVxuXHR7XG5cdFx0Ly9jLy91bnNpZ25lZCBsb25nIHk7XG5cdFx0Ly9jLy9zdGF0aWMgdW5zaWduZWQgbG9uZyBtYWcwMVsyXT17MHgwVUwsIE1BVFJJWF9BfTtcblx0XHR2YXIgeTtcblx0XHQvKiBtYWcwMVt4XSA9IHggKiBNQVRSSVhfQSAgZm9yIHg9MCwxICovXG5cblx0XHRpZiAobXRpID49IE4pIHsgLyogZ2VuZXJhdGUgTiB3b3JkcyBhdCBvbmUgdGltZSAqL1xuXHRcdFx0Ly9jLy9pbnQga2s7XG5cdFx0XHR2YXIga2s7XG5cblx0XHRcdGlmIChtdGkgPT0gTisxKSAgIC8qIGlmIGluaXRfZ2VucmFuZCgpIGhhcyBub3QgYmVlbiBjYWxsZWQsICovXG5cdFx0XHRcdC8vYy8vaW5pdF9nZW5yYW5kKDU0ODkpOyAvKiBhIGRlZmF1bHQgaW5pdGlhbCBzZWVkIGlzIHVzZWQgKi9cblx0XHRcdFx0dGhpcy5pbml0X2dlbnJhbmQoNTQ4OSk7IC8qIGEgZGVmYXVsdCBpbml0aWFsIHNlZWQgaXMgdXNlZCAqL1xuXG5cdFx0XHRmb3IgKGtrPTA7a2s8Ti1NO2trKyspIHtcblx0XHRcdFx0Ly9jLy95ID0gKG10W2trXSZVUFBFUl9NQVNLKXwobXRba2srMV0mTE9XRVJfTUFTSyk7XG5cdFx0XHRcdC8vYy8vbXRba2tdID0gbXRba2srTV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXHRcdFx0XHR5ID0gdW5zaWduZWQzMigobXRba2tdJlVQUEVSX01BU0spfChtdFtraysxXSZMT1dFUl9NQVNLKSk7XG5cdFx0XHRcdG10W2trXSA9IHVuc2lnbmVkMzIobXRba2srTV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXSk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKDtrazxOLTE7a2srKykge1xuXHRcdFx0XHQvL2MvL3kgPSAobXRba2tdJlVQUEVSX01BU0spfChtdFtraysxXSZMT1dFUl9NQVNLKTtcblx0XHRcdFx0Ly9jLy9tdFtra10gPSBtdFtraysoTS1OKV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXHRcdFx0XHR5ID0gdW5zaWduZWQzMigobXRba2tdJlVQUEVSX01BU0spfChtdFtraysxXSZMT1dFUl9NQVNLKSk7XG5cdFx0XHRcdG10W2trXSA9IHVuc2lnbmVkMzIobXRba2srKE0tTildIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly9jLy95ID0gKG10W04tMV0mVVBQRVJfTUFTSyl8KG10WzBdJkxPV0VSX01BU0spO1xuXHRcdFx0Ly9jLy9tdFtOLTFdID0gbXRbTS0xXSBeICh5ID4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG5cdFx0XHR5ID0gdW5zaWduZWQzMigobXRbTi0xXSZVUFBFUl9NQVNLKXwobXRbMF0mTE9XRVJfTUFTSykpO1xuXHRcdFx0bXRbTi0xXSA9IHVuc2lnbmVkMzIobXRbTS0xXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdKTtcblx0XHRcdG10aSA9IDA7XG5cdFx0fVxuXG5cdFx0eSA9IG10W210aSsrXTtcblxuXHRcdC8qIFRlbXBlcmluZyAqL1xuXHRcdC8vYy8veSBePSAoeSA+PiAxMSk7XG5cdFx0Ly9jLy95IF49ICh5IDw8IDcpICYgMHg5ZDJjNTY4MDtcblx0XHQvL2MvL3kgXj0gKHkgPDwgMTUpICYgMHhlZmM2MDAwMDtcblx0XHQvL2MvL3kgXj0gKHkgPj4gMTgpO1xuXHRcdHkgPSB1bnNpZ25lZDMyKHkgXiAoeSA+Pj4gMTEpKTtcblx0XHR5ID0gdW5zaWduZWQzMih5IF4gKCh5IDw8IDcpICYgMHg5ZDJjNTY4MCkpO1xuXHRcdHkgPSB1bnNpZ25lZDMyKHkgXiAoKHkgPDwgMTUpICYgMHhlZmM2MDAwMCkpO1xuXHRcdHkgPSB1bnNpZ25lZDMyKHkgXiAoeSA+Pj4gMTgpKTtcblxuXHRcdHJldHVybiB5O1xuXHR9XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwweDdmZmZmZmZmXS1pbnRlcnZhbCAqL1xuXHQvL2MvL2xvbmcgZ2VucmFuZF9pbnQzMSh2b2lkKVxuXHR0aGlzLmdlbnJhbmRfaW50MzEgPSBmdW5jdGlvbiAoKVxuXHR7XG5cdFx0Ly9jLy9yZXR1cm4gKGdlbnJhbmRfaW50MzIoKT4+MSk7XG5cdFx0cmV0dXJuICh0aGlzLmdlbnJhbmRfaW50MzIoKT4+PjEpO1xuXHR9XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxXS1yZWFsLWludGVydmFsICovXG5cdC8vYy8vZG91YmxlIGdlbnJhbmRfcmVhbDEodm9pZClcblx0dGhpcy5nZW5yYW5kX3JlYWwxID0gZnVuY3Rpb24gKClcblx0e1xuXHRcdC8vYy8vcmV0dXJuIGdlbnJhbmRfaW50MzIoKSooMS4wLzQyOTQ5NjcyOTUuMCk7XG5cdFx0cmV0dXJuIHRoaXMuZ2VucmFuZF9pbnQzMigpKigxLjAvNDI5NDk2NzI5NS4wKTtcblx0XHQvKiBkaXZpZGVkIGJ5IDJeMzItMSAqL1xuXHR9XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKS1yZWFsLWludGVydmFsICovXG5cdC8vYy8vZG91YmxlIGdlbnJhbmRfcmVhbDIodm9pZClcblx0dGhpcy5nZW5yYW5kX3JlYWwyID0gZnVuY3Rpb24gKClcblx0e1xuXHRcdC8vYy8vcmV0dXJuIGdlbnJhbmRfaW50MzIoKSooMS4wLzQyOTQ5NjcyOTYuMCk7XG5cdFx0cmV0dXJuIHRoaXMuZ2VucmFuZF9pbnQzMigpKigxLjAvNDI5NDk2NzI5Ni4wKTtcblx0XHQvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cblx0fVxuXG5cdC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gKDAsMSktcmVhbC1pbnRlcnZhbCAqL1xuXHQvL2MvL2RvdWJsZSBnZW5yYW5kX3JlYWwzKHZvaWQpXG5cdHRoaXMuZ2VucmFuZF9yZWFsMyA9IGZ1bmN0aW9uICgpXG5cdHtcblx0XHQvL2MvL3JldHVybiAoKGdlbnJhbmRfaW50MzIoKSkgKyAwLjUpKigxLjAvNDI5NDk2NzI5Ni4wKTtcblx0XHRyZXR1cm4gKCh0aGlzLmdlbnJhbmRfaW50MzIoKSkgKyAwLjUpKigxLjAvNDI5NDk2NzI5Ni4wKTtcblx0XHQvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cblx0fVxuXG5cdC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSkgd2l0aCA1My1iaXQgcmVzb2x1dGlvbiovXG5cdC8vYy8vZG91YmxlIGdlbnJhbmRfcmVzNTModm9pZClcblx0dGhpcy5nZW5yYW5kX3JlczUzID0gZnVuY3Rpb24gKClcblx0e1xuXHRcdC8vYy8vdW5zaWduZWQgbG9uZyBhPWdlbnJhbmRfaW50MzIoKT4+NSwgYj1nZW5yYW5kX2ludDMyKCk+PjY7XG5cdFx0dmFyIGE9dGhpcy5nZW5yYW5kX2ludDMyKCk+Pj41LCBiPXRoaXMuZ2VucmFuZF9pbnQzMigpPj4+Njtcblx0XHRyZXR1cm4oYSo2NzEwODg2NC4wK2IpKigxLjAvOTAwNzE5OTI1NDc0MDk5Mi4wKTtcblx0fVxuXHQvKiBUaGVzZSByZWFsIHZlcnNpb25zIGFyZSBkdWUgdG8gSXNha3UgV2FkYSwgMjAwMi8wMS8wOSBhZGRlZCAqL1xufVxuXG4vLyAgRXhwb3J0czogUHVibGljIEFQSVxuXG4vLyAgRXhwb3J0IHRoZSB0d2lzdGVyIGNsYXNzXG5leHBvcnRzLk1lcnNlbm5lVHdpc3RlcjE5OTM3ID0gTWVyc2VubmVUd2lzdGVyMTk5Mzc7XG5cbi8vICBFeHBvcnQgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzXG52YXIgZ2VuID0gbmV3IE1lcnNlbm5lVHdpc3RlcjE5OTM3O1xuZ2VuLmluaXRfZ2VucmFuZCgobmV3IERhdGUpLmdldFRpbWUoKSAlIDEwMDAwMDAwMDApO1xuXG4vLyBBZGRlZCBtYXgsIG1pbiByYW5nZSBmdW5jdGlvbmFsaXR5LCBNYXJhayBTcXVpcmVzIFNlcHQgMTEgMjAxNFxuZXhwb3J0cy5yYW5kID0gZnVuY3Rpb24obWF4LCBtaW4pIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHtcbiAgICAgICAgbWluID0gMDtcbiAgICAgICAgbWF4ID0gMzI3Njg7XG4gICAgICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihnZW4uZ2VucmFuZF9yZWFsMigpICogKG1heCAtIG1pbikgKyBtaW4pO1xufVxuZXhwb3J0cy5zZWVkID0gZnVuY3Rpb24oUykge1xuICAgIGlmICh0eXBlb2YoUykgIT0gJ251bWJlcicpXG4gICAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2VlZChTKSBtdXN0IHRha2UgbnVtZXJpYyBhcmd1bWVudDsgaXMgXCIgKyB0eXBlb2YoUykpO1xuICAgICAgICB9XG4gICAgZ2VuLmluaXRfZ2VucmFuZChTKTtcbn1cbmV4cG9ydHMuc2VlZF9hcnJheSA9IGZ1bmN0aW9uKEEpIHtcbiAgICBpZiAodHlwZW9mKEEpICE9ICdvYmplY3QnKVxuICAgICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInNlZWRfYXJyYXkoQSkgbXVzdCB0YWtlIGFycmF5IG9mIG51bWJlcnM7IGlzIFwiICsgdHlwZW9mKEEpKTtcbiAgICAgICAgfVxuICAgIGdlbi5pbml0X2J5X2FycmF5KEEpO1xufVxuIiwiLypcbiAqIHBhc3N3b3JkLWdlbmVyYXRvclxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxMyBCZXJtaSBGZXJyZXIgPGJlcm1pQGJlcm1pbGFicy5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuKGZ1bmN0aW9uIChyb290KSB7XG5cbiAgdmFyIGxvY2FsTmFtZSwgY29uc29uYW50LCBsZXR0ZXIsIHBhc3N3b3JkLCB2b3dlbDtcbiAgbGV0dGVyID0gL1thLXpBLVpdJC87XG4gIHZvd2VsID0gL1thZWlvdUFFSU9VXSQvO1xuICBjb25zb25hbnQgPSAvW2JjZGZnaGprbG1ucHFyc3R2d3h5ekJDREZHSEpLTE1OUFFSU1RWV1hZWl0kLztcblxuXG4gIC8vIERlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGxvY2FsIHZhcmlhYmxlIHRoZSBwYXNzd29yZEdlbmVyYXRvciBsaWJyYXJ5IHdpbGwgdXNlXG4gIC8vIHRoaXMgaXMgc3BlY2lhbGx5IHVzZWZ1bCBpZiB3aW5kb3cucGFzc3dvcmRHZW5lcmF0b3IgaXMgYWxyZWFkeSBiZWluZyB1c2VkXG4gIC8vIGJ5IHlvdXIgYXBwbGljYXRpb24gYW5kIHlvdSB3YW50IGEgZGlmZmVyZW50IG5hbWUuIEZvciBleGFtcGxlOlxuICAvLyAgICAvLyBEZWNsYXJlIGJlZm9yZSBpbmNsdWRpbmcgdGhlIHBhc3N3b3JkR2VuZXJhdG9yIGxpYnJhcnlcbiAgLy8gICAgdmFyIGxvY2FsUGFzc3dvcmRHZW5lcmF0b3JMaWJyYXJ5TmFtZSA9ICdwYXNzJztcbiAgbG9jYWxOYW1lID0gcm9vdC5sb2NhbFBhc3N3b3JkR2VuZXJhdG9yTGlicmFyeU5hbWUgfHwgXCJnZW5lcmF0ZVBhc3N3b3JkXCIsXG5cbiAgcGFzc3dvcmQgPSBmdW5jdGlvbiAobGVuZ3RoLCBtZW1vcmFibGUsIHBhdHRlcm4sIHByZWZpeCkge1xuICAgIHZhciBjaGFyLCBuO1xuICAgIGlmIChsZW5ndGggPT0gbnVsbCkge1xuICAgICAgbGVuZ3RoID0gMTA7XG4gICAgfVxuICAgIGlmIChtZW1vcmFibGUgPT0gbnVsbCkge1xuICAgICAgbWVtb3JhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHBhdHRlcm4gPT0gbnVsbCkge1xuICAgICAgcGF0dGVybiA9IC9cXHcvO1xuICAgIH1cbiAgICBpZiAocHJlZml4ID09IG51bGwpIHtcbiAgICAgIHByZWZpeCA9ICcnO1xuICAgIH1cbiAgICBpZiAocHJlZml4Lmxlbmd0aCA+PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxuICAgIGlmIChtZW1vcmFibGUpIHtcbiAgICAgIGlmIChwcmVmaXgubWF0Y2goY29uc29uYW50KSkge1xuICAgICAgICBwYXR0ZXJuID0gdm93ZWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXR0ZXJuID0gY29uc29uYW50O1xuICAgICAgfVxuICAgIH1cbiAgICBuID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTQpICsgMzM7XG4gICAgY2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUobik7XG4gICAgaWYgKG1lbW9yYWJsZSkge1xuICAgICAgY2hhciA9IGNoYXIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKCFjaGFyLm1hdGNoKHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4gcGFzc3dvcmQobGVuZ3RoLCBtZW1vcmFibGUsIHBhdHRlcm4sIHByZWZpeCk7XG4gICAgfVxuICAgIHJldHVybiBwYXNzd29yZChsZW5ndGgsIG1lbW9yYWJsZSwgcGF0dGVybiwgXCJcIiArIHByZWZpeCArIGNoYXIpO1xuICB9O1xuXG5cbiAgKCh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6IHJvb3QpW2xvY2FsTmFtZV0gPSBwYXNzd29yZDtcbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBwYXNzd29yZDtcbiAgICB9XG4gIH1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGdsb2JhbGAgb24gdGhlIHNlcnZlci5cbn0odGhpcykpOyIsIi8qXG5cbkNvcHlyaWdodCAoYykgMjAxMi0yMDE0IEplZmZyZXkgTWVhbG9cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG5kb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxudGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxudG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGVcblNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1JcbkNPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbk9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkJhc2VkIGxvb3NlbHkgb24gTHVrYSBQdXNpYydzIFBIUCBTY3JpcHQ6IGh0dHA6Ly8zNjBwZXJjZW50cy5jb20vcG9zdHMvcGhwLXJhbmRvbS11c2VyLWFnZW50LWdlbmVyYXRvci9cblxuVGhlIGxpY2Vuc2UgZm9yIHRoYXQgc2NyaXB0IGlzIGFzIGZvbGxvd3M6XG5cblwiVEhFIEJFRVItV0FSRSBMSUNFTlNFXCIgKFJldmlzaW9uIDQyKTpcblxuPHB1c2ljOTNAZ21haWwuY29tPiB3cm90ZSB0aGlzIGZpbGUuIEFzIGxvbmcgYXMgeW91IHJldGFpbiB0aGlzIG5vdGljZSB5b3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBzdHVmZi5cbklmIHdlIG1lZXQgc29tZSBkYXksIGFuZCB5b3UgdGhpbmsgdGhpcyBzdHVmZiBpcyB3b3J0aCBpdCwgeW91IGNhbiBidXkgbWUgYSBiZWVyIGluIHJldHVybi4gTHVrYSBQdXNpY1xuKi9cblxuZnVuY3Rpb24gcm5kKGEsIGIpIHtcbiAgICAvL2NhbGxpbmcgcm5kKCkgd2l0aCBubyBhcmd1bWVudHMgaXMgaWRlbnRpY2FsIHRvIHJuZCgwLCAxMDApXG4gICAgYSA9IGEgfHwgMDtcbiAgICBiID0gYiB8fCAxMDA7XG5cbiAgICBpZiAodHlwZW9mIGIgPT09ICdudW1iZXInICYmIHR5cGVvZiBhID09PSAnbnVtYmVyJykge1xuICAgICAgICAvL3JuZChpbnQgbWluLCBpbnQgbWF4KSByZXR1cm5zIGludGVnZXIgYmV0d2VlbiBtaW4sIG1heFxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uIChtaW4sIG1heCkge1xuICAgICAgICAgICAgaWYgKG1pbiA+IG1heCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdleHBlY3RlZCBtaW4gPD0gbWF4OyBnb3QgbWluID0gJyArIG1pbiArICcsIG1heCA9ICcgKyBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47XG4gICAgICAgIH0oYSwgYikpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkgPT09IFwiW29iamVjdCBBcnJheV1cIikge1xuICAgICAgICAvL3JldHVybnMgYSByYW5kb20gZWxlbWVudCBmcm9tIGFycmF5IChhKSwgZXZlbiB3ZWlnaHRpbmdcbiAgICAgICAgcmV0dXJuIGFbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYS5sZW5ndGgpXTtcbiAgICB9XG5cbiAgICBpZiAoYSAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy9yZXR1cm5zIGEgcmFuZG9tIGtleSBmcm9tIHRoZSBwYXNzZWQgb2JqZWN0OyBrZXlzIGFyZSB3ZWlnaHRlZCBieSB0aGUgZGVjaW1hbCBwcm9iYWJpbGl0eSBpbiB0aGVpciB2YWx1ZVxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciByYW5kID0gcm5kKDAsIDEwMCkgLyAxMDAsIG1pbiA9IDAsIG1heCA9IDAsIGtleSwgcmV0dXJuX3ZhbDtcblxuICAgICAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heCA9IG9ialtrZXldICsgbWluO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZCA+PSBtaW4gJiYgcmFuZCA8PSBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IG1pbiArIG9ialtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJldHVybl92YWw7XG4gICAgICAgIH0oYSkpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBybmQuICgnICsgKGIgPyBhICsgJywgJyArIGIgOiBhKSArICcpJyk7XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUxhbmcoKSB7XG4gICAgcmV0dXJuIHJuZChbJ0FCJywgJ0FGJywgJ0FOJywgJ0FSJywgJ0FTJywgJ0FaJywgJ0JFJywgJ0JHJywgJ0JOJywgJ0JPJywgJ0JSJywgJ0JTJywgJ0NBJywgJ0NFJywgJ0NPJywgJ0NTJyxcbiAgICAgICAgICAgICAgICAnQ1UnLCAnQ1knLCAnREEnLCAnREUnLCAnRUwnLCAnRU4nLCAnRU8nLCAnRVMnLCAnRVQnLCAnRVUnLCAnRkEnLCAnRkknLCAnRkonLCAnRk8nLCAnRlInLCAnRlknLFxuICAgICAgICAgICAgICAgICdHQScsICdHRCcsICdHTCcsICdHVicsICdIRScsICdISScsICdIUicsICdIVCcsICdIVScsICdIWScsICdJRCcsICdJUycsICdJVCcsICdKQScsICdKVicsICdLQScsXG4gICAgICAgICAgICAgICAgJ0tHJywgJ0tPJywgJ0tVJywgJ0tXJywgJ0tZJywgJ0xBJywgJ0xCJywgJ0xJJywgJ0xOJywgJ0xUJywgJ0xWJywgJ01HJywgJ01LJywgJ01OJywgJ01PJywgJ01TJyxcbiAgICAgICAgICAgICAgICAnTVQnLCAnTVknLCAnTkInLCAnTkUnLCAnTkwnLCAnTk4nLCAnTk8nLCAnT0MnLCAnUEwnLCAnUFQnLCAnUk0nLCAnUk8nLCAnUlUnLCAnU0MnLCAnU0UnLCAnU0snLFxuICAgICAgICAgICAgICAgICdTTCcsICdTTycsICdTUScsICdTUicsICdTVicsICdTVycsICdUSycsICdUUicsICdUWScsICdVSycsICdVUicsICdVWicsICdWSScsICdWTycsICdZSScsICdaSCddKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tQnJvd3NlckFuZE9TKCkge1xuICAgIHZhciBicm93c2VyID0gcm5kKHtcbiAgICAgICAgY2hyb21lOiAgICAuNDUxMzI4MTA1NjYsXG4gICAgICAgIGlleHBsb3JlcjogLjI3NDc3MDYxODM2LFxuICAgICAgICBmaXJlZm94OiAgIC4xOTM4NDE3MDYwOCxcbiAgICAgICAgc2FmYXJpOiAgICAuMDYxODY3ODExMTgsXG4gICAgICAgIG9wZXJhOiAgICAgLjAxNTc0MjM2OTU1XG4gICAgfSksXG4gICAgb3MgPSB7XG4gICAgICAgIGNocm9tZTogIHt3aW46IC44OSwgIG1hYzogLjA5ICwgbGluOiAuMDJ9LFxuICAgICAgICBmaXJlZm94OiB7d2luOiAuODMsICBtYWM6IC4xNiwgIGxpbjogLjAxfSxcbiAgICAgICAgb3BlcmE6ICAge3dpbjogLjkxLCAgbWFjOiAuMDMgLCBsaW46IC4wNn0sXG4gICAgICAgIHNhZmFyaTogIHt3aW46IC4wNCAsIG1hYzogLjk2ICB9LFxuICAgICAgICBpZXhwbG9yZXI6IFsnd2luJ11cbiAgICB9O1xuXG4gICAgcmV0dXJuIFticm93c2VyLCBybmQob3NbYnJvd3Nlcl0pXTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tUHJvYyhhcmNoKSB7XG4gICAgdmFyIHByb2NzID0ge1xuICAgICAgICBsaW46WydpNjg2JywgJ3g4Nl82NCddLFxuICAgICAgICBtYWM6IHsnSW50ZWwnIDogLjQ4LCAnUFBDJzogLjAxLCAnVTsgSW50ZWwnOi40OCwgJ1U7IFBQQycgOi4wMX0sXG4gICAgICAgIHdpbjpbJycsICdXT1c2NCcsICdXaW42NDsgeDY0J11cbiAgICB9O1xuICAgIHJldHVybiBybmQocHJvY3NbYXJjaF0pO1xufVxuXG5mdW5jdGlvbiByYW5kb21SZXZpc2lvbihkb3RzKSB7XG4gICAgdmFyIHJldHVybl92YWwgPSAnJztcbiAgICAvL2dlbmVyYXRlIGEgcmFuZG9tIHJldmlzaW9uXG4gICAgLy9kb3RzID0gMiByZXR1cm5zIC54Lnkgd2hlcmUgeCAmIHkgYXJlIGJldHdlZW4gMCBhbmQgOVxuICAgIGZvciAodmFyIHggPSAwOyB4IDwgZG90czsgeCsrKSB7XG4gICAgICAgIHJldHVybl92YWwgKz0gJy4nICsgcm5kKDAsIDkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuX3ZhbDtcbn1cblxudmFyIHZlcnNpb25fc3RyaW5nID0ge1xuICAgIG5ldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW3JuZCgxLCA0KSwgcm5kKDAsIDkpLCBybmQoMTAwMDAsIDk5OTk5KSwgcm5kKDAsIDkpXS5qb2luKCcuJyk7XG4gICAgfSxcbiAgICBudDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcm5kKDUsIDYpICsgJy4nICsgcm5kKDAsIDMpO1xuICAgIH0sXG4gICAgaWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJuZCg3LCAxMSk7XG4gICAgfSxcbiAgICB0cmlkZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBybmQoMywgNykgKyAnLicgKyBybmQoMCwgMSk7XG4gICAgfSxcbiAgICBvc3g6IGZ1bmN0aW9uIChkZWxpbSkge1xuICAgICAgICByZXR1cm4gWzEwLCBybmQoNSwgMTApLCBybmQoMCwgOSldLmpvaW4oZGVsaW0gfHwgJy4nKTtcbiAgICB9LFxuICAgIGNocm9tZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW3JuZCgxMywgMzkpLCAwLCBybmQoODAwLCA4OTkpLCAwXS5qb2luKCcuJyk7XG4gICAgfSxcbiAgICBwcmVzdG86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcyLjkuJyArIHJuZCgxNjAsIDE5MCk7XG4gICAgfSxcbiAgICBwcmVzdG8yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBybmQoMTAsIDEyKSArICcuMDAnO1xuICAgIH0sXG4gICAgc2FmYXJpOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBybmQoNTMxLCA1MzgpICsgJy4nICsgcm5kKDAsIDIpICsgJy4nICsgcm5kKDAsMik7XG4gICAgfVxufTtcblxudmFyIGJyb3dzZXIgPSB7XG4gICAgZmlyZWZveDogZnVuY3Rpb24gZmlyZWZveChhcmNoKSB7XG4gICAgICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HZWNrb191c2VyX2FnZW50X3N0cmluZ19yZWZlcmVuY2VcbiAgICAgICAgdmFyIGZpcmVmb3hfdmVyID0gcm5kKDUsIDE1KSArIHJhbmRvbVJldmlzaW9uKDIpLFxuICAgICAgICAgICAgZ2Vja29fdmVyID0gJ0dlY2tvLzIwMTAwMTAxIEZpcmVmb3gvJyArIGZpcmVmb3hfdmVyLFxuICAgICAgICAgICAgcHJvYyA9IHJhbmRvbVByb2MoYXJjaCksXG4gICAgICAgICAgICBvc192ZXIgPSAoYXJjaCA9PT0gJ3dpbicpID8gJyhXaW5kb3dzIE5UICcgKyB2ZXJzaW9uX3N0cmluZy5udCgpICsgKChwcm9jKSA/ICc7ICcgKyBwcm9jIDogJycpXG4gICAgICAgICAgICA6IChhcmNoID09PSAnbWFjJykgPyAnKE1hY2ludG9zaDsgJyArIHByb2MgKyAnIE1hYyBPUyBYICcgKyB2ZXJzaW9uX3N0cmluZy5vc3goKVxuICAgICAgICAgICAgOiAnKFgxMTsgTGludXggJyArIHByb2M7XG5cbiAgICAgICAgcmV0dXJuICdNb3ppbGxhLzUuMCAnICsgb3NfdmVyICsgJzsgcnY6JyArIGZpcmVmb3hfdmVyLnNsaWNlKDAsIC0yKSArICcpICcgKyBnZWNrb192ZXI7XG4gICAgfSxcblxuICAgIGlleHBsb3JlcjogZnVuY3Rpb24gaWV4cGxvcmVyKCkge1xuICAgICAgICB2YXIgdmVyID0gdmVyc2lvbl9zdHJpbmcuaWUoKTtcblxuICAgICAgICBpZiAodmVyID49IDExKSB7XG4gICAgICAgICAgICAvL2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDg2OTMwMSh2PXZzLjg1KS5hc3B4XG4gICAgICAgICAgICByZXR1cm4gJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuJyArIHJuZCgxLDMpICsgJzsgVHJpZGVudC83LjA7ICcgKyBybmQoWydUb3VjaDsgJywgJyddKSArICdydjoxMS4wKSBsaWtlIEdlY2tvJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL21zNTM3NTAzKHY9dnMuODUpLmFzcHhcbiAgICAgICAgcmV0dXJuICdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgTVNJRSAnICsgdmVyICsgJy4wOyBXaW5kb3dzIE5UICcgKyB2ZXJzaW9uX3N0cmluZy5udCgpICsgJzsgVHJpZGVudC8nICtcbiAgICAgICAgICAgIHZlcnNpb25fc3RyaW5nLnRyaWRlbnQoKSArICgocm5kKDAsIDEpID09PSAxKSA/ICc7IC5ORVQgQ0xSICcgKyB2ZXJzaW9uX3N0cmluZy5uZXQoKSA6ICcnKSArICcpJztcbiAgICB9LFxuXG4gICAgb3BlcmE6IGZ1bmN0aW9uIG9wZXJhKGFyY2gpIHtcbiAgICAgICAgLy9odHRwOi8vd3d3Lm9wZXJhLmNvbS9kb2NzL2hpc3RvcnkvXG4gICAgICAgIHZhciBwcmVzdG9fdmVyID0gJyBQcmVzdG8vJyArIHZlcnNpb25fc3RyaW5nLnByZXN0bygpICsgJyBWZXJzaW9uLycgKyB2ZXJzaW9uX3N0cmluZy5wcmVzdG8yKCkgKyAnKScsXG4gICAgICAgICAgICBvc192ZXIgPSAoYXJjaCA9PT0gJ3dpbicpID8gJyhXaW5kb3dzIE5UICcgKyB2ZXJzaW9uX3N0cmluZy5udCgpICsgJzsgVTsgJyArIHJhbmRvbUxhbmcoKSArIHByZXN0b192ZXJcbiAgICAgICAgICAgIDogKGFyY2ggPT09ICdsaW4nKSA/ICcoWDExOyBMaW51eCAnICsgcmFuZG9tUHJvYyhhcmNoKSArICc7IFU7ICcgKyByYW5kb21MYW5nKCkgKyBwcmVzdG9fdmVyXG4gICAgICAgICAgICA6ICcoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAnICsgdmVyc2lvbl9zdHJpbmcub3N4KCkgKyAnIFU7ICcgKyByYW5kb21MYW5nKCkgKyAnIFByZXN0by8nICtcbiAgICAgICAgICAgIHZlcnNpb25fc3RyaW5nLnByZXN0bygpICsgJyBWZXJzaW9uLycgKyB2ZXJzaW9uX3N0cmluZy5wcmVzdG8yKCkgKyAnKSc7XG5cbiAgICAgICAgcmV0dXJuICdPcGVyYS8nICsgcm5kKDksIDE0KSArICcuJyArIHJuZCgwLCA5OSkgKyAnICcgKyBvc192ZXI7XG4gICAgfSxcblxuICAgIHNhZmFyaTogZnVuY3Rpb24gc2FmYXJpKGFyY2gpIHtcbiAgICAgICAgdmFyIHNhZmFyaSA9IHZlcnNpb25fc3RyaW5nLnNhZmFyaSgpLFxuICAgICAgICAgICAgdmVyID0gcm5kKDQsIDcpICsgJy4nICsgcm5kKDAsMSkgKyAnLicgKyBybmQoMCwxMCksXG4gICAgICAgICAgICBvc192ZXIgPSAoYXJjaCA9PT0gJ21hYycpID8gJyhNYWNpbnRvc2g7ICcgKyByYW5kb21Qcm9jKCdtYWMnKSArICcgTWFjIE9TIFggJysgdmVyc2lvbl9zdHJpbmcub3N4KCdfJykgKyAnIHJ2OicgKyBybmQoMiwgNikgKyAnLjA7ICcrIHJhbmRvbUxhbmcoKSArICcpICdcbiAgICAgICAgICAgIDogJyhXaW5kb3dzOyBVOyBXaW5kb3dzIE5UICcgKyB2ZXJzaW9uX3N0cmluZy5udCgpICsgJyknO1xuXG4gICAgICAgIHJldHVybiAnTW96aWxsYS81LjAgJyArIG9zX3ZlciArICdBcHBsZVdlYktpdC8nICsgc2FmYXJpICsgJyAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vJyArIHZlciArICcgU2FmYXJpLycgKyBzYWZhcmk7XG4gICAgfSxcblxuICAgIGNocm9tZTogZnVuY3Rpb24gY2hyb21lKGFyY2gpIHtcbiAgICAgICAgdmFyIHNhZmFyaSA9IHZlcnNpb25fc3RyaW5nLnNhZmFyaSgpLFxuICAgICAgICAgICAgb3NfdmVyID0gKGFyY2ggPT09ICdtYWMnKSA/ICcoTWFjaW50b3NoOyAnICsgcmFuZG9tUHJvYygnbWFjJykgKyAnIE1hYyBPUyBYICcgKyB2ZXJzaW9uX3N0cmluZy5vc3goJ18nKSArICcpICdcbiAgICAgICAgICAgIDogKGFyY2ggPT09ICd3aW4nKSA/ICcoV2luZG93czsgVTsgV2luZG93cyBOVCAnICsgdmVyc2lvbl9zdHJpbmcubnQoKSArICcpJ1xuICAgICAgICAgICAgOiAnKFgxMTsgTGludXggJyArIHJhbmRvbVByb2MoYXJjaCk7XG5cbiAgICAgICAgcmV0dXJuICdNb3ppbGxhLzUuMCAnICsgb3NfdmVyICsgJyBBcHBsZVdlYktpdC8nICsgc2FmYXJpICsgJyAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8nICsgdmVyc2lvbl9zdHJpbmcuY2hyb21lKCkgKyAnIFNhZmFyaS8nICsgc2FmYXJpO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZSgpIHtcbiAgICB2YXIgcmFuZG9tID0gcmFuZG9tQnJvd3NlckFuZE9TKCk7XG4gICAgcmV0dXJuIGJyb3dzZXJbcmFuZG9tWzBdXShyYW5kb21bMV0pO1xufTtcbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiLyohXG4gKiBub2RlLWluaGVyaXRcbiAqIENvcHlyaWdodChjKSAyMDExIERtaXRyeSBGaWxhdG92IDxkZmlsYXRvdkB5YW5kZXgtdGVhbS5ydT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvaW5oZXJpdCcpO1xuIiwiLyoqXG4gKiBAbW9kdWxlIGluaGVyaXRcbiAqIEB2ZXJzaW9uIDIuMi4yXG4gKiBAYXV0aG9yIEZpbGF0b3YgRG1pdHJ5IDxkZmlsYXRvdkB5YW5kZXgtdGVhbS5ydT5cbiAqIEBkZXNjcmlwdGlvbiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHN5bnRheCBzdWdhciBmb3IgXCJjbGFzc1wiIGRlY2xhcmF0aW9ucywgY29uc3RydWN0b3JzLCBtaXhpbnMsIFwic3VwZXJcIiBjYWxscyBhbmQgc3RhdGljIG1lbWJlcnMuXG4gKi9cblxuKGZ1bmN0aW9uKGdsb2JhbCkge1xuXG52YXIgaGFzSW50cm9zcGVjdGlvbiA9IChmdW5jdGlvbigpeydfJzt9KS50b1N0cmluZygpLmluZGV4T2YoJ18nKSA+IC0xLFxuICAgIGVtcHR5QmFzZSA9IGZ1bmN0aW9uKCkge30sXG4gICAgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgIG9iakNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24ocHRwKSB7XG4gICAgICAgIHZhciBpbmhlcml0YW5jZSA9IGZ1bmN0aW9uKCkge307XG4gICAgICAgIGluaGVyaXRhbmNlLnByb3RvdHlwZSA9IHB0cDtcbiAgICAgICAgcmV0dXJuIG5ldyBpbmhlcml0YW5jZSgpO1xuICAgIH0sXG4gICAgb2JqS2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvcih2YXIgaSBpbiBvYmopIHtcbiAgICAgICAgICAgIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSAmJiByZXMucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24obzEsIG8yKSB7XG4gICAgICAgIGZvcih2YXIgaSBpbiBvMikge1xuICAgICAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbChvMiwgaSkgJiYgKG8xW2ldID0gbzJbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG8xO1xuICAgIH0sXG4gICAgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFxuICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gdG9TdHIuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH0sXG4gICAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gdG9TdHIuY2FsbChvYmopID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICAgIH0sXG4gICAgbm9PcCA9IGZ1bmN0aW9uKCkge30sXG4gICAgbmVlZENoZWNrUHJvcHMgPSB0cnVlLFxuICAgIHRlc3RQcm9wT2JqID0geyB0b1N0cmluZyA6ICcnIH07XG5cbmZvcih2YXIgaSBpbiB0ZXN0UHJvcE9iaikgeyAvLyBmdWNraW5nIGllIGhhc24ndCB0b1N0cmluZywgdmFsdWVPZiBpbiBmb3JcbiAgICB0ZXN0UHJvcE9iai5oYXNPd25Qcm9wZXJ0eShpKSAmJiAobmVlZENoZWNrUHJvcHMgPSBmYWxzZSk7XG59XG5cbnZhciBzcGVjUHJvcHMgPSBuZWVkQ2hlY2tQcm9wcz8gWyd0b1N0cmluZycsICd2YWx1ZU9mJ10gOiBudWxsO1xuXG5mdW5jdGlvbiBnZXRQcm9wTGlzdChvYmopIHtcbiAgICB2YXIgcmVzID0gb2JqS2V5cyhvYmopO1xuICAgIGlmKG5lZWRDaGVja1Byb3BzKSB7XG4gICAgICAgIHZhciBzcGVjUHJvcCwgaSA9IDA7XG4gICAgICAgIHdoaWxlKHNwZWNQcm9wID0gc3BlY1Byb3BzW2krK10pIHtcbiAgICAgICAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eShzcGVjUHJvcCkgJiYgcmVzLnB1c2goc3BlY1Byb3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYmFzZSwgcmVzLCBhZGQpIHtcbiAgICB2YXIgYWRkTGlzdCA9IGdldFByb3BMaXN0KGFkZCksXG4gICAgICAgIGogPSAwLCBsZW4gPSBhZGRMaXN0Lmxlbmd0aCxcbiAgICAgICAgbmFtZSwgcHJvcDtcbiAgICB3aGlsZShqIDwgbGVuKSB7XG4gICAgICAgIGlmKChuYW1lID0gYWRkTGlzdFtqKytdKSA9PT0gJ19fc2VsZicpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHByb3AgPSBhZGRbbmFtZV07XG4gICAgICAgIGlmKGlzRnVuY3Rpb24ocHJvcCkgJiZcbiAgICAgICAgICAgICAgICAoIWhhc0ludHJvc3BlY3Rpb24gfHwgcHJvcC50b1N0cmluZygpLmluZGV4T2YoJy5fX2Jhc2UnKSA+IC0xKSkge1xuICAgICAgICAgICAgcmVzW25hbWVdID0gKGZ1bmN0aW9uKG5hbWUsIHByb3ApIHtcbiAgICAgICAgICAgICAgICB2YXIgYmFzZU1ldGhvZCA9IGJhc2VbbmFtZV0/XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlW25hbWVdIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICdfX2NvbnN0cnVjdG9yJz8gLy8gY2FzZSBvZiBpbmhlcml0YW5jZSBmcm9tIHBsYW5lIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLl9fc2VsZi5fX3BhcmVudCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9PcDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiYXNlU2F2ZWQgPSB0aGlzLl9fYmFzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2Jhc2UgPSBiYXNlTWV0aG9kO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcHJvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9fYmFzZSA9IGJhc2VTYXZlZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkobmFtZSwgcHJvcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNbbmFtZV0gPSBwcm9wO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhcHBseU1peGlucyhtaXhpbnMsIHJlcykge1xuICAgIHZhciBpID0gMSwgbWl4aW47XG4gICAgd2hpbGUobWl4aW4gPSBtaXhpbnNbaSsrXSkge1xuICAgICAgICByZXM/XG4gICAgICAgICAgICBpc0Z1bmN0aW9uKG1peGluKT9cbiAgICAgICAgICAgICAgICBpbmhlcml0LnNlbGYocmVzLCBtaXhpbi5wcm90b3R5cGUsIG1peGluKSA6XG4gICAgICAgICAgICAgICAgaW5oZXJpdC5zZWxmKHJlcywgbWl4aW4pIDpcbiAgICAgICAgICAgIHJlcyA9IGlzRnVuY3Rpb24obWl4aW4pP1xuICAgICAgICAgICAgICAgIGluaGVyaXQobWl4aW5zWzBdLCBtaXhpbi5wcm90b3R5cGUsIG1peGluKSA6XG4gICAgICAgICAgICAgICAgaW5oZXJpdChtaXhpbnNbMF0sIG1peGluKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcyB8fCBtaXhpbnNbMF07XG59XG5cbi8qKlxuKiBDcmVhdGVzIGNsYXNzXG4qIEBleHBvcnRzXG4qIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IFtiYXNlQ2xhc3N8YmFzZUNsYXNzQW5kTWl4aW5zXSBjbGFzcyAob3IgY2xhc3MgYW5kIG1peGlucykgdG8gaW5oZXJpdCBmcm9tXG4qIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGVGaWVsZHNcbiogQHBhcmFtIHtPYmplY3R9IFtzdGF0aWNGaWVsZHNdXG4qIEByZXR1cm5zIHtGdW5jdGlvbn0gY2xhc3NcbiovXG5mdW5jdGlvbiBpbmhlcml0KCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICB3aXRoTWl4aW5zID0gaXNBcnJheShhcmdzWzBdKSxcbiAgICAgICAgaGFzQmFzZSA9IHdpdGhNaXhpbnMgfHwgaXNGdW5jdGlvbihhcmdzWzBdKSxcbiAgICAgICAgYmFzZSA9IGhhc0Jhc2U/IHdpdGhNaXhpbnM/IGFwcGx5TWl4aW5zKGFyZ3NbMF0pIDogYXJnc1swXSA6IGVtcHR5QmFzZSxcbiAgICAgICAgcHJvcHMgPSBhcmdzW2hhc0Jhc2U/IDEgOiAwXSB8fCB7fSxcbiAgICAgICAgc3RhdGljUHJvcHMgPSBhcmdzW2hhc0Jhc2U/IDIgOiAxXSxcbiAgICAgICAgcmVzID0gcHJvcHMuX19jb25zdHJ1Y3RvciB8fCAoaGFzQmFzZSAmJiBiYXNlLnByb3RvdHlwZS5fX2NvbnN0cnVjdG9yKT9cbiAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fY29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0gOlxuICAgICAgICAgICAgaGFzQmFzZT9cbiAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9IDpcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHt9O1xuXG4gICAgaWYoIWhhc0Jhc2UpIHtcbiAgICAgICAgcmVzLnByb3RvdHlwZSA9IHByb3BzO1xuICAgICAgICByZXMucHJvdG90eXBlLl9fc2VsZiA9IHJlcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByZXM7XG4gICAgICAgIHJldHVybiBleHRlbmQocmVzLCBzdGF0aWNQcm9wcyk7XG4gICAgfVxuXG4gICAgZXh0ZW5kKHJlcywgYmFzZSk7XG5cbiAgICByZXMuX19wYXJlbnQgPSBiYXNlO1xuXG4gICAgdmFyIGJhc2VQdHAgPSBiYXNlLnByb3RvdHlwZSxcbiAgICAgICAgcmVzUHRwID0gcmVzLnByb3RvdHlwZSA9IG9iakNyZWF0ZShiYXNlUHRwKTtcblxuICAgIHJlc1B0cC5fX3NlbGYgPSByZXNQdHAuY29uc3RydWN0b3IgPSByZXM7XG5cbiAgICBwcm9wcyAmJiBvdmVycmlkZShiYXNlUHRwLCByZXNQdHAsIHByb3BzKTtcbiAgICBzdGF0aWNQcm9wcyAmJiBvdmVycmlkZShiYXNlLCByZXMsIHN0YXRpY1Byb3BzKTtcblxuICAgIHJldHVybiByZXM7XG59XG5cbmluaGVyaXQuc2VsZiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICB3aXRoTWl4aW5zID0gaXNBcnJheShhcmdzWzBdKSxcbiAgICAgICAgYmFzZSA9IHdpdGhNaXhpbnM/IGFwcGx5TWl4aW5zKGFyZ3NbMF0sIGFyZ3NbMF1bMF0pIDogYXJnc1swXSxcbiAgICAgICAgcHJvcHMgPSBhcmdzWzFdLFxuICAgICAgICBzdGF0aWNQcm9wcyA9IGFyZ3NbMl0sXG4gICAgICAgIGJhc2VQdHAgPSBiYXNlLnByb3RvdHlwZTtcblxuICAgIHByb3BzICYmIG92ZXJyaWRlKGJhc2VQdHAsIGJhc2VQdHAsIHByb3BzKTtcbiAgICBzdGF0aWNQcm9wcyAmJiBvdmVycmlkZShiYXNlLCBiYXNlLCBzdGF0aWNQcm9wcyk7XG5cbiAgICByZXR1cm4gYmFzZTtcbn07XG5cbnZhciBkZWZpbmVBc0dsb2JhbCA9IHRydWU7XG5pZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGluaGVyaXQ7XG4gICAgZGVmaW5lQXNHbG9iYWwgPSBmYWxzZTtcbn1cblxuaWYodHlwZW9mIG1vZHVsZXMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlcy5kZWZpbmUoJ2luaGVyaXQnLCBmdW5jdGlvbihwcm92aWRlKSB7XG4gICAgICAgIHByb3ZpZGUoaW5oZXJpdCk7XG4gICAgfSk7XG4gICAgZGVmaW5lQXNHbG9iYWwgPSBmYWxzZTtcbn1cblxuaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRlZmluZShmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBpbmhlcml0O1xuICAgIH0pO1xuICAgIGRlZmluZUFzR2xvYmFsID0gZmFsc2U7XG59XG5cbmRlZmluZUFzR2xvYmFsICYmIChnbG9iYWwuaW5oZXJpdCA9IGluaGVyaXQpO1xuXG59KSh0aGlzKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8qXG4gKiAkSWQ6IGJhc2U2NC5qcyx2IDIuMTUgMjAxNC8wNC8wNSAxMjo1ODo1NyBkYW5rb2dhaSBFeHAgZGFua29nYWkgJFxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqXG4gKiAgUmVmZXJlbmNlczpcbiAqICAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0XG4gKi9cblxuKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBleGlzdGluZyB2ZXJzaW9uIGZvciBub0NvbmZsaWN0KClcbiAgICB2YXIgX0Jhc2U2NCA9IGdsb2JhbC5CYXNlNjQ7XG4gICAgdmFyIHZlcnNpb24gPSBcIjIuMS45XCI7XG4gICAgLy8gaWYgbm9kZS5qcywgd2UgdXNlIEJ1ZmZlclxuICAgIHZhciBidWZmZXI7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge31cbiAgICB9XG4gICAgLy8gY29uc3RhbnRzXG4gICAgdmFyIGI2NGNoYXJzXG4gICAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuICAgIHZhciBiNjR0YWIgPSBmdW5jdGlvbihiaW4pIHtcbiAgICAgICAgdmFyIHQgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBiaW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0W2Jpbi5jaGFyQXQoaSldID0gaTtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfShiNjRjaGFycyk7XG4gICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gICAgLy8gZW5jb2RlciBzdHVmZlxuICAgIHZhciBjYl91dG9iID0gZnVuY3Rpb24oYykge1xuICAgICAgICBpZiAoYy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICB2YXIgY2MgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICByZXR1cm4gY2MgPCAweDgwID8gY1xuICAgICAgICAgICAgICAgIDogY2MgPCAweDgwMCA/IChmcm9tQ2hhckNvZGUoMHhjMCB8IChjYyA+Pj4gNikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoY2MgJiAweDNmKSkpXG4gICAgICAgICAgICAgICAgOiAoZnJvbUNoYXJDb2RlKDB4ZTAgfCAoKGNjID4+PiAxMikgJiAweDBmKSlcbiAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKChjYyA+Pj4gIDYpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICggY2MgICAgICAgICAmIDB4M2YpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgY2MgPSAweDEwMDAwXG4gICAgICAgICAgICAgICAgKyAoYy5jaGFyQ29kZUF0KDApIC0gMHhEODAwKSAqIDB4NDAwXG4gICAgICAgICAgICAgICAgKyAoYy5jaGFyQ29kZUF0KDEpIC0gMHhEQzAwKTtcbiAgICAgICAgICAgIHJldHVybiAoZnJvbUNoYXJDb2RlKDB4ZjAgfCAoKGNjID4+PiAxOCkgJiAweDA3KSlcbiAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICgoY2MgPj4+IDEyKSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKChjYyA+Pj4gIDYpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoIGNjICAgICAgICAgJiAweDNmKSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgcmVfdXRvYiA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZGXXxbXlxceDAwLVxceDdGXS9nO1xuICAgIHZhciB1dG9iID0gZnVuY3Rpb24odSkge1xuICAgICAgICByZXR1cm4gdS5yZXBsYWNlKHJlX3V0b2IsIGNiX3V0b2IpO1xuICAgIH07XG4gICAgdmFyIGNiX2VuY29kZSA9IGZ1bmN0aW9uKGNjYykge1xuICAgICAgICB2YXIgcGFkbGVuID0gWzAsIDIsIDFdW2NjYy5sZW5ndGggJSAzXSxcbiAgICAgICAgb3JkID0gY2NjLmNoYXJDb2RlQXQoMCkgPDwgMTZcbiAgICAgICAgICAgIHwgKChjY2MubGVuZ3RoID4gMSA/IGNjYy5jaGFyQ29kZUF0KDEpIDogMCkgPDwgOClcbiAgICAgICAgICAgIHwgKChjY2MubGVuZ3RoID4gMiA/IGNjYy5jaGFyQ29kZUF0KDIpIDogMCkpLFxuICAgICAgICBjaGFycyA9IFtcbiAgICAgICAgICAgIGI2NGNoYXJzLmNoYXJBdCggb3JkID4+PiAxOCksXG4gICAgICAgICAgICBiNjRjaGFycy5jaGFyQXQoKG9yZCA+Pj4gMTIpICYgNjMpLFxuICAgICAgICAgICAgcGFkbGVuID49IDIgPyAnPScgOiBiNjRjaGFycy5jaGFyQXQoKG9yZCA+Pj4gNikgJiA2MyksXG4gICAgICAgICAgICBwYWRsZW4gPj0gMSA/ICc9JyA6IGI2NGNoYXJzLmNoYXJBdChvcmQgJiA2MylcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuICAgIH07XG4gICAgdmFyIGJ0b2EgPSBnbG9iYWwuYnRvYSA/IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5idG9hKGIpO1xuICAgIH0gOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiBiLnJlcGxhY2UoL1tcXHNcXFNdezEsM30vZywgY2JfZW5jb2RlKTtcbiAgICB9O1xuICAgIHZhciBfZW5jb2RlID0gYnVmZmVyID8gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgcmV0dXJuICh1LmNvbnN0cnVjdG9yID09PSBidWZmZXIuY29uc3RydWN0b3IgPyB1IDogbmV3IGJ1ZmZlcih1KSlcbiAgICAgICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIH1cbiAgICA6IGZ1bmN0aW9uICh1KSB7IHJldHVybiBidG9hKHV0b2IodSkpIH1cbiAgICA7XG4gICAgdmFyIGVuY29kZSA9IGZ1bmN0aW9uKHUsIHVyaXNhZmUpIHtcbiAgICAgICAgcmV0dXJuICF1cmlzYWZlXG4gICAgICAgICAgICA/IF9lbmNvZGUoU3RyaW5nKHUpKVxuICAgICAgICAgICAgOiBfZW5jb2RlKFN0cmluZyh1KSkucmVwbGFjZSgvWytcXC9dL2csIGZ1bmN0aW9uKG0wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG0wID09ICcrJyA/ICctJyA6ICdfJztcbiAgICAgICAgICAgIH0pLnJlcGxhY2UoLz0vZywgJycpO1xuICAgIH07XG4gICAgdmFyIGVuY29kZVVSSSA9IGZ1bmN0aW9uKHUpIHsgcmV0dXJuIGVuY29kZSh1LCB0cnVlKSB9O1xuICAgIC8vIGRlY29kZXIgc3R1ZmZcbiAgICB2YXIgcmVfYnRvdSA9IG5ldyBSZWdFeHAoW1xuICAgICAgICAnW1xceEMwLVxceERGXVtcXHg4MC1cXHhCRl0nLFxuICAgICAgICAnW1xceEUwLVxceEVGXVtcXHg4MC1cXHhCRl17Mn0nLFxuICAgICAgICAnW1xceEYwLVxceEY3XVtcXHg4MC1cXHhCRl17M30nXG4gICAgXS5qb2luKCd8JyksICdnJyk7XG4gICAgdmFyIGNiX2J0b3UgPSBmdW5jdGlvbihjY2NjKSB7XG4gICAgICAgIHN3aXRjaChjY2NjLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB2YXIgY3AgPSAoKDB4MDcgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDE4KVxuICAgICAgICAgICAgICAgIHwgICAgKCgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDEpKSA8PCAxMilcbiAgICAgICAgICAgICAgICB8ICAgICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgyKSkgPDwgIDYpXG4gICAgICAgICAgICAgICAgfCAgICAgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMykpLFxuICAgICAgICAgICAgb2Zmc2V0ID0gY3AgLSAweDEwMDAwO1xuICAgICAgICAgICAgcmV0dXJuIChmcm9tQ2hhckNvZGUoKG9mZnNldCAgPj4+IDEwKSArIDB4RDgwMClcbiAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoKG9mZnNldCAmIDB4M0ZGKSArIDB4REMwMCkpO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gZnJvbUNoYXJDb2RlKFxuICAgICAgICAgICAgICAgICgoMHgwZiAmIGNjY2MuY2hhckNvZGVBdCgwKSkgPDwgMTIpXG4gICAgICAgICAgICAgICAgICAgIHwgKCgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDEpKSA8PCA2KVxuICAgICAgICAgICAgICAgICAgICB8ICAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgyKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gIGZyb21DaGFyQ29kZShcbiAgICAgICAgICAgICAgICAoKDB4MWYgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDYpXG4gICAgICAgICAgICAgICAgICAgIHwgICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDEpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGJ0b3UgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiBiLnJlcGxhY2UocmVfYnRvdSwgY2JfYnRvdSk7XG4gICAgfTtcbiAgICB2YXIgY2JfZGVjb2RlID0gZnVuY3Rpb24oY2NjYykge1xuICAgICAgICB2YXIgbGVuID0gY2NjYy5sZW5ndGgsXG4gICAgICAgIHBhZGxlbiA9IGxlbiAlIDQsXG4gICAgICAgIG4gPSAobGVuID4gMCA/IGI2NHRhYltjY2NjLmNoYXJBdCgwKV0gPDwgMTggOiAwKVxuICAgICAgICAgICAgfCAobGVuID4gMSA/IGI2NHRhYltjY2NjLmNoYXJBdCgxKV0gPDwgMTIgOiAwKVxuICAgICAgICAgICAgfCAobGVuID4gMiA/IGI2NHRhYltjY2NjLmNoYXJBdCgyKV0gPDwgIDYgOiAwKVxuICAgICAgICAgICAgfCAobGVuID4gMyA/IGI2NHRhYltjY2NjLmNoYXJBdCgzKV0gICAgICAgOiAwKSxcbiAgICAgICAgY2hhcnMgPSBbXG4gICAgICAgICAgICBmcm9tQ2hhckNvZGUoIG4gPj4+IDE2KSxcbiAgICAgICAgICAgIGZyb21DaGFyQ29kZSgobiA+Pj4gIDgpICYgMHhmZiksXG4gICAgICAgICAgICBmcm9tQ2hhckNvZGUoIG4gICAgICAgICAmIDB4ZmYpXG4gICAgICAgIF07XG4gICAgICAgIGNoYXJzLmxlbmd0aCAtPSBbMCwgMCwgMiwgMV1bcGFkbGVuXTtcbiAgICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuICAgIH07XG4gICAgdmFyIGF0b2IgPSBnbG9iYWwuYXRvYiA/IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5hdG9iKGEpO1xuICAgIH0gOiBmdW5jdGlvbihhKXtcbiAgICAgICAgcmV0dXJuIGEucmVwbGFjZSgvW1xcc1xcU117MSw0fS9nLCBjYl9kZWNvZGUpO1xuICAgIH07XG4gICAgdmFyIF9kZWNvZGUgPSBidWZmZXIgPyBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiAoYS5jb25zdHJ1Y3RvciA9PT0gYnVmZmVyLmNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgPyBhIDogbmV3IGJ1ZmZlcihhLCAnYmFzZTY0JykpLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIDogZnVuY3Rpb24oYSkgeyByZXR1cm4gYnRvdShhdG9iKGEpKSB9O1xuICAgIHZhciBkZWNvZGUgPSBmdW5jdGlvbihhKXtcbiAgICAgICAgcmV0dXJuIF9kZWNvZGUoXG4gICAgICAgICAgICBTdHJpbmcoYSkucmVwbGFjZSgvWy1fXS9nLCBmdW5jdGlvbihtMCkgeyByZXR1cm4gbTAgPT0gJy0nID8gJysnIDogJy8nIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1teQS1aYS16MC05XFwrXFwvXS9nLCAnJylcbiAgICAgICAgKTtcbiAgICB9O1xuICAgIHZhciBub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBCYXNlNjQgPSBnbG9iYWwuQmFzZTY0O1xuICAgICAgICBnbG9iYWwuQmFzZTY0ID0gX0Jhc2U2NDtcbiAgICAgICAgcmV0dXJuIEJhc2U2NDtcbiAgICB9O1xuICAgIC8vIGV4cG9ydCBCYXNlNjRcbiAgICBnbG9iYWwuQmFzZTY0ID0ge1xuICAgICAgICBWRVJTSU9OOiB2ZXJzaW9uLFxuICAgICAgICBhdG9iOiBhdG9iLFxuICAgICAgICBidG9hOiBidG9hLFxuICAgICAgICBmcm9tQmFzZTY0OiBkZWNvZGUsXG4gICAgICAgIHRvQmFzZTY0OiBlbmNvZGUsXG4gICAgICAgIHV0b2I6IHV0b2IsXG4gICAgICAgIGVuY29kZTogZW5jb2RlLFxuICAgICAgICBlbmNvZGVVUkk6IGVuY29kZVVSSSxcbiAgICAgICAgYnRvdTogYnRvdSxcbiAgICAgICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgICAgIG5vQ29uZmxpY3Q6IG5vQ29uZmxpY3RcbiAgICB9O1xuICAgIC8vIGlmIEVTNSBpcyBhdmFpbGFibGUsIG1ha2UgQmFzZTY0LmV4dGVuZFN0cmluZygpIGF2YWlsYWJsZVxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBub0VudW0gPSBmdW5jdGlvbih2KXtcbiAgICAgICAgICAgIHJldHVybiB7dmFsdWU6dixlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9O1xuICAgICAgICB9O1xuICAgICAgICBnbG9iYWwuQmFzZTY0LmV4dGVuZFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBTdHJpbmcucHJvdG90eXBlLCAnZnJvbUJhc2U2NCcsIG5vRW51bShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGUodGhpcylcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgU3RyaW5nLnByb3RvdHlwZSwgJ3RvQmFzZTY0Jywgbm9FbnVtKGZ1bmN0aW9uICh1cmlzYWZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGUodGhpcywgdXJpc2FmZSlcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgU3RyaW5nLnByb3RvdHlwZSwgJ3RvQmFzZTY0VVJJJywgbm9FbnVtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZSh0aGlzLCB0cnVlKVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gdGhhdCdzIGl0IVxuICAgIGlmIChnbG9iYWxbJ01ldGVvciddKSB7XG4gICAgICAgQmFzZTY0ID0gZ2xvYmFsLkJhc2U2NDsgLy8gZm9yIG5vcm1hbCBleHBvcnQgaW4gTWV0ZW9yLmpzXG4gICAgfVxufSkodGhpcyk7XG4iLCIndXNlIHN0cmljdCc7XG5cblxudmFyIHlhbWwgPSByZXF1aXJlKCcuL2xpYi9qcy15YW1sLmpzJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSB5YW1sO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBsb2FkZXIgPSByZXF1aXJlKCcuL2pzLXlhbWwvbG9hZGVyJyk7XG52YXIgZHVtcGVyID0gcmVxdWlyZSgnLi9qcy15YW1sL2R1bXBlcicpO1xuXG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZWQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gJyArIG5hbWUgKyAnIGlzIGRlcHJlY2F0ZWQgYW5kIGNhbm5vdCBiZSB1c2VkLicpO1xuICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzLlR5cGUgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvdHlwZScpO1xubW9kdWxlLmV4cG9ydHMuU2NoZW1hICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEnKTtcbm1vZHVsZS5leHBvcnRzLkZBSUxTQUZFX1NDSEVNQSAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5KU09OX1NDSEVNQSAgICAgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9qc29uJyk7XG5tb2R1bGUuZXhwb3J0cy5DT1JFX1NDSEVNQSAgICAgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9jb3JlJyk7XG5tb2R1bGUuZXhwb3J0cy5ERUZBVUxUX1NBRkVfU0NIRU1BID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUnKTtcbm1vZHVsZS5leHBvcnRzLkRFRkFVTFRfRlVMTF9TQ0hFTUEgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbCcpO1xubW9kdWxlLmV4cG9ydHMubG9hZCAgICAgICAgICAgICAgICA9IGxvYWRlci5sb2FkO1xubW9kdWxlLmV4cG9ydHMubG9hZEFsbCAgICAgICAgICAgICA9IGxvYWRlci5sb2FkQWxsO1xubW9kdWxlLmV4cG9ydHMuc2FmZUxvYWQgICAgICAgICAgICA9IGxvYWRlci5zYWZlTG9hZDtcbm1vZHVsZS5leHBvcnRzLnNhZmVMb2FkQWxsICAgICAgICAgPSBsb2FkZXIuc2FmZUxvYWRBbGw7XG5tb2R1bGUuZXhwb3J0cy5kdW1wICAgICAgICAgICAgICAgID0gZHVtcGVyLmR1bXA7XG5tb2R1bGUuZXhwb3J0cy5zYWZlRHVtcCAgICAgICAgICAgID0gZHVtcGVyLnNhZmVEdW1wO1xubW9kdWxlLmV4cG9ydHMuWUFNTEV4Y2VwdGlvbiAgICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9leGNlcHRpb24nKTtcblxuLy8gRGVwcmVjYXRlZCBzY2hlbWEgbmFtZXMgZnJvbSBKUy1ZQU1MIDIuMC54XG5tb2R1bGUuZXhwb3J0cy5NSU5JTUFMX1NDSEVNQSA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZmFpbHNhZmUnKTtcbm1vZHVsZS5leHBvcnRzLlNBRkVfU0NIRU1BICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUnKTtcbm1vZHVsZS5leHBvcnRzLkRFRkFVTFRfU0NIRU1BID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwnKTtcblxuLy8gRGVwcmVjYXRlZCBmdW5jdGlvbnMgZnJvbSBKUy1ZQU1MIDEueC54XG5tb2R1bGUuZXhwb3J0cy5zY2FuICAgICAgICAgICA9IGRlcHJlY2F0ZWQoJ3NjYW4nKTtcbm1vZHVsZS5leHBvcnRzLnBhcnNlICAgICAgICAgID0gZGVwcmVjYXRlZCgncGFyc2UnKTtcbm1vZHVsZS5leHBvcnRzLmNvbXBvc2UgICAgICAgID0gZGVwcmVjYXRlZCgnY29tcG9zZScpO1xubW9kdWxlLmV4cG9ydHMuYWRkQ29uc3RydWN0b3IgPSBkZXByZWNhdGVkKCdhZGRDb25zdHJ1Y3RvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbmZ1bmN0aW9uIGlzTm90aGluZyhzdWJqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIHN1YmplY3QgPT09ICd1bmRlZmluZWQnKSB8fCAobnVsbCA9PT0gc3ViamVjdCk7XG59XG5cblxuZnVuY3Rpb24gaXNPYmplY3Qoc3ViamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBzdWJqZWN0ID09PSAnb2JqZWN0JykgJiYgKG51bGwgIT09IHN1YmplY3QpO1xufVxuXG5cbmZ1bmN0aW9uIHRvQXJyYXkoc2VxdWVuY2UpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2VxdWVuY2UpKSB7XG4gICAgcmV0dXJuIHNlcXVlbmNlO1xuICB9IGVsc2UgaWYgKGlzTm90aGluZyhzZXF1ZW5jZSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFsgc2VxdWVuY2UgXTtcbn1cblxuXG5mdW5jdGlvbiBleHRlbmQodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGluZGV4LCBsZW5ndGgsIGtleSwgc291cmNlS2V5cztcblxuICBpZiAoc291cmNlKSB7XG4gICAgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBrZXkgPSBzb3VyY2VLZXlzW2luZGV4XTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG5mdW5jdGlvbiByZXBlYXQoc3RyaW5nLCBjb3VudCkge1xuICB2YXIgcmVzdWx0ID0gJycsIGN5Y2xlO1xuXG4gIGZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvdW50OyBjeWNsZSArPSAxKSB7XG4gICAgcmVzdWx0ICs9IHN0cmluZztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gaXNOZWdhdGl2ZVplcm8obnVtYmVyKSB7XG4gIHJldHVybiAoMCA9PT0gbnVtYmVyKSAmJiAoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSAxIC8gbnVtYmVyKTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cy5pc05vdGhpbmcgICAgICA9IGlzTm90aGluZztcbm1vZHVsZS5leHBvcnRzLmlzT2JqZWN0ICAgICAgID0gaXNPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cy50b0FycmF5ICAgICAgICA9IHRvQXJyYXk7XG5tb2R1bGUuZXhwb3J0cy5yZXBlYXQgICAgICAgICA9IHJlcGVhdDtcbm1vZHVsZS5leHBvcnRzLmlzTmVnYXRpdmVaZXJvID0gaXNOZWdhdGl2ZVplcm87XG5tb2R1bGUuZXhwb3J0cy5leHRlbmQgICAgICAgICA9IGV4dGVuZDtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyplc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSovXG5cbnZhciBjb21tb24gICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9jb21tb24nKTtcbnZhciBZQU1MRXhjZXB0aW9uICAgICAgID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcbnZhciBERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZSgnLi9zY2hlbWEvZGVmYXVsdF9mdWxsJyk7XG52YXIgREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmUoJy4vc2NoZW1hL2RlZmF1bHRfc2FmZScpO1xuXG52YXIgX3RvU3RyaW5nICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgQ0hBUl9UQUIgICAgICAgICAgICAgICAgICA9IDB4MDk7IC8qIFRhYiAqL1xudmFyIENIQVJfTElORV9GRUVEICAgICAgICAgICAgPSAweDBBOyAvKiBMRiAqL1xudmFyIENIQVJfQ0FSUklBR0VfUkVUVVJOICAgICAgPSAweDBEOyAvKiBDUiAqL1xudmFyIENIQVJfU1BBQ0UgICAgICAgICAgICAgICAgPSAweDIwOyAvKiBTcGFjZSAqL1xudmFyIENIQVJfRVhDTEFNQVRJT04gICAgICAgICAgPSAweDIxOyAvKiAhICovXG52YXIgQ0hBUl9ET1VCTEVfUVVPVEUgICAgICAgICA9IDB4MjI7IC8qIFwiICovXG52YXIgQ0hBUl9TSEFSUCAgICAgICAgICAgICAgICA9IDB4MjM7IC8qICMgKi9cbnZhciBDSEFSX1BFUkNFTlQgICAgICAgICAgICAgID0gMHgyNTsgLyogJSAqL1xudmFyIENIQVJfQU1QRVJTQU5EICAgICAgICAgICAgPSAweDI2OyAvKiAmICovXG52YXIgQ0hBUl9TSU5HTEVfUVVPVEUgICAgICAgICA9IDB4Mjc7IC8qICcgKi9cbnZhciBDSEFSX0FTVEVSSVNLICAgICAgICAgICAgID0gMHgyQTsgLyogKiAqL1xudmFyIENIQVJfQ09NTUEgICAgICAgICAgICAgICAgPSAweDJDOyAvKiAsICovXG52YXIgQ0hBUl9NSU5VUyAgICAgICAgICAgICAgICA9IDB4MkQ7IC8qIC0gKi9cbnZhciBDSEFSX0NPTE9OICAgICAgICAgICAgICAgID0gMHgzQTsgLyogOiAqL1xudmFyIENIQVJfR1JFQVRFUl9USEFOICAgICAgICAgPSAweDNFOyAvKiA+ICovXG52YXIgQ0hBUl9RVUVTVElPTiAgICAgICAgICAgICA9IDB4M0Y7IC8qID8gKi9cbnZhciBDSEFSX0NPTU1FUkNJQUxfQVQgICAgICAgID0gMHg0MDsgLyogQCAqL1xudmFyIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCAgPSAweDVCOyAvKiBbICovXG52YXIgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCA9IDB4NUQ7IC8qIF0gKi9cbnZhciBDSEFSX0dSQVZFX0FDQ0VOVCAgICAgICAgID0gMHg2MDsgLyogYCAqL1xudmFyIENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICAgPSAweDdCOyAvKiB7ICovXG52YXIgQ0hBUl9WRVJUSUNBTF9MSU5FICAgICAgICA9IDB4N0M7IC8qIHwgKi9cbnZhciBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgID0gMHg3RDsgLyogfSAqL1xuXG52YXIgRVNDQVBFX1NFUVVFTkNFUyA9IHt9O1xuXG5FU0NBUEVfU0VRVUVOQ0VTWzB4MDBdICAgPSAnXFxcXDAnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDA3XSAgID0gJ1xcXFxhJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwOF0gICA9ICdcXFxcYic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MDldICAgPSAnXFxcXHQnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDBBXSAgID0gJ1xcXFxuJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwQl0gICA9ICdcXFxcdic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MENdICAgPSAnXFxcXGYnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDBEXSAgID0gJ1xcXFxyJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgxQl0gICA9ICdcXFxcZSc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MjJdICAgPSAnXFxcXFwiJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHg1Q10gICA9ICdcXFxcXFxcXCc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4ODVdICAgPSAnXFxcXE4nO1xuRVNDQVBFX1NFUVVFTkNFU1sweEEwXSAgID0gJ1xcXFxfJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgyMDI4XSA9ICdcXFxcTCc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MjAyOV0gPSAnXFxcXFAnO1xuXG52YXIgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVggPSBbXG4gICd5JywgJ1knLCAneWVzJywgJ1llcycsICdZRVMnLCAnb24nLCAnT24nLCAnT04nLFxuICAnbicsICdOJywgJ25vJywgJ05vJywgJ05PJywgJ29mZicsICdPZmYnLCAnT0ZGJ1xuXTtcblxuZnVuY3Rpb24gY29tcGlsZVN0eWxlTWFwKHNjaGVtYSwgbWFwKSB7XG4gIHZhciByZXN1bHQsIGtleXMsIGluZGV4LCBsZW5ndGgsIHRhZywgc3R5bGUsIHR5cGU7XG5cbiAgaWYgKG51bGwgPT09IG1hcCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJlc3VsdCA9IHt9O1xuICBrZXlzID0gT2JqZWN0LmtleXMobWFwKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdGFnID0ga2V5c1tpbmRleF07XG4gICAgc3R5bGUgPSBTdHJpbmcobWFwW3RhZ10pO1xuXG4gICAgaWYgKCchIScgPT09IHRhZy5zbGljZSgwLCAyKSkge1xuICAgICAgdGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWcuc2xpY2UoMik7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5jb21waWxlZFR5cGVNYXBbdGFnXTtcblxuICAgIGlmICh0eXBlICYmIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUuc3R5bGVBbGlhc2VzLCBzdHlsZSkpIHtcbiAgICAgIHN0eWxlID0gdHlwZS5zdHlsZUFsaWFzZXNbc3R5bGVdO1xuICAgIH1cblxuICAgIHJlc3VsdFt0YWddID0gc3R5bGU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBlbmNvZGVIZXgoY2hhcmFjdGVyKSB7XG4gIHZhciBzdHJpbmcsIGhhbmRsZSwgbGVuZ3RoO1xuXG4gIHN0cmluZyA9IGNoYXJhY3Rlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblxuICBpZiAoY2hhcmFjdGVyIDw9IDB4RkYpIHtcbiAgICBoYW5kbGUgPSAneCc7XG4gICAgbGVuZ3RoID0gMjtcbiAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPD0gMHhGRkZGKSB7XG4gICAgaGFuZGxlID0gJ3UnO1xuICAgIGxlbmd0aCA9IDQ7XG4gIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDB4RkZGRkZGRkYpIHtcbiAgICBoYW5kbGUgPSAnVSc7XG4gICAgbGVuZ3RoID0gODtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRicpO1xuICB9XG5cbiAgcmV0dXJuICdcXFxcJyArIGhhbmRsZSArIGNvbW1vbi5yZXBlYXQoJzAnLCBsZW5ndGggLSBzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn1cblxuZnVuY3Rpb24gU3RhdGUob3B0aW9ucykge1xuICB0aGlzLnNjaGVtYSAgICAgID0gb3B0aW9uc1snc2NoZW1hJ10gfHwgREVGQVVMVF9GVUxMX1NDSEVNQTtcbiAgdGhpcy5pbmRlbnQgICAgICA9IE1hdGgubWF4KDEsIChvcHRpb25zWydpbmRlbnQnXSB8fCAyKSk7XG4gIHRoaXMuc2tpcEludmFsaWQgPSBvcHRpb25zWydza2lwSW52YWxpZCddIHx8IGZhbHNlO1xuICB0aGlzLmZsb3dMZXZlbCAgID0gKGNvbW1vbi5pc05vdGhpbmcob3B0aW9uc1snZmxvd0xldmVsJ10pID8gLTEgOiBvcHRpb25zWydmbG93TGV2ZWwnXSk7XG4gIHRoaXMuc3R5bGVNYXAgICAgPSBjb21waWxlU3R5bGVNYXAodGhpcy5zY2hlbWEsIG9wdGlvbnNbJ3N0eWxlcyddIHx8IG51bGwpO1xuICB0aGlzLnNvcnRLZXlzICAgID0gb3B0aW9uc1snc29ydEtleXMnXSB8fCBmYWxzZTtcbiAgdGhpcy5saW5lV2lkdGggICAgPSBvcHRpb25zWydsaW5lV2lkdGgnXSB8fCA4MDtcblxuICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0O1xuICB0aGlzLmV4cGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEV4cGxpY2l0O1xuXG4gIHRoaXMudGFnID0gbnVsbDtcbiAgdGhpcy5yZXN1bHQgPSAnJztcblxuICB0aGlzLmR1cGxpY2F0ZXMgPSBbXTtcbiAgdGhpcy51c2VkRHVwbGljYXRlcyA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGVudFN0cmluZyhzdHJpbmcsIHNwYWNlcykge1xuICB2YXIgaW5kID0gY29tbW9uLnJlcGVhdCgnICcsIHNwYWNlcyksXG4gICAgICBwb3NpdGlvbiA9IDAsXG4gICAgICBuZXh0ID0gLTEsXG4gICAgICByZXN1bHQgPSAnJyxcbiAgICAgIGxpbmUsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkge1xuICAgIG5leHQgPSBzdHJpbmcuaW5kZXhPZignXFxuJywgcG9zaXRpb24pO1xuICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbiwgbmV4dCArIDEpO1xuICAgICAgcG9zaXRpb24gPSBuZXh0ICsgMTtcbiAgICB9XG4gICAgaWYgKGxpbmUubGVuZ3RoICYmIGxpbmUgIT09ICdcXG4nKSB7XG4gICAgICByZXN1bHQgKz0gaW5kO1xuICAgIH1cbiAgICByZXN1bHQgKz0gbGluZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKSB7XG4gIHJldHVybiAnXFxuJyArIGNvbW1vbi5yZXBlYXQoJyAnLCBzdGF0ZS5pbmRlbnQgKiBsZXZlbCk7XG59XG5cbmZ1bmN0aW9uIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZSwgc3RyKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCB0eXBlO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1tpbmRleF07XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlKHN0cikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gU3RyaW5nQnVpbGRlcihzb3VyY2UpIHtcbiAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gIHRoaXMucmVzdWx0ID0gJyc7XG4gIHRoaXMuY2hlY2twb2ludCA9IDA7XG59XG5cblN0cmluZ0J1aWxkZXIucHJvdG90eXBlLnRha2VVcFRvID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XG4gIHZhciBlcjtcblxuICBpZiAocG9zaXRpb24gPCB0aGlzLmNoZWNrcG9pbnQpIHtcbiAgICBlciA9IG5ldyBFcnJvcigncG9zaXRpb24gc2hvdWxkIGJlID4gY2hlY2twb2ludCcpO1xuICAgIGVyLnBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgZXIuY2hlY2twb2ludCA9IHRoaXMuY2hlY2twb2ludDtcbiAgICB0aHJvdyBlcjtcbiAgfVxuXG4gIHRoaXMucmVzdWx0ICs9IHRoaXMuc291cmNlLnNsaWNlKHRoaXMuY2hlY2twb2ludCwgcG9zaXRpb24pO1xuICB0aGlzLmNoZWNrcG9pbnQgPSBwb3NpdGlvbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5TdHJpbmdCdWlsZGVyLnByb3RvdHlwZS5lc2NhcGVDaGFyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY2hhcmFjdGVyLCBlc2M7XG5cbiAgY2hhcmFjdGVyID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmNoZWNrcG9pbnQpO1xuICBlc2MgPSBFU0NBUEVfU0VRVUVOQ0VTW2NoYXJhY3Rlcl0gfHwgZW5jb2RlSGV4KGNoYXJhY3Rlcik7XG4gIHRoaXMucmVzdWx0ICs9IGVzYztcbiAgdGhpcy5jaGVja3BvaW50ICs9IDE7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5TdHJpbmdCdWlsZGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnNvdXJjZS5sZW5ndGggPiB0aGlzLmNoZWNrcG9pbnQpIHtcbiAgICB0aGlzLnRha2VVcFRvKHRoaXMuc291cmNlLmxlbmd0aCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlLCBvYmplY3QsIGxldmVsLCBpc2tleSkge1xuICB2YXIgc2ltcGxlLCBmaXJzdCwgc3BhY2VXcmFwLCBmb2xkZWQsIGxpdGVyYWwsIHNpbmdsZSwgZG91YmxlLFxuICAgICAgc2F3TGluZUZlZWQsIGxpbmVQb3NpdGlvbiwgbG9uZ2VzdExpbmUsIGluZGVudCwgbWF4LCBjaGFyYWN0ZXIsXG4gICAgICBwb3NpdGlvbiwgZXNjYXBlU2VxLCBoZXhFc2MsIHByZXZpb3VzLCBsaW5lTGVuZ3RoLCBtb2RpZmllcixcbiAgICAgIHRyYWlsaW5nTGluZUJyZWFrcywgcmVzdWx0O1xuXG4gIGlmICgwID09PSBvYmplY3QubGVuZ3RoKSB7XG4gICAgc3RhdGUuZHVtcCA9IFwiJydcIjtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoLTEgIT09IERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYLmluZGV4T2Yob2JqZWN0KSkge1xuICAgIHN0YXRlLmR1bXAgPSBcIidcIiArIG9iamVjdCArIFwiJ1wiO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHNpbXBsZSA9IHRydWU7XG4gIGZpcnN0ID0gb2JqZWN0Lmxlbmd0aCA/IG9iamVjdC5jaGFyQ29kZUF0KDApIDogMDtcbiAgc3BhY2VXcmFwID0gKENIQVJfU1BBQ0UgPT09IGZpcnN0IHx8XG4gICAgICAgICAgICAgICBDSEFSX1NQQUNFID09PSBvYmplY3QuY2hhckNvZGVBdChvYmplY3QubGVuZ3RoIC0gMSkpO1xuXG4gIC8vIFNpbXBsaWZpZWQgY2hlY2sgZm9yIHJlc3RyaWN0ZWQgZmlyc3QgY2hhcmFjdGVyc1xuICAvLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNucy1wbGFpbi1maXJzdCUyOGMlMjlcbiAgaWYgKENIQVJfTUlOVVMgICAgICAgICA9PT0gZmlyc3QgfHxcbiAgICAgIENIQVJfUVVFU1RJT04gICAgICA9PT0gZmlyc3QgfHxcbiAgICAgIENIQVJfQ09NTUVSQ0lBTF9BVCA9PT0gZmlyc3QgfHxcbiAgICAgIENIQVJfR1JBVkVfQUNDRU5UICA9PT0gZmlyc3QpIHtcbiAgICBzaW1wbGUgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGNhbiBvbmx5IHVzZSA+IGFuZCB8IGlmIG5vdCB3cmFwcGVkIGluIHNwYWNlcyBvciBpcyBub3QgYSBrZXkuXG4gIGlmIChzcGFjZVdyYXApIHtcbiAgICBzaW1wbGUgPSBmYWxzZTtcbiAgICBmb2xkZWQgPSBmYWxzZTtcbiAgICBsaXRlcmFsID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgZm9sZGVkID0gIWlza2V5O1xuICAgIGxpdGVyYWwgPSAhaXNrZXk7XG4gIH1cblxuICBzaW5nbGUgPSB0cnVlO1xuICBkb3VibGUgPSBuZXcgU3RyaW5nQnVpbGRlcihvYmplY3QpO1xuXG4gIHNhd0xpbmVGZWVkID0gZmFsc2U7XG4gIGxpbmVQb3NpdGlvbiA9IDA7XG4gIGxvbmdlc3RMaW5lID0gMDtcblxuICBpbmRlbnQgPSBzdGF0ZS5pbmRlbnQgKiBsZXZlbDtcbiAgbWF4ID0gc3RhdGUubGluZVdpZHRoO1xuICBpZiAobWF4ID09PSAtMSkge1xuICAgIC8vIFJlcGxhY2UgLTEgd2l0aCBiaWdnZXN0IGluZ2VnZXIgbnVtYmVyIGFjY29yZGluZyB0b1xuICAgIC8vIGh0dHA6Ly9lY21hMjYyLTUuY29tL0VMUzVfSFRNTC5odG0jU2VjdGlvbl84LjVcbiAgICBtYXggPSA5MDA3MTk5MjU0NzQwOTkxO1xuICB9XG5cbiAgaWYgKGluZGVudCA8IDQwKSB7XG4gICAgbWF4IC09IGluZGVudDtcbiAgfSBlbHNlIHtcbiAgICBtYXggPSA0MDtcbiAgfVxuXG4gIGZvciAocG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IG9iamVjdC5sZW5ndGg7IHBvc2l0aW9uKyspIHtcbiAgICBjaGFyYWN0ZXIgPSBvYmplY3QuY2hhckNvZGVBdChwb3NpdGlvbik7XG4gICAgaWYgKHNpbXBsZSkge1xuICAgICAgLy8gQ2hhcmFjdGVycyB0aGF0IGNhbiBuZXZlciBhcHBlYXIgaW4gdGhlIHNpbXBsZSBzY2FsYXJcbiAgICAgIGlmICghc2ltcGxlQ2hhcihjaGFyYWN0ZXIpKSB7XG4gICAgICAgIHNpbXBsZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3RpbGwgc2ltcGxlLiAgSWYgd2UgbWFrZSBpdCBhbGwgdGhlIHdheSB0aHJvdWdoIGxpa2VcbiAgICAgICAgLy8gdGhpcywgdGhlbiB3ZSBjYW4ganVzdCBkdW1wIHRoZSBzdHJpbmcgYXMtaXMuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaW5nbGUgJiYgY2hhcmFjdGVyID09PSBDSEFSX1NJTkdMRV9RVU9URSkge1xuICAgICAgc2luZ2xlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZXNjYXBlU2VxID0gRVNDQVBFX1NFUVVFTkNFU1tjaGFyYWN0ZXJdO1xuICAgIGhleEVzYyA9IG5lZWRzSGV4RXNjYXBlKGNoYXJhY3Rlcik7XG5cbiAgICBpZiAoIWVzY2FwZVNlcSAmJiAhaGV4RXNjKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9PSBDSEFSX0xJTkVfRkVFRCAmJlxuICAgICAgICBjaGFyYWN0ZXIgIT09IENIQVJfRE9VQkxFX1FVT1RFICYmXG4gICAgICAgIGNoYXJhY3RlciAhPT0gQ0hBUl9TSU5HTEVfUVVPVEUpIHtcbiAgICAgIGZvbGRlZCA9IGZhbHNlO1xuICAgICAgbGl0ZXJhbCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBDSEFSX0xJTkVfRkVFRCkge1xuICAgICAgc2F3TGluZUZlZWQgPSB0cnVlO1xuICAgICAgc2luZ2xlID0gZmFsc2U7XG4gICAgICBpZiAocG9zaXRpb24gPiAwKSB7XG4gICAgICAgIHByZXZpb3VzID0gb2JqZWN0LmNoYXJDb2RlQXQocG9zaXRpb24gLSAxKTtcbiAgICAgICAgaWYgKHByZXZpb3VzID09PSBDSEFSX1NQQUNFKSB7XG4gICAgICAgICAgbGl0ZXJhbCA9IGZhbHNlO1xuICAgICAgICAgIGZvbGRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm9sZGVkKSB7XG4gICAgICAgIGxpbmVMZW5ndGggPSBwb3NpdGlvbiAtIGxpbmVQb3NpdGlvbjtcbiAgICAgICAgbGluZVBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIGlmIChsaW5lTGVuZ3RoID4gbG9uZ2VzdExpbmUpIHtcbiAgICAgICAgICBsb25nZXN0TGluZSA9IGxpbmVMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9PSBDSEFSX0RPVUJMRV9RVU9URSkge1xuICAgICAgc2luZ2xlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZG91YmxlLnRha2VVcFRvKHBvc2l0aW9uKTtcbiAgICBkb3VibGUuZXNjYXBlQ2hhcigpO1xuICB9XG5cbiAgaWYgKHNpbXBsZSAmJiB0ZXN0SW1wbGljaXRSZXNvbHZpbmcoc3RhdGUsIG9iamVjdCkpIHtcbiAgICBzaW1wbGUgPSBmYWxzZTtcbiAgfVxuXG4gIG1vZGlmaWVyID0gJyc7XG4gIGlmIChmb2xkZWQgfHwgbGl0ZXJhbCkge1xuICAgIHRyYWlsaW5nTGluZUJyZWFrcyA9IDA7XG4gICAgaWYgKG9iamVjdC5jaGFyQ29kZUF0KG9iamVjdC5sZW5ndGggLSAxKSA9PT0gQ0hBUl9MSU5FX0ZFRUQpIHtcbiAgICAgIHRyYWlsaW5nTGluZUJyZWFrcyArPSAxO1xuICAgICAgaWYgKG9iamVjdC5jaGFyQ29kZUF0KG9iamVjdC5sZW5ndGggLSAyKSA9PT0gQ0hBUl9MSU5FX0ZFRUQpIHtcbiAgICAgICAgdHJhaWxpbmdMaW5lQnJlYWtzICs9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRyYWlsaW5nTGluZUJyZWFrcyA9PT0gMCkge1xuICAgICAgbW9kaWZpZXIgPSAnLSc7XG4gICAgfSBlbHNlIGlmICh0cmFpbGluZ0xpbmVCcmVha3MgPT09IDIpIHtcbiAgICAgIG1vZGlmaWVyID0gJysnO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsaXRlcmFsICYmIGxvbmdlc3RMaW5lIDwgbWF4KSB7XG4gICAgZm9sZGVkID0gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBpdCdzIGxpdGVyYWxseSBvbmUgbGluZSwgdGhlbiBkb24ndCBib3RoZXIgd2l0aCB0aGUgbGl0ZXJhbC5cbiAgLy8gV2UgbWF5IHN0aWxsIHdhbnQgdG8gZG8gYSBmb2xkLCB0aG91Z2gsIGlmIGl0J3MgYSBzdXBlciBsb25nIGxpbmUuXG4gIGlmICghc2F3TGluZUZlZWQpIHtcbiAgICBsaXRlcmFsID0gZmFsc2U7XG4gIH1cblxuICBpZiAoc2ltcGxlKSB7XG4gICAgc3RhdGUuZHVtcCA9IG9iamVjdDtcbiAgfSBlbHNlIGlmIChzaW5nbGUpIHtcbiAgICBzdGF0ZS5kdW1wID0gJ1xcJycgKyBvYmplY3QgKyAnXFwnJztcbiAgfSBlbHNlIGlmIChmb2xkZWQpIHtcbiAgICByZXN1bHQgPSBmb2xkKG9iamVjdCwgbWF4KTtcbiAgICBzdGF0ZS5kdW1wID0gJz4nICsgbW9kaWZpZXIgKyAnXFxuJyArIGluZGVudFN0cmluZyhyZXN1bHQsIGluZGVudCk7XG4gIH0gZWxzZSBpZiAobGl0ZXJhbCkge1xuICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdC5yZXBsYWNlKC9cXG4kLywgJycpO1xuICAgIH1cbiAgICBzdGF0ZS5kdW1wID0gJ3wnICsgbW9kaWZpZXIgKyAnXFxuJyArIGluZGVudFN0cmluZyhvYmplY3QsIGluZGVudCk7XG4gIH0gZWxzZSBpZiAoZG91YmxlKSB7XG4gICAgZG91YmxlLmZpbmlzaCgpO1xuICAgIHN0YXRlLmR1bXAgPSAnXCInICsgZG91YmxlLnJlc3VsdCArICdcIic7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZHVtcCBzY2FsYXIgdmFsdWUnKTtcbiAgfVxuXG4gIHJldHVybjtcbn1cblxuLy8gVGhlIGB0cmFpbGluZ2AgdmFyIGlzIGEgcmVnZXhwIG1hdGNoIG9mIGFueSB0cmFpbGluZyBgXFxuYCBjaGFyYWN0ZXJzLlxuLy9cbi8vIFRoZXJlIGFyZSB0aHJlZSBjYXNlcyB3ZSBjYXJlIGFib3V0OlxuLy9cbi8vIDEuIE9uZSB0cmFpbGluZyBgXFxuYCBvbiB0aGUgc3RyaW5nLiAgSnVzdCB1c2UgYHxgIG9yIGA+YC5cbi8vICAgIFRoaXMgaXMgdGhlIGFzc3VtZWQgZGVmYXVsdC4gKHRyYWlsaW5nID0gbnVsbClcbi8vIDIuIE5vIHRyYWlsaW5nIGBcXG5gIG9uIHRoZSBzdHJpbmcuICBVc2UgYHwtYCBvciBgPi1gIHRvIFwiY2hvbXBcIiB0aGUgZW5kLlxuLy8gMy4gTW9yZSB0aGFuIG9uZSB0cmFpbGluZyBgXFxuYCBvbiB0aGUgc3RyaW5nLiAgVXNlIGB8K2Agb3IgYD4rYC5cbi8vXG4vLyBJbiB0aGUgY2FzZSBvZiBgPitgLCB0aGVzZSBsaW5lIGJyZWFrcyBhcmUgKm5vdCogZG91YmxlZCAobGlrZSB0aGUgbGluZVxuLy8gYnJlYWtzIHdpdGhpbiB0aGUgc3RyaW5nKSwgc28gaXQncyBpbXBvcnRhbnQgdG8gb25seSBlbmQgd2l0aCB0aGUgZXhhY3Rcbi8vIHNhbWUgbnVtYmVyIGFzIHdlIHN0YXJ0ZWQuXG5mdW5jdGlvbiBmb2xkKG9iamVjdCwgbWF4KSB7XG4gIHZhciByZXN1bHQgPSAnJyxcbiAgICAgIHBvc2l0aW9uID0gMCxcbiAgICAgIGxlbmd0aCA9IG9iamVjdC5sZW5ndGgsXG4gICAgICB0cmFpbGluZyA9IC9cXG4rJC8uZXhlYyhvYmplY3QpLFxuICAgICAgbmV3TGluZTtcblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBsZW5ndGggPSB0cmFpbGluZy5pbmRleCArIDE7XG4gIH1cblxuICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICBuZXdMaW5lID0gb2JqZWN0LmluZGV4T2YoJ1xcbicsIHBvc2l0aW9uKTtcbiAgICBpZiAobmV3TGluZSA+IGxlbmd0aCB8fCBuZXdMaW5lID09PSAtMSkge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXN1bHQgKz0gJ1xcblxcbic7XG4gICAgICB9XG4gICAgICByZXN1bHQgKz0gZm9sZExpbmUob2JqZWN0LnNsaWNlKHBvc2l0aW9uLCBsZW5ndGgpLCBtYXgpO1xuICAgICAgcG9zaXRpb24gPSBsZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0ICs9ICdcXG5cXG4nO1xuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IGZvbGRMaW5lKG9iamVjdC5zbGljZShwb3NpdGlvbiwgbmV3TGluZSksIG1heCk7XG4gICAgICBwb3NpdGlvbiA9IG5ld0xpbmUgKyAxO1xuICAgIH1cbiAgfVxuICBpZiAodHJhaWxpbmcgJiYgdHJhaWxpbmdbMF0gIT09ICdcXG4nKSB7XG4gICAgcmVzdWx0ICs9IHRyYWlsaW5nWzBdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZm9sZExpbmUobGluZSwgbWF4KSB7XG4gIGlmIChsaW5lID09PSAnJykge1xuICAgIHJldHVybiBsaW5lO1xuICB9XG5cbiAgdmFyIGZvbGRSZSA9IC9bXlxcc10gW15cXHNdL2csXG4gICAgICByZXN1bHQgPSAnJyxcbiAgICAgIHByZXZNYXRjaCA9IDAsXG4gICAgICBmb2xkU3RhcnQgPSAwLFxuICAgICAgbWF0Y2ggPSBmb2xkUmUuZXhlYyhsaW5lKSxcbiAgICAgIGluZGV4LFxuICAgICAgZm9sZEVuZCxcbiAgICAgIGZvbGRlZDtcblxuICB3aGlsZSAobWF0Y2gpIHtcbiAgICBpbmRleCA9IG1hdGNoLmluZGV4O1xuXG4gICAgLy8gd2hlbiB3ZSBjcm9zcyB0aGUgbWF4IGxlbiwgaWYgdGhlIHByZXZpb3VzIG1hdGNoIHdvdWxkJ3ZlXG4gICAgLy8gYmVlbiBvaywgdXNlIHRoYXQgb25lLCBhbmQgY2Fycnkgb24uICBJZiB0aGVyZSB3YXMgbm8gcHJldmlvdXNcbiAgICAvLyBtYXRjaCBvbiB0aGlzIGZvbGQgc2VjdGlvbiwgdGhlbiBqdXN0IGhhdmUgYSBsb25nIGxpbmUuXG4gICAgaWYgKGluZGV4IC0gZm9sZFN0YXJ0ID4gbWF4KSB7XG4gICAgICBpZiAocHJldk1hdGNoICE9PSBmb2xkU3RhcnQpIHtcbiAgICAgICAgZm9sZEVuZCA9IHByZXZNYXRjaDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvbGRFbmQgPSBpbmRleDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICB9XG4gICAgICBmb2xkZWQgPSBsaW5lLnNsaWNlKGZvbGRTdGFydCwgZm9sZEVuZCk7XG4gICAgICByZXN1bHQgKz0gZm9sZGVkO1xuICAgICAgZm9sZFN0YXJ0ID0gZm9sZEVuZCArIDE7XG4gICAgfVxuICAgIHByZXZNYXRjaCA9IGluZGV4ICsgMTtcbiAgICBtYXRjaCA9IGZvbGRSZS5leGVjKGxpbmUpO1xuICB9XG5cbiAgaWYgKHJlc3VsdCkge1xuICAgIHJlc3VsdCArPSAnXFxuJztcbiAgfVxuXG4gIC8vIGlmIHdlIGVuZCB1cCB3aXRoIG9uZSBsYXN0IHdvcmQgYXQgdGhlIGVuZCwgdGhlbiB0aGUgbGFzdCBiaXQgbWlnaHRcbiAgLy8gYmUgc2xpZ2h0bHkgYmlnZ2VyIHRoYW4gd2Ugd2FudGVkLCBiZWNhdXNlIHdlIGV4aXRlZCBvdXQgb2YgdGhlIGxvb3AuXG4gIGlmIChmb2xkU3RhcnQgIT09IHByZXZNYXRjaCAmJiBsaW5lLmxlbmd0aCAtIGZvbGRTdGFydCA+IG1heCkge1xuICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKGZvbGRTdGFydCwgcHJldk1hdGNoKSArICdcXG4nICtcbiAgICAgICAgICAgICAgbGluZS5zbGljZShwcmV2TWF0Y2ggKyAxKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgKz0gbGluZS5zbGljZShmb2xkU3RhcnQpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIGNoYXJhY3RlciBjYW4gYmUgZm91bmQgaW4gYSBzaW1wbGUgc2NhbGFyXG5mdW5jdGlvbiBzaW1wbGVDaGFyKGNoYXJhY3Rlcikge1xuICByZXR1cm4gQ0hBUl9UQUIgICAgICAgICAgICAgICAgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX0xJTkVfRkVFRCAgICAgICAgICAgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfQ0FSUklBR0VfUkVUVVJOICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9DT01NQSAgICAgICAgICAgICAgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfU0hBUlAgICAgICAgICAgICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9BTVBFUlNBTkQgICAgICAgICAgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX0FTVEVSSVNLICAgICAgICAgICAgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfRVhDTEFNQVRJT04gICAgICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9WRVJUSUNBTF9MSU5FICAgICAgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX0dSRUFURVJfVEhBTiAgICAgICAgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfU0lOR0xFX1FVT1RFICAgICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9ET1VCTEVfUVVPVEUgICAgICAgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX1BFUkNFTlQgICAgICAgICAgICAgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfQ09MT04gICAgICAgICAgICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgIUVTQ0FQRV9TRVFVRU5DRVNbY2hhcmFjdGVyXSAgICAgICAgICAgICYmXG4gICAgICAgICAhbmVlZHNIZXhFc2NhcGUoY2hhcmFjdGVyKTtcbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgY29kZSBuZWVkcyB0byBiZSBlc2NhcGVkLlxuZnVuY3Rpb24gbmVlZHNIZXhFc2NhcGUoY2hhcmFjdGVyKSB7XG4gIHJldHVybiAhKCgweDAwMDIwIDw9IGNoYXJhY3RlciAmJiBjaGFyYWN0ZXIgPD0gMHgwMDAwN0UpIHx8XG4gICAgICAgICAgICgweDAwMDg1ID09PSBjaGFyYWN0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICAgICAgICgweDAwMEEwIDw9IGNoYXJhY3RlciAmJiBjaGFyYWN0ZXIgPD0gMHgwMEQ3RkYpIHx8XG4gICAgICAgICAgICgweDBFMDAwIDw9IGNoYXJhY3RlciAmJiBjaGFyYWN0ZXIgPD0gMHgwMEZGRkQpIHx8XG4gICAgICAgICAgICgweDEwMDAwIDw9IGNoYXJhY3RlciAmJiBjaGFyYWN0ZXIgPD0gMHgxMEZGRkYpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBvYmplY3QpIHtcbiAgdmFyIF9yZXN1bHQgPSAnJyxcbiAgICAgIF90YWcgICAgPSBzdGF0ZS50YWcsXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aDtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAvLyBXcml0ZSBvbmx5IHZhbGlkIGVsZW1lbnRzLlxuICAgIGlmICh3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3RbaW5kZXhdLCBmYWxzZSwgZmFsc2UpKSB7XG4gICAgICBpZiAoMCAhPT0gaW5kZXgpIHtcbiAgICAgICAgX3Jlc3VsdCArPSAnLCAnO1xuICAgICAgfVxuICAgICAgX3Jlc3VsdCArPSBzdGF0ZS5kdW1wO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSAnWycgKyBfcmVzdWx0ICsgJ10nO1xufVxuXG5mdW5jdGlvbiB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBvYmplY3QsIGNvbXBhY3QpIHtcbiAgdmFyIF9yZXN1bHQgPSAnJyxcbiAgICAgIF90YWcgICAgPSBzdGF0ZS50YWcsXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aDtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAvLyBXcml0ZSBvbmx5IHZhbGlkIGVsZW1lbnRzLlxuICAgIGlmICh3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0W2luZGV4XSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIGlmICghY29tcGFjdCB8fCAwICE9PSBpbmRleCkge1xuICAgICAgICBfcmVzdWx0ICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICAgIH1cbiAgICAgIF9yZXN1bHQgKz0gJy0gJyArIHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgJ1tdJzsgLy8gRW1wdHkgc2VxdWVuY2UgaWYgbm8gdmFsaWQgdmFsdWVzLlxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlLCBsZXZlbCwgb2JqZWN0KSB7XG4gIHZhciBfcmVzdWx0ICAgICAgID0gJycsXG4gICAgICBfdGFnICAgICAgICAgID0gc3RhdGUudGFnLFxuICAgICAgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aCxcbiAgICAgIG9iamVjdEtleSxcbiAgICAgIG9iamVjdFZhbHVlLFxuICAgICAgcGFpckJ1ZmZlcjtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpckJ1ZmZlciA9ICcnO1xuXG4gICAgaWYgKDAgIT09IGluZGV4KSB7XG4gICAgICBwYWlyQnVmZmVyICs9ICcsICc7XG4gICAgfVxuXG4gICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleF07XG4gICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTtcblxuICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0S2V5LCBmYWxzZSwgZmFsc2UpKSB7XG4gICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIHBhaXIgYmVjYXVzZSBvZiBpbnZhbGlkIGtleTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuZHVtcC5sZW5ndGggPiAxMDI0KSB7XG4gICAgICBwYWlyQnVmZmVyICs9ICc/ICc7XG4gICAgfVxuXG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wICsgJzogJztcblxuICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0VmFsdWUsIGZhbHNlLCBmYWxzZSkpIHtcbiAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgcGFpciBiZWNhdXNlIG9mIGludmFsaWQgdmFsdWUuXG4gICAgfVxuXG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wO1xuXG4gICAgLy8gQm90aCBrZXkgYW5kIHZhbHVlIGFyZSB2YWxpZC5cbiAgICBfcmVzdWx0ICs9IHBhaXJCdWZmZXI7XG4gIH1cblxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gJ3snICsgX3Jlc3VsdCArICd9Jztcbn1cblxuZnVuY3Rpb24gd3JpdGVCbG9ja01hcHBpbmcoc3RhdGUsIGxldmVsLCBvYmplY3QsIGNvbXBhY3QpIHtcbiAgdmFyIF9yZXN1bHQgICAgICAgPSAnJyxcbiAgICAgIF90YWcgICAgICAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KSxcbiAgICAgIGluZGV4LFxuICAgICAgbGVuZ3RoLFxuICAgICAgb2JqZWN0S2V5LFxuICAgICAgb2JqZWN0VmFsdWUsXG4gICAgICBleHBsaWNpdFBhaXIsXG4gICAgICBwYWlyQnVmZmVyO1xuXG4gIC8vIEFsbG93IHNvcnRpbmcga2V5cyBzbyB0aGF0IHRoZSBvdXRwdXQgZmlsZSBpcyBkZXRlcm1pbmlzdGljXG4gIGlmIChzdGF0ZS5zb3J0S2V5cyA9PT0gdHJ1ZSkge1xuICAgIC8vIERlZmF1bHQgc29ydGluZ1xuICAgIG9iamVjdEtleUxpc3Quc29ydCgpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzdGF0ZS5zb3J0S2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEN1c3RvbSBzb3J0IGZ1bmN0aW9uXG4gICAgb2JqZWN0S2V5TGlzdC5zb3J0KHN0YXRlLnNvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5zb3J0S2V5cykge1xuICAgIC8vIFNvbWV0aGluZyBpcyB3cm9uZ1xuICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpckJ1ZmZlciA9ICcnO1xuXG4gICAgaWYgKCFjb21wYWN0IHx8IDAgIT09IGluZGV4KSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4XTtcbiAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldO1xuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0S2V5LCB0cnVlLCB0cnVlLCB0cnVlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXkuXG4gICAgfVxuXG4gICAgZXhwbGljaXRQYWlyID0gKG51bGwgIT09IHN0YXRlLnRhZyAmJiAnPycgIT09IHN0YXRlLnRhZykgfHxcbiAgICAgICAgICAgICAgICAgICAoc3RhdGUuZHVtcCAmJiBzdGF0ZS5kdW1wLmxlbmd0aCA+IDEwMjQpO1xuXG4gICAgaWYgKGV4cGxpY2l0UGFpcikge1xuICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICBwYWlyQnVmZmVyICs9ICc/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhaXJCdWZmZXIgKz0gJz8gJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICBpZiAoZXhwbGljaXRQYWlyKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RWYWx1ZSwgdHJ1ZSwgZXhwbGljaXRQYWlyKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICBwYWlyQnVmZmVyICs9ICc6JztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFpckJ1ZmZlciArPSAnOiAnO1xuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIC8vIEJvdGgga2V5IGFuZCB2YWx1ZSBhcmUgdmFsaWQuXG4gICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyO1xuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgJ3t9JzsgLy8gRW1wdHkgbWFwcGluZyBpZiBubyB2YWxpZCBwYWlycy5cbn1cblxuZnVuY3Rpb24gZGV0ZWN0VHlwZShzdGF0ZSwgb2JqZWN0LCBleHBsaWNpdCkge1xuICB2YXIgX3Jlc3VsdCwgdHlwZUxpc3QsIGluZGV4LCBsZW5ndGgsIHR5cGUsIHN0eWxlO1xuXG4gIHR5cGVMaXN0ID0gZXhwbGljaXQgPyBzdGF0ZS5leHBsaWNpdFR5cGVzIDogc3RhdGUuaW1wbGljaXRUeXBlcztcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUgPSB0eXBlTGlzdFtpbmRleF07XG5cbiAgICBpZiAoKHR5cGUuaW5zdGFuY2VPZiAgfHwgdHlwZS5wcmVkaWNhdGUpICYmXG4gICAgICAgICghdHlwZS5pbnN0YW5jZU9mIHx8ICgoJ29iamVjdCcgPT09IHR5cGVvZiBvYmplY3QpICYmIChvYmplY3QgaW5zdGFuY2VvZiB0eXBlLmluc3RhbmNlT2YpKSkgJiZcbiAgICAgICAgKCF0eXBlLnByZWRpY2F0ZSAgfHwgdHlwZS5wcmVkaWNhdGUob2JqZWN0KSkpIHtcblxuICAgICAgc3RhdGUudGFnID0gZXhwbGljaXQgPyB0eXBlLnRhZyA6ICc/JztcblxuICAgICAgaWYgKHR5cGUucmVwcmVzZW50KSB7XG4gICAgICAgIHN0eWxlID0gc3RhdGUuc3R5bGVNYXBbdHlwZS50YWddIHx8IHR5cGUuZGVmYXVsdFN0eWxlO1xuXG4gICAgICAgIGlmICgnW29iamVjdCBGdW5jdGlvbl0nID09PSBfdG9TdHJpbmcuY2FsbCh0eXBlLnJlcHJlc2VudCkpIHtcbiAgICAgICAgICBfcmVzdWx0ID0gdHlwZS5yZXByZXNlbnQob2JqZWN0LCBzdHlsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwodHlwZS5yZXByZXNlbnQsIHN0eWxlKSkge1xuICAgICAgICAgIF9yZXN1bHQgPSB0eXBlLnJlcHJlc2VudFtzdHlsZV0ob2JqZWN0LCBzdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJyE8JyArIHR5cGUudGFnICsgJz4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90IFwiJyArIHN0eWxlICsgJ1wiIHN0eWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5kdW1wID0gX3Jlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTZXJpYWxpemVzIGBvYmplY3RgIGFuZCB3cml0ZXMgaXQgdG8gZ2xvYmFsIGByZXN1bHRgLlxuLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGludmFsaWQgb2JqZWN0LlxuLy9cbmZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5KSB7XG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmR1bXAgPSBvYmplY3Q7XG5cbiAgaWYgKCFkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIGZhbHNlKSkge1xuICAgIGRldGVjdFR5cGUoc3RhdGUsIG9iamVjdCwgdHJ1ZSk7XG4gIH1cblxuICB2YXIgdHlwZSA9IF90b1N0cmluZy5jYWxsKHN0YXRlLmR1bXApO1xuXG4gIGlmIChibG9jaykge1xuICAgIGJsb2NrID0gKDAgPiBzdGF0ZS5mbG93TGV2ZWwgfHwgc3RhdGUuZmxvd0xldmVsID4gbGV2ZWwpO1xuICB9XG5cbiAgdmFyIG9iamVjdE9yQXJyYXkgPSAnW29iamVjdCBPYmplY3RdJyA9PT0gdHlwZSB8fCAnW29iamVjdCBBcnJheV0nID09PSB0eXBlLFxuICAgICAgZHVwbGljYXRlSW5kZXgsXG4gICAgICBkdXBsaWNhdGU7XG5cbiAgaWYgKG9iamVjdE9yQXJyYXkpIHtcbiAgICBkdXBsaWNhdGVJbmRleCA9IHN0YXRlLmR1cGxpY2F0ZXMuaW5kZXhPZihvYmplY3QpO1xuICAgIGR1cGxpY2F0ZSA9IGR1cGxpY2F0ZUluZGV4ICE9PSAtMTtcbiAgfVxuXG4gIGlmICgobnVsbCAhPT0gc3RhdGUudGFnICYmICc/JyAhPT0gc3RhdGUudGFnKSB8fCBkdXBsaWNhdGUgfHwgKDIgIT09IHN0YXRlLmluZGVudCAmJiBsZXZlbCA+IDApKSB7XG4gICAgY29tcGFjdCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGR1cGxpY2F0ZSAmJiBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHtcbiAgICBzdGF0ZS5kdW1wID0gJypyZWZfJyArIGR1cGxpY2F0ZUluZGV4O1xuICB9IGVsc2Uge1xuICAgIGlmIChvYmplY3RPckFycmF5ICYmIGR1cGxpY2F0ZSAmJiAhc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgICBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoJ1tvYmplY3QgT2JqZWN0XScgPT09IHR5cGUpIHtcbiAgICAgIGlmIChibG9jayAmJiAoMCAhPT0gT2JqZWN0LmtleXMoc3RhdGUuZHVtcCkubGVuZ3RoKSkge1xuICAgICAgICB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXAsIGNvbXBhY3QpO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyAnICcgKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgnW29iamVjdCBBcnJheV0nID09PSB0eXBlKSB7XG4gICAgICBpZiAoYmxvY2sgJiYgKDAgIT09IHN0YXRlLmR1bXAubGVuZ3RoKSkge1xuICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZUZsb3dTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXApO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArICcgJyArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCdbb2JqZWN0IFN0cmluZ10nID09PSB0eXBlKSB7XG4gICAgICBpZiAoJz8nICE9PSBzdGF0ZS50YWcpIHtcbiAgICAgICAgd3JpdGVTY2FsYXIoc3RhdGUsIHN0YXRlLmR1bXAsIGxldmVsLCBpc2tleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0ZS5za2lwSW52YWxpZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigndW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgJyArIHR5cGUpO1xuICAgIH1cblxuICAgIGlmIChudWxsICE9PSBzdGF0ZS50YWcgJiYgJz8nICE9PSBzdGF0ZS50YWcpIHtcbiAgICAgIHN0YXRlLmR1bXAgPSAnITwnICsgc3RhdGUudGFnICsgJz4gJyArIHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMob2JqZWN0LCBzdGF0ZSkge1xuICB2YXIgb2JqZWN0cyA9IFtdLFxuICAgICAgZHVwbGljYXRlc0luZGV4ZXMgPSBbXSxcbiAgICAgIGluZGV4LFxuICAgICAgbGVuZ3RoO1xuXG4gIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBkdXBsaWNhdGVzSW5kZXhlcy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgc3RhdGUuZHVwbGljYXRlcy5wdXNoKG9iamVjdHNbZHVwbGljYXRlc0luZGV4ZXNbaW5kZXhdXSk7XG4gIH1cbiAgc3RhdGUudXNlZER1cGxpY2F0ZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gaW5zcGVjdE5vZGUob2JqZWN0LCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcykge1xuICB2YXIgb2JqZWN0S2V5TGlzdCxcbiAgICAgIGluZGV4LFxuICAgICAgbGVuZ3RoO1xuXG4gIGlmIChudWxsICE9PSBvYmplY3QgJiYgJ29iamVjdCcgPT09IHR5cGVvZiBvYmplY3QpIHtcbiAgICBpbmRleCA9IG9iamVjdHMuaW5kZXhPZihvYmplY3QpO1xuICAgIGlmICgtMSAhPT0gaW5kZXgpIHtcbiAgICAgIGlmICgtMSA9PT0gZHVwbGljYXRlc0luZGV4ZXMuaW5kZXhPZihpbmRleCkpIHtcbiAgICAgICAgZHVwbGljYXRlc0luZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iamVjdHMucHVzaChvYmplY3QpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICAgIGluc3BlY3ROb2RlKG9iamVjdFtpbmRleF0sIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICAgIGluc3BlY3ROb2RlKG9iamVjdFtvYmplY3RLZXlMaXN0W2luZGV4XV0sIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkdW1wKGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZShvcHRpb25zKTtcblxuICBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKGlucHV0LCBzdGF0ZSk7XG5cbiAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgMCwgaW5wdXQsIHRydWUsIHRydWUpKSB7XG4gICAgcmV0dXJuIHN0YXRlLmR1bXAgKyAnXFxuJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIHNhZmVEdW1wKGlucHV0LCBvcHRpb25zKSB7XG4gIHJldHVybiBkdW1wKGlucHV0LCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZHVtcCAgICAgPSBkdW1wO1xubW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgPSBzYWZlRHVtcDtcbiIsIi8vIFlBTUwgZXJyb3IgY2xhc3MuIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ1ODk4NFxuLy9cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0Jyk7XG5cblxuZnVuY3Rpb24gWUFNTEV4Y2VwdGlvbihyZWFzb24sIG1hcmspIHtcbiAgLy8gU3VwZXIgY29uc3RydWN0b3JcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICAvLyBJbmNsdWRlIHN0YWNrIHRyYWNlIGluIGVycm9yIG9iamVjdFxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAvLyBDaHJvbWUgYW5kIE5vZGVKU1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIC8vIEZGLCBJRSAxMCsgYW5kIFNhZmFyaSA2Ky4gRmFsbGJhY2sgZm9yIG90aGVyc1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrIHx8ICcnO1xuICB9XG5cbiAgdGhpcy5uYW1lID0gJ1lBTUxFeGNlcHRpb24nO1xuICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgdGhpcy5tYXJrID0gbWFyaztcbiAgdGhpcy5tZXNzYWdlID0gKHRoaXMucmVhc29uIHx8ICcodW5rbm93biByZWFzb24pJykgKyAodGhpcy5tYXJrID8gJyAnICsgdGhpcy5tYXJrLnRvU3RyaW5nKCkgOiAnJyk7XG59XG5cblxuLy8gSW5oZXJpdCBmcm9tIEVycm9yXG5pbmhlcml0cyhZQU1MRXhjZXB0aW9uLCBFcnJvcik7XG5cblxuWUFNTEV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhjb21wYWN0KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLm5hbWUgKyAnOiAnO1xuXG4gIHJlc3VsdCArPSB0aGlzLnJlYXNvbiB8fCAnKHVua25vd24gcmVhc29uKSc7XG5cbiAgaWYgKCFjb21wYWN0ICYmIHRoaXMubWFyaykge1xuICAgIHJlc3VsdCArPSAnICcgKyB0aGlzLm1hcmsudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gWUFNTEV4Y2VwdGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyplc2xpbnQtZGlzYWJsZSBtYXgtbGVuLG5vLXVzZS1iZWZvcmUtZGVmaW5lKi9cblxudmFyIGNvbW1vbiAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL2NvbW1vbicpO1xudmFyIFlBTUxFeGNlcHRpb24gICAgICAgPSByZXF1aXJlKCcuL2V4Y2VwdGlvbicpO1xudmFyIE1hcmsgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL21hcmsnKTtcbnZhciBERUZBVUxUX1NBRkVfU0NIRU1BID0gcmVxdWlyZSgnLi9zY2hlbWEvZGVmYXVsdF9zYWZlJyk7XG52YXIgREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmUoJy4vc2NoZW1hL2RlZmF1bHRfZnVsbCcpO1xuXG5cbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5cbnZhciBDT05URVhUX0ZMT1dfSU4gICA9IDE7XG52YXIgQ09OVEVYVF9GTE9XX09VVCAgPSAyO1xudmFyIENPTlRFWFRfQkxPQ0tfSU4gID0gMztcbnZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7XG5cblxudmFyIENIT01QSU5HX0NMSVAgID0gMTtcbnZhciBDSE9NUElOR19TVFJJUCA9IDI7XG52YXIgQ0hPTVBJTkdfS0VFUCAgPSAzO1xuXG5cbnZhciBQQVRURVJOX05PTl9QUklOVEFCTEUgICAgICAgICA9IC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg4NFxceDg2LVxceDlGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcbnZhciBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUyA9IC9bXFx4ODVcXHUyMDI4XFx1MjAyOV0vO1xudmFyIFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTICAgICAgID0gL1ssXFxbXFxdXFx7XFx9XS87XG52YXIgUEFUVEVSTl9UQUdfSEFORExFICAgICAgICAgICAgPSAvXig/OiF8ISF8IVthLXpcXC1dKyEpJC9pO1xudmFyIFBBVFRFUk5fVEFHX1VSSSAgICAgICAgICAgICAgID0gL14oPzohfFteLFxcW1xcXVxce1xcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcXC0jO1xcL1xcPzpAJj1cXCtcXCQsX1xcLiF+XFwqJ1xcKFxcKVxcW1xcXV0pKiQvaTtcblxuXG5mdW5jdGlvbiBpc19FT0woYykge1xuICByZXR1cm4gKGMgPT09IDB4MEEvKiBMRiAqLykgfHwgKGMgPT09IDB4MEQvKiBDUiAqLyk7XG59XG5cbmZ1bmN0aW9uIGlzX1dISVRFX1NQQUNFKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fCAoYyA9PT0gMHgyMC8qIFNwYWNlICovKTtcbn1cblxuZnVuY3Rpb24gaXNfV1NfT1JfRU9MKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fFxuICAgICAgICAgKGMgPT09IDB4MjAvKiBTcGFjZSAqLykgfHxcbiAgICAgICAgIChjID09PSAweDBBLyogTEYgKi8pIHx8XG4gICAgICAgICAoYyA9PT0gMHgwRC8qIENSICovKTtcbn1cblxuZnVuY3Rpb24gaXNfRkxPV19JTkRJQ0FUT1IoYykge1xuICByZXR1cm4gMHgyQy8qICwgKi8gPT09IGMgfHxcbiAgICAgICAgIDB4NUIvKiBbICovID09PSBjIHx8XG4gICAgICAgICAweDVELyogXSAqLyA9PT0gYyB8fFxuICAgICAgICAgMHg3Qi8qIHsgKi8gPT09IGMgfHxcbiAgICAgICAgIDB4N0QvKiB9ICovID09PSBjO1xufVxuXG5mdW5jdGlvbiBmcm9tSGV4Q29kZShjKSB7XG4gIHZhciBsYztcblxuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG4gIGxjID0gYyB8IDB4MjA7XG5cbiAgaWYgKCgweDYxLyogYSAqLyA8PSBsYykgJiYgKGxjIDw9IDB4NjYvKiBmICovKSkge1xuICAgIHJldHVybiBsYyAtIDB4NjEgKyAxMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlZEhleExlbihjKSB7XG4gIGlmIChjID09PSAweDc4LyogeCAqLykgeyByZXR1cm4gMjsgfVxuICBpZiAoYyA9PT0gMHg3NS8qIHUgKi8pIHsgcmV0dXJuIDQ7IH1cbiAgaWYgKGMgPT09IDB4NTUvKiBVICovKSB7IHJldHVybiA4OyB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYykge1xuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRXNjYXBlU2VxdWVuY2UoYykge1xuICByZXR1cm4gKGMgPT09IDB4MzAvKiAwICovKSA/ICdcXHgwMCcgOlxuICAgICAgICAoYyA9PT0gMHg2MS8qIGEgKi8pID8gJ1xceDA3JyA6XG4gICAgICAgIChjID09PSAweDYyLyogYiAqLykgPyAnXFx4MDgnIDpcbiAgICAgICAgKGMgPT09IDB4NzQvKiB0ICovKSA/ICdcXHgwOScgOlxuICAgICAgICAoYyA9PT0gMHgwOS8qIFRhYiAqLykgPyAnXFx4MDknIDpcbiAgICAgICAgKGMgPT09IDB4NkUvKiBuICovKSA/ICdcXHgwQScgOlxuICAgICAgICAoYyA9PT0gMHg3Ni8qIHYgKi8pID8gJ1xceDBCJyA6XG4gICAgICAgIChjID09PSAweDY2LyogZiAqLykgPyAnXFx4MEMnIDpcbiAgICAgICAgKGMgPT09IDB4NzIvKiByICovKSA/ICdcXHgwRCcgOlxuICAgICAgICAoYyA9PT0gMHg2NS8qIGUgKi8pID8gJ1xceDFCJyA6XG4gICAgICAgIChjID09PSAweDIwLyogU3BhY2UgKi8pID8gJyAnIDpcbiAgICAgICAgKGMgPT09IDB4MjIvKiBcIiAqLykgPyAnXFx4MjInIDpcbiAgICAgICAgKGMgPT09IDB4MkYvKiAvICovKSA/ICcvJyA6XG4gICAgICAgIChjID09PSAweDVDLyogXFwgKi8pID8gJ1xceDVDJyA6XG4gICAgICAgIChjID09PSAweDRFLyogTiAqLykgPyAnXFx4ODUnIDpcbiAgICAgICAgKGMgPT09IDB4NUYvKiBfICovKSA/ICdcXHhBMCcgOlxuICAgICAgICAoYyA9PT0gMHg0Qy8qIEwgKi8pID8gJ1xcdTIwMjgnIDpcbiAgICAgICAgKGMgPT09IDB4NTAvKiBQICovKSA/ICdcXHUyMDI5JyA6ICcnO1xufVxuXG5mdW5jdGlvbiBjaGFyRnJvbUNvZGVwb2ludChjKSB7XG4gIGlmIChjIDw9IDB4RkZGRikge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICB9XG4gIC8vIEVuY29kZSBVVEYtMTYgc3Vycm9nYXRlIHBhaXJcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTE2I0NvZGVfcG9pbnRzX1UuMkIwMTAwMDBfdG9fVS4yQjEwRkZGRlxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgLSAweDAxMDAwMCkgPj4gMTApICsgMHhEODAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGMgLSAweDAxMDAwMCkgJiAweDAzRkYpICsgMHhEQzAwKTtcbn1cblxudmFyIHNpbXBsZUVzY2FwZUNoZWNrID0gbmV3IEFycmF5KDI1Nik7IC8vIGludGVnZXIsIGZvciBmYXN0IGFjY2Vzc1xudmFyIHNpbXBsZUVzY2FwZU1hcCA9IG5ldyBBcnJheSgyNTYpO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICBzaW1wbGVFc2NhcGVDaGVja1tpXSA9IHNpbXBsZUVzY2FwZVNlcXVlbmNlKGkpID8gMSA6IDA7XG4gIHNpbXBsZUVzY2FwZU1hcFtpXSA9IHNpbXBsZUVzY2FwZVNlcXVlbmNlKGkpO1xufVxuXG5cbmZ1bmN0aW9uIFN0YXRlKGlucHV0LCBvcHRpb25zKSB7XG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICB0aGlzLmZpbGVuYW1lICA9IG9wdGlvbnNbJ2ZpbGVuYW1lJ10gIHx8IG51bGw7XG4gIHRoaXMuc2NoZW1hICAgID0gb3B0aW9uc1snc2NoZW1hJ10gICAgfHwgREVGQVVMVF9GVUxMX1NDSEVNQTtcbiAgdGhpcy5vbldhcm5pbmcgPSBvcHRpb25zWydvbldhcm5pbmcnXSB8fCBudWxsO1xuICB0aGlzLmxlZ2FjeSAgICA9IG9wdGlvbnNbJ2xlZ2FjeSddICAgIHx8IGZhbHNlO1xuXG4gIHRoaXMuaW1wbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQ7XG4gIHRoaXMudHlwZU1hcCAgICAgICA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkVHlwZU1hcDtcblxuICB0aGlzLmxlbmd0aCAgICAgPSBpbnB1dC5sZW5ndGg7XG4gIHRoaXMucG9zaXRpb24gICA9IDA7XG4gIHRoaXMubGluZSAgICAgICA9IDA7XG4gIHRoaXMubGluZVN0YXJ0ICA9IDA7XG4gIHRoaXMubGluZUluZGVudCA9IDA7XG5cbiAgdGhpcy5kb2N1bWVudHMgPSBbXTtcblxuICAvKlxuICB0aGlzLnZlcnNpb247XG4gIHRoaXMuY2hlY2tMaW5lQnJlYWtzO1xuICB0aGlzLnRhZ01hcDtcbiAgdGhpcy5hbmNob3JNYXA7XG4gIHRoaXMudGFnO1xuICB0aGlzLmFuY2hvcjtcbiAgdGhpcy5raW5kO1xuICB0aGlzLnJlc3VsdDsqL1xuXG59XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFlBTUxFeGNlcHRpb24oXG4gICAgbWVzc2FnZSxcbiAgICBuZXcgTWFyayhzdGF0ZS5maWxlbmFtZSwgc3RhdGUuaW5wdXQsIHN0YXRlLnBvc2l0aW9uLCBzdGF0ZS5saW5lLCAoc3RhdGUucG9zaXRpb24gLSBzdGF0ZS5saW5lU3RhcnQpKSk7XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdGhyb3cgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSk7XG59XG5cbmZ1bmN0aW9uIHRocm93V2FybmluZyhzdGF0ZSwgbWVzc2FnZSkge1xuICBpZiAoc3RhdGUub25XYXJuaW5nKSB7XG4gICAgc3RhdGUub25XYXJuaW5nLmNhbGwobnVsbCwgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSkpO1xuICB9XG59XG5cblxudmFyIGRpcmVjdGl2ZUhhbmRsZXJzID0ge1xuXG4gIFlBTUw6IGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcblxuICAgICAgdmFyIG1hdGNoLCBtYWpvciwgbWlub3I7XG5cbiAgICAgIGlmIChudWxsICE9PSBzdGF0ZS52ZXJzaW9uKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKDEgIT09IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14oWzAtOV0rKVxcLihbMC05XSspJC8uZXhlYyhhcmdzWzBdKTtcblxuICAgICAgaWYgKG51bGwgPT09IG1hdGNoKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIGFyZ3VtZW50IG9mIHRoZSBZQU1MIGRpcmVjdGl2ZScpO1xuICAgICAgfVxuXG4gICAgICBtYWpvciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgICBtaW5vciA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG5cbiAgICAgIGlmICgxICE9PSBtYWpvcikge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUudmVyc2lvbiA9IGFyZ3NbMF07XG4gICAgICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSAobWlub3IgPCAyKTtcblxuICAgICAgaWYgKDEgIT09IG1pbm9yICYmIDIgIT09IG1pbm9yKSB7XG4gICAgICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ3Vuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gIFRBRzogZnVuY3Rpb24gaGFuZGxlVGFnRGlyZWN0aXZlKHN0YXRlLCBuYW1lLCBhcmdzKSB7XG5cbiAgICAgIHZhciBoYW5kbGUsIHByZWZpeDtcblxuICAgICAgaWYgKDIgIT09IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdUQUcgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSB0d28gYXJndW1lbnRzJyk7XG4gICAgICB9XG5cbiAgICAgIGhhbmRsZSA9IGFyZ3NbMF07XG4gICAgICBwcmVmaXggPSBhcmdzWzFdO1xuXG4gICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50YWdNYXAsIGhhbmRsZSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yIFwiJyArIGhhbmRsZSArICdcIiB0YWcgaGFuZGxlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghUEFUVEVSTl9UQUdfVVJJLnRlc3QocHJlZml4KSkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaWxsLWZvcm1lZCB0YWcgcHJlZml4IChzZWNvbmQgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLnRhZ01hcFtoYW5kbGVdID0gcHJlZml4O1xuICAgIH1cbn07XG5cblxuZnVuY3Rpb24gY2FwdHVyZVNlZ21lbnQoc3RhdGUsIHN0YXJ0LCBlbmQsIGNoZWNrSnNvbikge1xuICB2YXIgX3Bvc2l0aW9uLCBfbGVuZ3RoLCBfY2hhcmFjdGVyLCBfcmVzdWx0O1xuXG4gIGlmIChzdGFydCA8IGVuZCkge1xuICAgIF9yZXN1bHQgPSBzdGF0ZS5pbnB1dC5zbGljZShzdGFydCwgZW5kKTtcblxuICAgIGlmIChjaGVja0pzb24pIHtcbiAgICAgIGZvciAoX3Bvc2l0aW9uID0gMCwgX2xlbmd0aCA9IF9yZXN1bHQubGVuZ3RoO1xuICAgICAgICAgICBfcG9zaXRpb24gPCBfbGVuZ3RoO1xuICAgICAgICAgICBfcG9zaXRpb24gKz0gMSkge1xuICAgICAgICBfY2hhcmFjdGVyID0gX3Jlc3VsdC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7XG4gICAgICAgIGlmICghKDB4MDkgPT09IF9jaGFyYWN0ZXIgfHxcbiAgICAgICAgICAgICAgMHgyMCA8PSBfY2hhcmFjdGVyICYmIF9jaGFyYWN0ZXIgPD0gMHgxMEZGRkYpKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFBBVFRFUk5fTk9OX1BSSU5UQUJMRS50ZXN0KF9yZXN1bHQpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5yZXN1bHQgKz0gX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZU1hcHBpbmdzKHN0YXRlLCBkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gIHZhciBzb3VyY2VLZXlzLCBrZXksIGluZGV4LCBxdWFudGl0eTtcblxuICBpZiAoIWNvbW1vbi5pc09iamVjdChzb3VyY2UpKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Nhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlJyk7XG4gIH1cblxuICBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSBzb3VyY2VLZXlzLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaW5kZXhdO1xuXG4gICAgaWYgKCFfaGFzT3duUHJvcGVydHkuY2FsbChkZXN0aW5hdGlvbiwga2V5KSkge1xuICAgICAgZGVzdGluYXRpb25ba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSkge1xuICB2YXIgaW5kZXgsIHF1YW50aXR5O1xuXG4gIGtleU5vZGUgPSBTdHJpbmcoa2V5Tm9kZSk7XG5cbiAgaWYgKG51bGwgPT09IF9yZXN1bHQpIHtcbiAgICBfcmVzdWx0ID0ge307XG4gIH1cblxuICBpZiAoJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJyA9PT0ga2V5VGFnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVOb2RlKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgX3Jlc3VsdCwgdmFsdWVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3Jlc3VsdFtrZXlOb2RlXSA9IHZhbHVlTm9kZTtcbiAgfVxuXG4gIHJldHVybiBfcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZWFkTGluZUJyZWFrKHN0YXRlKSB7XG4gIHZhciBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICgweDBBLyogTEYgKi8gPT09IGNoKSB7XG4gICAgc3RhdGUucG9zaXRpb24rKztcbiAgfSBlbHNlIGlmICgweDBELyogQ1IgKi8gPT09IGNoKSB7XG4gICAgc3RhdGUucG9zaXRpb24rKztcbiAgICBpZiAoMHgwQS8qIExGICovID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2EgbGluZSBicmVhayBpcyBleHBlY3RlZCcpO1xuICB9XG5cbiAgc3RhdGUubGluZSArPSAxO1xuICBzdGF0ZS5saW5lU3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjtcbn1cblxuZnVuY3Rpb24gc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgYWxsb3dDb21tZW50cywgY2hlY2tJbmRlbnQpIHtcbiAgdmFyIGxpbmVCcmVha3MgPSAwLFxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoMCAhPT0gY2gpIHtcbiAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKGFsbG93Q29tbWVudHMgJiYgMHgyMy8qICMgKi8gPT09IGNoKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH0gd2hpbGUgKGNoICE9PSAweDBBLyogTEYgKi8gJiYgY2ggIT09IDB4MEQvKiBDUiAqLyAmJiAwICE9PSBjaCk7XG4gICAgfVxuXG4gICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuXG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgICAgbGluZUJyZWFrcysrO1xuICAgICAgc3RhdGUubGluZUluZGVudCA9IDA7XG5cbiAgICAgIHdoaWxlICgweDIwLyogU3BhY2UgKi8gPT09IGNoKSB7XG4gICAgICAgIHN0YXRlLmxpbmVJbmRlbnQrKztcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoLTEgIT09IGNoZWNrSW5kZW50ICYmIDAgIT09IGxpbmVCcmVha3MgJiYgc3RhdGUubGluZUluZGVudCA8IGNoZWNrSW5kZW50KSB7XG4gICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAnZGVmaWNpZW50IGluZGVudGF0aW9uJyk7XG4gIH1cblxuICByZXR1cm4gbGluZUJyZWFrcztcbn1cblxuZnVuY3Rpb24gdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSB7XG4gIHZhciBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbixcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gIC8vIENvbmRpdGlvbiBzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0IGlzIHRlc3RlZFxuICAvLyBpbiBwYXJlbnQgb24gZWFjaCBjYWxsLCBmb3IgZWZmaWNpZW5jeS4gTm8gbmVlZHMgdG8gdGVzdCBoZXJlIGFnYWluLlxuICBpZiAoKDB4MkQvKiAtICovID09PSBjaCB8fCAweDJFLyogLiAqLyA9PT0gY2gpICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDEpID09PSBjaCAmJlxuICAgICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAyKSA9PT0gY2gpIHtcblxuICAgIF9wb3NpdGlvbiArPSAzO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IDAgfHwgaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBjb3VudCkge1xuICBpZiAoMSA9PT0gY291bnQpIHtcbiAgICBzdGF0ZS5yZXN1bHQgKz0gJyAnO1xuICB9IGVsc2UgaWYgKGNvdW50ID4gMSkge1xuICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBjb3VudCAtIDEpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gcmVhZFBsYWluU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50LCB3aXRoaW5GbG93Q29sbGVjdGlvbikge1xuICB2YXIgcHJlY2VkaW5nLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgY2FwdHVyZVN0YXJ0LFxuICAgICAgY2FwdHVyZUVuZCxcbiAgICAgIGhhc1BlbmRpbmdDb250ZW50LFxuICAgICAgX2xpbmUsXG4gICAgICBfbGluZVN0YXJ0LFxuICAgICAgX2xpbmVJbmRlbnQsXG4gICAgICBfa2luZCA9IHN0YXRlLmtpbmQsXG4gICAgICBfcmVzdWx0ID0gc3RhdGUucmVzdWx0LFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoaXNfV1NfT1JfRU9MKGNoKSAgICAgICAgICAgICB8fFxuICAgICAgaXNfRkxPV19JTkRJQ0FUT1IoY2gpICAgICAgICB8fFxuICAgICAgMHgyMy8qICMgKi8gICAgICAgICAgID09PSBjaCB8fFxuICAgICAgMHgyNi8qICYgKi8gICAgICAgICAgID09PSBjaCB8fFxuICAgICAgMHgyQS8qICogKi8gICAgICAgICAgID09PSBjaCB8fFxuICAgICAgMHgyMS8qICEgKi8gICAgICAgICAgID09PSBjaCB8fFxuICAgICAgMHg3Qy8qIHwgKi8gICAgICAgICAgID09PSBjaCB8fFxuICAgICAgMHgzRS8qID4gKi8gICAgICAgICAgID09PSBjaCB8fFxuICAgICAgMHgyNy8qICcgKi8gICAgICAgICAgID09PSBjaCB8fFxuICAgICAgMHgyMi8qIFwiICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4MjUvKiAlICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4NDAvKiBAICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4NjAvKiBgICovICAgICAgICAgICA9PT0gY2gpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoMHgzRi8qID8gKi8gPT09IGNoIHx8IDB4MkQvKiAtICovID09PSBjaCkge1xuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fFxuICAgICAgICB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuXG4gIHdoaWxlICgwICE9PSBjaCkge1xuICAgIGlmICgweDNBLyogOiAqLyA9PT0gY2gpIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8XG4gICAgICAgICAgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoMHgyMy8qICMgKi8gPT09IGNoKSB7XG4gICAgICBwcmVjZWRpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uIC0gMSk7XG5cbiAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkgfHxcbiAgICAgICAgICAgICAgIHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgICAgYnJlYWs7XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9saW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfbGluZUluZGVudCA9IHN0YXRlLmxpbmVJbmRlbnQ7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgLTEpO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBfbGluZTtcbiAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gX2xpbmVTdGFydDtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCA9IF9saW5lSW5kZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHN0YXRlLmxpbmUgLSBfbGluZSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb24gKyAxO1xuICAgIH1cblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuXG4gIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcblxuICBpZiAoc3RhdGUucmVzdWx0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gX2tpbmQ7XG4gIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2gsXG4gICAgICBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoMHgyNy8qICcgKi8gIT09IGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlICgwICE9PSAoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkpIHtcbiAgICBpZiAoMHgyNy8qICcgKi8gPT09IGNoKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgIGlmICgweDI3LyogJyAqLyA9PT0gY2gpIHtcbiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhcicpO1xufVxuXG5mdW5jdGlvbiByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjYXB0dXJlU3RhcnQsXG4gICAgICBjYXB0dXJlRW5kLFxuICAgICAgaGV4TGVuZ3RoLFxuICAgICAgaGV4UmVzdWx0LFxuICAgICAgdG1wLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoMHgyMi8qIFwiICovICE9PSBjaCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSAnc2NhbGFyJztcbiAgc3RhdGUucmVzdWx0ID0gJyc7XG4gIHN0YXRlLnBvc2l0aW9uKys7XG4gIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICB3aGlsZSAoMCAhPT0gKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpKSB7XG4gICAgaWYgKDB4MjIvKiBcIiAqLyA9PT0gY2gpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIH0gZWxzZSBpZiAoMHg1Qy8qIFxcICovID09PSBjaCkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgbm9kZUluZGVudCk7XG5cbiAgICAgICAgLy8gVE9ETzogcmV3b3JrIHRvIGlubGluZSBmbiB3aXRoIG5vIHR5cGUgY2FzdD9cbiAgICAgIH0gZWxzZSBpZiAoY2ggPCAyNTYgJiYgc2ltcGxlRXNjYXBlQ2hlY2tbY2hdKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBzaW1wbGVFc2NhcGVNYXBbY2hdO1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuXG4gICAgICB9IGVsc2UgaWYgKCh0bXAgPSBlc2NhcGVkSGV4TGVuKGNoKSkgPiAwKSB7XG4gICAgICAgIGhleExlbmd0aCA9IHRtcDtcbiAgICAgICAgaGV4UmVzdWx0ID0gMDtcblxuICAgICAgICBmb3IgKDsgaGV4TGVuZ3RoID4gMDsgaGV4TGVuZ3RoLS0pIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgICAgICBpZiAoKHRtcCA9IGZyb21IZXhDb2RlKGNoKSkgPj0gMCkge1xuICAgICAgICAgICAgaGV4UmVzdWx0ID0gKGhleFJlc3VsdCA8PCA0KSArIHRtcDtcblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNoYXJGcm9tQ29kZXBvaW50KGhleFJlc3VsdCk7XG5cbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3Vua25vd24gZXNjYXBlIHNlcXVlbmNlJyk7XG4gICAgICB9XG5cbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgdHJ1ZSk7XG4gICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgbm9kZUluZGVudCkpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXInKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgcmVhZE5leHQgPSB0cnVlLFxuICAgICAgX2xpbmUsXG4gICAgICBfdGFnICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9yZXN1bHQsXG4gICAgICBfYW5jaG9yICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIHRlcm1pbmF0b3IsXG4gICAgICBpc1BhaXIsXG4gICAgICBpc0V4cGxpY2l0UGFpcixcbiAgICAgIGlzTWFwcGluZyxcbiAgICAgIGtleU5vZGUsXG4gICAgICBrZXlUYWcsXG4gICAgICB2YWx1ZU5vZGUsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCA9PT0gMHg1Qi8qIFsgKi8pIHtcbiAgICB0ZXJtaW5hdG9yID0gMHg1RDsvKiBdICovXG4gICAgaXNNYXBwaW5nID0gZmFsc2U7XG4gICAgX3Jlc3VsdCA9IFtdO1xuICB9IGVsc2UgaWYgKGNoID09PSAweDdCLyogeyAqLykge1xuICAgIHRlcm1pbmF0b3IgPSAweDdEOy8qIH0gKi9cbiAgICBpc01hcHBpbmcgPSB0cnVlO1xuICAgIF9yZXN1bHQgPSB7fTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobnVsbCAhPT0gc3RhdGUuYW5jaG9yKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlICgwICE9PSBjaCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgc3RhdGUua2luZCA9IGlzTWFwcGluZyA/ICdtYXBwaW5nJyA6ICdzZXF1ZW5jZSc7XG4gICAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghcmVhZE5leHQpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdtaXNzZWQgY29tbWEgYmV0d2VlbiBmbG93IGNvbGxlY3Rpb24gZW50cmllcycpO1xuICAgIH1cblxuICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gZmFsc2U7XG5cbiAgICBpZiAoMHgzRi8qID8gKi8gPT09IGNoKSB7XG4gICAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG5cbiAgICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuICAgICAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IHRydWU7XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKChpc0V4cGxpY2l0UGFpciB8fCBzdGF0ZS5saW5lID09PSBfbGluZSkgJiYgMHgzQS8qIDogKi8gPT09IGNoKSB7XG4gICAgICBpc1BhaXIgPSB0cnVlO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKGlzTWFwcGluZykge1xuICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUpO1xuICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7XG4gICAgICBfcmVzdWx0LnB1c2goc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgbnVsbCwga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3Jlc3VsdC5wdXNoKGtleU5vZGUpO1xuICAgIH1cblxuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmICgweDJDLyogLCAqLyA9PT0gY2gpIHtcbiAgICAgIHJlYWROZXh0ID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVhZE5leHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24nKTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjYXB0dXJlU3RhcnQsXG4gICAgICBmb2xkaW5nLFxuICAgICAgY2hvbXBpbmcgICAgICAgPSBDSE9NUElOR19DTElQLFxuICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSBmYWxzZSxcbiAgICAgIHRleHRJbmRlbnQgICAgID0gbm9kZUluZGVudCxcbiAgICAgIGVtcHR5TGluZXMgICAgID0gMCxcbiAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2UsXG4gICAgICB0bXAsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCA9PT0gMHg3Qy8qIHwgKi8pIHtcbiAgICBmb2xkaW5nID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4M0UvKiA+ICovKSB7XG4gICAgZm9sZGluZyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcblxuICB3aGlsZSAoMCAhPT0gY2gpIHtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoMHgyQi8qICsgKi8gPT09IGNoIHx8IDB4MkQvKiAtICovID09PSBjaCkge1xuICAgICAgaWYgKENIT01QSU5HX0NMSVAgPT09IGNob21waW5nKSB7XG4gICAgICAgIGNob21waW5nID0gKDB4MkIvKiArICovID09PSBjaCkgPyBDSE9NUElOR19LRUVQIDogQ0hPTVBJTkdfU1RSSVA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAncmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyJyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKCh0bXAgPSBmcm9tRGVjaW1hbENvZGUoY2gpKSA+PSAwKSB7XG4gICAgICBpZiAodG1wID09PSAwKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdiYWQgZXhwbGljaXQgaW5kZW50YXRpb24gd2lkdGggb2YgYSBibG9jayBzY2FsYXI7IGl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gb25lJyk7XG4gICAgICB9IGVsc2UgaWYgKCFkZXRlY3RlZEluZGVudCkge1xuICAgICAgICB0ZXh0SW5kZW50ID0gbm9kZUluZGVudCArIHRtcCAtIDE7XG4gICAgICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdyZXBlYXQgb2YgYW4gaW5kZW50YXRpb24gd2lkdGggaWRlbnRpZmllcicpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpO1xuXG4gICAgaWYgKDB4MjMvKiAjICovID09PSBjaCkge1xuICAgICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICAgIHdoaWxlICghaXNfRU9MKGNoKSAmJiAoMCAhPT0gY2gpKTtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoMCAhPT0gY2gpIHtcbiAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcbiAgICBzdGF0ZS5saW5lSW5kZW50ID0gMDtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICB3aGlsZSAoKCFkZXRlY3RlZEluZGVudCB8fCBzdGF0ZS5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgJiZcbiAgICAgICAgICAgKDB4MjAvKiBTcGFjZSAqLyA9PT0gY2gpKSB7XG4gICAgICBzdGF0ZS5saW5lSW5kZW50Kys7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCFkZXRlY3RlZEluZGVudCAmJiBzdGF0ZS5saW5lSW5kZW50ID4gdGV4dEluZGVudCkge1xuICAgICAgdGV4dEluZGVudCA9IHN0YXRlLmxpbmVJbmRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGVtcHR5TGluZXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEVuZCBvZiB0aGUgc2NhbGFyLlxuICAgIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgdGV4dEluZGVudCkge1xuXG4gICAgICAvLyBQZXJmb3JtIHRoZSBjaG9tcGluZy5cbiAgICAgIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfS0VFUCkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGNob21waW5nID09PSBDSE9NUElOR19DTElQKSB7XG4gICAgICAgIGlmIChkZXRlY3RlZEluZGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgdGhlIHNjYWxhciBpcyBub3QgZW1wdHkuXG4gICAgICAgICAgc3RhdGUucmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJyZWFrIHRoaXMgYHdoaWxlYCBjeWNsZSBhbmQgZ28gdG8gdGhlIGZ1bmNpdG9uJ3MgZXBpbG9ndWUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBGb2xkZWQgc3R5bGU6IHVzZSBmYW5jeSBydWxlcyB0byBoYW5kbGUgbGluZSBicmVha3MuXG4gICAgaWYgKGZvbGRpbmcpIHtcblxuICAgICAgLy8gTGluZXMgc3RhcnRpbmcgd2l0aCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIChtb3JlLWluZGVudGVkIGxpbmVzKSBhcmUgbm90IGZvbGRlZC5cbiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyArIDEpO1xuXG4gICAgICAvLyBFbmQgb2YgbW9yZS1pbmRlbnRlZCBibG9jay5cbiAgICAgIH0gZWxzZSBpZiAoYXRNb3JlSW5kZW50ZWQpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGVtcHR5TGluZXMgKyAxKTtcblxuICAgICAgLy8gSnVzdCBvbmUgbGluZSBicmVhayAtIHBlcmNlaXZlIGFzIHRoZSBzYW1lIGxpbmUuXG4gICAgICB9IGVsc2UgaWYgKDAgPT09IGVtcHR5TGluZXMpIHtcbiAgICAgICAgaWYgKGRldGVjdGVkSW5kZW50KSB7IC8vIGkuZS4gb25seSBpZiB3ZSBoYXZlIGFscmVhZHkgcmVhZCBzb21lIHNjYWxhciBjb250ZW50LlxuICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSAnICc7XG4gICAgICAgIH1cblxuICAgICAgLy8gU2V2ZXJhbCBsaW5lIGJyZWFrcyAtIHBlcmNlaXZlIGFzIGRpZmZlcmVudCBsaW5lcy5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzKTtcbiAgICAgIH1cblxuICAgIC8vIExpdGVyYWwgc3R5bGU6IGp1c3QgYWRkIGV4YWN0IG51bWJlciBvZiBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNvbnRlbnQgbGluZXMuXG4gICAgfSBlbHNlIGlmIChkZXRlY3RlZEluZGVudCkge1xuICAgICAgLy8gSWYgY3VycmVudCBsaW5lIGlzbid0IHRoZSBmaXJzdCBvbmUgLSBjb3VudCBsaW5lIGJyZWFrIGZyb20gdGhlIGxhc3QgY29udGVudCBsaW5lLlxuICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGVtcHR5TGluZXMgKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gY2FzZSBvZiB0aGUgZmlyc3QgY29udGVudCBsaW5lIC0gY291bnQgb25seSBlbXB0eSBsaW5lcy5cbiAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzKTtcbiAgICB9XG5cbiAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7XG4gICAgZW1wdHlMaW5lcyA9IDA7XG4gICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoIWlzX0VPTChjaCkgJiYgKDAgIT09IGNoKSkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIF9saW5lLFxuICAgICAgX3RhZyAgICAgID0gc3RhdGUudGFnLFxuICAgICAgX2FuY2hvciAgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgX3Jlc3VsdCAgID0gW10sXG4gICAgICBmb2xsb3dpbmcsXG4gICAgICBkZXRlY3RlZCAgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIGlmIChudWxsICE9PSBzdGF0ZS5hbmNob3IpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlICgwICE9PSBjaCkge1xuXG4gICAgaWYgKDB4MkQvKiAtICovICE9PSBjaCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgaWYgKCFpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG5cbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA8PSBub2RlSW5kZW50KSB7XG4gICAgICAgIF9yZXN1bHQucHVzaChudWxsKTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lO1xuICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgX3Jlc3VsdC5wdXNoKHN0YXRlLnJlc3VsdCk7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmICgoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpICYmICgwICE9PSBjaCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeScpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZXRlY3RlZCkge1xuICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICBzdGF0ZS5raW5kID0gJ3NlcXVlbmNlJztcbiAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrTWFwcGluZyhzdGF0ZSwgbm9kZUluZGVudCwgZmxvd0luZGVudCkge1xuICB2YXIgZm9sbG93aW5nLFxuICAgICAgYWxsb3dDb21wYWN0LFxuICAgICAgX2xpbmUsXG4gICAgICBfdGFnICAgICAgICAgID0gc3RhdGUudGFnLFxuICAgICAgX2FuY2hvciAgICAgICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIF9yZXN1bHQgICAgICAgPSB7fSxcbiAgICAgIGtleVRhZyAgICAgICAgPSBudWxsLFxuICAgICAga2V5Tm9kZSAgICAgICA9IG51bGwsXG4gICAgICB2YWx1ZU5vZGUgICAgID0gbnVsbCxcbiAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZSxcbiAgICAgIGRldGVjdGVkICAgICAgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIGlmIChudWxsICE9PSBzdGF0ZS5hbmNob3IpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlICgwICE9PSBjaCkge1xuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcbiAgICBfbGluZSA9IHN0YXRlLmxpbmU7IC8vIFNhdmUgdGhlIGN1cnJlbnQgbGluZS5cblxuICAgIC8vXG4gICAgLy8gRXhwbGljaXQgbm90YXRpb24gY2FzZS4gVGhlcmUgYXJlIHR3byBzZXBhcmF0ZSBibG9ja3M6XG4gICAgLy8gZmlyc3QgZm9yIHRoZSBrZXkgKGRlbm90ZWQgYnkgXCI/XCIpIGFuZCBzZWNvbmQgZm9yIHRoZSB2YWx1ZSAoZGVub3RlZCBieSBcIjpcIilcbiAgICAvL1xuICAgIGlmICgoMHgzRi8qID8gKi8gPT09IGNoIHx8IDB4M0EvKiA6ICovICA9PT0gY2gpICYmIGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG5cbiAgICAgIGlmICgweDNGLyogPyAqLyA9PT0gY2gpIHtcbiAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBrZXlUYWcsIGtleU5vZGUsIG51bGwpO1xuICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcblxuICAgICAgfSBlbHNlIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIC8vIGkuZS4gMHgzQS8qIDogKi8gPT09IGNoYXJhY3RlciBhZnRlciB0aGUgZXhwbGljaXQga2V5LlxuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQnKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUucG9zaXRpb24gKz0gMTtcbiAgICAgIGNoID0gZm9sbG93aW5nO1xuXG4gICAgLy9cbiAgICAvLyBJbXBsaWNpdCBub3RhdGlvbiBjYXNlLiBGbG93LXN0eWxlIG5vZGUgYXMgdGhlIGtleSBmaXJzdCwgdGhlbiBcIjpcIiwgYW5kIHRoZSB2YWx1ZS5cbiAgICAvL1xuICAgIH0gZWxzZSBpZiAoY29tcG9zZU5vZGUoc3RhdGUsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19PVVQsIGZhbHNlLCB0cnVlKSkge1xuXG4gICAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKDB4M0EvKiA6ICovID09PSBjaCkge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Egd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBrZXlUYWcsIGtleU5vZGUsIG51bGwpO1xuICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTtcbiAgICAgICAgICBrZXlUYWcgPSBzdGF0ZS50YWc7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcblxuICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkJyk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJlc3VsdCBvZiBgY29tcG9zZU5vZGVgLlxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleScpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7IC8vIFJlYWRpbmcgaXMgZG9uZS4gR28gdG8gdGhlIGVwaWxvZ3VlLlxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gQ29tbW9uIHJlYWRpbmcgY29kZSBmb3IgYm90aCBleHBsaWNpdCBhbmQgaW1wbGljaXQgbm90YXRpb25zLlxuICAgIC8vXG4gICAgaWYgKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSB7XG4gICAgICBpZiAoY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfT1VULCB0cnVlLCBhbGxvd0NvbXBhY3QpKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKTtcbiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50ICYmICgwICE9PSBjaCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5Jyk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gRXBpbG9ndWUuXG4gIC8vXG5cbiAgLy8gU3BlY2lhbCBjYXNlOiBsYXN0IG1hcHBpbmcncyBub2RlIGNvbnRhaW5zIG9ubHkgdGhlIGtleSBpbiBleHBsaWNpdCBub3RhdGlvbi5cbiAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBrZXlUYWcsIGtleU5vZGUsIG51bGwpO1xuICB9XG5cbiAgLy8gRXhwb3NlIHRoZSByZXN1bHRpbmcgbWFwcGluZy5cbiAgaWYgKGRldGVjdGVkKSB7XG4gICAgc3RhdGUudGFnID0gX3RhZztcbiAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgIHN0YXRlLmtpbmQgPSAnbWFwcGluZyc7XG4gICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RlZDtcbn1cblxuZnVuY3Rpb24gcmVhZFRhZ1Byb3BlcnR5KHN0YXRlKSB7XG4gIHZhciBfcG9zaXRpb24sXG4gICAgICBpc1ZlcmJhdGltID0gZmFsc2UsXG4gICAgICBpc05hbWVkICAgID0gZmFsc2UsXG4gICAgICB0YWdIYW5kbGUsXG4gICAgICB0YWdOYW1lLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoMHgyMS8qICEgKi8gIT09IGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG51bGwgIT09IHN0YXRlLnRhZykge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eScpO1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICgweDNDLyogPCAqLyA9PT0gY2gpIHtcbiAgICBpc1ZlcmJhdGltID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgfSBlbHNlIGlmICgweDIxLyogISAqLyA9PT0gY2gpIHtcbiAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICB0YWdIYW5kbGUgPSAnISEnO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB9IGVsc2Uge1xuICAgIHRhZ0hhbmRsZSA9ICchJztcbiAgfVxuXG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIGlmIChpc1ZlcmJhdGltKSB7XG4gICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICB3aGlsZSAoMCAhPT0gY2ggJiYgMHgzRS8qID4gKi8gIT09IGNoKTtcblxuICAgIGlmIChzdGF0ZS5wb3NpdGlvbiA8IHN0YXRlLmxlbmd0aCkge1xuICAgICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWcnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKDAgIT09IGNoICYmICFpc19XU19PUl9FT0woY2gpKSB7XG5cbiAgICAgIGlmICgweDIxLyogISAqLyA9PT0gY2gpIHtcbiAgICAgICAgaWYgKCFpc05hbWVkKSB7XG4gICAgICAgICAgdGFnSGFuZGxlID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uIC0gMSwgc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgICAgIGlmICghUEFUVEVSTl9UQUdfSEFORExFLnRlc3QodGFnSGFuZGxlKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ25hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaXNOYW1lZCA9IHRydWU7XG4gICAgICAgICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb24gKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUy50ZXN0KHRhZ05hbWUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRhZ05hbWUgJiYgIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHRhZ05hbWUpKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogJyArIHRhZ05hbWUpO1xuICB9XG5cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBzdGF0ZS50YWcgPSB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUudGFnTWFwLCB0YWdIYW5kbGUpKSB7XG4gICAgc3RhdGUudGFnID0gc3RhdGUudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAoJyEnID09PSB0YWdIYW5kbGUpIHtcbiAgICBzdGF0ZS50YWcgPSAnIScgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAoJyEhJyA9PT0gdGFnSGFuZGxlKSB7XG4gICAgc3RhdGUudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSBcIicgKyB0YWdIYW5kbGUgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKDB4MjYvKiAmICovICE9PSBjaCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChudWxsICE9PSBzdGF0ZS5hbmNob3IpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlICgwICE9PSBjaCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlcicpO1xuICB9XG5cbiAgc3RhdGUuYW5jaG9yID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiwgYWxpYXMsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICgweDJBLyogKiAqLyAhPT0gY2gpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlICgwICE9PSBjaCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyJyk7XG4gIH1cblxuICBhbGlhcyA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICghc3RhdGUuYW5jaG9yTWFwLmhhc093blByb3BlcnR5KGFsaWFzKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmlkZW50aWZpZWQgYWxpYXMgXCInICsgYWxpYXMgKyAnXCInKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VsdCA9IHN0YXRlLmFuY2hvck1hcFthbGlhc107XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlLCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7XG4gIHZhciBhbGxvd0Jsb2NrU3R5bGVzLFxuICAgICAgYWxsb3dCbG9ja1NjYWxhcnMsXG4gICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMsXG4gICAgICBpbmRlbnRTdGF0dXMgPSAxLCAvLyAxOiB0aGlzPnBhcmVudCwgMDogdGhpcz1wYXJlbnQsIC0xOiB0aGlzPHBhcmVudFxuICAgICAgYXROZXdMaW5lICA9IGZhbHNlLFxuICAgICAgaGFzQ29udGVudCA9IGZhbHNlLFxuICAgICAgdHlwZUluZGV4LFxuICAgICAgdHlwZVF1YW50aXR5LFxuICAgICAgdHlwZSxcbiAgICAgIGZsb3dJbmRlbnQsXG4gICAgICBibG9ja0luZGVudDtcblxuICBzdGF0ZS50YWcgICAgPSBudWxsO1xuICBzdGF0ZS5hbmNob3IgPSBudWxsO1xuICBzdGF0ZS5raW5kICAgPSBudWxsO1xuICBzdGF0ZS5yZXN1bHQgPSBudWxsO1xuXG4gIGFsbG93QmxvY2tTdHlsZXMgPSBhbGxvd0Jsb2NrU2NhbGFycyA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9XG4gICAgQ09OVEVYVF9CTE9DS19PVVQgPT09IG5vZGVDb250ZXh0IHx8XG4gICAgQ09OVEVYVF9CTE9DS19JTiAgPT09IG5vZGVDb250ZXh0O1xuXG4gIGlmIChhbGxvd1RvU2Vlaykge1xuICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSkpIHtcbiAgICAgIGF0TmV3TGluZSA9IHRydWU7XG5cbiAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgxID09PSBpbmRlbnRTdGF0dXMpIHtcbiAgICB3aGlsZSAocmVhZFRhZ1Byb3BlcnR5KHN0YXRlKSB8fCByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpKSB7XG4gICAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICAgIGF0TmV3TGluZSA9IHRydWU7XG4gICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGFsbG93QmxvY2tTdHlsZXM7XG5cbiAgICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkge1xuICAgICAgICAgIGluZGVudFN0YXR1cyA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IHBhcmVudEluZGVudCkge1xuICAgICAgICAgIGluZGVudFN0YXR1cyA9IC0xO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zKSB7XG4gICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYXROZXdMaW5lIHx8IGFsbG93Q29tcGFjdDtcbiAgfVxuXG4gIGlmICgxID09PSBpbmRlbnRTdGF0dXMgfHwgQ09OVEVYVF9CTE9DS19PVVQgPT09IG5vZGVDb250ZXh0KSB7XG4gICAgaWYgKENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQgfHwgQ09OVEVYVF9GTE9XX09VVCA9PT0gbm9kZUNvbnRleHQpIHtcbiAgICAgIGZsb3dJbmRlbnQgPSBwYXJlbnRJbmRlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsb3dJbmRlbnQgPSBwYXJlbnRJbmRlbnQgKyAxO1xuICAgIH1cblxuICAgIGJsb2NrSW5kZW50ID0gc3RhdGUucG9zaXRpb24gLSBzdGF0ZS5saW5lU3RhcnQ7XG5cbiAgICBpZiAoMSA9PT0gaW5kZW50U3RhdHVzKSB7XG4gICAgICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmXG4gICAgICAgICAgKHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBibG9ja0luZGVudCkgfHxcbiAgICAgICAgICAgcmVhZEJsb2NrTWFwcGluZyhzdGF0ZSwgYmxvY2tJbmRlbnQsIGZsb3dJbmRlbnQpKSB8fFxuICAgICAgICAgIHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZSwgZmxvd0luZGVudCkpIHtcbiAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoKGFsbG93QmxvY2tTY2FsYXJzICYmIHJlYWRCbG9ja1NjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkpIHx8XG4gICAgICAgICAgICByZWFkU2luZ2xlUXVvdGVkU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSB8fFxuICAgICAgICAgICAgcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkpIHtcbiAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlYWRBbGlhcyhzdGF0ZSkpIHtcbiAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChudWxsICE9PSBzdGF0ZS50YWcgfHwgbnVsbCAhPT0gc3RhdGUuYW5jaG9yKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgYW55IHByb3BlcnRpZXMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWFkUGxhaW5TY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAobnVsbCA9PT0gc3RhdGUudGFnKSB7XG4gICAgICAgICAgICBzdGF0ZS50YWcgPSAnPyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG51bGwgIT09IHN0YXRlLmFuY2hvcikge1xuICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgwID09PSBpbmRlbnRTdGF0dXMpIHtcbiAgICAgIC8vIFNwZWNpYWwgY2FzZTogYmxvY2sgc2VxdWVuY2VzIGFyZSBhbGxvd2VkIHRvIGhhdmUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbCBhcyB0aGUgcGFyZW50LlxuICAgICAgLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjaWQyNzk5Nzg0XG4gICAgICBoYXNDb250ZW50ID0gYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBibG9ja0luZGVudCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG51bGwgIT09IHN0YXRlLnRhZyAmJiAnIScgIT09IHN0YXRlLnRhZykge1xuICAgIGlmICgnPycgPT09IHN0YXRlLnRhZykge1xuICAgICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDtcbiAgICAgICAgICAgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5O1xuICAgICAgICAgICB0eXBlSW5kZXggKz0gMSkge1xuICAgICAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1t0eXBlSW5kZXhdO1xuXG4gICAgICAgIC8vIEltcGxpY2l0IHJlc29sdmluZyBpcyBub3QgYWxsb3dlZCBmb3Igbm9uLXNjYWxhciB0eXBlcywgYW5kICc/J1xuICAgICAgICAvLyBub24tc3BlY2lmaWMgdGFnIGlzIG9ubHkgYXNzaWduZWQgdG8gcGxhaW4gc2NhbGFycy4gU28sIGl0IGlzbid0XG4gICAgICAgIC8vIG5lZWRlZCB0byBjaGVjayBmb3IgJ2tpbmQnIGNvbmZvcm1pdHkuXG5cbiAgICAgICAgaWYgKHR5cGUucmVzb2x2ZShzdGF0ZS5yZXN1bHQpKSB7IC8vIGBzdGF0ZS5yZXN1bHRgIHVwZGF0ZWQgaW4gcmVzb2x2ZXIgaWYgbWF0Y2hlZFxuICAgICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUuY29uc3RydWN0KHN0YXRlLnJlc3VsdCk7XG4gICAgICAgICAgc3RhdGUudGFnID0gdHlwZS50YWc7XG4gICAgICAgICAgaWYgKG51bGwgIT09IHN0YXRlLmFuY2hvcikge1xuICAgICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50eXBlTWFwLCBzdGF0ZS50YWcpKSB7XG4gICAgICB0eXBlID0gc3RhdGUudHlwZU1hcFtzdGF0ZS50YWddO1xuXG4gICAgICBpZiAobnVsbCAhPT0gc3RhdGUucmVzdWx0ICYmIHR5cGUua2luZCAhPT0gc3RhdGUua2luZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwnICsgc3RhdGUudGFnICsgJz4gdGFnOyBpdCBzaG91bGQgYmUgXCInICsgdHlwZS5raW5kICsgJ1wiLCBub3QgXCInICsgc3RhdGUua2luZCArICdcIicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXR5cGUucmVzb2x2ZShzdGF0ZS5yZXN1bHQpKSB7IC8vIGBzdGF0ZS5yZXN1bHRgIHVwZGF0ZWQgaW4gcmVzb2x2ZXIgaWYgbWF0Y2hlZFxuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwnICsgc3RhdGUudGFnICsgJz4gZXhwbGljaXQgdGFnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQpO1xuICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGUuYW5jaG9yKSB7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3Vua25vd24gdGFnICE8JyArIHN0YXRlLnRhZyArICc+Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGwgIT09IHN0YXRlLnRhZyB8fCBudWxsICE9PSBzdGF0ZS5hbmNob3IgfHwgaGFzQ29udGVudDtcbn1cblxuZnVuY3Rpb24gcmVhZERvY3VtZW50KHN0YXRlKSB7XG4gIHZhciBkb2N1bWVudFN0YXJ0ID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBfcG9zaXRpb24sXG4gICAgICBkaXJlY3RpdmVOYW1lLFxuICAgICAgZGlyZWN0aXZlQXJncyxcbiAgICAgIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIHN0YXRlLnZlcnNpb24gPSBudWxsO1xuICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSBzdGF0ZS5sZWdhY3k7XG4gIHN0YXRlLnRhZ01hcCA9IHt9O1xuICBzdGF0ZS5hbmNob3JNYXAgPSB7fTtcblxuICB3aGlsZSAoMCAhPT0gKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpKSB7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gMCB8fCAweDI1LyogJSAqLyAhPT0gY2gpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIHdoaWxlICgwICE9PSBjaCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGRpcmVjdGl2ZU5hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICBkaXJlY3RpdmVBcmdzID0gW107XG5cbiAgICBpZiAoZGlyZWN0aXZlTmFtZS5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgd2hpbGUgKDAgIT09IGNoKSB7XG4gICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKDB4MjMvKiAjICovID09PSBjaCkge1xuICAgICAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgICAgICB3aGlsZSAoMCAhPT0gY2ggJiYgIWlzX0VPTChjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgICB3aGlsZSAoMCAhPT0gY2ggJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBkaXJlY3RpdmVBcmdzLnB1c2goc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbikpO1xuICAgIH1cblxuICAgIGlmICgwICE9PSBjaCkge1xuICAgICAgcmVhZExpbmVCcmVhayhzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkge1xuICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUsIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSBcIicgKyBkaXJlY3RpdmVOYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9XG5cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmICgwID09PSBzdGF0ZS5saW5lSW5kZW50ICYmXG4gICAgICAweDJELyogLSAqLyA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgJiZcbiAgICAgIDB4MkQvKiAtICovID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSkgJiZcbiAgICAgIDB4MkQvKiAtICovID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMikpIHtcbiAgICBzdGF0ZS5wb3NpdGlvbiArPSAzO1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICB9IGVsc2UgaWYgKGhhc0RpcmVjdGl2ZXMpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZCcpO1xuICB9XG5cbiAgY29tcG9zZU5vZGUoc3RhdGUsIHN0YXRlLmxpbmVJbmRlbnQgLSAxLCBDT05URVhUX0JMT0NLX09VVCwgZmFsc2UsIHRydWUpO1xuICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG5cbiAgaWYgKHN0YXRlLmNoZWNrTGluZUJyZWFrcyAmJlxuICAgICAgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MudGVzdChzdGF0ZS5pbnB1dC5zbGljZShkb2N1bWVudFN0YXJ0LCBzdGF0ZS5wb3NpdGlvbikpKSB7XG4gICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAnbm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50Jyk7XG4gIH1cblxuICBzdGF0ZS5kb2N1bWVudHMucHVzaChzdGF0ZS5yZXN1bHQpO1xuXG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcblxuICAgIGlmICgweDJFLyogLiAqLyA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uICs9IDM7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA8IChzdGF0ZS5sZW5ndGggLSAxKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZiAoaW5wdXQubGVuZ3RoICE9PSAwKSB7XG5cbiAgICAvLyBBZGQgdGFpbGluZyBgXFxuYCBpZiBub3QgZXhpc3RzXG4gICAgaWYgKDB4MEEvKiBMRiAqLyAhPT0gaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAmJlxuICAgICAgICAweDBELyogQ1IgKi8gIT09IGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkpIHtcbiAgICAgIGlucHV0ICs9ICdcXG4nO1xuICAgIH1cblxuICAgIC8vIFN0cmlwIEJPTVxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXRlID0gbmV3IFN0YXRlKGlucHV0LCBvcHRpb25zKTtcblxuICAvLyBVc2UgMCBhcyBzdHJpbmcgdGVybWluYXRvci4gVGhhdCBzaWduaWZpY2FudGx5IHNpbXBsaWZpZXMgYm91bmRzIGNoZWNrLlxuICBzdGF0ZS5pbnB1dCArPSAnXFwwJztcblxuICB3aGlsZSAoMHgyMC8qIFNwYWNlICovID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkge1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgKz0gMTtcbiAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICB9XG5cbiAgd2hpbGUgKHN0YXRlLnBvc2l0aW9uIDwgKHN0YXRlLmxlbmd0aCAtIDEpKSB7XG4gICAgcmVhZERvY3VtZW50KHN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZS5kb2N1bWVudHM7XG59XG5cblxuZnVuY3Rpb24gbG9hZEFsbChpbnB1dCwgaXRlcmF0b3IsIG9wdGlvbnMpIHtcbiAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpLCBpbmRleCwgbGVuZ3RoO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBkb2N1bWVudHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGl0ZXJhdG9yKGRvY3VtZW50c1tpbmRleF0pO1xuICB9XG59XG5cblxuZnVuY3Rpb24gbG9hZChpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgZG9jdW1lbnRzID0gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucyk7XG5cbiAgaWYgKDAgPT09IGRvY3VtZW50cy5sZW5ndGgpIHtcbiAgICAvKmVzbGludC1kaXNhYmxlIG5vLXVuZGVmaW5lZCovXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIGlmICgxID09PSBkb2N1bWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50c1swXTtcbiAgfVxuICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUnKTtcbn1cblxuXG5mdW5jdGlvbiBzYWZlTG9hZEFsbChpbnB1dCwgb3V0cHV0LCBvcHRpb25zKSB7XG4gIGxvYWRBbGwoaW5wdXQsIG91dHB1dCwgY29tbW9uLmV4dGVuZCh7IHNjaGVtYTogREVGQVVMVF9TQUZFX1NDSEVNQSB9LCBvcHRpb25zKSk7XG59XG5cblxuZnVuY3Rpb24gc2FmZUxvYWQoaW5wdXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxvYWQoaW5wdXQsIGNvbW1vbi5leHRlbmQoeyBzY2hlbWE6IERFRkFVTFRfU0FGRV9TQ0hFTUEgfSwgb3B0aW9ucykpO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzLmxvYWRBbGwgICAgID0gbG9hZEFsbDtcbm1vZHVsZS5leHBvcnRzLmxvYWQgICAgICAgID0gbG9hZDtcbm1vZHVsZS5leHBvcnRzLnNhZmVMb2FkQWxsID0gc2FmZUxvYWRBbGw7XG5tb2R1bGUuZXhwb3J0cy5zYWZlTG9hZCAgICA9IHNhZmVMb2FkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBjb21tb24gPSByZXF1aXJlKCcuL2NvbW1vbicpO1xuXG5cbmZ1bmN0aW9uIE1hcmsobmFtZSwgYnVmZmVyLCBwb3NpdGlvbiwgbGluZSwgY29sdW1uKSB7XG4gIHRoaXMubmFtZSAgICAgPSBuYW1lO1xuICB0aGlzLmJ1ZmZlciAgID0gYnVmZmVyO1xuICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XG4gIHRoaXMubGluZSAgICAgPSBsaW5lO1xuICB0aGlzLmNvbHVtbiAgID0gY29sdW1uO1xufVxuXG5cbk1hcmsucHJvdG90eXBlLmdldFNuaXBwZXQgPSBmdW5jdGlvbiBnZXRTbmlwcGV0KGluZGVudCwgbWF4TGVuZ3RoKSB7XG4gIHZhciBoZWFkLCBzdGFydCwgdGFpbCwgZW5kLCBzbmlwcGV0O1xuXG4gIGlmICghdGhpcy5idWZmZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGluZGVudCA9IGluZGVudCB8fCA0O1xuICBtYXhMZW5ndGggPSBtYXhMZW5ndGggfHwgNzU7XG5cbiAgaGVhZCA9ICcnO1xuICBzdGFydCA9IHRoaXMucG9zaXRpb247XG5cbiAgd2hpbGUgKHN0YXJ0ID4gMCAmJiAtMSA9PT0gJ1xceDAwXFxyXFxuXFx4ODVcXHUyMDI4XFx1MjAyOScuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoc3RhcnQgLSAxKSkpIHtcbiAgICBzdGFydCAtPSAxO1xuICAgIGlmICh0aGlzLnBvc2l0aW9uIC0gc3RhcnQgPiAobWF4TGVuZ3RoIC8gMiAtIDEpKSB7XG4gICAgICBoZWFkID0gJyAuLi4gJztcbiAgICAgIHN0YXJ0ICs9IDU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0YWlsID0gJyc7XG4gIGVuZCA9IHRoaXMucG9zaXRpb247XG5cbiAgd2hpbGUgKGVuZCA8IHRoaXMuYnVmZmVyLmxlbmd0aCAmJiAtMSA9PT0gJ1xceDAwXFxyXFxuXFx4ODVcXHUyMDI4XFx1MjAyOScuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoZW5kKSkpIHtcbiAgICBlbmQgKz0gMTtcbiAgICBpZiAoZW5kIC0gdGhpcy5wb3NpdGlvbiA+IChtYXhMZW5ndGggLyAyIC0gMSkpIHtcbiAgICAgIHRhaWwgPSAnIC4uLiAnO1xuICAgICAgZW5kIC09IDU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzbmlwcGV0ID0gdGhpcy5idWZmZXIuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgcmV0dXJuIGNvbW1vbi5yZXBlYXQoJyAnLCBpbmRlbnQpICsgaGVhZCArIHNuaXBwZXQgKyB0YWlsICsgJ1xcbicgK1xuICAgICAgICAgY29tbW9uLnJlcGVhdCgnICcsIGluZGVudCArIHRoaXMucG9zaXRpb24gLSBzdGFydCArIGhlYWQubGVuZ3RoKSArICdeJztcbn07XG5cblxuTWFyay5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhjb21wYWN0KSB7XG4gIHZhciBzbmlwcGV0LCB3aGVyZSA9ICcnO1xuXG4gIGlmICh0aGlzLm5hbWUpIHtcbiAgICB3aGVyZSArPSAnaW4gXCInICsgdGhpcy5uYW1lICsgJ1wiICc7XG4gIH1cblxuICB3aGVyZSArPSAnYXQgbGluZSAnICsgKHRoaXMubGluZSArIDEpICsgJywgY29sdW1uICcgKyAodGhpcy5jb2x1bW4gKyAxKTtcblxuICBpZiAoIWNvbXBhY3QpIHtcbiAgICBzbmlwcGV0ID0gdGhpcy5nZXRTbmlwcGV0KCk7XG5cbiAgICBpZiAoc25pcHBldCkge1xuICAgICAgd2hlcmUgKz0gJzpcXG4nICsgc25pcHBldDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2hlcmU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gTWFyaztcbiIsIid1c2Ugc3RyaWN0JztcblxuLyplc2xpbnQtZGlzYWJsZSBtYXgtbGVuKi9cblxudmFyIGNvbW1vbiAgICAgICAgPSByZXF1aXJlKCcuL2NvbW1vbicpO1xudmFyIFlBTUxFeGNlcHRpb24gPSByZXF1aXJlKCcuL2V4Y2VwdGlvbicpO1xudmFyIFR5cGUgICAgICAgICAgPSByZXF1aXJlKCcuL3R5cGUnKTtcblxuXG5mdW5jdGlvbiBjb21waWxlTGlzdChzY2hlbWEsIG5hbWUsIHJlc3VsdCkge1xuICB2YXIgZXhjbHVkZSA9IFtdO1xuXG4gIHNjaGVtYS5pbmNsdWRlLmZvckVhY2goZnVuY3Rpb24gKGluY2x1ZGVkU2NoZW1hKSB7XG4gICAgcmVzdWx0ID0gY29tcGlsZUxpc3QoaW5jbHVkZWRTY2hlbWEsIG5hbWUsIHJlc3VsdCk7XG4gIH0pO1xuXG4gIHNjaGVtYVtuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50VHlwZSkge1xuICAgIHJlc3VsdC5mb3JFYWNoKGZ1bmN0aW9uIChwcmV2aW91c1R5cGUsIHByZXZpb3VzSW5kZXgpIHtcbiAgICAgIGlmIChwcmV2aW91c1R5cGUudGFnID09PSBjdXJyZW50VHlwZS50YWcpIHtcbiAgICAgICAgZXhjbHVkZS5wdXNoKHByZXZpb3VzSW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVzdWx0LnB1c2goY3VycmVudFR5cGUpO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0LmZpbHRlcihmdW5jdGlvbiAodHlwZSwgaW5kZXgpIHtcbiAgICByZXR1cm4gLTEgPT09IGV4Y2x1ZGUuaW5kZXhPZihpbmRleCk7XG4gIH0pO1xufVxuXG5cbmZ1bmN0aW9uIGNvbXBpbGVNYXAoLyogbGlzdHMuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9LCBpbmRleCwgbGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3RUeXBlKHR5cGUpIHtcbiAgICByZXN1bHRbdHlwZS50YWddID0gdHlwZTtcbiAgfVxuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGFyZ3VtZW50c1tpbmRleF0uZm9yRWFjaChjb2xsZWN0VHlwZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIFNjaGVtYShkZWZpbml0aW9uKSB7XG4gIHRoaXMuaW5jbHVkZSAgPSBkZWZpbml0aW9uLmluY2x1ZGUgIHx8IFtdO1xuICB0aGlzLmltcGxpY2l0ID0gZGVmaW5pdGlvbi5pbXBsaWNpdCB8fCBbXTtcbiAgdGhpcy5leHBsaWNpdCA9IGRlZmluaXRpb24uZXhwbGljaXQgfHwgW107XG5cbiAgdGhpcy5pbXBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUubG9hZEtpbmQgJiYgJ3NjYWxhcicgIT09IHR5cGUubG9hZEtpbmQpIHtcbiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMuY29tcGlsZWRJbXBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsICdpbXBsaWNpdCcsIFtdKTtcbiAgdGhpcy5jb21waWxlZEV4cGxpY2l0ID0gY29tcGlsZUxpc3QodGhpcywgJ2V4cGxpY2l0JywgW10pO1xuICB0aGlzLmNvbXBpbGVkVHlwZU1hcCAgPSBjb21waWxlTWFwKHRoaXMuY29tcGlsZWRJbXBsaWNpdCwgdGhpcy5jb21waWxlZEV4cGxpY2l0KTtcbn1cblxuXG5TY2hlbWEuREVGQVVMVCA9IG51bGw7XG5cblxuU2NoZW1hLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZVNjaGVtYSgpIHtcbiAgdmFyIHNjaGVtYXMsIHR5cGVzO1xuXG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICBjYXNlIDE6XG4gICAgc2NoZW1hcyA9IFNjaGVtYS5ERUZBVUxUO1xuICAgIHR5cGVzID0gYXJndW1lbnRzWzBdO1xuICAgIGJyZWFrO1xuXG4gIGNhc2UgMjpcbiAgICBzY2hlbWFzID0gYXJndW1lbnRzWzBdO1xuICAgIHR5cGVzID0gYXJndW1lbnRzWzFdO1xuICAgIGJyZWFrO1xuXG4gIGRlZmF1bHQ6XG4gICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIFNjaGVtYS5jcmVhdGUgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHNjaGVtYXMgPSBjb21tb24udG9BcnJheShzY2hlbWFzKTtcbiAgdHlwZXMgPSBjb21tb24udG9BcnJheSh0eXBlcyk7XG5cbiAgaWYgKCFzY2hlbWFzLmV2ZXJ5KGZ1bmN0aW9uIChzY2hlbWEpIHsgcmV0dXJuIHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYTsgfSkpIHtcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignU3BlY2lmaWVkIGxpc3Qgb2Ygc3VwZXIgc2NoZW1hcyAob3IgYSBzaW5nbGUgU2NoZW1hIG9iamVjdCkgY29udGFpbnMgYSBub24tU2NoZW1hIG9iamVjdC4nKTtcbiAgfVxuXG4gIGlmICghdHlwZXMuZXZlcnkoZnVuY3Rpb24gKHR5cGUpIHsgcmV0dXJuIHR5cGUgaW5zdGFuY2VvZiBUeXBlOyB9KSkge1xuICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuJyk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNjaGVtYSh7XG4gICAgaW5jbHVkZTogc2NoZW1hcyxcbiAgICBleHBsaWNpdDogdHlwZXNcbiAgfSk7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gU2NoZW1hO1xuIiwiLy8gU3RhbmRhcmQgWUFNTCdzIENvcmUgc2NoZW1hLlxuLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjaWQyODA0OTIzXG4vL1xuLy8gTk9URTogSlMtWUFNTCBkb2VzIG5vdCBzdXBwb3J0IHNjaGVtYS1zcGVjaWZpYyB0YWcgcmVzb2x1dGlvbiByZXN0cmljdGlvbnMuXG4vLyBTbywgQ29yZSBzY2hlbWEgaGFzIG5vIGRpc3RpbmN0aW9ucyBmcm9tIEpTT04gc2NoZW1hIGlzIEpTLVlBTUwuXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9qc29uJylcbiAgXVxufSk7XG4iLCIvLyBKUy1ZQU1MJ3MgZGVmYXVsdCBzY2hlbWEgZm9yIGBsb2FkYCBmdW5jdGlvbi5cbi8vIEl0IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbi8vXG4vLyBUaGlzIHNjaGVtYSBpcyBiYXNlZCBvbiBKUy1ZQU1MJ3MgZGVmYXVsdCBzYWZlIHNjaGVtYSBhbmQgaW5jbHVkZXNcbi8vIEphdmFTY3JpcHQtc3BlY2lmaWMgdHlwZXM6ICEhanMvdW5kZWZpbmVkLCAhIWpzL3JlZ2V4cCBhbmQgISFqcy9mdW5jdGlvbi5cbi8vXG4vLyBBbHNvIHRoaXMgc2NoZW1hIGlzIHVzZWQgYXMgZGVmYXVsdCBiYXNlIHNjaGVtYSBhdCBgU2NoZW1hLmNyZWF0ZWAgZnVuY3Rpb24uXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYS5ERUZBVUxUID0gbmV3IFNjaGVtYSh7XG4gIGluY2x1ZGU6IFtcbiAgICByZXF1aXJlKCcuL2RlZmF1bHRfc2FmZScpXG4gIF0sXG4gIGV4cGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9qcy91bmRlZmluZWQnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2pzL3JlZ2V4cCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvanMvZnVuY3Rpb24nKVxuICBdXG59KTtcbiIsIi8vIEpTLVlBTUwncyBkZWZhdWx0IHNjaGVtYSBmb3IgYHNhZmVMb2FkYCBmdW5jdGlvbi5cbi8vIEl0IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbi8vXG4vLyBUaGlzIHNjaGVtYSBpcyBiYXNlZCBvbiBzdGFuZGFyZCBZQU1MJ3MgQ29yZSBzY2hlbWEgYW5kIGluY2x1ZGVzIG1vc3Qgb2Zcbi8vIGV4dHJhIHR5cGVzIGRlc2NyaWJlZCBhdCBZQU1MIHRhZyByZXBvc2l0b3J5LiAoaHR0cDovL3lhbWwub3JnL3R5cGUvKVxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgaW5jbHVkZTogW1xuICAgIHJlcXVpcmUoJy4vY29yZScpXG4gIF0sXG4gIGltcGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS90aW1lc3RhbXAnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL21lcmdlJylcbiAgXSxcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL2JpbmFyeScpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvb21hcCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvcGFpcnMnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL3NldCcpXG4gIF1cbn0pO1xuIiwiLy8gU3RhbmRhcmQgWUFNTCdzIEZhaWxzYWZlIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMjM0NlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL3N0cicpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvc2VxJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9tYXAnKVxuICBdXG59KTtcbiIsIi8vIFN0YW5kYXJkIFlBTUwncyBKU09OIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMzIzMVxuLy9cbi8vIE5PVEU6IEpTLVlBTUwgZG9lcyBub3Qgc3VwcG9ydCBzY2hlbWEtc3BlY2lmaWMgdGFnIHJlc29sdXRpb24gcmVzdHJpY3Rpb25zLlxuLy8gU28sIHRoaXMgc2NoZW1hIGlzIG5vdCBzdWNoIHN0cmljdCBhcyBkZWZpbmVkIGluIHRoZSBZQU1MIHNwZWNpZmljYXRpb24uXG4vLyBJdCBhbGxvd3MgbnVtYmVycyBpbiBiaW5hcnkgbm90YWlvbiwgdXNlIGBOdWxsYCBhbmQgYE5VTExgIGFzIGBudWxsYCwgZXRjLlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgaW5jbHVkZTogW1xuICAgIHJlcXVpcmUoJy4vZmFpbHNhZmUnKVxuICBdLFxuICBpbXBsaWNpdDogW1xuICAgIHJlcXVpcmUoJy4uL3R5cGUvbnVsbCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvYm9vbCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvaW50JyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9mbG9hdCcpXG4gIF1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG5cbnZhciBUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMgPSBbXG4gICdraW5kJyxcbiAgJ3Jlc29sdmUnLFxuICAnY29uc3RydWN0JyxcbiAgJ2luc3RhbmNlT2YnLFxuICAncHJlZGljYXRlJyxcbiAgJ3JlcHJlc2VudCcsXG4gICdkZWZhdWx0U3R5bGUnLFxuICAnc3R5bGVBbGlhc2VzJ1xuXTtcblxudmFyIFlBTUxfTk9ERV9LSU5EUyA9IFtcbiAgJ3NjYWxhcicsXG4gICdzZXF1ZW5jZScsXG4gICdtYXBwaW5nJ1xuXTtcblxuZnVuY3Rpb24gY29tcGlsZVN0eWxlQWxpYXNlcyhtYXApIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGlmIChudWxsICE9PSBtYXApIHtcbiAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgICBtYXBbc3R5bGVdLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICAgIHJlc3VsdFtTdHJpbmcoYWxpYXMpXSA9IHN0eWxlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBUeXBlKHRhZywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKC0xID09PSBUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMuaW5kZXhPZihuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24gb3B0aW9uIFwiJyArIG5hbWUgKyAnXCIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgXCInICsgdGFnICsgJ1wiIFlBTUwgdHlwZS4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFRPRE86IEFkZCB0YWcgZm9ybWF0IGNoZWNrLlxuICB0aGlzLnRhZyAgICAgICAgICA9IHRhZztcbiAgdGhpcy5raW5kICAgICAgICAgPSBvcHRpb25zWydraW5kJ10gICAgICAgICB8fCBudWxsO1xuICB0aGlzLnJlc29sdmUgICAgICA9IG9wdGlvbnNbJ3Jlc29sdmUnXSAgICAgIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XG4gIHRoaXMuY29uc3RydWN0ICAgID0gb3B0aW9uc1snY29uc3RydWN0J10gICAgfHwgZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGE7IH07XG4gIHRoaXMuaW5zdGFuY2VPZiAgID0gb3B0aW9uc1snaW5zdGFuY2VPZiddICAgfHwgbnVsbDtcbiAgdGhpcy5wcmVkaWNhdGUgICAgPSBvcHRpb25zWydwcmVkaWNhdGUnXSAgICB8fCBudWxsO1xuICB0aGlzLnJlcHJlc2VudCAgICA9IG9wdGlvbnNbJ3JlcHJlc2VudCddICAgIHx8IG51bGw7XG4gIHRoaXMuZGVmYXVsdFN0eWxlID0gb3B0aW9uc1snZGVmYXVsdFN0eWxlJ10gfHwgbnVsbDtcbiAgdGhpcy5zdHlsZUFsaWFzZXMgPSBjb21waWxlU3R5bGVBbGlhc2VzKG9wdGlvbnNbJ3N0eWxlQWxpYXNlcyddIHx8IG51bGwpO1xuXG4gIGlmICgtMSA9PT0gWUFNTF9OT0RFX0tJTkRTLmluZGV4T2YodGhpcy5raW5kKSkge1xuICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdVbmtub3duIGtpbmQgXCInICsgdGhpcy5raW5kICsgJ1wiIGlzIHNwZWNpZmllZCBmb3IgXCInICsgdGFnICsgJ1wiIFlBTUwgdHlwZS4nKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFR5cGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG5cbi8vIEEgdHJpY2sgZm9yIGJyb3dzZXJpZmllZCB2ZXJzaW9uLlxuLy8gU2luY2Ugd2UgbWFrZSBicm93c2VyaWZpZXIgdG8gaWdub3JlIGBidWZmZXJgIG1vZHVsZSwgTm9kZUJ1ZmZlciB3aWxsIGJlIHVuZGVmaW5lZFxudmFyIE5vZGVCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgVHlwZSAgICAgICA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuXG4vLyBbIDY0LCA2NSwgNjYgXSAtPiBbIHBhZGRpbmcsIENSLCBMRiBdXG52YXIgQkFTRTY0X01BUCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVxcblxccic7XG5cblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCaW5hcnkoZGF0YSkge1xuICBpZiAobnVsbCA9PT0gZGF0YSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjb2RlLCBpZHgsIGJpdGxlbiA9IDAsIG1heCA9IGRhdGEubGVuZ3RoLCBtYXAgPSBCQVNFNjRfTUFQO1xuXG4gIC8vIENvbnZlcnQgb25lIGJ5IG9uZS5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgY29kZSA9IG1hcC5pbmRleE9mKGRhdGEuY2hhckF0KGlkeCkpO1xuXG4gICAgLy8gU2tpcCBDUi9MRlxuICAgIGlmIChjb2RlID4gNjQpIHsgY29udGludWU7IH1cblxuICAgIC8vIEZhaWwgb24gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gICAgaWYgKGNvZGUgPCAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgYml0bGVuICs9IDY7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGJpdHMgbGVmdCwgc291cmNlIHdhcyBjb3JydXB0ZWRcbiAgcmV0dXJuIChiaXRsZW4gJSA4KSA9PT0gMDtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJpbmFyeShkYXRhKSB7XG4gIHZhciBpZHgsIHRhaWxiaXRzLFxuICAgICAgaW5wdXQgPSBkYXRhLnJlcGxhY2UoL1tcXHJcXG49XS9nLCAnJyksIC8vIHJlbW92ZSBDUi9MRiAmIHBhZGRpbmcgdG8gc2ltcGxpZnkgc2NhblxuICAgICAgbWF4ID0gaW5wdXQubGVuZ3RoLFxuICAgICAgbWFwID0gQkFTRTY0X01BUCxcbiAgICAgIGJpdHMgPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgLy8gQ29sbGVjdCBieSA2KjQgYml0cyAoMyBieXRlcylcblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoKGlkeCAlIDQgPT09IDApICYmIGlkeCkge1xuICAgICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMTYpICYgMHhGRik7XG4gICAgICByZXN1bHQucHVzaCgoYml0cyA+PiA4KSAmIDB4RkYpO1xuICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDB4RkYpO1xuICAgIH1cblxuICAgIGJpdHMgPSAoYml0cyA8PCA2KSB8IG1hcC5pbmRleE9mKGlucHV0LmNoYXJBdChpZHgpKTtcbiAgfVxuXG4gIC8vIER1bXAgdGFpbFxuXG4gIHRhaWxiaXRzID0gKG1heCAlIDQpICogNjtcblxuICBpZiAodGFpbGJpdHMgPT09IDApIHtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxNikgJiAweEZGKTtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiA4KSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKGJpdHMgJiAweEZGKTtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTgpIHtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxMCkgJiAweEZGKTtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiAyKSAmIDB4RkYpO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxMikge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDQpICYgMHhGRik7XG4gIH1cblxuICAvLyBXcmFwIGludG8gQnVmZmVyIGZvciBOb2RlSlMgYW5kIGxlYXZlIEFycmF5IGZvciBicm93c2VyXG4gIGlmIChOb2RlQnVmZmVyKSB7XG4gICAgcmV0dXJuIG5ldyBOb2RlQnVmZmVyKHJlc3VsdCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sQmluYXJ5KG9iamVjdCAvKiwgc3R5bGUqLykge1xuICB2YXIgcmVzdWx0ID0gJycsIGJpdHMgPSAwLCBpZHgsIHRhaWwsXG4gICAgICBtYXggPSBvYmplY3QubGVuZ3RoLFxuICAgICAgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IGV2ZXJ5IHRocmVlIGJ5dGVzIHRvIDQgQVNDSUkgY2hhcmFjdGVycy5cblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoKGlkeCAlIDMgPT09IDApICYmIGlkeCkge1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTIpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDYpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgOCkgKyBvYmplY3RbaWR4XTtcbiAgfVxuXG4gIC8vIER1bXAgdGFpbFxuXG4gIHRhaWwgPSBtYXggJSAzO1xuXG4gIGlmICh0YWlsID09PSAwKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gNikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDQpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCAyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDEpIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDIpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCA0KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNCaW5hcnkob2JqZWN0KSB7XG4gIHJldHVybiBOb2RlQnVmZmVyICYmIE5vZGVCdWZmZXIuaXNCdWZmZXIob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCaW5hcnksXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJpbmFyeSxcbiAgcHJlZGljYXRlOiBpc0JpbmFyeSxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sQmluYXJ5XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sQm9vbGVhbihkYXRhKSB7XG4gIGlmIChudWxsID09PSBkYXRhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoO1xuXG4gIHJldHVybiAobWF4ID09PSA0ICYmIChkYXRhID09PSAndHJ1ZScgfHwgZGF0YSA9PT0gJ1RydWUnIHx8IGRhdGEgPT09ICdUUlVFJykpIHx8XG4gICAgICAgICAobWF4ID09PSA1ICYmIChkYXRhID09PSAnZmFsc2UnIHx8IGRhdGEgPT09ICdGYWxzZScgfHwgZGF0YSA9PT0gJ0ZBTFNFJykpO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQm9vbGVhbihkYXRhKSB7XG4gIHJldHVybiBkYXRhID09PSAndHJ1ZScgfHxcbiAgICAgICAgIGRhdGEgPT09ICdUcnVlJyB8fFxuICAgICAgICAgZGF0YSA9PT0gJ1RSVUUnO1xufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqZWN0KSB7XG4gIHJldHVybiAnW29iamVjdCBCb29sZWFuXScgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpib29sJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCb29sZWFuLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCb29sZWFuLFxuICBwcmVkaWNhdGU6IGlzQm9vbGVhbixcbiAgcmVwcmVzZW50OiB7XG4gICAgbG93ZXJjYXNlOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiBvYmplY3QgPyAndHJ1ZScgOiAnZmFsc2UnOyB9LFxuICAgIHVwcGVyY2FzZTogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gb2JqZWN0ID8gJ1RSVUUnIDogJ0ZBTFNFJzsgfSxcbiAgICBjYW1lbGNhc2U6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuIG9iamVjdCA/ICdUcnVlJyA6ICdGYWxzZSc7IH1cbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiAnbG93ZXJjYXNlJ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBUeXBlICAgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBZQU1MX0ZMT0FUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFxuICAnXig/OlstK10/KD86WzAtOV1bMC05X10qKVxcXFwuWzAtOV9dKig/OltlRV1bLStdWzAtOV0rKT8nICtcbiAgJ3xcXFxcLlswLTlfXSsoPzpbZUVdWy0rXVswLTldKyk/JyArXG4gICd8Wy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pK1xcXFwuWzAtOV9dKicgK1xuICAnfFstK10/XFxcXC4oPzppbmZ8SW5mfElORiknICtcbiAgJ3xcXFxcLig/Om5hbnxOYU58TkFOKSkkJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sRmxvYXQoZGF0YSkge1xuICBpZiAobnVsbCA9PT0gZGF0YSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghWUFNTF9GTE9BVF9QQVRURVJOLnRlc3QoZGF0YSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxGbG9hdChkYXRhKSB7XG4gIHZhciB2YWx1ZSwgc2lnbiwgYmFzZSwgZGlnaXRzO1xuXG4gIHZhbHVlICA9IGRhdGEucmVwbGFjZSgvXy9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgc2lnbiAgID0gJy0nID09PSB2YWx1ZVswXSA/IC0xIDogMTtcbiAgZGlnaXRzID0gW107XG5cbiAgaWYgKDAgPD0gJystJy5pbmRleE9mKHZhbHVlWzBdKSkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICBpZiAoJy5pbmYnID09PSB2YWx1ZSkge1xuICAgIHJldHVybiAoMSA9PT0gc2lnbikgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgfSBlbHNlIGlmICgnLm5hbicgPT09IHZhbHVlKSB7XG4gICAgcmV0dXJuIE5hTjtcblxuICB9IGVsc2UgaWYgKDAgPD0gdmFsdWUuaW5kZXhPZignOicpKSB7XG4gICAgdmFsdWUuc3BsaXQoJzonKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgICBkaWdpdHMudW5zaGlmdChwYXJzZUZsb2F0KHYsIDEwKSk7XG4gICAgfSk7XG5cbiAgICB2YWx1ZSA9IDAuMDtcbiAgICBiYXNlID0gMTtcblxuICAgIGRpZ2l0cy5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgICB2YWx1ZSArPSBkICogYmFzZTtcbiAgICAgIGJhc2UgKj0gNjA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2lnbiAqIHZhbHVlO1xuXG4gIH1cbiAgcmV0dXJuIHNpZ24gKiBwYXJzZUZsb2F0KHZhbHVlLCAxMCk7XG59XG5cblxudmFyIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QgPSAvXlstK10/WzAtOV0rZS87XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxGbG9hdChvYmplY3QsIHN0eWxlKSB7XG4gIHZhciByZXM7XG5cbiAgaWYgKGlzTmFOKG9iamVjdCkpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgY2FzZSAnbG93ZXJjYXNlJzpcbiAgICAgIHJldHVybiAnLm5hbic7XG4gICAgY2FzZSAndXBwZXJjYXNlJzpcbiAgICAgIHJldHVybiAnLk5BTic7XG4gICAgY2FzZSAnY2FtZWxjYXNlJzpcbiAgICAgIHJldHVybiAnLk5hTic7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgIGNhc2UgJ2xvd2VyY2FzZSc6XG4gICAgICByZXR1cm4gJy5pbmYnO1xuICAgIGNhc2UgJ3VwcGVyY2FzZSc6XG4gICAgICByZXR1cm4gJy5JTkYnO1xuICAgIGNhc2UgJ2NhbWVsY2FzZSc6XG4gICAgICByZXR1cm4gJy5JbmYnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICBjYXNlICdsb3dlcmNhc2UnOlxuICAgICAgcmV0dXJuICctLmluZic7XG4gICAgY2FzZSAndXBwZXJjYXNlJzpcbiAgICAgIHJldHVybiAnLS5JTkYnO1xuICAgIGNhc2UgJ2NhbWVsY2FzZSc6XG4gICAgICByZXR1cm4gJy0uSW5mJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpIHtcbiAgICByZXR1cm4gJy0wLjAnO1xuICB9XG5cbiAgcmVzID0gb2JqZWN0LnRvU3RyaW5nKDEwKTtcblxuICAvLyBKUyBzdHJpbmdpZmllciBjYW4gYnVpbGQgc2NpZW50aWZpYyBmb3JtYXQgd2l0aG91dCBkb3RzOiA1ZS0xMDAsXG4gIC8vIHdoaWxlIFlBTUwgcmVxdXJlcyBkb3Q6IDUuZS0xMDAuIEZpeCBpdCB3aXRoIHNpbXBsZSBoYWNrXG5cbiAgcmV0dXJuIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QudGVzdChyZXMpID8gcmVzLnJlcGxhY2UoJ2UnLCAnLmUnKSA6IHJlcztcbn1cblxuZnVuY3Rpb24gaXNGbG9hdChvYmplY3QpIHtcbiAgcmV0dXJuICgnW29iamVjdCBOdW1iZXJdJyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkpICYmXG4gICAgICAgICAoMCAhPT0gb2JqZWN0ICUgMSB8fCBjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxGbG9hdCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sRmxvYXQsXG4gIHByZWRpY2F0ZTogaXNGbG9hdCxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sRmxvYXQsXG4gIGRlZmF1bHRTdHlsZTogJ2xvd2VyY2FzZSdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgVHlwZSAgID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiBpc0hleENvZGUoYykge1xuICByZXR1cm4gKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM5LyogOSAqLykpIHx8XG4gICAgICAgICAoKDB4NDEvKiBBICovIDw9IGMpICYmIChjIDw9IDB4NDYvKiBGICovKSkgfHxcbiAgICAgICAgICgoMHg2MS8qIGEgKi8gPD0gYykgJiYgKGMgPD0gMHg2Ni8qIGYgKi8pKTtcbn1cblxuZnVuY3Rpb24gaXNPY3RDb2RlKGMpIHtcbiAgcmV0dXJuICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzNy8qIDcgKi8pKTtcbn1cblxuZnVuY3Rpb24gaXNEZWNDb2RlKGMpIHtcbiAgcmV0dXJuICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxJbnRlZ2VyKGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGgsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBoYXNEaWdpdHMgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIGlmICghbWF4KSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIGNoID0gZGF0YVtpbmRleF07XG5cbiAgLy8gc2lnblxuICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuICB9XG5cbiAgaWYgKGNoID09PSAnMCcpIHtcbiAgICAvLyAwXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gbWF4KSB7IHJldHVybiB0cnVlOyB9XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuXG4gICAgLy8gYmFzZSAyLCBiYXNlIDgsIGJhc2UgMTZcblxuICAgIGlmIChjaCA9PT0gJ2InKSB7XG4gICAgICAvLyBiYXNlIDJcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09ICdfJykgeyBjb250aW51ZTsgfVxuICAgICAgICBpZiAoY2ggIT09ICcwJyAmJiBjaCAhPT0gJzEnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRGlnaXRzO1xuICAgIH1cblxuXG4gICAgaWYgKGNoID09PSAneCcpIHtcbiAgICAgIC8vIGJhc2UgMTZcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09ICdfJykgeyBjb250aW51ZTsgfVxuICAgICAgICBpZiAoIWlzSGV4Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cztcbiAgICB9XG5cbiAgICAvLyBiYXNlIDhcbiAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICBpZiAoY2ggPT09ICdfJykgeyBjb250aW51ZTsgfVxuICAgICAgaWYgKCFpc09jdENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0RpZ2l0cztcbiAgfVxuXG4gIC8vIGJhc2UgMTAgKGV4Y2VwdCAwKSBvciBiYXNlIDYwXG5cbiAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICBpZiAoY2ggPT09ICdfJykgeyBjb250aW51ZTsgfVxuICAgIGlmIChjaCA9PT0gJzonKSB7IGJyZWFrOyB9XG4gICAgaWYgKCFpc0RlY0NvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaGFzRGlnaXRzKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIC8vIGlmICFiYXNlNjAgLSBkb25lO1xuICBpZiAoY2ggIT09ICc6JykgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gIC8vIGJhc2U2MCBhbG1vc3Qgbm90IHVzZWQsIG5vIG5lZWRzIHRvIG9wdGltaXplXG4gIHJldHVybiAvXig6WzAtNV0/WzAtOV0pKyQvLnRlc3QoZGF0YS5zbGljZShpbmRleCkpO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sSW50ZWdlcihkYXRhKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGEsIHNpZ24gPSAxLCBjaCwgYmFzZSwgZGlnaXRzID0gW107XG5cbiAgaWYgKHZhbHVlLmluZGV4T2YoJ18nKSAhPT0gLTEpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL18vZywgJycpO1xuICB9XG5cbiAgY2ggPSB2YWx1ZVswXTtcblxuICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgaWYgKGNoID09PSAnLScpIHsgc2lnbiA9IC0xOyB9XG4gICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgICBjaCA9IHZhbHVlWzBdO1xuICB9XG5cbiAgaWYgKCcwJyA9PT0gdmFsdWUpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChjaCA9PT0gJzAnKSB7XG4gICAgaWYgKHZhbHVlWzFdID09PSAnYicpIHtcbiAgICAgIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDIpO1xuICAgIH1cbiAgICBpZiAodmFsdWVbMV0gPT09ICd4Jykge1xuICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZSwgMTYpO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCA4KTtcblxuICB9XG5cbiAgaWYgKHZhbHVlLmluZGV4T2YoJzonKSAhPT0gLTEpIHtcbiAgICB2YWx1ZS5zcGxpdCgnOicpLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgIGRpZ2l0cy51bnNoaWZ0KHBhcnNlSW50KHYsIDEwKSk7XG4gICAgfSk7XG5cbiAgICB2YWx1ZSA9IDA7XG4gICAgYmFzZSA9IDE7XG5cbiAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xuICAgICAgdmFsdWUgKz0gKGQgKiBiYXNlKTtcbiAgICAgIGJhc2UgKj0gNjA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2lnbiAqIHZhbHVlO1xuXG4gIH1cblxuICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcihvYmplY3QpIHtcbiAgcmV0dXJuICgnW29iamVjdCBOdW1iZXJdJyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkpICYmXG4gICAgICAgICAoMCA9PT0gb2JqZWN0ICUgMSAmJiAhY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEludGVnZXIsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEludGVnZXIsXG4gIHByZWRpY2F0ZTogaXNJbnRlZ2VyLFxuICByZXByZXNlbnQ6IHtcbiAgICBiaW5hcnk6ICAgICAgZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gJzBiJyArIG9iamVjdC50b1N0cmluZygyKTsgfSxcbiAgICBvY3RhbDogICAgICAgZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gJzAnICArIG9iamVjdC50b1N0cmluZyg4KTsgfSxcbiAgICBkZWNpbWFsOiAgICAgZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gICAgICAgIG9iamVjdC50b1N0cmluZygxMCk7IH0sXG4gICAgaGV4YWRlY2ltYWw6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuICcweCcgKyBvYmplY3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH1cbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiAnZGVjaW1hbCcsXG4gIHN0eWxlQWxpYXNlczoge1xuICAgIGJpbmFyeTogICAgICBbIDIsICAnYmluJyBdLFxuICAgIG9jdGFsOiAgICAgICBbIDgsICAnb2N0JyBdLFxuICAgIGRlY2ltYWw6ICAgICBbIDEwLCAnZGVjJyBdLFxuICAgIGhleGFkZWNpbWFsOiBbIDE2LCAnaGV4JyBdXG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXNwcmltYTtcblxuLy8gQnJvd3NlcmlmaWVkIHZlcnNpb24gZG9lcyBub3QgaGF2ZSBlc3ByaW1hXG4vL1xuLy8gMS4gRm9yIG5vZGUuanMganVzdCByZXF1aXJlIG1vZHVsZSBhcyBkZXBzXG4vLyAyLiBGb3IgYnJvd3NlciB0cnkgdG8gcmVxdWlyZSBtdWR1bGUgdmlhIGV4dGVybmFsIEFNRCBzeXN0ZW0uXG4vLyAgICBJZiBub3QgZm91bmQgLSB0cnkgdG8gZmFsbGJhY2sgdG8gd2luZG93LmVzcHJpbWEuIElmIG5vdFxuLy8gICAgZm91bmQgdG9vIC0gdGhlbiBmYWlsIHRvIHBhcnNlLlxuLy9cbnRyeSB7XG4gIGVzcHJpbWEgPSByZXF1aXJlKCdlc3ByaW1hJyk7XG59IGNhdGNoIChfKSB7XG4gIC8qZ2xvYmFsIHdpbmRvdyAqL1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgZXNwcmltYSA9IHdpbmRvdy5lc3ByaW1hOyB9XG59XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdEZ1bmN0aW9uKGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBzb3VyY2UgPSAnKCcgKyBkYXRhICsgJyknLFxuICAgICAgICBhc3QgICAgPSBlc3ByaW1hLnBhcnNlKHNvdXJjZSwgeyByYW5nZTogdHJ1ZSB9KTtcblxuICAgIGlmICgnUHJvZ3JhbScgICAgICAgICAgICAgIT09IGFzdC50eXBlICAgICAgICAgfHxcbiAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICE9PSBhc3QuYm9keS5sZW5ndGggIHx8XG4gICAgICAgICdFeHByZXNzaW9uU3RhdGVtZW50JyAhPT0gYXN0LmJvZHlbMF0udHlwZSB8fFxuICAgICAgICAnRnVuY3Rpb25FeHByZXNzaW9uJyAgIT09IGFzdC5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdEZ1bmN0aW9uKGRhdGEpIHtcbiAgLypqc2xpbnQgZXZpbDp0cnVlKi9cblxuICB2YXIgc291cmNlID0gJygnICsgZGF0YSArICcpJyxcbiAgICAgIGFzdCAgICA9IGVzcHJpbWEucGFyc2Uoc291cmNlLCB7IHJhbmdlOiB0cnVlIH0pLFxuICAgICAgcGFyYW1zID0gW10sXG4gICAgICBib2R5O1xuXG4gIGlmICgnUHJvZ3JhbScgICAgICAgICAgICAgIT09IGFzdC50eXBlICAgICAgICAgfHxcbiAgICAgIDEgICAgICAgICAgICAgICAgICAgICAhPT0gYXN0LmJvZHkubGVuZ3RoICB8fFxuICAgICAgJ0V4cHJlc3Npb25TdGF0ZW1lbnQnICE9PSBhc3QuYm9keVswXS50eXBlIHx8XG4gICAgICAnRnVuY3Rpb25FeHByZXNzaW9uJyAgIT09IGFzdC5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGFzdC5ib2R5WzBdLmV4cHJlc3Npb24ucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgcGFyYW1zLnB1c2gocGFyYW0ubmFtZSk7XG4gIH0pO1xuXG4gIGJvZHkgPSBhc3QuYm9keVswXS5leHByZXNzaW9uLmJvZHkucmFuZ2U7XG5cbiAgLy8gRXNwcmltYSdzIHJhbmdlcyBpbmNsdWRlIHRoZSBmaXJzdCAneycgYW5kIHRoZSBsYXN0ICd9JyBjaGFyYWN0ZXJzIG9uXG4gIC8vIGZ1bmN0aW9uIGV4cHJlc3Npb25zLiBTbyBjdXQgdGhlbSBvdXQuXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tbmV3LWZ1bmMqL1xuICByZXR1cm4gbmV3IEZ1bmN0aW9uKHBhcmFtcywgc291cmNlLnNsaWNlKGJvZHlbMF0gKyAxLCBib2R5WzFdIC0gMSkpO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRKYXZhc2NyaXB0RnVuY3Rpb24ob2JqZWN0IC8qLCBzdHlsZSovKSB7XG4gIHJldHVybiBvYmplY3QudG9TdHJpbmcoKTtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbihvYmplY3QpIHtcbiAgcmV0dXJuICdbb2JqZWN0IEZ1bmN0aW9uXScgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpqcy9mdW5jdGlvbicsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVKYXZhc2NyaXB0RnVuY3Rpb24sXG4gIGNvbnN0cnVjdDogY29uc3RydWN0SmF2YXNjcmlwdEZ1bmN0aW9uLFxuICBwcmVkaWNhdGU6IGlzRnVuY3Rpb24sXG4gIHJlcHJlc2VudDogcmVwcmVzZW50SmF2YXNjcmlwdEZ1bmN0aW9uXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi8uLi90eXBlJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVKYXZhc2NyaXB0UmVnRXhwKGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoMCA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gZGF0YSxcbiAgICAgIHRhaWwgICA9IC9cXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YSksXG4gICAgICBtb2RpZmllcnMgPSAnJztcblxuICAvLyBpZiByZWdleHAgc3RhcnRzIHdpdGggJy8nIGl0IGNhbiBoYXZlIG1vZGlmaWVycyBhbmQgbXVzdCBiZSBwcm9wZXJseSBjbG9zZWRcbiAgLy8gYC9mb28vZ2ltYCAtIG1vZGlmaWVycyB0YWlsIGNhbiBiZSBtYXhpbXVtIDMgY2hhcnNcbiAgaWYgKCcvJyA9PT0gcmVnZXhwWzBdKSB7XG4gICAgaWYgKHRhaWwpIHtcbiAgICAgIG1vZGlmaWVycyA9IHRhaWxbMV07XG4gICAgfVxuXG4gICAgaWYgKG1vZGlmaWVycy5sZW5ndGggPiAzKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIC8vIGlmIGV4cHJlc3Npb24gc3RhcnRzIHdpdGggLywgaXMgc2hvdWxkIGJlIHByb3Blcmx5IHRlcm1pbmF0ZWRcbiAgICBpZiAocmVnZXhwW3JlZ2V4cC5sZW5ndGggLSBtb2RpZmllcnMubGVuZ3RoIC0gMV0gIT09ICcvJykgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgIHJlZ2V4cCA9IHJlZ2V4cC5zbGljZSgxLCByZWdleHAubGVuZ3RoIC0gbW9kaWZpZXJzLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFJlZ0V4cChkYXRhKSB7XG4gIHZhciByZWdleHAgPSBkYXRhLFxuICAgICAgdGFpbCAgID0gL1xcLyhbZ2ltXSopJC8uZXhlYyhkYXRhKSxcbiAgICAgIG1vZGlmaWVycyA9ICcnO1xuXG4gIC8vIGAvZm9vL2dpbWAgLSB0YWlsIGNhbiBiZSBtYXhpbXVtIDQgY2hhcnNcbiAgaWYgKCcvJyA9PT0gcmVnZXhwWzBdKSB7XG4gICAgaWYgKHRhaWwpIHtcbiAgICAgIG1vZGlmaWVycyA9IHRhaWxbMV07XG4gICAgfVxuICAgIHJlZ2V4cCA9IHJlZ2V4cC5zbGljZSgxLCByZWdleHAubGVuZ3RoIC0gbW9kaWZpZXJzLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXhwLCBtb2RpZmllcnMpO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRKYXZhc2NyaXB0UmVnRXhwKG9iamVjdCAvKiwgc3R5bGUqLykge1xuICB2YXIgcmVzdWx0ID0gJy8nICsgb2JqZWN0LnNvdXJjZSArICcvJztcblxuICBpZiAob2JqZWN0Lmdsb2JhbCkge1xuICAgIHJlc3VsdCArPSAnZyc7XG4gIH1cblxuICBpZiAob2JqZWN0Lm11bHRpbGluZSkge1xuICAgIHJlc3VsdCArPSAnbSc7XG4gIH1cblxuICBpZiAob2JqZWN0Lmlnbm9yZUNhc2UpIHtcbiAgICByZXN1bHQgKz0gJ2knO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAob2JqZWN0KSB7XG4gIHJldHVybiAnW29iamVjdCBSZWdFeHBdJyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmpzL3JlZ2V4cCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVKYXZhc2NyaXB0UmVnRXhwLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdEphdmFzY3JpcHRSZWdFeHAsXG4gIHByZWRpY2F0ZTogaXNSZWdFeHAsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50SmF2YXNjcmlwdFJlZ0V4cFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdFVuZGVmaW5lZCgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdEphdmFzY3JpcHRVbmRlZmluZWQoKSB7XG4gIC8qZXNsaW50LWRpc2FibGUgbm8tdW5kZWZpbmVkKi9cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdFVuZGVmaW5lZCgpIHtcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChvYmplY3QpIHtcbiAgcmV0dXJuICd1bmRlZmluZWQnID09PSB0eXBlb2Ygb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpqcy91bmRlZmluZWQnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFVuZGVmaW5lZCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0VW5kZWZpbmVkLFxuICBwcmVkaWNhdGU6IGlzVW5kZWZpbmVkLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWRcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6bWFwJywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIG51bGwgIT09IGRhdGEgPyBkYXRhIDoge307IH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhKSB7XG4gIHJldHVybiAnPDwnID09PSBkYXRhIHx8IG51bGwgPT09IGRhdGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxNZXJnZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE51bGwoZGF0YSkge1xuICBpZiAobnVsbCA9PT0gZGF0YSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoO1xuXG4gIHJldHVybiAobWF4ID09PSAxICYmIGRhdGEgPT09ICd+JykgfHxcbiAgICAgICAgIChtYXggPT09IDQgJiYgKGRhdGEgPT09ICdudWxsJyB8fCBkYXRhID09PSAnTnVsbCcgfHwgZGF0YSA9PT0gJ05VTEwnKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKG9iamVjdCkge1xuICByZXR1cm4gbnVsbCA9PT0gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpudWxsJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxOdWxsLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxOdWxsLFxuICBwcmVkaWNhdGU6IGlzTnVsbCxcbiAgcmVwcmVzZW50OiB7XG4gICAgY2Fub25pY2FsOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnfic7ICAgIH0sXG4gICAgbG93ZXJjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnbnVsbCc7IH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnTlVMTCc7IH0sXG4gICAgY2FtZWxjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnTnVsbCc7IH1cbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiAnbG93ZXJjYXNlJ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfdG9TdHJpbmcgICAgICAgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkge1xuICBpZiAobnVsbCA9PT0gZGF0YSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIG9iamVjdEtleXMgPSBbXSwgaW5kZXgsIGxlbmd0aCwgcGFpciwgcGFpcktleSwgcGFpckhhc0tleSxcbiAgICAgIG9iamVjdCA9IGRhdGE7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG4gICAgcGFpckhhc0tleSA9IGZhbHNlO1xuXG4gICAgaWYgKCdbb2JqZWN0IE9iamVjdF0nICE9PSBfdG9TdHJpbmcuY2FsbChwYWlyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAocGFpcktleSBpbiBwYWlyKSB7XG4gICAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwocGFpciwgcGFpcktleSkpIHtcbiAgICAgICAgaWYgKCFwYWlySGFzS2V5KSB7XG4gICAgICAgICAgcGFpckhhc0tleSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYWlySGFzS2V5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKC0xID09PSBvYmplY3RLZXlzLmluZGV4T2YocGFpcktleSkpIHtcbiAgICAgIG9iamVjdEtleXMucHVzaChwYWlyS2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sT21hcChkYXRhKSB7XG4gIHJldHVybiBudWxsICE9PSBkYXRhID8gZGF0YSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXBcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAobnVsbCA9PT0gZGF0YSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGluZGV4LCBsZW5ndGgsIHBhaXIsIGtleXMsIHJlc3VsdCxcbiAgICAgIG9iamVjdCA9IGRhdGE7XG5cbiAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuXG4gICAgaWYgKCdbb2JqZWN0IE9iamVjdF0nICE9PSBfdG9TdHJpbmcuY2FsbChwYWlyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhwYWlyKTtcblxuICAgIGlmICgxICE9PSBrZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlc3VsdFtpbmRleF0gPSBbIGtleXNbMF0sIHBhaXJba2V5c1swXV0gXTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAobnVsbCA9PT0gZGF0YSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcblxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhwYWlyKTtcblxuICAgIHJlc3VsdFtpbmRleF0gPSBbIGtleXNbMF0sIHBhaXJba2V5c1swXV0gXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnBhaXJzJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFBhaXJzLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxQYWlyc1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpzZXEnLCB7XG4gIGtpbmQ6ICdzZXF1ZW5jZScsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIG51bGwgIT09IGRhdGEgPyBkYXRhIDogW107IH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sU2V0KGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBrZXksIG9iamVjdCA9IGRhdGE7XG5cbiAgZm9yIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgaWYgKG51bGwgIT09IG9iamVjdFtrZXldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbFNldChkYXRhKSB7XG4gIHJldHVybiBudWxsICE9PSBkYXRhID8gZGF0YSA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpzZXQnLCB7XG4gIGtpbmQ6ICdtYXBwaW5nJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxTZXQsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFNldFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBudWxsICE9PSBkYXRhID8gZGF0YSA6ICcnOyB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBZQU1MX1RJTUVTVEFNUF9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICAnXihbMC05XVswLTldWzAtOV1bMC05XSknICAgICAgICAgICsgLy8gWzFdIHllYXJcbiAgJy0oWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICArIC8vIFsyXSBtb250aFxuICAnLShbMC05XVswLTldPyknICAgICAgICAgICAgICAgICAgICsgLy8gWzNdIGRheVxuICAnKD86KD86W1R0XXxbIFxcXFx0XSspJyAgICAgICAgICAgICAgKyAvLyAuLi5cbiAgJyhbMC05XVswLTldPyknICAgICAgICAgICAgICAgICAgICArIC8vIFs0XSBob3VyXG4gICc6KFswLTldWzAtOV0pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNV0gbWludXRlXG4gICc6KFswLTldWzAtOV0pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNl0gc2Vjb25kXG4gICcoPzpcXFxcLihbMC05XSopKT8nICAgICAgICAgICAgICAgICArIC8vIFs3XSBmcmFjdGlvblxuICAnKD86WyBcXFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KScgKyAvLyBbOF0gdHogWzldIHR6X3NpZ24gWzEwXSB0el9ob3VyXG4gICcoPzo6KFswLTldWzAtOV0pKT8pKT8pPyQnKTsgICAgICAgICAvLyBbMTFdIHR6X21pbnV0ZVxuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFRpbWVzdGFtcChkYXRhKSB7XG4gIGlmIChudWxsID09PSBkYXRhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICB2YXIgbWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbiA9IDAsXG4gICAgICBkZWx0YSA9IG51bGwsIHR6X2hvdXIsIHR6X21pbnV0ZSwgZGF0ZTtcblxuICBtYXRjaCA9IFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpO1xuXG4gIGlmIChudWxsID09PSBtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGF0ZSByZXNvbHZlIGVycm9yJyk7XG4gIH1cblxuICAvLyBtYXRjaDogWzFdIHllYXIgWzJdIG1vbnRoIFszXSBkYXlcblxuICB5ZWFyID0gKyhtYXRjaFsxXSk7XG4gIG1vbnRoID0gKyhtYXRjaFsyXSkgLSAxOyAvLyBKUyBtb250aCBzdGFydHMgd2l0aCAwXG4gIGRheSA9ICsobWF0Y2hbM10pO1xuXG4gIGlmICghbWF0Y2hbNF0pIHsgLy8gbm8gaG91clxuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5KSk7XG4gIH1cblxuICAvLyBtYXRjaDogWzRdIGhvdXIgWzVdIG1pbnV0ZSBbNl0gc2Vjb25kIFs3XSBmcmFjdGlvblxuXG4gIGhvdXIgPSArKG1hdGNoWzRdKTtcbiAgbWludXRlID0gKyhtYXRjaFs1XSk7XG4gIHNlY29uZCA9ICsobWF0Y2hbNl0pO1xuXG4gIGlmIChtYXRjaFs3XSkge1xuICAgIGZyYWN0aW9uID0gbWF0Y2hbN10uc2xpY2UoMCwgMyk7XG4gICAgd2hpbGUgKGZyYWN0aW9uLmxlbmd0aCA8IDMpIHsgLy8gbWlsbGktc2Vjb25kc1xuICAgICAgZnJhY3Rpb24gKz0gJzAnO1xuICAgIH1cbiAgICBmcmFjdGlvbiA9ICtmcmFjdGlvbjtcbiAgfVxuXG4gIC8vIG1hdGNoOiBbOF0gdHogWzldIHR6X3NpZ24gWzEwXSB0el9ob3VyIFsxMV0gdHpfbWludXRlXG5cbiAgaWYgKG1hdGNoWzldKSB7XG4gICAgdHpfaG91ciA9ICsobWF0Y2hbMTBdKTtcbiAgICB0el9taW51dGUgPSArKG1hdGNoWzExXSB8fCAwKTtcbiAgICBkZWx0YSA9ICh0el9ob3VyICogNjAgKyB0el9taW51dGUpICogNjAwMDA7IC8vIGRlbHRhIGluIG1pbGktc2Vjb25kc1xuICAgIGlmICgnLScgPT09IG1hdGNoWzldKSB7XG4gICAgICBkZWx0YSA9IC1kZWx0YTtcbiAgICB9XG4gIH1cblxuICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uKSk7XG5cbiAgaWYgKGRlbHRhKSB7XG4gICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpIC0gZGVsdGEpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAob2JqZWN0IC8qLCBzdHlsZSovKSB7XG4gIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxUaW1lc3RhbXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFRpbWVzdGFtcCxcbiAgaW5zdGFuY2VPZjogRGF0ZSxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sVGltZXN0YW1wXG59KTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgSmVyZW15IFdoaXRsb2NrXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVmFyaW91cyB1dGlsaXRpZXMgZm9yIEpTT04gUmVmZXJlbmNlcyAqKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXBicnlhbi16eXAtanNvbi1yZWYtMDMpKiBhbmRcbiAqIEpTT04gUG9pbnRlcnMgKihodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMSkqLlxuICpcbiAqIEBtb2R1bGUgSnNvblJlZnNcbiAqL1xuXG52YXIgcGF0aExvYWRlciA9IHJlcXVpcmUoJ3BhdGgtbG9hZGVyJyk7XG52YXIgcXMgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xudmFyIHNsYXNoID0gcmVxdWlyZSgnc2xhc2gnKTtcbnZhciBVUkkgPSByZXF1aXJlKCd1cmktanMnKTtcblxudmFyIGJhZFB0clRva2VuUmVnZXggPSAvfig/OlteMDFdfCQpL2c7XG52YXIgcmVtb3RlQ2FjaGUgPSB7fTtcbnZhciByZW1vdGVUeXBlcyA9IFsncmVsYXRpdmUnLCAncmVtb3RlJ107XG52YXIgdXJpRGV0YWlsc0NhY2hlID0ge307XG5cbi8vIExvYWQgcHJvbWlzZXMgcG9seWZpbGwgaWYgbmVjZXNzYXJ5XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgcmVxdWlyZSgnbmF0aXZlLXByb21pc2Utb25seScpO1xufVxuXG4vKiBJbnRlcm5hbCBGdW5jdGlvbnMgKi9cblxuLy8gVGhpcyBpcyBhIHZlcnkgc2ltcGxpc3RpYyBjbG9uZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IG5vbi1KU09OIHR5cGVzLiAgRm9yIHRoZXNlIHR5cGVzIHRoZVxuLy8gb3JpZ2luYWwgdmFsdWUgaXMgdXNlZCBhcyB0aGUgY2xvbmUuICBTbyB3aGlsZSBpdCdzIG5vdCBhIGNvbXBsZXRlIGRlZXAgY2xvbmUsIGZvciB0aGUgbmVlZHMgb2YgdGhpcyBwcm9qZWN0XG4vLyB0aGlzIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuZnVuY3Rpb24gY2xvbmUgKG9iaikge1xuICB2YXIgY2xvbmVkO1xuXG4gIGlmIChpc1R5cGUob2JqLCAnQXJyYXknKSkge1xuICAgIGNsb25lZCA9IFtdO1xuXG4gICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgY2xvbmVkW2luZGV4XSA9IGNsb25lKHZhbHVlKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc1R5cGUob2JqLCAnT2JqZWN0JykpIHtcbiAgICBjbG9uZWQgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBjbG9uZWRba2V5XSA9IGNsb25lKG9ialtrZXldKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbG9uZWQgPSBvYmo7XG4gIH1cblxuICByZXR1cm4gY2xvbmVkO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lUGF0aHMgKHAxLCBwMikge1xuICB2YXIgY29tYmluZWQgPSBbXTtcblxuICBmdW5jdGlvbiBwYXRoVG9TZWdtZW50cyAocGF0aCkge1xuICAgIHJldHVybiBpc1R5cGUocGF0aCwgJ1VuZGVmaW5lZCcpIHx8IHBhdGggPT09ICcnID8gW10gOiBwYXRoLnNwbGl0KCcvJyk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTZWdtZW50IChzZWcpIHtcbiAgICBpZiAoc2VnID09PSAnLi4nKSB7XG4gICAgICBjb21iaW5lZC5wb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tYmluZWQucHVzaChzZWcpO1xuICAgIH1cbiAgfVxuXG4gIHBhdGhUb1NlZ21lbnRzKHAxKS5jb25jYXQocGF0aFRvU2VnbWVudHMocDIpKS5mb3JFYWNoKGhhbmRsZVNlZ21lbnQpO1xuXG4gIHJldHVybiBjb21iaW5lZC5sZW5ndGggPT09IDAgPyAnJyA6IGNvbWJpbmVkLmpvaW4oJy8nKTtcbn1cblxuZnVuY3Rpb24gY29tYmluZVF1ZXJ5UGFyYW1zIChxczEsIHFzMikge1xuICB2YXIgY29tYmluZWQgPSB7fTtcblxuICBmdW5jdGlvbiBtZXJnZVF1ZXJ5UGFyYW1zIChvYmopIHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgY29tYmluZWRba2V5XSA9IG9ialtrZXldO1xuICAgIH0pO1xuICB9XG5cbiAgbWVyZ2VRdWVyeVBhcmFtcyhxcy5wYXJzZShxczEgfHwgJycpKTtcbiAgbWVyZ2VRdWVyeVBhcmFtcyhxcy5wYXJzZShxczIgfHwgJycpKTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMoY29tYmluZWQpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHFzLnN0cmluZ2lmeShjb21iaW5lZCk7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVUklzICh1MSwgdTIpIHtcbiAgLy8gQ29udmVydCBXaW5kb3dzIHBhdGhzXG4gIGlmIChpc1R5cGUodTEsICdTdHJpbmcnKSkge1xuICAgIHUxID0gc2xhc2godTEpO1xuICB9XG5cbiAgaWYgKGlzVHlwZSh1MiwgJ1N0cmluZycpKSB7XG4gICAgdTIgPSBzbGFzaCh1Mik7XG4gIH1cblxuICB2YXIgdTJEZXRhaWxzID0gVVJJLnBhcnNlKGlzVHlwZSh1MiwgJ1VuZGVmaW5lZCcpID8gJycgOiB1Mik7XG4gIHZhciB1MURldGFpbHM7XG4gIHZhciBjb21iaW5lZERldGFpbHM7XG5cbiAgaWYgKHUyRGV0YWlscy5yZWZlcmVuY2UgPT09ICdhYnNvbHV0ZScgfHwgdTJEZXRhaWxzLnJlZmVyZW5jZSA9PT0gJ3VyaScpIHtcbiAgICBjb21iaW5lZERldGFpbHMgPSB1MkRldGFpbHM7XG4gIH0gZWxzZSB7XG4gICAgdTFEZXRhaWxzID0gaXNUeXBlKHUxLCAnVW5kZWZpbmVkJykgPyB1bmRlZmluZWQgOiBVUkkucGFyc2UodTEpO1xuXG4gICAgaWYgKCFpc1R5cGUodTFEZXRhaWxzLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgIGNvbWJpbmVkRGV0YWlscyA9IHUxRGV0YWlscztcblxuICAgICAgLy8gSm9pbiB0aGUgcGF0aHNcbiAgICAgIGNvbWJpbmVkRGV0YWlscy5wYXRoID0gVVJJLm5vcm1hbGl6ZShjb21iaW5lUGF0aHModTFEZXRhaWxzLnBhdGgsIHUyRGV0YWlscy5wYXRoKSk7XG5cbiAgICAgIC8vIEpvaW4gcXVlcnkgcGFyYW1ldGVyc1xuICAgICAgY29tYmluZWREZXRhaWxzLnF1ZXJ5ID0gY29tYmluZVF1ZXJ5UGFyYW1zKHUxRGV0YWlscy5xdWVyeSwgdTJEZXRhaWxzLnF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tYmluZWREZXRhaWxzID0gdTJEZXRhaWxzO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgZnJhZ21lbnRcbiAgY29tYmluZWREZXRhaWxzLmZyYWdtZW50ID0gdW5kZWZpbmVkO1xuXG4gIHJldHVybiBVUkkuc2VyaWFsaXplKGNvbWJpbmVkRGV0YWlscyk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlclJlZnMgKG9wdGlvbnMsIHJlZnMpIHtcbiAgdmFyIHJlZkZpbHRlciA9IG1ha2VSZWZGaWx0ZXIob3B0aW9ucyk7XG4gIHZhciBmaWx0ZXJlZCA9IHt9O1xuICB2YXIgc3ViRG9jUHJlZml4ID0gcGF0aFRvUHRyKG1ha2VTdWJEb2NQYXRoKG9wdGlvbnMpKTtcblxuICBPYmplY3Qua2V5cyhyZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWZQdHIpIHtcbiAgICB2YXIgcmVmRGV0YWlscyA9IHJlZnNbcmVmUHRyXTtcblxuICAgIGlmIChyZWZGaWx0ZXIocmVmRGV0YWlscywgcGF0aEZyb21QdHIocmVmUHRyKSkgPT09IHRydWUgJiZcbiAgICAgICAgcmVmUHRyLmluZGV4T2Yoc3ViRG9jUHJlZml4KSA+IC0xICYmXG4gICAgICAgIChyZWZEZXRhaWxzLnR5cGUgIT09ICdpbnZhbGlkJyB8fCBvcHRpb25zLmluY2x1ZGVJbnZhbGlkID09PSB0cnVlKSkge1xuICAgICAgZmlsdGVyZWRbcmVmUHRyXSA9IHJlZkRldGFpbHM7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRBbmNlc3RvcnMgKG9iaiwgcGF0aCkge1xuICB2YXIgYW5jZXN0b3JzID0gW107XG4gIHZhciBub2RlID0gb2JqO1xuXG4gIHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKS5mb3JFYWNoKGZ1bmN0aW9uIChzZWcpIHtcbiAgICBpZiAoc2VnIGluIG5vZGUpIHtcbiAgICAgIG5vZGUgPSBub2RlW3NlZ107XG5cbiAgICAgIGFuY2VzdG9ycy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGFuY2VzdG9ycztcbn1cblxuLy8gU2hvdWxkIHRoaXMgYmUgaXRzIG93biBleHBvcnRlZCBBUEk/XG5mdW5jdGlvbiBmaW5kQWxsUmVmcyAob2JqLCBvcHRpb25zLCBwYXJlbnRzLCBwYXJlbnRQYXRoLCBkb2N1bWVudHMpIHtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHZhciByZWZzID0gZmluZFJlZnMob2JqLCBvcHRpb25zKTtcblxuICBPYmplY3Qua2V5cyhyZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWZQdHIpIHtcbiAgICB2YXIgcmVmRGV0YWlscyA9IHJlZnNbcmVmUHRyXTtcbiAgICB2YXIgcmVmUGF0aCA9IHBhdGhGcm9tUHRyKHJlZlB0cik7XG4gICAgdmFyIGxvY2F0aW9uO1xuICAgIHZhciBwYXJlbnRJbmRleDtcblxuICAgIC8vIE9ubHkgcHJvY2VzcyByZW1vdGUgcmVmZXJlbmNlc1xuICAgIGlmIChyZW1vdGVUeXBlcy5pbmRleE9mKHJlZkRldGFpbHMudHlwZSkgPiAtMSkge1xuICAgICAgbG9jYXRpb24gPSBjb21iaW5lVVJJcyhvcHRpb25zLnJlbGF0aXZlQmFzZSwgcmVmRGV0YWlscy51cmkpO1xuICAgICAgcGFyZW50SW5kZXggPSBwYXJlbnRzLmluZGV4T2YobG9jYXRpb24pO1xuXG4gICAgICBpZiAocGFyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgclBhcmVudFBhdGggPSBwYXJlbnRQYXRoLmNvbmNhdChyZWZQYXRoKTtcbiAgICAgICAgICAgIHZhciByT3B0aW9ucyA9IGNsb25lKG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHN1YiBkb2N1bWVudCBwYXRoXG4gICAgICAgICAgICBkZWxldGUgck9wdGlvbnMuc3ViRG9jUGF0aDtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZWxhdGl2ZUJhc2UgYmFzZWQgb24gdGhlIG5ldyBsb2NhdGlvbiB0byByZXRyaWV2ZVxuICAgICAgICAgICAgck9wdGlvbnMucmVsYXRpdmVCYXNlID0gbG9jYXRpb24uc3Vic3RyaW5nKDAsIGxvY2F0aW9uLmxhc3RJbmRleE9mKCcvJykpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmluZFJlZnNBdChyZWZEZXRhaWxzLnVyaSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJSZWZzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBsb2NhdGlvbiBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGlkZW50aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgclJlZnMubG9jYXRpb24gPSBsb2NhdGlvbjtcblxuICAgICAgICAgICAgICAgIGlmIChyZWZEZXRhaWxzLnVyaURldGFpbHMuZnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZW1vdGUgcmVmZXJlbmNlIHdhcyBmb3IgYSBmcmFnbWVudCwgZG8gbm90IGluY2x1ZGUgdGhlIHJlZmVyZW5jZSBkZXRhaWxzXG4gICAgICAgICAgICAgICAgICByUmVmcy5yZWZzID0ge307XG5cbiAgICAgICAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgcmVtb3RlIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudHNbcGF0aFRvUHRyKHJQYXJlbnRQYXRoKV0gPSByUmVmcztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJSZWZzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBSZWNvcmQgdGhlIGxvY2F0aW9uIGluIHRoZSBkb2N1bWVudCB3aGVyZSB0aGUgcGFyZW50IGRvY3VtZW50IHdhcyByZXNvbHZlZFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoclJlZnMucmVmcykuZm9yRWFjaChmdW5jdGlvbiAocmVmUHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJSZWZzLnJlZnNbcmVmUHRyXS5wYXJlbnRMb2NhdGlvbiA9IHBhdGhUb1B0cihyUGFyZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSByZW1vdGUgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50c1twYXRoVG9QdHIoclBhcmVudFBhdGgpXSA9IHJSZWZzO1xuXG4gICAgICAgICAgICAgICAgICAvLyBGaW5kIGFsbCBpbXBvcnRhbnQgcmVmZXJlbmNlcyB3aXRoaW4gdGhlIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmluZEFsbFJlZnMoclJlZnMudmFsdWUsIHJPcHRpb25zLCBwYXJlbnRzLmNvbmNhdChsb2NhdGlvbiksIHJQYXJlbnRQYXRoLCBkb2N1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHJlZkRldGFpbHMuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgICByZWZEZXRhaWxzLm1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hcmsgc2VlbiBhbmNlc3RvcnMgYXMgY2lyY3VsYXJcbiAgICAgICAgcGFyZW50cy5zbGljZShwYXJlbnRJbmRleCkuZm9yRWFjaChmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMoZG9jdW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChjUmVmUHRyKSB7XG4gICAgICAgICAgICB2YXIgZG9jdW1lbnQgPSBkb2N1bWVudHNbY1JlZlB0cl07XG5cbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5sb2NhdGlvbiA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmNpcmN1bGFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTWFyayBzZWxmIGFzIGNpcmN1bGFyXG4gICAgICAgIGRvY3VtZW50c1twYXRoVG9QdHIocGFyZW50UGF0aCldLnJlZnNbcmVmUHRyXS5jaXJjdWxhciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgLy8gT25seSBjb2xsYXBzZSB0aGUgZG9jdW1lbnRzIHdoZW4gd2UncmUgYmFjayBhdCB0aGUgdG9wIG9mIHRoZSBwcm9taXNlIHN0YWNrXG4gICAgICBpZiAocGFyZW50UGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gQ29sbGFwc2UgYWxsIHJlZmVyZW5jZXMgdG9nZXRoZXIgaW50byBvbmUgbGlzdFxuICAgICAgICBPYmplY3Qua2V5cyhkb2N1bWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgICAgICAgIHZhciBkb2N1bWVudCA9IGRvY3VtZW50c1tyZWZQdHJdO1xuXG4gICAgICAgICAgLy8gTWVyZ2UgZWFjaCByZWZlcmVuY2UgaW50byB0aGUgcm9vdCBkb2N1bWVudCdzIHJlZmVyZW5jZXNcbiAgICAgICAgICBPYmplY3Qua2V5cyhkb2N1bWVudC5yZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChjUmVmUHRyKSB7XG4gICAgICAgICAgICB2YXIgZlB0ciA9IHBhdGhUb1B0cihwYXRoRnJvbVB0cihyZWZQdHIpLmNvbmNhdChwYXRoRnJvbVB0cihjUmVmUHRyKSkpO1xuICAgICAgICAgICAgdmFyIHJlZkRldGFpbHMgPSByZWZzW2ZQdHJdO1xuXG4gICAgICAgICAgICBpZiAoaXNUeXBlKHJlZkRldGFpbHMsICdVbmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICByZWZzW2ZQdHJdID0gZG9jdW1lbnQucmVmc1tjUmVmUHRyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFJlY29yZCB0aGUgdmFsdWUgb2YgdGhlIHJlbW90ZSByZWZlcmVuY2VcbiAgICAgICAgICByZWZzW3JlZlB0cl0udmFsdWUgPSBkb2N1bWVudC52YWx1ZTtcblxuICAgICAgICAgIC8vIE1hcmsgdGhlIHJlbW90ZSByZWZlcmVuY2UgaXRzZWxmIGFzIGNpcmN1bGFyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmNpcmN1bGFyKSB7XG4gICAgICAgICAgICByZWZzW3JlZlB0cl0uY2lyY3VsYXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWZzO1xuICAgIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn1cblxuZnVuY3Rpb24gZmluZFZhbHVlIChvYmosIHBhdGgsIGlnbm9yZSkge1xuICB2YXIgdmFsdWUgPSBvYmo7XG5cbiAgdHJ5IHtcbiAgICBwYXRoLmZvckVhY2goZnVuY3Rpb24gKHNlZykge1xuICAgICAgaWYgKHNlZyBpbiB2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlW3NlZ107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcignSlNPTiBQb2ludGVyIHBvaW50cyB0byBtaXNzaW5nIGxvY2F0aW9uOiAnICsgcGF0aFRvUHRyKHBhdGgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGlnbm9yZSA9PT0gdHJ1ZSkge1xuICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldEV4dHJhUmVmS2V5cyAocmVmKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhyZWYpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleSAhPT0gJyRyZWYnO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtb3RlRG9jdW1lbnQgKHVybCwgb3B0aW9ucykge1xuICB2YXIgY2FjaGVFbnRyeSA9IHJlbW90ZUNhY2hlW3VybF07XG4gIHZhciBhbGxUYXNrcyA9IFByb21pc2UucmVzb2x2ZSgpO1xuICB2YXIgbG9hZGVyT3B0aW9ucyA9IGNsb25lKG9wdGlvbnMubG9hZGVyT3B0aW9ucyB8fCB7fSk7XG5cbiAgaWYgKGlzVHlwZShjYWNoZUVudHJ5LCAnVW5kZWZpbmVkJykpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBjb250ZW50IHByb2Nlc3NvciwgZGVmYXVsdCB0byBwcm9jZXNzaW5nIHRoZSByYXcgcmVzcG9uc2UgYXMgSlNPTlxuICAgIGlmIChpc1R5cGUobG9hZGVyT3B0aW9ucy5wcm9jZXNzQ29udGVudCwgJ1VuZGVmaW5lZCcpKSB7XG4gICAgICBsb2FkZXJPcHRpb25zLnByb2Nlc3NDb250ZW50ID0gZnVuY3Rpb24gKHJlcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCBKU09OLnBhcnNlKHJlcy50ZXh0KSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEF0dGVtcHQgdG8gbG9hZCB0aGUgcmVzb3VyY2UgdXNpbmcgIHBhdGgtbG9hZGVyXG4gICAgYWxsVGFza3MgPSBwYXRoTG9hZGVyLmxvYWQodXJsLCBsb2FkZXJPcHRpb25zKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGVcbiAgICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHJlbW90ZUNhY2hlW3VybF0gPSB7XG4gICAgICAgICAgdmFsdWU6IHJlc1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmVtb3RlQ2FjaGVbdXJsXSA9IHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUmV0dXJuIHRoZSBjYWNoZWQgdmVyc2lvblxuICAgIGFsbFRhc2tzID0gYWxsVGFza3MudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY2FjaGVFbnRyeS52YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybiBhIGNsb25lZCB2ZXJzaW9uIHRvIGF2b2lkIHVwZGF0aW5nIHRoZSBjYWNoZVxuICBhbGxUYXNrcyA9IGFsbFRhc2tzLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgIHJldHVybiBjbG9uZShyZXMpO1xuICB9KTtcblxuICByZXR1cm4gYWxsVGFza3M7XG59XG5cbmZ1bmN0aW9uIGlzUmVmTGlrZSAob2JqLCB0aHJvd1dpdGhEZXRhaWxzKSB7XG4gIHZhciByZWZMaWtlID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGlmICghaXNUeXBlKG9iaiwgJ09iamVjdCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29iaiBpcyBub3QgYW4gT2JqZWN0Jyk7XG4gICAgfSBlbHNlIGlmICghaXNUeXBlKG9iai4kcmVmLCAnU3RyaW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb2JqLiRyZWYgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dXaXRoRGV0YWlscykge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHJlZkxpa2UgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiByZWZMaWtlO1xufVxuXG5mdW5jdGlvbiBpc1R5cGUgKG9iaiwgdHlwZSkge1xuICAvLyBBIFBoYW50b21KUyBidWcgKGh0dHBzOi8vZ2l0aHViLmNvbS9hcml5YS9waGFudG9tanMvaXNzdWVzLzExNzIyKSBwcm9oaWJpdHMgdXMgZnJvbSB1c2luZyB0aGUgc2FtZSBhcHByb2FjaCBmb3JcbiAgLy8gdW5kZWZpbmVkIGNoZWNraW5nIHRoYXQgd2UgdXNlIGZvciBvdGhlciB0eXBlcy5cbiAgaWYgKHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIHR5cGUgKyAnXSc7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZVJlZkZpbHRlciAob3B0aW9ucykge1xuICB2YXIgcmVmRmlsdGVyO1xuXG4gIGlmIChpc1R5cGUob3B0aW9ucy5maWx0ZXIsICdBcnJheScpIHx8IGlzVHlwZShvcHRpb25zLmZpbHRlciwgJ1N0cmluZycpKSB7XG4gICAgcmVmRmlsdGVyID0gZnVuY3Rpb24gKHJlZkRldGFpbHMpIHtcbiAgICAgIHZhciB2YWxpZFR5cGVzID0gaXNUeXBlKG9wdGlvbnMuZmlsdGVyLCAnU3RyaW5nJykgPyBbb3B0aW9ucy5maWx0ZXJdIDogb3B0aW9ucy5maWx0ZXI7XG5cbiAgICAgIHJldHVybiB2YWxpZFR5cGVzLmluZGV4T2YocmVmRGV0YWlscy50eXBlKSA+IC0xO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNUeXBlKG9wdGlvbnMuZmlsdGVyLCAnRnVuY3Rpb24nKSkge1xuICAgIHJlZkZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICB9IGVsc2Uge1xuICAgIHJlZkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gcmVmRmlsdGVyO1xufVxuXG5mdW5jdGlvbiBtYWtlU3ViRG9jUGF0aCAob3B0aW9ucykge1xuICB2YXIgZnJvbVBhdGggPSBbXTtcblxuICBpZiAoaXNUeXBlKG9wdGlvbnMuc3ViRG9jUGF0aCwgJ0FycmF5JykpIHtcbiAgICBmcm9tUGF0aCA9IG9wdGlvbnMuc3ViRG9jUGF0aDtcbiAgfSBlbHNlIGlmIChpc1R5cGUob3B0aW9ucy5zdWJEb2NQYXRoLCAnU3RyaW5nJykpIHtcbiAgICBmcm9tUGF0aCA9IHBhdGhGcm9tUHRyKG9wdGlvbnMuc3ViRG9jUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZnJvbVBhdGg7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlIChvYmosIHJlZlBhdGgsIHZhbHVlKSB7XG4gIGZpbmRWYWx1ZShvYmosIHJlZlBhdGguc2xpY2UoMCwgcmVmUGF0aC5sZW5ndGggLSAxKSlbcmVmUGF0aFtyZWZQYXRoLmxlbmd0aCAtIDFdXSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiB3YWxrIChhbmNlc3RvcnMsIG5vZGUsIHBhdGgsIGZuKSB7XG4gIHZhciBwcm9jZXNzQ2hpbGRyZW4gPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIHdhbGtJdGVtIChpdGVtLCBzZWdtZW50KSB7XG4gICAgcGF0aC5wdXNoKHNlZ21lbnQpO1xuICAgIHdhbGsoYW5jZXN0b3JzLCBpdGVtLCBwYXRoLCBmbik7XG4gICAgcGF0aC5wb3AoKTtcbiAgfVxuXG4gIC8vIENhbGwgdGhlIGl0ZXJhdGVlXG4gIGlmIChpc1R5cGUoZm4sICdGdW5jdGlvbicpKSB7XG4gICAgcHJvY2Vzc0NoaWxkcmVuID0gZm4oYW5jZXN0b3JzLCBub2RlLCBwYXRoKTtcbiAgfVxuXG4gIC8vIFdlIGRvIG5vdCBwcm9jZXNzIGNpcmN1bGFyIG9iamVjdHMgYWdhaW5cbiAgaWYgKGFuY2VzdG9ycy5pbmRleE9mKG5vZGUpID09PSAtMSkge1xuICAgIGFuY2VzdG9ycy5wdXNoKG5vZGUpO1xuXG4gICAgaWYgKHByb2Nlc3NDaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChpc1R5cGUobm9kZSwgJ0FycmF5JykpIHtcbiAgICAgICAgbm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChtZW1iZXIsIGluZGV4KSB7XG4gICAgICAgICAgd2Fsa0l0ZW0obWVtYmVyLCBpbmRleC50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVHlwZShub2RlLCAnT2JqZWN0JykpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobm9kZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgd2Fsa0l0ZW0obm9kZVtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhbmNlc3RvcnMucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9ucyAob3B0aW9ucykge1xuICBpZiAoIWlzVHlwZShvcHRpb25zLCAnVW5kZWZpbmVkJykpIHtcbiAgICBpZiAoIWlzVHlwZShvcHRpb25zLCAnT2JqZWN0JykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBPYmplY3QnKTtcbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUob3B0aW9ucy5maWx0ZXIsICdVbmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgIWlzVHlwZShvcHRpb25zLmZpbHRlciwgJ0FycmF5JykgJiZcbiAgICAgICAgICAgICAgICFpc1R5cGUob3B0aW9ucy5maWx0ZXIsICdGdW5jdGlvbicpICYmXG4gICAgICAgICAgICAgICAhaXNUeXBlKG9wdGlvbnMuZmlsdGVyLCAnU3RyaW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuZmlsdGVyIG11c3QgYmUgYW4gQXJyYXksIGEgRnVuY3Rpb24gb2YgYSBTdHJpbmcnKTtcbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUob3B0aW9ucy5pbmNsdWRlSW52YWxpZCwgJ1VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAhaXNUeXBlKG9wdGlvbnMuaW5jbHVkZUludmFsaWQsICdCb29sZWFuJykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuaW5jbHVkZUludmFsaWQgbXVzdCBiZSBhIEJvb2xlYW4nKTtcbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUob3B0aW9ucy5yZWZQcmVQcm9jZXNzb3IsICdVbmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgIWlzVHlwZShvcHRpb25zLnJlZlByZVByb2Nlc3NvciwgJ0Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMucmVmUHJlUHJvY2Vzc29yIG11c3QgYmUgYSBGdW5jdGlvbicpO1xuICAgIH0gZWxzZSBpZiAoIWlzVHlwZShvcHRpb25zLnJlZlBvc3RQcm9jZXNzb3IsICdVbmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgIWlzVHlwZShvcHRpb25zLnJlZlBvc3RQcm9jZXNzb3IsICdGdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLnJlZlBvc3RQcm9jZXNzb3IgbXVzdCBiZSBhIEZ1bmN0aW9uJyk7XG4gICAgfSBlbHNlIGlmICghaXNUeXBlKG9wdGlvbnMuc3ViRG9jUGF0aCwgJ1VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAhaXNUeXBlKG9wdGlvbnMuc3ViRG9jUGF0aCwgJ0FycmF5JykgJiZcbiAgICAgICAgICAgICAgICFpc1B0cihvcHRpb25zLnN1YkRvY1BhdGgpKSB7XG4gICAgICAvLyBJZiBhIHBvaW50ZXIgaXMgcHJvdmlkZWQsIHRocm93IGFuIGVycm9yIGlmIGl0J3Mgbm90IHRoZSBwcm9wZXIgdHlwZVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5zdWJEb2NQYXRoIG11c3QgYmUgYW4gQXJyYXkgb2YgcGF0aCBzZWdtZW50cyBvciBhIHZhbGlkIEpTT04gUG9pbnRlcicpO1xuICAgIH1cbiAgfVxufVxuXG4vKiBNb2R1bGUgTWVtYmVycyAqL1xuXG4vKlxuICogRWFjaCBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9uIHN0YXRlbWVudHMgYW5kICp0aGVuKiBleHBvcnRlZCBpbiB0d28gc3RlcHMgaW5zdGVhZCBvZiBvbmUgZHVlXG4gKiB0byBhIGJ1ZyBpbiBqc2RvYyAoaHR0cHM6Ly9naXRodWIuY29tL2pzZG9jMm1kL2pzZG9jLXBhcnNlL2lzc3Vlcy8xOCkgdGhhdCBjYXVzZXMgb3VyIGRvY3VtZW50YXRpb24gdG8gYmVcbiAqIGdlbmVyYXRlZCBpbXByb3Blcmx5LiAgVGhlIGltcGFjdCB0byB0aGUgdXNlciBpcyBzaWduaWZpY2FudCBlbm91Z2ggZm9yIHVzIHRvIHdhcnJhbnQgd29ya2luZyBhcm91bmQgaXQgdW50aWwgdGhpc1xuICogaXMgZml4ZWQuXG4gKi9cblxuLyoqXG4gKiBUaGUgb3B0aW9ucyB1c2VkIGZvciB2YXJpb3VzIEpzb25SZWZzIEFQSXMuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gSnNvblJlZnNPcHRpb25zXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW118ZnVuY3Rpb259IFtmaWx0ZXI9ZnVuY3Rpb24gKCkge3JldHVybiB0cnVlO31dIC0gVGhlIGZpbHRlciB0byB1c2Ugd2hlbiBnYXRoZXJpbmcgSlNPTlxuICogUmVmZXJlbmNlcyAqKElmIHRoaXMgdmFsdWUgaXMgYSBzaW5nbGUgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MsIHRoZSB2YWx1ZShzKSBhcmUgZXhwZWN0ZWQgdG8gYmUgdGhlIGB0eXBlKHMpYFxuICogeW91IGFyZSBpbnRlcmVzdGVkIGluIGNvbGxlY3RpbmcgYXMgZGVzY3JpYmVkIGluIHtAbGluayBtb2R1bGU6SnNvblJlZnMuZ2V0UmVmRGV0YWlsc30uICBJZiBpdCBpcyBhIGZ1bmN0aW9uLCBpdCBpc1xuICogZXhwZWN0ZWQgdGhhdCB0aGUgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIHtAbGluayBtb2R1bGU6SnNvblJlZnN+UmVmRGV0YWlsc0ZpbHRlcn0uKSpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVJbnZhbGlkPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgaW52YWxpZCBKU09OIFJlZmVyZW5jZSBkZXRhaWxzICooVGhpcyB3aWxsIG1ha2VcbiAqIGl0IHNvIHRoYXQgb2JqZWN0cyB0aGF0IGFyZSBsaWtlIEpTT04gUmVmZXJlbmNlIG9iamVjdHMsIGFzIGluIHRoZXkgYXJlIGFuIGBPYmplY3RgIGFuZCB0aGUgaGF2ZSBhIGAkcmVmYCBwcm9wZXJ0eSxcbiAqIGJ1dCBmYWlsIHZhbGlkYXRpb24gd2lsbCBiZSBpbmNsdWRlZC4gIFRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8ga25vdyBpZiB5b3UgaGF2ZSBpbnZhbGlkIEpTT05cbiAqIFJlZmVyZW5jZSBkZWZpbml0aW9ucy4gIFRoaXMgd2lsbCBub3QgbWVhbiB0aGF0IEFQSXMgd2lsbCBwcm9jZXNzIGludmFsaWQgSlNPTiBSZWZlcmVuY2VzIGJ1dCB0aGUgcmVhc29ucyBhcyB0byB3aHlcbiAqIHRoZSBKU09OIFJlZmVyZW5jZXMgYXJlIGludmFsaWQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgbWV0YWRhdGEuKSpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbbG9hZGVyT3B0aW9uc10gLSBUaGUgb3B0aW9ucyB0byBwYXNzIHRvXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3doaXRsb2NramMvcGF0aC1sb2FkZXIvYmxvYi9tYXN0ZXIvZG9jcy9BUEkubWQjbW9kdWxlX1BhdGhMb2FkZXIubG9hZHxQYXRoTG9hZGVyfmxvYWR9XG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35SZWZQcmVQcm9jZXNzb3J9IFtyZWZQcmVQcm9jZXNzb3JdIC0gVGhlIGNhbGxiYWNrIHVzZWQgdG8gcHJlLXByb2Nlc3MgYSBKU09OIFJlZmVyZW5jZSBsaWtlXG4gKiBvYmplY3QgKihUaGlzIGlzIGNhbGxlZCBwcmlvciB0byB2YWxpZGF0aW5nIHRoZSBKU09OIFJlZmVyZW5jZSBsaWtlIG9iamVjdCBhbmQgZ2V0dGluZyBpdHMgZGV0YWlscykqXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35SZWZQb3N0UHJvY2Vzc29yfSBbcmVmUG9zdFByb2Nlc3Nvcl0gLSBUaGUgY2FsbGJhY2sgdXNlZCB0byBwb3N0LXByb2Nlc3MgdGhlIEpTT04gUmVmZXJlbmNlXG4gKiBtZXRhZGF0YSAqKFRoaXMgaXMgY2FsbGVkIHByaW9yIGZpbHRlcmluZyB0aGUgcmVmZXJlbmNlcykqXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucmVsYXRpdmVCYXNlXSAtIFRoZSBiYXNlIGxvY2F0aW9uIHRvIHVzZSB3aGVuIHJlc29sdmluZyByZWxhdGl2ZSByZWZlcmVuY2VzICooT25seSB1c2VmdWxcbiAqIGZvciBBUElzIHRoYXQgZG8gcmVtb3RlIHJlZmVyZW5jZSByZXNvbHV0aW9uLiAgSWYgdGhpcyB2YWx1ZSBpcyBub3QgZGVmaW5lZCxcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vd2hpdGxvY2tqYy9wYXRoLWxvYWRlcnxwYXRoLWxvYWRlcn0gd2lsbCB1c2UgYHdpbmRvdy5sb2NhdGlvbi5ocmVmYCBmb3IgdGhlIGJyb3dzZXIgYW5kXG4gKiBgcHJvY2Vzcy5jd2QoKWAgZm9yIE5vZGUuanMuKSpcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbb3B0aW9ucy5zdWJEb2NQYXRoPVtdXSAtIFRoZSBKU09OIFBvaW50ZXIgb3IgYXJyYXkgb2YgcGF0aCBzZWdtZW50cyB0byB0aGUgc3ViIGRvY3VtZW50XG4gKiBsb2NhdGlvbiB0byBzZWFyY2ggZnJvbVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnN+SnNvblJlZnNPcHRpb25zXG4gKi9cblxuLyoqXG4gKiBTaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgb3V0IEpTT04gUmVmZXJlbmNlcy5cbiAqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb259IFJlZkRldGFpbHNGaWx0ZXJcbiAqXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35VbnJlc29sdmVkUmVmRGV0YWlsc30gcmVmRGV0YWlscyAtIFRoZSBKU09OIFJlZmVyZW5jZSBkZXRhaWxzIHRvIHRlc3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgSlNPTiBSZWZlcmVuY2VcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciB0aGUgSlNPTiBSZWZlcmVuY2Ugc2hvdWxkIGJlIGZpbHRlcmVkICoob3V0KSogb3Igbm90XG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmc35SZWZEZXRhaWxzRmlsdGVyXG4gKi9cblxuLyoqXG4gKiBTaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBwcmUtcHJvY2VzcyBhIEpTT04gUmVmZXJlbmNlIGxpa2Ugb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbn0gUmVmUHJlUHJvY2Vzc29yXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIFRoZSBKU09OIFJlZmVyZW5jZSBsaWtlIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBKU09OIFJlZmVyZW5jZSBsaWtlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBwcm9jZXNzZWQgSlNPTiBSZWZlcmVuY2UgbGlrZSBvYmplY3RcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzflJlZlByZVByb2Nlc3NvclxuICovXG5cbi8qKlxuICogU2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcG9zdC1wcm9jZXNzIGEgSlNPTiBSZWZlcmVuY2UgZGV0YWlscy5cbiAqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb259IFJlZlBvc3RQcm9jZXNzb3JcbiAqXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35VbnJlc29sdmVkUmVmRGV0YWlsc30gcmVmRGV0YWlscyAtIFRoZSBKU09OIFJlZmVyZW5jZSBkZXRhaWxzIHRvIHRlc3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgSlNPTiBSZWZlcmVuY2VcbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgcHJvY2Vzc2VkIEpTT04gUmVmZXJlbmNlIGRldGFpbHMgb2JqZWN0XG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmc35SZWZQb3N0UHJvY2Vzc29yXG4gKi9cblxuLyoqXG4gKiBEZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCByZXNvbHZlZCBKU09OIFJlZmVyZW5jZXMuXG4gKlxuICogQHR5cGVkZWYge21vZHVsZTpKc29uUmVmc35VbnJlc29sdmVkUmVmRGV0YWlsc30gUmVzb2x2ZWRSZWZEZXRhaWxzXG4gKlxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2lyY3VsYXJdIC0gV2hldGhlciBvciBub3QgdGhlIEpTT04gUmVmZXJlbmNlIGlzIGNpcmN1bGFyICooV2lsbCBub3QgYmUgc2V0IGlmIHRoZSBKU09OXG4gKiBSZWZlcmVuY2UgaXMgbm90IGNpcmN1bGFyKSpcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW21pc3NpbmddIC0gV2hldGhlciBvciBub3QgdGhlIHJlZmVyZW5jZWQgdmFsdWUgd2FzIG1pc3Npbmcgb3Igbm90ICooV2lsbCBub3QgYmUgc2V0IGlmIHRoZVxuICogcmVmZXJlbmNlZCB2YWx1ZSBpcyBub3QgbWlzc2luZykqXG4gKiBAcHJvcGVydHkgeyp9IFt2YWx1ZV0gLSBUaGUgcmVmZXJlbmNlZCB2YWx1ZSAqKFdpbGwgbm90IGJlIHNldCBpZiB0aGUgcmVmZXJlbmNlZCB2YWx1ZSBpcyBtaXNzaW5nKSpcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzflJlc29sdmVkUmVmRGV0YWlsc1xuICovXG5cbi8qKlxuICogVGhlIHJlc3VsdHMgb2YgcmVzb2x2aW5nIHRoZSBKU09OIFJlZmVyZW5jZXMgb2YgYW4gYXJyYXkvb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlc29sdmVkUmVmc1Jlc3VsdHNcbiAqXG4gKiBAcHJvcGVydHkge21vZHVsZTpKc29uUmVmc35SZXNvbHZlZFJlZkRldGFpbHN9IHJlZnMgLSBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgSlNPTiBQb2ludGVycyAqKGZyYWdtZW50IHZlcnNpb24pKlxuICogdG8gd2hlcmUgdGhlIEpTT04gUmVmZXJlbmNlIGlzIGRlZmluZWQgYW5kIHdob3NlIHZhbHVlcyBhcmUge0BsaW5rIG1vZHVsZTpKc29uUmVmc35SZXNvbHZlZFJlZkRldGFpbHN9XG4gKiBAcHJvcGVydHkge29iamVjdH0gdmFsdWUgLSBUaGUgYXJyYXkvb2JqZWN0IHdpdGggaXRzIEpTT04gUmVmZXJlbmNlcyBmdWxseSByZXNvbHZlZFxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnN+UmVzb2x2ZWRSZWZzUmVzdWx0c1xuICovXG5cbi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJldHJpZXZlZCBkb2N1bWVudCBhbmQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgaXRzIEpTT04gUmVmZXJlbmNlcy5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZXRyaWV2ZWRSZWZzUmVzdWx0c1xuICpcbiAqIEBwcm9wZXJ0eSB7bW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzfSByZWZzIC0gQW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIEpTT04gUG9pbnRlcnMgKihmcmFnbWVudCB2ZXJzaW9uKSpcbiAqIHRvIHdoZXJlIHRoZSBKU09OIFJlZmVyZW5jZSBpcyBkZWZpbmVkIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIHtAbGluayBtb2R1bGU6SnNvblJlZnN+VW5yZXNvbHZlZFJlZkRldGFpbHN9XG4gKiBAcHJvcGVydHkge29iamVjdH0gdmFsdWUgLSBUaGUgcmV0cmlldmVkIGRvY3VtZW50XG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmc35SZXRyaWV2ZWRSZWZzUmVzdWx0c1xuICovXG5cbi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJldHJpZXZlZCBkb2N1bWVudCwgdGhlIGRvY3VtZW50IHdpdGggaXRzIHJlZmVyZW5jZXMgcmVzb2x2ZWQgYW5kICBkZXRhaWxlZCBpbmZvcm1hdGlvblxuICogYWJvdXQgaXRzIEpTT04gUmVmZXJlbmNlcy5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZXRyaWV2ZWRSZXNvbHZlZFJlZnNSZXN1bHRzXG4gKlxuICogQHByb3BlcnR5IHttb2R1bGU6SnNvblJlZnN+VW5yZXNvbHZlZFJlZkRldGFpbHN9IHJlZnMgLSBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgSlNPTiBQb2ludGVycyAqKGZyYWdtZW50IHZlcnNpb24pKlxuICogdG8gd2hlcmUgdGhlIEpTT04gUmVmZXJlbmNlIGlzIGRlZmluZWQgYW5kIHdob3NlIHZhbHVlcyBhcmUge0BsaW5rIG1vZHVsZTpKc29uUmVmc35VbnJlc29sdmVkUmVmRGV0YWlsc31cbiAqIEBwcm9wZXJ0eSB7bW9kdWxlOkpzb25SZWZzflJlc29sdmVkUmVmc1Jlc3VsdHN9IC0gQW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIEpTT04gUG9pbnRlcnMgKihmcmFnbWVudCB2ZXJzaW9uKSpcbiAqIHRvIHdoZXJlIHRoZSBKU09OIFJlZmVyZW5jZSBpcyBkZWZpbmVkIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIHtAbGluayBtb2R1bGU6SnNvblJlZnN+UmVzb2x2ZWRSZWZEZXRhaWxzfVxuICogQHByb3BlcnR5IHtvYmplY3R9IHZhbHVlIC0gVGhlIHJldHJpZXZlZCBkb2N1bWVudFxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnN+UmV0cmlldmVkUmVzb2x2ZWRSZWZzUmVzdWx0c1xuICovXG5cbi8qKlxuICogRGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdW5yZXNvbHZlZCBKU09OIFJlZmVyZW5jZXMuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gVW5yZXNvbHZlZFJlZkRldGFpbHNcbiAqXG4gKiBAcHJvcGVydHkge29iamVjdH0gZGVmIC0gVGhlIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXJyb3JdIC0gVGhlIGVycm9yIGluZm9ybWF0aW9uIGZvciBpbnZhbGlkIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb24gKihPbmx5IHByZXNlbnQgd2hlbiB0aGVcbiAqIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb24gaXMgaW52YWxpZCBvciB0aGVyZSB3YXMgYSBwcm9ibGVtIHJldHJpZXZpbmcgYSByZW1vdGUgcmVmZXJlbmNlIGR1cmluZyByZXNvbHV0aW9uKSpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmkgLSBUaGUgVVJJIHBvcnRpb24gb2YgdGhlIEpTT04gUmVmZXJlbmNlXG4gKiBAcHJvcGVydHkge29iamVjdH0gdXJpRGV0YWlscyAtIERldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBVUkkgYXMgcHJvdmlkZWQgYnlcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qc3xVUkkucGFyc2V9LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgLSBUaGUgSlNPTiBSZWZlcmVuY2UgdHlwZSAqKFRoaXMgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBgaW52YWxpZGAsIGBsb2NhbGAsXG4gKiBgcmVsYXRpdmVgIG9yIGByZW1vdGVgLikqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3dhcm5pbmddIC0gVGhlIHdhcm5pbmcgaW5mb3JtYXRpb24gKihPbmx5IHByZXNlbnQgd2hlbiB0aGUgSlNPTiBSZWZlcmVuY2UgZGVmaW5pdGlvbiBwcm9kdWNlcyBhXG4gKiB3YXJuaW5nKSpcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGludGVybmFsIGNhY2hlIG9mIHJlbW90ZSBkb2N1bWVudHMsIHJlZmVyZW5jZSBkZXRhaWxzLCBldGMuXG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmcy5jbGVhckNhY2hlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyQ2FjaGUgKCkge1xuICByZW1vdGVDYWNoZSA9IHt9O1xufVxuXG4vKipcbiAqIFRha2VzIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMgYW5kIGRlY29kZXMgdGhlIEpTT04gUG9pbnRlciB0b2tlbnMgaW4gdGhlbS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gVGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cyB3aXRoIHRoZWlyIEpTT04gUG9pbnRlciB0b2tlbnMgZGVjb2RlZFxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgcGF0aCBpcyBub3QgYW4gYEFycmF5YFxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxI3NlY3Rpb24tM31cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLmRlY29kZVBhdGhcbiAqL1xuZnVuY3Rpb24gZGVjb2RlUGF0aCAocGF0aCkge1xuICBpZiAoIWlzVHlwZShwYXRoLCAnQXJyYXknKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgcmV0dXJuIHBhdGgubWFwKGZ1bmN0aW9uIChzZWcpIHtcbiAgICBpZiAoIWlzVHlwZShzZWcsICdTdHJpbmcnKSkge1xuICAgICAgc2VnID0gSlNPTi5zdHJpbmdpZnkoc2VnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VnLnJlcGxhY2UoL34xL2csICcvJykucmVwbGFjZSgvfjAvZywgJ34nKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cyBhbmQgZW5jb2RlcyB0aGUgc3BlY2lhbCBKU09OIFBvaW50ZXIgY2hhcmFjdGVycyBpbiB0aGVtLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBUaGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50c1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzIHdpdGggdGhlaXIgSlNPTiBQb2ludGVyIHRva2VucyBlbmNvZGVkXG4gKlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBwYXRoIGlzIG5vdCBhbiBgQXJyYXlgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEjc2VjdGlvbi0zfVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMuZW5jb2RlUGF0aFxuICovXG5mdW5jdGlvbiBlbmNvZGVQYXRoIChwYXRoKSB7XG4gIGlmICghaXNUeXBlKHBhdGgsICdBcnJheScpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGF0aCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICByZXR1cm4gcGF0aC5tYXAoZnVuY3Rpb24gKHNlZykge1xuICAgIGlmICghaXNUeXBlKHNlZywgJ1N0cmluZycpKSB7XG4gICAgICBzZWcgPSBKU09OLnN0cmluZ2lmeShzZWcpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWcucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIEpTT04gUmVmZXJlbmNlcyBkZWZpbmVkIHdpdGhpbiB0aGUgcHJvdmlkZWQgYXJyYXkvb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fSBvYmogLSBUaGUgc3RydWN0dXJlIHRvIGZpbmQgSlNPTiBSZWZlcmVuY2VzIHdpdGhpblxuICogQHBhcmFtIHttb2R1bGU6SnNvblJlZnN+SnNvblJlZnNPcHRpb25zfSBbb3B0aW9uc10gLSBUaGUgSnNvblJlZnMgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IGFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBKU09OIFBvaW50ZXJzICooZnJhZ21lbnQgdmVyc2lvbikqIHRvIHdoZXJlIHRoZSBKU09OIFJlZmVyZW5jZSBpcyBkZWZpbmVkXG4gKiBhbmQgd2hvc2UgdmFsdWVzIGFyZSB7QGxpbmsgbW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzfS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2hlbiB0aGUgaW5wdXQgYXJndW1lbnRzIGZhaWwgdmFsaWRhdGlvbiBvciBpZiBgb3B0aW9ucy5zdWJEb2NQYXRoYCBwb2ludHMgdG8gYW4gaW52YWxpZCBsb2NhdGlvblxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMuZmluZFJlZnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRmluZGluZyBhbGwgdmFsaWQgcmVmZXJlbmNlc1xuICogdmFyIGFsbFJlZnMgPSBKc29uUmVmcy5maW5kUmVmcyhvYmopO1xuICogLy8gRmluZGluZyBhbGwgcmVtb3RlIHJlZmVyZW5jZXNcbiAqIHZhciByZW1vdGVSZWZzID0gSnNvblJlZnMuZmluZFJlZnMob2JqLCB7ZmlsdGVyOiBbJ3JlbGF0aXZlJywgJ3JlbW90ZSddfSk7XG4gKiAvLyBGaW5kaW5nIGFsbCBpbnZhbGlkIHJlZmVyZW5jZXNcbiAqIHZhciBpbnZhbGlkUmVmcyA9IEpzb25SZWZzLmZpbmRSZWZzKG9iaiwge2ZpbHRlcjogJ2ludmFsaWQnLCBpbmNsdWRlSW52YWxpZDogdHJ1ZX0pO1xuICovXG5mdW5jdGlvbiBmaW5kUmVmcyAob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgdmFyIGZyb21PYmogPSBvYmo7XG4gIHZhciBmcm9tUGF0aDtcbiAgdmFyIHJlZnMgPSB7fTtcbiAgdmFyIHJlZkZpbHRlcjtcblxuICAvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgZG9jdW1lbnRcbiAgaWYgKCFpc1R5cGUob2JqLCAnQXJyYXknKSAmJiAhaXNUeXBlKG9iaiwgJ09iamVjdCcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb2JqIG11c3QgYmUgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gIH1cblxuICAvLyBTZXQgZGVmYXVsdCBmb3Igb3B0aW9uc1xuICBpZiAoaXNUeXBlKG9wdGlvbnMsICdVbmRlZmluZWQnKSkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbnNcbiAgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIENvbnZlcnQgZnJvbSB0byBhIHBvaW50ZXJcbiAgZnJvbVBhdGggPSBtYWtlU3ViRG9jUGF0aChvcHRpb25zKTtcblxuICAvLyBDb252ZXJ0IG9wdGlvbnMuZmlsdGVyIGZyb20gYW4gQXJyYXkvU3RyaW5nIHRvIGEgRnVuY3Rpb25cbiAgcmVmRmlsdGVyID0gbWFrZVJlZkZpbHRlcihvcHRpb25zKTtcblxuICBpZiAoZnJvbVBhdGgubGVuZ3RoID4gMCkge1xuICAgIGFuY2VzdG9ycyA9IGZpbmRBbmNlc3RvcnMob2JqLCBmcm9tUGF0aCk7XG4gICAgZnJvbU9iaiA9IGZpbmRWYWx1ZShvYmosIGZyb21QYXRoKTtcbiAgfVxuXG4gIC8vIFdhbGsgdGhlIGRvY3VtZW50IChvciBzdWIgZG9jdW1lbnQpIGFuZCBmaW5kIGFsbCBKU09OIFJlZmVyZW5jZXNcbiAgd2FsayhhbmNlc3RvcnMsIGZyb21PYmosIGZyb21QYXRoLCBmdW5jdGlvbiAoYW5jZXN0b3JzLCBub2RlLCBwYXRoKSB7XG4gICAgdmFyIHByb2Nlc3NDaGlsZHJlbiA9IHRydWU7XG4gICAgdmFyIHJlZkRldGFpbHM7XG5cbiAgICBpZiAoaXNSZWZMaWtlKG5vZGUpKSB7XG4gICAgICAvLyBQcmUtcHJvY2VzcyB0aGUgbm9kZSB3aGVuIG5lY2Vzc2FyeVxuICAgICAgaWYgKCFpc1R5cGUob3B0aW9ucy5yZWZQcmVQcm9jZXNzb3IsICdVbmRlZmluZWQnKSkge1xuICAgICAgICBub2RlID0gb3B0aW9ucy5yZWZQcmVQcm9jZXNzb3Iobm9kZSwgcGF0aCk7XG4gICAgICB9XG5cbiAgICAgIHJlZkRldGFpbHMgPSBnZXRSZWZEZXRhaWxzKG5vZGUpO1xuXG4gICAgICBpZiAocmVmRGV0YWlscy50eXBlICE9PSAnaW52YWxpZCcgfHwgb3B0aW9ucy5pbmNsdWRlSW52YWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAocmVmRmlsdGVyKHJlZkRldGFpbHMsIHBhdGgpID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gUG9zdC1wcm9jZXNzIHRoZSByZWZlcmVuY2UgZGV0YWlscyB3aGVuIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmICghaXNUeXBlKG9wdGlvbnMucmVmUG9zdFByb2Nlc3NvciwgJ1VuZGVmaW5lZCcpKSB7XG4gICAgICAgICAgICByZWZEZXRhaWxzID0gb3B0aW9ucy5yZWZQb3N0UHJvY2Vzc29yKHJlZkRldGFpbHMsIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlZnNbcGF0aFRvUHRyKHBhdGgpXSA9IHJlZkRldGFpbHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXaGVuZXZlciBhIEpTT04gUmVmZXJlbmNlIGhhcyBleHRyYSBjaGlsZHJlbiwgaXRzIGNoaWxkcmVuIHNob3VsZCBiZSBpZ25vcmVkIHNvIHdlIHdhbnQgdG8gc3RvcCBwcm9jZXNzaW5nLlxuICAgICAgICAvLyAgIFNlZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcGJyeWFuLXp5cC1qc29uLXJlZi0wMyNzZWN0aW9uLTNcbiAgICAgICAgaWYgKGdldEV4dHJhUmVmS2V5cyhub2RlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJvY2Vzc0NoaWxkcmVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc0NoaWxkcmVuO1xuICB9KTtcblxuICByZXR1cm4gcmVmcztcbn1cblxuLyoqXG4gKiBGaW5kcyBKU09OIFJlZmVyZW5jZXMgZGVmaW5lZCB3aXRoaW4gdGhlIGRvY3VtZW50IGF0IHRoZSBwcm92aWRlZCBsb2NhdGlvbi5cbiAqXG4gKiBUaGlzIEFQSSBpcyBpZGVudGljYWwgdG8ge0BsaW5rIG1vZHVsZTpKc29uUmVmcy5maW5kUmVmc30gZXhjZXB0IHRoaXMgQVBJIHdpbGwgcmV0cmlldmUgYSByZW1vdGUgZG9jdW1lbnQgYW5kIHRoZW5cbiAqIHJldHVybiB0aGUgcmVzdWx0IG9mIHtAbGluayBtb2R1bGU6SnNvblJlZnMuZmluZFJlZnN9IG9uIHRoZSByZXRyaWV2ZWQgZG9jdW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIC0gVGhlIGxvY2F0aW9uIHRvIHJldHJpZXZlICooQ2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLCBqdXN0IG1ha2Ugc3VyZSB5b3UgbG9vayBhdCB0aGVcbiAqIHtAbGluayBtb2R1bGU6SnNvblJlZnN+SnNvblJlZnNPcHRpb25zfG9wdGlvbnMgZG9jdW1lbnRhdGlvbn0gdG8gc2VlIGhvdyByZWxhdGl2ZSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkLikqXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35Kc29uUmVmc09wdGlvbnN9IFtvcHRpb25zXSAtIFRoZSBKc29uUmVmcyBvcHRpb25zXG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGEge0BsaW5rIG1vZHVsZTpKc29uUmVmc35SZXRyaWV2ZWRSZWZzUmVzdWx0c30gYW5kIHJlamVjdHMgd2l0aCBhblxuICogYEVycm9yYCB3aGVuIHRoZSBpbnB1dCBhcmd1bWVudHMgZmFpbCB2YWxpZGF0aW9uLCB3aGVuIGBvcHRpb25zLnN1YkRvY1BhdGhgIHBvaW50cyB0byBhbiBpbnZhbGlkIGxvY2F0aW9uIG9yIHdoZW5cbiAqICB0aGUgbG9jYXRpb24gYXJndW1lbnQgcG9pbnRzIHRvIGFuIHVubG9hZGFibGUgcmVzb3VyY2VcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLmZpbmRSZWZzQXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSB0aGF0IG9ubHkgcmVzb2x2ZXMgcmVmZXJlbmNlcyB3aXRoaW4gYSBzdWIgZG9jdW1lbnRcbiAqIEpzb25SZWZzLmZpbmRSZWZzQXQoJ2h0dHA6Ly9wZXRzdG9yZS5zd2FnZ2VyLmlvL3YyL3N3YWdnZXIuanNvbicsIHtcbiAqICAgICBzdWJEb2NQYXRoOiAnIy9kZWZpbml0aW9ucydcbiAqICAgfSlcbiAqICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICogICAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzcG9uc2VcbiAqICAgICAgLy9cbiAqICAgICAgLy8gcmVzLnJlZnM6IEpTT04gUmVmZXJlbmNlIGxvY2F0aW9ucyBhbmQgZGV0YWlsc1xuICogICAgICAvLyByZXMudmFsdWU6IFRoZSByZXRyaWV2ZWQgZG9jdW1lbnRcbiAqICAgfSwgZnVuY3Rpb24gKGVycikge1xuICogICAgIGNvbnNvbGUubG9nKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICovXG5mdW5jdGlvbiBmaW5kUmVmc0F0IChsb2NhdGlvbiwgb3B0aW9ucykge1xuICB2YXIgYWxsVGFza3MgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNPcHRpb25zO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICAgIGlmICghaXNUeXBlKGxvY2F0aW9uLCAnU3RyaW5nJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbG9jYXRpb24gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGVmYXVsdCBmb3Igb3B0aW9uc1xuICAgICAgaWYgKGlzVHlwZShvcHRpb25zLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBvcHRpb25zIChEb2luZyB0aGlzIGhlcmUgZm9yIGEgcXVpY2spXG4gICAgICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgIGNPcHRpb25zID0gY2xvbmUob3B0aW9ucyk7XG5cbiAgICAgIC8vIENvbWJpbmUgdGhlIGxvY2F0aW9uIGFuZCB0aGUgb3B0aW9uYWwgcmVsYXRpdmUgYmFzZVxuICAgICAgbG9jYXRpb24gPSBjb21iaW5lVVJJcyhvcHRpb25zLnJlbGF0aXZlQmFzZSwgbG9jYXRpb24pO1xuXG4gICAgICAvLyBTZXQgdGhlIG5ldyByZWxhdGl2ZSByZWZlcmVuY2UgbG9jYXRpb25cbiAgICAgIGNPcHRpb25zLnJlbGF0aXZlQmFzZSA9IGxvY2F0aW9uLnN1YnN0cmluZygwLCBsb2NhdGlvbi5sYXN0SW5kZXhPZignLycpKTtcblxuICAgICAgcmV0dXJuIGdldFJlbW90ZURvY3VtZW50KGxvY2F0aW9uLCBjT3B0aW9ucyk7XG4gICAgfSlcbiAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICB2YXIgY2FjaGVFbnRyeSA9IGNsb25lKHJlbW90ZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICB2YXIgY09wdGlvbnM7XG5cbiAgICAgIGlmIChpc1R5cGUoY2FjaGVFbnRyeS5yZWZzLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgY09wdGlvbnMgPSBjbG9uZShvcHRpb25zKTtcblxuICAgICAgICAvLyBEbyBub3QgZmlsdGVyIGFueSByZWZlcmVuY2VzIHNvIHRoZSBjYWNoZSBpcyBjb21wbGV0ZVxuICAgICAgICBkZWxldGUgY09wdGlvbnMuZmlsdGVyO1xuICAgICAgICBkZWxldGUgY09wdGlvbnMuc3ViRG9jUGF0aDtcblxuICAgICAgICBjT3B0aW9ucy5pbmNsdWRlSW52YWxpZCA9IHRydWU7XG5cbiAgICAgICAgcmVtb3RlQ2FjaGVbbG9jYXRpb25dLnJlZnMgPSBmaW5kUmVmcyhyZXMsIGNPcHRpb25zKTtcblxuICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSByZWZlcmVuY2VzIGJhc2VkIG9uIG9wdGlvbnMuZmlsdGVyIGFuZCBvcHRpb25zLnN1YkRvY1BhdGhcbiAgICAgICAgY2FjaGVFbnRyeS5yZWZzID0gZmlsdGVyUmVmcyhvcHRpb25zLCByZW1vdGVDYWNoZVtsb2NhdGlvbl0ucmVmcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBKU09OIFJlZmVyZW5jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIC0gVGhlIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb25cbiAqXG4gKiBAcmV0dXJucyB7bW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzfSB0aGUgZGV0YWlsZWQgaW5mb3JtYXRpb25cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLmdldFJlZkRldGFpbHNcbiAqL1xuZnVuY3Rpb24gZ2V0UmVmRGV0YWlscyAob2JqKSB7XG4gIHZhciBkZXRhaWxzID0ge1xuICAgIGRlZjogb2JqXG4gIH07XG4gIHZhciBjYWNoZUtleTtcbiAgdmFyIGV4dHJhS2V5cztcbiAgdmFyIHVyaURldGFpbHM7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaXNSZWZMaWtlKG9iaiwgdHJ1ZSkpIHtcbiAgICAgIGNhY2hlS2V5ID0gb2JqLiRyZWY7XG4gICAgICB1cmlEZXRhaWxzID0gdXJpRGV0YWlsc0NhY2hlW2NhY2hlS2V5XTtcblxuICAgICAgaWYgKGlzVHlwZSh1cmlEZXRhaWxzLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgdXJpRGV0YWlscyA9IHVyaURldGFpbHNDYWNoZVtjYWNoZUtleV0gPSBVUkkucGFyc2UoY2FjaGVLZXkpO1xuICAgICAgfVxuXG4gICAgICBkZXRhaWxzLnVyaSA9IGNhY2hlS2V5O1xuICAgICAgZGV0YWlscy51cmlEZXRhaWxzID0gdXJpRGV0YWlscztcblxuICAgICAgaWYgKGlzVHlwZSh1cmlEZXRhaWxzLmVycm9yLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgLy8gQ29udmVydCB0aGUgVVJJIHJlZmVyZW5jZSB0byBvbmUgb2Ygb3VyIHR5cGVzXG4gICAgICAgIHN3aXRjaCAodXJpRGV0YWlscy5yZWZlcmVuY2UpIHtcbiAgICAgICAgY2FzZSAnYWJzb2x1dGUnOlxuICAgICAgICBjYXNlICd1cmknOlxuICAgICAgICAgIGRldGFpbHMudHlwZSA9ICdyZW1vdGUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzYW1lLWRvY3VtZW50JzpcbiAgICAgICAgICBkZXRhaWxzLnR5cGUgPSAnbG9jYWwnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGRldGFpbHMudHlwZSA9IHVyaURldGFpbHMucmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXRhaWxzLmVycm9yID0gZGV0YWlscy51cmlEZXRhaWxzLmVycm9yO1xuICAgICAgICBkZXRhaWxzLnR5cGUgPSAnaW52YWxpZCc7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZW50aWZ5IHdhcm5pbmdcbiAgICAgIGV4dHJhS2V5cyA9IGdldEV4dHJhUmVmS2V5cyhvYmopO1xuXG4gICAgICBpZiAoZXh0cmFLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGV0YWlscy53YXJuaW5nID0gJ0V4dHJhIEpTT04gUmVmZXJlbmNlIHByb3BlcnRpZXMgd2lsbCBiZSBpZ25vcmVkOiAnICsgZXh0cmFLZXlzLmpvaW4oJywgJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRldGFpbHMudHlwZSA9ICdpbnZhbGlkJztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRldGFpbHMuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICBkZXRhaWxzLnR5cGUgPSAnaW52YWxpZCc7XG4gIH1cblxuICByZXR1cm4gZGV0YWlscztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGFyZ3VtZW50IHJlcHJlc2VudHMgYSBKU09OIFBvaW50ZXIuXG4gKlxuICogQSBzdHJpbmcgaXMgYSBKU09OIFBvaW50ZXIgaWYgdGhlIGZvbGxvd2luZyBhcmUgYWxsIHRydWU6XG4gKlxuICogICAqIFRoZSBzdHJpbmcgaXMgb2YgdHlwZSBgU3RyaW5nYFxuICogICAqIFRoZSBzdHJpbmcgbXVzdCBiZSBlbXB0eSwgYCNgIG9yIHN0YXJ0IHdpdGggYSBgL2Agb3IgYCMvYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdHIgLSBUaGUgc3RyaW5nIHRvIGNoZWNrXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0aHJvd1dpdGhEZXRhaWxzPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHRocm93IGFuIGBFcnJvcmAgd2l0aCB0aGUgZGV0YWlscyBhcyB0byB3aHkgdGhlIHZhbHVlXG4gKiBwcm92aWRlZCBpcyBpbnZhbGlkXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrXG4gKlxuICogQHRocm93cyB7ZXJyb3J9IHdoZW4gdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGludmFsaWQgYW5kIHRoZSBgdGhyb3dXaXRoRGV0YWlsc2AgYXJndW1lbnQgaXMgYHRydWVgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEjc2VjdGlvbi0zfVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMuaXNQdHJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2VwYXJhdGluZyB0aGUgZGlmZmVyZW50IHdheXMgdG8gaW52b2tlIGlzUHRyIGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzXG4gKiBpZiAoaXNQdHIoc3RyKSkge1xuICogICAvLyBIYW5kbGUgYSB2YWxpZCBKU09OIFBvaW50ZXJcbiAqIH0gZWxzZSB7XG4gKiAgIC8vIEdldCB0aGUgcmVhc29uIGFzIHRvIHdoeSB0aGUgdmFsdWUgaXMgbm90IGEgSlNPTiBQb2ludGVyIHNvIHlvdSBjYW4gZml4L3JlcG9ydCBpdFxuICogICB0cnkge1xuICogICAgIGlzUHRyKHN0ciwgdHJ1ZSk7XG4gKiAgIH0gY2F0Y2ggKGVycikge1xuICogICAgIC8vIFRoZSBlcnJvciBtZXNzYWdlIGNvbnRhaW5zIHRoZSBkZXRhaWxzIGFzIHRvIHdoeSB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEgSlNPTiBQb2ludGVyXG4gKiAgIH1cbiAqIH1cbiAqL1xuZnVuY3Rpb24gaXNQdHIgKHB0ciwgdGhyb3dXaXRoRGV0YWlscykge1xuICB2YXIgdmFsaWQgPSB0cnVlO1xuICB2YXIgZmlyc3RDaGFyO1xuXG4gIHRyeSB7XG4gICAgaWYgKGlzVHlwZShwdHIsICdTdHJpbmcnKSkge1xuICAgICAgaWYgKHB0ciAhPT0gJycpIHtcbiAgICAgICAgZmlyc3RDaGFyID0gcHRyLmNoYXJBdCgwKTtcblxuICAgICAgICBpZiAoWycjJywgJy8nXS5pbmRleE9mKGZpcnN0Q2hhcikgPT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdHIgbXVzdCBzdGFydCB3aXRoIGEgLyBvciAjLycpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0Q2hhciA9PT0gJyMnICYmIHB0ciAhPT0gJyMnICYmIHB0ci5jaGFyQXQoMSkgIT09ICcvJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHRyIG11c3Qgc3RhcnQgd2l0aCBhIC8gb3IgIy8nKTtcbiAgICAgICAgfSBlbHNlIGlmIChwdHIubWF0Y2goYmFkUHRyVG9rZW5SZWdleCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B0ciBoYXMgaW52YWxpZCB0b2tlbihzKScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHRyIGlzIG5vdCBhIFN0cmluZycpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHRocm93V2l0aERldGFpbHMgPT09IHRydWUpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICB2YWxpZCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgYXJndW1lbnQgcmVwcmVzZW50cyBhIEpTT04gUmVmZXJlbmNlLlxuICpcbiAqIEFuIG9iamVjdCBpcyBhIEpTT04gUmVmZXJlbmNlIG9ubHkgaWYgdGhlIGZvbGxvd2luZyBhcmUgYWxsIHRydWU6XG4gKlxuICogICAqIFRoZSBvYmplY3QgaXMgb2YgdHlwZSBgT2JqZWN0YFxuICogICAqIFRoZSBvYmplY3QgaGFzIGEgYCRyZWZgIHByb3BlcnR5XG4gKiAgICogVGhlIGAkcmVmYCBwcm9wZXJ0eSBpcyBhIHZhbGlkIFVSSVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0aHJvd1dpdGhEZXRhaWxzPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHRocm93IGFuIGBFcnJvcmAgd2l0aCB0aGUgZGV0YWlscyBhcyB0byB3aHkgdGhlIHZhbHVlXG4gKiBwcm92aWRlZCBpcyBpbnZhbGlkXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrXG4gKlxuICogQHRocm93cyB7ZXJyb3J9IHdoZW4gdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGludmFsaWQgYW5kIHRoZSBgdGhyb3dXaXRoRGV0YWlsc2AgYXJndW1lbnQgaXMgYHRydWVgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcGJyeWFuLXp5cC1qc29uLXJlZi0wMyNzZWN0aW9uLTN9XG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmcy5pc1JlZlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXBhcmF0aW5nIHRoZSBkaWZmZXJlbnQgd2F5cyB0byBpbnZva2UgaXNSZWYgZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXNcbiAqIGlmIChpc1JlZihvYmopKSB7XG4gKiAgIC8vIEhhbmRsZSBhIHZhbGlkIEpTT04gUmVmZXJlbmNlXG4gKiB9IGVsc2Uge1xuICogICAvLyBHZXQgdGhlIHJlYXNvbiBhcyB0byB3aHkgdGhlIHZhbHVlIGlzIG5vdCBhIEpTT04gUmVmZXJlbmNlIHNvIHlvdSBjYW4gZml4L3JlcG9ydCBpdFxuICogICB0cnkge1xuICogICAgIGlzUmVmKHN0ciwgdHJ1ZSk7XG4gKiAgIH0gY2F0Y2ggKGVycikge1xuICogICAgIC8vIFRoZSBlcnJvciBtZXNzYWdlIGNvbnRhaW5zIHRoZSBkZXRhaWxzIGFzIHRvIHdoeSB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEgSlNPTiBSZWZlcmVuY2VcbiAqICAgfVxuICogfVxuICovXG5mdW5jdGlvbiBpc1JlZiAob2JqLCB0aHJvd1dpdGhEZXRhaWxzKSB7XG4gIHJldHVybiBpc1JlZkxpa2Uob2JqLCB0aHJvd1dpdGhEZXRhaWxzKSAmJiBnZXRSZWZEZXRhaWxzKG9iaiwgdGhyb3dXaXRoRGV0YWlscykudHlwZSAhPT0gJ2ludmFsaWQnO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cyBmb3IgdGhlIHByb3ZpZGVkIEpTT04gUG9pbnRlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHRyIC0gVGhlIEpTT04gUG9pbnRlclxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gdGhlIHBhdGggc2VnbWVudHNcbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHByb3ZpZGVkIGBwdHJgIGFyZ3VtZW50IGlzIG5vdCBhIEpTT04gUG9pbnRlclxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMucGF0aEZyb21QdHJcbiAqL1xuZnVuY3Rpb24gcGF0aEZyb21QdHIgKHB0cikge1xuICBpZiAoIWlzUHRyKHB0cikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3B0ciBtdXN0IGJlIGEgSlNPTiBQb2ludGVyJyk7XG4gIH1cblxuICB2YXIgc2VnbWVudHMgPSBwdHIuc3BsaXQoJy8nKTtcblxuICAvLyBSZW1vdmUgdGhlIGZpcnN0IHNlZ21lbnRcbiAgc2VnbWVudHMuc2hpZnQoKTtcblxuICByZXR1cm4gZGVjb2RlUGF0aChzZWdtZW50cyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gUG9pbnRlciBmb3IgdGhlIHByb3ZpZGVkIGFycmF5IG9mIHBhdGggc2VnbWVudHMuXG4gKlxuICogKipOb3RlOioqIElmIGEgcGF0aCBzZWdtZW50IGluIGBwYXRoYCBpcyBub3QgYSBgU3RyaW5nYCwgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gb25lIHVzaW5nIGBKU09OLnN0cmluZ2lmeWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIFRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoYXNoUHJlZml4PXRydWVdIC0gV2hldGhlciBvciBub3QgY3JlYXRlIGEgaGFzaC1wcmVmaXhlZCBKU09OIFBvaW50ZXJcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgY29ycmVzcG9uZGluZyBKU09OIFBvaW50ZXJcbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGBwYXRoYCBhcmd1bWVudCBpcyBub3QgYW4gYXJyYXlcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLnBhdGhUb1B0clxuICovXG5mdW5jdGlvbiBwYXRoVG9QdHIgKHBhdGgsIGhhc2hQcmVmaXgpIHtcbiAgaWYgKCFpc1R5cGUocGF0aCwgJ0FycmF5JykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBBcnJheScpO1xuICB9XG5cbiAgLy8gRW5jb2RlIGVhY2ggc2VnbWVudCBhbmQgcmV0dXJuXG4gIHJldHVybiAoaGFzaFByZWZpeCAhPT0gZmFsc2UgPyAnIycgOiAnJykgKyAocGF0aC5sZW5ndGggPiAwID8gJy8nIDogJycpICsgZW5jb2RlUGF0aChwYXRoKS5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogRmluZHMgSlNPTiBSZWZlcmVuY2VzIGRlZmluZWQgd2l0aGluIHRoZSBwcm92aWRlZCBhcnJheS9vYmplY3QgYW5kIHJlc29sdmVzIHRoZW0uXG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IG9iaiAtIFRoZSBzdHJ1Y3R1cmUgdG8gZmluZCBKU09OIFJlZmVyZW5jZXMgd2l0aGluXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35Kc29uUmVmc09wdGlvbnN9IFtvcHRpb25zXSAtIFRoZSBKc29uUmVmcyBvcHRpb25zXG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGEge0BsaW5rIG1vZHVsZTpKc29uUmVmc35SZXNvbHZlZFJlZnNSZXN1bHRzfSBhbmQgcmVqZWN0cyB3aXRoIGFuXG4gKiBgRXJyb3JgIHdoZW4gdGhlIGlucHV0IGFyZ3VtZW50cyBmYWlsIHZhbGlkYXRpb24sIHdoZW4gYG9wdGlvbnMuc3ViRG9jUGF0aGAgcG9pbnRzIHRvIGFuIGludmFsaWQgbG9jYXRpb24gb3Igd2hlblxuICogIHRoZSBsb2NhdGlvbiBhcmd1bWVudCBwb2ludHMgdG8gYW4gdW5sb2FkYWJsZSByZXNvdXJjZVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMucmVzb2x2ZVJlZnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSB0aGF0IG9ubHkgcmVzb2x2ZXMgcmVsYXRpdmUgYW5kIHJlbW90ZSByZWZlcmVuY2VzXG4gKiBKc29uUmVmcy5yZXNvbHZlUmVmcyhzd2FnZ2VyT2JqLCB7XG4gKiAgICAgZmlsdGVyOiBbJ3JlbGF0aXZlJywgJ3JlbW90ZSddXG4gKiAgIH0pXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAqICAgICAgLy8gRG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3BvbnNlXG4gKiAgICAgIC8vXG4gKiAgICAgIC8vIHJlcy5yZWZzOiBKU09OIFJlZmVyZW5jZSBsb2NhdGlvbnMgYW5kIGRldGFpbHNcbiAqICAgICAgLy8gcmVzLnJlc29sdmVkOiBUaGUgZG9jdW1lbnQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgSlNPTiBSZWZlcmVuY2VzIHJlc29sdmVkXG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmxvZyhlcnIuc3RhY2spO1xuICogICB9KTtcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlZnMgKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYWxsVGFza3MgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVmFsaWRhdGUgdGhlIHByb3ZpZGVkIGRvY3VtZW50XG4gICAgICBpZiAoIWlzVHlwZShvYmosICdBcnJheScpICYmICFpc1R5cGUob2JqLCAnT2JqZWN0JykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb2JqIG11c3QgYmUgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0IGZvciBvcHRpb25zXG4gICAgICBpZiAoaXNUeXBlKG9wdGlvbnMsICdVbmRlZmluZWQnKSkge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIG9wdGlvbnNcbiAgICAgIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9KVxuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEZpbmQgYWxsIHJlZmVyZW5jZXMgcmVjdXJzaXZlbHlcbiAgICAgIHJldHVybiBmaW5kQWxsUmVmcyhvYmosIG9wdGlvbnMsIFtdLCBbXSwge30pO1xuICAgIH0pXG4gICAgLnRoZW4oZnVuY3Rpb24gKGFSZWZzKSB7XG4gICAgICB2YXIgY2xvbmVkID0gY2xvbmUob2JqKTtcbiAgICAgIHZhciBwYXJlbnRMb2NhdGlvbnMgPSBbXTtcblxuICAgICAgLy8gUmVwbGFjZSByZW1vdGUgcmVmZXJlbmNlcyBmaXJzdFxuICAgICAgT2JqZWN0LmtleXMoYVJlZnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgICAgICB2YXIgcmVmRGV0YWlscyA9IGFSZWZzW3JlZlB0cl07XG4gICAgICAgIHZhciB2YWx1ZTtcblxuICAgICAgICBpZiAocmVtb3RlVHlwZXMuaW5kZXhPZihyZWZEZXRhaWxzLnR5cGUpID4gLTEpIHtcbiAgICAgICAgICBpZiAoaXNUeXBlKHJlZkRldGFpbHMuZXJyb3IsICdVbmRlZmluZWQnKSAmJiByZWZEZXRhaWxzLnR5cGUgIT09ICdpbnZhbGlkJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBmaW5kVmFsdWUocmVmRGV0YWlscy52YWx1ZSB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmRGV0YWlscy51cmlEZXRhaWxzLmZyYWdtZW50ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aEZyb21QdHIocmVmRGV0YWlscy51cmlEZXRhaWxzLmZyYWdtZW50KSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pO1xuICAgICAgICAgICAgICBzZXRWYWx1ZShjbG9uZWQsIHBhdGhGcm9tUHRyKHJlZlB0ciksIHZhbHVlKTtcblxuICAgICAgICAgICAgICAvLyBUaGUgcmVmZXJlbmNlIGluY2x1ZGVzIGEgZnJhZ21lbnQgc28gdXBkYXRlIHRoZSByZWZlcmVuY2UgZGV0YWlsc1xuICAgICAgICAgICAgICBpZiAoIWlzVHlwZShyZWZEZXRhaWxzLnZhbHVlLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICByZWZEZXRhaWxzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmRGV0YWlscy5jaXJjdWxhcikge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHZhbHVlIGFuZCBpdCdzIGNpcmN1bGFyLCBzZXQgaXRzIHZhbHVlIHRvIGFuIGVtcHR5IHZhbHVlXG4gICAgICAgICAgICAgICAgcmVmRGV0YWlscy52YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgcmVmRGV0YWlscy5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICByZWZEZXRhaWxzLm1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWZEZXRhaWxzLm1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlcGxhY2UgbG9jYWwgcmVmZXJlbmNlc1xuICAgICAgT2JqZWN0LmtleXMoYVJlZnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgICAgICB2YXIgcmVmRGV0YWlscyA9IGFSZWZzW3JlZlB0cl07XG4gICAgICAgIHZhciBwYXJlbnRMb2NhdGlvbiA9IHJlZkRldGFpbHMucGFyZW50TG9jYXRpb247XG4gICAgICAgIHZhciB2YWx1ZTtcblxuICAgICAgICAvLyBSZWNvcmQgdGhhdCB0aGlzIHJlZmVyZW5jZSBoYXMgcGFyZW50IGxvY2F0aW9uIGRldGFpbHMgc28gd2UgY2FuIGNsZWFuIGl0IHVwIGxhdGVyXG4gICAgICAgIGlmICghaXNUeXBlKHBhcmVudExvY2F0aW9uLCAnVW5kZWZpbmVkJykgJiYgcGFyZW50TG9jYXRpb25zLmluZGV4T2YocmVmUHRyKSA9PT0gLTEpIHtcbiAgICAgICAgICBwYXJlbnRMb2NhdGlvbnMucHVzaChyZWZQdHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbW90ZVR5cGVzLmluZGV4T2YocmVmRGV0YWlscy50eXBlKSA9PT0gLTEgJiYgcmVmRGV0YWlscy50eXBlICE9PSAnaW52YWxpZCcpIHtcbiAgICAgICAgICBpZiAoaXNUeXBlKHJlZkRldGFpbHMuZXJyb3IsICdVbmRlZmluZWQnKSkge1xuICAgICAgICAgICAgaWYgKHJlZlB0ci5pbmRleE9mKHJlZkRldGFpbHMudXJpKSA+IC0xKSB7XG4gICAgICAgICAgICAgIHJlZkRldGFpbHMuY2lyY3VsYXIgPSB0cnVlO1xuICAgICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCFpc1R5cGUocGFyZW50TG9jYXRpb24sICdVbmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSByZWZlcmVuY2VkIHZhbHVlIGZyb20gdGhlIHJlbW90ZSBkb2N1bWVudCBmaXJzdFxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmluZFZhbHVlKGZpbmRWYWx1ZShjbG9uZWQsIHBhdGhGcm9tUHRyKHBhcmVudExvY2F0aW9uKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmRGV0YWlscy51cmlEZXRhaWxzLmZyYWdtZW50ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhGcm9tUHRyKHJlZkRldGFpbHMudXJpRGV0YWlscy5mcmFnbWVudCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10sIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChpc1R5cGUodmFsdWUsICdVbmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZmluZFZhbHVlKGNsb25lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZEZXRhaWxzLnVyaURldGFpbHMuZnJhZ21lbnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhGcm9tUHRyKHJlZkRldGFpbHMudXJpRGV0YWlscy5mcmFnbWVudCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2V0VmFsdWUoY2xvbmVkLCBwYXRoRnJvbVB0cihyZWZQdHIpLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgcmVmRGV0YWlscy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIHJlZkRldGFpbHMuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgcmVmRGV0YWlscy5taXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVmRGV0YWlscy5taXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBSZW1vdmUgYWxsIHBhcmVudExvY2F0aW9uIHZhbHVlc1xuICAgICAgcGFyZW50TG9jYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgICAgICBkZWxldGUgYVJlZnNbcmVmUHRyXS5wYXJlbnRMb2NhdGlvbjtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWZzOiBhUmVmcyxcbiAgICAgICAgcmVzb2x2ZWQ6IGNsb25lZFxuICAgICAgfTtcbiAgICB9KTtcblxuICByZXR1cm4gYWxsVGFza3M7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgSlNPTiBSZWZlcmVuY2VzIGRlZmluZWQgd2l0aGluIHRoZSBkb2N1bWVudCBhdCB0aGUgcHJvdmlkZWQgbG9jYXRpb24uXG4gKlxuICogVGhpcyBBUEkgaXMgaWRlbnRpY2FsIHRvIHtAbGluayBtb2R1bGU6SnNvblJlZnMucmVzb2x2ZVJlZnN9IGV4Y2VwdCB0aGlzIEFQSSB3aWxsIHJldHJpZXZlIGEgcmVtb3RlIGRvY3VtZW50IGFuZCB0aGVuXG4gKiByZXR1cm4gdGhlIHJlc3VsdCBvZiB7QGxpbmsgbW9kdWxlOkpzb25SZWZzLnJlc29sdmVSZWZzfSBvbiB0aGUgcmV0cmlldmVkIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiAtIFRoZSBsb2NhdGlvbiB0byByZXRyaWV2ZSAqKENhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSwganVzdCBtYWtlIHN1cmUgeW91IGxvb2sgYXQgdGhlXG4gKiB7QGxpbmsgbW9kdWxlOkpzb25SZWZzfkpzb25SZWZzT3B0aW9uc3xvcHRpb25zIGRvY3VtZW50YXRpb259IHRvIHNlZSBob3cgcmVsYXRpdmUgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZC4pKlxuICogQHBhcmFtIHttb2R1bGU6SnNvblJlZnN+SnNvblJlZnNPcHRpb25zfSBbb3B0aW9uc10gLSBUaGUgSnNvblJlZnMgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhIHtAbGluayBtb2R1bGU6SnNvblJlZnN+UmV0cmlldmVkUmVzb2x2ZWRSZWZzUmVzdWx0c30gYW5kIHJlamVjdHMgd2l0aCBhblxuICogYEVycm9yYCB3aGVuIHRoZSBpbnB1dCBhcmd1bWVudHMgZmFpbCB2YWxpZGF0aW9uLCB3aGVuIGBvcHRpb25zLnN1YkRvY1BhdGhgIHBvaW50cyB0byBhbiBpbnZhbGlkIGxvY2F0aW9uIG9yIHdoZW5cbiAqICB0aGUgbG9jYXRpb24gYXJndW1lbnQgcG9pbnRzIHRvIGFuIHVubG9hZGFibGUgcmVzb3VyY2VcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLnJlc29sdmVSZWZzQXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSB0aGF0IGxvYWRzIGEgSlNPTiBkb2N1bWVudCAoTm8gb3B0aW9ucy5sb2FkZXJPcHRpb25zLnByb2Nlc3NDb250ZW50IHJlcXVpcmVkKSBhbmQgcmVzb2x2ZXMgYWxsIHJlZmVyZW5jZXNcbiAqIEpzb25SZWZzLnJlc29sdmVSZWZzQXQoJy4vc3dhZ2dlci5qc29uJylcbiAqICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICogICAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzcG9uc2VcbiAqICAgICAgLy9cbiAqICAgICAgLy8gcmVzLnJlZnM6IEpTT04gUmVmZXJlbmNlIGxvY2F0aW9ucyBhbmQgZGV0YWlsc1xuICogICAgICAvLyByZXMucmVzb2x2ZWQ6IFRoZSBkb2N1bWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBKU09OIFJlZmVyZW5jZXMgcmVzb2x2ZWRcbiAqICAgICAgLy8gcmVzLnZhbHVlOiBUaGUgcmV0cmlldmVkIGRvY3VtZW50XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmxvZyhlcnIuc3RhY2spO1xuICogICB9KTtcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlZnNBdCAobG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgYWxsVGFza3MgPSBhbGxUYXNrc1xuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjT3B0aW9ucztcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAgICBpZiAoIWlzVHlwZShsb2NhdGlvbiwgJ1N0cmluZycpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2xvY2F0aW9uIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRlZmF1bHQgZm9yIG9wdGlvbnNcbiAgICAgIGlmIChpc1R5cGUob3B0aW9ucywgJ1VuZGVmaW5lZCcpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgb3B0aW9ucyAoRG9pbmcgdGhpcyBoZXJlIGZvciBhIHF1aWNrKVxuICAgICAgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICBjT3B0aW9ucyA9IGNsb25lKG9wdGlvbnMpO1xuXG4gICAgICAvLyBDb21iaW5lIHRoZSBsb2NhdGlvbiBhbmQgdGhlIG9wdGlvbmFsIHJlbGF0aXZlIGJhc2VcbiAgICAgIGxvY2F0aW9uID0gY29tYmluZVVSSXMob3B0aW9ucy5yZWxhdGl2ZUJhc2UsIGxvY2F0aW9uKTtcblxuICAgICAgLy8gU2V0IHRoZSBuZXcgcmVsYXRpdmUgcmVmZXJlbmNlIGxvY2F0aW9uXG4gICAgICBjT3B0aW9ucy5yZWxhdGl2ZUJhc2UgPSBsb2NhdGlvbi5zdWJzdHJpbmcoMCwgbG9jYXRpb24ubGFzdEluZGV4T2YoJy8nKSk7XG5cbiAgICAgIHJldHVybiBnZXRSZW1vdGVEb2N1bWVudChsb2NhdGlvbiwgY09wdGlvbnMpO1xuICAgIH0pXG4gICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgcmV0dXJuIHJlc29sdmVSZWZzKHJlcywgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlczIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVmczogcmVzMi5yZWZzLFxuICAgICAgICAgICAgcmVzb2x2ZWQ6IHJlczIucmVzb2x2ZWQsXG4gICAgICAgICAgICB2YWx1ZTogcmVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGFsbFRhc2tzO1xufVxuXG4vKiBFeHBvcnQgdGhlIG1vZHVsZSBtZW1iZXJzICovXG5tb2R1bGUuZXhwb3J0cy5jbGVhckNhY2hlID0gY2xlYXJDYWNoZTtcbm1vZHVsZS5leHBvcnRzLmRlY29kZVBhdGggPSBkZWNvZGVQYXRoO1xubW9kdWxlLmV4cG9ydHMuZW5jb2RlUGF0aCA9IGVuY29kZVBhdGg7XG5tb2R1bGUuZXhwb3J0cy5maW5kUmVmcyA9IGZpbmRSZWZzO1xubW9kdWxlLmV4cG9ydHMuZmluZFJlZnNBdCA9IGZpbmRSZWZzQXQ7XG5tb2R1bGUuZXhwb3J0cy5nZXRSZWZEZXRhaWxzID0gZ2V0UmVmRGV0YWlscztcbm1vZHVsZS5leHBvcnRzLmlzUHRyID0gaXNQdHI7XG5tb2R1bGUuZXhwb3J0cy5pc1JlZiA9IGlzUmVmO1xubW9kdWxlLmV4cG9ydHMucGF0aEZyb21QdHIgPSBwYXRoRnJvbVB0cjtcbm1vZHVsZS5leHBvcnRzLnBhdGhUb1B0ciA9IHBhdGhUb1B0cjtcbm1vZHVsZS5leHBvcnRzLnJlc29sdmVSZWZzID0gcmVzb2x2ZVJlZnM7XG5tb2R1bGUuZXhwb3J0cy5yZXNvbHZlUmVmc0F0ID0gcmVzb2x2ZVJlZnNBdDtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuL3V0aWwvY29udGFpbmVyJyksXHJcbiAgICB0cmF2ZXJzZSA9IHJlcXVpcmUoJy4vdXRpbC90cmF2ZXJzZScpLFxyXG4gICAgZm9ybWF0cyA9IHJlcXVpcmUoJy4vdXRpbC9mb3JtYXRzJyksXHJcbiAgICByYW5kb20gPSByZXF1aXJlKCcuL3V0aWwvcmFuZG9tJyksXHJcbiAgICBtZXJnZSA9IHJlcXVpcmUoJy4vdXRpbC9tZXJnZScpO1xyXG5cclxudmFyIGRlcmVmID0gcmVxdWlyZSgnZGVyZWYnKTtcclxuXHJcbmZ1bmN0aW9uIGlzS2V5KHByb3ApIHtcclxuICByZXR1cm4gcHJvcCA9PT0gJ2VudW0nIHx8IHByb3AgPT09ICdyZXF1aXJlZCcgfHwgcHJvcCA9PT0gJ2RlZmluaXRpb25zJztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGUoc2NoZW1hLCByZWZzLCBleCkge1xyXG4gIHZhciAkID0gZGVyZWYoKTtcclxuXHJcbiAgdHJ5IHtcclxuICAgIHZhciBtYXggPSAxMDA7XHJcblxyXG4gICAgcmV0dXJuIHRyYXZlcnNlKCQoc2NoZW1hLCByZWZzLCBleCksIFtdLCBmdW5jdGlvbiByZWR1Y2Uoc3ViKSB7XHJcbiAgICAgIGlmICghbWF4KSB7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi4kcmVmO1xyXG4gICAgICAgIGRlbGV0ZSBzdWIub25lT2Y7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi5hbnlPZjtcclxuICAgICAgICBkZWxldGUgc3ViLmFsbE9mO1xyXG4gICAgICAgIHJldHVybiBzdWI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygc3ViLiRyZWYgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdmFyIGlkID0gc3ViLiRyZWY7XHJcblxyXG4gICAgICAgIGRlbGV0ZSBzdWIuJHJlZjtcclxuXHJcbiAgICAgICAgbWF4LS07XHJcblxyXG4gICAgICAgIG1lcmdlKHN1YiwgJC51dGlsLmZpbmRCeVJlZihpZCwgJC5yZWZzKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1Yi5hbGxPZikpIHtcclxuICAgICAgICB2YXIgc2NoZW1hcyA9IHN1Yi5hbGxPZjtcclxuXHJcbiAgICAgICAgZGVsZXRlIHN1Yi5hbGxPZjtcclxuXHJcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgb25seSBjYXNlIHdoZXJlIGFsbCBzdWItc2NoZW1hc1xyXG4gICAgICAgIC8vIG11c3QgYmUgcmVzb2x2ZWQgYmVmb3JlIGFueSBtZXJnZVxyXG4gICAgICAgIHNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgICBtZXJnZShzdWIsIHJlZHVjZShzKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1Yi5vbmVPZiB8fCBzdWIuYW55T2YpKSB7XHJcbiAgICAgICAgdmFyIG1peCA9IHN1Yi5vbmVPZiB8fCBzdWIuYW55T2Y7XHJcblxyXG4gICAgICAgIGRlbGV0ZSBzdWIuYW55T2Y7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi5vbmVPZjtcclxuXHJcbiAgICAgICAgbWVyZ2Uoc3ViLCByYW5kb20ucGljayhtaXgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yICh2YXIgcHJvcCBpbiBzdWIpIHtcclxuICAgICAgICBpZiAoKEFycmF5LmlzQXJyYXkoc3ViW3Byb3BdKSB8fCB0eXBlb2Ygc3ViW3Byb3BdID09PSAnb2JqZWN0JykgJiYgIWlzS2V5KHByb3ApKSB7XHJcbiAgICAgICAgICBzdWJbcHJvcF0gPSByZWR1Y2Uoc3ViW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzdWI7XHJcbiAgICB9KTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBpZiAoZS5wYXRoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UgKyAnIGluICcgKyAnLycgKyBlLnBhdGguam9pbignLycpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5nZW5lcmF0ZS5mb3JtYXRzID0gZm9ybWF0cztcclxuZ2VuZXJhdGUuZXh0ZW5kID0gY29udGFpbmVyLnNldDtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGU7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciByYW5kb20gPSByZXF1aXJlKCcuLi91dGlsL3JhbmRvbScpLFxyXG4gICAgdHJhdmVyc2UgPSByZXF1aXJlKCcuLi91dGlsL3RyYXZlcnNlJyksXHJcbiAgICBoYXNQcm9wcyA9IHJlcXVpcmUoJy4uL3V0aWwvaGFzLXByb3BzJyk7XHJcblxyXG52YXIgUGFyc2VFcnJvciA9IHJlcXVpcmUoJy4uL3V0aWwvZXJyb3InKTtcclxuXHJcbmZ1bmN0aW9uIHVuaXF1ZShwYXRoLCBpdGVtcywgdmFsdWUsIHNhbXBsZSwgcmVzb2x2ZSkge1xyXG4gIHZhciB0bXAgPSBbXSxcclxuICAgICAgc2VlbiA9IFtdO1xyXG5cclxuICBmdW5jdGlvbiB3YWxrKG9iaikge1xyXG4gICAgdmFyIGpzb24gPSBKU09OLnN0cmluZ2lmeShvYmopO1xyXG5cclxuICAgIGlmIChzZWVuLmluZGV4T2YoanNvbikgPT09IC0xKSB7XHJcbiAgICAgIHNlZW4ucHVzaChqc29uKTtcclxuICAgICAgdG1wLnB1c2gob2JqKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGl0ZW1zLmZvckVhY2god2Fsayk7XHJcblxyXG4gIC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgc29sdXRpb24/XHJcbiAgdmFyIGxpbWl0ID0gMTAwO1xyXG5cclxuICB3aGlsZSAodG1wLmxlbmd0aCAhPT0gaXRlbXMubGVuZ3RoKSB7XHJcbiAgICB3YWxrKHRyYXZlcnNlKHZhbHVlLml0ZW1zIHx8IHNhbXBsZSwgcGF0aCwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIGlmICghbGltaXQtLSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB0bXA7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsdWUsIHBhdGgsIHJlc29sdmUpIHtcclxuICB2YXIgaXRlbXMgPSBbXTtcclxuXHJcbiAgaWYgKCEodmFsdWUuaXRlbXMgfHwgdmFsdWUuYWRkaXRpb25hbEl0ZW1zKSkge1xyXG4gICAgaWYgKGhhc1Byb3BzKHZhbHVlLCAnbWluSXRlbXMnLCAnbWF4SXRlbXMnLCAndW5pcXVlSXRlbXMnKSkge1xyXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcignbWlzc2luZyBpdGVtcyBmb3IgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgcGF0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuaXRlbXMpKSB7XHJcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShpdGVtcywgdmFsdWUuaXRlbXMubWFwKGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xyXG4gICAgICByZXR1cm4gdHJhdmVyc2UoaXRlbSwgcGF0aC5jb25jYXQoWydpdGVtcycsIGtleV0pLCByZXNvbHZlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHZhciBsZW5ndGggPSByYW5kb20odmFsdWUubWluSXRlbXMsIHZhbHVlLm1heEl0ZW1zLCAxLCA1KSxcclxuICAgICAgc2FtcGxlID0gdHlwZW9mIHZhbHVlLmFkZGl0aW9uYWxJdGVtcyA9PT0gJ29iamVjdCcgPyB2YWx1ZS5hZGRpdGlvbmFsSXRlbXMgOiB7fTtcclxuXHJcbiAgZm9yICh2YXIgY3VycmVudCA9IGl0ZW1zLmxlbmd0aDsgY3VycmVudCA8IGxlbmd0aDsgY3VycmVudCArPSAxKSB7XHJcbiAgICBpdGVtcy5wdXNoKHRyYXZlcnNlKHZhbHVlLml0ZW1zIHx8IHNhbXBsZSwgcGF0aC5jb25jYXQoWydpdGVtcycsIGN1cnJlbnRdKSwgcmVzb2x2ZSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLnVuaXF1ZUl0ZW1zKSB7XHJcbiAgICByZXR1cm4gdW5pcXVlKHBhdGguY29uY2F0KFsnaXRlbXMnXSksIGl0ZW1zLCB2YWx1ZSwgc2FtcGxlLCByZXNvbHZlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBpdGVtcztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gTWF0aC5yYW5kb20oKSA+IDAuNTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIG51bWJlciA9IHJlcXVpcmUoJy4vbnVtYmVyJyk7XHJcblxyXG4vLyBUaGUgYGludGVnZXJgIHR5cGUgaXMganVzdCBhIHdyYXBwZXIgZm9yIHRoZSBgbnVtYmVyYCB0eXBlLiBUaGUgYG51bWJlcmAgdHlwZVxyXG4vLyByZXR1cm5zIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGFuZCBgaW50ZWdlcmAgdHlwZSB0cnVuY2F0ZXMgdGhlIGZyYWN0aW9uXHJcbi8vIHBhcnQsIGxlYXZpbmcgdGhlIHJlc3VsdCBhcyBhbiBpbnRlZ2VyLlxyXG4vL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgdmFsdWUuaGFzUHJlY2lzaW9uID0gZmFsc2U7XHJcbiAgdmFyIGdlbmVyYXRlZCA9IG51bWJlcih2YWx1ZSk7XHJcbiAgLy8gd2hldGhlciB0aGUgZ2VuZXJhdGVkIG51bWJlciBpcyBwb3NpdGl2ZSBvciBuZWdhdGl2ZSwgbmVlZCB0byB1c2UgZWl0aGVyXHJcbiAgLy8gZmxvb3IgKHBvc2l0aXZlKSBvciBjZWlsIChuZWdhdGl2ZSkgZnVuY3Rpb24gdG8gZ2V0IHJpZCBvZiB0aGUgZnJhY3Rpb25cclxuICByZXR1cm4gZ2VuZXJhdGVkID4gMCA/IE1hdGguZmxvb3IoZ2VuZXJhdGVkKSA6IE1hdGguY2VpbChnZW5lcmF0ZWQpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiBudWxsO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTUlOX0lOVEVHRVIgPSAtMTAwMDAwMDAwLFxyXG4gICAgTUFYX0lOVEVHRVIgPSAxMDAwMDAwMDA7XHJcblxyXG52YXIgc3RyaW5nID0gcmVxdWlyZSgnLi9zdHJpbmcnKSxcclxuICAgIHJhbmRvbSA9IHJlcXVpcmUoJy4uL3V0aWwvcmFuZG9tJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgaWYgKHZhbHVlLmZha2VyIHx8IHZhbHVlLmNoYW5jZSkge1xyXG4gICAgcmV0dXJuIHN0cmluZyh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICB2YXIgbWluID0gdHlwZW9mIHZhbHVlLm1pbmltdW0gPT09ICd1bmRlZmluZWQnID8gTUlOX0lOVEVHRVIgOiB2YWx1ZS5taW5pbXVtLFxyXG4gICAgICBtYXggPSB0eXBlb2YgdmFsdWUubWF4aW11bSA9PT0gJ3VuZGVmaW5lZCcgPyBNQVhfSU5URUdFUiA6IHZhbHVlLm1heGltdW07XHJcblxyXG4gIGlmICh2YWx1ZS5leGNsdXNpdmVNaW5pbXVtICYmIHZhbHVlLm1pbmltdW0pIHtcclxuICAgIG1pbiArPSAxO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLmV4Y2x1c2l2ZU1heGltdW0gJiYgdmFsdWUubWF4aW11bSkge1xyXG4gICAgbWF4IC09IDE7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUubXVsdGlwbGVPZikge1xyXG4gICAgdmFyIGJhc2UgPSByYW5kb20oTWF0aC5mbG9vcihtaW4gLyB2YWx1ZS5tdWx0aXBsZU9mKSwgTWF0aC5mbG9vcihtYXggLyB2YWx1ZS5tdWx0aXBsZU9mKSkgKiB2YWx1ZS5tdWx0aXBsZU9mO1xyXG5cclxuICAgIHdoaWxlIChiYXNlIDwgbWluKSB7XHJcbiAgICAgIGJhc2UgKz0gdmFsdWUubXVsdGlwbGVPZjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYmFzZTtcclxuICB9XHJcblxyXG4gIGlmICh2YWx1ZS5oYXNQcmVjaXNpb24pIHtcclxuICAgIHJldHVybiByYW5kb20oZmFsc2UsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIHJldHVybiByYW5kb20oTWF0aC5yYW5kb20oKSA+IDAuNSwgbWluLCBtYXgpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgY29udGFpbmVyID0gcmVxdWlyZSgnLi4vdXRpbC9jb250YWluZXInKSxcclxuICAgIHJhbmRvbSA9IHJlcXVpcmUoJy4uL3V0aWwvcmFuZG9tJyksXHJcbiAgICB0cmF2ZXJzZSA9IHJlcXVpcmUoJy4uL3V0aWwvdHJhdmVyc2UnKSxcclxuICAgIGhhc1Byb3BzID0gcmVxdWlyZSgnLi4vdXRpbC9oYXMtcHJvcHMnKTtcclxuXHJcbnZhciBmYWtlciA9IGNvbnRhaW5lci5nZXQoJ2Zha2VyJyksXHJcbiAgICBSYW5kRXhwID0gY29udGFpbmVyLmdldCgncmFuZGV4cCcpLFxyXG4gICAgcmFuZGV4cCA9IFJhbmRFeHAucmFuZGV4cDtcclxuXHJcbnZhciBQYXJzZUVycm9yID0gcmVxdWlyZSgnLi4vdXRpbC9lcnJvcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWx1ZSwgcGF0aCwgcmVzb2x2ZSkge1xyXG4gIHZhciBwcm9wcyA9IHt9O1xyXG5cclxuICBpZiAoISh2YWx1ZS5wcm9wZXJ0aWVzIHx8IHZhbHVlLnBhdHRlcm5Qcm9wZXJ0aWVzIHx8IHZhbHVlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSkge1xyXG4gICAgaWYgKGhhc1Byb3BzKHZhbHVlLCAnbWluUHJvcGVydGllcycsICdtYXhQcm9wZXJ0aWVzJywgJ2RlcGVuZGVuY2llcycsICdyZXF1aXJlZCcpKSB7XHJcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKCdtaXNzaW5nIHByb3BlcnRpZXMgZm9yICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSksIHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wcztcclxuICB9XHJcblxyXG4gIHZhciByZXFQcm9wcyA9IHZhbHVlLnJlcXVpcmVkIHx8IFtdLFxyXG4gICAgICBhbGxQcm9wcyA9IHZhbHVlLnByb3BlcnRpZXMgPyBPYmplY3Qua2V5cyh2YWx1ZS5wcm9wZXJ0aWVzKSA6IFtdO1xyXG5cclxuICByZXFQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgaWYgKHZhbHVlLnByb3BlcnRpZXMgJiYgdmFsdWUucHJvcGVydGllc1trZXldKSB7XHJcbiAgICAgIHByb3BzW2tleV0gPSB2YWx1ZS5wcm9wZXJ0aWVzW2tleV07XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHZhciBvcHRQcm9wcyA9IGFsbFByb3BzLmZpbHRlcihmdW5jdGlvbihwcm9wKSB7XHJcbiAgICByZXR1cm4gcmVxUHJvcHMuaW5kZXhPZihwcm9wKSA9PT0gLTE7XHJcbiAgfSk7XHJcblxyXG4gIGlmICh2YWx1ZS5wYXR0ZXJuUHJvcGVydGllcykge1xyXG4gICAgb3B0UHJvcHMgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KG9wdFByb3BzLCBPYmplY3Qua2V5cyh2YWx1ZS5wYXR0ZXJuUHJvcGVydGllcykpO1xyXG4gIH1cclxuXHJcbiAgdmFyIGxlbmd0aCA9IHJhbmRvbSh2YWx1ZS5taW5Qcm9wZXJ0aWVzLCB2YWx1ZS5tYXhQcm9wZXJ0aWVzLCAwLCBvcHRQcm9wcy5sZW5ndGgpO1xyXG5cclxuICByYW5kb20uc2h1ZmZsZShvcHRQcm9wcykuc2xpY2UoMCwgbGVuZ3RoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgaWYgKHZhbHVlLnByb3BlcnRpZXMgJiYgdmFsdWUucHJvcGVydGllc1trZXldKSB7XHJcbiAgICAgIHByb3BzW2tleV0gPSB2YWx1ZS5wcm9wZXJ0aWVzW2tleV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcm9wc1tyYW5kZXhwKGtleSldID0gdmFsdWUucGF0dGVyblByb3BlcnRpZXNba2V5XTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdmFyIGN1cnJlbnQgPSBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoLFxyXG4gICAgICBzYW1wbGUgPSB0eXBlb2YgdmFsdWUuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09ICdvYmplY3QnID8gdmFsdWUuYWRkaXRpb25hbFByb3BlcnRpZXMgOiB7fTtcclxuXHJcbiAgaWYgKGN1cnJlbnQgPCBsZW5ndGgpIHtcclxuICAgIGZha2VyLmxvcmVtLndvcmRzKGxlbmd0aCAtIGN1cnJlbnQpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgIHByb3BzW2tleSArIHJhbmRleHAoJ1xcXFx3ezEsMTB9JyldID0gc2FtcGxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJhdmVyc2UocHJvcHMsIHBhdGguY29uY2F0KFsncHJvcGVydGllcyddKSwgcmVzb2x2ZSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuLi91dGlsL2NvbnRhaW5lcicpO1xyXG5cclxudmFyIGZha2VyID0gY29udGFpbmVyLmdldCgnZmFrZXInKSxcclxuICAgIGNoYW5jZSA9IGNvbnRhaW5lci5nZXQoJ2NoYW5jZScpLFxyXG4gICAgUmFuZEV4cCA9IGNvbnRhaW5lci5nZXQoJ3JhbmRleHAnKSxcclxuICAgIHJhbmRleHAgPSBSYW5kRXhwLnJhbmRleHA7XHJcblxyXG52YXIgcmFuZG9tID0gcmVxdWlyZSgnLi4vdXRpbC9yYW5kb20nKSxcclxuICAgIGZvcm1hdHMgPSByZXF1aXJlKCcuLi91dGlsL2Zvcm1hdHMnKTtcclxuXHJcbnZhciByZWdleHBzID0ge1xyXG4gIGVtYWlsOiAnW2EtekEtWlxcXFxkXVthLXpBLVpcXFxcZC1dezEsMTN9W2EtekEtWlxcXFxkXUB7aG9zdG5hbWV9JyxcclxuICBob3N0bmFtZTogJ1thLXpBLVpdezEsMzN9XFxcXC5bYS16XXsyLDR9JyxcclxuICBpcHY2OiAnW2FiY2RlZlxcXFxkXXs0fSg6W2FiY2RlZlxcXFxkXXs0fSl7N30nLFxyXG4gIHVyaTogJ1thLXpBLVpdW2EtekEtWjAtOSstLl0qJ1xyXG59O1xyXG5cclxuZnVuY3Rpb24gZ2V0KG9iaiwga2V5KSB7XHJcbiAgdmFyIHBhcnRzID0ga2V5LnNwbGl0KCcuJyk7XHJcblxyXG4gIHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcclxuICAgIHZhciBwcm9wID0gcGFydHMuc2hpZnQoKTtcclxuXHJcbiAgICBpZiAoIW9ialtwcm9wXSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBvYmogPSBvYmpbcHJvcF07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZSh2YWx1ZSkge1xyXG4gIGlmICh2YWx1ZS51c2UpIHtcclxuICAgIHZhciBhcmdzID0gW10sXHJcbiAgICAgICAgcGF0aCA9IHZhbHVlLmtleTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHBhdGggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHBhdGggPSBPYmplY3Qua2V5cyhwYXRoKVswXTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmtleVtwYXRoXSkpIHtcclxuICAgICAgICBhcmdzID0gdmFsdWUua2V5W3BhdGhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFyZ3MucHVzaCh2YWx1ZS5rZXlbcGF0aF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGdlbiA9IGdldCh2YWx1ZS5nZW4sIHBhdGgpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgZ2VuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biAnICsgdmFsdWUudXNlICsgJy1nZW5lcmF0b3IgZm9yICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZS5rZXkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ2VuLmFwcGx5KHZhbHVlLmdlbiwgYXJncyk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2ggKHZhbHVlLmZvcm1hdCkge1xyXG4gICAgY2FzZSAnZGF0ZS10aW1lJzpcclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHJhbmRvbSgwLCAxMDAwMDAwMDAwMDAwMDApKS50b0lTT1N0cmluZygpO1xyXG5cclxuICAgIGNhc2UgJ2VtYWlsJzpcclxuICAgIGNhc2UgJ2hvc3RuYW1lJzpcclxuICAgIGNhc2UgJ2lwdjYnOlxyXG4gICAgY2FzZSAndXJpJzpcclxuICAgICAgcmV0dXJuIHJhbmRleHAocmVnZXhwc1t2YWx1ZS5mb3JtYXRdKS5yZXBsYWNlKC9cXHsoXFx3KylcXH0vLCBmdW5jdGlvbihtYXRjaGVzLCBrZXkpIHtcclxuICAgICAgICByZXR1cm4gcmFuZGV4cChyZWdleHBzW2tleV0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjYXNlICdpcHY0JzpcclxuICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXS5tYXAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHJhbmRvbSgwLCAyNTUpO1xyXG4gICAgICB9KS5qb2luKCcuJyk7XHJcblxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgdmFyIGNhbGxiYWNrID0gZm9ybWF0cyh2YWx1ZS5mb3JtYXQpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBnZW5lcmF0b3IgZm9yICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZS5mb3JtYXQpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGdlbmVyYXRvcnMgPSB7XHJcbiAgICAgICAgZmFrZXI6IGZha2VyLFxyXG4gICAgICAgIGNoYW5jZTogY2hhbmNlLFxyXG4gICAgICAgIHJhbmRleHA6IHJhbmRleHBcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiBjYWxsYmFjayhnZW5lcmF0b3JzLCB2YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgaWYgKHZhbHVlLmZha2VyIHx8IHZhbHVlLmNoYW5jZSkge1xyXG4gICAgcmV0dXJuIGdlbmVyYXRlKHtcclxuICAgICAgdXNlOiB2YWx1ZS5mYWtlciA/ICdmYWtlcicgOiAnY2hhbmNlJyxcclxuICAgICAgZ2VuOiB2YWx1ZS5mYWtlciA/IGZha2VyIDogY2hhbmNlLFxyXG4gICAgICBrZXk6IHZhbHVlLmZha2VyIHx8IHZhbHVlLmNoYW5jZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUuZm9ybWF0KSB7XHJcbiAgICByZXR1cm4gZ2VuZXJhdGUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLnBhdHRlcm4pIHtcclxuICAgIHJldHVybiByYW5kZXhwKHZhbHVlLnBhdHRlcm4pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLm1pbkxlbmd0aCB8fCB2YWx1ZS5tYXhMZW5ndGgpIHtcclxuICAgIHZhciBtaW4gPSBNYXRoLm1heCgwLCB2YWx1ZS5taW5MZW5ndGggfHwgMCksXHJcbiAgICAgICAgbWF4ID0gcmFuZG9tKG1pbiwgdmFsdWUubWF4TGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gcmFuZGV4cCgnLnsnICsgbWluICsgJywnICsgbWF4ICsgJ30nKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmYWtlci5sb3JlbS53b3JkcyhyYW5kb20oMSwgNSkpLmpvaW4oJyAnKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy8gc3RhdGljIHJlcXVpcmVzIC0gaGFuZGxlIGJvdGggaW5pdGlhbCBkZXBlbmRlbmN5IGxvYWQgKGRlcHMgd2lsbCBiZSBhdmFpbGFibGVcclxuLy8gYW1vbmcgb3RoZXIgbW9kdWxlcykgYXMgd2VsbCBhcyB0aGV5IHdpbGwgYmUgaW5jbHVkZWQgYnkgYnJvd3NlcmlmeSBBU1RcclxudmFyIENoYW5jZSA9IHJlcXVpcmUoJ2NoYW5jZScpO1xyXG5cclxudmFyIGNvbnRhaW5lciA9IHtcclxuICBmYWtlcjogcmVxdWlyZSgnZmFrZXInKSxcclxuICBjaGFuY2U6IG5ldyBDaGFuY2UoKSxcclxuICByYW5kZXhwOiByZXF1aXJlKCdyYW5kZXhwJylcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIHNldDogZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcclxuICAgIGlmICh0eXBlb2YgY29udGFpbmVyW25hbWVdID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1wiJyArIG5hbWUgKyAnXCIgZGVwZW5kZW5jeSBkb2VzblxcJ3QgZXhpc3QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGFpbmVyW25hbWVdID0gY2FsbGJhY2soY29udGFpbmVyW25hbWVdKTtcclxuICB9LFxyXG4gIGdldDogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIGNvbnRhaW5lcltuYW1lXTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmZ1bmN0aW9uIFBhcnNlRXJyb3IobWVzc2FnZSwgcGF0aCkge1xyXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgdGhpcy5wYXRoID0gcGF0aDtcclxuICB0aGlzLm5hbWUgPSAnUGFyc2VFcnJvcic7XHJcbn1cclxuXHJcblBhcnNlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZUVycm9yO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgcmVnaXN0cnkgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcclxuICBpZiAoY2FsbGJhY2spIHtcclxuICAgIHJlZ2lzdHJ5W25hbWVdID0gY2FsbGJhY2s7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcclxuICAgIGZvciAodmFyIG1ldGhvZCBpbiBuYW1lKSB7XHJcbiAgICAgIHJlZ2lzdHJ5W21ldGhvZF0gPSBuYW1lW21ldGhvZF07XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChuYW1lKSB7XHJcbiAgICByZXR1cm4gcmVnaXN0cnlbbmFtZV07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVnaXN0cnk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkuZmlsdGVyKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBvYmpba2V5XSAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgfSkubGVuZ3RoID4gMDtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGluZmVycmVkUHJvcGVydGllcyA9IHtcclxuICBhcnJheTogW1xyXG4gICAgJ2FkZGl0aW9uYWxJdGVtcycsXHJcbiAgICAnaXRlbXMnLFxyXG4gICAgJ21heEl0ZW1zJyxcclxuICAgICdtaW5JdGVtcycsXHJcbiAgICAndW5pcXVlSXRlbXMnXHJcbiAgXSxcclxuICBpbnRlZ2VyOiBbXHJcbiAgICAnZXhjbHVzaXZlTWF4aW11bScsXHJcbiAgICAnZXhjbHVzaXZlTWluaW11bScsXHJcbiAgICAnbWF4aW11bScsXHJcbiAgICAnbWluaW11bScsXHJcbiAgICAnbXVsdGlwbGVPZidcclxuICBdLFxyXG4gIG9iamVjdDogW1xyXG4gICAgJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyxcclxuICAgICdkZXBlbmRlbmNpZXMnLFxyXG4gICAgJ21heFByb3BlcnRpZXMnLFxyXG4gICAgJ21pblByb3BlcnRpZXMnLFxyXG4gICAgJ3BhdHRlcm5Qcm9wZXJ0aWVzJyxcclxuICAgICdwcm9wZXJ0aWVzJyxcclxuICAgICdyZXF1aXJlZCdcclxuICBdLFxyXG4gIHN0cmluZzogW1xyXG4gICAgJ21heExlbmd0aCcsXHJcbiAgICAnbWVubGVuZ3RoJyxcclxuICAgICdwYXR0ZXJuJ1xyXG4gIF1cclxufTtcclxuXHJcbnZhciBzdWJzY2hlbWFQcm9wZXJ0aWVzID0gW1xyXG4gICdhZGRpdGlvbmFsSXRlbXMnLCAnaXRlbXMnLCAnYWRkaXRpb25hbFByb3BlcnRpZXMnLCAnZGVwZW5kZW5jaWVzJywgJ3BhdHRlcm5Qcm9wZXJ0aWVzJywgJ3Byb3BlcnRpZXMnXHJcbl07XHJcblxyXG5pbmZlcnJlZFByb3BlcnRpZXMubnVtYmVyID0gaW5mZXJyZWRQcm9wZXJ0aWVzLmludGVnZXI7XHJcblxyXG5mdW5jdGlvbiBtYXlIYXZlVHlwZShvYmosIHBhdGgsIHByb3BzKSB7XHJcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKGZ1bmN0aW9uKHByb3ApIHtcclxuICAgIC8vIERvIG5vdCBhdHRlbXB0IHRvIGluZmVyIHByb3BlcnRpZXMgbmFtZWQgYXMgc3Vic2NoZW1hIGNvbnRhaW5lcnMuICBUaGUgcmVhc29uIGZvciB0aGlzIGlzXHJcbiAgICAvLyB0aGF0IGFueSBwcm9wZXJ0eSBuYW1lIHdpdGhpbiB0aG9zZSBjb250YWluZXJzIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlIHByb3BlcnRpZXMgdXNlZCBmb3IgaW5mZXJyaW5nIG1pc3NpbmcgdHlwZVxyXG4gICAgLy8gdmFsdWVzIGNhdXNlcyB0aGUgY29udGFpbmVyIGl0c2VsZiB0byBnZXQgcHJvY2Vzc2VkIHdoaWNoIGxlYWRzIHRvIGludmFsaWQgb3V0cHV0LiAgKElzc3VlIDYyKVxyXG4gICAgaWYgKHByb3BzLmluZGV4T2YocHJvcCkgPiAtMSAmJiBzdWJzY2hlbWFQcm9wZXJ0aWVzLmluZGV4T2YocGF0aFtwYXRoLmxlbmd0aCAtIDFdKSA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfSkubGVuZ3RoID4gMDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcclxuICBmb3IgKHZhciB0eXBlIGluIGluZmVycmVkUHJvcGVydGllcykge1xyXG4gICAgaWYgKG1heUhhdmVUeXBlKG9iaiwgcGF0aCwgaW5mZXJyZWRQcm9wZXJ0aWVzW3R5cGVdKSkge1xyXG4gICAgICByZXR1cm4gdHlwZTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBtZXJnZTtcclxuXHJcbmZ1bmN0aW9uIGNsb25lKGFycikge1xyXG4gIHZhciBvdXQgPSBbXTtcclxuXHJcbiAgYXJyLmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcclxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xyXG4gICAgICBvdXRbaW5kZXhdID0gQXJyYXkuaXNBcnJheShpdGVtKSA/IGNsb25lKGl0ZW0pIDogbWVyZ2Uoe30sIGl0ZW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0W2luZGV4XSA9IGl0ZW07XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbm1lcmdlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgZm9yICh2YXIga2V5IGluIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYltrZXldICE9PSAnb2JqZWN0JyB8fCBiW2tleV0gPT09IG51bGwpIHtcclxuICAgICAgYVtrZXldID0gYltrZXldO1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJba2V5XSkpIHtcclxuICAgICAgYVtrZXldID0gKGFba2V5XSB8fCBbXSkuY29uY2F0KGNsb25lKGJba2V5XSkpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVtrZXldICE9PSAnb2JqZWN0JyB8fCBhW2tleV0gPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShhW2tleV0pKSB7XHJcbiAgICAgIGFba2V5XSA9IG1lcmdlKHt9LCBiW2tleV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYVtrZXldID0gbWVyZ2UoYVtrZXldLCBiW2tleV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGE7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIGFycmF5OiByZXF1aXJlKCcuLi90eXBlcy9hcnJheScpLFxyXG4gIGJvb2xlYW46IHJlcXVpcmUoJy4uL3R5cGVzL2Jvb2xlYW4nKSxcclxuICBpbnRlZ2VyOiByZXF1aXJlKCcuLi90eXBlcy9pbnRlZ2VyJyksXHJcbiAgbnVtYmVyOiByZXF1aXJlKCcuLi90eXBlcy9udW1iZXInKSxcclxuICBudWxsOiByZXF1aXJlKCcuLi90eXBlcy9udWxsJyksXHJcbiAgb2JqZWN0OiByZXF1aXJlKCcuLi90eXBlcy9vYmplY3QnKSxcclxuICBzdHJpbmc6IHJlcXVpcmUoJy4uL3R5cGVzL3N0cmluZycpXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuL2NvbnRhaW5lcicpO1xyXG5cclxudmFyIGZha2VyID0gY29udGFpbmVyLmdldCgnZmFrZXInKTtcclxuXHJcbnZhciByYW5kb20gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1pbiwgbWF4LCBkZWZNaW4sIGRlZk1heCkge1xyXG4gIHZhciBpc0ludGVnZXIgPSB0cnVlO1xyXG5cclxuICBpZiAodHlwZW9mIG1pbiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAvLyBub24taW50ZWdlciB2YWx1ZXNcclxuICAgIGlzSW50ZWdlciA9IG1pbjtcclxuICAgIG1pbiA9IGFyZ3VtZW50c1sxXTtcclxuICAgIG1heCA9IGFyZ3VtZW50c1syXTtcclxuICAgIGRlZk1pbiA9IGFyZ3VtZW50c1szXTtcclxuICAgIGRlZk1heCA9IGFyZ3VtZW50c1s0XTtcclxuICB9XHJcblxyXG4gIGRlZk1pbiA9IHR5cGVvZiBkZWZNaW4gPT09ICd1bmRlZmluZWQnID8gcmFuZG9tLk1JTl9OVU1CRVIgOiBkZWZNaW47XHJcbiAgZGVmTWF4ID0gdHlwZW9mIGRlZk1heCA9PT0gJ3VuZGVmaW5lZCcgPyByYW5kb20uTUFYX05VTUJFUiA6IGRlZk1heDtcclxuXHJcbiAgbWluID0gdHlwZW9mIG1pbiA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZNaW4gOiBtaW47XHJcbiAgbWF4ID0gdHlwZW9mIG1heCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZNYXggOiBtYXg7XHJcblxyXG4gIGlmIChtYXggPCBtaW4pIHtcclxuICAgIG1heCArPSBtaW47XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFrZXIucmFuZG9tLm51bWJlcih7XHJcbiAgICBtaW46IG1pbixcclxuICAgIG1heDogbWF4LFxyXG4gICAgcHJlY2lzaW9uOiBpc0ludGVnZXIgPyAxIDogTWF0aC5yYW5kb20oKVxyXG4gIH0pO1xyXG59O1xyXG5cclxucmFuZG9tLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtcclxuICB2YXIgY29weSA9IG9iai5zbGljZSgpLFxyXG4gICAgICBsZW5ndGggPSBvYmoubGVuZ3RoO1xyXG5cclxuICBmb3IgKDsgbGVuZ3RoID4gMDspIHtcclxuICAgIHZhciBrZXkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsZW5ndGgpLFxyXG4gICAgICAgIHRtcCA9IGNvcHlbLS1sZW5ndGhdO1xyXG5cclxuICAgIGNvcHlbbGVuZ3RoXSA9IGNvcHlba2V5XTtcclxuICAgIGNvcHlba2V5XSA9IHRtcDtcclxuICB9XHJcblxyXG4gIHJldHVybiBjb3B5O1xyXG59O1xyXG5cclxucmFuZG9tLnBpY2sgPSBmdW5jdGlvbihvYmopIHtcclxuICByZXR1cm4gb2JqW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG9iai5sZW5ndGgpXTtcclxufTtcclxuXHJcbnJhbmRvbS5NSU5fTlVNQkVSID0gLTEwMDtcclxucmFuZG9tLk1BWF9OVU1CRVIgPSAxMDA7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciByYW5kb20gPSByZXF1aXJlKCcuL3JhbmRvbScpO1xyXG5cclxudmFyIFBhcnNlRXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XHJcblxyXG52YXIgaW5mZXJyZWRUeXBlID0gcmVxdWlyZSgnLi9pbmZlcnJlZCcpO1xyXG5cclxudmFyIHByaW1pdGl2ZXMgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gdHJhdmVyc2Uob2JqLCBwYXRoLCByZXNvbHZlKSB7XHJcbiAgcmVzb2x2ZShvYmopO1xyXG5cclxuICB2YXIgY29weSA9IHt9O1xyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICBjb3B5ID0gW107XHJcbiAgfVxyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheShvYmouZW51bSkpIHtcclxuICAgIHJldHVybiByYW5kb20ucGljayhvYmouZW51bSk7XHJcbiAgfVxyXG5cclxuICB2YXIgdHlwZSA9IG9iai50eXBlO1xyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xyXG4gICAgdHlwZSA9IHJhbmRvbS5waWNrKHR5cGUpO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAvLyBBdHRlbXB0IHRvIGluZmVyIHRoZSB0eXBlXHJcbiAgICB0eXBlID0gaW5mZXJyZWRUeXBlKG9iaiwgcGF0aCkgfHwgdHlwZTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIGlmICghcHJpbWl0aXZlc1t0eXBlXSkge1xyXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcigndW5rbm93biBwcmltaXRpdmUgJyArIEpTT04uc3RyaW5naWZ5KHR5cGUpLCBwYXRoLmNvbmNhdChbJ3R5cGUnXSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBwcmltaXRpdmVzW3R5cGVdKG9iaiwgcGF0aCwgcmVzb2x2ZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgZS5wYXRoID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGUubWVzc2FnZSwgcGF0aCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmpbcHJvcF0gPT09ICdvYmplY3QnICYmIHByb3AgIT09ICdkZWZpbml0aW9ucycpIHtcclxuICAgICAgY29weVtwcm9wXSA9IHRyYXZlcnNlKG9ialtwcm9wXSwgcGF0aC5jb25jYXQoW3Byb3BdKSwgcmVzb2x2ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb3B5W3Byb3BdID0gb2JqW3Byb3BdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvcHk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgcHJpbWl0aXZlcyA9IHByaW1pdGl2ZXMgfHwgcmVxdWlyZSgnLi9wcmltaXRpdmVzJyk7XHJcblxyXG4gIHJldHVybiB0cmF2ZXJzZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG4iLCIvKipcbiAqIGxvZGFzaCAzLjcuMiAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RyaW5nIHBhdGhzXG4gKiBhbmQgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aEtleV0gVGhlIGtleSByZXByZXNlbnRhdGlvbiBvZiBwYXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCwgcGF0aEtleSkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhdGhLZXkgIT09IHVuZGVmaW5lZCAmJiBwYXRoS2V5IGluIHRvT2JqZWN0KG9iamVjdCkpIHtcbiAgICBwYXRoID0gW3BhdGhLZXldO1xuICB9XG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbcGF0aFtpbmRleCsrXV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gb2JqZWN0IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDogT2JqZWN0KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGUgW2xhbmd1YWdlIHR5cGVdKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDgpIG9mIGBPYmplY3RgLlxuICogKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdCgxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIC8vIEF2b2lkIGEgVjggSklUIGJ1ZyBpbiBDaHJvbWUgMTktMjAuXG4gIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwiLyoqXG4gKiBsb2Rhc2ggMy44LjEgKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2Rlcm4gbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDE1IFRoZSBEb2pvIEZvdW5kYXRpb24gPGh0dHA6Ly9kb2pvZm91bmRhdGlvbi5vcmcvPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIEF2YWlsYWJsZSB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKi9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnbG9kYXNoLmlzYXJyYXknKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxuXFxcXF18XFxcXC4pKj8pXFwyKVxcXS9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGlmIGl0J3Mgbm90IG9uZS4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkXG4gKiBmb3IgYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiAodmFsdWUgKyAnJyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBwcm9wZXJ0eSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9QYXRoKHZhbHVlKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VUb1N0cmluZyh2YWx1ZSkucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1BhdGg7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjcuMCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xudmFyIGJhc2VHZXQgPSByZXF1aXJlKCdsb2Rhc2guX2Jhc2VnZXQnKSxcbiAgICB0b1BhdGggPSByZXF1aXJlKCdsb2Rhc2guX3RvcGF0aCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIGBwYXRoYCBvbiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgdXNlZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBpZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgYHVuZGVmaW5lZGAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCB0b1BhdGgocGF0aCksIHBhdGggKyAnJyk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjAuNCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSA+IDUpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqIFVzZWQgZm9yIG5hdGl2ZSBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmpUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZm5Ub1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZywgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyogTmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0FycmF5ID0gZ2V0TmF0aXZlKEFycmF5LCAnaXNBcnJheScpO1xuXG4vKipcbiAqIFVzZWQgYXMgdGhlIFttYXhpbXVtIGxlbmd0aF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbnVtYmVyLm1heF9zYWZlX2ludGVnZXIpXG4gKiBvZiBhbiBhcnJheS1saWtlIHZhbHVlLlxuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICByZXR1cm4gaXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGFycmF5VGFnO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmkgd2hpY2ggcmV0dXJuICdmdW5jdGlvbicgZm9yIHJlZ2V4ZXNcbiAgLy8gYW5kIFNhZmFyaSA4IGVxdWl2YWxlbnRzIHdoaWNoIHJldHVybiAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgY29uc3RydWN0b3JzLlxuICByZXR1cm4gaXNPYmplY3QodmFsdWUpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGZ1bmNUYWc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlIFtsYW5ndWFnZSB0eXBlXShodHRwczovL2VzNS5naXRodWIuaW8vI3g4KSBvZiBgT2JqZWN0YC5cbiAqIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAvLyBBdm9pZCBhIFY4IEpJVCBidWcgaW4gQ2hyb21lIDE5LTIwLlxuICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIyOTEgZm9yIG1vcmUgZGV0YWlscy5cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOYXRpdmUoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYXRpdmUoXyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICByZXR1cm4gcmVJc05hdGl2ZS50ZXN0KGZuVG9TdHJpbmcuY2FsbCh2YWx1ZSkpO1xuICB9XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHJlSXNIb3N0Q3Rvci50ZXN0KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogbG9kYXNoIDMuMTAuMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiAtZCAtbyAuL2luZGV4LmpzYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG47KGZ1bmN0aW9uKCkge1xuXG4gIC8qKiBVc2VkIGFzIGEgc2FmZSByZWZlcmVuY2UgZm9yIGB1bmRlZmluZWRgIGluIHByZS1FUzUgZW52aXJvbm1lbnRzLiAqL1xuICB2YXIgdW5kZWZpbmVkO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci4gKi9cbiAgdmFyIFZFUlNJT04gPSAnMy4xMC4xJztcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB3cmFwcGVyIG1ldGFkYXRhLiAqL1xuICB2YXIgQklORF9GTEFHID0gMSxcbiAgICAgIEJJTkRfS0VZX0ZMQUcgPSAyLFxuICAgICAgQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgICBDVVJSWV9GTEFHID0gOCxcbiAgICAgIENVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICAgIFBBUlRJQUxfRkxBRyA9IDMyLFxuICAgICAgUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgICBBUllfRkxBRyA9IDEyOCxcbiAgICAgIFJFQVJHX0ZMQUcgPSAyNTY7XG5cbiAgLyoqIFVzZWQgYXMgZGVmYXVsdCBvcHRpb25zIGZvciBgXy50cnVuY2AuICovXG4gIHZhciBERUZBVUxUX1RSVU5DX0xFTkdUSCA9IDMwLFxuICAgICAgREVGQVVMVF9UUlVOQ19PTUlTU0lPTiA9ICcuLi4nO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCB3aGVuIGEgZnVuY3Rpb24gYmVjb21lcyBob3QuICovXG4gIHZhciBIT1RfQ09VTlQgPSAxNTAsXG4gICAgICBIT1RfU1BBTiA9IDE2O1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xuICB2YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuICAvKiogVXNlZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBsYXp5IGl0ZXJhdGVlcy4gKi9cbiAgdmFyIExBWllfRklMVEVSX0ZMQUcgPSAxLFxuICAgICAgTEFaWV9NQVBfRkxBRyA9IDI7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIGBUeXBlRXJyb3JgIG1lc3NhZ2UgZm9yIFwiRnVuY3Rpb25zXCIgbWV0aG9kcy4gKi9cbiAgdmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuICAvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG4gIHZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuICAvKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG4gIHZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxuICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGVtcHR5IHN0cmluZyBsaXRlcmFscyBpbiBjb21waWxlZCB0ZW1wbGF0ZSBzb3VyY2UuICovXG4gIHZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXFxiKF9fcCBcXCs9KSAnJyBcXCsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdUcmFpbGluZyA9IC8oX19lXFwoLio/XFwpfFxcYl9fdFxcKSkgXFwrXFxuJyc7L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgcmVFc2NhcGVkSHRtbCA9IC8mKD86YW1wfGx0fGd0fHF1b3R8IzM5fCM5Nik7L2csXG4gICAgICByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ2BdL2csXG4gICAgICByZUhhc0VzY2FwZWRIdG1sID0gUmVnRXhwKHJlRXNjYXBlZEh0bWwuc291cmNlKSxcbiAgICAgIHJlSGFzVW5lc2NhcGVkSHRtbCA9IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xuICB2YXIgcmVFc2NhcGUgPSAvPCUtKFtcXHNcXFNdKz8pJT4vZyxcbiAgICAgIHJlRXZhbHVhdGUgPSAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgICAgcmVJbnRlcnBvbGF0ZSA9IC88JT0oW1xcc1xcU10rPyklPi9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbiAgdmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcblxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC8sXG4gICAgICByZVByb3BOYW1lID0gL1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcblxcXFxdfFxcXFwuKSo/KVxcMilcXF0vZztcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXBhdHRlcm5zKVxuICAgKiBhbmQgdGhvc2Ugb3V0bGluZWQgYnkgW2BFc2NhcGVSZWdFeHBQYXR0ZXJuYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZXNjYXBlcmVnZXhwcGF0dGVybikuXG4gICAqL1xuICB2YXIgcmVSZWdFeHBDaGFycyA9IC9eWzohLF18W1xcXFxeJC4qKz8oKVtcXF17fXxcXC9dfCheWzAtOWEtZkEtRm5ydHV2eF0pfChbXFxuXFxyXFx1MjAyOFxcdTIwMjldKS9nLFxuICAgICAgcmVIYXNSZWdFeHBDaGFycyA9IFJlZ0V4cChyZVJlZ0V4cENoYXJzLnNvdXJjZSk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKS4gKi9cbiAgdmFyIHJlQ29tYm9NYXJrID0gL1tcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMjNdL2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLiAqL1xuICB2YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUhhc0hleFByZWZpeCA9IC9eMFt4WF0vO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpID4gNSkuICovXG4gIHZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNVaW50ID0gL15cXGQrJC87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggbGF0aW4tMSBzdXBwbGVtZW50YXJ5IGxldHRlcnMgKGV4Y2x1ZGluZyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzKS4gKi9cbiAgdmFyIHJlTGF0aW4xID0gL1tcXHhjMC1cXHhkNlxceGQ4LVxceGRlXFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZl0vZztcblxuICAvKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG4gIHZhciByZU5vTWF0Y2ggPSAvKCReKS87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggdW5lc2NhcGVkIGNoYXJhY3RlcnMgaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xuICB2YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggd29yZHMgdG8gY3JlYXRlIGNvbXBvdW5kIHdvcmRzLiAqL1xuICB2YXIgcmVXb3JkcyA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdXBwZXIgPSAnW0EtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZV0nLFxuICAgICAgICBsb3dlciA9ICdbYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXSsnO1xuXG4gICAgcmV0dXJuIFJlZ0V4cCh1cHBlciArICcrKD89JyArIHVwcGVyICsgbG93ZXIgKyAnKXwnICsgdXBwZXIgKyAnPycgKyBsb3dlciArICd8JyArIHVwcGVyICsgJyt8WzAtOV0rJywgJ2cnKTtcbiAgfSgpKTtcblxuICAvKiogVXNlZCB0byBhc3NpZ24gZGVmYXVsdCBgY29udGV4dGAgb2JqZWN0IHByb3BlcnRpZXMuICovXG4gIHZhciBjb250ZXh0UHJvcHMgPSBbXG4gICAgJ0FycmF5JywgJ0FycmF5QnVmZmVyJywgJ0RhdGUnLCAnRXJyb3InLCAnRmxvYXQzMkFycmF5JywgJ0Zsb2F0NjRBcnJheScsXG4gICAgJ0Z1bmN0aW9uJywgJ0ludDhBcnJheScsICdJbnQxNkFycmF5JywgJ0ludDMyQXJyYXknLCAnTWF0aCcsICdOdW1iZXInLFxuICAgICdPYmplY3QnLCAnUmVnRXhwJywgJ1NldCcsICdTdHJpbmcnLCAnXycsICdjbGVhclRpbWVvdXQnLCAnaXNGaW5pdGUnLFxuICAgICdwYXJzZUZsb2F0JywgJ3BhcnNlSW50JywgJ3NldFRpbWVvdXQnLCAnVHlwZUVycm9yJywgJ1VpbnQ4QXJyYXknLFxuICAgICdVaW50OENsYW1wZWRBcnJheScsICdVaW50MTZBcnJheScsICdVaW50MzJBcnJheScsICdXZWFrTWFwJ1xuICBdO1xuXG4gIC8qKiBVc2VkIHRvIG1ha2UgdGVtcGxhdGUgc291cmNlVVJMcyBlYXNpZXIgdG8gaWRlbnRpZnkuICovXG4gIHZhciB0ZW1wbGF0ZUNvdW50ZXIgPSAtMTtcblxuICAvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG4gIHZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xuICB0eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuICB0eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPSB0eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9IHR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID0gdHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzZXRUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbiAgLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbiAgdmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbiAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbiAgY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2Jvb2xUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPVxuICBjbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPVxuICBjbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG4gIGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuICAvKiogVXNlZCB0byBtYXAgbGF0aW4tMSBzdXBwbGVtZW50YXJ5IGxldHRlcnMgdG8gYmFzaWMgbGF0aW4gbGV0dGVycy4gKi9cbiAgdmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgICAnXFx4ZTAnOiAnYScsICAnXFx4ZTEnOiAnYScsICdcXHhlMic6ICdhJywgJ1xceGUzJzogJ2EnLCAnXFx4ZTQnOiAnYScsICdcXHhlNSc6ICdhJyxcbiAgICAnXFx4YzcnOiAnQycsICAnXFx4ZTcnOiAnYycsXG4gICAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAgICdcXHhjOCc6ICdFJywgICdcXHhjOSc6ICdFJywgJ1xceGNhJzogJ0UnLCAnXFx4Y2InOiAnRScsXG4gICAgJ1xceGU4JzogJ2UnLCAgJ1xceGU5JzogJ2UnLCAnXFx4ZWEnOiAnZScsICdcXHhlYic6ICdlJyxcbiAgICAnXFx4Y0MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAgICdcXHhlQyc6ICdpJywgICdcXHhlZCc6ICdpJywgJ1xceGVlJzogJ2knLCAnXFx4ZWYnOiAnaScsXG4gICAgJ1xceGQxJzogJ04nLCAgJ1xceGYxJzogJ24nLFxuICAgICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAgICdcXHhmMic6ICdvJywgICdcXHhmMyc6ICdvJywgJ1xceGY0JzogJ28nLCAnXFx4ZjUnOiAnbycsICdcXHhmNic6ICdvJywgJ1xceGY4JzogJ28nLFxuICAgICdcXHhkOSc6ICdVJywgICdcXHhkYSc6ICdVJywgJ1xceGRiJzogJ1UnLCAnXFx4ZGMnOiAnVScsXG4gICAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgICAnXFx4ZGQnOiAnWScsICAnXFx4ZmQnOiAneScsICdcXHhmZic6ICd5JyxcbiAgICAnXFx4YzYnOiAnQWUnLCAnXFx4ZTYnOiAnYWUnLFxuICAgICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICAgJ1xceGRmJzogJ3NzJ1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG4gIHZhciBodG1sRXNjYXBlcyA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmIzM5OycsXG4gICAgJ2AnOiAnJiM5NjsnXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gbWFwIEhUTUwgZW50aXRpZXMgdG8gY2hhcmFjdGVycy4gKi9cbiAgdmFyIGh0bWxVbmVzY2FwZXMgPSB7XG4gICAgJyZhbXA7JzogJyYnLFxuICAgICcmbHQ7JzogJzwnLFxuICAgICcmZ3Q7JzogJz4nLFxuICAgICcmcXVvdDsnOiAnXCInLFxuICAgICcmIzM5Oyc6IFwiJ1wiLFxuICAgICcmIzk2Oyc6ICdgJ1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIGRldGVybWluZSBpZiB2YWx1ZXMgYXJlIG9mIHRoZSBsYW5ndWFnZSB0eXBlIGBPYmplY3RgLiAqL1xuICB2YXIgb2JqZWN0VHlwZXMgPSB7XG4gICAgJ2Z1bmN0aW9uJzogdHJ1ZSxcbiAgICAnb2JqZWN0JzogdHJ1ZVxuICB9O1xuXG4gIC8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgcmVnZXhlcy4gKi9cbiAgdmFyIHJlZ2V4cEVzY2FwZXMgPSB7XG4gICAgJzAnOiAneDMwJywgJzEnOiAneDMxJywgJzInOiAneDMyJywgJzMnOiAneDMzJywgJzQnOiAneDM0JyxcbiAgICAnNSc6ICd4MzUnLCAnNic6ICd4MzYnLCAnNyc6ICd4MzcnLCAnOCc6ICd4MzgnLCAnOSc6ICd4MzknLFxuICAgICdBJzogJ3g0MScsICdCJzogJ3g0MicsICdDJzogJ3g0MycsICdEJzogJ3g0NCcsICdFJzogJ3g0NScsICdGJzogJ3g0NicsXG4gICAgJ2EnOiAneDYxJywgJ2InOiAneDYyJywgJ2MnOiAneDYzJywgJ2QnOiAneDY0JywgJ2UnOiAneDY1JywgJ2YnOiAneDY2JyxcbiAgICAnbic6ICd4NmUnLCAncic6ICd4NzInLCAndCc6ICd4NzQnLCAndSc6ICd4NzUnLCAndic6ICd4NzYnLCAneCc6ICd4NzgnXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG4gIHZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAgICdcXFxcJzogJ1xcXFwnLFxuICAgIFwiJ1wiOiBcIidcIixcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHInOiAncicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG4gIHZhciBmcmVlRXhwb3J0cyA9IG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xuICB2YXIgZnJlZU1vZHVsZSA9IG9iamVjdFR5cGVzW3R5cGVvZiBtb2R1bGVdICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xuICB2YXIgZnJlZUdsb2JhbCA9IGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUgJiYgdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCAmJiBnbG9iYWw7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbiAgdmFyIGZyZWVTZWxmID0gb2JqZWN0VHlwZXNbdHlwZW9mIHNlbGZdICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgJiYgc2VsZjtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHdpbmRvd2AuICovXG4gIHZhciBmcmVlV2luZG93ID0gb2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93ICYmIHdpbmRvdy5PYmplY3QgJiYgd2luZG93O1xuXG4gIC8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG4gIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzICYmIGZyZWVFeHBvcnRzO1xuXG4gIC8qKlxuICAgKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LlxuICAgKlxuICAgKiBUaGUgYHRoaXNgIHZhbHVlIGlzIHVzZWQgaWYgaXQncyB0aGUgZ2xvYmFsIG9iamVjdCB0byBhdm9pZCBHcmVhc2Vtb25rZXknc1xuICAgKiByZXN0cmljdGVkIGB3aW5kb3dgIG9iamVjdCwgb3RoZXJ3aXNlIHRoZSBgd2luZG93YCBvYmplY3QgaXMgdXNlZC5cbiAgICovXG4gIHZhciByb290ID0gZnJlZUdsb2JhbCB8fCAoKGZyZWVXaW5kb3cgIT09ICh0aGlzICYmIHRoaXMud2luZG93KSkgJiYgZnJlZVdpbmRvdykgfHwgZnJlZVNlbGYgfHwgdGhpcztcblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGNvbXBhcmVBc2NlbmRpbmdgIHdoaWNoIGNvbXBhcmVzIHZhbHVlcyBhbmRcbiAgICogc29ydHMgdGhlbSBpbiBhc2NlbmRpbmcgb3JkZXIgd2l0aG91dCBndWFyYW50ZWVpbmcgYSBzdGFibGUgc29ydC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGB2YWx1ZWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlQ29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgICBpZiAodmFsdWUgIT09IG90aGVyKSB7XG4gICAgICB2YXIgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgdmFsSXNVbmRlZiA9IHZhbHVlID09PSB1bmRlZmluZWQsXG4gICAgICAgICAgdmFsSXNSZWZsZXhpdmUgPSB2YWx1ZSA9PT0gdmFsdWU7XG5cbiAgICAgIHZhciBvdGhJc051bGwgPSBvdGhlciA9PT0gbnVsbCxcbiAgICAgICAgICBvdGhJc1VuZGVmID0gb3RoZXIgPT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcjtcblxuICAgICAgaWYgKCh2YWx1ZSA+IG90aGVyICYmICFvdGhJc051bGwpIHx8ICF2YWxJc1JlZmxleGl2ZSB8fFxuICAgICAgICAgICh2YWxJc051bGwgJiYgIW90aElzVW5kZWYgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgKHZhbElzVW5kZWYgJiYgb3RoSXNSZWZsZXhpdmUpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgaWYgKCh2YWx1ZSA8IG90aGVyICYmICF2YWxJc051bGwpIHx8ICFvdGhJc1JlZmxleGl2ZSB8fFxuICAgICAgICAgIChvdGhJc051bGwgJiYgIXZhbElzVW5kZWYgJiYgdmFsSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgKG90aElzVW5kZWYgJiYgdmFsSXNSZWZsZXhpdmUpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICAgKiBzdXBwb3J0IGZvciBjYWxsYmFjayBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNlYXJjaC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tUmlnaHQpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYmluYXJ5IHNlYXJjaGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2VhcmNoLlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4T2ZOYU4oYXJyYXksIGZyb21JbmRleCk7XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0Z1bmN0aW9uYCB3aXRob3V0IHN1cHBvcnQgZm9yIGVudmlyb25tZW50c1xuICAgKiB3aXRoIGluY29ycmVjdCBgdHlwZW9mYCByZXN1bHRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgLy8gQXZvaWQgYSBDaGFrcmEgSklUIGJ1ZyBpbiBjb21wYXRpYmlsaXR5IG1vZGVzIG9mIElFIDExLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvaXNzdWVzLzE2MjEgZm9yIG1vcmUgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBpZiBpdCdzIG5vdCBvbmUuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZFxuICAgKiBmb3IgYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6ICh2YWx1ZSArICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltTGVmdGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAqIG9mIGBzdHJpbmdgIHRoYXQgaXMgbm90IGZvdW5kIGluIGBjaGFyc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcnMgVGhlIGNoYXJhY3RlcnMgdG8gZmluZC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBub3QgZm91bmQgaW4gYGNoYXJzYC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYXJzTGVmdEluZGV4KHN0cmluZywgY2hhcnMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIGNoYXJzLmluZGV4T2Yoc3RyaW5nLmNoYXJBdChpbmRleCkpID4gLTEpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1SaWdodGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXJcbiAgICogb2YgYHN0cmluZ2AgdGhhdCBpcyBub3QgZm91bmQgaW4gYGNoYXJzYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFycyBUaGUgY2hhcmFjdGVycyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgbm90IGZvdW5kIGluIGBjaGFyc2AuXG4gICAqL1xuICBmdW5jdGlvbiBjaGFyc1JpZ2h0SW5kZXgoc3RyaW5nLCBjaGFycykge1xuICAgIHZhciBpbmRleCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSAmJiBjaGFycy5pbmRleE9mKHN0cmluZy5jaGFyQXQoaW5kZXgpKSA+IC0xKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnNvcnRCeWAgdG8gY29tcGFyZSB0cmFuc2Zvcm1lZCBlbGVtZW50cyBvZiBhIGNvbGxlY3Rpb24gYW5kIHN0YWJsZVxuICAgKiBzb3J0IHRoZW0gaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGBvYmplY3RgLlxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyhvYmplY3QsIG90aGVyKSB7XG4gICAgcmV0dXJuIGJhc2VDb21wYXJlQXNjZW5kaW5nKG9iamVjdC5jcml0ZXJpYSwgb3RoZXIuY3JpdGVyaWEpIHx8IChvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5zb3J0QnlPcmRlcmAgdG8gY29tcGFyZSBtdWx0aXBsZSBwcm9wZXJ0aWVzIG9mIGEgdmFsdWUgdG8gYW5vdGhlclxuICAgKiBhbmQgc3RhYmxlIHNvcnQgdGhlbS5cbiAgICpcbiAgICogSWYgYG9yZGVyc2AgaXMgdW5zcGVjaWZpZWQsIGFsbCB2YWx1ZXNzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsXG4gICAqIGEgdmFsdWUgaXMgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBpZiBpdHMgY29ycmVzcG9uZGluZyBvcmRlciBpcyBcImFzY1wiLCBhbmRcbiAgICogZGVzY2VuZGluZyBpZiBcImRlc2NcIi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbltdfSBvcmRlcnMgVGhlIG9yZGVyIHRvIHNvcnQgYnkgZm9yIGVhY2ggcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgb2JqZWN0YC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgb2JqQ3JpdGVyaWEgPSBvYmplY3QuY3JpdGVyaWEsXG4gICAgICAgIG90aENyaXRlcmlhID0gb3RoZXIuY3JpdGVyaWEsXG4gICAgICAgIGxlbmd0aCA9IG9iakNyaXRlcmlhLmxlbmd0aCxcbiAgICAgICAgb3JkZXJzTGVuZ3RoID0gb3JkZXJzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZUNvbXBhcmVBc2NlbmRpbmcob2JqQ3JpdGVyaWFbaW5kZXhdLCBvdGhDcml0ZXJpYVtpbmRleF0pO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXJzTGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3JkZXIgPSBvcmRlcnNbaW5kZXhdO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICogKChvcmRlciA9PT0gJ2FzYycgfHwgb3JkZXIgPT09IHRydWUpID8gMSA6IC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRml4ZXMgYW4gYEFycmF5I3NvcnRgIGJ1ZyBpbiB0aGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIGFwcGxpY2F0aW9uc1xuICAgIC8vIHRoYXQgY2F1c2VzIGl0LCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIHRvIHByb3ZpZGUgdGhlIHNhbWUgdmFsdWUgZm9yXG4gICAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAvL1xuICAgIC8vIFRoaXMgYWxzbyBlbnN1cmVzIGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuXG4gICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05MCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLmRlYnVycmAgdG8gY29udmVydCBsYXRpbi0xIHN1cHBsZW1lbnRhcnkgbGV0dGVycyB0byBiYXNpYyBsYXRpbiBsZXR0ZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGV0dGVyIFRoZSBtYXRjaGVkIGxldHRlciB0byBkZWJ1cnIuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIGxldHRlci5cbiAgICovXG4gIGZ1bmN0aW9uIGRlYnVyckxldHRlcihsZXR0ZXIpIHtcbiAgICByZXR1cm4gZGVidXJyZWRMZXR0ZXJzW2xldHRlcl07XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gZXNjYXBlSHRtbENoYXIoY2hyKSB7XG4gICAgcmV0dXJuIGh0bWxFc2NhcGVzW2Nocl07XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5lc2NhcGVSZWdFeHBgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgcmVnZXhlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGVhZGluZ0NoYXIgVGhlIGNhcHR1cmUgZ3JvdXAgZm9yIGEgbGVhZGluZyBjaGFyYWN0ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3aGl0ZXNwYWNlQ2hhciBUaGUgY2FwdHVyZSBncm91cCBmb3IgYSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAqL1xuICBmdW5jdGlvbiBlc2NhcGVSZWdFeHBDaGFyKGNociwgbGVhZGluZ0NoYXIsIHdoaXRlc3BhY2VDaGFyKSB7XG4gICAgaWYgKGxlYWRpbmdDaGFyKSB7XG4gICAgICBjaHIgPSByZWdleHBFc2NhcGVzW2Nocl07XG4gICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNlQ2hhcikge1xuICAgICAgY2hyID0gc3RyaW5nRXNjYXBlc1tjaHJdO1xuICAgIH1cbiAgICByZXR1cm4gJ1xcXFwnICsgY2hyO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udGVtcGxhdGVgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gZXNjYXBlU3RyaW5nQ2hhcihjaHIpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgc3RyaW5nRXNjYXBlc1tjaHJdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGBOYU5gIGlzIGZvdW5kIGluIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzZWFyY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgYE5hTmAsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4T2ZOYU4oYXJyYXksIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMCA6IC0xKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICB2YXIgb3RoZXIgPSBhcnJheVtpbmRleF07XG4gICAgICBpZiAob3RoZXIgIT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGB0cmltbWVkTGVmdEluZGV4YCBhbmQgYHRyaW1tZWRSaWdodEluZGV4YCB0byBkZXRlcm1pbmUgaWYgYVxuICAgKiBjaGFyYWN0ZXIgY29kZSBpcyB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gY2hhckNvZGUgVGhlIGNoYXJhY3RlciBjb2RlIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgY2hhckNvZGVgIGlzIHdoaXRlc3BhY2UsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGlzU3BhY2UoY2hhckNvZGUpIHtcbiAgICByZXR1cm4gKChjaGFyQ29kZSA8PSAxNjAgJiYgKGNoYXJDb2RlID49IDkgJiYgY2hhckNvZGUgPD0gMTMpIHx8IGNoYXJDb2RlID09IDMyIHx8IGNoYXJDb2RlID09IDE2MCkgfHwgY2hhckNvZGUgPT0gNTc2MCB8fCBjaGFyQ29kZSA9PSA2MTU4IHx8XG4gICAgICAoY2hhckNvZGUgPj0gODE5MiAmJiAoY2hhckNvZGUgPD0gODIwMiB8fCBjaGFyQ29kZSA9PSA4MjMyIHx8IGNoYXJDb2RlID09IDgyMzMgfHwgY2hhckNvZGUgPT0gODIzOSB8fCBjaGFyQ29kZSA9PSA4Mjg3IHx8IGNoYXJDb2RlID09IDEyMjg4IHx8IGNoYXJDb2RlID09IDY1Mjc5KSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFycmF5W2luZGV4XSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICAgIHJlc3VsdFsrK3Jlc0luZGV4XSA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFgIG9wdGltaXplZCBmb3Igc29ydGVkIGFycmF5cyB3aXRob3V0IHN1cHBvcnRcbiAgICogZm9yIGNhbGxiYWNrIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUtdmFsdWUtZnJlZSBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIHNvcnRlZFVuaXEoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIHNlZW4sXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSA6IHZhbHVlO1xuXG4gICAgICBpZiAoIWluZGV4IHx8IHNlZW4gIT09IGNvbXB1dGVkKSB7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUxlZnRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlXG4gICAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gICAqL1xuICBmdW5jdGlvbiB0cmltbWVkTGVmdEluZGV4KHN0cmluZykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgaXNTcGFjZShzdHJpbmcuY2hhckNvZGVBdChpbmRleCkpKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltUmlnaHRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAgICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gdHJpbW1lZFJpZ2h0SW5kZXgoc3RyaW5nKSB7XG4gICAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICAgIHdoaWxlIChpbmRleC0tICYmIGlzU3BhY2Uoc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpKSkge31cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy51bmVzY2FwZWAgdG8gY29udmVydCBIVE1MIGVudGl0aWVzIHRvIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIHVuZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gdW5lc2NhcGVIdG1sQ2hhcihjaHIpIHtcbiAgICByZXR1cm4gaHRtbFVuZXNjYXBlc1tjaHJdO1xuICB9XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB1c2luZyB0aGUgZ2l2ZW4gYGNvbnRleHRgIG9iamVjdC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAbWVtYmVyT2YgX1xuICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHQ9cm9vdF0gVGhlIGNvbnRleHQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYSBuZXcgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIF8ubWl4aW4oeyAnZm9vJzogXy5jb25zdGFudCgnZm9vJykgfSk7XG4gICAqXG4gICAqIHZhciBsb2Rhc2ggPSBfLnJ1bkluQ29udGV4dCgpO1xuICAgKiBsb2Rhc2gubWl4aW4oeyAnYmFyJzogbG9kYXNoLmNvbnN0YW50KCdiYXInKSB9KTtcbiAgICpcbiAgICogXy5pc0Z1bmN0aW9uKF8uZm9vKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKiBfLmlzRnVuY3Rpb24oXy5iYXIpO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKlxuICAgKiBsb2Rhc2guaXNGdW5jdGlvbihsb2Rhc2guZm9vKTtcbiAgICogLy8gPT4gZmFsc2VcbiAgICogbG9kYXNoLmlzRnVuY3Rpb24obG9kYXNoLmJhcik7XG4gICAqIC8vID0+IHRydWVcbiAgICpcbiAgICogLy8gdXNpbmcgYGNvbnRleHRgIHRvIG1vY2sgYERhdGUjZ2V0VGltZWAgdXNlIGluIGBfLm5vd2BcbiAgICogdmFyIG1vY2sgPSBfLnJ1bkluQ29udGV4dCh7XG4gICAqICAgJ0RhdGUnOiBmdW5jdGlvbigpIHtcbiAgICogICAgIHJldHVybiB7ICdnZXRUaW1lJzogZ2V0VGltZU1vY2sgfTtcbiAgICogICB9XG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBvciBjcmVhdGluZyBhIHN1cGVkLXVwIGBkZWZlcmAgaW4gTm9kZS5qc1xuICAgKiB2YXIgZGVmZXIgPSBfLnJ1bkluQ29udGV4dCh7ICdzZXRUaW1lb3V0Jzogc2V0SW1tZWRpYXRlIH0pLmRlZmVyO1xuICAgKi9cbiAgZnVuY3Rpb24gcnVuSW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICAvLyBBdm9pZCBpc3N1ZXMgd2l0aCBzb21lIEVTMyBlbnZpcm9ubWVudHMgdGhhdCBhdHRlbXB0IHRvIHVzZSB2YWx1ZXMsIG5hbWVkXG4gICAgLy8gYWZ0ZXIgYnVpbHQtaW4gY29uc3RydWN0b3JzIGxpa2UgYE9iamVjdGAsIGZvciB0aGUgY3JlYXRpb24gb2YgbGl0ZXJhbHMuXG4gICAgLy8gRVM1IGNsZWFycyB0aGlzIHVwIGJ5IHN0YXRpbmcgdGhhdCBsaXRlcmFscyBtdXN0IHVzZSBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDExLjEuNSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGNvbnRleHQgPSBjb250ZXh0ID8gXy5kZWZhdWx0cyhyb290Lk9iamVjdCgpLCBjb250ZXh0LCBfLnBpY2socm9vdCwgY29udGV4dFByb3BzKSkgOiByb290O1xuXG4gICAgLyoqIE5hdGl2ZSBjb25zdHJ1Y3RvciByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBBcnJheSA9IGNvbnRleHQuQXJyYXksXG4gICAgICAgIERhdGUgPSBjb250ZXh0LkRhdGUsXG4gICAgICAgIEVycm9yID0gY29udGV4dC5FcnJvcixcbiAgICAgICAgRnVuY3Rpb24gPSBjb250ZXh0LkZ1bmN0aW9uLFxuICAgICAgICBNYXRoID0gY29udGV4dC5NYXRoLFxuICAgICAgICBOdW1iZXIgPSBjb250ZXh0Lk51bWJlcixcbiAgICAgICAgT2JqZWN0ID0gY29udGV4dC5PYmplY3QsXG4gICAgICAgIFJlZ0V4cCA9IGNvbnRleHQuUmVnRXhwLFxuICAgICAgICBTdHJpbmcgPSBjb250ZXh0LlN0cmluZyxcbiAgICAgICAgVHlwZUVycm9yID0gY29udGV4dC5UeXBlRXJyb3I7XG5cbiAgICAvKiogVXNlZCBmb3IgbmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgICAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgICAgIHN0cmluZ1Byb3RvID0gU3RyaW5nLnByb3RvdHlwZTtcblxuICAgIC8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbiAgICB2YXIgZm5Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIC8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xuICAgIHZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4gICAgLyoqIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy4gKi9cbiAgICB2YXIgaWRDb3VudGVyID0gMDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gICAgICogb2YgdmFsdWVzLlxuICAgICAqL1xuICAgIHZhciBvYmpUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4gICAgLyoqIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYF9gIHJlZmVyZW5jZSBpbiBgXy5ub0NvbmZsaWN0YC4gKi9cbiAgICB2YXIgb2xkRGFzaCA9IHJvb3QuXztcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG4gICAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgICAgIGZuVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZSgvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csICdcXFxcJCYnKVxuICAgICAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4gICAgKTtcblxuICAgIC8qKiBOYXRpdmUgbWV0aG9kIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIEFycmF5QnVmZmVyID0gY29udGV4dC5BcnJheUJ1ZmZlcixcbiAgICAgICAgY2xlYXJUaW1lb3V0ID0gY29udGV4dC5jbGVhclRpbWVvdXQsXG4gICAgICAgIHBhcnNlRmxvYXQgPSBjb250ZXh0LnBhcnNlRmxvYXQsXG4gICAgICAgIHBvdyA9IE1hdGgucG93LFxuICAgICAgICBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLFxuICAgICAgICBTZXQgPSBnZXROYXRpdmUoY29udGV4dCwgJ1NldCcpLFxuICAgICAgICBzZXRUaW1lb3V0ID0gY29udGV4dC5zZXRUaW1lb3V0LFxuICAgICAgICBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZSxcbiAgICAgICAgVWludDhBcnJheSA9IGNvbnRleHQuVWludDhBcnJheSxcbiAgICAgICAgV2Vha01hcCA9IGdldE5hdGl2ZShjb250ZXh0LCAnV2Vha01hcCcpO1xuXG4gICAgLyogTmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbiAgICB2YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICAgICAgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpLFxuICAgICAgICBuYXRpdmVGbG9vciA9IE1hdGguZmxvb3IsXG4gICAgICAgIG5hdGl2ZUlzQXJyYXkgPSBnZXROYXRpdmUoQXJyYXksICdpc0FycmF5JyksXG4gICAgICAgIG5hdGl2ZUlzRmluaXRlID0gY29udGV4dC5pc0Zpbml0ZSxcbiAgICAgICAgbmF0aXZlS2V5cyA9IGdldE5hdGl2ZShPYmplY3QsICdrZXlzJyksXG4gICAgICAgIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgICAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbixcbiAgICAgICAgbmF0aXZlTm93ID0gZ2V0TmF0aXZlKERhdGUsICdub3cnKSxcbiAgICAgICAgbmF0aXZlUGFyc2VJbnQgPSBjb250ZXh0LnBhcnNlSW50LFxuICAgICAgICBuYXRpdmVSYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuICAgIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIGAtSW5maW5pdHlgIGFuZCBgSW5maW5pdHlgLiAqL1xuICAgIHZhciBORUdBVElWRV9JTkZJTklUWSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcbiAgICAgICAgUE9TSVRJVkVfSU5GSU5JVFkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cbiAgICAvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xuICAgIHZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NSxcbiAgICAgICAgTUFYX0FSUkFZX0lOREVYID0gTUFYX0FSUkFZX0xFTkdUSCAtIDEsXG4gICAgICAgIEhBTEZfTUFYX0FSUkFZX0xFTkdUSCA9IE1BWF9BUlJBWV9MRU5HVEggPj4+IDE7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGFzIHRoZSBbbWF4aW11bSBsZW5ndGhdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW51bWJlci5tYXhfc2FmZV9pbnRlZ2VyKVxuICAgICAqIG9mIGFuIGFycmF5LWxpa2UgdmFsdWUuXG4gICAgICovXG4gICAgdmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4gICAgLyoqIFVzZWQgdG8gc3RvcmUgZnVuY3Rpb24gbWV0YWRhdGEuICovXG4gICAgdmFyIG1ldGFNYXAgPSBXZWFrTWFwICYmIG5ldyBXZWFrTWFwO1xuXG4gICAgLyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovXG4gICAgdmFyIHJlYWxOYW1lcyA9IHt9O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBpbXBsaWNpdCBjaGFpbmluZy5cbiAgICAgKiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsIGFuZCBmdW5jdGlvbnMgY2FuXG4gICAgICogYmUgY2hhaW5lZCB0b2dldGhlci4gTWV0aG9kcyB0aGF0IHJldHJpZXZlIGEgc2luZ2xlIHZhbHVlIG9yIG1heSByZXR1cm4gYVxuICAgICAqIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiByZXR1cm5pbmcgdGhlIHVud3JhcHBlZFxuICAgICAqIHZhbHVlLiBFeHBsaWNpdCBjaGFpbmluZyBtYXkgYmUgZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuIFRoZSBleGVjdXRpb24gb2ZcbiAgICAgKiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgZXhlY3V0aW9uIGlzIGRlZmVycmVkIHVudGlsIGBfI3ZhbHVlYFxuICAgICAqIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi4gU2hvcnRjdXRcbiAgICAgKiBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHN0cmF0ZWd5IHdoaWNoIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGNhbiBoZWxwXG4gICAgICogdG8gYXZvaWQgdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGdyZWF0bHkgcmVkdWNlIHRoZVxuICAgICAqIG51bWJlciBvZiBpdGVyYXRlZSBleGVjdXRpb25zLlxuICAgICAqXG4gICAgICogQ2hhaW5pbmcgaXMgc3VwcG9ydGVkIGluIGN1c3RvbSBidWlsZHMgYXMgbG9uZyBhcyB0aGUgYF8jdmFsdWVgIG1ldGhvZCBpc1xuICAgICAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICAgICAqXG4gICAgICogSW4gYWRkaXRpb24gdG8gbG9kYXNoIG1ldGhvZHMsIHdyYXBwZXJzIGhhdmUgYEFycmF5YCBhbmQgYFN0cmluZ2AgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gICAgICogYGNvbmNhdGAsIGBqb2luYCwgYHBvcGAsIGBwdXNoYCwgYHJldmVyc2VgLCBgc2hpZnRgLCBgc2xpY2VgLCBgc29ydGAsXG4gICAgICogYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBTdHJpbmdgIG1ldGhvZHMgYXJlOlxuICAgICAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IHN1cHBvcnQgc2hvcnRjdXQgZnVzaW9uIGFyZTpcbiAgICAgKiBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wUmlnaHRXaGlsZWAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCxcbiAgICAgKiBgZmlyc3RgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGBwbHVja2AsIGByZWplY3RgLCBgcmVzdGAsIGByZXZlcnNlYCxcbiAgICAgKiBgc2xpY2VgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRvQXJyYXlgLFxuICAgICAqIGFuZCBgd2hlcmVgXG4gICAgICpcbiAgICAgKiBUaGUgY2hhaW5hYmxlIHdyYXBwZXIgbWV0aG9kcyBhcmU6XG4gICAgICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXRgLCBgYmVmb3JlYCwgYGJpbmRgLCBgYmluZEFsbGAsIGBiaW5kS2V5YCxcbiAgICAgKiBgY2FsbGJhY2tgLCBgY2hhaW5gLCBgY2h1bmtgLCBgY29tbWl0YCwgYGNvbXBhY3RgLCBgY29uY2F0YCwgYGNvbnN0YW50YCxcbiAgICAgKiBgY291bnRCeWAsIGBjcmVhdGVgLCBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCxcbiAgICAgKiBgZGVmZXJgLCBgZGVsYXlgLCBgZGlmZmVyZW5jZWAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wUmlnaHRXaGlsZWAsXG4gICAgICogYGRyb3BXaGlsZWAsIGBmaWxsYCwgYGZpbHRlcmAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCwgYGZsb3dgLCBgZmxvd1JpZ2h0YCxcbiAgICAgKiBgZm9yRWFjaGAsIGBmb3JFYWNoUmlnaHRgLCBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLFxuICAgICAqIGBmdW5jdGlvbnNgLCBgZ3JvdXBCeWAsIGBpbmRleEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludmVydGAsXG4gICAgICogYGludm9rZWAsIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsXG4gICAgICogYG1hdGNoZXNQcm9wZXJ0eWAsIGBtZW1vaXplYCwgYG1lcmdlYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsXG4gICAgICogYG1vZEFyZ3NgLCBgbmVnYXRlYCwgYG9taXRgLCBgb25jZWAsIGBwYWlyc2AsIGBwYXJ0aWFsYCwgYHBhcnRpYWxSaWdodGAsXG4gICAgICogYHBhcnRpdGlvbmAsIGBwaWNrYCwgYHBsYW50YCwgYHBsdWNrYCwgYHByb3BlcnR5YCwgYHByb3BlcnR5T2ZgLCBgcHVsbGAsXG4gICAgICogYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJlYXJnYCwgYHJlamVjdGAsIGByZW1vdmVgLCBgcmVzdGAsIGByZXN0UGFyYW1gLFxuICAgICAqIGByZXZlcnNlYCwgYHNldGAsIGBzaHVmZmxlYCwgYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNvcnRCeUFsbGAsXG4gICAgICogYHNvcnRCeU9yZGVyYCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLFxuICAgICAqIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdGltZXNgLCBgdG9BcnJheWAsIGB0b1BsYWluT2JqZWN0YCxcbiAgICAgKiBgdHJhbnNmb3JtYCwgYHVuaW9uYCwgYHVuaXFgLCBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdmFsdWVzYCxcbiAgICAgKiBgdmFsdWVzSW5gLCBgd2hlcmVgLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB6aXBgLCBgemlwT2JqZWN0YCwgYHppcFdpdGhgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICAgICAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsb25lYCwgYGNsb25lRGVlcGAsXG4gICAgICogYGRlYnVycmAsIGBlbmRzV2l0aGAsIGBlc2NhcGVgLCBgZXNjYXBlUmVnRXhwYCwgYGV2ZXJ5YCwgYGZpbmRgLCBgZmluZEluZGV4YCxcbiAgICAgKiBgZmluZEtleWAsIGBmaW5kTGFzdGAsIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpbmRXaGVyZWAsIGBmaXJzdGAsXG4gICAgICogYGZsb29yYCwgYGdldGAsIGBndGAsIGBndGVgLCBgaGFzYCwgYGlkZW50aXR5YCwgYGluY2x1ZGVzYCwgYGluZGV4T2ZgLFxuICAgICAqIGBpblJhbmdlYCwgYGlzQXJndW1lbnRzYCwgYGlzQXJyYXlgLCBgaXNCb29sZWFuYCwgYGlzRGF0ZWAsIGBpc0VsZW1lbnRgLFxuICAgICAqIGBpc0VtcHR5YCwgYGlzRXF1YWxgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAgYGlzRnVuY3Rpb25gLCBgaXNNYXRjaGAsXG4gICAgICogYGlzTmF0aXZlYCwgYGlzTmFOYCwgYGlzTnVsbGAsIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc1BsYWluT2JqZWN0YCxcbiAgICAgKiBgaXNSZWdFeHBgLCBgaXNTdHJpbmdgLCBgaXNVbmRlZmluZWRgLCBgaXNUeXBlZEFycmF5YCwgYGpvaW5gLCBga2ViYWJDYXNlYCxcbiAgICAgKiBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1pbmAsIGBub0NvbmZsaWN0YCwgYG5vb3BgLFxuICAgICAqIGBub3dgLCBgcGFkYCwgYHBhZExlZnRgLCBgcGFkUmlnaHRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLFxuICAgICAqIGByZWR1Y2VSaWdodGAsIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzaGlmdGAsIGBzaXplYCxcbiAgICAgKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkTGFzdEluZGV4YCwgYHN0YXJ0Q2FzZWAsXG4gICAgICogYHN0YXJ0c1dpdGhgLCBgc3VtYCwgYHRlbXBsYXRlYCwgYHRyaW1gLCBgdHJpbUxlZnRgLCBgdHJpbVJpZ2h0YCwgYHRydW5jYCxcbiAgICAgKiBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdmFsdWVgLCBhbmQgYHdvcmRzYFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgbWV0aG9kIGBzYW1wbGVgIHdpbGwgcmV0dXJuIGEgd3JhcHBlZCB2YWx1ZSB3aGVuIGBuYCBpcyBwcm92aWRlZCxcbiAgICAgKiBvdGhlcndpc2UgYW4gdW53cmFwcGVkIHZhbHVlIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQG5hbWUgX1xuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gICAgICpcbiAgICAgKiAvLyByZXR1cm5zIGFuIHVud3JhcHBlZCB2YWx1ZVxuICAgICAqIHdyYXBwZWQucmVkdWNlKGZ1bmN0aW9uKHRvdGFsLCBuKSB7XG4gICAgICogICByZXR1cm4gdG90YWwgKyBuO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IDZcbiAgICAgKlxuICAgICAqIC8vIHJldHVybnMgYSB3cmFwcGVkIHZhbHVlXG4gICAgICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoc3F1YXJlcyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShzcXVhcmVzLnZhbHVlKCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsb2Rhc2godmFsdWUpIHtcbiAgICAgIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX2NoYWluX18nKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnX193cmFwcGVkX18nKSkge1xuICAgICAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgYWxsIGNoYWluaW5nIHdyYXBwZXJzIGluaGVyaXQgZnJvbS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgICAgIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGNoYWluaW5nIGZvciBhbGwgd3JhcHBlciBtZXRob2RzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthY3Rpb25zPVtdXSBBY3Rpb25zIHRvIHBlZm9ybSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwsIGFjdGlvbnMpIHtcbiAgICAgIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHRoaXMuX19hY3Rpb25zX18gPSBhY3Rpb25zIHx8IFtdO1xuICAgICAgdGhpcy5fX2NoYWluX18gPSAhIWNoYWluQWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBlbnZpcm9ubWVudCBmZWF0dXJlIGZsYWdzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUgT2JqZWN0XG4gICAgICovXG4gICAgdmFyIHN1cHBvcnQgPSBsb2Rhc2guc3VwcG9ydCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAgICAgKiBlbWJlZGRlZCBSdWJ5IChFUkIpLiBDaGFuZ2UgdGhlIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2VcbiAgICAgKiBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUgT2JqZWN0XG4gICAgICovXG4gICAgbG9kYXNoLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUgUmVnRXhwXG4gICAgICAgKi9cbiAgICAgICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBjb2RlIHRvIGJlIGV2YWx1YXRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSBSZWdFeHBcbiAgICAgICAqL1xuICAgICAgJ2V2YWx1YXRlJzogcmVFdmFsdWF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSBSZWdFeHBcbiAgICAgICAqL1xuICAgICAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgKi9cbiAgICAgICd2YXJpYWJsZSc6ICcnLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gaW1wb3J0IHZhcmlhYmxlcyBpbnRvIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSBPYmplY3RcbiAgICAgICAqL1xuICAgICAgJ2ltcG9ydHMnOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICAgICAqIEB0eXBlIEZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICAnXyc6IGxvZGFzaFxuICAgICAgfVxuICAgIH07XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgICAgIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgICAgIHRoaXMuX19kaXJfXyA9IDE7XG4gICAgICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICAgICAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107XG4gICAgICB0aGlzLl9fdGFrZUNvdW50X18gPSBQT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIHRoaXMuX192aWV3c19fID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBsYXp5IHdyYXBwZXIgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbG9uZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5Q2xvbmUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO1xuICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fID0gYXJyYXlDb3B5KHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgcmVzdWx0Ll9fZGlyX18gPSB0aGlzLl9fZGlyX187XG4gICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdGhpcy5fX2ZpbHRlcmVkX187XG4gICAgICByZXN1bHQuX19pdGVyYXRlZXNfXyA9IGFycmF5Q29weSh0aGlzLl9faXRlcmF0ZWVzX18pO1xuICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSB0aGlzLl9fdGFrZUNvdW50X187XG4gICAgICByZXN1bHQuX192aWV3c19fID0gYXJyYXlDb3B5KHRoaXMuX192aWV3c19fKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5UmV2ZXJzZSgpIHtcbiAgICAgIGlmICh0aGlzLl9fZmlsdGVyZWRfXykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICByZXN1bHQuX19kaXJfXyA9IC0xO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0Ll9fZGlyX18gKj0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHRoZSB1bndyYXBwZWQgdmFsdWUgZnJvbSBpdHMgbGF6eSB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGF6eVZhbHVlKCkge1xuICAgICAgdmFyIGFycmF5ID0gdGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLFxuICAgICAgICAgIGRpciA9IHRoaXMuX19kaXJfXyxcbiAgICAgICAgICBpc0FyciA9IGlzQXJyYXkoYXJyYXkpLFxuICAgICAgICAgIGlzUmlnaHQgPSBkaXIgPCAwLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGlzQXJyID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICB2aWV3ID0gZ2V0VmlldygwLCBhcnJMZW5ndGgsIHRoaXMuX192aWV3c19fKSxcbiAgICAgICAgICBzdGFydCA9IHZpZXcuc3RhcnQsXG4gICAgICAgICAgZW5kID0gdmlldy5lbmQsXG4gICAgICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQsXG4gICAgICAgICAgaW5kZXggPSBpc1JpZ2h0ID8gZW5kIDogKHN0YXJ0IC0gMSksXG4gICAgICAgICAgaXRlcmF0ZWVzID0gdGhpcy5fX2l0ZXJhdGVlc19fLFxuICAgICAgICAgIGl0ZXJMZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICB0YWtlQ291bnQgPSBuYXRpdmVNaW4obGVuZ3RoLCB0aGlzLl9fdGFrZUNvdW50X18pO1xuXG4gICAgICBpZiAoIWlzQXJyIHx8IGFyckxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgfHwgKGFyckxlbmd0aCA9PSBsZW5ndGggJiYgdGFrZUNvdW50ID09IGxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUoKGlzUmlnaHQgJiYgaXNBcnIpID8gYXJyYXkucmV2ZXJzZSgpIDogYXJyYXksIHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlIChsZW5ndGgtLSAmJiByZXNJbmRleCA8IHRha2VDb3VudCkge1xuICAgICAgICBpbmRleCArPSBkaXI7XG5cbiAgICAgICAgdmFyIGl0ZXJJbmRleCA9IC0xLFxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpbmRleF07XG5cbiAgICAgICAgd2hpbGUgKCsraXRlckluZGV4IDwgaXRlckxlbmd0aCkge1xuICAgICAgICAgIHZhciBkYXRhID0gaXRlcmF0ZWVzW2l0ZXJJbmRleF0sXG4gICAgICAgICAgICAgIGl0ZXJhdGVlID0gZGF0YS5pdGVyYXRlZSxcbiAgICAgICAgICAgICAgdHlwZSA9IGRhdGEudHlwZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAodHlwZSA9PSBMQVpZX01BUF9GTEFHKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS92YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBuYW1lIENhY2hlXG4gICAgICogQG1lbWJlck9mIF8ubWVtb2l6ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE1hcENhY2hlKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIF8ubWVtb2l6ZS5DYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwRGVsZXRlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjYWNoZWQgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgXy5tZW1vaXplLkNhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNhY2hlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBHZXQoa2V5KSB7XG4gICAgICByZXR1cm4ga2V5ID09ICdfX3Byb3RvX18nID8gdW5kZWZpbmVkIDogdGhpcy5fX2RhdGFfX1trZXldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGNhY2hlZCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgXy5tZW1vaXplLkNhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcEhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBrZXkgIT0gJ19fcHJvdG9fXycgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9fZGF0YV9fLCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYHZhbHVlYCB0byBga2V5YCBvZiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBfLm1lbW9pemUuQ2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGNhY2hlLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGtleSAhPSAnX19wcm90b19fJykge1xuICAgICAgICB0aGlzLl9fZGF0YV9fW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQ3JlYXRlcyBhIGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlcyA/IHZhbHVlcy5sZW5ndGggOiAwO1xuXG4gICAgICB0aGlzLmRhdGEgPSB7ICdoYXNoJzogbmF0aXZlQ3JlYXRlKG51bGwpLCAnc2V0JzogbmV3IFNldCB9O1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHRoaXMucHVzaCh2YWx1ZXNbbGVuZ3RoXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gYGNhY2hlYCBtaW1pY2tpbmcgdGhlIHJldHVybiBzaWduYXR1cmUgb2ZcbiAgICAgKiBgXy5pbmRleE9mYCBieSByZXR1cm5pbmcgYDBgIGlmIHRoZSB2YWx1ZSBpcyBmb3VuZCwgZWxzZSBgLTFgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYDBgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYC0xYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYWNoZUluZGV4T2YoY2FjaGUsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IGNhY2hlLmRhdGEsXG4gICAgICAgICAgcmVzdWx0ID0gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc09iamVjdCh2YWx1ZSkpID8gZGF0YS5zZXQuaGFzKHZhbHVlKSA6IGRhdGEuaGFzaFt2YWx1ZV07XG5cbiAgICAgIHJldHVybiByZXN1bHQgPyAwIDogLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBgdmFsdWVgIHRvIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgcHVzaFxuICAgICAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhY2hlUHVzaCh2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBkYXRhLnNldC5hZGQodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5oYXNoW3ZhbHVlXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhcnJheSBqb2luaW5nIGBhcnJheWAgd2l0aCBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gam9pbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gam9pbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlDb25jYXQoYXJyYXksIG90aGVyKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgb3RoSW5kZXggPSAtMSxcbiAgICAgICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoICsgb3RoTGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK290aEluZGV4IDwgb3RoTGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleCsrXSA9IG90aGVyW290aEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5Q29weShzb3VyY2UsIGFycmF5KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gICAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAgICogY2FsbGJhY2sgc2hvcnRoYW5kcyBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheUVhY2hSaWdodChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZXZlcnlgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlFdmVyeShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmICghcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlRXh0cmVtdW1gIGZvciBhcnJheXMgd2hpY2ggaW52b2tlcyBgaXRlcmF0ZWVgXG4gICAgICogd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7Kn0gZXhWYWx1ZSBUaGUgaW5pdGlhbCBleHRyZW11bSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IsIGV4VmFsdWUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBjb21wdXRlZCA9IGV4VmFsdWUsXG4gICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZWQ7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGN1cnJlbnQgPSAraXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgIGlmIChjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKSkge1xuICAgICAgICAgIGNvbXB1dGVkID0gY3VycmVudDtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrXG4gICAgICogc2hvcnRoYW5kcyBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5yZWR1Y2VgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRGcm9tQXJyYXldIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YFxuICAgICAqICBhcyB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEZyb21BcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBpZiAoaW5pdEZyb21BcnJheSAmJiBsZW5ndGgpIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlUmlnaHRgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgICAqIGNhbGxiYWNrIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRGcm9tQXJyYXldIFNwZWNpZnkgdXNpbmcgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgXG4gICAgICogIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheVJlZHVjZVJpZ2h0KGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoaW5pdEZyb21BcnJheSAmJiBsZW5ndGgpIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVstLWxlbmd0aF07XG4gICAgICB9XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc3VtYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy4uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTdW0oYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IDA7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICByZXN1bHQgKz0gK2l0ZXJhdGVlKGFycmF5W2xlbmd0aF0pIHx8IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8uZGVmYXVsdHNgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uYXNzaWduYCB1c2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0VmFsdWUgVGhlIGRlc3RpbmF0aW9uIG9iamVjdCBwcm9wZXJ0eSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IHNvdXJjZVZhbHVlIFRoZSBzb3VyY2Ugb2JqZWN0IHByb3BlcnR5IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3NpZ25EZWZhdWx0cyhvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmplY3RWYWx1ZSA9PT0gdW5kZWZpbmVkID8gc291cmNlVmFsdWUgOiBvYmplY3RWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbmAgdXNlLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduRGVmYXVsdHNgIGV4Y2VwdCB0aGF0IGl0IGlnbm9yZXNcbiAgICAgKiBpbmhlcml0ZWQgcHJvcGVydHkgdmFsdWVzIHdoZW4gY2hlY2tpbmcgaWYgYSBwcm9wZXJ0eSBpcyBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3RWYWx1ZSBUaGUgZGVzdGluYXRpb24gb2JqZWN0IHByb3BlcnR5IHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gc291cmNlVmFsdWUgVGhlIHNvdXJjZSBvYmplY3QgcHJvcGVydHkgdmFsdWUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0IGFuZCBzb3VyY2UgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXNzaWduT3duRGVmYXVsdHMob2JqZWN0VmFsdWUsIHNvdXJjZVZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgcmV0dXJuIChvYmplY3RWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSlcbiAgICAgICAgPyBzb3VyY2VWYWx1ZVxuICAgICAgICA6IG9iamVjdFZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5hc3NpZ25gIGZvciBjdXN0b21pemluZyBhc3NpZ25lZCB2YWx1ZXMgd2l0aG91dFxuICAgICAqIHN1cHBvcnQgZm9yIGFyZ3VtZW50IGp1Z2dsaW5nLCBtdWx0aXBsZSBzb3VyY2VzLCBhbmQgYHRoaXNgIGJpbmRpbmcgYGN1c3RvbWl6ZXJgXG4gICAgICogZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXNzaWduV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcHJvcHMgPSBrZXlzKHNvdXJjZSksXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdLFxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIHJlc3VsdCA9IGN1c3RvbWl6ZXIodmFsdWUsIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKTtcblxuICAgICAgICBpZiAoKHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlc3VsdCAhPT0gdmFsdWUpIDogKHZhbHVlID09PSB2YWx1ZSkpIHx8XG4gICAgICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgICAgIG9iamVjdFtrZXldID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBhcmd1bWVudCBqdWdnbGluZyxcbiAgICAgKiBtdWx0aXBsZSBzb3VyY2VzLCBhbmQgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlID09IG51bGxcbiAgICAgICAgPyBvYmplY3RcbiAgICAgICAgOiBiYXNlQ29weShzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hdGAgd2l0aG91dCBzdXBwb3J0IGZvciBzdHJpbmcgY29sbGVjdGlvbnNcbiAgICAgKiBhbmQgaW5kaXZpZHVhbCBrZXkgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJbXXxzdHJpbmdbXX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIG9yIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwaWNrZWQgZWxlbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUF0KGNvbGxlY3Rpb24sIHByb3BzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpc05pbCA9IGNvbGxlY3Rpb24gPT0gbnVsbCxcbiAgICAgICAgICBpc0FyciA9ICFpc05pbCAmJiBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSxcbiAgICAgICAgICBsZW5ndGggPSBpc0FyciA/IGNvbGxlY3Rpb24ubGVuZ3RoIDogMCxcbiAgICAgICAgICBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShwcm9wc0xlbmd0aCk7XG5cbiAgICAgIHdoaWxlKCsraW5kZXggPCBwcm9wc0xlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuICAgICAgICBpZiAoaXNBcnIpIHtcbiAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXNJbmRleChrZXksIGxlbmd0aCkgPyBjb2xsZWN0aW9uW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGlzTmlsID8gdW5kZWZpbmVkIDogY29sbGVjdGlvbltrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGNvcHkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNvcHkoc291cmNlLCBwcm9wcywgb2JqZWN0KSB7XG4gICAgICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jYWxsYmFja2Agd2hpY2ggc3VwcG9ydHMgc3BlY2lmeWluZyB0aGVcbiAgICAgKiBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ0NvdW50XSBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDYWxsYmFjayhmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCkge1xuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgZnVuYztcbiAgICAgIGlmICh0eXBlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNBcmcgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gZnVuY1xuICAgICAgICAgIDogYmluZENhbGxiYWNrKGZ1bmMsIHRoaXNBcmcsIGFyZ0NvdW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VNYXRjaGVzKGZ1bmMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNBcmcgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHByb3BlcnR5KGZ1bmMpXG4gICAgICAgIDogYmFzZU1hdGNoZXNQcm9wZXJ0eShmdW5jLCB0aGlzQXJnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhcmd1bWVudCBqdWdnbGluZ1xuICAgICAqIGFuZCBgdGhpc2AgYmluZGluZyBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgYHZhbHVlYCBiZWxvbmdzIHRvLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0E9W11dIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQj1bXV0gQXNzb2NpYXRlcyBjbG9uZXMgd2l0aCBzb3VyY2UgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBpc0RlZXAsIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0KSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgICAgIGlmIChpc0Fycikge1xuICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgICAgcmV0dXJuIGFycmF5Q29weSh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRhZyA9IG9ialRvU3RyaW5nLmNhbGwodmFsdWUpLFxuICAgICAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWc7XG5cbiAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZU9iamVjdChpc0Z1bmMgPyB7fSA6IHZhbHVlKTtcbiAgICAgICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjbG9uZWFibGVUYWdzW3RhZ11cbiAgICAgICAgICAgID8gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKVxuICAgICAgICAgICAgOiAob2JqZWN0ID8gdmFsdWUgOiB7fSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gICAgICBzdGFja0EgfHwgKHN0YWNrQSA9IFtdKTtcbiAgICAgIHN0YWNrQiB8fCAoc3RhY2tCID0gW10pO1xuXG4gICAgICB2YXIgbGVuZ3RoID0gc3RhY2tBLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoc3RhY2tBW2xlbmd0aF0gPT0gdmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc3RhY2tCW2xlbmd0aF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFkZCB0aGUgc291cmNlIHZhbHVlIHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgYXNzb2NpYXRlIGl0IHdpdGggaXRzIGNsb25lLlxuICAgICAgc3RhY2tBLnB1c2godmFsdWUpO1xuICAgICAgc3RhY2tCLnB1c2gocmVzdWx0KTtcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIChpc0FyciA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gYmFzZUNsb25lKHN1YlZhbHVlLCBpc0RlZXAsIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrQSwgc3RhY2tCKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gICAgICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChpc09iamVjdChwcm90b3R5cGUpKSB7XG4gICAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICAgICAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQgfHwge307XG4gICAgICB9O1xuICAgIH0oKSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5kZWxheWAgYW5kIGBfLmRlZmVyYCB3aGljaCBhY2NlcHRzIGFuIGluZGV4XG4gICAgICogb2Ygd2hlcmUgdG8gc2xpY2UgdGhlIGFyZ3VtZW50cyB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYXJncyBUaGUgYXJndW1lbnRzIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsgZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOyB9LCB3YWl0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5kaWZmZXJlbmNlYCB3aGljaCBhY2NlcHRzIGEgc2luZ2xlIGFycmF5XG4gICAgICogb2YgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDAsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpbmRleE9mID0gZ2V0SW5kZXhPZigpLFxuICAgICAgICAgIGlzQ29tbW9uID0gaW5kZXhPZiA9PSBiYXNlSW5kZXhPZixcbiAgICAgICAgICBjYWNoZSA9IChpc0NvbW1vbiAmJiB2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpID8gY3JlYXRlQ2FjaGUodmFsdWVzKSA6IG51bGwsXG4gICAgICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIGluZGV4T2YgPSBjYWNoZUluZGV4T2Y7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcyA9IGNhY2hlO1xuICAgICAgfVxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG5cbiAgICAgICAgaWYgKGlzQ29tbW9uICYmIHZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXhPZih2YWx1ZXMsIHZhbHVlLCAwKSA8IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdHxzdHJpbmd9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqL1xuICAgIHZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrXG4gICAgICogc2hvcnRoYW5kcyBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fHN0cmluZ30gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICovXG4gICAgdmFyIGJhc2VFYWNoUmlnaHQgPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duUmlnaHQsIHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZXZlcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUV2ZXJ5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gISFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBleHRyZW11bSB2YWx1ZSBvZiBgY29sbGVjdGlvbmAgaW52b2tpbmcgYGl0ZXJhdGVlYCBmb3IgZWFjaCB2YWx1ZVxuICAgICAqIGluIGBjb2xsZWN0aW9uYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoIHRoZSB2YWx1ZSBpcyByYW5rZWQuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgZnVuY3Rpb24gdXNlZCB0byBjb21wYXJlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0geyp9IGV4VmFsdWUgVGhlIGluaXRpYWwgZXh0cmVtdW0gdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGV4dHJlbXVtIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFeHRyZW11bShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgY29tcGFyYXRvciwgZXhWYWx1ZSkge1xuICAgICAgdmFyIGNvbXB1dGVkID0gZXhWYWx1ZSxcbiAgICAgICAgICByZXN1bHQgPSBjb21wdXRlZDtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gK2l0ZXJhdGVlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIGlmIChjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKSB8fCAoY3VycmVudCA9PT0gZXhWYWx1ZSAmJiBjdXJyZW50ID09PSByZXN1bHQpKSB7XG4gICAgICAgICAgY29tcHV0ZWQgPSBjdXJyZW50O1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmlsbGAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogKCtzdGFydCB8fCAwKTtcbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGVuZCA9IChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiBsZW5ndGgpID8gbGVuZ3RoIDogKCtlbmQgfHwgMCk7XG4gICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICBlbmQgKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKGVuZCA+Pj4gMCk7XG4gICAgICBzdGFydCA+Pj49IDA7XG5cbiAgICAgIHdoaWxlIChzdGFydCA8IGxlbmd0aCkge1xuICAgICAgICBhcnJheVtzdGFydCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZGAsIGBfLmZpbmRMYXN0YCwgYF8uZmluZEtleWAsIGFuZCBgXy5maW5kTGFzdEtleWAsXG4gICAgICogd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFjayBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZywgd2hpY2ggaXRlcmF0ZXNcbiAgICAgKiBvdmVyIGBjb2xsZWN0aW9uYCB1c2luZyB0aGUgcHJvdmlkZWQgYGVhY2hGdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRLZXldIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBrZXkgb2YgdGhlIGZvdW5kIGVsZW1lbnRcbiAgICAgKiAgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZvdW5kIGVsZW1lbnQgb3IgaXRzIGtleSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRmluZChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jLCByZXRLZXkpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGtleSwgY29sbGVjdGlvbikpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXRLZXkgPyBrZXkgOiB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIGFkZGVkIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nXG4gICAgICogZmxhdHRlbmluZyBhbmQgc3BlY2lmeWluZyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgZmxhdHRlbmluZyB0byBhcnJheXMtbGlrZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGlzRGVlcCwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICAgICAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAgIChpc1N0cmljdCB8fCBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBpc0RlZXAsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9ySW5gIGFuZCBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXNcbiAgICAgKiBvdmVyIGBvYmplY3RgIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBpbnZva2luZyBgaXRlcmF0ZWVgIGZvclxuICAgICAqIGVhY2ggcHJvcGVydHkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseVxuICAgICAqIHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIHZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlRm9yYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXNcbiAgICAgKiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgdmFyIGJhc2VGb3JSaWdodCA9IGNyZWF0ZUJhc2VGb3IodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRm9ySW4ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25SaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRm9yT3duUmlnaHQob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VGb3JSaWdodChvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mdW5jdGlvbnNgIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXkgb2ZcbiAgICAgKiBgb2JqZWN0YCBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmaWx0ZXJlZCBmcm9tIHRob3NlIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZmlsdGVyLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGdW5jdGlvbnMob2JqZWN0LCBwcm9wcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9iamVjdFtrZXldKSkge1xuICAgICAgICAgIHJlc3VsdFsrK3Jlc0luZGV4XSA9IGtleTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0cmluZyBwYXRoc1xuICAgICAqIGFuZCBkZWZhdWx0IHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhLZXldIFRoZSBrZXkgcmVwcmVzZW50YXRpb24gb2YgcGF0aC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgsIHBhdGhLZXkpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocGF0aEtleSAhPT0gdW5kZWZpbmVkICYmIHBhdGhLZXkgaW4gdG9PYmplY3Qob2JqZWN0KSkge1xuICAgICAgICBwYXRoID0gW3BhdGhLZXldO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFtwYXRoW2luZGV4KytdXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aXRob3V0IHN1cHBvcnQgZm9yIGB0aGlzYCBiaW5kaW5nXG4gICAgICogYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmluZyB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNMb29zZV0gU3BlY2lmeSBwZXJmb3JtaW5nIHBhcnRpYWwgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQV0gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQl0gVHJhY2tzIHRyYXZlcnNlZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSB7XG4gICAgICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0KHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYmFzZUlzRXF1YWwsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICAgICAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmluZyBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzTG9vc2VdIFNwZWNpZnkgcGVyZm9ybWluZyBwYXJ0aWFsIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0E9W11dIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0I9W11dIFRyYWNrcyB0cmF2ZXJzZWQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBlcXVhbEZ1bmMsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSB7XG4gICAgICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgICAgICBvYmpUYWcgPSBhcnJheVRhZyxcbiAgICAgICAgICBvdGhUYWcgPSBhcnJheVRhZztcblxuICAgICAgaWYgKCFvYmpJc0Fycikge1xuICAgICAgICBvYmpUYWcgPSBvYmpUb1N0cmluZy5jYWxsKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmpUYWcgPT0gYXJnc1RhZykge1xuICAgICAgICAgIG9ialRhZyA9IG9iamVjdFRhZztcbiAgICAgICAgfSBlbHNlIGlmIChvYmpUYWcgIT0gb2JqZWN0VGFnKSB7XG4gICAgICAgICAgb2JqSXNBcnIgPSBpc1R5cGVkQXJyYXkob2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvdGhJc0Fycikge1xuICAgICAgICBvdGhUYWcgPSBvYmpUb1N0cmluZy5jYWxsKG90aGVyKTtcbiAgICAgICAgaWYgKG90aFRhZyA9PSBhcmdzVGFnKSB7XG4gICAgICAgICAgb3RoVGFnID0gb2JqZWN0VGFnO1xuICAgICAgICB9IGVsc2UgaWYgKG90aFRhZyAhPSBvYmplY3RUYWcpIHtcbiAgICAgICAgICBvdGhJc0FyciA9IGlzVHlwZWRBcnJheShvdGhlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgICAgIGlmIChpc1NhbWVUYWcgJiYgIShvYmpJc0FyciB8fCBvYmpJc09iaikpIHtcbiAgICAgICAgcmV0dXJuIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNMb29zZSkge1xuICAgICAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICAgICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgICAgICByZXR1cm4gZXF1YWxGdW5jKG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LCBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXIsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZGV0ZWN0aW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMgc2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jSk8uXG4gICAgICBzdGFja0EgfHwgKHN0YWNrQSA9IFtdKTtcbiAgICAgIHN0YWNrQiB8fCAoc3RhY2tCID0gW10pO1xuXG4gICAgICB2YXIgbGVuZ3RoID0gc3RhY2tBLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoc3RhY2tBW2xlbmd0aF0gPT0gb2JqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIHN0YWNrQltsZW5ndGhdID09IG90aGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBZGQgYG9iamVjdGAgYW5kIGBvdGhlcmAgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAgc3RhY2tBLnB1c2gob2JqZWN0KTtcbiAgICAgIHN0YWNrQi5wdXNoKG90aGVyKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IChvYmpJc0FyciA/IGVxdWFsQXJyYXlzIDogZXF1YWxPYmplY3RzKShvYmplY3QsIG90aGVyLCBlcXVhbEZ1bmMsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTtcblxuICAgICAgc3RhY2tBLnBvcCgpO1xuICAgICAgc3RhY2tCLnBvcCgpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmluZyBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gIWxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IHRvT2JqZWN0KG9iamVjdCk7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXG4gICAgICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgICAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWQgPyBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIGN1c3RvbWl6ZXIsIHRydWUpIDogcmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrIHNob3J0aGFuZHNcbiAgICAgKiBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2VzIG5vdCBjbG9uZSBgc291cmNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgICAgIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgICAgIHZhciBrZXkgPSBtYXRjaERhdGFbMF1bMF0sXG4gICAgICAgICAgICB2YWx1ZSA9IG1hdGNoRGF0YVswXVsxXTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gdmFsdWUgJiYgKHZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiB0b09iamVjdChvYmplY3QpKSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBiYXNlSXNNYXRjaChvYmplY3QsIG1hdGNoRGF0YSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lcyBub3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkocGF0aCksXG4gICAgICAgICAgaXNDb21tb24gPSBpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpLFxuICAgICAgICAgIHBhdGhLZXkgPSAocGF0aCArICcnKTtcblxuICAgICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXkgPSBwYXRoS2V5O1xuICAgICAgICBvYmplY3QgPSB0b09iamVjdChvYmplY3QpO1xuICAgICAgICBpZiAoKGlzQXJyIHx8ICFpc0NvbW1vbikgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICAgIG9iamVjdCA9IHBhdGgubGVuZ3RoID09IDEgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG4gICAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleSA9IGxhc3QocGF0aCk7XG4gICAgICAgICAgb2JqZWN0ID0gdG9PYmplY3Qob2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlXG4gICAgICAgICAgPyAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIG9iamVjdCkpXG4gICAgICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqZWN0W2tleV0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lcmdlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFyZ3VtZW50IGp1Z2dsaW5nLFxuICAgICAqIG11bHRpcGxlIHNvdXJjZXMsIGFuZCBgdGhpc2AgYmluZGluZyBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0E9W11dIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQj1bXV0gQXNzb2NpYXRlcyB2YWx1ZXMgd2l0aCBzb3VyY2UgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9XG4gICAgICB2YXIgaXNTcmNBcnIgPSBpc0FycmF5TGlrZShzb3VyY2UpICYmIChpc0FycmF5KHNvdXJjZSkgfHwgaXNUeXBlZEFycmF5KHNvdXJjZSkpLFxuICAgICAgICAgIHByb3BzID0gaXNTcmNBcnIgPyB1bmRlZmluZWQgOiBrZXlzKHNvdXJjZSk7XG5cbiAgICAgIGFycmF5RWFjaChwcm9wcyB8fCBzb3VyY2UsIGZ1bmN0aW9uKHNyY1ZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKHByb3BzKSB7XG4gICAgICAgICAga2V5ID0gc3JjVmFsdWU7XG4gICAgICAgICAgc3JjVmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3RMaWtlKHNyY1ZhbHVlKSkge1xuICAgICAgICAgIHN0YWNrQSB8fCAoc3RhY2tBID0gW10pO1xuICAgICAgICAgIHN0YWNrQiB8fCAoc3RhY2tCID0gW10pO1xuICAgICAgICAgIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGlzQ29tbW9uID0gcmVzdWx0ID09PSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoaXNDb21tb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHNyY1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKHJlc3VsdCAhPT0gdW5kZWZpbmVkIHx8IChpc1NyY0FyciAmJiAhKGtleSBpbiBvYmplY3QpKSkgJiZcbiAgICAgICAgICAgICAgKGlzQ29tbW9uIHx8IChyZXN1bHQgPT09IHJlc3VsdCA/IChyZXN1bHQgIT09IHZhbHVlKSA6ICh2YWx1ZSA9PT0gdmFsdWUpKSkpIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAgICAgKiByZWZlcmVuY2VzIHRvIGJlIG1lcmdlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0E9W11dIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQj1bXV0gQXNzb2NpYXRlcyB2YWx1ZXMgd2l0aCBzb3VyY2UgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgbWVyZ2VGdW5jLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgdmFyIGxlbmd0aCA9IHN0YWNrQS5sZW5ndGgsXG4gICAgICAgICAgc3JjVmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmIChzdGFja0FbbGVuZ3RoXSA9PSBzcmNWYWx1ZSkge1xuICAgICAgICAgIG9iamVjdFtrZXldID0gc3RhY2tCW2xlbmd0aF07XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcih2YWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzQ29tbW9uID0gcmVzdWx0ID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0NvbW1vbikge1xuICAgICAgICByZXN1bHQgPSBzcmNWYWx1ZTtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKHNyY1ZhbHVlKSAmJiAoaXNBcnJheShzcmNWYWx1ZSkgfHwgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKSkpIHtcbiAgICAgICAgICByZXN1bHQgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiAoaXNBcnJheUxpa2UodmFsdWUpID8gYXJyYXlDb3B5KHZhbHVlKSA6IFtdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSBpc0FyZ3VtZW50cyh2YWx1ZSlcbiAgICAgICAgICAgID8gdG9QbGFpbk9iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgIDogKGlzUGxhaW5PYmplY3QodmFsdWUpID8gdmFsdWUgOiB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgdmFsdWUgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzIGFuZCBhc3NvY2lhdGVcbiAgICAgIC8vIGl0IHdpdGggaXRzIG1lcmdlZCB2YWx1ZS5cbiAgICAgIHN0YWNrQS5wdXNoKHNyY1ZhbHVlKTtcbiAgICAgIHN0YWNrQi5wdXNoKHJlc3VsdCk7XG5cbiAgICAgIGlmIChpc0NvbW1vbikge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgb2JqZWN0W2tleV0gPSBtZXJnZUZ1bmMocmVzdWx0LCBzcmNWYWx1ZSwgY3VzdG9taXplciwgc3RhY2tBLCBzdGFja0IpO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IHJlc3VsdCA/IChyZXN1bHQgIT09IHZhbHVlKSA6ICh2YWx1ZSA9PT0gdmFsdWUpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICAgICAgdmFyIHBhdGhLZXkgPSAocGF0aCArICcnKTtcbiAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCwgcGF0aEtleSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogaW5kZXggYXJndW1lbnRzIGFuZCBjYXB0dXJpbmcgdGhlIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXhlcyBUaGUgaW5kZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gaW5kZXhlcy5sZW5ndGggOiAwO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKGluZGV4ICE9IHByZXZpb3VzICYmIGlzSW5kZXgoaW5kZXgpKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzID0gaW5kZXg7XG4gICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmRvbWAgd2l0aG91dCBzdXBwb3J0IGZvciBhcmd1bWVudCBqdWdnbGluZ1xuICAgICAqIGFuZCByZXR1cm5pbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbWluaW11bSBwb3NzaWJsZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IFRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJhbmRvbShtaW4sIG1heCkge1xuICAgICAgcmV0dXJuIG1pbiArIG5hdGl2ZUZsb29yKG5hdGl2ZVJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZWR1Y2VgIGFuZCBgXy5yZWR1Y2VSaWdodGAgd2l0aG91dCBzdXBwb3J0XG4gICAgICogZm9yIGNhbGxiYWNrIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYFxuICAgICAqIHVzaW5nIHRoZSBwcm92aWRlZCBgZWFjaEZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluaXRGcm9tQ29sbGVjdGlvbiBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBvciBsYXN0IGVsZW1lbnRcbiAgICAgKiAgb2YgYGNvbGxlY3Rpb25gIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEZyb21Db2xsZWN0aW9uLCBlYWNoRnVuYykge1xuICAgICAgZWFjaEZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gaW5pdEZyb21Db2xsZWN0aW9uXG4gICAgICAgICAgPyAoaW5pdEZyb21Db2xsZWN0aW9uID0gZmFsc2UsIHZhbHVlKVxuICAgICAgICAgIDogaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBkZXRlY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICAgICAgbWV0YU1hcC5zZXQoZnVuYywgZGF0YSk7XG4gICAgICByZXR1cm4gZnVuYztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHN0YXJ0ID0gc3RhcnQgPT0gbnVsbCA/IDAgOiAoK3N0YXJ0IHx8IDApO1xuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICAgICAgfVxuICAgICAgZW5kID0gKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IGxlbmd0aCkgPyBsZW5ndGggOiAoK2VuZCB8fCAwKTtcbiAgICAgIGlmIChlbmQgPCAwKSB7XG4gICAgICAgIGVuZCArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gICAgICBzdGFydCA+Pj49IDA7XG5cbiAgICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb21lYCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrIHNob3J0aGFuZHNcbiAgICAgKiBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiAhcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAgdG8gZGVmaW5lXG4gICAgICogdGhlIHNvcnQgb3JkZXIgb2YgYGFycmF5YCBhbmQgcmVwbGFjZXMgY3JpdGVyaWEgb2JqZWN0cyB3aXRoIHRoZWlyXG4gICAgICogY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzb3J0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBkZWZpbmUgc29ydCBvcmRlci5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgYXJyYXkuc29ydChjb21wYXJlcik7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgYXJyYXlbbGVuZ3RoXSA9IGFycmF5W2xlbmd0aF0udmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5T3JkZXJgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb25bXXxPYmplY3RbXXxzdHJpbmdbXX0gaXRlcmF0ZWVzIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW5bXX0gb3JkZXJzIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRCeU9yZGVyKGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKSB7XG4gICAgICB2YXIgY2FsbGJhY2sgPSBnZXRDYWxsYmFjaygpLFxuICAgICAgICAgIGluZGV4ID0gLTE7XG5cbiAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHsgcmV0dXJuIGNhbGxiYWNrKGl0ZXJhdGVlKTsgfSk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBiYXNlTWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciBjcml0ZXJpYSA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHsgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTsgfSk7XG4gICAgICAgIHJldHVybiB7ICdjcml0ZXJpYSc6IGNyaXRlcmlhLCAnaW5kZXgnOiArK2luZGV4LCAndmFsdWUnOiB2YWx1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBiYXNlU29ydEJ5KHJlc3VsdCwgZnVuY3Rpb24ob2JqZWN0LCBvdGhlcikge1xuICAgICAgICByZXR1cm4gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zdW1gIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgc2hvcnRoYW5kc1xuICAgICAqIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU3VtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHQgKz0gK2l0ZXJhdGVlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikgfHwgMDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxYCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrIHNob3J0aGFuZHNcbiAgICAgKiBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUtdmFsdWUtZnJlZSBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluZGV4T2YgPSBnZXRJbmRleE9mKCksXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGlzQ29tbW9uID0gaW5kZXhPZiA9PSBiYXNlSW5kZXhPZixcbiAgICAgICAgICBpc0xhcmdlID0gaXNDb21tb24gJiYgbGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUsXG4gICAgICAgICAgc2VlbiA9IGlzTGFyZ2UgPyBjcmVhdGVDYWNoZSgpIDogbnVsbCxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgaWYgKHNlZW4pIHtcbiAgICAgICAgaW5kZXhPZiA9IGNhY2hlSW5kZXhPZjtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTGFyZ2UgPSBmYWxzZTtcbiAgICAgICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSA6IHZhbHVlO1xuXG4gICAgICAgIGlmIChpc0NvbW1vbiAmJiB2YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBjb21wdXRlZCwgMCkgPCAwKSB7XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlIHx8IGlzTGFyZ2UpIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICAgICAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIG9mIGBwcm9wc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBvYmplY3RbcHJvcHNbaW5kZXhdXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZHJvcFJpZ2h0V2hpbGVgLCBgXy5kcm9wV2hpbGVgLCBgXy50YWtlUmlnaHRXaGlsZWAsXG4gICAgICogYW5kIGBfLnRha2VXaGlsZWAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFjayBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRHJvcF0gU3BlY2lmeSBkcm9wcGluZyBlbGVtZW50cyBpbnN0ZWFkIG9mIHRha2luZyB0aGVtLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSwgaXNEcm9wLCBmcm9tUmlnaHQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMTtcblxuICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkgJiYgcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge31cbiAgICAgIHJldHVybiBpc0Ryb3BcbiAgICAgICAgPyBiYXNlU2xpY2UoYXJyYXksIChmcm9tUmlnaHQgPyAwIDogaW5kZXgpLCAoZnJvbVJpZ2h0ID8gaW5kZXggKyAxIDogbGVuZ3RoKSlcbiAgICAgICAgOiBiYXNlU2xpY2UoYXJyYXksIChmcm9tUmlnaHQgPyBpbmRleCArIDEgOiAwKSwgKGZyb21SaWdodCA/IGxlbmd0aCA6IGluZGV4KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHdyYXBwZXJWYWx1ZWAgd2hpY2ggcmV0dXJucyB0aGUgcmVzdWx0IG9mXG4gICAgICogcGVyZm9ybWluZyBhIHNlcXVlbmNlIG9mIGFjdGlvbnMgb24gdGhlIHVud3JhcHBlZCBgdmFsdWVgLCB3aGVyZSBlYWNoXG4gICAgICogc3VjY2Vzc2l2ZSBhY3Rpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhY3Rpb25zIEFjdGlvbnMgdG8gcGVmb3JtIHRvIHJlc29sdmUgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVdyYXBwZXJWYWx1ZSh2YWx1ZSwgYWN0aW9ucykge1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC52YWx1ZSgpO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYWN0aW9ucy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25zW2luZGV4XTtcbiAgICAgICAgcmVzdWx0ID0gYWN0aW9uLmZ1bmMuYXBwbHkoYWN0aW9uLnRoaXNBcmcsIGFycmF5UHVzaChbcmVzdWx0XSwgYWN0aW9uLmFyZ3MpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoIG9mIGBhcnJheWAgdG8gZGV0ZXJtaW5lIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmluYXJ5SW5kZXgoYXJyYXksIHZhbHVlLCByZXRIaWdoZXN0KSB7XG4gICAgICB2YXIgbG93ID0gMCxcbiAgICAgICAgICBoaWdoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiBsb3c7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT09IHZhbHVlICYmIGhpZ2ggPD0gSEFMRl9NQVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgICAgdmFyIG1pZCA9IChsb3cgKyBoaWdoKSA+Pj4gMSxcbiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBhcnJheVttaWRdO1xuXG4gICAgICAgICAgaWYgKChyZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKSkgJiYgY29tcHV0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoaWdoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJpbmFyeUluZGV4QnkoYXJyYXksIHZhbHVlLCBpZGVudGl0eSwgcmV0SGlnaGVzdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiaW5hcnlJbmRleGAgZXhjZXB0IHRoYXQgaXQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvclxuICAgICAqIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXIgc29ydCByYW5raW5nLiBUaGVcbiAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJpbmFyeUluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkge1xuICAgICAgdmFsdWUgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgIHZhciBsb3cgPSAwLFxuICAgICAgICAgIGhpZ2ggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDAsXG4gICAgICAgICAgdmFsSXNOYU4gPSB2YWx1ZSAhPT0gdmFsdWUsXG4gICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgdmFsSXNVbmRlZiA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgIHZhciBtaWQgPSBuYXRpdmVGbG9vcigobG93ICsgaGlnaCkgLyAyKSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUoYXJyYXlbbWlkXSksXG4gICAgICAgICAgICBpc0RlZiA9IGNvbXB1dGVkICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBpc1JlZmxleGl2ZSA9IGNvbXB1dGVkID09PSBjb21wdXRlZDtcblxuICAgICAgICBpZiAodmFsSXNOYU4pIHtcbiAgICAgICAgICB2YXIgc2V0TG93ID0gaXNSZWZsZXhpdmUgfHwgcmV0SGlnaGVzdDtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc051bGwpIHtcbiAgICAgICAgICBzZXRMb3cgPSBpc1JlZmxleGl2ZSAmJiBpc0RlZiAmJiAocmV0SGlnaGVzdCB8fCBjb21wdXRlZCAhPSBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc1VuZGVmKSB7XG4gICAgICAgICAgc2V0TG93ID0gaXNSZWZsZXhpdmUgJiYgKHJldEhpZ2hlc3QgfHwgaXNEZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXB1dGVkID09IG51bGwpIHtcbiAgICAgICAgICBzZXRMb3cgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRMb3cgPSByZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0TG93KSB7XG4gICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlTWluKGhpZ2gsIE1BWF9BUlJBWV9JTkRFWCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlQ2FsbGJhY2tgIHdoaWNoIG9ubHkgc3VwcG9ydHMgYHRoaXNgIGJpbmRpbmdcbiAgICAgKiBhbmQgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYmluZC5cbiAgICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ0NvdW50XSBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJpbmRDYWxsYmFjayhmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXNBcmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZnVuYztcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoYXJnQ291bnQpIHtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgY2FzZSA1OiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyLCBrZXksIG9iamVjdCwgc291cmNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgb3RoZXIsIGtleSwgb2JqZWN0LCBzb3VyY2UpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGdpdmVuIGFycmF5IGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1ZmZlcikge1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXIuYnl0ZUxlbmd0aCksXG4gICAgICAgICAgdmlldyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdCk7XG5cbiAgICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlcikpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAgICAgKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMpIHtcbiAgICAgIHZhciBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICAgICAgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgYXJnc0xlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpO1xuXG4gICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICB9XG4gICAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXgrK10gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICAgICAqIGlzIHRhaWxvcmVkIGZvciBgXy5wYXJ0aWFsUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycykge1xuICAgICAgdmFyIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgICAgICBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICBhcmdzTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgICAgIHJpZ2h0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGFyZ3NMZW5ndGggKyByaWdodExlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0ID0gYXJnc0luZGV4O1xuICAgICAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uY291bnRCeWAsIGBfLmdyb3VwQnlgLCBgXy5pbmRleEJ5YCwgb3IgYF8ucGFydGl0aW9uYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQga2V5cyBhbmQgdmFsdWVzIG9mIHRoZSBhY2N1bXVsYXRvciBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgYWNjdW11bGF0b3Igb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuICAgICAgICBpdGVyYXRlZSA9IGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTtcblxuICAgICAgICBpZiAoaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblxuICAgICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBjb2xsZWN0aW9uW2luZGV4XTtcbiAgICAgICAgICAgIHNldHRlcihyZXN1bHQsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pLCBjb2xsZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgc2V0dGVyKHJlc3VsdCwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pLCBjb2xsZWN0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uYXNzaWduYCwgYF8uZGVmYXVsdHNgLCBvciBgXy5tZXJnZWAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gICAgICByZXR1cm4gcmVzdFBhcmFtKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzW2xlbmd0aCAtIDJdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRoaXNBcmcgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGN1c3RvbWl6ZXIgPSBiaW5kQ2FsbGJhY2soY3VzdG9taXplciwgdGhpc0FyZywgNSk7XG4gICAgICAgICAgbGVuZ3RoIC09IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VzdG9taXplciA9IHR5cGVvZiB0aGlzQXJnID09ICdmdW5jdGlvbicgPyB0aGlzQXJnIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGxlbmd0aCAtPSAoY3VzdG9taXplciA/IDEgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgICAgIGxlbmd0aCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbiA/IGdldExlbmd0aChjb2xsZWN0aW9uKSA6IDA7XG4gICAgICAgIGlmICghaXNMZW5ndGgobGVuZ3RoKSkge1xuICAgICAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IHRvT2JqZWN0KGNvbGxlY3Rpb24pO1xuXG4gICAgICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIGBfLmZvckluYCBvciBgXy5mb3JJblJpZ2h0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgICAgIHZhciBpdGVyYWJsZSA9IHRvT2JqZWN0KG9iamVjdCksXG4gICAgICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gICAgICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcbiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIGFuZCBpbnZva2VzIGl0IHdpdGggdGhlIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQmluZFdyYXBwZXIoZnVuYywgdGhpc0FyZykge1xuICAgICAgdmFyIEN0b3IgPSBjcmVhdGVDdG9yV3JhcHBlcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYFNldGAgY2FjaGUgb2JqZWN0IHRvIG9wdGltaXplIGxpbmVhciBzZWFyY2hlcyBvZiBsYXJnZSBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gICAgICogQHJldHVybnMge251bGx8T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgY2FjaGUgb2JqZWN0IGlmIGBTZXRgIGlzIHN1cHBvcnRlZCwgZWxzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FjaGUodmFsdWVzKSB7XG4gICAgICByZXR1cm4gKG5hdGl2ZUNyZWF0ZSAmJiBTZXQpID8gbmV3IFNldENhY2hlKHZhbHVlcykgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGNvbXBvdW5kIHdvcmRzIG91dCBvZiB0aGUgd29yZHMgaW4gYVxuICAgICAqIGdpdmVuIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmUgZWFjaCB3b3JkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvdW5kZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG91bmRlcihjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGFycmF5ID0gd29yZHMoZGVidXJyKHN0cmluZykpLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gJyc7XG5cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhyZXN1bHQsIGFycmF5W2luZGV4XSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGFuIGluc3RhbmNlIG9mIGBDdG9yYCByZWdhcmRsZXNzIG9mXG4gICAgICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUN0b3JXcmFwcGVyKEN0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuXG4gICAgICAgIC8vIFNlZSBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDdG9yO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGJhc2VDcmVhdGUoQ3Rvci5wcm90b3R5cGUpLFxuICAgICAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAgICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2VzNS5naXRodWIuaW8vI3gxMy4yLjIgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmbGFnIFRoZSBjdXJyeSBiaXQgZmxhZy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyeSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDdXJyeShmbGFnKSB7XG4gICAgICBmdW5jdGlvbiBjdXJyeUZ1bmMoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChmdW5jLCBhcml0eSwgZ3VhcmQpKSB7XG4gICAgICAgICAgYXJpdHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXBwZXIoZnVuYywgZmxhZywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gY3VycnlGdW5jLnBsYWNlaG9sZGVyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJ5RnVuYztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uZGVmYXVsdHNgIG9yIGBfLmRlZmF1bHRzRGVlcGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVmYXVsdHMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdHMoYXNzaWduZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHJldHVybiByZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICB2YXIgb2JqZWN0ID0gYXJnc1swXTtcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBhcmdzLnB1c2goY3VzdG9taXplcik7XG4gICAgICAgIHJldHVybiBhc3NpZ25lci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLm1heGAgb3IgYF8ubWluYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgZnVuY3Rpb24gdXNlZCB0byBjb21wYXJlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0geyp9IGV4VmFsdWUgVGhlIGluaXRpYWwgZXh0cmVtdW0gdmFsdWUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZXh0cmVtdW0gZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRXh0cmVtdW0oY29tcGFyYXRvciwgZXhWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0aGlzQXJnICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSkge1xuICAgICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpO1xuICAgICAgICBpZiAoaXRlcmF0ZWUubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBjb2xsZWN0aW9uID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB0b0l0ZXJhYmxlKGNvbGxlY3Rpb24pO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBhcnJheUV4dHJlbXVtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBjb21wYXJhdG9yLCBleFZhbHVlKTtcbiAgICAgICAgICBpZiAoIShjb2xsZWN0aW9uLmxlbmd0aCAmJiByZXN1bHQgPT09IGV4VmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZUV4dHJlbXVtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBjb21wYXJhdG9yLCBleFZhbHVlKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZpbmRgIG9yIGBfLmZpbmRMYXN0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmluZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGaW5kKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTtcbiAgICAgICAgaWYgKGlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSBiYXNlRmluZEluZGV4KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbVJpZ2h0KTtcbiAgICAgICAgICByZXR1cm4gaW5kZXggPiAtMSA/IGNvbGxlY3Rpb25baW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlRmluZChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZpbmRJbmRleGAgb3IgYF8uZmluZExhc3RJbmRleGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZpbmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmluZEluZGV4KGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBwcmVkaWNhdGUgPSBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpO1xuICAgICAgICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tUmlnaHQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uZmluZEtleWAgb3IgYF8uZmluZExhc3RLZXlgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvYmplY3RGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZpbmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmluZEtleShvYmplY3RGdW5jKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTtcbiAgICAgICAgcmV0dXJuIGJhc2VGaW5kKG9iamVjdCwgcHJlZGljYXRlLCBvYmplY3RGdW5jLCB0cnVlKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZsb3dgIG9yIGBfLmZsb3dSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZsb3cgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmxvdyhmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIsXG4gICAgICAgICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgICAgIGxlZnRJbmRleCA9IDAsXG4gICAgICAgICAgICBmdW5jcyA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmNzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF3cmFwcGVyICYmIExvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnUgJiYgZ2V0RnVuY05hbWUoZnVuYykgPT0gJ3dyYXBwZXInKSB7XG4gICAgICAgICAgICB3cmFwcGVyID0gbmV3IExvZGFzaFdyYXBwZXIoW10sIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbmRleCA9IHdyYXBwZXIgPyAtMSA6IGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBmdW5jID0gZnVuY3NbaW5kZXhdO1xuXG4gICAgICAgICAgdmFyIGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksXG4gICAgICAgICAgICAgIGRhdGEgPSBmdW5jTmFtZSA9PSAnd3JhcHBlcicgPyBnZXREYXRhKGZ1bmMpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNMYXppYWJsZShkYXRhWzBdKSAmJiBkYXRhWzFdID09IChBUllfRkxBRyB8IENVUlJZX0ZMQUcgfCBQQVJUSUFMX0ZMQUcgfCBSRUFSR19GTEFHKSAmJiAhZGF0YVs0XS5sZW5ndGggJiYgZGF0YVs5XSA9PSAxKSB7XG4gICAgICAgICAgICB3cmFwcGVyID0gd3JhcHBlcltnZXRGdW5jTmFtZShkYXRhWzBdKV0uYXBwbHkod3JhcHBlciwgZGF0YVszXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdyYXBwZXIgPSAoZnVuYy5sZW5ndGggPT0gMSAmJiBpc0xhemlhYmxlKGZ1bmMpKSA/IHdyYXBwZXJbZnVuY05hbWVdKCkgOiB3cmFwcGVyLnRocnUoZnVuYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdO1xuXG4gICAgICAgICAgaWYgKHdyYXBwZXIgJiYgYXJncy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIucGxhbnQodmFsdWUpLnZhbHVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGxlbmd0aCA/IGZ1bmNzW2luZGV4XS5hcHBseSh0aGlzLCBhcmdzKSA6IHZhbHVlO1xuXG4gICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNzW2luZGV4XS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8uZm9yRWFjaGAgb3IgYF8uZm9yRWFjaFJpZ2h0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXJyYXlGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYW4gYXJyYXkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZWFjaCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGb3JFYWNoKGFycmF5RnVuYywgZWFjaEZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSwgdGhpc0FyZykge1xuICAgICAgICByZXR1cm4gKHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nICYmIHRoaXNBcmcgPT09IHVuZGVmaW5lZCAmJiBpc0FycmF5KGNvbGxlY3Rpb24pKVxuICAgICAgICAgID8gYXJyYXlGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKVxuICAgICAgICAgIDogZWFjaEZ1bmMoY29sbGVjdGlvbiwgYmluZENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8uZm9ySW5gIG9yIGBfLmZvckluUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvYmplY3RGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGVhY2ggZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ySW4ob2JqZWN0RnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRlZSAhPSAnZnVuY3Rpb24nIHx8IHRoaXNBcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGl0ZXJhdGVlID0gYmluZENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0RnVuYyhvYmplY3QsIGl0ZXJhdGVlLCBrZXlzSW4pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gZm9yIGBfLmZvck93bmAgb3IgYF8uZm9yT3duUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvYmplY3RGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGVhY2ggZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRm9yT3duKG9iamVjdEZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0ZWUgIT0gJ2Z1bmN0aW9uJyB8fCB0aGlzQXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpdGVyYXRlZSA9IGJpbmRDYWxsYmFjayhpdGVyYXRlZSwgdGhpc0FyZywgMyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdEZ1bmMob2JqZWN0LCBpdGVyYXRlZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8ubWFwS2V5c2Agb3IgYF8ubWFwVmFsdWVzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNNYXBLZXlzXSBTcGVjaWZ5IG1hcHBpbmcga2V5cyBpbnN0ZWFkIG9mIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtYXAgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0TWFwcGVyKGlzTWFwS2V5cykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICBpdGVyYXRlZSA9IGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTtcblxuICAgICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICAgICAgdmFyIG1hcHBlZCA9IGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCk7XG4gICAgICAgICAga2V5ID0gaXNNYXBLZXlzID8gbWFwcGVkIDoga2V5O1xuICAgICAgICAgIHZhbHVlID0gaXNNYXBLZXlzID8gdmFsdWUgOiBtYXBwZWQ7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8ucGFkTGVmdGAgb3IgYF8ucGFkUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgcGFkZGluZyBmcm9tIHRoZSByaWdodC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUGFkRGlyKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIChmcm9tUmlnaHQgPyBzdHJpbmcgOiAnJykgKyBjcmVhdGVQYWRkaW5nKHN0cmluZywgbGVuZ3RoLCBjaGFycykgKyAoZnJvbVJpZ2h0ID8gJycgOiBzdHJpbmcpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8ucGFydGlhbGAgb3IgYF8ucGFydGlhbFJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmbGFnIFRoZSBwYXJ0aWFsIGJpdCBmbGFnLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWwgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUGFydGlhbChmbGFnKSB7XG4gICAgICB2YXIgcGFydGlhbEZ1bmMgPSByZXN0UGFyYW0oZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgcGFydGlhbEZ1bmMucGxhY2Vob2xkZXIpO1xuICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcihmdW5jLCBmbGFnLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcnRpYWxGdW5jO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8ucmVkdWNlYCBvciBgXy5yZWR1Y2VSaWdodGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFycmF5RnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGFuIGFycmF5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYSBjb2xsZWN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGVhY2ggZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGFycmF5RnVuYywgZWFjaEZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIGluaXRGcm9tQXJyYXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzQXJnID09PSB1bmRlZmluZWQgJiYgaXNBcnJheShjb2xsZWN0aW9uKSlcbiAgICAgICAgICA/IGFycmF5RnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQXJyYXkpXG4gICAgICAgICAgOiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24sIGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCA0KSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQXJyYXksIGVhY2hGdW5jKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIGFuZCBpbnZva2VzIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gcmVmZXJlbmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIG9mIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBwZXJgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc1JpZ2h0XSBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzUmlnaHRdIFRoZSBgcGFydGlhbHNSaWdodGAgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVIeWJyaWRXcmFwcGVyKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICAgICAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIEFSWV9GTEFHLFxuICAgICAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBCSU5EX0ZMQUcsXG4gICAgICAgICAgaXNCaW5kS2V5ID0gYml0bWFzayAmIEJJTkRfS0VZX0ZMQUcsXG4gICAgICAgICAgaXNDdXJyeSA9IGJpdG1hc2sgJiBDVVJSWV9GTEFHLFxuICAgICAgICAgIGlzQ3VycnlCb3VuZCA9IGJpdG1hc2sgJiBDVVJSWV9CT1VORF9GTEFHLFxuICAgICAgICAgIGlzQ3VycnlSaWdodCA9IGJpdG1hc2sgJiBDVVJSWV9SSUdIVF9GTEFHLFxuICAgICAgICAgIEN0b3IgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBjcmVhdGVDdG9yV3JhcHBlcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgLy8gQXZvaWQgYGFyZ3VtZW50c2Agb2JqZWN0IHVzZSBkaXNxdWFsaWZ5aW5nIG9wdGltaXphdGlvbnMgYnlcbiAgICAgICAgLy8gY29udmVydGluZyBpdCB0byBhbiBhcnJheSBiZWZvcmUgcHJvdmlkaW5nIGl0IHRvIG90aGVyIGZ1bmN0aW9ucy5cbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgICAgIGFyZ3MgPSBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRpYWxzUmlnaHQpIHtcbiAgICAgICAgICBhcmdzID0gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0N1cnJ5IHx8IGlzQ3VycnlSaWdodCkge1xuICAgICAgICAgIHZhciBwbGFjZWhvbGRlciA9IHdyYXBwZXIucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIGFyZ3NIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuXG4gICAgICAgICAgbGVuZ3RoIC09IGFyZ3NIb2xkZXJzLmxlbmd0aDtcbiAgICAgICAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICAgIHZhciBuZXdBcmdQb3MgPSBhcmdQb3MgPyBhcnJheUNvcHkoYXJnUG9zKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBuZXdBcml0eSA9IG5hdGl2ZU1heChhcml0eSAtIGxlbmd0aCwgMCksXG4gICAgICAgICAgICAgICAgbmV3c0hvbGRlcnMgPSBpc0N1cnJ5ID8gYXJnc0hvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGFyZ3NIb2xkZXJzLFxuICAgICAgICAgICAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IGFyZ3MgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBhcmdzO1xuXG4gICAgICAgICAgICBiaXRtYXNrIHw9IChpc0N1cnJ5ID8gUEFSVElBTF9GTEFHIDogUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICAgICAgICAgIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gUEFSVElBTF9SSUdIVF9GTEFHIDogUEFSVElBTF9GTEFHKTtcblxuICAgICAgICAgICAgaWYgKCFpc0N1cnJ5Qm91bmQpIHtcbiAgICAgICAgICAgICAgYml0bWFzayAmPSB+KEJJTkRfRkxBRyB8IEJJTkRfS0VZX0ZMQUcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld0RhdGEgPSBbZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld3NIb2xkZXJzLCBuZXdQYXJ0aWFsc1JpZ2h0LCBuZXdIb2xkZXJzUmlnaHQsIG5ld0FyZ1BvcywgYXJ5LCBuZXdBcml0eV0sXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlSHlicmlkV3JhcHBlci5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuXG4gICAgICAgICAgICBpZiAoaXNMYXppYWJsZShmdW5jKSkge1xuICAgICAgICAgICAgICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLFxuICAgICAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICAgICAgaWYgKGFyZ1Bvcykge1xuICAgICAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJ5ICYmIGFyeSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgYXJncy5sZW5ndGggPSBhcnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgICAgIGZuID0gQ3RvciB8fCBjcmVhdGVDdG9yV3JhcHBlcihmdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgcGFkZGluZyByZXF1aXJlZCBmb3IgYHN0cmluZ2AgYmFzZWQgb24gdGhlIGdpdmVuIGBsZW5ndGhgLlxuICAgICAqIFRoZSBgY2hhcnNgIHN0cmluZyBpcyB0cnVuY2F0ZWQgaWYgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4Y2VlZHMgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjcmVhdGUgcGFkZGluZyBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWQgZm9yIGBzdHJpbmdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgICAgIGxlbmd0aCA9ICtsZW5ndGg7XG5cbiAgICAgIGlmIChzdHJMZW5ndGggPj0gbGVuZ3RoIHx8ICFuYXRpdmVJc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHZhciBwYWRMZW5ndGggPSBsZW5ndGggLSBzdHJMZW5ndGg7XG4gICAgICBjaGFycyA9IGNoYXJzID09IG51bGwgPyAnICcgOiAoY2hhcnMgKyAnJyk7XG4gICAgICByZXR1cm4gcmVwZWF0KGNoYXJzLCBuYXRpdmVDZWlsKHBhZExlbmd0aCAvIGNoYXJzLmxlbmd0aCkpLnNsaWNlKDAsIHBhZExlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIGFuZCBpbnZva2VzIGl0IHdpdGggdGhlIG9wdGlvbmFsIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiB0aGUgd3JhcHBlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBvZiBmbGFncy4gU2VlIGBjcmVhdGVXcmFwcGVyYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWxXcmFwcGVyKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIEJJTkRfRkxBRyxcbiAgICAgICAgICBDdG9yID0gY3JlYXRlQ3RvcldyYXBwZXIoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIC8vIEF2b2lkIGBhcmd1bWVudHNgIG9iamVjdCB1c2UgZGlzcXVhbGlmeWluZyBvcHRpbWl6YXRpb25zIGJ5XG4gICAgICAgIC8vIGNvbnZlcnRpbmcgaXQgdG8gYW4gYXJyYXkgYmVmb3JlIHByb3ZpZGluZyBpdCBgZnVuY2AuXG4gICAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uY2VpbGAsIGBfLmZsb29yYCwgb3IgYF8ucm91bmRgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYE1hdGhgIG1ldGhvZCB0byB1c2Ugd2hlbiByb3VuZGluZy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByb3VuZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSb3VuZChtZXRob2ROYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IE1hdGhbbWV0aG9kTmFtZV07XG4gICAgICByZXR1cm4gZnVuY3Rpb24obnVtYmVyLCBwcmVjaXNpb24pIHtcbiAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAwIDogKCtwcmVjaXNpb24gfHwgMCk7XG4gICAgICAgIGlmIChwcmVjaXNpb24pIHtcbiAgICAgICAgICBwcmVjaXNpb24gPSBwb3coMTAsIHByZWNpc2lvbik7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMobnVtYmVyICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYyhudW1iZXIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uc29ydGVkSW5kZXhgIG9yIGBfLnNvcnRlZExhc3RJbmRleGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbmRleCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVTb3J0ZWRJbmRleChyZXRIaWdoZXN0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgdGhpc0FyZykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSBnZXRDYWxsYmFjayhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBjYWxsYmFjayA9PT0gYmFzZUNhbGxiYWNrKVxuICAgICAgICAgID8gYmluYXJ5SW5kZXgoYXJyYXksIHZhbHVlLCByZXRIaWdoZXN0KVxuICAgICAgICAgIDogYmluYXJ5SW5kZXhCeShhcnJheSwgdmFsdWUsIGNhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAxKSwgcmV0SGlnaGVzdCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAgICAgKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gcmVmZXJlbmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIG9mIGZsYWdzLlxuICAgICAqICBUaGUgYml0bWFzayBtYXkgYmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBmbGFnczpcbiAgICAgKiAgICAgMSAtIGBfLmJpbmRgXG4gICAgICogICAgIDIgLSBgXy5iaW5kS2V5YFxuICAgICAqICAgICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb25cbiAgICAgKiAgICAgOCAtIGBfLmN1cnJ5YFxuICAgICAqICAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAgICAgKiAgICAzMiAtIGBfLnBhcnRpYWxgXG4gICAgICogICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gICAgICogICAxMjggLSBgXy5yZWFyZ2BcbiAgICAgKiAgIDI1NiAtIGBfLmFyeWBcbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVXcmFwcGVyKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgQklORF9LRVlfRkxBRztcbiAgICAgIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihQQVJUSUFMX0ZMQUcgfCBQQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgICAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBsZW5ndGggLT0gKGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDApO1xuICAgICAgaWYgKGJpdG1hc2sgJiBQQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpLFxuICAgICAgICAgIG5ld0RhdGEgPSBbZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XTtcblxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgbWVyZ2VEYXRhKG5ld0RhdGEsIGRhdGEpO1xuICAgICAgICBiaXRtYXNrID0gbmV3RGF0YVsxXTtcbiAgICAgICAgYXJpdHkgPSBuZXdEYXRhWzldO1xuICAgICAgfVxuICAgICAgbmV3RGF0YVs5XSA9IGFyaXR5ID09IG51bGxcbiAgICAgICAgPyAoaXNCaW5kS2V5ID8gMCA6IGZ1bmMubGVuZ3RoKVxuICAgICAgICA6IChuYXRpdmVNYXgoYXJpdHkgLSBsZW5ndGgsIDApIHx8IDApO1xuXG4gICAgICBpZiAoYml0bWFzayA9PSBCSU5EX0ZMQUcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmRXcmFwcGVyKG5ld0RhdGFbMF0sIG5ld0RhdGFbMl0pO1xuICAgICAgfSBlbHNlIGlmICgoYml0bWFzayA9PSBQQVJUSUFMX0ZMQUcgfHwgYml0bWFzayA9PSAoQklORF9GTEFHIHwgUEFSVElBTF9GTEFHKSkgJiYgIW5ld0RhdGFbNF0ubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVBhcnRpYWxXcmFwcGVyLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWRXcmFwcGVyLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gICAgICB9XG4gICAgICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgICAgIHJldHVybiBzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaW5nIGFycmF5cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0xvb3NlXSBTcGVjaWZ5IHBlcmZvcm1pbmcgcGFydGlhbCBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbc3RhY2tBXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbc3RhY2tCXSBUcmFja3MgdHJhdmVyc2VkIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgZXF1YWxGdW5jLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICAgICAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc0xvb3NlICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICAgICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF0sXG4gICAgICAgICAgICByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihpc0xvb3NlID8gb3RoVmFsdWUgOiBhcnJWYWx1ZSwgaXNMb29zZSA/IGFyclZhbHVlIDogb3RoVmFsdWUsIGluZGV4KSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGlmIChpc0xvb3NlKSB7XG4gICAgICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQik7XG4gICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAgICAgKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICAgICAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBib29sVGFnOlxuICAgICAgICBjYXNlIGRhdGVUYWc6XG4gICAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1iZXJzLCBkYXRlcyB0byBtaWxsaXNlY29uZHMgYW5kIGJvb2xlYW5zXG4gICAgICAgICAgLy8gdG8gYDFgIG9yIGAwYCB0cmVhdGluZyBpbnZhbGlkIGRhdGVzIGNvZXJjZWQgdG8gYE5hTmAgYXMgbm90IGVxdWFsLlxuICAgICAgICAgIHJldHVybiArb2JqZWN0ID09ICtvdGhlcjtcblxuICAgICAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICAgICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAgICAgLy8gVHJlYXQgYE5hTmAgdnMuIGBOYU5gIGFzIGVxdWFsLlxuICAgICAgICAgIHJldHVybiAob2JqZWN0ICE9ICtvYmplY3QpXG4gICAgICAgICAgICA/IG90aGVyICE9ICtvdGhlclxuICAgICAgICAgICAgOiBvYmplY3QgPT0gK290aGVyO1xuXG4gICAgICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzIHByaW1pdGl2ZXMgYW5kIHN0cmluZ1xuICAgICAgICAgIC8vIG9iamVjdHMgYXMgZXF1YWwuIFNlZSBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS4xMC42LjQgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICAgICAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaW5nIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0xvb3NlXSBTcGVjaWZ5IHBlcmZvcm1pbmcgcGFydGlhbCBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbc3RhY2tBXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbc3RhY2tCXSBUcmFja3MgdHJhdmVyc2VkIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgZXF1YWxGdW5jLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgdmFyIG9ialByb3BzID0ga2V5cyhvYmplY3QpLFxuICAgICAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgICAgICBvdGhQcm9wcyA9IGtleXMob3RoZXIpLFxuICAgICAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICAgICAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzTG9vc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICAgICAgaWYgKCEoaXNMb29zZSA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgc2tpcEN0b3IgPSBpc0xvb3NlO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICAgICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgICAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XSxcbiAgICAgICAgICAgIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKGlzTG9vc2UgPyBvdGhWYWx1ZSA6IG9ialZhbHVlLCBpc0xvb3NlPyBvYmpWYWx1ZSA6IG90aFZhbHVlLCBrZXkpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZCA/IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSA6IHJlc3VsdCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICAgICAgfVxuICAgICAgaWYgKCFza2lwQ3Rvcikge1xuICAgICAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgICAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICAgICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIFwiY2FsbGJhY2tcIiBmdW5jdGlvbi4gSWYgdGhlIGBfLmNhbGxiYWNrYCBtZXRob2QgaXNcbiAgICAgKiBjdXN0b21pemVkIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VzdG9tIG1ldGhvZCwgb3RoZXJ3aXNlIGl0IHJldHVybnNcbiAgICAgKiB0aGUgYGJhc2VDYWxsYmFja2AgZnVuY3Rpb24uIElmIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdGhlIGNob3NlbiBmdW5jdGlvblxuICAgICAqIGlzIGludm9rZWQgd2l0aCB0aGVtIGFuZCBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNob3NlbiBmdW5jdGlvbiBvciBpdHMgcmVzdWx0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldENhbGxiYWNrKGZ1bmMsIHRoaXNBcmcsIGFyZ0NvdW50KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoLmNhbGxiYWNrIHx8IGNhbGxiYWNrO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0ID09PSBjYWxsYmFjayA/IGJhc2VDYWxsYmFjayA6IHJlc3VsdDtcbiAgICAgIHJldHVybiBhcmdDb3VudCA/IHJlc3VsdChmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCkgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAgIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmFtZSBvZiBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMubmFtZSxcbiAgICAgICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgICAgIG90aGVyRnVuYyA9IGRhdGEuZnVuYztcbiAgICAgICAgaWYgKG90aGVyRnVuYyA9PSBudWxsIHx8IG90aGVyRnVuYyA9PSBmdW5jKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBcImluZGV4T2ZcIiBmdW5jdGlvbi4gSWYgdGhlIGBfLmluZGV4T2ZgIG1ldGhvZCBpc1xuICAgICAqIGN1c3RvbWl6ZWQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXN0b20gbWV0aG9kLCBvdGhlcndpc2UgaXQgcmV0dXJuc1xuICAgICAqIHRoZSBgYmFzZUluZGV4T2ZgIGZ1bmN0aW9uLiBJZiBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRoZSBjaG9zZW4gZnVuY3Rpb25cbiAgICAgKiBpcyBpbnZva2VkIHdpdGggdGhlbSBhbmQgaXRzIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufG51bWJlcn0gUmV0dXJucyB0aGUgY2hvc2VuIGZ1bmN0aW9uIG9yIGl0cyByZXN1bHQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SW5kZXhPZihjb2xsZWN0aW9uLCB0YXJnZXQsIGZyb21JbmRleCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaC5pbmRleE9mIHx8IGluZGV4T2Y7XG4gICAgICByZXN1bHQgPSByZXN1bHQgPT09IGluZGV4T2YgPyBiYXNlSW5kZXhPZiA6IHJlc3VsdDtcbiAgICAgIHJldHVybiBjb2xsZWN0aW9uID8gcmVzdWx0KGNvbGxlY3Rpb24sIHRhcmdldCwgZnJvbUluZGV4KSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IHZhbHVlIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhdm9pZCBhIFtKSVQgYnVnXShodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNzkyKVxuICAgICAqIHRoYXQgYWZmZWN0cyBTYWZhcmkgb24gYXQgbGVhc3QgaU9TIDguMS04LjMgQVJNNjQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgXCJsZW5ndGhcIiB2YWx1ZS5cbiAgICAgKi9cbiAgICB2YXIgZ2V0TGVuZ3RoID0gYmFzZVByb3BlcnR5KCdsZW5ndGgnKTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3BlcnkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHBhaXJzKG9iamVjdCksXG4gICAgICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtsZW5ndGhdWzJdID0gaXNTdHJpY3RDb21wYXJhYmxlKHJlc3VsdFtsZW5ndGhdWzFdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gICAgICByZXR1cm4gaXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmlldywgYXBwbHlpbmcgYW55IGB0cmFuc2Zvcm1zYCB0byB0aGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSB2aWV3LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgdmlldy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB0cmFuc2Zvcm1zIFRoZSB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIHZpZXcuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYHN0YXJ0YCBhbmQgYGVuZGBcbiAgICAgKiAgcG9zaXRpb25zIG9mIHRoZSB2aWV3LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFZpZXcoc3RhcnQsIGVuZCwgdHJhbnNmb3Jtcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBkYXRhID0gdHJhbnNmb3Jtc1tpbmRleF0sXG4gICAgICAgICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnZHJvcCc6ICAgICAgc3RhcnQgKz0gc2l6ZTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZHJvcFJpZ2h0JzogZW5kIC09IHNpemU7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2UnOiAgICAgIGVuZCA9IG5hdGl2ZU1pbihlbmQsIHN0YXJ0ICsgc2l6ZSk7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2VSaWdodCc6IHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0LCBlbmQgLSBzaXplKTsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7ICdzdGFydCc6IHN0YXJ0LCAnZW5kJzogZW5kIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gICAgICAvLyBBZGQgYXJyYXkgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICAgICAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gICAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmICghKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IpKSB7XG4gICAgICAgIEN0b3IgPSBPYmplY3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAgICAgKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgICAgICByZXR1cm4gYnVmZmVyQ2xvbmUob2JqZWN0KTtcblxuICAgICAgICBjYXNlIGJvb2xUYWc6XG4gICAgICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICAgICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICAgICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgICAgICB2YXIgYnVmZmVyID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3IoaXNEZWVwID8gYnVmZmVyQ2xvbmUoYnVmZmVyKSA6IGJ1ZmZlciwgb2JqZWN0LmJ5dGVPZmZzZXQsIG9iamVjdC5sZW5ndGgpO1xuXG4gICAgICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgICAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3Iob2JqZWN0LnNvdXJjZSwgcmVGbGFncy5leGVjKG9iamVjdCkpO1xuICAgICAgICAgIHJlc3VsdC5sYXN0SW5kZXggPSBvYmplY3QubGFzdEluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBtZXRob2QgYXQgYHBhdGhgIG9uIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW52b2tlUGF0aChvYmplY3QsIHBhdGgsIGFyZ3MpIHtcbiAgICAgIGlmIChvYmplY3QgIT0gbnVsbCAmJiAhaXNLZXkocGF0aCwgb2JqZWN0KSkge1xuICAgICAgICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICAgICAgICBvYmplY3QgPSBwYXRoLmxlbmd0aCA9PSAxID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xuICAgICAgICBwYXRoID0gbGFzdChwYXRoKTtcbiAgICAgIH1cbiAgICAgIHZhciBmdW5jID0gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBvYmplY3RbcGF0aF07XG4gICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogZnVuYy5hcHBseShvYmplY3QsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgoZ2V0TGVuZ3RoKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICAgICAgdmFsdWUgPSAodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHJlSXNVaW50LnRlc3QodmFsdWUpKSA/ICt2YWx1ZSA6IC0xO1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuICAgICAgcmV0dXJuIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICAgICAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gICAgICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpKSB7XG4gICAgICAgIHZhciBvdGhlciA9IG9iamVjdFtpbmRleF07XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyAodmFsdWUgPT09IG90aGVyKSA6IChvdGhlciAhPT0gb3RoZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIGlmICgodHlwZSA9PSAnc3RyaW5nJyAmJiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpKSB8fCB0eXBlID09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdCB8fCAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gdG9PYmplY3Qob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpIHtcbiAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpO1xuICAgICAgaWYgKCEoZnVuY05hbWUgaW4gTGF6eVdyYXBwZXIucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuICAgICAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgICAgIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbGVuZ3RoKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICAgICAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gICAgICpcbiAgICAgKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyByZXF1aXJlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAgICAgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgbWV0aG9kcyBsaWtlIGBfLmJpbmRgLCBgXy5jdXJyeWAsIGFuZCBgXy5wYXJ0aWFsYFxuICAgICAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmQgYF8ucmVhcmdgXG4gICAgICogYXVnbWVudCBmdW5jdGlvbiBhcmd1bWVudHMsIG1ha2luZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgZXhlY3V0ZWQgaW1wb3J0YW50LFxuICAgICAqIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBhIHNhZmVcbiAgICAgKiBjb21tb24gY2FzZSB3aGVyZSBjdXJyaWVkIGZ1bmN0aW9ucyBoYXZlIGBfLmFyeWAgYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIHNvdXJjZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLCBzb3VyY2UpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgICAgIG5ld0JpdG1hc2sgPSBiaXRtYXNrIHwgc3JjQml0bWFzayxcbiAgICAgICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCBBUllfRkxBRztcblxuICAgICAgdmFyIGlzQ29tYm8gPVxuICAgICAgICAoc3JjQml0bWFzayA9PSBBUllfRkxBRyAmJiBiaXRtYXNrID09IENVUlJZX0ZMQUcpIHx8XG4gICAgICAgIChzcmNCaXRtYXNrID09IEFSWV9GTEFHICYmIGJpdG1hc2sgPT0gUkVBUkdfRkxBRyAmJiBkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pIHx8XG4gICAgICAgIChzcmNCaXRtYXNrID09IChBUllfRkxBRyB8IFJFQVJHX0ZMQUcpICYmIGJpdG1hc2sgPT0gQ1VSUllfRkxBRyk7XG5cbiAgICAgIC8vIEV4aXQgZWFybHkgaWYgbWV0YWRhdGEgY2FuJ3QgYmUgbWVyZ2VkLlxuICAgICAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIEJJTkRfRkxBRykge1xuICAgICAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgICAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgICAgICBuZXdCaXRtYXNrIHw9IChiaXRtYXNrICYgQklORF9GTEFHKSA/IDAgOiBDVVJSWV9CT1VORF9GTEFHO1xuICAgICAgfVxuICAgICAgLy8gQ29tcG9zZSBwYXJ0aWFsIGFyZ3VtZW50cy5cbiAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbHMgPSBkYXRhWzNdO1xuICAgICAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiBhcnJheUNvcHkodmFsdWUpO1xuICAgICAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBhcnJheUNvcHkoc291cmNlWzRdKTtcbiAgICAgIH1cbiAgICAgIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gICAgICB2YWx1ZSA9IHNvdXJjZVs1XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgICAgIGRhdGFbNV0gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzUmlnaHQocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNl0pIDogYXJyYXlDb3B5KHZhbHVlKTtcbiAgICAgICAgZGF0YVs2XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVs1XSwgUExBQ0VIT0xERVIpIDogYXJyYXlDb3B5KHNvdXJjZVs2XSk7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgICAgIHZhbHVlID0gc291cmNlWzddO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGRhdGFbN10gPSBhcnJheUNvcHkodmFsdWUpO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIEFSWV9GTEFHKSB7XG4gICAgICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICAgICAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgICAgICBkYXRhWzldID0gc291cmNlWzldO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICAgICAgZGF0YVswXSA9IHNvdXJjZVswXTtcbiAgICAgIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzRGVlcGAgdG8gY3VzdG9taXplIGl0cyBgXy5tZXJnZWAgdXNlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IG9iamVjdFZhbHVlIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QgcHJvcGVydHkgdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBzb3VyY2VWYWx1ZSBUaGUgc291cmNlIG9iamVjdCBwcm9wZXJ0eSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVyZ2VEZWZhdWx0cyhvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmplY3RWYWx1ZSA9PT0gdW5kZWZpbmVkID8gc291cmNlVmFsdWUgOiBtZXJnZShvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUsIG1lcmdlRGVmYXVsdHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5waWNrYCB3aGljaCBwaWNrcyBgb2JqZWN0YCBwcm9wZXJ0aWVzIHNwZWNpZmllZFxuICAgICAqIGJ5IGBwcm9wc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwaWNrQnlBcnJheShvYmplY3QsIHByb3BzKSB7XG4gICAgICBvYmplY3QgPSB0b09iamVjdChvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucGlja2Agd2hpY2ggcGlja3MgYG9iamVjdGAgcHJvcGVydGllcyBgcHJlZGljYXRlYFxuICAgICAqIHJldHVybnMgdHJ1dGh5IGZvci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBpY2tCeUNhbGxiYWNrKG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBiYXNlRm9ySW4ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmplY3QpKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlb3JkZXIgYGFycmF5YCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBpbmRleGVzIHdoZXJlIHRoZSBlbGVtZW50IGF0XG4gICAgICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICAgICAqIHRoZSBzZWNvbmQgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZW9yZGVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ZXMgVGhlIGFycmFuZ2VkIGFycmF5IGluZGV4ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVvcmRlcihhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oaW5kZXhlcy5sZW5ndGgsIGFyckxlbmd0aCksXG4gICAgICAgICAgb2xkQXJyYXkgPSBhcnJheUNvcHkoYXJyYXkpO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgICAgICBhcnJheVtsZW5ndGhdID0gaXNJbmRleChpbmRleCwgYXJyTGVuZ3RoKSA/IG9sZEFycmF5W2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAgICAgKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5IGZ1bmN0aW9uXG4gICAgICogdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhdXNlcyBpbiBWOC4gU2VlIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3MClcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIHNldERhdGEgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY291bnQgPSAwLFxuICAgICAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgc3RhbXAgPSBub3coKSxcbiAgICAgICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgICAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlU2V0RGF0YShrZXksIHZhbHVlKTtcbiAgICAgIH07XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIEEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYE9iamVjdC5rZXlzYCB3aGljaCBjcmVhdGVzIGFuIGFycmF5IG9mIHRoZVxuICAgICAqIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaGltS2V5cyhvYmplY3QpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXNJbihvYmplY3QpLFxuICAgICAgICAgIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzTGVuZ3RoICYmIG9iamVjdC5sZW5ndGg7XG5cbiAgICAgIHZhciBhbGxvd0luZGV4ZXMgPSAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmXG4gICAgICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIGlmICgoYWxsb3dJbmRleGVzICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpKSB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS1saWtlIG9iamVjdCBpZiBpdCdzIG5vdCBvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyB0aGUgYXJyYXktbGlrZSBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9JdGVyYWJsZSh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNPYmplY3QodmFsdWUpID8gdmFsdWUgOiBPYmplY3QodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gb2JqZWN0IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9PYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBwcm9wZXJ0eSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9QYXRoKHZhbHVlKSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgYmFzZVRvU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdHJpbmcpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKSB7XG4gICAgICByZXR1cm4gd3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyXG4gICAgICAgID8gd3JhcHBlci5jbG9uZSgpXG4gICAgICAgIDogbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18sIGFycmF5Q29weSh3cmFwcGVyLl9fYWN0aW9uc19fKSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxpdCBpbnRvIGdyb3VwcyB0aGUgbGVuZ3RoIG9mIGBzaXplYC5cbiAgICAgKiBJZiBgY29sbGVjdGlvbmAgY2FuJ3QgYmUgc3BsaXQgZXZlbmx5LCB0aGUgZmluYWwgY2h1bmsgd2lsbCBiZSB0aGUgcmVtYWluaW5nXG4gICAgICogZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9MV0gVGhlIGxlbmd0aCBvZiBlYWNoIGNodW5rLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IGNvbnRhaW5pbmcgY2h1bmtzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAyKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InXSwgWydjJywgJ2QnXV1cbiAgICAgKlxuICAgICAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDMpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYicsICdjJ10sIFsnZCddXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNodW5rKGFycmF5LCBzaXplLCBndWFyZCkge1xuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIHNpemUsIGd1YXJkKSA6IHNpemUgPT0gbnVsbCkge1xuICAgICAgICBzaXplID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSBuYXRpdmVNYXgobmF0aXZlRmxvb3Ioc2l6ZSkgfHwgMSwgMSk7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICByZXNJbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KG5hdGl2ZUNlaWwobGVuZ3RoIC8gc2l6ZSkpO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gYmFzZVNsaWNlKGFycmF5LCBpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSB3aXRoIGFsbCBmYWxzZXkgdmFsdWVzIHJlbW92ZWQuIFRoZSB2YWx1ZXMgYGZhbHNlYCwgYG51bGxgLFxuICAgICAqIGAwYCwgYFwiXCJgLCBgdW5kZWZpbmVkYCwgYW5kIGBOYU5gIGFyZSBmYWxzZXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY29tcGFjdChbMCwgMSwgZmFsc2UsIDIsICcnLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwLFxuICAgICAgICAgIHJlc0luZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlclxuICAgICAqIHByb3ZpZGVkIGFycmF5cyB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSBhcnJheXMgb2YgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2UoWzEsIDIsIDNdLCBbNCwgMl0pO1xuICAgICAqIC8vID0+IFsxLCAzXVxuICAgICAqL1xuICAgIHZhciBkaWZmZXJlbmNlID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiAoaXNPYmplY3RMaWtlKGFycmF5KSAmJiBpc0FycmF5TGlrZShhcnJheSkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgZmFsc2UsIHRydWUpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgbiwgZ3VhcmQpIDogbiA9PSBudWxsKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgbiA8IDAgPyAwIDogbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIG4sIGd1YXJkKSA6IG4gPT0gbnVsbCkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH1cbiAgICAgIG4gPSBsZW5ndGggLSAoK24gfHwgMCk7XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICogRWxlbWVudHMgYXJlIGRyb3BwZWQgdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKFsxLCAyLCAzXSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gPiAxO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucGx1Y2soXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH0pLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyksIHRydWUsIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZXhjbHVkaW5nIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRyb3BXaGlsZShbMSwgMiwgM10sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBuIDwgMztcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8uZHJvcFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8uZHJvcFdoaWxlKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucGx1Y2soXy5kcm9wV2hpbGUodXNlcnMsICdhY3RpdmUnKSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BXaGlsZShhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyksIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsbHMgZWxlbWVudHMgb2YgYGFycmF5YCB3aXRoIGB2YWx1ZWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90XG4gICAgICogaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8uZmlsbChhcnJheSwgJ2EnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydhJywgJ2EnLCAnYSddXG4gICAgICpcbiAgICAgKiBfLmZpbGwoQXJyYXkoMyksIDIpO1xuICAgICAqIC8vID0+IFsyLCAyLCAyXVxuICAgICAqXG4gICAgICogXy5maWxsKFs0LCA2LCA4XSwgJyonLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBbNCwgJyonLCA4XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ICYmIHR5cGVvZiBzdGFydCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgdmFsdWUsIHN0YXJ0KSkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihjaHIpIHtcbiAgICAgKiAgIHJldHVybiBjaHIudXNlciA9PSAnYmFybmV5JztcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc2AgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScsIGZhbHNlKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIHZhciBmaW5kSW5kZXggPSBjcmVhdGVGaW5kSW5kZXgoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEluZGV4YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzXG4gICAgICogb2YgYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBmdW5jdGlvbihjaHIpIHtcbiAgICAgKiAgIHJldHVybiBjaHIudXNlciA9PSAncGViYmxlcyc7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgdmFyIGZpbmRMYXN0SW5kZXggPSBjcmVhdGVGaW5kSW5kZXgodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgaGVhZFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZpcnN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogXy5maXJzdChbXSk7XG4gICAgICogLy8gPT4gdW5kZWZpbmVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHtcbiAgICAgIHJldHVybiBhcnJheSA/IGFycmF5WzBdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZsYXR0ZW5zIGEgbmVzdGVkIGFycmF5LiBJZiBgaXNEZWVwYCBpcyBgdHJ1ZWAgdGhlIGFycmF5IGlzIHJlY3Vyc2l2ZWx5XG4gICAgICogZmxhdHRlbmVkLCBvdGhlcndpc2UgaXQgaXMgb25seSBmbGF0dGVuZWQgYSBzaW5nbGUgbGV2ZWwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGZsYXR0ZW4uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW4oWzEsIFsyLCAzLCBbNF1dXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIFs0XV1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIGBpc0RlZXBgXG4gICAgICogXy5mbGF0dGVuKFsxLCBbMiwgMywgWzRdXV0sIHRydWUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGlzRGVlcCwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIGlzRGVlcCwgZ3VhcmQpKSB7XG4gICAgICAgIGlzRGVlcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCBpc0RlZXApIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYSBuZXN0ZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcmVjdXJzaXZlbHkgZmxhdHRlbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlZXAoWzEsIFsyLCAzLCBbNF1dXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbkRlZXAoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIHRydWUpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYHZhbHVlYCBpcyBmb3VuZCBpbiBgYXJyYXlgXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCBpcyB1c2VkIGFzIHRoZSBvZmZzZXRcbiAgICAgKiBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBzb3J0ZWQgcHJvdmlkaW5nIGB0cnVlYCBmb3IgYGZyb21JbmRleGBcbiAgICAgKiBwZXJmb3JtcyBhIGZhc3RlciBiaW5hcnkgc2VhcmNoLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tIG9yIGB0cnVlYFxuICAgICAqICB0byBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvbiBhIHNvcnRlZCBhcnJheS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBgZnJvbUluZGV4YFxuICAgICAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIC8vIHBlcmZvcm1pbmcgYSBiaW5hcnkgc2VhcmNoXG4gICAgICogXy5pbmRleE9mKFsxLCAxLCAyLCAyXSwgMiwgdHJ1ZSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGZyb21JbmRleCA9PSAnbnVtYmVyJykge1xuICAgICAgICBmcm9tSW5kZXggPSBmcm9tSW5kZXggPCAwID8gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCkgOiBmcm9tSW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGZyb21JbmRleCkge1xuICAgICAgICB2YXIgaW5kZXggPSBiaW5hcnlJbmRleChhcnJheSwgdmFsdWUpO1xuICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiZcbiAgICAgICAgICAgICh2YWx1ZSA9PT0gdmFsdWUgPyAodmFsdWUgPT09IGFycmF5W2luZGV4XSkgOiAoYXJyYXlbaW5kZXhdICE9PSBhcnJheVtpbmRleF0pKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXggfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5pdGlhbChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgICAgIHJldHVybiBkcm9wUmlnaHQoYXJyYXksIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiBhbGwgb2YgdGhlIHByb3ZpZGVkXG4gICAgICogYXJyYXlzIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHNoYXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBfLmludGVyc2VjdGlvbihbMSwgMl0sIFs0LCAyXSwgWzIsIDFdKTtcbiAgICAgKiAvLyA9PiBbMl1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIG90aExlbmd0aCA9IGFycmF5cy5sZW5ndGgsXG4gICAgICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGgsXG4gICAgICAgICAgY2FjaGVzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBpbmRleE9mID0gZ2V0SW5kZXhPZigpLFxuICAgICAgICAgIGlzQ29tbW9uID0gaW5kZXhPZiA9PSBiYXNlSW5kZXhPZixcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKG90aEluZGV4LS0pIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlzW290aEluZGV4XSA9IGlzQXJyYXlMaWtlKHZhbHVlID0gYXJyYXlzW290aEluZGV4XSkgPyB2YWx1ZSA6IFtdO1xuICAgICAgICBjYWNoZXNbb3RoSW5kZXhdID0gKGlzQ29tbW9uICYmIHZhbHVlLmxlbmd0aCA+PSAxMjApID8gY3JlYXRlQ2FjaGUob3RoSW5kZXggJiYgdmFsdWUpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBhcnJheSA9IGFycmF5c1swXSxcbiAgICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICBzZWVuID0gY2FjaGVzWzBdO1xuXG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAoKHNlZW4gPyBjYWNoZUluZGV4T2Yoc2VlbiwgdmFsdWUpIDogaW5kZXhPZihyZXN1bHQsIHZhbHVlLCAwKSkgPCAwKSB7XG4gICAgICAgICAgdmFyIG90aEluZGV4ID0gb3RoTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgtLW90aEluZGV4KSB7XG4gICAgICAgICAgICB2YXIgY2FjaGUgPSBjYWNoZXNbb3RoSW5kZXhdO1xuICAgICAgICAgICAgaWYgKChjYWNoZSA/IGNhY2hlSW5kZXhPZihjYWNoZSwgdmFsdWUpIDogaW5kZXhPZihhcnJheXNbb3RoSW5kZXhdLCB2YWx1ZSwgMCkpIDwgMCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlZW4pIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGFycmF5YCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2VhcmNoLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtib29sZWFufG51bWJlcn0gW2Zyb21JbmRleD1hcnJheS5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tXG4gICAgICogIG9yIGB0cnVlYCB0byBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvbiBhIHNvcnRlZCBhcnJheS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgYGZyb21JbmRleGBcbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwgMik7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gcGVyZm9ybWluZyBhIGJpbmFyeSBzZWFyY2hcbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAxLCAyLCAyXSwgMiwgdHJ1ZSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5kZXggPSAoZnJvbUluZGV4IDwgMCA/IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApIDogbmF0aXZlTWluKGZyb21JbmRleCB8fCAwLCBsZW5ndGggLSAxKSkgKyAxO1xuICAgICAgfSBlbHNlIGlmIChmcm9tSW5kZXgpIHtcbiAgICAgICAgaW5kZXggPSBiaW5hcnlJbmRleChhcnJheSwgdmFsdWUsIHRydWUpIC0gMTtcbiAgICAgICAgdmFyIG90aGVyID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAodmFsdWUgPT09IHZhbHVlID8gKHZhbHVlID09PSBvdGhlcikgOiAob3RoZXIgIT09IG90aGVyKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbmRleE9mTmFOKGFycmF5LCBpbmRleCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHByb3ZpZGVkIHZhbHVlcyBmcm9tIGBhcnJheWAgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ud2l0aG91dGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDMsIDEsIDIsIDNdO1xuICAgICAqXG4gICAgICogXy5wdWxsKGFycmF5LCAyLCAzKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbCgpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgIGFycmF5ID0gYXJnc1swXTtcblxuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIGluZGV4T2YgPSBnZXRJbmRleE9mKCksXG4gICAgICAgICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBmcm9tSW5kZXggPSAwLFxuICAgICAgICAgICAgdmFsdWUgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICB3aGlsZSAoKGZyb21JbmRleCA9IGluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpKSA+IC0xKSB7XG4gICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGZyb21JbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGVsZW1lbnRzIGZyb20gYGFycmF5YCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBpbmRleGVzIGFuZCByZXR1cm5zXG4gICAgICogYW4gYXJyYXkgb2YgdGhlIHJlbW92ZWQgZWxlbWVudHMuIEluZGV4ZXMgbWF5IGJlIHNwZWNpZmllZCBhcyBhbiBhcnJheSBvZlxuICAgICAqIGluZGV4ZXMgb3IgYXMgaW5kaXZpZHVhbCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmF0YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBbaW5kZXhlc10gVGhlIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcmVtb3ZlLFxuICAgICAqICBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBpbmRleGVzIG9yIGFycmF5cyBvZiBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFs1LCAxMCwgMTUsIDIwXTtcbiAgICAgKiB2YXIgZXZlbnMgPSBfLnB1bGxBdChhcnJheSwgMSwgMyk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzUsIDE1XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZXZlbnMpO1xuICAgICAqIC8vID0+IFsxMCwgMjBdXG4gICAgICovXG4gICAgdmFyIHB1bGxBdCA9IHJlc3RQYXJhbShmdW5jdGlvbihhcnJheSwgaW5kZXhlcykge1xuICAgICAgaW5kZXhlcyA9IGJhc2VGbGF0dGVuKGluZGV4ZXMpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZUF0KGFycmF5LCBpbmRleGVzKTtcbiAgICAgIGJhc2VQdWxsQXQoYXJyYXksIGluZGV4ZXMuc29ydChiYXNlQ29tcGFyZUFzY2VuZGluZykpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gYGFycmF5YCB0aGF0IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvclxuICAgICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSByZW1vdmVkIGVsZW1lbnRzLiBUaGUgcHJlZGljYXRlIGlzIGJvdW5kIHRvXG4gICAgICogYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZmlsdGVyYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDMsIDRdO1xuICAgICAqIHZhciBldmVucyA9IF8ucmVtb3ZlKGFycmF5LCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgM11cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGV2ZW5zKTtcbiAgICAgKiAvLyA9PiBbMiwgNF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZW1vdmUoYXJyYXksIHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5kZXhlcyA9IFtdLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICBpbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgdGFpbFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVzdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3QoYXJyYXkpIHtcbiAgICAgIHJldHVybiBkcm9wKGFycmF5LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBmcm9tIGBzdGFydGAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluc3RlYWQgb2YgYEFycmF5I3NsaWNlYCB0byBzdXBwb3J0IG5vZGVcbiAgICAgKiBsaXN0cyBpbiBJRSA8IDkgYW5kIHRvIGVuc3VyZSBkZW5zZSBhcnJheXMgYXJlIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoZW5kICYmIHR5cGVvZiBlbmQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHN0YXJ0LCBlbmQpKSB7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlcyBhIGJpbmFyeSBzZWFyY2ggdG8gZGV0ZXJtaW5lIHRoZSBsb3dlc3QgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGRcbiAgICAgKiBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuIElmIGFuIGl0ZXJhdGVlXG4gICAgICogZnVuY3Rpb24gaXMgcHJvdmlkZWQgaXQgaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWBcbiAgICAgKiB0byBjb21wdXRlIHRoZWlyIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmRcbiAgICAgKiBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4KFszMCwgNTBdLCA0MCk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleChbNCwgNCwgNSwgNV0sIDUpO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIHZhciBkaWN0ID0geyAnZGF0YSc6IHsgJ3RoaXJ0eSc6IDMwLCAnZm9ydHknOiA0MCwgJ2ZpZnR5JzogNTAgfSB9O1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgYW4gaXRlcmF0ZWUgZnVuY3Rpb25cbiAgICAgKiBfLnNvcnRlZEluZGV4KFsndGhpcnR5JywgJ2ZpZnR5J10sICdmb3J0eScsIGZ1bmN0aW9uKHdvcmQpIHtcbiAgICAgKiAgIHJldHVybiB0aGlzLmRhdGFbd29yZF07XG4gICAgICogfSwgZGljdCk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnNvcnRlZEluZGV4KFt7ICd4JzogMzAgfSwgeyAneCc6IDUwIH1dLCB7ICd4JzogNDAgfSwgJ3gnKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgdmFyIHNvcnRlZEluZGV4ID0gY3JlYXRlU29ydGVkSW5kZXgoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGhpZ2hlc3RcbiAgICAgKiBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG9cbiAgICAgKiBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXgoWzQsIDQsIDUsIDVdLCA1KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICovXG4gICAgdmFyIHNvcnRlZExhc3RJbmRleCA9IGNyZWF0ZVNvcnRlZEluZGV4KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHRha2UuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2UoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIG4sIGd1YXJkKSA6IG4gPT0gbnVsbCkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgbiwgZ3VhcmQpIDogbiA9PSBudWxsKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfVxuICAgICAgbiA9IGxlbmd0aCAtICgrbiB8fCAwKTtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgZW5kLiBFbGVtZW50cyBhcmVcbiAgICAgKiB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBib3VuZCB0byBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHRXaGlsZShbMSwgMiwgM10sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBuID4gMTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLnRha2VSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLnRha2VSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyksIGZhbHNlLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLiBFbGVtZW50c1xuICAgICAqIGFyZSB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBib3VuZCB0b1xuICAgICAqIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlV2hpbGUoWzEsIDIsIDNdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiA8IDM7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZX0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8udGFrZVdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8udGFrZVdoaWxlKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8udGFrZVdoaWxlKHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIG9mIHRoZSBwcm92aWRlZCBhcnJheXNcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pb24oWzEsIDJdLCBbNCwgMl0sIFsyLCAxXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDRdXG4gICAgICovXG4gICAgdmFyIHVuaW9uID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgZmFsc2UsIHRydWUpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIGFuIGFycmF5LCB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpbiB3aGljaCBvbmx5IHRoZSBmaXJzdCBvY2N1cmVuY2Ugb2YgZWFjaCBlbGVtZW50XG4gICAgICogaXMga2VwdC4gUHJvdmlkaW5nIGB0cnVlYCBmb3IgYGlzU29ydGVkYCBwZXJmb3JtcyBhIGZhc3RlciBzZWFyY2ggYWxnb3JpdGhtXG4gICAgICogZm9yIHNvcnRlZCBhcnJheXMuIElmIGFuIGl0ZXJhdGVlIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGl0IGlzIGludm9rZWQgZm9yXG4gICAgICogZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheSB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoIHVuaXF1ZW5lc3NcbiAgICAgKiBpcyBjb21wdXRlZC4gVGhlIGBpdGVyYXRlZWAgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBhbGlhcyB1bmlxdWVcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1NvcnRlZF0gU3BlY2lmeSB0aGUgYXJyYXkgaXMgc29ydGVkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW2l0ZXJhdGVlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZS12YWx1ZS1mcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXEoWzIsIDEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIGBpc1NvcnRlZGBcbiAgICAgKiBfLnVuaXEoWzEsIDEsIDJdLCB0cnVlKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIGFuIGl0ZXJhdGVlIGZ1bmN0aW9uXG4gICAgICogXy51bmlxKFsxLCAyLjUsIDEuNSwgMl0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiB0aGlzLmZsb29yKG4pO1xuICAgICAqIH0sIE1hdGgpO1xuICAgICAqIC8vID0+IFsxLCAyLjVdXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8udW5pcShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcShhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGlzU29ydGVkICE9IG51bGwgJiYgdHlwZW9mIGlzU29ydGVkICE9ICdib29sZWFuJykge1xuICAgICAgICB0aGlzQXJnID0gaXRlcmF0ZWU7XG4gICAgICAgIGl0ZXJhdGVlID0gaXNJdGVyYXRlZUNhbGwoYXJyYXksIGlzU29ydGVkLCB0aGlzQXJnKSA/IHVuZGVmaW5lZCA6IGlzU29ydGVkO1xuICAgICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2soKTtcbiAgICAgIGlmICghKGl0ZXJhdGVlID09IG51bGwgJiYgY2FsbGJhY2sgPT09IGJhc2VDYWxsYmFjaykpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSBjYWxsYmFjayhpdGVyYXRlZSwgdGhpc0FyZywgMyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKGlzU29ydGVkICYmIGdldEluZGV4T2YoKSA9PSBiYXNlSW5kZXhPZilcbiAgICAgICAgPyBzb3J0ZWRVbmlxKGFycmF5LCBpdGVyYXRlZSlcbiAgICAgICAgOiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIGdyb3VwZWRcbiAgICAgKiBlbGVtZW50cyBhbmQgY3JlYXRlcyBhbiBhcnJheSByZWdyb3VwaW5nIHRoZSBlbGVtZW50cyB0byB0aGVpciBwcmUtemlwXG4gICAgICogY29uZmlndXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWydmcmVkJywgJ2Jhcm5leSddLCBbMzAsIDQwXSwgW3RydWUsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gW1snZnJlZCcsIDMwLCB0cnVlXSwgWydiYXJuZXknLCA0MCwgZmFsc2VdXVxuICAgICAqXG4gICAgICogXy51bnppcCh6aXBwZWQpO1xuICAgICAqIC8vID0+IFtbJ2ZyZWQnLCAnYmFybmV5J10sIFszMCwgNDBdLCBbdHJ1ZSwgZmFsc2VdXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICAgIGFycmF5ID0gYXJyYXlGaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShncm91cCkpIHtcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoZ3JvdXAubGVuZ3RoLCBsZW5ndGgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5TWFwKGFycmF5LCBiYXNlUHJvcGVydHkoaW5kZXgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhbiBpdGVyYXRlZSB0byBzcGVjaWZ5XG4gICAgICogaG93IHJlZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgZ3JvdXApLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lIHJlZ3JvdXBlZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSk7XG4gICAgICogLy8gPT4gW1sxLCAxMCwgMTAwXSwgWzIsIDIwLCAyMDBdXVxuICAgICAqXG4gICAgICogXy51bnppcFdpdGgoemlwcGVkLCBfLmFkZCk7XG4gICAgICogLy8gPT4gWzMsIDMwLCAzMDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW56aXBXaXRoKGFycmF5LCBpdGVyYXRlZSwgdGhpc0FyZykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSB1bnppcChhcnJheSk7XG4gICAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaXRlcmF0ZWUgPSBiaW5kQ2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDQpO1xuICAgICAgcmV0dXJuIGFycmF5TWFwKHJlc3VsdCwgZnVuY3Rpb24oZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKGdyb3VwLCBpdGVyYXRlZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgZXhjbHVkaW5nIGFsbCBwcm92aWRlZCB2YWx1ZXMgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLndpdGhvdXQoWzEsIDIsIDEsIDNdLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKi9cbiAgICB2YXIgd2l0aG91dCA9IHJlc3RQYXJhbShmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2UoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcylcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGlzIHRoZSBbc3ltbWV0cmljIGRpZmZlcmVuY2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bW1ldHJpY19kaWZmZXJlbmNlKVxuICAgICAqIG9mIHRoZSBwcm92aWRlZCBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnhvcihbMSwgMl0sIFs0LCAyXSk7XG4gICAgICogLy8gPT4gWzEsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24geG9yKCkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGFycmF5KSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRcbiAgICAgICAgICAgID8gYXJyYXlQdXNoKGJhc2VEaWZmZXJlbmNlKHJlc3VsdCwgYXJyYXkpLCBiYXNlRGlmZmVyZW5jZShhcnJheSwgcmVzdWx0KSlcbiAgICAgICAgICAgIDogYXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQgPyBiYXNlVW5pcShyZXN1bHQpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggY29udGFpbnMgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgdGhlIHNlY29uZCBvZiB3aGljaCBjb250YWlucyB0aGUgc2Vjb25kIGVsZW1lbnRzXG4gICAgICogb2YgdGhlIGdpdmVuIGFycmF5cywgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwKFsnZnJlZCcsICdiYXJuZXknXSwgWzMwLCA0MF0sIFt0cnVlLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IFtbJ2ZyZWQnLCAzMCwgdHJ1ZV0sIFsnYmFybmV5JywgNDAsIGZhbHNlXV1cbiAgICAgKi9cbiAgICB2YXIgemlwID0gcmVzdFBhcmFtKHVuemlwKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbnZlcnNlIG9mIGBfLnBhaXJzYDsgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBvYmplY3QgY29tcG9zZWQgZnJvbSBhcnJheXNcbiAgICAgKiBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgdmFsdWVzLiBQcm92aWRlIGVpdGhlciBhIHNpbmdsZSB0d28gZGltZW5zaW9uYWwgYXJyYXksXG4gICAgICogZS5nLiBgW1trZXkxLCB2YWx1ZTFdLCBba2V5MiwgdmFsdWUyXV1gIG9yIHR3byBhcnJheXMsIG9uZSBvZiBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIGFuZCBvbmUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgb2JqZWN0XG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBPYmplY3QoW1snZnJlZCcsIDMwXSwgWydiYXJuZXknLCA0MF1dKTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogMzAsICdiYXJuZXknOiA0MCB9XG4gICAgICpcbiAgICAgKiBfLnppcE9iamVjdChbJ2ZyZWQnLCAnYmFybmV5J10sIFszMCwgNDBdKTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogMzAsICdiYXJuZXknOiA0MCB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLCB2YWx1ZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzID8gcHJvcHMubGVuZ3RoIDogMCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKGxlbmd0aCAmJiAhdmFsdWVzICYmICFpc0FycmF5KHByb3BzWzBdKSkge1xuICAgICAgICB2YWx1ZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlc1tpbmRleF07XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5KSB7XG4gICAgICAgICAgcmVzdWx0W2tleVswXV0gPSBrZXlbMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gaXRlcmF0ZWUgdG8gc3BlY2lmeVxuICAgICAqIGhvdyBncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYFxuICAgICAqIGFuZCBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBncm91cCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZSBncm91cGVkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcFdpdGgoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSwgXy5hZGQpO1xuICAgICAqIC8vID0+IFsxMTEsIDIyMl1cbiAgICAgKi9cbiAgICB2YXIgemlwV2l0aCA9IHJlc3RQYXJhbShmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoLFxuICAgICAgICAgIGl0ZXJhdGVlID0gbGVuZ3RoID4gMiA/IGFycmF5c1tsZW5ndGggLSAyXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0aGlzQXJnID0gbGVuZ3RoID4gMSA/IGFycmF5c1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGxlbmd0aCA+IDIgJiYgdHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGVuZ3RoIC09IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVyYXRlZSA9IChsZW5ndGggPiAxICYmIHR5cGVvZiB0aGlzQXJnID09ICdmdW5jdGlvbicpID8gKC0tbGVuZ3RoLCB0aGlzQXJnKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpc0FyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGFycmF5cy5sZW5ndGggPSBsZW5ndGg7XG4gICAgICByZXR1cm4gdW56aXBXaXRoKGFycmF5cywgaXRlcmF0ZWUsIHRoaXNBcmcpO1xuICAgIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIG9iamVjdCB0aGF0IHdyYXBzIGB2YWx1ZWAgd2l0aCBleHBsaWNpdCBtZXRob2RcbiAgICAgKiBjaGFpbmluZyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENoYWluXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogdmFyIHlvdW5nZXN0ID0gXy5jaGFpbih1c2VycylcbiAgICAgKiAgIC5zb3J0QnkoJ2FnZScpXG4gICAgICogICAubWFwKGZ1bmN0aW9uKGNocikge1xuICAgICAqICAgICByZXR1cm4gY2hyLnVzZXIgKyAnIGlzICcgKyBjaHIuYWdlO1xuICAgICAqICAgfSlcbiAgICAgKiAgIC5maXJzdCgpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiAncGViYmxlcyBpcyAxJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNoYWluKHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoKHZhbHVlKTtcbiAgICAgIHJlc3VsdC5fX2NoYWluX18gPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIGBpbnRlcmNlcHRvcmAgYW5kIHJldHVybnMgYHZhbHVlYC4gVGhlIGludGVyY2VwdG9yIGlzXG4gICAgICogYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLiBUaGUgcHVycG9zZSBvZlxuICAgICAqIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiBpbiBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnNcbiAgICAgKiBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENoYWluXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMiwgM10pXG4gICAgICogIC50YXAoZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgKiAgICBhcnJheS5wb3AoKTtcbiAgICAgKiAgfSlcbiAgICAgKiAgLnJldmVyc2UoKVxuICAgICAqICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YXAodmFsdWUsIGludGVyY2VwdG9yLCB0aGlzQXJnKSB7XG4gICAgICBpbnRlcmNlcHRvci5jYWxsKHRoaXNBcmcsIHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnRhcGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ2hhaW5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIHRvIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGludGVyY2VwdG9yYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oJyAgYWJjICAnKVxuICAgICAqICAuY2hhaW4oKVxuICAgICAqICAudHJpbSgpXG4gICAgICogIC50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgICogIH0pXG4gICAgICogIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsnYWJjJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aHJ1KHZhbHVlLCBpbnRlcmNlcHRvciwgdGhpc0FyZykge1xuICAgICAgcmV0dXJuIGludGVyY2VwdG9yLmNhbGwodGhpc0FyZywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZXhwbGljaXQgbWV0aG9kIGNoYWluaW5nIG9uIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNoYWluXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ2hhaW5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gd2l0aG91dCBleHBsaWNpdCBjaGFpbmluZ1xuICAgICAqIF8odXNlcnMpLmZpcnN0KCk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqXG4gICAgICogLy8gd2l0aCBleHBsaWNpdCBjaGFpbmluZ1xuICAgICAqIF8odXNlcnMpLmNoYWluKClcbiAgICAgKiAgIC5maXJzdCgpXG4gICAgICogICAucGljaygndXNlcicpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDaGFpbigpIHtcbiAgICAgIHJldHVybiBjaGFpbih0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgY2hhaW5lZCBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgd3JhcHBlZCByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb21taXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMl07XG4gICAgICogdmFyIHdyYXBwZWQgPSBfKGFycmF5KS5wdXNoKDMpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogd3JhcHBlZCA9IHdyYXBwZWQuY29tbWl0KCk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogd3JhcHBlZC5sYXN0KCk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDb21taXQoKSB7XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodGhpcy52YWx1ZSgpLCB0aGlzLl9fY2hhaW5fXyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhcnJheSBqb2luaW5nIGEgd3JhcHBlZCBhcnJheSB3aXRoIGFueSBhZGRpdGlvbmFsIGFycmF5c1xuICAgICAqIGFuZC9vciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb25jYXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjb25jYXRlbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxXTtcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oYXJyYXkpLmNvbmNhdCgyLCBbM10sIFtbNF1dKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHdyYXBwZWQudmFsdWUoKSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIFs0XV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKi9cbiAgICB2YXIgd3JhcHBlckNvbmNhdCA9IHJlc3RQYXJhbShmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICAgIHZhbHVlcyA9IGJhc2VGbGF0dGVuKHZhbHVlcyk7XG4gICAgICByZXR1cm4gdGhpcy50aHJ1KGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICAgIHJldHVybiBhcnJheUNvbmNhdChpc0FycmF5KGFycmF5KSA/IGFycmF5IDogW3RvT2JqZWN0KGFycmF5KV0sIHZhbHVlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgY2hhaW5lZCBzZXF1ZW5jZSBwbGFudGluZyBgdmFsdWVgIGFzIHRoZSB3cmFwcGVkIHZhbHVlLlxuICAgICAqXG4gICAgICogQG5hbWUgcGxhbnRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMl07XG4gICAgICogdmFyIHdyYXBwZWQgPSBfKGFycmF5KS5tYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiBNYXRoLnBvdyh2YWx1ZSwgMik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiB2YXIgb3RoZXIgPSBbMywgNF07XG4gICAgICogdmFyIG90aGVyV3JhcHBlZCA9IHdyYXBwZWQucGxhbnQob3RoZXIpO1xuICAgICAqXG4gICAgICogb3RoZXJXcmFwcGVkLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzksIDE2XVxuICAgICAqXG4gICAgICogd3JhcHBlZC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsxLCA0XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJQbGFudCh2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzO1xuXG4gICAgICB3aGlsZSAocGFyZW50IGluc3RhbmNlb2YgYmFzZUxvZGFzaCkge1xuICAgICAgICB2YXIgY2xvbmUgPSB3cmFwcGVyQ2xvbmUocGFyZW50KTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gY2xvbmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gY2xvbmU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZpb3VzID0gY2xvbmU7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5fX3dyYXBwZWRfXztcbiAgICAgIH1cbiAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVyc2VzIHRoZSB3cmFwcGVkIGFycmF5IHNvIHRoZSBmaXJzdCBlbGVtZW50IGJlY29tZXMgdGhlIGxhc3QsIHRoZVxuICAgICAqIHNlY29uZCBlbGVtZW50IGJlY29tZXMgdGhlIHNlY29uZCB0byBsYXN0LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyB0aGUgd3JhcHBlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldmVyc2VcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfKGFycmF5KS5yZXZlcnNlKCkudmFsdWUoKVxuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJSZXZlcnNlKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXztcblxuICAgICAgdmFyIGludGVyY2VwdG9yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICh3cmFwcGVkICYmIHdyYXBwZWQuX19kaXJfXyA8IDApID8gdmFsdWUgOiB2YWx1ZS5yZXZlcnNlKCk7XG4gICAgICB9O1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgdmFyIHdyYXBwZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSB7XG4gICAgICAgICAgd3JhcHBlZCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwcGVkID0gd3JhcHBlZC5yZXZlcnNlKCk7XG4gICAgICAgIHdyYXBwZWQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZWQsIHRoaXMuX19jaGFpbl9fKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnRocnUoaW50ZXJjZXB0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIHRoZSByZXN1bHQgb2YgY29lcmNpbmcgdGhlIHVud3JhcHBlZCB2YWx1ZSB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRvU3RyaW5nXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ2hhaW5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb2VyY2VkIHN0cmluZyB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMiwgM10pLnRvU3RyaW5nKCk7XG4gICAgICogLy8gPT4gJzEsMiwzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJUb1N0cmluZygpIHtcbiAgICAgIHJldHVybiAodGhpcy52YWx1ZSgpICsgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBjaGFpbmVkIHNlcXVlbmNlIHRvIGV4dHJhY3QgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHZhbHVlXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgcnVuLCB0b0pTT04sIHZhbHVlT2ZcbiAgICAgKiBAY2F0ZWdvcnkgQ2hhaW5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKFsxLCAyLCAzXSkudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyVmFsdWUoKSB7XG4gICAgICByZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZSh0aGlzLl9fd3JhcHBlZF9fLCB0aGlzLl9fYWN0aW9uc19fKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleXMsIG9yIGluZGV4ZXMsXG4gICAgICogb2YgYGNvbGxlY3Rpb25gLiBLZXlzIG1heSBiZSBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBhcmd1bWVudHMgb3IgYXMgYXJyYXlzXG4gICAgICogb2Yga2V5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW118c3RyaW5nfHN0cmluZ1tdKX0gW3Byb3BzXSBUaGUgcHJvcGVydHkgbmFtZXNcbiAgICAgKiAgb3IgaW5kZXhlcyBvZiBlbGVtZW50cyB0byBwaWNrLCBzcGVjaWZpZWQgaW5kaXZpZHVhbGx5IG9yIGluIGFycmF5cy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwaWNrZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uYXQoWydhJywgJ2InLCAnYyddLCBbMCwgMl0pO1xuICAgICAqIC8vID0+IFsnYScsICdjJ11cbiAgICAgKlxuICAgICAqIF8uYXQoWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ10sIDAsIDIpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIHZhciBhdCA9IHJlc3RQYXJhbShmdW5jdGlvbihjb2xsZWN0aW9uLCBwcm9wcykge1xuICAgICAgcmV0dXJuIGJhc2VBdChjb2xsZWN0aW9uLCBiYXNlRmxhdHRlbihwcm9wcykpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJvdWdoIGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlXG4gICAgICogb2YgZWFjaCBrZXkgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUga2V5IHdhcyByZXR1cm5lZCBieSBgaXRlcmF0ZWVgLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNvdW50QnkoWzQuMywgNi4xLCA2LjRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gTWF0aC5mbG9vcihuKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICc0JzogMSwgJzYnOiAyIH1cbiAgICAgKlxuICAgICAqIF8uY291bnRCeShbNC4zLCA2LjEsIDYuNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiB0aGlzLmZsb29yKG4pO1xuICAgICAqIH0sIE1hdGgpO1xuICAgICAqIC8vID0+IHsgJzQnOiAxLCAnNic6IDIgfVxuICAgICAqXG4gICAgICogXy5jb3VudEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICogLy8gPT4geyAnMyc6IDIsICc1JzogMSB9XG4gICAgICovXG4gICAgdmFyIGNvdW50QnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkgPyArK3Jlc3VsdFtrZXldIDogKHJlc3VsdFtrZXldID0gMSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYWxsKiogZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIFRoZSBwcmVkaWNhdGUgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICAgICAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGFsbFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ldmVyeShbdHJ1ZSwgMSwgbnVsbCwgJ3llcyddLCBCb29sZWFuKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZXZlcnkodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5ldmVyeSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXZlcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUV2ZXJ5IDogYmFzZUV2ZXJ5O1xuICAgICAgaWYgKHRoaXNBcmcgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSkge1xuICAgICAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAnZnVuY3Rpb24nIHx8IHRoaXNBcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcmVkaWNhdGUgPSBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgcHJlZGljYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICAgICAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgc2VsZWN0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgcHJlZGljYXRlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5maWx0ZXIoWzQsIDUsIDZdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbNCwgNl1cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScsIGZhbHNlKSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyk7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAgICAgKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZFxuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGRldGVjdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKGNocikge1xuICAgICAqICAgcmV0dXJuIGNoci5hZ2UgPCA0MDtcbiAgICAgKiB9KSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucmVzdWx0KF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnJlc3VsdChfLmZpbmQodXNlcnMsICdhY3RpdmUnLCBmYWxzZSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucmVzdWx0KF8uZmluZCh1c2VycywgJ2FjdGl2ZScpLCAndXNlcicpO1xuICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICovXG4gICAgdmFyIGZpbmQgPSBjcmVhdGVGaW5kKGJhc2VFYWNoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3QoWzEsIDIsIDMsIDRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgdmFyIGZpbmRMYXN0ID0gY3JlYXRlRmluZChiYXNlRWFjaFJpZ2h0LCB0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCBhbmQgdGhlXG4gICAgICogc291cmNlIG9iamVjdCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGVxdWl2YWxlbnQgcHJvcGVydHlcbiAgICAgKiB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYm9vbGVhbnMsIGBEYXRlYCBvYmplY3RzLFxuICAgICAqIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsIGFuZCBzdHJpbmdzLiBPYmplY3RzIGFyZSBjb21wYXJlZCBieVxuICAgICAqIHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGb3IgY29tcGFyaW5nIGEgc2luZ2xlXG4gICAgICogb3duIG9yIGluaGVyaXRlZCBwcm9wZXJ0eSB2YWx1ZSBzZWUgYF8ubWF0Y2hlc1Byb3BlcnR5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KF8uZmluZFdoZXJlKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gJ2Jhcm5leSdcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KF8uZmluZFdoZXJlKHVzZXJzLCB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0pLCAndXNlcicpO1xuICAgICAqIC8vID0+ICdmcmVkJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRXaGVyZShjb2xsZWN0aW9uLCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBmaW5kKGNvbGxlY3Rpb24sIGJhc2VNYXRjaGVzKHNvdXJjZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGludm9raW5nIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gICAgICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5XG4gICAgICogYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBBcyB3aXRoIG90aGVyIFwiQ29sbGVjdGlvbnNcIiBtZXRob2RzLCBvYmplY3RzIHdpdGggYSBcImxlbmd0aFwiIHByb3BlcnR5XG4gICAgICogYXJlIGl0ZXJhdGVkIGxpa2UgYXJyYXlzLiBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yIGBfLmZvckluYCBvciBgXy5mb3JPd25gXG4gICAgICogbWF5IGJlIHVzZWQgZm9yIG9iamVjdCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgZWFjaFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fHN0cmluZ30gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oWzEsIDJdKS5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKG4pO1xuICAgICAqIH0pLnZhbHVlKCk7XG4gICAgICogLy8gPT4gbG9ncyBlYWNoIHZhbHVlIGZyb20gbGVmdCB0byByaWdodCBhbmQgcmV0dXJucyB0aGUgYXJyYXlcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaCh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKG4sIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2cobiwga2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBsb2dzIGVhY2ggdmFsdWUta2V5IHBhaXIgYW5kIHJldHVybnMgdGhlIG9iamVjdCAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciBmb3JFYWNoID0gY3JlYXRlRm9yRWFjaChhcnJheUVhY2gsIGJhc2VFYWNoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yRWFjaGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgZWFjaFJpZ2h0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R8c3RyaW5nfSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMl0pLmZvckVhY2hSaWdodChmdW5jdGlvbihuKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhuKTtcbiAgICAgKiB9KS52YWx1ZSgpO1xuICAgICAqIC8vID0+IGxvZ3MgZWFjaCB2YWx1ZSBmcm9tIHJpZ2h0IHRvIGxlZnQgYW5kIHJldHVybnMgdGhlIGFycmF5XG4gICAgICovXG4gICAgdmFyIGZvckVhY2hSaWdodCA9IGNyZWF0ZUZvckVhY2goYXJyYXlFYWNoUmlnaHQsIGJhc2VFYWNoUmlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJvdWdoIGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlXG4gICAgICogb2YgZWFjaCBrZXkgaXMgYW4gYXJyYXkgb2YgdGhlIGVsZW1lbnRzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICAgICAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3JvdXBCeShbNC4yLCA2LjEsIDYuNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBNYXRoLmZsb29yKG4pO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJzQnOiBbNC4yXSwgJzYnOiBbNi4xLCA2LjRdIH1cbiAgICAgKlxuICAgICAqIF8uZ3JvdXBCeShbNC4yLCA2LjEsIDYuNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiB0aGlzLmZsb29yKG4pO1xuICAgICAqIH0sIE1hdGgpO1xuICAgICAqIC8vID0+IHsgJzQnOiBbNC4yXSwgJzYnOiBbNi4xLCA2LjRdIH1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5ncm91cEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICogLy8gPT4geyAnMyc6IFsnb25lJywgJ3R3byddLCAnNSc6IFsndGhyZWUnXSB9XG4gICAgICovXG4gICAgdmFyIGdyb3VwQnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gYGNvbGxlY3Rpb25gIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCBpcyB1c2VkIGFzIHRoZSBvZmZzZXRcbiAgICAgKiBmcm9tIHRoZSBlbmQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGNvbnRhaW5zLCBpbmNsdWRlXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2VhcmNoLlxuICAgICAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ucmVkdWNlYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoeyAndXNlcic6ICdmcmVkJywgJ2FnZSc6IDQwIH0sICdmcmVkJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcygncGViYmxlcycsICdlYicpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbmNsdWRlcyhjb2xsZWN0aW9uLCB0YXJnZXQsIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uID8gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pIDogMDtcbiAgICAgIGlmICghaXNMZW5ndGgobGVuZ3RoKSkge1xuICAgICAgICBjb2xsZWN0aW9uID0gdmFsdWVzKGNvbGxlY3Rpb24pO1xuICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbCh0YXJnZXQsIGZyb21JbmRleCwgZ3VhcmQpKSkge1xuICAgICAgICBmcm9tSW5kZXggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJvbUluZGV4ID0gZnJvbUluZGV4IDwgMCA/IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApIDogKGZyb21JbmRleCB8fCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAodHlwZW9mIGNvbGxlY3Rpb24gPT0gJ3N0cmluZycgfHwgIWlzQXJyYXkoY29sbGVjdGlvbikgJiYgaXNTdHJpbmcoY29sbGVjdGlvbikpXG4gICAgICAgID8gKGZyb21JbmRleCA8PSBsZW5ndGggJiYgY29sbGVjdGlvbi5pbmRleE9mKHRhcmdldCwgZnJvbUluZGV4KSA+IC0xKVxuICAgICAgICA6ICghIWxlbmd0aCAmJiBnZXRJbmRleE9mKGNvbGxlY3Rpb24sIHRhcmdldCwgZnJvbUluZGV4KSA+IC0xKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocm91Z2ggYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVcbiAgICAgKiBvZiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGZ1bmN0aW9uIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIga2V5RGF0YSA9IFtcbiAgICAgKiAgIHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LFxuICAgICAqICAgeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmluZGV4Qnkoa2V5RGF0YSwgJ2RpcicpO1xuICAgICAqIC8vID0+IHsgJ2xlZnQnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ3JpZ2h0JzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gICAgICpcbiAgICAgKiBfLmluZGV4Qnkoa2V5RGF0YSwgZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvYmplY3QuY29kZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAnZCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICAgICAqXG4gICAgICogXy5pbmRleEJ5KGtleURhdGEsIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAqICAgcmV0dXJuIHRoaXMuZnJvbUNoYXJDb2RlKG9iamVjdC5jb2RlKTtcbiAgICAgKiB9LCBTdHJpbmcpO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ2QnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAgICAgKi9cbiAgICB2YXIgaW5kZXhCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gLCByZXR1cm5pbmdcbiAgICAgKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBhcmUgcHJvdmlkZWQgdG8gZWFjaCBpbnZva2VkIG1ldGhvZC4gSWYgYG1ldGhvZE5hbWVgIGlzIGEgZnVuY3Rpb24gaXQgaXNcbiAgICAgKiBpbnZva2VkIGZvciwgYW5kIGB0aGlzYCBib3VuZCB0bywgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZSBvclxuICAgICAqICB0aGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW52b2tlKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gICAgICogLy8gPT4gW1sxLCA1LCA3XSwgWzEsIDIsIDNdXVxuICAgICAqXG4gICAgICogXy5pbnZva2UoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICAgICAqIC8vID0+IFtbJzEnLCAnMicsICczJ10sIFsnNCcsICc1JywgJzYnXV1cbiAgICAgKi9cbiAgICB2YXIgaW52b2tlID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHBhdGgsIGFyZ3MpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICAgICAgaXNQcm9wID0gaXNLZXkocGF0aCksXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBwYXRoIDogKChpc1Byb3AgJiYgdmFsdWUgIT0gbnVsbCkgPyB2YWx1ZVtwYXRoXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHJlc3VsdFsrK2luZGV4XSA9IGZ1bmMgPyBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKSA6IGludm9rZVBhdGgodmFsdWUsIHBhdGgsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocm91Z2hcbiAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gICAgICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gICAgICpcbiAgICAgKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAgICAgKiBgYXJ5YCwgYGNhbGxiYWNrYCwgYGNodW5rYCwgYGNsb25lYCwgYGNyZWF0ZWAsIGBjdXJyeWAsIGBjdXJyeVJpZ2h0YCxcbiAgICAgKiBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLCBgZmlsbGAsIGBmbGF0dGVuYCwgYGludmVydGAsIGBtYXhgLCBgbWluYCxcbiAgICAgKiBgcGFyc2VJbnRgLCBgc2xpY2VgLCBgc29ydEJ5YCwgYHRha2VgLCBgdGFrZVJpZ2h0YCwgYHRlbXBsYXRlYCwgYHRyaW1gLFxuICAgICAqIGB0cmltTGVmdGAsIGB0cmltUmlnaHRgLCBgdHJ1bmNgLCBgcmFuZG9tYCwgYHJhbmdlYCwgYHNhbXBsZWAsIGBzb21lYCxcbiAgICAgKiBgc3VtYCwgYHVuaXFgLCBhbmQgYHdvcmRzYFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGNvbGxlY3RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHRpbWVzVGhyZWUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiAzO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8ubWFwKFsxLCAyXSwgdGltZXNUaHJlZSk7XG4gICAgICogLy8gPT4gWzMsIDZdXG4gICAgICpcbiAgICAgKiBfLm1hcCh7ICdhJzogMSwgJ2InOiAyIH0sIHRpbWVzVGhyZWUpO1xuICAgICAqIC8vID0+IFszLCA2XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLm1hcCh1c2VycywgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5TWFwIDogYmFzZU1hcDtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgaXRlcmF0ZWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byB0d28gZ3JvdXBzLCB0aGUgZmlyc3Qgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IsIHdoaWxlIHRoZSBzZWNvbmQgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgYm91bmRcbiAgICAgKiB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgcHJlZGljYXRlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFydGl0aW9uKFsxLCAyLCAzXSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFtbMSwgM10sIFsyXV1cbiAgICAgKlxuICAgICAqIF8ucGFydGl0aW9uKFsxLjIsIDIuMywgMy40XSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIHRoaXMuZmxvb3IobikgJSAyO1xuICAgICAqIH0sIE1hdGgpO1xuICAgICAqIC8vID0+IFtbMS4yLCAzLjRdLCBbMi4zXV1cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIHZhciBtYXBwZXIgPSBmdW5jdGlvbihhcnJheSkge1xuICAgICAqICAgcmV0dXJuIF8ucGx1Y2soYXJyYXksICd1c2VyJyk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLm1hcChfLnBhcnRpdGlvbih1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IGZhbHNlIH0pLCBtYXBwZXIpO1xuICAgICAqIC8vID0+IFtbJ3BlYmJsZXMnXSwgWydiYXJuZXknLCAnZnJlZCddXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5tYXAoXy5wYXJ0aXRpb24odXNlcnMsICdhY3RpdmUnLCBmYWxzZSksIG1hcHBlcik7XG4gICAgICogLy8gPT4gW1snYmFybmV5JywgJ3BlYmJsZXMnXSwgWydmcmVkJ11dXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ubWFwKF8ucGFydGl0aW9uKHVzZXJzLCAnYWN0aXZlJyksIG1hcHBlcik7XG4gICAgICogLy8gPT4gW1snZnJlZCddLCBbJ2Jhcm5leScsICdwZWJibGVzJ11dXG4gICAgICovXG4gICAgdmFyIHBhcnRpdGlvbiA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHRba2V5ID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uKCkgeyByZXR1cm4gW1tdLCBbXV07IH0pO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgYHBhdGhgIGZyb20gYWxsIGVsZW1lbnRzIGluIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gcGx1Y2suXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ucGx1Y2sodXNlcnMsICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiB2YXIgdXNlckluZGV4ID0gXy5pbmRleEJ5KHVzZXJzLCAndXNlcicpO1xuICAgICAqIF8ucGx1Y2sodXNlckluZGV4LCAnYWdlJyk7XG4gICAgICogLy8gPT4gWzM2LCA0MF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwbHVjayhjb2xsZWN0aW9uLCBwYXRoKSB7XG4gICAgICByZXR1cm4gbWFwKGNvbGxlY3Rpb24sIHByb3BlcnR5KHBhdGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWR1Y2VzIGBjb2xsZWN0aW9uYCB0byBhIHZhbHVlIHdoaWNoIGlzIHRoZSBhY2N1bXVsYXRlZCByZXN1bHQgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhyb3VnaCBgaXRlcmF0ZWVgLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLiBJZiBgYWNjdW11bGF0b3JgXG4gICAgICogaXMgbm90IHByb3ZpZGVkIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsXG4gICAgICogdmFsdWUuIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOlxuICAgICAqIChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgKiBgXy5yZWR1Y2VgLCBgXy5yZWR1Y2VSaWdodGAsIGFuZCBgXy50cmFuc2Zvcm1gLlxuICAgICAqXG4gICAgICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gICAgICogYGFzc2lnbmAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgaW5jbHVkZXNgLCBgbWVyZ2VgLCBgc29ydEJ5QWxsYCxcbiAgICAgKiBhbmQgYHNvcnRCeU9yZGVyYFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGZvbGRsLCBpbmplY3RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZWR1Y2UoWzEsIDJdLCBmdW5jdGlvbih0b3RhbCwgbikge1xuICAgICAqICAgcmV0dXJuIHRvdGFsICsgbjtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnJlZHVjZSh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHJlc3VsdCwgbiwga2V5KSB7XG4gICAgICogICByZXN1bHRba2V5XSA9IG4gKiAzO1xuICAgICAqICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgKiB9LCB7fSk7XG4gICAgICogLy8gPT4geyAnYSc6IDMsICdiJzogNiB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgdmFyIHJlZHVjZSA9IGNyZWF0ZVJlZHVjZShhcnJheVJlZHVjZSwgYmFzZUVhY2gpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yZWR1Y2VgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGZvbGRyXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFtbMCwgMV0sIFsyLCAzXSwgWzQsIDVdXTtcbiAgICAgKlxuICAgICAqIF8ucmVkdWNlUmlnaHQoYXJyYXksIGZ1bmN0aW9uKGZsYXR0ZW5lZCwgb3RoZXIpIHtcbiAgICAgKiAgIHJldHVybiBmbGF0dGVuZWQuY29uY2F0KG90aGVyKTtcbiAgICAgKiB9LCBbXSk7XG4gICAgICogLy8gPT4gWzQsIDUsIDIsIDMsIDAsIDFdXG4gICAgICovXG4gICAgdmFyIHJlZHVjZVJpZ2h0ID0gY3JlYXRlUmVkdWNlKGFycmF5UmVkdWNlUmlnaHQsIGJhc2VFYWNoUmlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmZpbHRlcmA7IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYFxuICAgICAqIHRoYXQgYHByZWRpY2F0ZWAgZG9lcyAqKm5vdCoqIHJldHVybiB0cnV0aHkgZm9yLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgcHJlZGljYXRlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZWplY3QoWzEsIDIsIDMsIDRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbMSwgM11cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8ucmVqZWN0KHVzZXJzLCB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScsIGZhbHNlKSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8ucmVqZWN0KHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlamVjdChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyk7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSByYW5kb20gZWxlbWVudCBvciBgbmAgcmFuZG9tIGVsZW1lbnRzIGZyb20gYSBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbl0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBzYW1wbGUocykuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2FtcGxlKFsxLCAyLCAzLCA0XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogXy5zYW1wbGUoWzEsIDIsIDMsIDRdLCAyKTtcbiAgICAgKiAvLyA9PiBbMywgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzYW1wbGUoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIHtcbiAgICAgIGlmIChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSA6IG4gPT0gbnVsbCkge1xuICAgICAgICBjb2xsZWN0aW9uID0gdG9JdGVyYWJsZShjb2xsZWN0aW9uKTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbGVuZ3RoID4gMCA/IGNvbGxlY3Rpb25bYmFzZVJhbmRvbSgwLCBsZW5ndGggLSAxKV0gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSB0b0FycmF5KGNvbGxlY3Rpb24pLFxuICAgICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGgsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgICAgbiA9IG5hdGl2ZU1pbihuIDwgMCA/IDAgOiAoK24gfHwgMCksIGxlbmd0aCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICAgICAgdmFyIHJhbmQgPSBiYXNlUmFuZG9tKGluZGV4LCBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgdmFsdWUgPSByZXN1bHRbcmFuZF07XG5cbiAgICAgICAgcmVzdWx0W3JhbmRdID0gcmVzdWx0W2luZGV4XTtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygc2h1ZmZsZWQgdmFsdWVzLCB1c2luZyBhIHZlcnNpb24gb2YgdGhlXG4gICAgICogW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzaHVmZmxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNodWZmbGUoWzEsIDIsIDMsIDRdKTtcbiAgICAgKiAvLyA9PiBbNCwgMSwgMywgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaHVmZmxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBzYW1wbGUoY29sbGVjdGlvbiwgUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNpemUgb2YgYGNvbGxlY3Rpb25gIGJ5IHJldHVybmluZyBpdHMgbGVuZ3RoIGZvciBhcnJheS1saWtlXG4gICAgICogdmFsdWVzIG9yIHRoZSBudW1iZXIgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBmb3Igb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc2l6ZSBvZiBgY29sbGVjdGlvbmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2l6ZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uc2l6ZSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8uc2l6ZSgncGViYmxlcycpO1xuICAgICAqIC8vID0+IDdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uID8gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pIDogMDtcbiAgICAgIHJldHVybiBpc0xlbmd0aChsZW5ndGgpID8gbGVuZ3RoIDoga2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFueSoqIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGFzIHNvb24gYXMgaXQgZmluZHMgYSBwYXNzaW5nIHZhbHVlIGFuZCBkb2VzIG5vdCBpdGVyYXRlXG4gICAgICogb3ZlciB0aGUgZW50aXJlIGNvbGxlY3Rpb24uIFRoZSBwcmVkaWNhdGUgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGFueVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29tZShbbnVsbCwgMCwgJ3llcycsIGZhbHNlXSwgQm9vbGVhbik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc2AgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5zb21lKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5zb21lKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5zb21lKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNvbWUgOiBiYXNlU29tZTtcbiAgICAgIGlmICh0aGlzQXJnICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgdGhpc0FyZykpIHtcbiAgICAgICAgcHJlZGljYXRlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT0gJ2Z1bmN0aW9uJyB8fCB0aGlzQXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cywgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgcmVzdWx0cyBvZlxuICAgICAqIHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aHJvdWdoIGBpdGVyYXRlZWAuIFRoaXMgbWV0aG9kIHBlcmZvcm1zXG4gICAgICogYSBzdGFibGUgc29ydCwgdGhhdCBpcywgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzb3J0IG9yZGVyIG9mIGVxdWFsIGVsZW1lbnRzLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydEJ5KFsxLCAyLCAzXSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIE1hdGguc2luKG4pO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFszLCAxLCAyXVxuICAgICAqXG4gICAgICogXy5zb3J0QnkoWzEsIDIsIDNdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gdGhpcy5zaW4obik7XG4gICAgICogfSwgTWF0aCk7XG4gICAgICogLy8gPT4gWzMsIDEsIDJdXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucGx1Y2soXy5zb3J0QnkodXNlcnMsICd1c2VyJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0QnkoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXNBcmcgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICBpdGVyYXRlZSA9IGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VNYXAoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBjb21wYXJlQXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRCeWAgZXhjZXB0IHRoYXQgaXQgY2FuIHNvcnQgYnkgbXVsdGlwbGUgaXRlcmF0ZWVzXG4gICAgICogb3IgcHJvcGVydHkgbmFtZXMuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGFuIGl0ZXJhdGVlIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBhbiBpdGVyYXRlZSB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXXxPYmplY3R8T2JqZWN0W118c3RyaW5nfHN0cmluZ1tdKX0gaXRlcmF0ZWVzXG4gICAgICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieSwgc3BlY2lmaWVkIGFzIGluZGl2aWR1YWwgdmFsdWVzIG9yIGFycmF5cyBvZiB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQyIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKF8uc29ydEJ5QWxsKHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10pLCBfLnZhbHVlcyk7XG4gICAgICogLy8gPT4gW1snYmFybmV5JywgMzRdLCBbJ2Jhcm5leScsIDM2XSwgWydmcmVkJywgNDJdLCBbJ2ZyZWQnLCA0OF1dXG4gICAgICpcbiAgICAgKiBfLm1hcChfLnNvcnRCeUFsbCh1c2VycywgJ3VzZXInLCBmdW5jdGlvbihjaHIpIHtcbiAgICAgKiAgIHJldHVybiBNYXRoLmZsb29yKGNoci5hZ2UgLyAxMCk7XG4gICAgICogfSksIF8udmFsdWVzKTtcbiAgICAgKiAvLyA9PiBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDQyXV1cbiAgICAgKi9cbiAgICB2YXIgc29ydEJ5QWxsID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlcykge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgZ3VhcmQgPSBpdGVyYXRlZXNbMl07XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0sIGd1YXJkKSkge1xuICAgICAgICBpdGVyYXRlZXMubGVuZ3RoID0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU29ydEJ5T3JkZXIoY29sbGVjdGlvbiwgYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzKSwgW10pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0QnlBbGxgIGV4Y2VwdCB0aGF0IGl0IGFsbG93cyBzcGVjaWZ5aW5nIHRoZVxuICAgICAqIHNvcnQgb3JkZXJzIG9mIHRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS4gSWYgYG9yZGVyc2AgaXMgdW5zcGVjaWZpZWQsIGFsbFxuICAgICAqIHZhbHVlcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLCBhIHZhbHVlIGlzIHNvcnRlZCBpblxuICAgICAqIGFzY2VuZGluZyBvcmRlciBpZiBpdHMgY29ycmVzcG9uZGluZyBvcmRlciBpcyBcImFzY1wiLCBhbmQgZGVzY2VuZGluZyBpZiBcImRlc2NcIi5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYW4gaXRlcmF0ZWUgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGFuIGl0ZXJhdGVlIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IGl0ZXJhdGVlcyBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHBhcmFtIHtib29sZWFuW119IFtvcmRlcnNdIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ucmVkdWNlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQ4IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDIgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gc29ydCBieSBgdXNlcmAgaW4gYXNjZW5kaW5nIG9yZGVyIGFuZCBieSBgYWdlYCBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gICAgICogXy5tYXAoXy5zb3J0QnlPcmRlcih1c2VycywgWyd1c2VyJywgJ2FnZSddLCBbJ2FzYycsICdkZXNjJ10pLCBfLnZhbHVlcyk7XG4gICAgICogLy8gPT4gW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCA0Ml1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydEJ5T3JkZXIoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMsIGd1YXJkKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChpdGVyYXRlZXMsIG9yZGVycywgZ3VhcmQpKSB7XG4gICAgICAgIG9yZGVycyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBcnJheShpdGVyYXRlZXMpKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IGl0ZXJhdGVlcyA9PSBudWxsID8gW10gOiBbaXRlcmF0ZWVzXTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgIG9yZGVycyA9IG9yZGVycyA9PSBudWxsID8gW10gOiBbb3JkZXJzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU29ydEJ5T3JkZXIoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCBhbmQgdGhlXG4gICAgICogc291cmNlIG9iamVjdCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgZXF1aXZhbGVudFxuICAgICAqIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBib29sZWFucywgYERhdGVgIG9iamVjdHMsXG4gICAgICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgYW5kIHN0cmluZ3MuIE9iamVjdHMgYXJlIGNvbXBhcmVkIGJ5XG4gICAgICogdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZvciBjb21wYXJpbmcgYSBzaW5nbGVcbiAgICAgKiBvd24gb3IgaW5oZXJpdGVkIHByb3BlcnR5IHZhbHVlIHNlZSBgXy5tYXRjaGVzUHJvcGVydHlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2VhcmNoLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UsICdwZXRzJzogWydob3BweSddIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUsICdwZXRzJzogWydiYWJ5IHB1c3MnLCAnZGlubyddIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5wbHVjayhfLndoZXJlKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0pLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIF8ucGx1Y2soXy53aGVyZSh1c2VycywgeyAncGV0cyc6IFsnZGlubyddIH0pLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnZnJlZCddXG4gICAgICovXG4gICAgZnVuY3Rpb24gd2hlcmUoY29sbGVjdGlvbiwgc291cmNlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyKGNvbGxlY3Rpb24sIGJhc2VNYXRjaGVzKHNvdXJjZSkpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIFVuaXggZXBvY2hcbiAgICAgKiAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBEYXRlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gICAgICogfSwgXy5ub3coKSk7XG4gICAgICogLy8gPT4gbG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgZnVuY3Rpb24gdG8gYmUgaW52b2tlZFxuICAgICAqL1xuICAgIHZhciBub3cgPSBuYXRpdmVOb3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5iZWZvcmVgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICogYGZ1bmNgIG9uY2UgaXQgaXMgY2FsbGVkIGBuYCBvciBtb3JlIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxscyBiZWZvcmUgYGZ1bmNgIGlzIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNhdmVzID0gWydwcm9maWxlJywgJ3NldHRpbmdzJ107XG4gICAgICpcbiAgICAgKiB2YXIgZG9uZSA9IF8uYWZ0ZXIoc2F2ZXMubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdkb25lIHNhdmluZyEnKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaChzYXZlcywgZnVuY3Rpb24odHlwZSkge1xuICAgICAqICAgYXN5bmNTYXZlKHsgJ3R5cGUnOiB0eXBlLCAnY29tcGxldGUnOiBkb25lIH0pO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IGxvZ3MgJ2RvbmUgc2F2aW5nIScgYWZ0ZXIgdGhlIHR3byBhc3luYyBzYXZlcyBoYXZlIGNvbXBsZXRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFmdGVyKG4sIGZ1bmMpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIHRlbXAgPSBuO1xuICAgICAgICAgIG4gPSBmdW5jO1xuICAgICAgICAgIGZ1bmMgPSB0ZW1wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbiA9IG5hdGl2ZUlzRmluaXRlKG4gPSArbikgPyBuIDogMDtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKC0tbiA8IDEpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdXAgdG8gYG5gIGFyZ3VtZW50cyBpZ25vcmluZyBhbnlcbiAgICAgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IGNhcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy5hcnkocGFyc2VJbnQsIDEpKTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJ5KGZ1bmMsIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoZnVuYywgbiwgZ3VhcmQpKSB7XG4gICAgICAgIG4gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBuID0gKGZ1bmMgJiYgbiA9PSBudWxsKSA/IGZ1bmMubGVuZ3RoIDogbmF0aXZlTWF4KCtuIHx8IDAsIDApO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIoZnVuYywgQVJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHNcbiAgICAgKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQgaXMgY2FsbGVkIGxlc3MgdGhhbiBgbmAgdGltZXMuIFN1YnNlcXVlbnRcbiAgICAgKiBjYWxscyB0byB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgaW52b2NhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYXQgd2hpY2ggYGZ1bmNgIGlzIG5vIGxvbmdlciBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGpRdWVyeSgnI2FkZCcpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAgICAgKiAvLyA9PiBhbGxvd3MgYWRkaW5nIHVwIHRvIDQgY29udGFjdHMgdG8gdGhlIGxpc3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiZWZvcmUobiwgZnVuYykge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIHRlbXAgPSBuO1xuICAgICAgICAgIG4gPSBmdW5jO1xuICAgICAgICAgIGZ1bmMgPSB0ZW1wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoLS1uID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobiA8PSAxKSB7XG4gICAgICAgICAgZnVuYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgcHJlcGVuZHMgYW55IGFkZGl0aW9uYWwgYF8uYmluZGAgYXJndW1lbnRzIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZVxuICAgICAqIGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGBfLmJpbmQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gICAgICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBuYXRpdmUgYEZ1bmN0aW9uI2JpbmRgIHRoaXMgbWV0aG9kIGRvZXMgbm90IHNldCB0aGUgXCJsZW5ndGhcIlxuICAgICAqIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJpbmQuXG4gICAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBncmVldCA9IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnIH07XG4gICAgICpcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBwbGFjZWhvbGRlcnNcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgXywgJyEnKTtcbiAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICovXG4gICAgdmFyIGJpbmQgPSByZXN0UGFyYW0oZnVuY3Rpb24oZnVuYywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gQklORF9GTEFHO1xuICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkge1xuICAgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBiaW5kLnBsYWNlaG9sZGVyKTtcbiAgICAgICAgYml0bWFzayB8PSBQQVJUSUFMX0ZMQUc7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcihmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBtZXRob2RzIG9mIGFuIG9iamVjdCB0byB0aGUgb2JqZWN0IGl0c2VsZiwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nXG4gICAgICogbWV0aG9kLiBNZXRob2QgbmFtZXMgbWF5IGJlIHNwZWNpZmllZCBhcyBpbmRpdmlkdWFsIGFyZ3VtZW50cyBvciBhcyBhcnJheXNcbiAgICAgKiBvZiBtZXRob2QgbmFtZXMuIElmIG5vIG1ldGhvZCBuYW1lcyBhcmUgcHJvdmlkZWQgYWxsIGVudW1lcmFibGUgZnVuY3Rpb25cbiAgICAgKiBwcm9wZXJ0aWVzLCBvd24gYW5kIGluaGVyaXRlZCwgb2YgYG9iamVjdGAgYXJlIGJvdW5kLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gYmluZCBhbmQgYXNzaWduIHRoZSBib3VuZCBtZXRob2RzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFttZXRob2ROYW1lc10gVGhlIG9iamVjdCBtZXRob2QgbmFtZXMgdG8gYmluZCxcbiAgICAgKiAgc3BlY2lmaWVkIGFzIGluZGl2aWR1YWwgbWV0aG9kIG5hbWVzIG9yIGFycmF5cyBvZiBtZXRob2QgbmFtZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHZpZXcgPSB7XG4gICAgICogICAnbGFiZWwnOiAnZG9jcycsXG4gICAgICogICAnb25DbGljayc6IGZ1bmN0aW9uKCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnY2xpY2tlZCAnICsgdGhpcy5sYWJlbCk7XG4gICAgICogICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8uYmluZEFsbCh2aWV3KTtcbiAgICAgKiBqUXVlcnkoJyNkb2NzJykub24oJ2NsaWNrJywgdmlldy5vbkNsaWNrKTtcbiAgICAgKiAvLyA9PiBsb2dzICdjbGlja2VkIGRvY3MnIHdoZW4gdGhlIGVsZW1lbnQgaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIHZhciBiaW5kQWxsID0gcmVzdFBhcmFtKGZ1bmN0aW9uKG9iamVjdCwgbWV0aG9kTmFtZXMpIHtcbiAgICAgIG1ldGhvZE5hbWVzID0gbWV0aG9kTmFtZXMubGVuZ3RoID8gYmFzZUZsYXR0ZW4obWV0aG9kTmFtZXMpIDogZnVuY3Rpb25zKG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IG1ldGhvZE5hbWVzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IG1ldGhvZE5hbWVzW2luZGV4XTtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBjcmVhdGVXcmFwcGVyKG9iamVjdFtrZXldLCBCSU5EX0ZMQUcsIG9iamVjdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBvYmplY3Rba2V5XWAgYW5kIHByZXBlbmRzXG4gICAgICogYW55IGFkZGl0aW9uYWwgYF8uYmluZEtleWAgYXJndW1lbnRzIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSBib3VuZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgXy5iaW5kYCBieSBhbGxvd2luZyBib3VuZCBmdW5jdGlvbnMgdG8gcmVmZXJlbmNlXG4gICAgICogbWV0aG9kcyB0aGF0IG1heSBiZSByZWRlZmluZWQgb3IgZG9uJ3QgeWV0IGV4aXN0LlxuICAgICAqIFNlZSBbUGV0ZXIgTWljaGF1eCdzIGFydGljbGVdKGh0dHA6Ly9wZXRlci5taWNoYXV4LmNhL2FydGljbGVzL2xhenktZnVuY3Rpb24tZGVmaW5pdGlvbi1wYXR0ZXJuKVxuICAgICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uYmluZEtleS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdGhlIG1ldGhvZCBiZWxvbmdzIHRvLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge1xuICAgICAqICAgJ3VzZXInOiAnZnJlZCcsXG4gICAgICogICAnZ3JlZXQnOiBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZEtleShvYmplY3QsICdncmVldCcsICdoaScpO1xuICAgICAqIGJvdW5kKCchJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQhJ1xuICAgICAqXG4gICAgICogb2JqZWN0LmdyZWV0ID0gZnVuY3Rpb24oZ3JlZXRpbmcsIHB1bmN0dWF0aW9uKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAneWEgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBib3VuZCgnIScpO1xuICAgICAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgcGxhY2Vob2xkZXJzXG4gICAgICogdmFyIGJvdW5kID0gXy5iaW5kS2V5KG9iamVjdCwgJ2dyZWV0JywgXywgJyEnKTtcbiAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGl5YSBmcmVkISdcbiAgICAgKi9cbiAgICB2YXIgYmluZEtleSA9IHJlc3RQYXJhbShmdW5jdGlvbihvYmplY3QsIGtleSwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gQklORF9GTEFHIHwgQklORF9LRVlfRkxBRztcbiAgICAgIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgYmluZEtleS5wbGFjZWhvbGRlcik7XG4gICAgICAgIGJpdG1hc2sgfD0gUEFSVElBTF9GTEFHO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIoa2V5LCBiaXRtYXNrLCBvYmplY3QsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgb25lIG9yIG1vcmUgYXJndW1lbnRzIG9mIGBmdW5jYCB0aGF0IHdoZW5cbiAgICAgKiBjYWxsZWQgZWl0aGVyIGludm9rZXMgYGZ1bmNgIHJldHVybmluZyBpdHMgcmVzdWx0LCBpZiBhbGwgYGZ1bmNgIGFyZ3VtZW50c1xuICAgICAqIGhhdmUgYmVlbiBwcm92aWRlZCwgb3IgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBvbmUgb3IgbW9yZSBvZiB0aGVcbiAgICAgKiByZW1haW5pbmcgYGZ1bmNgIGFyZ3VtZW50cywgYW5kIHNvIG9uLiBUaGUgYXJpdHkgb2YgYGZ1bmNgIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBpZiBgZnVuYy5sZW5ndGhgIGlzIG5vdCBzdWZmaWNpZW50LlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgY3VycmllZCA9IF8uY3VycnkoYWJjKTtcbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSkoMikoMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIpKDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyLCAzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHBsYWNlaG9sZGVyc1xuICAgICAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgdmFyIGN1cnJ5ID0gY3JlYXRlQ3VycnkoQ1VSUllfRkxBRyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmN1cnJ5YCBleGNlcHQgdGhhdCBhcmd1bWVudHMgYXJlIGFwcGxpZWQgdG8gYGZ1bmNgXG4gICAgICogaW4gdGhlIG1hbm5lciBvZiBgXy5wYXJ0aWFsUmlnaHRgIGluc3RlYWQgb2YgYF8ucGFydGlhbGAuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uY3VycnlSaWdodC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lcyBub3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5UmlnaHQoYWJjKTtcbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMykoMikoMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDIsIDMpKDEpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyLCAzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHBsYWNlaG9sZGVyc1xuICAgICAqIGN1cnJpZWQoMykoMSwgXykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgdmFyIGN1cnJ5UmlnaHQgPSBjcmVhdGVDdXJyeShDVVJSWV9SSUdIVF9GTEFHKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICAgICAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICAgICAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAgICAgKiBkZWxheWVkIGludm9jYXRpb25zLiBQcm92aWRlIGFuIG9wdGlvbnMgb2JqZWN0IHRvIGluZGljYXRlIHRoYXQgYGZ1bmNgXG4gICAgICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICAgICAqIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdFxuICAgICAqIGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpcyBpbnZva2VkXG4gICAgICogb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiBpc1xuICAgICAqIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAgICAgKlxuICAgICAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwOi8vZHJ1cGFsbW90aW9uLmNvbS9hcnRpY2xlL2RlYm91bmNlLWFuZC10aHJvdHRsZS12aXN1YWwtZXhwbGFuYXRpb24pXG4gICAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmdcbiAgICAgKiAgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF0gVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZVxuICAgICAqICBkZWxheWVkIGJlZm9yZSBpdCBpcyBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV0gU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmdcbiAgICAgKiAgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGF2b2lkIGNvc3RseSBjYWxjdWxhdGlvbnMgd2hpbGUgdGhlIHdpbmRvdyBzaXplIGlzIGluIGZsdXhcbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgXy5kZWJvdW5jZShjYWxjdWxhdGVMYXlvdXQsIDE1MCkpO1xuICAgICAqXG4gICAgICogLy8gaW52b2tlIGBzZW5kTWFpbGAgd2hlbiB0aGUgY2xpY2sgZXZlbnQgaXMgZmlyZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxsc1xuICAgICAqIGpRdWVyeSgnI3Bvc3Rib3gnKS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAgICAgKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAgICAgKiAgICd0cmFpbGluZyc6IGZhbHNlXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogLy8gZW5zdXJlIGBiYXRjaExvZ2AgaXMgaW52b2tlZCBvbmNlIGFmdGVyIDEgc2Vjb25kIG9mIGRlYm91bmNlZCBjYWxsc1xuICAgICAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAgICAgKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwge1xuICAgICAqICAgJ21heFdhaXQnOiAxMDAwXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogLy8gY2FuY2VsIGEgZGVib3VuY2VkIGNhbGxcbiAgICAgKiB2YXIgdG9kb0NoYW5nZXMgPSBfLmRlYm91bmNlKGJhdGNoTG9nLCAxMDAwKTtcbiAgICAgKiBPYmplY3Qub2JzZXJ2ZShtb2RlbHMudG9kbywgdG9kb0NoYW5nZXMpO1xuICAgICAqXG4gICAgICogT2JqZWN0Lm9ic2VydmUobW9kZWxzLCBmdW5jdGlvbihjaGFuZ2VzKSB7XG4gICAgICogICBpZiAoXy5maW5kKGNoYW5nZXMsIHsgJ3VzZXInOiAndG9kbycsICd0eXBlJzogJ2RlbGV0ZSd9KSkge1xuICAgICAqICAgICB0b2RvQ2hhbmdlcy5jYW5jZWwoKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9LCBbJ2RlbGV0ZSddKTtcbiAgICAgKlxuICAgICAqIC8vIC4uLmF0IHNvbWUgcG9pbnQgYG1vZGVscy50b2RvYCBpcyBjaGFuZ2VkXG4gICAgICogbW9kZWxzLnRvZG8uY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgKlxuICAgICAqIC8vIC4uLmJlZm9yZSAxIHNlY29uZCBoYXMgcGFzc2VkIGBtb2RlbHMudG9kb2AgaXMgZGVsZXRlZFxuICAgICAqIC8vIHdoaWNoIGNhbmNlbHMgdGhlIGRlYm91bmNlZCBgdG9kb0NoYW5nZXNgIGNhbGxcbiAgICAgKiBkZWxldGUgbW9kZWxzLnRvZG87XG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgICAgdmFyIGFyZ3MsXG4gICAgICAgICAgbWF4VGltZW91dElkLFxuICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICBzdGFtcCxcbiAgICAgICAgICB0aGlzQXJnLFxuICAgICAgICAgIHRpbWVvdXRJZCxcbiAgICAgICAgICB0cmFpbGluZ0NhbGwsXG4gICAgICAgICAgbGFzdENhbGxlZCA9IDAsXG4gICAgICAgICAgbWF4V2FpdCA9IGZhbHNlLFxuICAgICAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgd2FpdCA9IHdhaXQgPCAwID8gMCA6ICgrd2FpdCB8fCAwKTtcbiAgICAgIGlmIChvcHRpb25zID09PSB0cnVlKSB7XG4gICAgICAgIHZhciBsZWFkaW5nID0gdHJ1ZTtcbiAgICAgICAgdHJhaWxpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgICAgICBtYXhXYWl0ID0gJ21heFdhaXQnIGluIG9wdGlvbnMgJiYgbmF0aXZlTWF4KCtvcHRpb25zLm1heFdhaXQgfHwgMCwgd2FpdCk7XG4gICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhUaW1lb3V0SWQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQobWF4VGltZW91dElkKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0Q2FsbGVkID0gMDtcbiAgICAgICAgbWF4VGltZW91dElkID0gdGltZW91dElkID0gdHJhaWxpbmdDYWxsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjb21wbGV0ZShpc0NhbGxlZCwgaWQpIHtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgICAgfVxuICAgICAgICBtYXhUaW1lb3V0SWQgPSB0aW1lb3V0SWQgPSB0cmFpbGluZ0NhbGwgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpc0NhbGxlZCkge1xuICAgICAgICAgIGxhc3RDYWxsZWQgPSBub3coKTtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91dElkICYmICFtYXhUaW1lb3V0SWQpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzQXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkZWxheWVkKCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3coKSAtIHN0YW1wKTtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgICBjb21wbGV0ZSh0cmFpbGluZ0NhbGwsIG1heFRpbWVvdXRJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChkZWxheWVkLCByZW1haW5pbmcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG1heERlbGF5ZWQoKSB7XG4gICAgICAgIGNvbXBsZXRlKHRyYWlsaW5nLCB0aW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHN0YW1wID0gbm93KCk7XG4gICAgICAgIHRoaXNBcmcgPSB0aGlzO1xuICAgICAgICB0cmFpbGluZ0NhbGwgPSB0cmFpbGluZyAmJiAodGltZW91dElkIHx8ICFsZWFkaW5nKTtcblxuICAgICAgICBpZiAobWF4V2FpdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB2YXIgbGVhZGluZ0NhbGwgPSBsZWFkaW5nICYmICF0aW1lb3V0SWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFtYXhUaW1lb3V0SWQgJiYgIWxlYWRpbmcpIHtcbiAgICAgICAgICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHJlbWFpbmluZyA9IG1heFdhaXQgLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKSxcbiAgICAgICAgICAgICAgaXNDYWxsZWQgPSByZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiBtYXhXYWl0O1xuXG4gICAgICAgICAgaWYgKGlzQ2FsbGVkKSB7XG4gICAgICAgICAgICBpZiAobWF4VGltZW91dElkKSB7XG4gICAgICAgICAgICAgIG1heFRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChtYXhUaW1lb3V0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoIW1heFRpbWVvdXRJZCkge1xuICAgICAgICAgICAgbWF4VGltZW91dElkID0gc2V0VGltZW91dChtYXhEZWxheWVkLCByZW1haW5pbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDYWxsZWQgJiYgdGltZW91dElkKSB7XG4gICAgICAgICAgdGltZW91dElkID0gY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRpbWVvdXRJZCAmJiB3YWl0ICE9PSBtYXhXYWl0KSB7XG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChkZWxheWVkLCB3YWl0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVhZGluZ0NhbGwpIHtcbiAgICAgICAgICBpc0NhbGxlZCA9IHRydWU7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDYWxsZWQgJiYgIXRpbWVvdXRJZCAmJiAhbWF4VGltZW91dElkKSB7XG4gICAgICAgICAgYXJncyA9IHRoaXNBcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gICAgICByZXR1cm4gZGVib3VuY2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmVycyBpbnZva2luZyB0aGUgYGZ1bmNgIHVudGlsIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzIGNsZWFyZWQuIEFueVxuICAgICAqIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCBpcyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVmZXIuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXIgaWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmZXIoZnVuY3Rpb24odGV4dCkge1xuICAgICAqICAgY29uc29sZS5sb2codGV4dCk7XG4gICAgICogfSwgJ2RlZmVycmVkJyk7XG4gICAgICogLy8gbG9ncyAnZGVmZXJyZWQnIGFmdGVyIG9uZSBvciBtb3JlIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIHZhciBkZWZlciA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gICAgICByZXR1cm4gYmFzZURlbGF5KGZ1bmMsIDEsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyBgZnVuY2AgYWZ0ZXIgYHdhaXRgIG1pbGxpc2Vjb25kcy4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZVxuICAgICAqIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0IGlzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlbGF5KGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICAgICAqIH0sIDEwMDAsICdsYXRlcicpO1xuICAgICAqIC8vID0+IGxvZ3MgJ2xhdGVyJyBhZnRlciBvbmUgc2Vjb25kXG4gICAgICovXG4gICAgdmFyIGRlbGF5ID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgd2FpdCwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIHByb3ZpZGVkXG4gICAgICogZnVuY3Rpb25zIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGVyZSBlYWNoXG4gICAgICogc3VjY2Vzc2l2ZSBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gW2Z1bmNzXSBGdW5jdGlvbnMgdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3coXy5hZGQsIHNxdWFyZSk7XG4gICAgICogYWRkU3F1YXJlKDEsIDIpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKi9cbiAgICB2YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBpbnZva2VzIHRoZSBwcm92aWRlZCBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGJhY2tmbG93LCBjb21wb3NlXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gW2Z1bmNzXSBGdW5jdGlvbnMgdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3dSaWdodChzcXVhcmUsIF8uYWRkKTtcbiAgICAgKiBhZGRTcXVhcmUoMSwgMik7XG4gICAgICogLy8gPT4gOVxuICAgICAqL1xuICAgIHZhciBmbG93UmlnaHQgPSBjcmVhdGVGbG93KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAgICAgKiBwcm92aWRlZCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAgICAgKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgY29lcmNlZCB0byBhIHN0cmluZyBhbmQgdXNlZCBhcyB0aGVcbiAgICAgKiBjYWNoZSBrZXkuIFRoZSBgZnVuY2AgaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWRcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAgICAgKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAgICAgKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZSBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICAgICAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemluZyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVwcGVyQ2FzZSA9IF8ubWVtb2l6ZShmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgKiAgIHJldHVybiBzdHJpbmcudG9VcHBlckNhc2UoKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHVwcGVyQ2FzZSgnZnJlZCcpO1xuICAgICAqIC8vID0+ICdGUkVEJ1xuICAgICAqXG4gICAgICogLy8gbW9kaWZ5aW5nIHRoZSByZXN1bHQgY2FjaGVcbiAgICAgKiB1cHBlckNhc2UuY2FjaGUuc2V0KCdmcmVkJywgJ0JBUk5FWScpO1xuICAgICAqIHVwcGVyQ2FzZSgnZnJlZCcpO1xuICAgICAqIC8vID0+ICdCQVJORVknXG4gICAgICpcbiAgICAgKiAvLyByZXBsYWNpbmcgYF8ubWVtb2l6ZS5DYWNoZWBcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAndXNlcic6ICdmcmVkJyB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ3VzZXInOiAnYmFybmV5JyB9O1xuICAgICAqIHZhciBpZGVudGl0eSA9IF8ubWVtb2l6ZShfLmlkZW50aXR5KTtcbiAgICAgKlxuICAgICAqIGlkZW50aXR5KG9iamVjdCk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdmcmVkJyB9XG4gICAgICogaWRlbnRpdHkob3RoZXIpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqXG4gICAgICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAgICAgKiB2YXIgaWRlbnRpdHkgPSBfLm1lbW9pemUoXy5pZGVudGl0eSk7XG4gICAgICpcbiAgICAgKiBpZGVudGl0eShvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqIGlkZW50aXR5KG90aGVyKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICAgIG1lbW9pemVkLmNhY2hlID0gbmV3IG1lbW9pemUuQ2FjaGU7XG4gICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcnVucyBlYWNoIGFyZ3VtZW50IHRocm91Z2ggYSBjb3JyZXNwb25kaW5nXG4gICAgICogdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3RyYW5zZm9ybXNdIFRoZSBmdW5jdGlvbnMgdG8gdHJhbnNmb3JtXG4gICAgICogYXJndW1lbnRzLCBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBmdW5jdGlvbnMgb3IgYXJyYXlzIG9mIGZ1bmN0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZG91YmxlZChuKSB7XG4gICAgICogICByZXR1cm4gbiAqIDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgbW9kZGVkID0gXy5tb2RBcmdzKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiBbeCwgeV07XG4gICAgICogfSwgc3F1YXJlLCBkb3VibGVkKTtcbiAgICAgKlxuICAgICAqIG1vZGRlZCgxLCAyKTtcbiAgICAgKiAvLyA9PiBbMSwgNF1cbiAgICAgKlxuICAgICAqIG1vZGRlZCg1LCAxMCk7XG4gICAgICogLy8gPT4gWzI1LCAyMF1cbiAgICAgKi9cbiAgICB2YXIgbW9kQXJncyA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCB0cmFuc2Zvcm1zKSB7XG4gICAgICB0cmFuc2Zvcm1zID0gYmFzZUZsYXR0ZW4odHJhbnNmb3Jtcyk7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAhYXJyYXlFdmVyeSh0cmFuc2Zvcm1zLCBiYXNlSXNGdW5jdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIHJlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIHZhciBpbmRleCA9IG5hdGl2ZU1pbihhcmdzLmxlbmd0aCwgbGVuZ3RoKTtcbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICBhcmdzW2luZGV4XSA9IHRyYW5zZm9ybXNbaW5kZXhdKGFyZ3NbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbmVnYXRlcyB0aGUgcmVzdWx0IG9mIHRoZSBwcmVkaWNhdGUgYGZ1bmNgLiBUaGVcbiAgICAgKiBgZnVuY2AgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGVcbiAgICAgKiBjcmVhdGVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBwcmVkaWNhdGUgdG8gbmVnYXRlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0V2ZW4obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5maWx0ZXIoWzEsIDIsIDMsIDQsIDUsIDZdLCBfLm5lZ2F0ZShpc0V2ZW4pKTtcbiAgICAgKiAvLyA9PiBbMSwgMywgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgcmVzdHJpY3RlZCB0byBpbnZva2luZyBgZnVuY2Agb25jZS4gUmVwZWF0IGNhbGxzXG4gICAgICogdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGNhbGwuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgaW5pdGlhbGl6ZSA9IF8ub25jZShjcmVhdGVBcHBsaWNhdGlvbik7XG4gICAgICogaW5pdGlhbGl6ZSgpO1xuICAgICAqIGluaXRpYWxpemUoKTtcbiAgICAgKiAvLyBgaW5pdGlhbGl6ZWAgaW52b2tlcyBgY3JlYXRlQXBwbGljYXRpb25gIG9uY2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvbmNlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiZWZvcmUoMiwgZnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBgcGFydGlhbGAgYXJndW1lbnRzIHByZXBlbmRlZFxuICAgICAqIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSBuZXcgZnVuY3Rpb24uIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYmluZGAgZXhjZXB0XG4gICAgICogaXQgZG9lcyAqKm5vdCoqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZ3JlZXQgPSBmdW5jdGlvbihncmVldGluZywgbmFtZSkge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICAgICAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHBsYWNlaG9sZGVyc1xuICAgICAqIHZhciBncmVldEZyZWQgPSBfLnBhcnRpYWwoZ3JlZXQsIF8sICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsID0gY3JlYXRlUGFydGlhbChQQVJUSUFMX0ZMQUcpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wYXJ0aWFsYCBleGNlcHQgdGhhdCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICAgKiBhcmUgYXBwZW5kZWQgdG8gdGhvc2UgcHJvdmlkZWQgdG8gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5wYXJ0aWFsUmlnaHQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAgICAgKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBncmVldCA9IGZ1bmN0aW9uKGdyZWV0aW5nLCBuYW1lKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgcGxhY2Vob2xkZXJzXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWxSaWdodChncmVldCwgJ2hlbGxvJywgXyk7XG4gICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsUmlnaHQgPSBjcmVhdGVQYXJ0aWFsKFBBUlRJQUxfUklHSFRfRkxBRyk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyBhcnJhbmdlZCBhY2NvcmRpbmdcbiAgICAgKiB0byB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgd2hlcmUgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBmaXJzdCBpbmRleCBpc1xuICAgICAqIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggaXNcbiAgICAgKiBwcm92aWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZWFycmFuZ2UgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcmd1bWVudCBpbmRleGVzLFxuICAgICAqICBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBpbmRleGVzIG9yIGFycmF5cyBvZiBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgcmVhcmdlZCA9IF8ucmVhcmcoZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9LCAyLCAwLCAxKTtcbiAgICAgKlxuICAgICAqIHJlYXJnZWQoJ2InLCAnYycsICdhJylcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICAgKlxuICAgICAqIHZhciBtYXAgPSBfLnJlYXJnKF8ubWFwLCBbMSwgMF0pO1xuICAgICAqIG1hcChmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAqIDM7XG4gICAgICogfSwgWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMywgNiwgOV1cbiAgICAgKi9cbiAgICB2YXIgcmVhcmcgPSByZXN0UGFyYW0oZnVuY3Rpb24oZnVuYywgaW5kZXhlcykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIoZnVuYywgUkVBUkdfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZUZsYXR0ZW4oaW5kZXhlcykpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlXG4gICAgICogY3JlYXRlZCBmdW5jdGlvbiBhbmQgYXJndW1lbnRzIGZyb20gYHN0YXJ0YCBhbmQgYmV5b25kIHByb3ZpZGVkIGFzIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBbcmVzdCBwYXJhbWV0ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Z1bmN0aW9ucy9yZXN0X3BhcmFtZXRlcnMpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBzYXkgPSBfLnJlc3RQYXJhbShmdW5jdGlvbih3aGF0LCBuYW1lcykge1xuICAgICAqICAgcmV0dXJuIHdoYXQgKyAnICcgKyBfLmluaXRpYWwobmFtZXMpLmpvaW4oJywgJykgK1xuICAgICAqICAgICAoXy5zaXplKG5hbWVzKSA+IDEgPyAnLCAmICcgOiAnJykgKyBfLmxhc3QobmFtZXMpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc2F5KCdoZWxsbycsICdmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3RQYXJhbShmdW5jLCBzdGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogKCtzdGFydCB8fCAwKSwgMCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoc3RhcnQpIHtcbiAgICAgICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7XG4gICAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3NbMF0sIHJlc3QpO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdLCByZXN0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBvdGhlckFyZ3Nbc3RhcnRdID0gcmVzdDtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgb3RoZXJBcmdzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIGNyZWF0ZWRcbiAgICAgKiBmdW5jdGlvbiBhbmQgYW4gYXJyYXkgb2YgYXJndW1lbnRzIG11Y2ggbGlrZSBbYEZ1bmN0aW9uI2FwcGx5YF0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTUuMy40LjMpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBbc3ByZWFkIG9wZXJhdG9yXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMvU3ByZWFkX29wZXJhdG9yKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHNwcmVhZCBhcmd1bWVudHMgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8uc3ByZWFkKGZ1bmN0aW9uKHdobywgd2hhdCkge1xuICAgICAqICAgcmV0dXJuIHdobyArICcgc2F5cyAnICsgd2hhdDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHNheShbJ2ZyZWQnLCAnaGVsbG8nXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQgc2F5cyBoZWxsbydcbiAgICAgKlxuICAgICAqIC8vIHdpdGggYSBQcm9taXNlXG4gICAgICogdmFyIG51bWJlcnMgPSBQcm9taXNlLmFsbChbXG4gICAgICogICBQcm9taXNlLnJlc29sdmUoNDApLFxuICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDM2KVxuICAgICAqIF0pO1xuICAgICAqXG4gICAgICogbnVtYmVycy50aGVuKF8uc3ByZWFkKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiB4ICsgeTtcbiAgICAgKiB9KSk7XG4gICAgICogLy8gPT4gYSBQcm9taXNlIG9mIDc2XG4gICAgICovXG4gICAgZnVuY3Rpb24gc3ByZWFkKGZ1bmMpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbihhcnJheSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcnJheSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdGhhdCBvbmx5IGludm9rZXMgYGZ1bmNgIGF0IG1vc3Qgb25jZSBwZXJcbiAgICAgKiBldmVyeSBgd2FpdGAgbWlsbGlzZWNvbmRzLiBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYFxuICAgICAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBpbnZvY2F0aW9ucy4gUHJvdmlkZSBhbiBvcHRpb25zIG9iamVjdCB0byBpbmRpY2F0ZVxuICAgICAqIHRoYXQgYGZ1bmNgIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZSBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZVxuICAgICAqIGB3YWl0YCB0aW1lb3V0LiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gcmV0dXJuIHRoZVxuICAgICAqIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgY2FsbC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXMgaW52b2tlZFxuICAgICAqIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gaXNcbiAgICAgKiBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gICAgICpcbiAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cDovL2RydXBhbG1vdGlvbi5jb20vYXJ0aWNsZS9kZWJvdW5jZS1hbmQtdGhyb3R0bGUtdmlzdWFsLWV4cGxhbmF0aW9uKVxuICAgICAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8udGhyb3R0bGVgIGFuZCBgXy5kZWJvdW5jZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB0aHJvdHRsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgaW52b2NhdGlvbnMgdG8uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPXRydWVdIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmdcbiAgICAgKiAgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nXG4gICAgICogIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBhdm9pZCBleGNlc3NpdmVseSB1cGRhdGluZyB0aGUgcG9zaXRpb24gd2hpbGUgc2Nyb2xsaW5nXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICAgICAqXG4gICAgICogLy8gaW52b2tlIGByZW5ld1Rva2VuYCB3aGVuIHRoZSBjbGljayBldmVudCBpcyBmaXJlZCwgYnV0IG5vdCBtb3JlIHRoYW4gb25jZSBldmVyeSA1IG1pbnV0ZXNcbiAgICAgKiBqUXVlcnkoJy5pbnRlcmFjdGl2ZScpLm9uKCdjbGljaycsIF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7XG4gICAgICogICAndHJhaWxpbmcnOiBmYWxzZVxuICAgICAqIH0pKTtcbiAgICAgKlxuICAgICAqIC8vIGNhbmNlbCBhIHRyYWlsaW5nIHRocm90dGxlZCBjYWxsXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgdGhyb3R0bGVkLmNhbmNlbCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgICAgdmFyIGxlYWRpbmcgPSB0cnVlLFxuICAgICAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICAgIGxlYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgbGVhZGluZyA9ICdsZWFkaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLmxlYWRpbmcgOiBsZWFkaW5nO1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlYm91bmNlKGZ1bmMsIHdhaXQsIHsgJ2xlYWRpbmcnOiBsZWFkaW5nLCAnbWF4V2FpdCc6ICt3YWl0LCAndHJhaWxpbmcnOiB0cmFpbGluZyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBgdmFsdWVgIHRvIHRoZSB3cmFwcGVyIGZ1bmN0aW9uIGFzIGl0c1xuICAgICAqIGZpcnN0IGFyZ3VtZW50LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIGFyZVxuICAgICAqIGFwcGVuZGVkIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSB3cmFwcGVyIGZ1bmN0aW9uLiBUaGUgd3JhcHBlciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIHdyYXBwZXIgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBwID0gXy53cmFwKF8uZXNjYXBlLCBmdW5jdGlvbihmdW5jLCB0ZXh0KSB7XG4gICAgICogICByZXR1cm4gJzxwPicgKyBmdW5jKHRleHQpICsgJzwvcD4nO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogcCgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnPHA+ZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzPC9wPidcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwKHZhbHVlLCB3cmFwcGVyKSB7XG4gICAgICB3cmFwcGVyID0gd3JhcHBlciA9PSBudWxsID8gaWRlbnRpdHkgOiB3cmFwcGVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIod3JhcHBlciwgUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIFt2YWx1ZV0sIFtdKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHZhbHVlYC4gSWYgYGlzRGVlcGAgaXMgYHRydWVgIG5lc3RlZCBvYmplY3RzIGFyZSBjbG9uZWQsXG4gICAgICogb3RoZXJ3aXNlIHRoZXkgYXJlIGFzc2lnbmVkIGJ5IHJlZmVyZW5jZS4gSWYgYGN1c3RvbWl6ZXJgIGlzIHByb3ZpZGVkIGl0IGlzXG4gICAgICogaW52b2tlZCB0byBwcm9kdWNlIHRoZSBjbG9uZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIGNsb25pbmcgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgYm91bmQgdG9cbiAgICAgKiBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnQ7ICh2YWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdF0pLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gICAgICogW3N0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtXShodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9pbmZyYXN0cnVjdHVyZS5odG1sI2ludGVybmFsLXN0cnVjdHVyZWQtY2xvbmluZy1hbGdvcml0aG0pLlxuICAgICAqIFRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYGFyZ3VtZW50c2Agb2JqZWN0cyBhbmQgb2JqZWN0cyBjcmVhdGVkIGJ5XG4gICAgICogY29uc3RydWN0b3JzIG90aGVyIHRoYW4gYE9iamVjdGAgYXJlIGNsb25lZCB0byBwbGFpbiBgT2JqZWN0YCBvYmplY3RzLiBBblxuICAgICAqIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2ggYXMgZnVuY3Rpb25zLCBET00gbm9kZXMsXG4gICAgICogTWFwcywgU2V0cywgYW5kIFdlYWtNYXBzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgY3VzdG9taXplcmAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogdmFyIHNoYWxsb3cgPSBfLmNsb25lKHVzZXJzKTtcbiAgICAgKiBzaGFsbG93WzBdID09PSB1c2Vyc1swXTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiB2YXIgZGVlcCA9IF8uY2xvbmUodXNlcnMsIHRydWUpO1xuICAgICAqIGRlZXBbMF0gPT09IHVzZXJzWzBdO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBhIGN1c3RvbWl6ZXIgY2FsbGJhY2tcbiAgICAgKiB2YXIgZWwgPSBfLmNsb25lKGRvY3VtZW50LmJvZHksIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogZWwgPT09IGRvY3VtZW50LmJvZHlcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqIGVsLm5vZGVOYW1lXG4gICAgICogLy8gPT4gQk9EWVxuICAgICAqIGVsLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZSh2YWx1ZSwgaXNEZWVwLCBjdXN0b21pemVyLCB0aGlzQXJnKSB7XG4gICAgICBpZiAoaXNEZWVwICYmIHR5cGVvZiBpc0RlZXAgIT0gJ2Jvb2xlYW4nICYmIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpc0RlZXAsIGN1c3RvbWl6ZXIpKSB7XG4gICAgICAgIGlzRGVlcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZW9mIGlzRGVlcCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNBcmcgPSBjdXN0b21pemVyO1xuICAgICAgICBjdXN0b21pemVyID0gaXNEZWVwO1xuICAgICAgICBpc0RlZXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nXG4gICAgICAgID8gYmFzZUNsb25lKHZhbHVlLCBpc0RlZXAsIGJpbmRDYWxsYmFjayhjdXN0b21pemVyLCB0aGlzQXJnLCAxKSlcbiAgICAgICAgOiBiYXNlQ2xvbmUodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGRlZXAgY2xvbmUgb2YgYHZhbHVlYC4gSWYgYGN1c3RvbWl6ZXJgIGlzIHByb3ZpZGVkIGl0IGlzIGludm9rZWRcbiAgICAgKiB0byBwcm9kdWNlIHRoZSBjbG9uZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCBjbG9uaW5nXG4gICAgICogaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgYm91bmQgdG8gYHRoaXNBcmdgXG4gICAgICogYW5kIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnQ7ICh2YWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdF0pLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gICAgICogW3N0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtXShodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9pbmZyYXN0cnVjdHVyZS5odG1sI2ludGVybmFsLXN0cnVjdHVyZWQtY2xvbmluZy1hbGdvcml0aG0pLlxuICAgICAqIFRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYGFyZ3VtZW50c2Agb2JqZWN0cyBhbmQgb2JqZWN0cyBjcmVhdGVkIGJ5XG4gICAgICogY29uc3RydWN0b3JzIG90aGVyIHRoYW4gYE9iamVjdGAgYXJlIGNsb25lZCB0byBwbGFpbiBgT2JqZWN0YCBvYmplY3RzLiBBblxuICAgICAqIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2ggYXMgZnVuY3Rpb25zLCBET00gbm9kZXMsXG4gICAgICogTWFwcywgU2V0cywgYW5kIFdlYWtNYXBzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBkZWVwIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgY3VzdG9taXplcmAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKHVzZXJzKTtcbiAgICAgKiBkZWVwWzBdID09PSB1c2Vyc1swXTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgYSBjdXN0b21pemVyIGNhbGxiYWNrXG4gICAgICogdmFyIGVsID0gXy5jbG9uZURlZXAoZG9jdW1lbnQuYm9keSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGVsID09PSBkb2N1bWVudC5ib2R5XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKiBlbC5ub2RlTmFtZVxuICAgICAqIC8vID0+IEJPRFlcbiAgICAgKiBlbC5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSwgY3VzdG9taXplciwgdGhpc0FyZykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbidcbiAgICAgICAgPyBiYXNlQ2xvbmUodmFsdWUsIHRydWUsIGJpbmRDYWxsYmFjayhjdXN0b21pemVyLCB0aGlzQXJnLCAxKSlcbiAgICAgICAgOiBiYXNlQ2xvbmUodmFsdWUsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ndCgzLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmd0KDMsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmd0KDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3QodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPiBvdGhlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3RlKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlID49IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGFycmF5VGFnO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UgfHwgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gYm9vbFRhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBEYXRlYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNEYXRlKG5ldyBEYXRlKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRGF0ZSgnTW9uIEFwcmlsIDIzIDIwMTInKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gZGF0ZVRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIERPTSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIERPTSBlbGVtZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbGVtZW50KCc8Ym9keT4nKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICEhdmFsdWUgJiYgdmFsdWUubm9kZVR5cGUgPT09IDEgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgZW1wdHkuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBlbXB0eSB1bmxlc3MgaXQgaXMgYW5cbiAgICAgKiBgYXJndW1lbnRzYCBvYmplY3QsIGFycmF5LCBzdHJpbmcsIG9yIGpRdWVyeS1saWtlIGNvbGxlY3Rpb24gd2l0aCBhIGxlbmd0aFxuICAgICAqIGdyZWF0ZXIgdGhhbiBgMGAgb3IgYW4gb2JqZWN0IHdpdGggb3duIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KHRydWUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eSgxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5zcGxpY2UpKSkpIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gIWtleXModmFsdWUpLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gICAgICogZXF1aXZhbGVudC4gSWYgYGN1c3RvbWl6ZXJgIGlzIHByb3ZpZGVkIGl0IGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gICAgICogSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAgY29tcGFyaXNvbnMgYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZFxuICAgICAqIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgb3RoZXIgWywgaW5kZXh8a2V5XSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYm9vbGVhbnMsIGBEYXRlYCBvYmplY3RzLFxuICAgICAqIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsIGFuZCBzdHJpbmdzLiBPYmplY3RzIGFyZSBjb21wYXJlZCBieVxuICAgICAqIHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTSBub2Rlc1xuICAgICAqIGFyZSAqKm5vdCoqIHN1cHBvcnRlZC4gUHJvdmlkZSBhIGN1c3RvbWl6ZXIgZnVuY3Rpb24gdG8gZXh0ZW5kIHN1cHBvcnRcbiAgICAgKiBmb3IgY29tcGFyaW5nIG90aGVyIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBhbGlhcyBlcVxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgY3VzdG9taXplcmAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAgICAgKiB2YXIgb3RoZXIgPSB7ICd1c2VyJzogJ2ZyZWQnIH07XG4gICAgICpcbiAgICAgKiBvYmplY3QgPT0gb3RoZXI7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBhIGN1c3RvbWl6ZXIgY2FsbGJhY2tcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2hlbGxvJywgJ2dvb2RieWUnXTtcbiAgICAgKiB2YXIgb3RoZXIgPSBbJ2hpJywgJ2dvb2RieWUnXTtcbiAgICAgKlxuICAgICAqIF8uaXNFcXVhbChhcnJheSwgb3RoZXIsIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAqICAgaWYgKF8uZXZlcnkoW3ZhbHVlLCBvdGhlcl0sIFJlZ0V4cC5wcm90b3R5cGUudGVzdCwgL15oKD86aXxlbGxvKSQvKSkge1xuICAgICAqICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIsIHRoaXNBcmcpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gYmluZENhbGxiYWNrKGN1c3RvbWl6ZXIsIHRoaXNBcmcsIDMpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBjdXN0b21pemVyKSA6ICEhcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGBFcnJvcmAsIGBFdmFsRXJyb3JgLCBgUmFuZ2VFcnJvcmAsIGBSZWZlcmVuY2VFcnJvcmAsXG4gICAgICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBlcnJvciBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Vycm9yKG5ldyBFcnJvcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Vycm9yKEVycm9yKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09ICdzdHJpbmcnICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGVycm9yVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIHByaW1pdGl2ZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gW2BOdW1iZXIuaXNGaW5pdGVgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1udW1iZXIuaXNmaW5pdGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSgxMCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSgnMTAnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSh0cnVlKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZShPYmplY3QoMTApKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZShJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiBuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRnVuY3Rpb24oXyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAgICAgLy8gaW4gb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmkgd2hpY2ggcmV0dXJuICdmdW5jdGlvbicgZm9yIHJlZ2V4ZXNcbiAgICAgIC8vIGFuZCBTYWZhcmkgOCBlcXVpdmFsZW50cyB3aGljaCByZXR1cm4gJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9ycy5cbiAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gZnVuY1RhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGUgW2xhbmd1YWdlIHR5cGVdKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDgpIG9mIGBPYmplY3RgLlxuICAgICAqIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdCh7fSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QoMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgICAgLy8gQXZvaWQgYSBWOCBKSVQgYnVnIGluIENocm9tZSAxOS0yMC5cbiAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gYG9iamVjdGAgYW5kIGBzb3VyY2VgIHRvIGRldGVybWluZSBpZlxuICAgICAqIGBvYmplY3RgIGNvbnRhaW5zIGVxdWl2YWxlbnQgcHJvcGVydHkgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgaXMgcHJvdmlkZWRcbiAgICAgKiBpdCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIGNvbXBhcmlzb25zIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBib3VuZFxuICAgICAqIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBvdGhlciwgaW5kZXh8a2V5KS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgcHJvcGVydGllcyBvZiBhcnJheXMsIGJvb2xlYW5zLFxuICAgICAqIGBEYXRlYCBvYmplY3RzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBhbmQgc3RyaW5ncy4gRnVuY3Rpb25zXG4gICAgICogYW5kIERPTSBub2RlcyBhcmUgKipub3QqKiBzdXBwb3J0ZWQuIFByb3ZpZGUgYSBjdXN0b21pemVyIGZ1bmN0aW9uIHRvIGV4dGVuZFxuICAgICAqIHN1cHBvcnQgZm9yIGNvbXBhcmluZyBvdGhlciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBjdXN0b21pemVyYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAndXNlcic6ICdmcmVkJywgJ2FnZSc6IDQwIH07XG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2gob2JqZWN0LCB7ICdhZ2UnOiA0MCB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2gob2JqZWN0LCB7ICdhZ2UnOiAzNiB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgYSBjdXN0b21pemVyIGNhbGxiYWNrXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2dyZWV0aW5nJzogJ2hlbGxvJyB9O1xuICAgICAqIHZhciBzb3VyY2UgPSB7ICdncmVldGluZyc6ICdoaScgfTtcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHNvdXJjZSwgZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICogICByZXR1cm4gXy5ldmVyeShbdmFsdWUsIG90aGVyXSwgUmVnRXhwLnByb3RvdHlwZS50ZXN0LCAvXmgoPzppfGVsbG8pJC8pIHx8IHVuZGVmaW5lZDtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplciwgdGhpc0FyZykge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBiaW5kQ2FsbGJhY2soY3VzdG9taXplciwgdGhpc0FyZywgMykgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUlzTWF0Y2gob2JqZWN0LCBnZXRNYXRjaERhdGEoc291cmNlKSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYE5hTmAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbm90IHRoZSBzYW1lIGFzIFtgaXNOYU5gXShodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS4xLjIuNClcbiAgICAgKiB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3IgYHVuZGVmaW5lZGAgYW5kIG90aGVyIG5vbi1udW1lcmljIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05hTihOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4obmV3IE51bWJlcihOYU4pKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBpc05hTih1bmRlZmluZWQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4odW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgICAvLyBBbiBgTmFOYCBwcmltaXRpdmUgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLlxuICAgICAgLy8gUGVyZm9ybSB0aGUgYHRvU3RyaW5nVGFnYCBjaGVjayBmaXJzdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBzb21lIGhvc3Qgb2JqZWN0cyBpbiBJRS5cbiAgICAgIHJldHVybiBpc051bWJlcih2YWx1ZSkgJiYgdmFsdWUgIT0gK3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKF8pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOYXRpdmUodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcmVJc05hdGl2ZS50ZXN0KGZuVG9TdHJpbmcuY2FsbCh2YWx1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgcmVJc0hvc3RDdG9yLnRlc3QodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBudWxsYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYG51bGxgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKHZvaWQgMCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZSBjbGFzc2lmaWVkXG4gICAgICogYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKDguNCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcihOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoJzguNCcpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gICAgICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFzc3VtZXMgb2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3RvclxuICAgICAqIGhhdmUgbm8gaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICAgIHZhciBDdG9yO1xuXG4gICAgICAvLyBFeGl0IGVhcmx5IGZvciBub24gYE9iamVjdGAgb2JqZWN0cy5cbiAgICAgIGlmICghKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gb2JqZWN0VGFnICYmICFpc0FyZ3VtZW50cyh2YWx1ZSkpIHx8XG4gICAgICAgICAgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY29uc3RydWN0b3InKSAmJiAoQ3RvciA9IHZhbHVlLmNvbnN0cnVjdG9yLCB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmICEoQ3RvciBpbnN0YW5jZW9mIEN0b3IpKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gSUUgPCA5IGl0ZXJhdGVzIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGJlZm9yZSBvd24gcHJvcGVydGllcy4gSWYgdGhlIGZpcnN0XG4gICAgICAvLyBpdGVyYXRlZCBwcm9wZXJ0eSBpcyBhbiBvYmplY3QncyBvd24gcHJvcGVydHkgdGhlbiB0aGVyZSBhcmUgbm8gaW5oZXJpdGVkXG4gICAgICAvLyBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgLy8gSW4gbW9zdCBlbnZpcm9ubWVudHMgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMgYXJlIGl0ZXJhdGVkIGJlZm9yZVxuICAgICAgLy8gaXRzIGluaGVyaXRlZCBwcm9wZXJ0aWVzLiBJZiB0aGUgbGFzdCBpdGVyYXRlZCBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qnc1xuICAgICAgLy8gb3duIHByb3BlcnR5IHRoZW4gdGhlcmUgYXJlIG5vIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gICAgICBiYXNlRm9ySW4odmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmVzdWx0ID0ga2V5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFJlZ0V4cGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNSZWdFeHAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gcmVnZXhwVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3RyaW5nYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU3RyaW5nKDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tvYmpUb1N0cmluZy5jYWxsKHZhbHVlKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNVbmRlZmluZWQodm9pZCAwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzVW5kZWZpbmVkKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sdCgxLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0KDMsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmx0KDMsIDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbHQodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPCBvdGhlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubHRlKDEsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbHRlKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlIDw9IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIChmdW5jdGlvbigpIHtcbiAgICAgKiAgIHJldHVybiBfLnRvQXJyYXkoYXJndW1lbnRzKS5zbGljZSgxKTtcbiAgICAgKiB9KDEsIDIsIDMpKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsdWUgPyBnZXRMZW5ndGgodmFsdWUpIDogMDtcbiAgICAgIGlmICghaXNMZW5ndGgobGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVzKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheUNvcHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZVxuICAgICAqIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlQ29weSh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgbWVyZ2VzIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgdGhlIHNvdXJjZSBvYmplY3QocyksIHRoYXRcbiAgICAgKiBkb24ndCByZXNvbHZlIHRvIGB1bmRlZmluZWRgIGludG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC4gU3Vic2VxdWVudCBzb3VyY2VzXG4gICAgICogb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuIElmIGBjdXN0b21pemVyYCBpc1xuICAgICAqIHByb3ZpZGVkIGl0IGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgbWVyZ2VkIHZhbHVlcyBvZiB0aGUgZGVzdGluYXRpb24gYW5kXG4gICAgICogc291cmNlIHByb3BlcnRpZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgIG1lcmdpbmcgaXMgaGFuZGxlZFxuICAgICAqIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWRcbiAgICAgKiB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqZWN0VmFsdWUsIHNvdXJjZVZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgY3VzdG9taXplcmAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2RhdGEnOiBbeyAndXNlcic6ICdiYXJuZXknIH0sIHsgJ3VzZXInOiAnZnJlZCcgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGFnZXMgPSB7XG4gICAgICogICAnZGF0YSc6IFt7ICdhZ2UnOiAzNiB9LCB7ICdhZ2UnOiA0MCB9XVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLm1lcmdlKHVzZXJzLCBhZ2VzKTtcbiAgICAgKiAvLyA9PiB7ICdkYXRhJzogW3sgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sIHsgJ3VzZXInOiAnZnJlZCcsICdhZ2UnOiA0MCB9XSB9XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBhIGN1c3RvbWl6ZXIgY2FsbGJhY2tcbiAgICAgKiB2YXIgb2JqZWN0ID0ge1xuICAgICAqICAgJ2ZydWl0cyc6IFsnYXBwbGUnXSxcbiAgICAgKiAgICd2ZWdldGFibGVzJzogWydiZWV0J11cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIG90aGVyID0ge1xuICAgICAqICAgJ2ZydWl0cyc6IFsnYmFuYW5hJ10sXG4gICAgICogICAndmVnZXRhYmxlcyc6IFsnY2Fycm90J11cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tZXJnZShvYmplY3QsIG90aGVyLCBmdW5jdGlvbihhLCBiKSB7XG4gICAgICogICBpZiAoXy5pc0FycmF5KGEpKSB7XG4gICAgICogICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICdmcnVpdHMnOiBbJ2FwcGxlJywgJ2JhbmFuYSddLCAndmVnZXRhYmxlcyc6IFsnYmVldCcsICdjYXJyb3QnXSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoYmFzZU1lcmdlKTtcblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0KHMpIHRvIHRoZSBkZXN0aW5hdGlvblxuICAgICAqIG9iamVjdC4gU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICAgICAqIElmIGBjdXN0b21pemVyYCBpcyBwcm92aWRlZCBpdCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOlxuICAgICAqIChvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAgYW5kIGlzIGJhc2VkIG9uXG4gICAgICogW2BPYmplY3QuYXNzaWduYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtb2JqZWN0LmFzc2lnbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgZXh0ZW5kXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBjdXN0b21pemVyYC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICd1c2VyJzogJ2Jhcm5leScgfSwgeyAnYWdlJzogNDAgfSwgeyAndXNlcic6ICdmcmVkJyB9KTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgYSBjdXN0b21pemVyIGNhbGxiYWNrXG4gICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ24sIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQodmFsdWUpID8gb3RoZXIgOiB2YWx1ZTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGRlZmF1bHRzKHsgJ3VzZXInOiAnYmFybmV5JyB9LCB7ICdhZ2UnOiAzNiB9LCB7ICd1c2VyJzogJ2ZyZWQnIH0pO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHJldHVybiBjdXN0b21pemVyXG4gICAgICAgID8gYXNzaWduV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcilcbiAgICAgICAgOiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gYHByb3RvdHlwZWAgb2JqZWN0LiBJZiBhXG4gICAgICogYHByb3BlcnRpZXNgIG9iamVjdCBpcyBwcm92aWRlZCBpdHMgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBhcmUgYXNzaWduZWRcbiAgICAgKiB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3RvdHlwZSBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdIFRoZSBwcm9wZXJ0aWVzIHRvIGFzc2lnbiB0byB0aGUgb2JqZWN0LlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIFNoYXBlKCkge1xuICAgICAqICAgdGhpcy54ID0gMDtcbiAgICAgKiAgIHRoaXMueSA9IDA7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQ2lyY2xlKCkge1xuICAgICAqICAgU2hhcGUuY2FsbCh0aGlzKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBDaXJjbGUucHJvdG90eXBlID0gXy5jcmVhdGUoU2hhcGUucHJvdG90eXBlLCB7XG4gICAgICogICAnY29uc3RydWN0b3InOiBDaXJjbGVcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHZhciBjaXJjbGUgPSBuZXcgQ2lyY2xlO1xuICAgICAqIGNpcmNsZSBpbnN0YW5jZW9mIENpcmNsZTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBjaXJjbGUgaW5zdGFuY2VvZiBTaGFwZTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcywgZ3VhcmQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwocHJvdG90eXBlLCBwcm9wZXJ0aWVzLCBndWFyZCkpIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzID8gYmFzZUFzc2lnbihyZXN1bHQsIHByb3BlcnRpZXMpIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0KHMpIHRvIHRoZSBkZXN0aW5hdGlvblxuICAgICAqIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBPbmNlIGFcbiAgICAgKiBwcm9wZXJ0eSBpcyBzZXQsIGFkZGl0aW9uYWwgdmFsdWVzIG9mIHRoZSBzYW1lIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdHMoeyAndXNlcic6ICdiYXJuZXknIH0sIHsgJ2FnZSc6IDM2IH0sIHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqL1xuICAgIHZhciBkZWZhdWx0cyA9IGNyZWF0ZURlZmF1bHRzKGFzc2lnbiwgYXNzaWduRGVmYXVsdHMpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kZWZhdWx0c2AgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgYXNzaWduc1xuICAgICAqIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmF1bHRzRGVlcCh7ICd1c2VyJzogeyAnbmFtZSc6ICdiYXJuZXknIH0gfSwgeyAndXNlcic6IHsgJ25hbWUnOiAnZnJlZCcsICdhZ2UnOiAzNiB9IH0pO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiB7ICduYW1lJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9IH1cbiAgICAgKlxuICAgICAqL1xuICAgIHZhciBkZWZhdWx0c0RlZXAgPSBjcmVhdGVEZWZhdWx0cyhtZXJnZSwgbWVyZ2VEZWZhdWx0cyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGtleSBvZiB0aGUgZmlyc3RcbiAgICAgKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIGZ1bmN0aW9uKGNocikge1xuICAgICAqICAgcmV0dXJuIGNoci5hZ2UgPCA0MDtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5JyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZEtleSh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICovXG4gICAgdmFyIGZpbmRLZXkgPSBjcmVhdGVGaW5kS2V5KGJhc2VGb3JPd24pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kS2V5YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYSBjb2xsZWN0aW9uIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCBmdW5jdGlvbihjaHIpIHtcbiAgICAgKiAgIHJldHVybiBjaHIuYWdlIDwgNDA7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gcmV0dXJucyBgcGViYmxlc2AgYXNzdW1pbmcgYF8uZmluZEtleWAgcmV0dXJucyBgYmFybmV5YFxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgJ2FjdGl2ZScsIGZhbHNlKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+ICdwZWJibGVzJ1xuICAgICAqL1xuICAgIHZhciBmaW5kTGFzdEtleSA9IGNyZWF0ZUZpbmRLZXkoYmFzZUZvck93blJpZ2h0KTtcblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBpbnZva2luZ1xuICAgICAqIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0XG4gICAgICogaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JJbihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IGxvZ3MgJ2EnLCAnYicsIGFuZCAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICB2YXIgZm9ySW4gPSBjcmVhdGVGb3JJbihiYXNlRm9yKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9ySW5gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICAgICAqIGBvYmplY3RgIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvckluUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBsb2dzICdjJywgJ2InLCBhbmQgJ2EnIGFzc3VtaW5nIGBfLmZvckluIGAgbG9ncyAnYScsICdiJywgYW5kICdjJ1xuICAgICAqL1xuICAgIHZhciBmb3JJblJpZ2h0ID0gY3JlYXRlRm9ySW4oYmFzZUZvclJpZ2h0KTtcblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgaW52b2tpbmcgYGl0ZXJhdGVlYFxuICAgICAqIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aFxuICAgICAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAgICAgKiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gbG9ncyAnYScgYW5kICdiJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciBmb3JPd24gPSBjcmVhdGVGb3JPd24oYmFzZUZvck93bik7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvck93bmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzIG9mXG4gICAgICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBsb2dzICdiJyBhbmQgJ2EnIGFzc3VtaW5nIGBfLmZvck93bmAgbG9ncyAnYScgYW5kICdiJ1xuICAgICAqL1xuICAgIHZhciBmb3JPd25SaWdodCA9IGNyZWF0ZUZvck93bihiYXNlRm9yT3duUmlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmcm9tIGFsbCBlbnVtZXJhYmxlIHByb3BlcnRpZXMsXG4gICAgICogb3duIGFuZCBpbmhlcml0ZWQsIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIG1ldGhvZHNcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZnVuY3Rpb25zKF8pO1xuICAgICAqIC8vID0+IFsnYWZ0ZXInLCAnYXJ5JywgJ2Fzc2lnbicsIC4uLl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmdW5jdGlvbnMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gYmFzZUZ1bmN0aW9ucyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICAgICAqIGB1bmRlZmluZWRgIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyB1c2VkIGluIGl0cyBwbGFjZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBpZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgYHVuZGVmaW5lZGAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgdG9QYXRoKHBhdGgpLCBwYXRoICsgJycpO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3QgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgaXMgYSBkaXJlY3QgcHJvcGVydHksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiB7ICdiJzogeyAnYyc6IDMgfSB9IH07XG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCAnYS5iLmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJywgJ2MnXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhcyhvYmplY3QsIHBhdGgpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHBhdGgpO1xuICAgICAgaWYgKCFyZXN1bHQgJiYgIWlzS2V5KHBhdGgpKSB7XG4gICAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgICAgIG9iamVjdCA9IHBhdGgubGVuZ3RoID09IDEgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwYXRoID0gbGFzdChwYXRoKTtcbiAgICAgICAgcmVzdWx0ID0gaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdCB8fCAoaXNMZW5ndGgob2JqZWN0Lmxlbmd0aCkgJiYgaXNJbmRleChwYXRoLCBvYmplY3QubGVuZ3RoKSAmJlxuICAgICAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgaW52ZXJ0ZWQga2V5cyBhbmQgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqIElmIGBvYmplY3RgIGNvbnRhaW5zIGR1cGxpY2F0ZSB2YWx1ZXMsIHN1YnNlcXVlbnQgdmFsdWVzIG92ZXJ3cml0ZSBwcm9wZXJ0eVxuICAgICAqIGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHZhbHVlcyB1bmxlc3MgYG11bHRpVmFsdWVgIGlzIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52ZXJ0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW211bHRpVmFsdWVdIEFsbG93IG11bHRpcGxlIHZhbHVlcyBwZXIga2V5LlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0KG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMSc6ICdjJywgJzInOiAnYicgfVxuICAgICAqXG4gICAgICogLy8gd2l0aCBgbXVsdGlWYWx1ZWBcbiAgICAgKiBfLmludmVydChvYmplY3QsIHRydWUpO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnZlcnQob2JqZWN0LCBtdWx0aVZhbHVlLCBndWFyZCkge1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKG9iamVjdCwgbXVsdGlWYWx1ZSwgZ3VhcmQpKSB7XG4gICAgICAgIG11bHRpVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBwcm9wcyA9IGtleXMob2JqZWN0KSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF0sXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgIGlmIChtdWx0aVZhbHVlKSB7XG4gICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFt2YWx1ZV0ucHVzaChrZXkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRbdmFsdWVdID0gW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFt2YWx1ZV0gPSBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICAgICAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1vYmplY3Qua2V5cylcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5rZXlzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIF8ua2V5cygnaGknKTtcbiAgICAgKiAvLyA9PiBbJzAnLCAnMSddXG4gICAgICovXG4gICAgdmFyIGtleXMgPSAhbmF0aXZlS2V5cyA/IHNoaW1LZXlzIDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICB2YXIgQ3RvciA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKCh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlID09PSBvYmplY3QpIHx8XG4gICAgICAgICAgKHR5cGVvZiBvYmplY3QgIT0gJ2Z1bmN0aW9uJyAmJiBpc0FycmF5TGlrZShvYmplY3QpKSkge1xuICAgICAgICByZXR1cm4gc2hpbUtleXMob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc09iamVjdChvYmplY3QpID8gbmF0aXZlS2V5cyhvYmplY3QpIDogW107XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8ua2V5c0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDtcbiAgICAgIGxlbmd0aCA9IChsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJlxuICAgICAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpICYmIGxlbmd0aCkgfHwgMDtcblxuICAgICAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICBpc1Byb3RvID0gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSA9PT0gb2JqZWN0LFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgc2tpcEluZGV4ZXMgPSBsZW5ndGggPiAwO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gKGluZGV4ICsgJycpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICBpZiAoIShza2lwSW5kZXhlcyAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSkgJiZcbiAgICAgICAgICAgICEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tYXBWYWx1ZXNgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgICAqIHNhbWUgdmFsdWVzIGFzIGBvYmplY3RgIGFuZCBrZXlzIGdlbmVyYXRlZCBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGVcbiAgICAgKiBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJvdWdoIGBpdGVyYXRlZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcEtleXMoeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICByZXR1cm4ga2V5ICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYTEnOiAxLCAnYjInOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgbWFwS2V5cyA9IGNyZWF0ZU9iamVjdE1hcHBlcih0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBgb2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZCBieVxuICAgICAqIHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJvdWdoIGBpdGVyYXRlZWAuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGZ1bmN0aW9uIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwVmFsdWVzKHsgJ2EnOiAxLCAnYic6IDIgfSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gKiAzO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAzLCAnYic6IDYgfVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2ZyZWQnOiAgICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ubWFwVmFsdWVzKHVzZXJzLCAnYWdlJyk7XG4gICAgICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciBtYXBWYWx1ZXMgPSBjcmVhdGVPYmplY3RNYXBwZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gICAgICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnwuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3ByZWRpY2F0ZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyXG4gICAgICogIGl0ZXJhdGlvbiBvciBwcm9wZXJ0eSBuYW1lcyB0byBvbWl0LCBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBwcm9wZXJ0eVxuICAgICAqICBuYW1lcyBvciBhcnJheXMgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfTtcbiAgICAgKlxuICAgICAqIF8ub21pdChvYmplY3QsICdhZ2UnKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKlxuICAgICAqIF8ub21pdChvYmplY3QsIF8uaXNOdW1iZXIpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqL1xuICAgIHZhciBvbWl0ID0gcmVzdFBhcmFtKGZ1bmN0aW9uKG9iamVjdCwgcHJvcHMpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHByb3BzWzBdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHByb3BzID0gYXJyYXlNYXAoYmFzZUZsYXR0ZW4ocHJvcHMpLCBTdHJpbmcpO1xuICAgICAgICByZXR1cm4gcGlja0J5QXJyYXkob2JqZWN0LCBiYXNlRGlmZmVyZW5jZShrZXlzSW4ob2JqZWN0KSwgcHJvcHMpKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcmVkaWNhdGUgPSBiaW5kQ2FsbGJhY2socHJvcHNbMF0sIHByb3BzWzFdLCAzKTtcbiAgICAgIHJldHVybiBwaWNrQnlDYWxsYmFjayhvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgICByZXR1cm4gIXByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5IG9mIHRoZSBrZXktdmFsdWUgcGFpcnMgZm9yIGBvYmplY3RgLFxuICAgICAqIGUuZy4gYFtba2V5MSwgdmFsdWUxXSwgW2tleTIsIHZhbHVlMl1dYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhaXJzKHsgJ2Jhcm5leSc6IDM2LCAnZnJlZCc6IDQwIH0pO1xuICAgICAqIC8vID0+IFtbJ2Jhcm5leScsIDM2XSwgWydmcmVkJywgNDBdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhaXJzKG9iamVjdCkge1xuICAgICAgb2JqZWN0ID0gdG9PYmplY3Qob2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcHJvcHMgPSBrZXlzKG9iamVjdCksXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBba2V5LCBvYmplY3Rba2V5XV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgYG9iamVjdGAgcHJvcGVydGllcy4gUHJvcGVydHlcbiAgICAgKiBuYW1lcyBtYXkgYmUgc3BlY2lmaWVkIGFzIGluZGl2aWR1YWwgYXJndW1lbnRzIG9yIGFzIGFycmF5cyBvZiBwcm9wZXJ0eVxuICAgICAqIG5hbWVzLiBJZiBgcHJlZGljYXRlYCBpcyBwcm92aWRlZCBpdCBpcyBpbnZva2VkIGZvciBlYWNoIHByb3BlcnR5IG9mIGBvYmplY3RgXG4gICAgICogcGlja2luZyB0aGUgcHJvcGVydGllcyBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnwuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3ByZWRpY2F0ZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyXG4gICAgICogIGl0ZXJhdGlvbiBvciBwcm9wZXJ0eSBuYW1lcyB0byBwaWNrLCBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBwcm9wZXJ0eVxuICAgICAqICBuYW1lcyBvciBhcnJheXMgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfTtcbiAgICAgKlxuICAgICAqIF8ucGljayhvYmplY3QsICd1c2VyJyk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdmcmVkJyB9XG4gICAgICpcbiAgICAgKiBfLnBpY2sob2JqZWN0LCBfLmlzU3RyaW5nKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKi9cbiAgICB2YXIgcGljayA9IHJlc3RQYXJhbShmdW5jdGlvbihvYmplY3QsIHByb3BzKSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiBwcm9wc1swXSA9PSAnZnVuY3Rpb24nXG4gICAgICAgID8gcGlja0J5Q2FsbGJhY2sob2JqZWN0LCBiaW5kQ2FsbGJhY2socHJvcHNbMF0sIHByb3BzWzFdLCAzKSlcbiAgICAgICAgOiBwaWNrQnlBcnJheShvYmplY3QsIGJhc2VGbGF0dGVuKHByb3BzKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGEgZnVuY3Rpb25cbiAgICAgKiBpdCBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGl0cyBwYXJlbnQgb2JqZWN0IGFuZCBpdHMgcmVzdWx0XG4gICAgICogaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byByZXNvbHZlLlxuICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBgdW5kZWZpbmVkYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjMSc6IDMsICdjMic6IF8uY29uc3RhbnQoNCkgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMxJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMyJyk7XG4gICAgICogLy8gPT4gNFxuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYS5iLmMnLCBfLmNvbnN0YW50KCdkZWZhdWx0JykpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3VsdChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W3BhdGhdO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvYmplY3QgIT0gbnVsbCAmJiAhaXNLZXkocGF0aCwgb2JqZWN0KSkge1xuICAgICAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgICAgICAgb2JqZWN0ID0gcGF0aC5sZW5ndGggPT0gMSA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTtcbiAgICAgICAgICByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtsYXN0KHBhdGgpXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0Z1bmN0aW9uKHJlc3VsdCkgPyByZXN1bHQuY2FsbChvYmplY3QpIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIGBwYXRoYCBvbiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYFxuICAgICAqIGRvZXMgbm90IGV4aXN0IGl0IGlzIGNyZWF0ZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGF1Z21lbnQuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8uc2V0KG9iamVjdCwgJ2FbMF0uYi5jJywgNCk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnNldChvYmplY3QsICd4WzBdLnkueicsIDUpO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIHZhciBwYXRoS2V5ID0gKHBhdGggKyAnJyk7XG4gICAgICBwYXRoID0gKG9iamVjdFtwYXRoS2V5XSAhPSBudWxsIHx8IGlzS2V5KHBhdGgsIG9iamVjdCkpID8gW3BhdGhLZXldIDogdG9QYXRoKHBhdGgpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICAgICAgd2hpbGUgKG5lc3RlZCAhPSBudWxsICYmICsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgICAgICBpZiAoaXNPYmplY3QobmVzdGVkKSkge1xuICAgICAgICAgIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIG5lc3RlZFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXN0ZWRba2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgICBuZXN0ZWRba2V5XSA9IGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge307XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBgXy5yZWR1Y2VgOyB0aGlzIG1ldGhvZCB0cmFuc2Zvcm1zIGBvYmplY3RgIHRvIGEgbmV3XG4gICAgICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93biBlbnVtZXJhYmxlXG4gICAgICogcHJvcGVydGllcyB0aHJvdWdoIGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uIHBvdGVudGlhbGx5IG11dGF0aW5nXG4gICAgICogdGhlIGBhY2N1bXVsYXRvcmAgb2JqZWN0LiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWRcbiAgICAgKiB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9uc1xuICAgICAqIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBjdXN0b20gYWNjdW11bGF0b3IgdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyYW5zZm9ybShbMiwgMywgNF0sIGZ1bmN0aW9uKHJlc3VsdCwgbikge1xuICAgICAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFs0LCA5XVxuICAgICAqXG4gICAgICogXy50cmFuc2Zvcm0oeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbihyZXN1bHQsIG4sIGtleSkge1xuICAgICAqICAgcmVzdWx0W2tleV0gPSBuICogMztcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMywgJ2InOiA2IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm0ob2JqZWN0LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIHRoaXNBcmcpIHtcbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkob2JqZWN0KSB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KTtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDQpO1xuXG4gICAgICBpZiAoYWNjdW11bGF0b3IgPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNBcnIgfHwgaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgICAgIGlmIChpc0Fycikge1xuICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQ3RvciA6IFtdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2N1bXVsYXRvciA9IGJhc2VDcmVhdGUoaXNGdW5jdGlvbihDdG9yKSA/IEN0b3IucHJvdG90eXBlIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKGlzQXJyID8gYXJyYXlFYWNoIDogYmFzZUZvck93bikob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udmFsdWVzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogXy52YWx1ZXMoJ2hpJyk7XG4gICAgICogLy8gPT4gWydoJywgJ2knXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHZhbHVlc1xuICAgICAqIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy52YWx1ZXNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBiYXNlVmFsdWVzKG9iamVjdCwga2V5c0luKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgbmAgaXMgYmV0d2VlbiBgc3RhcnRgIGFuZCB1cCB0byBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIElmXG4gICAgICogYGVuZGAgaXMgbm90IHNwZWNpZmllZCBpdCBpcyBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBuYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDMsIDIsIDQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg0LCA4KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNCwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgyLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDEuMiwgMik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDUuMiwgNCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpblJhbmdlKHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICBzdGFydCA9ICtzdGFydCB8fCAwO1xuICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmQgPSArZW5kIHx8IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWUgPj0gbmF0aXZlTWluKHN0YXJ0LCBlbmQpICYmIHZhbHVlIDwgbmF0aXZlTWF4KHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YCAoaW5jbHVzaXZlKS4gSWYgb25seSBvbmVcbiAgICAgKiBhcmd1bWVudCBpcyBwcm92aWRlZCBhIG51bWJlciBiZXR3ZWVuIGAwYCBhbmQgdGhlIGdpdmVuIG51bWJlciBpcyByZXR1cm5lZC5cbiAgICAgKiBJZiBgZmxvYXRpbmdgIGlzIGB0cnVlYCwgb3IgZWl0aGVyIGBtaW5gIG9yIGBtYXhgIGFyZSBmbG9hdHMsIGEgZmxvYXRpbmctcG9pbnRcbiAgICAgKiBudW1iZXIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdIFRoZSBtaW5pbXVtIHBvc3NpYmxlIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIFRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zsb2F0aW5nXSBTcGVjaWZ5IHJldHVybmluZyBhIGZsb2F0aW5nLXBvaW50IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSgwLCA1KTtcbiAgICAgKiAvLyA9PiBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oNSk7XG4gICAgICogLy8gPT4gYWxzbyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oNSwgdHJ1ZSk7XG4gICAgICogLy8gPT4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAwIGFuZCA1XG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSgxLjIsIDUuMik7XG4gICAgICogLy8gPT4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAxLjIgYW5kIDUuMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCwgZmxvYXRpbmcpIHtcbiAgICAgIGlmIChmbG9hdGluZyAmJiBpc0l0ZXJhdGVlQ2FsbChtaW4sIG1heCwgZmxvYXRpbmcpKSB7XG4gICAgICAgIG1heCA9IGZsb2F0aW5nID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIG5vTWluID0gbWluID09IG51bGwsXG4gICAgICAgICAgbm9NYXggPSBtYXggPT0gbnVsbDtcblxuICAgICAgaWYgKGZsb2F0aW5nID09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vTWF4ICYmIHR5cGVvZiBtaW4gPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSBtaW47XG4gICAgICAgICAgbWluID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWF4ID09ICdib29sZWFuJykge1xuICAgICAgICAgIGZsb2F0aW5nID0gbWF4O1xuICAgICAgICAgIG5vTWF4ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vTWluICYmIG5vTWF4KSB7XG4gICAgICAgIG1heCA9IDE7XG4gICAgICAgIG5vTWF4ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBtaW4gPSArbWluIHx8IDA7XG4gICAgICBpZiAobm9NYXgpIHtcbiAgICAgICAgbWF4ID0gbWluO1xuICAgICAgICBtaW4gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF4ID0gK21heCB8fCAwO1xuICAgICAgfVxuICAgICAgaWYgKGZsb2F0aW5nIHx8IG1pbiAlIDEgfHwgbWF4ICUgMSkge1xuICAgICAgICB2YXIgcmFuZCA9IG5hdGl2ZVJhbmRvbSgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlTWluKG1pbiArIChyYW5kICogKG1heCAtIG1pbiArIHBhcnNlRmxvYXQoJzFlLScgKyAoKHJhbmQgKyAnJykubGVuZ3RoIC0gMSkpKSksIG1heCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVJhbmRvbShtaW4sIG1heCk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gW2NhbWVsIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhbWVsQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYW1lbCBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCctLWZvby1iYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJ19fZm9vX2Jhcl9fJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKi9cbiAgICB2YXIgY2FtZWxDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICB3b3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICh3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSkgOiB3b3JkKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENhcGl0YWxpemVzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYXBpdGFsaXplZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2FwaXRhbGl6ZSgnZnJlZCcpO1xuICAgICAqIC8vID0+ICdGcmVkJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiBzdHJpbmcgJiYgKHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVidXJycyBgc3RyaW5nYCBieSBjb252ZXJ0aW5nIFtsYXRpbi0xIHN1cHBsZW1lbnRhcnkgbGV0dGVyc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW4tMV9TdXBwbGVtZW50XyhVbmljb2RlX2Jsb2NrKSNDaGFyYWN0ZXJfdGFibGUpXG4gICAgICogdG8gYmFzaWMgbGF0aW4gbGV0dGVycyBhbmQgcmVtb3ZpbmcgW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBkZWJ1cnIuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlYnVycignZMOpasOgIHZ1Jyk7XG4gICAgICogLy8gPT4gJ2RlamEgdnUnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVidXJyKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gc3RyaW5nICYmIHN0cmluZy5yZXBsYWNlKHJlTGF0aW4xLCBkZWJ1cnJMZXR0ZXIpLnJlcGxhY2UocmVDb21ib01hcmssICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHN0cmluZ2AgZW5kcyB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249c3RyaW5nLmxlbmd0aF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBlbmRzIHdpdGggYHRhcmdldGAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2MnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicsIDIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlbmRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpO1xuICAgICAgdGFyZ2V0ID0gKHRhcmdldCArICcnKTtcblxuICAgICAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBsZW5ndGhcbiAgICAgICAgOiBuYXRpdmVNaW4ocG9zaXRpb24gPCAwID8gMCA6ICgrcG9zaXRpb24gfHwgMCksIGxlbmd0aCk7XG5cbiAgICAgIHBvc2l0aW9uIC09IHRhcmdldC5sZW5ndGg7XG4gICAgICByZXR1cm4gcG9zaXRpb24gPj0gMCAmJiBzdHJpbmcuaW5kZXhPZih0YXJnZXQsIHBvc2l0aW9uKSA9PSBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgY2hhcmFjdGVycyBcIiZcIiwgXCI8XCIsIFwiPlwiLCAnXCInLCBcIidcIiwgYW5kIFwiXFxgXCIsIGluIGBzdHJpbmdgIHRvXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsIGNoYXJhY3RlcnNcbiAgICAgKiB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gICAgICpcbiAgICAgKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gICAgICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAgICAgKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFnIG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKiBTZWUgW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICAgICAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQmFja3RpY2tzIGFyZSBlc2NhcGVkIGJlY2F1c2UgaW4gSW50ZXJuZXQgRXhwbG9yZXIgPCA5LCB0aGV5IGNhbiBicmVhayBvdXRcbiAgICAgKiBvZiBhdHRyaWJ1dGUgdmFsdWVzIG9yIEhUTUwgY29tbWVudHMuIFNlZSBbIzU5XShodHRwczovL2h0bWw1c2VjLm9yZy8jNTkpLFxuICAgICAqIFsjMTAyXShodHRwczovL2h0bWw1c2VjLm9yZy8jMTAyKSwgWyMxMDhdKGh0dHBzOi8vaHRtbDVzZWMub3JnLyMxMDgpLCBhbmRcbiAgICAgKiBbIzEzM10oaHR0cHM6Ly9odG1sNXNlYy5vcmcvIzEzMykgb2YgdGhlIFtIVE1MNSBTZWN1cml0eSBDaGVhdHNoZWV0XShodHRwczovL2h0bWw1c2VjLm9yZy8pXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXMgW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKVxuICAgICAqIHRvIHJlZHVjZSBYU1MgdmVjdG9ycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICAgICAgLy8gUmVzZXQgYGxhc3RJbmRleGAgYmVjYXVzZSBpbiBJRSA8IDkgYFN0cmluZyNyZXBsYWNlYCBkb2VzIG5vdC5cbiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJcXFwiLCBcIi9cIiwgXCJeXCIsIFwiJFwiLCBcIi5cIiwgXCJ8XCIsIFwiP1wiLFxuICAgICAqIFwiKlwiLCBcIitcIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiIGFuZCBcIn1cIiBpbiBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICAgICAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczpcXC9cXC9sb2Rhc2hcXC5jb21cXC9cXCknXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1JlZ0V4cENoYXJzLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXJzLCBlc2NhcGVSZWdFeHBDaGFyKVxuICAgICAgICA6IChzdHJpbmcgfHwgJyg/OiknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBba2ViYWIgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3BlY2lhbF9jYXNlX3N0eWxlcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBrZWJhYiBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKi9cbiAgICB2YXIga2ViYWJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJy0nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuXG4gICAgICogUGFkZGluZyBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBjYW4ndCBiZSBldmVubHkgZGl2aWRlZCBieSBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgOCk7XG4gICAgICogLy8gPT4gJyAgYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDgsICdfLScpO1xuICAgICAqIC8vID0+ICdfLWFiY18tXydcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gK2xlbmd0aDtcblxuICAgICAgdmFyIHN0ckxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gICAgICBpZiAoc3RyTGVuZ3RoID49IGxlbmd0aCB8fCAhbmF0aXZlSXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMixcbiAgICAgICAgICBsZWZ0TGVuZ3RoID0gbmF0aXZlRmxvb3IobWlkKSxcbiAgICAgICAgICByaWdodExlbmd0aCA9IG5hdGl2ZUNlaWwobWlkKTtcblxuICAgICAgY2hhcnMgPSBjcmVhdGVQYWRkaW5nKCcnLCByaWdodExlbmd0aCwgY2hhcnMpO1xuICAgICAgcmV0dXJuIGNoYXJzLnNsaWNlKDAsIGxlZnRMZW5ndGgpICsgc3RyaW5nICsgY2hhcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkTGVmdCgnYWJjJywgNik7XG4gICAgICogLy8gPT4gJyAgIGFiYydcbiAgICAgKlxuICAgICAqIF8ucGFkTGVmdCgnYWJjJywgNiwgJ18tJyk7XG4gICAgICogLy8gPT4gJ18tX2FiYydcbiAgICAgKlxuICAgICAqIF8ucGFkTGVmdCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICB2YXIgcGFkTGVmdCA9IGNyZWF0ZVBhZERpcigpO1xuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgcmlnaHQgc2lkZSBpZiBpdCdzIHNob3J0ZXIgdGhhbiBgbGVuZ3RoYC4gUGFkZGluZ1xuICAgICAqIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGV4Y2VlZCBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZFJpZ2h0KCdhYmMnLCA2KTtcbiAgICAgKiAvLyA9PiAnYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWRSaWdodCgnYWJjJywgNiwgJ18tJyk7XG4gICAgICogLy8gPT4gJ2FiY18tXydcbiAgICAgKlxuICAgICAqIF8ucGFkUmlnaHQoJ2FiYycsIDMpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICovXG4gICAgdmFyIHBhZFJpZ2h0ID0gY3JlYXRlUGFkRGlyKHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gaW50ZWdlciBvZiB0aGUgc3BlY2lmaWVkIHJhZGl4LiBJZiBgcmFkaXhgIGlzXG4gICAgICogYHVuZGVmaW5lZGAgb3IgYDBgLCBhIGByYWRpeGAgb2YgYDEwYCBpcyB1c2VkIHVubGVzcyBgdmFsdWVgIGlzIGEgaGV4YWRlY2ltYWwsXG4gICAgICogaW4gd2hpY2ggY2FzZSBhIGByYWRpeGAgb2YgYDE2YCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFsaWducyB3aXRoIHRoZSBbRVM1IGltcGxlbWVudGF0aW9uXShodHRwczovL2VzNS5naXRodWIuaW8vI0UpXG4gICAgICogb2YgYHBhcnNlSW50YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhZGl4XSBUaGUgcmFkaXggdG8gaW50ZXJwcmV0IGB2YWx1ZWAgYnkuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFyc2VJbnQoJzA4Jyk7XG4gICAgICogLy8gPT4gOFxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzA4JywgJzEwJ10sIF8ucGFyc2VJbnQpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4LCBndWFyZCkge1xuICAgICAgLy8gRmlyZWZveCA8IDIxIGFuZCBPcGVyYSA8IDE1IGZvbGxvdyBFUzMgZm9yIGBwYXJzZUludGAuXG4gICAgICAvLyBDaHJvbWUgZmFpbHMgdG8gdHJpbSBsZWFkaW5nIDxCT00+IHdoaXRlc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzEwOSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCByYWRpeCwgZ3VhcmQpIDogcmFkaXggPT0gbnVsbCkge1xuICAgICAgICByYWRpeCA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHJhZGl4KSB7XG4gICAgICAgIHJhZGl4ID0gK3JhZGl4O1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdHJpbShzdHJpbmcpO1xuICAgICAgcmV0dXJuIG5hdGl2ZVBhcnNlSW50KHN0cmluZywgcmFkaXggfHwgKHJlSGFzSGV4UHJlZml4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRzIHRoZSBnaXZlbiBzdHJpbmcgYG5gIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MF0gVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCcqJywgMyk7XG4gICAgICogLy8gPT4gJyoqKidcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCdhYmMnLCAyKTtcbiAgICAgKiAvLyA9PiAnYWJjYWJjJ1xuICAgICAqXG4gICAgICogXy5yZXBlYXQoJ2FiYycsIDApO1xuICAgICAqIC8vID0+ICcnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgbikge1xuICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBuID0gK247XG4gICAgICBpZiAobiA8IDEgfHwgIXN0cmluZyB8fCAhbmF0aXZlSXNGaW5pdGUobikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIC8vIExldmVyYWdlIHRoZSBleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZyBhbGdvcml0aG0gZm9yIGEgZmFzdGVyIHJlcGVhdC5cbiAgICAgIC8vIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHBvbmVudGlhdGlvbl9ieV9zcXVhcmluZyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgZG8ge1xuICAgICAgICBpZiAobiAlIDIpIHtcbiAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIG4gPSBuYXRpdmVGbG9vcihuIC8gMik7XG4gICAgICAgIHN0cmluZyArPSBzdHJpbmc7XG4gICAgICB9IHdoaWxlIChuKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBbc25ha2UgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU25ha2VfY2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzbmFrZSBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnLS1mb28tYmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICovXG4gICAgdmFyIHNuYWtlQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICdfJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIFtzdGFydCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTdHlsaXN0aWNfb3Jfc3BlY2lhbGlzZWRfdXNhZ2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RhcnQgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnLS1mb28tYmFyJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnRm9vIEJhcidcbiAgICAgKi9cbiAgICB2YXIgc3RhcnRDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgKHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Bvc2l0aW9uPTBdIFRoZSBwb3NpdGlvbiB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHRhcmdldGAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYicsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09IG51bGxcbiAgICAgICAgPyAwXG4gICAgICAgIDogbmF0aXZlTWluKHBvc2l0aW9uIDwgMCA/IDAgOiAoK3Bvc2l0aW9uIHx8IDApLCBzdHJpbmcubGVuZ3RoKTtcblxuICAgICAgcmV0dXJuIHN0cmluZy5sYXN0SW5kZXhPZih0YXJnZXQsIHBvc2l0aW9uKSA9PSBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBjYW4gaW50ZXJwb2xhdGUgZGF0YSBwcm9wZXJ0aWVzXG4gICAgICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAgICAgKiBcImVzY2FwZVwiIGRlbGltaXRlcnMsIGFuZCBleGVjdXRlIEphdmFTY3JpcHQgaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnMuIERhdGFcbiAgICAgKiBwcm9wZXJ0aWVzIG1heSBiZSBhY2Nlc3NlZCBhcyBmcmVlIHZhcmlhYmxlcyBpbiB0aGUgdGVtcGxhdGUuIElmIGEgc2V0dGluZ1xuICAgICAqIG9iamVjdCBpcyBwcm92aWRlZCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEluIHRoZSBkZXZlbG9wbWVudCBidWlsZCBgXy50ZW1wbGF0ZWAgdXRpbGl6ZXNcbiAgICAgKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAgICAgKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gICAgICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICAgICAqXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gICAgICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlXSBUaGUgSFRNTCBcImVzY2FwZVwiIGRlbGltaXRlci5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXZhbHVhdGVdIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzXSBBbiBvYmplY3QgdG8gaW1wb3J0IGludG8gdGhlIHRlbXBsYXRlIGFzIGZyZWUgdmFyaWFibGVzLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZV0gVGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTF0gVGhlIHNvdXJjZVVSTCBvZiB0aGUgdGVtcGxhdGUncyBjb21waWxlZCBzb3VyY2UuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlXSBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtvdGhlck9wdGlvbnNdIEVuYWJsZXMgdGhlIGxlZ2FjeSBgb3B0aW9uc2AgcGFyYW0gc2lnbmF0dXJlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyIHRvIGNyZWF0ZSBhIGNvbXBpbGVkIHRlbXBsYXRlXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdmcmVkJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgSFRNTCBcImVzY2FwZVwiIGRlbGltaXRlciB0byBlc2NhcGUgZGF0YSBwcm9wZXJ0eSB2YWx1ZXNcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8Yj48JS0gdmFsdWUgJT48L2I+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICAgICAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlciB0byBleGVjdXRlIEphdmFTY3JpcHQgYW5kIGdlbmVyYXRlIEhUTUxcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBfLmZvckVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPicpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGludGVybmFsIGBwcmludGAgZnVuY3Rpb24gaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnNcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBwcmludChcImhlbGxvIFwiICsgdXNlcik7ICU+IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnYmFybmV5JyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBFUyBkZWxpbWl0ZXIgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGRlZmF1bHQgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlclxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvICR7IHVzZXIgfSEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ3BlYmJsZXMnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIGN1c3RvbSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXG4gICAgICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnbXVzdGFjaGUnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBiYWNrc2xhc2hlcyB0byB0cmVhdCBkZWxpbWl0ZXJzIGFzIHBsYWluIHRleHRcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JT0gXCJcXFxcPCUtIHZhbHVlICVcXFxcPlwiICU+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gICAgICogLy8gPT4gJzwlLSB2YWx1ZSAlPidcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgXG4gICAgICogdmFyIHRleHQgPSAnPCUganEuZWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+JztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICAgICAqIGNvbXBpbGVkKGRhdGEpO1xuICAgICAqIC8vID0+IGZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3JcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgdmFyaWFibGVgIG9wdGlvbiB0byBlbnN1cmUgYSB3aXRoLXN0YXRlbWVudCBpc24ndCB1c2VkIGluIHRoZSBjb21waWxlZCB0ZW1wbGF0ZVxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gICAgICogY29tcGlsZWQuc291cmNlO1xuICAgICAqIC8vID0+IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICAgICAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICAgICAqIC8vICAgcmV0dXJuIF9fcDtcbiAgICAgKiAvLyB9XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICAgICAqIC8vIGxpbmUgbnVtYmVycyBpbiBlcnJvciBtZXNzYWdlcyBhbmQgYSBzdGFjayB0cmFjZVxuICAgICAqIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGN3ZCwgJ2pzdC5qcycpLCAnXFxcbiAgICAgKiAgIHZhciBKU1QgPSB7XFxcbiAgICAgKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAgICAgKiAgIH07XFxcbiAgICAgKiAnKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0ZW1wbGF0ZShzdHJpbmcsIG9wdGlvbnMsIG90aGVyT3B0aW9ucykge1xuICAgICAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvbiAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gICAgICAvLyBhbmQgTGF1cmEgRG9rdG9yb3ZhJ3MgZG9ULmpzIChodHRwczovL2dpdGh1Yi5jb20vb2xhZG8vZG9UKS5cbiAgICAgIHZhciBzZXR0aW5ncyA9IGxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzO1xuXG4gICAgICBpZiAob3RoZXJPcHRpb25zICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgb3RoZXJPcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0gb3RoZXJPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBvcHRpb25zID0gYXNzaWduV2l0aChiYXNlQXNzaWduKHt9LCBvdGhlck9wdGlvbnMgfHwgb3B0aW9ucyksIHNldHRpbmdzLCBhc3NpZ25Pd25EZWZhdWx0cyk7XG5cbiAgICAgIHZhciBpbXBvcnRzID0gYXNzaWduV2l0aChiYXNlQXNzaWduKHt9LCBvcHRpb25zLmltcG9ydHMpLCBzZXR0aW5ncy5pbXBvcnRzLCBhc3NpZ25Pd25EZWZhdWx0cyksXG4gICAgICAgICAgaW1wb3J0c0tleXMgPSBrZXlzKGltcG9ydHMpLFxuICAgICAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICAgICAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICAgICAgaXNFdmFsdWF0aW5nLFxuICAgICAgICAgIGluZGV4ID0gMCxcbiAgICAgICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgICAgIHNvdXJjZSA9IFwiX19wICs9ICdcIjtcblxuICAgICAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICAgICAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAgICAgKG9wdGlvbnMuZXNjYXBlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICtcbiAgICAgICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAgICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICAob3B0aW9ucy5ldmFsdWF0ZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JCdcbiAgICAgICwgJ2cnKTtcblxuICAgICAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAgICAgdmFyIHNvdXJjZVVSTCA9ICcvLyMgc291cmNlVVJMPScgK1xuICAgICAgICAoJ3NvdXJjZVVSTCcgaW4gb3B0aW9uc1xuICAgICAgICAgID8gb3B0aW9ucy5zb3VyY2VVUkxcbiAgICAgICAgICA6ICgnbG9kYXNoLnRlbXBsYXRlU291cmNlc1snICsgKCsrdGVtcGxhdGVDb3VudGVyKSArICddJylcbiAgICAgICAgKSArICdcXG4nO1xuXG4gICAgICBzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGVWYWx1ZSwgaW50ZXJwb2xhdGVWYWx1ZSwgZXNUZW1wbGF0ZVZhbHVlLCBldmFsdWF0ZVZhbHVlLCBvZmZzZXQpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAgICAgLy8gRXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZSBpbmNsdWRlZCBpbiBzdHJpbmcgbGl0ZXJhbHMuXG4gICAgICAgIHNvdXJjZSArPSBzdHJpbmcuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5nQ2hhcik7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgICAgIGlmIChlc2NhcGVWYWx1ZSkge1xuICAgICAgICAgIGlzRXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZVZhbHVlICsgXCI7XFxuX19wICs9ICdcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbigoX190ID0gKFwiICsgaW50ZXJwb2xhdGVWYWx1ZSArIFwiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICAgIC8vIFRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgcHJvZHVjdHMgcmVxdWlyZXMgcmV0dXJuaW5nIHRoZSBgbWF0Y2hgXG4gICAgICAgIC8vIHN0cmluZyBpbiBvcmRlciB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGBvZmZzZXRgIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9KTtcblxuICAgICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgICAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAgICAgLy8gY29kZSB0byBhZGQgdGhlIGRhdGEgb2JqZWN0IHRvIHRoZSB0b3Agb2YgdGhlIHNjb3BlIGNoYWluLlxuICAgICAgdmFyIHZhcmlhYmxlID0gb3B0aW9ucy52YXJpYWJsZTtcbiAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgc291cmNlID0gJ3dpdGggKG9iaikge1xcbicgKyBzb3VyY2UgKyAnXFxufVxcbic7XG4gICAgICB9XG4gICAgICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gICAgICBzb3VyY2UgPSAoaXNFdmFsdWF0aW5nID8gc291cmNlLnJlcGxhY2UocmVFbXB0eVN0cmluZ0xlYWRpbmcsICcnKSA6IHNvdXJjZSlcbiAgICAgICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ01pZGRsZSwgJyQxJylcbiAgICAgICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgICAgIC8vIEZyYW1lIGNvZGUgYXMgdGhlIGZ1bmN0aW9uIGJvZHkuXG4gICAgICBzb3VyY2UgPSAnZnVuY3Rpb24oJyArICh2YXJpYWJsZSB8fCAnb2JqJykgKyAnKSB7XFxuJyArXG4gICAgICAgICh2YXJpYWJsZVxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6ICdvYmogfHwgKG9iaiA9IHt9KTtcXG4nXG4gICAgICAgICkgK1xuICAgICAgICBcInZhciBfX3QsIF9fcCA9ICcnXCIgK1xuICAgICAgICAoaXNFc2NhcGluZ1xuICAgICAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgICAgICA6ICcnXG4gICAgICAgICkgK1xuICAgICAgICAoaXNFdmFsdWF0aW5nXG4gICAgICAgICAgPyAnLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcXG4nICtcbiAgICAgICAgICAgIFwiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCJcbiAgICAgICAgICA6ICc7XFxuJ1xuICAgICAgICApICtcbiAgICAgICAgc291cmNlICtcbiAgICAgICAgJ3JldHVybiBfX3BcXG59JztcblxuICAgICAgdmFyIHJlc3VsdCA9IGF0dGVtcHQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvbihpbXBvcnRzS2V5cywgc291cmNlVVJMICsgJ3JldHVybiAnICsgc291cmNlKS5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uJ3Mgc291cmNlIGJ5IGl0cyBgdG9TdHJpbmdgIG1ldGhvZCBvclxuICAgICAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgICAgIHJlc3VsdC5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICBpZiAoaXNFcnJvcihyZXN1bHQpKSB7XG4gICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbSgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLnRyaW0oJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLm1hcChbJyAgZm9vICAnLCAnICBiYXIgICddLCBfLnRyaW0pO1xuICAgICAqIC8vID0+IFsnZm9vJywgJ2JhciddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbShzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgdmFyIHZhbHVlID0gc3RyaW5nO1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoIXN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGNoYXJzLCBndWFyZCkgOiBjaGFycyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UodHJpbW1lZExlZnRJbmRleChzdHJpbmcpLCB0cmltbWVkUmlnaHRJbmRleChzdHJpbmcpICsgMSk7XG4gICAgICB9XG4gICAgICBjaGFycyA9IChjaGFycyArICcnKTtcbiAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoY2hhcnNMZWZ0SW5kZXgoc3RyaW5nLCBjaGFycyksIGNoYXJzUmlnaHRJbmRleChzdHJpbmcsIGNoYXJzKSArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbUxlZnQoJyAgYWJjICAnKTtcbiAgICAgKiAvLyA9PiAnYWJjICAnXG4gICAgICpcbiAgICAgKiBfLnRyaW1MZWZ0KCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnYWJjLV8tJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW1MZWZ0KHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdHJpbmc7XG4gICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmICghc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICBpZiAoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgY2hhcnMsIGd1YXJkKSA6IGNoYXJzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSh0cmltbWVkTGVmdEluZGV4KHN0cmluZykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5zbGljZShjaGFyc0xlZnRJbmRleChzdHJpbmcsIChjaGFycyArICcnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyaW1SaWdodCgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICcgIGFiYydcbiAgICAgKlxuICAgICAqIF8udHJpbVJpZ2h0KCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnLV8tYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW1SaWdodChzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgdmFyIHZhbHVlID0gc3RyaW5nO1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoIXN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGNoYXJzLCBndWFyZCkgOiBjaGFycyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZFJpZ2h0SW5kZXgoc3RyaW5nKSArIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCBjaGFyc1JpZ2h0SW5kZXgoc3RyaW5nLCAoY2hhcnMgKyAnJykpICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGVzIGBzdHJpbmdgIGlmIGl0J3MgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBUaGUgbGFzdCBjaGFyYWN0ZXJzIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBvbWlzc2lvblxuICAgICAqIHN0cmluZyB3aGljaCBkZWZhdWx0cyB0byBcIi4uLlwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRydW5jYXRlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gW29wdGlvbnNdIFRoZSBvcHRpb25zIG9iamVjdCBvciBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxlbmd0aD0zMF0gVGhlIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub21pc3Npb249Jy4uLiddIFRoZSBzdHJpbmcgdG8gaW5kaWNhdGUgdGV4dCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW29wdGlvbnMuc2VwYXJhdG9yXSBUaGUgc2VwYXJhdG9yIHBhdHRlcm4gdG8gdHJ1bmNhdGUgdG8uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJ1bmNhdGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cnVuYygnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycpO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm8uLi4nXG4gICAgICpcbiAgICAgKiBfLnRydW5jKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywgMjQpO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG4uLi4nXG4gICAgICpcbiAgICAgKiBfLnRydW5jKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICAgICAqICAgJ2xlbmd0aCc6IDI0LFxuICAgICAqICAgJ3NlcGFyYXRvcic6ICcgJ1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuYygnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgKiAgICdzZXBhcmF0b3InOiAvLD8gKy9cbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuYygnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdvbWlzc2lvbic6ICcgWy4uLl0nXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZyBbLi4uXSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cnVuYyhzdHJpbmcsIG9wdGlvbnMsIGd1YXJkKSB7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkpIHtcbiAgICAgICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBERUZBVUxUX1RSVU5DX0xFTkdUSCxcbiAgICAgICAgICBvbWlzc2lvbiA9IERFRkFVTFRfVFJVTkNfT01JU1NJT047XG5cbiAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9ICdzZXBhcmF0b3InIGluIG9wdGlvbnMgPyBvcHRpb25zLnNlcGFyYXRvciA6IHNlcGFyYXRvcjtcbiAgICAgICAgICBsZW5ndGggPSAnbGVuZ3RoJyBpbiBvcHRpb25zID8gKCtvcHRpb25zLmxlbmd0aCB8fCAwKSA6IGxlbmd0aDtcbiAgICAgICAgICBvbWlzc2lvbiA9ICdvbWlzc2lvbicgaW4gb3B0aW9ucyA/IGJhc2VUb1N0cmluZyhvcHRpb25zLm9taXNzaW9uKSA6IG9taXNzaW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlbmd0aCA9ICtvcHRpb25zIHx8IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKGxlbmd0aCA+PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgZW5kID0gbGVuZ3RoIC0gb21pc3Npb24ubGVuZ3RoO1xuICAgICAgaWYgKGVuZCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIG9taXNzaW9uO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHN0cmluZy5zbGljZSgwLCBlbmQpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChpc1JlZ0V4cChzZXBhcmF0b3IpKSB7XG4gICAgICAgIGlmIChzdHJpbmcuc2xpY2UoZW5kKS5zZWFyY2goc2VwYXJhdG9yKSkge1xuICAgICAgICAgIHZhciBtYXRjaCxcbiAgICAgICAgICAgICAgbmV3RW5kLFxuICAgICAgICAgICAgICBzdWJzdHJpbmcgPSBzdHJpbmcuc2xpY2UoMCwgZW5kKTtcblxuICAgICAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIChyZUZsYWdzLmV4ZWMoc2VwYXJhdG9yKSB8fCAnJykgKyAnZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXBhcmF0b3IubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gc2VwYXJhdG9yLmV4ZWMoc3Vic3RyaW5nKSkpIHtcbiAgICAgICAgICAgIG5ld0VuZCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbmV3RW5kID09IG51bGwgPyBlbmQgOiBuZXdFbmQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKHNlcGFyYXRvciwgZW5kKSAhPSBlbmQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gcmVzdWx0Lmxhc3RJbmRleE9mKHNlcGFyYXRvcik7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdCArIG9taXNzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBpbnZlcnNlIG9mIGBfLmVzY2FwZWA7IHRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBIVE1MIGVudGl0aWVzXG4gICAgICogYCZhbXA7YCwgYCZsdDtgLCBgJmd0O2AsIGAmcXVvdDtgLCBgJiMzOTtgLCBhbmQgYCYjOTY7YCBpbiBgc3RyaW5nYCB0byB0aGVpclxuICAgICAqIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBObyBvdGhlciBIVE1MIGVudGl0aWVzIGFyZSB1bmVzY2FwZWQuIFRvIHVuZXNjYXBlIGFkZGl0aW9uYWwgSFRNTFxuICAgICAqIGVudGl0aWVzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB1bmVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmVzY2FwZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuZXNjYXBlKCdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5lc2NhcGUoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzRXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlRXNjYXBlZEh0bWwsIHVuZXNjYXBlSHRtbENoYXIpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gWydmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJywgL1teLCBdKy9nKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJyYnLCAncGViYmxlcyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gd29yZHMoc3RyaW5nLCBwYXR0ZXJuLCBndWFyZCkge1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgcGF0dGVybiwgZ3VhcmQpKSB7XG4gICAgICAgIHBhdHRlcm4gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiBzdHJpbmcubWF0Y2gocGF0dGVybiB8fCByZVdvcmRzKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBpbnZva2UgYGZ1bmNgLCByZXR1cm5pbmcgZWl0aGVyIHRoZSByZXN1bHQgb3IgdGhlIGNhdWdodCBlcnJvclxuICAgICAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCBpcyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gYXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9yc1xuICAgICAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAqIH0sICc+Xz4nKTtcbiAgICAgKlxuICAgICAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gICAgICogICBlbGVtZW50cyA9IFtdO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICB2YXIgYXR0ZW1wdCA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBpc0Vycm9yKGUpID8gZSA6IG5ldyBFcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYFxuICAgICAqIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uIElmIGBmdW5jYCBpcyBhIHByb3BlcnR5IG5hbWUgdGhlXG4gICAgICogY3JlYXRlZCBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBnaXZlbiBlbGVtZW50LiBJZiBgZnVuY2BcbiAgICAgKiBpcyBhbiBvYmplY3QgdGhlIGNyZWF0ZWQgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpblxuICAgICAqIHRoZSBlcXVpdmFsZW50IG9iamVjdCBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGl0ZXJhdGVlXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNhbGxiYWNrLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyB3cmFwIHRvIGNyZWF0ZSBjdXN0b20gY2FsbGJhY2sgc2hvcnRoYW5kc1xuICAgICAqIF8uY2FsbGJhY2sgPSBfLndyYXAoXy5jYWxsYmFjaywgZnVuY3Rpb24oY2FsbGJhY2ssIGZ1bmMsIHRoaXNBcmcpIHtcbiAgICAgKiAgIHZhciBtYXRjaCA9IC9eKC4rPylfXyhbZ2xddCkoLispJC8uZXhlYyhmdW5jKTtcbiAgICAgKiAgIGlmICghbWF0Y2gpIHtcbiAgICAgKiAgICAgcmV0dXJuIGNhbGxiYWNrKGZ1bmMsIHRoaXNBcmcpO1xuICAgICAqICAgfVxuICAgICAqICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAqICAgICByZXR1cm4gbWF0Y2hbMl0gPT0gJ2d0J1xuICAgICAqICAgICAgID8gb2JqZWN0W21hdGNoWzFdXSA+IG1hdGNoWzNdXG4gICAgICogICAgICAgOiBvYmplY3RbbWF0Y2hbMV1dIDwgbWF0Y2hbM107XG4gICAgICogICB9O1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIodXNlcnMsICdhZ2VfX2d0MzYnKTtcbiAgICAgKiAvLyA9PiBbeyAndXNlcic6ICdmcmVkJywgJ2FnZSc6IDQwIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FsbGJhY2soZnVuYywgdGhpc0FyZywgZ3VhcmQpIHtcbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChmdW5jLCB0aGlzQXJnLCBndWFyZCkpIHtcbiAgICAgICAgdGhpc0FyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc09iamVjdExpa2UoZnVuYylcbiAgICAgICAgPyBtYXRjaGVzKGZ1bmMpXG4gICAgICAgIDogYmFzZUNhbGxiYWNrKGZ1bmMsIHRoaXNBcmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsaXR5XG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAgICAgKiB2YXIgZ2V0dGVyID0gXy5jb25zdGFudChvYmplY3QpO1xuICAgICAqXG4gICAgICogZ2V0dGVyKCkgPT09IG9iamVjdDtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBwcm92aWRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsaXR5XG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAgICAgKlxuICAgICAqIF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0O1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gYSBnaXZlbiBvYmplY3RcbiAgICAgKiBhbmQgYHNvdXJjZWAsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgZXF1aXZhbGVudCBwcm9wZXJ0eVxuICAgICAqIHZhbHVlcywgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGJvb2xlYW5zLCBgRGF0ZWAgb2JqZWN0cyxcbiAgICAgKiBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBhbmQgc3RyaW5ncy4gT2JqZWN0cyBhcmUgY29tcGFyZWQgYnlcbiAgICAgKiB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRm9yIGNvbXBhcmluZyBhIHNpbmdsZVxuICAgICAqIG93biBvciBpbmhlcml0ZWQgcHJvcGVydHkgdmFsdWUgc2VlIGBfLm1hdGNoZXNQcm9wZXJ0eWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBfLm1hdGNoZXMoeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9KSk7XG4gICAgICogLy8gPT4gW3sgJ3VzZXInOiAnZnJlZCcsICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHJldHVybiBiYXNlTWF0Y2hlcyhiYXNlQ2xvbmUoc291cmNlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY29tcGFyZXMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIGBwYXRoYCBvbiBhIGdpdmVuXG4gICAgICogb2JqZWN0IHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYm9vbGVhbnMsIGBEYXRlYCBvYmplY3RzLFxuICAgICAqIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsIGFuZCBzdHJpbmdzLiBPYmplY3RzIGFyZSBjb21wYXJlZCBieVxuICAgICAqIHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmQodXNlcnMsIF8ubWF0Y2hlc1Byb3BlcnR5KCd1c2VyJywgJ2ZyZWQnKSk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdmcmVkJyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBiYXNlQ2xvbmUoc3JjVmFsdWUsIHRydWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBtZXRob2QgYXQgYHBhdGhgIG9uIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiB7ICdjJzogXy5jb25zdGFudCgyKSB9IH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogeyAnYyc6IF8uY29uc3RhbnQoMSkgfSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoJ2EuYi5jJykpO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqXG4gICAgICogXy5pbnZva2UoXy5zb3J0Qnkob2JqZWN0cywgXy5tZXRob2QoWydhJywgJ2InLCAnYyddKSksICdhLmIuYycpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIHZhciBtZXRob2QgPSByZXN0UGFyYW0oZnVuY3Rpb24ocGF0aCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gaW52b2tlUGF0aChvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tZXRob2RgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICogdGhlIG1ldGhvZCBhdCBhIGdpdmVuIHBhdGggb24gYG9iamVjdGAuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IF8udGltZXMoMywgXy5jb25zdGFudCksXG4gICAgICogICAgIG9iamVjdCA9IHsgJ2EnOiBhcnJheSwgJ2InOiBhcnJheSwgJ2MnOiBhcnJheSB9O1xuICAgICAqXG4gICAgICogXy5tYXAoWydhWzJdJywgJ2NbMF0nXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKi9cbiAgICB2YXIgbWV0aG9kT2YgPSByZXN0UGFyYW0oZnVuY3Rpb24ob2JqZWN0LCBhcmdzKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gaW52b2tlUGF0aChvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYWxsIG93biBlbnVtZXJhYmxlIGZ1bmN0aW9uIHByb3BlcnRpZXMgb2YgYSBzb3VyY2Ugb2JqZWN0IHRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gSWYgYG9iamVjdGAgaXMgYSBmdW5jdGlvbiB0aGVuIG1ldGhvZHMgYXJlIGFkZGVkIHRvXG4gICAgICogaXRzIHByb3RvdHlwZSBhcyB3ZWxsLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVzZSBgXy5ydW5JbkNvbnRleHRgIHRvIGNyZWF0ZSBhIHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHRvXG4gICAgICogYXZvaWQgY29uZmxpY3RzIGNhdXNlZCBieSBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gW29iamVjdD1sb2Rhc2hdIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIGZ1bmN0aW9ucyB0byBhZGQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jaGFpbj10cnVlXSBTcGVjaWZ5IHdoZXRoZXIgdGhlIGZ1bmN0aW9ucyBhZGRlZFxuICAgICAqICBhcmUgY2hhaW5hYmxlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbnxPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHZvd2VscyhzdHJpbmcpIHtcbiAgICAgKiAgIHJldHVybiBfLmZpbHRlcihzdHJpbmcsIGZ1bmN0aW9uKHYpIHtcbiAgICAgKiAgICAgcmV0dXJuIC9bYWVpb3VdL2kudGVzdCh2KTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0pO1xuICAgICAqIF8udm93ZWxzKCdmcmVkJyk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKlxuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICpcbiAgICAgKiBfLm1peGluKHsgJ3Zvd2Vscyc6IHZvd2VscyB9LCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1peGluKG9iamVjdCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgIHZhciBpc09iaiA9IGlzT2JqZWN0KHNvdXJjZSksXG4gICAgICAgICAgICBwcm9wcyA9IGlzT2JqID8ga2V5cyhzb3VyY2UpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbWV0aG9kTmFtZXMgPSAocHJvcHMgJiYgcHJvcHMubGVuZ3RoKSA/IGJhc2VGdW5jdGlvbnMoc291cmNlLCBwcm9wcykgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKCEobWV0aG9kTmFtZXMgPyBtZXRob2ROYW1lcy5sZW5ndGggOiBpc09iaikpIHtcbiAgICAgICAgICBtZXRob2ROYW1lcyA9IGZhbHNlO1xuICAgICAgICAgIG9wdGlvbnMgPSBzb3VyY2U7XG4gICAgICAgICAgc291cmNlID0gb2JqZWN0O1xuICAgICAgICAgIG9iamVjdCA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghbWV0aG9kTmFtZXMpIHtcbiAgICAgICAgbWV0aG9kTmFtZXMgPSBiYXNlRnVuY3Rpb25zKHNvdXJjZSwga2V5cyhzb3VyY2UpKTtcbiAgICAgIH1cbiAgICAgIHZhciBjaGFpbiA9IHRydWUsXG4gICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICBpc0Z1bmMgPSBpc0Z1bmN0aW9uKG9iamVjdCksXG4gICAgICAgICAgbGVuZ3RoID0gbWV0aG9kTmFtZXMubGVuZ3RoO1xuXG4gICAgICBpZiAob3B0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgY2hhaW4gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NoYWluJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGNoYWluID0gb3B0aW9ucy5jaGFpbjtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBtZXRob2ROYW1lID0gbWV0aG9kTmFtZXNbaW5kZXhdLFxuICAgICAgICAgICAgZnVuYyA9IHNvdXJjZVttZXRob2ROYW1lXTtcblxuICAgICAgICBvYmplY3RbbWV0aG9kTmFtZV0gPSBmdW5jO1xuICAgICAgICBpZiAoaXNGdW5jKSB7XG4gICAgICAgICAgb2JqZWN0LnByb3RvdHlwZVttZXRob2ROYW1lXSA9IChmdW5jdGlvbihmdW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBjaGFpbkFsbCA9IHRoaXMuX19jaGFpbl9fO1xuICAgICAgICAgICAgICBpZiAoY2hhaW4gfHwgY2hhaW5BbGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0KHRoaXMuX193cmFwcGVkX18pLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zID0gcmVzdWx0Ll9fYWN0aW9uc19fID0gYXJyYXlDb3B5KHRoaXMuX19hY3Rpb25zX18pO1xuXG4gICAgICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHsgJ2Z1bmMnOiBmdW5jLCAnYXJncyc6IGFyZ3VtZW50cywgJ3RoaXNBcmcnOiBvYmplY3QgfSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IGNoYWluQWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkob2JqZWN0LCBhcnJheVB1c2goW3RoaXMudmFsdWUoKV0sIGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KGZ1bmMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnRzIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzIHByZXZpb3VzIHZhbHVlIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvXG4gICAgICogdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgbG9kYXNoID0gXy5ub0NvbmZsaWN0KCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9Db25mbGljdCgpIHtcbiAgICAgIHJvb3QuXyA9IG9sZERhc2g7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIG5vLW9wZXJhdGlvbiBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHVuZGVmaW5lZGAgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAgKiBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAndXNlcic6ICdmcmVkJyB9O1xuICAgICAqXG4gICAgICogXy5ub29wKG9iamVjdCkgPT09IHVuZGVmaW5lZDtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9vcCgpIHtcbiAgICAgIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgYXQgYHBhdGhgIG9uIGFcbiAgICAgKiBnaXZlbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiB7ICdjJzogMiB9IH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogeyAnYyc6IDEgfSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iLmMnKSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICpcbiAgICAgKiBfLnBsdWNrKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InLCAnYyddKSksICdhLmIuYycpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgICAgIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eShwYXRoKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnByb3BlcnR5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJuc1xuICAgICAqIHRoZSBwcm9wZXJ0eSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb24gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzAsIDEsIDJdLFxuICAgICAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5T2Yob2JqZWN0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHRvUGF0aChwYXRoKSwgcGF0aCArICcnKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIChwb3NpdGl2ZSBhbmQvb3IgbmVnYXRpdmUpIHByb2dyZXNzaW5nIGZyb21cbiAgICAgKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXNcbiAgICAgKiBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLiBJZiBgZW5kYCBpcyBsZXNzIHRoYW4gYHN0YXJ0YFxuICAgICAqIGEgemVyby1sZW5ndGggcmFuZ2UgaXMgY3JlYXRlZCB1bmxlc3MgYSBuZWdhdGl2ZSBgc3RlcGAgaXMgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MV0gVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgbnVtYmVycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5nZSg0KTtcbiAgICAgKiAvLyA9PiBbMCwgMSwgMiwgM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAgICAgKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgxLCA0LCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByYW5nZShzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgICBpZiAoc3RlcCAmJiBpc0l0ZXJhdGVlQ2FsbChzdGFydCwgZW5kLCBzdGVwKSkge1xuICAgICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSArc3RhcnQgfHwgMDtcbiAgICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogKCtzdGVwIHx8IDApO1xuXG4gICAgICBpZiAoZW5kID09IG51bGwpIHtcbiAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuZCA9ICtlbmQgfHwgMDtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBgQXJyYXkobGVuZ3RoKWAgc28gZW5naW5lcyBsaWtlIENoYWtyYSBhbmQgVjggYXZvaWQgc2xvd2VyIG1vZGVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8veW91dHUuYmUvWEFxSXBHVThaWmsjdD0xN20yNXMgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChuYXRpdmVDZWlsKChlbmQgLSBzdGFydCkgLyAoc3RlcCB8fCAxKSksIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBzdGFydDtcbiAgICAgICAgc3RhcnQgKz0gc3RlcDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgaXRlcmF0ZWUgZnVuY3Rpb24gYG5gIHRpbWVzLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHNcbiAgICAgKiBvZiBlYWNoIGludm9jYXRpb24uIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoXG4gICAgICogb25lIGFyZ3VtZW50OyAoaW5kZXgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGRpY2VSb2xscyA9IF8udGltZXMoMywgXy5wYXJ0aWFsKF8ucmFuZG9tLCAxLCA2LCBmYWxzZSkpO1xuICAgICAqIC8vID0+IFszLCA2LCA0XVxuICAgICAqXG4gICAgICogXy50aW1lcygzLCBmdW5jdGlvbihuKSB7XG4gICAgICogICBtYWdlLmNhc3RTcGVsbChuKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBpbnZva2VzIGBtYWdlLmNhc3RTcGVsbChuKWAgdGhyZWUgdGltZXMgd2l0aCBgbmAgb2YgYDBgLCBgMWAsIGFuZCBgMmBcbiAgICAgKlxuICAgICAqIF8udGltZXMoMywgZnVuY3Rpb24obikge1xuICAgICAqICAgdGhpcy5jYXN0KG4pO1xuICAgICAqIH0sIG1hZ2UpO1xuICAgICAqIC8vID0+IGFsc28gaW52b2tlcyBgbWFnZS5jYXN0U3BlbGwobilgIHRocmVlIHRpbWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXMobiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgIG4gPSBuYXRpdmVGbG9vcihuKTtcblxuICAgICAgLy8gRXhpdCBlYXJseSB0byBhdm9pZCBhIEpTQyBKSVQgYnVnIGluIFNhZmFyaSA4XG4gICAgICAvLyB3aGVyZSBgQXJyYXkoMClgIGlzIHRyZWF0ZWQgYXMgYEFycmF5KDEpYC5cbiAgICAgIGlmIChuIDwgMSB8fCAhbmF0aXZlSXNGaW5pdGUobikpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobmF0aXZlTWluKG4sIE1BWF9BUlJBWV9MRU5HVEgpKTtcblxuICAgICAgaXRlcmF0ZWUgPSBiaW5kQ2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDEpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICAgIGlmIChpbmRleCA8IE1BWF9BUlJBWV9MRU5HVEgpIHtcbiAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZXJhdGVlKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUgSUQuIElmIGBwcmVmaXhgIGlzIHByb3ZpZGVkIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsaXR5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXhdIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICAgICAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAgICAgKlxuICAgICAqIF8udW5pcXVlSWQoKTtcbiAgICAgKiAvLyA9PiAnMTA1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICAgICAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gICAgICByZXR1cm4gYmFzZVRvU3RyaW5nKHByZWZpeCkgKyBpZDtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXVnZW5kIFRoZSBmaXJzdCBudW1iZXIgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhZGRlbmQgVGhlIHNlY29uZCBudW1iZXIgdG8gYWRkLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5hZGQoNiwgNCk7XG4gICAgICogLy8gPT4gMTBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGQoYXVnZW5kLCBhZGRlbmQpIHtcbiAgICAgIHJldHVybiAoK2F1Z2VuZCB8fCAwKSArICgrYWRkZW5kIHx8IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgYG5gIHJvdW5kZWQgdXAgdG8gYHByZWNpc2lvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgdG8gcm91bmQgdXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCB1cCB0by5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIHVwIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jZWlsKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICpcbiAgICAgKiBfLmNlaWwoNi4wMDQsIDIpO1xuICAgICAqIC8vID0+IDYuMDFcbiAgICAgKlxuICAgICAqIF8uY2VpbCg2MDQwLCAtMik7XG4gICAgICogLy8gPT4gNjEwMFxuICAgICAqL1xuICAgIHZhciBjZWlsID0gY3JlYXRlUm91bmQoJ2NlaWwnKTtcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgYG5gIHJvdW5kZWQgZG93biB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciB0byByb3VuZCBkb3duLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgZG93biB0by5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIGRvd24gbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsb29yKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLmZsb29yKDAuMDQ2LCAyKTtcbiAgICAgKiAvLyA9PiAwLjA0XG4gICAgICpcbiAgICAgKiBfLmZsb29yKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MDAwXG4gICAgICovXG4gICAgdmFyIGZsb29yID0gY3JlYXRlUm91bmQoJ2Zsb29yJyk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBjb2xsZWN0aW9uYC4gSWYgYGNvbGxlY3Rpb25gIGlzIGVtcHR5IG9yIGZhbHNleVxuICAgICAqIGAtSW5maW5pdHlgIGlzIHJldHVybmVkLiBJZiBhbiBpdGVyYXRlZSBmdW5jdGlvbiBpcyBwcm92aWRlZCBpdCBpcyBpbnZva2VkXG4gICAgICogZm9yIGVhY2ggdmFsdWUgaW4gYGNvbGxlY3Rpb25gIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2ggdGhlIHZhbHVlXG4gICAgICogaXMgcmFua2VkLiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWF4KFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gOFxuICAgICAqXG4gICAgICogXy5tYXgoW10pO1xuICAgICAqIC8vID0+IC1JbmZpbml0eVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXgodXNlcnMsIGZ1bmN0aW9uKGNocikge1xuICAgICAqICAgcmV0dXJuIGNoci5hZ2U7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdmcmVkJywgJ2FnZSc6IDQwIH1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5tYXgodXNlcnMsICdhZ2UnKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfVxuICAgICAqL1xuICAgIHZhciBtYXggPSBjcmVhdGVFeHRyZW11bShndCwgTkVHQVRJVkVfSU5GSU5JVFkpO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbWluaW11bSB2YWx1ZSBvZiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBlbXB0eSBvciBmYWxzZXlcbiAgICAgKiBgSW5maW5pdHlgIGlzIHJldHVybmVkLiBJZiBhbiBpdGVyYXRlZSBmdW5jdGlvbiBpcyBwcm92aWRlZCBpdCBpcyBpbnZva2VkXG4gICAgICogZm9yIGVhY2ggdmFsdWUgaW4gYGNvbGxlY3Rpb25gIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2ggdGhlIHZhbHVlXG4gICAgICogaXMgcmFua2VkLiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWluKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogXy5taW4oW10pO1xuICAgICAqIC8vID0+IEluZmluaXR5XG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLm1pbih1c2VycywgZnVuY3Rpb24oY2hyKSB7XG4gICAgICogICByZXR1cm4gY2hyLmFnZTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ubWluKHVzZXJzLCAnYWdlJyk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqL1xuICAgIHZhciBtaW4gPSBjcmVhdGVFeHRyZW11bShsdCwgUE9TSVRJVkVfSU5GSU5JVFkpO1xuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyBgbmAgcm91bmRlZCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciB0byByb3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2LCAyKTtcbiAgICAgKiAvLyA9PiA0LjAxXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MTAwXG4gICAgICovXG4gICAgdmFyIHJvdW5kID0gY3JlYXRlUm91bmQoJ3JvdW5kJyk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBpbiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN1bShbNCwgNl0pO1xuICAgICAqIC8vID0+IDEwXG4gICAgICpcbiAgICAgKiBfLnN1bSh7ICdhJzogNCwgJ2InOiA2IH0pO1xuICAgICAqIC8vID0+IDEwXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ24nOiA0IH0sXG4gICAgICogICB7ICduJzogNiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uc3VtKG9iamVjdHMsIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAqICAgcmV0dXJuIG9iamVjdC5uO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IDEwXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uc3VtKG9iamVjdHMsICduJyk7XG4gICAgICogLy8gPT4gMTBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdW0oY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgIGlmICh0aGlzQXJnICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpO1xuICAgICAgcmV0dXJuIGl0ZXJhdGVlLmxlbmd0aCA9PSAxXG4gICAgICAgID8gYXJyYXlTdW0oaXNBcnJheShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB0b0l0ZXJhYmxlKGNvbGxlY3Rpb24pLCBpdGVyYXRlZSlcbiAgICAgICAgOiBiYXNlU3VtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG4gICAgbG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xuXG4gICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbiAgICBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXp5V3JhcHBlcjtcblxuICAgIC8vIEFkZCBmdW5jdGlvbnMgdG8gdGhlIGBNYXBgIGNhY2hlLlxuICAgIE1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBEZWxldGU7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcEdldDtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwSGFzO1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBTZXQ7XG5cbiAgICAvLyBBZGQgZnVuY3Rpb25zIHRvIHRoZSBgU2V0YCBjYWNoZS5cbiAgICBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IGNhY2hlUHVzaDtcblxuICAgIC8vIEFzc2lnbiBjYWNoZSB0byBgXy5tZW1vaXplYC5cbiAgICBtZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbiAgICAvLyBBZGQgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHdyYXBwZWQgdmFsdWVzIHdoZW4gY2hhaW5pbmcuXG4gICAgbG9kYXNoLmFmdGVyID0gYWZ0ZXI7XG4gICAgbG9kYXNoLmFyeSA9IGFyeTtcbiAgICBsb2Rhc2guYXNzaWduID0gYXNzaWduO1xuICAgIGxvZGFzaC5hdCA9IGF0O1xuICAgIGxvZGFzaC5iZWZvcmUgPSBiZWZvcmU7XG4gICAgbG9kYXNoLmJpbmQgPSBiaW5kO1xuICAgIGxvZGFzaC5iaW5kQWxsID0gYmluZEFsbDtcbiAgICBsb2Rhc2guYmluZEtleSA9IGJpbmRLZXk7XG4gICAgbG9kYXNoLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgbG9kYXNoLmNoYWluID0gY2hhaW47XG4gICAgbG9kYXNoLmNodW5rID0gY2h1bms7XG4gICAgbG9kYXNoLmNvbXBhY3QgPSBjb21wYWN0O1xuICAgIGxvZGFzaC5jb25zdGFudCA9IGNvbnN0YW50O1xuICAgIGxvZGFzaC5jb3VudEJ5ID0gY291bnRCeTtcbiAgICBsb2Rhc2guY3JlYXRlID0gY3JlYXRlO1xuICAgIGxvZGFzaC5jdXJyeSA9IGN1cnJ5O1xuICAgIGxvZGFzaC5jdXJyeVJpZ2h0ID0gY3VycnlSaWdodDtcbiAgICBsb2Rhc2guZGVib3VuY2UgPSBkZWJvdW5jZTtcbiAgICBsb2Rhc2guZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBsb2Rhc2guZGVmYXVsdHNEZWVwID0gZGVmYXVsdHNEZWVwO1xuICAgIGxvZGFzaC5kZWZlciA9IGRlZmVyO1xuICAgIGxvZGFzaC5kZWxheSA9IGRlbGF5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlID0gZGlmZmVyZW5jZTtcbiAgICBsb2Rhc2guZHJvcCA9IGRyb3A7XG4gICAgbG9kYXNoLmRyb3BSaWdodCA9IGRyb3BSaWdodDtcbiAgICBsb2Rhc2guZHJvcFJpZ2h0V2hpbGUgPSBkcm9wUmlnaHRXaGlsZTtcbiAgICBsb2Rhc2guZHJvcFdoaWxlID0gZHJvcFdoaWxlO1xuICAgIGxvZGFzaC5maWxsID0gZmlsbDtcbiAgICBsb2Rhc2guZmlsdGVyID0gZmlsdGVyO1xuICAgIGxvZGFzaC5mbGF0dGVuID0gZmxhdHRlbjtcbiAgICBsb2Rhc2guZmxhdHRlbkRlZXAgPSBmbGF0dGVuRGVlcDtcbiAgICBsb2Rhc2guZmxvdyA9IGZsb3c7XG4gICAgbG9kYXNoLmZsb3dSaWdodCA9IGZsb3dSaWdodDtcbiAgICBsb2Rhc2guZm9yRWFjaCA9IGZvckVhY2g7XG4gICAgbG9kYXNoLmZvckVhY2hSaWdodCA9IGZvckVhY2hSaWdodDtcbiAgICBsb2Rhc2guZm9ySW4gPSBmb3JJbjtcbiAgICBsb2Rhc2guZm9ySW5SaWdodCA9IGZvckluUmlnaHQ7XG4gICAgbG9kYXNoLmZvck93biA9IGZvck93bjtcbiAgICBsb2Rhc2guZm9yT3duUmlnaHQgPSBmb3JPd25SaWdodDtcbiAgICBsb2Rhc2guZnVuY3Rpb25zID0gZnVuY3Rpb25zO1xuICAgIGxvZGFzaC5ncm91cEJ5ID0gZ3JvdXBCeTtcbiAgICBsb2Rhc2guaW5kZXhCeSA9IGluZGV4Qnk7XG4gICAgbG9kYXNoLmluaXRpYWwgPSBpbml0aWFsO1xuICAgIGxvZGFzaC5pbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb247XG4gICAgbG9kYXNoLmludmVydCA9IGludmVydDtcbiAgICBsb2Rhc2guaW52b2tlID0gaW52b2tlO1xuICAgIGxvZGFzaC5rZXlzID0ga2V5cztcbiAgICBsb2Rhc2gua2V5c0luID0ga2V5c0luO1xuICAgIGxvZGFzaC5tYXAgPSBtYXA7XG4gICAgbG9kYXNoLm1hcEtleXMgPSBtYXBLZXlzO1xuICAgIGxvZGFzaC5tYXBWYWx1ZXMgPSBtYXBWYWx1ZXM7XG4gICAgbG9kYXNoLm1hdGNoZXMgPSBtYXRjaGVzO1xuICAgIGxvZGFzaC5tYXRjaGVzUHJvcGVydHkgPSBtYXRjaGVzUHJvcGVydHk7XG4gICAgbG9kYXNoLm1lbW9pemUgPSBtZW1vaXplO1xuICAgIGxvZGFzaC5tZXJnZSA9IG1lcmdlO1xuICAgIGxvZGFzaC5tZXRob2QgPSBtZXRob2Q7XG4gICAgbG9kYXNoLm1ldGhvZE9mID0gbWV0aG9kT2Y7XG4gICAgbG9kYXNoLm1peGluID0gbWl4aW47XG4gICAgbG9kYXNoLm1vZEFyZ3MgPSBtb2RBcmdzO1xuICAgIGxvZGFzaC5uZWdhdGUgPSBuZWdhdGU7XG4gICAgbG9kYXNoLm9taXQgPSBvbWl0O1xuICAgIGxvZGFzaC5vbmNlID0gb25jZTtcbiAgICBsb2Rhc2gucGFpcnMgPSBwYWlycztcbiAgICBsb2Rhc2gucGFydGlhbCA9IHBhcnRpYWw7XG4gICAgbG9kYXNoLnBhcnRpYWxSaWdodCA9IHBhcnRpYWxSaWdodDtcbiAgICBsb2Rhc2gucGFydGl0aW9uID0gcGFydGl0aW9uO1xuICAgIGxvZGFzaC5waWNrID0gcGljaztcbiAgICBsb2Rhc2gucGx1Y2sgPSBwbHVjaztcbiAgICBsb2Rhc2gucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICBsb2Rhc2gucHJvcGVydHlPZiA9IHByb3BlcnR5T2Y7XG4gICAgbG9kYXNoLnB1bGwgPSBwdWxsO1xuICAgIGxvZGFzaC5wdWxsQXQgPSBwdWxsQXQ7XG4gICAgbG9kYXNoLnJhbmdlID0gcmFuZ2U7XG4gICAgbG9kYXNoLnJlYXJnID0gcmVhcmc7XG4gICAgbG9kYXNoLnJlamVjdCA9IHJlamVjdDtcbiAgICBsb2Rhc2gucmVtb3ZlID0gcmVtb3ZlO1xuICAgIGxvZGFzaC5yZXN0ID0gcmVzdDtcbiAgICBsb2Rhc2gucmVzdFBhcmFtID0gcmVzdFBhcmFtO1xuICAgIGxvZGFzaC5zZXQgPSBzZXQ7XG4gICAgbG9kYXNoLnNodWZmbGUgPSBzaHVmZmxlO1xuICAgIGxvZGFzaC5zbGljZSA9IHNsaWNlO1xuICAgIGxvZGFzaC5zb3J0QnkgPSBzb3J0Qnk7XG4gICAgbG9kYXNoLnNvcnRCeUFsbCA9IHNvcnRCeUFsbDtcbiAgICBsb2Rhc2guc29ydEJ5T3JkZXIgPSBzb3J0QnlPcmRlcjtcbiAgICBsb2Rhc2guc3ByZWFkID0gc3ByZWFkO1xuICAgIGxvZGFzaC50YWtlID0gdGFrZTtcbiAgICBsb2Rhc2gudGFrZVJpZ2h0ID0gdGFrZVJpZ2h0O1xuICAgIGxvZGFzaC50YWtlUmlnaHRXaGlsZSA9IHRha2VSaWdodFdoaWxlO1xuICAgIGxvZGFzaC50YWtlV2hpbGUgPSB0YWtlV2hpbGU7XG4gICAgbG9kYXNoLnRhcCA9IHRhcDtcbiAgICBsb2Rhc2gudGhyb3R0bGUgPSB0aHJvdHRsZTtcbiAgICBsb2Rhc2gudGhydSA9IHRocnU7XG4gICAgbG9kYXNoLnRpbWVzID0gdGltZXM7XG4gICAgbG9kYXNoLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIGxvZGFzaC50b1BsYWluT2JqZWN0ID0gdG9QbGFpbk9iamVjdDtcbiAgICBsb2Rhc2gudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGxvZGFzaC51bmlvbiA9IHVuaW9uO1xuICAgIGxvZGFzaC51bmlxID0gdW5pcTtcbiAgICBsb2Rhc2gudW56aXAgPSB1bnppcDtcbiAgICBsb2Rhc2gudW56aXBXaXRoID0gdW56aXBXaXRoO1xuICAgIGxvZGFzaC52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgbG9kYXNoLnZhbHVlc0luID0gdmFsdWVzSW47XG4gICAgbG9kYXNoLndoZXJlID0gd2hlcmU7XG4gICAgbG9kYXNoLndpdGhvdXQgPSB3aXRob3V0O1xuICAgIGxvZGFzaC53cmFwID0gd3JhcDtcbiAgICBsb2Rhc2gueG9yID0geG9yO1xuICAgIGxvZGFzaC56aXAgPSB6aXA7XG4gICAgbG9kYXNoLnppcE9iamVjdCA9IHppcE9iamVjdDtcbiAgICBsb2Rhc2guemlwV2l0aCA9IHppcFdpdGg7XG5cbiAgICAvLyBBZGQgYWxpYXNlcy5cbiAgICBsb2Rhc2guYmFja2Zsb3cgPSBmbG93UmlnaHQ7XG4gICAgbG9kYXNoLmNvbGxlY3QgPSBtYXA7XG4gICAgbG9kYXNoLmNvbXBvc2UgPSBmbG93UmlnaHQ7XG4gICAgbG9kYXNoLmVhY2ggPSBmb3JFYWNoO1xuICAgIGxvZGFzaC5lYWNoUmlnaHQgPSBmb3JFYWNoUmlnaHQ7XG4gICAgbG9kYXNoLmV4dGVuZCA9IGFzc2lnbjtcbiAgICBsb2Rhc2guaXRlcmF0ZWUgPSBjYWxsYmFjaztcbiAgICBsb2Rhc2gubWV0aG9kcyA9IGZ1bmN0aW9ucztcbiAgICBsb2Rhc2gub2JqZWN0ID0gemlwT2JqZWN0O1xuICAgIGxvZGFzaC5zZWxlY3QgPSBmaWx0ZXI7XG4gICAgbG9kYXNoLnRhaWwgPSByZXN0O1xuICAgIGxvZGFzaC51bmlxdWUgPSB1bmlxO1xuXG4gICAgLy8gQWRkIGZ1bmN0aW9ucyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgbWl4aW4obG9kYXNoLCBsb2Rhc2gpO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLy8gQWRkIGZ1bmN0aW9ucyB0aGF0IHJldHVybiB1bndyYXBwZWQgdmFsdWVzIHdoZW4gY2hhaW5pbmcuXG4gICAgbG9kYXNoLmFkZCA9IGFkZDtcbiAgICBsb2Rhc2guYXR0ZW1wdCA9IGF0dGVtcHQ7XG4gICAgbG9kYXNoLmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbiAgICBsb2Rhc2guY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemU7XG4gICAgbG9kYXNoLmNlaWwgPSBjZWlsO1xuICAgIGxvZGFzaC5jbG9uZSA9IGNsb25lO1xuICAgIGxvZGFzaC5jbG9uZURlZXAgPSBjbG9uZURlZXA7XG4gICAgbG9kYXNoLmRlYnVyciA9IGRlYnVycjtcbiAgICBsb2Rhc2guZW5kc1dpdGggPSBlbmRzV2l0aDtcbiAgICBsb2Rhc2guZXNjYXBlID0gZXNjYXBlO1xuICAgIGxvZGFzaC5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG4gICAgbG9kYXNoLmV2ZXJ5ID0gZXZlcnk7XG4gICAgbG9kYXNoLmZpbmQgPSBmaW5kO1xuICAgIGxvZGFzaC5maW5kSW5kZXggPSBmaW5kSW5kZXg7XG4gICAgbG9kYXNoLmZpbmRLZXkgPSBmaW5kS2V5O1xuICAgIGxvZGFzaC5maW5kTGFzdCA9IGZpbmRMYXN0O1xuICAgIGxvZGFzaC5maW5kTGFzdEluZGV4ID0gZmluZExhc3RJbmRleDtcbiAgICBsb2Rhc2guZmluZExhc3RLZXkgPSBmaW5kTGFzdEtleTtcbiAgICBsb2Rhc2guZmluZFdoZXJlID0gZmluZFdoZXJlO1xuICAgIGxvZGFzaC5maXJzdCA9IGZpcnN0O1xuICAgIGxvZGFzaC5mbG9vciA9IGZsb29yO1xuICAgIGxvZGFzaC5nZXQgPSBnZXQ7XG4gICAgbG9kYXNoLmd0ID0gZ3Q7XG4gICAgbG9kYXNoLmd0ZSA9IGd0ZTtcbiAgICBsb2Rhc2guaGFzID0gaGFzO1xuICAgIGxvZGFzaC5pZGVudGl0eSA9IGlkZW50aXR5O1xuICAgIGxvZGFzaC5pbmNsdWRlcyA9IGluY2x1ZGVzO1xuICAgIGxvZGFzaC5pbmRleE9mID0gaW5kZXhPZjtcbiAgICBsb2Rhc2guaW5SYW5nZSA9IGluUmFuZ2U7XG4gICAgbG9kYXNoLmlzQXJndW1lbnRzID0gaXNBcmd1bWVudHM7XG4gICAgbG9kYXNoLmlzQXJyYXkgPSBpc0FycmF5O1xuICAgIGxvZGFzaC5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG4gICAgbG9kYXNoLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBsb2Rhc2guaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuICAgIGxvZGFzaC5pc0VtcHR5ID0gaXNFbXB0eTtcbiAgICBsb2Rhc2guaXNFcXVhbCA9IGlzRXF1YWw7XG4gICAgbG9kYXNoLmlzRXJyb3IgPSBpc0Vycm9yO1xuICAgIGxvZGFzaC5pc0Zpbml0ZSA9IGlzRmluaXRlO1xuICAgIGxvZGFzaC5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbiAgICBsb2Rhc2guaXNNYXRjaCA9IGlzTWF0Y2g7XG4gICAgbG9kYXNoLmlzTmFOID0gaXNOYU47XG4gICAgbG9kYXNoLmlzTmF0aXZlID0gaXNOYXRpdmU7XG4gICAgbG9kYXNoLmlzTnVsbCA9IGlzTnVsbDtcbiAgICBsb2Rhc2guaXNOdW1iZXIgPSBpc051bWJlcjtcbiAgICBsb2Rhc2guaXNPYmplY3QgPSBpc09iamVjdDtcbiAgICBsb2Rhc2guaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4gICAgbG9kYXNoLmlzUmVnRXhwID0gaXNSZWdFeHA7XG4gICAgbG9kYXNoLmlzU3RyaW5nID0gaXNTdHJpbmc7XG4gICAgbG9kYXNoLmlzVHlwZWRBcnJheSA9IGlzVHlwZWRBcnJheTtcbiAgICBsb2Rhc2guaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcbiAgICBsb2Rhc2gua2ViYWJDYXNlID0ga2ViYWJDYXNlO1xuICAgIGxvZGFzaC5sYXN0ID0gbGFzdDtcbiAgICBsb2Rhc2gubGFzdEluZGV4T2YgPSBsYXN0SW5kZXhPZjtcbiAgICBsb2Rhc2gubHQgPSBsdDtcbiAgICBsb2Rhc2gubHRlID0gbHRlO1xuICAgIGxvZGFzaC5tYXggPSBtYXg7XG4gICAgbG9kYXNoLm1pbiA9IG1pbjtcbiAgICBsb2Rhc2gubm9Db25mbGljdCA9IG5vQ29uZmxpY3Q7XG4gICAgbG9kYXNoLm5vb3AgPSBub29wO1xuICAgIGxvZGFzaC5ub3cgPSBub3c7XG4gICAgbG9kYXNoLnBhZCA9IHBhZDtcbiAgICBsb2Rhc2gucGFkTGVmdCA9IHBhZExlZnQ7XG4gICAgbG9kYXNoLnBhZFJpZ2h0ID0gcGFkUmlnaHQ7XG4gICAgbG9kYXNoLnBhcnNlSW50ID0gcGFyc2VJbnQ7XG4gICAgbG9kYXNoLnJhbmRvbSA9IHJhbmRvbTtcbiAgICBsb2Rhc2gucmVkdWNlID0gcmVkdWNlO1xuICAgIGxvZGFzaC5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGxvZGFzaC5yZXBlYXQgPSByZXBlYXQ7XG4gICAgbG9kYXNoLnJlc3VsdCA9IHJlc3VsdDtcbiAgICBsb2Rhc2gucm91bmQgPSByb3VuZDtcbiAgICBsb2Rhc2gucnVuSW5Db250ZXh0ID0gcnVuSW5Db250ZXh0O1xuICAgIGxvZGFzaC5zaXplID0gc2l6ZTtcbiAgICBsb2Rhc2guc25ha2VDYXNlID0gc25ha2VDYXNlO1xuICAgIGxvZGFzaC5zb21lID0gc29tZTtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXggPSBzb3J0ZWRJbmRleDtcbiAgICBsb2Rhc2guc29ydGVkTGFzdEluZGV4ID0gc29ydGVkTGFzdEluZGV4O1xuICAgIGxvZGFzaC5zdGFydENhc2UgPSBzdGFydENhc2U7XG4gICAgbG9kYXNoLnN0YXJ0c1dpdGggPSBzdGFydHNXaXRoO1xuICAgIGxvZGFzaC5zdW0gPSBzdW07XG4gICAgbG9kYXNoLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgbG9kYXNoLnRyaW0gPSB0cmltO1xuICAgIGxvZGFzaC50cmltTGVmdCA9IHRyaW1MZWZ0O1xuICAgIGxvZGFzaC50cmltUmlnaHQgPSB0cmltUmlnaHQ7XG4gICAgbG9kYXNoLnRydW5jID0gdHJ1bmM7XG4gICAgbG9kYXNoLnVuZXNjYXBlID0gdW5lc2NhcGU7XG4gICAgbG9kYXNoLnVuaXF1ZUlkID0gdW5pcXVlSWQ7XG4gICAgbG9kYXNoLndvcmRzID0gd29yZHM7XG5cbiAgICAvLyBBZGQgYWxpYXNlcy5cbiAgICBsb2Rhc2guYWxsID0gZXZlcnk7XG4gICAgbG9kYXNoLmFueSA9IHNvbWU7XG4gICAgbG9kYXNoLmNvbnRhaW5zID0gaW5jbHVkZXM7XG4gICAgbG9kYXNoLmVxID0gaXNFcXVhbDtcbiAgICBsb2Rhc2guZGV0ZWN0ID0gZmluZDtcbiAgICBsb2Rhc2guZm9sZGwgPSByZWR1Y2U7XG4gICAgbG9kYXNoLmZvbGRyID0gcmVkdWNlUmlnaHQ7XG4gICAgbG9kYXNoLmhlYWQgPSBmaXJzdDtcbiAgICBsb2Rhc2guaW5jbHVkZSA9IGluY2x1ZGVzO1xuICAgIGxvZGFzaC5pbmplY3QgPSByZWR1Y2U7XG5cbiAgICBtaXhpbihsb2Rhc2gsIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzb3VyY2UgPSB7fTtcbiAgICAgIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmICghbG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXSkge1xuICAgICAgICAgIHNvdXJjZVttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9KCkpLCBmYWxzZSk7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvLyBBZGQgZnVuY3Rpb25zIGNhcGFibGUgb2YgcmV0dXJuaW5nIHdyYXBwZWQgYW5kIHVud3JhcHBlZCB2YWx1ZXMgd2hlbiBjaGFpbmluZy5cbiAgICBsb2Rhc2guc2FtcGxlID0gc2FtcGxlO1xuXG4gICAgbG9kYXNoLnByb3RvdHlwZS5zYW1wbGUgPSBmdW5jdGlvbihuKSB7XG4gICAgICBpZiAoIXRoaXMuX19jaGFpbl9fICYmIG4gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc2FtcGxlKHRoaXMudmFsdWUoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBzYW1wbGUodmFsdWUsIG4pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIFRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIGxvZGFzaC5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIC8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbiAgICBhcnJheUVhY2goWydiaW5kJywgJ2JpbmRLZXknLCAnY3VycnknLCAnY3VycnlSaWdodCcsICdwYXJ0aWFsJywgJ3BhcnRpYWxSaWdodCddLCBmdW5jdGlvbihtZXRob2ROYW1lKSB7XG4gICAgICBsb2Rhc2hbbWV0aG9kTmFtZV0ucGxhY2Vob2xkZXIgPSBsb2Rhc2g7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5kcm9wYCBhbmQgYF8udGFrZWAgdmFyaWFudHMuXG4gICAgYXJyYXlFYWNoKFsnZHJvcCcsICd0YWtlJ10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBmaWx0ZXJlZCA9IHRoaXMuX19maWx0ZXJlZF9fO1xuICAgICAgICBpZiAoZmlsdGVyZWQgJiYgIWluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBuID0gbiA9PSBudWxsID8gMSA6IG5hdGl2ZU1heChuYXRpdmVGbG9vcihuKSB8fCAwLCAwKTtcblxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICBpZiAoZmlsdGVyZWQpIHtcbiAgICAgICAgICByZXN1bHQuX190YWtlQ291bnRfXyA9IG5hdGl2ZU1pbihyZXN1bHQuX190YWtlQ291bnRfXywgbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0Ll9fdmlld3NfXy5wdXNoKHsgJ3NpemUnOiBuLCAndHlwZSc6IG1ldGhvZE5hbWUgKyAocmVzdWx0Ll9fZGlyX18gPCAwID8gJ1JpZ2h0JyA6ICcnKSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUgKyAnUmlnaHQnXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRoYXQgYWNjZXB0IGFuIGBpdGVyYXRlZWAgdmFsdWUuXG4gICAgYXJyYXlFYWNoKFsnZmlsdGVyJywgJ21hcCcsICd0YWtlV2hpbGUnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlID0gaW5kZXggKyAxLFxuICAgICAgICAgIGlzRmlsdGVyID0gdHlwZSAhPSBMQVpZX01BUF9GTEFHO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihpdGVyYXRlZSwgdGhpc0FyZykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuX19pdGVyYXRlZXNfXy5wdXNoKHsgJ2l0ZXJhdGVlJzogZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDEpLCAndHlwZSc6IHR5cGUgfSk7XG4gICAgICAgIHJlc3VsdC5fX2ZpbHRlcmVkX18gPSByZXN1bHQuX19maWx0ZXJlZF9fIHx8IGlzRmlsdGVyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmZpcnN0YCBhbmQgYF8ubGFzdGAuXG4gICAgYXJyYXlFYWNoKFsnZmlyc3QnLCAnbGFzdCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIHRha2VOYW1lID0gJ3Rha2UnICsgKGluZGV4ID8gJ1JpZ2h0JyA6ICcnKTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3Rha2VOYW1lXSgxKS52YWx1ZSgpWzBdO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmluaXRpYWxgIGFuZCBgXy5yZXN0YC5cbiAgICBhcnJheUVhY2goWydpbml0aWFsJywgJ3Jlc3QnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciBkcm9wTmFtZSA9ICdkcm9wJyArIChpbmRleCA/ICcnIDogJ1JpZ2h0Jyk7XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18gPyBuZXcgTGF6eVdyYXBwZXIodGhpcykgOiB0aGlzW2Ryb3BOYW1lXSgxKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5wbHVja2AgYW5kIGBfLndoZXJlYC5cbiAgICBhcnJheUVhY2goWydwbHVjaycsICd3aGVyZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIG9wZXJhdGlvbk5hbWUgPSBpbmRleCA/ICdmaWx0ZXInIDogJ21hcCcsXG4gICAgICAgICAgY3JlYXRlQ2FsbGJhY2sgPSBpbmRleCA/IGJhc2VNYXRjaGVzIDogcHJvcGVydHk7XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzW29wZXJhdGlvbk5hbWVdKGNyZWF0ZUNhbGxiYWNrKHZhbHVlKSk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbXBhY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcihpZGVudGl0eSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMSk7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gc3RhcnQgPT0gbnVsbCA/IDAgOiAoK3N0YXJ0IHx8IDApO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcztcbiAgICAgIGlmIChyZXN1bHQuX19maWx0ZXJlZF9fICYmIChzdGFydCA+IDAgfHwgZW5kIDwgMCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcihyZXN1bHQpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQudGFrZVJpZ2h0KC1zdGFydCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5kcm9wKHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbmQgPSAoK2VuZCB8fCAwKTtcbiAgICAgICAgcmVzdWx0ID0gZW5kIDwgMCA/IHJlc3VsdC5kcm9wUmlnaHQoLWVuZCkgOiByZXN1bHQudGFrZShlbmQgLSBzdGFydCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGUgPSBmdW5jdGlvbihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUocHJlZGljYXRlLCB0aGlzQXJnKS5yZXZlcnNlKCk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWtlKFBPU0lUSVZFX0lORklOSVRZKTtcbiAgICB9O1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBjaGVja0l0ZXJhdGVlID0gL14oPzpmaWx0ZXJ8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KG1ldGhvZE5hbWUpLFxuICAgICAgICAgIHJldFVud3JhcHBlZCA9IC9eKD86Zmlyc3R8bGFzdCkkLy50ZXN0KG1ldGhvZE5hbWUpLFxuICAgICAgICAgIGxvZGFzaEZ1bmMgPSBsb2Rhc2hbcmV0VW53cmFwcGVkID8gKCd0YWtlJyArIChtZXRob2ROYW1lID09ICdsYXN0JyA/ICdSaWdodCcgOiAnJykpIDogbWV0aG9kTmFtZV07XG5cbiAgICAgIGlmICghbG9kYXNoRnVuYykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gcmV0VW53cmFwcGVkID8gWzFdIDogYXJndW1lbnRzLFxuICAgICAgICAgICAgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXyxcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxcbiAgICAgICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsXG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFyZ3NbMF0sXG4gICAgICAgICAgICB1c2VMYXp5ID0gaXNMYXp5IHx8IGlzQXJyYXkodmFsdWUpO1xuXG4gICAgICAgIGlmICh1c2VMYXp5ICYmIGNoZWNrSXRlcmF0ZWUgJiYgdHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicgJiYgaXRlcmF0ZWUubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgICAvLyBBdm9pZCBsYXp5IHVzZSBpZiB0aGUgaXRlcmF0ZWUgaGFzIGEgXCJsZW5ndGhcIiB2YWx1ZSBvdGhlciB0aGFuIGAxYC5cbiAgICAgICAgICBpc0xhenkgPSB1c2VMYXp5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGludGVyY2VwdG9yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gKHJldFVud3JhcHBlZCAmJiBjaGFpbkFsbClcbiAgICAgICAgICAgID8gbG9kYXNoRnVuYyh2YWx1ZSwgMSlbMF1cbiAgICAgICAgICAgIDogbG9kYXNoRnVuYy5hcHBseSh1bmRlZmluZWQsIGFycmF5UHVzaChbdmFsdWVdLCBhcmdzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGFjdGlvbiA9IHsgJ2Z1bmMnOiB0aHJ1LCAnYXJncyc6IFtpbnRlcmNlcHRvcl0sICd0aGlzQXJnJzogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBvbmx5TGF6eSA9IGlzTGF6eSAmJiAhaXNIeWJyaWQ7XG5cbiAgICAgICAgaWYgKHJldFVud3JhcHBlZCAmJiAhY2hhaW5BbGwpIHtcbiAgICAgICAgICBpZiAob25seUxhenkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY2xvbmUoKTtcbiAgICAgICAgICAgIHZhbHVlLl9fYWN0aW9uc19fLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbG9kYXNoRnVuYy5jYWxsKHVuZGVmaW5lZCwgdGhpcy52YWx1ZSgpKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7XG4gICAgICAgICAgdmFsdWUgPSBvbmx5TGF6eSA/IHZhbHVlIDogbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICAgICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaChhY3Rpb24pO1xuICAgICAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcihyZXN1bHQsIGNoYWluQWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYEFycmF5YCBhbmQgYFN0cmluZ2AgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYXJyYXlFYWNoKFsnam9pbicsICdwb3AnLCAncHVzaCcsICdyZXBsYWNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3NwbGl0JywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSAoL14oPzpyZXBsYWNlfHNwbGl0KSQvLnRlc3QobWV0aG9kTmFtZSkgPyBzdHJpbmdQcm90byA6IGFycmF5UHJvdG8pW21ldGhvZE5hbWVdLFxuICAgICAgICAgIGNoYWluTmFtZSA9IC9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChtZXRob2ROYW1lKSA/ICd0YXAnIDogJ3RocnUnLFxuICAgICAgICAgIHJldFVud3JhcHBlZCA9IC9eKD86am9pbnxwb3B8cmVwbGFjZXxzaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBpZiAocmV0VW53cmFwcGVkICYmICF0aGlzLl9fY2hhaW5fXykge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMudmFsdWUoKSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNbY2hhaW5OYW1lXShmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gTWFwIG1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzIHRvIHRoZWlyIHJlYWwgbmFtZXMuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBsb2Rhc2hGdW5jID0gbG9kYXNoW21ldGhvZE5hbWVdO1xuICAgICAgaWYgKGxvZGFzaEZ1bmMpIHtcbiAgICAgICAgdmFyIGtleSA9IGxvZGFzaEZ1bmMubmFtZSxcbiAgICAgICAgICAgIG5hbWVzID0gcmVhbE5hbWVzW2tleV0gfHwgKHJlYWxOYW1lc1trZXldID0gW10pO1xuXG4gICAgICAgIG5hbWVzLnB1c2goeyAnbmFtZSc6IG1ldGhvZE5hbWUsICdmdW5jJzogbG9kYXNoRnVuYyB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlYWxOYW1lc1tjcmVhdGVIeWJyaWRXcmFwcGVyKHVuZGVmaW5lZCwgQklORF9LRVlfRkxBRykubmFtZV0gPSBbeyAnbmFtZSc6ICd3cmFwcGVyJywgJ2Z1bmMnOiB1bmRlZmluZWQgfV07XG5cbiAgICAvLyBBZGQgZnVuY3Rpb25zIHRvIHRoZSBsYXp5IHdyYXBwZXIuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNsb25lID0gbGF6eUNsb25lO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5yZXZlcnNlID0gbGF6eVJldmVyc2U7XG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnZhbHVlID0gbGF6eVZhbHVlO1xuXG4gICAgLy8gQWRkIGNoYWluaW5nIGZ1bmN0aW9ucyB0byB0aGUgYGxvZGFzaGAgd3JhcHBlci5cbiAgICBsb2Rhc2gucHJvdG90eXBlLmNoYWluID0gd3JhcHBlckNoYWluO1xuICAgIGxvZGFzaC5wcm90b3R5cGUuY29tbWl0ID0gd3JhcHBlckNvbW1pdDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNvbmNhdCA9IHdyYXBwZXJDb25jYXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5wbGFudCA9IHdyYXBwZXJQbGFudDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnJldmVyc2UgPSB3cmFwcGVyUmV2ZXJzZTtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnRvU3RyaW5nID0gd3JhcHBlclRvU3RyaW5nO1xuICAgIGxvZGFzaC5wcm90b3R5cGUucnVuID0gbG9kYXNoLnByb3RvdHlwZS50b0pTT04gPSBsb2Rhc2gucHJvdG90eXBlLnZhbHVlT2YgPSBsb2Rhc2gucHJvdG90eXBlLnZhbHVlID0gd3JhcHBlclZhbHVlO1xuXG4gICAgLy8gQWRkIGZ1bmN0aW9uIGFsaWFzZXMgdG8gdGhlIGBsb2Rhc2hgIHdyYXBwZXIuXG4gICAgbG9kYXNoLnByb3RvdHlwZS5jb2xsZWN0ID0gbG9kYXNoLnByb3RvdHlwZS5tYXA7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5oZWFkID0gbG9kYXNoLnByb3RvdHlwZS5maXJzdDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnNlbGVjdCA9IGxvZGFzaC5wcm90b3R5cGUuZmlsdGVyO1xuICAgIGxvZGFzaC5wcm90b3R5cGUudGFpbCA9IGxvZGFzaC5wcm90b3R5cGUucmVzdDtcblxuICAgIHJldHVybiBsb2Rhc2g7XG4gIH1cblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAvLyBFeHBvcnQgbG9kYXNoLlxuICB2YXIgXyA9IHJ1bkluQ29udGV4dCgpO1xuXG4gIC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMgbGlrZSByLmpzIGNoZWNrIGZvciBjb25kaXRpb24gcGF0dGVybnMgbGlrZSB0aGUgZm9sbG93aW5nOlxuICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBFeHBvc2UgbG9kYXNoIHRvIHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gYW4gQU1EIGxvYWRlciBpcyBwcmVzZW50IHRvIGF2b2lkXG4gICAgLy8gZXJyb3JzIGluIGNhc2VzIHdoZXJlIGxvZGFzaCBpcyBsb2FkZWQgYnkgYSBzY3JpcHQgdGFnIGFuZCBub3QgaW50ZW5kZWRcbiAgICAvLyBhcyBhbiBBTUQgbW9kdWxlLiBTZWUgaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCNtaXNtYXRjaCBmb3JcbiAgICAvLyBtb3JlIGRldGFpbHMuXG4gICAgcm9vdC5fID0gXztcblxuICAgIC8vIERlZmluZSBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlIHNvLCB0aHJvdWdoIHBhdGggbWFwcGluZywgaXQgY2FuIGJlXG4gICAgLy8gcmVmZXJlbmNlZCBhcyB0aGUgXCJ1bmRlcnNjb3JlXCIgbW9kdWxlLlxuICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG4gIC8vIENoZWNrIGZvciBgZXhwb3J0c2AgYWZ0ZXIgYGRlZmluZWAgaW4gY2FzZSBhIGJ1aWxkIG9wdGltaXplciBhZGRzIGFuIGBleHBvcnRzYCBvYmplY3QuXG4gIGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcbiAgICAvLyBFeHBvcnQgZm9yIE5vZGUuanMgb3IgUmluZ29KUy5cbiAgICBpZiAobW9kdWxlRXhwb3J0cykge1xuICAgICAgKGZyZWVNb2R1bGUuZXhwb3J0cyA9IF8pLl8gPSBfO1xuICAgIH1cbiAgICAvLyBFeHBvcnQgZm9yIFJoaW5vIHdpdGggQ29tbW9uSlMgc3VwcG9ydC5cbiAgICBlbHNlIHtcbiAgICAgIGZyZWVFeHBvcnRzLl8gPSBfO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBFeHBvcnQgZm9yIGEgYnJvd3NlciBvciBSaGluby5cbiAgICByb290Ll8gPSBfO1xuICB9XG59LmNhbGwodGhpcykpO1xuIiwiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucyl7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoJ3N0cmluZycgPT0gdHlwZW9mIHZhbCkgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIHJldHVybiBvcHRpb25zLmxvbmdcbiAgICA/IGxvbmcodmFsKVxuICAgIDogc2hvcnQodmFsKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSAnJyArIHN0cjtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDAwMCkgcmV0dXJuO1xuICB2YXIgbWF0Y2ggPSAvXigoPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKHN0cik7XG4gIGlmICghbWF0Y2gpIHJldHVybjtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2hvcnQobXMpIHtcbiAgaWYgKG1zID49IGQpIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIGlmIChtcyA+PSBoKSByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICBpZiAobXMgPj0gbSkgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgaWYgKG1zID49IHMpIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb25nKG1zKSB7XG4gIHJldHVybiBwbHVyYWwobXMsIGQsICdkYXknKVxuICAgIHx8IHBsdXJhbChtcywgaCwgJ2hvdXInKVxuICAgIHx8IHBsdXJhbChtcywgbSwgJ21pbnV0ZScpXG4gICAgfHwgcGx1cmFsKG1zLCBzLCAnc2Vjb25kJylcbiAgICB8fCBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbiwgbmFtZSkge1xuICBpZiAobXMgPCBuKSByZXR1cm47XG4gIGlmIChtcyA8IG4gKiAxLjUpIHJldHVybiBNYXRoLmZsb29yKG1zIC8gbikgKyAnICcgKyBuYW1lO1xuICByZXR1cm4gTWF0aC5jZWlsKG1zIC8gbikgKyAnICcgKyBuYW1lICsgJ3MnO1xufVxuIiwiLyohIE5hdGl2ZSBQcm9taXNlIE9ubHlcbiAgICB2MC44LjEgKGMpIEt5bGUgU2ltcHNvblxuICAgIE1JVCBMaWNlbnNlOiBodHRwOi8vZ2V0aWZ5Lm1pdC1saWNlbnNlLm9yZ1xuKi9cblxuKGZ1bmN0aW9uIFVNRChuYW1lLGNvbnRleHQsZGVmaW5pdGlvbil7XG5cdC8vIHNwZWNpYWwgZm9ybSBvZiBVTUQgZm9yIHBvbHlmaWxsaW5nIGFjcm9zcyBldmlyb25tZW50c1xuXHRjb250ZXh0W25hbWVdID0gY29udGV4dFtuYW1lXSB8fCBkZWZpbml0aW9uKCk7XG5cdGlmICh0eXBlb2YgbW9kdWxlICE9IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMpIHsgbW9kdWxlLmV4cG9ydHMgPSBjb250ZXh0W25hbWVdOyB9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHsgZGVmaW5lKGZ1bmN0aW9uICRBTUQkKCl7IHJldHVybiBjb250ZXh0W25hbWVdOyB9KTsgfVxufSkoXCJQcm9taXNlXCIsdHlwZW9mIGdsb2JhbCAhPSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdGhpcyxmdW5jdGlvbiBERUYoKXtcblx0Lypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIGJ1aWx0SW5Qcm9wLCBjeWNsZSwgc2NoZWR1bGluZ19xdWV1ZSxcblx0XHRUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsXG5cdFx0dGltZXIgPSAodHlwZW9mIHNldEltbWVkaWF0ZSAhPSBcInVuZGVmaW5lZFwiKSA/XG5cdFx0XHRmdW5jdGlvbiB0aW1lcihmbikgeyByZXR1cm4gc2V0SW1tZWRpYXRlKGZuKTsgfSA6XG5cdFx0XHRzZXRUaW1lb3V0XG5cdDtcblxuXHQvLyBkYW1taXQsIElFOC5cblx0dHJ5IHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJ4XCIse30pO1xuXHRcdGJ1aWx0SW5Qcm9wID0gZnVuY3Rpb24gYnVpbHRJblByb3Aob2JqLG5hbWUsdmFsLGNvbmZpZykge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosbmFtZSx7XG5cdFx0XHRcdHZhbHVlOiB2YWwsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IGNvbmZpZyAhPT0gZmFsc2Vcblx0XHRcdH0pO1xuXHRcdH07XG5cdH1cblx0Y2F0Y2ggKGVycikge1xuXHRcdGJ1aWx0SW5Qcm9wID0gZnVuY3Rpb24gYnVpbHRJblByb3Aob2JqLG5hbWUsdmFsKSB7XG5cdFx0XHRvYmpbbmFtZV0gPSB2YWw7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH07XG5cdH1cblxuXHQvLyBOb3RlOiB1c2luZyBhIHF1ZXVlIGluc3RlYWQgb2YgYXJyYXkgZm9yIGVmZmljaWVuY3lcblx0c2NoZWR1bGluZ19xdWV1ZSA9IChmdW5jdGlvbiBRdWV1ZSgpIHtcblx0XHR2YXIgZmlyc3QsIGxhc3QsIGl0ZW07XG5cblx0XHRmdW5jdGlvbiBJdGVtKGZuLHNlbGYpIHtcblx0XHRcdHRoaXMuZm4gPSBmbjtcblx0XHRcdHRoaXMuc2VsZiA9IHNlbGY7XG5cdFx0XHR0aGlzLm5leHQgPSB2b2lkIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFkZDogZnVuY3Rpb24gYWRkKGZuLHNlbGYpIHtcblx0XHRcdFx0aXRlbSA9IG5ldyBJdGVtKGZuLHNlbGYpO1xuXHRcdFx0XHRpZiAobGFzdCkge1xuXHRcdFx0XHRcdGxhc3QubmV4dCA9IGl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Zmlyc3QgPSBpdGVtO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxhc3QgPSBpdGVtO1xuXHRcdFx0XHRpdGVtID0gdm9pZCAwO1xuXHRcdFx0fSxcblx0XHRcdGRyYWluOiBmdW5jdGlvbiBkcmFpbigpIHtcblx0XHRcdFx0dmFyIGYgPSBmaXJzdDtcblx0XHRcdFx0Zmlyc3QgPSBsYXN0ID0gY3ljbGUgPSB2b2lkIDA7XG5cblx0XHRcdFx0d2hpbGUgKGYpIHtcblx0XHRcdFx0XHRmLmZuLmNhbGwoZi5zZWxmKTtcblx0XHRcdFx0XHRmID0gZi5uZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSkoKTtcblxuXHRmdW5jdGlvbiBzY2hlZHVsZShmbixzZWxmKSB7XG5cdFx0c2NoZWR1bGluZ19xdWV1ZS5hZGQoZm4sc2VsZik7XG5cdFx0aWYgKCFjeWNsZSkge1xuXHRcdFx0Y3ljbGUgPSB0aW1lcihzY2hlZHVsaW5nX3F1ZXVlLmRyYWluKTtcblx0XHR9XG5cdH1cblxuXHQvLyBwcm9taXNlIGR1Y2sgdHlwaW5nXG5cdGZ1bmN0aW9uIGlzVGhlbmFibGUobykge1xuXHRcdHZhciBfdGhlbiwgb190eXBlID0gdHlwZW9mIG87XG5cblx0XHRpZiAobyAhPSBudWxsICYmXG5cdFx0XHQoXG5cdFx0XHRcdG9fdHlwZSA9PSBcIm9iamVjdFwiIHx8IG9fdHlwZSA9PSBcImZ1bmN0aW9uXCJcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdF90aGVuID0gby50aGVuO1xuXHRcdH1cblx0XHRyZXR1cm4gdHlwZW9mIF90aGVuID09IFwiZnVuY3Rpb25cIiA/IF90aGVuIDogZmFsc2U7XG5cdH1cblxuXHRmdW5jdGlvbiBub3RpZnkoKSB7XG5cdFx0Zm9yICh2YXIgaT0wOyBpPHRoaXMuY2hhaW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdG5vdGlmeUlzb2xhdGVkKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHQodGhpcy5zdGF0ZSA9PT0gMSkgPyB0aGlzLmNoYWluW2ldLnN1Y2Nlc3MgOiB0aGlzLmNoYWluW2ldLmZhaWx1cmUsXG5cdFx0XHRcdHRoaXMuY2hhaW5baV1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHRoaXMuY2hhaW4ubGVuZ3RoID0gMDtcblx0fVxuXG5cdC8vIE5PVEU6IFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBpc29sYXRlXG5cdC8vIHRoZSBgdHJ5Li5jYXRjaGAgc28gdGhhdCBvdGhlciBjb2RlIGNhbiBiZVxuXHQvLyBvcHRpbWl6ZWQgYmV0dGVyXG5cdGZ1bmN0aW9uIG5vdGlmeUlzb2xhdGVkKHNlbGYsY2IsY2hhaW4pIHtcblx0XHR2YXIgcmV0LCBfdGhlbjtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGNiID09PSBmYWxzZSkge1xuXHRcdFx0XHRjaGFpbi5yZWplY3Qoc2VsZi5tc2cpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGlmIChjYiA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHJldCA9IHNlbGYubXNnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHJldCA9IGNiLmNhbGwodm9pZCAwLHNlbGYubXNnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChyZXQgPT09IGNoYWluLnByb21pc2UpIHtcblx0XHRcdFx0XHRjaGFpbi5yZWplY3QoVHlwZUVycm9yKFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoX3RoZW4gPSBpc1RoZW5hYmxlKHJldCkpIHtcblx0XHRcdFx0XHRfdGhlbi5jYWxsKHJldCxjaGFpbi5yZXNvbHZlLGNoYWluLnJlamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Y2hhaW4ucmVzb2x2ZShyZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNhdGNoIChlcnIpIHtcblx0XHRcdGNoYWluLnJlamVjdChlcnIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlc29sdmUobXNnKSB7XG5cdFx0dmFyIF90aGVuLCBzZWxmID0gdGhpcztcblxuXHRcdC8vIGFscmVhZHkgdHJpZ2dlcmVkP1xuXHRcdGlmIChzZWxmLnRyaWdnZXJlZCkgeyByZXR1cm47IH1cblxuXHRcdHNlbGYudHJpZ2dlcmVkID0gdHJ1ZTtcblxuXHRcdC8vIHVud3JhcFxuXHRcdGlmIChzZWxmLmRlZikge1xuXHRcdFx0c2VsZiA9IHNlbGYuZGVmO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRpZiAoX3RoZW4gPSBpc1RoZW5hYmxlKG1zZykpIHtcblx0XHRcdFx0c2NoZWR1bGUoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR2YXIgZGVmX3dyYXBwZXIgPSBuZXcgTWFrZURlZldyYXBwZXIoc2VsZik7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdF90aGVuLmNhbGwobXNnLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAkcmVzb2x2ZSQoKXsgcmVzb2x2ZS5hcHBseShkZWZfd3JhcHBlcixhcmd1bWVudHMpOyB9LFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAkcmVqZWN0JCgpeyByZWplY3QuYXBwbHkoZGVmX3dyYXBwZXIsYXJndW1lbnRzKTsgfVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0cmVqZWN0LmNhbGwoZGVmX3dyYXBwZXIsZXJyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0c2VsZi5tc2cgPSBtc2c7XG5cdFx0XHRcdHNlbGYuc3RhdGUgPSAxO1xuXHRcdFx0XHRpZiAoc2VsZi5jaGFpbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0c2NoZWR1bGUobm90aWZ5LHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNhdGNoIChlcnIpIHtcblx0XHRcdHJlamVjdC5jYWxsKG5ldyBNYWtlRGVmV3JhcHBlcihzZWxmKSxlcnIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlamVjdChtc2cpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHQvLyBhbHJlYWR5IHRyaWdnZXJlZD9cblx0XHRpZiAoc2VsZi50cmlnZ2VyZWQpIHsgcmV0dXJuOyB9XG5cblx0XHRzZWxmLnRyaWdnZXJlZCA9IHRydWU7XG5cblx0XHQvLyB1bndyYXBcblx0XHRpZiAoc2VsZi5kZWYpIHtcblx0XHRcdHNlbGYgPSBzZWxmLmRlZjtcblx0XHR9XG5cblx0XHRzZWxmLm1zZyA9IG1zZztcblx0XHRzZWxmLnN0YXRlID0gMjtcblx0XHRpZiAoc2VsZi5jaGFpbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRzY2hlZHVsZShub3RpZnksc2VsZik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaXRlcmF0ZVByb21pc2VzKENvbnN0cnVjdG9yLGFycixyZXNvbHZlcixyZWplY3Rlcikge1xuXHRcdGZvciAodmFyIGlkeD0wOyBpZHg8YXJyLmxlbmd0aDsgaWR4KyspIHtcblx0XHRcdChmdW5jdGlvbiBJSUZFKGlkeCl7XG5cdFx0XHRcdENvbnN0cnVjdG9yLnJlc29sdmUoYXJyW2lkeF0pXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdGZ1bmN0aW9uICRyZXNvbHZlciQobXNnKXtcblx0XHRcdFx0XHRcdHJlc29sdmVyKGlkeCxtc2cpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVqZWN0ZXJcblx0XHRcdFx0KTtcblx0XHRcdH0pKGlkeCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gTWFrZURlZldyYXBwZXIoc2VsZikge1xuXHRcdHRoaXMuZGVmID0gc2VsZjtcblx0XHR0aGlzLnRyaWdnZXJlZCA9IGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gTWFrZURlZihzZWxmKSB7XG5cdFx0dGhpcy5wcm9taXNlID0gc2VsZjtcblx0XHR0aGlzLnN0YXRlID0gMDtcblx0XHR0aGlzLnRyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMuY2hhaW4gPSBbXTtcblx0XHR0aGlzLm1zZyA9IHZvaWQgMDtcblx0fVxuXG5cdGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcblx0XHRpZiAodHlwZW9mIGV4ZWN1dG9yICE9IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX19OUE9fXyAhPT0gMCkge1xuXHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgcHJvbWlzZVwiKTtcblx0XHR9XG5cblx0XHQvLyBpbnN0YW5jZSBzaGFkb3dpbmcgdGhlIGluaGVyaXRlZCBcImJyYW5kXCJcblx0XHQvLyB0byBzaWduYWwgYW4gYWxyZWFkeSBcImluaXRpYWxpemVkXCIgcHJvbWlzZVxuXHRcdHRoaXMuX19OUE9fXyA9IDE7XG5cblx0XHR2YXIgZGVmID0gbmV3IE1ha2VEZWYodGhpcyk7XG5cblx0XHR0aGlzW1widGhlblwiXSA9IGZ1bmN0aW9uIHRoZW4oc3VjY2VzcyxmYWlsdXJlKSB7XG5cdFx0XHR2YXIgbyA9IHtcblx0XHRcdFx0c3VjY2VzczogdHlwZW9mIHN1Y2Nlc3MgPT0gXCJmdW5jdGlvblwiID8gc3VjY2VzcyA6IHRydWUsXG5cdFx0XHRcdGZhaWx1cmU6IHR5cGVvZiBmYWlsdXJlID09IFwiZnVuY3Rpb25cIiA/IGZhaWx1cmUgOiBmYWxzZVxuXHRcdFx0fTtcblx0XHRcdC8vIE5vdGU6IGB0aGVuKC4uKWAgaXRzZWxmIGNhbiBiZSBib3Jyb3dlZCB0byBiZSB1c2VkIGFnYWluc3Rcblx0XHRcdC8vIGEgZGlmZmVyZW50IHByb21pc2UgY29uc3RydWN0b3IgZm9yIG1ha2luZyB0aGUgY2hhaW5lZCBwcm9taXNlLFxuXHRcdFx0Ly8gYnkgc3Vic3RpdHV0aW5nIGEgZGlmZmVyZW50IGB0aGlzYCBiaW5kaW5nLlxuXHRcdFx0by5wcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoZnVuY3Rpb24gZXh0cmFjdENoYWluKHJlc29sdmUscmVqZWN0KSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR0aHJvdyBUeXBlRXJyb3IoXCJOb3QgYSBmdW5jdGlvblwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG8ucmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHRcdG8ucmVqZWN0ID0gcmVqZWN0O1xuXHRcdFx0fSk7XG5cdFx0XHRkZWYuY2hhaW4ucHVzaChvKTtcblxuXHRcdFx0aWYgKGRlZi5zdGF0ZSAhPT0gMCkge1xuXHRcdFx0XHRzY2hlZHVsZShub3RpZnksZGVmKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG8ucHJvbWlzZTtcblx0XHR9O1xuXHRcdHRoaXNbXCJjYXRjaFwiXSA9IGZ1bmN0aW9uICRjYXRjaCQoZmFpbHVyZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZmFpbHVyZSk7XG5cdFx0fTtcblxuXHRcdHRyeSB7XG5cdFx0XHRleGVjdXRvci5jYWxsKFxuXHRcdFx0XHR2b2lkIDAsXG5cdFx0XHRcdGZ1bmN0aW9uIHB1YmxpY1Jlc29sdmUobXNnKXtcblx0XHRcdFx0XHRyZXNvbHZlLmNhbGwoZGVmLG1zZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZ1bmN0aW9uIHB1YmxpY1JlamVjdChtc2cpIHtcblx0XHRcdFx0XHRyZWplY3QuY2FsbChkZWYsbXNnKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Y2F0Y2ggKGVycikge1xuXHRcdFx0cmVqZWN0LmNhbGwoZGVmLGVycik7XG5cdFx0fVxuXHR9XG5cblx0dmFyIFByb21pc2VQcm90b3R5cGUgPSBidWlsdEluUHJvcCh7fSxcImNvbnN0cnVjdG9yXCIsUHJvbWlzZSxcblx0XHQvKmNvbmZpZ3VyYWJsZT0qL2ZhbHNlXG5cdCk7XG5cblx0Ly8gTm90ZTogQW5kcm9pZCA0IGNhbm5vdCB1c2UgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSguLilgIGhlcmVcblx0UHJvbWlzZS5wcm90b3R5cGUgPSBQcm9taXNlUHJvdG90eXBlO1xuXG5cdC8vIGJ1aWx0LWluIFwiYnJhbmRcIiB0byBzaWduYWwgYW4gXCJ1bmluaXRpYWxpemVkXCIgcHJvbWlzZVxuXHRidWlsdEluUHJvcChQcm9taXNlUHJvdG90eXBlLFwiX19OUE9fX1wiLDAsXG5cdFx0Lypjb25maWd1cmFibGU9Ki9mYWxzZVxuXHQpO1xuXG5cdGJ1aWx0SW5Qcm9wKFByb21pc2UsXCJyZXNvbHZlXCIsZnVuY3Rpb24gUHJvbWlzZSRyZXNvbHZlKG1zZykge1xuXHRcdHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cblx0XHQvLyBzcGVjIG1hbmRhdGVkIGNoZWNrc1xuXHRcdC8vIG5vdGU6IGJlc3QgXCJpc1Byb21pc2VcIiBjaGVjayB0aGF0J3MgcHJhY3RpY2FsIGZvciBub3dcblx0XHRpZiAobXNnICYmIHR5cGVvZiBtc2cgPT0gXCJvYmplY3RcIiAmJiBtc2cuX19OUE9fXyA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIG1zZztcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUscmVqZWN0KXtcblx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUobXNnKTtcblx0XHR9KTtcblx0fSk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcInJlamVjdFwiLGZ1bmN0aW9uIFByb21pc2UkcmVqZWN0KG1zZykge1xuXHRcdHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLHJlamVjdCl7XG5cdFx0XHRpZiAodHlwZW9mIHJlc29sdmUgIT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiByZWplY3QgIT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IFR5cGVFcnJvcihcIk5vdCBhIGZ1bmN0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWplY3QobXNnKTtcblx0XHR9KTtcblx0fSk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcImFsbFwiLGZ1bmN0aW9uIFByb21pc2UkYWxsKGFycikge1xuXHRcdHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cblx0XHQvLyBzcGVjIG1hbmRhdGVkIGNoZWNrc1xuXHRcdGlmIChUb1N0cmluZy5jYWxsKGFycikgIT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG5cdFx0XHRyZXR1cm4gQ29uc3RydWN0b3IucmVqZWN0KFR5cGVFcnJvcihcIk5vdCBhbiBhcnJheVwiKSk7XG5cdFx0fVxuXHRcdGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gQ29uc3RydWN0b3IucmVzb2x2ZShbXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLHJlamVjdCl7XG5cdFx0XHRpZiAodHlwZW9mIHJlc29sdmUgIT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiByZWplY3QgIT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IFR5cGVFcnJvcihcIk5vdCBhIGZ1bmN0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGVuID0gYXJyLmxlbmd0aCwgbXNncyA9IEFycmF5KGxlbiksIGNvdW50ID0gMDtcblxuXHRcdFx0aXRlcmF0ZVByb21pc2VzKENvbnN0cnVjdG9yLGFycixmdW5jdGlvbiByZXNvbHZlcihpZHgsbXNnKSB7XG5cdFx0XHRcdG1zZ3NbaWR4XSA9IG1zZztcblx0XHRcdFx0aWYgKCsrY291bnQgPT09IGxlbikge1xuXHRcdFx0XHRcdHJlc29sdmUobXNncyk7XG5cdFx0XHRcdH1cblx0XHRcdH0scmVqZWN0KTtcblx0XHR9KTtcblx0fSk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcInJhY2VcIixmdW5jdGlvbiBQcm9taXNlJHJhY2UoYXJyKSB7XG5cdFx0dmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuXHRcdC8vIHNwZWMgbWFuZGF0ZWQgY2hlY2tzXG5cdFx0aWYgKFRvU3RyaW5nLmNhbGwoYXJyKSAhPSBcIltvYmplY3QgQXJyYXldXCIpIHtcblx0XHRcdHJldHVybiBDb25zdHJ1Y3Rvci5yZWplY3QoVHlwZUVycm9yKFwiTm90IGFuIGFycmF5XCIpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUscmVqZWN0KXtcblx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdGl0ZXJhdGVQcm9taXNlcyhDb25zdHJ1Y3RvcixhcnIsZnVuY3Rpb24gcmVzb2x2ZXIoaWR4LG1zZyl7XG5cdFx0XHRcdHJlc29sdmUobXNnKTtcblx0XHRcdH0scmVqZWN0KTtcblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIFByb21pc2U7XG59KTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBKZXJlbXkgV2hpdGxvY2tcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVdGlsaXR5IHRoYXQgcHJvdmlkZXMgYSBzaW5nbGUgQVBJIGZvciBsb2FkaW5nIHRoZSBjb250ZW50IG9mIGEgcGF0aC9VUkwuXG4gKlxuICogQG1vZHVsZSBQYXRoTG9hZGVyXG4gKi9cblxudmFyIHN1cHBvcnRlZExvYWRlcnMgPSB7XG4gIGZpbGU6IHJlcXVpcmUoJy4vbGliL2xvYWRlcnMvZmlsZScpLFxuICBodHRwOiByZXF1aXJlKCcuL2xpYi9sb2FkZXJzL2h0dHAnKSxcbiAgaHR0cHM6IHJlcXVpcmUoJy4vbGliL2xvYWRlcnMvaHR0cCcpXG59O1xudmFyIGRlZmF1bHRMb2FkZXIgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICBzdXBwb3J0ZWRMb2FkZXJzLmh0dHAgOlxuICAgICAgc3VwcG9ydGVkTG9hZGVycy5maWxlO1xuXG4vLyBMb2FkIHByb21pc2VzIHBvbHlmaWxsIGlmIG5lY2Vzc2FyeVxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gIHJlcXVpcmUoJ25hdGl2ZS1wcm9taXNlLW9ubHknKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NoZW1lIChsb2NhdGlvbikge1xuICBpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24uaW5kZXhPZignOi8vJykgPT09IC0xID8gJycgOiBsb2NhdGlvbi5zcGxpdCgnOi8vJylbMF07XG4gIH1cblxuICByZXR1cm4gbG9jYXRpb247XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgdXNlZCB0byBwcm92aWRlIGFjY2VzcyB0byBhbHRlcmluZyBhIHJlbW90ZSByZXF1ZXN0IHByaW9yIHRvIHRoZSByZXF1ZXN0IGJlaW5nIG1hZGUuXG4gKlxuICogQHR5cGVkZWYge2Z1bmN0aW9ufSBQcmVwYXJlUmVxdWVzdENhbGxiYWNrXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHJlcSAtIFRoZSBTdXBlcmFnZW50IHJlcXVlc3Qgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gLSBUaGUgbG9jYXRpb24gYmVpbmcgcmV0cmlldmVkXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEZpcnN0IGNhbGxiYWNrXG4gKlxuICogQGFsaWFzIG1vZHVsZTpQYXRoTG9hZGVyflByZXBhcmVSZXF1ZXN0Q2FsbGJhY2tcbiAqL1xuXG4gLyoqXG4gICogQ2FsbGJhY2sgdXNlZCB0byBwcm92aWRlIGFjY2VzcyB0byBwcm9jZXNzaW5nIHRoZSByYXcgcmVzcG9uc2Ugb2YgdGhlIHJlcXVlc3QgYmVpbmcgbWFkZS4gKihIVFRQIGxvYWRlciBvbmx5KSpcbiAgKlxuICAqIEB0eXBlZGVmIHtmdW5jdGlvbn0gUHJvY2Vzc1Jlc3BvbnNlQ2FsbGJhY2tcbiAgKlxuICAqIEBwYXJhbSB7b2JqZWN0fSByZXMgLSBUaGUgU3VwZXJhZ2VudCByZXNwb25zZSBvYmplY3QgKihGb3Igbm9uLUhUVFAgbG9hZGVycywgdGhpcyBvYmplY3Qgd2lsbCBiZSBsaWtlIHRoZSBTdXBlcmFnZW50XG4gICogb2JqZWN0IGluIHRoYXQgaXQgd2lsbCBoYXZlIGEgYHRleHRgIHByb3BlcnR5IHdob3NlIHZhbHVlIGlzIHRoZSByYXcgc3RyaW5nIHZhbHVlIGJlaW5nIHByb2Nlc3NlZC4gIFRoaXMgd2FzIGRvbmVcbiAgKiBmb3IgY29uc2lzdGVuY3kuKSpcbiAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEVycm9yLWZpcnN0IGNhbGxiYWNrXG4gICpcbiAgKiBAcmV0dXJucyB7Kn0gdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIHRoZSByZXNwb25zZXhzXG4gICpcbiAgKiBAYWxpYXMgbW9kdWxlOlBhdGhMb2FkZXJ+UHJvY2Vzc1Jlc3BvbnNlQ2FsbGJhY2tcbiAgKi9cblxuZnVuY3Rpb24gZ2V0TG9hZGVyIChsb2NhdGlvbikge1xuICB2YXIgc2NoZW1lID0gZ2V0U2NoZW1lKGxvY2F0aW9uKTtcbiAgdmFyIGxvYWRlciA9IHN1cHBvcnRlZExvYWRlcnNbc2NoZW1lXTtcblxuICBpZiAodHlwZW9mIGxvYWRlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoc2NoZW1lID09PSAnJykge1xuICAgICAgbG9hZGVyID0gZGVmYXVsdExvYWRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBzY2hlbWU6ICcgKyBzY2hlbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsb2FkZXI7XG59XG5cbi8qKlxuICogTG9hZHMgYSBkb2N1bWVudCBhdCB0aGUgcHJvdmlkZWQgbG9jYXRpb24gYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbG9jYXRpb24gLSBUaGUgbG9jYXRpb24gdG8gdGhlIGRvY3VtZW50XG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gVGhlIG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5lbmNvZGluZz0ndXRmLTgnXSAtIFRoZSBlbmNvZGluZyB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSBmaWxlICooRmlsZSBsb2FkZXIgb25seSkqXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubWV0aG9kPWdldF0gLSBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIGZvciB0aGUgcmVxdWVzdCAqKEhUVFAgbG9hZGVyIG9ubHkpKlxuICogQHBhcmFtIHttb2R1bGU6UGF0aExvYWRlcn5QcmVwYXJlUmVxdWVzdENhbGxiYWNrfSBbb3B0aW9ucy5wcmVwYXJlUmVxdWVzdF0gLSBUaGUgY2FsbGJhY2sgdXNlZCB0byBwcmVwYXJlIHRoZSByZXF1ZXN0XG4gKiAqKEhUVFAgbG9hZGVyIG9ubHkpKlxuICogQHBhcmFtIHttb2R1bGU6UGF0aExvYWRlcn5Qcm9jZXNzUmVzcG9uc2VDYWxsYmFja30gW29wdGlvbnMucHJvY2Vzc0NvbnRlbnRdIC0gVGhlIGNhbGxiYWNrIHVzZWQgdG8gcHJvY2VzcyB0aGVcbiAqIHJlc3BvbnNlXG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IEFsd2F5cyByZXR1cm5zIGEgcHJvbWlzZSBldmVuIGlmIHRoZXJlIGlzIGEgY2FsbGJhY2sgcHJvdmlkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSB1c2luZyBQcm9taXNlc1xuICpcbiAqIFBhdGhMb2FkZXJcbiAqICAgLmxvYWQoJy4vcGFja2FnZS5qc29uJylcbiAqICAgLnRoZW4oSlNPTi5wYXJzZSlcbiAqICAgLnRoZW4oZnVuY3Rpb24gKGRvY3VtZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coZG9jdW1lbnQubmFtZSArICcgKCcgKyBkb2N1bWVudC52ZXJzaW9uICsgJyk6ICcgKyBkb2N1bWVudC5kZXNjcmlwdGlvbik7XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIHVzaW5nIG9wdGlvbnMucHJlcGFyZVJlcXVlc3QgdG8gcHJvdmlkZSBhdXRoZW50aWNhdGlvbiBkZXRhaWxzIGZvciBhIHJlbW90ZWx5IHNlY3VyZSBVUkxcbiAqXG4gKiBQYXRoTG9hZGVyXG4gKiAgIC5sb2FkKCdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3doaXRsb2NramMvcGF0aC1sb2FkZXInLCB7XG4gKiAgICAgcHJlcGFyZVJlcXVlc3Q6IGZ1bmN0aW9uIChyZXEsIGNhbGxiYWNrKSB7XG4gKiAgICAgICByZXEuYXV0aCgnbXktdXNlcm5hbWUnLCAnbXktcGFzc3dvcmQnKTtcbiAqICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgcmVxKTtcbiAqICAgICB9XG4gKiAgIH0pXG4gKiAgIC50aGVuKEpTT04ucGFyc2UpXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICogICAgIGNvbnNvbGUubG9nKGRvY3VtZW50LmZ1bGxfbmFtZSArICc6ICcgKyBkb2N1bWVudC5kZXNjcmlwdGlvbik7XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIGxvYWRpbmcgYSBZQU1MIGZpbGVcbiAqXG4gKiBQYXRoTG9hZGVyXG4gKiAgIC5sb2FkKCcvVXNlcnMvbm90LXlvdS9wcm9qZWN0cy9wYXRoLWxvYWRlci8udHJhdmlzLnltbCcpXG4gKiAgIC50aGVuKFlBTUwuc2FmZUxvYWQpXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICogICAgIGNvbnNvbGUubG9nKCdwYXRoLWxvYWRlciB1c2VzIHRoZScsIGRvY3VtZW50Lmxhbmd1YWdlLCAnbGFuZ3VhZ2UuJyk7XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIGxvYWRpbmcgYSBZQU1MIGZpbGUgd2l0aCBvcHRpb25zLnByb2Nlc3NDb250ZW50IChVc2VmdWwgaWYgeW91IG5lZWQgaW5mb3JtYXRpb24gaW4gdGhlIHJhdyByZXNwb25zZSlcbiAqXG4gKiBQYXRoTG9hZGVyXG4gKiAgIC5sb2FkKCcvVXNlcnMvbm90LXlvdS9wcm9qZWN0cy9wYXRoLWxvYWRlci8udHJhdmlzLnltbCcsIHtcbiAqICAgICBwcm9jZXNzQ29udGVudDogZnVuY3Rpb24gKHJlcywgY2FsbGJhY2spIHtcbiAqICAgICAgIGNhbGxiYWNrKFlBTUwuc2FmZUxvYWQocmVzLnRleHQpKTtcbiAqICAgICB9XG4gKiAgIH0pXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICogICAgIGNvbnNvbGUubG9nKCdwYXRoLWxvYWRlciB1c2VzIHRoZScsIGRvY3VtZW50Lmxhbmd1YWdlLCAnbGFuZ3VhZ2UuJyk7XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICovXG5tb2R1bGUuZXhwb3J0cy5sb2FkID0gZnVuY3Rpb24gKGxvY2F0aW9uLCBvcHRpb25zKSB7XG4gIHZhciBhbGxUYXNrcyA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8vIERlZmF1bHQgb3B0aW9ucyB0byBlbXB0eSBvYmplY3RcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGFyZ3VtZW50c1xuICBhbGxUYXNrcyA9IGFsbFRhc2tzLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdsb2NhdGlvbiBpcyByZXF1aXJlZCcpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbG9jYXRpb24gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm9jZXNzQ29udGVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdGlvbnMucHJvY2Vzc0NvbnRlbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5wcm9jZXNzQ29udGVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIExvYWQgdGhlIGRvY3VtZW50IGZyb20gdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGFuZCBwcm9jZXNzIGl0XG4gIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgbG9hZGVyID0gZ2V0TG9hZGVyKGxvY2F0aW9uKTtcblxuICAgICAgICBsb2FkZXIubG9hZChsb2NhdGlvbiwgb3B0aW9ucyB8fCB7fSwgZnVuY3Rpb24gKGVyciwgZG9jdW1lbnQpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShkb2N1bWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pXG4gICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgaWYgKG9wdGlvbnMucHJvY2Vzc0NvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAvLyBGb3IgY29uc2lzdGVuY3kgYmV0d2VlbiBmaWxlIGFuZCBodHRwLCBhbHdheXMgc2VuZCBhbiBvYmplY3Qgd2l0aCBhICd0ZXh0JyBwcm9wZXJ0eSBjb250YWluaW5nIHRoZSByYXdcbiAgICAgICAgICAvLyBzdHJpbmcgdmFsdWUgYmVpbmcgcHJvY2Vzc2VkLlxuICAgICAgICAgIG9wdGlvbnMucHJvY2Vzc0NvbnRlbnQodHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgPyByZXMgOiB7dGV4dDogcmVzfSwgZnVuY3Rpb24gKGVyciwgcHJvY2Vzc2VkKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShwcm9jZXNzZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZXJlIHdhcyBubyBjb250ZW50IHByb2Nlc3Nvciwgd2Ugd2lsbCBhc3N1bWUgdGhhdCBmb3IgYWxsIG9iamVjdHMgdGhhdCBpdCBpcyBhIFN1cGVyYWdlbnQgcmVzcG9uc2VcbiAgICAgICAgLy8gYW5kIHdpbGwgcmV0dXJuIGl0cyBgdGV4dGAgcHJvcGVydHkgdmFsdWUuICBPdGhlcndpc2UsIHdlIHdpbGwgcmV0dXJuIHRoZSByYXcgcmVzcG9uc2UuXG4gICAgICAgIHJldHVybiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyA/IHJlcy50ZXh0IDogcmVzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn07XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEplcmVteSBXaGl0bG9ja1xuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5zdXBwb3J0ZWRFcnJvciA9IG5ldyBUeXBlRXJyb3IoJ1RoZSBcXCdmaWxlXFwnIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyJyk7XG5cbi8qKlxuICogVGhlIGZpbGUgbG9hZGVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIuXG4gKlxuICogQHRocm93cyB7ZXJyb3J9IHRoZSBmaWxlIGxvYWRlciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldEJhc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHVuc3VwcG9ydGVkRXJyb3I7XG59O1xuXG4vKipcbiAqIFRoZSBmaWxlIGxvYWRlciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyLlxuICovXG5tb2R1bGUuZXhwb3J0cy5sb2FkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZm4gPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbih1bnN1cHBvcnRlZEVycm9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB1bnN1cHBvcnRlZEVycm9yO1xuICB9XG59O1xuIiwiLyogZXNsaW50LWVudiBub2RlLCBicm93c2VyICovXG5cbi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgSmVyZW15IFdoaXRsb2NrXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciByZXF1ZXN0ID0gcmVxdWlyZSgnc3VwZXJhZ2VudCcpO1xuXG52YXIgc3VwcG9ydGVkSHR0cE1ldGhvZHMgPSBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwYXRjaCcsICdwb3N0JywgJ3B1dCddO1xuXG4vKipcbiAqIExvYWRzIGEgZmlsZSBmcm9tIGFuIGh0dHAgb3IgaHR0cHMgVVJMLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiAtIFRoZSBkb2N1bWVudCBVUkwgKElmIHJlbGF0aXZlLCBsb2NhdGlvbiBpcyByZWxhdGl2ZSB0byB3aW5kb3cubG9jYXRpb24ub3JpZ2luKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIGxvYWRlciBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubWV0aG9kPWdldF0gLSBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHttb2R1bGU6UGF0aExvYWRlcn5QcmVwYXJlUmVxdWVzdENhbGxiYWNrfSBbb3B0aW9ucy5wcmVwYXJlUmVxdWVzdF0gLSBUaGUgY2FsbGJhY2sgdXNlZCB0byBwcmVwYXJlIGEgcmVxdWVzdFxuICogQHBhcmFtIHttb2R1bGU6UGF0aExvYWRlcn5Qcm9jZXNzUmVzcG9uc2VDYWxsYmFja30gW29wdGlvbnMucHJvY2Vzc0NvbnRlbnRdIC0gVGhlIGNhbGxiYWNrIHVzZWQgdG8gcHJvY2VzcyB0aGVcbiAqIHJlc3BvbnNlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBlcnJvci1maXJzdCBjYWxsYmFja1xuICovXG5tb2R1bGUuZXhwb3J0cy5sb2FkID0gZnVuY3Rpb24gKGxvY2F0aW9uLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgcmVhbE1ldGhvZCA9IG9wdGlvbnMubWV0aG9kID8gb3B0aW9ucy5tZXRob2QudG9Mb3dlckNhc2UoKSA6ICdnZXQnO1xuICB2YXIgZXJyO1xuICB2YXIgcmVhbFJlcXVlc3Q7XG5cbiAgZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGVyciwgcmVxKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYnVmZmVyKCkgaXMgb25seSBhdmFpbGFibGUgaW4gTm9kZS5qc1xuICAgICAgaWYgKHR5cGVvZiByZXEuYnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlcS5idWZmZXIodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJlcVxuICAgICAgICAuZW5kKGZ1bmN0aW9uIChlcnIyLCByZXMpIHtcbiAgICAgICAgICBpZiAoZXJyMikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyMik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5tZXRob2QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLm1ldGhvZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMubWV0aG9kIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnRlZEh0dHBNZXRob2RzLmluZGV4T2Yob3B0aW9ucy5tZXRob2QpID09PSAtMSkge1xuICAgICAgZXJyID0gbmV3IFR5cGVFcnJvcignb3B0aW9ucy5tZXRob2QgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogJyArXG4gICAgICAgIHN1cHBvcnRlZEh0dHBNZXRob2RzLnNsaWNlKDAsIHN1cHBvcnRlZEh0dHBNZXRob2RzLmxlbmd0aCAtIDEpLmpvaW4oJywgJykgKyAnIG9yICcgK1xuICAgICAgICBzdXBwb3J0ZWRIdHRwTWV0aG9kc1tzdXBwb3J0ZWRIdHRwTWV0aG9kcy5sZW5ndGggLSAxXSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLnByZXBhcmVSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0aW9ucy5wcmVwYXJlUmVxdWVzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMucHJlcGFyZVJlcXVlc3QgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAoIWVycikge1xuICAgIHJlYWxSZXF1ZXN0ID0gcmVxdWVzdFtyZWFsTWV0aG9kID09PSAnZGVsZXRlJyA/ICdkZWwnIDogcmVhbE1ldGhvZF0obG9jYXRpb24pO1xuXG4gICAgaWYgKG9wdGlvbnMucHJlcGFyZVJlcXVlc3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9wdGlvbnMucHJlcGFyZVJlcXVlc3QocmVhbFJlcXVlc3QsIG1ha2VSZXF1ZXN0KTtcbiAgICAgIH0gY2F0Y2ggKGVycjIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyMik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1ha2VSZXF1ZXN0KHVuZGVmaW5lZCwgcmVhbFJlcXVlc3QpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG59O1xuIiwidmFyIGlzYXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuLyoqXG4gKiBFeHBvc2UgYHBhdGhUb1JlZ2V4cGAuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gcGF0aFRvUmVnZXhwXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5tb2R1bGUuZXhwb3J0cy5jb21waWxlID0gY29tcGlsZVxubW9kdWxlLmV4cG9ydHMudG9rZW5zVG9GdW5jdGlvbiA9IHRva2Vuc1RvRnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzLnRva2Vuc1RvUmVnRXhwID0gdG9rZW5zVG9SZWdFeHBcblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbnZhciBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoW1xuICAvLyBNYXRjaCBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYXBwZWFyIGluIGZ1dHVyZSBtYXRjaGVzLlxuICAvLyBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgd29uJ3QgdHJhbnNmb3JtLlxuICAnKFxcXFxcXFxcLiknLFxuICAvLyBNYXRjaCBFeHByZXNzLXN0eWxlIHBhcmFtZXRlcnMgYW5kIHVuLW5hbWVkIHBhcmFtZXRlcnMgd2l0aCBhIHByZWZpeFxuICAvLyBhbmQgb3B0aW9uYWwgc3VmZml4ZXMuIE1hdGNoZXMgYXBwZWFyIGFzOlxuICAvL1xuICAvLyBcIi86dGVzdChcXFxcZCspP1wiID0+IFtcIi9cIiwgXCJ0ZXN0XCIsIFwiXFxkK1wiLCB1bmRlZmluZWQsIFwiP1wiLCB1bmRlZmluZWRdXG4gIC8vIFwiL3JvdXRlKFxcXFxkKylcIiAgPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiXFxkK1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgLy8gXCIvKlwiICAgICAgICAgICAgPT4gW1wiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiKlwiXVxuICAnKFtcXFxcLy5dKT8oPzooPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W14oKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpXG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHN0cikge1xuICB2YXIgdG9rZW5zID0gW11cbiAgdmFyIGtleSA9IDBcbiAgdmFyIGluZGV4ID0gMFxuICB2YXIgcGF0aCA9ICcnXG4gIHZhciByZXNcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdXG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV1cbiAgICB2YXIgb2Zmc2V0ID0gcmVzLmluZGV4XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldClcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoXG5cbiAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgcGF0aCArPSBlc2NhcGVkWzFdXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIFB1c2ggdGhlIGN1cnJlbnQgcGF0aCBvbnRvIHRoZSB0b2tlbnMuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gICAgICBwYXRoID0gJydcbiAgICB9XG5cbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdXG4gICAgdmFyIG5hbWUgPSByZXNbM11cbiAgICB2YXIgY2FwdHVyZSA9IHJlc1s0XVxuICAgIHZhciBncm91cCA9IHJlc1s1XVxuICAgIHZhciBzdWZmaXggPSByZXNbNl1cbiAgICB2YXIgYXN0ZXJpc2sgPSByZXNbN11cblxuICAgIHZhciByZXBlYXQgPSBzdWZmaXggPT09ICcrJyB8fCBzdWZmaXggPT09ICcqJ1xuICAgIHZhciBvcHRpb25hbCA9IHN1ZmZpeCA9PT0gJz8nIHx8IHN1ZmZpeCA9PT0gJyonXG4gICAgdmFyIGRlbGltaXRlciA9IHByZWZpeCB8fCAnLydcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXAgfHwgKGFzdGVyaXNrID8gJy4qJyA6ICdbXicgKyBkZWxpbWl0ZXIgKyAnXSs/JylcblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICBwYXR0ZXJuOiBlc2NhcGVHcm91cChwYXR0ZXJuKVxuICAgIH0pXG4gIH1cblxuICAvLyBNYXRjaCBhbnkgY2hhcmFjdGVycyBzdGlsbCByZW1haW5pbmcuXG4gIGlmIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBwYXRoICs9IHN0ci5zdWJzdHIoaW5kZXgpXG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCBleGlzdHMsIHB1c2ggaXQgb250byB0aGUgZW5kLlxuICBpZiAocGF0aCkge1xuICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgc3RyXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZSAoc3RyKSB7XG4gIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0cikpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aClcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14nICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnJCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgcGF0aCA9ICcnXG4gICAgdmFyIGRhdGEgPSBvYmogfHwge31cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcGF0aCArPSB0b2tlblxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV1cbiAgICAgIHZhciBzZWdtZW50XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBiZSBkZWZpbmVkJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNhcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBcIicgKyB2YWx1ZSArICdcIicpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWVbal0pXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIFwiJyArIHNlZ21lbnQgKyAnXCInKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSlcblxuICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgXCInICsgc2VnbWVudCArICdcIicpXG4gICAgICB9XG5cbiAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudFxuICAgIH1cblxuICAgIHJldHVybiBwYXRoXG4gIH1cbn1cblxuLyoqXG4gKiBFc2NhcGUgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKyo/PV4hOiR7fSgpW1xcXXxcXC9dKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBncm91cFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHtSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXNcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7UmVnRXhwfSBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpXG5cbiAgaWYgKGdyb3Vwcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHBhdGgsIGtleXMpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7QXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChwYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKVxuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/OicgKyBwYXJ0cy5qb2luKCd8JykgKyAnKScsIGZsYWdzKG9wdGlvbnMpKVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAga2V5c1xuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciB0b2tlbnMgPSBwYXJzZShwYXRoKVxuICB2YXIgcmUgPSB0b2tlbnNUb1JlZ0V4cCh0b2tlbnMsIG9wdGlvbnMpXG5cbiAgLy8gQXR0YWNoIGtleXMgYmFjayB0byB0aGUgcmVnZXhwLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAga2V5cy5wdXNoKHRva2Vuc1tpXSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhyZSwga2V5cylcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgdGFraW5nIHRva2VucyBhbmQgcmV0dXJuaW5nIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fSAgdG9rZW5zXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiB0b2tlbnNUb1JlZ0V4cCAodG9rZW5zLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2VcbiAgdmFyIHJvdXRlID0gJydcbiAgdmFyIGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1cbiAgdmFyIGVuZHNXaXRoU2xhc2ggPSB0eXBlb2YgbGFzdFRva2VuID09PSAnc3RyaW5nJyAmJiAvXFwvJC8udGVzdChsYXN0VG9rZW4pXG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB0b2tlbnMgYW5kIGNyZWF0ZSBvdXIgcmVnZXhwIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KVxuICAgICAgdmFyIGNhcHR1cmUgPSB0b2tlbi5wYXR0ZXJuXG5cbiAgICAgIGlmICh0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgY2FwdHVyZSArPSAnKD86JyArIHByZWZpeCArIGNhcHR1cmUgKyAnKSonXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAocHJlZml4KSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoPzonICsgcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpKT8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoJyArIGNhcHR1cmUgKyAnKT8nXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyknXG4gICAgICB9XG5cbiAgICAgIHJvdXRlICs9IGNhcHR1cmVcbiAgICB9XG4gIH1cblxuICAvLyBJbiBub24tc3RyaWN0IG1vZGUgd2UgYWxsb3cgYSBzbGFzaCBhdCB0aGUgZW5kIG9mIG1hdGNoLiBJZiB0aGUgcGF0aCB0b1xuICAvLyBtYXRjaCBhbHJlYWR5IGVuZHMgd2l0aCBhIHNsYXNoLCB3ZSByZW1vdmUgaXQgZm9yIGNvbnNpc3RlbmN5LiBUaGUgc2xhc2hcbiAgLy8gaXMgdmFsaWQgYXQgdGhlIGVuZCBvZiBhIHBhdGggbWF0Y2gsIG5vdCBpbiB0aGUgbWlkZGxlLiBUaGlzIGlzIGltcG9ydGFudFxuICAvLyBpbiBub24tZW5kaW5nIG1vZGUsIHdoZXJlIFwiL3Rlc3QvXCIgc2hvdWxkbid0IG1hdGNoIFwiL3Rlc3QvL3JvdXRlXCIuXG4gIGlmICghc3RyaWN0KSB7XG4gICAgcm91dGUgPSAoZW5kc1dpdGhTbGFzaCA/IHJvdXRlLnNsaWNlKDAsIC0yKSA6IHJvdXRlKSArICcoPzpcXFxcLyg/PSQpKT8nXG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgcm91dGUgKz0gJyQnXG4gIH0gZWxzZSB7XG4gICAgLy8gSW4gbm9uLWVuZGluZyBtb2RlLCB3ZSBuZWVkIHRoZSBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFzIG11Y2ggYXNcbiAgICAvLyBwb3NzaWJsZSBieSB1c2luZyBhIHBvc2l0aXZlIGxvb2thaGVhZCB0byB0aGUgZW5kIG9yIG5leHQgcGF0aCBzZWdtZW50LlxuICAgIHJvdXRlICs9IHN0cmljdCAmJiBlbmRzV2l0aFNsYXNoID8gJycgOiAnKD89XFxcXC98JCknXG4gIH1cblxuICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBnaXZlbiBwYXRoIHN0cmluZywgcmV0dXJuaW5nIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVtcHR5IGFycmF5IGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRoZSBrZXlzLCB3aGljaCB3aWxsIGhvbGQgdGhlXG4gKiBwbGFjZWhvbGRlciBrZXkgZGVzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgdXNpbmcgYC91c2VyLzppZGAsIGBrZXlzYCB3aWxsXG4gKiBjb250YWluIGBbeyBuYW1lOiAnaWQnLCBkZWxpbWl0ZXI6ICcvJywgb3B0aW9uYWw6IGZhbHNlLCByZXBlYXQ6IGZhbHNlIH1dYC5cbiAqXG4gKiBAcGFyYW0gIHsoU3RyaW5nfFJlZ0V4cHxBcnJheSl9IHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICAgICAgICAgICAgW2tleXNdXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgIFtvcHRpb25zXVxuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAga2V5cyA9IGtleXMgfHwgW11cblxuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0ga2V5c1xuICAgIGtleXMgPSBbXVxuICB9IGVsc2UgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKVxuICB9XG5cbiAgaWYgKGlzYXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gYXJyYXlUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKHBhdGgsIGtleXMsIG9wdGlvbnMpXG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsInZhciByZXQgPSByZXF1aXJlKCdyZXQnKTtcbnZhciBEUmFuZ2UgPSByZXF1aXJlKCdkaXNjb250aW51b3VzLXJhbmdlJyk7XG52YXIgdHlwZXMgPSByZXQudHlwZXM7XG5cblxuLyoqXG4gKiBJZiBjb2RlIGlzIGFscGhhYmV0aWMsIGNvbnZlcnRzIHRvIG90aGVyIGNhc2UuXG4gKiBJZiBub3QgYWxwaGFiZXRpYywgcmV0dXJucyBiYWNrIGNvZGUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gdG9PdGhlckNhc2UoY29kZSkge1xuICByZXR1cm4gY29kZSArICg5NyA8PSBjb2RlICYmIGNvZGUgPD0gMTIyID8gLTMyIDpcbiAgICAgICAgICAgICAgICAgNjUgPD0gY29kZSAmJiBjb2RlIDw9IDkwICA/ICAzMiA6IDApO1xufVxuXG5cbi8qKlxuICogUmFuZG9tbHkgcmV0dXJucyBhIHRydWUgb3IgZmFsc2UgdmFsdWUuXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmFuZEJvb2woKSB7XG4gIHJldHVybiAhdGhpcy5yYW5kSW50KDAsIDEpO1xufVxuXG5cbi8qKlxuICogUmFuZG9tbHkgc2VsZWN0cyBhbmQgcmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IGFyclxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiByYW5kU2VsZWN0KGFycikge1xuICBpZiAoYXJyIGluc3RhbmNlb2YgRFJhbmdlKSB7XG4gICAgcmV0dXJuIGFyci5pbmRleCh0aGlzLnJhbmRJbnQoMCwgYXJyLmxlbmd0aCAtIDEpKTtcbiAgfVxuICByZXR1cm4gYXJyW3RoaXMucmFuZEludCgwLCBhcnIubGVuZ3RoIC0gMSldO1xufVxuXG5cbi8qKlxuICogZXhwYW5kcyBhIHRva2VuIHRvIGEgRGlzY29udGludW91c1JhbmdlIG9mIGNoYXJhY3RlcnMgd2hpY2ggaGFzIGEgXG4gKiBsZW5ndGggYW5kIGFuIGluZGV4IGZ1bmN0aW9uIChmb3IgcmFuZG9tIHNlbGVjdGluZylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdG9rZW5cbiAqIEByZXR1cm4ge0Rpc2NvbnRpbnVvdXNSYW5nZX1cbiAqL1xuZnVuY3Rpb24gZXhwYW5kKHRva2VuKSB7XG4gIGlmICh0b2tlbi50eXBlID09PSByZXQudHlwZXMuQ0hBUikgcmV0dXJuIG5ldyBEUmFuZ2UodG9rZW4udmFsdWUpO1xuICBpZiAodG9rZW4udHlwZSA9PT0gcmV0LnR5cGVzLlJBTkdFKSByZXR1cm4gbmV3IERSYW5nZSh0b2tlbi5mcm9tLCB0b2tlbi50byk7XG4gIGlmICh0b2tlbi50eXBlID09PSByZXQudHlwZXMuU0VUKSB7XG4gICAgdmFyIGRyYW5nZSA9IG5ldyBEUmFuZ2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN1YnJhbmdlID0gZXhwYW5kLmNhbGwodGhpcywgdG9rZW4uc2V0W2ldKTtcbiAgICAgIGRyYW5nZS5hZGQoc3VicmFuZ2UpO1xuICAgICAgaWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YnJhbmdlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBzdWJyYW5nZS5pbmRleChqKTtcbiAgICAgICAgICB2YXIgb3RoZXJDYXNlQ29kZSA9IHRvT3RoZXJDYXNlKGNvZGUpO1xuICAgICAgICAgIGlmIChjb2RlICE9PSBvdGhlckNhc2VDb2RlKSB7XG4gICAgICAgICAgICBkcmFuZ2UuYWRkKG90aGVyQ2FzZUNvZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodG9rZW4ubm90KSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UmFuZ2UuY2xvbmUoKS5zdWJ0cmFjdChkcmFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZHJhbmdlO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwYW5kYWJsZSB0b2tlbiB0eXBlOiAnICsgdG9rZW4udHlwZSk7XG59XG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7UmVnRXhwfFN0cmluZ30gcmVnZXhwXG4gKiBAcGFyYW0ge1N0cmluZ30gbVxuICovXG52YXIgUmFuZEV4cCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocmVnZXhwLCBtKSB7XG4gIHRoaXMuZGVmYXVsdFJhbmdlID0gdGhpcy5kZWZhdWx0UmFuZ2UuY2xvbmUoKTtcbiAgaWYgKHJlZ2V4cCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHRoaXMuaWdub3JlQ2FzZSA9IHJlZ2V4cC5pZ25vcmVDYXNlO1xuICAgIHRoaXMubXVsdGlsaW5lID0gcmVnZXhwLm11bHRpbGluZTtcbiAgICBpZiAodHlwZW9mIHJlZ2V4cC5tYXggPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLm1heCA9IHJlZ2V4cC5tYXg7XG4gICAgfVxuICAgIHJlZ2V4cCA9IHJlZ2V4cC5zb3VyY2U7XG5cbiAgfSBlbHNlIGlmICh0eXBlb2YgcmVnZXhwID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuaWdub3JlQ2FzZSA9IG0gJiYgbS5pbmRleE9mKCdpJykgIT09IC0xO1xuICAgIHRoaXMubXVsdGlsaW5lID0gbSAmJiBtLmluZGV4T2YoJ20nKSAhPT0gLTE7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHJlZ2V4cCBvciBzdHJpbmcnKTtcbiAgfVxuXG4gIHRoaXMudG9rZW5zID0gcmV0KHJlZ2V4cCk7XG59O1xuXG5cbi8vIFdoZW4gYSByZXBldGl0aW9uYWwgdG9rZW4gaGFzIGl0cyBtYXggc2V0IHRvIEluZmluaXRlLFxuLy8gcmFuZGV4cCB3b24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhIHJhbmRvbSBhbW91bnQgYmV0d2VlbiBtaW4gYW5kIEluZmluaXRlXG4vLyBpbnN0ZWFkIGl0IHdpbGwgc2VlIEluZmluaXRlIGFzIG1pbiArIDEwMC5cblJhbmRFeHAucHJvdG90eXBlLm1heCA9IDEwMDtcblxuXG4vLyBHZW5lcmF0ZXMgdGhlIHJhbmRvbSBzdHJpbmcuXG5SYW5kRXhwLnByb3RvdHlwZS5nZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGdlbi5jYWxsKHRoaXMsIHRoaXMudG9rZW5zLCBbXSk7XG59O1xuXG5cbi8vIEVuYWJsZXMgdXNlIG9mIHJhbmRleHAgd2l0aCBhIHNob3J0ZXIgY2FsbC5cblJhbmRFeHAucmFuZGV4cCA9IGZ1bmN0aW9uKHJlZ2V4cCwgbSkge1xuICB2YXIgcmFuZGV4cDtcblxuICBpZiAocmVnZXhwLl9yYW5kZXhwID09PSB1bmRlZmluZWQpIHtcbiAgICByYW5kZXhwID0gbmV3IFJhbmRFeHAocmVnZXhwLCBtKTtcbiAgICByZWdleHAuX3JhbmRleHAgPSByYW5kZXhwO1xuICB9IGVsc2Uge1xuICAgIHJhbmRleHAgPSByZWdleHAuX3JhbmRleHA7XG4gICAgaWYgKHR5cGVvZiByZWdleHAubWF4ID09PSAnbnVtYmVyJykge1xuICAgICAgcmFuZGV4cC5tYXggPSByZWdleHAubWF4O1xuICAgIH1cbiAgICBpZiAocmVnZXhwLmRlZmF1bHRSYW5nZSBpbnN0YW5jZW9mIERSYW5nZSkge1xuICAgICAgcmFuZGV4cC5kZWZhdWx0UmFuZ2UgPSByZWdleHAuZGVmYXVsdFJhbmdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlZ2V4cC5yYW5kSW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByYW5kZXhwLnJhbmRJbnQgPSByZWdleHAucmFuZEludDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmFuZGV4cC5nZW4oKTtcbn07XG5cblxuLy8gVGhpcyBlbmFibGVzIHN1Z2FyeSAvcmVnZXhwLy5nZW4gc3ludGF4LlxuUmFuZEV4cC5zdWdhciA9IGZ1bmN0aW9uKCkge1xuICAvKiBqc2hpbnQgZnJlZXplOmZhbHNlICovXG4gIFJlZ0V4cC5wcm90b3R5cGUuZ2VuID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJhbmRFeHAucmFuZGV4cCh0aGlzKTtcbiAgfTtcbn07XG5cbi8vIFRoaXMgYWxsb3dzIGV4cGFuZGluZyB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY2hhcmFjdGVyc1xuLy8gZm9yIGluc3RhbmNlOiBSYW5kRXhwLmRlZmF1bHRSYW5nZS5hZGQoMCwgNjU1MzUpO1xuUmFuZEV4cC5wcm90b3R5cGUuZGVmYXVsdFJhbmdlID0gbmV3IERSYW5nZSgzMiwgMTI2KTtcblxuXG4vKipcbiAqIFJhbmRvbWx5IGdlbmVyYXRlcyBhbmQgcmV0dXJucyBhIG51bWJlciBiZXR3ZWVuIGEgYW5kIGIgKGluY2x1c2l2ZSkuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGFcbiAqIEBwYXJhbSB7TnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cblJhbmRFeHAucHJvdG90eXBlLnJhbmRJbnQgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDEgKyBiIC0gYSkpO1xufTtcblxuXG4vKipcbiAqIEdlbmVyYXRlIHJhbmRvbSBzdHJpbmcgbW9kZWxlZCBhZnRlciBnaXZlbiB0b2tlbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRva2VuXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBncm91cHNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2VuKHRva2VuLCBncm91cHMpIHtcbiAgdmFyIHN0YWNrLCBzdHIsIG4sIGksIGw7XG5cbiAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG5cblxuICAgIGNhc2UgdHlwZXMuUk9PVDpcbiAgICBjYXNlIHR5cGVzLkdST1VQOlxuICAgICAgaWYgKHRva2VuLm5vdEZvbGxvd2VkQnkpIHsgcmV0dXJuICcnOyB9XG5cbiAgICAgIC8vIEluc2VydCBwbGFjZWhvbGRlciB1bnRpbCBncm91cCBzdHJpbmcgaXMgZ2VuZXJhdGVkLlxuICAgICAgaWYgKHRva2VuLnJlbWVtYmVyICYmIHRva2VuLmdyb3VwTnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdG9rZW4uZ3JvdXBOdW1iZXIgPSBncm91cHMucHVzaChudWxsKSAtIDE7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrID0gdG9rZW4ub3B0aW9ucyA/XG4gICAgICAgIHJhbmRTZWxlY3QuY2FsbCh0aGlzLCB0b2tlbi5vcHRpb25zKSA6IHRva2VuLnN0YWNrO1xuXG4gICAgICBzdHIgPSAnJztcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBzdGFjay5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGdlbi5jYWxsKHRoaXMsIHN0YWNrW2ldLCBncm91cHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ucmVtZW1iZXIpIHtcbiAgICAgICAgZ3JvdXBzW3Rva2VuLmdyb3VwTnVtYmVyXSA9IHN0cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG5cblxuICAgIGNhc2UgdHlwZXMuUE9TSVRJT046XG4gICAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuXG4gICAgICByZXR1cm4gJyc7XG5cblxuICAgIGNhc2UgdHlwZXMuU0VUOlxuICAgICAgdmFyIGV4cGFuZGVkX3NldCA9IGV4cGFuZC5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICAgIGlmICghZXhwYW5kZWRfc2V0Lmxlbmd0aCkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocmFuZFNlbGVjdC5jYWxsKHRoaXMsIGV4cGFuZGVkX3NldCkpO1xuXG5cbiAgICBjYXNlIHR5cGVzLlJFUEVUSVRJT046XG4gICAgICAvLyBSYW5kb21seSBnZW5lcmF0ZSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAgICAgIG4gPSB0aGlzLnJhbmRJbnQodG9rZW4ubWluLFxuICAgICAgICAgICAgICB0b2tlbi5tYXggPT09IEluZmluaXR5ID8gdG9rZW4ubWluICsgdGhpcy5tYXggOiB0b2tlbi5tYXgpO1xuXG4gICAgICBzdHIgPSAnJztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGdlbi5jYWxsKHRoaXMsIHRva2VuLnZhbHVlLCBncm91cHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyO1xuXG5cbiAgICBjYXNlIHR5cGVzLlJFRkVSRU5DRTpcbiAgICAgIHJldHVybiBncm91cHNbdG9rZW4udmFsdWUgLSAxXSB8fCAnJztcblxuXG4gICAgY2FzZSB0eXBlcy5DSEFSOlxuICAgICAgdmFyIGNvZGUgPSB0aGlzLmlnbm9yZUNhc2UgJiYgcmFuZEJvb2wuY2FsbCh0aGlzKSA/XG4gICAgICAgIHRvT3RoZXJDYXNlKHRva2VuLnZhbHVlKSA6IHRva2VuLnZhbHVlO1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gIH1cbn1cblxuXG4iLCJcbi8qKlxuICogUmVkdWNlIGBhcnJgIHdpdGggYGZuYC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge01peGVkfSBpbml0aWFsXG4gKlxuICogVE9ETzogY29tYmF0aWJsZSBlcnJvciBoYW5kbGluZz9cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGFyciwgZm4sIGluaXRpYWwpeyAgXG4gIHZhciBpZHggPSAwO1xuICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgdmFyIGN1cnIgPSBhcmd1bWVudHMubGVuZ3RoID09IDNcbiAgICA/IGluaXRpYWxcbiAgICA6IGFycltpZHgrK107XG5cbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGN1cnIgPSBmbi5jYWxsKG51bGwsIGN1cnIsIGFycltpZHhdLCArK2lkeCwgYXJyKTtcbiAgfVxuICBcbiAgcmV0dXJuIGN1cnI7XG59OyIsInZhciB1dGlsICAgICAgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciB0eXBlcyAgICAgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG52YXIgc2V0cyAgICAgID0gcmVxdWlyZSgnLi9zZXRzJyk7XG52YXIgcG9zaXRpb25zID0gcmVxdWlyZSgnLi9wb3NpdGlvbnMnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHJlZ2V4cFN0cikge1xuICB2YXIgaSA9IDAsIGwsIGMsXG4gICAgICBzdGFydCA9IHsgdHlwZTogdHlwZXMuUk9PVCwgc3RhY2s6IFtdfSxcblxuICAgICAgLy8gS2VlcCB0cmFjayBvZiBsYXN0IGNsYXVzZS9ncm91cCBhbmQgc3RhY2suXG4gICAgICBsYXN0R3JvdXAgPSBzdGFydCxcbiAgICAgIGxhc3QgPSBzdGFydC5zdGFjayxcbiAgICAgIGdyb3VwU3RhY2sgPSBbXTtcblxuXG4gIHZhciByZXBlYXRFcnIgPSBmdW5jdGlvbihpKSB7XG4gICAgdXRpbC5lcnJvcihyZWdleHBTdHIsICdOb3RoaW5nIHRvIHJlcGVhdCBhdCBjb2x1bW4gJyArIChpIC0gMSkpO1xuICB9O1xuXG4gIC8vIERlY29kZSBhIGZldyBlc2NhcGVkIGNoYXJhY3RlcnMuXG4gIHZhciBzdHIgPSB1dGlsLnN0clRvQ2hhcnMocmVnZXhwU3RyKTtcbiAgbCA9IHN0ci5sZW5ndGg7XG5cbiAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggY2hhcmFjdGVyIGluIHN0cmluZy5cbiAgd2hpbGUgKGkgPCBsKSB7XG4gICAgYyA9IHN0cltpKytdO1xuXG4gICAgc3dpdGNoIChjKSB7XG4gICAgICAvLyBIYW5kbGUgZXNjYXBlZCBjaGFyYWN0ZXJzLCBpbmNsdWVzIGEgZmV3IHNldHMuXG4gICAgICBjYXNlICdcXFxcJzpcbiAgICAgICAgYyA9IHN0cltpKytdO1xuXG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgIGNhc2UgJ2InOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHBvc2l0aW9ucy53b3JkQm91bmRhcnkoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHBvc2l0aW9ucy5ub25Xb3JkQm91bmRhcnkoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMud29yZHMoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMubm90V29yZHMoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMuaW50cygpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICBsYXN0LnB1c2goc2V0cy5ub3RJbnRzKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLndoaXRlc3BhY2UoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ1MnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMubm90V2hpdGVzcGFjZSgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGMgaXMgaW50ZWdlci5cbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2UgaXQncyBhIHJlZmVyZW5jZS5cbiAgICAgICAgICAgIGlmICgvXFxkLy50ZXN0KGMpKSB7XG4gICAgICAgICAgICAgIGxhc3QucHVzaCh7IHR5cGU6IHR5cGVzLlJFRkVSRU5DRSwgdmFsdWU6IHBhcnNlSW50KGMsIDEwKSB9KTtcblxuICAgICAgICAgICAgLy8gRXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsYXN0LnB1c2goeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogYy5jaGFyQ29kZUF0KDApIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cblxuICAgICAgLy8gUG9zaXRpb25hbHMuXG4gICAgICBjYXNlICdeJzpcbiAgICAgICAgICBsYXN0LnB1c2gocG9zaXRpb25zLmJlZ2luKCkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgbGFzdC5wdXNoKHBvc2l0aW9ucy5lbmQoKSk7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIEhhbmRsZSBjdXN0b20gc2V0cy5cbiAgICAgIGNhc2UgJ1snOlxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGNsYXNzIGlzICdhbnRpJyBpLmUuIFteYWJjXS5cbiAgICAgICAgdmFyIG5vdDtcbiAgICAgICAgaWYgKHN0cltpXSA9PT0gJ14nKSB7XG4gICAgICAgICAgbm90ID0gdHJ1ZTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm90ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgYWxsIHRoZSBjaGFyYWN0ZXJzIGluIGNsYXNzLlxuICAgICAgICB2YXIgY2xhc3NUb2tlbnMgPSB1dGlsLnRva2VuaXplQ2xhc3Moc3RyLnNsaWNlKGkpLCByZWdleHBTdHIpO1xuXG4gICAgICAgIC8vIEluY3JlYXNlIGluZGV4IGJ5IGxlbmd0aCBvZiBjbGFzcy5cbiAgICAgICAgaSArPSBjbGFzc1Rva2Vuc1sxXTtcbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLlNFVFxuICAgICAgICAgICwgc2V0OiBjbGFzc1Rva2Vuc1swXVxuICAgICAgICAgICwgbm90OiBub3RcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJlYWs7XG5cblxuICAgICAgLy8gQ2xhc3Mgb2YgYW55IGNoYXJhY3RlciBleGNlcHQgXFxuLlxuICAgICAgY2FzZSAnLic6XG4gICAgICAgIGxhc3QucHVzaChzZXRzLmFueUNoYXIoKSk7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIFB1c2ggZ3JvdXAgb250byBzdGFjay5cbiAgICAgIGNhc2UgJygnOlxuICAgICAgICAvLyBDcmVhdGUgZ3JvdXAuXG4gICAgICAgIHZhciBncm91cCA9IHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLkdST1VQXG4gICAgICAgICAgLCBzdGFjazogW11cbiAgICAgICAgICAsIHJlbWVtYmVyOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgYyA9IHN0cltpXTtcblxuICAgICAgICAvLyBpZiBpZiB0aGlzIGlzIGEgc3BlY2lhbCBraW5kIG9mIGdyb3VwLlxuICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgYyA9IHN0cltpICsgMV07XG4gICAgICAgICAgaSArPSAyO1xuXG4gICAgICAgICAgLy8gTWF0Y2ggaWYgZm9sbG93ZWQgYnkuXG4gICAgICAgICAgaWYgKGMgPT09ICc9Jykge1xuICAgICAgICAgICAgZ3JvdXAuZm9sbG93ZWRCeSA9IHRydWU7XG5cbiAgICAgICAgICAvLyBNYXRjaCBpZiBub3QgZm9sbG93ZWQgYnkuXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnIScpIHtcbiAgICAgICAgICAgIGdyb3VwLm5vdEZvbGxvd2VkQnkgPSB0cnVlO1xuXG4gICAgICAgICAgfSBlbHNlIGlmIChjICE9PSAnOicpIHtcbiAgICAgICAgICAgIHV0aWwuZXJyb3IocmVnZXhwU3RyLFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGdyb3VwLCBjaGFyYWN0ZXIgXFwnJyArIGMgKyAnXFwnIGFmdGVyIFxcJz9cXCcgYXQgY29sdW1uICcgK1xuICAgICAgICAgICAgICAgIChpIC0gMSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdyb3VwLnJlbWVtYmVyID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbnNlcnQgc3ViZ3JvdXAgaW50byBjdXJyZW50IGdyb3VwIHN0YWNrLlxuICAgICAgICBsYXN0LnB1c2goZ3JvdXApO1xuXG4gICAgICAgIC8vIFJlbWVtYmVyIHRoZSBjdXJyZW50IGdyb3VwIGZvciB3aGVuIHRoZSBncm91cCBjbG9zZXMuXG4gICAgICAgIGdyb3VwU3RhY2sucHVzaChsYXN0R3JvdXApO1xuXG4gICAgICAgIC8vIE1ha2UgdGhpcyBuZXcgZ3JvdXAgdGhlIGN1cnJlbnQgZ3JvdXAuXG4gICAgICAgIGxhc3RHcm91cCA9IGdyb3VwO1xuICAgICAgICBsYXN0ID0gZ3JvdXAuc3RhY2s7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIFBvcCBncm91cCBvdXQgb2Ygc3RhY2suXG4gICAgICBjYXNlICcpJzpcbiAgICAgICAgaWYgKGdyb3VwU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdXRpbC5lcnJvcihyZWdleHBTdHIsICdVbm1hdGNoZWQgKSBhdCBjb2x1bW4gJyArIChpIC0gMSkpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RHcm91cCA9IGdyb3VwU3RhY2sucG9wKCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBncm91cCBoYXMgYSBQSVBFLlxuICAgICAgICAvLyBUbyBnZXQgYmFjayB0aGUgY29ycmVjdCBsYXN0IHN0YWNrLlxuICAgICAgICBsYXN0ID0gbGFzdEdyb3VwLm9wdGlvbnMgPyBsYXN0R3JvdXAub3B0aW9uc1tsYXN0R3JvdXAub3B0aW9ucy5sZW5ndGggLSAxXSA6IGxhc3RHcm91cC5zdGFjaztcbiAgICAgICAgYnJlYWs7XG5cblxuICAgICAgLy8gVXNlIHBpcGUgY2hhcmFjdGVyIHRvIGdpdmUgbW9yZSBjaG9pY2VzLlxuICAgICAgY2FzZSAnfCc6XG4gICAgICAgIC8vIENyZWF0ZSBhcnJheSB3aGVyZSBvcHRpb25zIGFyZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBQSVBFXG4gICAgICAgIC8vIGluIHRoaXMgY2xhdXNlLlxuICAgICAgICBpZiAoIWxhc3RHcm91cC5vcHRpb25zKSB7XG4gICAgICAgICAgbGFzdEdyb3VwLm9wdGlvbnMgPSBbbGFzdEdyb3VwLnN0YWNrXTtcbiAgICAgICAgICBkZWxldGUgbGFzdEdyb3VwLnN0YWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHN0YWNrIGFuZCBhZGQgdG8gb3B0aW9ucyBmb3IgcmVzdCBvZiBjbGF1c2UuXG4gICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICBsYXN0R3JvdXAub3B0aW9ucy5wdXNoKHN0YWNrKTtcbiAgICAgICAgbGFzdCA9IHN0YWNrO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBSZXBldGl0aW9uLlxuICAgICAgLy8gRm9yIGV2ZXJ5IHJlcGV0aXRpb24sIHJlbW92ZSBsYXN0IGVsZW1lbnQgZnJvbSBsYXN0IHN0YWNrXG4gICAgICAvLyB0aGVuIGluc2VydCBiYWNrIGEgUkFOR0Ugb2JqZWN0LlxuICAgICAgLy8gVGhpcyBkZXNpZ24gaXMgY2hvc2VuIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuXG4gICAgICAvLyBvbmUgcmVwZXRpdGlvbiBzeW1ib2xzIGluIGEgcmVnZXggaS5lLiBgYT8rezIsM31gLlxuICAgICAgY2FzZSAneyc6XG4gICAgICAgIHZhciBycyA9IC9eKFxcZCspKCwoXFxkKyk/KT9cXH0vLmV4ZWMoc3RyLnNsaWNlKGkpKSwgbWluLCBtYXg7XG4gICAgICAgIGlmIChycyAhPT0gbnVsbCkge1xuICAgICAgICAgIG1pbiA9IHBhcnNlSW50KHJzWzFdLCAxMCk7XG4gICAgICAgICAgbWF4ID0gcnNbMl0gPyByc1szXSA/IHBhcnNlSW50KHJzWzNdLCAxMCkgOiBJbmZpbml0eSA6IG1pbjtcbiAgICAgICAgICBpICs9IHJzWzBdLmxlbmd0aDtcblxuICAgICAgICAgIGxhc3QucHVzaCh7XG4gICAgICAgICAgICAgIHR5cGU6IHR5cGVzLlJFUEVUSVRJT05cbiAgICAgICAgICAgICwgbWluOiBtaW5cbiAgICAgICAgICAgICwgbWF4OiBtYXhcbiAgICAgICAgICAgICwgdmFsdWU6IGxhc3QucG9wKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0LnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5DSEFSXG4gICAgICAgICAgICAsIHZhbHVlOiAxMjNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnPyc6XG4gICAgICAgIGlmIChsYXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJlcGVhdEVycihpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0LnB1c2goe1xuICAgICAgICAgICAgdHlwZTogdHlwZXMuUkVQRVRJVElPTlxuICAgICAgICAgICwgbWluOiAwXG4gICAgICAgICAgLCBtYXg6IDFcbiAgICAgICAgICAsIHZhbHVlOiBsYXN0LnBvcCgpXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnKyc6XG4gICAgICAgIGlmIChsYXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJlcGVhdEVycihpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0LnB1c2goe1xuICAgICAgICAgICAgdHlwZTogdHlwZXMuUkVQRVRJVElPTlxuICAgICAgICAgICwgbWluOiAxXG4gICAgICAgICAgLCBtYXg6IEluZmluaXR5XG4gICAgICAgICAgLCB2YWx1ZTogbGFzdC5wb3AoKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJyonOlxuICAgICAgICBpZiAobGFzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXBlYXRFcnIoaSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLlJFUEVUSVRJT05cbiAgICAgICAgICAsIG1pbjogMFxuICAgICAgICAgICwgbWF4OiBJbmZpbml0eVxuICAgICAgICAgICwgdmFsdWU6IGxhc3QucG9wKClcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIERlZmF1bHQgaXMgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYFxcW10oKXt9PysqXiRgLlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLkNIQVJcbiAgICAgICAgICAsIHZhbHVlOiBjLmNoYXJDb2RlQXQoMClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICAvLyBDaGVjayBpZiBhbnkgZ3JvdXBzIGhhdmUgbm90IGJlZW4gY2xvc2VkLlxuICBpZiAoZ3JvdXBTdGFjay5sZW5ndGggIT09IDApIHtcbiAgICB1dGlsLmVycm9yKHJlZ2V4cFN0ciwgJ1VudGVybWluYXRlZCBncm91cCcpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0O1xufTtcblxubW9kdWxlLmV4cG9ydHMudHlwZXMgPSB0eXBlcztcbiIsInZhciB0eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcblxuZXhwb3J0cy53b3JkQm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuUE9TSVRJT04sIHZhbHVlOiAnYicgfTtcbn07XG5cbmV4cG9ydHMubm9uV29yZEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlBPU0lUSU9OLCB2YWx1ZTogJ0InIH07XG59O1xuXG5leHBvcnRzLmJlZ2luID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlBPU0lUSU9OLCB2YWx1ZTogJ14nIH07XG59O1xuXG5leHBvcnRzLmVuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5QT1NJVElPTiwgdmFsdWU6ICckJyB9O1xufTtcbiIsInZhciB0eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcblxudmFyIElOVFMgPSBmdW5jdGlvbigpIHtcbiByZXR1cm4gW3sgdHlwZTogdHlwZXMuUkFOR0UgLCBmcm9tOiA0OCwgdG86IDU3IH1dO1xufTtcblxudmFyIFdPUkRTID0gZnVuY3Rpb24oKSB7XG4gcmV0dXJuIFtcbiAgICAgIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDk1IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuUkFOR0UsIGZyb206IDk3LCB0bzogMTIyIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuUkFOR0UsIGZyb206IDY1LCB0bzogOTAgfVxuICBdLmNvbmNhdChJTlRTKCkpO1xufTtcblxudmFyIFdISVRFU1BBQ0UgPSBmdW5jdGlvbigpIHtcbiByZXR1cm4gW1xuICAgICAgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogOSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAzMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxNjAgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogNTc2MCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA2MTU4IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5MyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTk0IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTUgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5NiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTk3IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTggfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5OSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjAwIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMDEgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIwMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjMyIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMzMgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIzOSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4Mjg3IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDEyMjg4IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDY1Mjc5IH1cbiAgXTtcbn07XG5cbnZhciBOT1RBTllDSEFSID0gZnVuY3Rpb24oKSB7XG4gcmV0dXJuIFtcbiAgICAgIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDEwIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDEzIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMzIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIzMyB9XG4gIF07XG59O1xuXG4vLyBwcmVkZWZpbmVkIGNsYXNzIG9iamVjdHNcbmV4cG9ydHMud29yZHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IFdPUkRTKCksIG5vdDogZmFsc2UgfTtcbn07XG5cbmV4cG9ydHMubm90V29yZHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IFdPUkRTKCksIG5vdDogdHJ1ZSB9O1xufTtcblxuZXhwb3J0cy5pbnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBJTlRTKCksIG5vdDogZmFsc2UgfTtcbn07XG5cbmV4cG9ydHMubm90SW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5TRVQsIHNldDogSU5UUygpLCBub3Q6IHRydWUgfTtcbn07XG5cbmV4cG9ydHMud2hpdGVzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5TRVQsIHNldDogV0hJVEVTUEFDRSgpLCBub3Q6IGZhbHNlIH07XG59O1xuXG5leHBvcnRzLm5vdFdoaXRlc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IFdISVRFU1BBQ0UoKSwgbm90OiB0cnVlIH07XG59O1xuXG5leHBvcnRzLmFueUNoYXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IE5PVEFOWUNIQVIoKSwgbm90OiB0cnVlIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUk9PVCAgICAgICA6IDBcbiAgLCBHUk9VUCAgICAgIDogMVxuICAsIFBPU0lUSU9OICAgOiAyXG4gICwgU0VUICAgICAgICA6IDNcbiAgLCBSQU5HRSAgICAgIDogNFxuICAsIFJFUEVUSVRJT04gOiA1XG4gICwgUkVGRVJFTkNFICA6IDZcbiAgLCBDSEFSICAgICAgIDogN1xufTtcbiIsInZhciB0eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcbnZhciBzZXRzICA9IHJlcXVpcmUoJy4vc2V0cycpO1xuXG5cbi8vIEFsbCBvZiB0aGVzZSBhcmUgcHJpdmF0ZSBhbmQgb25seSB1c2VkIGJ5IHJhbmRleHAuXG4vLyBJdCdzIGFzc3VtZWQgdGhhdCB0aGV5IHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHRoZSBjb3JyZWN0IGlucHV0LlxuXG52YXIgQ1RSTCA9ICdAQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eID8nO1xudmFyIFNMU0ggPSB7ICcwJzogMCwgJ3QnOiA5LCAnbic6IDEwLCAndic6IDExLCAnZic6IDEyLCAncic6IDEzIH07XG5cbi8qKlxuICogRmluZHMgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9ucyBpbiBzdHIgYW5kIGNvbnZlcnQgYWxsIHRvXG4gKiB0aGVpciByZXNwZWN0aXZlIGNoYXJhY3RlcnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuc3RyVG9DaGFycyA9IGZ1bmN0aW9uKHN0cikge1xuICB2YXIgY2hhcnNfcmVnZXggPSAvKFxcW1xcXFxiXFxdKXwoXFxcXCk/XFxcXCg/OnUoW0EtRjAtOV17NH0pfHgoW0EtRjAtOV17Mn0pfCgwP1swLTddezJ9KXxjKFtAQS1aXFxbXFxcXFxcXVxcXj9dKXwoWzB0bnZmcl0pKS9nO1xuICBzdHIgPSBzdHIucmVwbGFjZShjaGFyc19yZWdleCwgZnVuY3Rpb24ocywgYiwgbGJzLCBhMTYsIGIxNiwgYzgsIGRjdHJsLCBlc2xzaCkge1xuICAgIFxuICAgIGlmIChsYnMpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gYiAgICAgPyA4IDpcbiAgICAgICAgICAgICAgIGExNiAgID8gcGFyc2VJbnQoYTE2LCAxNikgOlxuICAgICAgICAgICAgICAgYjE2ICAgPyBwYXJzZUludChiMTYsIDE2KSA6XG4gICAgICAgICAgICAgICBjOCAgICA/IHBhcnNlSW50KGM4LCAgIDgpIDpcbiAgICAgICAgICAgICAgIGRjdHJsID8gQ1RSTC5pbmRleE9mKGRjdHJsKSA6XG4gICAgICAgICAgICAgICBlc2xzaCA/IFNMU0hbZXNsc2hdIDogdW5kZWZpbmVkO1xuICAgIFxuICAgIHZhciBjID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIC8vIEVzY2FwZSBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnMuXG4gICAgaWYgKC9bXFxbXFxde31cXF4kLnw/KisoKV0vLnRlc3QoYykpIHtcbiAgICAgIGMgPSAnXFxcXCcgKyBjO1xuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9KTtcblxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vKipcbiAqIHR1cm5zIGNsYXNzIGludG8gdG9rZW5zXG4gKiByZWFkcyBzdHIgdW50aWwgaXQgZW5jb3VudGVycyBhIF0gbm90IHByZWNlZWRlZCBieSBhIFxcXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHJlZ2V4cFN0clxuICogQHJldHVybiB7QXJyYXkuPEFycmF5LjxPYmplY3Q+LCBOdW1iZXI+fVxuICovXG5leHBvcnRzLnRva2VuaXplQ2xhc3MgPSBmdW5jdGlvbihzdHIsIHJlZ2V4cFN0cikge1xuICB2YXIgdG9rZW5zID0gW11cbiAgICAsIHJlZ2V4cCA9IC9cXFxcKD86KHcpfChkKXwocyl8KFcpfChEKXwoUykpfCgoPzooPzpcXFxcKSguKXwoW15cXF1cXFxcXSkpLSg/OlxcXFwpPyhbXlxcXV0pKXwoXFxdKXwoPzpcXFxcKT8oLikvZ1xuICAgICwgcnMsIGNcbiAgICA7XG5cblxuICB3aGlsZSAoKHJzID0gcmVnZXhwLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIGlmIChyc1sxXSkge1xuICAgICAgdG9rZW5zLnB1c2goc2V0cy53b3JkcygpKTtcblxuICAgIH0gZWxzZSBpZiAocnNbMl0pIHtcbiAgICAgIHRva2Vucy5wdXNoKHNldHMuaW50cygpKTtcblxuICAgIH0gZWxzZSBpZiAocnNbM10pIHtcbiAgICAgIHRva2Vucy5wdXNoKHNldHMud2hpdGVzcGFjZSgpKTtcblxuICAgIH0gZWxzZSBpZiAocnNbNF0pIHtcbiAgICAgIHRva2Vucy5wdXNoKHNldHMubm90V29yZHMoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzVdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLm5vdEludHMoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzZdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLm5vdFdoaXRlc3BhY2UoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzddKSB7XG4gICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogdHlwZXMuUkFOR0VcbiAgICAgICAgLCBmcm9tOiAocnNbOF0gfHwgcnNbOV0pLmNoYXJDb2RlQXQoMClcbiAgICAgICAgLCAgIHRvOiByc1sxMF0uY2hhckNvZGVBdCgwKVxuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKGMgPSByc1sxMl0pIHtcbiAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiB0eXBlcy5DSEFSXG4gICAgICAgICwgdmFsdWU6IGMuY2hhckNvZGVBdCgwKVxuICAgICAgfSk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFt0b2tlbnMsIHJlZ2V4cC5sYXN0SW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydHMuZXJyb3IocmVnZXhwU3RyLCAnVW50ZXJtaW5hdGVkIGNoYXJhY3RlciBjbGFzcycpO1xufTtcblxuXG4vKipcbiAqIFNob3J0Y3V0IHRvIHRocm93IGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVnZXhwXG4gKiBAcGFyYW0ge1N0cmluZ30gbXNnXG4gKi9cbmV4cG9ydHMuZXJyb3IgPSBmdW5jdGlvbihyZWdleHAsIG1zZykge1xuICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAvJyArIHJlZ2V4cCArICcvOiAnICsgbXNnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0dmFyIGlzRXh0ZW5kZWRMZW5ndGhQYXRoID0gL15cXFxcXFxcXFxcP1xcXFwvLnRlc3Qoc3RyKTtcblx0dmFyIGhhc05vbkFzY2lpID0gL1teXFx4MDAtXFx4ODBdKy8udGVzdChzdHIpO1xuXG5cdGlmIChpc0V4dGVuZGVkTGVuZ3RoUGF0aCB8fCBoYXNOb25Bc2NpaSkge1xuXHRcdHJldHVybiBzdHI7XG5cdH1cblxuXHRyZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn07XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIEVtaXR0ZXIgPSByZXF1aXJlKCdlbWl0dGVyJyk7XG52YXIgcmVkdWNlID0gcmVxdWlyZSgncmVkdWNlJyk7XG5cbi8qKlxuICogUm9vdCByZWZlcmVuY2UgZm9yIGlmcmFtZXMuXG4gKi9cblxudmFyIHJvb3Q7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gQnJvd3NlciB3aW5kb3dcbiAgcm9vdCA9IHdpbmRvdztcbn0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IC8vIFdlYiBXb3JrZXJcbiAgcm9vdCA9IHNlbGY7XG59IGVsc2UgeyAvLyBPdGhlciBlbnZpcm9ubWVudHNcbiAgcm9vdCA9IHRoaXM7XG59XG5cbi8qKlxuICogTm9vcC5cbiAqL1xuXG5mdW5jdGlvbiBub29wKCl7fTtcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIGhvc3Qgb2JqZWN0LFxuICogd2UgZG9uJ3Qgd2FudCB0byBzZXJpYWxpemUgdGhlc2UgOilcbiAqXG4gKiBUT0RPOiBmdXR1cmUgcHJvb2YsIG1vdmUgdG8gY29tcG9lbnQgbGFuZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0hvc3Qob2JqKSB7XG4gIHZhciBzdHIgPSB7fS50b1N0cmluZy5jYWxsKG9iaik7XG5cbiAgc3dpdGNoIChzdHIpIHtcbiAgICBjYXNlICdbb2JqZWN0IEZpbGVdJzpcbiAgICBjYXNlICdbb2JqZWN0IEJsb2JdJzpcbiAgICBjYXNlICdbb2JqZWN0IEZvcm1EYXRhXSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIFhIUi5cbiAqL1xuXG5yZXF1ZXN0LmdldFhIUiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHJvb3QuWE1MSHR0cFJlcXVlc3RcbiAgICAgICYmICghcm9vdC5sb2NhdGlvbiB8fCAnZmlsZTonICE9IHJvb3QubG9jYXRpb24ucHJvdG9jb2xcbiAgICAgICAgICB8fCAhcm9vdC5BY3RpdmVYT2JqZWN0KSkge1xuICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3Q7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHsgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpOyB9IGNhdGNoKGUpIHt9XG4gICAgdHJ5IHsgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNc3htbDIuWE1MSFRUUC42LjAnKTsgfSBjYXRjaChlKSB7fVxuICAgIHRyeSB7IHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTXN4bWwyLlhNTEhUVFAuMy4wJyk7IH0gY2F0Y2goZSkge31cbiAgICB0cnkgeyByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyk7IH0gY2F0Y2goZSkge31cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYWRkZWQgdG8gc3VwcG9ydCBJRS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxudmFyIHRyaW0gPSAnJy50cmltXG4gID8gZnVuY3Rpb24ocykgeyByZXR1cm4gcy50cmltKCk7IH1cbiAgOiBmdW5jdGlvbihzKSB7IHJldHVybiBzLnJlcGxhY2UoLyheXFxzKnxcXHMqJCkvZywgJycpOyB9O1xuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogPT09IE9iamVjdChvYmopO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gYG9iamAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2VyaWFsaXplKG9iaikge1xuICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gIHZhciBwYWlycyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKG51bGwgIT0gb2JqW2tleV0pIHtcbiAgICAgIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIG9ialtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICByZXR1cm4gcGFpcnMuam9pbignJicpO1xufVxuXG4vKipcbiAqIEhlbHBzICdzZXJpYWxpemUnIHdpdGggc2VyaWFsaXppbmcgYXJyYXlzLlxuICogTXV0YXRlcyB0aGUgcGFpcnMgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcGFpcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICovXG5cbmZ1bmN0aW9uIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIHZhbCkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbC5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICAgIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIHYpO1xuICAgIH0pO1xuICB9XG4gIHBhaXJzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGtleSlcbiAgICArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcbn1cblxuLyoqXG4gKiBFeHBvc2Ugc2VyaWFsaXphdGlvbiBtZXRob2QuXG4gKi9cblxuIHJlcXVlc3Quc2VyaWFsaXplT2JqZWN0ID0gc2VyaWFsaXplO1xuXG4gLyoqXG4gICogUGFyc2UgdGhlIGdpdmVuIHgtd3d3LWZvcm0tdXJsZW5jb2RlZCBgc3RyYC5cbiAgKlxuICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICogQGFwaSBwcml2YXRlXG4gICovXG5cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKHN0cikge1xuICB2YXIgb2JqID0ge307XG4gIHZhciBwYWlycyA9IHN0ci5zcGxpdCgnJicpO1xuICB2YXIgcGFydHM7XG4gIHZhciBwYWlyO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYWlycy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHBhaXIgPSBwYWlyc1tpXTtcbiAgICBwYXJ0cyA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICBvYmpbZGVjb2RlVVJJQ29tcG9uZW50KHBhcnRzWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMV0pO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBFeHBvc2UgcGFyc2VyLlxuICovXG5cbnJlcXVlc3QucGFyc2VTdHJpbmcgPSBwYXJzZVN0cmluZztcblxuLyoqXG4gKiBEZWZhdWx0IE1JTUUgdHlwZSBtYXAuXG4gKlxuICogICAgIHN1cGVyYWdlbnQudHlwZXMueG1sID0gJ2FwcGxpY2F0aW9uL3htbCc7XG4gKlxuICovXG5cbnJlcXVlc3QudHlwZXMgPSB7XG4gIGh0bWw6ICd0ZXh0L2h0bWwnLFxuICBqc29uOiAnYXBwbGljYXRpb24vanNvbicsXG4gIHhtbDogJ2FwcGxpY2F0aW9uL3htbCcsXG4gIHVybGVuY29kZWQ6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAnZm9ybSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAnZm9ybS1kYXRhJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbi8qKlxuICogRGVmYXVsdCBzZXJpYWxpemF0aW9uIG1hcC5cbiAqXG4gKiAgICAgc3VwZXJhZ2VudC5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL3htbCddID0gZnVuY3Rpb24ob2JqKXtcbiAqICAgICAgIHJldHVybiAnZ2VuZXJhdGVkIHhtbCBoZXJlJztcbiAqICAgICB9O1xuICpcbiAqL1xuXG4gcmVxdWVzdC5zZXJpYWxpemUgPSB7XG4gICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogc2VyaWFsaXplLFxuICAgJ2FwcGxpY2F0aW9uL2pzb24nOiBKU09OLnN0cmluZ2lmeVxuIH07XG5cbiAvKipcbiAgKiBEZWZhdWx0IHBhcnNlcnMuXG4gICpcbiAgKiAgICAgc3VwZXJhZ2VudC5wYXJzZVsnYXBwbGljYXRpb24veG1sJ10gPSBmdW5jdGlvbihzdHIpe1xuICAqICAgICAgIHJldHVybiB7IG9iamVjdCBwYXJzZWQgZnJvbSBzdHIgfTtcbiAgKiAgICAgfTtcbiAgKlxuICAqL1xuXG5yZXF1ZXN0LnBhcnNlID0ge1xuICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogcGFyc2VTdHJpbmcsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogSlNPTi5wYXJzZVxufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gaGVhZGVyIGBzdHJgIGludG9cbiAqIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBtYXBwZWQgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyKHN0cikge1xuICB2YXIgbGluZXMgPSBzdHIuc3BsaXQoL1xccj9cXG4vKTtcbiAgdmFyIGZpZWxkcyA9IHt9O1xuICB2YXIgaW5kZXg7XG4gIHZhciBsaW5lO1xuICB2YXIgZmllbGQ7XG4gIHZhciB2YWw7XG5cbiAgbGluZXMucG9wKCk7IC8vIHRyYWlsaW5nIENSTEZcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBsaW5lID0gbGluZXNbaV07XG4gICAgaW5kZXggPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBmaWVsZCA9IGxpbmUuc2xpY2UoMCwgaW5kZXgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdHJpbShsaW5lLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgIGZpZWxkc1tmaWVsZF0gPSB2YWw7XG4gIH1cblxuICByZXR1cm4gZmllbGRzO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyBqc29uIG9yIGhhcyAranNvbiBzdHJ1Y3R1cmVkIHN5bnRheCBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0pTT04obWltZSkge1xuICByZXR1cm4gL1tcXC8rXWpzb25cXGIvLnRlc3QobWltZSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBtaW1lIHR5cGUgZm9yIHRoZSBnaXZlbiBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB0eXBlKHN0cil7XG4gIHJldHVybiBzdHIuc3BsaXQoLyAqOyAqLykuc2hpZnQoKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhlYWRlciBmaWVsZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcmFtcyhzdHIpe1xuICByZXR1cm4gcmVkdWNlKHN0ci5zcGxpdCgvICo7ICovKSwgZnVuY3Rpb24ob2JqLCBzdHIpe1xuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgvICo9ICovKVxuICAgICAgLCBrZXkgPSBwYXJ0cy5zaGlmdCgpXG4gICAgICAsIHZhbCA9IHBhcnRzLnNoaWZ0KCk7XG5cbiAgICBpZiAoa2V5ICYmIHZhbCkgb2JqW2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBSZXNwb25zZWAgd2l0aCB0aGUgZ2l2ZW4gYHhocmAuXG4gKlxuICogIC0gc2V0IGZsYWdzICgub2ssIC5lcnJvciwgZXRjKVxuICogIC0gcGFyc2UgaGVhZGVyXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogIEFsaWFzaW5nIGBzdXBlcmFnZW50YCBhcyBgcmVxdWVzdGAgaXMgbmljZTpcbiAqXG4gKiAgICAgIHJlcXVlc3QgPSBzdXBlcmFnZW50O1xuICpcbiAqICBXZSBjYW4gdXNlIHRoZSBwcm9taXNlLWxpa2UgQVBJLCBvciBwYXNzIGNhbGxiYWNrczpcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvJykuZW5kKGZ1bmN0aW9uKHJlcyl7fSk7XG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvJywgZnVuY3Rpb24ocmVzKXt9KTtcbiAqXG4gKiAgU2VuZGluZyBkYXRhIGNhbiBiZSBjaGFpbmVkOlxuICpcbiAqICAgICAgcmVxdWVzdFxuICogICAgICAgIC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgLmVuZChmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqICBPciBwYXNzZWQgdG8gYC5zZW5kKClgOlxuICpcbiAqICAgICAgcmVxdWVzdFxuICogICAgICAgIC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0sIGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogIE9yIHBhc3NlZCB0byBgLnBvc3QoKWA6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJywgeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgLmVuZChmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqIE9yIGZ1cnRoZXIgcmVkdWNlZCB0byBhIHNpbmdsZSBjYWxsIGZvciBzaW1wbGUgY2FzZXM6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJywgeyBuYW1lOiAndGonIH0sIGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogQHBhcmFtIHtYTUxIVFRQUmVxdWVzdH0geGhyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gUmVzcG9uc2UocmVxLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB0aGlzLnJlcSA9IHJlcTtcbiAgdGhpcy54aHIgPSB0aGlzLnJlcS54aHI7XG4gIC8vIHJlc3BvbnNlVGV4dCBpcyBhY2Nlc3NpYmxlIG9ubHkgaWYgcmVzcG9uc2VUeXBlIGlzICcnIG9yICd0ZXh0JyBhbmQgb24gb2xkZXIgYnJvd3NlcnNcbiAgdGhpcy50ZXh0ID0gKCh0aGlzLnJlcS5tZXRob2QgIT0nSEVBRCcgJiYgKHRoaXMueGhyLnJlc3BvbnNlVHlwZSA9PT0gJycgfHwgdGhpcy54aHIucmVzcG9uc2VUeXBlID09PSAndGV4dCcpKSB8fCB0eXBlb2YgdGhpcy54aHIucmVzcG9uc2VUeXBlID09PSAndW5kZWZpbmVkJylcbiAgICAgPyB0aGlzLnhoci5yZXNwb25zZVRleHRcbiAgICAgOiBudWxsO1xuICB0aGlzLnN0YXR1c1RleHQgPSB0aGlzLnJlcS54aHIuc3RhdHVzVGV4dDtcbiAgdGhpcy5zZXRTdGF0dXNQcm9wZXJ0aWVzKHRoaXMueGhyLnN0YXR1cyk7XG4gIHRoaXMuaGVhZGVyID0gdGhpcy5oZWFkZXJzID0gcGFyc2VIZWFkZXIodGhpcy54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO1xuICAvLyBnZXRBbGxSZXNwb25zZUhlYWRlcnMgc29tZXRpbWVzIGZhbHNlbHkgcmV0dXJucyBcIlwiIGZvciBDT1JTIHJlcXVlc3RzLCBidXRcbiAgLy8gZ2V0UmVzcG9uc2VIZWFkZXIgc3RpbGwgd29ya3MuIHNvIHdlIGdldCBjb250ZW50LXR5cGUgZXZlbiBpZiBnZXR0aW5nXG4gIC8vIG90aGVyIGhlYWRlcnMgZmFpbHMuXG4gIHRoaXMuaGVhZGVyWydjb250ZW50LXR5cGUnXSA9IHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcbiAgdGhpcy5zZXRIZWFkZXJQcm9wZXJ0aWVzKHRoaXMuaGVhZGVyKTtcbiAgdGhpcy5ib2R5ID0gdGhpcy5yZXEubWV0aG9kICE9ICdIRUFEJ1xuICAgID8gdGhpcy5wYXJzZUJvZHkodGhpcy50ZXh0ID8gdGhpcy50ZXh0IDogdGhpcy54aHIucmVzcG9uc2UpXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGBmaWVsZGAgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihmaWVsZCl7XG4gIHJldHVybiB0aGlzLmhlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbn07XG5cbi8qKlxuICogU2V0IGhlYWRlciByZWxhdGVkIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGAudHlwZWAgdGhlIGNvbnRlbnQgdHlwZSB3aXRob3V0IHBhcmFtc1xuICpcbiAqIEEgcmVzcG9uc2Ugb2YgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIlxuICogd2lsbCBwcm92aWRlIHlvdSB3aXRoIGEgYC50eXBlYCBvZiBcInRleHQvcGxhaW5cIi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUuc2V0SGVhZGVyUHJvcGVydGllcyA9IGZ1bmN0aW9uKGhlYWRlcil7XG4gIC8vIGNvbnRlbnQtdHlwZVxuICB2YXIgY3QgPSB0aGlzLmhlYWRlclsnY29udGVudC10eXBlJ10gfHwgJyc7XG4gIHRoaXMudHlwZSA9IHR5cGUoY3QpO1xuXG4gIC8vIHBhcmFtc1xuICB2YXIgb2JqID0gcGFyYW1zKGN0KTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikgdGhpc1trZXldID0gb2JqW2tleV07XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBib2R5IGBzdHJgLlxuICpcbiAqIFVzZWQgZm9yIGF1dG8tcGFyc2luZyBvZiBib2RpZXMuIFBhcnNlcnNcbiAqIGFyZSBkZWZpbmVkIG9uIHRoZSBgc3VwZXJhZ2VudC5wYXJzZWAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge01peGVkfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnBhcnNlQm9keSA9IGZ1bmN0aW9uKHN0cil7XG4gIHZhciBwYXJzZSA9IHJlcXVlc3QucGFyc2VbdGhpcy50eXBlXTtcbiAgcmV0dXJuIHBhcnNlICYmIHN0ciAmJiAoc3RyLmxlbmd0aCB8fCBzdHIgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgPyBwYXJzZShzdHIpXG4gICAgOiBudWxsO1xufTtcblxuLyoqXG4gKiBTZXQgZmxhZ3Mgc3VjaCBhcyBgLm9rYCBiYXNlZCBvbiBgc3RhdHVzYC5cbiAqXG4gKiBGb3IgZXhhbXBsZSBhIDJ4eCByZXNwb25zZSB3aWxsIGdpdmUgeW91IGEgYC5va2Agb2YgX190cnVlX19cbiAqIHdoZXJlYXMgNXh4IHdpbGwgYmUgX19mYWxzZV9fIGFuZCBgLmVycm9yYCB3aWxsIGJlIF9fdHJ1ZV9fLiBUaGVcbiAqIGAuY2xpZW50RXJyb3JgIGFuZCBgLnNlcnZlckVycm9yYCBhcmUgYWxzbyBhdmFpbGFibGUgdG8gYmUgbW9yZVxuICogc3BlY2lmaWMsIGFuZCBgLnN0YXR1c1R5cGVgIGlzIHRoZSBjbGFzcyBvZiBlcnJvciByYW5naW5nIGZyb20gMS4uNVxuICogc29tZXRpbWVzIHVzZWZ1bCBmb3IgbWFwcGluZyByZXNwb25kIGNvbG9ycyBldGMuXG4gKlxuICogXCJzdWdhclwiIHByb3BlcnRpZXMgYXJlIGFsc28gZGVmaW5lZCBmb3IgY29tbW9uIGNhc2VzLiBDdXJyZW50bHkgcHJvdmlkaW5nOlxuICpcbiAqICAgLSAubm9Db250ZW50XG4gKiAgIC0gLmJhZFJlcXVlc3RcbiAqICAgLSAudW5hdXRob3JpemVkXG4gKiAgIC0gLm5vdEFjY2VwdGFibGVcbiAqICAgLSAubm90Rm91bmRcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUuc2V0U3RhdHVzUHJvcGVydGllcyA9IGZ1bmN0aW9uKHN0YXR1cyl7XG4gIC8vIGhhbmRsZSBJRTkgYnVnOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwMDQ2OTcyL21zaWUtcmV0dXJucy1zdGF0dXMtY29kZS1vZi0xMjIzLWZvci1hamF4LXJlcXVlc3RcbiAgaWYgKHN0YXR1cyA9PT0gMTIyMykge1xuICAgIHN0YXR1cyA9IDIwNDtcbiAgfVxuXG4gIHZhciB0eXBlID0gc3RhdHVzIC8gMTAwIHwgMDtcblxuICAvLyBzdGF0dXMgLyBjbGFzc1xuICB0aGlzLnN0YXR1cyA9IHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgdGhpcy5zdGF0dXNUeXBlID0gdHlwZTtcblxuICAvLyBiYXNpY3NcbiAgdGhpcy5pbmZvID0gMSA9PSB0eXBlO1xuICB0aGlzLm9rID0gMiA9PSB0eXBlO1xuICB0aGlzLmNsaWVudEVycm9yID0gNCA9PSB0eXBlO1xuICB0aGlzLnNlcnZlckVycm9yID0gNSA9PSB0eXBlO1xuICB0aGlzLmVycm9yID0gKDQgPT0gdHlwZSB8fCA1ID09IHR5cGUpXG4gICAgPyB0aGlzLnRvRXJyb3IoKVxuICAgIDogZmFsc2U7XG5cbiAgLy8gc3VnYXJcbiAgdGhpcy5hY2NlcHRlZCA9IDIwMiA9PSBzdGF0dXM7XG4gIHRoaXMubm9Db250ZW50ID0gMjA0ID09IHN0YXR1cztcbiAgdGhpcy5iYWRSZXF1ZXN0ID0gNDAwID09IHN0YXR1cztcbiAgdGhpcy51bmF1dGhvcml6ZWQgPSA0MDEgPT0gc3RhdHVzO1xuICB0aGlzLm5vdEFjY2VwdGFibGUgPSA0MDYgPT0gc3RhdHVzO1xuICB0aGlzLm5vdEZvdW5kID0gNDA0ID09IHN0YXR1cztcbiAgdGhpcy5mb3JiaWRkZW4gPSA0MDMgPT0gc3RhdHVzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gYEVycm9yYCByZXByZXNlbnRhdGl2ZSBvZiB0aGlzIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm4ge0Vycm9yfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUudG9FcnJvciA9IGZ1bmN0aW9uKCl7XG4gIHZhciByZXEgPSB0aGlzLnJlcTtcbiAgdmFyIG1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gIHZhciB1cmwgPSByZXEudXJsO1xuXG4gIHZhciBtc2cgPSAnY2Fubm90ICcgKyBtZXRob2QgKyAnICcgKyB1cmwgKyAnICgnICsgdGhpcy5zdGF0dXMgKyAnKSc7XG4gIHZhciBlcnIgPSBuZXcgRXJyb3IobXNnKTtcbiAgZXJyLnN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICBlcnIubWV0aG9kID0gbWV0aG9kO1xuICBlcnIudXJsID0gdXJsO1xuXG4gIHJldHVybiBlcnI7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBgUmVzcG9uc2VgLlxuICovXG5cbnJlcXVlc3QuUmVzcG9uc2UgPSBSZXNwb25zZTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBSZXF1ZXN0YCB3aXRoIHRoZSBnaXZlbiBgbWV0aG9kYCBhbmQgYHVybGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXF1ZXN0KG1ldGhvZCwgdXJsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgRW1pdHRlci5jYWxsKHRoaXMpO1xuICB0aGlzLl9xdWVyeSA9IHRoaXMuX3F1ZXJ5IHx8IFtdO1xuICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgdGhpcy51cmwgPSB1cmw7XG4gIHRoaXMuaGVhZGVyID0ge307XG4gIHRoaXMuX2hlYWRlciA9IHt9O1xuICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpe1xuICAgIHZhciBlcnIgPSBudWxsO1xuICAgIHZhciByZXMgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlcyA9IG5ldyBSZXNwb25zZShzZWxmKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGVyciA9IG5ldyBFcnJvcignUGFyc2VyIGlzIHVuYWJsZSB0byBwYXJzZSB0aGUgcmVzcG9uc2UnKTtcbiAgICAgIGVyci5wYXJzZSA9IHRydWU7XG4gICAgICBlcnIub3JpZ2luYWwgPSBlO1xuICAgICAgLy8gaXNzdWUgIzY3NTogcmV0dXJuIHRoZSByYXcgcmVzcG9uc2UgaWYgdGhlIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAgICAgIGVyci5yYXdSZXNwb25zZSA9IHNlbGYueGhyICYmIHNlbGYueGhyLnJlc3BvbnNlVGV4dCA/IHNlbGYueGhyLnJlc3BvbnNlVGV4dCA6IG51bGw7XG4gICAgICByZXR1cm4gc2VsZi5jYWxsYmFjayhlcnIpO1xuICAgIH1cblxuICAgIHNlbGYuZW1pdCgncmVzcG9uc2UnLCByZXMpO1xuXG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIHNlbGYuY2FsbGJhY2soZXJyLCByZXMpO1xuICAgIH1cblxuICAgIGlmIChyZXMuc3RhdHVzID49IDIwMCAmJiByZXMuc3RhdHVzIDwgMzAwKSB7XG4gICAgICByZXR1cm4gc2VsZi5jYWxsYmFjayhlcnIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIG5ld19lcnIgPSBuZXcgRXJyb3IocmVzLnN0YXR1c1RleHQgfHwgJ1Vuc3VjY2Vzc2Z1bCBIVFRQIHJlc3BvbnNlJyk7XG4gICAgbmV3X2Vyci5vcmlnaW5hbCA9IGVycjtcbiAgICBuZXdfZXJyLnJlc3BvbnNlID0gcmVzO1xuICAgIG5ld19lcnIuc3RhdHVzID0gcmVzLnN0YXR1cztcblxuICAgIHNlbGYuY2FsbGJhY2sobmV3X2VyciwgcmVzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogTWl4aW4gYEVtaXR0ZXJgLlxuICovXG5cbkVtaXR0ZXIoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIEFsbG93IGZvciBleHRlbnNpb25cbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbihmbikge1xuICBmbih0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogU2V0IHRpbWVvdXQgdG8gYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS50aW1lb3V0ID0gZnVuY3Rpb24obXMpe1xuICB0aGlzLl90aW1lb3V0ID0gbXM7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhciBwcmV2aW91cyB0aW1lb3V0LlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbigpe1xuICB0aGlzLl90aW1lb3V0ID0gMDtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFib3J0IHRoZSByZXF1ZXN0LCBhbmQgY2xlYXIgcG90ZW50aWFsIHRpbWVvdXQuXG4gKlxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbigpe1xuICBpZiAodGhpcy5hYm9ydGVkKSByZXR1cm47XG4gIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gIHRoaXMueGhyLmFib3J0KCk7XG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIHRoaXMuZW1pdCgnYWJvcnQnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBoZWFkZXIgYGZpZWxkYCB0byBgdmFsYCwgb3IgbXVsdGlwbGUgZmllbGRzIHdpdGggb25lIG9iamVjdC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJylcbiAqICAgICAgICAuc2V0KCdYLUFQSS1LZXknLCAnZm9vYmFyJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJywgJ1gtQVBJLUtleSc6ICdmb29iYXInIH0pXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWwpe1xuICBpZiAoaXNPYmplY3QoZmllbGQpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGZpZWxkKSB7XG4gICAgICB0aGlzLnNldChrZXksIGZpZWxkW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV0gPSB2YWw7XG4gIHRoaXMuaGVhZGVyW2ZpZWxkXSA9IHZhbDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBoZWFkZXIgYGZpZWxkYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgICAgcmVxLmdldCgnLycpXG4gKiAgICAgICAgLnVuc2V0KCdVc2VyLUFnZW50JylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS51bnNldCA9IGZ1bmN0aW9uKGZpZWxkKXtcbiAgZGVsZXRlIHRoaXMuX2hlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgZGVsZXRlIHRoaXMuaGVhZGVyW2ZpZWxkXTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBgZmllbGRgIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuZ2V0SGVhZGVyID0gZnVuY3Rpb24oZmllbGQpe1xuICByZXR1cm4gdGhpcy5faGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xufTtcblxuLyoqXG4gKiBTZXQgQ29udGVudC1UeXBlIHRvIGB0eXBlYCwgbWFwcGluZyB2YWx1ZXMgZnJvbSBgcmVxdWVzdC50eXBlc2AuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICBzdXBlcmFnZW50LnR5cGVzLnhtbCA9ICdhcHBsaWNhdGlvbi94bWwnO1xuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgneG1sJylcbiAqICAgICAgICAuc2VuZCh4bWxzdHJpbmcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LnBvc3QoJy8nKVxuICogICAgICAgIC50eXBlKCdhcHBsaWNhdGlvbi94bWwnKVxuICogICAgICAgIC5zZW5kKHhtbHN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbih0eXBlKXtcbiAgdGhpcy5zZXQoJ0NvbnRlbnQtVHlwZScsIHJlcXVlc3QudHlwZXNbdHlwZV0gfHwgdHlwZSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBGb3JjZSBnaXZlbiBwYXJzZXJcbiAqXG4gKiBTZXRzIHRoZSBib2R5IHBhcnNlciBubyBtYXR0ZXIgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKGZuKXtcbiAgdGhpcy5fcGFyc2VyID0gZm47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQWNjZXB0IHRvIGB0eXBlYCwgbWFwcGluZyB2YWx1ZXMgZnJvbSBgcmVxdWVzdC50eXBlc2AuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICBzdXBlcmFnZW50LnR5cGVzLmpzb24gPSAnYXBwbGljYXRpb24vanNvbic7XG4gKlxuICogICAgICByZXF1ZXN0LmdldCgnL2FnZW50JylcbiAqICAgICAgICAuYWNjZXB0KCdqc29uJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvYWdlbnQnKVxuICogICAgICAgIC5hY2NlcHQoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY2NlcHRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbih0eXBlKXtcbiAgdGhpcy5zZXQoJ0FjY2VwdCcsIHJlcXVlc3QudHlwZXNbdHlwZV0gfHwgdHlwZSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQXV0aG9yaXphdGlvbiBmaWVsZCB2YWx1ZSB3aXRoIGB1c2VyYCBhbmQgYHBhc3NgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1c2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFzc1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmF1dGggPSBmdW5jdGlvbih1c2VyLCBwYXNzKXtcbiAgdmFyIHN0ciA9IGJ0b2EodXNlciArICc6JyArIHBhc3MpO1xuICB0aGlzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgc3RyKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiogQWRkIHF1ZXJ5LXN0cmluZyBgdmFsYC5cbipcbiogRXhhbXBsZXM6XG4qXG4qICAgcmVxdWVzdC5nZXQoJy9zaG9lcycpXG4qICAgICAucXVlcnkoJ3NpemU9MTAnKVxuKiAgICAgLnF1ZXJ5KHsgY29sb3I6ICdibHVlJyB9KVxuKlxuKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHZhbFxuKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiogQGFwaSBwdWJsaWNcbiovXG5cblJlcXVlc3QucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24odmFsKXtcbiAgaWYgKCdzdHJpbmcnICE9IHR5cGVvZiB2YWwpIHZhbCA9IHNlcmlhbGl6ZSh2YWwpO1xuICBpZiAodmFsKSB0aGlzLl9xdWVyeS5wdXNoKHZhbCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZSB0aGUgZmllbGQgYG5hbWVgIGFuZCBgdmFsYCBmb3IgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJcbiAqIHJlcXVlc3QgYm9kaWVzLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmZpZWxkKCdmb28nLCAnYmFyJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd8QmxvYnxGaWxlfSB2YWxcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5maWVsZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbCl7XG4gIGlmICghdGhpcy5fZm9ybURhdGEpIHRoaXMuX2Zvcm1EYXRhID0gbmV3IHJvb3QuRm9ybURhdGEoKTtcbiAgdGhpcy5fZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBRdWV1ZSB0aGUgZ2l2ZW4gYGZpbGVgIGFzIGFuIGF0dGFjaG1lbnQgdG8gdGhlIHNwZWNpZmllZCBgZmllbGRgLFxuICogd2l0aCBvcHRpb25hbCBgZmlsZW5hbWVgLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmF0dGFjaChuZXcgQmxvYihbJzxhIGlkPVwiYVwiPjxiIGlkPVwiYlwiPmhleSE8L2I+PC9hPiddLCB7IHR5cGU6IFwidGV4dC9odG1sXCJ9KSlcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7QmxvYnxGaWxlfSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsZW5hbWVcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbihmaWVsZCwgZmlsZSwgZmlsZW5hbWUpe1xuICBpZiAoIXRoaXMuX2Zvcm1EYXRhKSB0aGlzLl9mb3JtRGF0YSA9IG5ldyByb290LkZvcm1EYXRhKCk7XG4gIHRoaXMuX2Zvcm1EYXRhLmFwcGVuZChmaWVsZCwgZmlsZSwgZmlsZW5hbWUpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2VuZCBgZGF0YWAsIGRlZmF1bHRpbmcgdGhlIGAudHlwZSgpYCB0byBcImpzb25cIiB3aGVuXG4gKiBhbiBvYmplY3QgaXMgZ2l2ZW4uXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICAgLy8gcXVlcnlzdHJpbmdcbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvc2VhcmNoJylcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBtdWx0aXBsZSBkYXRhIFwid3JpdGVzXCJcbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvc2VhcmNoJylcbiAqICAgICAgICAgLnNlbmQoeyBzZWFyY2g6ICdxdWVyeScgfSlcbiAqICAgICAgICAgLnNlbmQoeyByYW5nZTogJzEuLjUnIH0pXG4gKiAgICAgICAgIC5zZW5kKHsgb3JkZXI6ICdkZXNjJyB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIG1hbnVhbCBqc29uXG4gKiAgICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAgLnR5cGUoJ2pzb24nKVxuICogICAgICAgICAuc2VuZCgne1wibmFtZVwiOlwidGpcIn0nKVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIGF1dG8ganNvblxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC5zZW5kKHsgbmFtZTogJ3RqJyB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIG1hbnVhbCB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAudHlwZSgnZm9ybScpXG4gKiAgICAgICAgIC5zZW5kKCduYW1lPXRqJylcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBhdXRvIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC50eXBlKCdmb3JtJylcbiAqICAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gZGVmYXVsdHMgdG8geC13d3ctZm9ybS11cmxlbmNvZGVkXG4gICogICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAgKiAgICAgICAgLnNlbmQoJ25hbWU9dG9iaScpXG4gICogICAgICAgIC5zZW5kKCdzcGVjaWVzPWZlcnJldCcpXG4gICogICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBkYXRhXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKGRhdGEpe1xuICB2YXIgb2JqID0gaXNPYmplY3QoZGF0YSk7XG4gIHZhciB0eXBlID0gdGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIC8vIG1lcmdlXG4gIGlmIChvYmogJiYgaXNPYmplY3QodGhpcy5fZGF0YSkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgdGhpcy5fZGF0YVtrZXldID0gZGF0YVtrZXldO1xuICAgIH1cbiAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PSB0eXBlb2YgZGF0YSkge1xuICAgIGlmICghdHlwZSkgdGhpcy50eXBlKCdmb3JtJyk7XG4gICAgdHlwZSA9IHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICBpZiAoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgPT0gdHlwZSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGFcbiAgICAgICAgPyB0aGlzLl9kYXRhICsgJyYnICsgZGF0YVxuICAgICAgICA6IGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEgPSAodGhpcy5fZGF0YSB8fCAnJykgKyBkYXRhO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGlmICghb2JqIHx8IGlzSG9zdChkYXRhKSkgcmV0dXJuIHRoaXM7XG4gIGlmICghdHlwZSkgdGhpcy50eXBlKCdqc29uJyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggYGVycmAgYW5kIGByZXNgXG4gKiBhbmQgaGFuZGxlIGFyaXR5IGNoZWNrLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jYWxsYmFjayA9IGZ1bmN0aW9uKGVyciwgcmVzKXtcbiAgdmFyIGZuID0gdGhpcy5fY2FsbGJhY2s7XG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIGZuKGVyciwgcmVzKTtcbn07XG5cbi8qKlxuICogSW52b2tlIGNhbGxiYWNrIHdpdGggeC1kb21haW4gZXJyb3IuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY3Jvc3NEb21haW5FcnJvciA9IGZ1bmN0aW9uKCl7XG4gIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1JlcXVlc3QgaGFzIGJlZW4gdGVybWluYXRlZFxcblBvc3NpYmxlIGNhdXNlczogdGhlIG5ldHdvcmsgaXMgb2ZmbGluZSwgT3JpZ2luIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiwgdGhlIHBhZ2UgaXMgYmVpbmcgdW5sb2FkZWQsIGV0Yy4nKTtcbiAgZXJyLmNyb3NzRG9tYWluID0gdHJ1ZTtcblxuICBlcnIuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gIGVyci5tZXRob2QgPSB0aGlzLm1ldGhvZDtcbiAgZXJyLnVybCA9IHRoaXMudXJsO1xuXG4gIHRoaXMuY2FsbGJhY2soZXJyKTtcbn07XG5cbi8qKlxuICogSW52b2tlIGNhbGxiYWNrIHdpdGggdGltZW91dCBlcnJvci5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS50aW1lb3V0RXJyb3IgPSBmdW5jdGlvbigpe1xuICB2YXIgdGltZW91dCA9IHRoaXMuX3RpbWVvdXQ7XG4gIHZhciBlcnIgPSBuZXcgRXJyb3IoJ3RpbWVvdXQgb2YgJyArIHRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnKTtcbiAgZXJyLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB0aGlzLmNhbGxiYWNrKGVycik7XG59O1xuXG4vKipcbiAqIEVuYWJsZSB0cmFuc21pc3Npb24gb2YgY29va2llcyB3aXRoIHgtZG9tYWluIHJlcXVlc3RzLlxuICpcbiAqIE5vdGUgdGhhdCBmb3IgdGhpcyB0byB3b3JrIHRoZSBvcmlnaW4gbXVzdCBub3QgYmVcbiAqIHVzaW5nIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIgd2l0aCBhIHdpbGRjYXJkLFxuICogYW5kIGFsc28gbXVzdCBzZXQgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsc1wiXG4gKiB0byBcInRydWVcIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLndpdGhDcmVkZW50aWFscyA9IGZ1bmN0aW9uKCl7XG4gIHRoaXMuX3dpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbml0aWF0ZSByZXF1ZXN0LCBpbnZva2luZyBjYWxsYmFjayBgZm4ocmVzKWBcbiAqIHdpdGggYW4gaW5zdGFuY2VvZiBgUmVzcG9uc2VgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oZm4pe1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB4aHIgPSB0aGlzLnhociA9IHJlcXVlc3QuZ2V0WEhSKCk7XG4gIHZhciBxdWVyeSA9IHRoaXMuX3F1ZXJ5LmpvaW4oJyYnKTtcbiAgdmFyIHRpbWVvdXQgPSB0aGlzLl90aW1lb3V0O1xuICB2YXIgZGF0YSA9IHRoaXMuX2Zvcm1EYXRhIHx8IHRoaXMuX2RhdGE7XG5cbiAgLy8gc3RvcmUgY2FsbGJhY2tcbiAgdGhpcy5fY2FsbGJhY2sgPSBmbiB8fCBub29wO1xuXG4gIC8vIHN0YXRlIGNoYW5nZVxuICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtcbiAgICBpZiAoNCAhPSB4aHIucmVhZHlTdGF0ZSkgcmV0dXJuO1xuXG4gICAgLy8gSW4gSUU5LCByZWFkcyB0byBhbnkgcHJvcGVydHkgKGUuZy4gc3RhdHVzKSBvZmYgb2YgYW4gYWJvcnRlZCBYSFIgd2lsbFxuICAgIC8vIHJlc3VsdCBpbiB0aGUgZXJyb3IgXCJDb3VsZCBub3QgY29tcGxldGUgdGhlIG9wZXJhdGlvbiBkdWUgdG8gZXJyb3IgYzAwYzAyM2ZcIlxuICAgIHZhciBzdGF0dXM7XG4gICAgdHJ5IHsgc3RhdHVzID0geGhyLnN0YXR1cyB9IGNhdGNoKGUpIHsgc3RhdHVzID0gMDsgfVxuXG4gICAgaWYgKDAgPT0gc3RhdHVzKSB7XG4gICAgICBpZiAoc2VsZi50aW1lZG91dCkgcmV0dXJuIHNlbGYudGltZW91dEVycm9yKCk7XG4gICAgICBpZiAoc2VsZi5hYm9ydGVkKSByZXR1cm47XG4gICAgICByZXR1cm4gc2VsZi5jcm9zc0RvbWFpbkVycm9yKCk7XG4gICAgfVxuICAgIHNlbGYuZW1pdCgnZW5kJyk7XG4gIH07XG5cbiAgLy8gcHJvZ3Jlc3NcbiAgdmFyIGhhbmRsZVByb2dyZXNzID0gZnVuY3Rpb24oZSl7XG4gICAgaWYgKGUudG90YWwgPiAwKSB7XG4gICAgICBlLnBlcmNlbnQgPSBlLmxvYWRlZCAvIGUudG90YWwgKiAxMDA7XG4gICAgfVxuICAgIHNlbGYuZW1pdCgncHJvZ3Jlc3MnLCBlKTtcbiAgfTtcbiAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCdwcm9ncmVzcycpKSB7XG4gICAgeGhyLm9ucHJvZ3Jlc3MgPSBoYW5kbGVQcm9ncmVzcztcbiAgfVxuICB0cnkge1xuICAgIGlmICh4aHIudXBsb2FkICYmIHRoaXMuaGFzTGlzdGVuZXJzKCdwcm9ncmVzcycpKSB7XG4gICAgICB4aHIudXBsb2FkLm9ucHJvZ3Jlc3MgPSBoYW5kbGVQcm9ncmVzcztcbiAgICB9XG4gIH0gY2F0Y2goZSkge1xuICAgIC8vIEFjY2Vzc2luZyB4aHIudXBsb2FkIGZhaWxzIGluIElFIGZyb20gYSB3ZWIgd29ya2VyLCBzbyBqdXN0IHByZXRlbmQgaXQgZG9lc24ndCBleGlzdC5cbiAgICAvLyBSZXBvcnRlZCBoZXJlOlxuICAgIC8vIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvODM3MjQ1L3htbGh0dHByZXF1ZXN0LXVwbG9hZC10aHJvd3MtaW52YWxpZC1hcmd1bWVudC13aGVuLXVzZWQtZnJvbS13ZWItd29ya2VyLWNvbnRleHRcbiAgfVxuXG4gIC8vIHRpbWVvdXRcbiAgaWYgKHRpbWVvdXQgJiYgIXRoaXMuX3RpbWVyKSB7XG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICBzZWxmLnRpbWVkb3V0ID0gdHJ1ZTtcbiAgICAgIHNlbGYuYWJvcnQoKTtcbiAgICB9LCB0aW1lb3V0KTtcbiAgfVxuXG4gIC8vIHF1ZXJ5c3RyaW5nXG4gIGlmIChxdWVyeSkge1xuICAgIHF1ZXJ5ID0gcmVxdWVzdC5zZXJpYWxpemVPYmplY3QocXVlcnkpO1xuICAgIHRoaXMudXJsICs9IH50aGlzLnVybC5pbmRleE9mKCc/JylcbiAgICAgID8gJyYnICsgcXVlcnlcbiAgICAgIDogJz8nICsgcXVlcnk7XG4gIH1cblxuICAvLyBpbml0aWF0ZSByZXF1ZXN0XG4gIHhoci5vcGVuKHRoaXMubWV0aG9kLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgLy8gQ09SU1xuICBpZiAodGhpcy5fd2l0aENyZWRlbnRpYWxzKSB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcblxuICAvLyBib2R5XG4gIGlmICgnR0VUJyAhPSB0aGlzLm1ldGhvZCAmJiAnSEVBRCcgIT0gdGhpcy5tZXRob2QgJiYgJ3N0cmluZycgIT0gdHlwZW9mIGRhdGEgJiYgIWlzSG9zdChkYXRhKSkge1xuICAgIC8vIHNlcmlhbGl6ZSBzdHVmZlxuICAgIHZhciBjb250ZW50VHlwZSA9IHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICB2YXIgc2VyaWFsaXplID0gdGhpcy5fcGFyc2VyIHx8IHJlcXVlc3Quc2VyaWFsaXplW2NvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXSA6ICcnXTtcbiAgICBpZiAoIXNlcmlhbGl6ZSAmJiBpc0pTT04oY29udGVudFR5cGUpKSBzZXJpYWxpemUgPSByZXF1ZXN0LnNlcmlhbGl6ZVsnYXBwbGljYXRpb24vanNvbiddO1xuICAgIGlmIChzZXJpYWxpemUpIGRhdGEgPSBzZXJpYWxpemUoZGF0YSk7XG4gIH1cblxuICAvLyBzZXQgaGVhZGVyIGZpZWxkc1xuICBmb3IgKHZhciBmaWVsZCBpbiB0aGlzLmhlYWRlcikge1xuICAgIGlmIChudWxsID09IHRoaXMuaGVhZGVyW2ZpZWxkXSkgY29udGludWU7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoZmllbGQsIHRoaXMuaGVhZGVyW2ZpZWxkXSk7XG4gIH1cblxuICAvLyBzZW5kIHN0dWZmXG4gIHRoaXMuZW1pdCgncmVxdWVzdCcsIHRoaXMpO1xuXG4gIC8vIElFMTEgeGhyLnNlbmQodW5kZWZpbmVkKSBzZW5kcyAndW5kZWZpbmVkJyBzdHJpbmcgYXMgUE9TVCBwYXlsb2FkIChpbnN0ZWFkIG9mIG5vdGhpbmcpXG4gIC8vIFdlIG5lZWQgbnVsbCBoZXJlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gIHhoci5zZW5kKHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJyA/IGRhdGEgOiBudWxsKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEZhdXggcHJvbWlzZSBzdXBwb3J0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAoZnVsZmlsbCwgcmVqZWN0KSB7XG4gIHJldHVybiB0aGlzLmVuZChmdW5jdGlvbihlcnIsIHJlcykge1xuICAgIGVyciA/IHJlamVjdChlcnIpIDogZnVsZmlsbChyZXMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeHBvc2UgYFJlcXVlc3RgLlxuICovXG5cbnJlcXVlc3QuUmVxdWVzdCA9IFJlcXVlc3Q7XG5cbi8qKlxuICogSXNzdWUgYSByZXF1ZXN0OlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgIHJlcXVlc3QoJ0dFVCcsICcvdXNlcnMnKS5lbmQoY2FsbGJhY2spXG4gKiAgICByZXF1ZXN0KCcvdXNlcnMnKS5lbmQoY2FsbGJhY2spXG4gKiAgICByZXF1ZXN0KCcvdXNlcnMnLCBjYWxsYmFjaylcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gdXJsIG9yIGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiByZXF1ZXN0KG1ldGhvZCwgdXJsKSB7XG4gIC8vIGNhbGxiYWNrXG4gIGlmICgnZnVuY3Rpb24nID09IHR5cGVvZiB1cmwpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QoJ0dFVCcsIG1ldGhvZCkuZW5kKHVybCk7XG4gIH1cblxuICAvLyB1cmwgZmlyc3RcbiAgaWYgKDEgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCgnR0VUJywgbWV0aG9kKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVxdWVzdChtZXRob2QsIHVybCk7XG59XG5cbi8qKlxuICogR0VUIGB1cmxgIHdpdGggb3B0aW9uYWwgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR8RnVuY3Rpb259IGRhdGEgb3IgZm5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LmdldCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnR0VUJywgdXJsKTtcbiAgaWYgKCdmdW5jdGlvbicgPT0gdHlwZW9mIGRhdGEpIGZuID0gZGF0YSwgZGF0YSA9IG51bGw7XG4gIGlmIChkYXRhKSByZXEucXVlcnkoZGF0YSk7XG4gIGlmIChmbikgcmVxLmVuZChmbik7XG4gIHJldHVybiByZXE7XG59O1xuXG4vKipcbiAqIEhFQUQgYHVybGAgd2l0aCBvcHRpb25hbCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZHxGdW5jdGlvbn0gZGF0YSBvciBmblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QuaGVhZCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnSEVBRCcsIHVybCk7XG4gIGlmICgnZnVuY3Rpb24nID09IHR5cGVvZiBkYXRhKSBmbiA9IGRhdGEsIGRhdGEgPSBudWxsO1xuICBpZiAoZGF0YSkgcmVxLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxLmVuZChmbik7XG4gIHJldHVybiByZXE7XG59O1xuXG4vKipcbiAqIERFTEVURSBgdXJsYCB3aXRoIG9wdGlvbmFsIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGVsKHVybCwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnREVMRVRFJywgdXJsKTtcbiAgaWYgKGZuKSByZXEuZW5kKGZuKTtcbiAgcmV0dXJuIHJlcTtcbn07XG5cbnJlcXVlc3QuZGVsID0gZGVsO1xucmVxdWVzdC5kZWxldGUgPSBkZWw7XG5cbi8qKlxuICogUEFUQ0ggYHVybGAgd2l0aCBvcHRpb25hbCBgZGF0YWAgYW5kIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfSBkYXRhXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucmVxdWVzdC5wYXRjaCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnUEFUQ0gnLCB1cmwpO1xuICBpZiAoJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgZGF0YSkgZm4gPSBkYXRhLCBkYXRhID0gbnVsbDtcbiAgaWYgKGRhdGEpIHJlcS5zZW5kKGRhdGEpO1xuICBpZiAoZm4pIHJlcS5lbmQoZm4pO1xuICByZXR1cm4gcmVxO1xufTtcblxuLyoqXG4gKiBQT1NUIGB1cmxgIHdpdGggb3B0aW9uYWwgYGRhdGFgIGFuZCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZH0gZGF0YVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QucG9zdCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnUE9TVCcsIHVybCk7XG4gIGlmICgnZnVuY3Rpb24nID09IHR5cGVvZiBkYXRhKSBmbiA9IGRhdGEsIGRhdGEgPSBudWxsO1xuICBpZiAoZGF0YSkgcmVxLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxLmVuZChmbik7XG4gIHJldHVybiByZXE7XG59O1xuXG4vKipcbiAqIFBVVCBgdXJsYCB3aXRoIG9wdGlvbmFsIGBkYXRhYCBhbmQgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR8RnVuY3Rpb259IGRhdGEgb3IgZm5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LnB1dCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnUFVUJywgdXJsKTtcbiAgaWYgKCdmdW5jdGlvbicgPT0gdHlwZW9mIGRhdGEpIGZuID0gZGF0YSwgZGF0YSA9IG51bGw7XG4gIGlmIChkYXRhKSByZXEuc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXEuZW5kKGZuKTtcbiAgcmV0dXJuIHJlcTtcbn07XG5cbi8qKlxuICogRXhwb3NlIGByZXF1ZXN0YC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVlc3Q7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjMuMiBieSBAbWF0aGlhcywgbW9kaWZpZWQgZm9yIFVSSS5qcyAqL1xyXG5cclxudmFyIHB1bnljb2RlID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGBwdW55Y29kZWAgb2JqZWN0LlxyXG5cdCAqIEBuYW1lIHB1bnljb2RlXHJcblx0ICogQHR5cGUgT2JqZWN0XHJcblx0ICovXHJcblx0dmFyIHB1bnljb2RlLFxyXG5cclxuXHQvKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXHJcblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxyXG5cclxuXHQvKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXHJcblx0YmFzZSA9IDM2LFxyXG5cdHRNaW4gPSAxLFxyXG5cdHRNYXggPSAyNixcclxuXHRza2V3ID0gMzgsXHJcblx0ZGFtcCA9IDcwMCxcclxuXHRpbml0aWFsQmlhcyA9IDcyLFxyXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXHJcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXHJcblxyXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXHJcblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXHJcblx0cmVnZXhOb25BU0NJSSA9IC9bXlxceDIwLVxceDdFXS8sIC8vIHVucHJpbnRhYmxlIEFTQ0lJIGNoYXJzICsgbm9uLUFTQ0lJIGNoYXJzXHJcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xyXG5cclxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cclxuXHRlcnJvcnMgPSB7XHJcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxyXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcclxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXHJcblx0fSxcclxuXHJcblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xyXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcclxuXHRmbG9vciA9IE1hdGguZmxvb3IsXHJcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcclxuXHJcblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xyXG5cdGtleTtcclxuXHJcblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXHJcblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcclxuXHRcdHRocm93IG5ldyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXHJcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XHJcblx0ICogaXRlbS5cclxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xyXG5cdFx0dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xyXG5cdFx0XHRyZXN1bHRbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgc2ltcGxlIGBBcnJheSNtYXBgLWxpa2Ugd3JhcHBlciB0byB3b3JrIHdpdGggZG9tYWluIG5hbWUgc3RyaW5ncyBvciBlbWFpbFxyXG5cdCAqIGFkZHJlc3Nlcy5cclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MuXHJcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XHJcblx0ICogY2hhcmFjdGVyLlxyXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrXHJcblx0ICogZnVuY3Rpb24uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gbWFwRG9tYWluKHN0cmluZywgZm4pIHtcclxuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xyXG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xyXG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxyXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxyXG5cdFx0XHRyZXN1bHQgPSBwYXJ0c1swXSArICdAJztcclxuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XHJcblx0XHR9XHJcblx0XHQvLyBBdm9pZCBgc3BsaXQocmVnZXgpYCBmb3IgSUU4IGNvbXBhdGliaWxpdHkuIFNlZSAjMTcuXHJcblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xyXG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xyXG5cdFx0dmFyIGVuY29kZWQgPSBtYXAobGFiZWxzLCBmbikuam9pbignLicpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXHJcblx0ICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxyXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXHJcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXHJcblx0ICogbWF0Y2hpbmcgVVRGLTE2LlxyXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxyXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxyXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXHJcblx0ICogQG5hbWUgZGVjb2RlXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cclxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcclxuXHRcdHZhciBvdXRwdXQgPSBbXSxcclxuXHRcdCAgICBjb3VudGVyID0gMCxcclxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxyXG5cdFx0ICAgIHZhbHVlLFxyXG5cdFx0ICAgIGV4dHJhO1xyXG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcclxuXHRcdFx0dmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xyXG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XHJcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXHJcblx0XHRcdFx0ZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xyXG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXHJcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxyXG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXHJcblx0XHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XHJcblx0XHRcdFx0XHRjb3VudGVyLS07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG91dHB1dDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cclxuXHQgKiBAc2VlIGBwdW55Y29kZS51Y3MyLmRlY29kZWBcclxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxyXG5cdCAqIEBuYW1lIGVuY29kZVxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGNvZGVQb2ludHMgVGhlIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXHJcblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcclxuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcclxuXHRcdFx0aWYgKHZhbHVlID4gMHhGRkZGKSB7XHJcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcclxuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcclxuXHRcdFx0XHR2YWx1ZSA9IDB4REMwMCB8IHZhbHVlICYgMHgzRkY7XHJcblx0XHRcdH1cclxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XHJcblx0XHRcdHJldHVybiBvdXRwdXQ7XHJcblx0XHR9KS5qb2luKCcnKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cclxuXHQgKiBAc2VlIGBkaWdpdFRvQmFzaWMoKWBcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cclxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQgKGZvciB1c2UgaW5cclxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXHJcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xyXG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcclxuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDIyO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcclxuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDY1O1xyXG5cdFx0fVxyXG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcclxuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDk3O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGJhc2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXHJcblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXHJcblx0ICogQHByaXZhdGVcclxuXHQgKiBAcGFyYW0ge051bWJlcn0gZGlnaXQgVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50LlxyXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXHJcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2VcclxuXHQgKiBgMGAgdG8gYGJhc2UgLSAxYC4gSWYgYGZsYWdgIGlzIG5vbi16ZXJvLCB0aGUgdXBwZXJjYXNlIGZvcm0gaXNcclxuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxyXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XHJcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxyXG5cdFx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XHJcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cclxuXHQgKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XHJcblx0XHR2YXIgayA9IDA7XHJcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xyXG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xyXG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcclxuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxyXG5cdCAqIHN5bWJvbHMuXHJcblx0ICogQG1lbWJlck9mIHB1bnljb2RlXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxyXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcclxuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxyXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxyXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxyXG5cdFx0ICAgIG91dCxcclxuXHRcdCAgICBpID0gMCxcclxuXHRcdCAgICBuID0gaW5pdGlhbE4sXHJcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxyXG5cdFx0ICAgIGJhc2ljLFxyXG5cdFx0ICAgIGosXHJcblx0XHQgICAgaW5kZXgsXHJcblx0XHQgICAgb2xkaSxcclxuXHRcdCAgICB3LFxyXG5cdFx0ICAgIGssXHJcblx0XHQgICAgZGlnaXQsXHJcblx0XHQgICAgdCxcclxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cclxuXHRcdCAgICBiYXNlTWludXNUO1xyXG5cclxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxyXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcclxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxyXG5cclxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcclxuXHRcdGlmIChiYXNpYyA8IDApIHtcclxuXHRcdFx0YmFzaWMgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XHJcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxyXG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XHJcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xyXG5cdFx0XHR9XHJcblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcclxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXHJcblxyXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcclxuXHJcblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cclxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxyXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xyXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxyXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XHJcblxyXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xyXG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xyXG5cclxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XHJcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xyXG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xyXG5cclxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcclxuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XHJcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcclxuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xyXG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcclxuXHJcblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXHJcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XHJcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcclxuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcclxuXHRcdFx0aSAlPSBvdXQ7XHJcblxyXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XHJcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcclxuXHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXHJcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cclxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXHJcblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xyXG5cdFx0dmFyIG4sXHJcblx0XHQgICAgZGVsdGEsXHJcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXHJcblx0XHQgICAgYmFzaWNMZW5ndGgsXHJcblx0XHQgICAgYmlhcyxcclxuXHRcdCAgICBqLFxyXG5cdFx0ICAgIG0sXHJcblx0XHQgICAgcSxcclxuXHRcdCAgICBrLFxyXG5cdFx0ICAgIHQsXHJcblx0XHQgICAgY3VycmVudFZhbHVlLFxyXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxyXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXHJcblx0XHQgICAgaW5wdXRMZW5ndGgsXHJcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXHJcblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxyXG5cdFx0ICAgIGJhc2VNaW51c1QsXHJcblx0XHQgICAgcU1pbnVzVDtcclxuXHJcblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXHJcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xyXG5cclxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcclxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xyXG5cclxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXHJcblx0XHRuID0gaW5pdGlhbE47XHJcblx0XHRkZWx0YSA9IDA7XHJcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XHJcblxyXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xyXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcclxuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XHJcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XHJcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XHJcblxyXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XHJcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXHJcblxyXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXHJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcclxuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XHJcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xyXG5cclxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxyXG5cdFx0XHQvLyBsYXJnZXIgb25lOlxyXG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xyXG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xyXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XHJcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxyXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xyXG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XHJcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XHJcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XHJcblx0XHRcdG4gPSBtO1xyXG5cclxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcclxuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcclxuXHJcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xyXG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcclxuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXHJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XHJcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xyXG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XHJcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcclxuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXHJcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcclxuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XHJcblx0XHRcdFx0XHRkZWx0YSA9IDA7XHJcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0KytkZWx0YTtcclxuXHRcdFx0KytuO1xyXG5cclxuXHRcdH1cclxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXHJcblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxyXG5cdCAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxyXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxyXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cclxuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXHJcblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXHJcblx0ICogc3RyaW5nLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xyXG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XHJcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxyXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxyXG5cdFx0XHRcdDogc3RyaW5nO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cclxuXHQgKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcclxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cclxuXHQgKiBBU0NJSS5cclxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxyXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxyXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3JcclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHRvQVNDSUkoaW5wdXQpIHtcclxuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xyXG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcclxuXHRcdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXHJcblx0XHRcdFx0OiBzdHJpbmc7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXHJcblx0cHVueWNvZGUgPSB7XHJcblx0XHQvKipcclxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cclxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxyXG5cdFx0ICogQHR5cGUgU3RyaW5nXHJcblx0XHQgKi9cclxuXHRcdHZlcnNpb246ICcxLjMuMicsXHJcblx0XHQvKipcclxuXHRcdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXHJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxyXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XHJcblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcclxuXHRcdCAqIEB0eXBlIE9iamVjdFxyXG5cdFx0ICovXHJcblx0XHR1Y3MyOiB7XHJcblx0XHRcdGRlY29kZTogdWNzMmRlY29kZSxcclxuXHRcdFx0ZW5jb2RlOiB1Y3MyZW5jb2RlXHJcblx0XHR9LFxyXG5cdFx0ZGVjb2RlOiBkZWNvZGUsXHJcblx0XHRlbmNvZGU6IGVuY29kZSxcclxuXHRcdHRvQVNDSUk6IHRvQVNDSUksXHJcblx0XHR0b1VuaWNvZGU6IHRvVW5pY29kZVxyXG5cdH07XHJcblxyXG5cdHJldHVybiBwdW55Y29kZTtcclxufSgpKTtcclxuXHJcbmlmICh0eXBlb2YgQ09NUElMRUQgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikgbW9kdWxlLmV4cG9ydHMgPSBwdW55Y29kZTsiLCIvLy88cmVmZXJlbmNlIHBhdGg9XCJjb21tb25qcy5kLnRzXCIvPlxyXG5yZXF1aXJlKFwiLi9zY2hlbWVzL2h0dHBcIik7XHJcbnJlcXVpcmUoXCIuL3NjaGVtZXMvdXJuXCIpO1xyXG5yZXF1aXJlKFwiLi9zY2hlbWVzL21haWx0b1wiKTtcclxuIiwiLy8vPHJlZmVyZW5jZSBwYXRoPVwiLi4vdXJpLnRzXCIvPlxyXG5pZiAodHlwZW9mIENPTVBJTEVEID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkkgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIilcclxuICAgIHZhciBVUkkgPSByZXF1aXJlKFwiLi4vdXJpXCIpO1xyXG5VUkkuU0NIRU1FU1tcImh0dHBcIl0gPSBVUkkuU0NIRU1FU1tcImh0dHBzXCJdID0ge1xyXG4gICAgZG9tYWluSG9zdDogdHJ1ZSxcclxuICAgIHBhcnNlOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgIC8vcmVwb3J0IG1pc3NpbmcgaG9zdFxyXG4gICAgICAgIGlmICghY29tcG9uZW50cy5ob3N0KSB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgfSxcclxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcclxuICAgICAgICAvL25vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucG9ydCA9PT0gKFN0cmluZyhjb21wb25lbnRzLnNjaGVtZSkudG9Mb3dlckNhc2UoKSAhPT0gXCJodHRwc1wiID8gODAgOiA0NDMpIHx8IGNvbXBvbmVudHMucG9ydCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vbm9ybWFsaXplIHRoZSBlbXB0eSBwYXRoXHJcbiAgICAgICAgaWYgKCFjb21wb25lbnRzLnBhdGgpIHtcclxuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gXCIvXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vTk9URTogV2UgZG8gbm90IHBhcnNlIHF1ZXJ5IHN0cmluZ3MgZm9yIEhUVFAgVVJJc1xyXG4gICAgICAgIC8vYXMgV1dXIEZvcm0gVXJsIEVuY29kZWQgcXVlcnkgc3RyaW5ncyBhcmUgcGFydCBvZiB0aGUgSFRNTDQrIHNwZWMsXHJcbiAgICAgICAgLy9hbmQgbm90IHRoZSBIVFRQIHNwZWMuIFxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvLy88cmVmZXJlbmNlIHBhdGg9XCIuLi91cmkudHNcIi8+XHJcbmlmICh0eXBlb2YgQ09NUElMRUQgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIFVSSSA9PT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICB2YXIgVVJJID0gcmVxdWlyZShcIi4uL3VyaVwiKSwgcHVueWNvZGUgPSByZXF1aXJlKFwiLi4vcHVueWNvZGVcIik7XHJcbn1cclxuKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIG1lcmdlKCkge1xyXG4gICAgICAgIHZhciBzZXRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgc2V0c1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNldHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBzZXRzWzBdID0gc2V0c1swXS5zbGljZSgwLCAtMSk7XHJcbiAgICAgICAgICAgIHZhciB4bCA9IHNldHMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgZm9yICh2YXIgeCA9IDE7IHggPCB4bDsgKyt4KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRzW3hdID0gc2V0c1t4XS5zbGljZSgxLCAtMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0c1t4bF0gPSBzZXRzW3hsXS5zbGljZSgxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNldHMuam9pbignJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0c1swXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzdWJleHAoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiKD86XCIgKyBzdHIgKyBcIilcIjtcclxuICAgIH1cclxuICAgIHZhciBPID0ge30sIGlzSVJJID0gVVJJLklSSV9TVVBQT1JULCBcclxuICAgIC8vUkZDIDM5ODZcclxuICAgIFVOUkVTRVJWRUQkJCA9IFwiW0EtWmEtejAtOVxcXFwtXFxcXC5cXFxcX1xcXFx+XCIgKyAoaXNJUkkgPyBcIlxcXFx4QTAtXFxcXHUyMDBEXFxcXHUyMDEwLVxcXFx1MjAyOVxcXFx1MjAyRi1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZFRlwiIDogXCJcIikgKyBcIl1cIiwgSEVYRElHJCQgPSBcIlswLTlBLUZhLWZdXCIsIFBDVF9FTkNPREVEJCA9IHN1YmV4cChzdWJleHAoXCIlW0VGZWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVbODlBLUZhLWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpKSwgXHJcbiAgICAvL1JGQyA1MzIyLCBleGNlcHQgdGhlc2Ugc3ltYm9scyBhcyBwZXIgUkZDIDYwNjg6IEAgOiAvID8gIyBbIF0gJiA7ID0gXHJcbiAgICAvL0FURVhUJCQgPSBcIltBLVphLXowLTlcXFxcIVxcXFwjXFxcXCRcXFxcJVxcXFwmXFxcXCdcXFxcKlxcXFwrXFxcXC1cXFxcL1xcXFw9XFxcXD9cXFxcXlxcXFxfXFxcXGBcXFxce1xcXFx8XFxcXH1cXFxcfl1cIixcclxuICAgIC8vV1NQJCQgPSBcIltcXFxceDIwXFxcXHgwOV1cIixcclxuICAgIC8vT0JTX1FURVhUJCQgPSBcIltcXFxceDAxLVxcXFx4MDhcXFxceDBCXFxcXHgwQ1xcXFx4MEUtXFxcXHgxRlxcXFx4N0ZdXCIsICAvLyglZDEtOCAvICVkMTEtMTIgLyAlZDE0LTMxIC8gJWQxMjcpXHJcbiAgICAvL1FURVhUJCQgPSBtZXJnZShcIltcXFxceDIxXFxcXHgyMy1cXFxceDVCXFxcXHg1RC1cXFxceDdFXVwiLCBPQlNfUVRFWFQkJCksICAvLyVkMzMgLyAlZDM1LTkxIC8gJWQ5My0xMjYgLyBvYnMtcXRleHRcclxuICAgIC8vVkNIQVIkJCA9IFwiW1xcXFx4MjEtXFxcXHg3RV1cIixcclxuICAgIC8vV1NQJCQgPSBcIltcXFxceDIwXFxcXHgwOV1cIixcclxuICAgIC8vT0JTX1FQJCA9IHN1YmV4cChcIlxcXFxcXFxcXCIgKyBtZXJnZShcIltcXFxceDAwXFxcXHgwRFxcXFx4MEFdXCIsIE9CU19RVEVYVCQkKSksICAvLyVkMCAvIENSIC8gTEYgLyBvYnMtcXRleHRcclxuICAgIC8vRldTJCA9IHN1YmV4cChzdWJleHAoV1NQJCQgKyBcIipcIiArIFwiXFxcXHgwRFxcXFx4MEFcIikgKyBcIj9cIiArIFdTUCQkICsgXCIrXCIpLFxyXG4gICAgLy9RVU9URURfUEFJUiQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXFxcXFxcIiArIHN1YmV4cChWQ0hBUiQkICsgXCJ8XCIgKyBXU1AkJCkpICsgXCJ8XCIgKyBPQlNfUVAkKSxcclxuICAgIC8vUVVPVEVEX1NUUklORyQgPSBzdWJleHAoJ1xcXFxcIicgKyBzdWJleHAoRldTJCArIFwiP1wiICsgUUNPTlRFTlQkKSArIFwiKlwiICsgRldTJCArIFwiP1wiICsgJ1xcXFxcIicpLFxyXG4gICAgQVRFWFQkJCA9IFwiW0EtWmEtejAtOVxcXFwhXFxcXCRcXFxcJVxcXFwnXFxcXCpcXFxcK1xcXFwtXFxcXF5cXFxcX1xcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dXCIsIFFURVhUJCQgPSBcIltcXFxcIVxcXFwkXFxcXCVcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcLVxcXFwuMC05XFxcXDxcXFxcPkEtWlxcXFx4NUUtXFxcXHg3RV1cIiwgVkNIQVIkJCA9IG1lcmdlKFFURVhUJCQsIFwiW1xcXFxcXFwiXFxcXFxcXFxdXCIpLCBET1RfQVRPTV9URVhUJCA9IHN1YmV4cChBVEVYVCQkICsgXCIrXCIgKyBzdWJleHAoXCJcXFxcLlwiICsgQVRFWFQkJCArIFwiK1wiKSArIFwiKlwiKSwgUVVPVEVEX1BBSVIkID0gc3ViZXhwKFwiXFxcXFxcXFxcIiArIFZDSEFSJCQpLCBRQ09OVEVOVCQgPSBzdWJleHAoUVRFWFQkJCArIFwifFwiICsgUVVPVEVEX1BBSVIkKSwgUVVPVEVEX1NUUklORyQgPSBzdWJleHAoJ1xcXFxcIicgKyBRQ09OVEVOVCQgKyBcIipcIiArICdcXFxcXCInKSwgXHJcbiAgICAvL1JGQyA2MDY4XHJcbiAgICBEVEVYVF9OT19PQlMkJCA9IFwiW1xcXFx4MjEtXFxcXHg1QVxcXFx4NUUtXFxcXHg3RV1cIiwgU09NRV9ERUxJTVMkJCA9IFwiW1xcXFwhXFxcXCRcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcO1xcXFw6XFxcXEBdXCIsIFFDSEFSJCA9IHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCArIFwifFwiICsgU09NRV9ERUxJTVMkJCksIERPTUFJTiQgPSBzdWJleHAoRE9UX0FUT01fVEVYVCQgKyBcInxcIiArIFwiXFxcXFtcIiArIERURVhUX05PX09CUyQkICsgXCIqXCIgKyBcIlxcXFxdXCIpLCBMT0NBTF9QQVJUJCA9IHN1YmV4cChET1RfQVRPTV9URVhUJCArIFwifFwiICsgUVVPVEVEX1NUUklORyQpLCBBRERSX1NQRUMkID0gc3ViZXhwKExPQ0FMX1BBUlQkICsgXCJcXFxcQFwiICsgRE9NQUlOJCksIFRPJCA9IHN1YmV4cChBRERSX1NQRUMkICsgc3ViZXhwKFwiXFxcXCxcIiArIEFERFJfU1BFQyQpICsgXCIqXCIpLCBIRk5BTUUkID0gc3ViZXhwKFFDSEFSJCArIFwiKlwiKSwgSEZWQUxVRSQgPSBIRk5BTUUkLCBIRklFTEQkID0gc3ViZXhwKEhGTkFNRSQgKyBcIlxcXFw9XCIgKyBIRlZBTFVFJCksIEhGSUVMRFMyJCA9IHN1YmV4cChIRklFTEQkICsgc3ViZXhwKFwiXFxcXCZcIiArIEhGSUVMRCQpICsgXCIqXCIpLCBIRklFTERTJCA9IHN1YmV4cChcIlxcXFw/XCIgKyBIRklFTERTMiQpLCBNQUlMVE9fVVJJID0gVVJJLlZBTElEQVRFX1NVUFBPUlQgJiYgbmV3IFJlZ0V4cChcIl5tYWlsdG9cXFxcOlwiICsgVE8kICsgXCI/XCIgKyBIRklFTERTJCArIFwiPyRcIiksIFVOUkVTRVJWRUQgPSBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpLCBQQ1RfRU5DT0RFRCA9IG5ldyBSZWdFeHAoUENUX0VOQ09ERUQkLCBcImdcIiksIE5PVF9MT0NBTF9QQVJUID0gbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBVEVYVCQkLCBcIltcXFxcLl1cIiwgJ1tcXFxcXCJdJywgVkNIQVIkJCksIFwiZ1wiKSwgTk9UX0RPTUFJTiA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQVRFWFQkJCwgXCJbXFxcXC5dXCIsIFwiW1xcXFxbXVwiLCBEVEVYVF9OT19PQlMkJCwgXCJbXFxcXF1dXCIpLCBcImdcIiksIE5PVF9IRk5BTUUgPSBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIFVOUkVTRVJWRUQkJCwgU09NRV9ERUxJTVMkJCksIFwiZ1wiKSwgTk9UX0hGVkFMVUUgPSBOT1RfSEZOQU1FLCBUTyA9IFVSSS5WQUxJREFURV9TVVBQT1JUICYmIG5ldyBSZWdFeHAoXCJeXCIgKyBUTyQgKyBcIiRcIiksIEhGSUVMRFMgPSBVUkkuVkFMSURBVEVfU1VQUE9SVCAmJiBuZXcgUmVnRXhwKFwiXlwiICsgSEZJRUxEUzIkICsgXCIkXCIpO1xyXG4gICAgZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZChzdHIpIHtcclxuICAgICAgICB2YXIgZGVjU3RyID0gVVJJLnBjdERlY0NoYXJzKHN0cik7XHJcbiAgICAgICAgcmV0dXJuICghZGVjU3RyLm1hdGNoKFVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IChvYmogaW5zdGFuY2VvZiBBcnJheSAmJiAhb2JqLmNhbGxlZSA/IG9iaiA6ICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gXCJudW1iZXJcIiB8fCBvYmouc3BsaXQgfHwgb2JqLnNldEludGVydmFsIHx8IG9iai5jYWxsID8gW29ial0gOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopKSkgOiBbXTtcclxuICAgIH1cclxuICAgIFVSSS5TQ0hFTUVTW1wibWFpbHRvXCJdID0ge1xyXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoVVJJLlZBTElEQVRFX1NVUFBPUlQgJiYgIWNvbXBvbmVudHMuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzLnBhdGggJiYgIVRPLnRlc3QoY29tcG9uZW50cy5wYXRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBcIkVtYWlsIGFkZHJlc3MgaXMgbm90IHZhbGlkXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wb25lbnRzLnF1ZXJ5ICYmICFIRklFTERTLnRlc3QoY29tcG9uZW50cy5xdWVyeSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gXCJIZWFkZXIgZmllbGRzIGFyZSBpbnZhbGlkXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRvID0gY29tcG9uZW50cy50byA9IChjb21wb25lbnRzLnBhdGggPyBjb21wb25lbnRzLnBhdGguc3BsaXQoXCIsXCIpIDogW10pO1xyXG4gICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkhlYWRlcnMgPSBmYWxzZSwgaGVhZGVycyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdmFyIGhmaWVsZHMgPSBjb21wb25lbnRzLnF1ZXJ5LnNwbGl0KFwiJlwiKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwLCB4bCA9IGhmaWVsZHMubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoZmllbGQgPSBoZmllbGRzW3hdLnNwbGl0KFwiPVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGhmaWVsZFswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidG9cIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b0FkZHJzID0gaGZpZWxkWzFdLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHhfMSA9IDAsIHhsXzEgPSB0b0FkZHJzLmxlbmd0aDsgeF8xIDwgeGxfMTsgKyt4XzEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0by5wdXNoKHRvQWRkcnNbeF8xXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN1YmplY3RcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuc3ViamVjdCA9IFVSSS51bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib2R5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmJvZHkgPSBVUkkudW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkhlYWRlcnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tVUkkudW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzBdLCBvcHRpb25zKV0gPSBVUkkudW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duSGVhZGVycylcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmhlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwLCB4bCA9IHRvLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhZGRyID0gdG9beF0uc3BsaXQoXCJAXCIpO1xyXG4gICAgICAgICAgICAgICAgYWRkclswXSA9IFVSSS51bmVzY2FwZUNvbXBvbmVudChhZGRyWzBdKTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHVueWNvZGUgIT09IFwidW5kZWZpbmVkXCIgJiYgIW9wdGlvbnMudW5pY29kZVN1cHBvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkclsxXSA9IHB1bnljb2RlLnRvQVNDSUkoVVJJLnVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6IFwiICsgZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRyWzFdID0gVVJJLnVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0b1t4XSA9IGFkZHIuam9pbihcIkBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIChjb21wb25lbnRzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciB0byA9IHRvQXJyYXkoY29tcG9uZW50cy50byk7XHJcbiAgICAgICAgICAgIGlmICh0bykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDAsIHhsID0gdG8ubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0b0FkZHIgPSBTdHJpbmcodG9beF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdElkeCA9IHRvQWRkci5sYXN0SW5kZXhPZihcIkBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FsUGFydCA9IHRvQWRkci5zbGljZSgwLCBhdElkeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRvbWFpbiA9IHRvQWRkci5zbGljZShhdElkeCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsUGFydCA9IGxvY2FsUGFydC5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfTE9DQUxfUEFSVCwgVVJJLnBjdEVuY0NoYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHVueWNvZGUgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKFVSSS51bmVzY2FwZUNvbXBvbmVudChkb21haW4sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCkpIDogcHVueWNvZGUudG9Vbmljb2RlKGRvbWFpbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBcIiArICghb3B0aW9ucy5pcmkgPyBcIkFTQ0lJXCIgOiBcIlVuaWNvZGVcIikgKyBcIiB2aWEgcHVueWNvZGU6IFwiICsgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZG9tYWluLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0RPTUFJTiwgVVJJLnBjdEVuY0NoYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0b1t4XSA9IGxvY2FsUGFydCArIFwiQFwiICsgZG9tYWluO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gdG8uam9pbihcIixcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSBjb21wb25lbnRzLmhlYWRlcnMgPSBjb21wb25lbnRzLmhlYWRlcnMgfHwge307XHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLnN1YmplY3QpXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzW1wic3ViamVjdFwiXSA9IGNvbXBvbmVudHMuc3ViamVjdDtcclxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMuYm9keSlcclxuICAgICAgICAgICAgICAgIGhlYWRlcnNbXCJib2R5XCJdID0gY29tcG9uZW50cy5ib2R5O1xyXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWVfMSBpbiBoZWFkZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyc1tuYW1lXzFdICE9PSBPW25hbWVfMV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaChuYW1lXzEucmVwbGFjZShQQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0hGTkFNRSwgVVJJLnBjdEVuY0NoYXIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCI9XCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW25hbWVfMV0ucmVwbGFjZShQQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0hGVkFMVUUsIFVSSS5wY3RFbmNDaGFyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSBmaWVsZHMuam9pbihcIiZcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSkoKTtcclxuIiwiLy8vPHJlZmVyZW5jZSBwYXRoPVwiLi4vdXJpLnRzXCIvPlxyXG5pZiAodHlwZW9mIENPTVBJTEVEID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkkgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIilcclxuICAgIHZhciBVUkkgPSByZXF1aXJlKFwiLi4vdXJpXCIpO1xyXG4oZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHBjdEVuY0NoYXIgPSBVUkkucGN0RW5jQ2hhciwgTklEJCA9IFwiKD86WzAtOUEtWmEtel1bMC05QS1aYS16XFxcXC1dezEsMzF9KVwiLCBQQ1RfRU5DT0RFRCQgPSBcIig/OlxcXFwlWzAtOUEtRmEtZl17Mn0pXCIsIFRSQU5TJCQgPSBcIlswLTlBLVphLXpcXFxcKFxcXFwpXFxcXCtcXFxcLFxcXFwtXFxcXC5cXFxcOlxcXFw9XFxcXEBcXFxcO1xcXFwkXFxcXF9cXFxcIVxcXFwqXFxcXCdcXFxcL1xcXFw/XFxcXCNdXCIsIE5TUyQgPSBcIig/Oig/OlwiICsgUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBUUkFOUyQkICsgXCIpKylcIiwgVVJOX1NDSEVNRSA9IG5ldyBSZWdFeHAoXCJedXJuXFxcXDooXCIgKyBOSUQkICsgXCIpJFwiKSwgVVJOX1BBVEggPSBuZXcgUmVnRXhwKFwiXihcIiArIE5JRCQgKyBcIilcXFxcOihcIiArIE5TUyQgKyBcIikkXCIpLCBVUk5fUEFSU0UgPSAvXihbXlxcOl0rKVxcOiguKikvLCBVUk5fRVhDTFVERUQgPSAvW1xceDAwLVxceDIwXFxcXFxcXCJcXCZcXDxcXD5cXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5cXHg3Ri1cXHhGRl0vZywgVVVJRCA9IC9eWzAtOUEtRmEtZl17OH0oPzpcXC1bMC05QS1GYS1mXXs0fSl7M31cXC1bMC05QS1GYS1mXXsxMn0kLztcclxuICAgIC8vUkZDIDIxNDFcclxuICAgIFVSSS5TQ0hFTUVTW1widXJuXCJdID0ge1xyXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGNvbXBvbmVudHMucGF0aC5tYXRjaChVUk5fUEFUSCksIHNjaGVtZSwgc2NoZW1lSGFuZGxlcjtcclxuICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMudG9sZXJhbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIlVSTiBpcyBub3Qgc3RyaWN0bHkgdmFsaWQuXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBtYXRjaGVzID0gY29tcG9uZW50cy5wYXRoLm1hdGNoKFVSTl9QQVJTRSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtZSA9IFwidXJuOlwiICsgbWF0Y2hlc1sxXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgc2NoZW1lSGFuZGxlciA9IFVSSS5TQ0hFTUVTW3NjaGVtZV07XHJcbiAgICAgICAgICAgICAgICAvL2luIG9yZGVyIHRvIHNlcmlhbGl6ZSBwcm9wZXJseSwgXHJcbiAgICAgICAgICAgICAgICAvL2V2ZXJ5IFVSTiBtdXN0IGhhdmUgYSBzZXJpYWxpemVyIHRoYXQgY2FsbHMgdGhlIFVSTiBzZXJpYWxpemVyIFxyXG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWVIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jcmVhdGUgZmFrZSBzY2hlbWUgaGFuZGxlclxyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtZUhhbmRsZXIgPSBVUkkuU0NIRU1FU1tzY2hlbWVdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemU6IFVSSS5TQ0hFTUVTW1widXJuXCJdLnNlcmlhbGl6ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IHNjaGVtZTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IG1hdGNoZXNbMl07XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5wYXJzZShjb21wb25lbnRzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJOIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgICAgICB2YXIgc2NoZW1lID0gY29tcG9uZW50cy5zY2hlbWUgfHwgb3B0aW9ucy5zY2hlbWUsIG1hdGNoZXM7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWUgJiYgc2NoZW1lICE9PSBcInVyblwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHNjaGVtZS5tYXRjaChVUk5fU0NIRU1FKTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXCJ1cm46XCIgKyBzY2hlbWUsIHNjaGVtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IFwidXJuXCI7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzFdICsgXCI6XCIgKyAoY29tcG9uZW50cy5wYXRoID8gY29tcG9uZW50cy5wYXRoLnJlcGxhY2UoVVJOX0VYQ0xVREVELCBwY3RFbmNDaGFyKSA6IFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvL1JGQyA0MTIyXHJcbiAgICBVUkkuU0NIRU1FU1tcInVybjp1dWlkXCJdID0ge1xyXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMudG9sZXJhbnQgJiYgKCFjb21wb25lbnRzLnBhdGggfHwgIWNvbXBvbmVudHMucGF0aC5tYXRjaChVVUlEKSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVVJRCBpcyBub3QgdmFsaWQuXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIChjb21wb25lbnRzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIC8vZW5zdXJlIFVVSUQgaXMgdmFsaWRcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghY29tcG9uZW50cy5wYXRoIHx8ICFjb21wb25lbnRzLnBhdGgubWF0Y2goVVVJRCkpKSB7XHJcbiAgICAgICAgICAgICAgICAvL2ludmFsaWQgVVVJRHMgY2FuIG5vdCBoYXZlIHRoaXMgc2NoZW1lXHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplIFVVSURcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IChjb21wb25lbnRzLnBhdGggfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gVVJJLlNDSEVNRVNbXCJ1cm5cIl0uc2VyaWFsaXplKGNvbXBvbmVudHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0oKSk7XHJcbiIsIi8qKlxyXG4gKiBVUkkuanNcclxuICpcclxuICogQGZpbGVvdmVydmlldyBBbiBSRkMgMzk4NiBjb21wbGlhbnQsIHNjaGVtZSBleHRlbmRhYmxlIFVSSSBwYXJzaW5nL3ZhbGlkYXRpbmcvcmVzb2x2aW5nIGxpYnJhcnkgZm9yIEphdmFTY3JpcHQuXHJcbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzpnYXJ5LmNvdXJ0QGdtYWlsLmNvbVwiPkdhcnkgQ291cnQ8L2E+XHJcbiAqIEB2ZXJzaW9uIDIuMC4wXHJcbiAqIEBzZWUgaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qc1xyXG4gKiBAbGljZW5zZSBVUkkuanMgdjIuMC4wIChjKSAyMDExIEdhcnkgQ291cnQuIExpY2Vuc2U6IGh0dHA6Ly9naXRodWIuY29tL2dhcnljb3VydC91cmktanNcclxuICovXHJcbi8qKlxyXG4gKiBDb3B5cmlnaHQgMjAxMSBHYXJ5IENvdXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKlxyXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmVcclxuICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcbiAqXHJcbiAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mXHJcbiAqICAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICpcclxuICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3RcclxuICogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHNcclxuICogICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG4gKlxyXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdBUlkgQ09VUlQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEXHJcbiAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkRcclxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdBUlkgQ09VUlQgT1JcclxuICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcclxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxyXG4gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcclxuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGXHJcbiAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxyXG4gKlxyXG4gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZVxyXG4gKiBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZFxyXG4gKiBvciBpbXBsaWVkLCBvZiBHYXJ5IENvdXJ0LlxyXG4gKi9cclxuLy8vPHJlZmVyZW5jZSBwYXRoPVwicHVueWNvZGUuZC50c1wiLz5cclxuLy8vPHJlZmVyZW5jZSBwYXRoPVwiY29tbW9uanMuZC50c1wiLz5cclxuLyoqXHJcbiAqIENvbXBpbGVyIHN3aXRjaCBmb3IgaW5kaWNhdGluZyBjb2RlIGlzIGNvbXBpbGVkXHJcbiAqIEBkZWZpbmUge2Jvb2xlYW59XHJcbiAqL1xyXG52YXIgQ09NUElMRUQgPSBmYWxzZTtcclxuLyoqXHJcbiAqIENvbXBpbGVyIHN3aXRjaCBmb3Igc3VwcG9ydGluZyBJUkkgVVJJc1xyXG4gKiBAZGVmaW5lIHtib29sZWFufVxyXG4gKi9cclxudmFyIFVSSV9fSVJJX1NVUFBPUlQgPSB0cnVlO1xyXG4vKipcclxuICogQ29tcGlsZXIgc3dpdGNoIGZvciBzdXBwb3J0aW5nIFVSSSB2YWxpZGF0aW9uXHJcbiAqIEBkZWZpbmUge2Jvb2xlYW59XHJcbiAqL1xyXG52YXIgVVJJX19WQUxJREFURV9TVVBQT1JUID0gdHJ1ZTtcclxudmFyIFVSSSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBtZXJnZSgpIHtcclxuICAgICAgICB2YXIgc2V0cyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHNldHNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgc2V0c1swXSA9IHNldHNbMF0uc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgICB2YXIgeGwgPSBzZXRzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAxOyB4IDwgeGw7ICsreCkge1xyXG4gICAgICAgICAgICAgICAgc2V0c1t4XSA9IHNldHNbeF0uc2xpY2UoMSwgLTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldHNbeGxdID0gc2V0c1t4bF0uc2xpY2UoMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRzLmpvaW4oJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNldHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc3ViZXhwKHN0cikge1xyXG4gICAgICAgIHJldHVybiBcIig/OlwiICsgc3RyICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBidWlsZEV4cHMoaXNJUkkpIHtcclxuICAgICAgICB2YXIgQUxQSEEkJCA9IFwiW0EtWmEtel1cIiwgQ1IkID0gXCJbXFxcXHgwRF1cIiwgRElHSVQkJCA9IFwiWzAtOV1cIiwgRFFVT1RFJCQgPSBcIltcXFxceDIyXVwiLCBIRVhESUckJCA9IG1lcmdlKERJR0lUJCQsIFwiW0EtRmEtZl1cIiksIExGJCQgPSBcIltcXFxceDBBXVwiLCBTUCQkID0gXCJbXFxcXHgyMF1cIiwgUENUX0VOQ09ERUQkID0gc3ViZXhwKHN1YmV4cChcIiVbRUZlZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVs4OUEtRmEtZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkpLCBHRU5fREVMSU1TJCQgPSBcIltcXFxcOlxcXFwvXFxcXD9cXFxcI1xcXFxbXFxcXF1cXFxcQF1cIiwgU1VCX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwmXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcPV1cIiwgUkVTRVJWRUQkJCA9IG1lcmdlKEdFTl9ERUxJTVMkJCwgU1VCX0RFTElNUyQkKSwgVUNTQ0hBUiQkID0gaXNJUkkgPyBcIltcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZdXCIgOiBcIltdXCIsIElQUklWQVRFJCQgPSBpc0lSSSA/IFwiW1xcXFx1RTAwMC1cXFxcdUY4RkZdXCIgOiBcIltdXCIsIFVOUkVTRVJWRUQkJCA9IG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwtXFxcXC5cXFxcX1xcXFx+XVwiLCBVQ1NDSEFSJCQpLCBTQ0hFTUUkID0gc3ViZXhwKEFMUEhBJCQgKyBtZXJnZShBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpICsgXCIqXCIpLCBVU0VSSU5GTyQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSkgKyBcIipcIiksIERFQ19PQ1RFVCQgPSBzdWJleHAoc3ViZXhwKFwiMjVbMC01XVwiKSArIFwifFwiICsgc3ViZXhwKFwiMlswLTRdXCIgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMVwiICsgRElHSVQkJCArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCJbMS05XVwiICsgRElHSVQkJCkgKyBcInxcIiArIERJR0lUJCQpLCBJUFY0QUREUkVTUyQgPSBzdWJleHAoREVDX09DVEVUJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUJCksIEgxNiQgPSBzdWJleHAoSEVYRElHJCQgKyBcInsxLDR9XCIpLCBMUzMyJCA9IHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIiArIEgxNiQpICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQpLCBJUFY2QUREUkVTUyQgPSBzdWJleHAobWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSArIFwiK1wiKSwgSVBWRlVUVVJFJCA9IHN1YmV4cChcInZcIiArIEhFWERJRyQkICsgXCIrXFxcXC5cIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOl1cIikgKyBcIitcIiksIElQX0xJVEVSQUwkID0gc3ViZXhwKFwiXFxcXFtcIiArIHN1YmV4cChJUFY2QUREUkVTUyQgKyBcInxcIiArIElQVkZVVFVSRSQpICsgXCJcXFxcXVwiKSwgUkVHX05BTUUkID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSkgKyBcIipcIiksIEhPU1QkID0gc3ViZXhwKElQX0xJVEVSQUwkICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQgKyBcIig/IVwiICsgUkVHX05BTUUkICsgXCIpXCIgKyBcInxcIiArIFJFR19OQU1FJCksIFBPUlQkID0gc3ViZXhwKERJR0lUJCQgKyBcIipcIiksIEFVVEhPUklUWSQgPSBzdWJleHAoc3ViZXhwKFVTRVJJTkZPJCArIFwiQFwiKSArIFwiP1wiICsgSE9TVCQgKyBzdWJleHAoXCJcXFxcOlwiICsgUE9SVCQpICsgXCI/XCIpLCBQQ0hBUiQgPSBzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQF1cIikpLCBTRUdNRU5UJCA9IHN1YmV4cChQQ0hBUiQgKyBcIipcIiksIFNFR01FTlRfTlokID0gc3ViZXhwKFBDSEFSJCArIFwiK1wiKSwgU0VHTUVOVF9OWl9OQyQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFxAXVwiKSkgKyBcIitcIiksIFBBVEhfQUJFTVBUWSQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cIiArIFNFR01FTlQkKSArIFwiKlwiKSwgUEFUSF9BQlNPTFVURSQgPSBzdWJleHAoXCJcXFxcL1wiICsgc3ViZXhwKFNFR01FTlRfTlokICsgUEFUSF9BQkVNUFRZJCkgKyBcIj9cIiksIFBBVEhfTk9TQ0hFTUUkID0gc3ViZXhwKFNFR01FTlRfTlpfTkMkICsgUEFUSF9BQkVNUFRZJCksIFBBVEhfUk9PVExFU1MkID0gc3ViZXhwKFNFR01FTlRfTlokICsgUEFUSF9BQkVNUFRZJCksIFBBVEhfRU1QVFkkID0gXCIoPyFcIiArIFBDSEFSJCArIFwiKVwiLCBQQVRIJCA9IHN1YmV4cChQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksIFFVRVJZJCA9IHN1YmV4cChzdWJleHAoUENIQVIkICsgXCJ8XCIgKyBtZXJnZShcIltcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSkgKyBcIipcIiksIEZSQUdNRU5UJCA9IHN1YmV4cChzdWJleHAoUENIQVIkICsgXCJ8W1xcXFwvXFxcXD9dXCIpICsgXCIqXCIpLCBISUVSX1BBUlQkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC9cIiArIEFVVEhPUklUWSQgKyBQQVRIX0FCRU1QVFkkKSArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksIFVSSSQgPSBzdWJleHAoU0NIRU1FJCArIFwiXFxcXDpcIiArIEhJRVJfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCNcIiArIEZSQUdNRU5UJCkgKyBcIj9cIiksIFJFTEFUSVZFX1BBUlQkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC9cIiArIEFVVEhPUklUWSQgKyBQQVRIX0FCRU1QVFkkKSArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksIFJFTEFUSVZFJCA9IHN1YmV4cChSRUxBVElWRV9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSwgVVJJX1JFRkVSRU5DRSQgPSBzdWJleHAoVVJJJCArIFwifFwiICsgUkVMQVRJVkUkKSwgQUJTT0xVVEVfVVJJJCA9IHN1YmV4cChTQ0hFTUUkICsgXCJcXFxcOlwiICsgSElFUl9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIpLCBHRU5FUklDX1JFRiQgPSBcIl4oXCIgKyBTQ0hFTUUkICsgXCIpXFxcXDpcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsIFJFTEFUSVZFX1JFRiQgPSBcIl4oKXswfVwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIiwgQUJTT0xVVEVfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/JFwiLCBTQU1FRE9DX1JFRiQgPSBcIl5cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLCBBVVRIT1JJVFlfUkVGJCA9IFwiXlwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/JFwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFVSSV9SRUY6IFVSSV9fVkFMSURBVEVfU1VQUE9SVCAmJiBuZXcgUmVnRXhwKFwiKFwiICsgR0VORVJJQ19SRUYkICsgXCIpfChcIiArIFJFTEFUSVZFX1JFRiQgKyBcIilcIiksXHJcbiAgICAgICAgICAgIE5PVF9TQ0hFTUU6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXCtcXFxcLVxcXFwuXVwiKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfVVNFUklORk86IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXDpdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfSE9TVDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfUEFUSDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFw6XFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfUEFUSF9OT1NDSEVNRTogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFxAXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcclxuICAgICAgICAgICAgTk9UX1FVRVJZOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJV1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfRlJBR01FTlQ6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIpLCBcImdcIiksXHJcbiAgICAgICAgICAgIEVTQ0FQRTogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcclxuICAgICAgICAgICAgVU5SRVNFUlZFRDogbmV3IFJlZ0V4cChVTlJFU0VSVkVEJCQsIFwiZ1wiKSxcclxuICAgICAgICAgICAgT1RIRVJfQ0hBUlM6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFJFU0VSVkVEJCQpLCBcImdcIiksXHJcbiAgICAgICAgICAgIFBDVF9FTkNPREVEOiBuZXcgUmVnRXhwKFBDVF9FTkNPREVEJCwgXCJnXCIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHZhciBVUklfUFJPVE9DT0wgPSBidWlsZEV4cHMoZmFsc2UpLCBJUklfUFJPVE9DT0wgPSBVUklfX0lSSV9TVVBQT1JUID8gYnVpbGRFeHBzKHRydWUpIDogdW5kZWZpbmVkLCBVUklfUEFSU0UgPSAvXig/OihbXjpcXC8/I10rKTopPyg/OlxcL1xcLygoPzooW15cXC8/I0BdKilAKT8oW15cXC8/IzpdKikoPzpcXDooXFxkKikpPykpPyhbXj8jXSopKD86XFw/KFteI10qKSk/KD86IygoPzoufFxcbikqKSk/L2ksIFJEUzEgPSAvXlxcLlxcLj9cXC8vLCBSRFMyID0gL15cXC9cXC4oXFwvfCQpLywgUkRTMyA9IC9eXFwvXFwuXFwuKFxcL3wkKS8sIFJEUzQgPSAvXlxcLlxcLj8kLywgUkRTNSA9IC9eXFwvPyg/Oi58XFxuKSo/KD89XFwvfCQpLywgTk9fTUFUQ0hfSVNfVU5ERUZJTkVEID0gKFwiXCIpLm1hdGNoKC8oKXswfS8pWzFdID09PSB1bmRlZmluZWQ7XHJcbiAgICBmdW5jdGlvbiBwY3RFbmNDaGFyKGNocikge1xyXG4gICAgICAgIHZhciBjID0gY2hyLmNoYXJDb2RlQXQoMCksIGU7XHJcbiAgICAgICAgaWYgKGMgPCAxNilcclxuICAgICAgICAgICAgZSA9IFwiJTBcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgZWxzZSBpZiAoYyA8IDEyOClcclxuICAgICAgICAgICAgZSA9IFwiJVwiICsgYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBlbHNlIGlmIChjIDwgMjA0OClcclxuICAgICAgICAgICAgZSA9IFwiJVwiICsgKChjID4+IDYpIHwgMTkyKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKChjICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGUgPSBcIiVcIiArICgoYyA+PiAxMikgfCAyMjQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoKChjID4+IDYpICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKChjICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHBjdERlY0NoYXJzKHN0cikge1xyXG4gICAgICAgIHZhciBuZXdTdHIgPSBcIlwiLCBpID0gMCwgaWwgPSBzdHIubGVuZ3RoLCBjLCBjMiwgYzM7XHJcbiAgICAgICAgd2hpbGUgKGkgPCBpbCkge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgMSwgMiksIDE2KTtcclxuICAgICAgICAgICAgaWYgKGMgPCAxMjgpIHtcclxuICAgICAgICAgICAgICAgIG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xyXG4gICAgICAgICAgICAgICAgaSArPSAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMTk0ICYmIGMgPCAyMjQpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoaWwgLSBpKSA+PSA2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYzIgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA0LCAyKSwgMTYpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDMxKSA8PCA2KSB8IChjMiAmIDYzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGkgKz0gNjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjID49IDIyNCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChpbCAtIGkpID49IDkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjMiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDQsIDIpLCAxNik7XHJcbiAgICAgICAgICAgICAgICAgICAgYzMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA3LCAyKSwgMTYpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDE1KSA8PCAxMikgfCAoKGMyICYgNjMpIDw8IDYpIHwgKGMzICYgNjMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaSArPSA5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3U3RyICs9IHN0ci5zdWJzdHIoaSwgMyk7XHJcbiAgICAgICAgICAgICAgICBpICs9IDM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld1N0cjtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHR5cGVPZihvKSB7XHJcbiAgICAgICAgcmV0dXJuIG8gPT09IHVuZGVmaW5lZCA/IFwidW5kZWZpbmVkXCIgOiAobyA9PT0gbnVsbCA/IFwibnVsbFwiIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNwbGl0KFwiIFwiKS5wb3AoKS5zcGxpdChcIl1cIikuc2hpZnQoKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRvVXBwZXJDYXNlKHN0cikge1xyXG4gICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuICAgIHZhciBTQ0hFTUVTID0ge307XHJcbiAgICBmdW5jdGlvbiBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpIHtcclxuICAgICAgICBmdW5jdGlvbiBkZWNvZGVVbnJlc2VydmVkKHN0cikge1xyXG4gICAgICAgICAgICB2YXIgZGVjU3RyID0gcGN0RGVjQ2hhcnMoc3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuICghZGVjU3RyLm1hdGNoKHByb3RvY29sLlVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMuc2NoZW1lKVxyXG4gICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IFN0cmluZyhjb21wb25lbnRzLnNjaGVtZSkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHByb3RvY29sLk5PVF9TQ0hFTUUsIFwiXCIpO1xyXG4gICAgICAgIGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMudXNlcmluZm8gPSBTdHJpbmcoY29tcG9uZW50cy51c2VyaW5mbykucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfVVNFUklORk8sIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcclxuICAgICAgICBpZiAoY29tcG9uZW50cy5ob3N0ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IFN0cmluZyhjb21wb25lbnRzLmhvc3QpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfSE9TVCwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xyXG4gICAgICAgIGlmIChjb21wb25lbnRzLnBhdGggIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gU3RyaW5nKGNvbXBvbmVudHMucGF0aCkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZSgoY29tcG9uZW50cy5zY2hlbWUgPyBwcm90b2NvbC5OT1RfUEFUSCA6IHByb3RvY29sLk5PVF9QQVRIX05PU0NIRU1FKSwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xyXG4gICAgICAgIGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSBTdHJpbmcoY29tcG9uZW50cy5xdWVyeSkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfUVVFUlksIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcclxuICAgICAgICBpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBjb21wb25lbnRzLmZyYWdtZW50ID0gU3RyaW5nKGNvbXBvbmVudHMuZnJhZ21lbnQpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0ZSQUdNRU5ULCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiBwYXJzZSh1cmlTdHJpbmcsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgICAgIHZhciBwcm90b2NvbCA9IChVUklfX0lSSV9TVVBQT1JUICYmIG9wdGlvbnMuaXJpICE9PSBmYWxzZSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCksIG1hdGNoZXMsIHBhcnNlRXJyb3IgPSBmYWxzZSwgY29tcG9uZW50cyA9IHt9LCBzY2hlbWVIYW5kbGVyO1xyXG4gICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSA9PT0gXCJzdWZmaXhcIilcclxuICAgICAgICAgICAgdXJpU3RyaW5nID0gKG9wdGlvbnMuc2NoZW1lID8gb3B0aW9ucy5zY2hlbWUgKyBcIjpcIiA6IFwiXCIpICsgXCIvL1wiICsgdXJpU3RyaW5nO1xyXG4gICAgICAgIGlmIChVUklfX1ZBTElEQVRFX1NVUFBPUlQpIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IHVyaVN0cmluZy5tYXRjaChwcm90b2NvbC5VUklfUkVGKTtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzWzFdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9nZW5lcmljIFVSSVxyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBtYXRjaGVzLnNsaWNlKDEsIDEwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcmVsYXRpdmUgVVJJXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMuc2xpY2UoMTAsIDE5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnRvbGVyYW50KVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGlzIG5vdCBzdHJpY3RseSB2YWxpZC5cIjtcclxuICAgICAgICAgICAgICAgIG1hdGNoZXMgPSB1cmlTdHJpbmcubWF0Y2goVVJJX1BBUlNFKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IHVyaVN0cmluZy5tYXRjaChVUklfUEFSU0UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICAgICAgICBpZiAoTk9fTUFUQ0hfSVNfVU5ERUZJTkVEKSB7XHJcbiAgICAgICAgICAgICAgICAvL3N0b3JlIGVhY2ggY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IG1hdGNoZXNbMV07XHJcbiAgICAgICAgICAgICAgICAvL2NvbXBvbmVudHMuYXV0aG9yaXR5ID0gbWF0Y2hlc1syXTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMudXNlcmluZm8gPSBtYXRjaGVzWzNdO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gbWF0Y2hlc1s0XTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IG1hdGNoZXNbNl0gfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSBtYXRjaGVzWzddO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5mcmFnbWVudCA9IG1hdGNoZXNbOF07XHJcbiAgICAgICAgICAgICAgICAvL2ZpeCBwb3J0IG51bWJlclxyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBvbmVudHMucG9ydCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSBtYXRjaGVzWzVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9zdG9yZSBlYWNoIGNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIC8vY29tcG9uZW50cy5hdXRob3JpdHkgPSAodXJpU3RyaW5nLmluZGV4T2YoXCIvL1wiKSAhPT0gLTEgPyBtYXRjaGVzWzJdIDogdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMudXNlcmluZm8gPSAodXJpU3RyaW5nLmluZGV4T2YoXCJAXCIpICE9PSAtMSA/IG1hdGNoZXNbM10gOiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiLy9cIikgIT09IC0xID8gbWF0Y2hlc1s0XSA6IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzZdIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnF1ZXJ5ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiP1wiKSAhPT0gLTEgPyBtYXRjaGVzWzddIDogdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZnJhZ21lbnQgPSAodXJpU3RyaW5nLmluZGV4T2YoXCIjXCIpICE9PSAtMSA/IG1hdGNoZXNbOF0gOiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgLy9maXggcG9ydCBudW1iZXJcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gKHVyaVN0cmluZy5tYXRjaCgvXFwvXFwvKD86LnxcXG4pKlxcOig/OlxcL3xcXD98XFwjfCQpLykgPyBtYXRjaGVzWzRdIDogdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2RldGVybWluZSByZWZlcmVuY2UgdHlwZVxyXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLnVzZXJpbmZvID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5ob3N0ID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5wb3J0ID09PSB1bmRlZmluZWQgJiYgIWNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnF1ZXJ5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJzYW1lLWRvY3VtZW50XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50cy5zY2hlbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5yZWZlcmVuY2UgPSBcInJlbGF0aXZlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50cy5mcmFnbWVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJ1cmlcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2NoZWNrIGZvciByZWZlcmVuY2UgZXJyb3JzXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAmJiBvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIiAmJiBvcHRpb25zLnJlZmVyZW5jZSAhPT0gY29tcG9uZW50cy5yZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGlzIG5vdCBhIFwiICsgb3B0aW9ucy5yZWZlcmVuY2UgKyBcIiByZWZlcmVuY2UuXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9maW5kIHNjaGVtZSBoYW5kbGVyXHJcbiAgICAgICAgICAgIHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTWyhvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnRzLnNjaGVtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgICAgLy9jaGVjayBpZiBzY2hlbWUgY2FuJ3QgaGFuZGxlIElSSXNcclxuICAgICAgICAgICAgaWYgKFVSSV9fSVJJX1NVUFBPUlQgJiYgdHlwZW9mIHB1bnljb2RlICE9PSBcInVuZGVmaW5lZFwiICYmICFvcHRpb25zLnVuaWNvZGVTdXBwb3J0ICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci51bmljb2RlU3VwcG9ydCkpIHtcclxuICAgICAgICAgICAgICAgIC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMuaG9zdCAmJiAob3B0aW9ucy5kb21haW5Ib3N0IHx8IChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuZG9tYWluSG9zdCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IHB1bnljb2RlLnRvQVNDSUkoY29tcG9uZW50cy5ob3N0LnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHBjdERlY0NoYXJzKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gQVNDSUkgdmlhIHB1bnljb2RlOiBcIiArIGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IElSSSAtPiBVUklcclxuICAgICAgICAgICAgICAgIF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBVUklfUFJPVE9DT0wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9ub3JtYWxpemUgZW5jb2RpbmdzXHJcbiAgICAgICAgICAgICAgICBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgcGFyc2luZ1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnBhcnNlKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWVIYW5kbGVyLnBhcnNlKGNvbXBvbmVudHMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUkkgY2FuIG5vdCBiZSBwYXJzZWQuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgfVxyXG4gICAgO1xyXG4gICAgZnVuY3Rpb24gX3JlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnRzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIHVyaVRva2VucyA9IFtdO1xyXG4gICAgICAgIGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy51c2VyaW5mbyk7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKFwiQFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMuaG9zdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcclxuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5wb3J0LnRvU3RyaW5nKDEwKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmlUb2tlbnMubGVuZ3RoID8gdXJpVG9rZW5zLmpvaW4oXCJcIikgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyhpbnB1dCkge1xyXG4gICAgICAgIHZhciBvdXRwdXQgPSBbXSwgcztcclxuICAgICAgICB3aGlsZSAoaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5tYXRjaChSRFMxKSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKFJEUzEsIFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzIpKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMiwgXCIvXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzMpKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMywgXCIvXCIpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0ID09PSBcIi5cIiB8fCBpbnB1dCA9PT0gXCIuLlwiKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzID0gaW5wdXQubWF0Y2goUkRTNSlbMF07XHJcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKHMubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvdXRwdXQuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIDtcclxuICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZShjb21wb25lbnRzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgICAgICB2YXIgcHJvdG9jb2wgPSAoVVJJX19JUklfU1VQUE9SVCAmJiBvcHRpb25zLmlyaSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCksIHVyaVRva2VucyA9IFtdLCBzY2hlbWVIYW5kbGVyLCBhdXRob3JpdHksIHM7XHJcbiAgICAgICAgLy9maW5kIHNjaGVtZSBoYW5kbGVyXHJcbiAgICAgICAgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgIC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxyXG4gICAgICAgIGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKVxyXG4gICAgICAgICAgICBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZShjb21wb25lbnRzLCBvcHRpb25zKTtcclxuICAgICAgICAvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcclxuICAgICAgICBpZiAoVVJJX19JUklfU1VQUE9SVCAmJiB0eXBlb2YgcHVueWNvZGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29tcG9uZW50cy5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkpIHtcclxuICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoY29tcG9uZW50cy5ob3N0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vbm9ybWFsaXplIGVuY29kaW5nXHJcbiAgICAgICAgX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIHByb3RvY29sKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgY29tcG9uZW50cy5zY2hlbWUpIHtcclxuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5zY2hlbWUpO1xyXG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIjpcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF1dGhvcml0eSA9IF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50cywgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKGF1dGhvcml0eSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIikge1xyXG4gICAgICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goXCIvL1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChhdXRob3JpdHkpO1xyXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucGF0aC5jaGFyQXQoMCkgIT09IFwiL1wiKSB7XHJcbiAgICAgICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIi9cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHMgPSBjb21wb25lbnRzLnBhdGg7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hYnNvbHV0ZVBhdGggJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLmFic29sdXRlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIHMgPSByZW1vdmVEb3RTZWdtZW50cyhzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoL15cXC9cXC8vLCBcIi8lMkZcIik7IC8vZG9uJ3QgYWxsb3cgdGhlIHBhdGggdG8gc3RhcnQgd2l0aCBcIi8vXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIj9cIik7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMucXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKFwiI1wiKTtcclxuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5mcmFnbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmlUb2tlbnMuam9pbignJyk7IC8vbWVyZ2UgdG9rZW5zIGludG8gYSBzdHJpbmdcclxuICAgIH1cclxuICAgIDtcclxuICAgIGZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnRzKGJhc2UsIHJlbGF0aXZlLCBvcHRpb25zLCBza2lwTm9ybWFsaXphdGlvbikge1xyXG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHt9O1xyXG4gICAgICAgIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcclxuICAgICAgICAgICAgYmFzZSA9IHBhcnNlKHNlcmlhbGl6ZShiYXNlLCBvcHRpb25zKSwgb3B0aW9ucyk7IC8vbm9ybWFsaXplIGJhc2UgY29tcG9uZW50c1xyXG4gICAgICAgICAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpOyAvL25vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcclxuICAgICAgICAgICAgdGFyZ2V0LnNjaGVtZSA9IHJlbGF0aXZlLnNjaGVtZTtcclxuICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xyXG4gICAgICAgICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcclxuICAgICAgICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0O1xyXG4gICAgICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XHJcbiAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJlbGF0aXZlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLnBvcnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnVzZXJpbmZvID0gcmVsYXRpdmUudXNlcmluZm87XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3Q7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlbGF0aXZlLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVsYXRpdmUucXVlcnkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IGJhc2UucXVlcnk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGF0aXZlLnBhdGguY2hhckF0KDApID09PSBcIi9cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiYXNlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgYmFzZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgYmFzZS5wb3J0ICE9PSB1bmRlZmluZWQpICYmICFiYXNlLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gXCIvXCIgKyByZWxhdGl2ZS5wYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKDAsIGJhc2UucGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIHJlbGF0aXZlLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyh0YXJnZXQucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Lmhvc3QgPSBiYXNlLmhvc3Q7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQucG9ydCA9IGJhc2UucG9ydDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0YXJnZXQuc2NoZW1lID0gYmFzZS5zY2hlbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhcmdldC5mcmFnbWVudCA9IHJlbGF0aXZlLmZyYWdtZW50O1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiByZXNvbHZlKGJhc2VVUkksIHJlbGF0aXZlVVJJLCBvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShyZXNvbHZlQ29tcG9uZW50cyhwYXJzZShiYXNlVVJJLCBvcHRpb25zKSwgcGFyc2UocmVsYXRpdmVVUkksIG9wdGlvbnMpLCBvcHRpb25zLCB0cnVlKSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiBub3JtYWxpemUodXJpLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgdXJpID0gc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlT2YodXJpKSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICB1cmkgPSBwYXJzZShzZXJpYWxpemUodXJpLCBvcHRpb25zKSwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiBlcXVhbCh1cmlBLCB1cmlCLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1cmlBID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHVyaUEgPSBzZXJpYWxpemUocGFyc2UodXJpQSwgb3B0aW9ucyksIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlT2YodXJpQSkgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdXJpQSA9IHNlcmlhbGl6ZSh1cmlBLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1cmlCID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHVyaUIgPSBzZXJpYWxpemUocGFyc2UodXJpQiwgb3B0aW9ucyksIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlT2YodXJpQikgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdXJpQiA9IHNlcmlhbGl6ZSh1cmlCLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVyaUEgPT09IHVyaUI7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiBlc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCghVVJJX19JUklfU1VQUE9SVCB8fCAhb3B0aW9ucyB8fCAhb3B0aW9ucy5pcmkgPyBVUklfUFJPVE9DT0wuRVNDQVBFIDogSVJJX1BST1RPQ09MLkVTQ0FQRSksIHBjdEVuY0NoYXIpO1xyXG4gICAgfVxyXG4gICAgO1xyXG4gICAgZnVuY3Rpb24gdW5lc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCghVVJJX19JUklfU1VQUE9SVCB8fCAhb3B0aW9ucyB8fCAhb3B0aW9ucy5pcmkgPyBVUklfUFJPVE9DT0wuUENUX0VOQ09ERUQgOiBJUklfUFJPVE9DT0wuUENUX0VOQ09ERUQpLCBwY3REZWNDaGFycyk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIElSSV9TVVBQT1JUOiBVUklfX0lSSV9TVVBQT1JULFxyXG4gICAgICAgIFZBTElEQVRFX1NVUFBPUlQ6IFVSSV9fVkFMSURBVEVfU1VQUE9SVCxcclxuICAgICAgICBwY3RFbmNDaGFyOiBwY3RFbmNDaGFyLFxyXG4gICAgICAgIHBjdERlY0NoYXJzOiBwY3REZWNDaGFycyxcclxuICAgICAgICBTQ0hFTUVTOiBTQ0hFTUVTLFxyXG4gICAgICAgIHBhcnNlOiBwYXJzZSxcclxuICAgICAgICBfcmVjb21wb3NlQXV0aG9yaXR5OiBfcmVjb21wb3NlQXV0aG9yaXR5LFxyXG4gICAgICAgIHJlbW92ZURvdFNlZ21lbnRzOiByZW1vdmVEb3RTZWdtZW50cyxcclxuICAgICAgICBzZXJpYWxpemU6IHNlcmlhbGl6ZSxcclxuICAgICAgICByZXNvbHZlQ29tcG9uZW50czogcmVzb2x2ZUNvbXBvbmVudHMsXHJcbiAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcclxuICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcclxuICAgICAgICBlcXVhbDogZXF1YWwsXHJcbiAgICAgICAgZXNjYXBlQ29tcG9uZW50OiBlc2NhcGVDb21wb25lbnQsXHJcbiAgICAgICAgdW5lc2NhcGVDb21wb25lbnQ6IHVuZXNjYXBlQ29tcG9uZW50XHJcbiAgICB9O1xyXG59KSgpO1xyXG5pZiAoIUNPTVBJTEVEICYmIHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgdmFyIHB1bnljb2RlID0gcmVxdWlyZShcIi4vcHVueWNvZGVcIik7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFVSSTtcclxuICAgIHJlcXVpcmUoXCIuL3NjaGVtZXNcIik7XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmV4cG9ydHMucGFyc2UgPSB1cmxQYXJzZTtcbmV4cG9ydHMucmVzb2x2ZSA9IHVybFJlc29sdmU7XG5leHBvcnRzLnJlc29sdmVPYmplY3QgPSB1cmxSZXNvbHZlT2JqZWN0O1xuZXhwb3J0cy5mb3JtYXQgPSB1cmxGb3JtYXQ7XG5cbmV4cG9ydHMuVXJsID0gVXJsO1xuXG5mdW5jdGlvbiBVcmwoKSB7XG4gIHRoaXMucHJvdG9jb2wgPSBudWxsO1xuICB0aGlzLnNsYXNoZXMgPSBudWxsO1xuICB0aGlzLmF1dGggPSBudWxsO1xuICB0aGlzLmhvc3QgPSBudWxsO1xuICB0aGlzLnBvcnQgPSBudWxsO1xuICB0aGlzLmhvc3RuYW1lID0gbnVsbDtcbiAgdGhpcy5oYXNoID0gbnVsbDtcbiAgdGhpcy5zZWFyY2ggPSBudWxsO1xuICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgdGhpcy5wYXRobmFtZSA9IG51bGw7XG4gIHRoaXMucGF0aCA9IG51bGw7XG4gIHRoaXMuaHJlZiA9IG51bGw7XG59XG5cbi8vIFJlZmVyZW5jZTogUkZDIDM5ODYsIFJGQyAxODA4LCBSRkMgMjM5NlxuXG4vLyBkZWZpbmUgdGhlc2UgaGVyZSBzbyBhdCBsZWFzdCB0aGV5IG9ubHkgaGF2ZSB0byBiZVxuLy8gY29tcGlsZWQgb25jZSBvbiB0aGUgZmlyc3QgbW9kdWxlIGxvYWQuXG52YXIgcHJvdG9jb2xQYXR0ZXJuID0gL14oW2EtejAtOS4rLV0rOikvaSxcbiAgICBwb3J0UGF0dGVybiA9IC86WzAtOV0qJC8sXG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGEgc2ltcGxlIHBhdGggVVJMXG4gICAgc2ltcGxlUGF0aFBhdHRlcm4gPSAvXihcXC9cXC8/KD8hXFwvKVteXFw/XFxzXSopKFxcP1teXFxzXSopPyQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eWythLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBjYW4gYWxsb3cgXCJ1bnNhZmVcIiBhbmQgXCJ1bndpc2VcIiBjaGFycy5cbiAgICB1bnNhZmVQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IG5ldmVyIGhhdmUgYSBob3N0bmFtZS5cbiAgICBob3N0bGVzc1Byb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgYWx3YXlzIGNvbnRhaW4gYSAvLyBiaXQuXG4gICAgc2xhc2hlZFByb3RvY29sID0ge1xuICAgICAgJ2h0dHAnOiB0cnVlLFxuICAgICAgJ2h0dHBzJzogdHJ1ZSxcbiAgICAgICdmdHAnOiB0cnVlLFxuICAgICAgJ2dvcGhlcic6IHRydWUsXG4gICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAnaHR0cDonOiB0cnVlLFxuICAgICAgJ2h0dHBzOic6IHRydWUsXG4gICAgICAnZnRwOic6IHRydWUsXG4gICAgICAnZ29waGVyOic6IHRydWUsXG4gICAgICAnZmlsZTonOiB0cnVlXG4gICAgfSxcbiAgICBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbmZ1bmN0aW9uIHVybFBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKHVybCAmJiB1dGlsLmlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghdXRpbC5pc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIC8vIENvcHkgY2hyb21lLCBJRSwgb3BlcmEgYmFja3NsYXNoLWhhbmRsaW5nIGJlaGF2aW9yLlxuICAvLyBCYWNrIHNsYXNoZXMgYmVmb3JlIHRoZSBxdWVyeSBzdHJpbmcgZ2V0IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXNcbiAgLy8gU2VlOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjU5MTZcbiAgdmFyIHF1ZXJ5SW5kZXggPSB1cmwuaW5kZXhPZignPycpLFxuICAgICAgc3BsaXR0ZXIgPVxuICAgICAgICAgIChxdWVyeUluZGV4ICE9PSAtMSAmJiBxdWVyeUluZGV4IDwgdXJsLmluZGV4T2YoJyMnKSkgPyAnPycgOiAnIycsXG4gICAgICB1U3BsaXQgPSB1cmwuc3BsaXQoc3BsaXR0ZXIpLFxuICAgICAgc2xhc2hSZWdleCA9IC9cXFxcL2c7XG4gIHVTcGxpdFswXSA9IHVTcGxpdFswXS5yZXBsYWNlKHNsYXNoUmVnZXgsICcvJyk7XG4gIHVybCA9IHVTcGxpdC5qb2luKHNwbGl0dGVyKTtcblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICBpZiAoIXNsYXNoZXNEZW5vdGVIb3N0ICYmIHVybC5zcGxpdCgnIycpLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIFRyeSBmYXN0IHBhdGggcmVnZXhwXG4gICAgdmFyIHNpbXBsZVBhdGggPSBzaW1wbGVQYXRoUGF0dGVybi5leGVjKHJlc3QpO1xuICAgIGlmIChzaW1wbGVQYXRoKSB7XG4gICAgICB0aGlzLnBhdGggPSByZXN0O1xuICAgICAgdGhpcy5ocmVmID0gcmVzdDtcbiAgICAgIHRoaXMucGF0aG5hbWUgPSBzaW1wbGVQYXRoWzFdO1xuICAgICAgaWYgKHNpbXBsZVBhdGhbMl0pIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSBzaW1wbGVQYXRoWzJdO1xuICAgICAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnNlYXJjaC5zdWJzdHIoMSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlYXJjaC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueWNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmXG4gICAgICAvLyB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQgYWxyZWFkeSBpcyBBU0NJSS1vbmx5LlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHB1bnljb2RlLnRvQVNDSUkodGhpcy5ob3N0bmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgaWYgKHJlc3QuaW5kZXhPZihhZSkgPT09IC0xKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHZhciBlc2MgPSBlbmNvZGVVUklDb21wb25lbnQoYWUpO1xuICAgICAgaWYgKGVzYyA9PT0gYWUpIHtcbiAgICAgICAgZXNjID0gZXNjYXBlKGFlKTtcbiAgICAgIH1cbiAgICAgIHJlc3QgPSByZXN0LnNwbGl0KGFlKS5qb2luKGVzYyk7XG4gICAgfVxuICB9XG5cblxuICAvLyBjaG9wIG9mZiBmcm9tIHRoZSB0YWlsIGZpcnN0LlxuICB2YXIgaGFzaCA9IHJlc3QuaW5kZXhPZignIycpO1xuICBpZiAoaGFzaCAhPT0gLTEpIHtcbiAgICAvLyBnb3QgYSBmcmFnbWVudCBzdHJpbmcuXG4gICAgdGhpcy5oYXNoID0gcmVzdC5zdWJzdHIoaGFzaCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgaGFzaCk7XG4gIH1cbiAgdmFyIHFtID0gcmVzdC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxbSAhPT0gLTEpIHtcbiAgICB0aGlzLnNlYXJjaCA9IHJlc3Quc3Vic3RyKHFtKTtcbiAgICB0aGlzLnF1ZXJ5ID0gcmVzdC5zdWJzdHIocW0gKyAxKTtcbiAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMucXVlcnkpO1xuICAgIH1cbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBxbSk7XG4gIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgIC8vIG5vIHF1ZXJ5IHN0cmluZywgYnV0IHBhcnNlUXVlcnlTdHJpbmcgc3RpbGwgcmVxdWVzdGVkXG4gICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICB0aGlzLnF1ZXJ5ID0ge307XG4gIH1cbiAgaWYgKHJlc3QpIHRoaXMucGF0aG5hbWUgPSByZXN0O1xuICBpZiAoc2xhc2hlZFByb3RvY29sW2xvd2VyUHJvdG9dICYmXG4gICAgICB0aGlzLmhvc3RuYW1lICYmICF0aGlzLnBhdGhuYW1lKSB7XG4gICAgdGhpcy5wYXRobmFtZSA9ICcvJztcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgaWYgKHRoaXMucGF0aG5hbWUgfHwgdGhpcy5zZWFyY2gpIHtcbiAgICB2YXIgcCA9IHRoaXMucGF0aG5hbWUgfHwgJyc7XG4gICAgdmFyIHMgPSB0aGlzLnNlYXJjaCB8fCAnJztcbiAgICB0aGlzLnBhdGggPSBwICsgcztcbiAgfVxuXG4gIC8vIGZpbmFsbHksIHJlY29uc3RydWN0IHRoZSBocmVmIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gdmFsaWRhdGVkLlxuICB0aGlzLmhyZWYgPSB0aGlzLmZvcm1hdCgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGZvcm1hdCBhIHBhcnNlZCBvYmplY3QgaW50byBhIHVybCBzdHJpbmdcbmZ1bmN0aW9uIHVybEZvcm1hdChvYmopIHtcbiAgLy8gZW5zdXJlIGl0J3MgYW4gb2JqZWN0LCBhbmQgbm90IGEgc3RyaW5nIHVybC5cbiAgLy8gSWYgaXQncyBhbiBvYmosIHRoaXMgaXMgYSBuby1vcC5cbiAgLy8gdGhpcyB3YXksIHlvdSBjYW4gY2FsbCB1cmxfZm9ybWF0KCkgb24gc3RyaW5nc1xuICAvLyB0byBjbGVhbiB1cCBwb3RlbnRpYWxseSB3b25reSB1cmxzLlxuICBpZiAodXRpbC5pc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICB1dGlsLmlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmICh1dGlsLmlzU3RyaW5nKHJlbGF0aXZlKSkge1xuICAgIHZhciByZWwgPSBuZXcgVXJsKCk7XG4gICAgcmVsLnBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgcmVsYXRpdmUgPSByZWw7XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gbmV3IFVybCgpO1xuICB2YXIgdGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgZm9yICh2YXIgdGsgPSAwOyB0ayA8IHRrZXlzLmxlbmd0aDsgdGsrKykge1xuICAgIHZhciB0a2V5ID0gdGtleXNbdGtdO1xuICAgIHJlc3VsdFt0a2V5XSA9IHRoaXNbdGtleV07XG4gIH1cblxuICAvLyBoYXNoIGlzIGFsd2F5cyBvdmVycmlkZGVuLCBubyBtYXR0ZXIgd2hhdC5cbiAgLy8gZXZlbiBocmVmPVwiXCIgd2lsbCByZW1vdmUgaXQuXG4gIHJlc3VsdC5oYXNoID0gcmVsYXRpdmUuaGFzaDtcblxuICAvLyBpZiB0aGUgcmVsYXRpdmUgdXJsIGlzIGVtcHR5LCB0aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvIGhlcmUuXG4gIGlmIChyZWxhdGl2ZS5ocmVmID09PSAnJykge1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBocmVmcyBsaWtlIC8vZm9vL2JhciBhbHdheXMgY3V0IHRvIHRoZSBwcm90b2NvbC5cbiAgaWYgKHJlbGF0aXZlLnNsYXNoZXMgJiYgIXJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgLy8gdGFrZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgcHJvdG9jb2wgZnJvbSByZWxhdGl2ZVxuICAgIHZhciBya2V5cyA9IE9iamVjdC5rZXlzKHJlbGF0aXZlKTtcbiAgICBmb3IgKHZhciByayA9IDA7IHJrIDwgcmtleXMubGVuZ3RoOyByaysrKSB7XG4gICAgICB2YXIgcmtleSA9IHJrZXlzW3JrXTtcbiAgICAgIGlmIChya2V5ICE9PSAncHJvdG9jb2wnKVxuICAgICAgICByZXN1bHRbcmtleV0gPSByZWxhdGl2ZVtya2V5XTtcbiAgICB9XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhyZWxhdGl2ZSk7XG4gICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW3ZdO1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIXV0aWwuaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFsbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIXV0aWwuaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIXV0aWwuaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgLy8gbm8gcGF0aCBhdCBhbGwuICBlYXN5LlxuICAgIC8vIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgb3RoZXIgc3R1ZmYgYWJvdmUuXG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gJy8nICsgcmVzdWx0LnNlYXJjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaWYgYSB1cmwgRU5EcyBpbiAuIG9yIC4uLCB0aGVuIGl0IG11c3QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIC8vIGhvd2V2ZXIsIGlmIGl0IGVuZHMgaW4gYW55dGhpbmcgZWxzZSBub24tc2xhc2h5LFxuICAvLyB0aGVuIGl0IG11c3QgTk9UIGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICB2YXIgbGFzdCA9IHNyY1BhdGguc2xpY2UoLTEpWzBdO1xuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IChcbiAgICAgIChyZXN1bHQuaG9zdCB8fCByZWxhdGl2ZS5ob3N0IHx8IHNyY1BhdGgubGVuZ3RoID4gMSkgJiZcbiAgICAgIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHwgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbGx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICB9XG4gIH1cblxuICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyB8fCAocmVzdWx0Lmhvc3QgJiYgc3JjUGF0aC5sZW5ndGgpO1xuXG4gIGlmIChtdXN0RW5kQWJzICYmICFpc0Fic29sdXRlKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBzcmNQYXRoLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCByZXF1ZXN0Lmh0dHBcbiAgaWYgKCF1dGlsLmlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICF1dGlsLmlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1N0cmluZzogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZihhcmcpID09PSAnc3RyaW5nJztcbiAgfSxcbiAgaXNPYmplY3Q6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICB9LFxuICBpc051bGw6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBhcmcgPT09IG51bGw7XG4gIH0sXG4gIGlzTnVsbE9yVW5kZWZpbmVkOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09IG51bGw7XG4gIH1cbn07XG4iLCIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNSBDaHJpcyBPJ0hhcmEgPGNvaGFyYTg3QGdtYWlsLmNvbT5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuICogXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4gKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4gKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xuICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRVxuICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTlxuICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4gKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4oZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLnBldGFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICBkZWZpbmUobmFtZSwgW10sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG4gICAgfVxufSkoJ3ZhbGlkYXRvcicsIGZ1bmN0aW9uICh2YWxpZGF0b3IpIHtcblxuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhbGlkYXRvciA9IHsgdmVyc2lvbjogJzQuNS4wJyB9O1xuXG4gICAgdmFyIGVtYWlsVXNlclBhcnQgPSAvXlthLXpcXGQhI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl0rJC9pO1xuICAgIHZhciBxdW90ZWRFbWFpbFVzZXIgPSAvXihbXFxzXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3ZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3ZV18KFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdKSkqJC9pO1xuXG4gICAgdmFyIGVtYWlsVXNlclV0ZjhQYXJ0ID0gL15bYS16XFxkISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5cXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKyQvaTtcbiAgICB2YXIgcXVvdGVkRW1haWxVc2VyVXRmOCA9IC9eKFtcXHNcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDdmXFx4MjFcXHgyMy1cXHg1YlxceDVkLVxceDdlXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXXwoXFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZC1cXHg3ZlxcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSokL2k7XG5cbiAgICB2YXIgZGlzcGxheU5hbWUgPSAvXlthLXpcXGQhI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9flxcLlxcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0rW2EtelxcZCEjXFwkJSYnXFwqXFwrXFwtXFwvPVxcP1xcXl9ge1xcfH1+XFwuXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXFxzXSo8KC4rKT4kL2k7XG5cbiAgICB2YXIgY3JlZGl0Q2FyZCA9IC9eKD86NFswLTldezEyfSg/OlswLTldezN9KT98NVsxLTVdWzAtOV17MTR9fDYoPzowMTF8NVswLTldWzAtOV0pWzAtOV17MTJ9fDNbNDddWzAtOV17MTN9fDMoPzowWzAtNV18WzY4XVswLTldKVswLTldezExfXwoPzoyMTMxfDE4MDB8MzVcXGR7M30pXFxkezExfSkkLztcblxuICAgIHZhciBpc2luID0gL15bQS1aXXsyfVswLTlBLVpdezl9WzAtOV0kLztcblxuICAgIHZhciBpc2JuMTBNYXliZSA9IC9eKD86WzAtOV17OX1YfFswLTldezEwfSkkL1xuICAgICAgLCBpc2JuMTNNYXliZSA9IC9eKD86WzAtOV17MTN9KSQvO1xuXG4gICAgdmFyIG1hY0FkZHJlc3MgPSAvXihbMC05YS1mQS1GXVswLTlhLWZBLUZdOil7NX0oWzAtOWEtZkEtRl1bMC05YS1mQS1GXSkkLztcblxuICAgIHZhciBpcHY0TWF5YmUgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSQvXG4gICAgICAsIGlwdjZCbG9jayA9IC9eWzAtOUEtRl17MSw0fSQvaTtcblxuICAgIHZhciB1dWlkID0ge1xuICAgICAgICAnMyc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tM1swLTlBLUZdezN9LVswLTlBLUZdezR9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCAnNCc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tNFswLTlBLUZdezN9LVs4OUFCXVswLTlBLUZdezN9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCAnNSc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tNVswLTlBLUZdezN9LVs4OUFCXVswLTlBLUZdezN9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCBhbGw6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tWzAtOUEtRl17NH0tWzAtOUEtRl17NH0tWzAtOUEtRl17MTJ9JC9pXG4gICAgfTtcblxuICAgIHZhciBhbHBoYSA9IC9eW0EtWl0rJC9pXG4gICAgICAsIGFscGhhbnVtZXJpYyA9IC9eWzAtOUEtWl0rJC9pXG4gICAgICAsIG51bWVyaWMgPSAvXlstK10/WzAtOV0rJC9cbiAgICAgICwgaW50ID0gL14oPzpbLStdPyg/OjB8WzEtOV1bMC05XSopKSQvXG4gICAgICAsIGZsb2F0ID0gL14oPzpbLStdPyg/OlswLTldKykpPyg/OlxcLlswLTldKik/KD86W2VFXVtcXCtcXC1dPyg/OlswLTldKykpPyQvXG4gICAgICAsIGhleGFkZWNpbWFsID0gL15bMC05QS1GXSskL2lcbiAgICAgICwgZGVjaW1hbCA9IC9eWy0rXT8oWzAtOV0rfFxcLlswLTldK3xbMC05XStcXC5bMC05XSspJC9cbiAgICAgICwgaGV4Y29sb3IgPSAvXiM/KFswLTlBLUZdezN9fFswLTlBLUZdezZ9KSQvaTtcblxuICAgIHZhciBhc2NpaSA9IC9eW1xceDAwLVxceDdGXSskL1xuICAgICAgLCBtdWx0aWJ5dGUgPSAvW15cXHgwMC1cXHg3Rl0vXG4gICAgICAsIGZ1bGxXaWR0aCA9IC9bXlxcdTAwMjAtXFx1MDA3RVxcdUZGNjEtXFx1RkY5RlxcdUZGQTAtXFx1RkZEQ1xcdUZGRTgtXFx1RkZFRTAtOWEtekEtWl0vXG4gICAgICAsIGhhbGZXaWR0aCA9IC9bXFx1MDAyMC1cXHUwMDdFXFx1RkY2MS1cXHVGRjlGXFx1RkZBMC1cXHVGRkRDXFx1RkZFOC1cXHVGRkVFMC05YS16QS1aXS87XG5cbiAgICB2YXIgc3Vycm9nYXRlUGFpciA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdLztcblxuICAgIHZhciBiYXNlNjQgPSAvXig/OltBLVowLTkrXFwvXXs0fSkqKD86W0EtWjAtOStcXC9dezJ9PT18W0EtWjAtOStcXC9dezN9PXxbQS1aMC05K1xcL117NH0pJC9pO1xuXG4gICAgdmFyIHBob25lcyA9IHtcbiAgICAgICd6aC1DTic6IC9eKFxcKz8wPzg2XFwtPyk/KCgxM1xcZHwxNFs1N118MTVbXjQsXFxEXXwxN1s2NzhdfDE4XFxkKVxcZHs4fXwxNzBbMDU5XVxcZHs3fSkkLyxcbiAgICAgICd6aC1UVyc6IC9eKFxcKz84ODZcXC0/fDApPzlcXGR7OH0kLyxcbiAgICAgICdlbi1aQSc6IC9eKFxcKz8yN3wwKVxcZHs5fSQvLFxuICAgICAgJ2VuLUFVJzogL14oXFwrPzYxfDApNFxcZHs4fSQvLFxuICAgICAgJ2VuLUhLJzogL14oXFwrPzg1MlxcLT8pP1s1NjldXFxkezN9XFwtP1xcZHs0fSQvLFxuICAgICAgJ2ZyLUZSJzogL14oXFwrPzMzfDApWzY3XVxcZHs4fSQvLFxuICAgICAgJ3B0LVBUJzogL14oXFwrMzUxKT85WzEyMzZdXFxkezd9JC8sXG4gICAgICAnZWwtR1InOiAvXihcXCs/MzApPyg2OVxcZHs4fSkkLyxcbiAgICAgICdlbi1HQic6IC9eKFxcKz80NHwwKTdcXGR7OX0kLyxcbiAgICAgICdlbi1VUyc6IC9eKFxcKz8xKT9bMi05XVxcZHsyfVsyLTldKD8hMTEpXFxkezZ9JC8sXG4gICAgICAnZW4tWk0nOiAvXihcXCsyNik/MDlbNTY3XVxcZHs3fSQvLFxuICAgICAgJ3J1LVJVJzogL14oXFwrPzd8OCk/OVxcZHs5fSQvLFxuICAgICAgJ25iLU5PJzogL14oXFwrPzQ3KT9bNDldXFxkezd9JC8sXG4gICAgICAnbm4tTk8nOiAvXihcXCs/NDcpP1s0OV1cXGR7N30kLyxcbiAgICAgICd2aS1WTic6IC9eKDB8XFwrPzg0KT8oKDEoMihbMC05XSl8NihbMi05XSl8ODh8OTkpKXwoOSgoPyE1KVswLTldKSkpKFswLTldezd9KSQvLFxuICAgICAgJ2VuLU5aJzogL14oXFwrPzY0fDApMlxcZHs3LDl9JC8sXG4gICAgICAnZW4tSU4nOiAvXihcXCs/OTF8MCk/Wzc4OV1cXGR7OX0kL1xuICAgIH07XG5cbiAgICAvLyBmcm9tIGh0dHA6Ly9nb28uZ2wvMGVqSEhXXG4gICAgdmFyIGlzbzg2MDEgPSAvXihbXFwrLV0/XFxkezR9KD8hXFxkezJ9XFxiKSkoKC0/KSgoMFsxLTldfDFbMC0yXSkoXFwzKFsxMl1cXGR8MFsxLTldfDNbMDFdKSk/fFcoWzAtNF1cXGR8NVswLTJdKSgtP1sxLTddKT98KDAwWzEtOV18MFsxLTldXFxkfFsxMl1cXGR7Mn18MyhbMC01XVxcZHw2WzEtNl0pKSkoW1RcXHNdKCgoWzAxXVxcZHwyWzAtM10pKCg6PylbMC01XVxcZCk/fDI0XFw6PzAwKShbXFwuLF1cXGQrKD8hOikpPyk/KFxcMTdbMC01XVxcZChbXFwuLF1cXGQrKT8pPyhbelpdfChbXFwrLV0pKFswMV1cXGR8MlswLTNdKTo/KFswLTVdXFxkKT8pPyk/KT8kLztcblxuICAgIHZhbGlkYXRvci5leHRlbmQgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICAgICAgdmFsaWRhdG9yW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgYXJnc1swXSA9IHZhbGlkYXRvci50b1N0cmluZyhhcmdzWzBdKTtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh2YWxpZGF0b3IsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvL1JpZ2h0IGJlZm9yZSBleHBvcnRpbmcgdGhlIHZhbGlkYXRvciBvYmplY3QsIHBhc3MgZWFjaCBvZiB0aGUgYnVpbHRpbnNcbiAgICAvL3Rocm91Z2ggZXh0ZW5kKCkgc28gdGhhdCB0aGVpciBmaXJzdCBhcmd1bWVudCBpcyBjb2VyY2VkIHRvIGEgc3RyaW5nXG4gICAgdmFsaWRhdG9yLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvcltuYW1lXSAhPT0gJ2Z1bmN0aW9uJyB8fCBuYW1lID09PSAndG9TdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICd0b0RhdGUnIHx8IG5hbWUgPT09ICdleHRlbmQnIHx8IG5hbWUgPT09ICdpbml0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsaWRhdG9yLmV4dGVuZChuYW1lLCB2YWxpZGF0b3JbbmFtZV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b1N0cmluZyA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCAhPT0gbnVsbCAmJiBpbnB1dC50b1N0cmluZykge1xuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBudWxsIHx8IHR5cGVvZiBpbnB1dCA9PT0gJ3VuZGVmaW5lZCcgfHwgKGlzTmFOKGlucHV0KSAmJiAhaW5wdXQubGVuZ3RoKSkge1xuICAgICAgICAgICAgaW5wdXQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJycgKyBpbnB1dDtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLnRvRGF0ZSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0ZSkgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZSA9IERhdGUucGFyc2UoZGF0ZSk7XG4gICAgICAgIHJldHVybiAhaXNOYU4oZGF0ZSkgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGw7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b0Zsb2F0ID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IudG9JbnQgPSBmdW5jdGlvbiAoc3RyLCByYWRpeCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyLCByYWRpeCB8fCAxMCk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b0Jvb2xlYW4gPSBmdW5jdGlvbiAoc3RyLCBzdHJpY3QpIHtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ciA9PT0gJzEnIHx8IHN0ciA9PT0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHIgIT09ICcwJyAmJiBzdHIgIT09ICdmYWxzZScgJiYgc3RyICE9PSAnJztcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmVxdWFscyA9IGZ1bmN0aW9uIChzdHIsIGNvbXBhcmlzb24pIHtcbiAgICAgICAgcmV0dXJuIHN0ciA9PT0gdmFsaWRhdG9yLnRvU3RyaW5nKGNvbXBhcmlzb24pO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuY29udGFpbnMgPSBmdW5jdGlvbiAoc3RyLCBlbGVtKSB7XG4gICAgICAgIHJldHVybiBzdHIuaW5kZXhPZih2YWxpZGF0b3IudG9TdHJpbmcoZWxlbSkpID49IDA7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5tYXRjaGVzID0gZnVuY3Rpb24gKHN0ciwgcGF0dGVybiwgbW9kaWZpZXJzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGF0dGVybikgIT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBtb2RpZmllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmF1bHRfZW1haWxfb3B0aW9ucyA9IHtcbiAgICAgICAgYWxsb3dfZGlzcGxheV9uYW1lOiBmYWxzZSxcbiAgICAgICAgYWxsb3dfdXRmOF9sb2NhbF9wYXJ0OiB0cnVlLFxuICAgICAgICByZXF1aXJlX3RsZDogdHJ1ZVxuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNFbWFpbCA9IGZ1bmN0aW9uIChzdHIsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG1lcmdlKG9wdGlvbnMsIGRlZmF1bHRfZW1haWxfb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfZGlzcGxheV9uYW1lKSB7XG4gICAgICAgICAgICB2YXIgZGlzcGxheV9lbWFpbCA9IHN0ci5tYXRjaChkaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICBpZiAoZGlzcGxheV9lbWFpbCkge1xuICAgICAgICAgICAgICAgIHN0ciA9IGRpc3BsYXlfZW1haWxbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJ0AnKVxuICAgICAgICAgICwgZG9tYWluID0gcGFydHMucG9wKClcbiAgICAgICAgICAsIHVzZXIgPSBwYXJ0cy5qb2luKCdAJyk7XG5cbiAgICAgICAgdmFyIGxvd2VyX2RvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobG93ZXJfZG9tYWluID09PSAnZ21haWwuY29tJyB8fCBsb3dlcl9kb21haW4gPT09ICdnb29nbGVtYWlsLmNvbScpIHtcbiAgICAgICAgICAgIHVzZXIgPSB1c2VyLnJlcGxhY2UoL1xcLi9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aCh1c2VyLCAwLCA2NCkgfHxcbiAgICAgICAgICAgICAgICAhdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aChkb21haW4sIDAsIDI1NikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzRlFETihkb21haW4sIHtyZXF1aXJlX3RsZDogb3B0aW9ucy5yZXF1aXJlX3RsZH0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlclswXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgdXNlciA9IHVzZXIuc2xpY2UoMSwgdXNlci5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmFsbG93X3V0ZjhfbG9jYWxfcGFydCA/XG4gICAgICAgICAgICAgICAgcXVvdGVkRW1haWxVc2VyVXRmOC50ZXN0KHVzZXIpIDpcbiAgICAgICAgICAgICAgICBxdW90ZWRFbWFpbFVzZXIudGVzdCh1c2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXR0ZXJuID0gb3B0aW9ucy5hbGxvd191dGY4X2xvY2FsX3BhcnQgP1xuICAgICAgICAgICAgZW1haWxVc2VyVXRmOFBhcnQgOiBlbWFpbFVzZXJQYXJ0O1xuXG4gICAgICAgIHZhciB1c2VyX3BhcnRzID0gdXNlci5zcGxpdCgnLicpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZXJfcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi50ZXN0KHVzZXJfcGFydHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHZhciBkZWZhdWx0X3VybF9vcHRpb25zID0ge1xuICAgICAgICBwcm90b2NvbHM6IFsgJ2h0dHAnLCAnaHR0cHMnLCAnZnRwJyBdXG4gICAgICAsIHJlcXVpcmVfdGxkOiB0cnVlXG4gICAgICAsIHJlcXVpcmVfcHJvdG9jb2w6IGZhbHNlXG4gICAgICAsIHJlcXVpcmVfdmFsaWRfcHJvdG9jb2w6IHRydWVcbiAgICAgICwgYWxsb3dfdW5kZXJzY29yZXM6IGZhbHNlXG4gICAgICAsIGFsbG93X3RyYWlsaW5nX2RvdDogZmFsc2VcbiAgICAgICwgYWxsb3dfcHJvdG9jb2xfcmVsYXRpdmVfdXJsczogZmFsc2VcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzVVJMID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICAgICAgICBpZiAoIXVybCB8fCB1cmwubGVuZ3RoID49IDIwODMgfHwgL1xccy8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCdtYWlsdG86JykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF91cmxfb3B0aW9ucyk7XG4gICAgICAgIHZhciBwcm90b2NvbCwgYXV0aCwgaG9zdCwgaG9zdG5hbWUsIHBvcnQsXG4gICAgICAgICAgICBwb3J0X3N0ciwgc3BsaXQ7XG4gICAgICAgIHNwbGl0ID0gdXJsLnNwbGl0KCc6Ly8nKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHByb3RvY29sID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlcXVpcmVfdmFsaWRfcHJvdG9jb2wgJiYgb3B0aW9ucy5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMucmVxdWlyZV9wcm90b2NvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9ICBlbHNlIGlmIChvcHRpb25zLmFsbG93X3Byb3RvY29sX3JlbGF0aXZlX3VybHMgJiYgdXJsLnN1YnN0cigwLCAyKSA9PT0gJy8vJykge1xuICAgICAgICAgICAgc3BsaXRbMF0gPSB1cmwuc3Vic3RyKDIpO1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHNwbGl0LmpvaW4oJzovLycpO1xuICAgICAgICBzcGxpdCA9IHVybC5zcGxpdCgnIycpO1xuICAgICAgICB1cmwgPSBzcGxpdC5zaGlmdCgpO1xuXG4gICAgICAgIHNwbGl0ID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgICAgIHVybCA9IHNwbGl0LnNoaWZ0KCk7XG5cbiAgICAgICAgc3BsaXQgPSB1cmwuc3BsaXQoJy8nKTtcbiAgICAgICAgdXJsID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgc3BsaXQgPSB1cmwuc3BsaXQoJ0AnKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGF1dGggPSBzcGxpdC5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKGF1dGguaW5kZXhPZignOicpID49IDAgJiYgYXV0aC5zcGxpdCgnOicpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaG9zdG5hbWUgPSBzcGxpdC5qb2luKCdAJyk7XG4gICAgICAgIHNwbGl0ID0gaG9zdG5hbWUuc3BsaXQoJzonKTtcbiAgICAgICAgaG9zdCA9IHNwbGl0LnNoaWZ0KCk7XG4gICAgICAgIGlmIChzcGxpdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBvcnRfc3RyID0gc3BsaXQuam9pbignOicpO1xuICAgICAgICAgICAgcG9ydCA9IHBhcnNlSW50KHBvcnRfc3RyLCAxMCk7XG4gICAgICAgICAgICBpZiAoIS9eWzAtOV0rJC8udGVzdChwb3J0X3N0cikgfHwgcG9ydCA8PSAwIHx8IHBvcnQgPiA2NTUzNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRvci5pc0lQKGhvc3QpICYmICF2YWxpZGF0b3IuaXNGUUROKGhvc3QsIG9wdGlvbnMpICYmXG4gICAgICAgICAgICAgICAgaG9zdCAhPT0gJ2xvY2FsaG9zdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ob3N0X3doaXRlbGlzdCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaG9zdF93aGl0ZWxpc3QuaW5kZXhPZihob3N0KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ob3N0X2JsYWNrbGlzdCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaG9zdF9ibGFja2xpc3QuaW5kZXhPZihob3N0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTUFDQWRkcmVzcyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG1hY0FkZHJlc3MudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJUCA9IGZ1bmN0aW9uIChzdHIsIHZlcnNpb24pIHtcbiAgICAgICAgdmVyc2lvbiA9IHZhbGlkYXRvci50b1N0cmluZyh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yLmlzSVAoc3RyLCA0KSB8fCB2YWxpZGF0b3IuaXNJUChzdHIsIDYpO1xuICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb24gPT09ICc0Jykge1xuICAgICAgICAgICAgaWYgKCFpcHY0TWF5YmUudGVzdChzdHIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCcuJykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzNdIDw9IDI1NTtcbiAgICAgICAgfSBlbHNlIGlmICh2ZXJzaW9uID09PSAnNicpIHtcbiAgICAgICAgICAgIHZhciBibG9ja3MgPSBzdHIuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHZhciBmb3VuZE9taXNzaW9uQmxvY2sgPSBmYWxzZTsgLy8gbWFya2VyIHRvIGluZGljYXRlIDo6XG5cbiAgICAgICAgICAgIC8vIEF0IGxlYXN0IHNvbWUgT1MgYWNjZXB0IHRoZSBsYXN0IDMyIGJpdHMgb2YgYW4gSVB2NiBhZGRyZXNzXG4gICAgICAgICAgICAvLyAoaS5lLiAyIG9mIHRoZSBibG9ja3MpIGluIElQdjQgbm90YXRpb24sIGFuZCBSRkMgMzQ5MyBzYXlzXG4gICAgICAgICAgICAvLyB0aGF0ICc6OmZmZmY6YS5iLmMuZCcgaXMgdmFsaWQgZm9yIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzc2VzLFxuICAgICAgICAgICAgLy8gYW5kICc6OmEuYi5jLmQnIGlzIGRlcHJlY2F0ZWQsIGJ1dCBhbHNvIHZhbGlkLlxuICAgICAgICAgICAgdmFyIGZvdW5kSVB2NFRyYW5zaXRpb25CbG9jayA9IHZhbGlkYXRvci5pc0lQKGJsb2Nrc1tibG9ja3MubGVuZ3RoIC0gMV0sIDQpO1xuICAgICAgICAgICAgdmFyIGV4cGVjdGVkTnVtYmVyT2ZCbG9ja3MgPSBmb3VuZElQdjRUcmFuc2l0aW9uQmxvY2sgPyA3IDogODtcblxuICAgICAgICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPiBleHBlY3RlZE51bWJlck9mQmxvY2tzKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgLy8gaW5pdGlhbCBvciBmaW5hbCA6OlxuICAgICAgICAgICAgaWYgKHN0ciA9PT0gJzo6Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHIuc3Vic3RyKDAsIDIpID09PSAnOjonKSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgZm91bmRPbWlzc2lvbkJsb2NrID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gMikgPT09ICc6OicpIHtcbiAgICAgICAgICAgICAgICBibG9ja3MucG9wKCk7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGZvdW5kT21pc3Npb25CbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgLy8gdGVzdCBmb3IgYSA6OiB3aGljaCBjYW4gbm90IGJlIGF0IHRoZSBzdHJpbmcgc3RhcnQvZW5kXG4gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhvc2UgY2FzZXMgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2tzW2ldID09PSAnJyAmJiBpID4gMCAmJiBpIDwgYmxvY2tzLmxlbmd0aCAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRPbWlzc2lvbkJsb2NrKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBtdWx0aXBsZSA6OiBpbiBhZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kT21pc3Npb25CbG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZElQdjRUcmFuc2l0aW9uQmxvY2sgJiYgaSA9PSBibG9ja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpdCBoYXMgYmVlbiBjaGVja2VkIGJlZm9yZSB0aGF0IHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlzIGEgdmFsaWQgSVB2NCBhZGRyZXNzXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXB2NkJsb2NrLnRlc3QoYmxvY2tzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm91bmRPbWlzc2lvbkJsb2NrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2Nrcy5sZW5ndGggPj0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2Nrcy5sZW5ndGggPT09IGV4cGVjdGVkTnVtYmVyT2ZCbG9ja3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB2YXIgZGVmYXVsdF9mcWRuX29wdGlvbnMgPSB7XG4gICAgICAgIHJlcXVpcmVfdGxkOiB0cnVlXG4gICAgICAsIGFsbG93X3VuZGVyc2NvcmVzOiBmYWxzZVxuICAgICAgLCBhbGxvd190cmFpbGluZ19kb3Q6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0ZRRE4gPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBkZWZhdWx0X2ZxZG5fb3B0aW9ucyk7XG5cbiAgICAgICAgLyogUmVtb3ZlIHRoZSBvcHRpb25hbCB0cmFpbGluZyBkb3QgYmVmb3JlIGNoZWNraW5nIHZhbGlkaXR5ICovXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93X3RyYWlsaW5nX2RvdCAmJiBzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnLicpIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLicpO1xuICAgICAgICBpZiAob3B0aW9ucy5yZXF1aXJlX3RsZCkge1xuICAgICAgICAgICAgdmFyIHRsZCA9IHBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGggfHwgIS9eKFthLXpcXHUwMGExLVxcdWZmZmZdezIsfXx4blthLXowLTktXXsyLH0pJC9pLnRlc3QodGxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBwYXJ0LCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd191bmRlcnNjb3Jlcykge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJ19fJykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnJlcGxhY2UoL18vZywgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEvXlthLXpcXHUwMGExLVxcdWZmZmYwLTktXSskL2kudGVzdChwYXJ0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgvW1xcdWZmMDEtXFx1ZmY1ZV0vLnRlc3QocGFydCkpIHtcbiAgICAgICAgICAgICAgICAvLyBkaXNhbGxvdyBmdWxsLXdpZHRoIGNoYXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcnRbMF0gPT09ICctJyB8fCBwYXJ0W3BhcnQubGVuZ3RoIC0gMV0gPT09ICctJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJy0tLScpID49IDAgJiYgcGFydC5zbGljZSgwLCA0KSAhPT0gJ3huLS0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNCb29sZWFuID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHJldHVybiAoWyd0cnVlJywgJ2ZhbHNlJywgJzEnLCAnMCddLmluZGV4T2Yoc3RyKSA+PSAwKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQWxwaGEgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBhbHBoYS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGFscGhhbnVtZXJpYy50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc051bWVyaWMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBudW1lcmljLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRGVjaW1hbCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ciAhPT0gJycgJiYgZGVjaW1hbC50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0hleGFkZWNpbWFsID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gaGV4YWRlY2ltYWwudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNIZXhDb2xvciA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGhleGNvbG9yLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTG93ZXJjYXNlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyID09PSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzVXBwZXJjYXNlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyID09PSBzdHIudG9VcHBlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzSW50ID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGludC50ZXN0KHN0cikgJiYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KCdtaW4nKSB8fCBzdHIgPj0gb3B0aW9ucy5taW4pICYmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbWF4JykgfHwgc3RyIDw9IG9wdGlvbnMubWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRmxvYXQgPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbG9hdC50ZXN0KHN0cikgJiYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KCdtaW4nKSB8fCBzdHIgPj0gb3B0aW9ucy5taW4pICYmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbWF4JykgfHwgc3RyIDw9IG9wdGlvbnMubWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRGl2aXNpYmxlQnkgPSBmdW5jdGlvbiAoc3RyLCBudW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRvci50b0Zsb2F0KHN0cikgJSB2YWxpZGF0b3IudG9JbnQobnVtKSA9PT0gMDtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTnVsbCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDA7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0xlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIG1pbiwgbWF4KSB7XG4gICAgICAgIHZhciBzdXJyb2dhdGVQYWlycyA9IHN0ci5tYXRjaCgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nKSB8fCBbXTtcbiAgICAgICAgdmFyIGxlbiA9IHN0ci5sZW5ndGggLSBzdXJyb2dhdGVQYWlycy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBsZW4gPj0gbWluICYmICh0eXBlb2YgbWF4ID09PSAndW5kZWZpbmVkJyB8fCBsZW4gPD0gbWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIG1pbiwgbWF4KSB7XG4gICAgICAgIHZhciBsZW4gPSBlbmNvZGVVUkkoc3RyKS5zcGxpdCgvJS4ufC4vKS5sZW5ndGggLSAxO1xuICAgICAgICByZXR1cm4gbGVuID49IG1pbiAmJiAodHlwZW9mIG1heCA9PT0gJ3VuZGVmaW5lZCcgfHwgbGVuIDw9IG1heCk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc1VVSUQgPSBmdW5jdGlvbiAoc3RyLCB2ZXJzaW9uKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gdXVpZFt2ZXJzaW9uID8gdmVyc2lvbiA6ICdhbGwnXTtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4gJiYgcGF0dGVybi50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0KHN0cikge1xuICAgICAgICB2YXIgaXNvODYwMVBhcnRzID0gc3RyLm1hdGNoKGlzbzg2MDEpXG4gICAgICAgICAgLCB0aW1lem9uZSwgc2lnbiwgaG91cnMsIG1pbnV0ZXM7XG4gICAgICAgIGlmICghaXNvODYwMVBhcnRzKSB7XG4gICAgICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHRpbWV6b25lID0gc3RyLm1hdGNoKC8oPzpcXHN8Z210XFxzKikoLXxcXCspKFxcZHsxLDR9KShcXHN8JCkvKTtcbiAgICAgICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmluZGV4T2YoJ2dtdCcpICE9PSAtMSA/IDAgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2lnbiA9IHRpbWV6b25lWzFdO1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRpbWV6b25lWzJdO1xuICAgICAgICAgICAgaWYgKG9mZnNldC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAnMCcgKyBvZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0Lmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSAwO1xuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBwYXJzZUludChvZmZzZXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBob3VycyA9IHBhcnNlSW50KG9mZnNldC5zbGljZSgwLCAyKSk7XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IHBhcnNlSW50KG9mZnNldC5zbGljZSgyLCA0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lem9uZSA9IGlzbzg2MDFQYXJ0c1syMV07XG4gICAgICAgICAgICBpZiAoIXRpbWV6b25lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZXpvbmUgPT09ICd6JyB8fCB0aW1lem9uZSA9PT0gJ1onKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaWduID0gaXNvODYwMVBhcnRzWzIyXTtcbiAgICAgICAgICAgIGlmICh0aW1lem9uZS5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBwYXJzZUludChpc284NjAxUGFydHNbMjNdKTtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQoaXNvODYwMVBhcnRzWzI0XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhvdXJzID0gMDtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQoaXNvODYwMVBhcnRzWzIzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChob3VycyAqIDYwICsgbWludXRlcykgKiAoc2lnbiA9PT0gJy0nID8gMSA6IC0xKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3IuaXNEYXRlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZERhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKHN0cikpO1xuICAgICAgICBpZiAoaXNOYU4obm9ybWFsaXplZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub3JtYWxpemVkRGF0ZSBpcyBpbiB0aGUgdXNlcidzIHRpbWV6b25lLiBBcHBseSB0aGUgaW5wdXRcbiAgICAgICAgLy8gdGltZXpvbmUgb2Zmc2V0IHRvIHRoZSBkYXRlIHNvIHRoYXQgdGhlIHllYXIgYW5kIGRheSBtYXRjaFxuICAgICAgICAvLyB0aGUgaW5wdXRcbiAgICAgICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXQoc3RyKTtcbiAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgdGltZXpvbmVEaWZmZXJlbmNlID0gbm9ybWFsaXplZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAtXG4gICAgICAgICAgICAgICAgdGltZXpvbmVPZmZzZXQ7XG4gICAgICAgICAgICBub3JtYWxpemVkRGF0ZSA9IG5ldyBEYXRlKG5vcm1hbGl6ZWREYXRlLmdldFRpbWUoKSArXG4gICAgICAgICAgICAgICAgNjAwMDAgKiB0aW1lem9uZURpZmZlcmVuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRheSA9IFN0cmluZyhub3JtYWxpemVkRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB2YXIgZGF5T3JZZWFyLCBkYXlPclllYXJNYXRjaGVzLCB5ZWFyO1xuICAgICAgICAvL2NoZWNrIGZvciB2YWxpZCBkb3VibGUgZGlnaXRzIHRoYXQgY291bGQgYmUgbGF0ZSBkYXlzXG4gICAgICAgIC8vY2hlY2sgZm9yIGFsbCBtYXRjaGVzIHNpbmNlIGEgc3RyaW5nIGxpa2UgJzEyLzIzJyBpcyBhIHZhbGlkIGRhdGVcbiAgICAgICAgLy9pZ25vcmUgZXZlcnl0aGluZyB3aXRoIG5lYXJieSBjb2xvbnNcbiAgICAgICAgZGF5T3JZZWFyTWF0Y2hlcyA9IHN0ci5tYXRjaCgvKF58W146XFxkXSlbMjNdXFxkKFteOlxcZF18JCkvZyk7XG4gICAgICAgIGlmICghZGF5T3JZZWFyTWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZGF5T3JZZWFyID0gZGF5T3JZZWFyTWF0Y2hlcy5tYXAoZnVuY3Rpb24oZGlnaXRTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBkaWdpdFN0cmluZy5tYXRjaCgvXFxkKy9nKVswXTtcbiAgICAgICAgfSkuam9pbignLycpO1xuXG4gICAgICAgIHllYXIgPSBTdHJpbmcobm9ybWFsaXplZERhdGUuZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTIpO1xuICAgICAgICBpZiAoZGF5T3JZZWFyID09PSBkYXkgfHwgZGF5T3JZZWFyID09PSB5ZWFyKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoZGF5T3JZZWFyID09PSAoZGF5ICsgJy8nICsgeWVhcikpIHx8IChkYXlPclllYXIgPT09ICh5ZWFyICsgJy8nICsgZGF5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQWZ0ZXIgPSBmdW5jdGlvbiAoc3RyLCBkYXRlKSB7XG4gICAgICAgIHZhciBjb21wYXJpc29uID0gdmFsaWRhdG9yLnRvRGF0ZShkYXRlIHx8IG5ldyBEYXRlKCkpXG4gICAgICAgICAgLCBvcmlnaW5hbCA9IHZhbGlkYXRvci50b0RhdGUoc3RyKTtcbiAgICAgICAgcmV0dXJuICEhKG9yaWdpbmFsICYmIGNvbXBhcmlzb24gJiYgb3JpZ2luYWwgPiBjb21wYXJpc29uKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQmVmb3JlID0gZnVuY3Rpb24gKHN0ciwgZGF0ZSkge1xuICAgICAgICB2YXIgY29tcGFyaXNvbiA9IHZhbGlkYXRvci50b0RhdGUoZGF0ZSB8fCBuZXcgRGF0ZSgpKVxuICAgICAgICAgICwgb3JpZ2luYWwgPSB2YWxpZGF0b3IudG9EYXRlKHN0cik7XG4gICAgICAgIHJldHVybiAhIShvcmlnaW5hbCAmJiBjb21wYXJpc29uICYmIG9yaWdpbmFsIDwgY29tcGFyaXNvbik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0luID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb25zKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gdmFsaWRhdG9yLnRvU3RyaW5nKG9wdGlvbnNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2Yoc3RyKSA+PSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoc3RyKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmluZGV4T2Yoc3RyKSA+PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzV2hpdGVsaXN0ZWQgPSBmdW5jdGlvbiAoc3RyLCBjaGFycykge1xuICAgICAgICBmb3IgKHZhciBpID0gc3RyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoY2hhcnMuaW5kZXhPZihzdHJbaV0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNDcmVkaXRDYXJkID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgc2FuaXRpemVkID0gc3RyLnJlcGxhY2UoL1teMC05XSsvZywgJycpO1xuICAgICAgICBpZiAoIWNyZWRpdENhcmQudGVzdChzYW5pdGl6ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1bSA9IDAsIGRpZ2l0LCB0bXBOdW0sIHNob3VsZERvdWJsZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHNhbml0aXplZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgZGlnaXQgPSBzYW5pdGl6ZWQuc3Vic3RyaW5nKGksIChpICsgMSkpO1xuICAgICAgICAgICAgdG1wTnVtID0gcGFyc2VJbnQoZGlnaXQsIDEwKTtcbiAgICAgICAgICAgIGlmIChzaG91bGREb3VibGUpIHtcbiAgICAgICAgICAgICAgICB0bXBOdW0gKj0gMjtcbiAgICAgICAgICAgICAgICBpZiAodG1wTnVtID49IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSAoKHRtcE51bSAlIDEwKSArIDEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSB0bXBOdW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hvdWxkRG91YmxlID0gIXNob3VsZERvdWJsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISEoKHN1bSAlIDEwKSA9PT0gMCA/IHNhbml0aXplZCA6IGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzSVNJTiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFpc2luLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoZWNrc3VtU3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKGNoYXJhY3Rlcikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGNoYXJhY3RlciwgMzYpO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgc3VtID0gMCwgZGlnaXQsIHRtcE51bSwgc2hvdWxkRG91YmxlID0gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoZWNrc3VtU3RyLmxlbmd0aCAtIDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBkaWdpdCA9IGNoZWNrc3VtU3RyLnN1YnN0cmluZyhpLCAoaSArIDEpKTtcbiAgICAgICAgICAgIHRtcE51bSA9IHBhcnNlSW50KGRpZ2l0LCAxMCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkRG91YmxlKSB7XG4gICAgICAgICAgICAgICAgdG1wTnVtICo9IDI7XG4gICAgICAgICAgICAgICAgaWYgKHRtcE51bSA+PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtICsgMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3VtICs9IHRtcE51bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3VsZERvdWJsZSA9ICFzaG91bGREb3VibGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gMSksIDEwKSA9PT0gKDEwMDAwIC0gc3VtKSAlIDEwO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJU0JOID0gZnVuY3Rpb24gKHN0ciwgdmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uID0gdmFsaWRhdG9yLnRvU3RyaW5nKHZlcnNpb24pO1xuICAgICAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNJU0JOKHN0ciwgMTApIHx8IHZhbGlkYXRvci5pc0lTQk4oc3RyLCAxMyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNhbml0aXplZCA9IHN0ci5yZXBsYWNlKC9bXFxzLV0rL2csICcnKVxuICAgICAgICAgICwgY2hlY2tzdW0gPSAwLCBpO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gJzEwJykge1xuICAgICAgICAgICAgaWYgKCFpc2JuMTBNYXliZS50ZXN0KHNhbml0aXplZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gKGkgKyAxKSAqIHNhbml0aXplZC5jaGFyQXQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2FuaXRpemVkLmNoYXJBdCg5KSA9PT0gJ1gnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gMTAgKiAxMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gMTAgKiBzYW5pdGl6ZWQuY2hhckF0KDkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChjaGVja3N1bSAlIDExKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXNhbml0aXplZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlICBpZiAodmVyc2lvbiA9PT0gJzEzJykge1xuICAgICAgICAgICAgaWYgKCFpc2JuMTNNYXliZS50ZXN0KHNhbml0aXplZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZmFjdG9yID0gWyAxLCAzIF07XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgICAgIGNoZWNrc3VtICs9IGZhY3RvcltpICUgMl0gKiBzYW5pdGl6ZWQuY2hhckF0KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNhbml0aXplZC5jaGFyQXQoMTIpIC0gKCgxMCAtIChjaGVja3N1bSAlIDEwKSkgJSAxMCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFzYW5pdGl6ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNNb2JpbGVQaG9uZSA9IGZ1bmN0aW9uKHN0ciwgbG9jYWxlKSB7XG4gICAgICAgIGlmIChsb2NhbGUgaW4gcGhvbmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcGhvbmVzW2xvY2FsZV0udGVzdChzdHIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmF1bHRfY3VycmVuY3lfb3B0aW9ucyA9IHtcbiAgICAgICAgc3ltYm9sOiAnJCdcbiAgICAgICwgcmVxdWlyZV9zeW1ib2w6IGZhbHNlXG4gICAgICAsIGFsbG93X3NwYWNlX2FmdGVyX3N5bWJvbDogZmFsc2VcbiAgICAgICwgc3ltYm9sX2FmdGVyX2RpZ2l0czogZmFsc2VcbiAgICAgICwgYWxsb3dfbmVnYXRpdmVzOiB0cnVlXG4gICAgICAsIHBhcmVuc19mb3JfbmVnYXRpdmVzOiBmYWxzZVxuICAgICAgLCBuZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHM6IGZhbHNlXG4gICAgICAsIG5lZ2F0aXZlX3NpZ25fYWZ0ZXJfZGlnaXRzOiBmYWxzZVxuICAgICAgLCBhbGxvd19uZWdhdGl2ZV9zaWduX3BsYWNlaG9sZGVyOiBmYWxzZVxuICAgICAgLCB0aG91c2FuZHNfc2VwYXJhdG9yOiAnLCdcbiAgICAgICwgZGVjaW1hbF9zZXBhcmF0b3I6ICcuJ1xuICAgICAgLCBhbGxvd19zcGFjZV9hZnRlcl9kaWdpdHM6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0N1cnJlbmN5ID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF9jdXJyZW5jeV9vcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gY3VycmVuY3lSZWdleChvcHRpb25zKS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0pTT04gPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICAgICAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc011bHRpYnl0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpYnl0ZS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0FzY2lpID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gYXNjaWkudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNGdWxsV2lkdGggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBmdWxsV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNIYWxmV2lkdGggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBoYWxmV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNWYXJpYWJsZVdpZHRoID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gZnVsbFdpZHRoLnRlc3Qoc3RyKSAmJiBoYWxmV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNTdXJyb2dhdGVQYWlyID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3Vycm9nYXRlUGFpci50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0Jhc2U2NCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGJhc2U2NC50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc01vbmdvSWQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNIZXhhZGVjaW1hbChzdHIpICYmIHN0ci5sZW5ndGggPT09IDI0O1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJU084NjAxID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gaXNvODYwMS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5sdHJpbSA9IGZ1bmN0aW9uIChzdHIsIGNoYXJzKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gY2hhcnMgPyBuZXcgUmVnRXhwKCdeWycgKyBjaGFycyArICddKycsICdnJykgOiAvXlxccysvZztcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sICcnKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLnJ0cmltID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgdmFyIHBhdHRlcm4gPSBjaGFycyA/IG5ldyBSZWdFeHAoJ1snICsgY2hhcnMgKyAnXSskJywgJ2cnKSA6IC9cXHMrJC9nO1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocGF0dGVybiwgJycpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IudHJpbSA9IGZ1bmN0aW9uIChzdHIsIGNoYXJzKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gY2hhcnMgPyBuZXcgUmVnRXhwKCdeWycgKyBjaGFycyArICddK3xbJyArIGNoYXJzICsgJ10rJCcsICdnJykgOiAvXlxccyt8XFxzKyQvZztcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sICcnKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmVzY2FwZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIChzdHIucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyYjeDI3OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICcmI3gyRjsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYC9nLCAnJiM5NjsnKSk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5zdHJpcExvdyA9IGZ1bmN0aW9uIChzdHIsIGtlZXBfbmV3X2xpbmVzKSB7XG4gICAgICAgIHZhciBjaGFycyA9IGtlZXBfbmV3X2xpbmVzID8gJ1xcXFx4MDAtXFxcXHgwOVxcXFx4MEJcXFxceDBDXFxcXHgwRS1cXFxceDFGXFxcXHg3RicgOiAnXFxcXHgwMC1cXFxceDFGXFxcXHg3Ric7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuYmxhY2tsaXN0KHN0ciwgY2hhcnMpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3Iud2hpdGVsaXN0ID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1teJyArIGNoYXJzICsgJ10rJywgJ2cnKSwgJycpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuYmxhY2tsaXN0ID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1snICsgY2hhcnMgKyAnXSsnLCAnZycpLCAnJyk7XG4gICAgfTtcblxuICAgIHZhciBkZWZhdWx0X25vcm1hbGl6ZV9lbWFpbF9vcHRpb25zID0ge1xuICAgICAgICBsb3dlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlbW92ZV9kb3RzOiB0cnVlLFxuICAgICAgICByZW1vdmVfZXh0ZW5zaW9uOiB0cnVlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5ub3JtYWxpemVFbWFpbCA9IGZ1bmN0aW9uIChlbWFpbCwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF9ub3JtYWxpemVfZW1haWxfb3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzRW1haWwoZW1haWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcnRzID0gZW1haWwuc3BsaXQoJ0AnLCAyKTtcbiAgICAgICAgcGFydHNbMV0gPSBwYXJ0c1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAocGFydHNbMV0gPT09ICdnbWFpbC5jb20nIHx8IHBhcnRzWzFdID09PSAnZ29vZ2xlbWFpbC5jb20nKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZW1vdmVfZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgcGFydHNbMF0gPSBwYXJ0c1swXS5zcGxpdCgnKycpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVtb3ZlX2RvdHMpIHtcbiAgICAgICAgICAgICAgICBwYXJ0c1swXSA9IHBhcnRzWzBdLnJlcGxhY2UoL1xcLi9nLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXBhcnRzWzBdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHBhcnRzWzFdID0gJ2dtYWlsLmNvbSc7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sb3dlcmNhc2UpIHtcbiAgICAgICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydHMuam9pbignQCcpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBtZXJnZShvYmosIGRlZmF1bHRzKSB7XG4gICAgICAgIG9iaiA9IG9iaiB8fCB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbmN5UmVnZXgob3B0aW9ucykge1xuICAgICAgICB2YXIgc3ltYm9sID0gJyhcXFxcJyArIG9wdGlvbnMuc3ltYm9sLnJlcGxhY2UoL1xcLi9nLCAnXFxcXC4nKSArICcpJyArIChvcHRpb25zLnJlcXVpcmVfc3ltYm9sID8gJycgOiAnPycpXG4gICAgICAgICAgICAsIG5lZ2F0aXZlID0gJy0/J1xuICAgICAgICAgICAgLCB3aG9sZV9kb2xsYXJfYW1vdW50X3dpdGhvdXRfc2VwID0gJ1sxLTldXFxcXGQqJ1xuICAgICAgICAgICAgLCB3aG9sZV9kb2xsYXJfYW1vdW50X3dpdGhfc2VwID0gJ1sxLTldXFxcXGR7MCwyfShcXFxcJyArIG9wdGlvbnMudGhvdXNhbmRzX3NlcGFyYXRvciArICdcXFxcZHszfSkqJ1xuICAgICAgICAgICAgLCB2YWxpZF93aG9sZV9kb2xsYXJfYW1vdW50cyA9IFsnMCcsIHdob2xlX2RvbGxhcl9hbW91bnRfd2l0aG91dF9zZXAsIHdob2xlX2RvbGxhcl9hbW91bnRfd2l0aF9zZXBdXG4gICAgICAgICAgICAsIHdob2xlX2RvbGxhcl9hbW91bnQgPSAnKCcgKyB2YWxpZF93aG9sZV9kb2xsYXJfYW1vdW50cy5qb2luKCd8JykgKyAnKT8nXG4gICAgICAgICAgICAsIGRlY2ltYWxfYW1vdW50ID0gJyhcXFxcJyArIG9wdGlvbnMuZGVjaW1hbF9zZXBhcmF0b3IgKyAnXFxcXGR7Mn0pPyc7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gd2hvbGVfZG9sbGFyX2Ftb3VudCArIGRlY2ltYWxfYW1vdW50O1xuICAgICAgICAvLyBkZWZhdWx0IGlzIG5lZ2F0aXZlIHNpZ24gYmVmb3JlIHN5bWJvbCwgYnV0IHRoZXJlIGFyZSB0d28gb3RoZXIgb3B0aW9ucyAoYmVzaWRlcyBwYXJlbnMpXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93X25lZ2F0aXZlcyAmJiAhb3B0aW9ucy5wYXJlbnNfZm9yX25lZ2F0aXZlcykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmVnYXRpdmVfc2lnbl9hZnRlcl9kaWdpdHMpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuICs9IG5lZ2F0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5uZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHMpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbmVnYXRpdmUgKyBwYXR0ZXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNvdXRoIEFmcmljYW4gUmFuZCwgZm9yIGV4YW1wbGUsIHVzZXMgUiAxMjMgKHNwYWNlKSBhbmQgUi0xMjMgKG5vIHNwYWNlKVxuICAgICAgICBpZiAob3B0aW9ucy5hbGxvd19uZWdhdGl2ZV9zaWduX3BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gJyggKD8hXFxcXC0pKT8nICsgcGF0dGVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLmFsbG93X3NwYWNlX2FmdGVyX3N5bWJvbCkge1xuICAgICAgICAgICAgcGF0dGVybiA9ICcgPycgKyBwYXR0ZXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuYWxsb3dfc3BhY2VfYWZ0ZXJfZGlnaXRzKSB7XG4gICAgICAgICAgICBwYXR0ZXJuICs9ICcoICg/ISQpKT8nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnN5bWJvbF9hZnRlcl9kaWdpdHMpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gKz0gc3ltYm9sO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybiA9IHN5bWJvbCArIHBhdHRlcm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfbmVnYXRpdmVzKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wYXJlbnNfZm9yX25lZ2F0aXZlcykge1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAnKFxcXFwoJyArIHBhdHRlcm4gKyAnXFxcXCl8JyArIHBhdHRlcm4gKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghKG9wdGlvbnMubmVnYXRpdmVfc2lnbl9iZWZvcmVfZGlnaXRzIHx8IG9wdGlvbnMubmVnYXRpdmVfc2lnbl9hZnRlcl9kaWdpdHMpKSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IG5lZ2F0aXZlICsgcGF0dGVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAvLyBlbnN1cmUgdGhlcmUncyBhIGRvbGxhciBhbmQvb3IgZGVjaW1hbCBhbW91bnQsIGFuZCB0aGF0IGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIHNwYWNlIG9yIGEgbmVnYXRpdmUgc2lnbiBmb2xsb3dlZCBieSBhIHNwYWNlXG4gICAgICAgICAgICAnKD8hLT8gKSg/PS4qXFxcXGQpJyArXG4gICAgICAgICAgICBwYXR0ZXJuICtcbiAgICAgICAgICAgICckJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5pbml0KCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yO1xuXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIElOVkFMSURfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIHR5cGUgezB9IGJ1dCBmb3VuZCB0eXBlIHsxfVwiLFxuICAgIElOVkFMSURfRk9STUFUOiAgICAgICAgICAgICAgICAgICAgICAgICBcIk9iamVjdCBkaWRuJ3QgcGFzcyB2YWxpZGF0aW9uIGZvciBmb3JtYXQgezB9OiB7MX1cIixcbiAgICBFTlVNX01JU01BVENIOiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJObyBlbnVtIG1hdGNoIGZvcjogezB9XCIsXG4gICAgQU5ZX09GX01JU1NJTkc6ICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGF0YSBkb2VzIG5vdCBtYXRjaCBhbnkgc2NoZW1hcyBmcm9tICdhbnlPZidcIixcbiAgICBPTkVfT0ZfTUlTU0lORzogICAgICAgICAgICAgICAgICAgICAgICAgXCJEYXRhIGRvZXMgbm90IG1hdGNoIGFueSBzY2hlbWFzIGZyb20gJ29uZU9mJ1wiLFxuICAgIE9ORV9PRl9NVUxUSVBMRTogICAgICAgICAgICAgICAgICAgICAgICBcIkRhdGEgaXMgdmFsaWQgYWdhaW5zdCBtb3JlIHRoYW4gb25lIHNjaGVtYSBmcm9tICdvbmVPZidcIixcbiAgICBOT1RfUEFTU0VEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEYXRhIG1hdGNoZXMgc2NoZW1hIGZyb20gJ25vdCdcIixcblxuICAgIC8vIEFycmF5IGVycm9yc1xuICAgIEFSUkFZX0xFTkdUSF9TSE9SVDogICAgICAgICAgICAgICAgICAgICBcIkFycmF5IGlzIHRvbyBzaG9ydCAoezB9KSwgbWluaW11bSB7MX1cIixcbiAgICBBUlJBWV9MRU5HVEhfTE9ORzogICAgICAgICAgICAgICAgICAgICAgXCJBcnJheSBpcyB0b28gbG9uZyAoezB9KSwgbWF4aW11bSB7MX1cIixcbiAgICBBUlJBWV9VTklRVUU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcnJheSBpdGVtcyBhcmUgbm90IHVuaXF1ZSAoaW5kZXhlcyB7MH0gYW5kIHsxfSlcIixcbiAgICBBUlJBWV9BRERJVElPTkFMX0lURU1TOiAgICAgICAgICAgICAgICAgXCJBZGRpdGlvbmFsIGl0ZW1zIG5vdCBhbGxvd2VkXCIsXG5cbiAgICAvLyBOdW1lcmljIGVycm9yc1xuICAgIE1VTFRJUExFX09GOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlZhbHVlIHswfSBpcyBub3QgYSBtdWx0aXBsZSBvZiB7MX1cIixcbiAgICBNSU5JTVVNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJWYWx1ZSB7MH0gaXMgbGVzcyB0aGFuIG1pbmltdW0gezF9XCIsXG4gICAgTUlOSU1VTV9FWENMVVNJVkU6ICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWUgezB9IGlzIGVxdWFsIG9yIGxlc3MgdGhhbiBleGNsdXNpdmUgbWluaW11bSB7MX1cIixcbiAgICBNQVhJTVVNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJWYWx1ZSB7MH0gaXMgZ3JlYXRlciB0aGFuIG1heGltdW0gezF9XCIsXG4gICAgTUFYSU1VTV9FWENMVVNJVkU6ICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWUgezB9IGlzIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiBleGNsdXNpdmUgbWF4aW11bSB7MX1cIixcblxuICAgIC8vIE9iamVjdCBlcnJvcnNcbiAgICBPQkpFQ1RfUFJPUEVSVElFU19NSU5JTVVNOiAgICAgICAgICAgICAgXCJUb28gZmV3IHByb3BlcnRpZXMgZGVmaW5lZCAoezB9KSwgbWluaW11bSB7MX1cIixcbiAgICBPQkpFQ1RfUFJPUEVSVElFU19NQVhJTVVNOiAgICAgICAgICAgICAgXCJUb28gbWFueSBwcm9wZXJ0aWVzIGRlZmluZWQgKHswfSksIG1heGltdW0gezF9XCIsXG4gICAgT0JKRUNUX01JU1NJTkdfUkVRVUlSRURfUFJPUEVSVFk6ICAgICAgIFwiTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eTogezB9XCIsXG4gICAgT0JKRUNUX0FERElUSU9OQUxfUFJPUEVSVElFUzogICAgICAgICAgIFwiQWRkaXRpb25hbCBwcm9wZXJ0aWVzIG5vdCBhbGxvd2VkOiB7MH1cIixcbiAgICBPQkpFQ1RfREVQRU5ERU5DWV9LRVk6ICAgICAgICAgICAgICAgICAgXCJEZXBlbmRlbmN5IGZhaWxlZCAtIGtleSBtdXN0IGV4aXN0OiB7MH0gKGR1ZSB0byBrZXk6IHsxfSlcIixcblxuICAgIC8vIFN0cmluZyBlcnJvcnNcbiAgICBNSU5fTEVOR1RIOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgaXMgdG9vIHNob3J0ICh7MH0gY2hhcnMpLCBtaW5pbXVtIHsxfVwiLFxuICAgIE1BWF9MRU5HVEg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN0cmluZyBpcyB0b28gbG9uZyAoezB9IGNoYXJzKSwgbWF4aW11bSB7MX1cIixcbiAgICBQQVRURVJOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiB7MH06IHsxfVwiLFxuXG4gICAgLy8gU2NoZW1hIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgS0VZV09SRF9UWVBFX0VYUEVDVEVEOiAgICAgICAgICAgICAgICAgIFwiS2V5d29yZCAnezB9JyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICd7MX0nXCIsXG4gICAgS0VZV09SRF9VTkRFRklORURfU1RSSUNUOiAgICAgICAgICAgICAgIFwiS2V5d29yZCAnezB9JyBtdXN0IGJlIGRlZmluZWQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBLRVlXT1JEX1VORVhQRUNURUQ6ICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIGlzIG5vdCBleHBlY3RlZCB0byBhcHBlYXIgaW4gdGhlIHNjaGVtYVwiLFxuICAgIEtFWVdPUkRfTVVTVF9CRTogICAgICAgICAgICAgICAgICAgICAgICBcIktleXdvcmQgJ3swfScgbXVzdCBiZSB7MX1cIixcbiAgICBLRVlXT1JEX0RFUEVOREVOQ1k6ICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIHJlcXVpcmVzIGtleXdvcmQgJ3sxfSdcIixcbiAgICBLRVlXT1JEX1BBVFRFUk46ICAgICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIGlzIG5vdCBhIHZhbGlkIFJlZ0V4cCBwYXR0ZXJuOiB7MX1cIixcbiAgICBLRVlXT1JEX1ZBTFVFX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgXCJFYWNoIGVsZW1lbnQgb2Yga2V5d29yZCAnezB9JyBhcnJheSBtdXN0IGJlIGEgJ3sxfSdcIixcbiAgICBVTktOT1dOX0ZPUk1BVDogICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZSBpcyBubyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBmb3JtYXQgJ3swfSdcIixcbiAgICBDVVNUT01fTU9ERV9GT1JDRV9QUk9QRVJUSUVTOiAgICAgICAgICAgXCJ7MH0gbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHByb3BlcnR5IGlmIHByZXNlbnRcIixcblxuICAgIC8vIFJlbW90ZSBlcnJvcnNcbiAgICBSRUZfVU5SRVNPTFZFRDogICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWZlcmVuY2UgaGFzIG5vdCBiZWVuIHJlc29sdmVkIGR1cmluZyBjb21waWxhdGlvbjogezB9XCIsXG4gICAgVU5SRVNPTFZBQkxFX1JFRkVSRU5DRTogICAgICAgICAgICAgICAgIFwiUmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogezB9XCIsXG4gICAgU0NIRU1BX05PVF9SRUFDSEFCTEU6ICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdG9yIHdhcyBub3QgYWJsZSB0byByZWFkIHNjaGVtYSB3aXRoIHVyaTogezB9XCIsXG4gICAgU0NIRU1BX1RZUEVfRVhQRUNURUQ6ICAgICAgICAgICAgICAgICAgIFwiU2NoZW1hIGlzIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgJ29iamVjdCdcIixcbiAgICBTQ0hFTUFfTk9UX0FOX09CSkVDVDogICAgICAgICAgICAgICAgICAgXCJTY2hlbWEgaXMgbm90IGFuIG9iamVjdDogezB9XCIsXG4gICAgQVNZTkNfVElNRU9VVDogICAgICAgICAgICAgICAgICAgICAgICAgIFwiezB9IGFzeW5jaHJvbm91cyB0YXNrKHMpIGhhdmUgdGltZWQgb3V0IGFmdGVyIHsxfSBtc1wiLFxuICAgIFBBUkVOVF9TQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6ICAgICAgICBcIlNjaGVtYSBmYWlsZWQgdG8gdmFsaWRhdGUgYWdhaW5zdCBpdHMgcGFyZW50IHNjaGVtYSwgc2VlIGlubmVyIGVycm9ycyBmb3IgZGV0YWlscy5cIixcbiAgICBSRU1PVEVfTk9UX1ZBTElEOiAgICAgICAgICAgICAgICAgICAgICAgXCJSZW1vdGUgcmVmZXJlbmNlIGRpZG4ndCBjb21waWxlIHN1Y2Nlc3NmdWxseTogezB9XCJcblxufTtcbiIsIi8qanNoaW50IG1heGxlbjogZmFsc2UqL1xuXG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZShcInZhbGlkYXRvclwiKTtcblxudmFyIEZvcm1hdFZhbGlkYXRvcnMgPSB7XG4gICAgXCJkYXRlXCI6IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgICAgICB2YXIgbWF0Y2hlcyA9IC9eKFswLTldezR9KS0oWzAtOV17Mn0pLShbMC05XXsyfSkkLy5leGVjKGRhdGUpO1xuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhciB5ZWFyID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgLy8gdmFyIG1vbnRoID0gbWF0Y2hlc1syXTtcbiAgICAgICAgLy8gdmFyIGRheSA9IG1hdGNoZXNbM107XG4gICAgICAgIGlmIChtYXRjaGVzWzJdIDwgXCIwMVwiIHx8IG1hdGNoZXNbMl0gPiBcIjEyXCIgfHwgbWF0Y2hlc1szXSA8IFwiMDFcIiB8fCBtYXRjaGVzWzNdID4gXCIzMVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBcImRhdGUtdGltZVwiOiBmdW5jdGlvbiAoZGF0ZVRpbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGF0ZS10aW1lIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgICAgICB2YXIgcyA9IGRhdGVUaW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJ0XCIpO1xuICAgICAgICBpZiAoIUZvcm1hdFZhbGlkYXRvcnMuZGF0ZShzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtYXRjaGVzID0gL14oWzAtOV17Mn0pOihbMC05XXsyfSk6KFswLTldezJ9KSguWzAtOV0rKT8oenwoWystXVswLTldezJ9OlswLTldezJ9KSkkLy5leGVjKHNbMV0pO1xuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhciBob3VyID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgLy8gdmFyIG1pbnV0ZSA9IG1hdGNoZXNbMl07XG4gICAgICAgIC8vIHZhciBzZWNvbmQgPSBtYXRjaGVzWzNdO1xuICAgICAgICAvLyB2YXIgZnJhY3Rpb24gPSBtYXRjaGVzWzRdO1xuICAgICAgICAvLyB2YXIgdGltZXpvbmUgPSBtYXRjaGVzWzVdO1xuICAgICAgICBpZiAobWF0Y2hlc1sxXSA+IFwiMjNcIiB8fCBtYXRjaGVzWzJdID4gXCI1OVwiIHx8IG1hdGNoZXNbM10gPiBcIjU5XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFwiZW1haWxcIjogZnVuY3Rpb24gKGVtYWlsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW1haWwgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNFbWFpbChlbWFpbCwgeyBcInJlcXVpcmVfdGxkXCI6IHRydWUgfSk7XG4gICAgfSxcbiAgICBcImhvc3RuYW1lXCI6IGZ1bmN0aW9uIChob3N0bmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIGhvc3RuYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvKlxuICAgICAgICAgICAgaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI2FuY2hvcjExNFxuICAgICAgICAgICAgQSBzdHJpbmcgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCB0aGlzIGF0dHJpYnV0ZSBpZiBpdCBpcyBhIHZhbGlkXG4gICAgICAgICAgICByZXByZXNlbnRhdGlvbiBmb3IgYW4gSW50ZXJuZXQgaG9zdCBuYW1lLCBhcyBkZWZpbmVkIGJ5IFJGQyAxMDM0LCBzZWN0aW9uIDMuMSBbUkZDMTAzNF0uXG5cbiAgICAgICAgICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzEwMzQjc2VjdGlvbi0zLjVcblxuICAgICAgICAgICAgPGRpZ2l0PiA6Oj0gYW55IG9uZSBvZiB0aGUgdGVuIGRpZ2l0cyAwIHRocm91Z2ggOVxuICAgICAgICAgICAgdmFyIGRpZ2l0ID0gL1swLTldLztcblxuICAgICAgICAgICAgPGxldHRlcj4gOjo9IGFueSBvbmUgb2YgdGhlIDUyIGFscGhhYmV0aWMgY2hhcmFjdGVycyBBIHRocm91Z2ggWiBpbiB1cHBlciBjYXNlIGFuZCBhIHRocm91Z2ggeiBpbiBsb3dlciBjYXNlXG4gICAgICAgICAgICB2YXIgbGV0dGVyID0gL1thLXpBLVpdLztcblxuICAgICAgICAgICAgPGxldC1kaWc+IDo6PSA8bGV0dGVyPiB8IDxkaWdpdD5cbiAgICAgICAgICAgIHZhciBsZXREaWcgPSAvWzAtOWEtekEtWl0vO1xuXG4gICAgICAgICAgICA8bGV0LWRpZy1oeXA+IDo6PSA8bGV0LWRpZz4gfCBcIi1cIlxuICAgICAgICAgICAgdmFyIGxldERpZ0h5cCA9IC9bLTAtOWEtekEtWl0vO1xuXG4gICAgICAgICAgICA8bGRoLXN0cj4gOjo9IDxsZXQtZGlnLWh5cD4gfCA8bGV0LWRpZy1oeXA+IDxsZGgtc3RyPlxuICAgICAgICAgICAgdmFyIGxkaFN0ciA9IC9bLTAtOWEtekEtWl0rLztcblxuICAgICAgICAgICAgPGxhYmVsPiA6Oj0gPGxldHRlcj4gWyBbIDxsZGgtc3RyPiBdIDxsZXQtZGlnPiBdXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSAvW2EtekEtWl0oKFstMC05YS16QS1aXSspP1swLTlhLXpBLVpdKT8vO1xuXG4gICAgICAgICAgICA8c3ViZG9tYWluPiA6Oj0gPGxhYmVsPiB8IDxzdWJkb21haW4+IFwiLlwiIDxsYWJlbD5cbiAgICAgICAgICAgIHZhciBzdWJkb21haW4gPSAvXlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KFxcLlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KSokLztcblxuICAgICAgICAgICAgPGRvbWFpbj4gOjo9IDxzdWJkb21haW4+IHwgXCIgXCJcbiAgICAgICAgICAgIHZhciBkb21haW4gPSBudWxsO1xuICAgICAgICAqL1xuICAgICAgICB2YXIgdmFsaWQgPSAvXlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KFxcLlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KSokLy50ZXN0KGhvc3RuYW1lKTtcbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAvLyB0aGUgc3VtIG9mIGFsbCBsYWJlbCBvY3RldHMgYW5kIGxhYmVsIGxlbmd0aHMgaXMgbGltaXRlZCB0byAyNTUuXG4gICAgICAgICAgICBpZiAoaG9zdG5hbWUubGVuZ3RoID4gMjU1KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAgICAgLy8gRWFjaCBub2RlIGhhcyBhIGxhYmVsLCB3aGljaCBpcyB6ZXJvIHRvIDYzIG9jdGV0cyBpbiBsZW5ndGhcbiAgICAgICAgICAgIHZhciBsYWJlbHMgPSBob3N0bmFtZS5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKykgeyBpZiAobGFiZWxzW2ldLmxlbmd0aCA+IDYzKSB7IHJldHVybiBmYWxzZTsgfSB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH0sXG4gICAgXCJob3N0LW5hbWVcIjogZnVuY3Rpb24gKGhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBGb3JtYXRWYWxpZGF0b3JzLmhvc3RuYW1lLmNhbGwodGhpcywgaG9zdG5hbWUpO1xuICAgIH0sXG4gICAgXCJpcHY0XCI6IGZ1bmN0aW9uIChpcHY0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXB2NCAhPT0gXCJzdHJpbmdcIikgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICByZXR1cm4gdmFsaWRhdG9yLmlzSVAoaXB2NCwgNCk7XG4gICAgfSxcbiAgICBcImlwdjZcIjogZnVuY3Rpb24gKGlwdjYpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpcHY2ICE9PSBcInN0cmluZ1wiKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNJUChpcHY2LCA2KTtcbiAgICB9LFxuICAgIFwicmVnZXhcIjogZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgUmVnRXhwKHN0cik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBcInVyaVwiOiBmdW5jdGlvbiAodXJpKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RyaWN0VXJpcykge1xuICAgICAgICAgICAgcmV0dXJuIEZvcm1hdFZhbGlkYXRvcnNbXCJzdHJpY3QtdXJpXCJdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3phZ2dpbm8vei1zY2hlbWEvaXNzdWVzLzE4XG4gICAgICAgIC8vIFJlZ0V4cCBmcm9tIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQlxuICAgICAgICByZXR1cm4gdHlwZW9mIHVyaSAhPT0gXCJzdHJpbmdcIiB8fCBSZWdFeHAoXCJeKChbXjovPyNdKyk6KT8oLy8oW14vPyNdKikpPyhbXj8jXSopKFxcXFw/KFteI10qKSk/KCMoLiopKT9cIikudGVzdCh1cmkpO1xuICAgIH0sXG4gICAgXCJzdHJpY3QtdXJpXCI6IGZ1bmN0aW9uICh1cmkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1cmkgIT09IFwic3RyaW5nXCIgfHwgdmFsaWRhdG9yLmlzVVJMKHVyaSk7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGb3JtYXRWYWxpZGF0b3JzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBGb3JtYXRWYWxpZGF0b3JzICA9IHJlcXVpcmUoXCIuL0Zvcm1hdFZhbGlkYXRvcnNcIiksXG4gICAgUmVwb3J0ICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9SZXBvcnRcIiksXG4gICAgVXRpbHMgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxudmFyIEpzb25WYWxpZGF0b3JzID0ge1xuICAgIG11bHRpcGxlT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjEuMlxuICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKGpzb24gLyBzY2hlbWEubXVsdGlwbGVPZikgIT09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJNVUxUSVBMRV9PRlwiLCBbanNvbiwgc2NoZW1hLm11bHRpcGxlT2ZdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtYXhpbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4yLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoanNvbiA+IHNjaGVtYS5tYXhpbXVtKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUFYSU1VTVwiLCBbanNvbiwgc2NoZW1hLm1heGltdW1dLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGpzb24gPj0gc2NoZW1hLm1heGltdW0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJNQVhJTVVNX0VYQ0xVU0lWRVwiLCBbanNvbiwgc2NoZW1hLm1heGltdW1dLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gbWF4aW11bVxuICAgIH0sXG4gICAgbWluaW11bTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjEuMy4yXG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGpzb24gPCBzY2hlbWEubWluaW11bSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk1JTklNVU1cIiwgW2pzb24sIHNjaGVtYS5taW5pbXVtXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChqc29uIDw9IHNjaGVtYS5taW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUlOSU1VTV9FWENMVVNJVkVcIiwgW2pzb24sIHNjaGVtYS5taW5pbXVtXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZXhjbHVzaXZlTWluaW11bTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjb3ZlcmVkIGluIG1pbmltdW1cbiAgICB9LFxuICAgIG1heExlbmd0aDogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjIuMS4yXG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVdGlscy51Y3MyZGVjb2RlKGpzb24pLmxlbmd0aCA+IHNjaGVtYS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk1BWF9MRU5HVEhcIiwgW2pzb24ubGVuZ3RoLCBzY2hlbWEubWF4TGVuZ3RoXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWluTGVuZ3RoOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4yLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFV0aWxzLnVjczJkZWNvZGUoanNvbikubGVuZ3RoIDwgc2NoZW1hLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUlOX0xFTkdUSFwiLCBbanNvbi5sZW5ndGgsIHNjaGVtYS5taW5MZW5ndGhdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4zLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJlZ0V4cChzY2hlbWEucGF0dGVybikudGVzdChqc29uKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlBBVFRFUk5cIiwgW3NjaGVtYS5wYXR0ZXJuLCBqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWRkaXRpb25hbEl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4xLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIHZhbHVlIG9mIFwiYWRkaXRpb25hbEl0ZW1zXCIgaXMgYm9vbGVhbiB2YWx1ZSBmYWxzZSBhbmQgdGhlIHZhbHVlIG9mIFwiaXRlbXNcIiBpcyBhbiBhcnJheSxcbiAgICAgICAgLy8gdGhlIGpzb24gaXMgdmFsaWQgaWYgaXRzIHNpemUgaXMgbGVzcyB0aGFuLCBvciBlcXVhbCB0bywgdGhlIHNpemUgb2YgXCJpdGVtc1wiLlxuICAgICAgICBpZiAoc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gZmFsc2UgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICBpZiAoanNvbi5sZW5ndGggPiBzY2hlbWEuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiQVJSQVlfQURESVRJT05BTF9JVEVNU1wiLCBudWxsLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBpdGVtczogZnVuY3Rpb24gKCkgeyAvKnJlcG9ydCwgc2NoZW1hLCBqc29uKi9cbiAgICAgICAgLy8gY292ZXJlZCBpbiBhZGRpdGlvbmFsSXRlbXNcbiAgICB9LFxuICAgIG1heEl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4yLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24ubGVuZ3RoID4gc2NoZW1hLm1heEl0ZW1zKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9MRU5HVEhfTE9OR1wiLCBbanNvbi5sZW5ndGgsIHNjaGVtYS5tYXhJdGVtc10sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1pbkl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4zLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24ubGVuZ3RoIDwgc2NoZW1hLm1pbkl0ZW1zKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9MRU5HVEhfU0hPUlRcIiwgW2pzb24ubGVuZ3RoLCBzY2hlbWEubWluSXRlbXNdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB1bmlxdWVJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuNC4yXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEudW5pcXVlSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNVbmlxdWVBcnJheShqc29uLCBtYXRjaGVzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9VTklRVUVcIiwgbWF0Y2hlcywgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4UHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMS4yXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoanNvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIga2V5c0NvdW50ID0gT2JqZWN0LmtleXMoanNvbikubGVuZ3RoO1xuICAgICAgICBpZiAoa2V5c0NvdW50ID4gc2NoZW1hLm1heFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9CSkVDVF9QUk9QRVJUSUVTX01BWElNVU1cIiwgW2tleXNDb3VudCwgc2NoZW1hLm1heFByb3BlcnRpZXNdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5Qcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC4yLjJcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhqc29uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzQ291bnQgPSBPYmplY3Qua2V5cyhqc29uKS5sZW5ndGg7XG4gICAgICAgIGlmIChrZXlzQ291bnQgPCBzY2hlbWEubWluUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiT0JKRUNUX1BST1BFUlRJRVNfTUlOSU1VTVwiLCBba2V5c0NvdW50LCBzY2hlbWEubWluUHJvcGVydGllc10sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJlcXVpcmVkOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC4zLjJcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhqc29uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZHggPSBzY2hlbWEucmVxdWlyZWQubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciByZXF1aXJlZFByb3BlcnR5TmFtZSA9IHNjaGVtYS5yZXF1aXJlZFtpZHhdO1xuICAgICAgICAgICAgaWYgKGpzb25bcmVxdWlyZWRQcm9wZXJ0eU5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJPQkpFQ1RfTUlTU0lOR19SRVFVSVJFRF9QUk9QRVJUWVwiLCBbcmVxdWlyZWRQcm9wZXJ0eU5hbWVdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gcHJvcGVydGllcyBhbmQgcGF0dGVyblByb3BlcnRpZXNcbiAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgJiYgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBKc29uVmFsaWRhdG9ycy5wcm9wZXJ0aWVzLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIGpzb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gcHJvcGVydGllc1xuICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIEpzb25WYWxpZGF0b3JzLnByb3BlcnRpZXMuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSwganNvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByb3BlcnRpZXM6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjQuMlxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKGpzb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBzY2hlbWEucHJvcGVydGllcyAhPT0gdW5kZWZpbmVkID8gc2NoZW1hLnByb3BlcnRpZXMgOiB7fTtcbiAgICAgICAgdmFyIHBhdHRlcm5Qcm9wZXJ0aWVzID0gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQgPyBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgOiB7fTtcbiAgICAgICAgaWYgKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBzZXQgb2YgdGhlIGpzb24gdG8gdmFsaWRhdGUuXG4gICAgICAgICAgICB2YXIgcyA9IE9iamVjdC5rZXlzKGpzb24pO1xuICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHNldCBmcm9tIFwicHJvcGVydGllc1wiLlxuICAgICAgICAgICAgdmFyIHAgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIuXG4gICAgICAgICAgICB2YXIgcHAgPSBPYmplY3Qua2V5cyhwYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgICAgICAvLyByZW1vdmUgZnJvbSBcInNcIiBhbGwgZWxlbWVudHMgb2YgXCJwXCIsIGlmIGFueTtcbiAgICAgICAgICAgIHMgPSBVdGlscy5kaWZmZXJlbmNlKHMsIHApO1xuICAgICAgICAgICAgLy8gZm9yIGVhY2ggcmVnZXggaW4gXCJwcFwiLCByZW1vdmUgYWxsIGVsZW1lbnRzIG9mIFwic1wiIHdoaWNoIHRoaXMgcmVnZXggbWF0Y2hlcy5cbiAgICAgICAgICAgIHZhciBpZHggPSBwcC5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnRXhwID0gUmVnRXhwKHBwW2lkeF0pLFxuICAgICAgICAgICAgICAgICAgICBpZHgyID0gcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVnRXhwLnRlc3Qoc1tpZHgyXSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuc3BsaWNlKGlkeDIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiBvZiB0aGUganNvbiBzdWNjZWVkcyBpZiwgYWZ0ZXIgdGhlc2UgdHdvIHN0ZXBzLCBzZXQgXCJzXCIgaXMgZW1wdHkuXG4gICAgICAgICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gYXNzdW1lQWRkaXRpb25hbCBjYW4gYmUgYW4gYXJyYXkgb2YgYWxsb3dlZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgdmFyIGlkeDMgPSB0aGlzLm9wdGlvbnMuYXNzdW1lQWRkaXRpb25hbC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGlkeDMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlkeDMtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlvID0gcy5pbmRleE9mKHRoaXMub3B0aW9ucy5hc3N1bWVBZGRpdGlvbmFsW2lkeDNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnNwbGljZShpbywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJPQkpFQ1RfQURESVRJT05BTF9QUk9QRVJUSUVTXCIsIFtzXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuNS4yXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoanNvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyksXG4gICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgYWxsIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgdmFyIGRlcGVuZGVuY3lOYW1lID0ga2V5c1tpZHhdO1xuICAgICAgICAgICAgaWYgKGpzb25bZGVwZW5kZW5jeU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlcGVuZGVuY3lEZWZpbml0aW9uID0gc2NoZW1hLmRlcGVuZGVuY2llc1tkZXBlbmRlbmN5TmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhkZXBlbmRlbmN5RGVmaW5pdGlvbikgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZGVwZW5kZW5jeSBpcyBhIHNjaGVtYSwgdmFsaWRhdGUgYWdhaW5zdCB0aGlzIHNjaGVtYVxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBkZXBlbmRlbmN5RGVmaW5pdGlvbiwganNvbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZGVwZW5kZW5jeSBpcyBhbiBhcnJheSwgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYWxsIHByb3BlcnRpZXMgaW4gdGhpcyBhcnJheVxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4MiA9IGRlcGVuZGVuY3lEZWZpbml0aW9uLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVpcmVkUHJvcGVydHlOYW1lID0gZGVwZW5kZW5jeURlZmluaXRpb25baWR4Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbltyZXF1aXJlZFByb3BlcnR5TmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9CSkVDVF9ERVBFTkRFTkNZX0tFWVwiLCBbcmVxdWlyZWRQcm9wZXJ0eU5hbWUsIGRlcGVuZGVuY3lOYW1lXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZW51bTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMS4yXG4gICAgICAgIHZhciBtYXRjaCA9IGZhbHNlLFxuICAgICAgICAgICAgaWR4ID0gc2NoZW1hLmVudW0ubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGlmIChVdGlscy5hcmVFcXVhbChqc29uLCBzY2hlbWEuZW51bVtpZHhdKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2ggPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJFTlVNX01JU01BVENIXCIsIFtqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLypcbiAgICB0eXBlOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS4yLjJcbiAgICAgICAgLy8gdHlwZSBpcyBoYW5kbGVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZCBzbyBpZ25vcmVcbiAgICB9LFxuICAgICovXG4gICAgYWxsT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjMuMlxuICAgICAgICB2YXIgaWR4ID0gc2NoZW1hLmFsbE9mLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRhdGVSZXN1bHQgPSBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuYWxsT2ZbaWR4XSwganNvbik7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrT25GaXJzdEVycm9yICYmIHZhbGlkYXRlUmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhbnlPZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNC4yXG4gICAgICAgIHZhciBzdWJSZXBvcnRzID0gW10sXG4gICAgICAgICAgICBwYXNzZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGlkeCA9IHNjaGVtYS5hbnlPZi5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKGlkeC0tICYmIHBhc3NlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhciBzdWJSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICBzdWJSZXBvcnRzLnB1c2goc3ViUmVwb3J0KTtcbiAgICAgICAgICAgIHBhc3NlZCA9IGV4cG9ydHMudmFsaWRhdGUuY2FsbCh0aGlzLCBzdWJSZXBvcnQsIHNjaGVtYS5hbnlPZltpZHhdLCBqc29uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXNzZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBTllfT0ZfTUlTU0lOR1wiLCB1bmRlZmluZWQsIHN1YlJlcG9ydHMsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG9uZU9mOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS41LjJcbiAgICAgICAgdmFyIHBhc3NlcyA9IDAsXG4gICAgICAgICAgICBzdWJSZXBvcnRzID0gW10sXG4gICAgICAgICAgICBpZHggPSBzY2hlbWEub25lT2YubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIHN1YlJlcG9ydCA9IG5ldyBSZXBvcnQocmVwb3J0LCB7IG1heEVycm9yczogMSB9KTtcbiAgICAgICAgICAgIHN1YlJlcG9ydHMucHVzaChzdWJSZXBvcnQpO1xuICAgICAgICAgICAgaWYgKGV4cG9ydHMudmFsaWRhdGUuY2FsbCh0aGlzLCBzdWJSZXBvcnQsIHNjaGVtYS5vbmVPZltpZHhdLCBqc29uKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHBhc3NlcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhc3NlcyA9PT0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiT05FX09GX01JU1NJTkdcIiwgdW5kZWZpbmVkLCBzdWJSZXBvcnRzLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhc3NlcyA+IDEpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9ORV9PRl9NVUxUSVBMRVwiLCBudWxsLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjYuMlxuICAgICAgICB2YXIgc3ViUmVwb3J0ID0gbmV3IFJlcG9ydChyZXBvcnQpO1xuICAgICAgICBpZiAoZXhwb3J0cy52YWxpZGF0ZS5jYWxsKHRoaXMsIHN1YlJlcG9ydCwgc2NoZW1hLm5vdCwganNvbikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk5PVF9QQVNTRURcIiwgbnVsbCwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGVmaW5pdGlvbnM6IGZ1bmN0aW9uICgpIHsgLypyZXBvcnQsIHNjaGVtYSwganNvbiovXG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNy4yXG4gICAgICAgIC8vIG5vdGhpbmcgdG8gZG8gaGVyZVxuICAgIH0sXG4gICAgZm9ybWF0OiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjcuMlxuICAgICAgICB2YXIgZm9ybWF0VmFsaWRhdG9yRm4gPSBGb3JtYXRWYWxpZGF0b3JzW3NjaGVtYS5mb3JtYXRdO1xuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdFZhbGlkYXRvckZuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRWYWxpZGF0b3JGbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBhc3luY1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRBc3luY1Rhc2soZm9ybWF0VmFsaWRhdG9yRm4sIFtqc29uXSwgZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJJTlZBTElEX0ZPUk1BVFwiLCBbc2NoZW1hLmZvcm1hdCwganNvbl0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3luY1xuICAgICAgICAgICAgICAgIGlmIChmb3JtYXRWYWxpZGF0b3JGbi5jYWxsKHRoaXMsIGpzb24pICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIklOVkFMSURfRk9STUFUXCIsIFtzY2hlbWEuZm9ybWF0LCBqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVVua25vd25Gb3JtYXRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJVTktOT1dOX0ZPUk1BVFwiLCBbc2NoZW1hLmZvcm1hdF0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgcmVjdXJzZUFycmF5ID0gZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjguMlxuXG4gICAgdmFyIGlkeCA9IGpzb24ubGVuZ3RoO1xuXG4gICAgLy8gSWYgXCJpdGVtc1wiIGlzIGFuIGFycmF5LCB0aGlzIHNpdHVhdGlvbiwgdGhlIHNjaGVtYSBkZXBlbmRzIG9uIHRoZSBpbmRleDpcbiAgICAvLyBpZiB0aGUgaW5kZXggaXMgbGVzcyB0aGFuLCBvciBlcXVhbCB0bywgdGhlIHNpemUgb2YgXCJpdGVtc1wiLFxuICAgIC8vIHRoZSBjaGlsZCBpbnN0YW5jZSBtdXN0IGJlIHZhbGlkIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgc2NoZW1hIGluIHRoZSBcIml0ZW1zXCIgYXJyYXk7XG4gICAgLy8gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIHZhbGlkIGFnYWluc3QgdGhlIHNjaGVtYSBkZWZpbmVkIGJ5IFwiYWRkaXRpb25hbEl0ZW1zXCIuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgLy8gZXF1YWwgdG8gZG9lc250IG1ha2Ugc2Vuc2UgaGVyZVxuICAgICAgICAgICAgaWYgKGlkeCA8IHNjaGVtYS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuaXRlbXNbaWR4XSwganNvbltpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbWlnaHQgYmUgYm9vbGVhbiwgc28gY2hlY2sgdGhhdCBpdCdzIGFuIG9iamVjdFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywganNvbltpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEuaXRlbXMgPT09IFwib2JqZWN0XCIpIHtcblxuICAgICAgICAvLyBJZiBpdGVtcyBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgY2hpbGQgaW5zdGFuY2UgbXVzdCBiZSB2YWxpZCBhZ2FpbnN0IHRoaXMgc2NoZW1hLFxuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIGl0cyBpbmRleCwgYW5kIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIFwiYWRkaXRpb25hbEl0ZW1zXCIuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuaXRlbXMsIGpzb25baWR4XSk7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgfVxufTtcblxudmFyIHJlY3Vyc2VPYmplY3QgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uOC4zXG5cbiAgICAvLyBJZiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIgaXMgYWJzZW50LCBpdCBpcyBjb25zaWRlcmVkIHByZXNlbnQgd2l0aCBhbiBlbXB0eSBzY2hlbWEgYXMgYSB2YWx1ZS5cbiAgICAvLyBJbiBhZGRpdGlvbiwgYm9vbGVhbiB2YWx1ZSB0cnVlIGlzIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBhbiBlbXB0eSBzY2hlbWEuXG4gICAgdmFyIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmIChhZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdHJ1ZSB8fCBhZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuXG4gICAgLy8gcCAtIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInByb3BlcnRpZXNcIi5cbiAgICB2YXIgcCA9IHNjaGVtYS5wcm9wZXJ0aWVzID8gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpIDogW107XG5cbiAgICAvLyBwcCAtIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIuIEVsZW1lbnRzIG9mIHRoaXMgc2V0IHdpbGwgYmUgY2FsbGVkIHJlZ2V4ZXMgZm9yIGNvbnZlbmllbmNlLlxuICAgIHZhciBwcCA9IHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyA/IE9iamVjdC5rZXlzKHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcykgOiBbXTtcblxuICAgIC8vIG0gLSBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgY2hpbGQuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhqc29uKSxcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIG0gPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0ganNvblttXTtcblxuICAgICAgICAvLyBzIC0gVGhlIHNldCBvZiBzY2hlbWFzIGZvciB0aGUgY2hpbGQgaW5zdGFuY2UuXG4gICAgICAgIHZhciBzID0gW107XG5cbiAgICAgICAgLy8gMS4gSWYgc2V0IFwicFwiIGNvbnRhaW5zIHZhbHVlIFwibVwiLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHNjaGVtYSBpbiBcInByb3BlcnRpZXNcIiBpcyBhZGRlZCB0byBcInNcIi5cbiAgICAgICAgaWYgKHAuaW5kZXhPZihtKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHMucHVzaChzY2hlbWEucHJvcGVydGllc1ttXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCByZWdleCBpbiBcInBwXCIsIGlmIGl0IG1hdGNoZXMgXCJtXCIgc3VjY2Vzc2Z1bGx5LCB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWEgaW4gXCJwYXR0ZXJuUHJvcGVydGllc1wiIGlzIGFkZGVkIHRvIFwic1wiLlxuICAgICAgICB2YXIgaWR4MiA9IHBwLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgdmFyIHJlZ2V4U3RyaW5nID0gcHBbaWR4Ml07XG4gICAgICAgICAgICBpZiAoUmVnRXhwKHJlZ2V4U3RyaW5nKS50ZXN0KG0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcy5wdXNoKHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1tyZWdleFN0cmluZ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVGhlIHNjaGVtYSBkZWZpbmVkIGJ5IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIiBpcyBhZGRlZCB0byBcInNcIiBpZiBhbmQgb25seSBpZiwgYXQgdGhpcyBzdGFnZSwgXCJzXCIgaXMgZW1wdHkuXG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCAmJiBhZGRpdGlvbmFsUHJvcGVydGllcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHMucHVzaChhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBhcmUgcGFzc2luZyB0ZXN0cyBldmVuIHdpdGhvdXQgdGhpcyBhc3NlcnQgYmVjYXVzZSB0aGlzIGlzIGNvdmVyZWQgYnkgcHJvcGVydGllcyBjaGVja1xuICAgICAgICAvLyBpZiBzIGlzIGVtcHR5IGluIHRoaXMgc3RhZ2UsIG5vIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIGFyZSBhbGxvd2VkXG4gICAgICAgIC8vIHJlcG9ydC5leHBlY3Qocy5sZW5ndGggIT09IDAsICdFMDAxJywgbSk7XG5cbiAgICAgICAgLy8gSW5zdGFuY2UgcHJvcGVydHkgdmFsdWUgbXVzdCBwYXNzIGFsbCBzY2hlbWFzIGZyb20gc1xuICAgICAgICBpZHgyID0gcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgyLS0pIHtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2gobSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzW2lkeDJdLCBwcm9wZXJ0eVZhbHVlKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuXG4gICAgcmVwb3J0LmNvbW1vbkVycm9yTWVzc2FnZSA9IFwiSlNPTl9PQkpFQ1RfVkFMSURBVElPTl9GQUlMRURcIjtcblxuICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBhbiBvYmplY3RcbiAgICB2YXIgdG8gPSBVdGlscy53aGF0SXMoc2NoZW1hKTtcbiAgICBpZiAodG8gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiU0NIRU1BX05PVF9BTl9PQkpFQ1RcIiwgW3RvXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBlbXB0eSwgZXZlcnl0aGluZyBpcyB2YWxpZCBhZ2FpbnN0IGVtcHR5IHNjaGVtYVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSwgc28gd2UgbmVlZCB0byByZW1lbWJlciBvdXIgcm9vdFxuICAgIHZhciBpc1Jvb3QgPSBmYWxzZTtcbiAgICBpZiAoIXJlcG9ydC5yb290U2NoZW1hKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBpc1Jvb3QgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZvbGxvdyBzY2hlbWEuJHJlZiBrZXlzXG4gICAgaWYgKHNjaGVtYS4kcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gYXZvaWQgaW5maW5pdGUgbG9vcCB3aXRoIG1heFJlZnNcbiAgICAgICAgdmFyIG1heFJlZnMgPSA5OTtcbiAgICAgICAgd2hpbGUgKHNjaGVtYS4kcmVmICYmIG1heFJlZnMgPiAwKSB7XG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5fXyRyZWZSZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlJFRl9VTlJFU09MVkVEXCIsIFtzY2hlbWEuJHJlZl0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5fXyRyZWZSZXNvbHZlZCA9PT0gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYS5fXyRyZWZSZXNvbHZlZDtcbiAgICAgICAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1heFJlZnMtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4UmVmcyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2lyY3VsYXIgZGVwZW5kZW5jeSBieSAkcmVmIHJlZmVyZW5jZXMhXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHlwZSBjaGVja2luZyBmaXJzdFxuICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMi4yXG4gICAgdmFyIGpzb25UeXBlID0gVXRpbHMud2hhdElzKGpzb24pO1xuICAgIGlmIChzY2hlbWEudHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoanNvblR5cGUgIT09IHNjaGVtYS50eXBlICYmIChqc29uVHlwZSAhPT0gXCJpbnRlZ2VyXCIgfHwgc2NoZW1hLnR5cGUgIT09IFwibnVtYmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiSU5WQUxJRF9UWVBFXCIsIFtzY2hlbWEudHlwZSwganNvblR5cGVdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnJlYWtPbkZpcnN0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZS5pbmRleE9mKGpzb25UeXBlKSA9PT0gLTEgJiYgKGpzb25UeXBlICE9PSBcImludGVnZXJcIiB8fCBzY2hlbWEudHlwZS5pbmRleE9mKFwibnVtYmVyXCIpID09PSAtMSkpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJJTlZBTElEX1RZUEVcIiwgW3NjaGVtYS50eXBlLCBqc29uVHlwZV0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm93IGl0ZXJhdGUgYWxsIHRoZSBrZXlzIGluIHNjaGVtYSBhbmQgZXhlY3V0ZSB2YWxpZGF0aW9uIG1ldGhvZHNcbiAgICB2YXIgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIGlmIChKc29uVmFsaWRhdG9yc1trZXlzW2lkeF1dKSB7XG4gICAgICAgICAgICBKc29uVmFsaWRhdG9yc1trZXlzW2lkeF1dLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIGpzb24pO1xuICAgICAgICAgICAgaWYgKHJlcG9ydC5lcnJvcnMubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvcikgeyBicmVhazsgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlcG9ydC5lcnJvcnMubGVuZ3RoID09PSAwIHx8IHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGpzb25UeXBlID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgIHJlY3Vyc2VBcnJheS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICAgICAgfSBlbHNlIGlmIChqc29uVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVjdXJzZU9iamVjdC5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdlIGRvbid0IG5lZWQgdGhlIHJvb3QgcG9pbnRlciBhbnltb3JlXG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgICByZXBvcnQucm9vdFNjaGVtYSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdmFsaWQganVzdCB0byBiZSBhYmxlIHRvIGJyZWFrIGF0IHNvbWUgY29kZSBwb2ludHNcbiAgICByZXR1cm4gcmVwb3J0LmVycm9ycy5sZW5ndGggPT09IDA7XG5cbn07XG4iLCIvLyBOdW1iZXIuaXNGaW5pdGUgcG9seWZpbGxcbi8vIGh0dHA6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLW51bWJlci5pc2Zpbml0ZVxuaWYgKHR5cGVvZiBOdW1iZXIuaXNGaW5pdGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIE51bWJlci5pc0Zpbml0ZSA9IGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgICAgIC8vIDEuIElmIFR5cGUobnVtYmVyKSBpcyBub3QgTnVtYmVyLCByZXR1cm4gZmFsc2UuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAyLiBJZiBudW1iZXIgaXMgTmFOLCAr4oieLCBvciDiiJLiiJ4sIHJldHVybiBmYWxzZS5cbiAgICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkgfHwgdmFsdWUgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRydWUuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGdldCAgICA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIEVycm9ycyA9IHJlcXVpcmUoXCIuL0Vycm9yc1wiKTtcbnZhciBVdGlscyAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxuZnVuY3Rpb24gUmVwb3J0KHBhcmVudE9yT3B0aW9ucywgcmVwb3J0T3B0aW9ucykge1xuICAgIHRoaXMucGFyZW50UmVwb3J0ID0gcGFyZW50T3JPcHRpb25zIGluc3RhbmNlb2YgUmVwb3J0ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPck9wdGlvbnMgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgIHRoaXMub3B0aW9ucyA9IHBhcmVudE9yT3B0aW9ucyBpbnN0YW5jZW9mIFJlcG9ydCA/XG4gICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9yT3B0aW9ucy5vcHRpb25zIDpcbiAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T3JPcHRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5yZXBvcnRPcHRpb25zID0gcmVwb3J0T3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgdGhpcy5wYXRoID0gW107XG4gICAgdGhpcy5hc3luY1Rhc2tzID0gW107XG59XG5cblJlcG9ydC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5hc3luY1Rhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgdGFza3MgcGVuZGluZywgY2FuJ3QgYW5zd2VyIGlzVmFsaWRcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPT09IDA7XG59O1xuXG5SZXBvcnQucHJvdG90eXBlLmFkZEFzeW5jVGFzayA9IGZ1bmN0aW9uIChmbiwgYXJncywgYXN5bmNUYXNrUmVzdWx0UHJvY2Vzc0ZuKSB7XG4gICAgdGhpcy5hc3luY1Rhc2tzLnB1c2goW2ZuLCBhcmdzLCBhc3luY1Rhc2tSZXN1bHRQcm9jZXNzRm5dKTtcbn07XG5cblJlcG9ydC5wcm90b3R5cGUucHJvY2Vzc0FzeW5jVGFza3MgPSBmdW5jdGlvbiAodGltZW91dCwgY2FsbGJhY2spIHtcblxuICAgIHZhciB2YWxpZGF0aW9uVGltZW91dCA9IHRpbWVvdXQgfHwgMjAwMCxcbiAgICAgICAgdGFza3NDb3VudCAgICAgICAgPSB0aGlzLmFzeW5jVGFza3MubGVuZ3RoLFxuICAgICAgICBpZHggICAgICAgICAgICAgICA9IHRhc2tzQ291bnQsXG4gICAgICAgIHRpbWVkT3V0ICAgICAgICAgID0gZmFsc2UsXG4gICAgICAgIHNlbGYgICAgICAgICAgICAgID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBzZWxmLmVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICAgICAgZXJyICAgPSB2YWxpZCA/IHVuZGVmaW5lZCA6IHNlbGYuZXJyb3JzO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB2YWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3BvbmQoYXN5bmNUYXNrUmVzdWx0UHJvY2Vzc0ZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXN5bmNUYXNrUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAodGltZWRPdXQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBhc3luY1Rhc2tSZXN1bHRQcm9jZXNzRm4oYXN5bmNUYXNrUmVzdWx0KTtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGFza3NDb3VudCA9PT0gMCB8fCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbmlzaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIHZhciB0YXNrID0gdGhpcy5hc3luY1Rhc2tzW2lkeF07XG4gICAgICAgIHRhc2tbMF0uYXBwbHkobnVsbCwgdGFza1sxXS5jb25jYXQocmVzcG9uZCh0YXNrWzJdKSkpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGFza3NDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYuYWRkRXJyb3IoXCJBU1lOQ19USU1FT1VUXCIsIFt0YXNrc0NvdW50LCB2YWxpZGF0aW9uVGltZW91dF0pO1xuICAgICAgICAgICAgY2FsbGJhY2soc2VsZi5lcnJvcnMsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sIHZhbGlkYXRpb25UaW1lb3V0KTtcblxufTtcblxuUmVwb3J0LnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXRoID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50UmVwb3J0KSB7XG4gICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCh0aGlzLnBhcmVudFJlcG9ydC5wYXRoKTtcbiAgICB9XG4gICAgcGF0aCA9IHBhdGguY29uY2F0KHRoaXMucGF0aCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlcG9ydFBhdGhBc0FycmF5ICE9PSB0cnVlKSB7XG4gICAgICAgIC8vIFNhbml0aXplIHRoZSBwYXRoIHNlZ21lbnRzIChodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxI3NlY3Rpb24tNClcbiAgICAgICAgcGF0aCA9IFwiIy9cIiArIHBhdGgubWFwKGZ1bmN0aW9uIChzZWdtZW50KSB7XG5cbiAgICAgICAgICAgIGlmIChVdGlscy5pc0Fic29sdXRlVXJpKHNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidXJpKFwiICsgc2VnbWVudCArIFwiKVwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VnbWVudC5yZXBsYWNlKC9cXH4vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXC8vZywgXCJ+MVwiKTtcbiAgICAgICAgfSkuam9pbihcIi9cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufTtcblxuUmVwb3J0LnByb3RvdHlwZS5nZXRTY2hlbWFJZCA9IGZ1bmN0aW9uICgpIHtcblxuICAgIGlmICghdGhpcy5yb290U2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgZXJyb3IgcGF0aCBhcyBhbiBhcnJheVxuICAgIHZhciBwYXRoID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50UmVwb3J0KSB7XG4gICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCh0aGlzLnBhcmVudFJlcG9ydC5wYXRoKTtcbiAgICB9XG4gICAgcGF0aCA9IHBhdGguY29uY2F0KHRoaXMucGF0aCk7XG5cbiAgICAvLyB0cnkgdG8gZmluZCBpZCBpbiB0aGUgZXJyb3IgcGF0aFxuICAgIHdoaWxlIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIG9iaiA9IGdldCh0aGlzLnJvb3RTY2hlbWEsIHBhdGgpO1xuICAgICAgICBpZiAob2JqICYmIG9iai5pZCkgeyByZXR1cm4gb2JqLmlkOyB9XG4gICAgICAgIHBhdGgucG9wKCk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGlkIG9mIHRoZSByb290XG4gICAgcmV0dXJuIHRoaXMucm9vdFNjaGVtYS5pZDtcbn07XG5cblJlcG9ydC5wcm90b3R5cGUuaGFzRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3JDb2RlLCBwYXJhbXMpIHtcbiAgICB2YXIgaWR4ID0gdGhpcy5lcnJvcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICBpZiAodGhpcy5lcnJvcnNbaWR4XS5jb2RlID09PSBlcnJvckNvZGUpIHtcbiAgICAgICAgICAgIC8vIGFzc3VtZSBtYXRjaFxuICAgICAgICAgICAgdmFyIG1hdGNoID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHBhcmFtcyB0b29cbiAgICAgICAgICAgIHZhciBpZHgyID0gdGhpcy5lcnJvcnNbaWR4XS5wYXJhbXMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVycm9yc1tpZHhdLnBhcmFtc1tpZHgyXSAhPT0gcGFyYW1zW2lkeDJdKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBtYXRjaCwgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGlmIChtYXRjaCkgeyByZXR1cm4gbWF0Y2g7IH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5SZXBvcnQucHJvdG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24gKGVycm9yQ29kZSwgcGFyYW1zLCBzdWJSZXBvcnRzLCBzY2hlbWFEZXNjcmlwdGlvbikge1xuICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPj0gdGhpcy5yZXBvcnRPcHRpb25zLm1heEVycm9ycykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFlcnJvckNvZGUpIHsgdGhyb3cgbmV3IEVycm9yKFwiTm8gZXJyb3JDb2RlIHBhc3NlZCBpbnRvIGFkZEVycm9yKClcIik7IH1cbiAgICBpZiAoIUVycm9yc1tlcnJvckNvZGVdKSB7IHRocm93IG5ldyBFcnJvcihcIk5vIGVycm9yTWVzc2FnZSBrbm93biBmb3IgY29kZSBcIiArIGVycm9yQ29kZSk7IH1cblxuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCBbXTtcblxuICAgIHZhciBpZHggPSBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBFcnJvcnNbZXJyb3JDb2RlXTtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIHdoYXRJcyA9IFV0aWxzLndoYXRJcyhwYXJhbXNbaWR4XSk7XG4gICAgICAgIHZhciBwYXJhbSA9ICh3aGF0SXMgPT09IFwib2JqZWN0XCIgfHwgd2hhdElzID09PSBcIm51bGxcIikgPyBKU09OLnN0cmluZ2lmeShwYXJhbXNbaWR4XSkgOiBwYXJhbXNbaWR4XTtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLnJlcGxhY2UoXCJ7XCIgKyBpZHggKyBcIn1cIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIHZhciBlcnIgPSB7XG4gICAgICAgIGNvZGU6IGVycm9yQ29kZSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgcGF0aDogdGhpcy5nZXRQYXRoKCksXG4gICAgICAgIHNjaGVtYUlkOiB0aGlzLmdldFNjaGVtYUlkKClcbiAgICB9O1xuXG4gICAgaWYgKHNjaGVtYURlc2NyaXB0aW9uKSB7XG4gICAgICAgIGVyci5kZXNjcmlwdGlvbiA9IHNjaGVtYURlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGlmIChzdWJSZXBvcnRzICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHN1YlJlcG9ydHMpKSB7XG4gICAgICAgICAgICBzdWJSZXBvcnRzID0gW3N1YlJlcG9ydHNdO1xuICAgICAgICB9XG4gICAgICAgIGVyci5pbm5lciA9IFtdO1xuICAgICAgICBpZHggPSBzdWJSZXBvcnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICB2YXIgc3ViUmVwb3J0ID0gc3ViUmVwb3J0c1tpZHhdLFxuICAgICAgICAgICAgICAgIGlkeDIgPSBzdWJSZXBvcnQuZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgyLS0pIHtcbiAgICAgICAgICAgICAgICBlcnIuaW5uZXIucHVzaChzdWJSZXBvcnQuZXJyb3JzW2lkeDJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyLmlubmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZXJyLmlubmVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lcnJvcnMucHVzaChlcnIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZXBvcnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIFJlcG9ydCAgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9SZXBvcnRcIik7XG52YXIgU2NoZW1hQ29tcGlsYXRpb24gICA9IHJlcXVpcmUoXCIuL1NjaGVtYUNvbXBpbGF0aW9uXCIpO1xudmFyIFNjaGVtYVZhbGlkYXRpb24gICAgPSByZXF1aXJlKFwiLi9TY2hlbWFWYWxpZGF0aW9uXCIpO1xudmFyIFV0aWxzICAgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxuZnVuY3Rpb24gZGVjb2RlSlNPTlBvaW50ZXIoc3RyKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1hcHBzYXdnLWpzb24tcG9pbnRlci0wNyNzZWN0aW9uLTNcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvflswLTFdL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBcIn4xXCIgPyBcIi9cIiA6IFwiflwiO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1vdGVQYXRoKHVyaSkge1xuICAgIHZhciBpbyA9IHVyaS5pbmRleE9mKFwiI1wiKTtcbiAgICByZXR1cm4gaW8gPT09IC0xID8gdXJpIDogdXJpLnNsaWNlKDAsIGlvKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVlcnlQYXRoKHVyaSkge1xuICAgIHZhciBpbyA9IHVyaS5pbmRleE9mKFwiI1wiKTtcbiAgICB2YXIgcmVzID0gaW8gPT09IC0xID8gdW5kZWZpbmVkIDogdXJpLnNsaWNlKGlvICsgMSk7XG4gICAgLy8gV0FSTjogZG8gbm90IHNsaWNlIHNsYXNoLCAjLyBtZWFucyB0YWtlIHJvb3QgYW5kIGdvIGRvd24gZnJvbSBpdFxuICAgIC8vIGlmIChyZXMgJiYgcmVzWzBdID09PSBcIi9cIikgeyByZXMgPSByZXMuc2xpY2UoMSk7IH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmaW5kSWQoc2NoZW1hLCBpZCkge1xuICAgIC8vIHByb2Nlc3Mgb25seSBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPT0gXCJvYmplY3RcIiB8fCBzY2hlbWEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vIGlkIG1lYW5zIHJvb3Qgc28gcmV0dXJuIGl0c2VsZlxuICAgIGlmICghaWQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmlkKSB7XG4gICAgICAgIGlmIChzY2hlbWEuaWQgPT09IGlkIHx8IHNjaGVtYS5pZFswXSA9PT0gXCIjXCIgJiYgc2NoZW1hLmlkLnN1YnN0cmluZygxKSA9PT0gaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaWR4LCByZXN1bHQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICBpZHggPSBzY2hlbWEubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRJZChzY2hlbWFbaWR4XSwgaWQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSk7XG4gICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBrID0ga2V5c1tpZHhdO1xuICAgICAgICAgICAgaWYgKGsuaW5kZXhPZihcIl9fJFwiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gZmluZElkKHNjaGVtYVtrXSwgaWQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydHMuY2FjaGVTY2hlbWFCeVVyaSA9IGZ1bmN0aW9uICh1cmksIHNjaGVtYSkge1xuICAgIHZhciByZW1vdGVQYXRoID0gZ2V0UmVtb3RlUGF0aCh1cmkpO1xuICAgIGlmIChyZW1vdGVQYXRoKSB7XG4gICAgICAgIHRoaXMuY2FjaGVbcmVtb3RlUGF0aF0gPSBzY2hlbWE7XG4gICAgfVxufTtcblxuZXhwb3J0cy5yZW1vdmVGcm9tQ2FjaGVCeVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgICB2YXIgcmVtb3RlUGF0aCA9IGdldFJlbW90ZVBhdGgodXJpKTtcbiAgICBpZiAocmVtb3RlUGF0aCkge1xuICAgICAgICBkZWxldGUgdGhpcy5jYWNoZVtyZW1vdGVQYXRoXTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmNoZWNrQ2FjaGVGb3JVcmkgPSBmdW5jdGlvbiAodXJpKSB7XG4gICAgdmFyIHJlbW90ZVBhdGggPSBnZXRSZW1vdGVQYXRoKHVyaSk7XG4gICAgcmV0dXJuIHJlbW90ZVBhdGggPyB0aGlzLmNhY2hlW3JlbW90ZVBhdGhdICE9IG51bGwgOiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuZ2V0U2NoZW1hID0gZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgc2NoZW1hID0gZXhwb3J0cy5nZXRTY2hlbWFCeVJlZmVyZW5jZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NoZW1hID0gZXhwb3J0cy5nZXRTY2hlbWFCeVVyaS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYTtcbn07XG5cbmV4cG9ydHMuZ2V0U2NoZW1hQnlSZWZlcmVuY2UgPSBmdW5jdGlvbiAocmVwb3J0LCBrZXkpIHtcbiAgICB2YXIgaSA9IHRoaXMucmVmZXJlbmNlQ2FjaGUubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVmZXJlbmNlQ2FjaGVbaV1bMF0gPT09IGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlQ2FjaGVbaV1bMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm90IGZvdW5kXG4gICAgdmFyIHNjaGVtYSA9IFV0aWxzLmNsb25lRGVlcChrZXkpO1xuICAgIHRoaXMucmVmZXJlbmNlQ2FjaGUucHVzaChba2V5LCBzY2hlbWFdKTtcbiAgICByZXR1cm4gc2NoZW1hO1xufTtcblxuZXhwb3J0cy5nZXRTY2hlbWFCeVVyaSA9IGZ1bmN0aW9uIChyZXBvcnQsIHVyaSwgcm9vdCkge1xuICAgIHZhciByZW1vdGVQYXRoID0gZ2V0UmVtb3RlUGF0aCh1cmkpLFxuICAgICAgICBxdWVyeVBhdGggPSBnZXRRdWVyeVBhdGgodXJpKSxcbiAgICAgICAgcmVzdWx0ID0gcmVtb3RlUGF0aCA/IHRoaXMuY2FjaGVbcmVtb3RlUGF0aF0gOiByb290O1xuXG4gICAgaWYgKHJlc3VsdCAmJiByZW1vdGVQYXRoKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gYXZvaWQgY29tcGlsaW5nIHNjaGVtYXMgaW4gYSByZWN1cnNpdmUgbG9vcFxuICAgICAgICB2YXIgY29tcGlsZVJlbW90ZSA9IHJlc3VsdCAhPT0gcm9vdDtcbiAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gY29tcGlsZSBhbmQgdmFsaWRhdGUgcmVzb2x2ZWQgc2NoZW1hIChpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkpXG4gICAgICAgIGlmIChjb21waWxlUmVtb3RlKSB7XG5cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2gocmVtb3RlUGF0aCk7XG5cbiAgICAgICAgICAgIHZhciByZW1vdGVSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICBpZiAoU2NoZW1hQ29tcGlsYXRpb24uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHJlbW90ZVJlcG9ydCwgcmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIFNjaGVtYVZhbGlkYXRpb24udmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZW1vdGVSZXBvcnQsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcmVtb3RlUmVwb3J0SXNWYWxpZCA9IHJlbW90ZVJlcG9ydC5pc1ZhbGlkKCk7XG4gICAgICAgICAgICBpZiAoIXJlbW90ZVJlcG9ydElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJSRU1PVEVfTk9UX1ZBTElEXCIsIFt1cmldLCByZW1vdGVSZXBvcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKCFyZW1vdGVSZXBvcnRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHQgJiYgcXVlcnlQYXRoKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IHF1ZXJ5UGF0aC5zcGxpdChcIi9cIik7XG4gICAgICAgIGZvciAodmFyIGlkeCA9IDAsIGxpbSA9IHBhcnRzLmxlbmd0aDsgcmVzdWx0ICYmIGlkeCA8IGxpbTsgaWR4KyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBkZWNvZGVKU09OUG9pbnRlcihwYXJ0c1tpZHhdKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IDApIHsgLy8gaXQncyBhbiBpZFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRJZChyZXN1bHQsIGtleSk7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBpdCdzIGEgcGF0aCBiZWhpbmQgaWRcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnRzLmdldFJlbW90ZVBhdGggPSBnZXRSZW1vdGVQYXRoO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBSZXBvcnQgICAgICA9IHJlcXVpcmUoXCIuL1JlcG9ydFwiKTtcbnZhciBTY2hlbWFDYWNoZSA9IHJlcXVpcmUoXCIuL1NjaGVtYUNhY2hlXCIpO1xudmFyIFV0aWxzICAgICAgID0gcmVxdWlyZShcIi4vVXRpbHNcIik7XG5cbmZ1bmN0aW9uIG1lcmdlUmVmZXJlbmNlKHNjb3BlLCByZWYpIHtcbiAgICBpZiAoVXRpbHMuaXNBYnNvbHV0ZVVyaShyZWYpKSB7XG4gICAgICAgIHJldHVybiByZWY7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZFNjb3BlID0gc2NvcGUuam9pbihcIlwiKSxcbiAgICAgICAgaXNTY29wZUFic29sdXRlID0gVXRpbHMuaXNBYnNvbHV0ZVVyaShqb2luZWRTY29wZSksXG4gICAgICAgIGlzU2NvcGVSZWxhdGl2ZSA9IFV0aWxzLmlzUmVsYXRpdmVVcmkoam9pbmVkU2NvcGUpLFxuICAgICAgICBpc1JlZlJlbGF0aXZlID0gVXRpbHMuaXNSZWxhdGl2ZVVyaShyZWYpLFxuICAgICAgICB0b1JlbW92ZTtcblxuICAgIGlmIChpc1Njb3BlQWJzb2x1dGUgJiYgaXNSZWZSZWxhdGl2ZSkge1xuICAgICAgICB0b1JlbW92ZSA9IGpvaW5lZFNjb3BlLm1hdGNoKC9cXC9bXlxcL10qJC8pO1xuICAgICAgICBpZiAodG9SZW1vdmUpIHtcbiAgICAgICAgICAgIGpvaW5lZFNjb3BlID0gam9pbmVkU2NvcGUuc2xpY2UoMCwgdG9SZW1vdmUuaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTY29wZVJlbGF0aXZlICYmIGlzUmVmUmVsYXRpdmUpIHtcbiAgICAgICAgam9pbmVkU2NvcGUgPSBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvUmVtb3ZlID0gam9pbmVkU2NvcGUubWF0Y2goL1teIy9dKyQvKTtcbiAgICAgICAgaWYgKHRvUmVtb3ZlKSB7XG4gICAgICAgICAgICBqb2luZWRTY29wZSA9IGpvaW5lZFNjb3BlLnNsaWNlKDAsIHRvUmVtb3ZlLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXMgPSBqb2luZWRTY29wZSArIHJlZjtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvIyMvLCBcIiNcIik7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZXMob2JqLCByZXN1bHRzLCBzY29wZSwgcGF0aCkge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuICAgIHNjb3BlID0gc2NvcGUgfHwgW107XG4gICAgcGF0aCA9IHBhdGggfHwgW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NvcGUucHVzaChvYmouaWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqLiRyZWYgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIG9iai5fXyRyZWZSZXNvbHZlZCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgcmVmOiBtZXJnZVJlZmVyZW5jZShzY29wZSwgb2JqLiRyZWYpLFxuICAgICAgICAgICAga2V5OiBcIiRyZWZcIixcbiAgICAgICAgICAgIG9iajogb2JqLFxuICAgICAgICAgICAgcGF0aDogcGF0aC5zbGljZSgwKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmouJHNjaGVtYSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2Ygb2JqLl9fJHNjaGVtYVJlc29sdmVkID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICByZWY6IG1lcmdlUmVmZXJlbmNlKHNjb3BlLCBvYmouJHNjaGVtYSksXG4gICAgICAgICAgICBrZXk6IFwiJHNjaGVtYVwiLFxuICAgICAgICAgICAgb2JqOiBvYmosXG4gICAgICAgICAgICBwYXRoOiBwYXRoLnNsaWNlKDApXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBpZHg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBpZHggPSBvYmoubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlcyhvYmpbaWR4XSwgcmVzdWx0cywgc2NvcGUsIHBhdGgpO1xuICAgICAgICAgICAgcGF0aC5wb3AoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHJlY3Vyc2UgdGhyb3VnaCByZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBvdGhlciB6LXNjaGVtYSBwcm9wc1xuICAgICAgICAgICAgaWYgKGtleXNbaWR4XS5pbmRleE9mKFwiX18kXCIpID09PSAwKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICBwYXRoLnB1c2goa2V5c1tpZHhdKTtcbiAgICAgICAgICAgIGNvbGxlY3RSZWZlcmVuY2VzKG9ialtrZXlzW2lkeF1dLCByZXN1bHRzLCBzY29wZSwgcGF0aCk7XG4gICAgICAgICAgICBwYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NvcGUucG9wKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBjb21waWxlQXJyYXlPZlNjaGVtYXNMb29wID0gZnVuY3Rpb24gKG1haW5SZXBvcnQsIGFycikge1xuICAgIHZhciBpZHggPSBhcnIubGVuZ3RoLFxuICAgICAgICBjb21waWxlZENvdW50ID0gMDtcblxuICAgIHdoaWxlIChpZHgtLSkge1xuXG4gICAgICAgIC8vIHRyeSB0byBjb21waWxlIGVhY2ggc2NoZW1hIHNlcGFyYXRlbHlcbiAgICAgICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQobWFpblJlcG9ydCk7XG4gICAgICAgIHZhciBpc1ZhbGlkID0gZXhwb3J0cy5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBhcnJbaWR4XSk7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7IGNvbXBpbGVkQ291bnQrKzsgfVxuXG4gICAgICAgIC8vIGNvcHkgZXJyb3JzIHRvIHJlcG9ydFxuICAgICAgICBtYWluUmVwb3J0LmVycm9ycyA9IG1haW5SZXBvcnQuZXJyb3JzLmNvbmNhdChyZXBvcnQuZXJyb3JzKTtcblxuICAgIH1cblxuICAgIHJldHVybiBjb21waWxlZENvdW50O1xufTtcblxuZnVuY3Rpb24gZmluZElkKGFyciwgaWQpIHtcbiAgICB2YXIgaWR4ID0gYXJyLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgaWYgKGFycltpZHhdLmlkID09PSBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGFycltpZHhdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG52YXIgY29tcGlsZUFycmF5T2ZTY2hlbWFzID0gZnVuY3Rpb24gKHJlcG9ydCwgYXJyKSB7XG5cbiAgICB2YXIgY29tcGlsZWQgPSAwLFxuICAgICAgICBsYXN0TG9vcENvbXBpbGVkO1xuXG4gICAgZG8ge1xuXG4gICAgICAgIC8vIHJlbW92ZSBhbGwgVU5SRVNPTFZBQkxFX1JFRkVSRU5DRSBlcnJvcnMgYmVmb3JlIGNvbXBpbGluZyBhcnJheSBhZ2FpblxuICAgICAgICB2YXIgaWR4ID0gcmVwb3J0LmVycm9ycy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC5lcnJvcnNbaWR4XS5jb2RlID09PSBcIlVOUkVTT0xWQUJMRV9SRUZFUkVOQ0VcIikge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5lcnJvcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZW1lbWJlciBob3cgbWFueSB3ZXJlIGNvbXBpbGVkIGluIHRoZSBsYXN0IGxvb3BcbiAgICAgICAgbGFzdExvb3BDb21waWxlZCA9IGNvbXBpbGVkO1xuXG4gICAgICAgIC8vIGNvdW50IGhvdyBtYW55IGFyZSBjb21waWxlZCBub3dcbiAgICAgICAgY29tcGlsZWQgPSBjb21waWxlQXJyYXlPZlNjaGVtYXNMb29wLmNhbGwodGhpcywgcmVwb3J0LCBhcnIpO1xuXG4gICAgICAgIC8vIGZpeCBfXyRtaXNzaW5nUmVmZXJlbmNlcyBpZiBwb3NzaWJsZVxuICAgICAgICBpZHggPSBhcnIubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBzY2ggPSBhcnJbaWR4XTtcbiAgICAgICAgICAgIGlmIChzY2guX18kbWlzc2luZ1JlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4MiA9IHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVmT2JqID0gc2NoLl9fJG1pc3NpbmdSZWZlcmVuY2VzW2lkeDJdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBmaW5kSWQoYXJyLCByZWZPYmoucmVmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIG1pZ2h0IGNyZWF0ZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZPYmoub2JqW1wiX19cIiArIHJlZk9iai5rZXkgKyBcIlJlc29sdmVkXCJdID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHJlc29sdmVkIG5vdyBzbyBkZWxldGUgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5zcGxpY2UoaWR4MiwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBrZWVwIHJlcGVhdGluZyBpZiBub3QgYWxsIGNvbXBpbGVkIGFuZCBhdCBsZWFzdCBvbmUgbW9yZSB3YXMgY29tcGlsZWQgaW4gdGhlIGxhc3QgbG9vcFxuICAgIH0gd2hpbGUgKGNvbXBpbGVkICE9PSBhcnIubGVuZ3RoICYmIGNvbXBpbGVkICE9PSBsYXN0TG9vcENvbXBpbGVkKTtcblxuICAgIHJldHVybiByZXBvcnQuaXNWYWxpZCgpO1xuXG59O1xuXG5leHBvcnRzLmNvbXBpbGVTY2hlbWEgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcblxuICAgIHJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2UgPSBcIlNDSEVNQV9DT01QSUxBVElPTl9GQUlMRURcIjtcblxuICAgIC8vIGlmIHNjaGVtYSBpcyBhIHN0cmluZywgYXNzdW1lIGl0J3MgYSB1cmlcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgbG9hZGVkU2NoZW1hID0gU2NoZW1hQ2FjaGUuZ2V0U2NoZW1hQnlVcmkuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgICAgIGlmICghbG9hZGVkU2NoZW1hKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJTQ0hFTUFfTk9UX1JFQUNIQUJMRVwiLCBbc2NoZW1hXSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hID0gbG9hZGVkU2NoZW1hO1xuICAgIH1cblxuICAgIC8vIGlmIHNjaGVtYSBpcyBhbiBhcnJheSwgYXNzdW1lIGl0J3MgYW4gYXJyYXkgb2Ygc2NoZW1hc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBpbGVBcnJheU9mU2NoZW1hcy5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGFuIGlkIHRoYW4gaXQgc2hvdWxkIGJlIGNhY2hlZCBhbHJlYWR5IChpZiB0aGlzIGluc3RhbmNlIGhhcyBjb21waWxlZCBpdClcbiAgICBpZiAoc2NoZW1hLl9fJGNvbXBpbGVkICYmIHNjaGVtYS5pZCAmJiBTY2hlbWFDYWNoZS5jaGVja0NhY2hlRm9yVXJpLmNhbGwodGhpcywgc2NoZW1hLmlkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2NoZW1hLl9fJGNvbXBpbGVkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCByZS1jb21waWxlIHNjaGVtYXNcbiAgICBpZiAoc2NoZW1hLl9fJGNvbXBpbGVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaWQgJiYgdHlwZW9mIHNjaGVtYS5pZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBhZGQgdGhpcyB0byBvdXIgc2NoZW1hQ2FjaGUgKGJlZm9yZSBjb21waWxhdGlvbiBpbiBjYXNlIHdlIGhhdmUgcmVmZXJlbmNlcyBpbmNsdWRpbmcgaWQpXG4gICAgICAgIFNjaGVtYUNhY2hlLmNhY2hlU2NoZW1hQnlVcmkuY2FsbCh0aGlzLCBzY2hlbWEuaWQsIHNjaGVtYSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSwgc28gd2UgbmVlZCB0byByZW1lbWJlciBvdXIgcm9vdFxuICAgIHZhciBpc1Jvb3QgPSBmYWxzZTtcbiAgICBpZiAoIXJlcG9ydC5yb290U2NoZW1hKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBpc1Jvb3QgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGRlbGV0ZSBhbGwgX18kbWlzc2luZ1JlZmVyZW5jZXMgZnJvbSBwcmV2aW91cyBjb21waWxhdGlvbiBhdHRlbXB0c1xuICAgIHZhciBpc1ZhbGlkRXhjZXB0UmVmZXJlbmNlcyA9IHJlcG9ydC5pc1ZhbGlkKCk7XG4gICAgZGVsZXRlIHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcztcblxuICAgIC8vIGNvbGxlY3QgYWxsIHJlZmVyZW5jZXMgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkIC0gJHJlZiBhbmQgJHNjaGVtYVxuICAgIHZhciByZWZzID0gY29sbGVjdFJlZmVyZW5jZXMuY2FsbCh0aGlzLCBzY2hlbWEpLFxuICAgICAgICBpZHggPSByZWZzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgLy8gcmVzb2x2ZSBhbGwgdGhlIGNvbGxlY3RlZCByZWZlcmVuY2VzIGludG8gX194eHhSZXNvbHZlZCBwb2ludGVyXG4gICAgICAgIHZhciByZWZPYmogPSByZWZzW2lkeF07XG4gICAgICAgIHZhciByZXNwb25zZSA9IFNjaGVtYUNhY2hlLmdldFNjaGVtYUJ5VXJpLmNhbGwodGhpcywgcmVwb3J0LCByZWZPYmoucmVmLCBzY2hlbWEpO1xuXG4gICAgICAgIC8vIHdlIGNhbiB0cnkgdG8gdXNlIGN1c3RvbSBzY2hlbWFSZWFkZXIgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHZhciBzY2hlbWFSZWFkZXIgPSB0aGlzLmdldFNjaGVtYVJlYWRlcigpO1xuICAgICAgICAgICAgaWYgKHNjaGVtYVJlYWRlcikge1xuICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwcG9zZWQgdG8gcmV0dXJuIGEgdmFsaWQgc2NoZW1hXG4gICAgICAgICAgICAgICAgdmFyIHMgPSBzY2hlbWFSZWFkZXIocmVmT2JqLnJlZik7XG4gICAgICAgICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgbmVlZHMgdG8gaGF2ZSB0aGUgaWRcbiAgICAgICAgICAgICAgICAgICAgcy5pZCA9IHJlZk9iai5yZWY7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBjb21waWxlIHRoZSBzY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJlcG9ydCA9IG5ldyBSZXBvcnQocmVwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHBvcnRzLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzdWJyZXBvcnQsIHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IGVycm9ycyB0byByZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5lcnJvcnMgPSByZXBvcnQuZXJyb3JzLmNvbmNhdChzdWJyZXBvcnQuZXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gU2NoZW1hQ2FjaGUuZ2V0U2NoZW1hQnlVcmkuY2FsbCh0aGlzLCByZXBvcnQsIHJlZk9iai5yZWYsIHNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgIHZhciBoYXNOb3RWYWxpZCA9IHJlcG9ydC5oYXNFcnJvcihcIlJFTU9URV9OT1RfVkFMSURcIiwgW3JlZk9iai5yZWZdKTtcbiAgICAgICAgICAgIHZhciBpc0Fic29sdXRlID0gVXRpbHMuaXNBYnNvbHV0ZVVyaShyZWZPYmoucmVmKTtcbiAgICAgICAgICAgIHZhciBpc0Rvd25sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBpZ25vcmVVbnJlc29sdmFibGVSZW1vdGVzID0gdGhpcy5vcHRpb25zLmlnbm9yZVVucmVzb2x2YWJsZVJlZmVyZW5jZXMgPT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpc0Fic29sdXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IGFkZCBVTlJFU09MVkFCTEVfUkVGRVJFTkNFIGZvciBzY2hlbWFzIHdlIGFscmVhZHkgaGF2ZSBkb3dubG9hZGVkXG4gICAgICAgICAgICAgICAgLy8gYW5kIHNldCB0aHJvdWdoIHNldFJlbW90ZVJlZmVyZW5jZSBtZXRob2RcbiAgICAgICAgICAgICAgICBpc0Rvd25sb2FkZWQgPSBTY2hlbWFDYWNoZS5jaGVja0NhY2hlRm9yVXJpLmNhbGwodGhpcywgcmVmT2JqLnJlZik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNOb3RWYWxpZCkge1xuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFzIFJFTU9URV9OT1RfVkFMSUQgZXJyb3IgZm9yIHRoaXMgb25lXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlnbm9yZVVucmVzb2x2YWJsZVJlbW90ZXMgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVVucmVzb2x2YWJsZVJlbW90ZXMgaXMgb24gYW5kIHJlbW90ZSBpc0Fic29sdXRlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRG93bmxvYWRlZCkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW90ZSBpcyBkb3dubG9hZGVkLCBzbyBubyBVTlJFU09MVkFCTEVfUkVGRVJFTkNFXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlcG9ydC5wYXRoLCByZWZPYmoucGF0aCk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiVU5SRVNPTFZBQkxFX1JFRkVSRU5DRVwiLCBbcmVmT2JqLnJlZl0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoID0gcmVwb3J0LnBhdGguc2xpY2UoMCwgLXJlZk9iai5wYXRoLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAvLyBwdXNibGlzaCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgb3V0XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRFeGNlcHRSZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcyA9IHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLl9fJG1pc3NpbmdSZWZlcmVuY2VzLnB1c2gocmVmT2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcyBtaWdodCBjcmVhdGUgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgICByZWZPYmoub2JqW1wiX19cIiArIHJlZk9iai5rZXkgKyBcIlJlc29sdmVkXCJdID0gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgdmFyIGlzVmFsaWQgPSByZXBvcnQuaXNWYWxpZCgpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIHNjaGVtYS5fXyRjb21waWxlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNjaGVtYS5pZCAmJiB0eXBlb2Ygc2NoZW1hLmlkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhpcyBzY2hlbWEgZnJvbSBzY2hlbWFDYWNoZSBiZWNhdXNlIGl0IGZhaWxlZCB0byBjb21waWxlXG4gICAgICAgICAgICBTY2hlbWFDYWNoZS5yZW1vdmVGcm9tQ2FjaGVCeVVyaS5jYWxsKHRoaXMsIHNjaGVtYS5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3ZSBkb24ndCBuZWVkIHRoZSByb290IHBvaW50ZXIgYW55bW9yZVxuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgcmVwb3J0LnJvb3RTY2hlbWEgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWQ7XG5cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEZvcm1hdFZhbGlkYXRvcnMgPSByZXF1aXJlKFwiLi9Gb3JtYXRWYWxpZGF0b3JzXCIpLFxuICAgIEpzb25WYWxpZGF0aW9uICAgPSByZXF1aXJlKFwiLi9Kc29uVmFsaWRhdGlvblwiKSxcbiAgICBSZXBvcnQgICAgICAgICAgID0gcmVxdWlyZShcIi4vUmVwb3J0XCIpLFxuICAgIFV0aWxzICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxudmFyIFNjaGVtYVZhbGlkYXRvcnMgPSB7XG4gICAgJHJlZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtYXBwc2F3Zy1qc29uLXBvaW50ZXItMDdcbiAgICAgICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcGJyeWFuLXp5cC1qc29uLXJlZi0wM1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS4kcmVmICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiJHJlZlwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgICRzY2hlbWE6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS1jb3JlLmh0bWwjcmZjLnNlY3Rpb24uNlxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS4kc2NoZW1hICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiJHNjaGVtYVwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG11bHRpcGxlT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjEuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tdWx0aXBsZU9mICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibXVsdGlwbGVPZlwiLCBcIm51bWJlclwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm11bHRpcGxlT2YgPD0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcIm11bHRpcGxlT2ZcIiwgXCJzdHJpY3RseSBncmVhdGVyIHRoYW4gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1heGltdW06IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjIuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhpbXVtICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWF4aW11bVwiLCBcIm51bWJlclwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGV4Y2x1c2l2ZU1heGltdW06IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjIuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImV4Y2x1c2l2ZU1heGltdW1cIiwgXCJib29sZWFuXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4aW11bSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX0RFUEVOREVOQ1lcIiwgW1wiZXhjbHVzaXZlTWF4aW11bVwiLCBcIm1heGltdW1cIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5pbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWluaW11bSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1pbmltdW1cIiwgXCJudW1iZXJcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBleGNsdXNpdmVNaW5pbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJleGNsdXNpdmVNaW5pbXVtXCIsIFwiYm9vbGVhblwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm1pbmltdW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9ERVBFTkRFTkNZXCIsIFtcImV4Y2x1c2l2ZU1pbmltdW1cIiwgXCJtaW5pbXVtXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4TGVuZ3RoOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4xLjFcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhzY2hlbWEubWF4TGVuZ3RoKSAhPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJtYXhMZW5ndGhcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcIm1heExlbmd0aFwiLCBcImdyZWF0ZXIgdGhhbiwgb3IgZXF1YWwgdG8gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1pbkxlbmd0aDogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjIuMi4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pbkxlbmd0aCkgIT09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWluTGVuZ3RoXCIsIFwiaW50ZWdlclwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm1pbkxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5MZW5ndGhcIiwgXCJncmVhdGVyIHRoYW4sIG9yIGVxdWFsIHRvIDBcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEucGF0dGVybiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInBhdHRlcm5cIiwgXCJzdHJpbmdcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBSZWdFeHAoc2NoZW1hLnBhdHRlcm4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfUEFUVEVSTlwiLCBbXCJwYXR0ZXJuXCIsIHNjaGVtYS5wYXR0ZXJuXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMS4xXG4gICAgICAgIHZhciB0eXBlID0gVXRpbHMud2hhdElzKHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgICBpZiAodHlwZSAhPT0gXCJib29sZWFuXCIgJiYgdHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImFkZGl0aW9uYWxJdGVtc1wiLCBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFkZGl0aW9uYWxJdGVtc1wiKTtcbiAgICAgICAgICAgIGV4cG9ydHMudmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4xLjFcbiAgICAgICAgdmFyIHR5cGUgPSBVdGlscy53aGF0SXMoc2NoZW1hLml0ZW1zKTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcIml0ZW1zXCIpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLml0ZW1zKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5pdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwiaXRlbXNcIik7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLml0ZW1zW2lkeF0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIml0ZW1zXCIsIFtcImFycmF5XCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjdXN0b20gLSBzdHJpY3QgbW9kZVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlQWRkaXRpb25hbCA9PT0gdHJ1ZSAmJiBzY2hlbWEuYWRkaXRpb25hbEl0ZW1zID09PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiYWRkaXRpb25hbEl0ZW1zXCJdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjdXN0b21lIC0gYXNzdW1lIGRlZmluZWQgZmFsc2UgbW9kZVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFzc3VtZUFkZGl0aW9uYWwgJiYgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gdW5kZWZpbmVkICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtYXhJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMi4xXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWF4SXRlbXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4SXRlbXMgPCAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wibWF4SXRlbXNcIiwgXCJncmVhdGVyIHRoYW4sIG9yIGVxdWFsIHRvIDBcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5JdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMy4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pbkl0ZW1zKSAhPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJtaW5JdGVtc1wiLCBcImludGVnZXJcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5taW5JdGVtcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5JdGVtc1wiLCBcImdyZWF0ZXIgdGhhbiwgb3IgZXF1YWwgdG8gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHVuaXF1ZUl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy40LjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEudW5pcXVlSXRlbXMgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1widW5pcXVlSXRlbXNcIiwgXCJib29sZWFuXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4UHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMS4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1heFByb3BlcnRpZXMpICE9PSBcImludGVnZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1heFByb3BlcnRpZXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4UHJvcGVydGllcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtYXhQcm9wZXJ0aWVzXCIsIFwiZ3JlYXRlciB0aGFuLCBvciBlcXVhbCB0byAwXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWluUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMi4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pblByb3BlcnRpZXMpICE9PSBcImludGVnZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1pblByb3BlcnRpZXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWluUHJvcGVydGllcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5Qcm9wZXJ0aWVzXCIsIFwiZ3JlYXRlciB0aGFuLCBvciBlcXVhbCB0byAwXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjMuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5yZXF1aXJlZCkgIT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInJlcXVpcmVkXCIsIFwiYXJyYXlcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5yZXF1aXJlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJyZXF1aXJlZFwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5yZXF1aXJlZC5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5yZXF1aXJlZFtpZHhdICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVkFMVUVfVFlQRVwiLCBbXCJyZXF1aXJlZFwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wicmVxdWlyZWRcIiwgXCJhbiBhcnJheSB3aXRoIHVuaXF1ZSBpdGVtc1wiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC40LjFcbiAgICAgICAgdmFyIHR5cGUgPSBVdGlscy53aGF0SXMoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKHR5cGUgIT09IFwiYm9vbGVhblwiICYmIHR5cGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLCBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC40LjFcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhzY2hlbWEucHJvcGVydGllcykgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJwcm9wZXJ0aWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpLFxuICAgICAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XSxcbiAgICAgICAgICAgICAgICB2YWwgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGtleSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCB2YWwpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGN1c3RvbSAtIHN0cmljdCBtb2RlXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VBZGRpdGlvbmFsID09PSB0cnVlICYmIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGN1c3RvbWUgLSBhc3N1bWUgZGVmaW5lZCBmYWxzZSBtb2RlXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXNzdW1lQWRkaXRpb25hbCAmJiBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3VzdG9tIC0gZm9yY2VQcm9wZXJ0aWVzXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VQcm9wZXJ0aWVzID09PSB0cnVlICYmIGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJDVVNUT01fTU9ERV9GT1JDRV9QUk9QRVJUSUVTXCIsIFtcInByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuNC4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICAgICAgdmFsID0gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFJlZ0V4cChrZXkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfUEFUVEVSTlwiLCBbXCJwYXR0ZXJuUHJvcGVydGllc1wiLCBrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJwYXR0ZXJuUHJvcGVydGllc1wiKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goa2V5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgdmFsKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjdXN0b20gLSBmb3JjZVByb3BlcnRpZXNcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgPT09IHRydWUgJiYga2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIkNVU1RPTV9NT0RFX0ZPUkNFX1BST1BFUlRJRVNcIiwgW1wicGF0dGVyblByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjUuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5kZXBlbmRlbmNpZXMpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyksXG4gICAgICAgICAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgc2NoZW1hS2V5ID0ga2V5c1tpZHhdLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFEZXBlbmRlbmN5ID0gc2NoZW1hLmRlcGVuZGVuY2llc1tzY2hlbWFLZXldLFxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gVXRpbHMud2hhdElzKHNjaGVtYURlcGVuZGVuY3kpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImRlcGVuZGVuY2llc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChzY2hlbWFLZXkpO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWFEZXBlbmRlbmN5KTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHgyID0gc2NoZW1hRGVwZW5kZW5jeS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZHgyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwibm90IGVtcHR5IGFycmF5XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaWR4Mi0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYURlcGVuZGVuY3lbaWR4Ml0gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1ZBTFVFX1RZUEVcIiwgW1wiZGVwZW5kZW5zaWNlc1wiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hRGVwZW5kZW5jeSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwiYW4gYXJyYXkgd2l0aCB1bmlxdWUgaXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9WQUxVRV9UWVBFXCIsIFtcImRlcGVuZGVuY2llc1wiLCBcIm9iamVjdCBvciBhcnJheVwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBlbnVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS4xLjFcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLmVudW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImVudW1cIiwgXCJhcnJheVwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmVudW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZW51bVwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLmVudW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcImVudW1cIiwgXCJhbiBhcnJheSB3aXRoIHVuaXF1ZSBlbGVtZW50c1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHR5cGU6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjIuMVxuICAgICAgICB2YXIgcHJpbWl0aXZlVHlwZXMgPSBbXCJhcnJheVwiLCBcImJvb2xlYW5cIiwgXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCIsIFwibnVsbFwiLCBcIm9iamVjdFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgIHByaW1pdGl2ZVR5cGVTdHIgPSBwcmltaXRpdmVUeXBlcy5qb2luKFwiLFwiKSxcbiAgICAgICAgICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNjaGVtYS50eXBlKTtcblxuICAgICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS50eXBlLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVUeXBlcy5pbmRleE9mKHNjaGVtYS50eXBlW2lkeF0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1widHlwZVwiLCBwcmltaXRpdmVUeXBlU3RyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLnR5cGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJ0eXBlXCIsIFwiYW4gb2JqZWN0IHdpdGggdW5pcXVlIHByb3BlcnRpZXNcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEudHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVR5cGVzLmluZGV4T2Yoc2NoZW1hLnR5cGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0eXBlXCIsIHByaW1pdGl2ZVR5cGVTdHJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0eXBlXCIsIFtcInN0cmluZ1wiLCBcImFycmF5XCJdXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vRW1wdHlTdHJpbmdzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgaXNBcnJheSAmJiBzY2hlbWEudHlwZS5pbmRleE9mKFwic3RyaW5nXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluTGVuZ3RoID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmVudW0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEubWluTGVuZ3RoID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub0VtcHR5QXJyYXlzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwiYXJyYXlcIiB8fCBpc0FycmF5ICYmIHNjaGVtYS50eXBlLmluZGV4T2YoXCJhcnJheVwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm1pbkl0ZW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLm1pbkl0ZW1zID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJvYmplY3RcIiB8fCBpc0FycmF5ICYmIHNjaGVtYS50eXBlLmluZGV4T2YoXCJvYmplY3RcIikgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgJiYgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcInByb3BlcnRpZXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuaXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiaXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWluSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluSXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWluSXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWF4SXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWF4SXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWF4SXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWluTGVuZ3RoID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgaXNBcnJheSAmJiBzY2hlbWEudHlwZS5pbmRleE9mKFwic3RyaW5nXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluTGVuZ3RoID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZvcm1hdCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5lbnVtID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLnBhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWluTGVuZ3RoXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZU1heExlbmd0aCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcInN0cmluZ1wiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm1heExlbmd0aCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5mb3JtYXQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZW51bSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5wYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcIm1heExlbmd0aFwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhbGxPZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMy4xXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbGxPZikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiYWxsT2ZcIiwgXCJhcnJheVwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmFsbE9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcImFsbE9mXCIsIFwiYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudFwiXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gc2NoZW1hLmFsbE9mLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJhbGxPZlwiKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuYWxsT2ZbaWR4XSk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFueU9mOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS40LjFcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLmFueU9mKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJhbnlPZlwiLCBcImFycmF5XCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEuYW55T2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiYW55T2ZcIiwgXCJhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBzY2hlbWEuYW55T2YubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFueU9mXCIpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goaWR4LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYS5hbnlPZltpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgb25lT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjUuMVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEub25lT2YpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm9uZU9mXCIsIFwiYXJyYXlcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5vbmVPZi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJvbmVPZlwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5vbmVPZi5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwib25lT2ZcIik7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLm9uZU9mW2lkeF0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjYuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5ub3QpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibm90XCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJub3RcIik7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEubm90KTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZWZpbml0aW9uczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNy4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLmRlZmluaXRpb25zKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImRlZmluaXRpb25zXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlZmluaXRpb25zKSxcbiAgICAgICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHNjaGVtYS5kZWZpbml0aW9uc1trZXldO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJkZWZpbml0aW9uc1wiKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgdmFsKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZm9ybWF0OiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuZm9ybWF0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiZm9ybWF0XCIsIFwic3RyaW5nXCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChGb3JtYXRWYWxpZGF0b3JzW3NjaGVtYS5mb3JtYXRdID09PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLmlnbm9yZVVua25vd25Gb3JtYXRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiVU5LTk9XTl9GT1JNQVRcIiwgW3NjaGVtYS5mb3JtYXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgaWQ6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS1jb3JlLmh0bWwjcmZjLnNlY3Rpb24uNy4yXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmlkICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiaWRcIiwgXCJzdHJpbmdcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0aXRsZTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi42LjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEudGl0bGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0aXRsZVwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjYuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5kZXNjcmlwdGlvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImRlc2NyaXB0aW9uXCIsIFwic3RyaW5nXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uICgvKiByZXBvcnQsIHNjaGVtYSAqLykge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNi4yXG4gICAgICAgIC8vIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgcGxhY2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIGtleXdvcmQuXG4gICAgfVxufTtcblxudmFyIHZhbGlkYXRlQXJyYXlPZlNjaGVtYXMgPSBmdW5jdGlvbiAocmVwb3J0LCBhcnIpIHtcbiAgICB2YXIgaWR4ID0gYXJyLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgYXJyW2lkeF0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVwb3J0LmlzVmFsaWQoKTtcbn07XG5cbmV4cG9ydHMudmFsaWRhdGVTY2hlbWEgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcblxuICAgIHJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2UgPSBcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRFwiO1xuXG4gICAgLy8gaWYgc2NoZW1hIGlzIGFuIGFycmF5LCBhc3N1bWUgaXQncyBhbiBhcnJheSBvZiBzY2hlbWFzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVBcnJheU9mU2NoZW1hcy5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3QgcmV2YWxpZGF0ZSBzY2hlbWEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBvbmNlXG4gICAgaWYgKHNjaGVtYS5fXyR2YWxpZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgJHNjaGVtYSBpcyBwcmVzZW50LCB0aGlzIHNjaGVtYSBzaG91bGQgdmFsaWRhdGUgYWdhaW5zdCB0aGF0ICRzY2hlbWFcbiAgICB2YXIgaGFzUGFyZW50U2NoZW1hID0gc2NoZW1hLiRzY2hlbWEgJiYgc2NoZW1hLmlkICE9PSBzY2hlbWEuJHNjaGVtYTtcbiAgICBpZiAoaGFzUGFyZW50U2NoZW1hKSB7XG4gICAgICAgIGlmIChzY2hlbWEuX18kc2NoZW1hUmVzb2x2ZWQgJiYgc2NoZW1hLl9fJHNjaGVtYVJlc29sdmVkICE9PSBzY2hlbWEpIHtcbiAgICAgICAgICAgIHZhciBzdWJSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHN1YlJlcG9ydCwgc2NoZW1hLl9fJHNjaGVtYVJlc29sdmVkLCBzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKHZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlBBUkVOVF9TQ0hFTUFfVkFMSURBVElPTl9GQUlMRURcIiwgbnVsbCwgc3ViUmVwb3J0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlVW5yZXNvbHZhYmxlUmVmZXJlbmNlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlJFRl9VTlJFU09MVkVEXCIsIFtzY2hlbWEuJHNjaGVtYV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub1R5cGVsZXNzID09PSB0cnVlKSB7XG4gICAgICAgIC8vIGlzc3VlICMzNiAtIGluaGVyaXQgdHlwZSB0byBhbnlPZiwgb25lT2YsIGFsbE9mIGlmIG5vVHlwZWxlc3MgaXMgZGVmaW5lZFxuICAgICAgICBpZiAoc2NoZW1hLnR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIHNjaGVtYXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbnlPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5hbnlPZik7IH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5vbmVPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5vbmVPZik7IH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbGxPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5hbGxPZik7IH1cbiAgICAgICAgICAgIHNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbiAoc2NoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY2gudHlwZSkgeyBzY2gudHlwZSA9IHNjaGVtYS50eXBlOyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmQgaXNzdWUgIzM2XG4gICAgICAgIGlmIChzY2hlbWEuZW51bSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzY2hlbWEuYW55T2YgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2NoZW1hLm9uZU9mID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNjaGVtYS5ub3QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2NoZW1hLiRyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcInR5cGVcIl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLFxuICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiX19cIikgPT09IDApIHsgY29udGludWU7IH1cbiAgICAgICAgaWYgKFNjaGVtYVZhbGlkYXRvcnNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBTY2hlbWFWYWxpZGF0b3JzW2tleV0uY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1BhcmVudFNjaGVtYSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub0V4dHJhS2V5d29yZHMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VORVhQRUNURURcIiwgW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpY0NoZWNrID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChzY2hlbWEuZW51bSkge1xuICAgICAgICAgICAgLy8gYnJlYWsgcmVjdXJzaW9uXG4gICAgICAgICAgICB2YXIgdG1wU2NoZW1hID0gVXRpbHMuY2xvbmUoc2NoZW1hKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0bXBTY2hlbWEuZW51bTtcbiAgICAgICAgICAgIGRlbGV0ZSB0bXBTY2hlbWEuZGVmYXVsdDtcblxuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImVudW1cIik7XG4gICAgICAgICAgICBpZHggPSBzY2hlbWEuZW51bS5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgdG1wU2NoZW1hLCBzY2hlbWEuZW51bVtpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5kZWZhdWx0KSB7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgICAgIEpzb25WYWxpZGF0aW9uLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIHNjaGVtYS5kZWZhdWx0KTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzVmFsaWQgPSByZXBvcnQuaXNWYWxpZCgpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIHNjaGVtYS5fXyR2YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaXNWYWxpZDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5pc0Fic29sdXRlVXJpID0gZnVuY3Rpb24gKHVyaSkge1xuICAgIHJldHVybiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJpKTtcbn07XG5cbmV4cG9ydHMuaXNSZWxhdGl2ZVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgICAvLyByZWxhdGl2ZSBVUklzIHRoYXQgZW5kIHdpdGggYSBoYXNoIHNpZ24sIGlzc3VlICM1NlxuICAgIHJldHVybiAvLisjLy50ZXN0KHVyaSk7XG59O1xuXG5leHBvcnRzLndoYXRJcyA9IGZ1bmN0aW9uICh3aGF0KSB7XG5cbiAgICB2YXIgdG8gPSB0eXBlb2Ygd2hhdDtcblxuICAgIGlmICh0byA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAod2hhdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoYXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm9iamVjdFwiOyAvLyB0eXBlb2Ygd2hhdCA9PT0gJ29iamVjdCcgJiYgd2hhdCA9PT0gT2JqZWN0KHdoYXQpICYmICFBcnJheS5pc0FycmF5KHdoYXQpO1xuICAgIH1cblxuICAgIGlmICh0byA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHdoYXQpKSB7XG4gICAgICAgICAgICBpZiAod2hhdCAlIDEgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbnRlZ2VyXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4od2hhdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm5vdC1hLW51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcInVua25vd24tbnVtYmVyXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvOyAvLyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgZnVuY3Rpb25cblxufTtcblxuZXhwb3J0cy5hcmVFcXVhbCA9IGZ1bmN0aW9uIGFyZUVxdWFsKGpzb24xLCBqc29uMikge1xuICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLWNvcmUuaHRtbCNyZmMuc2VjdGlvbi4zLjZcblxuICAgIC8vIFR3byBKU09OIHZhbHVlcyBhcmUgc2FpZCB0byBiZSBlcXVhbCBpZiBhbmQgb25seSBpZjpcbiAgICAvLyBib3RoIGFyZSBudWxsczsgb3JcbiAgICAvLyBib3RoIGFyZSBib29sZWFucywgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWU7IG9yXG4gICAgLy8gYm90aCBhcmUgc3RyaW5ncywgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWU7IG9yXG4gICAgLy8gYm90aCBhcmUgbnVtYmVycywgYW5kIGhhdmUgdGhlIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlOyBvclxuICAgIGlmIChqc29uMSA9PT0ganNvbjIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGksIGxlbjtcblxuICAgIC8vIGJvdGggYXJlIGFycmF5cywgYW5kOlxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24xKSAmJiBBcnJheS5pc0FycmF5KGpzb24yKSkge1xuICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtczsgYW5kXG4gICAgICAgIGlmIChqc29uMS5sZW5ndGggIT09IGpzb24yLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGl0ZW1zIGF0IHRoZSBzYW1lIGluZGV4IGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uOyBvclxuICAgICAgICBsZW4gPSBqc29uMS5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKCFhcmVFcXVhbChqc29uMVtpXSwganNvbjJbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGJvdGggYXJlIG9iamVjdHMsIGFuZDpcbiAgICBpZiAoZXhwb3J0cy53aGF0SXMoanNvbjEpID09PSBcIm9iamVjdFwiICYmIGV4cG9ydHMud2hhdElzKGpzb24yKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0eSBuYW1lczsgYW5kXG4gICAgICAgIHZhciBrZXlzMSA9IE9iamVjdC5rZXlzKGpzb24xKTtcbiAgICAgICAgdmFyIGtleXMyID0gT2JqZWN0LmtleXMoanNvbjIpO1xuICAgICAgICBpZiAoIWFyZUVxdWFsKGtleXMxLCBrZXlzMikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB2YWx1ZXMgZm9yIGEgc2FtZSBwcm9wZXJ0eSBuYW1lIGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLlxuICAgICAgICBsZW4gPSBrZXlzMS5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKCFhcmVFcXVhbChqc29uMVtrZXlzMVtpXV0sIGpzb24yW2tleXMxW2ldXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5pc1VuaXF1ZUFycmF5ID0gZnVuY3Rpb24gKGFyciwgaW5kZXhlcykge1xuICAgIHZhciBpLCBqLCBsID0gYXJyLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoZXhwb3J0cy5hcmVFcXVhbChhcnJbaV0sIGFycltqXSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhlcykgeyBpbmRleGVzLnB1c2goaSwgaik7IH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnRzLmRpZmZlcmVuY2UgPSBmdW5jdGlvbiAoYmlnU2V0LCBzdWJTZXQpIHtcbiAgICB2YXIgYXJyID0gW10sXG4gICAgICAgIGlkeCA9IGJpZ1NldC5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIGlmIChzdWJTZXQuaW5kZXhPZihiaWdTZXRbaWR4XSkgPT09IC0xKSB7XG4gICAgICAgICAgICBhcnIucHVzaChiaWdTZXRbaWR4XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn07XG5cbi8vIE5PVCBhIGRlZXAgdmVyc2lvbiBvZiBjbG9uZVxuZXhwb3J0cy5jbG9uZSA9IGZ1bmN0aW9uIChzcmMpIHtcbiAgICBpZiAodHlwZW9mIHNyYyA9PT0gXCJ1bmRlZmluZWRcIikgeyByZXR1cm4gdm9pZCAwOyB9XG4gICAgaWYgKHR5cGVvZiBzcmMgIT09IFwib2JqZWN0XCIgfHwgc3JjID09PSBudWxsKSB7IHJldHVybiBzcmM7IH1cbiAgICB2YXIgcmVzLCBpZHg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgaWR4ID0gc3JjLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICByZXNbaWR4XSA9IHNyY1tpZHhdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzID0ge307XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIHJlc1trZXldID0gc3JjW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5cbmV4cG9ydHMuY2xvbmVEZWVwID0gZnVuY3Rpb24gKHNyYykge1xuICAgIHZhciB2aXNpdGVkID0gW10sIGNsb25lZCA9IFtdO1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcChzcmMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzcmMgIT09IFwib2JqZWN0XCIgfHwgc3JjID09PSBudWxsKSB7IHJldHVybiBzcmM7IH1cbiAgICAgICAgdmFyIHJlcywgaWR4LCBjaWR4O1xuXG4gICAgICAgIGNpZHggPSB2aXNpdGVkLmluZGV4T2Yoc3JjKTtcbiAgICAgICAgaWYgKGNpZHggIT09IC0xKSB7IHJldHVybiBjbG9uZWRbY2lkeF07IH1cblxuICAgICAgICB2aXNpdGVkLnB1c2goc3JjKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgICAgICBjbG9uZWQucHVzaChyZXMpO1xuICAgICAgICAgICAgaWR4ID0gc3JjLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHJlc1tpZHhdID0gY2xvbmVEZWVwKHNyY1tpZHhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHt9O1xuICAgICAgICAgICAgY2xvbmVkLnB1c2gocmVzKTtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICAgICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgICAgICByZXNba2V5XSA9IGNsb25lRGVlcChzcmNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lRGVlcChzcmMpO1xufTtcblxuLypcbiAgZm9sbG93aW5nIGZ1bmN0aW9uIGNvbWVzIGZyb20gcHVueWNvZGUuanMgbGlicmFyeVxuICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qc1xuKi9cbi8qanNoaW50IC1XMDE2Ki9cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcbiAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuICogbWF0Y2hpbmcgVVRGLTE2LlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG4gKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG4gKiBAbmFtZSBkZWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG4gKi9cbmV4cG9ydHMudWNzMmRlY29kZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sXG4gICAgICAgIGNvdW50ZXIgPSAwLFxuICAgICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZXh0cmE7XG4gICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcbiAgICAgICAgICAgIGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59O1xuLypqc2hpbnQgK1cwMTYqL1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCIuL1BvbHlmaWxsc1wiKTtcbnZhciBnZXQgICAgICAgICAgICAgICA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIFJlcG9ydCAgICAgICAgICAgID0gcmVxdWlyZShcIi4vUmVwb3J0XCIpO1xudmFyIEZvcm1hdFZhbGlkYXRvcnMgID0gcmVxdWlyZShcIi4vRm9ybWF0VmFsaWRhdG9yc1wiKTtcbnZhciBKc29uVmFsaWRhdGlvbiAgICA9IHJlcXVpcmUoXCIuL0pzb25WYWxpZGF0aW9uXCIpO1xudmFyIFNjaGVtYUNhY2hlICAgICAgID0gcmVxdWlyZShcIi4vU2NoZW1hQ2FjaGVcIik7XG52YXIgU2NoZW1hQ29tcGlsYXRpb24gPSByZXF1aXJlKFwiLi9TY2hlbWFDb21waWxhdGlvblwiKTtcbnZhciBTY2hlbWFWYWxpZGF0aW9uICA9IHJlcXVpcmUoXCIuL1NjaGVtYVZhbGlkYXRpb25cIik7XG52YXIgVXRpbHMgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcbnZhciBEcmFmdDRTY2hlbWEgICAgICA9IHJlcXVpcmUoXCIuL3NjaGVtYXMvc2NoZW1hLmpzb25cIik7XG52YXIgRHJhZnQ0SHlwZXJTY2hlbWEgPSByZXF1aXJlKFwiLi9zY2hlbWFzL2h5cGVyLXNjaGVtYS5qc29uXCIpO1xuXG4vKlxuICAgIGRlZmF1bHQgb3B0aW9uc1xuKi9cbnZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAvLyBkZWZhdWx0IHRpbWVvdXQgZm9yIGFsbCBhc3luYyB0YXNrc1xuICAgIGFzeW5jVGltZW91dDogMjAwMCxcbiAgICAvLyBmb3JjZSBhZGRpdGlvbmFsUHJvcGVydGllcyBhbmQgYWRkaXRpb25hbEl0ZW1zIHRvIGJlIGRlZmluZWQgb24gXCJvYmplY3RcIiBhbmQgXCJhcnJheVwiIHR5cGVzXG4gICAgZm9yY2VBZGRpdGlvbmFsOiBmYWxzZSxcbiAgICAvLyBhc3N1bWUgYWRkaXRpb25hbFByb3BlcnRpZXMgYW5kIGFkZGl0aW9uYWxJdGVtcyBhcmUgZGVmaW5lZCBhcyBcImZhbHNlXCIgd2hlcmUgYXBwcm9wcmlhdGVcbiAgICBhc3N1bWVBZGRpdGlvbmFsOiBmYWxzZSxcbiAgICAvLyBmb3JjZSBpdGVtcyB0byBiZSBkZWZpbmVkIG9uIFwiYXJyYXlcIiB0eXBlc1xuICAgIGZvcmNlSXRlbXM6IGZhbHNlLFxuICAgIC8vIGZvcmNlIG1pbkl0ZW1zIHRvIGJlIGRlZmluZWQgb24gXCJhcnJheVwiIHR5cGVzXG4gICAgZm9yY2VNaW5JdGVtczogZmFsc2UsXG4gICAgLy8gZm9yY2UgbWF4SXRlbXMgdG8gYmUgZGVmaW5lZCBvbiBcImFycmF5XCIgdHlwZXNcbiAgICBmb3JjZU1heEl0ZW1zOiBmYWxzZSxcbiAgICAvLyBmb3JjZSBtaW5MZW5ndGggdG8gYmUgZGVmaW5lZCBvbiBcInN0cmluZ1wiIHR5cGVzXG4gICAgZm9yY2VNaW5MZW5ndGg6IGZhbHNlLFxuICAgIC8vIGZvcmNlIG1heExlbmd0aCB0byBiZSBkZWZpbmVkIG9uIFwic3RyaW5nXCIgdHlwZXNcbiAgICBmb3JjZU1heExlbmd0aDogZmFsc2UsXG4gICAgLy8gZm9yY2UgcHJvcGVydGllcyBvciBwYXR0ZXJuUHJvcGVydGllcyB0byBiZSBkZWZpbmVkIG9uIFwib2JqZWN0XCIgdHlwZXNcbiAgICBmb3JjZVByb3BlcnRpZXM6IGZhbHNlLFxuICAgIC8vIGlnbm9yZSByZWZlcmVuY2VzIHRoYXQgY2Fubm90IGJlIHJlc29sdmVkIChyZW1vdGUgc2NoZW1hcykgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgaXMgb25seSBmb3IgcmVtb3RlIHNjaGVtYXMsIG5vdCBsb2NhbCBvbmVzXG4gICAgaWdub3JlVW5yZXNvbHZhYmxlUmVmZXJlbmNlczogZmFsc2UsXG4gICAgLy8gZGlzYWxsb3cgdXNhZ2Ugb2Yga2V5d29yZHMgdGhhdCB0aGlzIHZhbGlkYXRvciBjYW4ndCBoYW5kbGVcbiAgICBub0V4dHJhS2V5d29yZHM6IGZhbHNlLFxuICAgIC8vIGRpc2FsbG93IHVzYWdlIG9mIHNjaGVtYSdzIHdpdGhvdXQgXCJ0eXBlXCIgZGVmaW5lZFxuICAgIG5vVHlwZWxlc3M6IGZhbHNlLFxuICAgIC8vIGRpc2FsbG93IHplcm8gbGVuZ3RoIHN0cmluZ3MgaW4gdmFsaWRhdGVkIG9iamVjdHNcbiAgICBub0VtcHR5U3RyaW5nczogZmFsc2UsXG4gICAgLy8gZGlzYWxsb3cgemVybyBsZW5ndGggYXJyYXlzIGluIHZhbGlkYXRlZCBvYmplY3RzXG4gICAgbm9FbXB0eUFycmF5czogZmFsc2UsXG4gICAgLy8gZm9yY2VzIFwidXJpXCIgZm9ybWF0IHRvIGJlIGluIGZ1bGx5IHJmYzM5ODYgY29tcGxpYW50XG4gICAgc3RyaWN0VXJpczogZmFsc2UsXG4gICAgLy8gdHVybiBvbiBzb21lIG9mIHRoZSBhYm92ZVxuICAgIHN0cmljdE1vZGU6IGZhbHNlLFxuICAgIC8vIHJlcG9ydCBlcnJvciBwYXRocyBhcyBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzIHRvIGdldCB0byB0aGUgb2ZmZW5kaW5nIG5vZGVcbiAgICByZXBvcnRQYXRoQXNBcnJheTogZmFsc2UsXG4gICAgLy8gc3RvcHMgdmFsaWRhdGlvbiBhcyBzb29uIGFzIGFuIGVycm9yIGlzIGZvdW5kLCB0cnVlIGJ5IGRlZmF1bHQgYnV0IGNhbiBiZSB0dXJuZWQgb2ZmXG4gICAgYnJlYWtPbkZpcnN0RXJyb3I6IHRydWUsXG4gICAgLy8gY2hlY2sgaWYgc2NoZW1hIGZvbGxvdyBiZXN0IHByYWN0aWNlcyBhbmQgY29tbW9uIHNlbmNlXG4gICAgcGVkYW50aWNDaGVjazogZmFsc2UsXG4gICAgLy8gaWdub3JlIHVua25vd24gZm9ybWF0cyAoZG8gbm90IHJlcG9ydCB0aGVtIGFzIGFuIGVycm9yKVxuICAgIGlnbm9yZVVua25vd25Gb3JtYXRzOiBmYWxzZVxufTtcblxuLypcbiAgICBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFpTY2hlbWEob3B0aW9ucykge1xuICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgICB0aGlzLnJlZmVyZW5jZUNhY2hlID0gW107XG5cbiAgICB0aGlzLnNldFJlbW90ZVJlZmVyZW5jZShcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hXCIsIERyYWZ0NFNjaGVtYSk7XG4gICAgdGhpcy5zZXRSZW1vdGVSZWZlcmVuY2UoXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L2h5cGVyLXNjaGVtYVwiLCBEcmFmdDRIeXBlclNjaGVtYSk7XG5cbiAgICAvLyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyksXG4gICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICAgIGtleTtcblxuICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSBvcHRpb25zIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZFxuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0T3B0aW9uc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIG9wdGlvbiBwYXNzZWQgdG8gY29uc3RydWN0b3I6IFwiICsga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvcHkgdGhlIGRlZmF1bHQgb3B0aW9ucyBpbnRvIHBhc3NlZCBvcHRpb25zXG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0T3B0aW9ucyk7XG4gICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IFV0aWxzLmNsb25lKGRlZmF1bHRPcHRpb25zW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5jbG9uZShkZWZhdWx0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3RNb2RlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JjZUFkZGl0aW9uYWwgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvcmNlSXRlbXMgICAgICAgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9yY2VNYXhMZW5ndGggICA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5vRXh0cmFLZXl3b3JkcyAgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wdGlvbnMubm9UeXBlbGVzcyAgICAgICA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ub0VtcHR5U3RyaW5ncyAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5vRW1wdHlBcnJheXMgICAgPSB0cnVlO1xuICAgIH1cblxufVxuXG4vKlxuICAgIGluc3RhbmNlIG1ldGhvZHNcbiovXG5aU2NoZW1hLnByb3RvdHlwZS5jb21waWxlU2NoZW1hID0gZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgIHZhciByZXBvcnQgPSBuZXcgUmVwb3J0KHRoaXMub3B0aW9ucyk7XG5cbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICBTY2hlbWFDb21waWxhdGlvbi5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpO1xuXG4gICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgIHJldHVybiByZXBvcnQuaXNWYWxpZCgpO1xufTtcblpTY2hlbWEucHJvdG90eXBlLnZhbGlkYXRlU2NoZW1hID0gZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIudmFsaWRhdGVTY2hlbWEgd2FzIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFycmF5XCIpO1xuICAgIH1cblxuICAgIHZhciByZXBvcnQgPSBuZXcgUmVwb3J0KHRoaXMub3B0aW9ucyk7XG5cbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICB2YXIgY29tcGlsZWQgPSBTY2hlbWFDb21waWxhdGlvbi5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpO1xuICAgIGlmIChjb21waWxlZCkgeyBTY2hlbWFWYWxpZGF0aW9uLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpOyB9XG5cbiAgICB0aGlzLmxhc3RSZXBvcnQgPSByZXBvcnQ7XG4gICAgcmV0dXJuIHJlcG9ydC5pc1ZhbGlkKCk7XG59O1xuWlNjaGVtYS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoanNvbiwgc2NoZW1hLCBvcHRpb25zLCBjYWxsYmFjaykge1xuXG4gICAgaWYgKFV0aWxzLndoYXRJcyhvcHRpb25zKSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMpIHsgb3B0aW9ucyA9IHt9OyB9XG5cbiAgICB2YXIgd2hhdElzID0gVXRpbHMud2hhdElzKHNjaGVtYSk7XG4gICAgaWYgKHdoYXRJcyAhPT0gXCJzdHJpbmdcIiAmJiB3aGF0SXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJJbnZhbGlkIC52YWxpZGF0ZSBjYWxsIC0gc2NoZW1hIG11c3QgYmUgYW4gc3RyaW5nIG9yIG9iamVjdCBidXQgXCIgKyB3aGF0SXMgKyBcIiB3YXMgcGFzc2VkIVwiKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciBmb3VuZEVycm9yID0gZmFsc2U7XG4gICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQodGhpcy5vcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhciBzY2hlbWFOYW1lID0gc2NoZW1hO1xuICAgICAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYU5hbWUpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIHdpdGggaWQgJ1wiICsgc2NoZW1hTmFtZSArIFwiJyB3YXNuJ3QgZm91bmQgaW4gdGhlIHZhbGlkYXRvciBjYWNoZSFcIik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGVkID0gZmFsc2U7XG4gICAgaWYgKCFmb3VuZEVycm9yKSB7XG4gICAgICAgIGNvbXBpbGVkID0gU2NoZW1hQ29tcGlsYXRpb24uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgICB0aGlzLmxhc3RSZXBvcnQgPSByZXBvcnQ7XG4gICAgICAgIGZvdW5kRXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciB2YWxpZGF0ZWQgPSBmYWxzZTtcbiAgICBpZiAoIWZvdW5kRXJyb3IpIHtcbiAgICAgICAgdmFsaWRhdGVkID0gU2NoZW1hVmFsaWRhdGlvbi52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgICAgICBmb3VuZEVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zY2hlbWFQYXRoKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBzY2hlbWEgPSBnZXQoc2NoZW1hLCBvcHRpb25zLnNjaGVtYVBhdGgpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIHBhdGggJ1wiICsgb3B0aW9ucy5zY2hlbWFQYXRoICsgXCInIHdhc24ndCBmb3VuZCBpbiB0aGUgc2NoZW1hIVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm91bmRFcnJvcikge1xuICAgICAgICBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcmVwb3J0LnByb2Nlc3NBc3luY1Rhc2tzKHRoaXMub3B0aW9ucy5hc3luY1RpbWVvdXQsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAocmVwb3J0LmFzeW5jVGFza3MubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHZhbGlkYXRpb24gaGFzIGFzeW5jIHRhc2tzIGFuZCBjYW5ub3QgYmUgZG9uZSBpbiBzeW5jIG1vZGUsIHBsZWFzZSBwcm92aWRlIGNhbGxiYWNrIGFyZ3VtZW50LlwiKTtcbiAgICB9XG5cbiAgICAvLyBhc3NpZ24gbGFzdFJlcG9ydCBzbyBlcnJvcnMgYXJlIHJldHJpZXZhYmxlIGluIHN5bmMgbW9kZVxuICAgIHRoaXMubGFzdFJlcG9ydCA9IHJlcG9ydDtcbiAgICByZXR1cm4gcmVwb3J0LmlzVmFsaWQoKTtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRMYXN0RXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMubGFzdFJlcG9ydC5lcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgZSA9IG5ldyBFcnJvcigpO1xuICAgIGUubmFtZSA9IFwiei1zY2hlbWEgdmFsaWRhdGlvbiBlcnJvclwiO1xuICAgIGUubWVzc2FnZSA9IHRoaXMubGFzdFJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2U7XG4gICAgZS5kZXRhaWxzID0gdGhpcy5sYXN0UmVwb3J0LmVycm9ycztcbiAgICByZXR1cm4gZTtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRMYXN0RXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmxhc3RSZXBvcnQgJiYgdGhpcy5sYXN0UmVwb3J0LmVycm9ycy5sZW5ndGggPiAwID8gdGhpcy5sYXN0UmVwb3J0LmVycm9ycyA6IHVuZGVmaW5lZDtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRNaXNzaW5nUmVmZXJlbmNlcyA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICBhcnIgPSBhcnIgfHwgdGhpcy5sYXN0UmVwb3J0LmVycm9ycztcbiAgICB2YXIgcmVzID0gW10sXG4gICAgICAgIGlkeCA9IGFyci5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGFycltpZHhdO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gXCJVTlJFU09MVkFCTEVfUkVGRVJFTkNFXCIpIHtcbiAgICAgICAgICAgIHZhciByZWZlcmVuY2UgPSBlcnJvci5wYXJhbXNbMF07XG4gICAgICAgICAgICBpZiAocmVzLmluZGV4T2YocmVmZXJlbmNlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChyZWZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvci5pbm5lcikge1xuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLmdldE1pc3NpbmdSZWZlcmVuY2VzKGVycm9yLmlubmVyKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRNaXNzaW5nUmVtb3RlUmVmZXJlbmNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWlzc2luZ1JlZmVyZW5jZXMgPSB0aGlzLmdldE1pc3NpbmdSZWZlcmVuY2VzKCksXG4gICAgICAgIG1pc3NpbmdSZW1vdGVSZWZlcmVuY2VzID0gW10sXG4gICAgICAgIGlkeCA9IG1pc3NpbmdSZWZlcmVuY2VzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIHJlbW90ZVJlZmVyZW5jZSA9IFNjaGVtYUNhY2hlLmdldFJlbW90ZVBhdGgobWlzc2luZ1JlZmVyZW5jZXNbaWR4XSk7XG4gICAgICAgIGlmIChyZW1vdGVSZWZlcmVuY2UgJiYgbWlzc2luZ1JlbW90ZVJlZmVyZW5jZXMuaW5kZXhPZihyZW1vdGVSZWZlcmVuY2UpID09PSAtMSkge1xuICAgICAgICAgICAgbWlzc2luZ1JlbW90ZVJlZmVyZW5jZXMucHVzaChyZW1vdGVSZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtaXNzaW5nUmVtb3RlUmVmZXJlbmNlcztcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5zZXRSZW1vdGVSZWZlcmVuY2UgPSBmdW5jdGlvbiAodXJpLCBzY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzY2hlbWEgPSBKU09OLnBhcnNlKHNjaGVtYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gVXRpbHMuY2xvbmVEZWVwKHNjaGVtYSk7XG4gICAgfVxuICAgIFNjaGVtYUNhY2hlLmNhY2hlU2NoZW1hQnlVcmkuY2FsbCh0aGlzLCB1cmksIHNjaGVtYSk7XG59O1xuWlNjaGVtYS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWEgPSBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQodGhpcy5vcHRpb25zKTtcbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICAvLyBjbG9uZSBiZWZvcmUgbWFraW5nIGFueSBtb2RpZmljYXRpb25zXG4gICAgc2NoZW1hID0gVXRpbHMuY2xvbmVEZWVwKHNjaGVtYSk7XG5cbiAgICB2YXIgdmlzaXRlZCA9IFtdO1xuXG4gICAgLy8gY2xlYW4tdXAgdGhlIHNjaGVtYSBhbmQgcmVzb2x2ZSByZWZlcmVuY2VzXG4gICAgdmFyIGNsZWFudXAgPSBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB0eXBlT2YgPSBVdGlscy53aGF0SXMoc2NoZW1hKTtcbiAgICAgICAgaWYgKHR5cGVPZiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlT2YgIT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5fX18kdmlzaXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NoZW1hLl9fXyR2aXNpdGVkID0gdHJ1ZTtcbiAgICAgICAgdmlzaXRlZC5wdXNoKHNjaGVtYSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS4kcmVmICYmIHNjaGVtYS5fXyRyZWZSZXNvbHZlZCkge1xuICAgICAgICAgICAgdmFyIGZyb20gPSBzY2hlbWEuX18kcmVmUmVzb2x2ZWQ7XG4gICAgICAgICAgICB2YXIgdG8gPSBzY2hlbWE7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLiRyZWY7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLl9fJHJlZlJlc29sdmVkO1xuICAgICAgICAgICAgZm9yIChrZXkgaW4gZnJvbSkge1xuICAgICAgICAgICAgICAgIGlmIChmcm9tLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJfXyRcIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXAoc2NoZW1hW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjbGVhbnVwKHNjaGVtYSk7XG4gICAgdmlzaXRlZC5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIGRlbGV0ZSBzLl9fXyR2aXNpdGVkO1xuICAgIH0pO1xuXG4gICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgIGlmIChyZXBvcnQuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5nZXRMYXN0RXJyb3IoKTtcbiAgICB9XG59O1xuWlNjaGVtYS5wcm90b3R5cGUuc2V0U2NoZW1hUmVhZGVyID0gZnVuY3Rpb24gKHNjaGVtYVJlYWRlcikge1xuICAgIHJldHVybiBaU2NoZW1hLnNldFNjaGVtYVJlYWRlcihzY2hlbWFSZWFkZXIpO1xufTtcblpTY2hlbWEucHJvdG90eXBlLmdldFNjaGVtYVJlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gWlNjaGVtYS5zY2hlbWFSZWFkZXI7XG59O1xuXG4vKlxuICAgIHN0YXRpYyBtZXRob2RzXG4qL1xuWlNjaGVtYS5zZXRTY2hlbWFSZWFkZXIgPSBmdW5jdGlvbiAoc2NoZW1hUmVhZGVyKSB7XG4gICAgWlNjaGVtYS5zY2hlbWFSZWFkZXIgPSBzY2hlbWFSZWFkZXI7XG59O1xuWlNjaGVtYS5yZWdpc3RlckZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXROYW1lLCB2YWxpZGF0b3JGdW5jdGlvbikge1xuICAgIEZvcm1hdFZhbGlkYXRvcnNbZm9ybWF0TmFtZV0gPSB2YWxpZGF0b3JGdW5jdGlvbjtcbn07XG5aU2NoZW1hLnVucmVnaXN0ZXJGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0TmFtZSkge1xuICAgIGRlbGV0ZSBGb3JtYXRWYWxpZGF0b3JzW2Zvcm1hdE5hbWVdO1xufTtcblpTY2hlbWEuZ2V0UmVnaXN0ZXJlZEZvcm1hdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKEZvcm1hdFZhbGlkYXRvcnMpO1xufTtcblpTY2hlbWEuZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFV0aWxzLmNsb25lRGVlcChkZWZhdWx0T3B0aW9ucyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFpTY2hlbWE7XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9oeXBlci1zY2hlbWEjXCIsXG4gICAgXCJpZFwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvaHlwZXItc2NoZW1hI1wiLFxuICAgIFwidGl0bGVcIjogXCJKU09OIEh5cGVyLVNjaGVtYVwiLFxuICAgIFwiYWxsT2ZcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIlxuICAgICAgICB9XG4gICAgXSxcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhbGxPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvbmVPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJsaW5rc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9saW5rRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImZyYWdtZW50UmVzb2x1dGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1lZGlhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBtZWRpYSB0eXBlLCBhcyBkZXNjcmliZWQgaW4gUkZDIDIwNDZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiYmluYXJ5RW5jb2RpbmdcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBjb250ZW50IGVuY29kaW5nIHNjaGVtZSwgYXMgZGVzY3JpYmVkIGluIFJGQyAyMDQ1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhTdGFydFwiOiB7XG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5zdGFuY2VzJyBVUklzIG11c3Qgc3RhcnQgd2l0aCB0aGlzIHZhbHVlIGZvciB0aGlzIHNjaGVtYSB0byBhcHBseSB0byB0aGVtXCIsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImxpbmtEZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwiTGluayBEZXNjcmlwdGlvbiBPYmplY3RcIixcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiBbIFwiaHJlZlwiLCBcInJlbFwiIF0sXG4gICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFwiaHJlZlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIFVSSSB0ZW1wbGF0ZSwgYXMgZGVmaW5lZCBieSBSRkMgNjU3MCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlICQsICggYW5kICkgY2hhcmFjdGVycyBmb3IgcHJlLXByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwicmVsXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlbGF0aW9uIHRvIHRoZSB0YXJnZXQgcmVzb3VyY2Ugb2YgdGhlIGxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSB0aXRsZSBmb3IgdGhlIGxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidGFyZ2V0U2NoZW1hXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkpTT04gU2NoZW1hIGRlc2NyaWJpbmcgdGhlIGxpbmsgdGFyZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJtZWRpYVR5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWVkaWEgdHlwZSAoYXMgZGVmaW5lZCBieSBSRkMgMjA0NikgZGVzY3JpYmluZyB0aGUgbGluayB0YXJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwibWV0aG9kXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1ldGhvZCBmb3IgcmVxdWVzdGluZyB0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rIChlLmcuIGZvciBIVFRQIHRoaXMgbWlnaHQgYmUgXFxcIkdFVFxcXCIgb3IgXFxcIkRFTEVURVxcXCIpXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImVuY1R5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG1lZGlhIHR5cGUgaW4gd2hpY2ggdG8gc3VibWl0IGRhdGEgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcInNjaGVtYVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTY2hlbWEgZGVzY3JpYmluZyB0aGUgZGF0YSB0byBzdWJtaXQgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgICBcImlkXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvcmUgc2NoZW1hIG1ldGEtc2NoZW1hXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcIm1pbmltdW1cIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCI6IHtcbiAgICAgICAgICAgIFwiYWxsT2ZcIjogWyB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSwgeyBcImRlZmF1bHRcIjogMCB9IF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzaW1wbGVUeXBlc1wiOiB7XG4gICAgICAgICAgICBcImVudW1cIjogWyBcImFycmF5XCIsIFwiYm9vbGVhblwiLCBcImludGVnZXJcIiwgXCJudWxsXCIsIFwibnVtYmVyXCIsIFwib2JqZWN0XCIsIFwic3RyaW5nXCIgXVxuICAgICAgICB9LFxuICAgICAgICBcInN0cmluZ0FycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcIiRzY2hlbWFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge30sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAwLFxuICAgICAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwicmVnZXhcIlxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIFwiYWxsT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm9uZU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwibm90XCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICB9LFxuICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IFsgXCJtYXhpbXVtXCIgXSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IFsgXCJtaW5pbXVtXCIgXVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHt9XG59XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC5qcyIsImxpYi9oZWxwZXJzLmpzIiwibGliL2pzb24tc2NoZW1hLWRyYWZ0LTA0Lmpzb24iLCJsaWIvdHlwZXMvYXBpLmpzIiwibGliL3R5cGVzL29wZXJhdGlvbi5qcyIsImxpYi90eXBlcy9wYXJhbWV0ZXItdmFsdWUuanMiLCJsaWIvdHlwZXMvcGFyYW1ldGVyLmpzIiwibGliL3R5cGVzL3BhdGguanMiLCJsaWIvdHlwZXMvcmVzcG9uc2UuanMiLCJsaWIvdmFsaWRhdGlvbi9mb3JtYXQtZ2VuZXJhdG9ycy5qcyIsImxpYi92YWxpZGF0aW9uL2Zvcm1hdC12YWxpZGF0b3JzLmpzIiwibGliL3ZhbGlkYXRpb24vc2NoZW1hLmpzb24iLCJsaWIvdmFsaWRhdGlvbi92YWxpZGF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9saWIvYjY0LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXItcmVzb2x2ZS9lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVmZmVyL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NoYW5jZS9jaGFuY2UuanMiLCJub2RlX21vZHVsZXMvY29tcG9uZW50LWVtaXR0ZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGVidWcvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9kZWJ1Zy9kZWJ1Zy5qcyIsIm5vZGVfbW9kdWxlcy9kZWVwLWV4dGVuZC9saWIvZGVlcC1leHRlbmQuanMiLCJub2RlX21vZHVsZXMvZGVyZWYvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL2Nsb25lLW9iai5qcyIsIm5vZGVfbW9kdWxlcy9kZXJlZi9saWIvdXRpbC9maW5kLXJlZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9kZXJlZi9saWIvdXRpbC9ub3JtYWxpemUtc2NoZW1hLmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL3Jlc29sdmUtc2NoZW1hLmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL3VyaS1oZWxwZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Rpc2NvbnRpbnVvdXMtcmFuZ2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXNwcmltYS9lc3ByaW1hLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9hZGRyZXNzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9jb21tZXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvY29tcGFueS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvZmFrZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvZmluYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvaGFja2VyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9oZWxwZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9pbWFnZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2ludGVybmV0LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvYnVpbGRpbmdfbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY2l0eS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NpdHlfcHJlZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY2l0eV9zdWZmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9jb3VudHJ5LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY291bnRyeV9jb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY291bnR5LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvZGVmYXVsdF9jb3VudHJ5LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9wb3N0Y29kZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL3NlY29uZGFyeV9hZGRyZXNzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3Mvc3RhdGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9zdGF0ZV9hYmJyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3Mvc3RyZWV0X2FkZHJlc3MuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9zdHJlZXRfbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL3N0cmVldF9zdWZmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy90aW1lX3pvbmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYXBwL2F1dGhvci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hcHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYXBwL25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYXBwL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYnVzaW5lc3MvY3JlZGl0X2NhcmRfZXhwaXJ5X2RhdGVzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2J1c2luZXNzL2NyZWRpdF9jYXJkX251bWJlcnMuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYnVzaW5lc3MvY3JlZGl0X2NhcmRfdHlwZXMuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYnVzaW5lc3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY2VsbF9waG9uZS9mb3JtYXRzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NlbGxfcGhvbmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tbWVyY2UvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tbWVyY2UvZGVwYXJ0bWVudC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21tZXJjZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21tZXJjZS9wcm9kdWN0X25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9hZGplY3RpdmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9ic19hZGplY3RpdmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9ic19ub3VuLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvYnNfdmVyYi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21wYW55L2Rlc2NyaXB0b3IuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21wYW55L25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9ub3VuLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvc3VmZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2FtZXJpY2FuX2V4cHJlc3MuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvZGluZXJzX2NsdWIuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvZGlzY292ZXIuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvamNiLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2xhc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL21hZXN0cm8uanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvbWFzdGVyY2FyZC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9zb2xvLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL3N3aXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC92aXNhLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2RhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZGF0ZS9tb250aC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9kYXRlL3dlZWtkYXkuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZmluYW5jZS9hY2NvdW50X3R5cGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZmluYW5jZS9jdXJyZW5jeS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9maW5hbmNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ZpbmFuY2UvdHJhbnNhY3Rpb25fdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvYWJicmV2aWF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci9hZGplY3RpdmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vaGFja2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci9pbmd2ZXJiLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci9ub3VuLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci92ZXJiLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ludGVybmV0L2F2YXRhcl91cmkuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vaW50ZXJuZXQvZG9tYWluX3N1ZmZpeC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9pbnRlcm5ldC9mcmVlX2VtYWlsLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ludGVybmV0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2xvcmVtL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2xvcmVtL3N1cHBsZW1lbnRhbC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9sb3JlbS93b3Jkcy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9uYW1lL2ZpcnN0X25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9uYW1lL2xhc3RfbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9uYW1lL25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9wcmVmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9zdWZmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS90aXRsZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9waG9uZV9udW1iZXIvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9waG9uZV9udW1iZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vdGVhbS9jcmVhdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi90ZWFtL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL3RlYW0vbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9yZW0uanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL3Bob25lX251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvcmFuZG9tLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xvY2FsZS9lbi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci92ZW5kb3IvbWVyc2VubmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvdmVuZG9yL3Bhc3N3b3JkLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci92ZW5kb3IvdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2luaGVyaXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaW5oZXJpdC9saWIvaW5oZXJpdC5qcyIsIm5vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJhc2U2NC9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZHVtcGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZXhjZXB0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbG9hZGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbWFyay5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2JpbmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYm9vbC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvZnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3JlZ2V4cC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvdW5kZWZpbmVkLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tYXAuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9udWxsLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9vbWFwLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9wYWlycy5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2VxLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3N0ci5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvdGltZXN0YW1wLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tcmVmcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3R5cGVzL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9ib29sZWFuLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9pbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9udWxsLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3R5cGVzL29iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi91dGlsL2NvbnRhaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9lcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9mb3JtYXRzLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi91dGlsL2hhcy1wcm9wcy5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9pbmZlcnJlZC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9tZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9wcmltaXRpdmVzLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi91dGlsL3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC90cmF2ZXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2guX2Jhc2VnZXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoLl90b3BhdGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoLmdldC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2guaXNhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmF0aXZlLXByb21pc2Utb25seS9saWIvbnBvLnNyYy5qcyIsIm5vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGF0aC1sb2FkZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGF0aC1sb2FkZXIvbGliL2xvYWRlcnMvZmlsZS1icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3BhdGgtbG9hZGVyL2xpYi9sb2FkZXJzL2h0dHAuanMiLCJub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmFuZGV4cC9saWIvcmFuZGV4cC5qcyIsIm5vZGVfbW9kdWxlcy9yZWR1Y2UtY29tcG9uZW50L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JldC9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmV0L2xpYi9wb3NpdGlvbnMuanMiLCJub2RlX21vZHVsZXMvcmV0L2xpYi9zZXRzLmpzIiwibm9kZV9tb2R1bGVzL3JldC9saWIvdHlwZXMuanMiLCJub2RlX21vZHVsZXMvcmV0L2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL3NsYXNoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N1cGVyYWdlbnQvbGliL2NsaWVudC5qcyIsIm5vZGVfbW9kdWxlcy91cmktanMvYnVpbGQvcHVueWNvZGUuanMiLCJub2RlX21vZHVsZXMvdXJpLWpzL2J1aWxkL3NjaGVtZXMuanMiLCJub2RlX21vZHVsZXMvdXJpLWpzL2J1aWxkL3NjaGVtZXMvaHR0cC5qcyIsIm5vZGVfbW9kdWxlcy91cmktanMvYnVpbGQvc2NoZW1lcy9tYWlsdG8uanMiLCJub2RlX21vZHVsZXMvdXJpLWpzL2J1aWxkL3NjaGVtZXMvdXJuLmpzIiwibm9kZV9tb2R1bGVzL3VyaS1qcy9idWlsZC91cmkuanMiLCJub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy91cmwvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy92YWxpZGF0b3IvdmFsaWRhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9FcnJvcnMuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL0Zvcm1hdFZhbGlkYXRvcnMuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL0pzb25WYWxpZGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9Qb2x5ZmlsbHMuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL1JlcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvU2NoZW1hQ2FjaGUuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL1NjaGVtYUNvbXBpbGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9TY2hlbWFWYWxpZGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9VdGlscy5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvWlNjaGVtYS5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvc2NoZW1hcy9oeXBlci1zY2hlbWEuanNvbiIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvc2NoZW1hcy9zY2hlbWEuanNvbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDck9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMXBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1Z0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2ppRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNyTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdtTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqOEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2gxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xrRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3BMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9qWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM3SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNyWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDck9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0WUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaGZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1dEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3poQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDOVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xudmFyIGhlbHBlcnMgPSByZXF1aXJlKCcuL2xpYi9oZWxwZXJzJyk7XG52YXIgSnNvblJlZnMgPSByZXF1aXJlKCdqc29uLXJlZnMnKTtcbnZhciBTd2FnZ2VyQXBpID0gcmVxdWlyZSgnLi9saWIvdHlwZXMvYXBpJyk7XG52YXIgWUFNTCA9IHJlcXVpcmUoJ2pzLXlhbWwnKTtcblxuLy8gTG9hZCBwcm9taXNlcyBwb2x5ZmlsbCBpZiBuZWNlc3Nhcnlcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJykge1xuICByZXF1aXJlKCduYXRpdmUtcHJvbWlzZS1vbmx5Jyk7XG59XG5cbi8qKlxuICogQSBsaWJyYXJ5IGZvciBzaW1wbGVyIFtTd2FnZ2VyXShodHRwOi8vc3dhZ2dlci5pby8pIGludGVncmF0aW9ucy5cbiAqXG4gKiBAbW9kdWxlIFN3YXlcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIHVzZWQgZm9yIHZhbGlkYXRpb24uXG4gKlxuICogQHR5cGVkZWYge2Z1bmN0aW9ufSBWYWxpZGF0b3JDYWxsYmFja1xuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXIgQVBJIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtWYWxpZGF0aW9uUmVzdWx0c30gVGhlIHZhbGlkYXRpb24gcmVzdWx0cy5cbiAqL1xuXG4vKipcbiAqIFNlcnZlciByZXNwb25zZSB3cmFwcGVyLlxuICpcbiAqIFNpbmNlIHRoZSBsb3cgbGV2ZWwgYGh0dHAuU2VydmVyUmVzcG9uc2VgIG9iamVjdCBpcyBub3QgYWx3YXlzIGd1YXJhbnRlZWQgYW5kIGV2ZW4gaWYgaXQgaXMsIHRoZXJlIGlzIG5vIHB1YmxpYyB3YXlcbiAqIHRvIGdhdGhlciB0aGUgbmVjZXNzYXJ5IHBhcnRzIG9mIHRoZSByZXNwb25zZSB0byBwZXJmb3JtIHZhbGlkYXRpb24sIHRoaXMgb2JqZWN0IGVuY2Fwc3VsYXRlcyB0aGUgcmVxdWlyZWQgcmVzcG9uc2VcbiAqIGluZm9ybWF0aW9uIHRvIHBlcmZvcm0gcmVzcG9uc2UgdmFsaWRhdGlvbi5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTZXJ2ZXJSZXNwb25zZVdyYXBwZXJcbiAqXG4gKiBAcHJvcGVydHkgeyp9IGJvZHkgLSBUaGUgcmVzcG9uc2UgYm9keVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlbmNvZGluZ10gLSBUaGUgZW5jb2Rpbmcgb2YgdGhlIGJvZHkgd2hlbiB0aGUgYm9keSBpcyBhIGBCdWZmZXJgXG4gKiBAcHJvcGVydHkge29iamVjdH0gaGVhZGVycyAtIFRoZSByZXNwb25zZSBoZWFkZXJzXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IFtzdGF0dXNDb2RlPWRlZmF1bHRdIC0gVGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlXG4gKi9cblxuLyoqXG4gKiBWYWxpZGF0aW9uIGVycm9yL3dhcm5pbmcgb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZhbGlkYXRpb25FbnRyeVxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb2RlIC0gVGhlIGNvZGUgdXNlZCB0byBpZGVudGlmeSB0aGUgZXJyb3Ivd2FybmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlcnJvcl0gLSBXaGVuZXZlciB0aGVyZSBpcyBhbiB1cHN0cmVhbSBgRXJyb3JgIGVuY291bnRlcmVkLCBpdHMgbWVzc2FnZSBpcyBoZXJlXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRpb25FbnRyeVtdfSBbZXJyb3JzXSAtIFRoZSBuZXN0ZWQgZXJyb3IocykgZW5jb3VudGVyZWQgZHVyaW5nIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtsaW5lYWdlXSAtIENvbnRhaW5zIHRoZSBjb21wb3NpdGlvbiBsaW5lYWdlIGZvciBjaXJjdWxhciBjb21wb3NpdGlvbiBlcnJvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvci93YXJuaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gVGhlIGhlYWRlciBuYW1lIGZvciBoZWFkZXIgdmFsaWRhdGlvbiBlcnJvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgbG9jYXRpb24gaW4gdGhlIGRvY3VtZW50IHdoZXJlIHRoZSBlcnJvci93YXJuaW5nIG9jY3VycmVkXG4gKi9cblxuLyoqXG4gKiBWYWxpZGF0aW9uIHJlc3VsdHMgb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZhbGlkYXRpb25SZXN1bHRzXG4gKlxuICogQHByb3BlcnR5IHtWYWxpZGF0aW9uRW50cnlbXX0gZXJyb3JzIC0gVGhlIHZhbGlkYXRpb24gZXJyb3JzXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRpb25FbnRyeVtdfSB3YXJuaW5ncyAtIFRoZSB2YWxpZGF0aW9uIHdhcm5pbmdzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgU3dhZ2dlckFwaSBvYmplY3QgZnJvbSBpdHMgU3dhZ2dlciBkZWZpbml0aW9uKHMpLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGxvYWRpbmcgdGhlIGRlZmluaXRpb24ocylcbiAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gb3B0aW9ucy5kZWZpbml0aW9uIC0gVGhlIFN3YWdnZXIgZGVmaW5pdGlvbiBsb2NhdGlvbiBvciBzdHJ1Y3R1cmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5qc29uUmVmc10gLSAqKFNlZSBbSnNvblJlZnN+SnNvblJlZnNPcHRpb25zXShodHRwczovL2dpdGh1Yi5jb20vd2hpdGxvY2tqYy9qc29uLXJlZnMvYmxvYi9tYXN0ZXIvZG9jcy9BUEkubWQjbW9kdWxlX0pzb25SZWZzLi5Kc29uUmVmc09wdGlvbnMpKSpcbiAqIEBwYXJhbSB7VmFsaWRhdG9yQ2FsbGJhY2tbXX0gW29wdGlvbnMuY3VzdG9tVmFsaWRhdG9yc10gLSBUaGUgY3VzdG9tIHZhbGlkYXRvcnNcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIHByb21pc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogU3dhZ2dlckFwaS5jcmVhdGUoe2RlZmluaXRpb246ICdodHRwOi8vcGV0c3RvcmUuc3dhZ2dlci5pby92Mi9zd2FnZ2VyLnlhbWwnfSlcbiAqICAgLnRoZW4oZnVuY3Rpb24gKGFwaSkge1xuICogICAgIGNvbnNvbGUubG9nKCdEb2N1bWVudGF0aW9uIFVSTDogJywgYXBpLmRvY3VtZW50YXRpb24pO1xuICogICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gKiAgICAgY29uc29sZS5lcnJvcihlcnIuc3RhY2spO1xuICogICB9KTtcbiAqL1xubW9kdWxlLmV4cG9ydHMuY3JlYXRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHZhciBjT3B0aW9ucztcblxuICAvLyBWYWxpZGF0ZSBhcmd1bWVudHNcbiAgYWxsVGFza3MgPSBhbGxUYXNrcy50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKG9wdGlvbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH0gZWxzZSBpZiAoIV8uaXNQbGFpbk9iamVjdChvcHRpb25zKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQob3B0aW9ucy5kZWZpbml0aW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLmRlZmluaXRpb24gaXMgcmVxdWlyZWQnKTtcbiAgICAgIH0gZWxzZSBpZiAoIV8uaXNQbGFpbk9iamVjdChvcHRpb25zLmRlZmluaXRpb24pICYmICFfLmlzU3RyaW5nKG9wdGlvbnMuZGVmaW5pdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5kZWZpbml0aW9uIG11c3QgYmUgZWl0aGVyIGFuIG9iamVjdCBvciBhIHN0cmluZycpO1xuICAgICAgfSBlbHNlIGlmICghXy5pc1VuZGVmaW5lZChvcHRpb25zLmpzb25SZWZzKSAmJiAhXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMuanNvblJlZnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuanNvblJlZnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIH0gZWxzZSBpZiAoIV8uaXNVbmRlZmluZWQob3B0aW9ucy5jdXN0b21WYWxpZGF0b3JzKSAmJiAhXy5pc0FycmF5KG9wdGlvbnMuY3VzdG9tVmFsaWRhdG9ycykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5jdXN0b21WYWxpZGF0b3JzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH1cblxuICAgICAgXy5mb3JFYWNoKG9wdGlvbnMuY3VzdG9tVmFsaWRhdG9ycywgZnVuY3Rpb24gKHZhbGlkYXRvciwgaW5kZXgpIHtcbiAgICAgICAgaWYgKCFfLmlzRnVuY3Rpb24odmFsaWRhdG9yKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuY3VzdG9tVmFsaWRhdG9ycyBhdCBpbmRleCAnICsgaW5kZXggKyAnIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBNYWtlIGEgY29weSBvZiB0aGUgaW5wdXQgb3B0aW9ucyBzbyBhcyBub3QgdG8gYWx0ZXIgdGhlbVxuICBjT3B0aW9ucyA9IF8uY2xvbmVEZWVwKG9wdGlvbnMpO1xuXG4gIC8vIFxuICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgLy8gUmVzb2x2ZSByZWxhdGl2ZS9yZW1vdGUgcmVmZXJlbmNlc1xuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFByZXBhcmUgdGhlIGpzb24tcmVmcyBvcHRpb25zXG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChjT3B0aW9ucy5qc29uUmVmcykpIHtcbiAgICAgICAgY09wdGlvbnMuanNvblJlZnMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5jbHVkZSBpbnZhbGlkIHJlZmVyZW5jZSBpbmZvcm1hdGlvblxuICAgICAgY09wdGlvbnMuanNvblJlZnMuaW5jbHVkZUludmFsaWQgPSB0cnVlO1xuXG4gICAgICAvLyBSZXNvbHZlIG9ubHkgcmVsYXRpdmUvcmVtb3RlIHJlZmVyZW5jZXNcbiAgICAgIGNPcHRpb25zLmpzb25SZWZzLmZpbHRlciA9IFsncmVsYXRpdmUnLCAncmVtb3RlJ107XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUganNvbi1yZWZzIG9wdGlvbnMgdG8gcHJvY2VzcyBZQU1MXG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChjT3B0aW9ucy5qc29uUmVmcy5sb2FkZXJPcHRpb25zKSkge1xuICAgICAgICBjT3B0aW9ucy5qc29uUmVmcy5sb2FkZXJPcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKGNPcHRpb25zLmpzb25SZWZzLmxvYWRlck9wdGlvbnMucHJvY2Vzc0NvbnRlbnQpKSB7XG4gICAgICAgIGNPcHRpb25zLmpzb25SZWZzLmxvYWRlck9wdGlvbnMucHJvY2Vzc0NvbnRlbnQgPSBmdW5jdGlvbiAocmVzLCBjYikge1xuICAgICAgICAgIGNiKHVuZGVmaW5lZCwgWUFNTC5zYWZlTG9hZChyZXMudGV4dCkpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBqc29uLXJlZnMgQVBJXG4gICAgICBpZiAoXy5pc1N0cmluZyhjT3B0aW9ucy5kZWZpbml0aW9uKSkge1xuICAgICAgICByZXR1cm4gSnNvblJlZnMucmVzb2x2ZVJlZnNBdChjT3B0aW9ucy5kZWZpbml0aW9uLCBjT3B0aW9ucy5qc29uUmVmcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gSnNvblJlZnMucmVzb2x2ZVJlZnMoY09wdGlvbnMuZGVmaW5pdGlvbiwgY09wdGlvbnMuanNvblJlZnMpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLy8gUmVzb2x2ZSBsb2NhbCByZWZlcmVuY2VzIGFuZCBtZXJnZSByZXN1bHRzXG4gICAgLnRoZW4oZnVuY3Rpb24gKHJlbW90ZVJlc3VsdHMpIHtcbiAgICAgIC8vIFJlc29sdmUgYWxsIHJlZmVyZW5jZXMgKFNob3VsZCBvbmx5IHJlc29sdmUgbG9jYWxzIG5vdyBzaW5jZSB0aGUgcmVtb3RlIHJlZmVyZW5jZXMgYXJlIHJlc29sdmVkKVxuICAgICAgZGVsZXRlIGNPcHRpb25zLmpzb25SZWZzLmZpbHRlcjtcblxuICAgICAgcmV0dXJuIEpzb25SZWZzLnJlc29sdmVSZWZzKHJlbW90ZVJlc3VsdHMucmVzb2x2ZWQsIGNPcHRpb25zLmpzb25SZWZzKVxuICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgU3dhZ2dlciBkZWZpbml0aW9uXG4gICAgICAgICAgICBkZWZpbml0aW9uOiBfLmlzU3RyaW5nKGNPcHRpb25zLmRlZmluaXRpb24pID8gcmVtb3RlUmVzdWx0cy52YWx1ZSA6IGNPcHRpb25zLmRlZmluaXRpb24sXG4gICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgU3dhZ2dlciBkZWZpbml0aW9uIHdpdGggaXRzIHJlbW90ZSByZWZlcmVuY2VzIHJlc29sdmVkXG4gICAgICAgICAgICBkZWZpbml0aW9uUmVtb3Rlc1Jlc29sdmVkOiByZW1vdGVSZXN1bHRzLnJlc29sdmVkLFxuICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIFN3YWdnZXIgZGVmaW5pdGlvbiB3aXRoIGFsbCBpdHMgcmVmZXJlbmNlcyByZXNvbHZlZFxuICAgICAgICAgICAgZGVmaW5pdGlvbkFsbFJlc29sdmVkOiByZXN1bHRzLnJlc29sdmVkLFxuICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGxvY2FsIHJlZmVyZW5jZSBkZXRhaWxzIHdpdGggdGhlIHJlbW90ZSByZWZlcmVuY2UgZGV0YWlsc1xuICAgICAgICAgICAgcmVmczogXy5yZWR1Y2UocmVzdWx0cy5yZWZzLCBmdW5jdGlvbiAoYWxsUmVmcywgcmVmRGV0YWlscywgcmVmUHRyKSB7XG4gICAgICAgICAgICAgIHZhciByZWZQYXRoID0gSnNvblJlZnMucGF0aEZyb21QdHIocmVmUHRyKTtcblxuICAgICAgICAgICAgICBpZiAoIV8uaGFzKGFsbFJlZnMsIHJlZlB0cikpIHtcbiAgICAgICAgICAgICAgICBpZiAoXy5oYXMocmVtb3RlUmVzdWx0cy5yZXNvbHZlZCwgcmVmUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgIHJlZkRldGFpbHMudmFsdWUgPSBfLmdldChyZW1vdGVSZXN1bHRzLnJlc29sdmVkLCByZWZQYXRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVmRGV0YWlscy5taXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHJlZkRldGFpbHMudHlwZSA9ICdpbnZhbGlkJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhbGxSZWZzW3JlZlB0cl0gPSByZWZEZXRhaWxzO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGFsbFJlZnM7XG4gICAgICAgICAgICB9LCByZW1vdGVSZXN1bHRzLnJlZnMpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KVxuICAgIC8vIFByb2Nlc3MgdGhlIFN3YWdnZXIgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgQVBJXG4gICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gcmVtb3ZlIGFsbCBjaXJjdWxhciBvYmplY3RzIGFzIHotc2NoZW1hIGRvZXMgbm90IHdvcmsgd2l0aCB0aGVtOlxuICAgICAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemFnZ2luby96LXNjaGVtYS9pc3N1ZXMvMTM3XG4gICAgICBoZWxwZXJzLnJlbW92ZUNpcmN1bGFycyhyZXN1bHRzLmRlZmluaXRpb24pO1xuICAgICAgaGVscGVycy5yZW1vdmVDaXJjdWxhcnMocmVzdWx0cy5kZWZpbml0aW9uUmVtb3Rlc1Jlc29sdmVkKTtcbiAgICAgIGhlbHBlcnMucmVtb3ZlQ2lyY3VsYXJzKHJlc3VsdHMuZGVmaW5pdGlvbkFsbFJlc29sdmVkKTtcblxuICAgICAgLy8gQ3JlYXRlIG9iamVjdCBtb2RlbFxuICAgICAgcmV0dXJuIG5ldyBTd2FnZ2VyQXBpKHJlc3VsdHMuZGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmRlZmluaXRpb25SZW1vdGVzUmVzb2x2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5kZWZpbml0aW9uQWxsUmVzb2x2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5yZWZzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn07XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xudmFyIGZvcm1hdEdlbmVyYXRvcnMgPSByZXF1aXJlKCcuL3ZhbGlkYXRpb24vZm9ybWF0LWdlbmVyYXRvcnMnKTtcbnZhciBmb3JtYXRWYWxpZGF0b3JzID0gcmVxdWlyZSgnLi92YWxpZGF0aW9uL2Zvcm1hdC12YWxpZGF0b3JzJyk7XG52YXIgbW9ja2VyID0gcmVxdWlyZSgnanNvbi1zY2hlbWEtZmFrZXInKTtcbnZhciBaU2NoZW1hID0gcmVxdWlyZSgnei1zY2hlbWEnKTtcblxudmFyIGNvbGxlY3Rpb25Gb3JtYXRzID0gW3VuZGVmaW5lZCwgJ2NzdicsICdtdWx0aScsICdwaXBlcycsICdzc3YnLCAndHN2J107XG52YXIgZHJhZnQwNEpzb24gPSByZXF1aXJlKCcuL2pzb24tc2NoZW1hLWRyYWZ0LTA0Lmpzb24nKTtcbnZhciBkcmFmdDA0VXJsID0gJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hJztcbnZhciBqc29uTW9ja2VyID0gY3JlYXRlSlNPTk1vY2tlcigpO1xudmFyIGpzb25TY2hlbWFWYWxpZGF0b3IgPSBjcmVhdGVKU09OVmFsaWRhdG9yKCk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2Jsb2IvbWFzdGVyL3ZlcnNpb25zLzIuMC5tZCNwYXJhbWV0ZXItb2JqZWN0XG52YXIgcGFyYW1ldGVyU2NoZW1hUHJvcGVydGllcyA9IFtcbiAgJ2FsbG93RW1wdHlWYWx1ZScsXG4gICdkZWZhdWx0JyxcbiAgJ2Rlc2NyaXB0aW9uJyxcbiAgJ2VudW0nLFxuICAnZXhjbHVzaXZlTWF4aW11bScsXG4gICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgJ2Zvcm1hdCcsXG4gICdpdGVtcycsXG4gICdtYXhJdGVtcycsXG4gICdtYXhMZW5ndGgnLFxuICAnbWF4aW11bScsXG4gICdtaW5JdGVtcycsXG4gICdtaW5MZW5ndGgnLFxuICAnbWluaW11bScsXG4gICdtdWx0aXBsZU9mJyxcbiAgJ3BhdHRlcm4nLFxuICAndHlwZScsXG4gICd1bmlxdWVJdGVtcydcbl07XG52YXIgdHlwZXMgPSBbJ2FycmF5JywgJ2Jvb2xlYW4nLCAnaW50ZWdlcicsICdvYmplY3QnLCAnbnVtYmVyJywgJ3N0cmluZyddO1xuXG5mdW5jdGlvbiBjcmVhdGVKU09OTW9ja2VyICgpIHtcbiAgLy8gRXh0ZW5kIGZha2VyLmpzIHRvIG9ubHkgaW5jbHVkZSB0aGUgJ2VuJyBsb2NhbGVcbiAgbW9ja2VyLmV4dGVuZCgnZmFrZXInLCBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgICBmYWtlci5sb2NhbGUgPSAnZW4nO1xuXG4gICAgcmV0dXJuIGZha2VyO1xuICB9KTtcblxuICAvLyBBZGQgdGhlIGN1c3RvbSBmb3JtYXQgZ2VuZXJhdG9yc1xuICBfLmVhY2goZm9ybWF0R2VuZXJhdG9ycywgZnVuY3Rpb24gKGhhbmRsZXIsIG5hbWUpIHtcbiAgICBtb2NrZXIuZm9ybWF0cyhuYW1lLCBoYW5kbGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1vY2tlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSlNPTlZhbGlkYXRvciAoKSB7XG4gIHZhciB2YWxpZGF0b3IgPSBuZXcgWlNjaGVtYSh7XG4gICAgaWdub3JlVW5rbm93bkZvcm1hdHM6IHRydWUsXG4gICAgcmVwb3J0UGF0aEFzQXJyYXk6IHRydWVcbiAgfSk7XG5cbiAgLy8gQWRkIHRoZSBkcmFmdC0wNCBzcGVjXG4gIHZhbGlkYXRvci5zZXRSZW1vdGVSZWZlcmVuY2UoZHJhZnQwNFVybCwgZHJhZnQwNEpzb24pO1xuXG4gIC8vIEFkZCB0aGUgY3VzdG9tIHZhbGlkYXRvcnNcbiAgXy5lYWNoKGZvcm1hdFZhbGlkYXRvcnMsIGZ1bmN0aW9uIChoYW5kbGVyLCBuYW1lKSB7XG4gICAgWlNjaGVtYS5yZWdpc3RlckZvcm1hdChuYW1lLCBoYW5kbGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRvcjtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRXJyb3IgKG9iaikge1xuICAvLyBSZW1vdmUgZmllbGRzIHRoYXQgYXJlIG5vdCBpbXBvcnRhbnQgb3IgYXJlIG5vdCBhIHBhcnQgb2YgdGhlIGV4cG9zZWQgY29udHJhY3RcbiAgZGVsZXRlIG9iai5wYXJhbXM7XG4gIGRlbGV0ZSBvYmouc2NoZW1hSWQ7XG5cbiAgaWYgKG9iai5pbm5lcikge1xuICAgIF8uZWFjaChvYmouaW5uZXIsIGZ1bmN0aW9uIChuT2JqKSB7XG4gICAgICBub3JtYWxpemVFcnJvcihuT2JqKTtcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBIZWxwZXIgbWV0aG9kIHRvIHRha2UgYSBTd2FnZ2VyIHBhcmFtZXRlciBkZWZpbml0aW9uIGFuZCBjb21wdXRlIGl0cyBzY2hlbWEuXG4gKlxuICogRm9yIG5vbi1ib2R5IFN3YWdnZXIgcGFyYW1ldGVycywgdGhlIGRlZmluaXRpb24gaXRzZWxmIGlzIG5vdCBzdWl0YWJsZSBhcyBhIEpTT04gU2NoZW1hIHNvIHdlIG11c3QgY29tcHV0ZSBpdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1EZWYgLSBUaGUgcGFyYW1ldGVyIGRlZmluaXRpb25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgY29tcHV0ZWQgc2NoZW1hXG4gKi9cbm1vZHVsZS5leHBvcnRzLmNvbXB1dGVQYXJhbWV0ZXJTY2hlbWEgPSBmdW5jdGlvbiAocGFyYW1EZWYpIHtcbiAgdmFyIHNjaGVtYTtcblxuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbURlZi5zY2hlbWEpKSB7XG4gICAgc2NoZW1hID0ge307XG5cbiAgICAvLyBCdWlsZCB0aGUgc2NoZW1hIGZyb20gdGhlIHNjaGVtYS1saWtlIHBhcmFtZXRlciBzdHJ1Y3R1cmVcbiAgICBfLmZvckVhY2gocGFyYW1ldGVyU2NoZW1hUHJvcGVydGllcywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJhbURlZltuYW1lXSkpIHtcbiAgICAgICAgc2NoZW1hW25hbWVdID0gcGFyYW1EZWZbbmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2NoZW1hID0gcGFyYW1EZWYuc2NoZW1hO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSByYXcgSmF2YVNjcmlwdCB2YWx1ZSB0byBhIEpTT04gU2NoZW1hIHZhbHVlIGJhc2VkIG9uIGl0cyBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSAtIFRoZSBzY2hlbWEgZm9yIHRoZSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBUaGUgY29udmVyc2lvbiBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29sbGVjdGlvbkZvcm1hdF0gLSBUaGUgY29sbGVjdGlvbiBmb3JtYXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5lbmNvZGluZ10gLSBUaGUgZW5jb2RpbmcgaWYgdGhlIHJhdyB2YWx1ZSBpcyBhIGBCdWZmZXJgXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIGNvbnZlcnRlZCB2YWx1ZVxuICpcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSUYgdGhlIGBjb2xsZWN0aW9uRm9ybWF0YCBvciBgdHlwZWAgaXMgaW52YWxpZCBmb3IgdGhlIGBzY2hlbWFgLCBvciBpZiBjb252ZXJzaW9uIGZhaWxzXG4gKi9cbnZhciBjb252ZXJ0VmFsdWUgPSBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0VmFsdWUgPSBmdW5jdGlvbiAoc2NoZW1hLCBvcHRpb25zLCB2YWx1ZSkge1xuICB2YXIgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlOyAvLyBVc2VkIGluIGVycm9yIHJlcG9ydGluZyBmb3IgaW52YWxpZCB2YWx1ZXNcbiAgdmFyIHR5cGUgPSBfLmlzUGxhaW5PYmplY3Qoc2NoZW1hKSA/IHNjaGVtYS50eXBlIDogdW5kZWZpbmVkO1xuICB2YXIgcFZhbHVlID0gdmFsdWU7XG4gIHZhciBwVHlwZSA9IHR5cGVvZiBwVmFsdWU7XG4gIHZhciBlcnI7XG5cbiAgLy8gSWYgdGhlcmUgaXMgYW4gZXhwbGljaXQgdHlwZSBwcm92aWRlZCwgbWFrZSBzdXJlIGl0J3Mgb25lIG9mIHRoZSBzdXBwb3J0ZWQgb25lc1xuICBpZiAoXy5oYXMoc2NoZW1hLCAndHlwZScpICYmIHR5cGVzLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBcXCd0eXBlXFwnIHZhbHVlOiAnICsgdHlwZSk7XG4gIH1cblxuICAvLyBTaW5jZSBKU09OIFNjaGVtYSBhbGxvd3MgeW91IHRvIG5vdCBzcGVjaWZ5IGEgdHlwZSBhbmQgaXQgaXMgdHJlYXRlZCBhcyBhIHdpbGRjYXJkIG9mIHNvcnRzLCB3ZSBzaG91bGQgbm90IGRvIGFueVxuICAvLyBjb2VyY2lvbiBmb3IgdGhlc2UgdHlwZXMgb2YgdmFsdWVzLlxuICBpZiAoXy5pc1VuZGVmaW5lZCh0eXBlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHZhbHVlLCBkbyBub3QgY29udmVydCBpdFxuICBpZiAoXy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvLyBDb252ZXJ0IEJ1ZmZlciB2YWx1ZSB0byBTdHJpbmdcbiAgLy8gKFdlIHVzZSB0aGlzIHR5cGUgb2YgY2hlY2sgdG8gaWRlbnRpZnkgQnVmZmVyIG9iamVjdHMuICBUaGUgYnJvd3NlciBkb2VzIG5vdCBoYXZlIGEgQnVmZmVyIHR5cGUgYW5kIHRvIGF2b2lkIGhhdmluZ1xuICAvLyAgaW1wb3J0IHRoZSBicm93c2VyaWZ5IGJ1ZmZlciBtb2R1bGUsIHdlIGp1c3QgZG8gYSBzaW1wbGUgY2hlY2suICBUaGlzIGlzIGJyaXR0bGUgYnV0IHNob3VsZCB3b3JrLilcbiAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZS5yZWFkVUludDgpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZyhvcHRpb25zLmVuY29kaW5nKTtcbiAgICBwVmFsdWUgPSB2YWx1ZTtcbiAgICBwVHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBlbXB0eSBhbmQgZW1wdHkgaXMgYWxsb3dlZCwgdXNlIGl0XG4gIGlmIChzY2hlbWEuYWxsb3dFbXB0eVZhbHVlICYmIHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIEF0dGVtcHQgdG8gcGFyc2UgdGhlIHN0cmluZyBhcyBKU09OIGlmIHRoZSB0eXBlIGlzIGFycmF5IG9yIG9iamVjdFxuICBpZiAoWydhcnJheScsICdvYmplY3QnXS5pbmRleE9mKHR5cGUpID4gLTEpIHtcbiAgICB0cnkge1xuICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwganVzdCBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgY2FzZSAnYXJyYXknOlxuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgaWYgKGNvbGxlY3Rpb25Gb3JtYXRzLmluZGV4T2Yob3B0aW9ucy5jb2xsZWN0aW9uRm9ybWF0KSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBcXCdjb2xsZWN0aW9uRm9ybWF0XFwnIHZhbHVlOiAnICsgb3B0aW9ucy5jb2xsZWN0aW9uRm9ybWF0KTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChvcHRpb25zLmNvbGxlY3Rpb25Gb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2Nzdic6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ211bHRpJzpcbiAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BpcGVzJzpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnfCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Nzdic6XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0c3YnOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCdcXHQnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IF8ubWFwKHZhbHVlLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZShfLmlzQXJyYXkoc2NoZW1hLml0ZW1zKSA/IHNjaGVtYS5pdGVtc1tpbmRleF0gOiBzY2hlbWEuaXRlbXMsIG9wdGlvbnMsIGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYnJlYWs7XG4gIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGlmICghXy5pc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdOb3QgYSB2YWxpZCBib29sZWFuOiAnICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJyZWFrO1xuICBjYXNlICdpbnRlZ2VyJzpcbiAgICBpZiAoIV8uaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkgJiYgXy50cmltKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBOYU47XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ05vdCBhIHZhbGlkIGludGVnZXI6ICcgKyBvcmlnaW5hbFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBicmVhaztcbiAgY2FzZSAnbnVtYmVyJzpcbiAgICBpZiAoIV8uaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkgJiYgXy50cmltKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBOYU47XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ05vdCBhIHZhbGlkIG51bWJlcjogJyArIG9yaWdpbmFsVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAnc3RyaW5nJzpcbiAgICBpZiAoWydkYXRlJywgJ2RhdGUtdGltZSddLmluZGV4T2Yoc2NoZW1hLmZvcm1hdCkgPiAtMSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV8uaXNEYXRlKHZhbHVlKSB8fCB2YWx1ZS50b1N0cmluZygpID09PSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdOb3QgYSB2YWxpZCAnICsgc2NoZW1hLmZvcm1hdCArICcgc3RyaW5nOiAnICsgb3JpZ2luYWxWYWx1ZSk7XG5cbiAgICAgICAgZXJyLmNvZGUgPSAnSU5WQUxJRF9GT1JNQVQnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIV8uaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdOb3QgYSB2YWxpZCBzdHJpbmc6ICcgKyB2YWx1ZSk7XG4gICAgfVxuXG4gICAgYnJlYWs7XG5cbiAgICAvLyBubyBkZWZhdWx0XG4gIH1cblxuICBpZiAoIV8uaXNVbmRlZmluZWQoZXJyKSkge1xuICAgIC8vIENvbnZlcnQgdGhlIGVycm9yIHRvIGJlIG1vcmUgbGlrZSBhIEpTT04gU2NoZW1hIHZhbGlkYXRpb24gZXJyb3JcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChlcnIuY29kZSkpIHtcbiAgICAgIGVyci5jb2RlID0gJ0lOVkFMSURfVFlQRSc7XG4gICAgICBlcnIubWVzc2FnZSA9ICdFeHBlY3RlZCB0eXBlICcgKyB0eXBlICsgJyBidXQgZm91bmQgdHlwZSAnICsgcFR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyci5tZXNzYWdlID0gJ09iamVjdCBkaWRuXFwndCBwYXNzIHZhbGlkYXRpb24gZm9yIGZvcm1hdCAnICsgc2NoZW1hLmZvcm1hdCArICc6ICcgKyBwVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gRm9ybWF0IGFuZCB0eXBlIGVycm9ycyByZXNlbWJsZSBKU09OIFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yc1xuICAgIGVyci5mYWlsZWRWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICBlcnIucGF0aCA9IFtdO1xuXG4gICAgdGhyb3cgZXJyO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEganNvbi1zY2hlbWEtZmFrZXIgbW9ja2VyLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBqc29uLXNjaGVtYS1mYWtlciBtb2NrZXIgdG8gdXNlXG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldEpTT05TY2hlbWFNb2NrZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBqc29uTW9ja2VyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgei1zY2hlbWEgdmFsaWRhdG9yLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSB6LXNjaGVtYSB2YWxpZGF0b3IgdG8gdXNlXG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldEpTT05TY2hlbWFWYWxpZGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBqc29uU2NoZW1hVmFsaWRhdG9yO1xufTtcblxubW9kdWxlLmV4cG9ydHMucGFyYW1ldGVyTG9jYXRpb25zID0gWydib2R5JywgJ2Zvcm1EYXRhJywgJ2hlYWRlcicsICdwYXRoJywgJ3F1ZXJ5J107XG5cbi8qKlxuICogUmVwbGFjZXMgdGhlIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gdGhlIHByb3ZpZGVkIG9iamVjdCB3aXRoIGFuIGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIC0gVGhlIEphdmFTY3JpcHQgb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzLnJlbW92ZUNpcmN1bGFycyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgZnVuY3Rpb24gd2FsayAoYW5jZXN0b3JzLCBub2RlLCBwYXRoKSB7XG4gICAgZnVuY3Rpb24gd2Fsa0l0ZW0gKGl0ZW0sIHNlZ21lbnQpIHtcbiAgICAgIHBhdGgucHVzaChzZWdtZW50KTtcbiAgICAgIHdhbGsoYW5jZXN0b3JzLCBpdGVtLCBwYXRoKTtcbiAgICAgIHBhdGgucG9wKCk7XG4gICAgfVxuXG4gICAgLy8gV2UgZG8gbm90IHByb2Nlc3MgY2lyY3VsYXIgb2JqZWN0cyBhZ2FpblxuICAgIGlmIChhbmNlc3RvcnMuaW5kZXhPZihub2RlKSA9PT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ycy5wdXNoKG5vZGUpO1xuXG4gICAgICBpZiAoXy5pc0FycmF5KG5vZGUpIHx8IF8uaXNQbGFpbk9iamVjdChub2RlKSkge1xuICAgICAgICBfLmVhY2gobm9kZSwgZnVuY3Rpb24gKG1lbWJlciwgaW5kZXhPcktleSkge1xuICAgICAgICAgIHdhbGtJdGVtKG1lbWJlciwgaW5kZXhPcktleS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF8uc2V0KG9iaiwgcGF0aCwge30pO1xuICAgIH1cblxuICAgIGFuY2VzdG9ycy5wb3AoKTtcbiAgfVxuXG4gIHdhbGsoW10sIG9iaiwgW10pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5zdXBwb3J0ZWRIdHRwTWV0aG9kcyA9IFsnZ2V0JywgJ3B1dCcsICdwb3N0JywgJ2RlbGV0ZScsICdvcHRpb25zJywgJ2hlYWQnLCAncGF0Y2gnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIHZhbHVlIGFnYWluc3QgdGhlIEpTT04gU2NoZW1hIGJ5IG5hbWUgb3IgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHZhbGlkYXRvciAtIFRoZSBKU09OIFNjaGVtYSB2YWxpZGF0b3IgY3JlYXRlZCB2aWEge0BsaW5rICNjcmVhdGVKU09OVmFsaWRhdG9yfVxuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSAtIFRoZSBKU09OIFNjaGVtYVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZVxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIG9mIHRoZSB2YWxpZGF0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYSA9IGZ1bmN0aW9uICh2YWxpZGF0b3IsIHNjaGVtYSwgdmFsdWUpIHtcbiAgc2NoZW1hID0gXy5jbG9uZURlZXAoc2NoZW1hKTsgLy8gQ2xvbmUgdGhlIHNjaGVtYSBhcyB6LXNjaGVtYSBhbHRlcnMgdGhlIHByb3ZpZGVkIGRvY3VtZW50XG5cbiAgdmFyIHJlc3BvbnNlID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG5cbiAgaWYgKCF2YWxpZGF0b3IudmFsaWRhdGUodmFsdWUsIHNjaGVtYSkpIHtcbiAgICByZXNwb25zZS5lcnJvcnMgPSBfLm1hcCh2YWxpZGF0b3IuZ2V0TGFzdEVycm9ycygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBub3JtYWxpemVFcnJvcihlcnIpO1xuXG4gICAgICByZXR1cm4gZXJyO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGNvbnRlbnQgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFR5cGUgLSBUaGUgQ29udGVudC1UeXBlIHZhbHVlIG9mIHRoZSByZXF1ZXN0L3Jlc3BvbnNlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBzdXBwb3J0ZWRUeXBlcyAtIFRoZSBzdXBwb3J0ZWQgKGRlY2xhcmVkKSBDb250ZW50LVR5cGUgdmFsdWVzIGZvciB0aGUgcmVxdWVzdC9yZXNwb25zZVxuICogQHBhcmFtIHtvYmplY3R9IHJlc3VsdHMgLSBUaGUgcmVzdWx0cyBvYmplY3QgdG8gdXBkYXRlIGluIHRoZSBldmVudCBvZiBhbiBpbnZhbGlkIGNvbnRlbnQgdHlwZVxuICovXG5tb2R1bGUuZXhwb3J0cy52YWxpZGF0ZUNvbnRlbnRUeXBlID0gZnVuY3Rpb24gKGNvbnRlbnRUeXBlLCBzdXBwb3J0ZWRUeXBlcywgcmVzdWx0cykge1xuICB2YXIgcmF3Q29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcblxuICBpZiAoIV8uaXNVbmRlZmluZWQoY29udGVudFR5cGUpKSB7XG4gICAgLy8gaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxNC5odG1sI3NlYzE0LjE3XG4gICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdOyAvLyBTdHJpcCB0aGUgcGFyYW1ldGVyKHMpIGZyb20gdGhlIGNvbnRlbnQgdHlwZVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGV4YWN0IG1hdGNoIG9yIG1pbWUtdHlwZSBvbmx5IG1hdGNoXG4gIGlmIChfLmluZGV4T2Yoc3VwcG9ydGVkVHlwZXMsIHJhd0NvbnRlbnRUeXBlKSA9PT0gLTEgJiYgXy5pbmRleE9mKHN1cHBvcnRlZFR5cGVzLCBjb250ZW50VHlwZSkgPT09IC0xKSB7XG4gICAgcmVzdWx0cy5lcnJvcnMucHVzaCh7XG4gICAgICBjb2RlOiAnSU5WQUxJRF9DT05URU5UX1RZUEUnLFxuICAgICAgbWVzc2FnZTogJ0ludmFsaWQgQ29udGVudC1UeXBlICgnICsgY29udGVudFR5cGUgKyAnKS4gIFRoZXNlIGFyZSBzdXBwb3J0ZWQ6ICcgK1xuICAgICAgICBzdXBwb3J0ZWRUeXBlcy5qb2luKCcsICcpLFxuICAgICAgcGF0aDogW11cbiAgICB9KTtcbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgICBcImlkXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvcmUgc2NoZW1hIG1ldGEtc2NoZW1hXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcIm1pbmltdW1cIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCI6IHtcbiAgICAgICAgICAgIFwiYWxsT2ZcIjogWyB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSwgeyBcImRlZmF1bHRcIjogMCB9IF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzaW1wbGVUeXBlc1wiOiB7XG4gICAgICAgICAgICBcImVudW1cIjogWyBcImFycmF5XCIsIFwiYm9vbGVhblwiLCBcImludGVnZXJcIiwgXCJudWxsXCIsIFwibnVtYmVyXCIsIFwib2JqZWN0XCIsIFwic3RyaW5nXCIgXVxuICAgICAgICB9LFxuICAgICAgICBcInN0cmluZ0FycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcIiRzY2hlbWFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge30sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAwLFxuICAgICAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwicmVnZXhcIlxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImFsbE9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwiYW55T2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJvbmVPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm5vdFwiOiB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgfSxcbiAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiBbIFwibWF4aW11bVwiIF0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiBbIFwibWluaW11bVwiIF1cbiAgICB9LFxuICAgIFwiZGVmYXVsdFwiOiB7fVxufVxuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N3YXk6YXBpJyk7XG52YXIgcGFyc2VVcmwgPSByZXF1aXJlKCd1cmwnKS5wYXJzZTtcbnZhciBQYXRoID0gcmVxdWlyZSgnLi9wYXRoJyk7XG52YXIgdmFsaWRhdG9ycyA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRpb24vdmFsaWRhdG9ycycpO1xuXG4vKipcbiAqIFRoZSBTd2FnZ2VyIEFQSSBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIG9yaWdpbmFsIFN3YWdnZXIgZGVmaW5pdGlvblxuICogQHBhcmFtIHtvYmVqY3R9IGRlZmluaXRpb25SZW1vdGVzUmVzb2x2ZWQgLSBUaGUgU3dhZ2dlciBkZWZpbml0aW9uIHdpdGggYWxsIG9mIGl0cyByZW1vdGUgcmVmZXJlbmNlcyByZXNvbHZlZFxuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb25BbGxSZXNvbHZlZCAtIFRoZSBTd2FnZ2VyIGRlZmluaXRpb24gd2l0aCBhbGwgb2YgaXRzIHJlZmVyZW5jZXMgcmVzb2x2ZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VzIC0gVGhlIGxvY2F0aW9uIGFuZCByZXNvbHV0aW9uIG9mIHRoZSByZXNvbHZlZCByZWZlcmVuY2VzIGluIHRoZSBTd2FnZ2VyIGRlZmluaXRpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHN3YWdnZXJBcGkuY3JlYXRlXG4gKlxuICogQHByb3BlcnR5IHtWYWxpZGF0b3JDYWxsYmFja1tdfSBjdXN0b21WYWxpZGF0b3JzIC0gVGhlIGFycmF5IG9mIGN1c3RvbSB2YWxpZGF0b3JzXG4gKiBAcHJvcGVydHkge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBvcmlnaW5hbCBTd2FnZ2VyIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7b2JlamN0fSBkZWZpbml0aW9uUmVtb3Rlc1Jlc29sdmVkIC0gVGhlIFN3YWdnZXIgZGVmaW5pdGlvbiB3aXRoIGFsbCBvZiBpdHMgcmVtb3RlIHJlZmVyZW5jZXMgcmVzb2x2ZWRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uQWxsUmVzb2x2ZWQgLSBUaGUgU3dhZ2dlciBkZWZpbml0aW9uIHdpdGggYWxsIG9mIGl0cyByZWZlcmVuY2VzIHJlc29sdmVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZG9jdW1lbnRhdGlvbiAtIFRoZSBVUkwgdG8gdGhlIFN3YWdnZXIgZG9jdW1lbnRhdGlvblxuICogQHByb3BlcnR5IHtQYXRoW119IHBhdGhPYmplY3RzIC0gVGhlIHVuaXF1ZSBwYXRoIG9iamVjdHNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvclxuICogQHByb3BlcnR5IHtvYmplY3R9IHJlZmVyZW5jZXMgLSBUaGUgcmVmZXJlbmNlIG1ldGFkYXRhICooU2VlIFtKc29uUmVmc35SZXNvbHZlZFJlZkRldGFpbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS93aGl0bG9ja2pjL2pzb24tcmVmcy9ibG9iL21hc3Rlci9kb2NzL0FQSS5tZCNtb2R1bGVfSnNvblJlZnMuLlJlc29sdmVkUmVmRGV0YWlscykpKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgU3dhZ2dlciBBUEkgdmVyc2lvblxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBTd2FnZ2VyQXBpIChkZWZpbml0aW9uLCBkZWZpbml0aW9uUmVtb3Rlc1Jlc29sdmVkLCBkZWZpbml0aW9uQWxsUmVzb2x2ZWQsIHJlZmVyZW5jZXMsIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gIC8vIEFzc2lnbiBsb2NhbCBwcm9wZXJ0aWVzXG4gIHRoaXMuY3VzdG9tVmFsaWRhdG9ycyA9IFtdO1xuICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICB0aGlzLmRlZmluaXRpb25BbGxSZXNvbHZlZCA9IGRlZmluaXRpb25BbGxSZXNvbHZlZDtcbiAgdGhpcy5kZWZpbml0aW9uUmVtb3Rlc1Jlc29sdmVkID0gZGVmaW5pdGlvblJlbW90ZXNSZXNvbHZlZDtcbiAgdGhpcy5kb2N1bWVudGF0aW9uID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXNwZWMvYmxvYi9tYXN0ZXIvdmVyc2lvbnMvMi4wLm1kJztcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5yZWZlcmVuY2VzID0gcmVmZXJlbmNlcztcbiAgdGhpcy52ZXJzaW9uID0gJzIuMCc7XG5cbiAgLy8gQXNzaWduIGxvY2FsIHByb3BlcnRpZXMgZnJvbSB0aGUgU3dhZ2dlciBkZWZpbml0aW9uIHByb3BlcnRpZXNcbiAgXy5hc3NpZ24odGhpcywgZGVmaW5pdGlvbik7XG5cbiAgLy8gUmVnaXN0ZXIgY3VzdG9tIHZhbGlkYXRvcnNcbiAgXy5lYWNoKG9wdGlvbnMuY3VzdG9tVmFsaWRhdG9ycywgU3dhZ2dlckFwaS5wcm90b3R5cGUucmVnaXN0ZXJWYWxpZGF0b3IsIHRoaXMpO1xuXG4gIC8vIENyZWF0ZSB0aGUgUGF0aCBvYmplY3RzXG4gIHRoaXMucGF0aE9iamVjdHMgPSBfLm1hcChkZWZpbml0aW9uQWxsUmVzb2x2ZWQucGF0aHMsIGZ1bmN0aW9uIChwYXRoRGVmLCBwYXRoKSB7XG4gICAgcmV0dXJuIG5ldyBQYXRoKHRoYXQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhdGhEZWYsXG4gICAgICAgICAgICAgICAgICAgIFsncGF0aHMnLCBwYXRoXSk7XG5cbiAgfSk7XG5cbiAgZGVidWcoJ0NyZWF0aW5nIFN3YWdnZXJBcGkgZnJvbSAlcycsIF8uaXNTdHJpbmcob3B0aW9ucy5kZWZpbml0aW9uKSA/IG9wdGlvbnMuZGVmaW5pdGlvbiA6ICd0aGUgcHJvdmlkZWQgZG9jdW1lbnQnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcGVyYXRpb24gZm9yIHRoZSBnaXZlbiBwYXRoIGFuZCBvcGVyYXRpb24uXG4gKlxuICogKipOb3RlOioqIEJlbG93IGlzIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgdXNlZCB3aGVuIGByZXFPclBhdGhgIGlzIGFuIGBodHRwLkNsaWVudFJlcXVlc3RgICoob3IgZXF1aXZhbGVudCkqOlxuICpcbiAqICAgKiBgbWV0aG9kYFxuICogICAqIGB1cmxgXG4gKlxuICogKihTZWU6IHtAbGluayBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX2NsYXNzX2h0dHBfY2xpZW50cmVxdWVzdH0pKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcGF0aE9yUmVxIC0gVGhlIFN3YWdnZXIgcGF0aCBzdHJpbmcgb3IgdGhlIGh0dHAgY2xpZW50IHJlcXVlc3QgKihvciBlcXVpdmFsZW50KSpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWV0aG9kXSAtIFRoZSBTd2FnZ2VyIG9wZXJhdGlvbiBtZXRob2RcbiAqXG4gKiBAcmV0dXJucyB7T3BlcmF0aW9ufSBUaGUgb3BlcmF0aW9uIGZvciB0aGUgcHJvdmlkZWQgcGF0aCBhbmQgbWV0aG9kIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBubyBvcGVyYXRpb24gZm9yIHRoYXRcbiAqICAgICAgICAgICAgICAgICAgICAgIHBhdGggYW5kIG1ldGhvZCBjb21iaW5hdGlvbi5cbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUuZ2V0T3BlcmF0aW9uID0gZnVuY3Rpb24gKHBhdGhPclJlcSwgbWV0aG9kKSB7XG4gIHZhciBwYXRoT2JqZWN0ID0gdGhpcy5nZXRQYXRoKHBhdGhPclJlcSk7XG4gIHZhciBvcGVyYXRpb247XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhdGhPYmplY3QpKSB7XG4gICAgaWYgKF8uaXNPYmplY3QocGF0aE9yUmVxKSkge1xuICAgICAgbWV0aG9kID0gcGF0aE9yUmVxLm1ldGhvZDtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQobWV0aG9kKSkge1xuICAgICAgbWV0aG9kID0gbWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgb3BlcmF0aW9uID0gcGF0aE9iamVjdC5nZXRPcGVyYXRpb24obWV0aG9kKTtcbiAgfVxuXG4gIHJldHVybiBvcGVyYXRpb247XG59O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIG9wZXJhdGlvbnMgZm9yIHRoZSBwcm92aWRlZCBwYXRoIG9yIGFsbCBvcGVyYXRpb25zIGluIHRoZSBBUEkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXSAtIFRoZSBTd2FnZ2VyIHBhdGhcbiAqXG4gKiBAcmV0dXJucyB7T3BlcmF0aW9uW119IEFsbCBvcGVyYXRpb25zIGZvciB0aGUgcHJvdmlkZWQgcGF0aCBvciBhbGwgQVBJIG9wZXJhdGlvbnMuXG4gKi9cblN3YWdnZXJBcGkucHJvdG90eXBlLmdldE9wZXJhdGlvbnMgPSBmdW5jdGlvbiAocGF0aCkge1xuICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICB2YXIgcGF0aE9iamVjdDtcblxuICBpZiAoXy5pc1VuZGVmaW5lZChwYXRoKSkge1xuICAgIF8uZWFjaCh0aGlzLnBhdGhPYmplY3RzLCBmdW5jdGlvbiAocE9iamVjdCkge1xuICAgICAgb3BlcmF0aW9ucy5wdXNoLmFwcGx5KG9wZXJhdGlvbnMsIHBPYmplY3QuZ2V0T3BlcmF0aW9ucygpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBwYXRoT2JqZWN0ID0gdGhpcy5nZXRQYXRoKHBhdGgpO1xuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhdGhPYmplY3QpKSB7XG4gICAgICBvcGVyYXRpb25zID0gcGF0aE9iamVjdC5nZXRPcGVyYXRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wZXJhdGlvbnM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIG9wZXJhdGlvbnMgZm9yIHRoZSBwcm92aWRlZCB0YWcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFt0YWddIC0gVGhlIFN3YWdnZXIgdGFnXG4gKlxuICogQHJldHVybnMge09wZXJhdGlvbltdfSBBbGwgb3BlcmF0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIHRhZy5cbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUuZ2V0T3BlcmF0aW9uc0J5VGFnID0gZnVuY3Rpb24gKHRhZykge1xuICByZXR1cm4gXy5yZWR1Y2UodGhpcy5wYXRoT2JqZWN0cywgZnVuY3Rpb24gKG9wZXJhdGlvbnMsIHBhdGhPYmplY3QpIHtcbiAgICBvcGVyYXRpb25zLnB1c2guYXBwbHkob3BlcmF0aW9ucywgcGF0aE9iamVjdC5nZXRPcGVyYXRpb25zQnlUYWcodGFnKSk7XG5cbiAgICByZXR1cm4gb3BlcmF0aW9ucztcbiAgfSwgW10pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXRoIG9iamVjdCBmb3IgdGhlIGdpdmVuIHBhdGggb3IgcmVxdWVzdC5cbiAqXG4gKiAqKk5vdGU6KiogQmVsb3cgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB1c2VkIHdoZW4gYHJlcU9yUGF0aGAgaXMgYW4gYGh0dHAuQ2xpZW50UmVxdWVzdGAgKihvciBlcXVpdmFsZW50KSo6XG4gKlxuICogICAqIGB1cmxgXG4gKlxuICogKihTZWU6IHtAbGluayBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX2NsYXNzX2h0dHBfY2xpZW50cmVxdWVzdH0pKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcGF0aE9yUmVxIC0gVGhlIFN3YWdnZXIgcGF0aCBzdHJpbmcgb3IgdGhlIGh0dHAgY2xpZW50IHJlcXVlc3QgKihvciBlcXVpdmFsZW50KSpcbiAqXG4gKiBAcmV0dXJucyB7UGF0aH0gVGhlIGNvcnJlc3BvbmRpbmcgUGF0aCBvYmplY3QgZm9yIHRoZSByZXF1ZXN0ZWQgcGF0aCBvciByZXF1ZXN0LlxuICovXG5Td2FnZ2VyQXBpLnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24gKHBhdGhPclJlcSkge1xuICB2YXIgdXJsO1xuXG4gIGlmIChfLmlzT2JqZWN0KHBhdGhPclJlcSkpIHtcbiAgICB1cmwgPSBwYXJzZVVybChwYXRoT3JSZXEudXJsKS5wYXRobmFtZTtcblxuICAgIHJldHVybiBfLmZpbmQodGhpcy5wYXRoT2JqZWN0cywgZnVuY3Rpb24gKHBhdGhPYmplY3QpIHtcbiAgICAgIHJldHVybiBfLmlzQXJyYXkocGF0aE9iamVjdC5yZWdleHAuZXhlYyh1cmwpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXy5maW5kKHRoaXMucGF0aE9iamVjdHMsIGZ1bmN0aW9uIChwYXRoT2JqZWN0KSB7XG4gICAgICByZXR1cm4gcGF0aE9yUmVxID09PSBwYXRoT2JqZWN0LnBhdGg7XG4gICAgfSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgcGF0aCBvYmplY3RzIGZvciB0aGUgU3dhZ2dlciBBUEkuXG4gKlxuICogQHJldHVybnMge1BhdGhbXX0gVGhlIFBhdGggb2JqZWN0c1xuICovXG5Td2FnZ2VyQXBpLnByb3RvdHlwZS5nZXRQYXRocyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGF0aE9iamVjdHM7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIHZhbGlkYXRvci5cbiAqXG4gKiBAcGFyYW0ge3ZhbGlkYXRvckNhbGxiYWNrfSB2YWxpZGF0b3IgLSBUaGUgdmFsaWRhdG9yXG4gKlxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiB0aGUgdmFsaWRhdG9yIGlzIG5vdCBhIGZ1bmN0aW9uXG4gKi9cblN3YWdnZXJBcGkucHJvdG90eXBlLnJlZ2lzdGVyVmFsaWRhdG9yID0gZnVuY3Rpb24gKHZhbGlkYXRvcikge1xuICBpZiAoXy5pc1VuZGVmaW5lZCh2YWxpZGF0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsaWRhdG9yIGlzIHJlcXVpcmVkJyk7XG4gIH0gZWxzZSBpZiAoIV8uaXNGdW5jdGlvbih2YWxpZGF0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsaWRhdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdGhpcy5jdXN0b21WYWxpZGF0b3JzLnB1c2godmFsaWRhdG9yKTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgdmFsaWRhdGlvbiBvZiB0aGUgU3dhZ2dlciBBUEkgZG9jdW1lbnQocykuXG4gKlxuICogQHJldHVybnMge1ZhbGlkYXRpb25SZXN1bHRzfSBUaGUgdmFsaWRhdGlvbiByZXN1bHRzXG4gKi9cblN3YWdnZXJBcGkucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmVzdWx0cyA9IHtcbiAgICBlcnJvcnM6IFtdLFxuICAgIHdhcm5pbmdzOiBbXVxuICB9O1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gZG9WYWxpZGF0aW9uICh2YWxpZGF0b3IpIHtcbiAgICB2YXIgdlJlc3VsdHMgPSB2YWxpZGF0b3Ioc2VsZik7XG5cbiAgICBpZiAodlJlc3VsdHMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2guYXBwbHkocmVzdWx0cy5lcnJvcnMsIHZSZXN1bHRzLmVycm9ycyk7XG4gICAgfVxuXG4gICAgaWYgKHZSZXN1bHRzLndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdHMud2FybmluZ3MucHVzaC5hcHBseShyZXN1bHRzLndhcm5pbmdzLCB2UmVzdWx0cy53YXJuaW5ncyk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgdGhlIGRvY3VtZW50IHN0cnVjdHVyYWxseVxuICBkb1ZhbGlkYXRpb24odmFsaWRhdG9ycy5qc29uU2NoZW1hVmFsaWRhdG9yKTtcblxuICAvLyBQZXJmb3JtIHJlbWFpbmluZyB2YWxpZGF0aW9uIG9ubHkgaWYgdGhlIGRvY3VtZW50IGlzIHN0cnVjdHVyYWxseSB2YWxpZFxuICBpZiAocmVzdWx0cy5lcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gUnVuIHBsdWdpbiB2YWxpZGF0b3JzXG4gICAgXy5lYWNoKHZhbGlkYXRvcnMuc2VtYW50aWNWYWxpZGF0b3JzLCBkb1ZhbGlkYXRpb24pO1xuXG4gICAgLy8gUnVuIGN1c3RvbSB2YWxpZGF0b3JzXG4gICAgXy5lYWNoKHRoaXMuY3VzdG9tVmFsaWRhdG9ycywgZG9WYWxpZGF0aW9uKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTd2FnZ2VyQXBpO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N3YXk6b3BlcmF0aW9uJyk7XG52YXIgSnNvblJlZnMgPSByZXF1aXJlKCdqc29uLXJlZnMnKTtcbnZhciBQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcmFtZXRlcicpO1xudmFyIFJlc3BvbnNlID0gcmVxdWlyZSgnLi9yZXNwb25zZScpO1xudmFyIGhlbHBlcnMgPSByZXF1aXJlKCcuLi9oZWxwZXJzJyk7XG5cbi8qKlxuICogVGhlIFN3YWdnZXIgT3BlcmF0aW9uIG9iamVjdC5cbiAqXG4gKiAqKk5vdGU6KiogRG8gbm90IHVzZSBkaXJlY3RseS5cbiAqXG4gKiAqKkV4dHJhIFByb3BlcnRpZXM6KiogT3RoZXIgdGhhbiB0aGUgZG9jdW1lbnRlZCBwcm9wZXJ0aWVzLCB0aGlzIG9iamVjdCBhbHNvIGV4cG9zZXMgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGRlZmluaXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtQYXRofSBwYXRoT2JqZWN0IC0gVGhlIFBhdGggb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gVGhlIG9wZXJhdGlvbiBtZXRob2RcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIG9wZXJhdGlvbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoVG9EZWZpbml0aW9uIC0gVGhlIHBhdGggc2VnbWVudHMgdG8gdGhlIG9wZXJhdGlvbiBkZWZpbml0aW9uXG4gKlxuICogQHByb3BlcnR5IHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgb3BlcmF0aW9uIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRob2QgLSBUaGUgSFRUUCBtZXRob2QgZm9yIHRoaXMgb3BlcmF0aW9uXG4gKiBAcHJvcGVydHkge1BhdGh9IHBhdGhPYmplY3QgLSBUaGUgUGF0aCBvYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHBhdGhUb0RlZmluaXRpb24gLSBUaGUgcGF0aCBzZWdtZW50cyB0byB0aGUgb3BlcmF0aW9uIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7UGFyYW1ldGVyW119IHBhcmFtZXRlck9iamVjdHMgLSBUaGUgUGFyYW1ldGVyIG9iamVjdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwdHIgLSBUaGUgSlNPTiBQb2ludGVyIHRvIHRoZSBvcGVyYXRpb25cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBzZWN1cml0eURlZmluaXRpb25zIC0gVGhlIHNlY3VyaXR5IGRlZmluaXRpb25zIHVzZWQgYnkgdGhpcyBvcGVyYXRpb25cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gT3BlcmF0aW9uIChwYXRoT2JqZWN0LCBtZXRob2QsIGRlZmluaXRpb24sIHBhdGhUb0RlZmluaXRpb24pIHtcbiAgdmFyIHNlZW5QYXJhbWV0ZXJzID0gW107XG4gIHZhciB0aGF0ID0gdGhpcztcblxuICAvLyBBc3NpZ24gbG9jYWwgcHJvcGVydGllc1xuICB0aGlzLmNvbnN1bWVzID0gZGVmaW5pdGlvbi5jb25zdW1lcyB8fCBwYXRoT2JqZWN0LmFwaS5jb25zdW1lcyB8fCBbXTtcbiAgdGhpcy5kZWZpbml0aW9uID0gXy5jbG9uZURlZXAoZGVmaW5pdGlvbik7IC8vIENsb25lIHNvIHdlIGRvIG5vdCBhbHRlciB0aGUgb3JpZ2luYWxcbiAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gIHRoaXMucGFyYW1ldGVyT2JqZWN0cyA9IFtdOyAvLyBDb21wdXRlZCBiZWxvd1xuICB0aGlzLnBhdGhPYmplY3QgPSBwYXRoT2JqZWN0O1xuICB0aGlzLnBhdGhUb0RlZmluaXRpb24gPSBwYXRoVG9EZWZpbml0aW9uO1xuICB0aGlzLnByb2R1Y2VzID0gZGVmaW5pdGlvbi5wcm9kdWNlcyB8fCBwYXRoT2JqZWN0LmFwaS5wcm9kdWNlcyB8fCBbXTtcbiAgdGhpcy5wdHIgPSBKc29uUmVmcy5wYXRoVG9QdHIocGF0aFRvRGVmaW5pdGlvbik7XG5cbiAgLy8gQXNzaWduIGxvY2FsIHByb3BlcnRpZXMgZnJvbSB0aGUgU3dhZ2dlciBkZWZpbml0aW9uIHByb3BlcnRpZXNcbiAgXy5hc3NpZ24odGhpcywgZGVmaW5pdGlvbik7XG5cbiAgLy8gRGVmYXVsdCB0byB0aGUgZ2xvYmFsIHNlY3VyaXR5XG4gIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuc2VjdXJpdHkpKSB7XG4gICAgdGhpcy5zZWN1cml0eSA9IHRoaXMuZGVmaW5pdGlvbi5zZWN1cml0eSA9IHBhdGhPYmplY3QuYXBpLmRlZmluaXRpb25BbGxSZXNvbHZlZC5zZWN1cml0eTtcbiAgfVxuXG4gIC8vIEFkZCB0aGUgUGFyYW1ldGVyIG9iamVjdHMgZnJvbSB0aGUgUGF0aCBvYmplY3QgdGhhdCB3ZXJlIG5vdCByZWRlZmluZWQgaW4gdGhlIG9wZXJhdGlvbiBkZWZpbml0aW9uXG4gIHRoaXMucGFyYW1ldGVyT2JqZWN0cyA9IF8ubWFwKHBhdGhPYmplY3QucGFyYW1ldGVyT2JqZWN0cywgZnVuY3Rpb24gKHBhcmFtZXRlck9iamVjdCkge1xuICAgIHNlZW5QYXJhbWV0ZXJzLnB1c2gocGFyYW1ldGVyT2JqZWN0LmluICsgJzonICsgcGFyYW1ldGVyT2JqZWN0Lm5hbWUpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlck9iamVjdDtcbiAgfSk7XG5cbiAgLy8gQ3JlYXRlIFBhcmFtZXRlciBvYmplY3RzIGZyb20gcGFyYW1ldGVycyBkZWZpbmVkIGluIHRoZSBvcGVyYXRpb24gZGVmaW5pdGlvblxuICBfLmVhY2goZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLCBmdW5jdGlvbiAocGFyYW1EZWYsIGluZGV4KSB7XG4gICAgdmFyIGtleSA9IHBhcmFtRGVmLmluICsgJzonICsgcGFyYW1EZWYubmFtZTtcbiAgICB2YXIgc2VlbkluZGV4ID0gc2VlblBhcmFtZXRlcnMuaW5kZXhPZihrZXkpO1xuICAgIHZhciBwYXJhbWV0ZXJPYmplY3QgPSBuZXcgUGFyYW1ldGVyKHRoYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1EZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFRvRGVmaW5pdGlvbi5jb25jYXQoWydwYXJhbWV0ZXJzJywgaW5kZXgudG9TdHJpbmcoKV0pKTtcblxuICAgIGlmIChzZWVuSW5kZXggPiAtMSkge1xuICAgICAgdGhhdC5wYXJhbWV0ZXJPYmplY3RzW3NlZW5JbmRleF0gPSBwYXJhbWV0ZXJPYmplY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQucGFyYW1ldGVyT2JqZWN0cy5wdXNoKHBhcmFtZXRlck9iamVjdCk7XG5cbiAgICAgIHNlZW5QYXJhbWV0ZXJzLnB1c2goa2V5KTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucGFyYW1ldGVycyA9IHRoaXMuZGVmaW5pdGlvbi5wYXJhbWV0ZXJzID0gXy5tYXAodGhpcy5wYXJhbWV0ZXJPYmplY3RzLCBmdW5jdGlvbiAocGFyYW1ldGVyT2JqZWN0KSB7XG4gICAgcmV0dXJuIHBhcmFtZXRlck9iamVjdC5kZWZpbml0aW9uO1xuICB9KTtcblxuICAvLyBDcmVhdGUgcmVzcG9uc2Ugb2JqZWN0cyBmcm9tIHJlc3BvbnNlcyBkZWZpbmVkIGluIHRoZSBvcGVyYXRpb24gZGVmaW5pdGlvblxuICB0aGlzLnJlc3BvbnNlT2JqZWN0cyA9IF8ubWFwKGRlZmluaXRpb24ucmVzcG9uc2VzLCBmdW5jdGlvbiAocmVzcG9uc2VEZWYsIGNvZGUpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoVG9EZWZpbml0aW9uLmNvbmNhdChbJ3Jlc3BvbnNlcycsIGNvZGVdKSk7XG4gIH0pO1xuXG4gIC8vIEJyaW5nIGluIHRoZSBzZWN1cml0eSBkZWZpbml0aW9ucyBmb3IgZWFzaWVyIGFjY2Vzc1xuICB0aGlzLnNlY3VyaXR5RGVmaW5pdGlvbnMgPSBfLnJlZHVjZSh0aGlzLnNlY3VyaXR5LCBmdW5jdGlvbiAoZGVmcywgcmVxcykge1xuICAgIF8uZWFjaChyZXFzLCBmdW5jdGlvbiAocmVxLCBuYW1lKSB7XG4gICAgICB2YXIgZGVmID0gcGF0aE9iamVjdC5hcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLnNlY3VyaXR5RGVmaW5pdGlvbnMgP1xuICAgICAgICAgICAgcGF0aE9iamVjdC5hcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLnNlY3VyaXR5RGVmaW5pdGlvbnNbbmFtZV0gOlxuICAgICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmKSkge1xuICAgICAgICBkZWZzW25hbWVdID0gZGVmO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlZnM7XG4gIH0sIHt9KTtcblxuICBkZWJ1ZygnRm91bmQgb3BlcmF0aW9uIGF0ICVzJywgdGhpcy5wdHIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmFtZXRlciB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFuZCBsb2NhdGlvbiB3aGVuIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlclxuICogQHBhcmFtIHtzdHJpbmd9IFtsb2NhdGlvbl0gLSBUaGUgbG9jYXRpb24gKihgaW5gKSogb2YgdGhlIHBhcmFtZXRlciAqKFVzZWQgZm9yIGRpc2FtYmlndWF0aW9uKSpcbiAqXG4gKiBAcmV0dXJucyB7UGFyYW1ldGVyfSBUaGUgcGFyYW1ldGVyIG1hdGNoaW5nIHRoZSBsb2NhdGlvbiBhbmQgbmFtZSBjb21iaW5hdGlvbiBvciBgdW5kZWZpbmVkYCBpZiB0aGVyZSBpcyBubyBtYXRjaC5cbiAqL1xuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbiAobmFtZSwgbG9jYXRpb24pIHtcbiAgcmV0dXJuIF8uZmluZCh0aGlzLnBhcmFtZXRlck9iamVjdHMsIGZ1bmN0aW9uIChwYXJhbWV0ZXJPYmplY3QpIHtcbiAgICByZXR1cm4gcGFyYW1ldGVyT2JqZWN0Lm5hbWUgPT09IG5hbWUgJiYgKF8uaXNVbmRlZmluZWQobG9jYXRpb24pID8gdHJ1ZSA6IHBhcmFtZXRlck9iamVjdC5pbiA9PT0gbG9jYXRpb24pO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgcGFyYW1ldGVycyBmb3IgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7UGFyYW1ldGVyW119IEFsbCBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9uLlxuICovXG5PcGVyYXRpb24ucHJvdG90eXBlLmdldFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBhcmFtZXRlck9iamVjdHM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlc3BvbnNlIGZvciB0aGUgcmVxdWVzdGVkIHN0YXR1cyBjb2RlIG9yIHRoZSBkZWZhdWx0IHJlc3BvbnNlICooaWYgYXZhaWxhYmxlKSogaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtzdGF0dXNDb2RlPSdkZWZhdWx0J10gLSBUaGUgc3RhdHVzIGNvZGVcbiAqXG4gKiBAcmV0dXJucyB7UmVzcG9uc2V9IFRoZSByZXNwb25zZSBvciB1bmRlZmluZWQgaWYgb25lIGNhbm5vdCBiZSBmb3VuZFxuICovXG5PcGVyYXRpb24ucHJvdG90eXBlLmdldFJlc3BvbnNlID0gZnVuY3Rpb24gKHN0YXR1c0NvZGUpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQoc3RhdHVzQ29kZSkpIHtcbiAgICBzdGF0dXNDb2RlID0gJ2RlZmF1bHQnO1xuICB9IGVsc2UgaWYgKF8uaXNOdW1iZXIoc3RhdHVzQ29kZSkpIHtcbiAgICBzdGF0dXNDb2RlID0gc3RhdHVzQ29kZS50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIF8uZmluZCh0aGlzLmdldFJlc3BvbnNlcygpLCBmdW5jdGlvbiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Quc3RhdHVzQ29kZSA9PT0gc3RhdHVzQ29kZTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIHJlc3BvbnNlcyBmb3IgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7UmVzcG9uc2VbXX0gQWxsIHJlc3BvbnNlcyBmb3IgdGhlIG9wZXJhdGlvbi5cbiAqL1xuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRSZXNwb25zZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlc3BvbnNlT2JqZWN0cztcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSByZXF1ZXN0LlxuICpcbiAqICoqTm90ZToqKiBCZWxvdyBpcyB0aGUgbGlzdCBvZiBgcmVxYCBwcm9wZXJ0aWVzIHVzZWQgKihyZXEgc2hvdWxkIGJlIGFuIGBodHRwLkNsaWVudFJlcXVlc3RgIG9yIGVxdWl2YWxlbnQpKjpcbiAqXG4gKiAgICogYGJvZHlgOiBVc2VkIGZvciBgYm9keWAgYW5kIGBmb3JtRGF0YWAgcGFyYW1ldGVyc1xuICogICAqIGBmaWxlc2A6IFVzZWQgZm9yIGBmb3JtRGF0YWAgcGFyYW1ldGVycyB3aG9zZSBgdHlwZWAgaXMgYGZpbGVgXG4gKiAgICogYGhlYWRlcnNgOiBVc2VkIGZvciBgaGVhZGVyYCBwYXJhbWV0ZXJzIGFuZCBjb25zdW1lc1xuICogICAqIGBxdWVyeWA6IFVzZWQgZm9yIGBxdWVyeWAgcGFyYW1ldGVyc1xuICogICAqIGB1cmxgOiB1c2VkIGZvciBgcGF0aGAgcGFyYW1ldGVyc1xuICpcbiAqIEZvciBgcGF0aGAgcGFyYW1ldGVycywgd2Ugd2lsbCB1c2UgdGhlIG9wZXJhdGlvbidzIGByZWdleHBgIHByb3BlcnR5IHRvIHBhcnNlIG91dCBwYXRoIHBhcmFtZXRlcnMgdXNpbmcgdGhlIGB1cmxgXG4gKiBwcm9wZXJ0eS5cbiAqXG4gKiAqKFNlZToge0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfY2xhc3NfaHR0cF9jbGllbnRyZXF1ZXN0fSkqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHJlcSAtIFRoZSBodHRwIGNsaWVudCByZXF1ZXN0ICoob3IgZXF1aXZhbGVudCkqXG4gKlxuICogQHJldHVybnMge1ZhbGlkYXRpb25SZXN1bHRzfSBUaGUgdmFsaWRhdGlvbiByZXN1bHRzXG4gKi9cbk9wZXJhdGlvbi5wcm90b3R5cGUudmFsaWRhdGVSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICB2YXIgcmVzdWx0cyA9IHtcbiAgICBlcnJvcnM6IFtdLFxuICAgIHdhcm5pbmdzOiBbXVxuICB9O1xuXG4gIC8vIFZhbGlkYXRlIHRoZSBDb250ZW50LVR5cGUgYnV0IG9ubHkgZm9yIFBPU1QgYW5kIFBVVCAoVGhlIHJlc3QgZG8gbm90IGhhdmUgYm9kaWVzKVxuICBpZiAoWydwb3N0JywgJ3B1dCddLmluZGV4T2YodGhpcy5tZXRob2QpID4gLTEpIHtcbiAgICAvLyBEZWZhdWx0cyB0byBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gcGVyIGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjNy5odG1sI3NlYzcuMi4xXG4gICAgaGVscGVycy52YWxpZGF0ZUNvbnRlbnRUeXBlKHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgdGhpcy5jb25zdW1lcywgcmVzdWx0cyk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0aGUgcGFyYW1ldGVyc1xuICBfLmVhY2godGhpcy5nZXRQYXJhbWV0ZXJzKCksIGZ1bmN0aW9uIChwYXJhbSkge1xuICAgIHZhciBwYXJhbVZhbHVlID0gcGFyYW0uZ2V0VmFsdWUocmVxKTtcbiAgICB2YXIgdkVycjtcblxuICAgIGlmICghcGFyYW1WYWx1ZS52YWxpZCkge1xuICAgICAgdkVyciA9IHtcbiAgICAgICAgY29kZTogJ0lOVkFMSURfUkVRVUVTVF9QQVJBTUVURVInLFxuICAgICAgICBlcnJvcnM6IHBhcmFtVmFsdWUuZXJyb3IuZXJyb3JzIHx8IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiBwYXJhbVZhbHVlLmVycm9yLmNvZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBwYXJhbVZhbHVlLmVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICBwYXRoOiBwYXJhbVZhbHVlLmVycm9yLnBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGluOiBwYXJhbVZhbHVlLnBhcmFtZXRlck9iamVjdC5pbixcbiAgICAgICAgLy8gUmVwb3J0IHRoZSBhY3R1YWwgZXJyb3IgaWYgdGhlcmUgaXMgb25seSBvbmUgZXJyb3IuICBPdGhlcndpc2UsIHJlcG9ydCBhIEpTT04gU2NoZW1hIHZhbGlkYXRpb24gZXJyb3IuXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHBhcmFtZXRlciAoJyArIHBhcmFtLm5hbWUgKyAnKTogJyArICgocGFyYW1WYWx1ZS5lcnJvcnMgfHwgW10pLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZhbHVlIGZhaWxlZCBKU09OIFNjaGVtYSB2YWxpZGF0aW9uJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlLmVycm9yLm1lc3NhZ2UpLFxuICAgICAgICBuYW1lOiBwYXJhbVZhbHVlLnBhcmFtZXRlck9iamVjdC5uYW1lLFxuICAgICAgICBwYXRoOiBwYXJhbVZhbHVlLmVycm9yLnBhdGhcbiAgICAgIH07XG5cbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2godkVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge1NlcnZlclJlc3BvbnNlV3JhcHBlcn0gcmVzIC0gVGhlIHJlc3BvbnNlIG9yIHJlc3BvbnNlIGxpa2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMge1ZhbGlkYXRpb25SZXN1bHRzfSBUaGUgdmFsaWRhdGlvbiByZXN1bHRzXG4gKi9cbk9wZXJhdGlvbi5wcm90b3R5cGUudmFsaWRhdGVSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgdmFyIHJlc3VsdHMgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcbiAgdmFyIHJlYWxTdGF0dXNDb2RlID0gcmVzID8gcmVzLnN0YXR1c0NvZGUgOiAnZGVmYXVsdCc7XG4gIHZhciByZXNwb25zZSA9IHRoaXMuZ2V0UmVzcG9uc2UocmVhbFN0YXR1c0NvZGUpO1xuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHJlc3BvbnNlKSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIHJlc3BvbnNlIGZvciB0aGUgcmVxdWVzdGVkIHN0YXR1cywgdXNlIHRoZSBkZWZhdWx0IGlmIHRoZXJlIGlzIG9uZSAoVGhpcyBpcyBTd2FnZ2VyJ3MgYXBwcm9hY2gpXG4gICAgcmVzcG9uc2UgPSB0aGlzLmdldFJlc3BvbnNlKCdkZWZhdWx0Jyk7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXNwb25zZSkpIHtcbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFX0NPREUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGlzIG9wZXJhdGlvbiBkb2VzIG5vdCBoYXZlIGEgZGVmaW5lZCBcXCcnICsgKHJlYWxTdGF0dXNDb2RlID09PSAnZGVmYXVsdCcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbFN0YXR1c0NvZGUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxTdGF0dXNDb2RlICsgJ1xcJyBvciBcXCdkZWZhdWx0JykgKyAnXFwnIHJlc3BvbnNlIGNvZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN1bHRzID0gcmVzcG9uc2UudmFsaWRhdGVSZXNwb25zZShyZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9wZXJhdGlvbjtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMnKTtcbnZhciBKc29uUmVmcyA9IHJlcXVpcmUoJ2pzb24tcmVmcycpO1xuXG4vKipcbiAqIE9iamVjdCByZXByZXNlbnRpbmcgYSBwYXJhbWV0ZXIgdmFsdWUuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtQYXJhbWV0ZXJ9IHBhcmFtZXRlck9iamVjdCAtIFRoZSBQYXJhbWV0ZXIgT2JqZWN0XG4gKiBAcGFyYW0geyp9IHJhdyAtIFRoZSBvcmlnaW5hbC9yYXcgdmFsdWVcbiAqXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvciAtIFRoZSBlcnJvcihzKSBlbmNvdW50ZXJlZCBkdXJpbmcgcHJvY2Vzc2luZy92YWxpZGF0aW5nIHRoZSBwYXJhbWV0ZXIgdmFsdWVcbiAqIEBwcm9wZXJ0eSB7UGFyYW1ldGVyfSBwYXJhbWV0ZXJPYmplY3QgLSBUaGUgUGFyYW1ldGVyIG9iamVjdFxuICogQHByb3BlcnR5IHsqfSByYXcgLSBUaGUgb3JpZ2luYWwgcGFyYW1ldGVyIHZhbHVlICooRG9lcyBub3QgdGFrZSBkZWZhdWx0IHZhbHVlcyBpbnRvIGFjY291bnQpKlxuICogQHByb3BlcnR5IHtib29sZWFufSB2YWxpZCAtIFdoZXRoZXIgb3Igbm90IHRoaXMgcGFyYW1ldGVyIGlzIHZhbGlkIGJhc2VkIG9uIGl0cyBKU09OIFNjaGVtYVxuICogQHByb3BlcnR5IHsqfSB2YWx1ZSAtIFRoZSBwcm9jZXNzZWQgdmFsdWUgKihUYWtlcyBkZWZhdWx0IHZhbHVlcyBpbnRvIGFjY291bnQgYW5kIGRvZXMgdHlwZSBjb2VyY2lvbiB3aGVuIG5lY2Vzc2FyeVxuICogICAgICAgICAgICAgICAgICAgICAgIGFuZCBwb3NzaWJsZSkqLiAgVGhpcyBjYW4gdGhlIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBldmVudCB0aGF0IHByb2Nlc3NpbmcgdGhlIHZhbHVlIGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgaW1wb3NzaWJsZSAqKG1pc3Npbmcgc2NoZW1hIHR5cGUpKiBvciBgdW5kZWZpbmVkYCBpZiBwcm9jZXNzaW5nIHRoZSB2YWx1ZSBmYWlsZWQgKihpbnZhbGlkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMsIGV0Yy4pKi5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUGFyYW1ldGVyVmFsdWUgKHBhcmFtZXRlck9iamVjdCwgcmF3KSB7XG4gIHZhciBwUGF0aCA9IEpzb25SZWZzLnBhdGhGcm9tUHRyKHBhcmFtZXRlck9iamVjdC5wdHIpO1xuICB2YXIgcHJvY2Vzc2VkID0gZmFsc2U7XG4gIHZhciBzY2hlbWEgPSBwYXJhbWV0ZXJPYmplY3QuY29tcHV0ZWRTY2hlbWE7XG4gIHZhciBlcnJvcjtcbiAgdmFyIGlzVmFsaWQ7XG4gIHZhciBwcm9jZXNzZWRWYWx1ZTtcblxuICB0aGlzLnBhcmFtZXRlck9iamVjdCA9IHBhcmFtZXRlck9iamVjdDtcbiAgdGhpcy5yYXcgPSByYXc7XG5cbiAgLy8gVXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBmb3IgJ3ZhbHVlJyB0byBhbGxvdyBmb3IgbGF6eSBwcm9jZXNzaW5nIG9mIHRoZSByYXcgdmFsdWVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuICAgIGVycm9yOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBjYWxsIHRoaXMudmFsaWQgdG8gZW5zdXJlIHdlIHZhbGlkYXRlIHRoZSB2YWx1ZSBwcmlvciB0byByZXR1cm5pbmcgYW55IHZhbHVlc1xuICAgICAgICBpZiAodGhpcy52YWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZDoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgd2FybmluZ3M6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHZhciBza2lwVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgIHZhciB2RXJyb3I7XG5cbiAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQoaXNWYWxpZCkpIHtcbiAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChlcnJvcikpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkbmVzc1xuICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyT2JqZWN0LnJlcXVpcmVkID09PSB0cnVlICYmIF8uaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdkVycm9yID0gbmV3IEVycm9yKCdWYWx1ZSBpcyByZXF1aXJlZCBidXQgd2FzIG5vdCBwcm92aWRlZCcpO1xuXG4gICAgICAgICAgICAgICAgdkVycm9yLmNvZGUgPSAnUkVRVUlSRUQnO1xuXG4gICAgICAgICAgICAgICAgdGhyb3cgdkVycm9yO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gQ2FzZXMgd2UgZG8gbm90IHdhbnQgdG8gZG8gc2NoZW1hIHZhbGlkYXRpb246XG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vICAgKiBUaGUgc2NoZW1hIGV4cGxpY2l0bHkgYWxsb3dzIGVtcHR5IHZhbHVlcyBhbmQgdGhlIHZhbHVlIGlzIGVtcHR5XG4gICAgICAgICAgICAgIC8vICAgKiBUaGUgc2NoZW1hIGFsbG93IG9wdGlvbmFsIHZhbHVlcyBhbmQgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAvLyAgICogVGhlIHNjaGVtYSBkZWZpbmVzIGEgZmlsZSBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgLy8gICAqIFRoZSBzY2hlbWEgaXMgZm9yIGEgc3RyaW5nIHR5cGUgd2l0aCBkYXRlL2RhdGUtdGltZSBmb3JtYXQgYW5kIHRoZSB2YWx1ZSBpcyBhIGRhdGVcbiAgICAgICAgICAgICAgLy8gICAqIFRoZSBzY2hlbWEgaXMgZm9yIGEgc3RyaW5nIHR5cGUgYW5kIHRoZSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyT2JqZWN0LnJlcXVpcmVkID09PSBmYWxzZSAmJiBfLmlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEuYWxsb3dFbXB0eVZhbHVlID09PSB0cnVlICYmIHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXJPYmplY3QudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChbJ2RhdGUnLCAnZGF0ZS10aW1lJ10uaW5kZXhPZihzY2hlbWEuZm9ybWF0KSA+IC0xICYmIF8uaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLnR5cGUgPT09ICdzdHJpbmcnICYmIF8uaXNGdW5jdGlvbih2YWx1ZS5yZWFkVUludDgpKSB7XG4gICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFnYWluc3QgSlNPTiBTY2hlbWFcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBoZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShoZWxwZXJzLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKSwgcGFyYW1ldGVyT2JqZWN0LmdldFNjaGVtYSgpLCB2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdkVycm9yID0gbmV3IEVycm9yKCdWYWx1ZSBmYWlsZWQgSlNPTiBTY2hlbWEgdmFsaWRhdGlvbicpO1xuXG4gICAgICAgICAgICAgICAgdkVycm9yLmNvZGUgPSAnU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEJztcbiAgICAgICAgICAgICAgICB2RXJyb3IuZXJyb3JzID0gcmVzdWx0LmVycm9ycztcblxuICAgICAgICAgICAgICAgIHRocm93IHZFcnJvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGVyci5mYWlsZWRWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZXJyLnBhdGggPSBwUGF0aDtcblxuICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZToge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXByb2Nlc3NlZCkge1xuICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IHJhdztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydC9Db2VyY2UgdGhlIHJhdyB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkVmFsdWUgPSBoZWxwZXJzLmNvbnZlcnRWYWx1ZShzY2hlbWEsIHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRm9ybWF0OiBwYXJhbWV0ZXJPYmplY3QuY29sbGVjdGlvbkZvcm1hdFxuICAgICAgICAgICAgICB9LCByYXcpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBubyB2YWx1ZSBhbmQgdGhlcmUgYXJlIG5vIGVycm9ycywgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIGlmIGF2YWlsYWJsZSAobm8gY29lcmNpb24pXG4gICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChwcm9jZXNzZWRWYWx1ZSkgJiYgXy5pc1VuZGVmaW5lZChlcnJvcikpIHtcbiAgICAgICAgICAgICAgaWYgKHNjaGVtYS50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IF8ucmVkdWNlKHNjaGVtYS5pdGVtcywgZnVuY3Rpb24gKGl0ZW1zLCBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbS5kZWZhdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGl0ZW1zIGhhdmUgYSBkZWZhdWx0IHZhbHVlIHJlc2V0IHRoZSBwcm9jZXNzZWQgdmFsdWUgdG8gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgIGlmIChfLmFsbChwcm9jZXNzZWRWYWx1ZSwgXy5pc1VuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWEuaXRlbXMpICYmICFfLmlzVW5kZWZpbmVkKHNjaGVtYS5pdGVtcy5kZWZhdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IFtzY2hlbWEuaXRlbXMuZGVmYXVsdF07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFZhbHVlID0gc2NoZW1hLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcmFtZXRlclZhbHVlO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N3YXk6cGFyYW1ldGVyJyk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMnKTtcbnZhciBKc29uUmVmcyA9IHJlcXVpcmUoJ2pzb24tcmVmcycpO1xudmFyIFBhcmFtZXRlclZhbHVlID0gcmVxdWlyZSgnLi9wYXJhbWV0ZXItdmFsdWUnKTtcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xuXG4vKipcbiAqIFRoZSBTd2FnZ2VyIFBhcmFtZXRlciBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPcGVyYXRpb258UGF0aH0gb3BPclBhdGhPYmplY3QgLSBUaGUgYE9wZXJhdGlvbmAgb3IgYFBhdGhgIG9iamVjdFxuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgcGFyYW1ldGVyIGRlZmluaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhUb0RlZmluaXRpb24gLSBUaGUgcGF0aCBzZWdtZW50cyB0byB0aGUgcGFyYW1ldGVyIGRlZmluaXRpb25cbiAqXG4gKiBAcHJvcGVydHkge29iamVjdH0gY29tcHV0ZWRTY2hlbWEgLSBUaGUgY29tcHV0ZWQgSlNPTiBTY2hlbWEgZm9yIHRoZSBwYXJhbWV0ZXJcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge09wZXJhdGlvbn0gb3BlcmF0aW9uT2JqZWN0IC0gVGhlIGBPcGVyYXRpb25gIG9iamVjdCB0aGUgcGFyYW1ldGVyIGJlbG9uZ3MgdG8gKihDYW4gYmUgdW5kZWZpbmVkIGZvclxuICogcGF0aC1sZXZlbCBwYXJhbWV0ZXJzKSpcbiAqIEBwcm9wZXJ0eSB7UGF0aH0gcGF0aE9iamVjdCAtIFRoZSBgUGF0aGAgb2JqZWN0IHRoZSBwYXJhbWV0ZXIgYmVsb25ncyB0XG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBwYXRoVG9EZWZpbml0aW9uIC0gVGhlIHBhdGggc2VnbWVudHMgdG8gdGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHRyIC0gVGhlIEpTT04gUG9pbnRlciB0byB0aGUgcGFyYW1ldGVyIGRlZmluaXRpb25cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUGFyYW1ldGVyIChvcE9yUGF0aE9iamVjdCwgZGVmaW5pdGlvbiwgcGF0aFRvRGVmaW5pdGlvbikge1xuICAvLyBBc3NpZ24gbG9jYWwgcHJvcGVydGllc1xuICB0aGlzLmNvbXB1dGVkU2NoZW1hID0gaGVscGVycy5jb21wdXRlUGFyYW1ldGVyU2NoZW1hKGRlZmluaXRpb24pO1xuICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICB0aGlzLnBhdGhUb0RlZmluaXRpb24gPSBwYXRoVG9EZWZpbml0aW9uO1xuICB0aGlzLnB0ciA9IEpzb25SZWZzLnBhdGhUb1B0cihwYXRoVG9EZWZpbml0aW9uKTtcblxuICBpZiAoXy5oYXMob3BPclBhdGhPYmplY3QsICdjb25zdW1lcycpKSB7XG4gICAgdGhpcy5vcGVyYXRpb25PYmplY3QgPSBvcE9yUGF0aE9iamVjdDtcbiAgICB0aGlzLnBhdGhPYmplY3QgPSBvcE9yUGF0aE9iamVjdC5wYXRoT2JqZWN0O1xuICB9IGVsc2Uge1xuICAgIHRoaXMub3BlcmF0aW9uT2JqZWN0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGF0aE9iamVjdCA9IG9wT3JQYXRoT2JqZWN0O1xuICB9XG5cbiAgLy8gQXNzaWduIGxvY2FsIHByb3BlcnRpZXMgZnJvbSB0aGUgU3dhZ2dlciBkZWZpbml0aW9uIHByb3BlcnRpZXNcbiAgXy5hc3NpZ24odGhpcywgZGVmaW5pdGlvbik7XG5cbiAgZGVidWcoJ0ZvdW5kICVzIHBhcmFtZXRlciAoJXMgaW4gJXMpIGF0ICVzJyxcbiAgICAgICAgXy5pc1VuZGVmaW5lZCh0aGlzLm9wZXJhdGlvbk9iamVjdCkgPyAncGF0aC1sZXZlbCcgOiAnb3BlcmF0aW9uJyxcbiAgICAgICAgZGVmaW5pdGlvbi5uYW1lLFxuICAgICAgICBkZWZpbml0aW9uLmluLFxuICAgICAgICB0aGlzLnB0cik7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29tcHV0ZWQgSlNPTiBTY2hlbWEgZm9yIHRoaXMgcGFyYW1ldGVyIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgSlNPTiBTY2hlbWFcbiAqL1xuUGFyYW1ldGVyLnByb3RvdHlwZS5nZXRTY2hlbWEgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNvbXB1dGVkU2NoZW1hO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc2FtcGxlIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyIGJhc2VkIG9uIGl0cyBzY2hlbWE7XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSBzYW1wbGUgdmFsdWVcbiAqL1xuUGFyYW1ldGVyLnByb3RvdHlwZS5nZXRTYW1wbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBoZWxwZXJzLmdldEpTT05TY2hlbWFNb2NrZXIoKSh0aGlzLmNvbXB1dGVkU2NoZW1hKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGFyYW1ldGVyIHZhbHVlIGZyb20gdGhlIHJlcXVlc3QuXG4gKlxuICogKipOb3RlOioqIEJlbG93IGlzIHRoZSBsaXN0IG9mIGByZXFgIHByb3BlcnRpZXMgdXNlZCAqKHJlcSBzaG91bGQgYmUgYW4gYGh0dHAuQ2xpZW50UmVxdWVzdGAgb3IgZXF1aXZhbGVudCkqOlxuICpcbiAqICAgKiBgYm9keWA6IFVzZWQgZm9yIGBib2R5YCBhbmQgYGZvcm1EYXRhYCBwYXJhbWV0ZXJzXG4gKiAgICogYGZpbGVzYDogVXNlZCBmb3IgYGZvcm1EYXRhYCBwYXJhbWV0ZXJzIHdob3NlIGB0eXBlYCBpcyBgZmlsZWBcbiAqICAgKiBgaGVhZGVyc2A6IFVzZWQgZm9yIGBoZWFkZXJgIHBhcmFtZXRlcnNcbiAqICAgKiBgcXVlcnlgOiBVc2VkIGZvciBgcXVlcnlgIHBhcmFtZXRlcnNcbiAqICAgKiBgdXJsYDogdXNlZCBmb3IgYHBhdGhgIHBhcmFtZXRlcnNcbiAqXG4gKiBGb3IgYHBhdGhgIHBhcmFtZXRlcnMsIHdlIHdpbGwgdXNlIHRoZSBvcGVyYXRpb24ncyBgcmVnZXhwYCBwcm9wZXJ0eSB0byBwYXJzZSBvdXQgcGF0aCBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBgdXJsYFxuICogcHJvcGVydHkuXG4gKlxuICogKihTZWU6IHtAbGluayBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX2NsYXNzX2h0dHBfY2xpZW50cmVxdWVzdH0pKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSByZXEgLSBUaGUgaHR0cCBjbGllbnQgcmVxdWVzdCAqKG9yIGVxdWl2YWxlbnQpKlxuICpcbiAqIEByZXR1cm5zIHtQYXJhbWV0ZXJWYWx1ZX0gVGhlIHBhcmFtZXRlciB2YWx1ZSBvYmplY3RcbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGBpbmAgdmFsdWUgb2YgdGhlIHBhcmFtZXRlcidzIHNjaGVtYSBpcyBub3QgdmFsaWQgb3IgaWYgdGhlIGByZXFgIHByb3BlcnR5IHRvIHJldHJpZXZlIHRoZVxuICogICAgICAgICAgICAgICAgIHBhcmFtZXRlciBpcyBtaXNzaW5nLlxuICovXG5QYXJhbWV0ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKHJlcSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChyZXEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVxIGlzIHJlcXVpcmVkJyk7XG4gIH0gZWxzZSBpZiAoaGVscGVycy5wYXJhbWV0ZXJMb2NhdGlvbnMuaW5kZXhPZih0aGlzLmluKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgXFwnaW5cXCcgdmFsdWU6ICcgKyB0aGlzLmluKTtcbiAgfVxuXG4gIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgdGhlIHR5cGUgb2YgcmVxXG5cbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIgdHlwZSA9IHRoaXMuY29tcHV0ZWRTY2hlbWEudHlwZSB8fCAnb2JqZWN0JztcbiAgdmFyIHBhdGhNYXRjaDtcbiAgdmFyIHZhbHVlO1xuXG4gIHN3aXRjaCAodGhpcy5pbikge1xuICBjYXNlICdib2R5JzpcbiAgICB2YWx1ZSA9IHJlcS5ib2R5O1xuICAgIGJyZWFrO1xuICBjYXNlICdmb3JtRGF0YSc6XG4gICAgLy8gRm9yIGZvcm1EYXRhLCBlaXRoZXIgdGhlIHZhbHVlIGlzIGEgZmlsZSBvciBhIHByb3BlcnR5IG9mIHJlcS5ib2R5LiAgcmVxLmJvZHkgYXMgYSB3aG9sZSBjYW4gbmV2ZXIgYmUgdGhlXG4gICAgLy8gdmFsdWUgc2luY2UgdGhlIEpTT04gU2NoZW1hIGZvciBmb3JtRGF0YSBwYXJhbWV0ZXJzIGRvZXMgbm90IGFsbG93IGEgdHlwZSBvZiAnb2JqZWN0Jy5cbiAgICBpZiAodHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXEuZmlsZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVxLmZpbGVzIG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ2Zvcm1EYXRhXFwnIHBhcmFtZXRlcnMgb2YgdHlwZSBcXCdmaWxlXFwnJyk7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gcmVxLmZpbGVzW3RoaXMubmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcS5ib2R5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS5ib2R5IG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ2Zvcm1EYXRhXFwnIHBhcmFtZXRlcnMnKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gcmVxLmJvZHlbdGhpcy5uYW1lXTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgJ2hlYWRlcic6XG4gICAgaWYgKF8uaXNVbmRlZmluZWQocmVxLmhlYWRlcnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS5oZWFkZXJzIG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ2hlYWRlclxcJyBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgdmFsdWUgPSByZXEuaGVhZGVyc1t0aGlzLm5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgYnJlYWs7XG4gIGNhc2UgJ3BhdGgnOlxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcS51cmwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS51cmwgbXVzdCBiZSBwcm92aWRlZCBmb3IgXFwncGF0aFxcJyBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgLy8gU2luY2Ugd2UgZ2V0IHRoZSByYXcgcGF0aCBwYXJhbWV0ZXIgdmFsdWUsIHdlIG5lZWQgdG8gVVJJIGRlY29kZSBpdFxuICAgIHBhdGhNYXRjaCA9IHRoaXMucGF0aE9iamVjdC5yZWdleHAuZXhlYyhwYXJzZVVybChkZWNvZGVVUklDb21wb25lbnQocmVxLnVybCkpLnBhdGhuYW1lKTtcblxuICAgIGlmIChwYXRoTWF0Y2gpIHtcbiAgICAgIHZhbHVlID0gcGF0aE1hdGNoW18uZmluZEluZGV4KHRoaXMucGF0aE9iamVjdC5yZWdleHAua2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5Lm5hbWUgPT09IHRoYXQubmFtZTtcbiAgICAgIH0pICsgMV07XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlICdxdWVyeSc6XG4gICAgaWYgKF8uaXNVbmRlZmluZWQocmVxLnF1ZXJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXEucXVlcnkgbXVzdCBiZSBwcm92aWRlZCBmb3IgXFwncXVlcnlcXCcgcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIHZhbHVlID0gXy5nZXQocmVxLnF1ZXJ5LCB0aGlzLm5hbWUpO1xuXG4gICAgYnJlYWs7XG5cbiAgICAvLyBubyBkZWZhdWx0XG4gIH1cblxuICByZXR1cm4gbmV3IFBhcmFtZXRlclZhbHVlKHRoaXMsIHZhbHVlKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyYW1ldGVyO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N3YXk6cGF0aCcpO1xudmFyIGhlbHBlcnMgPSByZXF1aXJlKCcuLi9oZWxwZXJzJyk7XG52YXIgSnNvblJlZnMgPSByZXF1aXJlKCdqc29uLXJlZnMnKTtcbnZhciBPcGVyYXRpb24gPSByZXF1aXJlKCcuL29wZXJhdGlvbicpO1xudmFyIFBhcmFtZXRlciA9IHJlcXVpcmUoJy4vcGFyYW1ldGVyJyk7XG52YXIgcGF0aFRvUmVnZXhwID0gcmVxdWlyZSgncGF0aC10by1yZWdleHAnKTtcblxuLyoqXG4gKiBUaGUgUGF0aCBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXIgQVBJIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBzdHJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhdGggZGVmaW5pdGlvblxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFRvRGVmaW5pdGlvbiAtIFRoZSBwYXRoIHNlZ21lbnRzIHRvIHRoZSBwYXRoIGRlZmluaXRpb25cbiAqXG4gKiBAcHJvcGVydHkge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyIEFQSSBvYmplY3RcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhdGggZGVmaW5pdGlvblxuICogQHByb3BlcnR5IHtPcGVyYXRpb25bXX0gb3BlcmF0aW9uT2JqZWN0cyAtIFRoZSBgT3BlcmF0aW9uYCBvYmplY3RzXG4gKiBAcHJvcGVydHkge1BhcmFtZXRlcltdfSBwYXJhbWV0ZXJPYmplY3RzIC0gVGhlIHBhdGgtbGV2ZWwgYFBhcmFtZXRlcmAgb2JqZWN0c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBzdHJpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHBhdGhUb0RlZmluaXRpb24gLSBUaGUgcGF0aCBzZWdtZW50cyB0byB0aGUgcGF0aCBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge3B0cn0gcHRyIC0gVGhlIEpTT04gUG9pbnRlciB0byB0aGUgcGF0aFxuICogQHByb3BlcnR5IHtyZWdleHB9IHJlZ2V4cCAtIFRoZSBgUmVnRXhwYCB1c2VkIHRvIG1hdGNoIHJlcXVlc3QgcGF0aHMgYWdhaW5zdCB0aGlzIHBhdGhcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUGF0aCAoYXBpLCBwYXRoLCBkZWZpbml0aW9uLCBwYXRoVG9EZWZpbml0aW9uKSB7XG4gIHZhciBiYXNlUGF0aFByZWZpeCA9IGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQuYmFzZVBhdGggfHwgJy8nO1xuICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgLy8gVE9ETzogV2UgY291bGQvc2hvdWxkIHJlZmFjdG9yIHRoaXMgdG8gdXNlIHRoZSBwYXRoIG1vZHVsZVxuXG4gIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBiYXNlUGF0aFByZWZpeCBzbyB3ZSBkbyBub3QgZW5kIHVwIHdpdGggZG91YmxlIHNsYXNoZXNcbiAgaWYgKGJhc2VQYXRoUHJlZml4LmNoYXJBdChiYXNlUGF0aFByZWZpeC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgYmFzZVBhdGhQcmVmaXggPSBiYXNlUGF0aFByZWZpeC5zdWJzdHJpbmcoMCwgYmFzZVBhdGhQcmVmaXgubGVuZ3RoIC0gMSk7XG4gIH1cblxuICAvLyBBc3NpZ24gbG9jYWwgcHJvcGVydGllc1xuICB0aGlzLmFwaSA9IGFwaTtcbiAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcbiAgdGhpcy5wYXRoID0gcGF0aDtcbiAgdGhpcy5wYXRoVG9EZWZpbml0aW9uID0gcGF0aFRvRGVmaW5pdGlvbjtcbiAgdGhpcy5wdHIgPSBKc29uUmVmcy5wYXRoVG9QdHIocGF0aFRvRGVmaW5pdGlvbik7XG4gIHRoaXMucmVnZXhwID0gcGF0aFRvUmVnZXhwKGJhc2VQYXRoUHJlZml4ICsgcGF0aC5yZXBsYWNlKC9cXHsvZywgJzonKS5yZXBsYWNlKC9cXH0vZywgJycpKTtcblxuICAvLyBBc3NpZ24gbG9jYWwgcHJvcGVydGllcyBmcm9tIHRoZSBTd2FnZ2VyIGRlZmluaXRpb24gcHJvcGVydGllc1xuICBfLmFzc2lnbih0aGlzLCBkZWZpbml0aW9uKTtcblxuICB0aGlzLnBhcmFtZXRlck9iamVjdHMgPSBfLm1hcChkZWZpbml0aW9uLnBhcmFtZXRlcnMsIGZ1bmN0aW9uIChwYXJhbURlZiwgaW5kZXgpIHtcbiAgICByZXR1cm4gbmV3IFBhcmFtZXRlcih0aGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtRGVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhUb0RlZmluaXRpb24uY29uY2F0KFsncGFyYW1ldGVycycsIGluZGV4LnRvU3RyaW5nKCldKSk7XG4gIH0pO1xuICB0aGlzLm9wZXJhdGlvbk9iamVjdHMgPSBfLnJlZHVjZShkZWZpbml0aW9uLCBmdW5jdGlvbiAob3BlcmF0aW9ucywgb3BlcmF0aW9uRGVmLCBtZXRob2QpIHtcbiAgICBpZiAoaGVscGVycy5zdXBwb3J0ZWRIdHRwTWV0aG9kcy5pbmRleE9mKG1ldGhvZCkgPiAtMSkge1xuICAgICAgb3BlcmF0aW9ucy5wdXNoKG5ldyBPcGVyYXRpb24odGhhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkRlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhUb0RlZmluaXRpb24uY29uY2F0KG1ldGhvZCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3BlcmF0aW9ucztcbiAgfSwgW10pO1xuXG4gIGRlYnVnKCdGb3VuZCBwYXRoIGF0ICVzJywgdGhpcy5wdHIpO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgb3BlcmF0aW9uIGZvciB0aGlzIHBhdGggYW5kIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gVGhlIG1ldGhvZFxuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb25bXX0gVGhlIE9wZXJhdGlvbiBvYmplY3RzIGZvciB0aGlzIHBhdGggYW5kIG1ldGhvZCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm8gb3BlcmF0aW9uIGZvciB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgbWV0aG9kLlxuICovXG5QYXRoLnByb3RvdHlwZS5nZXRPcGVyYXRpb24gPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gIHJldHVybiBfLmZpbmQodGhpcy5vcGVyYXRpb25PYmplY3RzLCBmdW5jdGlvbiAob3BlcmF0aW9uT2JqZWN0KSB7XG4gICAgcmV0dXJuIG9wZXJhdGlvbk9iamVjdC5tZXRob2QgPT09IG1ldGhvZDtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgb3BlcmF0aW9ucyBmb3IgdGhpcyBwYXRoLlxuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb25bXX0gVGhlIE9wZXJhdGlvbiBvYmplY3RzIGZvciB0aGlzIHBhdGguXG4gKi9cblBhdGgucHJvdG90eXBlLmdldE9wZXJhdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm9wZXJhdGlvbk9iamVjdHM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgb3BlcmF0aW9ucyBmb3IgdGhpcyBwYXRoIGFuZCB0YWcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyAtIFRoZSB0YWdcbiAqXG4gKiBAcmV0dXJucyB7T3BlcmF0aW9uW119IFRoZSBPcGVyYXRpb24gb2JqZWN0cyBmb3IgdGhpcyBwYXRoIGFuZCB0YWdcbiAqL1xuUGF0aC5wcm90b3R5cGUuZ2V0T3BlcmF0aW9uc0J5VGFnID0gZnVuY3Rpb24gKHRhZykge1xuICByZXR1cm4gXy5maWx0ZXIodGhpcy5vcGVyYXRpb25PYmplY3RzLCBmdW5jdGlvbiAob3BlcmF0aW9uT2JqZWN0KSB7XG4gICAgcmV0dXJuIF8uY29udGFpbnMob3BlcmF0aW9uT2JqZWN0LnRhZ3MsIHRhZyk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHBhcmFtZXRlcnMgZm9yIHRoaXMgcGF0aC5cbiAqXG4gKiBAcmV0dXJucyB7UGFyYW1ldGVyW119IFRoZSBQYXJhbWV0ZXIgb2JqZWN0cyBmb3IgdGhpcyBwYXRoLlxuICovXG5QYXRoLnByb3RvdHlwZS5nZXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJPYmplY3RzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXRoO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N3YXk6cmVzcG9uc2UnKTtcbnZhciBoZWxwZXJzID0gcmVxdWlyZSgnLi4vaGVscGVycycpO1xudmFyIGpzb25WYWxpZGF0b3IgPSBoZWxwZXJzLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKTtcbnZhciBKc29uUmVmcyA9IHJlcXVpcmUoJ2pzb24tcmVmcycpO1xudmFyIFlBTUwgPSByZXF1aXJlKCdqcy15YW1sJyk7XG5cbi8qKlxuICogVGhlIFN3YWdnZXIgUmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBEbyBub3QgdXNlIGRpcmVjdGx5LlxuICpcbiAqICoqRXh0cmEgUHJvcGVydGllczoqKiBPdGhlciB0aGFuIHRoZSBkb2N1bWVudGVkIHByb3BlcnRpZXMsIHRoaXMgb2JqZWN0IGFsc28gZXhwb3NlcyBhbGwgcHJvcGVydGllcyBvZiB0aGUgZGVmaW5pdGlvblxuICogb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T3BlcmF0aW9ufSBvcGVyYXRpb25PYmplY3QgLSBUaGUgYE9wZXJhdGlvbmAgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzQ29kZSAtIFRoZSBzdGF0dXMgY29kZVxuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgcGFyYW1ldGVyIGRlZmluaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhUb0RlZmluaXRpb24gLSBUaGUgcGF0aCBzZWdtZW50cyB0byB0aGUgcGF0aCBkZWZpbml0aW9uXG4gKlxuICogQHByb3BlcnR5IHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgcmVzcG9uc2UgZGVmaW5pdGlvblxuICogQHByb3BlcnR5IHtPcGVyYXRpb259IG9wZXJhdGlvbk9iamVjdCAtIFRoZSBPcGVyYXRpb24gb2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBwYXRoVG9EZWZpbml0aW9uIC0gVGhlIHBhdGggc2VnbWVudHMgdG8gdGhlIHBhdGggZGVmaW5pdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHB0ciAtIFRoZSBKU09OIFBvaW50ZXIgdG8gdGhlIHJlc3BvbnNlIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGF0dXNDb2RlIC0gVGhlIHN0YXR1cyBjb2RlXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFJlc3BvbnNlIChvcGVyYXRpb25PYmplY3QsIHN0YXR1c0NvZGUsIGRlZmluaXRpb24sIHBhdGhUb0RlZmluaXRpb24pIHtcbiAgLy8gQXNzaWduIGxvY2FsIHByb3BlcnRpZXNcbiAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcbiAgdGhpcy5vcGVyYXRpb25PYmplY3QgPSBvcGVyYXRpb25PYmplY3Q7XG4gIHRoaXMucGF0aFRvRGVmaW5pdGlvbiA9IHBhdGhUb0RlZmluaXRpb247XG4gIHRoaXMucHRyID0gSnNvblJlZnMucGF0aFRvUHRyKHBhdGhUb0RlZmluaXRpb24pO1xuICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuXG4gIC8vIEFzc2lnbiBsb2NhbCBwcm9wZXJ0aWVzIGZyb20gdGhlIFN3YWdnZXIgZGVmaW5pdGlvbiBwcm9wZXJ0aWVzXG4gIF8uYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuXG4gIGRlYnVnKCdGb3VuZCAlcyByZXNwb25zZSBhdCAlcycsIHN0YXR1c0NvZGUsIHRoaXMucHRyKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSByZXNwb25zZSBleGFtcGxlIGZvciB0aGUgbWltZS10eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWltZVR5cGVdIC0gVGhlIG1pbWUgdHlwZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByZXNwb25zZSBleGFtcGxlIGFzIGEgc3RyaW5nIG9yIGB1bmRlZmluZWRgIGlmIHRoZSByZXNwb25zZSBjb2RlIGFuZC9vciBtaW1lLXR5cGUgaXMgbWlzc2luZ1xuICovXG5SZXNwb25zZS5wcm90b3R5cGUuZ2V0RXhhbXBsZSA9IGZ1bmN0aW9uIChtaW1lVHlwZSkge1xuICB2YXIgZXhhbXBsZTtcblxuICBpZiAoXy5pc1BsYWluT2JqZWN0KHRoaXMuZGVmaW5pdGlvbi5leGFtcGxlcykpIHtcbiAgICBleGFtcGxlID0gdGhpcy5kZWZpbml0aW9uLmV4YW1wbGVzW21pbWVUeXBlXTtcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZChleGFtcGxlKSAmJiAhXy5pc1N0cmluZyhleGFtcGxlKSkge1xuICAgIGlmIChtaW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICBleGFtcGxlID0gSlNPTi5zdHJpbmdpZnkoZXhhbXBsZSwgbnVsbCwgMik7XG4gICAgfSBlbHNlIGlmIChtaW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gteWFtbCcpIHtcbiAgICAgIGV4YW1wbGUgPSBZQU1MLnNhZmVEdW1wKGV4YW1wbGUsIHtpbmRlbnQ6IDJ9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhhbXBsZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHNhbXBsZSB2YWx1ZS5cbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHNhbXBsZSB2YWx1ZSBmb3IgdGhlIHJlc3BvbnNlLCB3aGljaCBjYW4gYmUgdW5kZWZpbmVkIGlmIHRoZSByZXNwb25zZSBzY2hlbWEgaXMgbm90IHByb3ZpZGVkXG4gKi9cblJlc3BvbnNlLnByb3RvdHlwZS5nZXRTYW1wbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzYW1wbGU7XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZGVmaW5pdGlvbi5zY2hlbWEpKSB7XG4gICAgc2FtcGxlID0gaGVscGVycy5nZXRKU09OU2NoZW1hTW9ja2VyKCkodGhpcy5kZWZpbml0aW9uLnNjaGVtYSk7XG4gIH1cblxuICByZXR1cm4gc2FtcGxlO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7U2VydmVyUmVzcG9uc2VXcmFwcGVyfSByZXMgLSBUaGUgcmVzcG9uc2Ugb3IgcmVzcG9uc2UgbGlrZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7VmFsaWRhdGlvblJlc3VsdHN9IFRoZSB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuUmVzcG9uc2UucHJvdG90eXBlLnZhbGlkYXRlUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzKSB7XG4gIHZhciByZXN1bHRzID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG4gIHZhciBib2R5VmFsdWU7XG4gIHZhciBidlJlc3VsdHM7XG5cbiAgLy8gU2V0IHNvbWUgZGVmYXVsdCBqdXN0IGluIGNhc2VcbiAgaWYgKF8uaXNVbmRlZmluZWQocmVzKSkge1xuICAgIHJlcyA9IHt9O1xuICB9XG5cbiAgaWYgKF8uaXNVbmRlZmluZWQocmVzLmhlYWRlcnMpKSB7XG4gICAgcmVzLmhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHRoZSBDb250ZW50LVR5cGUgZXhjZXB0IGZvciB2b2lkIHJlc3BvbnNlcywgMjA0IHJlc3BvbnNlcyBhbmQgMzA0IHJlc3BvbnNlcyBhcyB0aGV5IGhhdmUgbm8gYm9keVxuICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5kZWZpbml0aW9uLnNjaGVtYSkgJiYgXy5pbmRleE9mKFsnMjA0JywgJzMwNCddLCB0aGlzLnN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIGhlbHBlcnMudmFsaWRhdGVDb250ZW50VHlwZShyZXMuaGVhZGVyc1snY29udGVudC10eXBlJ10sIHRoaXMub3BlcmF0aW9uT2JqZWN0LnByb2R1Y2VzLCByZXN1bHRzKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHRoZSByZXNwb25zZSBoZWFkZXJzXG4gIF8uZm9yRWFjaCh0aGlzLmhlYWRlcnMsIGZ1bmN0aW9uIChzY2hlbWEsIG5hbWUpIHtcbiAgICB2YXIgaGVhZGVyVmFsdWU7XG4gICAgdmFyIGh2UmVzdWx0cztcblxuICAgIHRyeSB7XG4gICAgICBoZWFkZXJWYWx1ZSA9IGhlbHBlcnMuY29udmVydFZhbHVlKHNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IHNjaGVtYS5jb2xsZWN0aW9uRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJseSBjYXV0aW91c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuaGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5oZWFkZXJzW25hbWVdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5kZWZhdWx0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2goe1xuICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRV9IRUFERVInLFxuICAgICAgICBlcnJvcnM6IGVyci5lcnJvcnMgfHwgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6IGVyci5jb2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICBwYXRoOiBlcnIucGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaGVhZGVyICgnICsgbmFtZSArICcpOiAnICsgZXJyLm1lc3NhZ2UsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHBhdGg6IGVyci5wYXRoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gYW1iaWd1aXR5IGluIHRoZSBTd2FnZ2VyIDIuMCBTcGVjaWZpY2F0aW9uIChodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2lzc3Vlcy8zMjEpLCBpdFxuICAgIC8vIGlzIHByb2JhYmx5IG5vdCBhIGdvb2QgaWRlYSB0byBkbyByZXF1aXJlZG5lc3MgY2hlY2tzIGZvciByZXNwb25zZSBoZWFkZXJzLiAgVGhpcyBtZWFucyB3ZSB3aWxsIHZhbGlkYXRlXG4gICAgLy8gZXhpc3RpbmcgaGVhZGVycyBidXQgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgYSBoZWFkZXIgaXMgZGVmaW5lZCBpbiBhIHJlc3BvbnNlIHNjaGVtYSBidXQgbm90IGluIHRoZSByZXNwb25zZS5cbiAgICAvL1xuICAgIC8vIFdlIGFsc28gZG8gbm90IHdhbnQgdG8gdmFsaWRhdGUgZGF0ZSBvYmplY3RzIGJlY2F1c2UgaXQgaXMgcmVkdW5kYW50LiAgSWYgd2UgaGF2ZSBhbHJlYWR5IGNvbnZlcnRlZCB0aGUgdmFsdWVcbiAgICAvLyBmcm9tIGEgc3RyaW5nK2Zvcm1hdCB0byBhIGRhdGUsIHdlIGtub3cgaXQgcGFzc2VzIHNjaGVtYSB2YWxpZGF0aW9uLlxuICAgIGlmICghXy5pc1VuZGVmaW5lZChoZWFkZXJWYWx1ZSkgJiYgIV8uaXNEYXRlKGhlYWRlclZhbHVlKSkge1xuICAgICAgaHZSZXN1bHRzID0gaGVscGVycy52YWxpZGF0ZUFnYWluc3RTY2hlbWEoanNvblZhbGlkYXRvciwgc2NoZW1hLCBoZWFkZXJWYWx1ZSk7XG5cbiAgICAgIGlmIChodlJlc3VsdHMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ0lOVkFMSURfUkVTUE9OU0VfSEVBREVSJyxcbiAgICAgICAgICBlcnJvcnM6IGh2UmVzdWx0cy5lcnJvcnMsXG4gICAgICAgICAgLy8gUmVwb3J0IHRoZSBhY3R1YWwgZXJyb3IgaWYgdGhlcmUgaXMgb25seSBvbmUgZXJyb3IuICBPdGhlcndpc2UsIHJlcG9ydCBhIEpTT04gU2NoZW1hXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBlcnJvci5cbiAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBoZWFkZXIgKCcgKyBuYW1lICsgJyk6ICcgKyAoaHZSZXN1bHRzLmVycm9ycy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZhbHVlIGZhaWxlZCBKU09OIFNjaGVtYSB2YWxpZGF0aW9uJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh2UmVzdWx0cy5lcnJvcnNbMF0ubWVzc2FnZSksXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwYXRoOiBbXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIFZhbGlkYXRlIHJlc3BvbnNlIGZvciBub24tdm9pZCByZXNwb25zZXNcbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZGVmaW5pdGlvbi5zY2hlbWEpICYmIF8uaW5kZXhPZihbJzIwNCcsICczMDQnXSwgdGhpcy5zdGF0dXNDb2RlKSA9PT0gLTEpIHtcbiAgICB0cnkge1xuICAgICAgYm9keVZhbHVlID0gaGVscGVycy5jb252ZXJ0VmFsdWUodGhpcy5kZWZpbml0aW9uLnNjaGVtYSwge1xuICAgICAgICBlbmNvZGluZzogcmVzLmVuY29kaW5nXG4gICAgICB9LCByZXMuYm9keSk7XG4gICAgICBidlJlc3VsdHMgPSBoZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShqc29uVmFsaWRhdG9yLCB0aGlzLmRlZmluaXRpb24uc2NoZW1hLCBib2R5VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYnZSZXN1bHRzID0ge1xuICAgICAgICBlcnJvcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgcGF0aDogZXJyLnBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGJ2UmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFX0JPRFknLFxuICAgICAgICBlcnJvcnM6IGJ2UmVzdWx0cy5lcnJvcnMsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGJvZHk6ICcgKyAoYnZSZXN1bHRzLmVycm9ycy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmFsdWUgZmFpbGVkIEpTT04gU2NoZW1hIHZhbGlkYXRpb24nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidlJlc3VsdHMuZXJyb3JzWzBdLm1lc3NhZ2UpLFxuICAgICAgICBwYXRoOiBbXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc3BvbnNlO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbnZhciBCYXNlNjQgPSByZXF1aXJlKCdqcy1iYXNlNjQnKS5CYXNlNjQ7XG52YXIgc3RyaW5nTW9ja2VyID0gcmVxdWlyZSgnanNvbi1zY2hlbWEtZmFrZXIvbGliL3R5cGVzL3N0cmluZycpO1xuXG4vKipcbiAqIFdlIGhhdmUgdG8gZmlsdGVyIHRoZSBzY2hlbWEgdG8gYXZvaWQgYSBtYXhpbXVtIGNhbGxzdGFjayBpc3N1ZSBieSBkZWxldGluZyB0aGUgZm9ybWF0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWEgLSBUaGUgSlNPTiBTY2hlbWEgb2JqZWN0XG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIGZpbHRlcmVkIHNjaGVtYVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTY2hlbWEgKHNjaGVtYSkge1xuICB2YXIgY1NjaGVtYSA9IF8uY2xvbmVEZWVwKHNjaGVtYSk7XG5cbiAgZGVsZXRlIGNTY2hlbWEuZm9ybWF0O1xuXG4gIHJldHVybiBjU2NoZW1hO1xufVxuXG4vLyBCdWlsZCB0aGUgbGlzdCBvZiBjdXN0b20gSlNPTiBTY2hlbWEgZ2VuZXJhdG9yIGZvcm1hdHNcbm1vZHVsZS5leHBvcnRzLmJ5dGUgPSBmdW5jdGlvbiAoZ2VuLCBzY2hlbWEpIHtcbiAgcmV0dXJuIEJhc2U2NC5lbmNvZGUoc3RyaW5nTW9ja2VyKGZpbHRlclNjaGVtYShzY2hlbWEpKSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5wYXNzd29yZCA9IGZ1bmN0aW9uIChnZW4sIHNjaGVtYSkge1xuICByZXR1cm4gc3RyaW5nTW9ja2VyKGZpbHRlclNjaGVtYShzY2hlbWEpKTtcbn07XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlICgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzLmludDMyID0gbW9kdWxlLmV4cG9ydHMuaW50NjQgPSBmdW5jdGlvbiAodmFsKSB7XG4gIC8vIHotc2NoZW1hIHNlZW1zIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIGZvcm1hdCBldmVuIHdoZW4gdGhlIHR5cGUgaXMga25vd24gdG8gYmUgaW52YWxpZCBzbyB3ZSBtdXN0IGRvIGEgdHlwZVxuICAvLyBjaGVjayBwcmlvciB0byB2YWxpZGF0aW5nIHRoaXMgZm9ybWF0LlxuICByZXR1cm4gXy5pc051bWJlcih2YWwpICYmIHZhbCAlIDEgPT09IDA7XG59O1xuXG4vLyBUaGVzZSBmb3JtYXQgdmFsaWRhdG9ycyB3aWxsIGFsd2F5cyByZXR1cm4gJ3RydWUnIGJlY2F1c2UgdGhleSBhcmUgYWxyZWFkeSB0eXBlIHZhbGlkIGFuZCB0aGVyZSBhcmUgbm8gY29uc3RyYWludHNcbi8vIG9uIHRoZSBmb3JtYXQgdGhhdCB3b3VsZCBwcm9kdWNlIGFuIGludmFsaWQgdmFsdWUuXG5tb2R1bGUuZXhwb3J0cy5ieXRlID0gcmV0dXJuVHJ1ZTtcbm1vZHVsZS5leHBvcnRzLmRvdWJsZSA9IHJldHVyblRydWU7XG5tb2R1bGUuZXhwb3J0cy5mbG9hdCA9IHJldHVyblRydWU7XG5tb2R1bGUuZXhwb3J0cy5wYXNzd29yZCA9IHJldHVyblRydWU7XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwidGl0bGVcIjogXCJBIEpTT04gU2NoZW1hIGZvciBTd2FnZ2VyIDIuMCBBUEkuXCIsXG4gIFwiaWRcIjogXCJodHRwOi8vc3dhZ2dlci5pby92Mi9zY2hlbWEuanNvbiNcIixcbiAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcInN3YWdnZXJcIixcbiAgICBcImluZm9cIixcbiAgICBcInBhdGhzXCJcbiAgXSxcbiAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgXCJeeC1cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgIH1cbiAgfSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcInN3YWdnZXJcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImVudW1cIjogW1xuICAgICAgICBcIjIuMFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBTd2FnZ2VyIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudC5cIlxuICAgIH0sXG4gICAgXCJpbmZvXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvaW5mb1wiXG4gICAgfSxcbiAgICBcImhvc3RcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcInBhdHRlcm5cIjogXCJeW157fS8gOlxcXFxcXFxcXSsoPzo6XFxcXGQrKT8kXCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIGhvc3QgKG5hbWUgb3IgaXApIG9mIHRoZSBBUEkuIEV4YW1wbGU6ICdzd2FnZ2VyLmlvJ1wiXG4gICAgfSxcbiAgICBcImJhc2VQYXRoXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJwYXR0ZXJuXCI6IFwiXi9cIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgYmFzZSBwYXRoIHRvIHRoZSBBUEkuIEV4YW1wbGU6ICcvYXBpJy5cIlxuICAgIH0sXG4gICAgXCJzY2hlbWVzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1lc0xpc3RcIlxuICAgIH0sXG4gICAgXCJjb25zdW1lc1wiOiB7XG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsaXN0IG9mIE1JTUUgdHlwZXMgYWNjZXB0ZWQgYnkgdGhlIEFQSS5cIixcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWVkaWFUeXBlTGlzdFwiXG4gICAgfSxcbiAgICBcInByb2R1Y2VzXCI6IHtcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGxpc3Qgb2YgTUlNRSB0eXBlcyB0aGUgQVBJIGNhbiBwcm9kdWNlLlwiLFxuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tZWRpYVR5cGVMaXN0XCJcbiAgICB9LFxuICAgIFwicGF0aHNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXRoc1wiXG4gICAgfSxcbiAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmaW5pdGlvbnNcIlxuICAgIH0sXG4gICAgXCJwYXJhbWV0ZXJzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyRGVmaW5pdGlvbnNcIlxuICAgIH0sXG4gICAgXCJyZXNwb25zZXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZURlZmluaXRpb25zXCJcbiAgICB9LFxuICAgIFwic2VjdXJpdHlcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eVwiXG4gICAgfSxcbiAgICBcInNlY3VyaXR5RGVmaW5pdGlvbnNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eURlZmluaXRpb25zXCJcbiAgICB9LFxuICAgIFwidGFnc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdGFnXCJcbiAgICAgIH0sXG4gICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwiZXh0ZXJuYWxEb2NzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXh0ZXJuYWxEb2NzXCJcbiAgICB9XG4gIH0sXG4gIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgIFwiaW5mb1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBUEkuXCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwidGl0bGVcIlxuICAgICAgXSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIHVuaXF1ZSBhbmQgcHJlY2lzZSB0aXRsZSBvZiB0aGUgQVBJLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgc2VtYW50aWMgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEFQSS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIEFQSS4gU2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZSB0aXRsZS4gIEdpdEh1YiBGbGF2b3JlZCBNYXJrZG93biBpcyBhbGxvd2VkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGVybXNPZlNlcnZpY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgdGVybXMgb2Ygc2VydmljZSBmb3IgdGhlIEFQSS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRhY3RcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvY29udGFjdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGljZW5zZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9saWNlbnNlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJjb250YWN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRhY3QgaW5mb3JtYXRpb24gZm9yIHRoZSBvd25lcnMgb2YgdGhlIEFQSS5cIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgaWRlbnRpZnlpbmcgbmFtZSBvZiB0aGUgY29udGFjdCBwZXJzb24vb3JnYW5pemF0aW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIFVSTCBwb2ludGluZyB0byB0aGUgY29udGFjdCBpbmZvcm1hdGlvbi5cIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW1haWxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgY29udGFjdCBwZXJzb24vb3JnYW5pemF0aW9uLlwiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwiZW1haWxcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwibGljZW5zZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIlxuICAgICAgXSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgbGljZW5zZSB0eXBlLiBJdCdzIGVuY291cmFnZWQgdG8gdXNlIGFuIE9TSSBjb21wYXRpYmxlIGxpY2Vuc2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgVVJMIHBvaW50aW5nIHRvIHRoZSBsaWNlbnNlLlwiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcInBhdGhzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlbGF0aXZlIHBhdGhzIHRvIHRoZSBpbmRpdmlkdWFsIGVuZHBvaW50cy4gVGhleSBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoZSAnYmFzZVBhdGgnLlwiLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiXi9cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGF0aEl0ZW1cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICB9LFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9uZSBvciBtb3JlIEpTT04gb2JqZWN0cyBkZXNjcmliaW5nIHRoZSBzY2hlbWFzIGJlaW5nIGNvbnN1bWVkIGFuZCBwcm9kdWNlZCBieSB0aGUgQVBJLlwiXG4gICAgfSxcbiAgICBcInBhcmFtZXRlckRlZmluaXRpb25zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyXCJcbiAgICAgIH0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT25lIG9yIG1vcmUgSlNPTiByZXByZXNlbnRhdGlvbnMgZm9yIHBhcmFtZXRlcnNcIlxuICAgIH0sXG4gICAgXCJyZXNwb25zZURlZmluaXRpb25zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcmVzcG9uc2VcIlxuICAgICAgfSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPbmUgb3IgbW9yZSBKU09OIHJlcHJlc2VudGF0aW9ucyBmb3IgcGFyYW1ldGVyc1wiXG4gICAgfSxcbiAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5mb3JtYXRpb24gYWJvdXQgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvblwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidXJsXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiZXhhbXBsZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWVcbiAgICB9LFxuICAgIFwibWltZVR5cGVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIE1JTUUgdHlwZSBvZiB0aGUgSFRUUCBtZXNzYWdlLlwiXG4gICAgfSxcbiAgICBcIm9wZXJhdGlvblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlc3BvbnNlc1wiXG4gICAgICBdLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0YWdzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcInN1bW1hcnlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIHN1bW1hcnkgb2YgdGhlIG9wZXJhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIG9wZXJhdGlvbiwgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRlcm5hbERvY3NcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXh0ZXJuYWxEb2NzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvcGVyYXRpb25JZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIG9wZXJhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInByb2R1Y2VzXCI6IHtcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsaXN0IG9mIE1JTUUgdHlwZXMgdGhlIEFQSSBjYW4gcHJvZHVjZS5cIixcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21lZGlhVHlwZUxpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbnN1bWVzXCI6IHtcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsaXN0IG9mIE1JTUUgdHlwZXMgdGhlIEFQSSBjYW4gY29uc3VtZS5cIixcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21lZGlhVHlwZUxpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhcmFtZXRlcnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyc0xpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlc3BvbnNlc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInNjaGVtZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1lc0xpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcHJlY2F0ZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWN1cml0eVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicGF0aEl0ZW1cIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIiRyZWZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHV0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicG9zdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vcGVyYXRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlbGV0ZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vcGVyYXRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcIm9wdGlvbnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3BlcmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJoZWFkXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0Y2hcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3BlcmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJhbWV0ZXJzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhcmFtZXRlcnNMaXN0XCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJyZXNwb25zZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVzcG9uc2Ugb2JqZWN0cyBuYW1lcyBjYW4gZWl0aGVyIGJlIGFueSB2YWxpZCBIVFRQIHN0YXR1cyBjb2RlIG9yICdkZWZhdWx0Jy5cIixcbiAgICAgIFwibWluUHJvcGVydGllc1wiOiAxLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl4oWzAtOV17M30pJHxeKGRlZmF1bHQpJFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZVZhbHVlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwibm90XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicmVzcG9uc2VWYWx1ZVwiOiB7XG4gICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcmVzcG9uc2VcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9qc29uUmVmZXJlbmNlXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJyZXNwb25zZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImRlc2NyaXB0aW9uXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInNjaGVtYVwiOiB7XG4gICAgICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZmlsZVNjaGVtYVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImhlYWRlcnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvaGVhZGVyc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhhbXBsZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhhbXBsZXNcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImhlYWRlcnNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9oZWFkZXJcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJoZWFkZXJcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJhcnJheVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wcmltaXRpdmVzSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbGxlY3Rpb25Gb3JtYXRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvY29sbGVjdGlvbkZvcm1hdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9kZWZhdWx0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhMZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkxlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5MZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGF0dGVyblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4SXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy91bmlxdWVJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9lbnVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL211bHRpcGxlT2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwidmVuZG9yRXh0ZW5zaW9uXCI6IHtcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBbnkgcHJvcGVydHkgc3RhcnRpbmcgd2l0aCB4LSBpcyB2YWxpZC5cIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgIFwiYWRkaXRpb25hbEl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwiYm9keVBhcmFtZXRlclwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJpblwiLFxuICAgICAgICBcInNjaGVtYVwiXG4gICAgICBdLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVyLiBUaGlzIGNvdWxkIGNvbnRhaW4gZXhhbXBsZXMgb2YgdXNlLiAgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJib2R5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJzY2hlbWFcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICB9LFxuICAgIFwiaGVhZGVyUGFyYW1ldGVyU3ViU2NoZW1hXCI6IHtcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJpblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRldGVybWluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiaGVhZGVyXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYXJyYXlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcHJpbWl0aXZlc0l0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2NvbGxlY3Rpb25Gb3JtYXRcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNaW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4TGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluTGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heEl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5JdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tdWx0aXBsZU9mXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJxdWVyeVBhcmFtZXRlclN1YlNjaGVtYVwiOiB7XG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInJlcXVpcmVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgb3Igb3B0aW9uYWwuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGFyYW1ldGVyLlwiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInF1ZXJ5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWxsb3dFbXB0eVZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvd3Mgc2VuZGluZyBhIHBhcmFtZXRlciBieSBuYW1lIG9ubHkgb3Igd2l0aCBhbiBlbXB0eSB2YWx1ZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImFycmF5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0V2l0aE11bHRpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiZm9ybURhdGFQYXJhbWV0ZXJTdWJTY2hlbWFcIjoge1xuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIG9yIG9wdGlvbmFsLlwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJmb3JtRGF0YVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVyLiBUaGlzIGNvdWxkIGNvbnRhaW4gZXhhbXBsZXMgb2YgdXNlLiAgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImFsbG93RW1wdHlWYWx1ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3dzIHNlbmRpbmcgYSBwYXJhbWV0ZXIgYnkgbmFtZSBvbmx5IG9yIHdpdGggYW4gZW1wdHkgdmFsdWUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJmaWxlXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0V2l0aE11bHRpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicGF0aFBhcmFtZXRlclN1YlNjaGVtYVwiOiB7XG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJyZXF1aXJlZFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJwYXRoXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYXJyYXlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcHJpbWl0aXZlc0l0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2NvbGxlY3Rpb25Gb3JtYXRcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNaW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4TGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluTGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heEl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5JdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tdWx0aXBsZU9mXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJub25Cb2R5UGFyYW1ldGVyXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImluXCIsXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2hlYWRlclBhcmFtZXRlclN1YlNjaGVtYVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2Zvcm1EYXRhUGFyYW1ldGVyU3ViU2NoZW1hXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcXVlcnlQYXJhbWV0ZXJTdWJTY2hlbWFcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXRoUGFyYW1ldGVyU3ViU2NoZW1hXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJwYXJhbWV0ZXJcIjoge1xuICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2JvZHlQYXJhbWV0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9ub25Cb2R5UGFyYW1ldGVyXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJzY2hlbWFcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBkZXRlcm1pbmlzdGljIHZlcnNpb24gb2YgYSBKU09OIFNjaGVtYSBvYmplY3QuXCIsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3RpdGxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL211bHRpcGxlT2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3R5cGVcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImFsbE9mXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkaXNjcmltaW5hdG9yXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwieG1sXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3htbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0ZXJuYWxEb2NzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4dGVybmFsRG9jc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhhbXBsZVwiOiB7fVxuICAgICAgfSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICB9LFxuICAgIFwiZmlsZVNjaGVtYVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGRldGVybWluaXN0aWMgdmVyc2lvbiBvZiBhIEpTT04gU2NoZW1hIG9iamVjdC5cIixcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3RpdGxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXlcIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcImZpbGVcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJyZWFkT25seVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leHRlcm5hbERvY3NcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4YW1wbGVcIjoge31cbiAgICAgIH0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgfSxcbiAgICBcInByaW1pdGl2ZXNJdGVtc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImFycmF5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJzZWN1cml0eVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2VjdXJpdHlSZXF1aXJlbWVudFwiXG4gICAgICB9LFxuICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgfSxcbiAgICBcInNlY3VyaXR5UmVxdWlyZW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBcInhtbFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInByZWZpeFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdHRyaWJ1dGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3cmFwcGVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJ0YWdcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leHRlcm5hbERvY3NcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwic2VjdXJpdHlEZWZpbml0aW9uc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2Jhc2ljQXV0aGVudGljYXRpb25TZWN1cml0eVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2FwaUtleVNlY3VyaXR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgySW1wbGljaXRTZWN1cml0eVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29hdXRoMlBhc3N3b3JkU2VjdXJpdHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJBcHBsaWNhdGlvblNlY3VyaXR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyQWNjZXNzQ29kZVNlY3VyaXR5XCJcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiYmFzaWNBdXRoZW50aWNhdGlvblNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYmFzaWNcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFwaUtleVNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwiaW5cIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYXBpS2V5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiaGVhZGVyXCIsXG4gICAgICAgICAgICBcInF1ZXJ5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJvYXV0aDJJbXBsaWNpdFNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmbG93XCIsXG4gICAgICAgIFwiYXV0aG9yaXphdGlvblVybFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJvYXV0aDJcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmbG93XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJpbXBsaWNpdFwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJTY29wZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvcml6YXRpb25VcmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm9hdXRoMlBhc3N3b3JkU2VjdXJpdHlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcImZsb3dcIixcbiAgICAgICAgXCJ0b2tlblVybFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJvYXV0aDJcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmbG93XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJwYXNzd29yZFwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJTY29wZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInRva2VuVXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJvYXV0aDJBcHBsaWNhdGlvblNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmbG93XCIsXG4gICAgICAgIFwidG9rZW5VcmxcIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwib2F1dGgyXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmxvd1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb25cIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzY29wZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyU2NvcGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0b2tlblVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwib2F1dGgyQWNjZXNzQ29kZVNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmbG93XCIsXG4gICAgICAgIFwiYXV0aG9yaXphdGlvblVybFwiLFxuICAgICAgICBcInRva2VuVXJsXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcIm9hdXRoMlwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZsb3dcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcImFjY2Vzc0NvZGVcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzY29wZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyU2NvcGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JpemF0aW9uVXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidG9rZW5VcmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm9hdXRoMlNjb3Blc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJtZWRpYVR5cGVMaXN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW1lVHlwZVwiXG4gICAgICB9LFxuICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgfSxcbiAgICBcInBhcmFtZXRlcnNMaXN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIHNlbmQgYSB2YWxpZCBBUEkgY2FsbC5cIixcbiAgICAgIFwiYWRkaXRpb25hbEl0ZW1zXCI6IGZhbHNlLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwib25lT2ZcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvanNvblJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgfSxcbiAgICBcInNjaGVtZXNMaXN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHRyYW5zZmVyIHByb3RvY29sIG9mIHRoZSBBUEkuXCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgXCJodHRwXCIsXG4gICAgICAgICAgXCJodHRwc1wiLFxuICAgICAgICAgIFwid3NcIixcbiAgICAgICAgICBcIndzc1wiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgIFwiY3N2XCIsXG4gICAgICAgIFwic3N2XCIsXG4gICAgICAgIFwidHN2XCIsXG4gICAgICAgIFwicGlwZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVmYXVsdFwiOiBcImNzdlwiXG4gICAgfSxcbiAgICBcImNvbGxlY3Rpb25Gb3JtYXRXaXRoTXVsdGlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImVudW1cIjogW1xuICAgICAgICBcImNzdlwiLFxuICAgICAgICBcInNzdlwiLFxuICAgICAgICBcInRzdlwiLFxuICAgICAgICBcInBpcGVzXCIsXG4gICAgICAgIFwibXVsdGlcIlxuICAgICAgXSxcbiAgICAgIFwiZGVmYXVsdFwiOiBcImNzdlwiXG4gICAgfSxcbiAgICBcInRpdGxlXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3RpdGxlXCJcbiAgICB9LFxuICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVzY3JpcHRpb25cIlxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2RlZmF1bHRcIlxuICAgIH0sXG4gICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL211bHRpcGxlT2ZcIlxuICAgIH0sXG4gICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21heGltdW1cIlxuICAgIH0sXG4gICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgIH0sXG4gICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21pbmltdW1cIlxuICAgIH0sXG4gICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgIH0sXG4gICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiXG4gICAgfSxcbiAgICBcIm1pbkxlbmd0aFwiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIlxuICAgIH0sXG4gICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3BhdHRlcm5cIlxuICAgIH0sXG4gICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCJcbiAgICB9LFxuICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdW5pcXVlSXRlbXNcIlxuICAgIH0sXG4gICAgXCJlbnVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2VudW1cIlxuICAgIH0sXG4gICAgXCJqc29uUmVmZXJlbmNlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiJHJlZlwiXG4gICAgICBdLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMnKTtcbnZhciBKc29uUmVmcyA9IHJlcXVpcmUoJ2pzb24tcmVmcycpO1xudmFyIHN3YWdnZXJTY2hlbWEgPSByZXF1aXJlKCcuL3NjaGVtYS5qc29uJyk7XG5cbmZ1bmN0aW9uIGdldFNjaGVtYVByb3BlcnRpZXMgKHNjaGVtYSkge1xuICB2YXIgcHJvcGVydGllcyA9IF8ua2V5cyhzY2hlbWEucHJvcGVydGllcyk7IC8vIFN0YXJ0IHdpdGggdGhlIGRlZmluZWQgcHJvcGVydGllc1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhlIHBhcmVudFxuICBfLmZvckVhY2goc2NoZW1hLmFsbE9mLCBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgXy5mb3JFYWNoKGdldFNjaGVtYVByb3BlcnRpZXMocGFyZW50KSwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICBpZiAoXy5pbmRleE9mKHByb3BlcnRpZXMsIHByb3BlcnR5KSA9PT0gLTEpIHtcbiAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIHdhbGtTY2hlbWEgKGFwaSwgYmxhY2tsaXN0LCBzY2hlbWEsIHBhdGgsIGhhbmRsZXJzLCByZXNwb25zZSkge1xuICB2YXIgdHlwZSA9IHNjaGVtYS50eXBlIHx8ICdvYmplY3QnO1xuXG4gIGZ1bmN0aW9uIHNob3VsZFNraXAgKGNQYXRoKSB7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihibGFja2xpc3QsIEpzb25SZWZzLnBhdGhUb1B0cihjUGF0aCkpID4gLTE7XG4gIH1cblxuICAvLyBEbyBub3QgcHJvY2VzcyBpdGVtcyBpbiB0aGUgYmxhY2tsaXN0IGFzIHRoZXkndmUgYmVlbiBwcm9jZXNzZWQgYWxyZWFkeVxuICBpZiAoc2hvdWxkU2tpcChwYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhbGtlciAocFNjaGVtYSwgcFBhdGgpIHtcbiAgICAvLyBEbyBub3QgcHJvY2VzcyBpdGVtcyBpbiB0aGUgYmxhY2tsaXN0IGFzIHRoZXkndmUgYmVlbiBwcm9jZXNzZWQgYWxyZWFkeVxuICAgIGlmIChzaG91bGRTa2lwKHBQYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIF8uZm9yRWFjaChwU2NoZW1hLCBmdW5jdGlvbiAoaXRlbSwgbmFtZSkge1xuICAgICAgaWYgKF8uaXNOdW1iZXIobmFtZSkpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgaXRlbSwgcFBhdGguY29uY2F0KG5hbWUpLCBoYW5kbGVycywgcmVzcG9uc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHNjaGVtYS5zY2hlbWEpKSB7XG4gICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgc2NoZW1hLnNjaGVtYSwgcGF0aC5jb25jYXQoJ3NjaGVtYScpLCBoYW5kbGVycywgcmVzcG9uc2UpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJheScgJiYgIV8uaXNVbmRlZmluZWQoc2NoZW1hLml0ZW1zKSkge1xuICAgIGlmIChfLmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgd2Fsa2VyKHNjaGVtYS5pdGVtcywgcGF0aC5jb25jYXQoJ2l0ZW1zJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCBzY2hlbWEuaXRlbXMsIHBhdGguY29uY2F0KCdpdGVtcycpLCBoYW5kbGVycywgcmVzcG9uc2UpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMpKSB7XG4gICAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMsIHBhdGguY29uY2F0KCdhZGRpdGlvbmFsUHJvcGVydGllcycpLCBoYW5kbGVycywgcmVzcG9uc2UpO1xuICAgIH1cblxuICAgIF8uZm9yRWFjaChbJ2FsbE9mJywgJ3Byb3BlcnRpZXMnXSwgZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoc2NoZW1hW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgd2Fsa2VyKHNjaGVtYVtwcm9wTmFtZV0sIHBhdGguY29uY2F0KHByb3BOYW1lKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfLmZvckVhY2goaGFuZGxlcnMsIGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgaGFuZGxlcihhcGksIHJlc3BvbnNlLCBzY2hlbWEsIHBhdGgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHJlc29sdmVkIFN3YWdnZXIgZG9jdW1lbnQgYWdhaW5zdCB0aGUgU3dhZ2dlciAyLjAgSlNPTiBTY2hlbWEuXG4gKlxuICogQHBhcmFtIHtTd2FnZ2VyQXBpfSBhcGkgLSBUaGUgU3dhZ2dlckFwaSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBvZiB0aGUgdmFsaWRhdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cnVjdHVyZSAoYXBpKSB7XG4gIHZhciByZXN1bHRzID0gaGVscGVycy52YWxpZGF0ZUFnYWluc3RTY2hlbWEoaGVscGVycy5nZXRKU09OU2NoZW1hVmFsaWRhdG9yKCksIHN3YWdnZXJTY2hlbWEsIGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQpO1xuXG4gIC8vIE1ha2UgY29tcGxleCBKU09OIFNjaGVtYSB2YWxpZGF0aW9uIGVycm9ycyBlYXNpZXIgdG8gdW5kZXJzdGFuZCAoSXNzdWUgMTUpXG4gIHJlc3VsdHMuZXJyb3JzID0gcmVzdWx0cy5lcnJvcnMubWFwKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHZhciBkZWZUeXBlID0gWydhZGRpdGlvbmFsUHJvcGVydGllcycsICdpdGVtcyddLmluZGV4T2YoZXJyb3IucGF0aFtlcnJvci5wYXRoLmxlbmd0aCAtIDFdKSA+IC0xID9cbiAgICAgICAgICAnc2NoZW1hJyA6XG4gICAgICAgICAgZXJyb3IucGF0aFtlcnJvci5wYXRoLmxlbmd0aCAtIDJdO1xuXG4gICAgaWYgKFsnQU5ZX09GX01JU1NJTkcnLCAnT05FX09GX01JU1NJTkcnXS5pbmRleE9mKGVycm9yLmNvZGUpID4gLTEpIHtcbiAgICAgIHN3aXRjaCAoZGVmVHlwZSkge1xuICAgICAgY2FzZSAncGFyYW1ldGVycyc6XG4gICAgICAgIGRlZlR5cGUgPSAncGFyYW1ldGVyJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3Jlc3BvbnNlcyc6XG4gICAgICAgIGRlZlR5cGUgPSAncmVzcG9uc2UnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2NoZW1hJzpcbiAgICAgICAgZGVmVHlwZSArPSAnICcgKyBlcnJvci5wYXRoW2Vycm9yLnBhdGgubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgfVxuXG4gICAgICBlcnJvci5tZXNzYWdlID0gJ05vdCBhIHZhbGlkICcgKyBkZWZUeXBlICsgJyBkZWZpbml0aW9uJztcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3I7XG4gIH0pO1xuXG4gIC8vIFRyZWF0IGludmFsaWQvbWlzc2luZyByZWZlcmVuY2VzIGFzIHN0cnVjdHVyYWwgZXJyb3JzXG4gIF8uZWFjaChhcGkucmVmZXJlbmNlcywgZnVuY3Rpb24gKHJlZkRldGFpbHMsIHJlZlB0cikge1xuICAgIHZhciByZWZQYXRoID0gSnNvblJlZnMucGF0aEZyb21QdHIocmVmUHRyKTtcbiAgICB2YXIgZXJyO1xuXG4gICAgaWYgKHJlZkRldGFpbHMubWlzc2luZykge1xuICAgICAgZXJyID0ge1xuICAgICAgICBjb2RlOiAnVU5SRVNPTFZBQkxFX1JFRkVSRU5DRScsXG4gICAgICAgIG1lc3NhZ2U6ICdSZWZlcmVuY2UgY291bGQgbm90IGJlIHJlc29sdmVkOiAnICsgcmVmRGV0YWlscy51cmksXG4gICAgICAgIHBhdGg6IHJlZlBhdGguY29uY2F0KCckcmVmJylcbiAgICAgIH07XG5cbiAgICAgIGlmIChfLmhhcyhyZWZEZXRhaWxzLCAnZXJyb3InKSkge1xuICAgICAgICBlcnIuZXJyb3IgPSByZWZEZXRhaWxzLmVycm9yO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRzLmVycm9ycy5wdXNoKGVycik7XG4gICAgfSBlbHNlIGlmIChyZWZEZXRhaWxzLnR5cGUgPT09ICdpbnZhbGlkJykge1xuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdJTlZBTElEX1JFRkVSRU5DRScsXG4gICAgICAgIG1lc3NhZ2U6IHJlZkRldGFpbHMuZXJyb3IgfHwgJ0ludmFsaWQgSlNPTiBSZWZlcmVuY2UnLFxuICAgICAgICBwYXRoOiByZWZQYXRoLmNvbmNhdCgnJHJlZicpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKiBTY2hlbWEgT2JqZWN0IFZhbGlkYXRvcnMgKi9cblxuZnVuY3Rpb24gdmFsaWRhdGVBcnJheVR5cGVJdGVtc0V4aXN0ZW5jZSAoYXBpLCByZXNwb25zZSwgc2NoZW1hLCBwYXRoKSB7XG4gIGlmIChzY2hlbWEudHlwZSA9PT0gJ2FycmF5JyAmJiBfLmlzVW5kZWZpbmVkKHNjaGVtYS5pdGVtcykpIHtcbiAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICBjb2RlOiAnT0JKRUNUX01JU1NJTkdfUkVRVUlSRURfUFJPUEVSVFknLFxuICAgICAgbWVzc2FnZTogJ01pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHk6IGl0ZW1zJyxcbiAgICAgIHBhdGg6IHBhdGhcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURlZmF1bHRWYWx1ZSAoYXBpLCByZXNwb25zZSwgc2NoZW1hLCBwYXRoKSB7XG4gIHZhciByZXN1bHQ7XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHNjaGVtYS5kZWZhdWx0KSkge1xuICAgIHJlc3VsdCA9IGhlbHBlcnMudmFsaWRhdGVBZ2FpbnN0U2NoZW1hKGhlbHBlcnMuZ2V0SlNPTlNjaGVtYVZhbGlkYXRvcigpLCBzY2hlbWEsIHNjaGVtYS5kZWZhdWx0KTtcblxuICAgIF8uZm9yRWFjaChyZXN1bHQuZXJyb3JzLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGVycm9yLnBhdGggPSBwYXRoLmNvbmNhdChlcnJvci5wYXRoLmNvbmNhdCgnZGVmYXVsdCcpKTtcblxuICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgXy5mb3JFYWNoKHJlc3VsdC53YXJuaW5ncywgZnVuY3Rpb24gKHdhcm5pbmcpIHtcbiAgICAgIHdhcm5pbmcucGF0aCA9IHBhdGguY29uY2F0KHdhcm5pbmcucGF0aC5wdXNoKCdkZWZhdWx0JykpO1xuXG4gICAgICByZXNwb25zZS53YXJuaW5ncy5wdXNoKHdhcm5pbmcpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hUHJvcGVydGllcyAoYXBpLCByZXNwb25zZSwgc2NoZW1hLCBwYXRoKSB7XG4gIF8uZm9yRWFjaChfLmRpZmZlcmVuY2Uoc2NoZW1hLnJlcXVpcmVkIHx8IFtdLCBnZXRTY2hlbWFQcm9wZXJ0aWVzKHNjaGVtYSkpLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgIGNvZGU6ICdPQkpFQ1RfTUlTU0lOR19SRVFVSVJFRF9QUk9QRVJUWV9ERUZJTklUSU9OJyxcbiAgICAgIG1lc3NhZ2U6ICdNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IGRlZmluaXRpb246ICcgKyBuYW1lLFxuICAgICAgcGF0aDogcGF0aFxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYWxsIHJlZmVyZW5jZXMuXG4gKlxuICogKiBJZGVudGlmaWVzIGNpcmN1bGFyIGluaGVyaXRhbmNlIHJlZmVyZW5jZXNcbiAqICogSWRlbnRpZmllcyB1bnJlZmVyZW5jZWQgcmVmZXJlbmNlYWJsZSBkZWZpbml0aW9uc1xuICogKiBJZGVudGlmaWVzIHVucmVzb2x2YWJsZSByZWZlcmVuY2VzXG4gKlxuICogQHBhcmFtIHtTd2FnZ2VyQXBpfSBhcGkgLSBUaGUgU3dhZ2dlckFwaSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBvZiB0aGUgdmFsaWRhdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW5jZXMgKGFwaSkge1xuICB2YXIgaW5oZXJpdGFuY2VEZXRhaWxzID0ge307XG4gIHZhciByZWZlcmVuY2VhYmxlID0gW107XG4gIHZhciByZWZlcmVuY2VzID0ge307XG4gIHZhciByZXNwb25zZSA9IHtcbiAgICBlcnJvcnM6IFtdLFxuICAgIHdhcm5pbmdzOiBbXVxuICB9O1xuXG4gIGZ1bmN0aW9uIGFkZEFuY2VzdG9yIChkc2MsIGFuYykge1xuICAgIGlmICghXy5oYXMoaW5oZXJpdGFuY2VEZXRhaWxzLCBkc2MpKSB7XG4gICAgICBpbmhlcml0YW5jZURldGFpbHNbZHNjXSA9IHtcbiAgICAgICAgbGluZWFnZTogW10sXG4gICAgICAgIHBhcmVudHM6IFtcbiAgICAgICAgICBhbmNcbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5oZXJpdGFuY2VEZXRhaWxzW2RzY10ucGFyZW50cy5wdXNoKGFuYyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkUmVmZXJlbmNlIChyZWYsIHB0cikge1xuICAgIGlmIChfLmluZGV4T2YocmVmZXJlbmNlcywgcmVmKSA9PT0gLTEpIHtcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlZmVyZW5jZXNbcmVmXSkpIHtcbiAgICAgICAgcmVmZXJlbmNlc1tyZWZdID0gW107XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCByZWZlcmVuY2VzIHRvIGFuY2VzdG9yc1xuICAgICAgaWYgKHJlZi5pbmRleE9mKCdhbGxPZicpID4gLTEpIHtcbiAgICAgICAgYWRkUmVmZXJlbmNlKHJlZi5zdWJzdHJpbmcoMCwgcmVmLmxhc3RJbmRleE9mKCcvYWxsT2YnKSkpO1xuICAgICAgfVxuXG4gICAgICByZWZlcmVuY2VzW3JlZl0ucHVzaChwdHIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNlY3VyaXR5UHJvY2Vzc29yIChwYXRoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzZWN1cml0eSwgaW5kZXgpIHtcbiAgICAgIF8uZm9yRWFjaChzZWN1cml0eSwgZnVuY3Rpb24gKHNjb3BlcywgbmFtZSkge1xuICAgICAgICB2YXIgc2RQYXRoID0gWydzZWN1cml0eURlZmluaXRpb25zJywgbmFtZV07XG4gICAgICAgIHZhciBzZFB0ciA9IEpzb25SZWZzLnBhdGhUb1B0cihzZFBhdGgpO1xuICAgICAgICB2YXIgc3JQYXRoID0gcGF0aC5jb25jYXQoW2luZGV4LnRvU3RyaW5nKCksIG5hbWVdKTtcblxuICAgICAgICAvLyBJZGVudGlmeSBtaXNzaW5nIHJlZmVyZW5jZSB0byB0aGUgc2VjdXJpdHkgZGVmaW5pdGlvblxuICAgICAgICBpZiAoXy5pbmRleE9mKHJlZmVyZW5jZWFibGUsIHNkUHRyKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiAnVU5SRVNPTFZBQkxFX1JFRkVSRU5DRScsXG4gICAgICAgICAgICBtZXNzYWdlOiAnU2VjdXJpdHkgZGVmaW5pdGlvbiBjb3VsZCBub3QgYmUgcmVzb2x2ZWQ6ICcgKyBuYW1lLFxuICAgICAgICAgICAgcGF0aDogc3JQYXRoXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkUmVmZXJlbmNlKHNkUHRyLCBKc29uUmVmcy5wYXRoVG9QdHIoc3JQYXRoKSk7XG5cbiAgICAgICAgICBfLmZvckVhY2goc2NvcGVzLCBmdW5jdGlvbiAoc2NvcGUsIHNJbmRleCkge1xuICAgICAgICAgICAgdmFyIHNzclBhdGggPSBzclBhdGguY29uY2F0KHNJbmRleC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHZhciBzc3JQdHIgPSBKc29uUmVmcy5wYXRoVG9QdHIoc2RQYXRoLmNvbmNhdChbJ3Njb3BlcycsIHNjb3BlXSkpO1xuXG4gICAgICAgICAgICBpZiAoXy5pbmRleE9mKHJlZmVyZW5jZWFibGUsIHNzclB0cikgPT09IC0xKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiAnVU5SRVNPTFZBQkxFX1JFRkVSRU5DRScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1NlY3VyaXR5IHNjb3BlIGRlZmluaXRpb24gY291bGQgbm90IGJlIHJlc29sdmVkOiAnICsgc2NvcGUsXG4gICAgICAgICAgICAgICAgcGF0aDogc3NyUGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZFJlZmVyZW5jZShKc29uUmVmcy5wYXRoVG9QdHIoc2RQYXRoLmNvbmNhdChbJ3Njb3BlcycsIHNjb3BlXSkpLCBzc3JQdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gd2Fsa0xpbmVhZ2UgKHJvb3QsIGlkLCBsaW5lYWdlKSB7XG4gICAgdmFyIGRldGFpbHMgPSBpbmhlcml0YW5jZURldGFpbHNbaWQgfHwgcm9vdF07XG5cbiAgICBpZiAoZGV0YWlscykge1xuICAgICAgXy5lYWNoKGRldGFpbHMucGFyZW50cywgZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICBsaW5lYWdlLnB1c2gocGFyZW50KTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gcGFyZW50KSB7XG4gICAgICAgICAgd2Fsa0xpbmVhZ2Uocm9vdCwgcGFyZW50LCBsaW5lYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSWRlbnRpZnkgcmVmZXJlbmNlYWJsZSBkZWZpbml0aW9uc1xuICBfLmZvckVhY2goYXBpLmRlZmluaXRpb25BbGxSZXNvbHZlZC5kZWZpbml0aW9ucywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgIHJlZmVyZW5jZWFibGUucHVzaChKc29uUmVmcy5wYXRoVG9QdHIoWydkZWZpbml0aW9ucycsIG5hbWVdKSk7XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChhcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLnBhcmFtZXRlcnMsIGZ1bmN0aW9uIChkZWYsIG5hbWUpIHtcbiAgICByZWZlcmVuY2VhYmxlLnB1c2goSnNvblJlZnMucGF0aFRvUHRyKFsncGFyYW1ldGVycycsIG5hbWVdKSk7XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChhcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLnJlc3BvbnNlcywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgIHJlZmVyZW5jZWFibGUucHVzaChKc29uUmVmcy5wYXRoVG9QdHIoWydyZXNwb25zZXMnLCBuYW1lXSkpO1xuICB9KTtcblxuICBfLmZvckVhY2goYXBpLmRlZmluaXRpb25BbGxSZXNvbHZlZC5zZWN1cml0eURlZmluaXRpb25zLCBmdW5jdGlvbiAoZGVmLCBuYW1lKSB7XG4gICAgdmFyIHNQYXRoID0gWydzZWN1cml0eURlZmluaXRpb25zJywgbmFtZV07XG5cbiAgICByZWZlcmVuY2VhYmxlLnB1c2goSnNvblJlZnMucGF0aFRvUHRyKHNQYXRoKSk7XG5cbiAgICBfLmZvckVhY2goZGVmLnNjb3BlcywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uLCBzY29wZSkge1xuICAgICAgdmFyIHB0ciA9IEpzb25SZWZzLnBhdGhUb1B0cihzUGF0aC5jb25jYXQoWydzY29wZXMnLCBzY29wZV0pKTtcblxuICAgICAgaWYgKF8uaW5kZXhPZihyZWZlcmVuY2VhYmxlLCBwdHIpID09PSAtMSkge1xuICAgICAgICByZWZlcmVuY2VhYmxlLnB1c2gocHRyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gSWRlbnRpZnkgcmVmZXJlbmNlcyBhbmQgYnVpbGQgaW5oZXJpdGFuY2UgbW9kZWxcbiAgXy5mb3JFYWNoKGFwaS5yZWZlcmVuY2VzLCBmdW5jdGlvbiAobWV0YWRhdGEsIHB0cikge1xuICAgIHZhciBwdHJQYXRoID0gSnNvblJlZnMucGF0aEZyb21QdHIocHRyKTtcblxuICAgIGlmICghXy5oYXMobWV0YWRhdGEsICdtaXNzaW5nJykpIHtcbiAgICAgIGFkZFJlZmVyZW5jZShtZXRhZGF0YS51cmksIHB0cik7XG5cbiAgICAgIGlmIChwdHJQYXRoW3B0clBhdGgubGVuZ3RoIC0gMl0gPT09ICdhbGxPZicpIHtcbiAgICAgICAgYWRkQW5jZXN0b3IoSnNvblJlZnMucGF0aFRvUHRyKHB0clBhdGguc2xpY2UoMCwgcHRyUGF0aC5sZW5ndGggLSAyKSksIG1ldGFkYXRhLnVyaSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBJZGVudGlmeSBjaXJjdWxhciBpbmhlcml0YW5jZVxuICBfLmZvckVhY2goaW5oZXJpdGFuY2VEZXRhaWxzLCBmdW5jdGlvbiAoZGV0YWlscywgcHRyKSB7XG4gICAgd2Fsa0xpbmVhZ2UocHRyLCB1bmRlZmluZWQsIGRldGFpbHMubGluZWFnZSk7XG5cbiAgICBpZiAoZGV0YWlscy5saW5lYWdlLmxlbmd0aCA+IDEgJiYgZGV0YWlscy5saW5lYWdlW2RldGFpbHMubGluZWFnZS5sZW5ndGggLSAxXSA9PT0gcHRyIHx8XG4gICAgICAgIGRldGFpbHMucGFyZW50c1swXSA9PT0gcHRyKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdDSVJDVUxBUl9JTkhFUklUQU5DRScsXG4gICAgICAgIGxpbmVhZ2U6IFtwdHJdLmNvbmNhdChkZXRhaWxzLmxpbmVhZ2UpLFxuICAgICAgICBtZXNzYWdlOiAnU2NoZW1hIG9iamVjdCBpbmhlcml0cyBmcm9tIGl0c2VsZjogJyArIHB0cixcbiAgICAgICAgcGF0aDogSnNvblJlZnMucGF0aEZyb21QdHIocHRyKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBJZGVudGlmeSByZWZlcmVuY2VzIGFuZCB2YWxpZGF0ZSBtaXNzaW5nIHJlZmVyZW5jZXMgZm9yIG5vbi1KU09OIFJlZmVyZW5jZXMgKHNlY3VyaXR5KVxuICBfLmZvckVhY2goYXBpLmRlZmluaXRpb25BbGxSZXNvbHZlZC5zZWN1cml0eSwgY3JlYXRlU2VjdXJpdHlQcm9jZXNzb3IoWydzZWN1cml0eSddKSk7XG5cbiAgXy5mb3JFYWNoKGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQucGF0aHMsIGZ1bmN0aW9uIChwYXRoRGVmLCBuYW1lKSB7XG4gICAgdmFyIHBQYXRoID0gWydwYXRocycsIG5hbWVdO1xuXG4gICAgXy5mb3JFYWNoKHBhdGhEZWYuc2VjdXJpdHksIGNyZWF0ZVNlY3VyaXR5UHJvY2Vzc29yKHBQYXRoLmNvbmNhdCgnc2VjdXJpdHknKSkpO1xuXG4gICAgXy5mb3JFYWNoKHBhdGhEZWYsIGZ1bmN0aW9uIChvcGVyYXRpb25EZWYsIG1ldGhvZCkge1xuICAgICAgLy8gRG8gbm90IHByb2Nlc3Mgbm9uLW9wZXJhdGlvbnNcbiAgICAgIGlmIChfLmluZGV4T2YoaGVscGVycy5zdXBwb3J0ZWRIdHRwTWV0aG9kcywgbWV0aG9kKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfLmZvckVhY2gob3BlcmF0aW9uRGVmLnNlY3VyaXR5LFxuICAgICAgICAgICAgICAgIGNyZWF0ZVNlY3VyaXR5UHJvY2Vzc29yKHBQYXRoLmNvbmNhdChbbWV0aG9kLCAnc2VjdXJpdHknXSkpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gSWRlbnRpZnkgdW51c2VkIHJlZmVyZW5jZXMgKG1pc3NpbmcgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoYW5kbGVkIGFib3ZlKVxuICBfLmZvckVhY2goXy5kaWZmZXJlbmNlKHJlZmVyZW5jZWFibGUsIE9iamVjdC5rZXlzKHJlZmVyZW5jZXMpKSwgZnVuY3Rpb24gKHB0cikge1xuICAgIHJlc3BvbnNlLndhcm5pbmdzLnB1c2goe1xuICAgICAgY29kZTogJ1VOVVNFRF9ERUZJTklUSU9OJyxcbiAgICAgIG1lc3NhZ2U6ICdEZWZpbml0aW9uIGlzIG5vdCB1c2VkOiAnICsgcHRyLFxuICAgICAgcGF0aDogSnNvblJlZnMucGF0aEZyb21QdHIocHRyKVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFsbCBzY2hlbWEgb2JqZWN0cyBhbmQgc2NoZW1hLWxpa2Ugb2JqZWN0cyAobm9uLWJvZHkgcGF0aCBwYXJhbWV0ZXJzKS5cbiAqXG4gKiAqIFZhbGlkYXRlcyBjaXJjdWxhciByZWZlcmVuY2VzIHJlbGF0ZWQgdG8gY29tcG9zaXRpb24vaW5oZXJpdGFuY2VcbiAqICogVmFsaWRhdGVzIHRoYXQgYWxsIGFycmF5IHR5cGVzIGhhdmUgdGhlaXIgcmVxdWlyZWQgaXRlbXMgcHJvcGVydHlcbiAqICAgICAoQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItc3BlYy9pc3N1ZXMvMTc0fSlcbiAqICogVmFsaWRhdGVzIHRoYXQgYWxsIGRlZmF1bHQgdmFsdWVzIGFyZSB2YWxpZCBiYXNlZCBvbiBpdHMgcmVzcGVjdGl2ZSBzY2hlbWFcbiAqXG4gKiBAcGFyYW0ge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyQXBpIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIG9mIHRoZSB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hT2JqZWN0cyAoYXBpKSB7XG4gIC8vIEJ1aWxkIGEgYmxhY2tsaXN0IHRvIGF2b2lkIGNhc2NhZGluZyBlcnJvcnMvd2FybmluZ3NcbiAgdmFyIGJsYWNrbGlzdCA9IF8ucmVkdWNlKGFwaS5yZWZlcmVuY2VzLCBmdW5jdGlvbiAobGlzdCwgbWV0YWRhdGEsIHB0cikge1xuICAgIHZhciByZWZQYXRoID0gSnNvblJlZnMucGF0aEZyb21QdHIocHRyKTtcblxuICAgIGxpc3QucHVzaChKc29uUmVmcy5wYXRoVG9QdHIocmVmUGF0aCkpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFtdKTtcbiAgdmFyIHJlc3BvbnNlID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG4gIHZhciB2YWxpZGF0b3JzID0gW1xuICAgIHZhbGlkYXRlQXJyYXlUeXBlSXRlbXNFeGlzdGVuY2UsXG4gICAgdmFsaWRhdGVEZWZhdWx0VmFsdWUsXG4gICAgdmFsaWRhdGVTY2hlbWFQcm9wZXJ0aWVzXG4gIF07XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVQYXJhbWV0ZXJzIChwYXJhbWV0ZXJzLCBwYXRoKSB7XG4gICAgXy5mb3JFYWNoKHBhcmFtZXRlcnMsIGZ1bmN0aW9uIChwYXJhbWV0ZXJEZWYsIG5hbWUpIHtcbiAgICAgIHZhciBwUGF0aDtcblxuICAgICAgaWYgKF8uaXNOdW1iZXIobmFtZSkpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgcFBhdGggPSBwYXRoLmNvbmNhdChuYW1lKTtcblxuICAgICAgLy8gQ3JlYXRlIEpTT04gU2NoZW1hIGZvciBub24tYm9keSBwYXJhbWV0ZXJzXG4gICAgICBpZiAocGFyYW1ldGVyRGVmLmluICE9PSAnYm9keScpIHtcbiAgICAgICAgcGFyYW1ldGVyRGVmID0gaGVscGVycy5jb21wdXRlUGFyYW1ldGVyU2NoZW1hKHBhcmFtZXRlckRlZik7XG4gICAgICB9XG5cbiAgICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIHBhcmFtZXRlckRlZiwgcFBhdGgsIHZhbGlkYXRvcnMsIHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUmVzcG9uc2VzIChyZXNwb25zZXMsIHBhdGgpIHtcbiAgICBfLmZvckVhY2gocmVzcG9uc2VzLCBmdW5jdGlvbiAocmVzcG9uc2VEZWYsIG5hbWUpIHtcbiAgICAgIHZhciByUGF0aCA9IHBhdGguY29uY2F0KG5hbWUpO1xuXG4gICAgICBfLmZvckVhY2gocmVzcG9uc2VEZWYuaGVhZGVycywgZnVuY3Rpb24gKGhlYWRlciwgaE5hbWUpIHtcbiAgICAgICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgaGVhZGVyLCByUGF0aC5jb25jYXQoWydoZWFkZXJzJywgaE5hbWVdKSwgdmFsaWRhdG9ycywgcmVzcG9uc2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChyZXNwb25zZURlZi5zY2hlbWEpKSB7XG4gICAgICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIHJlc3BvbnNlRGVmLnNjaGVtYSwgclBhdGguY29uY2F0KCdzY2hlbWEnKSwgdmFsaWRhdG9ycywgcmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZGVmaW5pdGlvbnNcbiAgXy5mb3JFYWNoKGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQuZGVmaW5pdGlvbnMsIGZ1bmN0aW9uIChkZWZpbml0aW9uRGVmLCBuYW1lKSB7XG4gICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgZGVmaW5pdGlvbkRlZiwgWydkZWZpbml0aW9ucycsIG5hbWVdLCB2YWxpZGF0b3JzLCByZXNwb25zZSk7XG4gIH0pO1xuXG4gIC8vIFZhbGlkYXRlIGdsb2JhbCBwYXJhbWV0ZXIgZGVmaW5pdGlvbnNcbiAgdmFsaWRhdGVQYXJhbWV0ZXJzKGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQucGFyYW1ldGVycywgWydwYXJhbWV0ZXJzJ10pO1xuXG4gIC8vIFZhbGlkYXRlIGdsb2JhbCByZXNwb25zZSBkZWZpbml0aW9uc1xuICB2YWxpZGF0ZVJlc3BvbnNlcyhhcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLnJlc3BvbnNlcywgWydyZXNwb25zZXMnXSk7XG5cbiAgLy8gVmFsaWRhdGUgcGF0aHMgYW5kIG9wZXJhdGlvbnNcbiAgXy5mb3JFYWNoKGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQucGF0aHMsIGZ1bmN0aW9uIChwYXRoRGVmLCBwYXRoKSB7XG4gICAgdmFyIHBQYXRoID0gWydwYXRocycsIHBhdGhdO1xuXG4gICAgLy8gVmFsaWRhdGUgcGF0aC1sZXZlbCBwYXJhbWV0ZXIgZGVmaW5pdGlvbnNcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcnMocGF0aERlZi5wYXJhbWV0ZXJzLCBwUGF0aC5jb25jYXQoJ3BhcmFtZXRlcnMnKSk7XG5cbiAgICBfLmZvckVhY2gocGF0aERlZiwgZnVuY3Rpb24gKG9wZXJhdGlvbkRlZiwgbWV0aG9kKSB7XG4gICAgICB2YXIgb1BhdGggPSBwUGF0aC5jb25jYXQobWV0aG9kKTtcblxuICAgICAgLy8gRG8gbm90IHByb2Nlc3Mgbm9uLW9wZXJhdGlvbnNcbiAgICAgIGlmIChfLmluZGV4T2YoaGVscGVycy5zdXBwb3J0ZWRIdHRwTWV0aG9kcywgbWV0aG9kKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBvcGVyYXRpb24gcGFyYW1ldGVyIGRlZmluaXRpb25zXG4gICAgICB2YWxpZGF0ZVBhcmFtZXRlcnMob3BlcmF0aW9uRGVmLnBhcmFtZXRlcnMsIG9QYXRoLmNvbmNhdCgncGFyYW1ldGVycycpKTtcblxuICAgICAgLy8gVmFsaWRhdGUgb3BlcmF0aW9uIHJlc3BvbnNlIGRlZmluaXRpb25zXG4gICAgICB2YWxpZGF0ZVJlc3BvbnNlcyhvcGVyYXRpb25EZWYucmVzcG9uc2VzLCBvUGF0aC5jb25jYXQoJ3Jlc3BvbnNlcycpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBwYXRocyBhbmQgb3BlcmF0aW9ucyAoV3JpdHRlbiBhcyBvbmUgdmFsaWRhdG9yIHRvIGF2b2lkIG11bHRpcGxlIHBhc3NlcylcbiAqXG4gKiAqIEVuc3VyZSB0aGF0IHBhdGggcGFyYW1ldGVycyBhcmUgZGVmaW5lZCBmb3IgZWFjaCBwYXRoIHBhcmFtZXRlciBkZWNsYXJhdGlvblxuICogKiBFbnN1cmUgdGhhdCBkZWZpbmVkIHBhdGggcGFyYW1ldGVycyBtYXRjaCBhIGRlY2xhcmVkIHBhdGggcGFyYW1ldGVyXG4gKiAqIEVuc3VyZSB0aGF0IHBhdGhzIGFyZSBmdW5jdGlvbmFsbHkgZGlmZmVyZW50XG4gKiAqIEVuc3VyZSB0aGF0IGFuIG9wZXJhdGlvbiBvbmx5IGhhcyBvbmUgYm9keSBwYXJhbWV0ZXJcbiAqICogRW5zdXJlIHRoYXQgYW4gb3BlcmF0aW9uIGhhcyBvbmx5IGEgYm9keSBvciBmb3JtRGF0YSBwYXJhbWV0ZXIgYnV0IG5vdCBib3RoXG4gKiAqIEVuc3VyZSB0aGF0IGFsbCBvcGVyYXRpb24gcGFyYW1ldGVycyBhcmUgdW5pcXVlIChpbiArIG5hbWUpXG4gKiAqIEVuc3VyZSB0aGF0IGFsbCBvcGVyYXRpb24gaWRzIGFyZSB1bmlxdWVcbiAqICogRW5zdXJlIHRoYXQgcGF0aCBwYXJhbWV0ZXJzIGhhdmUgYSBuYW1lXG4gKlxuICogQHBhcmFtIHtTd2FnZ2VyQXBpfSBhcGkgLSBUaGUgU3dhZ2dlckFwaSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBvZiB0aGUgdmFsaWRhdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhdGhzQW5kT3BlcmF0aW9ucyAoYXBpKSB7XG4gIHZhciByZXNwb25zZSA9IHtcbiAgICBlcnJvcnM6IFtdLFxuICAgIHdhcm5pbmdzOiBbXVxuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlRHVwbGljYXRlUGFyYW1ldGVyIChzZWVuUGFyYW1ldGVycywgcGFyYW1ldGVyLCBwYXRoKSB7XG4gICAgdmFyIHBOYW1lID0gcGFyYW1ldGVyLmluICsgJzonICsgcGFyYW1ldGVyLm5hbWU7XG5cbiAgICAvLyBJZGVudGlmeSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzXG4gICAgaWYgKF8uaW5kZXhPZihzZWVuUGFyYW1ldGVycywgcE5hbWUpID4gLTEpIHtcbiAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgY29kZTogJ0RVUExJQ0FURV9QQVJBTUVURVInLFxuICAgICAgICBtZXNzYWdlOiAnT3BlcmF0aW9uIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBwYXJhbWV0ZXJzOiAnICsgSnNvblJlZnMucGF0aFRvUHRyKHBhdGgpLFxuICAgICAgICBwYXRoOiBwYXRoXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VlblBhcmFtZXRlcnMucHVzaChwTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlZW5QYXJhbWV0ZXJzO1xuICB9XG5cbiAgXy5yZWR1Y2UoYXBpLmRlZmluaXRpb25BbGxSZXNvbHZlZC5wYXRocywgZnVuY3Rpb24gKG1ldGFkYXRhLCBwYXRoRGVmLCBwYXRoKSB7XG4gICAgdmFyIGRlY2xhcmVkUGF0aFBhcmFtZXRlcnMgPSBbXTtcbiAgICB2YXIgbm9ybWFsaXplZFBhdGggPSBwYXRoO1xuICAgIHZhciBwUGF0aCA9IFsncGF0aHMnLCBwYXRoXTtcblxuICAgIF8uZm9yRWFjaChwYXRoLm1hdGNoKC9cXHsoLio/KVxcfS9nKSwgZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgIC8vIFJlY29yZCB0aGUgcGF0aCBwYXJhbWV0ZXIgbmFtZVxuICAgICAgZGVjbGFyZWRQYXRoUGFyYW1ldGVycy5wdXNoKGFyZy5yZXBsYWNlKC9be31dL2csICcnKSk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgbm9ybWFsaXplZCBwYXRoXG4gICAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UoYXJnLCAnYXJnJyArIGluZGV4KTtcbiAgICB9KTtcblxuICAgIC8vIElkZW50aWZ5IHBhdGhzIHdpdGggZW1wdHkgcGFyYW1ldGVyIGRlY2xhcmF0aW9uc1xuICAgIGlmIChkZWNsYXJlZFBhdGhQYXJhbWV0ZXJzLmluZGV4T2YoJycpID4gLTEpIHtcbiAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgY29kZTogJ0VNUFRZX1BBVEhfUEFSQU1FVEVSX0RFQ0xBUkFUSU9OJyxcbiAgICAgICAgbWVzc2FnZTogJ1BhdGggcGFyYW1ldGVyIGRlY2xhcmF0aW9uIGNhbm5vdCBiZSBlbXB0eTogJyArIHBhdGgsXG4gICAgICAgIHBhdGg6IFsncGF0aHMnLCBwYXRoXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSWRlbmZpdHkgcGF0aHMgdGhhdCBhcmUgZnVuY3Rpb25hbGx5IHRoZSBzYW1lXG4gICAgaWYgKF8uaW5kZXhPZihtZXRhZGF0YS5wYXRocywgbm9ybWFsaXplZFBhdGgpID4gLTEpIHtcbiAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgY29kZTogJ0VRVUlWQUxFTlRfUEFUSCcsXG4gICAgICAgIG1lc3NhZ2U6ICdFcXVpdmFsZW50IHBhdGggYWxyZWFkeSBleGlzdHM6ICcgKyBwYXRoLFxuICAgICAgICBwYXRoOiBwUGF0aFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1ldGFkYXRhLnBhdGhzLnB1c2gobm9ybWFsaXplZFBhdGgpO1xuICAgIH1cblxuICAgIC8vIElkZW50aWZ5IGR1cGxpY2F0ZSBwYXRoLWxldmVsIHBhcmFtZXRlcnMgKFdlIGRvIHRoaXMgbWFudWFsbHkgc2luY2UgU3dhZ2dlckFwaSNnZXRPcGVyYXRpb24gY29uc29saWRhdGVzIHRoZW0pXG4gICAgXy5yZWR1Y2UocGF0aERlZi5wYXJhbWV0ZXJzLCBmdW5jdGlvbiAoc2VlblBhcmFtZXRlcnMsIHBhcmFtZXRlciwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0ZUR1cGxpY2F0ZVBhcmFtZXRlcihzZWVuUGFyYW1ldGVycywgcGFyYW1ldGVyLCBwUGF0aC5jb25jYXQoWydwYXJhbWV0ZXJzJywgaW5kZXgudG9TdHJpbmcoKV0pKTtcbiAgICB9LCBbXSk7XG5cbiAgICBfLmZvckVhY2gocGF0aERlZiwgZnVuY3Rpb24gKG9wZXJhdGlvbkRlZiwgbWV0aG9kKSB7XG4gICAgICB2YXIgZGVmaW5lZFBhdGhQYXJhbWV0ZXJzID0ge307XG4gICAgICB2YXIgb1BhdGggPSBwUGF0aC5jb25jYXQobWV0aG9kKTtcbiAgICAgIHZhciBvcGVyYXRpb25JZCA9IG9wZXJhdGlvbkRlZi5vcGVyYXRpb25JZDtcbiAgICAgIHZhciBwYXRoTWV0YWRhdGE7XG4gICAgICB2YXIgcGFyYW1ldGVycztcblxuICAgICAgLy8gRG8gbm90IHByb2Nlc3Mgbm9uLW9wZXJhdGlvbnNcbiAgICAgIGlmIChfLmluZGV4T2YoaGVscGVycy5zdXBwb3J0ZWRIdHRwTWV0aG9kcywgbWV0aG9kKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVudGlmeSBkdXBsaWNhdGUgb3BlcmF0aW9uSWRzXG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQob3BlcmF0aW9uSWQpKSB7XG4gICAgICAgIGlmIChfLmluZGV4T2YobWV0YWRhdGEub3BlcmF0aW9uSWRzLCBvcGVyYXRpb25JZCkgIT09IC0xKSB7XG4gICAgICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogJ0RVUExJQ0FURV9PUEVSQVRJT05JRCcsXG4gICAgICAgICAgICBtZXNzYWdlOiAnQ2Fubm90IGhhdmUgbXVsdGlwbGUgb3BlcmF0aW9ucyB3aXRoIHRoZSBzYW1lIG9wZXJhdGlvbklkOiAnICsgb3BlcmF0aW9uSWQsXG4gICAgICAgICAgICBwYXRoOiBvUGF0aC5jb25jYXQoWydvcGVyYXRpb25JZCddKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1ldGFkYXRhLm9wZXJhdGlvbklkcy5wdXNoKG9wZXJhdGlvbklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZGVudGlmeSBkdXBsaWNhdGUgb3BlcmF0aW9uLWxldmVsIHBhcmFtZXRlcnMgKFdlIGRvIHRoaXMgbWFudWFsbHkgZm9yIHRoZSBzYW1lIHJlYXNvbnMgYWJvdmUpXG4gICAgICBfLnJlZHVjZShvcGVyYXRpb25EZWYucGFyYW1ldGVycywgZnVuY3Rpb24gKHNlZW5QYXJhbWV0ZXJzLCBwYXJhbWV0ZXIsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUR1cGxpY2F0ZVBhcmFtZXRlcihzZWVuUGFyYW1ldGVycywgcGFyYW1ldGVyLCBvUGF0aC5jb25jYXQoWydwYXJhbWV0ZXJzJywgaW5kZXgudG9TdHJpbmcoKV0pKTtcbiAgICAgIH0sIFtdKTtcblxuICAgICAgLy8gVXNlIFN3YWdnZXJBcGkjZ2V0T3BlcmF0aW9uIHRvIGF2b2lkIGhhdmluZyB0byBjb25zb2xpZGF0ZSBwYXJhbWV0ZXJzXG4gICAgICBwYXJhbWV0ZXJzID0gYXBpLmdldE9wZXJhdGlvbihwYXRoLCBtZXRob2QpLmdldFBhcmFtZXRlcnMoKTtcblxuICAgICAgcGF0aE1ldGFkYXRhID0gXy5yZWR1Y2UocGFyYW1ldGVycywgZnVuY3Rpb24gKHBNZXRhZGF0YSwgcGFyYW1ldGVyKSB7XG4gICAgICAgIC8vIFJlY29yZCBwYXRoIHBhcmFtZXRlcnNcbiAgICAgICAgaWYgKHBhcmFtZXRlci5pbiA9PT0gJ3BhdGgnKSB7XG4gICAgICAgICAgZGVmaW5lZFBhdGhQYXJhbWV0ZXJzW3BhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlci5wdHI7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLmluID09PSAnYm9keScpIHtcbiAgICAgICAgICBwTWV0YWRhdGEuYm9keVBhcmFtZXRldGVycyArPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlci5pbiA9PT0gJ2Zvcm1EYXRhJykge1xuICAgICAgICAgIHBNZXRhZGF0YS5mb3JtUGFyYW1ldGVycyArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBNZXRhZGF0YTtcbiAgICAgIH0sIHtib2R5UGFyYW1ldGV0ZXJzOiAwLCBmb3JtUGFyYW1ldGVyczogMH0pO1xuXG4gICAgICAvLyBJZGVudGlmeSBtdWx0aXBsZSBib2R5IHBhcmFtZXRlcnNcbiAgICAgIGlmIChwYXRoTWV0YWRhdGEuYm9keVBhcmFtZXRldGVycyA+IDEpIHtcbiAgICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvZGU6ICdNVUxUSVBMRV9CT0RZX1BBUkFNRVRFUlMnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdPcGVyYXRpb24gY2Fubm90IGhhdmUgbXVsdGlwbGUgYm9keSBwYXJhbWV0ZXJzJyxcbiAgICAgICAgICBwYXRoOiBvUGF0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSWRlbnRpZnkgaGF2aW5nIGJvdGggYSBib2R5IGFuZCBhIGZvcm0gcGFyYW1ldGVyXG4gICAgICBpZiAocGF0aE1ldGFkYXRhLmJvZHlQYXJhbWV0ZXRlcnMgPiAwICYmIHBhdGhNZXRhZGF0YS5mb3JtUGFyYW1ldGVycyA+IDApIHtcbiAgICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1BBUkFNRVRFUl9DT01CSU5BVElPTicsXG4gICAgICAgICAgbWVzc2FnZTogJ09wZXJhdGlvbiBjYW5ub3QgaGF2ZSBhIGJvZHkgcGFyYW1ldGVyIGFuZCBhIGZvcm1EYXRhIHBhcmFtZXRlcicsXG4gICAgICAgICAgcGF0aDogb1BhdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZW50aWZ5IHVuZGVmaW5lZCBwYXRoIHBhcmFtZXRlcnNcbiAgICAgIF8uZm9yRWFjaChfLmRpZmZlcmVuY2UoZGVjbGFyZWRQYXRoUGFyYW1ldGVycywgXy5rZXlzKGRlZmluZWRQYXRoUGFyYW1ldGVycykpLCBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ01JU1NJTkdfUEFUSF9QQVJBTUVURVJfREVGSU5JVElPTicsXG4gICAgICAgICAgbWVzc2FnZTogJ1BhdGggcGFyYW1ldGVyIGlzIGRlY2xhcmVkIGJ1dCBpcyBub3QgZGVmaW5lZDogJyArIG5hbWUsXG4gICAgICAgICAgcGF0aDogb1BhdGhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gSWRlbnRpZnkgdW5kZWNsYXJlZCBwYXRoIHBhcmFtZXRlcnNcbiAgICAgIF8uZm9yRWFjaChfLmRpZmZlcmVuY2UoXy5rZXlzKGRlZmluZWRQYXRoUGFyYW1ldGVycyksIGRlY2xhcmVkUGF0aFBhcmFtZXRlcnMpLCBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ01JU1NJTkdfUEFUSF9QQVJBTUVURVJfREVDTEFSQVRJT04nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdQYXRoIHBhcmFtZXRlciBpcyBkZWZpbmVkIGJ1dCBpcyBub3QgZGVjbGFyZWQ6ICcgKyBuYW1lLFxuICAgICAgICAgIHBhdGg6IEpzb25SZWZzLnBhdGhGcm9tUHRyKGRlZmluZWRQYXRoUGFyYW1ldGVyc1tuYW1lXSlcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfSwge3BhdGhzOiBbXSwgb3BlcmF0aW9uSWRzOiBbXX0pO1xuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGpzb25TY2hlbWFWYWxpZGF0b3I6IHZhbGlkYXRlU3RydWN0dXJlLFxuICBzZW1hbnRpY1ZhbGlkYXRvcnM6IFtcbiAgICB2YWxpZGF0ZVJlZmVyZW5jZXMsXG4gICAgdmFsaWRhdGVTY2hlbWFPYmplY3RzLFxuICAgIHZhbGlkYXRlUGF0aHNBbmRPcGVyYXRpb25zXG4gIF1cbn07XG4iLCJ2YXIgbG9va3VwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXG47KGZ1bmN0aW9uIChleHBvcnRzKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuICB2YXIgQXJyID0gKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJylcbiAgICA/IFVpbnQ4QXJyYXlcbiAgICA6IEFycmF5XG5cblx0dmFyIFBMVVMgICA9ICcrJy5jaGFyQ29kZUF0KDApXG5cdHZhciBTTEFTSCAgPSAnLycuY2hhckNvZGVBdCgwKVxuXHR2YXIgTlVNQkVSID0gJzAnLmNoYXJDb2RlQXQoMClcblx0dmFyIExPV0VSICA9ICdhJy5jaGFyQ29kZUF0KDApXG5cdHZhciBVUFBFUiAgPSAnQScuY2hhckNvZGVBdCgwKVxuXHR2YXIgUExVU19VUkxfU0FGRSA9ICctJy5jaGFyQ29kZUF0KDApXG5cdHZhciBTTEFTSF9VUkxfU0FGRSA9ICdfJy5jaGFyQ29kZUF0KDApXG5cblx0ZnVuY3Rpb24gZGVjb2RlIChlbHQpIHtcblx0XHR2YXIgY29kZSA9IGVsdC5jaGFyQ29kZUF0KDApXG5cdFx0aWYgKGNvZGUgPT09IFBMVVMgfHxcblx0XHQgICAgY29kZSA9PT0gUExVU19VUkxfU0FGRSlcblx0XHRcdHJldHVybiA2MiAvLyAnKydcblx0XHRpZiAoY29kZSA9PT0gU0xBU0ggfHxcblx0XHQgICAgY29kZSA9PT0gU0xBU0hfVVJMX1NBRkUpXG5cdFx0XHRyZXR1cm4gNjMgLy8gJy8nXG5cdFx0aWYgKGNvZGUgPCBOVU1CRVIpXG5cdFx0XHRyZXR1cm4gLTEgLy9ubyBtYXRjaFxuXHRcdGlmIChjb2RlIDwgTlVNQkVSICsgMTApXG5cdFx0XHRyZXR1cm4gY29kZSAtIE5VTUJFUiArIDI2ICsgMjZcblx0XHRpZiAoY29kZSA8IFVQUEVSICsgMjYpXG5cdFx0XHRyZXR1cm4gY29kZSAtIFVQUEVSXG5cdFx0aWYgKGNvZGUgPCBMT1dFUiArIDI2KVxuXHRcdFx0cmV0dXJuIGNvZGUgLSBMT1dFUiArIDI2XG5cdH1cblxuXHRmdW5jdGlvbiBiNjRUb0J5dGVBcnJheSAoYjY0KSB7XG5cdFx0dmFyIGksIGosIGwsIHRtcCwgcGxhY2VIb2xkZXJzLCBhcnJcblxuXHRcdGlmIChiNjQubGVuZ3RoICUgNCA+IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG5cdFx0fVxuXG5cdFx0Ly8gdGhlIG51bWJlciBvZiBlcXVhbCBzaWducyAocGxhY2UgaG9sZGVycylcblx0XHQvLyBpZiB0aGVyZSBhcmUgdHdvIHBsYWNlaG9sZGVycywgdGhhbiB0aGUgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIGl0XG5cdFx0Ly8gcmVwcmVzZW50IG9uZSBieXRlXG5cdFx0Ly8gaWYgdGhlcmUgaXMgb25seSBvbmUsIHRoZW4gdGhlIHRocmVlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IHJlcHJlc2VudCAyIGJ5dGVzXG5cdFx0Ly8gdGhpcyBpcyBqdXN0IGEgY2hlYXAgaGFjayB0byBub3QgZG8gaW5kZXhPZiB0d2ljZVxuXHRcdHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cdFx0cGxhY2VIb2xkZXJzID0gJz0nID09PSBiNjQuY2hhckF0KGxlbiAtIDIpID8gMiA6ICc9JyA9PT0gYjY0LmNoYXJBdChsZW4gLSAxKSA/IDEgOiAwXG5cblx0XHQvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcblx0XHRhcnIgPSBuZXcgQXJyKGI2NC5sZW5ndGggKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuXHRcdC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcblx0XHRsID0gcGxhY2VIb2xkZXJzID4gMCA/IGI2NC5sZW5ndGggLSA0IDogYjY0Lmxlbmd0aFxuXG5cdFx0dmFyIEwgPSAwXG5cblx0XHRmdW5jdGlvbiBwdXNoICh2KSB7XG5cdFx0XHRhcnJbTCsrXSA9IHZcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGw7IGkgKz0gNCwgaiArPSAzKSB7XG5cdFx0XHR0bXAgPSAoZGVjb2RlKGI2NC5jaGFyQXQoaSkpIDw8IDE4KSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpIDw8IDEyKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMikpIDw8IDYpIHwgZGVjb2RlKGI2NC5jaGFyQXQoaSArIDMpKVxuXHRcdFx0cHVzaCgodG1wICYgMHhGRjAwMDApID4+IDE2KVxuXHRcdFx0cHVzaCgodG1wICYgMHhGRjAwKSA+PiA4KVxuXHRcdFx0cHVzaCh0bXAgJiAweEZGKVxuXHRcdH1cblxuXHRcdGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMikgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDEpKSA+PiA0KVxuXHRcdFx0cHVzaCh0bXAgJiAweEZGKVxuXHRcdH0gZWxzZSBpZiAocGxhY2VIb2xkZXJzID09PSAxKSB7XG5cdFx0XHR0bXAgPSAoZGVjb2RlKGI2NC5jaGFyQXQoaSkpIDw8IDEwKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpIDw8IDQpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAyKSkgPj4gMilcblx0XHRcdHB1c2goKHRtcCA+PiA4KSAmIDB4RkYpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFyclxuXHR9XG5cblx0ZnVuY3Rpb24gdWludDhUb0Jhc2U2NCAodWludDgpIHtcblx0XHR2YXIgaSxcblx0XHRcdGV4dHJhQnl0ZXMgPSB1aW50OC5sZW5ndGggJSAzLCAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuXHRcdFx0b3V0cHV0ID0gXCJcIixcblx0XHRcdHRlbXAsIGxlbmd0aFxuXG5cdFx0ZnVuY3Rpb24gZW5jb2RlIChudW0pIHtcblx0XHRcdHJldHVybiBsb29rdXAuY2hhckF0KG51bSlcblx0XHR9XG5cblx0XHRmdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuXHRcdFx0cmV0dXJuIGVuY29kZShudW0gPj4gMTggJiAweDNGKSArIGVuY29kZShudW0gPj4gMTIgJiAweDNGKSArIGVuY29kZShudW0gPj4gNiAmIDB4M0YpICsgZW5jb2RlKG51bSAmIDB4M0YpXG5cdFx0fVxuXG5cdFx0Ly8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuXHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IHVpbnQ4Lmxlbmd0aCAtIGV4dHJhQnl0ZXM7IGkgPCBsZW5ndGg7IGkgKz0gMykge1xuXHRcdFx0dGVtcCA9ICh1aW50OFtpXSA8PCAxNikgKyAodWludDhbaSArIDFdIDw8IDgpICsgKHVpbnQ4W2kgKyAyXSlcblx0XHRcdG91dHB1dCArPSB0cmlwbGV0VG9CYXNlNjQodGVtcClcblx0XHR9XG5cblx0XHQvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG5cdFx0c3dpdGNoIChleHRyYUJ5dGVzKSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHRlbXAgPSB1aW50OFt1aW50OC5sZW5ndGggLSAxXVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKHRlbXAgPj4gMilcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSgodGVtcCA8PCA0KSAmIDB4M0YpXG5cdFx0XHRcdG91dHB1dCArPSAnPT0nXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdHRlbXAgPSAodWludDhbdWludDgubGVuZ3RoIC0gMl0gPDwgOCkgKyAodWludDhbdWludDgubGVuZ3RoIC0gMV0pXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUodGVtcCA+PiAxMClcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSgodGVtcCA+PiA0KSAmIDB4M0YpXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUoKHRlbXAgPDwgMikgJiAweDNGKVxuXHRcdFx0XHRvdXRwdXQgKz0gJz0nXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG5cblx0ZXhwb3J0cy50b0J5dGVBcnJheSA9IGI2NFRvQnl0ZUFycmF5XG5cdGV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IHVpbnQ4VG9CYXNlNjRcbn0odHlwZW9mIGV4cG9ydHMgPT09ICd1bmRlZmluZWQnID8gKHRoaXMuYmFzZTY0anMgPSB7fSkgOiBleHBvcnRzKSlcbiIsIiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxudmFyIHJvb3RQYXJlbnQgPSB7fVxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIFNhZmFyaSA1LTcgbGFja3Mgc3VwcG9ydCBmb3IgY2hhbmdpbmcgdGhlIGBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yYCBwcm9wZXJ0eVxuICogICAgIG9uIG9iamVjdHMuXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICBmdW5jdGlvbiBCYXIgKCkge31cbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuZm9vID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfVxuICAgIGFyci5jb25zdHJ1Y3RvciA9IEJhclxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIGFyci5jb25zdHJ1Y3RvciA9PT0gQmFyICYmIC8vIGNvbnN0cnVjdG9yIGNhbiBiZSBzZXRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuLyoqXG4gKiBDbGFzczogQnVmZmVyXG4gKiA9PT09PT09PT09PT09XG4gKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBhcmUgYXVnbWVudGVkXG4gKiB3aXRoIGZ1bmN0aW9uIHByb3BlcnRpZXMgZm9yIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBBUEkgZnVuY3Rpb25zLiBXZSB1c2VcbiAqIGBVaW50OEFycmF5YCBzbyB0aGF0IHNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0IHJldHVybnNcbiAqIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIEJ5IGF1Z21lbnRpbmcgdGhlIGluc3RhbmNlcywgd2UgY2FuIGF2b2lkIG1vZGlmeWluZyB0aGUgYFVpbnQ4QXJyYXlgXG4gKiBwcm90b3R5cGUuXG4gKi9cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgLy8gQXZvaWQgZ29pbmcgdGhyb3VnaCBhbiBBcmd1bWVudHNBZGFwdG9yVHJhbXBvbGluZSBpbiB0aGUgY29tbW9uIGNhc2UuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGFyZ3VtZW50c1sxXSlcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpcy5sZW5ndGggPSAwXG4gICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZnJvbU51bWJlcih0aGlzLCBhcmcpXG4gIH1cblxuICAvLyBTbGlnaHRseSBsZXNzIGNvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGlzLCBhcmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogJ3V0ZjgnKVxuICB9XG5cbiAgLy8gVW51c3VhbC5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhpcywgYXJnKVxufVxuXG5mdW5jdGlvbiBmcm9tTnVtYmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChsZW5ndGgpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIC8vIEFzc3VtcHRpb246IGJ5dGVMZW5ndGgoKSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzIDwga01heExlbmd0aC5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG5cbiAgdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmplY3QpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmplY3QpKSByZXR1cm4gZnJvbUJ1ZmZlcih0aGF0LCBvYmplY3QpXG5cbiAgaWYgKGlzQXJyYXkob2JqZWN0KSkgcmV0dXJuIGZyb21BcnJheSh0aGF0LCBvYmplY3QpXG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbXVzdCBzdGFydCB3aXRoIG51bWJlciwgYnVmZmVyLCBhcnJheSBvciBzdHJpbmcnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAob2JqZWN0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gZnJvbVR5cGVkQXJyYXkodGhhdCwgb2JqZWN0KVxuICAgIH1cbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgb2JqZWN0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChvYmplY3QubGVuZ3RoKSByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmplY3QpXG5cbiAgcmV0dXJuIGZyb21Kc29uT2JqZWN0KHRoYXQsIG9iamVjdClcbn1cblxuZnVuY3Rpb24gZnJvbUJ1ZmZlciAodGhhdCwgYnVmZmVyKSB7XG4gIHZhciBsZW5ndGggPSBjaGVja2VkKGJ1ZmZlci5sZW5ndGgpIHwgMFxuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoKVxuICBidWZmZXIuY29weSh0aGF0LCAwLCAwLCBsZW5ndGgpXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8vIER1cGxpY2F0ZSBvZiBmcm9tQXJyYXkoKSB0byBrZWVwIGZyb21BcnJheSgpIG1vbm9tb3JwaGljLlxuZnVuY3Rpb24gZnJvbVR5cGVkQXJyYXkgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG4gIC8vIFRydW5jYXRpbmcgdGhlIGVsZW1lbnRzIGlzIHByb2JhYmx5IG5vdCB3aGF0IHBlb3BsZSBleHBlY3QgZnJvbSB0eXBlZFxuICAvLyBhcnJheXMgd2l0aCBCWVRFU19QRVJfRUxFTUVOVCA+IDEgYnV0IGl0J3MgY29tcGF0aWJsZSB3aXRoIHRoZSBiZWhhdmlvclxuICAvLyBvZiB0aGUgb2xkIEJ1ZmZlciBjb25zdHJ1Y3Rvci5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXkpIHtcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgYXJyYXkuYnl0ZUxlbmd0aFxuICAgIHRoYXQgPSBCdWZmZXIuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkoYXJyYXkpKVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbVR5cGVkQXJyYXkodGhhdCwgbmV3IFVpbnQ4QXJyYXkoYXJyYXkpKVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vLyBEZXNlcmlhbGl6ZSB7IHR5cGU6ICdCdWZmZXInLCBkYXRhOiBbMSwyLDMsLi4uXSB9IGludG8gYSBCdWZmZXIgb2JqZWN0LlxuLy8gUmV0dXJucyBhIHplcm8tbGVuZ3RoIGJ1ZmZlciBmb3IgaW5wdXRzIHRoYXQgZG9uJ3QgY29uZm9ybSB0byB0aGUgc3BlYy5cbmZ1bmN0aW9uIGZyb21Kc29uT2JqZWN0ICh0aGF0LCBvYmplY3QpIHtcbiAgdmFyIGFycmF5XG4gIHZhciBsZW5ndGggPSAwXG5cbiAgaWYgKG9iamVjdC50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iamVjdC5kYXRhKSkge1xuICAgIGFycmF5ID0gb2JqZWN0LmRhdGFcbiAgICBsZW5ndGggPSBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIH1cbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbn0gZWxzZSB7XG4gIC8vIHByZS1zZXQgZm9yIHZhbHVlcyB0aGF0IG1heSBleGlzdCBpbiB0aGUgZnV0dXJlXG4gIEJ1ZmZlci5wcm90b3R5cGUubGVuZ3RoID0gdW5kZWZpbmVkXG4gIEJ1ZmZlci5wcm90b3R5cGUucGFyZW50ID0gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGFsbG9jYXRlICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IEJ1ZmZlci5fYXVnbWVudChuZXcgVWludDhBcnJheShsZW5ndGgpKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICAgIHRoYXQuX2lzQnVmZmVyID0gdHJ1ZVxuICB9XG5cbiAgdmFyIGZyb21Qb29sID0gbGVuZ3RoICE9PSAwICYmIGxlbmd0aCA8PSBCdWZmZXIucG9vbFNpemUgPj4+IDFcbiAgaWYgKGZyb21Qb29sKSB0aGF0LnBhcmVudCA9IHJvb3RQYXJlbnRcblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwga01heExlbmd0aGAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKHN1YmplY3QsIGVuY29kaW5nKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTbG93QnVmZmVyKSkgcmV0dXJuIG5ldyBTbG93QnVmZmVyKHN1YmplY3QsIGVuY29kaW5nKVxuXG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKHN1YmplY3QsIGVuY29kaW5nKVxuICBkZWxldGUgYnVmLnBhcmVudFxuICByZXR1cm4gYnVmXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICB2YXIgaSA9IDBcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIGJyZWFrXG5cbiAgICArK2lcbiAgfVxuXG4gIGlmIChpICE9PSBsZW4pIHtcbiAgICB4ID0gYVtpXVxuICAgIHkgPSBiW2ldXG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3Jhdyc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2xpc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzLicpXG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXVxuICAgIGl0ZW0uY29weShidWYsIHBvcylcbiAgICBwb3MgKz0gaXRlbS5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSBzdHJpbmcgPSAnJyArIHN0cmluZ1xuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgLy8gRGVwcmVjYXRlZFxuICAgICAgY2FzZSAncmF3JzpcbiAgICAgIGNhc2UgJ3Jhd3MnOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIHN0YXJ0ID0gc3RhcnQgfCAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA9PT0gSW5maW5pdHkgPyB0aGlzLmxlbmd0aCA6IGVuZCB8IDBcblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4gJydcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBiaW5hcnlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIDBcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCkge1xuICBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIGJ5dGVPZmZzZXQgPj49IDBcblxuICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiAtMVxuICBpZiAoYnl0ZU9mZnNldCA+PSB0aGlzLmxlbmd0aCkgcmV0dXJuIC0xXG5cbiAgLy8gTmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBNYXRoLm1heCh0aGlzLmxlbmd0aCArIGJ5dGVPZmZzZXQsIDApXG5cbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHJldHVybiAtMSAvLyBzcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZyBhbHdheXMgZmFpbHNcbiAgICByZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcywgdmFsLCBieXRlT2Zmc2V0KVxuICB9XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIHJldHVybiBhcnJheUluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0KVxuICB9XG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsIHZhbCwgYnl0ZU9mZnNldClcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZih0aGlzLCBbIHZhbCBdLCBieXRlT2Zmc2V0KVxuICB9XG5cbiAgZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCkge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKHZhciBpID0gMDsgYnl0ZU9mZnNldCArIGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcnJbYnl0ZU9mZnNldCArIGldID09PSB2YWxbZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXhdKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsLmxlbmd0aCkgcmV0dXJuIGJ5dGVPZmZzZXQgKyBmb3VuZEluZGV4XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG4vLyBgZ2V0YCBpcyBkZXByZWNhdGVkXG5CdWZmZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAob2Zmc2V0KSB7XG4gIGNvbnNvbGUubG9nKCcuZ2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC4nKVxuICByZXR1cm4gdGhpcy5yZWFkVUludDgob2Zmc2V0KVxufVxuXG4vLyBgc2V0YCBpcyBkZXByZWNhdGVkXG5CdWZmZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldCAodiwgb2Zmc2V0KSB7XG4gIGNvbnNvbGUubG9nKCcuc2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC4nKVxuICByZXR1cm4gdGhpcy53cml0ZVVJbnQ4KHYsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiaW5hcnlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdmFyIHN3YXAgPSBlbmNvZGluZ1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgb2Zmc2V0ID0gbGVuZ3RoIHwgMFxuICAgIGxlbmd0aCA9IHN3YXBcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYmluYXJ5V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBiaW5hcnlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gQnVmZmVyLl9hdWdtZW50KHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCkpXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgaSsrKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICBpZiAobmV3QnVmLmxlbmd0aCkgbmV3QnVmLnBhcmVudCA9IHRoaXMucGFyZW50IHx8IHRoaXNcblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2J1ZmZlciBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmFsdWUgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCksIDApXG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCksIDApXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgaSsrKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7IGkrKykge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSB2YWx1ZSA8IDAgPyAxIDogMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IHZhbHVlIDwgMCA/IDEgOiAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZhbHVlIGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQuX3NldCh0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksIHRhcmdldFN0YXJ0KVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBmaWxsKHZhbHVlLCBzdGFydD0wLCBlbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gIGlmICghdmFsdWUpIHZhbHVlID0gMFxuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQpIGVuZCA9IHRoaXMubGVuZ3RoXG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZW5kIDwgc3RhcnQnKVxuXG4gIC8vIEZpbGwgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuXG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2VuZCBvdXQgb2YgYm91bmRzJylcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHRoaXNbaV0gPSB2YWx1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSB1dGY4VG9CeXRlcyh2YWx1ZS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB0aGlzW2ldID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYEFycmF5QnVmZmVyYCB3aXRoIHRoZSAqY29waWVkKiBtZW1vcnkgb2YgdGhlIGJ1ZmZlciBpbnN0YW5jZS5cbiAqIEFkZGVkIGluIE5vZGUgMC4xMi4gT25seSBhdmFpbGFibGUgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IEFycmF5QnVmZmVyLlxuICovXG5CdWZmZXIucHJvdG90eXBlLnRvQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiB0b0FycmF5QnVmZmVyICgpIHtcbiAgaWYgKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgICAgcmV0dXJuIChuZXcgQnVmZmVyKHRoaXMpKS5idWZmZXJcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMubGVuZ3RoKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGJ1Zi5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICBidWZbaV0gPSB0aGlzW2ldXG4gICAgICB9XG4gICAgICByZXR1cm4gYnVmLmJ1ZmZlclxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCdWZmZXIudG9BcnJheUJ1ZmZlciBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlcicpXG4gIH1cbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgQlAgPSBCdWZmZXIucHJvdG90eXBlXG5cbi8qKlxuICogQXVnbWVudCBhIFVpbnQ4QXJyYXkgKmluc3RhbmNlKiAobm90IHRoZSBVaW50OEFycmF5IGNsYXNzISkgd2l0aCBCdWZmZXIgbWV0aG9kc1xuICovXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiBfYXVnbWVudCAoYXJyKSB7XG4gIGFyci5jb25zdHJ1Y3RvciA9IEJ1ZmZlclxuICBhcnIuX2lzQnVmZmVyID0gdHJ1ZVxuXG4gIC8vIHNhdmUgcmVmZXJlbmNlIHRvIG9yaWdpbmFsIFVpbnQ4QXJyYXkgc2V0IG1ldGhvZCBiZWZvcmUgb3ZlcndyaXRpbmdcbiAgYXJyLl9zZXQgPSBhcnIuc2V0XG5cbiAgLy8gZGVwcmVjYXRlZFxuICBhcnIuZ2V0ID0gQlAuZ2V0XG4gIGFyci5zZXQgPSBCUC5zZXRcblxuICBhcnIud3JpdGUgPSBCUC53cml0ZVxuICBhcnIudG9TdHJpbmcgPSBCUC50b1N0cmluZ1xuICBhcnIudG9Mb2NhbGVTdHJpbmcgPSBCUC50b1N0cmluZ1xuICBhcnIudG9KU09OID0gQlAudG9KU09OXG4gIGFyci5lcXVhbHMgPSBCUC5lcXVhbHNcbiAgYXJyLmNvbXBhcmUgPSBCUC5jb21wYXJlXG4gIGFyci5pbmRleE9mID0gQlAuaW5kZXhPZlxuICBhcnIuY29weSA9IEJQLmNvcHlcbiAgYXJyLnNsaWNlID0gQlAuc2xpY2VcbiAgYXJyLnJlYWRVSW50TEUgPSBCUC5yZWFkVUludExFXG4gIGFyci5yZWFkVUludEJFID0gQlAucmVhZFVJbnRCRVxuICBhcnIucmVhZFVJbnQ4ID0gQlAucmVhZFVJbnQ4XG4gIGFyci5yZWFkVUludDE2TEUgPSBCUC5yZWFkVUludDE2TEVcbiAgYXJyLnJlYWRVSW50MTZCRSA9IEJQLnJlYWRVSW50MTZCRVxuICBhcnIucmVhZFVJbnQzMkxFID0gQlAucmVhZFVJbnQzMkxFXG4gIGFyci5yZWFkVUludDMyQkUgPSBCUC5yZWFkVUludDMyQkVcbiAgYXJyLnJlYWRJbnRMRSA9IEJQLnJlYWRJbnRMRVxuICBhcnIucmVhZEludEJFID0gQlAucmVhZEludEJFXG4gIGFyci5yZWFkSW50OCA9IEJQLnJlYWRJbnQ4XG4gIGFyci5yZWFkSW50MTZMRSA9IEJQLnJlYWRJbnQxNkxFXG4gIGFyci5yZWFkSW50MTZCRSA9IEJQLnJlYWRJbnQxNkJFXG4gIGFyci5yZWFkSW50MzJMRSA9IEJQLnJlYWRJbnQzMkxFXG4gIGFyci5yZWFkSW50MzJCRSA9IEJQLnJlYWRJbnQzMkJFXG4gIGFyci5yZWFkRmxvYXRMRSA9IEJQLnJlYWRGbG9hdExFXG4gIGFyci5yZWFkRmxvYXRCRSA9IEJQLnJlYWRGbG9hdEJFXG4gIGFyci5yZWFkRG91YmxlTEUgPSBCUC5yZWFkRG91YmxlTEVcbiAgYXJyLnJlYWREb3VibGVCRSA9IEJQLnJlYWREb3VibGVCRVxuICBhcnIud3JpdGVVSW50OCA9IEJQLndyaXRlVUludDhcbiAgYXJyLndyaXRlVUludExFID0gQlAud3JpdGVVSW50TEVcbiAgYXJyLndyaXRlVUludEJFID0gQlAud3JpdGVVSW50QkVcbiAgYXJyLndyaXRlVUludDE2TEUgPSBCUC53cml0ZVVJbnQxNkxFXG4gIGFyci53cml0ZVVJbnQxNkJFID0gQlAud3JpdGVVSW50MTZCRVxuICBhcnIud3JpdGVVSW50MzJMRSA9IEJQLndyaXRlVUludDMyTEVcbiAgYXJyLndyaXRlVUludDMyQkUgPSBCUC53cml0ZVVJbnQzMkJFXG4gIGFyci53cml0ZUludExFID0gQlAud3JpdGVJbnRMRVxuICBhcnIud3JpdGVJbnRCRSA9IEJQLndyaXRlSW50QkVcbiAgYXJyLndyaXRlSW50OCA9IEJQLndyaXRlSW50OFxuICBhcnIud3JpdGVJbnQxNkxFID0gQlAud3JpdGVJbnQxNkxFXG4gIGFyci53cml0ZUludDE2QkUgPSBCUC53cml0ZUludDE2QkVcbiAgYXJyLndyaXRlSW50MzJMRSA9IEJQLndyaXRlSW50MzJMRVxuICBhcnIud3JpdGVJbnQzMkJFID0gQlAud3JpdGVJbnQzMkJFXG4gIGFyci53cml0ZUZsb2F0TEUgPSBCUC53cml0ZUZsb2F0TEVcbiAgYXJyLndyaXRlRmxvYXRCRSA9IEJQLndyaXRlRmxvYXRCRVxuICBhcnIud3JpdGVEb3VibGVMRSA9IEJQLndyaXRlRG91YmxlTEVcbiAgYXJyLndyaXRlRG91YmxlQkUgPSBCUC53cml0ZURvdWJsZUJFXG4gIGFyci5maWxsID0gQlAuZmlsbFxuICBhcnIuaW5zcGVjdCA9IEJQLmluc3BlY3RcbiAgYXJyLnRvQXJyYXlCdWZmZXIgPSBCUC50b0FycmF5QnVmZmVyXG5cbiAgcmV0dXJuIGFyclxufVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gIENoYW5jZS5qcyAwLjguMFxuLy8gIGh0dHA6Ly9jaGFuY2Vqcy5jb21cbi8vICAoYykgMjAxMyBWaWN0b3IgUXVpbm5cbi8vICBDaGFuY2UgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCBvciBtb2RpZmllZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBDb25zdGFudHNcbiAgICB2YXIgTUFYX0lOVCA9IDkwMDcxOTkyNTQ3NDA5OTI7XG4gICAgdmFyIE1JTl9JTlQgPSAtTUFYX0lOVDtcbiAgICB2YXIgTlVNQkVSUyA9ICcwMTIzNDU2Nzg5JztcbiAgICB2YXIgQ0hBUlNfTE9XRVIgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuICAgIHZhciBDSEFSU19VUFBFUiA9IENIQVJTX0xPV0VSLnRvVXBwZXJDYXNlKCk7XG4gICAgdmFyIEhFWF9QT09MICA9IE5VTUJFUlMgKyBcImFiY2RlZlwiO1xuXG4gICAgLy8gQ2FjaGVkIGFycmF5IGhlbHBlcnNcbiAgICB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbiAgICAvLyBDb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIENoYW5jZSAoc2VlZCkge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2hhbmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlZWQgPT0gbnVsbCA/IG5ldyBDaGFuY2UoKSA6IG5ldyBDaGFuY2Uoc2VlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB1c2VyIGhhcyBwcm92aWRlZCBhIGZ1bmN0aW9uLCB1c2UgdGhhdCBhcyB0aGUgZ2VuZXJhdG9yXG4gICAgICAgIGlmICh0eXBlb2Ygc2VlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5yYW5kb20gPSBzZWVkO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gc2V0IGEgc3RhcnRpbmcgdmFsdWUgb2YgemVybyBzbyB3ZSBjYW4gYWRkIHRvIGl0XG4gICAgICAgICAgICB0aGlzLnNlZWQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBsZWF2ZSB0aGlzLnNlZWQgYmxhbmsgc28gdGhhdCBNVCB3aWxsIHJlY2VpdmUgYSBibGFua1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc2VlZGxpbmcgPSAwO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHNbaV0pID09PSAnW29iamVjdCBTdHJpbmddJykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJndW1lbnRzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG51bWVyaWMgaGFzaCBmb3IgZWFjaCBhcmd1bWVudCwgYWRkIHRvIHNlZWRsaW5nXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYXNoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBhcmd1bWVudHNbaV0ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2ggPSBhcmd1bWVudHNbaV0uY2hhckNvZGVBdChrKSArIChoYXNoIDw8IDYpICsgKGhhc2ggPDwgMTYpIC0gaGFzaDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWVkbGluZyArPSBoYXNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VlZGxpbmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlZWQgKz0gKGFyZ3VtZW50cy5sZW5ndGggLSBpKSAqIHNlZWRsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbm8gZ2VuZXJhdG9yIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgdXNlIG91ciBNVFxuICAgICAgICB0aGlzLm10ID0gdGhpcy5tZXJzZW5uZV90d2lzdGVyKHRoaXMuc2VlZCk7XG4gICAgICAgIHRoaXMuYmltZDUgPSB0aGlzLmJsdWVpbXBfbWQ1KCk7XG4gICAgICAgIHRoaXMucmFuZG9tID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubXQucmFuZG9tKHRoaXMuc2VlZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5WRVJTSU9OID0gXCIwLjguMFwiO1xuXG4gICAgLy8gUmFuZG9tIGhlbHBlciBmdW5jdGlvbnNcbiAgICBmdW5jdGlvbiBpbml0T3B0aW9ucyhvcHRpb25zLCBkZWZhdWx0cykge1xuICAgICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuXG4gICAgICAgIGlmIChkZWZhdWx0cykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IGRlZmF1bHRzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRlc3RSYW5nZSh0ZXN0LCBlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRlc3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgdGhlIGlucHV0IHN0cmluZyB3aXRoIEJhc2U2NC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZTY0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gQmFzZTY0IGVuY29kZXIgYXZhaWxhYmxlLicpO1xuICAgIH07XG5cbiAgICAvLyBTZWxlY3QgcHJvcGVyIEJhc2U2NCBlbmNvZGVyLlxuICAgIChmdW5jdGlvbiBkZXRlcm1pbmVCYXNlNjRFbmNvZGVyKCkge1xuICAgICAgICBpZiAodHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGJhc2U2NCA9IGJ0b2E7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYmFzZTY0ID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcihpbnB1dCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICAvLyAtLSBCYXNpY3MgLS1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm4gYSByYW5kb20gYm9vbCwgZWl0aGVyIHRydWUgb3IgZmFsc2VcbiAgICAgKlxuICAgICAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9eyBsaWtlbGlob29kOiA1MCB9XSBhbHRlciB0aGUgbGlrZWxpaG9vZCBvZlxuICAgICAqICAgIHJlY2VpdmluZyBhIHRydWUgb3IgZmFsc2UgdmFsdWUgYmFjay5cbiAgICAgKiAgQHRocm93cyB7UmFuZ2VFcnJvcn0gaWYgdGhlIGxpa2VsaWhvb2QgaXMgb3V0IG9mIGJvdW5kc1xuICAgICAqICBAcmV0dXJucyB7Qm9vbH0gZWl0aGVyIHRydWUgb3IgZmFsc2VcbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAvLyBsaWtlbGlob29kIG9mIHN1Y2Nlc3MgKHRydWUpXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bGlrZWxpaG9vZCA6IDUwfSk7XG5cbiAgICAgICAgLy8gTm90ZSwgd2UgY291bGQgZ2V0IHNvbWUgbWlub3IgcGVyZiBvcHRpbWl6YXRpb25zIGJ5IGNoZWNraW5nIHJhbmdlXG4gICAgICAgIC8vIHByaW9yIHRvIGluaXRpYWxpemluZyBkZWZhdWx0cywgYnV0IHRoYXQgbWFrZXMgY29kZSBhIGJpdCBtZXNzaWVyXG4gICAgICAgIC8vIGFuZCB0aGUgY2hlY2sgbW9yZSBjb21wbGljYXRlZCBhcyB3ZSBoYXZlIHRvIGNoZWNrIGV4aXN0ZW5jZSBvZlxuICAgICAgICAvLyB0aGUgb2JqZWN0IHRoZW4gZXhpc3RlbmNlIG9mIHRoZSBrZXkgYmVmb3JlIGNoZWNraW5nIGNvbnN0cmFpbnRzLlxuICAgICAgICAvLyBTaW5jZSB0aGUgb3B0aW9ucyBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgbWlub3IgY29tcHV0YXRpb25hbGx5LFxuICAgICAgICAvLyBkZWNpc2lvbiBtYWRlIGZvciBjb2RlIGNsZWFubGluZXNzIGludGVudGlvbmFsbHkuIFRoaXMgaXMgbWVudGlvbmVkXG4gICAgICAgIC8vIGhlcmUgYXMgaXQncyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSwgd2lsbCBub3QgYmUgbWVudGlvbmVkIGFnYWluLlxuICAgICAgICB0ZXN0UmFuZ2UoXG4gICAgICAgICAgICBvcHRpb25zLmxpa2VsaWhvb2QgPCAwIHx8IG9wdGlvbnMubGlrZWxpaG9vZCA+IDEwMCxcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBMaWtlbGlob29kIGFjY2VwdHMgdmFsdWVzIGZyb20gMCB0byAxMDAuXCJcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yYW5kb20oKSAqIDEwMCA8IG9wdGlvbnMubGlrZWxpaG9vZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIFJldHVybiBhIHJhbmRvbSBjaGFyYWN0ZXIuXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBjYW4gc3BlY2lmeSBhIGNoYXJhY3RlciBwb29sLCBvbmx5IGFscGhhLFxuICAgICAqICAgIG9ubHkgc3ltYm9scywgYW5kIGNhc2luZyAobG93ZXIgb3IgdXBwZXIpXG4gICAgICogIEByZXR1cm5zIHtTdHJpbmd9IGEgc2luZ2xlIHJhbmRvbSBjaGFyYWN0ZXJcbiAgICAgKiAgQHRocm93cyB7UmFuZ2VFcnJvcn0gQ2FuIG9ubHkgc3BlY2lmeSBhbHBoYSBvciBzeW1ib2xzLCBub3QgYm90aFxuICAgICAqL1xuICAgIENoYW5jZS5wcm90b3R5cGUuY2hhcmFjdGVyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB0ZXN0UmFuZ2UoXG4gICAgICAgICAgICBvcHRpb25zLmFscGhhICYmIG9wdGlvbnMuc3ltYm9scyxcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBDYW5ub3Qgc3BlY2lmeSBib3RoIGFscGhhIGFuZCBzeW1ib2xzLlwiXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIHN5bWJvbHMgPSBcIiFAIyQlXiYqKClbXVwiLFxuICAgICAgICAgICAgbGV0dGVycywgcG9vbDtcblxuICAgICAgICBpZiAob3B0aW9ucy5jYXNpbmcgPT09ICdsb3dlcicpIHtcbiAgICAgICAgICAgIGxldHRlcnMgPSBDSEFSU19MT1dFUjtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNhc2luZyA9PT0gJ3VwcGVyJykge1xuICAgICAgICAgICAgbGV0dGVycyA9IENIQVJTX1VQUEVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0dGVycyA9IENIQVJTX0xPV0VSICsgQ0hBUlNfVVBQRVI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wb29sKSB7XG4gICAgICAgICAgICBwb29sID0gb3B0aW9ucy5wb29sO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYWxwaGEpIHtcbiAgICAgICAgICAgIHBvb2wgPSBsZXR0ZXJzO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc3ltYm9scykge1xuICAgICAgICAgICAgcG9vbCA9IHN5bWJvbHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb29sID0gbGV0dGVycyArIE5VTUJFUlMgKyBzeW1ib2xzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBvb2wuY2hhckF0KHRoaXMubmF0dXJhbCh7bWF4OiAocG9vbC5sZW5ndGggLSAxKX0pKTtcbiAgICB9O1xuXG4gICAgLy8gTm90ZSwgd2FudGVkIHRvIHVzZSBcImZsb2F0XCIgb3IgXCJkb3VibGVcIiBidXQgdGhvc2UgYXJlIGJvdGggSlMgcmVzZXJ2ZWQgd29yZHMuXG5cbiAgICAvLyBOb3RlLCBmaXhlZCBtZWFucyBOIE9SIExFU1MgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsLiBUaGlzIGJlY2F1c2VcbiAgICAvLyBJdCBjb3VsZCBiZSAxNC45MDAwIGJ1dCBpbiBKYXZhU2NyaXB0LCB3aGVuIHRoaXMgaXMgY2FzdCBhcyBhIG51bWJlcixcbiAgICAvLyB0aGUgdHJhaWxpbmcgemVyb2VzIGFyZSBkcm9wcGVkLiBMZWZ0IHRvIHRoZSBjb25zdW1lciBpZiB0cmFpbGluZyB6ZXJvZXMgYXJlXG4gICAgLy8gbmVlZGVkXG4gICAgLyoqXG4gICAgICogIFJldHVybiBhIHJhbmRvbSBmbG9hdGluZyBwb2ludCBudW1iZXJcbiAgICAgKlxuICAgICAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIGNhbiBzcGVjaWZ5IGEgZml4ZWQgcHJlY2lzaW9uLCBtaW4sIG1heFxuICAgICAqICBAcmV0dXJucyB7TnVtYmVyfSBhIHNpbmdsZSBmbG9hdGluZyBwb2ludCBudW1iZXJcbiAgICAgKiAgQHRocm93cyB7UmFuZ2VFcnJvcn0gQ2FuIG9ubHkgc3BlY2lmeSBmaXhlZCBvciBwcmVjaXNpb24sIG5vdCBib3RoLiBBbHNvXG4gICAgICogICAgbWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4XG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5mbG9hdGluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7Zml4ZWQgOiA0fSk7XG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIG9wdGlvbnMuZml4ZWQgJiYgb3B0aW9ucy5wcmVjaXNpb24sXG4gICAgICAgICAgICBcIkNoYW5jZTogQ2Fubm90IHNwZWNpZnkgYm90aCBmaXhlZCBhbmQgcHJlY2lzaW9uLlwiXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIG51bTtcbiAgICAgICAgdmFyIGZpeGVkID0gTWF0aC5wb3coMTAsIG9wdGlvbnMuZml4ZWQpO1xuXG4gICAgICAgIHZhciBtYXggPSBNQVhfSU5UIC8gZml4ZWQ7XG4gICAgICAgIHZhciBtaW4gPSAtbWF4O1xuXG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIG9wdGlvbnMubWluICYmIG9wdGlvbnMuZml4ZWQgJiYgb3B0aW9ucy5taW4gPCBtaW4sXG4gICAgICAgICAgICBcIkNoYW5jZTogTWluIHNwZWNpZmllZCBpcyBvdXQgb2YgcmFuZ2Ugd2l0aCBmaXhlZC4gTWluIHNob3VsZCBiZSwgYXQgbGVhc3QsIFwiICsgbWluXG4gICAgICAgICk7XG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIG9wdGlvbnMubWF4ICYmIG9wdGlvbnMuZml4ZWQgJiYgb3B0aW9ucy5tYXggPiBtYXgsXG4gICAgICAgICAgICBcIkNoYW5jZTogTWF4IHNwZWNpZmllZCBpcyBvdXQgb2YgcmFuZ2Ugd2l0aCBmaXhlZC4gTWF4IHNob3VsZCBiZSwgYXQgbW9zdCwgXCIgKyBtYXhcbiAgICAgICAgKTtcblxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyBtaW4gOiBtaW4sIG1heCA6IG1heCB9KTtcblxuICAgICAgICAvLyBUb2RvIC0gTWFrZSB0aGlzIHdvcmshXG4gICAgICAgIC8vIG9wdGlvbnMucHJlY2lzaW9uID0gKHR5cGVvZiBvcHRpb25zLnByZWNpc2lvbiAhPT0gXCJ1bmRlZmluZWRcIikgPyBvcHRpb25zLnByZWNpc2lvbiA6IGZhbHNlO1xuXG4gICAgICAgIG51bSA9IHRoaXMuaW50ZWdlcih7bWluOiBvcHRpb25zLm1pbiAqIGZpeGVkLCBtYXg6IG9wdGlvbnMubWF4ICogZml4ZWR9KTtcbiAgICAgICAgdmFyIG51bV9maXhlZCA9IChudW0gLyBmaXhlZCkudG9GaXhlZChvcHRpb25zLmZpeGVkKTtcblxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChudW1fZml4ZWQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJuIGEgcmFuZG9tIGludGVnZXJcbiAgICAgKlxuICAgICAqICBOT1RFIHRoZSBtYXggYW5kIG1pbiBhcmUgSU5DTFVERUQgaW4gdGhlIHJhbmdlLiBTbzpcbiAgICAgKiAgY2hhbmNlLmludGVnZXIoe21pbjogMSwgbWF4OiAzfSk7XG4gICAgICogIHdvdWxkIHJldHVybiBlaXRoZXIgMSwgMiwgb3IgMy5cbiAgICAgKlxuICAgICAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIGNhbiBzcGVjaWZ5IGEgbWluIGFuZC9vciBtYXhcbiAgICAgKiAgQHJldHVybnMge051bWJlcn0gYSBzaW5nbGUgcmFuZG9tIGludGVnZXIgbnVtYmVyXG4gICAgICogIEB0aHJvd3Mge1JhbmdlRXJyb3J9IG1pbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1heFxuICAgICAqL1xuICAgIENoYW5jZS5wcm90b3R5cGUuaW50ZWdlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIC8vIDkwMDcxOTkyNTQ3NDA5OTIgKDJeNTMpIGlzIHRoZSBtYXggaW50ZWdlciBudW1iZXIgaW4gSmF2YVNjcmlwdFxuICAgICAgICAvLyBTZWU6IGh0dHA6Ly92cS5pby8xMzJzYTJqXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bWluOiBNSU5fSU5ULCBtYXg6IE1BWF9JTlR9KTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWluID4gb3B0aW9ucy5tYXgsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXguXCIpO1xuXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMucmFuZG9tKCkgKiAob3B0aW9ucy5tYXggLSBvcHRpb25zLm1pbiArIDEpICsgb3B0aW9ucy5taW4pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJuIGEgcmFuZG9tIG5hdHVyYWxcbiAgICAgKlxuICAgICAqICBOT1RFIHRoZSBtYXggYW5kIG1pbiBhcmUgSU5DTFVERUQgaW4gdGhlIHJhbmdlLiBTbzpcbiAgICAgKiAgY2hhbmNlLm5hdHVyYWwoe21pbjogMSwgbWF4OiAzfSk7XG4gICAgICogIHdvdWxkIHJldHVybiBlaXRoZXIgMSwgMiwgb3IgMy5cbiAgICAgKlxuICAgICAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIGNhbiBzcGVjaWZ5IGEgbWluIGFuZC9vciBtYXhcbiAgICAgKiAgQHJldHVybnMge051bWJlcn0gYSBzaW5nbGUgcmFuZG9tIGludGVnZXIgbnVtYmVyXG4gICAgICogIEB0aHJvd3Mge1JhbmdlRXJyb3J9IG1pbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1heFxuICAgICAqL1xuICAgIENoYW5jZS5wcm90b3R5cGUubmF0dXJhbCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bWluOiAwLCBtYXg6IE1BWF9JTlR9KTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWluIDwgMCwgXCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8uXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlZ2VyKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJuIGEgcmFuZG9tIHN0cmluZ1xuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gY2FuIHNwZWNpZnkgYSBsZW5ndGhcbiAgICAgKiAgQHJldHVybnMge1N0cmluZ30gYSBzdHJpbmcgb2YgcmFuZG9tIGxlbmd0aFxuICAgICAqICBAdGhyb3dzIHtSYW5nZUVycm9yfSBsZW5ndGggY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvXG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyBsZW5ndGg6IHRoaXMubmF0dXJhbCh7bWluOiA1LCBtYXg6IDIwfSkgfSk7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLmxlbmd0aCA8IDAsIFwiQ2hhbmNlOiBMZW5ndGggY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvLlwiKTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IG9wdGlvbnMubGVuZ3RoLFxuICAgICAgICAgICAgdGV4dCA9IHRoaXMubih0aGlzLmNoYXJhY3RlciwgbGVuZ3RoLCBvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGV4dC5qb2luKFwiXCIpO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgQmFzaWNzIC0tXG5cbiAgICAvLyAtLSBIZWxwZXJzIC0tXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNhcGl0YWxpemUgPSBmdW5jdGlvbiAod29yZCkge1xuICAgICAgICByZXR1cm4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc3Vic3RyKDEpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm1peGluID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBmb3IgKHZhciBmdW5jX25hbWUgaW4gb2JqKSB7XG4gICAgICAgICAgICBDaGFuY2UucHJvdG90eXBlW2Z1bmNfbmFtZV0gPSBvYmpbZnVuY19uYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgc29tZXRoaW5nIHJhbmRvbSBhbmQgYSBudW1iZXIgb2YgaXRlbXMgdG8gZ2VuZXJhdGUsXG4gICAgICogICAgcmV0dXJuIGFuIGFycmF5IG9mIGl0ZW1zIHdoZXJlIG5vbmUgcmVwZWF0LlxuICAgICAqXG4gICAgICogIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRoZSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBzb21ldGhpbmcgcmFuZG9tXG4gICAgICogIEBwYXJhbSB7TnVtYmVyfSBudW0gbnVtYmVyIG9mIHRlcm1zIHRvIGdlbmVyYXRlXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFueSBvcHRpb25zIHRvIHBhc3Mgb24gdG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvblxuICAgICAqICBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGxlbmd0aCBgbnVtYCB3aXRoIGV2ZXJ5IGl0ZW0gZ2VuZXJhdGVkIGJ5IGBmbmAgYW5kIHVuaXF1ZVxuICAgICAqXG4gICAgICogIFRoZXJlIGNhbiBiZSBtb3JlIHBhcmFtZXRlcnMgYWZ0ZXIgdGhlc2UuIEFsbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkIHRvIHRoZSBnaXZlbiBmdW5jdGlvblxuICAgICAqL1xuICAgIENoYW5jZS5wcm90b3R5cGUudW5pcXVlID0gZnVuY3Rpb24oZm4sIG51bSwgb3B0aW9ucykge1xuICAgICAgICB0ZXN0UmFuZ2UoXG4gICAgICAgICAgICB0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uLlwiXG4gICAgICAgICk7XG5cbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgY29tcGFyYXRvciB0byBjaGVjayB0aGF0IHZhbCBpcyBub3QgYWxyZWFkeSBpbiBhcnIuXG4gICAgICAgICAgICAvLyBTaG91bGQgcmV0dXJuIGBmYWxzZWAgaWYgaXRlbSBub3QgaW4gYXJyYXksIGB0cnVlYCBvdGhlcndpc2VcbiAgICAgICAgICAgIGNvbXBhcmF0b3I6IGZ1bmN0aW9uKGFyciwgdmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyci5pbmRleE9mKHZhbCkgIT09IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgYXJyID0gW10sIGNvdW50ID0gMCwgcmVzdWx0LCBNQVhfRFVQTElDQVRFUyA9IG51bSAqIDUwLCBwYXJhbXMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG5cbiAgICAgICAgd2hpbGUgKGFyci5sZW5ndGggPCBudW0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZuLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuY29tcGFyYXRvcihhcnIsIHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIC8vIHJlc2V0IGNvdW50IHdoZW4gdW5pcXVlIGZvdW5kXG4gICAgICAgICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKytjb3VudCA+IE1BWF9EVVBMSUNBVEVTKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDaGFuY2U6IG51bSBpcyBsaWtlbHkgdG9vIGxhcmdlIGZvciBzYW1wbGUgc2V0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBHaXZlcyBhbiBhcnJheSBvZiBuIHJhbmRvbSB0ZXJtc1xuICAgICAqXG4gICAgICogIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRoZSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBzb21ldGhpbmcgcmFuZG9tXG4gICAgICogIEBwYXJhbSB7TnVtYmVyfSBuIG51bWJlciBvZiB0ZXJtcyB0byBnZW5lcmF0ZVxuICAgICAqICBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGxlbmd0aCBgbmAgd2l0aCBpdGVtcyBnZW5lcmF0ZWQgYnkgYGZuYFxuICAgICAqXG4gICAgICogIFRoZXJlIGNhbiBiZSBtb3JlIHBhcmFtZXRlcnMgYWZ0ZXIgdGhlc2UuIEFsbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkIHRvIHRoZSBnaXZlbiBmdW5jdGlvblxuICAgICAqL1xuICAgIENoYW5jZS5wcm90b3R5cGUubiA9IGZ1bmN0aW9uKGZuLCBuKSB7XG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgXCJDaGFuY2U6IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24uXCJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodHlwZW9mIG4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBuID0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaSA9IG4sIGFyciA9IFtdLCBwYXJhbXMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG5cbiAgICAgICAgLy8gUHJvdmlkaW5nIGEgbmVnYXRpdmUgY291bnQgc2hvdWxkIHJlc3VsdCBpbiBhIG5vb3AuXG4gICAgICAgIGkgPSBNYXRoLm1heCggMCwgaSApO1xuXG4gICAgICAgIGZvciAobnVsbDsgaS0tOyBudWxsKSB7XG4gICAgICAgICAgICBhcnIucHVzaChmbi5hcHBseSh0aGlzLCBwYXJhbXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfTtcblxuICAgIC8vIEgvVCB0byBTTyBmb3IgdGhpcyBvbmU6IGh0dHA6Ly92cS5pby9PdFVyWjVcbiAgICBDaGFuY2UucHJvdG90eXBlLnBhZCA9IGZ1bmN0aW9uIChudW1iZXIsIHdpZHRoLCBwYWQpIHtcbiAgICAgICAgLy8gRGVmYXVsdCBwYWQgdG8gMCBpZiBub25lIHByb3ZpZGVkXG4gICAgICAgIHBhZCA9IHBhZCB8fCAnMCc7XG4gICAgICAgIC8vIENvbnZlcnQgbnVtYmVyIHRvIGEgc3RyaW5nXG4gICAgICAgIG51bWJlciA9IG51bWJlciArICcnO1xuICAgICAgICByZXR1cm4gbnVtYmVyLmxlbmd0aCA+PSB3aWR0aCA/IG51bWJlciA6IG5ldyBBcnJheSh3aWR0aCAtIG51bWJlci5sZW5ndGggKyAxKS5qb2luKHBhZCkgKyBudW1iZXI7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucGljayA9IGZ1bmN0aW9uIChhcnIsIGNvdW50KSB7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNoYW5jZTogQ2Fubm90IHBpY2soKSBmcm9tIGFuIGVtcHR5IGFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY291bnQgfHwgY291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJbdGhpcy5uYXR1cmFsKHttYXg6IGFyci5sZW5ndGggLSAxfSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2h1ZmZsZShhcnIpLnNsaWNlKDAsIGNvdW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnNodWZmbGUgPSBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIHZhciBvbGRfYXJyYXkgPSBhcnIuc2xpY2UoMCksXG4gICAgICAgICAgICBuZXdfYXJyYXkgPSBbXSxcbiAgICAgICAgICAgIGogPSAwLFxuICAgICAgICAgICAgbGVuZ3RoID0gTnVtYmVyKG9sZF9hcnJheS5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIFBpY2sgYSByYW5kb20gaW5kZXggZnJvbSB0aGUgYXJyYXlcbiAgICAgICAgICAgIGogPSB0aGlzLm5hdHVyYWwoe21heDogb2xkX2FycmF5Lmxlbmd0aCAtIDF9KTtcbiAgICAgICAgICAgIC8vIEFkZCBpdCB0byB0aGUgbmV3IGFycmF5XG4gICAgICAgICAgICBuZXdfYXJyYXlbaV0gPSBvbGRfYXJyYXlbal07XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhhdCBlbGVtZW50IGZyb20gdGhlIG9yaWdpbmFsIGFycmF5XG4gICAgICAgICAgICBvbGRfYXJyYXkuc3BsaWNlKGosIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld19hcnJheTtcbiAgICB9O1xuXG4gICAgLy8gUmV0dXJucyBhIHNpbmdsZSBpdGVtIGZyb20gYW4gYXJyYXkgd2l0aCByZWxhdGl2ZSB3ZWlnaHRpbmcgb2Ygb2Rkc1xuICAgIENoYW5jZS5wcm90b3R5cGUud2VpZ2h0ZWQgPSBmdW5jdGlvbihhcnIsIHdlaWdodHMpIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggIT09IHdlaWdodHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNoYW5jZTogbGVuZ3RoIG9mIGFycmF5IGFuZCB3ZWlnaHRzIG11c3QgbWF0Y2hcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgd2VpZ2h0cyB0aGF0IGFyZSBsZXNzIG9yIGVxdWFsIHRvIHplcm8uXG4gICAgICAgIGZvciAodmFyIHdlaWdodEluZGV4ID0gd2VpZ2h0cy5sZW5ndGggLSAxOyB3ZWlnaHRJbmRleCA+PSAwOyAtLXdlaWdodEluZGV4KSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgd2VpZ2h0IGlzIGxlc3Mgb3IgZXF1YWwgdG8gemVybywgcmVtb3ZlIGl0IGFuZCB0aGUgdmFsdWUuXG4gICAgICAgICAgICBpZiAod2VpZ2h0c1t3ZWlnaHRJbmRleF0gPD0gMCkge1xuICAgICAgICAgICAgICAgIGFyci5zcGxpY2Uod2VpZ2h0SW5kZXgsMSk7XG4gICAgICAgICAgICAgICAgd2VpZ2h0cy5zcGxpY2Uod2VpZ2h0SW5kZXgsMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhbnkgb2YgdGhlIHdlaWdodHMgYXJlIGxlc3MgdGhhbiAxLCB3ZSB3YW50IHRvIHNjYWxlIHRoZW0gdXAgdG8gd2hvbGVcbiAgICAgICAgLy8gICBudW1iZXJzIGZvciB0aGUgcmVzdCBvZiB0aGlzIGxvZ2ljIHRvIHdvcmtcbiAgICAgICAgaWYgKHdlaWdodHMuc29tZShmdW5jdGlvbih3ZWlnaHQpIHsgcmV0dXJuIHdlaWdodCA8IDE7IH0pKSB7XG4gICAgICAgICAgICB2YXIgbWluID0gd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24obWluLCB3ZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHdlaWdodCA8IG1pbikgPyB3ZWlnaHQgOiBtaW47XG4gICAgICAgICAgICB9LCB3ZWlnaHRzWzBdKTtcblxuICAgICAgICAgICAgdmFyIHNjYWxpbmdfZmFjdG9yID0gMSAvIG1pbjtcblxuICAgICAgICAgICAgd2VpZ2h0cyA9IHdlaWdodHMubWFwKGZ1bmN0aW9uKHdlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3ZWlnaHQgKiBzY2FsaW5nX2ZhY3RvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN1bSA9IHdlaWdodHMucmVkdWNlKGZ1bmN0aW9uKHRvdGFsLCB3ZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0b3RhbCArIHdlaWdodDtcbiAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgLy8gZ2V0IGFuIGluZGV4XG4gICAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMubmF0dXJhbCh7IG1pbjogMSwgbWF4OiBzdW0gfSk7XG5cbiAgICAgICAgdmFyIHRvdGFsID0gMDtcbiAgICAgICAgdmFyIGNob3NlbjtcbiAgICAgICAgLy8gVXNpbmcgc29tZSgpIGhlcmUgc28gd2UgY2FuIGJhaWwgYXMgc29vbiBhcyB3ZSBnZXQgb3VyIG1hdGNoXG4gICAgICAgIHdlaWdodHMuc29tZShmdW5jdGlvbih3ZWlnaHQsIGluZGV4KSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPD0gdG90YWwgKyB3ZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjaG9zZW4gPSBhcnJbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY2hvc2VuO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgSGVscGVycyAtLVxuXG4gICAgLy8gLS0gVGV4dCAtLVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wYXJhZ3JhcGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHNlbnRlbmNlcyA9IG9wdGlvbnMuc2VudGVuY2VzIHx8IHRoaXMubmF0dXJhbCh7bWluOiAzLCBtYXg6IDd9KSxcbiAgICAgICAgICAgIHNlbnRlbmNlX2FycmF5ID0gdGhpcy5uKHRoaXMuc2VudGVuY2UsIHNlbnRlbmNlcyk7XG5cbiAgICAgICAgcmV0dXJuIHNlbnRlbmNlX2FycmF5LmpvaW4oJyAnKTtcbiAgICB9O1xuXG4gICAgLy8gQ291bGQgZ2V0IHNtYXJ0ZXIgYWJvdXQgdGhpcyB0aGFuIGdlbmVyYXRpbmcgcmFuZG9tIHdvcmRzIGFuZFxuICAgIC8vIGNoYWluaW5nIHRoZW0gdG9nZXRoZXIuIFN1Y2ggYXM6IGh0dHA6Ly92cS5pby8xYTVjZU9oXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zZW50ZW5jZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgd29yZHMgPSBvcHRpb25zLndvcmRzIHx8IHRoaXMubmF0dXJhbCh7bWluOiAxMiwgbWF4OiAxOH0pLFxuICAgICAgICAgICAgcHVuY3R1YXRpb24gPSBvcHRpb25zLnB1bmN0dWF0aW9uLFxuICAgICAgICAgICAgdGV4dCwgd29yZF9hcnJheSA9IHRoaXMubih0aGlzLndvcmQsIHdvcmRzKTtcblxuICAgICAgICB0ZXh0ID0gd29yZF9hcnJheS5qb2luKCcgJyk7XG4gICAgICAgIFxuICAgICAgICAvLyBDYXBpdGFsaXplIGZpcnN0IGxldHRlciBvZiBzZW50ZW5jZVxuICAgICAgICB0ZXh0ID0gdGhpcy5jYXBpdGFsaXplKHRleHQpO1xuICAgICAgICBcbiAgICAgICAgLy8gTWFrZSBzdXJlIHB1bmN0dWF0aW9uIGhhcyBhIHVzYWJsZSB2YWx1ZVxuICAgICAgICBpZiAocHVuY3R1YXRpb24gIT09IGZhbHNlICYmICEvXltcXC5cXD87ITpdJC8udGVzdChwdW5jdHVhdGlvbikpIHtcbiAgICAgICAgICAgIHB1bmN0dWF0aW9uID0gJy4nO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBBZGQgcHVuY3R1YXRpb24gbWFya1xuICAgICAgICBpZiAocHVuY3R1YXRpb24pIHtcbiAgICAgICAgICAgIHRleHQgKz0gcHVuY3R1YXRpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zeWxsYWJsZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGggfHwgdGhpcy5uYXR1cmFsKHttaW46IDIsIG1heDogM30pLFxuICAgICAgICAgICAgY29uc29uYW50cyA9ICdiY2RmZ2hqa2xtbnByc3R2d3onLCAvLyBjb25zb25hbnRzIGV4Y2VwdCBoYXJkIHRvIHNwZWFrIG9uZXNcbiAgICAgICAgICAgIHZvd2VscyA9ICdhZWlvdScsIC8vIHZvd2Vsc1xuICAgICAgICAgICAgYWxsID0gY29uc29uYW50cyArIHZvd2VscywgLy8gYWxsXG4gICAgICAgICAgICB0ZXh0ID0gJycsXG4gICAgICAgICAgICBjaHI7XG5cbiAgICAgICAgLy8gSSdtIHN1cmUgdGhlcmUncyBhIG1vcmUgZWxlZ2FudCB3YXkgdG8gZG8gdGhpcywgYnV0IHRoaXMgd29ya3NcbiAgICAgICAgLy8gZGVjZW50bHkgd2VsbC5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBGaXJzdCBjaGFyYWN0ZXIgY2FuIGJlIGFueXRoaW5nXG4gICAgICAgICAgICAgICAgY2hyID0gdGhpcy5jaGFyYWN0ZXIoe3Bvb2w6IGFsbH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25zb25hbnRzLmluZGV4T2YoY2hyKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBMYXN0IGNoYXJhY3RlciB3YXMgYSB2b3dlbCwgbm93IHdlIHdhbnQgYSBjb25zb25hbnRcbiAgICAgICAgICAgICAgICBjaHIgPSB0aGlzLmNoYXJhY3Rlcih7cG9vbDogY29uc29uYW50c30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBMYXN0IGNoYXJhY3RlciB3YXMgYSBjb25zb25hbnQsIG5vdyB3ZSB3YW50IGEgdm93ZWxcbiAgICAgICAgICAgICAgICBjaHIgPSB0aGlzLmNoYXJhY3Rlcih7cG9vbDogdm93ZWxzfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRleHQgKz0gY2hyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUud29yZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB0ZXN0UmFuZ2UoXG4gICAgICAgICAgICBvcHRpb25zLnN5bGxhYmxlcyAmJiBvcHRpb25zLmxlbmd0aCxcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBDYW5ub3Qgc3BlY2lmeSBib3RoIHN5bGxhYmxlcyBBTkQgbGVuZ3RoLlwiXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIHN5bGxhYmxlcyA9IG9wdGlvbnMuc3lsbGFibGVzIHx8IHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IDN9KSxcbiAgICAgICAgICAgIHRleHQgPSAnJztcblxuICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIEVpdGhlciBib3VuZCB3b3JkIGJ5IGxlbmd0aFxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHRleHQgKz0gdGhpcy5zeWxsYWJsZSgpO1xuICAgICAgICAgICAgfSB3aGlsZSAodGV4dC5sZW5ndGggPCBvcHRpb25zLmxlbmd0aCk7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgb3B0aW9ucy5sZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3IgYnkgbnVtYmVyIG9mIHN5bGxhYmxlc1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzeWxsYWJsZXM7IGkrKykge1xuICAgICAgICAgICAgICAgIHRleHQgKz0gdGhpcy5zeWxsYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgVGV4dCAtLVxuXG4gICAgLy8gLS0gUGVyc29uIC0tXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmFnZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdmFyIGFnZVJhbmdlO1xuXG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjaGlsZCc6XG4gICAgICAgICAgICAgICAgYWdlUmFuZ2UgPSB7bWluOiAxLCBtYXg6IDEyfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RlZW4nOlxuICAgICAgICAgICAgICAgIGFnZVJhbmdlID0ge21pbjogMTMsIG1heDogMTl9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWR1bHQnOlxuICAgICAgICAgICAgICAgIGFnZVJhbmdlID0ge21pbjogMTgsIG1heDogNjV9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VuaW9yJzpcbiAgICAgICAgICAgICAgICBhZ2VSYW5nZSA9IHttaW46IDY1LCBtYXg6IDEwMH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhbGwnOlxuICAgICAgICAgICAgICAgIGFnZVJhbmdlID0ge21pbjogMSwgbWF4OiAxMDB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhZ2VSYW5nZSA9IHttaW46IDE4LCBtYXg6IDY1fTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoYWdlUmFuZ2UpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmJpcnRoZGF5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgIHllYXI6IChuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgLSB0aGlzLmFnZShvcHRpb25zKSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgLy8gQ1BGOyBJRCB0byBpZGVudGlmeSB0YXhwYXllcnMgaW4gQnJhemlsXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jcGYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5uKHRoaXMubmF0dXJhbCwgOSwgeyBtYXg6IDkgfSk7XG4gICAgICAgIHZhciBkMSA9IG5bOF0qMituWzddKjMrbls2XSo0K25bNV0qNStuWzRdKjYrblszXSo3K25bMl0qOCtuWzFdKjkrblswXSoxMDtcbiAgICAgICAgZDEgPSAxMSAtIChkMSAlIDExKTtcbiAgICAgICAgaWYgKGQxPj0xMCkge1xuICAgICAgICAgICAgZDEgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkMiA9IGQxKjIrbls4XSozK25bN10qNCtuWzZdKjUrbls1XSo2K25bNF0qNytuWzNdKjgrblsyXSo5K25bMV0qMTArblswXSoxMTtcbiAgICAgICAgZDIgPSAxMSAtIChkMiAlIDExKTtcbiAgICAgICAgaWYgKGQyPj0xMCkge1xuICAgICAgICAgICAgZDIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJytuWzBdK25bMV0rblsyXSsnLicrblszXStuWzRdK25bNV0rJy4nK25bNl0rbls3XStuWzhdKyctJytkMStkMjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5maXJzdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7Z2VuZGVyOiB0aGlzLmdlbmRlcigpfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy5nZXQoXCJmaXJzdE5hbWVzXCIpW29wdGlvbnMuZ2VuZGVyLnRvTG93ZXJDYXNlKCldKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5nZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2soWydNYWxlJywgJ0ZlbWFsZSddKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5sYXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrKHRoaXMuZ2V0KFwibGFzdE5hbWVzXCIpKTtcbiAgICB9O1xuICAgIFxuICAgIENoYW5jZS5wcm90b3R5cGUuaXNyYWVsSWQ9ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHg9dGhpcy5zdHJpbmcoe3Bvb2w6ICcwMTIzNDU2Nzg5JyxsZW5ndGg6OH0pO1xuICAgICAgICB2YXIgeT0wO1xuICAgICAgICBmb3IgKHZhciBpPTA7aTx4Lmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgdmFyIHRoaXNEaWdpdD0gIHhbaV0gKiAgKGkvMj09PXBhcnNlSW50KGkvMikgPyAxIDogMik7XG4gICAgICAgICAgICB0aGlzRGlnaXQ9dGhpcy5wYWQodGhpc0RpZ2l0LDIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzRGlnaXQ9cGFyc2VJbnQodGhpc0RpZ2l0WzBdKSArIHBhcnNlSW50KHRoaXNEaWdpdFsxXSk7XG4gICAgICAgICAgICB5PXkrdGhpc0RpZ2l0O1xuICAgICAgICB9XG4gICAgICAgIHg9eCsoMTAtcGFyc2VJbnQoeS50b1N0cmluZygpLnNsaWNlKC0xKSkpLnRvU3RyaW5nKCkuc2xpY2UoLTEpO1xuICAgICAgICByZXR1cm4geDtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5tcnogPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgY2hlY2tEaWdpdCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgdmFyIGFscGhhID0gXCI8QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVhaXCIuc3BsaXQoJycpLFxuICAgICAgICAgICAgICAgIG11bHRpcGxpZXJzID0gWyA3LCAzLCAxIF0sXG4gICAgICAgICAgICAgICAgcnVubmluZ1RvdGFsID0gMDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uKGNoYXJhY3RlciwgaWR4KSB7XG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IGFscGhhLmluZGV4T2YoY2hhcmFjdGVyKTtcblxuICAgICAgICAgICAgICAgIGlmKHBvcyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gcG9zID09PSAwID8gMCA6IHBvcyArIDk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gcGFyc2VJbnQoY2hhcmFjdGVyLCAxMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoYXJhY3RlciAqPSBtdWx0aXBsaWVyc1tpZHggJSBtdWx0aXBsaWVycy5sZW5ndGhdO1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUb3RhbCArPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBydW5uaW5nVG90YWwgJSAxMDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGdlbmVyYXRlID0gZnVuY3Rpb24gKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBwYWQgPSBmdW5jdGlvbiAobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheShsZW5ndGggKyAxKS5qb2luKCc8Jyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIG51bWJlciA9IFsgJ1A8JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuaXNzdWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5sYXN0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnPDwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maXJzdC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkKDM5IC0gKG9wdHMubGFzdC5sZW5ndGggKyBvcHRzLmZpcnN0Lmxlbmd0aCArIDIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMucGFzc3BvcnROdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0RpZ2l0KG9wdHMucGFzc3BvcnROdW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5uYXRpb25hbGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZG9iLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tEaWdpdChvcHRzLmRvYiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmdlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZXhwaXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tEaWdpdChvcHRzLmV4cGlyeSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQoMTQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tEaWdpdChwYWQoMTQpKSBdLmpvaW4oJycpO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICtcbiAgICAgICAgICAgICAgICAoY2hlY2tEaWdpdChudW1iZXIuc3Vic3RyKDQ0LCAxMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlci5zdWJzdHIoNTcsIDcpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIuc3Vic3RyKDY1LCA3KSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge1xuICAgICAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QoKSxcbiAgICAgICAgICAgIGxhc3Q6IHRoaXMubGFzdCgpLFxuICAgICAgICAgICAgcGFzc3BvcnROdW1iZXI6IHRoaXMuaW50ZWdlcih7bWluOiAxMDAwMDAwMDAsIG1heDogOTk5OTk5OTk5fSksXG4gICAgICAgICAgICBkb2I6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGUgPSB0aGF0LmJpcnRoZGF5KHt0eXBlOiAnYWR1bHQnfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHIoMiksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnBhZChkYXRlLmdldE1vbnRoKCkgKyAxLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQucGFkKGRhdGUuZ2V0RGF0ZSgpLCAyKV0uam9pbignJyk7XG4gICAgICAgICAgICB9KCkpLFxuICAgICAgICAgICAgZXhwaXJ5OiAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWyhkYXRlLmdldEZ1bGxZZWFyKCkgKyA1KS50b1N0cmluZygpLnN1YnN0cigyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQucGFkKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5wYWQoZGF0ZS5nZXREYXRlKCksIDIpXS5qb2luKCcnKTtcbiAgICAgICAgICAgIH0oKSksXG4gICAgICAgICAgICBnZW5kZXI6IHRoaXMuZ2VuZGVyKCkgPT09ICdGZW1hbGUnID8gJ0YnOiAnTScsXG4gICAgICAgICAgICBpc3N1ZXI6ICdHQlInLFxuICAgICAgICAgICAgbmF0aW9uYWxpdHk6ICdHQlInXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZ2VuZXJhdGUgKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm5hbWUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIGZpcnN0ID0gdGhpcy5maXJzdChvcHRpb25zKSxcbiAgICAgICAgICAgIGxhc3QgPSB0aGlzLmxhc3QoKSxcbiAgICAgICAgICAgIG5hbWU7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWlkZGxlKSB7XG4gICAgICAgICAgICBuYW1lID0gZmlyc3QgKyAnICcgKyB0aGlzLmZpcnN0KG9wdGlvbnMpICsgJyAnICsgbGFzdDtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm1pZGRsZV9pbml0aWFsKSB7XG4gICAgICAgICAgICBuYW1lID0gZmlyc3QgKyAnICcgKyB0aGlzLmNoYXJhY3Rlcih7YWxwaGE6IHRydWUsIGNhc2luZzogJ3VwcGVyJ30pICsgJy4gJyArIGxhc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYW1lID0gZmlyc3QgKyAnICcgKyBsYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4KSB7XG4gICAgICAgICAgICBuYW1lID0gdGhpcy5wcmVmaXgob3B0aW9ucykgKyAnICcgKyBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3VmZml4KSB7XG4gICAgICAgICAgICBuYW1lID0gbmFtZSArICcgJyArIHRoaXMuc3VmZml4KG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfTtcblxuICAgIC8vIFJldHVybiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgbmFtZSBwcmVmaXhlcyBiYXNlZCBvbiBzdXBwbGllZCBnZW5kZXIuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uYW1lX3ByZWZpeGVzID0gZnVuY3Rpb24gKGdlbmRlcikge1xuICAgICAgICBnZW5kZXIgPSBnZW5kZXIgfHwgXCJhbGxcIjtcbiAgICAgICAgZ2VuZGVyID0gZ2VuZGVyLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgdmFyIHByZWZpeGVzID0gW1xuICAgICAgICAgICAgeyBuYW1lOiAnRG9jdG9yJywgYWJicmV2aWF0aW9uOiAnRHIuJyB9XG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKGdlbmRlciA9PT0gXCJtYWxlXCIgfHwgZ2VuZGVyID09PSBcImFsbFwiKSB7XG4gICAgICAgICAgICBwcmVmaXhlcy5wdXNoKHsgbmFtZTogJ01pc3RlcicsIGFiYnJldmlhdGlvbjogJ01yLicgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2VuZGVyID09PSBcImZlbWFsZVwiIHx8IGdlbmRlciA9PT0gXCJhbGxcIikge1xuICAgICAgICAgICAgcHJlZml4ZXMucHVzaCh7IG5hbWU6ICdNaXNzJywgYWJicmV2aWF0aW9uOiAnTWlzcycgfSk7XG4gICAgICAgICAgICBwcmVmaXhlcy5wdXNoKHsgbmFtZTogJ01pc3NlcycsIGFiYnJldmlhdGlvbjogJ01ycy4nIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByZWZpeGVzO1xuICAgIH07XG5cbiAgICAvLyBBbGlhcyBmb3IgbmFtZV9wcmVmaXhcbiAgICBDaGFuY2UucHJvdG90eXBlLnByZWZpeCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWVfcHJlZml4KG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm5hbWVfcHJlZml4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHsgZ2VuZGVyOiBcImFsbFwiIH0pO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5mdWxsID9cbiAgICAgICAgICAgIHRoaXMucGljayh0aGlzLm5hbWVfcHJlZml4ZXMob3B0aW9ucy5nZW5kZXIpKS5uYW1lIDpcbiAgICAgICAgICAgIHRoaXMucGljayh0aGlzLm5hbWVfcHJlZml4ZXMob3B0aW9ucy5nZW5kZXIpKS5hYmJyZXZpYXRpb247XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc3NuID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtzc25Gb3VyOiBmYWxzZSwgZGFzaGVzOiB0cnVlfSk7XG4gICAgICAgIHZhciBzc25fcG9vbCA9IFwiMTIzNDU2Nzg5MFwiLFxuICAgICAgICAgICAgc3NuLFxuICAgICAgICAgICAgZGFzaCA9IG9wdGlvbnMuZGFzaGVzID8gJy0nIDogJyc7XG5cbiAgICAgICAgaWYoIW9wdGlvbnMuc3NuRm91cikge1xuICAgICAgICAgICAgc3NuID0gdGhpcy5zdHJpbmcoe3Bvb2w6IHNzbl9wb29sLCBsZW5ndGg6IDN9KSArIGRhc2ggK1xuICAgICAgICAgICAgdGhpcy5zdHJpbmcoe3Bvb2w6IHNzbl9wb29sLCBsZW5ndGg6IDJ9KSArIGRhc2ggK1xuICAgICAgICAgICAgdGhpcy5zdHJpbmcoe3Bvb2w6IHNzbl9wb29sLCBsZW5ndGg6IDR9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNzbiA9IHRoaXMuc3RyaW5nKHtwb29sOiBzc25fcG9vbCwgbGVuZ3RoOiA0fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNzbjtcbiAgICB9O1xuXG4gICAgLy8gUmV0dXJuIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBuYW1lIHN1ZmZpeGVzXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uYW1lX3N1ZmZpeGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3VmZml4ZXMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6ICdEb2N0b3Igb2YgT3N0ZW9wYXRoaWMgTWVkaWNpbmUnLCBhYmJyZXZpYXRpb246ICdELk8uJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnRG9jdG9yIG9mIFBoaWxvc29waHknLCBhYmJyZXZpYXRpb246ICdQaC5ELicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0VzcXVpcmUnLCBhYmJyZXZpYXRpb246ICdFc3EuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnSnVuaW9yJywgYWJicmV2aWF0aW9uOiAnSnIuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnSnVyaXMgRG9jdG9yJywgYWJicmV2aWF0aW9uOiAnSi5ELicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ01hc3RlciBvZiBBcnRzJywgYWJicmV2aWF0aW9uOiAnTS5BLicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ01hc3RlciBvZiBCdXNpbmVzcyBBZG1pbmlzdHJhdGlvbicsIGFiYnJldmlhdGlvbjogJ00uQi5BLicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ01hc3RlciBvZiBTY2llbmNlJywgYWJicmV2aWF0aW9uOiAnTS5TLicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ01lZGljYWwgRG9jdG9yJywgYWJicmV2aWF0aW9uOiAnTS5ELicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1NlbmlvcicsIGFiYnJldmlhdGlvbjogJ1NyLicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1RoZSBUaGlyZCcsIGFiYnJldmlhdGlvbjogJ0lJSScgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1RoZSBGb3VydGgnLCBhYmJyZXZpYXRpb246ICdJVicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0JhY2hlbG9yIG9mIEVuZ2luZWVyaW5nJywgYWJicmV2aWF0aW9uOiAnQi5FJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQmFjaGVsb3Igb2YgVGVjaG5vbG9neScsIGFiYnJldmlhdGlvbjogJ0IuVEVDSCcgfVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gc3VmZml4ZXM7XG4gICAgfTtcblxuICAgIC8vIEFsaWFzIGZvciBuYW1lX3N1ZmZpeFxuICAgIENoYW5jZS5wcm90b3R5cGUuc3VmZml4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZV9zdWZmaXgob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubmFtZV9zdWZmaXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZ1bGwgP1xuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMubmFtZV9zdWZmaXhlcygpKS5uYW1lIDpcbiAgICAgICAgICAgIHRoaXMucGljayh0aGlzLm5hbWVfc3VmZml4ZXMoKSkuYWJicmV2aWF0aW9uO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgUGVyc29uIC0tXG5cbiAgICAvLyAtLSBNb2JpbGUgLS1cbiAgICAvLyBBbmRyb2lkIEdDTSBSZWdpc3RyYXRpb24gSURcbiAgICBDaGFuY2UucHJvdG90eXBlLmFuZHJvaWRfaWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcIkFQQTkxXCIgKyB0aGlzLnN0cmluZyh7IHBvb2w6IFwiMDEyMzQ1Njc4OWFiY2VmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCIsIGxlbmd0aDogMTc4IH0pO1xuICAgIH07XG5cbiAgICAvLyBBcHBsZSBQdXNoIFRva2VuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hcHBsZV90b2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKHsgcG9vbDogXCJhYmNkZWYxMjM0NTY3ODkwXCIsIGxlbmd0aDogNjQgfSk7XG4gICAgfTtcblxuICAgIC8vIFdpbmRvd3MgUGhvbmUgOCBBTklEMlxuICAgIENoYW5jZS5wcm90b3R5cGUud3A4X2FuaWQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYmFzZTY0KCB0aGlzLmhhc2goIHsgbGVuZ3RoIDogMzIgfSApICk7XG4gICAgfTtcblxuICAgIC8vIFdpbmRvd3MgUGhvbmUgNyBBTklEXG4gICAgQ2hhbmNlLnByb3RvdHlwZS53cDdfYW5pZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdBPScgKyB0aGlzLmd1aWQoKS5yZXBsYWNlKC8tL2csICcnKS50b1VwcGVyQ2FzZSgpICsgJyZFPScgKyB0aGlzLmhhc2goeyBsZW5ndGg6MyB9KSArICcmVz0nICsgdGhpcy5pbnRlZ2VyKHsgbWluOjAsIG1heDo5IH0pO1xuICAgIH07XG5cbiAgICAvLyBCbGFja0JlcnJ5IERldmljZSBQSU5cbiAgICBDaGFuY2UucHJvdG90eXBlLmJiX3BpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzaCh7IGxlbmd0aDogOCB9KTtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIE1vYmlsZSAtLVxuXG4gICAgLy8gLS0gV2ViIC0tXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hdmF0YXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgdXJsID0gbnVsbDtcbiAgICAgICAgdmFyIFVSTF9CQVNFID0gJy8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIvJztcbiAgICAgICAgdmFyIFBST1RPQ09MUyA9IHtcbiAgICAgICAgICAgIGh0dHA6ICdodHRwJyxcbiAgICAgICAgICAgIGh0dHBzOiAnaHR0cHMnXG4gICAgICAgIH07XG4gICAgICAgIHZhciBGSUxFX1RZUEVTID0ge1xuICAgICAgICAgICAgYm1wOiAnYm1wJyxcbiAgICAgICAgICAgIGdpZjogJ2dpZicsXG4gICAgICAgICAgICBqcGc6ICdqcGcnLFxuICAgICAgICAgICAgcG5nOiAncG5nJ1xuICAgICAgICB9O1xuICAgICAgICB2YXIgRkFMTEJBQ0tTID0ge1xuICAgICAgICAgICAgJzQwNCc6ICc0MDQnLCAvLyBSZXR1cm4gNDA0IGlmIG5vdCBmb3VuZFxuICAgICAgICAgICAgbW06ICdtbScsIC8vIE15c3RlcnkgbWFuXG4gICAgICAgICAgICBpZGVudGljb246ICdpZGVudGljb24nLCAvLyBHZW9tZXRyaWMgcGF0dGVybiBiYXNlZCBvbiBoYXNoXG4gICAgICAgICAgICBtb25zdGVyaWQ6ICdtb25zdGVyaWQnLCAvLyBBIGdlbmVyYXRlZCBtb25zdGVyIGljb25cbiAgICAgICAgICAgIHdhdmF0YXI6ICd3YXZhdGFyJywgLy8gQSBnZW5lcmF0ZWQgZmFjZVxuICAgICAgICAgICAgcmV0cm86ICdyZXRybycsIC8vIDgtYml0IGljb25cbiAgICAgICAgICAgIGJsYW5rOiAnYmxhbmsnIC8vIEEgdHJhbnNwYXJlbnQgcG5nXG4gICAgICAgIH07XG4gICAgICAgIHZhciBSQVRJTkdTID0ge1xuICAgICAgICAgICAgZzogJ2cnLFxuICAgICAgICAgICAgcGc6ICdwZycsXG4gICAgICAgICAgICByOiAncicsXG4gICAgICAgICAgICB4OiAneCdcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9wdHMgPSB7XG4gICAgICAgICAgICBwcm90b2NvbDogbnVsbCxcbiAgICAgICAgICAgIGVtYWlsOiBudWxsLFxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbjogbnVsbCxcbiAgICAgICAgICAgIHNpemU6IG51bGwsXG4gICAgICAgICAgICBmYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgIHJhdGluZzogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgLy8gU2V0IHRvIGEgcmFuZG9tIGVtYWlsXG4gICAgICAgICAgICBvcHRzLmVtYWlsID0gdGhpcy5lbWFpbCgpO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgb3B0cy5lbWFpbCA9IG9wdGlvbnM7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLmNvbnN0cnVjdG9yID09PSAnQXJyYXknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdHMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCBvcHRzKTtcblxuICAgICAgICBpZiAoIW9wdHMuZW1haWwpIHtcbiAgICAgICAgICAgIC8vIFNldCB0byBhIHJhbmRvbSBlbWFpbFxuICAgICAgICAgICAgb3B0cy5lbWFpbCA9IHRoaXMuZW1haWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNhZmUgY2hlY2tpbmcgZm9yIHBhcmFtc1xuICAgICAgICBvcHRzLnByb3RvY29sID0gUFJPVE9DT0xTW29wdHMucHJvdG9jb2xdID8gb3B0cy5wcm90b2NvbCArICc6JyA6ICcnO1xuICAgICAgICBvcHRzLnNpemUgPSBwYXJzZUludChvcHRzLnNpemUsIDApID8gb3B0cy5zaXplIDogJyc7XG4gICAgICAgIG9wdHMucmF0aW5nID0gUkFUSU5HU1tvcHRzLnJhdGluZ10gPyBvcHRzLnJhdGluZyA6ICcnO1xuICAgICAgICBvcHRzLmZhbGxiYWNrID0gRkFMTEJBQ0tTW29wdHMuZmFsbGJhY2tdID8gb3B0cy5mYWxsYmFjayA6ICcnO1xuICAgICAgICBvcHRzLmZpbGVFeHRlbnNpb24gPSBGSUxFX1RZUEVTW29wdHMuZmlsZUV4dGVuc2lvbl0gPyBvcHRzLmZpbGVFeHRlbnNpb24gOiAnJztcblxuICAgICAgICB1cmwgPVxuICAgICAgICAgICAgb3B0cy5wcm90b2NvbCArXG4gICAgICAgICAgICBVUkxfQkFTRSArXG4gICAgICAgICAgICB0aGlzLmJpbWQ1Lm1kNShvcHRzLmVtYWlsKSArXG4gICAgICAgICAgICAob3B0cy5maWxlRXh0ZW5zaW9uID8gJy4nICsgb3B0cy5maWxlRXh0ZW5zaW9uIDogJycpICtcbiAgICAgICAgICAgIChvcHRzLnNpemUgfHwgb3B0cy5yYXRpbmcgfHwgb3B0cy5mYWxsYmFjayA/ICc/JyA6ICcnKSArXG4gICAgICAgICAgICAob3B0cy5zaXplID8gJyZzPScgKyBvcHRzLnNpemUudG9TdHJpbmcoKSA6ICcnKSArXG4gICAgICAgICAgICAob3B0cy5yYXRpbmcgPyAnJnI9JyArIG9wdHMucmF0aW5nIDogJycpICtcbiAgICAgICAgICAgIChvcHRzLmZhbGxiYWNrID8gJyZkPScgKyBvcHRzLmZhbGxiYWNrIDogJycpXG4gICAgICAgICAgICA7XG5cbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jb2xvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIGZ1bmN0aW9uIGdyYXkodmFsdWUsIGRlbGltaXRlcikge1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSwgdmFsdWUsIHZhbHVlXS5qb2luKGRlbGltaXRlciB8fCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge1xuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLnBpY2soWydoZXgnLCAnc2hvcnRoZXgnLCAncmdiJywgJ3JnYmEnLCAnMHgnXSksXG4gICAgICAgICAgICBncmF5c2NhbGU6IGZhbHNlLFxuICAgICAgICAgICAgY2FzaW5nOiAnbG93ZXInXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBpc0dyYXlzY2FsZSA9IG9wdGlvbnMuZ3JheXNjYWxlO1xuICAgICAgICB2YXIgY29sb3JWYWx1ZTtcblxuICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdoZXgnKSB7XG4gICAgICAgICAgICBjb2xvclZhbHVlID0gJyMnICsgKGlzR3JheXNjYWxlID8gZ3JheSh0aGlzLmhhc2goe2xlbmd0aDogMn0pKSA6IHRoaXMuaGFzaCh7bGVuZ3RoOiA2fSkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdzaG9ydGhleCcpIHtcbiAgICAgICAgICAgIGNvbG9yVmFsdWUgPSAnIycgKyAoaXNHcmF5c2NhbGUgPyBncmF5KHRoaXMuaGFzaCh7bGVuZ3RoOiAxfSkpIDogdGhpcy5oYXNoKHtsZW5ndGg6IDN9KSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ3JnYicpIHtcbiAgICAgICAgICAgIGlmIChpc0dyYXlzY2FsZSkge1xuICAgICAgICAgICAgICAgIGNvbG9yVmFsdWUgPSAncmdiKCcgKyBncmF5KHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSwgJywnKSArICcpJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICdyZ2IoJyArIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcsJyArIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcsJyArIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ3JnYmEnKSB7XG4gICAgICAgICAgICBpZiAoaXNHcmF5c2NhbGUpIHtcbiAgICAgICAgICAgICAgICBjb2xvclZhbHVlID0gJ3JnYmEoJyArIGdyYXkodGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pLCAnLCcpICsgJywnICsgdGhpcy5mbG9hdGluZyh7bWluOjAsIG1heDoxfSkgKyAnKSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbG9yVmFsdWUgPSAncmdiYSgnICsgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJywnICsgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJywnICsgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJywnICsgdGhpcy5mbG9hdGluZyh7bWluOjAsIG1heDoxfSkgKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICcweCcpIHtcbiAgICAgICAgICAgIGNvbG9yVmFsdWUgPSAnMHgnICsgKGlzR3JheXNjYWxlID8gZ3JheSh0aGlzLmhhc2goe2xlbmd0aDogMn0pKSA6IHRoaXMuaGFzaCh7bGVuZ3RoOiA2fSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgZm9ybWF0IHByb3ZpZGVkLiBQbGVhc2UgcHJvdmlkZSBvbmUgb2YgXCJoZXhcIiwgXCJzaG9ydGhleFwiLCBcInJnYlwiLCBcInJnYmFcIiwgb3IgXCIweFwiLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY2FzaW5nID09PSAndXBwZXInICkge1xuICAgICAgICAgICAgY29sb3JWYWx1ZSA9IGNvbG9yVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2xvclZhbHVlO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmRvbWFpbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMud29yZCgpICsgJy4nICsgKG9wdGlvbnMudGxkIHx8IHRoaXMudGxkKCkpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmVtYWlsID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy53b3JkKHtsZW5ndGg6IG9wdGlvbnMubGVuZ3RofSkgKyAnQCcgKyAob3B0aW9ucy5kb21haW4gfHwgdGhpcy5kb21haW4oKSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZmJpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KCcxMDAwMCcgKyB0aGlzLm5hdHVyYWwoe21heDogMTAwMDAwMDAwMDAwfSksIDEwKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5nb29nbGVfYW5hbHl0aWNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWNjb3VudCA9IHRoaXMucGFkKHRoaXMubmF0dXJhbCh7bWF4OiA5OTk5OTl9KSwgNik7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMucGFkKHRoaXMubmF0dXJhbCh7bWF4OiA5OX0pLCAyKTtcblxuICAgICAgICByZXR1cm4gJ1VBLScgKyBhY2NvdW50ICsgJy0nICsgcHJvcGVydHk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuaGFzaHRhZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcjJyArIHRoaXMud29yZCgpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmlwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUb2RvOiBUaGlzIGNvdWxkIHJldHVybiBzb21lIHJlc2VydmVkIElQcy4gU2VlIGh0dHA6Ly92cS5pby8xMzdkZ1l5XG4gICAgICAgIC8vIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVwZGF0ZWQgdG8gYWNjb3VudCBmb3IgdGhhdCByYXJlIGFzIGl0IG1heSBiZVxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJy4nICtcbiAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcuJyArXG4gICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLicgK1xuICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmlwdjYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpcF9hZGRyID0gdGhpcy5uKHRoaXMuaGFzaCwgOCwge2xlbmd0aDogNH0pO1xuXG4gICAgICAgIHJldHVybiBpcF9hZGRyLmpvaW4oXCI6XCIpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmtsb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogOTl9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS50bGRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gWydjb20nLCAnb3JnJywgJ2VkdScsICdnb3YnLCAnY28udWsnLCAnbmV0JywgJ2lvJ107XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUudGxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrKHRoaXMudGxkcygpKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS50d2l0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ0AnICsgdGhpcy53b3JkKCk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUudXJsID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHsgcHJvdG9jb2w6IFwiaHR0cFwiLCBkb21haW46IHRoaXMuZG9tYWluKG9wdGlvbnMpLCBkb21haW5fcHJlZml4OiBcIlwiLCBwYXRoOiB0aGlzLndvcmQoKSwgZXh0ZW5zaW9uczogW119KTtcblxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gb3B0aW9ucy5leHRlbnNpb25zLmxlbmd0aCA+IDAgPyBcIi5cIiArIHRoaXMucGljayhvcHRpb25zLmV4dGVuc2lvbnMpIDogXCJcIjtcbiAgICAgICAgdmFyIGRvbWFpbiA9IG9wdGlvbnMuZG9tYWluX3ByZWZpeCA/IG9wdGlvbnMuZG9tYWluX3ByZWZpeCArIFwiLlwiICsgb3B0aW9ucy5kb21haW4gOiBvcHRpb25zLmRvbWFpbjtcblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCArIFwiOi8vXCIgKyBkb21haW4gKyBcIi9cIiArIG9wdGlvbnMucGF0aCArIGV4dGVuc2lvbjtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIFdlYiAtLVxuXG4gICAgLy8gLS0gTG9jYXRpb24gLS1cblxuICAgIENoYW5jZS5wcm90b3R5cGUuYWRkcmVzcyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbCh7bWluOiA1LCBtYXg6IDIwMDB9KSArICcgJyArIHRoaXMuc3RyZWV0KG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmFsdGl0dWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtmaXhlZDogNSwgbWluOiAwLCBtYXg6IDg4NDh9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvYXRpbmcoe1xuICAgICAgICAgICAgbWluOiBvcHRpb25zLm1pbixcbiAgICAgICAgICAgIG1heDogb3B0aW9ucy5tYXgsXG4gICAgICAgICAgICBmaXhlZDogb3B0aW9ucy5maXhlZFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hcmVhY29kZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7cGFyZW5zIDogdHJ1ZX0pO1xuICAgICAgICAvLyBEb24ndCB3YW50IGFyZWEgY29kZXMgdG8gc3RhcnQgd2l0aCAxLCBvciBoYXZlIGEgOSBhcyB0aGUgc2Vjb25kIGRpZ2l0XG4gICAgICAgIHZhciBhcmVhY29kZSA9IHRoaXMubmF0dXJhbCh7bWluOiAyLCBtYXg6IDl9KS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoe21pbjogMCwgbWF4OiA4fSkudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsKHttaW46IDAsIG1heDogOX0pLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGFyZW5zID8gJygnICsgYXJlYWNvZGUgKyAnKScgOiBhcmVhY29kZTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXBpdGFsaXplKHRoaXMud29yZCh7c3lsbGFibGVzOiAzfSkpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNvb3JkaW5hdGVzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF0aXR1ZGUob3B0aW9ucykgKyAnLCAnICsgdGhpcy5sb25naXR1ZGUob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuY291bnRyaWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJjb3VudHJpZXNcIik7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuY291bnRyeSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdmFyIGNvdW50cnkgPSB0aGlzLnBpY2sodGhpcy5jb3VudHJpZXMoKSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZ1bGwgPyBjb3VudHJ5Lm5hbWUgOiBjb3VudHJ5LmFiYnJldmlhdGlvbjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kZXB0aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7Zml4ZWQ6IDUsIG1pbjogLTEwOTk0LCBtYXg6IDB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvYXRpbmcoe1xuICAgICAgICAgICAgbWluOiBvcHRpb25zLm1pbixcbiAgICAgICAgICAgIG1heDogb3B0aW9ucy5tYXgsXG4gICAgICAgICAgICBmaXhlZDogb3B0aW9ucy5maXhlZFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5nZW9oYXNoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHsgbGVuZ3RoOiA3IH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcoeyBsZW5ndGg6IG9wdGlvbnMubGVuZ3RoLCBwb29sOiAnMDEyMzQ1Njc4OWJjZGVmZ2hqa21ucHFyc3R1dnd4eXonIH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmdlb2pzb24gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXRpdHVkZShvcHRpb25zKSArICcsICcgKyB0aGlzLmxvbmdpdHVkZShvcHRpb25zKSArICcsICcgKyB0aGlzLmFsdGl0dWRlKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmxhdGl0dWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtmaXhlZDogNSwgbWluOiAtOTAsIG1heDogOTB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvYXRpbmcoe21pbjogb3B0aW9ucy5taW4sIG1heDogb3B0aW9ucy5tYXgsIGZpeGVkOiBvcHRpb25zLmZpeGVkfSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubG9uZ2l0dWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtmaXhlZDogNSwgbWluOiAtMTgwLCBtYXg6IDE4MH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5mbG9hdGluZyh7bWluOiBvcHRpb25zLm1pbiwgbWF4OiBvcHRpb25zLm1heCwgZml4ZWQ6IG9wdGlvbnMuZml4ZWR9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5waG9uZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgIG51bVBpY2ssXG4gICAgICAgICAgICB1a051bSA9IGZ1bmN0aW9uIChwYXJ0cykge1xuICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uID0gW107XG4gICAgICAgICAgICAgICAgLy9maWxscyB0aGUgc2VjdGlvbiBwYXJ0IG9mIHRoZSBwaG9uZSBudW1iZXIgd2l0aCByYW5kb20gbnVtYmVycy5cbiAgICAgICAgICAgICAgICBwYXJ0cy5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5wdXNoKHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IG59KSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRzLmFyZWEgKyBzZWN0aW9uLmpvaW4oJyAnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICAgICAgICBmb3JtYXR0ZWQ6IHRydWUsXG4gICAgICAgICAgICBjb3VudHJ5OiAndXMnLFxuICAgICAgICAgICAgbW9iaWxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFvcHRpb25zLmZvcm1hdHRlZCkge1xuICAgICAgICAgICAgb3B0aW9ucy5wYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGhvbmU7XG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy5jb3VudHJ5KSB7XG4gICAgICAgICAgICBjYXNlICdmcic6XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLm1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBudW1QaWNrID0gdGhpcy5waWNrKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhbGlkIHpvbmUgYW5kIGTDqXBhcnRlbWVudCBjb2Rlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICcwMScgKyB0aGlzLnBpY2soWyczMCcsICczNCcsICczOScsICc0MCcsICc0MScsICc0MicsICc0MycsICc0NCcsICc0NScsICc0NicsICc0NycsICc0OCcsICc0OScsICc1MycsICc1NScsICc1NicsICc1OCcsICc2MCcsICc2NCcsICc2OScsICc3MCcsICc3MicsICc3MycsICc3NCcsICc3NScsICc3NicsICc3NycsICc3OCcsICc3OScsICc4MCcsICc4MScsICc4MicsICc4MyddKSArIHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IDZ9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcwMicgKyB0aGlzLnBpY2soWycxNCcsICcxOCcsICcyMicsICcyMycsICcyOCcsICcyOScsICczMCcsICczMScsICczMicsICczMycsICczNCcsICczNScsICczNicsICczNycsICczOCcsICc0MCcsICc0MScsICc0MycsICc0NCcsICc0NScsICc0NicsICc0NycsICc0OCcsICc0OScsICc1MCcsICc1MScsICc1MicsICc1MycsICc1NCcsICc1NicsICc1NycsICc2MScsICc2MicsICc2OScsICc3MicsICc3NicsICc3NycsICc3OCcsICc4NScsICc5MCcsICc5NicsICc5NycsICc5OCcsICc5OSddKSArIHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IDZ9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcwMycgKyB0aGlzLnBpY2soWycxMCcsICcyMCcsICcyMScsICcyMicsICcyMycsICcyNCcsICcyNScsICcyNicsICcyNycsICcyOCcsICcyOScsICczOScsICc0NCcsICc0NScsICc1MScsICc1MicsICc1NCcsICc1NScsICc1NycsICc1OCcsICc1OScsICc2MCcsICc2MScsICc2MicsICc2MycsICc2NCcsICc2NScsICc2NicsICc2NycsICc2OCcsICc2OScsICc3MCcsICc3MScsICc3MicsICc3MycsICc4MCcsICc4MScsICc4MicsICc4MycsICc4NCcsICc4NScsICc4NicsICc4NycsICc4OCcsICc4OScsICc5MCddKSArIHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IDZ9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcwNCcgKyB0aGlzLnBpY2soWycxMScsICcxMycsICcxNScsICcyMCcsICcyMicsICcyNicsICcyNycsICczMCcsICczMicsICczNCcsICczNycsICc0MicsICc0MycsICc0NCcsICc1MCcsICc1NicsICc1NycsICc2MycsICc2NicsICc2NycsICc2OCcsICc2OScsICc3MCcsICc3MScsICc3MicsICc3MycsICc3NCcsICc3NScsICc3NicsICc3NycsICc3OCcsICc3OScsICc4MCcsICc4MScsICc4MicsICc4MycsICc4NCcsICc4NScsICc4NicsICc4OCcsICc4OScsICc5MCcsICc5MScsICc5MicsICc5MycsICc5NCcsICc5NScsICc5NycsICc5OCddKSArIHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IDZ9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcwNScgKyB0aGlzLnBpY2soWycwOCcsICcxNicsICcxNycsICcxOScsICcyNCcsICczMScsICczMicsICczMycsICczNCcsICczNScsICc0MCcsICc0NScsICc0NicsICc0NycsICc0OScsICc1MycsICc1NScsICc1NicsICc1NycsICc1OCcsICc1OScsICc2MScsICc2MicsICc2MycsICc2NCcsICc2NScsICc2NycsICc3OScsICc4MScsICc4MicsICc4NicsICc4NycsICc5MCcsICc5NCddKSArIHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IDZ9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcwOScgKyBzZWxmLnN0cmluZyh7IHBvb2w6ICcwMTIzNDU2Nzg5JywgbGVuZ3RoOiA4fSksXG4gICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICBwaG9uZSA9IG9wdGlvbnMuZm9ybWF0dGVkID8gbnVtUGljay5tYXRjaCgvLi4vZykuam9pbignICcpIDogbnVtUGljaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBudW1QaWNrID0gdGhpcy5waWNrKFsnMDYnLCAnMDcnXSkgKyBzZWxmLnN0cmluZyh7IHBvb2w6ICcwMTIzNDU2Nzg5JywgbGVuZ3RoOiA4fSk7XG4gICAgICAgICAgICAgICAgICAgIHBob25lID0gb3B0aW9ucy5mb3JtYXR0ZWQgPyBudW1QaWNrLm1hdGNoKC8uLi9nKS5qb2luKCcgJykgOiBudW1QaWNrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VrJzpcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bVBpY2sgPSB0aGlzLnBpY2soW1xuICAgICAgICAgICAgICAgICAgICAgICAgLy92YWxpZCBhcmVhIGNvZGVzIG9mIG1ham9yIGNpdGllcy9jb3VudGllcyBmb2xsb3dlZCBieSByYW5kb20gbnVtYmVycyBpbiByZXF1aXJlZCBmb3JtYXQuXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMScgKyB0aGlzLmNoYXJhY3Rlcih7IHBvb2w6ICcyMzQ1NjknIH0pICsgJzEgJywgc2VjdGlvbnM6IFszLDRdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMjAgJyArIHRoaXMuY2hhcmFjdGVyKHsgcG9vbDogJzM3OCcgfSksIHNlY3Rpb25zOiBbMyw0XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDIzICcgKyB0aGlzLmNoYXJhY3Rlcih7IHBvb2w6ICc4OScgfSksIHNlY3Rpb25zOiBbMyw0XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDI0IDcnLCBzZWN0aW9uczogWzMsNF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAyOCAnICsgdGhpcy5waWNrKFsnMjUnLCcyOCcsJzM3JywnNzEnLCc4MicsJzkwJywnOTInLCc5NSddKSwgc2VjdGlvbnM6IFsyLDRdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTInICsgdGhpcy5waWNrKFsnMDQnLCcwOCcsJzU0JywnNzYnLCc5NycsJzk4J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTMnICsgdGhpcy5waWNrKFsnNjMnLCc2NCcsJzg0JywnODYnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxNCcgKyB0aGlzLnBpY2soWycwNCcsJzIwJywnNjAnLCc2MScsJzgwJywnODgnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxNScgKyB0aGlzLnBpY2soWycyNCcsJzI3JywnNjInLCc2NiddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDE2JyArIHRoaXMucGljayhbJzA2JywnMjknLCczNScsJzQ3JywnNTknLCc5NSddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDE3JyArIHRoaXMucGljayhbJzI2JywnNDQnLCc1MCcsJzY4J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTgnICsgdGhpcy5waWNrKFsnMjcnLCczNycsJzg0JywnOTcnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxOScgKyB0aGlzLnBpY2soWycwMCcsJzA1JywnMzUnLCc0NicsJzQ5JywnNjMnLCc5NSddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9XG4gICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICBwaG9uZSA9IG9wdGlvbnMuZm9ybWF0dGVkID8gdWtOdW0obnVtUGljaykgOiB1a051bShudW1QaWNrKS5yZXBsYWNlKCcgJywgJycsICdnJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtUGljayA9IHRoaXMucGljayhbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwNycgKyB0aGlzLnBpY2soWyc0JywnNScsJzcnLCc4JywnOSddKSwgc2VjdGlvbnM6IFsyLDZdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwNzYyNCAnLCBzZWN0aW9uczogWzZdIH1cbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgICAgIHBob25lID0gb3B0aW9ucy5mb3JtYXR0ZWQgPyB1a051bShudW1QaWNrKSA6IHVrTnVtKG51bVBpY2spLnJlcGxhY2UoJyAnLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndXMnOlxuICAgICAgICAgICAgICAgIHZhciBhcmVhY29kZSA9IHRoaXMuYXJlYWNvZGUob3B0aW9ucykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YXIgZXhjaGFuZ2UgPSB0aGlzLm5hdHVyYWwoeyBtaW46IDIsIG1heDogOSB9KS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsKHsgbWluOiAwLCBtYXg6IDkgfSkudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbCh7IG1pbjogMCwgbWF4OiA5IH0pLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSB0aGlzLm5hdHVyYWwoeyBtaW46IDEwMDAsIG1heDogOTk5OSB9KS50b1N0cmluZygpOyAvLyB0aGlzIGNvdWxkIGJlIHJhbmRvbSBbMC05XXs0fVxuICAgICAgICAgICAgICAgIHBob25lID0gb3B0aW9ucy5mb3JtYXR0ZWQgPyBhcmVhY29kZSArICcgJyArIGV4Y2hhbmdlICsgJy0nICsgc3Vic2NyaWJlciA6IGFyZWFjb2RlICsgZXhjaGFuZ2UgKyBzdWJzY3JpYmVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaG9uZTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wb3N0YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFBvc3RhbCBEaXN0cmljdFxuICAgICAgICB2YXIgcGQgPSB0aGlzLmNoYXJhY3Rlcih7cG9vbDogXCJYVlRTUlBOS0xNSEpHRUNCQVwifSk7XG4gICAgICAgIC8vIEZvcndhcmQgU29ydGF0aW9uIEFyZWEgKEZTQSlcbiAgICAgICAgdmFyIGZzYSA9IHBkICsgdGhpcy5uYXR1cmFsKHttYXg6IDl9KSArIHRoaXMuY2hhcmFjdGVyKHthbHBoYTogdHJ1ZSwgY2FzaW5nOiBcInVwcGVyXCJ9KTtcbiAgICAgICAgLy8gTG9jYWwgRGVsaXZlcnkgVW51dCAoTERVKVxuICAgICAgICB2YXIgbGR1ID0gdGhpcy5uYXR1cmFsKHttYXg6IDl9KSArIHRoaXMuY2hhcmFjdGVyKHthbHBoYTogdHJ1ZSwgY2FzaW5nOiBcInVwcGVyXCJ9KSArIHRoaXMubmF0dXJhbCh7bWF4OiA5fSk7XG5cbiAgICAgICAgcmV0dXJuIGZzYSArIFwiIFwiICsgbGR1O1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnByb3ZpbmNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwicHJvdmluY2VzXCIpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnByb3ZpbmNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIChvcHRpb25zICYmIG9wdGlvbnMuZnVsbCkgP1xuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMucHJvdmluY2VzKCkpLm5hbWUgOlxuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMucHJvdmluY2VzKCkpLmFiYnJldmlhdGlvbjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zdGF0ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAob3B0aW9ucyAmJiBvcHRpb25zLmZ1bGwpID9cbiAgICAgICAgICAgIHRoaXMucGljayh0aGlzLnN0YXRlcyhvcHRpb25zKSkubmFtZSA6XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5zdGF0ZXMob3B0aW9ucykpLmFiYnJldmlhdGlvbjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zdGF0ZXMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyB1c19zdGF0ZXNfYW5kX2RjOiB0cnVlIH0pO1xuXG4gICAgICAgIHZhciBzdGF0ZXMsXG4gICAgICAgICAgICB1c19zdGF0ZXNfYW5kX2RjID0gdGhpcy5nZXQoXCJ1c19zdGF0ZXNfYW5kX2RjXCIpLFxuICAgICAgICAgICAgdGVycml0b3JpZXMgPSB0aGlzLmdldChcInRlcnJpdG9yaWVzXCIpLFxuICAgICAgICAgICAgYXJtZWRfZm9yY2VzID0gdGhpcy5nZXQoXCJhcm1lZF9mb3JjZXNcIik7XG5cbiAgICAgICAgc3RhdGVzID0gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudXNfc3RhdGVzX2FuZF9kYykge1xuICAgICAgICAgICAgc3RhdGVzID0gc3RhdGVzLmNvbmNhdCh1c19zdGF0ZXNfYW5kX2RjKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXJyaXRvcmllcykge1xuICAgICAgICAgICAgc3RhdGVzID0gc3RhdGVzLmNvbmNhdCh0ZXJyaXRvcmllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYXJtZWRfZm9yY2VzKSB7XG4gICAgICAgICAgICBzdGF0ZXMgPSBzdGF0ZXMuY29uY2F0KGFybWVkX2ZvcmNlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RhdGVzO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0cmVldCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgc3RyZWV0ID0gdGhpcy53b3JkKHtzeWxsYWJsZXM6IDJ9KTtcbiAgICAgICAgc3RyZWV0ID0gdGhpcy5jYXBpdGFsaXplKHN0cmVldCk7XG4gICAgICAgIHN0cmVldCArPSAnICc7XG4gICAgICAgIHN0cmVldCArPSBvcHRpb25zLnNob3J0X3N1ZmZpeCA/XG4gICAgICAgICAgICB0aGlzLnN0cmVldF9zdWZmaXgoKS5hYmJyZXZpYXRpb24gOlxuICAgICAgICAgICAgdGhpcy5zdHJlZXRfc3VmZml4KCkubmFtZTtcbiAgICAgICAgcmV0dXJuIHN0cmVldDtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zdHJlZXRfc3VmZml4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrKHRoaXMuc3RyZWV0X3N1ZmZpeGVzKCkpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0cmVldF9zdWZmaXhlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVGhlc2UgYXJlIHRoZSBtb3N0IGNvbW1vbiBzdWZmaXhlcy5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwic3RyZWV0X3N1ZmZpeGVzXCIpO1xuICAgIH07XG5cbiAgICAvLyBOb3RlOiBvbmx5IHJldHVybmluZyBVUyB6aXAgY29kZXMsIGludGVybmF0aW9uYWxpemF0aW9uIHdpbGwgYmUgYSB3aG9sZVxuICAgIC8vIG90aGVyIGJlYXN0IHRvIHRhY2tsZSBhdCBzb21lIHBvaW50LlxuICAgIENoYW5jZS5wcm90b3R5cGUuemlwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHppcCA9IHRoaXMubih0aGlzLm5hdHVyYWwsIDUsIHttYXg6IDl9KTtcblxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBsdXNmb3VyID09PSB0cnVlKSB7XG4gICAgICAgICAgICB6aXAucHVzaCgnLScpO1xuICAgICAgICAgICAgemlwID0gemlwLmNvbmNhdCh0aGlzLm4odGhpcy5uYXR1cmFsLCA0LCB7bWF4OiA5fSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHppcC5qb2luKFwiXCIpO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgTG9jYXRpb24gLS1cblxuICAgIC8vIC0tIFRpbWVcblxuICAgIENoYW5jZS5wcm90b3R5cGUuYW1wbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9vbCgpID8gJ2FtJyA6ICdwbSc7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZGF0ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciBkYXRlX3N0cmluZywgZGF0ZTtcblxuICAgICAgICAvLyBJZiBpbnRlcnZhbCBpcyBzcGVjaWZpZWQgd2UgaWdub3JlIHByZXNldFxuICAgICAgICBpZihvcHRpb25zICYmIChvcHRpb25zLm1pbiB8fCBvcHRpb25zLm1heCkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgYW1lcmljYW46IHRydWUsXG4gICAgICAgICAgICAgICAgc3RyaW5nOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgbWluID0gdHlwZW9mIG9wdGlvbnMubWluICE9PSBcInVuZGVmaW5lZFwiID8gb3B0aW9ucy5taW4uZ2V0VGltZSgpIDogMTtcbiAgICAgICAgICAgIC8vIDEwMCwwMDAsMDAwIGRheXMgbWVhc3VyZWQgcmVsYXRpdmUgdG8gbWlkbmlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiAwMSBKYW51YXJ5LCAxOTcwIFVUQy4gaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICAgICAgICAgICAgdmFyIG1heCA9IHR5cGVvZiBvcHRpb25zLm1heCAhPT0gXCJ1bmRlZmluZWRcIiA/IG9wdGlvbnMubWF4LmdldFRpbWUoKSA6IDg2NDAwMDAwMDAwMDAwMDA7XG5cbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh0aGlzLm5hdHVyYWwoe21pbjogbWluLCBtYXg6IG1heH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBtID0gdGhpcy5tb250aCh7cmF3OiB0cnVlfSk7XG4gICAgICAgICAgICB2YXIgZGF5c0luTW9udGggPSBtLmRheXM7XG5cbiAgICAgICAgICAgIGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5tb250aCkge1xuICAgICAgICAgICAgICAgIC8vIE1vZCAxMiB0byBhbGxvdyBtb250aHMgb3V0c2lkZSByYW5nZSBvZiAwLTExIChub3QgZW5jb3VyYWdlZCwgYnV0IGFsc28gbm90IHByZXZlbnRlZCkuXG4gICAgICAgICAgICAgICAgZGF5c0luTW9udGggPSB0aGlzLmdldCgnbW9udGhzJylbKChvcHRpb25zLm1vbnRoICUgMTIpICsgMTIpICUgMTJdLmRheXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgeWVhcjogcGFyc2VJbnQodGhpcy55ZWFyKCksIDEwKSxcbiAgICAgICAgICAgICAgICAvLyBOZWNlc3NhcnkgdG8gc3VidHJhY3QgMSBiZWNhdXNlIERhdGUoKSAwLWluZGV4ZXMgbW9udGggYnV0IG5vdCBkYXkgb3IgeWVhclxuICAgICAgICAgICAgICAgIC8vIGZvciBzb21lIHJlYXNvbi5cbiAgICAgICAgICAgICAgICBtb250aDogbS5udW1lcmljIC0gMSxcbiAgICAgICAgICAgICAgICBkYXk6IHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IGRheXNJbk1vbnRofSksXG4gICAgICAgICAgICAgICAgaG91cjogdGhpcy5ob3VyKCksXG4gICAgICAgICAgICAgICAgbWludXRlOiB0aGlzLm1pbnV0ZSgpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogdGhpcy5zZWNvbmQoKSxcbiAgICAgICAgICAgICAgICBtaWxsaXNlY29uZDogdGhpcy5taWxsaXNlY29uZCgpLFxuICAgICAgICAgICAgICAgIGFtZXJpY2FuOiB0cnVlLFxuICAgICAgICAgICAgICAgIHN0cmluZzogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUob3B0aW9ucy55ZWFyLCBvcHRpb25zLm1vbnRoLCBvcHRpb25zLmRheSwgb3B0aW9ucy5ob3VyLCBvcHRpb25zLm1pbnV0ZSwgb3B0aW9ucy5zZWNvbmQsIG9wdGlvbnMubWlsbGlzZWNvbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYW1lcmljYW4pIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyAxIHRvIHRoZSBtb250aCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBEYXRlKCkgMC1pbmRleGVzXG4gICAgICAgICAgICAvLyBtb250aHMgYnV0IG5vdCBkYXkgZm9yIHNvbWUgb2RkIHJlYXNvbi5cbiAgICAgICAgICAgIGRhdGVfc3RyaW5nID0gKGRhdGUuZ2V0TW9udGgoKSArIDEpICsgJy8nICsgZGF0ZS5nZXREYXRlKCkgKyAnLycgKyBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlX3N0cmluZyA9IGRhdGUuZ2V0RGF0ZSgpICsgJy8nICsgKGRhdGUuZ2V0TW9udGgoKSArIDEpICsgJy8nICsgZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc3RyaW5nID8gZGF0ZV9zdHJpbmcgOiBkYXRlO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmhhbW1lcnRpbWUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlKG9wdGlvbnMpLmdldFRpbWUoKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5ob3VyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttaW46IDEsIG1heDogb3B0aW9ucyAmJiBvcHRpb25zLnR3ZW50eWZvdXIgPyAyNCA6IDEyfSk7XG5cbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWluIDwgMSwgXCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgbGVzcyB0aGFuIDEuXCIpO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy50d2VudHlmb3VyICYmIG9wdGlvbnMubWF4ID4gMjQsIFwiQ2hhbmNlOiBNYXggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAyNCBmb3IgdHdlbnR5Zm91ciBvcHRpb24uXCIpO1xuICAgICAgICB0ZXN0UmFuZ2UoIW9wdGlvbnMudHdlbnR5Zm91ciAmJiBvcHRpb25zLm1heCA+IDEyLCBcIkNoYW5jZTogTWF4IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMTIuXCIpO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPiBvcHRpb25zLm1heCwgXCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heC5cIik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbCh7bWluOiBvcHRpb25zLm1pbiwgbWF4OiBvcHRpb25zLm1heH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm1pbGxpc2Vjb25kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttYXg6IDk5OX0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm1pbnV0ZSA9IENoYW5jZS5wcm90b3R5cGUuc2Vjb25kID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttaW46IDAsIG1heDogNTl9KTtcblxuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPCAwLCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBsZXNzIHRoYW4gMC5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1heCA+IDU5LCBcIkNoYW5jZTogTWF4IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gNTkuXCIpO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPiBvcHRpb25zLm1heCwgXCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heC5cIik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbCh7bWluOiBvcHRpb25zLm1pbiwgbWF4OiBvcHRpb25zLm1heH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm1vbnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttaW46IDEsIG1heDogMTJ9KTtcblxuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPCAxLCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBsZXNzIHRoYW4gMS5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1heCA+IDEyLCBcIkNoYW5jZTogTWF4IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMTIuXCIpO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPiBvcHRpb25zLm1heCwgXCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heC5cIik7XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdGhpcy5waWNrKHRoaXMubW9udGhzKCkuc2xpY2Uob3B0aW9ucy5taW4gLSAxLCBvcHRpb25zLm1heCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5yYXcgPyBtb250aCA6IG1vbnRoLm5hbWU7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubW9udGhzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJtb250aHNcIik7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc2Vjb25kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttYXg6IDU5fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUudGltZXN0YW1wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogcGFyc2VJbnQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwLCAxMCl9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS55ZWFyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHllYXIgYXMgbWluIGlmIG5vbmUgc3BlY2lmaWVkXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bWluOiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCl9KTtcblxuICAgICAgICAvLyBEZWZhdWx0IHRvIG9uZSBjZW50dXJ5IGFmdGVyIGN1cnJlbnQgeWVhciBhcyBtYXggaWYgbm9uZSBzcGVjaWZpZWRcbiAgICAgICAgb3B0aW9ucy5tYXggPSAodHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiKSA/IG9wdGlvbnMubWF4IDogb3B0aW9ucy5taW4gKyAxMDA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbChvcHRpb25zKS50b1N0cmluZygpO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgVGltZVxuXG4gICAgLy8gLS0gRmluYW5jZSAtLVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jYyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgdHlwZSwgbnVtYmVyLCB0b19nZW5lcmF0ZTtcblxuICAgICAgICB0eXBlID0gKG9wdGlvbnMudHlwZSkgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNjX3R5cGUoeyBuYW1lOiBvcHRpb25zLnR5cGUsIHJhdzogdHJ1ZSB9KSA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2NfdHlwZSh7IHJhdzogdHJ1ZSB9KTtcblxuICAgICAgICBudW1iZXIgPSB0eXBlLnByZWZpeC5zcGxpdChcIlwiKTtcbiAgICAgICAgdG9fZ2VuZXJhdGUgPSB0eXBlLmxlbmd0aCAtIHR5cGUucHJlZml4Lmxlbmd0aCAtIDE7XG5cbiAgICAgICAgLy8gR2VuZXJhdGVzIG4gLSAxIGRpZ2l0c1xuICAgICAgICBudW1iZXIgPSBudW1iZXIuY29uY2F0KHRoaXMubih0aGlzLmludGVnZXIsIHRvX2dlbmVyYXRlLCB7bWluOiAwLCBtYXg6IDl9KSk7XG5cbiAgICAgICAgLy8gR2VuZXJhdGVzIHRoZSBsYXN0IGRpZ2l0IGFjY29yZGluZyB0byBMdWhuIGFsZ29yaXRobVxuICAgICAgICBudW1iZXIucHVzaCh0aGlzLmx1aG5fY2FsY3VsYXRlKG51bWJlci5qb2luKFwiXCIpKSk7XG5cbiAgICAgICAgcmV0dXJuIG51bWJlci5qb2luKFwiXCIpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNjX3R5cGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JhbmtfY2FyZF9udW1iZXIjSXNzdWVyX2lkZW50aWZpY2F0aW9uX251bWJlcl8uMjhJSU4uMjlcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwiY2NfdHlwZXNcIik7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuY2NfdHlwZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdmFyIHR5cGVzID0gdGhpcy5jY190eXBlcygpLFxuICAgICAgICAgICAgdHlwZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIC8vIEFjY2VwdCBlaXRoZXIgbmFtZSBvciBzaG9ydF9uYW1lIHRvIHNwZWNpZnkgY2FyZCB0eXBlXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVzW2ldLm5hbWUgPT09IG9wdGlvbnMubmFtZSB8fCB0eXBlc1tpXS5zaG9ydF9uYW1lID09PSBvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ3JlZGl0IGNhcmQgdHlwZSAnXCIgKyBvcHRpb25zLm5hbWUgKyBcIicnIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0eXBlID0gdGhpcy5waWNrKHR5cGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnJhdyA/IHR5cGUgOiB0eXBlLm5hbWU7XG4gICAgfTtcblxuICAgIC8vcmV0dXJuIGFsbCB3b3JsZCBjdXJyZW5jeSBieSBJU08gNDIxN1xuICAgIENoYW5jZS5wcm90b3R5cGUuY3VycmVuY3lfdHlwZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldChcImN1cnJlbmN5X3R5cGVzXCIpO1xuICAgIH07XG5cbiAgICAvL3JldHVybiByYW5kb20gd29ybGQgY3VycmVuY3kgYnkgSVNPIDQyMTdcbiAgICBDaGFuY2UucHJvdG90eXBlLmN1cnJlbmN5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrKHRoaXMuY3VycmVuY3lfdHlwZXMoKSk7XG4gICAgfTtcblxuICAgIC8vUmV0dXJuIHJhbmRvbSBjb3JyZWN0IGN1cnJlbmN5IGV4Y2hhbmdlIHBhaXIgKGUuZy4gRVVSL1VTRCkgb3IgYXJyYXkgb2YgY3VycmVuY3kgY29kZVxuICAgIENoYW5jZS5wcm90b3R5cGUuY3VycmVuY3lfcGFpciA9IGZ1bmN0aW9uIChyZXR1cm5Bc1N0cmluZykge1xuICAgICAgICB2YXIgY3VycmVuY2llcyA9IHRoaXMudW5pcXVlKHRoaXMuY3VycmVuY3ksIDIsIHtcbiAgICAgICAgICAgIGNvbXBhcmF0b3I6IGZ1bmN0aW9uKGFyciwgdmFsKSB7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbihhY2MsIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgc2hvcnQgY2lyY3VpdCBjaGVjayBhbmQganVzdCByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyB8fCAoaXRlbS5jb2RlID09PSB2YWwuY29kZSk7XG4gICAgICAgICAgICAgICAgfSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmV0dXJuQXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW5jaWVzWzBdLmNvZGUgKyAnLycgKyBjdXJyZW5jaWVzWzFdLmNvZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVuY2llcztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmRvbGxhciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIC8vIEJ5IGRlZmF1bHQsIGEgc29tZXdoYXQgbW9yZSBzYW5lIG1heCBmb3IgZG9sbGFyIHRoYW4gYWxsIGF2YWlsYWJsZSBudW1iZXJzXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bWF4IDogMTAwMDAsIG1pbiA6IDB9KTtcblxuICAgICAgICB2YXIgZG9sbGFyID0gdGhpcy5mbG9hdGluZyh7bWluOiBvcHRpb25zLm1pbiwgbWF4OiBvcHRpb25zLm1heCwgZml4ZWQ6IDJ9KS50b1N0cmluZygpLFxuICAgICAgICAgICAgY2VudHMgPSBkb2xsYXIuc3BsaXQoJy4nKVsxXTtcblxuICAgICAgICBpZiAoY2VudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZG9sbGFyICs9ICcuMDAnO1xuICAgICAgICB9IGVsc2UgaWYgKGNlbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIGRvbGxhciA9IGRvbGxhciArICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb2xsYXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJy0kJyArIGRvbGxhci5yZXBsYWNlKCctJywgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICckJyArIGRvbGxhcjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdmFyIGV4cCA9IHt9O1xuXG4gICAgICAgIGV4cC55ZWFyID0gdGhpcy5leHBfeWVhcigpO1xuXG4gICAgICAgIC8vIElmIHRoZSB5ZWFyIGlzIHRoaXMgeWVhciwgbmVlZCB0byBlbnN1cmUgbW9udGggaXMgZ3JlYXRlciB0aGFuIHRoZVxuICAgICAgICAvLyBjdXJyZW50IG1vbnRoIG9yIHRoaXMgZXhwaXJhdGlvbiB3aWxsIG5vdCBiZSB2YWxpZFxuICAgICAgICBpZiAoZXhwLnllYXIgPT09IChuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkpLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgIGV4cC5tb250aCA9IHRoaXMuZXhwX21vbnRoKHtmdXR1cmU6IHRydWV9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cC5tb250aCA9IHRoaXMuZXhwX21vbnRoKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5yYXcgPyBleHAgOiBleHAubW9udGggKyAnLycgKyBleHAueWVhcjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5leHBfbW9udGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHZhciBtb250aCwgbW9udGhfaW50LFxuICAgICAgICAgICAgLy8gRGF0ZSBvYmplY3QgbW9udGhzIGFyZSAwIGluZGV4ZWRcbiAgICAgICAgICAgIGN1ck1vbnRoID0gbmV3IERhdGUoKS5nZXRNb250aCgpICsgMTtcblxuICAgICAgICBpZiAob3B0aW9ucy5mdXR1cmUpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBtb250aCA9IHRoaXMubW9udGgoe3JhdzogdHJ1ZX0pLm51bWVyaWM7XG4gICAgICAgICAgICAgICAgbW9udGhfaW50ID0gcGFyc2VJbnQobW9udGgsIDEwKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKG1vbnRoX2ludCA8PSBjdXJNb250aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb250aCA9IHRoaXMubW9udGgoe3JhdzogdHJ1ZX0pLm51bWVyaWM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9udGg7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZXhwX3llYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoe21heDogbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICsgMTB9KTtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIEZpbmFuY2VcblxuICAgIC8vIC0tIFJlZ2lvbmFsXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBsX3Blc2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbnVtYmVyID0gdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogOTk5OTk5OTk5OX0pO1xuICAgICAgICB2YXIgYXJyID0gdGhpcy5wYWQobnVtYmVyLCAxMCkuc3BsaXQoJycpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJyW2ldID0gcGFyc2VJbnQoYXJyW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb250cm9sTnVtYmVyID0gKDEgKiBhcnJbMF0gKyAzICogYXJyWzFdICsgNyAqIGFyclsyXSArIDkgKiBhcnJbM10gKyAxICogYXJyWzRdICsgMyAqIGFycls1XSArIDcgKiBhcnJbNl0gKyA5ICogYXJyWzddICsgMSAqIGFycls4XSArIDMgKiBhcnJbOV0pICUgMTA7XG4gICAgICAgIGlmKGNvbnRyb2xOdW1iZXIgIT09IDApIHtcbiAgICAgICAgICAgIGNvbnRyb2xOdW1iZXIgPSAxMCAtIGNvbnRyb2xOdW1iZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oJycpICsgY29udHJvbE51bWJlcjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wbF9uaXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiA5OTk5OTk5OTl9KTtcbiAgICAgICAgdmFyIGFyciA9IHRoaXMucGFkKG51bWJlciwgOSkuc3BsaXQoJycpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJyW2ldID0gcGFyc2VJbnQoYXJyW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb250cm9sTnVtYmVyID0gKDYgKiBhcnJbMF0gKyA1ICogYXJyWzFdICsgNyAqIGFyclsyXSArIDIgKiBhcnJbM10gKyAzICogYXJyWzRdICsgNCAqIGFycls1XSArIDUgKiBhcnJbNl0gKyA2ICogYXJyWzddICsgNyAqIGFycls4XSkgJSAxMTtcbiAgICAgICAgaWYoY29udHJvbE51bWJlciA9PT0gMTApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBsX25pcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyci5qb2luKCcnKSArIGNvbnRyb2xOdW1iZXI7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucGxfcmVnb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiA5OTk5OTk5OX0pO1xuICAgICAgICB2YXIgYXJyID0gdGhpcy5wYWQobnVtYmVyLCA4KS5zcGxpdCgnJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSBwYXJzZUludChhcnJbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbnRyb2xOdW1iZXIgPSAoOCAqIGFyclswXSArIDkgKiBhcnJbMV0gKyAyICogYXJyWzJdICsgMyAqIGFyclszXSArIDQgKiBhcnJbNF0gKyA1ICogYXJyWzVdICsgNiAqIGFycls2XSArIDcgKiBhcnJbN10pICUgMTE7XG4gICAgICAgIGlmKGNvbnRyb2xOdW1iZXIgPT09IDEwKSB7XG4gICAgICAgICAgICBjb250cm9sTnVtYmVyID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnIuam9pbignJykgKyBjb250cm9sTnVtYmVyO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgUmVnaW9uYWxcblxuICAgIC8vIC0tIE1pc2NlbGxhbmVvdXMgLS1cblxuICAgIC8vIERpY2UgLSBGb3IgYWxsIHRoZSBib2FyZCBnYW1lIGdlZWtzIG91dCB0aGVyZSwgbXlzZWxmIGluY2x1ZGVkIDspXG4gICAgZnVuY3Rpb24gZGljZUZuIChyYW5nZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbChyYW5nZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIENoYW5jZS5wcm90b3R5cGUuZDQgPSBkaWNlRm4oe21pbjogMSwgbWF4OiA0fSk7XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kNiA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDZ9KTtcbiAgICBDaGFuY2UucHJvdG90eXBlLmQ4ID0gZGljZUZuKHttaW46IDEsIG1heDogOH0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDEwID0gZGljZUZuKHttaW46IDEsIG1heDogMTB9KTtcbiAgICBDaGFuY2UucHJvdG90eXBlLmQxMiA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDEyfSk7XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kMjAgPSBkaWNlRm4oe21pbjogMSwgbWF4OiAyMH0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDMwID0gZGljZUZuKHttaW46IDEsIG1heDogMzB9KTtcbiAgICBDaGFuY2UucHJvdG90eXBlLmQxMDAgPSBkaWNlRm4oe21pbjogMSwgbWF4OiAxMDB9KTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucnBnID0gZnVuY3Rpb24gKHRocm93biwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGlmICghdGhyb3duKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkEgdHlwZSBvZiBkaWUgcm9sbCBtdXN0IGJlIGluY2x1ZGVkXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGJpdHMgPSB0aHJvd24udG9Mb3dlckNhc2UoKS5zcGxpdChcImRcIiksXG4gICAgICAgICAgICAgICAgcm9sbHMgPSBbXTtcblxuICAgICAgICAgICAgaWYgKGJpdHMubGVuZ3RoICE9PSAyIHx8ICFwYXJzZUludChiaXRzWzBdLCAxMCkgfHwgIXBhcnNlSW50KGJpdHNbMV0sIDEwKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZm9ybWF0IHByb3ZpZGVkLiBQbGVhc2UgcHJvdmlkZSAjZCMgd2hlcmUgdGhlIGZpcnN0ICMgaXMgdGhlIG51bWJlciBvZiBkaWNlIHRvIHJvbGwsIHRoZSBzZWNvbmQgIyBpcyB0aGUgbWF4IG9mIGVhY2ggZGllXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGJpdHNbMF07IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICByb2xsc1tpIC0gMV0gPSB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiBiaXRzWzFdfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBvcHRpb25zLnN1bSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9ucy5zdW0pID8gcm9sbHMucmVkdWNlKGZ1bmN0aW9uIChwLCBjKSB7IHJldHVybiBwICsgYzsgfSkgOiByb2xscztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBHdWlkXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5ndWlkID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHsgdmVyc2lvbjogNSB9KTtcblxuICAgICAgICB2YXIgZ3VpZF9wb29sID0gXCJhYmNkZWYxMjM0NTY3ODkwXCIsXG4gICAgICAgICAgICB2YXJpYW50X3Bvb2wgPSBcImFiODlcIixcbiAgICAgICAgICAgIGd1aWQgPSB0aGlzLnN0cmluZyh7IHBvb2w6IGd1aWRfcG9vbCwgbGVuZ3RoOiA4IH0pICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZyh7IHBvb2w6IGd1aWRfcG9vbCwgbGVuZ3RoOiA0IH0pICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAvLyBUaGUgVmVyc2lvblxuICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudmVyc2lvbiArXG4gICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmcoeyBwb29sOiBndWlkX3Bvb2wsIGxlbmd0aDogMyB9KSArICctJyArXG4gICAgICAgICAgICAgICAgICAgLy8gVGhlIFZhcmlhbnRcbiAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZyh7IHBvb2w6IHZhcmlhbnRfcG9vbCwgbGVuZ3RoOiAxIH0pICtcbiAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZyh7IHBvb2w6IGd1aWRfcG9vbCwgbGVuZ3RoOiAzIH0pICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZyh7IHBvb2w6IGd1aWRfcG9vbCwgbGVuZ3RoOiAxMiB9KTtcbiAgICAgICAgcmV0dXJuIGd1aWQ7XG4gICAgfTtcblxuICAgIC8vIEhhc2hcbiAgICBDaGFuY2UucHJvdG90eXBlLmhhc2ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2xlbmd0aCA6IDQwLCBjYXNpbmc6ICdsb3dlcid9KTtcbiAgICAgICAgdmFyIHBvb2wgPSBvcHRpb25zLmNhc2luZyA9PT0gJ3VwcGVyJyA/IEhFWF9QT09MLnRvVXBwZXJDYXNlKCkgOiBIRVhfUE9PTDtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKHtwb29sOiBwb29sLCBsZW5ndGg6IG9wdGlvbnMubGVuZ3RofSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubHVobl9jaGVjayA9IGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgdmFyIHN0ciA9IG51bS50b1N0cmluZygpO1xuICAgICAgICB2YXIgY2hlY2tEaWdpdCA9ICtzdHIuc3Vic3RyaW5nKHN0ci5sZW5ndGggLSAxKTtcbiAgICAgICAgcmV0dXJuIGNoZWNrRGlnaXQgPT09IHRoaXMubHVobl9jYWxjdWxhdGUoK3N0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDEpKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5sdWhuX2NhbGN1bGF0ZSA9IGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgdmFyIGRpZ2l0cyA9IG51bS50b1N0cmluZygpLnNwbGl0KFwiXCIpLnJldmVyc2UoKTtcbiAgICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICAgIHZhciBkaWdpdDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGg7IGwgPiBpOyArK2kpIHtcbiAgICAgICAgICAgIGRpZ2l0ID0gK2RpZ2l0c1tpXTtcbiAgICAgICAgICAgIGlmIChpICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZ2l0ICo9IDI7XG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0ID4gOSkge1xuICAgICAgICAgICAgICAgICAgICBkaWdpdCAtPSA5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1bSArPSBkaWdpdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHN1bSAqIDkpICUgMTA7XG4gICAgfTtcblxuICAgIC8vIE1ENSBIYXNoXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5tZDUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIHZhciBvcHRzID0geyBzdHI6ICcnLCBrZXk6IG51bGwsIHJhdzogZmFsc2UgfTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdHMuc3RyID0gdGhpcy5zdHJpbmcoKTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG9wdHMuc3RyID0gb3B0aW9ucztcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYob3B0aW9ucy5jb25zdHJ1Y3RvciA9PT0gJ0FycmF5Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRzID0gaW5pdE9wdGlvbnMob3B0aW9ucywgb3B0cyk7XG5cbiAgICAgICAgaWYoIW9wdHMuc3RyKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgdG8gcmV0dXJuIGFuIG1kNSBoYXNoLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYmltZDUubWQ1KG9wdHMuc3RyLCBvcHRzLmtleSwgb3B0cy5yYXcpO1xuICAgIH07XG5cbiAgICB2YXIgZGF0YSA9IHtcblxuICAgICAgICBmaXJzdE5hbWVzOiB7XG4gICAgICAgICAgICBcIm1hbGVcIjogW1wiSmFtZXNcIiwgXCJKb2huXCIsIFwiUm9iZXJ0XCIsIFwiTWljaGFlbFwiLCBcIldpbGxpYW1cIiwgXCJEYXZpZFwiLCBcIlJpY2hhcmRcIiwgXCJKb3NlcGhcIiwgXCJDaGFybGVzXCIsIFwiVGhvbWFzXCIsIFwiQ2hyaXN0b3BoZXJcIiwgXCJEYW5pZWxcIiwgXCJNYXR0aGV3XCIsIFwiR2VvcmdlXCIsIFwiRG9uYWxkXCIsIFwiQW50aG9ueVwiLCBcIlBhdWxcIiwgXCJNYXJrXCIsIFwiRWR3YXJkXCIsIFwiU3RldmVuXCIsIFwiS2VubmV0aFwiLCBcIkFuZHJld1wiLCBcIkJyaWFuXCIsIFwiSm9zaHVhXCIsIFwiS2V2aW5cIiwgXCJSb25hbGRcIiwgXCJUaW1vdGh5XCIsIFwiSmFzb25cIiwgXCJKZWZmcmV5XCIsIFwiRnJhbmtcIiwgXCJHYXJ5XCIsIFwiUnlhblwiLCBcIk5pY2hvbGFzXCIsIFwiRXJpY1wiLCBcIlN0ZXBoZW5cIiwgXCJKYWNvYlwiLCBcIkxhcnJ5XCIsIFwiSm9uYXRoYW5cIiwgXCJTY290dFwiLCBcIlJheW1vbmRcIiwgXCJKdXN0aW5cIiwgXCJCcmFuZG9uXCIsIFwiR3JlZ29yeVwiLCBcIlNhbXVlbFwiLCBcIkJlbmphbWluXCIsIFwiUGF0cmlja1wiLCBcIkphY2tcIiwgXCJIZW5yeVwiLCBcIldhbHRlclwiLCBcIkRlbm5pc1wiLCBcIkplcnJ5XCIsIFwiQWxleGFuZGVyXCIsIFwiUGV0ZXJcIiwgXCJUeWxlclwiLCBcIkRvdWdsYXNcIiwgXCJIYXJvbGRcIiwgXCJBYXJvblwiLCBcIkpvc2VcIiwgXCJBZGFtXCIsIFwiQXJ0aHVyXCIsIFwiWmFjaGFyeVwiLCBcIkNhcmxcIiwgXCJOYXRoYW5cIiwgXCJBbGJlcnRcIiwgXCJLeWxlXCIsIFwiTGF3cmVuY2VcIiwgXCJKb2VcIiwgXCJXaWxsaWVcIiwgXCJHZXJhbGRcIiwgXCJSb2dlclwiLCBcIktlaXRoXCIsIFwiSmVyZW15XCIsIFwiVGVycnlcIiwgXCJIYXJyeVwiLCBcIlJhbHBoXCIsIFwiU2VhblwiLCBcIkplc3NlXCIsIFwiUm95XCIsIFwiTG91aXNcIiwgXCJCaWxseVwiLCBcIkF1c3RpblwiLCBcIkJydWNlXCIsIFwiRXVnZW5lXCIsIFwiQ2hyaXN0aWFuXCIsIFwiQnJ5YW5cIiwgXCJXYXluZVwiLCBcIlJ1c3NlbGxcIiwgXCJIb3dhcmRcIiwgXCJGcmVkXCIsIFwiRXRoYW5cIiwgXCJKb3JkYW5cIiwgXCJQaGlsaXBcIiwgXCJBbGFuXCIsIFwiSnVhblwiLCBcIlJhbmR5XCIsIFwiVmluY2VudFwiLCBcIkJvYmJ5XCIsIFwiRHlsYW5cIiwgXCJKb2hubnlcIiwgXCJQaGlsbGlwXCIsIFwiVmljdG9yXCIsIFwiQ2xhcmVuY2VcIiwgXCJFcm5lc3RcIiwgXCJNYXJ0aW5cIiwgXCJDcmFpZ1wiLCBcIlN0YW5sZXlcIiwgXCJTaGF3blwiLCBcIlRyYXZpc1wiLCBcIkJyYWRsZXlcIiwgXCJMZW9uYXJkXCIsIFwiRWFybFwiLCBcIkdhYnJpZWxcIiwgXCJKaW1teVwiLCBcIkZyYW5jaXNcIiwgXCJUb2RkXCIsIFwiTm9haFwiLCBcIkRhbm55XCIsIFwiRGFsZVwiLCBcIkNvZHlcIiwgXCJDYXJsb3NcIiwgXCJBbGxlblwiLCBcIkZyZWRlcmlja1wiLCBcIkxvZ2FuXCIsIFwiQ3VydGlzXCIsIFwiQWxleFwiLCBcIkpvZWxcIiwgXCJMdWlzXCIsIFwiTm9ybWFuXCIsIFwiTWFydmluXCIsIFwiR2xlbm5cIiwgXCJUb255XCIsIFwiTmF0aGFuaWVsXCIsIFwiUm9kbmV5XCIsIFwiTWVsdmluXCIsIFwiQWxmcmVkXCIsIFwiU3RldmVcIiwgXCJDYW1lcm9uXCIsIFwiQ2hhZFwiLCBcIkVkd2luXCIsIFwiQ2FsZWJcIiwgXCJFdmFuXCIsIFwiQW50b25pb1wiLCBcIkxlZVwiLCBcIkhlcmJlcnRcIiwgXCJKZWZmZXJ5XCIsIFwiSXNhYWNcIiwgXCJEZXJla1wiLCBcIlJpY2t5XCIsIFwiTWFyY3VzXCIsIFwiVGhlb2RvcmVcIiwgXCJFbGlqYWhcIiwgXCJMdWtlXCIsIFwiSmVzdXNcIiwgXCJFZGRpZVwiLCBcIlRyb3lcIiwgXCJNaWtlXCIsIFwiRHVzdGluXCIsIFwiUmF5XCIsIFwiQWRyaWFuXCIsIFwiQmVybmFyZFwiLCBcIkxlcm95XCIsIFwiQW5nZWxcIiwgXCJSYW5kYWxsXCIsIFwiV2VzbGV5XCIsIFwiSWFuXCIsIFwiSmFyZWRcIiwgXCJNYXNvblwiLCBcIkh1bnRlclwiLCBcIkNhbHZpblwiLCBcIk9zY2FyXCIsIFwiQ2xpZmZvcmRcIiwgXCJKYXlcIiwgXCJTaGFuZVwiLCBcIlJvbm5pZVwiLCBcIkJhcnJ5XCIsIFwiTHVjYXNcIiwgXCJDb3JleVwiLCBcIk1hbnVlbFwiLCBcIkxlb1wiLCBcIlRvbW15XCIsIFwiV2FycmVuXCIsIFwiSmFja3NvblwiLCBcIklzYWlhaFwiLCBcIkNvbm5vclwiLCBcIkRvblwiLCBcIkRlYW5cIiwgXCJKb25cIiwgXCJKdWxpYW5cIiwgXCJNaWd1ZWxcIiwgXCJCaWxsXCIsIFwiTGxveWRcIiwgXCJDaGFybGllXCIsIFwiTWl0Y2hlbGxcIiwgXCJMZW9uXCIsIFwiSmVyb21lXCIsIFwiRGFycmVsbFwiLCBcIkplcmVtaWFoXCIsIFwiQWx2aW5cIiwgXCJCcmV0dFwiLCBcIlNldGhcIiwgXCJGbG95ZFwiLCBcIkppbVwiLCBcIkJsYWtlXCIsIFwiTWljaGVhbFwiLCBcIkdvcmRvblwiLCBcIlRyZXZvclwiLCBcIkxld2lzXCIsIFwiRXJpa1wiLCBcIkVkZ2FyXCIsIFwiVmVybm9uXCIsIFwiRGV2aW5cIiwgXCJHYXZpblwiLCBcIkpheWRlblwiLCBcIkNocmlzXCIsIFwiQ2x5ZGVcIiwgXCJUb21cIiwgXCJEZXJyaWNrXCIsIFwiTWFyaW9cIiwgXCJCcmVudFwiLCBcIk1hcmNcIiwgXCJIZXJtYW5cIiwgXCJDaGFzZVwiLCBcIkRvbWluaWNcIiwgXCJSaWNhcmRvXCIsIFwiRnJhbmtsaW5cIiwgXCJNYXVyaWNlXCIsIFwiTWF4XCIsIFwiQWlkZW5cIiwgXCJPd2VuXCIsIFwiTGVzdGVyXCIsIFwiR2lsYmVydFwiLCBcIkVsbWVyXCIsIFwiR2VuZVwiLCBcIkZyYW5jaXNjb1wiLCBcIkdsZW5cIiwgXCJDb3J5XCIsIFwiR2FycmV0dFwiLCBcIkNsYXl0b25cIiwgXCJTYW1cIiwgXCJKb3JnZVwiLCBcIkNoZXN0ZXJcIiwgXCJBbGVqYW5kcm9cIiwgXCJKZWZmXCIsIFwiSGFydmV5XCIsIFwiTWlsdG9uXCIsIFwiQ29sZVwiLCBcIkl2YW5cIiwgXCJBbmRyZVwiLCBcIkR1YW5lXCIsIFwiTGFuZG9uXCJdLFxuICAgICAgICAgICAgXCJmZW1hbGVcIjogW1wiTWFyeVwiLCBcIkVtbWFcIiwgXCJFbGl6YWJldGhcIiwgXCJNaW5uaWVcIiwgXCJNYXJnYXJldFwiLCBcIklkYVwiLCBcIkFsaWNlXCIsIFwiQmVydGhhXCIsIFwiU2FyYWhcIiwgXCJBbm5pZVwiLCBcIkNsYXJhXCIsIFwiRWxsYVwiLCBcIkZsb3JlbmNlXCIsIFwiQ29yYVwiLCBcIk1hcnRoYVwiLCBcIkxhdXJhXCIsIFwiTmVsbGllXCIsIFwiR3JhY2VcIiwgXCJDYXJyaWVcIiwgXCJNYXVkZVwiLCBcIk1hYmVsXCIsIFwiQmVzc2llXCIsIFwiSmVubmllXCIsIFwiR2VydHJ1ZGVcIiwgXCJKdWxpYVwiLCBcIkhhdHRpZVwiLCBcIkVkaXRoXCIsIFwiTWF0dGllXCIsIFwiUm9zZVwiLCBcIkNhdGhlcmluZVwiLCBcIkxpbGxpYW5cIiwgXCJBZGFcIiwgXCJMaWxsaWVcIiwgXCJIZWxlblwiLCBcIkplc3NpZVwiLCBcIkxvdWlzZVwiLCBcIkV0aGVsXCIsIFwiTHVsYVwiLCBcIk15cnRsZVwiLCBcIkV2YVwiLCBcIkZyYW5jZXNcIiwgXCJMZW5hXCIsIFwiTHVjeVwiLCBcIkVkbmFcIiwgXCJNYWdnaWVcIiwgXCJQZWFybFwiLCBcIkRhaXN5XCIsIFwiRmFubmllXCIsIFwiSm9zZXBoaW5lXCIsIFwiRG9yYVwiLCBcIlJvc2FcIiwgXCJLYXRoZXJpbmVcIiwgXCJBZ25lc1wiLCBcIk1hcmllXCIsIFwiTm9yYVwiLCBcIk1heVwiLCBcIk1hbWllXCIsIFwiQmxhbmNoZVwiLCBcIlN0ZWxsYVwiLCBcIkVsbGVuXCIsIFwiTmFuY3lcIiwgXCJFZmZpZVwiLCBcIlNhbGxpZVwiLCBcIk5ldHRpZVwiLCBcIkRlbGxhXCIsIFwiTGl6emllXCIsIFwiRmxvcmFcIiwgXCJTdXNpZVwiLCBcIk1hdWRcIiwgXCJNYWVcIiwgXCJFdHRhXCIsIFwiSGFycmlldFwiLCBcIlNhZGllXCIsIFwiQ2Fyb2xpbmVcIiwgXCJLYXRpZVwiLCBcIkx5ZGlhXCIsIFwiRWxzaWVcIiwgXCJLYXRlXCIsIFwiU3VzYW5cIiwgXCJNb2xsaWVcIiwgXCJBbG1hXCIsIFwiQWRkaWVcIiwgXCJHZW9yZ2lhXCIsIFwiRWxpemFcIiwgXCJMdWx1XCIsIFwiTmFubmllXCIsIFwiTG90dGllXCIsIFwiQW1hbmRhXCIsIFwiQmVsbGVcIiwgXCJDaGFybG90dGVcIiwgXCJSZWJlY2NhXCIsIFwiUnV0aFwiLCBcIlZpb2xhXCIsIFwiT2xpdmVcIiwgXCJBbWVsaWFcIiwgXCJIYW5uYWhcIiwgXCJKYW5lXCIsIFwiVmlyZ2luaWFcIiwgXCJFbWlseVwiLCBcIk1hdGlsZGFcIiwgXCJJcmVuZVwiLCBcIkthdGhyeW5cIiwgXCJFc3RoZXJcIiwgXCJXaWxsaWVcIiwgXCJIZW5yaWV0dGFcIiwgXCJPbGxpZVwiLCBcIkFteVwiLCBcIlJhY2hlbFwiLCBcIlNhcmFcIiwgXCJFc3RlbGxhXCIsIFwiVGhlcmVzYVwiLCBcIkF1Z3VzdGFcIiwgXCJPcmFcIiwgXCJQYXVsaW5lXCIsIFwiSm9zaWVcIiwgXCJMb2xhXCIsIFwiU29waGlhXCIsIFwiTGVvbmFcIiwgXCJBbm5lXCIsIFwiTWlsZHJlZFwiLCBcIkFublwiLCBcIkJldWxhaFwiLCBcIkNhbGxpZVwiLCBcIkxvdVwiLCBcIkRlbGlhXCIsIFwiRWxlYW5vclwiLCBcIkJhcmJhcmFcIiwgXCJJdmFcIiwgXCJMb3Vpc2FcIiwgXCJNYXJpYVwiLCBcIk1heW1lXCIsIFwiRXZlbHluXCIsIFwiRXN0ZWxsZVwiLCBcIk5pbmFcIiwgXCJCZXR0eVwiLCBcIk1hcmlvblwiLCBcIkJldHRpZVwiLCBcIkRvcm90aHlcIiwgXCJMdWVsbGFcIiwgXCJJbmV6XCIsIFwiTGVsYVwiLCBcIlJvc2llXCIsIFwiQWxsaWVcIiwgXCJNaWxsaWVcIiwgXCJKYW5pZVwiLCBcIkNvcm5lbGlhXCIsIFwiVmljdG9yaWFcIiwgXCJSdWJ5XCIsIFwiV2luaWZyZWRcIiwgXCJBbHRhXCIsIFwiQ2VsaWFcIiwgXCJDaHJpc3RpbmVcIiwgXCJCZWF0cmljZVwiLCBcIkJpcmRpZVwiLCBcIkhhcnJpZXR0XCIsIFwiTWFibGVcIiwgXCJNeXJhXCIsIFwiU29waGllXCIsIFwiVGlsbGllXCIsIFwiSXNhYmVsXCIsIFwiU3lsdmlhXCIsIFwiQ2Fyb2x5blwiLCBcIklzYWJlbGxlXCIsIFwiTGVpbGFcIiwgXCJTYWxseVwiLCBcIkluYVwiLCBcIkVzc2llXCIsIFwiQmVydGllXCIsIFwiTmVsbFwiLCBcIkFsYmVydGFcIiwgXCJLYXRoYXJpbmVcIiwgXCJMb3JhXCIsIFwiUmVuYVwiLCBcIk1pbmFcIiwgXCJSaG9kYVwiLCBcIk1hdGhpbGRhXCIsIFwiQWJiaWVcIiwgXCJFdWxhXCIsIFwiRG9sbGllXCIsIFwiSGV0dGllXCIsIFwiRXVuaWNlXCIsIFwiRmFubnlcIiwgXCJPbGFcIiwgXCJMZW5vcmFcIiwgXCJBZGVsYWlkZVwiLCBcIkNocmlzdGluYVwiLCBcIkxlbGlhXCIsIFwiTmVsbGVcIiwgXCJTdWVcIiwgXCJKb2hhbm5hXCIsIFwiTGlsbHlcIiwgXCJMdWNpbmRhXCIsIFwiTWluZXJ2YVwiLCBcIkxldHRpZVwiLCBcIlJveGllXCIsIFwiQ3ludGhpYVwiLCBcIkhlbGVuYVwiLCBcIkhpbGRhXCIsIFwiSHVsZGFcIiwgXCJCZXJuaWNlXCIsIFwiR2VuZXZpZXZlXCIsIFwiSmVhblwiLCBcIkNvcmRlbGlhXCIsIFwiTWFyaWFuXCIsIFwiRnJhbmNpc1wiLCBcIkplYW5ldHRlXCIsIFwiQWRlbGluZVwiLCBcIkd1c3NpZVwiLCBcIkxlYWhcIiwgXCJMb2lzXCIsIFwiTHVyYVwiLCBcIk1pdHRpZVwiLCBcIkhhbGxpZVwiLCBcIklzYWJlbGxhXCIsIFwiT2xnYVwiLCBcIlBob2ViZVwiLCBcIlRlcmVzYVwiLCBcIkhlc3RlclwiLCBcIkxpZGFcIiwgXCJMaW5hXCIsIFwiV2lubmllXCIsIFwiQ2xhdWRpYVwiLCBcIk1hcmd1ZXJpdGVcIiwgXCJWZXJhXCIsIFwiQ2VjZWxpYVwiLCBcIkJlc3NcIiwgXCJFbWlsaWVcIiwgXCJKb2huXCIsIFwiUm9zZXR0YVwiLCBcIlZlcm5hXCIsIFwiTXlydGllXCIsIFwiQ2VjaWxpYVwiLCBcIkVsdmFcIiwgXCJPbGl2aWFcIiwgXCJPcGhlbGlhXCIsIFwiR2VvcmdpZVwiLCBcIkVsbm9yYVwiLCBcIlZpb2xldFwiLCBcIkFkZWxlXCIsIFwiTGlseVwiLCBcIkxpbm5pZVwiLCBcIkxvcmV0dGFcIiwgXCJNYWRnZVwiLCBcIlBvbGx5XCIsIFwiVmlyZ2llXCIsIFwiRXVnZW5pYVwiLCBcIkx1Y2lsZVwiLCBcIkx1Y2lsbGVcIiwgXCJNYWJlbGxlXCIsIFwiUm9zYWxpZVwiXVxuICAgICAgICB9LFxuXG4gICAgICAgIGxhc3ROYW1lczogWydTbWl0aCcsICdKb2huc29uJywgJ1dpbGxpYW1zJywgJ0pvbmVzJywgJ0Jyb3duJywgJ0RhdmlzJywgJ01pbGxlcicsICdXaWxzb24nLCAnTW9vcmUnLCAnVGF5bG9yJywgJ0FuZGVyc29uJywgJ1Rob21hcycsICdKYWNrc29uJywgJ1doaXRlJywgJ0hhcnJpcycsICdNYXJ0aW4nLCAnVGhvbXBzb24nLCAnR2FyY2lhJywgJ01hcnRpbmV6JywgJ1JvYmluc29uJywgJ0NsYXJrJywgJ1JvZHJpZ3VleicsICdMZXdpcycsICdMZWUnLCAnV2Fsa2VyJywgJ0hhbGwnLCAnQWxsZW4nLCAnWW91bmcnLCAnSGVybmFuZGV6JywgJ0tpbmcnLCAnV3JpZ2h0JywgJ0xvcGV6JywgJ0hpbGwnLCAnU2NvdHQnLCAnR3JlZW4nLCAnQWRhbXMnLCAnQmFrZXInLCAnR29uemFsZXonLCAnTmVsc29uJywgJ0NhcnRlcicsICdNaXRjaGVsbCcsICdQZXJleicsICdSb2JlcnRzJywgJ1R1cm5lcicsICdQaGlsbGlwcycsICdDYW1wYmVsbCcsICdQYXJrZXInLCAnRXZhbnMnLCAnRWR3YXJkcycsICdDb2xsaW5zJywgJ1N0ZXdhcnQnLCAnU2FuY2hleicsICdNb3JyaXMnLCAnUm9nZXJzJywgJ1JlZWQnLCAnQ29vaycsICdNb3JnYW4nLCAnQmVsbCcsICdNdXJwaHknLCAnQmFpbGV5JywgJ1JpdmVyYScsICdDb29wZXInLCAnUmljaGFyZHNvbicsICdDb3gnLCAnSG93YXJkJywgJ1dhcmQnLCAnVG9ycmVzJywgJ1BldGVyc29uJywgJ0dyYXknLCAnUmFtaXJleicsICdKYW1lcycsICdXYXRzb24nLCAnQnJvb2tzJywgJ0tlbGx5JywgJ1NhbmRlcnMnLCAnUHJpY2UnLCAnQmVubmV0dCcsICdXb29kJywgJ0Jhcm5lcycsICdSb3NzJywgJ0hlbmRlcnNvbicsICdDb2xlbWFuJywgJ0plbmtpbnMnLCAnUGVycnknLCAnUG93ZWxsJywgJ0xvbmcnLCAnUGF0dGVyc29uJywgJ0h1Z2hlcycsICdGbG9yZXMnLCAnV2FzaGluZ3RvbicsICdCdXRsZXInLCAnU2ltbW9ucycsICdGb3N0ZXInLCAnR29uemFsZXMnLCAnQnJ5YW50JywgJ0FsZXhhbmRlcicsICdSdXNzZWxsJywgJ0dyaWZmaW4nLCAnRGlheicsICdIYXllcycsICdNeWVycycsICdGb3JkJywgJ0hhbWlsdG9uJywgJ0dyYWhhbScsICdTdWxsaXZhbicsICdXYWxsYWNlJywgJ1dvb2RzJywgJ0NvbGUnLCAnV2VzdCcsICdKb3JkYW4nLCAnT3dlbnMnLCAnUmV5bm9sZHMnLCAnRmlzaGVyJywgJ0VsbGlzJywgJ0hhcnJpc29uJywgJ0dpYnNvbicsICdNY0RvbmFsZCcsICdDcnV6JywgJ01hcnNoYWxsJywgJ09ydGl6JywgJ0dvbWV6JywgJ011cnJheScsICdGcmVlbWFuJywgJ1dlbGxzJywgJ1dlYmInLCAnU2ltcHNvbicsICdTdGV2ZW5zJywgJ1R1Y2tlcicsICdQb3J0ZXInLCAnSHVudGVyJywgJ0hpY2tzJywgJ0NyYXdmb3JkJywgJ0hlbnJ5JywgJ0JveWQnLCAnTWFzb24nLCAnTW9yYWxlcycsICdLZW5uZWR5JywgJ1dhcnJlbicsICdEaXhvbicsICdSYW1vcycsICdSZXllcycsICdCdXJucycsICdHb3Jkb24nLCAnU2hhdycsICdIb2xtZXMnLCAnUmljZScsICdSb2JlcnRzb24nLCAnSHVudCcsICdCbGFjaycsICdEYW5pZWxzJywgJ1BhbG1lcicsICdNaWxscycsICdOaWNob2xzJywgJ0dyYW50JywgJ0tuaWdodCcsICdGZXJndXNvbicsICdSb3NlJywgJ1N0b25lJywgJ0hhd2tpbnMnLCAnRHVubicsICdQZXJraW5zJywgJ0h1ZHNvbicsICdTcGVuY2VyJywgJ0dhcmRuZXInLCAnU3RlcGhlbnMnLCAnUGF5bmUnLCAnUGllcmNlJywgJ0JlcnJ5JywgJ01hdHRoZXdzJywgJ0Fybm9sZCcsICdXYWduZXInLCAnV2lsbGlzJywgJ1JheScsICdXYXRraW5zJywgJ09sc29uJywgJ0NhcnJvbGwnLCAnRHVuY2FuJywgJ1NueWRlcicsICdIYXJ0JywgJ0N1bm5pbmdoYW0nLCAnQnJhZGxleScsICdMYW5lJywgJ0FuZHJld3MnLCAnUnVpeicsICdIYXJwZXInLCAnRm94JywgJ1JpbGV5JywgJ0FybXN0cm9uZycsICdDYXJwZW50ZXInLCAnV2VhdmVyJywgJ0dyZWVuZScsICdMYXdyZW5jZScsICdFbGxpb3R0JywgJ0NoYXZleicsICdTaW1zJywgJ0F1c3RpbicsICdQZXRlcnMnLCAnS2VsbGV5JywgJ0ZyYW5rbGluJywgJ0xhd3NvbicsICdGaWVsZHMnLCAnR3V0aWVycmV6JywgJ1J5YW4nLCAnU2NobWlkdCcsICdDYXJyJywgJ1Zhc3F1ZXonLCAnQ2FzdGlsbG8nLCAnV2hlZWxlcicsICdDaGFwbWFuJywgJ09saXZlcicsICdNb250Z29tZXJ5JywgJ1JpY2hhcmRzJywgJ1dpbGxpYW1zb24nLCAnSm9obnN0b24nLCAnQmFua3MnLCAnTWV5ZXInLCAnQmlzaG9wJywgJ01jQ295JywgJ0hvd2VsbCcsICdBbHZhcmV6JywgJ01vcnJpc29uJywgJ0hhbnNlbicsICdGZXJuYW5kZXonLCAnR2FyemEnLCAnSGFydmV5JywgJ0xpdHRsZScsICdCdXJ0b24nLCAnU3RhbmxleScsICdOZ3V5ZW4nLCAnR2VvcmdlJywgJ0phY29icycsICdSZWlkJywgJ0tpbScsICdGdWxsZXInLCAnTHluY2gnLCAnRGVhbicsICdHaWxiZXJ0JywgJ0dhcnJldHQnLCAnUm9tZXJvJywgJ1dlbGNoJywgJ0xhcnNvbicsICdGcmF6aWVyJywgJ0J1cmtlJywgJ0hhbnNvbicsICdEYXknLCAnTWVuZG96YScsICdNb3Jlbm8nLCAnQm93bWFuJywgJ01lZGluYScsICdGb3dsZXInLCAnQnJld2VyJywgJ0hvZmZtYW4nLCAnQ2FybHNvbicsICdTaWx2YScsICdQZWFyc29uJywgJ0hvbGxhbmQnLCAnRG91Z2xhcycsICdGbGVtaW5nJywgJ0plbnNlbicsICdWYXJnYXMnLCAnQnlyZCcsICdEYXZpZHNvbicsICdIb3BraW5zJywgJ01heScsICdUZXJyeScsICdIZXJyZXJhJywgJ1dhZGUnLCAnU290bycsICdXYWx0ZXJzJywgJ0N1cnRpcycsICdOZWFsJywgJ0NhbGR3ZWxsJywgJ0xvd2UnLCAnSmVubmluZ3MnLCAnQmFybmV0dCcsICdHcmF2ZXMnLCAnSmltZW5leicsICdIb3J0b24nLCAnU2hlbHRvbicsICdCYXJyZXR0JywgJ09icmllbicsICdDYXN0cm8nLCAnU3V0dG9uJywgJ0dyZWdvcnknLCAnTWNLaW5uZXknLCAnTHVjYXMnLCAnTWlsZXMnLCAnQ3JhaWcnLCAnUm9kcmlxdWV6JywgJ0NoYW1iZXJzJywgJ0hvbHQnLCAnTGFtYmVydCcsICdGbGV0Y2hlcicsICdXYXR0cycsICdCYXRlcycsICdIYWxlJywgJ1Job2RlcycsICdQZW5hJywgJ0JlY2snLCAnTmV3bWFuJywgJ0hheW5lcycsICdNY0RhbmllbCcsICdNZW5kZXonLCAnQnVzaCcsICdWYXVnaG4nLCAnUGFya3MnLCAnRGF3c29uJywgJ1NhbnRpYWdvJywgJ05vcnJpcycsICdIYXJkeScsICdMb3ZlJywgJ1N0ZWVsZScsICdDdXJyeScsICdQb3dlcnMnLCAnU2NodWx0eicsICdCYXJrZXInLCAnR3V6bWFuJywgJ1BhZ2UnLCAnTXVub3onLCAnQmFsbCcsICdLZWxsZXInLCAnQ2hhbmRsZXInLCAnV2ViZXInLCAnTGVvbmFyZCcsICdXYWxzaCcsICdMeW9ucycsICdSYW1zZXknLCAnV29sZmUnLCAnU2NobmVpZGVyJywgJ011bGxpbnMnLCAnQmVuc29uJywgJ1NoYXJwJywgJ0Jvd2VuJywgJ0RhbmllbCcsICdCYXJiZXInLCAnQ3VtbWluZ3MnLCAnSGluZXMnLCAnQmFsZHdpbicsICdHcmlmZml0aCcsICdWYWxkZXonLCAnSHViYmFyZCcsICdTYWxhemFyJywgJ1JlZXZlcycsICdXYXJuZXInLCAnU3RldmVuc29uJywgJ0J1cmdlc3MnLCAnU2FudG9zJywgJ1RhdGUnLCAnQ3Jvc3MnLCAnR2FybmVyJywgJ01hbm4nLCAnTWFjaycsICdNb3NzJywgJ1Rob3JudG9uJywgJ0Rlbm5pcycsICdNY0dlZScsICdGYXJtZXInLCAnRGVsZ2FkbycsICdBZ3VpbGFyJywgJ1ZlZ2EnLCAnR2xvdmVyJywgJ01hbm5pbmcnLCAnQ29oZW4nLCAnSGFybW9uJywgJ1JvZGdlcnMnLCAnUm9iYmlucycsICdOZXd0b24nLCAnVG9kZCcsICdCbGFpcicsICdIaWdnaW5zJywgJ0luZ3JhbScsICdSZWVzZScsICdDYW5ub24nLCAnU3RyaWNrbGFuZCcsICdUb3duc2VuZCcsICdQb3R0ZXInLCAnR29vZHdpbicsICdXYWx0b24nLCAnUm93ZScsICdIYW1wdG9uJywgJ09ydGVnYScsICdQYXR0b24nLCAnU3dhbnNvbicsICdKb3NlcGgnLCAnRnJhbmNpcycsICdHb29kbWFuJywgJ01hbGRvbmFkbycsICdZYXRlcycsICdCZWNrZXInLCAnRXJpY2tzb24nLCAnSG9kZ2VzJywgJ1Jpb3MnLCAnQ29ubmVyJywgJ0Fka2lucycsICdXZWJzdGVyJywgJ05vcm1hbicsICdNYWxvbmUnLCAnSGFtbW9uZCcsICdGbG93ZXJzJywgJ0NvYmInLCAnTW9vZHknLCAnUXVpbm4nLCAnQmxha2UnLCAnTWF4d2VsbCcsICdQb3BlJywgJ0Zsb3lkJywgJ09zYm9ybmUnLCAnUGF1bCcsICdNY0NhcnRoeScsICdHdWVycmVybycsICdMaW5kc2V5JywgJ0VzdHJhZGEnLCAnU2FuZG92YWwnLCAnR2liYnMnLCAnVHlsZXInLCAnR3Jvc3MnLCAnRml0emdlcmFsZCcsICdTdG9rZXMnLCAnRG95bGUnLCAnU2hlcm1hbicsICdTYXVuZGVycycsICdXaXNlJywgJ0NvbG9uJywgJ0dpbGwnLCAnQWx2YXJhZG8nLCAnR3JlZXInLCAnUGFkaWxsYScsICdTaW1vbicsICdXYXRlcnMnLCAnTnVuZXonLCAnQmFsbGFyZCcsICdTY2h3YXJ0eicsICdNY0JyaWRlJywgJ0hvdXN0b24nLCAnQ2hyaXN0ZW5zZW4nLCAnS2xlaW4nLCAnUHJhdHQnLCAnQnJpZ2dzJywgJ1BhcnNvbnMnLCAnTWNMYXVnaGxpbicsICdaaW1tZXJtYW4nLCAnRnJlbmNoJywgJ0J1Y2hhbmFuJywgJ01vcmFuJywgJ0NvcGVsYW5kJywgJ1JveScsICdQaXR0bWFuJywgJ0JyYWR5JywgJ01jQ29ybWljaycsICdIb2xsb3dheScsICdCcm9jaycsICdQb29sZScsICdGcmFuaycsICdMb2dhbicsICdPd2VuJywgJ0Jhc3MnLCAnTWFyc2gnLCAnRHJha2UnLCAnV29uZycsICdKZWZmZXJzb24nLCAnUGFyaycsICdNb3J0b24nLCAnQWJib3R0JywgJ1NwYXJrcycsICdQYXRyaWNrJywgJ05vcnRvbicsICdIdWZmJywgJ0NsYXl0b24nLCAnTWFzc2V5JywgJ0xsb3lkJywgJ0ZpZ3Vlcm9hJywgJ0NhcnNvbicsICdCb3dlcnMnLCAnUm9iZXJzb24nLCAnQmFydG9uJywgJ1RyYW4nLCAnTGFtYicsICdIYXJyaW5ndG9uJywgJ0Nhc2V5JywgJ0Jvb25lJywgJ0NvcnRleicsICdDbGFya2UnLCAnTWF0aGlzJywgJ1NpbmdsZXRvbicsICdXaWxraW5zJywgJ0NhaW4nLCAnQnJ5YW4nLCAnVW5kZXJ3b29kJywgJ0hvZ2FuJywgJ01jS2VuemllJywgJ0NvbGxpZXInLCAnTHVuYScsICdQaGVscHMnLCAnTWNHdWlyZScsICdBbGxpc29uJywgJ0JyaWRnZXMnLCAnV2lsa2Vyc29uJywgJ05hc2gnLCAnU3VtbWVycycsICdBdGtpbnMnXSxcblxuICAgICAgICAvLyBEYXRhIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3VtcGlyc2t5L2NvdW50cnktbGlzdC9ibG9iL21hc3Rlci9jb3VudHJ5L2NsZHIvZW5fVVMvY291bnRyeS5qc29uXG4gICAgICAgIGNvdW50cmllczogW3tcIm5hbWVcIjpcIkFmZ2hhbmlzdGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFGXCJ9LHtcIm5hbWVcIjpcIkFsYmFuaWFcIixcImFiYnJldmlhdGlvblwiOlwiQUxcIn0se1wibmFtZVwiOlwiQWxnZXJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJEWlwifSx7XCJuYW1lXCI6XCJBbWVyaWNhbiBTYW1vYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBU1wifSx7XCJuYW1lXCI6XCJBbmRvcnJhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFEXCJ9LHtcIm5hbWVcIjpcIkFuZ29sYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBT1wifSx7XCJuYW1lXCI6XCJBbmd1aWxsYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBSVwifSx7XCJuYW1lXCI6XCJBbnRhcmN0aWNhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFRXCJ9LHtcIm5hbWVcIjpcIkFudGlndWEgYW5kIEJhcmJ1ZGFcIixcImFiYnJldmlhdGlvblwiOlwiQUdcIn0se1wibmFtZVwiOlwiQXJnZW50aW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFSXCJ9LHtcIm5hbWVcIjpcIkFybWVuaWFcIixcImFiYnJldmlhdGlvblwiOlwiQU1cIn0se1wibmFtZVwiOlwiQXJ1YmFcIixcImFiYnJldmlhdGlvblwiOlwiQVdcIn0se1wibmFtZVwiOlwiQXVzdHJhbGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFVXCJ9LHtcIm5hbWVcIjpcIkF1c3RyaWFcIixcImFiYnJldmlhdGlvblwiOlwiQVRcIn0se1wibmFtZVwiOlwiQXplcmJhaWphblwiLFwiYWJicmV2aWF0aW9uXCI6XCJBWlwifSx7XCJuYW1lXCI6XCJCYWhhbWFzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJTXCJ9LHtcIm5hbWVcIjpcIkJhaHJhaW5cIixcImFiYnJldmlhdGlvblwiOlwiQkhcIn0se1wibmFtZVwiOlwiQmFuZ2xhZGVzaFwiLFwiYWJicmV2aWF0aW9uXCI6XCJCRFwifSx7XCJuYW1lXCI6XCJCYXJiYWRvc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJCQlwifSx7XCJuYW1lXCI6XCJCZWxhcnVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJZXCJ9LHtcIm5hbWVcIjpcIkJlbGdpdW1cIixcImFiYnJldmlhdGlvblwiOlwiQkVcIn0se1wibmFtZVwiOlwiQmVsaXplXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJaXCJ9LHtcIm5hbWVcIjpcIkJlbmluXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJKXCJ9LHtcIm5hbWVcIjpcIkJlcm11ZGFcIixcImFiYnJldmlhdGlvblwiOlwiQk1cIn0se1wibmFtZVwiOlwiQmh1dGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJUXCJ9LHtcIm5hbWVcIjpcIkJvbGl2aWFcIixcImFiYnJldmlhdGlvblwiOlwiQk9cIn0se1wibmFtZVwiOlwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCQVwifSx7XCJuYW1lXCI6XCJCb3Rzd2FuYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCV1wifSx7XCJuYW1lXCI6XCJCb3V2ZXQgSXNsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJWXCJ9LHtcIm5hbWVcIjpcIkJyYXppbFwiLFwiYWJicmV2aWF0aW9uXCI6XCJCUlwifSx7XCJuYW1lXCI6XCJCcml0aXNoIEFudGFyY3RpYyBUZXJyaXRvcnlcIixcImFiYnJldmlhdGlvblwiOlwiQlFcIn0se1wibmFtZVwiOlwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XCIsXCJhYmJyZXZpYXRpb25cIjpcIklPXCJ9LHtcIm5hbWVcIjpcIkJyaXRpc2ggVmlyZ2luIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiVkdcIn0se1wibmFtZVwiOlwiQnJ1bmVpXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJOXCJ9LHtcIm5hbWVcIjpcIkJ1bGdhcmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJHXCJ9LHtcIm5hbWVcIjpcIkJ1cmtpbmEgRmFzb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJCRlwifSx7XCJuYW1lXCI6XCJCdXJ1bmRpXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJJXCJ9LHtcIm5hbWVcIjpcIkNhbWJvZGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIktIXCJ9LHtcIm5hbWVcIjpcIkNhbWVyb29uXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNNXCJ9LHtcIm5hbWVcIjpcIkNhbmFkYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDQVwifSx7XCJuYW1lXCI6XCJDYW50b24gYW5kIEVuZGVyYnVyeSBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNUXCJ9LHtcIm5hbWVcIjpcIkNhcGUgVmVyZGVcIixcImFiYnJldmlhdGlvblwiOlwiQ1ZcIn0se1wibmFtZVwiOlwiQ2F5bWFuIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiS1lcIn0se1wibmFtZVwiOlwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNGXCJ9LHtcIm5hbWVcIjpcIkNoYWRcIixcImFiYnJldmlhdGlvblwiOlwiVERcIn0se1wibmFtZVwiOlwiQ2hpbGVcIixcImFiYnJldmlhdGlvblwiOlwiQ0xcIn0se1wibmFtZVwiOlwiQ2hpbmFcIixcImFiYnJldmlhdGlvblwiOlwiQ05cIn0se1wibmFtZVwiOlwiQ2hyaXN0bWFzIElzbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJDWFwifSx7XCJuYW1lXCI6XCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJDQ1wifSx7XCJuYW1lXCI6XCJDb2xvbWJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDT1wifSx7XCJuYW1lXCI6XCJDb21vcm9zXCIsXCJhYmJyZXZpYXRpb25cIjpcIktNXCJ9LHtcIm5hbWVcIjpcIkNvbmdvIC0gQnJhenphdmlsbGVcIixcImFiYnJldmlhdGlvblwiOlwiQ0dcIn0se1wibmFtZVwiOlwiQ29uZ28gLSBLaW5zaGFzYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDRFwifSx7XCJuYW1lXCI6XCJDb29rIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiQ0tcIn0se1wibmFtZVwiOlwiQ29zdGEgUmljYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDUlwifSx7XCJuYW1lXCI6XCJDcm9hdGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkhSXCJ9LHtcIm5hbWVcIjpcIkN1YmFcIixcImFiYnJldmlhdGlvblwiOlwiQ1VcIn0se1wibmFtZVwiOlwiQ3lwcnVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNZXCJ9LHtcIm5hbWVcIjpcIkN6ZWNoIFJlcHVibGljXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNaXCJ9LHtcIm5hbWVcIjpcIkPDtHRlIGTigJlJdm9pcmVcIixcImFiYnJldmlhdGlvblwiOlwiQ0lcIn0se1wibmFtZVwiOlwiRGVubWFya1wiLFwiYWJicmV2aWF0aW9uXCI6XCJES1wifSx7XCJuYW1lXCI6XCJEamlib3V0aVwiLFwiYWJicmV2aWF0aW9uXCI6XCJESlwifSx7XCJuYW1lXCI6XCJEb21pbmljYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJETVwifSx7XCJuYW1lXCI6XCJEb21pbmljYW4gUmVwdWJsaWNcIixcImFiYnJldmlhdGlvblwiOlwiRE9cIn0se1wibmFtZVwiOlwiRHJvbm5pbmcgTWF1ZCBMYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5RXCJ9LHtcIm5hbWVcIjpcIkVhc3QgR2VybWFueVwiLFwiYWJicmV2aWF0aW9uXCI6XCJERFwifSx7XCJuYW1lXCI6XCJFY3VhZG9yXCIsXCJhYmJyZXZpYXRpb25cIjpcIkVDXCJ9LHtcIm5hbWVcIjpcIkVneXB0XCIsXCJhYmJyZXZpYXRpb25cIjpcIkVHXCJ9LHtcIm5hbWVcIjpcIkVsIFNhbHZhZG9yXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNWXCJ9LHtcIm5hbWVcIjpcIkVxdWF0b3JpYWwgR3VpbmVhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdRXCJ9LHtcIm5hbWVcIjpcIkVyaXRyZWFcIixcImFiYnJldmlhdGlvblwiOlwiRVJcIn0se1wibmFtZVwiOlwiRXN0b25pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJFRVwifSx7XCJuYW1lXCI6XCJFdGhpb3BpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJFVFwifSx7XCJuYW1lXCI6XCJGYWxrbGFuZCBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZLXCJ9LHtcIm5hbWVcIjpcIkZhcm9lIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiRk9cIn0se1wibmFtZVwiOlwiRmlqaVwiLFwiYWJicmV2aWF0aW9uXCI6XCJGSlwifSx7XCJuYW1lXCI6XCJGaW5sYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZJXCJ9LHtcIm5hbWVcIjpcIkZyYW5jZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJGUlwifSx7XCJuYW1lXCI6XCJGcmVuY2ggR3VpYW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdGXCJ9LHtcIm5hbWVcIjpcIkZyZW5jaCBQb2x5bmVzaWFcIixcImFiYnJldmlhdGlvblwiOlwiUEZcIn0se1wibmFtZVwiOlwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRGXCJ9LHtcIm5hbWVcIjpcIkZyZW5jaCBTb3V0aGVybiBhbmQgQW50YXJjdGljIFRlcnJpdG9yaWVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZRXCJ9LHtcIm5hbWVcIjpcIkdhYm9uXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdBXCJ9LHtcIm5hbWVcIjpcIkdhbWJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHTVwifSx7XCJuYW1lXCI6XCJHZW9yZ2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdFXCJ9LHtcIm5hbWVcIjpcIkdlcm1hbnlcIixcImFiYnJldmlhdGlvblwiOlwiREVcIn0se1wibmFtZVwiOlwiR2hhbmFcIixcImFiYnJldmlhdGlvblwiOlwiR0hcIn0se1wibmFtZVwiOlwiR2licmFsdGFyXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdJXCJ9LHtcIm5hbWVcIjpcIkdyZWVjZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHUlwifSx7XCJuYW1lXCI6XCJHcmVlbmxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiR0xcIn0se1wibmFtZVwiOlwiR3JlbmFkYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHRFwifSx7XCJuYW1lXCI6XCJHdWFkZWxvdXBlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdQXCJ9LHtcIm5hbWVcIjpcIkd1YW1cIixcImFiYnJldmlhdGlvblwiOlwiR1VcIn0se1wibmFtZVwiOlwiR3VhdGVtYWxhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdUXCJ9LHtcIm5hbWVcIjpcIkd1ZXJuc2V5XCIsXCJhYmJyZXZpYXRpb25cIjpcIkdHXCJ9LHtcIm5hbWVcIjpcIkd1aW5lYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHTlwifSx7XCJuYW1lXCI6XCJHdWluZWEtQmlzc2F1XCIsXCJhYmJyZXZpYXRpb25cIjpcIkdXXCJ9LHtcIm5hbWVcIjpcIkd1eWFuYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHWVwifSx7XCJuYW1lXCI6XCJIYWl0aVwiLFwiYWJicmV2aWF0aW9uXCI6XCJIVFwifSx7XCJuYW1lXCI6XCJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiSE1cIn0se1wibmFtZVwiOlwiSG9uZHVyYXNcIixcImFiYnJldmlhdGlvblwiOlwiSE5cIn0se1wibmFtZVwiOlwiSG9uZyBLb25nIFNBUiBDaGluYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJIS1wifSx7XCJuYW1lXCI6XCJIdW5nYXJ5XCIsXCJhYmJyZXZpYXRpb25cIjpcIkhVXCJ9LHtcIm5hbWVcIjpcIkljZWxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiSVNcIn0se1wibmFtZVwiOlwiSW5kaWFcIixcImFiYnJldmlhdGlvblwiOlwiSU5cIn0se1wibmFtZVwiOlwiSW5kb25lc2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIklEXCJ9LHtcIm5hbWVcIjpcIklyYW5cIixcImFiYnJldmlhdGlvblwiOlwiSVJcIn0se1wibmFtZVwiOlwiSXJhcVwiLFwiYWJicmV2aWF0aW9uXCI6XCJJUVwifSx7XCJuYW1lXCI6XCJJcmVsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIklFXCJ9LHtcIm5hbWVcIjpcIklzbGUgb2YgTWFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIklNXCJ9LHtcIm5hbWVcIjpcIklzcmFlbFwiLFwiYWJicmV2aWF0aW9uXCI6XCJJTFwifSx7XCJuYW1lXCI6XCJJdGFseVwiLFwiYWJicmV2aWF0aW9uXCI6XCJJVFwifSx7XCJuYW1lXCI6XCJKYW1haWNhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkpNXCJ9LHtcIm5hbWVcIjpcIkphcGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIkpQXCJ9LHtcIm5hbWVcIjpcIkplcnNleVwiLFwiYWJicmV2aWF0aW9uXCI6XCJKRVwifSx7XCJuYW1lXCI6XCJKb2huc3RvbiBJc2xhbmRcIixcImFiYnJldmlhdGlvblwiOlwiSlRcIn0se1wibmFtZVwiOlwiSm9yZGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIkpPXCJ9LHtcIm5hbWVcIjpcIkthemFraHN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiS1pcIn0se1wibmFtZVwiOlwiS2VueWFcIixcImFiYnJldmlhdGlvblwiOlwiS0VcIn0se1wibmFtZVwiOlwiS2lyaWJhdGlcIixcImFiYnJldmlhdGlvblwiOlwiS0lcIn0se1wibmFtZVwiOlwiS3V3YWl0XCIsXCJhYmJyZXZpYXRpb25cIjpcIktXXCJ9LHtcIm5hbWVcIjpcIkt5cmd5enN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiS0dcIn0se1wibmFtZVwiOlwiTGFvc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJMQVwifSx7XCJuYW1lXCI6XCJMYXR2aWFcIixcImFiYnJldmlhdGlvblwiOlwiTFZcIn0se1wibmFtZVwiOlwiTGViYW5vblwiLFwiYWJicmV2aWF0aW9uXCI6XCJMQlwifSx7XCJuYW1lXCI6XCJMZXNvdGhvXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxTXCJ9LHtcIm5hbWVcIjpcIkxpYmVyaWFcIixcImFiYnJldmlhdGlvblwiOlwiTFJcIn0se1wibmFtZVwiOlwiTGlieWFcIixcImFiYnJldmlhdGlvblwiOlwiTFlcIn0se1wibmFtZVwiOlwiTGllY2h0ZW5zdGVpblwiLFwiYWJicmV2aWF0aW9uXCI6XCJMSVwifSx7XCJuYW1lXCI6XCJMaXRodWFuaWFcIixcImFiYnJldmlhdGlvblwiOlwiTFRcIn0se1wibmFtZVwiOlwiTHV4ZW1ib3VyZ1wiLFwiYWJicmV2aWF0aW9uXCI6XCJMVVwifSx7XCJuYW1lXCI6XCJNYWNhdSBTQVIgQ2hpbmFcIixcImFiYnJldmlhdGlvblwiOlwiTU9cIn0se1wibmFtZVwiOlwiTWFjZWRvbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1LXCJ9LHtcIm5hbWVcIjpcIk1hZGFnYXNjYXJcIixcImFiYnJldmlhdGlvblwiOlwiTUdcIn0se1wibmFtZVwiOlwiTWFsYXdpXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1XXCJ9LHtcIm5hbWVcIjpcIk1hbGF5c2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1ZXCJ9LHtcIm5hbWVcIjpcIk1hbGRpdmVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1WXCJ9LHtcIm5hbWVcIjpcIk1hbGlcIixcImFiYnJldmlhdGlvblwiOlwiTUxcIn0se1wibmFtZVwiOlwiTWFsdGFcIixcImFiYnJldmlhdGlvblwiOlwiTVRcIn0se1wibmFtZVwiOlwiTWFyc2hhbGwgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNSFwifSx7XCJuYW1lXCI6XCJNYXJ0aW5pcXVlXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1RXCJ9LHtcIm5hbWVcIjpcIk1hdXJpdGFuaWFcIixcImFiYnJldmlhdGlvblwiOlwiTVJcIn0se1wibmFtZVwiOlwiTWF1cml0aXVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1VXCJ9LHtcIm5hbWVcIjpcIk1heW90dGVcIixcImFiYnJldmlhdGlvblwiOlwiWVRcIn0se1wibmFtZVwiOlwiTWV0cm9wb2xpdGFuIEZyYW5jZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJGWFwifSx7XCJuYW1lXCI6XCJNZXhpY29cIixcImFiYnJldmlhdGlvblwiOlwiTVhcIn0se1wibmFtZVwiOlwiTWljcm9uZXNpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJGTVwifSx7XCJuYW1lXCI6XCJNaWR3YXkgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNSVwifSx7XCJuYW1lXCI6XCJNb2xkb3ZhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1EXCJ9LHtcIm5hbWVcIjpcIk1vbmFjb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNQ1wifSx7XCJuYW1lXCI6XCJNb25nb2xpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNTlwifSx7XCJuYW1lXCI6XCJNb250ZW5lZ3JvXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1FXCJ9LHtcIm5hbWVcIjpcIk1vbnRzZXJyYXRcIixcImFiYnJldmlhdGlvblwiOlwiTVNcIn0se1wibmFtZVwiOlwiTW9yb2Njb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNQVwifSx7XCJuYW1lXCI6XCJNb3phbWJpcXVlXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1aXCJ9LHtcIm5hbWVcIjpcIk15YW5tYXIgW0J1cm1hXVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNTVwifSx7XCJuYW1lXCI6XCJOYW1pYmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5BXCJ9LHtcIm5hbWVcIjpcIk5hdXJ1XCIsXCJhYmJyZXZpYXRpb25cIjpcIk5SXCJ9LHtcIm5hbWVcIjpcIk5lcGFsXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5QXCJ9LHtcIm5hbWVcIjpcIk5ldGhlcmxhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5MXCJ9LHtcIm5hbWVcIjpcIk5ldGhlcmxhbmRzIEFudGlsbGVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFOXCJ9LHtcIm5hbWVcIjpcIk5ldXRyYWwgWm9uZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJOVFwifSx7XCJuYW1lXCI6XCJOZXcgQ2FsZWRvbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5DXCJ9LHtcIm5hbWVcIjpcIk5ldyBaZWFsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5aXCJ9LHtcIm5hbWVcIjpcIk5pY2FyYWd1YVwiLFwiYWJicmV2aWF0aW9uXCI6XCJOSVwifSx7XCJuYW1lXCI6XCJOaWdlclwiLFwiYWJicmV2aWF0aW9uXCI6XCJORVwifSx7XCJuYW1lXCI6XCJOaWdlcmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5HXCJ9LHtcIm5hbWVcIjpcIk5pdWVcIixcImFiYnJldmlhdGlvblwiOlwiTlVcIn0se1wibmFtZVwiOlwiTm9yZm9sayBJc2xhbmRcIixcImFiYnJldmlhdGlvblwiOlwiTkZcIn0se1wibmFtZVwiOlwiTm9ydGggS29yZWFcIixcImFiYnJldmlhdGlvblwiOlwiS1BcIn0se1wibmFtZVwiOlwiTm9ydGggVmlldG5hbVwiLFwiYWJicmV2aWF0aW9uXCI6XCJWRFwifSx7XCJuYW1lXCI6XCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiTVBcIn0se1wibmFtZVwiOlwiTm9yd2F5XCIsXCJhYmJyZXZpYXRpb25cIjpcIk5PXCJ9LHtcIm5hbWVcIjpcIk9tYW5cIixcImFiYnJldmlhdGlvblwiOlwiT01cIn0se1wibmFtZVwiOlwiUGFjaWZpYyBJc2xhbmRzIFRydXN0IFRlcnJpdG9yeVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQQ1wifSx7XCJuYW1lXCI6XCJQYWtpc3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJQS1wifSx7XCJuYW1lXCI6XCJQYWxhdVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQV1wifSx7XCJuYW1lXCI6XCJQYWxlc3RpbmlhbiBUZXJyaXRvcmllc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJQU1wifSx7XCJuYW1lXCI6XCJQYW5hbWFcIixcImFiYnJldmlhdGlvblwiOlwiUEFcIn0se1wibmFtZVwiOlwiUGFuYW1hIENhbmFsIFpvbmVcIixcImFiYnJldmlhdGlvblwiOlwiUFpcIn0se1wibmFtZVwiOlwiUGFwdWEgTmV3IEd1aW5lYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQR1wifSx7XCJuYW1lXCI6XCJQYXJhZ3VheVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQWVwifSx7XCJuYW1lXCI6XCJQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljIG9mIFllbWVuXCIsXCJhYmJyZXZpYXRpb25cIjpcIllEXCJ9LHtcIm5hbWVcIjpcIlBlcnVcIixcImFiYnJldmlhdGlvblwiOlwiUEVcIn0se1wibmFtZVwiOlwiUGhpbGlwcGluZXNcIixcImFiYnJldmlhdGlvblwiOlwiUEhcIn0se1wibmFtZVwiOlwiUGl0Y2Fpcm4gSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJQTlwifSx7XCJuYW1lXCI6XCJQb2xhbmRcIixcImFiYnJldmlhdGlvblwiOlwiUExcIn0se1wibmFtZVwiOlwiUG9ydHVnYWxcIixcImFiYnJldmlhdGlvblwiOlwiUFRcIn0se1wibmFtZVwiOlwiUHVlcnRvIFJpY29cIixcImFiYnJldmlhdGlvblwiOlwiUFJcIn0se1wibmFtZVwiOlwiUWF0YXJcIixcImFiYnJldmlhdGlvblwiOlwiUUFcIn0se1wibmFtZVwiOlwiUm9tYW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJST1wifSx7XCJuYW1lXCI6XCJSdXNzaWFcIixcImFiYnJldmlhdGlvblwiOlwiUlVcIn0se1wibmFtZVwiOlwiUndhbmRhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlJXXCJ9LHtcIm5hbWVcIjpcIlLDqXVuaW9uXCIsXCJhYmJyZXZpYXRpb25cIjpcIlJFXCJ9LHtcIm5hbWVcIjpcIlNhaW50IEJhcnRow6lsZW15XCIsXCJhYmJyZXZpYXRpb25cIjpcIkJMXCJ9LHtcIm5hbWVcIjpcIlNhaW50IEhlbGVuYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTSFwifSx7XCJuYW1lXCI6XCJTYWludCBLaXR0cyBhbmQgTmV2aXNcIixcImFiYnJldmlhdGlvblwiOlwiS05cIn0se1wibmFtZVwiOlwiU2FpbnQgTHVjaWFcIixcImFiYnJldmlhdGlvblwiOlwiTENcIn0se1wibmFtZVwiOlwiU2FpbnQgTWFydGluXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1GXCJ9LHtcIm5hbWVcIjpcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cIixcImFiYnJldmlhdGlvblwiOlwiUE1cIn0se1wibmFtZVwiOlwiU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXNcIixcImFiYnJldmlhdGlvblwiOlwiVkNcIn0se1wibmFtZVwiOlwiU2Ftb2FcIixcImFiYnJldmlhdGlvblwiOlwiV1NcIn0se1wibmFtZVwiOlwiU2FuIE1hcmlub1wiLFwiYWJicmV2aWF0aW9uXCI6XCJTTVwifSx7XCJuYW1lXCI6XCJTYXVkaSBBcmFiaWFcIixcImFiYnJldmlhdGlvblwiOlwiU0FcIn0se1wibmFtZVwiOlwiU2VuZWdhbFwiLFwiYWJicmV2aWF0aW9uXCI6XCJTTlwifSx7XCJuYW1lXCI6XCJTZXJiaWFcIixcImFiYnJldmlhdGlvblwiOlwiUlNcIn0se1wibmFtZVwiOlwiU2VyYmlhIGFuZCBNb250ZW5lZ3JvXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNTXCJ9LHtcIm5hbWVcIjpcIlNleWNoZWxsZXNcIixcImFiYnJldmlhdGlvblwiOlwiU0NcIn0se1wibmFtZVwiOlwiU2llcnJhIExlb25lXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNMXCJ9LHtcIm5hbWVcIjpcIlNpbmdhcG9yZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTR1wifSx7XCJuYW1lXCI6XCJTbG92YWtpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTS1wifSx7XCJuYW1lXCI6XCJTbG92ZW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTSVwifSx7XCJuYW1lXCI6XCJTb2xvbW9uIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiU0JcIn0se1wibmFtZVwiOlwiU29tYWxpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTT1wifSx7XCJuYW1lXCI6XCJTb3V0aCBBZnJpY2FcIixcImFiYnJldmlhdGlvblwiOlwiWkFcIn0se1wibmFtZVwiOlwiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiR1NcIn0se1wibmFtZVwiOlwiU291dGggS29yZWFcIixcImFiYnJldmlhdGlvblwiOlwiS1JcIn0se1wibmFtZVwiOlwiU3BhaW5cIixcImFiYnJldmlhdGlvblwiOlwiRVNcIn0se1wibmFtZVwiOlwiU3JpIExhbmthXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxLXCJ9LHtcIm5hbWVcIjpcIlN1ZGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNEXCJ9LHtcIm5hbWVcIjpcIlN1cmluYW1lXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNSXCJ9LHtcIm5hbWVcIjpcIlN2YWxiYXJkIGFuZCBKYW4gTWF5ZW5cIixcImFiYnJldmlhdGlvblwiOlwiU0pcIn0se1wibmFtZVwiOlwiU3dhemlsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNaXCJ9LHtcIm5hbWVcIjpcIlN3ZWRlblwiLFwiYWJicmV2aWF0aW9uXCI6XCJTRVwifSx7XCJuYW1lXCI6XCJTd2l0emVybGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJDSFwifSx7XCJuYW1lXCI6XCJTeXJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTWVwifSx7XCJuYW1lXCI6XCJTw6NvIFRvbcOpIGFuZCBQcsOtbmNpcGVcIixcImFiYnJldmlhdGlvblwiOlwiU1RcIn0se1wibmFtZVwiOlwiVGFpd2FuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRXXCJ9LHtcIm5hbWVcIjpcIlRhamlraXN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiVEpcIn0se1wibmFtZVwiOlwiVGFuemFuaWFcIixcImFiYnJldmlhdGlvblwiOlwiVFpcIn0se1wibmFtZVwiOlwiVGhhaWxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiVEhcIn0se1wibmFtZVwiOlwiVGltb3ItTGVzdGVcIixcImFiYnJldmlhdGlvblwiOlwiVExcIn0se1wibmFtZVwiOlwiVG9nb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJUR1wifSx7XCJuYW1lXCI6XCJUb2tlbGF1XCIsXCJhYmJyZXZpYXRpb25cIjpcIlRLXCJ9LHtcIm5hbWVcIjpcIlRvbmdhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRPXCJ9LHtcIm5hbWVcIjpcIlRyaW5pZGFkIGFuZCBUb2JhZ29cIixcImFiYnJldmlhdGlvblwiOlwiVFRcIn0se1wibmFtZVwiOlwiVHVuaXNpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUTlwifSx7XCJuYW1lXCI6XCJUdXJrZXlcIixcImFiYnJldmlhdGlvblwiOlwiVFJcIn0se1wibmFtZVwiOlwiVHVya21lbmlzdGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRNXCJ9LHtcIm5hbWVcIjpcIlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJUQ1wifSx7XCJuYW1lXCI6XCJUdXZhbHVcIixcImFiYnJldmlhdGlvblwiOlwiVFZcIn0se1wibmFtZVwiOlwiVS5TLiBNaW5vciBPdXRseWluZyBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlVNXCJ9LHtcIm5hbWVcIjpcIlUuUy4gTWlzY2VsbGFuZW91cyBQYWNpZmljIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiUFVcIn0se1wibmFtZVwiOlwiVS5TLiBWaXJnaW4gSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJWSVwifSx7XCJuYW1lXCI6XCJVZ2FuZGFcIixcImFiYnJldmlhdGlvblwiOlwiVUdcIn0se1wibmFtZVwiOlwiVWtyYWluZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJVQVwifSx7XCJuYW1lXCI6XCJVbmlvbiBvZiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJTVVwifSx7XCJuYW1lXCI6XCJVbml0ZWQgQXJhYiBFbWlyYXRlc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJBRVwifSx7XCJuYW1lXCI6XCJVbml0ZWQgS2luZ2RvbVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHQlwifSx7XCJuYW1lXCI6XCJVbml0ZWQgU3RhdGVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlVTXCJ9LHtcIm5hbWVcIjpcIlVua25vd24gb3IgSW52YWxpZCBSZWdpb25cIixcImFiYnJldmlhdGlvblwiOlwiWlpcIn0se1wibmFtZVwiOlwiVXJ1Z3VheVwiLFwiYWJicmV2aWF0aW9uXCI6XCJVWVwifSx7XCJuYW1lXCI6XCJVemJla2lzdGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlVaXCJ9LHtcIm5hbWVcIjpcIlZhbnVhdHVcIixcImFiYnJldmlhdGlvblwiOlwiVlVcIn0se1wibmFtZVwiOlwiVmF0aWNhbiBDaXR5XCIsXCJhYmJyZXZpYXRpb25cIjpcIlZBXCJ9LHtcIm5hbWVcIjpcIlZlbmV6dWVsYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJWRVwifSx7XCJuYW1lXCI6XCJWaWV0bmFtXCIsXCJhYmJyZXZpYXRpb25cIjpcIlZOXCJ9LHtcIm5hbWVcIjpcIldha2UgSXNsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIldLXCJ9LHtcIm5hbWVcIjpcIldhbGxpcyBhbmQgRnV0dW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIldGXCJ9LHtcIm5hbWVcIjpcIldlc3Rlcm4gU2FoYXJhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkVIXCJ9LHtcIm5hbWVcIjpcIlllbWVuXCIsXCJhYmJyZXZpYXRpb25cIjpcIllFXCJ9LHtcIm5hbWVcIjpcIlphbWJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJaTVwifSx7XCJuYW1lXCI6XCJaaW1iYWJ3ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJaV1wifSx7XCJuYW1lXCI6XCLDhWxhbmQgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJBWFwifV0sXG5cbiAgICAgICAgcHJvdmluY2VzOiBbXG4gICAgICAgICAgICB7bmFtZTogJ0FsYmVydGEnLCBhYmJyZXZpYXRpb246ICdBQid9LFxuICAgICAgICAgICAge25hbWU6ICdCcml0aXNoIENvbHVtYmlhJywgYWJicmV2aWF0aW9uOiAnQkMnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWFuaXRvYmEnLCBhYmJyZXZpYXRpb246ICdNQid9LFxuICAgICAgICAgICAge25hbWU6ICdOZXcgQnJ1bnN3aWNrJywgYWJicmV2aWF0aW9uOiAnTkInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTmV3Zm91bmRsYW5kIGFuZCBMYWJyYWRvcicsIGFiYnJldmlhdGlvbjogJ05MJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05vdmEgU2NvdGlhJywgYWJicmV2aWF0aW9uOiAnTlMnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnT250YXJpbycsIGFiYnJldmlhdGlvbjogJ09OJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1ByaW5jZSBFZHdhcmQgSXNsYW5kJywgYWJicmV2aWF0aW9uOiAnUEUnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUXVlYmVjJywgYWJicmV2aWF0aW9uOiAnUUMnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnU2Fza2F0Y2hld2FuJywgYWJicmV2aWF0aW9uOiAnU0snfSxcblxuICAgICAgICAgICAgLy8gVGhlIGNhc2UgY291bGQgYmUgbWFkZSB0aGF0IHRoZSBmb2xsb3dpbmcgYXJlIG5vdCBhY3R1YWxseSBwcm92aW5jZXNcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkgYXJlIHRlY2huaWNhbGx5IGNvbnNpZGVyZWQgXCJ0ZXJyaXRvcmllc1wiIGhvd2V2ZXIgdGhleSBhbGxcbiAgICAgICAgICAgIC8vIGxvb2sgdGhlIHNhbWUgb24gYW4gZW52ZWxvcGUhXG4gICAgICAgICAgICB7bmFtZTogJ05vcnRod2VzdCBUZXJyaXRvcmllcycsIGFiYnJldmlhdGlvbjogJ05UJ30sXG4gICAgICAgICAgICB7bmFtZTogJ051bmF2dXQnLCBhYmJyZXZpYXRpb246ICdOVSd9LFxuICAgICAgICAgICAge25hbWU6ICdZdWtvbicsIGFiYnJldmlhdGlvbjogJ1lUJ31cbiAgICAgICAgXSxcblxuICAgICAgICB1c19zdGF0ZXNfYW5kX2RjOiBbXG4gICAgICAgICAgICB7bmFtZTogJ0FsYWJhbWEnLCBhYmJyZXZpYXRpb246ICdBTCd9LFxuICAgICAgICAgICAge25hbWU6ICdBbGFza2EnLCBhYmJyZXZpYXRpb246ICdBSyd9LFxuICAgICAgICAgICAge25hbWU6ICdBcml6b25hJywgYWJicmV2aWF0aW9uOiAnQVonfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQXJrYW5zYXMnLCBhYmJyZXZpYXRpb246ICdBUid9LFxuICAgICAgICAgICAge25hbWU6ICdDYWxpZm9ybmlhJywgYWJicmV2aWF0aW9uOiAnQ0EnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQ29sb3JhZG8nLCBhYmJyZXZpYXRpb246ICdDTyd9LFxuICAgICAgICAgICAge25hbWU6ICdDb25uZWN0aWN1dCcsIGFiYnJldmlhdGlvbjogJ0NUJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0RlbGF3YXJlJywgYWJicmV2aWF0aW9uOiAnREUnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnRGlzdHJpY3Qgb2YgQ29sdW1iaWEnLCBhYmJyZXZpYXRpb246ICdEQyd9LFxuICAgICAgICAgICAge25hbWU6ICdGbG9yaWRhJywgYWJicmV2aWF0aW9uOiAnRkwnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnR2VvcmdpYScsIGFiYnJldmlhdGlvbjogJ0dBJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0hhd2FpaScsIGFiYnJldmlhdGlvbjogJ0hJJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0lkYWhvJywgYWJicmV2aWF0aW9uOiAnSUQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSWxsaW5vaXMnLCBhYmJyZXZpYXRpb246ICdJTCd9LFxuICAgICAgICAgICAge25hbWU6ICdJbmRpYW5hJywgYWJicmV2aWF0aW9uOiAnSU4nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSW93YScsIGFiYnJldmlhdGlvbjogJ0lBJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0thbnNhcycsIGFiYnJldmlhdGlvbjogJ0tTJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0tlbnR1Y2t5JywgYWJicmV2aWF0aW9uOiAnS1knfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTG91aXNpYW5hJywgYWJicmV2aWF0aW9uOiAnTEEnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWFpbmUnLCBhYmJyZXZpYXRpb246ICdNRSd9LFxuICAgICAgICAgICAge25hbWU6ICdNYXJ5bGFuZCcsIGFiYnJldmlhdGlvbjogJ01EJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01hc3NhY2h1c2V0dHMnLCBhYmJyZXZpYXRpb246ICdNQSd9LFxuICAgICAgICAgICAge25hbWU6ICdNaWNoaWdhbicsIGFiYnJldmlhdGlvbjogJ01JJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01pbm5lc290YScsIGFiYnJldmlhdGlvbjogJ01OJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01pc3Npc3NpcHBpJywgYWJicmV2aWF0aW9uOiAnTVMnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWlzc291cmknLCBhYmJyZXZpYXRpb246ICdNTyd9LFxuICAgICAgICAgICAge25hbWU6ICdNb250YW5hJywgYWJicmV2aWF0aW9uOiAnTVQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTmVicmFza2EnLCBhYmJyZXZpYXRpb246ICdORSd9LFxuICAgICAgICAgICAge25hbWU6ICdOZXZhZGEnLCBhYmJyZXZpYXRpb246ICdOVid9LFxuICAgICAgICAgICAge25hbWU6ICdOZXcgSGFtcHNoaXJlJywgYWJicmV2aWF0aW9uOiAnTkgnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTmV3IEplcnNleScsIGFiYnJldmlhdGlvbjogJ05KJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldyBNZXhpY28nLCBhYmJyZXZpYXRpb246ICdOTSd9LFxuICAgICAgICAgICAge25hbWU6ICdOZXcgWW9yaycsIGFiYnJldmlhdGlvbjogJ05ZJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05vcnRoIENhcm9saW5hJywgYWJicmV2aWF0aW9uOiAnTkMnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTm9ydGggRGFrb3RhJywgYWJicmV2aWF0aW9uOiAnTkQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnT2hpbycsIGFiYnJldmlhdGlvbjogJ09IJ30sXG4gICAgICAgICAgICB7bmFtZTogJ09rbGFob21hJywgYWJicmV2aWF0aW9uOiAnT0snfSxcbiAgICAgICAgICAgIHtuYW1lOiAnT3JlZ29uJywgYWJicmV2aWF0aW9uOiAnT1InfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGVubnN5bHZhbmlhJywgYWJicmV2aWF0aW9uOiAnUEEnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUmhvZGUgSXNsYW5kJywgYWJicmV2aWF0aW9uOiAnUkknfSxcbiAgICAgICAgICAgIHtuYW1lOiAnU291dGggQ2Fyb2xpbmEnLCBhYmJyZXZpYXRpb246ICdTQyd9LFxuICAgICAgICAgICAge25hbWU6ICdTb3V0aCBEYWtvdGEnLCBhYmJyZXZpYXRpb246ICdTRCd9LFxuICAgICAgICAgICAge25hbWU6ICdUZW5uZXNzZWUnLCBhYmJyZXZpYXRpb246ICdUTid9LFxuICAgICAgICAgICAge25hbWU6ICdUZXhhcycsIGFiYnJldmlhdGlvbjogJ1RYJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1V0YWgnLCBhYmJyZXZpYXRpb246ICdVVCd9LFxuICAgICAgICAgICAge25hbWU6ICdWZXJtb250JywgYWJicmV2aWF0aW9uOiAnVlQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVmlyZ2luaWEnLCBhYmJyZXZpYXRpb246ICdWQSd9LFxuICAgICAgICAgICAge25hbWU6ICdXYXNoaW5ndG9uJywgYWJicmV2aWF0aW9uOiAnV0EnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnV2VzdCBWaXJnaW5pYScsIGFiYnJldmlhdGlvbjogJ1dWJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1dpc2NvbnNpbicsIGFiYnJldmlhdGlvbjogJ1dJJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1d5b21pbmcnLCBhYmJyZXZpYXRpb246ICdXWSd9XG4gICAgICAgIF0sXG5cbiAgICAgICAgdGVycml0b3JpZXM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnQW1lcmljYW4gU2Ftb2EnLCBhYmJyZXZpYXRpb246ICdBUyd9LFxuICAgICAgICAgICAge25hbWU6ICdGZWRlcmF0ZWQgU3RhdGVzIG9mIE1pY3JvbmVzaWEnLCBhYmJyZXZpYXRpb246ICdGTSd9LFxuICAgICAgICAgICAge25hbWU6ICdHdWFtJywgYWJicmV2aWF0aW9uOiAnR1UnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWFyc2hhbGwgSXNsYW5kcycsIGFiYnJldmlhdGlvbjogJ01IJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcycsIGFiYnJldmlhdGlvbjogJ01QJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1B1ZXJ0byBSaWNvJywgYWJicmV2aWF0aW9uOiAnUFInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVmlyZ2luIElzbGFuZHMsIFUuUy4nLCBhYmJyZXZpYXRpb246ICdWSSd9XG4gICAgICAgIF0sXG5cbiAgICAgICAgYXJtZWRfZm9yY2VzOiBbXG4gICAgICAgICAgICB7bmFtZTogJ0FybWVkIEZvcmNlcyBFdXJvcGUnLCBhYmJyZXZpYXRpb246ICdBRSd9LFxuICAgICAgICAgICAge25hbWU6ICdBcm1lZCBGb3JjZXMgUGFjaWZpYycsIGFiYnJldmlhdGlvbjogJ0FQJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0FybWVkIEZvcmNlcyB0aGUgQW1lcmljYXMnLCBhYmJyZXZpYXRpb246ICdBQSd9XG4gICAgICAgIF0sXG5cbiAgICAgICAgc3RyZWV0X3N1ZmZpeGVzOiBbXG4gICAgICAgICAgICB7bmFtZTogJ0F2ZW51ZScsIGFiYnJldmlhdGlvbjogJ0F2ZSd9LFxuICAgICAgICAgICAge25hbWU6ICdCb3VsZXZhcmQnLCBhYmJyZXZpYXRpb246ICdCbHZkJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0NlbnRlcicsIGFiYnJldmlhdGlvbjogJ0N0cid9LFxuICAgICAgICAgICAge25hbWU6ICdDaXJjbGUnLCBhYmJyZXZpYXRpb246ICdDaXInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQ291cnQnLCBhYmJyZXZpYXRpb246ICdDdCd9LFxuICAgICAgICAgICAge25hbWU6ICdEcml2ZScsIGFiYnJldmlhdGlvbjogJ0RyJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0V4dGVuc2lvbicsIGFiYnJldmlhdGlvbjogJ0V4dCd9LFxuICAgICAgICAgICAge25hbWU6ICdHbGVuJywgYWJicmV2aWF0aW9uOiAnR2xuJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0dyb3ZlJywgYWJicmV2aWF0aW9uOiAnR3J2J30sXG4gICAgICAgICAgICB7bmFtZTogJ0hlaWdodHMnLCBhYmJyZXZpYXRpb246ICdIdHMnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSGlnaHdheScsIGFiYnJldmlhdGlvbjogJ0h3eSd9LFxuICAgICAgICAgICAge25hbWU6ICdKdW5jdGlvbicsIGFiYnJldmlhdGlvbjogJ0pjdCd9LFxuICAgICAgICAgICAge25hbWU6ICdLZXknLCBhYmJyZXZpYXRpb246ICdLZXknfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTGFuZScsIGFiYnJldmlhdGlvbjogJ0xuJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0xvb3AnLCBhYmJyZXZpYXRpb246ICdMb29wJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01hbm9yJywgYWJicmV2aWF0aW9uOiAnTW5yJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01pbGwnLCBhYmJyZXZpYXRpb246ICdNaWxsJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1BhcmsnLCBhYmJyZXZpYXRpb246ICdQYXJrJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1Bhcmt3YXknLCBhYmJyZXZpYXRpb246ICdQa3d5J30sXG4gICAgICAgICAgICB7bmFtZTogJ1Bhc3MnLCBhYmJyZXZpYXRpb246ICdQYXNzJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1BhdGgnLCBhYmJyZXZpYXRpb246ICdQYXRoJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1Bpa2UnLCBhYmJyZXZpYXRpb246ICdQaWtlJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1BsYWNlJywgYWJicmV2aWF0aW9uOiAnUGwnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGxhemEnLCBhYmJyZXZpYXRpb246ICdQbHonfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUG9pbnQnLCBhYmJyZXZpYXRpb246ICdQdCd9LFxuICAgICAgICAgICAge25hbWU6ICdSaWRnZScsIGFiYnJldmlhdGlvbjogJ1JkZyd9LFxuICAgICAgICAgICAge25hbWU6ICdSaXZlcicsIGFiYnJldmlhdGlvbjogJ1Jpdid9LFxuICAgICAgICAgICAge25hbWU6ICdSb2FkJywgYWJicmV2aWF0aW9uOiAnUmQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnU3F1YXJlJywgYWJicmV2aWF0aW9uOiAnU3EnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnU3RyZWV0JywgYWJicmV2aWF0aW9uOiAnU3QnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVGVycmFjZScsIGFiYnJldmlhdGlvbjogJ1Rlcid9LFxuICAgICAgICAgICAge25hbWU6ICdUcmFpbCcsIGFiYnJldmlhdGlvbjogJ1RybCd9LFxuICAgICAgICAgICAge25hbWU6ICdUdXJucGlrZScsIGFiYnJldmlhdGlvbjogJ1Rwa2UnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVmlldycsIGFiYnJldmlhdGlvbjogJ1Z3J30sXG4gICAgICAgICAgICB7bmFtZTogJ1dheScsIGFiYnJldmlhdGlvbjogJ1dheSd9XG4gICAgICAgIF0sXG5cbiAgICAgICAgbW9udGhzOiBbXG4gICAgICAgICAgICB7bmFtZTogJ0phbnVhcnknLCBzaG9ydF9uYW1lOiAnSmFuJywgbnVtZXJpYzogJzAxJywgZGF5czogMzF9LFxuICAgICAgICAgICAgLy8gTm90IG1lc3Npbmcgd2l0aCBsZWFwIHllYXJzLi4uXG4gICAgICAgICAgICB7bmFtZTogJ0ZlYnJ1YXJ5Jywgc2hvcnRfbmFtZTogJ0ZlYicsIG51bWVyaWM6ICcwMicsIGRheXM6IDI4fSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWFyY2gnLCBzaG9ydF9uYW1lOiAnTWFyJywgbnVtZXJpYzogJzAzJywgZGF5czogMzF9LFxuICAgICAgICAgICAge25hbWU6ICdBcHJpbCcsIHNob3J0X25hbWU6ICdBcHInLCBudW1lcmljOiAnMDQnLCBkYXlzOiAzMH0sXG4gICAgICAgICAgICB7bmFtZTogJ01heScsIHNob3J0X25hbWU6ICdNYXknLCBudW1lcmljOiAnMDUnLCBkYXlzOiAzMX0sXG4gICAgICAgICAgICB7bmFtZTogJ0p1bmUnLCBzaG9ydF9uYW1lOiAnSnVuJywgbnVtZXJpYzogJzA2JywgZGF5czogMzB9LFxuICAgICAgICAgICAge25hbWU6ICdKdWx5Jywgc2hvcnRfbmFtZTogJ0p1bCcsIG51bWVyaWM6ICcwNycsIGRheXM6IDMxfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQXVndXN0Jywgc2hvcnRfbmFtZTogJ0F1ZycsIG51bWVyaWM6ICcwOCcsIGRheXM6IDMxfSxcbiAgICAgICAgICAgIHtuYW1lOiAnU2VwdGVtYmVyJywgc2hvcnRfbmFtZTogJ1NlcCcsIG51bWVyaWM6ICcwOScsIGRheXM6IDMwfSxcbiAgICAgICAgICAgIHtuYW1lOiAnT2N0b2JlcicsIHNob3J0X25hbWU6ICdPY3QnLCBudW1lcmljOiAnMTAnLCBkYXlzOiAzMX0sXG4gICAgICAgICAgICB7bmFtZTogJ05vdmVtYmVyJywgc2hvcnRfbmFtZTogJ05vdicsIG51bWVyaWM6ICcxMScsIGRheXM6IDMwfSxcbiAgICAgICAgICAgIHtuYW1lOiAnRGVjZW1iZXInLCBzaG9ydF9uYW1lOiAnRGVjJywgbnVtZXJpYzogJzEyJywgZGF5czogMzF9XG4gICAgICAgIF0sXG5cbiAgICAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYW5rX2NhcmRfbnVtYmVyI0lzc3Vlcl9pZGVudGlmaWNhdGlvbl9udW1iZXJfLjI4SUlOLjI5XG4gICAgICAgIGNjX3R5cGVzOiBbXG4gICAgICAgICAgICB7bmFtZTogXCJBbWVyaWNhbiBFeHByZXNzXCIsIHNob3J0X25hbWU6ICdhbWV4JywgcHJlZml4OiAnMzQnLCBsZW5ndGg6IDE1fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkJhbmtjYXJkXCIsIHNob3J0X25hbWU6ICdiYW5rY2FyZCcsIHByZWZpeDogJzU2MTAnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkNoaW5hIFVuaW9uUGF5XCIsIHNob3J0X25hbWU6ICdjaGluYXVuaW9uJywgcHJlZml4OiAnNjInLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkRpbmVycyBDbHViIENhcnRlIEJsYW5jaGVcIiwgc2hvcnRfbmFtZTogJ2RjY2FydGUnLCBwcmVmaXg6ICczMDAnLCBsZW5ndGg6IDE0fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkRpbmVycyBDbHViIGVuUm91dGVcIiwgc2hvcnRfbmFtZTogJ2RjZW5yb3V0ZScsIHByZWZpeDogJzIwMTQnLCBsZW5ndGg6IDE1fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkRpbmVycyBDbHViIEludGVybmF0aW9uYWxcIiwgc2hvcnRfbmFtZTogJ2RjaW50bCcsIHByZWZpeDogJzM2JywgbGVuZ3RoOiAxNH0sXG4gICAgICAgICAgICB7bmFtZTogXCJEaW5lcnMgQ2x1YiBVbml0ZWQgU3RhdGVzICYgQ2FuYWRhXCIsIHNob3J0X25hbWU6ICdkY3VzYycsIHByZWZpeDogJzU0JywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJEaXNjb3ZlciBDYXJkXCIsIHNob3J0X25hbWU6ICdkaXNjb3ZlcicsIHByZWZpeDogJzYwMTEnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkluc3RhUGF5bWVudFwiLCBzaG9ydF9uYW1lOiAnaW5zdGFwYXknLCBwcmVmaXg6ICc2MzcnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkpDQlwiLCBzaG9ydF9uYW1lOiAnamNiJywgcHJlZml4OiAnMzUyOCcsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiTGFzZXJcIiwgc2hvcnRfbmFtZTogJ2xhc2VyJywgcHJlZml4OiAnNjMwNCcsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiTWFlc3Ryb1wiLCBzaG9ydF9uYW1lOiAnbWFlc3RybycsIHByZWZpeDogJzUwMTgnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIk1hc3RlcmNhcmRcIiwgc2hvcnRfbmFtZTogJ21jJywgcHJlZml4OiAnNTEnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIlNvbG9cIiwgc2hvcnRfbmFtZTogJ3NvbG8nLCBwcmVmaXg6ICc2MzM0JywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJTd2l0Y2hcIiwgc2hvcnRfbmFtZTogJ3N3aXRjaCcsIHByZWZpeDogJzQ5MDMnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIlZpc2FcIiwgc2hvcnRfbmFtZTogJ3Zpc2EnLCBwcmVmaXg6ICc0JywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJWaXNhIEVsZWN0cm9uXCIsIHNob3J0X25hbWU6ICdlbGVjdHJvbicsIHByZWZpeDogJzQwMjYnLCBsZW5ndGg6IDE2fVxuICAgICAgICBdLFxuXG4gICAgICAgIC8vcmV0dXJuIGFsbCB3b3JsZCBjdXJyZW5jeSBieSBJU08gNDIxN1xuICAgICAgICBjdXJyZW5jeV90eXBlczogW1xuICAgICAgICAgICAgeydjb2RlJyA6ICdBRUQnLCAnbmFtZScgOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMgRGlyaGFtJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FGTicsICduYW1lJyA6ICdBZmdoYW5pc3RhbiBBZmdoYW5pJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FMTCcsICduYW1lJyA6ICdBbGJhbmlhIExlayd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdBTUQnLCAnbmFtZScgOiAnQXJtZW5pYSBEcmFtJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FORycsICduYW1lJyA6ICdOZXRoZXJsYW5kcyBBbnRpbGxlcyBHdWlsZGVyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FPQScsICduYW1lJyA6ICdBbmdvbGEgS3dhbnphJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FSUycsICduYW1lJyA6ICdBcmdlbnRpbmEgUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdBVUQnLCAnbmFtZScgOiAnQXVzdHJhbGlhIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdBV0cnLCAnbmFtZScgOiAnQXJ1YmEgR3VpbGRlcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdBWk4nLCAnbmFtZScgOiAnQXplcmJhaWphbiBOZXcgTWFuYXQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQkFNJywgJ25hbWUnIDogJ0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEgQ29udmVydGlibGUgTWFya2EnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQkJEJywgJ25hbWUnIDogJ0JhcmJhZG9zIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCRFQnLCAnbmFtZScgOiAnQmFuZ2xhZGVzaCBUYWthJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JHTicsICduYW1lJyA6ICdCdWxnYXJpYSBMZXYnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQkhEJywgJ25hbWUnIDogJ0JhaHJhaW4gRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQklGJywgJ25hbWUnIDogJ0J1cnVuZGkgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQk1EJywgJ25hbWUnIDogJ0Jlcm11ZGEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JORCcsICduYW1lJyA6ICdCcnVuZWkgRGFydXNzYWxhbSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQk9CJywgJ25hbWUnIDogJ0JvbGl2aWEgQm9saXZpYW5vJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JSTCcsICduYW1lJyA6ICdCcmF6aWwgUmVhbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCU0QnLCAnbmFtZScgOiAnQmFoYW1hcyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQlROJywgJ25hbWUnIDogJ0JodXRhbiBOZ3VsdHJ1bSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCV1AnLCAnbmFtZScgOiAnQm90c3dhbmEgUHVsYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCWVInLCAnbmFtZScgOiAnQmVsYXJ1cyBSdWJsZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCWkQnLCAnbmFtZScgOiAnQmVsaXplIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDQUQnLCAnbmFtZScgOiAnQ2FuYWRhIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDREYnLCAnbmFtZScgOiAnQ29uZ28vS2luc2hhc2EgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ0hGJywgJ25hbWUnIDogJ1N3aXR6ZXJsYW5kIEZyYW5jJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NMUCcsICduYW1lJyA6ICdDaGlsZSBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NOWScsICduYW1lJyA6ICdDaGluYSBZdWFuIFJlbm1pbmJpJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NPUCcsICduYW1lJyA6ICdDb2xvbWJpYSBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NSQycsICduYW1lJyA6ICdDb3N0YSBSaWNhIENvbG9uJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NVQycsICduYW1lJyA6ICdDdWJhIENvbnZlcnRpYmxlIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ1VQJywgJ25hbWUnIDogJ0N1YmEgUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDVkUnLCAnbmFtZScgOiAnQ2FwZSBWZXJkZSBFc2N1ZG8nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ1pLJywgJ25hbWUnIDogJ0N6ZWNoIFJlcHVibGljIEtvcnVuYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdESkYnLCAnbmFtZScgOiAnRGppYm91dGkgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnREtLJywgJ25hbWUnIDogJ0Rlbm1hcmsgS3JvbmUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRE9QJywgJ25hbWUnIDogJ0RvbWluaWNhbiBSZXB1YmxpYyBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0RaRCcsICduYW1lJyA6ICdBbGdlcmlhIERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0VHUCcsICduYW1lJyA6ICdFZ3lwdCBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdFUk4nLCAnbmFtZScgOiAnRXJpdHJlYSBOYWtmYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdFVEInLCAnbmFtZScgOiAnRXRoaW9waWEgQmlycid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdFVVInLCAnbmFtZScgOiAnRXVybyBNZW1iZXIgQ291bnRyaWVzJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0ZKRCcsICduYW1lJyA6ICdGaWppIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdGS1AnLCAnbmFtZScgOiAnRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dCUCcsICduYW1lJyA6ICdVbml0ZWQgS2luZ2RvbSBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHRUwnLCAnbmFtZScgOiAnR2VvcmdpYSBMYXJpJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dHUCcsICduYW1lJyA6ICdHdWVybnNleSBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHSFMnLCAnbmFtZScgOiAnR2hhbmEgQ2VkaSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHSVAnLCAnbmFtZScgOiAnR2licmFsdGFyIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dNRCcsICduYW1lJyA6ICdHYW1iaWEgRGFsYXNpJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dORicsICduYW1lJyA6ICdHdWluZWEgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR1RRJywgJ25hbWUnIDogJ0d1YXRlbWFsYSBRdWV0emFsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dZRCcsICduYW1lJyA6ICdHdXlhbmEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0hLRCcsICduYW1lJyA6ICdIb25nIEtvbmcgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0hOTCcsICduYW1lJyA6ICdIb25kdXJhcyBMZW1waXJhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0hSSycsICduYW1lJyA6ICdDcm9hdGlhIEt1bmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSFRHJywgJ25hbWUnIDogJ0hhaXRpIEdvdXJkZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdIVUYnLCAnbmFtZScgOiAnSHVuZ2FyeSBGb3JpbnQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSURSJywgJ25hbWUnIDogJ0luZG9uZXNpYSBSdXBpYWgnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSUxTJywgJ25hbWUnIDogJ0lzcmFlbCBTaGVrZWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSU1QJywgJ25hbWUnIDogJ0lzbGUgb2YgTWFuIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0lOUicsICduYW1lJyA6ICdJbmRpYSBSdXBlZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJUUQnLCAnbmFtZScgOiAnSXJhcSBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJUlInLCAnbmFtZScgOiAnSXJhbiBSaWFsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0lTSycsICduYW1lJyA6ICdJY2VsYW5kIEtyb25hJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0pFUCcsICduYW1lJyA6ICdKZXJzZXkgUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSk1EJywgJ25hbWUnIDogJ0phbWFpY2EgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0pPRCcsICduYW1lJyA6ICdKb3JkYW4gRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSlBZJywgJ25hbWUnIDogJ0phcGFuIFllbid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLRVMnLCAnbmFtZScgOiAnS2VueWEgU2hpbGxpbmcnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS0dTJywgJ25hbWUnIDogJ0t5cmd5enN0YW4gU29tJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tIUicsICduYW1lJyA6ICdDYW1ib2RpYSBSaWVsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tNRicsICduYW1lJyA6ICdDb21vcm9zIEZyYW5jJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tQVycsICduYW1lJyA6ICdLb3JlYSAoTm9ydGgpIFdvbid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLUlcnLCAnbmFtZScgOiAnS29yZWEgKFNvdXRoKSBXb24nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS1dEJywgJ25hbWUnIDogJ0t1d2FpdCBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLWUQnLCAnbmFtZScgOiAnQ2F5bWFuIElzbGFuZHMgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0taVCcsICduYW1lJyA6ICdLYXpha2hzdGFuIFRlbmdlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xBSycsICduYW1lJyA6ICdMYW9zIEtpcCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdMQlAnLCAnbmFtZScgOiAnTGViYW5vbiBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdMS1InLCAnbmFtZScgOiAnU3JpIExhbmthIFJ1cGVlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xSRCcsICduYW1lJyA6ICdMaWJlcmlhIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdMU0wnLCAnbmFtZScgOiAnTGVzb3RobyBMb3RpJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xUTCcsICduYW1lJyA6ICdMaXRodWFuaWEgTGl0YXMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTFlEJywgJ25hbWUnIDogJ0xpYnlhIERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01BRCcsICduYW1lJyA6ICdNb3JvY2NvIERpcmhhbSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNREwnLCAnbmFtZScgOiAnTW9sZG92YSBMZXUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTUdBJywgJ25hbWUnIDogJ01hZGFnYXNjYXIgQXJpYXJ5J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01LRCcsICduYW1lJyA6ICdNYWNlZG9uaWEgRGVuYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTU1LJywgJ25hbWUnIDogJ015YW5tYXIgKEJ1cm1hKSBLeWF0J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01OVCcsICduYW1lJyA6ICdNb25nb2xpYSBUdWdocmlrJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01PUCcsICduYW1lJyA6ICdNYWNhdSBQYXRhY2EnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVJPJywgJ25hbWUnIDogJ01hdXJpdGFuaWEgT3VndWl5YSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNVVInLCAnbmFtZScgOiAnTWF1cml0aXVzIFJ1cGVlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01WUicsICduYW1lJyA6ICdNYWxkaXZlcyAoTWFsZGl2ZSBJc2xhbmRzKSBSdWZpeWFhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01XSycsICduYW1lJyA6ICdNYWxhd2kgS3dhY2hhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01YTicsICduYW1lJyA6ICdNZXhpY28gUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNWVInLCAnbmFtZScgOiAnTWFsYXlzaWEgUmluZ2dpdCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNWk4nLCAnbmFtZScgOiAnTW96YW1iaXF1ZSBNZXRpY2FsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ05BRCcsICduYW1lJyA6ICdOYW1pYmlhIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdOR04nLCAnbmFtZScgOiAnTmlnZXJpYSBOYWlyYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdOSU8nLCAnbmFtZScgOiAnTmljYXJhZ3VhIENvcmRvYmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTk9LJywgJ25hbWUnIDogJ05vcndheSBLcm9uZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdOUFInLCAnbmFtZScgOiAnTmVwYWwgUnVwZWUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTlpEJywgJ25hbWUnIDogJ05ldyBaZWFsYW5kIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdPTVInLCAnbmFtZScgOiAnT21hbiBSaWFsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1BBQicsICduYW1lJyA6ICdQYW5hbWEgQmFsYm9hJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1BFTicsICduYW1lJyA6ICdQZXJ1IE51ZXZvIFNvbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdQR0snLCAnbmFtZScgOiAnUGFwdWEgTmV3IEd1aW5lYSBLaW5hJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1BIUCcsICduYW1lJyA6ICdQaGlsaXBwaW5lcyBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1BLUicsICduYW1lJyA6ICdQYWtpc3RhbiBSdXBlZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdQTE4nLCAnbmFtZScgOiAnUG9sYW5kIFpsb3R5J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1BZRycsICduYW1lJyA6ICdQYXJhZ3VheSBHdWFyYW5pJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1FBUicsICduYW1lJyA6ICdRYXRhciBSaXlhbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdST04nLCAnbmFtZScgOiAnUm9tYW5pYSBOZXcgTGV1J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1JTRCcsICduYW1lJyA6ICdTZXJiaWEgRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUlVCJywgJ25hbWUnIDogJ1J1c3NpYSBSdWJsZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdSV0YnLCAnbmFtZScgOiAnUndhbmRhIEZyYW5jJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NBUicsICduYW1lJyA6ICdTYXVkaSBBcmFiaWEgUml5YWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0JEJywgJ25hbWUnIDogJ1NvbG9tb24gSXNsYW5kcyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0NSJywgJ25hbWUnIDogJ1NleWNoZWxsZXMgUnVwZWUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0RHJywgJ25hbWUnIDogJ1N1ZGFuIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NFSycsICduYW1lJyA6ICdTd2VkZW4gS3JvbmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0dEJywgJ25hbWUnIDogJ1NpbmdhcG9yZSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0hQJywgJ25hbWUnIDogJ1NhaW50IEhlbGVuYSBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTTEwnLCAnbmFtZScgOiAnU2llcnJhIExlb25lIExlb25lJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NPUycsICduYW1lJyA6ICdTb21hbGlhIFNoaWxsaW5nJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NQTCcsICduYW1lJyA6ICdTZWJvcmdhIEx1aWdpbm8nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU1JEJywgJ25hbWUnIDogJ1N1cmluYW1lIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTVEQnLCAnbmFtZScgOiAnU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlIERvYnJhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NWQycsICduYW1lJyA6ICdFbCBTYWx2YWRvciBDb2xvbid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTWVAnLCAnbmFtZScgOiAnU3lyaWEgUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU1pMJywgJ25hbWUnIDogJ1N3YXppbGFuZCBMaWxhbmdlbmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVEhCJywgJ25hbWUnIDogJ1RoYWlsYW5kIEJhaHQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVEpTJywgJ25hbWUnIDogJ1RhamlraXN0YW4gU29tb25pJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RNVCcsICduYW1lJyA6ICdUdXJrbWVuaXN0YW4gTWFuYXQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVE5EJywgJ25hbWUnIDogJ1R1bmlzaWEgRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVE9QJywgJ25hbWUnIDogJ1RvbmdhIFBhXFwnYW5nYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUUlknLCAnbmFtZScgOiAnVHVya2V5IExpcmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVFREJywgJ25hbWUnIDogJ1RyaW5pZGFkIGFuZCBUb2JhZ28gRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RWRCcsICduYW1lJyA6ICdUdXZhbHUgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RXRCcsICduYW1lJyA6ICdUYWl3YW4gTmV3IERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUWlMnLCAnbmFtZScgOiAnVGFuemFuaWEgU2hpbGxpbmcnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVUFIJywgJ25hbWUnIDogJ1VrcmFpbmUgSHJ5dm5pYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdVR1gnLCAnbmFtZScgOiAnVWdhbmRhIFNoaWxsaW5nJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1VTRCcsICduYW1lJyA6ICdVbml0ZWQgU3RhdGVzIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdVWVUnLCAnbmFtZScgOiAnVXJ1Z3VheSBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1VaUycsICduYW1lJyA6ICdVemJla2lzdGFuIFNvbSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdWRUYnLCAnbmFtZScgOiAnVmVuZXp1ZWxhIEJvbGl2YXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVk5EJywgJ25hbWUnIDogJ1ZpZXQgTmFtIERvbmcnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVlVWJywgJ25hbWUnIDogJ1ZhbnVhdHUgVmF0dSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdXU1QnLCAnbmFtZScgOiAnU2Ftb2EgVGFsYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdYQUYnLCAnbmFtZScgOiAnQ29tbXVuYXV0w6kgRmluYW5jacOocmUgQWZyaWNhaW5lIChCRUFDKSBDRkEgRnJhbmMgQkVBQyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdYQ0QnLCAnbmFtZScgOiAnRWFzdCBDYXJpYmJlYW4gRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1hEUicsICduYW1lJyA6ICdJbnRlcm5hdGlvbmFsIE1vbmV0YXJ5IEZ1bmQgKElNRikgU3BlY2lhbCBEcmF3aW5nIFJpZ2h0cyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdYT0YnLCAnbmFtZScgOiAnQ29tbXVuYXV0w6kgRmluYW5jacOocmUgQWZyaWNhaW5lIChCQ0VBTykgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWFBGJywgJ25hbWUnIDogJ0NvbXB0b2lycyBGcmFuw6dhaXMgZHUgUGFjaWZpcXVlIChDRlApIEZyYW5jJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1lFUicsICduYW1lJyA6ICdZZW1lbiBSaWFsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1pBUicsICduYW1lJyA6ICdTb3V0aCBBZnJpY2EgUmFuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdaTVcnLCAnbmFtZScgOiAnWmFtYmlhIEt3YWNoYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdaV0QnLCAnbmFtZScgOiAnWmltYmFid2UgRG9sbGFyJ31cbiAgICAgICAgXVxuICAgIH07XG5cbiAgICB2YXIgb19oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gICAgdmFyIG9fa2V5cyA9IChPYmplY3Qua2V5cyB8fCBmdW5jdGlvbihvYmopIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKG9faGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBfY29weU9iamVjdChzb3VyY2UsIHRhcmdldCkge1xuICAgICAgdmFyIGtleXMgPSBvX2tleXMoc291cmNlKTtcbiAgICAgIHZhciBrZXk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XSB8fCB0YXJnZXRba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY29weUFycmF5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNvdXJjZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdGFyZ2V0W2ldID0gc291cmNlW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBfdGFyZ2V0KSB7XG4gICAgICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShzb3VyY2UpO1xuICAgICAgICB2YXIgdGFyZ2V0ID0gX3RhcmdldCB8fCAoaXNBcnJheSA/IG5ldyBBcnJheShzb3VyY2UubGVuZ3RoKSA6IHt9KTtcblxuICAgICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICAgIF9jb3B5QXJyYXkoc291cmNlLCB0YXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9jb3B5T2JqZWN0KHNvdXJjZSwgdGFyZ2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgZGF0YSBiYXNlZCBvbiBrZXkqKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBjb3B5T2JqZWN0KGRhdGFbbmFtZV0pO1xuICAgIH07XG5cbiAgICAvLyBNYWMgQWRkcmVzc1xuICAgIENoYW5jZS5wcm90b3R5cGUubWFjX2FkZHJlc3MgPSBmdW5jdGlvbihvcHRpb25zKXtcbiAgICAgICAgLy8gdHlwaWNhbGx5IG1hYyBhZGRyZXNzZXMgYXJlIHNlcGFyYXRlZCBieSBcIjpcIlxuICAgICAgICAvLyBob3dldmVyIHRoZXkgY2FuIGFsc28gYmUgc2VwYXJhdGVkIGJ5IFwiLVwiXG4gICAgICAgIC8vIHRoZSBuZXR3b3JrIHZhcmlhbnQgdXNlcyBhIGRvdCBldmVyeSBmb3VydGggYnl0ZVxuXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYoIW9wdGlvbnMuc2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNlcGFyYXRvciA9ICBvcHRpb25zLm5ldHdvcmtWZXJzaW9uID8gXCIuXCIgOiBcIjpcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtYWNfcG9vbD1cIkFCQ0RFRjEyMzQ1Njc4OTBcIixcbiAgICAgICAgICAgIG1hYyA9IFwiXCI7XG4gICAgICAgIGlmKCFvcHRpb25zLm5ldHdvcmtWZXJzaW9uKSB7XG4gICAgICAgICAgICBtYWMgPSB0aGlzLm4odGhpcy5zdHJpbmcsIDYsIHsgcG9vbDogbWFjX3Bvb2wsIGxlbmd0aDoyIH0pLmpvaW4ob3B0aW9ucy5zZXBhcmF0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFjID0gdGhpcy5uKHRoaXMuc3RyaW5nLCAzLCB7IHBvb2w6IG1hY19wb29sLCBsZW5ndGg6NCB9KS5qb2luKG9wdGlvbnMuc2VwYXJhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYWM7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubm9ybWFsID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttZWFuIDogMCwgZGV2IDogMX0pO1xuXG4gICAgICAgIC8vIFRoZSBNYXJzYWdsaWEgUG9sYXIgbWV0aG9kXG4gICAgICAgIHZhciBzLCB1LCB2LCBub3JtLFxuICAgICAgICAgICAgbWVhbiA9IG9wdGlvbnMubWVhbixcbiAgICAgICAgICAgIGRldiA9IG9wdGlvbnMuZGV2O1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8vIFUgYW5kIFYgYXJlIGZyb20gdGhlIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9uICgtMSwgMSlcbiAgICAgICAgICAgIHUgPSB0aGlzLnJhbmRvbSgpICogMiAtIDE7XG4gICAgICAgICAgICB2ID0gdGhpcy5yYW5kb20oKSAqIDIgLSAxO1xuXG4gICAgICAgICAgICBzID0gdSAqIHUgKyB2ICogdjtcbiAgICAgICAgfSB3aGlsZSAocyA+PSAxKTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBzdGFuZGFyZCBub3JtYWwgdmFyaWF0ZVxuICAgICAgICBub3JtID0gdSAqIE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHMpIC8gcyk7XG5cbiAgICAgICAgLy8gU2hhcGUgYW5kIHNjYWxlXG4gICAgICAgIHJldHVybiBkZXYgKiBub3JtICsgbWVhbjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5yYWRpbyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIC8vIEluaXRpYWwgTGV0dGVyIChUeXBpY2FsbHkgRGVzaWduYXRlZCBieSBTaWRlIG9mIE1pc3Npc3NpcHBpIFJpdmVyKVxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge3NpZGUgOiBcIj9cIn0pO1xuICAgICAgICB2YXIgZmwgPSBcIlwiO1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuc2lkZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgXCJlYXN0XCI6XG4gICAgICAgIGNhc2UgXCJlXCI6XG4gICAgICAgICAgICBmbCA9IFwiV1wiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ3ZXN0XCI6XG4gICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgICBmbCA9IFwiS1wiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBmbCA9IHRoaXMuY2hhcmFjdGVyKHtwb29sOiBcIktXXCJ9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZsICsgdGhpcy5jaGFyYWN0ZXIoe2FscGhhOiB0cnVlLCBjYXNpbmc6IFwidXBwZXJcIn0pICtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJhY3Rlcih7YWxwaGE6IHRydWUsIGNhc2luZzogXCJ1cHBlclwifSkgK1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcmFjdGVyKHthbHBoYTogdHJ1ZSwgY2FzaW5nOiBcInVwcGVyXCJ9KTtcbiAgICB9O1xuXG4gICAgLy8gU2V0IHRoZSBkYXRhIGFzIGtleSBhbmQgZGF0YSBvciB0aGUgZGF0YSBtYXBcbiAgICBDaGFuY2UucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBkYXRhW25hbWVdID0gdmFsdWVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGNvcHlPYmplY3QobmFtZSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS50diA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhZGlvKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICAvLyBJRCBudW1iZXIgZm9yIEJyYXppbCBjb21wYW5pZXNcbiAgICBDaGFuY2UucHJvdG90eXBlLmNucGogPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5uKHRoaXMubmF0dXJhbCwgOCwgeyBtYXg6IDkgfSk7XG4gICAgICAgIHZhciBkMSA9IDIrbls3XSo2K25bNl0qNytuWzVdKjgrbls0XSo5K25bM10qMituWzJdKjMrblsxXSo0K25bMF0qNTtcbiAgICAgICAgZDEgPSAxMSAtIChkMSAlIDExKTtcbiAgICAgICAgaWYgKGQxPj0xMCl7XG4gICAgICAgICAgICBkMSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGQyID0gZDEqMiszK25bN10qNytuWzZdKjgrbls1XSo5K25bNF0qMituWzNdKjMrblsyXSo0K25bMV0qNStuWzBdKjY7XG4gICAgICAgIGQyID0gMTEgLSAoZDIgJSAxMSk7XG4gICAgICAgIGlmIChkMj49MTApe1xuICAgICAgICAgICAgZDIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJytuWzBdK25bMV0rJy4nK25bMl0rblszXStuWzRdKycuJytuWzVdK25bNl0rbls3XSsnLzAwMDEtJytkMStkMjtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIE1pc2NlbGxhbmVvdXMgLS1cblxuICAgIENoYW5jZS5wcm90b3R5cGUubWVyc2VubmVfdHdpc3RlciA9IGZ1bmN0aW9uIChzZWVkKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWVyc2VubmVUd2lzdGVyKHNlZWQpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmJsdWVpbXBfbWQ1ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsdWVJbXBNRDUoKTtcbiAgICB9O1xuXG4gICAgLy8gTWVyc2VubmUgVHdpc3RlciBmcm9tIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2JhbmtzZWFuLzMwMDQ5NFxuICAgIHZhciBNZXJzZW5uZVR3aXN0ZXIgPSBmdW5jdGlvbiAoc2VlZCkge1xuICAgICAgICBpZiAoc2VlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBrZXB0IHJhbmRvbSBudW1iZXIgc2FtZSBzaXplIGFzIHRpbWUgdXNlZCBwcmV2aW91c2x5IHRvIGVuc3VyZSBubyB1bmV4cGVjdGVkIHJlc3VsdHMgZG93bnN0cmVhbVxuICAgICAgICAgICAgc2VlZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpNYXRoLnBvdygxMCwxMykpO1xuICAgICAgICB9XG4gICAgICAgIC8qIFBlcmlvZCBwYXJhbWV0ZXJzICovXG4gICAgICAgIHRoaXMuTiA9IDYyNDtcbiAgICAgICAgdGhpcy5NID0gMzk3O1xuICAgICAgICB0aGlzLk1BVFJJWF9BID0gMHg5OTA4YjBkZjsgICAvKiBjb25zdGFudCB2ZWN0b3IgYSAqL1xuICAgICAgICB0aGlzLlVQUEVSX01BU0sgPSAweDgwMDAwMDAwOyAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovXG4gICAgICAgIHRoaXMuTE9XRVJfTUFTSyA9IDB4N2ZmZmZmZmY7IC8qIGxlYXN0IHNpZ25pZmljYW50IHIgYml0cyAqL1xuXG4gICAgICAgIHRoaXMubXQgPSBuZXcgQXJyYXkodGhpcy5OKTsgLyogdGhlIGFycmF5IGZvciB0aGUgc3RhdGUgdmVjdG9yICovXG4gICAgICAgIHRoaXMubXRpID0gdGhpcy5OICsgMTsgLyogbXRpPT1OICsgMSBtZWFucyBtdFtOXSBpcyBub3QgaW5pdGlhbGl6ZWQgKi9cblxuICAgICAgICB0aGlzLmluaXRfZ2VucmFuZChzZWVkKTtcbiAgICB9O1xuXG4gICAgLyogaW5pdGlhbGl6ZXMgbXRbTl0gd2l0aCBhIHNlZWQgKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmluaXRfZ2VucmFuZCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHRoaXMubXRbMF0gPSBzID4+PiAwO1xuICAgICAgICBmb3IgKHRoaXMubXRpID0gMTsgdGhpcy5tdGkgPCB0aGlzLk47IHRoaXMubXRpKyspIHtcbiAgICAgICAgICAgIHMgPSB0aGlzLm10W3RoaXMubXRpIC0gMV0gXiAodGhpcy5tdFt0aGlzLm10aSAtIDFdID4+PiAzMCk7XG4gICAgICAgICAgICB0aGlzLm10W3RoaXMubXRpXSA9ICgoKCgocyAmIDB4ZmZmZjAwMDApID4+PiAxNikgKiAxODEyNDMzMjUzKSA8PCAxNikgKyAocyAmIDB4MDAwMGZmZmYpICogMTgxMjQzMzI1MykgKyB0aGlzLm10aTtcbiAgICAgICAgICAgIC8qIFNlZSBLbnV0aCBUQU9DUCBWb2wyLiAzcmQgRWQuIFAuMTA2IGZvciBtdWx0aXBsaWVyLiAqL1xuICAgICAgICAgICAgLyogSW4gdGhlIHByZXZpb3VzIHZlcnNpb25zLCBNU0JzIG9mIHRoZSBzZWVkIGFmZmVjdCAgICovXG4gICAgICAgICAgICAvKiBvbmx5IE1TQnMgb2YgdGhlIGFycmF5IG10W10uICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC8qIDIwMDIvMDEvMDkgbW9kaWZpZWQgYnkgTWFrb3RvIE1hdHN1bW90byAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5tdFt0aGlzLm10aV0gPj4+PSAwO1xuICAgICAgICAgICAgLyogZm9yID4zMiBiaXQgbWFjaGluZXMgKi9cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKiBpbml0aWFsaXplIGJ5IGFuIGFycmF5IHdpdGggYXJyYXktbGVuZ3RoICovXG4gICAgLyogaW5pdF9rZXkgaXMgdGhlIGFycmF5IGZvciBpbml0aWFsaXppbmcga2V5cyAqL1xuICAgIC8qIGtleV9sZW5ndGggaXMgaXRzIGxlbmd0aCAqL1xuICAgIC8qIHNsaWdodCBjaGFuZ2UgZm9yIEMrKywgMjAwNC8yLzI2ICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5pbml0X2J5X2FycmF5ID0gZnVuY3Rpb24gKGluaXRfa2V5LCBrZXlfbGVuZ3RoKSB7XG4gICAgICAgIHZhciBpID0gMSwgaiA9IDAsIGssIHM7XG4gICAgICAgIHRoaXMuaW5pdF9nZW5yYW5kKDE5NjUwMjE4KTtcbiAgICAgICAgayA9ICh0aGlzLk4gPiBrZXlfbGVuZ3RoID8gdGhpcy5OIDoga2V5X2xlbmd0aCk7XG4gICAgICAgIGZvciAoOyBrOyBrLS0pIHtcbiAgICAgICAgICAgIHMgPSB0aGlzLm10W2kgLSAxXSBeICh0aGlzLm10W2kgLSAxXSA+Pj4gMzApO1xuICAgICAgICAgICAgdGhpcy5tdFtpXSA9ICh0aGlzLm10W2ldIF4gKCgoKChzICYgMHhmZmZmMDAwMCkgPj4+IDE2KSAqIDE2NjQ1MjUpIDw8IDE2KSArICgocyAmIDB4MDAwMGZmZmYpICogMTY2NDUyNSkpKSArIGluaXRfa2V5W2pdICsgajsgLyogbm9uIGxpbmVhciAqL1xuICAgICAgICAgICAgdGhpcy5tdFtpXSA+Pj49IDA7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovXG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgICBpZiAoaSA+PSB0aGlzLk4pIHsgdGhpcy5tdFswXSA9IHRoaXMubXRbdGhpcy5OIC0gMV07IGkgPSAxOyB9XG4gICAgICAgICAgICBpZiAoaiA+PSBrZXlfbGVuZ3RoKSB7IGogPSAwOyB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChrID0gdGhpcy5OIC0gMTsgazsgay0tKSB7XG4gICAgICAgICAgICBzID0gdGhpcy5tdFtpIC0gMV0gXiAodGhpcy5tdFtpIC0gMV0gPj4+IDMwKTtcbiAgICAgICAgICAgIHRoaXMubXRbaV0gPSAodGhpcy5tdFtpXSBeICgoKCgocyAmIDB4ZmZmZjAwMDApID4+PiAxNikgKiAxNTY2MDgzOTQxKSA8PCAxNikgKyAocyAmIDB4MDAwMGZmZmYpICogMTU2NjA4Mzk0MSkpIC0gaTsgLyogbm9uIGxpbmVhciAqL1xuICAgICAgICAgICAgdGhpcy5tdFtpXSA+Pj49IDA7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovXG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBpZiAoaSA+PSB0aGlzLk4pIHsgdGhpcy5tdFswXSA9IHRoaXMubXRbdGhpcy5OIC0gMV07IGkgPSAxOyB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm10WzBdID0gMHg4MDAwMDAwMDsgLyogTVNCIGlzIDE7IGFzc3VyaW5nIG5vbi16ZXJvIGluaXRpYWwgYXJyYXkgKi9cbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwweGZmZmZmZmZmXS1pbnRlcnZhbCAqL1xuICAgIE1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuZ2VucmFuZF9pbnQzMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHk7XG4gICAgICAgIHZhciBtYWcwMSA9IG5ldyBBcnJheSgweDAsIHRoaXMuTUFUUklYX0EpO1xuICAgICAgICAvKiBtYWcwMVt4XSA9IHggKiBNQVRSSVhfQSAgZm9yIHg9MCwxICovXG5cbiAgICAgICAgaWYgKHRoaXMubXRpID49IHRoaXMuTikgeyAvKiBnZW5lcmF0ZSBOIHdvcmRzIGF0IG9uZSB0aW1lICovXG4gICAgICAgICAgICB2YXIga2s7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm10aSA9PT0gdGhpcy5OICsgMSkgeyAgIC8qIGlmIGluaXRfZ2VucmFuZCgpIGhhcyBub3QgYmVlbiBjYWxsZWQsICovXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0X2dlbnJhbmQoNTQ4OSk7IC8qIGEgZGVmYXVsdCBpbml0aWFsIHNlZWQgaXMgdXNlZCAqL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChrayA9IDA7IGtrIDwgdGhpcy5OIC0gdGhpcy5NOyBraysrKSB7XG4gICAgICAgICAgICAgICAgeSA9ICh0aGlzLm10W2trXSZ0aGlzLlVQUEVSX01BU0spfCh0aGlzLm10W2trICsgMV0mdGhpcy5MT1dFUl9NQVNLKTtcbiAgICAgICAgICAgICAgICB0aGlzLm10W2trXSA9IHRoaXMubXRba2sgKyB0aGlzLk1dIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKDtrayA8IHRoaXMuTiAtIDE7IGtrKyspIHtcbiAgICAgICAgICAgICAgICB5ID0gKHRoaXMubXRba2tdJnRoaXMuVVBQRVJfTUFTSyl8KHRoaXMubXRba2sgKyAxXSZ0aGlzLkxPV0VSX01BU0spO1xuICAgICAgICAgICAgICAgIHRoaXMubXRba2tdID0gdGhpcy5tdFtrayArICh0aGlzLk0gLSB0aGlzLk4pXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeSA9ICh0aGlzLm10W3RoaXMuTiAtIDFdJnRoaXMuVVBQRVJfTUFTSyl8KHRoaXMubXRbMF0mdGhpcy5MT1dFUl9NQVNLKTtcbiAgICAgICAgICAgIHRoaXMubXRbdGhpcy5OIC0gMV0gPSB0aGlzLm10W3RoaXMuTSAtIDFdIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG5cbiAgICAgICAgICAgIHRoaXMubXRpID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHkgPSB0aGlzLm10W3RoaXMubXRpKytdO1xuXG4gICAgICAgIC8qIFRlbXBlcmluZyAqL1xuICAgICAgICB5IF49ICh5ID4+PiAxMSk7XG4gICAgICAgIHkgXj0gKHkgPDwgNykgJiAweDlkMmM1NjgwO1xuICAgICAgICB5IF49ICh5IDw8IDE1KSAmIDB4ZWZjNjAwMDA7XG4gICAgICAgIHkgXj0gKHkgPj4+IDE4KTtcblxuICAgICAgICByZXR1cm4geSA+Pj4gMDtcbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwweDdmZmZmZmZmXS1pbnRlcnZhbCAqL1xuICAgIE1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuZ2VucmFuZF9pbnQzMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmdlbnJhbmRfaW50MzIoKSA+Pj4gMSk7XG4gICAgfTtcblxuICAgIC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMV0tcmVhbC1pbnRlcnZhbCAqL1xuICAgIE1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuZ2VucmFuZF9yZWFsMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VucmFuZF9pbnQzMigpICogKDEuMCAvIDQyOTQ5NjcyOTUuMCk7XG4gICAgICAgIC8qIGRpdmlkZWQgYnkgMl4zMi0xICovXG4gICAgfTtcblxuICAgIC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSktcmVhbC1pbnRlcnZhbCAqL1xuICAgIE1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5yYW5kX2ludDMyKCkgKiAoMS4wIC8gNDI5NDk2NzI5Ni4wKTtcbiAgICAgICAgLyogZGl2aWRlZCBieSAyXjMyICovXG4gICAgfTtcblxuICAgIC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gKDAsMSktcmVhbC1pbnRlcnZhbCAqL1xuICAgIE1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuZ2VucmFuZF9yZWFsMyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmdlbnJhbmRfaW50MzIoKSArIDAuNSkgKiAoMS4wIC8gNDI5NDk2NzI5Ni4wKTtcbiAgICAgICAgLyogZGl2aWRlZCBieSAyXjMyICovXG4gICAgfTtcblxuICAgIC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSkgd2l0aCA1My1iaXQgcmVzb2x1dGlvbiovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5nZW5yYW5kX3JlczUzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYSA9IHRoaXMuZ2VucmFuZF9pbnQzMigpPj4+NSwgYiA9IHRoaXMuZ2VucmFuZF9pbnQzMigpPj4+NjtcbiAgICAgICAgcmV0dXJuIChhICogNjcxMDg4NjQuMCArIGIpICogKDEuMCAvIDkwMDcxOTkyNTQ3NDA5OTIuMCk7XG4gICAgfTtcblxuICAgIC8vIEJsdWVJbXAgTUQ1IGhhc2hpbmcgYWxnb3JpdGhtIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvSmF2YVNjcmlwdC1NRDVcbiAgICB2YXIgQmx1ZUltcE1ENSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuVkVSU0lPTiA9ICcxLjAuMSc7XG5cbiAgICAvKlxuICAgICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxuICAgICogdG8gd29yayBhcm91bmQgYnVncyBpbiBzb21lIEpTIGludGVycHJldGVycy5cbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLnNhZmVfYWRkID0gZnVuY3Rpb24gc2FmZV9hZGQoeCwgeSkge1xuICAgICAgICB2YXIgbHN3ID0gKHggJiAweEZGRkYpICsgKHkgJiAweEZGRkYpLFxuICAgICAgICAgICAgbXN3ID0gKHggPj4gMTYpICsgKHkgPj4gMTYpICsgKGxzdyA+PiAxNik7XG4gICAgICAgIHJldHVybiAobXN3IDw8IDE2KSB8IChsc3cgJiAweEZGRkYpO1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRvIHRoZSBsZWZ0LlxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuYml0X3JvbGwgPSBmdW5jdGlvbiAobnVtLCBjbnQpIHtcbiAgICAgICAgcmV0dXJuIChudW0gPDwgY250KSB8IChudW0gPj4+ICgzMiAtIGNudCkpO1xuICAgIH07XG5cbiAgICAvKlxuICAgICogVGhlc2UgZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgZml2ZSBiYXNpYyBvcGVyYXRpb25zIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLm1kNV9jbW4gPSBmdW5jdGlvbiAocSwgYSwgYiwgeCwgcywgdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlX2FkZCh0aGlzLmJpdF9yb2xsKHRoaXMuc2FmZV9hZGQodGhpcy5zYWZlX2FkZChhLCBxKSwgdGhpcy5zYWZlX2FkZCh4LCB0KSksIHMpLCBiKTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLm1kNV9mZiA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1kNV9jbW4oKGIgJiBjKSB8ICgofmIpICYgZCksIGEsIGIsIHgsIHMsIHQpO1xuICAgIH07XG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUubWQ1X2dnID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWQ1X2NtbigoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG4gICAgfTtcbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5tZDVfaGggPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZDVfY21uKGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7XG4gICAgfTtcbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5tZDVfaWkgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZDVfY21uKGMgXiAoYiB8ICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIENhbGN1bGF0ZSB0aGUgTUQ1IG9mIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMsIGFuZCBhIGJpdCBsZW5ndGguXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5iaW5sX21kNSA9IGZ1bmN0aW9uICh4LCBsZW4pIHtcbiAgICAgICAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgICAgICAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCAobGVuICUgMzIpO1xuICAgICAgICB4WygoKGxlbiArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsZW47XG5cbiAgICAgICAgdmFyIGksIG9sZGEsIG9sZGIsIG9sZGMsIG9sZGQsXG4gICAgICAgICAgICBhID0gIDE3MzI1ODQxOTMsXG4gICAgICAgICAgICBiID0gLTI3MTczMzg3OSxcbiAgICAgICAgICAgIGMgPSAtMTczMjU4NDE5NCxcbiAgICAgICAgICAgIGQgPSAgMjcxNzMzODc4O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNikge1xuICAgICAgICAgICAgb2xkYSA9IGE7XG4gICAgICAgICAgICBvbGRiID0gYjtcbiAgICAgICAgICAgIG9sZGMgPSBjO1xuICAgICAgICAgICAgb2xkZCA9IGQ7XG5cbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9mZihhLCBiLCBjLCBkLCB4W2ldLCAgICAgICA3LCAtNjgwODc2OTM2KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyAgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAgMl0sIDE3LCAgNjA2MTA1ODE5KTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9mZihiLCBjLCBkLCBhLCB4W2kgKyAgM10sIDIyLCAtMTA0NDUyNTMzMCk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZmYoYSwgYiwgYywgZCwgeFtpICsgIDRdLCAgNywgLTE3NjQxODg5Nyk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgIDVdLCAxMiwgIDEyMDAwODA0MjYpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArICA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9mZihiLCBjLCBkLCBhLCB4W2kgKyAgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSArICA4XSwgIDcsICAxNzcwMDM1NDE2KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyAgOV0sIDEyLCAtMTk1ODQxNDQxNyk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9mZihiLCBjLCBkLCBhLCB4W2kgKyAxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZmYoYSwgYiwgYywgZCwgeFtpICsgMTJdLCAgNywgIDE4MDQ2MDM2ODIpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArIDEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNywgLTE1MDIwMDIyOTApO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsICAxMjM2NTM1MzI5KTtcblxuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArICAxXSwgIDUsIC0xNjU3OTY1MTApO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSArICA2XSwgIDksIC0xMDY5NTAxNjMyKTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9nZyhjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE0LCAgNjQzNzE3NzEzKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9nZyhiLCBjLCBkLCBhLCB4W2ldLCAgICAgIDIwLCAtMzczODk3MzAyKTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyAgNV0sICA1LCAtNzAxNTU4NjkxKTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9nZyhkLCBhLCBiLCBjLCB4W2kgKyAxMF0sICA5LCAgMzgwMTYwODMpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTQsIC02NjA0NzgzMzUpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArICA0XSwgMjAsIC00MDU1Mzc4NDgpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArICA5XSwgIDUsICA1Njg0NDY0MzgpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSArIDE0XSwgIDksIC0xMDE5ODAzNjkwKTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9nZyhjLCBkLCBhLCBiLCB4W2kgKyAgM10sIDE0LCAtMTg3MzYzOTYxKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9nZyhiLCBjLCBkLCBhLCB4W2kgKyAgOF0sIDIwLCAgMTE2MzUzMTUwMSk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZ2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCAgNSwgLTE0NDQ2ODE0NjcpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSArICAyXSwgIDksIC01MTQwMzc4NCk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgIDddLCAxNCwgIDE3MzUzMjg0NzMpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArIDEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcblxuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArICA1XSwgIDQsIC0zNzg1NTgpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArICA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE2LCAgMTgzOTAzMDU2Mik7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgMTRdLCAyMywgLTM1MzA5NTU2KTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyAgMV0sICA0LCAtMTUzMDk5MjA2MCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgIDRdLCAxMSwgIDEyNzI4OTMzNTMpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArICA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArIDEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyAxM10sICA0LCAgNjgxMjc5MTc0KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9oaChkLCBhLCBiLCBjLCB4W2ldLCAgICAgIDExLCAtMzU4NTM3MjIyKTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyAgM10sIDE2LCAtNzIyNTIxOTc5KTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyAgNl0sIDIzLCAgNzYwMjkxODkpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArICA5XSwgIDQsIC02NDAzNjQ0ODcpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArIDEyXSwgMTEsIC00MjE4MTU4MzUpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTYsICA1MzA3NDI1MjApO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArICAyXSwgMjMsIC05OTUzMzg2NTEpO1xuXG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaWkoYSwgYiwgYywgZCwgeFtpXSwgICAgICAgNiwgLTE5ODYzMDg0NCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgIDddLCAxMCwgIDExMjY4OTE0MTUpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9paShiLCBjLCBkLCBhLCB4W2kgKyAgNV0sIDIxLCAtNTc0MzQwNTUpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgIDYsICAxNzAwNDg1NTcxKTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAgM10sIDEwLCAtMTg5NDk4NjYwNik7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArICAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyAgOF0sICA2LCAgMTg3MzMxMzM1OSk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgMTVdLCAxMCwgLTMwNjExNzQ0KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyAgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgIDEzMDkxNTE2NDkpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSArICA0XSwgIDYsIC0xNDU1MjMwNzApO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSArIDExXSwgMTAsIC0xMTIwMjEwMzc5KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyAgMl0sIDE1LCAgNzE4Nzg3MjU5KTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9paShiLCBjLCBkLCBhLCB4W2kgKyAgOV0sIDIxLCAtMzQzNDg1NTUxKTtcblxuICAgICAgICAgICAgYSA9IHRoaXMuc2FmZV9hZGQoYSwgb2xkYSk7XG4gICAgICAgICAgICBiID0gdGhpcy5zYWZlX2FkZChiLCBvbGRiKTtcbiAgICAgICAgICAgIGMgPSB0aGlzLnNhZmVfYWRkKGMsIG9sZGMpO1xuICAgICAgICAgICAgZCA9IHRoaXMuc2FmZV9hZGQoZCwgb2xkZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFthLCBiLCBjLCBkXTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIENvbnZlcnQgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcyB0byBhIHN0cmluZ1xuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuYmlubDJyc3RyID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgb3V0cHV0ID0gJyc7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGggKiAzMjsgaSArPSA4KSB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoaW5wdXRbaSA+PiA1XSA+Pj4gKGkgJSAzMikpICYgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIENvbnZlcnQgYSByYXcgc3RyaW5nIHRvIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHNcbiAgICAqIENoYXJhY3RlcnMgPjI1NSBoYXZlIHRoZWlyIGhpZ2gtYnl0ZSBzaWxlbnRseSBpZ25vcmVkLlxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUucnN0cjJiaW5sID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgb3V0cHV0ID0gW107XG4gICAgICAgIG91dHB1dFsoaW5wdXQubGVuZ3RoID4+IDIpIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvdXRwdXQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIG91dHB1dFtpXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCAqIDg7IGkgKz0gOCkge1xuICAgICAgICAgICAgb3V0cHV0W2kgPj4gNV0gfD0gKGlucHV0LmNoYXJDb2RlQXQoaSAvIDgpICYgMHhGRikgPDwgKGkgJSAzMik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIENhbGN1bGF0ZSB0aGUgTUQ1IG9mIGEgcmF3IHN0cmluZ1xuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUucnN0cl9tZDUgPSBmdW5jdGlvbiAocykge1xuICAgICAgICByZXR1cm4gdGhpcy5iaW5sMnJzdHIodGhpcy5iaW5sX21kNSh0aGlzLnJzdHIyYmlubChzKSwgcy5sZW5ndGggKiA4KSk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBDYWxjdWxhdGUgdGhlIEhNQUMtTUQ1LCBvZiBhIGtleSBhbmQgc29tZSBkYXRhIChyYXcgc3RyaW5ncylcbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLnJzdHJfaG1hY19tZDUgPSBmdW5jdGlvbiAoa2V5LCBkYXRhKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgYmtleSA9IHRoaXMucnN0cjJiaW5sKGtleSksXG4gICAgICAgICAgICBpcGFkID0gW10sXG4gICAgICAgICAgICBvcGFkID0gW10sXG4gICAgICAgICAgICBoYXNoO1xuICAgICAgICBpcGFkWzE1XSA9IG9wYWRbMTVdID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoYmtleS5sZW5ndGggPiAxNikge1xuICAgICAgICAgICAgYmtleSA9IHRoaXMuYmlubF9tZDUoYmtleSwga2V5Lmxlbmd0aCAqIDgpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAxKSB7XG4gICAgICAgICAgICBpcGFkW2ldID0gYmtleVtpXSBeIDB4MzYzNjM2MzY7XG4gICAgICAgICAgICBvcGFkW2ldID0gYmtleVtpXSBeIDB4NUM1QzVDNUM7XG4gICAgICAgIH1cbiAgICAgICAgaGFzaCA9IHRoaXMuYmlubF9tZDUoaXBhZC5jb25jYXQodGhpcy5yc3RyMmJpbmwoZGF0YSkpLCA1MTIgKyBkYXRhLmxlbmd0aCAqIDgpO1xuICAgICAgICByZXR1cm4gdGhpcy5iaW5sMnJzdHIodGhpcy5iaW5sX21kNShvcGFkLmNvbmNhdChoYXNoKSwgNTEyICsgMTI4KSk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBDb252ZXJ0IGEgcmF3IHN0cmluZyB0byBhIGhleCBzdHJpbmdcbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLnJzdHIyaGV4ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBoZXhfdGFiID0gJzAxMjM0NTY3ODlhYmNkZWYnLFxuICAgICAgICAgICAgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICB4ID0gaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIG91dHB1dCArPSBoZXhfdGFiLmNoYXJBdCgoeCA+Pj4gNCkgJiAweDBGKSArXG4gICAgICAgICAgICAgICAgaGV4X3RhYi5jaGFyQXQoeCAmIDB4MEYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBFbmNvZGUgYSBzdHJpbmcgYXMgdXRmLThcbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLnN0cjJyc3RyX3V0ZjggPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkpO1xuICAgIH07XG5cbiAgICAvKlxuICAgICogVGFrZSBzdHJpbmcgYXJndW1lbnRzIGFuZCByZXR1cm4gZWl0aGVyIHJhdyBvciBoZXggZW5jb2RlZCBzdHJpbmdzXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5yYXdfbWQ1ID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnN0cl9tZDUodGhpcy5zdHIycnN0cl91dGY4KHMpKTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLmhleF9tZDUgPSBmdW5jdGlvbiAocykge1xuICAgICAgICByZXR1cm4gdGhpcy5yc3RyMmhleCh0aGlzLnJhd19tZDUocykpO1xuICAgIH07XG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUucmF3X2htYWNfbWQ1ID0gZnVuY3Rpb24gKGssIGQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnN0cl9obWFjX21kNSh0aGlzLnN0cjJyc3RyX3V0ZjgoayksIHRoaXMuc3RyMnJzdHJfdXRmOChkKSk7XG4gICAgfTtcbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5oZXhfaG1hY19tZDUgPSBmdW5jdGlvbiAoaywgZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yc3RyMmhleCh0aGlzLnJhd19obWFjX21kNShrLCBkKSk7XG4gICAgfTtcblxuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLm1kNSA9IGZ1bmN0aW9uIChzdHJpbmcsIGtleSwgcmF3KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICBpZiAoIXJhdykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhleF9tZDUoc3RyaW5nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmF3X21kNShzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyYXcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhleF9obWFjX21kNShrZXksIHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5yYXdfaG1hY19tZDUoa2V5LCBzdHJpbmcpO1xuICAgIH07XG5cbiAgICAvLyBDb21tb25KUyBtb2R1bGVcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gQ2hhbmNlO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydHMuQ2hhbmNlID0gQ2hhbmNlO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBDaGFuY2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZXJlIGlzIGEgaW1wb3J0c1NjcmlwcyBvYmplY3QgZGVmaW5lIGNoYW5jZSBmb3Igd29ya2VyXG4gICAgaWYgKHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjaGFuY2UgPSBuZXcgQ2hhbmNlKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSB3aW5kb3cgb2JqZWN0LCB0aGF0IGF0IGxlYXN0IGhhcyBhIGRvY3VtZW50IHByb3BlcnR5LFxuICAgIC8vIGluc3RhbnRpYXRlIGFuZCBkZWZpbmUgY2hhbmNlIG9uIHRoZSB3aW5kb3dcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHdpbmRvdy5DaGFuY2UgPSBDaGFuY2U7XG4gICAgICAgIHdpbmRvdy5jaGFuY2UgPSBuZXcgQ2hhbmNlKCk7XG4gICAgfVxufSkoKTtcbiIsIlxuLyoqXG4gKiBFeHBvc2UgYEVtaXR0ZXJgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBFbWl0dGVyYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIEVtaXR0ZXIob2JqKSB7XG4gIGlmIChvYmopIHJldHVybiBtaXhpbihvYmopO1xufTtcblxuLyoqXG4gKiBNaXhpbiB0aGUgZW1pdHRlciBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG1peGluKG9iaikge1xuICBmb3IgKHZhciBrZXkgaW4gRW1pdHRlci5wcm90b3R5cGUpIHtcbiAgICBvYmpba2V5XSA9IEVtaXR0ZXIucHJvdG90eXBlW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBMaXN0ZW4gb24gdGhlIGdpdmVuIGBldmVudGAgd2l0aCBgZm5gLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLm9uID1cbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG4gICh0aGlzLl9jYWxsYmFja3NbZXZlbnRdID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSB8fCBbXSlcbiAgICAucHVzaChmbik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGRzIGFuIGBldmVudGAgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgYSBzaW5nbGVcbiAqIHRpbWUgdGhlbiBhdXRvbWF0aWNhbGx5IHJlbW92ZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RW1pdHRlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuXG4gIGZ1bmN0aW9uIG9uKCkge1xuICAgIHNlbGYub2ZmKGV2ZW50LCBvbik7XG4gICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIG9uLmZuID0gZm47XG4gIHRoaXMub24oZXZlbnQsIG9uKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgZm9yIGBldmVudGAgb3IgYWxsXG4gKiByZWdpc3RlcmVkIGNhbGxiYWNrcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPVxuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG5cbiAgLy8gYWxsXG4gIGlmICgwID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNwZWNpZmljIGV2ZW50XG4gIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdO1xuICBpZiAoIWNhbGxiYWNrcykgcmV0dXJuIHRoaXM7XG5cbiAgLy8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xuICBpZiAoMSA9PSBhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tldmVudF07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyByZW1vdmUgc3BlY2lmaWMgaGFuZGxlclxuICB2YXIgY2I7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2IgPSBjYWxsYmFja3NbaV07XG4gICAgaWYgKGNiID09PSBmbiB8fCBjYi5mbiA9PT0gZm4pIHtcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEVtaXQgYGV2ZW50YCB3aXRoIHRoZSBnaXZlbiBhcmdzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtNaXhlZH0gLi4uXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbihldmVudCl7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSlcbiAgICAsIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1tldmVudF07XG5cbiAgaWYgKGNhbGxiYWNrcykge1xuICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBjYWxsYmFja3NbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybiBhcnJheSBvZiBjYWxsYmFja3MgZm9yIGBldmVudGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQpe1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG4gIHJldHVybiB0aGlzLl9jYWxsYmFja3NbZXZlbnRdIHx8IFtdO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGlzIGVtaXR0ZXIgaGFzIGBldmVudGAgaGFuZGxlcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudCl7XG4gIHJldHVybiAhISB0aGlzLmxpc3RlbmVycyhldmVudCkubGVuZ3RoO1xufTtcbiIsIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSAndW5kZWZpbmVkJyAhPSB0eXBlb2YgY2hyb21lXG4gICAgICAgICAgICAgICAmJiAndW5kZWZpbmVkJyAhPSB0eXBlb2YgY2hyb21lLnN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgID8gY2hyb21lLnN0b3JhZ2UubG9jYWxcbiAgICAgICAgICAgICAgICAgIDogbG9jYWxzdG9yYWdlKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuICAnbGlnaHRzZWFncmVlbicsXG4gICdmb3Jlc3RncmVlbicsXG4gICdnb2xkZW5yb2QnLFxuICAnZG9kZ2VyYmx1ZScsXG4gICdkYXJrb3JjaGlkJyxcbiAgJ2NyaW1zb24nXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgLy8gaXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcbiAgcmV0dXJuICgnV2Via2l0QXBwZWFyYW5jZScgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKSB8fFxuICAgIC8vIGlzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcbiAgICAod2luZG93LmNvbnNvbGUgJiYgKGNvbnNvbGUuZmlyZWJ1ZyB8fCAoY29uc29sZS5leGNlcHRpb24gJiYgY29uc29sZS50YWJsZSkpKSB8fFxuICAgIC8vIGlzIGZpcmVmb3ggPj0gdjMxP1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuICAgIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSk7XG59XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG59O1xuXG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncygpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciB1c2VDb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblxuICBhcmdzWzBdID0gKHVzZUNvbG9ycyA/ICclYycgOiAnJylcbiAgICArIHRoaXMubmFtZXNwYWNlXG4gICAgKyAodXNlQ29sb3JzID8gJyAlYycgOiAnICcpXG4gICAgKyBhcmdzWzBdXG4gICAgKyAodXNlQ29sb3JzID8gJyVjICcgOiAnICcpXG4gICAgKyAnKycgKyBleHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cbiAgaWYgKCF1c2VDb2xvcnMpIHJldHVybiBhcmdzO1xuXG4gIHZhciBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcbiAgYXJncyA9IFthcmdzWzBdLCBjLCAnY29sb3I6IGluaGVyaXQnXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSkpO1xuXG4gIC8vIHRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG4gIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0QyA9IDA7XG4gIGFyZ3NbMF0ucmVwbGFjZSgvJVthLXolXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIGlmICgnJSUnID09PSBtYXRjaCkgcmV0dXJuO1xuICAgIGluZGV4Kys7XG4gICAgaWYgKCclYycgPT09IG1hdGNoKSB7XG4gICAgICAvLyB3ZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcbiAgICAgIC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG4gICAgICBsYXN0QyA9IGluZGV4O1xuICAgIH1cbiAgfSk7XG5cbiAgYXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xuICByZXR1cm4gYXJncztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmxvZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUubG9nYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBsb2coKSB7XG4gIC8vIHRoaXMgaGFja2VyeSBpcyByZXF1aXJlZCBmb3IgSUU4LzksIHdoZXJlXG4gIC8vIHRoZSBgY29uc29sZS5sb2dgIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSAnYXBwbHknXG4gIHJldHVybiAnb2JqZWN0JyA9PT0gdHlwZW9mIGNvbnNvbGVcbiAgICAmJiBjb25zb2xlLmxvZ1xuICAgICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGUubG9nLCBjb25zb2xlLCBhcmd1bWVudHMpO1xufVxuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcbiAgdHJ5IHtcbiAgICBpZiAobnVsbCA9PSBuYW1lc3BhY2VzKSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwb3J0cy5zdG9yYWdlLmRlYnVnID0gbmFtZXNwYWNlcztcbiAgICB9XG4gIH0gY2F0Y2goZSkge31cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuICB2YXIgcjtcbiAgdHJ5IHtcbiAgICByID0gZXhwb3J0cy5zdG9yYWdlLmRlYnVnO1xuICB9IGNhdGNoKGUpIHt9XG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIEVuYWJsZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiBgbG9jYWxTdG9yYWdlLmRlYnVnYCBpbml0aWFsbHkuXG4gKi9cblxuZXhwb3J0cy5lbmFibGUobG9hZCgpKTtcblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgfSBjYXRjaCAoZSkge31cbn1cbiIsIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBkZWJ1ZztcbmV4cG9ydHMuY29lcmNlID0gY29lcmNlO1xuZXhwb3J0cy5kaXNhYmxlID0gZGlzYWJsZTtcbmV4cG9ydHMuZW5hYmxlID0gZW5hYmxlO1xuZXhwb3J0cy5lbmFibGVkID0gZW5hYmxlZDtcbmV4cG9ydHMuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuICovXG5cbmV4cG9ydHMubmFtZXMgPSBbXTtcbmV4cG9ydHMuc2tpcHMgPSBbXTtcblxuLyoqXG4gKiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG4gKlxuICogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXJjYXNlZCBsZXR0ZXIsIGkuZS4gXCJuXCIuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzID0ge307XG5cbi8qKlxuICogUHJldmlvdXNseSBhc3NpZ25lZCBjb2xvci5cbiAqL1xuXG52YXIgcHJldkNvbG9yID0gMDtcblxuLyoqXG4gKiBQcmV2aW91cyBsb2cgdGltZXN0YW1wLlxuICovXG5cbnZhciBwcmV2VGltZTtcblxuLyoqXG4gKiBTZWxlY3QgYSBjb2xvci5cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzZWxlY3RDb2xvcigpIHtcbiAgcmV0dXJuIGV4cG9ydHMuY29sb3JzW3ByZXZDb2xvcisrICUgZXhwb3J0cy5jb2xvcnMubGVuZ3RoXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGVidWcobmFtZXNwYWNlKSB7XG5cbiAgLy8gZGVmaW5lIHRoZSBgZGlzYWJsZWRgIHZlcnNpb25cbiAgZnVuY3Rpb24gZGlzYWJsZWQoKSB7XG4gIH1cbiAgZGlzYWJsZWQuZW5hYmxlZCA9IGZhbHNlO1xuXG4gIC8vIGRlZmluZSB0aGUgYGVuYWJsZWRgIHZlcnNpb25cbiAgZnVuY3Rpb24gZW5hYmxlZCgpIHtcblxuICAgIHZhciBzZWxmID0gZW5hYmxlZDtcblxuICAgIC8vIHNldCBgZGlmZmAgdGltZXN0YW1wXG4gICAgdmFyIGN1cnIgPSArbmV3IERhdGUoKTtcbiAgICB2YXIgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuICAgIHNlbGYuZGlmZiA9IG1zO1xuICAgIHNlbGYucHJldiA9IHByZXZUaW1lO1xuICAgIHNlbGYuY3VyciA9IGN1cnI7XG4gICAgcHJldlRpbWUgPSBjdXJyO1xuXG4gICAgLy8gYWRkIHRoZSBgY29sb3JgIGlmIG5vdCBzZXRcbiAgICBpZiAobnVsbCA9PSBzZWxmLnVzZUNvbG9ycykgc2VsZi51c2VDb2xvcnMgPSBleHBvcnRzLnVzZUNvbG9ycygpO1xuICAgIGlmIChudWxsID09IHNlbGYuY29sb3IgJiYgc2VsZi51c2VDb2xvcnMpIHNlbGYuY29sb3IgPSBzZWxlY3RDb2xvcigpO1xuXG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgYXJnc1swXSA9IGV4cG9ydHMuY29lcmNlKGFyZ3NbMF0pO1xuXG4gICAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgYXJnc1swXSkge1xuICAgICAgLy8gYW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJW9cbiAgICAgIGFyZ3MgPSBbJyVvJ10uY29uY2F0KGFyZ3MpO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXolXSkvZywgZnVuY3Rpb24obWF0Y2gsIGZvcm1hdCkge1xuICAgICAgLy8gaWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuICAgICAgaWYgKG1hdGNoID09PSAnJSUnKSByZXR1cm4gbWF0Y2g7XG4gICAgICBpbmRleCsrO1xuICAgICAgdmFyIGZvcm1hdHRlciA9IGV4cG9ydHMuZm9ybWF0dGVyc1tmb3JtYXRdO1xuICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBmb3JtYXR0ZXIpIHtcbiAgICAgICAgdmFyIHZhbCA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICBtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cbiAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuICAgICAgICBhcmdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGluZGV4LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG5cbiAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGV4cG9ydHMuZm9ybWF0QXJncykge1xuICAgICAgYXJncyA9IGV4cG9ydHMuZm9ybWF0QXJncy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICB9XG4gICAgdmFyIGxvZ0ZuID0gZW5hYmxlZC5sb2cgfHwgZXhwb3J0cy5sb2cgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbiAgICBsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgfVxuICBlbmFibGVkLmVuYWJsZWQgPSB0cnVlO1xuXG4gIHZhciBmbiA9IGV4cG9ydHMuZW5hYmxlZChuYW1lc3BhY2UpID8gZW5hYmxlZCA6IGRpc2FibGVkO1xuXG4gIGZuLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblxuICByZXR1cm4gZm47XG59XG5cbi8qKlxuICogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuICogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuICBleHBvcnRzLnNhdmUobmFtZXNwYWNlcyk7XG5cbiAgdmFyIHNwbGl0ID0gKG5hbWVzcGFjZXMgfHwgJycpLnNwbGl0KC9bXFxzLF0rLyk7XG4gIHZhciBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGlmICghc3BsaXRbaV0pIGNvbnRpbnVlOyAvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuICAgIG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuICAgIGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcbiAgICAgIGV4cG9ydHMuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc3Vic3RyKDEpICsgJyQnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cG9ydHMubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gIGV4cG9ydHMuZW5hYmxlKCcnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuICB2YXIgaSwgbGVuO1xuICBmb3IgKGkgPSAwLCBsZW4gPSBleHBvcnRzLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGV4cG9ydHMuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBmb3IgKGkgPSAwLCBsZW4gPSBleHBvcnRzLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGV4cG9ydHMubmFtZXNbaV0udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb2VyY2UgYHZhbGAuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gdmFsXG4gKiBAcmV0dXJuIHtNaXhlZH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcbiAgaWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuICByZXR1cm4gdmFsO1xufVxuIiwiLyohXG4gKiBAZGVzY3JpcHRpb24gUmVjdXJzaXZlIG9iamVjdCBleHRlbmRpbmdcbiAqIEBhdXRob3IgVmlhY2hlc2xhdiBMb3RzbWFub3YgPGxvdHNtYW5vdjg5QGdtYWlsLmNvbT5cbiAqIEBsaWNlbnNlIE1JVFxuICpcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE1IFZpYWNoZXNsYXYgTG90c21hbm92XG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZlxuICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpblxuICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0b1xuICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2ZcbiAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTU1xuICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SXG4gKiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVJcbiAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gaXNTcGVjaWZpY1ZhbHVlKHZhbCkge1xuXHRyZXR1cm4gKFxuXHRcdHZhbCBpbnN0YW5jZW9mIEJ1ZmZlclxuXHRcdHx8IHZhbCBpbnN0YW5jZW9mIERhdGVcblx0XHR8fCB2YWwgaW5zdGFuY2VvZiBSZWdFeHBcblx0KSA/IHRydWUgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY2xvbmVTcGVjaWZpY1ZhbHVlKHZhbCkge1xuXHRpZiAodmFsIGluc3RhbmNlb2YgQnVmZmVyKSB7XG5cdFx0dmFyIHggPSBuZXcgQnVmZmVyKHZhbC5sZW5ndGgpO1xuXHRcdHZhbC5jb3B5KHgpO1xuXHRcdHJldHVybiB4O1xuXHR9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRyZXR1cm4gbmV3IERhdGUodmFsLmdldFRpbWUoKSk7XG5cdH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgUmVnRXhwKSB7XG5cdFx0cmV0dXJuIG5ldyBSZWdFeHAodmFsKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc2l0dWF0aW9uJyk7XG5cdH1cbn1cblxuLyoqXG4gKiBSZWN1cnNpdmUgY2xvbmluZyBhcnJheS5cbiAqL1xuZnVuY3Rpb24gZGVlcENsb25lQXJyYXkoYXJyKSB7XG5cdHZhciBjbG9uZSA9IFtdO1xuXHRhcnIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcblx0XHRpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG5cdFx0XHRcdGNsb25lW2luZGV4XSA9IGRlZXBDbG9uZUFycmF5KGl0ZW0pO1xuXHRcdFx0fSBlbHNlIGlmIChpc1NwZWNpZmljVmFsdWUoaXRlbSkpIHtcblx0XHRcdFx0Y2xvbmVbaW5kZXhdID0gY2xvbmVTcGVjaWZpY1ZhbHVlKGl0ZW0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVbaW5kZXhdID0gZGVlcEV4dGVuZCh7fSwgaXRlbSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNsb25lW2luZGV4XSA9IGl0ZW07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGNsb25lO1xufVxuXG4vKipcbiAqIEV4dGVuaW5nIG9iamVjdCB0aGF0IGVudGVyZWQgaW4gZmlyc3QgYXJndW1lbnQuXG4gKlxuICogUmV0dXJucyBleHRlbmRlZCBvYmplY3Qgb3IgZmFsc2UgaWYgaGF2ZSBubyB0YXJnZXQgb2JqZWN0IG9yIGluY29ycmVjdCB0eXBlLlxuICpcbiAqIElmIHlvdSB3aXNoIHRvIGNsb25lIHNvdXJjZSBvYmplY3QgKHdpdGhvdXQgbW9kaWZ5IGl0KSwganVzdCB1c2UgZW1wdHkgbmV3XG4gKiBvYmplY3QgYXMgZmlyc3QgYXJndW1lbnQsIGxpa2UgdGhpczpcbiAqICAgZGVlcEV4dGVuZCh7fSwgeW91ck9ial8xLCBbeW91ck9ial9OXSk7XG4gKi9cbnZhciBkZWVwRXh0ZW5kID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoLypvYmpfMSwgW29ial8yXSwgW29ial9OXSovKSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSB8fCB0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAnb2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuXHRcdHJldHVybiBhcmd1bWVudHNbMF07XG5cdH1cblxuXHR2YXIgdGFyZ2V0ID0gYXJndW1lbnRzWzBdO1xuXG5cdC8vIGNvbnZlcnQgYXJndW1lbnRzIHRvIGFycmF5IGFuZCBjdXQgb2ZmIHRhcmdldCBvYmplY3Rcblx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG5cdHZhciB2YWwsIHNyYywgY2xvbmU7XG5cblx0YXJncy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcblx0XHQvLyBza2lwIGFyZ3VtZW50IGlmIGl0IGlzIGFycmF5IG9yIGlzbid0IG9iamVjdFxuXHRcdGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9iaikpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0c3JjID0gdGFyZ2V0W2tleV07IC8vIHNvdXJjZSB2YWx1ZVxuXHRcdFx0dmFsID0gb2JqW2tleV07IC8vIG5ldyB2YWx1ZVxuXG5cdFx0XHQvLyByZWN1cnNpb24gcHJldmVudGlvblxuXHRcdFx0aWYgKHZhbCA9PT0gdGFyZ2V0KSB7XG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBpZiBuZXcgdmFsdWUgaXNuJ3Qgb2JqZWN0IHRoZW4ganVzdCBvdmVyd3JpdGUgYnkgbmV3IHZhbHVlXG5cdFx0XHQgKiBpbnN0ZWFkIG9mIGV4dGVuZGluZy5cblx0XHRcdCAqL1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0JyB8fCB2YWwgPT09IG51bGwpIHtcblx0XHRcdFx0dGFyZ2V0W2tleV0gPSB2YWw7XG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0Ly8ganVzdCBjbG9uZSBhcnJheXMgKGFuZCByZWN1cnNpdmUgY2xvbmUgb2JqZWN0cyBpbnNpZGUpXG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdFx0XHR0YXJnZXRba2V5XSA9IGRlZXBDbG9uZUFycmF5KHZhbCk7XG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0Ly8gY3VzdG9tIGNsb25pbmcgYW5kIG92ZXJ3cml0ZSBmb3Igc3BlY2lmaWMgb2JqZWN0c1xuXHRcdFx0fSBlbHNlIGlmIChpc1NwZWNpZmljVmFsdWUodmFsKSkge1xuXHRcdFx0XHR0YXJnZXRba2V5XSA9IGNsb25lU3BlY2lmaWNWYWx1ZSh2YWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdC8vIG92ZXJ3cml0ZSBieSBuZXcgdmFsdWUgaWYgc291cmNlIGlzbid0IG9iamVjdCBvciBhcnJheVxuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygc3JjICE9PSAnb2JqZWN0JyB8fCBzcmMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShzcmMpKSB7XG5cdFx0XHRcdHRhcmdldFtrZXldID0gZGVlcEV4dGVuZCh7fSwgdmFsKTtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHQvLyBzb3VyY2UgdmFsdWUgYW5kIG5ldyB2YWx1ZSBpcyBvYmplY3RzIGJvdGgsIGV4dGVuZGluZy4uLlxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGFyZ2V0W2tleV0gPSBkZWVwRXh0ZW5kKHNyYywgdmFsKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJCA9IHJlcXVpcmUoJy4vdXRpbC91cmktaGVscGVycycpO1xuXG4kLmZpbmRCeVJlZiA9IHJlcXVpcmUoJy4vdXRpbC9maW5kLXJlZmVyZW5jZScpO1xuJC5yZXNvbHZlU2NoZW1hID0gcmVxdWlyZSgnLi91dGlsL3Jlc29sdmUtc2NoZW1hJyk7XG4kLm5vcm1hbGl6ZVNjaGVtYSA9IHJlcXVpcmUoJy4vdXRpbC9ub3JtYWxpemUtc2NoZW1hJyk7XG5cbnZhciBpbnN0YW5jZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uICRyZWYoZmFrZXJvb3QsIHNjaGVtYSwgcmVmcywgZXgpIHtcbiAgICBpZiAodHlwZW9mIGZha2Vyb290ID09PSAnb2JqZWN0Jykge1xuICAgICAgZXggPSByZWZzO1xuICAgICAgcmVmcyA9IHNjaGVtYTtcbiAgICAgIHNjaGVtYSA9IGZha2Vyb290O1xuICAgICAgZmFrZXJvb3QgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVmcyA9PT0gJ29iamVjdCcgJiYgcmVmcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIGF1eCA9IHJlZnM7XG5cbiAgICAgIHJlZnMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgayBpbiBhdXgpIHtcbiAgICAgICAgYXV4W2tdLmlkID0gYXV4W2tdLmlkIHx8IGs7XG4gICAgICAgIHJlZnMucHVzaChhdXhba10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVmcyAhPT0gJ3VuZGVmaW5lZCcgJiYgIUFycmF5LmlzQXJyYXkocmVmcykpIHtcbiAgICAgIGV4ID0gISFyZWZzO1xuICAgICAgcmVmcyA9IFtdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2gocmVmKSB7XG4gICAgICBpZiAodHlwZW9mIHJlZi5pZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGlkID0gJC5yZXNvbHZlVVJMKGZha2Vyb290LCByZWYuaWQpLnJlcGxhY2UoL1xcLyM/JC8sICcnKTtcblxuICAgICAgICBpZiAoaWQuaW5kZXhPZignIycpID4gLTEpIHtcbiAgICAgICAgICB2YXIgcGFydHMgPSBpZC5zcGxpdCgnIycpO1xuXG4gICAgICAgICAgaWYgKHBhcnRzWzFdLmNoYXJBdCgpID09PSAnLycpIHtcbiAgICAgICAgICAgIGlkID0gcGFydHNbMF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlkID0gcGFydHNbMV0gfHwgcGFydHNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEkcmVmLnJlZnNbaWRdKSB7XG4gICAgICAgICAgJHJlZi5yZWZzW2lkXSA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIChyZWZzIHx8IFtdKS5jb25jYXQoW3NjaGVtYV0pLmZvckVhY2goZnVuY3Rpb24ocmVmKSB7XG4gICAgICBzY2hlbWEgPSAkLm5vcm1hbGl6ZVNjaGVtYShmYWtlcm9vdCwgcmVmLCBwdXNoKTtcbiAgICAgIHB1c2goc2NoZW1hKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkLnJlc29sdmVTY2hlbWEoc2NoZW1hLCAkcmVmLnJlZnMsIGV4KTtcbiAgfVxuXG4gICRyZWYucmVmcyA9IHt9O1xuICAkcmVmLnV0aWwgPSAkO1xuXG4gIHJldHVybiAkcmVmO1xufTtcblxuaW5zdGFuY2UudXRpbCA9ICQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbG9uZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZWVuKSB7XG4gIHNlZW4gPSBzZWVuIHx8IFtdO1xuXG4gIGlmIChzZWVuLmluZGV4T2Yob2JqKSA+IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgZGVyZWZlcmVuY2UgY2lyY3VsYXIgc3RydWN0dXJlcycpO1xuICB9XG5cbiAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgc2VlbiA9IHNlZW4uY29uY2F0KFtvYmpdKTtcblxuICB2YXIgdGFyZ2V0ID0gQXJyYXkuaXNBcnJheShvYmopID8gW10gOiB7fTtcblxuICBmdW5jdGlvbiBjb3B5KGtleSwgdmFsdWUpIHtcbiAgICB0YXJnZXRba2V5XSA9IGNsb25lKHZhbHVlLCBzZWVuKTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICBvYmouZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICBjb3B5KGtleSwgdmFsdWUpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgIGNvcHkoa2V5LCBvYmpba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICQgPSByZXF1aXJlKCcuL3VyaS1oZWxwZXJzJyk7XG5cbmZ1bmN0aW9uIGdldChvYmosIHBhdGgpIHtcbiAgdmFyIGhhc2ggPSBwYXRoLnNwbGl0KCcjJylbMV07XG5cbiAgdmFyIHBhcnRzID0gaGFzaC5zcGxpdCgnLycpLnNsaWNlKDEpO1xuXG4gIHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhcnRzLnNoaWZ0KCkpLnJlcGxhY2UoL34xL2csICcvJykucmVwbGFjZSgvfjAvZywgJ34nKTtcblxuICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04gcG9pbnRlciBub3QgZm91bmQ6ICcgKyBwYXRoKTtcbiAgICB9XG5cbiAgICBvYmogPSBvYmpba2V5XTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbnZhciBmaW5kID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpZCwgcmVmcykge1xuICB2YXIgdGFyZ2V0ID0gcmVmc1tpZF0gfHwgcmVmc1tpZC5zcGxpdCgnIycpWzFdXSB8fCByZWZzWyQuZ2V0RG9jdW1lbnRVUkkoaWQpXTtcblxuICBpZiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0ID0gaWQuaW5kZXhPZignIy8nKSA+IC0xID8gZ2V0KHRhcmdldCwgaWQpIDogdGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiByZWZzKSB7XG4gICAgICBpZiAoJC5yZXNvbHZlVVJMKHJlZnNba2V5XS5pZCwgaWQpID09PSByZWZzW2tleV0uaWQpIHtcbiAgICAgICAgdGFyZ2V0ID0gcmVmc1trZXldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVmZXJlbmNlIG5vdCBmb3VuZDogJyArIGlkKTtcbiAgfVxuXG4gIHdoaWxlICh0YXJnZXQuJHJlZikge1xuICAgIHRhcmdldCA9IGZpbmQodGFyZ2V0LiRyZWYsIHJlZnMpO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkID0gcmVxdWlyZSgnLi91cmktaGVscGVycycpO1xuXG52YXIgY2xvbmVPYmogPSByZXF1aXJlKCcuL2Nsb25lLW9iaicpO1xuXG52YXIgU0NIRU1BX1VSSSA9IFtcbiAgJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hIycsXG4gICdodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMnXG5dO1xuXG5mdW5jdGlvbiBleHBhbmQob2JqLCBwYXJlbnQsIGNhbGxiYWNrKSB7XG4gIGlmIChvYmopIHtcbiAgICB2YXIgaWQgPSB0eXBlb2Ygb2JqLmlkID09PSAnc3RyaW5nJyA/IG9iai5pZCA6ICcjJztcblxuICAgIGlmICghJC5pc1VSTChpZCkpIHtcbiAgICAgIGlkID0gJC5yZXNvbHZlVVJMKHBhcmVudCA9PT0gaWQgPyBudWxsIDogcGFyZW50LCBpZCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouJHJlZiA9PT0gJ3N0cmluZycgJiYgISQuaXNVUkwob2JqLiRyZWYpKSB7XG4gICAgICBvYmouJHJlZiA9ICQucmVzb2x2ZVVSTChpZCwgb2JqLiRyZWYpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqLmlkID09PSAnc3RyaW5nJykge1xuICAgICAgb2JqLmlkID0gcGFyZW50ID0gaWQ7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIShrZXkgPT09ICdlbnVtJyB8fCBrZXkgPT09ICdyZXF1aXJlZCcpKSB7XG4gICAgICBleHBhbmQodmFsdWUsIHBhcmVudCwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayhvYmopO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZmFrZXJvb3QsIHNjaGVtYSwgcHVzaCkge1xuICBpZiAodHlwZW9mIGZha2Vyb290ID09PSAnb2JqZWN0Jykge1xuICAgIHB1c2ggPSBzY2hlbWE7XG4gICAgc2NoZW1hID0gZmFrZXJvb3Q7XG4gICAgZmFrZXJvb3QgPSBudWxsO1xuICB9XG5cbiAgdmFyIGJhc2UgPSBmYWtlcm9vdCB8fCAnJyxcbiAgICAgIGNvcHkgPSBjbG9uZU9iaihzY2hlbWEpO1xuXG4gIGlmIChjb3B5LiRzY2hlbWEgJiYgU0NIRU1BX1VSSS5pbmRleE9mKGNvcHkuJHNjaGVtYSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBzY2hlbWEgdmVyc2lvbiAodjQgb25seSknKTtcbiAgfVxuXG4gIGJhc2UgPSAkLnJlc29sdmVVUkwoY29weS4kc2NoZW1hIHx8IFNDSEVNQV9VUklbMF0sIGJhc2UpO1xuXG4gIGV4cGFuZChjb3B5LCAkLnJlc29sdmVVUkwoY29weS5pZCB8fCAnIycsIGJhc2UpLCBwdXNoKTtcblxuICBjb3B5LmlkID0gY29weS5pZCB8fCBiYXNlO1xuXG4gIHJldHVybiBjb3B5O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICQgPSByZXF1aXJlKCcuL3VyaS1oZWxwZXJzJyk7XG5cbnZhciBmaW5kID0gcmVxdWlyZSgnLi9maW5kLXJlZmVyZW5jZScpO1xuXG52YXIgZGVlcEV4dGVuZCA9IHJlcXVpcmUoJ2RlZXAtZXh0ZW5kJyk7XG5cbmZ1bmN0aW9uIGlzS2V5KHByb3ApIHtcbiAgcmV0dXJuIHByb3AgPT09ICdlbnVtJyB8fCBwcm9wID09PSAncmVxdWlyZWQnIHx8IHByb3AgPT09ICdkZWZpbml0aW9ucyc7XG59XG5cbmZ1bmN0aW9uIGNvcHkob2JqLCByZWZzLCBwYXJlbnQsIHJlc29sdmUpIHtcbiAgdmFyIHRhcmdldCA9ICBBcnJheS5pc0FycmF5KG9iaikgPyBbXSA6IHt9O1xuXG4gIGlmICh0eXBlb2Ygb2JqLiRyZWYgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIGJhc2UgPSAkLmdldERvY3VtZW50VVJJKG9iai4kcmVmKTtcblxuICAgIGlmIChwYXJlbnQgIT09IGJhc2UgfHwgKHJlc29sdmUgJiYgb2JqLiRyZWYuaW5kZXhPZignIy8nKSA+IC0xKSkge1xuICAgICAgdmFyIGZpeGVkID0gZmluZChvYmouJHJlZiwgcmVmcyk7XG5cbiAgICAgIGRlZXBFeHRlbmQob2JqLCBmaXhlZCk7XG5cbiAgICAgIGRlbGV0ZSBvYmouJHJlZjtcbiAgICAgIGRlbGV0ZSBvYmouaWQ7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcbiAgICBpZiAodHlwZW9mIG9ialtwcm9wXSA9PT0gJ29iamVjdCcgJiYgIWlzS2V5KHByb3ApKSB7XG4gICAgICB0YXJnZXRbcHJvcF0gPSBjb3B5KG9ialtwcm9wXSwgcmVmcywgcGFyZW50LCByZXNvbHZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCByZWZzLCByZXNvbHZlKSB7XG4gIHZhciBmaXhlZElkID0gJC5yZXNvbHZlVVJMKG9iai4kc2NoZW1hLCBvYmouaWQpLFxuICAgICAgcGFyZW50ID0gJC5nZXREb2N1bWVudFVSSShmaXhlZElkKTtcblxuICByZXR1cm4gY29weShvYmosIHJlZnMsIHBhcmVudCwgcmVzb2x2ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wanQzMy9lZmIyZjExMzRiYWI5ODYxMTNmZFxuXG5mdW5jdGlvbiBVUkxVdGlscyh1cmwsIGJhc2VVUkwpIHtcbiAgLy8gcmVtb3ZlIGxlYWRpbmcgLi9cbiAgdXJsID0gdXJsLnJlcGxhY2UoL15cXC5cXC8vLCAnJyk7XG5cbiAgdmFyIG0gPSBTdHJpbmcodXJsKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJykubWF0Y2goL14oW146XFwvPyNdKzopPyg/OlxcL1xcLyg/OihbXjpAXSopKD86OihbXjpAXSopKT9AKT8oKFteOlxcLz8jXSopKD86OihcXGQqKSk/KSk/KFtePyNdKikoXFw/W14jXSopPygjW1xcc1xcU10qKT8vKTtcbiAgaWYgKCFtKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoKTtcbiAgfVxuICB2YXIgaHJlZiA9IG1bMF0gfHwgJyc7XG4gIHZhciBwcm90b2NvbCA9IG1bMV0gfHwgJyc7XG4gIHZhciB1c2VybmFtZSA9IG1bMl0gfHwgJyc7XG4gIHZhciBwYXNzd29yZCA9IG1bM10gfHwgJyc7XG4gIHZhciBob3N0ID0gbVs0XSB8fCAnJztcbiAgdmFyIGhvc3RuYW1lID0gbVs1XSB8fCAnJztcbiAgdmFyIHBvcnQgPSBtWzZdIHx8ICcnO1xuICB2YXIgcGF0aG5hbWUgPSBtWzddIHx8ICcnO1xuICB2YXIgc2VhcmNoID0gbVs4XSB8fCAnJztcbiAgdmFyIGhhc2ggPSBtWzldIHx8ICcnO1xuICBpZiAoYmFzZVVSTCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGJhc2UgPSBuZXcgVVJMVXRpbHMoYmFzZVVSTCk7XG4gICAgdmFyIGZsYWcgPSBwcm90b2NvbCA9PT0gJycgJiYgaG9zdCA9PT0gJycgJiYgdXNlcm5hbWUgPT09ICcnO1xuICAgIGlmIChmbGFnICYmIHBhdGhuYW1lID09PSAnJyAmJiBzZWFyY2ggPT09ICcnKSB7XG4gICAgICBzZWFyY2ggPSBiYXNlLnNlYXJjaDtcbiAgICB9XG4gICAgaWYgKGZsYWcgJiYgcGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICAgIHBhdGhuYW1lID0gKHBhdGhuYW1lICE9PSAnJyA/IChiYXNlLnBhdGhuYW1lLnNsaWNlKDAsIGJhc2UucGF0aG5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpICsgcGF0aG5hbWUpIDogYmFzZS5wYXRobmFtZSk7XG4gICAgfVxuICAgIC8vIGRvdCBzZWdtZW50cyByZW1vdmFsXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgcGF0aG5hbWUucmVwbGFjZSgvXFwvP1teXFwvXSsvZywgZnVuY3Rpb24ocCkge1xuICAgICAgaWYgKHAgPT09ICcvLi4nKSB7XG4gICAgICAgIG91dHB1dC5wb3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dC5wdXNoKHApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcGF0aG5hbWUgPSBvdXRwdXQuam9pbignJykgfHwgJy8nO1xuXG4gICAgaWYgKGZsYWcpIHtcbiAgICAgIHBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICBob3N0bmFtZSA9IGJhc2UuaG9zdG5hbWU7XG4gICAgICBob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgcGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgdXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgIH1cbiAgICBpZiAocHJvdG9jb2wgPT09ICcnKSB7XG4gICAgICBwcm90b2NvbCA9IGJhc2UucHJvdG9jb2w7XG4gICAgfVxuICAgIGhyZWYgPSBwcm90b2NvbCArIChob3N0ICE9PSAnJyA/ICcvLycgOiAnJykgKyAodXNlcm5hbWUgIT09ICcnID8gdXNlcm5hbWUgKyAocGFzc3dvcmQgIT09ICcnID8gJzonICsgcGFzc3dvcmQgOiAnJykgKyAnQCcgOiAnJykgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xuICB9XG4gIHRoaXMuaHJlZiA9IGhyZWY7XG4gIHRoaXMub3JpZ2luID0gcHJvdG9jb2wgKyAoaG9zdCAhPT0gJycgPyAnLy8nICsgaG9zdCA6ICcnKTtcbiAgdGhpcy5wcm90b2NvbCA9IHByb3RvY29sO1xuICB0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7XG4gIHRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgdGhpcy5ob3N0bmFtZSA9IGhvc3RuYW1lO1xuICB0aGlzLnBvcnQgPSBwb3J0O1xuICB0aGlzLnBhdGhuYW1lID0gcGF0aG5hbWU7XG4gIHRoaXMuc2VhcmNoID0gc2VhcmNoO1xuICB0aGlzLmhhc2ggPSBoYXNoO1xufVxuXG5mdW5jdGlvbiBpc1VSTChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgJiYgL15cXHcrOlxcL1xcLy8udGVzdChwYXRoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJJKGhyZWYsIGJhc2UpIHtcbiAgcmV0dXJuIG5ldyBVUkxVdGlscyhocmVmLCBiYXNlKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVVSTChiYXNlLCBocmVmKSB7XG4gIGJhc2UgPSBiYXNlIHx8ICdodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYSMnO1xuXG4gIGhyZWYgPSBwYXJzZVVSSShocmVmLCBiYXNlKTtcbiAgYmFzZSA9IHBhcnNlVVJJKGJhc2UpO1xuXG4gIGlmIChiYXNlLmhhc2ggJiYgIWhyZWYuaGFzaCkge1xuICAgIHJldHVybiBocmVmLmhyZWYgKyBiYXNlLmhhc2g7XG4gIH1cblxuICByZXR1cm4gaHJlZi5ocmVmO1xufVxuXG5mdW5jdGlvbiBnZXREb2N1bWVudFVSSSh1cmkpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnICYmIHVyaS5zcGxpdCgnIycpWzBdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNVUkw6IGlzVVJMLFxuICBwYXJzZVVSSTogcGFyc2VVUkksXG4gIHJlc29sdmVVUkw6IHJlc29sdmVVUkwsXG4gIGdldERvY3VtZW50VVJJOiBnZXREb2N1bWVudFVSSVxufTtcbiIsIi8vcHJvdGVjdGVkIGhlbHBlciBjbGFzc1xuZnVuY3Rpb24gX1N1YlJhbmdlKGxvdywgaGlnaCkge1xuICAgIHRoaXMubG93ID0gbG93O1xuICAgIHRoaXMuaGlnaCA9IGhpZ2g7XG4gICAgdGhpcy5sZW5ndGggPSAxICsgaGlnaCAtIGxvdztcbn1cblxuX1N1YlJhbmdlLnByb3RvdHlwZS5vdmVybGFwcyA9IGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIHJldHVybiAhKHRoaXMuaGlnaCA8IHJhbmdlLmxvdyB8fCB0aGlzLmxvdyA+IHJhbmdlLmhpZ2gpO1xufTtcblxuX1N1YlJhbmdlLnByb3RvdHlwZS50b3VjaGVzID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgcmV0dXJuICEodGhpcy5oaWdoICsgMSA8IHJhbmdlLmxvdyB8fCB0aGlzLmxvdyAtIDEgPiByYW5nZS5oaWdoKTtcbn07XG5cbi8vcmV0dXJucyBpbmNsdXNpdmUgY29tYmluYXRpb24gb2YgX1N1YlJhbmdlcyBhcyBhIF9TdWJSYW5nZVxuX1N1YlJhbmdlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICByZXR1cm4gdGhpcy50b3VjaGVzKHJhbmdlKSAmJiBuZXcgX1N1YlJhbmdlKE1hdGgubWluKHRoaXMubG93LCByYW5nZS5sb3cpLCBNYXRoLm1heCh0aGlzLmhpZ2gsIHJhbmdlLmhpZ2gpKTtcbn07XG5cbi8vcmV0dXJucyBzdWJ0cmFjdGlvbiBvZiBfU3ViUmFuZ2VzIGFzIGFuIGFycmF5IG9mIF9TdWJSYW5nZXMgKHRoZXJlJ3MgYSBjYXNlIHdoZXJlIHN1YnRyYWN0aW9uIGRpdmlkZXMgaXQgaW4gMilcbl9TdWJSYW5nZS5wcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICBpZiAoIXRoaXMub3ZlcmxhcHMocmFuZ2UpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHJhbmdlLmxvdyA8PSB0aGlzLmxvdyAmJiByYW5nZS5oaWdoID49IHRoaXMuaGlnaCkgcmV0dXJuIFtdO1xuICAgIGlmIChyYW5nZS5sb3cgPiB0aGlzLmxvdyAmJiByYW5nZS5oaWdoIDwgdGhpcy5oaWdoKSByZXR1cm4gW25ldyBfU3ViUmFuZ2UodGhpcy5sb3csIHJhbmdlLmxvdyAtIDEpLCBuZXcgX1N1YlJhbmdlKHJhbmdlLmhpZ2ggKyAxLCB0aGlzLmhpZ2gpXTtcbiAgICBpZiAocmFuZ2UubG93IDw9IHRoaXMubG93KSByZXR1cm4gW25ldyBfU3ViUmFuZ2UocmFuZ2UuaGlnaCArIDEsIHRoaXMuaGlnaCldO1xuICAgIHJldHVybiBbbmV3IF9TdWJSYW5nZSh0aGlzLmxvdywgcmFuZ2UubG93IC0gMSldO1xufTtcblxuX1N1YlJhbmdlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5sb3cgPT0gdGhpcy5oaWdoKSByZXR1cm4gdGhpcy5sb3cudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5sb3cgKyAnLScgKyB0aGlzLmhpZ2g7XG59O1xuXG5fU3ViUmFuZ2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgX1N1YlJhbmdlKHRoaXMubG93LCB0aGlzLmhpZ2gpO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGlzY29udGludW91c1JhbmdlKGEsIGIpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIERpc2NvbnRpbnVvdXNSYW5nZSkge1xuICAgICAgICB0aGlzLnJhbmdlcyA9IFtdO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHRoaXMuYWRkKGEsIGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRGlzY29udGludW91c1JhbmdlKGEsIGIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX3VwZGF0ZV9sZW5ndGgoc2VsZikge1xuICAgIHNlbGYubGVuZ3RoID0gc2VsZi5yYW5nZXMucmVkdWNlKGZ1bmN0aW9uIChwcmV2aW91cywgcmFuZ2UpIHtyZXR1cm4gcHJldmlvdXMgKyByYW5nZS5sZW5ndGh9LCAwKTtcbn1cblxuRGlzY29udGludW91c1JhbmdlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBmdW5jdGlvbiBfYWRkKHN1YnJhbmdlKSB7XG4gICAgICAgIHZhciBuZXdfcmFuZ2VzID0gW107XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCBzZWxmLnJhbmdlcy5sZW5ndGggJiYgIXN1YnJhbmdlLnRvdWNoZXMoc2VsZi5yYW5nZXNbaV0pKSB7XG4gICAgICAgICAgICBuZXdfcmFuZ2VzLnB1c2goc2VsZi5yYW5nZXNbaV0uY2xvbmUoKSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGkgPCBzZWxmLnJhbmdlcy5sZW5ndGggJiYgc3VicmFuZ2UudG91Y2hlcyhzZWxmLnJhbmdlc1tpXSkpIHtcbiAgICAgICAgICAgIHN1YnJhbmdlID0gc3VicmFuZ2UuYWRkKHNlbGYucmFuZ2VzW2ldKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBuZXdfcmFuZ2VzLnB1c2goc3VicmFuZ2UpO1xuICAgICAgICB3aGlsZSAoaSA8IHNlbGYucmFuZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV3X3Jhbmdlcy5wdXNoKHNlbGYucmFuZ2VzW2ldLmNsb25lKCkpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYucmFuZ2VzID0gbmV3X3JhbmdlcztcbiAgICAgICAgX3VwZGF0ZV9sZW5ndGgoc2VsZik7XG4gICAgfVxuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEaXNjb250aW51b3VzUmFuZ2UpIHtcbiAgICAgICAgYS5yYW5nZXMuZm9yRWFjaChfYWRkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIF9TdWJSYW5nZSkge1xuICAgICAgICAgICAgX2FkZChhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChiID09PSB1bmRlZmluZWQpIGIgPSBhO1xuICAgICAgICAgICAgX2FkZChuZXcgX1N1YlJhbmdlKGEsIGIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbkRpc2NvbnRpbnVvdXNSYW5nZS5wcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBmdW5jdGlvbiBfc3VidHJhY3Qoc3VicmFuZ2UpIHtcbiAgICAgICAgdmFyIG5ld19yYW5nZXMgPSBbXTtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHNlbGYucmFuZ2VzLmxlbmd0aCAmJiAhc3VicmFuZ2Uub3ZlcmxhcHMoc2VsZi5yYW5nZXNbaV0pKSB7XG4gICAgICAgICAgICBuZXdfcmFuZ2VzLnB1c2goc2VsZi5yYW5nZXNbaV0uY2xvbmUoKSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGkgPCBzZWxmLnJhbmdlcy5sZW5ndGggJiYgc3VicmFuZ2Uub3ZlcmxhcHMoc2VsZi5yYW5nZXNbaV0pKSB7XG4gICAgICAgICAgICBuZXdfcmFuZ2VzID0gbmV3X3Jhbmdlcy5jb25jYXQoc2VsZi5yYW5nZXNbaV0uc3VidHJhY3Qoc3VicmFuZ2UpKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaSA8IHNlbGYucmFuZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV3X3Jhbmdlcy5wdXNoKHNlbGYucmFuZ2VzW2ldLmNsb25lKCkpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYucmFuZ2VzID0gbmV3X3JhbmdlcztcbiAgICAgICAgX3VwZGF0ZV9sZW5ndGgoc2VsZik7XG4gICAgfVxuICAgIGlmIChhIGluc3RhbmNlb2YgRGlzY29udGludW91c1JhbmdlKSB7XG4gICAgICAgIGEucmFuZ2VzLmZvckVhY2goX3N1YnRyYWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIF9TdWJSYW5nZSkge1xuICAgICAgICAgICAgX3N1YnRyYWN0KGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkgYiA9IGE7XG4gICAgICAgICAgICBfc3VidHJhY3QobmV3IF9TdWJSYW5nZShhLCBiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbkRpc2NvbnRpbnVvdXNSYW5nZS5wcm90b3R5cGUuaW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCB0aGlzLnJhbmdlcy5sZW5ndGggJiYgdGhpcy5yYW5nZXNbaV0ubGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIGluZGV4IC09IHRoaXMucmFuZ2VzW2ldLmxlbmd0aDtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICBpZiAoaSA+PSB0aGlzLnJhbmdlcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJhbmdlc1tpXS5sb3cgKyBpbmRleDtcbn07XG5cblxuRGlzY29udGludW91c1JhbmdlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ1sgJyArIHRoaXMucmFuZ2VzLmpvaW4oJywgJykgKyAnIF0nXG59O1xuXG5EaXNjb250aW51b3VzUmFuZ2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgRGlzY29udGludW91c1JhbmdlKHRoaXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBEaXNjb250aW51b3VzUmFuZ2U7XG4iLCIvKlxuICBDb3B5cmlnaHQgKGMpIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBDb250cmlidXRvcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLFxuICAgIC8vIFJoaW5vLCBhbmQgcGxhaW4gYnJvd3NlciBsb2FkaW5nLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZmFjdG9yeShleHBvcnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmYWN0b3J5KChyb290LmVzcHJpbWEgPSB7fSkpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgVG9rZW4sXG4gICAgICAgIFRva2VuTmFtZSxcbiAgICAgICAgRm5FeHByVG9rZW5zLFxuICAgICAgICBTeW50YXgsXG4gICAgICAgIFBsYWNlSG9sZGVycyxcbiAgICAgICAgTWVzc2FnZXMsXG4gICAgICAgIFJlZ2V4LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0cmljdCxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydCxcbiAgICAgICAgaGFzTGluZVRlcm1pbmF0b3IsXG4gICAgICAgIGxhc3RJbmRleCxcbiAgICAgICAgbGFzdExpbmVOdW1iZXIsXG4gICAgICAgIGxhc3RMaW5lU3RhcnQsXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0YXJ0TGluZU51bWJlcixcbiAgICAgICAgc3RhcnRMaW5lU3RhcnQsXG4gICAgICAgIHNjYW5uaW5nLFxuICAgICAgICBsZW5ndGgsXG4gICAgICAgIGxvb2thaGVhZCxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGV4dHJhLFxuICAgICAgICBpc0JpbmRpbmdFbGVtZW50LFxuICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQsXG4gICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjtcblxuICAgIFRva2VuID0ge1xuICAgICAgICBCb29sZWFuTGl0ZXJhbDogMSxcbiAgICAgICAgRU9GOiAyLFxuICAgICAgICBJZGVudGlmaWVyOiAzLFxuICAgICAgICBLZXl3b3JkOiA0LFxuICAgICAgICBOdWxsTGl0ZXJhbDogNSxcbiAgICAgICAgTnVtZXJpY0xpdGVyYWw6IDYsXG4gICAgICAgIFB1bmN0dWF0b3I6IDcsXG4gICAgICAgIFN0cmluZ0xpdGVyYWw6IDgsXG4gICAgICAgIFJlZ3VsYXJFeHByZXNzaW9uOiA5LFxuICAgICAgICBUZW1wbGF0ZTogMTBcbiAgICB9O1xuXG4gICAgVG9rZW5OYW1lID0ge307XG4gICAgVG9rZW5OYW1lW1Rva2VuLkJvb2xlYW5MaXRlcmFsXSA9ICdCb29sZWFuJztcbiAgICBUb2tlbk5hbWVbVG9rZW4uRU9GXSA9ICc8ZW5kPic7XG4gICAgVG9rZW5OYW1lW1Rva2VuLklkZW50aWZpZXJdID0gJ0lkZW50aWZpZXInO1xuICAgIFRva2VuTmFtZVtUb2tlbi5LZXl3b3JkXSA9ICdLZXl3b3JkJztcbiAgICBUb2tlbk5hbWVbVG9rZW4uTnVsbExpdGVyYWxdID0gJ051bGwnO1xuICAgIFRva2VuTmFtZVtUb2tlbi5OdW1lcmljTGl0ZXJhbF0gPSAnTnVtZXJpYyc7XG4gICAgVG9rZW5OYW1lW1Rva2VuLlB1bmN0dWF0b3JdID0gJ1B1bmN0dWF0b3InO1xuICAgIFRva2VuTmFtZVtUb2tlbi5TdHJpbmdMaXRlcmFsXSA9ICdTdHJpbmcnO1xuICAgIFRva2VuTmFtZVtUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbl0gPSAnUmVndWxhckV4cHJlc3Npb24nO1xuICAgIFRva2VuTmFtZVtUb2tlbi5UZW1wbGF0ZV0gPSAnVGVtcGxhdGUnO1xuXG4gICAgLy8gQSBmdW5jdGlvbiBmb2xsb3dpbmcgb25lIG9mIHRob3NlIHRva2VucyBpcyBhbiBleHByZXNzaW9uLlxuICAgIEZuRXhwclRva2VucyA9IFsnKCcsICd7JywgJ1snLCAnaW4nLCAndHlwZW9mJywgJ2luc3RhbmNlb2YnLCAnbmV3JyxcbiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsICdjYXNlJywgJ2RlbGV0ZScsICd0aHJvdycsICd2b2lkJyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnNcbiAgICAgICAgICAgICAgICAgICAgJz0nLCAnKz0nLCAnLT0nLCAnKj0nLCAnLz0nLCAnJT0nLCAnPDw9JywgJz4+PScsICc+Pj49JyxcbiAgICAgICAgICAgICAgICAgICAgJyY9JywgJ3w9JywgJ149JywgJywnLFxuICAgICAgICAgICAgICAgICAgICAvLyBiaW5hcnkvdW5hcnkgb3BlcmF0b3JzXG4gICAgICAgICAgICAgICAgICAgICcrJywgJy0nLCAnKicsICcvJywgJyUnLCAnKysnLCAnLS0nLCAnPDwnLCAnPj4nLCAnPj4+JywgJyYnLFxuICAgICAgICAgICAgICAgICAgICAnfCcsICdeJywgJyEnLCAnficsICcmJicsICd8fCcsICc/JywgJzonLCAnPT09JywgJz09JywgJz49JyxcbiAgICAgICAgICAgICAgICAgICAgJzw9JywgJzwnLCAnPicsICchPScsICchPT0nXTtcblxuICAgIFN5bnRheCA9IHtcbiAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsXG4gICAgICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiAnQXNzaWdubWVudFBhdHRlcm4nLFxuICAgICAgICBBcnJheUV4cHJlc3Npb246ICdBcnJheUV4cHJlc3Npb24nLFxuICAgICAgICBBcnJheVBhdHRlcm46ICdBcnJheVBhdHRlcm4nLFxuICAgICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJyxcbiAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsXG4gICAgICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLFxuICAgICAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJyxcbiAgICAgICAgQ2xhc3NCb2R5OiAnQ2xhc3NCb2R5JyxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICBDbGFzc0V4cHJlc3Npb246ICdDbGFzc0V4cHJlc3Npb24nLFxuICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLFxuICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50JyxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLFxuICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JyxcbiAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsXG4gICAgICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiAnRXhwb3J0QWxsRGVjbGFyYXRpb24nLFxuICAgICAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nLFxuICAgICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydFNwZWNpZmllcjogJ0V4cG9ydFNwZWNpZmllcicsXG4gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50JyxcbiAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JyxcbiAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6ICdGb3JPZlN0YXRlbWVudCcsXG4gICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0ZW1lbnQnLFxuICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbicsXG4gICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsXG4gICAgICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsXG4gICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiAnSW1wb3J0RGVjbGFyYXRpb24nLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydFNwZWNpZmllcjogJ0ltcG9ydFNwZWNpZmllcicsXG4gICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJyxcbiAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHByZXNzaW9uJyxcbiAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLFxuICAgICAgICBNZXRhUHJvcGVydHk6ICdNZXRhUHJvcGVydHknLFxuICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsXG4gICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJyxcbiAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLFxuICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0UGF0dGVybicsXG4gICAgICAgIFByb2dyYW06ICdQcm9ncmFtJyxcbiAgICAgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsXG4gICAgICAgIFJlc3RFbGVtZW50OiAnUmVzdEVsZW1lbnQnLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLFxuICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLFxuICAgICAgICBTcHJlYWRFbGVtZW50OiAnU3ByZWFkRWxlbWVudCcsXG4gICAgICAgIFN1cGVyOiAnU3VwZXInLFxuICAgICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsXG4gICAgICAgIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogJ1RhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbicsXG4gICAgICAgIFRlbXBsYXRlRWxlbWVudDogJ1RlbXBsYXRlRWxlbWVudCcsXG4gICAgICAgIFRlbXBsYXRlTGl0ZXJhbDogJ1RlbXBsYXRlTGl0ZXJhbCcsXG4gICAgICAgIFRoaXNFeHByZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLFxuICAgICAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3RhdGVtZW50JyxcbiAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50JyxcbiAgICAgICAgVW5hcnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJyxcbiAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLFxuICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiAnVmFyaWFibGVEZWNsYXJhdGlvbicsXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1ZhcmlhYmxlRGVjbGFyYXRvcicsXG4gICAgICAgIFdoaWxlU3RhdGVtZW50OiAnV2hpbGVTdGF0ZW1lbnQnLFxuICAgICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcsXG4gICAgICAgIFlpZWxkRXhwcmVzc2lvbjogJ1lpZWxkRXhwcmVzc2lvbidcbiAgICB9O1xuXG4gICAgUGxhY2VIb2xkZXJzID0ge1xuICAgICAgICBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyOiAnQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcidcbiAgICB9O1xuXG4gICAgLy8gRXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOC5cbiAgICBNZXNzYWdlcyA9IHtcbiAgICAgICAgVW5leHBlY3RlZFRva2VuOiAnVW5leHBlY3RlZCB0b2tlbiAlMCcsXG4gICAgICAgIFVuZXhwZWN0ZWROdW1iZXI6ICdVbmV4cGVjdGVkIG51bWJlcicsXG4gICAgICAgIFVuZXhwZWN0ZWRTdHJpbmc6ICdVbmV4cGVjdGVkIHN0cmluZycsXG4gICAgICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiAnVW5leHBlY3RlZCBpZGVudGlmaWVyJyxcbiAgICAgICAgVW5leHBlY3RlZFJlc2VydmVkOiAnVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkJyxcbiAgICAgICAgVW5leHBlY3RlZFRlbXBsYXRlOiAnVW5leHBlY3RlZCBxdWFzaSAlMCcsXG4gICAgICAgIFVuZXhwZWN0ZWRFT1M6ICdVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCcsXG4gICAgICAgIE5ld2xpbmVBZnRlclRocm93OiAnSWxsZWdhbCBuZXdsaW5lIGFmdGVyIHRocm93JyxcbiAgICAgICAgSW52YWxpZFJlZ0V4cDogJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uJyxcbiAgICAgICAgVW50ZXJtaW5hdGVkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IG1pc3NpbmcgLycsXG4gICAgICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnQnLFxuICAgICAgICBJbnZhbGlkTEhTSW5Gb3JJbjogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluJyxcbiAgICAgICAgSW52YWxpZExIU0luRm9yTG9vcDogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWxvb3AnLFxuICAgICAgICBNdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2g6ICdNb3JlIHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGluIHN3aXRjaCBzdGF0ZW1lbnQnLFxuICAgICAgICBOb0NhdGNoT3JGaW5hbGx5OiAnTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeScsXG4gICAgICAgIFVua25vd25MYWJlbDogJ1VuZGVmaW5lZCBsYWJlbCBcXCclMFxcJycsXG4gICAgICAgIFJlZGVjbGFyYXRpb246ICclMCBcXCclMVxcJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkJyxcbiAgICAgICAgSWxsZWdhbENvbnRpbnVlOiAnSWxsZWdhbCBjb250aW51ZSBzdGF0ZW1lbnQnLFxuICAgICAgICBJbGxlZ2FsQnJlYWs6ICdJbGxlZ2FsIGJyZWFrIHN0YXRlbWVudCcsXG4gICAgICAgIElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnQnLFxuICAgICAgICBTdHJpY3RNb2RlV2l0aDogJ1N0cmljdCBtb2RlIGNvZGUgbWF5IG5vdCBpbmNsdWRlIGEgd2l0aCBzdGF0ZW1lbnQnLFxuICAgICAgICBTdHJpY3RDYXRjaFZhcmlhYmxlOiAnQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsXG4gICAgICAgIFN0cmljdFZhck5hbWU6ICdWYXJpYWJsZSBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLFxuICAgICAgICBTdHJpY3RQYXJhbU5hbWU6ICdQYXJhbWV0ZXIgbmFtZSBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsXG4gICAgICAgIFN0cmljdFBhcmFtRHVwZTogJ1N0cmljdCBtb2RlIGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzJyxcbiAgICAgICAgU3RyaWN0RnVuY3Rpb25OYW1lOiAnRnVuY3Rpb24gbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJyxcbiAgICAgICAgU3RyaWN0T2N0YWxMaXRlcmFsOiAnT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLicsXG4gICAgICAgIFN0cmljdERlbGV0ZTogJ0RlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLicsXG4gICAgICAgIFN0cmljdExIU0Fzc2lnbm1lbnQ6ICdBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJyxcbiAgICAgICAgU3RyaWN0TEhTUG9zdGZpeDogJ1Bvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsXG4gICAgICAgIFN0cmljdExIU1ByZWZpeDogJ1ByZWZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJyxcbiAgICAgICAgU3RyaWN0UmVzZXJ2ZWRXb3JkOiAnVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBtb2RlJyxcbiAgICAgICAgVGVtcGxhdGVPY3RhbExpdGVyYWw6ICdPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gdGVtcGxhdGUgc3RyaW5ncy4nLFxuICAgICAgICBQYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXI6ICdSZXN0IHBhcmFtZXRlciBtdXN0IGJlIGxhc3QgZm9ybWFsIHBhcmFtZXRlcicsXG4gICAgICAgIERlZmF1bHRSZXN0UGFyYW1ldGVyOiAnVW5leHBlY3RlZCB0b2tlbiA9JyxcbiAgICAgICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjogJ1VuZXhwZWN0ZWQgdG9rZW4geycsXG4gICAgICAgIER1cGxpY2F0ZVByb3RvUHJvcGVydHk6ICdEdXBsaWNhdGUgX19wcm90b19fIGZpZWxkcyBhcmUgbm90IGFsbG93ZWQgaW4gb2JqZWN0IGxpdGVyYWxzJyxcbiAgICAgICAgQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kOiAnQ2xhc3MgY29uc3RydWN0b3IgbWF5IG5vdCBiZSBhbiBhY2Nlc3NvcicsXG4gICAgICAgIER1cGxpY2F0ZUNvbnN0cnVjdG9yOiAnQSBjbGFzcyBtYXkgb25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvcicsXG4gICAgICAgIFN0YXRpY1Byb3RvdHlwZTogJ0NsYXNzZXMgbWF5IG5vdCBoYXZlIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBwcm90b3R5cGUnLFxuICAgICAgICBNaXNzaW5nRnJvbUNsYXVzZTogJ1VuZXhwZWN0ZWQgdG9rZW4nLFxuICAgICAgICBOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6ICdVbmV4cGVjdGVkIHRva2VuJyxcbiAgICAgICAgSW52YWxpZE1vZHVsZVNwZWNpZmllcjogJ1VuZXhwZWN0ZWQgdG9rZW4nLFxuICAgICAgICBJbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb246ICdVbmV4cGVjdGVkIHRva2VuJyxcbiAgICAgICAgSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uOiAnVW5leHBlY3RlZCB0b2tlbicsXG4gICAgICAgIER1cGxpY2F0ZUJpbmRpbmc6ICdEdXBsaWNhdGUgYmluZGluZyAlMCdcbiAgICB9O1xuXG4gICAgLy8gU2VlIGFsc28gdG9vbHMvZ2VuZXJhdGUtdW5pY29kZS1yZWdleC5qcy5cbiAgICBSZWdleCA9IHtcbiAgICAgICAgLy8gRUNNQVNjcmlwdCA2L1VuaWNvZGUgdjcuMC4wIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OlxuICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogL1tcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTAtXFx1MDhCMlxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OFxcdTBDNTlcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ2MFxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlDMS1cXHUxOUM3XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YxXFx1MUNGNVxcdTFDRjZcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE4LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlCLVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFRlxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTdBRFxcdUE3QjBcXHVBN0IxXFx1QTdGNy1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNUZcXHVBQjY0XFx1QUI2NVxcdUFCQzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ118XFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdURENDAtXFx1REQ3NFxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURGMDAtXFx1REYxRlxcdURGMzAtXFx1REY0QVxcdURGNTAtXFx1REY3NVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRlxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzM1xcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhdfFxcdUQ4MDRbXFx1REMwMy1cXHVEQzM3XFx1REM4My1cXHVEQ0FGXFx1RENEMC1cXHVEQ0U4XFx1REQwMy1cXHVERDI2XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXXxcXHVEODA2W1xcdURDQTAtXFx1RENERlxcdURDRkZcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk4XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RV18W1xcdUQ4MENcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNdW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REVEMC1cXHVERUVEXFx1REYwMC1cXHVERjJGXFx1REY0MC1cXHVERjQzXFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURGMDAtXFx1REY0NFxcdURGNTBcXHVERjkzLVxcdURGOUZdfFxcdUQ4MkNbXFx1REMwMFxcdURDMDFdfFxcdUQ4MkZbXFx1REMwMC1cXHVEQzZBXFx1REM3MC1cXHVEQzdDXFx1REM4MC1cXHVEQzg4XFx1REM5MC1cXHVEQzk5XXxcXHVEODM1W1xcdURDMDAtXFx1REM1NFxcdURDNTYtXFx1REM5Q1xcdURDOUVcXHVEQzlGXFx1RENBMlxcdURDQTVcXHVEQ0E2XFx1RENBOS1cXHVEQ0FDXFx1RENBRS1cXHVEQ0I5XFx1RENCQlxcdURDQkQtXFx1RENDM1xcdURDQzUtXFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMUUtXFx1REQzOVxcdUREM0ItXFx1REQzRVxcdURENDAtXFx1REQ0NFxcdURENDZcXHVERDRBLVxcdURENTBcXHVERDUyLVxcdURFQTVcXHVERUE4LVxcdURFQzBcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRkFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMzRcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNkVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGQThcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQ0JdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XXxcXHVEODNCW1xcdURFMDAtXFx1REUwM1xcdURFMDUtXFx1REUxRlxcdURFMjFcXHVERTIyXFx1REUyNFxcdURFMjdcXHVERTI5LVxcdURFMzJcXHVERTM0LVxcdURFMzdcXHVERTM5XFx1REUzQlxcdURFNDJcXHVERTQ3XFx1REU0OVxcdURFNEJcXHVERTRELVxcdURFNEZcXHVERTUxXFx1REU1MlxcdURFNTRcXHVERTU3XFx1REU1OVxcdURFNUJcXHVERTVEXFx1REU1RlxcdURFNjFcXHVERTYyXFx1REU2NFxcdURFNjctXFx1REU2QVxcdURFNkMtXFx1REU3MlxcdURFNzQtXFx1REU3N1xcdURFNzktXFx1REU3Q1xcdURFN0VcXHVERTgwLVxcdURFODlcXHVERThCLVxcdURFOUJcXHVERUExLVxcdURFQTNcXHVERUE1LVxcdURFQTlcXHVERUFCLVxcdURFQkJdfFxcdUQ4NjlbXFx1REMwMC1cXHVERUQ2XFx1REYwMC1cXHVERkZGXXxcXHVEODZEW1xcdURDMDAtXFx1REYzNFxcdURGNDAtXFx1REZGRl18XFx1RDg2RVtcXHVEQzAwLVxcdURDMURdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXS8sXG5cbiAgICAgICAgLy8gRUNNQVNjcmlwdCA2L1VuaWNvZGUgdjcuMC4wIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6XG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IC9bXFx4QUFcXHhCNVxceEI3XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDMwMC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4Ni1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0ODMtXFx1MDQ4N1xcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjEwLVxcdTA2MUFcXHUwNjIwLVxcdTA2NjlcXHUwNjZFLVxcdTA2RDNcXHUwNkQ1LVxcdTA2RENcXHUwNkRGLVxcdTA2RThcXHUwNkVBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMC1cXHUwNzRBXFx1MDc0RC1cXHUwN0IxXFx1MDdDMC1cXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgyRFxcdTA4NDAtXFx1MDg1QlxcdTA4QTAtXFx1MDhCMlxcdTA4RTQtXFx1MDk2M1xcdTA5NjYtXFx1MDk2RlxcdTA5NzEtXFx1MDk4M1xcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkMtXFx1MDlDNFxcdTA5QzdcXHUwOUM4XFx1MDlDQi1cXHUwOUNFXFx1MDlEN1xcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUzXFx1MDlFNi1cXHUwOUYxXFx1MEEwMS1cXHUwQTAzXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNjYtXFx1MEE3NVxcdTBBODEtXFx1MEE4M1xcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCQy1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFEMFxcdTBBRTAtXFx1MEFFM1xcdTBBRTYtXFx1MEFFRlxcdTBCMDEtXFx1MEIwM1xcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNDLVxcdTBCNDRcXHUwQjQ3XFx1MEI0OFxcdTBCNEItXFx1MEI0RFxcdTBCNTZcXHUwQjU3XFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjNcXHUwQjY2LVxcdTBCNkZcXHUwQjcxXFx1MEI4MlxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJCRS1cXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNEXFx1MEJEMFxcdTBCRDdcXHUwQkU2LVxcdTBCRUZcXHUwQzAwLVxcdTBDMDNcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNELVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNThcXHUwQzU5XFx1MEM2MC1cXHUwQzYzXFx1MEM2Ni1cXHUwQzZGXFx1MEM4MS1cXHUwQzgzXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCQy1cXHUwQ0M0XFx1MENDNi1cXHUwQ0M4XFx1MENDQS1cXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0RFXFx1MENFMC1cXHUwQ0UzXFx1MENFNi1cXHUwQ0VGXFx1MENGMVxcdTBDRjJcXHUwRDAxLVxcdTBEMDNcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNELVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU3XFx1MEQ2MC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREU2LVxcdTBERUZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM2OS1cXHUxMzcxXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5REFcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUFCMC1cXHUxQUJEXFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y2XFx1MUNGOFxcdTFDRjlcXHUxRDAwLVxcdTFERjVcXHUxREZDLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjAwQ1xcdTIwMERcXHUyMDNGXFx1MjA0MFxcdTIwNTRcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRjBcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE4LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ3Ri1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkRFMC1cXHUyREZGXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5OS1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkNDXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjJCXFx1QTY0MC1cXHVBNjZGXFx1QTY3NC1cXHVBNjdEXFx1QTY3Ri1cXHVBNjlEXFx1QTY5Ri1cXHVBNkYxXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0FEXFx1QTdCMFxcdUE3QjFcXHVBN0Y3LVxcdUE4MjdcXHVBODQwLVxcdUE4NzNcXHVBODgwLVxcdUE4QzRcXHVBOEQwLVxcdUE4RDlcXHVBOEUwLVxcdUE4RjdcXHVBOEZCXFx1QTkwMC1cXHVBOTJEXFx1QTkzMC1cXHVBOTUzXFx1QTk2MC1cXHVBOTdDXFx1QTk4MC1cXHVBOUMwXFx1QTlDRi1cXHVBOUQ5XFx1QTlFMC1cXHVBOUZFXFx1QUEwMC1cXHVBQTM2XFx1QUE0MC1cXHVBQTREXFx1QUE1MC1cXHVBQTU5XFx1QUE2MC1cXHVBQTc2XFx1QUE3QS1cXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVGXFx1QUFGMi1cXHVBQUY2XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjVGXFx1QUI2NFxcdUFCNjVcXHVBQkMwLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUFCRjAtXFx1QUJGOVxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMUQtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTJEXFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjEwLVxcdUZGMTlcXHVGRjIxLVxcdUZGM0FcXHVGRjNGXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REQ0MC1cXHVERDc0XFx1RERGRFxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURFRTBcXHVERjAwLVxcdURGMUZcXHVERjMwLVxcdURGNEFcXHVERjUwLVxcdURGN0FcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENBMC1cXHVEQ0E5XFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDAtXFx1REUwM1xcdURFMDVcXHVERTA2XFx1REUwQy1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTMzXFx1REUzOC1cXHVERTNBXFx1REUzRlxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNlxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzQ2XFx1REM2Ni1cXHVEQzZGXFx1REM3Ri1cXHVEQ0JBXFx1RENEMC1cXHVEQ0U4XFx1RENGMC1cXHVEQ0Y5XFx1REQwMC1cXHVERDM0XFx1REQzNi1cXHVERDNGXFx1REQ1MC1cXHVERDczXFx1REQ3NlxcdUREODAtXFx1RERDNFxcdURERDAtXFx1REREQVxcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUzN1xcdURFQjAtXFx1REVFQVxcdURFRjAtXFx1REVGOVxcdURGMDEtXFx1REYwM1xcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNDLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjVELVxcdURGNjNcXHVERjY2LVxcdURGNkNcXHVERjcwLVxcdURGNzRdfFxcdUQ4MDVbXFx1REM4MC1cXHVEQ0M1XFx1RENDN1xcdURDRDAtXFx1RENEOVxcdUREODAtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURFMDAtXFx1REU0MFxcdURFNDRcXHVERTUwLVxcdURFNTlcXHVERTgwLVxcdURFQjdcXHVERUMwLVxcdURFQzldfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0U5XFx1RENGRlxcdURFQzAtXFx1REVGOF18XFx1RDgwOFtcXHVEQzAwLVxcdURGOThdfFxcdUQ4MDlbXFx1REMwMC1cXHVEQzZFXXxbXFx1RDgwQ1xcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q11bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERTYwLVxcdURFNjlcXHVERUQwLVxcdURFRURcXHVERUYwLVxcdURFRjRcXHVERjAwLVxcdURGMzZcXHVERjQwLVxcdURGNDNcXHVERjUwLVxcdURGNTlcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REYwMC1cXHVERjQ0XFx1REY1MC1cXHVERjdFXFx1REY4Ri1cXHVERjlGXXxcXHVEODJDW1xcdURDMDBcXHVEQzAxXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OVxcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NF18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXFx1REZDRS1cXHVERkZGXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdURDRDAtXFx1RENENl18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF18XFx1REI0MFtcXHVERDAwLVxcdURERUZdL1xuICAgIH07XG5cbiAgICAvLyBFbnN1cmUgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3IuXG4gICAgLy8gVGhpcyBpcyBvbmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29udHJhY3Qgc2VtYW50aWMsIGkuZS4gYW5vdGhlciBzYWZldHkgbmV0XG4gICAgLy8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4gVGhlIGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2UuXG4gICAgLy8gRG8gTk9UIHVzZSB0aGlzIHRvIGVuZm9yY2UgYSBjZXJ0YWluIGNvbmRpdGlvbiBvbiBhbnkgdXNlciBpbnB1dC5cblxuICAgIGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FTU0VSVDogJyArIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpOyAgIC8vIDAuLjlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7XG4gICAgICAgIHJldHVybiAnMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHtcbiAgICAgICAgcmV0dXJuICcwMTIzNDU2NycuaW5kZXhPZihjaCkgPj0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvY3RhbFRvRGVjaW1hbChjaCkge1xuICAgICAgICAvLyBcXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICB2YXIgb2N0YWwgPSAoY2ggIT09ICcwJyksIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpO1xuXG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pO1xuXG4gICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0c1xuICAgICAgICAgICAgLy8gd2l0aCAwLCAxLCAyLCAzXG4gICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZTogY29kZSxcbiAgICAgICAgICAgIG9jdGFsOiBvY3RhbFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDExLjIgV2hpdGUgU3BhY2VcblxuICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDIwKSB8fCAoY2ggPT09IDB4MDkpIHx8IChjaCA9PT0gMHgwQikgfHwgKGNoID09PSAweDBDKSB8fCAoY2ggPT09IDB4QTApIHx8XG4gICAgICAgICAgICAoY2ggPj0gMHgxNjgwICYmIFsweDE2ODAsIDB4MTgwRSwgMHgyMDAwLCAweDIwMDEsIDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgyMDA2LCAweDIwMDcsIDB4MjAwOCwgMHgyMDA5LCAweDIwMEEsIDB4MjAyRiwgMHgyMDVGLCAweDMwMDAsIDB4RkVGRl0uaW5kZXhPZihjaCkgPj0gMCk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTEuMyBMaW5lIFRlcm1pbmF0b3JzXG5cbiAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8IChjaCA9PT0gMHgyMDI5KTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMS42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KGNwKSB7XG4gICAgICAgIHJldHVybiAoY3AgPCAweDEwMDAwKSA/IFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApIDpcbiAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODAwICsgKChjcCAtIDB4MTAwMDApID4+IDEwKSkgK1xuICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgKyAoKGNwIC0gMHgxMDAwMCkgJiAxMDIzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFxcIChiYWNrc2xhc2gpXG4gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoZnJvbUNvZGVQb2ludChjaCkpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJQYXJ0KGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpXG4gICAgICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBKSB8fCAgICAgICAgIC8vIEEuLlpcbiAgICAgICAgICAgIChjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uelxuICAgICAgICAgICAgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSkgfHwgICAgICAgICAvLyAwLi45XG4gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFxcIChiYWNrc2xhc2gpXG4gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChmcm9tQ29kZVBvaW50KGNoKSkpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDExLjYuMi4yIEZ1dHVyZSBSZXNlcnZlZCBXb3Jkc1xuXG4gICAgZnVuY3Rpb24gaXNGdXR1cmVSZXNlcnZlZFdvcmQoaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgY2FzZSAnZXhwb3J0JzpcbiAgICAgICAgY2FzZSAnaW1wb3J0JzpcbiAgICAgICAgY2FzZSAnc3VwZXInOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICBjYXNlICdpbXBsZW1lbnRzJzpcbiAgICAgICAgY2FzZSAnaW50ZXJmYWNlJzpcbiAgICAgICAgY2FzZSAncGFja2FnZSc6XG4gICAgICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgICBjYXNlICdwcm90ZWN0ZWQnOlxuICAgICAgICBjYXNlICdwdWJsaWMnOlxuICAgICAgICBjYXNlICdzdGF0aWMnOlxuICAgICAgICBjYXNlICd5aWVsZCc6XG4gICAgICAgIGNhc2UgJ2xldCc6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzdHJpY3RlZFdvcmQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcgfHwgaWQgPT09ICdhcmd1bWVudHMnO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDExLjYuMi4xIEtleXdvcmRzXG5cbiAgICBmdW5jdGlvbiBpc0tleXdvcmQoaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09ICdkbycpO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFyJykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICd0cnknKSB8fCAoaWQgPT09ICdsZXQnKTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2FzZScpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAnY2F0Y2gnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09PSAnZGVsZXRlJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5JykgfHwgKGlkID09PSAnZXh0ZW5kcycpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVnZ2VyJyk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaW5zdGFuY2VvZicpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTEuNCBDb21tZW50c1xuXG4gICAgZnVuY3Rpb24gYWRkQ29tbWVudCh0eXBlLCB2YWx1ZSwgc3RhcnQsIGVuZCwgbG9jKSB7XG4gICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgIGFzc2VydCh0eXBlb2Ygc3RhcnQgPT09ICdudW1iZXInLCAnQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb24nKTtcblxuICAgICAgICBzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID0gc3RhcnQ7XG5cbiAgICAgICAgY29tbWVudCA9IHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgICAgICBjb21tZW50LnJhbmdlID0gW3N0YXJ0LCBlbmRdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgICAgIGNvbW1lbnQubG9jID0gbG9jO1xuICAgICAgICB9XG4gICAgICAgIGV4dHJhLmNvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7XG4gICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHtcbiAgICAgICAgICAgIGNvbW1lbnQudHlwZSA9IGNvbW1lbnQudHlwZSArICdDb21tZW50JztcbiAgICAgICAgICAgIGlmIChleHRyYS5kZWxlZ2F0ZSkge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBleHRyYS5kZWxlZ2F0ZShjb21tZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2tpcFNpbmdsZUxpbmVDb21tZW50KG9mZnNldCkge1xuICAgICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7XG5cbiAgICAgICAgc3RhcnQgPSBpbmRleCAtIG9mZnNldDtcbiAgICAgICAgbG9jID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSBvZmZzZXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgICAgIGhhc0xpbmVUZXJtaW5hdG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGluZGV4IC0gMSwgbG9jKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAxMyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGluZGV4KTtcbiAgICAgICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNraXBNdWx0aUxpbmVDb21tZW50KCkge1xuICAgICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7XG5cbiAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7XG4gICAgICAgICAgICBzdGFydCA9IGluZGV4IC0gMjtcbiAgICAgICAgICAgIGxvYyA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MEEpIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaGFzTGluZVRlcm1pbmF0b3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkge1xuICAgICAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoICcqLycuXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MkYpIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgMiwgaW5kZXggLSAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29tbWVudCgnQmxvY2snLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmFuIG9mZiB0aGUgZW5kIG9mIHRoZSBmaWxlIC0gdGhlIHdob2xlIHRoaW5nIGlzIGEgY29tbWVudFxuICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIDIsIGluZGV4KTtcbiAgICAgICAgICAgIGFkZENvbW1lbnQoJ0Jsb2NrJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpO1xuICAgICAgICB9XG4gICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2tpcENvbW1lbnQoKSB7XG4gICAgICAgIHZhciBjaCwgc3RhcnQ7XG4gICAgICAgIGhhc0xpbmVUZXJtaW5hdG9yID0gZmFsc2U7XG5cbiAgICAgICAgc3RhcnQgPSAoaW5kZXggPT09IDApO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICAgICAgaGFzTGluZVRlcm1pbmF0b3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgwQSkge1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgJy8nXG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikge1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMik7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7ICAvLyBVKzAwMkEgaXMgJyonXG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHNraXBNdWx0aUxpbmVDb21tZW50KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCAmJiBjaCA9PT0gMHgyRCkgeyAvLyBVKzAwMkQgaXMgJy0nXG4gICAgICAgICAgICAgICAgLy8gVSswMDNFIGlzICc+J1xuICAgICAgICAgICAgICAgIGlmICgoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRCkgJiYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4M0UpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICctLT4nIGlzIGEgc2luZ2xlLWxpbmUgY29tbWVudFxuICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzQykgeyAvLyBVKzAwM0MgaXMgJzwnXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShpbmRleCArIDEsIGluZGV4ICsgNCkgPT09ICchLS0nKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGA8YFxuICAgICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgIWBcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gXG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYFxuICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7XG4gICAgICAgIHZhciBpLCBsZW4sIGNoLCBjb2RlID0gMDtcblxuICAgICAgICBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAxMjM0NTY3ODlhYmNkZWYnLmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpIHtcbiAgICAgICAgdmFyIGNoLCBjb2RlO1xuXG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgY29kZSA9IDA7XG5cbiAgICAgICAgLy8gQXQgbGVhc3QsIG9uZSBoZXggZGlnaXQgaXMgcmVxdWlyZWQuXG4gICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIGlmICghaXNIZXhEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09ICd9Jykge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcm9tQ29kZVBvaW50KGNvZGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvZGVQb2ludEF0KGkpIHtcbiAgICAgICAgdmFyIGNwLCBmaXJzdCwgc2Vjb25kO1xuXG4gICAgICAgIGNwID0gc291cmNlLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjcCA+PSAweEQ4MDAgJiYgY3AgPD0gMHhEQkZGKSB7XG4gICAgICAgICAgICBzZWNvbmQgPSBzb3VyY2UuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBjcDtcbiAgICAgICAgICAgICAgICBjcCA9IChmaXJzdCAtIDB4RDgwMCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3A7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q29tcGxleElkZW50aWZpZXIoKSB7XG4gICAgICAgIHZhciBjcCwgY2gsIGlkO1xuXG4gICAgICAgIGNwID0gY29kZVBvaW50QXQoaW5kZXgpO1xuICAgICAgICBpZCA9IGZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICBpbmRleCArPSBpZC5sZW5ndGg7XG5cbiAgICAgICAgLy8gJ1xcdScgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICBpZiAoY3AgPT09IDB4NUMpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIGNoID0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7XG4gICAgICAgICAgICAgICAgY3AgPSBjaC5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXFxcJyB8fCAhaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQgPSBjaDtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY3AgPSBjb2RlUG9pbnRBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY3ApKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaCA9IGZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgaWQgKz0gY2g7XG4gICAgICAgICAgICBpbmRleCArPSBjaC5sZW5ndGg7XG5cbiAgICAgICAgICAgIC8vICdcXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgICAgICAgIGlmIChjcCA9PT0gMHg1Qykge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGNoID0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTtcbiAgICAgICAgICAgICAgICAgICAgY3AgPSBjaC5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFxcXCcgfHwgIWlzSWRlbnRpZmllclBhcnQoY3ApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlkICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElkZW50aWZpZXIoKSB7XG4gICAgICAgIHZhciBzdGFydCwgY2g7XG5cbiAgICAgICAgc3RhcnQgPSBpbmRleCsrO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgICAgICAgICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICBpbmRleCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb21wbGV4SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAweEQ4MDAgJiYgY2ggPCAweERGRkYpIHtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGhhbmRsZSBzdXJyb2dhdGUgcGFpcnMuXG4gICAgICAgICAgICAgICAgaW5kZXggPSBzdGFydDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcGxleElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJQYXJ0KGNoKSkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkge1xuICAgICAgICB2YXIgc3RhcnQsIGlkLCB0eXBlO1xuXG4gICAgICAgIHN0YXJ0ID0gaW5kZXg7XG5cbiAgICAgICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgICAgaWQgPSAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDVDKSA/IGdldENvbXBsZXhJZGVudGlmaWVyKCkgOiBnZXRJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLlxuICAgICAgICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50aWZpZXIuXG4gICAgICAgIGlmIChpZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyO1xuICAgICAgICB9IGVsc2UgaWYgKGlzS2V5d29yZChpZCkpIHtcbiAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5LZXl3b3JkO1xuICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5OdWxsTGl0ZXJhbDtcbiAgICAgICAgfSBlbHNlIGlmIChpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICB0eXBlID0gVG9rZW4uQm9vbGVhbkxpdGVyYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgdmFsdWU6IGlkLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgLy8gRUNNQS0yNjIgMTEuNyBQdW5jdHVhdG9yc1xuXG4gICAgZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7XG4gICAgICAgIHZhciB0b2tlbiwgc3RyO1xuXG4gICAgICAgIHRva2VuID0ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHN0YXJ0OiBpbmRleCxcbiAgICAgICAgICAgIGVuZDogaW5kZXhcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDaGVjayBmb3IgbW9zdCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy5cbiAgICAgICAgc3RyID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgc3dpdGNoIChzdHIpIHtcblxuICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSkge1xuICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gZXh0cmEudG9rZW5WYWx1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7XG4gICAgICAgICAgICAgICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSBleHRyYS50b2tlblZhbHVlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnB1c2goJ3snKTtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJy4nICYmIHNvdXJjZVtpbmRleCArIDFdID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICAvLyBTcHJlYWQgb3BlcmF0b3I6IC4uLlxuICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICAgICAgc3RyID0gJy4uLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJyknOlxuICAgICAgICBjYXNlICc7JzpcbiAgICAgICAgY2FzZSAnLCc6XG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICBjYXNlICddJzpcbiAgICAgICAgY2FzZSAnOic6XG4gICAgICAgIGNhc2UgJz8nOlxuICAgICAgICBjYXNlICd+JzpcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gNC1jaGFyYWN0ZXIgcHVuY3R1YXRvci5cbiAgICAgICAgICAgIHN0ciA9IHNvdXJjZS5zdWJzdHIoaW5kZXgsIDQpO1xuICAgICAgICAgICAgaWYgKHN0ciA9PT0gJz4+Pj0nKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAvLyAzLWNoYXJhY3RlciBwdW5jdHVhdG9ycy5cbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIDMpO1xuICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICc9PT0nIHx8IHN0ciA9PT0gJyE9PScgfHwgc3RyID09PSAnPj4+JyB8fFxuICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICc8PD0nIHx8IHN0ciA9PT0gJz4+PScpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIDItY2hhcmFjdGVyIHB1bmN0dWF0b3JzLlxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIDIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyID09PSAnJiYnIHx8IHN0ciA9PT0gJ3x8JyB8fCBzdHIgPT09ICc9PScgfHwgc3RyID09PSAnIT0nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICcrPScgfHwgc3RyID09PSAnLT0nIHx8IHN0ciA9PT0gJyo9JyB8fCBzdHIgPT09ICcvPScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJysrJyB8fCBzdHIgPT09ICctLScgfHwgc3RyID09PSAnPDwnIHx8IHN0ciA9PT0gJz4+JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnJj0nIHx8IHN0ciA9PT0gJ3w9JyB8fCBzdHIgPT09ICdePScgfHwgc3RyID09PSAnJT0nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICc8PScgfHwgc3RyID09PSAnPj0nIHx8IHN0ciA9PT0gJz0+Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCc8Pj0hKy0qJSZ8Xi8nLmluZGV4T2Yoc3RyKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA9PT0gdG9rZW4uc3RhcnQpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbi5lbmQgPSBpbmRleDtcbiAgICAgICAgdG9rZW4udmFsdWUgPSBzdHI7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMS44LjMgTnVtZXJpYyBMaXRlcmFsc1xuXG4gICAgZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3RhcnQpIHtcbiAgICAgICAgdmFyIG51bWJlciA9ICcnO1xuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludCgnMHgnICsgbnVtYmVyLCAxNiksXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NhbkJpbmFyeUxpdGVyYWwoc3RhcnQpIHtcbiAgICAgICAgdmFyIGNoLCBudW1iZXI7XG5cbiAgICAgICAgbnVtYmVyID0gJyc7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgICAgICBpZiAoY2ggIT09ICcwJyAmJiBjaCAhPT0gJzEnKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIG9ubHkgMGIgb3IgMEJcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkgfHwgaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDIpLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5PY3RhbExpdGVyYWwocHJlZml4LCBzdGFydCkge1xuICAgICAgICB2YXIgbnVtYmVyLCBvY3RhbDtcblxuICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KHByZWZpeCkpIHtcbiAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIG51bWJlciA9ICcwJyArIHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9jdGFsID0gZmFsc2U7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgbnVtYmVyID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvY3RhbCAmJiBudW1iZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBvbmx5IDBvIG9yIDBPXG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkgfHwgaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDgpLFxuICAgICAgICAgICAgb2N0YWw6IG9jdGFsLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSW1wbGljaXRPY3RhbExpdGVyYWwoKSB7XG4gICAgICAgIHZhciBpLCBjaDtcblxuICAgICAgICAvLyBJbXBsaWNpdCBvY3RhbCwgdW5sZXNzIHRoZXJlIGlzIGEgbm9uLW9jdGFsIGRpZ2l0LlxuICAgICAgICAvLyAoQW5uZXggQi4xLjEgb24gTnVtZXJpYyBMaXRlcmFscylcbiAgICAgICAgZm9yIChpID0gaW5kZXggKyAxOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2ldO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnOCcgfHwgY2ggPT09ICc5Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nhbk51bWVyaWNMaXRlcmFsKCkge1xuICAgICAgICB2YXIgbnVtYmVyLCBzdGFydCwgY2g7XG5cbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBhc3NlcnQoaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLFxuICAgICAgICAgICAgJ051bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludCcpO1xuXG4gICAgICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIG51bWJlciA9ICcnO1xuICAgICAgICBpZiAoY2ggIT09ICcuJykge1xuICAgICAgICAgICAgbnVtYmVyID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuXG4gICAgICAgICAgICAvLyBIZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuXG4gICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIgc3RhcnRzIHdpdGggJzAnLlxuICAgICAgICAgICAgLy8gT2N0YWwgbnVtYmVyIGluIEVTNiBzdGFydHMgd2l0aCAnMG8nLlxuICAgICAgICAgICAgLy8gQmluYXJ5IG51bWJlciBpbiBFUzYgc3RhcnRzIHdpdGggJzBiJy5cbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09ICcwJykge1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3gnIHx8IGNoID09PSAnWCcpIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnYicgfHwgY2ggPT09ICdCJykge1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkJpbmFyeUxpdGVyYWwoc3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdvJyB8fCBjaCA9PT0gJ08nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW1wbGljaXRPY3RhbExpdGVyYWwoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuXG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgICAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTEuOC40IFN0cmluZyBMaXRlcmFsc1xuXG4gICAgZnVuY3Rpb24gc2NhblN0cmluZ0xpdGVyYWwoKSB7XG4gICAgICAgIHZhciBzdHIgPSAnJywgcXVvdGUsIHN0YXJ0LCBjaCwgdW5lc2NhcGVkLCBvY3RUb0RlYywgb2N0YWwgPSBmYWxzZTtcblxuICAgICAgICBxdW90ZSA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGFzc2VydCgocXVvdGUgPT09ICdcXCcnIHx8IHF1b3RlID09PSAnXCInKSxcbiAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGUnKTtcblxuICAgICAgICBzdGFydCA9IGluZGV4O1xuICAgICAgICArK2luZGV4O1xuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgICAgICAgICAgICBxdW90ZSA9ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICAgICAgaWYgKCFjaCB8fCAhaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVuZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdW5lc2NhcGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXHInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXHQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXGInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXGYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXHgwQic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnOCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzknOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdFRvRGVjID0gb2N0YWxUb0RlY2ltYWwoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwgPSBvY3RUb0RlYy5vY3RhbCB8fCBvY3RhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShvY3RUb0RlYy5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uU3RyaW5nTGl0ZXJhbCxcbiAgICAgICAgICAgIHZhbHVlOiBzdHIsXG4gICAgICAgICAgICBvY3RhbDogb2N0YWwsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBzdGFydExpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0LFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDExLjguNiBUZW1wbGF0ZSBMaXRlcmFsIExleGljYWwgQ29tcG9uZW50c1xuXG4gICAgZnVuY3Rpb24gc2NhblRlbXBsYXRlKCkge1xuICAgICAgICB2YXIgY29va2VkID0gJycsIGNoLCBzdGFydCwgcmF3T2Zmc2V0LCB0ZXJtaW5hdGVkLCBoZWFkLCB0YWlsLCByZXN0b3JlLCB1bmVzY2FwZWQ7XG5cbiAgICAgICAgdGVybWluYXRlZCA9IGZhbHNlO1xuICAgICAgICB0YWlsID0gZmFsc2U7XG4gICAgICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIGhlYWQgPSAoc291cmNlW2luZGV4XSA9PT0gJ2AnKTtcbiAgICAgICAgcmF3T2Zmc2V0ID0gMjtcblxuICAgICAgICArK2luZGV4O1xuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBpZiAoY2ggPT09ICdgJykge1xuICAgICAgICAgICAgICAgIHJhd09mZnNldCA9IDE7XG4gICAgICAgICAgICAgICAgdGFpbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnJCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucHVzaCgnJHsnKTtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICduJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFxyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFx0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IHVuZXNjYXBlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xcYic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xcZic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xcdic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsOiBcXDAxIFxcMDIgYW5kIHNvIG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xcMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsOiBcXDEgXFwyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXHInICYmIHNvdXJjZVtpbmRleF0gPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXHInICYmIHNvdXJjZVtpbmRleF0gPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFxuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29va2VkICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoZWFkKSB7XG4gICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnBvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlRlbXBsYXRlLFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBjb29rZWQ6IGNvb2tlZCxcbiAgICAgICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZShzdGFydCArIDEsIGluZGV4IC0gcmF3T2Zmc2V0KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWQ6IGhlYWQsXG4gICAgICAgICAgICB0YWlsOiB0YWlsLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDExLjguNSBSZWd1bGFyIEV4cHJlc3Npb24gTGl0ZXJhbHNcblxuICAgIGZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHtcbiAgICAgICAgLy8gVGhlIEJNUCBjaGFyYWN0ZXIgdG8gdXNlIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGFzdHJhbCBzeW1ib2xzIHdoZW5cbiAgICAgICAgLy8gdHJhbnNsYXRpbmcgYW4gRVM2IFwidVwiLWZsYWdnZWQgcGF0dGVybiB0byBhbiBFUzUtY29tcGF0aWJsZVxuICAgICAgICAvLyBhcHByb3hpbWF0aW9uLlxuICAgICAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCAnXFx1RkZGRicgZW5hYmxlcyBmYWxzZSBwb3NpdGl2ZXMgaW4gdW5saWtlbHlcbiAgICAgICAgLy8gc2NlbmFyaW9zLiBGb3IgZXhhbXBsZSwgYFtcXHV7MTA0NGZ9LVxcdXsxMDQ0MH1dYCBpcyBhbiBpbnZhbGlkXG4gICAgICAgIC8vIHBhdHRlcm4gdGhhdCB3b3VsZCBub3QgYmUgZGV0ZWN0ZWQgYnkgdGhpcyBzdWJzdGl0dXRpb24uXG4gICAgICAgIHZhciBhc3RyYWxTdWJzdGl0dXRlID0gJ1xcdUZGRkYnLFxuICAgICAgICAgICAgdG1wID0gcGF0dGVybjtcblxuICAgICAgICBpZiAoZmxhZ3MuaW5kZXhPZigndScpID49IDApIHtcbiAgICAgICAgICAgIHRtcCA9IHRtcFxuICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgZXZlcnkgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZXF1aXZhbGVudFxuICAgICAgICAgICAgICAgIC8vIEJNUCBjaGFyYWN0ZXIgb3IgYSBjb25zdGFudCBBU0NJSSBjb2RlIHBvaW50IGluIHRoZSBjYXNlIG9mXG4gICAgICAgICAgICAgICAgLy8gYXN0cmFsIHN5bWJvbHMuIChTZWUgdGhlIGFib3ZlIG5vdGUgb24gYGFzdHJhbFN1YnN0aXR1dGVgXG4gICAgICAgICAgICAgICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcdVxceyhbMC05YS1mQS1GXSspXFx9fFxcXFx1KFthLWZBLUYwLTldezR9KS9nLCBmdW5jdGlvbiAoJDAsICQxLCAkMikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gcGFyc2VJbnQoJDEgfHwgJDIsIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4MTBGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihudWxsLCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29kZVBvaW50IDw9IDB4RkZGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXN0cmFsU3Vic3RpdHV0ZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgZWFjaCBwYWlyZWQgc3Vycm9nYXRlIHdpdGggYSBzaW5nbGUgQVNDSUkgc3ltYm9sIHRvXG4gICAgICAgICAgICAgICAgLy8gYXZvaWQgdGhyb3dpbmcgb24gcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGFyZSBvbmx5IHZhbGlkIGluXG4gICAgICAgICAgICAgICAgLy8gY29tYmluYXRpb24gd2l0aCB0aGUgXCJ1XCIgZmxhZy5cbiAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZyxcbiAgICAgICAgICAgICAgICAgICAgYXN0cmFsU3Vic3RpdHV0ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCwgZGV0ZWN0IGludmFsaWQgcmVndWxhciBleHByZXNzaW9ucy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFJlZ0V4cCh0bXApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihudWxsLCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIHRoaXMgcGF0dGVybi1mbGFnIHBhaXIsIG9yXG4gICAgICAgIC8vIGBudWxsYCBpbiBjYXNlIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmxhZ3MgaXRcbiAgICAgICAgLy8gdXNlcy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTtcbiAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHBCb2R5KCkge1xuICAgICAgICB2YXIgY2gsIHN0ciwgY2xhc3NNYXJrZXIsIHRlcm1pbmF0ZWQsIGJvZHk7XG5cbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBhc3NlcnQoY2ggPT09ICcvJywgJ1JlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoJyk7XG4gICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlO1xuICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgICAgIC8vIEVDTUEtMjYyIDcuOC41XG4gICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obnVsbCwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obnVsbCwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihudWxsLCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhjbHVkZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaC5cbiAgICAgICAgYm9keSA9IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IGJvZHksXG4gICAgICAgICAgICBsaXRlcmFsOiBzdHJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FuUmVnRXhwRmxhZ3MoKSB7XG4gICAgICAgIHZhciBjaCwgc3RyLCBmbGFncywgcmVzdG9yZTtcblxuICAgICAgICBzdHIgPSAnJztcbiAgICAgICAgZmxhZ3MgPSAnJztcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcXFwnICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciArPSAnXFxcXHUnOyByZXN0b3JlIDwgaW5kZXg7ICsrcmVzdG9yZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzb3VyY2VbcmVzdG9yZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArPSAndSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFx1JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXCc7XG4gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbGFncyArPSBjaDtcbiAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IGZsYWdzLFxuICAgICAgICAgICAgbGl0ZXJhbDogc3RyXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHtcbiAgICAgICAgdmFyIHN0YXJ0LCBib2R5LCBmbGFncywgdmFsdWU7XG4gICAgICAgIHNjYW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICBsb29rYWhlYWQgPSBudWxsO1xuICAgICAgICBza2lwQ29tbWVudCgpO1xuICAgICAgICBzdGFydCA9IGluZGV4O1xuXG4gICAgICAgIGJvZHkgPSBzY2FuUmVnRXhwQm9keSgpO1xuICAgICAgICBmbGFncyA9IHNjYW5SZWdFeHBGbGFncygpO1xuICAgICAgICB2YWx1ZSA9IHRlc3RSZWdFeHAoYm9keS52YWx1ZSwgZmxhZ3MudmFsdWUpO1xuICAgICAgICBzY2FubmluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUmVndWxhckV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHJlZ2V4OiB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IGJvZHkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncy52YWx1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaXRlcmFsOiBib2R5LmxpdGVyYWwgKyBmbGFncy5saXRlcmFsLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgcmVnZXg6IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBib2R5LnZhbHVlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncy52YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogaW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb2xsZWN0UmVnZXgoKSB7XG4gICAgICAgIHZhciBwb3MsIGxvYywgcmVnZXgsIHRva2VuO1xuXG4gICAgICAgIHNraXBDb21tZW50KCk7XG5cbiAgICAgICAgcG9zID0gaW5kZXg7XG4gICAgICAgIGxvYyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnZXggPSBzY2FuUmVnRXhwKCk7XG5cbiAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgIH07XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKCFleHRyYS50b2tlbml6ZSkge1xuICAgICAgICAgICAgLy8gUG9wIHRoZSBwcmV2aW91cyB0b2tlbiwgd2hpY2ggaXMgbGlrZWx5ICcvJyBvciAnLz0nXG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnJhbmdlWzBdID09PSBwb3MgJiYgdG9rZW4udHlwZSA9PT0gJ1B1bmN0dWF0b3InKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJy8nIHx8IHRva2VuLnZhbHVlID09PSAnLz0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnUmVndWxhckV4cHJlc3Npb24nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZWdleC5saXRlcmFsLFxuICAgICAgICAgICAgICAgIHJlZ2V4OiByZWdleC5yZWdleCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLFxuICAgICAgICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7XG4gICAgICAgIHJldHVybiB0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyIHx8XG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkIHx8XG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCB8fFxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWw7XG4gICAgfVxuXG4gICAgLy8gVXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc3dlZXQuanMvd2lraS9kZXNpZ25cblxuICAgIGZ1bmN0aW9uIGFkdmFuY2VTbGFzaCgpIHtcbiAgICAgICAgdmFyIHJlZ2V4LCBwcmV2aW91cywgY2hlY2s7XG5cbiAgICAgICAgZnVuY3Rpb24gdGVzdEtleXdvcmQodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAmJiAodmFsdWUubGVuZ3RoID4gMSkgJiYgKHZhbHVlWzBdID49ICdhJykgJiYgKHZhbHVlWzBdIDw9ICd6Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91cyA9IGV4dHJhLnRva2VuVmFsdWVzW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgcmVnZXggPSAocHJldmlvdXMgIT09IG51bGwpO1xuXG4gICAgICAgIHN3aXRjaCAocHJldmlvdXMpIHtcbiAgICAgICAgY2FzZSAndGhpcyc6XG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICAgICAgcmVnZXggPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgY2hlY2sgPSBleHRyYS50b2tlblZhbHVlc1tleHRyYS5vcGVuUGFyZW5Ub2tlbiAtIDFdO1xuICAgICAgICAgICAgcmVnZXggPSAoY2hlY2sgPT09ICdpZicgfHwgY2hlY2sgPT09ICd3aGlsZScgfHwgY2hlY2sgPT09ICdmb3InIHx8IGNoZWNrID09PSAnd2l0aCcpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgICAvLyBEaXZpZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRsZSBzZW5zZSxcbiAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0LlxuICAgICAgICAgICAgcmVnZXggPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0ZXN0S2V5d29yZChleHRyYS50b2tlblZhbHVlc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNdKSkge1xuICAgICAgICAgICAgICAgIC8vIEFub255bW91cyBmdW5jdGlvbiwgZS5nLiBmdW5jdGlvbigpe30gLzQyXG4gICAgICAgICAgICAgICAgY2hlY2sgPSBleHRyYS50b2tlblZhbHVlc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdO1xuICAgICAgICAgICAgICAgIHJlZ2V4ID0gY2hlY2sgPyAoRm5FeHByVG9rZW5zLmluZGV4T2YoY2hlY2spIDwgMCkgOiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdEtleXdvcmQoZXh0cmEudG9rZW5WYWx1ZXNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XSkpIHtcbiAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbiwgZS5nLiBmdW5jdGlvbiBmKCl7fSAvNDIvXG4gICAgICAgICAgICAgICAgY2hlY2sgPSBleHRyYS50b2tlblZhbHVlc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDVdO1xuICAgICAgICAgICAgICAgIHJlZ2V4ID0gY2hlY2sgPyAoRm5FeHByVG9rZW5zLmluZGV4T2YoY2hlY2spIDwgMCkgOiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ID8gY29sbGVjdFJlZ2V4KCkgOiBzY2FuUHVuY3R1YXRvcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7XG4gICAgICAgIHZhciBjcCwgdG9rZW47XG5cbiAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5FT0YsXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICBzdGFydDogaW5kZXgsXG4gICAgICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNwID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjcCkpIHtcbiAgICAgICAgICAgIHRva2VuID0gc2NhbklkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgPSBUb2tlbi5LZXl3b3JkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmVyeSBjb21tb246ICggYW5kICkgYW5kIDtcbiAgICAgICAgaWYgKGNwID09PSAweDI4IHx8IGNwID09PSAweDI5IHx8IGNwID09PSAweDNCKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuXG4gICAgICAgIGlmIChjcCA9PT0gMHgyNyB8fCBjcCA9PT0gMHgyMikge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5TdHJpbmdMaXRlcmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb3QgKC4pIFUrMDAyRSBjYW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWRcbiAgICAgICAgLy8gdG8gY2hlY2sgdGhlIG5leHQgY2hhcmFjdGVyLlxuICAgICAgICBpZiAoY3AgPT09IDB4MkUpIHtcbiAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2xhc2ggKC8pIFUrMDAyRiBjYW4gYWxzbyBzdGFydCBhIHJlZ2V4LlxuICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUgJiYgY3AgPT09IDB4MkYpIHtcbiAgICAgICAgICAgIHJldHVybiBhZHZhbmNlU2xhc2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRlbXBsYXRlIGxpdGVyYWxzIHN0YXJ0IHdpdGggYCAoVSswMDYwKSBmb3IgdGVtcGxhdGUgaGVhZFxuICAgICAgICAvLyBvciB9IChVKzAwN0QpIGZvciB0ZW1wbGF0ZSBtaWRkbGUgb3IgdGVtcGxhdGUgdGFpbC5cbiAgICAgICAgaWYgKGNwID09PSAweDYwIHx8IChjcCA9PT0gMHg3RCAmJiBzdGF0ZS5jdXJseVN0YWNrW3N0YXRlLmN1cmx5U3RhY2subGVuZ3RoIC0gMV0gPT09ICckeycpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhblRlbXBsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQb3NzaWJsZSBpZGVudGlmaWVyIHN0YXJ0IGluIGEgc3Vycm9nYXRlIHBhaXIuXG4gICAgICAgIGlmIChjcCA+PSAweEQ4MDAgJiYgY3AgPCAweERGRkYpIHtcbiAgICAgICAgICAgIGNwID0gY29kZVBvaW50QXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29sbGVjdFRva2VuKCkge1xuICAgICAgICB2YXIgbG9jLCB0b2tlbiwgdmFsdWUsIGVudHJ5O1xuXG4gICAgICAgIGxvYyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdG9rZW4gPSBhZHZhbmNlKCk7XG4gICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHZhbHVlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICAgICAgICAgICAgZW50cnkgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW5OYW1lW3Rva2VuLnR5cGVdLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICByYW5nZTogW3Rva2VuLnN0YXJ0LCB0b2tlbi5lbmRdLFxuICAgICAgICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRva2VuLnJlZ2V4KSB7XG4gICAgICAgICAgICAgICAgZW50cnkucmVnZXggPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHRva2VuLnJlZ2V4LnBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzOiB0b2tlbi5yZWdleC5mbGFnc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBleHRyYS50b2tlblZhbHVlcy5wdXNoKChlbnRyeS50eXBlID09PSAnUHVuY3R1YXRvcicgfHwgZW50cnkudHlwZSA9PT0gJ0tleXdvcmQnKSA/IGVudHJ5LnZhbHVlIDogbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWV4dHJhLnJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbnRyeS5yYW5nZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFleHRyYS5sb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVudHJ5LmxvYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhLmRlbGVnYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gZXh0cmEuZGVsZWdhdGUoZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKGVudHJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgc2Nhbm5pbmcgPSB0cnVlO1xuXG4gICAgICAgIGxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICBsYXN0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7XG4gICAgICAgIGxhc3RMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7XG5cbiAgICAgICAgc2tpcENvbW1lbnQoKTtcblxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcblxuICAgICAgICBzdGFydEluZGV4ID0gaW5kZXg7XG4gICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7XG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0O1xuXG4gICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTtcbiAgICAgICAgc2Nhbm5pbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBlZWsoKSB7XG4gICAgICAgIHNjYW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICBza2lwQ29tbWVudCgpO1xuXG4gICAgICAgIGxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICBsYXN0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7XG4gICAgICAgIGxhc3RMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7XG5cbiAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4O1xuICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyO1xuICAgICAgICBzdGFydExpbmVTdGFydCA9IGxpbmVTdGFydDtcblxuICAgICAgICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7XG4gICAgICAgIHNjYW5uaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gUG9zaXRpb24oKSB7XG4gICAgICAgIHRoaXMubGluZSA9IHN0YXJ0TGluZU51bWJlcjtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBzdGFydEluZGV4IC0gc3RhcnRMaW5lU3RhcnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oKSB7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBuZXcgUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5lbmQgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFdyYXBwaW5nU291cmNlTG9jYXRpb24oc3RhcnRUb2tlbikge1xuICAgICAgICB0aGlzLnN0YXJ0ID0ge1xuICAgICAgICAgICAgbGluZTogc3RhcnRUb2tlbi5saW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBzdGFydFRva2VuLnN0YXJ0IC0gc3RhcnRUb2tlbi5saW5lU3RhcnRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lbmQgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIE5vZGUoKSB7XG4gICAgICAgIGlmIChleHRyYS5yYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5yYW5nZSA9IFtzdGFydEluZGV4LCAwXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmEubG9jKSB7XG4gICAgICAgICAgICB0aGlzLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pIHtcbiAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnJhbmdlID0gW3N0YXJ0VG9rZW4uc3RhcnQsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgICAgIHRoaXMubG9jID0gbmV3IFdyYXBwaW5nU291cmNlTG9jYXRpb24oc3RhcnRUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBXcmFwcGluZ05vZGUucHJvdG90eXBlID0gTm9kZS5wcm90b3R5cGUgPSB7XG5cbiAgICAgICAgcHJvY2Vzc0NvbW1lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBsYXN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgaW5uZXJDb21tZW50cyxcbiAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMsXG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyxcbiAgICAgICAgICAgICAgICBib3R0b21SaWdodCA9IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2ssXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBjb21tZW50LFxuICAgICAgICAgICAgICAgIGxhc3QgPSBib3R0b21SaWdodFtib3R0b21SaWdodC5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gU3ludGF4LlByb2dyYW0pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogcGF0Y2ggaW5ubmVyQ29tbWVudHMgZm9yIHByb3BlcnRpZXMgZW1wdHkgYmxvY2tcbiAgICAgICAgICAgICAqIGBmdW5jdGlvbiBhKCkgey8qKiBjb21tZW50cyAqKlxcL31gXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gU3ludGF4LkJsb2NrU3RhdGVtZW50ICYmIHRoaXMuYm9keS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpbm5lckNvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChpID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBleHRyYS5sZWFkaW5nQ29tbWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlWzFdID49IGNvbW1lbnQucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ29tbWVudHMudW5zaGlmdChjb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5uZXJDb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbm5lckNvbW1lbnRzID0gaW5uZXJDb21tZW50cztcbiAgICAgICAgICAgICAgICAgICAgLy9ib3R0b21SaWdodC5wdXNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LnJhbmdlWzBdID49IHRoaXMucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMudW5zaGlmdChjb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC50cmFpbGluZ0NvbW1lbnRzICYmIGxhc3QudHJhaWxpbmdDb21tZW50c1swXS5yYW5nZVswXSA+PSB0aGlzLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBsYXN0LnRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsYXN0LnRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFYXRpbmcgdGhlIHN0YWNrLlxuICAgICAgICAgICAgd2hpbGUgKGxhc3QgJiYgbGFzdC5yYW5nZVswXSA+PSB0aGlzLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgbGFzdENoaWxkID0gYm90dG9tUmlnaHQucG9wKCk7XG4gICAgICAgICAgICAgICAgbGFzdCA9IGJvdHRvbVJpZ2h0W2JvdHRvbVJpZ2h0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobGFzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQucmFuZ2VbMV0gPD0gdGhpcy5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cy51bnNoaWZ0KGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSBleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGV4dHJhLmxlYWRpbmdDb21tZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQucmFuZ2VbMV0gPD0gdGhpcy5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRzLnVuc2hpZnQoY29tbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmIChsZWFkaW5nQ29tbWVudHMgJiYgbGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlYWRpbmdDb21tZW50cyA9IGxlYWRpbmdDb21tZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzICYmIHRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvdHRvbVJpZ2h0LnB1c2godGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlWzFdID0gbGFzdEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jLmVuZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGluZTogbGFzdExpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbGFzdEluZGV4IC0gbGFzdExpbmVTdGFydFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvbW1lbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uIChlbGVtZW50cykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkFycmF5RXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMgPSBlbGVtZW50cztcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hBcnJheVBhdHRlcm46IGZ1bmN0aW9uIChlbGVtZW50cykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkFycmF5UGF0dGVybjtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMgPSBlbGVtZW50cztcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKHBhcmFtcywgZGVmYXVsdHMsIGJvZHksIGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoQXNzaWdubWVudFBhdHRlcm46IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hCaW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSAob3BlcmF0b3IgPT09ICd8fCcgfHwgb3BlcmF0b3IgPT09ICcmJicpID8gU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9uIDogU3ludGF4LkJpbmFyeUV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbiAoYm9keSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkJsb2NrU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hCcmVha1N0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQnJlYWtTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5DYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuY2FsbGVlID0gY2FsbGVlO1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaENhdGNoQ2xhdXNlOiBmdW5jdGlvbiAocGFyYW0sIGJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5DYXRjaENsYXVzZTtcbiAgICAgICAgICAgIHRoaXMucGFyYW0gPSBwYXJhbTtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoQ2xhc3NCb2R5OiBmdW5jdGlvbiAoYm9keSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNsYXNzQm9keTtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoQ2xhc3NEZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQ2xhc3NEZWNsYXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgICAgIHRoaXMuc3VwZXJDbGFzcyA9IHN1cGVyQ2xhc3M7XG4gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaENsYXNzRXhwcmVzc2lvbjogZnVuY3Rpb24gKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQ2xhc3NFeHByZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFzcztcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQ29uZGl0aW9uYWxFeHByZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG4gICAgICAgICAgICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hDb250aW51ZVN0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQ29udGludWVTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRGVidWdnZXJTdGF0ZW1lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5EZWJ1Z2dlclN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hEb1doaWxlU3RhdGVtZW50OiBmdW5jdGlvbiAoYm9keSwgdGVzdCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hFbXB0eVN0YXRlbWVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkVtcHR5U3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEV4cHJlc3Npb25TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChleHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRm9yU3RhdGVtZW50OiBmdW5jdGlvbiAoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRm9yU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5pbml0ID0gaW5pdDtcbiAgICAgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRm9yT2ZTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm9keSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkZvck9mU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRm9ySW5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm9keSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkZvckluU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmVhY2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hGdW5jdGlvbkRlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHksIGdlbmVyYXRvcikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb247XG4gICAgICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEZ1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5LCBnZW5lcmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaElkZW50aWZpZXI6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguSWRlbnRpZmllcjtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5JZlN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgICAgICB0aGlzLmNvbnNlcXVlbnQgPSBjb25zZXF1ZW50O1xuICAgICAgICAgICAgdGhpcy5hbHRlcm5hdGUgPSBhbHRlcm5hdGU7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoTGFiZWxlZFN0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsLCBib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguTGFiZWxlZFN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoTGl0ZXJhbDogZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguTGl0ZXJhbDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmF3ID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICAgICAgICAgICAgaWYgKHRva2VuLnJlZ2V4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdleCA9IHRva2VuLnJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaE1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uIChhY2Nlc3Nvciwgb2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4Lk1lbWJlckV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkID0gYWNjZXNzb3IgPT09ICdbJztcbiAgICAgICAgICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaE1ldGFQcm9wZXJ0eTogZnVuY3Rpb24gKG1ldGEsIHByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguTWV0YVByb3BlcnR5O1xuICAgICAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcbiAgICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hOZXdFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2FsbGVlLCBhcmdzKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguTmV3RXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuY2FsbGVlID0gY2FsbGVlO1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaE9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoT2JqZWN0UGF0dGVybjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5PYmplY3RQYXR0ZXJuO1xuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hQb3N0Zml4RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlVwZGF0ZUV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnByZWZpeCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFByb2dyYW06IGZ1bmN0aW9uIChib2R5LCBzb3VyY2VUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguUHJvZ3JhbTtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZVR5cGUgPSBzb3VyY2VUeXBlO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFByb3BlcnR5OiBmdW5jdGlvbiAoa2luZCwga2V5LCBjb21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguUHJvcGVydHk7XG4gICAgICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRoYW5kID0gc2hvcnRoYW5kO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFJlc3RFbGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5SZXN0RWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlJldHVyblN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hTZXF1ZW5jZUV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByZXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucztcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hTcHJlYWRFbGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5TcHJlYWRFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFN3aXRjaENhc2U6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU3dpdGNoQ2FzZTtcbiAgICAgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgICAgICB0aGlzLmNvbnNlcXVlbnQgPSBjb25zZXF1ZW50O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFN1cGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU3VwZXI7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoU3dpdGNoU3RhdGVtZW50OiBmdW5jdGlvbiAoZGlzY3JpbWluYW50LCBjYXNlcykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlN3aXRjaFN0YXRlbWVudDtcbiAgICAgICAgICAgIHRoaXMuZGlzY3JpbWluYW50ID0gZGlzY3JpbWluYW50O1xuICAgICAgICAgICAgdGhpcy5jYXNlcyA9IGNhc2VzO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogZnVuY3Rpb24gKHRhZywgcXVhc2kpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgICAgIHRoaXMucXVhc2kgPSBxdWFzaTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hUZW1wbGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uICh2YWx1ZSwgdGFpbCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRlbXBsYXRlRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudGFpbCA9IHRhaWw7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoVGVtcGxhdGVMaXRlcmFsOiBmdW5jdGlvbiAocXVhc2lzLCBleHByZXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRlbXBsYXRlTGl0ZXJhbDtcbiAgICAgICAgICAgIHRoaXMucXVhc2lzID0gcXVhc2lzO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9ucyA9IGV4cHJlc3Npb25zO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVGhpc0V4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoVGhyb3dTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRocm93U3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFRyeVN0YXRlbWVudDogZnVuY3Rpb24gKGJsb2NrLCBoYW5kbGVyLCBmaW5hbGl6ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5UcnlTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XG4gICAgICAgICAgICB0aGlzLmd1YXJkZWRIYW5kbGVycyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVycyA9IGhhbmRsZXIgPyBbaGFuZGxlcl0gOiBbXTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgICAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplcjtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgYXJndW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IChvcGVyYXRvciA9PT0gJysrJyB8fCBvcGVyYXRvciA9PT0gJy0tJykgPyBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiA6IFN5bnRheC5VbmFyeUV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnByZWZpeCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xhcmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb247XG4gICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICAgICAgICAgIHRoaXMua2luZCA9ICd2YXInO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaExleGljYWxEZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xhcmF0aW9ucywga2luZCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb247XG4gICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICAgICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbiAoaWQsIGluaXQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3I7XG4gICAgICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgICAgICB0aGlzLmluaXQgPSBpbml0O1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaFdoaWxlU3RhdGVtZW50OiBmdW5jdGlvbiAodGVzdCwgYm9keSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LldoaWxlU3RhdGVtZW50O1xuICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoV2l0aFN0YXRlbWVudDogZnVuY3Rpb24gKG9iamVjdCwgYm9keSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LldpdGhTdGF0ZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRXhwb3J0U3BlY2lmaWVyOiBmdW5jdGlvbiAobG9jYWwsIGV4cG9ydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRXhwb3J0U3BlY2lmaWVyO1xuICAgICAgICAgICAgdGhpcy5leHBvcnRlZCA9IGV4cG9ydGVkIHx8IGxvY2FsO1xuICAgICAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IGZ1bmN0aW9uIChsb2NhbCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkltcG9ydERlZmF1bHRTcGVjaWZpZXI7XG4gICAgICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiBmdW5jdGlvbiAobG9jYWwpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI7XG4gICAgICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBzcmMpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHBvcnROYW1lZERlY2xhcmF0aW9uO1xuICAgICAgICAgICAgdGhpcy5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uO1xuICAgICAgICAgICAgdGhpcy5zcGVjaWZpZXJzID0gc3BlY2lmaWVycztcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gc3JjO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uO1xuICAgICAgICAgICAgdGhpcy5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uO1xuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpbmlzaEV4cG9ydEFsbERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3JjKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRXhwb3J0QWxsRGVjbGFyYXRpb247XG4gICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNyYztcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hJbXBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uIChsb2NhbCwgaW1wb3J0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5JbXBvcnRTcGVjaWZpZXI7XG4gICAgICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWwgfHwgaW1wb3J0ZWQ7XG4gICAgICAgICAgICB0aGlzLmltcG9ydGVkID0gaW1wb3J0ZWQ7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmluaXNoSW1wb3J0RGVjbGFyYXRpb246IGZ1bmN0aW9uIChzcGVjaWZpZXJzLCBzcmMpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5JbXBvcnREZWNsYXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuc3BlY2lmaWVycyA9IHNwZWNpZmllcnM7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNyYztcbiAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pc2hZaWVsZEV4cHJlc3Npb246IGZ1bmN0aW9uIChhcmd1bWVudCwgZGVsZWdhdGUpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5ZaWVsZEV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiByZWNvcmRFcnJvcihlcnJvcikge1xuICAgICAgICB2YXIgZSwgZXhpc3Rpbmc7XG5cbiAgICAgICAgZm9yIChlID0gMDsgZSA8IGV4dHJhLmVycm9ycy5sZW5ndGg7IGUrKykge1xuICAgICAgICAgICAgZXhpc3RpbmcgPSBleHRyYS5lcnJvcnNbZV07XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGR1cGxpY2F0ZWQgZXJyb3IuXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nLmluZGV4ID09PSBlcnJvci5pbmRleCAmJiBleGlzdGluZy5tZXNzYWdlID09PSBlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnN0cnVjdEVycm9yKG1zZywgY29sdW1uKSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0gY2F0Y2ggKGJhc2UpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmNyZWF0ZSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IE9iamVjdC5jcmVhdGUoYmFzZSk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnY29sdW1uJywgeyB2YWx1ZTogY29sdW1uIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobGluZSwgcG9zLCBkZXNjcmlwdGlvbikge1xuICAgICAgICB2YXIgbXNnLCBjb2x1bW4sIGVycm9yO1xuXG4gICAgICAgIG1zZyA9ICdMaW5lICcgKyBsaW5lICsgJzogJyArIGRlc2NyaXB0aW9uO1xuICAgICAgICBjb2x1bW4gPSBwb3MgLSAoc2Nhbm5pbmcgPyBsaW5lU3RhcnQgOiBsYXN0TGluZVN0YXJ0KSArIDE7XG4gICAgICAgIGVycm9yID0gY29uc3RydWN0RXJyb3IobXNnLCBjb2x1bW4pO1xuICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgZXJyb3IuaW5kZXggPSBwb3M7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICAvLyBUaHJvdyBhbiBleGNlcHRpb25cblxuICAgIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZUZvcm1hdCkge1xuICAgICAgICB2YXIgYXJncywgbXNnO1xuXG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoLyUoXFxkKS9nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpZHgpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoaWR4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihsYXN0TGluZU51bWJlciwgbGFzdEluZGV4LCBtc2cpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvbGVyYXRlRXJyb3IobWVzc2FnZUZvcm1hdCkge1xuICAgICAgICB2YXIgYXJncywgbXNnLCBlcnJvcjtcblxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxcZCkvZyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICh3aG9sZSwgaWR4KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGlkeCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2lkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihsaW5lTnVtYmVyLCBsYXN0SW5kZXgsIG1zZyk7XG4gICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHtcbiAgICAgICAgICAgIHJlY29yZEVycm9yKGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLlxuXG4gICAgZnVuY3Rpb24gdW5leHBlY3RlZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBtc2cgPSBtZXNzYWdlIHx8IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbjtcblxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIG1zZyA9ICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YpID8gTWVzc2FnZXMuVW5leHBlY3RlZEVPUyA6XG4gICAgICAgICAgICAgICAgICAgICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSA/IE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyIDpcbiAgICAgICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSA/IE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIgOlxuICAgICAgICAgICAgICAgICAgICAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgPyBNZXNzYWdlcy5VbmV4cGVjdGVkU3RyaW5nIDpcbiAgICAgICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSA/IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUZW1wbGF0ZSA6XG4gICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbjtcblxuICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1dHVyZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IE1lc3NhZ2VzLlVuZXhwZWN0ZWRSZXNlcnZlZDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZSA9ICh0b2tlbi50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkgPyB0b2tlbi52YWx1ZS5yYXcgOiB0b2tlbi52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gJ0lMTEVHQUwnO1xuICAgICAgICB9XG5cbiAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UoJyUwJywgdmFsdWUpO1xuXG4gICAgICAgIHJldHVybiAodG9rZW4gJiYgdHlwZW9mIHRva2VuLmxpbmVOdW1iZXIgPT09ICdudW1iZXInKSA/XG4gICAgICAgICAgICBjcmVhdGVFcnJvcih0b2tlbi5saW5lTnVtYmVyLCB0b2tlbi5zdGFydCwgbXNnKSA6XG4gICAgICAgICAgICBjcmVhdGVFcnJvcihzY2FubmluZyA/IGxpbmVOdW1iZXIgOiBsYXN0TGluZU51bWJlciwgc2Nhbm5pbmcgPyBpbmRleCA6IGxhc3RJbmRleCwgbXNnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZSkge1xuICAgICAgICB0aHJvdyB1bmV4cGVjdGVkVG9rZW5FcnJvcih0b2tlbiwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIGVycm9yID0gdW5leHBlY3RlZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpO1xuICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7XG4gICAgICAgICAgICByZWNvcmRFcnJvcihlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG4gICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cbiAgICBmdW5jdGlvbiBleHBlY3QodmFsdWUpIHtcbiAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgZXhwZWN0Q29tbWFTZXBhcmF0b3JcbiAgICAgKiBAZGVzY3JpcHRpb24gUXVpZXRseSBleHBlY3QgYSBjb21tYSB3aGVuIGluIHRvbGVyYW50IG1vZGUsIG90aGVyd2lzZSBkZWxlZ2F0ZXNcbiAgICAgKiB0byA8Y29kZT5leHBlY3QodmFsdWUpPC9jb2RlPlxuICAgICAqIEBzaW5jZSAyLjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBleHBlY3RDb21tYVNlcGFyYXRvcigpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuXG4gICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHtcbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICcsJykge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIHRva2VuLnZhbHVlID09PSAnOycpIHtcbiAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwZWN0KCcsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBrZXl3b3JkLlxuICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuXG4gICAgZnVuY3Rpb24gZXhwZWN0S2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIHZhciB0b2tlbiA9IGxleCgpO1xuICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG5cbiAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQga2V5d29yZFxuXG4gICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3JkKGtleXdvcmQpIHtcbiAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgY29udGV4dHVhbCBrZXl3b3JkXG4gICAgLy8gKHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgc29tZXRpbWVzIGEga2V5d29yZCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQpXG5cbiAgICBmdW5jdGlvbiBtYXRjaENvbnRleHR1YWxLZXl3b3JkKGtleXdvcmQpIHtcbiAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yXG5cbiAgICBmdW5jdGlvbiBtYXRjaEFzc2lnbigpIHtcbiAgICAgICAgdmFyIG9wO1xuXG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9wID0gbG9va2FoZWFkLnZhbHVlO1xuICAgICAgICByZXR1cm4gb3AgPT09ICc9JyB8fFxuICAgICAgICAgICAgb3AgPT09ICcqPScgfHxcbiAgICAgICAgICAgIG9wID09PSAnLz0nIHx8XG4gICAgICAgICAgICBvcCA9PT0gJyU9JyB8fFxuICAgICAgICAgICAgb3AgPT09ICcrPScgfHxcbiAgICAgICAgICAgIG9wID09PSAnLT0nIHx8XG4gICAgICAgICAgICBvcCA9PT0gJzw8PScgfHxcbiAgICAgICAgICAgIG9wID09PSAnPj49JyB8fFxuICAgICAgICAgICAgb3AgPT09ICc+Pj49JyB8fFxuICAgICAgICAgICAgb3AgPT09ICcmPScgfHxcbiAgICAgICAgICAgIG9wID09PSAnXj0nIHx8XG4gICAgICAgICAgICBvcCA9PT0gJ3w9JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkge1xuICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24gKFUrMDAzQikuXG4gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChzdGFydEluZGV4KSA9PT0gMHgzQiB8fCBtYXRjaCgnOycpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRklYTUUoaWthcmllbmF0b3IpOiB0aGlzIGlzIHNlZW1pbmdseSBhbiBpc3N1ZSBpbiB0aGUgcHJldmlvdXMgbG9jYXRpb24gaW5mbyBjb252ZW50aW9uLlxuICAgICAgICBsYXN0SW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICBsYXN0TGluZU51bWJlciA9IHN0YXJ0TGluZU51bWJlcjtcbiAgICAgICAgbGFzdExpbmVTdGFydCA9IHN0YXJ0TGluZVN0YXJ0O1xuXG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GICYmICFtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ292ZXIgZ3JhbW1hciBzdXBwb3J0LlxuICAgIC8vXG4gICAgLy8gV2hlbiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gcG9zaXRpb24gc3RhcnRzIHdpdGggYW4gbGVmdCBwYXJlbnRoZXNpcywgdGhlIGRldGVybWluYXRpb24gb2YgdGhlIHR5cGVcbiAgICAvLyBvZiB0aGUgc3ludGF4IGlzIHRvIGJlIGRlZmVycmVkIGFyYml0cmFyaWx5IGxvbmcgdW50aWwgdGhlIGVuZCBvZiB0aGUgcGFyZW50aGVzZXMgcGFpciAocGx1cyBhIGxvb2thaGVhZClcbiAgICAvLyBvciB0aGUgZmlyc3QgY29tbWEuIFRoaXMgc2l0dWF0aW9uIGFsc28gZGVmZXJzIHRoZSBkZXRlcm1pbmF0aW9uIG9mIGFsbCB0aGUgZXhwcmVzc2lvbnMgbmVzdGVkIGluIHRoZSBwYWlyLlxuICAgIC8vXG4gICAgLy8gVGhlcmUgYXJlIHRocmVlIHByb2R1Y3Rpb25zIHRoYXQgY2FuIGJlIHBhcnNlZCBpbiBhIHBhcmVudGhlc2VzIHBhaXIgdGhhdCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkXG4gICAgLy8gYWZ0ZXIgdGhlIG91dGVybW9zdCBwYWlyIGlzIGNsb3NlZC4gVGhleSBhcmU6XG4gICAgLy9cbiAgICAvLyAgIDEuIEFzc2lnbm1lbnRFeHByZXNzaW9uXG4gICAgLy8gICAyLiBCaW5kaW5nRWxlbWVudHNcbiAgICAvLyAgIDMuIEFzc2lnbm1lbnRUYXJnZXRzXG4gICAgLy9cbiAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBleHBvbmVudGlhbCBiYWNrdHJhY2tpbmcsIHdlIHVzZSB0d28gZmxhZ3MgdG8gZGVub3RlIGlmIHRoZSBwcm9kdWN0aW9uIGNhbiBiZVxuICAgIC8vIGJpbmRpbmcgZWxlbWVudCBvciBhc3NpZ25tZW50IHRhcmdldC5cbiAgICAvL1xuICAgIC8vIFRoZSB0aHJlZSBwcm9kdWN0aW9ucyBoYXZlIHRoZSByZWxhdGlvbnNoaXA6XG4gICAgLy9cbiAgICAvLyAgIEJpbmRpbmdFbGVtZW50cyDiioYgQXNzaWdubWVudFRhcmdldHMg4oqGIEFzc2lnbm1lbnRFeHByZXNzaW9uXG4gICAgLy9cbiAgICAvLyB3aXRoIGEgc2luZ2xlIGV4Y2VwdGlvbiB0aGF0IENvdmVySW5pdGlhbGl6ZWROYW1lIHdoZW4gdXNlZCBkaXJlY3RseSBpbiBhbiBFeHByZXNzaW9uLCBnZW5lcmF0ZXNcbiAgICAvLyBhbiBlYXJseSBlcnJvci4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRoZSB0aGlyZCBzdGF0ZSwgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yLCB0byB0cmFjayB0aGVcbiAgICAvLyBmaXJzdCB1c2FnZSBvZiBDb3ZlckluaXRpYWxpemVkTmFtZSBhbmQgcmVwb3J0IGl0IHdoZW4gd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBwYXJlbnRoZXNlcyBwYWlyLlxuICAgIC8vXG4gICAgLy8gaXNvbGF0ZUNvdmVyR3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZXIgZnVuY3Rpb24gd2l0aCBhIG5ldyBjb3ZlciBncmFtbWFyIGNvbnRleHQsIGFuZCBpdCBkb2VzIG5vdFxuICAgIC8vIGVmZmVjdCB0aGUgY3VycmVudCBmbGFncy4gVGhpcyBtZWFucyB0aGUgcHJvZHVjdGlvbiB0aGUgcGFyc2VyIHBhcnNlcyBpcyBvbmx5IHVzZWQgYXMgYW4gZXhwcmVzc2lvbi4gVGhlcmVmb3JlXG4gICAgLy8gdGhlIENvdmVySW5pdGlhbGl6ZWROYW1lIGNoZWNrIGlzIGNvbmR1Y3RlZC5cbiAgICAvL1xuICAgIC8vIGluaGVyaXRDb3ZlckdyYW1tYXIgZnVuY3Rpb24gcnVucyB0aGUgZ2l2ZW4gcGFyc2UgZnVuY3Rpb24gd2l0aCBhIG5ldyBjb3ZlciBncmFtbWFyIGNvbnRleHQsIGFuZCBpdCBwcm9wYWdhdGVzXG4gICAgLy8gdGhlIGZsYWdzIG91dHNpZGUgb2YgdGhlIHBhcnNlci4gVGhpcyBtZWFucyB0aGUgcHJvZHVjdGlvbiB0aGUgcGFyc2VyIHBhcnNlcyBpcyB1c2VkIGFzIGEgcGFydCBvZiBhIHBvdGVudGlhbFxuICAgIC8vIHBhdHRlcm4uIFRoZSBDb3ZlckluaXRpYWxpemVkTmFtZSBjaGVjayBpcyBkZWZlcnJlZC5cbiAgICBmdW5jdGlvbiBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlcikge1xuICAgICAgICB2YXIgb2xkSXNCaW5kaW5nRWxlbWVudCA9IGlzQmluZGluZ0VsZW1lbnQsXG4gICAgICAgICAgICBvbGRJc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0Fzc2lnbm1lbnRUYXJnZXQsXG4gICAgICAgICAgICBvbGRGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IsXG4gICAgICAgICAgICByZXN1bHQ7XG4gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSB0cnVlO1xuICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlO1xuICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsO1xuICAgICAgICByZXN1bHQgPSBwYXJzZXIoKTtcbiAgICAgICAgaWYgKGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gb2xkSXNCaW5kaW5nRWxlbWVudDtcbiAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gb2xkSXNBc3NpZ25tZW50VGFyZ2V0O1xuICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBvbGRGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZXIpIHtcbiAgICAgICAgdmFyIG9sZElzQmluZGluZ0VsZW1lbnQgPSBpc0JpbmRpbmdFbGVtZW50LFxuICAgICAgICAgICAgb2xkSXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNBc3NpZ25tZW50VGFyZ2V0LFxuICAgICAgICAgICAgb2xkRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yLFxuICAgICAgICAgICAgcmVzdWx0O1xuICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTtcbiAgICAgICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDtcbiAgICAgICAgcmVzdWx0ID0gcGFyc2VyKCk7XG4gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBpc0JpbmRpbmdFbGVtZW50ICYmIG9sZElzQmluZGluZ0VsZW1lbnQ7XG4gICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQXNzaWdubWVudFRhcmdldCAmJiBvbGRJc0Fzc2lnbm1lbnRUYXJnZXQ7XG4gICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG9sZEZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciB8fCBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTMuMy4zIERlc3RydWN0dXJpbmcgQmluZGluZyBQYXR0ZXJuc1xuXG4gICAgZnVuY3Rpb24gcGFyc2VBcnJheVBhdHRlcm4ocGFyYW1zLCBraW5kKSB7XG4gICAgICAgIHZhciBub2RlID0gbmV3IE5vZGUoKSwgZWxlbWVudHMgPSBbXSwgcmVzdCwgcmVzdE5vZGU7XG4gICAgICAgIGV4cGVjdCgnWycpO1xuXG4gICAgICAgIHdoaWxlICghbWF0Y2goJ10nKSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoKCcsJykpIHtcbiAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2goJy4uLicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3ROb2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGxvb2thaGVhZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3QgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcihraW5kKTtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChyZXN0Tm9kZS5maW5pc2hSZXN0RWxlbWVudChyZXN0KSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJ10nKSkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoJywnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdCgnXScpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEFycmF5UGF0dGVybihlbGVtZW50cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eVBhdHRlcm4ocGFyYW1zLCBraW5kKSB7XG4gICAgICAgIHZhciBub2RlID0gbmV3IE5vZGUoKSwga2V5LCBrZXlUb2tlbiwgY29tcHV0ZWQgPSBtYXRjaCgnWycpLCBpbml0O1xuICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGtleVRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCgnPScpKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goa2V5VG9rZW4pO1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgJ2luaXQnLCBrZXksIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBuZXcgV3JhcHBpbmdOb2RlKGtleVRva2VuKS5maW5pc2hBc3NpZ25tZW50UGF0dGVybihrZXksIGluaXQpLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghbWF0Y2goJzonKSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwgZmFsc2UsIGtleSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICB9XG4gICAgICAgIGV4cGVjdCgnOicpO1xuICAgICAgICBpbml0ID0gcGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCBpbml0LCBmYWxzZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UGF0dGVybihwYXJhbXMsIGtpbmQpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpLCBwcm9wZXJ0aWVzID0gW107XG5cbiAgICAgICAgZXhwZWN0KCd7Jyk7XG5cbiAgICAgICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocGFyc2VQcm9wZXJ0eVBhdHRlcm4ocGFyYW1zLCBraW5kKSk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoJywnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaE9iamVjdFBhdHRlcm4ocHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCkge1xuICAgICAgICBpZiAobWF0Y2goJ1snKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlQYXR0ZXJuKHBhcmFtcywga2luZCk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ3snKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0UGF0dGVybihwYXJhbXMsIGtpbmQpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZCgnbGV0JykpIHtcbiAgICAgICAgICAgIGlmIChraW5kID09PSAnY29uc3QnIHx8IGtpbmQgPT09ICdsZXQnKSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zLnB1c2gobG9va2FoZWFkKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKGtpbmQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCkge1xuICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IGxvb2thaGVhZCwgcGF0dGVybiwgcHJldmlvdXNBbGxvd1lpZWxkLCByaWdodDtcbiAgICAgICAgcGF0dGVybiA9IHBhcnNlUGF0dGVybihwYXJhbXMsIGtpbmQpO1xuICAgICAgICBpZiAobWF0Y2goJz0nKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxkO1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHRydWU7XG4gICAgICAgICAgICByaWdodCA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuICAgICAgICAgICAgcGF0dGVybiA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoQXNzaWdubWVudFBhdHRlcm4ocGF0dGVybiwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEyLjIuNSBBcnJheSBJbml0aWFsaXplclxuXG4gICAgZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpemVyKCkge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSBbXSwgbm9kZSA9IG5ldyBOb2RlKCksIHJlc3RTcHJlYWQ7XG5cbiAgICAgICAgZXhwZWN0KCdbJyk7XG5cbiAgICAgICAgd2hpbGUgKCFtYXRjaCgnXScpKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2goJywnKSkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcuLi4nKSkge1xuICAgICAgICAgICAgICAgIHJlc3RTcHJlYWQgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIHJlc3RTcHJlYWQuZmluaXNoU3ByZWFkRWxlbWVudChpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTtcblxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJ10nKSkge1xuICAgICAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHJlc3RTcHJlYWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEFycmF5RXhwcmVzc2lvbihlbGVtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTIuMi42IE9iamVjdCBJbml0aWFsaXplclxuXG4gICAgZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG5vZGUsIHBhcmFtSW5mbywgaXNHZW5lcmF0b3IpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0LCBib2R5O1xuXG4gICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcblxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDtcbiAgICAgICAgYm9keSA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKTtcblxuICAgICAgICBpZiAoc3RyaWN0ICYmIHBhcmFtSW5mby5maXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHBhcmFtSW5mby5maXJzdFJlc3RyaWN0ZWQsIHBhcmFtSW5mby5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaWN0ICYmIHBhcmFtSW5mby5zdHJpY3RlZCkge1xuICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ocGFyYW1JbmZvLnN0cmljdGVkLCBwYXJhbUluZm8ubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtSW5mby5wYXJhbXMsIHBhcmFtSW5mby5kZWZhdWx0cywgYm9keSwgaXNHZW5lcmF0b3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhcmFtcywgbWV0aG9kLCBub2RlID0gbmV3IE5vZGUoKSxcbiAgICAgICAgICAgIHByZXZpb3VzQWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7XG5cbiAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlO1xuICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcygpO1xuICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBmYWxzZTtcbiAgICAgICAgbWV0aG9kID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG5vZGUsIHBhcmFtcywgZmFsc2UpO1xuICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgIHJldHVybiBtZXRob2Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHtcbiAgICAgICAgdmFyIHRva2VuLCBub2RlID0gbmV3IE5vZGUoKSwgZXhwcjtcblxuICAgICAgICB0b2tlbiA9IGxleCgpO1xuXG4gICAgICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgZnJvbSBwYXJzZU9iamVjdFByb3BlcnR5KCksIHdoZXJlXG4gICAgICAgIC8vIEVPRiBhbmQgUHVuY3R1YXRvciB0b2tlbnMgYXJlIGFscmVhZHkgZmlsdGVyZWQgb3V0LlxuXG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICBjYXNlIFRva2VuLlN0cmluZ0xpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVtZXJpY0xpdGVyYWw6XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIHRva2VuLm9jdGFsKSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hMaXRlcmFsKHRva2VuKTtcbiAgICAgICAgY2FzZSBUb2tlbi5JZGVudGlmaWVyOlxuICAgICAgICBjYXNlIFRva2VuLkJvb2xlYW5MaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bGxMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLktleXdvcmQ6XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJZGVudGlmaWVyKHRva2VuLnZhbHVlKTtcbiAgICAgICAgY2FzZSBUb2tlbi5QdW5jdHVhdG9yOlxuICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBleHByID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoJ10nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb29rYWhlYWRQcm9wZXJ0eU5hbWUoKSB7XG4gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUb2tlbi5JZGVudGlmaWVyOlxuICAgICAgICBjYXNlIFRva2VuLlN0cmluZ0xpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVsbExpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVtZXJpY0xpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlIFRva2VuLlB1bmN0dWF0b3I6XG4gICAgICAgICAgICByZXR1cm4gbG9va2FoZWFkLnZhbHVlID09PSAnWyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdG8gdHJ5IHRvIHBhcnNlIGEgTWV0aG9kRGVmaW5pdGlvbiBhcyBkZWZpbmVkIGluIDE0LjMuIEJ1dCBpbiB0aGUgY2FzZSBvZiBvYmplY3QgbGl0ZXJhbHMsXG4gICAgLy8gaXQgbWlnaHQgYmUgY2FsbGVkIGF0IGEgcG9zaXRpb24gd2hlcmUgdGhlcmUgaXMgaW4gZmFjdCBhIHNob3J0IGhhbmQgaWRlbnRpZmllciBwYXR0ZXJuIG9yIGEgZGF0YSBwcm9wZXJ0eS5cbiAgICAvLyBUaGlzIGNhbiBvbmx5IGJlIGRldGVybWluZWQgYWZ0ZXIgd2UgY29uc3VtZWQgdXAgdG8gdGhlIGxlZnQgcGFyZW50aGVzZXMuXG4gICAgLy9cbiAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBiYWNrIHRyYWNraW5nLCBpdCByZXR1cm5zIGBudWxsYCBpZiB0aGUgcG9zaXRpb24gaXMgbm90IGEgTWV0aG9kRGVmaW5pdGlvbiBhbmQgdGhlIGNhbGxlclxuICAgIC8vIGlzIHJlc3BvbnNpYmxlIHRvIHZpc2l0IG90aGVyIG9wdGlvbnMuXG4gICAgZnVuY3Rpb24gdHJ5UGFyc2VNZXRob2REZWZpbml0aW9uKHRva2VuLCBrZXksIGNvbXB1dGVkLCBub2RlKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgb3B0aW9ucywgbWV0aG9kTm9kZSwgcGFyYW1zLFxuICAgICAgICAgICAgcHJldmlvdXNBbGxvd1lpZWxkID0gc3RhdGUuYWxsb3dZaWVsZDtcblxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGBnZXRgIGFuZCBgc2V0YDtcblxuICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnZ2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eU5hbWUoKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goJ1snKTtcbiAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgICAgICAgICAgICAgbWV0aG9kTm9kZSA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCcoJyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obWV0aG9kTm9kZSwge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0czogW10sXG4gICAgICAgICAgICAgICAgICAgIHN0cmljdGVkOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgICAgICB9LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdnZXQnLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICdzZXQnICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpO1xuICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgICAgICBtZXRob2ROb2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoJygnKTtcblxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtU2V0OiB7fVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcpJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlUGFyYW0ob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cGVjdCgnKScpO1xuXG4gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG1ldGhvZE5vZGUsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ3NldCcsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICcqJyAmJiBsb29rYWhlYWRQcm9wZXJ0eU5hbWUoKSkge1xuICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgbWV0aG9kTm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSB0cnVlO1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTtcbiAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG1ldGhvZE5vZGUsIHBhcmFtcywgdHJ1ZSk7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ICYmIG1hdGNoKCcoJykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3QgYSBNZXRob2REZWZpbml0aW9uLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5KGhhc1Byb3RvKSB7XG4gICAgICAgIHZhciB0b2tlbiA9IGxvb2thaGVhZCwgbm9kZSA9IG5ldyBOb2RlKCksIGNvbXB1dGVkLCBrZXksIG1heWJlTWV0aG9kLCBwcm90bywgdmFsdWU7XG5cbiAgICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpO1xuICAgICAgICBpZiAobWF0Y2goJyonKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgICAgIH1cbiAgICAgICAgbWF5YmVNZXRob2QgPSB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG5vZGUpO1xuICAgICAgICBpZiAobWF5YmVNZXRob2QpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXliZU1ldGhvZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZWQgX19wcm90b19fXG4gICAgICAgIGlmICghY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIHByb3RvID0gKGtleS50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBrZXkubmFtZSA9PT0gJ19fcHJvdG9fXycpIHx8XG4gICAgICAgICAgICAgICAgKGtleS50eXBlID09PSBTeW50YXguTGl0ZXJhbCAmJiBrZXkudmFsdWUgPT09ICdfX3Byb3RvX18nKTtcbiAgICAgICAgICAgIGlmIChoYXNQcm90by52YWx1ZSAmJiBwcm90bykge1xuICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYXNQcm90by52YWx1ZSB8PSBwcm90bztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaCgnOicpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHZhbHVlID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICAgICAgaWYgKG1hdGNoKCc9JykpIHtcbiAgICAgICAgICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBsb29rYWhlYWQ7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFdyYXBwaW5nTm9kZSh0b2tlbikuZmluaXNoQXNzaWdubWVudFBhdHRlcm4oa2V5LCB2YWx1ZSksIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwga2V5LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKSB7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW10sIGhhc1Byb3RvID0ge3ZhbHVlOiBmYWxzZX0sIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIGV4cGVjdCgneycpO1xuXG4gICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHBhcnNlT2JqZWN0UHJvcGVydHkoaGFzUHJvdG8pKTtcblxuICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdCgnfScpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaE9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgIGNhc2UgU3ludGF4LklkZW50aWZpZXI6XG4gICAgICAgIGNhc2UgU3ludGF4Lk1lbWJlckV4cHJlc3Npb246XG4gICAgICAgIGNhc2UgU3ludGF4LlJlc3RFbGVtZW50OlxuICAgICAgICBjYXNlIFN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFN5bnRheC5TcHJlYWRFbGVtZW50OlxuICAgICAgICAgICAgZXhwci50eXBlID0gU3ludGF4LlJlc3RFbGVtZW50O1xuICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuYXJndW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU3ludGF4LkFycmF5RXhwcmVzc2lvbjpcbiAgICAgICAgICAgIGV4cHIudHlwZSA9IFN5bnRheC5BcnJheVBhdHRlcm47XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwci5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChleHByLmVsZW1lbnRzW2ldICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByLmVsZW1lbnRzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbjpcbiAgICAgICAgICAgIGV4cHIudHlwZSA9IFN5bnRheC5PYmplY3RQYXR0ZXJuO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByLnByb3BlcnRpZXNbaV0udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uOlxuICAgICAgICAgICAgZXhwci50eXBlID0gU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIubGVmdCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEFsbG93IG90aGVyIG5vZGUgdHlwZSBmb3IgdG9sZXJhbnQgcGFyc2luZy5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTIuMi45IFRlbXBsYXRlIExpdGVyYWxzXG5cbiAgICBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlRWxlbWVudChvcHRpb24pIHtcbiAgICAgICAgdmFyIG5vZGUsIHRva2VuO1xuXG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uVGVtcGxhdGUgfHwgKG9wdGlvbi5oZWFkICYmICFsb29rYWhlYWQuaGVhZCkpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hUZW1wbGF0ZUVsZW1lbnQoeyByYXc6IHRva2VuLnZhbHVlLnJhdywgY29va2VkOiB0b2tlbi52YWx1ZS5jb29rZWQgfSwgdG9rZW4udGFpbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSB7XG4gICAgICAgIHZhciBxdWFzaSwgcXVhc2lzLCBleHByZXNzaW9ucywgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlRWxlbWVudCh7IGhlYWQ6IHRydWUgfSk7XG4gICAgICAgIHF1YXNpcyA9IFtxdWFzaV07XG4gICAgICAgIGV4cHJlc3Npb25zID0gW107XG5cbiAgICAgICAgd2hpbGUgKCFxdWFzaS50YWlsKSB7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUVsZW1lbnQoeyBoZWFkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHF1YXNpcy5wdXNoKHF1YXNpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Npb25zKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi4yLjEwIFRoZSBHcm91cGluZyBPcGVyYXRvclxuXG4gICAgZnVuY3Rpb24gcGFyc2VHcm91cEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciBleHByLCBleHByZXNzaW9ucywgc3RhcnRUb2tlbiwgaSwgcGFyYW1zID0gW107XG5cbiAgICAgICAgZXhwZWN0KCcoJyk7XG5cbiAgICAgICAgaWYgKG1hdGNoKCcpJykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCgnPT4nKSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgnPT4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICByYXdQYXJhbXM6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaWYgKG1hdGNoKCcuLi4nKSkge1xuICAgICAgICAgICAgZXhwciA9IHBhcnNlUmVzdEVsZW1lbnQocGFyYW1zKTtcbiAgICAgICAgICAgIGV4cGVjdCgnKScpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCgnPT4nKSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgnPT4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBbZXhwcl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG5cbiAgICAgICAgaWYgKG1hdGNoKCcsJykpIHtcbiAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlO1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMgPSBbZXhwcl07XG5cbiAgICAgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXgoKTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnLi4uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0JpbmRpbmdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VSZXN0RWxlbWVudChwYXJhbXMpKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJz0+JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnPT4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHJlc3Npb25zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGV4cHJlc3Npb25zXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZXhwZWN0KCcpJyk7XG5cbiAgICAgICAgaWYgKG1hdGNoKCc9PicpKSB7XG4gICAgICAgICAgICBpZiAoZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBleHByLm5hbWUgPT09ICd5aWVsZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBQbGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbZXhwcl1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzQmluZGluZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhwci50eXBlID09PSBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cHIuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuZXhwcmVzc2lvbnNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHByID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgICAgIHBhcmFtczogZXhwci50eXBlID09PSBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uID8gZXhwci5leHByZXNzaW9ucyA6IFtleHByXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuXG4gICAgLy8gRUNNQS0yNjIgMTIuMiBQcmltYXJ5IEV4cHJlc3Npb25zXG5cbiAgICBmdW5jdGlvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgdHlwZSwgdG9rZW4sIGV4cHIsIG5vZGU7XG5cbiAgICAgICAgaWYgKG1hdGNoKCcoJykpIHtcbiAgICAgICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlR3JvdXBFeHByZXNzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaCgnWycpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUFycmF5SW5pdGlhbGl6ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoKCd7JykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHlwZSA9IGxvb2thaGVhZC50eXBlO1xuICAgICAgICBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnNvdXJjZVR5cGUgPT09ICdtb2R1bGUnICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gJ2F3YWl0Jykge1xuICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHByID0gbm9kZS5maW5pc2hJZGVudGlmaWVyKGxleCgpLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7XG4gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGxvb2thaGVhZC5vY3RhbCkge1xuICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cHIgPSBub2RlLmZpbmlzaExpdGVyYWwobGV4KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmIHN0YXRlLmFsbG93WWllbGQgJiYgbWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgbWF0Y2hLZXl3b3JkKCdsZXQnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaElkZW50aWZpZXIobGV4KCkudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgndGhpcycpKSB7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVGhpc0V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2NsYXNzJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxleCgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCkge1xuICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgICAgIHRva2VuLnZhbHVlID0gKHRva2VuLnZhbHVlID09PSAndHJ1ZScpO1xuICAgICAgICAgICAgZXhwciA9IG5vZGUuZmluaXNoTGl0ZXJhbCh0b2tlbik7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHtcbiAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBleHByID0gbm9kZS5maW5pc2hMaXRlcmFsKHRva2VuKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnLycpIHx8IG1hdGNoKCcvPScpKSB7XG4gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHRva2VuID0gY29sbGVjdFJlZ2V4KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2VuID0gc2NhblJlZ0V4cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBleHByID0gbm9kZS5maW5pc2hMaXRlcmFsKHRva2VuKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgZXhwciA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsZXgoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi4zIExlZnQtSGFuZC1TaWRlIEV4cHJlc3Npb25zXG5cbiAgICBmdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgZXhwcjtcblxuICAgICAgICBleHBlY3QoJygnKTtcblxuICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHtcbiAgICAgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcuLi4nKSkge1xuICAgICAgICAgICAgICAgICAgICBleHByID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuZmluaXNoU3ByZWFkRWxlbWVudChpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHByID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKGV4cHIpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleHBlY3RDb21tYVNlcGFyYXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KCcpJyk7XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkge1xuICAgICAgICB2YXIgdG9rZW4sIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJOYW1lKHRva2VuKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSWRlbnRpZmllcih0b2tlbi52YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpIHtcbiAgICAgICAgZXhwZWN0KCcuJyk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlQ29tcHV0ZWRNZW1iZXIoKSB7XG4gICAgICAgIHZhciBleHByO1xuXG4gICAgICAgIGV4cGVjdCgnWycpO1xuXG4gICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlRXhwcmVzc2lvbik7XG5cbiAgICAgICAgZXhwZWN0KCddJyk7XG5cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTIuMy4zIFRoZSBuZXcgT3BlcmF0b3JcblxuICAgIGZ1bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGNhbGxlZSwgYXJncywgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnbmV3Jyk7XG5cbiAgICAgICAgaWYgKG1hdGNoKCcuJykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gJ3RhcmdldCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaE1ldGFQcm9wZXJ0eSgnbmV3JywgJ3RhcmdldCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsZWUgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbik7XG4gICAgICAgIGFyZ3MgPSBtYXRjaCgnKCcpID8gcGFyc2VBcmd1bWVudHMoKSA6IFtdO1xuXG4gICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hOZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncyk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTIuMy40IEZ1bmN0aW9uIENhbGxzXG5cbiAgICBmdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7XG4gICAgICAgIHZhciBxdWFzaSwgZXhwciwgYXJncywgcHJvcGVydHksIHN0YXJ0VG9rZW4sIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47XG5cbiAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnc3VwZXInKSAmJiBzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICAgICAgZXhwciA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGV4cHIgPSBleHByLmZpbmlzaFN1cGVyKCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKCcoJykgJiYgIW1hdGNoKCcuJykgJiYgIW1hdGNoKCdbJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIobWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lvbiA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgaWYgKG1hdGNoKCcuJykpIHtcbiAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTtcbiAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwgcHJvcGVydHkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKCcpKSB7XG4gICAgICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaENhbGxFeHByZXNzaW9uKGV4cHIsIGFyZ3MpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnWycpKSB7XG4gICAgICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNvbXB1dGVkTWVtYmVyKCk7XG4gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlICYmIGxvb2thaGVhZC5oZWFkKSB7XG4gICAgICAgICAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTIuMyBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9uc1xuXG4gICAgZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgcXVhc2ksIGV4cHIsIHByb3BlcnR5LCBzdGFydFRva2VuO1xuICAgICAgICBhc3NlcnQoc3RhdGUuYWxsb3dJbiwgJ2NhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbiBhbHdheXMgYWxsb3cgaW4ga2V5d29yZC4nKTtcblxuICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgICAgIGV4cHIgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBleHByID0gZXhwci5maW5pc2hTdXBlcigpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCgnWycpICYmICFtYXRjaCgnLicpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24gOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgIGlmIChtYXRjaCgnWycpKSB7XG4gICAgICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNvbXB1dGVkTWVtYmVyKCk7XG4gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy4nKSkge1xuICAgICAgICAgICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaE1lbWJlckV4cHJlc3Npb24oJy4nLCBleHByLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSAmJiBsb29rYWhlYWQuaGVhZCkge1xuICAgICAgICAgICAgICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTtcbiAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcXVhc2kpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi40IFBvc3RmaXggRXhwcmVzc2lvbnNcblxuICAgIGZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciBleHByLCB0b2tlbiwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDtcblxuICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpO1xuXG4gICAgICAgIGlmICghaGFzTGluZVRlcm1pbmF0b3IgJiYgbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkge1xuICAgICAgICAgICAgICAgIC8vIEVDTUEtMjYyIDExLjMuMSwgMTEuMy4yXG4gICAgICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdExIU1Bvc3RmaXgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghaXNBc3NpZ25tZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hQb3N0Zml4RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi41IFVuYXJ5IE9wZXJhdG9yc1xuXG4gICAgZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciB0b2tlbiwgZXhwciwgc3RhcnRUb2tlbjtcblxuICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykpIHtcbiAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VVbmFyeUV4cHJlc3Npb24pO1xuICAgICAgICAgICAgLy8gRUNNQS0yNjIgMTEuNC40LCAxMS40LjVcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdExIU1ByZWZpeCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNBc3NpZ25tZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7XG4gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJysnKSB8fCBtYXRjaCgnLScpIHx8IG1hdGNoKCd+JykgfHwgbWF0Y2goJyEnKSkge1xuICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZVVuYXJ5RXhwcmVzc2lvbik7XG4gICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpO1xuICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZCgnZGVsZXRlJykgfHwgbWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgbWF0Y2hLZXl3b3JkKCd0eXBlb2YnKSkge1xuICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZVVuYXJ5RXhwcmVzc2lvbik7XG4gICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLm9wZXJhdG9yID09PSAnZGVsZXRlJyAmJiBleHByLmFyZ3VtZW50LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3REZWxldGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIGFsbG93SW4pIHtcbiAgICAgICAgdmFyIHByZWMgPSAwO1xuXG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIHRva2VuLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICd8fCc6XG4gICAgICAgICAgICBwcmVjID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJyYmJzpcbiAgICAgICAgICAgIHByZWMgPSAyO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgICAgICBwcmVjID0gMztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ14nOlxuICAgICAgICAgICAgcHJlYyA9IDQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICcmJzpcbiAgICAgICAgICAgIHByZWMgPSA1O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnPT0nOlxuICAgICAgICBjYXNlICchPSc6XG4gICAgICAgIGNhc2UgJz09PSc6XG4gICAgICAgIGNhc2UgJyE9PSc6XG4gICAgICAgICAgICBwcmVjID0gNjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgY2FzZSAnPD0nOlxuICAgICAgICBjYXNlICc+PSc6XG4gICAgICAgIGNhc2UgJ2luc3RhbmNlb2YnOlxuICAgICAgICAgICAgcHJlYyA9IDc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdpbic6XG4gICAgICAgICAgICBwcmVjID0gYWxsb3dJbiA/IDcgOiAwO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnPDwnOlxuICAgICAgICBjYXNlICc+Pic6XG4gICAgICAgIGNhc2UgJz4+Pic6XG4gICAgICAgICAgICBwcmVjID0gODtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJysnOlxuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgIHByZWMgPSA5O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnKic6XG4gICAgICAgIGNhc2UgJy8nOlxuICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIHByZWMgPSAxMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcmVjO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEyLjYgTXVsdGlwbGljYXRpdmUgT3BlcmF0b3JzXG4gICAgLy8gRUNNQS0yNjIgMTIuNyBBZGRpdGl2ZSBPcGVyYXRvcnNcbiAgICAvLyBFQ01BLTI2MiAxMi44IEJpdHdpc2UgU2hpZnQgT3BlcmF0b3JzXG4gICAgLy8gRUNNQS0yNjIgMTIuOSBSZWxhdGlvbmFsIE9wZXJhdG9yc1xuICAgIC8vIEVDTUEtMjYyIDEyLjEwIEVxdWFsaXR5IE9wZXJhdG9yc1xuICAgIC8vIEVDTUEtMjYyIDEyLjExIEJpbmFyeSBCaXR3aXNlIE9wZXJhdG9yc1xuICAgIC8vIEVDTUEtMjYyIDEyLjEyIEJpbmFyeSBMb2dpY2FsIE9wZXJhdG9yc1xuXG4gICAgZnVuY3Rpb24gcGFyc2VCaW5hcnlFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgbWFya2VyLCBtYXJrZXJzLCBleHByLCB0b2tlbiwgcHJlYywgc3RhY2ssIHJpZ2h0LCBvcGVyYXRvciwgbGVmdCwgaTtcblxuICAgICAgICBtYXJrZXIgPSBsb29rYWhlYWQ7XG4gICAgICAgIGxlZnQgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTtcblxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHN0YXRlLmFsbG93SW4pO1xuICAgICAgICBpZiAocHJlYyA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICB0b2tlbi5wcmVjID0gcHJlYztcbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgbWFya2VycyA9IFttYXJrZXIsIGxvb2thaGVhZF07XG4gICAgICAgIHJpZ2h0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZVVuYXJ5RXhwcmVzc2lvbik7XG5cbiAgICAgICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4sIHJpZ2h0XTtcblxuICAgICAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKGxvb2thaGVhZCwgc3RhdGUuYWxsb3dJbikpID4gMCkge1xuXG4gICAgICAgICAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuXG4gICAgICAgICAgICB3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChwcmVjIDw9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDJdLnByZWMpKSB7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBvcCgpLnZhbHVlO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBtYXJrZXJzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKG1hcmtlcnNbbWFya2Vycy5sZW5ndGggLSAxXSkuZmluaXNoQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpO1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNoaWZ0LlxuICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgICAgIHRva2VuLnByZWMgPSBwcmVjO1xuICAgICAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7XG4gICAgICAgICAgICBtYXJrZXJzLnB1c2gobG9va2FoZWFkKTtcbiAgICAgICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAgdGhlIHN0YWNrLlxuICAgICAgICBpID0gc3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgZXhwciA9IHN0YWNrW2ldO1xuICAgICAgICBtYXJrZXJzLnBvcCgpO1xuICAgICAgICB3aGlsZSAoaSA+IDEpIHtcbiAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKG1hcmtlcnMucG9wKCkpLmZpbmlzaEJpbmFyeUV4cHJlc3Npb24oc3RhY2tbaSAtIDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIGV4cHIpO1xuICAgICAgICAgICAgaSAtPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG5cbiAgICAvLyBFQ01BLTI2MiAxMi4xMyBDb25kaXRpb25hbCBPcGVyYXRvclxuXG4gICAgZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciBleHByLCBwcmV2aW91c0FsbG93SW4sIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSwgc3RhcnRUb2tlbjtcblxuICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQmluYXJ5RXhwcmVzc2lvbik7XG4gICAgICAgIGlmIChtYXRjaCgnPycpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnNlcXVlbnQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcbiAgICAgICAgICAgIGV4cGVjdCgnOicpO1xuICAgICAgICAgICAgYWx0ZXJuYXRlID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcblxuICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7XG4gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxNC4yIEFycm93IEZ1bmN0aW9uIERlZmluaXRpb25zXG5cbiAgICBmdW5jdGlvbiBwYXJzZUNvbmNpc2VCb2R5KCkge1xuICAgICAgICBpZiAobWF0Y2goJ3snKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtKSB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHtcbiAgICAgICAgY2FzZSBTeW50YXguSWRlbnRpZmllcjpcbiAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0sIHBhcmFtLm5hbWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU3ludGF4LlJlc3RFbGVtZW50OlxuICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0uYXJndW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOlxuICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0ubGVmdCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW50YXguQXJyYXlQYXR0ZXJuOlxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcmFtLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmVsZW1lbnRzW2ldICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmVsZW1lbnRzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW50YXguWWllbGRFeHByZXNzaW9uOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQocGFyYW0udHlwZSA9PT0gU3ludGF4Lk9iamVjdFBhdHRlcm4sICdJbnZhbGlkIHR5cGUnKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJhbS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0ucHJvcGVydGllc1tpXS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChleHByKSB7XG4gICAgICAgIHZhciBpLCBsZW4sIHBhcmFtLCBwYXJhbXMsIGRlZmF1bHRzLCBkZWZhdWx0Q291bnQsIG9wdGlvbnMsIHRva2VuO1xuXG4gICAgICAgIGRlZmF1bHRzID0gW107XG4gICAgICAgIGRlZmF1bHRDb3VudCA9IDA7XG4gICAgICAgIHBhcmFtcyA9IFtleHByXTtcblxuICAgICAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgICAgICBjYXNlIFN5bnRheC5JZGVudGlmaWVyOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXI6XG4gICAgICAgICAgICBwYXJhbXMgPSBleHByLnBhcmFtcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgcGFyYW1TZXQ6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyYW1zLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwYXJhbSA9IHBhcmFtc1tpXTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFyYW0udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBTeW50YXguQXNzaWdubWVudFBhdHRlcm46XG4gICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gcGFyYW0ubGVmdDtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW0ucmlnaHQudHlwZSA9PT0gU3ludGF4LllpZWxkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0ucmlnaHQuYXJndW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW0ucmlnaHQudHlwZSA9IFN5bnRheC5JZGVudGlmaWVyO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC5uYW1lID0gJ3lpZWxkJztcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtLnJpZ2h0LmFyZ3VtZW50O1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuZGVsZWdhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHRzLnB1c2gocGFyYW0ucmlnaHQpO1xuICAgICAgICAgICAgICAgICsrZGVmYXVsdENvdW50O1xuICAgICAgICAgICAgICAgIGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmxlZnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbSk7XG4gICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gcGFyYW07XG4gICAgICAgICAgICAgICAgZGVmYXVsdHMucHVzaChudWxsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QgfHwgIXN0YXRlLmFsbG93WWllbGQpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIHBhcmFtID0gcGFyYW1zW2ldO1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbS50eXBlID09PSBTeW50YXguWWllbGRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWVzc2FnZSA9PT0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHN0cmljdCA/IG9wdGlvbnMuc3RyaWN0ZWQgOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZDtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBvcHRpb25zLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZmF1bHRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgZGVmYXVsdHMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0cyxcbiAgICAgICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLFxuICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ob3B0aW9ucywgbm9kZSkge1xuICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzQWxsb3dZaWVsZCwgYm9keTtcblxuICAgICAgICBpZiAoaGFzTGluZVRlcm1pbmF0b3IpIHtcbiAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KCc9PicpO1xuXG4gICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxkO1xuICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gdHJ1ZTtcblxuICAgICAgICBib2R5ID0gcGFyc2VDb25jaXNlQm9keSgpO1xuXG4gICAgICAgIGlmIChzdHJpY3QgJiYgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLCBvcHRpb25zLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpY3QgJiYgb3B0aW9ucy5zdHJpY3RlZCkge1xuICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ob3B0aW9ucy5zdHJpY3RlZCwgb3B0aW9ucy5tZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEFycm93RnVuY3Rpb25FeHByZXNzaW9uKG9wdGlvbnMucGFyYW1zLCBvcHRpb25zLmRlZmF1bHRzLCBib2R5LCBib2R5LnR5cGUgIT09IFN5bnRheC5CbG9ja1N0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTQuNCBZaWVsZCBleHByZXNzaW9uXG5cbiAgICBmdW5jdGlvbiBwYXJzZVlpZWxkRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGFyZ3VtZW50LCBleHByLCBkZWxlZ2F0ZSwgcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgIGFyZ3VtZW50ID0gbnVsbDtcbiAgICAgICAgZXhwciA9IG5ldyBOb2RlKCk7XG4gICAgICAgIGRlbGVnYXRlID0gZmFsc2U7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgneWllbGQnKTtcblxuICAgICAgICBpZiAoIWhhc0xpbmVUZXJtaW5hdG9yKSB7XG4gICAgICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxkO1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgZGVsZWdhdGUgPSBtYXRjaCgnKicpO1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJzsnKSAmJiAhbWF0Y2goJ30nKSAmJiAhbWF0Y2goJyknKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwci5maW5pc2hZaWVsZEV4cHJlc3Npb24oYXJndW1lbnQsIGRlbGVnYXRlKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMi4xNCBBc3NpZ25tZW50IE9wZXJhdG9yc1xuXG4gICAgZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIHRva2VuLCBleHByLCByaWdodCwgbGlzdCwgc3RhcnRUb2tlbjtcblxuICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcblxuICAgICAgICBpZiAoIXN0YXRlLmFsbG93WWllbGQgJiYgbWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VZaWVsZEV4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cHIgPSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpO1xuXG4gICAgICAgIGlmIChleHByLnR5cGUgPT09IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIHx8IG1hdGNoKCc9PicpKSB7XG4gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsaXN0ID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoZXhwcik7XG5cbiAgICAgICAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihsaXN0LCBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hBc3NpZ24oKSkge1xuICAgICAgICAgICAgaWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFQ01BLTI2MiAxMi4xLjFcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW1hdGNoKCc9JykpIHtcbiAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgICAgIHJpZ2h0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaEFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByLCByaWdodCk7XG4gICAgICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTIuMTUgQ29tbWEgT3BlcmF0b3JcblxuICAgIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGV4cHIsIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQsIGV4cHJlc3Npb25zO1xuXG4gICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXG4gICAgICAgIGlmIChtYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICBleHByZXNzaW9ucyA9IFtleHByXTtcblxuICAgICAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFNlcXVlbmNlRXhwcmVzc2lvbihleHByZXNzaW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy4yIEJsb2NrXG5cbiAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCkge1xuICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICdleHBvcnQnOlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQsIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlICdpbXBvcnQnOlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQsIE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlICdjb25zdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHtpbkZvcjogZmFsc2V9KTtcbiAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKG5ldyBOb2RlKCkpO1xuICAgICAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNsYXNzRGVjbGFyYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2xldCcpICYmIGlzTGV4aWNhbERlY2xhcmF0aW9uKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUxleGljYWxEZWNsYXJhdGlvbih7aW5Gb3I6IGZhbHNlfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudExpc3QoKSB7XG4gICAgICAgIHZhciBsaXN0ID0gW107XG4gICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUJsb2NrKCkge1xuICAgICAgICB2YXIgYmxvY2ssIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIGV4cGVjdCgneycpO1xuXG4gICAgICAgIGJsb2NrID0gcGFyc2VTdGF0ZW1lbnRMaXN0KCk7XG5cbiAgICAgICAgZXhwZWN0KCd9Jyk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQmxvY2tTdGF0ZW1lbnQoYmxvY2spO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjMuMiBWYXJpYWJsZSBTdGF0ZW1lbnRcblxuICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKGtpbmQpIHtcbiAgICAgICAgdmFyIHRva2VuLCBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICB0b2tlbiA9IGxleCgpO1xuXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIHRva2VuLnZhbHVlID09PSAneWllbGQnKSB7XG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7XG4gICAgICAgICAgICB9IGlmICghc3RhdGUuYWxsb3dZaWVsZCkge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8IHRva2VuLnZhbHVlICE9PSAnbGV0JyB8fCBraW5kICE9PSAndmFyJykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnNvdXJjZVR5cGUgPT09ICdtb2R1bGUnICYmIHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgJiYgdG9rZW4udmFsdWUgPT09ICdhd2FpdCcpIHtcbiAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaElkZW50aWZpZXIodG9rZW4udmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihvcHRpb25zKSB7XG4gICAgICAgIHZhciBpbml0ID0gbnVsbCwgaWQsIG5vZGUgPSBuZXcgTm9kZSgpLCBwYXJhbXMgPSBbXTtcblxuICAgICAgICBpZCA9IHBhcnNlUGF0dGVybihwYXJhbXMsICd2YXInKTtcblxuICAgICAgICAvLyBFQ01BLTI2MiAxMi4yLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7XG4gICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdFZhck5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoKCc9JykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgaW5pdCA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQudHlwZSAhPT0gU3ludGF4LklkZW50aWZpZXIgJiYgIW9wdGlvbnMuaW5Gb3IpIHtcbiAgICAgICAgICAgIGV4cGVjdCgnPScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIG9wdCwgbGlzdDtcblxuICAgICAgICBvcHQgPSB7IGluRm9yOiBvcHRpb25zLmluRm9yIH07XG4gICAgICAgIGxpc3QgPSBbcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKG9wdCldO1xuXG4gICAgICAgIHdoaWxlIChtYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGxpc3QucHVzaChwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24ob3B0KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIGRlY2xhcmF0aW9ucztcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCd2YXInKTtcblxuICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHsgaW5Gb3I6IGZhbHNlIH0pO1xuXG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTMuMy4xIExldCBhbmQgQ29uc3QgRGVjbGFyYXRpb25zXG5cbiAgICBmdW5jdGlvbiBwYXJzZUxleGljYWxCaW5kaW5nKGtpbmQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGluaXQgPSBudWxsLCBpZCwgbm9kZSA9IG5ldyBOb2RlKCksIHBhcmFtcyA9IFtdO1xuXG4gICAgICAgIGlkID0gcGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7XG5cbiAgICAgICAgLy8gRUNNQS0yNjIgMTIuMi4xXG4gICAgICAgIGlmIChzdHJpY3QgJiYgaWQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkge1xuICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChraW5kID09PSAnY29uc3QnKSB7XG4gICAgICAgICAgICBpZiAoIW1hdGNoS2V5d29yZCgnaW4nKSAmJiAhbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgnPScpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCghb3B0aW9ucy5pbkZvciAmJiBpZC50eXBlICE9PSBTeW50YXguSWRlbnRpZmllcikgfHwgbWF0Y2goJz0nKSkge1xuICAgICAgICAgICAgZXhwZWN0KCc9Jyk7XG4gICAgICAgICAgICBpbml0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VCaW5kaW5nTGlzdChraW5kLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBsaXN0ID0gW3BhcnNlTGV4aWNhbEJpbmRpbmcoa2luZCwgb3B0aW9ucyldO1xuXG4gICAgICAgIHdoaWxlIChtYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGxpc3QucHVzaChwYXJzZUxleGljYWxCaW5kaW5nKGtpbmQsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gdG9rZW5pemVyU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICBoYXNMaW5lVGVybWluYXRvcjogaGFzTGluZVRlcm1pbmF0b3IsXG4gICAgICAgICAgICBsYXN0SW5kZXg6IGxhc3RJbmRleCxcbiAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVyOiBsYXN0TGluZU51bWJlcixcbiAgICAgICAgICAgIGxhc3RMaW5lU3RhcnQ6IGxhc3RMaW5lU3RhcnQsXG4gICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBzdGFydExpbmVOdW1iZXIsXG4gICAgICAgICAgICBzdGFydExpbmVTdGFydDogc3RhcnRMaW5lU3RhcnQsXG4gICAgICAgICAgICBsb29rYWhlYWQ6IGxvb2thaGVhZCxcbiAgICAgICAgICAgIHRva2VuQ291bnQ6IGV4dHJhLnRva2VucyA/IGV4dHJhLnRva2Vucy5sZW5ndGggOiAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRUb2tlbml6ZXJTdGF0ZSh0cykge1xuICAgICAgICBpbmRleCA9IHRzLmluZGV4O1xuICAgICAgICBsaW5lTnVtYmVyID0gdHMubGluZU51bWJlcjtcbiAgICAgICAgbGluZVN0YXJ0ID0gdHMubGluZVN0YXJ0O1xuICAgICAgICBoYXNMaW5lVGVybWluYXRvciA9IHRzLmhhc0xpbmVUZXJtaW5hdG9yO1xuICAgICAgICBsYXN0SW5kZXggPSB0cy5sYXN0SW5kZXg7XG4gICAgICAgIGxhc3RMaW5lTnVtYmVyID0gdHMubGFzdExpbmVOdW1iZXI7XG4gICAgICAgIGxhc3RMaW5lU3RhcnQgPSB0cy5sYXN0TGluZVN0YXJ0O1xuICAgICAgICBzdGFydEluZGV4ID0gdHMuc3RhcnRJbmRleDtcbiAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gdHMuc3RhcnRMaW5lTnVtYmVyO1xuICAgICAgICBzdGFydExpbmVTdGFydCA9IHRzLnN0YXJ0TGluZVN0YXJ0O1xuICAgICAgICBsb29rYWhlYWQgPSB0cy5sb29rYWhlYWQ7XG4gICAgICAgIGlmIChleHRyYS50b2tlbnMpIHtcbiAgICAgICAgICAgIGV4dHJhLnRva2Vucy5zcGxpY2UodHMudG9rZW5Db3VudCwgZXh0cmEudG9rZW5zLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xleGljYWxEZWNsYXJhdGlvbigpIHtcbiAgICAgICAgdmFyIGxleGljYWwsIHRzO1xuXG4gICAgICAgIHRzID0gdG9rZW5pemVyU3RhdGUoKTtcblxuICAgICAgICBsZXgoKTtcbiAgICAgICAgbGV4aWNhbCA9IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgfHwgbWF0Y2goJ1snKSB8fCBtYXRjaCgneycpIHx8XG4gICAgICAgICAgICBtYXRjaEtleXdvcmQoJ2xldCcpIHx8IG1hdGNoS2V5d29yZCgneWllbGQnKTtcblxuICAgICAgICByZXNldFRva2VuaXplclN0YXRlKHRzKTtcblxuICAgICAgICByZXR1cm4gbGV4aWNhbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUxleGljYWxEZWNsYXJhdGlvbihvcHRpb25zKSB7XG4gICAgICAgIHZhciBraW5kLCBkZWNsYXJhdGlvbnMsIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIGtpbmQgPSBsZXgoKS52YWx1ZTtcbiAgICAgICAgYXNzZXJ0KGtpbmQgPT09ICdsZXQnIHx8IGtpbmQgPT09ICdjb25zdCcsICdMZXhpY2FsIGRlY2xhcmF0aW9uIG11c3QgYmUgZWl0aGVyIGxldCBvciBjb25zdCcpO1xuXG4gICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlQmluZGluZ0xpc3Qoa2luZCwgb3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaExleGljYWxEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUmVzdEVsZW1lbnQocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXJhbSwgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKCd7JykpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJhbXMucHVzaChsb29rYWhlYWQpO1xuXG4gICAgICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICBpZiAobWF0Y2goJz0nKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5EZWZhdWx0UmVzdFBhcmFtZXRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFJlc3RFbGVtZW50KHBhcmFtKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy40IEVtcHR5IFN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VFbXB0eVN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGV4cGVjdCgnOycpO1xuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFbXB0eVN0YXRlbWVudCgpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEyLjQgRXhwcmVzc2lvbiBTdGF0ZW1lbnRcblxuICAgIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwcmVzc2lvblN0YXRlbWVudChleHByKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy42IElmIHN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VJZlN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnaWYnKTtcblxuICAgICAgICBleHBlY3QoJygnKTtcblxuICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgZXhwZWN0KCcpJyk7XG5cbiAgICAgICAgY29uc2VxdWVudCA9IHBhcnNlU3RhdGVtZW50KCk7XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZWxzZScpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbHRlcm5hdGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy43IEl0ZXJhdGlvbiBTdGF0ZW1lbnRzXG5cbiAgICBmdW5jdGlvbiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgYm9keSwgdGVzdCwgb2xkSW5JdGVyYXRpb247XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnZG8nKTtcblxuICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7XG5cbiAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpO1xuXG4gICAgICAgIGV4cGVjdCgnKCcpO1xuXG4gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgICAgICBleHBlY3QoJyknKTtcblxuICAgICAgICBpZiAobWF0Y2goJzsnKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hEb1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgdGVzdCwgYm9keSwgb2xkSW5JdGVyYXRpb247XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTtcblxuICAgICAgICBleHBlY3QoJygnKTtcblxuICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgZXhwZWN0KCcpJyk7XG5cbiAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlO1xuXG4gICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgaW5pdCwgZm9ySW4sIGluaXRTZXEsIGluaXRTdGFydFRva2VuLCB0ZXN0LCB1cGRhdGUsIGxlZnQsIHJpZ2h0LCBraW5kLCBkZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBib2R5LCBvbGRJbkl0ZXJhdGlvbiwgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjtcblxuICAgICAgICBpbml0ID0gdGVzdCA9IHVwZGF0ZSA9IG51bGw7XG4gICAgICAgIGZvckluID0gdHJ1ZTtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdmb3InKTtcblxuICAgICAgICBleHBlY3QoJygnKTtcblxuICAgICAgICBpZiAobWF0Y2goJzsnKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCd2YXInKSkge1xuICAgICAgICAgICAgICAgIGluaXQgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgICAgIGxleCgpO1xuXG4gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoeyBpbkZvcjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgbWF0Y2hLZXl3b3JkKCdpbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVjbGFyYXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkge1xuICAgICAgICAgICAgICAgICAgICBpbml0ID0gaW5pdC5maW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCc7Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoJ2NvbnN0JykgfHwgbWF0Y2hLZXl3b3JkKCdsZXQnKSkge1xuICAgICAgICAgICAgICAgIGluaXQgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgICAgIGtpbmQgPSBsZXgoKS52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmICghc3RyaWN0ICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gJ2luJykge1xuICAgICAgICAgICAgICAgICAgICBpbml0ID0gaW5pdC5maW5pc2hJZGVudGlmaWVyKGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VCaW5kaW5nTGlzdChraW5kLCB7aW5Gb3I6IHRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBkZWNsYXJhdGlvbnNbMF0uaW5pdCA9PT0gbnVsbCAmJiBtYXRjaEtleXdvcmQoJ2luJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlzaExleGljYWxEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlzaExleGljYWxEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGluaXQuZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGluaXRTdGFydFRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpbml0ID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnaW4nKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXNzaWdubWVudFRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpO1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdvZicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNBc3NpZ25tZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckxvb3ApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihpbml0KTtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZm9ySW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2goJywnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFNlcSA9IFtpbml0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFNlcS5wdXNoKGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG5ldyBXcmFwcGluZ05vZGUoaW5pdFN0YXJ0VG9rZW4pLmZpbmlzaFNlcXVlbmNlRXhwcmVzc2lvbihpbml0U2VxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgICAgICAgICAgIGlmICghbWF0Y2goJzsnKSkge1xuICAgICAgICAgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cGVjdCgnOycpO1xuXG4gICAgICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdCgnKScpO1xuXG4gICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247XG4gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTtcblxuICAgICAgICBib2R5ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZVN0YXRlbWVudCk7XG5cbiAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcblxuICAgICAgICByZXR1cm4gKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgP1xuICAgICAgICAgICAgICAgIG5vZGUuZmluaXNoRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgOlxuICAgICAgICAgICAgICAgIGZvckluID8gbm9kZS5maW5pc2hGb3JJblN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkgOlxuICAgICAgICAgICAgICAgICAgICBub2RlLmZpbmlzaEZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy44IFRoZSBjb250aW51ZSBzdGF0ZW1lbnRcblxuICAgIGZ1bmN0aW9uIHBhcnNlQ29udGludWVTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgbGFiZWwgPSBudWxsLCBrZXk7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnY29udGludWUnKTtcblxuICAgICAgICAvLyBPcHRpbWl6ZSB0aGUgbW9zdCBjb21tb24gZm9ybTogJ2NvbnRpbnVlOycuXG4gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChzdGFydEluZGV4KSA9PT0gMHgzQikge1xuICAgICAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgICAgIGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaENvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0xpbmVUZXJtaW5hdG9yKSB7XG4gICAgICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hDb250aW51ZVN0YXRlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICAgICAgbGFiZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgICAgICBrZXkgPSAnJCcgKyBsYWJlbC5uYW1lO1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICFzdGF0ZS5pbkl0ZXJhdGlvbikge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQ29udGludWVTdGF0ZW1lbnQobGFiZWwpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjkgVGhlIGJyZWFrIHN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VCcmVha1N0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IG51bGwsIGtleTtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdicmVhaycpO1xuXG4gICAgICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS5cbiAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGxhc3RJbmRleCkgPT09IDB4M0IpIHtcbiAgICAgICAgICAgIGxleCgpO1xuXG4gICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEJyZWFrU3RhdGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0xpbmVUZXJtaW5hdG9yKSB7XG4gICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICAgICAga2V5ID0gJyQnICsgbGFiZWwubmFtZTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsQnJlYWspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQnJlYWtTdGF0ZW1lbnQobGFiZWwpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjEwIFRoZSByZXR1cm4gc3RhdGVtZW50XG5cbiAgICBmdW5jdGlvbiBwYXJzZVJldHVyblN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBhcmd1bWVudCA9IG51bGw7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgncmV0dXJuJyk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5JbGxlZ2FsUmV0dXJuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICdyZXR1cm4nIGZvbGxvd2VkIGJ5IGEgc3BhY2UgYW5kIGFuIGlkZW50aWZpZXIgaXMgdmVyeSBjb21tb24uXG4gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChsYXN0SW5kZXgpID09PSAweDIwKSB7XG4gICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQobGFzdEluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikge1xuICAgICAgICAgICAgLy8gSEFDS1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUmV0dXJuU3RhdGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxMy4xMSBUaGUgd2l0aCBzdGF0ZW1lbnRcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2l0aFN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBvYmplY3QsIGJvZHk7XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3RNb2RlV2l0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3RLZXl3b3JkKCd3aXRoJyk7XG5cbiAgICAgICAgZXhwZWN0KCcoJyk7XG5cbiAgICAgICAgb2JqZWN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgZXhwZWN0KCcpJyk7XG5cbiAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoV2l0aFN0YXRlbWVudChvYmplY3QsIGJvZHkpO1xuICAgIH1cblxuICAgIC8vIEVDTUEtMjYyIDEzLjEyIFRoZSBzd2l0Y2ggc3RhdGVtZW50XG5cbiAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKSB7XG4gICAgICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCwgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHRlc3QgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwZWN0S2V5d29yZCgnY2FzZScpO1xuICAgICAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgICAgIGV4cGVjdCgnOicpO1xuXG4gICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2goJ30nKSB8fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCBtYXRjaEtleXdvcmQoJ2Nhc2UnKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpO1xuICAgICAgICAgICAgY29uc2VxdWVudC5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlU3dpdGNoU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIGRpc2NyaW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xkSW5Td2l0Y2gsIGRlZmF1bHRGb3VuZDtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdzd2l0Y2gnKTtcblxuICAgICAgICBleHBlY3QoJygnKTtcblxuICAgICAgICBkaXNjcmltaW5hbnQgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgICAgICBleHBlY3QoJyknKTtcblxuICAgICAgICBleHBlY3QoJ3snKTtcblxuICAgICAgICBjYXNlcyA9IFtdO1xuXG4gICAgICAgIGlmIChtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7XG4gICAgICAgIHN0YXRlLmluU3dpdGNoID0gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdEZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbGF1c2UgPSBwYXJzZVN3aXRjaENhc2UoKTtcbiAgICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZXMucHVzaChjbGF1c2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDtcblxuICAgICAgICBleHBlY3QoJ30nKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcyk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTMuMTQgVGhlIHRocm93IHN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VUaHJvd1N0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBhcmd1bWVudDtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCd0aHJvdycpO1xuXG4gICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5OZXdsaW5lQWZ0ZXJUaHJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTMuMTUgVGhlIHRyeSBzdGF0ZW1lbnRcblxuICAgIGZ1bmN0aW9uIHBhcnNlQ2F0Y2hDbGF1c2UoKSB7XG4gICAgICAgIHZhciBwYXJhbSwgcGFyYW1zID0gW10sIHBhcmFtTWFwID0ge30sIGtleSwgaSwgYm9keSwgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnY2F0Y2gnKTtcblxuICAgICAgICBleHBlY3QoJygnKTtcbiAgICAgICAgaWYgKG1hdGNoKCcpJykpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJhbSA9IHBhcnNlUGF0dGVybihwYXJhbXMpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBrZXkgPSAnJCcgKyBwYXJhbXNbaV0udmFsdWU7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtTWFwLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5EdXBsaWNhdGVCaW5kaW5nLCBwYXJhbXNbaV0udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW1NYXBba2V5XSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFQ01BLTI2MiAxMi4xNC4xXG4gICAgICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbS5uYW1lKSkge1xuICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdCgnKScpO1xuICAgICAgICBib2R5ID0gcGFyc2VCbG9jaygpO1xuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hDYXRjaENsYXVzZShwYXJhbSwgYm9keSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VUcnlTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgYmxvY2ssIGhhbmRsZXIgPSBudWxsLCBmaW5hbGl6ZXIgPSBudWxsO1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ3RyeScpO1xuXG4gICAgICAgIGJsb2NrID0gcGFyc2VCbG9jaygpO1xuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2NhdGNoJykpIHtcbiAgICAgICAgICAgIGhhbmRsZXIgPSBwYXJzZUNhdGNoQ2xhdXNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmaW5hbGx5JykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgZmluYWxpemVyID0gcGFyc2VCbG9jaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoYW5kbGVyICYmICFmaW5hbGl6ZXIpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hUcnlTdGF0ZW1lbnQoYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcik7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTMuMTYgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudFxuXG4gICAgZnVuY3Rpb24gcGFyc2VEZWJ1Z2dlclN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ2RlYnVnZ2VyJyk7XG5cbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaERlYnVnZ2VyU3RhdGVtZW50KCk7XG4gICAgfVxuXG4gICAgLy8gMTMgU3RhdGVtZW50c1xuXG4gICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoKSB7XG4gICAgICAgIHZhciB0eXBlID0gbG9va2FoZWFkLnR5cGUsXG4gICAgICAgICAgICBleHByLFxuICAgICAgICAgICAgbGFiZWxlZEJvZHksXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBub2RlO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09ICd7Jykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTtcbiAgICAgICAgfVxuICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICc7JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VFbXB0eVN0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICdicmVhayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQnJlYWtTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udGludWVTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdkZWJ1Z2dlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdkbyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRG9XaGlsZVN0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ2Zvcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRm9yU3RhdGVtZW50KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSk7XG4gICAgICAgICAgICBjYXNlICdpZic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSWZTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdyZXR1cm4nOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVJldHVyblN0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ3N3aXRjaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3dpdGNoU3RhdGVtZW50KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAndGhyb3cnOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRocm93U3RhdGVtZW50KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAndHJ5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUcnlTdGF0ZW1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICd2YXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnd2hpbGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVdoaWxlU3RhdGVtZW50KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnd2l0aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlV2l0aFN0YXRlbWVudChub2RlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgLy8gRUNNQS0yNjIgMTIuMTIgTGFiZWxsZWQgU3RhdGVtZW50c1xuICAgICAgICBpZiAoKGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpICYmIG1hdGNoKCc6JykpIHtcbiAgICAgICAgICAgIGxleCgpO1xuXG4gICAgICAgICAgICBrZXkgPSAnJCcgKyBleHByLm5hbWU7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBleHByLm5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGF0ZS5sYWJlbFNldFtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGxhYmVsZWRCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5sYWJlbFNldFtrZXldO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoTGFiZWxlZFN0YXRlbWVudChleHByLCBsYWJlbGVkQm9keSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwcmVzc2lvblN0YXRlbWVudChleHByKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxNC4xIEZ1bmN0aW9uIERlZmluaXRpb25cblxuICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpIHtcbiAgICAgICAgdmFyIHN0YXRlbWVudCwgYm9keSA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgICAgICBvbGRMYWJlbFNldCwgb2xkSW5JdGVyYXRpb24sIG9sZEluU3dpdGNoLCBvbGRJbkZ1bmN0aW9uQm9keSwgb2xkUGFyZW50aGVzaXNDb3VudCxcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIGV4cGVjdCgneycpO1xuXG4gICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7XG4gICAgICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0cmljdCcpIHtcbiAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb2xkTGFiZWxTZXQgPSBzdGF0ZS5sYWJlbFNldDtcbiAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICAgICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3aXRjaDtcbiAgICAgICAgb2xkSW5GdW5jdGlvbkJvZHkgPSBzdGF0ZS5pbkZ1bmN0aW9uQm9keTtcbiAgICAgICAgb2xkUGFyZW50aGVzaXNDb3VudCA9IHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudDtcblxuICAgICAgICBzdGF0ZS5sYWJlbFNldCA9IHt9O1xuICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IHRydWU7XG4gICAgICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5LnB1c2gocGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdCgnfScpO1xuXG4gICAgICAgIHN0YXRlLmxhYmVsU2V0ID0gb2xkTGFiZWxTZXQ7XG4gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG4gICAgICAgIHN0YXRlLmluU3dpdGNoID0gb2xkSW5Td2l0Y2g7XG4gICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gb2xkSW5GdW5jdGlvbkJvZHk7XG4gICAgICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9IG9sZFBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQmxvY2tTdGF0ZW1lbnQoYm9keSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwgbmFtZSkge1xuICAgICAgICB2YXIga2V5ID0gJyQnICsgbmFtZTtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLnBhcmFtU2V0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQgPSBwYXJhbTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuYW1lKSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucy5wYXJhbVNldCwga2V5KSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5wYXJhbVNldFtrZXldID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHRva2VuLCBwYXJhbSwgcGFyYW1zID0gW10sIGksIGRlZjtcblxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnLi4uJykge1xuICAgICAgICAgICAgcGFyYW0gPSBwYXJzZVJlc3RFbGVtZW50KHBhcmFtcyk7XG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTtcbiAgICAgICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0cy5wdXNoKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW0gPSBwYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJhbXMpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtc1tpXSwgcGFyYW1zW2ldLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbS50eXBlID09PSBTeW50YXguQXNzaWdubWVudFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGRlZiA9IHBhcmFtLnJpZ2h0O1xuICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5sZWZ0O1xuICAgICAgICAgICAgKytvcHRpb25zLmRlZmF1bHRDb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICBvcHRpb25zLmRlZmF1bHRzLnB1c2goZGVmKTtcblxuICAgICAgICByZXR1cm4gIW1hdGNoKCcpJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHZhciBvcHRpb25zO1xuXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgZGVmYXVsdENvdW50OiAwLFxuICAgICAgICAgICAgZGVmYXVsdHM6IFtdLFxuICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBmaXJzdFJlc3RyaWN0ZWRcbiAgICAgICAgfTtcblxuICAgICAgICBleHBlY3QoJygnKTtcblxuICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFyYW1TZXQgPSB7fTtcbiAgICAgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZVBhcmFtKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleHBlY3QoJywnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdCgnKScpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0cyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsXG4gICAgICAgICAgICBkZWZhdWx0czogb3B0aW9ucy5kZWZhdWx0cyxcbiAgICAgICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLFxuICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlLCBpZGVudGlmaWVySXNPcHRpb25hbCkge1xuICAgICAgICB2YXIgaWQgPSBudWxsLCBwYXJhbXMgPSBbXSwgZGVmYXVsdHMgPSBbXSwgYm9keSwgdG9rZW4sIHN0cmljdGVkLCB0bXAsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgcHJldmlvdXNTdHJpY3QsXG4gICAgICAgICAgICBpc0dlbmVyYXRvciwgcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgIHByZXZpb3VzQWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTtcblxuICAgICAgICBpc0dlbmVyYXRvciA9IG1hdGNoKCcqJyk7XG4gICAgICAgIGlmIChpc0dlbmVyYXRvcikge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8ICFtYXRjaCgnKCcpKSB7XG4gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSAhaXNHZW5lcmF0b3I7XG4gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7XG4gICAgICAgIGRlZmF1bHRzID0gdG1wLmRlZmF1bHRzO1xuICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDtcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDtcbiAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7XG4gICAgICAgIH1cblxuXG4gICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHksIGlzR2VuZXJhdG9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIHRva2VuLCBpZCA9IG51bGwsIHN0cmljdGVkLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHRtcCxcbiAgICAgICAgICAgIHBhcmFtcyA9IFtdLCBkZWZhdWx0cyA9IFtdLCBib2R5LCBwcmV2aW91c1N0cmljdCwgbm9kZSA9IG5ldyBOb2RlKCksXG4gICAgICAgICAgICBpc0dlbmVyYXRvciwgcHJldmlvdXNBbGxvd1lpZWxkO1xuXG4gICAgICAgIHByZXZpb3VzQWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTtcblxuICAgICAgICBpc0dlbmVyYXRvciA9IG1hdGNoKCcqJyk7XG4gICAgICAgIGlmIChpc0dlbmVyYXRvcikge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gIWlzR2VuZXJhdG9yO1xuICAgICAgICBpZiAoIW1hdGNoKCcoJykpIHtcbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgaWQgPSAoIXN0cmljdCAmJiAhaXNHZW5lcmF0b3IgJiYgbWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSA/IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIDogcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7XG4gICAgICAgIGRlZmF1bHRzID0gdG1wLmRlZmF1bHRzO1xuICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDtcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDtcbiAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDtcbiAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaWN0ICYmIHN0cmljdGVkKSB7XG4gICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG4gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRnVuY3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5LCBpc0dlbmVyYXRvcik7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTQuNSBDbGFzcyBEZWZpbml0aW9uc1xuXG4gICAgZnVuY3Rpb24gcGFyc2VDbGFzc0JvZHkoKSB7XG4gICAgICAgIHZhciBjbGFzc0JvZHksIHRva2VuLCBpc1N0YXRpYywgaGFzQ29uc3RydWN0b3IgPSBmYWxzZSwgYm9keSwgbWV0aG9kLCBjb21wdXRlZCwga2V5O1xuXG4gICAgICAgIGNsYXNzQm9keSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgZXhwZWN0KCd7Jyk7XG4gICAgICAgIGJvZHkgPSBbXTtcbiAgICAgICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2goJzsnKSkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgICAgIGlzU3RhdGljID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5uYW1lID09PSAnc3RhdGljJyAmJiAobG9va2FoZWFkUHJvcGVydHlOYW1lKCkgfHwgbWF0Y2goJyonKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcqJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRyeVBhcnNlTWV0aG9kRGVmaW5pdGlvbih0b2tlbiwga2V5LCBjb21wdXRlZCwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZFsnc3RhdGljJ10gPSBpc1N0YXRpYzsgLy8ganNjczppZ25vcmUgcmVxdWlyZURvdE5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCA9PT0gJ2luaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9ICdtZXRob2QnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNTdGF0aWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIChtZXRob2Qua2V5Lm5hbWUgfHwgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCAhPT0gJ21ldGhvZCcgfHwgIW1ldGhvZC5tZXRob2QgfHwgbWV0aG9kLnZhbHVlLmdlbmVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5EdXBsaWNhdGVDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ29uc3RydWN0b3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZC5jb21wdXRlZCAmJiAobWV0aG9kLmtleS5uYW1lIHx8IG1ldGhvZC5rZXkudmFsdWUudG9TdHJpbmcoKSkgPT09ICdwcm90b3R5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLnR5cGUgPSBTeW50YXguTWV0aG9kRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1ldGhvZC5tZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXRob2Quc2hvcnRoYW5kO1xuICAgICAgICAgICAgICAgICAgICBib2R5LnB1c2gobWV0aG9kKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXgoKTtcbiAgICAgICAgcmV0dXJuIGNsYXNzQm9keS5maW5pc2hDbGFzc0JvZHkoYm9keSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7XG4gICAgICAgIHZhciBpZCA9IG51bGwsIHN1cGVyQ2xhc3MgPSBudWxsLCBjbGFzc05vZGUgPSBuZXcgTm9kZSgpLCBjbGFzc0JvZHksIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgICAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZXh0ZW5kcycpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xhc3NCb2R5ID0gcGFyc2VDbGFzc0JvZHkoKTtcbiAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG5cbiAgICAgICAgcmV0dXJuIGNsYXNzTm9kZS5maW5pc2hDbGFzc0RlY2xhcmF0aW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgaWQgPSBudWxsLCBzdXBlckNsYXNzID0gbnVsbCwgY2xhc3NOb2RlID0gbmV3IE5vZGUoKSwgY2xhc3NCb2R5LCBwcmV2aW91c1N0cmljdCA9IHN0cmljdDtcbiAgICAgICAgc3RyaWN0ID0gdHJ1ZTtcblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdjbGFzcycpO1xuXG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZXh0ZW5kcycpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xhc3NCb2R5ID0gcGFyc2VDbGFzc0JvZHkoKTtcbiAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG5cbiAgICAgICAgcmV0dXJuIGNsYXNzTm9kZS5maW5pc2hDbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTUuMiBNb2R1bGVzXG5cbiAgICBmdW5jdGlvbiBwYXJzZU1vZHVsZVNwZWNpZmllcigpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hMaXRlcmFsKGxleCgpKTtcbiAgICB9XG5cbiAgICAvLyBFQ01BLTI2MiAxNS4yLjMgRXhwb3J0c1xuXG4gICAgZnVuY3Rpb24gcGFyc2VFeHBvcnRTcGVjaWZpZXIoKSB7XG4gICAgICAgIHZhciBleHBvcnRlZCwgbG9jYWwsIG5vZGUgPSBuZXcgTm9kZSgpLCBkZWY7XG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkge1xuICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fSBmcm9tICdzb21ldGhpbmcnO1xuICAgICAgICAgICAgZGVmID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgbG9jYWwgPSBkZWYuZmluaXNoSWRlbnRpZmllcignZGVmYXVsdCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9jYWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGV4cG9ydGVkID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0U3BlY2lmaWVyKGxvY2FsLCBleHBvcnRlZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VFeHBvcnROYW1lZERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCxcbiAgICAgICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIsXG4gICAgICAgICAgICBzcmMgPSBudWxsLCBzcGVjaWZpZXJzID0gW107XG5cbiAgICAgICAgLy8gbm9uLWRlZmF1bHQgZXhwb3J0XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAgICAgLy8gZXhwb3J0IHZhciBmID0gMTtcbiAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbGV0JzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25zdCc6XG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oe2luRm9yOiBmYWxzZX0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBudWxsKTtcbiAgICAgICAgICAgICAgICBjYXNlICd2YXInOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdCgneycpO1xuICAgICAgICB3aGlsZSAoIW1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgPSBpc0V4cG9ydEZyb21JZGVudGlmaWVyIHx8IG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpO1xuICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlRXhwb3J0U3BlY2lmaWVyKCkpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4cGVjdCgnfScpO1xuXG4gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHtcbiAgICAgICAgICAgIC8vIGNvdmVyaW5nOlxuICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fSBmcm9tICdmb28nO1xuICAgICAgICAgICAgLy8gZXhwb3J0IHtmb299IGZyb20gJ2Zvbyc7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNFeHBvcnRGcm9tSWRlbnRpZmllcikge1xuICAgICAgICAgICAgLy8gY292ZXJpbmc6XG4gICAgICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9OyAvLyBtaXNzaW5nIGZyb21DbGF1c2VcbiAgICAgICAgICAgIHRocm93RXJyb3IobG9va2FoZWFkLnZhbHVlID9cbiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb3ZlclxuICAgICAgICAgICAgLy8gZXhwb3J0IHtmb299O1xuICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNyYyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSBudWxsLFxuICAgICAgICAgICAgZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCAuLi5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnZGVmYXVsdCcpO1xuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7fVxuICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge31cbiAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKG5ldyBOb2RlKCksIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdjbGFzcycpKSB7XG4gICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlQ2xhc3NEZWNsYXJhdGlvbih0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQge307XG4gICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IFtdO1xuICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCAoMSArIDIpO1xuICAgICAgICBpZiAobWF0Y2goJ3snKSkge1xuICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnWycpKSB7XG4gICAgICAgICAgICBleHByZXNzaW9uID0gcGFyc2VBcnJheUluaXRpYWxpemVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByZXNzaW9uID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0QWxsRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICB2YXIgc3JjO1xuXG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gZXhwb3J0ICogZnJvbSAnZm9vJztcbiAgICAgICAgZXhwZWN0KCcqJyk7XG4gICAgICAgIGlmICghbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZC52YWx1ZSA/XG4gICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGxleCgpO1xuICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0QWxsRGVjbGFyYXRpb24oc3JjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICAgICAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCk7XG4gICAgICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZCgnZXhwb3J0Jyk7XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24obm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKCcqJykpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTUuMi4yIEltcG9ydHNcblxuICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkge1xuICAgICAgICAvLyBpbXBvcnQgezxmb28gYXMgYmFyPn0gLi4uO1xuICAgICAgICB2YXIgbG9jYWwsIGltcG9ydGVkLCBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBpbXBvcnRlZCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXMnKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBsb2NhbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJbXBvcnRTcGVjaWZpZXIobG9jYWwsIGltcG9ydGVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU5hbWVkSW1wb3J0cygpIHtcbiAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTtcbiAgICAgICAgLy8ge2ZvbywgYmFyIGFzIGJhc31cbiAgICAgICAgZXhwZWN0KCd7Jyk7XG4gICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4cGVjdCgnfScpO1xuICAgICAgICByZXR1cm4gc3BlY2lmaWVycztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIoKSB7XG4gICAgICAgIC8vIGltcG9ydCA8Zm9vPiAuLi47XG4gICAgICAgIHZhciBsb2NhbCwgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgbG9jYWwgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJbXBvcnREZWZhdWx0U3BlY2lmaWVyKGxvY2FsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpIHtcbiAgICAgICAgLy8gaW1wb3J0IDwqIGFzIGZvbz4gLi4uO1xuICAgICAgICB2YXIgbG9jYWwsIG5vZGUgPSBuZXcgTm9kZSgpO1xuXG4gICAgICAgIGV4cGVjdCgnKicpO1xuICAgICAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXgoKTtcbiAgICAgICAgbG9jYWwgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcblxuICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobG9jYWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgICAgIHZhciBzcGVjaWZpZXJzID0gW10sIHNyYywgbm9kZSA9IG5ldyBOb2RlKCk7XG5cbiAgICAgICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3RLZXl3b3JkKCdpbXBvcnQnKTtcblxuICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgICAgIC8vIGltcG9ydCAnZm9vJztcbiAgICAgICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaCgneycpKSB7XG4gICAgICAgICAgICAgICAgLy8gaW1wb3J0IHtiYXJ9XG4gICAgICAgICAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHBhcnNlTmFtZWRJbXBvcnRzKCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKicpKSB7XG4gICAgICAgICAgICAgICAgLy8gaW1wb3J0ICogYXMgZm9vXG4gICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0lkZW50aWZpZXJOYW1lKGxvb2thaGVhZCkgJiYgIW1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZvb1xuICAgICAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBvcnQgZm9vLCAqIGFzIGZvb1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCd7JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28sIHtiYXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXJzID0gc3BlY2lmaWVycy5jb25jYXQocGFyc2VOYW1lZEltcG9ydHMoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsZXgoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQudmFsdWUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmllcnMsIHNyYyk7XG4gICAgfVxuXG4gICAgLy8gRUNNQS0yNjIgMTUuMSBTY3JpcHRzXG5cbiAgICBmdW5jdGlvbiBwYXJzZVNjcmlwdEJvZHkoKSB7XG4gICAgICAgIHZhciBzdGF0ZW1lbnQsIGJvZHkgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkO1xuXG4gICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKTtcbiAgICAgICAgICAgIGJvZHkucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQgKyAxLCB0b2tlbi5lbmQgLSAxKTtcbiAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3RyaWN0Jykge1xuICAgICAgICAgICAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvZHkucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUHJvZ3JhbSgpIHtcbiAgICAgICAgdmFyIGJvZHksIG5vZGU7XG5cbiAgICAgICAgcGVlaygpO1xuICAgICAgICBub2RlID0gbmV3IE5vZGUoKTtcblxuICAgICAgICBib2R5ID0gcGFyc2VTY3JpcHRCb2R5KCk7XG4gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb2dyYW0oYm9keSwgc3RhdGUuc291cmNlVHlwZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsdGVyVG9rZW5Mb2NhdGlvbigpIHtcbiAgICAgICAgdmFyIGksIGVudHJ5LCB0b2tlbiwgdG9rZW5zID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dHJhLnRva2Vucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgZW50cnkgPSBleHRyYS50b2tlbnNbaV07XG4gICAgICAgICAgICB0b2tlbiA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChlbnRyeS5yZWdleCkge1xuICAgICAgICAgICAgICAgIHRva2VuLnJlZ2V4ID0ge1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBlbnRyeS5yZWdleC5wYXR0ZXJuLFxuICAgICAgICAgICAgICAgICAgICBmbGFnczogZW50cnkucmVnZXguZmxhZ3NcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4ucmFuZ2UgPSBlbnRyeS5yYW5nZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgICAgICAgICB0b2tlbi5sb2MgPSBlbnRyeS5sb2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBleHRyYS50b2tlbnMgPSB0b2tlbnM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5pemUoY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHtcbiAgICAgICAgdmFyIHRvU3RyaW5nLFxuICAgICAgICAgICAgdG9rZW5zO1xuXG4gICAgICAgIHRvU3RyaW5nID0gU3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEoY29kZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZSA9IGNvZGU7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICAgICAgbGluZVN0YXJ0ID0gMDtcbiAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4O1xuICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyO1xuICAgICAgICBzdGFydExpbmVTdGFydCA9IGxpbmVTdGFydDtcbiAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICAgICAgc3RhdGUgPSB7XG4gICAgICAgICAgICBhbGxvd0luOiB0cnVlLFxuICAgICAgICAgICAgYWxsb3dZaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgIGxhYmVsU2V0OiB7fSxcbiAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSxcbiAgICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGluU3dpdGNoOiBmYWxzZSxcbiAgICAgICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xLFxuICAgICAgICAgICAgY3VybHlTdGFjazogW11cbiAgICAgICAgfTtcblxuICAgICAgICBleHRyYSA9IHt9O1xuXG4gICAgICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2VucyBoZXJlLlxuICAgICAgICBvcHRpb25zLnRva2VucyA9IHRydWU7XG4gICAgICAgIGV4dHJhLnRva2VucyA9IFtdO1xuICAgICAgICBleHRyYS50b2tlblZhbHVlcyA9IFtdO1xuICAgICAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7XG4gICAgICAgIGV4dHJhLmRlbGVnYXRlID0gZGVsZWdhdGU7XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0d28gZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29tcHV0ZSB0aGUgUmVnZXggdG9rZW5zLlxuICAgICAgICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9IC0xO1xuICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IC0xO1xuXG4gICAgICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMucmFuZ2U7XG4gICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy50b2xlcmFudCkge1xuICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGVlaygpO1xuICAgICAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXh0cmEudG9rZW5zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAobGV4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkRXJyb3IobGV4RXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBvbiB0aGUgZmlyc3QgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGluZmluaXRlIGxvb3BzLlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBsZXhFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9rZW5zID0gZXh0cmEudG9rZW5zO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdG9rZW5zLmVycm9ycyA9IGV4dHJhLmVycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGV4dHJhID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZShjb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBwcm9ncmFtLCB0b1N0cmluZztcblxuICAgICAgICB0b1N0cmluZyA9IFN0cmluZztcbiAgICAgICAgaWYgKHR5cGVvZiBjb2RlICE9PSAnc3RyaW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2UgPSBjb2RlO1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIGxpbmVOdW1iZXIgPSAoc291cmNlLmxlbmd0aCA+IDApID8gMSA6IDA7XG4gICAgICAgIGxpbmVTdGFydCA9IDA7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcjtcbiAgICAgICAgc3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7XG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgICAgIGxvb2thaGVhZCA9IG51bGw7XG4gICAgICAgIHN0YXRlID0ge1xuICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93WWllbGQ6IHRydWUsXG4gICAgICAgICAgICBsYWJlbFNldDoge30sXG4gICAgICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsXG4gICAgICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpblN3aXRjaDogZmFsc2UsXG4gICAgICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMSxcbiAgICAgICAgICAgIGN1cmx5U3RhY2s6IFtdLFxuICAgICAgICAgICAgc291cmNlVHlwZTogJ3NjcmlwdCdcbiAgICAgICAgfTtcbiAgICAgICAgc3RyaWN0ID0gZmFsc2U7XG5cbiAgICAgICAgZXh0cmEgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5yYW5nZTtcbiAgICAgICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7XG4gICAgICAgICAgICBleHRyYS5hdHRhY2hDb21tZW50ID0gKHR5cGVvZiBvcHRpb25zLmF0dGFjaENvbW1lbnQgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50O1xuXG4gICAgICAgICAgICBpZiAoZXh0cmEubG9jICYmIG9wdGlvbnMuc291cmNlICE9PSBudWxsICYmIG9wdGlvbnMuc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBleHRyYS5zb3VyY2UgPSB0b1N0cmluZyhvcHRpb25zLnNvdXJjZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2tlbnMgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRva2Vucykge1xuICAgICAgICAgICAgICAgIGV4dHJhLnRva2VucyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy50b2xlcmFudCkge1xuICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBleHRyYS5yYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ21vZHVsZScpIHtcbiAgICAgICAgICAgICAgICAvLyB2ZXJ5IHJlc3RyaWN0aXZlIGNvbmRpdGlvbiBmb3Igbm93XG4gICAgICAgICAgICAgICAgc3RhdGUuc291cmNlVHlwZSA9IG9wdGlvbnMuc291cmNlVHlwZTtcbiAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb2dyYW0gPSBwYXJzZVByb2dyYW0oKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpO1xuICAgICAgICAgICAgICAgIHByb2dyYW0udG9rZW5zID0gZXh0cmEudG9rZW5zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcnMgPSBleHRyYS5lcnJvcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBleHRyYSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb2dyYW07XG4gICAgfVxuXG4gICAgLy8gU3luYyB3aXRoICouanNvbiBtYW5pZmVzdHMuXG4gICAgZXhwb3J0cy52ZXJzaW9uID0gJzIuNy4xJztcblxuICAgIGV4cG9ydHMudG9rZW5pemUgPSB0b2tlbml6ZTtcblxuICAgIGV4cG9ydHMucGFyc2UgPSBwYXJzZTtcblxuICAgIC8vIERlZXAgY29weS5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGV4cG9ydHMuU3ludGF4ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5hbWUsIHR5cGVzID0ge307XG5cbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKG5hbWUgaW4gU3ludGF4KSB7XG4gICAgICAgICAgICBpZiAoU3ludGF4Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdHlwZXNbbmFtZV0gPSBTeW50YXhbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5mcmVlemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIE9iamVjdC5mcmVlemUodHlwZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH0oKSk7XG5cbn0pKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCJmdW5jdGlvbiBBZGRyZXNzIChmYWtlcikge1xuICB2YXIgZiA9IGZha2VyLmZha2UsXG4gICAgICBIZWxwZXJzID0gZmFrZXIuaGVscGVycztcblxuICB0aGlzLnppcENvZGUgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAvLyBpZiB6aXAgZm9ybWF0IGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgemlwIGZvcm1hdCBkZWZpbmVkIGZvciB0aGUgbG9jYWxlXG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgbG9jYWxlRm9ybWF0ID0gZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5wb3N0Y29kZTtcbiAgICAgIGlmICh0eXBlb2YgbG9jYWxlRm9ybWF0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBmb3JtYXQgPSBsb2NhbGVGb3JtYXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXQgPSBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGxvY2FsZUZvcm1hdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBIZWxwZXJzLnJlcGxhY2VTeW1ib2xzKGZvcm1hdCk7XG4gIH1cblxuICB0aGlzLmNpdHkgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgdmFyIGZvcm1hdHMgPSBbXG4gICAgICAne3thZGRyZXNzLmNpdHlQcmVmaXh9fSB7e25hbWUuZmlyc3ROYW1lfX0ge3thZGRyZXNzLmNpdHlTdWZmaXh9fScsXG4gICAgICAne3thZGRyZXNzLmNpdHlQcmVmaXh9fSB7e25hbWUuZmlyc3ROYW1lfX0nLFxuICAgICAgJ3t7bmFtZS5maXJzdE5hbWV9fSB7e2FkZHJlc3MuY2l0eVN1ZmZpeH19JyxcbiAgICAgICd7e25hbWUubGFzdE5hbWV9fSB7e2FkZHJlc3MuY2l0eVN1ZmZpeH19J1xuICAgIF07XG5cbiAgICBpZiAodHlwZW9mIGZvcm1hdCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgZm9ybWF0ID0gZmFrZXIucmFuZG9tLm51bWJlcihmb3JtYXRzLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBmKGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgfVxuXG4gIHRoaXMuY2l0eVByZWZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLmNpdHlfcHJlZml4KTtcbiAgfVxuXG4gIHRoaXMuY2l0eVN1ZmZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLmNpdHlfc3VmZml4KTtcbiAgfVxuXG4gIHRoaXMuc3RyZWV0TmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB2YXIgc3VmZml4ID0gZmFrZXIuYWRkcmVzcy5zdHJlZXRTdWZmaXgoKTtcbiAgICAgIGlmIChzdWZmaXggIT09IFwiXCIpIHtcbiAgICAgICAgICBzdWZmaXggPSBcIiBcIiArIHN1ZmZpeFxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGZha2VyLnJhbmRvbS5udW1iZXIoMSkpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXN1bHQgPSBmYWtlci5uYW1lLmxhc3ROYW1lKCkgKyBzdWZmaXg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgICAgcmVzdWx0ID0gZmFrZXIubmFtZS5maXJzdE5hbWUoKSArIHN1ZmZpeDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvL1xuICAvLyBUT0RPOiBjaGFuZ2UgYWxsIHRoZXNlIG1ldGhvZHMgdGhhdCBhY2NlcHQgYSBib29sZWFuIHRvIGluc3RlYWQgYWNjZXB0IGFuIG9wdGlvbnMgaGFzaC5cbiAgLy9cbiAgdGhpcy5zdHJlZXRBZGRyZXNzID0gZnVuY3Rpb24gKHVzZUZ1bGxBZGRyZXNzKSB7XG4gICAgICBpZiAodXNlRnVsbEFkZHJlc3MgPT09IHVuZGVmaW5lZCkgeyB1c2VGdWxsQWRkcmVzcyA9IGZhbHNlOyB9XG4gICAgICB2YXIgYWRkcmVzcyA9IFwiXCI7XG4gICAgICBzd2l0Y2ggKGZha2VyLnJhbmRvbS5udW1iZXIoMikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgICBhZGRyZXNzID0gSGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcihcIiMjIyMjXCIpICsgXCIgXCIgKyBmYWtlci5hZGRyZXNzLnN0cmVldE5hbWUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhZGRyZXNzID0gSGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcihcIiMjIyNcIikgKyAgXCIgXCIgKyBmYWtlci5hZGRyZXNzLnN0cmVldE5hbWUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgICBhZGRyZXNzID0gSGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcihcIiMjI1wiKSArIFwiIFwiICsgZmFrZXIuYWRkcmVzcy5zdHJlZXROYW1lKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXNlRnVsbEFkZHJlc3MgPyAoYWRkcmVzcyArIFwiIFwiICsgZmFrZXIuYWRkcmVzcy5zZWNvbmRhcnlBZGRyZXNzKCkpIDogYWRkcmVzcztcbiAgfVxuXG4gIHRoaXMuc3RyZWV0U3VmZml4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5zdHJlZXRfc3VmZml4KTtcbiAgfVxuICBcbiAgdGhpcy5zdHJlZXRQcmVmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLnN0cmVldF9wcmVmaXgpO1xuICB9XG5cbiAgdGhpcy5zZWNvbmRhcnlBZGRyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEhlbHBlcnMucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIoZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChcbiAgICAgICAgICBbXG4gICAgICAgICAgICAgICdBcHQuICMjIycsXG4gICAgICAgICAgICAgICdTdWl0ZSAjIyMnXG4gICAgICAgICAgXVxuICAgICAgKSk7XG4gIH1cblxuICB0aGlzLmNvdW50eSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLmNvdW50eSk7XG4gIH1cblxuICB0aGlzLmNvdW50cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5jb3VudHJ5KTtcbiAgfVxuXG4gIHRoaXMuY291bnRyeUNvZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5jb3VudHJ5X2NvZGUpO1xuICB9XG5cbiAgdGhpcy5zdGF0ZSA9IGZ1bmN0aW9uICh1c2VBYmJyKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLnN0YXRlKTtcbiAgfVxuXG4gIHRoaXMuc3RhdGVBYmJyID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5zdGF0ZV9hYmJyKTtcbiAgfVxuXG4gIHRoaXMubGF0aXR1ZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKGZha2VyLnJhbmRvbS5udW1iZXIoMTgwICogMTAwMDApIC8gMTAwMDAuMCAtIDkwLjApLnRvRml4ZWQoNCk7XG4gIH1cblxuICB0aGlzLmxvbmdpdHVkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoZmFrZXIucmFuZG9tLm51bWJlcigzNjAgKiAxMDAwMCkgLyAxMDAwMC4wIC0gMTgwLjApLnRvRml4ZWQoNCk7XG4gIH1cbiAgXG4gIHJldHVybiB0aGlzO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gQWRkcmVzcztcbiIsInZhciBDb21tZXJjZSA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgc2VsZi5jb2xvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UuY29sb3IpO1xuICB9O1xuXG4gIHNlbGYuZGVwYXJ0bWVudCA9IGZ1bmN0aW9uKG1heCwgZml4ZWRBbW91bnQpIHtcbiAgICBcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbW1lcmNlLmRlcGFydG1lbnQpO1xuICAgICAgLypcbiAgICAgIG1heCA9IG1heCB8fCAzO1xuXG4gICAgICB2YXIgbnVtID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIG1heCkgKyAxKTtcbiAgICAgIGlmIChmaXhlZEFtb3VudCkge1xuICAgICAgICAgIG51bSA9IG1heDtcbiAgICAgIH1cblxuICAgICAgdmFyIGNhdGVnb3JpZXMgPSBmYWtlci5jb21tZXJjZS5jYXRlZ29yaWVzKG51bSk7XG5cbiAgICAgIGlmKG51bSA+IDEpIHtcbiAgICAgICAgICByZXR1cm4gZmFrZXIuY29tbWVyY2UubWVyZ2VDYXRlZ29yaWVzKGNhdGVnb3JpZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2F0ZWdvcmllc1swXTtcbiAgICAgICovXG4gIH07XG5cbiAgc2VsZi5wcm9kdWN0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZha2VyLmNvbW1lcmNlLnByb2R1Y3RBZGplY3RpdmUoKSArIFwiIFwiICtcbiAgICAgICAgICAgICAgZmFrZXIuY29tbWVyY2UucHJvZHVjdE1hdGVyaWFsKCkgKyBcIiBcIiArXG4gICAgICAgICAgICAgIGZha2VyLmNvbW1lcmNlLnByb2R1Y3QoKTtcbiAgfTtcblxuICBzZWxmLnByaWNlID0gZnVuY3Rpb24obWluLCBtYXgsIGRlYywgc3ltYm9sKSB7XG4gICAgICBtaW4gPSBtaW4gfHwgMDtcbiAgICAgIG1heCA9IG1heCB8fCAxMDAwO1xuICAgICAgZGVjID0gZGVjIHx8IDI7XG4gICAgICBzeW1ib2wgPSBzeW1ib2wgfHwgJyc7XG5cbiAgICAgIGlmKG1pbiA8IDAgfHwgbWF4IDwgMCkge1xuICAgICAgICAgIHJldHVybiBzeW1ib2wgKyAwLjAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3ltYm9sICsgKE1hdGgucm91bmQoKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbikgKiBNYXRoLnBvdygxMCwgZGVjKSkgLyBNYXRoLnBvdygxMCwgZGVjKSkudG9GaXhlZChkZWMpO1xuICB9O1xuXG4gIC8qXG4gIHNlbGYuY2F0ZWdvcmllcyA9IGZ1bmN0aW9uKG51bSkge1xuICAgICAgdmFyIGNhdGVnb3JpZXMgPSBbXTtcblxuICAgICAgZG8ge1xuICAgICAgICAgIHZhciBjYXRlZ29yeSA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UuZGVwYXJ0bWVudCk7XG4gICAgICAgICAgaWYoY2F0ZWdvcmllcy5pbmRleE9mKGNhdGVnb3J5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcbiAgICAgICAgICB9XG4gICAgICB9IHdoaWxlKGNhdGVnb3JpZXMubGVuZ3RoIDwgbnVtKTtcblxuICAgICAgcmV0dXJuIGNhdGVnb3JpZXM7XG4gIH07XG5cbiAgKi9cbiAgLypcbiAgc2VsZi5tZXJnZUNhdGVnb3JpZXMgPSBmdW5jdGlvbihjYXRlZ29yaWVzKSB7XG4gICAgICB2YXIgc2VwYXJhdG9yID0gZmFrZXIuZGVmaW5pdGlvbnMuc2VwYXJhdG9yIHx8IFwiICZcIjtcbiAgICAgIC8vIFRPRE86IGZpbmQgdW5kZWZpbmVkIGhlcmVcbiAgICAgIGNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzIHx8IGZha2VyLmRlZmluaXRpb25zLmNvbW1lcmNlLmNhdGVnb3JpZXM7XG4gICAgICB2YXIgY29tbWFTZXBhcmF0ZWQgPSBjYXRlZ29yaWVzLnNsaWNlKDAsIC0xKS5qb2luKCcsICcpO1xuXG4gICAgICByZXR1cm4gW2NvbW1hU2VwYXJhdGVkLCBjYXRlZ29yaWVzW2NhdGVnb3JpZXMubGVuZ3RoIC0gMV1dLmpvaW4oc2VwYXJhdG9yICsgXCIgXCIpO1xuICB9O1xuICAqL1xuXG4gIHNlbGYucHJvZHVjdEFkamVjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UucHJvZHVjdF9uYW1lLmFkamVjdGl2ZSk7XG4gIH07XG5cbiAgc2VsZi5wcm9kdWN0TWF0ZXJpYWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbW1lcmNlLnByb2R1Y3RfbmFtZS5tYXRlcmlhbCk7XG4gIH07XG5cbiAgc2VsZi5wcm9kdWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5wcm9kdWN0X25hbWUucHJvZHVjdCk7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn07XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gQ29tbWVyY2U7IiwidmFyIENvbXBhbnkgPSBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGYgPSBmYWtlci5mYWtlO1xuICBcbiAgdGhpcy5zdWZmaXhlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBEb24ndCB3YW50IHRoZSBzb3VyY2UgYXJyYXkgZXhwb3NlZCB0byBtb2RpZmljYXRpb24sIHNvIHJldHVybiBhIGNvcHlcbiAgICByZXR1cm4gZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5zdWZmaXguc2xpY2UoMCk7XG4gIH1cblxuICB0aGlzLmNvbXBhbnlOYW1lID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuXG4gICAgdmFyIGZvcm1hdHMgPSBbXG4gICAgICAne3tuYW1lLmxhc3ROYW1lfX0ge3tjb21wYW55LmNvbXBhbnlTdWZmaXh9fScsXG4gICAgICAne3tuYW1lLmxhc3ROYW1lfX0gLSB7e25hbWUubGFzdE5hbWV9fScsXG4gICAgICAne3tuYW1lLmxhc3ROYW1lfX0sIHt7bmFtZS5sYXN0TmFtZX19IGFuZCB7e25hbWUubGFzdE5hbWV9fSdcbiAgICBdO1xuXG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGZvcm1hdCA9IGZha2VyLnJhbmRvbS5udW1iZXIoZm9ybWF0cy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZihmb3JtYXRzW2Zvcm1hdF0pO1xuICB9XG5cbiAgdGhpcy5jb21wYW55U3VmZml4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuY29tcGFueS5zdWZmaXhlcygpKTtcbiAgfVxuXG4gIHRoaXMuY2F0Y2hQaHJhc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGYoJ3t7Y29tcGFueS5jYXRjaFBocmFzZUFkamVjdGl2ZX19IHt7Y29tcGFueS5jYXRjaFBocmFzZURlc2NyaXB0b3J9fSB7e2NvbXBhbnkuY2F0Y2hQaHJhc2VOb3VufX0nKVxuICB9XG5cbiAgdGhpcy5icyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZigne3tjb21wYW55LmJzQWRqZWN0aXZlfX0ge3tjb21wYW55LmJzQnV6en19IHt7Y29tcGFueS5ic05vdW59fScpO1xuICB9XG5cbiAgdGhpcy5jYXRjaFBocmFzZUFkamVjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbXBhbnkuYWRqZWN0aXZlKTtcbiAgfVxuXG4gIHRoaXMuY2F0Y2hQaHJhc2VEZXNjcmlwdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5kZXNjcmlwdG9yKTtcbiAgfVxuXG4gIHRoaXMuY2F0Y2hQaHJhc2VOb3VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5ub3VuKTtcbiAgfVxuXG4gIHRoaXMuYnNBZGplY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21wYW55LmJzX2FkamVjdGl2ZSk7XG4gIH1cblxuICB0aGlzLmJzQnV6eiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbXBhbnkuYnNfdmVyYik7XG4gIH1cblxuICB0aGlzLmJzTm91biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbXBhbnkuYnNfbm91bik7XG4gIH1cbiAgXG59XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gQ29tcGFueTsiLCJ2YXIgX0RhdGUgPSBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLnBhc3QgPSBmdW5jdGlvbiAoeWVhcnMsIHJlZkRhdGUpIHtcbiAgICAgIHZhciBkYXRlID0gKHJlZkRhdGUpID8gbmV3IERhdGUoRGF0ZS5wYXJzZShyZWZEYXRlKSkgOiBuZXcgRGF0ZSgpO1xuICAgICAgdmFyIHJhbmdlID0ge1xuICAgICAgICBtaW46IDEwMDAsXG4gICAgICAgIG1heDogKHllYXJzIHx8IDEpICogMzY1ICogMjQgKiAzNjAwICogMTAwMFxuICAgICAgfTtcblxuICAgICAgdmFyIHBhc3QgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgIHBhc3QgLT0gZmFrZXIucmFuZG9tLm51bWJlcihyYW5nZSk7IC8vIHNvbWUgdGltZSBmcm9tIG5vdyB0byBOIHllYXJzIGFnbywgaW4gbWlsbGlzZWNvbmRzXG4gICAgICBkYXRlLnNldFRpbWUocGFzdCk7XG5cbiAgICAgIHJldHVybiBkYXRlO1xuICB9O1xuXG4gIHNlbGYuZnV0dXJlID0gZnVuY3Rpb24gKHllYXJzLCByZWZEYXRlKSB7XG4gICAgICB2YXIgZGF0ZSA9IChyZWZEYXRlKSA/IG5ldyBEYXRlKERhdGUucGFyc2UocmVmRGF0ZSkpIDogbmV3IERhdGUoKTtcbiAgICAgIHZhciByYW5nZSA9IHtcbiAgICAgICAgbWluOiAxMDAwLFxuICAgICAgICBtYXg6ICh5ZWFycyB8fCAxKSAqIDM2NSAqIDI0ICogMzYwMCAqIDEwMDBcbiAgICAgIH07XG5cbiAgICAgIHZhciBmdXR1cmUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgIGZ1dHVyZSArPSBmYWtlci5yYW5kb20ubnVtYmVyKHJhbmdlKTsgLy8gc29tZSB0aW1lIGZyb20gbm93IHRvIE4geWVhcnMgbGF0ZXIsIGluIG1pbGxpc2Vjb25kc1xuICAgICAgZGF0ZS5zZXRUaW1lKGZ1dHVyZSk7XG5cbiAgICAgIHJldHVybiBkYXRlO1xuICB9O1xuXG4gIHNlbGYuYmV0d2VlbiA9IGZ1bmN0aW9uIChmcm9tLCB0bykge1xuICAgICAgdmFyIGZyb21NaWxsaSA9IERhdGUucGFyc2UoZnJvbSk7XG4gICAgICB2YXIgZGF0ZU9mZnNldCA9IGZha2VyLnJhbmRvbS5udW1iZXIoRGF0ZS5wYXJzZSh0bykgLSBmcm9tTWlsbGkpO1xuXG4gICAgICB2YXIgbmV3RGF0ZSA9IG5ldyBEYXRlKGZyb21NaWxsaSArIGRhdGVPZmZzZXQpO1xuXG4gICAgICByZXR1cm4gbmV3RGF0ZTtcbiAgfTtcblxuICBzZWxmLnJlY2VudCA9IGZ1bmN0aW9uIChkYXlzKSB7XG4gICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICB2YXIgcmFuZ2UgPSB7XG4gICAgICAgIG1pbjogMTAwMCxcbiAgICAgICAgbWF4OiAoZGF5cyB8fCAxKSAqIDI0ICogMzYwMCAqIDEwMDBcbiAgICAgIH07XG5cbiAgICAgIHZhciBmdXR1cmUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgIGZ1dHVyZSAtPSBmYWtlci5yYW5kb20ubnVtYmVyKHJhbmdlKTsgLy8gc29tZSB0aW1lIGZyb20gbm93IHRvIE4gZGF5cyBhZ28sIGluIG1pbGxpc2Vjb25kc1xuICAgICAgZGF0ZS5zZXRUaW1lKGZ1dHVyZSk7XG5cbiAgICAgIHJldHVybiBkYXRlO1xuICB9O1xuXG4gIHNlbGYubW9udGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgIHZhciB0eXBlID0gJ3dpZGUnO1xuICAgICAgaWYgKG9wdGlvbnMuYWJicikge1xuICAgICAgICAgIHR5cGUgPSAnYWJicic7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5jb250ZXh0ICYmIHR5cGVvZiBmYWtlci5kZWZpbml0aW9ucy5kYXRlLm1vbnRoW3R5cGUgKyAnX2NvbnRleHQnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0eXBlICs9ICdfY29udGV4dCc7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2UgPSBmYWtlci5kZWZpbml0aW9ucy5kYXRlLm1vbnRoW3R5cGVdO1xuXG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChzb3VyY2UpO1xuICB9O1xuXG4gIHNlbGYud2Vla2RheSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgdmFyIHR5cGUgPSAnd2lkZSc7XG4gICAgICBpZiAob3B0aW9ucy5hYmJyKSB7XG4gICAgICAgICAgdHlwZSA9ICdhYmJyJztcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmNvbnRleHQgJiYgdHlwZW9mIGZha2VyLmRlZmluaXRpb25zLmRhdGUud2Vla2RheVt0eXBlICsgJ19jb250ZXh0J10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdHlwZSArPSAnX2NvbnRleHQnO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlID0gZmFrZXIuZGVmaW5pdGlvbnMuZGF0ZS53ZWVrZGF5W3R5cGVdO1xuXG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChzb3VyY2UpO1xuICB9O1xuICBcbiAgcmV0dXJuIHNlbGY7XG4gIFxufTtcblxubW9kdWxlWydleHBvcnRzJ10gPSBfRGF0ZTsiLCIvKlxuICBmYWtlLmpzIC0gZ2VuZXJhdG9yIG1ldGhvZCBmb3IgY29tYmluaW5nIGZha2VyIG1ldGhvZHMgYmFzZWQgb24gc3RyaW5nIGlucHV0XG5cbiovXG5cbmZ1bmN0aW9uIEZha2UgKGZha2VyKSB7XG4gIFxuICB0aGlzLmZha2UgPSBmdW5jdGlvbiBmYWtlIChzdHIpIHtcbiAgICAvLyBzZXR1cCBkZWZhdWx0IHJlc3BvbnNlIGFzIGVtcHR5IHN0cmluZ1xuICAgIHZhciByZXMgPSAnJztcblxuICAgIC8vIGlmIGluY29taW5nIHN0ciBwYXJhbWV0ZXIgaXMgbm90IHByb3ZpZGVkLCByZXR1cm4gZXJyb3IgbWVzc2FnZVxuICAgIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXMgPSAnc3RyaW5nIHBhcmFtZXRlciBpcyByZXF1aXJlZCEnO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBmaW5kIGZpcnN0IG1hdGNoaW5nIHt7IGFuZCB9fVxuICAgIHZhciBzdGFydCA9IHN0ci5zZWFyY2goJ3t7Jyk7XG4gICAgdmFyIGVuZCA9IHN0ci5zZWFyY2goJ319Jyk7XG5cbiAgICAvLyBpZiBubyB7eyBhbmQgfX0gaXMgZm91bmQsIHdlIGFyZSBkb25lXG4gICAgaWYgKHN0YXJ0ID09PSAtMSAmJiBlbmQgPT09IC0xKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdhdHRlbXB0aW5nIHRvIHBhcnNlJywgc3RyKTtcblxuICAgIC8vIGV4dHJhY3QgbWV0aG9kIG5hbWUgZnJvbSBiZXR3ZWVuIHRoZSB7eyB9fSB0aGF0IHdlIGZvdW5kXG4gICAgLy8gZm9yIGV4YW1wbGU6IHt7bmFtZS5maXJzdE5hbWV9fVxuICAgIHZhciBtZXRob2QgPSBzdHIuc3Vic3RyKHN0YXJ0ICsgMiwgIGVuZCAtIHN0YXJ0IC0gMik7XG4gICAgbWV0aG9kID0gbWV0aG9kLnJlcGxhY2UoJ319JywgJycpO1xuICAgIG1ldGhvZCA9IG1ldGhvZC5yZXBsYWNlKCd7eycsICcnKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdtZXRob2QnLCBtZXRob2QpXG5cbiAgICAvLyBzcGxpdCB0aGUgbWV0aG9kIGludG8gbW9kdWxlIGFuZCBmdW5jdGlvblxuICAgIHZhciBwYXJ0cyA9IG1ldGhvZC5zcGxpdCgnLicpO1xuXG4gICAgaWYgKHR5cGVvZiBmYWtlcltwYXJ0c1swXV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtb2R1bGU6ICcgKyBwYXJ0c1swXSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWtlcltwYXJ0c1swXV1bcGFydHNbMV1dID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWV0aG9kOiAnICsgcGFydHNbMF0gKyBcIi5cIiArIHBhcnRzWzFdKTtcbiAgICB9XG5cbiAgICAvLyBhc3NpZ24gdGhlIGZ1bmN0aW9uIGZyb20gdGhlIG1vZHVsZS5mdW5jdGlvbiBuYW1lc3BhY2VcbiAgICB2YXIgZm4gPSBmYWtlcltwYXJ0c1swXV1bcGFydHNbMV1dO1xuXG4gICAgLy8gcmVwbGFjZSB0aGUgZm91bmQgdGFnIHdpdGggdGhlIHJldHVybmVkIGZha2UgdmFsdWVcbiAgICByZXMgPSBzdHIucmVwbGFjZSgne3snICsgbWV0aG9kICsgJ319JywgZm4oKSk7XG5cbiAgICAvLyByZXR1cm4gdGhlIHJlc3BvbnNlIHJlY3Vyc2l2ZWx5IHVudGlsIHdlIGFyZSBkb25lIGZpbmRpbmcgYWxsIHRhZ3NcbiAgICByZXR1cm4gZmFrZShyZXMpOyAgICBcbiAgfVxuICBcbiAgcmV0dXJuIHRoaXM7XG4gIFxuICBcbn1cblxubW9kdWxlWydleHBvcnRzJ10gPSBGYWtlOyIsInZhciBGaW5hbmNlID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBIZWxwZXJzID0gZmFrZXIuaGVscGVycyxcbiAgICAgIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuYWNjb3VudCA9IGZ1bmN0aW9uIChsZW5ndGgpIHtcblxuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHx8IDg7XG5cbiAgICAgIHZhciB0ZW1wbGF0ZSA9ICcnO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSArICcjJztcbiAgICAgIH1cbiAgICAgIGxlbmd0aCA9IG51bGw7XG4gICAgICByZXR1cm4gSGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcih0ZW1wbGF0ZSk7XG4gIH1cblxuICBzZWxmLmFjY291bnROYW1lID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICByZXR1cm4gW0hlbHBlcnMucmFuZG9taXplKGZha2VyLmRlZmluaXRpb25zLmZpbmFuY2UuYWNjb3VudF90eXBlKSwgJ0FjY291bnQnXS5qb2luKCcgJyk7XG4gIH1cblxuICBzZWxmLm1hc2sgPSBmdW5jdGlvbiAobGVuZ3RoLCBwYXJlbnMsIGVsaXBzaXMpIHtcblxuXG4gICAgICAvL3NldCBkZWZhdWx0c1xuICAgICAgbGVuZ3RoID0gKGxlbmd0aCA9PSAwIHx8ICFsZW5ndGggfHwgdHlwZW9mIGxlbmd0aCA9PSAndW5kZWZpbmVkJykgPyA0IDogbGVuZ3RoO1xuICAgICAgcGFyZW5zID0gKHBhcmVucyA9PT0gbnVsbCkgPyB0cnVlIDogcGFyZW5zO1xuICAgICAgZWxpcHNpcyA9IChlbGlwc2lzID09PSBudWxsKSA/IHRydWUgOiBlbGlwc2lzO1xuXG4gICAgICAvL2NyZWF0ZSBhIHRlbXBsYXRlIGZvciBsZW5ndGhcbiAgICAgIHZhciB0ZW1wbGF0ZSA9ICcnO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSArICcjJztcbiAgICAgIH1cblxuICAgICAgLy9wcmVmaXggd2l0aCBlbGlwc2lzXG4gICAgICB0ZW1wbGF0ZSA9IChlbGlwc2lzKSA/IFsnLi4uJywgdGVtcGxhdGVdLmpvaW4oJycpIDogdGVtcGxhdGU7XG5cbiAgICAgIHRlbXBsYXRlID0gKHBhcmVucykgPyBbJygnLCB0ZW1wbGF0ZSwgJyknXS5qb2luKCcnKSA6IHRlbXBsYXRlO1xuXG4gICAgICAvL2dlbmVyYXRlIHJhbmRvbSBudW1iZXJzXG4gICAgICB0ZW1wbGF0ZSA9IEhlbHBlcnMucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIodGVtcGxhdGUpO1xuXG4gICAgICByZXR1cm4gdGVtcGxhdGU7XG5cbiAgfVxuXG4gIC8vbWluIGFuZCBtYXggdGFrZSBpbiBtaW5pbXVtIGFuZCBtYXhpbXVtIGFtb3VudHMsIGRlYyBpcyB0aGUgZGVjaW1hbCBwbGFjZSB5b3Ugd2FudCByb3VuZGVkIHRvLCBzeW1ib2wgaXMgJCwg4oKsLCDCoywgZXRjXG4gIC8vTk9URTogdGhpcyByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSwgaWYgeW91IHdhbnQgYSBudW1iZXIgdXNlIHBhcnNlRmxvYXQgYW5kIG5vIHN5bWJvbFxuXG4gIHNlbGYuYW1vdW50ID0gZnVuY3Rpb24gKG1pbiwgbWF4LCBkZWMsIHN5bWJvbCkge1xuXG4gICAgICBtaW4gPSBtaW4gfHwgMDtcbiAgICAgIG1heCA9IG1heCB8fCAxMDAwO1xuICAgICAgZGVjID0gZGVjIHx8IDI7XG4gICAgICBzeW1ib2wgPSBzeW1ib2wgfHwgJyc7XG5cbiAgICAgIHJldHVybiBzeW1ib2wgKyAoTWF0aC5yb3VuZCgoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluKSAqIE1hdGgucG93KDEwLCBkZWMpKSAvIE1hdGgucG93KDEwLCBkZWMpKS50b0ZpeGVkKGRlYyk7XG5cbiAgfVxuXG4gIHNlbGYudHJhbnNhY3Rpb25UeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEhlbHBlcnMucmFuZG9taXplKGZha2VyLmRlZmluaXRpb25zLmZpbmFuY2UudHJhbnNhY3Rpb25fdHlwZSk7XG4gIH1cblxuICBzZWxmLmN1cnJlbmN5Q29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20ub2JqZWN0RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5maW5hbmNlLmN1cnJlbmN5KVsnY29kZSddO1xuICB9XG5cbiAgc2VsZi5jdXJyZW5jeU5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLm9iamVjdEVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuZmluYW5jZS5jdXJyZW5jeSwgJ2tleScpO1xuICB9XG5cbiAgc2VsZi5jdXJyZW5jeVN5bWJvbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzeW1ib2w7XG5cbiAgICAgIHdoaWxlICghc3ltYm9sKSB7XG4gICAgICAgICAgc3ltYm9sID0gZmFrZXIucmFuZG9tLm9iamVjdEVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuZmluYW5jZS5jdXJyZW5jeSlbJ3N5bWJvbCddO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufVxuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IEZpbmFuY2U7IiwidmFyIEhhY2tlciA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIFxuICBzZWxmLmFiYnJldmlhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5oYWNrZXIuYWJicmV2aWF0aW9uKTtcbiAgfTtcblxuICBzZWxmLmFkamVjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5oYWNrZXIuYWRqZWN0aXZlKTtcbiAgfTtcblxuICBzZWxmLm5vdW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaGFja2VyLm5vdW4pO1xuICB9O1xuXG4gIHNlbGYudmVyYiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5oYWNrZXIudmVyYik7XG4gIH07XG5cbiAgc2VsZi5pbmd2ZXJiID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmhhY2tlci5pbmd2ZXJiKTtcbiAgfTtcblxuICBzZWxmLnBocmFzZSA9IGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgYWJicmV2aWF0aW9uOiBzZWxmLmFiYnJldmlhdGlvbigpLFxuICAgICAgYWRqZWN0aXZlOiBzZWxmLmFkamVjdGl2ZSgpLFxuICAgICAgaW5ndmVyYjogc2VsZi5pbmd2ZXJiKCksXG4gICAgICBub3VuOiBzZWxmLm5vdW4oKSxcbiAgICAgIHZlcmI6IHNlbGYudmVyYigpXG4gICAgfTtcblxuICAgIHZhciBwaHJhc2UgPSBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KFsgXCJJZiB3ZSB7e3ZlcmJ9fSB0aGUge3tub3VufX0sIHdlIGNhbiBnZXQgdG8gdGhlIHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0gdGhyb3VnaCB0aGUge3thZGplY3RpdmV9fSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19IVwiLFxuICAgICAgXCJXZSBuZWVkIHRvIHt7dmVyYn19IHRoZSB7e2FkamVjdGl2ZX19IHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0hXCIsXG4gICAgICBcIlRyeSB0byB7e3ZlcmJ9fSB0aGUge3thYmJyZXZpYXRpb259fSB7e25vdW59fSwgbWF5YmUgaXQgd2lsbCB7e3ZlcmJ9fSB0aGUge3thZGplY3RpdmV9fSB7e25vdW59fSFcIixcbiAgICAgIFwiWW91IGNhbid0IHt7dmVyYn19IHRoZSB7e25vdW59fSB3aXRob3V0IHt7aW5ndmVyYn19IHRoZSB7e2FkamVjdGl2ZX19IHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0hXCIsXG4gICAgICBcIlVzZSB0aGUge3thZGplY3RpdmV9fSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19LCB0aGVuIHlvdSBjYW4ge3t2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3tub3VufX0hXCIsXG4gICAgICBcIlRoZSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19IGlzIGRvd24sIHt7dmVyYn19IHRoZSB7e2FkamVjdGl2ZX19IHt7bm91bn19IHNvIHdlIGNhbiB7e3ZlcmJ9fSB0aGUge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIixcbiAgICAgIFwie3tpbmd2ZXJifX0gdGhlIHt7bm91bn19IHdvbid0IGRvIGFueXRoaW5nLCB3ZSBuZWVkIHRvIHt7dmVyYn19IHRoZSB7e2FkamVjdGl2ZX19IHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0hXCIsXG4gICAgICBcIkknbGwge3t2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3thYmJyZXZpYXRpb259fSB7e25vdW59fSwgdGhhdCBzaG91bGQge3tub3VufX0gdGhlIHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0hXCJcbiAgIF0pO1xuXG4gICByZXR1cm4gZmFrZXIuaGVscGVycy5tdXN0YWNoZShwaHJhc2UsIGRhdGEpO1xuXG4gIH07XG4gIFxuICByZXR1cm4gc2VsZjtcbn07XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gSGFja2VyOyIsInZhciBIZWxwZXJzID0gZnVuY3Rpb24gKGZha2VyKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGJhY2t3b3JkLWNvbXBhdGliaWxpdHlcbiAgc2VsZi5yYW5kb21pemUgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICAgIGFycmF5ID0gYXJyYXkgfHwgW1wiYVwiLCBcImJcIiwgXCJjXCJdO1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoYXJyYXkpO1xuICB9O1xuXG4gIC8vIHNsdWdpZmllcyBzdHJpbmdcbiAgc2VsZi5zbHVnaWZ5ID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nIHx8IFwiXCI7XG4gICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyAvZywgJy0nKS5yZXBsYWNlKC9bXlxcd1xcLlxcLV0rL2csICcnKTtcbiAgfTtcblxuICAvLyBwYXJzZXMgc3RyaW5nIGZvciBhIHN5bWJvbCBhbmQgcmVwbGFjZSBpdCB3aXRoIGEgcmFuZG9tIG51bWJlciBmcm9tIDEtMTBcbiAgc2VsZi5yZXBsYWNlU3ltYm9sV2l0aE51bWJlciA9IGZ1bmN0aW9uIChzdHJpbmcsIHN5bWJvbCkge1xuICAgICAgc3RyaW5nID0gc3RyaW5nIHx8IFwiXCI7XG4gICAgICAvLyBkZWZhdWx0IHN5bWJvbCBpcyAnIydcbiAgICAgIGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN5bWJvbCA9ICcjJztcbiAgICAgIH1cblxuICAgICAgdmFyIHN0ciA9ICcnO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoc3RyaW5nLmNoYXJBdChpKSA9PSBzeW1ib2wpIHtcbiAgICAgICAgICAgICAgc3RyICs9IGZha2VyLnJhbmRvbS5udW1iZXIoOSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyICs9IHN0cmluZy5jaGFyQXQoaSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICAvLyBwYXJzZXMgc3RyaW5nIGZvciBzeW1ib2xzIChudW1iZXJzIG9yIGxldHRlcnMpIGFuZCByZXBsYWNlcyB0aGVtIGFwcHJvcHJpYXRlbHlcbiAgc2VsZi5yZXBsYWNlU3ltYm9scyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyB8fCBcIlwiO1xuICBcdHZhciBhbHBoYSA9IFsnQScsJ0InLCdDJywnRCcsJ0UnLCdGJywnRycsJ0gnLCdJJywnSicsJ0snLCdMJywnTScsJ04nLCdPJywnUCcsJ1EnLCdSJywnUycsJ1QnLCdVJywnVicsJ1cnLCdYJywnWScsJ1onXVxuICAgICAgdmFyIHN0ciA9ICcnO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChzdHJpbmcuY2hhckF0KGkpID09IFwiI1wiKSB7XG4gICAgICAgICAgICAgIHN0ciArPSBmYWtlci5yYW5kb20ubnVtYmVyKDkpO1xuICBcdFx0fSBlbHNlIGlmIChzdHJpbmcuY2hhckF0KGkpID09IFwiP1wiKSB7XG4gIFx0XHRcdHN0ciArPSBhbHBoYVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhbHBoYS5sZW5ndGgpXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdHIgKz0gc3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIC8vIHRha2VzIGFuIGFycmF5IGFuZCByZXR1cm5zIGl0IHJhbmRvbWl6ZWRcbiAgc2VsZi5zaHVmZmxlID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgIG8gPSBvIHx8IFtcImFcIiwgXCJiXCIsIFwiY1wiXTtcbiAgICAgIGZvciAodmFyIGosIHgsIGkgPSBvLmxlbmd0aC0xOyBpOyBqID0gZmFrZXIucmFuZG9tLm51bWJlcihpKSwgeCA9IG9bLS1pXSwgb1tpXSA9IG9bal0sIG9bal0gPSB4KTtcbiAgICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHNlbGYubXVzdGFjaGUgPSBmdW5jdGlvbiAoc3RyLCBkYXRhKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGZvcih2YXIgcCBpbiBkYXRhKSB7XG4gICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKCd7eycgKyBwICsgJ319JywgJ2cnKVxuICAgICAgc3RyID0gc3RyLnJlcGxhY2UocmUsIGRhdGFbcF0pO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIHNlbGYuY3JlYXRlQ2FyZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICAgXCJuYW1lXCI6IGZha2VyLm5hbWUuZmluZE5hbWUoKSxcbiAgICAgICAgICBcInVzZXJuYW1lXCI6IGZha2VyLmludGVybmV0LnVzZXJOYW1lKCksXG4gICAgICAgICAgXCJlbWFpbFwiOiBmYWtlci5pbnRlcm5ldC5lbWFpbCgpLFxuICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgIFwic3RyZWV0QVwiOiBmYWtlci5hZGRyZXNzLnN0cmVldE5hbWUoKSxcbiAgICAgICAgICAgICAgXCJzdHJlZXRCXCI6IGZha2VyLmFkZHJlc3Muc3RyZWV0QWRkcmVzcygpLFxuICAgICAgICAgICAgICBcInN0cmVldENcIjogZmFrZXIuYWRkcmVzcy5zdHJlZXRBZGRyZXNzKHRydWUpLFxuICAgICAgICAgICAgICBcInN0cmVldERcIjogZmFrZXIuYWRkcmVzcy5zZWNvbmRhcnlBZGRyZXNzKCksXG4gICAgICAgICAgICAgIFwiY2l0eVwiOiBmYWtlci5hZGRyZXNzLmNpdHkoKSxcbiAgICAgICAgICAgICAgXCJzdGF0ZVwiOiBmYWtlci5hZGRyZXNzLnN0YXRlKCksXG4gICAgICAgICAgICAgIFwiY291bnRyeVwiOiBmYWtlci5hZGRyZXNzLmNvdW50cnkoKSxcbiAgICAgICAgICAgICAgXCJ6aXBjb2RlXCI6IGZha2VyLmFkZHJlc3MuemlwQ29kZSgpLFxuICAgICAgICAgICAgICBcImdlb1wiOiB7XG4gICAgICAgICAgICAgICAgICBcImxhdFwiOiBmYWtlci5hZGRyZXNzLmxhdGl0dWRlKCksXG4gICAgICAgICAgICAgICAgICBcImxuZ1wiOiBmYWtlci5hZGRyZXNzLmxvbmdpdHVkZSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGhvbmVcIjogZmFrZXIucGhvbmUucGhvbmVOdW1iZXIoKSxcbiAgICAgICAgICBcIndlYnNpdGVcIjogZmFrZXIuaW50ZXJuZXQuZG9tYWluTmFtZSgpLFxuICAgICAgICAgIFwiY29tcGFueVwiOiB7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiBmYWtlci5jb21wYW55LmNvbXBhbnlOYW1lKCksXG4gICAgICAgICAgICAgIFwiY2F0Y2hQaHJhc2VcIjogZmFrZXIuY29tcGFueS5jYXRjaFBocmFzZSgpLFxuICAgICAgICAgICAgICBcImJzXCI6IGZha2VyLmNvbXBhbnkuYnMoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb3N0c1wiOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFwid29yZHNcIjogZmFrZXIubG9yZW0ud29yZHMoKSxcbiAgICAgICAgICAgICAgICAgIFwic2VudGVuY2VcIjogZmFrZXIubG9yZW0uc2VudGVuY2UoKSxcbiAgICAgICAgICAgICAgICAgIFwic2VudGVuY2VzXCI6IGZha2VyLmxvcmVtLnNlbnRlbmNlcygpLFxuICAgICAgICAgICAgICAgICAgXCJwYXJhZ3JhcGhcIjogZmFrZXIubG9yZW0ucGFyYWdyYXBoKClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgXCJ3b3Jkc1wiOiBmYWtlci5sb3JlbS53b3JkcygpLFxuICAgICAgICAgICAgICAgICAgXCJzZW50ZW5jZVwiOiBmYWtlci5sb3JlbS5zZW50ZW5jZSgpLFxuICAgICAgICAgICAgICAgICAgXCJzZW50ZW5jZXNcIjogZmFrZXIubG9yZW0uc2VudGVuY2VzKCksXG4gICAgICAgICAgICAgICAgICBcInBhcmFncmFwaFwiOiBmYWtlci5sb3JlbS5wYXJhZ3JhcGgoKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBcIndvcmRzXCI6IGZha2VyLmxvcmVtLndvcmRzKCksXG4gICAgICAgICAgICAgICAgICBcInNlbnRlbmNlXCI6IGZha2VyLmxvcmVtLnNlbnRlbmNlKCksXG4gICAgICAgICAgICAgICAgICBcInNlbnRlbmNlc1wiOiBmYWtlci5sb3JlbS5zZW50ZW5jZXMoKSxcbiAgICAgICAgICAgICAgICAgIFwicGFyYWdyYXBoXCI6IGZha2VyLmxvcmVtLnBhcmFncmFwaCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiYWNjb3VudEhpc3RvcnlcIjogW2Zha2VyLmhlbHBlcnMuY3JlYXRlVHJhbnNhY3Rpb24oKSwgZmFrZXIuaGVscGVycy5jcmVhdGVUcmFuc2FjdGlvbigpLCBmYWtlci5oZWxwZXJzLmNyZWF0ZVRyYW5zYWN0aW9uKCldXG4gICAgICB9O1xuICB9O1xuXG4gIHNlbGYuY29udGV4dHVhbENhcmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5hbWUgPSBmYWtlci5uYW1lLmZpcnN0TmFtZSgpLFxuICAgICAgICB1c2VyTmFtZSA9IGZha2VyLmludGVybmV0LnVzZXJOYW1lKG5hbWUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIFwibmFtZVwiOiBuYW1lLFxuICAgICAgICBcInVzZXJuYW1lXCI6IHVzZXJOYW1lLFxuICAgICAgICBcImF2YXRhclwiOiBmYWtlci5pbnRlcm5ldC5hdmF0YXIoKSxcbiAgICAgICAgXCJlbWFpbFwiOiBmYWtlci5pbnRlcm5ldC5lbWFpbCh1c2VyTmFtZSksXG4gICAgICAgIFwiZG9iXCI6IGZha2VyLmRhdGUucGFzdCg1MCwgbmV3IERhdGUoXCJTYXQgU2VwIDIwIDE5OTIgMjE6MzU6MDIgR01UKzAyMDAgKENFU1QpXCIpKSxcbiAgICAgICAgXCJwaG9uZVwiOiBmYWtlci5waG9uZS5waG9uZU51bWJlcigpLFxuICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgXCJzdHJlZXRcIjogZmFrZXIuYWRkcmVzcy5zdHJlZXROYW1lKHRydWUpLFxuICAgICAgICAgICAgXCJzdWl0ZVwiOiBmYWtlci5hZGRyZXNzLnNlY29uZGFyeUFkZHJlc3MoKSxcbiAgICAgICAgICAgIFwiY2l0eVwiOiBmYWtlci5hZGRyZXNzLmNpdHkoKSxcbiAgICAgICAgICAgIFwiemlwY29kZVwiOiBmYWtlci5hZGRyZXNzLnppcENvZGUoKSxcbiAgICAgICAgICAgIFwiZ2VvXCI6IHtcbiAgICAgICAgICAgICAgICBcImxhdFwiOiBmYWtlci5hZGRyZXNzLmxhdGl0dWRlKCksXG4gICAgICAgICAgICAgICAgXCJsbmdcIjogZmFrZXIuYWRkcmVzcy5sb25naXR1ZGUoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIndlYnNpdGVcIjogZmFrZXIuaW50ZXJuZXQuZG9tYWluTmFtZSgpLFxuICAgICAgICBcImNvbXBhbnlcIjoge1xuICAgICAgICAgICAgXCJuYW1lXCI6IGZha2VyLmNvbXBhbnkuY29tcGFueU5hbWUoKSxcbiAgICAgICAgICAgIFwiY2F0Y2hQaHJhc2VcIjogZmFrZXIuY29tcGFueS5jYXRjaFBocmFzZSgpLFxuICAgICAgICAgICAgXCJic1wiOiBmYWtlci5jb21wYW55LmJzKClcbiAgICAgICAgfVxuICAgIH07XG4gIH07XG5cblxuICBzZWxmLnVzZXJDYXJkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBcIm5hbWVcIjogZmFrZXIubmFtZS5maW5kTmFtZSgpLFxuICAgICAgICAgIFwidXNlcm5hbWVcIjogZmFrZXIuaW50ZXJuZXQudXNlck5hbWUoKSxcbiAgICAgICAgICBcImVtYWlsXCI6IGZha2VyLmludGVybmV0LmVtYWlsKCksXG4gICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgXCJzdHJlZXRcIjogZmFrZXIuYWRkcmVzcy5zdHJlZXROYW1lKHRydWUpLFxuICAgICAgICAgICAgICBcInN1aXRlXCI6IGZha2VyLmFkZHJlc3Muc2Vjb25kYXJ5QWRkcmVzcygpLFxuICAgICAgICAgICAgICBcImNpdHlcIjogZmFrZXIuYWRkcmVzcy5jaXR5KCksXG4gICAgICAgICAgICAgIFwiemlwY29kZVwiOiBmYWtlci5hZGRyZXNzLnppcENvZGUoKSxcbiAgICAgICAgICAgICAgXCJnZW9cIjoge1xuICAgICAgICAgICAgICAgICAgXCJsYXRcIjogZmFrZXIuYWRkcmVzcy5sYXRpdHVkZSgpLFxuICAgICAgICAgICAgICAgICAgXCJsbmdcIjogZmFrZXIuYWRkcmVzcy5sb25naXR1ZGUoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBob25lXCI6IGZha2VyLnBob25lLnBob25lTnVtYmVyKCksXG4gICAgICAgICAgXCJ3ZWJzaXRlXCI6IGZha2VyLmludGVybmV0LmRvbWFpbk5hbWUoKSxcbiAgICAgICAgICBcImNvbXBhbnlcIjoge1xuICAgICAgICAgICAgICBcIm5hbWVcIjogZmFrZXIuY29tcGFueS5jb21wYW55TmFtZSgpLFxuICAgICAgICAgICAgICBcImNhdGNoUGhyYXNlXCI6IGZha2VyLmNvbXBhbnkuY2F0Y2hQaHJhc2UoKSxcbiAgICAgICAgICAgICAgXCJic1wiOiBmYWtlci5jb21wYW55LmJzKClcbiAgICAgICAgICB9XG4gICAgICB9O1xuICB9O1xuXG4gIHNlbGYuY3JlYXRlVHJhbnNhY3Rpb24gPSBmdW5jdGlvbigpe1xuICAgIHJldHVybiB7XG4gICAgICBcImFtb3VudFwiIDogZmFrZXIuZmluYW5jZS5hbW91bnQoKSxcbiAgICAgIFwiZGF0ZVwiIDogbmV3IERhdGUoMjAxMiwgMSwgMiksICAvL1RPRE86IGFkZCBhIHJhbmdlZCBkYXRlIG1ldGhvZFxuICAgICAgXCJidXNpbmVzc1wiOiBmYWtlci5jb21wYW55LmNvbXBhbnlOYW1lKCksXG4gICAgICBcIm5hbWVcIjogW2Zha2VyLmZpbmFuY2UuYWNjb3VudE5hbWUoKSwgZmFrZXIuZmluYW5jZS5tYXNrKCldLmpvaW4oJyAnKSxcbiAgICAgIFwidHlwZVwiIDogc2VsZi5yYW5kb21pemUoZmFrZXIuZGVmaW5pdGlvbnMuZmluYW5jZS50cmFuc2FjdGlvbl90eXBlKSxcbiAgICAgIFwiYWNjb3VudFwiIDogZmFrZXIuZmluYW5jZS5hY2NvdW50KClcbiAgICB9O1xuICB9O1xuICBcbiAgcmV0dXJuIHNlbGY7XG4gIFxufTtcblxuXG4vKlxuU3RyaW5nLnByb3RvdHlwZS5jYXBpdGFsaXplID0gZnVuY3Rpb24gKCkgeyAvL3YxLjBcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC9cXHcrL2csIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBhLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYS5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcbn07XG4qL1xuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IEhlbHBlcnM7IiwidmFyIEltYWdlID0gZnVuY3Rpb24gKGZha2VyKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuaW1hZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNhdGVnb3JpZXMgPSBbXCJhYnN0cmFjdFwiLCBcImFuaW1hbHNcIiwgXCJidXNpbmVzc1wiLCBcImNhdHNcIiwgXCJjaXR5XCIsIFwiZm9vZFwiLCBcIm5pZ2h0bGlmZVwiLCBcImZhc2hpb25cIiwgXCJwZW9wbGVcIiwgXCJuYXR1cmVcIiwgXCJzcG9ydHNcIiwgXCJ0ZWNobmljc1wiLCBcInRyYW5zcG9ydFwiXTtcbiAgICByZXR1cm4gc2VsZltmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGNhdGVnb3JpZXMpXSgpO1xuICB9O1xuICBzZWxmLmF2YXRhciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIuaW50ZXJuZXQuYXZhdGFyKCk7XG4gIH07XG4gIHNlbGYuaW1hZ2VVcmwgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgY2F0ZWdvcnkpIHtcbiAgICAgIHZhciB3aWR0aCA9IHdpZHRoIHx8IDY0MDtcbiAgICAgIHZhciBoZWlnaHQgPSBoZWlnaHQgfHwgNDgwO1xuXG4gICAgICB2YXIgdXJsID0naHR0cDovL2xvcmVtcGl4ZWwuY29tLycgKyB3aWR0aCArICcvJyArIGhlaWdodDtcbiAgICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHVybCArPSAnLycgKyBjYXRlZ29yeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1cmw7XG4gIH07XG4gIHNlbGYuYWJzdHJhY3QgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnYWJzdHJhY3QnKTtcbiAgfTtcbiAgc2VsZi5hbmltYWxzID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ2FuaW1hbHMnKTtcbiAgfTtcbiAgc2VsZi5idXNpbmVzcyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdidXNpbmVzcycpO1xuICB9O1xuICBzZWxmLmNhdHMgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnY2F0cycpO1xuICB9O1xuICBzZWxmLmNpdHkgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnY2l0eScpO1xuICB9O1xuICBzZWxmLmZvb2QgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnZm9vZCcpO1xuICB9O1xuICBzZWxmLm5pZ2h0bGlmZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICduaWdodGxpZmUnKTtcbiAgfTtcbiAgc2VsZi5mYXNoaW9uID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ2Zhc2hpb24nKTtcbiAgfTtcbiAgc2VsZi5wZW9wbGUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAncGVvcGxlJyk7XG4gIH07XG4gIHNlbGYubmF0dXJlID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ25hdHVyZScpO1xuICB9O1xuICBzZWxmLnNwb3J0cyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdzcG9ydHMnKTtcbiAgfTtcbiAgc2VsZi50ZWNobmljcyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICd0ZWNobmljcycpO1xuICB9O1xuICBzZWxmLnRyYW5zcG9ydCA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICd0cmFuc3BvcnQnKTtcbiAgfSAgXG59XG5cbm1vZHVsZVtcImV4cG9ydHNcIl0gPSBJbWFnZTsiLCIvKlxuXG4gICB0aGlzIGluZGV4LmpzIGZpbGUgaXMgdXNlZCBmb3IgaW5jbHVkaW5nIHRoZSBmYWtlciBsaWJyYXJ5IGFzIGEgQ29tbW9uSlMgbW9kdWxlLCBpbnN0ZWFkIG9mIGEgYnVuZGxlXG5cbiAgIHlvdSBjYW4gaW5jbHVkZSB0aGUgZmFrZXIgbGlicmFyeSBpbnRvIHlvdXIgZXhpc3Rpbmcgbm9kZS5qcyBhcHBsaWNhdGlvbiBieSByZXF1aXJpbmcgdGhlIGVudGlyZSAvZmFrZXIgZGlyZWN0b3J5XG5cbiAgICB2YXIgZmFrZXIgPSByZXF1aXJlKC4vZmFrZXIpO1xuICAgIHZhciByYW5kb21OYW1lID0gZmFrZXIubmFtZS5maW5kTmFtZSgpO1xuXG4gICB5b3UgY2FuIGFsc28gc2ltcGx5IGluY2x1ZGUgdGhlIFwiZmFrZXIuanNcIiBmaWxlIHdoaWNoIGlzIHRoZSBhdXRvLWdlbmVyYXRlZCBidW5kbGVkIHZlcnNpb24gb2YgdGhlIGZha2VyIGxpYnJhcnlcblxuICAgIHZhciBmYWtlciA9IHJlcXVpcmUoLi9jdXN0b21BcHBQYXRoL2Zha2VyKTtcbiAgICB2YXIgcmFuZG9tTmFtZSA9IGZha2VyLm5hbWUuZmluZE5hbWUoKTtcblxuXG4gIGlmIHlvdSBwbGFuIG9uIG1vZGlmeWluZyB0aGUgZmFrZXIgbGlicmFyeSB5b3Ugc2hvdWxkIGJlIHBlcmZvcm1pbmcgeW91ciBjaGFuZ2VzIGluIHRoZSAvbGliLyBkaXJlY3RvcnlcblxuKi9cblxuZnVuY3Rpb24gRmFrZXIgKG9wdHMpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgLy8gYXNzaWduIG9wdGlvbnNcbiAgdmFyIGxvY2FsZXMgPSBzZWxmLmxvY2FsZXMgfHwgb3B0cy5sb2NhbGVzIHx8IHt9O1xuICB2YXIgbG9jYWxlID0gc2VsZi5sb2NhbGUgfHwgb3B0cy5sb2NhbGUgfHwgXCJlblwiO1xuICB2YXIgbG9jYWxlRmFsbGJhY2sgPSBzZWxmLmxvY2FsZUZhbGxiYWNrIHx8IG9wdHMubG9jYWxlRmFsbGJhY2sgfHwgXCJlblwiO1xuXG4gIHNlbGYubG9jYWxlcyA9IGxvY2FsZXM7XG4gIHNlbGYubG9jYWxlID0gbG9jYWxlO1xuICBzZWxmLmxvY2FsZUZhbGxiYWNrID0gbG9jYWxlRmFsbGJhY2s7XG5cbiAgc2VsZi5kZWZpbml0aW9ucyA9IHt9O1xuXG4gIHZhciBGYWtlID0gcmVxdWlyZSgnLi9mYWtlJyk7XG4gIHNlbGYuZmFrZSA9IG5ldyBGYWtlKHNlbGYpLmZha2U7XG5cbiAgdmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4vcmFuZG9tJyk7XG4gIHNlbGYucmFuZG9tID0gbmV3IFJhbmRvbShzZWxmKTtcbiAgLy8gc2VsZi5yYW5kb20gPSByZXF1aXJlKCcuL3JhbmRvbScpO1xuXG4gIHZhciBIZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XG4gIHNlbGYuaGVscGVycyA9IG5ldyBIZWxwZXJzKHNlbGYpO1xuXG4gIHZhciBOYW1lID0gcmVxdWlyZSgnLi9uYW1lJyk7XG4gIHNlbGYubmFtZSA9IG5ldyBOYW1lKHNlbGYpO1xuICAvLyBzZWxmLm5hbWUgPSByZXF1aXJlKCcuL25hbWUnKTtcblxuICB2YXIgQWRkcmVzcyA9IHJlcXVpcmUoJy4vYWRkcmVzcycpO1xuICBzZWxmLmFkZHJlc3MgPSBuZXcgQWRkcmVzcyhzZWxmKTtcblxuICB2YXIgQ29tcGFueSA9IHJlcXVpcmUoJy4vY29tcGFueScpO1xuICBzZWxmLmNvbXBhbnkgPSBuZXcgQ29tcGFueShzZWxmKTtcblxuICB2YXIgRmluYW5jZSA9IHJlcXVpcmUoJy4vZmluYW5jZScpO1xuICBzZWxmLmZpbmFuY2UgPSBuZXcgRmluYW5jZShzZWxmKTtcblxuICB2YXIgSW1hZ2UgPSByZXF1aXJlKCcuL2ltYWdlJyk7XG4gIHNlbGYuaW1hZ2UgPSBuZXcgSW1hZ2Uoc2VsZik7XG5cbiAgdmFyIExvcmVtID0gcmVxdWlyZSgnLi9sb3JlbScpO1xuICBzZWxmLmxvcmVtID0gbmV3IExvcmVtKHNlbGYpO1xuXG4gIHZhciBIYWNrZXIgPSByZXF1aXJlKCcuL2hhY2tlcicpO1xuICBzZWxmLmhhY2tlciA9IG5ldyBIYWNrZXIoc2VsZik7XG5cbiAgdmFyIEludGVybmV0ID0gcmVxdWlyZSgnLi9pbnRlcm5ldCcpO1xuICBzZWxmLmludGVybmV0ID0gbmV3IEludGVybmV0KHNlbGYpO1xuXG4gIHZhciBQaG9uZSA9IHJlcXVpcmUoJy4vcGhvbmVfbnVtYmVyJyk7XG4gIHNlbGYucGhvbmUgPSBuZXcgUGhvbmUoc2VsZik7XG5cbiAgdmFyIF9EYXRlID0gcmVxdWlyZSgnLi9kYXRlJyk7XG4gIHNlbGYuZGF0ZSA9IG5ldyBfRGF0ZShzZWxmKTtcblxuICB2YXIgQ29tbWVyY2UgPSByZXF1aXJlKCcuL2NvbW1lcmNlJyk7XG4gIHNlbGYuY29tbWVyY2UgPSBuZXcgQ29tbWVyY2Uoc2VsZik7XG5cbiAgLy8gVE9ETzogZml4IHNlbGYuY29tbWVyY2UgPSByZXF1aXJlKCcuL2NvbW1lcmNlJyk7XG5cbiAgdmFyIF9kZWZpbml0aW9ucyA9IHtcbiAgICBcIm5hbWVcIjogW1wiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiLCBcInByZWZpeFwiLCBcInN1ZmZpeFwiLCBcInRpdGxlXCIsIFwibWFsZV9maXJzdF9uYW1lXCIsIFwiZmVtYWxlX2ZpcnN0X25hbWVcIiwgXCJtYWxlX21pZGRsZV9uYW1lXCIsIFwiZmVtYWxlX21pZGRsZV9uYW1lXCIsIFwibWFsZV9sYXN0X25hbWVcIiwgXCJmZW1hbGVfbGFzdF9uYW1lXCJdLFxuICAgIFwiYWRkcmVzc1wiOiBbXCJjaXR5X3ByZWZpeFwiLCBcImNpdHlfc3VmZml4XCIsIFwic3RyZWV0X3N1ZmZpeFwiLCBcImNvdW50eVwiLCBcImNvdW50cnlcIiwgXCJjb3VudHJ5X2NvZGVcIiwgXCJzdGF0ZVwiLCBcInN0YXRlX2FiYnJcIiwgXCJzdHJlZXRfcHJlZml4XCIsIFwicG9zdGNvZGVcIl0sXG4gICAgXCJjb21wYW55XCI6IFtcImFkamVjdGl2ZVwiLCBcIm5vdW5cIiwgXCJkZXNjcmlwdG9yXCIsIFwiYnNfYWRqZWN0aXZlXCIsIFwiYnNfbm91blwiLCBcImJzX3ZlcmJcIiwgXCJzdWZmaXhcIl0sXG4gICAgXCJsb3JlbVwiOiBbXCJ3b3Jkc1wiXSxcbiAgICBcImhhY2tlclwiOiBbXCJhYmJyZXZpYXRpb25cIiwgXCJhZGplY3RpdmVcIiwgXCJub3VuXCIsIFwidmVyYlwiLCBcImluZ3ZlcmJcIl0sXG4gICAgXCJwaG9uZV9udW1iZXJcIjogW1wiZm9ybWF0c1wiXSxcbiAgICBcImZpbmFuY2VcIjogW1wiYWNjb3VudF90eXBlXCIsIFwidHJhbnNhY3Rpb25fdHlwZVwiLCBcImN1cnJlbmN5XCJdLFxuICAgIFwiaW50ZXJuZXRcIjogW1wiYXZhdGFyX3VyaVwiLCBcImRvbWFpbl9zdWZmaXhcIiwgXCJmcmVlX2VtYWlsXCIsIFwicGFzc3dvcmRcIl0sXG4gICAgXCJjb21tZXJjZVwiOiBbXCJjb2xvclwiLCBcImRlcGFydG1lbnRcIiwgXCJwcm9kdWN0X25hbWVcIiwgXCJwcmljZVwiLCBcImNhdGVnb3JpZXNcIl0sXG4gICAgXCJkYXRlXCI6IFtcIm1vbnRoXCIsIFwid2Vla2RheVwiXSxcbiAgICBcInRpdGxlXCI6IFwiXCIsXG4gICAgXCJzZXBhcmF0b3JcIjogXCJcIlxuICB9O1xuXG4gIC8vIENyZWF0ZSBhIEdldHRlciBmb3IgYWxsIGRlZmluaXRpb25zLmZvby5iYXIgcHJvcGV0cmllc1xuICBPYmplY3Qua2V5cyhfZGVmaW5pdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oZCl7XG4gICAgaWYgKHR5cGVvZiBzZWxmLmRlZmluaXRpb25zW2RdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBzZWxmLmRlZmluaXRpb25zW2RdID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfZGVmaW5pdGlvbnNbZF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2VsZi5kZWZpbml0aW9uc1tkXSA9IF9kZWZpbml0aW9uc1tkXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfZGVmaW5pdGlvbnNbZF0uZm9yRWFjaChmdW5jdGlvbihwKXtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmRlZmluaXRpb25zW2RdLCBwLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh0eXBlb2Ygc2VsZi5sb2NhbGVzW3NlbGYubG9jYWxlXVtkXSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2VsZi5sb2NhbGVzW3NlbGYubG9jYWxlXVtkXVtwXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgLy8gY2VydGFpbiBsb2NhbGl6YXRpb24gc2V0cyBjb250YWluIGxlc3MgZGF0YSB0aGVuIG90aGVycy5cbiAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIGEgbWlzc2luZyBkZWZpbnRpb24sIHVzZSB0aGUgZGVmYXVsdCBsb2NhbGVGYWxsYmFjayB0byBzdWJzdGl0dXRlIHRoZSBtaXNzaW5nIHNldCBkYXRhXG4gICAgICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gcHJvcGVydHkgJyArIGQgKyBwKVxuICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9jYWxlc1tsb2NhbGVGYWxsYmFja11bZF1bcF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBsb2NhbGl6ZWQgZGF0YVxuICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9jYWxlc1tzZWxmLmxvY2FsZV1bZF1bcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbn07XG5cbkZha2VyLnByb3RvdHlwZS5zZWVkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4vcmFuZG9tJyk7XG4gIHRoaXMuc2VlZFZhbHVlID0gdmFsdWU7XG4gIHRoaXMucmFuZG9tID0gbmV3IFJhbmRvbSh0aGlzLCB0aGlzLnNlZWRWYWx1ZSk7XG59XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IEZha2VyO1xuIiwidmFyIHBhc3N3b3JkX2dlbmVyYXRvciA9IHJlcXVpcmUoJy4uL3ZlbmRvci9wYXNzd29yZC1nZW5lcmF0b3IuanMnKSxcbiAgICByYW5kb21fdWEgPSByZXF1aXJlKCcuLi92ZW5kb3IvdXNlci1hZ2VudCcpO1xuXG52YXIgSW50ZXJuZXQgPSBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLmF2YXRhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmludGVybmV0LmF2YXRhcl91cmkpO1xuICB9O1xuXG4gIHNlbGYuZW1haWwgPSBmdW5jdGlvbiAoZmlyc3ROYW1lLCBsYXN0TmFtZSwgcHJvdmlkZXIpIHtcbiAgICAgIHByb3ZpZGVyID0gcHJvdmlkZXIgfHwgZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5pbnRlcm5ldC5mcmVlX2VtYWlsKTtcbiAgICAgIHJldHVybiAgZmFrZXIuaGVscGVycy5zbHVnaWZ5KGZha2VyLmludGVybmV0LnVzZXJOYW1lKGZpcnN0TmFtZSwgbGFzdE5hbWUpKSArIFwiQFwiICsgcHJvdmlkZXI7XG4gIH07XG5cbiAgc2VsZi51c2VyTmFtZSA9IGZ1bmN0aW9uIChmaXJzdE5hbWUsIGxhc3ROYW1lKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgZmlyc3ROYW1lID0gZmlyc3ROYW1lIHx8IGZha2VyLm5hbWUuZmlyc3ROYW1lKCk7XG4gICAgICBsYXN0TmFtZSA9IGxhc3ROYW1lIHx8IGZha2VyLm5hbWUubGFzdE5hbWUoKTtcbiAgICAgIHN3aXRjaCAoZmFrZXIucmFuZG9tLm51bWJlcigyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJlc3VsdCA9IGZpcnN0TmFtZSArIGZha2VyLnJhbmRvbS5udW1iZXIoOTkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlc3VsdCA9IGZpcnN0TmFtZSArIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoW1wiLlwiLCBcIl9cIl0pICsgbGFzdE5hbWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgICAgcmVzdWx0ID0gZmlyc3ROYW1lICsgZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChbXCIuXCIsIFwiX1wiXSkgKyBsYXN0TmFtZSArIGZha2VyLnJhbmRvbS5udW1iZXIoOTkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8gL2csIFwiXCIpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBzZWxmLnByb3RvY29sID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb3RvY29scyA9IFsnaHR0cCcsJ2h0dHBzJ107XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChwcm90b2NvbHMpO1xuICB9O1xuXG4gIHNlbGYudXJsID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLmludGVybmV0LnByb3RvY29sKCkgKyAnOi8vJyArIGZha2VyLmludGVybmV0LmRvbWFpbk5hbWUoKTtcbiAgfTtcblxuICBzZWxmLmRvbWFpbk5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIuaW50ZXJuZXQuZG9tYWluV29yZCgpICsgXCIuXCIgKyBmYWtlci5pbnRlcm5ldC5kb21haW5TdWZmaXgoKTtcbiAgfTtcblxuICBzZWxmLmRvbWFpblN1ZmZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmludGVybmV0LmRvbWFpbl9zdWZmaXgpO1xuICB9O1xuXG4gIHNlbGYuZG9tYWluV29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5uYW1lLmZpcnN0TmFtZSgpLnJlcGxhY2UoLyhbXFxcXH4jJip7fS86PD4/fFxcXCJdKS9pZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH07XG5cbiAgc2VsZi5pcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByYW5kTnVtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiAoZmFrZXIucmFuZG9tLm51bWJlcigyNTUpKS50b0ZpeGVkKDApO1xuICAgICAgfTtcblxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICByZXN1bHRbaV0gPSByYW5kTnVtKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQuam9pbihcIi5cIik7XG4gIH07XG5cbiAgc2VsZi51c2VyQWdlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJhbmRvbV91YS5nZW5lcmF0ZSgpO1xuICB9O1xuXG4gIHNlbGYuY29sb3IgPSBmdW5jdGlvbiAoYmFzZVJlZDI1NSwgYmFzZUdyZWVuMjU1LCBiYXNlQmx1ZTI1NSkge1xuICAgICAgYmFzZVJlZDI1NSA9IGJhc2VSZWQyNTUgfHwgMDtcbiAgICAgIGJhc2VHcmVlbjI1NSA9IGJhc2VHcmVlbjI1NSB8fCAwO1xuICAgICAgYmFzZUJsdWUyNTUgPSBiYXNlQmx1ZTI1NSB8fCAwO1xuICAgICAgLy8gYmFzZWQgb24gYXdlc29tZSByZXNwb25zZSA6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDMwNDQvYWxnb3JpdGhtLXRvLXJhbmRvbWx5LWdlbmVyYXRlLWFuLWFlc3RoZXRpY2FsbHktcGxlYXNpbmctY29sb3ItcGFsZXR0ZVxuICAgICAgdmFyIHJlZCA9IE1hdGguZmxvb3IoKGZha2VyLnJhbmRvbS5udW1iZXIoMjU2KSArIGJhc2VSZWQyNTUpIC8gMik7XG4gICAgICB2YXIgZ3JlZW4gPSBNYXRoLmZsb29yKChmYWtlci5yYW5kb20ubnVtYmVyKDI1NikgKyBiYXNlR3JlZW4yNTUpIC8gMik7XG4gICAgICB2YXIgYmx1ZSA9IE1hdGguZmxvb3IoKGZha2VyLnJhbmRvbS5udW1iZXIoMjU2KSArIGJhc2VCbHVlMjU1KSAvIDIpO1xuICAgICAgdmFyIHJlZFN0ciA9IHJlZC50b1N0cmluZygxNik7XG4gICAgICB2YXIgZ3JlZW5TdHIgPSBncmVlbi50b1N0cmluZygxNik7XG4gICAgICB2YXIgYmx1ZVN0ciA9IGJsdWUudG9TdHJpbmcoMTYpO1xuICAgICAgcmV0dXJuICcjJyArXG4gICAgICAgIChyZWRTdHIubGVuZ3RoID09PSAxID8gJzAnIDogJycpICsgcmVkU3RyICtcbiAgICAgICAgKGdyZWVuU3RyLmxlbmd0aCA9PT0gMSA/ICcwJyA6ICcnKSArIGdyZWVuU3RyICtcbiAgICAgICAgKGJsdWVTdHIubGVuZ3RoID09PSAxID8gJzAnOiAnJykgKyBibHVlU3RyO1xuXG4gIH07XG5cbiAgc2VsZi5tYWMgPSBmdW5jdGlvbigpe1xuICAgICAgdmFyIGksIG1hYyA9IFwiXCI7XG4gICAgICBmb3IgKGk9MDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICBtYWMrPSBwYXJzZUludChNYXRoLnJhbmRvbSgpKjE2KS50b1N0cmluZygxNik7XG4gICAgICAgICAgaWYgKGklMj09MSAmJiBpICE9IDExKSB7XG4gICAgICAgICAgICAgIG1hYys9XCI6XCI7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1hYztcbiAgfTtcblxuICBzZWxmLnBhc3N3b3JkID0gZnVuY3Rpb24gKGxlbiwgbWVtb3JhYmxlLCBwYXR0ZXJuLCBwcmVmaXgpIHtcbiAgICBsZW4gPSBsZW4gfHwgMTU7XG4gICAgaWYgKHR5cGVvZiBtZW1vcmFibGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIG1lbW9yYWJsZSA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcGFzc3dvcmRfZ2VuZXJhdG9yKGxlbiwgbWVtb3JhYmxlLCBwYXR0ZXJuLCBwcmVmaXgpO1xuICB9XG4gIFxufTtcblxuXG5tb2R1bGVbXCJleHBvcnRzXCJdID0gSW50ZXJuZXQ7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiMjIyMjXCIsXG4gIFwiIyMjI1wiLFxuICBcIiMjI1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIje2NpdHlfcHJlZml4fSAje05hbWUuZmlyc3RfbmFtZX0je2NpdHlfc3VmZml4fVwiLFxuICBcIiN7Y2l0eV9wcmVmaXh9ICN7TmFtZS5maXJzdF9uYW1lfVwiLFxuICBcIiN7TmFtZS5maXJzdF9uYW1lfSN7Y2l0eV9zdWZmaXh9XCIsXG4gIFwiI3tOYW1lLmxhc3RfbmFtZX0je2NpdHlfc3VmZml4fVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJOb3J0aFwiLFxuICBcIkVhc3RcIixcbiAgXCJXZXN0XCIsXG4gIFwiU291dGhcIixcbiAgXCJOZXdcIixcbiAgXCJMYWtlXCIsXG4gIFwiUG9ydFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJ0b3duXCIsXG4gIFwidG9uXCIsXG4gIFwibGFuZFwiLFxuICBcInZpbGxlXCIsXG4gIFwiYmVyZ1wiLFxuICBcImJ1cmdoXCIsXG4gIFwiYm9yb3VnaFwiLFxuICBcImJ1cnlcIixcbiAgXCJ2aWV3XCIsXG4gIFwicG9ydFwiLFxuICBcIm1vdXRoXCIsXG4gIFwic3RhZFwiLFxuICBcImZ1cnRcIixcbiAgXCJjaGVzdGVyXCIsXG4gIFwibW91dGhcIixcbiAgXCJmb3J0XCIsXG4gIFwiaGF2ZW5cIixcbiAgXCJzaWRlXCIsXG4gIFwic2hpcmVcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQWZnaGFuaXN0YW5cIixcbiAgXCJBbGJhbmlhXCIsXG4gIFwiQWxnZXJpYVwiLFxuICBcIkFtZXJpY2FuIFNhbW9hXCIsXG4gIFwiQW5kb3JyYVwiLFxuICBcIkFuZ29sYVwiLFxuICBcIkFuZ3VpbGxhXCIsXG4gIFwiQW50YXJjdGljYSAodGhlIHRlcnJpdG9yeSBTb3V0aCBvZiA2MCBkZWcgUylcIixcbiAgXCJBbnRpZ3VhIGFuZCBCYXJidWRhXCIsXG4gIFwiQXJnZW50aW5hXCIsXG4gIFwiQXJtZW5pYVwiLFxuICBcIkFydWJhXCIsXG4gIFwiQXVzdHJhbGlhXCIsXG4gIFwiQXVzdHJpYVwiLFxuICBcIkF6ZXJiYWlqYW5cIixcbiAgXCJCYWhhbWFzXCIsXG4gIFwiQmFocmFpblwiLFxuICBcIkJhbmdsYWRlc2hcIixcbiAgXCJCYXJiYWRvc1wiLFxuICBcIkJlbGFydXNcIixcbiAgXCJCZWxnaXVtXCIsXG4gIFwiQmVsaXplXCIsXG4gIFwiQmVuaW5cIixcbiAgXCJCZXJtdWRhXCIsXG4gIFwiQmh1dGFuXCIsXG4gIFwiQm9saXZpYVwiLFxuICBcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcIixcbiAgXCJCb3Rzd2FuYVwiLFxuICBcIkJvdXZldCBJc2xhbmQgKEJvdXZldG95YSlcIixcbiAgXCJCcmF6aWxcIixcbiAgXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkgKENoYWdvcyBBcmNoaXBlbGFnbylcIixcbiAgXCJCcnVuZWkgRGFydXNzYWxhbVwiLFxuICBcIkJ1bGdhcmlhXCIsXG4gIFwiQnVya2luYSBGYXNvXCIsXG4gIFwiQnVydW5kaVwiLFxuICBcIkNhbWJvZGlhXCIsXG4gIFwiQ2FtZXJvb25cIixcbiAgXCJDYW5hZGFcIixcbiAgXCJDYXBlIFZlcmRlXCIsXG4gIFwiQ2F5bWFuIElzbGFuZHNcIixcbiAgXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcIixcbiAgXCJDaGFkXCIsXG4gIFwiQ2hpbGVcIixcbiAgXCJDaGluYVwiLFxuICBcIkNocmlzdG1hcyBJc2xhbmRcIixcbiAgXCJDb2NvcyAoS2VlbGluZykgSXNsYW5kc1wiLFxuICBcIkNvbG9tYmlhXCIsXG4gIFwiQ29tb3Jvc1wiLFxuICBcIkNvbmdvXCIsXG4gIFwiQ29uZ29cIixcbiAgXCJDb29rIElzbGFuZHNcIixcbiAgXCJDb3N0YSBSaWNhXCIsXG4gIFwiQ290ZSBkJ0l2b2lyZVwiLFxuICBcIkNyb2F0aWFcIixcbiAgXCJDdWJhXCIsXG4gIFwiQ3lwcnVzXCIsXG4gIFwiQ3plY2ggUmVwdWJsaWNcIixcbiAgXCJEZW5tYXJrXCIsXG4gIFwiRGppYm91dGlcIixcbiAgXCJEb21pbmljYVwiLFxuICBcIkRvbWluaWNhbiBSZXB1YmxpY1wiLFxuICBcIkVjdWFkb3JcIixcbiAgXCJFZ3lwdFwiLFxuICBcIkVsIFNhbHZhZG9yXCIsXG4gIFwiRXF1YXRvcmlhbCBHdWluZWFcIixcbiAgXCJFcml0cmVhXCIsXG4gIFwiRXN0b25pYVwiLFxuICBcIkV0aGlvcGlhXCIsXG4gIFwiRmFyb2UgSXNsYW5kc1wiLFxuICBcIkZhbGtsYW5kIElzbGFuZHMgKE1hbHZpbmFzKVwiLFxuICBcIkZpamlcIixcbiAgXCJGaW5sYW5kXCIsXG4gIFwiRnJhbmNlXCIsXG4gIFwiRnJlbmNoIEd1aWFuYVwiLFxuICBcIkZyZW5jaCBQb2x5bmVzaWFcIixcbiAgXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcIixcbiAgXCJHYWJvblwiLFxuICBcIkdhbWJpYVwiLFxuICBcIkdlb3JnaWFcIixcbiAgXCJHZXJtYW55XCIsXG4gIFwiR2hhbmFcIixcbiAgXCJHaWJyYWx0YXJcIixcbiAgXCJHcmVlY2VcIixcbiAgXCJHcmVlbmxhbmRcIixcbiAgXCJHcmVuYWRhXCIsXG4gIFwiR3VhZGVsb3VwZVwiLFxuICBcIkd1YW1cIixcbiAgXCJHdWF0ZW1hbGFcIixcbiAgXCJHdWVybnNleVwiLFxuICBcIkd1aW5lYVwiLFxuICBcIkd1aW5lYS1CaXNzYXVcIixcbiAgXCJHdXlhbmFcIixcbiAgXCJIYWl0aVwiLFxuICBcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1wiLFxuICBcIkhvbHkgU2VlIChWYXRpY2FuIENpdHkgU3RhdGUpXCIsXG4gIFwiSG9uZHVyYXNcIixcbiAgXCJIb25nIEtvbmdcIixcbiAgXCJIdW5nYXJ5XCIsXG4gIFwiSWNlbGFuZFwiLFxuICBcIkluZGlhXCIsXG4gIFwiSW5kb25lc2lhXCIsXG4gIFwiSXJhblwiLFxuICBcIklyYXFcIixcbiAgXCJJcmVsYW5kXCIsXG4gIFwiSXNsZSBvZiBNYW5cIixcbiAgXCJJc3JhZWxcIixcbiAgXCJJdGFseVwiLFxuICBcIkphbWFpY2FcIixcbiAgXCJKYXBhblwiLFxuICBcIkplcnNleVwiLFxuICBcIkpvcmRhblwiLFxuICBcIkthemFraHN0YW5cIixcbiAgXCJLZW55YVwiLFxuICBcIktpcmliYXRpXCIsXG4gIFwiRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiBLb3JlYVwiLFxuICBcIlJlcHVibGljIG9mIEtvcmVhXCIsXG4gIFwiS3V3YWl0XCIsXG4gIFwiS3lyZ3l6IFJlcHVibGljXCIsXG4gIFwiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWNcIixcbiAgXCJMYXR2aWFcIixcbiAgXCJMZWJhbm9uXCIsXG4gIFwiTGVzb3Rob1wiLFxuICBcIkxpYmVyaWFcIixcbiAgXCJMaWJ5YW4gQXJhYiBKYW1haGlyaXlhXCIsXG4gIFwiTGllY2h0ZW5zdGVpblwiLFxuICBcIkxpdGh1YW5pYVwiLFxuICBcIkx1eGVtYm91cmdcIixcbiAgXCJNYWNhb1wiLFxuICBcIk1hY2Vkb25pYVwiLFxuICBcIk1hZGFnYXNjYXJcIixcbiAgXCJNYWxhd2lcIixcbiAgXCJNYWxheXNpYVwiLFxuICBcIk1hbGRpdmVzXCIsXG4gIFwiTWFsaVwiLFxuICBcIk1hbHRhXCIsXG4gIFwiTWFyc2hhbGwgSXNsYW5kc1wiLFxuICBcIk1hcnRpbmlxdWVcIixcbiAgXCJNYXVyaXRhbmlhXCIsXG4gIFwiTWF1cml0aXVzXCIsXG4gIFwiTWF5b3R0ZVwiLFxuICBcIk1leGljb1wiLFxuICBcIk1pY3JvbmVzaWFcIixcbiAgXCJNb2xkb3ZhXCIsXG4gIFwiTW9uYWNvXCIsXG4gIFwiTW9uZ29saWFcIixcbiAgXCJNb250ZW5lZ3JvXCIsXG4gIFwiTW9udHNlcnJhdFwiLFxuICBcIk1vcm9jY29cIixcbiAgXCJNb3phbWJpcXVlXCIsXG4gIFwiTXlhbm1hclwiLFxuICBcIk5hbWliaWFcIixcbiAgXCJOYXVydVwiLFxuICBcIk5lcGFsXCIsXG4gIFwiTmV0aGVybGFuZHMgQW50aWxsZXNcIixcbiAgXCJOZXRoZXJsYW5kc1wiLFxuICBcIk5ldyBDYWxlZG9uaWFcIixcbiAgXCJOZXcgWmVhbGFuZFwiLFxuICBcIk5pY2FyYWd1YVwiLFxuICBcIk5pZ2VyXCIsXG4gIFwiTmlnZXJpYVwiLFxuICBcIk5pdWVcIixcbiAgXCJOb3Jmb2xrIElzbGFuZFwiLFxuICBcIk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kc1wiLFxuICBcIk5vcndheVwiLFxuICBcIk9tYW5cIixcbiAgXCJQYWtpc3RhblwiLFxuICBcIlBhbGF1XCIsXG4gIFwiUGFsZXN0aW5pYW4gVGVycml0b3J5XCIsXG4gIFwiUGFuYW1hXCIsXG4gIFwiUGFwdWEgTmV3IEd1aW5lYVwiLFxuICBcIlBhcmFndWF5XCIsXG4gIFwiUGVydVwiLFxuICBcIlBoaWxpcHBpbmVzXCIsXG4gIFwiUGl0Y2Fpcm4gSXNsYW5kc1wiLFxuICBcIlBvbGFuZFwiLFxuICBcIlBvcnR1Z2FsXCIsXG4gIFwiUHVlcnRvIFJpY29cIixcbiAgXCJRYXRhclwiLFxuICBcIlJldW5pb25cIixcbiAgXCJSb21hbmlhXCIsXG4gIFwiUnVzc2lhbiBGZWRlcmF0aW9uXCIsXG4gIFwiUndhbmRhXCIsXG4gIFwiU2FpbnQgQmFydGhlbGVteVwiLFxuICBcIlNhaW50IEhlbGVuYVwiLFxuICBcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1wiLFxuICBcIlNhaW50IEx1Y2lhXCIsXG4gIFwiU2FpbnQgTWFydGluXCIsXG4gIFwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblwiLFxuICBcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXCIsXG4gIFwiU2Ftb2FcIixcbiAgXCJTYW4gTWFyaW5vXCIsXG4gIFwiU2FvIFRvbWUgYW5kIFByaW5jaXBlXCIsXG4gIFwiU2F1ZGkgQXJhYmlhXCIsXG4gIFwiU2VuZWdhbFwiLFxuICBcIlNlcmJpYVwiLFxuICBcIlNleWNoZWxsZXNcIixcbiAgXCJTaWVycmEgTGVvbmVcIixcbiAgXCJTaW5nYXBvcmVcIixcbiAgXCJTbG92YWtpYSAoU2xvdmFrIFJlcHVibGljKVwiLFxuICBcIlNsb3ZlbmlhXCIsXG4gIFwiU29sb21vbiBJc2xhbmRzXCIsXG4gIFwiU29tYWxpYVwiLFxuICBcIlNvdXRoIEFmcmljYVwiLFxuICBcIlNvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzXCIsXG4gIFwiU3BhaW5cIixcbiAgXCJTcmkgTGFua2FcIixcbiAgXCJTdWRhblwiLFxuICBcIlN1cmluYW1lXCIsXG4gIFwiU3ZhbGJhcmQgJiBKYW4gTWF5ZW4gSXNsYW5kc1wiLFxuICBcIlN3YXppbGFuZFwiLFxuICBcIlN3ZWRlblwiLFxuICBcIlN3aXR6ZXJsYW5kXCIsXG4gIFwiU3lyaWFuIEFyYWIgUmVwdWJsaWNcIixcbiAgXCJUYWl3YW5cIixcbiAgXCJUYWppa2lzdGFuXCIsXG4gIFwiVGFuemFuaWFcIixcbiAgXCJUaGFpbGFuZFwiLFxuICBcIlRpbW9yLUxlc3RlXCIsXG4gIFwiVG9nb1wiLFxuICBcIlRva2VsYXVcIixcbiAgXCJUb25nYVwiLFxuICBcIlRyaW5pZGFkIGFuZCBUb2JhZ29cIixcbiAgXCJUdW5pc2lhXCIsXG4gIFwiVHVya2V5XCIsXG4gIFwiVHVya21lbmlzdGFuXCIsXG4gIFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXCIsXG4gIFwiVHV2YWx1XCIsXG4gIFwiVWdhbmRhXCIsXG4gIFwiVWtyYWluZVwiLFxuICBcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXCIsXG4gIFwiVW5pdGVkIEtpbmdkb21cIixcbiAgXCJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2FcIixcbiAgXCJVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcIixcbiAgXCJVcnVndWF5XCIsXG4gIFwiVXpiZWtpc3RhblwiLFxuICBcIlZhbnVhdHVcIixcbiAgXCJWZW5lenVlbGFcIixcbiAgXCJWaWV0bmFtXCIsXG4gIFwiVmlyZ2luIElzbGFuZHMsIEJyaXRpc2hcIixcbiAgXCJWaXJnaW4gSXNsYW5kcywgVS5TLlwiLFxuICBcIldhbGxpcyBhbmQgRnV0dW5hXCIsXG4gIFwiV2VzdGVybiBTYWhhcmFcIixcbiAgXCJZZW1lblwiLFxuICBcIlphbWJpYVwiLFxuICBcIlppbWJhYndlXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFEXCIsXG4gIFwiQUVcIixcbiAgXCJBRlwiLFxuICBcIkFHXCIsXG4gIFwiQUlcIixcbiAgXCJBTFwiLFxuICBcIkFNXCIsXG4gIFwiQU9cIixcbiAgXCJBUVwiLFxuICBcIkFSXCIsXG4gIFwiQVNcIixcbiAgXCJBVFwiLFxuICBcIkFVXCIsXG4gIFwiQVdcIixcbiAgXCJBWFwiLFxuICBcIkFaXCIsXG4gIFwiQkFcIixcbiAgXCJCQlwiLFxuICBcIkJEXCIsXG4gIFwiQkVcIixcbiAgXCJCRlwiLFxuICBcIkJHXCIsXG4gIFwiQkhcIixcbiAgXCJCSVwiLFxuICBcIkJKXCIsXG4gIFwiQkxcIixcbiAgXCJCTVwiLFxuICBcIkJOXCIsXG4gIFwiQk9cIixcbiAgXCJCUVwiLFxuICBcIkJRXCIsXG4gIFwiQlJcIixcbiAgXCJCU1wiLFxuICBcIkJUXCIsXG4gIFwiQlZcIixcbiAgXCJCV1wiLFxuICBcIkJZXCIsXG4gIFwiQlpcIixcbiAgXCJDQVwiLFxuICBcIkNDXCIsXG4gIFwiQ0RcIixcbiAgXCJDRlwiLFxuICBcIkNHXCIsXG4gIFwiQ0hcIixcbiAgXCJDSVwiLFxuICBcIkNLXCIsXG4gIFwiQ0xcIixcbiAgXCJDTVwiLFxuICBcIkNOXCIsXG4gIFwiQ09cIixcbiAgXCJDUlwiLFxuICBcIkNVXCIsXG4gIFwiQ1ZcIixcbiAgXCJDV1wiLFxuICBcIkNYXCIsXG4gIFwiQ1lcIixcbiAgXCJDWlwiLFxuICBcIkRFXCIsXG4gIFwiREpcIixcbiAgXCJES1wiLFxuICBcIkRNXCIsXG4gIFwiRE9cIixcbiAgXCJEWlwiLFxuICBcIkVDXCIsXG4gIFwiRUVcIixcbiAgXCJFR1wiLFxuICBcIkVIXCIsXG4gIFwiRVJcIixcbiAgXCJFU1wiLFxuICBcIkVUXCIsXG4gIFwiRklcIixcbiAgXCJGSlwiLFxuICBcIkZLXCIsXG4gIFwiRk1cIixcbiAgXCJGT1wiLFxuICBcIkZSXCIsXG4gIFwiR0FcIixcbiAgXCJHQlwiLFxuICBcIkdEXCIsXG4gIFwiR0VcIixcbiAgXCJHRlwiLFxuICBcIkdHXCIsXG4gIFwiR0hcIixcbiAgXCJHSVwiLFxuICBcIkdMXCIsXG4gIFwiR01cIixcbiAgXCJHTlwiLFxuICBcIkdQXCIsXG4gIFwiR1FcIixcbiAgXCJHUlwiLFxuICBcIkdTXCIsXG4gIFwiR1RcIixcbiAgXCJHVVwiLFxuICBcIkdXXCIsXG4gIFwiR1lcIixcbiAgXCJIS1wiLFxuICBcIkhNXCIsXG4gIFwiSE5cIixcbiAgXCJIUlwiLFxuICBcIkhUXCIsXG4gIFwiSFVcIixcbiAgXCJJRFwiLFxuICBcIklFXCIsXG4gIFwiSUxcIixcbiAgXCJJTVwiLFxuICBcIklOXCIsXG4gIFwiSU9cIixcbiAgXCJJUVwiLFxuICBcIklSXCIsXG4gIFwiSVNcIixcbiAgXCJJVFwiLFxuICBcIkpFXCIsXG4gIFwiSk1cIixcbiAgXCJKT1wiLFxuICBcIkpQXCIsXG4gIFwiS0VcIixcbiAgXCJLR1wiLFxuICBcIktIXCIsXG4gIFwiS0lcIixcbiAgXCJLTVwiLFxuICBcIktOXCIsXG4gIFwiS1BcIixcbiAgXCJLUlwiLFxuICBcIktXXCIsXG4gIFwiS1lcIixcbiAgXCJLWlwiLFxuICBcIkxBXCIsXG4gIFwiTEJcIixcbiAgXCJMQ1wiLFxuICBcIkxJXCIsXG4gIFwiTEtcIixcbiAgXCJMUlwiLFxuICBcIkxTXCIsXG4gIFwiTFRcIixcbiAgXCJMVVwiLFxuICBcIkxWXCIsXG4gIFwiTFlcIixcbiAgXCJNQVwiLFxuICBcIk1DXCIsXG4gIFwiTURcIixcbiAgXCJNRVwiLFxuICBcIk1GXCIsXG4gIFwiTUdcIixcbiAgXCJNSFwiLFxuICBcIk1LXCIsXG4gIFwiTUxcIixcbiAgXCJNTVwiLFxuICBcIk1OXCIsXG4gIFwiTU9cIixcbiAgXCJNUFwiLFxuICBcIk1RXCIsXG4gIFwiTVJcIixcbiAgXCJNU1wiLFxuICBcIk1UXCIsXG4gIFwiTVVcIixcbiAgXCJNVlwiLFxuICBcIk1XXCIsXG4gIFwiTVhcIixcbiAgXCJNWVwiLFxuICBcIk1aXCIsXG4gIFwiTkFcIixcbiAgXCJOQ1wiLFxuICBcIk5FXCIsXG4gIFwiTkZcIixcbiAgXCJOR1wiLFxuICBcIk5JXCIsXG4gIFwiTkxcIixcbiAgXCJOT1wiLFxuICBcIk5QXCIsXG4gIFwiTlJcIixcbiAgXCJOVVwiLFxuICBcIk5aXCIsXG4gIFwiT01cIixcbiAgXCJQQVwiLFxuICBcIlBFXCIsXG4gIFwiUEZcIixcbiAgXCJQR1wiLFxuICBcIlBIXCIsXG4gIFwiUEtcIixcbiAgXCJQTFwiLFxuICBcIlBNXCIsXG4gIFwiUE5cIixcbiAgXCJQUlwiLFxuICBcIlBTXCIsXG4gIFwiUFRcIixcbiAgXCJQV1wiLFxuICBcIlBZXCIsXG4gIFwiUUFcIixcbiAgXCJSRVwiLFxuICBcIlJPXCIsXG4gIFwiUlNcIixcbiAgXCJSVVwiLFxuICBcIlJXXCIsXG4gIFwiU0FcIixcbiAgXCJTQlwiLFxuICBcIlNDXCIsXG4gIFwiU0RcIixcbiAgXCJTRVwiLFxuICBcIlNHXCIsXG4gIFwiU0hcIixcbiAgXCJTSVwiLFxuICBcIlNKXCIsXG4gIFwiU0tcIixcbiAgXCJTTFwiLFxuICBcIlNNXCIsXG4gIFwiU05cIixcbiAgXCJTT1wiLFxuICBcIlNSXCIsXG4gIFwiU1NcIixcbiAgXCJTVFwiLFxuICBcIlNWXCIsXG4gIFwiU1hcIixcbiAgXCJTWVwiLFxuICBcIlNaXCIsXG4gIFwiVENcIixcbiAgXCJURFwiLFxuICBcIlRGXCIsXG4gIFwiVEdcIixcbiAgXCJUSFwiLFxuICBcIlRKXCIsXG4gIFwiVEtcIixcbiAgXCJUTFwiLFxuICBcIlRNXCIsXG4gIFwiVE5cIixcbiAgXCJUT1wiLFxuICBcIlRSXCIsXG4gIFwiVFRcIixcbiAgXCJUVlwiLFxuICBcIlRXXCIsXG4gIFwiVFpcIixcbiAgXCJVQVwiLFxuICBcIlVHXCIsXG4gIFwiVU1cIixcbiAgXCJVU1wiLFxuICBcIlVZXCIsXG4gIFwiVVpcIixcbiAgXCJWQVwiLFxuICBcIlZDXCIsXG4gIFwiVkVcIixcbiAgXCJWR1wiLFxuICBcIlZJXCIsXG4gIFwiVk5cIixcbiAgXCJWVVwiLFxuICBcIldGXCIsXG4gIFwiV1NcIixcbiAgXCJZRVwiLFxuICBcIllUXCIsXG4gIFwiWkFcIixcbiAgXCJaTVwiLFxuICBcIlpXXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkF2b25cIixcbiAgXCJCZWRmb3Jkc2hpcmVcIixcbiAgXCJCZXJrc2hpcmVcIixcbiAgXCJCb3JkZXJzXCIsXG4gIFwiQnVja2luZ2hhbXNoaXJlXCIsXG4gIFwiQ2FtYnJpZGdlc2hpcmVcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhXCJcbl07XG4iLCJ2YXIgYWRkcmVzcyA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBhZGRyZXNzO1xuYWRkcmVzcy5jaXR5X3ByZWZpeCA9IHJlcXVpcmUoXCIuL2NpdHlfcHJlZml4XCIpO1xuYWRkcmVzcy5jaXR5X3N1ZmZpeCA9IHJlcXVpcmUoXCIuL2NpdHlfc3VmZml4XCIpO1xuYWRkcmVzcy5jb3VudHkgPSByZXF1aXJlKFwiLi9jb3VudHlcIik7XG5hZGRyZXNzLmNvdW50cnkgPSByZXF1aXJlKFwiLi9jb3VudHJ5XCIpO1xuYWRkcmVzcy5jb3VudHJ5X2NvZGUgPSByZXF1aXJlKFwiLi9jb3VudHJ5X2NvZGVcIik7XG5hZGRyZXNzLmJ1aWxkaW5nX251bWJlciA9IHJlcXVpcmUoXCIuL2J1aWxkaW5nX251bWJlclwiKTtcbmFkZHJlc3Muc3RyZWV0X3N1ZmZpeCA9IHJlcXVpcmUoXCIuL3N0cmVldF9zdWZmaXhcIik7XG5hZGRyZXNzLnNlY29uZGFyeV9hZGRyZXNzID0gcmVxdWlyZShcIi4vc2Vjb25kYXJ5X2FkZHJlc3NcIik7XG5hZGRyZXNzLnBvc3Rjb2RlID0gcmVxdWlyZShcIi4vcG9zdGNvZGVcIik7XG5hZGRyZXNzLnBvc3Rjb2RlX2J5X3N0YXRlID0gcmVxdWlyZShcIi4vcG9zdGNvZGVfYnlfc3RhdGVcIik7XG5hZGRyZXNzLnN0YXRlID0gcmVxdWlyZShcIi4vc3RhdGVcIik7XG5hZGRyZXNzLnN0YXRlX2FiYnIgPSByZXF1aXJlKFwiLi9zdGF0ZV9hYmJyXCIpO1xuYWRkcmVzcy50aW1lX3pvbmUgPSByZXF1aXJlKFwiLi90aW1lX3pvbmVcIik7XG5hZGRyZXNzLmNpdHkgPSByZXF1aXJlKFwiLi9jaXR5XCIpO1xuYWRkcmVzcy5zdHJlZXRfbmFtZSA9IHJlcXVpcmUoXCIuL3N0cmVldF9uYW1lXCIpO1xuYWRkcmVzcy5zdHJlZXRfYWRkcmVzcyA9IHJlcXVpcmUoXCIuL3N0cmVldF9hZGRyZXNzXCIpO1xuYWRkcmVzcy5kZWZhdWx0X2NvdW50cnkgPSByZXF1aXJlKFwiLi9kZWZhdWx0X2NvdW50cnlcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiMjIyMjXCIsXG4gIFwiIyMjIyMtIyMjI1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBcHQuICMjI1wiLFxuICBcIlN1aXRlICMjI1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBbGFiYW1hXCIsXG4gIFwiQWxhc2thXCIsXG4gIFwiQXJpem9uYVwiLFxuICBcIkFya2Fuc2FzXCIsXG4gIFwiQ2FsaWZvcm5pYVwiLFxuICBcIkNvbG9yYWRvXCIsXG4gIFwiQ29ubmVjdGljdXRcIixcbiAgXCJEZWxhd2FyZVwiLFxuICBcIkZsb3JpZGFcIixcbiAgXCJHZW9yZ2lhXCIsXG4gIFwiSGF3YWlpXCIsXG4gIFwiSWRhaG9cIixcbiAgXCJJbGxpbm9pc1wiLFxuICBcIkluZGlhbmFcIixcbiAgXCJJb3dhXCIsXG4gIFwiS2Fuc2FzXCIsXG4gIFwiS2VudHVja3lcIixcbiAgXCJMb3Vpc2lhbmFcIixcbiAgXCJNYWluZVwiLFxuICBcIk1hcnlsYW5kXCIsXG4gIFwiTWFzc2FjaHVzZXR0c1wiLFxuICBcIk1pY2hpZ2FuXCIsXG4gIFwiTWlubmVzb3RhXCIsXG4gIFwiTWlzc2lzc2lwcGlcIixcbiAgXCJNaXNzb3VyaVwiLFxuICBcIk1vbnRhbmFcIixcbiAgXCJOZWJyYXNrYVwiLFxuICBcIk5ldmFkYVwiLFxuICBcIk5ldyBIYW1wc2hpcmVcIixcbiAgXCJOZXcgSmVyc2V5XCIsXG4gIFwiTmV3IE1leGljb1wiLFxuICBcIk5ldyBZb3JrXCIsXG4gIFwiTm9ydGggQ2Fyb2xpbmFcIixcbiAgXCJOb3J0aCBEYWtvdGFcIixcbiAgXCJPaGlvXCIsXG4gIFwiT2tsYWhvbWFcIixcbiAgXCJPcmVnb25cIixcbiAgXCJQZW5uc3lsdmFuaWFcIixcbiAgXCJSaG9kZSBJc2xhbmRcIixcbiAgXCJTb3V0aCBDYXJvbGluYVwiLFxuICBcIlNvdXRoIERha290YVwiLFxuICBcIlRlbm5lc3NlZVwiLFxuICBcIlRleGFzXCIsXG4gIFwiVXRhaFwiLFxuICBcIlZlcm1vbnRcIixcbiAgXCJWaXJnaW5pYVwiLFxuICBcIldhc2hpbmd0b25cIixcbiAgXCJXZXN0IFZpcmdpbmlhXCIsXG4gIFwiV2lzY29uc2luXCIsXG4gIFwiV3lvbWluZ1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBTFwiLFxuICBcIkFLXCIsXG4gIFwiQVpcIixcbiAgXCJBUlwiLFxuICBcIkNBXCIsXG4gIFwiQ09cIixcbiAgXCJDVFwiLFxuICBcIkRFXCIsXG4gIFwiRkxcIixcbiAgXCJHQVwiLFxuICBcIkhJXCIsXG4gIFwiSURcIixcbiAgXCJJTFwiLFxuICBcIklOXCIsXG4gIFwiSUFcIixcbiAgXCJLU1wiLFxuICBcIktZXCIsXG4gIFwiTEFcIixcbiAgXCJNRVwiLFxuICBcIk1EXCIsXG4gIFwiTUFcIixcbiAgXCJNSVwiLFxuICBcIk1OXCIsXG4gIFwiTVNcIixcbiAgXCJNT1wiLFxuICBcIk1UXCIsXG4gIFwiTkVcIixcbiAgXCJOVlwiLFxuICBcIk5IXCIsXG4gIFwiTkpcIixcbiAgXCJOTVwiLFxuICBcIk5ZXCIsXG4gIFwiTkNcIixcbiAgXCJORFwiLFxuICBcIk9IXCIsXG4gIFwiT0tcIixcbiAgXCJPUlwiLFxuICBcIlBBXCIsXG4gIFwiUklcIixcbiAgXCJTQ1wiLFxuICBcIlNEXCIsXG4gIFwiVE5cIixcbiAgXCJUWFwiLFxuICBcIlVUXCIsXG4gIFwiVlRcIixcbiAgXCJWQVwiLFxuICBcIldBXCIsXG4gIFwiV1ZcIixcbiAgXCJXSVwiLFxuICBcIldZXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiN7YnVpbGRpbmdfbnVtYmVyfSAje3N0cmVldF9uYW1lfVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIje05hbWUuZmlyc3RfbmFtZX0gI3tzdHJlZXRfc3VmZml4fVwiLFxuICBcIiN7TmFtZS5sYXN0X25hbWV9ICN7c3RyZWV0X3N1ZmZpeH1cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQWxsZXlcIixcbiAgXCJBdmVudWVcIixcbiAgXCJCcmFuY2hcIixcbiAgXCJCcmlkZ2VcIixcbiAgXCJCcm9va1wiLFxuICBcIkJyb29rc1wiLFxuICBcIkJ1cmdcIixcbiAgXCJCdXJnc1wiLFxuICBcIkJ5cGFzc1wiLFxuICBcIkNhbXBcIixcbiAgXCJDYW55b25cIixcbiAgXCJDYXBlXCIsXG4gIFwiQ2F1c2V3YXlcIixcbiAgXCJDZW50ZXJcIixcbiAgXCJDZW50ZXJzXCIsXG4gIFwiQ2lyY2xlXCIsXG4gIFwiQ2lyY2xlc1wiLFxuICBcIkNsaWZmXCIsXG4gIFwiQ2xpZmZzXCIsXG4gIFwiQ2x1YlwiLFxuICBcIkNvbW1vblwiLFxuICBcIkNvcm5lclwiLFxuICBcIkNvcm5lcnNcIixcbiAgXCJDb3Vyc2VcIixcbiAgXCJDb3VydFwiLFxuICBcIkNvdXJ0c1wiLFxuICBcIkNvdmVcIixcbiAgXCJDb3Zlc1wiLFxuICBcIkNyZWVrXCIsXG4gIFwiQ3Jlc2NlbnRcIixcbiAgXCJDcmVzdFwiLFxuICBcIkNyb3NzaW5nXCIsXG4gIFwiQ3Jvc3Nyb2FkXCIsXG4gIFwiQ3VydmVcIixcbiAgXCJEYWxlXCIsXG4gIFwiRGFtXCIsXG4gIFwiRGl2aWRlXCIsXG4gIFwiRHJpdmVcIixcbiAgXCJEcml2ZVwiLFxuICBcIkRyaXZlc1wiLFxuICBcIkVzdGF0ZVwiLFxuICBcIkVzdGF0ZXNcIixcbiAgXCJFeHByZXNzd2F5XCIsXG4gIFwiRXh0ZW5zaW9uXCIsXG4gIFwiRXh0ZW5zaW9uc1wiLFxuICBcIkZhbGxcIixcbiAgXCJGYWxsc1wiLFxuICBcIkZlcnJ5XCIsXG4gIFwiRmllbGRcIixcbiAgXCJGaWVsZHNcIixcbiAgXCJGbGF0XCIsXG4gIFwiRmxhdHNcIixcbiAgXCJGb3JkXCIsXG4gIFwiRm9yZHNcIixcbiAgXCJGb3Jlc3RcIixcbiAgXCJGb3JnZVwiLFxuICBcIkZvcmdlc1wiLFxuICBcIkZvcmtcIixcbiAgXCJGb3Jrc1wiLFxuICBcIkZvcnRcIixcbiAgXCJGcmVld2F5XCIsXG4gIFwiR2FyZGVuXCIsXG4gIFwiR2FyZGVuc1wiLFxuICBcIkdhdGV3YXlcIixcbiAgXCJHbGVuXCIsXG4gIFwiR2xlbnNcIixcbiAgXCJHcmVlblwiLFxuICBcIkdyZWVuc1wiLFxuICBcIkdyb3ZlXCIsXG4gIFwiR3JvdmVzXCIsXG4gIFwiSGFyYm9yXCIsXG4gIFwiSGFyYm9yc1wiLFxuICBcIkhhdmVuXCIsXG4gIFwiSGVpZ2h0c1wiLFxuICBcIkhpZ2h3YXlcIixcbiAgXCJIaWxsXCIsXG4gIFwiSGlsbHNcIixcbiAgXCJIb2xsb3dcIixcbiAgXCJJbmxldFwiLFxuICBcIklubGV0XCIsXG4gIFwiSXNsYW5kXCIsXG4gIFwiSXNsYW5kXCIsXG4gIFwiSXNsYW5kc1wiLFxuICBcIklzbGFuZHNcIixcbiAgXCJJc2xlXCIsXG4gIFwiSXNsZVwiLFxuICBcIkp1bmN0aW9uXCIsXG4gIFwiSnVuY3Rpb25zXCIsXG4gIFwiS2V5XCIsXG4gIFwiS2V5c1wiLFxuICBcIktub2xsXCIsXG4gIFwiS25vbGxzXCIsXG4gIFwiTGFrZVwiLFxuICBcIkxha2VzXCIsXG4gIFwiTGFuZFwiLFxuICBcIkxhbmRpbmdcIixcbiAgXCJMYW5lXCIsXG4gIFwiTGlnaHRcIixcbiAgXCJMaWdodHNcIixcbiAgXCJMb2FmXCIsXG4gIFwiTG9ja1wiLFxuICBcIkxvY2tzXCIsXG4gIFwiTG9ja3NcIixcbiAgXCJMb2RnZVwiLFxuICBcIkxvZGdlXCIsXG4gIFwiTG9vcFwiLFxuICBcIk1hbGxcIixcbiAgXCJNYW5vclwiLFxuICBcIk1hbm9yc1wiLFxuICBcIk1lYWRvd1wiLFxuICBcIk1lYWRvd3NcIixcbiAgXCJNZXdzXCIsXG4gIFwiTWlsbFwiLFxuICBcIk1pbGxzXCIsXG4gIFwiTWlzc2lvblwiLFxuICBcIk1pc3Npb25cIixcbiAgXCJNb3RvcndheVwiLFxuICBcIk1vdW50XCIsXG4gIFwiTW91bnRhaW5cIixcbiAgXCJNb3VudGFpblwiLFxuICBcIk1vdW50YWluc1wiLFxuICBcIk1vdW50YWluc1wiLFxuICBcIk5lY2tcIixcbiAgXCJPcmNoYXJkXCIsXG4gIFwiT3ZhbFwiLFxuICBcIk92ZXJwYXNzXCIsXG4gIFwiUGFya1wiLFxuICBcIlBhcmtzXCIsXG4gIFwiUGFya3dheVwiLFxuICBcIlBhcmt3YXlzXCIsXG4gIFwiUGFzc1wiLFxuICBcIlBhc3NhZ2VcIixcbiAgXCJQYXRoXCIsXG4gIFwiUGlrZVwiLFxuICBcIlBpbmVcIixcbiAgXCJQaW5lc1wiLFxuICBcIlBsYWNlXCIsXG4gIFwiUGxhaW5cIixcbiAgXCJQbGFpbnNcIixcbiAgXCJQbGFpbnNcIixcbiAgXCJQbGF6YVwiLFxuICBcIlBsYXphXCIsXG4gIFwiUG9pbnRcIixcbiAgXCJQb2ludHNcIixcbiAgXCJQb3J0XCIsXG4gIFwiUG9ydFwiLFxuICBcIlBvcnRzXCIsXG4gIFwiUG9ydHNcIixcbiAgXCJQcmFpcmllXCIsXG4gIFwiUHJhaXJpZVwiLFxuICBcIlJhZGlhbFwiLFxuICBcIlJhbXBcIixcbiAgXCJSYW5jaFwiLFxuICBcIlJhcGlkXCIsXG4gIFwiUmFwaWRzXCIsXG4gIFwiUmVzdFwiLFxuICBcIlJpZGdlXCIsXG4gIFwiUmlkZ2VzXCIsXG4gIFwiUml2ZXJcIixcbiAgXCJSb2FkXCIsXG4gIFwiUm9hZFwiLFxuICBcIlJvYWRzXCIsXG4gIFwiUm9hZHNcIixcbiAgXCJSb3V0ZVwiLFxuICBcIlJvd1wiLFxuICBcIlJ1ZVwiLFxuICBcIlJ1blwiLFxuICBcIlNob2FsXCIsXG4gIFwiU2hvYWxzXCIsXG4gIFwiU2hvcmVcIixcbiAgXCJTaG9yZXNcIixcbiAgXCJTa3l3YXlcIixcbiAgXCJTcHJpbmdcIixcbiAgXCJTcHJpbmdzXCIsXG4gIFwiU3ByaW5nc1wiLFxuICBcIlNwdXJcIixcbiAgXCJTcHVyc1wiLFxuICBcIlNxdWFyZVwiLFxuICBcIlNxdWFyZVwiLFxuICBcIlNxdWFyZXNcIixcbiAgXCJTcXVhcmVzXCIsXG4gIFwiU3RhdGlvblwiLFxuICBcIlN0YXRpb25cIixcbiAgXCJTdHJhdmVudWVcIixcbiAgXCJTdHJhdmVudWVcIixcbiAgXCJTdHJlYW1cIixcbiAgXCJTdHJlYW1cIixcbiAgXCJTdHJlZXRcIixcbiAgXCJTdHJlZXRcIixcbiAgXCJTdHJlZXRzXCIsXG4gIFwiU3VtbWl0XCIsXG4gIFwiU3VtbWl0XCIsXG4gIFwiVGVycmFjZVwiLFxuICBcIlRocm91Z2h3YXlcIixcbiAgXCJUcmFjZVwiLFxuICBcIlRyYWNrXCIsXG4gIFwiVHJhZmZpY3dheVwiLFxuICBcIlRyYWlsXCIsXG4gIFwiVHJhaWxcIixcbiAgXCJUdW5uZWxcIixcbiAgXCJUdW5uZWxcIixcbiAgXCJUdXJucGlrZVwiLFxuICBcIlR1cm5waWtlXCIsXG4gIFwiVW5kZXJwYXNzXCIsXG4gIFwiVW5pb25cIixcbiAgXCJVbmlvbnNcIixcbiAgXCJWYWxsZXlcIixcbiAgXCJWYWxsZXlzXCIsXG4gIFwiVmlhXCIsXG4gIFwiVmlhZHVjdFwiLFxuICBcIlZpZXdcIixcbiAgXCJWaWV3c1wiLFxuICBcIlZpbGxhZ2VcIixcbiAgXCJWaWxsYWdlXCIsXG4gIFwiVmlsbGFnZXNcIixcbiAgXCJWaWxsZVwiLFxuICBcIlZpc3RhXCIsXG4gIFwiVmlzdGFcIixcbiAgXCJXYWxrXCIsXG4gIFwiV2Fsa3NcIixcbiAgXCJXYWxsXCIsXG4gIFwiV2F5XCIsXG4gIFwiV2F5c1wiLFxuICBcIldlbGxcIixcbiAgXCJXZWxsc1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJQYWNpZmljL01pZHdheVwiLFxuICBcIlBhY2lmaWMvUGFnb19QYWdvXCIsXG4gIFwiUGFjaWZpYy9Ib25vbHVsdVwiLFxuICBcIkFtZXJpY2EvSnVuZWF1XCIsXG4gIFwiQW1lcmljYS9Mb3NfQW5nZWxlc1wiLFxuICBcIkFtZXJpY2EvVGlqdWFuYVwiLFxuICBcIkFtZXJpY2EvRGVudmVyXCIsXG4gIFwiQW1lcmljYS9QaG9lbml4XCIsXG4gIFwiQW1lcmljYS9DaGlodWFodWFcIixcbiAgXCJBbWVyaWNhL01hemF0bGFuXCIsXG4gIFwiQW1lcmljYS9DaGljYWdvXCIsXG4gIFwiQW1lcmljYS9SZWdpbmFcIixcbiAgXCJBbWVyaWNhL01leGljb19DaXR5XCIsXG4gIFwiQW1lcmljYS9NZXhpY29fQ2l0eVwiLFxuICBcIkFtZXJpY2EvTW9udGVycmV5XCIsXG4gIFwiQW1lcmljYS9HdWF0ZW1hbGFcIixcbiAgXCJBbWVyaWNhL05ld19Zb3JrXCIsXG4gIFwiQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpc1wiLFxuICBcIkFtZXJpY2EvQm9nb3RhXCIsXG4gIFwiQW1lcmljYS9MaW1hXCIsXG4gIFwiQW1lcmljYS9MaW1hXCIsXG4gIFwiQW1lcmljYS9IYWxpZmF4XCIsXG4gIFwiQW1lcmljYS9DYXJhY2FzXCIsXG4gIFwiQW1lcmljYS9MYV9QYXpcIixcbiAgXCJBbWVyaWNhL1NhbnRpYWdvXCIsXG4gIFwiQW1lcmljYS9TdF9Kb2huc1wiLFxuICBcIkFtZXJpY2EvU2FvX1BhdWxvXCIsXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvQnVlbm9zX0FpcmVzXCIsXG4gIFwiQW1lcmljYS9HdXlhbmFcIixcbiAgXCJBbWVyaWNhL0dvZHRoYWJcIixcbiAgXCJBdGxhbnRpYy9Tb3V0aF9HZW9yZ2lhXCIsXG4gIFwiQXRsYW50aWMvQXpvcmVzXCIsXG4gIFwiQXRsYW50aWMvQ2FwZV9WZXJkZVwiLFxuICBcIkV1cm9wZS9EdWJsaW5cIixcbiAgXCJFdXJvcGUvTG9uZG9uXCIsXG4gIFwiRXVyb3BlL0xpc2JvblwiLFxuICBcIkV1cm9wZS9Mb25kb25cIixcbiAgXCJBZnJpY2EvQ2FzYWJsYW5jYVwiLFxuICBcIkFmcmljYS9Nb25yb3ZpYVwiLFxuICBcIkV0Yy9VVENcIixcbiAgXCJFdXJvcGUvQmVsZ3JhZGVcIixcbiAgXCJFdXJvcGUvQnJhdGlzbGF2YVwiLFxuICBcIkV1cm9wZS9CdWRhcGVzdFwiLFxuICBcIkV1cm9wZS9ManVibGphbmFcIixcbiAgXCJFdXJvcGUvUHJhZ3VlXCIsXG4gIFwiRXVyb3BlL1NhcmFqZXZvXCIsXG4gIFwiRXVyb3BlL1Nrb3BqZVwiLFxuICBcIkV1cm9wZS9XYXJzYXdcIixcbiAgXCJFdXJvcGUvWmFncmViXCIsXG4gIFwiRXVyb3BlL0JydXNzZWxzXCIsXG4gIFwiRXVyb3BlL0NvcGVuaGFnZW5cIixcbiAgXCJFdXJvcGUvTWFkcmlkXCIsXG4gIFwiRXVyb3BlL1BhcmlzXCIsXG4gIFwiRXVyb3BlL0Ftc3RlcmRhbVwiLFxuICBcIkV1cm9wZS9CZXJsaW5cIixcbiAgXCJFdXJvcGUvQmVybGluXCIsXG4gIFwiRXVyb3BlL1JvbWVcIixcbiAgXCJFdXJvcGUvU3RvY2tob2xtXCIsXG4gIFwiRXVyb3BlL1ZpZW5uYVwiLFxuICBcIkFmcmljYS9BbGdpZXJzXCIsXG4gIFwiRXVyb3BlL0J1Y2hhcmVzdFwiLFxuICBcIkFmcmljYS9DYWlyb1wiLFxuICBcIkV1cm9wZS9IZWxzaW5raVwiLFxuICBcIkV1cm9wZS9LaWV2XCIsXG4gIFwiRXVyb3BlL1JpZ2FcIixcbiAgXCJFdXJvcGUvU29maWFcIixcbiAgXCJFdXJvcGUvVGFsbGlublwiLFxuICBcIkV1cm9wZS9WaWxuaXVzXCIsXG4gIFwiRXVyb3BlL0F0aGVuc1wiLFxuICBcIkV1cm9wZS9Jc3RhbmJ1bFwiLFxuICBcIkV1cm9wZS9NaW5za1wiLFxuICBcIkFzaWEvSmVydXNhbGVtXCIsXG4gIFwiQWZyaWNhL0hhcmFyZVwiLFxuICBcIkFmcmljYS9Kb2hhbm5lc2J1cmdcIixcbiAgXCJFdXJvcGUvTW9zY293XCIsXG4gIFwiRXVyb3BlL01vc2Nvd1wiLFxuICBcIkV1cm9wZS9Nb3Njb3dcIixcbiAgXCJBc2lhL0t1d2FpdFwiLFxuICBcIkFzaWEvUml5YWRoXCIsXG4gIFwiQWZyaWNhL05haXJvYmlcIixcbiAgXCJBc2lhL0JhZ2hkYWRcIixcbiAgXCJBc2lhL1RlaHJhblwiLFxuICBcIkFzaWEvTXVzY2F0XCIsXG4gIFwiQXNpYS9NdXNjYXRcIixcbiAgXCJBc2lhL0Jha3VcIixcbiAgXCJBc2lhL1RiaWxpc2lcIixcbiAgXCJBc2lhL1llcmV2YW5cIixcbiAgXCJBc2lhL0thYnVsXCIsXG4gIFwiQXNpYS9ZZWthdGVyaW5idXJnXCIsXG4gIFwiQXNpYS9LYXJhY2hpXCIsXG4gIFwiQXNpYS9LYXJhY2hpXCIsXG4gIFwiQXNpYS9UYXNoa2VudFwiLFxuICBcIkFzaWEvS29sa2F0YVwiLFxuICBcIkFzaWEvS29sa2F0YVwiLFxuICBcIkFzaWEvS29sa2F0YVwiLFxuICBcIkFzaWEvS29sa2F0YVwiLFxuICBcIkFzaWEvS2F0aG1hbmR1XCIsXG4gIFwiQXNpYS9EaGFrYVwiLFxuICBcIkFzaWEvRGhha2FcIixcbiAgXCJBc2lhL0NvbG9tYm9cIixcbiAgXCJBc2lhL0FsbWF0eVwiLFxuICBcIkFzaWEvTm92b3NpYmlyc2tcIixcbiAgXCJBc2lhL1Jhbmdvb25cIixcbiAgXCJBc2lhL0Jhbmdrb2tcIixcbiAgXCJBc2lhL0Jhbmdrb2tcIixcbiAgXCJBc2lhL0pha2FydGFcIixcbiAgXCJBc2lhL0tyYXNub3lhcnNrXCIsXG4gIFwiQXNpYS9TaGFuZ2hhaVwiLFxuICBcIkFzaWEvQ2hvbmdxaW5nXCIsXG4gIFwiQXNpYS9Ib25nX0tvbmdcIixcbiAgXCJBc2lhL1VydW1xaVwiLFxuICBcIkFzaWEvS3VhbGFfTHVtcHVyXCIsXG4gIFwiQXNpYS9TaW5nYXBvcmVcIixcbiAgXCJBc2lhL1RhaXBlaVwiLFxuICBcIkF1c3RyYWxpYS9QZXJ0aFwiLFxuICBcIkFzaWEvSXJrdXRza1wiLFxuICBcIkFzaWEvVWxhYW5iYWF0YXJcIixcbiAgXCJBc2lhL1Nlb3VsXCIsXG4gIFwiQXNpYS9Ub2t5b1wiLFxuICBcIkFzaWEvVG9reW9cIixcbiAgXCJBc2lhL1Rva3lvXCIsXG4gIFwiQXNpYS9ZYWt1dHNrXCIsXG4gIFwiQXVzdHJhbGlhL0RhcndpblwiLFxuICBcIkF1c3RyYWxpYS9BZGVsYWlkZVwiLFxuICBcIkF1c3RyYWxpYS9NZWxib3VybmVcIixcbiAgXCJBdXN0cmFsaWEvTWVsYm91cm5lXCIsXG4gIFwiQXVzdHJhbGlhL1N5ZG5leVwiLFxuICBcIkF1c3RyYWxpYS9CcmlzYmFuZVwiLFxuICBcIkF1c3RyYWxpYS9Ib2JhcnRcIixcbiAgXCJBc2lhL1ZsYWRpdm9zdG9rXCIsXG4gIFwiUGFjaWZpYy9HdWFtXCIsXG4gIFwiUGFjaWZpYy9Qb3J0X01vcmVzYnlcIixcbiAgXCJBc2lhL01hZ2FkYW5cIixcbiAgXCJBc2lhL01hZ2FkYW5cIixcbiAgXCJQYWNpZmljL05vdW1lYVwiLFxuICBcIlBhY2lmaWMvRmlqaVwiLFxuICBcIkFzaWEvS2FtY2hhdGthXCIsXG4gIFwiUGFjaWZpYy9NYWp1cm9cIixcbiAgXCJQYWNpZmljL0F1Y2tsYW5kXCIsXG4gIFwiUGFjaWZpYy9BdWNrbGFuZFwiLFxuICBcIlBhY2lmaWMvVG9uZ2F0YXB1XCIsXG4gIFwiUGFjaWZpYy9GYWthb2ZvXCIsXG4gIFwiUGFjaWZpYy9BcGlhXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiN7TmFtZS5uYW1lfVwiLFxuICBcIiN7Q29tcGFueS5uYW1lfVwiXG5dO1xuIiwidmFyIGFwcCA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBhcHA7XG5hcHAubmFtZSA9IHJlcXVpcmUoXCIuL25hbWVcIik7XG5hcHAudmVyc2lvbiA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5hcHAuYXV0aG9yID0gcmVxdWlyZShcIi4vYXV0aG9yXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJSZWRob2xkXCIsXG4gIFwiVHJlZWZsZXhcIixcbiAgXCJUcmlwcGxlZGV4XCIsXG4gIFwiS2FubGFtXCIsXG4gIFwiQmlndGF4XCIsXG4gIFwiRGFsdGZyZXNoXCIsXG4gIFwiVG91Z2hqb3lmYXhcIixcbiAgXCJNYXQgTGFtIFRhbVwiLFxuICBcIk90Y29tXCIsXG4gIFwiVHJlcy1aYXBcIixcbiAgXCJZLVNvbG93YXJtXCIsXG4gIFwiVHJlc29tXCIsXG4gIFwiVm9sdHNpbGxhbVwiLFxuICBcIkJpb2RleFwiLFxuICBcIkdyZWVubGFtXCIsXG4gIFwiVml2YVwiLFxuICBcIk1hdHNvZnRcIixcbiAgXCJUZW1wXCIsXG4gIFwiWm9vbGFiXCIsXG4gIFwiU3ViaW5cIixcbiAgXCJSYW5rXCIsXG4gIFwiSm9iXCIsXG4gIFwiU3RyaW5ndG91Z2hcIixcbiAgXCJUaW5cIixcbiAgXCJJdFwiLFxuICBcIkhvbWUgSW5nXCIsXG4gIFwiWmFtaXRcIixcbiAgXCJTb25zaW5nXCIsXG4gIFwiS29ua2xhYlwiLFxuICBcIkFscGhhXCIsXG4gIFwiTGF0bHV4XCIsXG4gIFwiVm95YXRvdWNoXCIsXG4gIFwiQWxwaGF6YXBcIixcbiAgXCJIb2xkbGFtaXNcIixcbiAgXCJaYWFtLURveFwiLFxuICBcIlN1Yi1FeFwiLFxuICBcIlF1byBMdXhcIixcbiAgXCJCYW1pdHlcIixcbiAgXCJWZW50b3NhbnphcFwiLFxuICBcIkxvdHN0cmluZ1wiLFxuICBcIkhhdGl0eVwiLFxuICBcIlRlbXBzb2Z0XCIsXG4gIFwiT3ZlcmhvbGRcIixcbiAgXCJGaXhmbGV4XCIsXG4gIFwiS29ua2x1eFwiLFxuICBcIlpvbnRyYXhcIixcbiAgXCJUYW1wZmxleFwiLFxuICBcIlNwYW5cIixcbiAgXCJOYW1maXhcIixcbiAgXCJUcmFuc2NvZlwiLFxuICBcIlN0aW1cIixcbiAgXCJGaXggU2FuXCIsXG4gIFwiU29uYWlyXCIsXG4gIFwiU3Ryb25naG9sZFwiLFxuICBcIkZpbnRvbmVcIixcbiAgXCJZLWZpbmRcIixcbiAgXCJPcGVsYVwiLFxuICBcIkxvdGx1eFwiLFxuICBcIlJvbnN0cmluZ1wiLFxuICBcIlphdGhpblwiLFxuICBcIkR1b2JhbVwiLFxuICBcIktleWxleFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIwLiMuI1wiLFxuICBcIjAuIyNcIixcbiAgXCIjLiMjXCIsXG4gIFwiIy4jXCIsXG4gIFwiIy4jLiNcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiMjAxMS0xMC0xMlwiLFxuICBcIjIwMTItMTEtMTJcIixcbiAgXCIyMDE1LTExLTExXCIsXG4gIFwiMjAxMy05LTEyXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIjEyMzQtMjEyMS0xMjIxLTEyMTFcIixcbiAgXCIxMjEyLTEyMjEtMTEyMS0xMjM0XCIsXG4gIFwiMTIxMS0xMjIxLTEyMzQtMjIwMVwiLFxuICBcIjEyMjgtMTIyMS0xMjIxLTE0MzFcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwidmlzYVwiLFxuICBcIm1hc3RlcmNhcmRcIixcbiAgXCJhbWVyaWNhbmV4cHJlc3NcIixcbiAgXCJkaXNjb3ZlclwiXG5dO1xuIiwidmFyIGJ1c2luZXNzID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGJ1c2luZXNzO1xuYnVzaW5lc3MuY3JlZGl0X2NhcmRfbnVtYmVycyA9IHJlcXVpcmUoXCIuL2NyZWRpdF9jYXJkX251bWJlcnNcIik7XG5idXNpbmVzcy5jcmVkaXRfY2FyZF9leHBpcnlfZGF0ZXMgPSByZXF1aXJlKFwiLi9jcmVkaXRfY2FyZF9leHBpcnlfZGF0ZXNcIik7XG5idXNpbmVzcy5jcmVkaXRfY2FyZF90eXBlcyA9IHJlcXVpcmUoXCIuL2NyZWRpdF9jYXJkX3R5cGVzXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIjIyMtIyMjLSMjIyNcIixcbiAgXCIoIyMjKSAjIyMtIyMjI1wiLFxuICBcIjEtIyMjLSMjIy0jIyMjXCIsXG4gIFwiIyMjLiMjIy4jIyMjXCJcbl07XG4iLCJ2YXIgY2VsbF9waG9uZSA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBjZWxsX3Bob25lO1xuY2VsbF9waG9uZS5mb3JtYXRzID0gcmVxdWlyZShcIi4vZm9ybWF0c1wiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwicmVkXCIsXG4gIFwiZ3JlZW5cIixcbiAgXCJibHVlXCIsXG4gIFwieWVsbG93XCIsXG4gIFwicHVycGxlXCIsXG4gIFwibWludCBncmVlblwiLFxuICBcInRlYWxcIixcbiAgXCJ3aGl0ZVwiLFxuICBcImJsYWNrXCIsXG4gIFwib3JhbmdlXCIsXG4gIFwicGlua1wiLFxuICBcImdyZXlcIixcbiAgXCJtYXJvb25cIixcbiAgXCJ2aW9sZXRcIixcbiAgXCJ0dXJxdW9pc2VcIixcbiAgXCJ0YW5cIixcbiAgXCJza3kgYmx1ZVwiLFxuICBcInNhbG1vblwiLFxuICBcInBsdW1cIixcbiAgXCJvcmNoaWRcIixcbiAgXCJvbGl2ZVwiLFxuICBcIm1hZ2VudGFcIixcbiAgXCJsaW1lXCIsXG4gIFwiaXZvcnlcIixcbiAgXCJpbmRpZ29cIixcbiAgXCJnb2xkXCIsXG4gIFwiZnVjaHNpYVwiLFxuICBcImN5YW5cIixcbiAgXCJhenVyZVwiLFxuICBcImxhdmVuZGVyXCIsXG4gIFwic2lsdmVyXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkJvb2tzXCIsXG4gIFwiTW92aWVzXCIsXG4gIFwiTXVzaWNcIixcbiAgXCJHYW1lc1wiLFxuICBcIkVsZWN0cm9uaWNzXCIsXG4gIFwiQ29tcHV0ZXJzXCIsXG4gIFwiSG9tZVwiLFxuICBcIkdhcmRlblwiLFxuICBcIlRvb2xzXCIsXG4gIFwiR3JvY2VyeVwiLFxuICBcIkhlYWx0aFwiLFxuICBcIkJlYXV0eVwiLFxuICBcIlRveXNcIixcbiAgXCJLaWRzXCIsXG4gIFwiQmFieVwiLFxuICBcIkNsb3RoaW5nXCIsXG4gIFwiU2hvZXNcIixcbiAgXCJKZXdlbGVyeVwiLFxuICBcIlNwb3J0c1wiLFxuICBcIk91dGRvb3JzXCIsXG4gIFwiQXV0b21vdGl2ZVwiLFxuICBcIkluZHVzdHJpYWxcIlxuXTtcbiIsInZhciBjb21tZXJjZSA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBjb21tZXJjZTtcbmNvbW1lcmNlLmNvbG9yID0gcmVxdWlyZShcIi4vY29sb3JcIik7XG5jb21tZXJjZS5kZXBhcnRtZW50ID0gcmVxdWlyZShcIi4vZGVwYXJ0bWVudFwiKTtcbmNvbW1lcmNlLnByb2R1Y3RfbmFtZSA9IHJlcXVpcmUoXCIuL3Byb2R1Y3RfbmFtZVwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSB7XG4gIFwiYWRqZWN0aXZlXCI6IFtcbiAgICBcIlNtYWxsXCIsXG4gICAgXCJFcmdvbm9taWNcIixcbiAgICBcIlJ1c3RpY1wiLFxuICAgIFwiSW50ZWxsaWdlbnRcIixcbiAgICBcIkdvcmdlb3VzXCIsXG4gICAgXCJJbmNyZWRpYmxlXCIsXG4gICAgXCJGYW50YXN0aWNcIixcbiAgICBcIlByYWN0aWNhbFwiLFxuICAgIFwiU2xlZWtcIixcbiAgICBcIkF3ZXNvbWVcIixcbiAgICBcIkdlbmVyaWNcIixcbiAgICBcIkhhbmRjcmFmdGVkXCIsXG4gICAgXCJIYW5kbWFkZVwiLFxuICAgIFwiTGljZW5zZWRcIixcbiAgICBcIlJlZmluZWRcIixcbiAgICBcIlVuYnJhbmRlZFwiLFxuICAgIFwiVGFzdHlcIlxuICBdLFxuICBcIm1hdGVyaWFsXCI6IFtcbiAgICBcIlN0ZWVsXCIsXG4gICAgXCJXb29kZW5cIixcbiAgICBcIkNvbmNyZXRlXCIsXG4gICAgXCJQbGFzdGljXCIsXG4gICAgXCJDb3R0b25cIixcbiAgICBcIkdyYW5pdGVcIixcbiAgICBcIlJ1YmJlclwiLFxuICAgIFwiTWV0YWxcIixcbiAgICBcIlNvZnRcIixcbiAgICBcIkZyZXNoXCIsXG4gICAgXCJGcm96ZW5cIlxuICBdLFxuICBcInByb2R1Y3RcIjogW1xuICAgIFwiQ2hhaXJcIixcbiAgICBcIkNhclwiLFxuICAgIFwiQ29tcHV0ZXJcIixcbiAgICBcIktleWJvYXJkXCIsXG4gICAgXCJNb3VzZVwiLFxuICAgIFwiQmlrZVwiLFxuICAgIFwiQmFsbFwiLFxuICAgIFwiR2xvdmVzXCIsXG4gICAgXCJQYW50c1wiLFxuICAgIFwiU2hpcnRcIixcbiAgICBcIlRhYmxlXCIsXG4gICAgXCJTaG9lc1wiLFxuICAgIFwiSGF0XCIsXG4gICAgXCJUb3dlbHNcIixcbiAgICBcIlNvYXBcIixcbiAgICBcIlR1bmFcIixcbiAgICBcIkNoaWNrZW5cIixcbiAgICBcIkZpc2hcIixcbiAgICBcIkNoZWVzZVwiLFxuICAgIFwiQmFjb25cIixcbiAgICBcIlBpenphXCIsXG4gICAgXCJTYWxhZFwiLFxuICAgIFwiU2F1c2FnZXNcIixcbiAgICBcIkNoaXBzXCJcbiAgXVxufTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQWRhcHRpdmVcIixcbiAgXCJBZHZhbmNlZFwiLFxuICBcIkFtZWxpb3JhdGVkXCIsXG4gIFwiQXNzaW1pbGF0ZWRcIixcbiAgXCJBdXRvbWF0ZWRcIixcbiAgXCJCYWxhbmNlZFwiLFxuICBcIkJ1c2luZXNzLWZvY3VzZWRcIixcbiAgXCJDZW50cmFsaXplZFwiLFxuICBcIkNsb25lZFwiLFxuICBcIkNvbXBhdGlibGVcIixcbiAgXCJDb25maWd1cmFibGVcIixcbiAgXCJDcm9zcy1ncm91cFwiLFxuICBcIkNyb3NzLXBsYXRmb3JtXCIsXG4gIFwiQ3VzdG9tZXItZm9jdXNlZFwiLFxuICBcIkN1c3RvbWl6YWJsZVwiLFxuICBcIkRlY2VudHJhbGl6ZWRcIixcbiAgXCJEZS1lbmdpbmVlcmVkXCIsXG4gIFwiRGV2b2x2ZWRcIixcbiAgXCJEaWdpdGl6ZWRcIixcbiAgXCJEaXN0cmlidXRlZFwiLFxuICBcIkRpdmVyc2VcIixcbiAgXCJEb3duLXNpemVkXCIsXG4gIFwiRW5oYW5jZWRcIixcbiAgXCJFbnRlcnByaXNlLXdpZGVcIixcbiAgXCJFcmdvbm9taWNcIixcbiAgXCJFeGNsdXNpdmVcIixcbiAgXCJFeHBhbmRlZFwiLFxuICBcIkV4dGVuZGVkXCIsXG4gIFwiRmFjZSB0byBmYWNlXCIsXG4gIFwiRm9jdXNlZFwiLFxuICBcIkZyb250LWxpbmVcIixcbiAgXCJGdWxseS1jb25maWd1cmFibGVcIixcbiAgXCJGdW5jdGlvbi1iYXNlZFwiLFxuICBcIkZ1bmRhbWVudGFsXCIsXG4gIFwiRnV0dXJlLXByb29mZWRcIixcbiAgXCJHcmFzcy1yb290c1wiLFxuICBcIkhvcml6b250YWxcIixcbiAgXCJJbXBsZW1lbnRlZFwiLFxuICBcIklubm92YXRpdmVcIixcbiAgXCJJbnRlZ3JhdGVkXCIsXG4gIFwiSW50dWl0aXZlXCIsXG4gIFwiSW52ZXJzZVwiLFxuICBcIk1hbmFnZWRcIixcbiAgXCJNYW5kYXRvcnlcIixcbiAgXCJNb25pdG9yZWRcIixcbiAgXCJNdWx0aS1jaGFubmVsbGVkXCIsXG4gIFwiTXVsdGktbGF0ZXJhbFwiLFxuICBcIk11bHRpLWxheWVyZWRcIixcbiAgXCJNdWx0aS10aWVyZWRcIixcbiAgXCJOZXR3b3JrZWRcIixcbiAgXCJPYmplY3QtYmFzZWRcIixcbiAgXCJPcGVuLWFyY2hpdGVjdGVkXCIsXG4gIFwiT3Blbi1zb3VyY2VcIixcbiAgXCJPcGVyYXRpdmVcIixcbiAgXCJPcHRpbWl6ZWRcIixcbiAgXCJPcHRpb25hbFwiLFxuICBcIk9yZ2FuaWNcIixcbiAgXCJPcmdhbml6ZWRcIixcbiAgXCJQZXJzZXZlcmluZ1wiLFxuICBcIlBlcnNpc3RlbnRcIixcbiAgXCJQaGFzZWRcIixcbiAgXCJQb2xhcmlzZWRcIixcbiAgXCJQcmUtZW1wdGl2ZVwiLFxuICBcIlByb2FjdGl2ZVwiLFxuICBcIlByb2ZpdC1mb2N1c2VkXCIsXG4gIFwiUHJvZm91bmRcIixcbiAgXCJQcm9ncmFtbWFibGVcIixcbiAgXCJQcm9ncmVzc2l2ZVwiLFxuICBcIlB1YmxpYy1rZXlcIixcbiAgXCJRdWFsaXR5LWZvY3VzZWRcIixcbiAgXCJSZWFjdGl2ZVwiLFxuICBcIlJlYWxpZ25lZFwiLFxuICBcIlJlLWNvbnRleHR1YWxpemVkXCIsXG4gIFwiUmUtZW5naW5lZXJlZFwiLFxuICBcIlJlZHVjZWRcIixcbiAgXCJSZXZlcnNlLWVuZ2luZWVyZWRcIixcbiAgXCJSaWdodC1zaXplZFwiLFxuICBcIlJvYnVzdFwiLFxuICBcIlNlYW1sZXNzXCIsXG4gIFwiU2VjdXJlZFwiLFxuICBcIlNlbGYtZW5hYmxpbmdcIixcbiAgXCJTaGFyYWJsZVwiLFxuICBcIlN0YW5kLWFsb25lXCIsXG4gIFwiU3RyZWFtbGluZWRcIixcbiAgXCJTd2l0Y2hhYmxlXCIsXG4gIFwiU3luY2hyb25pc2VkXCIsXG4gIFwiU3luZXJnaXN0aWNcIixcbiAgXCJTeW5lcmdpemVkXCIsXG4gIFwiVGVhbS1vcmllbnRlZFwiLFxuICBcIlRvdGFsXCIsXG4gIFwiVHJpcGxlLWJ1ZmZlcmVkXCIsXG4gIFwiVW5pdmVyc2FsXCIsXG4gIFwiVXAtc2l6ZWRcIixcbiAgXCJVcGdyYWRhYmxlXCIsXG4gIFwiVXNlci1jZW50cmljXCIsXG4gIFwiVXNlci1mcmllbmRseVwiLFxuICBcIlZlcnNhdGlsZVwiLFxuICBcIlZpcnR1YWxcIixcbiAgXCJWaXNpb25hcnlcIixcbiAgXCJWaXNpb24tb3JpZW50ZWRcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiY2xpY2tzLWFuZC1tb3J0YXJcIixcbiAgXCJ2YWx1ZS1hZGRlZFwiLFxuICBcInZlcnRpY2FsXCIsXG4gIFwicHJvYWN0aXZlXCIsXG4gIFwicm9idXN0XCIsXG4gIFwicmV2b2x1dGlvbmFyeVwiLFxuICBcInNjYWxhYmxlXCIsXG4gIFwibGVhZGluZy1lZGdlXCIsXG4gIFwiaW5ub3ZhdGl2ZVwiLFxuICBcImludHVpdGl2ZVwiLFxuICBcInN0cmF0ZWdpY1wiLFxuICBcImUtYnVzaW5lc3NcIixcbiAgXCJtaXNzaW9uLWNyaXRpY2FsXCIsXG4gIFwic3RpY2t5XCIsXG4gIFwib25lLXRvLW9uZVwiLFxuICBcIjI0LzdcIixcbiAgXCJlbmQtdG8tZW5kXCIsXG4gIFwiZ2xvYmFsXCIsXG4gIFwiQjJCXCIsXG4gIFwiQjJDXCIsXG4gIFwiZ3JhbnVsYXJcIixcbiAgXCJmcmljdGlvbmxlc3NcIixcbiAgXCJ2aXJ0dWFsXCIsXG4gIFwidmlyYWxcIixcbiAgXCJkeW5hbWljXCIsXG4gIFwiMjQvMzY1XCIsXG4gIFwiYmVzdC1vZi1icmVlZFwiLFxuICBcImtpbGxlclwiLFxuICBcIm1hZ25ldGljXCIsXG4gIFwiYmxlZWRpbmctZWRnZVwiLFxuICBcIndlYi1lbmFibGVkXCIsXG4gIFwiaW50ZXJhY3RpdmVcIixcbiAgXCJkb3QtY29tXCIsXG4gIFwic2V4eVwiLFxuICBcImJhY2stZW5kXCIsXG4gIFwicmVhbC10aW1lXCIsXG4gIFwiZWZmaWNpZW50XCIsXG4gIFwiZnJvbnQtZW5kXCIsXG4gIFwiZGlzdHJpYnV0ZWRcIixcbiAgXCJzZWFtbGVzc1wiLFxuICBcImV4dGVuc2libGVcIixcbiAgXCJ0dXJuLWtleVwiLFxuICBcIndvcmxkLWNsYXNzXCIsXG4gIFwib3Blbi1zb3VyY2VcIixcbiAgXCJjcm9zcy1wbGF0Zm9ybVwiLFxuICBcImNyb3NzLW1lZGlhXCIsXG4gIFwic3luZXJnaXN0aWNcIixcbiAgXCJicmlja3MtYW5kLWNsaWNrc1wiLFxuICBcIm91dC1vZi10aGUtYm94XCIsXG4gIFwiZW50ZXJwcmlzZVwiLFxuICBcImludGVncmF0ZWRcIixcbiAgXCJpbXBhY3RmdWxcIixcbiAgXCJ3aXJlbGVzc1wiLFxuICBcInRyYW5zcGFyZW50XCIsXG4gIFwibmV4dC1nZW5lcmF0aW9uXCIsXG4gIFwiY3V0dGluZy1lZGdlXCIsXG4gIFwidXNlci1jZW50cmljXCIsXG4gIFwidmlzaW9uYXJ5XCIsXG4gIFwiY3VzdG9taXplZFwiLFxuICBcInViaXF1aXRvdXNcIixcbiAgXCJwbHVnLWFuZC1wbGF5XCIsXG4gIFwiY29sbGFib3JhdGl2ZVwiLFxuICBcImNvbXBlbGxpbmdcIixcbiAgXCJob2xpc3RpY1wiLFxuICBcInJpY2hcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwic3luZXJnaWVzXCIsXG4gIFwid2ViLXJlYWRpbmVzc1wiLFxuICBcInBhcmFkaWdtc1wiLFxuICBcIm1hcmtldHNcIixcbiAgXCJwYXJ0bmVyc2hpcHNcIixcbiAgXCJpbmZyYXN0cnVjdHVyZXNcIixcbiAgXCJwbGF0Zm9ybXNcIixcbiAgXCJpbml0aWF0aXZlc1wiLFxuICBcImNoYW5uZWxzXCIsXG4gIFwiZXllYmFsbHNcIixcbiAgXCJjb21tdW5pdGllc1wiLFxuICBcIlJPSVwiLFxuICBcInNvbHV0aW9uc1wiLFxuICBcImUtdGFpbGVyc1wiLFxuICBcImUtc2VydmljZXNcIixcbiAgXCJhY3Rpb24taXRlbXNcIixcbiAgXCJwb3J0YWxzXCIsXG4gIFwibmljaGVzXCIsXG4gIFwidGVjaG5vbG9naWVzXCIsXG4gIFwiY29udGVudFwiLFxuICBcInZvcnRhbHNcIixcbiAgXCJzdXBwbHktY2hhaW5zXCIsXG4gIFwiY29udmVyZ2VuY2VcIixcbiAgXCJyZWxhdGlvbnNoaXBzXCIsXG4gIFwiYXJjaGl0ZWN0dXJlc1wiLFxuICBcImludGVyZmFjZXNcIixcbiAgXCJlLW1hcmtldHNcIixcbiAgXCJlLWNvbW1lcmNlXCIsXG4gIFwic3lzdGVtc1wiLFxuICBcImJhbmR3aWR0aFwiLFxuICBcImluZm9tZWRpYXJpZXNcIixcbiAgXCJtb2RlbHNcIixcbiAgXCJtaW5kc2hhcmVcIixcbiAgXCJkZWxpdmVyYWJsZXNcIixcbiAgXCJ1c2Vyc1wiLFxuICBcInNjaGVtYXNcIixcbiAgXCJuZXR3b3Jrc1wiLFxuICBcImFwcGxpY2F0aW9uc1wiLFxuICBcIm1ldHJpY3NcIixcbiAgXCJlLWJ1c2luZXNzXCIsXG4gIFwiZnVuY3Rpb25hbGl0aWVzXCIsXG4gIFwiZXhwZXJpZW5jZXNcIixcbiAgXCJ3ZWIgc2VydmljZXNcIixcbiAgXCJtZXRob2RvbG9naWVzXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImltcGxlbWVudFwiLFxuICBcInV0aWxpemVcIixcbiAgXCJpbnRlZ3JhdGVcIixcbiAgXCJzdHJlYW1saW5lXCIsXG4gIFwib3B0aW1pemVcIixcbiAgXCJldm9sdmVcIixcbiAgXCJ0cmFuc2Zvcm1cIixcbiAgXCJlbWJyYWNlXCIsXG4gIFwiZW5hYmxlXCIsXG4gIFwib3JjaGVzdHJhdGVcIixcbiAgXCJsZXZlcmFnZVwiLFxuICBcInJlaW52ZW50XCIsXG4gIFwiYWdncmVnYXRlXCIsXG4gIFwiYXJjaGl0ZWN0XCIsXG4gIFwiZW5oYW5jZVwiLFxuICBcImluY2VudGl2aXplXCIsXG4gIFwibW9ycGhcIixcbiAgXCJlbXBvd2VyXCIsXG4gIFwiZW52aXNpb25lZXJcIixcbiAgXCJtb25ldGl6ZVwiLFxuICBcImhhcm5lc3NcIixcbiAgXCJmYWNpbGl0YXRlXCIsXG4gIFwic2VpemVcIixcbiAgXCJkaXNpbnRlcm1lZGlhdGVcIixcbiAgXCJzeW5lcmdpemVcIixcbiAgXCJzdHJhdGVnaXplXCIsXG4gIFwiZGVwbG95XCIsXG4gIFwiYnJhbmRcIixcbiAgXCJncm93XCIsXG4gIFwidGFyZ2V0XCIsXG4gIFwic3luZGljYXRlXCIsXG4gIFwic3ludGhlc2l6ZVwiLFxuICBcImRlbGl2ZXJcIixcbiAgXCJtZXNoXCIsXG4gIFwiaW5jdWJhdGVcIixcbiAgXCJlbmdhZ2VcIixcbiAgXCJtYXhpbWl6ZVwiLFxuICBcImJlbmNobWFya1wiLFxuICBcImV4cGVkaXRlXCIsXG4gIFwicmVpbnRlcm1lZGlhdGVcIixcbiAgXCJ3aGl0ZWJvYXJkXCIsXG4gIFwidmlzdWFsaXplXCIsXG4gIFwicmVwdXJwb3NlXCIsXG4gIFwiaW5ub3ZhdGVcIixcbiAgXCJzY2FsZVwiLFxuICBcInVubGVhc2hcIixcbiAgXCJkcml2ZVwiLFxuICBcImV4dGVuZFwiLFxuICBcImVuZ2luZWVyXCIsXG4gIFwicmV2b2x1dGlvbml6ZVwiLFxuICBcImdlbmVyYXRlXCIsXG4gIFwiZXhwbG9pdFwiLFxuICBcInRyYW5zaXRpb25cIixcbiAgXCJlLWVuYWJsZVwiLFxuICBcIml0ZXJhdGVcIixcbiAgXCJjdWx0aXZhdGVcIixcbiAgXCJtYXRyaXhcIixcbiAgXCJwcm9kdWN0aXplXCIsXG4gIFwicmVkZWZpbmVcIixcbiAgXCJyZWNvbnRleHR1YWxpemVcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiMjQgaG91clwiLFxuICBcIjI0LzdcIixcbiAgXCIzcmQgZ2VuZXJhdGlvblwiLFxuICBcIjR0aCBnZW5lcmF0aW9uXCIsXG4gIFwiNXRoIGdlbmVyYXRpb25cIixcbiAgXCI2dGggZ2VuZXJhdGlvblwiLFxuICBcImFjdHVhdGluZ1wiLFxuICBcImFuYWx5emluZ1wiLFxuICBcImFzeW1tZXRyaWNcIixcbiAgXCJhc3luY2hyb25vdXNcIixcbiAgXCJhdHRpdHVkZS1vcmllbnRlZFwiLFxuICBcImJhY2tncm91bmRcIixcbiAgXCJiYW5kd2lkdGgtbW9uaXRvcmVkXCIsXG4gIFwiYmktZGlyZWN0aW9uYWxcIixcbiAgXCJiaWZ1cmNhdGVkXCIsXG4gIFwiYm90dG9tLWxpbmVcIixcbiAgXCJjbGVhci10aGlua2luZ1wiLFxuICBcImNsaWVudC1kcml2ZW5cIixcbiAgXCJjbGllbnQtc2VydmVyXCIsXG4gIFwiY29oZXJlbnRcIixcbiAgXCJjb2hlc2l2ZVwiLFxuICBcImNvbXBvc2l0ZVwiLFxuICBcImNvbnRleHQtc2Vuc2l0aXZlXCIsXG4gIFwiY29udGV4dHVhbGx5LWJhc2VkXCIsXG4gIFwiY29udGVudC1iYXNlZFwiLFxuICBcImRlZGljYXRlZFwiLFxuICBcImRlbWFuZC1kcml2ZW5cIixcbiAgXCJkaWRhY3RpY1wiLFxuICBcImRpcmVjdGlvbmFsXCIsXG4gIFwiZGlzY3JldGVcIixcbiAgXCJkaXNpbnRlcm1lZGlhdGVcIixcbiAgXCJkeW5hbWljXCIsXG4gIFwiZWNvLWNlbnRyaWNcIixcbiAgXCJlbXBvd2VyaW5nXCIsXG4gIFwiZW5jb21wYXNzaW5nXCIsXG4gIFwiZXZlbi1rZWVsZWRcIixcbiAgXCJleGVjdXRpdmVcIixcbiAgXCJleHBsaWNpdFwiLFxuICBcImV4dWRpbmdcIixcbiAgXCJmYXVsdC10b2xlcmFudFwiLFxuICBcImZvcmVncm91bmRcIixcbiAgXCJmcmVzaC10aGlua2luZ1wiLFxuICBcImZ1bGwtcmFuZ2VcIixcbiAgXCJnbG9iYWxcIixcbiAgXCJncmlkLWVuYWJsZWRcIixcbiAgXCJoZXVyaXN0aWNcIixcbiAgXCJoaWdoLWxldmVsXCIsXG4gIFwiaG9saXN0aWNcIixcbiAgXCJob21vZ2VuZW91c1wiLFxuICBcImh1bWFuLXJlc291cmNlXCIsXG4gIFwiaHlicmlkXCIsXG4gIFwiaW1wYWN0ZnVsXCIsXG4gIFwiaW5jcmVtZW50YWxcIixcbiAgXCJpbnRhbmdpYmxlXCIsXG4gIFwiaW50ZXJhY3RpdmVcIixcbiAgXCJpbnRlcm1lZGlhdGVcIixcbiAgXCJsZWFkaW5nIGVkZ2VcIixcbiAgXCJsb2NhbFwiLFxuICBcImxvZ2lzdGljYWxcIixcbiAgXCJtYXhpbWl6ZWRcIixcbiAgXCJtZXRob2RpY2FsXCIsXG4gIFwibWlzc2lvbi1jcml0aWNhbFwiLFxuICBcIm1vYmlsZVwiLFxuICBcIm1vZHVsYXJcIixcbiAgXCJtb3RpdmF0aW5nXCIsXG4gIFwibXVsdGltZWRpYVwiLFxuICBcIm11bHRpLXN0YXRlXCIsXG4gIFwibXVsdGktdGFza2luZ1wiLFxuICBcIm5hdGlvbmFsXCIsXG4gIFwibmVlZHMtYmFzZWRcIixcbiAgXCJuZXV0cmFsXCIsXG4gIFwibmV4dCBnZW5lcmF0aW9uXCIsXG4gIFwibm9uLXZvbGF0aWxlXCIsXG4gIFwib2JqZWN0LW9yaWVudGVkXCIsXG4gIFwib3B0aW1hbFwiLFxuICBcIm9wdGltaXppbmdcIixcbiAgXCJyYWRpY2FsXCIsXG4gIFwicmVhbC10aW1lXCIsXG4gIFwicmVjaXByb2NhbFwiLFxuICBcInJlZ2lvbmFsXCIsXG4gIFwicmVzcG9uc2l2ZVwiLFxuICBcInNjYWxhYmxlXCIsXG4gIFwic2Vjb25kYXJ5XCIsXG4gIFwic29sdXRpb24tb3JpZW50ZWRcIixcbiAgXCJzdGFibGVcIixcbiAgXCJzdGF0aWNcIixcbiAgXCJzeXN0ZW1hdGljXCIsXG4gIFwic3lzdGVtaWNcIixcbiAgXCJzeXN0ZW0td29ydGh5XCIsXG4gIFwidGFuZ2libGVcIixcbiAgXCJ0ZXJ0aWFyeVwiLFxuICBcInRyYW5zaXRpb25hbFwiLFxuICBcInVuaWZvcm1cIixcbiAgXCJ1cHdhcmQtdHJlbmRpbmdcIixcbiAgXCJ1c2VyLWZhY2luZ1wiLFxuICBcInZhbHVlLWFkZGVkXCIsXG4gIFwid2ViLWVuYWJsZWRcIixcbiAgXCJ3ZWxsLW1vZHVsYXRlZFwiLFxuICBcInplcm8gYWRtaW5pc3RyYXRpb25cIixcbiAgXCJ6ZXJvIGRlZmVjdFwiLFxuICBcInplcm8gdG9sZXJhbmNlXCJcbl07XG4iLCJ2YXIgY29tcGFueSA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBjb21wYW55O1xuY29tcGFueS5zdWZmaXggPSByZXF1aXJlKFwiLi9zdWZmaXhcIik7XG5jb21wYW55LmFkamVjdGl2ZSA9IHJlcXVpcmUoXCIuL2FkamVjdGl2ZVwiKTtcbmNvbXBhbnkuZGVzY3JpcHRvciA9IHJlcXVpcmUoXCIuL2Rlc2NyaXB0b3JcIik7XG5jb21wYW55Lm5vdW4gPSByZXF1aXJlKFwiLi9ub3VuXCIpO1xuY29tcGFueS5ic192ZXJiID0gcmVxdWlyZShcIi4vYnNfdmVyYlwiKTtcbmNvbXBhbnkuYnNfYWRqZWN0aXZlID0gcmVxdWlyZShcIi4vYnNfYWRqZWN0aXZlXCIpO1xuY29tcGFueS5ic19ub3VuID0gcmVxdWlyZShcIi4vYnNfbm91blwiKTtcbmNvbXBhbnkubmFtZSA9IHJlcXVpcmUoXCIuL25hbWVcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiN7TmFtZS5sYXN0X25hbWV9ICN7c3VmZml4fVwiLFxuICBcIiN7TmFtZS5sYXN0X25hbWV9LSN7TmFtZS5sYXN0X25hbWV9XCIsXG4gIFwiI3tOYW1lLmxhc3RfbmFtZX0sICN7TmFtZS5sYXN0X25hbWV9IGFuZCAje05hbWUubGFzdF9uYW1lfVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJhYmlsaXR5XCIsXG4gIFwiYWNjZXNzXCIsXG4gIFwiYWRhcHRlclwiLFxuICBcImFsZ29yaXRobVwiLFxuICBcImFsbGlhbmNlXCIsXG4gIFwiYW5hbHl6ZXJcIixcbiAgXCJhcHBsaWNhdGlvblwiLFxuICBcImFwcHJvYWNoXCIsXG4gIFwiYXJjaGl0ZWN0dXJlXCIsXG4gIFwiYXJjaGl2ZVwiLFxuICBcImFydGlmaWNpYWwgaW50ZWxsaWdlbmNlXCIsXG4gIFwiYXJyYXlcIixcbiAgXCJhdHRpdHVkZVwiLFxuICBcImJlbmNobWFya1wiLFxuICBcImJ1ZGdldGFyeSBtYW5hZ2VtZW50XCIsXG4gIFwiY2FwYWJpbGl0eVwiLFxuICBcImNhcGFjaXR5XCIsXG4gIFwiY2hhbGxlbmdlXCIsXG4gIFwiY2lyY3VpdFwiLFxuICBcImNvbGxhYm9yYXRpb25cIixcbiAgXCJjb21wbGV4aXR5XCIsXG4gIFwiY29uY2VwdFwiLFxuICBcImNvbmdsb21lcmF0aW9uXCIsXG4gIFwiY29udGluZ2VuY3lcIixcbiAgXCJjb3JlXCIsXG4gIFwiY3VzdG9tZXIgbG95YWx0eVwiLFxuICBcImRhdGFiYXNlXCIsXG4gIFwiZGF0YS13YXJlaG91c2VcIixcbiAgXCJkZWZpbml0aW9uXCIsXG4gIFwiZW11bGF0aW9uXCIsXG4gIFwiZW5jb2RpbmdcIixcbiAgXCJlbmNyeXB0aW9uXCIsXG4gIFwiZXh0cmFuZXRcIixcbiAgXCJmaXJtd2FyZVwiLFxuICBcImZsZXhpYmlsaXR5XCIsXG4gIFwiZm9jdXMgZ3JvdXBcIixcbiAgXCJmb3JlY2FzdFwiLFxuICBcImZyYW1lXCIsXG4gIFwiZnJhbWV3b3JrXCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJmdW5jdGlvbmFsaXRpZXNcIixcbiAgXCJHcmFwaGljIEludGVyZmFjZVwiLFxuICBcImdyb3Vwd2FyZVwiLFxuICBcIkdyYXBoaWNhbCBVc2VyIEludGVyZmFjZVwiLFxuICBcImhhcmR3YXJlXCIsXG4gIFwiaGVscC1kZXNrXCIsXG4gIFwiaGllcmFyY2h5XCIsXG4gIFwiaHViXCIsXG4gIFwiaW1wbGVtZW50YXRpb25cIixcbiAgXCJpbmZvLW1lZGlhcmllc1wiLFxuICBcImluZnJhc3RydWN0dXJlXCIsXG4gIFwiaW5pdGlhdGl2ZVwiLFxuICBcImluc3RhbGxhdGlvblwiLFxuICBcImluc3RydWN0aW9uIHNldFwiLFxuICBcImludGVyZmFjZVwiLFxuICBcImludGVybmV0IHNvbHV0aW9uXCIsXG4gIFwiaW50cmFuZXRcIixcbiAgXCJrbm93bGVkZ2UgdXNlclwiLFxuICBcImtub3dsZWRnZSBiYXNlXCIsXG4gIFwibG9jYWwgYXJlYSBuZXR3b3JrXCIsXG4gIFwibGV2ZXJhZ2VcIixcbiAgXCJtYXRyaWNlc1wiLFxuICBcIm1hdHJpeFwiLFxuICBcIm1ldGhvZG9sb2d5XCIsXG4gIFwibWlkZGxld2FyZVwiLFxuICBcIm1pZ3JhdGlvblwiLFxuICBcIm1vZGVsXCIsXG4gIFwibW9kZXJhdG9yXCIsXG4gIFwibW9uaXRvcmluZ1wiLFxuICBcIm1vcmF0b3JpdW1cIixcbiAgXCJuZXVyYWwtbmV0XCIsXG4gIFwib3BlbiBhcmNoaXRlY3R1cmVcIixcbiAgXCJvcGVuIHN5c3RlbVwiLFxuICBcIm9yY2hlc3RyYXRpb25cIixcbiAgXCJwYXJhZGlnbVwiLFxuICBcInBhcmFsbGVsaXNtXCIsXG4gIFwicG9saWN5XCIsXG4gIFwicG9ydGFsXCIsXG4gIFwicHJpY2luZyBzdHJ1Y3R1cmVcIixcbiAgXCJwcm9jZXNzIGltcHJvdmVtZW50XCIsXG4gIFwicHJvZHVjdFwiLFxuICBcInByb2R1Y3Rpdml0eVwiLFxuICBcInByb2plY3RcIixcbiAgXCJwcm9qZWN0aW9uXCIsXG4gIFwicHJvdG9jb2xcIixcbiAgXCJzZWN1cmVkIGxpbmVcIixcbiAgXCJzZXJ2aWNlLWRlc2tcIixcbiAgXCJzb2Z0d2FyZVwiLFxuICBcInNvbHV0aW9uXCIsXG4gIFwic3RhbmRhcmRpemF0aW9uXCIsXG4gIFwic3RyYXRlZ3lcIixcbiAgXCJzdHJ1Y3R1cmVcIixcbiAgXCJzdWNjZXNzXCIsXG4gIFwic3VwZXJzdHJ1Y3R1cmVcIixcbiAgXCJzdXBwb3J0XCIsXG4gIFwic3luZXJneVwiLFxuICBcInN5c3RlbSBlbmdpbmVcIixcbiAgXCJ0YXNrLWZvcmNlXCIsXG4gIFwidGhyb3VnaHB1dFwiLFxuICBcInRpbWUtZnJhbWVcIixcbiAgXCJ0b29sc2V0XCIsXG4gIFwidXRpbGlzYXRpb25cIixcbiAgXCJ3ZWJzaXRlXCIsXG4gIFwid29ya2ZvcmNlXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkluY1wiLFxuICBcImFuZCBTb25zXCIsXG4gIFwiTExDXCIsXG4gIFwiR3JvdXBcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzM0IyMtIyMjIyMjLSMjIyNML1wiLFxuICBcIi8zNyMjLSMjIyMjIy0jIyMjTC9cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzMwWzAtNV0jLSMjIyMjIy0jIyNML1wiLFxuICBcIi8zNjgjLSMjIyMjIy0jIyNML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNjAxMS0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvNjUjIy0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvNjRbNC05XSMtIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzYwMTEtNjIjIy0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvNjUjIy02MiMjLSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NFs0LTldIy02MiMjLSMjIyMtIyMjIy0jIyNML1wiXG5dO1xuIiwidmFyIGNyZWRpdF9jYXJkID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGNyZWRpdF9jYXJkO1xuY3JlZGl0X2NhcmQudmlzYSA9IHJlcXVpcmUoXCIuL3Zpc2FcIik7XG5jcmVkaXRfY2FyZC5tYXN0ZXJjYXJkID0gcmVxdWlyZShcIi4vbWFzdGVyY2FyZFwiKTtcbmNyZWRpdF9jYXJkLmRpc2NvdmVyID0gcmVxdWlyZShcIi4vZGlzY292ZXJcIik7XG5jcmVkaXRfY2FyZC5hbWVyaWNhbl9leHByZXNzID0gcmVxdWlyZShcIi4vYW1lcmljYW5fZXhwcmVzc1wiKTtcbmNyZWRpdF9jYXJkLmRpbmVyc19jbHViID0gcmVxdWlyZShcIi4vZGluZXJzX2NsdWJcIik7XG5jcmVkaXRfY2FyZC5qY2IgPSByZXF1aXJlKFwiLi9qY2JcIik7XG5jcmVkaXRfY2FyZC5zd2l0Y2ggPSByZXF1aXJlKFwiLi9zd2l0Y2hcIik7XG5jcmVkaXRfY2FyZC5zb2xvID0gcmVxdWlyZShcIi4vc29sb1wiKTtcbmNyZWRpdF9jYXJkLm1hZXN0cm8gPSByZXF1aXJlKFwiLi9tYWVzdHJvXCIpO1xuY3JlZGl0X2NhcmQubGFzZXIgPSByZXF1aXJlKFwiLi9sYXNlclwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzM1MjgtIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzM1MjktIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzM1WzMtOF0jLSMjIyMtIyMjIy0jIyNML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNjMwNCMjIyMjIyMjIyMjTC9cIixcbiAgXCIvNjcwNiMjIyMjIyMjIyMjTC9cIixcbiAgXCIvNjc3MSMjIyMjIyMjIyMjTC9cIixcbiAgXCIvNjcwOSMjIyMjIyMjIyMjTC9cIixcbiAgXCIvNjMwNCMjIyMjIyMjI3s1LDZ9TC9cIixcbiAgXCIvNjcwNiMjIyMjIyMjI3s1LDZ9TC9cIixcbiAgXCIvNjc3MSMjIyMjIyMjI3s1LDZ9TC9cIixcbiAgXCIvNjcwOSMjIyMjIyMjI3s1LDZ9TC9cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzUwI3s5LDE2fUwvXCIsXG4gIFwiLzVbNi04XSN7OSwxNn1ML1wiLFxuICBcIi81NiMjezksMTZ9TC9cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzVbMS01XSMjLSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NzcxLTg5IyMtIyMjIy0jIyNML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNjc2Ny0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvNjc2Ny0jIyMjLSMjIyMtIyMjIy0jTC9cIixcbiAgXCIvNjc2Ny0jIyMjLSMjIyMtIyMjIy0jI0wvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi82NzU5LSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NzU5LSMjIyMtIyMjIy0jIyMjLSNML1wiLFxuICBcIi82NzU5LSMjIyMtIyMjIy0jIyMjLSMjTC9cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzQjIyMjIyMjIyMjI0wvXCIsXG4gIFwiLzQjIyMtIyMjIy0jIyMjLSMjI0wvXCJcbl07XG4iLCJ2YXIgZGF0ZSA9IHt9O1xubW9kdWxlW1wiZXhwb3J0c1wiXSA9IGRhdGU7XG5kYXRlLm1vbnRoID0gcmVxdWlyZShcIi4vbW9udGhcIik7XG5kYXRlLndlZWtkYXkgPSByZXF1aXJlKFwiLi93ZWVrZGF5XCIpO1xuIiwiLy8gU291cmNlOiBodHRwOi8vdW5pY29kZS5vcmcvY2xkci90cmFjL2Jyb3dzZXIvdGFncy9yZWxlYXNlLTI3L2NvbW1vbi9tYWluL2VuLnhtbCNMMTc5OVxubW9kdWxlW1wiZXhwb3J0c1wiXSA9IHtcbiAgd2lkZTogW1xuICAgIFwiSmFudWFyeVwiLFxuICAgIFwiRmVicnVhcnlcIixcbiAgICBcIk1hcmNoXCIsXG4gICAgXCJBcHJpbFwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5lXCIsXG4gICAgXCJKdWx5XCIsXG4gICAgXCJBdWd1c3RcIixcbiAgICBcIlNlcHRlbWJlclwiLFxuICAgIFwiT2N0b2JlclwiLFxuICAgIFwiTm92ZW1iZXJcIixcbiAgICBcIkRlY2VtYmVyXCJcbiAgXSxcbiAgLy8gUHJvcGVydHkgXCJ3aWRlX2NvbnRleHRcIiBpcyBvcHRpb25hbCwgaWYgbm90IHNldCB0aGVuIFwid2lkZVwiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkXG4gIC8vIEl0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIHdvcmQgaW4gY29udGV4dCwgd2hpY2ggbWF5IGRpZmZlciBmcm9tIGEgc3RhbmQtYWxvbmUgd29yZFxuICB3aWRlX2NvbnRleHQ6IFtcbiAgICBcIkphbnVhcnlcIixcbiAgICBcIkZlYnJ1YXJ5XCIsXG4gICAgXCJNYXJjaFwiLFxuICAgIFwiQXByaWxcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuZVwiLFxuICAgIFwiSnVseVwiLFxuICAgIFwiQXVndXN0XCIsXG4gICAgXCJTZXB0ZW1iZXJcIixcbiAgICBcIk9jdG9iZXJcIixcbiAgICBcIk5vdmVtYmVyXCIsXG4gICAgXCJEZWNlbWJlclwiXG4gIF0sXG4gIGFiYnI6IFtcbiAgICBcIkphblwiLFxuICAgIFwiRmViXCIsXG4gICAgXCJNYXJcIixcbiAgICBcIkFwclwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5cIixcbiAgICBcIkp1bFwiLFxuICAgIFwiQXVnXCIsXG4gICAgXCJTZXBcIixcbiAgICBcIk9jdFwiLFxuICAgIFwiTm92XCIsXG4gICAgXCJEZWNcIlxuICBdLFxuICAvLyBQcm9wZXJ0eSBcImFiYnJfY29udGV4dFwiIGlzIG9wdGlvbmFsLCBpZiBub3Qgc2V0IHRoZW4gXCJhYmJyXCIgd2lsbCBiZSB1c2VkIGluc3RlYWRcbiAgLy8gSXQgaXMgdXNlZCB0byBzcGVjaWZ5IGEgd29yZCBpbiBjb250ZXh0LCB3aGljaCBtYXkgZGlmZmVyIGZyb20gYSBzdGFuZC1hbG9uZSB3b3JkXG4gIGFiYnJfY29udGV4dDogW1xuICAgIFwiSmFuXCIsXG4gICAgXCJGZWJcIixcbiAgICBcIk1hclwiLFxuICAgIFwiQXByXCIsXG4gICAgXCJNYXlcIixcbiAgICBcIkp1blwiLFxuICAgIFwiSnVsXCIsXG4gICAgXCJBdWdcIixcbiAgICBcIlNlcFwiLFxuICAgIFwiT2N0XCIsXG4gICAgXCJOb3ZcIixcbiAgICBcIkRlY1wiXG4gIF1cbn07XG4iLCIvLyBTb3VyY2U6IGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL3RyYWMvYnJvd3Nlci90YWdzL3JlbGVhc2UtMjcvY29tbW9uL21haW4vZW4ueG1sI0wxODQ3XG5tb2R1bGVbXCJleHBvcnRzXCJdID0ge1xuICB3aWRlOiBbXG4gICAgXCJTdW5kYXlcIixcbiAgICBcIk1vbmRheVwiLFxuICAgIFwiVHVlc2RheVwiLFxuICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgXCJUaHVyc2RheVwiLFxuICAgIFwiRnJpZGF5XCIsXG4gICAgXCJTYXR1cmRheVwiXG4gIF0sXG4gIC8vIFByb3BlcnR5IFwid2lkZV9jb250ZXh0XCIgaXMgb3B0aW9uYWwsIGlmIG5vdCBzZXQgdGhlbiBcIndpZGVcIiB3aWxsIGJlIHVzZWQgaW5zdGVhZFxuICAvLyBJdCBpcyB1c2VkIHRvIHNwZWNpZnkgYSB3b3JkIGluIGNvbnRleHQsIHdoaWNoIG1heSBkaWZmZXIgZnJvbSBhIHN0YW5kLWFsb25lIHdvcmRcbiAgd2lkZV9jb250ZXh0OiBbXG4gICAgXCJTdW5kYXlcIixcbiAgICBcIk1vbmRheVwiLFxuICAgIFwiVHVlc2RheVwiLFxuICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgXCJUaHVyc2RheVwiLFxuICAgIFwiRnJpZGF5XCIsXG4gICAgXCJTYXR1cmRheVwiXG4gIF0sXG4gIGFiYnI6IFtcbiAgICBcIlN1blwiLFxuICAgIFwiTW9uXCIsXG4gICAgXCJUdWVcIixcbiAgICBcIldlZFwiLFxuICAgIFwiVGh1XCIsXG4gICAgXCJGcmlcIixcbiAgICBcIlNhdFwiXG4gIF0sXG4gIC8vIFByb3BlcnR5IFwiYWJicl9jb250ZXh0XCIgaXMgb3B0aW9uYWwsIGlmIG5vdCBzZXQgdGhlbiBcImFiYnJcIiB3aWxsIGJlIHVzZWQgaW5zdGVhZFxuICAvLyBJdCBpcyB1c2VkIHRvIHNwZWNpZnkgYSB3b3JkIGluIGNvbnRleHQsIHdoaWNoIG1heSBkaWZmZXIgZnJvbSBhIHN0YW5kLWFsb25lIHdvcmRcbiAgYWJicl9jb250ZXh0OiBbXG4gICAgXCJTdW5cIixcbiAgICBcIk1vblwiLFxuICAgIFwiVHVlXCIsXG4gICAgXCJXZWRcIixcbiAgICBcIlRodVwiLFxuICAgIFwiRnJpXCIsXG4gICAgXCJTYXRcIlxuICBdXG59O1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJDaGVja2luZ1wiLFxuICBcIlNhdmluZ3NcIixcbiAgXCJNb25leSBNYXJrZXRcIixcbiAgXCJJbnZlc3RtZW50XCIsXG4gIFwiSG9tZSBMb2FuXCIsXG4gIFwiQ3JlZGl0IENhcmRcIixcbiAgXCJBdXRvIExvYW5cIixcbiAgXCJQZXJzb25hbCBMb2FuXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0ge1xuICBcIlVBRSBEaXJoYW1cIjoge1xuICAgIFwiY29kZVwiOiBcIkFFRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJBZmdoYW5pXCI6IHtcbiAgICBcImNvZGVcIjogXCJBRk5cIixcbiAgICBcInN5bWJvbFwiOiBcItiLXCJcbiAgfSxcbiAgXCJMZWtcIjoge1xuICAgIFwiY29kZVwiOiBcIkFMTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiTGVrXCJcbiAgfSxcbiAgXCJBcm1lbmlhbiBEcmFtXCI6IHtcbiAgICBcImNvZGVcIjogXCJBTURcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTmV0aGVybGFuZHMgQW50aWxsaWFuIEd1aWxkZXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkFOR1wiLFxuICAgIFwic3ltYm9sXCI6IFwixpJcIlxuICB9LFxuICBcIkt3YW56YVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQU9BXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkFyZ2VudGluZSBQZXNvXCI6IHtcbiAgICBcImNvZGVcIjogXCJBUlNcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkF1c3RyYWxpYW4gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJBVURcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkFydWJhbiBHdWlsZGVyXCI6IHtcbiAgICBcImNvZGVcIjogXCJBV0dcIixcbiAgICBcInN5bWJvbFwiOiBcIsaSXCJcbiAgfSxcbiAgXCJBemVyYmFpamFuaWFuIE1hbmF0XCI6IHtcbiAgICBcImNvZGVcIjogXCJBWk5cIixcbiAgICBcInN5bWJvbFwiOiBcItC80LDQvVwiXG4gIH0sXG4gIFwiQ29udmVydGlibGUgTWFya3NcIjoge1xuICAgIFwiY29kZVwiOiBcIkJBTVwiLFxuICAgIFwic3ltYm9sXCI6IFwiS01cIlxuICB9LFxuICBcIkJhcmJhZG9zIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQkJEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJUYWthXCI6IHtcbiAgICBcImNvZGVcIjogXCJCRFRcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQnVsZ2FyaWFuIExldlwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQkdOXCIsXG4gICAgXCJzeW1ib2xcIjogXCLQu9CyXCJcbiAgfSxcbiAgXCJCYWhyYWluaSBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQkhEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkJ1cnVuZGkgRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIkJJRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJCZXJtdWRpYW4gRG9sbGFyIChjdXN0b21hcmlseSBrbm93biBhcyBCZXJtdWRhIERvbGxhcilcIjoge1xuICAgIFwiY29kZVwiOiBcIkJNRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiQnJ1bmVpIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQk5EXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJCb2xpdmlhbm8gTXZkb2xcIjoge1xuICAgIFwiY29kZVwiOiBcIkJPQiBCT1ZcIixcbiAgICBcInN5bWJvbFwiOiBcIiRiXCJcbiAgfSxcbiAgXCJCcmF6aWxpYW4gUmVhbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQlJMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJSJFwiXG4gIH0sXG4gIFwiQmFoYW1pYW4gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJCU0RcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlB1bGFcIjoge1xuICAgIFwiY29kZVwiOiBcIkJXUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiUFwiXG4gIH0sXG4gIFwiQmVsYXJ1c3NpYW4gUnVibGVcIjoge1xuICAgIFwiY29kZVwiOiBcIkJZUlwiLFxuICAgIFwic3ltYm9sXCI6IFwicC5cIlxuICB9LFxuICBcIkJlbGl6ZSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkJaRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiQlokXCJcbiAgfSxcbiAgXCJDYW5hZGlhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkNBRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiQ29uZ29sZXNlIEZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJDREZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiU3dpc3MgRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIkNIRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiQ0hGXCJcbiAgfSxcbiAgXCJDaGlsZWFuIFBlc28gVW5pZGFkZXMgZGUgZm9tZW50b1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ0xQIENMRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiWXVhbiBSZW5taW5iaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ05ZXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCpVwiXG4gIH0sXG4gIFwiQ29sb21iaWFuIFBlc28gVW5pZGFkIGRlIFZhbG9yIFJlYWxcIjoge1xuICAgIFwiY29kZVwiOiBcIkNPUCBDT1VcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkNvc3RhIFJpY2FuIENvbG9uXCI6IHtcbiAgICBcImNvZGVcIjogXCJDUkNcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCoVwiXG4gIH0sXG4gIFwiQ3ViYW4gUGVzbyBQZXNvIENvbnZlcnRpYmxlXCI6IHtcbiAgICBcImNvZGVcIjogXCJDVVAgQ1VDXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigrFcIlxuICB9LFxuICBcIkNhcGUgVmVyZGUgRXNjdWRvXCI6IHtcbiAgICBcImNvZGVcIjogXCJDVkVcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQ3plY2ggS29ydW5hXCI6IHtcbiAgICBcImNvZGVcIjogXCJDWktcIixcbiAgICBcInN5bWJvbFwiOiBcIkvEjVwiXG4gIH0sXG4gIFwiRGppYm91dGkgRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIkRKRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJEYW5pc2ggS3JvbmVcIjoge1xuICAgIFwiY29kZVwiOiBcIkRLS1wiLFxuICAgIFwic3ltYm9sXCI6IFwia3JcIlxuICB9LFxuICBcIkRvbWluaWNhbiBQZXNvXCI6IHtcbiAgICBcImNvZGVcIjogXCJET1BcIixcbiAgICBcInN5bWJvbFwiOiBcIlJEJFwiXG4gIH0sXG4gIFwiQWxnZXJpYW4gRGluYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkRaRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJLcm9vblwiOiB7XG4gICAgXCJjb2RlXCI6IFwiRUVLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkVneXB0aWFuIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJFR1BcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJOYWtmYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiRVJOXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkV0aGlvcGlhbiBCaXJyXCI6IHtcbiAgICBcImNvZGVcIjogXCJFVEJcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRXVyb1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiRVVSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqxcIlxuICB9LFxuICBcIkZpamkgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJGSkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkZhbGtsYW5kIElzbGFuZHMgUG91bmRcIjoge1xuICAgIFwiY29kZVwiOiBcIkZLUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqNcIlxuICB9LFxuICBcIlBvdW5kIFN0ZXJsaW5nXCI6IHtcbiAgICBcImNvZGVcIjogXCJHQlBcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJMYXJpXCI6IHtcbiAgICBcImNvZGVcIjogXCJHRUxcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQ2VkaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiR0hTXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkdpYnJhbHRhciBQb3VuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiR0lQXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCo1wiXG4gIH0sXG4gIFwiRGFsYXNpXCI6IHtcbiAgICBcImNvZGVcIjogXCJHTURcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiR3VpbmVhIEZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJHTkZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiUXVldHphbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiR1RRXCIsXG4gICAgXCJzeW1ib2xcIjogXCJRXCJcbiAgfSxcbiAgXCJHdXlhbmEgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJHWURcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkhvbmcgS29uZyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkhLRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiTGVtcGlyYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSE5MXCIsXG4gICAgXCJzeW1ib2xcIjogXCJMXCJcbiAgfSxcbiAgXCJDcm9hdGlhbiBLdW5hXCI6IHtcbiAgICBcImNvZGVcIjogXCJIUktcIixcbiAgICBcInN5bWJvbFwiOiBcImtuXCJcbiAgfSxcbiAgXCJHb3VyZGUgVVMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJIVEcgVVNEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkZvcmludFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSFVGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJGdFwiXG4gIH0sXG4gIFwiUnVwaWFoXCI6IHtcbiAgICBcImNvZGVcIjogXCJJRFJcIixcbiAgICBcInN5bWJvbFwiOiBcIlJwXCJcbiAgfSxcbiAgXCJOZXcgSXNyYWVsaSBTaGVxZWxcIjoge1xuICAgIFwiY29kZVwiOiBcIklMU1wiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKqXCJcbiAgfSxcbiAgXCJJbmRpYW4gUnVwZWVcIjoge1xuICAgIFwiY29kZVwiOiBcIklOUlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJJbmRpYW4gUnVwZWUgTmd1bHRydW1cIjoge1xuICAgIFwiY29kZVwiOiBcIklOUiBCVE5cIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiSXJhcWkgRGluYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIklRRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJJcmFuaWFuIFJpYWxcIjoge1xuICAgIFwiY29kZVwiOiBcIklSUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi77e8XCJcbiAgfSxcbiAgXCJJY2VsYW5kIEtyb25hXCI6IHtcbiAgICBcImNvZGVcIjogXCJJU0tcIixcbiAgICBcInN5bWJvbFwiOiBcImtyXCJcbiAgfSxcbiAgXCJKYW1haWNhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkpNRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiSiRcIlxuICB9LFxuICBcIkpvcmRhbmlhbiBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSk9EXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlllblwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSlBZXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCpVwiXG4gIH0sXG4gIFwiS2VueWFuIFNoaWxsaW5nXCI6IHtcbiAgICBcImNvZGVcIjogXCJLRVNcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiU29tXCI6IHtcbiAgICBcImNvZGVcIjogXCJLR1NcIixcbiAgICBcInN5bWJvbFwiOiBcItC70LJcIlxuICB9LFxuICBcIlJpZWxcIjoge1xuICAgIFwiY29kZVwiOiBcIktIUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4Z+bXCJcbiAgfSxcbiAgXCJDb21vcm8gRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIktNRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJOb3J0aCBLb3JlYW4gV29uXCI6IHtcbiAgICBcImNvZGVcIjogXCJLUFdcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqVwiXG4gIH0sXG4gIFwiV29uXCI6IHtcbiAgICBcImNvZGVcIjogXCJLUldcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqVwiXG4gIH0sXG4gIFwiS3V3YWl0aSBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiS1dEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkNheW1hbiBJc2xhbmRzIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiS1lEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJUZW5nZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiS1pUXCIsXG4gICAgXCJzeW1ib2xcIjogXCLQu9CyXCJcbiAgfSxcbiAgXCJLaXBcIjoge1xuICAgIFwiY29kZVwiOiBcIkxBS1wiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKtXCJcbiAgfSxcbiAgXCJMZWJhbmVzZSBQb3VuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTEJQXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCo1wiXG4gIH0sXG4gIFwiU3JpIExhbmthIFJ1cGVlXCI6IHtcbiAgICBcImNvZGVcIjogXCJMS1JcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqFwiXG4gIH0sXG4gIFwiTGliZXJpYW4gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJMUkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkxpdGh1YW5pYW4gTGl0YXNcIjoge1xuICAgIFwiY29kZVwiOiBcIkxUTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiTHRcIlxuICB9LFxuICBcIkxhdHZpYW4gTGF0c1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiTFZMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJMc1wiXG4gIH0sXG4gIFwiTGlieWFuIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJMWURcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTW9yb2NjYW4gRGlyaGFtXCI6IHtcbiAgICBcImNvZGVcIjogXCJNQURcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTW9sZG92YW4gTGV1XCI6IHtcbiAgICBcImNvZGVcIjogXCJNRExcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTWFsYWdhc3kgQXJpYXJ5XCI6IHtcbiAgICBcImNvZGVcIjogXCJNR0FcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRGVuYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIk1LRFwiLFxuICAgIFwic3ltYm9sXCI6IFwi0LTQtdC9XCJcbiAgfSxcbiAgXCJLeWF0XCI6IHtcbiAgICBcImNvZGVcIjogXCJNTUtcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiVHVncmlrXCI6IHtcbiAgICBcImNvZGVcIjogXCJNTlRcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCrlwiXG4gIH0sXG4gIFwiUGF0YWNhXCI6IHtcbiAgICBcImNvZGVcIjogXCJNT1BcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiT3VndWl5YVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTVJPXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk1hdXJpdGl1cyBSdXBlZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTVVSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqhcIlxuICB9LFxuICBcIlJ1Zml5YWFcIjoge1xuICAgIFwiY29kZVwiOiBcIk1WUlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJLd2FjaGFcIjoge1xuICAgIFwiY29kZVwiOiBcIk1XS1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJNZXhpY2FuIFBlc28gTWV4aWNhbiBVbmlkYWQgZGUgSW52ZXJzaW9uIChVREkpXCI6IHtcbiAgICBcImNvZGVcIjogXCJNWE4gTVhWXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJNYWxheXNpYW4gUmluZ2dpdFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTVlSXCIsXG4gICAgXCJzeW1ib2xcIjogXCJSTVwiXG4gIH0sXG4gIFwiTWV0aWNhbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTVpOXCIsXG4gICAgXCJzeW1ib2xcIjogXCJNVFwiXG4gIH0sXG4gIFwiTmFpcmFcIjoge1xuICAgIFwiY29kZVwiOiBcIk5HTlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKmXCJcbiAgfSxcbiAgXCJDb3Jkb2JhIE9yb1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiTklPXCIsXG4gICAgXCJzeW1ib2xcIjogXCJDJFwiXG4gIH0sXG4gIFwiTm9yd2VnaWFuIEtyb25lXCI6IHtcbiAgICBcImNvZGVcIjogXCJOT0tcIixcbiAgICBcInN5bWJvbFwiOiBcImtyXCJcbiAgfSxcbiAgXCJOZXBhbGVzZSBSdXBlZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTlBSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqhcIlxuICB9LFxuICBcIk5ldyBaZWFsYW5kIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTlpEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJSaWFsIE9tYW5pXCI6IHtcbiAgICBcImNvZGVcIjogXCJPTVJcIixcbiAgICBcInN5bWJvbFwiOiBcIu+3vFwiXG4gIH0sXG4gIFwiQmFsYm9hIFVTIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUEFCIFVTRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiQi8uXCJcbiAgfSxcbiAgXCJOdWV2byBTb2xcIjoge1xuICAgIFwiY29kZVwiOiBcIlBFTlwiLFxuICAgIFwic3ltYm9sXCI6IFwiUy8uXCJcbiAgfSxcbiAgXCJLaW5hXCI6IHtcbiAgICBcImNvZGVcIjogXCJQR0tcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiUGhpbGlwcGluZSBQZXNvXCI6IHtcbiAgICBcImNvZGVcIjogXCJQSFBcIixcbiAgICBcInN5bWJvbFwiOiBcIlBocFwiXG4gIH0sXG4gIFwiUGFraXN0YW4gUnVwZWVcIjoge1xuICAgIFwiY29kZVwiOiBcIlBLUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKoXCJcbiAgfSxcbiAgXCJabG90eVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUExOXCIsXG4gICAgXCJzeW1ib2xcIjogXCJ6xYJcIlxuICB9LFxuICBcIkd1YXJhbmlcIjoge1xuICAgIFwiY29kZVwiOiBcIlBZR1wiLFxuICAgIFwic3ltYm9sXCI6IFwiR3NcIlxuICB9LFxuICBcIlFhdGFyaSBSaWFsXCI6IHtcbiAgICBcImNvZGVcIjogXCJRQVJcIixcbiAgICBcInN5bWJvbFwiOiBcIu+3vFwiXG4gIH0sXG4gIFwiTmV3IExldVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUk9OXCIsXG4gICAgXCJzeW1ib2xcIjogXCJsZWlcIlxuICB9LFxuICBcIlNlcmJpYW4gRGluYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlJTRFwiLFxuICAgIFwic3ltYm9sXCI6IFwi0JTQuNC9LlwiXG4gIH0sXG4gIFwiUnVzc2lhbiBSdWJsZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUlVCXCIsXG4gICAgXCJzeW1ib2xcIjogXCLRgNGD0LFcIlxuICB9LFxuICBcIlJ3YW5kYSBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiUldGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlNhdWRpIFJpeWFsXCI6IHtcbiAgICBcImNvZGVcIjogXCJTQVJcIixcbiAgICBcInN5bWJvbFwiOiBcIu+3vFwiXG4gIH0sXG4gIFwiU29sb21vbiBJc2xhbmRzIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0JEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJTZXljaGVsbGVzIFJ1cGVlXCI6IHtcbiAgICBcImNvZGVcIjogXCJTQ1JcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqFwiXG4gIH0sXG4gIFwiU3VkYW5lc2UgUG91bmRcIjoge1xuICAgIFwiY29kZVwiOiBcIlNER1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJTd2VkaXNoIEtyb25hXCI6IHtcbiAgICBcImNvZGVcIjogXCJTRUtcIixcbiAgICBcInN5bWJvbFwiOiBcImtyXCJcbiAgfSxcbiAgXCJTaW5nYXBvcmUgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJTR0RcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlNhaW50IEhlbGVuYSBQb3VuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0hQXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCo1wiXG4gIH0sXG4gIFwiTGVvbmVcIjoge1xuICAgIFwiY29kZVwiOiBcIlNMTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJTb21hbGkgU2hpbGxpbmdcIjoge1xuICAgIFwiY29kZVwiOiBcIlNPU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiU1wiXG4gIH0sXG4gIFwiU3VyaW5hbSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlNSRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiRG9icmFcIjoge1xuICAgIFwiY29kZVwiOiBcIlNURFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJFbCBTYWx2YWRvciBDb2xvbiBVUyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlNWQyBVU0RcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlN5cmlhbiBQb3VuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU1lQXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCo1wiXG4gIH0sXG4gIFwiTGlsYW5nZW5pXCI6IHtcbiAgICBcImNvZGVcIjogXCJTWkxcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQmFodFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVEhCXCIsXG4gICAgXCJzeW1ib2xcIjogXCLguL9cIlxuICB9LFxuICBcIlNvbW9uaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVEpTXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk1hbmF0XCI6IHtcbiAgICBcImNvZGVcIjogXCJUTVRcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiVHVuaXNpYW4gRGluYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlRORFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJQYSdhbmdhXCI6IHtcbiAgICBcImNvZGVcIjogXCJUT1BcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiVHVya2lzaCBMaXJhXCI6IHtcbiAgICBcImNvZGVcIjogXCJUUllcIixcbiAgICBcInN5bWJvbFwiOiBcIlRMXCJcbiAgfSxcbiAgXCJUcmluaWRhZCBhbmQgVG9iYWdvIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVFREXCIsXG4gICAgXCJzeW1ib2xcIjogXCJUVCRcIlxuICB9LFxuICBcIk5ldyBUYWl3YW4gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJUV0RcIixcbiAgICBcInN5bWJvbFwiOiBcIk5UJFwiXG4gIH0sXG4gIFwiVGFuemFuaWFuIFNoaWxsaW5nXCI6IHtcbiAgICBcImNvZGVcIjogXCJUWlNcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiSHJ5dm5pYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVUFIXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigrRcIlxuICB9LFxuICBcIlVnYW5kYSBTaGlsbGluZ1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiVUdYXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlVTIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVVNEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJQZXNvIFVydWd1YXlvIFVydWd1YXkgUGVzbyBlbiBVbmlkYWRlcyBJbmRleGFkYXNcIjoge1xuICAgIFwiY29kZVwiOiBcIlVZVSBVWUlcIixcbiAgICBcInN5bWJvbFwiOiBcIiRVXCJcbiAgfSxcbiAgXCJVemJla2lzdGFuIFN1bVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVVpTXCIsXG4gICAgXCJzeW1ib2xcIjogXCLQu9CyXCJcbiAgfSxcbiAgXCJCb2xpdmFyIEZ1ZXJ0ZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVkVGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJCc1wiXG4gIH0sXG4gIFwiRG9uZ1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiVk5EXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqtcIlxuICB9LFxuICBcIlZhdHVcIjoge1xuICAgIFwiY29kZVwiOiBcIlZVVlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJUYWxhXCI6IHtcbiAgICBcImNvZGVcIjogXCJXU1RcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQ0ZBIEZyYW5jIEJFQUNcIjoge1xuICAgIFwiY29kZVwiOiBcIlhBRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJTaWx2ZXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlhBR1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJHb2xkXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQVVcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQm9uZCBNYXJrZXRzIFVuaXRzIEV1cm9wZWFuIENvbXBvc2l0ZSBVbml0IChFVVJDTylcIjoge1xuICAgIFwiY29kZVwiOiBcIlhCQVwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJFdXJvcGVhbiBNb25ldGFyeSBVbml0IChFLk0uVS4tNilcIjoge1xuICAgIFwiY29kZVwiOiBcIlhCQlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJFdXJvcGVhbiBVbml0IG9mIEFjY291bnQgOShFLlUuQS4tOSlcIjoge1xuICAgIFwiY29kZVwiOiBcIlhCQ1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJFdXJvcGVhbiBVbml0IG9mIEFjY291bnQgMTcoRS5VLkEuLTE3KVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEJEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkVhc3QgQ2FyaWJiZWFuIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWENEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJTRFJcIjoge1xuICAgIFwiY29kZVwiOiBcIlhEUlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJVSUMtRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIlhGVVwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDRkEgRnJhbmMgQkNFQU9cIjoge1xuICAgIFwiY29kZVwiOiBcIlhPRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJQYWxsYWRpdW1cIjoge1xuICAgIFwiY29kZVwiOiBcIlhQRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDRlAgRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIlhQRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJQbGF0aW51bVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWFBUXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkNvZGVzIHNwZWNpZmljYWxseSByZXNlcnZlZCBmb3IgdGVzdGluZyBwdXJwb3Nlc1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiWFRTXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlllbWVuaSBSaWFsXCI6IHtcbiAgICBcImNvZGVcIjogXCJZRVJcIixcbiAgICBcInN5bWJvbFwiOiBcIu+3vFwiXG4gIH0sXG4gIFwiUmFuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWkFSXCIsXG4gICAgXCJzeW1ib2xcIjogXCJSXCJcbiAgfSxcbiAgXCJSYW5kIExvdGlcIjoge1xuICAgIFwiY29kZVwiOiBcIlpBUiBMU0xcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiUmFuZCBOYW1pYmlhIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWkFSIE5BRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJaYW1iaWFuIEt3YWNoYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWk1LXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlppbWJhYndlIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWldMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9XG59O1xuIiwidmFyIGZpbmFuY2UgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gZmluYW5jZTtcbmZpbmFuY2UuYWNjb3VudF90eXBlID0gcmVxdWlyZShcIi4vYWNjb3VudF90eXBlXCIpO1xuZmluYW5jZS50cmFuc2FjdGlvbl90eXBlID0gcmVxdWlyZShcIi4vdHJhbnNhY3Rpb25fdHlwZVwiKTtcbmZpbmFuY2UuY3VycmVuY3kgPSByZXF1aXJlKFwiLi9jdXJyZW5jeVwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiZGVwb3NpdFwiLFxuICBcIndpdGhkcmF3YWxcIixcbiAgXCJwYXltZW50XCIsXG4gIFwiaW52b2ljZVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJUQ1BcIixcbiAgXCJIVFRQXCIsXG4gIFwiU0REXCIsXG4gIFwiUkFNXCIsXG4gIFwiR0JcIixcbiAgXCJDU1NcIixcbiAgXCJTU0xcIixcbiAgXCJBR1BcIixcbiAgXCJTUUxcIixcbiAgXCJGVFBcIixcbiAgXCJQQ0lcIixcbiAgXCJBSVwiLFxuICBcIkFEUFwiLFxuICBcIlJTU1wiLFxuICBcIlhNTFwiLFxuICBcIkVYRVwiLFxuICBcIkNPTVwiLFxuICBcIkhERFwiLFxuICBcIlRIWFwiLFxuICBcIlNNVFBcIixcbiAgXCJTTVNcIixcbiAgXCJVU0JcIixcbiAgXCJQTkdcIixcbiAgXCJTQVNcIixcbiAgXCJJQlwiLFxuICBcIlNDU0lcIixcbiAgXCJKU09OXCIsXG4gIFwiWFNTXCIsXG4gIFwiSkJPRFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJhdXhpbGlhcnlcIixcbiAgXCJwcmltYXJ5XCIsXG4gIFwiYmFjay1lbmRcIixcbiAgXCJkaWdpdGFsXCIsXG4gIFwib3Blbi1zb3VyY2VcIixcbiAgXCJ2aXJ0dWFsXCIsXG4gIFwiY3Jvc3MtcGxhdGZvcm1cIixcbiAgXCJyZWR1bmRhbnRcIixcbiAgXCJvbmxpbmVcIixcbiAgXCJoYXB0aWNcIixcbiAgXCJtdWx0aS1ieXRlXCIsXG4gIFwiYmx1ZXRvb3RoXCIsXG4gIFwid2lyZWxlc3NcIixcbiAgXCIxMDgwcFwiLFxuICBcIm5ldXJhbFwiLFxuICBcIm9wdGljYWxcIixcbiAgXCJzb2xpZCBzdGF0ZVwiLFxuICBcIm1vYmlsZVwiXG5dO1xuIiwidmFyIGhhY2tlciA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBoYWNrZXI7XG5oYWNrZXIuYWJicmV2aWF0aW9uID0gcmVxdWlyZShcIi4vYWJicmV2aWF0aW9uXCIpO1xuaGFja2VyLmFkamVjdGl2ZSA9IHJlcXVpcmUoXCIuL2FkamVjdGl2ZVwiKTtcbmhhY2tlci5ub3VuID0gcmVxdWlyZShcIi4vbm91blwiKTtcbmhhY2tlci52ZXJiID0gcmVxdWlyZShcIi4vdmVyYlwiKTtcbmhhY2tlci5pbmd2ZXJiID0gcmVxdWlyZShcIi4vaW5ndmVyYlwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiYmFja2luZyB1cFwiLFxuICBcImJ5cGFzc2luZ1wiLFxuICBcImhhY2tpbmdcIixcbiAgXCJvdmVycmlkaW5nXCIsXG4gIFwiY29tcHJlc3NpbmdcIixcbiAgXCJjb3B5aW5nXCIsXG4gIFwibmF2aWdhdGluZ1wiLFxuICBcImluZGV4aW5nXCIsXG4gIFwiY29ubmVjdGluZ1wiLFxuICBcImdlbmVyYXRpbmdcIixcbiAgXCJxdWFudGlmeWluZ1wiLFxuICBcImNhbGN1bGF0aW5nXCIsXG4gIFwic3ludGhlc2l6aW5nXCIsXG4gIFwidHJhbnNtaXR0aW5nXCIsXG4gIFwicHJvZ3JhbW1pbmdcIixcbiAgXCJwYXJzaW5nXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImRyaXZlclwiLFxuICBcInByb3RvY29sXCIsXG4gIFwiYmFuZHdpZHRoXCIsXG4gIFwicGFuZWxcIixcbiAgXCJtaWNyb2NoaXBcIixcbiAgXCJwcm9ncmFtXCIsXG4gIFwicG9ydFwiLFxuICBcImNhcmRcIixcbiAgXCJhcnJheVwiLFxuICBcImludGVyZmFjZVwiLFxuICBcInN5c3RlbVwiLFxuICBcInNlbnNvclwiLFxuICBcImZpcmV3YWxsXCIsXG4gIFwiaGFyZCBkcml2ZVwiLFxuICBcInBpeGVsXCIsXG4gIFwiYWxhcm1cIixcbiAgXCJmZWVkXCIsXG4gIFwibW9uaXRvclwiLFxuICBcImFwcGxpY2F0aW9uXCIsXG4gIFwidHJhbnNtaXR0ZXJcIixcbiAgXCJidXNcIixcbiAgXCJjaXJjdWl0XCIsXG4gIFwiY2FwYWNpdG9yXCIsXG4gIFwibWF0cml4XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImJhY2sgdXBcIixcbiAgXCJieXBhc3NcIixcbiAgXCJoYWNrXCIsXG4gIFwib3ZlcnJpZGVcIixcbiAgXCJjb21wcmVzc1wiLFxuICBcImNvcHlcIixcbiAgXCJuYXZpZ2F0ZVwiLFxuICBcImluZGV4XCIsXG4gIFwiY29ubmVjdFwiLFxuICBcImdlbmVyYXRlXCIsXG4gIFwicXVhbnRpZnlcIixcbiAgXCJjYWxjdWxhdGVcIixcbiAgXCJzeW50aGVzaXplXCIsXG4gIFwiaW5wdXRcIixcbiAgXCJ0cmFuc21pdFwiLFxuICBcInByb2dyYW1cIixcbiAgXCJyZWJvb3RcIixcbiAgXCJwYXJzZVwiXG5dO1xuIiwidmFyIGVuID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGVuO1xuZW4udGl0bGUgPSBcIkVuZ2xpc2hcIjtcbmVuLnNlcGFyYXRvciA9IFwiICYgXCI7XG5lbi5hZGRyZXNzID0gcmVxdWlyZShcIi4vYWRkcmVzc1wiKTtcbmVuLmNyZWRpdF9jYXJkID0gcmVxdWlyZShcIi4vY3JlZGl0X2NhcmRcIik7XG5lbi5jb21wYW55ID0gcmVxdWlyZShcIi4vY29tcGFueVwiKTtcbmVuLmludGVybmV0ID0gcmVxdWlyZShcIi4vaW50ZXJuZXRcIik7XG5lbi5sb3JlbSA9IHJlcXVpcmUoXCIuL2xvcmVtXCIpO1xuZW4ubmFtZSA9IHJlcXVpcmUoXCIuL25hbWVcIik7XG5lbi5waG9uZV9udW1iZXIgPSByZXF1aXJlKFwiLi9waG9uZV9udW1iZXJcIik7XG5lbi5jZWxsX3Bob25lID0gcmVxdWlyZShcIi4vY2VsbF9waG9uZVwiKTtcbmVuLmJ1c2luZXNzID0gcmVxdWlyZShcIi4vYnVzaW5lc3NcIik7XG5lbi5jb21tZXJjZSA9IHJlcXVpcmUoXCIuL2NvbW1lcmNlXCIpO1xuZW4udGVhbSA9IHJlcXVpcmUoXCIuL3RlYW1cIik7XG5lbi5oYWNrZXIgPSByZXF1aXJlKFwiLi9oYWNrZXJcIik7XG5lbi5hcHAgPSByZXF1aXJlKFwiLi9hcHBcIik7XG5lbi5maW5hbmNlID0gcmVxdWlyZShcIi4vZmluYW5jZVwiKTtcbmVuLmRhdGUgPSByZXF1aXJlKFwiLi9kYXRlXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phcmphbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWhkaWYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3ByYXlhZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnV6aW5hdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9Ta3loYXJ0bWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21vc2Nvei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdXJhZmlyZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci85MWJpbGFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lnb3JnYXJ5YmFsZGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FsZWJvZ2Rlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWx5a2hpbnYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9lbGhlbGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t1c2hzb2xpdGFyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb3JleXdlYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zbm93c2hhZGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJldXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaG9sZGVud2ViLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hleWltanVhbmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW52ZXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdW50ZXJkcmVodC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2xsZWdlbWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BlZWpmYW5jaGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHlpc29ubGluZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91bHRyYWdleC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mdWNrX3lvdV90d28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRlbGxlY2hhcmxlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hdGVuZXVwb3B1bGFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FobWV0YWxwYmFsa2FuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1N0aWV2aXVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tlcmVtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29zdmFsZGFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZ2VsY2ViYWxsb3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpZXJyeWtvYmxlbnR6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BldGVybGFuZHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2F0YXJpbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2VnbG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyYW5kY2xheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mbGFtZV9rYWl6YXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWhtZXRzdWxlay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWNvbGFzZm9sbGlvdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXlyb2JpbnNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWN0b3Jlcml4b24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva29sYWdlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2h6ZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFya2plbmtpbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmljb2xhaV9sYXJzZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbm94ZHppbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxhZ29vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pZGlvdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taXprby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFkZW5nbGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXV0bHU4Mi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaW1vYmVuc28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdm9jaW5vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2d1aWlpcG9udGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NveWphdmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zaGF1c3Rpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b21hc2xhdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9WaW5UaG9tYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvTWFuaWtSYXRoZWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGFuZ2F0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jZW1zaGlkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xlZW11bnJvZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fc2hhaGVkay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbmRhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0JpbGxTS2VubmV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RpdnlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2hoZW1zbGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NpbmRyZXNvcmh1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zb2ZmZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvOWxlc3NvbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGludXgyOS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9DaGFraW50b3NoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuYWFtaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3JlaXJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NoYWRlZWQ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Njb3R0a2NsYXJrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plZGJyaWRnZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FsbGVlZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmFrYXNpbmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJpaWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQnJpYW5QdXJraXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hhZWxtYXJ0aW5oby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9idWJsaWVua28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGV2YW5rb3NoYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvWmFjaGFyeVpvcmJhcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aW1taWxsd29vZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NodWFzb3J0aW5vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbWVubGVldHVya3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdG9tYXNfamFub3VzZWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGVycmhhYXNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1J1c3NlbGxCaXNob3AvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJhamVzaHdhci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYWNodG1laXN0ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2JyYWNjby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXJtb25wYWludGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FiZHVsbGluZGVuaXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXNhY29zdGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VwcmIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveWFsb3poa2luLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYW5kbGVydmR3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lhbWdhcnRoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL192aWN0YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb21tYWRlbGltaXRlZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb3liYXJiZXJ1ay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9heGVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZsYWRhcmJhdG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZmYmVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N5cm9waWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fua2l0aW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RyYW5lYmxvdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mbGFzaG11cnBoeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9DaHJpc0ZhcmluYTc4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhbGlvbWVnYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYXNjaGFtdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qbV9kZW5pcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbm9mZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rZW5ueWFkci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGF0eXJrby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaW5neWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWRzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RlcnJ5eGxpZmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWFyb25pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tpbmRheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wcnJzdG4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWR1YXJkb3N0dWFydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaGlsaXBzaXZhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0dhdmljb0luZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYWlyZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm9oaXh4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JpZ21hbmNoby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ibGFrZXNpbWtpbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVlaWlvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RqcnVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ViZXJzY2hpem8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3lsZWZvdW5kcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2xhdWRpb2d1Z2xpZXJpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JpcHBsZW1kay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9leGVudHJpY2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFrZW1vb3JlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvYW9lZHVtZWRlaXJvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wb29ybWluaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZXJlc2hlbmtvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rZXJ5aWxtYXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGF5ZG5fd29vZHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnVkZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sbHVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NnYXVyYXZfYmFnaGVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phbWllYnJpdHRhaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFkbGl0dGxlZHVjay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9waWZhZ29yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fncm9tb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVuZWZyaXR6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Vyd2FuaGVzcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGllc2VsbGF3cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJlbWlhaGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva29yaWRoYW5keS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFlbnNlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZXdjb2hlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zbWFjem55LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dvbnphbG9yb2JhaW5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hbmRpbmlfbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zeWRsYXdyZW5jZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jZGhhcnJpc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RnZXJrZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGV3aXNhaW5zbGllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYXJsaWVjd2FpdGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm9iYnNjaGlsbGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZsZXhycy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXR0ZGV0YWlscy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYXF1ZWx3aWxzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2Fyc2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXJtYXJ0aW5lYXUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3Buc3JjZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZ2hhcnJ5Z28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF4aW1zZXNodWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdXhhbGV4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbWloYWgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhbnBvcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hhcnZpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NlbWFycXVlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZWZmZmlzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tyeXN0YWxmaXN0ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9rZXNoX2NvZGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZWRhbWlhbmhkZXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHBtYWNoYWRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Z1bndhdGVyY2F0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RpbW90aHljZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pdmFuZmlsaXBvdmJnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BpY2FyZDEwMi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJjb2JhcmJvc2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3Jhc25vdWtob3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZzNkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkZW1pbHRlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yaWNrZHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3BlcmF0aW5vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J1bmdpd2FuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2h1Z29tYW5vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvZ29yYWRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RjX3VzZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaG9yYWNpb2JlbGxhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1NsYWFwTWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGVlcmFnaXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXFvbmljZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbHlhX3Blc3Rvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZXdhcnJvdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zc2lza2luZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0hlbnJ5SG9mZm1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZHNhdW5kZXJzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkYW1zeHUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3VyaW91c29mZmljZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVtYWRyYXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGlnYW5ncmFoYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva29oZXR0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWNrZnJhdHRlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydW5uaW5nc2t1bGwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFkeXNvbmRlc2lnbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJlbnRvbl9jbGFya2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVubnlzaGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyYWRlbmhhbW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3VydGluYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbWFucnV6YWluaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb3JleWhhZ2dhcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvS2FyaW1tb3ZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fhcm9uYWxmcmVkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3d0cnNsZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qaXRhY2hpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZXJlYWxtYXJ2aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcG1laXNzbmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29vb216LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYWNreTE0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plc3NlZGR5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoaW5tYXR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NoYW5laHVkc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FrbXVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0lzYXJ5QW1haXJhbmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJ0aHVyaG9sY29tYmUxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHljaGlwc3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ib3htb2RlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9laHNhbmRpYXJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0x1Y2FzUGVyZGlkYW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hhbHQwbmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3dhcGxvcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FlbGlmYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wbGJhYmluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2d1aWxsZW1ib3RpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FyaW5kYW1fLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JlbmJ5cmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpYWdvdmVybmV0dGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam1pbGxzcGF5c2JpbGxzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pa2VtYWkyYXdlc29tZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJ2by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZWthbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGExZXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm9iZXJnZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mZWxpcGVjc2wvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmVhMjExMDg3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dhcmFuZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaG9veWVuZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWJvdmVmdW5jdGlvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wY3JpZGVzYWdhaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmFuZG9tbGllcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9CcnlhbkhvcnNleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXlrZW5uZXRoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhaHBhcnJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsbHRoaW5nc3NtaXR0eS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW52ZXJub24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmV3ZWlucmVpY2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW5jcmVhc2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmFsdmFyYWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWx4bmRydXN0aW5vdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zb3V1Zi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vcmt1bmNheWxhci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9BTV9LbjIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2VhcnBpeGVscy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXNzYW1vbG9neS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aW1hcmV0aG9tYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva29zbWFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1NVTGlpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tcmphbWVzbm9ibGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2lsdmFubXVobGVtYW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NoYW5lSXhELzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hY2hvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3lpZ2l0cGluYXJiYXNpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J1enp1c2Jvcm5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fhcm9ua3doaXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JtbGV3aXN1ay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9naWFuY2FybG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25iaXJja2VsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rfbm55X21fY2hlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZGlkb25hdG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXRhcmlib3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWJvdGFwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thcmFsZWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHNkZXNpZ251ay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sdWR3aWN6YWtwYXdlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZW1hbmphaXZhbm92aWMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFsdWxpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FobWFkYWptaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92b3ZrYXNvbG92ZXYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FtZ3JvdmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlcmllbnpvNzc3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvbmF0aGFuc2ltbW9ucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZWxzb25qb3ljZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9TMHVmaTRuMy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci94dG9waGVycGF1bC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vYWt0cmVlbWVkaWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmF0ZXNjaHVsdGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmluZGluZ2plbm55LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hbWFua3JlYXRpdmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW50b255em90b3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2Vfc29jaWFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xlZWhhbWJsZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc29saWRfY29sb3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWJlbGNhYmFucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYmlsZGVyYmFjaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ra3VzYWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9yZHl2ZGJvb20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FybG9zZ2F2aW5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BlY2hraW5hdG9yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZjMjcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmRiYW5ub24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3JvYWt4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cmliYmxlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rZXJpaGVuYXJlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhdGFkZWxlb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2Ntb3JsZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHVpdnZ2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nhc2NoYWRyb3N0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWN0b3JEdWJ1Z3Jhcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93aW50b3BpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXR0Ymlsb3R0aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90YXlsb3JsaW5nLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21lZ2RyYXdzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21lbG4xa3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFobW91ZG1ldHdhbGx5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1NpbHZlcmVkZ2U5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlcmVrZWJyYWRsZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFwcHlwZXRlcjE5ODMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHJhdmlzX2Fybm9sZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcnRlbV9rb3N0ZW5rby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZG9iaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXlraWluZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGVrX2RqdXJpYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zY2lwcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWd1ZWxtZW5kZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVzdGlucmhlZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbHNvYnJvb2tzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Zyb254LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21jZmx5ZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbnRpX3Vyc28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxsZm9yZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0YXl1YmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JlcnRib2VybGFuZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJvc2hvbGx5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkYW1uYWMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3ludGhpYXNhdmFyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdXJpbmdhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbnJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hpZW1pbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYWNraWVzYWlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3phY3NuaWRlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pZHV1Y2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW50amFudXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJvb25fc2hhcm1hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RzaHN0ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlaGFja2VyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hhZWxicm9va3Nqci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yeWFubWNsYXVnaGxpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jbHViYjNycnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGF5YmVubG9yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3hyaXB1bm92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL215YXN0cm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRpdHlhc3V0b21vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RpZ2l0YWxtYXZlcmljay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oamFydHN0cm9ybi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pdG9sbWFjaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92YXVnaGFubW9mZml0dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYmRvdHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXNuaWZlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZXJnZXlzYWZvbm92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zY3JhcGRuYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaHJpc21qODMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdml0b3JsZWFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nva2FuaXdhYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvemFraTNkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lsbHl6b3Jlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tb2NhYnl0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vc21hbmluY2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGpzaGVybWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhdmlkaGVtcGhpbGwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2FnaG5lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZWNvZHltaWNvbmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ByYXZlZW5fdmlqYXlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZhYmJydWNjaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jbGlmZnNlYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHJhdmlzaGluZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3VsZGFya2FsdmlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0VsdF9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BoaWxsYXBpZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2tzZWFuamF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lkODM1NTU5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t1ZHJldGtlc2tpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmpoZXJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2R1Y2s0ZnVjay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zY290dF9yaWxleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ub3VmYWxpYnJhaGltLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2gxYnJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jvcmdlc19tYXJjb3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGV2aW5oYWxsYWRheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaWFyYW5yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZWZvb28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlrZWJlZWNoYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdG9ueW1pbGxpb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zaHVhcmFpY2h1ci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pcmFlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BldHJhbmdyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RtaXRyaXljaHV0YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFybGllZ2Fubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmFzaG1hbnRlZ2hpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkaGFtZGFubmF3YXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWluc2xleXdhZ29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N2ZW5sZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmFpc2FsYWJpZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXNodXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FybHlzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHV0Y2huYWRpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZWRkeXpldHRlcmx1bmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FtdWVsa3JhZnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW9pbWVkaWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdG9kZHJldy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2RlcG9ldF9ydS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcnR2YXZzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jlbm9pdGJvdWNhcnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9tYXJtZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva29sbWFybG9wZXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3JlYXJ0aW5jLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hvbWthLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dhYm9yZW50b24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm9iaW5jbGVkaWVyZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXhpbXNvcm9raW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGxhc3RpY2luZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qMmRlbWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVhY2hhbmFuci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXBhbHVjY2lvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlX2FzY2FuaW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmlrYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF3aWR3dS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJjb3JhbWlyZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5nZWxjcmVhdGl2ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ycGF0ZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcG9wZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmVoYXRrYXRodXJpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVfcHVycGxlYnVubnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvMW1hcmtpei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hamF4eV9ydS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmVubXVycmVsbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kdWRlc3RlaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3NrYXJsZXZpbnNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWN0b3JzdHViZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVoZnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmljaXZhZGVsaW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xlYW5kcm92YXJhbmRhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Njb3R0Z2FsbGFudC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWN0b3JfaGF5ZGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nhd3JiLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J5aGFuaGFzc2FuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FtYXl2cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hX2JyaXhlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXJvbGtyYWtvd2lha18vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGVya3VsYW5vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dlcmFuNy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jZ2dhdXJhdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaHJpc193aXRrby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb3Nvc2luYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wb2xhcml0eS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXR0bGF0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyYW5kb25idXJrZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb25zdGFudHgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGV5bG9yZmVsaXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3JhaWdlbGltZWxpYWgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmFjaGVscmV2ZWxleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZWFibzEwMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYWhtZWVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JpY2t5eWVhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qMDRudG9oLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NwYnJvbWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2ViYXNodG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pwZW5pY28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZnJhbmNpc192ZWdhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29rdGF5ZWxpcGVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tpa2lsbG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmFiYmlhbnovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGFycnlnZXJhcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQnJvdW1pWW91c3NlZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci8wdGhlcnBsYW5ldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYmlsYWxzaWRkaXF1ZTEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW9udXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dycnJfbmwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGltaW5oYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYXdkaWdnaWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnlhbmRvd25pZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZXRobG91ZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGl4YWdlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FycGl0bmovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3dpdG1lcjc3Ny8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3Nldm5jbGNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thbmlja2FpcmFqLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3B1emlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RiYWtkZXNpZ25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jlc2J1anVwaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdXBqb2V5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvd2llLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xpbmtpYm9sLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhbGludG9yb3N6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ltY29kaW5nLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FndXN0aW5jcnVpei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ndXNvdG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhvbWFzc2NocmlqZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VwZXJvdXRtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FsbWVycmF1dGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dhYnJpZWxpemFsby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nb2plYW55bi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXZpZGJhbGRpZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fdm9qdG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGF1cmVuZ3JheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qeWRlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9teW15Ym95LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lbGxsZW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyY2lvdG9sZWRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pbmphZDNtMC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b19zb2hhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYXNzbHVuc2ZvcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXVyaWRyYWhoYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGV2aXNhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ncmFoYW1rZW5uZXJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xlcGV0aXRvZ3JlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FudG9uZ2Vua2luLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lc3NvaWxhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FtYW5kYWJ1emFyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWZyYW5rb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29jb2xlcm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHNzNDkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0dDMyMjQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmx1ZXNpeC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9xdWFpbGFuZHF1YXNhci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9BbGJlcnRvQ29jb2NpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xlcGluc2tpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NlbWVudGl5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21odWRvYml2bmlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoaWJhdXRfcmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2xnYXJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nob2piZXJnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL210b2xva29ubmlrb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVyZXRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hdXBpbnRvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZWdvdHZpY2VzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3hhZGhpeC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWN4aW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm9kbnlsb2Jvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWRjYW1wb3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFkZWJ5dmFkaW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFydG9zemRhd3lkemlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cGVydm92YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJrcmV0emxvZmYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdm9uYWNob28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFyeWx3cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGV2ZWRlc2lnbmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL215bGVzYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXJiaWd0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlcGF1bGF3YWduZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2VzaGFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dpem1lZWRldmlsMTk5MS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fc2NvdHRidXJnZXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xpc292c2t5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rhdmlkc2FzZGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJ0ZF9zaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1lvdW5nQ3V0bGFzcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZ29udG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXRzdG90YWxseWFteS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWN0b3JxdWlubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vc21vbmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2tzYW5hZnJld2VyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3phdWVya3JhdXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWFta2VpdGhtYXNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaXRpbmhheWFyYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG1qYWJyZXUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFuZGFsYXJlb3BlbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpbmtsZWZ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BvbmNob21lbmRpdmlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1YW1wZXJyby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icnVub2Rlc2lnbjEyMDYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FzZXljYXZhbmFnaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sdXhlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RvdGdyaWRsaW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NwZWR3aWcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFkZXd1bGYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0dHNhcGlpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlbGRlcmxlYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hyaXNzdHVtcGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamF5cGhlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uc2Ftb3lsb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hyaXN2YW5kZXJrb29pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1c3RtZV90aW1vdGh5Zy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vdG96ay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wcmluemFkaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ndTV0YWYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3lyaWxfZ2FpbGxhcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZF9rb2JlbHlhdHNreS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW5pbG9jLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL253ZHNoYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb21hbmJ1bGFoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nra2lyaWxvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kdmR3aW5kZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFubm9sLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZWtldmluam9uZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvandhbHRlcjE0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RpbWd0aG9tYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnVkZGhhc291cmNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3V4cGlwZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhhdG9uZXRvbW15LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RpYW5zaWdpdHAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRyaWVudGhzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tsaW1ta2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2thYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVyZWtjcmFtZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVubnl5by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZXJyc29mdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci94YWxpb25tYWxpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lZGhlbmRlcnNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rZXl1cmk4NS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb3hhbmVqYW1tZXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2ltY29vbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lZGtmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdGtpbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxlc3NhbmRyb3JpYmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFja3NvbmxhdGthLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xlYnJvbmplbm5hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb3N0YXNwdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXJsa2FuYWxsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21veW5paGFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbnBsaWVnby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYXVsaWhpcnZpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dlc2xleXRyYW5raW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmphZ3Vlcm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm93YnJpY2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFzaGFhYWFhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95YXNzaXJ5YWh5YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kcGFycmVsbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZm90b21hZ2luLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FrYV9qYW1lcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZW5pc2VwaXJlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pcWJhbHBlcmthc2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFydGluYW5zdHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFyc2VuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Jfb3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVzdGlucm9iLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dhYnJpZWxyb3NzZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFsZ29yZG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhcmxmYWlyY2xvdWdoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hhZWxhYmVoc2VyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9waWVycmVzdG9mZmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW5qb3l0aGV0YXUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9nYW5qbGFtYmVydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ycGVlenkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29yZXlnaW5uaXZhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoYWxocm9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21zdmVldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saW5nZXN3YXJhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb2xzdmVpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZXRlcjU3Ni8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZWlkZWlyZWRhbGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9leW11cmRhaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYXBoYWVsbmlrc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL212ZGhldXZlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXhsaW5kZXJtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamltbXVpcmhlYWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVncmVhdGl2ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mcmFua2llZnJlZXNiaWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm9idHVybGluY2t4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1RhbGJpX0NvblNlcHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9uZ2xpdmVteXdvcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmFuY2hlc3ovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFpa2xhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXJtYW5vYnJvdGhlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZXpfX19hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dyZWdzcXVlZWIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3JlZW5iZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3JhZ3pvci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbnRob255c3Vrb3cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmx1aWRicnVzaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYWN0cnRyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plaG5nbHlubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXJnbWFydGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2h1Z29jb3JuZWpvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL19ra2dhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2R6YW50aWV2bS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYXdhbGF6YXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc292ZXNvdmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9uc2dvdHdvb2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnlyeWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Z5dGF1dGFzX2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWl6aGdhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaWNlcm9ici8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWxzaGVsbWVyc3Nvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kMzNwdGhvdWdodC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXZlY3JhaWdlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25ja2pydnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxleGFuZGVybWF5ZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamN1YmljLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NyYWlncmNvbGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhZ2F3YXJtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm9iX3Rob21hczEwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvZmxhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21haWtlbGsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnRnaWJib25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J1c3NlbGxfYmF5bGlzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21oZXNzbG93LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvZHlzYW5maWxpcHBvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dlYnRhbnlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZGVieWJyZW50b24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGNhbG9uYWNpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BlcmZlY3RmbG93LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pqc2lpaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWFyYWJwcmVldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdW1hcnJhamFuMTIxMjMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWFtc3RlZmZlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVtaWtlbmFnbGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2Vla2F5dHdlZXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGFycnlib2x0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbnNwaXJhdG9yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbGxhc2JwZXRlcnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbjNkbWF4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RlcnBpbW9zdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raXJpbGx6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J5cm5lY29yZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qX2RyYWtlXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYWxlYmpveWNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J1c3NvZWR1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hvYW5nbG9pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RvYnlzYXhvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nb2ZyYXNkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGltYXBvc255eS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90amlzb3VzYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9va2FuZHVuZ2VsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JpbGx5cm9zaGFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29za2FtYXlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21vdGlvbnRoaW5rcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rbmlsb2IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXNob2NrYTE4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcnJpbW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFydGpvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29tbml6eWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXJuZXN0c2VtZXJkYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZWFzX3ByLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VkZ2FyY2hyaXM5OS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aG9tYXNnZWlzZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3NlZ3Vpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2FubmVmb3Vybmllci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZW1lcnNkZXNpZ25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkYW1tYXJzYmFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hc2lyd2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbl90YXNzb25lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phdm9yc3preS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVtcmRhdmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveWVjaWRzbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWNvbGxlcmljaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYW5hcHVkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pY29sZWdseW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1ZHpoaW5fbWlsZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVzaWduZXJ2em0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2lhbm9zaHAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXZhbmRyaXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWx0ZXJjaHVjYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaHJ1Ym8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFfdGlheC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zc2JiX21lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RvcnBoZXJuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdXJpb2xnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JydW5vX21hcnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFjdG9wdXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlX3dpbnNsZXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9lbWRlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9TaHJpaWlpaW1wLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phY29iYmVubmV0dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZmVkb3JvZmYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWFtZ2xpbXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxsYWdyaW5nYXVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FpaWFpaWFpaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vbGFvbHVzb2dhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J1cnlha25pY2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2ltMWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmlja2xhY2tlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ExY2hhcG9uZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGV5bnZpbGpvZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RyaWtld2FuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J5YW5raXJrbWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJld2Fib2dhZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG9vb29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phZ2FuMTIzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FyaWZmc2V0aWF3YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWxlbmFkaXNzaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9td2Fya2VudGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoaWVycnltZWllcl8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcl9nYXJjaWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG1hY2tlcm1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ib3JhbnR1bGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva29udXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3BhY2V3b29kXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yeXVjaGkzMTEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXZhbnNoYWplZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90cmlzdGFubGVncm9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nob2FpYjI1My8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haXNsaW5ua2VsbHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2tjb2tlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aW1wZXRyaWNvbGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3Vuc2hpbmVkZ2lybC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFkYW1pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZWNsYXJzb25pdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ub21pZGVzaWducy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZXRlYmVybmFyZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2NvdHRpZWR1ZGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlsbGluZXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW1zb3Blci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbWFtbXVodC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZW5qYW1pbl9rbmlnaHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVwZHVkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pva2k0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xhbmNlZ3V5YXR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jib3kxODk1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FteXdlYmJiLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J3ZXZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhcnVpbnRlc2V0dGRlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yaWNidXJ0b24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVsc2hkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhdHNpcmFpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ByaW1vemNpZ2xlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZmZncmRuci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci84ZDNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dlbmVzZWxlem5ldi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbF9saS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zb3VwZXJwaGx5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21zbGFya2luYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci8yZm9ja3VzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NkYXZpczU2NS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci94aWVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3R1cmt1dHV1bGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdXh3YXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xlYmlub2NsYXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dhdXJhdmphc3NhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXZpZG1lcnJpcXVlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21kc2lzdG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmV3b2ZmaWNlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb2pvdXJpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kbmlybWFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tldmthLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21yX3NoaXpuaXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWx1aXNpb19hemV2ZWRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nsb3Vkc3R1ZGlvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbnZpZXJpY2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxleGl2YW5pY2hraW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZnJhbl9tY2hhbXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVycmV0bWFnYWxpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JldHJheWRhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYWRpa2thcmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0YmVlZG90Y29tLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcmVteXdvcmJveXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnBhcnRyaWRnZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoYWVsa29wZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2lsdjNyZ3ZuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZXZpemlvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvaG5zbWl0aGFnZW5jeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYXdsYndveS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aXRvcjM3Ni8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXNhc3Ryb3pvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoaW1vX2N6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phc29ubWFya2pvbmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xoYXVzZXJtYW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3hyYXZpbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ndWlzY2htaXR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpZ29icm9ueC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wYW5naGFsMC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWd1ZWxrb29yZW1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdXJnZW9uaXN0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NocmlzdGlhbm9saWZmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nhc3BlcmdybC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pYW1rYXJuYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pcGF2ZWxlay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9waWVycmVfbmVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3kyZ3JhcGhpYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGVybGluZ3J1bGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VsYnVzY2FpbmZvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jlbm55amllbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdHVzaG9uYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lc3RlYmFudXJpYmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW1icmNlY3JlYXRpb25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbmlsbG9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VsbGlvdGxld2lzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYXJsZXNycHJhdHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmxhZHluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VtbWVmZmVzcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJsb3NibGFuY29fZXUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVvbmZlZG90b3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmFuZ2FmYW5ncy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaHJpc19mcmVlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90Z29ybXR4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyeWFuX3RvcGhhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qcHNjcmliYmxlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWdodHk1NS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJib250d2VsdmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXNhYWNmaWZ0aC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pYW1qZGVsZW9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nub3d3cml0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXJwdXRyby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kcmV3YnlyZWVzZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWNoYWNvcmF6emkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmlzdHJpYW5pb3NpcC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWdvbzA0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BlaGFtb25kZWxsby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95YXl0ZWVqYXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYV9oYXJyaXM4OC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGd1bnNhbmFicmlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3pmb3JyZXN0ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3ZhbGwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FybG9zamdzb3VzYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nZW9iaWthcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haF9saWNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvb25leWRvb2RsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZXJkZ3I4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RkZ2djY2FhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3phY2tlZWxlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ub3JtYW5ib3gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWxfZnVlcnRpc2ltby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pc21haWxfYmlsdGFnaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdWFuZ29tZXp3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pubW5yZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wYXRyaWNrY29vbWJlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J5YW5qb2huc29uX21lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmtvbHNjaGVza3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVmZmdvbGVuc2tpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t2YXNuaWMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGluZHNleXppbGxhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dhdWNob21hdHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWZ1c2luYXR0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rZXZpbm9oLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29rYW5zdXJyZWVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkYW1hd2Vzb21lZmFjZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbWlsZWJvdWRlbGluZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmlzaGlfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1YW5tYW1hcnRpbmV6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dpa2l6aW5lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW50aG1zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21rZ2luZm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGVycm9ycGl4ZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3VyaW91c29uYXV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ByaGVlbW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFlbGNvbGVuc28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZm9jenppLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcnRpcDA3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoYW9kYW5nMTcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9obmNhZmF6emEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm9iaW5sYXlmaWVsZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mcmFuY2lzY29hbWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWJkdWxoeWV1ay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJrbGFtYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lZG9iZW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJlc2VuZnJlZHJpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWthZWxqb3JodWx0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nocmlzc2xvd2lrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpbmNpYXJ0cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZWVsZm9yZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbGxpb3Rub2x0ZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveWVodWRhYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWpheWthcnRoaWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmZyb2hzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2VwX21hcnRpbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXR0YWNrcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdXI0ZHllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3R1bXNraS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbnN0YWxveC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYW5nb3NhbmdvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BhdWxmYXJpbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2F6YWt5OTk5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tpd2l1cG92ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbnZrem5lbW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdG9tX2V2ZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmF0YnVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dvb2RzbWFuMDAxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2htZWRlc2tpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZXdpbGxiZWFyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wc2Fpa2FsaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2VfYmxhY2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxlaW5hZHNheXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyY3VzZ29yaWxsaXVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hvdGFfdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZ2h5bGxlYmVydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGluemUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFucGFsb3VuZWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVyZW1pZXNwb2tlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXJfcnV1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbnNvd3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mZWxpcGVhcGlyZXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZ3VnemJyYW5kMmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcG9zdGVyam9iLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hdGhhbGllX2ZzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JvYmJ5dHdvc2hvZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHJlaXpsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJlbXltb3V0b24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWxpc2FiZXRoa2phZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbm90YmFkYXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21vaGFucm9oaXRoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2psc29sZXJkZWx0b3JvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2l0c2thd3Nhci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zbG93c3BvY2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvenZjaGtlbGx5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dpbGphbnNsb2ZzdHJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NyYWlnaGVubmViZXJyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90cnViZWF0dG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVhdW1sb2wvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2Ftc2NvdXRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0Jlbm91YXJyYWRlTS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9naXBzeV9yYWYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmV0b25ldF9pbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmtva29sZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXRzYWppbWl0aGluZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zbWFsb25zby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWN0b3JkZWFuZGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX2R3aXRlXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yaWNoYXJkZ2FycmV0dHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3JlZ3J3aWxraW5zb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5hdG9saW5pY29sYWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbHU0c2gxaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGVmYW5vdGlybG9uaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vc3RpcmJ1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhcmN5c3RvbmdlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25haXRhbmFtb3Jlbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFlbGNvbWlza2V5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkaGlhcmRhbmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyY29tYW5vXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXZpZGNhemFsaXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmFsY29uZXJpZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ncmVna2lsaWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JjcmFkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JvbHphbm1hcmNvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvd19yZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmxhamtpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BldGFyX3Byb2cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9ua3Nwci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ha21hbGZpa3JpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21mYWNjaGluZWxsby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hdGFuaXNtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhcnJ5X3Npc3RhbGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211cnJheXN3aWZ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JvYndhc3Nlcm1hbm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2F2cjFsMC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWRzaGVuc2VsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21yX3N1YnRsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXZpbGpob18vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FsaW1pYW5vZmYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9ldHJ1ZXNkZWxsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3R3aXR0eXBvcmsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWlyc2t5bGFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RuZXprdW1hci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZ2FqamFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoZXJpZl9iLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbHZhZmMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG91aXNfY3VycmllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlZWVucmlnaHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3liaW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2V5cm9ubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWNreXNoaXRzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N3ZWV0ZGVsaXNhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nib2xsZXIxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJlc2RqYXNzby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZWx2aW5kaWRpdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmR5c29sb21vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGFpc3NlbGVuYXRvcl8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbHZvdmVub2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2l1bGl1c2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVseWFldl9ycy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vdmVyY2xvYWNrZWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FtYWxfY2hhbmVtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW5jdWJvODIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGVsbG9mZXZlcnJyci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taGFsaWdvd3NraS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdW5sYW5kaWN0d2luLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J1NzkyMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmR5dGxhdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJlbWVyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9maW5jaGprZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYW5pZ20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdW11cmdkay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zY290dGZlbHRoYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2Fuc2VyZW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211dHVfa3Jpc2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9keXRhZ2dhcnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbnRmYmxvZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90YW52ZWVycmFvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hmYWx1Y2FzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FseGxlcm95ZGV2YWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3VjaW5nYmVsYW5nNC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXJnYW9yb2JhbG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29sZ3J1di8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGFsZXdpbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3lsZWZyb3N0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhdW1hbm56b25lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZ2VsY29sYmVyZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWNoaW5nYXdhcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qanNoYXcxNC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYW1hbmF0aGFuX3BkeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2huZGV6ZW1iZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmlsc2hvZW5zb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJhbmRvbm1vcnJlYWxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL251dHp1bWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJhbmRvbmZsYXRzb2RhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NlcmdleWFsbW9uZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rbGVmdWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2lyYW5nb3BhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXVtYW5uX2FsZXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0dGhld2theV8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamF5X3dpbGJ1cm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hlc2dhcmVkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FwcmllbmRlYXUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9obnJpb3JkYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2FrZV9ncy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGVrc2l0YXBwdXJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Vtc2d1bGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3hpbGFudHJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ltb21lbnVpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NpcmNhbGViZ3JvdmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmV3YnJ1c2hlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oc2lueW8yMy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tNHJpby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXRpZW1kYWx5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3M0ZjEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWNvbW1lcmNlaWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFybGluamF5YWtvZHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3dvb3NoeWN1ZWIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FuZ2R0aC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2RlcmRpYXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmx1ZWZ4Xy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aXZla3BydnIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FzaGFfc2hlc3Rha292LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2V1Z2VuZWV3ZWIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGdjbGVnZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uMWdodF9jb2Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaXhjaGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JsYWtlaGF3a3N3b3J0aC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90cnVlYmxvb2RfMzMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFpX25pbmhfbmd1eWVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmNsZ29uemFsZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveWVzbWVjay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGVwaGNvdWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG9yb25tYWxraS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydWVobGRlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmFzbmFrYXdhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tpamFubWFoYXJqYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2VhcmVzYXZhcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGVmdmRoYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHdlZXR1YmhhaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGVjYXJwZW50aWVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZpdGVyaWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW50b255cnluZHlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2QwMG1hei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVvbmx5emVrZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taXNzYWFhbXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FybG9zbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYW5la2VudGhlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JlZXRhamF5ZW5kcmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVyZW15c2hpbWtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1c3RpbnJncmFoYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RlZmFub3pvZmZvbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3ZlcnJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21yZWJheTAwNy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaHZlbG85Ni8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9weXJvbml0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVkanBldGVyc2VuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J0eXVrbWFldi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fd2lsbGlhbWd1ZXJyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGJlcnRhdWd1c3Rpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWthc2hwYXRoYWsxOC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rZXZpbmpvaG5kYXl5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZqX2RlbWllbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2xpcnBpeG9pbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nb2RkYXJkbGV3aXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGFhc2xpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pxaXVzcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXljYW10YXlsb3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFzdHlhX21hbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFzdGVybWluZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NjaW5vamFzc28xLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL255YW5jZWNvbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW5keXdvb2RydWZmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JpZ2hhbmRkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2J0cmFuc3BhcmVudC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hdmlkZGF5ZW50b25iYXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmljaHdpbGQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2F5c2l4X2Rpenp5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3R1cjhsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZXllZGhvc3NlaW4xLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ByaXZldHdhZ25lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbW1hbmRlbm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGV2X2Vzc2VudGlhbHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam1mc29jaWFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL195YXJkZW5vb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0ZWFvZHZpdGV6YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZWF2ZXJtZWRpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdWZhZGRhbF9tdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYWZlZXNraGFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FzaGVybmF0YWxpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1bGFxby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lZGRpZWNoZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zZWNhcmxvc3BzaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92bV9mLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Vucmljb2NpY2NvbmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFubWFydGluNzAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ21vdXJpZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG9uamFpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tcnhsb2thLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL19wZWRyb3BpbmhvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VpdGFyYWZhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29zY2Fyb3d1c3UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmFscGhfbGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BhbmNoYWphbnlhZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93b29keWRvdG14LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcnJ5YmFpMTkwNy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJzaGFsbGNoZW5fLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3hhbW9yZXAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWlvX19fLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYWFiYW5lX3dhaWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHhjeC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ha2FzaHNoYXJtYTM5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZhbGxpbmdfc291bC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWlucmFqYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdWd1a2FtaWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9oYW5uZXNuZXUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFya3dpZW5hbmRzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thcnRoaXBhbnJhai8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYWxha2F5dXJpeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGFuX3poYW5nXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYXllcnNzc3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FzcGVybm9yZGt2aXN0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pcmZhbnF1cmVzaGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFubmFfc21pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1ZNaWxlc2N1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Flb241Ni8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tX2thbGlicnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3JlZWppdGhleHAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGljZXNhbGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rob290X2FtaXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc21lbm92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvbmVzb21lbGVtb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmxhZGltaXJkZXZpYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2VsY2lwcmlhbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFsaWdhbGloYXJ1bi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9idWxlc3dhcG5pbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZXJlZmthLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lmYXJhZm9ub3cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmlrYXN2aW5mb3RlY2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdXJydXRpbWVvbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJlYW5kYWNvbS8xMjguanBnXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImNvbVwiLFxuICBcImJpelwiLFxuICBcImluZm9cIixcbiAgXCJuYW1lXCIsXG4gIFwibmV0XCIsXG4gIFwib3JnXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImdtYWlsLmNvbVwiLFxuICBcInlhaG9vLmNvbVwiLFxuICBcImhvdG1haWwuY29tXCJcbl07XG4iLCJ2YXIgaW50ZXJuZXQgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gaW50ZXJuZXQ7XG5pbnRlcm5ldC5mcmVlX2VtYWlsID0gcmVxdWlyZShcIi4vZnJlZV9lbWFpbFwiKTtcbmludGVybmV0LmRvbWFpbl9zdWZmaXggPSByZXF1aXJlKFwiLi9kb21haW5fc3VmZml4XCIpO1xuaW50ZXJuZXQuYXZhdGFyX3VyaSA9IHJlcXVpcmUoXCIuL2F2YXRhcl91cmlcIik7XG4iLCJ2YXIgbG9yZW0gPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gbG9yZW07XG5sb3JlbS53b3JkcyA9IHJlcXVpcmUoXCIuL3dvcmRzXCIpO1xubG9yZW0uc3VwcGxlbWVudGFsID0gcmVxdWlyZShcIi4vc3VwcGxlbWVudGFsXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJhYmJhc1wiLFxuICBcImFiZHVjb1wiLFxuICBcImFiZW9cIixcbiAgXCJhYnNjaWRvXCIsXG4gIFwiYWJzY29uZGl0dXNcIixcbiAgXCJhYnNlbnNcIixcbiAgXCJhYnNvcmJlb1wiLFxuICBcImFic3F1ZVwiLFxuICBcImFic3RlcmdvXCIsXG4gIFwiYWJzdW1cIixcbiAgXCJhYnVuZGFuc1wiLFxuICBcImFidXRvclwiLFxuICBcImFjY2Vkb1wiLFxuICBcImFjY2VuZG9cIixcbiAgXCJhY2NlcHR1c1wiLFxuICBcImFjY2lwaW9cIixcbiAgXCJhY2NvbW1vZG9cIixcbiAgXCJhY2N1c2F0b3JcIixcbiAgXCJhY2VyXCIsXG4gIFwiYWNlcmJpdGFzXCIsXG4gIFwiYWNlcnZ1c1wiLFxuICBcImFjaWR1c1wiLFxuICBcImFjaWVzXCIsXG4gIFwiYWNxdWlyb1wiLFxuICBcImFjc2lcIixcbiAgXCJhZGFtb1wiLFxuICBcImFkYXVnZW9cIixcbiAgXCJhZGRvXCIsXG4gIFwiYWRkdWNvXCIsXG4gIFwiYWRlbXB0aW9cIixcbiAgXCJhZGVvXCIsXG4gIFwiYWRlcHRpb1wiLFxuICBcImFkZmVjdHVzXCIsXG4gIFwiYWRmZXJvXCIsXG4gIFwiYWRmaWNpb1wiLFxuICBcImFkZmxpY3RvXCIsXG4gIFwiYWRoYWVyb1wiLFxuICBcImFkaHVjXCIsXG4gIFwiYWRpY2lvXCIsXG4gIFwiYWRpbXBsZW9cIixcbiAgXCJhZGludmVudGl0aWFzXCIsXG4gIFwiYWRpcGlzY29yXCIsXG4gIFwiYWRpdXZvXCIsXG4gIFwiYWRtaW5pc3RyYXRpb1wiLFxuICBcImFkbWlyYXRpb1wiLFxuICBcImFkbWl0dG9cIixcbiAgXCJhZG1vbmVvXCIsXG4gIFwiYWRtb3Zlb1wiLFxuICBcImFkbnVvXCIsXG4gIFwiYWRvcHRvXCIsXG4gIFwiYWRzaWR1ZVwiLFxuICBcImFkc3RyaW5nb1wiLFxuICBcImFkc3Vlc2NvXCIsXG4gIFwiYWRzdW1cIixcbiAgXCJhZHVsYXRpb1wiLFxuICBcImFkdWxlc2NlbnNcIixcbiAgXCJhZHVsdHVzXCIsXG4gIFwiYWR1cm9cIixcbiAgXCJhZHZlbmlvXCIsXG4gIFwiYWR2ZXJzdXNcIixcbiAgXCJhZHZvY29cIixcbiAgXCJhZWRpZmljaXVtXCIsXG4gIFwiYWVnZXJcIixcbiAgXCJhZWdyZVwiLFxuICBcImFlZ3JvdGF0aW9cIixcbiAgXCJhZWdydXNcIixcbiAgXCJhZW5ldXNcIixcbiAgXCJhZXF1aXRhc1wiLFxuICBcImFlcXV1c1wiLFxuICBcImFlclwiLFxuICBcImFlc3Rhc1wiLFxuICBcImFlc3RpdnVzXCIsXG4gIFwiYWVzdHVzXCIsXG4gIFwiYWV0YXNcIixcbiAgXCJhZXRlcm51c1wiLFxuICBcImFnZXJcIixcbiAgXCJhZ2dlcm9cIixcbiAgXCJhZ2dyZWRpb3JcIixcbiAgXCJhZ25pdGlvXCIsXG4gIFwiYWdub3Njb1wiLFxuICBcImFnb1wiLFxuICBcImFpdFwiLFxuICBcImFpdW50XCIsXG4gIFwiYWxpZW51c1wiLFxuICBcImFsaWlcIixcbiAgXCJhbGlvcXVpXCIsXG4gIFwiYWxpcXVhXCIsXG4gIFwiYWxpdXNcIixcbiAgXCJhbGxhdHVzXCIsXG4gIFwiYWxvXCIsXG4gIFwiYWx0ZXJcIixcbiAgXCJhbHR1c1wiLFxuICBcImFsdmV1c1wiLFxuICBcImFtYXJpdHVkb1wiLFxuICBcImFtYml0dXNcIixcbiAgXCJhbWJ1bG9cIixcbiAgXCJhbWljaXRpYVwiLFxuICBcImFtaWN1bHVtXCIsXG4gIFwiYW1pc3Npb1wiLFxuICBcImFtaXRhXCIsXG4gIFwiYW1pdHRvXCIsXG4gIFwiYW1vXCIsXG4gIFwiYW1vclwiLFxuICBcImFtb3Zlb1wiLFxuICBcImFtcGxleHVzXCIsXG4gIFwiYW1wbGl0dWRvXCIsXG4gIFwiYW1wbHVzXCIsXG4gIFwiYW5jaWxsYVwiLFxuICBcImFuZ2VsdXNcIixcbiAgXCJhbmd1bHVzXCIsXG4gIFwiYW5ndXN0dXNcIixcbiAgXCJhbmltYWR2ZXJ0b1wiLFxuICBcImFuaW1pXCIsXG4gIFwiYW5pbXVzXCIsXG4gIFwiYW5udXNcIixcbiAgXCJhbnNlclwiLFxuICBcImFudGVcIixcbiAgXCJhbnRlYVwiLFxuICBcImFudGVwb25vXCIsXG4gIFwiYW50aXF1dXNcIixcbiAgXCJhcGVyaW9cIixcbiAgXCJhcGVydGVcIixcbiAgXCJhcG9zdG9sdXNcIixcbiAgXCJhcHBhcmF0dXNcIixcbiAgXCJhcHBlbGxvXCIsXG4gIFwiYXBwb25vXCIsXG4gIFwiYXBwb3NpdHVzXCIsXG4gIFwiYXBwcm9ib1wiLFxuICBcImFwdG9cIixcbiAgXCJhcHR1c1wiLFxuICBcImFwdWRcIixcbiAgXCJhcXVhXCIsXG4gIFwiYXJhXCIsXG4gIFwiYXJhbmVhXCIsXG4gIFwiYXJiaXRyb1wiLFxuICBcImFyYm9yXCIsXG4gIFwiYXJidXN0dW1cIixcbiAgXCJhcmNhXCIsXG4gIFwiYXJjZW9cIixcbiAgXCJhcmNlc3NvXCIsXG4gIFwiYXJjdXNcIixcbiAgXCJhcmdlbnR1bVwiLFxuICBcImFyZ3VtZW50dW1cIixcbiAgXCJhcmd1b1wiLFxuICBcImFybWFcIixcbiAgXCJhcm1hcml1bVwiLFxuICBcImFybW9cIixcbiAgXCJhcm9cIixcbiAgXCJhcnNcIixcbiAgXCJhcnRpY3VsdXNcIixcbiAgXCJhcnRpZmljaW9zZVwiLFxuICBcImFydG9cIixcbiAgXCJhcnhcIixcbiAgXCJhc2Npc2NvXCIsXG4gIFwiYXNjaXRcIixcbiAgXCJhc3BlclwiLFxuICBcImFzcGljaW9cIixcbiAgXCJhc3BvcnRvXCIsXG4gIFwiYXNzZW50YXRvclwiLFxuICBcImFzdHJ1bVwiLFxuICBcImF0YXZ1c1wiLFxuICBcImF0ZXJcIixcbiAgXCJhdHF1aVwiLFxuICBcImF0cm9jaXRhc1wiLFxuICBcImF0cm94XCIsXG4gIFwiYXR0ZXJvXCIsXG4gIFwiYXR0b2xsb1wiLFxuICBcImF0dG9uYml0dXNcIixcbiAgXCJhdWN0b3JcIixcbiAgXCJhdWN0dXNcIixcbiAgXCJhdWRhY2lhXCIsXG4gIFwiYXVkYXhcIixcbiAgXCJhdWRlbnRpYVwiLFxuICBcImF1ZGVvXCIsXG4gIFwiYXVkaW9cIixcbiAgXCJhdWRpdG9yXCIsXG4gIFwiYXVmZXJvXCIsXG4gIFwiYXVyZXVzXCIsXG4gIFwiYXVyaXNcIixcbiAgXCJhdXJ1bVwiLFxuICBcImF1dFwiLFxuICBcImF1dGVtXCIsXG4gIFwiYXV0dXNcIixcbiAgXCJhdXhpbGl1bVwiLFxuICBcImF2YXJpdGlhXCIsXG4gIFwiYXZhcnVzXCIsXG4gIFwiYXZlaG9cIixcbiAgXCJhdmVydG9cIixcbiAgXCJhdm9jb1wiLFxuICBcImJhaXVsdXNcIixcbiAgXCJiYWxidXNcIixcbiAgXCJiYXJiYVwiLFxuICBcImJhcmR1c1wiLFxuICBcImJhc2l1bVwiLFxuICBcImJlYXR1c1wiLFxuICBcImJlbGxpY3VzXCIsXG4gIFwiYmVsbHVtXCIsXG4gIFwiYmVuZVwiLFxuICBcImJlbmVmaWNpdW1cIixcbiAgXCJiZW5ldm9sZW50aWFcIixcbiAgXCJiZW5pZ25lXCIsXG4gIFwiYmVzdGlhXCIsXG4gIFwiYmlib1wiLFxuICBcImJpc1wiLFxuICBcImJsYW5kaW9yXCIsXG4gIFwiYm9udXNcIixcbiAgXCJib3NcIixcbiAgXCJicmV2aXNcIixcbiAgXCJjYWRvXCIsXG4gIFwiY2FlY3VzXCIsXG4gIFwiY2FlbGVzdGlzXCIsXG4gIFwiY2FlbHVtXCIsXG4gIFwiY2FsYW1pdGFzXCIsXG4gIFwiY2FsY2FyXCIsXG4gIFwiY2FsY29cIixcbiAgXCJjYWxjdWx1c1wiLFxuICBcImNhbGxpZGVcIixcbiAgXCJjYW1wYW5hXCIsXG4gIFwiY2FuZGlkdXNcIixcbiAgXCJjYW5pc1wiLFxuICBcImNhbm9uaWN1c1wiLFxuICBcImNhbnRvXCIsXG4gIFwiY2FwaWxsdXNcIixcbiAgXCJjYXBpb1wiLFxuICBcImNhcGl0dWx1c1wiLFxuICBcImNhcHRvXCIsXG4gIFwiY2FwdXRcIixcbiAgXCJjYXJib1wiLFxuICBcImNhcmNlclwiLFxuICBcImNhcmVvXCIsXG4gIFwiY2FyaWVzXCIsXG4gIFwiY2FyaW9zdXNcIixcbiAgXCJjYXJpdGFzXCIsXG4gIFwiY2FybWVuXCIsXG4gIFwiY2FycG9cIixcbiAgXCJjYXJ1c1wiLFxuICBcImNhc3NvXCIsXG4gIFwiY2FzdGVcIixcbiAgXCJjYXN1c1wiLFxuICBcImNhdGVuYVwiLFxuICBcImNhdGVydmFcIixcbiAgXCJjYXR0dXNcIixcbiAgXCJjYXVkYVwiLFxuICBcImNhdXNhXCIsXG4gIFwiY2F1dGVcIixcbiAgXCJjYXZlb1wiLFxuICBcImNhdnVzXCIsXG4gIFwiY2Vkb1wiLFxuICBcImNlbGVicmVyXCIsXG4gIFwiY2VsZXJcIixcbiAgXCJjZWxvXCIsXG4gIFwiY2VuYVwiLFxuICBcImNlbmFjdWx1bVwiLFxuICBcImNlbm9cIixcbiAgXCJjZW5zdXJhXCIsXG4gIFwiY2VudHVtXCIsXG4gIFwiY2Vybm9cIixcbiAgXCJjZXJudXVzXCIsXG4gIFwiY2VydGVcIixcbiAgXCJjZXJ0b1wiLFxuICBcImNlcnR1c1wiLFxuICBcImNlcnZ1c1wiLFxuICBcImNldGVyYVwiLFxuICBcImNoYXJpc21hXCIsXG4gIFwiY2hpcm9ncmFwaHVtXCIsXG4gIFwiY2lib1wiLFxuICBcImNpYnVzXCIsXG4gIFwiY2ljdXRhXCIsXG4gIFwiY2lsaWNpdW1cIixcbiAgXCJjaW1lbnRhcml1c1wiLFxuICBcImNpbWluYXRpb1wiLFxuICBcImNpbmlzXCIsXG4gIFwiY2lyY3VtdmVuaW9cIixcbiAgXCJjaXRvXCIsXG4gIFwiY2l2aXNcIixcbiAgXCJjaXZpdGFzXCIsXG4gIFwiY2xhbVwiLFxuICBcImNsYW1vXCIsXG4gIFwiY2xhcm9cIixcbiAgXCJjbGFydXNcIixcbiAgXCJjbGF1ZGVvXCIsXG4gIFwiY2xhdXN0cnVtXCIsXG4gIFwiY2xlbWVudGlhXCIsXG4gIFwiY2xpYmFudXNcIixcbiAgXCJjb2FkdW5hdGlvXCIsXG4gIFwiY29hZWdyZXNjb1wiLFxuICBcImNvZXBpXCIsXG4gIFwiY29lcmNlb1wiLFxuICBcImNvZ2l0b1wiLFxuICBcImNvZ25hdHVzXCIsXG4gIFwiY29nbm9tZW5cIixcbiAgXCJjb2dvXCIsXG4gIFwiY29oYWVyb1wiLFxuICBcImNvaGliZW9cIixcbiAgXCJjb2hvcnNcIixcbiAgXCJjb2xsaWdvXCIsXG4gIFwiY29sbG9jb1wiLFxuICBcImNvbGx1bVwiLFxuICBcImNvbG9cIixcbiAgXCJjb2xvclwiLFxuICBcImNvbWFcIixcbiAgXCJjb21iaWJvXCIsXG4gIFwiY29tYnVyb1wiLFxuICBcImNvbWVkb1wiLFxuICBcImNvbWVzXCIsXG4gIFwiY29tZXRlc1wiLFxuICBcImNvbWlzXCIsXG4gIFwiY29taXRhdHVzXCIsXG4gIFwiY29tbWVtb3JvXCIsXG4gIFwiY29tbWlub3JcIixcbiAgXCJjb21tb2RvXCIsXG4gIFwiY29tbXVuaXNcIixcbiAgXCJjb21wYXJvXCIsXG4gIFwiY29tcGVsbG9cIixcbiAgXCJjb21wbGVjdHVzXCIsXG4gIFwiY29tcG9ub1wiLFxuICBcImNvbXByZWhlbmRvXCIsXG4gIFwiY29tcHR1c1wiLFxuICBcImNvbmF0dXNcIixcbiAgXCJjb25jZWRvXCIsXG4gIFwiY29uY2lkb1wiLFxuICBcImNvbmN1bGNvXCIsXG4gIFwiY29uZGljb1wiLFxuICBcImNvbmR1Y29cIixcbiAgXCJjb25mZXJvXCIsXG4gIFwiY29uZmlkb1wiLFxuICBcImNvbmZvcnRvXCIsXG4gIFwiY29uZnVnb1wiLFxuICBcImNvbmdyZWdhdGlvXCIsXG4gIFwiY29uaWNpb1wiLFxuICBcImNvbmllY3RvXCIsXG4gIFwiY29uaXRvclwiLFxuICBcImNvbml1cmF0aW9cIixcbiAgXCJjb25vclwiLFxuICBcImNvbnF1ZXJvclwiLFxuICBcImNvbnNjZW5kb1wiLFxuICBcImNvbnNlcnZvXCIsXG4gIFwiY29uc2lkZXJvXCIsXG4gIFwiY29uc3BlcmdvXCIsXG4gIFwiY29uc3RhbnNcIixcbiAgXCJjb25zdWFzb3JcIixcbiAgXCJjb250YWJlc2NvXCIsXG4gIFwiY29udGVnb1wiLFxuICBcImNvbnRpZ29cIixcbiAgXCJjb250cmFcIixcbiAgXCJjb250dXJib1wiLFxuICBcImNvbnZlbnR1c1wiLFxuICBcImNvbnZvY29cIixcbiAgXCJjb3BpYVwiLFxuICBcImNvcGlvc2VcIixcbiAgXCJjb3JudVwiLFxuICBcImNvcm9uYVwiLFxuICBcImNvcnB1c1wiLFxuICBcImNvcnJlcHRpdXNcIixcbiAgXCJjb3JyaWdvXCIsXG4gIFwiY29ycm9ib3JvXCIsXG4gIFwiY29ycnVtcG9cIixcbiAgXCJjb3J1c2N1c1wiLFxuICBcImNvdGlkaWVcIixcbiAgXCJjcmFwdWxhXCIsXG4gIFwiY3Jhc1wiLFxuICBcImNyYXN0aW51c1wiLFxuICBcImNyZWF0b3JcIixcbiAgXCJjcmViZXJcIixcbiAgXCJjcmVicm9cIixcbiAgXCJjcmVkb1wiLFxuICBcImNyZW9cIixcbiAgXCJjcmVwdGlvXCIsXG4gIFwiY3JlcHVzY3VsdW1cIixcbiAgXCJjcmVzY29cIixcbiAgXCJjcmV0YVwiLFxuICBcImNyaWJyb1wiLFxuICBcImNyaW5pc1wiLFxuICBcImNydWNpYW1lbnR1bVwiLFxuICBcImNydWRlbGlzXCIsXG4gIFwiY3J1ZW50dXNcIixcbiAgXCJjcnVyXCIsXG4gIFwiY3J1c3R1bHVtXCIsXG4gIFwiY3J1eFwiLFxuICBcImN1YmljdWxhcmlzXCIsXG4gIFwiY3ViaXR1bVwiLFxuICBcImN1Ym9cIixcbiAgXCJjdWlcIixcbiAgXCJjdWl1c1wiLFxuICBcImN1bHBhXCIsXG4gIFwiY3VscG9cIixcbiAgXCJjdWx0ZWxsdXNcIixcbiAgXCJjdWx0dXJhXCIsXG4gIFwiY3VtXCIsXG4gIFwiY3VuYWJ1bGFcIixcbiAgXCJjdW5hZVwiLFxuICBcImN1bmN0YXRpb1wiLFxuICBcImN1cGlkaXRhc1wiLFxuICBcImN1cGlvXCIsXG4gIFwiY3VwcGVkaWFcIixcbiAgXCJjdXByZXNzdXNcIixcbiAgXCJjdXJcIixcbiAgXCJjdXJhXCIsXG4gIFwiY3VyYXRpb1wiLFxuICBcImN1cmlhXCIsXG4gIFwiY3VyaW9zaXRhc1wiLFxuICBcImN1cmlzXCIsXG4gIFwiY3Vyb1wiLFxuICBcImN1cnJpY3VsdW1cIixcbiAgXCJjdXJydXNcIixcbiAgXCJjdXJzaW1cIixcbiAgXCJjdXJzb1wiLFxuICBcImN1cnN1c1wiLFxuICBcImN1cnRvXCIsXG4gIFwiY3VydHVzXCIsXG4gIFwiY3Vydm9cIixcbiAgXCJjdXJ2dXNcIixcbiAgXCJjdXN0b2RpYVwiLFxuICBcImRhbW5hdGlvXCIsXG4gIFwiZGFtbm9cIixcbiAgXCJkYXBpZmVyXCIsXG4gIFwiZGViZW9cIixcbiAgXCJkZWJpbGl0b1wiLFxuICBcImRlY2Vuc1wiLFxuICBcImRlY2Vybm9cIixcbiAgXCJkZWNldFwiLFxuICBcImRlY2ltdXNcIixcbiAgXCJkZWNpcGlvXCIsXG4gIFwiZGVjb3JcIixcbiAgXCJkZWNyZXR1bVwiLFxuICBcImRlY3VtYm9cIixcbiAgXCJkZWRlY29yXCIsXG4gIFwiZGVkaWNvXCIsXG4gIFwiZGVkdWNvXCIsXG4gIFwiZGVmYWVjb1wiLFxuICBcImRlZmVuZG9cIixcbiAgXCJkZWZlcm9cIixcbiAgXCJkZWZlc3N1c1wiLFxuICBcImRlZmV0aXNjb3JcIixcbiAgXCJkZWZpY2lvXCIsXG4gIFwiZGVmaWdvXCIsXG4gIFwiZGVmbGVvXCIsXG4gIFwiZGVmbHVvXCIsXG4gIFwiZGVmdW5nb1wiLFxuICBcImRlZ2VuZXJvXCIsXG4gIFwiZGVnZXJvXCIsXG4gIFwiZGVndXN0b1wiLFxuICBcImRlaW5kZVwiLFxuICBcImRlbGVjdGF0aW9cIixcbiAgXCJkZWxlZ29cIixcbiAgXCJkZWxlb1wiLFxuICBcImRlbGliZXJvXCIsXG4gIFwiZGVsaWNhdGVcIixcbiAgXCJkZWxpbnF1b1wiLFxuICBcImRlbHVkb1wiLFxuICBcImRlbWVuc1wiLFxuICBcImRlbWVyZ29cIixcbiAgXCJkZW1pdHRvXCIsXG4gIFwiZGVtb1wiLFxuICBcImRlbW9uc3Ryb1wiLFxuICBcImRlbW9yb3JcIixcbiAgXCJkZW11bGNlb1wiLFxuICBcImRlbXVtXCIsXG4gIFwiZGVuZWdvXCIsXG4gIFwiZGVuaXF1ZVwiLFxuICBcImRlbnNcIixcbiAgXCJkZW51bmNpb1wiLFxuICBcImRlbnVvXCIsXG4gIFwiZGVvcnN1bVwiLFxuICBcImRlcGVyZW9cIixcbiAgXCJkZXBvbm9cIixcbiAgXCJkZXBvcHVsb1wiLFxuICBcImRlcG9ydG9cIixcbiAgXCJkZXByYWVkb3JcIixcbiAgXCJkZXByZWNhdG9yXCIsXG4gIFwiZGVwcmltb1wiLFxuICBcImRlcHJvbW9cIixcbiAgXCJkZXB1bHNvXCIsXG4gIFwiZGVwdXRvXCIsXG4gIFwiZGVyZWxpbnF1b1wiLFxuICBcImRlcmlkZW9cIixcbiAgXCJkZXJpcGlvXCIsXG4gIFwiZGVzaWRlcm9cIixcbiAgXCJkZXNpbm9cIixcbiAgXCJkZXNpcGlvXCIsXG4gIFwiZGVzb2xvXCIsXG4gIFwiZGVzcGFyYXR1c1wiLFxuICBcImRlc3BlY3RvXCIsXG4gIFwiZGVzcGlybWF0aW9cIixcbiAgXCJpbmZpdFwiLFxuICBcImluZmxhbW1hdGlvXCIsXG4gIFwicGFlbnNcIixcbiAgXCJwYXRpb3JcIixcbiAgXCJwYXRyaWFcIixcbiAgXCJwYXRyb2Npbm9yXCIsXG4gIFwicGF0cnV1c1wiLFxuICBcInBhdWNpXCIsXG4gIFwicGF1bGF0aW1cIixcbiAgXCJwYXVwZXJcIixcbiAgXCJwYXhcIixcbiAgXCJwZWNjYXR1c1wiLFxuICBcInBlY2NvXCIsXG4gIFwicGVjdG9cIixcbiAgXCJwZWN0dXNcIixcbiAgXCJwZWN1bmlhXCIsXG4gIFwicGVjdXNcIixcbiAgXCJwZWlvclwiLFxuICBcInBlbFwiLFxuICBcIm9jZXJcIixcbiAgXCJzb2NpdXNcIixcbiAgXCJzb2RhbGl0YXNcIixcbiAgXCJzb2xcIixcbiAgXCJzb2xlb1wiLFxuICBcInNvbGlvXCIsXG4gIFwic29saXR1ZG9cIixcbiAgXCJzb2xpdW1cIixcbiAgXCJzb2xsZXJzXCIsXG4gIFwic29sbGljaXRvXCIsXG4gIFwic29sdW1cIixcbiAgXCJzb2x1c1wiLFxuICBcInNvbHV0aW9cIixcbiAgXCJzb2x2b1wiLFxuICBcInNvbW5pY3Vsb3N1c1wiLFxuICBcInNvbW51c1wiLFxuICBcInNvbml0dXNcIixcbiAgXCJzb25vXCIsXG4gIFwic29waGlzbWF0YVwiLFxuICBcInNvcG9yXCIsXG4gIFwic29yZGVvXCIsXG4gIFwic29ydGl0dXNcIixcbiAgXCJzcGFyZ29cIixcbiAgXCJzcGVjaW9zdXNcIixcbiAgXCJzcGVjdGFjdWx1bVwiLFxuICBcInNwZWN1bHVtXCIsXG4gIFwic3Blcm5vXCIsXG4gIFwic3Blcm9cIixcbiAgXCJzcGVzXCIsXG4gIFwic3BpY3VsdW1cIixcbiAgXCJzcGlyaXR1c1wiLFxuICBcInNwb2xpYXRpb1wiLFxuICBcInNwb250ZVwiLFxuICBcInN0YWJpbGlzXCIsXG4gIFwic3RhdGltXCIsXG4gIFwic3RhdHVhXCIsXG4gIFwic3RlbGxhXCIsXG4gIFwic3RpbGxpY2lkaXVtXCIsXG4gIFwic3RpcGVzXCIsXG4gIFwic3RpcHNcIixcbiAgXCJzdG9cIixcbiAgXCJzdHJlbnV1c1wiLFxuICBcInN0cnVlc1wiLFxuICBcInN0dWRpb1wiLFxuICBcInN0dWx0dXNcIixcbiAgXCJzdWFkZW9cIixcbiAgXCJzdWFzb3JpYVwiLFxuICBcInN1YlwiLFxuICBcInN1Yml0b1wiLFxuICBcInN1Yml1bmdvXCIsXG4gIFwic3VibGltZVwiLFxuICBcInN1Ym5lY3RvXCIsXG4gIFwic3Vic2Vjb1wiLFxuICBcInN1YnN0YW50aWFcIixcbiAgXCJzdWJ2ZW5pb1wiLFxuICBcInN1Y2NlZG9cIixcbiAgXCJzdWNjdXJyb1wiLFxuICBcInN1ZmZpY2lvXCIsXG4gIFwic3VmZm9jb1wiLFxuICBcInN1ZmZyYWdpdW1cIixcbiAgXCJzdWdnZXJvXCIsXG4gIFwic3VpXCIsXG4gIFwic3VsdW1cIixcbiAgXCJzdW1cIixcbiAgXCJzdW1tYVwiLFxuICBcInN1bW1pc3NlXCIsXG4gIFwic3VtbW9wZXJlXCIsXG4gIFwic3Vtb1wiLFxuICBcInN1bXB0dXNcIixcbiAgXCJzdXBlbGxleFwiLFxuICBcInN1cGVyXCIsXG4gIFwic3VwcGVsbGV4XCIsXG4gIFwic3VwcGxhbnRvXCIsXG4gIFwic3VwcG9ub1wiLFxuICBcInN1cHJhXCIsXG4gIFwic3VyY3VsdXNcIixcbiAgXCJzdXJnb1wiLFxuICBcInN1cnN1bVwiLFxuICBcInN1c2NpcGlvXCIsXG4gIFwic3VzcGVuZG9cIixcbiAgXCJzdXN0aW5lb1wiLFxuICBcInN1dXNcIixcbiAgXCJzeW5hZ29nYVwiLFxuICBcInRhYmVsbGFcIixcbiAgXCJ0YWJlcm51c1wiLFxuICBcInRhYmVzY29cIixcbiAgXCJ0YWJnb1wiLFxuICBcInRhYnVsYVwiLFxuICBcInRhY2VvXCIsXG4gIFwidGFjdHVzXCIsXG4gIFwidGFlZGl1bVwiLFxuICBcInRhbGlvXCIsXG4gIFwidGFsaXNcIixcbiAgXCJ0YWx1c1wiLFxuICBcInRhbVwiLFxuICBcInRhbWRpdVwiLFxuICBcInRhbWVuXCIsXG4gIFwidGFtZXRzaVwiLFxuICBcInRhbWlzaXVtXCIsXG4gIFwidGFtcXVhbVwiLFxuICBcInRhbmRlbVwiLFxuICBcInRhbnRpbGx1c1wiLFxuICBcInRhbnR1bVwiLFxuICBcInRhcmR1c1wiLFxuICBcInRlZ29cIixcbiAgXCJ0ZW1lcml0YXNcIixcbiAgXCJ0ZW1wZXJhbnRpYVwiLFxuICBcInRlbXBsdW1cIixcbiAgXCJ0ZW1wdGF0aW9cIixcbiAgXCJ0ZW1wdXNcIixcbiAgXCJ0ZW5heFwiLFxuICBcInRlbmRvXCIsXG4gIFwidGVuZW9cIixcbiAgXCJ0ZW5lclwiLFxuICBcInRlbnVpc1wiLFxuICBcInRlbnVzXCIsXG4gIFwidGVwZXNjb1wiLFxuICBcInRlcGlkdXNcIixcbiAgXCJ0ZXJcIixcbiAgXCJ0ZXJlYnJvXCIsXG4gIFwidGVyZXNcIixcbiAgXCJ0ZXJnYVwiLFxuICBcInRlcmdlb1wiLFxuICBcInRlcmdpdmVyc2F0aW9cIixcbiAgXCJ0ZXJnb1wiLFxuICBcInRlcmd1bVwiLFxuICBcInRlcm1lc1wiLFxuICBcInRlcm1pbmF0aW9cIixcbiAgXCJ0ZXJvXCIsXG4gIFwidGVycmFcIixcbiAgXCJ0ZXJyZW9cIixcbiAgXCJ0ZXJyaXRvXCIsXG4gIFwidGVycm9yXCIsXG4gIFwidGVyc3VzXCIsXG4gIFwidGVydGl1c1wiLFxuICBcInRlc3RpbW9uaXVtXCIsXG4gIFwidGV4b1wiLFxuICBcInRleHRpbGlzXCIsXG4gIFwidGV4dG9yXCIsXG4gIFwidGV4dHVzXCIsXG4gIFwidGhhbGFzc2ludXNcIixcbiAgXCJ0aGVhdHJ1bVwiLFxuICBcInRoZWNhXCIsXG4gIFwidGhlbWFcIixcbiAgXCJ0aGVvbG9ndXNcIixcbiAgXCJ0aGVybWFlXCIsXG4gIFwidGhlc2F1cnVzXCIsXG4gIFwidGhlc2lzXCIsXG4gIFwidGhvcmF4XCIsXG4gIFwidGh5bWJyYVwiLFxuICBcInRoeW11bVwiLFxuICBcInRpYmlcIixcbiAgXCJ0aW1pZHVzXCIsXG4gIFwidGltb3JcIixcbiAgXCJ0aXR1bHVzXCIsXG4gIFwidG9sZXJvXCIsXG4gIFwidG9sbG9cIixcbiAgXCJ0b25kZW9cIixcbiAgXCJ0b25zb3JcIixcbiAgXCJ0b3JxdWVvXCIsXG4gIFwidG9ycmVuc1wiLFxuICBcInRvdFwiLFxuICBcInRvdGlkZW1cIixcbiAgXCJ0b3RpZXNcIixcbiAgXCJ0b3R1c1wiLFxuICBcInRyYWN0b1wiLFxuICBcInRyYWRvXCIsXG4gIFwidHJhaG9cIixcbiAgXCJ0cmFuc1wiLFxuICBcInRyZWRlY2ltXCIsXG4gIFwidHJlbW9cIixcbiAgXCJ0cmVwaWRlXCIsXG4gIFwidHJlc1wiLFxuICBcInRyaWJ1b1wiLFxuICBcInRyaWNlc2ltdXNcIixcbiAgXCJ0cmlkdWFuYVwiLFxuICBcInRyaWdpbnRhXCIsXG4gIFwidHJpcHVkaW9cIixcbiAgXCJ0cmlzdGlzXCIsXG4gIFwidHJpdW1waHVzXCIsXG4gIFwidHJ1Y2lkb1wiLFxuICBcInRydWN1bGVudGVyXCIsXG4gIFwidHViaW5ldXNcIixcbiAgXCJ0dWlcIixcbiAgXCJ0dW1cIixcbiAgXCJ0dW11bHR1c1wiLFxuICBcInR1bmNcIixcbiAgXCJ0dXJiYVwiLFxuICBcInR1cmJvXCIsXG4gIFwidHVycGVcIixcbiAgXCJ0dXJwaXNcIixcbiAgXCJ0dXRhbWVuXCIsXG4gIFwidHV0aXNcIixcbiAgXCJ0eXJhbm51c1wiLFxuICBcInViZXJyaW1lXCIsXG4gIFwidWJpXCIsXG4gIFwidWxjaXNjb3JcIixcbiAgXCJ1bGx1c1wiLFxuICBcInVsdGVyaXVzXCIsXG4gIFwidWx0aW9cIixcbiAgXCJ1bHRyYVwiLFxuICBcInVtYnJhXCIsXG4gIFwidW1lcnVzXCIsXG4gIFwidW1xdWFtXCIsXG4gIFwidW5hXCIsXG4gIFwidW5kZVwiLFxuICBcInVuZGlxdWVcIixcbiAgXCJ1bml2ZXJzZVwiLFxuICBcInVudXNcIixcbiAgXCJ1cmJhbnVzXCIsXG4gIFwidXJic1wiLFxuICBcInVyZWRvXCIsXG4gIFwidXNpdGFzXCIsXG4gIFwidXNxdWVcIixcbiAgXCJ1c3RpbG9cIixcbiAgXCJ1c3R1bG9cIixcbiAgXCJ1c3VzXCIsXG4gIFwidXRlclwiLFxuICBcInV0ZXJxdWVcIixcbiAgXCJ1dGlsaXNcIixcbiAgXCJ1dGlxdWVcIixcbiAgXCJ1dG9yXCIsXG4gIFwidXRwb3RlXCIsXG4gIFwidXRyaW1xdWVcIixcbiAgXCJ1dHJvcXVlXCIsXG4gIFwidXRydW1cIixcbiAgXCJ1eG9yXCIsXG4gIFwidmFjb1wiLFxuICBcInZhY3V1c1wiLFxuICBcInZhZG9cIixcbiAgXCJ2YWVcIixcbiAgXCJ2YWxkZVwiLFxuICBcInZhbGVuc1wiLFxuICBcInZhbGVvXCIsXG4gIFwidmFsZXR1ZG9cIixcbiAgXCJ2YWxpZHVzXCIsXG4gIFwidmFsbHVtXCIsXG4gIFwidmFwdWx1c1wiLFxuICBcInZhcmlldGFzXCIsXG4gIFwidmFyaXVzXCIsXG4gIFwidmVoZW1lbnNcIixcbiAgXCJ2ZWxcIixcbiAgXCJ2ZWxvY2l0ZXJcIixcbiAgXCJ2ZWx1bVwiLFxuICBcInZlbHV0XCIsXG4gIFwidmVuaWFcIixcbiAgXCJ2ZW5pb1wiLFxuICBcInZlbnRpdG9cIixcbiAgXCJ2ZW50b3N1c1wiLFxuICBcInZlbnR1c1wiLFxuICBcInZlbnVzdGFzXCIsXG4gIFwidmVyXCIsXG4gIFwidmVyYmVyYVwiLFxuICBcInZlcmJ1bVwiLFxuICBcInZlcmVcIixcbiAgXCJ2ZXJlY3VuZGlhXCIsXG4gIFwidmVyZW9yXCIsXG4gIFwidmVyZ29cIixcbiAgXCJ2ZXJpdGFzXCIsXG4gIFwidmVyb1wiLFxuICBcInZlcnN1c1wiLFxuICBcInZlcnRvXCIsXG4gIFwidmVydW10YW1lblwiLFxuICBcInZlcnVzXCIsXG4gIFwidmVzY29cIixcbiAgXCJ2ZXNpY2FcIixcbiAgXCJ2ZXNwZXJcIixcbiAgXCJ2ZXNwaWxsb1wiLFxuICBcInZlc3RlclwiLFxuICBcInZlc3RpZ2l1bVwiLFxuICBcInZlc3RydW1cIixcbiAgXCJ2ZXR1c1wiLFxuICBcInZpYVwiLFxuICBcInZpY2ludXNcIixcbiAgXCJ2aWNpc3NpdHVkb1wiLFxuICBcInZpY3RvcmlhXCIsXG4gIFwidmljdHVzXCIsXG4gIFwidmlkZWxpY2V0XCIsXG4gIFwidmlkZW9cIixcbiAgXCJ2aWR1YXRhXCIsXG4gIFwidmlkdW9cIixcbiAgXCJ2aWdpbG9cIixcbiAgXCJ2aWdvclwiLFxuICBcInZpbGljdXNcIixcbiAgXCJ2aWxpc1wiLFxuICBcInZpbGl0YXNcIixcbiAgXCJ2aWxsYVwiLFxuICBcInZpbmNvXCIsXG4gIFwidmluY3VsdW1cIixcbiAgXCJ2aW5kaWNvXCIsXG4gIFwidmluaXRvclwiLFxuICBcInZpbnVtXCIsXG4gIFwidmlyXCIsXG4gIFwidmlyZ2FcIixcbiAgXCJ2aXJnb1wiLFxuICBcInZpcmlkaXNcIixcbiAgXCJ2aXJpbGl0ZXJcIixcbiAgXCJ2aXJ0dXNcIixcbiAgXCJ2aXNcIixcbiAgXCJ2aXNjdXNcIixcbiAgXCJ2aXRhXCIsXG4gIFwidml0aW9zdXNcIixcbiAgXCJ2aXRpdW1cIixcbiAgXCJ2aXRvXCIsXG4gIFwidml2b1wiLFxuICBcInZpeFwiLFxuICBcInZvYmlzXCIsXG4gIFwidm9jaWZlcm9yXCIsXG4gIFwidm9jb1wiLFxuICBcInZvbGF0aWN1c1wiLFxuICBcInZvbG9cIixcbiAgXCJ2b2x1YmlsaXNcIixcbiAgXCJ2b2x1bnRhcml1c1wiLFxuICBcInZvbHVwXCIsXG4gIFwidm9sdXRhYnJ1bVwiLFxuICBcInZvbHZhXCIsXG4gIFwidm9tZXJcIixcbiAgXCJ2b21pY2FcIixcbiAgXCJ2b21pdG9cIixcbiAgXCJ2b3JhZ29cIixcbiAgXCJ2b3JheFwiLFxuICBcInZvcm9cIixcbiAgXCJ2b3NcIixcbiAgXCJ2b3R1bVwiLFxuICBcInZvdmVvXCIsXG4gIFwidm94XCIsXG4gIFwidnVsYXJpdGVyXCIsXG4gIFwidnVsZ2FyaXNcIixcbiAgXCJ2dWxnaXZhZ3VzXCIsXG4gIFwidnVsZ29cIixcbiAgXCJ2dWxndXNcIixcbiAgXCJ2dWxuZXJvXCIsXG4gIFwidnVsbnVzXCIsXG4gIFwidnVscGVzXCIsXG4gIFwidnVsdGljdWx1c1wiLFxuICBcInZ1bHR1b3N1c1wiLFxuICBcInhpcGhpYXNcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiYWxpYXNcIixcbiAgXCJjb25zZXF1YXR1clwiLFxuICBcImF1dFwiLFxuICBcInBlcmZlcmVuZGlzXCIsXG4gIFwic2l0XCIsXG4gIFwidm9sdXB0YXRlbVwiLFxuICBcImFjY3VzYW50aXVtXCIsXG4gIFwiZG9sb3JlbXF1ZVwiLFxuICBcImFwZXJpYW1cIixcbiAgXCJlYXF1ZVwiLFxuICBcImlwc2FcIixcbiAgXCJxdWFlXCIsXG4gIFwiYWJcIixcbiAgXCJpbGxvXCIsXG4gIFwiaW52ZW50b3JlXCIsXG4gIFwidmVyaXRhdGlzXCIsXG4gIFwiZXRcIixcbiAgXCJxdWFzaVwiLFxuICBcImFyY2hpdGVjdG9cIixcbiAgXCJiZWF0YWVcIixcbiAgXCJ2aXRhZVwiLFxuICBcImRpY3RhXCIsXG4gIFwic3VudFwiLFxuICBcImV4cGxpY2Fib1wiLFxuICBcImFzcGVybmF0dXJcIixcbiAgXCJhdXRcIixcbiAgXCJvZGl0XCIsXG4gIFwiYXV0XCIsXG4gIFwiZnVnaXRcIixcbiAgXCJzZWRcIixcbiAgXCJxdWlhXCIsXG4gIFwiY29uc2VxdXVudHVyXCIsXG4gIFwibWFnbmlcIixcbiAgXCJkb2xvcmVzXCIsXG4gIFwiZW9zXCIsXG4gIFwicXVpXCIsXG4gIFwicmF0aW9uZVwiLFxuICBcInZvbHVwdGF0ZW1cIixcbiAgXCJzZXF1aVwiLFxuICBcIm5lc2NpdW50XCIsXG4gIFwibmVxdWVcIixcbiAgXCJkb2xvcmVtXCIsXG4gIFwiaXBzdW1cIixcbiAgXCJxdWlhXCIsXG4gIFwiZG9sb3JcIixcbiAgXCJzaXRcIixcbiAgXCJhbWV0XCIsXG4gIFwiY29uc2VjdGV0dXJcIixcbiAgXCJhZGlwaXNjaVwiLFxuICBcInZlbGl0XCIsXG4gIFwic2VkXCIsXG4gIFwicXVpYVwiLFxuICBcIm5vblwiLFxuICBcIm51bXF1YW1cIixcbiAgXCJlaXVzXCIsXG4gIFwibW9kaVwiLFxuICBcInRlbXBvcmFcIixcbiAgXCJpbmNpZHVudFwiLFxuICBcInV0XCIsXG4gIFwibGFib3JlXCIsXG4gIFwiZXRcIixcbiAgXCJkb2xvcmVcIixcbiAgXCJtYWduYW1cIixcbiAgXCJhbGlxdWFtXCIsXG4gIFwicXVhZXJhdFwiLFxuICBcInZvbHVwdGF0ZW1cIixcbiAgXCJ1dFwiLFxuICBcImVuaW1cIixcbiAgXCJhZFwiLFxuICBcIm1pbmltYVwiLFxuICBcInZlbmlhbVwiLFxuICBcInF1aXNcIixcbiAgXCJub3N0cnVtXCIsXG4gIFwiZXhlcmNpdGF0aW9uZW1cIixcbiAgXCJ1bGxhbVwiLFxuICBcImNvcnBvcmlzXCIsXG4gIFwibmVtb1wiLFxuICBcImVuaW1cIixcbiAgXCJpcHNhbVwiLFxuICBcInZvbHVwdGF0ZW1cIixcbiAgXCJxdWlhXCIsXG4gIFwidm9sdXB0YXNcIixcbiAgXCJzaXRcIixcbiAgXCJzdXNjaXBpdFwiLFxuICBcImxhYm9yaW9zYW1cIixcbiAgXCJuaXNpXCIsXG4gIFwidXRcIixcbiAgXCJhbGlxdWlkXCIsXG4gIFwiZXhcIixcbiAgXCJlYVwiLFxuICBcImNvbW1vZGlcIixcbiAgXCJjb25zZXF1YXR1clwiLFxuICBcInF1aXNcIixcbiAgXCJhdXRlbVwiLFxuICBcInZlbFwiLFxuICBcImV1bVwiLFxuICBcIml1cmVcIixcbiAgXCJyZXByZWhlbmRlcml0XCIsXG4gIFwicXVpXCIsXG4gIFwiaW5cIixcbiAgXCJlYVwiLFxuICBcInZvbHVwdGF0ZVwiLFxuICBcInZlbGl0XCIsXG4gIFwiZXNzZVwiLFxuICBcInF1YW1cIixcbiAgXCJuaWhpbFwiLFxuICBcIm1vbGVzdGlhZVwiLFxuICBcImV0XCIsXG4gIFwiaXVzdG9cIixcbiAgXCJvZGlvXCIsXG4gIFwiZGlnbmlzc2ltb3NcIixcbiAgXCJkdWNpbXVzXCIsXG4gIFwicXVpXCIsXG4gIFwiYmxhbmRpdGlpc1wiLFxuICBcInByYWVzZW50aXVtXCIsXG4gIFwibGF1ZGFudGl1bVwiLFxuICBcInRvdGFtXCIsXG4gIFwicmVtXCIsXG4gIFwidm9sdXB0YXR1bVwiLFxuICBcImRlbGVuaXRpXCIsXG4gIFwiYXRxdWVcIixcbiAgXCJjb3JydXB0aVwiLFxuICBcInF1b3NcIixcbiAgXCJkb2xvcmVzXCIsXG4gIFwiZXRcIixcbiAgXCJxdWFzXCIsXG4gIFwibW9sZXN0aWFzXCIsXG4gIFwiZXhjZXB0dXJpXCIsXG4gIFwic2ludFwiLFxuICBcIm9jY2FlY2F0aVwiLFxuICBcImN1cGlkaXRhdGVcIixcbiAgXCJub25cIixcbiAgXCJwcm92aWRlbnRcIixcbiAgXCJzZWRcIixcbiAgXCJ1dFwiLFxuICBcInBlcnNwaWNpYXRpc1wiLFxuICBcInVuZGVcIixcbiAgXCJvbW5pc1wiLFxuICBcImlzdGVcIixcbiAgXCJuYXR1c1wiLFxuICBcImVycm9yXCIsXG4gIFwic2ltaWxpcXVlXCIsXG4gIFwic3VudFwiLFxuICBcImluXCIsXG4gIFwiY3VscGFcIixcbiAgXCJxdWlcIixcbiAgXCJvZmZpY2lhXCIsXG4gIFwiZGVzZXJ1bnRcIixcbiAgXCJtb2xsaXRpYVwiLFxuICBcImFuaW1pXCIsXG4gIFwiaWRcIixcbiAgXCJlc3RcIixcbiAgXCJsYWJvcnVtXCIsXG4gIFwiZXRcIixcbiAgXCJkb2xvcnVtXCIsXG4gIFwiZnVnYVwiLFxuICBcImV0XCIsXG4gIFwiaGFydW1cIixcbiAgXCJxdWlkZW1cIixcbiAgXCJyZXJ1bVwiLFxuICBcImZhY2lsaXNcIixcbiAgXCJlc3RcIixcbiAgXCJldFwiLFxuICBcImV4cGVkaXRhXCIsXG4gIFwiZGlzdGluY3Rpb1wiLFxuICBcIm5hbVwiLFxuICBcImxpYmVyb1wiLFxuICBcInRlbXBvcmVcIixcbiAgXCJjdW1cIixcbiAgXCJzb2x1dGFcIixcbiAgXCJub2Jpc1wiLFxuICBcImVzdFwiLFxuICBcImVsaWdlbmRpXCIsXG4gIFwib3B0aW9cIixcbiAgXCJjdW1xdWVcIixcbiAgXCJuaWhpbFwiLFxuICBcImltcGVkaXRcIixcbiAgXCJxdW9cIixcbiAgXCJwb3Jyb1wiLFxuICBcInF1aXNxdWFtXCIsXG4gIFwiZXN0XCIsXG4gIFwicXVpXCIsXG4gIFwibWludXNcIixcbiAgXCJpZFwiLFxuICBcInF1b2RcIixcbiAgXCJtYXhpbWVcIixcbiAgXCJwbGFjZWF0XCIsXG4gIFwiZmFjZXJlXCIsXG4gIFwicG9zc2ltdXNcIixcbiAgXCJvbW5pc1wiLFxuICBcInZvbHVwdGFzXCIsXG4gIFwiYXNzdW1lbmRhXCIsXG4gIFwiZXN0XCIsXG4gIFwib21uaXNcIixcbiAgXCJkb2xvclwiLFxuICBcInJlcGVsbGVuZHVzXCIsXG4gIFwidGVtcG9yaWJ1c1wiLFxuICBcImF1dGVtXCIsXG4gIFwicXVpYnVzZGFtXCIsXG4gIFwiZXRcIixcbiAgXCJhdXRcIixcbiAgXCJjb25zZXF1YXR1clwiLFxuICBcInZlbFwiLFxuICBcImlsbHVtXCIsXG4gIFwicXVpXCIsXG4gIFwiZG9sb3JlbVwiLFxuICBcImV1bVwiLFxuICBcImZ1Z2lhdFwiLFxuICBcInF1b1wiLFxuICBcInZvbHVwdGFzXCIsXG4gIFwibnVsbGFcIixcbiAgXCJwYXJpYXR1clwiLFxuICBcImF0XCIsXG4gIFwidmVyb1wiLFxuICBcImVvc1wiLFxuICBcImV0XCIsXG4gIFwiYWNjdXNhbXVzXCIsXG4gIFwib2ZmaWNpaXNcIixcbiAgXCJkZWJpdGlzXCIsXG4gIFwiYXV0XCIsXG4gIFwicmVydW1cIixcbiAgXCJuZWNlc3NpdGF0aWJ1c1wiLFxuICBcInNhZXBlXCIsXG4gIFwiZXZlbmlldFwiLFxuICBcInV0XCIsXG4gIFwiZXRcIixcbiAgXCJ2b2x1cHRhdGVzXCIsXG4gIFwicmVwdWRpYW5kYWVcIixcbiAgXCJzaW50XCIsXG4gIFwiZXRcIixcbiAgXCJtb2xlc3RpYWVcIixcbiAgXCJub25cIixcbiAgXCJyZWN1c2FuZGFlXCIsXG4gIFwiaXRhcXVlXCIsXG4gIFwiZWFydW1cIixcbiAgXCJyZXJ1bVwiLFxuICBcImhpY1wiLFxuICBcInRlbmV0dXJcIixcbiAgXCJhXCIsXG4gIFwic2FwaWVudGVcIixcbiAgXCJkZWxlY3R1c1wiLFxuICBcInV0XCIsXG4gIFwiYXV0XCIsXG4gIFwicmVpY2llbmRpc1wiLFxuICBcInZvbHVwdGF0aWJ1c1wiLFxuICBcIm1haW9yZXNcIixcbiAgXCJkb2xvcmlidXNcIixcbiAgXCJhc3BlcmlvcmVzXCIsXG4gIFwicmVwZWxsYXRcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQWFsaXlhaFwiLFxuICBcIkFhcm9uXCIsXG4gIFwiQWJhZ2FpbFwiLFxuICBcIkFiYmV5XCIsXG4gIFwiQWJiaWVcIixcbiAgXCJBYmJpZ2FpbFwiLFxuICBcIkFiYnlcIixcbiAgXCJBYmRpZWxcIixcbiAgXCJBYmR1bFwiLFxuICBcIkFiZHVsbGFoXCIsXG4gIFwiQWJlXCIsXG4gIFwiQWJlbFwiLFxuICBcIkFiZWxhcmRvXCIsXG4gIFwiQWJpZ2FpbFwiLFxuICBcIkFiaWdhbGVcIixcbiAgXCJBYmlnYXlsZVwiLFxuICBcIkFibmVyXCIsXG4gIFwiQWJyYWhhbVwiLFxuICBcIkFkYVwiLFxuICBcIkFkYWhcIixcbiAgXCJBZGFsYmVydG9cIixcbiAgXCJBZGFsaW5lXCIsXG4gIFwiQWRhbVwiLFxuICBcIkFkYW5cIixcbiAgXCJBZGRpZVwiLFxuICBcIkFkZGlzb25cIixcbiAgXCJBZGVsYVwiLFxuICBcIkFkZWxiZXJ0XCIsXG4gIFwiQWRlbGVcIixcbiAgXCJBZGVsaWFcIixcbiAgXCJBZGVsaW5lXCIsXG4gIFwiQWRlbGxcIixcbiAgXCJBZGVsbGFcIixcbiAgXCJBZGVsbGVcIixcbiAgXCJBZGl0eWFcIixcbiAgXCJBZG9sZlwiLFxuICBcIkFkb2xmb1wiLFxuICBcIkFkb2xwaFwiLFxuICBcIkFkb2xwaHVzXCIsXG4gIFwiQWRvbmlzXCIsXG4gIFwiQWRyYWluXCIsXG4gIFwiQWRyaWFuXCIsXG4gIFwiQWRyaWFuYVwiLFxuICBcIkFkcmlhbm5hXCIsXG4gIFwiQWRyaWVsXCIsXG4gIFwiQWRyaWVuXCIsXG4gIFwiQWRyaWVubmVcIixcbiAgXCJBZnRvblwiLFxuICBcIkFnbGFlXCIsXG4gIFwiQWduZXNcIixcbiAgXCJBZ3VzdGluXCIsXG4gIFwiQWd1c3RpbmFcIixcbiAgXCJBaG1hZFwiLFxuICBcIkFobWVkXCIsXG4gIFwiQWlkYVwiLFxuICBcIkFpZGFuXCIsXG4gIFwiQWlkZW5cIixcbiAgXCJBaWxlZW5cIixcbiAgXCJBaW1lZVwiLFxuICBcIkFpc2hhXCIsXG4gIFwiQWl5YW5hXCIsXG4gIFwiQWtlZW1cIixcbiAgXCJBbFwiLFxuICBcIkFsYWluYVwiLFxuICBcIkFsYW5cIixcbiAgXCJBbGFuYVwiLFxuICBcIkFsYW5pc1wiLFxuICBcIkFsYW5uYVwiLFxuICBcIkFsYXluYVwiLFxuICBcIkFsYmFcIixcbiAgXCJBbGJlcnRcIixcbiAgXCJBbGJlcnRhXCIsXG4gIFwiQWxiZXJ0aGFcIixcbiAgXCJBbGJlcnRvXCIsXG4gIFwiQWxiaW5cIixcbiAgXCJBbGJpbmFcIixcbiAgXCJBbGRhXCIsXG4gIFwiQWxkZW5cIixcbiAgXCJBbGVjXCIsXG4gIFwiQWxlZW5cIixcbiAgXCJBbGVqYW5kcmFcIixcbiAgXCJBbGVqYW5kcmluXCIsXG4gIFwiQWxla1wiLFxuICBcIkFsZW5hXCIsXG4gIFwiQWxlbmVcIixcbiAgXCJBbGVzc2FuZHJhXCIsXG4gIFwiQWxlc3NhbmRyb1wiLFxuICBcIkFsZXNzaWFcIixcbiAgXCJBbGV0aGFcIixcbiAgXCJBbGV4XCIsXG4gIFwiQWxleGFcIixcbiAgXCJBbGV4YW5kZXJcIixcbiAgXCJBbGV4YW5kcmFcIixcbiAgXCJBbGV4YW5kcmVcIixcbiAgXCJBbGV4YW5kcmVhXCIsXG4gIFwiQWxleGFuZHJpYVwiLFxuICBcIkFsZXhhbmRyaW5lXCIsXG4gIFwiQWxleGFuZHJvXCIsXG4gIFwiQWxleGFuZVwiLFxuICBcIkFsZXhhbm5lXCIsXG4gIFwiQWxleGllXCIsXG4gIFwiQWxleGlzXCIsXG4gIFwiQWxleHlzXCIsXG4gIFwiQWxleHphbmRlclwiLFxuICBcIkFsZlwiLFxuICBcIkFsZm9uc29cIixcbiAgXCJBbGZvbnpvXCIsXG4gIFwiQWxmb3JkXCIsXG4gIFwiQWxmcmVkXCIsXG4gIFwiQWxmcmVkYVwiLFxuICBcIkFsZnJlZG9cIixcbiAgXCJBbGlcIixcbiAgXCJBbGlhXCIsXG4gIFwiQWxpY2VcIixcbiAgXCJBbGljaWFcIixcbiAgXCJBbGlzYVwiLFxuICBcIkFsaXNoYVwiLFxuICBcIkFsaXNvblwiLFxuICBcIkFsaXZpYVwiLFxuICBcIkFsaXlhXCIsXG4gIFwiQWxpeWFoXCIsXG4gIFwiQWxpemFcIixcbiAgXCJBbGl6ZVwiLFxuICBcIkFsbGFuXCIsXG4gIFwiQWxsZW5cIixcbiAgXCJBbGxlbmVcIixcbiAgXCJBbGxpZVwiLFxuICBcIkFsbGlzb25cIixcbiAgXCJBbGx5XCIsXG4gIFwiQWxwaG9uc29cIixcbiAgXCJBbHRhXCIsXG4gIFwiQWx0aGVhXCIsXG4gIFwiQWx2YVwiLFxuICBcIkFsdmFoXCIsXG4gIFwiQWx2ZW5hXCIsXG4gIFwiQWx2ZXJhXCIsXG4gIFwiQWx2ZXJ0YVwiLFxuICBcIkFsdmluYVwiLFxuICBcIkFsdmlzXCIsXG4gIFwiQWx5Y2VcIixcbiAgXCJBbHljaWFcIixcbiAgXCJBbHlzYVwiLFxuICBcIkFseXNoYVwiLFxuICBcIkFseXNvblwiLFxuICBcIkFseXNzb25cIixcbiAgXCJBbWFsaWFcIixcbiAgXCJBbWFuZGFcIixcbiAgXCJBbWFuaVwiLFxuICBcIkFtYXJhXCIsXG4gIFwiQW1hcmlcIixcbiAgXCJBbWF5YVwiLFxuICBcIkFtYmVyXCIsXG4gIFwiQW1icm9zZVwiLFxuICBcIkFtZWxpYVwiLFxuICBcIkFtZWxpZVwiLFxuICBcIkFtZWx5XCIsXG4gIFwiQW1lcmljYVwiLFxuICBcIkFtZXJpY29cIixcbiAgXCJBbWllXCIsXG4gIFwiQW1pbmFcIixcbiAgXCJBbWlyXCIsXG4gIFwiQW1pcmFcIixcbiAgXCJBbWl5YVwiLFxuICBcIkFtb3NcIixcbiAgXCJBbXBhcm9cIixcbiAgXCJBbXlcIixcbiAgXCJBbXlhXCIsXG4gIFwiQW5hXCIsXG4gIFwiQW5hYmVsXCIsXG4gIFwiQW5hYmVsbGVcIixcbiAgXCJBbmFoaVwiLFxuICBcIkFuYWlzXCIsXG4gIFwiQW5hc3RhY2lvXCIsXG4gIFwiQW5hc3Rhc2lhXCIsXG4gIFwiQW5kZXJzb25cIixcbiAgXCJBbmRyZVwiLFxuICBcIkFuZHJlYW5lXCIsXG4gIFwiQW5kcmVhbm5lXCIsXG4gIFwiQW5kcmVzXCIsXG4gIFwiQW5kcmV3XCIsXG4gIFwiQW5keVwiLFxuICBcIkFuZ2VsXCIsXG4gIFwiQW5nZWxhXCIsXG4gIFwiQW5nZWxpY2FcIixcbiAgXCJBbmdlbGluYVwiLFxuICBcIkFuZ2VsaW5lXCIsXG4gIFwiQW5nZWxpdGFcIixcbiAgXCJBbmdlbG9cIixcbiAgXCJBbmdpZVwiLFxuICBcIkFuZ3VzXCIsXG4gIFwiQW5pYmFsXCIsXG4gIFwiQW5pa2FcIixcbiAgXCJBbmlzc2FcIixcbiAgXCJBbml0YVwiLFxuICBcIkFuaXlhXCIsXG4gIFwiQW5peWFoXCIsXG4gIFwiQW5qYWxpXCIsXG4gIFwiQW5uYVwiLFxuICBcIkFubmFiZWxcIixcbiAgXCJBbm5hYmVsbFwiLFxuICBcIkFubmFiZWxsZVwiLFxuICBcIkFubmFsaXNlXCIsXG4gIFwiQW5uYW1hZVwiLFxuICBcIkFubmFtYXJpZVwiLFxuICBcIkFubmVcIixcbiAgXCJBbm5ldHRhXCIsXG4gIFwiQW5uZXR0ZVwiLFxuICBcIkFubmllXCIsXG4gIFwiQW5zZWxcIixcbiAgXCJBbnNsZXlcIixcbiAgXCJBbnRob255XCIsXG4gIFwiQW50b2luZXR0ZVwiLFxuICBcIkFudG9uZVwiLFxuICBcIkFudG9uZXR0YVwiLFxuICBcIkFudG9uZXR0ZVwiLFxuICBcIkFudG9uaWFcIixcbiAgXCJBbnRvbmlldHRhXCIsXG4gIFwiQW50b25pbmFcIixcbiAgXCJBbnRvbmlvXCIsXG4gIFwiQW50d2FuXCIsXG4gIFwiQW50d29uXCIsXG4gIFwiQW55YVwiLFxuICBcIkFwcmlsXCIsXG4gIFwiQXJhXCIsXG4gIFwiQXJhY2VsaVwiLFxuICBcIkFyYWNlbHlcIixcbiAgXCJBcmNoXCIsXG4gIFwiQXJjaGliYWxkXCIsXG4gIFwiQXJkZWxsYVwiLFxuICBcIkFyZGVuXCIsXG4gIFwiQXJkaXRoXCIsXG4gIFwiQXJlbHlcIixcbiAgXCJBcmlcIixcbiAgXCJBcmlhbmVcIixcbiAgXCJBcmlhbm5hXCIsXG4gIFwiQXJpY1wiLFxuICBcIkFyaWVsXCIsXG4gIFwiQXJpZWxsZVwiLFxuICBcIkFyanVuXCIsXG4gIFwiQXJsZW5lXCIsXG4gIFwiQXJsaWVcIixcbiAgXCJBcmxvXCIsXG4gIFwiQXJtYW5kXCIsXG4gIFwiQXJtYW5kb1wiLFxuICBcIkFybWFuaVwiLFxuICBcIkFybmFsZG9cIixcbiAgXCJBcm5lXCIsXG4gIFwiQXJub1wiLFxuICBcIkFybm9sZFwiLFxuICBcIkFybm9sZG9cIixcbiAgXCJBcm51bGZvXCIsXG4gIFwiQXJvblwiLFxuICBcIkFydFwiLFxuICBcIkFydGh1clwiLFxuICBcIkFydHVyb1wiLFxuICBcIkFydmVsXCIsXG4gIFwiQXJ2aWRcIixcbiAgXCJBcnZpbGxhXCIsXG4gIFwiQXJ5YW5uYVwiLFxuICBcIkFzYVwiLFxuICBcIkFzaGFcIixcbiAgXCJBc2hsZWVcIixcbiAgXCJBc2hsZWlnaFwiLFxuICBcIkFzaGxleVwiLFxuICBcIkFzaGx5XCIsXG4gIFwiQXNobHlublwiLFxuICBcIkFzaHRvblwiLFxuICBcIkFzaHR5blwiLFxuICBcIkFzaWFcIixcbiAgXCJBc3N1bnRhXCIsXG4gIFwiQXN0cmlkXCIsXG4gIFwiQXRoZW5hXCIsXG4gIFwiQXVicmVlXCIsXG4gIFwiQXVicmV5XCIsXG4gIFwiQXVkaWVcIixcbiAgXCJBdWRyYVwiLFxuICBcIkF1ZHJlYW5uZVwiLFxuICBcIkF1ZHJleVwiLFxuICBcIkF1Z3VzdFwiLFxuICBcIkF1Z3VzdGFcIixcbiAgXCJBdWd1c3RpbmVcIixcbiAgXCJBdWd1c3R1c1wiLFxuICBcIkF1cmVsaWFcIixcbiAgXCJBdXJlbGllXCIsXG4gIFwiQXVyZWxpb1wiLFxuICBcIkF1cm9yZVwiLFxuICBcIkF1c3RlblwiLFxuICBcIkF1c3RpblwiLFxuICBcIkF1c3R5blwiLFxuICBcIkF1dHVtblwiLFxuICBcIkF2YVwiLFxuICBcIkF2ZXJ5XCIsXG4gIFwiQXZpc1wiLFxuICBcIkF4ZWxcIixcbiAgXCJBeWFuYVwiLFxuICBcIkF5ZGVuXCIsXG4gIFwiQXlsYVwiLFxuICBcIkF5bGluXCIsXG4gIFwiQmFieVwiLFxuICBcIkJhaWxlZVwiLFxuICBcIkJhaWxleVwiLFxuICBcIkJhcmJhcmFcIixcbiAgXCJCYXJuZXlcIixcbiAgXCJCYXJvblwiLFxuICBcIkJhcnJldHRcIixcbiAgXCJCYXJyeVwiLFxuICBcIkJhcnRcIixcbiAgXCJCYXJ0aG9sb21lXCIsXG4gIFwiQmFydG9uXCIsXG4gIFwiQmF5bGVlXCIsXG4gIFwiQmVhdHJpY2VcIixcbiAgXCJCZWF1XCIsXG4gIFwiQmVhdWxhaFwiLFxuICBcIkJlbGxcIixcbiAgXCJCZWxsYVwiLFxuICBcIkJlbGxlXCIsXG4gIFwiQmVuXCIsXG4gIFwiQmVuZWRpY3RcIixcbiAgXCJCZW5qYW1pblwiLFxuICBcIkJlbm5ldHRcIixcbiAgXCJCZW5uaWVcIixcbiAgXCJCZW5ueVwiLFxuICBcIkJlbnRvblwiLFxuICBcIkJlcmVuaWNlXCIsXG4gIFwiQmVybmFkZXR0ZVwiLFxuICBcIkJlcm5hZGluZVwiLFxuICBcIkJlcm5hcmRcIixcbiAgXCJCZXJuYXJkb1wiLFxuICBcIkJlcm5laWNlXCIsXG4gIFwiQmVybmhhcmRcIixcbiAgXCJCZXJuaWNlXCIsXG4gIFwiQmVybmllXCIsXG4gIFwiQmVybmllY2VcIixcbiAgXCJCZXJuaXRhXCIsXG4gIFwiQmVycnlcIixcbiAgXCJCZXJ0XCIsXG4gIFwiQmVydGFcIixcbiAgXCJCZXJ0aGFcIixcbiAgXCJCZXJ0cmFtXCIsXG4gIFwiQmVydHJhbmRcIixcbiAgXCJCZXJ5bFwiLFxuICBcIkJlc3NpZVwiLFxuICBcIkJldGhcIixcbiAgXCJCZXRoYW55XCIsXG4gIFwiQmV0aGVsXCIsXG4gIFwiQmV0c3lcIixcbiAgXCJCZXR0ZVwiLFxuICBcIkJldHRpZVwiLFxuICBcIkJldHR5XCIsXG4gIFwiQmV0dHllXCIsXG4gIFwiQmV1bGFoXCIsXG4gIFwiQmV2ZXJseVwiLFxuICBcIkJpYW5rYVwiLFxuICBcIkJpbGxcIixcbiAgXCJCaWxsaWVcIixcbiAgXCJCaWxseVwiLFxuICBcIkJpcmRpZVwiLFxuICBcIkJsYWlyXCIsXG4gIFwiQmxhaXNlXCIsXG4gIFwiQmxha2VcIixcbiAgXCJCbGFuY2FcIixcbiAgXCJCbGFuY2hlXCIsXG4gIFwiQmxhemVcIixcbiAgXCJCb1wiLFxuICBcIkJvYmJpZVwiLFxuICBcIkJvYmJ5XCIsXG4gIFwiQm9uaXRhXCIsXG4gIFwiQm9ubmllXCIsXG4gIFwiQm9yaXNcIixcbiAgXCJCb3lkXCIsXG4gIFwiQnJhZFwiLFxuICBcIkJyYWRlblwiLFxuICBcIkJyYWRmb3JkXCIsXG4gIFwiQnJhZGxleVwiLFxuICBcIkJyYWRseVwiLFxuICBcIkJyYWR5XCIsXG4gIFwiQnJhZWRlblwiLFxuICBcIkJyYWluXCIsXG4gIFwiQnJhbmRpXCIsXG4gIFwiQnJhbmRvXCIsXG4gIFwiQnJhbmRvblwiLFxuICBcIkJyYW5kdFwiLFxuICBcIkJyYW5keVwiLFxuICBcIkJyYW5keW5cIixcbiAgXCJCcmFubm9uXCIsXG4gIFwiQnJhbnNvblwiLFxuICBcIkJyYW50XCIsXG4gIFwiQnJhdWxpb1wiLFxuICBcIkJyYXh0b25cIixcbiAgXCJCcmF5YW5cIixcbiAgXCJCcmVhbmFcIixcbiAgXCJCcmVhbm5hXCIsXG4gIFwiQnJlYW5uZVwiLFxuICBcIkJyZW5kYVwiLFxuICBcIkJyZW5kYW5cIixcbiAgXCJCcmVuZGVuXCIsXG4gIFwiQnJlbmRvblwiLFxuICBcIkJyZW5uYVwiLFxuICBcIkJyZW5uYW5cIixcbiAgXCJCcmVubm9uXCIsXG4gIFwiQnJlbnRcIixcbiAgXCJCcmV0XCIsXG4gIFwiQnJldHRcIixcbiAgXCJCcmlhXCIsXG4gIFwiQnJpYW5cIixcbiAgXCJCcmlhbmFcIixcbiAgXCJCcmlhbm5lXCIsXG4gIFwiQnJpY2VcIixcbiAgXCJCcmlkZ2V0XCIsXG4gIFwiQnJpZGdldHRlXCIsXG4gIFwiQnJpZGllXCIsXG4gIFwiQnJpZWxsZVwiLFxuICBcIkJyaWdpdHRlXCIsXG4gIFwiQnJpb25uYVwiLFxuICBcIkJyaXNhXCIsXG4gIFwiQnJpdG5leVwiLFxuICBcIkJyaXR0YW55XCIsXG4gIFwiQnJvY2tcIixcbiAgXCJCcm9kZXJpY2tcIixcbiAgXCJCcm9keVwiLFxuICBcIkJyb29rXCIsXG4gIFwiQnJvb2tlXCIsXG4gIFwiQnJvb2tseW5cIixcbiAgXCJCcm9va3NcIixcbiAgXCJCcm93blwiLFxuICBcIkJydWNlXCIsXG4gIFwiQnJ5YW5hXCIsXG4gIFwiQnJ5Y2VcIixcbiAgXCJCcnljZW5cIixcbiAgXCJCcnlvblwiLFxuICBcIkJ1Y2tcIixcbiAgXCJCdWRcIixcbiAgXCJCdWRkeVwiLFxuICBcIkJ1Zm9yZFwiLFxuICBcIkJ1bGFoXCIsXG4gIFwiQnVyZGV0dGVcIixcbiAgXCJCdXJsZXlcIixcbiAgXCJCdXJuaWNlXCIsXG4gIFwiQnVzdGVyXCIsXG4gIFwiQ2FkZVwiLFxuICBcIkNhZGVuXCIsXG4gIFwiQ2Flc2FyXCIsXG4gIFwiQ2FpdGx5blwiLFxuICBcIkNhbGVcIixcbiAgXCJDYWxlYlwiLFxuICBcIkNhbGVpZ2hcIixcbiAgXCJDYWxpXCIsXG4gIFwiQ2FsaXN0YVwiLFxuICBcIkNhbGxpZVwiLFxuICBcIkNhbWRlblwiLFxuICBcIkNhbWVyb25cIixcbiAgXCJDYW1pbGFcIixcbiAgXCJDYW1pbGxhXCIsXG4gIFwiQ2FtaWxsZVwiLFxuICBcIkNhbXJlblwiLFxuICBcIkNhbXJvblwiLFxuICBcIkNhbXJ5blwiLFxuICBcIkNhbXlsbGVcIixcbiAgXCJDYW5kYWNlXCIsXG4gIFwiQ2FuZGVsYXJpb1wiLFxuICBcIkNhbmRpY2VcIixcbiAgXCJDYW5kaWRhXCIsXG4gIFwiQ2FuZGlkb1wiLFxuICBcIkNhcmFcIixcbiAgXCJDYXJleVwiLFxuICBcIkNhcmlzc2FcIixcbiAgXCJDYXJsZWVcIixcbiAgXCJDYXJsZXRvblwiLFxuICBcIkNhcmxleVwiLFxuICBcIkNhcmxpXCIsXG4gIFwiQ2FybGllXCIsXG4gIFwiQ2FybG9cIixcbiAgXCJDYXJsb3NcIixcbiAgXCJDYXJsb3R0YVwiLFxuICBcIkNhcm1lbFwiLFxuICBcIkNhcm1lbGFcIixcbiAgXCJDYXJtZWxsYVwiLFxuICBcIkNhcm1lbG9cIixcbiAgXCJDYXJtZW5cIixcbiAgXCJDYXJtaW5lXCIsXG4gIFwiQ2Fyb2xcIixcbiAgXCJDYXJvbGFubmVcIixcbiAgXCJDYXJvbGVcIixcbiAgXCJDYXJvbGluYVwiLFxuICBcIkNhcm9saW5lXCIsXG4gIFwiQ2Fyb2x5blwiLFxuICBcIkNhcm9seW5lXCIsXG4gIFwiQ2FycmllXCIsXG4gIFwiQ2Fycm9sbFwiLFxuICBcIkNhcnNvblwiLFxuICBcIkNhcnRlclwiLFxuICBcIkNhcnlcIixcbiAgXCJDYXNhbmRyYVwiLFxuICBcIkNhc2V5XCIsXG4gIFwiQ2FzaW1lclwiLFxuICBcIkNhc2ltaXJcIixcbiAgXCJDYXNwZXJcIixcbiAgXCJDYXNzYW5kcmFcIixcbiAgXCJDYXNzYW5kcmVcIixcbiAgXCJDYXNzaWR5XCIsXG4gIFwiQ2Fzc2llXCIsXG4gIFwiQ2F0YWxpbmFcIixcbiAgXCJDYXRlcmluYVwiLFxuICBcIkNhdGhhcmluZVwiLFxuICBcIkNhdGhlcmluZVwiLFxuICBcIkNhdGhyaW5lXCIsXG4gIFwiQ2F0aHJ5blwiLFxuICBcIkNhdGh5XCIsXG4gIFwiQ2F5bGFcIixcbiAgXCJDZWFzYXJcIixcbiAgXCJDZWNlbGlhXCIsXG4gIFwiQ2VjaWxcIixcbiAgXCJDZWNpbGVcIixcbiAgXCJDZWNpbGlhXCIsXG4gIFwiQ2Vkcmlja1wiLFxuICBcIkNlbGVzdGluZVwiLFxuICBcIkNlbGVzdGlub1wiLFxuICBcIkNlbGlhXCIsXG4gIFwiQ2VsaW5lXCIsXG4gIFwiQ2VzYXJcIixcbiAgXCJDaGFkXCIsXG4gIFwiQ2hhZGRcIixcbiAgXCJDaGFkcmlja1wiLFxuICBcIkNoYWltXCIsXG4gIFwiQ2hhbmNlXCIsXG4gIFwiQ2hhbmRsZXJcIixcbiAgXCJDaGFuZWxcIixcbiAgXCJDaGFuZWxsZVwiLFxuICBcIkNoYXJpdHlcIixcbiAgXCJDaGFybGVuZVwiLFxuICBcIkNoYXJsZXNcIixcbiAgXCJDaGFybGV5XCIsXG4gIFwiQ2hhcmxpZVwiLFxuICBcIkNoYXJsb3R0ZVwiLFxuICBcIkNoYXNlXCIsXG4gIFwiQ2hhc2l0eVwiLFxuICBcIkNoYXVuY2V5XCIsXG4gIFwiQ2hheWFcIixcbiAgXCJDaGF6XCIsXG4gIFwiQ2hlbHNlYVwiLFxuICBcIkNoZWxzZXlcIixcbiAgXCJDaGVsc2llXCIsXG4gIFwiQ2hlc2xleVwiLFxuICBcIkNoZXN0ZXJcIixcbiAgXCJDaGV0XCIsXG4gIFwiQ2hleWFubmVcIixcbiAgXCJDaGV5ZW5uZVwiLFxuICBcIkNobG9lXCIsXG4gIFwiQ2hyaXNcIixcbiAgXCJDaHJpc3RcIixcbiAgXCJDaHJpc3RhXCIsXG4gIFwiQ2hyaXN0ZWxsZVwiLFxuICBcIkNocmlzdGlhblwiLFxuICBcIkNocmlzdGlhbmFcIixcbiAgXCJDaHJpc3RpbmFcIixcbiAgXCJDaHJpc3RpbmVcIixcbiAgXCJDaHJpc3RvcFwiLFxuICBcIkNocmlzdG9waGVcIixcbiAgXCJDaHJpc3RvcGhlclwiLFxuICBcIkNocmlzdHlcIixcbiAgXCJDaHluYVwiLFxuICBcIkNpYXJhXCIsXG4gIFwiQ2ljZXJvXCIsXG4gIFwiQ2llbG9cIixcbiAgXCJDaWVycmFcIixcbiAgXCJDaW5keVwiLFxuICBcIkNpdGxhbGxpXCIsXG4gIFwiQ2xhaXJcIixcbiAgXCJDbGFpcmVcIixcbiAgXCJDbGFyYVwiLFxuICBcIkNsYXJhYmVsbGVcIixcbiAgXCJDbGFyZVwiLFxuICBcIkNsYXJpc3NhXCIsXG4gIFwiQ2xhcmtcIixcbiAgXCJDbGF1ZFwiLFxuICBcIkNsYXVkZVwiLFxuICBcIkNsYXVkaWFcIixcbiAgXCJDbGF1ZGllXCIsXG4gIFwiQ2xhdWRpbmVcIixcbiAgXCJDbGF5XCIsXG4gIFwiQ2xlbWVuc1wiLFxuICBcIkNsZW1lbnRcIixcbiAgXCJDbGVtZW50aW5hXCIsXG4gIFwiQ2xlbWVudGluZVwiLFxuICBcIkNsZW1taWVcIixcbiAgXCJDbGVvXCIsXG4gIFwiQ2xlb3JhXCIsXG4gIFwiQ2xldGFcIixcbiAgXCJDbGV0dXNcIixcbiAgXCJDbGV2ZVwiLFxuICBcIkNsZXZlbGFuZFwiLFxuICBcIkNsaWZmb3JkXCIsXG4gIFwiQ2xpZnRvblwiLFxuICBcIkNsaW50XCIsXG4gIFwiQ2xpbnRvblwiLFxuICBcIkNsb3RpbGRlXCIsXG4gIFwiQ2xvdmlzXCIsXG4gIFwiQ2xveWRcIixcbiAgXCJDbHlkZVwiLFxuICBcIkNvYnlcIixcbiAgXCJDb2R5XCIsXG4gIFwiQ29sYnlcIixcbiAgXCJDb2xlXCIsXG4gIFwiQ29sZW1hblwiLFxuICBcIkNvbGluXCIsXG4gIFwiQ29sbGVlblwiLFxuICBcIkNvbGxpblwiLFxuICBcIkNvbHRcIixcbiAgXCJDb2x0ZW5cIixcbiAgXCJDb2x0b25cIixcbiAgXCJDb2x1bWJ1c1wiLFxuICBcIkNvbmNlcGNpb25cIixcbiAgXCJDb25uZXJcIixcbiAgXCJDb25uaWVcIixcbiAgXCJDb25ub3JcIixcbiAgXCJDb25vclwiLFxuICBcIkNvbnJhZFwiLFxuICBcIkNvbnN0YW5jZVwiLFxuICBcIkNvbnN0YW50aW5cIixcbiAgXCJDb25zdWVsb1wiLFxuICBcIkNvb3BlclwiLFxuICBcIkNvcmFcIixcbiAgXCJDb3JhbGllXCIsXG4gIFwiQ29yYmluXCIsXG4gIFwiQ29yZGVsaWFcIixcbiAgXCJDb3JkZWxsXCIsXG4gIFwiQ29yZGlhXCIsXG4gIFwiQ29yZGllXCIsXG4gIFwiQ29yZW5lXCIsXG4gIFwiQ29yaW5lXCIsXG4gIFwiQ29ybmVsaXVzXCIsXG4gIFwiQ29ybmVsbFwiLFxuICBcIkNvcnJpbmVcIixcbiAgXCJDb3J0ZXpcIixcbiAgXCJDb3J0bmV5XCIsXG4gIFwiQ29yeVwiLFxuICBcIkNvdHlcIixcbiAgXCJDb3VydG5leVwiLFxuICBcIkNveVwiLFxuICBcIkNyYWlnXCIsXG4gIFwiQ3Jhd2ZvcmRcIixcbiAgXCJDcmVvbGFcIixcbiAgXCJDcmlzdGFsXCIsXG4gIFwiQ3Jpc3RpYW5cIixcbiAgXCJDcmlzdGluYVwiLFxuICBcIkNyaXN0b2JhbFwiLFxuICBcIkNyaXN0b3BoZXJcIixcbiAgXCJDcnV6XCIsXG4gIFwiQ3J5c3RhbFwiLFxuICBcIkNyeXN0ZWxcIixcbiAgXCJDdWxsZW5cIixcbiAgXCJDdXJ0XCIsXG4gIFwiQ3VydGlzXCIsXG4gIFwiQ3lkbmV5XCIsXG4gIFwiQ3ludGhpYVwiLFxuICBcIkN5cmlsXCIsXG4gIFwiQ3lydXNcIixcbiAgXCJEYWdtYXJcIixcbiAgXCJEYWhsaWFcIixcbiAgXCJEYWlqYVwiLFxuICBcIkRhaXNoYVwiLFxuICBcIkRhaXN5XCIsXG4gIFwiRGFrb3RhXCIsXG4gIFwiRGFsZVwiLFxuICBcIkRhbGxhc1wiLFxuICBcIkRhbGxpblwiLFxuICBcIkRhbHRvblwiLFxuICBcIkRhbWFyaXNcIixcbiAgXCJEYW1lb25cIixcbiAgXCJEYW1pYW5cIixcbiAgXCJEYW1pZW5cIixcbiAgXCJEYW1pb25cIixcbiAgXCJEYW1vblwiLFxuICBcIkRhblwiLFxuICBcIkRhbmFcIixcbiAgXCJEYW5kcmVcIixcbiAgXCJEYW5lXCIsXG4gIFwiRCdhbmdlbG9cIixcbiAgXCJEYW5nZWxvXCIsXG4gIFwiRGFuaWFsXCIsXG4gIFwiRGFuaWVsYVwiLFxuICBcIkRhbmllbGxhXCIsXG4gIFwiRGFuaWVsbGVcIixcbiAgXCJEYW5pa2FcIixcbiAgXCJEYW5uaWVcIixcbiAgXCJEYW5ueVwiLFxuICBcIkRhbnRlXCIsXG4gIFwiRGFueWthXCIsXG4gIFwiRGFwaG5lXCIsXG4gIFwiRGFwaG5lZVwiLFxuICBcIkRhcGhuZXlcIixcbiAgXCJEYXJieVwiLFxuICBcIkRhcmVuXCIsXG4gIFwiRGFyaWFuXCIsXG4gIFwiRGFyaWFuYVwiLFxuICBcIkRhcmllblwiLFxuICBcIkRhcmlvXCIsXG4gIFwiRGFyaW9uXCIsXG4gIFwiRGFyaXVzXCIsXG4gIFwiRGFybGVuZVwiLFxuICBcIkRhcm9uXCIsXG4gIFwiRGFycmVsXCIsXG4gIFwiRGFycmVsbFwiLFxuICBcIkRhcnJlblwiLFxuICBcIkRhcnJpY2tcIixcbiAgXCJEYXJyaW5cIixcbiAgXCJEYXJyaW9uXCIsXG4gIFwiRGFycm9uXCIsXG4gIFwiRGFycnlsXCIsXG4gIFwiRGFyd2luXCIsXG4gIFwiRGFyeWxcIixcbiAgXCJEYXNoYXduXCIsXG4gIFwiRGFzaWFcIixcbiAgXCJEYXZlXCIsXG4gIFwiRGF2aWRcIixcbiAgXCJEYXZpblwiLFxuICBcIkRhdmlvblwiLFxuICBcIkRhdm9uXCIsXG4gIFwiRGF2b250ZVwiLFxuICBcIkRhd25cIixcbiAgXCJEYXdzb25cIixcbiAgXCJEYXhcIixcbiAgXCJEYXlhbmFcIixcbiAgXCJEYXluYVwiLFxuICBcIkRheW5lXCIsXG4gIFwiRGF5dG9uXCIsXG4gIFwiRGVhblwiLFxuICBcIkRlYW5nZWxvXCIsXG4gIFwiRGVhbm5hXCIsXG4gIFwiRGVib3JhaFwiLFxuICBcIkRlY2xhblwiLFxuICBcIkRlZHJpY1wiLFxuICBcIkRlZHJpY2tcIixcbiAgXCJEZWVcIixcbiAgXCJEZWlvblwiLFxuICBcIkRlamFcIixcbiAgXCJEZWphaFwiLFxuICBcIkRlam9uXCIsXG4gIFwiRGVqdWFuXCIsXG4gIFwiRGVsYW5leVwiLFxuICBcIkRlbGJlcnRcIixcbiAgXCJEZWxmaW5hXCIsXG4gIFwiRGVsaWFcIixcbiAgXCJEZWxpbGFoXCIsXG4gIFwiRGVsbFwiLFxuICBcIkRlbGxhXCIsXG4gIFwiRGVsbWVyXCIsXG4gIFwiRGVsb3Jlc1wiLFxuICBcIkRlbHBoYVwiLFxuICBcIkRlbHBoaWFcIixcbiAgXCJEZWxwaGluZVwiLFxuICBcIkRlbHRhXCIsXG4gIFwiRGVtYXJjb1wiLFxuICBcIkRlbWFyY3VzXCIsXG4gIFwiRGVtYXJpb1wiLFxuICBcIkRlbWV0cmlzXCIsXG4gIFwiRGVtZXRyaXVzXCIsXG4gIFwiRGVtb25kXCIsXG4gIFwiRGVuYVwiLFxuICBcIkRlbmlzXCIsXG4gIFwiRGVubmlzXCIsXG4gIFwiRGVvblwiLFxuICBcIkRlb25kcmVcIixcbiAgXCJEZW9udGFlXCIsXG4gIFwiRGVvbnRlXCIsXG4gIFwiRGVyZWNrXCIsXG4gIFwiRGVyZWtcIixcbiAgXCJEZXJpY2tcIixcbiAgXCJEZXJvblwiLFxuICBcIkRlcnJpY2tcIixcbiAgXCJEZXNoYXVuXCIsXG4gIFwiRGVzaGF3blwiLFxuICBcIkRlc2lyZWVcIixcbiAgXCJEZXNtb25kXCIsXG4gIFwiRGVzc2llXCIsXG4gIFwiRGVzdGFueVwiLFxuICBcIkRlc3RpblwiLFxuICBcIkRlc3RpbmVlXCIsXG4gIFwiRGVzdGluZXlcIixcbiAgXCJEZXN0aW5pXCIsXG4gIFwiRGVzdGlueVwiLFxuICBcIkRldmFuXCIsXG4gIFwiRGV2YW50ZVwiLFxuICBcIkRldmVuXCIsXG4gIFwiRGV2aW5cIixcbiAgXCJEZXZvblwiLFxuICBcIkRldm9udGVcIixcbiAgXCJEZXZ5blwiLFxuICBcIkRld2F5bmVcIixcbiAgXCJEZXdpdHRcIixcbiAgXCJEZXh0ZXJcIixcbiAgXCJEaWFtb25kXCIsXG4gIFwiRGlhbmFcIixcbiAgXCJEaWFubmFcIixcbiAgXCJEaWVnb1wiLFxuICBcIkRpbGxhblwiLFxuICBcIkRpbGxvblwiLFxuICBcIkRpbWl0cmlcIixcbiAgXCJEaW5hXCIsXG4gIFwiRGlub1wiLFxuICBcIkRpb25cIixcbiAgXCJEaXhpZVwiLFxuICBcIkRvY2tcIixcbiAgXCJEb2xseVwiLFxuICBcIkRvbG9yZXNcIixcbiAgXCJEb21lbmljXCIsXG4gIFwiRG9tZW5pY2FcIixcbiAgXCJEb21lbmlja1wiLFxuICBcIkRvbWVuaWNvXCIsXG4gIFwiRG9taW5nb1wiLFxuICBcIkRvbWluaWNcIixcbiAgXCJEb21pbmlxdWVcIixcbiAgXCJEb25cIixcbiAgXCJEb25hbGRcIixcbiAgXCJEb25hdG9cIixcbiAgXCJEb25hdm9uXCIsXG4gIFwiRG9ubmFcIixcbiAgXCJEb25uZWxsXCIsXG4gIFwiRG9ubmllXCIsXG4gIFwiRG9ubnlcIixcbiAgXCJEb3JhXCIsXG4gIFwiRG9yY2FzXCIsXG4gIFwiRG9yaWFuXCIsXG4gIFwiRG9yaXNcIixcbiAgXCJEb3JvdGhlYVwiLFxuICBcIkRvcm90aHlcIixcbiAgXCJEb3JyaXNcIixcbiAgXCJEb3J0aGFcIixcbiAgXCJEb3J0aHlcIixcbiAgXCJEb3VnXCIsXG4gIFwiRG91Z2xhc1wiLFxuICBcIkRvdmllXCIsXG4gIFwiRG95bGVcIixcbiAgXCJEcmFrZVwiLFxuICBcIkRyZXdcIixcbiAgXCJEdWFuZVwiLFxuICBcIkR1ZGxleVwiLFxuICBcIkR1bGNlXCIsXG4gIFwiRHVuY2FuXCIsXG4gIFwiRHVyd2FyZFwiLFxuICBcIkR1c3RpblwiLFxuICBcIkR1c3R5XCIsXG4gIFwiRHdpZ2h0XCIsXG4gIFwiRHlsYW5cIixcbiAgXCJFYXJsXCIsXG4gIFwiRWFybGVuZVwiLFxuICBcIkVhcmxpbmVcIixcbiAgXCJFYXJuZXN0XCIsXG4gIFwiRWFybmVzdGluZVwiLFxuICBcIkVhc3RlclwiLFxuICBcIkVhc3RvblwiLFxuICBcIkViYmFcIixcbiAgXCJFYm9ueVwiLFxuICBcIkVkXCIsXG4gIFwiRWRhXCIsXG4gIFwiRWRkXCIsXG4gIFwiRWRkaWVcIixcbiAgXCJFZGVuXCIsXG4gIFwiRWRnYXJcIixcbiAgXCJFZGdhcmRvXCIsXG4gIFwiRWRpc29uXCIsXG4gIFwiRWRtb25kXCIsXG4gIFwiRWRtdW5kXCIsXG4gIFwiRWRuYVwiLFxuICBcIkVkdWFyZG9cIixcbiAgXCJFZHdhcmRcIixcbiAgXCJFZHdhcmRvXCIsXG4gIFwiRWR3aW5cIixcbiAgXCJFZHdpbmFcIixcbiAgXCJFZHl0aFwiLFxuICBcIkVkeXRoZVwiLFxuICBcIkVmZmllXCIsXG4gIFwiRWZyYWluXCIsXG4gIFwiRWZyZW5cIixcbiAgXCJFaWxlZW5cIixcbiAgXCJFaW5hclwiLFxuICBcIkVpbm9cIixcbiAgXCJFbGFkaW9cIixcbiAgXCJFbGFpbmFcIixcbiAgXCJFbGJlcnRcIixcbiAgXCJFbGRhXCIsXG4gIFwiRWxkb25cIixcbiAgXCJFbGRvcmFcIixcbiAgXCJFbGRyZWRcIixcbiAgXCJFbGRyaWRnZVwiLFxuICBcIkVsZWFub3JhXCIsXG4gIFwiRWxlYW5vcmVcIixcbiAgXCJFbGVhemFyXCIsXG4gIFwiRWxlY3RhXCIsXG4gIFwiRWxlbmFcIixcbiAgXCJFbGVub3JcIixcbiAgXCJFbGVub3JhXCIsXG4gIFwiRWxlb25vcmVcIixcbiAgXCJFbGZyaWVkYVwiLFxuICBcIkVsaVwiLFxuICBcIkVsaWFuXCIsXG4gIFwiRWxpYW5lXCIsXG4gIFwiRWxpYXNcIixcbiAgXCJFbGllemVyXCIsXG4gIFwiRWxpamFoXCIsXG4gIFwiRWxpbm9yXCIsXG4gIFwiRWxpbm9yZVwiLFxuICBcIkVsaXNhXCIsXG4gIFwiRWxpc2FiZXRoXCIsXG4gIFwiRWxpc2VcIixcbiAgXCJFbGlzZW9cIixcbiAgXCJFbGlzaGFcIixcbiAgXCJFbGlzc2FcIixcbiAgXCJFbGl6YVwiLFxuICBcIkVsaXphYmV0aFwiLFxuICBcIkVsbGFcIixcbiAgXCJFbGxlblwiLFxuICBcIkVsbGllXCIsXG4gIFwiRWxsaW90XCIsXG4gIFwiRWxsaW90dFwiLFxuICBcIkVsbGlzXCIsXG4gIFwiRWxsc3dvcnRoXCIsXG4gIFwiRWxtZXJcIixcbiAgXCJFbG1pcmFcIixcbiAgXCJFbG1vXCIsXG4gIFwiRWxtb3JlXCIsXG4gIFwiRWxuYVwiLFxuICBcIkVsbm9yYVwiLFxuICBcIkVsb2R5XCIsXG4gIFwiRWxvaXNhXCIsXG4gIFwiRWxvaXNlXCIsXG4gIFwiRWxvdWlzZVwiLFxuICBcIkVsb3lcIixcbiAgXCJFbHJveVwiLFxuICBcIkVsc2FcIixcbiAgXCJFbHNlXCIsXG4gIFwiRWxzaWVcIixcbiAgXCJFbHRhXCIsXG4gIFwiRWx0b25cIixcbiAgXCJFbHZhXCIsXG4gIFwiRWx2ZXJhXCIsXG4gIFwiRWx2aWVcIixcbiAgXCJFbHZpc1wiLFxuICBcIkVsd2luXCIsXG4gIFwiRWx3eW5cIixcbiAgXCJFbHlzZVwiLFxuICBcIkVseXNzYVwiLFxuICBcIkVsemFcIixcbiAgXCJFbWFudWVsXCIsXG4gIFwiRW1lbGlhXCIsXG4gIFwiRW1lbGllXCIsXG4gIFwiRW1lbHlcIixcbiAgXCJFbWVyYWxkXCIsXG4gIFwiRW1lcnNvblwiLFxuICBcIkVtZXJ5XCIsXG4gIFwiRW1pZVwiLFxuICBcIkVtaWxcIixcbiAgXCJFbWlsZVwiLFxuICBcIkVtaWxpYVwiLFxuICBcIkVtaWxpYW5vXCIsXG4gIFwiRW1pbGllXCIsXG4gIFwiRW1pbGlvXCIsXG4gIFwiRW1pbHlcIixcbiAgXCJFbW1hXCIsXG4gIFwiRW1tYWxlZVwiLFxuICBcIkVtbWFudWVsXCIsXG4gIFwiRW1tYW51ZWxsZVwiLFxuICBcIkVtbWV0XCIsXG4gIFwiRW1tZXR0XCIsXG4gIFwiRW1taWVcIixcbiAgXCJFbW1pdHRcIixcbiAgXCJFbW15XCIsXG4gIFwiRW1vcnlcIixcbiAgXCJFbmFcIixcbiAgXCJFbmlkXCIsXG4gIFwiRW5vY2hcIixcbiAgXCJFbm9sYVwiLFxuICBcIkVub3NcIixcbiAgXCJFbnJpY29cIixcbiAgXCJFbnJpcXVlXCIsXG4gIFwiRXBocmFpbVwiLFxuICBcIkVyYVwiLFxuICBcIkVyaWJlcnRvXCIsXG4gIFwiRXJpY1wiLFxuICBcIkVyaWNhXCIsXG4gIFwiRXJpY2hcIixcbiAgXCJFcmlja1wiLFxuICBcIkVyaWNrYVwiLFxuICBcIkVyaWtcIixcbiAgXCJFcmlrYVwiLFxuICBcIkVyaW5cIixcbiAgXCJFcmxpbmdcIixcbiAgXCJFcm5hXCIsXG4gIFwiRXJuZXN0XCIsXG4gIFwiRXJuZXN0aW5hXCIsXG4gIFwiRXJuZXN0aW5lXCIsXG4gIFwiRXJuZXN0b1wiLFxuICBcIkVybmllXCIsXG4gIFwiRXJ2aW5cIixcbiAgXCJFcndpblwiLFxuICBcIkVyeW5cIixcbiAgXCJFc21lcmFsZGFcIixcbiAgXCJFc3BlcmFuemFcIixcbiAgXCJFc3RhXCIsXG4gIFwiRXN0ZWJhblwiLFxuICBcIkVzdGVmYW5pYVwiLFxuICBcIkVzdGVsXCIsXG4gIFwiRXN0ZWxsXCIsXG4gIFwiRXN0ZWxsYVwiLFxuICBcIkVzdGVsbGVcIixcbiAgXCJFc3RldmFuXCIsXG4gIFwiRXN0aGVyXCIsXG4gIFwiRXN0cmVsbGFcIixcbiAgXCJFdGhhXCIsXG4gIFwiRXRoYW5cIixcbiAgXCJFdGhlbFwiLFxuICBcIkV0aGVseW5cIixcbiAgXCJFdGh5bFwiLFxuICBcIkV0dGllXCIsXG4gIFwiRXVkb3JhXCIsXG4gIFwiRXVnZW5lXCIsXG4gIFwiRXVnZW5pYVwiLFxuICBcIkV1bGFcIixcbiAgXCJFdWxhaFwiLFxuICBcIkV1bGFsaWFcIixcbiAgXCJFdW5hXCIsXG4gIFwiRXVuaWNlXCIsXG4gIFwiRXVzZWJpb1wiLFxuICBcIkV2YVwiLFxuICBcIkV2YWx5blwiLFxuICBcIkV2YW5cIixcbiAgXCJFdmFuZ2VsaW5lXCIsXG4gIFwiRXZhbnNcIixcbiAgXCJFdmVcIixcbiAgXCJFdmVsaW5lXCIsXG4gIFwiRXZlbHluXCIsXG4gIFwiRXZlcmFyZG9cIixcbiAgXCJFdmVyZXR0XCIsXG4gIFwiRXZlcmV0dGVcIixcbiAgXCJFdmVydFwiLFxuICBcIkV2aWVcIixcbiAgXCJFd2FsZFwiLFxuICBcIkV3ZWxsXCIsXG4gIFwiRXpla2llbFwiLFxuICBcIkV6ZXF1aWVsXCIsXG4gIFwiRXpyYVwiLFxuICBcIkZhYmlhblwiLFxuICBcIkZhYmlvbGFcIixcbiAgXCJGYWVcIixcbiAgXCJGYW5uaWVcIixcbiAgXCJGYW5ueVwiLFxuICBcIkZhdGltYVwiLFxuICBcIkZhdXN0aW5vXCIsXG4gIFwiRmF1c3RvXCIsXG4gIFwiRmF2aWFuXCIsXG4gIFwiRmF5XCIsXG4gIFwiRmF5ZVwiLFxuICBcIkZlZGVyaWNvXCIsXG4gIFwiRmVsaWNpYVwiLFxuICBcIkZlbGljaXRhXCIsXG4gIFwiRmVsaWNpdHlcIixcbiAgXCJGZWxpcGFcIixcbiAgXCJGZWxpcGVcIixcbiAgXCJGZWxpeFwiLFxuICBcIkZlbHRvblwiLFxuICBcIkZlcm1pblwiLFxuICBcIkZlcm5cIixcbiAgXCJGZXJuYW5kb1wiLFxuICBcIkZlcm5lXCIsXG4gIFwiRmlkZWxcIixcbiAgXCJGaWxpYmVydG9cIixcbiAgXCJGaWxvbWVuYVwiLFxuICBcIkZpbm5cIixcbiAgXCJGaW9uYVwiLFxuICBcIkZsYXZpZVwiLFxuICBcIkZsYXZpb1wiLFxuICBcIkZsZXRhXCIsXG4gIFwiRmxldGNoZXJcIixcbiAgXCJGbG9cIixcbiAgXCJGbG9yZW5jZVwiLFxuICBcIkZsb3JlbmNpb1wiLFxuICBcIkZsb3JpYW5cIixcbiAgXCJGbG9yaWRhXCIsXG4gIFwiRmxvcmluZVwiLFxuICBcIkZsb3NzaWVcIixcbiAgXCJGbG95XCIsXG4gIFwiRmxveWRcIixcbiAgXCJGb3JkXCIsXG4gIFwiRm9yZXN0XCIsXG4gIFwiRm9ycmVzdFwiLFxuICBcIkZvc3RlclwiLFxuICBcIkZyYW5jZXNcIixcbiAgXCJGcmFuY2VzY2FcIixcbiAgXCJGcmFuY2VzY29cIixcbiAgXCJGcmFuY2lzXCIsXG4gIFwiRnJhbmNpc2NhXCIsXG4gIFwiRnJhbmNpc2NvXCIsXG4gIFwiRnJhbmNvXCIsXG4gIFwiRnJhbmtcIixcbiAgXCJGcmFua2llXCIsXG4gIFwiRnJhbnpcIixcbiAgXCJGcmVkXCIsXG4gIFwiRnJlZGFcIixcbiAgXCJGcmVkZGllXCIsXG4gIFwiRnJlZGR5XCIsXG4gIFwiRnJlZGVyaWNcIixcbiAgXCJGcmVkZXJpY2tcIixcbiAgXCJGcmVkZXJpa1wiLFxuICBcIkZyZWRlcmlxdWVcIixcbiAgXCJGcmVkcmlja1wiLFxuICBcIkZyZWR5XCIsXG4gIFwiRnJlZWRhXCIsXG4gIFwiRnJlZW1hblwiLFxuICBcIkZyZWlkYVwiLFxuICBcIkZyaWRhXCIsXG4gIFwiRnJpZWRhXCIsXG4gIFwiRnJpZWRyaWNoXCIsXG4gIFwiRnJpdHpcIixcbiAgXCJGdXJtYW5cIixcbiAgXCJHYWJlXCIsXG4gIFwiR2FicmllbFwiLFxuICBcIkdhYnJpZWxsYVwiLFxuICBcIkdhYnJpZWxsZVwiLFxuICBcIkdhZXRhbm9cIixcbiAgXCJHYWdlXCIsXG4gIFwiR2FpbFwiLFxuICBcIkdhcmRuZXJcIixcbiAgXCJHYXJldHRcIixcbiAgXCJHYXJmaWVsZFwiLFxuICBcIkdhcmxhbmRcIixcbiAgXCJHYXJuZXRcIixcbiAgXCJHYXJuZXR0XCIsXG4gIFwiR2FycmV0XCIsXG4gIFwiR2FycmV0dFwiLFxuICBcIkdhcnJpY2tcIixcbiAgXCJHYXJyaXNvblwiLFxuICBcIkdhcnJ5XCIsXG4gIFwiR2FydGhcIixcbiAgXCJHYXN0b25cIixcbiAgXCJHYXZpblwiLFxuICBcIkdheVwiLFxuICBcIkdheWxlXCIsXG4gIFwiR2F5bG9yZFwiLFxuICBcIkdlbmVcIixcbiAgXCJHZW5lcmFsXCIsXG4gIFwiR2VuZXNpc1wiLFxuICBcIkdlbmV2aWV2ZVwiLFxuICBcIkdlbm5hcm9cIixcbiAgXCJHZW5vdmV2YVwiLFxuICBcIkdlb1wiLFxuICBcIkdlb2ZmcmV5XCIsXG4gIFwiR2VvcmdlXCIsXG4gIFwiR2VvcmdldHRlXCIsXG4gIFwiR2VvcmdpYW5hXCIsXG4gIFwiR2VvcmdpYW5uYVwiLFxuICBcIkdlb3Zhbm5pXCIsXG4gIFwiR2VvdmFubnlcIixcbiAgXCJHZW92YW55XCIsXG4gIFwiR2VyYWxkXCIsXG4gIFwiR2VyYWxkaW5lXCIsXG4gIFwiR2VyYXJkXCIsXG4gIFwiR2VyYXJkb1wiLFxuICBcIkdlcmRhXCIsXG4gIFwiR2VyaGFyZFwiLFxuICBcIkdlcm1haW5lXCIsXG4gIFwiR2VybWFuXCIsXG4gIFwiR2VycnlcIixcbiAgXCJHZXJzb25cIixcbiAgXCJHZXJ0cnVkZVwiLFxuICBcIkdpYVwiLFxuICBcIkdpYW5uaVwiLFxuICBcIkdpZGVvblwiLFxuICBcIkdpbGJlcnRcIixcbiAgXCJHaWxiZXJ0b1wiLFxuICBcIkdpbGRhXCIsXG4gIFwiR2lsZXNcIixcbiAgXCJHaWxsaWFuXCIsXG4gIFwiR2luYVwiLFxuICBcIkdpbm9cIixcbiAgXCJHaW92YW5pXCIsXG4gIFwiR2lvdmFubmFcIixcbiAgXCJHaW92YW5uaVwiLFxuICBcIkdpb3Zhbm55XCIsXG4gIFwiR2lzc2VsbGVcIixcbiAgXCJHaXVzZXBwZVwiLFxuICBcIkdsYWR5Y2VcIixcbiAgXCJHbGFkeXNcIixcbiAgXCJHbGVuXCIsXG4gIFwiR2xlbmRhXCIsXG4gIFwiR2xlbm5hXCIsXG4gIFwiR2xlbm5pZVwiLFxuICBcIkdsb3JpYVwiLFxuICBcIkdvZGZyZXlcIixcbiAgXCJHb2xkYVwiLFxuICBcIkdvbGRlblwiLFxuICBcIkdvbnphbG9cIixcbiAgXCJHb3Jkb25cIixcbiAgXCJHcmFjZVwiLFxuICBcIkdyYWNpZVwiLFxuICBcIkdyYWNpZWxhXCIsXG4gIFwiR3JhZHlcIixcbiAgXCJHcmFoYW1cIixcbiAgXCJHcmFudFwiLFxuICBcIkdyYW52aWxsZVwiLFxuICBcIkdyYXljZVwiLFxuICBcIkdyYXlzb25cIixcbiAgXCJHcmVlblwiLFxuICBcIkdyZWdcIixcbiAgXCJHcmVnZ1wiLFxuICBcIkdyZWdvcmlhXCIsXG4gIFwiR3JlZ29yaW9cIixcbiAgXCJHcmVnb3J5XCIsXG4gIFwiR3JldGFcIixcbiAgXCJHcmV0Y2hlblwiLFxuICBcIkdyZXlzb25cIixcbiAgXCJHcmlmZmluXCIsXG4gIFwiR3JvdmVyXCIsXG4gIFwiR3VhZGFsdXBlXCIsXG4gIFwiR3VkcnVuXCIsXG4gIFwiR3VpZG9cIixcbiAgXCJHdWlsbGVybW9cIixcbiAgXCJHdWlzZXBwZVwiLFxuICBcIkd1bm5hclwiLFxuICBcIkd1bm5lclwiLFxuICBcIkd1c1wiLFxuICBcIkd1c3NpZVwiLFxuICBcIkd1c3RcIixcbiAgXCJHdXN0YXZlXCIsXG4gIFwiR3V5XCIsXG4gIFwiR3dlblwiLFxuICBcIkd3ZW5kb2x5blwiLFxuICBcIkhhZGxleVwiLFxuICBcIkhhaWxlZVwiLFxuICBcIkhhaWxleVwiLFxuICBcIkhhaWxpZVwiLFxuICBcIkhhbFwiLFxuICBcIkhhbGVpZ2hcIixcbiAgXCJIYWxleVwiLFxuICBcIkhhbGllXCIsXG4gIFwiSGFsbGVcIixcbiAgXCJIYWxsaWVcIixcbiAgXCJIYW5rXCIsXG4gIFwiSGFubmFcIixcbiAgXCJIYW5uYWhcIixcbiAgXCJIYW5zXCIsXG4gIFwiSGFyZHlcIixcbiAgXCJIYXJsZXlcIixcbiAgXCJIYXJtb25cIixcbiAgXCJIYXJtb255XCIsXG4gIFwiSGFyb2xkXCIsXG4gIFwiSGFycmlzb25cIixcbiAgXCJIYXJyeVwiLFxuICBcIkhhcnZleVwiLFxuICBcIkhhc2tlbGxcIixcbiAgXCJIYXNzYW5cIixcbiAgXCJIYXNzaWVcIixcbiAgXCJIYXR0aWVcIixcbiAgXCJIYXZlblwiLFxuICBcIkhheWRlblwiLFxuICBcIkhheWxlZVwiLFxuICBcIkhheWxleVwiLFxuICBcIkhheWxpZVwiLFxuICBcIkhhemVsXCIsXG4gIFwiSGF6bGVcIixcbiAgXCJIZWF0aFwiLFxuICBcIkhlYXRoZXJcIixcbiAgXCJIZWF2ZW5cIixcbiAgXCJIZWJlclwiLFxuICBcIkhlY3RvclwiLFxuICBcIkhlaWRpXCIsXG4gIFwiSGVsZW5cIixcbiAgXCJIZWxlbmFcIixcbiAgXCJIZWxlbmVcIixcbiAgXCJIZWxnYVwiLFxuICBcIkhlbGxlblwiLFxuICBcIkhlbG1lclwiLFxuICBcIkhlbG9pc2VcIixcbiAgXCJIZW5kZXJzb25cIixcbiAgXCJIZW5yaVwiLFxuICBcIkhlbnJpZXR0ZVwiLFxuICBcIkhlbnJ5XCIsXG4gIFwiSGVyYmVydFwiLFxuICBcIkhlcm1hblwiLFxuICBcIkhlcm1hbm5cIixcbiAgXCJIZXJtaW5hXCIsXG4gIFwiSGVybWluaWFcIixcbiAgXCJIZXJtaW5pb1wiLFxuICBcIkhlcnNoZWxcIixcbiAgXCJIZXJ0YVwiLFxuICBcIkhlcnRoYVwiLFxuICBcIkhlc3RlclwiLFxuICBcIkhldHRpZVwiLFxuICBcIkhpbGFyaW9cIixcbiAgXCJIaWxiZXJ0XCIsXG4gIFwiSGlsZGFcIixcbiAgXCJIaWxkZWdhcmRcIixcbiAgXCJIaWxsYXJkXCIsXG4gIFwiSGlsbGFyeVwiLFxuICBcIkhpbG1hXCIsXG4gIFwiSGlsdG9uXCIsXG4gIFwiSGlwb2xpdG9cIixcbiAgXCJIaXJhbVwiLFxuICBcIkhvYmFydFwiLFxuICBcIkhvbGRlblwiLFxuICBcIkhvbGxpZVwiLFxuICBcIkhvbGxpc1wiLFxuICBcIkhvbGx5XCIsXG4gIFwiSG9wZVwiLFxuICBcIkhvcmFjZVwiLFxuICBcIkhvcmFjaW9cIixcbiAgXCJIb3J0ZW5zZVwiLFxuICBcIkhvc2VhXCIsXG4gIFwiSG91c3RvblwiLFxuICBcIkhvd2FyZFwiLFxuICBcIkhvd2VsbFwiLFxuICBcIkhveXRcIixcbiAgXCJIdWJlcnRcIixcbiAgXCJIdWRzb25cIixcbiAgXCJIdWdoXCIsXG4gIFwiSHVsZGFcIixcbiAgXCJIdW1iZXJ0b1wiLFxuICBcIkh1bnRlclwiLFxuICBcIkh5bWFuXCIsXG4gIFwiSWFuXCIsXG4gIFwiSWJyYWhpbVwiLFxuICBcIkljaWVcIixcbiAgXCJJZGFcIixcbiAgXCJJZGVsbFwiLFxuICBcIklkZWxsYVwiLFxuICBcIklnbmFjaW9cIixcbiAgXCJJZ25hdGl1c1wiLFxuICBcIklrZVwiLFxuICBcIklsYVwiLFxuICBcIklsZW5lXCIsXG4gIFwiSWxpYW5hXCIsXG4gIFwiSW1hXCIsXG4gIFwiSW1hbmlcIixcbiAgXCJJbWVsZGFcIixcbiAgXCJJbW1hbnVlbFwiLFxuICBcIkltb2dlbmVcIixcbiAgXCJJbmVzXCIsXG4gIFwiSXJtYVwiLFxuICBcIklydmluZ1wiLFxuICBcIklyd2luXCIsXG4gIFwiSXNhYWNcIixcbiAgXCJJc2FiZWxcIixcbiAgXCJJc2FiZWxsXCIsXG4gIFwiSXNhYmVsbGFcIixcbiAgXCJJc2FiZWxsZVwiLFxuICBcIklzYWNcIixcbiAgXCJJc2Fkb3JlXCIsXG4gIFwiSXNhaVwiLFxuICBcIklzYWlhaFwiLFxuICBcIklzYWlhc1wiLFxuICBcIklzaWRyb1wiLFxuICBcIklzbWFlbFwiLFxuICBcIklzb2JlbFwiLFxuICBcIklzb21cIixcbiAgXCJJc3JhZWxcIixcbiAgXCJJc3NhY1wiLFxuICBcIkl0emVsXCIsXG4gIFwiSXZhXCIsXG4gIFwiSXZhaFwiLFxuICBcIkl2b3J5XCIsXG4gIFwiSXZ5XCIsXG4gIFwiSXphYmVsbGFcIixcbiAgXCJJemFpYWhcIixcbiAgXCJKYWJhcmlcIixcbiAgXCJKYWNlXCIsXG4gIFwiSmFjZXlcIixcbiAgXCJKYWNpbnRoZVwiLFxuICBcIkphY2ludG9cIixcbiAgXCJKYWNrXCIsXG4gIFwiSmFja2VsaW5lXCIsXG4gIFwiSmFja2llXCIsXG4gIFwiSmFja2x5blwiLFxuICBcIkphY2tzb25cIixcbiAgXCJKYWNreVwiLFxuICBcIkphY2x5blwiLFxuICBcIkphY3F1ZWx5blwiLFxuICBcIkphY3F1ZXNcIixcbiAgXCJKYWN5bnRoZVwiLFxuICBcIkphZGFcIixcbiAgXCJKYWRlXCIsXG4gIFwiSmFkZW5cIixcbiAgXCJKYWRvblwiLFxuICBcIkphZHluXCIsXG4gIFwiSmFlZGVuXCIsXG4gIFwiSmFpZGFcIixcbiAgXCJKYWlkZW5cIixcbiAgXCJKYWlseW5cIixcbiAgXCJKYWltZVwiLFxuICBcIkphaXJvXCIsXG4gIFwiSmFrYXlsYVwiLFxuICBcIkpha2VcIixcbiAgXCJKYWtvYlwiLFxuICBcIkphbGVlbFwiLFxuICBcIkphbGVuXCIsXG4gIFwiSmFsb25cIixcbiAgXCJKYWx5blwiLFxuICBcIkphbWFhbFwiLFxuICBcIkphbWFsXCIsXG4gIFwiSmFtYXJcIixcbiAgXCJKYW1hcmN1c1wiLFxuICBcIkphbWVsXCIsXG4gIFwiSmFtZXNvblwiLFxuICBcIkphbWV5XCIsXG4gIFwiSmFtaWVcIixcbiAgXCJKYW1pbFwiLFxuICBcIkphbWlyXCIsXG4gIFwiSmFtaXNvblwiLFxuICBcIkphbW1pZVwiLFxuICBcIkphblwiLFxuICBcIkphbmFcIixcbiAgXCJKYW5hZVwiLFxuICBcIkphbmVcIixcbiAgXCJKYW5lbGxlXCIsXG4gIFwiSmFuZXNzYVwiLFxuICBcIkphbmV0XCIsXG4gIFwiSmFuaWNlXCIsXG4gIFwiSmFuaWNrXCIsXG4gIFwiSmFuaWVcIixcbiAgXCJKYW5pc1wiLFxuICBcIkphbml5YVwiLFxuICBcIkphbm5pZVwiLFxuICBcIkphbnlcIixcbiAgXCJKYXF1YW5cIixcbiAgXCJKYXF1ZWxpblwiLFxuICBcIkphcXVlbGluZVwiLFxuICBcIkphcmVkXCIsXG4gIFwiSmFyZW5cIixcbiAgXCJKYXJvZFwiLFxuICBcIkphcm9uXCIsXG4gIFwiSmFycmVkXCIsXG4gIFwiSmFycmVsbFwiLFxuICBcIkphcnJldFwiLFxuICBcIkphcnJldHRcIixcbiAgXCJKYXJyb2RcIixcbiAgXCJKYXJ2aXNcIixcbiAgXCJKYXNlblwiLFxuICBcIkphc21pblwiLFxuICBcIkphc29uXCIsXG4gIFwiSmFzcGVyXCIsXG4gIFwiSmF1bml0YVwiLFxuICBcIkphdmllclwiLFxuICBcIkphdm9uXCIsXG4gIFwiSmF2b250ZVwiLFxuICBcIkpheVwiLFxuICBcIkpheWNlXCIsXG4gIFwiSmF5Y2VlXCIsXG4gIFwiSmF5ZGFcIixcbiAgXCJKYXlkZVwiLFxuICBcIkpheWRlblwiLFxuICBcIkpheWRvblwiLFxuICBcIkpheWxhblwiLFxuICBcIkpheWxlblwiLFxuICBcIkpheWxpblwiLFxuICBcIkpheWxvblwiLFxuICBcIkpheW1lXCIsXG4gIFwiSmF5bmVcIixcbiAgXCJKYXlzb25cIixcbiAgXCJKYXpseW5cIixcbiAgXCJKYXptaW5cIixcbiAgXCJKYXpteW5cIixcbiAgXCJKYXpteW5lXCIsXG4gIFwiSmVhblwiLFxuICBcIkplYW5ldHRlXCIsXG4gIFwiSmVhbmllXCIsXG4gIFwiSmVhbm5lXCIsXG4gIFwiSmVkXCIsXG4gIFwiSmVkZWRpYWhcIixcbiAgXCJKZWRpZGlhaFwiLFxuICBcIkplZmZcIixcbiAgXCJKZWZmZXJleVwiLFxuICBcIkplZmZlcnlcIixcbiAgXCJKZWZmcmV5XCIsXG4gIFwiSmVmZnJ5XCIsXG4gIFwiSmVuYVwiLFxuICBcIkplbmlmZXJcIixcbiAgXCJKZW5uaWVcIixcbiAgXCJKZW5uaWZlclwiLFxuICBcIkplbm5pbmdzXCIsXG4gIFwiSmVubnlmZXJcIixcbiAgXCJKZW5zZW5cIixcbiAgXCJKZXJhZFwiLFxuICBcIkplcmFsZFwiLFxuICBcIkplcmFtaWVcIixcbiAgXCJKZXJhbXlcIixcbiAgXCJKZXJlbFwiLFxuICBcIkplcmVtaWVcIixcbiAgXCJKZXJlbXlcIixcbiAgXCJKZXJtYWluXCIsXG4gIFwiSmVybWFpbmVcIixcbiAgXCJKZXJtZXlcIixcbiAgXCJKZXJvZFwiLFxuICBcIkplcm9tZVwiLFxuICBcIkplcm9teVwiLFxuICBcIkplcnJlbGxcIixcbiAgXCJKZXJyb2RcIixcbiAgXCJKZXJyb2xkXCIsXG4gIFwiSmVycnlcIixcbiAgXCJKZXNzXCIsXG4gIFwiSmVzc2VcIixcbiAgXCJKZXNzaWNhXCIsXG4gIFwiSmVzc2llXCIsXG4gIFwiSmVzc2lrYVwiLFxuICBcIkplc3N5XCIsXG4gIFwiSmVzc3ljYVwiLFxuICBcIkplc3VzXCIsXG4gIFwiSmV0dFwiLFxuICBcIkpldHRpZVwiLFxuICBcIkpldm9uXCIsXG4gIFwiSmV3ZWxcIixcbiAgXCJKZXdlbGxcIixcbiAgXCJKaWxsaWFuXCIsXG4gIFwiSmltbWllXCIsXG4gIFwiSmltbXlcIixcbiAgXCJKb1wiLFxuICBcIkpvYW5cIixcbiAgXCJKb2FuYVwiLFxuICBcIkpvYW5pZVwiLFxuICBcIkpvYW5uZVwiLFxuICBcIkpvYW5uaWVcIixcbiAgXCJKb2FubnlcIixcbiAgXCJKb2FueVwiLFxuICBcIkpvYXF1aW5cIixcbiAgXCJKb2NlbHluXCIsXG4gIFwiSm9kaWVcIixcbiAgXCJKb2R5XCIsXG4gIFwiSm9lXCIsXG4gIFwiSm9lbFwiLFxuICBcIkpvZWxsZVwiLFxuICBcIkpvZXNwaFwiLFxuICBcIkpvZXlcIixcbiAgXCJKb2hhblwiLFxuICBcIkpvaGFublwiLFxuICBcIkpvaGFubmFcIixcbiAgXCJKb2hhdGhhblwiLFxuICBcIkpvaG5cIixcbiAgXCJKb2huYXRoYW5cIixcbiAgXCJKb2huYXRob25cIixcbiAgXCJKb2hubmllXCIsXG4gIFwiSm9obm55XCIsXG4gIFwiSm9obnBhdWxcIixcbiAgXCJKb2huc29uXCIsXG4gIFwiSm9saWVcIixcbiAgXCJKb25cIixcbiAgXCJKb25hc1wiLFxuICBcIkpvbmF0YW5cIixcbiAgXCJKb25hdGhhblwiLFxuICBcIkpvbmF0aG9uXCIsXG4gIFwiSm9yZGFuXCIsXG4gIFwiSm9yZGFuZVwiLFxuICBcIkpvcmRpXCIsXG4gIFwiSm9yZG9uXCIsXG4gIFwiSm9yZHlcIixcbiAgXCJKb3JkeW5cIixcbiAgXCJKb3JnZVwiLFxuICBcIkpvc2VcIixcbiAgXCJKb3NlZmFcIixcbiAgXCJKb3NlZmluYVwiLFxuICBcIkpvc2VwaFwiLFxuICBcIkpvc2VwaGluZVwiLFxuICBcIkpvc2hcIixcbiAgXCJKb3NodWFcIixcbiAgXCJKb3NodWFoXCIsXG4gIFwiSm9zaWFoXCIsXG4gIFwiSm9zaWFuZVwiLFxuICBcIkpvc2lhbm5lXCIsXG4gIFwiSm9zaWVcIixcbiAgXCJKb3N1ZVwiLFxuICBcIkpvdmFuXCIsXG4gIFwiSm92YW5pXCIsXG4gIFwiSm92YW5ueVwiLFxuICBcIkpvdmFueVwiLFxuICBcIkpveVwiLFxuICBcIkpveWNlXCIsXG4gIFwiSnVhbmFcIixcbiAgXCJKdWFuaXRhXCIsXG4gIFwiSnVkYWhcIixcbiAgXCJKdWRkXCIsXG4gIFwiSnVkZVwiLFxuICBcIkp1ZGdlXCIsXG4gIFwiSnVkc29uXCIsXG4gIFwiSnVkeVwiLFxuICBcIkp1bGVzXCIsXG4gIFwiSnVsaWFcIixcbiAgXCJKdWxpYW5cIixcbiAgXCJKdWxpYW5hXCIsXG4gIFwiSnVsaWFubmVcIixcbiAgXCJKdWxpZVwiLFxuICBcIkp1bGllblwiLFxuICBcIkp1bGlldFwiLFxuICBcIkp1bGlvXCIsXG4gIFwiSnVsaXVzXCIsXG4gIFwiSnVuZVwiLFxuICBcIkp1bmlvclwiLFxuICBcIkp1bml1c1wiLFxuICBcIkp1c3RlblwiLFxuICBcIkp1c3RpY2VcIixcbiAgXCJKdXN0aW5hXCIsXG4gIFwiSnVzdGluZVwiLFxuICBcIkp1c3RvblwiLFxuICBcIkp1c3R1c1wiLFxuICBcIkp1c3R5blwiLFxuICBcIkp1dmVuYWxcIixcbiAgXCJKdXdhblwiLFxuICBcIkthY2V5XCIsXG4gIFwiS2FjaVwiLFxuICBcIkthY2llXCIsXG4gIFwiS2FkZVwiLFxuICBcIkthZGVuXCIsXG4gIFwiS2FkaW5cIixcbiAgXCJLYWVsYVwiLFxuICBcIkthZWx5blwiLFxuICBcIkthaWFcIixcbiAgXCJLYWlsZWVcIixcbiAgXCJLYWlsZXlcIixcbiAgXCJLYWlseW5cIixcbiAgXCJLYWl0bGluXCIsXG4gIFwiS2FpdGx5blwiLFxuICBcIkthbGVcIixcbiAgXCJLYWxlYlwiLFxuICBcIkthbGVpZ2hcIixcbiAgXCJLYWxleVwiLFxuICBcIkthbGlcIixcbiAgXCJLYWxsaWVcIixcbiAgXCJLYW1lcm9uXCIsXG4gIFwiS2FtaWxsZVwiLFxuICBcIkthbXJlblwiLFxuICBcIkthbXJvblwiLFxuICBcIkthbXJ5blwiLFxuICBcIkthbmVcIixcbiAgXCJLYXJhXCIsXG4gIFwiS2FyZWVtXCIsXG4gIFwiS2FyZWxsZVwiLFxuICBcIkthcmVuXCIsXG4gIFwiS2FyaVwiLFxuICBcIkthcmlhbmVcIixcbiAgXCJLYXJpYW5uZVwiLFxuICBcIkthcmluYVwiLFxuICBcIkthcmluZVwiLFxuICBcIkthcmxcIixcbiAgXCJLYXJsZWVcIixcbiAgXCJLYXJsZXlcIixcbiAgXCJLYXJsaVwiLFxuICBcIkthcmxpZVwiLFxuICBcIkthcm9sYW5uXCIsXG4gIFwiS2Fyc29uXCIsXG4gIFwiS2FzYW5kcmFcIixcbiAgXCJLYXNleVwiLFxuICBcIkthc3NhbmRyYVwiLFxuICBcIkthdGFyaW5hXCIsXG4gIFwiS2F0ZWxpblwiLFxuICBcIkthdGVseW5cIixcbiAgXCJLYXRlbHlublwiLFxuICBcIkthdGhhcmluYVwiLFxuICBcIkthdGhlcmluZVwiLFxuICBcIkthdGhlcnluXCIsXG4gIFwiS2F0aGxlZW5cIixcbiAgXCJLYXRobHluXCIsXG4gIFwiS2F0aHJ5blwiLFxuICBcIkthdGhyeW5lXCIsXG4gIFwiS2F0bHluXCIsXG4gIFwiS2F0bHlublwiLFxuICBcIkthdHJpbmFcIixcbiAgXCJLYXRyaW5lXCIsXG4gIFwiS2F0dGllXCIsXG4gIFwiS2F2b25cIixcbiAgXCJLYXlcIixcbiAgXCJLYXlhXCIsXG4gIFwiS2F5Y2VlXCIsXG4gIFwiS2F5ZGVuXCIsXG4gIFwiS2F5bGFcIixcbiAgXCJLYXlsYWhcIixcbiAgXCJLYXlsZWVcIixcbiAgXCJLYXlsZWlnaFwiLFxuICBcIktheWxleVwiLFxuICBcIktheWxpXCIsXG4gIFwiS2F5bGllXCIsXG4gIFwiS2F5bGluXCIsXG4gIFwiS2VhZ2FuXCIsXG4gIFwiS2VhbnVcIixcbiAgXCJLZWFyYVwiLFxuICBcIktlYXRvblwiLFxuICBcIktlZWdhblwiLFxuICBcIktlZWxleVwiLFxuICBcIktlZWx5XCIsXG4gIFwiS2VlbmFuXCIsXG4gIFwiS2VpcmFcIixcbiAgXCJLZWl0aFwiLFxuICBcIktlbGxlblwiLFxuICBcIktlbGxleVwiLFxuICBcIktlbGxpXCIsXG4gIFwiS2VsbGllXCIsXG4gIFwiS2VsbHlcIixcbiAgXCJLZWxzaVwiLFxuICBcIktlbHNpZVwiLFxuICBcIktlbHRvblwiLFxuICBcIktlbHZpblwiLFxuICBcIktlblwiLFxuICBcIktlbmRhbGxcIixcbiAgXCJLZW5kcmFcIixcbiAgXCJLZW5kcmlja1wiLFxuICBcIktlbm5hXCIsXG4gIFwiS2VubmVkaVwiLFxuICBcIktlbm5lZHlcIixcbiAgXCJLZW5uZXRoXCIsXG4gIFwiS2Vubml0aFwiLFxuICBcIktlbm55XCIsXG4gIFwiS2VudG9uXCIsXG4gIFwiS2VueWFcIixcbiAgXCJLZW55YXR0YVwiLFxuICBcIktlbnlvblwiLFxuICBcIktlb25cIixcbiAgXCJLZXNoYXVuXCIsXG4gIFwiS2VzaGF3blwiLFxuICBcIktldmVuXCIsXG4gIFwiS2V2aW5cIixcbiAgXCJLZXZvblwiLFxuICBcIktleW9uXCIsXG4gIFwiS2V5c2hhd25cIixcbiAgXCJLaGFsaWRcIixcbiAgXCJLaGFsaWxcIixcbiAgXCJLaWFuXCIsXG4gIFwiS2lhbmFcIixcbiAgXCJLaWFubmFcIixcbiAgXCJLaWFyYVwiLFxuICBcIktpYXJyYVwiLFxuICBcIktpZWxcIixcbiAgXCJLaWVyYVwiLFxuICBcIktpZXJhblwiLFxuICBcIktpbGV5XCIsXG4gIFwiS2ltXCIsXG4gIFwiS2ltYmVybHlcIixcbiAgXCJLaW5nXCIsXG4gIFwiS2lwXCIsXG4gIFwiS2lyYVwiLFxuICBcIktpcmtcIixcbiAgXCJLaXJzdGVuXCIsXG4gIFwiS2lyc3RpblwiLFxuICBcIktpdHR5XCIsXG4gIFwiS29iZVwiLFxuICBcIktvYnlcIixcbiAgXCJLb2R5XCIsXG4gIFwiS29sYnlcIixcbiAgXCJLb2xlXCIsXG4gIFwiS29yYmluXCIsXG4gIFwiS29yZXlcIixcbiAgXCJLb3J5XCIsXG4gIFwiS3JhaWdcIixcbiAgXCJLcmlzXCIsXG4gIFwiS3Jpc3RhXCIsXG4gIFwiS3Jpc3RpYW5cIixcbiAgXCJLcmlzdGluXCIsXG4gIFwiS3Jpc3RpbmFcIixcbiAgXCJLcmlzdG9mZXJcIixcbiAgXCJLcmlzdG9mZmVyXCIsXG4gIFwiS3Jpc3RvcGhlclwiLFxuICBcIktyaXN0eVwiLFxuICBcIktyeXN0YWxcIixcbiAgXCJLcnlzdGVsXCIsXG4gIFwiS3J5c3RpbmFcIixcbiAgXCJLdXJ0XCIsXG4gIFwiS3VydGlzXCIsXG4gIFwiS3lsYVwiLFxuICBcIkt5bGVcIixcbiAgXCJLeWxlZVwiLFxuICBcIkt5bGVpZ2hcIixcbiAgXCJLeWxlclwiLFxuICBcIkt5bGllXCIsXG4gIFwiS3lyYVwiLFxuICBcIkxhY2V5XCIsXG4gIFwiTGFjeVwiLFxuICBcIkxhZGFyaXVzXCIsXG4gIFwiTGFmYXlldHRlXCIsXG4gIFwiTGFpbGFcIixcbiAgXCJMYWlzaGFcIixcbiAgXCJMYW1hclwiLFxuICBcIkxhbWJlcnRcIixcbiAgXCJMYW1vbnRcIixcbiAgXCJMYW5jZVwiLFxuICBcIkxhbmRlblwiLFxuICBcIkxhbmVcIixcbiAgXCJMYW5leVwiLFxuICBcIkxhcmlzc2FcIixcbiAgXCJMYXJvblwiLFxuICBcIkxhcnJ5XCIsXG4gIFwiTGFydWVcIixcbiAgXCJMYXVyYVwiLFxuICBcIkxhdXJlbFwiLFxuICBcIkxhdXJlblwiLFxuICBcIkxhdXJlbmNlXCIsXG4gIFwiTGF1cmV0dGFcIixcbiAgXCJMYXVyaWFuZVwiLFxuICBcIkxhdXJpYW5uZVwiLFxuICBcIkxhdXJpZVwiLFxuICBcIkxhdXJpbmVcIixcbiAgXCJMYXVyeVwiLFxuICBcIkxhdXJ5blwiLFxuICBcIkxhdmFkYVwiLFxuICBcIkxhdmVyblwiLFxuICBcIkxhdmVybmFcIixcbiAgXCJMYXZlcm5lXCIsXG4gIFwiTGF2aW5hXCIsXG4gIFwiTGF2aW5pYVwiLFxuICBcIkxhdm9uXCIsXG4gIFwiTGF2b25uZVwiLFxuICBcIkxhd3JlbmNlXCIsXG4gIFwiTGF3c29uXCIsXG4gIFwiTGF5bGFcIixcbiAgXCJMYXluZVwiLFxuICBcIkxhemFyb1wiLFxuICBcIkxlYVwiLFxuICBcIkxlYW5uXCIsXG4gIFwiTGVhbm5hXCIsXG4gIFwiTGVhbm5lXCIsXG4gIFwiTGVhdGhhXCIsXG4gIFwiTGVkYVwiLFxuICBcIkxlZVwiLFxuICBcIkxlaWZcIixcbiAgXCJMZWlsYVwiLFxuICBcIkxlaWxhbmlcIixcbiAgXCJMZWxhXCIsXG4gIFwiTGVsYWhcIixcbiAgXCJMZWxhbmRcIixcbiAgXCJMZWxpYVwiLFxuICBcIkxlbXBpXCIsXG4gIFwiTGVtdWVsXCIsXG4gIFwiTGVubmFcIixcbiAgXCJMZW5uaWVcIixcbiAgXCJMZW5ueVwiLFxuICBcIkxlbm9yYVwiLFxuICBcIkxlbm9yZVwiLFxuICBcIkxlb1wiLFxuICBcIkxlb2xhXCIsXG4gIFwiTGVvblwiLFxuICBcIkxlb25hcmRcIixcbiAgXCJMZW9uYXJkb1wiLFxuICBcIkxlb25lXCIsXG4gIFwiTGVvbmVsXCIsXG4gIFwiTGVvbmllXCIsXG4gIFwiTGVvbm9yXCIsXG4gIFwiTGVvbm9yYVwiLFxuICBcIkxlb3BvbGRcIixcbiAgXCJMZW9wb2xkb1wiLFxuICBcIkxlb3JhXCIsXG4gIFwiTGVyYVwiLFxuICBcIkxlc2xleVwiLFxuICBcIkxlc2xpZVwiLFxuICBcIkxlc2x5XCIsXG4gIFwiTGVzc2llXCIsXG4gIFwiTGVzdGVyXCIsXG4gIFwiTGV0YVwiLFxuICBcIkxldGhhXCIsXG4gIFwiTGV0aXRpYVwiLFxuICBcIkxldmlcIixcbiAgXCJMZXdcIixcbiAgXCJMZXdpc1wiLFxuICBcIkxleGlcIixcbiAgXCJMZXhpZVwiLFxuICBcIkxleHVzXCIsXG4gIFwiTGlhXCIsXG4gIFwiTGlhbVwiLFxuICBcIkxpYW5hXCIsXG4gIFwiTGliYmllXCIsXG4gIFwiTGliYnlcIixcbiAgXCJMaWxhXCIsXG4gIFwiTGlsaWFuXCIsXG4gIFwiTGlsaWFuYVwiLFxuICBcIkxpbGlhbmVcIixcbiAgXCJMaWxsYVwiLFxuICBcIkxpbGxpYW5cIixcbiAgXCJMaWxsaWFuYVwiLFxuICBcIkxpbGxpZVwiLFxuICBcIkxpbGx5XCIsXG4gIFwiTGlseVwiLFxuICBcIkxpbHlhblwiLFxuICBcIkxpbmFcIixcbiAgXCJMaW5jb2xuXCIsXG4gIFwiTGluZGFcIixcbiAgXCJMaW5kc2F5XCIsXG4gIFwiTGluZHNleVwiLFxuICBcIkxpbm5lYVwiLFxuICBcIkxpbm5pZVwiLFxuICBcIkxpbndvb2RcIixcbiAgXCJMaW9uZWxcIixcbiAgXCJMaXNhXCIsXG4gIFwiTGlzYW5kcm9cIixcbiAgXCJMaXNldHRlXCIsXG4gIFwiTGl0enlcIixcbiAgXCJMaXphXCIsXG4gIFwiTGl6ZXRoXCIsXG4gIFwiTGl6emllXCIsXG4gIFwiTGxld2VsbHluXCIsXG4gIFwiTGxveWRcIixcbiAgXCJMb2dhblwiLFxuICBcIkxvaXNcIixcbiAgXCJMb2xhXCIsXG4gIFwiTG9saXRhXCIsXG4gIFwiTG9tYVwiLFxuICBcIkxvblwiLFxuICBcIkxvbmRvblwiLFxuICBcIkxvbmllXCIsXG4gIFwiTG9ubmllXCIsXG4gIFwiTG9ubnlcIixcbiAgXCJMb256b1wiLFxuICBcIkxvcmFcIixcbiAgXCJMb3JhaW5lXCIsXG4gIFwiTG9yZW5cIixcbiAgXCJMb3JlbmFcIixcbiAgXCJMb3JlbnpcIixcbiAgXCJMb3JlbnphXCIsXG4gIFwiTG9yZW56b1wiLFxuICBcIkxvcmlcIixcbiAgXCJMb3JpbmVcIixcbiAgXCJMb3JuYVwiLFxuICBcIkxvdHRpZVwiLFxuICBcIkxvdVwiLFxuICBcIkxvdWllXCIsXG4gIFwiTG91aXNhXCIsXG4gIFwiTG91cmRlc1wiLFxuICBcIkxvdXZlbmlhXCIsXG4gIFwiTG93ZWxsXCIsXG4gIFwiTG95XCIsXG4gIFwiTG95YWxcIixcbiAgXCJMb3ljZVwiLFxuICBcIkx1Y2FzXCIsXG4gIFwiTHVjaWFub1wiLFxuICBcIkx1Y2llXCIsXG4gIFwiTHVjaWVubmVcIixcbiAgXCJMdWNpbGVcIixcbiAgXCJMdWNpbmRhXCIsXG4gIFwiTHVjaW9cIixcbiAgXCJMdWNpb3VzXCIsXG4gIFwiTHVjaXVzXCIsXG4gIFwiTHVjeVwiLFxuICBcIkx1ZGllXCIsXG4gIFwiTHVkd2lnXCIsXG4gIFwiTHVlXCIsXG4gIFwiTHVlbGxhXCIsXG4gIFwiTHVpZ2lcIixcbiAgXCJMdWlzXCIsXG4gIFwiTHVpc2FcIixcbiAgXCJMdWthc1wiLFxuICBcIkx1bGFcIixcbiAgXCJMdWx1XCIsXG4gIFwiTHVuYVwiLFxuICBcIkx1cGVcIixcbiAgXCJMdXJhXCIsXG4gIFwiTHVybGluZVwiLFxuICBcIkx1dGhlclwiLFxuICBcIkx1elwiLFxuICBcIkx5ZGFcIixcbiAgXCJMeWRpYVwiLFxuICBcIkx5bGFcIixcbiAgXCJMeW5uXCIsXG4gIFwiTHlyaWNcIixcbiAgXCJMeXNhbm5lXCIsXG4gIFwiTWFiZWxcIixcbiAgXCJNYWJlbGxlXCIsXG4gIFwiTWFibGVcIixcbiAgXCJNYWNcIixcbiAgXCJNYWNleVwiLFxuICBcIk1hY2lcIixcbiAgXCJNYWNpZVwiLFxuICBcIk1hY2tcIixcbiAgXCJNYWNrZW56aWVcIixcbiAgXCJNYWN5XCIsXG4gIFwiTWFkYWxpbmVcIixcbiAgXCJNYWRhbHluXCIsXG4gIFwiTWFkZGlzb25cIixcbiAgXCJNYWRlbGluZVwiLFxuICBcIk1hZGVseW5cIixcbiAgXCJNYWRlbHlublwiLFxuICBcIk1hZGdlXCIsXG4gIFwiTWFkaWVcIixcbiAgXCJNYWRpbHluXCIsXG4gIFwiTWFkaXNlblwiLFxuICBcIk1hZGlzb25cIixcbiAgXCJNYWRpc3luXCIsXG4gIFwiTWFkb25uYVwiLFxuICBcIk1hZHlzb25cIixcbiAgXCJNYWVcIixcbiAgXCJNYWVnYW5cIixcbiAgXCJNYWV2ZVwiLFxuICBcIk1hZmFsZGFcIixcbiAgXCJNYWdhbGlcIixcbiAgXCJNYWdkYWxlblwiLFxuICBcIk1hZ2RhbGVuYVwiLFxuICBcIk1hZ2dpZVwiLFxuICBcIk1hZ25vbGlhXCIsXG4gIFwiTWFnbnVzXCIsXG4gIFwiTWFpYVwiLFxuICBcIk1haWRhXCIsXG4gIFwiTWFpeWFcIixcbiAgXCJNYWpvclwiLFxuICBcIk1ha2F5bGFcIixcbiAgXCJNYWtlbm5hXCIsXG4gIFwiTWFrZW56aWVcIixcbiAgXCJNYWxhY2hpXCIsXG4gIFwiTWFsY29sbVwiLFxuICBcIk1hbGlrYVwiLFxuICBcIk1hbGluZGFcIixcbiAgXCJNYWxsaWVcIixcbiAgXCJNYWxsb3J5XCIsXG4gIFwiTWFsdmluYVwiLFxuICBcIk1hbmR5XCIsXG4gIFwiTWFubGV5XCIsXG4gIFwiTWFudWVsXCIsXG4gIFwiTWFudWVsYVwiLFxuICBcIk1hcmFcIixcbiAgXCJNYXJjXCIsXG4gIFwiTWFyY2VsXCIsXG4gIFwiTWFyY2VsaW5hXCIsXG4gIFwiTWFyY2VsaW5vXCIsXG4gIFwiTWFyY2VsbGFcIixcbiAgXCJNYXJjZWxsZVwiLFxuICBcIk1hcmNlbGx1c1wiLFxuICBcIk1hcmNlbG9cIixcbiAgXCJNYXJjaWFcIixcbiAgXCJNYXJjb1wiLFxuICBcIk1hcmNvc1wiLFxuICBcIk1hcmN1c1wiLFxuICBcIk1hcmdhcmV0XCIsXG4gIFwiTWFyZ2FyZXRlXCIsXG4gIFwiTWFyZ2FyZXR0XCIsXG4gIFwiTWFyZ2FyZXR0YVwiLFxuICBcIk1hcmdhcmV0dGVcIixcbiAgXCJNYXJnYXJpdGFcIixcbiAgXCJNYXJnZVwiLFxuICBcIk1hcmdpZVwiLFxuICBcIk1hcmdvdFwiLFxuICBcIk1hcmdyZXRcIixcbiAgXCJNYXJndWVyaXRlXCIsXG4gIFwiTWFyaWFcIixcbiAgXCJNYXJpYWhcIixcbiAgXCJNYXJpYW1cIixcbiAgXCJNYXJpYW5cIixcbiAgXCJNYXJpYW5hXCIsXG4gIFwiTWFyaWFuZVwiLFxuICBcIk1hcmlhbm5hXCIsXG4gIFwiTWFyaWFubmVcIixcbiAgXCJNYXJpYW5vXCIsXG4gIFwiTWFyaWJlbFwiLFxuICBcIk1hcmllXCIsXG4gIFwiTWFyaWVsYVwiLFxuICBcIk1hcmllbGxlXCIsXG4gIFwiTWFyaWV0dGFcIixcbiAgXCJNYXJpbGllXCIsXG4gIFwiTWFyaWxvdVwiLFxuICBcIk1hcmlseW5lXCIsXG4gIFwiTWFyaW5hXCIsXG4gIFwiTWFyaW9cIixcbiAgXCJNYXJpb25cIixcbiAgXCJNYXJpc2FcIixcbiAgXCJNYXJpc29sXCIsXG4gIFwiTWFyaXR6YVwiLFxuICBcIk1hcmpvbGFpbmVcIixcbiAgXCJNYXJqb3JpZVwiLFxuICBcIk1hcmpvcnlcIixcbiAgXCJNYXJrXCIsXG4gIFwiTWFya3VzXCIsXG4gIFwiTWFybGVlXCIsXG4gIFwiTWFybGVuXCIsXG4gIFwiTWFybGVuZVwiLFxuICBcIk1hcmxleVwiLFxuICBcIk1hcmxpblwiLFxuICBcIk1hcmxvblwiLFxuICBcIk1hcnF1ZXNcIixcbiAgXCJNYXJxdWlzXCIsXG4gIFwiTWFycXVpc2VcIixcbiAgXCJNYXJzaGFsbFwiLFxuICBcIk1hcnRhXCIsXG4gIFwiTWFydGluXCIsXG4gIFwiTWFydGluYVwiLFxuICBcIk1hcnRpbmVcIixcbiAgXCJNYXJ0eVwiLFxuICBcIk1hcnZpblwiLFxuICBcIk1hcnlcIixcbiAgXCJNYXJ5YW1cIixcbiAgXCJNYXJ5amFuZVwiLFxuICBcIk1hcnlzZVwiLFxuICBcIk1hc29uXCIsXG4gIFwiTWF0ZW9cIixcbiAgXCJNYXRoZXdcIixcbiAgXCJNYXRoaWFzXCIsXG4gIFwiTWF0aGlsZGVcIixcbiAgXCJNYXRpbGRhXCIsXG4gIFwiTWF0aWxkZVwiLFxuICBcIk1hdHRcIixcbiAgXCJNYXR0ZW9cIixcbiAgXCJNYXR0aWVcIixcbiAgXCJNYXVkXCIsXG4gIFwiTWF1ZGVcIixcbiAgXCJNYXVkaWVcIixcbiAgXCJNYXVyZWVuXCIsXG4gIFwiTWF1cmljZVwiLFxuICBcIk1hdXJpY2lvXCIsXG4gIFwiTWF1cmluZVwiLFxuICBcIk1hdmVyaWNrXCIsXG4gIFwiTWF2aXNcIixcbiAgXCJNYXhcIixcbiAgXCJNYXhpZVwiLFxuICBcIk1heGltZVwiLFxuICBcIk1heGltaWxpYW5cIixcbiAgXCJNYXhpbWlsbGlhXCIsXG4gIFwiTWF4aW1pbGxpYW5cIixcbiAgXCJNYXhpbW9cIixcbiAgXCJNYXhpbXVzXCIsXG4gIFwiTWF4aW5lXCIsXG4gIFwiTWF4d2VsbFwiLFxuICBcIk1heVwiLFxuICBcIk1heWFcIixcbiAgXCJNYXliZWxsXCIsXG4gIFwiTWF5YmVsbGVcIixcbiAgXCJNYXllXCIsXG4gIFwiTWF5bWllXCIsXG4gIFwiTWF5bmFyZFwiLFxuICBcIk1heXJhXCIsXG4gIFwiTWF6aWVcIixcbiAgXCJNY2theWxhXCIsXG4gIFwiTWNrZW5uYVwiLFxuICBcIk1ja2VuemllXCIsXG4gIFwiTWVhZ2FuXCIsXG4gIFwiTWVhZ2hhblwiLFxuICBcIk1lZGFcIixcbiAgXCJNZWdhbmVcIixcbiAgXCJNZWdnaWVcIixcbiAgXCJNZWdoYW5cIixcbiAgXCJNZWtoaVwiLFxuICBcIk1lbGFueVwiLFxuICBcIk1lbGJhXCIsXG4gIFwiTWVsaXNhXCIsXG4gIFwiTWVsaXNzYVwiLFxuICBcIk1lbGxpZVwiLFxuICBcIk1lbG9keVwiLFxuICBcIk1lbHZpblwiLFxuICBcIk1lbHZpbmFcIixcbiAgXCJNZWx5bmFcIixcbiAgXCJNZWx5c3NhXCIsXG4gIFwiTWVyY2VkZXNcIixcbiAgXCJNZXJlZGl0aFwiLFxuICBcIk1lcmxcIixcbiAgXCJNZXJsZVwiLFxuICBcIk1lcmxpblwiLFxuICBcIk1lcnJpdHRcIixcbiAgXCJNZXJ0aWVcIixcbiAgXCJNZXJ2aW5cIixcbiAgXCJNZXRhXCIsXG4gIFwiTWlhXCIsXG4gIFwiTWljYWVsYVwiLFxuICBcIk1pY2FoXCIsXG4gIFwiTWljaGFlbFwiLFxuICBcIk1pY2hhZWxhXCIsXG4gIFwiTWljaGFsZVwiLFxuICBcIk1pY2hlYWxcIixcbiAgXCJNaWNoZWxcIixcbiAgXCJNaWNoZWxlXCIsXG4gIFwiTWljaGVsbGVcIixcbiAgXCJNaWd1ZWxcIixcbiAgXCJNaWtheWxhXCIsXG4gIFwiTWlrZVwiLFxuICBcIk1pa2VsXCIsXG4gIFwiTWlsYW5cIixcbiAgXCJNaWxlc1wiLFxuICBcIk1pbGZvcmRcIixcbiAgXCJNaWxsZXJcIixcbiAgXCJNaWxsaWVcIixcbiAgXCJNaWxvXCIsXG4gIFwiTWlsdG9uXCIsXG4gIFwiTWluYVwiLFxuICBcIk1pbmVydmFcIixcbiAgXCJNaW5uaWVcIixcbiAgXCJNaXJhY2xlXCIsXG4gIFwiTWlyZWlsbGVcIixcbiAgXCJNaXJleWFcIixcbiAgXCJNaXNhZWxcIixcbiAgXCJNaXNzb3VyaVwiLFxuICBcIk1pc3R5XCIsXG4gIFwiTWl0Y2hlbFwiLFxuICBcIk1pdGNoZWxsXCIsXG4gIFwiTWl0dGllXCIsXG4gIFwiTW9kZXN0YVwiLFxuICBcIk1vZGVzdG9cIixcbiAgXCJNb2hhbWVkXCIsXG4gIFwiTW9oYW1tYWRcIixcbiAgXCJNb2hhbW1lZFwiLFxuICBcIk1vaXNlc1wiLFxuICBcIk1vbGxpZVwiLFxuICBcIk1vbGx5XCIsXG4gIFwiTW9uYVwiLFxuICBcIk1vbmljYVwiLFxuICBcIk1vbmlxdWVcIixcbiAgXCJNb25yb2VcIixcbiAgXCJNb25zZXJyYXRcIixcbiAgXCJNb25zZXJyYXRlXCIsXG4gIFwiTW9udGFuYVwiLFxuICBcIk1vbnRlXCIsXG4gIFwiTW9udHlcIixcbiAgXCJNb3JnYW5cIixcbiAgXCJNb3JpYWhcIixcbiAgXCJNb3JyaXNcIixcbiAgXCJNb3J0aW1lclwiLFxuICBcIk1vcnRvblwiLFxuICBcIk1vc2VcIixcbiAgXCJNb3Nlc1wiLFxuICBcIk1vc2hlXCIsXG4gIFwiTW9zc2llXCIsXG4gIFwiTW96ZWxsXCIsXG4gIFwiTW96ZWxsZVwiLFxuICBcIk11aGFtbWFkXCIsXG4gIFwiTXVyaWVsXCIsXG4gIFwiTXVybFwiLFxuICBcIk11cnBoeVwiLFxuICBcIk11cnJheVwiLFxuICBcIk11c3RhZmFcIixcbiAgXCJNeWFcIixcbiAgXCJNeWFoXCIsXG4gIFwiTXlsZW5lXCIsXG4gIFwiTXlsZXNcIixcbiAgXCJNeXJhXCIsXG4gIFwiTXlyaWFtXCIsXG4gIFwiTXlybFwiLFxuICBcIk15cm5hXCIsXG4gIFwiTXlyb25cIixcbiAgXCJNeXJ0aWNlXCIsXG4gIFwiTXlydGllXCIsXG4gIFwiTXlydGlzXCIsXG4gIFwiTXlydGxlXCIsXG4gIFwiTmFkaWFcIixcbiAgXCJOYWtpYVwiLFxuICBcIk5hbWVcIixcbiAgXCJOYW5uaWVcIixcbiAgXCJOYW9taVwiLFxuICBcIk5hb21pZVwiLFxuICBcIk5hcG9sZW9uXCIsXG4gIFwiTmFyY2lzb1wiLFxuICBcIk5hc2hcIixcbiAgXCJOYXNpclwiLFxuICBcIk5hdFwiLFxuICBcIk5hdGFsaWFcIixcbiAgXCJOYXRhbGllXCIsXG4gIFwiTmF0YXNoYVwiLFxuICBcIk5hdGhhblwiLFxuICBcIk5hdGhhbmFlbFwiLFxuICBcIk5hdGhhbmlhbFwiLFxuICBcIk5hdGhhbmllbFwiLFxuICBcIk5hdGhlblwiLFxuICBcIk5heWVsaVwiLFxuICBcIk5lYWxcIixcbiAgXCJOZWRcIixcbiAgXCJOZWRyYVwiLFxuICBcIk5laGFcIixcbiAgXCJOZWlsXCIsXG4gIFwiTmVsZGFcIixcbiAgXCJOZWxsYVwiLFxuICBcIk5lbGxlXCIsXG4gIFwiTmVsbGllXCIsXG4gIFwiTmVsc1wiLFxuICBcIk5lbHNvblwiLFxuICBcIk5lb21hXCIsXG4gIFwiTmVzdG9yXCIsXG4gIFwiTmV0dGllXCIsXG4gIFwiTmV2YVwiLFxuICBcIk5ld2VsbFwiLFxuICBcIk5ld3RvblwiLFxuICBcIk5pYVwiLFxuICBcIk5pY2hvbGFzXCIsXG4gIFwiTmljaG9sYXVzXCIsXG4gIFwiTmljaG9sZVwiLFxuICBcIk5pY2tcIixcbiAgXCJOaWNrbGF1c1wiLFxuICBcIk5pY2tvbGFzXCIsXG4gIFwiTmljb1wiLFxuICBcIk5pY29sYVwiLFxuICBcIk5pY29sYXNcIixcbiAgXCJOaWNvbGVcIixcbiAgXCJOaWNvbGV0dGVcIixcbiAgXCJOaWdlbFwiLFxuICBcIk5pa2l0YVwiLFxuICBcIk5pa2tpXCIsXG4gIFwiTmlra29cIixcbiAgXCJOaWtvXCIsXG4gIFwiTmlrb2xhc1wiLFxuICBcIk5pbHNcIixcbiAgXCJOaW5hXCIsXG4gIFwiTm9haFwiLFxuICBcIk5vYmxlXCIsXG4gIFwiTm9lXCIsXG4gIFwiTm9lbFwiLFxuICBcIk5vZWxpYVwiLFxuICBcIk5vZW1pXCIsXG4gIFwiTm9lbWllXCIsXG4gIFwiTm9lbXlcIixcbiAgXCJOb2xhXCIsXG4gIFwiTm9sYW5cIixcbiAgXCJOb25hXCIsXG4gIFwiTm9yYVwiLFxuICBcIk5vcmJlcnRcIixcbiAgXCJOb3JiZXJ0b1wiLFxuICBcIk5vcmVuZVwiLFxuICBcIk5vcm1hXCIsXG4gIFwiTm9ycmlzXCIsXG4gIFwiTm9ydmFsXCIsXG4gIFwiTm9yd29vZFwiLFxuICBcIk5vdmFcIixcbiAgXCJOb3ZlbGxhXCIsXG4gIFwiTnlhXCIsXG4gIFwiTnlhaFwiLFxuICBcIk55YXNpYVwiLFxuICBcIk9iaWVcIixcbiAgXCJPY2VhbmVcIixcbiAgXCJPY2llXCIsXG4gIFwiT2N0YXZpYVwiLFxuICBcIk9kYVwiLFxuICBcIk9kZWxsXCIsXG4gIFwiT2Rlc3NhXCIsXG4gIFwiT2RpZVwiLFxuICBcIk9mZWxpYVwiLFxuICBcIk9rZXlcIixcbiAgXCJPbGFcIixcbiAgXCJPbGFmXCIsXG4gIFwiT2xlXCIsXG4gIFwiT2xlblwiLFxuICBcIk9sZXRhXCIsXG4gIFwiT2xnYVwiLFxuICBcIk9saW5cIixcbiAgXCJPbGl2ZXJcIixcbiAgXCJPbGxpZVwiLFxuICBcIk9tYVwiLFxuICBcIk9tYXJpXCIsXG4gIFwiT21lclwiLFxuICBcIk9uYVwiLFxuICBcIk9uaWVcIixcbiAgXCJPcGFsXCIsXG4gIFwiT3BoZWxpYVwiLFxuICBcIk9yYVwiLFxuICBcIk9yYWxcIixcbiAgXCJPcmFuXCIsXG4gIFwiT3JlblwiLFxuICBcIk9yaWVcIixcbiAgXCJPcmluXCIsXG4gIFwiT3Jpb25cIixcbiAgXCJPcmxhbmRcIixcbiAgXCJPcmxhbmRvXCIsXG4gIFwiT3Jsb1wiLFxuICBcIk9ycGhhXCIsXG4gIFwiT3JyaW5cIixcbiAgXCJPcnZhbFwiLFxuICBcIk9ydmlsbGVcIixcbiAgXCJPc2JhbGRvXCIsXG4gIFwiT3Nib3JuZVwiLFxuICBcIk9zY2FyXCIsXG4gIFwiT3N2YWxkb1wiLFxuICBcIk9zd2FsZFwiLFxuICBcIk9zd2FsZG9cIixcbiAgXCJPdGhhXCIsXG4gIFwiT3Rob1wiLFxuICBcIk90aWxpYVwiLFxuICBcIk90aXNcIixcbiAgXCJPdHRpbGllXCIsXG4gIFwiT3R0aXNcIixcbiAgXCJPdHRvXCIsXG4gIFwiT3ZhXCIsXG4gIFwiT3dlblwiLFxuICBcIk96ZWxsYVwiLFxuICBcIlBhYmxvXCIsXG4gIFwiUGFpZ2VcIixcbiAgXCJQYWxtYVwiLFxuICBcIlBhbWVsYVwiLFxuICBcIlBhbnN5XCIsXG4gIFwiUGFvbG9cIixcbiAgXCJQYXJpc1wiLFxuICBcIlBhcmtlclwiLFxuICBcIlBhc2NhbGVcIixcbiAgXCJQYXNxdWFsZVwiLFxuICBcIlBhdFwiLFxuICBcIlBhdGllbmNlXCIsXG4gIFwiUGF0cmljaWFcIixcbiAgXCJQYXRyaWNrXCIsXG4gIFwiUGF0c3lcIixcbiAgXCJQYXR0aWVcIixcbiAgXCJQYXVsXCIsXG4gIFwiUGF1bGFcIixcbiAgXCJQYXVsaW5lXCIsXG4gIFwiUGF4dG9uXCIsXG4gIFwiUGF5dG9uXCIsXG4gIFwiUGVhcmxcIixcbiAgXCJQZWFybGllXCIsXG4gIFwiUGVhcmxpbmVcIixcbiAgXCJQZWRyb1wiLFxuICBcIlBlZ2dpZVwiLFxuICBcIlBlbmVsb3BlXCIsXG4gIFwiUGVyY2l2YWxcIixcbiAgXCJQZXJjeVwiLFxuICBcIlBlcnJ5XCIsXG4gIFwiUGV0ZVwiLFxuICBcIlBldGVyXCIsXG4gIFwiUGV0cmFcIixcbiAgXCJQZXl0b25cIixcbiAgXCJQaGlsaXBcIixcbiAgXCJQaG9lYmVcIixcbiAgXCJQaHlsbGlzXCIsXG4gIFwiUGllcmNlXCIsXG4gIFwiUGllcnJlXCIsXG4gIFwiUGlldHJvXCIsXG4gIFwiUGlua1wiLFxuICBcIlBpbmtpZVwiLFxuICBcIlBpcGVyXCIsXG4gIFwiUG9sbHlcIixcbiAgXCJQb3J0ZXJcIixcbiAgXCJQcmVjaW91c1wiLFxuICBcIlByZXNsZXlcIixcbiAgXCJQcmVzdG9uXCIsXG4gIFwiUHJpY2VcIixcbiAgXCJQcmluY2VcIixcbiAgXCJQcmluY2Vzc1wiLFxuICBcIlByaXNjaWxsYVwiLFxuICBcIlByb3ZpZGVuY2lcIixcbiAgXCJQcnVkZW5jZVwiLFxuICBcIlF1ZWVuXCIsXG4gIFwiUXVlZW5pZVwiLFxuICBcIlF1ZW50aW5cIixcbiAgXCJRdWluY3lcIixcbiAgXCJRdWlublwiLFxuICBcIlF1aW50ZW5cIixcbiAgXCJRdWludG9uXCIsXG4gIFwiUmFjaGFlbFwiLFxuICBcIlJhY2hlbFwiLFxuICBcIlJhY2hlbGxlXCIsXG4gIFwiUmFlXCIsXG4gIFwiUmFlZ2FuXCIsXG4gIFwiUmFmYWVsXCIsXG4gIFwiUmFmYWVsYVwiLFxuICBcIlJhaGVlbVwiLFxuICBcIlJhaHNhYW5cIixcbiAgXCJSYWh1bFwiLFxuICBcIlJhaW5hXCIsXG4gIFwiUmFsZWlnaFwiLFxuICBcIlJhbHBoXCIsXG4gIFwiUmFtaXJvXCIsXG4gIFwiUmFtb25cIixcbiAgXCJSYW1vbmFcIixcbiAgXCJSYW5kYWxcIixcbiAgXCJSYW5kYWxsXCIsXG4gIFwiUmFuZGlcIixcbiAgXCJSYW5keVwiLFxuICBcIlJhbnNvbVwiLFxuICBcIlJhb3VsXCIsXG4gIFwiUmFwaGFlbFwiLFxuICBcIlJhcGhhZWxsZVwiLFxuICBcIlJhcXVlbFwiLFxuICBcIlJhc2hhZFwiLFxuICBcIlJhc2hhd25cIixcbiAgXCJSYXNoZWVkXCIsXG4gIFwiUmF1bFwiLFxuICBcIlJhdmVuXCIsXG4gIFwiUmF5XCIsXG4gIFwiUmF5bW9uZFwiLFxuICBcIlJheW11bmRvXCIsXG4gIFwiUmVhZ2FuXCIsXG4gIFwiUmVhbm5hXCIsXG4gIFwiUmViYVwiLFxuICBcIlJlYmVjYVwiLFxuICBcIlJlYmVjY2FcIixcbiAgXCJSZWJla2FcIixcbiAgXCJSZWJla2FoXCIsXG4gIFwiUmVlY2VcIixcbiAgXCJSZWVkXCIsXG4gIFwiUmVlc2VcIixcbiAgXCJSZWdhblwiLFxuICBcIlJlZ2dpZVwiLFxuICBcIlJlZ2luYWxkXCIsXG4gIFwiUmVpZFwiLFxuICBcIlJlaWxseVwiLFxuICBcIlJlaW5hXCIsXG4gIFwiUmVpbmhvbGRcIixcbiAgXCJSZW1pbmd0b25cIixcbiAgXCJSZW5lXCIsXG4gIFwiUmVuZWVcIixcbiAgXCJSZXNzaWVcIixcbiAgXCJSZXRhXCIsXG4gIFwiUmV0aGFcIixcbiAgXCJSZXR0YVwiLFxuICBcIlJldWJlblwiLFxuICBcIlJldmFcIixcbiAgXCJSZXhcIixcbiAgXCJSZXlcIixcbiAgXCJSZXllc1wiLFxuICBcIlJleW11bmRvXCIsXG4gIFwiUmV5bmFcIixcbiAgXCJSZXlub2xkXCIsXG4gIFwiUmhlYVwiLFxuICBcIlJoZXR0XCIsXG4gIFwiUmhpYW5uYVwiLFxuICBcIlJoaWFubm9uXCIsXG4gIFwiUmhvZGFcIixcbiAgXCJSaWNhcmRvXCIsXG4gIFwiUmljaGFyZFwiLFxuICBcIlJpY2hpZVwiLFxuICBcIlJpY2htb25kXCIsXG4gIFwiUmlja1wiLFxuICBcIlJpY2tleVwiLFxuICBcIlJpY2tpZVwiLFxuICBcIlJpY2t5XCIsXG4gIFwiUmljb1wiLFxuICBcIlJpZ29iZXJ0b1wiLFxuICBcIlJpbGV5XCIsXG4gIFwiUml0YVwiLFxuICBcIlJpdmVyXCIsXG4gIFwiUm9iYlwiLFxuICBcIlJvYmJpZVwiLFxuICBcIlJvYmVydFwiLFxuICBcIlJvYmVydGFcIixcbiAgXCJSb2JlcnRvXCIsXG4gIFwiUm9iaW5cIixcbiAgXCJSb2J5blwiLFxuICBcIlJvY2lvXCIsXG4gIFwiUm9ja3lcIixcbiAgXCJSb2RcIixcbiAgXCJSb2Rlcmlja1wiLFxuICBcIlJvZGdlclwiLFxuICBcIlJvZG9sZm9cIixcbiAgXCJSb2RyaWNrXCIsXG4gIFwiUm9kcmlnb1wiLFxuICBcIlJvZWxcIixcbiAgXCJSb2dlbGlvXCIsXG4gIFwiUm9nZXJcIixcbiAgXCJSb2dlcnNcIixcbiAgXCJSb2xhbmRvXCIsXG4gIFwiUm9sbGluXCIsXG4gIFwiUm9tYVwiLFxuICBcIlJvbWFpbmVcIixcbiAgXCJSb21hblwiLFxuICBcIlJvblwiLFxuICBcIlJvbmFsZG9cIixcbiAgXCJSb25ueVwiLFxuICBcIlJvb3NldmVsdFwiLFxuICBcIlJvcnlcIixcbiAgXCJSb3NhXCIsXG4gIFwiUm9zYWxlZVwiLFxuICBcIlJvc2FsaWFcIixcbiAgXCJSb3NhbGluZFwiLFxuICBcIlJvc2FsaW5kYVwiLFxuICBcIlJvc2FseW5cIixcbiAgXCJSb3NhbW9uZFwiLFxuICBcIlJvc2FubmFcIixcbiAgXCJSb3NhcmlvXCIsXG4gIFwiUm9zY29lXCIsXG4gIFwiUm9zZVwiLFxuICBcIlJvc2VsbGFcIixcbiAgXCJSb3NlbHluXCIsXG4gIFwiUm9zZW1hcmllXCIsXG4gIFwiUm9zZW1hcnlcIixcbiAgXCJSb3NlbmRvXCIsXG4gIFwiUm9zZXR0YVwiLFxuICBcIlJvc2llXCIsXG4gIFwiUm9zaW5hXCIsXG4gIFwiUm9zbHluXCIsXG4gIFwiUm9zc1wiLFxuICBcIlJvc3NpZVwiLFxuICBcIlJvd2FuXCIsXG4gIFwiUm93ZW5hXCIsXG4gIFwiUm93bGFuZFwiLFxuICBcIlJveGFuZVwiLFxuICBcIlJveGFubmVcIixcbiAgXCJSb3lcIixcbiAgXCJSb3lhbFwiLFxuICBcIlJveWNlXCIsXG4gIFwiUm96ZWxsYVwiLFxuICBcIlJ1YmVuXCIsXG4gIFwiUnViaWVcIixcbiAgXCJSdWJ5XCIsXG4gIFwiUnVieWVcIixcbiAgXCJSdWRvbHBoXCIsXG4gIFwiUnVkeVwiLFxuICBcIlJ1cGVydFwiLFxuICBcIlJ1c3NcIixcbiAgXCJSdXNzZWxcIixcbiAgXCJSdXNzZWxsXCIsXG4gIFwiUnVzdHlcIixcbiAgXCJSdXRoXCIsXG4gIFwiUnV0aGVcIixcbiAgXCJSdXRoaWVcIixcbiAgXCJSeWFuXCIsXG4gIFwiUnlhbm5cIixcbiAgXCJSeWRlclwiLFxuICBcIlJ5bGFuXCIsXG4gIFwiUnlsZWVcIixcbiAgXCJSeWxlaWdoXCIsXG4gIFwiUnlsZXlcIixcbiAgXCJTYWJpbmFcIixcbiAgXCJTYWJyaW5hXCIsXG4gIFwiU2FicnluYVwiLFxuICBcIlNhZGllXCIsXG4gIFwiU2FkeWVcIixcbiAgXCJTYWdlXCIsXG4gIFwiU2FpZ2VcIixcbiAgXCJTYWxsaWVcIixcbiAgXCJTYWxseVwiLFxuICBcIlNhbG1hXCIsXG4gIFwiU2FsdmFkb3JcIixcbiAgXCJTYWx2YXRvcmVcIixcbiAgXCJTYW1cIixcbiAgXCJTYW1hbnRhXCIsXG4gIFwiU2FtYW50aGFcIixcbiAgXCJTYW1hcmFcIixcbiAgXCJTYW1pclwiLFxuICBcIlNhbW1pZVwiLFxuICBcIlNhbW15XCIsXG4gIFwiU2Ftc29uXCIsXG4gIFwiU2FuZHJhXCIsXG4gIFwiU2FuZHJpbmVcIixcbiAgXCJTYW5keVwiLFxuICBcIlNhbmZvcmRcIixcbiAgXCJTYW50YVwiLFxuICBcIlNhbnRpYWdvXCIsXG4gIFwiU2FudGluYVwiLFxuICBcIlNhbnRpbm9cIixcbiAgXCJTYW50b3NcIixcbiAgXCJTYXJhaFwiLFxuICBcIlNhcmFpXCIsXG4gIFwiU2FyaW5hXCIsXG4gIFwiU2FzaGFcIixcbiAgXCJTYXVsXCIsXG4gIFwiU2F2YW5haFwiLFxuICBcIlNhdmFubmFcIixcbiAgXCJTYXZhbm5haFwiLFxuICBcIlNhdmlvblwiLFxuICBcIlNjYXJsZXR0XCIsXG4gIFwiU2NodXlsZXJcIixcbiAgXCJTY290XCIsXG4gIFwiU2NvdHRpZVwiLFxuICBcIlNjb3R0eVwiLFxuICBcIlNlYW11c1wiLFxuICBcIlNlYW5cIixcbiAgXCJTZWJhc3RpYW5cIixcbiAgXCJTZWRyaWNrXCIsXG4gIFwiU2VsZW5hXCIsXG4gIFwiU2VsaW5hXCIsXG4gIFwiU2VsbWVyXCIsXG4gIFwiU2VyZW5hXCIsXG4gIFwiU2VyZW5pdHlcIixcbiAgXCJTZXRoXCIsXG4gIFwiU2hhZFwiLFxuICBcIlNoYWluYVwiLFxuICBcIlNoYWtpcmFcIixcbiAgXCJTaGFuYVwiLFxuICBcIlNoYW5lXCIsXG4gIFwiU2hhbmVsXCIsXG4gIFwiU2hhbmVsbGVcIixcbiAgXCJTaGFuaWFcIixcbiAgXCJTaGFuaWVcIixcbiAgXCJTaGFuaXlhXCIsXG4gIFwiU2hhbm5hXCIsXG4gIFwiU2hhbm5vblwiLFxuICBcIlNoYW5ueVwiLFxuICBcIlNoYW5vblwiLFxuICBcIlNoYW55XCIsXG4gIFwiU2hhcm9uXCIsXG4gIFwiU2hhdW5cIixcbiAgXCJTaGF3blwiLFxuICBcIlNoYXduYVwiLFxuICBcIlNoYXlsZWVcIixcbiAgXCJTaGF5bmFcIixcbiAgXCJTaGF5bmVcIixcbiAgXCJTaGVhXCIsXG4gIFwiU2hlaWxhXCIsXG4gIFwiU2hlbGRvblwiLFxuICBcIlNoZW1hclwiLFxuICBcIlNoZXJpZGFuXCIsXG4gIFwiU2hlcm1hblwiLFxuICBcIlNoZXJ3b29kXCIsXG4gIFwiU2hpcmxleVwiLFxuICBcIlNoeWFublwiLFxuICBcIlNoeWFubmVcIixcbiAgXCJTaWJ5bFwiLFxuICBcIlNpZFwiLFxuICBcIlNpZG5leVwiLFxuICBcIlNpZW5uYVwiLFxuICBcIlNpZXJyYVwiLFxuICBcIlNpZ211bmRcIixcbiAgXCJTaWdyaWRcIixcbiAgXCJTaWd1cmRcIixcbiAgXCJTaWxhc1wiLFxuICBcIlNpbVwiLFxuICBcIlNpbWVvblwiLFxuICBcIlNpbW9uZVwiLFxuICBcIlNpbmNlcmVcIixcbiAgXCJTaXN0ZXJcIixcbiAgXCJTa3llXCIsXG4gIFwiU2t5bGFcIixcbiAgXCJTa3lsYXJcIixcbiAgXCJTb2ZpYVwiLFxuICBcIlNvbGVkYWRcIixcbiAgXCJTb2xvblwiLFxuICBcIlNvbmlhXCIsXG4gIFwiU29ubnlcIixcbiAgXCJTb255YVwiLFxuICBcIlNvcGhpYVwiLFxuICBcIlNvcGhpZVwiLFxuICBcIlNwZW5jZXJcIixcbiAgXCJTdGFjZXlcIixcbiAgXCJTdGFjeVwiLFxuICBcIlN0YW5cIixcbiAgXCJTdGFuZm9yZFwiLFxuICBcIlN0YW5sZXlcIixcbiAgXCJTdGFudG9uXCIsXG4gIFwiU3RlZmFuXCIsXG4gIFwiU3RlZmFuaWVcIixcbiAgXCJTdGVsbGFcIixcbiAgXCJTdGVwaGFuXCIsXG4gIFwiU3RlcGhhbmlhXCIsXG4gIFwiU3RlcGhhbmllXCIsXG4gIFwiU3RlcGhhbnlcIixcbiAgXCJTdGVwaGVuXCIsXG4gIFwiU3RlcGhvblwiLFxuICBcIlN0ZXJsaW5nXCIsXG4gIFwiU3RldmVcIixcbiAgXCJTdGV2aWVcIixcbiAgXCJTdGV3YXJ0XCIsXG4gIFwiU3RvbmVcIixcbiAgXCJTdHVhcnRcIixcbiAgXCJTdW1tZXJcIixcbiAgXCJTdW5ueVwiLFxuICBcIlN1c2FuXCIsXG4gIFwiU3VzYW5hXCIsXG4gIFwiU3VzYW5uYVwiLFxuICBcIlN1c2llXCIsXG4gIFwiU3V6YW5uZVwiLFxuICBcIlN2ZW5cIixcbiAgXCJTeWJsZVwiLFxuICBcIlN5ZG5lZVwiLFxuICBcIlN5ZG5leVwiLFxuICBcIlN5ZG5pXCIsXG4gIFwiU3lkbmllXCIsXG4gIFwiU3lsdmFuXCIsXG4gIFwiU3lsdmVzdGVyXCIsXG4gIFwiU3lsdmlhXCIsXG4gIFwiVGFiaXRoYVwiLFxuICBcIlRhZFwiLFxuICBcIlRhbGlhXCIsXG4gIFwiVGFsb25cIixcbiAgXCJUYW1hcmFcIixcbiAgXCJUYW1pYVwiLFxuICBcIlRhbmlhXCIsXG4gIFwiVGFubmVyXCIsXG4gIFwiVGFueWFcIixcbiAgXCJUYXJhXCIsXG4gIFwiVGFyeW5cIixcbiAgXCJUYXRlXCIsXG4gIFwiVGF0dW1cIixcbiAgXCJUYXR5YW5hXCIsXG4gIFwiVGF1cmVhblwiLFxuICBcIlRhdmFyZXNcIixcbiAgXCJUYXlhXCIsXG4gIFwiVGF5bG9yXCIsXG4gIFwiVGVhZ2FuXCIsXG4gIFwiVGVkXCIsXG4gIFwiVGVsbHlcIixcbiAgXCJUZXJlbmNlXCIsXG4gIFwiVGVyZXNhXCIsXG4gIFwiVGVycmFuY2VcIixcbiAgXCJUZXJyZWxsXCIsXG4gIFwiVGVycmVuY2VcIixcbiAgXCJUZXJyaWxsXCIsXG4gIFwiVGVycnlcIixcbiAgXCJUZXNzXCIsXG4gIFwiVGVzc2llXCIsXG4gIFwiVGV2aW5cIixcbiAgXCJUaGFkXCIsXG4gIFwiVGhhZGRldXNcIixcbiAgXCJUaGFsaWFcIixcbiAgXCJUaGVhXCIsXG4gIFwiVGhlbG1hXCIsXG4gIFwiVGhlb1wiLFxuICBcIlRoZW9kb3JhXCIsXG4gIFwiVGhlb2RvcmVcIixcbiAgXCJUaGVyZXNhXCIsXG4gIFwiVGhlcmVzZVwiLFxuICBcIlRoZXJlc2lhXCIsXG4gIFwiVGhlcm9uXCIsXG4gIFwiVGhvbWFzXCIsXG4gIFwiVGhvcmFcIixcbiAgXCJUaHVybWFuXCIsXG4gIFwiVGlhXCIsXG4gIFwiVGlhbmFcIixcbiAgXCJUaWFubmFcIixcbiAgXCJUaWFyYVwiLFxuICBcIlRpZXJyYVwiLFxuICBcIlRpZmZhbnlcIixcbiAgXCJUaWxsbWFuXCIsXG4gIFwiVGltbW90aHlcIixcbiAgXCJUaW1teVwiLFxuICBcIlRpbW90aHlcIixcbiAgXCJUaW5hXCIsXG4gIFwiVGl0b1wiLFxuICBcIlRpdHVzXCIsXG4gIFwiVG9iaW5cIixcbiAgXCJUb2J5XCIsXG4gIFwiVG9kXCIsXG4gIFwiVG9tXCIsXG4gIFwiVG9tYXNcIixcbiAgXCJUb21hc2FcIixcbiAgXCJUb21taWVcIixcbiAgXCJUb25leVwiLFxuICBcIlRvbmlcIixcbiAgXCJUb255XCIsXG4gIFwiVG9yZXlcIixcbiAgXCJUb3JyYW5jZVwiLFxuICBcIlRvcnJleVwiLFxuICBcIlRveVwiLFxuICBcIlRyYWNlXCIsXG4gIFwiVHJhY2V5XCIsXG4gIFwiVHJhY3lcIixcbiAgXCJUcmF2aXNcIixcbiAgXCJUcmF2b25cIixcbiAgXCJUcmVcIixcbiAgXCJUcmVtYWluZVwiLFxuICBcIlRyZW1heW5lXCIsXG4gIFwiVHJlbnRcIixcbiAgXCJUcmVudG9uXCIsXG4gIFwiVHJlc3NhXCIsXG4gIFwiVHJlc3NpZVwiLFxuICBcIlRyZXZhXCIsXG4gIFwiVHJldmVyXCIsXG4gIFwiVHJldmlvblwiLFxuICBcIlRyZXZvclwiLFxuICBcIlRyZXlcIixcbiAgXCJUcmluaXR5XCIsXG4gIFwiVHJpc2hhXCIsXG4gIFwiVHJpc3RpYW5cIixcbiAgXCJUcmlzdGluXCIsXG4gIFwiVHJpc3RvblwiLFxuICBcIlRyb3lcIixcbiAgXCJUcnVkaWVcIixcbiAgXCJUcnljaWFcIixcbiAgXCJUcnlzdGFuXCIsXG4gIFwiVHVybmVyXCIsXG4gIFwiVHdpbGFcIixcbiAgXCJUeWxlclwiLFxuICBcIlR5cmFcIixcbiAgXCJUeXJlZVwiLFxuICBcIlR5cmVla1wiLFxuICBcIlR5cmVsXCIsXG4gIFwiVHlyZWxsXCIsXG4gIFwiVHlyZXNlXCIsXG4gIFwiVHlyaXF1ZVwiLFxuICBcIlR5c2hhd25cIixcbiAgXCJUeXNvblwiLFxuICBcIlViYWxkb1wiLFxuICBcIlVsaWNlc1wiLFxuICBcIlVsaXNlc1wiLFxuICBcIlVuYVwiLFxuICBcIlVuaXF1ZVwiLFxuICBcIlVyYmFuXCIsXG4gIFwiVXJpYWhcIixcbiAgXCJVcmllbFwiLFxuICBcIlVyc3VsYVwiLFxuICBcIlZhZGFcIixcbiAgXCJWYWxlbnRpblwiLFxuICBcIlZhbGVudGluYVwiLFxuICBcIlZhbGVudGluZVwiLFxuICBcIlZhbGVyaWVcIixcbiAgXCJWYWxsaWVcIixcbiAgXCJWYW5cIixcbiAgXCJWYW5jZVwiLFxuICBcIlZhbmVzc2FcIixcbiAgXCJWYXVnaG5cIixcbiAgXCJWZWRhXCIsXG4gIFwiVmVsZGFcIixcbiAgXCJWZWxsYVwiLFxuICBcIlZlbG1hXCIsXG4gIFwiVmVsdmFcIixcbiAgXCJWZW5hXCIsXG4gIFwiVmVyZGFcIixcbiAgXCJWZXJkaWVcIixcbiAgXCJWZXJnaWVcIixcbiAgXCJWZXJsYVwiLFxuICBcIlZlcmxpZVwiLFxuICBcIlZlcm5cIixcbiAgXCJWZXJuYVwiLFxuICBcIlZlcm5lclwiLFxuICBcIlZlcm5pY2VcIixcbiAgXCJWZXJuaWVcIixcbiAgXCJWZXJub25cIixcbiAgXCJWZXJvbmFcIixcbiAgXCJWZXJvbmljYVwiLFxuICBcIlZlc3RhXCIsXG4gIFwiVmljZW50YVwiLFxuICBcIlZpY2VudGVcIixcbiAgXCJWaWNraWVcIixcbiAgXCJWaWNreVwiLFxuICBcIlZpY3RvclwiLFxuICBcIlZpY3RvcmlhXCIsXG4gIFwiVmlkYVwiLFxuICBcIlZpZGFsXCIsXG4gIFwiVmlsbWFcIixcbiAgXCJWaW5jZVwiLFxuICBcIlZpbmNlbnRcIixcbiAgXCJWaW5jZW56YVwiLFxuICBcIlZpbmNlbnpvXCIsXG4gIFwiVmlubmllXCIsXG4gIFwiVmlvbGFcIixcbiAgXCJWaW9sZXRcIixcbiAgXCJWaW9sZXR0ZVwiLFxuICBcIlZpcmdpZVwiLFxuICBcIlZpcmdpbFwiLFxuICBcIlZpcmdpbmlhXCIsXG4gIFwiVmlyZ2luaWVcIixcbiAgXCJWaXRhXCIsXG4gIFwiVml0b1wiLFxuICBcIlZpdmFcIixcbiAgXCJWaXZpYW5cIixcbiAgXCJWaXZpYW5lXCIsXG4gIFwiVml2aWFubmVcIixcbiAgXCJWaXZpZW5cIixcbiAgXCJWaXZpZW5uZVwiLFxuICBcIlZsYWRpbWlyXCIsXG4gIFwiV2FkZVwiLFxuICBcIldhaW5vXCIsXG4gIFwiV2FsZG9cIixcbiAgXCJXYWxrZXJcIixcbiAgXCJXYWxsYWNlXCIsXG4gIFwiV2FsdGVyXCIsXG4gIFwiV2FsdG9uXCIsXG4gIFwiV2FuZGFcIixcbiAgXCJXYXJkXCIsXG4gIFwiV2FycmVuXCIsXG4gIFwiV2F0c29uXCIsXG4gIFwiV2F2YVwiLFxuICBcIldheWxvblwiLFxuICBcIldheW5lXCIsXG4gIFwiV2Vic3RlclwiLFxuICBcIldlbGRvblwiLFxuICBcIldlbGxpbmd0b25cIixcbiAgXCJXZW5kZWxsXCIsXG4gIFwiV2VuZHlcIixcbiAgXCJXZXJuZXJcIixcbiAgXCJXZXN0bGV5XCIsXG4gIFwiV2VzdG9uXCIsXG4gIFwiV2hpdG5leVwiLFxuICBcIldpbGJlclwiLFxuICBcIldpbGJlcnRcIixcbiAgXCJXaWxidXJuXCIsXG4gIFwiV2lsZXlcIixcbiAgXCJXaWxmb3JkXCIsXG4gIFwiV2lsZnJlZFwiLFxuICBcIldpbGZyZWRvXCIsXG4gIFwiV2lsZnJpZFwiLFxuICBcIldpbGhlbG1cIixcbiAgXCJXaWxoZWxtaW5lXCIsXG4gIFwiV2lsbFwiLFxuICBcIldpbGxhXCIsXG4gIFwiV2lsbGFyZFwiLFxuICBcIldpbGxpYW1cIixcbiAgXCJXaWxsaWVcIixcbiAgXCJXaWxsaXNcIixcbiAgXCJXaWxsb3dcIixcbiAgXCJXaWxseVwiLFxuICBcIldpbG1hXCIsXG4gIFwiV2lsbWVyXCIsXG4gIFwiV2lsc29uXCIsXG4gIFwiV2lsdG9uXCIsXG4gIFwiV2luZmllbGRcIixcbiAgXCJXaW5pZnJlZFwiLFxuICBcIldpbm5pZnJlZFwiLFxuICBcIldpbm9uYVwiLFxuICBcIldpbnN0b25cIixcbiAgXCJXb29kcm93XCIsXG4gIFwiV3lhdHRcIixcbiAgXCJXeW1hblwiLFxuICBcIlhhbmRlclwiLFxuICBcIlhhdmllclwiLFxuICBcIlh6YXZpZXJcIixcbiAgXCJZYWRpcmFcIixcbiAgXCJZYXNtZWVuXCIsXG4gIFwiWWFzbWluXCIsXG4gIFwiWWFzbWluZVwiLFxuICBcIllhem1pblwiLFxuICBcIlllc2VuaWFcIixcbiAgXCJZZXNzZW5pYVwiLFxuICBcIllvbGFuZGFcIixcbiAgXCJZb3NoaWtvXCIsXG4gIFwiWXZldHRlXCIsXG4gIFwiWXZvbm5lXCIsXG4gIFwiWmFjaGFyaWFoXCIsXG4gIFwiWmFjaGFyeVwiLFxuICBcIlphY2hlcnlcIixcbiAgXCJaYWNrXCIsXG4gIFwiWmFja2FyeVwiLFxuICBcIlphY2tlcnlcIixcbiAgXCJaYWthcnlcIixcbiAgXCJaYW5kZXJcIixcbiAgXCJaYW5lXCIsXG4gIFwiWmFyaWFcIixcbiAgXCJaZWNoYXJpYWhcIixcbiAgXCJaZWxkYVwiLFxuICBcIlplbGxhXCIsXG4gIFwiWmVsbWFcIixcbiAgXCJaZW5hXCIsXG4gIFwiWmV0dGFcIixcbiAgXCJaaW9uXCIsXG4gIFwiWml0YVwiLFxuICBcIlpvZVwiLFxuICBcIlpvZXlcIixcbiAgXCJab2llXCIsXG4gIFwiWm9pbGFcIixcbiAgXCJab2xhXCIsXG4gIFwiWm9yYVwiLFxuICBcIlp1bGFcIlxuXTtcbiIsInZhciBuYW1lID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IG5hbWU7XG5uYW1lLmZpcnN0X25hbWUgPSByZXF1aXJlKFwiLi9maXJzdF9uYW1lXCIpO1xubmFtZS5sYXN0X25hbWUgPSByZXF1aXJlKFwiLi9sYXN0X25hbWVcIik7XG5uYW1lLnByZWZpeCA9IHJlcXVpcmUoXCIuL3ByZWZpeFwiKTtcbm5hbWUuc3VmZml4ID0gcmVxdWlyZShcIi4vc3VmZml4XCIpO1xubmFtZS50aXRsZSA9IHJlcXVpcmUoXCIuL3RpdGxlXCIpO1xubmFtZS5uYW1lID0gcmVxdWlyZShcIi4vbmFtZVwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQWJib3R0XCIsXG4gIFwiQWJlcm5hdGh5XCIsXG4gIFwiQWJzaGlyZVwiLFxuICBcIkFkYW1zXCIsXG4gIFwiQWx0ZW53ZXJ0aFwiLFxuICBcIkFuZGVyc29uXCIsXG4gIFwiQW5rdW5kaW5nXCIsXG4gIFwiQXJtc3Ryb25nXCIsXG4gIFwiQXVlclwiLFxuICBcIkF1ZmRlcmhhclwiLFxuICBcIkJhaHJpbmdlclwiLFxuICBcIkJhaWxleVwiLFxuICBcIkJhbGlzdHJlcmlcIixcbiAgXCJCYXJyb3dzXCIsXG4gIFwiQmFydGVsbFwiLFxuICBcIkJhcnRvbGV0dGlcIixcbiAgXCJCYXJ0b25cIixcbiAgXCJCYXNoaXJpYW5cIixcbiAgXCJCYXR6XCIsXG4gIFwiQmF1Y2hcIixcbiAgXCJCYXVtYmFjaFwiLFxuICBcIkJheWVyXCIsXG4gIFwiQmVhaGFuXCIsXG4gIFwiQmVhdHR5XCIsXG4gIFwiQmVjaHRlbGFyXCIsXG4gIFwiQmVja2VyXCIsXG4gIFwiQmVkbmFyXCIsXG4gIFwiQmVlclwiLFxuICBcIkJlaWVyXCIsXG4gIFwiQmVyZ2VcIixcbiAgXCJCZXJnbmF1bVwiLFxuICBcIkJlcmdzdHJvbVwiLFxuICBcIkJlcm5oYXJkXCIsXG4gIFwiQmVybmllclwiLFxuICBcIkJpbnNcIixcbiAgXCJCbGFuZGFcIixcbiAgXCJCbGlja1wiLFxuICBcIkJsb2NrXCIsXG4gIFwiQm9kZVwiLFxuICBcIkJvZWhtXCIsXG4gIFwiQm9nYW5cIixcbiAgXCJCb2dpc2ljaFwiLFxuICBcIkJvcmVyXCIsXG4gIFwiQm9zY29cIixcbiAgXCJCb3RzZm9yZFwiLFxuICBcIkJveWVyXCIsXG4gIFwiQm95bGVcIixcbiAgXCJCcmFkdGtlXCIsXG4gIFwiQnJha3VzXCIsXG4gIFwiQnJhdW5cIixcbiAgXCJCcmVpdGVuYmVyZ1wiLFxuICBcIkJyZWtrZVwiLFxuICBcIkJyb3duXCIsXG4gIFwiQnJ1ZW5cIixcbiAgXCJCdWNrcmlkZ2VcIixcbiAgXCJDYXJyb2xsXCIsXG4gIFwiQ2FydGVyXCIsXG4gIFwiQ2FydHdyaWdodFwiLFxuICBcIkNhc3BlclwiLFxuICBcIkNhc3NpblwiLFxuICBcIkNoYW1wbGluXCIsXG4gIFwiQ2hyaXN0aWFuc2VuXCIsXG4gIFwiQ29sZVwiLFxuICBcIkNvbGxpZXJcIixcbiAgXCJDb2xsaW5zXCIsXG4gIFwiQ29ublwiLFxuICBcIkNvbm5lbGx5XCIsXG4gIFwiQ29ucm95XCIsXG4gIFwiQ29uc2lkaW5lXCIsXG4gIFwiQ29ya2VyeVwiLFxuICBcIkNvcm1pZXJcIixcbiAgXCJDb3J3aW5cIixcbiAgXCJDcmVtaW5cIixcbiAgXCJDcmlzdFwiLFxuICBcIkNyb25hXCIsXG4gIFwiQ3JvbmluXCIsXG4gIFwiQ3Jvb2tzXCIsXG4gIFwiQ3J1aWNrc2hhbmtcIixcbiAgXCJDdW1tZXJhdGFcIixcbiAgXCJDdW1taW5nc1wiLFxuICBcIkRhY2hcIixcbiAgXCJEJ0Ftb3JlXCIsXG4gIFwiRGFuaWVsXCIsXG4gIFwiRGFyZVwiLFxuICBcIkRhdWdoZXJ0eVwiLFxuICBcIkRhdmlzXCIsXG4gIFwiRGVja293XCIsXG4gIFwiRGVuZXNpa1wiLFxuICBcIkRpYmJlcnRcIixcbiAgXCJEaWNrZW5zXCIsXG4gIFwiRGlja2lcIixcbiAgXCJEaWNraW5zb25cIixcbiAgXCJEaWV0cmljaFwiLFxuICBcIkRvbm5lbGx5XCIsXG4gIFwiRG9vbGV5XCIsXG4gIFwiRG91Z2xhc1wiLFxuICBcIkRveWxlXCIsXG4gIFwiRHVCdXF1ZVwiLFxuICBcIkR1cmdhblwiLFxuICBcIkViZXJ0XCIsXG4gIFwiRWZmZXJ0elwiLFxuICBcIkVpY2htYW5uXCIsXG4gIFwiRW1hcmRcIixcbiAgXCJFbW1lcmljaFwiLFxuICBcIkVyZG1hblwiLFxuICBcIkVybnNlclwiLFxuICBcIkZhZGVsXCIsXG4gIFwiRmFoZXlcIixcbiAgXCJGYXJyZWxsXCIsXG4gIFwiRmF5XCIsXG4gIFwiRmVlbmV5XCIsXG4gIFwiRmVlc3RcIixcbiAgXCJGZWlsXCIsXG4gIFwiRmVycnlcIixcbiAgXCJGaXNoZXJcIixcbiAgXCJGbGF0bGV5XCIsXG4gIFwiRnJhbWlcIixcbiAgXCJGcmFuZWNraVwiLFxuICBcIkZyaWVzZW5cIixcbiAgXCJGcml0c2NoXCIsXG4gIFwiRnVua1wiLFxuICBcIkdheWxvcmRcIixcbiAgXCJHZXJob2xkXCIsXG4gIFwiR2VybGFjaFwiLFxuICBcIkdpYnNvblwiLFxuICBcIkdpc2xhc29uXCIsXG4gIFwiR2xlYXNvblwiLFxuICBcIkdsZWljaG5lclwiLFxuICBcIkdsb3ZlclwiLFxuICBcIkdvbGRuZXJcIixcbiAgXCJHb29kd2luXCIsXG4gIFwiR29yY3phbnlcIixcbiAgXCJHb3R0bGllYlwiLFxuICBcIkdveWV0dGVcIixcbiAgXCJHcmFkeVwiLFxuICBcIkdyYWhhbVwiLFxuICBcIkdyYW50XCIsXG4gIFwiR3JlZW5cIixcbiAgXCJHcmVlbmZlbGRlclwiLFxuICBcIkdyZWVuaG9sdFwiLFxuICBcIkdyaW1lc1wiLFxuICBcIkd1bGdvd3NraVwiLFxuICBcIkd1c2lrb3dza2lcIixcbiAgXCJHdXRrb3dza2lcIixcbiAgXCJHdXRtYW5uXCIsXG4gIFwiSGFhZ1wiLFxuICBcIkhhY2tldHRcIixcbiAgXCJIYWdlbmVzXCIsXG4gIFwiSGFoblwiLFxuICBcIkhhbGV5XCIsXG4gIFwiSGFsdm9yc29uXCIsXG4gIFwiSGFtaWxsXCIsXG4gIFwiSGFtbWVzXCIsXG4gIFwiSGFuZFwiLFxuICBcIkhhbmVcIixcbiAgXCJIYW5zZW5cIixcbiAgXCJIYXJiZXJcIixcbiAgXCJIYXJyaXNcIixcbiAgXCJIYXJ0bWFublwiLFxuICBcIkhhcnZleVwiLFxuICBcIkhhdWNrXCIsXG4gIFwiSGF5ZXNcIixcbiAgXCJIZWFuZXlcIixcbiAgXCJIZWF0aGNvdGVcIixcbiAgXCJIZWdtYW5uXCIsXG4gIFwiSGVpZGVucmVpY2hcIixcbiAgXCJIZWxsZXJcIixcbiAgXCJIZXJtYW5cIixcbiAgXCJIZXJtYW5uXCIsXG4gIFwiSGVybWlzdG9uXCIsXG4gIFwiSGVyem9nXCIsXG4gIFwiSGVzc2VsXCIsXG4gIFwiSGV0dGluZ2VyXCIsXG4gIFwiSGlja2xlXCIsXG4gIFwiSGlsbGxcIixcbiAgXCJIaWxsc1wiLFxuICBcIkhpbHBlcnRcIixcbiAgXCJIaW50elwiLFxuICBcIkhpcnRoZVwiLFxuICBcIkhvZGtpZXdpY3pcIixcbiAgXCJIb2VnZXJcIixcbiAgXCJIb21lbmlja1wiLFxuICBcIkhvcHBlXCIsXG4gIFwiSG93ZVwiLFxuICBcIkhvd2VsbFwiLFxuICBcIkh1ZHNvblwiLFxuICBcIkh1ZWxcIixcbiAgXCJIdWVsc1wiLFxuICBcIkh5YXR0XCIsXG4gIFwiSmFjb2JpXCIsXG4gIFwiSmFjb2JzXCIsXG4gIFwiSmFjb2Jzb25cIixcbiAgXCJKYWt1Ym93c2tpXCIsXG4gIFwiSmFza29sc2tpXCIsXG4gIFwiSmFzdFwiLFxuICBcIkplbmtpbnNcIixcbiAgXCJKZXJkZVwiLFxuICBcIkpvaG5zXCIsXG4gIFwiSm9obnNvblwiLFxuICBcIkpvaG5zdG9uXCIsXG4gIFwiSm9uZXNcIixcbiAgXCJLYXNzdWxrZVwiLFxuICBcIkthdXR6ZXJcIixcbiAgXCJLZWVibGVyXCIsXG4gIFwiS2VlbGluZ1wiLFxuICBcIktlbW1lclwiLFxuICBcIktlcmx1a2VcIixcbiAgXCJLZXJ0em1hbm5cIixcbiAgXCJLZXNzbGVyXCIsXG4gIFwiS2llaG5cIixcbiAgXCJLaWhuXCIsXG4gIFwiS2lsYmFja1wiLFxuICBcIktpbmdcIixcbiAgXCJLaXJsaW5cIixcbiAgXCJLbGVpblwiLFxuICBcIktsaW5nXCIsXG4gIFwiS2xvY2tvXCIsXG4gIFwiS29jaFwiLFxuICBcIktvZWxwaW5cIixcbiAgXCJLb2VwcFwiLFxuICBcIktvaGxlclwiLFxuICBcIktvbm9wZWxza2lcIixcbiAgXCJLb3NzXCIsXG4gIFwiS292YWNla1wiLFxuICBcIktvemV5XCIsXG4gIFwiS3JhamNpa1wiLFxuICBcIktyZWlnZXJcIixcbiAgXCJLcmlzXCIsXG4gIFwiS3NobGVyaW5cIixcbiAgXCJLdWJcIixcbiAgXCJLdWhpY1wiLFxuICBcIkt1aGxtYW5cIixcbiAgXCJLdWhuXCIsXG4gIFwiS3VsYXNcIixcbiAgXCJLdW5kZVwiLFxuICBcIkt1bnplXCIsXG4gIFwiS3VwaGFsXCIsXG4gIFwiS3V0Y2hcIixcbiAgXCJLdXZhbGlzXCIsXG4gIFwiTGFiYWRpZVwiLFxuICBcIkxha2luXCIsXG4gIFwiTGFuZ1wiLFxuICBcIkxhbmdvc2hcIixcbiAgXCJMYW5nd29ydGhcIixcbiAgXCJMYXJraW5cIixcbiAgXCJMYXJzb25cIixcbiAgXCJMZWFubm9uXCIsXG4gIFwiTGVic2Fja1wiLFxuICBcIkxlZG5lclwiLFxuICBcIkxlZmZsZXJcIixcbiAgXCJMZWdyb3NcIixcbiAgXCJMZWhuZXJcIixcbiAgXCJMZW1rZVwiLFxuICBcIkxlc2NoXCIsXG4gIFwiTGV1c2Noa2VcIixcbiAgXCJMaW5kXCIsXG4gIFwiTGluZGdyZW5cIixcbiAgXCJMaXR0ZWxcIixcbiAgXCJMaXR0bGVcIixcbiAgXCJMb2NrbWFuXCIsXG4gIFwiTG93ZVwiLFxuICBcIkx1Ym93aXR6XCIsXG4gIFwiTHVlaWx3aXR6XCIsXG4gIFwiTHVldHRnZW5cIixcbiAgXCJMeW5jaFwiLFxuICBcIk1hY2Vqa292aWNcIixcbiAgXCJNYWNHeXZlclwiLFxuICBcIk1hZ2dpb1wiLFxuICBcIk1hbm5cIixcbiAgXCJNYW50ZVwiLFxuICBcIk1hcmtzXCIsXG4gIFwiTWFycXVhcmR0XCIsXG4gIFwiTWFydmluXCIsXG4gIFwiTWF5ZXJcIixcbiAgXCJNYXllcnRcIixcbiAgXCJNY0NsdXJlXCIsXG4gIFwiTWNDdWxsb3VnaFwiLFxuICBcIk1jRGVybW90dFwiLFxuICBcIk1jR2x5bm5cIixcbiAgXCJNY0tlbnppZVwiLFxuICBcIk1jTGF1Z2hsaW5cIixcbiAgXCJNZWRodXJzdFwiLFxuICBcIk1lcnR6XCIsXG4gIFwiTWV0elwiLFxuICBcIk1pbGxlclwiLFxuICBcIk1pbGxzXCIsXG4gIFwiTWl0Y2hlbGxcIixcbiAgXCJNb2VuXCIsXG4gIFwiTW9oclwiLFxuICBcIk1vbmFoYW5cIixcbiAgXCJNb29yZVwiLFxuICBcIk1vcmFyXCIsXG4gIFwiTW9yaXNzZXR0ZVwiLFxuICBcIk1vc2Npc2tpXCIsXG4gIFwiTXJhelwiLFxuICBcIk11ZWxsZXJcIixcbiAgXCJNdWxsZXJcIixcbiAgXCJNdXJhemlrXCIsXG4gIFwiTXVycGh5XCIsXG4gIFwiTXVycmF5XCIsXG4gIFwiTmFkZXJcIixcbiAgXCJOaWNvbGFzXCIsXG4gIFwiTmllbm93XCIsXG4gIFwiTmlrb2xhdXNcIixcbiAgXCJOaXR6c2NoZVwiLFxuICBcIk5vbGFuXCIsXG4gIFwiT2JlcmJydW5uZXJcIixcbiAgXCJPJ0Nvbm5lbGxcIixcbiAgXCJPJ0Nvbm5lclwiLFxuICBcIk8nSGFyYVwiLFxuICBcIk8nS2VlZmVcIixcbiAgXCJPJ0tvblwiLFxuICBcIk9rdW5ldmFcIixcbiAgXCJPbHNvblwiLFxuICBcIk9uZHJpY2thXCIsXG4gIFwiTydSZWlsbHlcIixcbiAgXCJPcm5cIixcbiAgXCJPcnRpelwiLFxuICBcIk9zaW5za2lcIixcbiAgXCJQYWNvY2hhXCIsXG4gIFwiUGFkYmVyZ1wiLFxuICBcIlBhZ2FjXCIsXG4gIFwiUGFyaXNpYW5cIixcbiAgXCJQYXJrZXJcIixcbiAgXCJQYXVjZWtcIixcbiAgXCJQZmFubmVyc3RpbGxcIixcbiAgXCJQZmVmZmVyXCIsXG4gIFwiUG9sbGljaFwiLFxuICBcIlBvdXJvc1wiLFxuICBcIlBvd2xvd3NraVwiLFxuICBcIlByZWRvdmljXCIsXG4gIFwiUHJpY2VcIixcbiAgXCJQcm9oYXNrYVwiLFxuICBcIlByb3NhY2NvXCIsXG4gIFwiUHVyZHlcIixcbiAgXCJRdWlnbGV5XCIsXG4gIFwiUXVpdHpvblwiLFxuICBcIlJhdGhcIixcbiAgXCJSYXRrZVwiLFxuICBcIlJhdVwiLFxuICBcIlJheW5vclwiLFxuICBcIlJlaWNoZWxcIixcbiAgXCJSZWljaGVydFwiLFxuICBcIlJlaWxseVwiLFxuICBcIlJlaW5nZXJcIixcbiAgXCJSZW1wZWxcIixcbiAgXCJSZW5uZXJcIixcbiAgXCJSZXlub2xkc1wiLFxuICBcIlJpY2VcIixcbiAgXCJSaXBwaW5cIixcbiAgXCJSaXRjaGllXCIsXG4gIFwiUm9iZWxcIixcbiAgXCJSb2JlcnRzXCIsXG4gIFwiUm9kcmlndWV6XCIsXG4gIFwiUm9nYWhuXCIsXG4gIFwiUm9oYW5cIixcbiAgXCJSb2xmc29uXCIsXG4gIFwiUm9tYWd1ZXJhXCIsXG4gIFwiUm9vYlwiLFxuICBcIlJvc2VuYmF1bVwiLFxuICBcIlJvd2VcIixcbiAgXCJSdWVja2VyXCIsXG4gIFwiUnVub2xmc2RvdHRpclwiLFxuICBcIlJ1bm9sZnNzb25cIixcbiAgXCJSdW50ZVwiLFxuICBcIlJ1c3NlbFwiLFxuICBcIlJ1dGhlcmZvcmRcIixcbiAgXCJSeWFuXCIsXG4gIFwiU2FuZm9yZFwiLFxuICBcIlNhdHRlcmZpZWxkXCIsXG4gIFwiU2F1ZXJcIixcbiAgXCJTYXdheW5cIixcbiAgXCJTY2hhZGVuXCIsXG4gIFwiU2NoYWVmZXJcIixcbiAgXCJTY2hhbWJlcmdlclwiLFxuICBcIlNjaGlsbGVyXCIsXG4gIFwiU2NoaW1tZWxcIixcbiAgXCJTY2hpbm5lclwiLFxuICBcIlNjaG1lbGVyXCIsXG4gIFwiU2NobWlkdFwiLFxuICBcIlNjaG1pdHRcIixcbiAgXCJTY2huZWlkZXJcIixcbiAgXCJTY2hvZW5cIixcbiAgXCJTY2hvd2FsdGVyXCIsXG4gIFwiU2Nocm9lZGVyXCIsXG4gIFwiU2NodWxpc3RcIixcbiAgXCJTY2h1bHR6XCIsXG4gIFwiU2NodW1tXCIsXG4gIFwiU2NodXBwZVwiLFxuICBcIlNjaHVzdGVyXCIsXG4gIFwiU2VuZ2VyXCIsXG4gIFwiU2hhbmFoYW5cIixcbiAgXCJTaGllbGRzXCIsXG4gIFwiU2ltb25pc1wiLFxuICBcIlNpcGVzXCIsXG4gIFwiU2tpbGVzXCIsXG4gIFwiU21pdGhcIixcbiAgXCJTbWl0aGFtXCIsXG4gIFwiU3BlbmNlclwiLFxuICBcIlNwaW5rYVwiLFxuICBcIlNwb3JlclwiLFxuICBcIlN0YW1tXCIsXG4gIFwiU3RhbnRvblwiLFxuICBcIlN0YXJrXCIsXG4gIFwiU3RlaHJcIixcbiAgXCJTdGV1YmVyXCIsXG4gIFwiU3RpZWRlbWFublwiLFxuICBcIlN0b2tlc1wiLFxuICBcIlN0b2x0ZW5iZXJnXCIsXG4gIFwiU3RyYWNrZVwiLFxuICBcIlN0cmVpY2hcIixcbiAgXCJTdHJvbWFuXCIsXG4gIFwiU3Ryb3NpblwiLFxuICBcIlN3YW5pYXdza2lcIixcbiAgXCJTd2lmdFwiLFxuICBcIlRlcnJ5XCIsXG4gIFwiVGhpZWxcIixcbiAgXCJUaG9tcHNvblwiLFxuICBcIlRpbGxtYW5cIixcbiAgXCJUb3JwXCIsXG4gIFwiVG9ycGh5XCIsXG4gIFwiVG93bmVcIixcbiAgXCJUb3lcIixcbiAgXCJUcmFudG93XCIsXG4gIFwiVHJlbWJsYXlcIixcbiAgXCJUcmV1dGVsXCIsXG4gIFwiVHJvbXBcIixcbiAgXCJUdXJjb3R0ZVwiLFxuICBcIlR1cm5lclwiLFxuICBcIlVsbHJpY2hcIixcbiAgXCJVcHRvblwiLFxuICBcIlZhbmRlcnZvcnRcIixcbiAgXCJWZXVtXCIsXG4gIFwiVm9sa21hblwiLFxuICBcIlZvblwiLFxuICBcIlZvblJ1ZWRlblwiLFxuICBcIldhZWxjaGlcIixcbiAgXCJXYWxrZXJcIixcbiAgXCJXYWxzaFwiLFxuICBcIldhbHRlclwiLFxuICBcIldhcmRcIixcbiAgXCJXYXRlcnNcIixcbiAgXCJXYXRzaWNhXCIsXG4gIFwiV2ViZXJcIixcbiAgXCJXZWhuZXJcIixcbiAgXCJXZWltYW5uXCIsXG4gIFwiV2Vpc3NuYXRcIixcbiAgXCJXZWxjaFwiLFxuICBcIldlc3RcIixcbiAgXCJXaGl0ZVwiLFxuICBcIldpZWdhbmRcIixcbiAgXCJXaWxkZXJtYW5cIixcbiAgXCJXaWxraW5zb25cIixcbiAgXCJXaWxsXCIsXG4gIFwiV2lsbGlhbXNvblwiLFxuICBcIldpbGxtc1wiLFxuICBcIldpbmRsZXJcIixcbiAgXCJXaW50aGVpc2VyXCIsXG4gIFwiV2lzb2t5XCIsXG4gIFwiV2lzb3prXCIsXG4gIFwiV2l0dGluZ1wiLFxuICBcIldpemFcIixcbiAgXCJXb2xmXCIsXG4gIFwiV29sZmZcIixcbiAgXCJXdWNrZXJ0XCIsXG4gIFwiV3Vuc2NoXCIsXG4gIFwiV3ltYW5cIixcbiAgXCJZb3N0XCIsXG4gIFwiWXVuZHRcIixcbiAgXCJaYm9uY2FrXCIsXG4gIFwiWmVtbGFrXCIsXG4gIFwiWmllbWFublwiLFxuICBcIlppZW1lXCIsXG4gIFwiWnVsYXVmXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiN7cHJlZml4fSAje2ZpcnN0X25hbWV9ICN7bGFzdF9uYW1lfVwiLFxuICBcIiN7Zmlyc3RfbmFtZX0gI3tsYXN0X25hbWV9ICN7c3VmZml4fVwiLFxuICBcIiN7Zmlyc3RfbmFtZX0gI3tsYXN0X25hbWV9XCIsXG4gIFwiI3tmaXJzdF9uYW1lfSAje2xhc3RfbmFtZX1cIixcbiAgXCIje2ZpcnN0X25hbWV9ICN7bGFzdF9uYW1lfVwiLFxuICBcIiN7Zmlyc3RfbmFtZX0gI3tsYXN0X25hbWV9XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIk1yLlwiLFxuICBcIk1ycy5cIixcbiAgXCJNcy5cIixcbiAgXCJNaXNzXCIsXG4gIFwiRHIuXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkpyLlwiLFxuICBcIlNyLlwiLFxuICBcIklcIixcbiAgXCJJSVwiLFxuICBcIklJSVwiLFxuICBcIklWXCIsXG4gIFwiVlwiLFxuICBcIk1EXCIsXG4gIFwiRERTXCIsXG4gIFwiUGhEXCIsXG4gIFwiRFZNXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0ge1xuICBcImRlc2NyaXB0b3JcIjogW1xuICAgIFwiTGVhZFwiLFxuICAgIFwiU2VuaW9yXCIsXG4gICAgXCJEaXJlY3RcIixcbiAgICBcIkNvcnBvcmF0ZVwiLFxuICAgIFwiRHluYW1pY1wiLFxuICAgIFwiRnV0dXJlXCIsXG4gICAgXCJQcm9kdWN0XCIsXG4gICAgXCJOYXRpb25hbFwiLFxuICAgIFwiUmVnaW9uYWxcIixcbiAgICBcIkRpc3RyaWN0XCIsXG4gICAgXCJDZW50cmFsXCIsXG4gICAgXCJHbG9iYWxcIixcbiAgICBcIkN1c3RvbWVyXCIsXG4gICAgXCJJbnZlc3RvclwiLFxuICAgIFwiRHluYW1pY1wiLFxuICAgIFwiSW50ZXJuYXRpb25hbFwiLFxuICAgIFwiTGVnYWN5XCIsXG4gICAgXCJGb3J3YXJkXCIsXG4gICAgXCJJbnRlcm5hbFwiLFxuICAgIFwiSHVtYW5cIixcbiAgICBcIkNoaWVmXCIsXG4gICAgXCJQcmluY2lwYWxcIlxuICBdLFxuICBcImxldmVsXCI6IFtcbiAgICBcIlNvbHV0aW9uc1wiLFxuICAgIFwiUHJvZ3JhbVwiLFxuICAgIFwiQnJhbmRcIixcbiAgICBcIlNlY3VyaXR5XCIsXG4gICAgXCJSZXNlYXJjaFwiLFxuICAgIFwiTWFya2V0aW5nXCIsXG4gICAgXCJEaXJlY3RpdmVzXCIsXG4gICAgXCJJbXBsZW1lbnRhdGlvblwiLFxuICAgIFwiSW50ZWdyYXRpb25cIixcbiAgICBcIkZ1bmN0aW9uYWxpdHlcIixcbiAgICBcIlJlc3BvbnNlXCIsXG4gICAgXCJQYXJhZGlnbVwiLFxuICAgIFwiVGFjdGljc1wiLFxuICAgIFwiSWRlbnRpdHlcIixcbiAgICBcIk1hcmtldHNcIixcbiAgICBcIkdyb3VwXCIsXG4gICAgXCJEaXZpc2lvblwiLFxuICAgIFwiQXBwbGljYXRpb25zXCIsXG4gICAgXCJPcHRpbWl6YXRpb25cIixcbiAgICBcIk9wZXJhdGlvbnNcIixcbiAgICBcIkluZnJhc3RydWN0dXJlXCIsXG4gICAgXCJJbnRyYW5ldFwiLFxuICAgIFwiQ29tbXVuaWNhdGlvbnNcIixcbiAgICBcIldlYlwiLFxuICAgIFwiQnJhbmRpbmdcIixcbiAgICBcIlF1YWxpdHlcIixcbiAgICBcIkFzc3VyYW5jZVwiLFxuICAgIFwiTW9iaWxpdHlcIixcbiAgICBcIkFjY291bnRzXCIsXG4gICAgXCJEYXRhXCIsXG4gICAgXCJDcmVhdGl2ZVwiLFxuICAgIFwiQ29uZmlndXJhdGlvblwiLFxuICAgIFwiQWNjb3VudGFiaWxpdHlcIixcbiAgICBcIkludGVyYWN0aW9uc1wiLFxuICAgIFwiRmFjdG9yc1wiLFxuICAgIFwiVXNhYmlsaXR5XCIsXG4gICAgXCJNZXRyaWNzXCJcbiAgXSxcbiAgXCJqb2JcIjogW1xuICAgIFwiU3VwZXJ2aXNvclwiLFxuICAgIFwiQXNzb2NpYXRlXCIsXG4gICAgXCJFeGVjdXRpdmVcIixcbiAgICBcIkxpYXNvblwiLFxuICAgIFwiT2ZmaWNlclwiLFxuICAgIFwiTWFuYWdlclwiLFxuICAgIFwiRW5naW5lZXJcIixcbiAgICBcIlNwZWNpYWxpc3RcIixcbiAgICBcIkRpcmVjdG9yXCIsXG4gICAgXCJDb29yZGluYXRvclwiLFxuICAgIFwiQWRtaW5pc3RyYXRvclwiLFxuICAgIFwiQXJjaGl0ZWN0XCIsXG4gICAgXCJBbmFseXN0XCIsXG4gICAgXCJEZXNpZ25lclwiLFxuICAgIFwiUGxhbm5lclwiLFxuICAgIFwiT3JjaGVzdHJhdG9yXCIsXG4gICAgXCJUZWNobmljaWFuXCIsXG4gICAgXCJEZXZlbG9wZXJcIixcbiAgICBcIlByb2R1Y2VyXCIsXG4gICAgXCJDb25zdWx0YW50XCIsXG4gICAgXCJBc3Npc3RhbnRcIixcbiAgICBcIkZhY2lsaXRhdG9yXCIsXG4gICAgXCJBZ2VudFwiLFxuICAgIFwiUmVwcmVzZW50YXRpdmVcIixcbiAgICBcIlN0cmF0ZWdpc3RcIlxuICBdXG59O1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIjIyMtIyMjLSMjIyNcIixcbiAgXCIoIyMjKSAjIyMtIyMjI1wiLFxuICBcIjEtIyMjLSMjIy0jIyMjXCIsXG4gIFwiIyMjLiMjIy4jIyMjXCIsXG4gIFwiIyMjLSMjIy0jIyMjXCIsXG4gIFwiKCMjIykgIyMjLSMjIyNcIixcbiAgXCIxLSMjIy0jIyMtIyMjI1wiLFxuICBcIiMjIy4jIyMuIyMjI1wiLFxuICBcIiMjIy0jIyMtIyMjIyB4IyMjXCIsXG4gIFwiKCMjIykgIyMjLSMjIyMgeCMjI1wiLFxuICBcIjEtIyMjLSMjIy0jIyMjIHgjIyNcIixcbiAgXCIjIyMuIyMjLiMjIyMgeCMjI1wiLFxuICBcIiMjIy0jIyMtIyMjIyB4IyMjI1wiLFxuICBcIigjIyMpICMjIy0jIyMjIHgjIyMjXCIsXG4gIFwiMS0jIyMtIyMjLSMjIyMgeCMjIyNcIixcbiAgXCIjIyMuIyMjLiMjIyMgeCMjIyNcIixcbiAgXCIjIyMtIyMjLSMjIyMgeCMjIyMjXCIsXG4gIFwiKCMjIykgIyMjLSMjIyMgeCMjIyMjXCIsXG4gIFwiMS0jIyMtIyMjLSMjIyMgeCMjIyMjXCIsXG4gIFwiIyMjLiMjIy4jIyMjIHgjIyMjI1wiXG5dO1xuIiwidmFyIHBob25lX251bWJlciA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBwaG9uZV9udW1iZXI7XG5waG9uZV9udW1iZXIuZm9ybWF0cyA9IHJlcXVpcmUoXCIuL2Zvcm1hdHNcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImFudHNcIixcbiAgXCJiYXRzXCIsXG4gIFwiYmVhcnNcIixcbiAgXCJiZWVzXCIsXG4gIFwiYmlyZHNcIixcbiAgXCJidWZmYWxvXCIsXG4gIFwiY2F0c1wiLFxuICBcImNoaWNrZW5zXCIsXG4gIFwiY2F0dGxlXCIsXG4gIFwiZG9nc1wiLFxuICBcImRvbHBoaW5zXCIsXG4gIFwiZHVja3NcIixcbiAgXCJlbGVwaGFudHNcIixcbiAgXCJmaXNoZXNcIixcbiAgXCJmb3hlc1wiLFxuICBcImZyb2dzXCIsXG4gIFwiZ2Vlc2VcIixcbiAgXCJnb2F0c1wiLFxuICBcImhvcnNlc1wiLFxuICBcImthbmdhcm9vc1wiLFxuICBcImxpb25zXCIsXG4gIFwibW9ua2V5c1wiLFxuICBcIm93bHNcIixcbiAgXCJveGVuXCIsXG4gIFwicGVuZ3VpbnNcIixcbiAgXCJwZW9wbGVcIixcbiAgXCJwaWdzXCIsXG4gIFwicmFiYml0c1wiLFxuICBcInNoZWVwXCIsXG4gIFwidGlnZXJzXCIsXG4gIFwid2hhbGVzXCIsXG4gIFwid29sdmVzXCIsXG4gIFwiemVicmFzXCIsXG4gIFwiYmFuc2hlZXNcIixcbiAgXCJjcm93c1wiLFxuICBcImJsYWNrIGNhdHNcIixcbiAgXCJjaGltZXJhc1wiLFxuICBcImdob3N0c1wiLFxuICBcImNvbnNwaXJhdG9yc1wiLFxuICBcImRyYWdvbnNcIixcbiAgXCJkd2FydmVzXCIsXG4gIFwiZWx2ZXNcIixcbiAgXCJlbmNoYW50ZXJzXCIsXG4gIFwiZXhvcmNpc3RzXCIsXG4gIFwic29uc1wiLFxuICBcImZvZXNcIixcbiAgXCJnaWFudHNcIixcbiAgXCJnbm9tZXNcIixcbiAgXCJnb2JsaW5zXCIsXG4gIFwiZ29vc2VzXCIsXG4gIFwiZ3JpZmZpbnNcIixcbiAgXCJseWNhbnRocm9wZXNcIixcbiAgXCJuZW1lc2lzXCIsXG4gIFwib2dyZXNcIixcbiAgXCJvcmFjbGVzXCIsXG4gIFwicHJvcGhldHNcIixcbiAgXCJzb3JjZXJvcnNcIixcbiAgXCJzcGlkZXJzXCIsXG4gIFwic3Bpcml0c1wiLFxuICBcInZhbXBpcmVzXCIsXG4gIFwid2FybG9ja3NcIixcbiAgXCJ2aXhlbnNcIixcbiAgXCJ3ZXJld29sdmVzXCIsXG4gIFwid2l0Y2hlc1wiLFxuICBcIndvcnNoaXBlcnNcIixcbiAgXCJ6b21iaWVzXCIsXG4gIFwiZHJ1aWRzXCJcbl07XG4iLCJ2YXIgdGVhbSA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSB0ZWFtO1xudGVhbS5jcmVhdHVyZSA9IHJlcXVpcmUoXCIuL2NyZWF0dXJlXCIpO1xudGVhbS5uYW1lID0gcmVxdWlyZShcIi4vbmFtZVwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3tBZGRyZXNzLnN0YXRlfSAje2NyZWF0dXJlfVwiXG5dO1xuIiwiXG52YXIgTG9yZW0gPSBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgSGVscGVycyA9IGZha2VyLmhlbHBlcnM7XG5cbiAgc2VsZi53b3JkcyA9IGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIGlmICh0eXBlb2YgbnVtID09ICd1bmRlZmluZWQnKSB7IG51bSA9IDM7IH1cbiAgICAgIHJldHVybiBIZWxwZXJzLnNodWZmbGUoZmFrZXIuZGVmaW5pdGlvbnMubG9yZW0ud29yZHMpLnNsaWNlKDAsIG51bSk7XG4gIH07XG5cbiAgc2VsZi5zZW50ZW5jZSA9IGZ1bmN0aW9uICh3b3JkQ291bnQsIHJhbmdlKSB7XG4gICAgICBpZiAodHlwZW9mIHdvcmRDb3VudCA9PSAndW5kZWZpbmVkJykgeyB3b3JkQ291bnQgPSAzOyB9XG4gICAgICBpZiAodHlwZW9mIHJhbmdlID09ICd1bmRlZmluZWQnKSB7IHJhbmdlID0gNzsgfVxuXG4gICAgICAvLyBzdHJhbmdlIGlzc3VlIHdpdGggdGhlIG5vZGVfbWluX3Rlc3QgZmFpbGluZyBmb3IgY2FwdGlhbGl6ZSwgcGxlYXNlIGZpeCBhbmQgYWRkIGZha2VyLmxvcmVtLmJhY2tcbiAgICAgIC8vcmV0dXJuICBmYWtlci5sb3JlbS53b3Jkcyh3b3JkQ291bnQgKyBIZWxwZXJzLnJhbmRvbU51bWJlcihyYW5nZSkpLmpvaW4oJyAnKS5jYXBpdGFsaXplKCk7XG5cbiAgICAgIHZhciBzZW50ZW5jZSA9IGZha2VyLmxvcmVtLndvcmRzKHdvcmRDb3VudCArIGZha2VyLnJhbmRvbS5udW1iZXIocmFuZ2UpKS5qb2luKCcgJyk7XG4gICAgICByZXR1cm4gc2VudGVuY2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzZW50ZW5jZS5zbGljZSgxKSArICcuJztcbiAgfTtcblxuICBzZWxmLnNlbnRlbmNlcyA9IGZ1bmN0aW9uIChzZW50ZW5jZUNvdW50KSB7XG4gICAgICBpZiAodHlwZW9mIHNlbnRlbmNlQ291bnQgPT0gJ3VuZGVmaW5lZCcpIHsgc2VudGVuY2VDb3VudCA9IDM7IH1cbiAgICAgIHZhciBzZW50ZW5jZXMgPSBbXTtcbiAgICAgIGZvciAoc2VudGVuY2VDb3VudDsgc2VudGVuY2VDb3VudCA+IDA7IHNlbnRlbmNlQ291bnQtLSkge1xuICAgICAgICBzZW50ZW5jZXMucHVzaChmYWtlci5sb3JlbS5zZW50ZW5jZSgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZW50ZW5jZXMuam9pbihcIlxcblwiKTtcbiAgfTtcblxuICBzZWxmLnBhcmFncmFwaCA9IGZ1bmN0aW9uIChzZW50ZW5jZUNvdW50KSB7XG4gICAgICBpZiAodHlwZW9mIHNlbnRlbmNlQ291bnQgPT0gJ3VuZGVmaW5lZCcpIHsgc2VudGVuY2VDb3VudCA9IDM7IH1cbiAgICAgIHJldHVybiBmYWtlci5sb3JlbS5zZW50ZW5jZXMoc2VudGVuY2VDb3VudCArIGZha2VyLnJhbmRvbS5udW1iZXIoMykpO1xuICB9O1xuXG4gIHNlbGYucGFyYWdyYXBocyA9IGZ1bmN0aW9uIChwYXJhZ3JhcGhDb3VudCwgc2VwYXJhdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBzZXBhcmF0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHNlcGFyYXRvciA9IFwiXFxuIFxcclwiO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFncmFwaENvdW50ID09ICd1bmRlZmluZWQnKSB7IHBhcmFncmFwaENvdW50ID0gMzsgfVxuICAgIHZhciBwYXJhZ3JhcGhzID0gW107XG4gICAgZm9yIChwYXJhZ3JhcGhDb3VudDsgcGFyYWdyYXBoQ291bnQgPiAwOyBwYXJhZ3JhcGhDb3VudC0tKSB7XG4gICAgICAgIHBhcmFncmFwaHMucHVzaChmYWtlci5sb3JlbS5wYXJhZ3JhcGgoKSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhZ3JhcGhzLmpvaW4oc2VwYXJhdG9yKTtcbiAgfVxuICBcbiAgcmV0dXJuIHNlbGY7XG59O1xuXG5cbm1vZHVsZVtcImV4cG9ydHNcIl0gPSBMb3JlbTtcbiIsImZ1bmN0aW9uIE5hbWUgKGZha2VyKSB7XG5cbiAgdGhpcy5maXJzdE5hbWUgPSBmdW5jdGlvbiAoZ2VuZGVyKSB7XG4gICAgaWYgKHR5cGVvZiBmYWtlci5kZWZpbml0aW9ucy5uYW1lLm1hbGVfZmlyc3RfbmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZmFrZXIuZGVmaW5pdGlvbnMubmFtZS5mZW1hbGVfZmlyc3RfbmFtZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgLy8gc29tZSBsb2NhbGUgZGF0YXNldHMgKCBsaWtlIHJ1ICkgaGF2ZSBmaXJzdF9uYW1lIHNwbGl0IGJ5IGdlbmRlci4gc2luY2UgdGhlIG5hbWUuZmlyc3RfbmFtZSBmaWVsZCBkb2VzIG5vdCBleGlzdCBpbiB0aGVzZSBkYXRhc2V0cyxcbiAgICAgIC8vIHdlIG11c3QgcmFuZG9tbHkgcGljayBhIG5hbWUgZnJvbSBlaXRoZXIgZ2VuZGVyIGFycmF5IHNvIGZha2VyLm5hbWUuZmlyc3ROYW1lIHdpbGwgcmV0dXJuIHRoZSBjb3JyZWN0IGxvY2FsZSBkYXRhICggYW5kIG5vdCBmYWxsYmFjayApXG4gICAgICBpZiAodHlwZW9mIGdlbmRlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgZ2VuZGVyID0gZmFrZXIucmFuZG9tLm51bWJlcigxKTtcbiAgICAgIH1cbiAgICAgIGlmIChnZW5kZXIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIubG9jYWxlc1tmYWtlci5sb2NhbGVdLm5hbWUubWFsZV9maXJzdF9uYW1lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIubG9jYWxlc1tmYWtlci5sb2NhbGVdLm5hbWUuZmVtYWxlX2ZpcnN0X25hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLmZpcnN0X25hbWUpO1xuICB9O1xuXG4gIHRoaXMubGFzdE5hbWUgPSBmdW5jdGlvbiAoZ2VuZGVyKSB7XG4gICAgaWYgKHR5cGVvZiBmYWtlci5kZWZpbml0aW9ucy5uYW1lLm1hbGVfbGFzdF9uYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBmYWtlci5kZWZpbml0aW9ucy5uYW1lLmZlbWFsZV9sYXN0X25hbWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIC8vIHNvbWUgbG9jYWxlIGRhdGFzZXRzICggbGlrZSBydSApIGhhdmUgbGFzdF9uYW1lIHNwbGl0IGJ5IGdlbmRlci4gaSBoYXZlIG5vIGlkZWEgaG93IGxhc3QgbmFtZXMgY2FuIGhhdmUgZ2VuZGVycywgYnV0IGFsc28gaSBkbyBub3Qgc3BlYWsgcnVzc2lhblxuICAgICAgLy8gc2VlIGFib3ZlIGNvbW1lbnQgb2YgZmlyc3ROYW1lIG1ldGhvZFxuICAgICAgaWYgKHR5cGVvZiBnZW5kZXIgIT09ICdudW1iZXInKSB7XG4gICAgICAgIGdlbmRlciA9IGZha2VyLnJhbmRvbS5udW1iZXIoMSk7XG4gICAgICB9XG4gICAgICBpZiAoZ2VuZGVyID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmxvY2FsZXNbZmFrZXIubG9jYWxlXS5uYW1lLm1hbGVfbGFzdF9uYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmxvY2FsZXNbZmFrZXIubG9jYWxlXS5uYW1lLmZlbWFsZV9sYXN0X25hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLmxhc3RfbmFtZSk7XG4gIH07XG5cbiAgdGhpcy5maW5kTmFtZSA9IGZ1bmN0aW9uIChmaXJzdE5hbWUsIGxhc3ROYW1lLCBnZW5kZXIpIHtcbiAgICAgIHZhciByID0gZmFrZXIucmFuZG9tLm51bWJlcig4KTtcbiAgICAgIHZhciBwcmVmaXgsIHN1ZmZpeDtcbiAgICAgIC8vIGluIHBhcnRpY3VsYXIgbG9jYWxlcyBmaXJzdCBhbmQgbGFzdCBuYW1lcyBzcGxpdCBieSBnZW5kZXIsXG4gICAgICAvLyB0aHVzIHdlIGtlZXAgY29uc2lzdGVuY3kgYnkgcGFzc2luZyAwIGFzIG1hbGUgYW5kIDEgYXMgZmVtYWxlXG4gICAgICBpZiAodHlwZW9mIGdlbmRlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgZ2VuZGVyID0gZmFrZXIucmFuZG9tLm51bWJlcigxKTtcbiAgICAgIH1cbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZSB8fCBmYWtlci5uYW1lLmZpcnN0TmFtZShnZW5kZXIpO1xuICAgICAgbGFzdE5hbWUgPSBsYXN0TmFtZSB8fCBmYWtlci5uYW1lLmxhc3ROYW1lKGdlbmRlcik7XG4gICAgICBzd2l0Y2ggKHIpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgICBwcmVmaXggPSBmYWtlci5uYW1lLnByZWZpeCgpO1xuICAgICAgICAgIGlmIChwcmVmaXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIFwiIFwiICsgZmlyc3ROYW1lICsgXCIgXCIgKyBsYXN0TmFtZTtcbiAgICAgICAgICB9XG4gICAgICBjYXNlIDE6XG4gICAgICAgICAgc3VmZml4ID0gZmFrZXIubmFtZS5wcmVmaXgoKTtcbiAgICAgICAgICBpZiAoc3VmZml4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaXJzdE5hbWUgKyBcIiBcIiArIGxhc3ROYW1lICsgXCIgXCIgKyBzdWZmaXg7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlyc3ROYW1lICsgXCIgXCIgKyBsYXN0TmFtZTtcbiAgfTtcblxuICB0aGlzLmpvYlRpdGxlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAgZmFrZXIubmFtZS5qb2JEZXNjcmlwdG9yKCkgKyBcIiBcIiArXG4gICAgICBmYWtlci5uYW1lLmpvYkFyZWEoKSArIFwiIFwiICtcbiAgICAgIGZha2VyLm5hbWUuam9iVHlwZSgpO1xuICB9O1xuXG4gIHRoaXMucHJlZml4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS5wcmVmaXgpO1xuICB9O1xuXG4gIHRoaXMuc3VmZml4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS5zdWZmaXgpO1xuICB9O1xuXG4gIHRoaXMudGl0bGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yICA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS50aXRsZS5kZXNjcmlwdG9yKSxcbiAgICAgICAgICBsZXZlbCAgICAgICA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS50aXRsZS5sZXZlbCksXG4gICAgICAgICAgam9iICAgICAgICAgPSBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUudGl0bGUuam9iKTtcblxuICAgICAgcmV0dXJuIGRlc2NyaXB0b3IgKyBcIiBcIiArIGxldmVsICsgXCIgXCIgKyBqb2I7XG4gIH07XG5cbiAgdGhpcy5qb2JEZXNjcmlwdG9yID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUudGl0bGUuZGVzY3JpcHRvcik7XG4gIH07XG5cbiAgdGhpcy5qb2JBcmVhID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUudGl0bGUubGV2ZWwpO1xuICB9O1xuXG4gIHRoaXMuam9iVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnRpdGxlLmpvYik7XG4gIH07XG5cbn1cblxubW9kdWxlWydleHBvcnRzJ10gPSBOYW1lOyIsInZhciBQaG9uZSA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgc2VsZi5waG9uZU51bWJlciA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCBmYWtlci5waG9uZS5waG9uZUZvcm1hdHMoKTtcbiAgICAgIHJldHVybiBmYWtlci5oZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKGZvcm1hdCk7XG4gIH07XG5cbiAgLy8gRklYTUU6IHRoaXMgaXMgc3RyYW5nZSBwYXNzaW5nIGluIGFuIGFycmF5IGluZGV4LlxuICBzZWxmLnBob25lTnVtYmVyRm9ybWF0ID0gZnVuY3Rpb24gKHBob25lRm9ybWF0c0FycmF5SW5kZXgpIHtcbiAgICAgIHBob25lRm9ybWF0c0FycmF5SW5kZXggPSBwaG9uZUZvcm1hdHNBcnJheUluZGV4IHx8IDA7XG4gICAgICByZXR1cm4gZmFrZXIuaGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcihmYWtlci5kZWZpbml0aW9ucy5waG9uZV9udW1iZXIuZm9ybWF0c1twaG9uZUZvcm1hdHNBcnJheUluZGV4XSk7XG4gIH07XG5cbiAgc2VsZi5waG9uZUZvcm1hdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMucGhvbmVfbnVtYmVyLmZvcm1hdHMpO1xuICB9O1xuICBcbiAgcmV0dXJuIHNlbGY7XG5cbn07XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gUGhvbmU7IiwidmFyIG1lcnNlbm5lID0gcmVxdWlyZSgnLi4vdmVuZG9yL21lcnNlbm5lJyk7XG5cbmZ1bmN0aW9uIFJhbmRvbSAoZmFrZXIsIHNlZWQpIHtcbiAgLy8gVXNlIGEgdXNlciBwcm92aWRlZCBzZWVkIGlmIGl0IGV4aXN0c1xuICBpZiAoc2VlZCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNlZWQpICYmIHNlZWQubGVuZ3RoKSB7XG4gICAgICBtZXJzZW5uZS5zZWVkX2FycmF5KHNlZWQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG1lcnNlbm5lLnNlZWQoc2VlZCk7XG4gICAgfVxuICB9XG4gIC8vIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIG51bWJlciBiYXNlZCBvbiBhIG1heCBudW1iZXIgb3IgcmFuZ2VcbiAgdGhpcy5udW1iZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcIm51bWJlclwiKSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBtYXg6IG9wdGlvbnNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubWluID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBvcHRpb25zLm1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLm1heCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgb3B0aW9ucy5tYXggPSA5OTk5OTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnByZWNpc2lvbiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgb3B0aW9ucy5wcmVjaXNpb24gPSAxO1xuICAgIH1cblxuICAgIC8vIE1ha2UgdGhlIHJhbmdlIGluY2x1c2l2ZSBvZiB0aGUgbWF4IHZhbHVlXG4gICAgdmFyIG1heCA9IG9wdGlvbnMubWF4O1xuICAgIGlmIChtYXggPj0gMCkge1xuICAgICAgbWF4ICs9IG9wdGlvbnMucHJlY2lzaW9uO1xuICAgIH1cblxuICAgIHZhciByYW5kb21OdW1iZXIgPSBvcHRpb25zLnByZWNpc2lvbiAqIE1hdGguZmxvb3IoXG4gICAgICBtZXJzZW5uZS5yYW5kKG1heCAvIG9wdGlvbnMucHJlY2lzaW9uLCBvcHRpb25zLm1pbiAvIG9wdGlvbnMucHJlY2lzaW9uKSk7XG5cbiAgICByZXR1cm4gcmFuZG9tTnVtYmVyO1xuXG4gIH1cblxuICAvLyB0YWtlcyBhbiBhcnJheSBhbmQgcmV0dXJucyBhIHJhbmRvbSBlbGVtZW50IG9mIHRoZSBhcnJheVxuICB0aGlzLmFycmF5RWxlbWVudCA9IGZ1bmN0aW9uIChhcnJheSkge1xuICAgICAgYXJyYXkgPSBhcnJheSB8fCBbXCJhXCIsIFwiYlwiLCBcImNcIl07XG4gICAgICB2YXIgciA9IGZha2VyLnJhbmRvbS5udW1iZXIoeyBtYXg6IGFycmF5Lmxlbmd0aCAtIDEgfSk7XG4gICAgICByZXR1cm4gYXJyYXlbcl07XG4gIH1cblxuICAvLyB0YWtlcyBhbiBvYmplY3QgYW5kIHJldHVybnMgdGhlIHJhbmRvbWx5IGtleSBvciB2YWx1ZVxuICB0aGlzLm9iamVjdEVsZW1lbnQgPSBmdW5jdGlvbiAob2JqZWN0LCBmaWVsZCkge1xuICAgICAgb2JqZWN0ID0gb2JqZWN0IHx8IHsgXCJmb29cIjogXCJiYXJcIiwgXCJ0b29cIjogXCJjYXJcIiB9O1xuICAgICAgdmFyIGFycmF5ID0gT2JqZWN0LmtleXMob2JqZWN0KTtcbiAgICAgIHZhciBrZXkgPSBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGFycmF5KTtcblxuICAgICAgcmV0dXJuIGZpZWxkID09PSBcImtleVwiID8ga2V5IDogb2JqZWN0W2tleV07XG4gIH1cblxuICB0aGlzLnV1aWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgUkZDNDEyMl9URU1QTEFURSA9ICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnO1xuICAgICAgdmFyIHJlcGxhY2VQbGFjZWhvbGRlcnMgPSBmdW5jdGlvbiAocGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICB2YXIgcmFuZG9tID0gTWF0aC5yYW5kb20oKSoxNnwwO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHBsYWNlaG9sZGVyID09ICd4JyA/IHJhbmRvbSA6IChyYW5kb20gJjB4MyB8IDB4OCk7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKDE2KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gUkZDNDEyMl9URU1QTEFURS5yZXBsYWNlKC9beHldL2csIHJlcGxhY2VQbGFjZWhvbGRlcnMpO1xuICB9XG5cbiAgdGhpcy5ib29sZWFuID1mdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISFmYWtlci5yYW5kb20ubnVtYmVyKDEpXG4gIH1cblxuICByZXR1cm4gdGhpcztcblxufVxuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IFJhbmRvbTtcblxuXG5cbi8vIG1vZHVsZS5leHBvcnRzID0gcmFuZG9tO1xuIiwidmFyIEZha2VyID0gcmVxdWlyZSgnLi4vbGliJyk7XG52YXIgZmFrZXIgPSBuZXcgRmFrZXIoeyBsb2NhbGU6ICdlbicsIGxvY2FsZUZhbGxiYWNrOiAnZW4nIH0pO1xuZmFrZXIubG9jYWxlc1snZW4nXSA9IHJlcXVpcmUoJy4uL2xpYi9sb2NhbGVzL2VuJyk7XG5mYWtlci5sb2NhbGVzWydlbiddID0gcmVxdWlyZSgnLi4vbGliL2xvY2FsZXMvZW4nKTtcbm1vZHVsZVsnZXhwb3J0cyddID0gZmFrZXI7XG4iLCIvLyB0aGlzIHByb2dyYW0gaXMgYSBKYXZhU2NyaXB0IHZlcnNpb24gb2YgTWVyc2VubmUgVHdpc3Rlciwgd2l0aCBjb25jZWFsbWVudCBhbmQgZW5jYXBzdWxhdGlvbiBpbiBjbGFzcyxcbi8vIGFuIGFsbW9zdCBzdHJhaWdodCBjb252ZXJzaW9uIGZyb20gdGhlIG9yaWdpbmFsIHByb2dyYW0sIG10MTk5Mzdhci5jLFxuLy8gdHJhbnNsYXRlZCBieSB5LiBva2FkYSBvbiBKdWx5IDE3LCAyMDA2LlxuLy8gYW5kIG1vZGlmaWVkIGEgbGl0dGxlIGF0IGp1bHkgMjAsIDIwMDYsIGJ1dCB0aGVyZSBhcmUgbm90IGFueSBzdWJzdGFudGlhbCBkaWZmZXJlbmNlcy5cbi8vIGluIHRoaXMgcHJvZ3JhbSwgcHJvY2VkdXJlIGRlc2NyaXB0aW9ucyBhbmQgY29tbWVudHMgb2Ygb3JpZ2luYWwgc291cmNlIGNvZGUgd2VyZSBub3QgcmVtb3ZlZC5cbi8vIGxpbmVzIGNvbW1lbnRlZCB3aXRoIC8vYy8vIHdlcmUgb3JpZ2luYWxseSBkZXNjcmlwdGlvbnMgb2YgYyBwcm9jZWR1cmUuIGFuZCBhIGZldyBmb2xsb3dpbmcgbGluZXMgYXJlIGFwcHJvcHJpYXRlIEphdmFTY3JpcHQgZGVzY3JpcHRpb25zLlxuLy8gbGluZXMgY29tbWVudGVkIHdpdGggLyogYW5kICovIGFyZSBvcmlnaW5hbCBjb21tZW50cy5cbi8vIGxpbmVzIGNvbW1lbnRlZCB3aXRoIC8vIGFyZSBhZGRpdGlvbmFsIGNvbW1lbnRzIGluIHRoaXMgSmF2YVNjcmlwdCB2ZXJzaW9uLlxuLy8gYmVmb3JlIHVzaW5nIHRoaXMgdmVyc2lvbiwgY3JlYXRlIGF0IGxlYXN0IG9uZSBpbnN0YW5jZSBvZiBNZXJzZW5uZVR3aXN0ZXIxOTkzNyBjbGFzcywgYW5kIGluaXRpYWxpemUgdGhlIGVhY2ggc3RhdGUsIGdpdmVuIGJlbG93IGluIGMgY29tbWVudHMsIG9mIGFsbCB0aGUgaW5zdGFuY2VzLlxuLypcbiAgIEEgQy1wcm9ncmFtIGZvciBNVDE5OTM3LCB3aXRoIGluaXRpYWxpemF0aW9uIGltcHJvdmVkIDIwMDIvMS8yNi5cbiAgIENvZGVkIGJ5IFRha3VqaSBOaXNoaW11cmEgYW5kIE1ha290byBNYXRzdW1vdG8uXG5cbiAgIEJlZm9yZSB1c2luZywgaW5pdGlhbGl6ZSB0aGUgc3RhdGUgYnkgdXNpbmcgaW5pdF9nZW5yYW5kKHNlZWQpXG4gICBvciBpbml0X2J5X2FycmF5KGluaXRfa2V5LCBrZXlfbGVuZ3RoKS5cblxuICAgQ29weXJpZ2h0IChDKSAxOTk3IC0gMjAwMiwgTWFrb3RvIE1hdHN1bW90byBhbmQgVGFrdWppIE5pc2hpbXVyYSxcbiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zXG4gICBhcmUgbWV0OlxuXG4gICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgICAgMy4gVGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZVxuICAgICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW5cbiAgICAgICAgcGVybWlzc2lvbi5cblxuICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuICAgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4gICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1JcbiAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLFxuICAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLFxuICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SXG4gICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GXG4gICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG4gICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuXG4gICBBbnkgZmVlZGJhY2sgaXMgdmVyeSB3ZWxjb21lLlxuICAgaHR0cDovL3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcC9+bS1tYXQvTVQvZW10Lmh0bWxcbiAgIGVtYWlsOiBtLW1hdCBAIG1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwIChyZW1vdmUgc3BhY2UpXG4qL1xuXG5mdW5jdGlvbiBNZXJzZW5uZVR3aXN0ZXIxOTkzNygpXG57XG5cdC8qIGNvbnN0YW50cyBzaG91bGQgYmUgc2NvcGVkIGluc2lkZSB0aGUgY2xhc3MgKi9cblx0dmFyIE4sIE0sIE1BVFJJWF9BLCBVUFBFUl9NQVNLLCBMT1dFUl9NQVNLO1xuXHQvKiBQZXJpb2QgcGFyYW1ldGVycyAqL1xuXHQvL2MvLyNkZWZpbmUgTiA2MjRcblx0Ly9jLy8jZGVmaW5lIE0gMzk3XG5cdC8vYy8vI2RlZmluZSBNQVRSSVhfQSAweDk5MDhiMGRmVUwgICAvKiBjb25zdGFudCB2ZWN0b3IgYSAqL1xuXHQvL2MvLyNkZWZpbmUgVVBQRVJfTUFTSyAweDgwMDAwMDAwVUwgLyogbW9zdCBzaWduaWZpY2FudCB3LXIgYml0cyAqL1xuXHQvL2MvLyNkZWZpbmUgTE9XRVJfTUFTSyAweDdmZmZmZmZmVUwgLyogbGVhc3Qgc2lnbmlmaWNhbnQgciBiaXRzICovXG5cdE4gPSA2MjQ7XG5cdE0gPSAzOTc7XG5cdE1BVFJJWF9BID0gMHg5OTA4YjBkZjsgICAvKiBjb25zdGFudCB2ZWN0b3IgYSAqL1xuXHRVUFBFUl9NQVNLID0gMHg4MDAwMDAwMDsgLyogbW9zdCBzaWduaWZpY2FudCB3LXIgYml0cyAqL1xuXHRMT1dFUl9NQVNLID0gMHg3ZmZmZmZmZjsgLyogbGVhc3Qgc2lnbmlmaWNhbnQgciBiaXRzICovXG5cdC8vYy8vc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRbTl07IC8qIHRoZSBhcnJheSBmb3IgdGhlIHN0YXRlIHZlY3RvciAgKi9cblx0Ly9jLy9zdGF0aWMgaW50IG10aT1OKzE7IC8qIG10aT09TisxIG1lYW5zIG10W05dIGlzIG5vdCBpbml0aWFsaXplZCAqL1xuXHR2YXIgbXQgPSBuZXcgQXJyYXkoTik7ICAgLyogdGhlIGFycmF5IGZvciB0aGUgc3RhdGUgdmVjdG9yICAqL1xuXHR2YXIgbXRpID0gTisxOyAgICAgICAgICAgLyogbXRpPT1OKzEgbWVhbnMgbXRbTl0gaXMgbm90IGluaXRpYWxpemVkICovXG5cblx0ZnVuY3Rpb24gdW5zaWduZWQzMiAobjEpIC8vIHJldHVybnMgYSAzMi1iaXRzIHVuc2lnZWQgaW50ZWdlciBmcm9tIGFuIG9wZXJhbmQgdG8gd2hpY2ggYXBwbGllZCBhIGJpdCBvcGVyYXRvci5cblx0e1xuXHRcdHJldHVybiBuMSA8IDAgPyAobjEgXiBVUFBFUl9NQVNLKSArIFVQUEVSX01BU0sgOiBuMTtcblx0fVxuXG5cdGZ1bmN0aW9uIHN1YnRyYWN0aW9uMzIgKG4xLCBuMikgLy8gZW11bGF0ZXMgbG93ZXJmbG93IG9mIGEgYyAzMi1iaXRzIHVuc2lnZWQgaW50ZWdlciB2YXJpYWJsZSwgaW5zdGVhZCBvZiB0aGUgb3BlcmF0b3IgLS4gdGhlc2UgYm90aCBhcmd1bWVudHMgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlcnMgZXhwcmVzc2libGUgdXNpbmcgdW5zaWduZWQgMzIgYml0cy5cblx0e1xuXHRcdHJldHVybiBuMSA8IG4yID8gdW5zaWduZWQzMigoMHgxMDAwMDAwMDAgLSAobjIgLSBuMSkpICYgMHhmZmZmZmZmZikgOiBuMSAtIG4yO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkaXRpb24zMiAobjEsIG4yKSAvLyBlbXVsYXRlcyBvdmVyZmxvdyBvZiBhIGMgMzItYml0cyB1bnNpZ2VkIGludGVnZXIgdmFyaWFibGUsIGluc3RlYWQgb2YgdGhlIG9wZXJhdG9yICsuIHRoZXNlIGJvdGggYXJndW1lbnRzIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXJzIGV4cHJlc3NpYmxlIHVzaW5nIHVuc2lnbmVkIDMyIGJpdHMuXG5cdHtcblx0XHRyZXR1cm4gdW5zaWduZWQzMigobjEgKyBuMikgJiAweGZmZmZmZmZmKVxuXHR9XG5cblx0ZnVuY3Rpb24gbXVsdGlwbGljYXRpb24zMiAobjEsIG4yKSAvLyBlbXVsYXRlcyBvdmVyZmxvdyBvZiBhIGMgMzItYml0cyB1bnNpZ2VkIGludGVnZXIgdmFyaWFibGUsIGluc3RlYWQgb2YgdGhlIG9wZXJhdG9yICouIHRoZXNlIGJvdGggYXJndW1lbnRzIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXJzIGV4cHJlc3NpYmxlIHVzaW5nIHVuc2lnbmVkIDMyIGJpdHMuXG5cdHtcblx0XHR2YXIgc3VtID0gMDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDMyOyArK2kpe1xuXHRcdFx0aWYgKChuMSA+Pj4gaSkgJiAweDEpe1xuXHRcdFx0XHRzdW0gPSBhZGRpdGlvbjMyKHN1bSwgdW5zaWduZWQzMihuMiA8PCBpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzdW07XG5cdH1cblxuXHQvKiBpbml0aWFsaXplcyBtdFtOXSB3aXRoIGEgc2VlZCAqL1xuXHQvL2MvL3ZvaWQgaW5pdF9nZW5yYW5kKHVuc2lnbmVkIGxvbmcgcylcblx0dGhpcy5pbml0X2dlbnJhbmQgPSBmdW5jdGlvbiAocylcblx0e1xuXHRcdC8vYy8vbXRbMF09IHMgJiAweGZmZmZmZmZmO1xuXHRcdG10WzBdPSB1bnNpZ25lZDMyKHMgJiAweGZmZmZmZmZmKTtcblx0XHRmb3IgKG10aT0xOyBtdGk8TjsgbXRpKyspIHtcblx0XHRcdG10W210aV0gPVxuXHRcdFx0Ly9jLy8oMTgxMjQzMzI1MyAqIChtdFttdGktMV0gXiAobXRbbXRpLTFdID4+IDMwKSkgKyBtdGkpO1xuXHRcdFx0YWRkaXRpb24zMihtdWx0aXBsaWNhdGlvbjMyKDE4MTI0MzMyNTMsIHVuc2lnbmVkMzIobXRbbXRpLTFdIF4gKG10W210aS0xXSA+Pj4gMzApKSksIG10aSk7XG5cdFx0XHQvKiBTZWUgS251dGggVEFPQ1AgVm9sMi4gM3JkIEVkLiBQLjEwNiBmb3IgbXVsdGlwbGllci4gKi9cblx0XHRcdC8qIEluIHRoZSBwcmV2aW91cyB2ZXJzaW9ucywgTVNCcyBvZiB0aGUgc2VlZCBhZmZlY3QgICAqL1xuXHRcdFx0Lyogb25seSBNU0JzIG9mIHRoZSBhcnJheSBtdFtdLiAgICAgICAgICAgICAgICAgICAgICAgICovXG5cdFx0XHQvKiAyMDAyLzAxLzA5IG1vZGlmaWVkIGJ5IE1ha290byBNYXRzdW1vdG8gICAgICAgICAgICAgKi9cblx0XHRcdC8vYy8vbXRbbXRpXSAmPSAweGZmZmZmZmZmO1xuXHRcdFx0bXRbbXRpXSA9IHVuc2lnbmVkMzIobXRbbXRpXSAmIDB4ZmZmZmZmZmYpO1xuXHRcdFx0LyogZm9yID4zMiBiaXQgbWFjaGluZXMgKi9cblx0XHR9XG5cdH1cblxuXHQvKiBpbml0aWFsaXplIGJ5IGFuIGFycmF5IHdpdGggYXJyYXktbGVuZ3RoICovXG5cdC8qIGluaXRfa2V5IGlzIHRoZSBhcnJheSBmb3IgaW5pdGlhbGl6aW5nIGtleXMgKi9cblx0Lyoga2V5X2xlbmd0aCBpcyBpdHMgbGVuZ3RoICovXG5cdC8qIHNsaWdodCBjaGFuZ2UgZm9yIEMrKywgMjAwNC8yLzI2ICovXG5cdC8vYy8vdm9pZCBpbml0X2J5X2FycmF5KHVuc2lnbmVkIGxvbmcgaW5pdF9rZXlbXSwgaW50IGtleV9sZW5ndGgpXG5cdHRoaXMuaW5pdF9ieV9hcnJheSA9IGZ1bmN0aW9uIChpbml0X2tleSwga2V5X2xlbmd0aClcblx0e1xuXHRcdC8vYy8vaW50IGksIGosIGs7XG5cdFx0dmFyIGksIGosIGs7XG5cdFx0Ly9jLy9pbml0X2dlbnJhbmQoMTk2NTAyMTgpO1xuXHRcdHRoaXMuaW5pdF9nZW5yYW5kKDE5NjUwMjE4KTtcblx0XHRpPTE7IGo9MDtcblx0XHRrID0gKE4+a2V5X2xlbmd0aCA/IE4gOiBrZXlfbGVuZ3RoKTtcblx0XHRmb3IgKDsgazsgay0tKSB7XG5cdFx0XHQvL2MvL210W2ldID0gKG10W2ldIF4gKChtdFtpLTFdIF4gKG10W2ktMV0gPj4gMzApKSAqIDE2NjQ1MjUpKVxuXHRcdFx0Ly9jLy9cdCsgaW5pdF9rZXlbal0gKyBqOyAvKiBub24gbGluZWFyICovXG5cdFx0XHRtdFtpXSA9IGFkZGl0aW9uMzIoYWRkaXRpb24zMih1bnNpZ25lZDMyKG10W2ldIF4gbXVsdGlwbGljYXRpb24zMih1bnNpZ25lZDMyKG10W2ktMV0gXiAobXRbaS0xXSA+Pj4gMzApKSwgMTY2NDUyNSkpLCBpbml0X2tleVtqXSksIGopO1xuXHRcdFx0bXRbaV0gPVxuXHRcdFx0Ly9jLy9tdFtpXSAmPSAweGZmZmZmZmZmOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqL1xuXHRcdFx0dW5zaWduZWQzMihtdFtpXSAmIDB4ZmZmZmZmZmYpO1xuXHRcdFx0aSsrOyBqKys7XG5cdFx0XHRpZiAoaT49TikgeyBtdFswXSA9IG10W04tMV07IGk9MTsgfVxuXHRcdFx0aWYgKGo+PWtleV9sZW5ndGgpIGo9MDtcblx0XHR9XG5cdFx0Zm9yIChrPU4tMTsgazsgay0tKSB7XG5cdFx0XHQvL2MvL210W2ldID0gKG10W2ldIF4gKChtdFtpLTFdIF4gKG10W2ktMV0gPj4gMzApKSAqIDE1NjYwODM5NDEpKVxuXHRcdFx0Ly9jLy8tIGk7IC8qIG5vbiBsaW5lYXIgKi9cblx0XHRcdG10W2ldID0gc3VidHJhY3Rpb24zMih1bnNpZ25lZDMyKChkYmc9bXRbaV0pIF4gbXVsdGlwbGljYXRpb24zMih1bnNpZ25lZDMyKG10W2ktMV0gXiAobXRbaS0xXSA+Pj4gMzApKSwgMTU2NjA4Mzk0MSkpLCBpKTtcblx0XHRcdC8vYy8vbXRbaV0gJj0gMHhmZmZmZmZmZjsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cblx0XHRcdG10W2ldID0gdW5zaWduZWQzMihtdFtpXSAmIDB4ZmZmZmZmZmYpO1xuXHRcdFx0aSsrO1xuXHRcdFx0aWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH1cblx0XHR9XG5cdFx0bXRbMF0gPSAweDgwMDAwMDAwOyAvKiBNU0IgaXMgMTsgYXNzdXJpbmcgbm9uLXplcm8gaW5pdGlhbCBhcnJheSAqL1xuXHR9XG5cbiAgICAvKiBtb3ZlZCBvdXRzaWRlIG9mIGdlbnJhbmRfaW50MzIoKSBieSBqd2F0dGUgMjAxMC0xMS0xNzsgZ2VuZXJhdGUgbGVzcyBnYXJiYWdlICovXG4gICAgdmFyIG1hZzAxID0gWzB4MCwgTUFUUklYX0FdO1xuXG5cdC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMHhmZmZmZmZmZl0taW50ZXJ2YWwgKi9cblx0Ly9jLy91bnNpZ25lZCBsb25nIGdlbnJhbmRfaW50MzIodm9pZClcblx0dGhpcy5nZW5yYW5kX2ludDMyID0gZnVuY3Rpb24gKClcblx0e1xuXHRcdC8vYy8vdW5zaWduZWQgbG9uZyB5O1xuXHRcdC8vYy8vc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFnMDFbMl09ezB4MFVMLCBNQVRSSVhfQX07XG5cdFx0dmFyIHk7XG5cdFx0LyogbWFnMDFbeF0gPSB4ICogTUFUUklYX0EgIGZvciB4PTAsMSAqL1xuXG5cdFx0aWYgKG10aSA+PSBOKSB7IC8qIGdlbmVyYXRlIE4gd29yZHMgYXQgb25lIHRpbWUgKi9cblx0XHRcdC8vYy8vaW50IGtrO1xuXHRcdFx0dmFyIGtrO1xuXG5cdFx0XHRpZiAobXRpID09IE4rMSkgICAvKiBpZiBpbml0X2dlbnJhbmQoKSBoYXMgbm90IGJlZW4gY2FsbGVkLCAqL1xuXHRcdFx0XHQvL2MvL2luaXRfZ2VucmFuZCg1NDg5KTsgLyogYSBkZWZhdWx0IGluaXRpYWwgc2VlZCBpcyB1c2VkICovXG5cdFx0XHRcdHRoaXMuaW5pdF9nZW5yYW5kKDU0ODkpOyAvKiBhIGRlZmF1bHQgaW5pdGlhbCBzZWVkIGlzIHVzZWQgKi9cblxuXHRcdFx0Zm9yIChraz0wO2trPE4tTTtraysrKSB7XG5cdFx0XHRcdC8vYy8veSA9IChtdFtra10mVVBQRVJfTUFTSyl8KG10W2trKzFdJkxPV0VSX01BU0spO1xuXHRcdFx0XHQvL2MvL210W2trXSA9IG10W2trK01dIF4gKHkgPj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcblx0XHRcdFx0eSA9IHVuc2lnbmVkMzIoKG10W2trXSZVUFBFUl9NQVNLKXwobXRba2srMV0mTE9XRVJfTUFTSykpO1xuXHRcdFx0XHRtdFtra10gPSB1bnNpZ25lZDMyKG10W2trK01dIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICg7a2s8Ti0xO2trKyspIHtcblx0XHRcdFx0Ly9jLy95ID0gKG10W2trXSZVUFBFUl9NQVNLKXwobXRba2srMV0mTE9XRVJfTUFTSyk7XG5cdFx0XHRcdC8vYy8vbXRba2tdID0gbXRba2srKE0tTildIF4gKHkgPj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcblx0XHRcdFx0eSA9IHVuc2lnbmVkMzIoKG10W2trXSZVUFBFUl9NQVNLKXwobXRba2srMV0mTE9XRVJfTUFTSykpO1xuXHRcdFx0XHRtdFtra10gPSB1bnNpZ25lZDMyKG10W2trKyhNLU4pXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdKTtcblx0XHRcdH1cblx0XHRcdC8vYy8veSA9IChtdFtOLTFdJlVQUEVSX01BU0spfChtdFswXSZMT1dFUl9NQVNLKTtcblx0XHRcdC8vYy8vbXRbTi0xXSA9IG10W00tMV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXHRcdFx0eSA9IHVuc2lnbmVkMzIoKG10W04tMV0mVVBQRVJfTUFTSyl8KG10WzBdJkxPV0VSX01BU0spKTtcblx0XHRcdG10W04tMV0gPSB1bnNpZ25lZDMyKG10W00tMV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXSk7XG5cdFx0XHRtdGkgPSAwO1xuXHRcdH1cblxuXHRcdHkgPSBtdFttdGkrK107XG5cblx0XHQvKiBUZW1wZXJpbmcgKi9cblx0XHQvL2MvL3kgXj0gKHkgPj4gMTEpO1xuXHRcdC8vYy8veSBePSAoeSA8PCA3KSAmIDB4OWQyYzU2ODA7XG5cdFx0Ly9jLy95IF49ICh5IDw8IDE1KSAmIDB4ZWZjNjAwMDA7XG5cdFx0Ly9jLy95IF49ICh5ID4+IDE4KTtcblx0XHR5ID0gdW5zaWduZWQzMih5IF4gKHkgPj4+IDExKSk7XG5cdFx0eSA9IHVuc2lnbmVkMzIoeSBeICgoeSA8PCA3KSAmIDB4OWQyYzU2ODApKTtcblx0XHR5ID0gdW5zaWduZWQzMih5IF4gKCh5IDw8IDE1KSAmIDB4ZWZjNjAwMDApKTtcblx0XHR5ID0gdW5zaWduZWQzMih5IF4gKHkgPj4+IDE4KSk7XG5cblx0XHRyZXR1cm4geTtcblx0fVxuXG5cdC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMHg3ZmZmZmZmZl0taW50ZXJ2YWwgKi9cblx0Ly9jLy9sb25nIGdlbnJhbmRfaW50MzEodm9pZClcblx0dGhpcy5nZW5yYW5kX2ludDMxID0gZnVuY3Rpb24gKClcblx0e1xuXHRcdC8vYy8vcmV0dXJuIChnZW5yYW5kX2ludDMyKCk+PjEpO1xuXHRcdHJldHVybiAodGhpcy5nZW5yYW5kX2ludDMyKCk+Pj4xKTtcblx0fVxuXG5cdC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMV0tcmVhbC1pbnRlcnZhbCAqL1xuXHQvL2MvL2RvdWJsZSBnZW5yYW5kX3JlYWwxKHZvaWQpXG5cdHRoaXMuZ2VucmFuZF9yZWFsMSA9IGZ1bmN0aW9uICgpXG5cdHtcblx0XHQvL2MvL3JldHVybiBnZW5yYW5kX2ludDMyKCkqKDEuMC80Mjk0OTY3Mjk1LjApO1xuXHRcdHJldHVybiB0aGlzLmdlbnJhbmRfaW50MzIoKSooMS4wLzQyOTQ5NjcyOTUuMCk7XG5cdFx0LyogZGl2aWRlZCBieSAyXjMyLTEgKi9cblx0fVxuXG5cdC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSktcmVhbC1pbnRlcnZhbCAqL1xuXHQvL2MvL2RvdWJsZSBnZW5yYW5kX3JlYWwyKHZvaWQpXG5cdHRoaXMuZ2VucmFuZF9yZWFsMiA9IGZ1bmN0aW9uICgpXG5cdHtcblx0XHQvL2MvL3JldHVybiBnZW5yYW5kX2ludDMyKCkqKDEuMC80Mjk0OTY3Mjk2LjApO1xuXHRcdHJldHVybiB0aGlzLmdlbnJhbmRfaW50MzIoKSooMS4wLzQyOTQ5NjcyOTYuMCk7XG5cdFx0LyogZGl2aWRlZCBieSAyXjMyICovXG5cdH1cblxuXHQvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uICgwLDEpLXJlYWwtaW50ZXJ2YWwgKi9cblx0Ly9jLy9kb3VibGUgZ2VucmFuZF9yZWFsMyh2b2lkKVxuXHR0aGlzLmdlbnJhbmRfcmVhbDMgPSBmdW5jdGlvbiAoKVxuXHR7XG5cdFx0Ly9jLy9yZXR1cm4gKChnZW5yYW5kX2ludDMyKCkpICsgMC41KSooMS4wLzQyOTQ5NjcyOTYuMCk7XG5cdFx0cmV0dXJuICgodGhpcy5nZW5yYW5kX2ludDMyKCkpICsgMC41KSooMS4wLzQyOTQ5NjcyOTYuMCk7XG5cdFx0LyogZGl2aWRlZCBieSAyXjMyICovXG5cdH1cblxuXHQvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpIHdpdGggNTMtYml0IHJlc29sdXRpb24qL1xuXHQvL2MvL2RvdWJsZSBnZW5yYW5kX3JlczUzKHZvaWQpXG5cdHRoaXMuZ2VucmFuZF9yZXM1MyA9IGZ1bmN0aW9uICgpXG5cdHtcblx0XHQvL2MvL3Vuc2lnbmVkIGxvbmcgYT1nZW5yYW5kX2ludDMyKCk+PjUsIGI9Z2VucmFuZF9pbnQzMigpPj42O1xuXHRcdHZhciBhPXRoaXMuZ2VucmFuZF9pbnQzMigpPj4+NSwgYj10aGlzLmdlbnJhbmRfaW50MzIoKT4+PjY7XG5cdFx0cmV0dXJuKGEqNjcxMDg4NjQuMCtiKSooMS4wLzkwMDcxOTkyNTQ3NDA5OTIuMCk7XG5cdH1cblx0LyogVGhlc2UgcmVhbCB2ZXJzaW9ucyBhcmUgZHVlIHRvIElzYWt1IFdhZGEsIDIwMDIvMDEvMDkgYWRkZWQgKi9cbn1cblxuLy8gIEV4cG9ydHM6IFB1YmxpYyBBUElcblxuLy8gIEV4cG9ydCB0aGUgdHdpc3RlciBjbGFzc1xuZXhwb3J0cy5NZXJzZW5uZVR3aXN0ZXIxOTkzNyA9IE1lcnNlbm5lVHdpc3RlcjE5OTM3O1xuXG4vLyAgRXhwb3J0IGEgc2ltcGxpZmllZCBmdW5jdGlvbiB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyc1xudmFyIGdlbiA9IG5ldyBNZXJzZW5uZVR3aXN0ZXIxOTkzNztcbmdlbi5pbml0X2dlbnJhbmQoKG5ldyBEYXRlKS5nZXRUaW1lKCkgJSAxMDAwMDAwMDAwKTtcblxuLy8gQWRkZWQgbWF4LCBtaW4gcmFuZ2UgZnVuY3Rpb25hbGl0eSwgTWFyYWsgU3F1aXJlcyBTZXB0IDExIDIwMTRcbmV4cG9ydHMucmFuZCA9IGZ1bmN0aW9uKG1heCwgbWluKSB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB7XG4gICAgICAgIG1pbiA9IDA7XG4gICAgICAgIG1heCA9IDMyNzY4O1xuICAgICAgICB9XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoZ2VuLmdlbnJhbmRfcmVhbDIoKSAqIChtYXggLSBtaW4pICsgbWluKTtcbn1cbmV4cG9ydHMuc2VlZCA9IGZ1bmN0aW9uKFMpIHtcbiAgICBpZiAodHlwZW9mKFMpICE9ICdudW1iZXInKVxuICAgICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInNlZWQoUykgbXVzdCB0YWtlIG51bWVyaWMgYXJndW1lbnQ7IGlzIFwiICsgdHlwZW9mKFMpKTtcbiAgICAgICAgfVxuICAgIGdlbi5pbml0X2dlbnJhbmQoUyk7XG59XG5leHBvcnRzLnNlZWRfYXJyYXkgPSBmdW5jdGlvbihBKSB7XG4gICAgaWYgKHR5cGVvZihBKSAhPSAnb2JqZWN0JylcbiAgICAgICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZWVkX2FycmF5KEEpIG11c3QgdGFrZSBhcnJheSBvZiBudW1iZXJzOyBpcyBcIiArIHR5cGVvZihBKSk7XG4gICAgICAgIH1cbiAgICBnZW4uaW5pdF9ieV9hcnJheShBKTtcbn1cbiIsIi8qXG4gKiBwYXNzd29yZC1nZW5lcmF0b3JcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTMgQmVybWkgRmVycmVyIDxiZXJtaUBiZXJtaWxhYnMuY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbihmdW5jdGlvbiAocm9vdCkge1xuXG4gIHZhciBsb2NhbE5hbWUsIGNvbnNvbmFudCwgbGV0dGVyLCBwYXNzd29yZCwgdm93ZWw7XG4gIGxldHRlciA9IC9bYS16QS1aXSQvO1xuICB2b3dlbCA9IC9bYWVpb3VBRUlPVV0kLztcbiAgY29uc29uYW50ID0gL1tiY2RmZ2hqa2xtbnBxcnN0dnd4eXpCQ0RGR0hKS0xNTlBRUlNUVldYWVpdJC87XG5cblxuICAvLyBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCB2YXJpYWJsZSB0aGUgcGFzc3dvcmRHZW5lcmF0b3IgbGlicmFyeSB3aWxsIHVzZVxuICAvLyB0aGlzIGlzIHNwZWNpYWxseSB1c2VmdWwgaWYgd2luZG93LnBhc3N3b3JkR2VuZXJhdG9yIGlzIGFscmVhZHkgYmVpbmcgdXNlZFxuICAvLyBieSB5b3VyIGFwcGxpY2F0aW9uIGFuZCB5b3Ugd2FudCBhIGRpZmZlcmVudCBuYW1lLiBGb3IgZXhhbXBsZTpcbiAgLy8gICAgLy8gRGVjbGFyZSBiZWZvcmUgaW5jbHVkaW5nIHRoZSBwYXNzd29yZEdlbmVyYXRvciBsaWJyYXJ5XG4gIC8vICAgIHZhciBsb2NhbFBhc3N3b3JkR2VuZXJhdG9yTGlicmFyeU5hbWUgPSAncGFzcyc7XG4gIGxvY2FsTmFtZSA9IHJvb3QubG9jYWxQYXNzd29yZEdlbmVyYXRvckxpYnJhcnlOYW1lIHx8IFwiZ2VuZXJhdGVQYXNzd29yZFwiLFxuXG4gIHBhc3N3b3JkID0gZnVuY3Rpb24gKGxlbmd0aCwgbWVtb3JhYmxlLCBwYXR0ZXJuLCBwcmVmaXgpIHtcbiAgICB2YXIgY2hhciwgbjtcbiAgICBpZiAobGVuZ3RoID09IG51bGwpIHtcbiAgICAgIGxlbmd0aCA9IDEwO1xuICAgIH1cbiAgICBpZiAobWVtb3JhYmxlID09IG51bGwpIHtcbiAgICAgIG1lbW9yYWJsZSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChwYXR0ZXJuID09IG51bGwpIHtcbiAgICAgIHBhdHRlcm4gPSAvXFx3LztcbiAgICB9XG4gICAgaWYgKHByZWZpeCA9PSBudWxsKSB7XG4gICAgICBwcmVmaXggPSAnJztcbiAgICB9XG4gICAgaWYgKHByZWZpeC5sZW5ndGggPj0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbiAgICBpZiAobWVtb3JhYmxlKSB7XG4gICAgICBpZiAocHJlZml4Lm1hdGNoKGNvbnNvbmFudCkpIHtcbiAgICAgICAgcGF0dGVybiA9IHZvd2VsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0dGVybiA9IGNvbnNvbmFudDtcbiAgICAgIH1cbiAgICB9XG4gICAgbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk0KSArIDMzO1xuICAgIGNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG4pO1xuICAgIGlmIChtZW1vcmFibGUpIHtcbiAgICAgIGNoYXIgPSBjaGFyLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmICghY2hhci5tYXRjaChwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIHBhc3N3b3JkKGxlbmd0aCwgbWVtb3JhYmxlLCBwYXR0ZXJuLCBwcmVmaXgpO1xuICAgIH1cbiAgICByZXR1cm4gcGFzc3dvcmQobGVuZ3RoLCBtZW1vcmFibGUsIHBhdHRlcm4sIFwiXCIgKyBwcmVmaXggKyBjaGFyKTtcbiAgfTtcblxuXG4gICgodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiByb290KVtsb2NhbE5hbWVdID0gcGFzc3dvcmQ7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcGFzc3dvcmQ7XG4gICAgfVxuICB9XG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBnbG9iYWxgIG9uIHRoZSBzZXJ2ZXIuXG59KHRoaXMpKTsiLCIvKlxuXG5Db3B5cmlnaHQgKGMpIDIwMTItMjAxNCBKZWZmcmV5IE1lYWxvXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbnRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbnRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlXG5Tb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRVxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SXG5DT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG5PVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5CYXNlZCBsb29zZWx5IG9uIEx1a2EgUHVzaWMncyBQSFAgU2NyaXB0OiBodHRwOi8vMzYwcGVyY2VudHMuY29tL3Bvc3RzL3BocC1yYW5kb20tdXNlci1hZ2VudC1nZW5lcmF0b3IvXG5cblRoZSBsaWNlbnNlIGZvciB0aGF0IHNjcmlwdCBpcyBhcyBmb2xsb3dzOlxuXG5cIlRIRSBCRUVSLVdBUkUgTElDRU5TRVwiIChSZXZpc2lvbiA0Mik6XG5cbjxwdXNpYzkzQGdtYWlsLmNvbT4gd3JvdGUgdGhpcyBmaWxlLiBBcyBsb25nIGFzIHlvdSByZXRhaW4gdGhpcyBub3RpY2UgeW91IGNhbiBkbyB3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIHRoaXMgc3R1ZmYuXG5JZiB3ZSBtZWV0IHNvbWUgZGF5LCBhbmQgeW91IHRoaW5rIHRoaXMgc3R1ZmYgaXMgd29ydGggaXQsIHlvdSBjYW4gYnV5IG1lIGEgYmVlciBpbiByZXR1cm4uIEx1a2EgUHVzaWNcbiovXG5cbmZ1bmN0aW9uIHJuZChhLCBiKSB7XG4gICAgLy9jYWxsaW5nIHJuZCgpIHdpdGggbm8gYXJndW1lbnRzIGlzIGlkZW50aWNhbCB0byBybmQoMCwgMTAwKVxuICAgIGEgPSBhIHx8IDA7XG4gICAgYiA9IGIgfHwgMTAwO1xuXG4gICAgaWYgKHR5cGVvZiBiID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgLy9ybmQoaW50IG1pbiwgaW50IG1heCkgcmV0dXJucyBpbnRlZ2VyIGJldHdlZW4gbWluLCBtYXhcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiAobWluLCBtYXgpIHtcbiAgICAgICAgICAgIGlmIChtaW4gPiBtYXgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZXhwZWN0ZWQgbWluIDw9IG1heDsgZ290IG1pbiA9ICcgKyBtaW4gKyAnLCBtYXggPSAnICsgbWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluO1xuICAgICAgICB9KGEsIGIpKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpID09PSBcIltvYmplY3QgQXJyYXldXCIpIHtcbiAgICAgICAgLy9yZXR1cm5zIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBhcnJheSAoYSksIGV2ZW4gd2VpZ2h0aW5nXG4gICAgICAgIHJldHVybiBhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGEubGVuZ3RoKV07XG4gICAgfVxuXG4gICAgaWYgKGEgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vcmV0dXJucyBhIHJhbmRvbSBrZXkgZnJvbSB0aGUgcGFzc2VkIG9iamVjdDsga2V5cyBhcmUgd2VpZ2h0ZWQgYnkgdGhlIGRlY2ltYWwgcHJvYmFiaWxpdHkgaW4gdGhlaXIgdmFsdWVcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgcmFuZCA9IHJuZCgwLCAxMDApIC8gMTAwLCBtaW4gPSAwLCBtYXggPSAwLCBrZXksIHJldHVybl92YWw7XG5cbiAgICAgICAgICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBtYXggPSBvYmpba2V5XSArIG1pbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmQgPj0gbWluICYmIHJhbmQgPD0gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBtaW4gKyBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXR1cm5fdmFsO1xuICAgICAgICB9KGEpKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8gcm5kLiAoJyArIChiID8gYSArICcsICcgKyBiIDogYSkgKyAnKScpO1xufVxuXG5mdW5jdGlvbiByYW5kb21MYW5nKCkge1xuICAgIHJldHVybiBybmQoWydBQicsICdBRicsICdBTicsICdBUicsICdBUycsICdBWicsICdCRScsICdCRycsICdCTicsICdCTycsICdCUicsICdCUycsICdDQScsICdDRScsICdDTycsICdDUycsXG4gICAgICAgICAgICAgICAgJ0NVJywgJ0NZJywgJ0RBJywgJ0RFJywgJ0VMJywgJ0VOJywgJ0VPJywgJ0VTJywgJ0VUJywgJ0VVJywgJ0ZBJywgJ0ZJJywgJ0ZKJywgJ0ZPJywgJ0ZSJywgJ0ZZJyxcbiAgICAgICAgICAgICAgICAnR0EnLCAnR0QnLCAnR0wnLCAnR1YnLCAnSEUnLCAnSEknLCAnSFInLCAnSFQnLCAnSFUnLCAnSFknLCAnSUQnLCAnSVMnLCAnSVQnLCAnSkEnLCAnSlYnLCAnS0EnLFxuICAgICAgICAgICAgICAgICdLRycsICdLTycsICdLVScsICdLVycsICdLWScsICdMQScsICdMQicsICdMSScsICdMTicsICdMVCcsICdMVicsICdNRycsICdNSycsICdNTicsICdNTycsICdNUycsXG4gICAgICAgICAgICAgICAgJ01UJywgJ01ZJywgJ05CJywgJ05FJywgJ05MJywgJ05OJywgJ05PJywgJ09DJywgJ1BMJywgJ1BUJywgJ1JNJywgJ1JPJywgJ1JVJywgJ1NDJywgJ1NFJywgJ1NLJyxcbiAgICAgICAgICAgICAgICAnU0wnLCAnU08nLCAnU1EnLCAnU1InLCAnU1YnLCAnU1cnLCAnVEsnLCAnVFInLCAnVFknLCAnVUsnLCAnVVInLCAnVVonLCAnVkknLCAnVk8nLCAnWUknLCAnWkgnXSk7XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUJyb3dzZXJBbmRPUygpIHtcbiAgICB2YXIgYnJvd3NlciA9IHJuZCh7XG4gICAgICAgIGNocm9tZTogICAgLjQ1MTMyODEwNTY2LFxuICAgICAgICBpZXhwbG9yZXI6IC4yNzQ3NzA2MTgzNixcbiAgICAgICAgZmlyZWZveDogICAuMTkzODQxNzA2MDgsXG4gICAgICAgIHNhZmFyaTogICAgLjA2MTg2NzgxMTE4LFxuICAgICAgICBvcGVyYTogICAgIC4wMTU3NDIzNjk1NVxuICAgIH0pLFxuICAgIG9zID0ge1xuICAgICAgICBjaHJvbWU6ICB7d2luOiAuODksICBtYWM6IC4wOSAsIGxpbjogLjAyfSxcbiAgICAgICAgZmlyZWZveDoge3dpbjogLjgzLCAgbWFjOiAuMTYsICBsaW46IC4wMX0sXG4gICAgICAgIG9wZXJhOiAgIHt3aW46IC45MSwgIG1hYzogLjAzICwgbGluOiAuMDZ9LFxuICAgICAgICBzYWZhcmk6ICB7d2luOiAuMDQgLCBtYWM6IC45NiAgfSxcbiAgICAgICAgaWV4cGxvcmVyOiBbJ3dpbiddXG4gICAgfTtcblxuICAgIHJldHVybiBbYnJvd3Nlciwgcm5kKG9zW2Jyb3dzZXJdKV07XG59XG5cbmZ1bmN0aW9uIHJhbmRvbVByb2MoYXJjaCkge1xuICAgIHZhciBwcm9jcyA9IHtcbiAgICAgICAgbGluOlsnaTY4NicsICd4ODZfNjQnXSxcbiAgICAgICAgbWFjOiB7J0ludGVsJyA6IC40OCwgJ1BQQyc6IC4wMSwgJ1U7IEludGVsJzouNDgsICdVOyBQUEMnIDouMDF9LFxuICAgICAgICB3aW46WycnLCAnV09XNjQnLCAnV2luNjQ7IHg2NCddXG4gICAgfTtcbiAgICByZXR1cm4gcm5kKHByb2NzW2FyY2hdKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tUmV2aXNpb24oZG90cykge1xuICAgIHZhciByZXR1cm5fdmFsID0gJyc7XG4gICAgLy9nZW5lcmF0ZSBhIHJhbmRvbSByZXZpc2lvblxuICAgIC8vZG90cyA9IDIgcmV0dXJucyAueC55IHdoZXJlIHggJiB5IGFyZSBiZXR3ZWVuIDAgYW5kIDlcbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGRvdHM7IHgrKykge1xuICAgICAgICByZXR1cm5fdmFsICs9ICcuJyArIHJuZCgwLCA5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVybl92YWw7XG59XG5cbnZhciB2ZXJzaW9uX3N0cmluZyA9IHtcbiAgICBuZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFtybmQoMSwgNCksIHJuZCgwLCA5KSwgcm5kKDEwMDAwLCA5OTk5OSksIHJuZCgwLCA5KV0uam9pbignLicpO1xuICAgIH0sXG4gICAgbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJuZCg1LCA2KSArICcuJyArIHJuZCgwLCAzKTtcbiAgICB9LFxuICAgIGllOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBybmQoNywgMTEpO1xuICAgIH0sXG4gICAgdHJpZGVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcm5kKDMsIDcpICsgJy4nICsgcm5kKDAsIDEpO1xuICAgIH0sXG4gICAgb3N4OiBmdW5jdGlvbiAoZGVsaW0pIHtcbiAgICAgICAgcmV0dXJuIFsxMCwgcm5kKDUsIDEwKSwgcm5kKDAsIDkpXS5qb2luKGRlbGltIHx8ICcuJyk7XG4gICAgfSxcbiAgICBjaHJvbWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFtybmQoMTMsIDM5KSwgMCwgcm5kKDgwMCwgODk5KSwgMF0uam9pbignLicpO1xuICAgIH0sXG4gICAgcHJlc3RvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnMi45LicgKyBybmQoMTYwLCAxOTApO1xuICAgIH0sXG4gICAgcHJlc3RvMjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcm5kKDEwLCAxMikgKyAnLjAwJztcbiAgICB9LFxuICAgIHNhZmFyaTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcm5kKDUzMSwgNTM4KSArICcuJyArIHJuZCgwLCAyKSArICcuJyArIHJuZCgwLDIpO1xuICAgIH1cbn07XG5cbnZhciBicm93c2VyID0ge1xuICAgIGZpcmVmb3g6IGZ1bmN0aW9uIGZpcmVmb3goYXJjaCkge1xuICAgICAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2Vja29fdXNlcl9hZ2VudF9zdHJpbmdfcmVmZXJlbmNlXG4gICAgICAgIHZhciBmaXJlZm94X3ZlciA9IHJuZCg1LCAxNSkgKyByYW5kb21SZXZpc2lvbigyKSxcbiAgICAgICAgICAgIGdlY2tvX3ZlciA9ICdHZWNrby8yMDEwMDEwMSBGaXJlZm94LycgKyBmaXJlZm94X3ZlcixcbiAgICAgICAgICAgIHByb2MgPSByYW5kb21Qcm9jKGFyY2gpLFxuICAgICAgICAgICAgb3NfdmVyID0gKGFyY2ggPT09ICd3aW4nKSA/ICcoV2luZG93cyBOVCAnICsgdmVyc2lvbl9zdHJpbmcubnQoKSArICgocHJvYykgPyAnOyAnICsgcHJvYyA6ICcnKVxuICAgICAgICAgICAgOiAoYXJjaCA9PT0gJ21hYycpID8gJyhNYWNpbnRvc2g7ICcgKyBwcm9jICsgJyBNYWMgT1MgWCAnICsgdmVyc2lvbl9zdHJpbmcub3N4KClcbiAgICAgICAgICAgIDogJyhYMTE7IExpbnV4ICcgKyBwcm9jO1xuXG4gICAgICAgIHJldHVybiAnTW96aWxsYS81LjAgJyArIG9zX3ZlciArICc7IHJ2OicgKyBmaXJlZm94X3Zlci5zbGljZSgwLCAtMikgKyAnKSAnICsgZ2Vja29fdmVyO1xuICAgIH0sXG5cbiAgICBpZXhwbG9yZXI6IGZ1bmN0aW9uIGlleHBsb3JlcigpIHtcbiAgICAgICAgdmFyIHZlciA9IHZlcnNpb25fc3RyaW5nLmllKCk7XG5cbiAgICAgICAgaWYgKHZlciA+PSAxMSkge1xuICAgICAgICAgICAgLy9odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg4NjkzMDEodj12cy44NSkuYXNweFxuICAgICAgICAgICAgcmV0dXJuICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LicgKyBybmQoMSwzKSArICc7IFRyaWRlbnQvNy4wOyAnICsgcm5kKFsnVG91Y2g7ICcsICcnXSkgKyAncnY6MTEuMCkgbGlrZSBHZWNrbyc7XG4gICAgICAgIH1cblxuICAgICAgICAvL2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9tczUzNzUwMyh2PXZzLjg1KS5hc3B4XG4gICAgICAgIHJldHVybiAnTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IE1TSUUgJyArIHZlciArICcuMDsgV2luZG93cyBOVCAnICsgdmVyc2lvbl9zdHJpbmcubnQoKSArICc7IFRyaWRlbnQvJyArXG4gICAgICAgICAgICB2ZXJzaW9uX3N0cmluZy50cmlkZW50KCkgKyAoKHJuZCgwLCAxKSA9PT0gMSkgPyAnOyAuTkVUIENMUiAnICsgdmVyc2lvbl9zdHJpbmcubmV0KCkgOiAnJykgKyAnKSc7XG4gICAgfSxcblxuICAgIG9wZXJhOiBmdW5jdGlvbiBvcGVyYShhcmNoKSB7XG4gICAgICAgIC8vaHR0cDovL3d3dy5vcGVyYS5jb20vZG9jcy9oaXN0b3J5L1xuICAgICAgICB2YXIgcHJlc3RvX3ZlciA9ICcgUHJlc3RvLycgKyB2ZXJzaW9uX3N0cmluZy5wcmVzdG8oKSArICcgVmVyc2lvbi8nICsgdmVyc2lvbl9zdHJpbmcucHJlc3RvMigpICsgJyknLFxuICAgICAgICAgICAgb3NfdmVyID0gKGFyY2ggPT09ICd3aW4nKSA/ICcoV2luZG93cyBOVCAnICsgdmVyc2lvbl9zdHJpbmcubnQoKSArICc7IFU7ICcgKyByYW5kb21MYW5nKCkgKyBwcmVzdG9fdmVyXG4gICAgICAgICAgICA6IChhcmNoID09PSAnbGluJykgPyAnKFgxMTsgTGludXggJyArIHJhbmRvbVByb2MoYXJjaCkgKyAnOyBVOyAnICsgcmFuZG9tTGFuZygpICsgcHJlc3RvX3ZlclxuICAgICAgICAgICAgOiAnKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggJyArIHZlcnNpb25fc3RyaW5nLm9zeCgpICsgJyBVOyAnICsgcmFuZG9tTGFuZygpICsgJyBQcmVzdG8vJyArXG4gICAgICAgICAgICB2ZXJzaW9uX3N0cmluZy5wcmVzdG8oKSArICcgVmVyc2lvbi8nICsgdmVyc2lvbl9zdHJpbmcucHJlc3RvMigpICsgJyknO1xuXG4gICAgICAgIHJldHVybiAnT3BlcmEvJyArIHJuZCg5LCAxNCkgKyAnLicgKyBybmQoMCwgOTkpICsgJyAnICsgb3NfdmVyO1xuICAgIH0sXG5cbiAgICBzYWZhcmk6IGZ1bmN0aW9uIHNhZmFyaShhcmNoKSB7XG4gICAgICAgIHZhciBzYWZhcmkgPSB2ZXJzaW9uX3N0cmluZy5zYWZhcmkoKSxcbiAgICAgICAgICAgIHZlciA9IHJuZCg0LCA3KSArICcuJyArIHJuZCgwLDEpICsgJy4nICsgcm5kKDAsMTApLFxuICAgICAgICAgICAgb3NfdmVyID0gKGFyY2ggPT09ICdtYWMnKSA/ICcoTWFjaW50b3NoOyAnICsgcmFuZG9tUHJvYygnbWFjJykgKyAnIE1hYyBPUyBYICcrIHZlcnNpb25fc3RyaW5nLm9zeCgnXycpICsgJyBydjonICsgcm5kKDIsIDYpICsgJy4wOyAnKyByYW5kb21MYW5nKCkgKyAnKSAnXG4gICAgICAgICAgICA6ICcoV2luZG93czsgVTsgV2luZG93cyBOVCAnICsgdmVyc2lvbl9zdHJpbmcubnQoKSArICcpJztcblxuICAgICAgICByZXR1cm4gJ01vemlsbGEvNS4wICcgKyBvc192ZXIgKyAnQXBwbGVXZWJLaXQvJyArIHNhZmFyaSArICcgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLycgKyB2ZXIgKyAnIFNhZmFyaS8nICsgc2FmYXJpO1xuICAgIH0sXG5cbiAgICBjaHJvbWU6IGZ1bmN0aW9uIGNocm9tZShhcmNoKSB7XG4gICAgICAgIHZhciBzYWZhcmkgPSB2ZXJzaW9uX3N0cmluZy5zYWZhcmkoKSxcbiAgICAgICAgICAgIG9zX3ZlciA9IChhcmNoID09PSAnbWFjJykgPyAnKE1hY2ludG9zaDsgJyArIHJhbmRvbVByb2MoJ21hYycpICsgJyBNYWMgT1MgWCAnICsgdmVyc2lvbl9zdHJpbmcub3N4KCdfJykgKyAnKSAnXG4gICAgICAgICAgICA6IChhcmNoID09PSAnd2luJykgPyAnKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgJyArIHZlcnNpb25fc3RyaW5nLm50KCkgKyAnKSdcbiAgICAgICAgICAgIDogJyhYMTE7IExpbnV4ICcgKyByYW5kb21Qcm9jKGFyY2gpO1xuXG4gICAgICAgIHJldHVybiAnTW96aWxsYS81LjAgJyArIG9zX3ZlciArICcgQXBwbGVXZWJLaXQvJyArIHNhZmFyaSArICcgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvJyArIHZlcnNpb25fc3RyaW5nLmNocm9tZSgpICsgJyBTYWZhcmkvJyArIHNhZmFyaTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUoKSB7XG4gICAgdmFyIHJhbmRvbSA9IHJhbmRvbUJyb3dzZXJBbmRPUygpO1xuICAgIHJldHVybiBicm93c2VyW3JhbmRvbVswXV0ocmFuZG9tWzFdKTtcbn07XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIi8qIVxuICogbm9kZS1pbmhlcml0XG4gKiBDb3B5cmlnaHQoYykgMjAxMSBEbWl0cnkgRmlsYXRvdiA8ZGZpbGF0b3ZAeWFuZGV4LXRlYW0ucnU+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2luaGVyaXQnKTtcbiIsIi8qKlxuICogQG1vZHVsZSBpbmhlcml0XG4gKiBAdmVyc2lvbiAyLjIuMlxuICogQGF1dGhvciBGaWxhdG92IERtaXRyeSA8ZGZpbGF0b3ZAeWFuZGV4LXRlYW0ucnU+XG4gKiBAZGVzY3JpcHRpb24gVGhpcyBtb2R1bGUgcHJvdmlkZXMgc29tZSBzeW50YXggc3VnYXIgZm9yIFwiY2xhc3NcIiBkZWNsYXJhdGlvbnMsIGNvbnN0cnVjdG9ycywgbWl4aW5zLCBcInN1cGVyXCIgY2FsbHMgYW5kIHN0YXRpYyBtZW1iZXJzLlxuICovXG5cbihmdW5jdGlvbihnbG9iYWwpIHtcblxudmFyIGhhc0ludHJvc3BlY3Rpb24gPSAoZnVuY3Rpb24oKXsnXyc7fSkudG9TdHJpbmcoKS5pbmRleE9mKCdfJykgPiAtMSxcbiAgICBlbXB0eUJhc2UgPSBmdW5jdGlvbigpIHt9LFxuICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICBvYmpDcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uKHB0cCkge1xuICAgICAgICB2YXIgaW5oZXJpdGFuY2UgPSBmdW5jdGlvbigpIHt9O1xuICAgICAgICBpbmhlcml0YW5jZS5wcm90b3R5cGUgPSBwdHA7XG4gICAgICAgIHJldHVybiBuZXcgaW5oZXJpdGFuY2UoKTtcbiAgICB9LFxuICAgIG9iaktleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICBmb3IodmFyIGkgaW4gb2JqKSB7XG4gICAgICAgICAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkgJiYgcmVzLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKG8xLCBvMikge1xuICAgICAgICBmb3IodmFyIGkgaW4gbzIpIHtcbiAgICAgICAgICAgIGhhc093blByb3BlcnR5LmNhbGwobzIsIGkpICYmIChvMVtpXSA9IG8yW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvMTtcbiAgICB9LFxuICAgIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxcbiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIHRvU3RyLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9LFxuICAgIGlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIHRvU3RyLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgICB9LFxuICAgIG5vT3AgPSBmdW5jdGlvbigpIHt9LFxuICAgIG5lZWRDaGVja1Byb3BzID0gdHJ1ZSxcbiAgICB0ZXN0UHJvcE9iaiA9IHsgdG9TdHJpbmcgOiAnJyB9O1xuXG5mb3IodmFyIGkgaW4gdGVzdFByb3BPYmopIHsgLy8gZnVja2luZyBpZSBoYXNuJ3QgdG9TdHJpbmcsIHZhbHVlT2YgaW4gZm9yXG4gICAgdGVzdFByb3BPYmouaGFzT3duUHJvcGVydHkoaSkgJiYgKG5lZWRDaGVja1Byb3BzID0gZmFsc2UpO1xufVxuXG52YXIgc3BlY1Byb3BzID0gbmVlZENoZWNrUHJvcHM/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogbnVsbDtcblxuZnVuY3Rpb24gZ2V0UHJvcExpc3Qob2JqKSB7XG4gICAgdmFyIHJlcyA9IG9iaktleXMob2JqKTtcbiAgICBpZihuZWVkQ2hlY2tQcm9wcykge1xuICAgICAgICB2YXIgc3BlY1Byb3AsIGkgPSAwO1xuICAgICAgICB3aGlsZShzcGVjUHJvcCA9IHNwZWNQcm9wc1tpKytdKSB7XG4gICAgICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoc3BlY1Byb3ApICYmIHJlcy5wdXNoKHNwZWNQcm9wKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIG92ZXJyaWRlKGJhc2UsIHJlcywgYWRkKSB7XG4gICAgdmFyIGFkZExpc3QgPSBnZXRQcm9wTGlzdChhZGQpLFxuICAgICAgICBqID0gMCwgbGVuID0gYWRkTGlzdC5sZW5ndGgsXG4gICAgICAgIG5hbWUsIHByb3A7XG4gICAgd2hpbGUoaiA8IGxlbikge1xuICAgICAgICBpZigobmFtZSA9IGFkZExpc3RbaisrXSkgPT09ICdfX3NlbGYnKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwcm9wID0gYWRkW25hbWVdO1xuICAgICAgICBpZihpc0Z1bmN0aW9uKHByb3ApICYmXG4gICAgICAgICAgICAgICAgKCFoYXNJbnRyb3NwZWN0aW9uIHx8IHByb3AudG9TdHJpbmcoKS5pbmRleE9mKCcuX19iYXNlJykgPiAtMSkpIHtcbiAgICAgICAgICAgIHJlc1tuYW1lXSA9IChmdW5jdGlvbihuYW1lLCBwcm9wKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJhc2VNZXRob2QgPSBiYXNlW25hbWVdP1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVtuYW1lXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09PSAnX19jb25zdHJ1Y3Rvcic/IC8vIGNhc2Ugb2YgaW5oZXJpdGFuY2UgZnJvbSBwbGFuZSBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5fX3NlbGYuX19wYXJlbnQgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vT3A7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZVNhdmVkID0gdGhpcy5fX2Jhc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX19iYXNlID0gYmFzZU1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHByb3AuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2Jhc2UgPSBiYXNlU2F2ZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKG5hbWUsIHByb3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzW25hbWVdID0gcHJvcDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlNaXhpbnMobWl4aW5zLCByZXMpIHtcbiAgICB2YXIgaSA9IDEsIG1peGluO1xuICAgIHdoaWxlKG1peGluID0gbWl4aW5zW2krK10pIHtcbiAgICAgICAgcmVzP1xuICAgICAgICAgICAgaXNGdW5jdGlvbihtaXhpbik/XG4gICAgICAgICAgICAgICAgaW5oZXJpdC5zZWxmKHJlcywgbWl4aW4ucHJvdG90eXBlLCBtaXhpbikgOlxuICAgICAgICAgICAgICAgIGluaGVyaXQuc2VsZihyZXMsIG1peGluKSA6XG4gICAgICAgICAgICByZXMgPSBpc0Z1bmN0aW9uKG1peGluKT9cbiAgICAgICAgICAgICAgICBpbmhlcml0KG1peGluc1swXSwgbWl4aW4ucHJvdG90eXBlLCBtaXhpbikgOlxuICAgICAgICAgICAgICAgIGluaGVyaXQobWl4aW5zWzBdLCBtaXhpbik7XG4gICAgfVxuICAgIHJldHVybiByZXMgfHwgbWl4aW5zWzBdO1xufVxuXG4vKipcbiogQ3JlYXRlcyBjbGFzc1xuKiBAZXhwb3J0c1xuKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBbYmFzZUNsYXNzfGJhc2VDbGFzc0FuZE1peGluc10gY2xhc3MgKG9yIGNsYXNzIGFuZCBtaXhpbnMpIHRvIGluaGVyaXQgZnJvbVxuKiBAcGFyYW0ge09iamVjdH0gcHJvdG90eXBlRmllbGRzXG4qIEBwYXJhbSB7T2JqZWN0fSBbc3RhdGljRmllbGRzXVxuKiBAcmV0dXJucyB7RnVuY3Rpb259IGNsYXNzXG4qL1xuZnVuY3Rpb24gaW5oZXJpdCgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgd2l0aE1peGlucyA9IGlzQXJyYXkoYXJnc1swXSksXG4gICAgICAgIGhhc0Jhc2UgPSB3aXRoTWl4aW5zIHx8IGlzRnVuY3Rpb24oYXJnc1swXSksXG4gICAgICAgIGJhc2UgPSBoYXNCYXNlPyB3aXRoTWl4aW5zPyBhcHBseU1peGlucyhhcmdzWzBdKSA6IGFyZ3NbMF0gOiBlbXB0eUJhc2UsXG4gICAgICAgIHByb3BzID0gYXJnc1toYXNCYXNlPyAxIDogMF0gfHwge30sXG4gICAgICAgIHN0YXRpY1Byb3BzID0gYXJnc1toYXNCYXNlPyAyIDogMV0sXG4gICAgICAgIHJlcyA9IHByb3BzLl9fY29uc3RydWN0b3IgfHwgKGhhc0Jhc2UgJiYgYmFzZS5wcm90b3R5cGUuX19jb25zdHJ1Y3Rvcik/XG4gICAgICAgICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fX2NvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9IDpcbiAgICAgICAgICAgIGhhc0Jhc2U/XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfSA6XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7fTtcblxuICAgIGlmKCFoYXNCYXNlKSB7XG4gICAgICAgIHJlcy5wcm90b3R5cGUgPSBwcm9wcztcbiAgICAgICAgcmVzLnByb3RvdHlwZS5fX3NlbGYgPSByZXMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gcmVzO1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHJlcywgc3RhdGljUHJvcHMpO1xuICAgIH1cblxuICAgIGV4dGVuZChyZXMsIGJhc2UpO1xuXG4gICAgcmVzLl9fcGFyZW50ID0gYmFzZTtcblxuICAgIHZhciBiYXNlUHRwID0gYmFzZS5wcm90b3R5cGUsXG4gICAgICAgIHJlc1B0cCA9IHJlcy5wcm90b3R5cGUgPSBvYmpDcmVhdGUoYmFzZVB0cCk7XG5cbiAgICByZXNQdHAuX19zZWxmID0gcmVzUHRwLmNvbnN0cnVjdG9yID0gcmVzO1xuXG4gICAgcHJvcHMgJiYgb3ZlcnJpZGUoYmFzZVB0cCwgcmVzUHRwLCBwcm9wcyk7XG4gICAgc3RhdGljUHJvcHMgJiYgb3ZlcnJpZGUoYmFzZSwgcmVzLCBzdGF0aWNQcm9wcyk7XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5pbmhlcml0LnNlbGYgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgd2l0aE1peGlucyA9IGlzQXJyYXkoYXJnc1swXSksXG4gICAgICAgIGJhc2UgPSB3aXRoTWl4aW5zPyBhcHBseU1peGlucyhhcmdzWzBdLCBhcmdzWzBdWzBdKSA6IGFyZ3NbMF0sXG4gICAgICAgIHByb3BzID0gYXJnc1sxXSxcbiAgICAgICAgc3RhdGljUHJvcHMgPSBhcmdzWzJdLFxuICAgICAgICBiYXNlUHRwID0gYmFzZS5wcm90b3R5cGU7XG5cbiAgICBwcm9wcyAmJiBvdmVycmlkZShiYXNlUHRwLCBiYXNlUHRwLCBwcm9wcyk7XG4gICAgc3RhdGljUHJvcHMgJiYgb3ZlcnJpZGUoYmFzZSwgYmFzZSwgc3RhdGljUHJvcHMpO1xuXG4gICAgcmV0dXJuIGJhc2U7XG59O1xuXG52YXIgZGVmaW5lQXNHbG9iYWwgPSB0cnVlO1xuaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBpbmhlcml0O1xuICAgIGRlZmluZUFzR2xvYmFsID0gZmFsc2U7XG59XG5cbmlmKHR5cGVvZiBtb2R1bGVzID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZXMuZGVmaW5lKCdpbmhlcml0JywgZnVuY3Rpb24ocHJvdmlkZSkge1xuICAgICAgICBwcm92aWRlKGluaGVyaXQpO1xuICAgIH0pO1xuICAgIGRlZmluZUFzR2xvYmFsID0gZmFsc2U7XG59XG5cbmlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gaW5oZXJpdDtcbiAgICB9KTtcbiAgICBkZWZpbmVBc0dsb2JhbCA9IGZhbHNlO1xufVxuXG5kZWZpbmVBc0dsb2JhbCAmJiAoZ2xvYmFsLmluaGVyaXQgPSBpbmhlcml0KTtcblxufSkodGhpcyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCIvKlxuICogJElkOiBiYXNlNjQuanMsdiAyLjE1IDIwMTQvMDQvMDUgMTI6NTg6NTcgZGFua29nYWkgRXhwIGRhbmtvZ2FpICRcbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlXG4gKlxuICogIFJlZmVyZW5jZXM6XG4gKiAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NFxuICovXG5cbihmdW5jdGlvbihnbG9iYWwpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gZXhpc3RpbmcgdmVyc2lvbiBmb3Igbm9Db25mbGljdCgpXG4gICAgdmFyIF9CYXNlNjQgPSBnbG9iYWwuQmFzZTY0O1xuICAgIHZhciB2ZXJzaW9uID0gXCIyLjEuOVwiO1xuICAgIC8vIGlmIG5vZGUuanMsIHdlIHVzZSBCdWZmZXJcbiAgICB2YXIgYnVmZmVyO1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgfVxuICAgIC8vIGNvbnN0YW50c1xuICAgIHZhciBiNjRjaGFyc1xuICAgICAgICA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcbiAgICB2YXIgYjY0dGFiID0gZnVuY3Rpb24oYmluKSB7XG4gICAgICAgIHZhciB0ID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYmluLmxlbmd0aDsgaSA8IGw7IGkrKykgdFtiaW4uY2hhckF0KGkpXSA9IGk7XG4gICAgICAgIHJldHVybiB0O1xuICAgIH0oYjY0Y2hhcnMpO1xuICAgIHZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICAgIC8vIGVuY29kZXIgc3R1ZmZcbiAgICB2YXIgY2JfdXRvYiA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgaWYgKGMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdmFyIGNjID0gYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgcmV0dXJuIGNjIDwgMHg4MCA/IGNcbiAgICAgICAgICAgICAgICA6IGNjIDwgMHg4MDAgPyAoZnJvbUNoYXJDb2RlKDB4YzAgfCAoY2MgPj4+IDYpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKGNjICYgMHgzZikpKVxuICAgICAgICAgICAgICAgIDogKGZyb21DaGFyQ29kZSgweGUwIHwgKChjYyA+Pj4gMTIpICYgMHgwZikpXG4gICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICgoY2MgPj4+ICA2KSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoIGNjICAgICAgICAgJiAweDNmKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNjID0gMHgxMDAwMFxuICAgICAgICAgICAgICAgICsgKGMuY2hhckNvZGVBdCgwKSAtIDB4RDgwMCkgKiAweDQwMFxuICAgICAgICAgICAgICAgICsgKGMuY2hhckNvZGVBdCgxKSAtIDB4REMwMCk7XG4gICAgICAgICAgICByZXR1cm4gKGZyb21DaGFyQ29kZSgweGYwIHwgKChjYyA+Pj4gMTgpICYgMHgwNykpXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoKGNjID4+PiAxMikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICgoY2MgPj4+ICA2KSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKCBjYyAgICAgICAgICYgMHgzZikpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIHJlX3V0b2IgPSAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGRl18W15cXHgwMC1cXHg3Rl0vZztcbiAgICB2YXIgdXRvYiA9IGZ1bmN0aW9uKHUpIHtcbiAgICAgICAgcmV0dXJuIHUucmVwbGFjZShyZV91dG9iLCBjYl91dG9iKTtcbiAgICB9O1xuICAgIHZhciBjYl9lbmNvZGUgPSBmdW5jdGlvbihjY2MpIHtcbiAgICAgICAgdmFyIHBhZGxlbiA9IFswLCAyLCAxXVtjY2MubGVuZ3RoICUgM10sXG4gICAgICAgIG9yZCA9IGNjYy5jaGFyQ29kZUF0KDApIDw8IDE2XG4gICAgICAgICAgICB8ICgoY2NjLmxlbmd0aCA+IDEgPyBjY2MuY2hhckNvZGVBdCgxKSA6IDApIDw8IDgpXG4gICAgICAgICAgICB8ICgoY2NjLmxlbmd0aCA+IDIgPyBjY2MuY2hhckNvZGVBdCgyKSA6IDApKSxcbiAgICAgICAgY2hhcnMgPSBbXG4gICAgICAgICAgICBiNjRjaGFycy5jaGFyQXQoIG9yZCA+Pj4gMTgpLFxuICAgICAgICAgICAgYjY0Y2hhcnMuY2hhckF0KChvcmQgPj4+IDEyKSAmIDYzKSxcbiAgICAgICAgICAgIHBhZGxlbiA+PSAyID8gJz0nIDogYjY0Y2hhcnMuY2hhckF0KChvcmQgPj4+IDYpICYgNjMpLFxuICAgICAgICAgICAgcGFkbGVuID49IDEgPyAnPScgOiBiNjRjaGFycy5jaGFyQXQob3JkICYgNjMpXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBjaGFycy5qb2luKCcnKTtcbiAgICB9O1xuICAgIHZhciBidG9hID0gZ2xvYmFsLmJ0b2EgPyBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwuYnRvYShiKTtcbiAgICB9IDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gYi5yZXBsYWNlKC9bXFxzXFxTXXsxLDN9L2csIGNiX2VuY29kZSk7XG4gICAgfTtcbiAgICB2YXIgX2VuY29kZSA9IGJ1ZmZlciA/IGZ1bmN0aW9uICh1KSB7XG4gICAgICAgIHJldHVybiAodS5jb25zdHJ1Y3RvciA9PT0gYnVmZmVyLmNvbnN0cnVjdG9yID8gdSA6IG5ldyBidWZmZXIodSkpXG4gICAgICAgIC50b1N0cmluZygnYmFzZTY0JylcbiAgICB9XG4gICAgOiBmdW5jdGlvbiAodSkgeyByZXR1cm4gYnRvYSh1dG9iKHUpKSB9XG4gICAgO1xuICAgIHZhciBlbmNvZGUgPSBmdW5jdGlvbih1LCB1cmlzYWZlKSB7XG4gICAgICAgIHJldHVybiAhdXJpc2FmZVxuICAgICAgICAgICAgPyBfZW5jb2RlKFN0cmluZyh1KSlcbiAgICAgICAgICAgIDogX2VuY29kZShTdHJpbmcodSkpLnJlcGxhY2UoL1srXFwvXS9nLCBmdW5jdGlvbihtMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtMCA9PSAnKycgPyAnLScgOiAnXyc7XG4gICAgICAgICAgICB9KS5yZXBsYWNlKC89L2csICcnKTtcbiAgICB9O1xuICAgIHZhciBlbmNvZGVVUkkgPSBmdW5jdGlvbih1KSB7IHJldHVybiBlbmNvZGUodSwgdHJ1ZSkgfTtcbiAgICAvLyBkZWNvZGVyIHN0dWZmXG4gICAgdmFyIHJlX2J0b3UgPSBuZXcgUmVnRXhwKFtcbiAgICAgICAgJ1tcXHhDMC1cXHhERl1bXFx4ODAtXFx4QkZdJyxcbiAgICAgICAgJ1tcXHhFMC1cXHhFRl1bXFx4ODAtXFx4QkZdezJ9JyxcbiAgICAgICAgJ1tcXHhGMC1cXHhGN11bXFx4ODAtXFx4QkZdezN9J1xuICAgIF0uam9pbignfCcpLCAnZycpO1xuICAgIHZhciBjYl9idG91ID0gZnVuY3Rpb24oY2NjYykge1xuICAgICAgICBzd2l0Y2goY2NjYy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdmFyIGNwID0gKCgweDA3ICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxOClcbiAgICAgICAgICAgICAgICB8ICAgICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgMTIpXG4gICAgICAgICAgICAgICAgfCAgICAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpIDw8ICA2KVxuICAgICAgICAgICAgICAgIHwgICAgICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDMpKSxcbiAgICAgICAgICAgIG9mZnNldCA9IGNwIC0gMHgxMDAwMDtcbiAgICAgICAgICAgIHJldHVybiAoZnJvbUNoYXJDb2RlKChvZmZzZXQgID4+PiAxMCkgKyAweEQ4MDApXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKChvZmZzZXQgJiAweDNGRikgKyAweERDMDApKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIGZyb21DaGFyQ29kZShcbiAgICAgICAgICAgICAgICAoKDB4MGYgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDEyKVxuICAgICAgICAgICAgICAgICAgICB8ICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgNilcbiAgICAgICAgICAgICAgICAgICAgfCAgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpXG4gICAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICBmcm9tQ2hhckNvZGUoXG4gICAgICAgICAgICAgICAgKCgweDFmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCA2KVxuICAgICAgICAgICAgICAgICAgICB8ICAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBidG91ID0gZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gYi5yZXBsYWNlKHJlX2J0b3UsIGNiX2J0b3UpO1xuICAgIH07XG4gICAgdmFyIGNiX2RlY29kZSA9IGZ1bmN0aW9uKGNjY2MpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNjY2MubGVuZ3RoLFxuICAgICAgICBwYWRsZW4gPSBsZW4gJSA0LFxuICAgICAgICBuID0gKGxlbiA+IDAgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMCldIDw8IDE4IDogMClcbiAgICAgICAgICAgIHwgKGxlbiA+IDEgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMSldIDw8IDEyIDogMClcbiAgICAgICAgICAgIHwgKGxlbiA+IDIgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMildIDw8ICA2IDogMClcbiAgICAgICAgICAgIHwgKGxlbiA+IDMgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMyldICAgICAgIDogMCksXG4gICAgICAgIGNoYXJzID0gW1xuICAgICAgICAgICAgZnJvbUNoYXJDb2RlKCBuID4+PiAxNiksXG4gICAgICAgICAgICBmcm9tQ2hhckNvZGUoKG4gPj4+ICA4KSAmIDB4ZmYpLFxuICAgICAgICAgICAgZnJvbUNoYXJDb2RlKCBuICAgICAgICAgJiAweGZmKVxuICAgICAgICBdO1xuICAgICAgICBjaGFycy5sZW5ndGggLT0gWzAsIDAsIDIsIDFdW3BhZGxlbl07XG4gICAgICAgIHJldHVybiBjaGFycy5qb2luKCcnKTtcbiAgICB9O1xuICAgIHZhciBhdG9iID0gZ2xvYmFsLmF0b2IgPyBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwuYXRvYihhKTtcbiAgICB9IDogZnVuY3Rpb24oYSl7XG4gICAgICAgIHJldHVybiBhLnJlcGxhY2UoL1tcXHNcXFNdezEsNH0vZywgY2JfZGVjb2RlKTtcbiAgICB9O1xuICAgIHZhciBfZGVjb2RlID0gYnVmZmVyID8gZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gKGEuY29uc3RydWN0b3IgPT09IGJ1ZmZlci5jb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgID8gYSA6IG5ldyBidWZmZXIoYSwgJ2Jhc2U2NCcpKS50b1N0cmluZygpO1xuICAgIH1cbiAgICA6IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGJ0b3UoYXRvYihhKSkgfTtcbiAgICB2YXIgZGVjb2RlID0gZnVuY3Rpb24oYSl7XG4gICAgICAgIHJldHVybiBfZGVjb2RlKFxuICAgICAgICAgICAgU3RyaW5nKGEpLnJlcGxhY2UoL1stX10vZywgZnVuY3Rpb24obTApIHsgcmV0dXJuIG0wID09ICctJyA/ICcrJyA6ICcvJyB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXkEtWmEtejAtOVxcK1xcL10vZywgJycpXG4gICAgICAgICk7XG4gICAgfTtcbiAgICB2YXIgbm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgQmFzZTY0ID0gZ2xvYmFsLkJhc2U2NDtcbiAgICAgICAgZ2xvYmFsLkJhc2U2NCA9IF9CYXNlNjQ7XG4gICAgICAgIHJldHVybiBCYXNlNjQ7XG4gICAgfTtcbiAgICAvLyBleHBvcnQgQmFzZTY0XG4gICAgZ2xvYmFsLkJhc2U2NCA9IHtcbiAgICAgICAgVkVSU0lPTjogdmVyc2lvbixcbiAgICAgICAgYXRvYjogYXRvYixcbiAgICAgICAgYnRvYTogYnRvYSxcbiAgICAgICAgZnJvbUJhc2U2NDogZGVjb2RlLFxuICAgICAgICB0b0Jhc2U2NDogZW5jb2RlLFxuICAgICAgICB1dG9iOiB1dG9iLFxuICAgICAgICBlbmNvZGU6IGVuY29kZSxcbiAgICAgICAgZW5jb2RlVVJJOiBlbmNvZGVVUkksXG4gICAgICAgIGJ0b3U6IGJ0b3UsXG4gICAgICAgIGRlY29kZTogZGVjb2RlLFxuICAgICAgICBub0NvbmZsaWN0OiBub0NvbmZsaWN0XG4gICAgfTtcbiAgICAvLyBpZiBFUzUgaXMgYXZhaWxhYmxlLCBtYWtlIEJhc2U2NC5leHRlbmRTdHJpbmcoKSBhdmFpbGFibGVcbiAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbm9FbnVtID0gZnVuY3Rpb24odil7XG4gICAgICAgICAgICByZXR1cm4ge3ZhbHVlOnYsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfTtcbiAgICAgICAgfTtcbiAgICAgICAgZ2xvYmFsLkJhc2U2NC5leHRlbmRTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgU3RyaW5nLnByb3RvdHlwZSwgJ2Zyb21CYXNlNjQnLCBub0VudW0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlKHRoaXMpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFN0cmluZy5wcm90b3R5cGUsICd0b0Jhc2U2NCcsIG5vRW51bShmdW5jdGlvbiAodXJpc2FmZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlKHRoaXMsIHVyaXNhZmUpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFN0cmluZy5wcm90b3R5cGUsICd0b0Jhc2U2NFVSSScsIG5vRW51bShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGUodGhpcywgdHJ1ZSlcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIHRoYXQncyBpdCFcbiAgICBpZiAoZ2xvYmFsWydNZXRlb3InXSkge1xuICAgICAgIEJhc2U2NCA9IGdsb2JhbC5CYXNlNjQ7IC8vIGZvciBub3JtYWwgZXhwb3J0IGluIE1ldGVvci5qc1xuICAgIH1cbn0pKHRoaXMpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB5YW1sID0gcmVxdWlyZSgnLi9saWIvanMteWFtbC5qcycpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0geWFtbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG52YXIgbG9hZGVyID0gcmVxdWlyZSgnLi9qcy15YW1sL2xvYWRlcicpO1xudmFyIGR1bXBlciA9IHJlcXVpcmUoJy4vanMteWFtbC9kdW1wZXInKTtcblxuXG5mdW5jdGlvbiBkZXByZWNhdGVkKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uICcgKyBuYW1lICsgJyBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZC4nKTtcbiAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cy5UeXBlICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3R5cGUnKTtcbm1vZHVsZS5leHBvcnRzLlNjaGVtYSAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hJyk7XG5tb2R1bGUuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUEgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZScpO1xubW9kdWxlLmV4cG9ydHMuSlNPTl9TQ0hFTUEgICAgICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvanNvbicpO1xubW9kdWxlLmV4cG9ydHMuQ09SRV9TQ0hFTUEgICAgICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvY29yZScpO1xubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5ERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwnKTtcbm1vZHVsZS5leHBvcnRzLmxvYWQgICAgICAgICAgICAgICAgPSBsb2FkZXIubG9hZDtcbm1vZHVsZS5leHBvcnRzLmxvYWRBbGwgICAgICAgICAgICAgPSBsb2FkZXIubG9hZEFsbDtcbm1vZHVsZS5leHBvcnRzLnNhZmVMb2FkICAgICAgICAgICAgPSBsb2FkZXIuc2FmZUxvYWQ7XG5tb2R1bGUuZXhwb3J0cy5zYWZlTG9hZEFsbCAgICAgICAgID0gbG9hZGVyLnNhZmVMb2FkQWxsO1xubW9kdWxlLmV4cG9ydHMuZHVtcCAgICAgICAgICAgICAgICA9IGR1bXBlci5kdW1wO1xubW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgICAgICAgICAgICA9IGR1bXBlci5zYWZlRHVtcDtcbm1vZHVsZS5leHBvcnRzLllBTUxFeGNlcHRpb24gICAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvZXhjZXB0aW9uJyk7XG5cbi8vIERlcHJlY2F0ZWQgc2NoZW1hIG5hbWVzIGZyb20gSlMtWUFNTCAyLjAueFxubW9kdWxlLmV4cG9ydHMuTUlOSU1BTF9TQ0hFTUEgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5TQUZFX1NDSEVNQSAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5ERUZBVUxUX1NDSEVNQSA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsJyk7XG5cbi8vIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGZyb20gSlMtWUFNTCAxLngueFxubW9kdWxlLmV4cG9ydHMuc2NhbiAgICAgICAgICAgPSBkZXByZWNhdGVkKCdzY2FuJyk7XG5tb2R1bGUuZXhwb3J0cy5wYXJzZSAgICAgICAgICA9IGRlcHJlY2F0ZWQoJ3BhcnNlJyk7XG5tb2R1bGUuZXhwb3J0cy5jb21wb3NlICAgICAgICA9IGRlcHJlY2F0ZWQoJ2NvbXBvc2UnKTtcbm1vZHVsZS5leHBvcnRzLmFkZENvbnN0cnVjdG9yID0gZGVwcmVjYXRlZCgnYWRkQ29uc3RydWN0b3InKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG5mdW5jdGlvbiBpc05vdGhpbmcoc3ViamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBzdWJqZWN0ID09PSAndW5kZWZpbmVkJykgfHwgKG51bGwgPT09IHN1YmplY3QpO1xufVxuXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3ViamVjdCA9PT0gJ29iamVjdCcpICYmIChudWxsICE9PSBzdWJqZWN0KTtcbn1cblxuXG5mdW5jdGlvbiB0b0FycmF5KHNlcXVlbmNlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNlcXVlbmNlKSkge1xuICAgIHJldHVybiBzZXF1ZW5jZTtcbiAgfSBlbHNlIGlmIChpc05vdGhpbmcoc2VxdWVuY2UpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbIHNlcXVlbmNlIF07XG59XG5cblxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBrZXksIHNvdXJjZUtleXM7XG5cbiAgaWYgKHNvdXJjZSkge1xuICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxuZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgY291bnQpIHtcbiAgdmFyIHJlc3VsdCA9ICcnLCBjeWNsZTtcblxuICBmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb3VudDsgY3ljbGUgKz0gMSkge1xuICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGlzTmVnYXRpdmVaZXJvKG51bWJlcikge1xuICByZXR1cm4gKDAgPT09IG51bWJlcikgJiYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gMSAvIG51bWJlcik7XG59XG5cblxubW9kdWxlLmV4cG9ydHMuaXNOb3RoaW5nICAgICAgPSBpc05vdGhpbmc7XG5tb2R1bGUuZXhwb3J0cy5pc09iamVjdCAgICAgICA9IGlzT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMudG9BcnJheSAgICAgICAgPSB0b0FycmF5O1xubW9kdWxlLmV4cG9ydHMucmVwZWF0ICAgICAgICAgPSByZXBlYXQ7XG5tb2R1bGUuZXhwb3J0cy5pc05lZ2F0aXZlWmVybyA9IGlzTmVnYXRpdmVaZXJvO1xubW9kdWxlLmV4cG9ydHMuZXh0ZW5kICAgICAgICAgPSBleHRlbmQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUqL1xuXG52YXIgY29tbW9uICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgWUFNTEV4Y2VwdGlvbiAgICAgICA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG52YXIgREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmUoJy4vc2NoZW1hL2RlZmF1bHRfZnVsbCcpO1xudmFyIERFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlKCcuL3NjaGVtYS9kZWZhdWx0X3NhZmUnKTtcblxudmFyIF90b1N0cmluZyAgICAgICA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIENIQVJfVEFCICAgICAgICAgICAgICAgICAgPSAweDA5OyAvKiBUYWIgKi9cbnZhciBDSEFSX0xJTkVfRkVFRCAgICAgICAgICAgID0gMHgwQTsgLyogTEYgKi9cbnZhciBDSEFSX0NBUlJJQUdFX1JFVFVSTiAgICAgID0gMHgwRDsgLyogQ1IgKi9cbnZhciBDSEFSX1NQQUNFICAgICAgICAgICAgICAgID0gMHgyMDsgLyogU3BhY2UgKi9cbnZhciBDSEFSX0VYQ0xBTUFUSU9OICAgICAgICAgID0gMHgyMTsgLyogISAqL1xudmFyIENIQVJfRE9VQkxFX1FVT1RFICAgICAgICAgPSAweDIyOyAvKiBcIiAqL1xudmFyIENIQVJfU0hBUlAgICAgICAgICAgICAgICAgPSAweDIzOyAvKiAjICovXG52YXIgQ0hBUl9QRVJDRU5UICAgICAgICAgICAgICA9IDB4MjU7IC8qICUgKi9cbnZhciBDSEFSX0FNUEVSU0FORCAgICAgICAgICAgID0gMHgyNjsgLyogJiAqL1xudmFyIENIQVJfU0lOR0xFX1FVT1RFICAgICAgICAgPSAweDI3OyAvKiAnICovXG52YXIgQ0hBUl9BU1RFUklTSyAgICAgICAgICAgICA9IDB4MkE7IC8qICogKi9cbnZhciBDSEFSX0NPTU1BICAgICAgICAgICAgICAgID0gMHgyQzsgLyogLCAqL1xudmFyIENIQVJfTUlOVVMgICAgICAgICAgICAgICAgPSAweDJEOyAvKiAtICovXG52YXIgQ0hBUl9DT0xPTiAgICAgICAgICAgICAgICA9IDB4M0E7IC8qIDogKi9cbnZhciBDSEFSX0dSRUFURVJfVEhBTiAgICAgICAgID0gMHgzRTsgLyogPiAqL1xudmFyIENIQVJfUVVFU1RJT04gICAgICAgICAgICAgPSAweDNGOyAvKiA/ICovXG52YXIgQ0hBUl9DT01NRVJDSUFMX0FUICAgICAgICA9IDB4NDA7IC8qIEAgKi9cbnZhciBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgID0gMHg1QjsgLyogWyAqL1xudmFyIENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgPSAweDVEOyAvKiBdICovXG52YXIgQ0hBUl9HUkFWRV9BQ0NFTlQgICAgICAgICA9IDB4NjA7IC8qIGAgKi9cbnZhciBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCAgID0gMHg3QjsgLyogeyAqL1xudmFyIENIQVJfVkVSVElDQUxfTElORSAgICAgICAgPSAweDdDOyAvKiB8ICovXG52YXIgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICA9IDB4N0Q7IC8qIH0gKi9cblxudmFyIEVTQ0FQRV9TRVFVRU5DRVMgPSB7fTtcblxuRVNDQVBFX1NFUVVFTkNFU1sweDAwXSAgID0gJ1xcXFwwJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwN10gICA9ICdcXFxcYSc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MDhdICAgPSAnXFxcXGInO1xuRVNDQVBFX1NFUVVFTkNFU1sweDA5XSAgID0gJ1xcXFx0JztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwQV0gICA9ICdcXFxcbic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MEJdICAgPSAnXFxcXHYnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDBDXSAgID0gJ1xcXFxmJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwRF0gICA9ICdcXFxccic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MUJdICAgPSAnXFxcXGUnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIyXSAgID0gJ1xcXFxcIic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4NUNdICAgPSAnXFxcXFxcXFwnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDg1XSAgID0gJ1xcXFxOJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHhBMF0gICA9ICdcXFxcXyc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MjAyOF0gPSAnXFxcXEwnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIwMjldID0gJ1xcXFxQJztcblxudmFyIERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYID0gW1xuICAneScsICdZJywgJ3llcycsICdZZXMnLCAnWUVTJywgJ29uJywgJ09uJywgJ09OJyxcbiAgJ24nLCAnTicsICdubycsICdObycsICdOTycsICdvZmYnLCAnT2ZmJywgJ09GRidcbl07XG5cbmZ1bmN0aW9uIGNvbXBpbGVTdHlsZU1hcChzY2hlbWEsIG1hcCkge1xuICB2YXIgcmVzdWx0LCBrZXlzLCBpbmRleCwgbGVuZ3RoLCB0YWcsIHN0eWxlLCB0eXBlO1xuXG4gIGlmIChudWxsID09PSBtYXApIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXN1bHQgPSB7fTtcbiAga2V5cyA9IE9iamVjdC5rZXlzKG1hcCk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHRhZyA9IGtleXNbaW5kZXhdO1xuICAgIHN0eWxlID0gU3RyaW5nKG1hcFt0YWddKTtcblxuICAgIGlmICgnISEnID09PSB0YWcuc2xpY2UoMCwgMikpIHtcbiAgICAgIHRhZyA9ICd0YWc6eWFtbC5vcmcsMjAwMjonICsgdGFnLnNsaWNlKDIpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEuY29tcGlsZWRUeXBlTWFwW3RhZ107XG5cbiAgICBpZiAodHlwZSAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlLnN0eWxlQWxpYXNlcywgc3R5bGUpKSB7XG4gICAgICBzdHlsZSA9IHR5cGUuc3R5bGVBbGlhc2VzW3N0eWxlXTtcbiAgICB9XG5cbiAgICByZXN1bHRbdGFnXSA9IHN0eWxlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlSGV4KGNoYXJhY3Rlcikge1xuICB2YXIgc3RyaW5nLCBoYW5kbGUsIGxlbmd0aDtcblxuICBzdHJpbmcgPSBjaGFyYWN0ZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKGNoYXJhY3RlciA8PSAweEZGKSB7XG4gICAgaGFuZGxlID0gJ3gnO1xuICAgIGxlbmd0aCA9IDI7XG4gIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDB4RkZGRikge1xuICAgIGhhbmRsZSA9ICd1JztcbiAgICBsZW5ndGggPSA0O1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSAweEZGRkZGRkZGKSB7XG4gICAgaGFuZGxlID0gJ1UnO1xuICAgIGxlbmd0aCA9IDg7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ2NvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkYnKTtcbiAgfVxuXG4gIHJldHVybiAnXFxcXCcgKyBoYW5kbGUgKyBjb21tb24ucmVwZWF0KCcwJywgbGVuZ3RoIC0gc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIFN0YXRlKG9wdGlvbnMpIHtcbiAgdGhpcy5zY2hlbWEgICAgICA9IG9wdGlvbnNbJ3NjaGVtYSddIHx8IERFRkFVTFRfRlVMTF9TQ0hFTUE7XG4gIHRoaXMuaW5kZW50ICAgICAgPSBNYXRoLm1heCgxLCAob3B0aW9uc1snaW5kZW50J10gfHwgMikpO1xuICB0aGlzLnNraXBJbnZhbGlkID0gb3B0aW9uc1snc2tpcEludmFsaWQnXSB8fCBmYWxzZTtcbiAgdGhpcy5mbG93TGV2ZWwgICA9IChjb21tb24uaXNOb3RoaW5nKG9wdGlvbnNbJ2Zsb3dMZXZlbCddKSA/IC0xIDogb3B0aW9uc1snZmxvd0xldmVsJ10pO1xuICB0aGlzLnN0eWxlTWFwICAgID0gY29tcGlsZVN0eWxlTWFwKHRoaXMuc2NoZW1hLCBvcHRpb25zWydzdHlsZXMnXSB8fCBudWxsKTtcbiAgdGhpcy5zb3J0S2V5cyAgICA9IG9wdGlvbnNbJ3NvcnRLZXlzJ10gfHwgZmFsc2U7XG4gIHRoaXMubGluZVdpZHRoICAgID0gb3B0aW9uc1snbGluZVdpZHRoJ10gfHwgODA7XG5cbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy5leHBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdDtcblxuICB0aGlzLnRhZyA9IG51bGw7XG4gIHRoaXMucmVzdWx0ID0gJyc7XG5cbiAgdGhpcy5kdXBsaWNhdGVzID0gW107XG4gIHRoaXMudXNlZER1cGxpY2F0ZXMgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbmRlbnRTdHJpbmcoc3RyaW5nLCBzcGFjZXMpIHtcbiAgdmFyIGluZCA9IGNvbW1vbi5yZXBlYXQoJyAnLCBzcGFjZXMpLFxuICAgICAgcG9zaXRpb24gPSAwLFxuICAgICAgbmV4dCA9IC0xLFxuICAgICAgcmVzdWx0ID0gJycsXG4gICAgICBsaW5lLFxuICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICBuZXh0ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIHBvc2l0aW9uKTtcbiAgICBpZiAobmV4dCA9PT0gLTEpIHtcbiAgICAgIGxpbmUgPSBzdHJpbmcuc2xpY2UocG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gPSBsZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmUgPSBzdHJpbmcuc2xpY2UocG9zaXRpb24sIG5leHQgKyAxKTtcbiAgICAgIHBvc2l0aW9uID0gbmV4dCArIDE7XG4gICAgfVxuICAgIGlmIChsaW5lLmxlbmd0aCAmJiBsaW5lICE9PSAnXFxuJykge1xuICAgICAgcmVzdWx0ICs9IGluZDtcbiAgICB9XG4gICAgcmVzdWx0ICs9IGxpbmU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCkge1xuICByZXR1cm4gJ1xcbicgKyBjb21tb24ucmVwZWF0KCcgJywgc3RhdGUuaW5kZW50ICogbGV2ZWwpO1xufVxuXG5mdW5jdGlvbiB0ZXN0SW1wbGljaXRSZXNvbHZpbmcoc3RhdGUsIHN0cikge1xuICB2YXIgaW5kZXgsIGxlbmd0aCwgdHlwZTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gc3RhdGUuaW1wbGljaXRUeXBlcy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdHlwZSA9IHN0YXRlLmltcGxpY2l0VHlwZXNbaW5kZXhdO1xuXG4gICAgaWYgKHR5cGUucmVzb2x2ZShzdHIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIFN0cmluZ0J1aWxkZXIoc291cmNlKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnJlc3VsdCA9ICcnO1xuICB0aGlzLmNoZWNrcG9pbnQgPSAwO1xufVxuXG5TdHJpbmdCdWlsZGVyLnByb3RvdHlwZS50YWtlVXBUbyA9IGZ1bmN0aW9uIChwb3NpdGlvbikge1xuICB2YXIgZXI7XG5cbiAgaWYgKHBvc2l0aW9uIDwgdGhpcy5jaGVja3BvaW50KSB7XG4gICAgZXIgPSBuZXcgRXJyb3IoJ3Bvc2l0aW9uIHNob3VsZCBiZSA+IGNoZWNrcG9pbnQnKTtcbiAgICBlci5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIGVyLmNoZWNrcG9pbnQgPSB0aGlzLmNoZWNrcG9pbnQ7XG4gICAgdGhyb3cgZXI7XG4gIH1cblxuICB0aGlzLnJlc3VsdCArPSB0aGlzLnNvdXJjZS5zbGljZSh0aGlzLmNoZWNrcG9pbnQsIHBvc2l0aW9uKTtcbiAgdGhpcy5jaGVja3BvaW50ID0gcG9zaXRpb247XG4gIHJldHVybiB0aGlzO1xufTtcblxuU3RyaW5nQnVpbGRlci5wcm90b3R5cGUuZXNjYXBlQ2hhciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNoYXJhY3RlciwgZXNjO1xuXG4gIGNoYXJhY3RlciA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5jaGVja3BvaW50KTtcbiAgZXNjID0gRVNDQVBFX1NFUVVFTkNFU1tjaGFyYWN0ZXJdIHx8IGVuY29kZUhleChjaGFyYWN0ZXIpO1xuICB0aGlzLnJlc3VsdCArPSBlc2M7XG4gIHRoaXMuY2hlY2twb2ludCArPSAxO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuU3RyaW5nQnVpbGRlci5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5zb3VyY2UubGVuZ3RoID4gdGhpcy5jaGVja3BvaW50KSB7XG4gICAgdGhpcy50YWtlVXBUbyh0aGlzLnNvdXJjZS5sZW5ndGgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB3cml0ZVNjYWxhcihzdGF0ZSwgb2JqZWN0LCBsZXZlbCwgaXNrZXkpIHtcbiAgdmFyIHNpbXBsZSwgZmlyc3QsIHNwYWNlV3JhcCwgZm9sZGVkLCBsaXRlcmFsLCBzaW5nbGUsIGRvdWJsZSxcbiAgICAgIHNhd0xpbmVGZWVkLCBsaW5lUG9zaXRpb24sIGxvbmdlc3RMaW5lLCBpbmRlbnQsIG1heCwgY2hhcmFjdGVyLFxuICAgICAgcG9zaXRpb24sIGVzY2FwZVNlcSwgaGV4RXNjLCBwcmV2aW91cywgbGluZUxlbmd0aCwgbW9kaWZpZXIsXG4gICAgICB0cmFpbGluZ0xpbmVCcmVha3MsIHJlc3VsdDtcblxuICBpZiAoMCA9PT0gb2JqZWN0Lmxlbmd0aCkge1xuICAgIHN0YXRlLmR1bXAgPSBcIicnXCI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKC0xICE9PSBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWC5pbmRleE9mKG9iamVjdCkpIHtcbiAgICBzdGF0ZS5kdW1wID0gXCInXCIgKyBvYmplY3QgKyBcIidcIjtcbiAgICByZXR1cm47XG4gIH1cblxuICBzaW1wbGUgPSB0cnVlO1xuICBmaXJzdCA9IG9iamVjdC5sZW5ndGggPyBvYmplY3QuY2hhckNvZGVBdCgwKSA6IDA7XG4gIHNwYWNlV3JhcCA9IChDSEFSX1NQQUNFID09PSBmaXJzdCB8fFxuICAgICAgICAgICAgICAgQ0hBUl9TUEFDRSA9PT0gb2JqZWN0LmNoYXJDb2RlQXQob2JqZWN0Lmxlbmd0aCAtIDEpKTtcblxuICAvLyBTaW1wbGlmaWVkIGNoZWNrIGZvciByZXN0cmljdGVkIGZpcnN0IGNoYXJhY3RlcnNcbiAgLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjbnMtcGxhaW4tZmlyc3QlMjhjJTI5XG4gIGlmIChDSEFSX01JTlVTICAgICAgICAgPT09IGZpcnN0IHx8XG4gICAgICBDSEFSX1FVRVNUSU9OICAgICAgPT09IGZpcnN0IHx8XG4gICAgICBDSEFSX0NPTU1FUkNJQUxfQVQgPT09IGZpcnN0IHx8XG4gICAgICBDSEFSX0dSQVZFX0FDQ0VOVCAgPT09IGZpcnN0KSB7XG4gICAgc2ltcGxlID0gZmFsc2U7XG4gIH1cblxuICAvLyBjYW4gb25seSB1c2UgPiBhbmQgfCBpZiBub3Qgd3JhcHBlZCBpbiBzcGFjZXMgb3IgaXMgbm90IGEga2V5LlxuICBpZiAoc3BhY2VXcmFwKSB7XG4gICAgc2ltcGxlID0gZmFsc2U7XG4gICAgZm9sZGVkID0gZmFsc2U7XG4gICAgbGl0ZXJhbCA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGZvbGRlZCA9ICFpc2tleTtcbiAgICBsaXRlcmFsID0gIWlza2V5O1xuICB9XG5cbiAgc2luZ2xlID0gdHJ1ZTtcbiAgZG91YmxlID0gbmV3IFN0cmluZ0J1aWxkZXIob2JqZWN0KTtcblxuICBzYXdMaW5lRmVlZCA9IGZhbHNlO1xuICBsaW5lUG9zaXRpb24gPSAwO1xuICBsb25nZXN0TGluZSA9IDA7XG5cbiAgaW5kZW50ID0gc3RhdGUuaW5kZW50ICogbGV2ZWw7XG4gIG1heCA9IHN0YXRlLmxpbmVXaWR0aDtcbiAgaWYgKG1heCA9PT0gLTEpIHtcbiAgICAvLyBSZXBsYWNlIC0xIHdpdGggYmlnZ2VzdCBpbmdlZ2VyIG51bWJlciBhY2NvcmRpbmcgdG9cbiAgICAvLyBodHRwOi8vZWNtYTI2Mi01LmNvbS9FTFM1X0hUTUwuaHRtI1NlY3Rpb25fOC41XG4gICAgbWF4ID0gOTAwNzE5OTI1NDc0MDk5MTtcbiAgfVxuXG4gIGlmIChpbmRlbnQgPCA0MCkge1xuICAgIG1heCAtPSBpbmRlbnQ7XG4gIH0gZWxzZSB7XG4gICAgbWF4ID0gNDA7XG4gIH1cblxuICBmb3IgKHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBvYmplY3QubGVuZ3RoOyBwb3NpdGlvbisrKSB7XG4gICAgY2hhcmFjdGVyID0gb2JqZWN0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgIGlmIChzaW1wbGUpIHtcbiAgICAgIC8vIENoYXJhY3RlcnMgdGhhdCBjYW4gbmV2ZXIgYXBwZWFyIGluIHRoZSBzaW1wbGUgc2NhbGFyXG4gICAgICBpZiAoIXNpbXBsZUNoYXIoY2hhcmFjdGVyKSkge1xuICAgICAgICBzaW1wbGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFN0aWxsIHNpbXBsZS4gIElmIHdlIG1ha2UgaXQgYWxsIHRoZSB3YXkgdGhyb3VnaCBsaWtlXG4gICAgICAgIC8vIHRoaXMsIHRoZW4gd2UgY2FuIGp1c3QgZHVtcCB0aGUgc3RyaW5nIGFzLWlzLlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2luZ2xlICYmIGNoYXJhY3RlciA9PT0gQ0hBUl9TSU5HTEVfUVVPVEUpIHtcbiAgICAgIHNpbmdsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGVzY2FwZVNlcSA9IEVTQ0FQRV9TRVFVRU5DRVNbY2hhcmFjdGVyXTtcbiAgICBoZXhFc2MgPSBuZWVkc0hleEVzY2FwZShjaGFyYWN0ZXIpO1xuXG4gICAgaWYgKCFlc2NhcGVTZXEgJiYgIWhleEVzYykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJhY3RlciAhPT0gQ0hBUl9MSU5FX0ZFRUQgJiZcbiAgICAgICAgY2hhcmFjdGVyICE9PSBDSEFSX0RPVUJMRV9RVU9URSAmJlxuICAgICAgICBjaGFyYWN0ZXIgIT09IENIQVJfU0lOR0xFX1FVT1RFKSB7XG4gICAgICBmb2xkZWQgPSBmYWxzZTtcbiAgICAgIGxpdGVyYWwgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gQ0hBUl9MSU5FX0ZFRUQpIHtcbiAgICAgIHNhd0xpbmVGZWVkID0gdHJ1ZTtcbiAgICAgIHNpbmdsZSA9IGZhbHNlO1xuICAgICAgaWYgKHBvc2l0aW9uID4gMCkge1xuICAgICAgICBwcmV2aW91cyA9IG9iamVjdC5jaGFyQ29kZUF0KHBvc2l0aW9uIC0gMSk7XG4gICAgICAgIGlmIChwcmV2aW91cyA9PT0gQ0hBUl9TUEFDRSkge1xuICAgICAgICAgIGxpdGVyYWwgPSBmYWxzZTtcbiAgICAgICAgICBmb2xkZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvbGRlZCkge1xuICAgICAgICBsaW5lTGVuZ3RoID0gcG9zaXRpb24gLSBsaW5lUG9zaXRpb247XG4gICAgICAgIGxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICBpZiAobGluZUxlbmd0aCA+IGxvbmdlc3RMaW5lKSB7XG4gICAgICAgICAgbG9uZ2VzdExpbmUgPSBsaW5lTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYXJhY3RlciAhPT0gQ0hBUl9ET1VCTEVfUVVPVEUpIHtcbiAgICAgIHNpbmdsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGRvdWJsZS50YWtlVXBUbyhwb3NpdGlvbik7XG4gICAgZG91YmxlLmVzY2FwZUNoYXIoKTtcbiAgfVxuXG4gIGlmIChzaW1wbGUgJiYgdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBvYmplY3QpKSB7XG4gICAgc2ltcGxlID0gZmFsc2U7XG4gIH1cblxuICBtb2RpZmllciA9ICcnO1xuICBpZiAoZm9sZGVkIHx8IGxpdGVyYWwpIHtcbiAgICB0cmFpbGluZ0xpbmVCcmVha3MgPSAwO1xuICAgIGlmIChvYmplY3QuY2hhckNvZGVBdChvYmplY3QubGVuZ3RoIC0gMSkgPT09IENIQVJfTElORV9GRUVEKSB7XG4gICAgICB0cmFpbGluZ0xpbmVCcmVha3MgKz0gMTtcbiAgICAgIGlmIChvYmplY3QuY2hhckNvZGVBdChvYmplY3QubGVuZ3RoIC0gMikgPT09IENIQVJfTElORV9GRUVEKSB7XG4gICAgICAgIHRyYWlsaW5nTGluZUJyZWFrcyArPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0cmFpbGluZ0xpbmVCcmVha3MgPT09IDApIHtcbiAgICAgIG1vZGlmaWVyID0gJy0nO1xuICAgIH0gZWxzZSBpZiAodHJhaWxpbmdMaW5lQnJlYWtzID09PSAyKSB7XG4gICAgICBtb2RpZmllciA9ICcrJztcbiAgICB9XG4gIH1cblxuICBpZiAobGl0ZXJhbCAmJiBsb25nZXN0TGluZSA8IG1heCkge1xuICAgIGZvbGRlZCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgaXQncyBsaXRlcmFsbHkgb25lIGxpbmUsIHRoZW4gZG9uJ3QgYm90aGVyIHdpdGggdGhlIGxpdGVyYWwuXG4gIC8vIFdlIG1heSBzdGlsbCB3YW50IHRvIGRvIGEgZm9sZCwgdGhvdWdoLCBpZiBpdCdzIGEgc3VwZXIgbG9uZyBsaW5lLlxuICBpZiAoIXNhd0xpbmVGZWVkKSB7XG4gICAgbGl0ZXJhbCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHNpbXBsZSkge1xuICAgIHN0YXRlLmR1bXAgPSBvYmplY3Q7XG4gIH0gZWxzZSBpZiAoc2luZ2xlKSB7XG4gICAgc3RhdGUuZHVtcCA9ICdcXCcnICsgb2JqZWN0ICsgJ1xcJyc7XG4gIH0gZWxzZSBpZiAoZm9sZGVkKSB7XG4gICAgcmVzdWx0ID0gZm9sZChvYmplY3QsIG1heCk7XG4gICAgc3RhdGUuZHVtcCA9ICc+JyArIG1vZGlmaWVyICsgJ1xcbicgKyBpbmRlbnRTdHJpbmcocmVzdWx0LCBpbmRlbnQpO1xuICB9IGVsc2UgaWYgKGxpdGVyYWwpIHtcbiAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICBvYmplY3QgPSBvYmplY3QucmVwbGFjZSgvXFxuJC8sICcnKTtcbiAgICB9XG4gICAgc3RhdGUuZHVtcCA9ICd8JyArIG1vZGlmaWVyICsgJ1xcbicgKyBpbmRlbnRTdHJpbmcob2JqZWN0LCBpbmRlbnQpO1xuICB9IGVsc2UgaWYgKGRvdWJsZSkge1xuICAgIGRvdWJsZS5maW5pc2goKTtcbiAgICBzdGF0ZS5kdW1wID0gJ1wiJyArIGRvdWJsZS5yZXN1bHQgKyAnXCInO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGR1bXAgc2NhbGFyIHZhbHVlJyk7XG4gIH1cblxuICByZXR1cm47XG59XG5cbi8vIFRoZSBgdHJhaWxpbmdgIHZhciBpcyBhIHJlZ2V4cCBtYXRjaCBvZiBhbnkgdHJhaWxpbmcgYFxcbmAgY2hhcmFjdGVycy5cbi8vXG4vLyBUaGVyZSBhcmUgdGhyZWUgY2FzZXMgd2UgY2FyZSBhYm91dDpcbi8vXG4vLyAxLiBPbmUgdHJhaWxpbmcgYFxcbmAgb24gdGhlIHN0cmluZy4gIEp1c3QgdXNlIGB8YCBvciBgPmAuXG4vLyAgICBUaGlzIGlzIHRoZSBhc3N1bWVkIGRlZmF1bHQuICh0cmFpbGluZyA9IG51bGwpXG4vLyAyLiBObyB0cmFpbGluZyBgXFxuYCBvbiB0aGUgc3RyaW5nLiAgVXNlIGB8LWAgb3IgYD4tYCB0byBcImNob21wXCIgdGhlIGVuZC5cbi8vIDMuIE1vcmUgdGhhbiBvbmUgdHJhaWxpbmcgYFxcbmAgb24gdGhlIHN0cmluZy4gIFVzZSBgfCtgIG9yIGA+K2AuXG4vL1xuLy8gSW4gdGhlIGNhc2Ugb2YgYD4rYCwgdGhlc2UgbGluZSBicmVha3MgYXJlICpub3QqIGRvdWJsZWQgKGxpa2UgdGhlIGxpbmVcbi8vIGJyZWFrcyB3aXRoaW4gdGhlIHN0cmluZyksIHNvIGl0J3MgaW1wb3J0YW50IHRvIG9ubHkgZW5kIHdpdGggdGhlIGV4YWN0XG4vLyBzYW1lIG51bWJlciBhcyB3ZSBzdGFydGVkLlxuZnVuY3Rpb24gZm9sZChvYmplY3QsIG1heCkge1xuICB2YXIgcmVzdWx0ID0gJycsXG4gICAgICBwb3NpdGlvbiA9IDAsXG4gICAgICBsZW5ndGggPSBvYmplY3QubGVuZ3RoLFxuICAgICAgdHJhaWxpbmcgPSAvXFxuKyQvLmV4ZWMob2JqZWN0KSxcbiAgICAgIG5ld0xpbmU7XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgbGVuZ3RoID0gdHJhaWxpbmcuaW5kZXggKyAxO1xuICB9XG5cbiAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7XG4gICAgbmV3TGluZSA9IG9iamVjdC5pbmRleE9mKCdcXG4nLCBwb3NpdGlvbik7XG4gICAgaWYgKG5ld0xpbmUgPiBsZW5ndGggfHwgbmV3TGluZSA9PT0gLTEpIHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0ICs9ICdcXG5cXG4nO1xuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IGZvbGRMaW5lKG9iamVjdC5zbGljZShwb3NpdGlvbiwgbGVuZ3RoKSwgbWF4KTtcbiAgICAgIHBvc2l0aW9uID0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdCArPSAnXFxuXFxuJztcbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSBmb2xkTGluZShvYmplY3Quc2xpY2UocG9zaXRpb24sIG5ld0xpbmUpLCBtYXgpO1xuICAgICAgcG9zaXRpb24gPSBuZXdMaW5lICsgMTtcbiAgICB9XG4gIH1cbiAgaWYgKHRyYWlsaW5nICYmIHRyYWlsaW5nWzBdICE9PSAnXFxuJykge1xuICAgIHJlc3VsdCArPSB0cmFpbGluZ1swXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGZvbGRMaW5lKGxpbmUsIG1heCkge1xuICBpZiAobGluZSA9PT0gJycpIHtcbiAgICByZXR1cm4gbGluZTtcbiAgfVxuXG4gIHZhciBmb2xkUmUgPSAvW15cXHNdIFteXFxzXS9nLFxuICAgICAgcmVzdWx0ID0gJycsXG4gICAgICBwcmV2TWF0Y2ggPSAwLFxuICAgICAgZm9sZFN0YXJ0ID0gMCxcbiAgICAgIG1hdGNoID0gZm9sZFJlLmV4ZWMobGluZSksXG4gICAgICBpbmRleCxcbiAgICAgIGZvbGRFbmQsXG4gICAgICBmb2xkZWQ7XG5cbiAgd2hpbGUgKG1hdGNoKSB7XG4gICAgaW5kZXggPSBtYXRjaC5pbmRleDtcblxuICAgIC8vIHdoZW4gd2UgY3Jvc3MgdGhlIG1heCBsZW4sIGlmIHRoZSBwcmV2aW91cyBtYXRjaCB3b3VsZCd2ZVxuICAgIC8vIGJlZW4gb2ssIHVzZSB0aGF0IG9uZSwgYW5kIGNhcnJ5IG9uLiAgSWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzXG4gICAgLy8gbWF0Y2ggb24gdGhpcyBmb2xkIHNlY3Rpb24sIHRoZW4ganVzdCBoYXZlIGEgbG9uZyBsaW5lLlxuICAgIGlmIChpbmRleCAtIGZvbGRTdGFydCA+IG1heCkge1xuICAgICAgaWYgKHByZXZNYXRjaCAhPT0gZm9sZFN0YXJ0KSB7XG4gICAgICAgIGZvbGRFbmQgPSBwcmV2TWF0Y2g7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb2xkRW5kID0gaW5kZXg7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgfVxuICAgICAgZm9sZGVkID0gbGluZS5zbGljZShmb2xkU3RhcnQsIGZvbGRFbmQpO1xuICAgICAgcmVzdWx0ICs9IGZvbGRlZDtcbiAgICAgIGZvbGRTdGFydCA9IGZvbGRFbmQgKyAxO1xuICAgIH1cbiAgICBwcmV2TWF0Y2ggPSBpbmRleCArIDE7XG4gICAgbWF0Y2ggPSBmb2xkUmUuZXhlYyhsaW5lKTtcbiAgfVxuXG4gIGlmIChyZXN1bHQpIHtcbiAgICByZXN1bHQgKz0gJ1xcbic7XG4gIH1cblxuICAvLyBpZiB3ZSBlbmQgdXAgd2l0aCBvbmUgbGFzdCB3b3JkIGF0IHRoZSBlbmQsIHRoZW4gdGhlIGxhc3QgYml0IG1pZ2h0XG4gIC8vIGJlIHNsaWdodGx5IGJpZ2dlciB0aGFuIHdlIHdhbnRlZCwgYmVjYXVzZSB3ZSBleGl0ZWQgb3V0IG9mIHRoZSBsb29wLlxuICBpZiAoZm9sZFN0YXJ0ICE9PSBwcmV2TWF0Y2ggJiYgbGluZS5sZW5ndGggLSBmb2xkU3RhcnQgPiBtYXgpIHtcbiAgICByZXN1bHQgKz0gbGluZS5zbGljZShmb2xkU3RhcnQsIHByZXZNYXRjaCkgKyAnXFxuJyArXG4gICAgICAgICAgICAgIGxpbmUuc2xpY2UocHJldk1hdGNoICsgMSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ICs9IGxpbmUuc2xpY2UoZm9sZFN0YXJ0KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiBjaGFyYWN0ZXIgY2FuIGJlIGZvdW5kIGluIGEgc2ltcGxlIHNjYWxhclxuZnVuY3Rpb24gc2ltcGxlQ2hhcihjaGFyYWN0ZXIpIHtcbiAgcmV0dXJuIENIQVJfVEFCICAgICAgICAgICAgICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9MSU5FX0ZFRUQgICAgICAgICAgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX0NBUlJJQUdFX1JFVFVSTiAgICAgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfQ09NTUEgICAgICAgICAgICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX1NIQVJQICAgICAgICAgICAgICAgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfQU1QRVJTQU5EICAgICAgICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9BU1RFUklTSyAgICAgICAgICAgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX0VYQ0xBTUFUSU9OICAgICAgICAgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfVkVSVElDQUxfTElORSAgICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9HUkVBVEVSX1RIQU4gICAgICAgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX1NJTkdMRV9RVU9URSAgICAgICAgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgIENIQVJfRE9VQkxFX1FVT1RFICAgICAgICAgIT09IGNoYXJhY3RlciAmJlxuICAgICAgICAgQ0hBUl9QRVJDRU5UICAgICAgICAgICAgICAhPT0gY2hhcmFjdGVyICYmXG4gICAgICAgICBDSEFSX0NPTE9OICAgICAgICAgICAgICAgICE9PSBjaGFyYWN0ZXIgJiZcbiAgICAgICAgICFFU0NBUEVfU0VRVUVOQ0VTW2NoYXJhY3Rlcl0gICAgICAgICAgICAmJlxuICAgICAgICAgIW5lZWRzSGV4RXNjYXBlKGNoYXJhY3Rlcik7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGNvZGUgbmVlZHMgdG8gYmUgZXNjYXBlZC5cbmZ1bmN0aW9uIG5lZWRzSGV4RXNjYXBlKGNoYXJhY3Rlcikge1xuICByZXR1cm4gISgoMHgwMDAyMCA8PSBjaGFyYWN0ZXIgJiYgY2hhcmFjdGVyIDw9IDB4MDAwMDdFKSB8fFxuICAgICAgICAgICAoMHgwMDA4NSA9PT0gY2hhcmFjdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICB8fFxuICAgICAgICAgICAoMHgwMDBBMCA8PSBjaGFyYWN0ZXIgJiYgY2hhcmFjdGVyIDw9IDB4MDBEN0ZGKSB8fFxuICAgICAgICAgICAoMHgwRTAwMCA8PSBjaGFyYWN0ZXIgJiYgY2hhcmFjdGVyIDw9IDB4MDBGRkZEKSB8fFxuICAgICAgICAgICAoMHgxMDAwMCA8PSBjaGFyYWN0ZXIgJiYgY2hhcmFjdGVyIDw9IDB4MTBGRkZGKSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgb2JqZWN0KSB7XG4gIHZhciBfcmVzdWx0ID0gJycsXG4gICAgICBfdGFnICAgID0gc3RhdGUudGFnLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgLy8gV3JpdGUgb25seSB2YWxpZCBlbGVtZW50cy5cbiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0W2luZGV4XSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgaWYgKDAgIT09IGluZGV4KSB7XG4gICAgICAgIF9yZXN1bHQgKz0gJywgJztcbiAgICAgIH1cbiAgICAgIF9yZXN1bHQgKz0gc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gJ1snICsgX3Jlc3VsdCArICddJztcbn1cblxuZnVuY3Rpb24gd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0KSB7XG4gIHZhciBfcmVzdWx0ID0gJycsXG4gICAgICBfdGFnICAgID0gc3RhdGUudGFnLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgLy8gV3JpdGUgb25seSB2YWxpZCBlbGVtZW50cy5cbiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG9iamVjdFtpbmRleF0sIHRydWUsIHRydWUpKSB7XG4gICAgICBpZiAoIWNvbXBhY3QgfHwgMCAhPT0gaW5kZXgpIHtcbiAgICAgICAgX3Jlc3VsdCArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgICB9XG4gICAgICBfcmVzdWx0ICs9ICctICcgKyBzdGF0ZS5kdW1wO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSBfcmVzdWx0IHx8ICdbXSc7IC8vIEVtcHR5IHNlcXVlbmNlIGlmIG5vIHZhbGlkIHZhbHVlcy5cbn1cblxuZnVuY3Rpb24gd3JpdGVGbG93TWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCkge1xuICB2YXIgX3Jlc3VsdCAgICAgICA9ICcnLFxuICAgICAgX3RhZyAgICAgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGgsXG4gICAgICBvYmplY3RLZXksXG4gICAgICBvYmplY3RWYWx1ZSxcbiAgICAgIHBhaXJCdWZmZXI7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXJCdWZmZXIgPSAnJztcblxuICAgIGlmICgwICE9PSBpbmRleCkge1xuICAgICAgcGFpckJ1ZmZlciArPSAnLCAnO1xuICAgIH1cblxuICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXhdO1xuICAgIG9iamVjdFZhbHVlID0gb2JqZWN0W29iamVjdEtleV07XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdEtleSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCkge1xuICAgICAgcGFpckJ1ZmZlciArPSAnPyAnO1xuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcCArICc6ICc7XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdFZhbHVlLCBmYWxzZSwgZmFsc2UpKSB7XG4gICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIHBhaXIgYmVjYXVzZSBvZiBpbnZhbGlkIHZhbHVlLlxuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIC8vIEJvdGgga2V5IGFuZCB2YWx1ZSBhcmUgdmFsaWQuXG4gICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyO1xuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9ICd7JyArIF9yZXN1bHQgKyAnfSc7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlLCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0KSB7XG4gIHZhciBfcmVzdWx0ICAgICAgID0gJycsXG4gICAgICBfdGFnICAgICAgICAgID0gc3RhdGUudGFnLFxuICAgICAgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aCxcbiAgICAgIG9iamVjdEtleSxcbiAgICAgIG9iamVjdFZhbHVlLFxuICAgICAgZXhwbGljaXRQYWlyLFxuICAgICAgcGFpckJ1ZmZlcjtcblxuICAvLyBBbGxvdyBzb3J0aW5nIGtleXMgc28gdGhhdCB0aGUgb3V0cHV0IGZpbGUgaXMgZGV0ZXJtaW5pc3RpY1xuICBpZiAoc3RhdGUuc29ydEtleXMgPT09IHRydWUpIHtcbiAgICAvLyBEZWZhdWx0IHNvcnRpbmdcbiAgICBvYmplY3RLZXlMaXN0LnNvcnQoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhdGUuc29ydEtleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBDdXN0b20gc29ydCBmdW5jdGlvblxuICAgIG9iamVjdEtleUxpc3Quc29ydChzdGF0ZS5zb3J0S2V5cyk7XG4gIH0gZWxzZSBpZiAoc3RhdGUuc29ydEtleXMpIHtcbiAgICAvLyBTb21ldGhpbmcgaXMgd3JvbmdcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignc29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXJCdWZmZXIgPSAnJztcblxuICAgIGlmICghY29tcGFjdCB8fCAwICE9PSBpbmRleCkge1xuICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgfVxuXG4gICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleF07XG4gICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTtcblxuICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG9iamVjdEtleSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgcGFpciBiZWNhdXNlIG9mIGludmFsaWQga2V5LlxuICAgIH1cblxuICAgIGV4cGxpY2l0UGFpciA9IChudWxsICE9PSBzdGF0ZS50YWcgJiYgJz8nICE9PSBzdGF0ZS50YWcpIHx8XG4gICAgICAgICAgICAgICAgICAgKHN0YXRlLmR1bXAgJiYgc3RhdGUuZHVtcC5sZW5ndGggPiAxMDI0KTtcblxuICAgIGlmIChleHBsaWNpdFBhaXIpIHtcbiAgICAgIGlmIChzdGF0ZS5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZS5kdW1wLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgICAgcGFpckJ1ZmZlciArPSAnPyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWlyQnVmZmVyICs9ICc/ICc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wO1xuXG4gICAgaWYgKGV4cGxpY2l0UGFpcikge1xuICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgfVxuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0VmFsdWUsIHRydWUsIGV4cGxpY2l0UGFpcikpIHtcbiAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgcGFpciBiZWNhdXNlIG9mIGludmFsaWQgdmFsdWUuXG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgcGFpckJ1ZmZlciArPSAnOic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhaXJCdWZmZXIgKz0gJzogJztcbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICAvLyBCb3RoIGtleSBhbmQgdmFsdWUgYXJlIHZhbGlkLlxuICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSBfcmVzdWx0IHx8ICd7fSc7IC8vIEVtcHR5IG1hcHBpbmcgaWYgbm8gdmFsaWQgcGFpcnMuXG59XG5cbmZ1bmN0aW9uIGRldGVjdFR5cGUoc3RhdGUsIG9iamVjdCwgZXhwbGljaXQpIHtcbiAgdmFyIF9yZXN1bHQsIHR5cGVMaXN0LCBpbmRleCwgbGVuZ3RoLCB0eXBlLCBzdHlsZTtcblxuICB0eXBlTGlzdCA9IGV4cGxpY2l0ID8gc3RhdGUuZXhwbGljaXRUeXBlcyA6IHN0YXRlLmltcGxpY2l0VHlwZXM7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHR5cGVMaXN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB0eXBlID0gdHlwZUxpc3RbaW5kZXhdO1xuXG4gICAgaWYgKCh0eXBlLmluc3RhbmNlT2YgIHx8IHR5cGUucHJlZGljYXRlKSAmJlxuICAgICAgICAoIXR5cGUuaW5zdGFuY2VPZiB8fCAoKCdvYmplY3QnID09PSB0eXBlb2Ygb2JqZWN0KSAmJiAob2JqZWN0IGluc3RhbmNlb2YgdHlwZS5pbnN0YW5jZU9mKSkpICYmXG4gICAgICAgICghdHlwZS5wcmVkaWNhdGUgIHx8IHR5cGUucHJlZGljYXRlKG9iamVjdCkpKSB7XG5cbiAgICAgIHN0YXRlLnRhZyA9IGV4cGxpY2l0ID8gdHlwZS50YWcgOiAnPyc7XG5cbiAgICAgIGlmICh0eXBlLnJlcHJlc2VudCkge1xuICAgICAgICBzdHlsZSA9IHN0YXRlLnN0eWxlTWFwW3R5cGUudGFnXSB8fCB0eXBlLmRlZmF1bHRTdHlsZTtcblxuICAgICAgICBpZiAoJ1tvYmplY3QgRnVuY3Rpb25dJyA9PT0gX3RvU3RyaW5nLmNhbGwodHlwZS5yZXByZXNlbnQpKSB7XG4gICAgICAgICAgX3Jlc3VsdCA9IHR5cGUucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUucmVwcmVzZW50LCBzdHlsZSkpIHtcbiAgICAgICAgICBfcmVzdWx0ID0gdHlwZS5yZXByZXNlbnRbc3R5bGVdKG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCchPCcgKyB0eXBlLnRhZyArICc+IHRhZyByZXNvbHZlciBhY2NlcHRzIG5vdCBcIicgKyBzdHlsZSArICdcIiBzdHlsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUuZHVtcCA9IF9yZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gU2VyaWFsaXplcyBgb2JqZWN0YCBhbmQgd3JpdGVzIGl0IHRvIGdsb2JhbCBgcmVzdWx0YC5cbi8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbiBpbnZhbGlkIG9iamVjdC5cbi8vXG5mdW5jdGlvbiB3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3QsIGJsb2NrLCBjb21wYWN0LCBpc2tleSkge1xuICBzdGF0ZS50YWcgPSBudWxsO1xuICBzdGF0ZS5kdW1wID0gb2JqZWN0O1xuXG4gIGlmICghZGV0ZWN0VHlwZShzdGF0ZSwgb2JqZWN0LCBmYWxzZSkpIHtcbiAgICBkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIHRydWUpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBfdG9TdHJpbmcuY2FsbChzdGF0ZS5kdW1wKTtcblxuICBpZiAoYmxvY2spIHtcbiAgICBibG9jayA9ICgwID4gc3RhdGUuZmxvd0xldmVsIHx8IHN0YXRlLmZsb3dMZXZlbCA+IGxldmVsKTtcbiAgfVxuXG4gIHZhciBvYmplY3RPckFycmF5ID0gJ1tvYmplY3QgT2JqZWN0XScgPT09IHR5cGUgfHwgJ1tvYmplY3QgQXJyYXldJyA9PT0gdHlwZSxcbiAgICAgIGR1cGxpY2F0ZUluZGV4LFxuICAgICAgZHVwbGljYXRlO1xuXG4gIGlmIChvYmplY3RPckFycmF5KSB7XG4gICAgZHVwbGljYXRlSW5kZXggPSBzdGF0ZS5kdXBsaWNhdGVzLmluZGV4T2Yob2JqZWN0KTtcbiAgICBkdXBsaWNhdGUgPSBkdXBsaWNhdGVJbmRleCAhPT0gLTE7XG4gIH1cblxuICBpZiAoKG51bGwgIT09IHN0YXRlLnRhZyAmJiAnPycgIT09IHN0YXRlLnRhZykgfHwgZHVwbGljYXRlIHx8ICgyICE9PSBzdGF0ZS5pbmRlbnQgJiYgbGV2ZWwgPiAwKSkge1xuICAgIGNvbXBhY3QgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChkdXBsaWNhdGUgJiYgc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgc3RhdGUuZHVtcCA9ICcqcmVmXycgKyBkdXBsaWNhdGVJbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpZiAob2JqZWN0T3JBcnJheSAmJiBkdXBsaWNhdGUgJiYgIXN0YXRlLnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSkge1xuICAgICAgc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCdbb2JqZWN0IE9iamVjdF0nID09PSB0eXBlKSB7XG4gICAgICBpZiAoYmxvY2sgJiYgKDAgIT09IE9iamVjdC5rZXlzKHN0YXRlLmR1bXApLmxlbmd0aCkpIHtcbiAgICAgICAgd3JpdGVCbG9ja01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCk7XG4gICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICBzdGF0ZS5kdW1wID0gJyZyZWZfJyArIGR1cGxpY2F0ZUluZGV4ICsgJyAnICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoJ1tvYmplY3QgQXJyYXldJyA9PT0gdHlwZSkge1xuICAgICAgaWYgKGJsb2NrICYmICgwICE9PSBzdGF0ZS5kdW1wLmxlbmd0aCkpIHtcbiAgICAgICAgd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICBzdGF0ZS5kdW1wID0gJyZyZWZfJyArIGR1cGxpY2F0ZUluZGV4ICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyAnICcgKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgnW29iamVjdCBTdHJpbmddJyA9PT0gdHlwZSkge1xuICAgICAgaWYgKCc/JyAhPT0gc3RhdGUudGFnKSB7XG4gICAgICAgIHdyaXRlU2NhbGFyKHN0YXRlLCBzdGF0ZS5kdW1wLCBsZXZlbCwgaXNrZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdGUuc2tpcEludmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ3VuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICcgKyB0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAobnVsbCAhPT0gc3RhdGUudGFnICYmICc/JyAhPT0gc3RhdGUudGFnKSB7XG4gICAgICBzdGF0ZS5kdW1wID0gJyE8JyArIHN0YXRlLnRhZyArICc+ICcgKyBzdGF0ZS5kdW1wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKG9iamVjdCwgc3RhdGUpIHtcbiAgdmFyIG9iamVjdHMgPSBbXSxcbiAgICAgIGR1cGxpY2F0ZXNJbmRleGVzID0gW10sXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aDtcblxuICBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gZHVwbGljYXRlc0luZGV4ZXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHN0YXRlLmR1cGxpY2F0ZXMucHVzaChvYmplY3RzW2R1cGxpY2F0ZXNJbmRleGVzW2luZGV4XV0pO1xuICB9XG4gIHN0YXRlLnVzZWREdXBsaWNhdGVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpIHtcbiAgdmFyIG9iamVjdEtleUxpc3QsXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aDtcblxuICBpZiAobnVsbCAhPT0gb2JqZWN0ICYmICdvYmplY3QnID09PSB0eXBlb2Ygb2JqZWN0KSB7XG4gICAgaW5kZXggPSBvYmplY3RzLmluZGV4T2Yob2JqZWN0KTtcbiAgICBpZiAoLTEgIT09IGluZGV4KSB7XG4gICAgICBpZiAoLTEgPT09IGR1cGxpY2F0ZXNJbmRleGVzLmluZGV4T2YoaW5kZXgpKSB7XG4gICAgICAgIGR1cGxpY2F0ZXNJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3RzLnB1c2gob2JqZWN0KTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgICBpbnNwZWN0Tm9kZShvYmplY3RbaW5kZXhdLCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gICAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgICBpbnNwZWN0Tm9kZShvYmplY3Rbb2JqZWN0S2V5TGlzdFtpbmRleF1dLCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZHVtcChpbnB1dCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUob3B0aW9ucyk7XG5cbiAgZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyhpbnB1dCwgc3RhdGUpO1xuXG4gIGlmICh3cml0ZU5vZGUoc3RhdGUsIDAsIGlucHV0LCB0cnVlLCB0cnVlKSkge1xuICAgIHJldHVybiBzdGF0ZS5kdW1wICsgJ1xcbic7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBzYWZlRHVtcChpbnB1dCwgb3B0aW9ucykge1xuICByZXR1cm4gZHVtcChpbnB1dCwgY29tbW9uLmV4dGVuZCh7IHNjaGVtYTogREVGQVVMVF9TQUZFX1NDSEVNQSB9LCBvcHRpb25zKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmR1bXAgICAgID0gZHVtcDtcbm1vZHVsZS5leHBvcnRzLnNhZmVEdW1wID0gc2FmZUR1bXA7XG4iLCIvLyBZQU1MIGVycm9yIGNsYXNzLiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0NTg5ODRcbi8vXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdCcpO1xuXG5cbmZ1bmN0aW9uIFlBTUxFeGNlcHRpb24ocmVhc29uLCBtYXJrKSB7XG4gIC8vIFN1cGVyIGNvbnN0cnVjdG9yXG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgLy8gSW5jbHVkZSBzdGFjayB0cmFjZSBpbiBlcnJvciBvYmplY3RcbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgLy8gQ2hyb21lIGFuZCBOb2RlSlNcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGRiwgSUUgMTArIGFuZCBTYWZhcmkgNisuIEZhbGxiYWNrIGZvciBvdGhlcnNcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjayB8fCAnJztcbiAgfVxuXG4gIHRoaXMubmFtZSA9ICdZQU1MRXhjZXB0aW9uJztcbiAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gIHRoaXMubWFyayA9IG1hcms7XG4gIHRoaXMubWVzc2FnZSA9ICh0aGlzLnJlYXNvbiB8fCAnKHVua25vd24gcmVhc29uKScpICsgKHRoaXMubWFyayA/ICcgJyArIHRoaXMubWFyay50b1N0cmluZygpIDogJycpO1xufVxuXG5cbi8vIEluaGVyaXQgZnJvbSBFcnJvclxuaW5oZXJpdHMoWUFNTEV4Y2VwdGlvbiwgRXJyb3IpO1xuXG5cbllBTUxFeGNlcHRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoY29tcGFjdCkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5uYW1lICsgJzogJztcblxuICByZXN1bHQgKz0gdGhpcy5yZWFzb24gfHwgJyh1bmtub3duIHJlYXNvbiknO1xuXG4gIGlmICghY29tcGFjdCAmJiB0aGlzLm1hcmspIHtcbiAgICByZXN1bHQgKz0gJyAnICsgdGhpcy5tYXJrLnRvU3RyaW5nKCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFlBTUxFeGNlcHRpb247XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbWF4LWxlbixuby11c2UtYmVmb3JlLWRlZmluZSovXG5cbnZhciBjb21tb24gICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9jb21tb24nKTtcbnZhciBZQU1MRXhjZXB0aW9uICAgICAgID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcbnZhciBNYXJrICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9tYXJrJyk7XG52YXIgREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmUoJy4vc2NoZW1hL2RlZmF1bHRfc2FmZScpO1xudmFyIERFRkFVTFRfRlVMTF9TQ0hFTUEgPSByZXF1aXJlKCcuL3NjaGVtYS9kZWZhdWx0X2Z1bGwnKTtcblxuXG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuXG52YXIgQ09OVEVYVF9GTE9XX0lOICAgPSAxO1xudmFyIENPTlRFWFRfRkxPV19PVVQgID0gMjtcbnZhciBDT05URVhUX0JMT0NLX0lOICA9IDM7XG52YXIgQ09OVEVYVF9CTE9DS19PVVQgPSA0O1xuXG5cbnZhciBDSE9NUElOR19DTElQICA9IDE7XG52YXIgQ0hPTVBJTkdfU1RSSVAgPSAyO1xudmFyIENIT01QSU5HX0tFRVAgID0gMztcblxuXG52YXIgUEFUVEVSTl9OT05fUFJJTlRBQkxFICAgICAgICAgPSAvW1xceDAwLVxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGXFx4N0YtXFx4ODRcXHg4Ni1cXHg5RlxcdUZGRkVcXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXS87XG52YXIgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MgPSAvW1xceDg1XFx1MjAyOFxcdTIwMjldLztcbnZhciBQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUyAgICAgICA9IC9bLFxcW1xcXVxce1xcfV0vO1xudmFyIFBBVFRFUk5fVEFHX0hBTkRMRSAgICAgICAgICAgID0gL14oPzohfCEhfCFbYS16XFwtXSshKSQvaTtcbnZhciBQQVRURVJOX1RBR19VUkkgICAgICAgICAgICAgICA9IC9eKD86IXxbXixcXFtcXF1cXHtcXH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XFwtIztcXC9cXD86QCY9XFwrXFwkLF9cXC4hflxcKidcXChcXClcXFtcXF1dKSokL2k7XG5cblxuZnVuY3Rpb24gaXNfRU9MKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDBBLyogTEYgKi8pIHx8IChjID09PSAweDBELyogQ1IgKi8pO1xufVxuXG5mdW5jdGlvbiBpc19XSElURV9TUEFDRShjKSB7XG4gIHJldHVybiAoYyA9PT0gMHgwOS8qIFRhYiAqLykgfHwgKGMgPT09IDB4MjAvKiBTcGFjZSAqLyk7XG59XG5cbmZ1bmN0aW9uIGlzX1dTX09SX0VPTChjKSB7XG4gIHJldHVybiAoYyA9PT0gMHgwOS8qIFRhYiAqLykgfHxcbiAgICAgICAgIChjID09PSAweDIwLyogU3BhY2UgKi8pIHx8XG4gICAgICAgICAoYyA9PT0gMHgwQS8qIExGICovKSB8fFxuICAgICAgICAgKGMgPT09IDB4MEQvKiBDUiAqLyk7XG59XG5cbmZ1bmN0aW9uIGlzX0ZMT1dfSU5ESUNBVE9SKGMpIHtcbiAgcmV0dXJuIDB4MkMvKiAsICovID09PSBjIHx8XG4gICAgICAgICAweDVCLyogWyAqLyA9PT0gYyB8fFxuICAgICAgICAgMHg1RC8qIF0gKi8gPT09IGMgfHxcbiAgICAgICAgIDB4N0IvKiB7ICovID09PSBjIHx8XG4gICAgICAgICAweDdELyogfSAqLyA9PT0gYztcbn1cblxuZnVuY3Rpb24gZnJvbUhleENvZGUoYykge1xuICB2YXIgbGM7XG5cbiAgaWYgKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM5LyogOSAqLykpIHtcbiAgICByZXR1cm4gYyAtIDB4MzA7XG4gIH1cblxuICAvKmVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UqL1xuICBsYyA9IGMgfCAweDIwO1xuXG4gIGlmICgoMHg2MS8qIGEgKi8gPD0gbGMpICYmIChsYyA8PSAweDY2LyogZiAqLykpIHtcbiAgICByZXR1cm4gbGMgLSAweDYxICsgMTA7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZWRIZXhMZW4oYykge1xuICBpZiAoYyA9PT0gMHg3OC8qIHggKi8pIHsgcmV0dXJuIDI7IH1cbiAgaWYgKGMgPT09IDB4NzUvKiB1ICovKSB7IHJldHVybiA0OyB9XG4gIGlmIChjID09PSAweDU1LyogVSAqLykgeyByZXR1cm4gODsgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZnJvbURlY2ltYWxDb2RlKGMpIHtcbiAgaWYgKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM5LyogOSAqLykpIHtcbiAgICByZXR1cm4gYyAtIDB4MzA7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVzY2FwZVNlcXVlbmNlKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDMwLyogMCAqLykgPyAnXFx4MDAnIDpcbiAgICAgICAgKGMgPT09IDB4NjEvKiBhICovKSA/ICdcXHgwNycgOlxuICAgICAgICAoYyA9PT0gMHg2Mi8qIGIgKi8pID8gJ1xceDA4JyA6XG4gICAgICAgIChjID09PSAweDc0LyogdCAqLykgPyAnXFx4MDknIDpcbiAgICAgICAgKGMgPT09IDB4MDkvKiBUYWIgKi8pID8gJ1xceDA5JyA6XG4gICAgICAgIChjID09PSAweDZFLyogbiAqLykgPyAnXFx4MEEnIDpcbiAgICAgICAgKGMgPT09IDB4NzYvKiB2ICovKSA/ICdcXHgwQicgOlxuICAgICAgICAoYyA9PT0gMHg2Ni8qIGYgKi8pID8gJ1xceDBDJyA6XG4gICAgICAgIChjID09PSAweDcyLyogciAqLykgPyAnXFx4MEQnIDpcbiAgICAgICAgKGMgPT09IDB4NjUvKiBlICovKSA/ICdcXHgxQicgOlxuICAgICAgICAoYyA9PT0gMHgyMC8qIFNwYWNlICovKSA/ICcgJyA6XG4gICAgICAgIChjID09PSAweDIyLyogXCIgKi8pID8gJ1xceDIyJyA6XG4gICAgICAgIChjID09PSAweDJGLyogLyAqLykgPyAnLycgOlxuICAgICAgICAoYyA9PT0gMHg1Qy8qIFxcICovKSA/ICdcXHg1QycgOlxuICAgICAgICAoYyA9PT0gMHg0RS8qIE4gKi8pID8gJ1xceDg1JyA6XG4gICAgICAgIChjID09PSAweDVGLyogXyAqLykgPyAnXFx4QTAnIDpcbiAgICAgICAgKGMgPT09IDB4NEMvKiBMICovKSA/ICdcXHUyMDI4JyA6XG4gICAgICAgIChjID09PSAweDUwLyogUCAqLykgPyAnXFx1MjAyOScgOiAnJztcbn1cblxuZnVuY3Rpb24gY2hhckZyb21Db2RlcG9pbnQoYykge1xuICBpZiAoYyA8PSAweEZGRkYpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgfVxuICAvLyBFbmNvZGUgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyXG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi0xNiNDb2RlX3BvaW50c19VLjJCMDEwMDAwX3RvX1UuMkIxMEZGRkZcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKChjIC0gMHgwMTAwMDApID4+IDEwKSArIDB4RDgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjIC0gMHgwMTAwMDApICYgMHgwM0ZGKSArIDB4REMwMCk7XG59XG5cbnZhciBzaW1wbGVFc2NhcGVDaGVjayA9IG5ldyBBcnJheSgyNTYpOyAvLyBpbnRlZ2VyLCBmb3IgZmFzdCBhY2Nlc3NcbnZhciBzaW1wbGVFc2NhcGVNYXAgPSBuZXcgQXJyYXkoMjU2KTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgc2ltcGxlRXNjYXBlQ2hlY2tbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKSA/IDEgOiAwO1xuICBzaW1wbGVFc2NhcGVNYXBbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKTtcbn1cblxuXG5mdW5jdGlvbiBTdGF0ZShpbnB1dCwgb3B0aW9ucykge1xuICB0aGlzLmlucHV0ID0gaW5wdXQ7XG5cbiAgdGhpcy5maWxlbmFtZSAgPSBvcHRpb25zWydmaWxlbmFtZSddICB8fCBudWxsO1xuICB0aGlzLnNjaGVtYSAgICA9IG9wdGlvbnNbJ3NjaGVtYSddICAgIHx8IERFRkFVTFRfRlVMTF9TQ0hFTUE7XG4gIHRoaXMub25XYXJuaW5nID0gb3B0aW9uc1snb25XYXJuaW5nJ10gfHwgbnVsbDtcbiAgdGhpcy5sZWdhY3kgICAgPSBvcHRpb25zWydsZWdhY3knXSAgICB8fCBmYWxzZTtcblxuICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0O1xuICB0aGlzLnR5cGVNYXAgICAgICAgPSB0aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXA7XG5cbiAgdGhpcy5sZW5ndGggICAgID0gaW5wdXQubGVuZ3RoO1xuICB0aGlzLnBvc2l0aW9uICAgPSAwO1xuICB0aGlzLmxpbmUgICAgICAgPSAwO1xuICB0aGlzLmxpbmVTdGFydCAgPSAwO1xuICB0aGlzLmxpbmVJbmRlbnQgPSAwO1xuXG4gIHRoaXMuZG9jdW1lbnRzID0gW107XG5cbiAgLypcbiAgdGhpcy52ZXJzaW9uO1xuICB0aGlzLmNoZWNrTGluZUJyZWFrcztcbiAgdGhpcy50YWdNYXA7XG4gIHRoaXMuYW5jaG9yTWFwO1xuICB0aGlzLnRhZztcbiAgdGhpcy5hbmNob3I7XG4gIHRoaXMua2luZDtcbiAgdGhpcy5yZXN1bHQ7Ki9cblxufVxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBZQU1MRXhjZXB0aW9uKFxuICAgIG1lc3NhZ2UsXG4gICAgbmV3IE1hcmsoc3RhdGUuZmlsZW5hbWUsIHN0YXRlLmlucHV0LCBzdGF0ZS5wb3NpdGlvbiwgc3RhdGUubGluZSwgKHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0KSkpO1xufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gIHRocm93IGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiB0aHJvd1dhcm5pbmcoc3RhdGUsIG1lc3NhZ2UpIHtcbiAgaWYgKHN0YXRlLm9uV2FybmluZykge1xuICAgIHN0YXRlLm9uV2FybmluZy5jYWxsKG51bGwsIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpKTtcbiAgfVxufVxuXG5cbnZhciBkaXJlY3RpdmVIYW5kbGVycyA9IHtcblxuICBZQU1MOiBmdW5jdGlvbiBoYW5kbGVZYW1sRGlyZWN0aXZlKHN0YXRlLCBuYW1lLCBhcmdzKSB7XG5cbiAgICAgIHZhciBtYXRjaCwgbWFqb3IsIG1pbm9yO1xuXG4gICAgICBpZiAobnVsbCAhPT0gc3RhdGUudmVyc2lvbikge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICgxICE9PSBhcmdzLmxlbmd0aCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCcpO1xuICAgICAgfVxuXG4gICAgICBtYXRjaCA9IC9eKFswLTldKylcXC4oWzAtOV0rKSQvLmV4ZWMoYXJnc1swXSk7XG5cbiAgICAgIGlmIChudWxsID09PSBtYXRjaCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUnKTtcbiAgICAgIH1cblxuICAgICAgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuXG4gICAgICBpZiAoMSAhPT0gbWFqb3IpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLnZlcnNpb24gPSBhcmdzWzBdO1xuICAgICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gKG1pbm9yIDwgMik7XG5cbiAgICAgIGlmICgxICE9PSBtaW5vciAmJiAyICE9PSBtaW5vcikge1xuICAgICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Jyk7XG4gICAgICB9XG4gICAgfSxcblxuICBUQUc6IGZ1bmN0aW9uIGhhbmRsZVRhZ0RpcmVjdGl2ZShzdGF0ZSwgbmFtZSwgYXJncykge1xuXG4gICAgICB2YXIgaGFuZGxlLCBwcmVmaXg7XG5cbiAgICAgIGlmICgyICE9PSBhcmdzLmxlbmd0aCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cycpO1xuICAgICAgfVxuXG4gICAgICBoYW5kbGUgPSBhcmdzWzBdO1xuICAgICAgcHJlZml4ID0gYXJnc1sxXTtcblxuICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdChoYW5kbGUpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUudGFnTWFwLCBoYW5kbGUpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciBcIicgKyBoYW5kbGUgKyAnXCIgdGFnIGhhbmRsZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHByZWZpeCkpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZScpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS50YWdNYXBbaGFuZGxlXSA9IHByZWZpeDtcbiAgICB9XG59O1xuXG5cbmZ1bmN0aW9uIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBzdGFydCwgZW5kLCBjaGVja0pzb24pIHtcbiAgdmFyIF9wb3NpdGlvbiwgX2xlbmd0aCwgX2NoYXJhY3RlciwgX3Jlc3VsdDtcblxuICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICBfcmVzdWx0ID0gc3RhdGUuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICBpZiAoY2hlY2tKc29uKSB7XG4gICAgICBmb3IgKF9wb3NpdGlvbiA9IDAsIF9sZW5ndGggPSBfcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgX3Bvc2l0aW9uIDwgX2xlbmd0aDtcbiAgICAgICAgICAgX3Bvc2l0aW9uICs9IDEpIHtcbiAgICAgICAgX2NoYXJhY3RlciA9IF9yZXN1bHQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuICAgICAgICBpZiAoISgweDA5ID09PSBfY2hhcmFjdGVyIHx8XG4gICAgICAgICAgICAgIDB4MjAgPD0gX2NoYXJhY3RlciAmJiBfY2hhcmFjdGVyIDw9IDB4MTBGRkZGKSkge1xuICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlcicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChQQVRURVJOX05PTl9QUklOVEFCTEUudGVzdChfcmVzdWx0KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RoZSBzdHJlYW0gY29udGFpbnMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuXG4gICAgc3RhdGUucmVzdWx0ICs9IF9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICB2YXIgc291cmNlS2V5cywga2V5LCBpbmRleCwgcXVhbnRpdHk7XG5cbiAgaWYgKCFjb21tb24uaXNPYmplY3Qoc291cmNlKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZScpO1xuICB9XG5cbiAgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4IDwgcXVhbnRpdHk7IGluZGV4ICs9IDEpIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2luZGV4XTtcblxuICAgIGlmICghX2hhc093blByb3BlcnR5LmNhbGwoZGVzdGluYXRpb24sIGtleSkpIHtcbiAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUpIHtcbiAgdmFyIGluZGV4LCBxdWFudGl0eTtcblxuICBrZXlOb2RlID0gU3RyaW5nKGtleU5vZGUpO1xuXG4gIGlmIChudWxsID09PSBfcmVzdWx0KSB7XG4gICAgX3Jlc3VsdCA9IHt9O1xuICB9XG5cbiAgaWYgKCd0YWc6eWFtbC5vcmcsMjAwMjptZXJnZScgPT09IGtleVRhZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlTm9kZSkpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IHZhbHVlTm9kZS5sZW5ndGg7IGluZGV4IDwgcXVhbnRpdHk7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgX3Jlc3VsdCwgdmFsdWVOb2RlW2luZGV4XSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlTWFwcGluZ3Moc3RhdGUsIF9yZXN1bHQsIHZhbHVlTm9kZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIF9yZXN1bHRba2V5Tm9kZV0gPSB2YWx1ZU5vZGU7XG4gIH1cblxuICByZXR1cm4gX3Jlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZSkge1xuICB2YXIgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoMHgwQS8qIExGICovID09PSBjaCkge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoMHgwRC8qIENSICovID09PSBjaCkge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgaWYgKDB4MEEvKiBMRiAqLyA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHN0YXRlLmxpbmUgKz0gMTtcbiAgc3RhdGUubGluZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG59XG5cbmZ1bmN0aW9uIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7XG4gIHZhciBsaW5lQnJlYWtzID0gMCxcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKDAgIT09IGNoKSB7XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIDB4MjMvKiAjICovID09PSBjaCkge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9IHdoaWxlIChjaCAhPT0gMHgwQS8qIExGICovICYmIGNoICE9PSAweDBELyogQ1IgKi8gJiYgMCAhPT0gY2gpO1xuICAgIH1cblxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGxpbmVCcmVha3MrKztcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgICB3aGlsZSAoMHgyMC8qIFNwYWNlICovID09PSBjaCkge1xuICAgICAgICBzdGF0ZS5saW5lSW5kZW50Kys7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKC0xICE9PSBjaGVja0luZGVudCAmJiAwICE9PSBsaW5lQnJlYWtzICYmIHN0YXRlLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudCkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ2RlZmljaWVudCBpbmRlbnRhdGlvbicpO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVCcmVha3M7XG59XG5cbmZ1bmN0aW9uIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcblxuICAvLyBDb25kaXRpb24gc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCBpcyB0ZXN0ZWRcbiAgLy8gaW4gcGFyZW50IG9uIGVhY2ggY2FsbCwgZm9yIGVmZmljaWVuY3kuIE5vIG5lZWRzIHRvIHRlc3QgaGVyZSBhZ2Fpbi5cbiAgaWYgKCgweDJELyogLSAqLyA9PT0gY2ggfHwgMHgyRS8qIC4gKi8gPT09IGNoKSAmJlxuICAgICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAxKSA9PT0gY2ggJiZcbiAgICAgIHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMikgPT09IGNoKSB7XG5cbiAgICBfcG9zaXRpb24gKz0gMztcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSAwIHx8IGlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQpIHtcbiAgaWYgKDEgPT09IGNvdW50KSB7XG4gICAgc3RhdGUucmVzdWx0ICs9ICcgJztcbiAgfSBlbHNlIGlmIChjb3VudCA+IDEpIHtcbiAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgY291bnQgLSAxKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCwgd2l0aGluRmxvd0NvbGxlY3Rpb24pIHtcbiAgdmFyIHByZWNlZGluZyxcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIGNhcHR1cmVTdGFydCxcbiAgICAgIGNhcHR1cmVFbmQsXG4gICAgICBoYXNQZW5kaW5nQ29udGVudCxcbiAgICAgIF9saW5lLFxuICAgICAgX2xpbmVTdGFydCxcbiAgICAgIF9saW5lSW5kZW50LFxuICAgICAgX2tpbmQgPSBzdGF0ZS5raW5kLFxuICAgICAgX3Jlc3VsdCA9IHN0YXRlLnJlc3VsdCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGlzX1dTX09SX0VPTChjaCkgICAgICAgICAgICAgfHxcbiAgICAgIGlzX0ZMT1dfSU5ESUNBVE9SKGNoKSAgICAgICAgfHxcbiAgICAgIDB4MjMvKiAjICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4MjYvKiAmICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4MkEvKiAqICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4MjEvKiAhICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4N0MvKiB8ICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4M0UvKiA+ICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4MjcvKiAnICovICAgICAgICAgICA9PT0gY2ggfHxcbiAgICAgIDB4MjIvKiBcIiAqLyAgICAgICAgICAgPT09IGNoIHx8XG4gICAgICAweDI1LyogJSAqLyAgICAgICAgICAgPT09IGNoIHx8XG4gICAgICAweDQwLyogQCAqLyAgICAgICAgICAgPT09IGNoIHx8XG4gICAgICAweDYwLyogYCAqLyAgICAgICAgICAgPT09IGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKDB4M0YvKiA/ICovID09PSBjaCB8fCAweDJELyogLSAqLyA9PT0gY2gpIHtcbiAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG5cbiAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykgfHxcbiAgICAgICAgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSAnc2NhbGFyJztcbiAgc3RhdGUucmVzdWx0ID0gJyc7XG4gIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTtcblxuICB3aGlsZSAoMCAhPT0gY2gpIHtcbiAgICBpZiAoMHgzQS8qIDogKi8gPT09IGNoKSB7XG4gICAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG5cbiAgICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fFxuICAgICAgICAgIHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGZvbGxvd2luZykpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKDB4MjMvKiAjICovID09PSBjaCkge1xuICAgICAgcHJlY2VkaW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiAtIDEpO1xuXG4gICAgICBpZiAoaXNfV1NfT1JfRU9MKHByZWNlZGluZykpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHx8XG4gICAgICAgICAgICAgICB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihjaCkpIHtcbiAgICAgIGJyZWFrO1xuXG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBfbGluZSA9IHN0YXRlLmxpbmU7XG4gICAgICBfbGluZVN0YXJ0ID0gc3RhdGUubGluZVN0YXJ0O1xuICAgICAgX2xpbmVJbmRlbnQgPSBzdGF0ZS5saW5lSW5kZW50O1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIC0xKTtcblxuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPj0gbm9kZUluZGVudCkge1xuICAgICAgICBoYXNQZW5kaW5nQ29udGVudCA9IHRydWU7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucG9zaXRpb24gPSBjYXB0dXJlRW5kO1xuICAgICAgICBzdGF0ZS5saW5lID0gX2xpbmU7XG4gICAgICAgIHN0YXRlLmxpbmVTdGFydCA9IF9saW5lU3RhcnQ7XG4gICAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSBfbGluZUluZGVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BlbmRpbmdDb250ZW50KSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7XG4gICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBzdGF0ZS5saW5lIC0gX2xpbmUpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uICsgMTtcbiAgICB9XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIH1cblxuICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7XG5cbiAgaWYgKHN0YXRlLnJlc3VsdCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9IF9raW5kO1xuICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIGNoLFxuICAgICAgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKDB4MjcvKiAnICovICE9PSBjaCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSAnc2NhbGFyJztcbiAgc3RhdGUucmVzdWx0ID0gJyc7XG4gIHN0YXRlLnBvc2l0aW9uKys7XG4gIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICB3aGlsZSAoMCAhPT0gKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpKSB7XG4gICAgaWYgKDB4MjcvKiAnICovID09PSBjaCkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICBpZiAoMHgyNy8qICcgKi8gPT09IGNoKSB7XG4gICAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhcicpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXInKTtcbn1cblxuZnVuY3Rpb24gcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgY2FwdHVyZUVuZCxcbiAgICAgIGhleExlbmd0aCxcbiAgICAgIGhleFJlc3VsdCxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKDB4MjIvKiBcIiAqLyAhPT0gY2gpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuICBzdGF0ZS5wb3NpdGlvbisrO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKDAgIT09IChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSkge1xuICAgIGlmICgweDIyLyogXCIgKi8gPT09IGNoKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICB9IGVsc2UgaWYgKDB4NUMvKiBcXCAqLyA9PT0gY2gpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpO1xuXG4gICAgICAgIC8vIFRPRE86IHJld29yayB0byBpbmxpbmUgZm4gd2l0aCBubyB0eXBlIGNhc3Q/XG4gICAgICB9IGVsc2UgaWYgKGNoIDwgMjU2ICYmIHNpbXBsZUVzY2FwZUNoZWNrW2NoXSkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gc2ltcGxlRXNjYXBlTWFwW2NoXTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgICAgfSBlbHNlIGlmICgodG1wID0gZXNjYXBlZEhleExlbihjaCkpID4gMCkge1xuICAgICAgICBoZXhMZW5ndGggPSB0bXA7XG4gICAgICAgIGhleFJlc3VsdCA9IDA7XG5cbiAgICAgICAgZm9yICg7IGhleExlbmd0aCA+IDA7IGhleExlbmd0aC0tKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICAgICAgaWYgKCh0bXAgPSBmcm9tSGV4Q29kZShjaCkpID49IDApIHtcbiAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjaGFyRnJvbUNvZGVwb2ludChoZXhSZXN1bHQpO1xuXG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmtub3duIGVzY2FwZSBzZXF1ZW5jZScpO1xuICAgICAgfVxuXG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhcicpO1xufVxuXG5mdW5jdGlvbiByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIHJlYWROZXh0ID0gdHJ1ZSxcbiAgICAgIF9saW5lLFxuICAgICAgX3RhZyAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBfcmVzdWx0LFxuICAgICAgX2FuY2hvciAgPSBzdGF0ZS5hbmNob3IsXG4gICAgICBmb2xsb3dpbmcsXG4gICAgICB0ZXJtaW5hdG9yLFxuICAgICAgaXNQYWlyLFxuICAgICAgaXNFeHBsaWNpdFBhaXIsXG4gICAgICBpc01hcHBpbmcsXG4gICAgICBrZXlOb2RlLFxuICAgICAga2V5VGFnLFxuICAgICAgdmFsdWVOb2RlLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4NUIvKiBbICovKSB7XG4gICAgdGVybWluYXRvciA9IDB4NUQ7LyogXSAqL1xuICAgIGlzTWFwcGluZyA9IGZhbHNlO1xuICAgIF9yZXN1bHQgPSBbXTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHg3Qi8qIHsgKi8pIHtcbiAgICB0ZXJtaW5hdG9yID0gMHg3RDsvKiB9ICovXG4gICAgaXNNYXBwaW5nID0gdHJ1ZTtcbiAgICBfcmVzdWx0ID0ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG51bGwgIT09IHN0YXRlLmFuY2hvcikge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoMCAhPT0gY2gpIHtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IHRlcm1pbmF0b3IpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgIHN0YXRlLmtpbmQgPSBpc01hcHBpbmcgPyAnbWFwcGluZycgOiAnc2VxdWVuY2UnO1xuICAgICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXJlYWROZXh0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMnKTtcbiAgICB9XG5cbiAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IGZhbHNlO1xuXG4gICAgaWYgKDB4M0YvKiA/ICovID09PSBjaCkge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHtcbiAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfbGluZSA9IHN0YXRlLmxpbmU7XG4gICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgIGtleVRhZyA9IHN0YXRlLnRhZztcbiAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmICgoaXNFeHBsaWNpdFBhaXIgfHwgc3RhdGUubGluZSA9PT0gX2xpbmUpICYmIDB4M0EvKiA6ICovID09PSBjaCkge1xuICAgICAgaXNQYWlyID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuICAgICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChpc01hcHBpbmcpIHtcbiAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFpcikge1xuICAgICAgX3Jlc3VsdC5wdXNoKHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIG51bGwsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9yZXN1bHQucHVzaChrZXlOb2RlKTtcbiAgICB9XG5cbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoMHgyQy8qICwgKi8gPT09IGNoKSB7XG4gICAgICByZWFkTmV4dCA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYWROZXh0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgZm9sZGluZyxcbiAgICAgIGNob21waW5nICAgICAgID0gQ0hPTVBJTkdfQ0xJUCxcbiAgICAgIGRldGVjdGVkSW5kZW50ID0gZmFsc2UsXG4gICAgICB0ZXh0SW5kZW50ICAgICA9IG5vZGVJbmRlbnQsXG4gICAgICBlbXB0eUxpbmVzICAgICA9IDAsXG4gICAgICBhdE1vcmVJbmRlbnRlZCA9IGZhbHNlLFxuICAgICAgdG1wLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4N0MvKiB8ICovKSB7XG4gICAgZm9sZGluZyA9IGZhbHNlO1xuICB9IGVsc2UgaWYgKGNoID09PSAweDNFLyogPiAqLykge1xuICAgIGZvbGRpbmcgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSAnc2NhbGFyJztcbiAgc3RhdGUucmVzdWx0ID0gJyc7XG5cbiAgd2hpbGUgKDAgIT09IGNoKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKDB4MkIvKiArICovID09PSBjaCB8fCAweDJELyogLSAqLyA9PT0gY2gpIHtcbiAgICAgIGlmIChDSE9NUElOR19DTElQID09PSBjaG9tcGluZykge1xuICAgICAgICBjaG9tcGluZyA9ICgweDJCLyogKyAqLyA9PT0gY2gpID8gQ0hPTVBJTkdfS0VFUCA6IENIT01QSU5HX1NUUklQO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3JlcGVhdCBvZiBhIGNob21waW5nIG1vZGUgaWRlbnRpZmllcicpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICgodG1wID0gZnJvbURlY2ltYWxDb2RlKGNoKSkgPj0gMCkge1xuICAgICAgaWYgKHRtcCA9PT0gMCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZScpO1xuICAgICAgfSBlbHNlIGlmICghZGV0ZWN0ZWRJbmRlbnQpIHtcbiAgICAgICAgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQgKyB0bXAgLSAxO1xuICAgICAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAncmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXInKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKTtcblxuICAgIGlmICgweDIzLyogIyAqLyA9PT0gY2gpIHtcbiAgICAgIGRvIHsgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOyB9XG4gICAgICB3aGlsZSAoIWlzX0VPTChjaCkgJiYgKDAgIT09IGNoKSk7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKDAgIT09IGNoKSB7XG4gICAgcmVhZExpbmVCcmVhayhzdGF0ZSk7XG4gICAgc3RhdGUubGluZUluZGVudCA9IDA7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgd2hpbGUgKCghZGV0ZWN0ZWRJbmRlbnQgfHwgc3RhdGUubGluZUluZGVudCA8IHRleHRJbmRlbnQpICYmXG4gICAgICAgICAgICgweDIwLyogU3BhY2UgKi8gPT09IGNoKSkge1xuICAgICAgc3RhdGUubGluZUluZGVudCsrO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmICghZGV0ZWN0ZWRJbmRlbnQgJiYgc3RhdGUubGluZUluZGVudCA+IHRleHRJbmRlbnQpIHtcbiAgICAgIHRleHRJbmRlbnQgPSBzdGF0ZS5saW5lSW5kZW50O1xuICAgIH1cblxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBlbXB0eUxpbmVzKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBFbmQgb2YgdGhlIHNjYWxhci5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA8IHRleHRJbmRlbnQpIHtcblxuICAgICAgLy8gUGVyZm9ybSB0aGUgY2hvbXBpbmcuXG4gICAgICBpZiAoY2hvbXBpbmcgPT09IENIT01QSU5HX0tFRVApIHtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGVtcHR5TGluZXMpO1xuICAgICAgfSBlbHNlIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfQ0xJUCkge1xuICAgICAgICBpZiAoZGV0ZWN0ZWRJbmRlbnQpIHsgLy8gaS5lLiBvbmx5IGlmIHRoZSBzY2FsYXIgaXMgbm90IGVtcHR5LlxuICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCcmVhayB0aGlzIGB3aGlsZWAgY3ljbGUgYW5kIGdvIHRvIHRoZSBmdW5jaXRvbidzIGVwaWxvZ3VlLlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gRm9sZGVkIHN0eWxlOiB1c2UgZmFuY3kgcnVsZXMgdG8gaGFuZGxlIGxpbmUgYnJlYWtzLlxuICAgIGlmIChmb2xkaW5nKSB7XG5cbiAgICAgIC8vIExpbmVzIHN0YXJ0aW5nIHdpdGggd2hpdGUgc3BhY2UgY2hhcmFjdGVycyAobW9yZS1pbmRlbnRlZCBsaW5lcykgYXJlIG5vdCBmb2xkZWQuXG4gICAgICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGVtcHR5TGluZXMgKyAxKTtcblxuICAgICAgLy8gRW5kIG9mIG1vcmUtaW5kZW50ZWQgYmxvY2suXG4gICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzICsgMSk7XG5cbiAgICAgIC8vIEp1c3Qgb25lIGxpbmUgYnJlYWsgLSBwZXJjZWl2ZSBhcyB0aGUgc2FtZSBsaW5lLlxuICAgICAgfSBlbHNlIGlmICgwID09PSBlbXB0eUxpbmVzKSB7XG4gICAgICAgIGlmIChkZXRlY3RlZEluZGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgc29tZSBzY2FsYXIgY29udGVudC5cbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gJyAnO1xuICAgICAgICB9XG5cbiAgICAgIC8vIFNldmVyYWwgbGluZSBicmVha3MgLSBwZXJjZWl2ZSBhcyBkaWZmZXJlbnQgbGluZXMuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyk7XG4gICAgICB9XG5cbiAgICAvLyBMaXRlcmFsIHN0eWxlOiBqdXN0IGFkZCBleGFjdCBudW1iZXIgb2YgbGluZSBicmVha3MgYmV0d2VlbiBjb250ZW50IGxpbmVzLlxuICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWRJbmRlbnQpIHtcbiAgICAgIC8vIElmIGN1cnJlbnQgbGluZSBpc24ndCB0aGUgZmlyc3Qgb25lIC0gY291bnQgbGluZSBicmVhayBmcm9tIHRoZSBsYXN0IGNvbnRlbnQgbGluZS5cbiAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluIGNhc2Ugb2YgdGhlIGZpcnN0IGNvbnRlbnQgbGluZSAtIGNvdW50IG9ubHkgZW1wdHkgbGluZXMuXG4gICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyk7XG4gICAgfVxuXG4gICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgIGVtcHR5TGluZXMgPSAwO1xuICAgIGNhcHR1cmVTdGFydCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgd2hpbGUgKCFpc19FT0woY2gpICYmICgwICE9PSBjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBfbGluZSxcbiAgICAgIF90YWcgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9hbmNob3IgICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIF9yZXN1bHQgICA9IFtdLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgZGV0ZWN0ZWQgID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAobnVsbCAhPT0gc3RhdGUuYW5jaG9yKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoMCAhPT0gY2gpIHtcblxuICAgIGlmICgweDJELyogLSAqLyAhPT0gY2gpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmICghaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICBzdGF0ZS5wb3NpdGlvbisrO1xuXG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPD0gbm9kZUluZGVudCkge1xuICAgICAgICBfcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19JTiwgZmFsc2UsIHRydWUpO1xuICAgIF9yZXN1bHQucHVzaChzdGF0ZS5yZXN1bHQpO1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiAoMCAhPT0gY2gpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnknKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdzZXF1ZW5jZSc7XG4gICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIG5vZGVJbmRlbnQsIGZsb3dJbmRlbnQpIHtcbiAgdmFyIGZvbGxvd2luZyxcbiAgICAgIGFsbG93Q29tcGFjdCxcbiAgICAgIF9saW5lLFxuICAgICAgX3RhZyAgICAgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9hbmNob3IgICAgICAgPSBzdGF0ZS5hbmNob3IsXG4gICAgICBfcmVzdWx0ICAgICAgID0ge30sXG4gICAgICBrZXlUYWcgICAgICAgID0gbnVsbCxcbiAgICAgIGtleU5vZGUgICAgICAgPSBudWxsLFxuICAgICAgdmFsdWVOb2RlICAgICA9IG51bGwsXG4gICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2UsXG4gICAgICBkZXRlY3RlZCAgICAgID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAobnVsbCAhPT0gc3RhdGUuYW5jaG9yKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoMCAhPT0gY2gpIHtcbiAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lOyAvLyBTYXZlIHRoZSBjdXJyZW50IGxpbmUuXG5cbiAgICAvL1xuICAgIC8vIEV4cGxpY2l0IG5vdGF0aW9uIGNhc2UuIFRoZXJlIGFyZSB0d28gc2VwYXJhdGUgYmxvY2tzOlxuICAgIC8vIGZpcnN0IGZvciB0aGUga2V5IChkZW5vdGVkIGJ5IFwiP1wiKSBhbmQgc2Vjb25kIGZvciB0aGUgdmFsdWUgKGRlbm90ZWQgYnkgXCI6XCIpXG4gICAgLy9cbiAgICBpZiAoKDB4M0YvKiA/ICovID09PSBjaCB8fCAweDNBLyogOiAqLyAgPT09IGNoKSAmJiBpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuXG4gICAgICBpZiAoMHgzRi8qID8gKi8gPT09IGNoKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwga2V5VGFnLCBrZXlOb2RlLCBudWxsKTtcbiAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgYXRFeHBsaWNpdEtleSA9IHRydWU7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG5cbiAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAvLyBpLmUuIDB4M0EvKiA6ICovID09PSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGV4cGxpY2l0IGtleS5cbiAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7XG4gICAgICBjaCA9IGZvbGxvd2luZztcblxuICAgIC8vXG4gICAgLy8gSW1wbGljaXQgbm90YXRpb24gY2FzZS4gRmxvdy1zdHlsZSBub2RlIGFzIHRoZSBrZXkgZmlyc3QsIHRoZW4gXCI6XCIsIGFuZCB0aGUgdmFsdWUuXG4gICAgLy9cbiAgICB9IGVsc2UgaWYgKGNvbXBvc2VOb2RlKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfT1VULCBmYWxzZSwgdHJ1ZSkpIHtcblxuICAgICAgaWYgKHN0YXRlLmxpbmUgPT09IF9saW5lKSB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgweDNBLyogOiAqLyA9PT0gY2gpIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgICAgICBpZiAoIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmcnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwga2V5VGFnLCBrZXlOb2RlLCBudWxsKTtcbiAgICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgICAgYWxsb3dDb21wYWN0ID0gZmFsc2U7XG4gICAgICAgICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG5cbiAgICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkge1xuICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZCcpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUudGFnID0gX3RhZztcbiAgICAgICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBLZWVwIHRoZSByZXN1bHQgb2YgYGNvbXBvc2VOb2RlYC5cbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXknKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUudGFnID0gX3RhZztcbiAgICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJlc3VsdCBvZiBgY29tcG9zZU5vZGVgLlxuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrOyAvLyBSZWFkaW5nIGlzIGRvbmUuIEdvIHRvIHRoZSBlcGlsb2d1ZS5cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIENvbW1vbiByZWFkaW5nIGNvZGUgZm9yIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0IG5vdGF0aW9ucy5cbiAgICAvL1xuICAgIGlmIChzdGF0ZS5saW5lID09PSBfbGluZSB8fCBzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCkge1xuICAgICAgaWYgKGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX09VVCwgdHJ1ZSwgYWxsb3dDb21wYWN0KSkge1xuICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghYXRFeHBsaWNpdEtleSkge1xuICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSk7XG4gICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCAmJiAoMCAhPT0gY2gpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeScpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vXG4gIC8vIEVwaWxvZ3VlLlxuICAvL1xuXG4gIC8vIFNwZWNpYWwgY2FzZTogbGFzdCBtYXBwaW5nJ3Mgbm9kZSBjb250YWlucyBvbmx5IHRoZSBrZXkgaW4gZXhwbGljaXQgbm90YXRpb24uXG4gIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwga2V5VGFnLCBrZXlOb2RlLCBudWxsKTtcbiAgfVxuXG4gIC8vIEV4cG9zZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcuXG4gIGlmIChkZXRlY3RlZCkge1xuICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICBzdGF0ZS5raW5kID0gJ21hcHBpbmcnO1xuICAgIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gZGV0ZWN0ZWQ7XG59XG5cbmZ1bmN0aW9uIHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uLFxuICAgICAgaXNWZXJiYXRpbSA9IGZhbHNlLFxuICAgICAgaXNOYW1lZCAgICA9IGZhbHNlLFxuICAgICAgdGFnSGFuZGxlLFxuICAgICAgdGFnTmFtZSxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKDB4MjEvKiAhICovICE9PSBjaCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChudWxsICE9PSBzdGF0ZS50YWcpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHknKTtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoMHgzQy8qIDwgKi8gPT09IGNoKSB7XG4gICAgaXNWZXJiYXRpbSA9IHRydWU7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIH0gZWxzZSBpZiAoMHgyMS8qICEgKi8gPT09IGNoKSB7XG4gICAgaXNOYW1lZCA9IHRydWU7XG4gICAgdGFnSGFuZGxlID0gJyEhJztcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgfSBlbHNlIHtcbiAgICB0YWdIYW5kbGUgPSAnISc7XG4gIH1cblxuICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICBpZiAoaXNWZXJiYXRpbSkge1xuICAgIGRvIHsgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOyB9XG4gICAgd2hpbGUgKDAgIT09IGNoICYmIDB4M0UvKiA+ICovICE9PSBjaCk7XG5cbiAgICBpZiAoc3RhdGUucG9zaXRpb24gPCBzdGF0ZS5sZW5ndGgpIHtcbiAgICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlICgwICE9PSBjaCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuXG4gICAgICBpZiAoMHgyMS8qICEgKi8gPT09IGNoKSB7XG4gICAgICAgIGlmICghaXNOYW1lZCkge1xuICAgICAgICAgIHRhZ0hhbmRsZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiAtIDEsIHN0YXRlLnBvc2l0aW9uICsgMSk7XG5cbiAgICAgICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KHRhZ0hhbmRsZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICduYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlzTmFtZWQgPSB0cnVlO1xuICAgICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICB0YWdOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoUEFUVEVSTl9GTE9XX0lORElDQVRPUlMudGVzdCh0YWdOYW1lKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0YWdOYW1lICYmICFQQVRURVJOX1RBR19VUkkudGVzdCh0YWdOYW1lKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICcgKyB0YWdOYW1lKTtcbiAgfVxuXG4gIGlmIChpc1ZlcmJhdGltKSB7XG4gICAgc3RhdGUudGFnID0gdGFnTmFtZTtcblxuICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLnRhZ01hcCwgdGFnSGFuZGxlKSkge1xuICAgIHN0YXRlLnRhZyA9IHN0YXRlLnRhZ01hcFt0YWdIYW5kbGVdICsgdGFnTmFtZTtcblxuICB9IGVsc2UgaWYgKCchJyA9PT0gdGFnSGFuZGxlKSB7XG4gICAgc3RhdGUudGFnID0gJyEnICsgdGFnTmFtZTtcblxuICB9IGVsc2UgaWYgKCchIScgPT09IHRhZ0hhbmRsZSkge1xuICAgIHN0YXRlLnRhZyA9ICd0YWc6eWFtbC5vcmcsMjAwMjonICsgdGFnTmFtZTtcblxuICB9IGVsc2Uge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgXCInICsgdGFnSGFuZGxlICsgJ1wiJyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlKSB7XG4gIHZhciBfcG9zaXRpb24sXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICgweDI2LyogJiAqLyAhPT0gY2gpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobnVsbCAhPT0gc3RhdGUuYW5jaG9yKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2R1cGxpY2F0aW9uIG9mIGFuIGFuY2hvciBwcm9wZXJ0eScpO1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICB3aGlsZSAoMCAhPT0gY2ggJiYgIWlzX1dTX09SX0VPTChjaCkgJiYgIWlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ25hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXInKTtcbiAgfVxuXG4gIHN0YXRlLmFuY2hvciA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVhZEFsaWFzKHN0YXRlKSB7XG4gIHZhciBfcG9zaXRpb24sIGFsaWFzLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoMHgyQS8qICogKi8gIT09IGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICB3aGlsZSAoMCAhPT0gY2ggJiYgIWlzX1dTX09SX0VPTChjaCkgJiYgIWlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ25hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlcicpO1xuICB9XG5cbiAgYWxpYXMgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoIXN0YXRlLmFuY2hvck1hcC5oYXNPd25Qcm9wZXJ0eShhbGlhcykpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5pZGVudGlmaWVkIGFsaWFzIFwiJyArIGFsaWFzICsgJ1wiJyk7XG4gIH1cblxuICBzdGF0ZS5yZXN1bHQgPSBzdGF0ZS5hbmNob3JNYXBbYWxpYXNdO1xuICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb21wb3NlTm9kZShzdGF0ZSwgcGFyZW50SW5kZW50LCBub2RlQ29udGV4dCwgYWxsb3dUb1NlZWssIGFsbG93Q29tcGFjdCkge1xuICB2YXIgYWxsb3dCbG9ja1N0eWxlcyxcbiAgICAgIGFsbG93QmxvY2tTY2FsYXJzLFxuICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zLFxuICAgICAgaW5kZW50U3RhdHVzID0gMSwgLy8gMTogdGhpcz5wYXJlbnQsIDA6IHRoaXM9cGFyZW50LCAtMTogdGhpczxwYXJlbnRcbiAgICAgIGF0TmV3TGluZSAgPSBmYWxzZSxcbiAgICAgIGhhc0NvbnRlbnQgPSBmYWxzZSxcbiAgICAgIHR5cGVJbmRleCxcbiAgICAgIHR5cGVRdWFudGl0eSxcbiAgICAgIHR5cGUsXG4gICAgICBmbG93SW5kZW50LFxuICAgICAgYmxvY2tJbmRlbnQ7XG5cbiAgc3RhdGUudGFnICAgID0gbnVsbDtcbiAgc3RhdGUuYW5jaG9yID0gbnVsbDtcbiAgc3RhdGUua2luZCAgID0gbnVsbDtcbiAgc3RhdGUucmVzdWx0ID0gbnVsbDtcblxuICBhbGxvd0Jsb2NrU3R5bGVzID0gYWxsb3dCbG9ja1NjYWxhcnMgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPVxuICAgIENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fFxuICAgIENPTlRFWFRfQkxPQ0tfSU4gID09PSBub2RlQ29udGV4dDtcblxuICBpZiAoYWxsb3dUb1NlZWspIHtcbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoMSA9PT0gaW5kZW50U3RhdHVzKSB7XG4gICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkgfHwgcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlKSkge1xuICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzO1xuXG4gICAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucykge1xuICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGF0TmV3TGluZSB8fCBhbGxvd0NvbXBhY3Q7XG4gIH1cblxuICBpZiAoMSA9PT0gaW5kZW50U3RhdHVzIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTtcbiAgICB9XG5cbiAgICBibG9ja0luZGVudCA9IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0O1xuXG4gICAgaWYgKDEgPT09IGluZGVudFN0YXR1cykge1xuICAgICAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJlxuICAgICAgICAgIChyZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpIHx8XG4gICAgICAgICAgIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIGJsb2NrSW5kZW50LCBmbG93SW5kZW50KSkgfHxcbiAgICAgICAgICByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChhbGxvd0Jsb2NrU2NhbGFycyAmJiByZWFkQmxvY2tTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB8fFxuICAgICAgICAgICAgcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkgfHxcbiAgICAgICAgICAgIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWFkQWxpYXMoc3RhdGUpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGUudGFnIHx8IG51bGwgIT09IHN0YXRlLmFuY2hvcikge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2FsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAocmVhZFBsYWluU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKG51bGwgPT09IHN0YXRlLnRhZykge1xuICAgICAgICAgICAgc3RhdGUudGFnID0gJz8nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChudWxsICE9PSBzdGF0ZS5hbmNob3IpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoMCA9PT0gaW5kZW50U3RhdHVzKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2U6IGJsb2NrIHNlcXVlbmNlcyBhcmUgYWxsb3dlZCB0byBoYXZlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwgYXMgdGhlIHBhcmVudC5cbiAgICAgIC8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjc5OTc4NFxuICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChudWxsICE9PSBzdGF0ZS50YWcgJiYgJyEnICE9PSBzdGF0ZS50YWcpIHtcbiAgICBpZiAoJz8nID09PSBzdGF0ZS50YWcpIHtcbiAgICAgIGZvciAodHlwZUluZGV4ID0gMCwgdHlwZVF1YW50aXR5ID0gc3RhdGUuaW1wbGljaXRUeXBlcy5sZW5ndGg7XG4gICAgICAgICAgIHR5cGVJbmRleCA8IHR5cGVRdWFudGl0eTtcbiAgICAgICAgICAgdHlwZUluZGV4ICs9IDEpIHtcbiAgICAgICAgdHlwZSA9IHN0YXRlLmltcGxpY2l0VHlwZXNbdHlwZUluZGV4XTtcblxuICAgICAgICAvLyBJbXBsaWNpdCByZXNvbHZpbmcgaXMgbm90IGFsbG93ZWQgZm9yIG5vbi1zY2FsYXIgdHlwZXMsIGFuZCAnPydcbiAgICAgICAgLy8gbm9uLXNwZWNpZmljIHRhZyBpcyBvbmx5IGFzc2lnbmVkIHRvIHBsYWluIHNjYWxhcnMuIFNvLCBpdCBpc24ndFxuICAgICAgICAvLyBuZWVkZWQgdG8gY2hlY2sgZm9yICdraW5kJyBjb25mb3JtaXR5LlxuXG4gICAgICAgIGlmICh0eXBlLnJlc29sdmUoc3RhdGUucmVzdWx0KSkgeyAvLyBgc3RhdGUucmVzdWx0YCB1cGRhdGVkIGluIHJlc29sdmVyIGlmIG1hdGNoZWRcbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQpO1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICAgIGlmIChudWxsICE9PSBzdGF0ZS5hbmNob3IpIHtcbiAgICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUudHlwZU1hcCwgc3RhdGUudGFnKSkge1xuICAgICAgdHlwZSA9IHN0YXRlLnR5cGVNYXBbc3RhdGUudGFnXTtcblxuICAgICAgaWYgKG51bGwgIT09IHN0YXRlLnJlc3VsdCAmJiB0eXBlLmtpbmQgIT09IHN0YXRlLmtpbmQpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8JyArIHN0YXRlLnRhZyArICc+IHRhZzsgaXQgc2hvdWxkIGJlIFwiJyArIHR5cGUua2luZCArICdcIiwgbm90IFwiJyArIHN0YXRlLmtpbmQgKyAnXCInKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0eXBlLnJlc29sdmUoc3RhdGUucmVzdWx0KSkgeyAvLyBgc3RhdGUucmVzdWx0YCB1cGRhdGVkIGluIHJlc29sdmVyIGlmIG1hdGNoZWRcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Nhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8JyArIHN0YXRlLnRhZyArICc+IGV4cGxpY2l0IHRhZycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucmVzdWx0ID0gdHlwZS5jb25zdHJ1Y3Qoc3RhdGUucmVzdWx0KTtcbiAgICAgICAgaWYgKG51bGwgIT09IHN0YXRlLmFuY2hvcikge1xuICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmtub3duIHRhZyAhPCcgKyBzdGF0ZS50YWcgKyAnPicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsICE9PSBzdGF0ZS50YWcgfHwgbnVsbCAhPT0gc3RhdGUuYW5jaG9yIHx8IGhhc0NvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHJlYWREb2N1bWVudChzdGF0ZSkge1xuICB2YXIgZG9jdW1lbnRTdGFydCA9IHN0YXRlLnBvc2l0aW9uLFxuICAgICAgX3Bvc2l0aW9uLFxuICAgICAgZGlyZWN0aXZlTmFtZSxcbiAgICAgIGRpcmVjdGl2ZUFyZ3MsXG4gICAgICBoYXNEaXJlY3RpdmVzID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBzdGF0ZS52ZXJzaW9uID0gbnVsbDtcbiAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gc3RhdGUubGVnYWN5O1xuICBzdGF0ZS50YWdNYXAgPSB7fTtcbiAgc3RhdGUuYW5jaG9yTWFwID0ge307XG5cbiAgd2hpbGUgKDAgIT09IChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IDAgfHwgMHgyNS8qICUgKi8gIT09IGNoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoMCAhPT0gY2ggJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgZGlyZWN0aXZlQXJncyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCcpO1xuICAgIH1cblxuICAgIHdoaWxlICgwICE9PSBjaCkge1xuICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmICgweDIzLyogIyAqLyA9PT0gY2gpIHtcbiAgICAgICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICAgICAgd2hpbGUgKDAgIT09IGNoICYmICFpc19FT0woY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgICAgd2hpbGUgKDAgIT09IGNoICYmICFpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgZGlyZWN0aXZlQXJncy5wdXNoKHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pKTtcbiAgICB9XG5cbiAgICBpZiAoMCAhPT0gY2gpIHtcbiAgICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RpdmVIYW5kbGVycywgZGlyZWN0aXZlTmFtZSkpIHtcbiAgICAgIGRpcmVjdGl2ZUhhbmRsZXJzW2RpcmVjdGl2ZU5hbWVdKHN0YXRlLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgXCInICsgZGlyZWN0aXZlTmFtZSArICdcIicpO1xuICAgIH1cbiAgfVxuXG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICBpZiAoMCA9PT0gc3RhdGUubGluZUluZGVudCAmJlxuICAgICAgMHgyRC8qIC0gKi8gPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pICYmXG4gICAgICAweDJELyogLSAqLyA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpICYmXG4gICAgICAweDJELyogLSAqLyA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDIpKSB7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG5cbiAgfSBlbHNlIGlmIChoYXNEaXJlY3RpdmVzKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGNvbXBvc2VOb2RlKHN0YXRlLCBzdGF0ZS5saW5lSW5kZW50IC0gMSwgQ09OVEVYVF9CTE9DS19PVVQsIGZhbHNlLCB0cnVlKTtcbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5jaGVja0xpbmVCcmVha3MgJiZcbiAgICAgIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3Qoc3RhdGUuaW5wdXQuc2xpY2UoZG9jdW1lbnRTdGFydCwgc3RhdGUucG9zaXRpb24pKSkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ25vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCcpO1xuICB9XG5cbiAgc3RhdGUuZG9jdW1lbnRzLnB1c2goc3RhdGUucmVzdWx0KTtcblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG5cbiAgICBpZiAoMHgyRS8qIC4gKi8gPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAzO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPCAoc3RhdGUubGVuZ3RoIC0gMSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkge1xuXG4gICAgLy8gQWRkIHRhaWxpbmcgYFxcbmAgaWYgbm90IGV4aXN0c1xuICAgIGlmICgweDBBLyogTEYgKi8gIT09IGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgJiZcbiAgICAgICAgMHgwRC8qIENSICovICE9PSBpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpKSB7XG4gICAgICBpbnB1dCArPSAnXFxuJztcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBCT01cbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZShpbnB1dCwgb3B0aW9ucyk7XG5cbiAgLy8gVXNlIDAgYXMgc3RyaW5nIHRlcm1pbmF0b3IuIFRoYXQgc2lnbmlmaWNhbnRseSBzaW1wbGlmaWVzIGJvdW5kcyBjaGVjay5cbiAgc3RhdGUuaW5wdXQgKz0gJ1xcMCc7XG5cbiAgd2hpbGUgKDB4MjAvKiBTcGFjZSAqLyA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpIHtcbiAgICBzdGF0ZS5saW5lSW5kZW50ICs9IDE7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5wb3NpdGlvbiA8IChzdGF0ZS5sZW5ndGggLSAxKSkge1xuICAgIHJlYWREb2N1bWVudChzdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGUuZG9jdW1lbnRzO1xufVxuXG5cbmZ1bmN0aW9uIGxvYWRBbGwoaW5wdXQsIGl0ZXJhdG9yLCBvcHRpb25zKSB7XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSwgaW5kZXgsIGxlbmd0aDtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gZG9jdW1lbnRzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBpdGVyYXRvcihkb2N1bWVudHNbaW5kZXhdKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGxvYWQoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIGlmICgwID09PSBkb2N1bWVudHMubGVuZ3RoKSB7XG4gICAgLyplc2xpbnQtZGlzYWJsZSBuby11bmRlZmluZWQqL1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAoMSA9PT0gZG9jdW1lbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBkb2N1bWVudHNbMF07XG4gIH1cbiAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ2V4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlJyk7XG59XG5cblxuZnVuY3Rpb24gc2FmZUxvYWRBbGwoaW5wdXQsIG91dHB1dCwgb3B0aW9ucykge1xuICBsb2FkQWxsKGlucHV0LCBvdXRwdXQsIGNvbW1vbi5leHRlbmQoeyBzY2hlbWE6IERFRkFVTFRfU0FGRV9TQ0hFTUEgfSwgb3B0aW9ucykpO1xufVxuXG5cbmZ1bmN0aW9uIHNhZmVMb2FkKGlucHV0LCBvcHRpb25zKSB7XG4gIHJldHVybiBsb2FkKGlucHV0LCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cy5sb2FkQWxsICAgICA9IGxvYWRBbGw7XG5tb2R1bGUuZXhwb3J0cy5sb2FkICAgICAgICA9IGxvYWQ7XG5tb2R1bGUuZXhwb3J0cy5zYWZlTG9hZEFsbCA9IHNhZmVMb2FkQWxsO1xubW9kdWxlLmV4cG9ydHMuc2FmZUxvYWQgICAgPSBzYWZlTG9hZDtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxuXG5mdW5jdGlvbiBNYXJrKG5hbWUsIGJ1ZmZlciwgcG9zaXRpb24sIGxpbmUsIGNvbHVtbikge1xuICB0aGlzLm5hbWUgICAgID0gbmFtZTtcbiAgdGhpcy5idWZmZXIgICA9IGJ1ZmZlcjtcbiAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICB0aGlzLmxpbmUgICAgID0gbGluZTtcbiAgdGhpcy5jb2x1bW4gICA9IGNvbHVtbjtcbn1cblxuXG5NYXJrLnByb3RvdHlwZS5nZXRTbmlwcGV0ID0gZnVuY3Rpb24gZ2V0U25pcHBldChpbmRlbnQsIG1heExlbmd0aCkge1xuICB2YXIgaGVhZCwgc3RhcnQsIHRhaWwsIGVuZCwgc25pcHBldDtcblxuICBpZiAoIXRoaXMuYnVmZmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbmRlbnQgPSBpbmRlbnQgfHwgNDtcbiAgbWF4TGVuZ3RoID0gbWF4TGVuZ3RoIHx8IDc1O1xuXG4gIGhlYWQgPSAnJztcbiAgc3RhcnQgPSB0aGlzLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChzdGFydCA+IDAgJiYgLTEgPT09ICdcXHgwMFxcclxcblxceDg1XFx1MjAyOFxcdTIwMjknLmluZGV4T2YodGhpcy5idWZmZXIuY2hhckF0KHN0YXJ0IC0gMSkpKSB7XG4gICAgc3RhcnQgLT0gMTtcbiAgICBpZiAodGhpcy5wb3NpdGlvbiAtIHN0YXJ0ID4gKG1heExlbmd0aCAvIDIgLSAxKSkge1xuICAgICAgaGVhZCA9ICcgLi4uICc7XG4gICAgICBzdGFydCArPSA1O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdGFpbCA9ICcnO1xuICBlbmQgPSB0aGlzLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChlbmQgPCB0aGlzLmJ1ZmZlci5sZW5ndGggJiYgLTEgPT09ICdcXHgwMFxcclxcblxceDg1XFx1MjAyOFxcdTIwMjknLmluZGV4T2YodGhpcy5idWZmZXIuY2hhckF0KGVuZCkpKSB7XG4gICAgZW5kICs9IDE7XG4gICAgaWYgKGVuZCAtIHRoaXMucG9zaXRpb24gPiAobWF4TGVuZ3RoIC8gMiAtIDEpKSB7XG4gICAgICB0YWlsID0gJyAuLi4gJztcbiAgICAgIGVuZCAtPSA1O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc25pcHBldCA9IHRoaXMuYnVmZmVyLnNsaWNlKHN0YXJ0LCBlbmQpO1xuXG4gIHJldHVybiBjb21tb24ucmVwZWF0KCcgJywgaW5kZW50KSArIGhlYWQgKyBzbmlwcGV0ICsgdGFpbCArICdcXG4nICtcbiAgICAgICAgIGNvbW1vbi5yZXBlYXQoJyAnLCBpbmRlbnQgKyB0aGlzLnBvc2l0aW9uIC0gc3RhcnQgKyBoZWFkLmxlbmd0aCkgKyAnXic7XG59O1xuXG5cbk1hcmsucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoY29tcGFjdCkge1xuICB2YXIgc25pcHBldCwgd2hlcmUgPSAnJztcblxuICBpZiAodGhpcy5uYW1lKSB7XG4gICAgd2hlcmUgKz0gJ2luIFwiJyArIHRoaXMubmFtZSArICdcIiAnO1xuICB9XG5cbiAgd2hlcmUgKz0gJ2F0IGxpbmUgJyArICh0aGlzLmxpbmUgKyAxKSArICcsIGNvbHVtbiAnICsgKHRoaXMuY29sdW1uICsgMSk7XG5cbiAgaWYgKCFjb21wYWN0KSB7XG4gICAgc25pcHBldCA9IHRoaXMuZ2V0U25pcHBldCgpO1xuXG4gICAgaWYgKHNuaXBwZXQpIHtcbiAgICAgIHdoZXJlICs9ICc6XFxuJyArIHNuaXBwZXQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdoZXJlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcms7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbWF4LWxlbiovXG5cbnZhciBjb21tb24gICAgICAgID0gcmVxdWlyZSgnLi9jb21tb24nKTtcbnZhciBZQU1MRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcbnZhciBUeXBlICAgICAgICAgID0gcmVxdWlyZSgnLi90eXBlJyk7XG5cblxuZnVuY3Rpb24gY29tcGlsZUxpc3Qoc2NoZW1hLCBuYW1lLCByZXN1bHQpIHtcbiAgdmFyIGV4Y2x1ZGUgPSBbXTtcblxuICBzY2hlbWEuaW5jbHVkZS5mb3JFYWNoKGZ1bmN0aW9uIChpbmNsdWRlZFNjaGVtYSkge1xuICAgIHJlc3VsdCA9IGNvbXBpbGVMaXN0KGluY2x1ZGVkU2NoZW1hLCBuYW1lLCByZXN1bHQpO1xuICB9KTtcblxuICBzY2hlbWFbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudFR5cGUpIHtcbiAgICByZXN1bHQuZm9yRWFjaChmdW5jdGlvbiAocHJldmlvdXNUeXBlLCBwcmV2aW91c0luZGV4KSB7XG4gICAgICBpZiAocHJldmlvdXNUeXBlLnRhZyA9PT0gY3VycmVudFR5cGUudGFnKSB7XG4gICAgICAgIGV4Y2x1ZGUucHVzaChwcmV2aW91c0luZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlc3VsdC5wdXNoKGN1cnJlbnRUeXBlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24gKHR5cGUsIGluZGV4KSB7XG4gICAgcmV0dXJuIC0xID09PSBleGNsdWRlLmluZGV4T2YoaW5kZXgpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiBjb21waWxlTWFwKC8qIGxpc3RzLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fSwgaW5kZXgsIGxlbmd0aDtcblxuICBmdW5jdGlvbiBjb2xsZWN0VHlwZSh0eXBlKSB7XG4gICAgcmVzdWx0W3R5cGUudGFnXSA9IHR5cGU7XG4gIH1cblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBhcmd1bWVudHNbaW5kZXhdLmZvckVhY2goY29sbGVjdFR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG5mdW5jdGlvbiBTY2hlbWEoZGVmaW5pdGlvbikge1xuICB0aGlzLmluY2x1ZGUgID0gZGVmaW5pdGlvbi5pbmNsdWRlICB8fCBbXTtcbiAgdGhpcy5pbXBsaWNpdCA9IGRlZmluaXRpb24uaW1wbGljaXQgfHwgW107XG4gIHRoaXMuZXhwbGljaXQgPSBkZWZpbml0aW9uLmV4cGxpY2l0IHx8IFtdO1xuXG4gIHRoaXMuaW1wbGljaXQuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIGlmICh0eXBlLmxvYWRLaW5kICYmICdzY2FsYXInICE9PSB0eXBlLmxvYWRLaW5kKSB7XG4gICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuICB9KTtcblxuICB0aGlzLmNvbXBpbGVkSW1wbGljaXQgPSBjb21waWxlTGlzdCh0aGlzLCAnaW1wbGljaXQnLCBbXSk7XG4gIHRoaXMuY29tcGlsZWRFeHBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsICdleHBsaWNpdCcsIFtdKTtcbiAgdGhpcy5jb21waWxlZFR5cGVNYXAgID0gY29tcGlsZU1hcCh0aGlzLmNvbXBpbGVkSW1wbGljaXQsIHRoaXMuY29tcGlsZWRFeHBsaWNpdCk7XG59XG5cblxuU2NoZW1hLkRFRkFVTFQgPSBudWxsO1xuXG5cblNjaGVtYS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGVTY2hlbWEoKSB7XG4gIHZhciBzY2hlbWFzLCB0eXBlcztcblxuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgY2FzZSAxOlxuICAgIHNjaGVtYXMgPSBTY2hlbWEuREVGQVVMVDtcbiAgICB0eXBlcyA9IGFyZ3VtZW50c1swXTtcbiAgICBicmVhaztcblxuICBjYXNlIDI6XG4gICAgc2NoZW1hcyA9IGFyZ3VtZW50c1swXTtcbiAgICB0eXBlcyA9IGFyZ3VtZW50c1sxXTtcbiAgICBicmVhaztcblxuICBkZWZhdWx0OlxuICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBTY2hlbWEuY3JlYXRlIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBzY2hlbWFzID0gY29tbW9uLnRvQXJyYXkoc2NoZW1hcyk7XG4gIHR5cGVzID0gY29tbW9uLnRvQXJyYXkodHlwZXMpO1xuXG4gIGlmICghc2NoZW1hcy5ldmVyeShmdW5jdGlvbiAoc2NoZW1hKSB7IHJldHVybiBzY2hlbWEgaW5zdGFuY2VvZiBTY2hlbWE7IH0pKSB7XG4gICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1NwZWNpZmllZCBsaXN0IG9mIHN1cGVyIHNjaGVtYXMgKG9yIGEgc2luZ2xlIFNjaGVtYSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVNjaGVtYSBvYmplY3QuJyk7XG4gIH1cblxuICBpZiAoIXR5cGVzLmV2ZXJ5KGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiB0eXBlIGluc3RhbmNlb2YgVHlwZTsgfSkpIHtcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LicpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTY2hlbWEoe1xuICAgIGluY2x1ZGU6IHNjaGVtYXMsXG4gICAgZXhwbGljaXQ6IHR5cGVzXG4gIH0pO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYTtcbiIsIi8vIFN0YW5kYXJkIFlBTUwncyBDb3JlIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwNDkyM1xuLy9cbi8vIE5PVEU6IEpTLVlBTUwgZG9lcyBub3Qgc3VwcG9ydCBzY2hlbWEtc3BlY2lmaWMgdGFnIHJlc29sdXRpb24gcmVzdHJpY3Rpb25zLlxuLy8gU28sIENvcmUgc2NoZW1hIGhhcyBubyBkaXN0aW5jdGlvbnMgZnJvbSBKU09OIHNjaGVtYSBpcyBKUy1ZQU1MLlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgaW5jbHVkZTogW1xuICAgIHJlcXVpcmUoJy4vanNvbicpXG4gIF1cbn0pO1xuIiwiLy8gSlMtWUFNTCdzIGRlZmF1bHQgc2NoZW1hIGZvciBgbG9hZGAgZnVuY3Rpb24uXG4vLyBJdCBpcyBub3QgZGVzY3JpYmVkIGluIHRoZSBZQU1MIHNwZWNpZmljYXRpb24uXG4vL1xuLy8gVGhpcyBzY2hlbWEgaXMgYmFzZWQgb24gSlMtWUFNTCdzIGRlZmF1bHQgc2FmZSBzY2hlbWEgYW5kIGluY2x1ZGVzXG4vLyBKYXZhU2NyaXB0LXNwZWNpZmljIHR5cGVzOiAhIWpzL3VuZGVmaW5lZCwgISFqcy9yZWdleHAgYW5kICEhanMvZnVuY3Rpb24uXG4vL1xuLy8gQWxzbyB0aGlzIHNjaGVtYSBpcyB1c2VkIGFzIGRlZmF1bHQgYmFzZSBzY2hlbWEgYXQgYFNjaGVtYS5jcmVhdGVgIGZ1bmN0aW9uLlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBTY2hlbWEuREVGQVVMVCA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9kZWZhdWx0X3NhZmUnKVxuICBdLFxuICBleHBsaWNpdDogW1xuICAgIHJlcXVpcmUoJy4uL3R5cGUvanMvdW5kZWZpbmVkJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9qcy9yZWdleHAnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2pzL2Z1bmN0aW9uJylcbiAgXVxufSk7XG4iLCIvLyBKUy1ZQU1MJ3MgZGVmYXVsdCBzY2hlbWEgZm9yIGBzYWZlTG9hZGAgZnVuY3Rpb24uXG4vLyBJdCBpcyBub3QgZGVzY3JpYmVkIGluIHRoZSBZQU1MIHNwZWNpZmljYXRpb24uXG4vL1xuLy8gVGhpcyBzY2hlbWEgaXMgYmFzZWQgb24gc3RhbmRhcmQgWUFNTCdzIENvcmUgc2NoZW1hIGFuZCBpbmNsdWRlcyBtb3N0IG9mXG4vLyBleHRyYSB0eXBlcyBkZXNjcmliZWQgYXQgWUFNTCB0YWcgcmVwb3NpdG9yeS4gKGh0dHA6Ly95YW1sLm9yZy90eXBlLylcblxuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYSh7XG4gIGluY2x1ZGU6IFtcbiAgICByZXF1aXJlKCcuL2NvcmUnKVxuICBdLFxuICBpbXBsaWNpdDogW1xuICAgIHJlcXVpcmUoJy4uL3R5cGUvdGltZXN0YW1wJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9tZXJnZScpXG4gIF0sXG4gIGV4cGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9iaW5hcnknKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL29tYXAnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL3BhaXJzJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9zZXQnKVxuICBdXG59KTtcbiIsIi8vIFN0YW5kYXJkIFlBTUwncyBGYWlsc2FmZSBzY2hlbWEuXG4vLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDIzNDZcblxuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYSh7XG4gIGV4cGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9zdHInKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL3NlcScpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvbWFwJylcbiAgXVxufSk7XG4iLCIvLyBTdGFuZGFyZCBZQU1MJ3MgSlNPTiBzY2hlbWEuXG4vLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDMyMzFcbi8vXG4vLyBOT1RFOiBKUy1ZQU1MIGRvZXMgbm90IHN1cHBvcnQgc2NoZW1hLXNwZWNpZmljIHRhZyByZXNvbHV0aW9uIHJlc3RyaWN0aW9ucy5cbi8vIFNvLCB0aGlzIHNjaGVtYSBpcyBub3Qgc3VjaCBzdHJpY3QgYXMgZGVmaW5lZCBpbiB0aGUgWUFNTCBzcGVjaWZpY2F0aW9uLlxuLy8gSXQgYWxsb3dzIG51bWJlcnMgaW4gYmluYXJ5IG5vdGFpb24sIHVzZSBgTnVsbGAgYW5kIGBOVUxMYCBhcyBgbnVsbGAsIGV0Yy5cblxuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYSh7XG4gIGluY2x1ZGU6IFtcbiAgICByZXF1aXJlKCcuL2ZhaWxzYWZlJylcbiAgXSxcbiAgaW1wbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL251bGwnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2Jvb2wnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2ludCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvZmxvYXQnKVxuICBdXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFlBTUxFeGNlcHRpb24gPSByZXF1aXJlKCcuL2V4Y2VwdGlvbicpO1xuXG52YXIgVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TID0gW1xuICAna2luZCcsXG4gICdyZXNvbHZlJyxcbiAgJ2NvbnN0cnVjdCcsXG4gICdpbnN0YW5jZU9mJyxcbiAgJ3ByZWRpY2F0ZScsXG4gICdyZXByZXNlbnQnLFxuICAnZGVmYXVsdFN0eWxlJyxcbiAgJ3N0eWxlQWxpYXNlcydcbl07XG5cbnZhciBZQU1MX05PREVfS0lORFMgPSBbXG4gICdzY2FsYXInLFxuICAnc2VxdWVuY2UnLFxuICAnbWFwcGluZydcbl07XG5cbmZ1bmN0aW9uIGNvbXBpbGVTdHlsZUFsaWFzZXMobWFwKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAobnVsbCAhPT0gbWFwKSB7XG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgbWFwW3N0eWxlXS5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgICByZXN1bHRbU3RyaW5nKGFsaWFzKV0gPSBzdHlsZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gVHlwZSh0YWcsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICgtMSA9PT0gVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TLmluZGV4T2YobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdVbmtub3duIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mIFwiJyArIHRhZyArICdcIiBZQU1MIHR5cGUuJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBUT0RPOiBBZGQgdGFnIGZvcm1hdCBjaGVjay5cbiAgdGhpcy50YWcgICAgICAgICAgPSB0YWc7XG4gIHRoaXMua2luZCAgICAgICAgID0gb3B0aW9uc1sna2luZCddICAgICAgICAgfHwgbnVsbDtcbiAgdGhpcy5yZXNvbHZlICAgICAgPSBvcHRpb25zWydyZXNvbHZlJ10gICAgICB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xuICB0aGlzLmNvbnN0cnVjdCAgICA9IG9wdGlvbnNbJ2NvbnN0cnVjdCddICAgIHx8IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhOyB9O1xuICB0aGlzLmluc3RhbmNlT2YgICA9IG9wdGlvbnNbJ2luc3RhbmNlT2YnXSAgIHx8IG51bGw7XG4gIHRoaXMucHJlZGljYXRlICAgID0gb3B0aW9uc1sncHJlZGljYXRlJ10gICAgfHwgbnVsbDtcbiAgdGhpcy5yZXByZXNlbnQgICAgPSBvcHRpb25zWydyZXByZXNlbnQnXSAgICB8fCBudWxsO1xuICB0aGlzLmRlZmF1bHRTdHlsZSA9IG9wdGlvbnNbJ2RlZmF1bHRTdHlsZSddIHx8IG51bGw7XG4gIHRoaXMuc3R5bGVBbGlhc2VzID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWydzdHlsZUFsaWFzZXMnXSB8fCBudWxsKTtcblxuICBpZiAoLTEgPT09IFlBTUxfTk9ERV9LSU5EUy5pbmRleE9mKHRoaXMua2luZCkpIHtcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignVW5rbm93biBraW5kIFwiJyArIHRoaXMua2luZCArICdcIiBpcyBzcGVjaWZpZWQgZm9yIFwiJyArIHRhZyArICdcIiBZQU1MIHR5cGUuJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUeXBlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKmVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UqL1xuXG4vLyBBIHRyaWNrIGZvciBicm93c2VyaWZpZWQgdmVyc2lvbi5cbi8vIFNpbmNlIHdlIG1ha2UgYnJvd3NlcmlmaWVyIHRvIGlnbm9yZSBgYnVmZmVyYCBtb2R1bGUsIE5vZGVCdWZmZXIgd2lsbCBiZSB1bmRlZmluZWRcbnZhciBOb2RlQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIFR5cGUgICAgICAgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cblxuLy8gWyA2NCwgNjUsIDY2IF0gLT4gWyBwYWRkaW5nLCBDUiwgTEYgXVxudmFyIEJBU0U2NF9NQVAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cXG5cXHInO1xuXG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sQmluYXJ5KGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgY29kZSwgaWR4LCBiaXRsZW4gPSAwLCBtYXggPSBkYXRhLmxlbmd0aCwgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IG9uZSBieSBvbmUuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGNvZGUgPSBtYXAuaW5kZXhPZihkYXRhLmNoYXJBdChpZHgpKTtcblxuICAgIC8vIFNraXAgQ1IvTEZcbiAgICBpZiAoY29kZSA+IDY0KSB7IGNvbnRpbnVlOyB9XG5cbiAgICAvLyBGYWlsIG9uIGlsbGVnYWwgY2hhcmFjdGVyc1xuICAgIGlmIChjb2RlIDwgMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgIGJpdGxlbiArPSA2O1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBiaXRzIGxlZnQsIHNvdXJjZSB3YXMgY29ycnVwdGVkXG4gIHJldHVybiAoYml0bGVuICUgOCkgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCaW5hcnkoZGF0YSkge1xuICB2YXIgaWR4LCB0YWlsYml0cyxcbiAgICAgIGlucHV0ID0gZGF0YS5yZXBsYWNlKC9bXFxyXFxuPV0vZywgJycpLCAvLyByZW1vdmUgQ1IvTEYgJiBwYWRkaW5nIHRvIHNpbXBsaWZ5IHNjYW5cbiAgICAgIG1heCA9IGlucHV0Lmxlbmd0aCxcbiAgICAgIG1hcCA9IEJBU0U2NF9NQVAsXG4gICAgICBiaXRzID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIC8vIENvbGxlY3QgYnkgNio0IGJpdHMgKDMgYnl0ZXMpXG5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgaWYgKChpZHggJSA0ID09PSAwKSAmJiBpZHgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDE2KSAmIDB4RkYpO1xuICAgICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gOCkgJiAweEZGKTtcbiAgICAgIHJlc3VsdC5wdXNoKGJpdHMgJiAweEZGKTtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgNikgfCBtYXAuaW5kZXhPZihpbnB1dC5jaGFyQXQoaWR4KSk7XG4gIH1cblxuICAvLyBEdW1wIHRhaWxcblxuICB0YWlsYml0cyA9IChtYXggJSA0KSAqIDY7XG5cbiAgaWYgKHRhaWxiaXRzID09PSAwKSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMTYpICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gOCkgJiAweEZGKTtcbiAgICByZXN1bHQucHVzaChiaXRzICYgMHhGRik7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMTApICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMikgJiAweEZGKTtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiA0KSAmIDB4RkYpO1xuICB9XG5cbiAgLy8gV3JhcCBpbnRvIEJ1ZmZlciBmb3IgTm9kZUpTIGFuZCBsZWF2ZSBBcnJheSBmb3IgYnJvd3NlclxuICBpZiAoTm9kZUJ1ZmZlcikge1xuICAgIHJldHVybiBuZXcgTm9kZUJ1ZmZlcihyZXN1bHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEJpbmFyeShvYmplY3QgLyosIHN0eWxlKi8pIHtcbiAgdmFyIHJlc3VsdCA9ICcnLCBiaXRzID0gMCwgaWR4LCB0YWlsLFxuICAgICAgbWF4ID0gb2JqZWN0Lmxlbmd0aCxcbiAgICAgIG1hcCA9IEJBU0U2NF9NQVA7XG5cbiAgLy8gQ29udmVydCBldmVyeSB0aHJlZSBieXRlcyB0byA0IEFTQ0lJIGNoYXJhY3RlcnMuXG5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgaWYgKChpZHggJSAzID09PSAwKSAmJiBpZHgpIHtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTgpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M0ZdO1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiA2KSAmIDB4M0ZdO1xuICAgICAgcmVzdWx0ICs9IG1hcFtiaXRzICYgMHgzRl07XG4gICAgfVxuXG4gICAgYml0cyA9IChiaXRzIDw8IDgpICsgb2JqZWN0W2lkeF07XG4gIH1cblxuICAvLyBEdW1wIHRhaWxcblxuICB0YWlsID0gbWF4ICUgMztcblxuICBpZiAodGFpbCA9PT0gMCkge1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTgpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDYpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFtiaXRzICYgMHgzRl07XG4gIH0gZWxzZSBpZiAodGFpbCA9PT0gMikge1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTApICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiA0KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPDwgMikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWzY0XTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAxKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPDwgNCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWzY0XTtcbiAgICByZXN1bHQgKz0gbWFwWzY0XTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzQmluYXJ5KG9iamVjdCkge1xuICByZXR1cm4gTm9kZUJ1ZmZlciAmJiBOb2RlQnVmZmVyLmlzQnVmZmVyKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmJpbmFyeScsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sQmluYXJ5LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCaW5hcnksXG4gIHByZWRpY2F0ZTogaXNCaW5hcnksXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEJpbmFyeVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEJvb2xlYW4oZGF0YSkge1xuICBpZiAobnVsbCA9PT0gZGF0YSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcblxuICByZXR1cm4gKG1heCA9PT0gNCAmJiAoZGF0YSA9PT0gJ3RydWUnIHx8IGRhdGEgPT09ICdUcnVlJyB8fCBkYXRhID09PSAnVFJVRScpKSB8fFxuICAgICAgICAgKG1heCA9PT0gNSAmJiAoZGF0YSA9PT0gJ2ZhbHNlJyB8fCBkYXRhID09PSAnRmFsc2UnIHx8IGRhdGEgPT09ICdGQUxTRScpKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJvb2xlYW4oZGF0YSkge1xuICByZXR1cm4gZGF0YSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICBkYXRhID09PSAnVHJ1ZScgfHxcbiAgICAgICAgIGRhdGEgPT09ICdUUlVFJztcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuKG9iamVjdCkge1xuICByZXR1cm4gJ1tvYmplY3QgQm9vbGVhbl0nID09PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sQm9vbGVhbixcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQm9vbGVhbixcbiAgcHJlZGljYXRlOiBpc0Jvb2xlYW4sXG4gIHJlcHJlc2VudDoge1xuICAgIGxvd2VyY2FzZTogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gb2JqZWN0ID8gJ3RydWUnIDogJ2ZhbHNlJzsgfSxcbiAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuIG9iamVjdCA/ICdUUlVFJyA6ICdGQUxTRSc7IH0sXG4gICAgY2FtZWxjYXNlOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiBvYmplY3QgPyAnVHJ1ZScgOiAnRmFsc2UnOyB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogJ2xvd2VyY2FzZSdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgVHlwZSAgID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG52YXIgWUFNTF9GTE9BVF9QQVRURVJOID0gbmV3IFJlZ0V4cChcbiAgJ14oPzpbLStdPyg/OlswLTldWzAtOV9dKilcXFxcLlswLTlfXSooPzpbZUVdWy0rXVswLTldKyk/JyArXG4gICd8XFxcXC5bMC05X10rKD86W2VFXVstK11bMC05XSspPycgK1xuICAnfFstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXFxcLlswLTlfXSonICtcbiAgJ3xbLStdP1xcXFwuKD86aW5mfEluZnxJTkYpJyArXG4gICd8XFxcXC4oPzpuYW58TmFOfE5BTikpJCcpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sRmxvYXQoZGF0YSkge1xuICB2YXIgdmFsdWUsIHNpZ24sIGJhc2UsIGRpZ2l0cztcblxuICB2YWx1ZSAgPSBkYXRhLnJlcGxhY2UoL18vZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gICA9ICctJyA9PT0gdmFsdWVbMF0gPyAtMSA6IDE7XG4gIGRpZ2l0cyA9IFtdO1xuXG4gIGlmICgwIDw9ICcrLScuaW5kZXhPZih2YWx1ZVswXSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICB9XG5cbiAgaWYgKCcuaW5mJyA9PT0gdmFsdWUpIHtcbiAgICByZXR1cm4gKDEgPT09IHNpZ24pID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXG4gIH0gZWxzZSBpZiAoJy5uYW4nID09PSB2YWx1ZSkge1xuICAgIHJldHVybiBOYU47XG5cbiAgfSBlbHNlIGlmICgwIDw9IHZhbHVlLmluZGV4T2YoJzonKSkge1xuICAgIHZhbHVlLnNwbGl0KCc6JykuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgZGlnaXRzLnVuc2hpZnQocGFyc2VGbG9hdCh2LCAxMCkpO1xuICAgIH0pO1xuXG4gICAgdmFsdWUgPSAwLjA7XG4gICAgYmFzZSA9IDE7XG5cbiAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xuICAgICAgdmFsdWUgKz0gZCAqIGJhc2U7XG4gICAgICBiYXNlICo9IDYwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTtcblxuICB9XG4gIHJldHVybiBzaWduICogcGFyc2VGbG9hdCh2YWx1ZSwgMTApO1xufVxuXG5cbnZhciBTQ0lFTlRJRklDX1dJVEhPVVRfRE9UID0gL15bLStdP1swLTldK2UvO1xuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sRmxvYXQob2JqZWN0LCBzdHlsZSkge1xuICB2YXIgcmVzO1xuXG4gIGlmIChpc05hTihvYmplY3QpKSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgIGNhc2UgJ2xvd2VyY2FzZSc6XG4gICAgICByZXR1cm4gJy5uYW4nO1xuICAgIGNhc2UgJ3VwcGVyY2FzZSc6XG4gICAgICByZXR1cm4gJy5OQU4nO1xuICAgIGNhc2UgJ2NhbWVsY2FzZSc6XG4gICAgICByZXR1cm4gJy5OYU4nO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICBjYXNlICdsb3dlcmNhc2UnOlxuICAgICAgcmV0dXJuICcuaW5mJztcbiAgICBjYXNlICd1cHBlcmNhc2UnOlxuICAgICAgcmV0dXJuICcuSU5GJztcbiAgICBjYXNlICdjYW1lbGNhc2UnOlxuICAgICAgcmV0dXJuICcuSW5mJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgY2FzZSAnbG93ZXJjYXNlJzpcbiAgICAgIHJldHVybiAnLS5pbmYnO1xuICAgIGNhc2UgJ3VwcGVyY2FzZSc6XG4gICAgICByZXR1cm4gJy0uSU5GJztcbiAgICBjYXNlICdjYW1lbGNhc2UnOlxuICAgICAgcmV0dXJuICctLkluZic7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKSB7XG4gICAgcmV0dXJuICctMC4wJztcbiAgfVxuXG4gIHJlcyA9IG9iamVjdC50b1N0cmluZygxMCk7XG5cbiAgLy8gSlMgc3RyaW5naWZpZXIgY2FuIGJ1aWxkIHNjaWVudGlmaWMgZm9ybWF0IHdpdGhvdXQgZG90czogNWUtMTAwLFxuICAvLyB3aGlsZSBZQU1MIHJlcXVyZXMgZG90OiA1LmUtMTAwLiBGaXggaXQgd2l0aCBzaW1wbGUgaGFja1xuXG4gIHJldHVybiBTQ0lFTlRJRklDX1dJVEhPVVRfRE9ULnRlc3QocmVzKSA/IHJlcy5yZXBsYWNlKCdlJywgJy5lJykgOiByZXM7XG59XG5cbmZ1bmN0aW9uIGlzRmxvYXQob2JqZWN0KSB7XG4gIHJldHVybiAoJ1tvYmplY3QgTnVtYmVyXScgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpKSAmJlxuICAgICAgICAgKDAgIT09IG9iamVjdCAlIDEgfHwgY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sRmxvYXQsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEZsb2F0LFxuICBwcmVkaWNhdGU6IGlzRmxvYXQsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEZsb2F0LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIFR5cGUgICA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gaXNIZXhDb2RlKGMpIHtcbiAgcmV0dXJuICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKSB8fFxuICAgICAgICAgKCgweDQxLyogQSAqLyA8PSBjKSAmJiAoYyA8PSAweDQ2LyogRiAqLykpIHx8XG4gICAgICAgICAoKDB4NjEvKiBhICovIDw9IGMpICYmIChjIDw9IDB4NjYvKiBmICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzT2N0Q29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzcvKiA3ICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzRGVjQ29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sSW50ZWdlcihkYXRhKSB7XG4gIGlmIChudWxsID09PSBkYXRhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoLFxuICAgICAgaW5kZXggPSAwLFxuICAgICAgaGFzRGlnaXRzID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAoIW1heCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICBjaCA9IGRhdGFbaW5kZXhdO1xuXG4gIC8vIHNpZ25cbiAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgIGNoID0gZGF0YVsrK2luZGV4XTtcbiAgfVxuXG4gIGlmIChjaCA9PT0gJzAnKSB7XG4gICAgLy8gMFxuICAgIGlmIChpbmRleCArIDEgPT09IG1heCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgIGNoID0gZGF0YVsrK2luZGV4XTtcblxuICAgIC8vIGJhc2UgMiwgYmFzZSA4LCBiYXNlIDE2XG5cbiAgICBpZiAoY2ggPT09ICdiJykge1xuICAgICAgLy8gYmFzZSAyXG4gICAgICBpbmRleCsrO1xuXG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSAnXycpIHsgY29udGludWU7IH1cbiAgICAgICAgaWYgKGNoICE9PSAnMCcgJiYgY2ggIT09ICcxJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cztcbiAgICB9XG5cblxuICAgIGlmIChjaCA9PT0gJ3gnKSB7XG4gICAgICAvLyBiYXNlIDE2XG4gICAgICBpbmRleCsrO1xuXG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSAnXycpIHsgY29udGludWU7IH1cbiAgICAgICAgaWYgKCFpc0hleENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHM7XG4gICAgfVxuXG4gICAgLy8gYmFzZSA4XG4gICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgaWYgKGNoID09PSAnXycpIHsgY29udGludWU7IH1cbiAgICAgIGlmICghaXNPY3RDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBoYXNEaWdpdHM7XG4gIH1cblxuICAvLyBiYXNlIDEwIChleGNlcHQgMCkgb3IgYmFzZSA2MFxuXG4gIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgaWYgKGNoID09PSAnXycpIHsgY29udGludWU7IH1cbiAgICBpZiAoY2ggPT09ICc6JykgeyBicmVhazsgfVxuICAgIGlmICghaXNEZWNDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gIH1cblxuICBpZiAoIWhhc0RpZ2l0cykgeyByZXR1cm4gZmFsc2U7IH1cblxuICAvLyBpZiAhYmFzZTYwIC0gZG9uZTtcbiAgaWYgKGNoICE9PSAnOicpIHsgcmV0dXJuIHRydWU7IH1cblxuICAvLyBiYXNlNjAgYWxtb3N0IG5vdCB1c2VkLCBubyBuZWVkcyB0byBvcHRpbWl6ZVxuICByZXR1cm4gL14oOlswLTVdP1swLTldKSskLy50ZXN0KGRhdGEuc2xpY2UoaW5kZXgpKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEludGVnZXIoZGF0YSkge1xuICB2YXIgdmFsdWUgPSBkYXRhLCBzaWduID0gMSwgY2gsIGJhc2UsIGRpZ2l0cyA9IFtdO1xuXG4gIGlmICh2YWx1ZS5pbmRleE9mKCdfJykgIT09IC0xKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9fL2csICcnKTtcbiAgfVxuXG4gIGNoID0gdmFsdWVbMF07XG5cbiAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgIGlmIChjaCA9PT0gJy0nKSB7IHNpZ24gPSAtMTsgfVxuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gICAgY2ggPSB2YWx1ZVswXTtcbiAgfVxuXG4gIGlmICgnMCcgPT09IHZhbHVlKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoY2ggPT09ICcwJykge1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gJ2InKSB7XG4gICAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAyKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlWzFdID09PSAneCcpIHtcbiAgICAgIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDE2KTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZSwgOCk7XG5cbiAgfVxuXG4gIGlmICh2YWx1ZS5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdmFsdWUuc3BsaXQoJzonKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgICBkaWdpdHMudW5zaGlmdChwYXJzZUludCh2LCAxMCkpO1xuICAgIH0pO1xuXG4gICAgdmFsdWUgPSAwO1xuICAgIGJhc2UgPSAxO1xuXG4gICAgZGlnaXRzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgIHZhbHVlICs9IChkICogYmFzZSk7XG4gICAgICBiYXNlICo9IDYwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTtcblxuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZSwgMTApO1xufVxuXG5mdW5jdGlvbiBpc0ludGVnZXIob2JqZWN0KSB7XG4gIHJldHVybiAoJ1tvYmplY3QgTnVtYmVyXScgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpKSAmJlxuICAgICAgICAgKDAgPT09IG9iamVjdCAlIDEgJiYgIWNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6aW50Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxJbnRlZ2VyLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxJbnRlZ2VyLFxuICBwcmVkaWNhdGU6IGlzSW50ZWdlcixcbiAgcmVwcmVzZW50OiB7XG4gICAgYmluYXJ5OiAgICAgIGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuICcwYicgKyBvYmplY3QudG9TdHJpbmcoMik7IH0sXG4gICAgb2N0YWw6ICAgICAgIGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuICcwJyAgKyBvYmplY3QudG9TdHJpbmcoOCk7IH0sXG4gICAgZGVjaW1hbDogICAgIGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuICAgICAgICBvYmplY3QudG9TdHJpbmcoMTApOyB9LFxuICAgIGhleGFkZWNpbWFsOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiAnMHgnICsgb2JqZWN0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOyB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogJ2RlY2ltYWwnLFxuICBzdHlsZUFsaWFzZXM6IHtcbiAgICBiaW5hcnk6ICAgICAgWyAyLCAgJ2JpbicgXSxcbiAgICBvY3RhbDogICAgICAgWyA4LCAgJ29jdCcgXSxcbiAgICBkZWNpbWFsOiAgICAgWyAxMCwgJ2RlYycgXSxcbiAgICBoZXhhZGVjaW1hbDogWyAxNiwgJ2hleCcgXVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVzcHJpbWE7XG5cbi8vIEJyb3dzZXJpZmllZCB2ZXJzaW9uIGRvZXMgbm90IGhhdmUgZXNwcmltYVxuLy9cbi8vIDEuIEZvciBub2RlLmpzIGp1c3QgcmVxdWlyZSBtb2R1bGUgYXMgZGVwc1xuLy8gMi4gRm9yIGJyb3dzZXIgdHJ5IHRvIHJlcXVpcmUgbXVkdWxlIHZpYSBleHRlcm5hbCBBTUQgc3lzdGVtLlxuLy8gICAgSWYgbm90IGZvdW5kIC0gdHJ5IHRvIGZhbGxiYWNrIHRvIHdpbmRvdy5lc3ByaW1hLiBJZiBub3Rcbi8vICAgIGZvdW5kIHRvbyAtIHRoZW4gZmFpbCB0byBwYXJzZS5cbi8vXG50cnkge1xuICBlc3ByaW1hID0gcmVxdWlyZSgnZXNwcmltYScpO1xufSBjYXRjaCAoXykge1xuICAvKmdsb2JhbCB3aW5kb3cgKi9cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IGVzcHJpbWEgPSB3aW5kb3cuZXNwcmltYTsgfVxufVxuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uLy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRGdW5jdGlvbihkYXRhKSB7XG4gIGlmIChudWxsID09PSBkYXRhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICB2YXIgc291cmNlID0gJygnICsgZGF0YSArICcpJyxcbiAgICAgICAgYXN0ICAgID0gZXNwcmltYS5wYXJzZShzb3VyY2UsIHsgcmFuZ2U6IHRydWUgfSk7XG5cbiAgICBpZiAoJ1Byb2dyYW0nICAgICAgICAgICAgICE9PSBhc3QudHlwZSAgICAgICAgIHx8XG4gICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAhPT0gYXN0LmJvZHkubGVuZ3RoICB8fFxuICAgICAgICAnRXhwcmVzc2lvblN0YXRlbWVudCcgIT09IGFzdC5ib2R5WzBdLnR5cGUgfHxcbiAgICAgICAgJ0Z1bmN0aW9uRXhwcmVzc2lvbicgICE9PSBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdEphdmFzY3JpcHRGdW5jdGlvbihkYXRhKSB7XG4gIC8qanNsaW50IGV2aWw6dHJ1ZSovXG5cbiAgdmFyIHNvdXJjZSA9ICcoJyArIGRhdGEgKyAnKScsXG4gICAgICBhc3QgICAgPSBlc3ByaW1hLnBhcnNlKHNvdXJjZSwgeyByYW5nZTogdHJ1ZSB9KSxcbiAgICAgIHBhcmFtcyA9IFtdLFxuICAgICAgYm9keTtcblxuICBpZiAoJ1Byb2dyYW0nICAgICAgICAgICAgICE9PSBhc3QudHlwZSAgICAgICAgIHx8XG4gICAgICAxICAgICAgICAgICAgICAgICAgICAgIT09IGFzdC5ib2R5Lmxlbmd0aCAgfHxcbiAgICAgICdFeHByZXNzaW9uU3RhdGVtZW50JyAhPT0gYXN0LmJvZHlbMF0udHlwZSB8fFxuICAgICAgJ0Z1bmN0aW9uRXhwcmVzc2lvbicgICE9PSBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBhc3QuYm9keVswXS5leHByZXNzaW9uLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgIHBhcmFtcy5wdXNoKHBhcmFtLm5hbWUpO1xuICB9KTtcblxuICBib2R5ID0gYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi5ib2R5LnJhbmdlO1xuXG4gIC8vIEVzcHJpbWEncyByYW5nZXMgaW5jbHVkZSB0aGUgZmlyc3QgJ3snIGFuZCB0aGUgbGFzdCAnfScgY2hhcmFjdGVycyBvblxuICAvLyBmdW5jdGlvbiBleHByZXNzaW9ucy4gU28gY3V0IHRoZW0gb3V0LlxuICAvKmVzbGludC1kaXNhYmxlIG5vLW5ldy1mdW5jKi9cbiAgcmV0dXJuIG5ldyBGdW5jdGlvbihwYXJhbXMsIHNvdXJjZS5zbGljZShib2R5WzBdICsgMSwgYm9keVsxXSAtIDEpKTtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdEZ1bmN0aW9uKG9iamVjdCAvKiwgc3R5bGUqLykge1xuICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqZWN0KSB7XG4gIHJldHVybiAnW29iamVjdCBGdW5jdGlvbl0nID09PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6anMvZnVuY3Rpb24nLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdEZ1bmN0aW9uLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdEphdmFzY3JpcHRGdW5jdGlvbixcbiAgcHJlZGljYXRlOiBpc0Z1bmN0aW9uLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRGdW5jdGlvblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdFJlZ0V4cChkYXRhKSB7XG4gIGlmIChudWxsID09PSBkYXRhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKDAgPT09IGRhdGEubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IGRhdGEsXG4gICAgICB0YWlsICAgPSAvXFwvKFtnaW1dKikkLy5leGVjKGRhdGEpLFxuICAgICAgbW9kaWZpZXJzID0gJyc7XG5cbiAgLy8gaWYgcmVnZXhwIHN0YXJ0cyB3aXRoICcvJyBpdCBjYW4gaGF2ZSBtb2RpZmllcnMgYW5kIG11c3QgYmUgcHJvcGVybHkgY2xvc2VkXG4gIC8vIGAvZm9vL2dpbWAgLSBtb2RpZmllcnMgdGFpbCBjYW4gYmUgbWF4aW11bSAzIGNoYXJzXG4gIGlmICgnLycgPT09IHJlZ2V4cFswXSkge1xuICAgIGlmICh0YWlsKSB7XG4gICAgICBtb2RpZmllcnMgPSB0YWlsWzFdO1xuICAgIH1cblxuICAgIGlmIChtb2RpZmllcnMubGVuZ3RoID4gMykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAvLyBpZiBleHByZXNzaW9uIHN0YXJ0cyB3aXRoIC8sIGlzIHNob3VsZCBiZSBwcm9wZXJseSB0ZXJtaW5hdGVkXG4gICAgaWYgKHJlZ2V4cFtyZWdleHAubGVuZ3RoIC0gbW9kaWZpZXJzLmxlbmd0aCAtIDFdICE9PSAnLycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICByZWdleHAgPSByZWdleHAuc2xpY2UoMSwgcmVnZXhwLmxlbmd0aCAtIG1vZGlmaWVycy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdEphdmFzY3JpcHRSZWdFeHAoZGF0YSkge1xuICB2YXIgcmVnZXhwID0gZGF0YSxcbiAgICAgIHRhaWwgICA9IC9cXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YSksXG4gICAgICBtb2RpZmllcnMgPSAnJztcblxuICAvLyBgL2Zvby9naW1gIC0gdGFpbCBjYW4gYmUgbWF4aW11bSA0IGNoYXJzXG4gIGlmICgnLycgPT09IHJlZ2V4cFswXSkge1xuICAgIGlmICh0YWlsKSB7XG4gICAgICBtb2RpZmllcnMgPSB0YWlsWzFdO1xuICAgIH1cbiAgICByZWdleHAgPSByZWdleHAuc2xpY2UoMSwgcmVnZXhwLmxlbmd0aCAtIG1vZGlmaWVycy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4cCwgbW9kaWZpZXJzKTtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdFJlZ0V4cChvYmplY3QgLyosIHN0eWxlKi8pIHtcbiAgdmFyIHJlc3VsdCA9ICcvJyArIG9iamVjdC5zb3VyY2UgKyAnLyc7XG5cbiAgaWYgKG9iamVjdC5nbG9iYWwpIHtcbiAgICByZXN1bHQgKz0gJ2cnO1xuICB9XG5cbiAgaWYgKG9iamVjdC5tdWx0aWxpbmUpIHtcbiAgICByZXN1bHQgKz0gJ20nO1xuICB9XG5cbiAgaWYgKG9iamVjdC5pZ25vcmVDYXNlKSB7XG4gICAgcmVzdWx0ICs9ICdpJztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKG9iamVjdCkge1xuICByZXR1cm4gJ1tvYmplY3QgUmVnRXhwXScgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpqcy9yZWdleHAnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFJlZ0V4cCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0UmVnRXhwLFxuICBwcmVkaWNhdGU6IGlzUmVnRXhwLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRSZWdFeHBcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uLy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRVbmRlZmluZWQoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RKYXZhc2NyaXB0VW5kZWZpbmVkKCkge1xuICAvKmVzbGludC1kaXNhYmxlIG5vLXVuZGVmaW5lZCovXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWQoKSB7XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqZWN0KSB7XG4gIHJldHVybiAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6anMvdW5kZWZpbmVkJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZUphdmFzY3JpcHRVbmRlZmluZWQsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCxcbiAgcHJlZGljYXRlOiBpc1VuZGVmaW5lZCxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRKYXZhc2NyaXB0VW5kZWZpbmVkXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm1hcCcsIHtcbiAga2luZDogJ21hcHBpbmcnLFxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBudWxsICE9PSBkYXRhID8gZGF0YSA6IHt9OyB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sTWVyZ2UoZGF0YSkge1xuICByZXR1cm4gJzw8JyA9PT0gZGF0YSB8fCBudWxsID09PSBkYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjptZXJnZScsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sTWVyZ2Vcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxOdWxsKGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcblxuICByZXR1cm4gKG1heCA9PT0gMSAmJiBkYXRhID09PSAnficpIHx8XG4gICAgICAgICAobWF4ID09PSA0ICYmIChkYXRhID09PSAnbnVsbCcgfHwgZGF0YSA9PT0gJ051bGwnIHx8IGRhdGEgPT09ICdOVUxMJykpO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChvYmplY3QpIHtcbiAgcmV0dXJuIG51bGwgPT09IG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6bnVsbCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sTnVsbCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sTnVsbCxcbiAgcHJlZGljYXRlOiBpc051bGwsXG4gIHJlcHJlc2VudDoge1xuICAgIGNhbm9uaWNhbDogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ34nOyAgICB9LFxuICAgIGxvd2VyY2FzZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ251bGwnOyB9LFxuICAgIHVwcGVyY2FzZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ05VTEwnOyB9LFxuICAgIGNhbWVsY2FzZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ051bGwnOyB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogJ2xvd2VyY2FzZSdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX3RvU3RyaW5nICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxPbWFwKGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4LCBsZW5ndGgsIHBhaXIsIHBhaXJLZXksIHBhaXJIYXNLZXksXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIHBhaXJIYXNLZXkgPSBmYWxzZTtcblxuICAgIGlmICgnW29iamVjdCBPYmplY3RdJyAhPT0gX3RvU3RyaW5nLmNhbGwocGFpcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikge1xuICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7XG4gICAgICAgIGlmICghcGFpckhhc0tleSkge1xuICAgICAgICAgIHBhaXJIYXNLZXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFpckhhc0tleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICgtMSA9PT0gb2JqZWN0S2V5cy5pbmRleE9mKHBhaXJLZXkpKSB7XG4gICAgICBvYmplY3RLZXlzLnB1c2gocGFpcktleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkge1xuICByZXR1cm4gbnVsbCAhPT0gZGF0YSA/IGRhdGEgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6b21hcCcsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxPbWFwLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxPbWFwXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcblxuICAgIGlmICgnW29iamVjdCBPYmplY3RdJyAhPT0gX3RvU3RyaW5nLmNhbGwocGFpcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG5cbiAgICBpZiAoMSAhPT0ga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKG51bGwgPT09IGRhdGEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgaW5kZXgsIGxlbmd0aCwgcGFpciwga2V5cywgcmVzdWx0LFxuICAgICAgb2JqZWN0ID0gZGF0YTtcblxuICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpwYWlycycsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxQYWlycyxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sUGFpcnNcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c2VxJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBudWxsICE9PSBkYXRhID8gZGF0YSA6IFtdOyB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFNldChkYXRhKSB7XG4gIGlmIChudWxsID09PSBkYXRhKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIga2V5LCBvYmplY3QgPSBkYXRhO1xuXG4gIGZvciAoa2V5IGluIG9iamVjdCkge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIGlmIChudWxsICE9PSBvYmplY3Rba2V5XSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxTZXQoZGF0YSkge1xuICByZXR1cm4gbnVsbCAhPT0gZGF0YSA/IGRhdGEgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c2V0Jywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sU2V0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxTZXRcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c3RyJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gbnVsbCAhPT0gZGF0YSA/IGRhdGEgOiAnJzsgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG52YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgJ14oWzAtOV1bMC05XVswLTldWzAtOV0pJyAgICAgICAgICArIC8vIFsxXSB5ZWFyXG4gICctKFswLTldWzAtOV0/KScgICAgICAgICAgICAgICAgICAgKyAvLyBbMl0gbW9udGhcbiAgJy0oWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICArIC8vIFszXSBkYXlcbiAgJyg/Oig/OltUdF18WyBcXFxcdF0rKScgICAgICAgICAgICAgICsgLy8gLi4uXG4gICcoWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNF0gaG91clxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzVdIG1pbnV0ZVxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzZdIHNlY29uZFxuICAnKD86XFxcXC4oWzAtOV0qKSk/JyAgICAgICAgICAgICAgICAgKyAvLyBbN10gZnJhY3Rpb25cbiAgJyg/OlsgXFxcXHRdKihafChbLStdKShbMC05XVswLTldPyknICsgLy8gWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91clxuICAnKD86OihbMC05XVswLTldKSk/KSk/KT8kJyk7ICAgICAgICAgLy8gWzExXSB0el9taW51dGVcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICBpZiAobnVsbCA9PT0gZGF0YSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wKGRhdGEpIHtcbiAgdmFyIG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24gPSAwLFxuICAgICAgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7XG5cbiAgbWF0Y2ggPSBZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKTtcblxuICBpZiAobnVsbCA9PT0gbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGUgcmVzb2x2ZSBlcnJvcicpO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFsxXSB5ZWFyIFsyXSBtb250aCBbM10gZGF5XG5cbiAgeWVhciA9ICsobWF0Y2hbMV0pO1xuICBtb250aCA9ICsobWF0Y2hbMl0pIC0gMTsgLy8gSlMgbW9udGggc3RhcnRzIHdpdGggMFxuICBkYXkgPSArKG1hdGNoWzNdKTtcblxuICBpZiAoIW1hdGNoWzRdKSB7IC8vIG5vIGhvdXJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFs0XSBob3VyIFs1XSBtaW51dGUgWzZdIHNlY29uZCBbN10gZnJhY3Rpb25cblxuICBob3VyID0gKyhtYXRjaFs0XSk7XG4gIG1pbnV0ZSA9ICsobWF0Y2hbNV0pO1xuICBzZWNvbmQgPSArKG1hdGNoWzZdKTtcblxuICBpZiAobWF0Y2hbN10pIHtcbiAgICBmcmFjdGlvbiA9IG1hdGNoWzddLnNsaWNlKDAsIDMpO1xuICAgIHdoaWxlIChmcmFjdGlvbi5sZW5ndGggPCAzKSB7IC8vIG1pbGxpLXNlY29uZHNcbiAgICAgIGZyYWN0aW9uICs9ICcwJztcbiAgICB9XG4gICAgZnJhY3Rpb24gPSArZnJhY3Rpb247XG4gIH1cblxuICAvLyBtYXRjaDogWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91ciBbMTFdIHR6X21pbnV0ZVxuXG4gIGlmIChtYXRjaFs5XSkge1xuICAgIHR6X2hvdXIgPSArKG1hdGNoWzEwXSk7XG4gICAgdHpfbWludXRlID0gKyhtYXRjaFsxMV0gfHwgMCk7XG4gICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDYwMDAwOyAvLyBkZWx0YSBpbiBtaWxpLXNlY29uZHNcbiAgICBpZiAoJy0nID09PSBtYXRjaFs5XSkge1xuICAgICAgZGVsdGEgPSAtZGVsdGE7XG4gICAgfVxuICB9XG5cbiAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbikpO1xuXG4gIGlmIChkZWx0YSkge1xuICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSAtIGRlbHRhKTtcbiAgfVxuXG4gIHJldHVybiBkYXRlO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sVGltZXN0YW1wKG9iamVjdCAvKiwgc3R5bGUqLykge1xuICByZXR1cm4gb2JqZWN0LnRvSVNPU3RyaW5nKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sVGltZXN0YW1wLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAsXG4gIGluc3RhbmNlT2Y6IERhdGUsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbFRpbWVzdGFtcFxufSk7XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IEplcmVteSBXaGl0bG9ja1xuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFZhcmlvdXMgdXRpbGl0aWVzIGZvciBKU09OIFJlZmVyZW5jZXMgKihodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1wYnJ5YW4tenlwLWpzb24tcmVmLTAzKSogYW5kXG4gKiBKU09OIFBvaW50ZXJzICooaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEpKi5cbiAqXG4gKiBAbW9kdWxlIEpzb25SZWZzXG4gKi9cblxudmFyIGRpcm5hbWUgPSByZXF1aXJlKCdwYXRoJykuZGlybmFtZTtcbnZhciBwYXRoTG9hZGVyID0gcmVxdWlyZSgncGF0aC1sb2FkZXInKTtcbnZhciBxcyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG52YXIgc2xhc2ggPSByZXF1aXJlKCdzbGFzaCcpO1xudmFyIFVSSSA9IHJlcXVpcmUoJ3VyaS1qcycpO1xuXG52YXIgYmFkUHRyVG9rZW5SZWdleCA9IC9+KD86W14wMV18JCkvZztcbnZhciByZW1vdGVDYWNoZSA9IHt9O1xudmFyIHJlbW90ZVR5cGVzID0gWydyZWxhdGl2ZScsICdyZW1vdGUnXTtcbnZhciB1cmlEZXRhaWxzQ2FjaGUgPSB7fTtcblxuLy8gTG9hZCBwcm9taXNlcyBwb2x5ZmlsbCBpZiBuZWNlc3Nhcnlcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJykge1xuICByZXF1aXJlKCduYXRpdmUtcHJvbWlzZS1vbmx5Jyk7XG59XG5cbi8qIEludGVybmFsIEZ1bmN0aW9ucyAqL1xuXG4vLyBUaGlzIGlzIGEgdmVyeSBzaW1wbGlzdGljIGNsb25lIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgbm9uLUpTT04gdHlwZXMuICBGb3IgdGhlc2UgdHlwZXMgdGhlXG4vLyBvcmlnaW5hbCB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBjbG9uZS4gIFNvIHdoaWxlIGl0J3Mgbm90IGEgY29tcGxldGUgZGVlcCBjbG9uZSwgZm9yIHRoZSBuZWVkcyBvZiB0aGlzIHByb2plY3Rcbi8vIHRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG5mdW5jdGlvbiBjbG9uZSAob2JqKSB7XG4gIHZhciBjbG9uZWQ7XG5cbiAgaWYgKGlzVHlwZShvYmosICdBcnJheScpKSB7XG4gICAgY2xvbmVkID0gW107XG5cbiAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICBjbG9uZWRbaW5kZXhdID0gY2xvbmUodmFsdWUpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzVHlwZShvYmosICdPYmplY3QnKSkge1xuICAgIGNsb25lZCA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGNsb25lZFtrZXldID0gY2xvbmUob2JqW2tleV0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNsb25lZCA9IG9iajtcbiAgfVxuXG4gIHJldHVybiBjbG9uZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVQYXRocyAocDEsIHAyKSB7XG4gIHZhciBjb21iaW5lZCA9IFtdO1xuXG4gIGZ1bmN0aW9uIHBhdGhUb1NlZ21lbnRzIChwYXRoKSB7XG4gICAgcmV0dXJuIGlzVHlwZShwYXRoLCAnVW5kZWZpbmVkJykgfHwgcGF0aCA9PT0gJycgPyBbXSA6IHBhdGguc3BsaXQoJy8nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVNlZ21lbnQgKHNlZykge1xuICAgIGlmIChzZWcgPT09ICcuLicpIHtcbiAgICAgIGNvbWJpbmVkLnBvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21iaW5lZC5wdXNoKHNlZyk7XG4gICAgfVxuICB9XG5cbiAgcGF0aFRvU2VnbWVudHMocDEpLmNvbmNhdChwYXRoVG9TZWdtZW50cyhwMikpLmZvckVhY2goaGFuZGxlU2VnbWVudCk7XG5cbiAgcmV0dXJuIGNvbWJpbmVkLmxlbmd0aCA9PT0gMCA/ICcnIDogY29tYmluZWQuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lUXVlcnlQYXJhbXMgKHFzMSwgcXMyKSB7XG4gIHZhciBjb21iaW5lZCA9IHt9O1xuXG4gIGZ1bmN0aW9uIG1lcmdlUXVlcnlQYXJhbXMgKG9iaikge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBjb21iaW5lZFtrZXldID0gb2JqW2tleV07XG4gICAgfSk7XG4gIH1cblxuICBtZXJnZVF1ZXJ5UGFyYW1zKHFzLnBhcnNlKHFzMSB8fCAnJykpO1xuICBtZXJnZVF1ZXJ5UGFyYW1zKHFzLnBhcnNlKHFzMiB8fCAnJykpO1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhjb21iaW5lZCkubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogcXMuc3RyaW5naWZ5KGNvbWJpbmVkKTtcbn1cblxuZnVuY3Rpb24gY29tYmluZVVSSXMgKHUxLCB1Mikge1xuICAvLyBDb252ZXJ0IFdpbmRvd3MgcGF0aHNcbiAgaWYgKGlzVHlwZSh1MSwgJ1N0cmluZycpKSB7XG4gICAgdTEgPSBzbGFzaCh1MSk7XG4gIH1cblxuICBpZiAoaXNUeXBlKHUyLCAnU3RyaW5nJykpIHtcbiAgICB1MiA9IHNsYXNoKHUyKTtcbiAgfVxuXG4gIHZhciB1MkRldGFpbHMgPSBVUkkucGFyc2UoaXNUeXBlKHUyLCAnVW5kZWZpbmVkJykgPyAnJyA6IHUyKTtcbiAgdmFyIHUxRGV0YWlscztcbiAgdmFyIGNvbWJpbmVkRGV0YWlscztcblxuICBpZiAodTJEZXRhaWxzLnJlZmVyZW5jZSA9PT0gJ2Fic29sdXRlJyB8fCB1MkRldGFpbHMucmVmZXJlbmNlID09PSAndXJpJykge1xuICAgIGNvbWJpbmVkRGV0YWlscyA9IHUyRGV0YWlscztcbiAgfSBlbHNlIHtcbiAgICB1MURldGFpbHMgPSBpc1R5cGUodTEsICdVbmRlZmluZWQnKSA/IHVuZGVmaW5lZCA6IFVSSS5wYXJzZSh1MSk7XG5cbiAgICBpZiAoIWlzVHlwZSh1MURldGFpbHMsICdVbmRlZmluZWQnKSkge1xuICAgICAgY29tYmluZWREZXRhaWxzID0gdTFEZXRhaWxzO1xuXG4gICAgICAvLyBKb2luIHRoZSBwYXRoc1xuICAgICAgY29tYmluZWREZXRhaWxzLnBhdGggPSBVUkkubm9ybWFsaXplKGNvbWJpbmVQYXRocyh1MURldGFpbHMucGF0aCwgdTJEZXRhaWxzLnBhdGgpKTtcblxuICAgICAgLy8gSm9pbiBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgICBjb21iaW5lZERldGFpbHMucXVlcnkgPSBjb21iaW5lUXVlcnlQYXJhbXModTFEZXRhaWxzLnF1ZXJ5LCB1MkRldGFpbHMucXVlcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21iaW5lZERldGFpbHMgPSB1MkRldGFpbHM7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBmcmFnbWVudFxuICBjb21iaW5lZERldGFpbHMuZnJhZ21lbnQgPSB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIFVSSS5zZXJpYWxpemUoY29tYmluZWREZXRhaWxzKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyUmVmcyAob3B0aW9ucywgcmVmcykge1xuICB2YXIgcmVmRmlsdGVyID0gbWFrZVJlZkZpbHRlcihvcHRpb25zKTtcbiAgdmFyIGZpbHRlcmVkID0ge307XG4gIHZhciBzdWJEb2NQcmVmaXggPSBwYXRoVG9QdHIobWFrZVN1YkRvY1BhdGgob3B0aW9ucykpO1xuXG4gIE9iamVjdC5rZXlzKHJlZnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgIHZhciByZWZEZXRhaWxzID0gcmVmc1tyZWZQdHJdO1xuXG4gICAgaWYgKHJlZkZpbHRlcihyZWZEZXRhaWxzLCBwYXRoRnJvbVB0cihyZWZQdHIpKSA9PT0gdHJ1ZSAmJlxuICAgICAgICByZWZQdHIuaW5kZXhPZihzdWJEb2NQcmVmaXgpID4gLTEgJiZcbiAgICAgICAgKHJlZkRldGFpbHMudHlwZSAhPT0gJ2ludmFsaWQnIHx8IG9wdGlvbnMuaW5jbHVkZUludmFsaWQgPT09IHRydWUpKSB7XG4gICAgICBmaWx0ZXJlZFtyZWZQdHJdID0gcmVmRGV0YWlscztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJlZDtcbn1cblxuZnVuY3Rpb24gZmluZEFuY2VzdG9ycyAob2JqLCBwYXRoKSB7XG4gIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgdmFyIG5vZGUgPSBvYmo7XG5cbiAgcGF0aC5zbGljZSgwLCBwYXRoLmxlbmd0aCAtIDEpLmZvckVhY2goZnVuY3Rpb24gKHNlZykge1xuICAgIGlmIChzZWcgaW4gbm9kZSkge1xuICAgICAgbm9kZSA9IG5vZGVbc2VnXTtcblxuICAgICAgYW5jZXN0b3JzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYW5jZXN0b3JzO1xufVxuXG4vLyBTaG91bGQgdGhpcyBiZSBpdHMgb3duIGV4cG9ydGVkIEFQST9cbmZ1bmN0aW9uIGZpbmRBbGxSZWZzIChvYmosIG9wdGlvbnMsIHBhcmVudHMsIHBhcmVudFBhdGgsIGRvY3VtZW50cykge1xuICB2YXIgYWxsVGFza3MgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgdmFyIHJlZnMgPSBmaW5kUmVmcyhvYmosIG9wdGlvbnMpO1xuXG4gIGNvbnNvbGUubG9nKG9wdGlvbnMucmVsYXRpdmVCYXNlKTtcblxuICBPYmplY3Qua2V5cyhyZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWZQdHIpIHtcbiAgICB2YXIgcmVmRGV0YWlscyA9IHJlZnNbcmVmUHRyXTtcbiAgICB2YXIgcmVmUGF0aCA9IHBhdGhGcm9tUHRyKHJlZlB0cik7XG4gICAgdmFyIGxvY2F0aW9uO1xuICAgIHZhciBwYXJlbnRJbmRleDtcblxuICAgIC8vIE9ubHkgcHJvY2VzcyByZW1vdGUgcmVmZXJlbmNlc1xuICAgIGlmIChyZW1vdGVUeXBlcy5pbmRleE9mKHJlZkRldGFpbHMudHlwZSkgPiAtMSkge1xuICAgICAgbG9jYXRpb24gPSBjb21iaW5lVVJJcyhvcHRpb25zLnJlbGF0aXZlQmFzZSwgcmVmRGV0YWlscy51cmkpO1xuICAgICAgcGFyZW50SW5kZXggPSBwYXJlbnRzLmluZGV4T2YobG9jYXRpb24pO1xuXG4gICAgICBpZiAocGFyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgclBhcmVudFBhdGggPSBwYXJlbnRQYXRoLmNvbmNhdChyZWZQYXRoKTtcbiAgICAgICAgICAgIHZhciByT3B0aW9ucyA9IGNsb25lKG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHN1YiBkb2N1bWVudCBwYXRoXG4gICAgICAgICAgICBkZWxldGUgck9wdGlvbnMuc3ViRG9jUGF0aDtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSByZWxhdGl2ZSBiYXNlXG4gICAgICAgICAgICBkZWxldGUgck9wdGlvbnMucmVsYXRpdmVCYXNlO1xuXG4gICAgICAgICAgICByZXR1cm4gZmluZFJlZnNBdChsb2NhdGlvbiwgck9wdGlvbnMpXG4gICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyUmVmcykge1xuICAgICAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgbG9jYXRpb24gZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSBpZGVudGlmaWNhdGlvblxuICAgICAgICAgICAgICAgIHJSZWZzLmxvY2F0aW9uID0gbG9jYXRpb247XG5cbiAgICAgICAgICAgICAgICBpZiAocmVmRGV0YWlscy51cmlEZXRhaWxzLmZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVtb3RlIHJlZmVyZW5jZSB3YXMgZm9yIGEgZnJhZ21lbnQsIGRvIG5vdCBpbmNsdWRlIHRoZSByZWZlcmVuY2UgZGV0YWlsc1xuICAgICAgICAgICAgICAgICAgclJlZnMucmVmcyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAvLyBSZWNvcmQgdGhlIHJlbW90ZSBkb2N1bWVudFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRzW3BhdGhUb1B0cihyUGFyZW50UGF0aCldID0gclJlZnM7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiByUmVmcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBsb2NhdGlvbiBpbiB0aGUgZG9jdW1lbnQgd2hlcmUgdGhlIHBhcmVudCBkb2N1bWVudCB3YXMgcmVzb2x2ZWRcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJSZWZzLnJlZnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgICAgICAgICAgICAgICAgICByUmVmcy5yZWZzW3JlZlB0cl0ucGFyZW50TG9jYXRpb24gPSBwYXRoVG9QdHIoclBhcmVudFBhdGgpO1xuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgcmVtb3RlIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudHNbcGF0aFRvUHRyKHJQYXJlbnRQYXRoKV0gPSByUmVmcztcblxuICAgICAgICAgICAgICAgICAgck9wdGlvbnMucmVsYXRpdmVCYXNlID0gZGlybmFtZShsb2NhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYWxsIGltcG9ydGFudCByZWZlcmVuY2VzIHdpdGhpbiB0aGUgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5kQWxsUmVmcyhyUmVmcy52YWx1ZSwgck9wdGlvbnMsIHBhcmVudHMuY29uY2F0KGxvY2F0aW9uKSwgclBhcmVudFBhdGgsIGRvY3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVmRGV0YWlscy5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHJlZkRldGFpbHMubWlzc2luZyA9IHRydWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWFyayBzZWVuIGFuY2VzdG9ycyBhcyBjaXJjdWxhclxuICAgICAgICBwYXJlbnRzLnNsaWNlKHBhcmVudEluZGV4KS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhkb2N1bWVudHMpLmZvckVhY2goZnVuY3Rpb24gKGNSZWZQdHIpIHtcbiAgICAgICAgICAgIHZhciBkb2N1bWVudCA9IGRvY3VtZW50c1tjUmVmUHRyXTtcblxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9uID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuY2lyY3VsYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBNYXJrIHNlbGYgYXMgY2lyY3VsYXJcbiAgICAgICAgZG9jdW1lbnRzW3BhdGhUb1B0cihwYXJlbnRQYXRoKV0ucmVmc1tyZWZQdHJdLmNpcmN1bGFyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBPbmx5IGNvbGxhcHNlIHRoZSBkb2N1bWVudHMgd2hlbiB3ZSdyZSBiYWNrIGF0IHRoZSB0b3Agb2YgdGhlIHByb21pc2Ugc3RhY2tcbiAgICAgIGlmIChwYXJlbnRQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBDb2xsYXBzZSBhbGwgcmVmZXJlbmNlcyB0b2dldGhlciBpbnRvIG9uZSBsaXN0XG4gICAgICAgIE9iamVjdC5rZXlzKGRvY3VtZW50cykuZm9yRWFjaChmdW5jdGlvbiAocmVmUHRyKSB7XG4gICAgICAgICAgdmFyIGRvY3VtZW50ID0gZG9jdW1lbnRzW3JlZlB0cl07XG5cbiAgICAgICAgICAvLyBNZXJnZSBlYWNoIHJlZmVyZW5jZSBpbnRvIHRoZSByb290IGRvY3VtZW50J3MgcmVmZXJlbmNlc1xuICAgICAgICAgIE9iamVjdC5rZXlzKGRvY3VtZW50LnJlZnMpLmZvckVhY2goZnVuY3Rpb24gKGNSZWZQdHIpIHtcbiAgICAgICAgICAgIHZhciBmUHRyID0gcGF0aFRvUHRyKHBhdGhGcm9tUHRyKHJlZlB0cikuY29uY2F0KHBhdGhGcm9tUHRyKGNSZWZQdHIpKSk7XG4gICAgICAgICAgICB2YXIgcmVmRGV0YWlscyA9IHJlZnNbZlB0cl07XG5cbiAgICAgICAgICAgIGlmIChpc1R5cGUocmVmRGV0YWlscywgJ1VuZGVmaW5lZCcpKSB7XG4gICAgICAgICAgICAgIHJlZnNbZlB0cl0gPSBkb2N1bWVudC5yZWZzW2NSZWZQdHJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gUmVjb3JkIHRoZSB2YWx1ZSBvZiB0aGUgcmVtb3RlIHJlZmVyZW5jZVxuICAgICAgICAgIHJlZnNbcmVmUHRyXS52YWx1ZSA9IGRvY3VtZW50LnZhbHVlO1xuXG4gICAgICAgICAgLy8gTWFyayB0aGUgcmVtb3RlIHJlZmVyZW5jZSBpdHNlbGYgYXMgY2lyY3VsYXJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuY2lyY3VsYXIpIHtcbiAgICAgICAgICAgIHJlZnNbcmVmUHRyXS5jaXJjdWxhciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlZnM7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGFsbFRhc2tzO1xufVxuXG5mdW5jdGlvbiBmaW5kVmFsdWUgKG9iaiwgcGF0aCwgaWdub3JlKSB7XG4gIHZhciB2YWx1ZSA9IG9iajtcblxuICB0cnkge1xuICAgIHBhdGguZm9yRWFjaChmdW5jdGlvbiAoc2VnKSB7XG4gICAgICBpZiAoc2VnIGluIHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVbc2VnXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKCdKU09OIFBvaW50ZXIgcG9pbnRzIHRvIG1pc3NpbmcgbG9jYXRpb246ICcgKyBwYXRoVG9QdHIocGF0aCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoaWdub3JlID09PSB0cnVlKSB7XG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXh0cmFSZWZLZXlzIChyZWYpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHJlZikuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4ga2V5ICE9PSAnJHJlZic7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1vdGVEb2N1bWVudCAodXJsLCBvcHRpb25zKSB7XG4gIHZhciBjYWNoZUVudHJ5ID0gcmVtb3RlQ2FjaGVbdXJsXTtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHZhciBsb2FkZXJPcHRpb25zID0gY2xvbmUob3B0aW9ucy5sb2FkZXJPcHRpb25zIHx8IHt9KTtcblxuICBpZiAoaXNUeXBlKGNhY2hlRW50cnksICdVbmRlZmluZWQnKSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGNvbnRlbnQgcHJvY2Vzc29yLCBkZWZhdWx0IHRvIHByb2Nlc3NpbmcgdGhlIHJhdyByZXNwb25zZSBhcyBKU09OXG4gICAgaWYgKGlzVHlwZShsb2FkZXJPcHRpb25zLnByb2Nlc3NDb250ZW50LCAnVW5kZWZpbmVkJykpIHtcbiAgICAgIGxvYWRlck9wdGlvbnMucHJvY2Vzc0NvbnRlbnQgPSBmdW5jdGlvbiAocmVzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQsIEpTT04ucGFyc2UocmVzLnRleHQpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQXR0ZW1wdCB0byBsb2FkIHRoZSByZXNvdXJjZSB1c2luZyAgcGF0aC1sb2FkZXJcbiAgICBhbGxUYXNrcyA9IHBhdGhMb2FkZXIubG9hZCh1cmwsIGxvYWRlck9wdGlvbnMpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjYWNoZVxuICAgIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgcmVtb3RlQ2FjaGVbdXJsXSA9IHtcbiAgICAgICAgICB2YWx1ZTogcmVzXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZW1vdGVDYWNoZVt1cmxdID0ge1xuICAgICAgICAgIGVycm9yOiBlcnJcbiAgICAgICAgfTtcblxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBSZXR1cm4gdGhlIGNhY2hlZCB2ZXJzaW9uXG4gICAgYWxsVGFza3MgPSBhbGxUYXNrcy50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjYWNoZUVudHJ5LnZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgY2xvbmVkIHZlcnNpb24gdG8gYXZvaWQgdXBkYXRpbmcgdGhlIGNhY2hlXG4gIGFsbFRhc2tzID0gYWxsVGFza3MudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgcmV0dXJuIGNsb25lKHJlcyk7XG4gIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn1cblxuZnVuY3Rpb24gaXNSZWZMaWtlIChvYmosIHRocm93V2l0aERldGFpbHMpIHtcbiAgdmFyIHJlZkxpa2UgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgaWYgKCFpc1R5cGUob2JqLCAnT2JqZWN0JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb2JqIGlzIG5vdCBhbiBPYmplY3QnKTtcbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUob2JqLiRyZWYsICdTdHJpbmcnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvYmouJHJlZiBpcyBub3QgYSBTdHJpbmcnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd1dpdGhEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgcmVmTGlrZSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHJlZkxpa2U7XG59XG5cbmZ1bmN0aW9uIGlzVHlwZSAob2JqLCB0eXBlKSB7XG4gIC8vIEEgUGhhbnRvbUpTIGJ1ZyAoaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3BoYW50b21qcy9pc3N1ZXMvMTE3MjIpIHByb2hpYml0cyB1cyBmcm9tIHVzaW5nIHRoZSBzYW1lIGFwcHJvYWNoIGZvclxuICAvLyB1bmRlZmluZWQgY2hlY2tpbmcgdGhhdCB3ZSB1c2UgZm9yIG90aGVyIHR5cGVzLlxuICBpZiAodHlwZSA9PT0gJ1VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgdHlwZSArICddJztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlUmVmRmlsdGVyIChvcHRpb25zKSB7XG4gIHZhciByZWZGaWx0ZXI7XG5cbiAgaWYgKGlzVHlwZShvcHRpb25zLmZpbHRlciwgJ0FycmF5JykgfHwgaXNUeXBlKG9wdGlvbnMuZmlsdGVyLCAnU3RyaW5nJykpIHtcbiAgICByZWZGaWx0ZXIgPSBmdW5jdGlvbiAocmVmRGV0YWlscykge1xuICAgICAgdmFyIHZhbGlkVHlwZXMgPSBpc1R5cGUob3B0aW9ucy5maWx0ZXIsICdTdHJpbmcnKSA/IFtvcHRpb25zLmZpbHRlcl0gOiBvcHRpb25zLmZpbHRlcjtcblxuICAgICAgcmV0dXJuIHZhbGlkVHlwZXMuaW5kZXhPZihyZWZEZXRhaWxzLnR5cGUpID4gLTE7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc1R5cGUob3B0aW9ucy5maWx0ZXIsICdGdW5jdGlvbicpKSB7XG4gICAgcmVmRmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gIH0gZWxzZSB7XG4gICAgcmVmRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiByZWZGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIG1ha2VTdWJEb2NQYXRoIChvcHRpb25zKSB7XG4gIHZhciBmcm9tUGF0aCA9IFtdO1xuXG4gIGlmIChpc1R5cGUob3B0aW9ucy5zdWJEb2NQYXRoLCAnQXJyYXknKSkge1xuICAgIGZyb21QYXRoID0gb3B0aW9ucy5zdWJEb2NQYXRoO1xuICB9IGVsc2UgaWYgKGlzVHlwZShvcHRpb25zLnN1YkRvY1BhdGgsICdTdHJpbmcnKSkge1xuICAgIGZyb21QYXRoID0gcGF0aEZyb21QdHIob3B0aW9ucy5zdWJEb2NQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBmcm9tUGF0aDtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWUgKG9iaiwgcmVmUGF0aCwgdmFsdWUpIHtcbiAgZmluZFZhbHVlKG9iaiwgcmVmUGF0aC5zbGljZSgwLCByZWZQYXRoLmxlbmd0aCAtIDEpKVtyZWZQYXRoW3JlZlBhdGgubGVuZ3RoIC0gMV1dID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHdhbGsgKGFuY2VzdG9ycywgbm9kZSwgcGF0aCwgZm4pIHtcbiAgdmFyIHByb2Nlc3NDaGlsZHJlbiA9IHRydWU7XG5cbiAgZnVuY3Rpb24gd2Fsa0l0ZW0gKGl0ZW0sIHNlZ21lbnQpIHtcbiAgICBwYXRoLnB1c2goc2VnbWVudCk7XG4gICAgd2FsayhhbmNlc3RvcnMsIGl0ZW0sIHBhdGgsIGZuKTtcbiAgICBwYXRoLnBvcCgpO1xuICB9XG5cbiAgLy8gQ2FsbCB0aGUgaXRlcmF0ZWVcbiAgaWYgKGlzVHlwZShmbiwgJ0Z1bmN0aW9uJykpIHtcbiAgICBwcm9jZXNzQ2hpbGRyZW4gPSBmbihhbmNlc3RvcnMsIG5vZGUsIHBhdGgpO1xuICB9XG5cbiAgLy8gV2UgZG8gbm90IHByb2Nlc3MgY2lyY3VsYXIgb2JqZWN0cyBhZ2FpblxuICBpZiAoYW5jZXN0b3JzLmluZGV4T2Yobm9kZSkgPT09IC0xKSB7XG4gICAgYW5jZXN0b3JzLnB1c2gobm9kZSk7XG5cbiAgICBpZiAocHJvY2Vzc0NoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGlzVHlwZShub2RlLCAnQXJyYXknKSkge1xuICAgICAgICBub2RlLmZvckVhY2goZnVuY3Rpb24gKG1lbWJlciwgaW5kZXgpIHtcbiAgICAgICAgICB3YWxrSXRlbShtZW1iZXIsIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUeXBlKG5vZGUsICdPYmplY3QnKSkge1xuICAgICAgICBPYmplY3Qua2V5cyhub2RlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICB3YWxrSXRlbShub2RlW2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFuY2VzdG9ycy5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25zIChvcHRpb25zKSB7XG4gIGlmICghaXNUeXBlKG9wdGlvbnMsICdVbmRlZmluZWQnKSkge1xuICAgIGlmICghaXNUeXBlKG9wdGlvbnMsICdPYmplY3QnKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIE9iamVjdCcpO1xuICAgIH0gZWxzZSBpZiAoIWlzVHlwZShvcHRpb25zLmZpbHRlciwgJ1VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAhaXNUeXBlKG9wdGlvbnMuZmlsdGVyLCAnQXJyYXknKSAmJlxuICAgICAgICAgICAgICAgIWlzVHlwZShvcHRpb25zLmZpbHRlciwgJ0Z1bmN0aW9uJykgJiZcbiAgICAgICAgICAgICAgICFpc1R5cGUob3B0aW9ucy5maWx0ZXIsICdTdHJpbmcnKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5maWx0ZXIgbXVzdCBiZSBhbiBBcnJheSwgYSBGdW5jdGlvbiBvZiBhIFN0cmluZycpO1xuICAgIH0gZWxzZSBpZiAoIWlzVHlwZShvcHRpb25zLmluY2x1ZGVJbnZhbGlkLCAnVW5kZWZpbmVkJykgJiZcbiAgICAgICAgICAgICAgICFpc1R5cGUob3B0aW9ucy5pbmNsdWRlSW52YWxpZCwgJ0Jvb2xlYW4nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5pbmNsdWRlSW52YWxpZCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuICAgIH0gZWxzZSBpZiAoIWlzVHlwZShvcHRpb25zLnJlZlByZVByb2Nlc3NvciwgJ1VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAhaXNUeXBlKG9wdGlvbnMucmVmUHJlUHJvY2Vzc29yLCAnRnVuY3Rpb24nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5yZWZQcmVQcm9jZXNzb3IgbXVzdCBiZSBhIEZ1bmN0aW9uJyk7XG4gICAgfSBlbHNlIGlmICghaXNUeXBlKG9wdGlvbnMucmVmUG9zdFByb2Nlc3NvciwgJ1VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAhaXNUeXBlKG9wdGlvbnMucmVmUG9zdFByb2Nlc3NvciwgJ0Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMucmVmUG9zdFByb2Nlc3NvciBtdXN0IGJlIGEgRnVuY3Rpb24nKTtcbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUob3B0aW9ucy5zdWJEb2NQYXRoLCAnVW5kZWZpbmVkJykgJiZcbiAgICAgICAgICAgICAgICFpc1R5cGUob3B0aW9ucy5zdWJEb2NQYXRoLCAnQXJyYXknKSAmJlxuICAgICAgICAgICAgICAgIWlzUHRyKG9wdGlvbnMuc3ViRG9jUGF0aCkpIHtcbiAgICAgIC8vIElmIGEgcG9pbnRlciBpcyBwcm92aWRlZCwgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyBub3QgdGhlIHByb3BlciB0eXBlXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLnN1YkRvY1BhdGggbXVzdCBiZSBhbiBBcnJheSBvZiBwYXRoIHNlZ21lbnRzIG9yIGEgdmFsaWQgSlNPTiBQb2ludGVyJyk7XG4gICAgfVxuICB9XG59XG5cbi8qIE1vZHVsZSBNZW1iZXJzICovXG5cbi8qXG4gKiBFYWNoIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb24gc3RhdGVtZW50cyBhbmQgKnRoZW4qIGV4cG9ydGVkIGluIHR3byBzdGVwcyBpbnN0ZWFkIG9mIG9uZSBkdWVcbiAqIHRvIGEgYnVnIGluIGpzZG9jIChodHRwczovL2dpdGh1Yi5jb20vanNkb2MybWQvanNkb2MtcGFyc2UvaXNzdWVzLzE4KSB0aGF0IGNhdXNlcyBvdXIgZG9jdW1lbnRhdGlvbiB0byBiZVxuICogZ2VuZXJhdGVkIGltcHJvcGVybHkuICBUaGUgaW1wYWN0IHRvIHRoZSB1c2VyIGlzIHNpZ25pZmljYW50IGVub3VnaCBmb3IgdXMgdG8gd2FycmFudCB3b3JraW5nIGFyb3VuZCBpdCB1bnRpbCB0aGlzXG4gKiBpcyBmaXhlZC5cbiAqL1xuXG4vKipcbiAqIFRoZSBvcHRpb25zIHVzZWQgZm9yIHZhcmlvdXMgSnNvblJlZnMgQVBJcy5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBKc29uUmVmc09wdGlvbnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXXxmdW5jdGlvbn0gW2ZpbHRlcj1mdW5jdGlvbiAoKSB7cmV0dXJuIHRydWU7fV0gLSBUaGUgZmlsdGVyIHRvIHVzZSB3aGVuIGdhdGhlcmluZyBKU09OXG4gKiBSZWZlcmVuY2VzICooSWYgdGhpcyB2YWx1ZSBpcyBhIHNpbmdsZSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdGhlIHZhbHVlKHMpIGFyZSBleHBlY3RlZCB0byBiZSB0aGUgYHR5cGUocylgXG4gKiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gY29sbGVjdGluZyBhcyBkZXNjcmliZWQgaW4ge0BsaW5rIG1vZHVsZTpKc29uUmVmcy5nZXRSZWZEZXRhaWxzfS4gIElmIGl0IGlzIGEgZnVuY3Rpb24sIGl0IGlzXG4gKiBleHBlY3RlZCB0aGF0IHRoZSBmdW5jdGlvbiBiZWhhdmVzIGxpa2Uge0BsaW5rIG1vZHVsZTpKc29uUmVmc35SZWZEZXRhaWxzRmlsdGVyfS4pKlxuICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZUludmFsaWQ9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBpbnZhbGlkIEpTT04gUmVmZXJlbmNlIGRldGFpbHMgKihUaGlzIHdpbGwgbWFrZVxuICogaXQgc28gdGhhdCBvYmplY3RzIHRoYXQgYXJlIGxpa2UgSlNPTiBSZWZlcmVuY2Ugb2JqZWN0cywgYXMgaW4gdGhleSBhcmUgYW4gYE9iamVjdGAgYW5kIHRoZSBoYXZlIGEgYCRyZWZgIHByb3BlcnR5LFxuICogYnV0IGZhaWwgdmFsaWRhdGlvbiB3aWxsIGJlIGluY2x1ZGVkLiAgVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byBrbm93IGlmIHlvdSBoYXZlIGludmFsaWQgSlNPTlxuICogUmVmZXJlbmNlIGRlZmluaXRpb25zLiAgVGhpcyB3aWxsIG5vdCBtZWFuIHRoYXQgQVBJcyB3aWxsIHByb2Nlc3MgaW52YWxpZCBKU09OIFJlZmVyZW5jZXMgYnV0IHRoZSByZWFzb25zIGFzIHRvIHdoeVxuICogdGhlIEpTT04gUmVmZXJlbmNlcyBhcmUgaW52YWxpZCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBtZXRhZGF0YS4pKlxuICogQHBhcmFtIHtvYmplY3R9IFtsb2FkZXJPcHRpb25zXSAtIFRoZSBvcHRpb25zIHRvIHBhc3MgdG9cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vd2hpdGxvY2tqYy9wYXRoLWxvYWRlci9ibG9iL21hc3Rlci9kb2NzL0FQSS5tZCNtb2R1bGVfUGF0aExvYWRlci5sb2FkfFBhdGhMb2FkZXJ+bG9hZH1cbiAqIEBwYXJhbSB7UmVmUHJlUHJvY2Vzc29yfSBbcmVmUHJlUHJvY2Vzc29yXSAtIFRoZSBjYWxsYmFjayB1c2VkIHRvIHByZS1wcm9jZXNzIGEgSlNPTiBSZWZlcmVuY2UgbGlrZVxuICogb2JqZWN0ICooVGhpcyBpcyBjYWxsZWQgcHJpb3IgdG8gdmFsaWRhdGluZyB0aGUgSlNPTiBSZWZlcmVuY2UgbGlrZSBvYmplY3QgYW5kIGdldHRpbmcgaXRzIGRldGFpbHMpKlxuICogQHBhcmFtIHtSZWZQb3N0UHJvY2Vzc29yfSBbcmVmUG9zdFByb2Nlc3Nvcl0gLSBUaGUgY2FsbGJhY2sgdXNlZCB0byBwb3N0LXByb2Nlc3MgdGhlIEpTT04gUmVmZXJlbmNlXG4gKiBtZXRhZGF0YSAqKFRoaXMgaXMgY2FsbGVkIHByaW9yIGZpbHRlcmluZyB0aGUgcmVmZXJlbmNlcykqXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucmVsYXRpdmVCYXNlXSAtIFRoZSBiYXNlIGxvY2F0aW9uIHRvIHVzZSB3aGVuIHJlc29sdmluZyByZWxhdGl2ZSByZWZlcmVuY2VzICooT25seSB1c2VmdWxcbiAqIGZvciBBUElzIHRoYXQgZG8gcmVtb3RlIHJlZmVyZW5jZSByZXNvbHV0aW9uLiAgSWYgdGhpcyB2YWx1ZSBpcyBub3QgZGVmaW5lZCxcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vd2hpdGxvY2tqYy9wYXRoLWxvYWRlcnxwYXRoLWxvYWRlcn0gd2lsbCB1c2UgYHdpbmRvdy5sb2NhdGlvbi5ocmVmYCBmb3IgdGhlIGJyb3dzZXIgYW5kXG4gKiBgcHJvY2Vzcy5jd2QoKWAgZm9yIE5vZGUuanMuKSpcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbb3B0aW9ucy5zdWJEb2NQYXRoPVtdXSAtIFRoZSBKU09OIFBvaW50ZXIgb3IgYXJyYXkgb2YgcGF0aCBzZWdtZW50cyB0byB0aGUgc3ViIGRvY3VtZW50XG4gKiBsb2NhdGlvbiB0byBzZWFyY2ggZnJvbVxuICovXG5cbi8qKlxuICogU2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gZmlsdGVyIG91dCBKU09OIFJlZmVyZW5jZXMuXG4gKlxuICogQHR5cGVkZWYge2Z1bmN0aW9ufSBSZWZEZXRhaWxzRmlsdGVyXG4gKlxuICogQHBhcmFtIHtVbnJlc29sdmVkUmVmRGV0YWlsc30gcmVmRGV0YWlscyAtIFRoZSBKU09OIFJlZmVyZW5jZSBkZXRhaWxzIHRvIHRlc3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgSlNPTiBSZWZlcmVuY2VcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciB0aGUgSlNPTiBSZWZlcmVuY2Ugc2hvdWxkIGJlIGZpbHRlcmVkICoob3V0KSogb3Igbm90XG4gKi9cblxuLyoqXG4gKiBTaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBwcmUtcHJvY2VzcyBhIEpTT04gUmVmZXJlbmNlIGxpa2Ugb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbn0gUmVmUHJlUHJvY2Vzc29yXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIFRoZSBKU09OIFJlZmVyZW5jZSBsaWtlIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBKU09OIFJlZmVyZW5jZSBsaWtlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBwcm9jZXNzZWQgSlNPTiBSZWZlcmVuY2UgbGlrZSBvYmplY3RcbiAqL1xuXG4vKipcbiAqIFNpbXBsZSBmdW5jdGlvbiB1c2VkIHRvIHBvc3QtcHJvY2VzcyBhIEpTT04gUmVmZXJlbmNlIGRldGFpbHMuXG4gKlxuICogQHR5cGVkZWYge2Z1bmN0aW9ufSBSZWZQb3N0UHJvY2Vzc29yXG4gKlxuICogQHBhcmFtIHtVbnJlc29sdmVkUmVmRGV0YWlsc30gcmVmRGV0YWlscyAtIFRoZSBKU09OIFJlZmVyZW5jZSBkZXRhaWxzIHRvIHRlc3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgSlNPTiBSZWZlcmVuY2VcbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgcHJvY2Vzc2VkIEpTT04gUmVmZXJlbmNlIGRldGFpbHMgb2JqZWN0XG4gKi9cblxuLyoqXG4gKiBEZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCByZXNvbHZlZCBKU09OIFJlZmVyZW5jZXMuXG4gKlxuICogQHR5cGVkZWYge1VucmVzb2x2ZWRSZWZEZXRhaWxzfSBSZXNvbHZlZFJlZkRldGFpbHNcbiAqXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjaXJjdWxhcl0gLSBXaGV0aGVyIG9yIG5vdCB0aGUgSlNPTiBSZWZlcmVuY2UgaXMgY2lyY3VsYXIgKihXaWxsIG5vdCBiZSBzZXQgaWYgdGhlIEpTT05cbiAqIFJlZmVyZW5jZSBpcyBub3QgY2lyY3VsYXIpKlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbWlzc2luZ10gLSBXaGV0aGVyIG9yIG5vdCB0aGUgcmVmZXJlbmNlZCB2YWx1ZSB3YXMgbWlzc2luZyBvciBub3QgKihXaWxsIG5vdCBiZSBzZXQgaWYgdGhlXG4gKiByZWZlcmVuY2VkIHZhbHVlIGlzIG5vdCBtaXNzaW5nKSpcbiAqIEBwcm9wZXJ0eSB7Kn0gW3ZhbHVlXSAtIFRoZSByZWZlcmVuY2VkIHZhbHVlICooV2lsbCBub3QgYmUgc2V0IGlmIHRoZSByZWZlcmVuY2VkIHZhbHVlIGlzIG1pc3NpbmcpKlxuICovXG5cbi8qKlxuICogVGhlIHJlc3VsdHMgb2YgcmVzb2x2aW5nIHRoZSBKU09OIFJlZmVyZW5jZXMgb2YgYW4gYXJyYXkvb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlc29sdmVkUmVmc1Jlc3VsdHNcbiAqXG4gKiBAcHJvcGVydHkge1Jlc29sdmVkUmVmRGV0YWlsc30gcmVmcyAtIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBKU09OIFBvaW50ZXJzICooZnJhZ21lbnQgdmVyc2lvbikqXG4gKiB0byB3aGVyZSB0aGUgSlNPTiBSZWZlcmVuY2UgaXMgZGVmaW5lZCBhbmQgd2hvc2UgdmFsdWVzIGFyZSB7QGxpbmsgbW9kdWxlOkpzb25SZWZzflJlc29sdmVkUmVmRGV0YWlsc31cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSB2YWx1ZSAtIFRoZSBhcnJheS9vYmplY3Qgd2l0aCBpdHMgSlNPTiBSZWZlcmVuY2VzIGZ1bGx5IHJlc29sdmVkXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmV0cmlldmVkIGRvY3VtZW50IGFuZCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBpdHMgSlNPTiBSZWZlcmVuY2VzLlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJldHJpZXZlZFJlZnNSZXN1bHRzXG4gKlxuICogQHByb3BlcnR5IHtVbnJlc29sdmVkUmVmRGV0YWlsc30gcmVmcyAtIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBKU09OIFBvaW50ZXJzICooZnJhZ21lbnQgdmVyc2lvbikqXG4gKiB0byB3aGVyZSB0aGUgSlNPTiBSZWZlcmVuY2UgaXMgZGVmaW5lZCBhbmQgd2hvc2UgdmFsdWVzIGFyZSB7QGxpbmsgbW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzfVxuICogQHByb3BlcnR5IHtvYmplY3R9IHZhbHVlIC0gVGhlIHJldHJpZXZlZCBkb2N1bWVudFxuICovXG5cbi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJldHJpZXZlZCBkb2N1bWVudCwgdGhlIGRvY3VtZW50IHdpdGggaXRzIHJlZmVyZW5jZXMgcmVzb2x2ZWQgYW5kICBkZXRhaWxlZCBpbmZvcm1hdGlvblxuICogYWJvdXQgaXRzIEpTT04gUmVmZXJlbmNlcy5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZXRyaWV2ZWRSZXNvbHZlZFJlZnNSZXN1bHRzXG4gKlxuICogQHByb3BlcnR5IHtVbnJlc29sdmVkUmVmRGV0YWlsc30gcmVmcyAtIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBKU09OIFBvaW50ZXJzICooZnJhZ21lbnQgdmVyc2lvbikqXG4gKiB0byB3aGVyZSB0aGUgSlNPTiBSZWZlcmVuY2UgaXMgZGVmaW5lZCBhbmQgd2hvc2UgdmFsdWVzIGFyZSB7QGxpbmsgbW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzfVxuICogQHByb3BlcnR5IHtSZXNvbHZlZFJlZnNSZXN1bHRzfSAtIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBKU09OIFBvaW50ZXJzICooZnJhZ21lbnQgdmVyc2lvbikqXG4gKiB0byB3aGVyZSB0aGUgSlNPTiBSZWZlcmVuY2UgaXMgZGVmaW5lZCBhbmQgd2hvc2UgdmFsdWVzIGFyZSB7QGxpbmsgbW9kdWxlOkpzb25SZWZzflJlc29sdmVkUmVmRGV0YWlsc31cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSB2YWx1ZSAtIFRoZSByZXRyaWV2ZWQgZG9jdW1lbnRcbiAqL1xuXG4vKipcbiAqIERldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHVucmVzb2x2ZWQgSlNPTiBSZWZlcmVuY2VzLlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFVucmVzb2x2ZWRSZWZEZXRhaWxzXG4gKlxuICogQHByb3BlcnR5IHtvYmplY3R9IGRlZiAtIFRoZSBKU09OIFJlZmVyZW5jZSBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Vycm9yXSAtIFRoZSBlcnJvciBpbmZvcm1hdGlvbiBmb3IgaW52YWxpZCBKU09OIFJlZmVyZW5jZSBkZWZpbml0aW9uICooT25seSBwcmVzZW50IHdoZW4gdGhlXG4gKiBKU09OIFJlZmVyZW5jZSBkZWZpbml0aW9uIGlzIGludmFsaWQgb3IgdGhlcmUgd2FzIGEgcHJvYmxlbSByZXRyaWV2aW5nIGEgcmVtb3RlIHJlZmVyZW5jZSBkdXJpbmcgcmVzb2x1dGlvbikqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXJpIC0gVGhlIFVSSSBwb3J0aW9uIG9mIHRoZSBKU09OIFJlZmVyZW5jZVxuICogQHByb3BlcnR5IHtvYmplY3R9IHVyaURldGFpbHMgLSBEZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgVVJJIGFzIHByb3ZpZGVkIGJ5XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC91cmktanN8VVJJLnBhcnNlfS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gVGhlIEpTT04gUmVmZXJlbmNlIHR5cGUgKihUaGlzIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogYGludmFsaWRgLCBgbG9jYWxgLFxuICogYHJlbGF0aXZlYCBvciBgcmVtb3RlYC4pKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt3YXJuaW5nXSAtIFRoZSB3YXJuaW5nIGluZm9ybWF0aW9uICooT25seSBwcmVzZW50IHdoZW4gdGhlIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb24gcHJvZHVjZXMgYVxuICogd2FybmluZykqXG4gKi9cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGludGVybmFsIGNhY2hlIG9mIHJlbW90ZSBkb2N1bWVudHMsIHJlZmVyZW5jZSBkZXRhaWxzLCBldGMuXG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmcy5jbGVhckNhY2hlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyQ2FjaGUgKCkge1xuICByZW1vdGVDYWNoZSA9IHt9O1xufVxuXG4vKipcbiAqIFRha2VzIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMgYW5kIGRlY29kZXMgdGhlIEpTT04gUG9pbnRlciB0b2tlbnMgaW4gdGhlbS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gVGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cyB3aXRoIHRoZWlyIEpTT04gUG9pbnRlciB0b2tlbnMgZGVjb2RlZFxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgcGF0aCBpcyBub3QgYW4gYEFycmF5YFxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxI3NlY3Rpb24tM31cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLmRlY29kZVBhdGhcbiAqL1xuZnVuY3Rpb24gZGVjb2RlUGF0aCAocGF0aCkge1xuICBpZiAoIWlzVHlwZShwYXRoLCAnQXJyYXknKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgcmV0dXJuIHBhdGgubWFwKGZ1bmN0aW9uIChzZWcpIHtcbiAgICBpZiAoIWlzVHlwZShzZWcsICdTdHJpbmcnKSkge1xuICAgICAgc2VnID0gSlNPTi5zdHJpbmdpZnkoc2VnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VnLnJlcGxhY2UoL34xL2csICcvJykucmVwbGFjZSgvfjAvZywgJ34nKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cyBhbmQgZW5jb2RlcyB0aGUgc3BlY2lhbCBKU09OIFBvaW50ZXIgY2hhcmFjdGVycyBpbiB0aGVtLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBUaGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50c1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzIHdpdGggdGhlaXIgSlNPTiBQb2ludGVyIHRva2VucyBlbmNvZGVkXG4gKlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBwYXRoIGlzIG5vdCBhbiBgQXJyYXlgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEjc2VjdGlvbi0zfVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMuZW5jb2RlUGF0aFxuICovXG5mdW5jdGlvbiBlbmNvZGVQYXRoIChwYXRoKSB7XG4gIGlmICghaXNUeXBlKHBhdGgsICdBcnJheScpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGF0aCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICByZXR1cm4gcGF0aC5tYXAoZnVuY3Rpb24gKHNlZykge1xuICAgIGlmICghaXNUeXBlKHNlZywgJ1N0cmluZycpKSB7XG4gICAgICBzZWcgPSBKU09OLnN0cmluZ2lmeShzZWcpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWcucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIEpTT04gUmVmZXJlbmNlcyBkZWZpbmVkIHdpdGhpbiB0aGUgcHJvdmlkZWQgYXJyYXkvb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fSBvYmogLSBUaGUgc3RydWN0dXJlIHRvIGZpbmQgSlNPTiBSZWZlcmVuY2VzIHdpdGhpblxuICogQHBhcmFtIHtKc29uUmVmc09wdGlvbnN9IFtvcHRpb25zXSAtIFRoZSBKc29uUmVmcyBvcHRpb25zXG4gKlxuICogQHJldHVybnMge29iamVjdH0gYW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIEpTT04gUG9pbnRlcnMgKihmcmFnbWVudCB2ZXJzaW9uKSogdG8gd2hlcmUgdGhlIEpTT04gUmVmZXJlbmNlIGlzIGRlZmluZWRcbiAqIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIHtAbGluayBtb2R1bGU6SnNvblJlZnN+VW5yZXNvbHZlZFJlZkRldGFpbHN9LlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSB3aGVuIHRoZSBpbnB1dCBhcmd1bWVudHMgZmFpbCB2YWxpZGF0aW9uIG9yIGlmIGBvcHRpb25zLnN1YkRvY1BhdGhgIHBvaW50cyB0byBhbiBpbnZhbGlkIGxvY2F0aW9uXG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmcy5maW5kUmVmc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGaW5kaW5nIGFsbCB2YWxpZCByZWZlcmVuY2VzXG4gKiB2YXIgYWxsUmVmcyA9IEpzb25SZWZzLmZpbmRSZWZzKG9iaik7XG4gKiAvLyBGaW5kaW5nIGFsbCByZW1vdGUgcmVmZXJlbmNlc1xuICogdmFyIHJlbW90ZVJlZnMgPSBKc29uUmVmcy5maW5kUmVmcyhvYmosIHtmaWx0ZXI6IFsncmVsYXRpdmUnLCAncmVtb3RlJ119KTtcbiAqIC8vIEZpbmRpbmcgYWxsIGludmFsaWQgcmVmZXJlbmNlc1xuICogdmFyIGludmFsaWRSZWZzID0gSnNvblJlZnMuZmluZFJlZnMob2JqLCB7ZmlsdGVyOiAnaW52YWxpZCcsIGluY2x1ZGVJbnZhbGlkOiB0cnVlfSk7XG4gKi9cbmZ1bmN0aW9uIGZpbmRSZWZzIChvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICB2YXIgZnJvbU9iaiA9IG9iajtcbiAgdmFyIGZyb21QYXRoO1xuICB2YXIgcmVmcyA9IHt9O1xuICB2YXIgcmVmRmlsdGVyO1xuXG4gIC8vIFZhbGlkYXRlIHRoZSBwcm92aWRlZCBkb2N1bWVudFxuICBpZiAoIWlzVHlwZShvYmosICdBcnJheScpICYmICFpc1R5cGUob2JqLCAnT2JqZWN0JykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvYmogbXVzdCBiZSBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuXG4gIC8vIFNldCBkZWZhdWx0IGZvciBvcHRpb25zXG4gIGlmIChpc1R5cGUob3B0aW9ucywgJ1VuZGVmaW5lZCcpKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uc1xuICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gQ29udmVydCBmcm9tIHRvIGEgcG9pbnRlclxuICBmcm9tUGF0aCA9IG1ha2VTdWJEb2NQYXRoKG9wdGlvbnMpO1xuXG4gIC8vIENvbnZlcnQgb3B0aW9ucy5maWx0ZXIgZnJvbSBhbiBBcnJheS9TdHJpbmcgdG8gYSBGdW5jdGlvblxuICByZWZGaWx0ZXIgPSBtYWtlUmVmRmlsdGVyKG9wdGlvbnMpO1xuXG4gIGlmIChmcm9tUGF0aC5sZW5ndGggPiAwKSB7XG4gICAgYW5jZXN0b3JzID0gZmluZEFuY2VzdG9ycyhvYmosIGZyb21QYXRoKTtcbiAgICBmcm9tT2JqID0gZmluZFZhbHVlKG9iaiwgZnJvbVBhdGgpO1xuICB9XG5cbiAgLy8gV2FsayB0aGUgZG9jdW1lbnQgKG9yIHN1YiBkb2N1bWVudCkgYW5kIGZpbmQgYWxsIEpTT04gUmVmZXJlbmNlc1xuICB3YWxrKGFuY2VzdG9ycywgZnJvbU9iaiwgZnJvbVBhdGgsIGZ1bmN0aW9uIChhbmNlc3RvcnMsIG5vZGUsIHBhdGgpIHtcbiAgICB2YXIgcHJvY2Vzc0NoaWxkcmVuID0gdHJ1ZTtcbiAgICB2YXIgcmVmRGV0YWlscztcblxuICAgIGlmIChpc1JlZkxpa2Uobm9kZSkpIHtcbiAgICAgIC8vIFByZS1wcm9jZXNzIHRoZSBub2RlIHdoZW4gbmVjZXNzYXJ5XG4gICAgICBpZiAoIWlzVHlwZShvcHRpb25zLnJlZlByZVByb2Nlc3NvciwgJ1VuZGVmaW5lZCcpKSB7XG4gICAgICAgIG5vZGUgPSBvcHRpb25zLnJlZlByZVByb2Nlc3Nvcihub2RlLCBwYXRoKTtcbiAgICAgIH1cblxuICAgICAgcmVmRGV0YWlscyA9IGdldFJlZkRldGFpbHMobm9kZSk7XG5cbiAgICAgIGlmIChyZWZEZXRhaWxzLnR5cGUgIT09ICdpbnZhbGlkJyB8fCBvcHRpb25zLmluY2x1ZGVJbnZhbGlkID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChyZWZGaWx0ZXIocmVmRGV0YWlscywgcGF0aCkgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyBQb3N0LXByb2Nlc3MgdGhlIHJlZmVyZW5jZSBkZXRhaWxzIHdoZW4gbmVjZXNzYXJ5XG4gICAgICAgICAgaWYgKCFpc1R5cGUob3B0aW9ucy5yZWZQb3N0UHJvY2Vzc29yLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgIHJlZkRldGFpbHMgPSBvcHRpb25zLnJlZlBvc3RQcm9jZXNzb3IocmVmRGV0YWlscywgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVmc1twYXRoVG9QdHIocGF0aCldID0gcmVmRGV0YWlscztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdoZW5ldmVyIGEgSlNPTiBSZWZlcmVuY2UgaGFzIGV4dHJhIGNoaWxkcmVuLCBpdHMgY2hpbGRyZW4gc2hvdWxkIGJlIGlnbm9yZWQgc28gd2Ugd2FudCB0byBzdG9wIHByb2Nlc3NpbmcuXG4gICAgICAgIC8vICAgU2VlOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1wYnJ5YW4tenlwLWpzb24tcmVmLTAzI3NlY3Rpb24tM1xuICAgICAgICBpZiAoZ2V0RXh0cmFSZWZLZXlzKG5vZGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcm9jZXNzQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzQ2hpbGRyZW47XG4gIH0pO1xuXG4gIHJldHVybiByZWZzO1xufVxuXG4vKipcbiAqIEZpbmRzIEpTT04gUmVmZXJlbmNlcyBkZWZpbmVkIHdpdGhpbiB0aGUgZG9jdW1lbnQgYXQgdGhlIHByb3ZpZGVkIGxvY2F0aW9uLlxuICpcbiAqIFRoaXMgQVBJIGlzIGlkZW50aWNhbCB0byB7QGxpbmsgbW9kdWxlOkpzb25SZWZzLmZpbmRSZWZzfSBleGNlcHQgdGhpcyBBUEkgd2lsbCByZXRyaWV2ZSBhIHJlbW90ZSBkb2N1bWVudCBhbmQgdGhlblxuICogcmV0dXJuIHRoZSByZXN1bHQgb2Yge0BsaW5rIG1vZHVsZTpKc29uUmVmcy5maW5kUmVmc30gb24gdGhlIHJldHJpZXZlZCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gLSBUaGUgbG9jYXRpb24gdG8gcmV0cmlldmUgKihDYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUsIGp1c3QgbWFrZSBzdXJlIHlvdSBsb29rIGF0IHRoZVxuICoge0BsaW5rIG1vZHVsZTpKc29uUmVmc35Kc29uUmVmc09wdGlvbnN8b3B0aW9ucyBkb2N1bWVudGF0aW9ufSB0byBzZWUgaG93IHJlbGF0aXZlIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQuKSpcbiAqIEBwYXJhbSB7SnNvblJlZnNPcHRpb25zfSBbb3B0aW9uc10gLSBUaGUgSnNvblJlZnMgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhIHtAbGluayBtb2R1bGU6SnNvblJlZnN+UmV0cmlldmVkUmVmc1Jlc3VsdHN9IGFuZCByZWplY3RzIHdpdGggYW5cbiAqIGBFcnJvcmAgd2hlbiB0aGUgaW5wdXQgYXJndW1lbnRzIGZhaWwgdmFsaWRhdGlvbiwgd2hlbiBgb3B0aW9ucy5zdWJEb2NQYXRoYCBwb2ludHMgdG8gYW4gaW52YWxpZCBsb2NhdGlvbiBvciB3aGVuXG4gKiAgdGhlIGxvY2F0aW9uIGFyZ3VtZW50IHBvaW50cyB0byBhbiB1bmxvYWRhYmxlIHJlc291cmNlXG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmcy5maW5kUmVmc0F0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEV4YW1wbGUgdGhhdCBvbmx5IHJlc29sdmVzIHJlZmVyZW5jZXMgd2l0aGluIGEgc3ViIGRvY3VtZW50XG4gKiBKc29uUmVmcy5maW5kUmVmc0F0KCdodHRwOi8vcGV0c3RvcmUuc3dhZ2dlci5pby92Mi9zd2FnZ2VyLmpzb24nLCB7XG4gKiAgICAgc3ViRG9jUGF0aDogJyMvZGVmaW5pdGlvbnMnXG4gKiAgIH0pXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAqICAgICAgLy8gRG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3BvbnNlXG4gKiAgICAgIC8vXG4gKiAgICAgIC8vIHJlcy5yZWZzOiBKU09OIFJlZmVyZW5jZSBsb2NhdGlvbnMgYW5kIGRldGFpbHNcbiAqICAgICAgLy8gcmVzLnZhbHVlOiBUaGUgcmV0cmlldmVkIGRvY3VtZW50XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmxvZyhlcnIuc3RhY2spO1xuICogICB9KTtcbiAqL1xuZnVuY3Rpb24gZmluZFJlZnNBdCAobG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgYWxsVGFza3MgPSBhbGxUYXNrc1xuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgICAgaWYgKCFpc1R5cGUobG9jYXRpb24sICdTdHJpbmcnKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdsb2NhdGlvbiBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0IGZvciBvcHRpb25zXG4gICAgICBpZiAoaXNUeXBlKG9wdGlvbnMsICdVbmRlZmluZWQnKSkge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIG9wdGlvbnMgKERvaW5nIHRoaXMgaGVyZSBmb3IgYSBxdWljaylcbiAgICAgIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgLy8gQ29tYmluZSB0aGUgbG9jYXRpb24gYW5kIHRoZSBvcHRpb25hbCByZWxhdGl2ZSBiYXNlXG4gICAgICBsb2NhdGlvbiA9IGNvbWJpbmVVUklzKG9wdGlvbnMucmVsYXRpdmVCYXNlLCBsb2NhdGlvbik7XG5cbiAgICAgIHJldHVybiBnZXRSZW1vdGVEb2N1bWVudChsb2NhdGlvbiwgb3B0aW9ucyk7XG4gICAgfSlcbiAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICB2YXIgY2FjaGVFbnRyeSA9IGNsb25lKHJlbW90ZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICB2YXIgY09wdGlvbnM7XG5cbiAgICAgIGlmIChpc1R5cGUoY2FjaGVFbnRyeS5yZWZzLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgY09wdGlvbnMgPSBjbG9uZShvcHRpb25zKTtcblxuICAgICAgICAvLyBEbyBub3QgZmlsdGVyIGFueSByZWZlcmVuY2VzIHNvIHRoZSBjYWNoZSBpcyBjb21wbGV0ZVxuICAgICAgICBkZWxldGUgY09wdGlvbnMuZmlsdGVyO1xuICAgICAgICBkZWxldGUgY09wdGlvbnMuc3ViRG9jUGF0aDtcblxuICAgICAgICBjT3B0aW9ucy5pbmNsdWRlSW52YWxpZCA9IHRydWU7XG5cbiAgICAgICAgcmVtb3RlQ2FjaGVbbG9jYXRpb25dLnJlZnMgPSBmaW5kUmVmcyhyZXMsIGNPcHRpb25zKTtcblxuICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSByZWZlcmVuY2VzIGJhc2VkIG9uIG9wdGlvbnMuZmlsdGVyIGFuZCBvcHRpb25zLnN1YkRvY1BhdGhcbiAgICAgICAgY2FjaGVFbnRyeS5yZWZzID0gZmlsdGVyUmVmcyhvcHRpb25zLCByZW1vdGVDYWNoZVtsb2NhdGlvbl0ucmVmcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBKU09OIFJlZmVyZW5jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIC0gVGhlIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb25cbiAqXG4gKiBAcmV0dXJucyB7VW5yZXNvbHZlZFJlZkRldGFpbHN9IHRoZSBkZXRhaWxlZCBpbmZvcm1hdGlvblxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMuZ2V0UmVmRGV0YWlsc1xuICovXG5mdW5jdGlvbiBnZXRSZWZEZXRhaWxzIChvYmopIHtcbiAgdmFyIGRldGFpbHMgPSB7XG4gICAgZGVmOiBvYmpcbiAgfTtcbiAgdmFyIGNhY2hlS2V5O1xuICB2YXIgZXh0cmFLZXlzO1xuICB2YXIgdXJpRGV0YWlscztcblxuICB0cnkge1xuICAgIGlmIChpc1JlZkxpa2Uob2JqLCB0cnVlKSkge1xuICAgICAgY2FjaGVLZXkgPSBvYmouJHJlZjtcbiAgICAgIHVyaURldGFpbHMgPSB1cmlEZXRhaWxzQ2FjaGVbY2FjaGVLZXldO1xuXG4gICAgICBpZiAoaXNUeXBlKHVyaURldGFpbHMsICdVbmRlZmluZWQnKSkge1xuICAgICAgICB1cmlEZXRhaWxzID0gdXJpRGV0YWlsc0NhY2hlW2NhY2hlS2V5XSA9IFVSSS5wYXJzZShjYWNoZUtleSk7XG4gICAgICB9XG5cbiAgICAgIGRldGFpbHMudXJpID0gY2FjaGVLZXk7XG4gICAgICBkZXRhaWxzLnVyaURldGFpbHMgPSB1cmlEZXRhaWxzO1xuXG4gICAgICBpZiAoaXNUeXBlKHVyaURldGFpbHMuZXJyb3IsICdVbmRlZmluZWQnKSkge1xuICAgICAgICAvLyBDb252ZXJ0IHRoZSBVUkkgcmVmZXJlbmNlIHRvIG9uZSBvZiBvdXIgdHlwZXNcbiAgICAgICAgc3dpdGNoICh1cmlEZXRhaWxzLnJlZmVyZW5jZSkge1xuICAgICAgICBjYXNlICdhYnNvbHV0ZSc6XG4gICAgICAgIGNhc2UgJ3VyaSc6XG4gICAgICAgICAgZGV0YWlscy50eXBlID0gJ3JlbW90ZSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NhbWUtZG9jdW1lbnQnOlxuICAgICAgICAgIGRldGFpbHMudHlwZSA9ICdsb2NhbCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZGV0YWlscy50eXBlID0gdXJpRGV0YWlscy5yZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRldGFpbHMuZXJyb3IgPSBkZXRhaWxzLnVyaURldGFpbHMuZXJyb3I7XG4gICAgICAgIGRldGFpbHMudHlwZSA9ICdpbnZhbGlkJztcbiAgICAgIH1cblxuICAgICAgLy8gSWRlbnRpZnkgd2FybmluZ1xuICAgICAgZXh0cmFLZXlzID0gZ2V0RXh0cmFSZWZLZXlzKG9iaik7XG5cbiAgICAgIGlmIChleHRyYUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICBkZXRhaWxzLndhcm5pbmcgPSAnRXh0cmEgSlNPTiBSZWZlcmVuY2UgcHJvcGVydGllcyB3aWxsIGJlIGlnbm9yZWQ6ICcgKyBleHRyYUtleXMuam9pbignLCAnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGV0YWlscy50eXBlID0gJ2ludmFsaWQnO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGV0YWlscy5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgIGRldGFpbHMudHlwZSA9ICdpbnZhbGlkJztcbiAgfVxuXG4gIHJldHVybiBkZXRhaWxzO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgYXJndW1lbnQgcmVwcmVzZW50cyBhIEpTT04gUG9pbnRlci5cbiAqXG4gKiBBIHN0cmluZyBpcyBhIEpTT04gUG9pbnRlciBpZiB0aGUgZm9sbG93aW5nIGFyZSBhbGwgdHJ1ZTpcbiAqXG4gKiAgICogVGhlIHN0cmluZyBpcyBvZiB0eXBlIGBTdHJpbmdgXG4gKiAgICogVGhlIHN0cmluZyBtdXN0IGJlIGVtcHR5LCBgI2Agb3Igc3RhcnQgd2l0aCBhIGAvYCBvciBgIy9gXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHB0ciAtIFRoZSBzdHJpbmcgdG8gY2hlY2tcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Rocm93V2l0aERldGFpbHM9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gdGhyb3cgYW4gYEVycm9yYCB3aXRoIHRoZSBkZXRhaWxzIGFzIHRvIHdoeSB0aGUgdmFsdWVcbiAqIHByb3ZpZGVkIGlzIGludmFsaWRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2tcbiAqXG4gKiBAdGhyb3dzIHtlcnJvcn0gd2hlbiB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgaW52YWxpZCBhbmQgdGhlIGB0aHJvd1dpdGhEZXRhaWxzYCBhcmd1bWVudCBpcyBgdHJ1ZWBcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLmlzUHRyXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEjc2VjdGlvbi0zfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXBhcmF0aW5nIHRoZSBkaWZmZXJlbnQgd2F5cyB0byBpbnZva2UgaXNQdHIgZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXNcbiAqIGlmIChpc1B0cihzdHIpKSB7XG4gKiAgIC8vIEhhbmRsZSBhIHZhbGlkIEpTT04gUG9pbnRlclxuICogfSBlbHNlIHtcbiAqICAgLy8gR2V0IHRoZSByZWFzb24gYXMgdG8gd2h5IHRoZSB2YWx1ZSBpcyBub3QgYSBKU09OIFBvaW50ZXIgc28geW91IGNhbiBmaXgvcmVwb3J0IGl0XG4gKiAgIHRyeSB7XG4gKiAgICAgaXNQdHIoc3RyLCB0cnVlKTtcbiAqICAgfSBjYXRjaCAoZXJyKSB7XG4gKiAgICAgLy8gVGhlIGVycm9yIG1lc3NhZ2UgY29udGFpbnMgdGhlIGRldGFpbHMgYXMgdG8gd2h5IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3QgYSBKU09OIFBvaW50ZXJcbiAqICAgfVxuICogfVxuICovXG5mdW5jdGlvbiBpc1B0ciAocHRyLCB0aHJvd1dpdGhEZXRhaWxzKSB7XG4gIHZhciB2YWxpZCA9IHRydWU7XG4gIHZhciBmaXJzdENoYXI7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaXNUeXBlKHB0ciwgJ1N0cmluZycpKSB7XG4gICAgICBpZiAocHRyICE9PSAnJykge1xuICAgICAgICBmaXJzdENoYXIgPSBwdHIuY2hhckF0KDApO1xuXG4gICAgICAgIGlmIChbJyMnLCAnLyddLmluZGV4T2YoZmlyc3RDaGFyKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B0ciBtdXN0IHN0YXJ0IHdpdGggYSAvIG9yICMvJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDaGFyID09PSAnIycgJiYgcHRyICE9PSAnIycgJiYgcHRyLmNoYXJBdCgxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdHIgbXVzdCBzdGFydCB3aXRoIGEgLyBvciAjLycpO1xuICAgICAgICB9IGVsc2UgaWYgKHB0ci5tYXRjaChiYWRQdHJUb2tlblJlZ2V4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHRyIGhhcyBpbnZhbGlkIHRva2VuKHMpJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdHIgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dXaXRoRGV0YWlscyA9PT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHZhbGlkID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdmFsaWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBhcmd1bWVudCByZXByZXNlbnRzIGEgSlNPTiBSZWZlcmVuY2UuXG4gKlxuICogQW4gb2JqZWN0IGlzIGEgSlNPTiBSZWZlcmVuY2Ugb25seSBpZiB0aGUgZm9sbG93aW5nIGFyZSBhbGwgdHJ1ZTpcbiAqXG4gKiAgICogVGhlIG9iamVjdCBpcyBvZiB0eXBlIGBPYmplY3RgXG4gKiAgICogVGhlIG9iamVjdCBoYXMgYSBgJHJlZmAgcHJvcGVydHlcbiAqICAgKiBUaGUgYCRyZWZgIHByb3BlcnR5IGlzIGEgdmFsaWQgVVJJXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gY2hlY2tcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Rocm93V2l0aERldGFpbHM9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gdGhyb3cgYW4gYEVycm9yYCB3aXRoIHRoZSBkZXRhaWxzIGFzIHRvIHdoeSB0aGUgdmFsdWVcbiAqIHByb3ZpZGVkIGlzIGludmFsaWRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2tcbiAqXG4gKiBAdGhyb3dzIHtlcnJvcn0gd2hlbiB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgaW52YWxpZCBhbmQgdGhlIGB0aHJvd1dpdGhEZXRhaWxzYCBhcmd1bWVudCBpcyBgdHJ1ZWBcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLmlzUmVmXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcGJyeWFuLXp5cC1qc29uLXJlZi0wMyNzZWN0aW9uLTN9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNlcGFyYXRpbmcgdGhlIGRpZmZlcmVudCB3YXlzIHRvIGludm9rZSBpc1JlZiBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3Nlc1xuICogaWYgKGlzUmVmKG9iaikpIHtcbiAqICAgLy8gSGFuZGxlIGEgdmFsaWQgSlNPTiBSZWZlcmVuY2VcbiAqIH0gZWxzZSB7XG4gKiAgIC8vIEdldCB0aGUgcmVhc29uIGFzIHRvIHdoeSB0aGUgdmFsdWUgaXMgbm90IGEgSlNPTiBSZWZlcmVuY2Ugc28geW91IGNhbiBmaXgvcmVwb3J0IGl0XG4gKiAgIHRyeSB7XG4gKiAgICAgaXNSZWYoc3RyLCB0cnVlKTtcbiAqICAgfSBjYXRjaCAoZXJyKSB7XG4gKiAgICAgLy8gVGhlIGVycm9yIG1lc3NhZ2UgY29udGFpbnMgdGhlIGRldGFpbHMgYXMgdG8gd2h5IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3QgYSBKU09OIFJlZmVyZW5jZVxuICogICB9XG4gKiB9XG4gKi9cbmZ1bmN0aW9uIGlzUmVmIChvYmosIHRocm93V2l0aERldGFpbHMpIHtcbiAgcmV0dXJuIGlzUmVmTGlrZShvYmosIHRocm93V2l0aERldGFpbHMpICYmIGdldFJlZkRldGFpbHMob2JqLCB0aHJvd1dpdGhEZXRhaWxzKS50eXBlICE9PSAnaW52YWxpZCc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzIGZvciB0aGUgcHJvdmlkZWQgSlNPTiBQb2ludGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdHIgLSBUaGUgSlNPTiBQb2ludGVyXG4gKlxuICogQHJldHVybnMge3N0cmluZ1tdfSB0aGUgcGF0aCBzZWdtZW50c1xuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgcHJvdmlkZWQgYHB0cmAgYXJndW1lbnQgaXMgbm90IGEgSlNPTiBQb2ludGVyXG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmcy5wYXRoRnJvbVB0clxuICovXG5mdW5jdGlvbiBwYXRoRnJvbVB0ciAocHRyKSB7XG4gIGlmICghaXNQdHIocHRyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHRyIG11c3QgYmUgYSBKU09OIFBvaW50ZXInKTtcbiAgfVxuXG4gIHZhciBzZWdtZW50cyA9IHB0ci5zcGxpdCgnLycpO1xuXG4gIC8vIFJlbW92ZSB0aGUgZmlyc3Qgc2VnbWVudFxuICBzZWdtZW50cy5zaGlmdCgpO1xuXG4gIHJldHVybiBkZWNvZGVQYXRoKHNlZ21lbnRzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBQb2ludGVyIGZvciB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgcGF0aCBzZWdtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYSBwYXRoIHNlZ21lbnQgaW4gYHBhdGhgIGlzIG5vdCBhIGBTdHJpbmdgLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBvbmUgdXNpbmcgYEpTT04uc3RyaW5naWZ5YC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gVGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hhc2hQcmVmaXg9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCBjcmVhdGUgYSBoYXNoLXByZWZpeGVkIEpTT04gUG9pbnRlclxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBjb3JyZXNwb25kaW5nIEpTT04gUG9pbnRlclxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgYHBhdGhgIGFyZ3VtZW50IGlzIG5vdCBhbiBhcnJheVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMucGF0aFRvUHRyXG4gKi9cbmZ1bmN0aW9uIHBhdGhUb1B0ciAocGF0aCwgaGFzaFByZWZpeCkge1xuICBpZiAoIWlzVHlwZShwYXRoLCAnQXJyYXknKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGF0aCBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gIH1cblxuICAvLyBFbmNvZGUgZWFjaCBzZWdtZW50IGFuZCByZXR1cm5cbiAgcmV0dXJuIChoYXNoUHJlZml4ICE9PSBmYWxzZSA/ICcjJyA6ICcnKSArIChwYXRoLmxlbmd0aCA+IDAgPyAnLycgOiAnJykgKyBlbmNvZGVQYXRoKHBhdGgpLmpvaW4oJy8nKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBKU09OIFJlZmVyZW5jZXMgZGVmaW5lZCB3aXRoaW4gdGhlIHByb3ZpZGVkIGFycmF5L29iamVjdCBhbmQgcmVzb2x2ZXMgdGhlbS5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fG9iamVjdH0gb2JqIC0gVGhlIHN0cnVjdHVyZSB0byBmaW5kIEpTT04gUmVmZXJlbmNlcyB3aXRoaW5cbiAqIEBwYXJhbSB7SnNvblJlZnNPcHRpb25zfSBbb3B0aW9uc10gLSBUaGUgSnNvblJlZnMgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhIHtAbGluayBtb2R1bGU6SnNvblJlZnN+UmVzb2x2ZWRSZWZzUmVzdWx0c30gYW5kIHJlamVjdHMgd2l0aCBhblxuICogYEVycm9yYCB3aGVuIHRoZSBpbnB1dCBhcmd1bWVudHMgZmFpbCB2YWxpZGF0aW9uLCB3aGVuIGBvcHRpb25zLnN1YkRvY1BhdGhgIHBvaW50cyB0byBhbiBpbnZhbGlkIGxvY2F0aW9uIG9yIHdoZW5cbiAqICB0aGUgbG9jYXRpb24gYXJndW1lbnQgcG9pbnRzIHRvIGFuIHVubG9hZGFibGUgcmVzb3VyY2VcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLnJlc29sdmVSZWZzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEV4YW1wbGUgdGhhdCBvbmx5IHJlc29sdmVzIHJlbGF0aXZlIGFuZCByZW1vdGUgcmVmZXJlbmNlc1xuICogSnNvblJlZnMucmVzb2x2ZVJlZnMoc3dhZ2dlck9iaiwge1xuICogICAgIGZpbHRlcjogWydyZWxhdGl2ZScsICdyZW1vdGUnXVxuICogICB9KVxuICogICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gKiAgICAgIC8vIERvIHNvbWV0aGluZyB3aXRoIHRoZSByZXNwb25zZVxuICogICAgICAvL1xuICogICAgICAvLyByZXMucmVmczogSlNPTiBSZWZlcmVuY2UgbG9jYXRpb25zIGFuZCBkZXRhaWxzXG4gKiAgICAgIC8vIHJlcy5yZXNvbHZlZDogVGhlIGRvY3VtZW50IHdpdGggdGhlIGFwcHJvcHJpYXRlIEpTT04gUmVmZXJlbmNlcyByZXNvbHZlZFxuICogICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gKiAgICAgY29uc29sZS5sb2coZXJyLnN0YWNrKTtcbiAqICAgfSk7XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSZWZzIChvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgYWxsVGFza3MgPSBhbGxUYXNrc1xuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBwcm92aWRlZCBkb2N1bWVudFxuICAgICAgaWYgKCFpc1R5cGUob2JqLCAnQXJyYXknKSAmJiAhaXNUeXBlKG9iaiwgJ09iamVjdCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29iaiBtdXN0IGJlIGFuIEFycmF5IG9yIGFuIE9iamVjdCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGVmYXVsdCBmb3Igb3B0aW9uc1xuICAgICAgaWYgKGlzVHlwZShvcHRpb25zLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBvcHRpb25zXG4gICAgICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgfSlcbiAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBGaW5kIGFsbCByZWZlcmVuY2VzIHJlY3Vyc2l2ZWx5XG4gICAgICByZXR1cm4gZmluZEFsbFJlZnMob2JqLCBvcHRpb25zLCBbXSwgW10sIHt9KTtcbiAgICB9KVxuICAgIC50aGVuKGZ1bmN0aW9uIChhUmVmcykge1xuICAgICAgdmFyIGNsb25lZCA9IGNsb25lKG9iaik7XG4gICAgICB2YXIgcGFyZW50TG9jYXRpb25zID0gW107XG5cbiAgICAgIC8vIFJlcGxhY2UgcmVtb3RlIHJlZmVyZW5jZXMgZmlyc3RcbiAgICAgIE9iamVjdC5rZXlzKGFSZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWZQdHIpIHtcbiAgICAgICAgdmFyIHJlZkRldGFpbHMgPSBhUmVmc1tyZWZQdHJdO1xuICAgICAgICB2YXIgdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlbW90ZVR5cGVzLmluZGV4T2YocmVmRGV0YWlscy50eXBlKSA+IC0xKSB7XG4gICAgICAgICAgaWYgKGlzVHlwZShyZWZEZXRhaWxzLmVycm9yLCAnVW5kZWZpbmVkJykgJiYgcmVmRGV0YWlscy50eXBlICE9PSAnaW52YWxpZCcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gZmluZFZhbHVlKHJlZkRldGFpbHMudmFsdWUgfHwge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZkRldGFpbHMudXJpRGV0YWlscy5mcmFnbWVudCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhGcm9tUHRyKHJlZkRldGFpbHMudXJpRGV0YWlscy5mcmFnbWVudCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKTtcbiAgICAgICAgICAgICAgc2V0VmFsdWUoY2xvbmVkLCBwYXRoRnJvbVB0cihyZWZQdHIpLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgLy8gVGhlIHJlZmVyZW5jZSBpbmNsdWRlcyBhIGZyYWdtZW50IHNvIHVwZGF0ZSB0aGUgcmVmZXJlbmNlIGRldGFpbHNcbiAgICAgICAgICAgICAgaWYgKCFpc1R5cGUocmVmRGV0YWlscy52YWx1ZSwgJ1VuZGVmaW5lZCcpKSB7XG4gICAgICAgICAgICAgICAgcmVmRGV0YWlscy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZkRldGFpbHMuY2lyY3VsYXIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB2YWx1ZSBhbmQgaXQncyBjaXJjdWxhciwgc2V0IGl0cyB2YWx1ZSB0byBhbiBlbXB0eSB2YWx1ZVxuICAgICAgICAgICAgICAgIHJlZkRldGFpbHMudmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIHJlZkRldGFpbHMuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgcmVmRGV0YWlscy5taXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVmRGV0YWlscy5taXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBSZXBsYWNlIGxvY2FsIHJlZmVyZW5jZXNcbiAgICAgIE9iamVjdC5rZXlzKGFSZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWZQdHIpIHtcbiAgICAgICAgdmFyIHJlZkRldGFpbHMgPSBhUmVmc1tyZWZQdHJdO1xuICAgICAgICB2YXIgcGFyZW50TG9jYXRpb24gPSByZWZEZXRhaWxzLnBhcmVudExvY2F0aW9uO1xuICAgICAgICB2YXIgdmFsdWU7XG5cbiAgICAgICAgLy8gUmVjb3JkIHRoYXQgdGhpcyByZWZlcmVuY2UgaGFzIHBhcmVudCBsb2NhdGlvbiBkZXRhaWxzIHNvIHdlIGNhbiBjbGVhbiBpdCB1cCBsYXRlclxuICAgICAgICBpZiAoIWlzVHlwZShwYXJlbnRMb2NhdGlvbiwgJ1VuZGVmaW5lZCcpICYmIHBhcmVudExvY2F0aW9ucy5pbmRleE9mKHJlZlB0cikgPT09IC0xKSB7XG4gICAgICAgICAgcGFyZW50TG9jYXRpb25zLnB1c2gocmVmUHRyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW1vdGVUeXBlcy5pbmRleE9mKHJlZkRldGFpbHMudHlwZSkgPT09IC0xICYmIHJlZkRldGFpbHMudHlwZSAhPT0gJ2ludmFsaWQnKSB7XG4gICAgICAgICAgaWYgKGlzVHlwZShyZWZEZXRhaWxzLmVycm9yLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgIGlmIChyZWZQdHIuaW5kZXhPZihyZWZEZXRhaWxzLnVyaSkgPiAtMSkge1xuICAgICAgICAgICAgICByZWZEZXRhaWxzLmNpcmN1bGFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICghaXNUeXBlKHBhcmVudExvY2F0aW9uLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgcmVmZXJlbmNlZCB2YWx1ZSBmcm9tIHRoZSByZW1vdGUgZG9jdW1lbnQgZmlyc3RcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbmRWYWx1ZShmaW5kVmFsdWUoY2xvbmVkLCBwYXRoRnJvbVB0cihwYXJlbnRMb2NhdGlvbikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZkRldGFpbHMudXJpRGV0YWlscy5mcmFnbWVudCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoRnJvbVB0cihyZWZEZXRhaWxzLnVyaURldGFpbHMuZnJhZ21lbnQpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLCB0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoaXNUeXBlKHZhbHVlLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbmRWYWx1ZShjbG9uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmRGV0YWlscy51cmlEZXRhaWxzLmZyYWdtZW50ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoRnJvbVB0cihyZWZEZXRhaWxzLnVyaURldGFpbHMuZnJhZ21lbnQpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNldFZhbHVlKGNsb25lZCwgcGF0aEZyb21QdHIocmVmUHRyKSwgdmFsdWUpO1xuXG4gICAgICAgICAgICAgIHJlZkRldGFpbHMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICByZWZEZXRhaWxzLmVycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICAgIHJlZkRldGFpbHMubWlzc2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlZkRldGFpbHMubWlzc2luZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBwYXJlbnRMb2NhdGlvbiB2YWx1ZXNcbiAgICAgIHBhcmVudExvY2F0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChyZWZQdHIpIHtcbiAgICAgICAgZGVsZXRlIGFSZWZzW3JlZlB0cl0ucGFyZW50TG9jYXRpb247XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVmczogYVJlZnMsXG4gICAgICAgIHJlc29sdmVkOiBjbG9uZWRcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgcmV0dXJuIGFsbFRhc2tzO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIEpTT04gUmVmZXJlbmNlcyBkZWZpbmVkIHdpdGhpbiB0aGUgZG9jdW1lbnQgYXQgdGhlIHByb3ZpZGVkIGxvY2F0aW9uLlxuICpcbiAqIFRoaXMgQVBJIGlzIGlkZW50aWNhbCB0byB7QGxpbmsgbW9kdWxlOkpzb25SZWZzLnJlc29sdmVSZWZzfSBleGNlcHQgdGhpcyBBUEkgd2lsbCByZXRyaWV2ZSBhIHJlbW90ZSBkb2N1bWVudCBhbmQgdGhlblxuICogcmV0dXJuIHRoZSByZXN1bHQgb2Yge0BsaW5rIG1vZHVsZTpKc29uUmVmcy5yZXNvbHZlUmVmc30gb24gdGhlIHJldHJpZXZlZCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gLSBUaGUgbG9jYXRpb24gdG8gcmV0cmlldmUgKihDYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUsIGp1c3QgbWFrZSBzdXJlIHlvdSBsb29rIGF0IHRoZVxuICoge0BsaW5rIG1vZHVsZTpKc29uUmVmc35Kc29uUmVmc09wdGlvbnN8b3B0aW9ucyBkb2N1bWVudGF0aW9ufSB0byBzZWUgaG93IHJlbGF0aXZlIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQuKSpcbiAqIEBwYXJhbSB7SnNvblJlZnNPcHRpb25zfSBbb3B0aW9uc10gLSBUaGUgSnNvblJlZnMgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhIHtAbGluayBtb2R1bGU6SnNvblJlZnN+UmV0cmlldmVkUmVzb2x2ZWRSZWZzUmVzdWx0c30gYW5kIHJlamVjdHMgd2l0aCBhblxuICogYEVycm9yYCB3aGVuIHRoZSBpbnB1dCBhcmd1bWVudHMgZmFpbCB2YWxpZGF0aW9uLCB3aGVuIGBvcHRpb25zLnN1YkRvY1BhdGhgIHBvaW50cyB0byBhbiBpbnZhbGlkIGxvY2F0aW9uIG9yIHdoZW5cbiAqICB0aGUgbG9jYXRpb24gYXJndW1lbnQgcG9pbnRzIHRvIGFuIHVubG9hZGFibGUgcmVzb3VyY2VcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLnJlc29sdmVSZWZzQXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSB0aGF0IGxvYWRzIGEgSlNPTiBkb2N1bWVudCAoTm8gb3B0aW9ucy5sb2FkZXJPcHRpb25zLnByb2Nlc3NDb250ZW50IHJlcXVpcmVkKSBhbmQgcmVzb2x2ZXMgYWxsIHJlZmVyZW5jZXNcbiAqIEpzb25SZWZzLnJlc29sdmVSZWZzQXQoJy4vc3dhZ2dlci5qc29uJylcbiAqICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICogICAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzcG9uc2VcbiAqICAgICAgLy9cbiAqICAgICAgLy8gcmVzLnJlZnM6IEpTT04gUmVmZXJlbmNlIGxvY2F0aW9ucyBhbmQgZGV0YWlsc1xuICogICAgICAvLyByZXMucmVzb2x2ZWQ6IFRoZSBkb2N1bWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBKU09OIFJlZmVyZW5jZXMgcmVzb2x2ZWRcbiAqICAgICAgLy8gcmVzLnZhbHVlOiBUaGUgcmV0cmlldmVkIGRvY3VtZW50XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmxvZyhlcnIuc3RhY2spO1xuICogICB9KTtcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlZnNBdCAobG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgYWxsVGFza3MgPSBhbGxUYXNrc1xuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgICAgaWYgKCFpc1R5cGUobG9jYXRpb24sICdTdHJpbmcnKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdsb2NhdGlvbiBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0IGZvciBvcHRpb25zXG4gICAgICBpZiAoaXNUeXBlKG9wdGlvbnMsICdVbmRlZmluZWQnKSkge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIG9wdGlvbnMgKERvaW5nIHRoaXMgaGVyZSBmb3IgYSBxdWljaylcbiAgICAgIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgLy8gQ29tYmluZSB0aGUgbG9jYXRpb24gYW5kIHRoZSBvcHRpb25hbCByZWxhdGl2ZSBiYXNlXG4gICAgICBsb2NhdGlvbiA9IGNvbWJpbmVVUklzKG9wdGlvbnMucmVsYXRpdmVCYXNlLCBsb2NhdGlvbik7XG5cbiAgICAgIHJldHVybiBnZXRSZW1vdGVEb2N1bWVudChsb2NhdGlvbiwgb3B0aW9ucyk7XG4gICAgfSlcbiAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICB2YXIgY09wdGlvbnMgPSBjbG9uZShvcHRpb25zKTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSByZWxhdGl2ZSBiYXNlIGJhc2VkIG9uIHRoZSByZXRyaWV2ZWQgbG9jYXRpb25cbiAgICAgIGNPcHRpb25zLnJlbGF0aXZlQmFzZSA9IGRpcm5hbWUobG9jYXRpb24pO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZVJlZnMocmVzLCBjT3B0aW9ucylcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlczIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVmczogcmVzMi5yZWZzLFxuICAgICAgICAgICAgcmVzb2x2ZWQ6IHJlczIucmVzb2x2ZWQsXG4gICAgICAgICAgICB2YWx1ZTogcmVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGFsbFRhc2tzO1xufVxuXG4vKiBFeHBvcnQgdGhlIG1vZHVsZSBtZW1iZXJzICovXG5tb2R1bGUuZXhwb3J0cy5jbGVhckNhY2hlID0gY2xlYXJDYWNoZTtcbm1vZHVsZS5leHBvcnRzLmRlY29kZVBhdGggPSBkZWNvZGVQYXRoO1xubW9kdWxlLmV4cG9ydHMuZW5jb2RlUGF0aCA9IGVuY29kZVBhdGg7XG5tb2R1bGUuZXhwb3J0cy5maW5kUmVmcyA9IGZpbmRSZWZzO1xubW9kdWxlLmV4cG9ydHMuZmluZFJlZnNBdCA9IGZpbmRSZWZzQXQ7XG5tb2R1bGUuZXhwb3J0cy5nZXRSZWZEZXRhaWxzID0gZ2V0UmVmRGV0YWlscztcbm1vZHVsZS5leHBvcnRzLmlzUHRyID0gaXNQdHI7XG5tb2R1bGUuZXhwb3J0cy5pc1JlZiA9IGlzUmVmO1xubW9kdWxlLmV4cG9ydHMucGF0aEZyb21QdHIgPSBwYXRoRnJvbVB0cjtcbm1vZHVsZS5leHBvcnRzLnBhdGhUb1B0ciA9IHBhdGhUb1B0cjtcbm1vZHVsZS5leHBvcnRzLnJlc29sdmVSZWZzID0gcmVzb2x2ZVJlZnM7XG5tb2R1bGUuZXhwb3J0cy5yZXNvbHZlUmVmc0F0ID0gcmVzb2x2ZVJlZnNBdDtcbi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgSmVyZW15IFdoaXRsb2NrXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVmFyaW91cyB1dGlsaXRpZXMgZm9yIEpTT04gUmVmZXJlbmNlcyAqKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXBicnlhbi16eXAtanNvbi1yZWYtMDMpKiBhbmRcbiAqIEpTT04gUG9pbnRlcnMgKihodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMSkqLlxuICpcbiAqIEBtb2R1bGUgSnNvblJlZnNcbiAqL1xuXG52YXIgcGF0aExvYWRlciA9IHJlcXVpcmUoJ3BhdGgtbG9hZGVyJyk7XG52YXIgcXMgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xudmFyIHNsYXNoID0gcmVxdWlyZSgnc2xhc2gnKTtcbnZhciBVUkkgPSByZXF1aXJlKCd1cmktanMnKTtcblxudmFyIGJhZFB0clRva2VuUmVnZXggPSAvfig/OlteMDFdfCQpL2c7XG52YXIgcmVtb3RlQ2FjaGUgPSB7fTtcbnZhciByZW1vdGVUeXBlcyA9IFsncmVsYXRpdmUnLCAncmVtb3RlJ107XG52YXIgdXJpRGV0YWlsc0NhY2hlID0ge307XG5cbi8vIExvYWQgcHJvbWlzZXMgcG9seWZpbGwgaWYgbmVjZXNzYXJ5XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgcmVxdWlyZSgnbmF0aXZlLXByb21pc2Utb25seScpO1xufVxuXG4vKiBJbnRlcm5hbCBGdW5jdGlvbnMgKi9cblxuLy8gVGhpcyBpcyBhIHZlcnkgc2ltcGxpc3RpYyBjbG9uZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IG5vbi1KU09OIHR5cGVzLiAgRm9yIHRoZXNlIHR5cGVzIHRoZVxuLy8gb3JpZ2luYWwgdmFsdWUgaXMgdXNlZCBhcyB0aGUgY2xvbmUuICBTbyB3aGlsZSBpdCdzIG5vdCBhIGNvbXBsZXRlIGRlZXAgY2xvbmUsIGZvciB0aGUgbmVlZHMgb2YgdGhpcyBwcm9qZWN0XG4vLyB0aGlzIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuZnVuY3Rpb24gY2xvbmUgKG9iaikge1xuICB2YXIgY2xvbmVkO1xuXG4gIGlmIChpc1R5cGUob2JqLCAnQXJyYXknKSkge1xuICAgIGNsb25lZCA9IFtdO1xuXG4gICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgY2xvbmVkW2luZGV4XSA9IGNsb25lKHZhbHVlKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc1R5cGUob2JqLCAnT2JqZWN0JykpIHtcbiAgICBjbG9uZWQgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBjbG9uZWRba2V5XSA9IGNsb25lKG9ialtrZXldKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbG9uZWQgPSBvYmo7XG4gIH1cblxuICByZXR1cm4gY2xvbmVkO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lUGF0aHMgKHAxLCBwMikge1xuICB2YXIgY29tYmluZWQgPSBbXTtcblxuICBmdW5jdGlvbiBwYXRoVG9TZWdtZW50cyAocGF0aCkge1xuICAgIHJldHVybiBpc1R5cGUocGF0aCwgJ1VuZGVmaW5lZCcpIHx8IHBhdGggPT09ICcnID8gW10gOiBwYXRoLnNwbGl0KCcvJyk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTZWdtZW50IChzZWcpIHtcbiAgICBpZiAoc2VnID09PSAnLi4nKSB7XG4gICAgICBjb21iaW5lZC5wb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tYmluZWQucHVzaChzZWcpO1xuICAgIH1cbiAgfVxuXG4gIHBhdGhUb1NlZ21lbnRzKHAxKS5jb25jYXQocGF0aFRvU2VnbWVudHMocDIpKS5mb3JFYWNoKGhhbmRsZVNlZ21lbnQpO1xuXG4gIHJldHVybiBjb21iaW5lZC5sZW5ndGggPT09IDAgPyAnJyA6IGNvbWJpbmVkLmpvaW4oJy8nKTtcbn1cblxuZnVuY3Rpb24gY29tYmluZVF1ZXJ5UGFyYW1zIChxczEsIHFzMikge1xuICB2YXIgY29tYmluZWQgPSB7fTtcblxuICBmdW5jdGlvbiBtZXJnZVF1ZXJ5UGFyYW1zIChvYmopIHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgY29tYmluZWRba2V5XSA9IG9ialtrZXldO1xuICAgIH0pO1xuICB9XG5cbiAgbWVyZ2VRdWVyeVBhcmFtcyhxcy5wYXJzZShxczEgfHwgJycpKTtcbiAgbWVyZ2VRdWVyeVBhcmFtcyhxcy5wYXJzZShxczIgfHwgJycpKTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMoY29tYmluZWQpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHFzLnN0cmluZ2lmeShjb21iaW5lZCk7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVUklzICh1MSwgdTIpIHtcbiAgLy8gQ29udmVydCBXaW5kb3dzIHBhdGhzXG4gIGlmIChpc1R5cGUodTEsICdTdHJpbmcnKSkge1xuICAgIHUxID0gc2xhc2godTEpO1xuICB9XG5cbiAgaWYgKGlzVHlwZSh1MiwgJ1N0cmluZycpKSB7XG4gICAgdTIgPSBzbGFzaCh1Mik7XG4gIH1cblxuICB2YXIgdTJEZXRhaWxzID0gVVJJLnBhcnNlKGlzVHlwZSh1MiwgJ1VuZGVmaW5lZCcpID8gJycgOiB1Mik7XG4gIHZhciB1MURldGFpbHM7XG4gIHZhciBjb21iaW5lZERldGFpbHM7XG5cbiAgaWYgKHUyRGV0YWlscy5yZWZlcmVuY2UgPT09ICdhYnNvbHV0ZScgfHwgdTJEZXRhaWxzLnJlZmVyZW5jZSA9PT0gJ3VyaScpIHtcbiAgICBjb21iaW5lZERldGFpbHMgPSB1MkRldGFpbHM7XG4gIH0gZWxzZSB7XG4gICAgdTFEZXRhaWxzID0gaXNUeXBlKHUxLCAnVW5kZWZpbmVkJykgPyB1bmRlZmluZWQgOiBVUkkucGFyc2UodTEpO1xuXG4gICAgaWYgKCFpc1R5cGUodTFEZXRhaWxzLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgIGNvbWJpbmVkRGV0YWlscyA9IHUxRGV0YWlscztcblxuICAgICAgLy8gSm9pbiB0aGUgcGF0aHNcbiAgICAgIGNvbWJpbmVkRGV0YWlscy5wYXRoID0gVVJJLm5vcm1hbGl6ZShjb21iaW5lUGF0aHModTFEZXRhaWxzLnBhdGgsIHUyRGV0YWlscy5wYXRoKSk7XG5cbiAgICAgIC8vIEpvaW4gcXVlcnkgcGFyYW1ldGVyc1xuICAgICAgY29tYmluZWREZXRhaWxzLnF1ZXJ5ID0gY29tYmluZVF1ZXJ5UGFyYW1zKHUxRGV0YWlscy5xdWVyeSwgdTJEZXRhaWxzLnF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tYmluZWREZXRhaWxzID0gdTJEZXRhaWxzO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgZnJhZ21lbnRcbiAgY29tYmluZWREZXRhaWxzLmZyYWdtZW50ID0gdW5kZWZpbmVkO1xuXG4gIHJldHVybiBVUkkuc2VyaWFsaXplKGNvbWJpbmVkRGV0YWlscyk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlclJlZnMgKG9wdGlvbnMsIHJlZnMpIHtcbiAgdmFyIHJlZkZpbHRlciA9IG1ha2VSZWZGaWx0ZXIob3B0aW9ucyk7XG4gIHZhciBmaWx0ZXJlZCA9IHt9O1xuICB2YXIgc3ViRG9jUHJlZml4ID0gcGF0aFRvUHRyKG1ha2VTdWJEb2NQYXRoKG9wdGlvbnMpKTtcblxuICBPYmplY3Qua2V5cyhyZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWZQdHIpIHtcbiAgICB2YXIgcmVmRGV0YWlscyA9IHJlZnNbcmVmUHRyXTtcblxuICAgIGlmIChyZWZGaWx0ZXIocmVmRGV0YWlscywgcGF0aEZyb21QdHIocmVmUHRyKSkgPT09IHRydWUgJiZcbiAgICAgICAgcmVmUHRyLmluZGV4T2Yoc3ViRG9jUHJlZml4KSA+IC0xICYmXG4gICAgICAgIChyZWZEZXRhaWxzLnR5cGUgIT09ICdpbnZhbGlkJyB8fCBvcHRpb25zLmluY2x1ZGVJbnZhbGlkID09PSB0cnVlKSkge1xuICAgICAgZmlsdGVyZWRbcmVmUHRyXSA9IHJlZkRldGFpbHM7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRBbmNlc3RvcnMgKG9iaiwgcGF0aCkge1xuICB2YXIgYW5jZXN0b3JzID0gW107XG4gIHZhciBub2RlID0gb2JqO1xuXG4gIHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKS5mb3JFYWNoKGZ1bmN0aW9uIChzZWcpIHtcbiAgICBpZiAoc2VnIGluIG5vZGUpIHtcbiAgICAgIG5vZGUgPSBub2RlW3NlZ107XG5cbiAgICAgIGFuY2VzdG9ycy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGFuY2VzdG9ycztcbn1cblxuLy8gU2hvdWxkIHRoaXMgYmUgaXRzIG93biBleHBvcnRlZCBBUEk/XG5mdW5jdGlvbiBmaW5kQWxsUmVmcyAob2JqLCBvcHRpb25zLCBwYXJlbnRzLCBwYXJlbnRQYXRoLCBkb2N1bWVudHMpIHtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHZhciByZWZzID0gZmluZFJlZnMob2JqLCBvcHRpb25zKTtcblxuICBPYmplY3Qua2V5cyhyZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWZQdHIpIHtcbiAgICB2YXIgcmVmRGV0YWlscyA9IHJlZnNbcmVmUHRyXTtcbiAgICB2YXIgcmVmUGF0aCA9IHBhdGhGcm9tUHRyKHJlZlB0cik7XG4gICAgdmFyIGxvY2F0aW9uO1xuICAgIHZhciBwYXJlbnRJbmRleDtcblxuICAgIC8vIE9ubHkgcHJvY2VzcyByZW1vdGUgcmVmZXJlbmNlc1xuICAgIGlmIChyZW1vdGVUeXBlcy5pbmRleE9mKHJlZkRldGFpbHMudHlwZSkgPiAtMSkge1xuICAgICAgbG9jYXRpb24gPSBjb21iaW5lVVJJcyhvcHRpb25zLnJlbGF0aXZlQmFzZSwgcmVmRGV0YWlscy51cmkpO1xuICAgICAgcGFyZW50SW5kZXggPSBwYXJlbnRzLmluZGV4T2YobG9jYXRpb24pO1xuXG4gICAgICBpZiAocGFyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgclBhcmVudFBhdGggPSBwYXJlbnRQYXRoLmNvbmNhdChyZWZQYXRoKTtcbiAgICAgICAgICAgIHZhciByT3B0aW9ucyA9IGNsb25lKG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHN1YiBkb2N1bWVudCBwYXRoXG4gICAgICAgICAgICBkZWxldGUgck9wdGlvbnMuc3ViRG9jUGF0aDtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZWxhdGl2ZUJhc2UgYmFzZWQgb24gdGhlIG5ldyBsb2NhdGlvbiB0byByZXRyaWV2ZVxuICAgICAgICAgICAgck9wdGlvbnMucmVsYXRpdmVCYXNlID0gbG9jYXRpb24uc3Vic3RyaW5nKDAsIGxvY2F0aW9uLmxhc3RJbmRleE9mKCcvJykpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmluZFJlZnNBdChyZWZEZXRhaWxzLnVyaSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJSZWZzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBsb2NhdGlvbiBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGlkZW50aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgclJlZnMubG9jYXRpb24gPSBsb2NhdGlvbjtcblxuICAgICAgICAgICAgICAgIGlmIChyZWZEZXRhaWxzLnVyaURldGFpbHMuZnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZW1vdGUgcmVmZXJlbmNlIHdhcyBmb3IgYSBmcmFnbWVudCwgZG8gbm90IGluY2x1ZGUgdGhlIHJlZmVyZW5jZSBkZXRhaWxzXG4gICAgICAgICAgICAgICAgICByUmVmcy5yZWZzID0ge307XG5cbiAgICAgICAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgcmVtb3RlIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudHNbcGF0aFRvUHRyKHJQYXJlbnRQYXRoKV0gPSByUmVmcztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJSZWZzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBSZWNvcmQgdGhlIGxvY2F0aW9uIGluIHRoZSBkb2N1bWVudCB3aGVyZSB0aGUgcGFyZW50IGRvY3VtZW50IHdhcyByZXNvbHZlZFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoclJlZnMucmVmcykuZm9yRWFjaChmdW5jdGlvbiAocmVmUHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJSZWZzLnJlZnNbcmVmUHRyXS5wYXJlbnRMb2NhdGlvbiA9IHBhdGhUb1B0cihyUGFyZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSByZW1vdGUgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50c1twYXRoVG9QdHIoclBhcmVudFBhdGgpXSA9IHJSZWZzO1xuXG4gICAgICAgICAgICAgICAgICAvLyBGaW5kIGFsbCBpbXBvcnRhbnQgcmVmZXJlbmNlcyB3aXRoaW4gdGhlIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmluZEFsbFJlZnMoclJlZnMudmFsdWUsIHJPcHRpb25zLCBwYXJlbnRzLmNvbmNhdChsb2NhdGlvbiksIHJQYXJlbnRQYXRoLCBkb2N1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHJlZkRldGFpbHMuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgICByZWZEZXRhaWxzLm1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hcmsgc2VlbiBhbmNlc3RvcnMgYXMgY2lyY3VsYXJcbiAgICAgICAgcGFyZW50cy5zbGljZShwYXJlbnRJbmRleCkuZm9yRWFjaChmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMoZG9jdW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChjUmVmUHRyKSB7XG4gICAgICAgICAgICB2YXIgZG9jdW1lbnQgPSBkb2N1bWVudHNbY1JlZlB0cl07XG5cbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5sb2NhdGlvbiA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmNpcmN1bGFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTWFyayBzZWxmIGFzIGNpcmN1bGFyXG4gICAgICAgIGRvY3VtZW50c1twYXRoVG9QdHIocGFyZW50UGF0aCldLnJlZnNbcmVmUHRyXS5jaXJjdWxhciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgLy8gT25seSBjb2xsYXBzZSB0aGUgZG9jdW1lbnRzIHdoZW4gd2UncmUgYmFjayBhdCB0aGUgdG9wIG9mIHRoZSBwcm9taXNlIHN0YWNrXG4gICAgICBpZiAocGFyZW50UGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gQ29sbGFwc2UgYWxsIHJlZmVyZW5jZXMgdG9nZXRoZXIgaW50byBvbmUgbGlzdFxuICAgICAgICBPYmplY3Qua2V5cyhkb2N1bWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgICAgICAgIHZhciBkb2N1bWVudCA9IGRvY3VtZW50c1tyZWZQdHJdO1xuXG4gICAgICAgICAgLy8gTWVyZ2UgZWFjaCByZWZlcmVuY2UgaW50byB0aGUgcm9vdCBkb2N1bWVudCdzIHJlZmVyZW5jZXNcbiAgICAgICAgICBPYmplY3Qua2V5cyhkb2N1bWVudC5yZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChjUmVmUHRyKSB7XG4gICAgICAgICAgICB2YXIgZlB0ciA9IHBhdGhUb1B0cihwYXRoRnJvbVB0cihyZWZQdHIpLmNvbmNhdChwYXRoRnJvbVB0cihjUmVmUHRyKSkpO1xuICAgICAgICAgICAgdmFyIHJlZkRldGFpbHMgPSByZWZzW2ZQdHJdO1xuXG4gICAgICAgICAgICBpZiAoaXNUeXBlKHJlZkRldGFpbHMsICdVbmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICByZWZzW2ZQdHJdID0gZG9jdW1lbnQucmVmc1tjUmVmUHRyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFJlY29yZCB0aGUgdmFsdWUgb2YgdGhlIHJlbW90ZSByZWZlcmVuY2VcbiAgICAgICAgICByZWZzW3JlZlB0cl0udmFsdWUgPSBkb2N1bWVudC52YWx1ZTtcblxuICAgICAgICAgIC8vIE1hcmsgdGhlIHJlbW90ZSByZWZlcmVuY2UgaXRzZWxmIGFzIGNpcmN1bGFyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmNpcmN1bGFyKSB7XG4gICAgICAgICAgICByZWZzW3JlZlB0cl0uY2lyY3VsYXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWZzO1xuICAgIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn1cblxuZnVuY3Rpb24gZmluZFZhbHVlIChvYmosIHBhdGgsIGlnbm9yZSkge1xuICB2YXIgdmFsdWUgPSBvYmo7XG5cbiAgdHJ5IHtcbiAgICBwYXRoLmZvckVhY2goZnVuY3Rpb24gKHNlZykge1xuICAgICAgaWYgKHNlZyBpbiB2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlW3NlZ107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcignSlNPTiBQb2ludGVyIHBvaW50cyB0byBtaXNzaW5nIGxvY2F0aW9uOiAnICsgcGF0aFRvUHRyKHBhdGgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGlnbm9yZSA9PT0gdHJ1ZSkge1xuICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldEV4dHJhUmVmS2V5cyAocmVmKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhyZWYpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleSAhPT0gJyRyZWYnO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtb3RlRG9jdW1lbnQgKHVybCwgb3B0aW9ucykge1xuICB2YXIgY2FjaGVFbnRyeSA9IHJlbW90ZUNhY2hlW3VybF07XG4gIHZhciBhbGxUYXNrcyA9IFByb21pc2UucmVzb2x2ZSgpO1xuICB2YXIgbG9hZGVyT3B0aW9ucyA9IGNsb25lKG9wdGlvbnMubG9hZGVyT3B0aW9ucyB8fCB7fSk7XG5cbiAgaWYgKGlzVHlwZShjYWNoZUVudHJ5LCAnVW5kZWZpbmVkJykpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBjb250ZW50IHByb2Nlc3NvciwgZGVmYXVsdCB0byBwcm9jZXNzaW5nIHRoZSByYXcgcmVzcG9uc2UgYXMgSlNPTlxuICAgIGlmIChpc1R5cGUobG9hZGVyT3B0aW9ucy5wcm9jZXNzQ29udGVudCwgJ1VuZGVmaW5lZCcpKSB7XG4gICAgICBsb2FkZXJPcHRpb25zLnByb2Nlc3NDb250ZW50ID0gZnVuY3Rpb24gKHJlcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCBKU09OLnBhcnNlKHJlcy50ZXh0KSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEF0dGVtcHQgdG8gbG9hZCB0aGUgcmVzb3VyY2UgdXNpbmcgIHBhdGgtbG9hZGVyXG4gICAgYWxsVGFza3MgPSBwYXRoTG9hZGVyLmxvYWQodXJsLCBsb2FkZXJPcHRpb25zKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGVcbiAgICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHJlbW90ZUNhY2hlW3VybF0gPSB7XG4gICAgICAgICAgdmFsdWU6IHJlc1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmVtb3RlQ2FjaGVbdXJsXSA9IHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUmV0dXJuIHRoZSBjYWNoZWQgdmVyc2lvblxuICAgIGFsbFRhc2tzID0gYWxsVGFza3MudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY2FjaGVFbnRyeS52YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybiBhIGNsb25lZCB2ZXJzaW9uIHRvIGF2b2lkIHVwZGF0aW5nIHRoZSBjYWNoZVxuICBhbGxUYXNrcyA9IGFsbFRhc2tzLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgIHJldHVybiBjbG9uZShyZXMpO1xuICB9KTtcblxuICByZXR1cm4gYWxsVGFza3M7XG59XG5cbmZ1bmN0aW9uIGlzUmVmTGlrZSAob2JqLCB0aHJvd1dpdGhEZXRhaWxzKSB7XG4gIHZhciByZWZMaWtlID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGlmICghaXNUeXBlKG9iaiwgJ09iamVjdCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29iaiBpcyBub3QgYW4gT2JqZWN0Jyk7XG4gICAgfSBlbHNlIGlmICghaXNUeXBlKG9iai4kcmVmLCAnU3RyaW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb2JqLiRyZWYgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dXaXRoRGV0YWlscykge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHJlZkxpa2UgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiByZWZMaWtlO1xufVxuXG5mdW5jdGlvbiBpc1R5cGUgKG9iaiwgdHlwZSkge1xuICAvLyBBIFBoYW50b21KUyBidWcgKGh0dHBzOi8vZ2l0aHViLmNvbS9hcml5YS9waGFudG9tanMvaXNzdWVzLzExNzIyKSBwcm9oaWJpdHMgdXMgZnJvbSB1c2luZyB0aGUgc2FtZSBhcHByb2FjaCBmb3JcbiAgLy8gdW5kZWZpbmVkIGNoZWNraW5nIHRoYXQgd2UgdXNlIGZvciBvdGhlciB0eXBlcy5cbiAgaWYgKHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIHR5cGUgKyAnXSc7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZVJlZkZpbHRlciAob3B0aW9ucykge1xuICB2YXIgcmVmRmlsdGVyO1xuXG4gIGlmIChpc1R5cGUob3B0aW9ucy5maWx0ZXIsICdBcnJheScpIHx8IGlzVHlwZShvcHRpb25zLmZpbHRlciwgJ1N0cmluZycpKSB7XG4gICAgcmVmRmlsdGVyID0gZnVuY3Rpb24gKHJlZkRldGFpbHMpIHtcbiAgICAgIHZhciB2YWxpZFR5cGVzID0gaXNUeXBlKG9wdGlvbnMuZmlsdGVyLCAnU3RyaW5nJykgPyBbb3B0aW9ucy5maWx0ZXJdIDogb3B0aW9ucy5maWx0ZXI7XG5cbiAgICAgIHJldHVybiB2YWxpZFR5cGVzLmluZGV4T2YocmVmRGV0YWlscy50eXBlKSA+IC0xO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNUeXBlKG9wdGlvbnMuZmlsdGVyLCAnRnVuY3Rpb24nKSkge1xuICAgIHJlZkZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICB9IGVsc2Uge1xuICAgIHJlZkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gcmVmRmlsdGVyO1xufVxuXG5mdW5jdGlvbiBtYWtlU3ViRG9jUGF0aCAob3B0aW9ucykge1xuICB2YXIgZnJvbVBhdGggPSBbXTtcblxuICBpZiAoaXNUeXBlKG9wdGlvbnMuc3ViRG9jUGF0aCwgJ0FycmF5JykpIHtcbiAgICBmcm9tUGF0aCA9IG9wdGlvbnMuc3ViRG9jUGF0aDtcbiAgfSBlbHNlIGlmIChpc1R5cGUob3B0aW9ucy5zdWJEb2NQYXRoLCAnU3RyaW5nJykpIHtcbiAgICBmcm9tUGF0aCA9IHBhdGhGcm9tUHRyKG9wdGlvbnMuc3ViRG9jUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZnJvbVBhdGg7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlIChvYmosIHJlZlBhdGgsIHZhbHVlKSB7XG4gIGZpbmRWYWx1ZShvYmosIHJlZlBhdGguc2xpY2UoMCwgcmVmUGF0aC5sZW5ndGggLSAxKSlbcmVmUGF0aFtyZWZQYXRoLmxlbmd0aCAtIDFdXSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiB3YWxrIChhbmNlc3RvcnMsIG5vZGUsIHBhdGgsIGZuKSB7XG4gIHZhciBwcm9jZXNzQ2hpbGRyZW4gPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIHdhbGtJdGVtIChpdGVtLCBzZWdtZW50KSB7XG4gICAgcGF0aC5wdXNoKHNlZ21lbnQpO1xuICAgIHdhbGsoYW5jZXN0b3JzLCBpdGVtLCBwYXRoLCBmbik7XG4gICAgcGF0aC5wb3AoKTtcbiAgfVxuXG4gIC8vIENhbGwgdGhlIGl0ZXJhdGVlXG4gIGlmIChpc1R5cGUoZm4sICdGdW5jdGlvbicpKSB7XG4gICAgcHJvY2Vzc0NoaWxkcmVuID0gZm4oYW5jZXN0b3JzLCBub2RlLCBwYXRoKTtcbiAgfVxuXG4gIC8vIFdlIGRvIG5vdCBwcm9jZXNzIGNpcmN1bGFyIG9iamVjdHMgYWdhaW5cbiAgaWYgKGFuY2VzdG9ycy5pbmRleE9mKG5vZGUpID09PSAtMSkge1xuICAgIGFuY2VzdG9ycy5wdXNoKG5vZGUpO1xuXG4gICAgaWYgKHByb2Nlc3NDaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChpc1R5cGUobm9kZSwgJ0FycmF5JykpIHtcbiAgICAgICAgbm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChtZW1iZXIsIGluZGV4KSB7XG4gICAgICAgICAgd2Fsa0l0ZW0obWVtYmVyLCBpbmRleC50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVHlwZShub2RlLCAnT2JqZWN0JykpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobm9kZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgd2Fsa0l0ZW0obm9kZVtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhbmNlc3RvcnMucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9ucyAob3B0aW9ucykge1xuICBpZiAoIWlzVHlwZShvcHRpb25zLCAnVW5kZWZpbmVkJykpIHtcbiAgICBpZiAoIWlzVHlwZShvcHRpb25zLCAnT2JqZWN0JykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBPYmplY3QnKTtcbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUob3B0aW9ucy5maWx0ZXIsICdVbmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgIWlzVHlwZShvcHRpb25zLmZpbHRlciwgJ0FycmF5JykgJiZcbiAgICAgICAgICAgICAgICFpc1R5cGUob3B0aW9ucy5maWx0ZXIsICdGdW5jdGlvbicpICYmXG4gICAgICAgICAgICAgICAhaXNUeXBlKG9wdGlvbnMuZmlsdGVyLCAnU3RyaW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuZmlsdGVyIG11c3QgYmUgYW4gQXJyYXksIGEgRnVuY3Rpb24gb2YgYSBTdHJpbmcnKTtcbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUob3B0aW9ucy5pbmNsdWRlSW52YWxpZCwgJ1VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAhaXNUeXBlKG9wdGlvbnMuaW5jbHVkZUludmFsaWQsICdCb29sZWFuJykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuaW5jbHVkZUludmFsaWQgbXVzdCBiZSBhIEJvb2xlYW4nKTtcbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUob3B0aW9ucy5yZWZQcmVQcm9jZXNzb3IsICdVbmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgIWlzVHlwZShvcHRpb25zLnJlZlByZVByb2Nlc3NvciwgJ0Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMucmVmUHJlUHJvY2Vzc29yIG11c3QgYmUgYSBGdW5jdGlvbicpO1xuICAgIH0gZWxzZSBpZiAoIWlzVHlwZShvcHRpb25zLnJlZlBvc3RQcm9jZXNzb3IsICdVbmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgIWlzVHlwZShvcHRpb25zLnJlZlBvc3RQcm9jZXNzb3IsICdGdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLnJlZlBvc3RQcm9jZXNzb3IgbXVzdCBiZSBhIEZ1bmN0aW9uJyk7XG4gICAgfSBlbHNlIGlmICghaXNUeXBlKG9wdGlvbnMuc3ViRG9jUGF0aCwgJ1VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAhaXNUeXBlKG9wdGlvbnMuc3ViRG9jUGF0aCwgJ0FycmF5JykgJiZcbiAgICAgICAgICAgICAgICFpc1B0cihvcHRpb25zLnN1YkRvY1BhdGgpKSB7XG4gICAgICAvLyBJZiBhIHBvaW50ZXIgaXMgcHJvdmlkZWQsIHRocm93IGFuIGVycm9yIGlmIGl0J3Mgbm90IHRoZSBwcm9wZXIgdHlwZVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5zdWJEb2NQYXRoIG11c3QgYmUgYW4gQXJyYXkgb2YgcGF0aCBzZWdtZW50cyBvciBhIHZhbGlkIEpTT04gUG9pbnRlcicpO1xuICAgIH1cbiAgfVxufVxuXG4vKiBNb2R1bGUgTWVtYmVycyAqL1xuXG4vKlxuICogRWFjaCBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9uIHN0YXRlbWVudHMgYW5kICp0aGVuKiBleHBvcnRlZCBpbiB0d28gc3RlcHMgaW5zdGVhZCBvZiBvbmUgZHVlXG4gKiB0byBhIGJ1ZyBpbiBqc2RvYyAoaHR0cHM6Ly9naXRodWIuY29tL2pzZG9jMm1kL2pzZG9jLXBhcnNlL2lzc3Vlcy8xOCkgdGhhdCBjYXVzZXMgb3VyIGRvY3VtZW50YXRpb24gdG8gYmVcbiAqIGdlbmVyYXRlZCBpbXByb3Blcmx5LiAgVGhlIGltcGFjdCB0byB0aGUgdXNlciBpcyBzaWduaWZpY2FudCBlbm91Z2ggZm9yIHVzIHRvIHdhcnJhbnQgd29ya2luZyBhcm91bmQgaXQgdW50aWwgdGhpc1xuICogaXMgZml4ZWQuXG4gKi9cblxuLyoqXG4gKiBUaGUgb3B0aW9ucyB1c2VkIGZvciB2YXJpb3VzIEpzb25SZWZzIEFQSXMuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gSnNvblJlZnNPcHRpb25zXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW118ZnVuY3Rpb259IFtmaWx0ZXI9ZnVuY3Rpb24gKCkge3JldHVybiB0cnVlO31dIC0gVGhlIGZpbHRlciB0byB1c2Ugd2hlbiBnYXRoZXJpbmcgSlNPTlxuICogUmVmZXJlbmNlcyAqKElmIHRoaXMgdmFsdWUgaXMgYSBzaW5nbGUgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MsIHRoZSB2YWx1ZShzKSBhcmUgZXhwZWN0ZWQgdG8gYmUgdGhlIGB0eXBlKHMpYFxuICogeW91IGFyZSBpbnRlcmVzdGVkIGluIGNvbGxlY3RpbmcgYXMgZGVzY3JpYmVkIGluIHtAbGluayBtb2R1bGU6SnNvblJlZnMuZ2V0UmVmRGV0YWlsc30uICBJZiBpdCBpcyBhIGZ1bmN0aW9uLCBpdCBpc1xuICogZXhwZWN0ZWQgdGhhdCB0aGUgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIHtAbGluayBtb2R1bGU6SnNvblJlZnN+UmVmRGV0YWlsc0ZpbHRlcn0uKSpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVJbnZhbGlkPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgaW52YWxpZCBKU09OIFJlZmVyZW5jZSBkZXRhaWxzICooVGhpcyB3aWxsIG1ha2VcbiAqIGl0IHNvIHRoYXQgb2JqZWN0cyB0aGF0IGFyZSBsaWtlIEpTT04gUmVmZXJlbmNlIG9iamVjdHMsIGFzIGluIHRoZXkgYXJlIGFuIGBPYmplY3RgIGFuZCB0aGUgaGF2ZSBhIGAkcmVmYCBwcm9wZXJ0eSxcbiAqIGJ1dCBmYWlsIHZhbGlkYXRpb24gd2lsbCBiZSBpbmNsdWRlZC4gIFRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8ga25vdyBpZiB5b3UgaGF2ZSBpbnZhbGlkIEpTT05cbiAqIFJlZmVyZW5jZSBkZWZpbml0aW9ucy4gIFRoaXMgd2lsbCBub3QgbWVhbiB0aGF0IEFQSXMgd2lsbCBwcm9jZXNzIGludmFsaWQgSlNPTiBSZWZlcmVuY2VzIGJ1dCB0aGUgcmVhc29ucyBhcyB0byB3aHlcbiAqIHRoZSBKU09OIFJlZmVyZW5jZXMgYXJlIGludmFsaWQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgbWV0YWRhdGEuKSpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbbG9hZGVyT3B0aW9uc10gLSBUaGUgb3B0aW9ucyB0byBwYXNzIHRvXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3doaXRsb2NramMvcGF0aC1sb2FkZXIvYmxvYi9tYXN0ZXIvZG9jcy9BUEkubWQjbW9kdWxlX1BhdGhMb2FkZXIubG9hZHxQYXRoTG9hZGVyfmxvYWR9XG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35SZWZQcmVQcm9jZXNzb3J9IFtyZWZQcmVQcm9jZXNzb3JdIC0gVGhlIGNhbGxiYWNrIHVzZWQgdG8gcHJlLXByb2Nlc3MgYSBKU09OIFJlZmVyZW5jZSBsaWtlXG4gKiBvYmplY3QgKihUaGlzIGlzIGNhbGxlZCBwcmlvciB0byB2YWxpZGF0aW5nIHRoZSBKU09OIFJlZmVyZW5jZSBsaWtlIG9iamVjdCBhbmQgZ2V0dGluZyBpdHMgZGV0YWlscykqXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35SZWZQb3N0UHJvY2Vzc29yfSBbcmVmUG9zdFByb2Nlc3Nvcl0gLSBUaGUgY2FsbGJhY2sgdXNlZCB0byBwb3N0LXByb2Nlc3MgdGhlIEpTT04gUmVmZXJlbmNlXG4gKiBtZXRhZGF0YSAqKFRoaXMgaXMgY2FsbGVkIHByaW9yIGZpbHRlcmluZyB0aGUgcmVmZXJlbmNlcykqXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucmVsYXRpdmVCYXNlXSAtIFRoZSBiYXNlIGxvY2F0aW9uIHRvIHVzZSB3aGVuIHJlc29sdmluZyByZWxhdGl2ZSByZWZlcmVuY2VzICooT25seSB1c2VmdWxcbiAqIGZvciBBUElzIHRoYXQgZG8gcmVtb3RlIHJlZmVyZW5jZSByZXNvbHV0aW9uLiAgSWYgdGhpcyB2YWx1ZSBpcyBub3QgZGVmaW5lZCxcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vd2hpdGxvY2tqYy9wYXRoLWxvYWRlcnxwYXRoLWxvYWRlcn0gd2lsbCB1c2UgYHdpbmRvdy5sb2NhdGlvbi5ocmVmYCBmb3IgdGhlIGJyb3dzZXIgYW5kXG4gKiBgcHJvY2Vzcy5jd2QoKWAgZm9yIE5vZGUuanMuKSpcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbb3B0aW9ucy5zdWJEb2NQYXRoPVtdXSAtIFRoZSBKU09OIFBvaW50ZXIgb3IgYXJyYXkgb2YgcGF0aCBzZWdtZW50cyB0byB0aGUgc3ViIGRvY3VtZW50XG4gKiBsb2NhdGlvbiB0byBzZWFyY2ggZnJvbVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnN+SnNvblJlZnNPcHRpb25zXG4gKi9cblxuLyoqXG4gKiBTaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgb3V0IEpTT04gUmVmZXJlbmNlcy5cbiAqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb259IFJlZkRldGFpbHNGaWx0ZXJcbiAqXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35VbnJlc29sdmVkUmVmRGV0YWlsc30gcmVmRGV0YWlscyAtIFRoZSBKU09OIFJlZmVyZW5jZSBkZXRhaWxzIHRvIHRlc3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgSlNPTiBSZWZlcmVuY2VcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciB0aGUgSlNPTiBSZWZlcmVuY2Ugc2hvdWxkIGJlIGZpbHRlcmVkICoob3V0KSogb3Igbm90XG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmc35SZWZEZXRhaWxzRmlsdGVyXG4gKi9cblxuLyoqXG4gKiBTaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBwcmUtcHJvY2VzcyBhIEpTT04gUmVmZXJlbmNlIGxpa2Ugb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbn0gUmVmUHJlUHJvY2Vzc29yXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIFRoZSBKU09OIFJlZmVyZW5jZSBsaWtlIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBKU09OIFJlZmVyZW5jZSBsaWtlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBwcm9jZXNzZWQgSlNPTiBSZWZlcmVuY2UgbGlrZSBvYmplY3RcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzflJlZlByZVByb2Nlc3NvclxuICovXG5cbi8qKlxuICogU2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcG9zdC1wcm9jZXNzIGEgSlNPTiBSZWZlcmVuY2UgZGV0YWlscy5cbiAqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb259IFJlZlBvc3RQcm9jZXNzb3JcbiAqXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35VbnJlc29sdmVkUmVmRGV0YWlsc30gcmVmRGV0YWlscyAtIFRoZSBKU09OIFJlZmVyZW5jZSBkZXRhaWxzIHRvIHRlc3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgSlNPTiBSZWZlcmVuY2VcbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgcHJvY2Vzc2VkIEpTT04gUmVmZXJlbmNlIGRldGFpbHMgb2JqZWN0XG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmc35SZWZQb3N0UHJvY2Vzc29yXG4gKi9cblxuLyoqXG4gKiBEZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCByZXNvbHZlZCBKU09OIFJlZmVyZW5jZXMuXG4gKlxuICogQHR5cGVkZWYge21vZHVsZTpKc29uUmVmc35VbnJlc29sdmVkUmVmRGV0YWlsc30gUmVzb2x2ZWRSZWZEZXRhaWxzXG4gKlxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2lyY3VsYXJdIC0gV2hldGhlciBvciBub3QgdGhlIEpTT04gUmVmZXJlbmNlIGlzIGNpcmN1bGFyICooV2lsbCBub3QgYmUgc2V0IGlmIHRoZSBKU09OXG4gKiBSZWZlcmVuY2UgaXMgbm90IGNpcmN1bGFyKSpcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW21pc3NpbmddIC0gV2hldGhlciBvciBub3QgdGhlIHJlZmVyZW5jZWQgdmFsdWUgd2FzIG1pc3Npbmcgb3Igbm90ICooV2lsbCBub3QgYmUgc2V0IGlmIHRoZVxuICogcmVmZXJlbmNlZCB2YWx1ZSBpcyBub3QgbWlzc2luZykqXG4gKiBAcHJvcGVydHkgeyp9IFt2YWx1ZV0gLSBUaGUgcmVmZXJlbmNlZCB2YWx1ZSAqKFdpbGwgbm90IGJlIHNldCBpZiB0aGUgcmVmZXJlbmNlZCB2YWx1ZSBpcyBtaXNzaW5nKSpcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzflJlc29sdmVkUmVmRGV0YWlsc1xuICovXG5cbi8qKlxuICogVGhlIHJlc3VsdHMgb2YgcmVzb2x2aW5nIHRoZSBKU09OIFJlZmVyZW5jZXMgb2YgYW4gYXJyYXkvb2JqZWN0LlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlc29sdmVkUmVmc1Jlc3VsdHNcbiAqXG4gKiBAcHJvcGVydHkge21vZHVsZTpKc29uUmVmc35SZXNvbHZlZFJlZkRldGFpbHN9IHJlZnMgLSBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgSlNPTiBQb2ludGVycyAqKGZyYWdtZW50IHZlcnNpb24pKlxuICogdG8gd2hlcmUgdGhlIEpTT04gUmVmZXJlbmNlIGlzIGRlZmluZWQgYW5kIHdob3NlIHZhbHVlcyBhcmUge0BsaW5rIG1vZHVsZTpKc29uUmVmc35SZXNvbHZlZFJlZkRldGFpbHN9XG4gKiBAcHJvcGVydHkge29iamVjdH0gdmFsdWUgLSBUaGUgYXJyYXkvb2JqZWN0IHdpdGggaXRzIEpTT04gUmVmZXJlbmNlcyBmdWxseSByZXNvbHZlZFxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnN+UmVzb2x2ZWRSZWZzUmVzdWx0c1xuICovXG5cbi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJldHJpZXZlZCBkb2N1bWVudCBhbmQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgaXRzIEpTT04gUmVmZXJlbmNlcy5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZXRyaWV2ZWRSZWZzUmVzdWx0c1xuICpcbiAqIEBwcm9wZXJ0eSB7bW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzfSByZWZzIC0gQW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIEpTT04gUG9pbnRlcnMgKihmcmFnbWVudCB2ZXJzaW9uKSpcbiAqIHRvIHdoZXJlIHRoZSBKU09OIFJlZmVyZW5jZSBpcyBkZWZpbmVkIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIHtAbGluayBtb2R1bGU6SnNvblJlZnN+VW5yZXNvbHZlZFJlZkRldGFpbHN9XG4gKiBAcHJvcGVydHkge29iamVjdH0gdmFsdWUgLSBUaGUgcmV0cmlldmVkIGRvY3VtZW50XG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmc35SZXRyaWV2ZWRSZWZzUmVzdWx0c1xuICovXG5cbi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJldHJpZXZlZCBkb2N1bWVudCwgdGhlIGRvY3VtZW50IHdpdGggaXRzIHJlZmVyZW5jZXMgcmVzb2x2ZWQgYW5kICBkZXRhaWxlZCBpbmZvcm1hdGlvblxuICogYWJvdXQgaXRzIEpTT04gUmVmZXJlbmNlcy5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZXRyaWV2ZWRSZXNvbHZlZFJlZnNSZXN1bHRzXG4gKlxuICogQHByb3BlcnR5IHttb2R1bGU6SnNvblJlZnN+VW5yZXNvbHZlZFJlZkRldGFpbHN9IHJlZnMgLSBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgSlNPTiBQb2ludGVycyAqKGZyYWdtZW50IHZlcnNpb24pKlxuICogdG8gd2hlcmUgdGhlIEpTT04gUmVmZXJlbmNlIGlzIGRlZmluZWQgYW5kIHdob3NlIHZhbHVlcyBhcmUge0BsaW5rIG1vZHVsZTpKc29uUmVmc35VbnJlc29sdmVkUmVmRGV0YWlsc31cbiAqIEBwcm9wZXJ0eSB7bW9kdWxlOkpzb25SZWZzflJlc29sdmVkUmVmc1Jlc3VsdHN9IC0gQW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIEpTT04gUG9pbnRlcnMgKihmcmFnbWVudCB2ZXJzaW9uKSpcbiAqIHRvIHdoZXJlIHRoZSBKU09OIFJlZmVyZW5jZSBpcyBkZWZpbmVkIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIHtAbGluayBtb2R1bGU6SnNvblJlZnN+UmVzb2x2ZWRSZWZEZXRhaWxzfVxuICogQHByb3BlcnR5IHtvYmplY3R9IHZhbHVlIC0gVGhlIHJldHJpZXZlZCBkb2N1bWVudFxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnN+UmV0cmlldmVkUmVzb2x2ZWRSZWZzUmVzdWx0c1xuICovXG5cbi8qKlxuICogRGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdW5yZXNvbHZlZCBKU09OIFJlZmVyZW5jZXMuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gVW5yZXNvbHZlZFJlZkRldGFpbHNcbiAqXG4gKiBAcHJvcGVydHkge29iamVjdH0gZGVmIC0gVGhlIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXJyb3JdIC0gVGhlIGVycm9yIGluZm9ybWF0aW9uIGZvciBpbnZhbGlkIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb24gKihPbmx5IHByZXNlbnQgd2hlbiB0aGVcbiAqIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb24gaXMgaW52YWxpZCBvciB0aGVyZSB3YXMgYSBwcm9ibGVtIHJldHJpZXZpbmcgYSByZW1vdGUgcmVmZXJlbmNlIGR1cmluZyByZXNvbHV0aW9uKSpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmkgLSBUaGUgVVJJIHBvcnRpb24gb2YgdGhlIEpTT04gUmVmZXJlbmNlXG4gKiBAcHJvcGVydHkge29iamVjdH0gdXJpRGV0YWlscyAtIERldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBVUkkgYXMgcHJvdmlkZWQgYnlcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qc3xVUkkucGFyc2V9LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgLSBUaGUgSlNPTiBSZWZlcmVuY2UgdHlwZSAqKFRoaXMgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBgaW52YWxpZGAsIGBsb2NhbGAsXG4gKiBgcmVsYXRpdmVgIG9yIGByZW1vdGVgLikqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3dhcm5pbmddIC0gVGhlIHdhcm5pbmcgaW5mb3JtYXRpb24gKihPbmx5IHByZXNlbnQgd2hlbiB0aGUgSlNPTiBSZWZlcmVuY2UgZGVmaW5pdGlvbiBwcm9kdWNlcyBhXG4gKiB3YXJuaW5nKSpcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGludGVybmFsIGNhY2hlIG9mIHJlbW90ZSBkb2N1bWVudHMsIHJlZmVyZW5jZSBkZXRhaWxzLCBldGMuXG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmcy5jbGVhckNhY2hlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyQ2FjaGUgKCkge1xuICByZW1vdGVDYWNoZSA9IHt9O1xufVxuXG4vKipcbiAqIFRha2VzIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMgYW5kIGRlY29kZXMgdGhlIEpTT04gUG9pbnRlciB0b2tlbnMgaW4gdGhlbS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gVGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cyB3aXRoIHRoZWlyIEpTT04gUG9pbnRlciB0b2tlbnMgZGVjb2RlZFxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgcGF0aCBpcyBub3QgYW4gYEFycmF5YFxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxI3NlY3Rpb24tM31cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLmRlY29kZVBhdGhcbiAqL1xuZnVuY3Rpb24gZGVjb2RlUGF0aCAocGF0aCkge1xuICBpZiAoIWlzVHlwZShwYXRoLCAnQXJyYXknKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgcmV0dXJuIHBhdGgubWFwKGZ1bmN0aW9uIChzZWcpIHtcbiAgICBpZiAoIWlzVHlwZShzZWcsICdTdHJpbmcnKSkge1xuICAgICAgc2VnID0gSlNPTi5zdHJpbmdpZnkoc2VnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VnLnJlcGxhY2UoL34xL2csICcvJykucmVwbGFjZSgvfjAvZywgJ34nKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cyBhbmQgZW5jb2RlcyB0aGUgc3BlY2lhbCBKU09OIFBvaW50ZXIgY2hhcmFjdGVycyBpbiB0aGVtLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBUaGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50c1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzIHdpdGggdGhlaXIgSlNPTiBQb2ludGVyIHRva2VucyBlbmNvZGVkXG4gKlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBwYXRoIGlzIG5vdCBhbiBgQXJyYXlgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEjc2VjdGlvbi0zfVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMuZW5jb2RlUGF0aFxuICovXG5mdW5jdGlvbiBlbmNvZGVQYXRoIChwYXRoKSB7XG4gIGlmICghaXNUeXBlKHBhdGgsICdBcnJheScpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGF0aCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICByZXR1cm4gcGF0aC5tYXAoZnVuY3Rpb24gKHNlZykge1xuICAgIGlmICghaXNUeXBlKHNlZywgJ1N0cmluZycpKSB7XG4gICAgICBzZWcgPSBKU09OLnN0cmluZ2lmeShzZWcpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWcucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIEpTT04gUmVmZXJlbmNlcyBkZWZpbmVkIHdpdGhpbiB0aGUgcHJvdmlkZWQgYXJyYXkvb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fSBvYmogLSBUaGUgc3RydWN0dXJlIHRvIGZpbmQgSlNPTiBSZWZlcmVuY2VzIHdpdGhpblxuICogQHBhcmFtIHttb2R1bGU6SnNvblJlZnN+SnNvblJlZnNPcHRpb25zfSBbb3B0aW9uc10gLSBUaGUgSnNvblJlZnMgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IGFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBKU09OIFBvaW50ZXJzICooZnJhZ21lbnQgdmVyc2lvbikqIHRvIHdoZXJlIHRoZSBKU09OIFJlZmVyZW5jZSBpcyBkZWZpbmVkXG4gKiBhbmQgd2hvc2UgdmFsdWVzIGFyZSB7QGxpbmsgbW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzfS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2hlbiB0aGUgaW5wdXQgYXJndW1lbnRzIGZhaWwgdmFsaWRhdGlvbiBvciBpZiBgb3B0aW9ucy5zdWJEb2NQYXRoYCBwb2ludHMgdG8gYW4gaW52YWxpZCBsb2NhdGlvblxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMuZmluZFJlZnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRmluZGluZyBhbGwgdmFsaWQgcmVmZXJlbmNlc1xuICogdmFyIGFsbFJlZnMgPSBKc29uUmVmcy5maW5kUmVmcyhvYmopO1xuICogLy8gRmluZGluZyBhbGwgcmVtb3RlIHJlZmVyZW5jZXNcbiAqIHZhciByZW1vdGVSZWZzID0gSnNvblJlZnMuZmluZFJlZnMob2JqLCB7ZmlsdGVyOiBbJ3JlbGF0aXZlJywgJ3JlbW90ZSddfSk7XG4gKiAvLyBGaW5kaW5nIGFsbCBpbnZhbGlkIHJlZmVyZW5jZXNcbiAqIHZhciBpbnZhbGlkUmVmcyA9IEpzb25SZWZzLmZpbmRSZWZzKG9iaiwge2ZpbHRlcjogJ2ludmFsaWQnLCBpbmNsdWRlSW52YWxpZDogdHJ1ZX0pO1xuICovXG5mdW5jdGlvbiBmaW5kUmVmcyAob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgdmFyIGZyb21PYmogPSBvYmo7XG4gIHZhciBmcm9tUGF0aDtcbiAgdmFyIHJlZnMgPSB7fTtcbiAgdmFyIHJlZkZpbHRlcjtcblxuICAvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgZG9jdW1lbnRcbiAgaWYgKCFpc1R5cGUob2JqLCAnQXJyYXknKSAmJiAhaXNUeXBlKG9iaiwgJ09iamVjdCcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb2JqIG11c3QgYmUgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gIH1cblxuICAvLyBTZXQgZGVmYXVsdCBmb3Igb3B0aW9uc1xuICBpZiAoaXNUeXBlKG9wdGlvbnMsICdVbmRlZmluZWQnKSkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbnNcbiAgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIENvbnZlcnQgZnJvbSB0byBhIHBvaW50ZXJcbiAgZnJvbVBhdGggPSBtYWtlU3ViRG9jUGF0aChvcHRpb25zKTtcblxuICAvLyBDb252ZXJ0IG9wdGlvbnMuZmlsdGVyIGZyb20gYW4gQXJyYXkvU3RyaW5nIHRvIGEgRnVuY3Rpb25cbiAgcmVmRmlsdGVyID0gbWFrZVJlZkZpbHRlcihvcHRpb25zKTtcblxuICBpZiAoZnJvbVBhdGgubGVuZ3RoID4gMCkge1xuICAgIGFuY2VzdG9ycyA9IGZpbmRBbmNlc3RvcnMob2JqLCBmcm9tUGF0aCk7XG4gICAgZnJvbU9iaiA9IGZpbmRWYWx1ZShvYmosIGZyb21QYXRoKTtcbiAgfVxuXG4gIC8vIFdhbGsgdGhlIGRvY3VtZW50IChvciBzdWIgZG9jdW1lbnQpIGFuZCBmaW5kIGFsbCBKU09OIFJlZmVyZW5jZXNcbiAgd2FsayhhbmNlc3RvcnMsIGZyb21PYmosIGZyb21QYXRoLCBmdW5jdGlvbiAoYW5jZXN0b3JzLCBub2RlLCBwYXRoKSB7XG4gICAgdmFyIHByb2Nlc3NDaGlsZHJlbiA9IHRydWU7XG4gICAgdmFyIHJlZkRldGFpbHM7XG5cbiAgICBpZiAoaXNSZWZMaWtlKG5vZGUpKSB7XG4gICAgICAvLyBQcmUtcHJvY2VzcyB0aGUgbm9kZSB3aGVuIG5lY2Vzc2FyeVxuICAgICAgaWYgKCFpc1R5cGUob3B0aW9ucy5yZWZQcmVQcm9jZXNzb3IsICdVbmRlZmluZWQnKSkge1xuICAgICAgICBub2RlID0gb3B0aW9ucy5yZWZQcmVQcm9jZXNzb3Iobm9kZSwgcGF0aCk7XG4gICAgICB9XG5cbiAgICAgIHJlZkRldGFpbHMgPSBnZXRSZWZEZXRhaWxzKG5vZGUpO1xuXG4gICAgICBpZiAocmVmRGV0YWlscy50eXBlICE9PSAnaW52YWxpZCcgfHwgb3B0aW9ucy5pbmNsdWRlSW52YWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAocmVmRmlsdGVyKHJlZkRldGFpbHMsIHBhdGgpID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gUG9zdC1wcm9jZXNzIHRoZSByZWZlcmVuY2UgZGV0YWlscyB3aGVuIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmICghaXNUeXBlKG9wdGlvbnMucmVmUG9zdFByb2Nlc3NvciwgJ1VuZGVmaW5lZCcpKSB7XG4gICAgICAgICAgICByZWZEZXRhaWxzID0gb3B0aW9ucy5yZWZQb3N0UHJvY2Vzc29yKHJlZkRldGFpbHMsIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlZnNbcGF0aFRvUHRyKHBhdGgpXSA9IHJlZkRldGFpbHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXaGVuZXZlciBhIEpTT04gUmVmZXJlbmNlIGhhcyBleHRyYSBjaGlsZHJlbiwgaXRzIGNoaWxkcmVuIHNob3VsZCBiZSBpZ25vcmVkIHNvIHdlIHdhbnQgdG8gc3RvcCBwcm9jZXNzaW5nLlxuICAgICAgICAvLyAgIFNlZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcGJyeWFuLXp5cC1qc29uLXJlZi0wMyNzZWN0aW9uLTNcbiAgICAgICAgaWYgKGdldEV4dHJhUmVmS2V5cyhub2RlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJvY2Vzc0NoaWxkcmVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc0NoaWxkcmVuO1xuICB9KTtcblxuICByZXR1cm4gcmVmcztcbn1cblxuLyoqXG4gKiBGaW5kcyBKU09OIFJlZmVyZW5jZXMgZGVmaW5lZCB3aXRoaW4gdGhlIGRvY3VtZW50IGF0IHRoZSBwcm92aWRlZCBsb2NhdGlvbi5cbiAqXG4gKiBUaGlzIEFQSSBpcyBpZGVudGljYWwgdG8ge0BsaW5rIG1vZHVsZTpKc29uUmVmcy5maW5kUmVmc30gZXhjZXB0IHRoaXMgQVBJIHdpbGwgcmV0cmlldmUgYSByZW1vdGUgZG9jdW1lbnQgYW5kIHRoZW5cbiAqIHJldHVybiB0aGUgcmVzdWx0IG9mIHtAbGluayBtb2R1bGU6SnNvblJlZnMuZmluZFJlZnN9IG9uIHRoZSByZXRyaWV2ZWQgZG9jdW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIC0gVGhlIGxvY2F0aW9uIHRvIHJldHJpZXZlICooQ2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLCBqdXN0IG1ha2Ugc3VyZSB5b3UgbG9vayBhdCB0aGVcbiAqIHtAbGluayBtb2R1bGU6SnNvblJlZnN+SnNvblJlZnNPcHRpb25zfG9wdGlvbnMgZG9jdW1lbnRhdGlvbn0gdG8gc2VlIGhvdyByZWxhdGl2ZSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkLikqXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35Kc29uUmVmc09wdGlvbnN9IFtvcHRpb25zXSAtIFRoZSBKc29uUmVmcyBvcHRpb25zXG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGEge0BsaW5rIG1vZHVsZTpKc29uUmVmc35SZXRyaWV2ZWRSZWZzUmVzdWx0c30gYW5kIHJlamVjdHMgd2l0aCBhblxuICogYEVycm9yYCB3aGVuIHRoZSBpbnB1dCBhcmd1bWVudHMgZmFpbCB2YWxpZGF0aW9uLCB3aGVuIGBvcHRpb25zLnN1YkRvY1BhdGhgIHBvaW50cyB0byBhbiBpbnZhbGlkIGxvY2F0aW9uIG9yIHdoZW5cbiAqICB0aGUgbG9jYXRpb24gYXJndW1lbnQgcG9pbnRzIHRvIGFuIHVubG9hZGFibGUgcmVzb3VyY2VcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLmZpbmRSZWZzQXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSB0aGF0IG9ubHkgcmVzb2x2ZXMgcmVmZXJlbmNlcyB3aXRoaW4gYSBzdWIgZG9jdW1lbnRcbiAqIEpzb25SZWZzLmZpbmRSZWZzQXQoJ2h0dHA6Ly9wZXRzdG9yZS5zd2FnZ2VyLmlvL3YyL3N3YWdnZXIuanNvbicsIHtcbiAqICAgICBzdWJEb2NQYXRoOiAnIy9kZWZpbml0aW9ucydcbiAqICAgfSlcbiAqICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICogICAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzcG9uc2VcbiAqICAgICAgLy9cbiAqICAgICAgLy8gcmVzLnJlZnM6IEpTT04gUmVmZXJlbmNlIGxvY2F0aW9ucyBhbmQgZGV0YWlsc1xuICogICAgICAvLyByZXMudmFsdWU6IFRoZSByZXRyaWV2ZWQgZG9jdW1lbnRcbiAqICAgfSwgZnVuY3Rpb24gKGVycikge1xuICogICAgIGNvbnNvbGUubG9nKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICovXG5mdW5jdGlvbiBmaW5kUmVmc0F0IChsb2NhdGlvbiwgb3B0aW9ucykge1xuICB2YXIgYWxsVGFza3MgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNPcHRpb25zO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICAgIGlmICghaXNUeXBlKGxvY2F0aW9uLCAnU3RyaW5nJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbG9jYXRpb24gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGVmYXVsdCBmb3Igb3B0aW9uc1xuICAgICAgaWYgKGlzVHlwZShvcHRpb25zLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBvcHRpb25zIChEb2luZyB0aGlzIGhlcmUgZm9yIGEgcXVpY2spXG4gICAgICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgIGNPcHRpb25zID0gY2xvbmUob3B0aW9ucyk7XG5cbiAgICAgIC8vIENvbWJpbmUgdGhlIGxvY2F0aW9uIGFuZCB0aGUgb3B0aW9uYWwgcmVsYXRpdmUgYmFzZVxuICAgICAgbG9jYXRpb24gPSBjb21iaW5lVVJJcyhvcHRpb25zLnJlbGF0aXZlQmFzZSwgbG9jYXRpb24pO1xuXG4gICAgICAvLyBTZXQgdGhlIG5ldyByZWxhdGl2ZSByZWZlcmVuY2UgbG9jYXRpb25cbiAgICAgIGNPcHRpb25zLnJlbGF0aXZlQmFzZSA9IGxvY2F0aW9uLnN1YnN0cmluZygwLCBsb2NhdGlvbi5sYXN0SW5kZXhPZignLycpKTtcblxuICAgICAgcmV0dXJuIGdldFJlbW90ZURvY3VtZW50KGxvY2F0aW9uLCBjT3B0aW9ucyk7XG4gICAgfSlcbiAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICB2YXIgY2FjaGVFbnRyeSA9IGNsb25lKHJlbW90ZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICB2YXIgY09wdGlvbnM7XG5cbiAgICAgIGlmIChpc1R5cGUoY2FjaGVFbnRyeS5yZWZzLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgY09wdGlvbnMgPSBjbG9uZShvcHRpb25zKTtcblxuICAgICAgICAvLyBEbyBub3QgZmlsdGVyIGFueSByZWZlcmVuY2VzIHNvIHRoZSBjYWNoZSBpcyBjb21wbGV0ZVxuICAgICAgICBkZWxldGUgY09wdGlvbnMuZmlsdGVyO1xuICAgICAgICBkZWxldGUgY09wdGlvbnMuc3ViRG9jUGF0aDtcblxuICAgICAgICBjT3B0aW9ucy5pbmNsdWRlSW52YWxpZCA9IHRydWU7XG5cbiAgICAgICAgcmVtb3RlQ2FjaGVbbG9jYXRpb25dLnJlZnMgPSBmaW5kUmVmcyhyZXMsIGNPcHRpb25zKTtcblxuICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSByZWZlcmVuY2VzIGJhc2VkIG9uIG9wdGlvbnMuZmlsdGVyIGFuZCBvcHRpb25zLnN1YkRvY1BhdGhcbiAgICAgICAgY2FjaGVFbnRyeS5yZWZzID0gZmlsdGVyUmVmcyhvcHRpb25zLCByZW1vdGVDYWNoZVtsb2NhdGlvbl0ucmVmcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBKU09OIFJlZmVyZW5jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIC0gVGhlIEpTT04gUmVmZXJlbmNlIGRlZmluaXRpb25cbiAqXG4gKiBAcmV0dXJucyB7bW9kdWxlOkpzb25SZWZzflVucmVzb2x2ZWRSZWZEZXRhaWxzfSB0aGUgZGV0YWlsZWQgaW5mb3JtYXRpb25cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLmdldFJlZkRldGFpbHNcbiAqL1xuZnVuY3Rpb24gZ2V0UmVmRGV0YWlscyAob2JqKSB7XG4gIHZhciBkZXRhaWxzID0ge1xuICAgIGRlZjogb2JqXG4gIH07XG4gIHZhciBjYWNoZUtleTtcbiAgdmFyIGV4dHJhS2V5cztcbiAgdmFyIHVyaURldGFpbHM7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaXNSZWZMaWtlKG9iaiwgdHJ1ZSkpIHtcbiAgICAgIGNhY2hlS2V5ID0gb2JqLiRyZWY7XG4gICAgICB1cmlEZXRhaWxzID0gdXJpRGV0YWlsc0NhY2hlW2NhY2hlS2V5XTtcblxuICAgICAgaWYgKGlzVHlwZSh1cmlEZXRhaWxzLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgdXJpRGV0YWlscyA9IHVyaURldGFpbHNDYWNoZVtjYWNoZUtleV0gPSBVUkkucGFyc2UoY2FjaGVLZXkpO1xuICAgICAgfVxuXG4gICAgICBkZXRhaWxzLnVyaSA9IGNhY2hlS2V5O1xuICAgICAgZGV0YWlscy51cmlEZXRhaWxzID0gdXJpRGV0YWlscztcblxuICAgICAgaWYgKGlzVHlwZSh1cmlEZXRhaWxzLmVycm9yLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgLy8gQ29udmVydCB0aGUgVVJJIHJlZmVyZW5jZSB0byBvbmUgb2Ygb3VyIHR5cGVzXG4gICAgICAgIHN3aXRjaCAodXJpRGV0YWlscy5yZWZlcmVuY2UpIHtcbiAgICAgICAgY2FzZSAnYWJzb2x1dGUnOlxuICAgICAgICBjYXNlICd1cmknOlxuICAgICAgICAgIGRldGFpbHMudHlwZSA9ICdyZW1vdGUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzYW1lLWRvY3VtZW50JzpcbiAgICAgICAgICBkZXRhaWxzLnR5cGUgPSAnbG9jYWwnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGRldGFpbHMudHlwZSA9IHVyaURldGFpbHMucmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXRhaWxzLmVycm9yID0gZGV0YWlscy51cmlEZXRhaWxzLmVycm9yO1xuICAgICAgICBkZXRhaWxzLnR5cGUgPSAnaW52YWxpZCc7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZW50aWZ5IHdhcm5pbmdcbiAgICAgIGV4dHJhS2V5cyA9IGdldEV4dHJhUmVmS2V5cyhvYmopO1xuXG4gICAgICBpZiAoZXh0cmFLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGV0YWlscy53YXJuaW5nID0gJ0V4dHJhIEpTT04gUmVmZXJlbmNlIHByb3BlcnRpZXMgd2lsbCBiZSBpZ25vcmVkOiAnICsgZXh0cmFLZXlzLmpvaW4oJywgJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRldGFpbHMudHlwZSA9ICdpbnZhbGlkJztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRldGFpbHMuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICBkZXRhaWxzLnR5cGUgPSAnaW52YWxpZCc7XG4gIH1cblxuICByZXR1cm4gZGV0YWlscztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGFyZ3VtZW50IHJlcHJlc2VudHMgYSBKU09OIFBvaW50ZXIuXG4gKlxuICogQSBzdHJpbmcgaXMgYSBKU09OIFBvaW50ZXIgaWYgdGhlIGZvbGxvd2luZyBhcmUgYWxsIHRydWU6XG4gKlxuICogICAqIFRoZSBzdHJpbmcgaXMgb2YgdHlwZSBgU3RyaW5nYFxuICogICAqIFRoZSBzdHJpbmcgbXVzdCBiZSBlbXB0eSwgYCNgIG9yIHN0YXJ0IHdpdGggYSBgL2Agb3IgYCMvYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdHIgLSBUaGUgc3RyaW5nIHRvIGNoZWNrXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0aHJvd1dpdGhEZXRhaWxzPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHRocm93IGFuIGBFcnJvcmAgd2l0aCB0aGUgZGV0YWlscyBhcyB0byB3aHkgdGhlIHZhbHVlXG4gKiBwcm92aWRlZCBpcyBpbnZhbGlkXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrXG4gKlxuICogQHRocm93cyB7ZXJyb3J9IHdoZW4gdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGludmFsaWQgYW5kIHRoZSBgdGhyb3dXaXRoRGV0YWlsc2AgYXJndW1lbnQgaXMgYHRydWVgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEjc2VjdGlvbi0zfVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMuaXNQdHJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2VwYXJhdGluZyB0aGUgZGlmZmVyZW50IHdheXMgdG8gaW52b2tlIGlzUHRyIGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzXG4gKiBpZiAoaXNQdHIoc3RyKSkge1xuICogICAvLyBIYW5kbGUgYSB2YWxpZCBKU09OIFBvaW50ZXJcbiAqIH0gZWxzZSB7XG4gKiAgIC8vIEdldCB0aGUgcmVhc29uIGFzIHRvIHdoeSB0aGUgdmFsdWUgaXMgbm90IGEgSlNPTiBQb2ludGVyIHNvIHlvdSBjYW4gZml4L3JlcG9ydCBpdFxuICogICB0cnkge1xuICogICAgIGlzUHRyKHN0ciwgdHJ1ZSk7XG4gKiAgIH0gY2F0Y2ggKGVycikge1xuICogICAgIC8vIFRoZSBlcnJvciBtZXNzYWdlIGNvbnRhaW5zIHRoZSBkZXRhaWxzIGFzIHRvIHdoeSB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEgSlNPTiBQb2ludGVyXG4gKiAgIH1cbiAqIH1cbiAqL1xuZnVuY3Rpb24gaXNQdHIgKHB0ciwgdGhyb3dXaXRoRGV0YWlscykge1xuICB2YXIgdmFsaWQgPSB0cnVlO1xuICB2YXIgZmlyc3RDaGFyO1xuXG4gIHRyeSB7XG4gICAgaWYgKGlzVHlwZShwdHIsICdTdHJpbmcnKSkge1xuICAgICAgaWYgKHB0ciAhPT0gJycpIHtcbiAgICAgICAgZmlyc3RDaGFyID0gcHRyLmNoYXJBdCgwKTtcblxuICAgICAgICBpZiAoWycjJywgJy8nXS5pbmRleE9mKGZpcnN0Q2hhcikgPT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdHIgbXVzdCBzdGFydCB3aXRoIGEgLyBvciAjLycpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0Q2hhciA9PT0gJyMnICYmIHB0ciAhPT0gJyMnICYmIHB0ci5jaGFyQXQoMSkgIT09ICcvJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHRyIG11c3Qgc3RhcnQgd2l0aCBhIC8gb3IgIy8nKTtcbiAgICAgICAgfSBlbHNlIGlmIChwdHIubWF0Y2goYmFkUHRyVG9rZW5SZWdleCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B0ciBoYXMgaW52YWxpZCB0b2tlbihzKScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHRyIGlzIG5vdCBhIFN0cmluZycpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHRocm93V2l0aERldGFpbHMgPT09IHRydWUpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICB2YWxpZCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgYXJndW1lbnQgcmVwcmVzZW50cyBhIEpTT04gUmVmZXJlbmNlLlxuICpcbiAqIEFuIG9iamVjdCBpcyBhIEpTT04gUmVmZXJlbmNlIG9ubHkgaWYgdGhlIGZvbGxvd2luZyBhcmUgYWxsIHRydWU6XG4gKlxuICogICAqIFRoZSBvYmplY3QgaXMgb2YgdHlwZSBgT2JqZWN0YFxuICogICAqIFRoZSBvYmplY3QgaGFzIGEgYCRyZWZgIHByb3BlcnR5XG4gKiAgICogVGhlIGAkcmVmYCBwcm9wZXJ0eSBpcyBhIHZhbGlkIFVSSVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0aHJvd1dpdGhEZXRhaWxzPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHRocm93IGFuIGBFcnJvcmAgd2l0aCB0aGUgZGV0YWlscyBhcyB0byB3aHkgdGhlIHZhbHVlXG4gKiBwcm92aWRlZCBpcyBpbnZhbGlkXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrXG4gKlxuICogQHRocm93cyB7ZXJyb3J9IHdoZW4gdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGludmFsaWQgYW5kIHRoZSBgdGhyb3dXaXRoRGV0YWlsc2AgYXJndW1lbnQgaXMgYHRydWVgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcGJyeWFuLXp5cC1qc29uLXJlZi0wMyNzZWN0aW9uLTN9XG4gKlxuICogQGFsaWFzIG1vZHVsZTpKc29uUmVmcy5pc1JlZlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXBhcmF0aW5nIHRoZSBkaWZmZXJlbnQgd2F5cyB0byBpbnZva2UgaXNSZWYgZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXNcbiAqIGlmIChpc1JlZihvYmopKSB7XG4gKiAgIC8vIEhhbmRsZSBhIHZhbGlkIEpTT04gUmVmZXJlbmNlXG4gKiB9IGVsc2Uge1xuICogICAvLyBHZXQgdGhlIHJlYXNvbiBhcyB0byB3aHkgdGhlIHZhbHVlIGlzIG5vdCBhIEpTT04gUmVmZXJlbmNlIHNvIHlvdSBjYW4gZml4L3JlcG9ydCBpdFxuICogICB0cnkge1xuICogICAgIGlzUmVmKHN0ciwgdHJ1ZSk7XG4gKiAgIH0gY2F0Y2ggKGVycikge1xuICogICAgIC8vIFRoZSBlcnJvciBtZXNzYWdlIGNvbnRhaW5zIHRoZSBkZXRhaWxzIGFzIHRvIHdoeSB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEgSlNPTiBSZWZlcmVuY2VcbiAqICAgfVxuICogfVxuICovXG5mdW5jdGlvbiBpc1JlZiAob2JqLCB0aHJvd1dpdGhEZXRhaWxzKSB7XG4gIHJldHVybiBpc1JlZkxpa2Uob2JqLCB0aHJvd1dpdGhEZXRhaWxzKSAmJiBnZXRSZWZEZXRhaWxzKG9iaiwgdGhyb3dXaXRoRGV0YWlscykudHlwZSAhPT0gJ2ludmFsaWQnO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cyBmb3IgdGhlIHByb3ZpZGVkIEpTT04gUG9pbnRlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHRyIC0gVGhlIEpTT04gUG9pbnRlclxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gdGhlIHBhdGggc2VnbWVudHNcbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHByb3ZpZGVkIGBwdHJgIGFyZ3VtZW50IGlzIG5vdCBhIEpTT04gUG9pbnRlclxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMucGF0aEZyb21QdHJcbiAqL1xuZnVuY3Rpb24gcGF0aEZyb21QdHIgKHB0cikge1xuICBpZiAoIWlzUHRyKHB0cikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3B0ciBtdXN0IGJlIGEgSlNPTiBQb2ludGVyJyk7XG4gIH1cblxuICB2YXIgc2VnbWVudHMgPSBwdHIuc3BsaXQoJy8nKTtcblxuICAvLyBSZW1vdmUgdGhlIGZpcnN0IHNlZ21lbnRcbiAgc2VnbWVudHMuc2hpZnQoKTtcblxuICByZXR1cm4gZGVjb2RlUGF0aChzZWdtZW50cyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gUG9pbnRlciBmb3IgdGhlIHByb3ZpZGVkIGFycmF5IG9mIHBhdGggc2VnbWVudHMuXG4gKlxuICogKipOb3RlOioqIElmIGEgcGF0aCBzZWdtZW50IGluIGBwYXRoYCBpcyBub3QgYSBgU3RyaW5nYCwgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gb25lIHVzaW5nIGBKU09OLnN0cmluZ2lmeWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIFRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoYXNoUHJlZml4PXRydWVdIC0gV2hldGhlciBvciBub3QgY3JlYXRlIGEgaGFzaC1wcmVmaXhlZCBKU09OIFBvaW50ZXJcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgY29ycmVzcG9uZGluZyBKU09OIFBvaW50ZXJcbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGBwYXRoYCBhcmd1bWVudCBpcyBub3QgYW4gYXJyYXlcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLnBhdGhUb1B0clxuICovXG5mdW5jdGlvbiBwYXRoVG9QdHIgKHBhdGgsIGhhc2hQcmVmaXgpIHtcbiAgaWYgKCFpc1R5cGUocGF0aCwgJ0FycmF5JykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBBcnJheScpO1xuICB9XG5cbiAgLy8gRW5jb2RlIGVhY2ggc2VnbWVudCBhbmQgcmV0dXJuXG4gIHJldHVybiAoaGFzaFByZWZpeCAhPT0gZmFsc2UgPyAnIycgOiAnJykgKyAocGF0aC5sZW5ndGggPiAwID8gJy8nIDogJycpICsgZW5jb2RlUGF0aChwYXRoKS5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogRmluZHMgSlNPTiBSZWZlcmVuY2VzIGRlZmluZWQgd2l0aGluIHRoZSBwcm92aWRlZCBhcnJheS9vYmplY3QgYW5kIHJlc29sdmVzIHRoZW0uXG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IG9iaiAtIFRoZSBzdHJ1Y3R1cmUgdG8gZmluZCBKU09OIFJlZmVyZW5jZXMgd2l0aGluXG4gKiBAcGFyYW0ge21vZHVsZTpKc29uUmVmc35Kc29uUmVmc09wdGlvbnN9IFtvcHRpb25zXSAtIFRoZSBKc29uUmVmcyBvcHRpb25zXG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGEge0BsaW5rIG1vZHVsZTpKc29uUmVmc35SZXNvbHZlZFJlZnNSZXN1bHRzfSBhbmQgcmVqZWN0cyB3aXRoIGFuXG4gKiBgRXJyb3JgIHdoZW4gdGhlIGlucHV0IGFyZ3VtZW50cyBmYWlsIHZhbGlkYXRpb24sIHdoZW4gYG9wdGlvbnMuc3ViRG9jUGF0aGAgcG9pbnRzIHRvIGFuIGludmFsaWQgbG9jYXRpb24gb3Igd2hlblxuICogIHRoZSBsb2NhdGlvbiBhcmd1bWVudCBwb2ludHMgdG8gYW4gdW5sb2FkYWJsZSByZXNvdXJjZVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6SnNvblJlZnMucmVzb2x2ZVJlZnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSB0aGF0IG9ubHkgcmVzb2x2ZXMgcmVsYXRpdmUgYW5kIHJlbW90ZSByZWZlcmVuY2VzXG4gKiBKc29uUmVmcy5yZXNvbHZlUmVmcyhzd2FnZ2VyT2JqLCB7XG4gKiAgICAgZmlsdGVyOiBbJ3JlbGF0aXZlJywgJ3JlbW90ZSddXG4gKiAgIH0pXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAqICAgICAgLy8gRG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3BvbnNlXG4gKiAgICAgIC8vXG4gKiAgICAgIC8vIHJlcy5yZWZzOiBKU09OIFJlZmVyZW5jZSBsb2NhdGlvbnMgYW5kIGRldGFpbHNcbiAqICAgICAgLy8gcmVzLnJlc29sdmVkOiBUaGUgZG9jdW1lbnQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgSlNPTiBSZWZlcmVuY2VzIHJlc29sdmVkXG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmxvZyhlcnIuc3RhY2spO1xuICogICB9KTtcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlZnMgKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYWxsVGFza3MgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVmFsaWRhdGUgdGhlIHByb3ZpZGVkIGRvY3VtZW50XG4gICAgICBpZiAoIWlzVHlwZShvYmosICdBcnJheScpICYmICFpc1R5cGUob2JqLCAnT2JqZWN0JykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb2JqIG11c3QgYmUgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0IGZvciBvcHRpb25zXG4gICAgICBpZiAoaXNUeXBlKG9wdGlvbnMsICdVbmRlZmluZWQnKSkge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIG9wdGlvbnNcbiAgICAgIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9KVxuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEZpbmQgYWxsIHJlZmVyZW5jZXMgcmVjdXJzaXZlbHlcbiAgICAgIHJldHVybiBmaW5kQWxsUmVmcyhvYmosIG9wdGlvbnMsIFtdLCBbXSwge30pO1xuICAgIH0pXG4gICAgLnRoZW4oZnVuY3Rpb24gKGFSZWZzKSB7XG4gICAgICB2YXIgY2xvbmVkID0gY2xvbmUob2JqKTtcbiAgICAgIHZhciBwYXJlbnRMb2NhdGlvbnMgPSBbXTtcblxuICAgICAgLy8gUmVwbGFjZSByZW1vdGUgcmVmZXJlbmNlcyBmaXJzdFxuICAgICAgT2JqZWN0LmtleXMoYVJlZnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgICAgICB2YXIgcmVmRGV0YWlscyA9IGFSZWZzW3JlZlB0cl07XG4gICAgICAgIHZhciB2YWx1ZTtcblxuICAgICAgICBpZiAocmVtb3RlVHlwZXMuaW5kZXhPZihyZWZEZXRhaWxzLnR5cGUpID4gLTEpIHtcbiAgICAgICAgICBpZiAoaXNUeXBlKHJlZkRldGFpbHMuZXJyb3IsICdVbmRlZmluZWQnKSAmJiByZWZEZXRhaWxzLnR5cGUgIT09ICdpbnZhbGlkJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBmaW5kVmFsdWUocmVmRGV0YWlscy52YWx1ZSB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmRGV0YWlscy51cmlEZXRhaWxzLmZyYWdtZW50ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aEZyb21QdHIocmVmRGV0YWlscy51cmlEZXRhaWxzLmZyYWdtZW50KSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pO1xuICAgICAgICAgICAgICBzZXRWYWx1ZShjbG9uZWQsIHBhdGhGcm9tUHRyKHJlZlB0ciksIHZhbHVlKTtcblxuICAgICAgICAgICAgICAvLyBUaGUgcmVmZXJlbmNlIGluY2x1ZGVzIGEgZnJhZ21lbnQgc28gdXBkYXRlIHRoZSByZWZlcmVuY2UgZGV0YWlsc1xuICAgICAgICAgICAgICBpZiAoIWlzVHlwZShyZWZEZXRhaWxzLnZhbHVlLCAnVW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICByZWZEZXRhaWxzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmRGV0YWlscy5jaXJjdWxhcikge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHZhbHVlIGFuZCBpdCdzIGNpcmN1bGFyLCBzZXQgaXRzIHZhbHVlIHRvIGFuIGVtcHR5IHZhbHVlXG4gICAgICAgICAgICAgICAgcmVmRGV0YWlscy52YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgcmVmRGV0YWlscy5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICByZWZEZXRhaWxzLm1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWZEZXRhaWxzLm1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlcGxhY2UgbG9jYWwgcmVmZXJlbmNlc1xuICAgICAgT2JqZWN0LmtleXMoYVJlZnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgICAgICB2YXIgcmVmRGV0YWlscyA9IGFSZWZzW3JlZlB0cl07XG4gICAgICAgIHZhciBwYXJlbnRMb2NhdGlvbiA9IHJlZkRldGFpbHMucGFyZW50TG9jYXRpb247XG4gICAgICAgIHZhciB2YWx1ZTtcblxuICAgICAgICAvLyBSZWNvcmQgdGhhdCB0aGlzIHJlZmVyZW5jZSBoYXMgcGFyZW50IGxvY2F0aW9uIGRldGFpbHMgc28gd2UgY2FuIGNsZWFuIGl0IHVwIGxhdGVyXG4gICAgICAgIGlmICghaXNUeXBlKHBhcmVudExvY2F0aW9uLCAnVW5kZWZpbmVkJykgJiYgcGFyZW50TG9jYXRpb25zLmluZGV4T2YocmVmUHRyKSA9PT0gLTEpIHtcbiAgICAgICAgICBwYXJlbnRMb2NhdGlvbnMucHVzaChyZWZQdHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbW90ZVR5cGVzLmluZGV4T2YocmVmRGV0YWlscy50eXBlKSA9PT0gLTEgJiYgcmVmRGV0YWlscy50eXBlICE9PSAnaW52YWxpZCcpIHtcbiAgICAgICAgICBpZiAoaXNUeXBlKHJlZkRldGFpbHMuZXJyb3IsICdVbmRlZmluZWQnKSkge1xuICAgICAgICAgICAgaWYgKHJlZlB0ci5pbmRleE9mKHJlZkRldGFpbHMudXJpKSA+IC0xKSB7XG4gICAgICAgICAgICAgIHJlZkRldGFpbHMuY2lyY3VsYXIgPSB0cnVlO1xuICAgICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCFpc1R5cGUocGFyZW50TG9jYXRpb24sICdVbmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSByZWZlcmVuY2VkIHZhbHVlIGZyb20gdGhlIHJlbW90ZSBkb2N1bWVudCBmaXJzdFxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmluZFZhbHVlKGZpbmRWYWx1ZShjbG9uZWQsIHBhdGhGcm9tUHRyKHBhcmVudExvY2F0aW9uKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmRGV0YWlscy51cmlEZXRhaWxzLmZyYWdtZW50ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhGcm9tUHRyKHJlZkRldGFpbHMudXJpRGV0YWlscy5mcmFnbWVudCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10sIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChpc1R5cGUodmFsdWUsICdVbmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZmluZFZhbHVlKGNsb25lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZEZXRhaWxzLnVyaURldGFpbHMuZnJhZ21lbnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhGcm9tUHRyKHJlZkRldGFpbHMudXJpRGV0YWlscy5mcmFnbWVudCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2V0VmFsdWUoY2xvbmVkLCBwYXRoRnJvbVB0cihyZWZQdHIpLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgcmVmRGV0YWlscy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIHJlZkRldGFpbHMuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgcmVmRGV0YWlscy5taXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVmRGV0YWlscy5taXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBSZW1vdmUgYWxsIHBhcmVudExvY2F0aW9uIHZhbHVlc1xuICAgICAgcGFyZW50TG9jYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHJlZlB0cikge1xuICAgICAgICBkZWxldGUgYVJlZnNbcmVmUHRyXS5wYXJlbnRMb2NhdGlvbjtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWZzOiBhUmVmcyxcbiAgICAgICAgcmVzb2x2ZWQ6IGNsb25lZFxuICAgICAgfTtcbiAgICB9KTtcblxuICByZXR1cm4gYWxsVGFza3M7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgSlNPTiBSZWZlcmVuY2VzIGRlZmluZWQgd2l0aGluIHRoZSBkb2N1bWVudCBhdCB0aGUgcHJvdmlkZWQgbG9jYXRpb24uXG4gKlxuICogVGhpcyBBUEkgaXMgaWRlbnRpY2FsIHRvIHtAbGluayBtb2R1bGU6SnNvblJlZnMucmVzb2x2ZVJlZnN9IGV4Y2VwdCB0aGlzIEFQSSB3aWxsIHJldHJpZXZlIGEgcmVtb3RlIGRvY3VtZW50IGFuZCB0aGVuXG4gKiByZXR1cm4gdGhlIHJlc3VsdCBvZiB7QGxpbmsgbW9kdWxlOkpzb25SZWZzLnJlc29sdmVSZWZzfSBvbiB0aGUgcmV0cmlldmVkIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiAtIFRoZSBsb2NhdGlvbiB0byByZXRyaWV2ZSAqKENhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSwganVzdCBtYWtlIHN1cmUgeW91IGxvb2sgYXQgdGhlXG4gKiB7QGxpbmsgbW9kdWxlOkpzb25SZWZzfkpzb25SZWZzT3B0aW9uc3xvcHRpb25zIGRvY3VtZW50YXRpb259IHRvIHNlZSBob3cgcmVsYXRpdmUgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZC4pKlxuICogQHBhcmFtIHttb2R1bGU6SnNvblJlZnN+SnNvblJlZnNPcHRpb25zfSBbb3B0aW9uc10gLSBUaGUgSnNvblJlZnMgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhIHtAbGluayBtb2R1bGU6SnNvblJlZnN+UmV0cmlldmVkUmVzb2x2ZWRSZWZzUmVzdWx0c30gYW5kIHJlamVjdHMgd2l0aCBhblxuICogYEVycm9yYCB3aGVuIHRoZSBpbnB1dCBhcmd1bWVudHMgZmFpbCB2YWxpZGF0aW9uLCB3aGVuIGBvcHRpb25zLnN1YkRvY1BhdGhgIHBvaW50cyB0byBhbiBpbnZhbGlkIGxvY2F0aW9uIG9yIHdoZW5cbiAqICB0aGUgbG9jYXRpb24gYXJndW1lbnQgcG9pbnRzIHRvIGFuIHVubG9hZGFibGUgcmVzb3VyY2VcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOkpzb25SZWZzLnJlc29sdmVSZWZzQXRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSB0aGF0IGxvYWRzIGEgSlNPTiBkb2N1bWVudCAoTm8gb3B0aW9ucy5sb2FkZXJPcHRpb25zLnByb2Nlc3NDb250ZW50IHJlcXVpcmVkKSBhbmQgcmVzb2x2ZXMgYWxsIHJlZmVyZW5jZXNcbiAqIEpzb25SZWZzLnJlc29sdmVSZWZzQXQoJy4vc3dhZ2dlci5qc29uJylcbiAqICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICogICAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzcG9uc2VcbiAqICAgICAgLy9cbiAqICAgICAgLy8gcmVzLnJlZnM6IEpTT04gUmVmZXJlbmNlIGxvY2F0aW9ucyBhbmQgZGV0YWlsc1xuICogICAgICAvLyByZXMucmVzb2x2ZWQ6IFRoZSBkb2N1bWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBKU09OIFJlZmVyZW5jZXMgcmVzb2x2ZWRcbiAqICAgICAgLy8gcmVzLnZhbHVlOiBUaGUgcmV0cmlldmVkIGRvY3VtZW50XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmxvZyhlcnIuc3RhY2spO1xuICogICB9KTtcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlZnNBdCAobG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgdmFyIGFsbFRhc2tzID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgYWxsVGFza3MgPSBhbGxUYXNrc1xuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjT3B0aW9ucztcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAgICBpZiAoIWlzVHlwZShsb2NhdGlvbiwgJ1N0cmluZycpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2xvY2F0aW9uIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRlZmF1bHQgZm9yIG9wdGlvbnNcbiAgICAgIGlmIChpc1R5cGUob3B0aW9ucywgJ1VuZGVmaW5lZCcpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgb3B0aW9ucyAoRG9pbmcgdGhpcyBoZXJlIGZvciBhIHF1aWNrKVxuICAgICAgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICBjT3B0aW9ucyA9IGNsb25lKG9wdGlvbnMpO1xuXG4gICAgICAvLyBDb21iaW5lIHRoZSBsb2NhdGlvbiBhbmQgdGhlIG9wdGlvbmFsIHJlbGF0aXZlIGJhc2VcbiAgICAgIGxvY2F0aW9uID0gY29tYmluZVVSSXMob3B0aW9ucy5yZWxhdGl2ZUJhc2UsIGxvY2F0aW9uKTtcblxuICAgICAgLy8gU2V0IHRoZSBuZXcgcmVsYXRpdmUgcmVmZXJlbmNlIGxvY2F0aW9uXG4gICAgICBjT3B0aW9ucy5yZWxhdGl2ZUJhc2UgPSBsb2NhdGlvbi5zdWJzdHJpbmcoMCwgbG9jYXRpb24ubGFzdEluZGV4T2YoJy8nKSk7XG5cbiAgICAgIHJldHVybiBnZXRSZW1vdGVEb2N1bWVudChsb2NhdGlvbiwgY09wdGlvbnMpO1xuICAgIH0pXG4gICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgcmV0dXJuIHJlc29sdmVSZWZzKHJlcywgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlczIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVmczogcmVzMi5yZWZzLFxuICAgICAgICAgICAgcmVzb2x2ZWQ6IHJlczIucmVzb2x2ZWQsXG4gICAgICAgICAgICB2YWx1ZTogcmVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGFsbFRhc2tzO1xufVxuXG4vKiBFeHBvcnQgdGhlIG1vZHVsZSBtZW1iZXJzICovXG5tb2R1bGUuZXhwb3J0cy5jbGVhckNhY2hlID0gY2xlYXJDYWNoZTtcbm1vZHVsZS5leHBvcnRzLmRlY29kZVBhdGggPSBkZWNvZGVQYXRoO1xubW9kdWxlLmV4cG9ydHMuZW5jb2RlUGF0aCA9IGVuY29kZVBhdGg7XG5tb2R1bGUuZXhwb3J0cy5maW5kUmVmcyA9IGZpbmRSZWZzO1xubW9kdWxlLmV4cG9ydHMuZmluZFJlZnNBdCA9IGZpbmRSZWZzQXQ7XG5tb2R1bGUuZXhwb3J0cy5nZXRSZWZEZXRhaWxzID0gZ2V0UmVmRGV0YWlscztcbm1vZHVsZS5leHBvcnRzLmlzUHRyID0gaXNQdHI7XG5tb2R1bGUuZXhwb3J0cy5pc1JlZiA9IGlzUmVmO1xubW9kdWxlLmV4cG9ydHMucGF0aEZyb21QdHIgPSBwYXRoRnJvbVB0cjtcbm1vZHVsZS5leHBvcnRzLnBhdGhUb1B0ciA9IHBhdGhUb1B0cjtcbm1vZHVsZS5leHBvcnRzLnJlc29sdmVSZWZzID0gcmVzb2x2ZVJlZnM7XG5tb2R1bGUuZXhwb3J0cy5yZXNvbHZlUmVmc0F0ID0gcmVzb2x2ZVJlZnNBdDtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuL3V0aWwvY29udGFpbmVyJyksXHJcbiAgICB0cmF2ZXJzZSA9IHJlcXVpcmUoJy4vdXRpbC90cmF2ZXJzZScpLFxyXG4gICAgZm9ybWF0cyA9IHJlcXVpcmUoJy4vdXRpbC9mb3JtYXRzJyksXHJcbiAgICByYW5kb20gPSByZXF1aXJlKCcuL3V0aWwvcmFuZG9tJyksXHJcbiAgICBtZXJnZSA9IHJlcXVpcmUoJy4vdXRpbC9tZXJnZScpO1xyXG5cclxudmFyIGRlcmVmID0gcmVxdWlyZSgnZGVyZWYnKTtcclxuXHJcbmZ1bmN0aW9uIGlzS2V5KHByb3ApIHtcclxuICByZXR1cm4gcHJvcCA9PT0gJ2VudW0nIHx8IHByb3AgPT09ICdyZXF1aXJlZCcgfHwgcHJvcCA9PT0gJ2RlZmluaXRpb25zJztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGUoc2NoZW1hLCByZWZzLCBleCkge1xyXG4gIHZhciAkID0gZGVyZWYoKTtcclxuXHJcbiAgdHJ5IHtcclxuICAgIHZhciBtYXggPSAxMDA7XHJcblxyXG4gICAgcmV0dXJuIHRyYXZlcnNlKCQoc2NoZW1hLCByZWZzLCBleCksIFtdLCBmdW5jdGlvbiByZWR1Y2Uoc3ViKSB7XHJcbiAgICAgIGlmICghbWF4KSB7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi4kcmVmO1xyXG4gICAgICAgIGRlbGV0ZSBzdWIub25lT2Y7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi5hbnlPZjtcclxuICAgICAgICBkZWxldGUgc3ViLmFsbE9mO1xyXG4gICAgICAgIHJldHVybiBzdWI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygc3ViLiRyZWYgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdmFyIGlkID0gc3ViLiRyZWY7XHJcblxyXG4gICAgICAgIGRlbGV0ZSBzdWIuJHJlZjtcclxuXHJcbiAgICAgICAgbWF4LS07XHJcblxyXG4gICAgICAgIG1lcmdlKHN1YiwgJC51dGlsLmZpbmRCeVJlZihpZCwgJC5yZWZzKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1Yi5hbGxPZikpIHtcclxuICAgICAgICB2YXIgc2NoZW1hcyA9IHN1Yi5hbGxPZjtcclxuXHJcbiAgICAgICAgZGVsZXRlIHN1Yi5hbGxPZjtcclxuXHJcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgb25seSBjYXNlIHdoZXJlIGFsbCBzdWItc2NoZW1hc1xyXG4gICAgICAgIC8vIG11c3QgYmUgcmVzb2x2ZWQgYmVmb3JlIGFueSBtZXJnZVxyXG4gICAgICAgIHNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgICBtZXJnZShzdWIsIHJlZHVjZShzKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1Yi5vbmVPZiB8fCBzdWIuYW55T2YpKSB7XHJcbiAgICAgICAgdmFyIG1peCA9IHN1Yi5vbmVPZiB8fCBzdWIuYW55T2Y7XHJcblxyXG4gICAgICAgIGRlbGV0ZSBzdWIuYW55T2Y7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi5vbmVPZjtcclxuXHJcbiAgICAgICAgbWVyZ2Uoc3ViLCByYW5kb20ucGljayhtaXgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yICh2YXIgcHJvcCBpbiBzdWIpIHtcclxuICAgICAgICBpZiAoKEFycmF5LmlzQXJyYXkoc3ViW3Byb3BdKSB8fCB0eXBlb2Ygc3ViW3Byb3BdID09PSAnb2JqZWN0JykgJiYgIWlzS2V5KHByb3ApKSB7XHJcbiAgICAgICAgICBzdWJbcHJvcF0gPSByZWR1Y2Uoc3ViW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzdWI7XHJcbiAgICB9KTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBpZiAoZS5wYXRoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UgKyAnIGluICcgKyAnLycgKyBlLnBhdGguam9pbignLycpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5nZW5lcmF0ZS5mb3JtYXRzID0gZm9ybWF0cztcclxuZ2VuZXJhdGUuZXh0ZW5kID0gY29udGFpbmVyLnNldDtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGU7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciByYW5kb20gPSByZXF1aXJlKCcuLi91dGlsL3JhbmRvbScpLFxyXG4gICAgdHJhdmVyc2UgPSByZXF1aXJlKCcuLi91dGlsL3RyYXZlcnNlJyksXHJcbiAgICBoYXNQcm9wcyA9IHJlcXVpcmUoJy4uL3V0aWwvaGFzLXByb3BzJyk7XHJcblxyXG52YXIgUGFyc2VFcnJvciA9IHJlcXVpcmUoJy4uL3V0aWwvZXJyb3InKTtcclxuXHJcbmZ1bmN0aW9uIHVuaXF1ZShwYXRoLCBpdGVtcywgdmFsdWUsIHNhbXBsZSwgcmVzb2x2ZSkge1xyXG4gIHZhciB0bXAgPSBbXSxcclxuICAgICAgc2VlbiA9IFtdO1xyXG5cclxuICBmdW5jdGlvbiB3YWxrKG9iaikge1xyXG4gICAgdmFyIGpzb24gPSBKU09OLnN0cmluZ2lmeShvYmopO1xyXG5cclxuICAgIGlmIChzZWVuLmluZGV4T2YoanNvbikgPT09IC0xKSB7XHJcbiAgICAgIHNlZW4ucHVzaChqc29uKTtcclxuICAgICAgdG1wLnB1c2gob2JqKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGl0ZW1zLmZvckVhY2god2Fsayk7XHJcblxyXG4gIC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgc29sdXRpb24/XHJcbiAgdmFyIGxpbWl0ID0gMTAwO1xyXG5cclxuICB3aGlsZSAodG1wLmxlbmd0aCAhPT0gaXRlbXMubGVuZ3RoKSB7XHJcbiAgICB3YWxrKHRyYXZlcnNlKHZhbHVlLml0ZW1zIHx8IHNhbXBsZSwgcGF0aCwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIGlmICghbGltaXQtLSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB0bXA7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsdWUsIHBhdGgsIHJlc29sdmUpIHtcclxuICB2YXIgaXRlbXMgPSBbXTtcclxuXHJcbiAgaWYgKCEodmFsdWUuaXRlbXMgfHwgdmFsdWUuYWRkaXRpb25hbEl0ZW1zKSkge1xyXG4gICAgaWYgKGhhc1Byb3BzKHZhbHVlLCAnbWluSXRlbXMnLCAnbWF4SXRlbXMnLCAndW5pcXVlSXRlbXMnKSkge1xyXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcignbWlzc2luZyBpdGVtcyBmb3IgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgcGF0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuaXRlbXMpKSB7XHJcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShpdGVtcywgdmFsdWUuaXRlbXMubWFwKGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xyXG4gICAgICByZXR1cm4gdHJhdmVyc2UoaXRlbSwgcGF0aC5jb25jYXQoWydpdGVtcycsIGtleV0pLCByZXNvbHZlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHZhciBsZW5ndGggPSByYW5kb20odmFsdWUubWluSXRlbXMsIHZhbHVlLm1heEl0ZW1zLCAxLCA1KSxcclxuICAgICAgc2FtcGxlID0gdHlwZW9mIHZhbHVlLmFkZGl0aW9uYWxJdGVtcyA9PT0gJ29iamVjdCcgPyB2YWx1ZS5hZGRpdGlvbmFsSXRlbXMgOiB7fTtcclxuXHJcbiAgZm9yICh2YXIgY3VycmVudCA9IGl0ZW1zLmxlbmd0aDsgY3VycmVudCA8IGxlbmd0aDsgY3VycmVudCArPSAxKSB7XHJcbiAgICBpdGVtcy5wdXNoKHRyYXZlcnNlKHZhbHVlLml0ZW1zIHx8IHNhbXBsZSwgcGF0aC5jb25jYXQoWydpdGVtcycsIGN1cnJlbnRdKSwgcmVzb2x2ZSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLnVuaXF1ZUl0ZW1zKSB7XHJcbiAgICByZXR1cm4gdW5pcXVlKHBhdGguY29uY2F0KFsnaXRlbXMnXSksIGl0ZW1zLCB2YWx1ZSwgc2FtcGxlLCByZXNvbHZlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBpdGVtcztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gTWF0aC5yYW5kb20oKSA+IDAuNTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIG51bWJlciA9IHJlcXVpcmUoJy4vbnVtYmVyJyk7XHJcblxyXG4vLyBUaGUgYGludGVnZXJgIHR5cGUgaXMganVzdCBhIHdyYXBwZXIgZm9yIHRoZSBgbnVtYmVyYCB0eXBlLiBUaGUgYG51bWJlcmAgdHlwZVxyXG4vLyByZXR1cm5zIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGFuZCBgaW50ZWdlcmAgdHlwZSB0cnVuY2F0ZXMgdGhlIGZyYWN0aW9uXHJcbi8vIHBhcnQsIGxlYXZpbmcgdGhlIHJlc3VsdCBhcyBhbiBpbnRlZ2VyLlxyXG4vL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgdmFsdWUuaGFzUHJlY2lzaW9uID0gZmFsc2U7XHJcbiAgdmFyIGdlbmVyYXRlZCA9IG51bWJlcih2YWx1ZSk7XHJcbiAgLy8gd2hldGhlciB0aGUgZ2VuZXJhdGVkIG51bWJlciBpcyBwb3NpdGl2ZSBvciBuZWdhdGl2ZSwgbmVlZCB0byB1c2UgZWl0aGVyXHJcbiAgLy8gZmxvb3IgKHBvc2l0aXZlKSBvciBjZWlsIChuZWdhdGl2ZSkgZnVuY3Rpb24gdG8gZ2V0IHJpZCBvZiB0aGUgZnJhY3Rpb25cclxuICByZXR1cm4gZ2VuZXJhdGVkID4gMCA/IE1hdGguZmxvb3IoZ2VuZXJhdGVkKSA6IE1hdGguY2VpbChnZW5lcmF0ZWQpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiBudWxsO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTUlOX0lOVEVHRVIgPSAtMTAwMDAwMDAwLFxyXG4gICAgTUFYX0lOVEVHRVIgPSAxMDAwMDAwMDA7XHJcblxyXG52YXIgc3RyaW5nID0gcmVxdWlyZSgnLi9zdHJpbmcnKSxcclxuICAgIHJhbmRvbSA9IHJlcXVpcmUoJy4uL3V0aWwvcmFuZG9tJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgaWYgKHZhbHVlLmZha2VyIHx8IHZhbHVlLmNoYW5jZSkge1xyXG4gICAgcmV0dXJuIHN0cmluZyh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICB2YXIgbWluID0gdHlwZW9mIHZhbHVlLm1pbmltdW0gPT09ICd1bmRlZmluZWQnID8gTUlOX0lOVEVHRVIgOiB2YWx1ZS5taW5pbXVtLFxyXG4gICAgICBtYXggPSB0eXBlb2YgdmFsdWUubWF4aW11bSA9PT0gJ3VuZGVmaW5lZCcgPyBNQVhfSU5URUdFUiA6IHZhbHVlLm1heGltdW07XHJcblxyXG4gIGlmICh2YWx1ZS5leGNsdXNpdmVNaW5pbXVtICYmIHZhbHVlLm1pbmltdW0pIHtcclxuICAgIG1pbiArPSAxO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLmV4Y2x1c2l2ZU1heGltdW0gJiYgdmFsdWUubWF4aW11bSkge1xyXG4gICAgbWF4IC09IDE7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUubXVsdGlwbGVPZikge1xyXG4gICAgdmFyIGJhc2UgPSByYW5kb20oTWF0aC5mbG9vcihtaW4gLyB2YWx1ZS5tdWx0aXBsZU9mKSwgTWF0aC5mbG9vcihtYXggLyB2YWx1ZS5tdWx0aXBsZU9mKSkgKiB2YWx1ZS5tdWx0aXBsZU9mO1xyXG5cclxuICAgIHdoaWxlIChiYXNlIDwgbWluKSB7XHJcbiAgICAgIGJhc2UgKz0gdmFsdWUubXVsdGlwbGVPZjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYmFzZTtcclxuICB9XHJcblxyXG4gIGlmICh2YWx1ZS5oYXNQcmVjaXNpb24pIHtcclxuICAgIHJldHVybiByYW5kb20oZmFsc2UsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIHJldHVybiByYW5kb20oTWF0aC5yYW5kb20oKSA+IDAuNSwgbWluLCBtYXgpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgY29udGFpbmVyID0gcmVxdWlyZSgnLi4vdXRpbC9jb250YWluZXInKSxcclxuICAgIHJhbmRvbSA9IHJlcXVpcmUoJy4uL3V0aWwvcmFuZG9tJyksXHJcbiAgICB0cmF2ZXJzZSA9IHJlcXVpcmUoJy4uL3V0aWwvdHJhdmVyc2UnKSxcclxuICAgIGhhc1Byb3BzID0gcmVxdWlyZSgnLi4vdXRpbC9oYXMtcHJvcHMnKTtcclxuXHJcbnZhciBmYWtlciA9IGNvbnRhaW5lci5nZXQoJ2Zha2VyJyksXHJcbiAgICBSYW5kRXhwID0gY29udGFpbmVyLmdldCgncmFuZGV4cCcpLFxyXG4gICAgcmFuZGV4cCA9IFJhbmRFeHAucmFuZGV4cDtcclxuXHJcbnZhciBQYXJzZUVycm9yID0gcmVxdWlyZSgnLi4vdXRpbC9lcnJvcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWx1ZSwgcGF0aCwgcmVzb2x2ZSkge1xyXG4gIHZhciBwcm9wcyA9IHt9O1xyXG5cclxuICBpZiAoISh2YWx1ZS5wcm9wZXJ0aWVzIHx8IHZhbHVlLnBhdHRlcm5Qcm9wZXJ0aWVzIHx8IHZhbHVlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSkge1xyXG4gICAgaWYgKGhhc1Byb3BzKHZhbHVlLCAnbWluUHJvcGVydGllcycsICdtYXhQcm9wZXJ0aWVzJywgJ2RlcGVuZGVuY2llcycsICdyZXF1aXJlZCcpKSB7XHJcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKCdtaXNzaW5nIHByb3BlcnRpZXMgZm9yICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSksIHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wcztcclxuICB9XHJcblxyXG4gIHZhciByZXFQcm9wcyA9IHZhbHVlLnJlcXVpcmVkIHx8IFtdLFxyXG4gICAgICBhbGxQcm9wcyA9IHZhbHVlLnByb3BlcnRpZXMgPyBPYmplY3Qua2V5cyh2YWx1ZS5wcm9wZXJ0aWVzKSA6IFtdO1xyXG5cclxuICByZXFQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgaWYgKHZhbHVlLnByb3BlcnRpZXMgJiYgdmFsdWUucHJvcGVydGllc1trZXldKSB7XHJcbiAgICAgIHByb3BzW2tleV0gPSB2YWx1ZS5wcm9wZXJ0aWVzW2tleV07XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHZhciBvcHRQcm9wcyA9IGFsbFByb3BzLmZpbHRlcihmdW5jdGlvbihwcm9wKSB7XHJcbiAgICByZXR1cm4gcmVxUHJvcHMuaW5kZXhPZihwcm9wKSA9PT0gLTE7XHJcbiAgfSk7XHJcblxyXG4gIGlmICh2YWx1ZS5wYXR0ZXJuUHJvcGVydGllcykge1xyXG4gICAgb3B0UHJvcHMgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KG9wdFByb3BzLCBPYmplY3Qua2V5cyh2YWx1ZS5wYXR0ZXJuUHJvcGVydGllcykpO1xyXG4gIH1cclxuXHJcbiAgdmFyIGxlbmd0aCA9IHJhbmRvbSh2YWx1ZS5taW5Qcm9wZXJ0aWVzLCB2YWx1ZS5tYXhQcm9wZXJ0aWVzLCAwLCBvcHRQcm9wcy5sZW5ndGgpO1xyXG5cclxuICByYW5kb20uc2h1ZmZsZShvcHRQcm9wcykuc2xpY2UoMCwgbGVuZ3RoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgaWYgKHZhbHVlLnByb3BlcnRpZXMgJiYgdmFsdWUucHJvcGVydGllc1trZXldKSB7XHJcbiAgICAgIHByb3BzW2tleV0gPSB2YWx1ZS5wcm9wZXJ0aWVzW2tleV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcm9wc1tyYW5kZXhwKGtleSldID0gdmFsdWUucGF0dGVyblByb3BlcnRpZXNba2V5XTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdmFyIGN1cnJlbnQgPSBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoLFxyXG4gICAgICBzYW1wbGUgPSB0eXBlb2YgdmFsdWUuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09ICdvYmplY3QnID8gdmFsdWUuYWRkaXRpb25hbFByb3BlcnRpZXMgOiB7fTtcclxuXHJcbiAgaWYgKGN1cnJlbnQgPCBsZW5ndGgpIHtcclxuICAgIGZha2VyLmxvcmVtLndvcmRzKGxlbmd0aCAtIGN1cnJlbnQpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgIHByb3BzW2tleSArIHJhbmRleHAoJ1xcXFx3ezEsMTB9JyldID0gc2FtcGxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJhdmVyc2UocHJvcHMsIHBhdGguY29uY2F0KFsncHJvcGVydGllcyddKSwgcmVzb2x2ZSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuLi91dGlsL2NvbnRhaW5lcicpO1xyXG5cclxudmFyIGZha2VyID0gY29udGFpbmVyLmdldCgnZmFrZXInKSxcclxuICAgIGNoYW5jZSA9IGNvbnRhaW5lci5nZXQoJ2NoYW5jZScpLFxyXG4gICAgUmFuZEV4cCA9IGNvbnRhaW5lci5nZXQoJ3JhbmRleHAnKSxcclxuICAgIHJhbmRleHAgPSBSYW5kRXhwLnJhbmRleHA7XHJcblxyXG52YXIgcmFuZG9tID0gcmVxdWlyZSgnLi4vdXRpbC9yYW5kb20nKSxcclxuICAgIGZvcm1hdHMgPSByZXF1aXJlKCcuLi91dGlsL2Zvcm1hdHMnKTtcclxuXHJcbnZhciByZWdleHBzID0ge1xyXG4gIGVtYWlsOiAnW2EtekEtWlxcXFxkXVthLXpBLVpcXFxcZC1dezEsMTN9W2EtekEtWlxcXFxkXUB7aG9zdG5hbWV9JyxcclxuICBob3N0bmFtZTogJ1thLXpBLVpdezEsMzN9XFxcXC5bYS16XXsyLDR9JyxcclxuICBpcHY2OiAnW2FiY2RlZlxcXFxkXXs0fSg6W2FiY2RlZlxcXFxkXXs0fSl7N30nLFxyXG4gIHVyaTogJ1thLXpBLVpdW2EtekEtWjAtOSstLl0qJ1xyXG59O1xyXG5cclxuZnVuY3Rpb24gZ2V0KG9iaiwga2V5KSB7XHJcbiAgdmFyIHBhcnRzID0ga2V5LnNwbGl0KCcuJyk7XHJcblxyXG4gIHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcclxuICAgIHZhciBwcm9wID0gcGFydHMuc2hpZnQoKTtcclxuXHJcbiAgICBpZiAoIW9ialtwcm9wXSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBvYmogPSBvYmpbcHJvcF07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZSh2YWx1ZSkge1xyXG4gIGlmICh2YWx1ZS51c2UpIHtcclxuICAgIHZhciBhcmdzID0gW10sXHJcbiAgICAgICAgcGF0aCA9IHZhbHVlLmtleTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHBhdGggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHBhdGggPSBPYmplY3Qua2V5cyhwYXRoKVswXTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmtleVtwYXRoXSkpIHtcclxuICAgICAgICBhcmdzID0gdmFsdWUua2V5W3BhdGhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFyZ3MucHVzaCh2YWx1ZS5rZXlbcGF0aF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGdlbiA9IGdldCh2YWx1ZS5nZW4sIHBhdGgpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgZ2VuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biAnICsgdmFsdWUudXNlICsgJy1nZW5lcmF0b3IgZm9yICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZS5rZXkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ2VuLmFwcGx5KHZhbHVlLmdlbiwgYXJncyk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2ggKHZhbHVlLmZvcm1hdCkge1xyXG4gICAgY2FzZSAnZGF0ZS10aW1lJzpcclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHJhbmRvbSgwLCAxMDAwMDAwMDAwMDAwMDApKS50b0lTT1N0cmluZygpO1xyXG5cclxuICAgIGNhc2UgJ2VtYWlsJzpcclxuICAgIGNhc2UgJ2hvc3RuYW1lJzpcclxuICAgIGNhc2UgJ2lwdjYnOlxyXG4gICAgY2FzZSAndXJpJzpcclxuICAgICAgcmV0dXJuIHJhbmRleHAocmVnZXhwc1t2YWx1ZS5mb3JtYXRdKS5yZXBsYWNlKC9cXHsoXFx3KylcXH0vLCBmdW5jdGlvbihtYXRjaGVzLCBrZXkpIHtcclxuICAgICAgICByZXR1cm4gcmFuZGV4cChyZWdleHBzW2tleV0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjYXNlICdpcHY0JzpcclxuICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXS5tYXAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHJhbmRvbSgwLCAyNTUpO1xyXG4gICAgICB9KS5qb2luKCcuJyk7XHJcblxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgdmFyIGNhbGxiYWNrID0gZm9ybWF0cyh2YWx1ZS5mb3JtYXQpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBnZW5lcmF0b3IgZm9yICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZS5mb3JtYXQpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGdlbmVyYXRvcnMgPSB7XHJcbiAgICAgICAgZmFrZXI6IGZha2VyLFxyXG4gICAgICAgIGNoYW5jZTogY2hhbmNlLFxyXG4gICAgICAgIHJhbmRleHA6IHJhbmRleHBcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiBjYWxsYmFjayhnZW5lcmF0b3JzLCB2YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgaWYgKHZhbHVlLmZha2VyIHx8IHZhbHVlLmNoYW5jZSkge1xyXG4gICAgcmV0dXJuIGdlbmVyYXRlKHtcclxuICAgICAgdXNlOiB2YWx1ZS5mYWtlciA/ICdmYWtlcicgOiAnY2hhbmNlJyxcclxuICAgICAgZ2VuOiB2YWx1ZS5mYWtlciA/IGZha2VyIDogY2hhbmNlLFxyXG4gICAgICBrZXk6IHZhbHVlLmZha2VyIHx8IHZhbHVlLmNoYW5jZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUuZm9ybWF0KSB7XHJcbiAgICByZXR1cm4gZ2VuZXJhdGUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLnBhdHRlcm4pIHtcclxuICAgIHJldHVybiByYW5kZXhwKHZhbHVlLnBhdHRlcm4pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLm1pbkxlbmd0aCB8fCB2YWx1ZS5tYXhMZW5ndGgpIHtcclxuICAgIHZhciBtaW4gPSBNYXRoLm1heCgwLCB2YWx1ZS5taW5MZW5ndGggfHwgMCksXHJcbiAgICAgICAgbWF4ID0gcmFuZG9tKG1pbiwgdmFsdWUubWF4TGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gcmFuZGV4cCgnLnsnICsgbWluICsgJywnICsgbWF4ICsgJ30nKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmYWtlci5sb3JlbS53b3JkcyhyYW5kb20oMSwgNSkpLmpvaW4oJyAnKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy8gc3RhdGljIHJlcXVpcmVzIC0gaGFuZGxlIGJvdGggaW5pdGlhbCBkZXBlbmRlbmN5IGxvYWQgKGRlcHMgd2lsbCBiZSBhdmFpbGFibGVcclxuLy8gYW1vbmcgb3RoZXIgbW9kdWxlcykgYXMgd2VsbCBhcyB0aGV5IHdpbGwgYmUgaW5jbHVkZWQgYnkgYnJvd3NlcmlmeSBBU1RcclxudmFyIENoYW5jZSA9IHJlcXVpcmUoJ2NoYW5jZScpO1xyXG5cclxudmFyIGNvbnRhaW5lciA9IHtcclxuICBmYWtlcjogcmVxdWlyZSgnZmFrZXInKSxcclxuICBjaGFuY2U6IG5ldyBDaGFuY2UoKSxcclxuICByYW5kZXhwOiByZXF1aXJlKCdyYW5kZXhwJylcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIHNldDogZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcclxuICAgIGlmICh0eXBlb2YgY29udGFpbmVyW25hbWVdID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1wiJyArIG5hbWUgKyAnXCIgZGVwZW5kZW5jeSBkb2VzblxcJ3QgZXhpc3QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGFpbmVyW25hbWVdID0gY2FsbGJhY2soY29udGFpbmVyW25hbWVdKTtcclxuICB9LFxyXG4gIGdldDogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIGNvbnRhaW5lcltuYW1lXTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmZ1bmN0aW9uIFBhcnNlRXJyb3IobWVzc2FnZSwgcGF0aCkge1xyXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgdGhpcy5wYXRoID0gcGF0aDtcclxuICB0aGlzLm5hbWUgPSAnUGFyc2VFcnJvcic7XHJcbn1cclxuXHJcblBhcnNlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZUVycm9yO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgcmVnaXN0cnkgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcclxuICBpZiAoY2FsbGJhY2spIHtcclxuICAgIHJlZ2lzdHJ5W25hbWVdID0gY2FsbGJhY2s7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcclxuICAgIGZvciAodmFyIG1ldGhvZCBpbiBuYW1lKSB7XHJcbiAgICAgIHJlZ2lzdHJ5W21ldGhvZF0gPSBuYW1lW21ldGhvZF07XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChuYW1lKSB7XHJcbiAgICByZXR1cm4gcmVnaXN0cnlbbmFtZV07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVnaXN0cnk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkuZmlsdGVyKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBvYmpba2V5XSAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgfSkubGVuZ3RoID4gMDtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGluZmVycmVkUHJvcGVydGllcyA9IHtcclxuICBhcnJheTogW1xyXG4gICAgJ2FkZGl0aW9uYWxJdGVtcycsXHJcbiAgICAnaXRlbXMnLFxyXG4gICAgJ21heEl0ZW1zJyxcclxuICAgICdtaW5JdGVtcycsXHJcbiAgICAndW5pcXVlSXRlbXMnXHJcbiAgXSxcclxuICBpbnRlZ2VyOiBbXHJcbiAgICAnZXhjbHVzaXZlTWF4aW11bScsXHJcbiAgICAnZXhjbHVzaXZlTWluaW11bScsXHJcbiAgICAnbWF4aW11bScsXHJcbiAgICAnbWluaW11bScsXHJcbiAgICAnbXVsdGlwbGVPZidcclxuICBdLFxyXG4gIG9iamVjdDogW1xyXG4gICAgJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyxcclxuICAgICdkZXBlbmRlbmNpZXMnLFxyXG4gICAgJ21heFByb3BlcnRpZXMnLFxyXG4gICAgJ21pblByb3BlcnRpZXMnLFxyXG4gICAgJ3BhdHRlcm5Qcm9wZXJ0aWVzJyxcclxuICAgICdwcm9wZXJ0aWVzJyxcclxuICAgICdyZXF1aXJlZCdcclxuICBdLFxyXG4gIHN0cmluZzogW1xyXG4gICAgJ21heExlbmd0aCcsXHJcbiAgICAnbWVubGVuZ3RoJyxcclxuICAgICdwYXR0ZXJuJ1xyXG4gIF1cclxufTtcclxuXHJcbnZhciBzdWJzY2hlbWFQcm9wZXJ0aWVzID0gW1xyXG4gICdhZGRpdGlvbmFsSXRlbXMnLCAnaXRlbXMnLCAnYWRkaXRpb25hbFByb3BlcnRpZXMnLCAnZGVwZW5kZW5jaWVzJywgJ3BhdHRlcm5Qcm9wZXJ0aWVzJywgJ3Byb3BlcnRpZXMnXHJcbl07XHJcblxyXG5pbmZlcnJlZFByb3BlcnRpZXMubnVtYmVyID0gaW5mZXJyZWRQcm9wZXJ0aWVzLmludGVnZXI7XHJcblxyXG5mdW5jdGlvbiBtYXlIYXZlVHlwZShvYmosIHBhdGgsIHByb3BzKSB7XHJcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKGZ1bmN0aW9uKHByb3ApIHtcclxuICAgIC8vIERvIG5vdCBhdHRlbXB0IHRvIGluZmVyIHByb3BlcnRpZXMgbmFtZWQgYXMgc3Vic2NoZW1hIGNvbnRhaW5lcnMuICBUaGUgcmVhc29uIGZvciB0aGlzIGlzXHJcbiAgICAvLyB0aGF0IGFueSBwcm9wZXJ0eSBuYW1lIHdpdGhpbiB0aG9zZSBjb250YWluZXJzIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlIHByb3BlcnRpZXMgdXNlZCBmb3IgaW5mZXJyaW5nIG1pc3NpbmcgdHlwZVxyXG4gICAgLy8gdmFsdWVzIGNhdXNlcyB0aGUgY29udGFpbmVyIGl0c2VsZiB0byBnZXQgcHJvY2Vzc2VkIHdoaWNoIGxlYWRzIHRvIGludmFsaWQgb3V0cHV0LiAgKElzc3VlIDYyKVxyXG4gICAgaWYgKHByb3BzLmluZGV4T2YocHJvcCkgPiAtMSAmJiBzdWJzY2hlbWFQcm9wZXJ0aWVzLmluZGV4T2YocGF0aFtwYXRoLmxlbmd0aCAtIDFdKSA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfSkubGVuZ3RoID4gMDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcclxuICBmb3IgKHZhciB0eXBlIGluIGluZmVycmVkUHJvcGVydGllcykge1xyXG4gICAgaWYgKG1heUhhdmVUeXBlKG9iaiwgcGF0aCwgaW5mZXJyZWRQcm9wZXJ0aWVzW3R5cGVdKSkge1xyXG4gICAgICByZXR1cm4gdHlwZTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBtZXJnZTtcclxuXHJcbmZ1bmN0aW9uIGNsb25lKGFycikge1xyXG4gIHZhciBvdXQgPSBbXTtcclxuXHJcbiAgYXJyLmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcclxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xyXG4gICAgICBvdXRbaW5kZXhdID0gQXJyYXkuaXNBcnJheShpdGVtKSA/IGNsb25lKGl0ZW0pIDogbWVyZ2Uoe30sIGl0ZW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0W2luZGV4XSA9IGl0ZW07XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbm1lcmdlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgZm9yICh2YXIga2V5IGluIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYltrZXldICE9PSAnb2JqZWN0JyB8fCBiW2tleV0gPT09IG51bGwpIHtcclxuICAgICAgYVtrZXldID0gYltrZXldO1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJba2V5XSkpIHtcclxuICAgICAgYVtrZXldID0gKGFba2V5XSB8fCBbXSkuY29uY2F0KGNsb25lKGJba2V5XSkpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVtrZXldICE9PSAnb2JqZWN0JyB8fCBhW2tleV0gPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShhW2tleV0pKSB7XHJcbiAgICAgIGFba2V5XSA9IG1lcmdlKHt9LCBiW2tleV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYVtrZXldID0gbWVyZ2UoYVtrZXldLCBiW2tleV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGE7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIGFycmF5OiByZXF1aXJlKCcuLi90eXBlcy9hcnJheScpLFxyXG4gIGJvb2xlYW46IHJlcXVpcmUoJy4uL3R5cGVzL2Jvb2xlYW4nKSxcclxuICBpbnRlZ2VyOiByZXF1aXJlKCcuLi90eXBlcy9pbnRlZ2VyJyksXHJcbiAgbnVtYmVyOiByZXF1aXJlKCcuLi90eXBlcy9udW1iZXInKSxcclxuICBudWxsOiByZXF1aXJlKCcuLi90eXBlcy9udWxsJyksXHJcbiAgb2JqZWN0OiByZXF1aXJlKCcuLi90eXBlcy9vYmplY3QnKSxcclxuICBzdHJpbmc6IHJlcXVpcmUoJy4uL3R5cGVzL3N0cmluZycpXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuL2NvbnRhaW5lcicpO1xyXG5cclxudmFyIGZha2VyID0gY29udGFpbmVyLmdldCgnZmFrZXInKTtcclxuXHJcbnZhciByYW5kb20gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1pbiwgbWF4LCBkZWZNaW4sIGRlZk1heCkge1xyXG4gIHZhciBpc0ludGVnZXIgPSB0cnVlO1xyXG5cclxuICBpZiAodHlwZW9mIG1pbiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAvLyBub24taW50ZWdlciB2YWx1ZXNcclxuICAgIGlzSW50ZWdlciA9IG1pbjtcclxuICAgIG1pbiA9IGFyZ3VtZW50c1sxXTtcclxuICAgIG1heCA9IGFyZ3VtZW50c1syXTtcclxuICAgIGRlZk1pbiA9IGFyZ3VtZW50c1szXTtcclxuICAgIGRlZk1heCA9IGFyZ3VtZW50c1s0XTtcclxuICB9XHJcblxyXG4gIGRlZk1pbiA9IHR5cGVvZiBkZWZNaW4gPT09ICd1bmRlZmluZWQnID8gcmFuZG9tLk1JTl9OVU1CRVIgOiBkZWZNaW47XHJcbiAgZGVmTWF4ID0gdHlwZW9mIGRlZk1heCA9PT0gJ3VuZGVmaW5lZCcgPyByYW5kb20uTUFYX05VTUJFUiA6IGRlZk1heDtcclxuXHJcbiAgbWluID0gdHlwZW9mIG1pbiA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZNaW4gOiBtaW47XHJcbiAgbWF4ID0gdHlwZW9mIG1heCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZNYXggOiBtYXg7XHJcblxyXG4gIGlmIChtYXggPCBtaW4pIHtcclxuICAgIG1heCArPSBtaW47XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFrZXIucmFuZG9tLm51bWJlcih7XHJcbiAgICBtaW46IG1pbixcclxuICAgIG1heDogbWF4LFxyXG4gICAgcHJlY2lzaW9uOiBpc0ludGVnZXIgPyAxIDogTWF0aC5yYW5kb20oKVxyXG4gIH0pO1xyXG59O1xyXG5cclxucmFuZG9tLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtcclxuICB2YXIgY29weSA9IG9iai5zbGljZSgpLFxyXG4gICAgICBsZW5ndGggPSBvYmoubGVuZ3RoO1xyXG5cclxuICBmb3IgKDsgbGVuZ3RoID4gMDspIHtcclxuICAgIHZhciBrZXkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsZW5ndGgpLFxyXG4gICAgICAgIHRtcCA9IGNvcHlbLS1sZW5ndGhdO1xyXG5cclxuICAgIGNvcHlbbGVuZ3RoXSA9IGNvcHlba2V5XTtcclxuICAgIGNvcHlba2V5XSA9IHRtcDtcclxuICB9XHJcblxyXG4gIHJldHVybiBjb3B5O1xyXG59O1xyXG5cclxucmFuZG9tLnBpY2sgPSBmdW5jdGlvbihvYmopIHtcclxuICByZXR1cm4gb2JqW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG9iai5sZW5ndGgpXTtcclxufTtcclxuXHJcbnJhbmRvbS5NSU5fTlVNQkVSID0gLTEwMDtcclxucmFuZG9tLk1BWF9OVU1CRVIgPSAxMDA7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciByYW5kb20gPSByZXF1aXJlKCcuL3JhbmRvbScpO1xyXG5cclxudmFyIFBhcnNlRXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XHJcblxyXG52YXIgaW5mZXJyZWRUeXBlID0gcmVxdWlyZSgnLi9pbmZlcnJlZCcpO1xyXG5cclxudmFyIHByaW1pdGl2ZXMgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gdHJhdmVyc2Uob2JqLCBwYXRoLCByZXNvbHZlKSB7XHJcbiAgcmVzb2x2ZShvYmopO1xyXG5cclxuICB2YXIgY29weSA9IHt9O1xyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICBjb3B5ID0gW107XHJcbiAgfVxyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheShvYmouZW51bSkpIHtcclxuICAgIHJldHVybiByYW5kb20ucGljayhvYmouZW51bSk7XHJcbiAgfVxyXG5cclxuICB2YXIgdHlwZSA9IG9iai50eXBlO1xyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xyXG4gICAgdHlwZSA9IHJhbmRvbS5waWNrKHR5cGUpO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAvLyBBdHRlbXB0IHRvIGluZmVyIHRoZSB0eXBlXHJcbiAgICB0eXBlID0gaW5mZXJyZWRUeXBlKG9iaiwgcGF0aCkgfHwgdHlwZTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIGlmICghcHJpbWl0aXZlc1t0eXBlXSkge1xyXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcigndW5rbm93biBwcmltaXRpdmUgJyArIEpTT04uc3RyaW5naWZ5KHR5cGUpLCBwYXRoLmNvbmNhdChbJ3R5cGUnXSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBwcmltaXRpdmVzW3R5cGVdKG9iaiwgcGF0aCwgcmVzb2x2ZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgZS5wYXRoID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGUubWVzc2FnZSwgcGF0aCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmpbcHJvcF0gPT09ICdvYmplY3QnICYmIHByb3AgIT09ICdkZWZpbml0aW9ucycpIHtcclxuICAgICAgY29weVtwcm9wXSA9IHRyYXZlcnNlKG9ialtwcm9wXSwgcGF0aC5jb25jYXQoW3Byb3BdKSwgcmVzb2x2ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb3B5W3Byb3BdID0gb2JqW3Byb3BdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvcHk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgcHJpbWl0aXZlcyA9IHByaW1pdGl2ZXMgfHwgcmVxdWlyZSgnLi9wcmltaXRpdmVzJyk7XHJcblxyXG4gIHJldHVybiB0cmF2ZXJzZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG4iLCIvKipcbiAqIGxvZGFzaCAzLjcuMiAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RyaW5nIHBhdGhzXG4gKiBhbmQgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aEtleV0gVGhlIGtleSByZXByZXNlbnRhdGlvbiBvZiBwYXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCwgcGF0aEtleSkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhdGhLZXkgIT09IHVuZGVmaW5lZCAmJiBwYXRoS2V5IGluIHRvT2JqZWN0KG9iamVjdCkpIHtcbiAgICBwYXRoID0gW3BhdGhLZXldO1xuICB9XG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbcGF0aFtpbmRleCsrXV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gb2JqZWN0IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDogT2JqZWN0KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGUgW2xhbmd1YWdlIHR5cGVdKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDgpIG9mIGBPYmplY3RgLlxuICogKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdCgxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIC8vIEF2b2lkIGEgVjggSklUIGJ1ZyBpbiBDaHJvbWUgMTktMjAuXG4gIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwiLyoqXG4gKiBsb2Rhc2ggMy44LjEgKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2Rlcm4gbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDE1IFRoZSBEb2pvIEZvdW5kYXRpb24gPGh0dHA6Ly9kb2pvZm91bmRhdGlvbi5vcmcvPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIEF2YWlsYWJsZSB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKi9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnbG9kYXNoLmlzYXJyYXknKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxuXFxcXF18XFxcXC4pKj8pXFwyKVxcXS9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGlmIGl0J3Mgbm90IG9uZS4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkXG4gKiBmb3IgYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiAodmFsdWUgKyAnJyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBwcm9wZXJ0eSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9QYXRoKHZhbHVlKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VUb1N0cmluZyh2YWx1ZSkucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1BhdGg7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjcuMCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xudmFyIGJhc2VHZXQgPSByZXF1aXJlKCdsb2Rhc2guX2Jhc2VnZXQnKSxcbiAgICB0b1BhdGggPSByZXF1aXJlKCdsb2Rhc2guX3RvcGF0aCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIGBwYXRoYCBvbiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgdXNlZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBpZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgYHVuZGVmaW5lZGAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCB0b1BhdGgocGF0aCksIHBhdGggKyAnJyk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjAuNCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSA+IDUpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqIFVzZWQgZm9yIG5hdGl2ZSBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmpUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZm5Ub1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZywgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyogTmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0FycmF5ID0gZ2V0TmF0aXZlKEFycmF5LCAnaXNBcnJheScpO1xuXG4vKipcbiAqIFVzZWQgYXMgdGhlIFttYXhpbXVtIGxlbmd0aF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbnVtYmVyLm1heF9zYWZlX2ludGVnZXIpXG4gKiBvZiBhbiBhcnJheS1saWtlIHZhbHVlLlxuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICByZXR1cm4gaXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGFycmF5VGFnO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmkgd2hpY2ggcmV0dXJuICdmdW5jdGlvbicgZm9yIHJlZ2V4ZXNcbiAgLy8gYW5kIFNhZmFyaSA4IGVxdWl2YWxlbnRzIHdoaWNoIHJldHVybiAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgY29uc3RydWN0b3JzLlxuICByZXR1cm4gaXNPYmplY3QodmFsdWUpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGZ1bmNUYWc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlIFtsYW5ndWFnZSB0eXBlXShodHRwczovL2VzNS5naXRodWIuaW8vI3g4KSBvZiBgT2JqZWN0YC5cbiAqIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAvLyBBdm9pZCBhIFY4IEpJVCBidWcgaW4gQ2hyb21lIDE5LTIwLlxuICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIyOTEgZm9yIG1vcmUgZGV0YWlscy5cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOYXRpdmUoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYXRpdmUoXyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICByZXR1cm4gcmVJc05hdGl2ZS50ZXN0KGZuVG9TdHJpbmcuY2FsbCh2YWx1ZSkpO1xuICB9XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHJlSXNIb3N0Q3Rvci50ZXN0KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogbG9kYXNoIDMuMTAuMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiAtZCAtbyAuL2luZGV4LmpzYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG47KGZ1bmN0aW9uKCkge1xuXG4gIC8qKiBVc2VkIGFzIGEgc2FmZSByZWZlcmVuY2UgZm9yIGB1bmRlZmluZWRgIGluIHByZS1FUzUgZW52aXJvbm1lbnRzLiAqL1xuICB2YXIgdW5kZWZpbmVkO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci4gKi9cbiAgdmFyIFZFUlNJT04gPSAnMy4xMC4xJztcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB3cmFwcGVyIG1ldGFkYXRhLiAqL1xuICB2YXIgQklORF9GTEFHID0gMSxcbiAgICAgIEJJTkRfS0VZX0ZMQUcgPSAyLFxuICAgICAgQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgICBDVVJSWV9GTEFHID0gOCxcbiAgICAgIENVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICAgIFBBUlRJQUxfRkxBRyA9IDMyLFxuICAgICAgUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgICBBUllfRkxBRyA9IDEyOCxcbiAgICAgIFJFQVJHX0ZMQUcgPSAyNTY7XG5cbiAgLyoqIFVzZWQgYXMgZGVmYXVsdCBvcHRpb25zIGZvciBgXy50cnVuY2AuICovXG4gIHZhciBERUZBVUxUX1RSVU5DX0xFTkdUSCA9IDMwLFxuICAgICAgREVGQVVMVF9UUlVOQ19PTUlTU0lPTiA9ICcuLi4nO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCB3aGVuIGEgZnVuY3Rpb24gYmVjb21lcyBob3QuICovXG4gIHZhciBIT1RfQ09VTlQgPSAxNTAsXG4gICAgICBIT1RfU1BBTiA9IDE2O1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xuICB2YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuICAvKiogVXNlZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBsYXp5IGl0ZXJhdGVlcy4gKi9cbiAgdmFyIExBWllfRklMVEVSX0ZMQUcgPSAxLFxuICAgICAgTEFaWV9NQVBfRkxBRyA9IDI7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIGBUeXBlRXJyb3JgIG1lc3NhZ2UgZm9yIFwiRnVuY3Rpb25zXCIgbWV0aG9kcy4gKi9cbiAgdmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuICAvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG4gIHZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuICAvKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG4gIHZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxuICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGVtcHR5IHN0cmluZyBsaXRlcmFscyBpbiBjb21waWxlZCB0ZW1wbGF0ZSBzb3VyY2UuICovXG4gIHZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXFxiKF9fcCBcXCs9KSAnJyBcXCsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdUcmFpbGluZyA9IC8oX19lXFwoLio/XFwpfFxcYl9fdFxcKSkgXFwrXFxuJyc7L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgcmVFc2NhcGVkSHRtbCA9IC8mKD86YW1wfGx0fGd0fHF1b3R8IzM5fCM5Nik7L2csXG4gICAgICByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ2BdL2csXG4gICAgICByZUhhc0VzY2FwZWRIdG1sID0gUmVnRXhwKHJlRXNjYXBlZEh0bWwuc291cmNlKSxcbiAgICAgIHJlSGFzVW5lc2NhcGVkSHRtbCA9IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xuICB2YXIgcmVFc2NhcGUgPSAvPCUtKFtcXHNcXFNdKz8pJT4vZyxcbiAgICAgIHJlRXZhbHVhdGUgPSAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgICAgcmVJbnRlcnBvbGF0ZSA9IC88JT0oW1xcc1xcU10rPyklPi9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbiAgdmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcblxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC8sXG4gICAgICByZVByb3BOYW1lID0gL1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcblxcXFxdfFxcXFwuKSo/KVxcMilcXF0vZztcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXBhdHRlcm5zKVxuICAgKiBhbmQgdGhvc2Ugb3V0bGluZWQgYnkgW2BFc2NhcGVSZWdFeHBQYXR0ZXJuYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZXNjYXBlcmVnZXhwcGF0dGVybikuXG4gICAqL1xuICB2YXIgcmVSZWdFeHBDaGFycyA9IC9eWzohLF18W1xcXFxeJC4qKz8oKVtcXF17fXxcXC9dfCheWzAtOWEtZkEtRm5ydHV2eF0pfChbXFxuXFxyXFx1MjAyOFxcdTIwMjldKS9nLFxuICAgICAgcmVIYXNSZWdFeHBDaGFycyA9IFJlZ0V4cChyZVJlZ0V4cENoYXJzLnNvdXJjZSk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKS4gKi9cbiAgdmFyIHJlQ29tYm9NYXJrID0gL1tcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMjNdL2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLiAqL1xuICB2YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUhhc0hleFByZWZpeCA9IC9eMFt4WF0vO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpID4gNSkuICovXG4gIHZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNVaW50ID0gL15cXGQrJC87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggbGF0aW4tMSBzdXBwbGVtZW50YXJ5IGxldHRlcnMgKGV4Y2x1ZGluZyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzKS4gKi9cbiAgdmFyIHJlTGF0aW4xID0gL1tcXHhjMC1cXHhkNlxceGQ4LVxceGRlXFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZl0vZztcblxuICAvKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG4gIHZhciByZU5vTWF0Y2ggPSAvKCReKS87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggdW5lc2NhcGVkIGNoYXJhY3RlcnMgaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xuICB2YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggd29yZHMgdG8gY3JlYXRlIGNvbXBvdW5kIHdvcmRzLiAqL1xuICB2YXIgcmVXb3JkcyA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdXBwZXIgPSAnW0EtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZV0nLFxuICAgICAgICBsb3dlciA9ICdbYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXSsnO1xuXG4gICAgcmV0dXJuIFJlZ0V4cCh1cHBlciArICcrKD89JyArIHVwcGVyICsgbG93ZXIgKyAnKXwnICsgdXBwZXIgKyAnPycgKyBsb3dlciArICd8JyArIHVwcGVyICsgJyt8WzAtOV0rJywgJ2cnKTtcbiAgfSgpKTtcblxuICAvKiogVXNlZCB0byBhc3NpZ24gZGVmYXVsdCBgY29udGV4dGAgb2JqZWN0IHByb3BlcnRpZXMuICovXG4gIHZhciBjb250ZXh0UHJvcHMgPSBbXG4gICAgJ0FycmF5JywgJ0FycmF5QnVmZmVyJywgJ0RhdGUnLCAnRXJyb3InLCAnRmxvYXQzMkFycmF5JywgJ0Zsb2F0NjRBcnJheScsXG4gICAgJ0Z1bmN0aW9uJywgJ0ludDhBcnJheScsICdJbnQxNkFycmF5JywgJ0ludDMyQXJyYXknLCAnTWF0aCcsICdOdW1iZXInLFxuICAgICdPYmplY3QnLCAnUmVnRXhwJywgJ1NldCcsICdTdHJpbmcnLCAnXycsICdjbGVhclRpbWVvdXQnLCAnaXNGaW5pdGUnLFxuICAgICdwYXJzZUZsb2F0JywgJ3BhcnNlSW50JywgJ3NldFRpbWVvdXQnLCAnVHlwZUVycm9yJywgJ1VpbnQ4QXJyYXknLFxuICAgICdVaW50OENsYW1wZWRBcnJheScsICdVaW50MTZBcnJheScsICdVaW50MzJBcnJheScsICdXZWFrTWFwJ1xuICBdO1xuXG4gIC8qKiBVc2VkIHRvIG1ha2UgdGVtcGxhdGUgc291cmNlVVJMcyBlYXNpZXIgdG8gaWRlbnRpZnkuICovXG4gIHZhciB0ZW1wbGF0ZUNvdW50ZXIgPSAtMTtcblxuICAvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG4gIHZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xuICB0eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuICB0eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPSB0eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9IHR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID0gdHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzZXRUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbiAgLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbiAgdmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbiAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbiAgY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2Jvb2xUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPVxuICBjbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPVxuICBjbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG4gIGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuICAvKiogVXNlZCB0byBtYXAgbGF0aW4tMSBzdXBwbGVtZW50YXJ5IGxldHRlcnMgdG8gYmFzaWMgbGF0aW4gbGV0dGVycy4gKi9cbiAgdmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgICAnXFx4ZTAnOiAnYScsICAnXFx4ZTEnOiAnYScsICdcXHhlMic6ICdhJywgJ1xceGUzJzogJ2EnLCAnXFx4ZTQnOiAnYScsICdcXHhlNSc6ICdhJyxcbiAgICAnXFx4YzcnOiAnQycsICAnXFx4ZTcnOiAnYycsXG4gICAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAgICdcXHhjOCc6ICdFJywgICdcXHhjOSc6ICdFJywgJ1xceGNhJzogJ0UnLCAnXFx4Y2InOiAnRScsXG4gICAgJ1xceGU4JzogJ2UnLCAgJ1xceGU5JzogJ2UnLCAnXFx4ZWEnOiAnZScsICdcXHhlYic6ICdlJyxcbiAgICAnXFx4Y0MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAgICdcXHhlQyc6ICdpJywgICdcXHhlZCc6ICdpJywgJ1xceGVlJzogJ2knLCAnXFx4ZWYnOiAnaScsXG4gICAgJ1xceGQxJzogJ04nLCAgJ1xceGYxJzogJ24nLFxuICAgICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAgICdcXHhmMic6ICdvJywgICdcXHhmMyc6ICdvJywgJ1xceGY0JzogJ28nLCAnXFx4ZjUnOiAnbycsICdcXHhmNic6ICdvJywgJ1xceGY4JzogJ28nLFxuICAgICdcXHhkOSc6ICdVJywgICdcXHhkYSc6ICdVJywgJ1xceGRiJzogJ1UnLCAnXFx4ZGMnOiAnVScsXG4gICAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgICAnXFx4ZGQnOiAnWScsICAnXFx4ZmQnOiAneScsICdcXHhmZic6ICd5JyxcbiAgICAnXFx4YzYnOiAnQWUnLCAnXFx4ZTYnOiAnYWUnLFxuICAgICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICAgJ1xceGRmJzogJ3NzJ1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG4gIHZhciBodG1sRXNjYXBlcyA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmIzM5OycsXG4gICAgJ2AnOiAnJiM5NjsnXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gbWFwIEhUTUwgZW50aXRpZXMgdG8gY2hhcmFjdGVycy4gKi9cbiAgdmFyIGh0bWxVbmVzY2FwZXMgPSB7XG4gICAgJyZhbXA7JzogJyYnLFxuICAgICcmbHQ7JzogJzwnLFxuICAgICcmZ3Q7JzogJz4nLFxuICAgICcmcXVvdDsnOiAnXCInLFxuICAgICcmIzM5Oyc6IFwiJ1wiLFxuICAgICcmIzk2Oyc6ICdgJ1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIGRldGVybWluZSBpZiB2YWx1ZXMgYXJlIG9mIHRoZSBsYW5ndWFnZSB0eXBlIGBPYmplY3RgLiAqL1xuICB2YXIgb2JqZWN0VHlwZXMgPSB7XG4gICAgJ2Z1bmN0aW9uJzogdHJ1ZSxcbiAgICAnb2JqZWN0JzogdHJ1ZVxuICB9O1xuXG4gIC8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgcmVnZXhlcy4gKi9cbiAgdmFyIHJlZ2V4cEVzY2FwZXMgPSB7XG4gICAgJzAnOiAneDMwJywgJzEnOiAneDMxJywgJzInOiAneDMyJywgJzMnOiAneDMzJywgJzQnOiAneDM0JyxcbiAgICAnNSc6ICd4MzUnLCAnNic6ICd4MzYnLCAnNyc6ICd4MzcnLCAnOCc6ICd4MzgnLCAnOSc6ICd4MzknLFxuICAgICdBJzogJ3g0MScsICdCJzogJ3g0MicsICdDJzogJ3g0MycsICdEJzogJ3g0NCcsICdFJzogJ3g0NScsICdGJzogJ3g0NicsXG4gICAgJ2EnOiAneDYxJywgJ2InOiAneDYyJywgJ2MnOiAneDYzJywgJ2QnOiAneDY0JywgJ2UnOiAneDY1JywgJ2YnOiAneDY2JyxcbiAgICAnbic6ICd4NmUnLCAncic6ICd4NzInLCAndCc6ICd4NzQnLCAndSc6ICd4NzUnLCAndic6ICd4NzYnLCAneCc6ICd4NzgnXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG4gIHZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAgICdcXFxcJzogJ1xcXFwnLFxuICAgIFwiJ1wiOiBcIidcIixcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHInOiAncicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG4gIHZhciBmcmVlRXhwb3J0cyA9IG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xuICB2YXIgZnJlZU1vZHVsZSA9IG9iamVjdFR5cGVzW3R5cGVvZiBtb2R1bGVdICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xuICB2YXIgZnJlZUdsb2JhbCA9IGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUgJiYgdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCAmJiBnbG9iYWw7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbiAgdmFyIGZyZWVTZWxmID0gb2JqZWN0VHlwZXNbdHlwZW9mIHNlbGZdICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgJiYgc2VsZjtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHdpbmRvd2AuICovXG4gIHZhciBmcmVlV2luZG93ID0gb2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93ICYmIHdpbmRvdy5PYmplY3QgJiYgd2luZG93O1xuXG4gIC8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG4gIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzICYmIGZyZWVFeHBvcnRzO1xuXG4gIC8qKlxuICAgKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LlxuICAgKlxuICAgKiBUaGUgYHRoaXNgIHZhbHVlIGlzIHVzZWQgaWYgaXQncyB0aGUgZ2xvYmFsIG9iamVjdCB0byBhdm9pZCBHcmVhc2Vtb25rZXknc1xuICAgKiByZXN0cmljdGVkIGB3aW5kb3dgIG9iamVjdCwgb3RoZXJ3aXNlIHRoZSBgd2luZG93YCBvYmplY3QgaXMgdXNlZC5cbiAgICovXG4gIHZhciByb290ID0gZnJlZUdsb2JhbCB8fCAoKGZyZWVXaW5kb3cgIT09ICh0aGlzICYmIHRoaXMud2luZG93KSkgJiYgZnJlZVdpbmRvdykgfHwgZnJlZVNlbGYgfHwgdGhpcztcblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGNvbXBhcmVBc2NlbmRpbmdgIHdoaWNoIGNvbXBhcmVzIHZhbHVlcyBhbmRcbiAgICogc29ydHMgdGhlbSBpbiBhc2NlbmRpbmcgb3JkZXIgd2l0aG91dCBndWFyYW50ZWVpbmcgYSBzdGFibGUgc29ydC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGB2YWx1ZWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlQ29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgICBpZiAodmFsdWUgIT09IG90aGVyKSB7XG4gICAgICB2YXIgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgdmFsSXNVbmRlZiA9IHZhbHVlID09PSB1bmRlZmluZWQsXG4gICAgICAgICAgdmFsSXNSZWZsZXhpdmUgPSB2YWx1ZSA9PT0gdmFsdWU7XG5cbiAgICAgIHZhciBvdGhJc051bGwgPSBvdGhlciA9PT0gbnVsbCxcbiAgICAgICAgICBvdGhJc1VuZGVmID0gb3RoZXIgPT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcjtcblxuICAgICAgaWYgKCh2YWx1ZSA+IG90aGVyICYmICFvdGhJc051bGwpIHx8ICF2YWxJc1JlZmxleGl2ZSB8fFxuICAgICAgICAgICh2YWxJc051bGwgJiYgIW90aElzVW5kZWYgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgKHZhbElzVW5kZWYgJiYgb3RoSXNSZWZsZXhpdmUpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgaWYgKCh2YWx1ZSA8IG90aGVyICYmICF2YWxJc051bGwpIHx8ICFvdGhJc1JlZmxleGl2ZSB8fFxuICAgICAgICAgIChvdGhJc051bGwgJiYgIXZhbElzVW5kZWYgJiYgdmFsSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgKG90aElzVW5kZWYgJiYgdmFsSXNSZWZsZXhpdmUpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICAgKiBzdXBwb3J0IGZvciBjYWxsYmFjayBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNlYXJjaC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tUmlnaHQpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYmluYXJ5IHNlYXJjaGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2VhcmNoLlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4T2ZOYU4oYXJyYXksIGZyb21JbmRleCk7XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0Z1bmN0aW9uYCB3aXRob3V0IHN1cHBvcnQgZm9yIGVudmlyb25tZW50c1xuICAgKiB3aXRoIGluY29ycmVjdCBgdHlwZW9mYCByZXN1bHRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgLy8gQXZvaWQgYSBDaGFrcmEgSklUIGJ1ZyBpbiBjb21wYXRpYmlsaXR5IG1vZGVzIG9mIElFIDExLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvaXNzdWVzLzE2MjEgZm9yIG1vcmUgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBpZiBpdCdzIG5vdCBvbmUuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZFxuICAgKiBmb3IgYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6ICh2YWx1ZSArICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltTGVmdGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAqIG9mIGBzdHJpbmdgIHRoYXQgaXMgbm90IGZvdW5kIGluIGBjaGFyc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcnMgVGhlIGNoYXJhY3RlcnMgdG8gZmluZC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBub3QgZm91bmQgaW4gYGNoYXJzYC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYXJzTGVmdEluZGV4KHN0cmluZywgY2hhcnMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIGNoYXJzLmluZGV4T2Yoc3RyaW5nLmNoYXJBdChpbmRleCkpID4gLTEpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1SaWdodGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXJcbiAgICogb2YgYHN0cmluZ2AgdGhhdCBpcyBub3QgZm91bmQgaW4gYGNoYXJzYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFycyBUaGUgY2hhcmFjdGVycyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgbm90IGZvdW5kIGluIGBjaGFyc2AuXG4gICAqL1xuICBmdW5jdGlvbiBjaGFyc1JpZ2h0SW5kZXgoc3RyaW5nLCBjaGFycykge1xuICAgIHZhciBpbmRleCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSAmJiBjaGFycy5pbmRleE9mKHN0cmluZy5jaGFyQXQoaW5kZXgpKSA+IC0xKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnNvcnRCeWAgdG8gY29tcGFyZSB0cmFuc2Zvcm1lZCBlbGVtZW50cyBvZiBhIGNvbGxlY3Rpb24gYW5kIHN0YWJsZVxuICAgKiBzb3J0IHRoZW0gaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGBvYmplY3RgLlxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyhvYmplY3QsIG90aGVyKSB7XG4gICAgcmV0dXJuIGJhc2VDb21wYXJlQXNjZW5kaW5nKG9iamVjdC5jcml0ZXJpYSwgb3RoZXIuY3JpdGVyaWEpIHx8IChvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5zb3J0QnlPcmRlcmAgdG8gY29tcGFyZSBtdWx0aXBsZSBwcm9wZXJ0aWVzIG9mIGEgdmFsdWUgdG8gYW5vdGhlclxuICAgKiBhbmQgc3RhYmxlIHNvcnQgdGhlbS5cbiAgICpcbiAgICogSWYgYG9yZGVyc2AgaXMgdW5zcGVjaWZpZWQsIGFsbCB2YWx1ZXNzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsXG4gICAqIGEgdmFsdWUgaXMgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBpZiBpdHMgY29ycmVzcG9uZGluZyBvcmRlciBpcyBcImFzY1wiLCBhbmRcbiAgICogZGVzY2VuZGluZyBpZiBcImRlc2NcIi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbltdfSBvcmRlcnMgVGhlIG9yZGVyIHRvIHNvcnQgYnkgZm9yIGVhY2ggcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgb2JqZWN0YC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgb2JqQ3JpdGVyaWEgPSBvYmplY3QuY3JpdGVyaWEsXG4gICAgICAgIG90aENyaXRlcmlhID0gb3RoZXIuY3JpdGVyaWEsXG4gICAgICAgIGxlbmd0aCA9IG9iakNyaXRlcmlhLmxlbmd0aCxcbiAgICAgICAgb3JkZXJzTGVuZ3RoID0gb3JkZXJzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZUNvbXBhcmVBc2NlbmRpbmcob2JqQ3JpdGVyaWFbaW5kZXhdLCBvdGhDcml0ZXJpYVtpbmRleF0pO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXJzTGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3JkZXIgPSBvcmRlcnNbaW5kZXhdO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICogKChvcmRlciA9PT0gJ2FzYycgfHwgb3JkZXIgPT09IHRydWUpID8gMSA6IC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRml4ZXMgYW4gYEFycmF5I3NvcnRgIGJ1ZyBpbiB0aGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIGFwcGxpY2F0aW9uc1xuICAgIC8vIHRoYXQgY2F1c2VzIGl0LCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIHRvIHByb3ZpZGUgdGhlIHNhbWUgdmFsdWUgZm9yXG4gICAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAvL1xuICAgIC8vIFRoaXMgYWxzbyBlbnN1cmVzIGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuXG4gICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05MCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLmRlYnVycmAgdG8gY29udmVydCBsYXRpbi0xIHN1cHBsZW1lbnRhcnkgbGV0dGVycyB0byBiYXNpYyBsYXRpbiBsZXR0ZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGV0dGVyIFRoZSBtYXRjaGVkIGxldHRlciB0byBkZWJ1cnIuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIGxldHRlci5cbiAgICovXG4gIGZ1bmN0aW9uIGRlYnVyckxldHRlcihsZXR0ZXIpIHtcbiAgICByZXR1cm4gZGVidXJyZWRMZXR0ZXJzW2xldHRlcl07XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gZXNjYXBlSHRtbENoYXIoY2hyKSB7XG4gICAgcmV0dXJuIGh0bWxFc2NhcGVzW2Nocl07XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5lc2NhcGVSZWdFeHBgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgcmVnZXhlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGVhZGluZ0NoYXIgVGhlIGNhcHR1cmUgZ3JvdXAgZm9yIGEgbGVhZGluZyBjaGFyYWN0ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3aGl0ZXNwYWNlQ2hhciBUaGUgY2FwdHVyZSBncm91cCBmb3IgYSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAqL1xuICBmdW5jdGlvbiBlc2NhcGVSZWdFeHBDaGFyKGNociwgbGVhZGluZ0NoYXIsIHdoaXRlc3BhY2VDaGFyKSB7XG4gICAgaWYgKGxlYWRpbmdDaGFyKSB7XG4gICAgICBjaHIgPSByZWdleHBFc2NhcGVzW2Nocl07XG4gICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNlQ2hhcikge1xuICAgICAgY2hyID0gc3RyaW5nRXNjYXBlc1tjaHJdO1xuICAgIH1cbiAgICByZXR1cm4gJ1xcXFwnICsgY2hyO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udGVtcGxhdGVgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gZXNjYXBlU3RyaW5nQ2hhcihjaHIpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgc3RyaW5nRXNjYXBlc1tjaHJdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGBOYU5gIGlzIGZvdW5kIGluIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzZWFyY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgYE5hTmAsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4T2ZOYU4oYXJyYXksIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMCA6IC0xKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICB2YXIgb3RoZXIgPSBhcnJheVtpbmRleF07XG4gICAgICBpZiAob3RoZXIgIT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGB0cmltbWVkTGVmdEluZGV4YCBhbmQgYHRyaW1tZWRSaWdodEluZGV4YCB0byBkZXRlcm1pbmUgaWYgYVxuICAgKiBjaGFyYWN0ZXIgY29kZSBpcyB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gY2hhckNvZGUgVGhlIGNoYXJhY3RlciBjb2RlIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgY2hhckNvZGVgIGlzIHdoaXRlc3BhY2UsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGlzU3BhY2UoY2hhckNvZGUpIHtcbiAgICByZXR1cm4gKChjaGFyQ29kZSA8PSAxNjAgJiYgKGNoYXJDb2RlID49IDkgJiYgY2hhckNvZGUgPD0gMTMpIHx8IGNoYXJDb2RlID09IDMyIHx8IGNoYXJDb2RlID09IDE2MCkgfHwgY2hhckNvZGUgPT0gNTc2MCB8fCBjaGFyQ29kZSA9PSA2MTU4IHx8XG4gICAgICAoY2hhckNvZGUgPj0gODE5MiAmJiAoY2hhckNvZGUgPD0gODIwMiB8fCBjaGFyQ29kZSA9PSA4MjMyIHx8IGNoYXJDb2RlID09IDgyMzMgfHwgY2hhckNvZGUgPT0gODIzOSB8fCBjaGFyQ29kZSA9PSA4Mjg3IHx8IGNoYXJDb2RlID09IDEyMjg4IHx8IGNoYXJDb2RlID09IDY1Mjc5KSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFycmF5W2luZGV4XSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICAgIHJlc3VsdFsrK3Jlc0luZGV4XSA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFgIG9wdGltaXplZCBmb3Igc29ydGVkIGFycmF5cyB3aXRob3V0IHN1cHBvcnRcbiAgICogZm9yIGNhbGxiYWNrIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUtdmFsdWUtZnJlZSBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIHNvcnRlZFVuaXEoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIHNlZW4sXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSA6IHZhbHVlO1xuXG4gICAgICBpZiAoIWluZGV4IHx8IHNlZW4gIT09IGNvbXB1dGVkKSB7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUxlZnRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlXG4gICAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gICAqL1xuICBmdW5jdGlvbiB0cmltbWVkTGVmdEluZGV4KHN0cmluZykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgaXNTcGFjZShzdHJpbmcuY2hhckNvZGVBdChpbmRleCkpKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltUmlnaHRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAgICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gdHJpbW1lZFJpZ2h0SW5kZXgoc3RyaW5nKSB7XG4gICAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICAgIHdoaWxlIChpbmRleC0tICYmIGlzU3BhY2Uoc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpKSkge31cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy51bmVzY2FwZWAgdG8gY29udmVydCBIVE1MIGVudGl0aWVzIHRvIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIHVuZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gdW5lc2NhcGVIdG1sQ2hhcihjaHIpIHtcbiAgICByZXR1cm4gaHRtbFVuZXNjYXBlc1tjaHJdO1xuICB9XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB1c2luZyB0aGUgZ2l2ZW4gYGNvbnRleHRgIG9iamVjdC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAbWVtYmVyT2YgX1xuICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHQ9cm9vdF0gVGhlIGNvbnRleHQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYSBuZXcgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIF8ubWl4aW4oeyAnZm9vJzogXy5jb25zdGFudCgnZm9vJykgfSk7XG4gICAqXG4gICAqIHZhciBsb2Rhc2ggPSBfLnJ1bkluQ29udGV4dCgpO1xuICAgKiBsb2Rhc2gubWl4aW4oeyAnYmFyJzogbG9kYXNoLmNvbnN0YW50KCdiYXInKSB9KTtcbiAgICpcbiAgICogXy5pc0Z1bmN0aW9uKF8uZm9vKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKiBfLmlzRnVuY3Rpb24oXy5iYXIpO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKlxuICAgKiBsb2Rhc2guaXNGdW5jdGlvbihsb2Rhc2guZm9vKTtcbiAgICogLy8gPT4gZmFsc2VcbiAgICogbG9kYXNoLmlzRnVuY3Rpb24obG9kYXNoLmJhcik7XG4gICAqIC8vID0+IHRydWVcbiAgICpcbiAgICogLy8gdXNpbmcgYGNvbnRleHRgIHRvIG1vY2sgYERhdGUjZ2V0VGltZWAgdXNlIGluIGBfLm5vd2BcbiAgICogdmFyIG1vY2sgPSBfLnJ1bkluQ29udGV4dCh7XG4gICAqICAgJ0RhdGUnOiBmdW5jdGlvbigpIHtcbiAgICogICAgIHJldHVybiB7ICdnZXRUaW1lJzogZ2V0VGltZU1vY2sgfTtcbiAgICogICB9XG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBvciBjcmVhdGluZyBhIHN1cGVkLXVwIGBkZWZlcmAgaW4gTm9kZS5qc1xuICAgKiB2YXIgZGVmZXIgPSBfLnJ1bkluQ29udGV4dCh7ICdzZXRUaW1lb3V0Jzogc2V0SW1tZWRpYXRlIH0pLmRlZmVyO1xuICAgKi9cbiAgZnVuY3Rpb24gcnVuSW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICAvLyBBdm9pZCBpc3N1ZXMgd2l0aCBzb21lIEVTMyBlbnZpcm9ubWVudHMgdGhhdCBhdHRlbXB0IHRvIHVzZSB2YWx1ZXMsIG5hbWVkXG4gICAgLy8gYWZ0ZXIgYnVpbHQtaW4gY29uc3RydWN0b3JzIGxpa2UgYE9iamVjdGAsIGZvciB0aGUgY3JlYXRpb24gb2YgbGl0ZXJhbHMuXG4gICAgLy8gRVM1IGNsZWFycyB0aGlzIHVwIGJ5IHN0YXRpbmcgdGhhdCBsaXRlcmFscyBtdXN0IHVzZSBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDExLjEuNSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGNvbnRleHQgPSBjb250ZXh0ID8gXy5kZWZhdWx0cyhyb290Lk9iamVjdCgpLCBjb250ZXh0LCBfLnBpY2socm9vdCwgY29udGV4dFByb3BzKSkgOiByb290O1xuXG4gICAgLyoqIE5hdGl2ZSBjb25zdHJ1Y3RvciByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBBcnJheSA9IGNvbnRleHQuQXJyYXksXG4gICAgICAgIERhdGUgPSBjb250ZXh0LkRhdGUsXG4gICAgICAgIEVycm9yID0gY29udGV4dC5FcnJvcixcbiAgICAgICAgRnVuY3Rpb24gPSBjb250ZXh0LkZ1bmN0aW9uLFxuICAgICAgICBNYXRoID0gY29udGV4dC5NYXRoLFxuICAgICAgICBOdW1iZXIgPSBjb250ZXh0Lk51bWJlcixcbiAgICAgICAgT2JqZWN0ID0gY29udGV4dC5PYmplY3QsXG4gICAgICAgIFJlZ0V4cCA9IGNvbnRleHQuUmVnRXhwLFxuICAgICAgICBTdHJpbmcgPSBjb250ZXh0LlN0cmluZyxcbiAgICAgICAgVHlwZUVycm9yID0gY29udGV4dC5UeXBlRXJyb3I7XG5cbiAgICAvKiogVXNlZCBmb3IgbmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgICAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgICAgIHN0cmluZ1Byb3RvID0gU3RyaW5nLnByb3RvdHlwZTtcblxuICAgIC8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbiAgICB2YXIgZm5Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIC8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xuICAgIHZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4gICAgLyoqIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy4gKi9cbiAgICB2YXIgaWRDb3VudGVyID0gMDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gICAgICogb2YgdmFsdWVzLlxuICAgICAqL1xuICAgIHZhciBvYmpUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4gICAgLyoqIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYF9gIHJlZmVyZW5jZSBpbiBgXy5ub0NvbmZsaWN0YC4gKi9cbiAgICB2YXIgb2xkRGFzaCA9IHJvb3QuXztcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG4gICAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgICAgIGZuVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZSgvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csICdcXFxcJCYnKVxuICAgICAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4gICAgKTtcblxuICAgIC8qKiBOYXRpdmUgbWV0aG9kIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIEFycmF5QnVmZmVyID0gY29udGV4dC5BcnJheUJ1ZmZlcixcbiAgICAgICAgY2xlYXJUaW1lb3V0ID0gY29udGV4dC5jbGVhclRpbWVvdXQsXG4gICAgICAgIHBhcnNlRmxvYXQgPSBjb250ZXh0LnBhcnNlRmxvYXQsXG4gICAgICAgIHBvdyA9IE1hdGgucG93LFxuICAgICAgICBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLFxuICAgICAgICBTZXQgPSBnZXROYXRpdmUoY29udGV4dCwgJ1NldCcpLFxuICAgICAgICBzZXRUaW1lb3V0ID0gY29udGV4dC5zZXRUaW1lb3V0LFxuICAgICAgICBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZSxcbiAgICAgICAgVWludDhBcnJheSA9IGNvbnRleHQuVWludDhBcnJheSxcbiAgICAgICAgV2Vha01hcCA9IGdldE5hdGl2ZShjb250ZXh0LCAnV2Vha01hcCcpO1xuXG4gICAgLyogTmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbiAgICB2YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICAgICAgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpLFxuICAgICAgICBuYXRpdmVGbG9vciA9IE1hdGguZmxvb3IsXG4gICAgICAgIG5hdGl2ZUlzQXJyYXkgPSBnZXROYXRpdmUoQXJyYXksICdpc0FycmF5JyksXG4gICAgICAgIG5hdGl2ZUlzRmluaXRlID0gY29udGV4dC5pc0Zpbml0ZSxcbiAgICAgICAgbmF0aXZlS2V5cyA9IGdldE5hdGl2ZShPYmplY3QsICdrZXlzJyksXG4gICAgICAgIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgICAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbixcbiAgICAgICAgbmF0aXZlTm93ID0gZ2V0TmF0aXZlKERhdGUsICdub3cnKSxcbiAgICAgICAgbmF0aXZlUGFyc2VJbnQgPSBjb250ZXh0LnBhcnNlSW50LFxuICAgICAgICBuYXRpdmVSYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuICAgIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIGAtSW5maW5pdHlgIGFuZCBgSW5maW5pdHlgLiAqL1xuICAgIHZhciBORUdBVElWRV9JTkZJTklUWSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcbiAgICAgICAgUE9TSVRJVkVfSU5GSU5JVFkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cbiAgICAvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xuICAgIHZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NSxcbiAgICAgICAgTUFYX0FSUkFZX0lOREVYID0gTUFYX0FSUkFZX0xFTkdUSCAtIDEsXG4gICAgICAgIEhBTEZfTUFYX0FSUkFZX0xFTkdUSCA9IE1BWF9BUlJBWV9MRU5HVEggPj4+IDE7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGFzIHRoZSBbbWF4aW11bSBsZW5ndGhdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW51bWJlci5tYXhfc2FmZV9pbnRlZ2VyKVxuICAgICAqIG9mIGFuIGFycmF5LWxpa2UgdmFsdWUuXG4gICAgICovXG4gICAgdmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4gICAgLyoqIFVzZWQgdG8gc3RvcmUgZnVuY3Rpb24gbWV0YWRhdGEuICovXG4gICAgdmFyIG1ldGFNYXAgPSBXZWFrTWFwICYmIG5ldyBXZWFrTWFwO1xuXG4gICAgLyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovXG4gICAgdmFyIHJlYWxOYW1lcyA9IHt9O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBpbXBsaWNpdCBjaGFpbmluZy5cbiAgICAgKiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsIGFuZCBmdW5jdGlvbnMgY2FuXG4gICAgICogYmUgY2hhaW5lZCB0b2dldGhlci4gTWV0aG9kcyB0aGF0IHJldHJpZXZlIGEgc2luZ2xlIHZhbHVlIG9yIG1heSByZXR1cm4gYVxuICAgICAqIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiByZXR1cm5pbmcgdGhlIHVud3JhcHBlZFxuICAgICAqIHZhbHVlLiBFeHBsaWNpdCBjaGFpbmluZyBtYXkgYmUgZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuIFRoZSBleGVjdXRpb24gb2ZcbiAgICAgKiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgZXhlY3V0aW9uIGlzIGRlZmVycmVkIHVudGlsIGBfI3ZhbHVlYFxuICAgICAqIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi4gU2hvcnRjdXRcbiAgICAgKiBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHN0cmF0ZWd5IHdoaWNoIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGNhbiBoZWxwXG4gICAgICogdG8gYXZvaWQgdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGdyZWF0bHkgcmVkdWNlIHRoZVxuICAgICAqIG51bWJlciBvZiBpdGVyYXRlZSBleGVjdXRpb25zLlxuICAgICAqXG4gICAgICogQ2hhaW5pbmcgaXMgc3VwcG9ydGVkIGluIGN1c3RvbSBidWlsZHMgYXMgbG9uZyBhcyB0aGUgYF8jdmFsdWVgIG1ldGhvZCBpc1xuICAgICAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICAgICAqXG4gICAgICogSW4gYWRkaXRpb24gdG8gbG9kYXNoIG1ldGhvZHMsIHdyYXBwZXJzIGhhdmUgYEFycmF5YCBhbmQgYFN0cmluZ2AgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gICAgICogYGNvbmNhdGAsIGBqb2luYCwgYHBvcGAsIGBwdXNoYCwgYHJldmVyc2VgLCBgc2hpZnRgLCBgc2xpY2VgLCBgc29ydGAsXG4gICAgICogYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBTdHJpbmdgIG1ldGhvZHMgYXJlOlxuICAgICAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IHN1cHBvcnQgc2hvcnRjdXQgZnVzaW9uIGFyZTpcbiAgICAgKiBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wUmlnaHRXaGlsZWAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCxcbiAgICAgKiBgZmlyc3RgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGBwbHVja2AsIGByZWplY3RgLCBgcmVzdGAsIGByZXZlcnNlYCxcbiAgICAgKiBgc2xpY2VgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRvQXJyYXlgLFxuICAgICAqIGFuZCBgd2hlcmVgXG4gICAgICpcbiAgICAgKiBUaGUgY2hhaW5hYmxlIHdyYXBwZXIgbWV0aG9kcyBhcmU6XG4gICAgICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXRgLCBgYmVmb3JlYCwgYGJpbmRgLCBgYmluZEFsbGAsIGBiaW5kS2V5YCxcbiAgICAgKiBgY2FsbGJhY2tgLCBgY2hhaW5gLCBgY2h1bmtgLCBgY29tbWl0YCwgYGNvbXBhY3RgLCBgY29uY2F0YCwgYGNvbnN0YW50YCxcbiAgICAgKiBgY291bnRCeWAsIGBjcmVhdGVgLCBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCxcbiAgICAgKiBgZGVmZXJgLCBgZGVsYXlgLCBgZGlmZmVyZW5jZWAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wUmlnaHRXaGlsZWAsXG4gICAgICogYGRyb3BXaGlsZWAsIGBmaWxsYCwgYGZpbHRlcmAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCwgYGZsb3dgLCBgZmxvd1JpZ2h0YCxcbiAgICAgKiBgZm9yRWFjaGAsIGBmb3JFYWNoUmlnaHRgLCBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLFxuICAgICAqIGBmdW5jdGlvbnNgLCBgZ3JvdXBCeWAsIGBpbmRleEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludmVydGAsXG4gICAgICogYGludm9rZWAsIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsXG4gICAgICogYG1hdGNoZXNQcm9wZXJ0eWAsIGBtZW1vaXplYCwgYG1lcmdlYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsXG4gICAgICogYG1vZEFyZ3NgLCBgbmVnYXRlYCwgYG9taXRgLCBgb25jZWAsIGBwYWlyc2AsIGBwYXJ0aWFsYCwgYHBhcnRpYWxSaWdodGAsXG4gICAgICogYHBhcnRpdGlvbmAsIGBwaWNrYCwgYHBsYW50YCwgYHBsdWNrYCwgYHByb3BlcnR5YCwgYHByb3BlcnR5T2ZgLCBgcHVsbGAsXG4gICAgICogYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJlYXJnYCwgYHJlamVjdGAsIGByZW1vdmVgLCBgcmVzdGAsIGByZXN0UGFyYW1gLFxuICAgICAqIGByZXZlcnNlYCwgYHNldGAsIGBzaHVmZmxlYCwgYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNvcnRCeUFsbGAsXG4gICAgICogYHNvcnRCeU9yZGVyYCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLFxuICAgICAqIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdGltZXNgLCBgdG9BcnJheWAsIGB0b1BsYWluT2JqZWN0YCxcbiAgICAgKiBgdHJhbnNmb3JtYCwgYHVuaW9uYCwgYHVuaXFgLCBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdmFsdWVzYCxcbiAgICAgKiBgdmFsdWVzSW5gLCBgd2hlcmVgLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB6aXBgLCBgemlwT2JqZWN0YCwgYHppcFdpdGhgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICAgICAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsb25lYCwgYGNsb25lRGVlcGAsXG4gICAgICogYGRlYnVycmAsIGBlbmRzV2l0aGAsIGBlc2NhcGVgLCBgZXNjYXBlUmVnRXhwYCwgYGV2ZXJ5YCwgYGZpbmRgLCBgZmluZEluZGV4YCxcbiAgICAgKiBgZmluZEtleWAsIGBmaW5kTGFzdGAsIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpbmRXaGVyZWAsIGBmaXJzdGAsXG4gICAgICogYGZsb29yYCwgYGdldGAsIGBndGAsIGBndGVgLCBgaGFzYCwgYGlkZW50aXR5YCwgYGluY2x1ZGVzYCwgYGluZGV4T2ZgLFxuICAgICAqIGBpblJhbmdlYCwgYGlzQXJndW1lbnRzYCwgYGlzQXJyYXlgLCBgaXNCb29sZWFuYCwgYGlzRGF0ZWAsIGBpc0VsZW1lbnRgLFxuICAgICAqIGBpc0VtcHR5YCwgYGlzRXF1YWxgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAgYGlzRnVuY3Rpb25gLCBgaXNNYXRjaGAsXG4gICAgICogYGlzTmF0aXZlYCwgYGlzTmFOYCwgYGlzTnVsbGAsIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc1BsYWluT2JqZWN0YCxcbiAgICAgKiBgaXNSZWdFeHBgLCBgaXNTdHJpbmdgLCBgaXNVbmRlZmluZWRgLCBgaXNUeXBlZEFycmF5YCwgYGpvaW5gLCBga2ViYWJDYXNlYCxcbiAgICAgKiBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1pbmAsIGBub0NvbmZsaWN0YCwgYG5vb3BgLFxuICAgICAqIGBub3dgLCBgcGFkYCwgYHBhZExlZnRgLCBgcGFkUmlnaHRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLFxuICAgICAqIGByZWR1Y2VSaWdodGAsIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzaGlmdGAsIGBzaXplYCxcbiAgICAgKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkTGFzdEluZGV4YCwgYHN0YXJ0Q2FzZWAsXG4gICAgICogYHN0YXJ0c1dpdGhgLCBgc3VtYCwgYHRlbXBsYXRlYCwgYHRyaW1gLCBgdHJpbUxlZnRgLCBgdHJpbVJpZ2h0YCwgYHRydW5jYCxcbiAgICAgKiBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdmFsdWVgLCBhbmQgYHdvcmRzYFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgbWV0aG9kIGBzYW1wbGVgIHdpbGwgcmV0dXJuIGEgd3JhcHBlZCB2YWx1ZSB3aGVuIGBuYCBpcyBwcm92aWRlZCxcbiAgICAgKiBvdGhlcndpc2UgYW4gdW53cmFwcGVkIHZhbHVlIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQG5hbWUgX1xuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gICAgICpcbiAgICAgKiAvLyByZXR1cm5zIGFuIHVud3JhcHBlZCB2YWx1ZVxuICAgICAqIHdyYXBwZWQucmVkdWNlKGZ1bmN0aW9uKHRvdGFsLCBuKSB7XG4gICAgICogICByZXR1cm4gdG90YWwgKyBuO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IDZcbiAgICAgKlxuICAgICAqIC8vIHJldHVybnMgYSB3cmFwcGVkIHZhbHVlXG4gICAgICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoc3F1YXJlcyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShzcXVhcmVzLnZhbHVlKCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsb2Rhc2godmFsdWUpIHtcbiAgICAgIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX2NoYWluX18nKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnX193cmFwcGVkX18nKSkge1xuICAgICAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgYWxsIGNoYWluaW5nIHdyYXBwZXJzIGluaGVyaXQgZnJvbS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgICAgIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGNoYWluaW5nIGZvciBhbGwgd3JhcHBlciBtZXRob2RzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthY3Rpb25zPVtdXSBBY3Rpb25zIHRvIHBlZm9ybSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwsIGFjdGlvbnMpIHtcbiAgICAgIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHRoaXMuX19hY3Rpb25zX18gPSBhY3Rpb25zIHx8IFtdO1xuICAgICAgdGhpcy5fX2NoYWluX18gPSAhIWNoYWluQWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBlbnZpcm9ubWVudCBmZWF0dXJlIGZsYWdzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUgT2JqZWN0XG4gICAgICovXG4gICAgdmFyIHN1cHBvcnQgPSBsb2Rhc2guc3VwcG9ydCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAgICAgKiBlbWJlZGRlZCBSdWJ5IChFUkIpLiBDaGFuZ2UgdGhlIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2VcbiAgICAgKiBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUgT2JqZWN0XG4gICAgICovXG4gICAgbG9kYXNoLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUgUmVnRXhwXG4gICAgICAgKi9cbiAgICAgICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBjb2RlIHRvIGJlIGV2YWx1YXRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSBSZWdFeHBcbiAgICAgICAqL1xuICAgICAgJ2V2YWx1YXRlJzogcmVFdmFsdWF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSBSZWdFeHBcbiAgICAgICAqL1xuICAgICAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgKi9cbiAgICAgICd2YXJpYWJsZSc6ICcnLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gaW1wb3J0IHZhcmlhYmxlcyBpbnRvIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSBPYmplY3RcbiAgICAgICAqL1xuICAgICAgJ2ltcG9ydHMnOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICAgICAqIEB0eXBlIEZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICAnXyc6IGxvZGFzaFxuICAgICAgfVxuICAgIH07XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgICAgIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgICAgIHRoaXMuX19kaXJfXyA9IDE7XG4gICAgICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICAgICAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107XG4gICAgICB0aGlzLl9fdGFrZUNvdW50X18gPSBQT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIHRoaXMuX192aWV3c19fID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBsYXp5IHdyYXBwZXIgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbG9uZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5Q2xvbmUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO1xuICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fID0gYXJyYXlDb3B5KHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgcmVzdWx0Ll9fZGlyX18gPSB0aGlzLl9fZGlyX187XG4gICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdGhpcy5fX2ZpbHRlcmVkX187XG4gICAgICByZXN1bHQuX19pdGVyYXRlZXNfXyA9IGFycmF5Q29weSh0aGlzLl9faXRlcmF0ZWVzX18pO1xuICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSB0aGlzLl9fdGFrZUNvdW50X187XG4gICAgICByZXN1bHQuX192aWV3c19fID0gYXJyYXlDb3B5KHRoaXMuX192aWV3c19fKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5UmV2ZXJzZSgpIHtcbiAgICAgIGlmICh0aGlzLl9fZmlsdGVyZWRfXykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICByZXN1bHQuX19kaXJfXyA9IC0xO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0Ll9fZGlyX18gKj0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHRoZSB1bndyYXBwZWQgdmFsdWUgZnJvbSBpdHMgbGF6eSB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGF6eVZhbHVlKCkge1xuICAgICAgdmFyIGFycmF5ID0gdGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLFxuICAgICAgICAgIGRpciA9IHRoaXMuX19kaXJfXyxcbiAgICAgICAgICBpc0FyciA9IGlzQXJyYXkoYXJyYXkpLFxuICAgICAgICAgIGlzUmlnaHQgPSBkaXIgPCAwLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGlzQXJyID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICB2aWV3ID0gZ2V0VmlldygwLCBhcnJMZW5ndGgsIHRoaXMuX192aWV3c19fKSxcbiAgICAgICAgICBzdGFydCA9IHZpZXcuc3RhcnQsXG4gICAgICAgICAgZW5kID0gdmlldy5lbmQsXG4gICAgICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQsXG4gICAgICAgICAgaW5kZXggPSBpc1JpZ2h0ID8gZW5kIDogKHN0YXJ0IC0gMSksXG4gICAgICAgICAgaXRlcmF0ZWVzID0gdGhpcy5fX2l0ZXJhdGVlc19fLFxuICAgICAgICAgIGl0ZXJMZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICB0YWtlQ291bnQgPSBuYXRpdmVNaW4obGVuZ3RoLCB0aGlzLl9fdGFrZUNvdW50X18pO1xuXG4gICAgICBpZiAoIWlzQXJyIHx8IGFyckxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgfHwgKGFyckxlbmd0aCA9PSBsZW5ndGggJiYgdGFrZUNvdW50ID09IGxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUoKGlzUmlnaHQgJiYgaXNBcnIpID8gYXJyYXkucmV2ZXJzZSgpIDogYXJyYXksIHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlIChsZW5ndGgtLSAmJiByZXNJbmRleCA8IHRha2VDb3VudCkge1xuICAgICAgICBpbmRleCArPSBkaXI7XG5cbiAgICAgICAgdmFyIGl0ZXJJbmRleCA9IC0xLFxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpbmRleF07XG5cbiAgICAgICAgd2hpbGUgKCsraXRlckluZGV4IDwgaXRlckxlbmd0aCkge1xuICAgICAgICAgIHZhciBkYXRhID0gaXRlcmF0ZWVzW2l0ZXJJbmRleF0sXG4gICAgICAgICAgICAgIGl0ZXJhdGVlID0gZGF0YS5pdGVyYXRlZSxcbiAgICAgICAgICAgICAgdHlwZSA9IGRhdGEudHlwZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAodHlwZSA9PSBMQVpZX01BUF9GTEFHKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS92YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBuYW1lIENhY2hlXG4gICAgICogQG1lbWJlck9mIF8ubWVtb2l6ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE1hcENhY2hlKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIF8ubWVtb2l6ZS5DYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwRGVsZXRlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjYWNoZWQgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgXy5tZW1vaXplLkNhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNhY2hlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBHZXQoa2V5KSB7XG4gICAgICByZXR1cm4ga2V5ID09ICdfX3Byb3RvX18nID8gdW5kZWZpbmVkIDogdGhpcy5fX2RhdGFfX1trZXldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGNhY2hlZCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgXy5tZW1vaXplLkNhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcEhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBrZXkgIT0gJ19fcHJvdG9fXycgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9fZGF0YV9fLCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYHZhbHVlYCB0byBga2V5YCBvZiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBfLm1lbW9pemUuQ2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGNhY2hlLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGtleSAhPSAnX19wcm90b19fJykge1xuICAgICAgICB0aGlzLl9fZGF0YV9fW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQ3JlYXRlcyBhIGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlcyA/IHZhbHVlcy5sZW5ndGggOiAwO1xuXG4gICAgICB0aGlzLmRhdGEgPSB7ICdoYXNoJzogbmF0aXZlQ3JlYXRlKG51bGwpLCAnc2V0JzogbmV3IFNldCB9O1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHRoaXMucHVzaCh2YWx1ZXNbbGVuZ3RoXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gYGNhY2hlYCBtaW1pY2tpbmcgdGhlIHJldHVybiBzaWduYXR1cmUgb2ZcbiAgICAgKiBgXy5pbmRleE9mYCBieSByZXR1cm5pbmcgYDBgIGlmIHRoZSB2YWx1ZSBpcyBmb3VuZCwgZWxzZSBgLTFgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYDBgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYC0xYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYWNoZUluZGV4T2YoY2FjaGUsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IGNhY2hlLmRhdGEsXG4gICAgICAgICAgcmVzdWx0ID0gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc09iamVjdCh2YWx1ZSkpID8gZGF0YS5zZXQuaGFzKHZhbHVlKSA6IGRhdGEuaGFzaFt2YWx1ZV07XG5cbiAgICAgIHJldHVybiByZXN1bHQgPyAwIDogLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBgdmFsdWVgIHRvIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgcHVzaFxuICAgICAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhY2hlUHVzaCh2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBkYXRhLnNldC5hZGQodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5oYXNoW3ZhbHVlXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhcnJheSBqb2luaW5nIGBhcnJheWAgd2l0aCBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gam9pbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gam9pbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlDb25jYXQoYXJyYXksIG90aGVyKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgb3RoSW5kZXggPSAtMSxcbiAgICAgICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoICsgb3RoTGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK290aEluZGV4IDwgb3RoTGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleCsrXSA9IG90aGVyW290aEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5Q29weShzb3VyY2UsIGFycmF5KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gICAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAgICogY2FsbGJhY2sgc2hvcnRoYW5kcyBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheUVhY2hSaWdodChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZXZlcnlgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlFdmVyeShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmICghcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlRXh0cmVtdW1gIGZvciBhcnJheXMgd2hpY2ggaW52b2tlcyBgaXRlcmF0ZWVgXG4gICAgICogd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7Kn0gZXhWYWx1ZSBUaGUgaW5pdGlhbCBleHRyZW11bSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IsIGV4VmFsdWUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBjb21wdXRlZCA9IGV4VmFsdWUsXG4gICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZWQ7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGN1cnJlbnQgPSAraXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgIGlmIChjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKSkge1xuICAgICAgICAgIGNvbXB1dGVkID0gY3VycmVudDtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrXG4gICAgICogc2hvcnRoYW5kcyBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5yZWR1Y2VgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRGcm9tQXJyYXldIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YFxuICAgICAqICBhcyB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEZyb21BcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBpZiAoaW5pdEZyb21BcnJheSAmJiBsZW5ndGgpIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlUmlnaHRgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgICAqIGNhbGxiYWNrIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRGcm9tQXJyYXldIFNwZWNpZnkgdXNpbmcgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgXG4gICAgICogIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheVJlZHVjZVJpZ2h0KGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoaW5pdEZyb21BcnJheSAmJiBsZW5ndGgpIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVstLWxlbmd0aF07XG4gICAgICB9XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc3VtYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy4uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTdW0oYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IDA7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICByZXN1bHQgKz0gK2l0ZXJhdGVlKGFycmF5W2xlbmd0aF0pIHx8IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8uZGVmYXVsdHNgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uYXNzaWduYCB1c2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0VmFsdWUgVGhlIGRlc3RpbmF0aW9uIG9iamVjdCBwcm9wZXJ0eSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IHNvdXJjZVZhbHVlIFRoZSBzb3VyY2Ugb2JqZWN0IHByb3BlcnR5IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3NpZ25EZWZhdWx0cyhvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmplY3RWYWx1ZSA9PT0gdW5kZWZpbmVkID8gc291cmNlVmFsdWUgOiBvYmplY3RWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbmAgdXNlLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduRGVmYXVsdHNgIGV4Y2VwdCB0aGF0IGl0IGlnbm9yZXNcbiAgICAgKiBpbmhlcml0ZWQgcHJvcGVydHkgdmFsdWVzIHdoZW4gY2hlY2tpbmcgaWYgYSBwcm9wZXJ0eSBpcyBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3RWYWx1ZSBUaGUgZGVzdGluYXRpb24gb2JqZWN0IHByb3BlcnR5IHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gc291cmNlVmFsdWUgVGhlIHNvdXJjZSBvYmplY3QgcHJvcGVydHkgdmFsdWUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0IGFuZCBzb3VyY2UgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXNzaWduT3duRGVmYXVsdHMob2JqZWN0VmFsdWUsIHNvdXJjZVZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgcmV0dXJuIChvYmplY3RWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSlcbiAgICAgICAgPyBzb3VyY2VWYWx1ZVxuICAgICAgICA6IG9iamVjdFZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5hc3NpZ25gIGZvciBjdXN0b21pemluZyBhc3NpZ25lZCB2YWx1ZXMgd2l0aG91dFxuICAgICAqIHN1cHBvcnQgZm9yIGFyZ3VtZW50IGp1Z2dsaW5nLCBtdWx0aXBsZSBzb3VyY2VzLCBhbmQgYHRoaXNgIGJpbmRpbmcgYGN1c3RvbWl6ZXJgXG4gICAgICogZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXNzaWduV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcHJvcHMgPSBrZXlzKHNvdXJjZSksXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdLFxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIHJlc3VsdCA9IGN1c3RvbWl6ZXIodmFsdWUsIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKTtcblxuICAgICAgICBpZiAoKHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlc3VsdCAhPT0gdmFsdWUpIDogKHZhbHVlID09PSB2YWx1ZSkpIHx8XG4gICAgICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgICAgIG9iamVjdFtrZXldID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBhcmd1bWVudCBqdWdnbGluZyxcbiAgICAgKiBtdWx0aXBsZSBzb3VyY2VzLCBhbmQgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlID09IG51bGxcbiAgICAgICAgPyBvYmplY3RcbiAgICAgICAgOiBiYXNlQ29weShzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hdGAgd2l0aG91dCBzdXBwb3J0IGZvciBzdHJpbmcgY29sbGVjdGlvbnNcbiAgICAgKiBhbmQgaW5kaXZpZHVhbCBrZXkgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJbXXxzdHJpbmdbXX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIG9yIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwaWNrZWQgZWxlbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUF0KGNvbGxlY3Rpb24sIHByb3BzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpc05pbCA9IGNvbGxlY3Rpb24gPT0gbnVsbCxcbiAgICAgICAgICBpc0FyciA9ICFpc05pbCAmJiBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSxcbiAgICAgICAgICBsZW5ndGggPSBpc0FyciA/IGNvbGxlY3Rpb24ubGVuZ3RoIDogMCxcbiAgICAgICAgICBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShwcm9wc0xlbmd0aCk7XG5cbiAgICAgIHdoaWxlKCsraW5kZXggPCBwcm9wc0xlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuICAgICAgICBpZiAoaXNBcnIpIHtcbiAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXNJbmRleChrZXksIGxlbmd0aCkgPyBjb2xsZWN0aW9uW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGlzTmlsID8gdW5kZWZpbmVkIDogY29sbGVjdGlvbltrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGNvcHkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNvcHkoc291cmNlLCBwcm9wcywgb2JqZWN0KSB7XG4gICAgICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jYWxsYmFja2Agd2hpY2ggc3VwcG9ydHMgc3BlY2lmeWluZyB0aGVcbiAgICAgKiBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ0NvdW50XSBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDYWxsYmFjayhmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCkge1xuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgZnVuYztcbiAgICAgIGlmICh0eXBlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNBcmcgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gZnVuY1xuICAgICAgICAgIDogYmluZENhbGxiYWNrKGZ1bmMsIHRoaXNBcmcsIGFyZ0NvdW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VNYXRjaGVzKGZ1bmMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNBcmcgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHByb3BlcnR5KGZ1bmMpXG4gICAgICAgIDogYmFzZU1hdGNoZXNQcm9wZXJ0eShmdW5jLCB0aGlzQXJnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhcmd1bWVudCBqdWdnbGluZ1xuICAgICAqIGFuZCBgdGhpc2AgYmluZGluZyBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgYHZhbHVlYCBiZWxvbmdzIHRvLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0E9W11dIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQj1bXV0gQXNzb2NpYXRlcyBjbG9uZXMgd2l0aCBzb3VyY2UgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBpc0RlZXAsIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0KSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgICAgIGlmIChpc0Fycikge1xuICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgICAgcmV0dXJuIGFycmF5Q29weSh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRhZyA9IG9ialRvU3RyaW5nLmNhbGwodmFsdWUpLFxuICAgICAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWc7XG5cbiAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZU9iamVjdChpc0Z1bmMgPyB7fSA6IHZhbHVlKTtcbiAgICAgICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjbG9uZWFibGVUYWdzW3RhZ11cbiAgICAgICAgICAgID8gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKVxuICAgICAgICAgICAgOiAob2JqZWN0ID8gdmFsdWUgOiB7fSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gICAgICBzdGFja0EgfHwgKHN0YWNrQSA9IFtdKTtcbiAgICAgIHN0YWNrQiB8fCAoc3RhY2tCID0gW10pO1xuXG4gICAgICB2YXIgbGVuZ3RoID0gc3RhY2tBLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoc3RhY2tBW2xlbmd0aF0gPT0gdmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc3RhY2tCW2xlbmd0aF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFkZCB0aGUgc291cmNlIHZhbHVlIHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgYXNzb2NpYXRlIGl0IHdpdGggaXRzIGNsb25lLlxuICAgICAgc3RhY2tBLnB1c2godmFsdWUpO1xuICAgICAgc3RhY2tCLnB1c2gocmVzdWx0KTtcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIChpc0FyciA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gYmFzZUNsb25lKHN1YlZhbHVlLCBpc0RlZXAsIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrQSwgc3RhY2tCKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gICAgICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChpc09iamVjdChwcm90b3R5cGUpKSB7XG4gICAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICAgICAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQgfHwge307XG4gICAgICB9O1xuICAgIH0oKSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5kZWxheWAgYW5kIGBfLmRlZmVyYCB3aGljaCBhY2NlcHRzIGFuIGluZGV4XG4gICAgICogb2Ygd2hlcmUgdG8gc2xpY2UgdGhlIGFyZ3VtZW50cyB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYXJncyBUaGUgYXJndW1lbnRzIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsgZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOyB9LCB3YWl0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5kaWZmZXJlbmNlYCB3aGljaCBhY2NlcHRzIGEgc2luZ2xlIGFycmF5XG4gICAgICogb2YgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDAsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpbmRleE9mID0gZ2V0SW5kZXhPZigpLFxuICAgICAgICAgIGlzQ29tbW9uID0gaW5kZXhPZiA9PSBiYXNlSW5kZXhPZixcbiAgICAgICAgICBjYWNoZSA9IChpc0NvbW1vbiAmJiB2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpID8gY3JlYXRlQ2FjaGUodmFsdWVzKSA6IG51bGwsXG4gICAgICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIGluZGV4T2YgPSBjYWNoZUluZGV4T2Y7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcyA9IGNhY2hlO1xuICAgICAgfVxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG5cbiAgICAgICAgaWYgKGlzQ29tbW9uICYmIHZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXhPZih2YWx1ZXMsIHZhbHVlLCAwKSA8IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdHxzdHJpbmd9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqL1xuICAgIHZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrXG4gICAgICogc2hvcnRoYW5kcyBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fHN0cmluZ30gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICovXG4gICAgdmFyIGJhc2VFYWNoUmlnaHQgPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duUmlnaHQsIHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZXZlcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUV2ZXJ5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gISFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBleHRyZW11bSB2YWx1ZSBvZiBgY29sbGVjdGlvbmAgaW52b2tpbmcgYGl0ZXJhdGVlYCBmb3IgZWFjaCB2YWx1ZVxuICAgICAqIGluIGBjb2xsZWN0aW9uYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoIHRoZSB2YWx1ZSBpcyByYW5rZWQuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgZnVuY3Rpb24gdXNlZCB0byBjb21wYXJlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0geyp9IGV4VmFsdWUgVGhlIGluaXRpYWwgZXh0cmVtdW0gdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGV4dHJlbXVtIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFeHRyZW11bShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgY29tcGFyYXRvciwgZXhWYWx1ZSkge1xuICAgICAgdmFyIGNvbXB1dGVkID0gZXhWYWx1ZSxcbiAgICAgICAgICByZXN1bHQgPSBjb21wdXRlZDtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gK2l0ZXJhdGVlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIGlmIChjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKSB8fCAoY3VycmVudCA9PT0gZXhWYWx1ZSAmJiBjdXJyZW50ID09PSByZXN1bHQpKSB7XG4gICAgICAgICAgY29tcHV0ZWQgPSBjdXJyZW50O1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmlsbGAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogKCtzdGFydCB8fCAwKTtcbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGVuZCA9IChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiBsZW5ndGgpID8gbGVuZ3RoIDogKCtlbmQgfHwgMCk7XG4gICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICBlbmQgKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKGVuZCA+Pj4gMCk7XG4gICAgICBzdGFydCA+Pj49IDA7XG5cbiAgICAgIHdoaWxlIChzdGFydCA8IGxlbmd0aCkge1xuICAgICAgICBhcnJheVtzdGFydCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZGAsIGBfLmZpbmRMYXN0YCwgYF8uZmluZEtleWAsIGFuZCBgXy5maW5kTGFzdEtleWAsXG4gICAgICogd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFjayBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZywgd2hpY2ggaXRlcmF0ZXNcbiAgICAgKiBvdmVyIGBjb2xsZWN0aW9uYCB1c2luZyB0aGUgcHJvdmlkZWQgYGVhY2hGdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRLZXldIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBrZXkgb2YgdGhlIGZvdW5kIGVsZW1lbnRcbiAgICAgKiAgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZvdW5kIGVsZW1lbnQgb3IgaXRzIGtleSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRmluZChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jLCByZXRLZXkpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGtleSwgY29sbGVjdGlvbikpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXRLZXkgPyBrZXkgOiB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIGFkZGVkIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nXG4gICAgICogZmxhdHRlbmluZyBhbmQgc3BlY2lmeWluZyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgZmxhdHRlbmluZyB0byBhcnJheXMtbGlrZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGlzRGVlcCwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICAgICAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAgIChpc1N0cmljdCB8fCBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBpc0RlZXAsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9ySW5gIGFuZCBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXNcbiAgICAgKiBvdmVyIGBvYmplY3RgIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBpbnZva2luZyBgaXRlcmF0ZWVgIGZvclxuICAgICAqIGVhY2ggcHJvcGVydHkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseVxuICAgICAqIHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIHZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlRm9yYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXNcbiAgICAgKiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgdmFyIGJhc2VGb3JSaWdodCA9IGNyZWF0ZUJhc2VGb3IodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRm9ySW4ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25SaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICAgICAqIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRm9yT3duUmlnaHQob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VGb3JSaWdodChvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mdW5jdGlvbnNgIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXkgb2ZcbiAgICAgKiBgb2JqZWN0YCBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmaWx0ZXJlZCBmcm9tIHRob3NlIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZmlsdGVyLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGdW5jdGlvbnMob2JqZWN0LCBwcm9wcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9iamVjdFtrZXldKSkge1xuICAgICAgICAgIHJlc3VsdFsrK3Jlc0luZGV4XSA9IGtleTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0cmluZyBwYXRoc1xuICAgICAqIGFuZCBkZWZhdWx0IHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhLZXldIFRoZSBrZXkgcmVwcmVzZW50YXRpb24gb2YgcGF0aC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgsIHBhdGhLZXkpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocGF0aEtleSAhPT0gdW5kZWZpbmVkICYmIHBhdGhLZXkgaW4gdG9PYmplY3Qob2JqZWN0KSkge1xuICAgICAgICBwYXRoID0gW3BhdGhLZXldO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFtwYXRoW2luZGV4KytdXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aXRob3V0IHN1cHBvcnQgZm9yIGB0aGlzYCBiaW5kaW5nXG4gICAgICogYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmluZyB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNMb29zZV0gU3BlY2lmeSBwZXJmb3JtaW5nIHBhcnRpYWwgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQV0gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQl0gVHJhY2tzIHRyYXZlcnNlZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSB7XG4gICAgICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0KHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYmFzZUlzRXF1YWwsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICAgICAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmluZyBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzTG9vc2VdIFNwZWNpZnkgcGVyZm9ybWluZyBwYXJ0aWFsIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0E9W11dIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0I9W11dIFRyYWNrcyB0cmF2ZXJzZWQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBlcXVhbEZ1bmMsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSB7XG4gICAgICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgICAgICBvYmpUYWcgPSBhcnJheVRhZyxcbiAgICAgICAgICBvdGhUYWcgPSBhcnJheVRhZztcblxuICAgICAgaWYgKCFvYmpJc0Fycikge1xuICAgICAgICBvYmpUYWcgPSBvYmpUb1N0cmluZy5jYWxsKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmpUYWcgPT0gYXJnc1RhZykge1xuICAgICAgICAgIG9ialRhZyA9IG9iamVjdFRhZztcbiAgICAgICAgfSBlbHNlIGlmIChvYmpUYWcgIT0gb2JqZWN0VGFnKSB7XG4gICAgICAgICAgb2JqSXNBcnIgPSBpc1R5cGVkQXJyYXkob2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvdGhJc0Fycikge1xuICAgICAgICBvdGhUYWcgPSBvYmpUb1N0cmluZy5jYWxsKG90aGVyKTtcbiAgICAgICAgaWYgKG90aFRhZyA9PSBhcmdzVGFnKSB7XG4gICAgICAgICAgb3RoVGFnID0gb2JqZWN0VGFnO1xuICAgICAgICB9IGVsc2UgaWYgKG90aFRhZyAhPSBvYmplY3RUYWcpIHtcbiAgICAgICAgICBvdGhJc0FyciA9IGlzVHlwZWRBcnJheShvdGhlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgICAgIGlmIChpc1NhbWVUYWcgJiYgIShvYmpJc0FyciB8fCBvYmpJc09iaikpIHtcbiAgICAgICAgcmV0dXJuIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNMb29zZSkge1xuICAgICAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICAgICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgICAgICByZXR1cm4gZXF1YWxGdW5jKG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LCBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXIsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZGV0ZWN0aW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMgc2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jSk8uXG4gICAgICBzdGFja0EgfHwgKHN0YWNrQSA9IFtdKTtcbiAgICAgIHN0YWNrQiB8fCAoc3RhY2tCID0gW10pO1xuXG4gICAgICB2YXIgbGVuZ3RoID0gc3RhY2tBLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoc3RhY2tBW2xlbmd0aF0gPT0gb2JqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIHN0YWNrQltsZW5ndGhdID09IG90aGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBZGQgYG9iamVjdGAgYW5kIGBvdGhlcmAgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAgc3RhY2tBLnB1c2gob2JqZWN0KTtcbiAgICAgIHN0YWNrQi5wdXNoKG90aGVyKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IChvYmpJc0FyciA/IGVxdWFsQXJyYXlzIDogZXF1YWxPYmplY3RzKShvYmplY3QsIG90aGVyLCBlcXVhbEZ1bmMsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTtcblxuICAgICAgc3RhY2tBLnBvcCgpO1xuICAgICAgc3RhY2tCLnBvcCgpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2tcbiAgICAgKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmluZyBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gIWxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IHRvT2JqZWN0KG9iamVjdCk7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXG4gICAgICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgICAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWQgPyBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIGN1c3RvbWl6ZXIsIHRydWUpIDogcmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrIHNob3J0aGFuZHNcbiAgICAgKiBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2VzIG5vdCBjbG9uZSBgc291cmNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgICAgIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgICAgIHZhciBrZXkgPSBtYXRjaERhdGFbMF1bMF0sXG4gICAgICAgICAgICB2YWx1ZSA9IG1hdGNoRGF0YVswXVsxXTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gdmFsdWUgJiYgKHZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiB0b09iamVjdChvYmplY3QpKSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBiYXNlSXNNYXRjaChvYmplY3QsIG1hdGNoRGF0YSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lcyBub3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkocGF0aCksXG4gICAgICAgICAgaXNDb21tb24gPSBpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpLFxuICAgICAgICAgIHBhdGhLZXkgPSAocGF0aCArICcnKTtcblxuICAgICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXkgPSBwYXRoS2V5O1xuICAgICAgICBvYmplY3QgPSB0b09iamVjdChvYmplY3QpO1xuICAgICAgICBpZiAoKGlzQXJyIHx8ICFpc0NvbW1vbikgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICAgIG9iamVjdCA9IHBhdGgubGVuZ3RoID09IDEgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG4gICAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleSA9IGxhc3QocGF0aCk7XG4gICAgICAgICAgb2JqZWN0ID0gdG9PYmplY3Qob2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlXG4gICAgICAgICAgPyAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIG9iamVjdCkpXG4gICAgICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqZWN0W2tleV0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lcmdlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFyZ3VtZW50IGp1Z2dsaW5nLFxuICAgICAqIG11bHRpcGxlIHNvdXJjZXMsIGFuZCBgdGhpc2AgYmluZGluZyBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0E9W11dIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQj1bXV0gQXNzb2NpYXRlcyB2YWx1ZXMgd2l0aCBzb3VyY2UgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9XG4gICAgICB2YXIgaXNTcmNBcnIgPSBpc0FycmF5TGlrZShzb3VyY2UpICYmIChpc0FycmF5KHNvdXJjZSkgfHwgaXNUeXBlZEFycmF5KHNvdXJjZSkpLFxuICAgICAgICAgIHByb3BzID0gaXNTcmNBcnIgPyB1bmRlZmluZWQgOiBrZXlzKHNvdXJjZSk7XG5cbiAgICAgIGFycmF5RWFjaChwcm9wcyB8fCBzb3VyY2UsIGZ1bmN0aW9uKHNyY1ZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKHByb3BzKSB7XG4gICAgICAgICAga2V5ID0gc3JjVmFsdWU7XG4gICAgICAgICAgc3JjVmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3RMaWtlKHNyY1ZhbHVlKSkge1xuICAgICAgICAgIHN0YWNrQSB8fCAoc3RhY2tBID0gW10pO1xuICAgICAgICAgIHN0YWNrQiB8fCAoc3RhY2tCID0gW10pO1xuICAgICAgICAgIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGlzQ29tbW9uID0gcmVzdWx0ID09PSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoaXNDb21tb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHNyY1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKHJlc3VsdCAhPT0gdW5kZWZpbmVkIHx8IChpc1NyY0FyciAmJiAhKGtleSBpbiBvYmplY3QpKSkgJiZcbiAgICAgICAgICAgICAgKGlzQ29tbW9uIHx8IChyZXN1bHQgPT09IHJlc3VsdCA/IChyZXN1bHQgIT09IHZhbHVlKSA6ICh2YWx1ZSA9PT0gdmFsdWUpKSkpIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAgICAgKiByZWZlcmVuY2VzIHRvIGJlIG1lcmdlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtzdGFja0E9W11dIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3N0YWNrQj1bXV0gQXNzb2NpYXRlcyB2YWx1ZXMgd2l0aCBzb3VyY2UgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgbWVyZ2VGdW5jLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgdmFyIGxlbmd0aCA9IHN0YWNrQS5sZW5ndGgsXG4gICAgICAgICAgc3JjVmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmIChzdGFja0FbbGVuZ3RoXSA9PSBzcmNWYWx1ZSkge1xuICAgICAgICAgIG9iamVjdFtrZXldID0gc3RhY2tCW2xlbmd0aF07XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcih2YWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzQ29tbW9uID0gcmVzdWx0ID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0NvbW1vbikge1xuICAgICAgICByZXN1bHQgPSBzcmNWYWx1ZTtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKHNyY1ZhbHVlKSAmJiAoaXNBcnJheShzcmNWYWx1ZSkgfHwgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKSkpIHtcbiAgICAgICAgICByZXN1bHQgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiAoaXNBcnJheUxpa2UodmFsdWUpID8gYXJyYXlDb3B5KHZhbHVlKSA6IFtdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSBpc0FyZ3VtZW50cyh2YWx1ZSlcbiAgICAgICAgICAgID8gdG9QbGFpbk9iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgIDogKGlzUGxhaW5PYmplY3QodmFsdWUpID8gdmFsdWUgOiB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgdmFsdWUgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzIGFuZCBhc3NvY2lhdGVcbiAgICAgIC8vIGl0IHdpdGggaXRzIG1lcmdlZCB2YWx1ZS5cbiAgICAgIHN0YWNrQS5wdXNoKHNyY1ZhbHVlKTtcbiAgICAgIHN0YWNrQi5wdXNoKHJlc3VsdCk7XG5cbiAgICAgIGlmIChpc0NvbW1vbikge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgb2JqZWN0W2tleV0gPSBtZXJnZUZ1bmMocmVzdWx0LCBzcmNWYWx1ZSwgY3VzdG9taXplciwgc3RhY2tBLCBzdGFja0IpO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IHJlc3VsdCA/IChyZXN1bHQgIT09IHZhbHVlKSA6ICh2YWx1ZSA9PT0gdmFsdWUpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICAgICAgdmFyIHBhdGhLZXkgPSAocGF0aCArICcnKTtcbiAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCwgcGF0aEtleSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogaW5kZXggYXJndW1lbnRzIGFuZCBjYXB0dXJpbmcgdGhlIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXhlcyBUaGUgaW5kZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gaW5kZXhlcy5sZW5ndGggOiAwO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKGluZGV4ICE9IHByZXZpb3VzICYmIGlzSW5kZXgoaW5kZXgpKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzID0gaW5kZXg7XG4gICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmRvbWAgd2l0aG91dCBzdXBwb3J0IGZvciBhcmd1bWVudCBqdWdnbGluZ1xuICAgICAqIGFuZCByZXR1cm5pbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbWluaW11bSBwb3NzaWJsZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IFRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJhbmRvbShtaW4sIG1heCkge1xuICAgICAgcmV0dXJuIG1pbiArIG5hdGl2ZUZsb29yKG5hdGl2ZVJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZWR1Y2VgIGFuZCBgXy5yZWR1Y2VSaWdodGAgd2l0aG91dCBzdXBwb3J0XG4gICAgICogZm9yIGNhbGxiYWNrIHNob3J0aGFuZHMgYW5kIGB0aGlzYCBiaW5kaW5nLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYFxuICAgICAqIHVzaW5nIHRoZSBwcm92aWRlZCBgZWFjaEZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluaXRGcm9tQ29sbGVjdGlvbiBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBvciBsYXN0IGVsZW1lbnRcbiAgICAgKiAgb2YgYGNvbGxlY3Rpb25gIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEZyb21Db2xsZWN0aW9uLCBlYWNoRnVuYykge1xuICAgICAgZWFjaEZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gaW5pdEZyb21Db2xsZWN0aW9uXG4gICAgICAgICAgPyAoaW5pdEZyb21Db2xsZWN0aW9uID0gZmFsc2UsIHZhbHVlKVxuICAgICAgICAgIDogaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBkZXRlY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICAgICAgbWV0YU1hcC5zZXQoZnVuYywgZGF0YSk7XG4gICAgICByZXR1cm4gZnVuYztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHN0YXJ0ID0gc3RhcnQgPT0gbnVsbCA/IDAgOiAoK3N0YXJ0IHx8IDApO1xuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICAgICAgfVxuICAgICAgZW5kID0gKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IGxlbmd0aCkgPyBsZW5ndGggOiAoK2VuZCB8fCAwKTtcbiAgICAgIGlmIChlbmQgPCAwKSB7XG4gICAgICAgIGVuZCArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gICAgICBzdGFydCA+Pj49IDA7XG5cbiAgICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb21lYCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrIHNob3J0aGFuZHNcbiAgICAgKiBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiAhcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAgdG8gZGVmaW5lXG4gICAgICogdGhlIHNvcnQgb3JkZXIgb2YgYGFycmF5YCBhbmQgcmVwbGFjZXMgY3JpdGVyaWEgb2JqZWN0cyB3aXRoIHRoZWlyXG4gICAgICogY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzb3J0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBkZWZpbmUgc29ydCBvcmRlci5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgYXJyYXkuc29ydChjb21wYXJlcik7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgYXJyYXlbbGVuZ3RoXSA9IGFycmF5W2xlbmd0aF0udmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5T3JkZXJgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb25bXXxPYmplY3RbXXxzdHJpbmdbXX0gaXRlcmF0ZWVzIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW5bXX0gb3JkZXJzIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRCeU9yZGVyKGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKSB7XG4gICAgICB2YXIgY2FsbGJhY2sgPSBnZXRDYWxsYmFjaygpLFxuICAgICAgICAgIGluZGV4ID0gLTE7XG5cbiAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHsgcmV0dXJuIGNhbGxiYWNrKGl0ZXJhdGVlKTsgfSk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBiYXNlTWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciBjcml0ZXJpYSA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHsgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTsgfSk7XG4gICAgICAgIHJldHVybiB7ICdjcml0ZXJpYSc6IGNyaXRlcmlhLCAnaW5kZXgnOiArK2luZGV4LCAndmFsdWUnOiB2YWx1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBiYXNlU29ydEJ5KHJlc3VsdCwgZnVuY3Rpb24ob2JqZWN0LCBvdGhlcikge1xuICAgICAgICByZXR1cm4gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zdW1gIHdpdGhvdXQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgc2hvcnRoYW5kc1xuICAgICAqIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU3VtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHQgKz0gK2l0ZXJhdGVlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikgfHwgMDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxYCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrIHNob3J0aGFuZHNcbiAgICAgKiBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUtdmFsdWUtZnJlZSBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluZGV4T2YgPSBnZXRJbmRleE9mKCksXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGlzQ29tbW9uID0gaW5kZXhPZiA9PSBiYXNlSW5kZXhPZixcbiAgICAgICAgICBpc0xhcmdlID0gaXNDb21tb24gJiYgbGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUsXG4gICAgICAgICAgc2VlbiA9IGlzTGFyZ2UgPyBjcmVhdGVDYWNoZSgpIDogbnVsbCxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgaWYgKHNlZW4pIHtcbiAgICAgICAgaW5kZXhPZiA9IGNhY2hlSW5kZXhPZjtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTGFyZ2UgPSBmYWxzZTtcbiAgICAgICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSA6IHZhbHVlO1xuXG4gICAgICAgIGlmIChpc0NvbW1vbiAmJiB2YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBjb21wdXRlZCwgMCkgPCAwKSB7XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlIHx8IGlzTGFyZ2UpIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICAgICAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIG9mIGBwcm9wc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBvYmplY3RbcHJvcHNbaW5kZXhdXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZHJvcFJpZ2h0V2hpbGVgLCBgXy5kcm9wV2hpbGVgLCBgXy50YWtlUmlnaHRXaGlsZWAsXG4gICAgICogYW5kIGBfLnRha2VXaGlsZWAgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFjayBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRHJvcF0gU3BlY2lmeSBkcm9wcGluZyBlbGVtZW50cyBpbnN0ZWFkIG9mIHRha2luZyB0aGVtLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSwgaXNEcm9wLCBmcm9tUmlnaHQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMTtcblxuICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkgJiYgcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge31cbiAgICAgIHJldHVybiBpc0Ryb3BcbiAgICAgICAgPyBiYXNlU2xpY2UoYXJyYXksIChmcm9tUmlnaHQgPyAwIDogaW5kZXgpLCAoZnJvbVJpZ2h0ID8gaW5kZXggKyAxIDogbGVuZ3RoKSlcbiAgICAgICAgOiBiYXNlU2xpY2UoYXJyYXksIChmcm9tUmlnaHQgPyBpbmRleCArIDEgOiAwKSwgKGZyb21SaWdodCA/IGxlbmd0aCA6IGluZGV4KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHdyYXBwZXJWYWx1ZWAgd2hpY2ggcmV0dXJucyB0aGUgcmVzdWx0IG9mXG4gICAgICogcGVyZm9ybWluZyBhIHNlcXVlbmNlIG9mIGFjdGlvbnMgb24gdGhlIHVud3JhcHBlZCBgdmFsdWVgLCB3aGVyZSBlYWNoXG4gICAgICogc3VjY2Vzc2l2ZSBhY3Rpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhY3Rpb25zIEFjdGlvbnMgdG8gcGVmb3JtIHRvIHJlc29sdmUgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVdyYXBwZXJWYWx1ZSh2YWx1ZSwgYWN0aW9ucykge1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC52YWx1ZSgpO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYWN0aW9ucy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25zW2luZGV4XTtcbiAgICAgICAgcmVzdWx0ID0gYWN0aW9uLmZ1bmMuYXBwbHkoYWN0aW9uLnRoaXNBcmcsIGFycmF5UHVzaChbcmVzdWx0XSwgYWN0aW9uLmFyZ3MpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoIG9mIGBhcnJheWAgdG8gZGV0ZXJtaW5lIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmluYXJ5SW5kZXgoYXJyYXksIHZhbHVlLCByZXRIaWdoZXN0KSB7XG4gICAgICB2YXIgbG93ID0gMCxcbiAgICAgICAgICBoaWdoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiBsb3c7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT09IHZhbHVlICYmIGhpZ2ggPD0gSEFMRl9NQVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgICAgdmFyIG1pZCA9IChsb3cgKyBoaWdoKSA+Pj4gMSxcbiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBhcnJheVttaWRdO1xuXG4gICAgICAgICAgaWYgKChyZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKSkgJiYgY29tcHV0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoaWdoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJpbmFyeUluZGV4QnkoYXJyYXksIHZhbHVlLCBpZGVudGl0eSwgcmV0SGlnaGVzdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiaW5hcnlJbmRleGAgZXhjZXB0IHRoYXQgaXQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvclxuICAgICAqIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXIgc29ydCByYW5raW5nLiBUaGVcbiAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJpbmFyeUluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkge1xuICAgICAgdmFsdWUgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgIHZhciBsb3cgPSAwLFxuICAgICAgICAgIGhpZ2ggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDAsXG4gICAgICAgICAgdmFsSXNOYU4gPSB2YWx1ZSAhPT0gdmFsdWUsXG4gICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgdmFsSXNVbmRlZiA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgIHZhciBtaWQgPSBuYXRpdmVGbG9vcigobG93ICsgaGlnaCkgLyAyKSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUoYXJyYXlbbWlkXSksXG4gICAgICAgICAgICBpc0RlZiA9IGNvbXB1dGVkICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBpc1JlZmxleGl2ZSA9IGNvbXB1dGVkID09PSBjb21wdXRlZDtcblxuICAgICAgICBpZiAodmFsSXNOYU4pIHtcbiAgICAgICAgICB2YXIgc2V0TG93ID0gaXNSZWZsZXhpdmUgfHwgcmV0SGlnaGVzdDtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc051bGwpIHtcbiAgICAgICAgICBzZXRMb3cgPSBpc1JlZmxleGl2ZSAmJiBpc0RlZiAmJiAocmV0SGlnaGVzdCB8fCBjb21wdXRlZCAhPSBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc1VuZGVmKSB7XG4gICAgICAgICAgc2V0TG93ID0gaXNSZWZsZXhpdmUgJiYgKHJldEhpZ2hlc3QgfHwgaXNEZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXB1dGVkID09IG51bGwpIHtcbiAgICAgICAgICBzZXRMb3cgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRMb3cgPSByZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0TG93KSB7XG4gICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlTWluKGhpZ2gsIE1BWF9BUlJBWV9JTkRFWCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlQ2FsbGJhY2tgIHdoaWNoIG9ubHkgc3VwcG9ydHMgYHRoaXNgIGJpbmRpbmdcbiAgICAgKiBhbmQgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYmluZC5cbiAgICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ0NvdW50XSBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJpbmRDYWxsYmFjayhmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXNBcmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZnVuYztcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoYXJnQ291bnQpIHtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgY2FzZSA1OiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyLCBrZXksIG9iamVjdCwgc291cmNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgb3RoZXIsIGtleSwgb2JqZWN0LCBzb3VyY2UpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGdpdmVuIGFycmF5IGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1ZmZlcikge1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXIuYnl0ZUxlbmd0aCksXG4gICAgICAgICAgdmlldyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdCk7XG5cbiAgICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlcikpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAgICAgKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMpIHtcbiAgICAgIHZhciBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICAgICAgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgYXJnc0xlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpO1xuXG4gICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICB9XG4gICAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXgrK10gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICAgICAqIGlzIHRhaWxvcmVkIGZvciBgXy5wYXJ0aWFsUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycykge1xuICAgICAgdmFyIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgICAgICBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICBhcmdzTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgICAgIHJpZ2h0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGFyZ3NMZW5ndGggKyByaWdodExlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0ID0gYXJnc0luZGV4O1xuICAgICAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uY291bnRCeWAsIGBfLmdyb3VwQnlgLCBgXy5pbmRleEJ5YCwgb3IgYF8ucGFydGl0aW9uYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQga2V5cyBhbmQgdmFsdWVzIG9mIHRoZSBhY2N1bXVsYXRvciBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgYWNjdW11bGF0b3Igb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuICAgICAgICBpdGVyYXRlZSA9IGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTtcblxuICAgICAgICBpZiAoaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblxuICAgICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBjb2xsZWN0aW9uW2luZGV4XTtcbiAgICAgICAgICAgIHNldHRlcihyZXN1bHQsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pLCBjb2xsZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgc2V0dGVyKHJlc3VsdCwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pLCBjb2xsZWN0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uYXNzaWduYCwgYF8uZGVmYXVsdHNgLCBvciBgXy5tZXJnZWAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gICAgICByZXR1cm4gcmVzdFBhcmFtKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzW2xlbmd0aCAtIDJdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRoaXNBcmcgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGN1c3RvbWl6ZXIgPSBiaW5kQ2FsbGJhY2soY3VzdG9taXplciwgdGhpc0FyZywgNSk7XG4gICAgICAgICAgbGVuZ3RoIC09IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VzdG9taXplciA9IHR5cGVvZiB0aGlzQXJnID09ICdmdW5jdGlvbicgPyB0aGlzQXJnIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGxlbmd0aCAtPSAoY3VzdG9taXplciA/IDEgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgICAgIGxlbmd0aCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbiA/IGdldExlbmd0aChjb2xsZWN0aW9uKSA6IDA7XG4gICAgICAgIGlmICghaXNMZW5ndGgobGVuZ3RoKSkge1xuICAgICAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IHRvT2JqZWN0KGNvbGxlY3Rpb24pO1xuXG4gICAgICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIGBfLmZvckluYCBvciBgXy5mb3JJblJpZ2h0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgICAgIHZhciBpdGVyYWJsZSA9IHRvT2JqZWN0KG9iamVjdCksXG4gICAgICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gICAgICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcbiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIGFuZCBpbnZva2VzIGl0IHdpdGggdGhlIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQmluZFdyYXBwZXIoZnVuYywgdGhpc0FyZykge1xuICAgICAgdmFyIEN0b3IgPSBjcmVhdGVDdG9yV3JhcHBlcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYFNldGAgY2FjaGUgb2JqZWN0IHRvIG9wdGltaXplIGxpbmVhciBzZWFyY2hlcyBvZiBsYXJnZSBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gICAgICogQHJldHVybnMge251bGx8T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgY2FjaGUgb2JqZWN0IGlmIGBTZXRgIGlzIHN1cHBvcnRlZCwgZWxzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FjaGUodmFsdWVzKSB7XG4gICAgICByZXR1cm4gKG5hdGl2ZUNyZWF0ZSAmJiBTZXQpID8gbmV3IFNldENhY2hlKHZhbHVlcykgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGNvbXBvdW5kIHdvcmRzIG91dCBvZiB0aGUgd29yZHMgaW4gYVxuICAgICAqIGdpdmVuIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmUgZWFjaCB3b3JkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvdW5kZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG91bmRlcihjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGFycmF5ID0gd29yZHMoZGVidXJyKHN0cmluZykpLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gJyc7XG5cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhyZXN1bHQsIGFycmF5W2luZGV4XSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGFuIGluc3RhbmNlIG9mIGBDdG9yYCByZWdhcmRsZXNzIG9mXG4gICAgICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUN0b3JXcmFwcGVyKEN0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuXG4gICAgICAgIC8vIFNlZSBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDdG9yO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGJhc2VDcmVhdGUoQ3Rvci5wcm90b3R5cGUpLFxuICAgICAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAgICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2VzNS5naXRodWIuaW8vI3gxMy4yLjIgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmbGFnIFRoZSBjdXJyeSBiaXQgZmxhZy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyeSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDdXJyeShmbGFnKSB7XG4gICAgICBmdW5jdGlvbiBjdXJyeUZ1bmMoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChmdW5jLCBhcml0eSwgZ3VhcmQpKSB7XG4gICAgICAgICAgYXJpdHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXBwZXIoZnVuYywgZmxhZywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gY3VycnlGdW5jLnBsYWNlaG9sZGVyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJ5RnVuYztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uZGVmYXVsdHNgIG9yIGBfLmRlZmF1bHRzRGVlcGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVmYXVsdHMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdHMoYXNzaWduZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHJldHVybiByZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICB2YXIgb2JqZWN0ID0gYXJnc1swXTtcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBhcmdzLnB1c2goY3VzdG9taXplcik7XG4gICAgICAgIHJldHVybiBhc3NpZ25lci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLm1heGAgb3IgYF8ubWluYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgZnVuY3Rpb24gdXNlZCB0byBjb21wYXJlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0geyp9IGV4VmFsdWUgVGhlIGluaXRpYWwgZXh0cmVtdW0gdmFsdWUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZXh0cmVtdW0gZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRXh0cmVtdW0oY29tcGFyYXRvciwgZXhWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0aGlzQXJnICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSkge1xuICAgICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpO1xuICAgICAgICBpZiAoaXRlcmF0ZWUubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBjb2xsZWN0aW9uID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB0b0l0ZXJhYmxlKGNvbGxlY3Rpb24pO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBhcnJheUV4dHJlbXVtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBjb21wYXJhdG9yLCBleFZhbHVlKTtcbiAgICAgICAgICBpZiAoIShjb2xsZWN0aW9uLmxlbmd0aCAmJiByZXN1bHQgPT09IGV4VmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZUV4dHJlbXVtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBjb21wYXJhdG9yLCBleFZhbHVlKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZpbmRgIG9yIGBfLmZpbmRMYXN0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmluZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGaW5kKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTtcbiAgICAgICAgaWYgKGlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSBiYXNlRmluZEluZGV4KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbVJpZ2h0KTtcbiAgICAgICAgICByZXR1cm4gaW5kZXggPiAtMSA/IGNvbGxlY3Rpb25baW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlRmluZChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZpbmRJbmRleGAgb3IgYF8uZmluZExhc3RJbmRleGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZpbmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmluZEluZGV4KGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBwcmVkaWNhdGUgPSBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpO1xuICAgICAgICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tUmlnaHQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uZmluZEtleWAgb3IgYF8uZmluZExhc3RLZXlgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvYmplY3RGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZpbmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmluZEtleShvYmplY3RGdW5jKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTtcbiAgICAgICAgcmV0dXJuIGJhc2VGaW5kKG9iamVjdCwgcHJlZGljYXRlLCBvYmplY3RGdW5jLCB0cnVlKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZsb3dgIG9yIGBfLmZsb3dSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZsb3cgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmxvdyhmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIsXG4gICAgICAgICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgICAgIGxlZnRJbmRleCA9IDAsXG4gICAgICAgICAgICBmdW5jcyA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmNzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF3cmFwcGVyICYmIExvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnUgJiYgZ2V0RnVuY05hbWUoZnVuYykgPT0gJ3dyYXBwZXInKSB7XG4gICAgICAgICAgICB3cmFwcGVyID0gbmV3IExvZGFzaFdyYXBwZXIoW10sIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbmRleCA9IHdyYXBwZXIgPyAtMSA6IGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBmdW5jID0gZnVuY3NbaW5kZXhdO1xuXG4gICAgICAgICAgdmFyIGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksXG4gICAgICAgICAgICAgIGRhdGEgPSBmdW5jTmFtZSA9PSAnd3JhcHBlcicgPyBnZXREYXRhKGZ1bmMpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNMYXppYWJsZShkYXRhWzBdKSAmJiBkYXRhWzFdID09IChBUllfRkxBRyB8IENVUlJZX0ZMQUcgfCBQQVJUSUFMX0ZMQUcgfCBSRUFSR19GTEFHKSAmJiAhZGF0YVs0XS5sZW5ndGggJiYgZGF0YVs5XSA9PSAxKSB7XG4gICAgICAgICAgICB3cmFwcGVyID0gd3JhcHBlcltnZXRGdW5jTmFtZShkYXRhWzBdKV0uYXBwbHkod3JhcHBlciwgZGF0YVszXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdyYXBwZXIgPSAoZnVuYy5sZW5ndGggPT0gMSAmJiBpc0xhemlhYmxlKGZ1bmMpKSA/IHdyYXBwZXJbZnVuY05hbWVdKCkgOiB3cmFwcGVyLnRocnUoZnVuYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdO1xuXG4gICAgICAgICAgaWYgKHdyYXBwZXIgJiYgYXJncy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIucGxhbnQodmFsdWUpLnZhbHVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGxlbmd0aCA/IGZ1bmNzW2luZGV4XS5hcHBseSh0aGlzLCBhcmdzKSA6IHZhbHVlO1xuXG4gICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNzW2luZGV4XS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8uZm9yRWFjaGAgb3IgYF8uZm9yRWFjaFJpZ2h0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXJyYXlGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYW4gYXJyYXkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZWFjaCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGb3JFYWNoKGFycmF5RnVuYywgZWFjaEZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSwgdGhpc0FyZykge1xuICAgICAgICByZXR1cm4gKHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nICYmIHRoaXNBcmcgPT09IHVuZGVmaW5lZCAmJiBpc0FycmF5KGNvbGxlY3Rpb24pKVxuICAgICAgICAgID8gYXJyYXlGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKVxuICAgICAgICAgIDogZWFjaEZ1bmMoY29sbGVjdGlvbiwgYmluZENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8uZm9ySW5gIG9yIGBfLmZvckluUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvYmplY3RGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGVhY2ggZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ySW4ob2JqZWN0RnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRlZSAhPSAnZnVuY3Rpb24nIHx8IHRoaXNBcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGl0ZXJhdGVlID0gYmluZENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0RnVuYyhvYmplY3QsIGl0ZXJhdGVlLCBrZXlzSW4pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gZm9yIGBfLmZvck93bmAgb3IgYF8uZm9yT3duUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvYmplY3RGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGVhY2ggZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRm9yT3duKG9iamVjdEZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0ZWUgIT0gJ2Z1bmN0aW9uJyB8fCB0aGlzQXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpdGVyYXRlZSA9IGJpbmRDYWxsYmFjayhpdGVyYXRlZSwgdGhpc0FyZywgMyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdEZ1bmMob2JqZWN0LCBpdGVyYXRlZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8ubWFwS2V5c2Agb3IgYF8ubWFwVmFsdWVzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNNYXBLZXlzXSBTcGVjaWZ5IG1hcHBpbmcga2V5cyBpbnN0ZWFkIG9mIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtYXAgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0TWFwcGVyKGlzTWFwS2V5cykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICBpdGVyYXRlZSA9IGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTtcblxuICAgICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICAgICAgdmFyIG1hcHBlZCA9IGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCk7XG4gICAgICAgICAga2V5ID0gaXNNYXBLZXlzID8gbWFwcGVkIDoga2V5O1xuICAgICAgICAgIHZhbHVlID0gaXNNYXBLZXlzID8gdmFsdWUgOiBtYXBwZWQ7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8ucGFkTGVmdGAgb3IgYF8ucGFkUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgcGFkZGluZyBmcm9tIHRoZSByaWdodC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUGFkRGlyKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIChmcm9tUmlnaHQgPyBzdHJpbmcgOiAnJykgKyBjcmVhdGVQYWRkaW5nKHN0cmluZywgbGVuZ3RoLCBjaGFycykgKyAoZnJvbVJpZ2h0ID8gJycgOiBzdHJpbmcpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8ucGFydGlhbGAgb3IgYF8ucGFydGlhbFJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmbGFnIFRoZSBwYXJ0aWFsIGJpdCBmbGFnLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWwgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUGFydGlhbChmbGFnKSB7XG4gICAgICB2YXIgcGFydGlhbEZ1bmMgPSByZXN0UGFyYW0oZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgcGFydGlhbEZ1bmMucGxhY2Vob2xkZXIpO1xuICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcihmdW5jLCBmbGFnLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcnRpYWxGdW5jO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmb3IgYF8ucmVkdWNlYCBvciBgXy5yZWR1Y2VSaWdodGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFycmF5RnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGFuIGFycmF5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYSBjb2xsZWN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGVhY2ggZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGFycmF5RnVuYywgZWFjaEZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIGluaXRGcm9tQXJyYXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzQXJnID09PSB1bmRlZmluZWQgJiYgaXNBcnJheShjb2xsZWN0aW9uKSlcbiAgICAgICAgICA/IGFycmF5RnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQXJyYXkpXG4gICAgICAgICAgOiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24sIGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCA0KSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQXJyYXksIGVhY2hGdW5jKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIGFuZCBpbnZva2VzIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gcmVmZXJlbmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIG9mIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBwZXJgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc1JpZ2h0XSBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzUmlnaHRdIFRoZSBgcGFydGlhbHNSaWdodGAgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVIeWJyaWRXcmFwcGVyKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICAgICAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIEFSWV9GTEFHLFxuICAgICAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBCSU5EX0ZMQUcsXG4gICAgICAgICAgaXNCaW5kS2V5ID0gYml0bWFzayAmIEJJTkRfS0VZX0ZMQUcsXG4gICAgICAgICAgaXNDdXJyeSA9IGJpdG1hc2sgJiBDVVJSWV9GTEFHLFxuICAgICAgICAgIGlzQ3VycnlCb3VuZCA9IGJpdG1hc2sgJiBDVVJSWV9CT1VORF9GTEFHLFxuICAgICAgICAgIGlzQ3VycnlSaWdodCA9IGJpdG1hc2sgJiBDVVJSWV9SSUdIVF9GTEFHLFxuICAgICAgICAgIEN0b3IgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBjcmVhdGVDdG9yV3JhcHBlcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgLy8gQXZvaWQgYGFyZ3VtZW50c2Agb2JqZWN0IHVzZSBkaXNxdWFsaWZ5aW5nIG9wdGltaXphdGlvbnMgYnlcbiAgICAgICAgLy8gY29udmVydGluZyBpdCB0byBhbiBhcnJheSBiZWZvcmUgcHJvdmlkaW5nIGl0IHRvIG90aGVyIGZ1bmN0aW9ucy5cbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgICAgIGFyZ3MgPSBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRpYWxzUmlnaHQpIHtcbiAgICAgICAgICBhcmdzID0gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0N1cnJ5IHx8IGlzQ3VycnlSaWdodCkge1xuICAgICAgICAgIHZhciBwbGFjZWhvbGRlciA9IHdyYXBwZXIucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIGFyZ3NIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuXG4gICAgICAgICAgbGVuZ3RoIC09IGFyZ3NIb2xkZXJzLmxlbmd0aDtcbiAgICAgICAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICAgIHZhciBuZXdBcmdQb3MgPSBhcmdQb3MgPyBhcnJheUNvcHkoYXJnUG9zKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBuZXdBcml0eSA9IG5hdGl2ZU1heChhcml0eSAtIGxlbmd0aCwgMCksXG4gICAgICAgICAgICAgICAgbmV3c0hvbGRlcnMgPSBpc0N1cnJ5ID8gYXJnc0hvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGFyZ3NIb2xkZXJzLFxuICAgICAgICAgICAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IGFyZ3MgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBhcmdzO1xuXG4gICAgICAgICAgICBiaXRtYXNrIHw9IChpc0N1cnJ5ID8gUEFSVElBTF9GTEFHIDogUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICAgICAgICAgIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gUEFSVElBTF9SSUdIVF9GTEFHIDogUEFSVElBTF9GTEFHKTtcblxuICAgICAgICAgICAgaWYgKCFpc0N1cnJ5Qm91bmQpIHtcbiAgICAgICAgICAgICAgYml0bWFzayAmPSB+KEJJTkRfRkxBRyB8IEJJTkRfS0VZX0ZMQUcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld0RhdGEgPSBbZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld3NIb2xkZXJzLCBuZXdQYXJ0aWFsc1JpZ2h0LCBuZXdIb2xkZXJzUmlnaHQsIG5ld0FyZ1BvcywgYXJ5LCBuZXdBcml0eV0sXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlSHlicmlkV3JhcHBlci5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuXG4gICAgICAgICAgICBpZiAoaXNMYXppYWJsZShmdW5jKSkge1xuICAgICAgICAgICAgICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLFxuICAgICAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICAgICAgaWYgKGFyZ1Bvcykge1xuICAgICAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJ5ICYmIGFyeSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgYXJncy5sZW5ndGggPSBhcnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgICAgIGZuID0gQ3RvciB8fCBjcmVhdGVDdG9yV3JhcHBlcihmdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgcGFkZGluZyByZXF1aXJlZCBmb3IgYHN0cmluZ2AgYmFzZWQgb24gdGhlIGdpdmVuIGBsZW5ndGhgLlxuICAgICAqIFRoZSBgY2hhcnNgIHN0cmluZyBpcyB0cnVuY2F0ZWQgaWYgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4Y2VlZHMgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjcmVhdGUgcGFkZGluZyBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWQgZm9yIGBzdHJpbmdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgICAgIGxlbmd0aCA9ICtsZW5ndGg7XG5cbiAgICAgIGlmIChzdHJMZW5ndGggPj0gbGVuZ3RoIHx8ICFuYXRpdmVJc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHZhciBwYWRMZW5ndGggPSBsZW5ndGggLSBzdHJMZW5ndGg7XG4gICAgICBjaGFycyA9IGNoYXJzID09IG51bGwgPyAnICcgOiAoY2hhcnMgKyAnJyk7XG4gICAgICByZXR1cm4gcmVwZWF0KGNoYXJzLCBuYXRpdmVDZWlsKHBhZExlbmd0aCAvIGNoYXJzLmxlbmd0aCkpLnNsaWNlKDAsIHBhZExlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIGFuZCBpbnZva2VzIGl0IHdpdGggdGhlIG9wdGlvbmFsIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiB0aGUgd3JhcHBlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBvZiBmbGFncy4gU2VlIGBjcmVhdGVXcmFwcGVyYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWxXcmFwcGVyKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIEJJTkRfRkxBRyxcbiAgICAgICAgICBDdG9yID0gY3JlYXRlQ3RvcldyYXBwZXIoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIC8vIEF2b2lkIGBhcmd1bWVudHNgIG9iamVjdCB1c2UgZGlzcXVhbGlmeWluZyBvcHRpbWl6YXRpb25zIGJ5XG4gICAgICAgIC8vIGNvbnZlcnRpbmcgaXQgdG8gYW4gYXJyYXkgYmVmb3JlIHByb3ZpZGluZyBpdCBgZnVuY2AuXG4gICAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uY2VpbGAsIGBfLmZsb29yYCwgb3IgYF8ucm91bmRgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYE1hdGhgIG1ldGhvZCB0byB1c2Ugd2hlbiByb3VuZGluZy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByb3VuZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSb3VuZChtZXRob2ROYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IE1hdGhbbWV0aG9kTmFtZV07XG4gICAgICByZXR1cm4gZnVuY3Rpb24obnVtYmVyLCBwcmVjaXNpb24pIHtcbiAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAwIDogKCtwcmVjaXNpb24gfHwgMCk7XG4gICAgICAgIGlmIChwcmVjaXNpb24pIHtcbiAgICAgICAgICBwcmVjaXNpb24gPSBwb3coMTAsIHByZWNpc2lvbik7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMobnVtYmVyICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYyhudW1iZXIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uc29ydGVkSW5kZXhgIG9yIGBfLnNvcnRlZExhc3RJbmRleGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbmRleCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVTb3J0ZWRJbmRleChyZXRIaWdoZXN0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgdGhpc0FyZykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSBnZXRDYWxsYmFjayhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBjYWxsYmFjayA9PT0gYmFzZUNhbGxiYWNrKVxuICAgICAgICAgID8gYmluYXJ5SW5kZXgoYXJyYXksIHZhbHVlLCByZXRIaWdoZXN0KVxuICAgICAgICAgIDogYmluYXJ5SW5kZXhCeShhcnJheSwgdmFsdWUsIGNhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAxKSwgcmV0SGlnaGVzdCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAgICAgKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gcmVmZXJlbmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIG9mIGZsYWdzLlxuICAgICAqICBUaGUgYml0bWFzayBtYXkgYmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBmbGFnczpcbiAgICAgKiAgICAgMSAtIGBfLmJpbmRgXG4gICAgICogICAgIDIgLSBgXy5iaW5kS2V5YFxuICAgICAqICAgICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb25cbiAgICAgKiAgICAgOCAtIGBfLmN1cnJ5YFxuICAgICAqICAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAgICAgKiAgICAzMiAtIGBfLnBhcnRpYWxgXG4gICAgICogICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gICAgICogICAxMjggLSBgXy5yZWFyZ2BcbiAgICAgKiAgIDI1NiAtIGBfLmFyeWBcbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVXcmFwcGVyKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgQklORF9LRVlfRkxBRztcbiAgICAgIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihQQVJUSUFMX0ZMQUcgfCBQQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgICAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBsZW5ndGggLT0gKGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDApO1xuICAgICAgaWYgKGJpdG1hc2sgJiBQQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpLFxuICAgICAgICAgIG5ld0RhdGEgPSBbZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XTtcblxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgbWVyZ2VEYXRhKG5ld0RhdGEsIGRhdGEpO1xuICAgICAgICBiaXRtYXNrID0gbmV3RGF0YVsxXTtcbiAgICAgICAgYXJpdHkgPSBuZXdEYXRhWzldO1xuICAgICAgfVxuICAgICAgbmV3RGF0YVs5XSA9IGFyaXR5ID09IG51bGxcbiAgICAgICAgPyAoaXNCaW5kS2V5ID8gMCA6IGZ1bmMubGVuZ3RoKVxuICAgICAgICA6IChuYXRpdmVNYXgoYXJpdHkgLSBsZW5ndGgsIDApIHx8IDApO1xuXG4gICAgICBpZiAoYml0bWFzayA9PSBCSU5EX0ZMQUcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmRXcmFwcGVyKG5ld0RhdGFbMF0sIG5ld0RhdGFbMl0pO1xuICAgICAgfSBlbHNlIGlmICgoYml0bWFzayA9PSBQQVJUSUFMX0ZMQUcgfHwgYml0bWFzayA9PSAoQklORF9GTEFHIHwgUEFSVElBTF9GTEFHKSkgJiYgIW5ld0RhdGFbNF0ubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVBhcnRpYWxXcmFwcGVyLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWRXcmFwcGVyLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gICAgICB9XG4gICAgICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgICAgIHJldHVybiBzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaW5nIGFycmF5cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0xvb3NlXSBTcGVjaWZ5IHBlcmZvcm1pbmcgcGFydGlhbCBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbc3RhY2tBXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbc3RhY2tCXSBUcmFja3MgdHJhdmVyc2VkIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgZXF1YWxGdW5jLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICAgICAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc0xvb3NlICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICAgICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF0sXG4gICAgICAgICAgICByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihpc0xvb3NlID8gb3RoVmFsdWUgOiBhcnJWYWx1ZSwgaXNMb29zZSA/IGFyclZhbHVlIDogb3RoVmFsdWUsIGluZGV4KSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGlmIChpc0xvb3NlKSB7XG4gICAgICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQik7XG4gICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAgICAgKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICAgICAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBib29sVGFnOlxuICAgICAgICBjYXNlIGRhdGVUYWc6XG4gICAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1iZXJzLCBkYXRlcyB0byBtaWxsaXNlY29uZHMgYW5kIGJvb2xlYW5zXG4gICAgICAgICAgLy8gdG8gYDFgIG9yIGAwYCB0cmVhdGluZyBpbnZhbGlkIGRhdGVzIGNvZXJjZWQgdG8gYE5hTmAgYXMgbm90IGVxdWFsLlxuICAgICAgICAgIHJldHVybiArb2JqZWN0ID09ICtvdGhlcjtcblxuICAgICAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICAgICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAgICAgLy8gVHJlYXQgYE5hTmAgdnMuIGBOYU5gIGFzIGVxdWFsLlxuICAgICAgICAgIHJldHVybiAob2JqZWN0ICE9ICtvYmplY3QpXG4gICAgICAgICAgICA/IG90aGVyICE9ICtvdGhlclxuICAgICAgICAgICAgOiBvYmplY3QgPT0gK290aGVyO1xuXG4gICAgICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzIHByaW1pdGl2ZXMgYW5kIHN0cmluZ1xuICAgICAgICAgIC8vIG9iamVjdHMgYXMgZXF1YWwuIFNlZSBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS4xMC42LjQgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICAgICAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaW5nIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0xvb3NlXSBTcGVjaWZ5IHBlcmZvcm1pbmcgcGFydGlhbCBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbc3RhY2tBXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbc3RhY2tCXSBUcmFja3MgdHJhdmVyc2VkIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgZXF1YWxGdW5jLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQikge1xuICAgICAgdmFyIG9ialByb3BzID0ga2V5cyhvYmplY3QpLFxuICAgICAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgICAgICBvdGhQcm9wcyA9IGtleXMob3RoZXIpLFxuICAgICAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICAgICAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzTG9vc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICAgICAgaWYgKCEoaXNMb29zZSA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgc2tpcEN0b3IgPSBpc0xvb3NlO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICAgICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgICAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XSxcbiAgICAgICAgICAgIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKGlzTG9vc2UgPyBvdGhWYWx1ZSA6IG9ialZhbHVlLCBpc0xvb3NlPyBvYmpWYWx1ZSA6IG90aFZhbHVlLCBrZXkpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZCA/IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSA6IHJlc3VsdCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICAgICAgfVxuICAgICAgaWYgKCFza2lwQ3Rvcikge1xuICAgICAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgICAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICAgICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIFwiY2FsbGJhY2tcIiBmdW5jdGlvbi4gSWYgdGhlIGBfLmNhbGxiYWNrYCBtZXRob2QgaXNcbiAgICAgKiBjdXN0b21pemVkIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VzdG9tIG1ldGhvZCwgb3RoZXJ3aXNlIGl0IHJldHVybnNcbiAgICAgKiB0aGUgYGJhc2VDYWxsYmFja2AgZnVuY3Rpb24uIElmIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdGhlIGNob3NlbiBmdW5jdGlvblxuICAgICAqIGlzIGludm9rZWQgd2l0aCB0aGVtIGFuZCBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNob3NlbiBmdW5jdGlvbiBvciBpdHMgcmVzdWx0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldENhbGxiYWNrKGZ1bmMsIHRoaXNBcmcsIGFyZ0NvdW50KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoLmNhbGxiYWNrIHx8IGNhbGxiYWNrO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0ID09PSBjYWxsYmFjayA/IGJhc2VDYWxsYmFjayA6IHJlc3VsdDtcbiAgICAgIHJldHVybiBhcmdDb3VudCA/IHJlc3VsdChmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCkgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAgIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmFtZSBvZiBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMubmFtZSxcbiAgICAgICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgICAgIG90aGVyRnVuYyA9IGRhdGEuZnVuYztcbiAgICAgICAgaWYgKG90aGVyRnVuYyA9PSBudWxsIHx8IG90aGVyRnVuYyA9PSBmdW5jKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBcImluZGV4T2ZcIiBmdW5jdGlvbi4gSWYgdGhlIGBfLmluZGV4T2ZgIG1ldGhvZCBpc1xuICAgICAqIGN1c3RvbWl6ZWQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXN0b20gbWV0aG9kLCBvdGhlcndpc2UgaXQgcmV0dXJuc1xuICAgICAqIHRoZSBgYmFzZUluZGV4T2ZgIGZ1bmN0aW9uLiBJZiBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRoZSBjaG9zZW4gZnVuY3Rpb25cbiAgICAgKiBpcyBpbnZva2VkIHdpdGggdGhlbSBhbmQgaXRzIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufG51bWJlcn0gUmV0dXJucyB0aGUgY2hvc2VuIGZ1bmN0aW9uIG9yIGl0cyByZXN1bHQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SW5kZXhPZihjb2xsZWN0aW9uLCB0YXJnZXQsIGZyb21JbmRleCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaC5pbmRleE9mIHx8IGluZGV4T2Y7XG4gICAgICByZXN1bHQgPSByZXN1bHQgPT09IGluZGV4T2YgPyBiYXNlSW5kZXhPZiA6IHJlc3VsdDtcbiAgICAgIHJldHVybiBjb2xsZWN0aW9uID8gcmVzdWx0KGNvbGxlY3Rpb24sIHRhcmdldCwgZnJvbUluZGV4KSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IHZhbHVlIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhdm9pZCBhIFtKSVQgYnVnXShodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNzkyKVxuICAgICAqIHRoYXQgYWZmZWN0cyBTYWZhcmkgb24gYXQgbGVhc3QgaU9TIDguMS04LjMgQVJNNjQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgXCJsZW5ndGhcIiB2YWx1ZS5cbiAgICAgKi9cbiAgICB2YXIgZ2V0TGVuZ3RoID0gYmFzZVByb3BlcnR5KCdsZW5ndGgnKTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3BlcnkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHBhaXJzKG9iamVjdCksXG4gICAgICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtsZW5ndGhdWzJdID0gaXNTdHJpY3RDb21wYXJhYmxlKHJlc3VsdFtsZW5ndGhdWzFdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gICAgICByZXR1cm4gaXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmlldywgYXBwbHlpbmcgYW55IGB0cmFuc2Zvcm1zYCB0byB0aGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSB2aWV3LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgdmlldy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB0cmFuc2Zvcm1zIFRoZSB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIHZpZXcuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYHN0YXJ0YCBhbmQgYGVuZGBcbiAgICAgKiAgcG9zaXRpb25zIG9mIHRoZSB2aWV3LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFZpZXcoc3RhcnQsIGVuZCwgdHJhbnNmb3Jtcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBkYXRhID0gdHJhbnNmb3Jtc1tpbmRleF0sXG4gICAgICAgICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnZHJvcCc6ICAgICAgc3RhcnQgKz0gc2l6ZTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZHJvcFJpZ2h0JzogZW5kIC09IHNpemU7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2UnOiAgICAgIGVuZCA9IG5hdGl2ZU1pbihlbmQsIHN0YXJ0ICsgc2l6ZSk7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2VSaWdodCc6IHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0LCBlbmQgLSBzaXplKTsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7ICdzdGFydCc6IHN0YXJ0LCAnZW5kJzogZW5kIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gICAgICAvLyBBZGQgYXJyYXkgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICAgICAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gICAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmICghKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IpKSB7XG4gICAgICAgIEN0b3IgPSBPYmplY3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAgICAgKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgICAgICByZXR1cm4gYnVmZmVyQ2xvbmUob2JqZWN0KTtcblxuICAgICAgICBjYXNlIGJvb2xUYWc6XG4gICAgICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICAgICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICAgICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgICAgICB2YXIgYnVmZmVyID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3IoaXNEZWVwID8gYnVmZmVyQ2xvbmUoYnVmZmVyKSA6IGJ1ZmZlciwgb2JqZWN0LmJ5dGVPZmZzZXQsIG9iamVjdC5sZW5ndGgpO1xuXG4gICAgICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgICAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3Iob2JqZWN0LnNvdXJjZSwgcmVGbGFncy5leGVjKG9iamVjdCkpO1xuICAgICAgICAgIHJlc3VsdC5sYXN0SW5kZXggPSBvYmplY3QubGFzdEluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBtZXRob2QgYXQgYHBhdGhgIG9uIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW52b2tlUGF0aChvYmplY3QsIHBhdGgsIGFyZ3MpIHtcbiAgICAgIGlmIChvYmplY3QgIT0gbnVsbCAmJiAhaXNLZXkocGF0aCwgb2JqZWN0KSkge1xuICAgICAgICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICAgICAgICBvYmplY3QgPSBwYXRoLmxlbmd0aCA9PSAxID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xuICAgICAgICBwYXRoID0gbGFzdChwYXRoKTtcbiAgICAgIH1cbiAgICAgIHZhciBmdW5jID0gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBvYmplY3RbcGF0aF07XG4gICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogZnVuYy5hcHBseShvYmplY3QsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgoZ2V0TGVuZ3RoKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICAgICAgdmFsdWUgPSAodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHJlSXNVaW50LnRlc3QodmFsdWUpKSA/ICt2YWx1ZSA6IC0xO1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuICAgICAgcmV0dXJuIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICAgICAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gICAgICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpKSB7XG4gICAgICAgIHZhciBvdGhlciA9IG9iamVjdFtpbmRleF07XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyAodmFsdWUgPT09IG90aGVyKSA6IChvdGhlciAhPT0gb3RoZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIGlmICgodHlwZSA9PSAnc3RyaW5nJyAmJiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpKSB8fCB0eXBlID09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdCB8fCAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gdG9PYmplY3Qob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpIHtcbiAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpO1xuICAgICAgaWYgKCEoZnVuY05hbWUgaW4gTGF6eVdyYXBwZXIucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuICAgICAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgICAgIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbGVuZ3RoKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICAgICAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gICAgICpcbiAgICAgKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyByZXF1aXJlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAgICAgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgbWV0aG9kcyBsaWtlIGBfLmJpbmRgLCBgXy5jdXJyeWAsIGFuZCBgXy5wYXJ0aWFsYFxuICAgICAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmQgYF8ucmVhcmdgXG4gICAgICogYXVnbWVudCBmdW5jdGlvbiBhcmd1bWVudHMsIG1ha2luZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgZXhlY3V0ZWQgaW1wb3J0YW50LFxuICAgICAqIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBhIHNhZmVcbiAgICAgKiBjb21tb24gY2FzZSB3aGVyZSBjdXJyaWVkIGZ1bmN0aW9ucyBoYXZlIGBfLmFyeWAgYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIHNvdXJjZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLCBzb3VyY2UpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgICAgIG5ld0JpdG1hc2sgPSBiaXRtYXNrIHwgc3JjQml0bWFzayxcbiAgICAgICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCBBUllfRkxBRztcblxuICAgICAgdmFyIGlzQ29tYm8gPVxuICAgICAgICAoc3JjQml0bWFzayA9PSBBUllfRkxBRyAmJiBiaXRtYXNrID09IENVUlJZX0ZMQUcpIHx8XG4gICAgICAgIChzcmNCaXRtYXNrID09IEFSWV9GTEFHICYmIGJpdG1hc2sgPT0gUkVBUkdfRkxBRyAmJiBkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pIHx8XG4gICAgICAgIChzcmNCaXRtYXNrID09IChBUllfRkxBRyB8IFJFQVJHX0ZMQUcpICYmIGJpdG1hc2sgPT0gQ1VSUllfRkxBRyk7XG5cbiAgICAgIC8vIEV4aXQgZWFybHkgaWYgbWV0YWRhdGEgY2FuJ3QgYmUgbWVyZ2VkLlxuICAgICAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIEJJTkRfRkxBRykge1xuICAgICAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgICAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgICAgICBuZXdCaXRtYXNrIHw9IChiaXRtYXNrICYgQklORF9GTEFHKSA/IDAgOiBDVVJSWV9CT1VORF9GTEFHO1xuICAgICAgfVxuICAgICAgLy8gQ29tcG9zZSBwYXJ0aWFsIGFyZ3VtZW50cy5cbiAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbHMgPSBkYXRhWzNdO1xuICAgICAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiBhcnJheUNvcHkodmFsdWUpO1xuICAgICAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBhcnJheUNvcHkoc291cmNlWzRdKTtcbiAgICAgIH1cbiAgICAgIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gICAgICB2YWx1ZSA9IHNvdXJjZVs1XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgICAgIGRhdGFbNV0gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzUmlnaHQocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNl0pIDogYXJyYXlDb3B5KHZhbHVlKTtcbiAgICAgICAgZGF0YVs2XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVs1XSwgUExBQ0VIT0xERVIpIDogYXJyYXlDb3B5KHNvdXJjZVs2XSk7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgICAgIHZhbHVlID0gc291cmNlWzddO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGRhdGFbN10gPSBhcnJheUNvcHkodmFsdWUpO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIEFSWV9GTEFHKSB7XG4gICAgICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICAgICAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgICAgICBkYXRhWzldID0gc291cmNlWzldO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICAgICAgZGF0YVswXSA9IHNvdXJjZVswXTtcbiAgICAgIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzRGVlcGAgdG8gY3VzdG9taXplIGl0cyBgXy5tZXJnZWAgdXNlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IG9iamVjdFZhbHVlIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QgcHJvcGVydHkgdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBzb3VyY2VWYWx1ZSBUaGUgc291cmNlIG9iamVjdCBwcm9wZXJ0eSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVyZ2VEZWZhdWx0cyhvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmplY3RWYWx1ZSA9PT0gdW5kZWZpbmVkID8gc291cmNlVmFsdWUgOiBtZXJnZShvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUsIG1lcmdlRGVmYXVsdHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5waWNrYCB3aGljaCBwaWNrcyBgb2JqZWN0YCBwcm9wZXJ0aWVzIHNwZWNpZmllZFxuICAgICAqIGJ5IGBwcm9wc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwaWNrQnlBcnJheShvYmplY3QsIHByb3BzKSB7XG4gICAgICBvYmplY3QgPSB0b09iamVjdChvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucGlja2Agd2hpY2ggcGlja3MgYG9iamVjdGAgcHJvcGVydGllcyBgcHJlZGljYXRlYFxuICAgICAqIHJldHVybnMgdHJ1dGh5IGZvci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBpY2tCeUNhbGxiYWNrKG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBiYXNlRm9ySW4ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmplY3QpKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlb3JkZXIgYGFycmF5YCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBpbmRleGVzIHdoZXJlIHRoZSBlbGVtZW50IGF0XG4gICAgICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICAgICAqIHRoZSBzZWNvbmQgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZW9yZGVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ZXMgVGhlIGFycmFuZ2VkIGFycmF5IGluZGV4ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVvcmRlcihhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oaW5kZXhlcy5sZW5ndGgsIGFyckxlbmd0aCksXG4gICAgICAgICAgb2xkQXJyYXkgPSBhcnJheUNvcHkoYXJyYXkpO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgICAgICBhcnJheVtsZW5ndGhdID0gaXNJbmRleChpbmRleCwgYXJyTGVuZ3RoKSA/IG9sZEFycmF5W2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAgICAgKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5IGZ1bmN0aW9uXG4gICAgICogdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhdXNlcyBpbiBWOC4gU2VlIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3MClcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIHNldERhdGEgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY291bnQgPSAwLFxuICAgICAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgc3RhbXAgPSBub3coKSxcbiAgICAgICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgICAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlU2V0RGF0YShrZXksIHZhbHVlKTtcbiAgICAgIH07XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIEEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYE9iamVjdC5rZXlzYCB3aGljaCBjcmVhdGVzIGFuIGFycmF5IG9mIHRoZVxuICAgICAqIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaGltS2V5cyhvYmplY3QpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXNJbihvYmplY3QpLFxuICAgICAgICAgIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzTGVuZ3RoICYmIG9iamVjdC5sZW5ndGg7XG5cbiAgICAgIHZhciBhbGxvd0luZGV4ZXMgPSAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmXG4gICAgICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIGlmICgoYWxsb3dJbmRleGVzICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpKSB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS1saWtlIG9iamVjdCBpZiBpdCdzIG5vdCBvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyB0aGUgYXJyYXktbGlrZSBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9JdGVyYWJsZSh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNPYmplY3QodmFsdWUpID8gdmFsdWUgOiBPYmplY3QodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gb2JqZWN0IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9PYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBwcm9wZXJ0eSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9QYXRoKHZhbHVlKSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgYmFzZVRvU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdHJpbmcpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKSB7XG4gICAgICByZXR1cm4gd3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyXG4gICAgICAgID8gd3JhcHBlci5jbG9uZSgpXG4gICAgICAgIDogbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18sIGFycmF5Q29weSh3cmFwcGVyLl9fYWN0aW9uc19fKSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxpdCBpbnRvIGdyb3VwcyB0aGUgbGVuZ3RoIG9mIGBzaXplYC5cbiAgICAgKiBJZiBgY29sbGVjdGlvbmAgY2FuJ3QgYmUgc3BsaXQgZXZlbmx5LCB0aGUgZmluYWwgY2h1bmsgd2lsbCBiZSB0aGUgcmVtYWluaW5nXG4gICAgICogZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9MV0gVGhlIGxlbmd0aCBvZiBlYWNoIGNodW5rLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IGNvbnRhaW5pbmcgY2h1bmtzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAyKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InXSwgWydjJywgJ2QnXV1cbiAgICAgKlxuICAgICAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDMpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYicsICdjJ10sIFsnZCddXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNodW5rKGFycmF5LCBzaXplLCBndWFyZCkge1xuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIHNpemUsIGd1YXJkKSA6IHNpemUgPT0gbnVsbCkge1xuICAgICAgICBzaXplID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSBuYXRpdmVNYXgobmF0aXZlRmxvb3Ioc2l6ZSkgfHwgMSwgMSk7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICByZXNJbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KG5hdGl2ZUNlaWwobGVuZ3RoIC8gc2l6ZSkpO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gYmFzZVNsaWNlKGFycmF5LCBpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSB3aXRoIGFsbCBmYWxzZXkgdmFsdWVzIHJlbW92ZWQuIFRoZSB2YWx1ZXMgYGZhbHNlYCwgYG51bGxgLFxuICAgICAqIGAwYCwgYFwiXCJgLCBgdW5kZWZpbmVkYCwgYW5kIGBOYU5gIGFyZSBmYWxzZXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY29tcGFjdChbMCwgMSwgZmFsc2UsIDIsICcnLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwLFxuICAgICAgICAgIHJlc0luZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlclxuICAgICAqIHByb3ZpZGVkIGFycmF5cyB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSBhcnJheXMgb2YgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2UoWzEsIDIsIDNdLCBbNCwgMl0pO1xuICAgICAqIC8vID0+IFsxLCAzXVxuICAgICAqL1xuICAgIHZhciBkaWZmZXJlbmNlID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiAoaXNPYmplY3RMaWtlKGFycmF5KSAmJiBpc0FycmF5TGlrZShhcnJheSkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgZmFsc2UsIHRydWUpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgbiwgZ3VhcmQpIDogbiA9PSBudWxsKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgbiA8IDAgPyAwIDogbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIG4sIGd1YXJkKSA6IG4gPT0gbnVsbCkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH1cbiAgICAgIG4gPSBsZW5ndGggLSAoK24gfHwgMCk7XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICogRWxlbWVudHMgYXJlIGRyb3BwZWQgdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKFsxLCAyLCAzXSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gPiAxO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucGx1Y2soXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH0pLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyksIHRydWUsIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZXhjbHVkaW5nIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRyb3BXaGlsZShbMSwgMiwgM10sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBuIDwgMztcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8uZHJvcFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8uZHJvcFdoaWxlKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucGx1Y2soXy5kcm9wV2hpbGUodXNlcnMsICdhY3RpdmUnKSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BXaGlsZShhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyksIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsbHMgZWxlbWVudHMgb2YgYGFycmF5YCB3aXRoIGB2YWx1ZWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90XG4gICAgICogaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8uZmlsbChhcnJheSwgJ2EnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydhJywgJ2EnLCAnYSddXG4gICAgICpcbiAgICAgKiBfLmZpbGwoQXJyYXkoMyksIDIpO1xuICAgICAqIC8vID0+IFsyLCAyLCAyXVxuICAgICAqXG4gICAgICogXy5maWxsKFs0LCA2LCA4XSwgJyonLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBbNCwgJyonLCA4XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ICYmIHR5cGVvZiBzdGFydCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgdmFsdWUsIHN0YXJ0KSkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihjaHIpIHtcbiAgICAgKiAgIHJldHVybiBjaHIudXNlciA9PSAnYmFybmV5JztcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc2AgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScsIGZhbHNlKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIHZhciBmaW5kSW5kZXggPSBjcmVhdGVGaW5kSW5kZXgoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEluZGV4YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzXG4gICAgICogb2YgYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBmdW5jdGlvbihjaHIpIHtcbiAgICAgKiAgIHJldHVybiBjaHIudXNlciA9PSAncGViYmxlcyc7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgdmFyIGZpbmRMYXN0SW5kZXggPSBjcmVhdGVGaW5kSW5kZXgodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgaGVhZFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZpcnN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogXy5maXJzdChbXSk7XG4gICAgICogLy8gPT4gdW5kZWZpbmVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHtcbiAgICAgIHJldHVybiBhcnJheSA/IGFycmF5WzBdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZsYXR0ZW5zIGEgbmVzdGVkIGFycmF5LiBJZiBgaXNEZWVwYCBpcyBgdHJ1ZWAgdGhlIGFycmF5IGlzIHJlY3Vyc2l2ZWx5XG4gICAgICogZmxhdHRlbmVkLCBvdGhlcndpc2UgaXQgaXMgb25seSBmbGF0dGVuZWQgYSBzaW5nbGUgbGV2ZWwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGZsYXR0ZW4uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW4oWzEsIFsyLCAzLCBbNF1dXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIFs0XV1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIGBpc0RlZXBgXG4gICAgICogXy5mbGF0dGVuKFsxLCBbMiwgMywgWzRdXV0sIHRydWUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGlzRGVlcCwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIGlzRGVlcCwgZ3VhcmQpKSB7XG4gICAgICAgIGlzRGVlcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCBpc0RlZXApIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYSBuZXN0ZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcmVjdXJzaXZlbHkgZmxhdHRlbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlZXAoWzEsIFsyLCAzLCBbNF1dXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbkRlZXAoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIHRydWUpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYHZhbHVlYCBpcyBmb3VuZCBpbiBgYXJyYXlgXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCBpcyB1c2VkIGFzIHRoZSBvZmZzZXRcbiAgICAgKiBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBzb3J0ZWQgcHJvdmlkaW5nIGB0cnVlYCBmb3IgYGZyb21JbmRleGBcbiAgICAgKiBwZXJmb3JtcyBhIGZhc3RlciBiaW5hcnkgc2VhcmNoLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tIG9yIGB0cnVlYFxuICAgICAqICB0byBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvbiBhIHNvcnRlZCBhcnJheS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBgZnJvbUluZGV4YFxuICAgICAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIC8vIHBlcmZvcm1pbmcgYSBiaW5hcnkgc2VhcmNoXG4gICAgICogXy5pbmRleE9mKFsxLCAxLCAyLCAyXSwgMiwgdHJ1ZSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGZyb21JbmRleCA9PSAnbnVtYmVyJykge1xuICAgICAgICBmcm9tSW5kZXggPSBmcm9tSW5kZXggPCAwID8gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCkgOiBmcm9tSW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGZyb21JbmRleCkge1xuICAgICAgICB2YXIgaW5kZXggPSBiaW5hcnlJbmRleChhcnJheSwgdmFsdWUpO1xuICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiZcbiAgICAgICAgICAgICh2YWx1ZSA9PT0gdmFsdWUgPyAodmFsdWUgPT09IGFycmF5W2luZGV4XSkgOiAoYXJyYXlbaW5kZXhdICE9PSBhcnJheVtpbmRleF0pKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXggfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5pdGlhbChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgICAgIHJldHVybiBkcm9wUmlnaHQoYXJyYXksIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiBhbGwgb2YgdGhlIHByb3ZpZGVkXG4gICAgICogYXJyYXlzIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHNoYXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBfLmludGVyc2VjdGlvbihbMSwgMl0sIFs0LCAyXSwgWzIsIDFdKTtcbiAgICAgKiAvLyA9PiBbMl1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIG90aExlbmd0aCA9IGFycmF5cy5sZW5ndGgsXG4gICAgICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGgsXG4gICAgICAgICAgY2FjaGVzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBpbmRleE9mID0gZ2V0SW5kZXhPZigpLFxuICAgICAgICAgIGlzQ29tbW9uID0gaW5kZXhPZiA9PSBiYXNlSW5kZXhPZixcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKG90aEluZGV4LS0pIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlzW290aEluZGV4XSA9IGlzQXJyYXlMaWtlKHZhbHVlID0gYXJyYXlzW290aEluZGV4XSkgPyB2YWx1ZSA6IFtdO1xuICAgICAgICBjYWNoZXNbb3RoSW5kZXhdID0gKGlzQ29tbW9uICYmIHZhbHVlLmxlbmd0aCA+PSAxMjApID8gY3JlYXRlQ2FjaGUob3RoSW5kZXggJiYgdmFsdWUpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBhcnJheSA9IGFycmF5c1swXSxcbiAgICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICBzZWVuID0gY2FjaGVzWzBdO1xuXG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAoKHNlZW4gPyBjYWNoZUluZGV4T2Yoc2VlbiwgdmFsdWUpIDogaW5kZXhPZihyZXN1bHQsIHZhbHVlLCAwKSkgPCAwKSB7XG4gICAgICAgICAgdmFyIG90aEluZGV4ID0gb3RoTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgtLW90aEluZGV4KSB7XG4gICAgICAgICAgICB2YXIgY2FjaGUgPSBjYWNoZXNbb3RoSW5kZXhdO1xuICAgICAgICAgICAgaWYgKChjYWNoZSA/IGNhY2hlSW5kZXhPZihjYWNoZSwgdmFsdWUpIDogaW5kZXhPZihhcnJheXNbb3RoSW5kZXhdLCB2YWx1ZSwgMCkpIDwgMCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlZW4pIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGFycmF5YCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2VhcmNoLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtib29sZWFufG51bWJlcn0gW2Zyb21JbmRleD1hcnJheS5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tXG4gICAgICogIG9yIGB0cnVlYCB0byBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvbiBhIHNvcnRlZCBhcnJheS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgYGZyb21JbmRleGBcbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwgMik7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gcGVyZm9ybWluZyBhIGJpbmFyeSBzZWFyY2hcbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAxLCAyLCAyXSwgMiwgdHJ1ZSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5kZXggPSAoZnJvbUluZGV4IDwgMCA/IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApIDogbmF0aXZlTWluKGZyb21JbmRleCB8fCAwLCBsZW5ndGggLSAxKSkgKyAxO1xuICAgICAgfSBlbHNlIGlmIChmcm9tSW5kZXgpIHtcbiAgICAgICAgaW5kZXggPSBiaW5hcnlJbmRleChhcnJheSwgdmFsdWUsIHRydWUpIC0gMTtcbiAgICAgICAgdmFyIG90aGVyID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAodmFsdWUgPT09IHZhbHVlID8gKHZhbHVlID09PSBvdGhlcikgOiAob3RoZXIgIT09IG90aGVyKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbmRleE9mTmFOKGFycmF5LCBpbmRleCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHByb3ZpZGVkIHZhbHVlcyBmcm9tIGBhcnJheWAgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ud2l0aG91dGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDMsIDEsIDIsIDNdO1xuICAgICAqXG4gICAgICogXy5wdWxsKGFycmF5LCAyLCAzKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbCgpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgIGFycmF5ID0gYXJnc1swXTtcblxuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIGluZGV4T2YgPSBnZXRJbmRleE9mKCksXG4gICAgICAgICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBmcm9tSW5kZXggPSAwLFxuICAgICAgICAgICAgdmFsdWUgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICB3aGlsZSAoKGZyb21JbmRleCA9IGluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpKSA+IC0xKSB7XG4gICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGZyb21JbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGVsZW1lbnRzIGZyb20gYGFycmF5YCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBpbmRleGVzIGFuZCByZXR1cm5zXG4gICAgICogYW4gYXJyYXkgb2YgdGhlIHJlbW92ZWQgZWxlbWVudHMuIEluZGV4ZXMgbWF5IGJlIHNwZWNpZmllZCBhcyBhbiBhcnJheSBvZlxuICAgICAqIGluZGV4ZXMgb3IgYXMgaW5kaXZpZHVhbCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmF0YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBbaW5kZXhlc10gVGhlIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcmVtb3ZlLFxuICAgICAqICBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBpbmRleGVzIG9yIGFycmF5cyBvZiBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFs1LCAxMCwgMTUsIDIwXTtcbiAgICAgKiB2YXIgZXZlbnMgPSBfLnB1bGxBdChhcnJheSwgMSwgMyk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzUsIDE1XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZXZlbnMpO1xuICAgICAqIC8vID0+IFsxMCwgMjBdXG4gICAgICovXG4gICAgdmFyIHB1bGxBdCA9IHJlc3RQYXJhbShmdW5jdGlvbihhcnJheSwgaW5kZXhlcykge1xuICAgICAgaW5kZXhlcyA9IGJhc2VGbGF0dGVuKGluZGV4ZXMpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZUF0KGFycmF5LCBpbmRleGVzKTtcbiAgICAgIGJhc2VQdWxsQXQoYXJyYXksIGluZGV4ZXMuc29ydChiYXNlQ29tcGFyZUFzY2VuZGluZykpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gYGFycmF5YCB0aGF0IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvclxuICAgICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSByZW1vdmVkIGVsZW1lbnRzLiBUaGUgcHJlZGljYXRlIGlzIGJvdW5kIHRvXG4gICAgICogYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBwcmVkaWNhdGVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZmlsdGVyYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDMsIDRdO1xuICAgICAqIHZhciBldmVucyA9IF8ucmVtb3ZlKGFycmF5LCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgM11cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGV2ZW5zKTtcbiAgICAgKiAvLyA9PiBbMiwgNF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZW1vdmUoYXJyYXksIHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5kZXhlcyA9IFtdLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICBpbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgdGFpbFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVzdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3QoYXJyYXkpIHtcbiAgICAgIHJldHVybiBkcm9wKGFycmF5LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBmcm9tIGBzdGFydGAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluc3RlYWQgb2YgYEFycmF5I3NsaWNlYCB0byBzdXBwb3J0IG5vZGVcbiAgICAgKiBsaXN0cyBpbiBJRSA8IDkgYW5kIHRvIGVuc3VyZSBkZW5zZSBhcnJheXMgYXJlIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoZW5kICYmIHR5cGVvZiBlbmQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHN0YXJ0LCBlbmQpKSB7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlcyBhIGJpbmFyeSBzZWFyY2ggdG8gZGV0ZXJtaW5lIHRoZSBsb3dlc3QgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGRcbiAgICAgKiBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuIElmIGFuIGl0ZXJhdGVlXG4gICAgICogZnVuY3Rpb24gaXMgcHJvdmlkZWQgaXQgaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWBcbiAgICAgKiB0byBjb21wdXRlIHRoZWlyIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmRcbiAgICAgKiBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4KFszMCwgNTBdLCA0MCk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleChbNCwgNCwgNSwgNV0sIDUpO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIHZhciBkaWN0ID0geyAnZGF0YSc6IHsgJ3RoaXJ0eSc6IDMwLCAnZm9ydHknOiA0MCwgJ2ZpZnR5JzogNTAgfSB9O1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgYW4gaXRlcmF0ZWUgZnVuY3Rpb25cbiAgICAgKiBfLnNvcnRlZEluZGV4KFsndGhpcnR5JywgJ2ZpZnR5J10sICdmb3J0eScsIGZ1bmN0aW9uKHdvcmQpIHtcbiAgICAgKiAgIHJldHVybiB0aGlzLmRhdGFbd29yZF07XG4gICAgICogfSwgZGljdCk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnNvcnRlZEluZGV4KFt7ICd4JzogMzAgfSwgeyAneCc6IDUwIH1dLCB7ICd4JzogNDAgfSwgJ3gnKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgdmFyIHNvcnRlZEluZGV4ID0gY3JlYXRlU29ydGVkSW5kZXgoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGhpZ2hlc3RcbiAgICAgKiBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG9cbiAgICAgKiBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXgoWzQsIDQsIDUsIDVdLCA1KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICovXG4gICAgdmFyIHNvcnRlZExhc3RJbmRleCA9IGNyZWF0ZVNvcnRlZEluZGV4KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHRha2UuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2UoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIG4sIGd1YXJkKSA6IG4gPT0gbnVsbCkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgbiwgZ3VhcmQpIDogbiA9PSBudWxsKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfVxuICAgICAgbiA9IGxlbmd0aCAtICgrbiB8fCAwKTtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgZW5kLiBFbGVtZW50cyBhcmVcbiAgICAgKiB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBib3VuZCB0byBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHRXaGlsZShbMSwgMiwgM10sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBuID4gMTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLnRha2VSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLnRha2VSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyksIGZhbHNlLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLiBFbGVtZW50c1xuICAgICAqIGFyZSB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBib3VuZCB0b1xuICAgICAqIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlV2hpbGUoWzEsIDIsIDNdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiA8IDM7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZX0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8udGFrZVdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8udGFrZVdoaWxlKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8udGFrZVdoaWxlKHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIG9mIHRoZSBwcm92aWRlZCBhcnJheXNcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pb24oWzEsIDJdLCBbNCwgMl0sIFsyLCAxXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDRdXG4gICAgICovXG4gICAgdmFyIHVuaW9uID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgZmFsc2UsIHRydWUpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIGFuIGFycmF5LCB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpbiB3aGljaCBvbmx5IHRoZSBmaXJzdCBvY2N1cmVuY2Ugb2YgZWFjaCBlbGVtZW50XG4gICAgICogaXMga2VwdC4gUHJvdmlkaW5nIGB0cnVlYCBmb3IgYGlzU29ydGVkYCBwZXJmb3JtcyBhIGZhc3RlciBzZWFyY2ggYWxnb3JpdGhtXG4gICAgICogZm9yIHNvcnRlZCBhcnJheXMuIElmIGFuIGl0ZXJhdGVlIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGl0IGlzIGludm9rZWQgZm9yXG4gICAgICogZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheSB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoIHVuaXF1ZW5lc3NcbiAgICAgKiBpcyBjb21wdXRlZC4gVGhlIGBpdGVyYXRlZWAgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBhbGlhcyB1bmlxdWVcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1NvcnRlZF0gU3BlY2lmeSB0aGUgYXJyYXkgaXMgc29ydGVkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW2l0ZXJhdGVlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZS12YWx1ZS1mcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXEoWzIsIDEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIGBpc1NvcnRlZGBcbiAgICAgKiBfLnVuaXEoWzEsIDEsIDJdLCB0cnVlKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIGFuIGl0ZXJhdGVlIGZ1bmN0aW9uXG4gICAgICogXy51bmlxKFsxLCAyLjUsIDEuNSwgMl0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiB0aGlzLmZsb29yKG4pO1xuICAgICAqIH0sIE1hdGgpO1xuICAgICAqIC8vID0+IFsxLCAyLjVdXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8udW5pcShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcShhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGlzU29ydGVkICE9IG51bGwgJiYgdHlwZW9mIGlzU29ydGVkICE9ICdib29sZWFuJykge1xuICAgICAgICB0aGlzQXJnID0gaXRlcmF0ZWU7XG4gICAgICAgIGl0ZXJhdGVlID0gaXNJdGVyYXRlZUNhbGwoYXJyYXksIGlzU29ydGVkLCB0aGlzQXJnKSA/IHVuZGVmaW5lZCA6IGlzU29ydGVkO1xuICAgICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2soKTtcbiAgICAgIGlmICghKGl0ZXJhdGVlID09IG51bGwgJiYgY2FsbGJhY2sgPT09IGJhc2VDYWxsYmFjaykpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSBjYWxsYmFjayhpdGVyYXRlZSwgdGhpc0FyZywgMyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKGlzU29ydGVkICYmIGdldEluZGV4T2YoKSA9PSBiYXNlSW5kZXhPZilcbiAgICAgICAgPyBzb3J0ZWRVbmlxKGFycmF5LCBpdGVyYXRlZSlcbiAgICAgICAgOiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIGdyb3VwZWRcbiAgICAgKiBlbGVtZW50cyBhbmQgY3JlYXRlcyBhbiBhcnJheSByZWdyb3VwaW5nIHRoZSBlbGVtZW50cyB0byB0aGVpciBwcmUtemlwXG4gICAgICogY29uZmlndXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWydmcmVkJywgJ2Jhcm5leSddLCBbMzAsIDQwXSwgW3RydWUsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gW1snZnJlZCcsIDMwLCB0cnVlXSwgWydiYXJuZXknLCA0MCwgZmFsc2VdXVxuICAgICAqXG4gICAgICogXy51bnppcCh6aXBwZWQpO1xuICAgICAqIC8vID0+IFtbJ2ZyZWQnLCAnYmFybmV5J10sIFszMCwgNDBdLCBbdHJ1ZSwgZmFsc2VdXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICAgIGFycmF5ID0gYXJyYXlGaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShncm91cCkpIHtcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoZ3JvdXAubGVuZ3RoLCBsZW5ndGgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5TWFwKGFycmF5LCBiYXNlUHJvcGVydHkoaW5kZXgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhbiBpdGVyYXRlZSB0byBzcGVjaWZ5XG4gICAgICogaG93IHJlZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgZ3JvdXApLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lIHJlZ3JvdXBlZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSk7XG4gICAgICogLy8gPT4gW1sxLCAxMCwgMTAwXSwgWzIsIDIwLCAyMDBdXVxuICAgICAqXG4gICAgICogXy51bnppcFdpdGgoemlwcGVkLCBfLmFkZCk7XG4gICAgICogLy8gPT4gWzMsIDMwLCAzMDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW56aXBXaXRoKGFycmF5LCBpdGVyYXRlZSwgdGhpc0FyZykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSB1bnppcChhcnJheSk7XG4gICAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaXRlcmF0ZWUgPSBiaW5kQ2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDQpO1xuICAgICAgcmV0dXJuIGFycmF5TWFwKHJlc3VsdCwgZnVuY3Rpb24oZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKGdyb3VwLCBpdGVyYXRlZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgZXhjbHVkaW5nIGFsbCBwcm92aWRlZCB2YWx1ZXMgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLndpdGhvdXQoWzEsIDIsIDEsIDNdLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKi9cbiAgICB2YXIgd2l0aG91dCA9IHJlc3RQYXJhbShmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2UoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcylcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGlzIHRoZSBbc3ltbWV0cmljIGRpZmZlcmVuY2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bW1ldHJpY19kaWZmZXJlbmNlKVxuICAgICAqIG9mIHRoZSBwcm92aWRlZCBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnhvcihbMSwgMl0sIFs0LCAyXSk7XG4gICAgICogLy8gPT4gWzEsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24geG9yKCkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGFycmF5KSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRcbiAgICAgICAgICAgID8gYXJyYXlQdXNoKGJhc2VEaWZmZXJlbmNlKHJlc3VsdCwgYXJyYXkpLCBiYXNlRGlmZmVyZW5jZShhcnJheSwgcmVzdWx0KSlcbiAgICAgICAgICAgIDogYXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQgPyBiYXNlVW5pcShyZXN1bHQpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggY29udGFpbnMgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgdGhlIHNlY29uZCBvZiB3aGljaCBjb250YWlucyB0aGUgc2Vjb25kIGVsZW1lbnRzXG4gICAgICogb2YgdGhlIGdpdmVuIGFycmF5cywgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwKFsnZnJlZCcsICdiYXJuZXknXSwgWzMwLCA0MF0sIFt0cnVlLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IFtbJ2ZyZWQnLCAzMCwgdHJ1ZV0sIFsnYmFybmV5JywgNDAsIGZhbHNlXV1cbiAgICAgKi9cbiAgICB2YXIgemlwID0gcmVzdFBhcmFtKHVuemlwKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbnZlcnNlIG9mIGBfLnBhaXJzYDsgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBvYmplY3QgY29tcG9zZWQgZnJvbSBhcnJheXNcbiAgICAgKiBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgdmFsdWVzLiBQcm92aWRlIGVpdGhlciBhIHNpbmdsZSB0d28gZGltZW5zaW9uYWwgYXJyYXksXG4gICAgICogZS5nLiBgW1trZXkxLCB2YWx1ZTFdLCBba2V5MiwgdmFsdWUyXV1gIG9yIHR3byBhcnJheXMsIG9uZSBvZiBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIGFuZCBvbmUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgb2JqZWN0XG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBPYmplY3QoW1snZnJlZCcsIDMwXSwgWydiYXJuZXknLCA0MF1dKTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogMzAsICdiYXJuZXknOiA0MCB9XG4gICAgICpcbiAgICAgKiBfLnppcE9iamVjdChbJ2ZyZWQnLCAnYmFybmV5J10sIFszMCwgNDBdKTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogMzAsICdiYXJuZXknOiA0MCB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLCB2YWx1ZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzID8gcHJvcHMubGVuZ3RoIDogMCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKGxlbmd0aCAmJiAhdmFsdWVzICYmICFpc0FycmF5KHByb3BzWzBdKSkge1xuICAgICAgICB2YWx1ZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlc1tpbmRleF07XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5KSB7XG4gICAgICAgICAgcmVzdWx0W2tleVswXV0gPSBrZXlbMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gaXRlcmF0ZWUgdG8gc3BlY2lmeVxuICAgICAqIGhvdyBncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYFxuICAgICAqIGFuZCBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBncm91cCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZSBncm91cGVkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcFdpdGgoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSwgXy5hZGQpO1xuICAgICAqIC8vID0+IFsxMTEsIDIyMl1cbiAgICAgKi9cbiAgICB2YXIgemlwV2l0aCA9IHJlc3RQYXJhbShmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoLFxuICAgICAgICAgIGl0ZXJhdGVlID0gbGVuZ3RoID4gMiA/IGFycmF5c1tsZW5ndGggLSAyXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0aGlzQXJnID0gbGVuZ3RoID4gMSA/IGFycmF5c1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGxlbmd0aCA+IDIgJiYgdHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGVuZ3RoIC09IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVyYXRlZSA9IChsZW5ndGggPiAxICYmIHR5cGVvZiB0aGlzQXJnID09ICdmdW5jdGlvbicpID8gKC0tbGVuZ3RoLCB0aGlzQXJnKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpc0FyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGFycmF5cy5sZW5ndGggPSBsZW5ndGg7XG4gICAgICByZXR1cm4gdW56aXBXaXRoKGFycmF5cywgaXRlcmF0ZWUsIHRoaXNBcmcpO1xuICAgIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIG9iamVjdCB0aGF0IHdyYXBzIGB2YWx1ZWAgd2l0aCBleHBsaWNpdCBtZXRob2RcbiAgICAgKiBjaGFpbmluZyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENoYWluXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogdmFyIHlvdW5nZXN0ID0gXy5jaGFpbih1c2VycylcbiAgICAgKiAgIC5zb3J0QnkoJ2FnZScpXG4gICAgICogICAubWFwKGZ1bmN0aW9uKGNocikge1xuICAgICAqICAgICByZXR1cm4gY2hyLnVzZXIgKyAnIGlzICcgKyBjaHIuYWdlO1xuICAgICAqICAgfSlcbiAgICAgKiAgIC5maXJzdCgpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiAncGViYmxlcyBpcyAxJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNoYWluKHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoKHZhbHVlKTtcbiAgICAgIHJlc3VsdC5fX2NoYWluX18gPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIGBpbnRlcmNlcHRvcmAgYW5kIHJldHVybnMgYHZhbHVlYC4gVGhlIGludGVyY2VwdG9yIGlzXG4gICAgICogYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLiBUaGUgcHVycG9zZSBvZlxuICAgICAqIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiBpbiBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnNcbiAgICAgKiBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENoYWluXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMiwgM10pXG4gICAgICogIC50YXAoZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgKiAgICBhcnJheS5wb3AoKTtcbiAgICAgKiAgfSlcbiAgICAgKiAgLnJldmVyc2UoKVxuICAgICAqICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YXAodmFsdWUsIGludGVyY2VwdG9yLCB0aGlzQXJnKSB7XG4gICAgICBpbnRlcmNlcHRvci5jYWxsKHRoaXNBcmcsIHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnRhcGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ2hhaW5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIHRvIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGludGVyY2VwdG9yYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oJyAgYWJjICAnKVxuICAgICAqICAuY2hhaW4oKVxuICAgICAqICAudHJpbSgpXG4gICAgICogIC50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgICogIH0pXG4gICAgICogIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsnYWJjJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aHJ1KHZhbHVlLCBpbnRlcmNlcHRvciwgdGhpc0FyZykge1xuICAgICAgcmV0dXJuIGludGVyY2VwdG9yLmNhbGwodGhpc0FyZywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZXhwbGljaXQgbWV0aG9kIGNoYWluaW5nIG9uIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNoYWluXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ2hhaW5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gd2l0aG91dCBleHBsaWNpdCBjaGFpbmluZ1xuICAgICAqIF8odXNlcnMpLmZpcnN0KCk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqXG4gICAgICogLy8gd2l0aCBleHBsaWNpdCBjaGFpbmluZ1xuICAgICAqIF8odXNlcnMpLmNoYWluKClcbiAgICAgKiAgIC5maXJzdCgpXG4gICAgICogICAucGljaygndXNlcicpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDaGFpbigpIHtcbiAgICAgIHJldHVybiBjaGFpbih0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgY2hhaW5lZCBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgd3JhcHBlZCByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb21taXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMl07XG4gICAgICogdmFyIHdyYXBwZWQgPSBfKGFycmF5KS5wdXNoKDMpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogd3JhcHBlZCA9IHdyYXBwZWQuY29tbWl0KCk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogd3JhcHBlZC5sYXN0KCk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDb21taXQoKSB7XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodGhpcy52YWx1ZSgpLCB0aGlzLl9fY2hhaW5fXyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhcnJheSBqb2luaW5nIGEgd3JhcHBlZCBhcnJheSB3aXRoIGFueSBhZGRpdGlvbmFsIGFycmF5c1xuICAgICAqIGFuZC9vciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb25jYXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjb25jYXRlbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxXTtcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oYXJyYXkpLmNvbmNhdCgyLCBbM10sIFtbNF1dKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHdyYXBwZWQudmFsdWUoKSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIFs0XV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKi9cbiAgICB2YXIgd3JhcHBlckNvbmNhdCA9IHJlc3RQYXJhbShmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICAgIHZhbHVlcyA9IGJhc2VGbGF0dGVuKHZhbHVlcyk7XG4gICAgICByZXR1cm4gdGhpcy50aHJ1KGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICAgIHJldHVybiBhcnJheUNvbmNhdChpc0FycmF5KGFycmF5KSA/IGFycmF5IDogW3RvT2JqZWN0KGFycmF5KV0sIHZhbHVlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgY2hhaW5lZCBzZXF1ZW5jZSBwbGFudGluZyBgdmFsdWVgIGFzIHRoZSB3cmFwcGVkIHZhbHVlLlxuICAgICAqXG4gICAgICogQG5hbWUgcGxhbnRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMl07XG4gICAgICogdmFyIHdyYXBwZWQgPSBfKGFycmF5KS5tYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiBNYXRoLnBvdyh2YWx1ZSwgMik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiB2YXIgb3RoZXIgPSBbMywgNF07XG4gICAgICogdmFyIG90aGVyV3JhcHBlZCA9IHdyYXBwZWQucGxhbnQob3RoZXIpO1xuICAgICAqXG4gICAgICogb3RoZXJXcmFwcGVkLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzksIDE2XVxuICAgICAqXG4gICAgICogd3JhcHBlZC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsxLCA0XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJQbGFudCh2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzO1xuXG4gICAgICB3aGlsZSAocGFyZW50IGluc3RhbmNlb2YgYmFzZUxvZGFzaCkge1xuICAgICAgICB2YXIgY2xvbmUgPSB3cmFwcGVyQ2xvbmUocGFyZW50KTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gY2xvbmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gY2xvbmU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZpb3VzID0gY2xvbmU7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5fX3dyYXBwZWRfXztcbiAgICAgIH1cbiAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVyc2VzIHRoZSB3cmFwcGVkIGFycmF5IHNvIHRoZSBmaXJzdCBlbGVtZW50IGJlY29tZXMgdGhlIGxhc3QsIHRoZVxuICAgICAqIHNlY29uZCBlbGVtZW50IGJlY29tZXMgdGhlIHNlY29uZCB0byBsYXN0LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyB0aGUgd3JhcHBlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldmVyc2VcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDaGFpblxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfKGFycmF5KS5yZXZlcnNlKCkudmFsdWUoKVxuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJSZXZlcnNlKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXztcblxuICAgICAgdmFyIGludGVyY2VwdG9yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICh3cmFwcGVkICYmIHdyYXBwZWQuX19kaXJfXyA8IDApID8gdmFsdWUgOiB2YWx1ZS5yZXZlcnNlKCk7XG4gICAgICB9O1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgdmFyIHdyYXBwZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSB7XG4gICAgICAgICAgd3JhcHBlZCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwcGVkID0gd3JhcHBlZC5yZXZlcnNlKCk7XG4gICAgICAgIHdyYXBwZWQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZWQsIHRoaXMuX19jaGFpbl9fKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnRocnUoaW50ZXJjZXB0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIHRoZSByZXN1bHQgb2YgY29lcmNpbmcgdGhlIHVud3JhcHBlZCB2YWx1ZSB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRvU3RyaW5nXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ2hhaW5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb2VyY2VkIHN0cmluZyB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMiwgM10pLnRvU3RyaW5nKCk7XG4gICAgICogLy8gPT4gJzEsMiwzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJUb1N0cmluZygpIHtcbiAgICAgIHJldHVybiAodGhpcy52YWx1ZSgpICsgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBjaGFpbmVkIHNlcXVlbmNlIHRvIGV4dHJhY3QgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHZhbHVlXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgcnVuLCB0b0pTT04sIHZhbHVlT2ZcbiAgICAgKiBAY2F0ZWdvcnkgQ2hhaW5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKFsxLCAyLCAzXSkudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyVmFsdWUoKSB7XG4gICAgICByZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZSh0aGlzLl9fd3JhcHBlZF9fLCB0aGlzLl9fYWN0aW9uc19fKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleXMsIG9yIGluZGV4ZXMsXG4gICAgICogb2YgYGNvbGxlY3Rpb25gLiBLZXlzIG1heSBiZSBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBhcmd1bWVudHMgb3IgYXMgYXJyYXlzXG4gICAgICogb2Yga2V5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW118c3RyaW5nfHN0cmluZ1tdKX0gW3Byb3BzXSBUaGUgcHJvcGVydHkgbmFtZXNcbiAgICAgKiAgb3IgaW5kZXhlcyBvZiBlbGVtZW50cyB0byBwaWNrLCBzcGVjaWZpZWQgaW5kaXZpZHVhbGx5IG9yIGluIGFycmF5cy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwaWNrZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uYXQoWydhJywgJ2InLCAnYyddLCBbMCwgMl0pO1xuICAgICAqIC8vID0+IFsnYScsICdjJ11cbiAgICAgKlxuICAgICAqIF8uYXQoWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ10sIDAsIDIpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIHZhciBhdCA9IHJlc3RQYXJhbShmdW5jdGlvbihjb2xsZWN0aW9uLCBwcm9wcykge1xuICAgICAgcmV0dXJuIGJhc2VBdChjb2xsZWN0aW9uLCBiYXNlRmxhdHRlbihwcm9wcykpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJvdWdoIGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlXG4gICAgICogb2YgZWFjaCBrZXkgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUga2V5IHdhcyByZXR1cm5lZCBieSBgaXRlcmF0ZWVgLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNvdW50QnkoWzQuMywgNi4xLCA2LjRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gTWF0aC5mbG9vcihuKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICc0JzogMSwgJzYnOiAyIH1cbiAgICAgKlxuICAgICAqIF8uY291bnRCeShbNC4zLCA2LjEsIDYuNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiB0aGlzLmZsb29yKG4pO1xuICAgICAqIH0sIE1hdGgpO1xuICAgICAqIC8vID0+IHsgJzQnOiAxLCAnNic6IDIgfVxuICAgICAqXG4gICAgICogXy5jb3VudEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICogLy8gPT4geyAnMyc6IDIsICc1JzogMSB9XG4gICAgICovXG4gICAgdmFyIGNvdW50QnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkgPyArK3Jlc3VsdFtrZXldIDogKHJlc3VsdFtrZXldID0gMSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYWxsKiogZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIFRoZSBwcmVkaWNhdGUgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICAgICAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGFsbFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ldmVyeShbdHJ1ZSwgMSwgbnVsbCwgJ3llcyddLCBCb29sZWFuKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZXZlcnkodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5ldmVyeSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXZlcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUV2ZXJ5IDogYmFzZUV2ZXJ5O1xuICAgICAgaWYgKHRoaXNBcmcgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSkge1xuICAgICAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAnZnVuY3Rpb24nIHx8IHRoaXNBcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcmVkaWNhdGUgPSBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgcHJlZGljYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICAgICAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgcHJlZGljYXRlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgc2VsZWN0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgcHJlZGljYXRlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5maWx0ZXIoWzQsIDUsIDZdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbNCwgNl1cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScsIGZhbHNlKSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyk7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAgICAgKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZFxuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGRldGVjdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKGNocikge1xuICAgICAqICAgcmV0dXJuIGNoci5hZ2UgPCA0MDtcbiAgICAgKiB9KSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucmVzdWx0KF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnJlc3VsdChfLmZpbmQodXNlcnMsICdhY3RpdmUnLCBmYWxzZSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucmVzdWx0KF8uZmluZCh1c2VycywgJ2FjdGl2ZScpLCAndXNlcicpO1xuICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICovXG4gICAgdmFyIGZpbmQgPSBjcmVhdGVGaW5kKGJhc2VFYWNoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3QoWzEsIDIsIDMsIDRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgdmFyIGZpbmRMYXN0ID0gY3JlYXRlRmluZChiYXNlRWFjaFJpZ2h0LCB0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCBhbmQgdGhlXG4gICAgICogc291cmNlIG9iamVjdCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGVxdWl2YWxlbnQgcHJvcGVydHlcbiAgICAgKiB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYm9vbGVhbnMsIGBEYXRlYCBvYmplY3RzLFxuICAgICAqIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsIGFuZCBzdHJpbmdzLiBPYmplY3RzIGFyZSBjb21wYXJlZCBieVxuICAgICAqIHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGb3IgY29tcGFyaW5nIGEgc2luZ2xlXG4gICAgICogb3duIG9yIGluaGVyaXRlZCBwcm9wZXJ0eSB2YWx1ZSBzZWUgYF8ubWF0Y2hlc1Byb3BlcnR5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KF8uZmluZFdoZXJlKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gJ2Jhcm5leSdcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KF8uZmluZFdoZXJlKHVzZXJzLCB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0pLCAndXNlcicpO1xuICAgICAqIC8vID0+ICdmcmVkJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRXaGVyZShjb2xsZWN0aW9uLCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBmaW5kKGNvbGxlY3Rpb24sIGJhc2VNYXRjaGVzKHNvdXJjZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGludm9raW5nIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gICAgICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5XG4gICAgICogYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBBcyB3aXRoIG90aGVyIFwiQ29sbGVjdGlvbnNcIiBtZXRob2RzLCBvYmplY3RzIHdpdGggYSBcImxlbmd0aFwiIHByb3BlcnR5XG4gICAgICogYXJlIGl0ZXJhdGVkIGxpa2UgYXJyYXlzLiBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yIGBfLmZvckluYCBvciBgXy5mb3JPd25gXG4gICAgICogbWF5IGJlIHVzZWQgZm9yIG9iamVjdCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgZWFjaFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fHN0cmluZ30gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oWzEsIDJdKS5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKG4pO1xuICAgICAqIH0pLnZhbHVlKCk7XG4gICAgICogLy8gPT4gbG9ncyBlYWNoIHZhbHVlIGZyb20gbGVmdCB0byByaWdodCBhbmQgcmV0dXJucyB0aGUgYXJyYXlcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaCh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKG4sIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2cobiwga2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBsb2dzIGVhY2ggdmFsdWUta2V5IHBhaXIgYW5kIHJldHVybnMgdGhlIG9iamVjdCAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciBmb3JFYWNoID0gY3JlYXRlRm9yRWFjaChhcnJheUVhY2gsIGJhc2VFYWNoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yRWFjaGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgZWFjaFJpZ2h0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R8c3RyaW5nfSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMl0pLmZvckVhY2hSaWdodChmdW5jdGlvbihuKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhuKTtcbiAgICAgKiB9KS52YWx1ZSgpO1xuICAgICAqIC8vID0+IGxvZ3MgZWFjaCB2YWx1ZSBmcm9tIHJpZ2h0IHRvIGxlZnQgYW5kIHJldHVybnMgdGhlIGFycmF5XG4gICAgICovXG4gICAgdmFyIGZvckVhY2hSaWdodCA9IGNyZWF0ZUZvckVhY2goYXJyYXlFYWNoUmlnaHQsIGJhc2VFYWNoUmlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJvdWdoIGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlXG4gICAgICogb2YgZWFjaCBrZXkgaXMgYW4gYXJyYXkgb2YgdGhlIGVsZW1lbnRzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICAgICAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3JvdXBCeShbNC4yLCA2LjEsIDYuNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBNYXRoLmZsb29yKG4pO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJzQnOiBbNC4yXSwgJzYnOiBbNi4xLCA2LjRdIH1cbiAgICAgKlxuICAgICAqIF8uZ3JvdXBCeShbNC4yLCA2LjEsIDYuNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiB0aGlzLmZsb29yKG4pO1xuICAgICAqIH0sIE1hdGgpO1xuICAgICAqIC8vID0+IHsgJzQnOiBbNC4yXSwgJzYnOiBbNi4xLCA2LjRdIH1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5ncm91cEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICogLy8gPT4geyAnMyc6IFsnb25lJywgJ3R3byddLCAnNSc6IFsndGhyZWUnXSB9XG4gICAgICovXG4gICAgdmFyIGdyb3VwQnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gYGNvbGxlY3Rpb25gIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCBpcyB1c2VkIGFzIHRoZSBvZmZzZXRcbiAgICAgKiBmcm9tIHRoZSBlbmQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGNvbnRhaW5zLCBpbmNsdWRlXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2VhcmNoLlxuICAgICAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ucmVkdWNlYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoeyAndXNlcic6ICdmcmVkJywgJ2FnZSc6IDQwIH0sICdmcmVkJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcygncGViYmxlcycsICdlYicpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbmNsdWRlcyhjb2xsZWN0aW9uLCB0YXJnZXQsIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uID8gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pIDogMDtcbiAgICAgIGlmICghaXNMZW5ndGgobGVuZ3RoKSkge1xuICAgICAgICBjb2xsZWN0aW9uID0gdmFsdWVzKGNvbGxlY3Rpb24pO1xuICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbCh0YXJnZXQsIGZyb21JbmRleCwgZ3VhcmQpKSkge1xuICAgICAgICBmcm9tSW5kZXggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJvbUluZGV4ID0gZnJvbUluZGV4IDwgMCA/IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApIDogKGZyb21JbmRleCB8fCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAodHlwZW9mIGNvbGxlY3Rpb24gPT0gJ3N0cmluZycgfHwgIWlzQXJyYXkoY29sbGVjdGlvbikgJiYgaXNTdHJpbmcoY29sbGVjdGlvbikpXG4gICAgICAgID8gKGZyb21JbmRleCA8PSBsZW5ndGggJiYgY29sbGVjdGlvbi5pbmRleE9mKHRhcmdldCwgZnJvbUluZGV4KSA+IC0xKVxuICAgICAgICA6ICghIWxlbmd0aCAmJiBnZXRJbmRleE9mKGNvbGxlY3Rpb24sIHRhcmdldCwgZnJvbUluZGV4KSA+IC0xKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocm91Z2ggYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVcbiAgICAgKiBvZiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGZ1bmN0aW9uIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIga2V5RGF0YSA9IFtcbiAgICAgKiAgIHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LFxuICAgICAqICAgeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmluZGV4Qnkoa2V5RGF0YSwgJ2RpcicpO1xuICAgICAqIC8vID0+IHsgJ2xlZnQnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ3JpZ2h0JzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gICAgICpcbiAgICAgKiBfLmluZGV4Qnkoa2V5RGF0YSwgZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvYmplY3QuY29kZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAnZCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICAgICAqXG4gICAgICogXy5pbmRleEJ5KGtleURhdGEsIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAqICAgcmV0dXJuIHRoaXMuZnJvbUNoYXJDb2RlKG9iamVjdC5jb2RlKTtcbiAgICAgKiB9LCBTdHJpbmcpO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ2QnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAgICAgKi9cbiAgICB2YXIgaW5kZXhCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gLCByZXR1cm5pbmdcbiAgICAgKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBhcmUgcHJvdmlkZWQgdG8gZWFjaCBpbnZva2VkIG1ldGhvZC4gSWYgYG1ldGhvZE5hbWVgIGlzIGEgZnVuY3Rpb24gaXQgaXNcbiAgICAgKiBpbnZva2VkIGZvciwgYW5kIGB0aGlzYCBib3VuZCB0bywgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZSBvclxuICAgICAqICB0aGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW52b2tlKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gICAgICogLy8gPT4gW1sxLCA1LCA3XSwgWzEsIDIsIDNdXVxuICAgICAqXG4gICAgICogXy5pbnZva2UoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICAgICAqIC8vID0+IFtbJzEnLCAnMicsICczJ10sIFsnNCcsICc1JywgJzYnXV1cbiAgICAgKi9cbiAgICB2YXIgaW52b2tlID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHBhdGgsIGFyZ3MpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICAgICAgaXNQcm9wID0gaXNLZXkocGF0aCksXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBwYXRoIDogKChpc1Byb3AgJiYgdmFsdWUgIT0gbnVsbCkgPyB2YWx1ZVtwYXRoXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHJlc3VsdFsrK2luZGV4XSA9IGZ1bmMgPyBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKSA6IGludm9rZVBhdGgodmFsdWUsIHBhdGgsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocm91Z2hcbiAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogSWYgYSBwcm9wZXJ0eSBuYW1lIGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSBpcyBhbHNvIHByb3ZpZGVkIGZvciBgdGhpc0FyZ2AgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc1Byb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYSBtYXRjaGluZyBwcm9wZXJ0eVxuICAgICAqIHZhbHVlLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gICAgICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gICAgICpcbiAgICAgKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAgICAgKiBgYXJ5YCwgYGNhbGxiYWNrYCwgYGNodW5rYCwgYGNsb25lYCwgYGNyZWF0ZWAsIGBjdXJyeWAsIGBjdXJyeVJpZ2h0YCxcbiAgICAgKiBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLCBgZmlsbGAsIGBmbGF0dGVuYCwgYGludmVydGAsIGBtYXhgLCBgbWluYCxcbiAgICAgKiBgcGFyc2VJbnRgLCBgc2xpY2VgLCBgc29ydEJ5YCwgYHRha2VgLCBgdGFrZVJpZ2h0YCwgYHRlbXBsYXRlYCwgYHRyaW1gLFxuICAgICAqIGB0cmltTGVmdGAsIGB0cmltUmlnaHRgLCBgdHJ1bmNgLCBgcmFuZG9tYCwgYHJhbmdlYCwgYHNhbXBsZWAsIGBzb21lYCxcbiAgICAgKiBgc3VtYCwgYHVuaXFgLCBhbmQgYHdvcmRzYFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGNvbGxlY3RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHRpbWVzVGhyZWUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiAzO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8ubWFwKFsxLCAyXSwgdGltZXNUaHJlZSk7XG4gICAgICogLy8gPT4gWzMsIDZdXG4gICAgICpcbiAgICAgKiBfLm1hcCh7ICdhJzogMSwgJ2InOiAyIH0sIHRpbWVzVGhyZWUpO1xuICAgICAqIC8vID0+IFszLCA2XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLm1hcCh1c2VycywgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5TWFwIDogYmFzZU1hcDtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgaXRlcmF0ZWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byB0d28gZ3JvdXBzLCB0aGUgZmlyc3Qgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IsIHdoaWxlIHRoZSBzZWNvbmQgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgYm91bmRcbiAgICAgKiB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgcHJlZGljYXRlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFydGl0aW9uKFsxLCAyLCAzXSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFtbMSwgM10sIFsyXV1cbiAgICAgKlxuICAgICAqIF8ucGFydGl0aW9uKFsxLjIsIDIuMywgMy40XSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIHRoaXMuZmxvb3IobikgJSAyO1xuICAgICAqIH0sIE1hdGgpO1xuICAgICAqIC8vID0+IFtbMS4yLCAzLjRdLCBbMi4zXV1cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIHZhciBtYXBwZXIgPSBmdW5jdGlvbihhcnJheSkge1xuICAgICAqICAgcmV0dXJuIF8ucGx1Y2soYXJyYXksICd1c2VyJyk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLm1hcChfLnBhcnRpdGlvbih1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IGZhbHNlIH0pLCBtYXBwZXIpO1xuICAgICAqIC8vID0+IFtbJ3BlYmJsZXMnXSwgWydiYXJuZXknLCAnZnJlZCddXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5tYXAoXy5wYXJ0aXRpb24odXNlcnMsICdhY3RpdmUnLCBmYWxzZSksIG1hcHBlcik7XG4gICAgICogLy8gPT4gW1snYmFybmV5JywgJ3BlYmJsZXMnXSwgWydmcmVkJ11dXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ubWFwKF8ucGFydGl0aW9uKHVzZXJzLCAnYWN0aXZlJyksIG1hcHBlcik7XG4gICAgICogLy8gPT4gW1snZnJlZCddLCBbJ2Jhcm5leScsICdwZWJibGVzJ11dXG4gICAgICovXG4gICAgdmFyIHBhcnRpdGlvbiA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHRba2V5ID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uKCkgeyByZXR1cm4gW1tdLCBbXV07IH0pO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgYHBhdGhgIGZyb20gYWxsIGVsZW1lbnRzIGluIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gcGx1Y2suXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ucGx1Y2sodXNlcnMsICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiB2YXIgdXNlckluZGV4ID0gXy5pbmRleEJ5KHVzZXJzLCAndXNlcicpO1xuICAgICAqIF8ucGx1Y2sodXNlckluZGV4LCAnYWdlJyk7XG4gICAgICogLy8gPT4gWzM2LCA0MF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwbHVjayhjb2xsZWN0aW9uLCBwYXRoKSB7XG4gICAgICByZXR1cm4gbWFwKGNvbGxlY3Rpb24sIHByb3BlcnR5KHBhdGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWR1Y2VzIGBjb2xsZWN0aW9uYCB0byBhIHZhbHVlIHdoaWNoIGlzIHRoZSBhY2N1bXVsYXRlZCByZXN1bHQgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhyb3VnaCBgaXRlcmF0ZWVgLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLiBJZiBgYWNjdW11bGF0b3JgXG4gICAgICogaXMgbm90IHByb3ZpZGVkIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsXG4gICAgICogdmFsdWUuIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOlxuICAgICAqIChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgKiBgXy5yZWR1Y2VgLCBgXy5yZWR1Y2VSaWdodGAsIGFuZCBgXy50cmFuc2Zvcm1gLlxuICAgICAqXG4gICAgICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gICAgICogYGFzc2lnbmAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgaW5jbHVkZXNgLCBgbWVyZ2VgLCBgc29ydEJ5QWxsYCxcbiAgICAgKiBhbmQgYHNvcnRCeU9yZGVyYFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGZvbGRsLCBpbmplY3RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZWR1Y2UoWzEsIDJdLCBmdW5jdGlvbih0b3RhbCwgbikge1xuICAgICAqICAgcmV0dXJuIHRvdGFsICsgbjtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnJlZHVjZSh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHJlc3VsdCwgbiwga2V5KSB7XG4gICAgICogICByZXN1bHRba2V5XSA9IG4gKiAzO1xuICAgICAqICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgKiB9LCB7fSk7XG4gICAgICogLy8gPT4geyAnYSc6IDMsICdiJzogNiB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgdmFyIHJlZHVjZSA9IGNyZWF0ZVJlZHVjZShhcnJheVJlZHVjZSwgYmFzZUVhY2gpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yZWR1Y2VgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGZvbGRyXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFtbMCwgMV0sIFsyLCAzXSwgWzQsIDVdXTtcbiAgICAgKlxuICAgICAqIF8ucmVkdWNlUmlnaHQoYXJyYXksIGZ1bmN0aW9uKGZsYXR0ZW5lZCwgb3RoZXIpIHtcbiAgICAgKiAgIHJldHVybiBmbGF0dGVuZWQuY29uY2F0KG90aGVyKTtcbiAgICAgKiB9LCBbXSk7XG4gICAgICogLy8gPT4gWzQsIDUsIDIsIDMsIDAsIDFdXG4gICAgICovXG4gICAgdmFyIHJlZHVjZVJpZ2h0ID0gY3JlYXRlUmVkdWNlKGFycmF5UmVkdWNlUmlnaHQsIGJhc2VFYWNoUmlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmZpbHRlcmA7IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYFxuICAgICAqIHRoYXQgYHByZWRpY2F0ZWAgZG9lcyAqKm5vdCoqIHJldHVybiB0cnV0aHkgZm9yLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgcHJlZGljYXRlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZWplY3QoWzEsIDIsIDMsIDRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbMSwgM11cbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5tYXRjaGVzYCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8ucmVqZWN0KHVzZXJzLCB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5wbHVjayhfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScsIGZhbHNlKSwgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLnByb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLnBsdWNrKF8ucmVqZWN0KHVzZXJzLCAnYWN0aXZlJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlamVjdChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyk7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSByYW5kb20gZWxlbWVudCBvciBgbmAgcmFuZG9tIGVsZW1lbnRzIGZyb20gYSBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbl0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBzYW1wbGUocykuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2FtcGxlKFsxLCAyLCAzLCA0XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogXy5zYW1wbGUoWzEsIDIsIDMsIDRdLCAyKTtcbiAgICAgKiAvLyA9PiBbMywgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzYW1wbGUoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIHtcbiAgICAgIGlmIChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSA6IG4gPT0gbnVsbCkge1xuICAgICAgICBjb2xsZWN0aW9uID0gdG9JdGVyYWJsZShjb2xsZWN0aW9uKTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbGVuZ3RoID4gMCA/IGNvbGxlY3Rpb25bYmFzZVJhbmRvbSgwLCBsZW5ndGggLSAxKV0gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSB0b0FycmF5KGNvbGxlY3Rpb24pLFxuICAgICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGgsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgICAgbiA9IG5hdGl2ZU1pbihuIDwgMCA/IDAgOiAoK24gfHwgMCksIGxlbmd0aCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICAgICAgdmFyIHJhbmQgPSBiYXNlUmFuZG9tKGluZGV4LCBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgdmFsdWUgPSByZXN1bHRbcmFuZF07XG5cbiAgICAgICAgcmVzdWx0W3JhbmRdID0gcmVzdWx0W2luZGV4XTtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygc2h1ZmZsZWQgdmFsdWVzLCB1c2luZyBhIHZlcnNpb24gb2YgdGhlXG4gICAgICogW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzaHVmZmxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNodWZmbGUoWzEsIDIsIDMsIDRdKTtcbiAgICAgKiAvLyA9PiBbNCwgMSwgMywgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaHVmZmxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBzYW1wbGUoY29sbGVjdGlvbiwgUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNpemUgb2YgYGNvbGxlY3Rpb25gIGJ5IHJldHVybmluZyBpdHMgbGVuZ3RoIGZvciBhcnJheS1saWtlXG4gICAgICogdmFsdWVzIG9yIHRoZSBudW1iZXIgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBmb3Igb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc2l6ZSBvZiBgY29sbGVjdGlvbmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2l6ZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uc2l6ZSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8uc2l6ZSgncGViYmxlcycpO1xuICAgICAqIC8vID0+IDdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uID8gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pIDogMDtcbiAgICAgIHJldHVybiBpc0xlbmd0aChsZW5ndGgpID8gbGVuZ3RoIDoga2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFueSoqIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGFzIHNvb24gYXMgaXQgZmluZHMgYSBwYXNzaW5nIHZhbHVlIGFuZCBkb2VzIG5vdCBpdGVyYXRlXG4gICAgICogb3ZlciB0aGUgZW50aXJlIGNvbGxlY3Rpb24uIFRoZSBwcmVkaWNhdGUgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGFueVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYHByZWRpY2F0ZWAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29tZShbbnVsbCwgMCwgJ3llcycsIGZhbHNlXSwgQm9vbGVhbik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc2AgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5zb21lKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5zb21lKHVzZXJzLCAnYWN0aXZlJywgZmFsc2UpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5zb21lKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNvbWUgOiBiYXNlU29tZTtcbiAgICAgIGlmICh0aGlzQXJnICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgdGhpc0FyZykpIHtcbiAgICAgICAgcHJlZGljYXRlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT0gJ2Z1bmN0aW9uJyB8fCB0aGlzQXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cywgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgcmVzdWx0cyBvZlxuICAgICAqIHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aHJvdWdoIGBpdGVyYXRlZWAuIFRoaXMgbWV0aG9kIHBlcmZvcm1zXG4gICAgICogYSBzdGFibGUgc29ydCwgdGhhdCBpcywgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzb3J0IG9yZGVyIG9mIGVxdWFsIGVsZW1lbnRzLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWRcbiAgICAgKiAgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydEJ5KFsxLCAyLCAzXSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIE1hdGguc2luKG4pO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFszLCAxLCAyXVxuICAgICAqXG4gICAgICogXy5zb3J0QnkoWzEsIDIsIDNdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gdGhpcy5zaW4obik7XG4gICAgICogfSwgTWF0aCk7XG4gICAgICogLy8gPT4gWzMsIDEsIDJdXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ucGx1Y2soXy5zb3J0QnkodXNlcnMsICd1c2VyJyksICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0QnkoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXNBcmcgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICBpdGVyYXRlZSA9IGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VNYXAoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBjb21wYXJlQXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRCeWAgZXhjZXB0IHRoYXQgaXQgY2FuIHNvcnQgYnkgbXVsdGlwbGUgaXRlcmF0ZWVzXG4gICAgICogb3IgcHJvcGVydHkgbmFtZXMuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGFuIGl0ZXJhdGVlIHRoZSBjcmVhdGVkIGBfLnByb3BlcnR5YFxuICAgICAqIHN0eWxlIGNhbGxiYWNrIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBhbiBpdGVyYXRlZSB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXXxPYmplY3R8T2JqZWN0W118c3RyaW5nfHN0cmluZ1tdKX0gaXRlcmF0ZWVzXG4gICAgICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieSwgc3BlY2lmaWVkIGFzIGluZGl2aWR1YWwgdmFsdWVzIG9yIGFycmF5cyBvZiB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQyIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKF8uc29ydEJ5QWxsKHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10pLCBfLnZhbHVlcyk7XG4gICAgICogLy8gPT4gW1snYmFybmV5JywgMzRdLCBbJ2Jhcm5leScsIDM2XSwgWydmcmVkJywgNDJdLCBbJ2ZyZWQnLCA0OF1dXG4gICAgICpcbiAgICAgKiBfLm1hcChfLnNvcnRCeUFsbCh1c2VycywgJ3VzZXInLCBmdW5jdGlvbihjaHIpIHtcbiAgICAgKiAgIHJldHVybiBNYXRoLmZsb29yKGNoci5hZ2UgLyAxMCk7XG4gICAgICogfSksIF8udmFsdWVzKTtcbiAgICAgKiAvLyA9PiBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDQyXV1cbiAgICAgKi9cbiAgICB2YXIgc29ydEJ5QWxsID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlcykge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgZ3VhcmQgPSBpdGVyYXRlZXNbMl07XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0sIGd1YXJkKSkge1xuICAgICAgICBpdGVyYXRlZXMubGVuZ3RoID0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU29ydEJ5T3JkZXIoY29sbGVjdGlvbiwgYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzKSwgW10pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0QnlBbGxgIGV4Y2VwdCB0aGF0IGl0IGFsbG93cyBzcGVjaWZ5aW5nIHRoZVxuICAgICAqIHNvcnQgb3JkZXJzIG9mIHRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS4gSWYgYG9yZGVyc2AgaXMgdW5zcGVjaWZpZWQsIGFsbFxuICAgICAqIHZhbHVlcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLCBhIHZhbHVlIGlzIHNvcnRlZCBpblxuICAgICAqIGFzY2VuZGluZyBvcmRlciBpZiBpdHMgY29ycmVzcG9uZGluZyBvcmRlciBpcyBcImFzY1wiLCBhbmQgZGVzY2VuZGluZyBpZiBcImRlc2NcIi5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYW4gaXRlcmF0ZWUgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgZm9yIGFuIGl0ZXJhdGVlIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IGl0ZXJhdGVlcyBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHBhcmFtIHtib29sZWFuW119IFtvcmRlcnNdIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ucmVkdWNlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQ4IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDIgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gc29ydCBieSBgdXNlcmAgaW4gYXNjZW5kaW5nIG9yZGVyIGFuZCBieSBgYWdlYCBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gICAgICogXy5tYXAoXy5zb3J0QnlPcmRlcih1c2VycywgWyd1c2VyJywgJ2FnZSddLCBbJ2FzYycsICdkZXNjJ10pLCBfLnZhbHVlcyk7XG4gICAgICogLy8gPT4gW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCA0Ml1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydEJ5T3JkZXIoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMsIGd1YXJkKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChpdGVyYXRlZXMsIG9yZGVycywgZ3VhcmQpKSB7XG4gICAgICAgIG9yZGVycyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBcnJheShpdGVyYXRlZXMpKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IGl0ZXJhdGVlcyA9PSBudWxsID8gW10gOiBbaXRlcmF0ZWVzXTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgIG9yZGVycyA9IG9yZGVycyA9PSBudWxsID8gW10gOiBbb3JkZXJzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU29ydEJ5T3JkZXIoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCBhbmQgdGhlXG4gICAgICogc291cmNlIG9iamVjdCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgZXF1aXZhbGVudFxuICAgICAqIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBib29sZWFucywgYERhdGVgIG9iamVjdHMsXG4gICAgICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgYW5kIHN0cmluZ3MuIE9iamVjdHMgYXJlIGNvbXBhcmVkIGJ5XG4gICAgICogdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZvciBjb21wYXJpbmcgYSBzaW5nbGVcbiAgICAgKiBvd24gb3IgaW5oZXJpdGVkIHByb3BlcnR5IHZhbHVlIHNlZSBgXy5tYXRjaGVzUHJvcGVydHlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2VhcmNoLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UsICdwZXRzJzogWydob3BweSddIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUsICdwZXRzJzogWydiYWJ5IHB1c3MnLCAnZGlubyddIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5wbHVjayhfLndoZXJlKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0pLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIF8ucGx1Y2soXy53aGVyZSh1c2VycywgeyAncGV0cyc6IFsnZGlubyddIH0pLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnZnJlZCddXG4gICAgICovXG4gICAgZnVuY3Rpb24gd2hlcmUoY29sbGVjdGlvbiwgc291cmNlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyKGNvbGxlY3Rpb24sIGJhc2VNYXRjaGVzKHNvdXJjZSkpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIFVuaXggZXBvY2hcbiAgICAgKiAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBEYXRlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gICAgICogfSwgXy5ub3coKSk7XG4gICAgICogLy8gPT4gbG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgZnVuY3Rpb24gdG8gYmUgaW52b2tlZFxuICAgICAqL1xuICAgIHZhciBub3cgPSBuYXRpdmVOb3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5iZWZvcmVgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICogYGZ1bmNgIG9uY2UgaXQgaXMgY2FsbGVkIGBuYCBvciBtb3JlIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxscyBiZWZvcmUgYGZ1bmNgIGlzIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNhdmVzID0gWydwcm9maWxlJywgJ3NldHRpbmdzJ107XG4gICAgICpcbiAgICAgKiB2YXIgZG9uZSA9IF8uYWZ0ZXIoc2F2ZXMubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdkb25lIHNhdmluZyEnKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaChzYXZlcywgZnVuY3Rpb24odHlwZSkge1xuICAgICAqICAgYXN5bmNTYXZlKHsgJ3R5cGUnOiB0eXBlLCAnY29tcGxldGUnOiBkb25lIH0pO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IGxvZ3MgJ2RvbmUgc2F2aW5nIScgYWZ0ZXIgdGhlIHR3byBhc3luYyBzYXZlcyBoYXZlIGNvbXBsZXRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFmdGVyKG4sIGZ1bmMpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIHRlbXAgPSBuO1xuICAgICAgICAgIG4gPSBmdW5jO1xuICAgICAgICAgIGZ1bmMgPSB0ZW1wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbiA9IG5hdGl2ZUlzRmluaXRlKG4gPSArbikgPyBuIDogMDtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKC0tbiA8IDEpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdXAgdG8gYG5gIGFyZ3VtZW50cyBpZ25vcmluZyBhbnlcbiAgICAgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IGNhcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy5hcnkocGFyc2VJbnQsIDEpKTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJ5KGZ1bmMsIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoZnVuYywgbiwgZ3VhcmQpKSB7XG4gICAgICAgIG4gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBuID0gKGZ1bmMgJiYgbiA9PSBudWxsKSA/IGZ1bmMubGVuZ3RoIDogbmF0aXZlTWF4KCtuIHx8IDAsIDApO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIoZnVuYywgQVJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHNcbiAgICAgKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQgaXMgY2FsbGVkIGxlc3MgdGhhbiBgbmAgdGltZXMuIFN1YnNlcXVlbnRcbiAgICAgKiBjYWxscyB0byB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgaW52b2NhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYXQgd2hpY2ggYGZ1bmNgIGlzIG5vIGxvbmdlciBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGpRdWVyeSgnI2FkZCcpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAgICAgKiAvLyA9PiBhbGxvd3MgYWRkaW5nIHVwIHRvIDQgY29udGFjdHMgdG8gdGhlIGxpc3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiZWZvcmUobiwgZnVuYykge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIHRlbXAgPSBuO1xuICAgICAgICAgIG4gPSBmdW5jO1xuICAgICAgICAgIGZ1bmMgPSB0ZW1wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoLS1uID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobiA8PSAxKSB7XG4gICAgICAgICAgZnVuYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgcHJlcGVuZHMgYW55IGFkZGl0aW9uYWwgYF8uYmluZGAgYXJndW1lbnRzIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZVxuICAgICAqIGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGBfLmJpbmQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gICAgICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBuYXRpdmUgYEZ1bmN0aW9uI2JpbmRgIHRoaXMgbWV0aG9kIGRvZXMgbm90IHNldCB0aGUgXCJsZW5ndGhcIlxuICAgICAqIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJpbmQuXG4gICAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBncmVldCA9IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnIH07XG4gICAgICpcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBwbGFjZWhvbGRlcnNcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgXywgJyEnKTtcbiAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICovXG4gICAgdmFyIGJpbmQgPSByZXN0UGFyYW0oZnVuY3Rpb24oZnVuYywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gQklORF9GTEFHO1xuICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkge1xuICAgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBiaW5kLnBsYWNlaG9sZGVyKTtcbiAgICAgICAgYml0bWFzayB8PSBQQVJUSUFMX0ZMQUc7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcihmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBtZXRob2RzIG9mIGFuIG9iamVjdCB0byB0aGUgb2JqZWN0IGl0c2VsZiwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nXG4gICAgICogbWV0aG9kLiBNZXRob2QgbmFtZXMgbWF5IGJlIHNwZWNpZmllZCBhcyBpbmRpdmlkdWFsIGFyZ3VtZW50cyBvciBhcyBhcnJheXNcbiAgICAgKiBvZiBtZXRob2QgbmFtZXMuIElmIG5vIG1ldGhvZCBuYW1lcyBhcmUgcHJvdmlkZWQgYWxsIGVudW1lcmFibGUgZnVuY3Rpb25cbiAgICAgKiBwcm9wZXJ0aWVzLCBvd24gYW5kIGluaGVyaXRlZCwgb2YgYG9iamVjdGAgYXJlIGJvdW5kLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gYmluZCBhbmQgYXNzaWduIHRoZSBib3VuZCBtZXRob2RzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFttZXRob2ROYW1lc10gVGhlIG9iamVjdCBtZXRob2QgbmFtZXMgdG8gYmluZCxcbiAgICAgKiAgc3BlY2lmaWVkIGFzIGluZGl2aWR1YWwgbWV0aG9kIG5hbWVzIG9yIGFycmF5cyBvZiBtZXRob2QgbmFtZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHZpZXcgPSB7XG4gICAgICogICAnbGFiZWwnOiAnZG9jcycsXG4gICAgICogICAnb25DbGljayc6IGZ1bmN0aW9uKCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnY2xpY2tlZCAnICsgdGhpcy5sYWJlbCk7XG4gICAgICogICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8uYmluZEFsbCh2aWV3KTtcbiAgICAgKiBqUXVlcnkoJyNkb2NzJykub24oJ2NsaWNrJywgdmlldy5vbkNsaWNrKTtcbiAgICAgKiAvLyA9PiBsb2dzICdjbGlja2VkIGRvY3MnIHdoZW4gdGhlIGVsZW1lbnQgaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIHZhciBiaW5kQWxsID0gcmVzdFBhcmFtKGZ1bmN0aW9uKG9iamVjdCwgbWV0aG9kTmFtZXMpIHtcbiAgICAgIG1ldGhvZE5hbWVzID0gbWV0aG9kTmFtZXMubGVuZ3RoID8gYmFzZUZsYXR0ZW4obWV0aG9kTmFtZXMpIDogZnVuY3Rpb25zKG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IG1ldGhvZE5hbWVzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IG1ldGhvZE5hbWVzW2luZGV4XTtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBjcmVhdGVXcmFwcGVyKG9iamVjdFtrZXldLCBCSU5EX0ZMQUcsIG9iamVjdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBvYmplY3Rba2V5XWAgYW5kIHByZXBlbmRzXG4gICAgICogYW55IGFkZGl0aW9uYWwgYF8uYmluZEtleWAgYXJndW1lbnRzIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSBib3VuZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgXy5iaW5kYCBieSBhbGxvd2luZyBib3VuZCBmdW5jdGlvbnMgdG8gcmVmZXJlbmNlXG4gICAgICogbWV0aG9kcyB0aGF0IG1heSBiZSByZWRlZmluZWQgb3IgZG9uJ3QgeWV0IGV4aXN0LlxuICAgICAqIFNlZSBbUGV0ZXIgTWljaGF1eCdzIGFydGljbGVdKGh0dHA6Ly9wZXRlci5taWNoYXV4LmNhL2FydGljbGVzL2xhenktZnVuY3Rpb24tZGVmaW5pdGlvbi1wYXR0ZXJuKVxuICAgICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uYmluZEtleS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdGhlIG1ldGhvZCBiZWxvbmdzIHRvLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge1xuICAgICAqICAgJ3VzZXInOiAnZnJlZCcsXG4gICAgICogICAnZ3JlZXQnOiBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZEtleShvYmplY3QsICdncmVldCcsICdoaScpO1xuICAgICAqIGJvdW5kKCchJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQhJ1xuICAgICAqXG4gICAgICogb2JqZWN0LmdyZWV0ID0gZnVuY3Rpb24oZ3JlZXRpbmcsIHB1bmN0dWF0aW9uKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAneWEgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBib3VuZCgnIScpO1xuICAgICAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgcGxhY2Vob2xkZXJzXG4gICAgICogdmFyIGJvdW5kID0gXy5iaW5kS2V5KG9iamVjdCwgJ2dyZWV0JywgXywgJyEnKTtcbiAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGl5YSBmcmVkISdcbiAgICAgKi9cbiAgICB2YXIgYmluZEtleSA9IHJlc3RQYXJhbShmdW5jdGlvbihvYmplY3QsIGtleSwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gQklORF9GTEFHIHwgQklORF9LRVlfRkxBRztcbiAgICAgIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgYmluZEtleS5wbGFjZWhvbGRlcik7XG4gICAgICAgIGJpdG1hc2sgfD0gUEFSVElBTF9GTEFHO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIoa2V5LCBiaXRtYXNrLCBvYmplY3QsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgb25lIG9yIG1vcmUgYXJndW1lbnRzIG9mIGBmdW5jYCB0aGF0IHdoZW5cbiAgICAgKiBjYWxsZWQgZWl0aGVyIGludm9rZXMgYGZ1bmNgIHJldHVybmluZyBpdHMgcmVzdWx0LCBpZiBhbGwgYGZ1bmNgIGFyZ3VtZW50c1xuICAgICAqIGhhdmUgYmVlbiBwcm92aWRlZCwgb3IgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBvbmUgb3IgbW9yZSBvZiB0aGVcbiAgICAgKiByZW1haW5pbmcgYGZ1bmNgIGFyZ3VtZW50cywgYW5kIHNvIG9uLiBUaGUgYXJpdHkgb2YgYGZ1bmNgIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBpZiBgZnVuYy5sZW5ndGhgIGlzIG5vdCBzdWZmaWNpZW50LlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgY3VycmllZCA9IF8uY3VycnkoYWJjKTtcbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSkoMikoMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIpKDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyLCAzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHBsYWNlaG9sZGVyc1xuICAgICAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgdmFyIGN1cnJ5ID0gY3JlYXRlQ3VycnkoQ1VSUllfRkxBRyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmN1cnJ5YCBleGNlcHQgdGhhdCBhcmd1bWVudHMgYXJlIGFwcGxpZWQgdG8gYGZ1bmNgXG4gICAgICogaW4gdGhlIG1hbm5lciBvZiBgXy5wYXJ0aWFsUmlnaHRgIGluc3RlYWQgb2YgYF8ucGFydGlhbGAuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uY3VycnlSaWdodC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lcyBub3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5UmlnaHQoYWJjKTtcbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMykoMikoMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDIsIDMpKDEpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyLCAzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHBsYWNlaG9sZGVyc1xuICAgICAqIGN1cnJpZWQoMykoMSwgXykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgdmFyIGN1cnJ5UmlnaHQgPSBjcmVhdGVDdXJyeShDVVJSWV9SSUdIVF9GTEFHKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICAgICAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICAgICAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAgICAgKiBkZWxheWVkIGludm9jYXRpb25zLiBQcm92aWRlIGFuIG9wdGlvbnMgb2JqZWN0IHRvIGluZGljYXRlIHRoYXQgYGZ1bmNgXG4gICAgICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICAgICAqIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdFxuICAgICAqIGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpcyBpbnZva2VkXG4gICAgICogb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiBpc1xuICAgICAqIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAgICAgKlxuICAgICAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwOi8vZHJ1cGFsbW90aW9uLmNvbS9hcnRpY2xlL2RlYm91bmNlLWFuZC10aHJvdHRsZS12aXN1YWwtZXhwbGFuYXRpb24pXG4gICAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmdcbiAgICAgKiAgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF0gVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZVxuICAgICAqICBkZWxheWVkIGJlZm9yZSBpdCBpcyBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV0gU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmdcbiAgICAgKiAgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGF2b2lkIGNvc3RseSBjYWxjdWxhdGlvbnMgd2hpbGUgdGhlIHdpbmRvdyBzaXplIGlzIGluIGZsdXhcbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgXy5kZWJvdW5jZShjYWxjdWxhdGVMYXlvdXQsIDE1MCkpO1xuICAgICAqXG4gICAgICogLy8gaW52b2tlIGBzZW5kTWFpbGAgd2hlbiB0aGUgY2xpY2sgZXZlbnQgaXMgZmlyZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxsc1xuICAgICAqIGpRdWVyeSgnI3Bvc3Rib3gnKS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAgICAgKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAgICAgKiAgICd0cmFpbGluZyc6IGZhbHNlXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogLy8gZW5zdXJlIGBiYXRjaExvZ2AgaXMgaW52b2tlZCBvbmNlIGFmdGVyIDEgc2Vjb25kIG9mIGRlYm91bmNlZCBjYWxsc1xuICAgICAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAgICAgKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwge1xuICAgICAqICAgJ21heFdhaXQnOiAxMDAwXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogLy8gY2FuY2VsIGEgZGVib3VuY2VkIGNhbGxcbiAgICAgKiB2YXIgdG9kb0NoYW5nZXMgPSBfLmRlYm91bmNlKGJhdGNoTG9nLCAxMDAwKTtcbiAgICAgKiBPYmplY3Qub2JzZXJ2ZShtb2RlbHMudG9kbywgdG9kb0NoYW5nZXMpO1xuICAgICAqXG4gICAgICogT2JqZWN0Lm9ic2VydmUobW9kZWxzLCBmdW5jdGlvbihjaGFuZ2VzKSB7XG4gICAgICogICBpZiAoXy5maW5kKGNoYW5nZXMsIHsgJ3VzZXInOiAndG9kbycsICd0eXBlJzogJ2RlbGV0ZSd9KSkge1xuICAgICAqICAgICB0b2RvQ2hhbmdlcy5jYW5jZWwoKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9LCBbJ2RlbGV0ZSddKTtcbiAgICAgKlxuICAgICAqIC8vIC4uLmF0IHNvbWUgcG9pbnQgYG1vZGVscy50b2RvYCBpcyBjaGFuZ2VkXG4gICAgICogbW9kZWxzLnRvZG8uY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgKlxuICAgICAqIC8vIC4uLmJlZm9yZSAxIHNlY29uZCBoYXMgcGFzc2VkIGBtb2RlbHMudG9kb2AgaXMgZGVsZXRlZFxuICAgICAqIC8vIHdoaWNoIGNhbmNlbHMgdGhlIGRlYm91bmNlZCBgdG9kb0NoYW5nZXNgIGNhbGxcbiAgICAgKiBkZWxldGUgbW9kZWxzLnRvZG87XG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgICAgdmFyIGFyZ3MsXG4gICAgICAgICAgbWF4VGltZW91dElkLFxuICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICBzdGFtcCxcbiAgICAgICAgICB0aGlzQXJnLFxuICAgICAgICAgIHRpbWVvdXRJZCxcbiAgICAgICAgICB0cmFpbGluZ0NhbGwsXG4gICAgICAgICAgbGFzdENhbGxlZCA9IDAsXG4gICAgICAgICAgbWF4V2FpdCA9IGZhbHNlLFxuICAgICAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgd2FpdCA9IHdhaXQgPCAwID8gMCA6ICgrd2FpdCB8fCAwKTtcbiAgICAgIGlmIChvcHRpb25zID09PSB0cnVlKSB7XG4gICAgICAgIHZhciBsZWFkaW5nID0gdHJ1ZTtcbiAgICAgICAgdHJhaWxpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgICAgICBtYXhXYWl0ID0gJ21heFdhaXQnIGluIG9wdGlvbnMgJiYgbmF0aXZlTWF4KCtvcHRpb25zLm1heFdhaXQgfHwgMCwgd2FpdCk7XG4gICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhUaW1lb3V0SWQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQobWF4VGltZW91dElkKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0Q2FsbGVkID0gMDtcbiAgICAgICAgbWF4VGltZW91dElkID0gdGltZW91dElkID0gdHJhaWxpbmdDYWxsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjb21wbGV0ZShpc0NhbGxlZCwgaWQpIHtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgICAgfVxuICAgICAgICBtYXhUaW1lb3V0SWQgPSB0aW1lb3V0SWQgPSB0cmFpbGluZ0NhbGwgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpc0NhbGxlZCkge1xuICAgICAgICAgIGxhc3RDYWxsZWQgPSBub3coKTtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91dElkICYmICFtYXhUaW1lb3V0SWQpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzQXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkZWxheWVkKCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3coKSAtIHN0YW1wKTtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgICBjb21wbGV0ZSh0cmFpbGluZ0NhbGwsIG1heFRpbWVvdXRJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChkZWxheWVkLCByZW1haW5pbmcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG1heERlbGF5ZWQoKSB7XG4gICAgICAgIGNvbXBsZXRlKHRyYWlsaW5nLCB0aW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHN0YW1wID0gbm93KCk7XG4gICAgICAgIHRoaXNBcmcgPSB0aGlzO1xuICAgICAgICB0cmFpbGluZ0NhbGwgPSB0cmFpbGluZyAmJiAodGltZW91dElkIHx8ICFsZWFkaW5nKTtcblxuICAgICAgICBpZiAobWF4V2FpdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB2YXIgbGVhZGluZ0NhbGwgPSBsZWFkaW5nICYmICF0aW1lb3V0SWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFtYXhUaW1lb3V0SWQgJiYgIWxlYWRpbmcpIHtcbiAgICAgICAgICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHJlbWFpbmluZyA9IG1heFdhaXQgLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKSxcbiAgICAgICAgICAgICAgaXNDYWxsZWQgPSByZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiBtYXhXYWl0O1xuXG4gICAgICAgICAgaWYgKGlzQ2FsbGVkKSB7XG4gICAgICAgICAgICBpZiAobWF4VGltZW91dElkKSB7XG4gICAgICAgICAgICAgIG1heFRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChtYXhUaW1lb3V0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoIW1heFRpbWVvdXRJZCkge1xuICAgICAgICAgICAgbWF4VGltZW91dElkID0gc2V0VGltZW91dChtYXhEZWxheWVkLCByZW1haW5pbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDYWxsZWQgJiYgdGltZW91dElkKSB7XG4gICAgICAgICAgdGltZW91dElkID0gY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRpbWVvdXRJZCAmJiB3YWl0ICE9PSBtYXhXYWl0KSB7XG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChkZWxheWVkLCB3YWl0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVhZGluZ0NhbGwpIHtcbiAgICAgICAgICBpc0NhbGxlZCA9IHRydWU7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDYWxsZWQgJiYgIXRpbWVvdXRJZCAmJiAhbWF4VGltZW91dElkKSB7XG4gICAgICAgICAgYXJncyA9IHRoaXNBcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gICAgICByZXR1cm4gZGVib3VuY2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmVycyBpbnZva2luZyB0aGUgYGZ1bmNgIHVudGlsIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzIGNsZWFyZWQuIEFueVxuICAgICAqIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCBpcyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVmZXIuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXIgaWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmZXIoZnVuY3Rpb24odGV4dCkge1xuICAgICAqICAgY29uc29sZS5sb2codGV4dCk7XG4gICAgICogfSwgJ2RlZmVycmVkJyk7XG4gICAgICogLy8gbG9ncyAnZGVmZXJyZWQnIGFmdGVyIG9uZSBvciBtb3JlIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIHZhciBkZWZlciA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gICAgICByZXR1cm4gYmFzZURlbGF5KGZ1bmMsIDEsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyBgZnVuY2AgYWZ0ZXIgYHdhaXRgIG1pbGxpc2Vjb25kcy4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZVxuICAgICAqIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0IGlzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlbGF5KGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICAgICAqIH0sIDEwMDAsICdsYXRlcicpO1xuICAgICAqIC8vID0+IGxvZ3MgJ2xhdGVyJyBhZnRlciBvbmUgc2Vjb25kXG4gICAgICovXG4gICAgdmFyIGRlbGF5ID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgd2FpdCwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIHByb3ZpZGVkXG4gICAgICogZnVuY3Rpb25zIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGVyZSBlYWNoXG4gICAgICogc3VjY2Vzc2l2ZSBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gW2Z1bmNzXSBGdW5jdGlvbnMgdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3coXy5hZGQsIHNxdWFyZSk7XG4gICAgICogYWRkU3F1YXJlKDEsIDIpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKi9cbiAgICB2YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBpbnZva2VzIHRoZSBwcm92aWRlZCBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGJhY2tmbG93LCBjb21wb3NlXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gW2Z1bmNzXSBGdW5jdGlvbnMgdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3dSaWdodChzcXVhcmUsIF8uYWRkKTtcbiAgICAgKiBhZGRTcXVhcmUoMSwgMik7XG4gICAgICogLy8gPT4gOVxuICAgICAqL1xuICAgIHZhciBmbG93UmlnaHQgPSBjcmVhdGVGbG93KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAgICAgKiBwcm92aWRlZCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAgICAgKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgY29lcmNlZCB0byBhIHN0cmluZyBhbmQgdXNlZCBhcyB0aGVcbiAgICAgKiBjYWNoZSBrZXkuIFRoZSBgZnVuY2AgaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWRcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAgICAgKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAgICAgKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZSBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICAgICAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemluZyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVwcGVyQ2FzZSA9IF8ubWVtb2l6ZShmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgKiAgIHJldHVybiBzdHJpbmcudG9VcHBlckNhc2UoKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHVwcGVyQ2FzZSgnZnJlZCcpO1xuICAgICAqIC8vID0+ICdGUkVEJ1xuICAgICAqXG4gICAgICogLy8gbW9kaWZ5aW5nIHRoZSByZXN1bHQgY2FjaGVcbiAgICAgKiB1cHBlckNhc2UuY2FjaGUuc2V0KCdmcmVkJywgJ0JBUk5FWScpO1xuICAgICAqIHVwcGVyQ2FzZSgnZnJlZCcpO1xuICAgICAqIC8vID0+ICdCQVJORVknXG4gICAgICpcbiAgICAgKiAvLyByZXBsYWNpbmcgYF8ubWVtb2l6ZS5DYWNoZWBcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAndXNlcic6ICdmcmVkJyB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ3VzZXInOiAnYmFybmV5JyB9O1xuICAgICAqIHZhciBpZGVudGl0eSA9IF8ubWVtb2l6ZShfLmlkZW50aXR5KTtcbiAgICAgKlxuICAgICAqIGlkZW50aXR5KG9iamVjdCk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdmcmVkJyB9XG4gICAgICogaWRlbnRpdHkob3RoZXIpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqXG4gICAgICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAgICAgKiB2YXIgaWRlbnRpdHkgPSBfLm1lbW9pemUoXy5pZGVudGl0eSk7XG4gICAgICpcbiAgICAgKiBpZGVudGl0eShvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqIGlkZW50aXR5KG90aGVyKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICAgIG1lbW9pemVkLmNhY2hlID0gbmV3IG1lbW9pemUuQ2FjaGU7XG4gICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcnVucyBlYWNoIGFyZ3VtZW50IHRocm91Z2ggYSBjb3JyZXNwb25kaW5nXG4gICAgICogdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3RyYW5zZm9ybXNdIFRoZSBmdW5jdGlvbnMgdG8gdHJhbnNmb3JtXG4gICAgICogYXJndW1lbnRzLCBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBmdW5jdGlvbnMgb3IgYXJyYXlzIG9mIGZ1bmN0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZG91YmxlZChuKSB7XG4gICAgICogICByZXR1cm4gbiAqIDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgbW9kZGVkID0gXy5tb2RBcmdzKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiBbeCwgeV07XG4gICAgICogfSwgc3F1YXJlLCBkb3VibGVkKTtcbiAgICAgKlxuICAgICAqIG1vZGRlZCgxLCAyKTtcbiAgICAgKiAvLyA9PiBbMSwgNF1cbiAgICAgKlxuICAgICAqIG1vZGRlZCg1LCAxMCk7XG4gICAgICogLy8gPT4gWzI1LCAyMF1cbiAgICAgKi9cbiAgICB2YXIgbW9kQXJncyA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCB0cmFuc2Zvcm1zKSB7XG4gICAgICB0cmFuc2Zvcm1zID0gYmFzZUZsYXR0ZW4odHJhbnNmb3Jtcyk7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAhYXJyYXlFdmVyeSh0cmFuc2Zvcm1zLCBiYXNlSXNGdW5jdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIHJlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIHZhciBpbmRleCA9IG5hdGl2ZU1pbihhcmdzLmxlbmd0aCwgbGVuZ3RoKTtcbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICBhcmdzW2luZGV4XSA9IHRyYW5zZm9ybXNbaW5kZXhdKGFyZ3NbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbmVnYXRlcyB0aGUgcmVzdWx0IG9mIHRoZSBwcmVkaWNhdGUgYGZ1bmNgLiBUaGVcbiAgICAgKiBgZnVuY2AgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGVcbiAgICAgKiBjcmVhdGVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBwcmVkaWNhdGUgdG8gbmVnYXRlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0V2ZW4obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5maWx0ZXIoWzEsIDIsIDMsIDQsIDUsIDZdLCBfLm5lZ2F0ZShpc0V2ZW4pKTtcbiAgICAgKiAvLyA9PiBbMSwgMywgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgcmVzdHJpY3RlZCB0byBpbnZva2luZyBgZnVuY2Agb25jZS4gUmVwZWF0IGNhbGxzXG4gICAgICogdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGNhbGwuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgaW5pdGlhbGl6ZSA9IF8ub25jZShjcmVhdGVBcHBsaWNhdGlvbik7XG4gICAgICogaW5pdGlhbGl6ZSgpO1xuICAgICAqIGluaXRpYWxpemUoKTtcbiAgICAgKiAvLyBgaW5pdGlhbGl6ZWAgaW52b2tlcyBgY3JlYXRlQXBwbGljYXRpb25gIG9uY2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvbmNlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiZWZvcmUoMiwgZnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBgcGFydGlhbGAgYXJndW1lbnRzIHByZXBlbmRlZFxuICAgICAqIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSBuZXcgZnVuY3Rpb24uIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYmluZGAgZXhjZXB0XG4gICAgICogaXQgZG9lcyAqKm5vdCoqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZ3JlZXQgPSBmdW5jdGlvbihncmVldGluZywgbmFtZSkge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICAgICAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHBsYWNlaG9sZGVyc1xuICAgICAqIHZhciBncmVldEZyZWQgPSBfLnBhcnRpYWwoZ3JlZXQsIF8sICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsID0gY3JlYXRlUGFydGlhbChQQVJUSUFMX0ZMQUcpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wYXJ0aWFsYCBleGNlcHQgdGhhdCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICAgKiBhcmUgYXBwZW5kZWQgdG8gdGhvc2UgcHJvdmlkZWQgdG8gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5wYXJ0aWFsUmlnaHQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAgICAgKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBncmVldCA9IGZ1bmN0aW9uKGdyZWV0aW5nLCBuYW1lKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgcGxhY2Vob2xkZXJzXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWxSaWdodChncmVldCwgJ2hlbGxvJywgXyk7XG4gICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsUmlnaHQgPSBjcmVhdGVQYXJ0aWFsKFBBUlRJQUxfUklHSFRfRkxBRyk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyBhcnJhbmdlZCBhY2NvcmRpbmdcbiAgICAgKiB0byB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgd2hlcmUgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBmaXJzdCBpbmRleCBpc1xuICAgICAqIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggaXNcbiAgICAgKiBwcm92aWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZWFycmFuZ2UgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcmd1bWVudCBpbmRleGVzLFxuICAgICAqICBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBpbmRleGVzIG9yIGFycmF5cyBvZiBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgcmVhcmdlZCA9IF8ucmVhcmcoZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9LCAyLCAwLCAxKTtcbiAgICAgKlxuICAgICAqIHJlYXJnZWQoJ2InLCAnYycsICdhJylcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICAgKlxuICAgICAqIHZhciBtYXAgPSBfLnJlYXJnKF8ubWFwLCBbMSwgMF0pO1xuICAgICAqIG1hcChmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAqIDM7XG4gICAgICogfSwgWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMywgNiwgOV1cbiAgICAgKi9cbiAgICB2YXIgcmVhcmcgPSByZXN0UGFyYW0oZnVuY3Rpb24oZnVuYywgaW5kZXhlcykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIoZnVuYywgUkVBUkdfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZUZsYXR0ZW4oaW5kZXhlcykpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlXG4gICAgICogY3JlYXRlZCBmdW5jdGlvbiBhbmQgYXJndW1lbnRzIGZyb20gYHN0YXJ0YCBhbmQgYmV5b25kIHByb3ZpZGVkIGFzIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBbcmVzdCBwYXJhbWV0ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Z1bmN0aW9ucy9yZXN0X3BhcmFtZXRlcnMpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBzYXkgPSBfLnJlc3RQYXJhbShmdW5jdGlvbih3aGF0LCBuYW1lcykge1xuICAgICAqICAgcmV0dXJuIHdoYXQgKyAnICcgKyBfLmluaXRpYWwobmFtZXMpLmpvaW4oJywgJykgK1xuICAgICAqICAgICAoXy5zaXplKG5hbWVzKSA+IDEgPyAnLCAmICcgOiAnJykgKyBfLmxhc3QobmFtZXMpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc2F5KCdoZWxsbycsICdmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3RQYXJhbShmdW5jLCBzdGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogKCtzdGFydCB8fCAwKSwgMCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoc3RhcnQpIHtcbiAgICAgICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7XG4gICAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3NbMF0sIHJlc3QpO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdLCByZXN0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBvdGhlckFyZ3Nbc3RhcnRdID0gcmVzdDtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgb3RoZXJBcmdzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIGNyZWF0ZWRcbiAgICAgKiBmdW5jdGlvbiBhbmQgYW4gYXJyYXkgb2YgYXJndW1lbnRzIG11Y2ggbGlrZSBbYEZ1bmN0aW9uI2FwcGx5YF0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTUuMy40LjMpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBbc3ByZWFkIG9wZXJhdG9yXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMvU3ByZWFkX29wZXJhdG9yKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHNwcmVhZCBhcmd1bWVudHMgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8uc3ByZWFkKGZ1bmN0aW9uKHdobywgd2hhdCkge1xuICAgICAqICAgcmV0dXJuIHdobyArICcgc2F5cyAnICsgd2hhdDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHNheShbJ2ZyZWQnLCAnaGVsbG8nXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQgc2F5cyBoZWxsbydcbiAgICAgKlxuICAgICAqIC8vIHdpdGggYSBQcm9taXNlXG4gICAgICogdmFyIG51bWJlcnMgPSBQcm9taXNlLmFsbChbXG4gICAgICogICBQcm9taXNlLnJlc29sdmUoNDApLFxuICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDM2KVxuICAgICAqIF0pO1xuICAgICAqXG4gICAgICogbnVtYmVycy50aGVuKF8uc3ByZWFkKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiB4ICsgeTtcbiAgICAgKiB9KSk7XG4gICAgICogLy8gPT4gYSBQcm9taXNlIG9mIDc2XG4gICAgICovXG4gICAgZnVuY3Rpb24gc3ByZWFkKGZ1bmMpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbihhcnJheSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcnJheSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdGhhdCBvbmx5IGludm9rZXMgYGZ1bmNgIGF0IG1vc3Qgb25jZSBwZXJcbiAgICAgKiBldmVyeSBgd2FpdGAgbWlsbGlzZWNvbmRzLiBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYFxuICAgICAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBpbnZvY2F0aW9ucy4gUHJvdmlkZSBhbiBvcHRpb25zIG9iamVjdCB0byBpbmRpY2F0ZVxuICAgICAqIHRoYXQgYGZ1bmNgIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZSBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZVxuICAgICAqIGB3YWl0YCB0aW1lb3V0LiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gcmV0dXJuIHRoZVxuICAgICAqIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgY2FsbC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXMgaW52b2tlZFxuICAgICAqIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gaXNcbiAgICAgKiBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gICAgICpcbiAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cDovL2RydXBhbG1vdGlvbi5jb20vYXJ0aWNsZS9kZWJvdW5jZS1hbmQtdGhyb3R0bGUtdmlzdWFsLWV4cGxhbmF0aW9uKVxuICAgICAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8udGhyb3R0bGVgIGFuZCBgXy5kZWJvdW5jZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB0aHJvdHRsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgaW52b2NhdGlvbnMgdG8uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPXRydWVdIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmdcbiAgICAgKiAgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nXG4gICAgICogIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBhdm9pZCBleGNlc3NpdmVseSB1cGRhdGluZyB0aGUgcG9zaXRpb24gd2hpbGUgc2Nyb2xsaW5nXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICAgICAqXG4gICAgICogLy8gaW52b2tlIGByZW5ld1Rva2VuYCB3aGVuIHRoZSBjbGljayBldmVudCBpcyBmaXJlZCwgYnV0IG5vdCBtb3JlIHRoYW4gb25jZSBldmVyeSA1IG1pbnV0ZXNcbiAgICAgKiBqUXVlcnkoJy5pbnRlcmFjdGl2ZScpLm9uKCdjbGljaycsIF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7XG4gICAgICogICAndHJhaWxpbmcnOiBmYWxzZVxuICAgICAqIH0pKTtcbiAgICAgKlxuICAgICAqIC8vIGNhbmNlbCBhIHRyYWlsaW5nIHRocm90dGxlZCBjYWxsXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgdGhyb3R0bGVkLmNhbmNlbCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgICAgdmFyIGxlYWRpbmcgPSB0cnVlLFxuICAgICAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICAgIGxlYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgbGVhZGluZyA9ICdsZWFkaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLmxlYWRpbmcgOiBsZWFkaW5nO1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlYm91bmNlKGZ1bmMsIHdhaXQsIHsgJ2xlYWRpbmcnOiBsZWFkaW5nLCAnbWF4V2FpdCc6ICt3YWl0LCAndHJhaWxpbmcnOiB0cmFpbGluZyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBgdmFsdWVgIHRvIHRoZSB3cmFwcGVyIGZ1bmN0aW9uIGFzIGl0c1xuICAgICAqIGZpcnN0IGFyZ3VtZW50LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIGFyZVxuICAgICAqIGFwcGVuZGVkIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSB3cmFwcGVyIGZ1bmN0aW9uLiBUaGUgd3JhcHBlciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIHdyYXBwZXIgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBwID0gXy53cmFwKF8uZXNjYXBlLCBmdW5jdGlvbihmdW5jLCB0ZXh0KSB7XG4gICAgICogICByZXR1cm4gJzxwPicgKyBmdW5jKHRleHQpICsgJzwvcD4nO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogcCgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnPHA+ZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzPC9wPidcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwKHZhbHVlLCB3cmFwcGVyKSB7XG4gICAgICB3cmFwcGVyID0gd3JhcHBlciA9PSBudWxsID8gaWRlbnRpdHkgOiB3cmFwcGVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIod3JhcHBlciwgUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIFt2YWx1ZV0sIFtdKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHZhbHVlYC4gSWYgYGlzRGVlcGAgaXMgYHRydWVgIG5lc3RlZCBvYmplY3RzIGFyZSBjbG9uZWQsXG4gICAgICogb3RoZXJ3aXNlIHRoZXkgYXJlIGFzc2lnbmVkIGJ5IHJlZmVyZW5jZS4gSWYgYGN1c3RvbWl6ZXJgIGlzIHByb3ZpZGVkIGl0IGlzXG4gICAgICogaW52b2tlZCB0byBwcm9kdWNlIHRoZSBjbG9uZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIGNsb25pbmcgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgYm91bmQgdG9cbiAgICAgKiBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnQ7ICh2YWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdF0pLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gICAgICogW3N0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtXShodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9pbmZyYXN0cnVjdHVyZS5odG1sI2ludGVybmFsLXN0cnVjdHVyZWQtY2xvbmluZy1hbGdvcml0aG0pLlxuICAgICAqIFRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYGFyZ3VtZW50c2Agb2JqZWN0cyBhbmQgb2JqZWN0cyBjcmVhdGVkIGJ5XG4gICAgICogY29uc3RydWN0b3JzIG90aGVyIHRoYW4gYE9iamVjdGAgYXJlIGNsb25lZCB0byBwbGFpbiBgT2JqZWN0YCBvYmplY3RzLiBBblxuICAgICAqIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2ggYXMgZnVuY3Rpb25zLCBET00gbm9kZXMsXG4gICAgICogTWFwcywgU2V0cywgYW5kIFdlYWtNYXBzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgY3VzdG9taXplcmAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogdmFyIHNoYWxsb3cgPSBfLmNsb25lKHVzZXJzKTtcbiAgICAgKiBzaGFsbG93WzBdID09PSB1c2Vyc1swXTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiB2YXIgZGVlcCA9IF8uY2xvbmUodXNlcnMsIHRydWUpO1xuICAgICAqIGRlZXBbMF0gPT09IHVzZXJzWzBdO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBhIGN1c3RvbWl6ZXIgY2FsbGJhY2tcbiAgICAgKiB2YXIgZWwgPSBfLmNsb25lKGRvY3VtZW50LmJvZHksIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogZWwgPT09IGRvY3VtZW50LmJvZHlcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqIGVsLm5vZGVOYW1lXG4gICAgICogLy8gPT4gQk9EWVxuICAgICAqIGVsLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZSh2YWx1ZSwgaXNEZWVwLCBjdXN0b21pemVyLCB0aGlzQXJnKSB7XG4gICAgICBpZiAoaXNEZWVwICYmIHR5cGVvZiBpc0RlZXAgIT0gJ2Jvb2xlYW4nICYmIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpc0RlZXAsIGN1c3RvbWl6ZXIpKSB7XG4gICAgICAgIGlzRGVlcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZW9mIGlzRGVlcCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNBcmcgPSBjdXN0b21pemVyO1xuICAgICAgICBjdXN0b21pemVyID0gaXNEZWVwO1xuICAgICAgICBpc0RlZXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nXG4gICAgICAgID8gYmFzZUNsb25lKHZhbHVlLCBpc0RlZXAsIGJpbmRDYWxsYmFjayhjdXN0b21pemVyLCB0aGlzQXJnLCAxKSlcbiAgICAgICAgOiBiYXNlQ2xvbmUodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGRlZXAgY2xvbmUgb2YgYHZhbHVlYC4gSWYgYGN1c3RvbWl6ZXJgIGlzIHByb3ZpZGVkIGl0IGlzIGludm9rZWRcbiAgICAgKiB0byBwcm9kdWNlIHRoZSBjbG9uZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCBjbG9uaW5nXG4gICAgICogaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgYm91bmQgdG8gYHRoaXNBcmdgXG4gICAgICogYW5kIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnQ7ICh2YWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdF0pLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gICAgICogW3N0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtXShodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9pbmZyYXN0cnVjdHVyZS5odG1sI2ludGVybmFsLXN0cnVjdHVyZWQtY2xvbmluZy1hbGdvcml0aG0pLlxuICAgICAqIFRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYGFyZ3VtZW50c2Agb2JqZWN0cyBhbmQgb2JqZWN0cyBjcmVhdGVkIGJ5XG4gICAgICogY29uc3RydWN0b3JzIG90aGVyIHRoYW4gYE9iamVjdGAgYXJlIGNsb25lZCB0byBwbGFpbiBgT2JqZWN0YCBvYmplY3RzLiBBblxuICAgICAqIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2ggYXMgZnVuY3Rpb25zLCBET00gbm9kZXMsXG4gICAgICogTWFwcywgU2V0cywgYW5kIFdlYWtNYXBzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBkZWVwIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgY3VzdG9taXplcmAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKHVzZXJzKTtcbiAgICAgKiBkZWVwWzBdID09PSB1c2Vyc1swXTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgYSBjdXN0b21pemVyIGNhbGxiYWNrXG4gICAgICogdmFyIGVsID0gXy5jbG9uZURlZXAoZG9jdW1lbnQuYm9keSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGVsID09PSBkb2N1bWVudC5ib2R5XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKiBlbC5ub2RlTmFtZVxuICAgICAqIC8vID0+IEJPRFlcbiAgICAgKiBlbC5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSwgY3VzdG9taXplciwgdGhpc0FyZykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbidcbiAgICAgICAgPyBiYXNlQ2xvbmUodmFsdWUsIHRydWUsIGJpbmRDYWxsYmFjayhjdXN0b21pemVyLCB0aGlzQXJnLCAxKSlcbiAgICAgICAgOiBiYXNlQ2xvbmUodmFsdWUsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ndCgzLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmd0KDMsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmd0KDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3QodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPiBvdGhlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3RlKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlID49IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGFycmF5VGFnO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UgfHwgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gYm9vbFRhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBEYXRlYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNEYXRlKG5ldyBEYXRlKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRGF0ZSgnTW9uIEFwcmlsIDIzIDIwMTInKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gZGF0ZVRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIERPTSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIERPTSBlbGVtZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbGVtZW50KCc8Ym9keT4nKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICEhdmFsdWUgJiYgdmFsdWUubm9kZVR5cGUgPT09IDEgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgZW1wdHkuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBlbXB0eSB1bmxlc3MgaXQgaXMgYW5cbiAgICAgKiBgYXJndW1lbnRzYCBvYmplY3QsIGFycmF5LCBzdHJpbmcsIG9yIGpRdWVyeS1saWtlIGNvbGxlY3Rpb24gd2l0aCBhIGxlbmd0aFxuICAgICAqIGdyZWF0ZXIgdGhhbiBgMGAgb3IgYW4gb2JqZWN0IHdpdGggb3duIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KHRydWUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eSgxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5zcGxpY2UpKSkpIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gIWtleXModmFsdWUpLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gICAgICogZXF1aXZhbGVudC4gSWYgYGN1c3RvbWl6ZXJgIGlzIHByb3ZpZGVkIGl0IGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gICAgICogSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAgY29tcGFyaXNvbnMgYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZFxuICAgICAqIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgYm91bmQgdG8gYHRoaXNBcmdgIGFuZCBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgb3RoZXIgWywgaW5kZXh8a2V5XSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYm9vbGVhbnMsIGBEYXRlYCBvYmplY3RzLFxuICAgICAqIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsIGFuZCBzdHJpbmdzLiBPYmplY3RzIGFyZSBjb21wYXJlZCBieVxuICAgICAqIHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTSBub2Rlc1xuICAgICAqIGFyZSAqKm5vdCoqIHN1cHBvcnRlZC4gUHJvdmlkZSBhIGN1c3RvbWl6ZXIgZnVuY3Rpb24gdG8gZXh0ZW5kIHN1cHBvcnRcbiAgICAgKiBmb3IgY29tcGFyaW5nIG90aGVyIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBhbGlhcyBlcVxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgY3VzdG9taXplcmAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAgICAgKiB2YXIgb3RoZXIgPSB7ICd1c2VyJzogJ2ZyZWQnIH07XG4gICAgICpcbiAgICAgKiBvYmplY3QgPT0gb3RoZXI7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBhIGN1c3RvbWl6ZXIgY2FsbGJhY2tcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2hlbGxvJywgJ2dvb2RieWUnXTtcbiAgICAgKiB2YXIgb3RoZXIgPSBbJ2hpJywgJ2dvb2RieWUnXTtcbiAgICAgKlxuICAgICAqIF8uaXNFcXVhbChhcnJheSwgb3RoZXIsIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAqICAgaWYgKF8uZXZlcnkoW3ZhbHVlLCBvdGhlcl0sIFJlZ0V4cC5wcm90b3R5cGUudGVzdCwgL15oKD86aXxlbGxvKSQvKSkge1xuICAgICAqICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIsIHRoaXNBcmcpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gYmluZENhbGxiYWNrKGN1c3RvbWl6ZXIsIHRoaXNBcmcsIDMpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBjdXN0b21pemVyKSA6ICEhcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGBFcnJvcmAsIGBFdmFsRXJyb3JgLCBgUmFuZ2VFcnJvcmAsIGBSZWZlcmVuY2VFcnJvcmAsXG4gICAgICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBlcnJvciBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Vycm9yKG5ldyBFcnJvcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Vycm9yKEVycm9yKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09ICdzdHJpbmcnICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGVycm9yVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIHByaW1pdGl2ZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gW2BOdW1iZXIuaXNGaW5pdGVgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1udW1iZXIuaXNmaW5pdGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSgxMCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSgnMTAnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSh0cnVlKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZShPYmplY3QoMTApKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZShJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiBuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRnVuY3Rpb24oXyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAgICAgLy8gaW4gb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmkgd2hpY2ggcmV0dXJuICdmdW5jdGlvbicgZm9yIHJlZ2V4ZXNcbiAgICAgIC8vIGFuZCBTYWZhcmkgOCBlcXVpdmFsZW50cyB3aGljaCByZXR1cm4gJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9ycy5cbiAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gZnVuY1RhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGUgW2xhbmd1YWdlIHR5cGVdKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDgpIG9mIGBPYmplY3RgLlxuICAgICAqIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdCh7fSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QoMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgICAgLy8gQXZvaWQgYSBWOCBKSVQgYnVnIGluIENocm9tZSAxOS0yMC5cbiAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gYG9iamVjdGAgYW5kIGBzb3VyY2VgIHRvIGRldGVybWluZSBpZlxuICAgICAqIGBvYmplY3RgIGNvbnRhaW5zIGVxdWl2YWxlbnQgcHJvcGVydHkgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgaXMgcHJvdmlkZWRcbiAgICAgKiBpdCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIGNvbXBhcmlzb25zIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBib3VuZFxuICAgICAqIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBvdGhlciwgaW5kZXh8a2V5KS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgcHJvcGVydGllcyBvZiBhcnJheXMsIGJvb2xlYW5zLFxuICAgICAqIGBEYXRlYCBvYmplY3RzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBhbmQgc3RyaW5ncy4gRnVuY3Rpb25zXG4gICAgICogYW5kIERPTSBub2RlcyBhcmUgKipub3QqKiBzdXBwb3J0ZWQuIFByb3ZpZGUgYSBjdXN0b21pemVyIGZ1bmN0aW9uIHRvIGV4dGVuZFxuICAgICAqIHN1cHBvcnQgZm9yIGNvbXBhcmluZyBvdGhlciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBjdXN0b21pemVyYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAndXNlcic6ICdmcmVkJywgJ2FnZSc6IDQwIH07XG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2gob2JqZWN0LCB7ICdhZ2UnOiA0MCB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2gob2JqZWN0LCB7ICdhZ2UnOiAzNiB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgYSBjdXN0b21pemVyIGNhbGxiYWNrXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2dyZWV0aW5nJzogJ2hlbGxvJyB9O1xuICAgICAqIHZhciBzb3VyY2UgPSB7ICdncmVldGluZyc6ICdoaScgfTtcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHNvdXJjZSwgZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICogICByZXR1cm4gXy5ldmVyeShbdmFsdWUsIG90aGVyXSwgUmVnRXhwLnByb3RvdHlwZS50ZXN0LCAvXmgoPzppfGVsbG8pJC8pIHx8IHVuZGVmaW5lZDtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplciwgdGhpc0FyZykge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBiaW5kQ2FsbGJhY2soY3VzdG9taXplciwgdGhpc0FyZywgMykgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUlzTWF0Y2gob2JqZWN0LCBnZXRNYXRjaERhdGEoc291cmNlKSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYE5hTmAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbm90IHRoZSBzYW1lIGFzIFtgaXNOYU5gXShodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS4xLjIuNClcbiAgICAgKiB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3IgYHVuZGVmaW5lZGAgYW5kIG90aGVyIG5vbi1udW1lcmljIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05hTihOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4obmV3IE51bWJlcihOYU4pKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBpc05hTih1bmRlZmluZWQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4odW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgICAvLyBBbiBgTmFOYCBwcmltaXRpdmUgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLlxuICAgICAgLy8gUGVyZm9ybSB0aGUgYHRvU3RyaW5nVGFnYCBjaGVjayBmaXJzdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBzb21lIGhvc3Qgb2JqZWN0cyBpbiBJRS5cbiAgICAgIHJldHVybiBpc051bWJlcih2YWx1ZSkgJiYgdmFsdWUgIT0gK3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKF8pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOYXRpdmUodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcmVJc05hdGl2ZS50ZXN0KGZuVG9TdHJpbmcuY2FsbCh2YWx1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgcmVJc0hvc3RDdG9yLnRlc3QodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBudWxsYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYG51bGxgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKHZvaWQgMCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZSBjbGFzc2lmaWVkXG4gICAgICogYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKDguNCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcihOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoJzguNCcpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gICAgICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFzc3VtZXMgb2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3RvclxuICAgICAqIGhhdmUgbm8gaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICAgIHZhciBDdG9yO1xuXG4gICAgICAvLyBFeGl0IGVhcmx5IGZvciBub24gYE9iamVjdGAgb2JqZWN0cy5cbiAgICAgIGlmICghKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gb2JqZWN0VGFnICYmICFpc0FyZ3VtZW50cyh2YWx1ZSkpIHx8XG4gICAgICAgICAgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY29uc3RydWN0b3InKSAmJiAoQ3RvciA9IHZhbHVlLmNvbnN0cnVjdG9yLCB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmICEoQ3RvciBpbnN0YW5jZW9mIEN0b3IpKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gSUUgPCA5IGl0ZXJhdGVzIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGJlZm9yZSBvd24gcHJvcGVydGllcy4gSWYgdGhlIGZpcnN0XG4gICAgICAvLyBpdGVyYXRlZCBwcm9wZXJ0eSBpcyBhbiBvYmplY3QncyBvd24gcHJvcGVydHkgdGhlbiB0aGVyZSBhcmUgbm8gaW5oZXJpdGVkXG4gICAgICAvLyBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgLy8gSW4gbW9zdCBlbnZpcm9ubWVudHMgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMgYXJlIGl0ZXJhdGVkIGJlZm9yZVxuICAgICAgLy8gaXRzIGluaGVyaXRlZCBwcm9wZXJ0aWVzLiBJZiB0aGUgbGFzdCBpdGVyYXRlZCBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qnc1xuICAgICAgLy8gb3duIHByb3BlcnR5IHRoZW4gdGhlcmUgYXJlIG5vIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gICAgICBiYXNlRm9ySW4odmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmVzdWx0ID0ga2V5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFJlZ0V4cGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNSZWdFeHAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gcmVnZXhwVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3RyaW5nYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU3RyaW5nKDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tvYmpUb1N0cmluZy5jYWxsKHZhbHVlKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNVbmRlZmluZWQodm9pZCAwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzVW5kZWZpbmVkKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sdCgxLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0KDMsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmx0KDMsIDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbHQodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPCBvdGhlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubHRlKDEsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbHRlKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlIDw9IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIChmdW5jdGlvbigpIHtcbiAgICAgKiAgIHJldHVybiBfLnRvQXJyYXkoYXJndW1lbnRzKS5zbGljZSgxKTtcbiAgICAgKiB9KDEsIDIsIDMpKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsdWUgPyBnZXRMZW5ndGgodmFsdWUpIDogMDtcbiAgICAgIGlmICghaXNMZW5ndGgobGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVzKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheUNvcHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZVxuICAgICAqIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlQ29weSh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgbWVyZ2VzIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgdGhlIHNvdXJjZSBvYmplY3QocyksIHRoYXRcbiAgICAgKiBkb24ndCByZXNvbHZlIHRvIGB1bmRlZmluZWRgIGludG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC4gU3Vic2VxdWVudCBzb3VyY2VzXG4gICAgICogb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuIElmIGBjdXN0b21pemVyYCBpc1xuICAgICAqIHByb3ZpZGVkIGl0IGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgbWVyZ2VkIHZhbHVlcyBvZiB0aGUgZGVzdGluYXRpb24gYW5kXG4gICAgICogc291cmNlIHByb3BlcnRpZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgIG1lcmdpbmcgaXMgaGFuZGxlZFxuICAgICAqIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWRcbiAgICAgKiB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqZWN0VmFsdWUsIHNvdXJjZVZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgY3VzdG9taXplcmAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2RhdGEnOiBbeyAndXNlcic6ICdiYXJuZXknIH0sIHsgJ3VzZXInOiAnZnJlZCcgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGFnZXMgPSB7XG4gICAgICogICAnZGF0YSc6IFt7ICdhZ2UnOiAzNiB9LCB7ICdhZ2UnOiA0MCB9XVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLm1lcmdlKHVzZXJzLCBhZ2VzKTtcbiAgICAgKiAvLyA9PiB7ICdkYXRhJzogW3sgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sIHsgJ3VzZXInOiAnZnJlZCcsICdhZ2UnOiA0MCB9XSB9XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBhIGN1c3RvbWl6ZXIgY2FsbGJhY2tcbiAgICAgKiB2YXIgb2JqZWN0ID0ge1xuICAgICAqICAgJ2ZydWl0cyc6IFsnYXBwbGUnXSxcbiAgICAgKiAgICd2ZWdldGFibGVzJzogWydiZWV0J11cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIG90aGVyID0ge1xuICAgICAqICAgJ2ZydWl0cyc6IFsnYmFuYW5hJ10sXG4gICAgICogICAndmVnZXRhYmxlcyc6IFsnY2Fycm90J11cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tZXJnZShvYmplY3QsIG90aGVyLCBmdW5jdGlvbihhLCBiKSB7XG4gICAgICogICBpZiAoXy5pc0FycmF5KGEpKSB7XG4gICAgICogICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICdmcnVpdHMnOiBbJ2FwcGxlJywgJ2JhbmFuYSddLCAndmVnZXRhYmxlcyc6IFsnYmVldCcsICdjYXJyb3QnXSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoYmFzZU1lcmdlKTtcblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0KHMpIHRvIHRoZSBkZXN0aW5hdGlvblxuICAgICAqIG9iamVjdC4gU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICAgICAqIElmIGBjdXN0b21pemVyYCBpcyBwcm92aWRlZCBpdCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOlxuICAgICAqIChvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAgYW5kIGlzIGJhc2VkIG9uXG4gICAgICogW2BPYmplY3QuYXNzaWduYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtb2JqZWN0LmFzc2lnbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAYWxpYXMgZXh0ZW5kXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBjdXN0b21pemVyYC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICd1c2VyJzogJ2Jhcm5leScgfSwgeyAnYWdlJzogNDAgfSwgeyAndXNlcic6ICdmcmVkJyB9KTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgYSBjdXN0b21pemVyIGNhbGxiYWNrXG4gICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ24sIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQodmFsdWUpID8gb3RoZXIgOiB2YWx1ZTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGRlZmF1bHRzKHsgJ3VzZXInOiAnYmFybmV5JyB9LCB7ICdhZ2UnOiAzNiB9LCB7ICd1c2VyJzogJ2ZyZWQnIH0pO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHJldHVybiBjdXN0b21pemVyXG4gICAgICAgID8gYXNzaWduV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcilcbiAgICAgICAgOiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gYHByb3RvdHlwZWAgb2JqZWN0LiBJZiBhXG4gICAgICogYHByb3BlcnRpZXNgIG9iamVjdCBpcyBwcm92aWRlZCBpdHMgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBhcmUgYXNzaWduZWRcbiAgICAgKiB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3RvdHlwZSBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdIFRoZSBwcm9wZXJ0aWVzIHRvIGFzc2lnbiB0byB0aGUgb2JqZWN0LlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIFNoYXBlKCkge1xuICAgICAqICAgdGhpcy54ID0gMDtcbiAgICAgKiAgIHRoaXMueSA9IDA7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQ2lyY2xlKCkge1xuICAgICAqICAgU2hhcGUuY2FsbCh0aGlzKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBDaXJjbGUucHJvdG90eXBlID0gXy5jcmVhdGUoU2hhcGUucHJvdG90eXBlLCB7XG4gICAgICogICAnY29uc3RydWN0b3InOiBDaXJjbGVcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHZhciBjaXJjbGUgPSBuZXcgQ2lyY2xlO1xuICAgICAqIGNpcmNsZSBpbnN0YW5jZW9mIENpcmNsZTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBjaXJjbGUgaW5zdGFuY2VvZiBTaGFwZTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcywgZ3VhcmQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwocHJvdG90eXBlLCBwcm9wZXJ0aWVzLCBndWFyZCkpIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzID8gYmFzZUFzc2lnbihyZXN1bHQsIHByb3BlcnRpZXMpIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0KHMpIHRvIHRoZSBkZXN0aW5hdGlvblxuICAgICAqIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBPbmNlIGFcbiAgICAgKiBwcm9wZXJ0eSBpcyBzZXQsIGFkZGl0aW9uYWwgdmFsdWVzIG9mIHRoZSBzYW1lIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdHMoeyAndXNlcic6ICdiYXJuZXknIH0sIHsgJ2FnZSc6IDM2IH0sIHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqL1xuICAgIHZhciBkZWZhdWx0cyA9IGNyZWF0ZURlZmF1bHRzKGFzc2lnbiwgYXNzaWduRGVmYXVsdHMpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kZWZhdWx0c2AgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgYXNzaWduc1xuICAgICAqIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmF1bHRzRGVlcCh7ICd1c2VyJzogeyAnbmFtZSc6ICdiYXJuZXknIH0gfSwgeyAndXNlcic6IHsgJ25hbWUnOiAnZnJlZCcsICdhZ2UnOiAzNiB9IH0pO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiB7ICduYW1lJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9IH1cbiAgICAgKlxuICAgICAqL1xuICAgIHZhciBkZWZhdWx0c0RlZXAgPSBjcmVhdGVEZWZhdWx0cyhtZXJnZSwgbWVyZ2VEZWZhdWx0cyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGtleSBvZiB0aGUgZmlyc3RcbiAgICAgKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIGZ1bmN0aW9uKGNocikge1xuICAgICAqICAgcmV0dXJuIGNoci5hZ2UgPCA0MDtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5JyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZEtleSh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBjYWxsYmFjayBzaG9ydGhhbmRcbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICovXG4gICAgdmFyIGZpbmRLZXkgPSBjcmVhdGVGaW5kS2V5KGJhc2VGb3JPd24pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kS2V5YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYSBjb2xsZWN0aW9uIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYHByZWRpY2F0ZWAgdGhlIGNyZWF0ZWQgYF8ubWF0Y2hlc2Agc3R5bGVcbiAgICAgKiBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlblxuICAgICAqIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCBmdW5jdGlvbihjaHIpIHtcbiAgICAgKiAgIHJldHVybiBjaHIuYWdlIDwgNDA7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gcmV0dXJucyBgcGViYmxlc2AgYXNzdW1pbmcgYF8uZmluZEtleWAgcmV0dXJucyBgYmFybmV5YFxuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgJ2FjdGl2ZScsIGZhbHNlKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+ICdwZWJibGVzJ1xuICAgICAqL1xuICAgIHZhciBmaW5kTGFzdEtleSA9IGNyZWF0ZUZpbmRLZXkoYmFzZUZvck93blJpZ2h0KTtcblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBpbnZva2luZ1xuICAgICAqIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0XG4gICAgICogaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JJbihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IGxvZ3MgJ2EnLCAnYicsIGFuZCAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICB2YXIgZm9ySW4gPSBjcmVhdGVGb3JJbihiYXNlRm9yKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9ySW5gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICAgICAqIGBvYmplY3RgIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvckluUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBsb2dzICdjJywgJ2InLCBhbmQgJ2EnIGFzc3VtaW5nIGBfLmZvckluIGAgbG9ncyAnYScsICdiJywgYW5kICdjJ1xuICAgICAqL1xuICAgIHZhciBmb3JJblJpZ2h0ID0gY3JlYXRlRm9ySW4oYmFzZUZvclJpZ2h0KTtcblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgaW52b2tpbmcgYGl0ZXJhdGVlYFxuICAgICAqIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aFxuICAgICAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAgICAgKiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gbG9ncyAnYScgYW5kICdiJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciBmb3JPd24gPSBjcmVhdGVGb3JPd24oYmFzZUZvck93bik7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvck93bmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzIG9mXG4gICAgICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBsb2dzICdiJyBhbmQgJ2EnIGFzc3VtaW5nIGBfLmZvck93bmAgbG9ncyAnYScgYW5kICdiJ1xuICAgICAqL1xuICAgIHZhciBmb3JPd25SaWdodCA9IGNyZWF0ZUZvck93bihiYXNlRm9yT3duUmlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmcm9tIGFsbCBlbnVtZXJhYmxlIHByb3BlcnRpZXMsXG4gICAgICogb3duIGFuZCBpbmhlcml0ZWQsIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIG1ldGhvZHNcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZnVuY3Rpb25zKF8pO1xuICAgICAqIC8vID0+IFsnYWZ0ZXInLCAnYXJ5JywgJ2Fzc2lnbicsIC4uLl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmdW5jdGlvbnMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gYmFzZUZ1bmN0aW9ucyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICAgICAqIGB1bmRlZmluZWRgIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyB1c2VkIGluIGl0cyBwbGFjZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBpZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgYHVuZGVmaW5lZGAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgdG9QYXRoKHBhdGgpLCBwYXRoICsgJycpO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3QgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgaXMgYSBkaXJlY3QgcHJvcGVydHksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiB7ICdiJzogeyAnYyc6IDMgfSB9IH07XG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCAnYS5iLmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJywgJ2MnXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhcyhvYmplY3QsIHBhdGgpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHBhdGgpO1xuICAgICAgaWYgKCFyZXN1bHQgJiYgIWlzS2V5KHBhdGgpKSB7XG4gICAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgICAgIG9iamVjdCA9IHBhdGgubGVuZ3RoID09IDEgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwYXRoID0gbGFzdChwYXRoKTtcbiAgICAgICAgcmVzdWx0ID0gaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdCB8fCAoaXNMZW5ndGgob2JqZWN0Lmxlbmd0aCkgJiYgaXNJbmRleChwYXRoLCBvYmplY3QubGVuZ3RoKSAmJlxuICAgICAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgaW52ZXJ0ZWQga2V5cyBhbmQgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqIElmIGBvYmplY3RgIGNvbnRhaW5zIGR1cGxpY2F0ZSB2YWx1ZXMsIHN1YnNlcXVlbnQgdmFsdWVzIG92ZXJ3cml0ZSBwcm9wZXJ0eVxuICAgICAqIGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHZhbHVlcyB1bmxlc3MgYG11bHRpVmFsdWVgIGlzIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52ZXJ0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW211bHRpVmFsdWVdIEFsbG93IG11bHRpcGxlIHZhbHVlcyBwZXIga2V5LlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0KG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMSc6ICdjJywgJzInOiAnYicgfVxuICAgICAqXG4gICAgICogLy8gd2l0aCBgbXVsdGlWYWx1ZWBcbiAgICAgKiBfLmludmVydChvYmplY3QsIHRydWUpO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnZlcnQob2JqZWN0LCBtdWx0aVZhbHVlLCBndWFyZCkge1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKG9iamVjdCwgbXVsdGlWYWx1ZSwgZ3VhcmQpKSB7XG4gICAgICAgIG11bHRpVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBwcm9wcyA9IGtleXMob2JqZWN0KSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF0sXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgIGlmIChtdWx0aVZhbHVlKSB7XG4gICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFt2YWx1ZV0ucHVzaChrZXkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRbdmFsdWVdID0gW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFt2YWx1ZV0gPSBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICAgICAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1vYmplY3Qua2V5cylcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5rZXlzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIF8ua2V5cygnaGknKTtcbiAgICAgKiAvLyA9PiBbJzAnLCAnMSddXG4gICAgICovXG4gICAgdmFyIGtleXMgPSAhbmF0aXZlS2V5cyA/IHNoaW1LZXlzIDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICB2YXIgQ3RvciA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKCh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlID09PSBvYmplY3QpIHx8XG4gICAgICAgICAgKHR5cGVvZiBvYmplY3QgIT0gJ2Z1bmN0aW9uJyAmJiBpc0FycmF5TGlrZShvYmplY3QpKSkge1xuICAgICAgICByZXR1cm4gc2hpbUtleXMob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc09iamVjdChvYmplY3QpID8gbmF0aXZlS2V5cyhvYmplY3QpIDogW107XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8ua2V5c0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDtcbiAgICAgIGxlbmd0aCA9IChsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJlxuICAgICAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpICYmIGxlbmd0aCkgfHwgMDtcblxuICAgICAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICBpc1Byb3RvID0gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSA9PT0gb2JqZWN0LFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgc2tpcEluZGV4ZXMgPSBsZW5ndGggPiAwO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gKGluZGV4ICsgJycpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICBpZiAoIShza2lwSW5kZXhlcyAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSkgJiZcbiAgICAgICAgICAgICEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tYXBWYWx1ZXNgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgICAqIHNhbWUgdmFsdWVzIGFzIGBvYmplY3RgIGFuZCBrZXlzIGdlbmVyYXRlZCBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGVcbiAgICAgKiBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJvdWdoIGBpdGVyYXRlZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdHxzdHJpbmd9IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZFxuICAgICAqICBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcEtleXMoeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICByZXR1cm4ga2V5ICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYTEnOiAxLCAnYjInOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgbWFwS2V5cyA9IGNyZWF0ZU9iamVjdE1hcHBlcih0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBgb2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZCBieVxuICAgICAqIHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJvdWdoIGBpdGVyYXRlZWAuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGZ1bmN0aW9uIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKlxuICAgICAqIElmIGEgcHJvcGVydHkgbmFtZSBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5wcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIGEgdmFsdWUgaXMgYWxzbyBwcm92aWRlZCBmb3IgYHRoaXNBcmdgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNQcm9wZXJ0eWBcbiAgICAgKiBzdHlsZSBjYWxsYmFjayByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgbWF0Y2hpbmcgcHJvcGVydHlcbiAgICAgKiB2YWx1ZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIGZvciBgaXRlcmF0ZWVgIHRoZSBjcmVhdGVkIGBfLm1hdGNoZXNgIHN0eWxlXG4gICAgICogY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW5cbiAgICAgKiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fHN0cmluZ30gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkXG4gICAgICogIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwVmFsdWVzKHsgJ2EnOiAxLCAnYic6IDIgfSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gKiAzO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAzLCAnYic6IDYgfVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2ZyZWQnOiAgICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ubWFwVmFsdWVzKHVzZXJzLCAnYWdlJyk7XG4gICAgICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciBtYXBWYWx1ZXMgPSBjcmVhdGVPYmplY3RNYXBwZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gICAgICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnwuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3ByZWRpY2F0ZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyXG4gICAgICogIGl0ZXJhdGlvbiBvciBwcm9wZXJ0eSBuYW1lcyB0byBvbWl0LCBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBwcm9wZXJ0eVxuICAgICAqICBuYW1lcyBvciBhcnJheXMgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfTtcbiAgICAgKlxuICAgICAqIF8ub21pdChvYmplY3QsICdhZ2UnKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKlxuICAgICAqIF8ub21pdChvYmplY3QsIF8uaXNOdW1iZXIpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqL1xuICAgIHZhciBvbWl0ID0gcmVzdFBhcmFtKGZ1bmN0aW9uKG9iamVjdCwgcHJvcHMpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHByb3BzWzBdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHByb3BzID0gYXJyYXlNYXAoYmFzZUZsYXR0ZW4ocHJvcHMpLCBTdHJpbmcpO1xuICAgICAgICByZXR1cm4gcGlja0J5QXJyYXkob2JqZWN0LCBiYXNlRGlmZmVyZW5jZShrZXlzSW4ob2JqZWN0KSwgcHJvcHMpKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcmVkaWNhdGUgPSBiaW5kQ2FsbGJhY2socHJvcHNbMF0sIHByb3BzWzFdLCAzKTtcbiAgICAgIHJldHVybiBwaWNrQnlDYWxsYmFjayhvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgICByZXR1cm4gIXByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5IG9mIHRoZSBrZXktdmFsdWUgcGFpcnMgZm9yIGBvYmplY3RgLFxuICAgICAqIGUuZy4gYFtba2V5MSwgdmFsdWUxXSwgW2tleTIsIHZhbHVlMl1dYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhaXJzKHsgJ2Jhcm5leSc6IDM2LCAnZnJlZCc6IDQwIH0pO1xuICAgICAqIC8vID0+IFtbJ2Jhcm5leScsIDM2XSwgWydmcmVkJywgNDBdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhaXJzKG9iamVjdCkge1xuICAgICAgb2JqZWN0ID0gdG9PYmplY3Qob2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcHJvcHMgPSBrZXlzKG9iamVjdCksXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBba2V5LCBvYmplY3Rba2V5XV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgYG9iamVjdGAgcHJvcGVydGllcy4gUHJvcGVydHlcbiAgICAgKiBuYW1lcyBtYXkgYmUgc3BlY2lmaWVkIGFzIGluZGl2aWR1YWwgYXJndW1lbnRzIG9yIGFzIGFycmF5cyBvZiBwcm9wZXJ0eVxuICAgICAqIG5hbWVzLiBJZiBgcHJlZGljYXRlYCBpcyBwcm92aWRlZCBpdCBpcyBpbnZva2VkIGZvciBlYWNoIHByb3BlcnR5IG9mIGBvYmplY3RgXG4gICAgICogcGlja2luZyB0aGUgcHJvcGVydGllcyBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnwuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3ByZWRpY2F0ZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyXG4gICAgICogIGl0ZXJhdGlvbiBvciBwcm9wZXJ0eSBuYW1lcyB0byBwaWNrLCBzcGVjaWZpZWQgYXMgaW5kaXZpZHVhbCBwcm9wZXJ0eVxuICAgICAqICBuYW1lcyBvciBhcnJheXMgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBwcmVkaWNhdGVgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfTtcbiAgICAgKlxuICAgICAqIF8ucGljayhvYmplY3QsICd1c2VyJyk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdmcmVkJyB9XG4gICAgICpcbiAgICAgKiBfLnBpY2sob2JqZWN0LCBfLmlzU3RyaW5nKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKi9cbiAgICB2YXIgcGljayA9IHJlc3RQYXJhbShmdW5jdGlvbihvYmplY3QsIHByb3BzKSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiBwcm9wc1swXSA9PSAnZnVuY3Rpb24nXG4gICAgICAgID8gcGlja0J5Q2FsbGJhY2sob2JqZWN0LCBiaW5kQ2FsbGJhY2socHJvcHNbMF0sIHByb3BzWzFdLCAzKSlcbiAgICAgICAgOiBwaWNrQnlBcnJheShvYmplY3QsIGJhc2VGbGF0dGVuKHByb3BzKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGEgZnVuY3Rpb25cbiAgICAgKiBpdCBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGl0cyBwYXJlbnQgb2JqZWN0IGFuZCBpdHMgcmVzdWx0XG4gICAgICogaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byByZXNvbHZlLlxuICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBgdW5kZWZpbmVkYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjMSc6IDMsICdjMic6IF8uY29uc3RhbnQoNCkgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMxJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMyJyk7XG4gICAgICogLy8gPT4gNFxuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYS5iLmMnLCBfLmNvbnN0YW50KCdkZWZhdWx0JykpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3VsdChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W3BhdGhdO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvYmplY3QgIT0gbnVsbCAmJiAhaXNLZXkocGF0aCwgb2JqZWN0KSkge1xuICAgICAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgICAgICAgb2JqZWN0ID0gcGF0aC5sZW5ndGggPT0gMSA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTtcbiAgICAgICAgICByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtsYXN0KHBhdGgpXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0Z1bmN0aW9uKHJlc3VsdCkgPyByZXN1bHQuY2FsbChvYmplY3QpIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIGBwYXRoYCBvbiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYFxuICAgICAqIGRvZXMgbm90IGV4aXN0IGl0IGlzIGNyZWF0ZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGF1Z21lbnQuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8uc2V0KG9iamVjdCwgJ2FbMF0uYi5jJywgNCk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnNldChvYmplY3QsICd4WzBdLnkueicsIDUpO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIHZhciBwYXRoS2V5ID0gKHBhdGggKyAnJyk7XG4gICAgICBwYXRoID0gKG9iamVjdFtwYXRoS2V5XSAhPSBudWxsIHx8IGlzS2V5KHBhdGgsIG9iamVjdCkpID8gW3BhdGhLZXldIDogdG9QYXRoKHBhdGgpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICAgICAgd2hpbGUgKG5lc3RlZCAhPSBudWxsICYmICsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgICAgICBpZiAoaXNPYmplY3QobmVzdGVkKSkge1xuICAgICAgICAgIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIG5lc3RlZFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXN0ZWRba2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgICBuZXN0ZWRba2V5XSA9IGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge307XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBgXy5yZWR1Y2VgOyB0aGlzIG1ldGhvZCB0cmFuc2Zvcm1zIGBvYmplY3RgIHRvIGEgbmV3XG4gICAgICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93biBlbnVtZXJhYmxlXG4gICAgICogcHJvcGVydGllcyB0aHJvdWdoIGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uIHBvdGVudGlhbGx5IG11dGF0aW5nXG4gICAgICogdGhlIGBhY2N1bXVsYXRvcmAgb2JqZWN0LiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWRcbiAgICAgKiB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9uc1xuICAgICAqIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBjdXN0b20gYWNjdW11bGF0b3IgdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyYW5zZm9ybShbMiwgMywgNF0sIGZ1bmN0aW9uKHJlc3VsdCwgbikge1xuICAgICAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFs0LCA5XVxuICAgICAqXG4gICAgICogXy50cmFuc2Zvcm0oeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbihyZXN1bHQsIG4sIGtleSkge1xuICAgICAqICAgcmVzdWx0W2tleV0gPSBuICogMztcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMywgJ2InOiA2IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm0ob2JqZWN0LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIHRoaXNBcmcpIHtcbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkob2JqZWN0KSB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KTtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDQpO1xuXG4gICAgICBpZiAoYWNjdW11bGF0b3IgPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNBcnIgfHwgaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgICAgIGlmIChpc0Fycikge1xuICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQ3RvciA6IFtdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2N1bXVsYXRvciA9IGJhc2VDcmVhdGUoaXNGdW5jdGlvbihDdG9yKSA/IEN0b3IucHJvdG90eXBlIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKGlzQXJyID8gYXJyYXlFYWNoIDogYmFzZUZvck93bikob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udmFsdWVzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogXy52YWx1ZXMoJ2hpJyk7XG4gICAgICogLy8gPT4gWydoJywgJ2knXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHZhbHVlc1xuICAgICAqIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy52YWx1ZXNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBiYXNlVmFsdWVzKG9iamVjdCwga2V5c0luKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgbmAgaXMgYmV0d2VlbiBgc3RhcnRgIGFuZCB1cCB0byBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIElmXG4gICAgICogYGVuZGAgaXMgbm90IHNwZWNpZmllZCBpdCBpcyBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBuYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDMsIDIsIDQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg0LCA4KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNCwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgyLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDEuMiwgMik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDUuMiwgNCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpblJhbmdlKHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICBzdGFydCA9ICtzdGFydCB8fCAwO1xuICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmQgPSArZW5kIHx8IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWUgPj0gbmF0aXZlTWluKHN0YXJ0LCBlbmQpICYmIHZhbHVlIDwgbmF0aXZlTWF4KHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YCAoaW5jbHVzaXZlKS4gSWYgb25seSBvbmVcbiAgICAgKiBhcmd1bWVudCBpcyBwcm92aWRlZCBhIG51bWJlciBiZXR3ZWVuIGAwYCBhbmQgdGhlIGdpdmVuIG51bWJlciBpcyByZXR1cm5lZC5cbiAgICAgKiBJZiBgZmxvYXRpbmdgIGlzIGB0cnVlYCwgb3IgZWl0aGVyIGBtaW5gIG9yIGBtYXhgIGFyZSBmbG9hdHMsIGEgZmxvYXRpbmctcG9pbnRcbiAgICAgKiBudW1iZXIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdIFRoZSBtaW5pbXVtIHBvc3NpYmxlIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIFRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zsb2F0aW5nXSBTcGVjaWZ5IHJldHVybmluZyBhIGZsb2F0aW5nLXBvaW50IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSgwLCA1KTtcbiAgICAgKiAvLyA9PiBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oNSk7XG4gICAgICogLy8gPT4gYWxzbyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oNSwgdHJ1ZSk7XG4gICAgICogLy8gPT4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAwIGFuZCA1XG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSgxLjIsIDUuMik7XG4gICAgICogLy8gPT4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAxLjIgYW5kIDUuMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCwgZmxvYXRpbmcpIHtcbiAgICAgIGlmIChmbG9hdGluZyAmJiBpc0l0ZXJhdGVlQ2FsbChtaW4sIG1heCwgZmxvYXRpbmcpKSB7XG4gICAgICAgIG1heCA9IGZsb2F0aW5nID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIG5vTWluID0gbWluID09IG51bGwsXG4gICAgICAgICAgbm9NYXggPSBtYXggPT0gbnVsbDtcblxuICAgICAgaWYgKGZsb2F0aW5nID09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vTWF4ICYmIHR5cGVvZiBtaW4gPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSBtaW47XG4gICAgICAgICAgbWluID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWF4ID09ICdib29sZWFuJykge1xuICAgICAgICAgIGZsb2F0aW5nID0gbWF4O1xuICAgICAgICAgIG5vTWF4ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vTWluICYmIG5vTWF4KSB7XG4gICAgICAgIG1heCA9IDE7XG4gICAgICAgIG5vTWF4ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBtaW4gPSArbWluIHx8IDA7XG4gICAgICBpZiAobm9NYXgpIHtcbiAgICAgICAgbWF4ID0gbWluO1xuICAgICAgICBtaW4gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF4ID0gK21heCB8fCAwO1xuICAgICAgfVxuICAgICAgaWYgKGZsb2F0aW5nIHx8IG1pbiAlIDEgfHwgbWF4ICUgMSkge1xuICAgICAgICB2YXIgcmFuZCA9IG5hdGl2ZVJhbmRvbSgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlTWluKG1pbiArIChyYW5kICogKG1heCAtIG1pbiArIHBhcnNlRmxvYXQoJzFlLScgKyAoKHJhbmQgKyAnJykubGVuZ3RoIC0gMSkpKSksIG1heCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVJhbmRvbShtaW4sIG1heCk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gW2NhbWVsIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhbWVsQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYW1lbCBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCctLWZvby1iYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJ19fZm9vX2Jhcl9fJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKi9cbiAgICB2YXIgY2FtZWxDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICB3b3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICh3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSkgOiB3b3JkKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENhcGl0YWxpemVzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYXBpdGFsaXplZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2FwaXRhbGl6ZSgnZnJlZCcpO1xuICAgICAqIC8vID0+ICdGcmVkJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiBzdHJpbmcgJiYgKHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVidXJycyBgc3RyaW5nYCBieSBjb252ZXJ0aW5nIFtsYXRpbi0xIHN1cHBsZW1lbnRhcnkgbGV0dGVyc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW4tMV9TdXBwbGVtZW50XyhVbmljb2RlX2Jsb2NrKSNDaGFyYWN0ZXJfdGFibGUpXG4gICAgICogdG8gYmFzaWMgbGF0aW4gbGV0dGVycyBhbmQgcmVtb3ZpbmcgW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBkZWJ1cnIuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlYnVycignZMOpasOgIHZ1Jyk7XG4gICAgICogLy8gPT4gJ2RlamEgdnUnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVidXJyKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gc3RyaW5nICYmIHN0cmluZy5yZXBsYWNlKHJlTGF0aW4xLCBkZWJ1cnJMZXR0ZXIpLnJlcGxhY2UocmVDb21ib01hcmssICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHN0cmluZ2AgZW5kcyB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249c3RyaW5nLmxlbmd0aF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBlbmRzIHdpdGggYHRhcmdldGAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2MnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicsIDIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlbmRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpO1xuICAgICAgdGFyZ2V0ID0gKHRhcmdldCArICcnKTtcblxuICAgICAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBsZW5ndGhcbiAgICAgICAgOiBuYXRpdmVNaW4ocG9zaXRpb24gPCAwID8gMCA6ICgrcG9zaXRpb24gfHwgMCksIGxlbmd0aCk7XG5cbiAgICAgIHBvc2l0aW9uIC09IHRhcmdldC5sZW5ndGg7XG4gICAgICByZXR1cm4gcG9zaXRpb24gPj0gMCAmJiBzdHJpbmcuaW5kZXhPZih0YXJnZXQsIHBvc2l0aW9uKSA9PSBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgY2hhcmFjdGVycyBcIiZcIiwgXCI8XCIsIFwiPlwiLCAnXCInLCBcIidcIiwgYW5kIFwiXFxgXCIsIGluIGBzdHJpbmdgIHRvXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsIGNoYXJhY3RlcnNcbiAgICAgKiB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gICAgICpcbiAgICAgKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gICAgICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAgICAgKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFnIG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKiBTZWUgW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICAgICAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQmFja3RpY2tzIGFyZSBlc2NhcGVkIGJlY2F1c2UgaW4gSW50ZXJuZXQgRXhwbG9yZXIgPCA5LCB0aGV5IGNhbiBicmVhayBvdXRcbiAgICAgKiBvZiBhdHRyaWJ1dGUgdmFsdWVzIG9yIEhUTUwgY29tbWVudHMuIFNlZSBbIzU5XShodHRwczovL2h0bWw1c2VjLm9yZy8jNTkpLFxuICAgICAqIFsjMTAyXShodHRwczovL2h0bWw1c2VjLm9yZy8jMTAyKSwgWyMxMDhdKGh0dHBzOi8vaHRtbDVzZWMub3JnLyMxMDgpLCBhbmRcbiAgICAgKiBbIzEzM10oaHR0cHM6Ly9odG1sNXNlYy5vcmcvIzEzMykgb2YgdGhlIFtIVE1MNSBTZWN1cml0eSBDaGVhdHNoZWV0XShodHRwczovL2h0bWw1c2VjLm9yZy8pXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXMgW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKVxuICAgICAqIHRvIHJlZHVjZSBYU1MgdmVjdG9ycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICAgICAgLy8gUmVzZXQgYGxhc3RJbmRleGAgYmVjYXVzZSBpbiBJRSA8IDkgYFN0cmluZyNyZXBsYWNlYCBkb2VzIG5vdC5cbiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJcXFwiLCBcIi9cIiwgXCJeXCIsIFwiJFwiLCBcIi5cIiwgXCJ8XCIsIFwiP1wiLFxuICAgICAqIFwiKlwiLCBcIitcIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiIGFuZCBcIn1cIiBpbiBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICAgICAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczpcXC9cXC9sb2Rhc2hcXC5jb21cXC9cXCknXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1JlZ0V4cENoYXJzLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXJzLCBlc2NhcGVSZWdFeHBDaGFyKVxuICAgICAgICA6IChzdHJpbmcgfHwgJyg/OiknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBba2ViYWIgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3BlY2lhbF9jYXNlX3N0eWxlcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBrZWJhYiBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKi9cbiAgICB2YXIga2ViYWJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJy0nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuXG4gICAgICogUGFkZGluZyBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBjYW4ndCBiZSBldmVubHkgZGl2aWRlZCBieSBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgOCk7XG4gICAgICogLy8gPT4gJyAgYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDgsICdfLScpO1xuICAgICAqIC8vID0+ICdfLWFiY18tXydcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gK2xlbmd0aDtcblxuICAgICAgdmFyIHN0ckxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gICAgICBpZiAoc3RyTGVuZ3RoID49IGxlbmd0aCB8fCAhbmF0aXZlSXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMixcbiAgICAgICAgICBsZWZ0TGVuZ3RoID0gbmF0aXZlRmxvb3IobWlkKSxcbiAgICAgICAgICByaWdodExlbmd0aCA9IG5hdGl2ZUNlaWwobWlkKTtcblxuICAgICAgY2hhcnMgPSBjcmVhdGVQYWRkaW5nKCcnLCByaWdodExlbmd0aCwgY2hhcnMpO1xuICAgICAgcmV0dXJuIGNoYXJzLnNsaWNlKDAsIGxlZnRMZW5ndGgpICsgc3RyaW5nICsgY2hhcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkTGVmdCgnYWJjJywgNik7XG4gICAgICogLy8gPT4gJyAgIGFiYydcbiAgICAgKlxuICAgICAqIF8ucGFkTGVmdCgnYWJjJywgNiwgJ18tJyk7XG4gICAgICogLy8gPT4gJ18tX2FiYydcbiAgICAgKlxuICAgICAqIF8ucGFkTGVmdCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICB2YXIgcGFkTGVmdCA9IGNyZWF0ZVBhZERpcigpO1xuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgcmlnaHQgc2lkZSBpZiBpdCdzIHNob3J0ZXIgdGhhbiBgbGVuZ3RoYC4gUGFkZGluZ1xuICAgICAqIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGV4Y2VlZCBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZFJpZ2h0KCdhYmMnLCA2KTtcbiAgICAgKiAvLyA9PiAnYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWRSaWdodCgnYWJjJywgNiwgJ18tJyk7XG4gICAgICogLy8gPT4gJ2FiY18tXydcbiAgICAgKlxuICAgICAqIF8ucGFkUmlnaHQoJ2FiYycsIDMpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICovXG4gICAgdmFyIHBhZFJpZ2h0ID0gY3JlYXRlUGFkRGlyKHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gaW50ZWdlciBvZiB0aGUgc3BlY2lmaWVkIHJhZGl4LiBJZiBgcmFkaXhgIGlzXG4gICAgICogYHVuZGVmaW5lZGAgb3IgYDBgLCBhIGByYWRpeGAgb2YgYDEwYCBpcyB1c2VkIHVubGVzcyBgdmFsdWVgIGlzIGEgaGV4YWRlY2ltYWwsXG4gICAgICogaW4gd2hpY2ggY2FzZSBhIGByYWRpeGAgb2YgYDE2YCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFsaWducyB3aXRoIHRoZSBbRVM1IGltcGxlbWVudGF0aW9uXShodHRwczovL2VzNS5naXRodWIuaW8vI0UpXG4gICAgICogb2YgYHBhcnNlSW50YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhZGl4XSBUaGUgcmFkaXggdG8gaW50ZXJwcmV0IGB2YWx1ZWAgYnkuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFyc2VJbnQoJzA4Jyk7XG4gICAgICogLy8gPT4gOFxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzA4JywgJzEwJ10sIF8ucGFyc2VJbnQpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4LCBndWFyZCkge1xuICAgICAgLy8gRmlyZWZveCA8IDIxIGFuZCBPcGVyYSA8IDE1IGZvbGxvdyBFUzMgZm9yIGBwYXJzZUludGAuXG4gICAgICAvLyBDaHJvbWUgZmFpbHMgdG8gdHJpbSBsZWFkaW5nIDxCT00+IHdoaXRlc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzEwOSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCByYWRpeCwgZ3VhcmQpIDogcmFkaXggPT0gbnVsbCkge1xuICAgICAgICByYWRpeCA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHJhZGl4KSB7XG4gICAgICAgIHJhZGl4ID0gK3JhZGl4O1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdHJpbShzdHJpbmcpO1xuICAgICAgcmV0dXJuIG5hdGl2ZVBhcnNlSW50KHN0cmluZywgcmFkaXggfHwgKHJlSGFzSGV4UHJlZml4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRzIHRoZSBnaXZlbiBzdHJpbmcgYG5gIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MF0gVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCcqJywgMyk7XG4gICAgICogLy8gPT4gJyoqKidcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCdhYmMnLCAyKTtcbiAgICAgKiAvLyA9PiAnYWJjYWJjJ1xuICAgICAqXG4gICAgICogXy5yZXBlYXQoJ2FiYycsIDApO1xuICAgICAqIC8vID0+ICcnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgbikge1xuICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBuID0gK247XG4gICAgICBpZiAobiA8IDEgfHwgIXN0cmluZyB8fCAhbmF0aXZlSXNGaW5pdGUobikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIC8vIExldmVyYWdlIHRoZSBleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZyBhbGdvcml0aG0gZm9yIGEgZmFzdGVyIHJlcGVhdC5cbiAgICAgIC8vIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHBvbmVudGlhdGlvbl9ieV9zcXVhcmluZyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgZG8ge1xuICAgICAgICBpZiAobiAlIDIpIHtcbiAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIG4gPSBuYXRpdmVGbG9vcihuIC8gMik7XG4gICAgICAgIHN0cmluZyArPSBzdHJpbmc7XG4gICAgICB9IHdoaWxlIChuKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBbc25ha2UgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU25ha2VfY2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzbmFrZSBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnLS1mb28tYmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICovXG4gICAgdmFyIHNuYWtlQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICdfJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIFtzdGFydCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTdHlsaXN0aWNfb3Jfc3BlY2lhbGlzZWRfdXNhZ2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RhcnQgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnLS1mb28tYmFyJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnRm9vIEJhcidcbiAgICAgKi9cbiAgICB2YXIgc3RhcnRDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgKHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Bvc2l0aW9uPTBdIFRoZSBwb3NpdGlvbiB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHRhcmdldGAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYicsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09IG51bGxcbiAgICAgICAgPyAwXG4gICAgICAgIDogbmF0aXZlTWluKHBvc2l0aW9uIDwgMCA/IDAgOiAoK3Bvc2l0aW9uIHx8IDApLCBzdHJpbmcubGVuZ3RoKTtcblxuICAgICAgcmV0dXJuIHN0cmluZy5sYXN0SW5kZXhPZih0YXJnZXQsIHBvc2l0aW9uKSA9PSBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBjYW4gaW50ZXJwb2xhdGUgZGF0YSBwcm9wZXJ0aWVzXG4gICAgICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAgICAgKiBcImVzY2FwZVwiIGRlbGltaXRlcnMsIGFuZCBleGVjdXRlIEphdmFTY3JpcHQgaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnMuIERhdGFcbiAgICAgKiBwcm9wZXJ0aWVzIG1heSBiZSBhY2Nlc3NlZCBhcyBmcmVlIHZhcmlhYmxlcyBpbiB0aGUgdGVtcGxhdGUuIElmIGEgc2V0dGluZ1xuICAgICAqIG9iamVjdCBpcyBwcm92aWRlZCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEluIHRoZSBkZXZlbG9wbWVudCBidWlsZCBgXy50ZW1wbGF0ZWAgdXRpbGl6ZXNcbiAgICAgKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAgICAgKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gICAgICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICAgICAqXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gICAgICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlXSBUaGUgSFRNTCBcImVzY2FwZVwiIGRlbGltaXRlci5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXZhbHVhdGVdIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzXSBBbiBvYmplY3QgdG8gaW1wb3J0IGludG8gdGhlIHRlbXBsYXRlIGFzIGZyZWUgdmFyaWFibGVzLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZV0gVGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTF0gVGhlIHNvdXJjZVVSTCBvZiB0aGUgdGVtcGxhdGUncyBjb21waWxlZCBzb3VyY2UuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlXSBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtvdGhlck9wdGlvbnNdIEVuYWJsZXMgdGhlIGxlZ2FjeSBgb3B0aW9uc2AgcGFyYW0gc2lnbmF0dXJlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyIHRvIGNyZWF0ZSBhIGNvbXBpbGVkIHRlbXBsYXRlXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdmcmVkJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgSFRNTCBcImVzY2FwZVwiIGRlbGltaXRlciB0byBlc2NhcGUgZGF0YSBwcm9wZXJ0eSB2YWx1ZXNcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8Yj48JS0gdmFsdWUgJT48L2I+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICAgICAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlciB0byBleGVjdXRlIEphdmFTY3JpcHQgYW5kIGdlbmVyYXRlIEhUTUxcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBfLmZvckVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPicpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGludGVybmFsIGBwcmludGAgZnVuY3Rpb24gaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnNcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBwcmludChcImhlbGxvIFwiICsgdXNlcik7ICU+IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnYmFybmV5JyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBFUyBkZWxpbWl0ZXIgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGRlZmF1bHQgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlclxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvICR7IHVzZXIgfSEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ3BlYmJsZXMnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIGN1c3RvbSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXG4gICAgICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnbXVzdGFjaGUnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBiYWNrc2xhc2hlcyB0byB0cmVhdCBkZWxpbWl0ZXJzIGFzIHBsYWluIHRleHRcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JT0gXCJcXFxcPCUtIHZhbHVlICVcXFxcPlwiICU+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gICAgICogLy8gPT4gJzwlLSB2YWx1ZSAlPidcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgXG4gICAgICogdmFyIHRleHQgPSAnPCUganEuZWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+JztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICAgICAqXG4gICAgICogLy8gdXNpbmcgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICAgICAqIGNvbXBpbGVkKGRhdGEpO1xuICAgICAqIC8vID0+IGZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3JcbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgdmFyaWFibGVgIG9wdGlvbiB0byBlbnN1cmUgYSB3aXRoLXN0YXRlbWVudCBpc24ndCB1c2VkIGluIHRoZSBjb21waWxlZCB0ZW1wbGF0ZVxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gICAgICogY29tcGlsZWQuc291cmNlO1xuICAgICAqIC8vID0+IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICAgICAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICAgICAqIC8vICAgcmV0dXJuIF9fcDtcbiAgICAgKiAvLyB9XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICAgICAqIC8vIGxpbmUgbnVtYmVycyBpbiBlcnJvciBtZXNzYWdlcyBhbmQgYSBzdGFjayB0cmFjZVxuICAgICAqIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGN3ZCwgJ2pzdC5qcycpLCAnXFxcbiAgICAgKiAgIHZhciBKU1QgPSB7XFxcbiAgICAgKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAgICAgKiAgIH07XFxcbiAgICAgKiAnKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0ZW1wbGF0ZShzdHJpbmcsIG9wdGlvbnMsIG90aGVyT3B0aW9ucykge1xuICAgICAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvbiAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gICAgICAvLyBhbmQgTGF1cmEgRG9rdG9yb3ZhJ3MgZG9ULmpzIChodHRwczovL2dpdGh1Yi5jb20vb2xhZG8vZG9UKS5cbiAgICAgIHZhciBzZXR0aW5ncyA9IGxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzO1xuXG4gICAgICBpZiAob3RoZXJPcHRpb25zICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgb3RoZXJPcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0gb3RoZXJPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBvcHRpb25zID0gYXNzaWduV2l0aChiYXNlQXNzaWduKHt9LCBvdGhlck9wdGlvbnMgfHwgb3B0aW9ucyksIHNldHRpbmdzLCBhc3NpZ25Pd25EZWZhdWx0cyk7XG5cbiAgICAgIHZhciBpbXBvcnRzID0gYXNzaWduV2l0aChiYXNlQXNzaWduKHt9LCBvcHRpb25zLmltcG9ydHMpLCBzZXR0aW5ncy5pbXBvcnRzLCBhc3NpZ25Pd25EZWZhdWx0cyksXG4gICAgICAgICAgaW1wb3J0c0tleXMgPSBrZXlzKGltcG9ydHMpLFxuICAgICAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICAgICAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICAgICAgaXNFdmFsdWF0aW5nLFxuICAgICAgICAgIGluZGV4ID0gMCxcbiAgICAgICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgICAgIHNvdXJjZSA9IFwiX19wICs9ICdcIjtcblxuICAgICAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICAgICAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAgICAgKG9wdGlvbnMuZXNjYXBlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICtcbiAgICAgICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAgICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICAob3B0aW9ucy5ldmFsdWF0ZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JCdcbiAgICAgICwgJ2cnKTtcblxuICAgICAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAgICAgdmFyIHNvdXJjZVVSTCA9ICcvLyMgc291cmNlVVJMPScgK1xuICAgICAgICAoJ3NvdXJjZVVSTCcgaW4gb3B0aW9uc1xuICAgICAgICAgID8gb3B0aW9ucy5zb3VyY2VVUkxcbiAgICAgICAgICA6ICgnbG9kYXNoLnRlbXBsYXRlU291cmNlc1snICsgKCsrdGVtcGxhdGVDb3VudGVyKSArICddJylcbiAgICAgICAgKSArICdcXG4nO1xuXG4gICAgICBzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGVWYWx1ZSwgaW50ZXJwb2xhdGVWYWx1ZSwgZXNUZW1wbGF0ZVZhbHVlLCBldmFsdWF0ZVZhbHVlLCBvZmZzZXQpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAgICAgLy8gRXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZSBpbmNsdWRlZCBpbiBzdHJpbmcgbGl0ZXJhbHMuXG4gICAgICAgIHNvdXJjZSArPSBzdHJpbmcuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5nQ2hhcik7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgICAgIGlmIChlc2NhcGVWYWx1ZSkge1xuICAgICAgICAgIGlzRXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZVZhbHVlICsgXCI7XFxuX19wICs9ICdcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbigoX190ID0gKFwiICsgaW50ZXJwb2xhdGVWYWx1ZSArIFwiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICAgIC8vIFRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgcHJvZHVjdHMgcmVxdWlyZXMgcmV0dXJuaW5nIHRoZSBgbWF0Y2hgXG4gICAgICAgIC8vIHN0cmluZyBpbiBvcmRlciB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGBvZmZzZXRgIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9KTtcblxuICAgICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgICAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAgICAgLy8gY29kZSB0byBhZGQgdGhlIGRhdGEgb2JqZWN0IHRvIHRoZSB0b3Agb2YgdGhlIHNjb3BlIGNoYWluLlxuICAgICAgdmFyIHZhcmlhYmxlID0gb3B0aW9ucy52YXJpYWJsZTtcbiAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgc291cmNlID0gJ3dpdGggKG9iaikge1xcbicgKyBzb3VyY2UgKyAnXFxufVxcbic7XG4gICAgICB9XG4gICAgICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gICAgICBzb3VyY2UgPSAoaXNFdmFsdWF0aW5nID8gc291cmNlLnJlcGxhY2UocmVFbXB0eVN0cmluZ0xlYWRpbmcsICcnKSA6IHNvdXJjZSlcbiAgICAgICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ01pZGRsZSwgJyQxJylcbiAgICAgICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgICAgIC8vIEZyYW1lIGNvZGUgYXMgdGhlIGZ1bmN0aW9uIGJvZHkuXG4gICAgICBzb3VyY2UgPSAnZnVuY3Rpb24oJyArICh2YXJpYWJsZSB8fCAnb2JqJykgKyAnKSB7XFxuJyArXG4gICAgICAgICh2YXJpYWJsZVxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6ICdvYmogfHwgKG9iaiA9IHt9KTtcXG4nXG4gICAgICAgICkgK1xuICAgICAgICBcInZhciBfX3QsIF9fcCA9ICcnXCIgK1xuICAgICAgICAoaXNFc2NhcGluZ1xuICAgICAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgICAgICA6ICcnXG4gICAgICAgICkgK1xuICAgICAgICAoaXNFdmFsdWF0aW5nXG4gICAgICAgICAgPyAnLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcXG4nICtcbiAgICAgICAgICAgIFwiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCJcbiAgICAgICAgICA6ICc7XFxuJ1xuICAgICAgICApICtcbiAgICAgICAgc291cmNlICtcbiAgICAgICAgJ3JldHVybiBfX3BcXG59JztcblxuICAgICAgdmFyIHJlc3VsdCA9IGF0dGVtcHQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvbihpbXBvcnRzS2V5cywgc291cmNlVVJMICsgJ3JldHVybiAnICsgc291cmNlKS5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uJ3Mgc291cmNlIGJ5IGl0cyBgdG9TdHJpbmdgIG1ldGhvZCBvclxuICAgICAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgICAgIHJlc3VsdC5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICBpZiAoaXNFcnJvcihyZXN1bHQpKSB7XG4gICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbSgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLnRyaW0oJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLm1hcChbJyAgZm9vICAnLCAnICBiYXIgICddLCBfLnRyaW0pO1xuICAgICAqIC8vID0+IFsnZm9vJywgJ2JhciddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbShzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgdmFyIHZhbHVlID0gc3RyaW5nO1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoIXN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGNoYXJzLCBndWFyZCkgOiBjaGFycyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UodHJpbW1lZExlZnRJbmRleChzdHJpbmcpLCB0cmltbWVkUmlnaHRJbmRleChzdHJpbmcpICsgMSk7XG4gICAgICB9XG4gICAgICBjaGFycyA9IChjaGFycyArICcnKTtcbiAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoY2hhcnNMZWZ0SW5kZXgoc3RyaW5nLCBjaGFycyksIGNoYXJzUmlnaHRJbmRleChzdHJpbmcsIGNoYXJzKSArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbUxlZnQoJyAgYWJjICAnKTtcbiAgICAgKiAvLyA9PiAnYWJjICAnXG4gICAgICpcbiAgICAgKiBfLnRyaW1MZWZ0KCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnYWJjLV8tJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW1MZWZ0KHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdHJpbmc7XG4gICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmICghc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICBpZiAoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgY2hhcnMsIGd1YXJkKSA6IGNoYXJzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSh0cmltbWVkTGVmdEluZGV4KHN0cmluZykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5zbGljZShjaGFyc0xlZnRJbmRleChzdHJpbmcsIChjaGFycyArICcnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyaW1SaWdodCgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICcgIGFiYydcbiAgICAgKlxuICAgICAqIF8udHJpbVJpZ2h0KCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnLV8tYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW1SaWdodChzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgdmFyIHZhbHVlID0gc3RyaW5nO1xuICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoIXN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGNoYXJzLCBndWFyZCkgOiBjaGFycyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZFJpZ2h0SW5kZXgoc3RyaW5nKSArIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCBjaGFyc1JpZ2h0SW5kZXgoc3RyaW5nLCAoY2hhcnMgKyAnJykpICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGVzIGBzdHJpbmdgIGlmIGl0J3MgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBUaGUgbGFzdCBjaGFyYWN0ZXJzIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBvbWlzc2lvblxuICAgICAqIHN0cmluZyB3aGljaCBkZWZhdWx0cyB0byBcIi4uLlwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRydW5jYXRlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gW29wdGlvbnNdIFRoZSBvcHRpb25zIG9iamVjdCBvciBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxlbmd0aD0zMF0gVGhlIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub21pc3Npb249Jy4uLiddIFRoZSBzdHJpbmcgdG8gaW5kaWNhdGUgdGV4dCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW29wdGlvbnMuc2VwYXJhdG9yXSBUaGUgc2VwYXJhdG9yIHBhdHRlcm4gdG8gdHJ1bmNhdGUgdG8uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGEgY2FsbGJhY2sgZm9yIGZ1bmN0aW9ucyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJ1bmNhdGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cnVuYygnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycpO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm8uLi4nXG4gICAgICpcbiAgICAgKiBfLnRydW5jKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywgMjQpO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG4uLi4nXG4gICAgICpcbiAgICAgKiBfLnRydW5jKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICAgICAqICAgJ2xlbmd0aCc6IDI0LFxuICAgICAqICAgJ3NlcGFyYXRvcic6ICcgJ1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuYygnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgKiAgICdzZXBhcmF0b3InOiAvLD8gKy9cbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuYygnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdvbWlzc2lvbic6ICcgWy4uLl0nXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZyBbLi4uXSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cnVuYyhzdHJpbmcsIG9wdGlvbnMsIGd1YXJkKSB7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkpIHtcbiAgICAgICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBERUZBVUxUX1RSVU5DX0xFTkdUSCxcbiAgICAgICAgICBvbWlzc2lvbiA9IERFRkFVTFRfVFJVTkNfT01JU1NJT047XG5cbiAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9ICdzZXBhcmF0b3InIGluIG9wdGlvbnMgPyBvcHRpb25zLnNlcGFyYXRvciA6IHNlcGFyYXRvcjtcbiAgICAgICAgICBsZW5ndGggPSAnbGVuZ3RoJyBpbiBvcHRpb25zID8gKCtvcHRpb25zLmxlbmd0aCB8fCAwKSA6IGxlbmd0aDtcbiAgICAgICAgICBvbWlzc2lvbiA9ICdvbWlzc2lvbicgaW4gb3B0aW9ucyA/IGJhc2VUb1N0cmluZyhvcHRpb25zLm9taXNzaW9uKSA6IG9taXNzaW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlbmd0aCA9ICtvcHRpb25zIHx8IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKGxlbmd0aCA+PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgZW5kID0gbGVuZ3RoIC0gb21pc3Npb24ubGVuZ3RoO1xuICAgICAgaWYgKGVuZCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIG9taXNzaW9uO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHN0cmluZy5zbGljZSgwLCBlbmQpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChpc1JlZ0V4cChzZXBhcmF0b3IpKSB7XG4gICAgICAgIGlmIChzdHJpbmcuc2xpY2UoZW5kKS5zZWFyY2goc2VwYXJhdG9yKSkge1xuICAgICAgICAgIHZhciBtYXRjaCxcbiAgICAgICAgICAgICAgbmV3RW5kLFxuICAgICAgICAgICAgICBzdWJzdHJpbmcgPSBzdHJpbmcuc2xpY2UoMCwgZW5kKTtcblxuICAgICAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIChyZUZsYWdzLmV4ZWMoc2VwYXJhdG9yKSB8fCAnJykgKyAnZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXBhcmF0b3IubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gc2VwYXJhdG9yLmV4ZWMoc3Vic3RyaW5nKSkpIHtcbiAgICAgICAgICAgIG5ld0VuZCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbmV3RW5kID09IG51bGwgPyBlbmQgOiBuZXdFbmQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKHNlcGFyYXRvciwgZW5kKSAhPSBlbmQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gcmVzdWx0Lmxhc3RJbmRleE9mKHNlcGFyYXRvcik7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdCArIG9taXNzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBpbnZlcnNlIG9mIGBfLmVzY2FwZWA7IHRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBIVE1MIGVudGl0aWVzXG4gICAgICogYCZhbXA7YCwgYCZsdDtgLCBgJmd0O2AsIGAmcXVvdDtgLCBgJiMzOTtgLCBhbmQgYCYjOTY7YCBpbiBgc3RyaW5nYCB0byB0aGVpclxuICAgICAqIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBObyBvdGhlciBIVE1MIGVudGl0aWVzIGFyZSB1bmVzY2FwZWQuIFRvIHVuZXNjYXBlIGFkZGl0aW9uYWwgSFRNTFxuICAgICAqIGVudGl0aWVzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB1bmVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmVzY2FwZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuZXNjYXBlKCdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5lc2NhcGUoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzRXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlRXNjYXBlZEh0bWwsIHVuZXNjYXBlSHRtbENoYXIpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhIGNhbGxiYWNrIGZvciBmdW5jdGlvbnMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gWydmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJywgL1teLCBdKy9nKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJyYnLCAncGViYmxlcyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gd29yZHMoc3RyaW5nLCBwYXR0ZXJuLCBndWFyZCkge1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgcGF0dGVybiwgZ3VhcmQpKSB7XG4gICAgICAgIHBhdHRlcm4gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiBzdHJpbmcubWF0Y2gocGF0dGVybiB8fCByZVdvcmRzKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBpbnZva2UgYGZ1bmNgLCByZXR1cm5pbmcgZWl0aGVyIHRoZSByZXN1bHQgb3IgdGhlIGNhdWdodCBlcnJvclxuICAgICAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCBpcyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gYXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9yc1xuICAgICAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAqIH0sICc+Xz4nKTtcbiAgICAgKlxuICAgICAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gICAgICogICBlbGVtZW50cyA9IFtdO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICB2YXIgYXR0ZW1wdCA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBpc0Vycm9yKGUpID8gZSA6IG5ldyBFcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYFxuICAgICAqIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uIElmIGBmdW5jYCBpcyBhIHByb3BlcnR5IG5hbWUgdGhlXG4gICAgICogY3JlYXRlZCBjYWxsYmFjayByZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBnaXZlbiBlbGVtZW50LiBJZiBgZnVuY2BcbiAgICAgKiBpcyBhbiBvYmplY3QgdGhlIGNyZWF0ZWQgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpblxuICAgICAqIHRoZSBlcXVpdmFsZW50IG9iamVjdCBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGFsaWFzIGl0ZXJhdGVlXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYSBjYWxsYmFjayBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNhbGxiYWNrLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyB3cmFwIHRvIGNyZWF0ZSBjdXN0b20gY2FsbGJhY2sgc2hvcnRoYW5kc1xuICAgICAqIF8uY2FsbGJhY2sgPSBfLndyYXAoXy5jYWxsYmFjaywgZnVuY3Rpb24oY2FsbGJhY2ssIGZ1bmMsIHRoaXNBcmcpIHtcbiAgICAgKiAgIHZhciBtYXRjaCA9IC9eKC4rPylfXyhbZ2xddCkoLispJC8uZXhlYyhmdW5jKTtcbiAgICAgKiAgIGlmICghbWF0Y2gpIHtcbiAgICAgKiAgICAgcmV0dXJuIGNhbGxiYWNrKGZ1bmMsIHRoaXNBcmcpO1xuICAgICAqICAgfVxuICAgICAqICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAqICAgICByZXR1cm4gbWF0Y2hbMl0gPT0gJ2d0J1xuICAgICAqICAgICAgID8gb2JqZWN0W21hdGNoWzFdXSA+IG1hdGNoWzNdXG4gICAgICogICAgICAgOiBvYmplY3RbbWF0Y2hbMV1dIDwgbWF0Y2hbM107XG4gICAgICogICB9O1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIodXNlcnMsICdhZ2VfX2d0MzYnKTtcbiAgICAgKiAvLyA9PiBbeyAndXNlcic6ICdmcmVkJywgJ2FnZSc6IDQwIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FsbGJhY2soZnVuYywgdGhpc0FyZywgZ3VhcmQpIHtcbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChmdW5jLCB0aGlzQXJnLCBndWFyZCkpIHtcbiAgICAgICAgdGhpc0FyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc09iamVjdExpa2UoZnVuYylcbiAgICAgICAgPyBtYXRjaGVzKGZ1bmMpXG4gICAgICAgIDogYmFzZUNhbGxiYWNrKGZ1bmMsIHRoaXNBcmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsaXR5XG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAgICAgKiB2YXIgZ2V0dGVyID0gXy5jb25zdGFudChvYmplY3QpO1xuICAgICAqXG4gICAgICogZ2V0dGVyKCkgPT09IG9iamVjdDtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBwcm92aWRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsaXR5XG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAgICAgKlxuICAgICAqIF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0O1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gYSBnaXZlbiBvYmplY3RcbiAgICAgKiBhbmQgYHNvdXJjZWAsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgZXF1aXZhbGVudCBwcm9wZXJ0eVxuICAgICAqIHZhbHVlcywgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGJvb2xlYW5zLCBgRGF0ZWAgb2JqZWN0cyxcbiAgICAgKiBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBhbmQgc3RyaW5ncy4gT2JqZWN0cyBhcmUgY29tcGFyZWQgYnlcbiAgICAgKiB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRm9yIGNvbXBhcmluZyBhIHNpbmdsZVxuICAgICAqIG93biBvciBpbmhlcml0ZWQgcHJvcGVydHkgdmFsdWUgc2VlIGBfLm1hdGNoZXNQcm9wZXJ0eWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBfLm1hdGNoZXMoeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9KSk7XG4gICAgICogLy8gPT4gW3sgJ3VzZXInOiAnZnJlZCcsICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHJldHVybiBiYXNlTWF0Y2hlcyhiYXNlQ2xvbmUoc291cmNlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY29tcGFyZXMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIGBwYXRoYCBvbiBhIGdpdmVuXG4gICAgICogb2JqZWN0IHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYm9vbGVhbnMsIGBEYXRlYCBvYmplY3RzLFxuICAgICAqIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsIGFuZCBzdHJpbmdzLiBPYmplY3RzIGFyZSBjb21wYXJlZCBieVxuICAgICAqIHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmQodXNlcnMsIF8ubWF0Y2hlc1Byb3BlcnR5KCd1c2VyJywgJ2ZyZWQnKSk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdmcmVkJyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBiYXNlQ2xvbmUoc3JjVmFsdWUsIHRydWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBtZXRob2QgYXQgYHBhdGhgIG9uIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiB7ICdjJzogXy5jb25zdGFudCgyKSB9IH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogeyAnYyc6IF8uY29uc3RhbnQoMSkgfSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoJ2EuYi5jJykpO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqXG4gICAgICogXy5pbnZva2UoXy5zb3J0Qnkob2JqZWN0cywgXy5tZXRob2QoWydhJywgJ2InLCAnYyddKSksICdhLmIuYycpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIHZhciBtZXRob2QgPSByZXN0UGFyYW0oZnVuY3Rpb24ocGF0aCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gaW52b2tlUGF0aChvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tZXRob2RgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICogdGhlIG1ldGhvZCBhdCBhIGdpdmVuIHBhdGggb24gYG9iamVjdGAuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IF8udGltZXMoMywgXy5jb25zdGFudCksXG4gICAgICogICAgIG9iamVjdCA9IHsgJ2EnOiBhcnJheSwgJ2InOiBhcnJheSwgJ2MnOiBhcnJheSB9O1xuICAgICAqXG4gICAgICogXy5tYXAoWydhWzJdJywgJ2NbMF0nXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKi9cbiAgICB2YXIgbWV0aG9kT2YgPSByZXN0UGFyYW0oZnVuY3Rpb24ob2JqZWN0LCBhcmdzKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gaW52b2tlUGF0aChvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYWxsIG93biBlbnVtZXJhYmxlIGZ1bmN0aW9uIHByb3BlcnRpZXMgb2YgYSBzb3VyY2Ugb2JqZWN0IHRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gSWYgYG9iamVjdGAgaXMgYSBmdW5jdGlvbiB0aGVuIG1ldGhvZHMgYXJlIGFkZGVkIHRvXG4gICAgICogaXRzIHByb3RvdHlwZSBhcyB3ZWxsLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVzZSBgXy5ydW5JbkNvbnRleHRgIHRvIGNyZWF0ZSBhIHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHRvXG4gICAgICogYXZvaWQgY29uZmxpY3RzIGNhdXNlZCBieSBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gW29iamVjdD1sb2Rhc2hdIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIGZ1bmN0aW9ucyB0byBhZGQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jaGFpbj10cnVlXSBTcGVjaWZ5IHdoZXRoZXIgdGhlIGZ1bmN0aW9ucyBhZGRlZFxuICAgICAqICBhcmUgY2hhaW5hYmxlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbnxPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHZvd2VscyhzdHJpbmcpIHtcbiAgICAgKiAgIHJldHVybiBfLmZpbHRlcihzdHJpbmcsIGZ1bmN0aW9uKHYpIHtcbiAgICAgKiAgICAgcmV0dXJuIC9bYWVpb3VdL2kudGVzdCh2KTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0pO1xuICAgICAqIF8udm93ZWxzKCdmcmVkJyk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKlxuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICpcbiAgICAgKiBfLm1peGluKHsgJ3Zvd2Vscyc6IHZvd2VscyB9LCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1peGluKG9iamVjdCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgIHZhciBpc09iaiA9IGlzT2JqZWN0KHNvdXJjZSksXG4gICAgICAgICAgICBwcm9wcyA9IGlzT2JqID8ga2V5cyhzb3VyY2UpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbWV0aG9kTmFtZXMgPSAocHJvcHMgJiYgcHJvcHMubGVuZ3RoKSA/IGJhc2VGdW5jdGlvbnMoc291cmNlLCBwcm9wcykgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKCEobWV0aG9kTmFtZXMgPyBtZXRob2ROYW1lcy5sZW5ndGggOiBpc09iaikpIHtcbiAgICAgICAgICBtZXRob2ROYW1lcyA9IGZhbHNlO1xuICAgICAgICAgIG9wdGlvbnMgPSBzb3VyY2U7XG4gICAgICAgICAgc291cmNlID0gb2JqZWN0O1xuICAgICAgICAgIG9iamVjdCA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghbWV0aG9kTmFtZXMpIHtcbiAgICAgICAgbWV0aG9kTmFtZXMgPSBiYXNlRnVuY3Rpb25zKHNvdXJjZSwga2V5cyhzb3VyY2UpKTtcbiAgICAgIH1cbiAgICAgIHZhciBjaGFpbiA9IHRydWUsXG4gICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICBpc0Z1bmMgPSBpc0Z1bmN0aW9uKG9iamVjdCksXG4gICAgICAgICAgbGVuZ3RoID0gbWV0aG9kTmFtZXMubGVuZ3RoO1xuXG4gICAgICBpZiAob3B0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgY2hhaW4gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NoYWluJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGNoYWluID0gb3B0aW9ucy5jaGFpbjtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBtZXRob2ROYW1lID0gbWV0aG9kTmFtZXNbaW5kZXhdLFxuICAgICAgICAgICAgZnVuYyA9IHNvdXJjZVttZXRob2ROYW1lXTtcblxuICAgICAgICBvYmplY3RbbWV0aG9kTmFtZV0gPSBmdW5jO1xuICAgICAgICBpZiAoaXNGdW5jKSB7XG4gICAgICAgICAgb2JqZWN0LnByb3RvdHlwZVttZXRob2ROYW1lXSA9IChmdW5jdGlvbihmdW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBjaGFpbkFsbCA9IHRoaXMuX19jaGFpbl9fO1xuICAgICAgICAgICAgICBpZiAoY2hhaW4gfHwgY2hhaW5BbGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0KHRoaXMuX193cmFwcGVkX18pLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zID0gcmVzdWx0Ll9fYWN0aW9uc19fID0gYXJyYXlDb3B5KHRoaXMuX19hY3Rpb25zX18pO1xuXG4gICAgICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHsgJ2Z1bmMnOiBmdW5jLCAnYXJncyc6IGFyZ3VtZW50cywgJ3RoaXNBcmcnOiBvYmplY3QgfSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IGNoYWluQWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkob2JqZWN0LCBhcnJheVB1c2goW3RoaXMudmFsdWUoKV0sIGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KGZ1bmMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnRzIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzIHByZXZpb3VzIHZhbHVlIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvXG4gICAgICogdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgbG9kYXNoID0gXy5ub0NvbmZsaWN0KCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9Db25mbGljdCgpIHtcbiAgICAgIHJvb3QuXyA9IG9sZERhc2g7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIG5vLW9wZXJhdGlvbiBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHVuZGVmaW5lZGAgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAgKiBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAndXNlcic6ICdmcmVkJyB9O1xuICAgICAqXG4gICAgICogXy5ub29wKG9iamVjdCkgPT09IHVuZGVmaW5lZDtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9vcCgpIHtcbiAgICAgIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgYXQgYHBhdGhgIG9uIGFcbiAgICAgKiBnaXZlbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiB7ICdjJzogMiB9IH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogeyAnYyc6IDEgfSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iLmMnKSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICpcbiAgICAgKiBfLnBsdWNrKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InLCAnYyddKSksICdhLmIuYycpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgICAgIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eShwYXRoKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnByb3BlcnR5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJuc1xuICAgICAqIHRoZSBwcm9wZXJ0eSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb24gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbGl0eVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzAsIDEsIDJdLFxuICAgICAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5T2Yob2JqZWN0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHRvUGF0aChwYXRoKSwgcGF0aCArICcnKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIChwb3NpdGl2ZSBhbmQvb3IgbmVnYXRpdmUpIHByb2dyZXNzaW5nIGZyb21cbiAgICAgKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXNcbiAgICAgKiBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLiBJZiBgZW5kYCBpcyBsZXNzIHRoYW4gYHN0YXJ0YFxuICAgICAqIGEgemVyby1sZW5ndGggcmFuZ2UgaXMgY3JlYXRlZCB1bmxlc3MgYSBuZWdhdGl2ZSBgc3RlcGAgaXMgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MV0gVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgbnVtYmVycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5nZSg0KTtcbiAgICAgKiAvLyA9PiBbMCwgMSwgMiwgM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAgICAgKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgxLCA0LCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByYW5nZShzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgICBpZiAoc3RlcCAmJiBpc0l0ZXJhdGVlQ2FsbChzdGFydCwgZW5kLCBzdGVwKSkge1xuICAgICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSArc3RhcnQgfHwgMDtcbiAgICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogKCtzdGVwIHx8IDApO1xuXG4gICAgICBpZiAoZW5kID09IG51bGwpIHtcbiAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuZCA9ICtlbmQgfHwgMDtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBgQXJyYXkobGVuZ3RoKWAgc28gZW5naW5lcyBsaWtlIENoYWtyYSBhbmQgVjggYXZvaWQgc2xvd2VyIG1vZGVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8veW91dHUuYmUvWEFxSXBHVThaWmsjdD0xN20yNXMgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChuYXRpdmVDZWlsKChlbmQgLSBzdGFydCkgLyAoc3RlcCB8fCAxKSksIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBzdGFydDtcbiAgICAgICAgc3RhcnQgKz0gc3RlcDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgaXRlcmF0ZWUgZnVuY3Rpb24gYG5gIHRpbWVzLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHNcbiAgICAgKiBvZiBlYWNoIGludm9jYXRpb24uIFRoZSBgaXRlcmF0ZWVgIGlzIGJvdW5kIHRvIGB0aGlzQXJnYCBhbmQgaW52b2tlZCB3aXRoXG4gICAgICogb25lIGFyZ3VtZW50OyAoaW5kZXgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxpdHlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGRpY2VSb2xscyA9IF8udGltZXMoMywgXy5wYXJ0aWFsKF8ucmFuZG9tLCAxLCA2LCBmYWxzZSkpO1xuICAgICAqIC8vID0+IFszLCA2LCA0XVxuICAgICAqXG4gICAgICogXy50aW1lcygzLCBmdW5jdGlvbihuKSB7XG4gICAgICogICBtYWdlLmNhc3RTcGVsbChuKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBpbnZva2VzIGBtYWdlLmNhc3RTcGVsbChuKWAgdGhyZWUgdGltZXMgd2l0aCBgbmAgb2YgYDBgLCBgMWAsIGFuZCBgMmBcbiAgICAgKlxuICAgICAqIF8udGltZXMoMywgZnVuY3Rpb24obikge1xuICAgICAqICAgdGhpcy5jYXN0KG4pO1xuICAgICAqIH0sIG1hZ2UpO1xuICAgICAqIC8vID0+IGFsc28gaW52b2tlcyBgbWFnZS5jYXN0U3BlbGwobilgIHRocmVlIHRpbWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXMobiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgIG4gPSBuYXRpdmVGbG9vcihuKTtcblxuICAgICAgLy8gRXhpdCBlYXJseSB0byBhdm9pZCBhIEpTQyBKSVQgYnVnIGluIFNhZmFyaSA4XG4gICAgICAvLyB3aGVyZSBgQXJyYXkoMClgIGlzIHRyZWF0ZWQgYXMgYEFycmF5KDEpYC5cbiAgICAgIGlmIChuIDwgMSB8fCAhbmF0aXZlSXNGaW5pdGUobikpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobmF0aXZlTWluKG4sIE1BWF9BUlJBWV9MRU5HVEgpKTtcblxuICAgICAgaXRlcmF0ZWUgPSBiaW5kQ2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDEpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICAgIGlmIChpbmRleCA8IE1BWF9BUlJBWV9MRU5HVEgpIHtcbiAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZXJhdGVlKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUgSUQuIElmIGBwcmVmaXhgIGlzIHByb3ZpZGVkIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsaXR5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXhdIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICAgICAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAgICAgKlxuICAgICAqIF8udW5pcXVlSWQoKTtcbiAgICAgKiAvLyA9PiAnMTA1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICAgICAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gICAgICByZXR1cm4gYmFzZVRvU3RyaW5nKHByZWZpeCkgKyBpZDtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXVnZW5kIFRoZSBmaXJzdCBudW1iZXIgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhZGRlbmQgVGhlIHNlY29uZCBudW1iZXIgdG8gYWRkLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5hZGQoNiwgNCk7XG4gICAgICogLy8gPT4gMTBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGQoYXVnZW5kLCBhZGRlbmQpIHtcbiAgICAgIHJldHVybiAoK2F1Z2VuZCB8fCAwKSArICgrYWRkZW5kIHx8IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgYG5gIHJvdW5kZWQgdXAgdG8gYHByZWNpc2lvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgdG8gcm91bmQgdXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCB1cCB0by5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIHVwIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jZWlsKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICpcbiAgICAgKiBfLmNlaWwoNi4wMDQsIDIpO1xuICAgICAqIC8vID0+IDYuMDFcbiAgICAgKlxuICAgICAqIF8uY2VpbCg2MDQwLCAtMik7XG4gICAgICogLy8gPT4gNjEwMFxuICAgICAqL1xuICAgIHZhciBjZWlsID0gY3JlYXRlUm91bmQoJ2NlaWwnKTtcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgYG5gIHJvdW5kZWQgZG93biB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciB0byByb3VuZCBkb3duLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgZG93biB0by5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIGRvd24gbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsb29yKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLmZsb29yKDAuMDQ2LCAyKTtcbiAgICAgKiAvLyA9PiAwLjA0XG4gICAgICpcbiAgICAgKiBfLmZsb29yKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MDAwXG4gICAgICovXG4gICAgdmFyIGZsb29yID0gY3JlYXRlUm91bmQoJ2Zsb29yJyk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBjb2xsZWN0aW9uYC4gSWYgYGNvbGxlY3Rpb25gIGlzIGVtcHR5IG9yIGZhbHNleVxuICAgICAqIGAtSW5maW5pdHlgIGlzIHJldHVybmVkLiBJZiBhbiBpdGVyYXRlZSBmdW5jdGlvbiBpcyBwcm92aWRlZCBpdCBpcyBpbnZva2VkXG4gICAgICogZm9yIGVhY2ggdmFsdWUgaW4gYGNvbGxlY3Rpb25gIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2ggdGhlIHZhbHVlXG4gICAgICogaXMgcmFua2VkLiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWF4KFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gOFxuICAgICAqXG4gICAgICogXy5tYXgoW10pO1xuICAgICAqIC8vID0+IC1JbmZpbml0eVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXgodXNlcnMsIGZ1bmN0aW9uKGNocikge1xuICAgICAqICAgcmV0dXJuIGNoci5hZ2U7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdmcmVkJywgJ2FnZSc6IDQwIH1cbiAgICAgKlxuICAgICAqIC8vIHVzaW5nIHRoZSBgXy5wcm9wZXJ0eWAgY2FsbGJhY2sgc2hvcnRoYW5kXG4gICAgICogXy5tYXgodXNlcnMsICdhZ2UnKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfVxuICAgICAqL1xuICAgIHZhciBtYXggPSBjcmVhdGVFeHRyZW11bShndCwgTkVHQVRJVkVfSU5GSU5JVFkpO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbWluaW11bSB2YWx1ZSBvZiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBlbXB0eSBvciBmYWxzZXlcbiAgICAgKiBgSW5maW5pdHlgIGlzIHJldHVybmVkLiBJZiBhbiBpdGVyYXRlZSBmdW5jdGlvbiBpcyBwcm92aWRlZCBpdCBpcyBpbnZva2VkXG4gICAgICogZm9yIGVhY2ggdmFsdWUgaW4gYGNvbGxlY3Rpb25gIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2ggdGhlIHZhbHVlXG4gICAgICogaXMgcmFua2VkLiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBJZiBhIHByb3BlcnR5IG5hbWUgaXMgcHJvdmlkZWQgZm9yIGBpdGVyYXRlZWAgdGhlIGNyZWF0ZWQgYF8ucHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiBhIHZhbHVlIGlzIGFsc28gcHJvdmlkZWQgZm9yIGB0aGlzQXJnYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzUHJvcGVydHlgXG4gICAgICogc3R5bGUgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIG1hdGNoaW5nIHByb3BlcnR5XG4gICAgICogdmFsdWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBmb3IgYGl0ZXJhdGVlYCB0aGUgY3JlYXRlZCBgXy5tYXRjaGVzYCBzdHlsZVxuICAgICAqIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuXG4gICAgICogb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWluKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogXy5taW4oW10pO1xuICAgICAqIC8vID0+IEluZmluaXR5XG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLm1pbih1c2VycywgZnVuY3Rpb24oY2hyKSB7XG4gICAgICogICByZXR1cm4gY2hyLmFnZTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8ubWluKHVzZXJzLCAnYWdlJyk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqL1xuICAgIHZhciBtaW4gPSBjcmVhdGVFeHRyZW11bShsdCwgUE9TSVRJVkVfSU5GSU5JVFkpO1xuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyBgbmAgcm91bmRlZCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciB0byByb3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2LCAyKTtcbiAgICAgKiAvLyA9PiA0LjAxXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MTAwXG4gICAgICovXG4gICAgdmFyIHJvdW5kID0gY3JlYXRlUm91bmQoJ3JvdW5kJyk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBpbiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R8c3RyaW5nfSBbaXRlcmF0ZWVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN1bShbNCwgNl0pO1xuICAgICAqIC8vID0+IDEwXG4gICAgICpcbiAgICAgKiBfLnN1bSh7ICdhJzogNCwgJ2InOiA2IH0pO1xuICAgICAqIC8vID0+IDEwXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ24nOiA0IH0sXG4gICAgICogICB7ICduJzogNiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uc3VtKG9iamVjdHMsIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAqICAgcmV0dXJuIG9iamVjdC5uO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IDEwXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyB0aGUgYF8ucHJvcGVydHlgIGNhbGxiYWNrIHNob3J0aGFuZFxuICAgICAqIF8uc3VtKG9iamVjdHMsICduJyk7XG4gICAgICogLy8gPT4gMTBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdW0oY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHtcbiAgICAgIGlmICh0aGlzQXJnICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpO1xuICAgICAgcmV0dXJuIGl0ZXJhdGVlLmxlbmd0aCA9PSAxXG4gICAgICAgID8gYXJyYXlTdW0oaXNBcnJheShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB0b0l0ZXJhYmxlKGNvbGxlY3Rpb24pLCBpdGVyYXRlZSlcbiAgICAgICAgOiBiYXNlU3VtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG4gICAgbG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xuXG4gICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbiAgICBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXp5V3JhcHBlcjtcblxuICAgIC8vIEFkZCBmdW5jdGlvbnMgdG8gdGhlIGBNYXBgIGNhY2hlLlxuICAgIE1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBEZWxldGU7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcEdldDtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwSGFzO1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBTZXQ7XG5cbiAgICAvLyBBZGQgZnVuY3Rpb25zIHRvIHRoZSBgU2V0YCBjYWNoZS5cbiAgICBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IGNhY2hlUHVzaDtcblxuICAgIC8vIEFzc2lnbiBjYWNoZSB0byBgXy5tZW1vaXplYC5cbiAgICBtZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbiAgICAvLyBBZGQgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHdyYXBwZWQgdmFsdWVzIHdoZW4gY2hhaW5pbmcuXG4gICAgbG9kYXNoLmFmdGVyID0gYWZ0ZXI7XG4gICAgbG9kYXNoLmFyeSA9IGFyeTtcbiAgICBsb2Rhc2guYXNzaWduID0gYXNzaWduO1xuICAgIGxvZGFzaC5hdCA9IGF0O1xuICAgIGxvZGFzaC5iZWZvcmUgPSBiZWZvcmU7XG4gICAgbG9kYXNoLmJpbmQgPSBiaW5kO1xuICAgIGxvZGFzaC5iaW5kQWxsID0gYmluZEFsbDtcbiAgICBsb2Rhc2guYmluZEtleSA9IGJpbmRLZXk7XG4gICAgbG9kYXNoLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgbG9kYXNoLmNoYWluID0gY2hhaW47XG4gICAgbG9kYXNoLmNodW5rID0gY2h1bms7XG4gICAgbG9kYXNoLmNvbXBhY3QgPSBjb21wYWN0O1xuICAgIGxvZGFzaC5jb25zdGFudCA9IGNvbnN0YW50O1xuICAgIGxvZGFzaC5jb3VudEJ5ID0gY291bnRCeTtcbiAgICBsb2Rhc2guY3JlYXRlID0gY3JlYXRlO1xuICAgIGxvZGFzaC5jdXJyeSA9IGN1cnJ5O1xuICAgIGxvZGFzaC5jdXJyeVJpZ2h0ID0gY3VycnlSaWdodDtcbiAgICBsb2Rhc2guZGVib3VuY2UgPSBkZWJvdW5jZTtcbiAgICBsb2Rhc2guZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBsb2Rhc2guZGVmYXVsdHNEZWVwID0gZGVmYXVsdHNEZWVwO1xuICAgIGxvZGFzaC5kZWZlciA9IGRlZmVyO1xuICAgIGxvZGFzaC5kZWxheSA9IGRlbGF5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlID0gZGlmZmVyZW5jZTtcbiAgICBsb2Rhc2guZHJvcCA9IGRyb3A7XG4gICAgbG9kYXNoLmRyb3BSaWdodCA9IGRyb3BSaWdodDtcbiAgICBsb2Rhc2guZHJvcFJpZ2h0V2hpbGUgPSBkcm9wUmlnaHRXaGlsZTtcbiAgICBsb2Rhc2guZHJvcFdoaWxlID0gZHJvcFdoaWxlO1xuICAgIGxvZGFzaC5maWxsID0gZmlsbDtcbiAgICBsb2Rhc2guZmlsdGVyID0gZmlsdGVyO1xuICAgIGxvZGFzaC5mbGF0dGVuID0gZmxhdHRlbjtcbiAgICBsb2Rhc2guZmxhdHRlbkRlZXAgPSBmbGF0dGVuRGVlcDtcbiAgICBsb2Rhc2guZmxvdyA9IGZsb3c7XG4gICAgbG9kYXNoLmZsb3dSaWdodCA9IGZsb3dSaWdodDtcbiAgICBsb2Rhc2guZm9yRWFjaCA9IGZvckVhY2g7XG4gICAgbG9kYXNoLmZvckVhY2hSaWdodCA9IGZvckVhY2hSaWdodDtcbiAgICBsb2Rhc2guZm9ySW4gPSBmb3JJbjtcbiAgICBsb2Rhc2guZm9ySW5SaWdodCA9IGZvckluUmlnaHQ7XG4gICAgbG9kYXNoLmZvck93biA9IGZvck93bjtcbiAgICBsb2Rhc2guZm9yT3duUmlnaHQgPSBmb3JPd25SaWdodDtcbiAgICBsb2Rhc2guZnVuY3Rpb25zID0gZnVuY3Rpb25zO1xuICAgIGxvZGFzaC5ncm91cEJ5ID0gZ3JvdXBCeTtcbiAgICBsb2Rhc2guaW5kZXhCeSA9IGluZGV4Qnk7XG4gICAgbG9kYXNoLmluaXRpYWwgPSBpbml0aWFsO1xuICAgIGxvZGFzaC5pbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb247XG4gICAgbG9kYXNoLmludmVydCA9IGludmVydDtcbiAgICBsb2Rhc2guaW52b2tlID0gaW52b2tlO1xuICAgIGxvZGFzaC5rZXlzID0ga2V5cztcbiAgICBsb2Rhc2gua2V5c0luID0ga2V5c0luO1xuICAgIGxvZGFzaC5tYXAgPSBtYXA7XG4gICAgbG9kYXNoLm1hcEtleXMgPSBtYXBLZXlzO1xuICAgIGxvZGFzaC5tYXBWYWx1ZXMgPSBtYXBWYWx1ZXM7XG4gICAgbG9kYXNoLm1hdGNoZXMgPSBtYXRjaGVzO1xuICAgIGxvZGFzaC5tYXRjaGVzUHJvcGVydHkgPSBtYXRjaGVzUHJvcGVydHk7XG4gICAgbG9kYXNoLm1lbW9pemUgPSBtZW1vaXplO1xuICAgIGxvZGFzaC5tZXJnZSA9IG1lcmdlO1xuICAgIGxvZGFzaC5tZXRob2QgPSBtZXRob2Q7XG4gICAgbG9kYXNoLm1ldGhvZE9mID0gbWV0aG9kT2Y7XG4gICAgbG9kYXNoLm1peGluID0gbWl4aW47XG4gICAgbG9kYXNoLm1vZEFyZ3MgPSBtb2RBcmdzO1xuICAgIGxvZGFzaC5uZWdhdGUgPSBuZWdhdGU7XG4gICAgbG9kYXNoLm9taXQgPSBvbWl0O1xuICAgIGxvZGFzaC5vbmNlID0gb25jZTtcbiAgICBsb2Rhc2gucGFpcnMgPSBwYWlycztcbiAgICBsb2Rhc2gucGFydGlhbCA9IHBhcnRpYWw7XG4gICAgbG9kYXNoLnBhcnRpYWxSaWdodCA9IHBhcnRpYWxSaWdodDtcbiAgICBsb2Rhc2gucGFydGl0aW9uID0gcGFydGl0aW9uO1xuICAgIGxvZGFzaC5waWNrID0gcGljaztcbiAgICBsb2Rhc2gucGx1Y2sgPSBwbHVjaztcbiAgICBsb2Rhc2gucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICBsb2Rhc2gucHJvcGVydHlPZiA9IHByb3BlcnR5T2Y7XG4gICAgbG9kYXNoLnB1bGwgPSBwdWxsO1xuICAgIGxvZGFzaC5wdWxsQXQgPSBwdWxsQXQ7XG4gICAgbG9kYXNoLnJhbmdlID0gcmFuZ2U7XG4gICAgbG9kYXNoLnJlYXJnID0gcmVhcmc7XG4gICAgbG9kYXNoLnJlamVjdCA9IHJlamVjdDtcbiAgICBsb2Rhc2gucmVtb3ZlID0gcmVtb3ZlO1xuICAgIGxvZGFzaC5yZXN0ID0gcmVzdDtcbiAgICBsb2Rhc2gucmVzdFBhcmFtID0gcmVzdFBhcmFtO1xuICAgIGxvZGFzaC5zZXQgPSBzZXQ7XG4gICAgbG9kYXNoLnNodWZmbGUgPSBzaHVmZmxlO1xuICAgIGxvZGFzaC5zbGljZSA9IHNsaWNlO1xuICAgIGxvZGFzaC5zb3J0QnkgPSBzb3J0Qnk7XG4gICAgbG9kYXNoLnNvcnRCeUFsbCA9IHNvcnRCeUFsbDtcbiAgICBsb2Rhc2guc29ydEJ5T3JkZXIgPSBzb3J0QnlPcmRlcjtcbiAgICBsb2Rhc2guc3ByZWFkID0gc3ByZWFkO1xuICAgIGxvZGFzaC50YWtlID0gdGFrZTtcbiAgICBsb2Rhc2gudGFrZVJpZ2h0ID0gdGFrZVJpZ2h0O1xuICAgIGxvZGFzaC50YWtlUmlnaHRXaGlsZSA9IHRha2VSaWdodFdoaWxlO1xuICAgIGxvZGFzaC50YWtlV2hpbGUgPSB0YWtlV2hpbGU7XG4gICAgbG9kYXNoLnRhcCA9IHRhcDtcbiAgICBsb2Rhc2gudGhyb3R0bGUgPSB0aHJvdHRsZTtcbiAgICBsb2Rhc2gudGhydSA9IHRocnU7XG4gICAgbG9kYXNoLnRpbWVzID0gdGltZXM7XG4gICAgbG9kYXNoLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIGxvZGFzaC50b1BsYWluT2JqZWN0ID0gdG9QbGFpbk9iamVjdDtcbiAgICBsb2Rhc2gudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGxvZGFzaC51bmlvbiA9IHVuaW9uO1xuICAgIGxvZGFzaC51bmlxID0gdW5pcTtcbiAgICBsb2Rhc2gudW56aXAgPSB1bnppcDtcbiAgICBsb2Rhc2gudW56aXBXaXRoID0gdW56aXBXaXRoO1xuICAgIGxvZGFzaC52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgbG9kYXNoLnZhbHVlc0luID0gdmFsdWVzSW47XG4gICAgbG9kYXNoLndoZXJlID0gd2hlcmU7XG4gICAgbG9kYXNoLndpdGhvdXQgPSB3aXRob3V0O1xuICAgIGxvZGFzaC53cmFwID0gd3JhcDtcbiAgICBsb2Rhc2gueG9yID0geG9yO1xuICAgIGxvZGFzaC56aXAgPSB6aXA7XG4gICAgbG9kYXNoLnppcE9iamVjdCA9IHppcE9iamVjdDtcbiAgICBsb2Rhc2guemlwV2l0aCA9IHppcFdpdGg7XG5cbiAgICAvLyBBZGQgYWxpYXNlcy5cbiAgICBsb2Rhc2guYmFja2Zsb3cgPSBmbG93UmlnaHQ7XG4gICAgbG9kYXNoLmNvbGxlY3QgPSBtYXA7XG4gICAgbG9kYXNoLmNvbXBvc2UgPSBmbG93UmlnaHQ7XG4gICAgbG9kYXNoLmVhY2ggPSBmb3JFYWNoO1xuICAgIGxvZGFzaC5lYWNoUmlnaHQgPSBmb3JFYWNoUmlnaHQ7XG4gICAgbG9kYXNoLmV4dGVuZCA9IGFzc2lnbjtcbiAgICBsb2Rhc2guaXRlcmF0ZWUgPSBjYWxsYmFjaztcbiAgICBsb2Rhc2gubWV0aG9kcyA9IGZ1bmN0aW9ucztcbiAgICBsb2Rhc2gub2JqZWN0ID0gemlwT2JqZWN0O1xuICAgIGxvZGFzaC5zZWxlY3QgPSBmaWx0ZXI7XG4gICAgbG9kYXNoLnRhaWwgPSByZXN0O1xuICAgIGxvZGFzaC51bmlxdWUgPSB1bmlxO1xuXG4gICAgLy8gQWRkIGZ1bmN0aW9ucyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgbWl4aW4obG9kYXNoLCBsb2Rhc2gpO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLy8gQWRkIGZ1bmN0aW9ucyB0aGF0IHJldHVybiB1bndyYXBwZWQgdmFsdWVzIHdoZW4gY2hhaW5pbmcuXG4gICAgbG9kYXNoLmFkZCA9IGFkZDtcbiAgICBsb2Rhc2guYXR0ZW1wdCA9IGF0dGVtcHQ7XG4gICAgbG9kYXNoLmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbiAgICBsb2Rhc2guY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemU7XG4gICAgbG9kYXNoLmNlaWwgPSBjZWlsO1xuICAgIGxvZGFzaC5jbG9uZSA9IGNsb25lO1xuICAgIGxvZGFzaC5jbG9uZURlZXAgPSBjbG9uZURlZXA7XG4gICAgbG9kYXNoLmRlYnVyciA9IGRlYnVycjtcbiAgICBsb2Rhc2guZW5kc1dpdGggPSBlbmRzV2l0aDtcbiAgICBsb2Rhc2guZXNjYXBlID0gZXNjYXBlO1xuICAgIGxvZGFzaC5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG4gICAgbG9kYXNoLmV2ZXJ5ID0gZXZlcnk7XG4gICAgbG9kYXNoLmZpbmQgPSBmaW5kO1xuICAgIGxvZGFzaC5maW5kSW5kZXggPSBmaW5kSW5kZXg7XG4gICAgbG9kYXNoLmZpbmRLZXkgPSBmaW5kS2V5O1xuICAgIGxvZGFzaC5maW5kTGFzdCA9IGZpbmRMYXN0O1xuICAgIGxvZGFzaC5maW5kTGFzdEluZGV4ID0gZmluZExhc3RJbmRleDtcbiAgICBsb2Rhc2guZmluZExhc3RLZXkgPSBmaW5kTGFzdEtleTtcbiAgICBsb2Rhc2guZmluZFdoZXJlID0gZmluZFdoZXJlO1xuICAgIGxvZGFzaC5maXJzdCA9IGZpcnN0O1xuICAgIGxvZGFzaC5mbG9vciA9IGZsb29yO1xuICAgIGxvZGFzaC5nZXQgPSBnZXQ7XG4gICAgbG9kYXNoLmd0ID0gZ3Q7XG4gICAgbG9kYXNoLmd0ZSA9IGd0ZTtcbiAgICBsb2Rhc2guaGFzID0gaGFzO1xuICAgIGxvZGFzaC5pZGVudGl0eSA9IGlkZW50aXR5O1xuICAgIGxvZGFzaC5pbmNsdWRlcyA9IGluY2x1ZGVzO1xuICAgIGxvZGFzaC5pbmRleE9mID0gaW5kZXhPZjtcbiAgICBsb2Rhc2guaW5SYW5nZSA9IGluUmFuZ2U7XG4gICAgbG9kYXNoLmlzQXJndW1lbnRzID0gaXNBcmd1bWVudHM7XG4gICAgbG9kYXNoLmlzQXJyYXkgPSBpc0FycmF5O1xuICAgIGxvZGFzaC5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG4gICAgbG9kYXNoLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBsb2Rhc2guaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuICAgIGxvZGFzaC5pc0VtcHR5ID0gaXNFbXB0eTtcbiAgICBsb2Rhc2guaXNFcXVhbCA9IGlzRXF1YWw7XG4gICAgbG9kYXNoLmlzRXJyb3IgPSBpc0Vycm9yO1xuICAgIGxvZGFzaC5pc0Zpbml0ZSA9IGlzRmluaXRlO1xuICAgIGxvZGFzaC5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbiAgICBsb2Rhc2guaXNNYXRjaCA9IGlzTWF0Y2g7XG4gICAgbG9kYXNoLmlzTmFOID0gaXNOYU47XG4gICAgbG9kYXNoLmlzTmF0aXZlID0gaXNOYXRpdmU7XG4gICAgbG9kYXNoLmlzTnVsbCA9IGlzTnVsbDtcbiAgICBsb2Rhc2guaXNOdW1iZXIgPSBpc051bWJlcjtcbiAgICBsb2Rhc2guaXNPYmplY3QgPSBpc09iamVjdDtcbiAgICBsb2Rhc2guaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4gICAgbG9kYXNoLmlzUmVnRXhwID0gaXNSZWdFeHA7XG4gICAgbG9kYXNoLmlzU3RyaW5nID0gaXNTdHJpbmc7XG4gICAgbG9kYXNoLmlzVHlwZWRBcnJheSA9IGlzVHlwZWRBcnJheTtcbiAgICBsb2Rhc2guaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcbiAgICBsb2Rhc2gua2ViYWJDYXNlID0ga2ViYWJDYXNlO1xuICAgIGxvZGFzaC5sYXN0ID0gbGFzdDtcbiAgICBsb2Rhc2gubGFzdEluZGV4T2YgPSBsYXN0SW5kZXhPZjtcbiAgICBsb2Rhc2gubHQgPSBsdDtcbiAgICBsb2Rhc2gubHRlID0gbHRlO1xuICAgIGxvZGFzaC5tYXggPSBtYXg7XG4gICAgbG9kYXNoLm1pbiA9IG1pbjtcbiAgICBsb2Rhc2gubm9Db25mbGljdCA9IG5vQ29uZmxpY3Q7XG4gICAgbG9kYXNoLm5vb3AgPSBub29wO1xuICAgIGxvZGFzaC5ub3cgPSBub3c7XG4gICAgbG9kYXNoLnBhZCA9IHBhZDtcbiAgICBsb2Rhc2gucGFkTGVmdCA9IHBhZExlZnQ7XG4gICAgbG9kYXNoLnBhZFJpZ2h0ID0gcGFkUmlnaHQ7XG4gICAgbG9kYXNoLnBhcnNlSW50ID0gcGFyc2VJbnQ7XG4gICAgbG9kYXNoLnJhbmRvbSA9IHJhbmRvbTtcbiAgICBsb2Rhc2gucmVkdWNlID0gcmVkdWNlO1xuICAgIGxvZGFzaC5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGxvZGFzaC5yZXBlYXQgPSByZXBlYXQ7XG4gICAgbG9kYXNoLnJlc3VsdCA9IHJlc3VsdDtcbiAgICBsb2Rhc2gucm91bmQgPSByb3VuZDtcbiAgICBsb2Rhc2gucnVuSW5Db250ZXh0ID0gcnVuSW5Db250ZXh0O1xuICAgIGxvZGFzaC5zaXplID0gc2l6ZTtcbiAgICBsb2Rhc2guc25ha2VDYXNlID0gc25ha2VDYXNlO1xuICAgIGxvZGFzaC5zb21lID0gc29tZTtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXggPSBzb3J0ZWRJbmRleDtcbiAgICBsb2Rhc2guc29ydGVkTGFzdEluZGV4ID0gc29ydGVkTGFzdEluZGV4O1xuICAgIGxvZGFzaC5zdGFydENhc2UgPSBzdGFydENhc2U7XG4gICAgbG9kYXNoLnN0YXJ0c1dpdGggPSBzdGFydHNXaXRoO1xuICAgIGxvZGFzaC5zdW0gPSBzdW07XG4gICAgbG9kYXNoLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgbG9kYXNoLnRyaW0gPSB0cmltO1xuICAgIGxvZGFzaC50cmltTGVmdCA9IHRyaW1MZWZ0O1xuICAgIGxvZGFzaC50cmltUmlnaHQgPSB0cmltUmlnaHQ7XG4gICAgbG9kYXNoLnRydW5jID0gdHJ1bmM7XG4gICAgbG9kYXNoLnVuZXNjYXBlID0gdW5lc2NhcGU7XG4gICAgbG9kYXNoLnVuaXF1ZUlkID0gdW5pcXVlSWQ7XG4gICAgbG9kYXNoLndvcmRzID0gd29yZHM7XG5cbiAgICAvLyBBZGQgYWxpYXNlcy5cbiAgICBsb2Rhc2guYWxsID0gZXZlcnk7XG4gICAgbG9kYXNoLmFueSA9IHNvbWU7XG4gICAgbG9kYXNoLmNvbnRhaW5zID0gaW5jbHVkZXM7XG4gICAgbG9kYXNoLmVxID0gaXNFcXVhbDtcbiAgICBsb2Rhc2guZGV0ZWN0ID0gZmluZDtcbiAgICBsb2Rhc2guZm9sZGwgPSByZWR1Y2U7XG4gICAgbG9kYXNoLmZvbGRyID0gcmVkdWNlUmlnaHQ7XG4gICAgbG9kYXNoLmhlYWQgPSBmaXJzdDtcbiAgICBsb2Rhc2guaW5jbHVkZSA9IGluY2x1ZGVzO1xuICAgIGxvZGFzaC5pbmplY3QgPSByZWR1Y2U7XG5cbiAgICBtaXhpbihsb2Rhc2gsIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzb3VyY2UgPSB7fTtcbiAgICAgIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmICghbG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXSkge1xuICAgICAgICAgIHNvdXJjZVttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9KCkpLCBmYWxzZSk7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvLyBBZGQgZnVuY3Rpb25zIGNhcGFibGUgb2YgcmV0dXJuaW5nIHdyYXBwZWQgYW5kIHVud3JhcHBlZCB2YWx1ZXMgd2hlbiBjaGFpbmluZy5cbiAgICBsb2Rhc2guc2FtcGxlID0gc2FtcGxlO1xuXG4gICAgbG9kYXNoLnByb3RvdHlwZS5zYW1wbGUgPSBmdW5jdGlvbihuKSB7XG4gICAgICBpZiAoIXRoaXMuX19jaGFpbl9fICYmIG4gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc2FtcGxlKHRoaXMudmFsdWUoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBzYW1wbGUodmFsdWUsIG4pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIFRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIGxvZGFzaC5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIC8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbiAgICBhcnJheUVhY2goWydiaW5kJywgJ2JpbmRLZXknLCAnY3VycnknLCAnY3VycnlSaWdodCcsICdwYXJ0aWFsJywgJ3BhcnRpYWxSaWdodCddLCBmdW5jdGlvbihtZXRob2ROYW1lKSB7XG4gICAgICBsb2Rhc2hbbWV0aG9kTmFtZV0ucGxhY2Vob2xkZXIgPSBsb2Rhc2g7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5kcm9wYCBhbmQgYF8udGFrZWAgdmFyaWFudHMuXG4gICAgYXJyYXlFYWNoKFsnZHJvcCcsICd0YWtlJ10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBmaWx0ZXJlZCA9IHRoaXMuX19maWx0ZXJlZF9fO1xuICAgICAgICBpZiAoZmlsdGVyZWQgJiYgIWluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBuID0gbiA9PSBudWxsID8gMSA6IG5hdGl2ZU1heChuYXRpdmVGbG9vcihuKSB8fCAwLCAwKTtcblxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICBpZiAoZmlsdGVyZWQpIHtcbiAgICAgICAgICByZXN1bHQuX190YWtlQ291bnRfXyA9IG5hdGl2ZU1pbihyZXN1bHQuX190YWtlQ291bnRfXywgbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0Ll9fdmlld3NfXy5wdXNoKHsgJ3NpemUnOiBuLCAndHlwZSc6IG1ldGhvZE5hbWUgKyAocmVzdWx0Ll9fZGlyX18gPCAwID8gJ1JpZ2h0JyA6ICcnKSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUgKyAnUmlnaHQnXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRoYXQgYWNjZXB0IGFuIGBpdGVyYXRlZWAgdmFsdWUuXG4gICAgYXJyYXlFYWNoKFsnZmlsdGVyJywgJ21hcCcsICd0YWtlV2hpbGUnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlID0gaW5kZXggKyAxLFxuICAgICAgICAgIGlzRmlsdGVyID0gdHlwZSAhPSBMQVpZX01BUF9GTEFHO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihpdGVyYXRlZSwgdGhpc0FyZykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuX19pdGVyYXRlZXNfXy5wdXNoKHsgJ2l0ZXJhdGVlJzogZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDEpLCAndHlwZSc6IHR5cGUgfSk7XG4gICAgICAgIHJlc3VsdC5fX2ZpbHRlcmVkX18gPSByZXN1bHQuX19maWx0ZXJlZF9fIHx8IGlzRmlsdGVyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmZpcnN0YCBhbmQgYF8ubGFzdGAuXG4gICAgYXJyYXlFYWNoKFsnZmlyc3QnLCAnbGFzdCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIHRha2VOYW1lID0gJ3Rha2UnICsgKGluZGV4ID8gJ1JpZ2h0JyA6ICcnKTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3Rha2VOYW1lXSgxKS52YWx1ZSgpWzBdO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmluaXRpYWxgIGFuZCBgXy5yZXN0YC5cbiAgICBhcnJheUVhY2goWydpbml0aWFsJywgJ3Jlc3QnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciBkcm9wTmFtZSA9ICdkcm9wJyArIChpbmRleCA/ICcnIDogJ1JpZ2h0Jyk7XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18gPyBuZXcgTGF6eVdyYXBwZXIodGhpcykgOiB0aGlzW2Ryb3BOYW1lXSgxKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5wbHVja2AgYW5kIGBfLndoZXJlYC5cbiAgICBhcnJheUVhY2goWydwbHVjaycsICd3aGVyZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIG9wZXJhdGlvbk5hbWUgPSBpbmRleCA/ICdmaWx0ZXInIDogJ21hcCcsXG4gICAgICAgICAgY3JlYXRlQ2FsbGJhY2sgPSBpbmRleCA/IGJhc2VNYXRjaGVzIDogcHJvcGVydHk7XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzW29wZXJhdGlvbk5hbWVdKGNyZWF0ZUNhbGxiYWNrKHZhbHVlKSk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbXBhY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcihpZGVudGl0eSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMSk7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gc3RhcnQgPT0gbnVsbCA/IDAgOiAoK3N0YXJ0IHx8IDApO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcztcbiAgICAgIGlmIChyZXN1bHQuX19maWx0ZXJlZF9fICYmIChzdGFydCA+IDAgfHwgZW5kIDwgMCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcihyZXN1bHQpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQudGFrZVJpZ2h0KC1zdGFydCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5kcm9wKHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbmQgPSAoK2VuZCB8fCAwKTtcbiAgICAgICAgcmVzdWx0ID0gZW5kIDwgMCA/IHJlc3VsdC5kcm9wUmlnaHQoLWVuZCkgOiByZXN1bHQudGFrZShlbmQgLSBzdGFydCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGUgPSBmdW5jdGlvbihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUocHJlZGljYXRlLCB0aGlzQXJnKS5yZXZlcnNlKCk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWtlKFBPU0lUSVZFX0lORklOSVRZKTtcbiAgICB9O1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBjaGVja0l0ZXJhdGVlID0gL14oPzpmaWx0ZXJ8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KG1ldGhvZE5hbWUpLFxuICAgICAgICAgIHJldFVud3JhcHBlZCA9IC9eKD86Zmlyc3R8bGFzdCkkLy50ZXN0KG1ldGhvZE5hbWUpLFxuICAgICAgICAgIGxvZGFzaEZ1bmMgPSBsb2Rhc2hbcmV0VW53cmFwcGVkID8gKCd0YWtlJyArIChtZXRob2ROYW1lID09ICdsYXN0JyA/ICdSaWdodCcgOiAnJykpIDogbWV0aG9kTmFtZV07XG5cbiAgICAgIGlmICghbG9kYXNoRnVuYykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gcmV0VW53cmFwcGVkID8gWzFdIDogYXJndW1lbnRzLFxuICAgICAgICAgICAgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXyxcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxcbiAgICAgICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsXG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFyZ3NbMF0sXG4gICAgICAgICAgICB1c2VMYXp5ID0gaXNMYXp5IHx8IGlzQXJyYXkodmFsdWUpO1xuXG4gICAgICAgIGlmICh1c2VMYXp5ICYmIGNoZWNrSXRlcmF0ZWUgJiYgdHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicgJiYgaXRlcmF0ZWUubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgICAvLyBBdm9pZCBsYXp5IHVzZSBpZiB0aGUgaXRlcmF0ZWUgaGFzIGEgXCJsZW5ndGhcIiB2YWx1ZSBvdGhlciB0aGFuIGAxYC5cbiAgICAgICAgICBpc0xhenkgPSB1c2VMYXp5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGludGVyY2VwdG9yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gKHJldFVud3JhcHBlZCAmJiBjaGFpbkFsbClcbiAgICAgICAgICAgID8gbG9kYXNoRnVuYyh2YWx1ZSwgMSlbMF1cbiAgICAgICAgICAgIDogbG9kYXNoRnVuYy5hcHBseSh1bmRlZmluZWQsIGFycmF5UHVzaChbdmFsdWVdLCBhcmdzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGFjdGlvbiA9IHsgJ2Z1bmMnOiB0aHJ1LCAnYXJncyc6IFtpbnRlcmNlcHRvcl0sICd0aGlzQXJnJzogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBvbmx5TGF6eSA9IGlzTGF6eSAmJiAhaXNIeWJyaWQ7XG5cbiAgICAgICAgaWYgKHJldFVud3JhcHBlZCAmJiAhY2hhaW5BbGwpIHtcbiAgICAgICAgICBpZiAob25seUxhenkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY2xvbmUoKTtcbiAgICAgICAgICAgIHZhbHVlLl9fYWN0aW9uc19fLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbG9kYXNoRnVuYy5jYWxsKHVuZGVmaW5lZCwgdGhpcy52YWx1ZSgpKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7XG4gICAgICAgICAgdmFsdWUgPSBvbmx5TGF6eSA/IHZhbHVlIDogbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICAgICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaChhY3Rpb24pO1xuICAgICAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcihyZXN1bHQsIGNoYWluQWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYEFycmF5YCBhbmQgYFN0cmluZ2AgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYXJyYXlFYWNoKFsnam9pbicsICdwb3AnLCAncHVzaCcsICdyZXBsYWNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3NwbGl0JywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSAoL14oPzpyZXBsYWNlfHNwbGl0KSQvLnRlc3QobWV0aG9kTmFtZSkgPyBzdHJpbmdQcm90byA6IGFycmF5UHJvdG8pW21ldGhvZE5hbWVdLFxuICAgICAgICAgIGNoYWluTmFtZSA9IC9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChtZXRob2ROYW1lKSA/ICd0YXAnIDogJ3RocnUnLFxuICAgICAgICAgIHJldFVud3JhcHBlZCA9IC9eKD86am9pbnxwb3B8cmVwbGFjZXxzaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBpZiAocmV0VW53cmFwcGVkICYmICF0aGlzLl9fY2hhaW5fXykge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMudmFsdWUoKSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNbY2hhaW5OYW1lXShmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gTWFwIG1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzIHRvIHRoZWlyIHJlYWwgbmFtZXMuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBsb2Rhc2hGdW5jID0gbG9kYXNoW21ldGhvZE5hbWVdO1xuICAgICAgaWYgKGxvZGFzaEZ1bmMpIHtcbiAgICAgICAgdmFyIGtleSA9IGxvZGFzaEZ1bmMubmFtZSxcbiAgICAgICAgICAgIG5hbWVzID0gcmVhbE5hbWVzW2tleV0gfHwgKHJlYWxOYW1lc1trZXldID0gW10pO1xuXG4gICAgICAgIG5hbWVzLnB1c2goeyAnbmFtZSc6IG1ldGhvZE5hbWUsICdmdW5jJzogbG9kYXNoRnVuYyB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlYWxOYW1lc1tjcmVhdGVIeWJyaWRXcmFwcGVyKHVuZGVmaW5lZCwgQklORF9LRVlfRkxBRykubmFtZV0gPSBbeyAnbmFtZSc6ICd3cmFwcGVyJywgJ2Z1bmMnOiB1bmRlZmluZWQgfV07XG5cbiAgICAvLyBBZGQgZnVuY3Rpb25zIHRvIHRoZSBsYXp5IHdyYXBwZXIuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNsb25lID0gbGF6eUNsb25lO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5yZXZlcnNlID0gbGF6eVJldmVyc2U7XG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnZhbHVlID0gbGF6eVZhbHVlO1xuXG4gICAgLy8gQWRkIGNoYWluaW5nIGZ1bmN0aW9ucyB0byB0aGUgYGxvZGFzaGAgd3JhcHBlci5cbiAgICBsb2Rhc2gucHJvdG90eXBlLmNoYWluID0gd3JhcHBlckNoYWluO1xuICAgIGxvZGFzaC5wcm90b3R5cGUuY29tbWl0ID0gd3JhcHBlckNvbW1pdDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNvbmNhdCA9IHdyYXBwZXJDb25jYXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5wbGFudCA9IHdyYXBwZXJQbGFudDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnJldmVyc2UgPSB3cmFwcGVyUmV2ZXJzZTtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnRvU3RyaW5nID0gd3JhcHBlclRvU3RyaW5nO1xuICAgIGxvZGFzaC5wcm90b3R5cGUucnVuID0gbG9kYXNoLnByb3RvdHlwZS50b0pTT04gPSBsb2Rhc2gucHJvdG90eXBlLnZhbHVlT2YgPSBsb2Rhc2gucHJvdG90eXBlLnZhbHVlID0gd3JhcHBlclZhbHVlO1xuXG4gICAgLy8gQWRkIGZ1bmN0aW9uIGFsaWFzZXMgdG8gdGhlIGBsb2Rhc2hgIHdyYXBwZXIuXG4gICAgbG9kYXNoLnByb3RvdHlwZS5jb2xsZWN0ID0gbG9kYXNoLnByb3RvdHlwZS5tYXA7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5oZWFkID0gbG9kYXNoLnByb3RvdHlwZS5maXJzdDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnNlbGVjdCA9IGxvZGFzaC5wcm90b3R5cGUuZmlsdGVyO1xuICAgIGxvZGFzaC5wcm90b3R5cGUudGFpbCA9IGxvZGFzaC5wcm90b3R5cGUucmVzdDtcblxuICAgIHJldHVybiBsb2Rhc2g7XG4gIH1cblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAvLyBFeHBvcnQgbG9kYXNoLlxuICB2YXIgXyA9IHJ1bkluQ29udGV4dCgpO1xuXG4gIC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMgbGlrZSByLmpzIGNoZWNrIGZvciBjb25kaXRpb24gcGF0dGVybnMgbGlrZSB0aGUgZm9sbG93aW5nOlxuICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBFeHBvc2UgbG9kYXNoIHRvIHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gYW4gQU1EIGxvYWRlciBpcyBwcmVzZW50IHRvIGF2b2lkXG4gICAgLy8gZXJyb3JzIGluIGNhc2VzIHdoZXJlIGxvZGFzaCBpcyBsb2FkZWQgYnkgYSBzY3JpcHQgdGFnIGFuZCBub3QgaW50ZW5kZWRcbiAgICAvLyBhcyBhbiBBTUQgbW9kdWxlLiBTZWUgaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCNtaXNtYXRjaCBmb3JcbiAgICAvLyBtb3JlIGRldGFpbHMuXG4gICAgcm9vdC5fID0gXztcblxuICAgIC8vIERlZmluZSBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlIHNvLCB0aHJvdWdoIHBhdGggbWFwcGluZywgaXQgY2FuIGJlXG4gICAgLy8gcmVmZXJlbmNlZCBhcyB0aGUgXCJ1bmRlcnNjb3JlXCIgbW9kdWxlLlxuICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG4gIC8vIENoZWNrIGZvciBgZXhwb3J0c2AgYWZ0ZXIgYGRlZmluZWAgaW4gY2FzZSBhIGJ1aWxkIG9wdGltaXplciBhZGRzIGFuIGBleHBvcnRzYCBvYmplY3QuXG4gIGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcbiAgICAvLyBFeHBvcnQgZm9yIE5vZGUuanMgb3IgUmluZ29KUy5cbiAgICBpZiAobW9kdWxlRXhwb3J0cykge1xuICAgICAgKGZyZWVNb2R1bGUuZXhwb3J0cyA9IF8pLl8gPSBfO1xuICAgIH1cbiAgICAvLyBFeHBvcnQgZm9yIFJoaW5vIHdpdGggQ29tbW9uSlMgc3VwcG9ydC5cbiAgICBlbHNlIHtcbiAgICAgIGZyZWVFeHBvcnRzLl8gPSBfO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBFeHBvcnQgZm9yIGEgYnJvd3NlciBvciBSaGluby5cbiAgICByb290Ll8gPSBfO1xuICB9XG59LmNhbGwodGhpcykpO1xuIiwiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucyl7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoJ3N0cmluZycgPT0gdHlwZW9mIHZhbCkgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIHJldHVybiBvcHRpb25zLmxvbmdcbiAgICA/IGxvbmcodmFsKVxuICAgIDogc2hvcnQodmFsKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSAnJyArIHN0cjtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDAwMCkgcmV0dXJuO1xuICB2YXIgbWF0Y2ggPSAvXigoPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKHN0cik7XG4gIGlmICghbWF0Y2gpIHJldHVybjtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2hvcnQobXMpIHtcbiAgaWYgKG1zID49IGQpIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIGlmIChtcyA+PSBoKSByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICBpZiAobXMgPj0gbSkgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgaWYgKG1zID49IHMpIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb25nKG1zKSB7XG4gIHJldHVybiBwbHVyYWwobXMsIGQsICdkYXknKVxuICAgIHx8IHBsdXJhbChtcywgaCwgJ2hvdXInKVxuICAgIHx8IHBsdXJhbChtcywgbSwgJ21pbnV0ZScpXG4gICAgfHwgcGx1cmFsKG1zLCBzLCAnc2Vjb25kJylcbiAgICB8fCBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbiwgbmFtZSkge1xuICBpZiAobXMgPCBuKSByZXR1cm47XG4gIGlmIChtcyA8IG4gKiAxLjUpIHJldHVybiBNYXRoLmZsb29yKG1zIC8gbikgKyAnICcgKyBuYW1lO1xuICByZXR1cm4gTWF0aC5jZWlsKG1zIC8gbikgKyAnICcgKyBuYW1lICsgJ3MnO1xufVxuIiwiLyohIE5hdGl2ZSBQcm9taXNlIE9ubHlcbiAgICB2MC44LjEgKGMpIEt5bGUgU2ltcHNvblxuICAgIE1JVCBMaWNlbnNlOiBodHRwOi8vZ2V0aWZ5Lm1pdC1saWNlbnNlLm9yZ1xuKi9cblxuKGZ1bmN0aW9uIFVNRChuYW1lLGNvbnRleHQsZGVmaW5pdGlvbil7XG5cdC8vIHNwZWNpYWwgZm9ybSBvZiBVTUQgZm9yIHBvbHlmaWxsaW5nIGFjcm9zcyBldmlyb25tZW50c1xuXHRjb250ZXh0W25hbWVdID0gY29udGV4dFtuYW1lXSB8fCBkZWZpbml0aW9uKCk7XG5cdGlmICh0eXBlb2YgbW9kdWxlICE9IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMpIHsgbW9kdWxlLmV4cG9ydHMgPSBjb250ZXh0W25hbWVdOyB9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHsgZGVmaW5lKGZ1bmN0aW9uICRBTUQkKCl7IHJldHVybiBjb250ZXh0W25hbWVdOyB9KTsgfVxufSkoXCJQcm9taXNlXCIsdHlwZW9mIGdsb2JhbCAhPSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdGhpcyxmdW5jdGlvbiBERUYoKXtcblx0Lypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIGJ1aWx0SW5Qcm9wLCBjeWNsZSwgc2NoZWR1bGluZ19xdWV1ZSxcblx0XHRUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsXG5cdFx0dGltZXIgPSAodHlwZW9mIHNldEltbWVkaWF0ZSAhPSBcInVuZGVmaW5lZFwiKSA/XG5cdFx0XHRmdW5jdGlvbiB0aW1lcihmbikgeyByZXR1cm4gc2V0SW1tZWRpYXRlKGZuKTsgfSA6XG5cdFx0XHRzZXRUaW1lb3V0XG5cdDtcblxuXHQvLyBkYW1taXQsIElFOC5cblx0dHJ5IHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJ4XCIse30pO1xuXHRcdGJ1aWx0SW5Qcm9wID0gZnVuY3Rpb24gYnVpbHRJblByb3Aob2JqLG5hbWUsdmFsLGNvbmZpZykge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosbmFtZSx7XG5cdFx0XHRcdHZhbHVlOiB2YWwsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IGNvbmZpZyAhPT0gZmFsc2Vcblx0XHRcdH0pO1xuXHRcdH07XG5cdH1cblx0Y2F0Y2ggKGVycikge1xuXHRcdGJ1aWx0SW5Qcm9wID0gZnVuY3Rpb24gYnVpbHRJblByb3Aob2JqLG5hbWUsdmFsKSB7XG5cdFx0XHRvYmpbbmFtZV0gPSB2YWw7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH07XG5cdH1cblxuXHQvLyBOb3RlOiB1c2luZyBhIHF1ZXVlIGluc3RlYWQgb2YgYXJyYXkgZm9yIGVmZmljaWVuY3lcblx0c2NoZWR1bGluZ19xdWV1ZSA9IChmdW5jdGlvbiBRdWV1ZSgpIHtcblx0XHR2YXIgZmlyc3QsIGxhc3QsIGl0ZW07XG5cblx0XHRmdW5jdGlvbiBJdGVtKGZuLHNlbGYpIHtcblx0XHRcdHRoaXMuZm4gPSBmbjtcblx0XHRcdHRoaXMuc2VsZiA9IHNlbGY7XG5cdFx0XHR0aGlzLm5leHQgPSB2b2lkIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFkZDogZnVuY3Rpb24gYWRkKGZuLHNlbGYpIHtcblx0XHRcdFx0aXRlbSA9IG5ldyBJdGVtKGZuLHNlbGYpO1xuXHRcdFx0XHRpZiAobGFzdCkge1xuXHRcdFx0XHRcdGxhc3QubmV4dCA9IGl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Zmlyc3QgPSBpdGVtO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxhc3QgPSBpdGVtO1xuXHRcdFx0XHRpdGVtID0gdm9pZCAwO1xuXHRcdFx0fSxcblx0XHRcdGRyYWluOiBmdW5jdGlvbiBkcmFpbigpIHtcblx0XHRcdFx0dmFyIGYgPSBmaXJzdDtcblx0XHRcdFx0Zmlyc3QgPSBsYXN0ID0gY3ljbGUgPSB2b2lkIDA7XG5cblx0XHRcdFx0d2hpbGUgKGYpIHtcblx0XHRcdFx0XHRmLmZuLmNhbGwoZi5zZWxmKTtcblx0XHRcdFx0XHRmID0gZi5uZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSkoKTtcblxuXHRmdW5jdGlvbiBzY2hlZHVsZShmbixzZWxmKSB7XG5cdFx0c2NoZWR1bGluZ19xdWV1ZS5hZGQoZm4sc2VsZik7XG5cdFx0aWYgKCFjeWNsZSkge1xuXHRcdFx0Y3ljbGUgPSB0aW1lcihzY2hlZHVsaW5nX3F1ZXVlLmRyYWluKTtcblx0XHR9XG5cdH1cblxuXHQvLyBwcm9taXNlIGR1Y2sgdHlwaW5nXG5cdGZ1bmN0aW9uIGlzVGhlbmFibGUobykge1xuXHRcdHZhciBfdGhlbiwgb190eXBlID0gdHlwZW9mIG87XG5cblx0XHRpZiAobyAhPSBudWxsICYmXG5cdFx0XHQoXG5cdFx0XHRcdG9fdHlwZSA9PSBcIm9iamVjdFwiIHx8IG9fdHlwZSA9PSBcImZ1bmN0aW9uXCJcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdF90aGVuID0gby50aGVuO1xuXHRcdH1cblx0XHRyZXR1cm4gdHlwZW9mIF90aGVuID09IFwiZnVuY3Rpb25cIiA/IF90aGVuIDogZmFsc2U7XG5cdH1cblxuXHRmdW5jdGlvbiBub3RpZnkoKSB7XG5cdFx0Zm9yICh2YXIgaT0wOyBpPHRoaXMuY2hhaW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdG5vdGlmeUlzb2xhdGVkKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHQodGhpcy5zdGF0ZSA9PT0gMSkgPyB0aGlzLmNoYWluW2ldLnN1Y2Nlc3MgOiB0aGlzLmNoYWluW2ldLmZhaWx1cmUsXG5cdFx0XHRcdHRoaXMuY2hhaW5baV1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHRoaXMuY2hhaW4ubGVuZ3RoID0gMDtcblx0fVxuXG5cdC8vIE5PVEU6IFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBpc29sYXRlXG5cdC8vIHRoZSBgdHJ5Li5jYXRjaGAgc28gdGhhdCBvdGhlciBjb2RlIGNhbiBiZVxuXHQvLyBvcHRpbWl6ZWQgYmV0dGVyXG5cdGZ1bmN0aW9uIG5vdGlmeUlzb2xhdGVkKHNlbGYsY2IsY2hhaW4pIHtcblx0XHR2YXIgcmV0LCBfdGhlbjtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGNiID09PSBmYWxzZSkge1xuXHRcdFx0XHRjaGFpbi5yZWplY3Qoc2VsZi5tc2cpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGlmIChjYiA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHJldCA9IHNlbGYubXNnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHJldCA9IGNiLmNhbGwodm9pZCAwLHNlbGYubXNnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChyZXQgPT09IGNoYWluLnByb21pc2UpIHtcblx0XHRcdFx0XHRjaGFpbi5yZWplY3QoVHlwZUVycm9yKFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoX3RoZW4gPSBpc1RoZW5hYmxlKHJldCkpIHtcblx0XHRcdFx0XHRfdGhlbi5jYWxsKHJldCxjaGFpbi5yZXNvbHZlLGNoYWluLnJlamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Y2hhaW4ucmVzb2x2ZShyZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNhdGNoIChlcnIpIHtcblx0XHRcdGNoYWluLnJlamVjdChlcnIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlc29sdmUobXNnKSB7XG5cdFx0dmFyIF90aGVuLCBzZWxmID0gdGhpcztcblxuXHRcdC8vIGFscmVhZHkgdHJpZ2dlcmVkP1xuXHRcdGlmIChzZWxmLnRyaWdnZXJlZCkgeyByZXR1cm47IH1cblxuXHRcdHNlbGYudHJpZ2dlcmVkID0gdHJ1ZTtcblxuXHRcdC8vIHVud3JhcFxuXHRcdGlmIChzZWxmLmRlZikge1xuXHRcdFx0c2VsZiA9IHNlbGYuZGVmO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRpZiAoX3RoZW4gPSBpc1RoZW5hYmxlKG1zZykpIHtcblx0XHRcdFx0c2NoZWR1bGUoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR2YXIgZGVmX3dyYXBwZXIgPSBuZXcgTWFrZURlZldyYXBwZXIoc2VsZik7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdF90aGVuLmNhbGwobXNnLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAkcmVzb2x2ZSQoKXsgcmVzb2x2ZS5hcHBseShkZWZfd3JhcHBlcixhcmd1bWVudHMpOyB9LFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAkcmVqZWN0JCgpeyByZWplY3QuYXBwbHkoZGVmX3dyYXBwZXIsYXJndW1lbnRzKTsgfVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0cmVqZWN0LmNhbGwoZGVmX3dyYXBwZXIsZXJyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0c2VsZi5tc2cgPSBtc2c7XG5cdFx0XHRcdHNlbGYuc3RhdGUgPSAxO1xuXHRcdFx0XHRpZiAoc2VsZi5jaGFpbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0c2NoZWR1bGUobm90aWZ5LHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNhdGNoIChlcnIpIHtcblx0XHRcdHJlamVjdC5jYWxsKG5ldyBNYWtlRGVmV3JhcHBlcihzZWxmKSxlcnIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlamVjdChtc2cpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHQvLyBhbHJlYWR5IHRyaWdnZXJlZD9cblx0XHRpZiAoc2VsZi50cmlnZ2VyZWQpIHsgcmV0dXJuOyB9XG5cblx0XHRzZWxmLnRyaWdnZXJlZCA9IHRydWU7XG5cblx0XHQvLyB1bndyYXBcblx0XHRpZiAoc2VsZi5kZWYpIHtcblx0XHRcdHNlbGYgPSBzZWxmLmRlZjtcblx0XHR9XG5cblx0XHRzZWxmLm1zZyA9IG1zZztcblx0XHRzZWxmLnN0YXRlID0gMjtcblx0XHRpZiAoc2VsZi5jaGFpbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRzY2hlZHVsZShub3RpZnksc2VsZik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaXRlcmF0ZVByb21pc2VzKENvbnN0cnVjdG9yLGFycixyZXNvbHZlcixyZWplY3Rlcikge1xuXHRcdGZvciAodmFyIGlkeD0wOyBpZHg8YXJyLmxlbmd0aDsgaWR4KyspIHtcblx0XHRcdChmdW5jdGlvbiBJSUZFKGlkeCl7XG5cdFx0XHRcdENvbnN0cnVjdG9yLnJlc29sdmUoYXJyW2lkeF0pXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdGZ1bmN0aW9uICRyZXNvbHZlciQobXNnKXtcblx0XHRcdFx0XHRcdHJlc29sdmVyKGlkeCxtc2cpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVqZWN0ZXJcblx0XHRcdFx0KTtcblx0XHRcdH0pKGlkeCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gTWFrZURlZldyYXBwZXIoc2VsZikge1xuXHRcdHRoaXMuZGVmID0gc2VsZjtcblx0XHR0aGlzLnRyaWdnZXJlZCA9IGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gTWFrZURlZihzZWxmKSB7XG5cdFx0dGhpcy5wcm9taXNlID0gc2VsZjtcblx0XHR0aGlzLnN0YXRlID0gMDtcblx0XHR0aGlzLnRyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMuY2hhaW4gPSBbXTtcblx0XHR0aGlzLm1zZyA9IHZvaWQgMDtcblx0fVxuXG5cdGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcblx0XHRpZiAodHlwZW9mIGV4ZWN1dG9yICE9IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX19OUE9fXyAhPT0gMCkge1xuXHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgcHJvbWlzZVwiKTtcblx0XHR9XG5cblx0XHQvLyBpbnN0YW5jZSBzaGFkb3dpbmcgdGhlIGluaGVyaXRlZCBcImJyYW5kXCJcblx0XHQvLyB0byBzaWduYWwgYW4gYWxyZWFkeSBcImluaXRpYWxpemVkXCIgcHJvbWlzZVxuXHRcdHRoaXMuX19OUE9fXyA9IDE7XG5cblx0XHR2YXIgZGVmID0gbmV3IE1ha2VEZWYodGhpcyk7XG5cblx0XHR0aGlzW1widGhlblwiXSA9IGZ1bmN0aW9uIHRoZW4oc3VjY2VzcyxmYWlsdXJlKSB7XG5cdFx0XHR2YXIgbyA9IHtcblx0XHRcdFx0c3VjY2VzczogdHlwZW9mIHN1Y2Nlc3MgPT0gXCJmdW5jdGlvblwiID8gc3VjY2VzcyA6IHRydWUsXG5cdFx0XHRcdGZhaWx1cmU6IHR5cGVvZiBmYWlsdXJlID09IFwiZnVuY3Rpb25cIiA/IGZhaWx1cmUgOiBmYWxzZVxuXHRcdFx0fTtcblx0XHRcdC8vIE5vdGU6IGB0aGVuKC4uKWAgaXRzZWxmIGNhbiBiZSBib3Jyb3dlZCB0byBiZSB1c2VkIGFnYWluc3Rcblx0XHRcdC8vIGEgZGlmZmVyZW50IHByb21pc2UgY29uc3RydWN0b3IgZm9yIG1ha2luZyB0aGUgY2hhaW5lZCBwcm9taXNlLFxuXHRcdFx0Ly8gYnkgc3Vic3RpdHV0aW5nIGEgZGlmZmVyZW50IGB0aGlzYCBiaW5kaW5nLlxuXHRcdFx0by5wcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoZnVuY3Rpb24gZXh0cmFjdENoYWluKHJlc29sdmUscmVqZWN0KSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR0aHJvdyBUeXBlRXJyb3IoXCJOb3QgYSBmdW5jdGlvblwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG8ucmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHRcdG8ucmVqZWN0ID0gcmVqZWN0O1xuXHRcdFx0fSk7XG5cdFx0XHRkZWYuY2hhaW4ucHVzaChvKTtcblxuXHRcdFx0aWYgKGRlZi5zdGF0ZSAhPT0gMCkge1xuXHRcdFx0XHRzY2hlZHVsZShub3RpZnksZGVmKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG8ucHJvbWlzZTtcblx0XHR9O1xuXHRcdHRoaXNbXCJjYXRjaFwiXSA9IGZ1bmN0aW9uICRjYXRjaCQoZmFpbHVyZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZmFpbHVyZSk7XG5cdFx0fTtcblxuXHRcdHRyeSB7XG5cdFx0XHRleGVjdXRvci5jYWxsKFxuXHRcdFx0XHR2b2lkIDAsXG5cdFx0XHRcdGZ1bmN0aW9uIHB1YmxpY1Jlc29sdmUobXNnKXtcblx0XHRcdFx0XHRyZXNvbHZlLmNhbGwoZGVmLG1zZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZ1bmN0aW9uIHB1YmxpY1JlamVjdChtc2cpIHtcblx0XHRcdFx0XHRyZWplY3QuY2FsbChkZWYsbXNnKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Y2F0Y2ggKGVycikge1xuXHRcdFx0cmVqZWN0LmNhbGwoZGVmLGVycik7XG5cdFx0fVxuXHR9XG5cblx0dmFyIFByb21pc2VQcm90b3R5cGUgPSBidWlsdEluUHJvcCh7fSxcImNvbnN0cnVjdG9yXCIsUHJvbWlzZSxcblx0XHQvKmNvbmZpZ3VyYWJsZT0qL2ZhbHNlXG5cdCk7XG5cblx0Ly8gTm90ZTogQW5kcm9pZCA0IGNhbm5vdCB1c2UgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSguLilgIGhlcmVcblx0UHJvbWlzZS5wcm90b3R5cGUgPSBQcm9taXNlUHJvdG90eXBlO1xuXG5cdC8vIGJ1aWx0LWluIFwiYnJhbmRcIiB0byBzaWduYWwgYW4gXCJ1bmluaXRpYWxpemVkXCIgcHJvbWlzZVxuXHRidWlsdEluUHJvcChQcm9taXNlUHJvdG90eXBlLFwiX19OUE9fX1wiLDAsXG5cdFx0Lypjb25maWd1cmFibGU9Ki9mYWxzZVxuXHQpO1xuXG5cdGJ1aWx0SW5Qcm9wKFByb21pc2UsXCJyZXNvbHZlXCIsZnVuY3Rpb24gUHJvbWlzZSRyZXNvbHZlKG1zZykge1xuXHRcdHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cblx0XHQvLyBzcGVjIG1hbmRhdGVkIGNoZWNrc1xuXHRcdC8vIG5vdGU6IGJlc3QgXCJpc1Byb21pc2VcIiBjaGVjayB0aGF0J3MgcHJhY3RpY2FsIGZvciBub3dcblx0XHRpZiAobXNnICYmIHR5cGVvZiBtc2cgPT0gXCJvYmplY3RcIiAmJiBtc2cuX19OUE9fXyA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIG1zZztcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUscmVqZWN0KXtcblx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUobXNnKTtcblx0XHR9KTtcblx0fSk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcInJlamVjdFwiLGZ1bmN0aW9uIFByb21pc2UkcmVqZWN0KG1zZykge1xuXHRcdHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLHJlamVjdCl7XG5cdFx0XHRpZiAodHlwZW9mIHJlc29sdmUgIT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiByZWplY3QgIT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IFR5cGVFcnJvcihcIk5vdCBhIGZ1bmN0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWplY3QobXNnKTtcblx0XHR9KTtcblx0fSk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcImFsbFwiLGZ1bmN0aW9uIFByb21pc2UkYWxsKGFycikge1xuXHRcdHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cblx0XHQvLyBzcGVjIG1hbmRhdGVkIGNoZWNrc1xuXHRcdGlmIChUb1N0cmluZy5jYWxsKGFycikgIT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG5cdFx0XHRyZXR1cm4gQ29uc3RydWN0b3IucmVqZWN0KFR5cGVFcnJvcihcIk5vdCBhbiBhcnJheVwiKSk7XG5cdFx0fVxuXHRcdGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gQ29uc3RydWN0b3IucmVzb2x2ZShbXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLHJlamVjdCl7XG5cdFx0XHRpZiAodHlwZW9mIHJlc29sdmUgIT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiByZWplY3QgIT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IFR5cGVFcnJvcihcIk5vdCBhIGZ1bmN0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGVuID0gYXJyLmxlbmd0aCwgbXNncyA9IEFycmF5KGxlbiksIGNvdW50ID0gMDtcblxuXHRcdFx0aXRlcmF0ZVByb21pc2VzKENvbnN0cnVjdG9yLGFycixmdW5jdGlvbiByZXNvbHZlcihpZHgsbXNnKSB7XG5cdFx0XHRcdG1zZ3NbaWR4XSA9IG1zZztcblx0XHRcdFx0aWYgKCsrY291bnQgPT09IGxlbikge1xuXHRcdFx0XHRcdHJlc29sdmUobXNncyk7XG5cdFx0XHRcdH1cblx0XHRcdH0scmVqZWN0KTtcblx0XHR9KTtcblx0fSk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcInJhY2VcIixmdW5jdGlvbiBQcm9taXNlJHJhY2UoYXJyKSB7XG5cdFx0dmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuXHRcdC8vIHNwZWMgbWFuZGF0ZWQgY2hlY2tzXG5cdFx0aWYgKFRvU3RyaW5nLmNhbGwoYXJyKSAhPSBcIltvYmplY3QgQXJyYXldXCIpIHtcblx0XHRcdHJldHVybiBDb25zdHJ1Y3Rvci5yZWplY3QoVHlwZUVycm9yKFwiTm90IGFuIGFycmF5XCIpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUscmVqZWN0KXtcblx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdGl0ZXJhdGVQcm9taXNlcyhDb25zdHJ1Y3RvcixhcnIsZnVuY3Rpb24gcmVzb2x2ZXIoaWR4LG1zZyl7XG5cdFx0XHRcdHJlc29sdmUobXNnKTtcblx0XHRcdH0scmVqZWN0KTtcblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIFByb21pc2U7XG59KTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBKZXJlbXkgV2hpdGxvY2tcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVdGlsaXR5IHRoYXQgcHJvdmlkZXMgYSBzaW5nbGUgQVBJIGZvciBsb2FkaW5nIHRoZSBjb250ZW50IG9mIGEgcGF0aC9VUkwuXG4gKlxuICogQG1vZHVsZSBQYXRoTG9hZGVyXG4gKi9cblxudmFyIHN1cHBvcnRlZExvYWRlcnMgPSB7XG4gIGZpbGU6IHJlcXVpcmUoJy4vbGliL2xvYWRlcnMvZmlsZScpLFxuICBodHRwOiByZXF1aXJlKCcuL2xpYi9sb2FkZXJzL2h0dHAnKSxcbiAgaHR0cHM6IHJlcXVpcmUoJy4vbGliL2xvYWRlcnMvaHR0cCcpXG59O1xudmFyIGRlZmF1bHRMb2FkZXIgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICBzdXBwb3J0ZWRMb2FkZXJzLmh0dHAgOlxuICAgICAgc3VwcG9ydGVkTG9hZGVycy5maWxlO1xuXG4vLyBMb2FkIHByb21pc2VzIHBvbHlmaWxsIGlmIG5lY2Vzc2FyeVxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gIHJlcXVpcmUoJ25hdGl2ZS1wcm9taXNlLW9ubHknKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NoZW1lIChsb2NhdGlvbikge1xuICBpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24uaW5kZXhPZignOi8vJykgPT09IC0xID8gJycgOiBsb2NhdGlvbi5zcGxpdCgnOi8vJylbMF07XG4gIH1cblxuICByZXR1cm4gbG9jYXRpb247XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgdXNlZCB0byBwcm92aWRlIGFjY2VzcyB0byBhbHRlcmluZyBhIHJlbW90ZSByZXF1ZXN0IHByaW9yIHRvIHRoZSByZXF1ZXN0IGJlaW5nIG1hZGUuXG4gKlxuICogQHR5cGVkZWYge2Z1bmN0aW9ufSBQcmVwYXJlUmVxdWVzdENhbGxiYWNrXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHJlcSAtIFRoZSBTdXBlcmFnZW50IHJlcXVlc3Qgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gLSBUaGUgbG9jYXRpb24gYmVpbmcgcmV0cmlldmVkXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEZpcnN0IGNhbGxiYWNrXG4gKlxuICogQGFsaWFzIG1vZHVsZTpQYXRoTG9hZGVyflByZXBhcmVSZXF1ZXN0Q2FsbGJhY2tcbiAqL1xuXG4gLyoqXG4gICogQ2FsbGJhY2sgdXNlZCB0byBwcm92aWRlIGFjY2VzcyB0byBwcm9jZXNzaW5nIHRoZSByYXcgcmVzcG9uc2Ugb2YgdGhlIHJlcXVlc3QgYmVpbmcgbWFkZS4gKihIVFRQIGxvYWRlciBvbmx5KSpcbiAgKlxuICAqIEB0eXBlZGVmIHtmdW5jdGlvbn0gUHJvY2Vzc1Jlc3BvbnNlQ2FsbGJhY2tcbiAgKlxuICAqIEBwYXJhbSB7b2JqZWN0fSByZXMgLSBUaGUgU3VwZXJhZ2VudCByZXNwb25zZSBvYmplY3QgKihGb3Igbm9uLUhUVFAgbG9hZGVycywgdGhpcyBvYmplY3Qgd2lsbCBiZSBsaWtlIHRoZSBTdXBlcmFnZW50XG4gICogb2JqZWN0IGluIHRoYXQgaXQgd2lsbCBoYXZlIGEgYHRleHRgIHByb3BlcnR5IHdob3NlIHZhbHVlIGlzIHRoZSByYXcgc3RyaW5nIHZhbHVlIGJlaW5nIHByb2Nlc3NlZC4gIFRoaXMgd2FzIGRvbmVcbiAgKiBmb3IgY29uc2lzdGVuY3kuKSpcbiAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEVycm9yLWZpcnN0IGNhbGxiYWNrXG4gICpcbiAgKiBAcmV0dXJucyB7Kn0gdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIHRoZSByZXNwb25zZXhzXG4gICpcbiAgKiBAYWxpYXMgbW9kdWxlOlBhdGhMb2FkZXJ+UHJvY2Vzc1Jlc3BvbnNlQ2FsbGJhY2tcbiAgKi9cblxuZnVuY3Rpb24gZ2V0TG9hZGVyIChsb2NhdGlvbikge1xuICB2YXIgc2NoZW1lID0gZ2V0U2NoZW1lKGxvY2F0aW9uKTtcbiAgdmFyIGxvYWRlciA9IHN1cHBvcnRlZExvYWRlcnNbc2NoZW1lXTtcblxuICBpZiAodHlwZW9mIGxvYWRlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoc2NoZW1lID09PSAnJykge1xuICAgICAgbG9hZGVyID0gZGVmYXVsdExvYWRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBzY2hlbWU6ICcgKyBzY2hlbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsb2FkZXI7XG59XG5cbi8qKlxuICogTG9hZHMgYSBkb2N1bWVudCBhdCB0aGUgcHJvdmlkZWQgbG9jYXRpb24gYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbG9jYXRpb24gLSBUaGUgbG9jYXRpb24gdG8gdGhlIGRvY3VtZW50XG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gVGhlIG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5lbmNvZGluZz0ndXRmLTgnXSAtIFRoZSBlbmNvZGluZyB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSBmaWxlICooRmlsZSBsb2FkZXIgb25seSkqXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubWV0aG9kPWdldF0gLSBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIGZvciB0aGUgcmVxdWVzdCAqKEhUVFAgbG9hZGVyIG9ubHkpKlxuICogQHBhcmFtIHttb2R1bGU6UGF0aExvYWRlcn5QcmVwYXJlUmVxdWVzdENhbGxiYWNrfSBbb3B0aW9ucy5wcmVwYXJlUmVxdWVzdF0gLSBUaGUgY2FsbGJhY2sgdXNlZCB0byBwcmVwYXJlIHRoZSByZXF1ZXN0XG4gKiAqKEhUVFAgbG9hZGVyIG9ubHkpKlxuICogQHBhcmFtIHttb2R1bGU6UGF0aExvYWRlcn5Qcm9jZXNzUmVzcG9uc2VDYWxsYmFja30gW29wdGlvbnMucHJvY2Vzc0NvbnRlbnRdIC0gVGhlIGNhbGxiYWNrIHVzZWQgdG8gcHJvY2VzcyB0aGVcbiAqIHJlc3BvbnNlXG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IEFsd2F5cyByZXR1cm5zIGEgcHJvbWlzZSBldmVuIGlmIHRoZXJlIGlzIGEgY2FsbGJhY2sgcHJvdmlkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSB1c2luZyBQcm9taXNlc1xuICpcbiAqIFBhdGhMb2FkZXJcbiAqICAgLmxvYWQoJy4vcGFja2FnZS5qc29uJylcbiAqICAgLnRoZW4oSlNPTi5wYXJzZSlcbiAqICAgLnRoZW4oZnVuY3Rpb24gKGRvY3VtZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coZG9jdW1lbnQubmFtZSArICcgKCcgKyBkb2N1bWVudC52ZXJzaW9uICsgJyk6ICcgKyBkb2N1bWVudC5kZXNjcmlwdGlvbik7XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIHVzaW5nIG9wdGlvbnMucHJlcGFyZVJlcXVlc3QgdG8gcHJvdmlkZSBhdXRoZW50aWNhdGlvbiBkZXRhaWxzIGZvciBhIHJlbW90ZWx5IHNlY3VyZSBVUkxcbiAqXG4gKiBQYXRoTG9hZGVyXG4gKiAgIC5sb2FkKCdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3doaXRsb2NramMvcGF0aC1sb2FkZXInLCB7XG4gKiAgICAgcHJlcGFyZVJlcXVlc3Q6IGZ1bmN0aW9uIChyZXEsIGNhbGxiYWNrKSB7XG4gKiAgICAgICByZXEuYXV0aCgnbXktdXNlcm5hbWUnLCAnbXktcGFzc3dvcmQnKTtcbiAqICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgcmVxKTtcbiAqICAgICB9XG4gKiAgIH0pXG4gKiAgIC50aGVuKEpTT04ucGFyc2UpXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICogICAgIGNvbnNvbGUubG9nKGRvY3VtZW50LmZ1bGxfbmFtZSArICc6ICcgKyBkb2N1bWVudC5kZXNjcmlwdGlvbik7XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIGxvYWRpbmcgYSBZQU1MIGZpbGVcbiAqXG4gKiBQYXRoTG9hZGVyXG4gKiAgIC5sb2FkKCcvVXNlcnMvbm90LXlvdS9wcm9qZWN0cy9wYXRoLWxvYWRlci8udHJhdmlzLnltbCcpXG4gKiAgIC50aGVuKFlBTUwuc2FmZUxvYWQpXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICogICAgIGNvbnNvbGUubG9nKCdwYXRoLWxvYWRlciB1c2VzIHRoZScsIGRvY3VtZW50Lmxhbmd1YWdlLCAnbGFuZ3VhZ2UuJyk7XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIGxvYWRpbmcgYSBZQU1MIGZpbGUgd2l0aCBvcHRpb25zLnByb2Nlc3NDb250ZW50IChVc2VmdWwgaWYgeW91IG5lZWQgaW5mb3JtYXRpb24gaW4gdGhlIHJhdyByZXNwb25zZSlcbiAqXG4gKiBQYXRoTG9hZGVyXG4gKiAgIC5sb2FkKCcvVXNlcnMvbm90LXlvdS9wcm9qZWN0cy9wYXRoLWxvYWRlci8udHJhdmlzLnltbCcsIHtcbiAqICAgICBwcm9jZXNzQ29udGVudDogZnVuY3Rpb24gKHJlcywgY2FsbGJhY2spIHtcbiAqICAgICAgIGNhbGxiYWNrKFlBTUwuc2FmZUxvYWQocmVzLnRleHQpKTtcbiAqICAgICB9XG4gKiAgIH0pXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICogICAgIGNvbnNvbGUubG9nKCdwYXRoLWxvYWRlciB1c2VzIHRoZScsIGRvY3VtZW50Lmxhbmd1YWdlLCAnbGFuZ3VhZ2UuJyk7XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICovXG5tb2R1bGUuZXhwb3J0cy5sb2FkID0gZnVuY3Rpb24gKGxvY2F0aW9uLCBvcHRpb25zKSB7XG4gIHZhciBhbGxUYXNrcyA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8vIERlZmF1bHQgb3B0aW9ucyB0byBlbXB0eSBvYmplY3RcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGFyZ3VtZW50c1xuICBhbGxUYXNrcyA9IGFsbFRhc2tzLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdsb2NhdGlvbiBpcyByZXF1aXJlZCcpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbG9jYXRpb24gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm9jZXNzQ29udGVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdGlvbnMucHJvY2Vzc0NvbnRlbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5wcm9jZXNzQ29udGVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIExvYWQgdGhlIGRvY3VtZW50IGZyb20gdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGFuZCBwcm9jZXNzIGl0XG4gIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgbG9hZGVyID0gZ2V0TG9hZGVyKGxvY2F0aW9uKTtcblxuICAgICAgICBsb2FkZXIubG9hZChsb2NhdGlvbiwgb3B0aW9ucyB8fCB7fSwgZnVuY3Rpb24gKGVyciwgZG9jdW1lbnQpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShkb2N1bWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pXG4gICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgaWYgKG9wdGlvbnMucHJvY2Vzc0NvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAvLyBGb3IgY29uc2lzdGVuY3kgYmV0d2VlbiBmaWxlIGFuZCBodHRwLCBhbHdheXMgc2VuZCBhbiBvYmplY3Qgd2l0aCBhICd0ZXh0JyBwcm9wZXJ0eSBjb250YWluaW5nIHRoZSByYXdcbiAgICAgICAgICAvLyBzdHJpbmcgdmFsdWUgYmVpbmcgcHJvY2Vzc2VkLlxuICAgICAgICAgIG9wdGlvbnMucHJvY2Vzc0NvbnRlbnQodHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgPyByZXMgOiB7dGV4dDogcmVzfSwgZnVuY3Rpb24gKGVyciwgcHJvY2Vzc2VkKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShwcm9jZXNzZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZXJlIHdhcyBubyBjb250ZW50IHByb2Nlc3Nvciwgd2Ugd2lsbCBhc3N1bWUgdGhhdCBmb3IgYWxsIG9iamVjdHMgdGhhdCBpdCBpcyBhIFN1cGVyYWdlbnQgcmVzcG9uc2VcbiAgICAgICAgLy8gYW5kIHdpbGwgcmV0dXJuIGl0cyBgdGV4dGAgcHJvcGVydHkgdmFsdWUuICBPdGhlcndpc2UsIHdlIHdpbGwgcmV0dXJuIHRoZSByYXcgcmVzcG9uc2UuXG4gICAgICAgIHJldHVybiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyA/IHJlcy50ZXh0IDogcmVzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn07XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEplcmVteSBXaGl0bG9ja1xuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5zdXBwb3J0ZWRFcnJvciA9IG5ldyBUeXBlRXJyb3IoJ1RoZSBcXCdmaWxlXFwnIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyJyk7XG5cbi8qKlxuICogVGhlIGZpbGUgbG9hZGVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIuXG4gKlxuICogQHRocm93cyB7ZXJyb3J9IHRoZSBmaWxlIGxvYWRlciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldEJhc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHVuc3VwcG9ydGVkRXJyb3I7XG59O1xuXG4vKipcbiAqIFRoZSBmaWxlIGxvYWRlciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyLlxuICovXG5tb2R1bGUuZXhwb3J0cy5sb2FkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZm4gPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbih1bnN1cHBvcnRlZEVycm9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB1bnN1cHBvcnRlZEVycm9yO1xuICB9XG59O1xuIiwiLyogZXNsaW50LWVudiBub2RlLCBicm93c2VyICovXG5cbi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgSmVyZW15IFdoaXRsb2NrXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciByZXF1ZXN0ID0gcmVxdWlyZSgnc3VwZXJhZ2VudCcpO1xuXG52YXIgc3VwcG9ydGVkSHR0cE1ldGhvZHMgPSBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwYXRjaCcsICdwb3N0JywgJ3B1dCddO1xuXG4vKipcbiAqIExvYWRzIGEgZmlsZSBmcm9tIGFuIGh0dHAgb3IgaHR0cHMgVVJMLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiAtIFRoZSBkb2N1bWVudCBVUkwgKElmIHJlbGF0aXZlLCBsb2NhdGlvbiBpcyByZWxhdGl2ZSB0byB3aW5kb3cubG9jYXRpb24ub3JpZ2luKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIGxvYWRlciBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubWV0aG9kPWdldF0gLSBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHttb2R1bGU6UGF0aExvYWRlcn5QcmVwYXJlUmVxdWVzdENhbGxiYWNrfSBbb3B0aW9ucy5wcmVwYXJlUmVxdWVzdF0gLSBUaGUgY2FsbGJhY2sgdXNlZCB0byBwcmVwYXJlIGEgcmVxdWVzdFxuICogQHBhcmFtIHttb2R1bGU6UGF0aExvYWRlcn5Qcm9jZXNzUmVzcG9uc2VDYWxsYmFja30gW29wdGlvbnMucHJvY2Vzc0NvbnRlbnRdIC0gVGhlIGNhbGxiYWNrIHVzZWQgdG8gcHJvY2VzcyB0aGVcbiAqIHJlc3BvbnNlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBlcnJvci1maXJzdCBjYWxsYmFja1xuICovXG5tb2R1bGUuZXhwb3J0cy5sb2FkID0gZnVuY3Rpb24gKGxvY2F0aW9uLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgcmVhbE1ldGhvZCA9IG9wdGlvbnMubWV0aG9kID8gb3B0aW9ucy5tZXRob2QudG9Mb3dlckNhc2UoKSA6ICdnZXQnO1xuICB2YXIgZXJyO1xuICB2YXIgcmVhbFJlcXVlc3Q7XG5cbiAgZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGVyciwgcmVxKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYnVmZmVyKCkgaXMgb25seSBhdmFpbGFibGUgaW4gTm9kZS5qc1xuICAgICAgaWYgKHR5cGVvZiByZXEuYnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlcS5idWZmZXIodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJlcVxuICAgICAgICAuZW5kKGZ1bmN0aW9uIChlcnIyLCByZXMpIHtcbiAgICAgICAgICBpZiAoZXJyMikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyMik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5tZXRob2QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLm1ldGhvZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMubWV0aG9kIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnRlZEh0dHBNZXRob2RzLmluZGV4T2Yob3B0aW9ucy5tZXRob2QpID09PSAtMSkge1xuICAgICAgZXJyID0gbmV3IFR5cGVFcnJvcignb3B0aW9ucy5tZXRob2QgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogJyArXG4gICAgICAgIHN1cHBvcnRlZEh0dHBNZXRob2RzLnNsaWNlKDAsIHN1cHBvcnRlZEh0dHBNZXRob2RzLmxlbmd0aCAtIDEpLmpvaW4oJywgJykgKyAnIG9yICcgK1xuICAgICAgICBzdXBwb3J0ZWRIdHRwTWV0aG9kc1tzdXBwb3J0ZWRIdHRwTWV0aG9kcy5sZW5ndGggLSAxXSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLnByZXBhcmVSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0aW9ucy5wcmVwYXJlUmVxdWVzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMucHJlcGFyZVJlcXVlc3QgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAoIWVycikge1xuICAgIHJlYWxSZXF1ZXN0ID0gcmVxdWVzdFtyZWFsTWV0aG9kID09PSAnZGVsZXRlJyA/ICdkZWwnIDogcmVhbE1ldGhvZF0obG9jYXRpb24pO1xuXG4gICAgaWYgKG9wdGlvbnMucHJlcGFyZVJlcXVlc3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9wdGlvbnMucHJlcGFyZVJlcXVlc3QocmVhbFJlcXVlc3QsIG1ha2VSZXF1ZXN0KTtcbiAgICAgIH0gY2F0Y2ggKGVycjIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyMik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1ha2VSZXF1ZXN0KHVuZGVmaW5lZCwgcmVhbFJlcXVlc3QpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG59O1xuIiwidmFyIGlzYXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuLyoqXG4gKiBFeHBvc2UgYHBhdGhUb1JlZ2V4cGAuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gcGF0aFRvUmVnZXhwXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5tb2R1bGUuZXhwb3J0cy5jb21waWxlID0gY29tcGlsZVxubW9kdWxlLmV4cG9ydHMudG9rZW5zVG9GdW5jdGlvbiA9IHRva2Vuc1RvRnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzLnRva2Vuc1RvUmVnRXhwID0gdG9rZW5zVG9SZWdFeHBcblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbnZhciBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoW1xuICAvLyBNYXRjaCBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYXBwZWFyIGluIGZ1dHVyZSBtYXRjaGVzLlxuICAvLyBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgd29uJ3QgdHJhbnNmb3JtLlxuICAnKFxcXFxcXFxcLiknLFxuICAvLyBNYXRjaCBFeHByZXNzLXN0eWxlIHBhcmFtZXRlcnMgYW5kIHVuLW5hbWVkIHBhcmFtZXRlcnMgd2l0aCBhIHByZWZpeFxuICAvLyBhbmQgb3B0aW9uYWwgc3VmZml4ZXMuIE1hdGNoZXMgYXBwZWFyIGFzOlxuICAvL1xuICAvLyBcIi86dGVzdChcXFxcZCspP1wiID0+IFtcIi9cIiwgXCJ0ZXN0XCIsIFwiXFxkK1wiLCB1bmRlZmluZWQsIFwiP1wiLCB1bmRlZmluZWRdXG4gIC8vIFwiL3JvdXRlKFxcXFxkKylcIiAgPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiXFxkK1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgLy8gXCIvKlwiICAgICAgICAgICAgPT4gW1wiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiKlwiXVxuICAnKFtcXFxcLy5dKT8oPzooPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W14oKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpXG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHN0cikge1xuICB2YXIgdG9rZW5zID0gW11cbiAgdmFyIGtleSA9IDBcbiAgdmFyIGluZGV4ID0gMFxuICB2YXIgcGF0aCA9ICcnXG4gIHZhciByZXNcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdXG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV1cbiAgICB2YXIgb2Zmc2V0ID0gcmVzLmluZGV4XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldClcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoXG5cbiAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgcGF0aCArPSBlc2NhcGVkWzFdXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIFB1c2ggdGhlIGN1cnJlbnQgcGF0aCBvbnRvIHRoZSB0b2tlbnMuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gICAgICBwYXRoID0gJydcbiAgICB9XG5cbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdXG4gICAgdmFyIG5hbWUgPSByZXNbM11cbiAgICB2YXIgY2FwdHVyZSA9IHJlc1s0XVxuICAgIHZhciBncm91cCA9IHJlc1s1XVxuICAgIHZhciBzdWZmaXggPSByZXNbNl1cbiAgICB2YXIgYXN0ZXJpc2sgPSByZXNbN11cblxuICAgIHZhciByZXBlYXQgPSBzdWZmaXggPT09ICcrJyB8fCBzdWZmaXggPT09ICcqJ1xuICAgIHZhciBvcHRpb25hbCA9IHN1ZmZpeCA9PT0gJz8nIHx8IHN1ZmZpeCA9PT0gJyonXG4gICAgdmFyIGRlbGltaXRlciA9IHByZWZpeCB8fCAnLydcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXAgfHwgKGFzdGVyaXNrID8gJy4qJyA6ICdbXicgKyBkZWxpbWl0ZXIgKyAnXSs/JylcblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICBwYXR0ZXJuOiBlc2NhcGVHcm91cChwYXR0ZXJuKVxuICAgIH0pXG4gIH1cblxuICAvLyBNYXRjaCBhbnkgY2hhcmFjdGVycyBzdGlsbCByZW1haW5pbmcuXG4gIGlmIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBwYXRoICs9IHN0ci5zdWJzdHIoaW5kZXgpXG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCBleGlzdHMsIHB1c2ggaXQgb250byB0aGUgZW5kLlxuICBpZiAocGF0aCkge1xuICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgc3RyXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZSAoc3RyKSB7XG4gIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0cikpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aClcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14nICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnJCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgcGF0aCA9ICcnXG4gICAgdmFyIGRhdGEgPSBvYmogfHwge31cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcGF0aCArPSB0b2tlblxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV1cbiAgICAgIHZhciBzZWdtZW50XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBiZSBkZWZpbmVkJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNhcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBcIicgKyB2YWx1ZSArICdcIicpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWVbal0pXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIFwiJyArIHNlZ21lbnQgKyAnXCInKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSlcblxuICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgXCInICsgc2VnbWVudCArICdcIicpXG4gICAgICB9XG5cbiAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudFxuICAgIH1cblxuICAgIHJldHVybiBwYXRoXG4gIH1cbn1cblxuLyoqXG4gKiBFc2NhcGUgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKyo/PV4hOiR7fSgpW1xcXXxcXC9dKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBncm91cFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHtSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXNcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7UmVnRXhwfSBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpXG5cbiAgaWYgKGdyb3Vwcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHBhdGgsIGtleXMpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7QXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChwYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKVxuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/OicgKyBwYXJ0cy5qb2luKCd8JykgKyAnKScsIGZsYWdzKG9wdGlvbnMpKVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAga2V5c1xuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciB0b2tlbnMgPSBwYXJzZShwYXRoKVxuICB2YXIgcmUgPSB0b2tlbnNUb1JlZ0V4cCh0b2tlbnMsIG9wdGlvbnMpXG5cbiAgLy8gQXR0YWNoIGtleXMgYmFjayB0byB0aGUgcmVnZXhwLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAga2V5cy5wdXNoKHRva2Vuc1tpXSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhyZSwga2V5cylcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgdGFraW5nIHRva2VucyBhbmQgcmV0dXJuaW5nIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fSAgdG9rZW5zXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiB0b2tlbnNUb1JlZ0V4cCAodG9rZW5zLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2VcbiAgdmFyIHJvdXRlID0gJydcbiAgdmFyIGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1cbiAgdmFyIGVuZHNXaXRoU2xhc2ggPSB0eXBlb2YgbGFzdFRva2VuID09PSAnc3RyaW5nJyAmJiAvXFwvJC8udGVzdChsYXN0VG9rZW4pXG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB0b2tlbnMgYW5kIGNyZWF0ZSBvdXIgcmVnZXhwIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KVxuICAgICAgdmFyIGNhcHR1cmUgPSB0b2tlbi5wYXR0ZXJuXG5cbiAgICAgIGlmICh0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgY2FwdHVyZSArPSAnKD86JyArIHByZWZpeCArIGNhcHR1cmUgKyAnKSonXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAocHJlZml4KSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoPzonICsgcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpKT8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoJyArIGNhcHR1cmUgKyAnKT8nXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyknXG4gICAgICB9XG5cbiAgICAgIHJvdXRlICs9IGNhcHR1cmVcbiAgICB9XG4gIH1cblxuICAvLyBJbiBub24tc3RyaWN0IG1vZGUgd2UgYWxsb3cgYSBzbGFzaCBhdCB0aGUgZW5kIG9mIG1hdGNoLiBJZiB0aGUgcGF0aCB0b1xuICAvLyBtYXRjaCBhbHJlYWR5IGVuZHMgd2l0aCBhIHNsYXNoLCB3ZSByZW1vdmUgaXQgZm9yIGNvbnNpc3RlbmN5LiBUaGUgc2xhc2hcbiAgLy8gaXMgdmFsaWQgYXQgdGhlIGVuZCBvZiBhIHBhdGggbWF0Y2gsIG5vdCBpbiB0aGUgbWlkZGxlLiBUaGlzIGlzIGltcG9ydGFudFxuICAvLyBpbiBub24tZW5kaW5nIG1vZGUsIHdoZXJlIFwiL3Rlc3QvXCIgc2hvdWxkbid0IG1hdGNoIFwiL3Rlc3QvL3JvdXRlXCIuXG4gIGlmICghc3RyaWN0KSB7XG4gICAgcm91dGUgPSAoZW5kc1dpdGhTbGFzaCA/IHJvdXRlLnNsaWNlKDAsIC0yKSA6IHJvdXRlKSArICcoPzpcXFxcLyg/PSQpKT8nXG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgcm91dGUgKz0gJyQnXG4gIH0gZWxzZSB7XG4gICAgLy8gSW4gbm9uLWVuZGluZyBtb2RlLCB3ZSBuZWVkIHRoZSBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFzIG11Y2ggYXNcbiAgICAvLyBwb3NzaWJsZSBieSB1c2luZyBhIHBvc2l0aXZlIGxvb2thaGVhZCB0byB0aGUgZW5kIG9yIG5leHQgcGF0aCBzZWdtZW50LlxuICAgIHJvdXRlICs9IHN0cmljdCAmJiBlbmRzV2l0aFNsYXNoID8gJycgOiAnKD89XFxcXC98JCknXG4gIH1cblxuICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBnaXZlbiBwYXRoIHN0cmluZywgcmV0dXJuaW5nIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVtcHR5IGFycmF5IGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRoZSBrZXlzLCB3aGljaCB3aWxsIGhvbGQgdGhlXG4gKiBwbGFjZWhvbGRlciBrZXkgZGVzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgdXNpbmcgYC91c2VyLzppZGAsIGBrZXlzYCB3aWxsXG4gKiBjb250YWluIGBbeyBuYW1lOiAnaWQnLCBkZWxpbWl0ZXI6ICcvJywgb3B0aW9uYWw6IGZhbHNlLCByZXBlYXQ6IGZhbHNlIH1dYC5cbiAqXG4gKiBAcGFyYW0gIHsoU3RyaW5nfFJlZ0V4cHxBcnJheSl9IHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICAgICAgICAgICAgW2tleXNdXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgIFtvcHRpb25zXVxuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAga2V5cyA9IGtleXMgfHwgW11cblxuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0ga2V5c1xuICAgIGtleXMgPSBbXVxuICB9IGVsc2UgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKVxuICB9XG5cbiAgaWYgKGlzYXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gYXJyYXlUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKHBhdGgsIGtleXMsIG9wdGlvbnMpXG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsInZhciByZXQgPSByZXF1aXJlKCdyZXQnKTtcbnZhciBEUmFuZ2UgPSByZXF1aXJlKCdkaXNjb250aW51b3VzLXJhbmdlJyk7XG52YXIgdHlwZXMgPSByZXQudHlwZXM7XG5cblxuLyoqXG4gKiBJZiBjb2RlIGlzIGFscGhhYmV0aWMsIGNvbnZlcnRzIHRvIG90aGVyIGNhc2UuXG4gKiBJZiBub3QgYWxwaGFiZXRpYywgcmV0dXJucyBiYWNrIGNvZGUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gdG9PdGhlckNhc2UoY29kZSkge1xuICByZXR1cm4gY29kZSArICg5NyA8PSBjb2RlICYmIGNvZGUgPD0gMTIyID8gLTMyIDpcbiAgICAgICAgICAgICAgICAgNjUgPD0gY29kZSAmJiBjb2RlIDw9IDkwICA/ICAzMiA6IDApO1xufVxuXG5cbi8qKlxuICogUmFuZG9tbHkgcmV0dXJucyBhIHRydWUgb3IgZmFsc2UgdmFsdWUuXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmFuZEJvb2woKSB7XG4gIHJldHVybiAhdGhpcy5yYW5kSW50KDAsIDEpO1xufVxuXG5cbi8qKlxuICogUmFuZG9tbHkgc2VsZWN0cyBhbmQgcmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IGFyclxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiByYW5kU2VsZWN0KGFycikge1xuICBpZiAoYXJyIGluc3RhbmNlb2YgRFJhbmdlKSB7XG4gICAgcmV0dXJuIGFyci5pbmRleCh0aGlzLnJhbmRJbnQoMCwgYXJyLmxlbmd0aCAtIDEpKTtcbiAgfVxuICByZXR1cm4gYXJyW3RoaXMucmFuZEludCgwLCBhcnIubGVuZ3RoIC0gMSldO1xufVxuXG5cbi8qKlxuICogZXhwYW5kcyBhIHRva2VuIHRvIGEgRGlzY29udGludW91c1JhbmdlIG9mIGNoYXJhY3RlcnMgd2hpY2ggaGFzIGEgXG4gKiBsZW5ndGggYW5kIGFuIGluZGV4IGZ1bmN0aW9uIChmb3IgcmFuZG9tIHNlbGVjdGluZylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdG9rZW5cbiAqIEByZXR1cm4ge0Rpc2NvbnRpbnVvdXNSYW5nZX1cbiAqL1xuZnVuY3Rpb24gZXhwYW5kKHRva2VuKSB7XG4gIGlmICh0b2tlbi50eXBlID09PSByZXQudHlwZXMuQ0hBUikgcmV0dXJuIG5ldyBEUmFuZ2UodG9rZW4udmFsdWUpO1xuICBpZiAodG9rZW4udHlwZSA9PT0gcmV0LnR5cGVzLlJBTkdFKSByZXR1cm4gbmV3IERSYW5nZSh0b2tlbi5mcm9tLCB0b2tlbi50byk7XG4gIGlmICh0b2tlbi50eXBlID09PSByZXQudHlwZXMuU0VUKSB7XG4gICAgdmFyIGRyYW5nZSA9IG5ldyBEUmFuZ2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN1YnJhbmdlID0gZXhwYW5kLmNhbGwodGhpcywgdG9rZW4uc2V0W2ldKTtcbiAgICAgIGRyYW5nZS5hZGQoc3VicmFuZ2UpO1xuICAgICAgaWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YnJhbmdlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBzdWJyYW5nZS5pbmRleChqKTtcbiAgICAgICAgICB2YXIgb3RoZXJDYXNlQ29kZSA9IHRvT3RoZXJDYXNlKGNvZGUpO1xuICAgICAgICAgIGlmIChjb2RlICE9PSBvdGhlckNhc2VDb2RlKSB7XG4gICAgICAgICAgICBkcmFuZ2UuYWRkKG90aGVyQ2FzZUNvZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodG9rZW4ubm90KSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UmFuZ2UuY2xvbmUoKS5zdWJ0cmFjdChkcmFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZHJhbmdlO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwYW5kYWJsZSB0b2tlbiB0eXBlOiAnICsgdG9rZW4udHlwZSk7XG59XG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7UmVnRXhwfFN0cmluZ30gcmVnZXhwXG4gKiBAcGFyYW0ge1N0cmluZ30gbVxuICovXG52YXIgUmFuZEV4cCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocmVnZXhwLCBtKSB7XG4gIHRoaXMuZGVmYXVsdFJhbmdlID0gdGhpcy5kZWZhdWx0UmFuZ2UuY2xvbmUoKTtcbiAgaWYgKHJlZ2V4cCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHRoaXMuaWdub3JlQ2FzZSA9IHJlZ2V4cC5pZ25vcmVDYXNlO1xuICAgIHRoaXMubXVsdGlsaW5lID0gcmVnZXhwLm11bHRpbGluZTtcbiAgICBpZiAodHlwZW9mIHJlZ2V4cC5tYXggPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLm1heCA9IHJlZ2V4cC5tYXg7XG4gICAgfVxuICAgIHJlZ2V4cCA9IHJlZ2V4cC5zb3VyY2U7XG5cbiAgfSBlbHNlIGlmICh0eXBlb2YgcmVnZXhwID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuaWdub3JlQ2FzZSA9IG0gJiYgbS5pbmRleE9mKCdpJykgIT09IC0xO1xuICAgIHRoaXMubXVsdGlsaW5lID0gbSAmJiBtLmluZGV4T2YoJ20nKSAhPT0gLTE7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHJlZ2V4cCBvciBzdHJpbmcnKTtcbiAgfVxuXG4gIHRoaXMudG9rZW5zID0gcmV0KHJlZ2V4cCk7XG59O1xuXG5cbi8vIFdoZW4gYSByZXBldGl0aW9uYWwgdG9rZW4gaGFzIGl0cyBtYXggc2V0IHRvIEluZmluaXRlLFxuLy8gcmFuZGV4cCB3b24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhIHJhbmRvbSBhbW91bnQgYmV0d2VlbiBtaW4gYW5kIEluZmluaXRlXG4vLyBpbnN0ZWFkIGl0IHdpbGwgc2VlIEluZmluaXRlIGFzIG1pbiArIDEwMC5cblJhbmRFeHAucHJvdG90eXBlLm1heCA9IDEwMDtcblxuXG4vLyBHZW5lcmF0ZXMgdGhlIHJhbmRvbSBzdHJpbmcuXG5SYW5kRXhwLnByb3RvdHlwZS5nZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGdlbi5jYWxsKHRoaXMsIHRoaXMudG9rZW5zLCBbXSk7XG59O1xuXG5cbi8vIEVuYWJsZXMgdXNlIG9mIHJhbmRleHAgd2l0aCBhIHNob3J0ZXIgY2FsbC5cblJhbmRFeHAucmFuZGV4cCA9IGZ1bmN0aW9uKHJlZ2V4cCwgbSkge1xuICB2YXIgcmFuZGV4cDtcblxuICBpZiAocmVnZXhwLl9yYW5kZXhwID09PSB1bmRlZmluZWQpIHtcbiAgICByYW5kZXhwID0gbmV3IFJhbmRFeHAocmVnZXhwLCBtKTtcbiAgICByZWdleHAuX3JhbmRleHAgPSByYW5kZXhwO1xuICB9IGVsc2Uge1xuICAgIHJhbmRleHAgPSByZWdleHAuX3JhbmRleHA7XG4gICAgaWYgKHR5cGVvZiByZWdleHAubWF4ID09PSAnbnVtYmVyJykge1xuICAgICAgcmFuZGV4cC5tYXggPSByZWdleHAubWF4O1xuICAgIH1cbiAgICBpZiAocmVnZXhwLmRlZmF1bHRSYW5nZSBpbnN0YW5jZW9mIERSYW5nZSkge1xuICAgICAgcmFuZGV4cC5kZWZhdWx0UmFuZ2UgPSByZWdleHAuZGVmYXVsdFJhbmdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlZ2V4cC5yYW5kSW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByYW5kZXhwLnJhbmRJbnQgPSByZWdleHAucmFuZEludDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmFuZGV4cC5nZW4oKTtcbn07XG5cblxuLy8gVGhpcyBlbmFibGVzIHN1Z2FyeSAvcmVnZXhwLy5nZW4gc3ludGF4LlxuUmFuZEV4cC5zdWdhciA9IGZ1bmN0aW9uKCkge1xuICAvKiBqc2hpbnQgZnJlZXplOmZhbHNlICovXG4gIFJlZ0V4cC5wcm90b3R5cGUuZ2VuID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJhbmRFeHAucmFuZGV4cCh0aGlzKTtcbiAgfTtcbn07XG5cbi8vIFRoaXMgYWxsb3dzIGV4cGFuZGluZyB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY2hhcmFjdGVyc1xuLy8gZm9yIGluc3RhbmNlOiBSYW5kRXhwLmRlZmF1bHRSYW5nZS5hZGQoMCwgNjU1MzUpO1xuUmFuZEV4cC5wcm90b3R5cGUuZGVmYXVsdFJhbmdlID0gbmV3IERSYW5nZSgzMiwgMTI2KTtcblxuXG4vKipcbiAqIFJhbmRvbWx5IGdlbmVyYXRlcyBhbmQgcmV0dXJucyBhIG51bWJlciBiZXR3ZWVuIGEgYW5kIGIgKGluY2x1c2l2ZSkuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGFcbiAqIEBwYXJhbSB7TnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cblJhbmRFeHAucHJvdG90eXBlLnJhbmRJbnQgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDEgKyBiIC0gYSkpO1xufTtcblxuXG4vKipcbiAqIEdlbmVyYXRlIHJhbmRvbSBzdHJpbmcgbW9kZWxlZCBhZnRlciBnaXZlbiB0b2tlbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRva2VuXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBncm91cHNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2VuKHRva2VuLCBncm91cHMpIHtcbiAgdmFyIHN0YWNrLCBzdHIsIG4sIGksIGw7XG5cbiAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG5cblxuICAgIGNhc2UgdHlwZXMuUk9PVDpcbiAgICBjYXNlIHR5cGVzLkdST1VQOlxuICAgICAgaWYgKHRva2VuLm5vdEZvbGxvd2VkQnkpIHsgcmV0dXJuICcnOyB9XG5cbiAgICAgIC8vIEluc2VydCBwbGFjZWhvbGRlciB1bnRpbCBncm91cCBzdHJpbmcgaXMgZ2VuZXJhdGVkLlxuICAgICAgaWYgKHRva2VuLnJlbWVtYmVyICYmIHRva2VuLmdyb3VwTnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdG9rZW4uZ3JvdXBOdW1iZXIgPSBncm91cHMucHVzaChudWxsKSAtIDE7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrID0gdG9rZW4ub3B0aW9ucyA/XG4gICAgICAgIHJhbmRTZWxlY3QuY2FsbCh0aGlzLCB0b2tlbi5vcHRpb25zKSA6IHRva2VuLnN0YWNrO1xuXG4gICAgICBzdHIgPSAnJztcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBzdGFjay5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGdlbi5jYWxsKHRoaXMsIHN0YWNrW2ldLCBncm91cHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ucmVtZW1iZXIpIHtcbiAgICAgICAgZ3JvdXBzW3Rva2VuLmdyb3VwTnVtYmVyXSA9IHN0cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG5cblxuICAgIGNhc2UgdHlwZXMuUE9TSVRJT046XG4gICAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuXG4gICAgICByZXR1cm4gJyc7XG5cblxuICAgIGNhc2UgdHlwZXMuU0VUOlxuICAgICAgdmFyIGV4cGFuZGVkX3NldCA9IGV4cGFuZC5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICAgIGlmICghZXhwYW5kZWRfc2V0Lmxlbmd0aCkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocmFuZFNlbGVjdC5jYWxsKHRoaXMsIGV4cGFuZGVkX3NldCkpO1xuXG5cbiAgICBjYXNlIHR5cGVzLlJFUEVUSVRJT046XG4gICAgICAvLyBSYW5kb21seSBnZW5lcmF0ZSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAgICAgIG4gPSB0aGlzLnJhbmRJbnQodG9rZW4ubWluLFxuICAgICAgICAgICAgICB0b2tlbi5tYXggPT09IEluZmluaXR5ID8gdG9rZW4ubWluICsgdGhpcy5tYXggOiB0b2tlbi5tYXgpO1xuXG4gICAgICBzdHIgPSAnJztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGdlbi5jYWxsKHRoaXMsIHRva2VuLnZhbHVlLCBncm91cHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyO1xuXG5cbiAgICBjYXNlIHR5cGVzLlJFRkVSRU5DRTpcbiAgICAgIHJldHVybiBncm91cHNbdG9rZW4udmFsdWUgLSAxXSB8fCAnJztcblxuXG4gICAgY2FzZSB0eXBlcy5DSEFSOlxuICAgICAgdmFyIGNvZGUgPSB0aGlzLmlnbm9yZUNhc2UgJiYgcmFuZEJvb2wuY2FsbCh0aGlzKSA/XG4gICAgICAgIHRvT3RoZXJDYXNlKHRva2VuLnZhbHVlKSA6IHRva2VuLnZhbHVlO1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gIH1cbn1cblxuXG4iLCJcbi8qKlxuICogUmVkdWNlIGBhcnJgIHdpdGggYGZuYC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge01peGVkfSBpbml0aWFsXG4gKlxuICogVE9ETzogY29tYmF0aWJsZSBlcnJvciBoYW5kbGluZz9cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGFyciwgZm4sIGluaXRpYWwpeyAgXG4gIHZhciBpZHggPSAwO1xuICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgdmFyIGN1cnIgPSBhcmd1bWVudHMubGVuZ3RoID09IDNcbiAgICA/IGluaXRpYWxcbiAgICA6IGFycltpZHgrK107XG5cbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGN1cnIgPSBmbi5jYWxsKG51bGwsIGN1cnIsIGFycltpZHhdLCArK2lkeCwgYXJyKTtcbiAgfVxuICBcbiAgcmV0dXJuIGN1cnI7XG59OyIsInZhciB1dGlsICAgICAgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciB0eXBlcyAgICAgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG52YXIgc2V0cyAgICAgID0gcmVxdWlyZSgnLi9zZXRzJyk7XG52YXIgcG9zaXRpb25zID0gcmVxdWlyZSgnLi9wb3NpdGlvbnMnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHJlZ2V4cFN0cikge1xuICB2YXIgaSA9IDAsIGwsIGMsXG4gICAgICBzdGFydCA9IHsgdHlwZTogdHlwZXMuUk9PVCwgc3RhY2s6IFtdfSxcblxuICAgICAgLy8gS2VlcCB0cmFjayBvZiBsYXN0IGNsYXVzZS9ncm91cCBhbmQgc3RhY2suXG4gICAgICBsYXN0R3JvdXAgPSBzdGFydCxcbiAgICAgIGxhc3QgPSBzdGFydC5zdGFjayxcbiAgICAgIGdyb3VwU3RhY2sgPSBbXTtcblxuXG4gIHZhciByZXBlYXRFcnIgPSBmdW5jdGlvbihpKSB7XG4gICAgdXRpbC5lcnJvcihyZWdleHBTdHIsICdOb3RoaW5nIHRvIHJlcGVhdCBhdCBjb2x1bW4gJyArIChpIC0gMSkpO1xuICB9O1xuXG4gIC8vIERlY29kZSBhIGZldyBlc2NhcGVkIGNoYXJhY3RlcnMuXG4gIHZhciBzdHIgPSB1dGlsLnN0clRvQ2hhcnMocmVnZXhwU3RyKTtcbiAgbCA9IHN0ci5sZW5ndGg7XG5cbiAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggY2hhcmFjdGVyIGluIHN0cmluZy5cbiAgd2hpbGUgKGkgPCBsKSB7XG4gICAgYyA9IHN0cltpKytdO1xuXG4gICAgc3dpdGNoIChjKSB7XG4gICAgICAvLyBIYW5kbGUgZXNjYXBlZCBjaGFyYWN0ZXJzLCBpbmNsdWVzIGEgZmV3IHNldHMuXG4gICAgICBjYXNlICdcXFxcJzpcbiAgICAgICAgYyA9IHN0cltpKytdO1xuXG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgIGNhc2UgJ2InOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHBvc2l0aW9ucy53b3JkQm91bmRhcnkoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHBvc2l0aW9ucy5ub25Xb3JkQm91bmRhcnkoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMud29yZHMoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMubm90V29yZHMoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMuaW50cygpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICBsYXN0LnB1c2goc2V0cy5ub3RJbnRzKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLndoaXRlc3BhY2UoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ1MnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMubm90V2hpdGVzcGFjZSgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGMgaXMgaW50ZWdlci5cbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2UgaXQncyBhIHJlZmVyZW5jZS5cbiAgICAgICAgICAgIGlmICgvXFxkLy50ZXN0KGMpKSB7XG4gICAgICAgICAgICAgIGxhc3QucHVzaCh7IHR5cGU6IHR5cGVzLlJFRkVSRU5DRSwgdmFsdWU6IHBhcnNlSW50KGMsIDEwKSB9KTtcblxuICAgICAgICAgICAgLy8gRXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsYXN0LnB1c2goeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogYy5jaGFyQ29kZUF0KDApIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cblxuICAgICAgLy8gUG9zaXRpb25hbHMuXG4gICAgICBjYXNlICdeJzpcbiAgICAgICAgICBsYXN0LnB1c2gocG9zaXRpb25zLmJlZ2luKCkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgbGFzdC5wdXNoKHBvc2l0aW9ucy5lbmQoKSk7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIEhhbmRsZSBjdXN0b20gc2V0cy5cbiAgICAgIGNhc2UgJ1snOlxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGNsYXNzIGlzICdhbnRpJyBpLmUuIFteYWJjXS5cbiAgICAgICAgdmFyIG5vdDtcbiAgICAgICAgaWYgKHN0cltpXSA9PT0gJ14nKSB7XG4gICAgICAgICAgbm90ID0gdHJ1ZTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm90ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgYWxsIHRoZSBjaGFyYWN0ZXJzIGluIGNsYXNzLlxuICAgICAgICB2YXIgY2xhc3NUb2tlbnMgPSB1dGlsLnRva2VuaXplQ2xhc3Moc3RyLnNsaWNlKGkpLCByZWdleHBTdHIpO1xuXG4gICAgICAgIC8vIEluY3JlYXNlIGluZGV4IGJ5IGxlbmd0aCBvZiBjbGFzcy5cbiAgICAgICAgaSArPSBjbGFzc1Rva2Vuc1sxXTtcbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLlNFVFxuICAgICAgICAgICwgc2V0OiBjbGFzc1Rva2Vuc1swXVxuICAgICAgICAgICwgbm90OiBub3RcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJlYWs7XG5cblxuICAgICAgLy8gQ2xhc3Mgb2YgYW55IGNoYXJhY3RlciBleGNlcHQgXFxuLlxuICAgICAgY2FzZSAnLic6XG4gICAgICAgIGxhc3QucHVzaChzZXRzLmFueUNoYXIoKSk7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIFB1c2ggZ3JvdXAgb250byBzdGFjay5cbiAgICAgIGNhc2UgJygnOlxuICAgICAgICAvLyBDcmVhdGUgZ3JvdXAuXG4gICAgICAgIHZhciBncm91cCA9IHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLkdST1VQXG4gICAgICAgICAgLCBzdGFjazogW11cbiAgICAgICAgICAsIHJlbWVtYmVyOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgYyA9IHN0cltpXTtcblxuICAgICAgICAvLyBpZiBpZiB0aGlzIGlzIGEgc3BlY2lhbCBraW5kIG9mIGdyb3VwLlxuICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgYyA9IHN0cltpICsgMV07XG4gICAgICAgICAgaSArPSAyO1xuXG4gICAgICAgICAgLy8gTWF0Y2ggaWYgZm9sbG93ZWQgYnkuXG4gICAgICAgICAgaWYgKGMgPT09ICc9Jykge1xuICAgICAgICAgICAgZ3JvdXAuZm9sbG93ZWRCeSA9IHRydWU7XG5cbiAgICAgICAgICAvLyBNYXRjaCBpZiBub3QgZm9sbG93ZWQgYnkuXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnIScpIHtcbiAgICAgICAgICAgIGdyb3VwLm5vdEZvbGxvd2VkQnkgPSB0cnVlO1xuXG4gICAgICAgICAgfSBlbHNlIGlmIChjICE9PSAnOicpIHtcbiAgICAgICAgICAgIHV0aWwuZXJyb3IocmVnZXhwU3RyLFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGdyb3VwLCBjaGFyYWN0ZXIgXFwnJyArIGMgKyAnXFwnIGFmdGVyIFxcJz9cXCcgYXQgY29sdW1uICcgK1xuICAgICAgICAgICAgICAgIChpIC0gMSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdyb3VwLnJlbWVtYmVyID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbnNlcnQgc3ViZ3JvdXAgaW50byBjdXJyZW50IGdyb3VwIHN0YWNrLlxuICAgICAgICBsYXN0LnB1c2goZ3JvdXApO1xuXG4gICAgICAgIC8vIFJlbWVtYmVyIHRoZSBjdXJyZW50IGdyb3VwIGZvciB3aGVuIHRoZSBncm91cCBjbG9zZXMuXG4gICAgICAgIGdyb3VwU3RhY2sucHVzaChsYXN0R3JvdXApO1xuXG4gICAgICAgIC8vIE1ha2UgdGhpcyBuZXcgZ3JvdXAgdGhlIGN1cnJlbnQgZ3JvdXAuXG4gICAgICAgIGxhc3RHcm91cCA9IGdyb3VwO1xuICAgICAgICBsYXN0ID0gZ3JvdXAuc3RhY2s7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIFBvcCBncm91cCBvdXQgb2Ygc3RhY2suXG4gICAgICBjYXNlICcpJzpcbiAgICAgICAgaWYgKGdyb3VwU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdXRpbC5lcnJvcihyZWdleHBTdHIsICdVbm1hdGNoZWQgKSBhdCBjb2x1bW4gJyArIChpIC0gMSkpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RHcm91cCA9IGdyb3VwU3RhY2sucG9wKCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBncm91cCBoYXMgYSBQSVBFLlxuICAgICAgICAvLyBUbyBnZXQgYmFjayB0aGUgY29ycmVjdCBsYXN0IHN0YWNrLlxuICAgICAgICBsYXN0ID0gbGFzdEdyb3VwLm9wdGlvbnMgPyBsYXN0R3JvdXAub3B0aW9uc1tsYXN0R3JvdXAub3B0aW9ucy5sZW5ndGggLSAxXSA6IGxhc3RHcm91cC5zdGFjaztcbiAgICAgICAgYnJlYWs7XG5cblxuICAgICAgLy8gVXNlIHBpcGUgY2hhcmFjdGVyIHRvIGdpdmUgbW9yZSBjaG9pY2VzLlxuICAgICAgY2FzZSAnfCc6XG4gICAgICAgIC8vIENyZWF0ZSBhcnJheSB3aGVyZSBvcHRpb25zIGFyZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBQSVBFXG4gICAgICAgIC8vIGluIHRoaXMgY2xhdXNlLlxuICAgICAgICBpZiAoIWxhc3RHcm91cC5vcHRpb25zKSB7XG4gICAgICAgICAgbGFzdEdyb3VwLm9wdGlvbnMgPSBbbGFzdEdyb3VwLnN0YWNrXTtcbiAgICAgICAgICBkZWxldGUgbGFzdEdyb3VwLnN0YWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHN0YWNrIGFuZCBhZGQgdG8gb3B0aW9ucyBmb3IgcmVzdCBvZiBjbGF1c2UuXG4gICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICBsYXN0R3JvdXAub3B0aW9ucy5wdXNoKHN0YWNrKTtcbiAgICAgICAgbGFzdCA9IHN0YWNrO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBSZXBldGl0aW9uLlxuICAgICAgLy8gRm9yIGV2ZXJ5IHJlcGV0aXRpb24sIHJlbW92ZSBsYXN0IGVsZW1lbnQgZnJvbSBsYXN0IHN0YWNrXG4gICAgICAvLyB0aGVuIGluc2VydCBiYWNrIGEgUkFOR0Ugb2JqZWN0LlxuICAgICAgLy8gVGhpcyBkZXNpZ24gaXMgY2hvc2VuIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuXG4gICAgICAvLyBvbmUgcmVwZXRpdGlvbiBzeW1ib2xzIGluIGEgcmVnZXggaS5lLiBgYT8rezIsM31gLlxuICAgICAgY2FzZSAneyc6XG4gICAgICAgIHZhciBycyA9IC9eKFxcZCspKCwoXFxkKyk/KT9cXH0vLmV4ZWMoc3RyLnNsaWNlKGkpKSwgbWluLCBtYXg7XG4gICAgICAgIGlmIChycyAhPT0gbnVsbCkge1xuICAgICAgICAgIG1pbiA9IHBhcnNlSW50KHJzWzFdLCAxMCk7XG4gICAgICAgICAgbWF4ID0gcnNbMl0gPyByc1szXSA/IHBhcnNlSW50KHJzWzNdLCAxMCkgOiBJbmZpbml0eSA6IG1pbjtcbiAgICAgICAgICBpICs9IHJzWzBdLmxlbmd0aDtcblxuICAgICAgICAgIGxhc3QucHVzaCh7XG4gICAgICAgICAgICAgIHR5cGU6IHR5cGVzLlJFUEVUSVRJT05cbiAgICAgICAgICAgICwgbWluOiBtaW5cbiAgICAgICAgICAgICwgbWF4OiBtYXhcbiAgICAgICAgICAgICwgdmFsdWU6IGxhc3QucG9wKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0LnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5DSEFSXG4gICAgICAgICAgICAsIHZhbHVlOiAxMjNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnPyc6XG4gICAgICAgIGlmIChsYXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJlcGVhdEVycihpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0LnB1c2goe1xuICAgICAgICAgICAgdHlwZTogdHlwZXMuUkVQRVRJVElPTlxuICAgICAgICAgICwgbWluOiAwXG4gICAgICAgICAgLCBtYXg6IDFcbiAgICAgICAgICAsIHZhbHVlOiBsYXN0LnBvcCgpXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnKyc6XG4gICAgICAgIGlmIChsYXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJlcGVhdEVycihpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0LnB1c2goe1xuICAgICAgICAgICAgdHlwZTogdHlwZXMuUkVQRVRJVElPTlxuICAgICAgICAgICwgbWluOiAxXG4gICAgICAgICAgLCBtYXg6IEluZmluaXR5XG4gICAgICAgICAgLCB2YWx1ZTogbGFzdC5wb3AoKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJyonOlxuICAgICAgICBpZiAobGFzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXBlYXRFcnIoaSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLlJFUEVUSVRJT05cbiAgICAgICAgICAsIG1pbjogMFxuICAgICAgICAgICwgbWF4OiBJbmZpbml0eVxuICAgICAgICAgICwgdmFsdWU6IGxhc3QucG9wKClcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIERlZmF1bHQgaXMgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYFxcW10oKXt9PysqXiRgLlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLkNIQVJcbiAgICAgICAgICAsIHZhbHVlOiBjLmNoYXJDb2RlQXQoMClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICAvLyBDaGVjayBpZiBhbnkgZ3JvdXBzIGhhdmUgbm90IGJlZW4gY2xvc2VkLlxuICBpZiAoZ3JvdXBTdGFjay5sZW5ndGggIT09IDApIHtcbiAgICB1dGlsLmVycm9yKHJlZ2V4cFN0ciwgJ1VudGVybWluYXRlZCBncm91cCcpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0O1xufTtcblxubW9kdWxlLmV4cG9ydHMudHlwZXMgPSB0eXBlcztcbiIsInZhciB0eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcblxuZXhwb3J0cy53b3JkQm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuUE9TSVRJT04sIHZhbHVlOiAnYicgfTtcbn07XG5cbmV4cG9ydHMubm9uV29yZEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlBPU0lUSU9OLCB2YWx1ZTogJ0InIH07XG59O1xuXG5leHBvcnRzLmJlZ2luID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlBPU0lUSU9OLCB2YWx1ZTogJ14nIH07XG59O1xuXG5leHBvcnRzLmVuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5QT1NJVElPTiwgdmFsdWU6ICckJyB9O1xufTtcbiIsInZhciB0eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcblxudmFyIElOVFMgPSBmdW5jdGlvbigpIHtcbiByZXR1cm4gW3sgdHlwZTogdHlwZXMuUkFOR0UgLCBmcm9tOiA0OCwgdG86IDU3IH1dO1xufTtcblxudmFyIFdPUkRTID0gZnVuY3Rpb24oKSB7XG4gcmV0dXJuIFtcbiAgICAgIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDk1IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuUkFOR0UsIGZyb206IDk3LCB0bzogMTIyIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuUkFOR0UsIGZyb206IDY1LCB0bzogOTAgfVxuICBdLmNvbmNhdChJTlRTKCkpO1xufTtcblxudmFyIFdISVRFU1BBQ0UgPSBmdW5jdGlvbigpIHtcbiByZXR1cm4gW1xuICAgICAgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogOSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAzMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxNjAgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogNTc2MCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA2MTU4IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5MyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTk0IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTUgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5NiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTk3IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTggfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5OSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjAwIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMDEgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIwMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjMyIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMzMgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIzOSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4Mjg3IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDEyMjg4IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDY1Mjc5IH1cbiAgXTtcbn07XG5cbnZhciBOT1RBTllDSEFSID0gZnVuY3Rpb24oKSB7XG4gcmV0dXJuIFtcbiAgICAgIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDEwIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDEzIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMzIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIzMyB9XG4gIF07XG59O1xuXG4vLyBwcmVkZWZpbmVkIGNsYXNzIG9iamVjdHNcbmV4cG9ydHMud29yZHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IFdPUkRTKCksIG5vdDogZmFsc2UgfTtcbn07XG5cbmV4cG9ydHMubm90V29yZHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IFdPUkRTKCksIG5vdDogdHJ1ZSB9O1xufTtcblxuZXhwb3J0cy5pbnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBJTlRTKCksIG5vdDogZmFsc2UgfTtcbn07XG5cbmV4cG9ydHMubm90SW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5TRVQsIHNldDogSU5UUygpLCBub3Q6IHRydWUgfTtcbn07XG5cbmV4cG9ydHMud2hpdGVzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5TRVQsIHNldDogV0hJVEVTUEFDRSgpLCBub3Q6IGZhbHNlIH07XG59O1xuXG5leHBvcnRzLm5vdFdoaXRlc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IFdISVRFU1BBQ0UoKSwgbm90OiB0cnVlIH07XG59O1xuXG5leHBvcnRzLmFueUNoYXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IE5PVEFOWUNIQVIoKSwgbm90OiB0cnVlIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUk9PVCAgICAgICA6IDBcbiAgLCBHUk9VUCAgICAgIDogMVxuICAsIFBPU0lUSU9OICAgOiAyXG4gICwgU0VUICAgICAgICA6IDNcbiAgLCBSQU5HRSAgICAgIDogNFxuICAsIFJFUEVUSVRJT04gOiA1XG4gICwgUkVGRVJFTkNFICA6IDZcbiAgLCBDSEFSICAgICAgIDogN1xufTtcbiIsInZhciB0eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcbnZhciBzZXRzICA9IHJlcXVpcmUoJy4vc2V0cycpO1xuXG5cbi8vIEFsbCBvZiB0aGVzZSBhcmUgcHJpdmF0ZSBhbmQgb25seSB1c2VkIGJ5IHJhbmRleHAuXG4vLyBJdCdzIGFzc3VtZWQgdGhhdCB0aGV5IHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHRoZSBjb3JyZWN0IGlucHV0LlxuXG52YXIgQ1RSTCA9ICdAQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eID8nO1xudmFyIFNMU0ggPSB7ICcwJzogMCwgJ3QnOiA5LCAnbic6IDEwLCAndic6IDExLCAnZic6IDEyLCAncic6IDEzIH07XG5cbi8qKlxuICogRmluZHMgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9ucyBpbiBzdHIgYW5kIGNvbnZlcnQgYWxsIHRvXG4gKiB0aGVpciByZXNwZWN0aXZlIGNoYXJhY3RlcnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuc3RyVG9DaGFycyA9IGZ1bmN0aW9uKHN0cikge1xuICB2YXIgY2hhcnNfcmVnZXggPSAvKFxcW1xcXFxiXFxdKXwoXFxcXCk/XFxcXCg/OnUoW0EtRjAtOV17NH0pfHgoW0EtRjAtOV17Mn0pfCgwP1swLTddezJ9KXxjKFtAQS1aXFxbXFxcXFxcXVxcXj9dKXwoWzB0bnZmcl0pKS9nO1xuICBzdHIgPSBzdHIucmVwbGFjZShjaGFyc19yZWdleCwgZnVuY3Rpb24ocywgYiwgbGJzLCBhMTYsIGIxNiwgYzgsIGRjdHJsLCBlc2xzaCkge1xuICAgIFxuICAgIGlmIChsYnMpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gYiAgICAgPyA4IDpcbiAgICAgICAgICAgICAgIGExNiAgID8gcGFyc2VJbnQoYTE2LCAxNikgOlxuICAgICAgICAgICAgICAgYjE2ICAgPyBwYXJzZUludChiMTYsIDE2KSA6XG4gICAgICAgICAgICAgICBjOCAgICA/IHBhcnNlSW50KGM4LCAgIDgpIDpcbiAgICAgICAgICAgICAgIGRjdHJsID8gQ1RSTC5pbmRleE9mKGRjdHJsKSA6XG4gICAgICAgICAgICAgICBlc2xzaCA/IFNMU0hbZXNsc2hdIDogdW5kZWZpbmVkO1xuICAgIFxuICAgIHZhciBjID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIC8vIEVzY2FwZSBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnMuXG4gICAgaWYgKC9bXFxbXFxde31cXF4kLnw/KisoKV0vLnRlc3QoYykpIHtcbiAgICAgIGMgPSAnXFxcXCcgKyBjO1xuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9KTtcblxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vKipcbiAqIHR1cm5zIGNsYXNzIGludG8gdG9rZW5zXG4gKiByZWFkcyBzdHIgdW50aWwgaXQgZW5jb3VudGVycyBhIF0gbm90IHByZWNlZWRlZCBieSBhIFxcXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHJlZ2V4cFN0clxuICogQHJldHVybiB7QXJyYXkuPEFycmF5LjxPYmplY3Q+LCBOdW1iZXI+fVxuICovXG5leHBvcnRzLnRva2VuaXplQ2xhc3MgPSBmdW5jdGlvbihzdHIsIHJlZ2V4cFN0cikge1xuICB2YXIgdG9rZW5zID0gW11cbiAgICAsIHJlZ2V4cCA9IC9cXFxcKD86KHcpfChkKXwocyl8KFcpfChEKXwoUykpfCgoPzooPzpcXFxcKSguKXwoW15cXF1cXFxcXSkpLSg/OlxcXFwpPyhbXlxcXV0pKXwoXFxdKXwoPzpcXFxcKT8oLikvZ1xuICAgICwgcnMsIGNcbiAgICA7XG5cblxuICB3aGlsZSAoKHJzID0gcmVnZXhwLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIGlmIChyc1sxXSkge1xuICAgICAgdG9rZW5zLnB1c2goc2V0cy53b3JkcygpKTtcblxuICAgIH0gZWxzZSBpZiAocnNbMl0pIHtcbiAgICAgIHRva2Vucy5wdXNoKHNldHMuaW50cygpKTtcblxuICAgIH0gZWxzZSBpZiAocnNbM10pIHtcbiAgICAgIHRva2Vucy5wdXNoKHNldHMud2hpdGVzcGFjZSgpKTtcblxuICAgIH0gZWxzZSBpZiAocnNbNF0pIHtcbiAgICAgIHRva2Vucy5wdXNoKHNldHMubm90V29yZHMoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzVdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLm5vdEludHMoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzZdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLm5vdFdoaXRlc3BhY2UoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzddKSB7XG4gICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogdHlwZXMuUkFOR0VcbiAgICAgICAgLCBmcm9tOiAocnNbOF0gfHwgcnNbOV0pLmNoYXJDb2RlQXQoMClcbiAgICAgICAgLCAgIHRvOiByc1sxMF0uY2hhckNvZGVBdCgwKVxuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKGMgPSByc1sxMl0pIHtcbiAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiB0eXBlcy5DSEFSXG4gICAgICAgICwgdmFsdWU6IGMuY2hhckNvZGVBdCgwKVxuICAgICAgfSk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFt0b2tlbnMsIHJlZ2V4cC5sYXN0SW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydHMuZXJyb3IocmVnZXhwU3RyLCAnVW50ZXJtaW5hdGVkIGNoYXJhY3RlciBjbGFzcycpO1xufTtcblxuXG4vKipcbiAqIFNob3J0Y3V0IHRvIHRocm93IGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVnZXhwXG4gKiBAcGFyYW0ge1N0cmluZ30gbXNnXG4gKi9cbmV4cG9ydHMuZXJyb3IgPSBmdW5jdGlvbihyZWdleHAsIG1zZykge1xuICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAvJyArIHJlZ2V4cCArICcvOiAnICsgbXNnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0dmFyIGlzRXh0ZW5kZWRMZW5ndGhQYXRoID0gL15cXFxcXFxcXFxcP1xcXFwvLnRlc3Qoc3RyKTtcblx0dmFyIGhhc05vbkFzY2lpID0gL1teXFx4MDAtXFx4ODBdKy8udGVzdChzdHIpO1xuXG5cdGlmIChpc0V4dGVuZGVkTGVuZ3RoUGF0aCB8fCBoYXNOb25Bc2NpaSkge1xuXHRcdHJldHVybiBzdHI7XG5cdH1cblxuXHRyZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn07XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIEVtaXR0ZXIgPSByZXF1aXJlKCdlbWl0dGVyJyk7XG52YXIgcmVkdWNlID0gcmVxdWlyZSgncmVkdWNlJyk7XG5cbi8qKlxuICogUm9vdCByZWZlcmVuY2UgZm9yIGlmcmFtZXMuXG4gKi9cblxudmFyIHJvb3Q7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gQnJvd3NlciB3aW5kb3dcbiAgcm9vdCA9IHdpbmRvdztcbn0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IC8vIFdlYiBXb3JrZXJcbiAgcm9vdCA9IHNlbGY7XG59IGVsc2UgeyAvLyBPdGhlciBlbnZpcm9ubWVudHNcbiAgcm9vdCA9IHRoaXM7XG59XG5cbi8qKlxuICogTm9vcC5cbiAqL1xuXG5mdW5jdGlvbiBub29wKCl7fTtcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIGhvc3Qgb2JqZWN0LFxuICogd2UgZG9uJ3Qgd2FudCB0byBzZXJpYWxpemUgdGhlc2UgOilcbiAqXG4gKiBUT0RPOiBmdXR1cmUgcHJvb2YsIG1vdmUgdG8gY29tcG9lbnQgbGFuZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0hvc3Qob2JqKSB7XG4gIHZhciBzdHIgPSB7fS50b1N0cmluZy5jYWxsKG9iaik7XG5cbiAgc3dpdGNoIChzdHIpIHtcbiAgICBjYXNlICdbb2JqZWN0IEZpbGVdJzpcbiAgICBjYXNlICdbb2JqZWN0IEJsb2JdJzpcbiAgICBjYXNlICdbb2JqZWN0IEZvcm1EYXRhXSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIFhIUi5cbiAqL1xuXG5yZXF1ZXN0LmdldFhIUiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHJvb3QuWE1MSHR0cFJlcXVlc3RcbiAgICAgICYmICghcm9vdC5sb2NhdGlvbiB8fCAnZmlsZTonICE9IHJvb3QubG9jYXRpb24ucHJvdG9jb2xcbiAgICAgICAgICB8fCAhcm9vdC5BY3RpdmVYT2JqZWN0KSkge1xuICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3Q7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHsgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpOyB9IGNhdGNoKGUpIHt9XG4gICAgdHJ5IHsgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNc3htbDIuWE1MSFRUUC42LjAnKTsgfSBjYXRjaChlKSB7fVxuICAgIHRyeSB7IHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTXN4bWwyLlhNTEhUVFAuMy4wJyk7IH0gY2F0Y2goZSkge31cbiAgICB0cnkgeyByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyk7IH0gY2F0Y2goZSkge31cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYWRkZWQgdG8gc3VwcG9ydCBJRS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxudmFyIHRyaW0gPSAnJy50cmltXG4gID8gZnVuY3Rpb24ocykgeyByZXR1cm4gcy50cmltKCk7IH1cbiAgOiBmdW5jdGlvbihzKSB7IHJldHVybiBzLnJlcGxhY2UoLyheXFxzKnxcXHMqJCkvZywgJycpOyB9O1xuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogPT09IE9iamVjdChvYmopO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gYG9iamAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2VyaWFsaXplKG9iaikge1xuICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gIHZhciBwYWlycyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKG51bGwgIT0gb2JqW2tleV0pIHtcbiAgICAgIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIG9ialtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICByZXR1cm4gcGFpcnMuam9pbignJicpO1xufVxuXG4vKipcbiAqIEhlbHBzICdzZXJpYWxpemUnIHdpdGggc2VyaWFsaXppbmcgYXJyYXlzLlxuICogTXV0YXRlcyB0aGUgcGFpcnMgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcGFpcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICovXG5cbmZ1bmN0aW9uIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIHZhbCkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbC5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICAgIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIHYpO1xuICAgIH0pO1xuICB9XG4gIHBhaXJzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGtleSlcbiAgICArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcbn1cblxuLyoqXG4gKiBFeHBvc2Ugc2VyaWFsaXphdGlvbiBtZXRob2QuXG4gKi9cblxuIHJlcXVlc3Quc2VyaWFsaXplT2JqZWN0ID0gc2VyaWFsaXplO1xuXG4gLyoqXG4gICogUGFyc2UgdGhlIGdpdmVuIHgtd3d3LWZvcm0tdXJsZW5jb2RlZCBgc3RyYC5cbiAgKlxuICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICogQGFwaSBwcml2YXRlXG4gICovXG5cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKHN0cikge1xuICB2YXIgb2JqID0ge307XG4gIHZhciBwYWlycyA9IHN0ci5zcGxpdCgnJicpO1xuICB2YXIgcGFydHM7XG4gIHZhciBwYWlyO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYWlycy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHBhaXIgPSBwYWlyc1tpXTtcbiAgICBwYXJ0cyA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICBvYmpbZGVjb2RlVVJJQ29tcG9uZW50KHBhcnRzWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMV0pO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBFeHBvc2UgcGFyc2VyLlxuICovXG5cbnJlcXVlc3QucGFyc2VTdHJpbmcgPSBwYXJzZVN0cmluZztcblxuLyoqXG4gKiBEZWZhdWx0IE1JTUUgdHlwZSBtYXAuXG4gKlxuICogICAgIHN1cGVyYWdlbnQudHlwZXMueG1sID0gJ2FwcGxpY2F0aW9uL3htbCc7XG4gKlxuICovXG5cbnJlcXVlc3QudHlwZXMgPSB7XG4gIGh0bWw6ICd0ZXh0L2h0bWwnLFxuICBqc29uOiAnYXBwbGljYXRpb24vanNvbicsXG4gIHhtbDogJ2FwcGxpY2F0aW9uL3htbCcsXG4gIHVybGVuY29kZWQ6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAnZm9ybSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAnZm9ybS1kYXRhJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbi8qKlxuICogRGVmYXVsdCBzZXJpYWxpemF0aW9uIG1hcC5cbiAqXG4gKiAgICAgc3VwZXJhZ2VudC5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL3htbCddID0gZnVuY3Rpb24ob2JqKXtcbiAqICAgICAgIHJldHVybiAnZ2VuZXJhdGVkIHhtbCBoZXJlJztcbiAqICAgICB9O1xuICpcbiAqL1xuXG4gcmVxdWVzdC5zZXJpYWxpemUgPSB7XG4gICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogc2VyaWFsaXplLFxuICAgJ2FwcGxpY2F0aW9uL2pzb24nOiBKU09OLnN0cmluZ2lmeVxuIH07XG5cbiAvKipcbiAgKiBEZWZhdWx0IHBhcnNlcnMuXG4gICpcbiAgKiAgICAgc3VwZXJhZ2VudC5wYXJzZVsnYXBwbGljYXRpb24veG1sJ10gPSBmdW5jdGlvbihzdHIpe1xuICAqICAgICAgIHJldHVybiB7IG9iamVjdCBwYXJzZWQgZnJvbSBzdHIgfTtcbiAgKiAgICAgfTtcbiAgKlxuICAqL1xuXG5yZXF1ZXN0LnBhcnNlID0ge1xuICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogcGFyc2VTdHJpbmcsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogSlNPTi5wYXJzZVxufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gaGVhZGVyIGBzdHJgIGludG9cbiAqIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBtYXBwZWQgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyKHN0cikge1xuICB2YXIgbGluZXMgPSBzdHIuc3BsaXQoL1xccj9cXG4vKTtcbiAgdmFyIGZpZWxkcyA9IHt9O1xuICB2YXIgaW5kZXg7XG4gIHZhciBsaW5lO1xuICB2YXIgZmllbGQ7XG4gIHZhciB2YWw7XG5cbiAgbGluZXMucG9wKCk7IC8vIHRyYWlsaW5nIENSTEZcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBsaW5lID0gbGluZXNbaV07XG4gICAgaW5kZXggPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBmaWVsZCA9IGxpbmUuc2xpY2UoMCwgaW5kZXgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdHJpbShsaW5lLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgIGZpZWxkc1tmaWVsZF0gPSB2YWw7XG4gIH1cblxuICByZXR1cm4gZmllbGRzO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyBqc29uIG9yIGhhcyAranNvbiBzdHJ1Y3R1cmVkIHN5bnRheCBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0pTT04obWltZSkge1xuICByZXR1cm4gL1tcXC8rXWpzb25cXGIvLnRlc3QobWltZSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBtaW1lIHR5cGUgZm9yIHRoZSBnaXZlbiBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB0eXBlKHN0cil7XG4gIHJldHVybiBzdHIuc3BsaXQoLyAqOyAqLykuc2hpZnQoKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhlYWRlciBmaWVsZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcmFtcyhzdHIpe1xuICByZXR1cm4gcmVkdWNlKHN0ci5zcGxpdCgvICo7ICovKSwgZnVuY3Rpb24ob2JqLCBzdHIpe1xuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgvICo9ICovKVxuICAgICAgLCBrZXkgPSBwYXJ0cy5zaGlmdCgpXG4gICAgICAsIHZhbCA9IHBhcnRzLnNoaWZ0KCk7XG5cbiAgICBpZiAoa2V5ICYmIHZhbCkgb2JqW2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBSZXNwb25zZWAgd2l0aCB0aGUgZ2l2ZW4gYHhocmAuXG4gKlxuICogIC0gc2V0IGZsYWdzICgub2ssIC5lcnJvciwgZXRjKVxuICogIC0gcGFyc2UgaGVhZGVyXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogIEFsaWFzaW5nIGBzdXBlcmFnZW50YCBhcyBgcmVxdWVzdGAgaXMgbmljZTpcbiAqXG4gKiAgICAgIHJlcXVlc3QgPSBzdXBlcmFnZW50O1xuICpcbiAqICBXZSBjYW4gdXNlIHRoZSBwcm9taXNlLWxpa2UgQVBJLCBvciBwYXNzIGNhbGxiYWNrczpcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvJykuZW5kKGZ1bmN0aW9uKHJlcyl7fSk7XG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvJywgZnVuY3Rpb24ocmVzKXt9KTtcbiAqXG4gKiAgU2VuZGluZyBkYXRhIGNhbiBiZSBjaGFpbmVkOlxuICpcbiAqICAgICAgcmVxdWVzdFxuICogICAgICAgIC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgLmVuZChmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqICBPciBwYXNzZWQgdG8gYC5zZW5kKClgOlxuICpcbiAqICAgICAgcmVxdWVzdFxuICogICAgICAgIC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0sIGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogIE9yIHBhc3NlZCB0byBgLnBvc3QoKWA6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJywgeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgLmVuZChmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqIE9yIGZ1cnRoZXIgcmVkdWNlZCB0byBhIHNpbmdsZSBjYWxsIGZvciBzaW1wbGUgY2FzZXM6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJywgeyBuYW1lOiAndGonIH0sIGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogQHBhcmFtIHtYTUxIVFRQUmVxdWVzdH0geGhyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gUmVzcG9uc2UocmVxLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB0aGlzLnJlcSA9IHJlcTtcbiAgdGhpcy54aHIgPSB0aGlzLnJlcS54aHI7XG4gIC8vIHJlc3BvbnNlVGV4dCBpcyBhY2Nlc3NpYmxlIG9ubHkgaWYgcmVzcG9uc2VUeXBlIGlzICcnIG9yICd0ZXh0JyBhbmQgb24gb2xkZXIgYnJvd3NlcnNcbiAgdGhpcy50ZXh0ID0gKCh0aGlzLnJlcS5tZXRob2QgIT0nSEVBRCcgJiYgKHRoaXMueGhyLnJlc3BvbnNlVHlwZSA9PT0gJycgfHwgdGhpcy54aHIucmVzcG9uc2VUeXBlID09PSAndGV4dCcpKSB8fCB0eXBlb2YgdGhpcy54aHIucmVzcG9uc2VUeXBlID09PSAndW5kZWZpbmVkJylcbiAgICAgPyB0aGlzLnhoci5yZXNwb25zZVRleHRcbiAgICAgOiBudWxsO1xuICB0aGlzLnN0YXR1c1RleHQgPSB0aGlzLnJlcS54aHIuc3RhdHVzVGV4dDtcbiAgdGhpcy5zZXRTdGF0dXNQcm9wZXJ0aWVzKHRoaXMueGhyLnN0YXR1cyk7XG4gIHRoaXMuaGVhZGVyID0gdGhpcy5oZWFkZXJzID0gcGFyc2VIZWFkZXIodGhpcy54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO1xuICAvLyBnZXRBbGxSZXNwb25zZUhlYWRlcnMgc29tZXRpbWVzIGZhbHNlbHkgcmV0dXJucyBcIlwiIGZvciBDT1JTIHJlcXVlc3RzLCBidXRcbiAgLy8gZ2V0UmVzcG9uc2VIZWFkZXIgc3RpbGwgd29ya3MuIHNvIHdlIGdldCBjb250ZW50LXR5cGUgZXZlbiBpZiBnZXR0aW5nXG4gIC8vIG90aGVyIGhlYWRlcnMgZmFpbHMuXG4gIHRoaXMuaGVhZGVyWydjb250ZW50LXR5cGUnXSA9IHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcbiAgdGhpcy5zZXRIZWFkZXJQcm9wZXJ0aWVzKHRoaXMuaGVhZGVyKTtcbiAgdGhpcy5ib2R5ID0gdGhpcy5yZXEubWV0aG9kICE9ICdIRUFEJ1xuICAgID8gdGhpcy5wYXJzZUJvZHkodGhpcy50ZXh0ID8gdGhpcy50ZXh0IDogdGhpcy54aHIucmVzcG9uc2UpXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGBmaWVsZGAgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihmaWVsZCl7XG4gIHJldHVybiB0aGlzLmhlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbn07XG5cbi8qKlxuICogU2V0IGhlYWRlciByZWxhdGVkIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGAudHlwZWAgdGhlIGNvbnRlbnQgdHlwZSB3aXRob3V0IHBhcmFtc1xuICpcbiAqIEEgcmVzcG9uc2Ugb2YgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIlxuICogd2lsbCBwcm92aWRlIHlvdSB3aXRoIGEgYC50eXBlYCBvZiBcInRleHQvcGxhaW5cIi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUuc2V0SGVhZGVyUHJvcGVydGllcyA9IGZ1bmN0aW9uKGhlYWRlcil7XG4gIC8vIGNvbnRlbnQtdHlwZVxuICB2YXIgY3QgPSB0aGlzLmhlYWRlclsnY29udGVudC10eXBlJ10gfHwgJyc7XG4gIHRoaXMudHlwZSA9IHR5cGUoY3QpO1xuXG4gIC8vIHBhcmFtc1xuICB2YXIgb2JqID0gcGFyYW1zKGN0KTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikgdGhpc1trZXldID0gb2JqW2tleV07XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBib2R5IGBzdHJgLlxuICpcbiAqIFVzZWQgZm9yIGF1dG8tcGFyc2luZyBvZiBib2RpZXMuIFBhcnNlcnNcbiAqIGFyZSBkZWZpbmVkIG9uIHRoZSBgc3VwZXJhZ2VudC5wYXJzZWAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge01peGVkfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnBhcnNlQm9keSA9IGZ1bmN0aW9uKHN0cil7XG4gIHZhciBwYXJzZSA9IHJlcXVlc3QucGFyc2VbdGhpcy50eXBlXTtcbiAgcmV0dXJuIHBhcnNlICYmIHN0ciAmJiAoc3RyLmxlbmd0aCB8fCBzdHIgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgPyBwYXJzZShzdHIpXG4gICAgOiBudWxsO1xufTtcblxuLyoqXG4gKiBTZXQgZmxhZ3Mgc3VjaCBhcyBgLm9rYCBiYXNlZCBvbiBgc3RhdHVzYC5cbiAqXG4gKiBGb3IgZXhhbXBsZSBhIDJ4eCByZXNwb25zZSB3aWxsIGdpdmUgeW91IGEgYC5va2Agb2YgX190cnVlX19cbiAqIHdoZXJlYXMgNXh4IHdpbGwgYmUgX19mYWxzZV9fIGFuZCBgLmVycm9yYCB3aWxsIGJlIF9fdHJ1ZV9fLiBUaGVcbiAqIGAuY2xpZW50RXJyb3JgIGFuZCBgLnNlcnZlckVycm9yYCBhcmUgYWxzbyBhdmFpbGFibGUgdG8gYmUgbW9yZVxuICogc3BlY2lmaWMsIGFuZCBgLnN0YXR1c1R5cGVgIGlzIHRoZSBjbGFzcyBvZiBlcnJvciByYW5naW5nIGZyb20gMS4uNVxuICogc29tZXRpbWVzIHVzZWZ1bCBmb3IgbWFwcGluZyByZXNwb25kIGNvbG9ycyBldGMuXG4gKlxuICogXCJzdWdhclwiIHByb3BlcnRpZXMgYXJlIGFsc28gZGVmaW5lZCBmb3IgY29tbW9uIGNhc2VzLiBDdXJyZW50bHkgcHJvdmlkaW5nOlxuICpcbiAqICAgLSAubm9Db250ZW50XG4gKiAgIC0gLmJhZFJlcXVlc3RcbiAqICAgLSAudW5hdXRob3JpemVkXG4gKiAgIC0gLm5vdEFjY2VwdGFibGVcbiAqICAgLSAubm90Rm91bmRcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUuc2V0U3RhdHVzUHJvcGVydGllcyA9IGZ1bmN0aW9uKHN0YXR1cyl7XG4gIC8vIGhhbmRsZSBJRTkgYnVnOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwMDQ2OTcyL21zaWUtcmV0dXJucy1zdGF0dXMtY29kZS1vZi0xMjIzLWZvci1hamF4LXJlcXVlc3RcbiAgaWYgKHN0YXR1cyA9PT0gMTIyMykge1xuICAgIHN0YXR1cyA9IDIwNDtcbiAgfVxuXG4gIHZhciB0eXBlID0gc3RhdHVzIC8gMTAwIHwgMDtcblxuICAvLyBzdGF0dXMgLyBjbGFzc1xuICB0aGlzLnN0YXR1cyA9IHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgdGhpcy5zdGF0dXNUeXBlID0gdHlwZTtcblxuICAvLyBiYXNpY3NcbiAgdGhpcy5pbmZvID0gMSA9PSB0eXBlO1xuICB0aGlzLm9rID0gMiA9PSB0eXBlO1xuICB0aGlzLmNsaWVudEVycm9yID0gNCA9PSB0eXBlO1xuICB0aGlzLnNlcnZlckVycm9yID0gNSA9PSB0eXBlO1xuICB0aGlzLmVycm9yID0gKDQgPT0gdHlwZSB8fCA1ID09IHR5cGUpXG4gICAgPyB0aGlzLnRvRXJyb3IoKVxuICAgIDogZmFsc2U7XG5cbiAgLy8gc3VnYXJcbiAgdGhpcy5hY2NlcHRlZCA9IDIwMiA9PSBzdGF0dXM7XG4gIHRoaXMubm9Db250ZW50ID0gMjA0ID09IHN0YXR1cztcbiAgdGhpcy5iYWRSZXF1ZXN0ID0gNDAwID09IHN0YXR1cztcbiAgdGhpcy51bmF1dGhvcml6ZWQgPSA0MDEgPT0gc3RhdHVzO1xuICB0aGlzLm5vdEFjY2VwdGFibGUgPSA0MDYgPT0gc3RhdHVzO1xuICB0aGlzLm5vdEZvdW5kID0gNDA0ID09IHN0YXR1cztcbiAgdGhpcy5mb3JiaWRkZW4gPSA0MDMgPT0gc3RhdHVzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gYEVycm9yYCByZXByZXNlbnRhdGl2ZSBvZiB0aGlzIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm4ge0Vycm9yfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUudG9FcnJvciA9IGZ1bmN0aW9uKCl7XG4gIHZhciByZXEgPSB0aGlzLnJlcTtcbiAgdmFyIG1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gIHZhciB1cmwgPSByZXEudXJsO1xuXG4gIHZhciBtc2cgPSAnY2Fubm90ICcgKyBtZXRob2QgKyAnICcgKyB1cmwgKyAnICgnICsgdGhpcy5zdGF0dXMgKyAnKSc7XG4gIHZhciBlcnIgPSBuZXcgRXJyb3IobXNnKTtcbiAgZXJyLnN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICBlcnIubWV0aG9kID0gbWV0aG9kO1xuICBlcnIudXJsID0gdXJsO1xuXG4gIHJldHVybiBlcnI7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBgUmVzcG9uc2VgLlxuICovXG5cbnJlcXVlc3QuUmVzcG9uc2UgPSBSZXNwb25zZTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBSZXF1ZXN0YCB3aXRoIHRoZSBnaXZlbiBgbWV0aG9kYCBhbmQgYHVybGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXF1ZXN0KG1ldGhvZCwgdXJsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgRW1pdHRlci5jYWxsKHRoaXMpO1xuICB0aGlzLl9xdWVyeSA9IHRoaXMuX3F1ZXJ5IHx8IFtdO1xuICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgdGhpcy51cmwgPSB1cmw7XG4gIHRoaXMuaGVhZGVyID0ge307XG4gIHRoaXMuX2hlYWRlciA9IHt9O1xuICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpe1xuICAgIHZhciBlcnIgPSBudWxsO1xuICAgIHZhciByZXMgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlcyA9IG5ldyBSZXNwb25zZShzZWxmKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGVyciA9IG5ldyBFcnJvcignUGFyc2VyIGlzIHVuYWJsZSB0byBwYXJzZSB0aGUgcmVzcG9uc2UnKTtcbiAgICAgIGVyci5wYXJzZSA9IHRydWU7XG4gICAgICBlcnIub3JpZ2luYWwgPSBlO1xuICAgICAgLy8gaXNzdWUgIzY3NTogcmV0dXJuIHRoZSByYXcgcmVzcG9uc2UgaWYgdGhlIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAgICAgIGVyci5yYXdSZXNwb25zZSA9IHNlbGYueGhyICYmIHNlbGYueGhyLnJlc3BvbnNlVGV4dCA/IHNlbGYueGhyLnJlc3BvbnNlVGV4dCA6IG51bGw7XG4gICAgICByZXR1cm4gc2VsZi5jYWxsYmFjayhlcnIpO1xuICAgIH1cblxuICAgIHNlbGYuZW1pdCgncmVzcG9uc2UnLCByZXMpO1xuXG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIHNlbGYuY2FsbGJhY2soZXJyLCByZXMpO1xuICAgIH1cblxuICAgIGlmIChyZXMuc3RhdHVzID49IDIwMCAmJiByZXMuc3RhdHVzIDwgMzAwKSB7XG4gICAgICByZXR1cm4gc2VsZi5jYWxsYmFjayhlcnIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIG5ld19lcnIgPSBuZXcgRXJyb3IocmVzLnN0YXR1c1RleHQgfHwgJ1Vuc3VjY2Vzc2Z1bCBIVFRQIHJlc3BvbnNlJyk7XG4gICAgbmV3X2Vyci5vcmlnaW5hbCA9IGVycjtcbiAgICBuZXdfZXJyLnJlc3BvbnNlID0gcmVzO1xuICAgIG5ld19lcnIuc3RhdHVzID0gcmVzLnN0YXR1cztcblxuICAgIHNlbGYuY2FsbGJhY2sobmV3X2VyciwgcmVzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogTWl4aW4gYEVtaXR0ZXJgLlxuICovXG5cbkVtaXR0ZXIoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIEFsbG93IGZvciBleHRlbnNpb25cbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbihmbikge1xuICBmbih0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogU2V0IHRpbWVvdXQgdG8gYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS50aW1lb3V0ID0gZnVuY3Rpb24obXMpe1xuICB0aGlzLl90aW1lb3V0ID0gbXM7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhciBwcmV2aW91cyB0aW1lb3V0LlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbigpe1xuICB0aGlzLl90aW1lb3V0ID0gMDtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFib3J0IHRoZSByZXF1ZXN0LCBhbmQgY2xlYXIgcG90ZW50aWFsIHRpbWVvdXQuXG4gKlxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbigpe1xuICBpZiAodGhpcy5hYm9ydGVkKSByZXR1cm47XG4gIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gIHRoaXMueGhyLmFib3J0KCk7XG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIHRoaXMuZW1pdCgnYWJvcnQnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBoZWFkZXIgYGZpZWxkYCB0byBgdmFsYCwgb3IgbXVsdGlwbGUgZmllbGRzIHdpdGggb25lIG9iamVjdC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJylcbiAqICAgICAgICAuc2V0KCdYLUFQSS1LZXknLCAnZm9vYmFyJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJywgJ1gtQVBJLUtleSc6ICdmb29iYXInIH0pXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWwpe1xuICBpZiAoaXNPYmplY3QoZmllbGQpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGZpZWxkKSB7XG4gICAgICB0aGlzLnNldChrZXksIGZpZWxkW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV0gPSB2YWw7XG4gIHRoaXMuaGVhZGVyW2ZpZWxkXSA9IHZhbDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBoZWFkZXIgYGZpZWxkYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgICAgcmVxLmdldCgnLycpXG4gKiAgICAgICAgLnVuc2V0KCdVc2VyLUFnZW50JylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS51bnNldCA9IGZ1bmN0aW9uKGZpZWxkKXtcbiAgZGVsZXRlIHRoaXMuX2hlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgZGVsZXRlIHRoaXMuaGVhZGVyW2ZpZWxkXTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBgZmllbGRgIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuZ2V0SGVhZGVyID0gZnVuY3Rpb24oZmllbGQpe1xuICByZXR1cm4gdGhpcy5faGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xufTtcblxuLyoqXG4gKiBTZXQgQ29udGVudC1UeXBlIHRvIGB0eXBlYCwgbWFwcGluZyB2YWx1ZXMgZnJvbSBgcmVxdWVzdC50eXBlc2AuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICBzdXBlcmFnZW50LnR5cGVzLnhtbCA9ICdhcHBsaWNhdGlvbi94bWwnO1xuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgneG1sJylcbiAqICAgICAgICAuc2VuZCh4bWxzdHJpbmcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LnBvc3QoJy8nKVxuICogICAgICAgIC50eXBlKCdhcHBsaWNhdGlvbi94bWwnKVxuICogICAgICAgIC5zZW5kKHhtbHN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbih0eXBlKXtcbiAgdGhpcy5zZXQoJ0NvbnRlbnQtVHlwZScsIHJlcXVlc3QudHlwZXNbdHlwZV0gfHwgdHlwZSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBGb3JjZSBnaXZlbiBwYXJzZXJcbiAqXG4gKiBTZXRzIHRoZSBib2R5IHBhcnNlciBubyBtYXR0ZXIgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKGZuKXtcbiAgdGhpcy5fcGFyc2VyID0gZm47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQWNjZXB0IHRvIGB0eXBlYCwgbWFwcGluZyB2YWx1ZXMgZnJvbSBgcmVxdWVzdC50eXBlc2AuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICBzdXBlcmFnZW50LnR5cGVzLmpzb24gPSAnYXBwbGljYXRpb24vanNvbic7XG4gKlxuICogICAgICByZXF1ZXN0LmdldCgnL2FnZW50JylcbiAqICAgICAgICAuYWNjZXB0KCdqc29uJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvYWdlbnQnKVxuICogICAgICAgIC5hY2NlcHQoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY2NlcHRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbih0eXBlKXtcbiAgdGhpcy5zZXQoJ0FjY2VwdCcsIHJlcXVlc3QudHlwZXNbdHlwZV0gfHwgdHlwZSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQXV0aG9yaXphdGlvbiBmaWVsZCB2YWx1ZSB3aXRoIGB1c2VyYCBhbmQgYHBhc3NgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1c2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFzc1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmF1dGggPSBmdW5jdGlvbih1c2VyLCBwYXNzKXtcbiAgdmFyIHN0ciA9IGJ0b2EodXNlciArICc6JyArIHBhc3MpO1xuICB0aGlzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgc3RyKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiogQWRkIHF1ZXJ5LXN0cmluZyBgdmFsYC5cbipcbiogRXhhbXBsZXM6XG4qXG4qICAgcmVxdWVzdC5nZXQoJy9zaG9lcycpXG4qICAgICAucXVlcnkoJ3NpemU9MTAnKVxuKiAgICAgLnF1ZXJ5KHsgY29sb3I6ICdibHVlJyB9KVxuKlxuKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHZhbFxuKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiogQGFwaSBwdWJsaWNcbiovXG5cblJlcXVlc3QucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24odmFsKXtcbiAgaWYgKCdzdHJpbmcnICE9IHR5cGVvZiB2YWwpIHZhbCA9IHNlcmlhbGl6ZSh2YWwpO1xuICBpZiAodmFsKSB0aGlzLl9xdWVyeS5wdXNoKHZhbCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZSB0aGUgZmllbGQgYG5hbWVgIGFuZCBgdmFsYCBmb3IgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJcbiAqIHJlcXVlc3QgYm9kaWVzLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmZpZWxkKCdmb28nLCAnYmFyJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd8QmxvYnxGaWxlfSB2YWxcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5maWVsZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbCl7XG4gIGlmICghdGhpcy5fZm9ybURhdGEpIHRoaXMuX2Zvcm1EYXRhID0gbmV3IHJvb3QuRm9ybURhdGEoKTtcbiAgdGhpcy5fZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBRdWV1ZSB0aGUgZ2l2ZW4gYGZpbGVgIGFzIGFuIGF0dGFjaG1lbnQgdG8gdGhlIHNwZWNpZmllZCBgZmllbGRgLFxuICogd2l0aCBvcHRpb25hbCBgZmlsZW5hbWVgLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmF0dGFjaChuZXcgQmxvYihbJzxhIGlkPVwiYVwiPjxiIGlkPVwiYlwiPmhleSE8L2I+PC9hPiddLCB7IHR5cGU6IFwidGV4dC9odG1sXCJ9KSlcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7QmxvYnxGaWxlfSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsZW5hbWVcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbihmaWVsZCwgZmlsZSwgZmlsZW5hbWUpe1xuICBpZiAoIXRoaXMuX2Zvcm1EYXRhKSB0aGlzLl9mb3JtRGF0YSA9IG5ldyByb290LkZvcm1EYXRhKCk7XG4gIHRoaXMuX2Zvcm1EYXRhLmFwcGVuZChmaWVsZCwgZmlsZSwgZmlsZW5hbWUpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2VuZCBgZGF0YWAsIGRlZmF1bHRpbmcgdGhlIGAudHlwZSgpYCB0byBcImpzb25cIiB3aGVuXG4gKiBhbiBvYmplY3QgaXMgZ2l2ZW4uXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICAgLy8gcXVlcnlzdHJpbmdcbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvc2VhcmNoJylcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBtdWx0aXBsZSBkYXRhIFwid3JpdGVzXCJcbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvc2VhcmNoJylcbiAqICAgICAgICAgLnNlbmQoeyBzZWFyY2g6ICdxdWVyeScgfSlcbiAqICAgICAgICAgLnNlbmQoeyByYW5nZTogJzEuLjUnIH0pXG4gKiAgICAgICAgIC5zZW5kKHsgb3JkZXI6ICdkZXNjJyB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIG1hbnVhbCBqc29uXG4gKiAgICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAgLnR5cGUoJ2pzb24nKVxuICogICAgICAgICAuc2VuZCgne1wibmFtZVwiOlwidGpcIn0nKVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIGF1dG8ganNvblxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC5zZW5kKHsgbmFtZTogJ3RqJyB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIG1hbnVhbCB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAudHlwZSgnZm9ybScpXG4gKiAgICAgICAgIC5zZW5kKCduYW1lPXRqJylcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBhdXRvIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC50eXBlKCdmb3JtJylcbiAqICAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gZGVmYXVsdHMgdG8geC13d3ctZm9ybS11cmxlbmNvZGVkXG4gICogICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAgKiAgICAgICAgLnNlbmQoJ25hbWU9dG9iaScpXG4gICogICAgICAgIC5zZW5kKCdzcGVjaWVzPWZlcnJldCcpXG4gICogICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBkYXRhXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKGRhdGEpe1xuICB2YXIgb2JqID0gaXNPYmplY3QoZGF0YSk7XG4gIHZhciB0eXBlID0gdGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIC8vIG1lcmdlXG4gIGlmIChvYmogJiYgaXNPYmplY3QodGhpcy5fZGF0YSkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgdGhpcy5fZGF0YVtrZXldID0gZGF0YVtrZXldO1xuICAgIH1cbiAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PSB0eXBlb2YgZGF0YSkge1xuICAgIGlmICghdHlwZSkgdGhpcy50eXBlKCdmb3JtJyk7XG4gICAgdHlwZSA9IHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICBpZiAoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgPT0gdHlwZSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGFcbiAgICAgICAgPyB0aGlzLl9kYXRhICsgJyYnICsgZGF0YVxuICAgICAgICA6IGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEgPSAodGhpcy5fZGF0YSB8fCAnJykgKyBkYXRhO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGlmICghb2JqIHx8IGlzSG9zdChkYXRhKSkgcmV0dXJuIHRoaXM7XG4gIGlmICghdHlwZSkgdGhpcy50eXBlKCdqc29uJyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggYGVycmAgYW5kIGByZXNgXG4gKiBhbmQgaGFuZGxlIGFyaXR5IGNoZWNrLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jYWxsYmFjayA9IGZ1bmN0aW9uKGVyciwgcmVzKXtcbiAgdmFyIGZuID0gdGhpcy5fY2FsbGJhY2s7XG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIGZuKGVyciwgcmVzKTtcbn07XG5cbi8qKlxuICogSW52b2tlIGNhbGxiYWNrIHdpdGggeC1kb21haW4gZXJyb3IuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY3Jvc3NEb21haW5FcnJvciA9IGZ1bmN0aW9uKCl7XG4gIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1JlcXVlc3QgaGFzIGJlZW4gdGVybWluYXRlZFxcblBvc3NpYmxlIGNhdXNlczogdGhlIG5ldHdvcmsgaXMgb2ZmbGluZSwgT3JpZ2luIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiwgdGhlIHBhZ2UgaXMgYmVpbmcgdW5sb2FkZWQsIGV0Yy4nKTtcbiAgZXJyLmNyb3NzRG9tYWluID0gdHJ1ZTtcblxuICBlcnIuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gIGVyci5tZXRob2QgPSB0aGlzLm1ldGhvZDtcbiAgZXJyLnVybCA9IHRoaXMudXJsO1xuXG4gIHRoaXMuY2FsbGJhY2soZXJyKTtcbn07XG5cbi8qKlxuICogSW52b2tlIGNhbGxiYWNrIHdpdGggdGltZW91dCBlcnJvci5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS50aW1lb3V0RXJyb3IgPSBmdW5jdGlvbigpe1xuICB2YXIgdGltZW91dCA9IHRoaXMuX3RpbWVvdXQ7XG4gIHZhciBlcnIgPSBuZXcgRXJyb3IoJ3RpbWVvdXQgb2YgJyArIHRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnKTtcbiAgZXJyLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB0aGlzLmNhbGxiYWNrKGVycik7XG59O1xuXG4vKipcbiAqIEVuYWJsZSB0cmFuc21pc3Npb24gb2YgY29va2llcyB3aXRoIHgtZG9tYWluIHJlcXVlc3RzLlxuICpcbiAqIE5vdGUgdGhhdCBmb3IgdGhpcyB0byB3b3JrIHRoZSBvcmlnaW4gbXVzdCBub3QgYmVcbiAqIHVzaW5nIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIgd2l0aCBhIHdpbGRjYXJkLFxuICogYW5kIGFsc28gbXVzdCBzZXQgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsc1wiXG4gKiB0byBcInRydWVcIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLndpdGhDcmVkZW50aWFscyA9IGZ1bmN0aW9uKCl7XG4gIHRoaXMuX3dpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbml0aWF0ZSByZXF1ZXN0LCBpbnZva2luZyBjYWxsYmFjayBgZm4ocmVzKWBcbiAqIHdpdGggYW4gaW5zdGFuY2VvZiBgUmVzcG9uc2VgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oZm4pe1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB4aHIgPSB0aGlzLnhociA9IHJlcXVlc3QuZ2V0WEhSKCk7XG4gIHZhciBxdWVyeSA9IHRoaXMuX3F1ZXJ5LmpvaW4oJyYnKTtcbiAgdmFyIHRpbWVvdXQgPSB0aGlzLl90aW1lb3V0O1xuICB2YXIgZGF0YSA9IHRoaXMuX2Zvcm1EYXRhIHx8IHRoaXMuX2RhdGE7XG5cbiAgLy8gc3RvcmUgY2FsbGJhY2tcbiAgdGhpcy5fY2FsbGJhY2sgPSBmbiB8fCBub29wO1xuXG4gIC8vIHN0YXRlIGNoYW5nZVxuICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtcbiAgICBpZiAoNCAhPSB4aHIucmVhZHlTdGF0ZSkgcmV0dXJuO1xuXG4gICAgLy8gSW4gSUU5LCByZWFkcyB0byBhbnkgcHJvcGVydHkgKGUuZy4gc3RhdHVzKSBvZmYgb2YgYW4gYWJvcnRlZCBYSFIgd2lsbFxuICAgIC8vIHJlc3VsdCBpbiB0aGUgZXJyb3IgXCJDb3VsZCBub3QgY29tcGxldGUgdGhlIG9wZXJhdGlvbiBkdWUgdG8gZXJyb3IgYzAwYzAyM2ZcIlxuICAgIHZhciBzdGF0dXM7XG4gICAgdHJ5IHsgc3RhdHVzID0geGhyLnN0YXR1cyB9IGNhdGNoKGUpIHsgc3RhdHVzID0gMDsgfVxuXG4gICAgaWYgKDAgPT0gc3RhdHVzKSB7XG4gICAgICBpZiAoc2VsZi50aW1lZG91dCkgcmV0dXJuIHNlbGYudGltZW91dEVycm9yKCk7XG4gICAgICBpZiAoc2VsZi5hYm9ydGVkKSByZXR1cm47XG4gICAgICByZXR1cm4gc2VsZi5jcm9zc0RvbWFpbkVycm9yKCk7XG4gICAgfVxuICAgIHNlbGYuZW1pdCgnZW5kJyk7XG4gIH07XG5cbiAgLy8gcHJvZ3Jlc3NcbiAgdmFyIGhhbmRsZVByb2dyZXNzID0gZnVuY3Rpb24oZSl7XG4gICAgaWYgKGUudG90YWwgPiAwKSB7XG4gICAgICBlLnBlcmNlbnQgPSBlLmxvYWRlZCAvIGUudG90YWwgKiAxMDA7XG4gICAgfVxuICAgIHNlbGYuZW1pdCgncHJvZ3Jlc3MnLCBlKTtcbiAgfTtcbiAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCdwcm9ncmVzcycpKSB7XG4gICAgeGhyLm9ucHJvZ3Jlc3MgPSBoYW5kbGVQcm9ncmVzcztcbiAgfVxuICB0cnkge1xuICAgIGlmICh4aHIudXBsb2FkICYmIHRoaXMuaGFzTGlzdGVuZXJzKCdwcm9ncmVzcycpKSB7XG4gICAgICB4aHIudXBsb2FkLm9ucHJvZ3Jlc3MgPSBoYW5kbGVQcm9ncmVzcztcbiAgICB9XG4gIH0gY2F0Y2goZSkge1xuICAgIC8vIEFjY2Vzc2luZyB4aHIudXBsb2FkIGZhaWxzIGluIElFIGZyb20gYSB3ZWIgd29ya2VyLCBzbyBqdXN0IHByZXRlbmQgaXQgZG9lc24ndCBleGlzdC5cbiAgICAvLyBSZXBvcnRlZCBoZXJlOlxuICAgIC8vIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvODM3MjQ1L3htbGh0dHByZXF1ZXN0LXVwbG9hZC10aHJvd3MtaW52YWxpZC1hcmd1bWVudC13aGVuLXVzZWQtZnJvbS13ZWItd29ya2VyLWNvbnRleHRcbiAgfVxuXG4gIC8vIHRpbWVvdXRcbiAgaWYgKHRpbWVvdXQgJiYgIXRoaXMuX3RpbWVyKSB7XG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICBzZWxmLnRpbWVkb3V0ID0gdHJ1ZTtcbiAgICAgIHNlbGYuYWJvcnQoKTtcbiAgICB9LCB0aW1lb3V0KTtcbiAgfVxuXG4gIC8vIHF1ZXJ5c3RyaW5nXG4gIGlmIChxdWVyeSkge1xuICAgIHF1ZXJ5ID0gcmVxdWVzdC5zZXJpYWxpemVPYmplY3QocXVlcnkpO1xuICAgIHRoaXMudXJsICs9IH50aGlzLnVybC5pbmRleE9mKCc/JylcbiAgICAgID8gJyYnICsgcXVlcnlcbiAgICAgIDogJz8nICsgcXVlcnk7XG4gIH1cblxuICAvLyBpbml0aWF0ZSByZXF1ZXN0XG4gIHhoci5vcGVuKHRoaXMubWV0aG9kLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgLy8gQ09SU1xuICBpZiAodGhpcy5fd2l0aENyZWRlbnRpYWxzKSB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcblxuICAvLyBib2R5XG4gIGlmICgnR0VUJyAhPSB0aGlzLm1ldGhvZCAmJiAnSEVBRCcgIT0gdGhpcy5tZXRob2QgJiYgJ3N0cmluZycgIT0gdHlwZW9mIGRhdGEgJiYgIWlzSG9zdChkYXRhKSkge1xuICAgIC8vIHNlcmlhbGl6ZSBzdHVmZlxuICAgIHZhciBjb250ZW50VHlwZSA9IHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICB2YXIgc2VyaWFsaXplID0gdGhpcy5fcGFyc2VyIHx8IHJlcXVlc3Quc2VyaWFsaXplW2NvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXSA6ICcnXTtcbiAgICBpZiAoIXNlcmlhbGl6ZSAmJiBpc0pTT04oY29udGVudFR5cGUpKSBzZXJpYWxpemUgPSByZXF1ZXN0LnNlcmlhbGl6ZVsnYXBwbGljYXRpb24vanNvbiddO1xuICAgIGlmIChzZXJpYWxpemUpIGRhdGEgPSBzZXJpYWxpemUoZGF0YSk7XG4gIH1cblxuICAvLyBzZXQgaGVhZGVyIGZpZWxkc1xuICBmb3IgKHZhciBmaWVsZCBpbiB0aGlzLmhlYWRlcikge1xuICAgIGlmIChudWxsID09IHRoaXMuaGVhZGVyW2ZpZWxkXSkgY29udGludWU7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoZmllbGQsIHRoaXMuaGVhZGVyW2ZpZWxkXSk7XG4gIH1cblxuICAvLyBzZW5kIHN0dWZmXG4gIHRoaXMuZW1pdCgncmVxdWVzdCcsIHRoaXMpO1xuXG4gIC8vIElFMTEgeGhyLnNlbmQodW5kZWZpbmVkKSBzZW5kcyAndW5kZWZpbmVkJyBzdHJpbmcgYXMgUE9TVCBwYXlsb2FkIChpbnN0ZWFkIG9mIG5vdGhpbmcpXG4gIC8vIFdlIG5lZWQgbnVsbCBoZXJlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gIHhoci5zZW5kKHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJyA/IGRhdGEgOiBudWxsKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEZhdXggcHJvbWlzZSBzdXBwb3J0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAoZnVsZmlsbCwgcmVqZWN0KSB7XG4gIHJldHVybiB0aGlzLmVuZChmdW5jdGlvbihlcnIsIHJlcykge1xuICAgIGVyciA/IHJlamVjdChlcnIpIDogZnVsZmlsbChyZXMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeHBvc2UgYFJlcXVlc3RgLlxuICovXG5cbnJlcXVlc3QuUmVxdWVzdCA9IFJlcXVlc3Q7XG5cbi8qKlxuICogSXNzdWUgYSByZXF1ZXN0OlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgIHJlcXVlc3QoJ0dFVCcsICcvdXNlcnMnKS5lbmQoY2FsbGJhY2spXG4gKiAgICByZXF1ZXN0KCcvdXNlcnMnKS5lbmQoY2FsbGJhY2spXG4gKiAgICByZXF1ZXN0KCcvdXNlcnMnLCBjYWxsYmFjaylcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gdXJsIG9yIGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiByZXF1ZXN0KG1ldGhvZCwgdXJsKSB7XG4gIC8vIGNhbGxiYWNrXG4gIGlmICgnZnVuY3Rpb24nID09IHR5cGVvZiB1cmwpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QoJ0dFVCcsIG1ldGhvZCkuZW5kKHVybCk7XG4gIH1cblxuICAvLyB1cmwgZmlyc3RcbiAgaWYgKDEgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCgnR0VUJywgbWV0aG9kKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVxdWVzdChtZXRob2QsIHVybCk7XG59XG5cbi8qKlxuICogR0VUIGB1cmxgIHdpdGggb3B0aW9uYWwgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR8RnVuY3Rpb259IGRhdGEgb3IgZm5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LmdldCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnR0VUJywgdXJsKTtcbiAgaWYgKCdmdW5jdGlvbicgPT0gdHlwZW9mIGRhdGEpIGZuID0gZGF0YSwgZGF0YSA9IG51bGw7XG4gIGlmIChkYXRhKSByZXEucXVlcnkoZGF0YSk7XG4gIGlmIChmbikgcmVxLmVuZChmbik7XG4gIHJldHVybiByZXE7XG59O1xuXG4vKipcbiAqIEhFQUQgYHVybGAgd2l0aCBvcHRpb25hbCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZHxGdW5jdGlvbn0gZGF0YSBvciBmblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QuaGVhZCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnSEVBRCcsIHVybCk7XG4gIGlmICgnZnVuY3Rpb24nID09IHR5cGVvZiBkYXRhKSBmbiA9IGRhdGEsIGRhdGEgPSBudWxsO1xuICBpZiAoZGF0YSkgcmVxLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxLmVuZChmbik7XG4gIHJldHVybiByZXE7XG59O1xuXG4vKipcbiAqIERFTEVURSBgdXJsYCB3aXRoIG9wdGlvbmFsIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGVsKHVybCwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnREVMRVRFJywgdXJsKTtcbiAgaWYgKGZuKSByZXEuZW5kKGZuKTtcbiAgcmV0dXJuIHJlcTtcbn07XG5cbnJlcXVlc3QuZGVsID0gZGVsO1xucmVxdWVzdC5kZWxldGUgPSBkZWw7XG5cbi8qKlxuICogUEFUQ0ggYHVybGAgd2l0aCBvcHRpb25hbCBgZGF0YWAgYW5kIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfSBkYXRhXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucmVxdWVzdC5wYXRjaCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnUEFUQ0gnLCB1cmwpO1xuICBpZiAoJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgZGF0YSkgZm4gPSBkYXRhLCBkYXRhID0gbnVsbDtcbiAgaWYgKGRhdGEpIHJlcS5zZW5kKGRhdGEpO1xuICBpZiAoZm4pIHJlcS5lbmQoZm4pO1xuICByZXR1cm4gcmVxO1xufTtcblxuLyoqXG4gKiBQT1NUIGB1cmxgIHdpdGggb3B0aW9uYWwgYGRhdGFgIGFuZCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZH0gZGF0YVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QucG9zdCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnUE9TVCcsIHVybCk7XG4gIGlmICgnZnVuY3Rpb24nID09IHR5cGVvZiBkYXRhKSBmbiA9IGRhdGEsIGRhdGEgPSBudWxsO1xuICBpZiAoZGF0YSkgcmVxLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxLmVuZChmbik7XG4gIHJldHVybiByZXE7XG59O1xuXG4vKipcbiAqIFBVVCBgdXJsYCB3aXRoIG9wdGlvbmFsIGBkYXRhYCBhbmQgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR8RnVuY3Rpb259IGRhdGEgb3IgZm5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LnB1dCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgZm4pe1xuICB2YXIgcmVxID0gcmVxdWVzdCgnUFVUJywgdXJsKTtcbiAgaWYgKCdmdW5jdGlvbicgPT0gdHlwZW9mIGRhdGEpIGZuID0gZGF0YSwgZGF0YSA9IG51bGw7XG4gIGlmIChkYXRhKSByZXEuc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXEuZW5kKGZuKTtcbiAgcmV0dXJuIHJlcTtcbn07XG5cbi8qKlxuICogRXhwb3NlIGByZXF1ZXN0YC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVlc3Q7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjMuMiBieSBAbWF0aGlhcywgbW9kaWZpZWQgZm9yIFVSSS5qcyAqL1xyXG5cclxudmFyIHB1bnljb2RlID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGBwdW55Y29kZWAgb2JqZWN0LlxyXG5cdCAqIEBuYW1lIHB1bnljb2RlXHJcblx0ICogQHR5cGUgT2JqZWN0XHJcblx0ICovXHJcblx0dmFyIHB1bnljb2RlLFxyXG5cclxuXHQvKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXHJcblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxyXG5cclxuXHQvKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXHJcblx0YmFzZSA9IDM2LFxyXG5cdHRNaW4gPSAxLFxyXG5cdHRNYXggPSAyNixcclxuXHRza2V3ID0gMzgsXHJcblx0ZGFtcCA9IDcwMCxcclxuXHRpbml0aWFsQmlhcyA9IDcyLFxyXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXHJcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXHJcblxyXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXHJcblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXHJcblx0cmVnZXhOb25BU0NJSSA9IC9bXlxceDIwLVxceDdFXS8sIC8vIHVucHJpbnRhYmxlIEFTQ0lJIGNoYXJzICsgbm9uLUFTQ0lJIGNoYXJzXHJcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xyXG5cclxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cclxuXHRlcnJvcnMgPSB7XHJcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxyXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcclxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXHJcblx0fSxcclxuXHJcblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xyXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcclxuXHRmbG9vciA9IE1hdGguZmxvb3IsXHJcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcclxuXHJcblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xyXG5cdGtleTtcclxuXHJcblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXHJcblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcclxuXHRcdHRocm93IG5ldyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXHJcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XHJcblx0ICogaXRlbS5cclxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xyXG5cdFx0dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xyXG5cdFx0XHRyZXN1bHRbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgc2ltcGxlIGBBcnJheSNtYXBgLWxpa2Ugd3JhcHBlciB0byB3b3JrIHdpdGggZG9tYWluIG5hbWUgc3RyaW5ncyBvciBlbWFpbFxyXG5cdCAqIGFkZHJlc3Nlcy5cclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MuXHJcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XHJcblx0ICogY2hhcmFjdGVyLlxyXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrXHJcblx0ICogZnVuY3Rpb24uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gbWFwRG9tYWluKHN0cmluZywgZm4pIHtcclxuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xyXG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xyXG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxyXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxyXG5cdFx0XHRyZXN1bHQgPSBwYXJ0c1swXSArICdAJztcclxuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XHJcblx0XHR9XHJcblx0XHQvLyBBdm9pZCBgc3BsaXQocmVnZXgpYCBmb3IgSUU4IGNvbXBhdGliaWxpdHkuIFNlZSAjMTcuXHJcblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xyXG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xyXG5cdFx0dmFyIGVuY29kZWQgPSBtYXAobGFiZWxzLCBmbikuam9pbignLicpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXHJcblx0ICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxyXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXHJcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXHJcblx0ICogbWF0Y2hpbmcgVVRGLTE2LlxyXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxyXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxyXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXHJcblx0ICogQG5hbWUgZGVjb2RlXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cclxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcclxuXHRcdHZhciBvdXRwdXQgPSBbXSxcclxuXHRcdCAgICBjb3VudGVyID0gMCxcclxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxyXG5cdFx0ICAgIHZhbHVlLFxyXG5cdFx0ICAgIGV4dHJhO1xyXG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcclxuXHRcdFx0dmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xyXG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XHJcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXHJcblx0XHRcdFx0ZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xyXG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXHJcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxyXG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXHJcblx0XHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XHJcblx0XHRcdFx0XHRjb3VudGVyLS07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG91dHB1dDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cclxuXHQgKiBAc2VlIGBwdW55Y29kZS51Y3MyLmRlY29kZWBcclxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxyXG5cdCAqIEBuYW1lIGVuY29kZVxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGNvZGVQb2ludHMgVGhlIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXHJcblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcclxuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcclxuXHRcdFx0aWYgKHZhbHVlID4gMHhGRkZGKSB7XHJcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcclxuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcclxuXHRcdFx0XHR2YWx1ZSA9IDB4REMwMCB8IHZhbHVlICYgMHgzRkY7XHJcblx0XHRcdH1cclxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XHJcblx0XHRcdHJldHVybiBvdXRwdXQ7XHJcblx0XHR9KS5qb2luKCcnKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cclxuXHQgKiBAc2VlIGBkaWdpdFRvQmFzaWMoKWBcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cclxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQgKGZvciB1c2UgaW5cclxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXHJcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xyXG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcclxuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDIyO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcclxuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDY1O1xyXG5cdFx0fVxyXG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcclxuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDk3O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGJhc2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXHJcblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXHJcblx0ICogQHByaXZhdGVcclxuXHQgKiBAcGFyYW0ge051bWJlcn0gZGlnaXQgVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50LlxyXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXHJcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2VcclxuXHQgKiBgMGAgdG8gYGJhc2UgLSAxYC4gSWYgYGZsYWdgIGlzIG5vbi16ZXJvLCB0aGUgdXBwZXJjYXNlIGZvcm0gaXNcclxuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxyXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XHJcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxyXG5cdFx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XHJcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cclxuXHQgKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XHJcblx0XHR2YXIgayA9IDA7XHJcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xyXG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xyXG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcclxuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxyXG5cdCAqIHN5bWJvbHMuXHJcblx0ICogQG1lbWJlck9mIHB1bnljb2RlXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxyXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcclxuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxyXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxyXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxyXG5cdFx0ICAgIG91dCxcclxuXHRcdCAgICBpID0gMCxcclxuXHRcdCAgICBuID0gaW5pdGlhbE4sXHJcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxyXG5cdFx0ICAgIGJhc2ljLFxyXG5cdFx0ICAgIGosXHJcblx0XHQgICAgaW5kZXgsXHJcblx0XHQgICAgb2xkaSxcclxuXHRcdCAgICB3LFxyXG5cdFx0ICAgIGssXHJcblx0XHQgICAgZGlnaXQsXHJcblx0XHQgICAgdCxcclxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cclxuXHRcdCAgICBiYXNlTWludXNUO1xyXG5cclxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxyXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcclxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxyXG5cclxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcclxuXHRcdGlmIChiYXNpYyA8IDApIHtcclxuXHRcdFx0YmFzaWMgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XHJcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxyXG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XHJcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xyXG5cdFx0XHR9XHJcblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcclxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXHJcblxyXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcclxuXHJcblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cclxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxyXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xyXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxyXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XHJcblxyXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xyXG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xyXG5cclxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XHJcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xyXG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xyXG5cclxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcclxuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XHJcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcclxuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xyXG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcclxuXHJcblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXHJcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XHJcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcclxuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcclxuXHRcdFx0aSAlPSBvdXQ7XHJcblxyXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XHJcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcclxuXHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXHJcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cclxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXHJcblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xyXG5cdFx0dmFyIG4sXHJcblx0XHQgICAgZGVsdGEsXHJcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXHJcblx0XHQgICAgYmFzaWNMZW5ndGgsXHJcblx0XHQgICAgYmlhcyxcclxuXHRcdCAgICBqLFxyXG5cdFx0ICAgIG0sXHJcblx0XHQgICAgcSxcclxuXHRcdCAgICBrLFxyXG5cdFx0ICAgIHQsXHJcblx0XHQgICAgY3VycmVudFZhbHVlLFxyXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxyXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXHJcblx0XHQgICAgaW5wdXRMZW5ndGgsXHJcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXHJcblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxyXG5cdFx0ICAgIGJhc2VNaW51c1QsXHJcblx0XHQgICAgcU1pbnVzVDtcclxuXHJcblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXHJcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xyXG5cclxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcclxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xyXG5cclxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXHJcblx0XHRuID0gaW5pdGlhbE47XHJcblx0XHRkZWx0YSA9IDA7XHJcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XHJcblxyXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xyXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcclxuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XHJcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XHJcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XHJcblxyXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XHJcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXHJcblxyXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXHJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcclxuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XHJcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xyXG5cclxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxyXG5cdFx0XHQvLyBsYXJnZXIgb25lOlxyXG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xyXG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xyXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XHJcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxyXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xyXG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XHJcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XHJcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XHJcblx0XHRcdG4gPSBtO1xyXG5cclxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcclxuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcclxuXHJcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xyXG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcclxuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXHJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XHJcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xyXG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XHJcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcclxuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXHJcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcclxuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XHJcblx0XHRcdFx0XHRkZWx0YSA9IDA7XHJcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0KytkZWx0YTtcclxuXHRcdFx0KytuO1xyXG5cclxuXHRcdH1cclxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXHJcblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxyXG5cdCAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxyXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxyXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cclxuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXHJcblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXHJcblx0ICogc3RyaW5nLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xyXG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XHJcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxyXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxyXG5cdFx0XHRcdDogc3RyaW5nO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cclxuXHQgKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcclxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cclxuXHQgKiBBU0NJSS5cclxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxyXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxyXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3JcclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHRvQVNDSUkoaW5wdXQpIHtcclxuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xyXG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcclxuXHRcdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXHJcblx0XHRcdFx0OiBzdHJpbmc7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXHJcblx0cHVueWNvZGUgPSB7XHJcblx0XHQvKipcclxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cclxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxyXG5cdFx0ICogQHR5cGUgU3RyaW5nXHJcblx0XHQgKi9cclxuXHRcdHZlcnNpb246ICcxLjMuMicsXHJcblx0XHQvKipcclxuXHRcdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXHJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxyXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XHJcblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcclxuXHRcdCAqIEB0eXBlIE9iamVjdFxyXG5cdFx0ICovXHJcblx0XHR1Y3MyOiB7XHJcblx0XHRcdGRlY29kZTogdWNzMmRlY29kZSxcclxuXHRcdFx0ZW5jb2RlOiB1Y3MyZW5jb2RlXHJcblx0XHR9LFxyXG5cdFx0ZGVjb2RlOiBkZWNvZGUsXHJcblx0XHRlbmNvZGU6IGVuY29kZSxcclxuXHRcdHRvQVNDSUk6IHRvQVNDSUksXHJcblx0XHR0b1VuaWNvZGU6IHRvVW5pY29kZVxyXG5cdH07XHJcblxyXG5cdHJldHVybiBwdW55Y29kZTtcclxufSgpKTtcclxuXHJcbmlmICh0eXBlb2YgQ09NUElMRUQgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikgbW9kdWxlLmV4cG9ydHMgPSBwdW55Y29kZTsiLCIvLy88cmVmZXJlbmNlIHBhdGg9XCJjb21tb25qcy5kLnRzXCIvPlxyXG5yZXF1aXJlKFwiLi9zY2hlbWVzL2h0dHBcIik7XHJcbnJlcXVpcmUoXCIuL3NjaGVtZXMvdXJuXCIpO1xyXG5yZXF1aXJlKFwiLi9zY2hlbWVzL21haWx0b1wiKTtcclxuIiwiLy8vPHJlZmVyZW5jZSBwYXRoPVwiLi4vdXJpLnRzXCIvPlxyXG5pZiAodHlwZW9mIENPTVBJTEVEID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkkgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIilcclxuICAgIHZhciBVUkkgPSByZXF1aXJlKFwiLi4vdXJpXCIpO1xyXG5VUkkuU0NIRU1FU1tcImh0dHBcIl0gPSBVUkkuU0NIRU1FU1tcImh0dHBzXCJdID0ge1xyXG4gICAgZG9tYWluSG9zdDogdHJ1ZSxcclxuICAgIHBhcnNlOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgIC8vcmVwb3J0IG1pc3NpbmcgaG9zdFxyXG4gICAgICAgIGlmICghY29tcG9uZW50cy5ob3N0KSB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgfSxcclxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcclxuICAgICAgICAvL25vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucG9ydCA9PT0gKFN0cmluZyhjb21wb25lbnRzLnNjaGVtZSkudG9Mb3dlckNhc2UoKSAhPT0gXCJodHRwc1wiID8gODAgOiA0NDMpIHx8IGNvbXBvbmVudHMucG9ydCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vbm9ybWFsaXplIHRoZSBlbXB0eSBwYXRoXHJcbiAgICAgICAgaWYgKCFjb21wb25lbnRzLnBhdGgpIHtcclxuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gXCIvXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vTk9URTogV2UgZG8gbm90IHBhcnNlIHF1ZXJ5IHN0cmluZ3MgZm9yIEhUVFAgVVJJc1xyXG4gICAgICAgIC8vYXMgV1dXIEZvcm0gVXJsIEVuY29kZWQgcXVlcnkgc3RyaW5ncyBhcmUgcGFydCBvZiB0aGUgSFRNTDQrIHNwZWMsXHJcbiAgICAgICAgLy9hbmQgbm90IHRoZSBIVFRQIHNwZWMuIFxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvLy88cmVmZXJlbmNlIHBhdGg9XCIuLi91cmkudHNcIi8+XHJcbmlmICh0eXBlb2YgQ09NUElMRUQgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIFVSSSA9PT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICB2YXIgVVJJID0gcmVxdWlyZShcIi4uL3VyaVwiKSwgcHVueWNvZGUgPSByZXF1aXJlKFwiLi4vcHVueWNvZGVcIik7XHJcbn1cclxuKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIG1lcmdlKCkge1xyXG4gICAgICAgIHZhciBzZXRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgc2V0c1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNldHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBzZXRzWzBdID0gc2V0c1swXS5zbGljZSgwLCAtMSk7XHJcbiAgICAgICAgICAgIHZhciB4bCA9IHNldHMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgZm9yICh2YXIgeCA9IDE7IHggPCB4bDsgKyt4KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRzW3hdID0gc2V0c1t4XS5zbGljZSgxLCAtMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0c1t4bF0gPSBzZXRzW3hsXS5zbGljZSgxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNldHMuam9pbignJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0c1swXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzdWJleHAoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiKD86XCIgKyBzdHIgKyBcIilcIjtcclxuICAgIH1cclxuICAgIHZhciBPID0ge30sIGlzSVJJID0gVVJJLklSSV9TVVBQT1JULCBcclxuICAgIC8vUkZDIDM5ODZcclxuICAgIFVOUkVTRVJWRUQkJCA9IFwiW0EtWmEtejAtOVxcXFwtXFxcXC5cXFxcX1xcXFx+XCIgKyAoaXNJUkkgPyBcIlxcXFx4QTAtXFxcXHUyMDBEXFxcXHUyMDEwLVxcXFx1MjAyOVxcXFx1MjAyRi1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZFRlwiIDogXCJcIikgKyBcIl1cIiwgSEVYRElHJCQgPSBcIlswLTlBLUZhLWZdXCIsIFBDVF9FTkNPREVEJCA9IHN1YmV4cChzdWJleHAoXCIlW0VGZWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVbODlBLUZhLWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpKSwgXHJcbiAgICAvL1JGQyA1MzIyLCBleGNlcHQgdGhlc2Ugc3ltYm9scyBhcyBwZXIgUkZDIDYwNjg6IEAgOiAvID8gIyBbIF0gJiA7ID0gXHJcbiAgICAvL0FURVhUJCQgPSBcIltBLVphLXowLTlcXFxcIVxcXFwjXFxcXCRcXFxcJVxcXFwmXFxcXCdcXFxcKlxcXFwrXFxcXC1cXFxcL1xcXFw9XFxcXD9cXFxcXlxcXFxfXFxcXGBcXFxce1xcXFx8XFxcXH1cXFxcfl1cIixcclxuICAgIC8vV1NQJCQgPSBcIltcXFxceDIwXFxcXHgwOV1cIixcclxuICAgIC8vT0JTX1FURVhUJCQgPSBcIltcXFxceDAxLVxcXFx4MDhcXFxceDBCXFxcXHgwQ1xcXFx4MEUtXFxcXHgxRlxcXFx4N0ZdXCIsICAvLyglZDEtOCAvICVkMTEtMTIgLyAlZDE0LTMxIC8gJWQxMjcpXHJcbiAgICAvL1FURVhUJCQgPSBtZXJnZShcIltcXFxceDIxXFxcXHgyMy1cXFxceDVCXFxcXHg1RC1cXFxceDdFXVwiLCBPQlNfUVRFWFQkJCksICAvLyVkMzMgLyAlZDM1LTkxIC8gJWQ5My0xMjYgLyBvYnMtcXRleHRcclxuICAgIC8vVkNIQVIkJCA9IFwiW1xcXFx4MjEtXFxcXHg3RV1cIixcclxuICAgIC8vV1NQJCQgPSBcIltcXFxceDIwXFxcXHgwOV1cIixcclxuICAgIC8vT0JTX1FQJCA9IHN1YmV4cChcIlxcXFxcXFxcXCIgKyBtZXJnZShcIltcXFxceDAwXFxcXHgwRFxcXFx4MEFdXCIsIE9CU19RVEVYVCQkKSksICAvLyVkMCAvIENSIC8gTEYgLyBvYnMtcXRleHRcclxuICAgIC8vRldTJCA9IHN1YmV4cChzdWJleHAoV1NQJCQgKyBcIipcIiArIFwiXFxcXHgwRFxcXFx4MEFcIikgKyBcIj9cIiArIFdTUCQkICsgXCIrXCIpLFxyXG4gICAgLy9RVU9URURfUEFJUiQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXFxcXFxcIiArIHN1YmV4cChWQ0hBUiQkICsgXCJ8XCIgKyBXU1AkJCkpICsgXCJ8XCIgKyBPQlNfUVAkKSxcclxuICAgIC8vUVVPVEVEX1NUUklORyQgPSBzdWJleHAoJ1xcXFxcIicgKyBzdWJleHAoRldTJCArIFwiP1wiICsgUUNPTlRFTlQkKSArIFwiKlwiICsgRldTJCArIFwiP1wiICsgJ1xcXFxcIicpLFxyXG4gICAgQVRFWFQkJCA9IFwiW0EtWmEtejAtOVxcXFwhXFxcXCRcXFxcJVxcXFwnXFxcXCpcXFxcK1xcXFwtXFxcXF5cXFxcX1xcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dXCIsIFFURVhUJCQgPSBcIltcXFxcIVxcXFwkXFxcXCVcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcLVxcXFwuMC05XFxcXDxcXFxcPkEtWlxcXFx4NUUtXFxcXHg3RV1cIiwgVkNIQVIkJCA9IG1lcmdlKFFURVhUJCQsIFwiW1xcXFxcXFwiXFxcXFxcXFxdXCIpLCBET1RfQVRPTV9URVhUJCA9IHN1YmV4cChBVEVYVCQkICsgXCIrXCIgKyBzdWJleHAoXCJcXFxcLlwiICsgQVRFWFQkJCArIFwiK1wiKSArIFwiKlwiKSwgUVVPVEVEX1BBSVIkID0gc3ViZXhwKFwiXFxcXFxcXFxcIiArIFZDSEFSJCQpLCBRQ09OVEVOVCQgPSBzdWJleHAoUVRFWFQkJCArIFwifFwiICsgUVVPVEVEX1BBSVIkKSwgUVVPVEVEX1NUUklORyQgPSBzdWJleHAoJ1xcXFxcIicgKyBRQ09OVEVOVCQgKyBcIipcIiArICdcXFxcXCInKSwgXHJcbiAgICAvL1JGQyA2MDY4XHJcbiAgICBEVEVYVF9OT19PQlMkJCA9IFwiW1xcXFx4MjEtXFxcXHg1QVxcXFx4NUUtXFxcXHg3RV1cIiwgU09NRV9ERUxJTVMkJCA9IFwiW1xcXFwhXFxcXCRcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcO1xcXFw6XFxcXEBdXCIsIFFDSEFSJCA9IHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCArIFwifFwiICsgU09NRV9ERUxJTVMkJCksIERPTUFJTiQgPSBzdWJleHAoRE9UX0FUT01fVEVYVCQgKyBcInxcIiArIFwiXFxcXFtcIiArIERURVhUX05PX09CUyQkICsgXCIqXCIgKyBcIlxcXFxdXCIpLCBMT0NBTF9QQVJUJCA9IHN1YmV4cChET1RfQVRPTV9URVhUJCArIFwifFwiICsgUVVPVEVEX1NUUklORyQpLCBBRERSX1NQRUMkID0gc3ViZXhwKExPQ0FMX1BBUlQkICsgXCJcXFxcQFwiICsgRE9NQUlOJCksIFRPJCA9IHN1YmV4cChBRERSX1NQRUMkICsgc3ViZXhwKFwiXFxcXCxcIiArIEFERFJfU1BFQyQpICsgXCIqXCIpLCBIRk5BTUUkID0gc3ViZXhwKFFDSEFSJCArIFwiKlwiKSwgSEZWQUxVRSQgPSBIRk5BTUUkLCBIRklFTEQkID0gc3ViZXhwKEhGTkFNRSQgKyBcIlxcXFw9XCIgKyBIRlZBTFVFJCksIEhGSUVMRFMyJCA9IHN1YmV4cChIRklFTEQkICsgc3ViZXhwKFwiXFxcXCZcIiArIEhGSUVMRCQpICsgXCIqXCIpLCBIRklFTERTJCA9IHN1YmV4cChcIlxcXFw/XCIgKyBIRklFTERTMiQpLCBNQUlMVE9fVVJJID0gVVJJLlZBTElEQVRFX1NVUFBPUlQgJiYgbmV3IFJlZ0V4cChcIl5tYWlsdG9cXFxcOlwiICsgVE8kICsgXCI/XCIgKyBIRklFTERTJCArIFwiPyRcIiksIFVOUkVTRVJWRUQgPSBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpLCBQQ1RfRU5DT0RFRCA9IG5ldyBSZWdFeHAoUENUX0VOQ09ERUQkLCBcImdcIiksIE5PVF9MT0NBTF9QQVJUID0gbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBVEVYVCQkLCBcIltcXFxcLl1cIiwgJ1tcXFxcXCJdJywgVkNIQVIkJCksIFwiZ1wiKSwgTk9UX0RPTUFJTiA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQVRFWFQkJCwgXCJbXFxcXC5dXCIsIFwiW1xcXFxbXVwiLCBEVEVYVF9OT19PQlMkJCwgXCJbXFxcXF1dXCIpLCBcImdcIiksIE5PVF9IRk5BTUUgPSBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIFVOUkVTRVJWRUQkJCwgU09NRV9ERUxJTVMkJCksIFwiZ1wiKSwgTk9UX0hGVkFMVUUgPSBOT1RfSEZOQU1FLCBUTyA9IFVSSS5WQUxJREFURV9TVVBQT1JUICYmIG5ldyBSZWdFeHAoXCJeXCIgKyBUTyQgKyBcIiRcIiksIEhGSUVMRFMgPSBVUkkuVkFMSURBVEVfU1VQUE9SVCAmJiBuZXcgUmVnRXhwKFwiXlwiICsgSEZJRUxEUzIkICsgXCIkXCIpO1xyXG4gICAgZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZChzdHIpIHtcclxuICAgICAgICB2YXIgZGVjU3RyID0gVVJJLnBjdERlY0NoYXJzKHN0cik7XHJcbiAgICAgICAgcmV0dXJuICghZGVjU3RyLm1hdGNoKFVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IChvYmogaW5zdGFuY2VvZiBBcnJheSAmJiAhb2JqLmNhbGxlZSA/IG9iaiA6ICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gXCJudW1iZXJcIiB8fCBvYmouc3BsaXQgfHwgb2JqLnNldEludGVydmFsIHx8IG9iai5jYWxsID8gW29ial0gOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopKSkgOiBbXTtcclxuICAgIH1cclxuICAgIFVSSS5TQ0hFTUVTW1wibWFpbHRvXCJdID0ge1xyXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoVVJJLlZBTElEQVRFX1NVUFBPUlQgJiYgIWNvbXBvbmVudHMuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzLnBhdGggJiYgIVRPLnRlc3QoY29tcG9uZW50cy5wYXRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBcIkVtYWlsIGFkZHJlc3MgaXMgbm90IHZhbGlkXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wb25lbnRzLnF1ZXJ5ICYmICFIRklFTERTLnRlc3QoY29tcG9uZW50cy5xdWVyeSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gXCJIZWFkZXIgZmllbGRzIGFyZSBpbnZhbGlkXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRvID0gY29tcG9uZW50cy50byA9IChjb21wb25lbnRzLnBhdGggPyBjb21wb25lbnRzLnBhdGguc3BsaXQoXCIsXCIpIDogW10pO1xyXG4gICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkhlYWRlcnMgPSBmYWxzZSwgaGVhZGVycyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdmFyIGhmaWVsZHMgPSBjb21wb25lbnRzLnF1ZXJ5LnNwbGl0KFwiJlwiKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwLCB4bCA9IGhmaWVsZHMubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoZmllbGQgPSBoZmllbGRzW3hdLnNwbGl0KFwiPVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGhmaWVsZFswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidG9cIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b0FkZHJzID0gaGZpZWxkWzFdLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHhfMSA9IDAsIHhsXzEgPSB0b0FkZHJzLmxlbmd0aDsgeF8xIDwgeGxfMTsgKyt4XzEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0by5wdXNoKHRvQWRkcnNbeF8xXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN1YmplY3RcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuc3ViamVjdCA9IFVSSS51bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib2R5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmJvZHkgPSBVUkkudW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkhlYWRlcnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tVUkkudW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzBdLCBvcHRpb25zKV0gPSBVUkkudW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duSGVhZGVycylcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmhlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwLCB4bCA9IHRvLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhZGRyID0gdG9beF0uc3BsaXQoXCJAXCIpO1xyXG4gICAgICAgICAgICAgICAgYWRkclswXSA9IFVSSS51bmVzY2FwZUNvbXBvbmVudChhZGRyWzBdKTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHVueWNvZGUgIT09IFwidW5kZWZpbmVkXCIgJiYgIW9wdGlvbnMudW5pY29kZVN1cHBvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkclsxXSA9IHB1bnljb2RlLnRvQVNDSUkoVVJJLnVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6IFwiICsgZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRyWzFdID0gVVJJLnVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0b1t4XSA9IGFkZHIuam9pbihcIkBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIChjb21wb25lbnRzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciB0byA9IHRvQXJyYXkoY29tcG9uZW50cy50byk7XHJcbiAgICAgICAgICAgIGlmICh0bykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDAsIHhsID0gdG8ubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0b0FkZHIgPSBTdHJpbmcodG9beF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdElkeCA9IHRvQWRkci5sYXN0SW5kZXhPZihcIkBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FsUGFydCA9IHRvQWRkci5zbGljZSgwLCBhdElkeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRvbWFpbiA9IHRvQWRkci5zbGljZShhdElkeCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsUGFydCA9IGxvY2FsUGFydC5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfTE9DQUxfUEFSVCwgVVJJLnBjdEVuY0NoYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHVueWNvZGUgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKFVSSS51bmVzY2FwZUNvbXBvbmVudChkb21haW4sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCkpIDogcHVueWNvZGUudG9Vbmljb2RlKGRvbWFpbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBcIiArICghb3B0aW9ucy5pcmkgPyBcIkFTQ0lJXCIgOiBcIlVuaWNvZGVcIikgKyBcIiB2aWEgcHVueWNvZGU6IFwiICsgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZG9tYWluLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0RPTUFJTiwgVVJJLnBjdEVuY0NoYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0b1t4XSA9IGxvY2FsUGFydCArIFwiQFwiICsgZG9tYWluO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gdG8uam9pbihcIixcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSBjb21wb25lbnRzLmhlYWRlcnMgPSBjb21wb25lbnRzLmhlYWRlcnMgfHwge307XHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLnN1YmplY3QpXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzW1wic3ViamVjdFwiXSA9IGNvbXBvbmVudHMuc3ViamVjdDtcclxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMuYm9keSlcclxuICAgICAgICAgICAgICAgIGhlYWRlcnNbXCJib2R5XCJdID0gY29tcG9uZW50cy5ib2R5O1xyXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWVfMSBpbiBoZWFkZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyc1tuYW1lXzFdICE9PSBPW25hbWVfMV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaChuYW1lXzEucmVwbGFjZShQQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0hGTkFNRSwgVVJJLnBjdEVuY0NoYXIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCI9XCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW25hbWVfMV0ucmVwbGFjZShQQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0hGVkFMVUUsIFVSSS5wY3RFbmNDaGFyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSBmaWVsZHMuam9pbihcIiZcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSkoKTtcclxuIiwiLy8vPHJlZmVyZW5jZSBwYXRoPVwiLi4vdXJpLnRzXCIvPlxyXG5pZiAodHlwZW9mIENPTVBJTEVEID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkkgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIilcclxuICAgIHZhciBVUkkgPSByZXF1aXJlKFwiLi4vdXJpXCIpO1xyXG4oZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHBjdEVuY0NoYXIgPSBVUkkucGN0RW5jQ2hhciwgTklEJCA9IFwiKD86WzAtOUEtWmEtel1bMC05QS1aYS16XFxcXC1dezEsMzF9KVwiLCBQQ1RfRU5DT0RFRCQgPSBcIig/OlxcXFwlWzAtOUEtRmEtZl17Mn0pXCIsIFRSQU5TJCQgPSBcIlswLTlBLVphLXpcXFxcKFxcXFwpXFxcXCtcXFxcLFxcXFwtXFxcXC5cXFxcOlxcXFw9XFxcXEBcXFxcO1xcXFwkXFxcXF9cXFxcIVxcXFwqXFxcXCdcXFxcL1xcXFw/XFxcXCNdXCIsIE5TUyQgPSBcIig/Oig/OlwiICsgUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBUUkFOUyQkICsgXCIpKylcIiwgVVJOX1NDSEVNRSA9IG5ldyBSZWdFeHAoXCJedXJuXFxcXDooXCIgKyBOSUQkICsgXCIpJFwiKSwgVVJOX1BBVEggPSBuZXcgUmVnRXhwKFwiXihcIiArIE5JRCQgKyBcIilcXFxcOihcIiArIE5TUyQgKyBcIikkXCIpLCBVUk5fUEFSU0UgPSAvXihbXlxcOl0rKVxcOiguKikvLCBVUk5fRVhDTFVERUQgPSAvW1xceDAwLVxceDIwXFxcXFxcXCJcXCZcXDxcXD5cXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5cXHg3Ri1cXHhGRl0vZywgVVVJRCA9IC9eWzAtOUEtRmEtZl17OH0oPzpcXC1bMC05QS1GYS1mXXs0fSl7M31cXC1bMC05QS1GYS1mXXsxMn0kLztcclxuICAgIC8vUkZDIDIxNDFcclxuICAgIFVSSS5TQ0hFTUVTW1widXJuXCJdID0ge1xyXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGNvbXBvbmVudHMucGF0aC5tYXRjaChVUk5fUEFUSCksIHNjaGVtZSwgc2NoZW1lSGFuZGxlcjtcclxuICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMudG9sZXJhbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIlVSTiBpcyBub3Qgc3RyaWN0bHkgdmFsaWQuXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBtYXRjaGVzID0gY29tcG9uZW50cy5wYXRoLm1hdGNoKFVSTl9QQVJTRSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtZSA9IFwidXJuOlwiICsgbWF0Y2hlc1sxXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgc2NoZW1lSGFuZGxlciA9IFVSSS5TQ0hFTUVTW3NjaGVtZV07XHJcbiAgICAgICAgICAgICAgICAvL2luIG9yZGVyIHRvIHNlcmlhbGl6ZSBwcm9wZXJseSwgXHJcbiAgICAgICAgICAgICAgICAvL2V2ZXJ5IFVSTiBtdXN0IGhhdmUgYSBzZXJpYWxpemVyIHRoYXQgY2FsbHMgdGhlIFVSTiBzZXJpYWxpemVyIFxyXG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWVIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jcmVhdGUgZmFrZSBzY2hlbWUgaGFuZGxlclxyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtZUhhbmRsZXIgPSBVUkkuU0NIRU1FU1tzY2hlbWVdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemU6IFVSSS5TQ0hFTUVTW1widXJuXCJdLnNlcmlhbGl6ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IHNjaGVtZTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IG1hdGNoZXNbMl07XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5wYXJzZShjb21wb25lbnRzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJOIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgICAgICB2YXIgc2NoZW1lID0gY29tcG9uZW50cy5zY2hlbWUgfHwgb3B0aW9ucy5zY2hlbWUsIG1hdGNoZXM7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWUgJiYgc2NoZW1lICE9PSBcInVyblwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHNjaGVtZS5tYXRjaChVUk5fU0NIRU1FKTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXCJ1cm46XCIgKyBzY2hlbWUsIHNjaGVtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IFwidXJuXCI7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzFdICsgXCI6XCIgKyAoY29tcG9uZW50cy5wYXRoID8gY29tcG9uZW50cy5wYXRoLnJlcGxhY2UoVVJOX0VYQ0xVREVELCBwY3RFbmNDaGFyKSA6IFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvL1JGQyA0MTIyXHJcbiAgICBVUkkuU0NIRU1FU1tcInVybjp1dWlkXCJdID0ge1xyXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoY29tcG9uZW50cywgb3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMudG9sZXJhbnQgJiYgKCFjb21wb25lbnRzLnBhdGggfHwgIWNvbXBvbmVudHMucGF0aC5tYXRjaChVVUlEKSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVVJRCBpcyBub3QgdmFsaWQuXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIChjb21wb25lbnRzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIC8vZW5zdXJlIFVVSUQgaXMgdmFsaWRcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghY29tcG9uZW50cy5wYXRoIHx8ICFjb21wb25lbnRzLnBhdGgubWF0Y2goVVVJRCkpKSB7XHJcbiAgICAgICAgICAgICAgICAvL2ludmFsaWQgVVVJRHMgY2FuIG5vdCBoYXZlIHRoaXMgc2NoZW1lXHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplIFVVSURcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IChjb21wb25lbnRzLnBhdGggfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gVVJJLlNDSEVNRVNbXCJ1cm5cIl0uc2VyaWFsaXplKGNvbXBvbmVudHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0oKSk7XHJcbiIsIi8qKlxyXG4gKiBVUkkuanNcclxuICpcclxuICogQGZpbGVvdmVydmlldyBBbiBSRkMgMzk4NiBjb21wbGlhbnQsIHNjaGVtZSBleHRlbmRhYmxlIFVSSSBwYXJzaW5nL3ZhbGlkYXRpbmcvcmVzb2x2aW5nIGxpYnJhcnkgZm9yIEphdmFTY3JpcHQuXHJcbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzpnYXJ5LmNvdXJ0QGdtYWlsLmNvbVwiPkdhcnkgQ291cnQ8L2E+XHJcbiAqIEB2ZXJzaW9uIDIuMC4wXHJcbiAqIEBzZWUgaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qc1xyXG4gKiBAbGljZW5zZSBVUkkuanMgdjIuMC4wIChjKSAyMDExIEdhcnkgQ291cnQuIExpY2Vuc2U6IGh0dHA6Ly9naXRodWIuY29tL2dhcnljb3VydC91cmktanNcclxuICovXHJcbi8qKlxyXG4gKiBDb3B5cmlnaHQgMjAxMSBHYXJ5IENvdXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKlxyXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmVcclxuICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcbiAqXHJcbiAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mXHJcbiAqICAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICpcclxuICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3RcclxuICogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHNcclxuICogICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG4gKlxyXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdBUlkgQ09VUlQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEXHJcbiAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkRcclxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdBUlkgQ09VUlQgT1JcclxuICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcclxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxyXG4gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcclxuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGXHJcbiAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxyXG4gKlxyXG4gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZVxyXG4gKiBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZFxyXG4gKiBvciBpbXBsaWVkLCBvZiBHYXJ5IENvdXJ0LlxyXG4gKi9cclxuLy8vPHJlZmVyZW5jZSBwYXRoPVwicHVueWNvZGUuZC50c1wiLz5cclxuLy8vPHJlZmVyZW5jZSBwYXRoPVwiY29tbW9uanMuZC50c1wiLz5cclxuLyoqXHJcbiAqIENvbXBpbGVyIHN3aXRjaCBmb3IgaW5kaWNhdGluZyBjb2RlIGlzIGNvbXBpbGVkXHJcbiAqIEBkZWZpbmUge2Jvb2xlYW59XHJcbiAqL1xyXG52YXIgQ09NUElMRUQgPSBmYWxzZTtcclxuLyoqXHJcbiAqIENvbXBpbGVyIHN3aXRjaCBmb3Igc3VwcG9ydGluZyBJUkkgVVJJc1xyXG4gKiBAZGVmaW5lIHtib29sZWFufVxyXG4gKi9cclxudmFyIFVSSV9fSVJJX1NVUFBPUlQgPSB0cnVlO1xyXG4vKipcclxuICogQ29tcGlsZXIgc3dpdGNoIGZvciBzdXBwb3J0aW5nIFVSSSB2YWxpZGF0aW9uXHJcbiAqIEBkZWZpbmUge2Jvb2xlYW59XHJcbiAqL1xyXG52YXIgVVJJX19WQUxJREFURV9TVVBQT1JUID0gdHJ1ZTtcclxudmFyIFVSSSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBtZXJnZSgpIHtcclxuICAgICAgICB2YXIgc2V0cyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHNldHNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgc2V0c1swXSA9IHNldHNbMF0uc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgICB2YXIgeGwgPSBzZXRzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAxOyB4IDwgeGw7ICsreCkge1xyXG4gICAgICAgICAgICAgICAgc2V0c1t4XSA9IHNldHNbeF0uc2xpY2UoMSwgLTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldHNbeGxdID0gc2V0c1t4bF0uc2xpY2UoMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRzLmpvaW4oJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNldHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc3ViZXhwKHN0cikge1xyXG4gICAgICAgIHJldHVybiBcIig/OlwiICsgc3RyICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBidWlsZEV4cHMoaXNJUkkpIHtcclxuICAgICAgICB2YXIgQUxQSEEkJCA9IFwiW0EtWmEtel1cIiwgQ1IkID0gXCJbXFxcXHgwRF1cIiwgRElHSVQkJCA9IFwiWzAtOV1cIiwgRFFVT1RFJCQgPSBcIltcXFxceDIyXVwiLCBIRVhESUckJCA9IG1lcmdlKERJR0lUJCQsIFwiW0EtRmEtZl1cIiksIExGJCQgPSBcIltcXFxceDBBXVwiLCBTUCQkID0gXCJbXFxcXHgyMF1cIiwgUENUX0VOQ09ERUQkID0gc3ViZXhwKHN1YmV4cChcIiVbRUZlZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVs4OUEtRmEtZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkpLCBHRU5fREVMSU1TJCQgPSBcIltcXFxcOlxcXFwvXFxcXD9cXFxcI1xcXFxbXFxcXF1cXFxcQF1cIiwgU1VCX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwmXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcPV1cIiwgUkVTRVJWRUQkJCA9IG1lcmdlKEdFTl9ERUxJTVMkJCwgU1VCX0RFTElNUyQkKSwgVUNTQ0hBUiQkID0gaXNJUkkgPyBcIltcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZdXCIgOiBcIltdXCIsIElQUklWQVRFJCQgPSBpc0lSSSA/IFwiW1xcXFx1RTAwMC1cXFxcdUY4RkZdXCIgOiBcIltdXCIsIFVOUkVTRVJWRUQkJCA9IG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwtXFxcXC5cXFxcX1xcXFx+XVwiLCBVQ1NDSEFSJCQpLCBTQ0hFTUUkID0gc3ViZXhwKEFMUEhBJCQgKyBtZXJnZShBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpICsgXCIqXCIpLCBVU0VSSU5GTyQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSkgKyBcIipcIiksIERFQ19PQ1RFVCQgPSBzdWJleHAoc3ViZXhwKFwiMjVbMC01XVwiKSArIFwifFwiICsgc3ViZXhwKFwiMlswLTRdXCIgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMVwiICsgRElHSVQkJCArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCJbMS05XVwiICsgRElHSVQkJCkgKyBcInxcIiArIERJR0lUJCQpLCBJUFY0QUREUkVTUyQgPSBzdWJleHAoREVDX09DVEVUJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUJCksIEgxNiQgPSBzdWJleHAoSEVYRElHJCQgKyBcInsxLDR9XCIpLCBMUzMyJCA9IHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIiArIEgxNiQpICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQpLCBJUFY2QUREUkVTUyQgPSBzdWJleHAobWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSArIFwiK1wiKSwgSVBWRlVUVVJFJCA9IHN1YmV4cChcInZcIiArIEhFWERJRyQkICsgXCIrXFxcXC5cIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOl1cIikgKyBcIitcIiksIElQX0xJVEVSQUwkID0gc3ViZXhwKFwiXFxcXFtcIiArIHN1YmV4cChJUFY2QUREUkVTUyQgKyBcInxcIiArIElQVkZVVFVSRSQpICsgXCJcXFxcXVwiKSwgUkVHX05BTUUkID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSkgKyBcIipcIiksIEhPU1QkID0gc3ViZXhwKElQX0xJVEVSQUwkICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQgKyBcIig/IVwiICsgUkVHX05BTUUkICsgXCIpXCIgKyBcInxcIiArIFJFR19OQU1FJCksIFBPUlQkID0gc3ViZXhwKERJR0lUJCQgKyBcIipcIiksIEFVVEhPUklUWSQgPSBzdWJleHAoc3ViZXhwKFVTRVJJTkZPJCArIFwiQFwiKSArIFwiP1wiICsgSE9TVCQgKyBzdWJleHAoXCJcXFxcOlwiICsgUE9SVCQpICsgXCI/XCIpLCBQQ0hBUiQgPSBzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQF1cIikpLCBTRUdNRU5UJCA9IHN1YmV4cChQQ0hBUiQgKyBcIipcIiksIFNFR01FTlRfTlokID0gc3ViZXhwKFBDSEFSJCArIFwiK1wiKSwgU0VHTUVOVF9OWl9OQyQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFxAXVwiKSkgKyBcIitcIiksIFBBVEhfQUJFTVBUWSQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cIiArIFNFR01FTlQkKSArIFwiKlwiKSwgUEFUSF9BQlNPTFVURSQgPSBzdWJleHAoXCJcXFxcL1wiICsgc3ViZXhwKFNFR01FTlRfTlokICsgUEFUSF9BQkVNUFRZJCkgKyBcIj9cIiksIFBBVEhfTk9TQ0hFTUUkID0gc3ViZXhwKFNFR01FTlRfTlpfTkMkICsgUEFUSF9BQkVNUFRZJCksIFBBVEhfUk9PVExFU1MkID0gc3ViZXhwKFNFR01FTlRfTlokICsgUEFUSF9BQkVNUFRZJCksIFBBVEhfRU1QVFkkID0gXCIoPyFcIiArIFBDSEFSJCArIFwiKVwiLCBQQVRIJCA9IHN1YmV4cChQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksIFFVRVJZJCA9IHN1YmV4cChzdWJleHAoUENIQVIkICsgXCJ8XCIgKyBtZXJnZShcIltcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSkgKyBcIipcIiksIEZSQUdNRU5UJCA9IHN1YmV4cChzdWJleHAoUENIQVIkICsgXCJ8W1xcXFwvXFxcXD9dXCIpICsgXCIqXCIpLCBISUVSX1BBUlQkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC9cIiArIEFVVEhPUklUWSQgKyBQQVRIX0FCRU1QVFkkKSArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksIFVSSSQgPSBzdWJleHAoU0NIRU1FJCArIFwiXFxcXDpcIiArIEhJRVJfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCNcIiArIEZSQUdNRU5UJCkgKyBcIj9cIiksIFJFTEFUSVZFX1BBUlQkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC9cIiArIEFVVEhPUklUWSQgKyBQQVRIX0FCRU1QVFkkKSArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksIFJFTEFUSVZFJCA9IHN1YmV4cChSRUxBVElWRV9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSwgVVJJX1JFRkVSRU5DRSQgPSBzdWJleHAoVVJJJCArIFwifFwiICsgUkVMQVRJVkUkKSwgQUJTT0xVVEVfVVJJJCA9IHN1YmV4cChTQ0hFTUUkICsgXCJcXFxcOlwiICsgSElFUl9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIpLCBHRU5FUklDX1JFRiQgPSBcIl4oXCIgKyBTQ0hFTUUkICsgXCIpXFxcXDpcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsIFJFTEFUSVZFX1JFRiQgPSBcIl4oKXswfVwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIiwgQUJTT0xVVEVfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/JFwiLCBTQU1FRE9DX1JFRiQgPSBcIl5cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLCBBVVRIT1JJVFlfUkVGJCA9IFwiXlwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/JFwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFVSSV9SRUY6IFVSSV9fVkFMSURBVEVfU1VQUE9SVCAmJiBuZXcgUmVnRXhwKFwiKFwiICsgR0VORVJJQ19SRUYkICsgXCIpfChcIiArIFJFTEFUSVZFX1JFRiQgKyBcIilcIiksXHJcbiAgICAgICAgICAgIE5PVF9TQ0hFTUU6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXCtcXFxcLVxcXFwuXVwiKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfVVNFUklORk86IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXDpdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfSE9TVDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfUEFUSDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFw6XFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfUEFUSF9OT1NDSEVNRTogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFxAXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcclxuICAgICAgICAgICAgTk9UX1FVRVJZOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJV1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSwgXCJnXCIpLFxyXG4gICAgICAgICAgICBOT1RfRlJBR01FTlQ6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIpLCBcImdcIiksXHJcbiAgICAgICAgICAgIEVTQ0FQRTogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcclxuICAgICAgICAgICAgVU5SRVNFUlZFRDogbmV3IFJlZ0V4cChVTlJFU0VSVkVEJCQsIFwiZ1wiKSxcclxuICAgICAgICAgICAgT1RIRVJfQ0hBUlM6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFJFU0VSVkVEJCQpLCBcImdcIiksXHJcbiAgICAgICAgICAgIFBDVF9FTkNPREVEOiBuZXcgUmVnRXhwKFBDVF9FTkNPREVEJCwgXCJnXCIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHZhciBVUklfUFJPVE9DT0wgPSBidWlsZEV4cHMoZmFsc2UpLCBJUklfUFJPVE9DT0wgPSBVUklfX0lSSV9TVVBQT1JUID8gYnVpbGRFeHBzKHRydWUpIDogdW5kZWZpbmVkLCBVUklfUEFSU0UgPSAvXig/OihbXjpcXC8/I10rKTopPyg/OlxcL1xcLygoPzooW15cXC8/I0BdKilAKT8oW15cXC8/IzpdKikoPzpcXDooXFxkKikpPykpPyhbXj8jXSopKD86XFw/KFteI10qKSk/KD86IygoPzoufFxcbikqKSk/L2ksIFJEUzEgPSAvXlxcLlxcLj9cXC8vLCBSRFMyID0gL15cXC9cXC4oXFwvfCQpLywgUkRTMyA9IC9eXFwvXFwuXFwuKFxcL3wkKS8sIFJEUzQgPSAvXlxcLlxcLj8kLywgUkRTNSA9IC9eXFwvPyg/Oi58XFxuKSo/KD89XFwvfCQpLywgTk9fTUFUQ0hfSVNfVU5ERUZJTkVEID0gKFwiXCIpLm1hdGNoKC8oKXswfS8pWzFdID09PSB1bmRlZmluZWQ7XHJcbiAgICBmdW5jdGlvbiBwY3RFbmNDaGFyKGNocikge1xyXG4gICAgICAgIHZhciBjID0gY2hyLmNoYXJDb2RlQXQoMCksIGU7XHJcbiAgICAgICAgaWYgKGMgPCAxNilcclxuICAgICAgICAgICAgZSA9IFwiJTBcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgZWxzZSBpZiAoYyA8IDEyOClcclxuICAgICAgICAgICAgZSA9IFwiJVwiICsgYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBlbHNlIGlmIChjIDwgMjA0OClcclxuICAgICAgICAgICAgZSA9IFwiJVwiICsgKChjID4+IDYpIHwgMTkyKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKChjICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGUgPSBcIiVcIiArICgoYyA+PiAxMikgfCAyMjQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoKChjID4+IDYpICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKChjICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHBjdERlY0NoYXJzKHN0cikge1xyXG4gICAgICAgIHZhciBuZXdTdHIgPSBcIlwiLCBpID0gMCwgaWwgPSBzdHIubGVuZ3RoLCBjLCBjMiwgYzM7XHJcbiAgICAgICAgd2hpbGUgKGkgPCBpbCkge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgMSwgMiksIDE2KTtcclxuICAgICAgICAgICAgaWYgKGMgPCAxMjgpIHtcclxuICAgICAgICAgICAgICAgIG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xyXG4gICAgICAgICAgICAgICAgaSArPSAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMTk0ICYmIGMgPCAyMjQpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoaWwgLSBpKSA+PSA2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYzIgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA0LCAyKSwgMTYpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDMxKSA8PCA2KSB8IChjMiAmIDYzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGkgKz0gNjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjID49IDIyNCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChpbCAtIGkpID49IDkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjMiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDQsIDIpLCAxNik7XHJcbiAgICAgICAgICAgICAgICAgICAgYzMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA3LCAyKSwgMTYpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDE1KSA8PCAxMikgfCAoKGMyICYgNjMpIDw8IDYpIHwgKGMzICYgNjMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaSArPSA5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3U3RyICs9IHN0ci5zdWJzdHIoaSwgMyk7XHJcbiAgICAgICAgICAgICAgICBpICs9IDM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld1N0cjtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHR5cGVPZihvKSB7XHJcbiAgICAgICAgcmV0dXJuIG8gPT09IHVuZGVmaW5lZCA/IFwidW5kZWZpbmVkXCIgOiAobyA9PT0gbnVsbCA/IFwibnVsbFwiIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNwbGl0KFwiIFwiKS5wb3AoKS5zcGxpdChcIl1cIikuc2hpZnQoKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRvVXBwZXJDYXNlKHN0cikge1xyXG4gICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuICAgIHZhciBTQ0hFTUVTID0ge307XHJcbiAgICBmdW5jdGlvbiBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpIHtcclxuICAgICAgICBmdW5jdGlvbiBkZWNvZGVVbnJlc2VydmVkKHN0cikge1xyXG4gICAgICAgICAgICB2YXIgZGVjU3RyID0gcGN0RGVjQ2hhcnMoc3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuICghZGVjU3RyLm1hdGNoKHByb3RvY29sLlVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMuc2NoZW1lKVxyXG4gICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IFN0cmluZyhjb21wb25lbnRzLnNjaGVtZSkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHByb3RvY29sLk5PVF9TQ0hFTUUsIFwiXCIpO1xyXG4gICAgICAgIGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMudXNlcmluZm8gPSBTdHJpbmcoY29tcG9uZW50cy51c2VyaW5mbykucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfVVNFUklORk8sIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcclxuICAgICAgICBpZiAoY29tcG9uZW50cy5ob3N0ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IFN0cmluZyhjb21wb25lbnRzLmhvc3QpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfSE9TVCwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xyXG4gICAgICAgIGlmIChjb21wb25lbnRzLnBhdGggIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gU3RyaW5nKGNvbXBvbmVudHMucGF0aCkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZSgoY29tcG9uZW50cy5zY2hlbWUgPyBwcm90b2NvbC5OT1RfUEFUSCA6IHByb3RvY29sLk5PVF9QQVRIX05PU0NIRU1FKSwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xyXG4gICAgICAgIGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSBTdHJpbmcoY29tcG9uZW50cy5xdWVyeSkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfUVVFUlksIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcclxuICAgICAgICBpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBjb21wb25lbnRzLmZyYWdtZW50ID0gU3RyaW5nKGNvbXBvbmVudHMuZnJhZ21lbnQpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0ZSQUdNRU5ULCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiBwYXJzZSh1cmlTdHJpbmcsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgICAgIHZhciBwcm90b2NvbCA9IChVUklfX0lSSV9TVVBQT1JUICYmIG9wdGlvbnMuaXJpICE9PSBmYWxzZSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCksIG1hdGNoZXMsIHBhcnNlRXJyb3IgPSBmYWxzZSwgY29tcG9uZW50cyA9IHt9LCBzY2hlbWVIYW5kbGVyO1xyXG4gICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSA9PT0gXCJzdWZmaXhcIilcclxuICAgICAgICAgICAgdXJpU3RyaW5nID0gKG9wdGlvbnMuc2NoZW1lID8gb3B0aW9ucy5zY2hlbWUgKyBcIjpcIiA6IFwiXCIpICsgXCIvL1wiICsgdXJpU3RyaW5nO1xyXG4gICAgICAgIGlmIChVUklfX1ZBTElEQVRFX1NVUFBPUlQpIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IHVyaVN0cmluZy5tYXRjaChwcm90b2NvbC5VUklfUkVGKTtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzWzFdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9nZW5lcmljIFVSSVxyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBtYXRjaGVzLnNsaWNlKDEsIDEwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcmVsYXRpdmUgVVJJXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMuc2xpY2UoMTAsIDE5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnRvbGVyYW50KVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGlzIG5vdCBzdHJpY3RseSB2YWxpZC5cIjtcclxuICAgICAgICAgICAgICAgIG1hdGNoZXMgPSB1cmlTdHJpbmcubWF0Y2goVVJJX1BBUlNFKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IHVyaVN0cmluZy5tYXRjaChVUklfUEFSU0UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICAgICAgICBpZiAoTk9fTUFUQ0hfSVNfVU5ERUZJTkVEKSB7XHJcbiAgICAgICAgICAgICAgICAvL3N0b3JlIGVhY2ggY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IG1hdGNoZXNbMV07XHJcbiAgICAgICAgICAgICAgICAvL2NvbXBvbmVudHMuYXV0aG9yaXR5ID0gbWF0Y2hlc1syXTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMudXNlcmluZm8gPSBtYXRjaGVzWzNdO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gbWF0Y2hlc1s0XTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IG1hdGNoZXNbNl0gfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSBtYXRjaGVzWzddO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5mcmFnbWVudCA9IG1hdGNoZXNbOF07XHJcbiAgICAgICAgICAgICAgICAvL2ZpeCBwb3J0IG51bWJlclxyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBvbmVudHMucG9ydCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSBtYXRjaGVzWzVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9zdG9yZSBlYWNoIGNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIC8vY29tcG9uZW50cy5hdXRob3JpdHkgPSAodXJpU3RyaW5nLmluZGV4T2YoXCIvL1wiKSAhPT0gLTEgPyBtYXRjaGVzWzJdIDogdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMudXNlcmluZm8gPSAodXJpU3RyaW5nLmluZGV4T2YoXCJAXCIpICE9PSAtMSA/IG1hdGNoZXNbM10gOiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiLy9cIikgIT09IC0xID8gbWF0Y2hlc1s0XSA6IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzZdIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnF1ZXJ5ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiP1wiKSAhPT0gLTEgPyBtYXRjaGVzWzddIDogdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZnJhZ21lbnQgPSAodXJpU3RyaW5nLmluZGV4T2YoXCIjXCIpICE9PSAtMSA/IG1hdGNoZXNbOF0gOiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgLy9maXggcG9ydCBudW1iZXJcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gKHVyaVN0cmluZy5tYXRjaCgvXFwvXFwvKD86LnxcXG4pKlxcOig/OlxcL3xcXD98XFwjfCQpLykgPyBtYXRjaGVzWzRdIDogdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2RldGVybWluZSByZWZlcmVuY2UgdHlwZVxyXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLnVzZXJpbmZvID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5ob3N0ID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5wb3J0ID09PSB1bmRlZmluZWQgJiYgIWNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnF1ZXJ5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJzYW1lLWRvY3VtZW50XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50cy5zY2hlbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5yZWZlcmVuY2UgPSBcInJlbGF0aXZlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50cy5mcmFnbWVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJ1cmlcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2NoZWNrIGZvciByZWZlcmVuY2UgZXJyb3JzXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAmJiBvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIiAmJiBvcHRpb25zLnJlZmVyZW5jZSAhPT0gY29tcG9uZW50cy5yZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGlzIG5vdCBhIFwiICsgb3B0aW9ucy5yZWZlcmVuY2UgKyBcIiByZWZlcmVuY2UuXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9maW5kIHNjaGVtZSBoYW5kbGVyXHJcbiAgICAgICAgICAgIHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTWyhvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnRzLnNjaGVtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgICAgLy9jaGVjayBpZiBzY2hlbWUgY2FuJ3QgaGFuZGxlIElSSXNcclxuICAgICAgICAgICAgaWYgKFVSSV9fSVJJX1NVUFBPUlQgJiYgdHlwZW9mIHB1bnljb2RlICE9PSBcInVuZGVmaW5lZFwiICYmICFvcHRpb25zLnVuaWNvZGVTdXBwb3J0ICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci51bmljb2RlU3VwcG9ydCkpIHtcclxuICAgICAgICAgICAgICAgIC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMuaG9zdCAmJiAob3B0aW9ucy5kb21haW5Ib3N0IHx8IChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuZG9tYWluSG9zdCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IHB1bnljb2RlLnRvQVNDSUkoY29tcG9uZW50cy5ob3N0LnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHBjdERlY0NoYXJzKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gQVNDSUkgdmlhIHB1bnljb2RlOiBcIiArIGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IElSSSAtPiBVUklcclxuICAgICAgICAgICAgICAgIF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBVUklfUFJPVE9DT0wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9ub3JtYWxpemUgZW5jb2RpbmdzXHJcbiAgICAgICAgICAgICAgICBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgcGFyc2luZ1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnBhcnNlKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWVIYW5kbGVyLnBhcnNlKGNvbXBvbmVudHMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUkkgY2FuIG5vdCBiZSBwYXJzZWQuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gICAgfVxyXG4gICAgO1xyXG4gICAgZnVuY3Rpb24gX3JlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnRzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIHVyaVRva2VucyA9IFtdO1xyXG4gICAgICAgIGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy51c2VyaW5mbyk7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKFwiQFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMuaG9zdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcclxuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5wb3J0LnRvU3RyaW5nKDEwKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmlUb2tlbnMubGVuZ3RoID8gdXJpVG9rZW5zLmpvaW4oXCJcIikgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyhpbnB1dCkge1xyXG4gICAgICAgIHZhciBvdXRwdXQgPSBbXSwgcztcclxuICAgICAgICB3aGlsZSAoaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5tYXRjaChSRFMxKSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKFJEUzEsIFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzIpKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMiwgXCIvXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzMpKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMywgXCIvXCIpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0ID09PSBcIi5cIiB8fCBpbnB1dCA9PT0gXCIuLlwiKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzID0gaW5wdXQubWF0Y2goUkRTNSlbMF07XHJcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKHMubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvdXRwdXQuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIDtcclxuICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZShjb21wb25lbnRzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgICAgICB2YXIgcHJvdG9jb2wgPSAoVVJJX19JUklfU1VQUE9SVCAmJiBvcHRpb25zLmlyaSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCksIHVyaVRva2VucyA9IFtdLCBzY2hlbWVIYW5kbGVyLCBhdXRob3JpdHksIHM7XHJcbiAgICAgICAgLy9maW5kIHNjaGVtZSBoYW5kbGVyXHJcbiAgICAgICAgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgIC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxyXG4gICAgICAgIGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKVxyXG4gICAgICAgICAgICBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZShjb21wb25lbnRzLCBvcHRpb25zKTtcclxuICAgICAgICAvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcclxuICAgICAgICBpZiAoVVJJX19JUklfU1VQUE9SVCAmJiB0eXBlb2YgcHVueWNvZGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29tcG9uZW50cy5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkpIHtcclxuICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoY29tcG9uZW50cy5ob3N0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vbm9ybWFsaXplIGVuY29kaW5nXHJcbiAgICAgICAgX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIHByb3RvY29sKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgY29tcG9uZW50cy5zY2hlbWUpIHtcclxuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5zY2hlbWUpO1xyXG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIjpcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF1dGhvcml0eSA9IF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50cywgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKGF1dGhvcml0eSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIikge1xyXG4gICAgICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goXCIvL1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChhdXRob3JpdHkpO1xyXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucGF0aC5jaGFyQXQoMCkgIT09IFwiL1wiKSB7XHJcbiAgICAgICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIi9cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHMgPSBjb21wb25lbnRzLnBhdGg7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hYnNvbHV0ZVBhdGggJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLmFic29sdXRlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIHMgPSByZW1vdmVEb3RTZWdtZW50cyhzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoL15cXC9cXC8vLCBcIi8lMkZcIik7IC8vZG9uJ3QgYWxsb3cgdGhlIHBhdGggdG8gc3RhcnQgd2l0aCBcIi8vXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIj9cIik7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMucXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKFwiI1wiKTtcclxuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5mcmFnbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmlUb2tlbnMuam9pbignJyk7IC8vbWVyZ2UgdG9rZW5zIGludG8gYSBzdHJpbmdcclxuICAgIH1cclxuICAgIDtcclxuICAgIGZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnRzKGJhc2UsIHJlbGF0aXZlLCBvcHRpb25zLCBza2lwTm9ybWFsaXphdGlvbikge1xyXG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHt9O1xyXG4gICAgICAgIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcclxuICAgICAgICAgICAgYmFzZSA9IHBhcnNlKHNlcmlhbGl6ZShiYXNlLCBvcHRpb25zKSwgb3B0aW9ucyk7IC8vbm9ybWFsaXplIGJhc2UgY29tcG9uZW50c1xyXG4gICAgICAgICAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpOyAvL25vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcclxuICAgICAgICAgICAgdGFyZ2V0LnNjaGVtZSA9IHJlbGF0aXZlLnNjaGVtZTtcclxuICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xyXG4gICAgICAgICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcclxuICAgICAgICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0O1xyXG4gICAgICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XHJcbiAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJlbGF0aXZlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLnBvcnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnVzZXJpbmZvID0gcmVsYXRpdmUudXNlcmluZm87XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3Q7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlbGF0aXZlLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVsYXRpdmUucXVlcnkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IGJhc2UucXVlcnk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGF0aXZlLnBhdGguY2hhckF0KDApID09PSBcIi9cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiYXNlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgYmFzZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgYmFzZS5wb3J0ICE9PSB1bmRlZmluZWQpICYmICFiYXNlLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gXCIvXCIgKyByZWxhdGl2ZS5wYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKDAsIGJhc2UucGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIHJlbGF0aXZlLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyh0YXJnZXQucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Lmhvc3QgPSBiYXNlLmhvc3Q7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQucG9ydCA9IGJhc2UucG9ydDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0YXJnZXQuc2NoZW1lID0gYmFzZS5zY2hlbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhcmdldC5mcmFnbWVudCA9IHJlbGF0aXZlLmZyYWdtZW50O1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiByZXNvbHZlKGJhc2VVUkksIHJlbGF0aXZlVVJJLCBvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShyZXNvbHZlQ29tcG9uZW50cyhwYXJzZShiYXNlVVJJLCBvcHRpb25zKSwgcGFyc2UocmVsYXRpdmVVUkksIG9wdGlvbnMpLCBvcHRpb25zLCB0cnVlKSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiBub3JtYWxpemUodXJpLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgdXJpID0gc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlT2YodXJpKSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICB1cmkgPSBwYXJzZShzZXJpYWxpemUodXJpLCBvcHRpb25zKSwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiBlcXVhbCh1cmlBLCB1cmlCLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1cmlBID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHVyaUEgPSBzZXJpYWxpemUocGFyc2UodXJpQSwgb3B0aW9ucyksIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlT2YodXJpQSkgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdXJpQSA9IHNlcmlhbGl6ZSh1cmlBLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1cmlCID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHVyaUIgPSBzZXJpYWxpemUocGFyc2UodXJpQiwgb3B0aW9ucyksIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlT2YodXJpQikgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdXJpQiA9IHNlcmlhbGl6ZSh1cmlCLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVyaUEgPT09IHVyaUI7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBmdW5jdGlvbiBlc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCghVVJJX19JUklfU1VQUE9SVCB8fCAhb3B0aW9ucyB8fCAhb3B0aW9ucy5pcmkgPyBVUklfUFJPVE9DT0wuRVNDQVBFIDogSVJJX1BST1RPQ09MLkVTQ0FQRSksIHBjdEVuY0NoYXIpO1xyXG4gICAgfVxyXG4gICAgO1xyXG4gICAgZnVuY3Rpb24gdW5lc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCghVVJJX19JUklfU1VQUE9SVCB8fCAhb3B0aW9ucyB8fCAhb3B0aW9ucy5pcmkgPyBVUklfUFJPVE9DT0wuUENUX0VOQ09ERUQgOiBJUklfUFJPVE9DT0wuUENUX0VOQ09ERUQpLCBwY3REZWNDaGFycyk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIElSSV9TVVBQT1JUOiBVUklfX0lSSV9TVVBQT1JULFxyXG4gICAgICAgIFZBTElEQVRFX1NVUFBPUlQ6IFVSSV9fVkFMSURBVEVfU1VQUE9SVCxcclxuICAgICAgICBwY3RFbmNDaGFyOiBwY3RFbmNDaGFyLFxyXG4gICAgICAgIHBjdERlY0NoYXJzOiBwY3REZWNDaGFycyxcclxuICAgICAgICBTQ0hFTUVTOiBTQ0hFTUVTLFxyXG4gICAgICAgIHBhcnNlOiBwYXJzZSxcclxuICAgICAgICBfcmVjb21wb3NlQXV0aG9yaXR5OiBfcmVjb21wb3NlQXV0aG9yaXR5LFxyXG4gICAgICAgIHJlbW92ZURvdFNlZ21lbnRzOiByZW1vdmVEb3RTZWdtZW50cyxcclxuICAgICAgICBzZXJpYWxpemU6IHNlcmlhbGl6ZSxcclxuICAgICAgICByZXNvbHZlQ29tcG9uZW50czogcmVzb2x2ZUNvbXBvbmVudHMsXHJcbiAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcclxuICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcclxuICAgICAgICBlcXVhbDogZXF1YWwsXHJcbiAgICAgICAgZXNjYXBlQ29tcG9uZW50OiBlc2NhcGVDb21wb25lbnQsXHJcbiAgICAgICAgdW5lc2NhcGVDb21wb25lbnQ6IHVuZXNjYXBlQ29tcG9uZW50XHJcbiAgICB9O1xyXG59KSgpO1xyXG5pZiAoIUNPTVBJTEVEICYmIHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgdmFyIHB1bnljb2RlID0gcmVxdWlyZShcIi4vcHVueWNvZGVcIik7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFVSSTtcclxuICAgIHJlcXVpcmUoXCIuL3NjaGVtZXNcIik7XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmV4cG9ydHMucGFyc2UgPSB1cmxQYXJzZTtcbmV4cG9ydHMucmVzb2x2ZSA9IHVybFJlc29sdmU7XG5leHBvcnRzLnJlc29sdmVPYmplY3QgPSB1cmxSZXNvbHZlT2JqZWN0O1xuZXhwb3J0cy5mb3JtYXQgPSB1cmxGb3JtYXQ7XG5cbmV4cG9ydHMuVXJsID0gVXJsO1xuXG5mdW5jdGlvbiBVcmwoKSB7XG4gIHRoaXMucHJvdG9jb2wgPSBudWxsO1xuICB0aGlzLnNsYXNoZXMgPSBudWxsO1xuICB0aGlzLmF1dGggPSBudWxsO1xuICB0aGlzLmhvc3QgPSBudWxsO1xuICB0aGlzLnBvcnQgPSBudWxsO1xuICB0aGlzLmhvc3RuYW1lID0gbnVsbDtcbiAgdGhpcy5oYXNoID0gbnVsbDtcbiAgdGhpcy5zZWFyY2ggPSBudWxsO1xuICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgdGhpcy5wYXRobmFtZSA9IG51bGw7XG4gIHRoaXMucGF0aCA9IG51bGw7XG4gIHRoaXMuaHJlZiA9IG51bGw7XG59XG5cbi8vIFJlZmVyZW5jZTogUkZDIDM5ODYsIFJGQyAxODA4LCBSRkMgMjM5NlxuXG4vLyBkZWZpbmUgdGhlc2UgaGVyZSBzbyBhdCBsZWFzdCB0aGV5IG9ubHkgaGF2ZSB0byBiZVxuLy8gY29tcGlsZWQgb25jZSBvbiB0aGUgZmlyc3QgbW9kdWxlIGxvYWQuXG52YXIgcHJvdG9jb2xQYXR0ZXJuID0gL14oW2EtejAtOS4rLV0rOikvaSxcbiAgICBwb3J0UGF0dGVybiA9IC86WzAtOV0qJC8sXG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGEgc2ltcGxlIHBhdGggVVJMXG4gICAgc2ltcGxlUGF0aFBhdHRlcm4gPSAvXihcXC9cXC8/KD8hXFwvKVteXFw/XFxzXSopKFxcP1teXFxzXSopPyQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eWythLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBjYW4gYWxsb3cgXCJ1bnNhZmVcIiBhbmQgXCJ1bndpc2VcIiBjaGFycy5cbiAgICB1bnNhZmVQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IG5ldmVyIGhhdmUgYSBob3N0bmFtZS5cbiAgICBob3N0bGVzc1Byb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgYWx3YXlzIGNvbnRhaW4gYSAvLyBiaXQuXG4gICAgc2xhc2hlZFByb3RvY29sID0ge1xuICAgICAgJ2h0dHAnOiB0cnVlLFxuICAgICAgJ2h0dHBzJzogdHJ1ZSxcbiAgICAgICdmdHAnOiB0cnVlLFxuICAgICAgJ2dvcGhlcic6IHRydWUsXG4gICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAnaHR0cDonOiB0cnVlLFxuICAgICAgJ2h0dHBzOic6IHRydWUsXG4gICAgICAnZnRwOic6IHRydWUsXG4gICAgICAnZ29waGVyOic6IHRydWUsXG4gICAgICAnZmlsZTonOiB0cnVlXG4gICAgfSxcbiAgICBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbmZ1bmN0aW9uIHVybFBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKHVybCAmJiB1dGlsLmlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghdXRpbC5pc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIC8vIENvcHkgY2hyb21lLCBJRSwgb3BlcmEgYmFja3NsYXNoLWhhbmRsaW5nIGJlaGF2aW9yLlxuICAvLyBCYWNrIHNsYXNoZXMgYmVmb3JlIHRoZSBxdWVyeSBzdHJpbmcgZ2V0IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXNcbiAgLy8gU2VlOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjU5MTZcbiAgdmFyIHF1ZXJ5SW5kZXggPSB1cmwuaW5kZXhPZignPycpLFxuICAgICAgc3BsaXR0ZXIgPVxuICAgICAgICAgIChxdWVyeUluZGV4ICE9PSAtMSAmJiBxdWVyeUluZGV4IDwgdXJsLmluZGV4T2YoJyMnKSkgPyAnPycgOiAnIycsXG4gICAgICB1U3BsaXQgPSB1cmwuc3BsaXQoc3BsaXR0ZXIpLFxuICAgICAgc2xhc2hSZWdleCA9IC9cXFxcL2c7XG4gIHVTcGxpdFswXSA9IHVTcGxpdFswXS5yZXBsYWNlKHNsYXNoUmVnZXgsICcvJyk7XG4gIHVybCA9IHVTcGxpdC5qb2luKHNwbGl0dGVyKTtcblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICBpZiAoIXNsYXNoZXNEZW5vdGVIb3N0ICYmIHVybC5zcGxpdCgnIycpLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIFRyeSBmYXN0IHBhdGggcmVnZXhwXG4gICAgdmFyIHNpbXBsZVBhdGggPSBzaW1wbGVQYXRoUGF0dGVybi5leGVjKHJlc3QpO1xuICAgIGlmIChzaW1wbGVQYXRoKSB7XG4gICAgICB0aGlzLnBhdGggPSByZXN0O1xuICAgICAgdGhpcy5ocmVmID0gcmVzdDtcbiAgICAgIHRoaXMucGF0aG5hbWUgPSBzaW1wbGVQYXRoWzFdO1xuICAgICAgaWYgKHNpbXBsZVBhdGhbMl0pIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSBzaW1wbGVQYXRoWzJdO1xuICAgICAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnNlYXJjaC5zdWJzdHIoMSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlYXJjaC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueWNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmXG4gICAgICAvLyB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQgYWxyZWFkeSBpcyBBU0NJSS1vbmx5LlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHB1bnljb2RlLnRvQVNDSUkodGhpcy5ob3N0bmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgaWYgKHJlc3QuaW5kZXhPZihhZSkgPT09IC0xKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHZhciBlc2MgPSBlbmNvZGVVUklDb21wb25lbnQoYWUpO1xuICAgICAgaWYgKGVzYyA9PT0gYWUpIHtcbiAgICAgICAgZXNjID0gZXNjYXBlKGFlKTtcbiAgICAgIH1cbiAgICAgIHJlc3QgPSByZXN0LnNwbGl0KGFlKS5qb2luKGVzYyk7XG4gICAgfVxuICB9XG5cblxuICAvLyBjaG9wIG9mZiBmcm9tIHRoZSB0YWlsIGZpcnN0LlxuICB2YXIgaGFzaCA9IHJlc3QuaW5kZXhPZignIycpO1xuICBpZiAoaGFzaCAhPT0gLTEpIHtcbiAgICAvLyBnb3QgYSBmcmFnbWVudCBzdHJpbmcuXG4gICAgdGhpcy5oYXNoID0gcmVzdC5zdWJzdHIoaGFzaCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgaGFzaCk7XG4gIH1cbiAgdmFyIHFtID0gcmVzdC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxbSAhPT0gLTEpIHtcbiAgICB0aGlzLnNlYXJjaCA9IHJlc3Quc3Vic3RyKHFtKTtcbiAgICB0aGlzLnF1ZXJ5ID0gcmVzdC5zdWJzdHIocW0gKyAxKTtcbiAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMucXVlcnkpO1xuICAgIH1cbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBxbSk7XG4gIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgIC8vIG5vIHF1ZXJ5IHN0cmluZywgYnV0IHBhcnNlUXVlcnlTdHJpbmcgc3RpbGwgcmVxdWVzdGVkXG4gICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICB0aGlzLnF1ZXJ5ID0ge307XG4gIH1cbiAgaWYgKHJlc3QpIHRoaXMucGF0aG5hbWUgPSByZXN0O1xuICBpZiAoc2xhc2hlZFByb3RvY29sW2xvd2VyUHJvdG9dICYmXG4gICAgICB0aGlzLmhvc3RuYW1lICYmICF0aGlzLnBhdGhuYW1lKSB7XG4gICAgdGhpcy5wYXRobmFtZSA9ICcvJztcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgaWYgKHRoaXMucGF0aG5hbWUgfHwgdGhpcy5zZWFyY2gpIHtcbiAgICB2YXIgcCA9IHRoaXMucGF0aG5hbWUgfHwgJyc7XG4gICAgdmFyIHMgPSB0aGlzLnNlYXJjaCB8fCAnJztcbiAgICB0aGlzLnBhdGggPSBwICsgcztcbiAgfVxuXG4gIC8vIGZpbmFsbHksIHJlY29uc3RydWN0IHRoZSBocmVmIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gdmFsaWRhdGVkLlxuICB0aGlzLmhyZWYgPSB0aGlzLmZvcm1hdCgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGZvcm1hdCBhIHBhcnNlZCBvYmplY3QgaW50byBhIHVybCBzdHJpbmdcbmZ1bmN0aW9uIHVybEZvcm1hdChvYmopIHtcbiAgLy8gZW5zdXJlIGl0J3MgYW4gb2JqZWN0LCBhbmQgbm90IGEgc3RyaW5nIHVybC5cbiAgLy8gSWYgaXQncyBhbiBvYmosIHRoaXMgaXMgYSBuby1vcC5cbiAgLy8gdGhpcyB3YXksIHlvdSBjYW4gY2FsbCB1cmxfZm9ybWF0KCkgb24gc3RyaW5nc1xuICAvLyB0byBjbGVhbiB1cCBwb3RlbnRpYWxseSB3b25reSB1cmxzLlxuICBpZiAodXRpbC5pc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICB1dGlsLmlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmICh1dGlsLmlzU3RyaW5nKHJlbGF0aXZlKSkge1xuICAgIHZhciByZWwgPSBuZXcgVXJsKCk7XG4gICAgcmVsLnBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgcmVsYXRpdmUgPSByZWw7XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gbmV3IFVybCgpO1xuICB2YXIgdGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgZm9yICh2YXIgdGsgPSAwOyB0ayA8IHRrZXlzLmxlbmd0aDsgdGsrKykge1xuICAgIHZhciB0a2V5ID0gdGtleXNbdGtdO1xuICAgIHJlc3VsdFt0a2V5XSA9IHRoaXNbdGtleV07XG4gIH1cblxuICAvLyBoYXNoIGlzIGFsd2F5cyBvdmVycmlkZGVuLCBubyBtYXR0ZXIgd2hhdC5cbiAgLy8gZXZlbiBocmVmPVwiXCIgd2lsbCByZW1vdmUgaXQuXG4gIHJlc3VsdC5oYXNoID0gcmVsYXRpdmUuaGFzaDtcblxuICAvLyBpZiB0aGUgcmVsYXRpdmUgdXJsIGlzIGVtcHR5LCB0aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvIGhlcmUuXG4gIGlmIChyZWxhdGl2ZS5ocmVmID09PSAnJykge1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBocmVmcyBsaWtlIC8vZm9vL2JhciBhbHdheXMgY3V0IHRvIHRoZSBwcm90b2NvbC5cbiAgaWYgKHJlbGF0aXZlLnNsYXNoZXMgJiYgIXJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgLy8gdGFrZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgcHJvdG9jb2wgZnJvbSByZWxhdGl2ZVxuICAgIHZhciBya2V5cyA9IE9iamVjdC5rZXlzKHJlbGF0aXZlKTtcbiAgICBmb3IgKHZhciByayA9IDA7IHJrIDwgcmtleXMubGVuZ3RoOyByaysrKSB7XG4gICAgICB2YXIgcmtleSA9IHJrZXlzW3JrXTtcbiAgICAgIGlmIChya2V5ICE9PSAncHJvdG9jb2wnKVxuICAgICAgICByZXN1bHRbcmtleV0gPSByZWxhdGl2ZVtya2V5XTtcbiAgICB9XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhyZWxhdGl2ZSk7XG4gICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW3ZdO1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIXV0aWwuaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFsbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIXV0aWwuaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIXV0aWwuaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgLy8gbm8gcGF0aCBhdCBhbGwuICBlYXN5LlxuICAgIC8vIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgb3RoZXIgc3R1ZmYgYWJvdmUuXG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gJy8nICsgcmVzdWx0LnNlYXJjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaWYgYSB1cmwgRU5EcyBpbiAuIG9yIC4uLCB0aGVuIGl0IG11c3QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIC8vIGhvd2V2ZXIsIGlmIGl0IGVuZHMgaW4gYW55dGhpbmcgZWxzZSBub24tc2xhc2h5LFxuICAvLyB0aGVuIGl0IG11c3QgTk9UIGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICB2YXIgbGFzdCA9IHNyY1BhdGguc2xpY2UoLTEpWzBdO1xuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IChcbiAgICAgIChyZXN1bHQuaG9zdCB8fCByZWxhdGl2ZS5ob3N0IHx8IHNyY1BhdGgubGVuZ3RoID4gMSkgJiZcbiAgICAgIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHwgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbGx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICB9XG4gIH1cblxuICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyB8fCAocmVzdWx0Lmhvc3QgJiYgc3JjUGF0aC5sZW5ndGgpO1xuXG4gIGlmIChtdXN0RW5kQWJzICYmICFpc0Fic29sdXRlKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBzcmNQYXRoLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCByZXF1ZXN0Lmh0dHBcbiAgaWYgKCF1dGlsLmlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICF1dGlsLmlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1N0cmluZzogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZihhcmcpID09PSAnc3RyaW5nJztcbiAgfSxcbiAgaXNPYmplY3Q6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICB9LFxuICBpc051bGw6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBhcmcgPT09IG51bGw7XG4gIH0sXG4gIGlzTnVsbE9yVW5kZWZpbmVkOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09IG51bGw7XG4gIH1cbn07XG4iLCIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNSBDaHJpcyBPJ0hhcmEgPGNvaGFyYTg3QGdtYWlsLmNvbT5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuICogXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4gKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4gKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xuICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRVxuICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTlxuICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4gKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4oZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLnBldGFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICBkZWZpbmUobmFtZSwgW10sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG4gICAgfVxufSkoJ3ZhbGlkYXRvcicsIGZ1bmN0aW9uICh2YWxpZGF0b3IpIHtcblxuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhbGlkYXRvciA9IHsgdmVyc2lvbjogJzQuNS4wJyB9O1xuXG4gICAgdmFyIGVtYWlsVXNlclBhcnQgPSAvXlthLXpcXGQhI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl0rJC9pO1xuICAgIHZhciBxdW90ZWRFbWFpbFVzZXIgPSAvXihbXFxzXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3ZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3ZV18KFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdKSkqJC9pO1xuXG4gICAgdmFyIGVtYWlsVXNlclV0ZjhQYXJ0ID0gL15bYS16XFxkISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5cXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKyQvaTtcbiAgICB2YXIgcXVvdGVkRW1haWxVc2VyVXRmOCA9IC9eKFtcXHNcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDdmXFx4MjFcXHgyMy1cXHg1YlxceDVkLVxceDdlXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXXwoXFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZC1cXHg3ZlxcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSokL2k7XG5cbiAgICB2YXIgZGlzcGxheU5hbWUgPSAvXlthLXpcXGQhI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9flxcLlxcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0rW2EtelxcZCEjXFwkJSYnXFwqXFwrXFwtXFwvPVxcP1xcXl9ge1xcfH1+XFwuXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXFxzXSo8KC4rKT4kL2k7XG5cbiAgICB2YXIgY3JlZGl0Q2FyZCA9IC9eKD86NFswLTldezEyfSg/OlswLTldezN9KT98NVsxLTVdWzAtOV17MTR9fDYoPzowMTF8NVswLTldWzAtOV0pWzAtOV17MTJ9fDNbNDddWzAtOV17MTN9fDMoPzowWzAtNV18WzY4XVswLTldKVswLTldezExfXwoPzoyMTMxfDE4MDB8MzVcXGR7M30pXFxkezExfSkkLztcblxuICAgIHZhciBpc2luID0gL15bQS1aXXsyfVswLTlBLVpdezl9WzAtOV0kLztcblxuICAgIHZhciBpc2JuMTBNYXliZSA9IC9eKD86WzAtOV17OX1YfFswLTldezEwfSkkL1xuICAgICAgLCBpc2JuMTNNYXliZSA9IC9eKD86WzAtOV17MTN9KSQvO1xuXG4gICAgdmFyIG1hY0FkZHJlc3MgPSAvXihbMC05YS1mQS1GXVswLTlhLWZBLUZdOil7NX0oWzAtOWEtZkEtRl1bMC05YS1mQS1GXSkkLztcblxuICAgIHZhciBpcHY0TWF5YmUgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSQvXG4gICAgICAsIGlwdjZCbG9jayA9IC9eWzAtOUEtRl17MSw0fSQvaTtcblxuICAgIHZhciB1dWlkID0ge1xuICAgICAgICAnMyc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tM1swLTlBLUZdezN9LVswLTlBLUZdezR9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCAnNCc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tNFswLTlBLUZdezN9LVs4OUFCXVswLTlBLUZdezN9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCAnNSc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tNVswLTlBLUZdezN9LVs4OUFCXVswLTlBLUZdezN9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCBhbGw6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tWzAtOUEtRl17NH0tWzAtOUEtRl17NH0tWzAtOUEtRl17MTJ9JC9pXG4gICAgfTtcblxuICAgIHZhciBhbHBoYSA9IC9eW0EtWl0rJC9pXG4gICAgICAsIGFscGhhbnVtZXJpYyA9IC9eWzAtOUEtWl0rJC9pXG4gICAgICAsIG51bWVyaWMgPSAvXlstK10/WzAtOV0rJC9cbiAgICAgICwgaW50ID0gL14oPzpbLStdPyg/OjB8WzEtOV1bMC05XSopKSQvXG4gICAgICAsIGZsb2F0ID0gL14oPzpbLStdPyg/OlswLTldKykpPyg/OlxcLlswLTldKik/KD86W2VFXVtcXCtcXC1dPyg/OlswLTldKykpPyQvXG4gICAgICAsIGhleGFkZWNpbWFsID0gL15bMC05QS1GXSskL2lcbiAgICAgICwgZGVjaW1hbCA9IC9eWy0rXT8oWzAtOV0rfFxcLlswLTldK3xbMC05XStcXC5bMC05XSspJC9cbiAgICAgICwgaGV4Y29sb3IgPSAvXiM/KFswLTlBLUZdezN9fFswLTlBLUZdezZ9KSQvaTtcblxuICAgIHZhciBhc2NpaSA9IC9eW1xceDAwLVxceDdGXSskL1xuICAgICAgLCBtdWx0aWJ5dGUgPSAvW15cXHgwMC1cXHg3Rl0vXG4gICAgICAsIGZ1bGxXaWR0aCA9IC9bXlxcdTAwMjAtXFx1MDA3RVxcdUZGNjEtXFx1RkY5RlxcdUZGQTAtXFx1RkZEQ1xcdUZGRTgtXFx1RkZFRTAtOWEtekEtWl0vXG4gICAgICAsIGhhbGZXaWR0aCA9IC9bXFx1MDAyMC1cXHUwMDdFXFx1RkY2MS1cXHVGRjlGXFx1RkZBMC1cXHVGRkRDXFx1RkZFOC1cXHVGRkVFMC05YS16QS1aXS87XG5cbiAgICB2YXIgc3Vycm9nYXRlUGFpciA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdLztcblxuICAgIHZhciBiYXNlNjQgPSAvXig/OltBLVowLTkrXFwvXXs0fSkqKD86W0EtWjAtOStcXC9dezJ9PT18W0EtWjAtOStcXC9dezN9PXxbQS1aMC05K1xcL117NH0pJC9pO1xuXG4gICAgdmFyIHBob25lcyA9IHtcbiAgICAgICd6aC1DTic6IC9eKFxcKz8wPzg2XFwtPyk/KCgxM1xcZHwxNFs1N118MTVbXjQsXFxEXXwxN1s2NzhdfDE4XFxkKVxcZHs4fXwxNzBbMDU5XVxcZHs3fSkkLyxcbiAgICAgICd6aC1UVyc6IC9eKFxcKz84ODZcXC0/fDApPzlcXGR7OH0kLyxcbiAgICAgICdlbi1aQSc6IC9eKFxcKz8yN3wwKVxcZHs5fSQvLFxuICAgICAgJ2VuLUFVJzogL14oXFwrPzYxfDApNFxcZHs4fSQvLFxuICAgICAgJ2VuLUhLJzogL14oXFwrPzg1MlxcLT8pP1s1NjldXFxkezN9XFwtP1xcZHs0fSQvLFxuICAgICAgJ2ZyLUZSJzogL14oXFwrPzMzfDApWzY3XVxcZHs4fSQvLFxuICAgICAgJ3B0LVBUJzogL14oXFwrMzUxKT85WzEyMzZdXFxkezd9JC8sXG4gICAgICAnZWwtR1InOiAvXihcXCs/MzApPyg2OVxcZHs4fSkkLyxcbiAgICAgICdlbi1HQic6IC9eKFxcKz80NHwwKTdcXGR7OX0kLyxcbiAgICAgICdlbi1VUyc6IC9eKFxcKz8xKT9bMi05XVxcZHsyfVsyLTldKD8hMTEpXFxkezZ9JC8sXG4gICAgICAnZW4tWk0nOiAvXihcXCsyNik/MDlbNTY3XVxcZHs3fSQvLFxuICAgICAgJ3J1LVJVJzogL14oXFwrPzd8OCk/OVxcZHs5fSQvLFxuICAgICAgJ25iLU5PJzogL14oXFwrPzQ3KT9bNDldXFxkezd9JC8sXG4gICAgICAnbm4tTk8nOiAvXihcXCs/NDcpP1s0OV1cXGR7N30kLyxcbiAgICAgICd2aS1WTic6IC9eKDB8XFwrPzg0KT8oKDEoMihbMC05XSl8NihbMi05XSl8ODh8OTkpKXwoOSgoPyE1KVswLTldKSkpKFswLTldezd9KSQvLFxuICAgICAgJ2VuLU5aJzogL14oXFwrPzY0fDApMlxcZHs3LDl9JC8sXG4gICAgICAnZW4tSU4nOiAvXihcXCs/OTF8MCk/Wzc4OV1cXGR7OX0kL1xuICAgIH07XG5cbiAgICAvLyBmcm9tIGh0dHA6Ly9nb28uZ2wvMGVqSEhXXG4gICAgdmFyIGlzbzg2MDEgPSAvXihbXFwrLV0/XFxkezR9KD8hXFxkezJ9XFxiKSkoKC0/KSgoMFsxLTldfDFbMC0yXSkoXFwzKFsxMl1cXGR8MFsxLTldfDNbMDFdKSk/fFcoWzAtNF1cXGR8NVswLTJdKSgtP1sxLTddKT98KDAwWzEtOV18MFsxLTldXFxkfFsxMl1cXGR7Mn18MyhbMC01XVxcZHw2WzEtNl0pKSkoW1RcXHNdKCgoWzAxXVxcZHwyWzAtM10pKCg6PylbMC01XVxcZCk/fDI0XFw6PzAwKShbXFwuLF1cXGQrKD8hOikpPyk/KFxcMTdbMC01XVxcZChbXFwuLF1cXGQrKT8pPyhbelpdfChbXFwrLV0pKFswMV1cXGR8MlswLTNdKTo/KFswLTVdXFxkKT8pPyk/KT8kLztcblxuICAgIHZhbGlkYXRvci5leHRlbmQgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICAgICAgdmFsaWRhdG9yW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgYXJnc1swXSA9IHZhbGlkYXRvci50b1N0cmluZyhhcmdzWzBdKTtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh2YWxpZGF0b3IsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvL1JpZ2h0IGJlZm9yZSBleHBvcnRpbmcgdGhlIHZhbGlkYXRvciBvYmplY3QsIHBhc3MgZWFjaCBvZiB0aGUgYnVpbHRpbnNcbiAgICAvL3Rocm91Z2ggZXh0ZW5kKCkgc28gdGhhdCB0aGVpciBmaXJzdCBhcmd1bWVudCBpcyBjb2VyY2VkIHRvIGEgc3RyaW5nXG4gICAgdmFsaWRhdG9yLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvcltuYW1lXSAhPT0gJ2Z1bmN0aW9uJyB8fCBuYW1lID09PSAndG9TdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICd0b0RhdGUnIHx8IG5hbWUgPT09ICdleHRlbmQnIHx8IG5hbWUgPT09ICdpbml0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsaWRhdG9yLmV4dGVuZChuYW1lLCB2YWxpZGF0b3JbbmFtZV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b1N0cmluZyA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCAhPT0gbnVsbCAmJiBpbnB1dC50b1N0cmluZykge1xuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBudWxsIHx8IHR5cGVvZiBpbnB1dCA9PT0gJ3VuZGVmaW5lZCcgfHwgKGlzTmFOKGlucHV0KSAmJiAhaW5wdXQubGVuZ3RoKSkge1xuICAgICAgICAgICAgaW5wdXQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJycgKyBpbnB1dDtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLnRvRGF0ZSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0ZSkgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZSA9IERhdGUucGFyc2UoZGF0ZSk7XG4gICAgICAgIHJldHVybiAhaXNOYU4oZGF0ZSkgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGw7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b0Zsb2F0ID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IudG9JbnQgPSBmdW5jdGlvbiAoc3RyLCByYWRpeCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyLCByYWRpeCB8fCAxMCk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b0Jvb2xlYW4gPSBmdW5jdGlvbiAoc3RyLCBzdHJpY3QpIHtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ciA9PT0gJzEnIHx8IHN0ciA9PT0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHIgIT09ICcwJyAmJiBzdHIgIT09ICdmYWxzZScgJiYgc3RyICE9PSAnJztcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmVxdWFscyA9IGZ1bmN0aW9uIChzdHIsIGNvbXBhcmlzb24pIHtcbiAgICAgICAgcmV0dXJuIHN0ciA9PT0gdmFsaWRhdG9yLnRvU3RyaW5nKGNvbXBhcmlzb24pO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuY29udGFpbnMgPSBmdW5jdGlvbiAoc3RyLCBlbGVtKSB7XG4gICAgICAgIHJldHVybiBzdHIuaW5kZXhPZih2YWxpZGF0b3IudG9TdHJpbmcoZWxlbSkpID49IDA7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5tYXRjaGVzID0gZnVuY3Rpb24gKHN0ciwgcGF0dGVybiwgbW9kaWZpZXJzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGF0dGVybikgIT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBtb2RpZmllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmF1bHRfZW1haWxfb3B0aW9ucyA9IHtcbiAgICAgICAgYWxsb3dfZGlzcGxheV9uYW1lOiBmYWxzZSxcbiAgICAgICAgYWxsb3dfdXRmOF9sb2NhbF9wYXJ0OiB0cnVlLFxuICAgICAgICByZXF1aXJlX3RsZDogdHJ1ZVxuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNFbWFpbCA9IGZ1bmN0aW9uIChzdHIsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG1lcmdlKG9wdGlvbnMsIGRlZmF1bHRfZW1haWxfb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfZGlzcGxheV9uYW1lKSB7XG4gICAgICAgICAgICB2YXIgZGlzcGxheV9lbWFpbCA9IHN0ci5tYXRjaChkaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICBpZiAoZGlzcGxheV9lbWFpbCkge1xuICAgICAgICAgICAgICAgIHN0ciA9IGRpc3BsYXlfZW1haWxbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJ0AnKVxuICAgICAgICAgICwgZG9tYWluID0gcGFydHMucG9wKClcbiAgICAgICAgICAsIHVzZXIgPSBwYXJ0cy5qb2luKCdAJyk7XG5cbiAgICAgICAgdmFyIGxvd2VyX2RvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobG93ZXJfZG9tYWluID09PSAnZ21haWwuY29tJyB8fCBsb3dlcl9kb21haW4gPT09ICdnb29nbGVtYWlsLmNvbScpIHtcbiAgICAgICAgICAgIHVzZXIgPSB1c2VyLnJlcGxhY2UoL1xcLi9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aCh1c2VyLCAwLCA2NCkgfHxcbiAgICAgICAgICAgICAgICAhdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aChkb21haW4sIDAsIDI1NikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzRlFETihkb21haW4sIHtyZXF1aXJlX3RsZDogb3B0aW9ucy5yZXF1aXJlX3RsZH0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlclswXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgdXNlciA9IHVzZXIuc2xpY2UoMSwgdXNlci5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmFsbG93X3V0ZjhfbG9jYWxfcGFydCA/XG4gICAgICAgICAgICAgICAgcXVvdGVkRW1haWxVc2VyVXRmOC50ZXN0KHVzZXIpIDpcbiAgICAgICAgICAgICAgICBxdW90ZWRFbWFpbFVzZXIudGVzdCh1c2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXR0ZXJuID0gb3B0aW9ucy5hbGxvd191dGY4X2xvY2FsX3BhcnQgP1xuICAgICAgICAgICAgZW1haWxVc2VyVXRmOFBhcnQgOiBlbWFpbFVzZXJQYXJ0O1xuXG4gICAgICAgIHZhciB1c2VyX3BhcnRzID0gdXNlci5zcGxpdCgnLicpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZXJfcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi50ZXN0KHVzZXJfcGFydHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHZhciBkZWZhdWx0X3VybF9vcHRpb25zID0ge1xuICAgICAgICBwcm90b2NvbHM6IFsgJ2h0dHAnLCAnaHR0cHMnLCAnZnRwJyBdXG4gICAgICAsIHJlcXVpcmVfdGxkOiB0cnVlXG4gICAgICAsIHJlcXVpcmVfcHJvdG9jb2w6IGZhbHNlXG4gICAgICAsIHJlcXVpcmVfdmFsaWRfcHJvdG9jb2w6IHRydWVcbiAgICAgICwgYWxsb3dfdW5kZXJzY29yZXM6IGZhbHNlXG4gICAgICAsIGFsbG93X3RyYWlsaW5nX2RvdDogZmFsc2VcbiAgICAgICwgYWxsb3dfcHJvdG9jb2xfcmVsYXRpdmVfdXJsczogZmFsc2VcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzVVJMID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICAgICAgICBpZiAoIXVybCB8fCB1cmwubGVuZ3RoID49IDIwODMgfHwgL1xccy8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCdtYWlsdG86JykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF91cmxfb3B0aW9ucyk7XG4gICAgICAgIHZhciBwcm90b2NvbCwgYXV0aCwgaG9zdCwgaG9zdG5hbWUsIHBvcnQsXG4gICAgICAgICAgICBwb3J0X3N0ciwgc3BsaXQ7XG4gICAgICAgIHNwbGl0ID0gdXJsLnNwbGl0KCc6Ly8nKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHByb3RvY29sID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlcXVpcmVfdmFsaWRfcHJvdG9jb2wgJiYgb3B0aW9ucy5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMucmVxdWlyZV9wcm90b2NvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9ICBlbHNlIGlmIChvcHRpb25zLmFsbG93X3Byb3RvY29sX3JlbGF0aXZlX3VybHMgJiYgdXJsLnN1YnN0cigwLCAyKSA9PT0gJy8vJykge1xuICAgICAgICAgICAgc3BsaXRbMF0gPSB1cmwuc3Vic3RyKDIpO1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHNwbGl0LmpvaW4oJzovLycpO1xuICAgICAgICBzcGxpdCA9IHVybC5zcGxpdCgnIycpO1xuICAgICAgICB1cmwgPSBzcGxpdC5zaGlmdCgpO1xuXG4gICAgICAgIHNwbGl0ID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgICAgIHVybCA9IHNwbGl0LnNoaWZ0KCk7XG5cbiAgICAgICAgc3BsaXQgPSB1cmwuc3BsaXQoJy8nKTtcbiAgICAgICAgdXJsID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgc3BsaXQgPSB1cmwuc3BsaXQoJ0AnKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGF1dGggPSBzcGxpdC5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKGF1dGguaW5kZXhPZignOicpID49IDAgJiYgYXV0aC5zcGxpdCgnOicpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaG9zdG5hbWUgPSBzcGxpdC5qb2luKCdAJyk7XG4gICAgICAgIHNwbGl0ID0gaG9zdG5hbWUuc3BsaXQoJzonKTtcbiAgICAgICAgaG9zdCA9IHNwbGl0LnNoaWZ0KCk7XG4gICAgICAgIGlmIChzcGxpdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBvcnRfc3RyID0gc3BsaXQuam9pbignOicpO1xuICAgICAgICAgICAgcG9ydCA9IHBhcnNlSW50KHBvcnRfc3RyLCAxMCk7XG4gICAgICAgICAgICBpZiAoIS9eWzAtOV0rJC8udGVzdChwb3J0X3N0cikgfHwgcG9ydCA8PSAwIHx8IHBvcnQgPiA2NTUzNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRvci5pc0lQKGhvc3QpICYmICF2YWxpZGF0b3IuaXNGUUROKGhvc3QsIG9wdGlvbnMpICYmXG4gICAgICAgICAgICAgICAgaG9zdCAhPT0gJ2xvY2FsaG9zdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ob3N0X3doaXRlbGlzdCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaG9zdF93aGl0ZWxpc3QuaW5kZXhPZihob3N0KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ob3N0X2JsYWNrbGlzdCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaG9zdF9ibGFja2xpc3QuaW5kZXhPZihob3N0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTUFDQWRkcmVzcyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG1hY0FkZHJlc3MudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJUCA9IGZ1bmN0aW9uIChzdHIsIHZlcnNpb24pIHtcbiAgICAgICAgdmVyc2lvbiA9IHZhbGlkYXRvci50b1N0cmluZyh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yLmlzSVAoc3RyLCA0KSB8fCB2YWxpZGF0b3IuaXNJUChzdHIsIDYpO1xuICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb24gPT09ICc0Jykge1xuICAgICAgICAgICAgaWYgKCFpcHY0TWF5YmUudGVzdChzdHIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCcuJykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzNdIDw9IDI1NTtcbiAgICAgICAgfSBlbHNlIGlmICh2ZXJzaW9uID09PSAnNicpIHtcbiAgICAgICAgICAgIHZhciBibG9ja3MgPSBzdHIuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHZhciBmb3VuZE9taXNzaW9uQmxvY2sgPSBmYWxzZTsgLy8gbWFya2VyIHRvIGluZGljYXRlIDo6XG5cbiAgICAgICAgICAgIC8vIEF0IGxlYXN0IHNvbWUgT1MgYWNjZXB0IHRoZSBsYXN0IDMyIGJpdHMgb2YgYW4gSVB2NiBhZGRyZXNzXG4gICAgICAgICAgICAvLyAoaS5lLiAyIG9mIHRoZSBibG9ja3MpIGluIElQdjQgbm90YXRpb24sIGFuZCBSRkMgMzQ5MyBzYXlzXG4gICAgICAgICAgICAvLyB0aGF0ICc6OmZmZmY6YS5iLmMuZCcgaXMgdmFsaWQgZm9yIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzc2VzLFxuICAgICAgICAgICAgLy8gYW5kICc6OmEuYi5jLmQnIGlzIGRlcHJlY2F0ZWQsIGJ1dCBhbHNvIHZhbGlkLlxuICAgICAgICAgICAgdmFyIGZvdW5kSVB2NFRyYW5zaXRpb25CbG9jayA9IHZhbGlkYXRvci5pc0lQKGJsb2Nrc1tibG9ja3MubGVuZ3RoIC0gMV0sIDQpO1xuICAgICAgICAgICAgdmFyIGV4cGVjdGVkTnVtYmVyT2ZCbG9ja3MgPSBmb3VuZElQdjRUcmFuc2l0aW9uQmxvY2sgPyA3IDogODtcblxuICAgICAgICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPiBleHBlY3RlZE51bWJlck9mQmxvY2tzKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgLy8gaW5pdGlhbCBvciBmaW5hbCA6OlxuICAgICAgICAgICAgaWYgKHN0ciA9PT0gJzo6Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHIuc3Vic3RyKDAsIDIpID09PSAnOjonKSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgZm91bmRPbWlzc2lvbkJsb2NrID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gMikgPT09ICc6OicpIHtcbiAgICAgICAgICAgICAgICBibG9ja3MucG9wKCk7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGZvdW5kT21pc3Npb25CbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgLy8gdGVzdCBmb3IgYSA6OiB3aGljaCBjYW4gbm90IGJlIGF0IHRoZSBzdHJpbmcgc3RhcnQvZW5kXG4gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhvc2UgY2FzZXMgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2tzW2ldID09PSAnJyAmJiBpID4gMCAmJiBpIDwgYmxvY2tzLmxlbmd0aCAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRPbWlzc2lvbkJsb2NrKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBtdWx0aXBsZSA6OiBpbiBhZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kT21pc3Npb25CbG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZElQdjRUcmFuc2l0aW9uQmxvY2sgJiYgaSA9PSBibG9ja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpdCBoYXMgYmVlbiBjaGVja2VkIGJlZm9yZSB0aGF0IHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlzIGEgdmFsaWQgSVB2NCBhZGRyZXNzXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXB2NkJsb2NrLnRlc3QoYmxvY2tzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm91bmRPbWlzc2lvbkJsb2NrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2Nrcy5sZW5ndGggPj0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2Nrcy5sZW5ndGggPT09IGV4cGVjdGVkTnVtYmVyT2ZCbG9ja3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB2YXIgZGVmYXVsdF9mcWRuX29wdGlvbnMgPSB7XG4gICAgICAgIHJlcXVpcmVfdGxkOiB0cnVlXG4gICAgICAsIGFsbG93X3VuZGVyc2NvcmVzOiBmYWxzZVxuICAgICAgLCBhbGxvd190cmFpbGluZ19kb3Q6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0ZRRE4gPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBkZWZhdWx0X2ZxZG5fb3B0aW9ucyk7XG5cbiAgICAgICAgLyogUmVtb3ZlIHRoZSBvcHRpb25hbCB0cmFpbGluZyBkb3QgYmVmb3JlIGNoZWNraW5nIHZhbGlkaXR5ICovXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93X3RyYWlsaW5nX2RvdCAmJiBzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnLicpIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLicpO1xuICAgICAgICBpZiAob3B0aW9ucy5yZXF1aXJlX3RsZCkge1xuICAgICAgICAgICAgdmFyIHRsZCA9IHBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGggfHwgIS9eKFthLXpcXHUwMGExLVxcdWZmZmZdezIsfXx4blthLXowLTktXXsyLH0pJC9pLnRlc3QodGxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBwYXJ0LCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd191bmRlcnNjb3Jlcykge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJ19fJykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnJlcGxhY2UoL18vZywgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEvXlthLXpcXHUwMGExLVxcdWZmZmYwLTktXSskL2kudGVzdChwYXJ0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgvW1xcdWZmMDEtXFx1ZmY1ZV0vLnRlc3QocGFydCkpIHtcbiAgICAgICAgICAgICAgICAvLyBkaXNhbGxvdyBmdWxsLXdpZHRoIGNoYXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcnRbMF0gPT09ICctJyB8fCBwYXJ0W3BhcnQubGVuZ3RoIC0gMV0gPT09ICctJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJy0tLScpID49IDAgJiYgcGFydC5zbGljZSgwLCA0KSAhPT0gJ3huLS0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNCb29sZWFuID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHJldHVybiAoWyd0cnVlJywgJ2ZhbHNlJywgJzEnLCAnMCddLmluZGV4T2Yoc3RyKSA+PSAwKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQWxwaGEgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBhbHBoYS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGFscGhhbnVtZXJpYy50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc051bWVyaWMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBudW1lcmljLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRGVjaW1hbCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ciAhPT0gJycgJiYgZGVjaW1hbC50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0hleGFkZWNpbWFsID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gaGV4YWRlY2ltYWwudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNIZXhDb2xvciA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGhleGNvbG9yLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTG93ZXJjYXNlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyID09PSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzVXBwZXJjYXNlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyID09PSBzdHIudG9VcHBlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzSW50ID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGludC50ZXN0KHN0cikgJiYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KCdtaW4nKSB8fCBzdHIgPj0gb3B0aW9ucy5taW4pICYmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbWF4JykgfHwgc3RyIDw9IG9wdGlvbnMubWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRmxvYXQgPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbG9hdC50ZXN0KHN0cikgJiYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KCdtaW4nKSB8fCBzdHIgPj0gb3B0aW9ucy5taW4pICYmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbWF4JykgfHwgc3RyIDw9IG9wdGlvbnMubWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRGl2aXNpYmxlQnkgPSBmdW5jdGlvbiAoc3RyLCBudW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRvci50b0Zsb2F0KHN0cikgJSB2YWxpZGF0b3IudG9JbnQobnVtKSA9PT0gMDtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTnVsbCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDA7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0xlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIG1pbiwgbWF4KSB7XG4gICAgICAgIHZhciBzdXJyb2dhdGVQYWlycyA9IHN0ci5tYXRjaCgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nKSB8fCBbXTtcbiAgICAgICAgdmFyIGxlbiA9IHN0ci5sZW5ndGggLSBzdXJyb2dhdGVQYWlycy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBsZW4gPj0gbWluICYmICh0eXBlb2YgbWF4ID09PSAndW5kZWZpbmVkJyB8fCBsZW4gPD0gbWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIG1pbiwgbWF4KSB7XG4gICAgICAgIHZhciBsZW4gPSBlbmNvZGVVUkkoc3RyKS5zcGxpdCgvJS4ufC4vKS5sZW5ndGggLSAxO1xuICAgICAgICByZXR1cm4gbGVuID49IG1pbiAmJiAodHlwZW9mIG1heCA9PT0gJ3VuZGVmaW5lZCcgfHwgbGVuIDw9IG1heCk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc1VVSUQgPSBmdW5jdGlvbiAoc3RyLCB2ZXJzaW9uKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gdXVpZFt2ZXJzaW9uID8gdmVyc2lvbiA6ICdhbGwnXTtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4gJiYgcGF0dGVybi50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0KHN0cikge1xuICAgICAgICB2YXIgaXNvODYwMVBhcnRzID0gc3RyLm1hdGNoKGlzbzg2MDEpXG4gICAgICAgICAgLCB0aW1lem9uZSwgc2lnbiwgaG91cnMsIG1pbnV0ZXM7XG4gICAgICAgIGlmICghaXNvODYwMVBhcnRzKSB7XG4gICAgICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHRpbWV6b25lID0gc3RyLm1hdGNoKC8oPzpcXHN8Z210XFxzKikoLXxcXCspKFxcZHsxLDR9KShcXHN8JCkvKTtcbiAgICAgICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmluZGV4T2YoJ2dtdCcpICE9PSAtMSA/IDAgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2lnbiA9IHRpbWV6b25lWzFdO1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRpbWV6b25lWzJdO1xuICAgICAgICAgICAgaWYgKG9mZnNldC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAnMCcgKyBvZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0Lmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSAwO1xuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBwYXJzZUludChvZmZzZXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBob3VycyA9IHBhcnNlSW50KG9mZnNldC5zbGljZSgwLCAyKSk7XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IHBhcnNlSW50KG9mZnNldC5zbGljZSgyLCA0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lem9uZSA9IGlzbzg2MDFQYXJ0c1syMV07XG4gICAgICAgICAgICBpZiAoIXRpbWV6b25lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZXpvbmUgPT09ICd6JyB8fCB0aW1lem9uZSA9PT0gJ1onKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaWduID0gaXNvODYwMVBhcnRzWzIyXTtcbiAgICAgICAgICAgIGlmICh0aW1lem9uZS5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBwYXJzZUludChpc284NjAxUGFydHNbMjNdKTtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQoaXNvODYwMVBhcnRzWzI0XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhvdXJzID0gMDtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQoaXNvODYwMVBhcnRzWzIzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChob3VycyAqIDYwICsgbWludXRlcykgKiAoc2lnbiA9PT0gJy0nID8gMSA6IC0xKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3IuaXNEYXRlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZERhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKHN0cikpO1xuICAgICAgICBpZiAoaXNOYU4obm9ybWFsaXplZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub3JtYWxpemVkRGF0ZSBpcyBpbiB0aGUgdXNlcidzIHRpbWV6b25lLiBBcHBseSB0aGUgaW5wdXRcbiAgICAgICAgLy8gdGltZXpvbmUgb2Zmc2V0IHRvIHRoZSBkYXRlIHNvIHRoYXQgdGhlIHllYXIgYW5kIGRheSBtYXRjaFxuICAgICAgICAvLyB0aGUgaW5wdXRcbiAgICAgICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXQoc3RyKTtcbiAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgdGltZXpvbmVEaWZmZXJlbmNlID0gbm9ybWFsaXplZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAtXG4gICAgICAgICAgICAgICAgdGltZXpvbmVPZmZzZXQ7XG4gICAgICAgICAgICBub3JtYWxpemVkRGF0ZSA9IG5ldyBEYXRlKG5vcm1hbGl6ZWREYXRlLmdldFRpbWUoKSArXG4gICAgICAgICAgICAgICAgNjAwMDAgKiB0aW1lem9uZURpZmZlcmVuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRheSA9IFN0cmluZyhub3JtYWxpemVkRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB2YXIgZGF5T3JZZWFyLCBkYXlPclllYXJNYXRjaGVzLCB5ZWFyO1xuICAgICAgICAvL2NoZWNrIGZvciB2YWxpZCBkb3VibGUgZGlnaXRzIHRoYXQgY291bGQgYmUgbGF0ZSBkYXlzXG4gICAgICAgIC8vY2hlY2sgZm9yIGFsbCBtYXRjaGVzIHNpbmNlIGEgc3RyaW5nIGxpa2UgJzEyLzIzJyBpcyBhIHZhbGlkIGRhdGVcbiAgICAgICAgLy9pZ25vcmUgZXZlcnl0aGluZyB3aXRoIG5lYXJieSBjb2xvbnNcbiAgICAgICAgZGF5T3JZZWFyTWF0Y2hlcyA9IHN0ci5tYXRjaCgvKF58W146XFxkXSlbMjNdXFxkKFteOlxcZF18JCkvZyk7XG4gICAgICAgIGlmICghZGF5T3JZZWFyTWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZGF5T3JZZWFyID0gZGF5T3JZZWFyTWF0Y2hlcy5tYXAoZnVuY3Rpb24oZGlnaXRTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBkaWdpdFN0cmluZy5tYXRjaCgvXFxkKy9nKVswXTtcbiAgICAgICAgfSkuam9pbignLycpO1xuXG4gICAgICAgIHllYXIgPSBTdHJpbmcobm9ybWFsaXplZERhdGUuZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTIpO1xuICAgICAgICBpZiAoZGF5T3JZZWFyID09PSBkYXkgfHwgZGF5T3JZZWFyID09PSB5ZWFyKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoZGF5T3JZZWFyID09PSAoZGF5ICsgJy8nICsgeWVhcikpIHx8IChkYXlPclllYXIgPT09ICh5ZWFyICsgJy8nICsgZGF5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQWZ0ZXIgPSBmdW5jdGlvbiAoc3RyLCBkYXRlKSB7XG4gICAgICAgIHZhciBjb21wYXJpc29uID0gdmFsaWRhdG9yLnRvRGF0ZShkYXRlIHx8IG5ldyBEYXRlKCkpXG4gICAgICAgICAgLCBvcmlnaW5hbCA9IHZhbGlkYXRvci50b0RhdGUoc3RyKTtcbiAgICAgICAgcmV0dXJuICEhKG9yaWdpbmFsICYmIGNvbXBhcmlzb24gJiYgb3JpZ2luYWwgPiBjb21wYXJpc29uKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQmVmb3JlID0gZnVuY3Rpb24gKHN0ciwgZGF0ZSkge1xuICAgICAgICB2YXIgY29tcGFyaXNvbiA9IHZhbGlkYXRvci50b0RhdGUoZGF0ZSB8fCBuZXcgRGF0ZSgpKVxuICAgICAgICAgICwgb3JpZ2luYWwgPSB2YWxpZGF0b3IudG9EYXRlKHN0cik7XG4gICAgICAgIHJldHVybiAhIShvcmlnaW5hbCAmJiBjb21wYXJpc29uICYmIG9yaWdpbmFsIDwgY29tcGFyaXNvbik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0luID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb25zKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gdmFsaWRhdG9yLnRvU3RyaW5nKG9wdGlvbnNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2Yoc3RyKSA+PSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoc3RyKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmluZGV4T2Yoc3RyKSA+PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzV2hpdGVsaXN0ZWQgPSBmdW5jdGlvbiAoc3RyLCBjaGFycykge1xuICAgICAgICBmb3IgKHZhciBpID0gc3RyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoY2hhcnMuaW5kZXhPZihzdHJbaV0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNDcmVkaXRDYXJkID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgc2FuaXRpemVkID0gc3RyLnJlcGxhY2UoL1teMC05XSsvZywgJycpO1xuICAgICAgICBpZiAoIWNyZWRpdENhcmQudGVzdChzYW5pdGl6ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1bSA9IDAsIGRpZ2l0LCB0bXBOdW0sIHNob3VsZERvdWJsZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHNhbml0aXplZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgZGlnaXQgPSBzYW5pdGl6ZWQuc3Vic3RyaW5nKGksIChpICsgMSkpO1xuICAgICAgICAgICAgdG1wTnVtID0gcGFyc2VJbnQoZGlnaXQsIDEwKTtcbiAgICAgICAgICAgIGlmIChzaG91bGREb3VibGUpIHtcbiAgICAgICAgICAgICAgICB0bXBOdW0gKj0gMjtcbiAgICAgICAgICAgICAgICBpZiAodG1wTnVtID49IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSAoKHRtcE51bSAlIDEwKSArIDEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSB0bXBOdW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hvdWxkRG91YmxlID0gIXNob3VsZERvdWJsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISEoKHN1bSAlIDEwKSA9PT0gMCA/IHNhbml0aXplZCA6IGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzSVNJTiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFpc2luLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoZWNrc3VtU3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKGNoYXJhY3Rlcikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGNoYXJhY3RlciwgMzYpO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgc3VtID0gMCwgZGlnaXQsIHRtcE51bSwgc2hvdWxkRG91YmxlID0gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoZWNrc3VtU3RyLmxlbmd0aCAtIDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBkaWdpdCA9IGNoZWNrc3VtU3RyLnN1YnN0cmluZyhpLCAoaSArIDEpKTtcbiAgICAgICAgICAgIHRtcE51bSA9IHBhcnNlSW50KGRpZ2l0LCAxMCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkRG91YmxlKSB7XG4gICAgICAgICAgICAgICAgdG1wTnVtICo9IDI7XG4gICAgICAgICAgICAgICAgaWYgKHRtcE51bSA+PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtICsgMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3VtICs9IHRtcE51bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3VsZERvdWJsZSA9ICFzaG91bGREb3VibGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gMSksIDEwKSA9PT0gKDEwMDAwIC0gc3VtKSAlIDEwO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJU0JOID0gZnVuY3Rpb24gKHN0ciwgdmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uID0gdmFsaWRhdG9yLnRvU3RyaW5nKHZlcnNpb24pO1xuICAgICAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNJU0JOKHN0ciwgMTApIHx8IHZhbGlkYXRvci5pc0lTQk4oc3RyLCAxMyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNhbml0aXplZCA9IHN0ci5yZXBsYWNlKC9bXFxzLV0rL2csICcnKVxuICAgICAgICAgICwgY2hlY2tzdW0gPSAwLCBpO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gJzEwJykge1xuICAgICAgICAgICAgaWYgKCFpc2JuMTBNYXliZS50ZXN0KHNhbml0aXplZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gKGkgKyAxKSAqIHNhbml0aXplZC5jaGFyQXQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2FuaXRpemVkLmNoYXJBdCg5KSA9PT0gJ1gnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gMTAgKiAxMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gMTAgKiBzYW5pdGl6ZWQuY2hhckF0KDkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChjaGVja3N1bSAlIDExKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXNhbml0aXplZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlICBpZiAodmVyc2lvbiA9PT0gJzEzJykge1xuICAgICAgICAgICAgaWYgKCFpc2JuMTNNYXliZS50ZXN0KHNhbml0aXplZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZmFjdG9yID0gWyAxLCAzIF07XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgICAgIGNoZWNrc3VtICs9IGZhY3RvcltpICUgMl0gKiBzYW5pdGl6ZWQuY2hhckF0KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNhbml0aXplZC5jaGFyQXQoMTIpIC0gKCgxMCAtIChjaGVja3N1bSAlIDEwKSkgJSAxMCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFzYW5pdGl6ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNNb2JpbGVQaG9uZSA9IGZ1bmN0aW9uKHN0ciwgbG9jYWxlKSB7XG4gICAgICAgIGlmIChsb2NhbGUgaW4gcGhvbmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcGhvbmVzW2xvY2FsZV0udGVzdChzdHIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmF1bHRfY3VycmVuY3lfb3B0aW9ucyA9IHtcbiAgICAgICAgc3ltYm9sOiAnJCdcbiAgICAgICwgcmVxdWlyZV9zeW1ib2w6IGZhbHNlXG4gICAgICAsIGFsbG93X3NwYWNlX2FmdGVyX3N5bWJvbDogZmFsc2VcbiAgICAgICwgc3ltYm9sX2FmdGVyX2RpZ2l0czogZmFsc2VcbiAgICAgICwgYWxsb3dfbmVnYXRpdmVzOiB0cnVlXG4gICAgICAsIHBhcmVuc19mb3JfbmVnYXRpdmVzOiBmYWxzZVxuICAgICAgLCBuZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHM6IGZhbHNlXG4gICAgICAsIG5lZ2F0aXZlX3NpZ25fYWZ0ZXJfZGlnaXRzOiBmYWxzZVxuICAgICAgLCBhbGxvd19uZWdhdGl2ZV9zaWduX3BsYWNlaG9sZGVyOiBmYWxzZVxuICAgICAgLCB0aG91c2FuZHNfc2VwYXJhdG9yOiAnLCdcbiAgICAgICwgZGVjaW1hbF9zZXBhcmF0b3I6ICcuJ1xuICAgICAgLCBhbGxvd19zcGFjZV9hZnRlcl9kaWdpdHM6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0N1cnJlbmN5ID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF9jdXJyZW5jeV9vcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gY3VycmVuY3lSZWdleChvcHRpb25zKS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0pTT04gPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICAgICAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc011bHRpYnl0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpYnl0ZS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0FzY2lpID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gYXNjaWkudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNGdWxsV2lkdGggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBmdWxsV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNIYWxmV2lkdGggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBoYWxmV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNWYXJpYWJsZVdpZHRoID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gZnVsbFdpZHRoLnRlc3Qoc3RyKSAmJiBoYWxmV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNTdXJyb2dhdGVQYWlyID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3Vycm9nYXRlUGFpci50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0Jhc2U2NCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGJhc2U2NC50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc01vbmdvSWQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNIZXhhZGVjaW1hbChzdHIpICYmIHN0ci5sZW5ndGggPT09IDI0O1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJU084NjAxID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gaXNvODYwMS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5sdHJpbSA9IGZ1bmN0aW9uIChzdHIsIGNoYXJzKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gY2hhcnMgPyBuZXcgUmVnRXhwKCdeWycgKyBjaGFycyArICddKycsICdnJykgOiAvXlxccysvZztcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sICcnKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLnJ0cmltID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgdmFyIHBhdHRlcm4gPSBjaGFycyA/IG5ldyBSZWdFeHAoJ1snICsgY2hhcnMgKyAnXSskJywgJ2cnKSA6IC9cXHMrJC9nO1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocGF0dGVybiwgJycpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IudHJpbSA9IGZ1bmN0aW9uIChzdHIsIGNoYXJzKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gY2hhcnMgPyBuZXcgUmVnRXhwKCdeWycgKyBjaGFycyArICddK3xbJyArIGNoYXJzICsgJ10rJCcsICdnJykgOiAvXlxccyt8XFxzKyQvZztcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sICcnKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmVzY2FwZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIChzdHIucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyYjeDI3OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICcmI3gyRjsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYC9nLCAnJiM5NjsnKSk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5zdHJpcExvdyA9IGZ1bmN0aW9uIChzdHIsIGtlZXBfbmV3X2xpbmVzKSB7XG4gICAgICAgIHZhciBjaGFycyA9IGtlZXBfbmV3X2xpbmVzID8gJ1xcXFx4MDAtXFxcXHgwOVxcXFx4MEJcXFxceDBDXFxcXHgwRS1cXFxceDFGXFxcXHg3RicgOiAnXFxcXHgwMC1cXFxceDFGXFxcXHg3Ric7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuYmxhY2tsaXN0KHN0ciwgY2hhcnMpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3Iud2hpdGVsaXN0ID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1teJyArIGNoYXJzICsgJ10rJywgJ2cnKSwgJycpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuYmxhY2tsaXN0ID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1snICsgY2hhcnMgKyAnXSsnLCAnZycpLCAnJyk7XG4gICAgfTtcblxuICAgIHZhciBkZWZhdWx0X25vcm1hbGl6ZV9lbWFpbF9vcHRpb25zID0ge1xuICAgICAgICBsb3dlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlbW92ZV9kb3RzOiB0cnVlLFxuICAgICAgICByZW1vdmVfZXh0ZW5zaW9uOiB0cnVlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5ub3JtYWxpemVFbWFpbCA9IGZ1bmN0aW9uIChlbWFpbCwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF9ub3JtYWxpemVfZW1haWxfb3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzRW1haWwoZW1haWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcnRzID0gZW1haWwuc3BsaXQoJ0AnLCAyKTtcbiAgICAgICAgcGFydHNbMV0gPSBwYXJ0c1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAocGFydHNbMV0gPT09ICdnbWFpbC5jb20nIHx8IHBhcnRzWzFdID09PSAnZ29vZ2xlbWFpbC5jb20nKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZW1vdmVfZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgcGFydHNbMF0gPSBwYXJ0c1swXS5zcGxpdCgnKycpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVtb3ZlX2RvdHMpIHtcbiAgICAgICAgICAgICAgICBwYXJ0c1swXSA9IHBhcnRzWzBdLnJlcGxhY2UoL1xcLi9nLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXBhcnRzWzBdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHBhcnRzWzFdID0gJ2dtYWlsLmNvbSc7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sb3dlcmNhc2UpIHtcbiAgICAgICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydHMuam9pbignQCcpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBtZXJnZShvYmosIGRlZmF1bHRzKSB7XG4gICAgICAgIG9iaiA9IG9iaiB8fCB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbmN5UmVnZXgob3B0aW9ucykge1xuICAgICAgICB2YXIgc3ltYm9sID0gJyhcXFxcJyArIG9wdGlvbnMuc3ltYm9sLnJlcGxhY2UoL1xcLi9nLCAnXFxcXC4nKSArICcpJyArIChvcHRpb25zLnJlcXVpcmVfc3ltYm9sID8gJycgOiAnPycpXG4gICAgICAgICAgICAsIG5lZ2F0aXZlID0gJy0/J1xuICAgICAgICAgICAgLCB3aG9sZV9kb2xsYXJfYW1vdW50X3dpdGhvdXRfc2VwID0gJ1sxLTldXFxcXGQqJ1xuICAgICAgICAgICAgLCB3aG9sZV9kb2xsYXJfYW1vdW50X3dpdGhfc2VwID0gJ1sxLTldXFxcXGR7MCwyfShcXFxcJyArIG9wdGlvbnMudGhvdXNhbmRzX3NlcGFyYXRvciArICdcXFxcZHszfSkqJ1xuICAgICAgICAgICAgLCB2YWxpZF93aG9sZV9kb2xsYXJfYW1vdW50cyA9IFsnMCcsIHdob2xlX2RvbGxhcl9hbW91bnRfd2l0aG91dF9zZXAsIHdob2xlX2RvbGxhcl9hbW91bnRfd2l0aF9zZXBdXG4gICAgICAgICAgICAsIHdob2xlX2RvbGxhcl9hbW91bnQgPSAnKCcgKyB2YWxpZF93aG9sZV9kb2xsYXJfYW1vdW50cy5qb2luKCd8JykgKyAnKT8nXG4gICAgICAgICAgICAsIGRlY2ltYWxfYW1vdW50ID0gJyhcXFxcJyArIG9wdGlvbnMuZGVjaW1hbF9zZXBhcmF0b3IgKyAnXFxcXGR7Mn0pPyc7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gd2hvbGVfZG9sbGFyX2Ftb3VudCArIGRlY2ltYWxfYW1vdW50O1xuICAgICAgICAvLyBkZWZhdWx0IGlzIG5lZ2F0aXZlIHNpZ24gYmVmb3JlIHN5bWJvbCwgYnV0IHRoZXJlIGFyZSB0d28gb3RoZXIgb3B0aW9ucyAoYmVzaWRlcyBwYXJlbnMpXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93X25lZ2F0aXZlcyAmJiAhb3B0aW9ucy5wYXJlbnNfZm9yX25lZ2F0aXZlcykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmVnYXRpdmVfc2lnbl9hZnRlcl9kaWdpdHMpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuICs9IG5lZ2F0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5uZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHMpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbmVnYXRpdmUgKyBwYXR0ZXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNvdXRoIEFmcmljYW4gUmFuZCwgZm9yIGV4YW1wbGUsIHVzZXMgUiAxMjMgKHNwYWNlKSBhbmQgUi0xMjMgKG5vIHNwYWNlKVxuICAgICAgICBpZiAob3B0aW9ucy5hbGxvd19uZWdhdGl2ZV9zaWduX3BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gJyggKD8hXFxcXC0pKT8nICsgcGF0dGVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLmFsbG93X3NwYWNlX2FmdGVyX3N5bWJvbCkge1xuICAgICAgICAgICAgcGF0dGVybiA9ICcgPycgKyBwYXR0ZXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuYWxsb3dfc3BhY2VfYWZ0ZXJfZGlnaXRzKSB7XG4gICAgICAgICAgICBwYXR0ZXJuICs9ICcoICg/ISQpKT8nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnN5bWJvbF9hZnRlcl9kaWdpdHMpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gKz0gc3ltYm9sO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybiA9IHN5bWJvbCArIHBhdHRlcm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfbmVnYXRpdmVzKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wYXJlbnNfZm9yX25lZ2F0aXZlcykge1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAnKFxcXFwoJyArIHBhdHRlcm4gKyAnXFxcXCl8JyArIHBhdHRlcm4gKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghKG9wdGlvbnMubmVnYXRpdmVfc2lnbl9iZWZvcmVfZGlnaXRzIHx8IG9wdGlvbnMubmVnYXRpdmVfc2lnbl9hZnRlcl9kaWdpdHMpKSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IG5lZ2F0aXZlICsgcGF0dGVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAvLyBlbnN1cmUgdGhlcmUncyBhIGRvbGxhciBhbmQvb3IgZGVjaW1hbCBhbW91bnQsIGFuZCB0aGF0IGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIHNwYWNlIG9yIGEgbmVnYXRpdmUgc2lnbiBmb2xsb3dlZCBieSBhIHNwYWNlXG4gICAgICAgICAgICAnKD8hLT8gKSg/PS4qXFxcXGQpJyArXG4gICAgICAgICAgICBwYXR0ZXJuICtcbiAgICAgICAgICAgICckJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5pbml0KCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yO1xuXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIElOVkFMSURfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIHR5cGUgezB9IGJ1dCBmb3VuZCB0eXBlIHsxfVwiLFxuICAgIElOVkFMSURfRk9STUFUOiAgICAgICAgICAgICAgICAgICAgICAgICBcIk9iamVjdCBkaWRuJ3QgcGFzcyB2YWxpZGF0aW9uIGZvciBmb3JtYXQgezB9OiB7MX1cIixcbiAgICBFTlVNX01JU01BVENIOiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJObyBlbnVtIG1hdGNoIGZvcjogezB9XCIsXG4gICAgQU5ZX09GX01JU1NJTkc6ICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGF0YSBkb2VzIG5vdCBtYXRjaCBhbnkgc2NoZW1hcyBmcm9tICdhbnlPZidcIixcbiAgICBPTkVfT0ZfTUlTU0lORzogICAgICAgICAgICAgICAgICAgICAgICAgXCJEYXRhIGRvZXMgbm90IG1hdGNoIGFueSBzY2hlbWFzIGZyb20gJ29uZU9mJ1wiLFxuICAgIE9ORV9PRl9NVUxUSVBMRTogICAgICAgICAgICAgICAgICAgICAgICBcIkRhdGEgaXMgdmFsaWQgYWdhaW5zdCBtb3JlIHRoYW4gb25lIHNjaGVtYSBmcm9tICdvbmVPZidcIixcbiAgICBOT1RfUEFTU0VEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEYXRhIG1hdGNoZXMgc2NoZW1hIGZyb20gJ25vdCdcIixcblxuICAgIC8vIEFycmF5IGVycm9yc1xuICAgIEFSUkFZX0xFTkdUSF9TSE9SVDogICAgICAgICAgICAgICAgICAgICBcIkFycmF5IGlzIHRvbyBzaG9ydCAoezB9KSwgbWluaW11bSB7MX1cIixcbiAgICBBUlJBWV9MRU5HVEhfTE9ORzogICAgICAgICAgICAgICAgICAgICAgXCJBcnJheSBpcyB0b28gbG9uZyAoezB9KSwgbWF4aW11bSB7MX1cIixcbiAgICBBUlJBWV9VTklRVUU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcnJheSBpdGVtcyBhcmUgbm90IHVuaXF1ZSAoaW5kZXhlcyB7MH0gYW5kIHsxfSlcIixcbiAgICBBUlJBWV9BRERJVElPTkFMX0lURU1TOiAgICAgICAgICAgICAgICAgXCJBZGRpdGlvbmFsIGl0ZW1zIG5vdCBhbGxvd2VkXCIsXG5cbiAgICAvLyBOdW1lcmljIGVycm9yc1xuICAgIE1VTFRJUExFX09GOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlZhbHVlIHswfSBpcyBub3QgYSBtdWx0aXBsZSBvZiB7MX1cIixcbiAgICBNSU5JTVVNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJWYWx1ZSB7MH0gaXMgbGVzcyB0aGFuIG1pbmltdW0gezF9XCIsXG4gICAgTUlOSU1VTV9FWENMVVNJVkU6ICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWUgezB9IGlzIGVxdWFsIG9yIGxlc3MgdGhhbiBleGNsdXNpdmUgbWluaW11bSB7MX1cIixcbiAgICBNQVhJTVVNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJWYWx1ZSB7MH0gaXMgZ3JlYXRlciB0aGFuIG1heGltdW0gezF9XCIsXG4gICAgTUFYSU1VTV9FWENMVVNJVkU6ICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWUgezB9IGlzIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiBleGNsdXNpdmUgbWF4aW11bSB7MX1cIixcblxuICAgIC8vIE9iamVjdCBlcnJvcnNcbiAgICBPQkpFQ1RfUFJPUEVSVElFU19NSU5JTVVNOiAgICAgICAgICAgICAgXCJUb28gZmV3IHByb3BlcnRpZXMgZGVmaW5lZCAoezB9KSwgbWluaW11bSB7MX1cIixcbiAgICBPQkpFQ1RfUFJPUEVSVElFU19NQVhJTVVNOiAgICAgICAgICAgICAgXCJUb28gbWFueSBwcm9wZXJ0aWVzIGRlZmluZWQgKHswfSksIG1heGltdW0gezF9XCIsXG4gICAgT0JKRUNUX01JU1NJTkdfUkVRVUlSRURfUFJPUEVSVFk6ICAgICAgIFwiTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eTogezB9XCIsXG4gICAgT0JKRUNUX0FERElUSU9OQUxfUFJPUEVSVElFUzogICAgICAgICAgIFwiQWRkaXRpb25hbCBwcm9wZXJ0aWVzIG5vdCBhbGxvd2VkOiB7MH1cIixcbiAgICBPQkpFQ1RfREVQRU5ERU5DWV9LRVk6ICAgICAgICAgICAgICAgICAgXCJEZXBlbmRlbmN5IGZhaWxlZCAtIGtleSBtdXN0IGV4aXN0OiB7MH0gKGR1ZSB0byBrZXk6IHsxfSlcIixcblxuICAgIC8vIFN0cmluZyBlcnJvcnNcbiAgICBNSU5fTEVOR1RIOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgaXMgdG9vIHNob3J0ICh7MH0gY2hhcnMpLCBtaW5pbXVtIHsxfVwiLFxuICAgIE1BWF9MRU5HVEg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN0cmluZyBpcyB0b28gbG9uZyAoezB9IGNoYXJzKSwgbWF4aW11bSB7MX1cIixcbiAgICBQQVRURVJOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiB7MH06IHsxfVwiLFxuXG4gICAgLy8gU2NoZW1hIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgS0VZV09SRF9UWVBFX0VYUEVDVEVEOiAgICAgICAgICAgICAgICAgIFwiS2V5d29yZCAnezB9JyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICd7MX0nXCIsXG4gICAgS0VZV09SRF9VTkRFRklORURfU1RSSUNUOiAgICAgICAgICAgICAgIFwiS2V5d29yZCAnezB9JyBtdXN0IGJlIGRlZmluZWQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBLRVlXT1JEX1VORVhQRUNURUQ6ICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIGlzIG5vdCBleHBlY3RlZCB0byBhcHBlYXIgaW4gdGhlIHNjaGVtYVwiLFxuICAgIEtFWVdPUkRfTVVTVF9CRTogICAgICAgICAgICAgICAgICAgICAgICBcIktleXdvcmQgJ3swfScgbXVzdCBiZSB7MX1cIixcbiAgICBLRVlXT1JEX0RFUEVOREVOQ1k6ICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIHJlcXVpcmVzIGtleXdvcmQgJ3sxfSdcIixcbiAgICBLRVlXT1JEX1BBVFRFUk46ICAgICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIGlzIG5vdCBhIHZhbGlkIFJlZ0V4cCBwYXR0ZXJuOiB7MX1cIixcbiAgICBLRVlXT1JEX1ZBTFVFX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgXCJFYWNoIGVsZW1lbnQgb2Yga2V5d29yZCAnezB9JyBhcnJheSBtdXN0IGJlIGEgJ3sxfSdcIixcbiAgICBVTktOT1dOX0ZPUk1BVDogICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZSBpcyBubyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBmb3JtYXQgJ3swfSdcIixcbiAgICBDVVNUT01fTU9ERV9GT1JDRV9QUk9QRVJUSUVTOiAgICAgICAgICAgXCJ7MH0gbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHByb3BlcnR5IGlmIHByZXNlbnRcIixcblxuICAgIC8vIFJlbW90ZSBlcnJvcnNcbiAgICBSRUZfVU5SRVNPTFZFRDogICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWZlcmVuY2UgaGFzIG5vdCBiZWVuIHJlc29sdmVkIGR1cmluZyBjb21waWxhdGlvbjogezB9XCIsXG4gICAgVU5SRVNPTFZBQkxFX1JFRkVSRU5DRTogICAgICAgICAgICAgICAgIFwiUmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogezB9XCIsXG4gICAgU0NIRU1BX05PVF9SRUFDSEFCTEU6ICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdG9yIHdhcyBub3QgYWJsZSB0byByZWFkIHNjaGVtYSB3aXRoIHVyaTogezB9XCIsXG4gICAgU0NIRU1BX1RZUEVfRVhQRUNURUQ6ICAgICAgICAgICAgICAgICAgIFwiU2NoZW1hIGlzIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgJ29iamVjdCdcIixcbiAgICBTQ0hFTUFfTk9UX0FOX09CSkVDVDogICAgICAgICAgICAgICAgICAgXCJTY2hlbWEgaXMgbm90IGFuIG9iamVjdDogezB9XCIsXG4gICAgQVNZTkNfVElNRU9VVDogICAgICAgICAgICAgICAgICAgICAgICAgIFwiezB9IGFzeW5jaHJvbm91cyB0YXNrKHMpIGhhdmUgdGltZWQgb3V0IGFmdGVyIHsxfSBtc1wiLFxuICAgIFBBUkVOVF9TQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6ICAgICAgICBcIlNjaGVtYSBmYWlsZWQgdG8gdmFsaWRhdGUgYWdhaW5zdCBpdHMgcGFyZW50IHNjaGVtYSwgc2VlIGlubmVyIGVycm9ycyBmb3IgZGV0YWlscy5cIixcbiAgICBSRU1PVEVfTk9UX1ZBTElEOiAgICAgICAgICAgICAgICAgICAgICAgXCJSZW1vdGUgcmVmZXJlbmNlIGRpZG4ndCBjb21waWxlIHN1Y2Nlc3NmdWxseTogezB9XCJcblxufTtcbiIsIi8qanNoaW50IG1heGxlbjogZmFsc2UqL1xuXG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZShcInZhbGlkYXRvclwiKTtcblxudmFyIEZvcm1hdFZhbGlkYXRvcnMgPSB7XG4gICAgXCJkYXRlXCI6IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgICAgICB2YXIgbWF0Y2hlcyA9IC9eKFswLTldezR9KS0oWzAtOV17Mn0pLShbMC05XXsyfSkkLy5leGVjKGRhdGUpO1xuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhciB5ZWFyID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgLy8gdmFyIG1vbnRoID0gbWF0Y2hlc1syXTtcbiAgICAgICAgLy8gdmFyIGRheSA9IG1hdGNoZXNbM107XG4gICAgICAgIGlmIChtYXRjaGVzWzJdIDwgXCIwMVwiIHx8IG1hdGNoZXNbMl0gPiBcIjEyXCIgfHwgbWF0Y2hlc1szXSA8IFwiMDFcIiB8fCBtYXRjaGVzWzNdID4gXCIzMVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBcImRhdGUtdGltZVwiOiBmdW5jdGlvbiAoZGF0ZVRpbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGF0ZS10aW1lIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgICAgICB2YXIgcyA9IGRhdGVUaW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJ0XCIpO1xuICAgICAgICBpZiAoIUZvcm1hdFZhbGlkYXRvcnMuZGF0ZShzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtYXRjaGVzID0gL14oWzAtOV17Mn0pOihbMC05XXsyfSk6KFswLTldezJ9KSguWzAtOV0rKT8oenwoWystXVswLTldezJ9OlswLTldezJ9KSkkLy5leGVjKHNbMV0pO1xuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhciBob3VyID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgLy8gdmFyIG1pbnV0ZSA9IG1hdGNoZXNbMl07XG4gICAgICAgIC8vIHZhciBzZWNvbmQgPSBtYXRjaGVzWzNdO1xuICAgICAgICAvLyB2YXIgZnJhY3Rpb24gPSBtYXRjaGVzWzRdO1xuICAgICAgICAvLyB2YXIgdGltZXpvbmUgPSBtYXRjaGVzWzVdO1xuICAgICAgICBpZiAobWF0Y2hlc1sxXSA+IFwiMjNcIiB8fCBtYXRjaGVzWzJdID4gXCI1OVwiIHx8IG1hdGNoZXNbM10gPiBcIjU5XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFwiZW1haWxcIjogZnVuY3Rpb24gKGVtYWlsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW1haWwgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNFbWFpbChlbWFpbCwgeyBcInJlcXVpcmVfdGxkXCI6IHRydWUgfSk7XG4gICAgfSxcbiAgICBcImhvc3RuYW1lXCI6IGZ1bmN0aW9uIChob3N0bmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIGhvc3RuYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvKlxuICAgICAgICAgICAgaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI2FuY2hvcjExNFxuICAgICAgICAgICAgQSBzdHJpbmcgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCB0aGlzIGF0dHJpYnV0ZSBpZiBpdCBpcyBhIHZhbGlkXG4gICAgICAgICAgICByZXByZXNlbnRhdGlvbiBmb3IgYW4gSW50ZXJuZXQgaG9zdCBuYW1lLCBhcyBkZWZpbmVkIGJ5IFJGQyAxMDM0LCBzZWN0aW9uIDMuMSBbUkZDMTAzNF0uXG5cbiAgICAgICAgICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzEwMzQjc2VjdGlvbi0zLjVcblxuICAgICAgICAgICAgPGRpZ2l0PiA6Oj0gYW55IG9uZSBvZiB0aGUgdGVuIGRpZ2l0cyAwIHRocm91Z2ggOVxuICAgICAgICAgICAgdmFyIGRpZ2l0ID0gL1swLTldLztcblxuICAgICAgICAgICAgPGxldHRlcj4gOjo9IGFueSBvbmUgb2YgdGhlIDUyIGFscGhhYmV0aWMgY2hhcmFjdGVycyBBIHRocm91Z2ggWiBpbiB1cHBlciBjYXNlIGFuZCBhIHRocm91Z2ggeiBpbiBsb3dlciBjYXNlXG4gICAgICAgICAgICB2YXIgbGV0dGVyID0gL1thLXpBLVpdLztcblxuICAgICAgICAgICAgPGxldC1kaWc+IDo6PSA8bGV0dGVyPiB8IDxkaWdpdD5cbiAgICAgICAgICAgIHZhciBsZXREaWcgPSAvWzAtOWEtekEtWl0vO1xuXG4gICAgICAgICAgICA8bGV0LWRpZy1oeXA+IDo6PSA8bGV0LWRpZz4gfCBcIi1cIlxuICAgICAgICAgICAgdmFyIGxldERpZ0h5cCA9IC9bLTAtOWEtekEtWl0vO1xuXG4gICAgICAgICAgICA8bGRoLXN0cj4gOjo9IDxsZXQtZGlnLWh5cD4gfCA8bGV0LWRpZy1oeXA+IDxsZGgtc3RyPlxuICAgICAgICAgICAgdmFyIGxkaFN0ciA9IC9bLTAtOWEtekEtWl0rLztcblxuICAgICAgICAgICAgPGxhYmVsPiA6Oj0gPGxldHRlcj4gWyBbIDxsZGgtc3RyPiBdIDxsZXQtZGlnPiBdXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSAvW2EtekEtWl0oKFstMC05YS16QS1aXSspP1swLTlhLXpBLVpdKT8vO1xuXG4gICAgICAgICAgICA8c3ViZG9tYWluPiA6Oj0gPGxhYmVsPiB8IDxzdWJkb21haW4+IFwiLlwiIDxsYWJlbD5cbiAgICAgICAgICAgIHZhciBzdWJkb21haW4gPSAvXlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KFxcLlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KSokLztcblxuICAgICAgICAgICAgPGRvbWFpbj4gOjo9IDxzdWJkb21haW4+IHwgXCIgXCJcbiAgICAgICAgICAgIHZhciBkb21haW4gPSBudWxsO1xuICAgICAgICAqL1xuICAgICAgICB2YXIgdmFsaWQgPSAvXlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KFxcLlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KSokLy50ZXN0KGhvc3RuYW1lKTtcbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAvLyB0aGUgc3VtIG9mIGFsbCBsYWJlbCBvY3RldHMgYW5kIGxhYmVsIGxlbmd0aHMgaXMgbGltaXRlZCB0byAyNTUuXG4gICAgICAgICAgICBpZiAoaG9zdG5hbWUubGVuZ3RoID4gMjU1KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAgICAgLy8gRWFjaCBub2RlIGhhcyBhIGxhYmVsLCB3aGljaCBpcyB6ZXJvIHRvIDYzIG9jdGV0cyBpbiBsZW5ndGhcbiAgICAgICAgICAgIHZhciBsYWJlbHMgPSBob3N0bmFtZS5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKykgeyBpZiAobGFiZWxzW2ldLmxlbmd0aCA+IDYzKSB7IHJldHVybiBmYWxzZTsgfSB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH0sXG4gICAgXCJob3N0LW5hbWVcIjogZnVuY3Rpb24gKGhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBGb3JtYXRWYWxpZGF0b3JzLmhvc3RuYW1lLmNhbGwodGhpcywgaG9zdG5hbWUpO1xuICAgIH0sXG4gICAgXCJpcHY0XCI6IGZ1bmN0aW9uIChpcHY0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXB2NCAhPT0gXCJzdHJpbmdcIikgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICByZXR1cm4gdmFsaWRhdG9yLmlzSVAoaXB2NCwgNCk7XG4gICAgfSxcbiAgICBcImlwdjZcIjogZnVuY3Rpb24gKGlwdjYpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpcHY2ICE9PSBcInN0cmluZ1wiKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNJUChpcHY2LCA2KTtcbiAgICB9LFxuICAgIFwicmVnZXhcIjogZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgUmVnRXhwKHN0cik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBcInVyaVwiOiBmdW5jdGlvbiAodXJpKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RyaWN0VXJpcykge1xuICAgICAgICAgICAgcmV0dXJuIEZvcm1hdFZhbGlkYXRvcnNbXCJzdHJpY3QtdXJpXCJdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3phZ2dpbm8vei1zY2hlbWEvaXNzdWVzLzE4XG4gICAgICAgIC8vIFJlZ0V4cCBmcm9tIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQlxuICAgICAgICByZXR1cm4gdHlwZW9mIHVyaSAhPT0gXCJzdHJpbmdcIiB8fCBSZWdFeHAoXCJeKChbXjovPyNdKyk6KT8oLy8oW14vPyNdKikpPyhbXj8jXSopKFxcXFw/KFteI10qKSk/KCMoLiopKT9cIikudGVzdCh1cmkpO1xuICAgIH0sXG4gICAgXCJzdHJpY3QtdXJpXCI6IGZ1bmN0aW9uICh1cmkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1cmkgIT09IFwic3RyaW5nXCIgfHwgdmFsaWRhdG9yLmlzVVJMKHVyaSk7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGb3JtYXRWYWxpZGF0b3JzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBGb3JtYXRWYWxpZGF0b3JzICA9IHJlcXVpcmUoXCIuL0Zvcm1hdFZhbGlkYXRvcnNcIiksXG4gICAgUmVwb3J0ICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9SZXBvcnRcIiksXG4gICAgVXRpbHMgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxudmFyIEpzb25WYWxpZGF0b3JzID0ge1xuICAgIG11bHRpcGxlT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjEuMlxuICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKGpzb24gLyBzY2hlbWEubXVsdGlwbGVPZikgIT09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJNVUxUSVBMRV9PRlwiLCBbanNvbiwgc2NoZW1hLm11bHRpcGxlT2ZdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtYXhpbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4yLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoanNvbiA+IHNjaGVtYS5tYXhpbXVtKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUFYSU1VTVwiLCBbanNvbiwgc2NoZW1hLm1heGltdW1dLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGpzb24gPj0gc2NoZW1hLm1heGltdW0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJNQVhJTVVNX0VYQ0xVU0lWRVwiLCBbanNvbiwgc2NoZW1hLm1heGltdW1dLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gbWF4aW11bVxuICAgIH0sXG4gICAgbWluaW11bTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjEuMy4yXG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGpzb24gPCBzY2hlbWEubWluaW11bSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk1JTklNVU1cIiwgW2pzb24sIHNjaGVtYS5taW5pbXVtXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChqc29uIDw9IHNjaGVtYS5taW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUlOSU1VTV9FWENMVVNJVkVcIiwgW2pzb24sIHNjaGVtYS5taW5pbXVtXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZXhjbHVzaXZlTWluaW11bTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjb3ZlcmVkIGluIG1pbmltdW1cbiAgICB9LFxuICAgIG1heExlbmd0aDogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjIuMS4yXG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVdGlscy51Y3MyZGVjb2RlKGpzb24pLmxlbmd0aCA+IHNjaGVtYS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk1BWF9MRU5HVEhcIiwgW2pzb24ubGVuZ3RoLCBzY2hlbWEubWF4TGVuZ3RoXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWluTGVuZ3RoOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4yLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFV0aWxzLnVjczJkZWNvZGUoanNvbikubGVuZ3RoIDwgc2NoZW1hLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUlOX0xFTkdUSFwiLCBbanNvbi5sZW5ndGgsIHNjaGVtYS5taW5MZW5ndGhdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4zLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJlZ0V4cChzY2hlbWEucGF0dGVybikudGVzdChqc29uKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlBBVFRFUk5cIiwgW3NjaGVtYS5wYXR0ZXJuLCBqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWRkaXRpb25hbEl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4xLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIHZhbHVlIG9mIFwiYWRkaXRpb25hbEl0ZW1zXCIgaXMgYm9vbGVhbiB2YWx1ZSBmYWxzZSBhbmQgdGhlIHZhbHVlIG9mIFwiaXRlbXNcIiBpcyBhbiBhcnJheSxcbiAgICAgICAgLy8gdGhlIGpzb24gaXMgdmFsaWQgaWYgaXRzIHNpemUgaXMgbGVzcyB0aGFuLCBvciBlcXVhbCB0bywgdGhlIHNpemUgb2YgXCJpdGVtc1wiLlxuICAgICAgICBpZiAoc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gZmFsc2UgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICBpZiAoanNvbi5sZW5ndGggPiBzY2hlbWEuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiQVJSQVlfQURESVRJT05BTF9JVEVNU1wiLCBudWxsLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBpdGVtczogZnVuY3Rpb24gKCkgeyAvKnJlcG9ydCwgc2NoZW1hLCBqc29uKi9cbiAgICAgICAgLy8gY292ZXJlZCBpbiBhZGRpdGlvbmFsSXRlbXNcbiAgICB9LFxuICAgIG1heEl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4yLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24ubGVuZ3RoID4gc2NoZW1hLm1heEl0ZW1zKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9MRU5HVEhfTE9OR1wiLCBbanNvbi5sZW5ndGgsIHNjaGVtYS5tYXhJdGVtc10sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1pbkl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4zLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24ubGVuZ3RoIDwgc2NoZW1hLm1pbkl0ZW1zKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9MRU5HVEhfU0hPUlRcIiwgW2pzb24ubGVuZ3RoLCBzY2hlbWEubWluSXRlbXNdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB1bmlxdWVJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuNC4yXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEudW5pcXVlSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNVbmlxdWVBcnJheShqc29uLCBtYXRjaGVzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9VTklRVUVcIiwgbWF0Y2hlcywgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4UHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMS4yXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoanNvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIga2V5c0NvdW50ID0gT2JqZWN0LmtleXMoanNvbikubGVuZ3RoO1xuICAgICAgICBpZiAoa2V5c0NvdW50ID4gc2NoZW1hLm1heFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9CSkVDVF9QUk9QRVJUSUVTX01BWElNVU1cIiwgW2tleXNDb3VudCwgc2NoZW1hLm1heFByb3BlcnRpZXNdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5Qcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC4yLjJcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhqc29uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzQ291bnQgPSBPYmplY3Qua2V5cyhqc29uKS5sZW5ndGg7XG4gICAgICAgIGlmIChrZXlzQ291bnQgPCBzY2hlbWEubWluUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiT0JKRUNUX1BST1BFUlRJRVNfTUlOSU1VTVwiLCBba2V5c0NvdW50LCBzY2hlbWEubWluUHJvcGVydGllc10sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJlcXVpcmVkOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC4zLjJcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhqc29uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZHggPSBzY2hlbWEucmVxdWlyZWQubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciByZXF1aXJlZFByb3BlcnR5TmFtZSA9IHNjaGVtYS5yZXF1aXJlZFtpZHhdO1xuICAgICAgICAgICAgaWYgKGpzb25bcmVxdWlyZWRQcm9wZXJ0eU5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJPQkpFQ1RfTUlTU0lOR19SRVFVSVJFRF9QUk9QRVJUWVwiLCBbcmVxdWlyZWRQcm9wZXJ0eU5hbWVdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gcHJvcGVydGllcyBhbmQgcGF0dGVyblByb3BlcnRpZXNcbiAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgJiYgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBKc29uVmFsaWRhdG9ycy5wcm9wZXJ0aWVzLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIGpzb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gcHJvcGVydGllc1xuICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIEpzb25WYWxpZGF0b3JzLnByb3BlcnRpZXMuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSwganNvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByb3BlcnRpZXM6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjQuMlxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKGpzb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBzY2hlbWEucHJvcGVydGllcyAhPT0gdW5kZWZpbmVkID8gc2NoZW1hLnByb3BlcnRpZXMgOiB7fTtcbiAgICAgICAgdmFyIHBhdHRlcm5Qcm9wZXJ0aWVzID0gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQgPyBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgOiB7fTtcbiAgICAgICAgaWYgKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBzZXQgb2YgdGhlIGpzb24gdG8gdmFsaWRhdGUuXG4gICAgICAgICAgICB2YXIgcyA9IE9iamVjdC5rZXlzKGpzb24pO1xuICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHNldCBmcm9tIFwicHJvcGVydGllc1wiLlxuICAgICAgICAgICAgdmFyIHAgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIuXG4gICAgICAgICAgICB2YXIgcHAgPSBPYmplY3Qua2V5cyhwYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgICAgICAvLyByZW1vdmUgZnJvbSBcInNcIiBhbGwgZWxlbWVudHMgb2YgXCJwXCIsIGlmIGFueTtcbiAgICAgICAgICAgIHMgPSBVdGlscy5kaWZmZXJlbmNlKHMsIHApO1xuICAgICAgICAgICAgLy8gZm9yIGVhY2ggcmVnZXggaW4gXCJwcFwiLCByZW1vdmUgYWxsIGVsZW1lbnRzIG9mIFwic1wiIHdoaWNoIHRoaXMgcmVnZXggbWF0Y2hlcy5cbiAgICAgICAgICAgIHZhciBpZHggPSBwcC5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnRXhwID0gUmVnRXhwKHBwW2lkeF0pLFxuICAgICAgICAgICAgICAgICAgICBpZHgyID0gcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVnRXhwLnRlc3Qoc1tpZHgyXSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuc3BsaWNlKGlkeDIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiBvZiB0aGUganNvbiBzdWNjZWVkcyBpZiwgYWZ0ZXIgdGhlc2UgdHdvIHN0ZXBzLCBzZXQgXCJzXCIgaXMgZW1wdHkuXG4gICAgICAgICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gYXNzdW1lQWRkaXRpb25hbCBjYW4gYmUgYW4gYXJyYXkgb2YgYWxsb3dlZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgdmFyIGlkeDMgPSB0aGlzLm9wdGlvbnMuYXNzdW1lQWRkaXRpb25hbC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGlkeDMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlkeDMtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlvID0gcy5pbmRleE9mKHRoaXMub3B0aW9ucy5hc3N1bWVBZGRpdGlvbmFsW2lkeDNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnNwbGljZShpbywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJPQkpFQ1RfQURESVRJT05BTF9QUk9QRVJUSUVTXCIsIFtzXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuNS4yXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoanNvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyksXG4gICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgYWxsIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgdmFyIGRlcGVuZGVuY3lOYW1lID0ga2V5c1tpZHhdO1xuICAgICAgICAgICAgaWYgKGpzb25bZGVwZW5kZW5jeU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlcGVuZGVuY3lEZWZpbml0aW9uID0gc2NoZW1hLmRlcGVuZGVuY2llc1tkZXBlbmRlbmN5TmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhkZXBlbmRlbmN5RGVmaW5pdGlvbikgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZGVwZW5kZW5jeSBpcyBhIHNjaGVtYSwgdmFsaWRhdGUgYWdhaW5zdCB0aGlzIHNjaGVtYVxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBkZXBlbmRlbmN5RGVmaW5pdGlvbiwganNvbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZGVwZW5kZW5jeSBpcyBhbiBhcnJheSwgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYWxsIHByb3BlcnRpZXMgaW4gdGhpcyBhcnJheVxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4MiA9IGRlcGVuZGVuY3lEZWZpbml0aW9uLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVpcmVkUHJvcGVydHlOYW1lID0gZGVwZW5kZW5jeURlZmluaXRpb25baWR4Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbltyZXF1aXJlZFByb3BlcnR5TmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9CSkVDVF9ERVBFTkRFTkNZX0tFWVwiLCBbcmVxdWlyZWRQcm9wZXJ0eU5hbWUsIGRlcGVuZGVuY3lOYW1lXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZW51bTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMS4yXG4gICAgICAgIHZhciBtYXRjaCA9IGZhbHNlLFxuICAgICAgICAgICAgaWR4ID0gc2NoZW1hLmVudW0ubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGlmIChVdGlscy5hcmVFcXVhbChqc29uLCBzY2hlbWEuZW51bVtpZHhdKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2ggPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJFTlVNX01JU01BVENIXCIsIFtqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLypcbiAgICB0eXBlOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS4yLjJcbiAgICAgICAgLy8gdHlwZSBpcyBoYW5kbGVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZCBzbyBpZ25vcmVcbiAgICB9LFxuICAgICovXG4gICAgYWxsT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjMuMlxuICAgICAgICB2YXIgaWR4ID0gc2NoZW1hLmFsbE9mLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRhdGVSZXN1bHQgPSBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuYWxsT2ZbaWR4XSwganNvbik7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrT25GaXJzdEVycm9yICYmIHZhbGlkYXRlUmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhbnlPZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNC4yXG4gICAgICAgIHZhciBzdWJSZXBvcnRzID0gW10sXG4gICAgICAgICAgICBwYXNzZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGlkeCA9IHNjaGVtYS5hbnlPZi5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKGlkeC0tICYmIHBhc3NlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhciBzdWJSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICBzdWJSZXBvcnRzLnB1c2goc3ViUmVwb3J0KTtcbiAgICAgICAgICAgIHBhc3NlZCA9IGV4cG9ydHMudmFsaWRhdGUuY2FsbCh0aGlzLCBzdWJSZXBvcnQsIHNjaGVtYS5hbnlPZltpZHhdLCBqc29uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXNzZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBTllfT0ZfTUlTU0lOR1wiLCB1bmRlZmluZWQsIHN1YlJlcG9ydHMsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG9uZU9mOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS41LjJcbiAgICAgICAgdmFyIHBhc3NlcyA9IDAsXG4gICAgICAgICAgICBzdWJSZXBvcnRzID0gW10sXG4gICAgICAgICAgICBpZHggPSBzY2hlbWEub25lT2YubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIHN1YlJlcG9ydCA9IG5ldyBSZXBvcnQocmVwb3J0LCB7IG1heEVycm9yczogMSB9KTtcbiAgICAgICAgICAgIHN1YlJlcG9ydHMucHVzaChzdWJSZXBvcnQpO1xuICAgICAgICAgICAgaWYgKGV4cG9ydHMudmFsaWRhdGUuY2FsbCh0aGlzLCBzdWJSZXBvcnQsIHNjaGVtYS5vbmVPZltpZHhdLCBqc29uKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHBhc3NlcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhc3NlcyA9PT0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiT05FX09GX01JU1NJTkdcIiwgdW5kZWZpbmVkLCBzdWJSZXBvcnRzLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhc3NlcyA+IDEpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9ORV9PRl9NVUxUSVBMRVwiLCBudWxsLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjYuMlxuICAgICAgICB2YXIgc3ViUmVwb3J0ID0gbmV3IFJlcG9ydChyZXBvcnQpO1xuICAgICAgICBpZiAoZXhwb3J0cy52YWxpZGF0ZS5jYWxsKHRoaXMsIHN1YlJlcG9ydCwgc2NoZW1hLm5vdCwganNvbikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk5PVF9QQVNTRURcIiwgbnVsbCwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGVmaW5pdGlvbnM6IGZ1bmN0aW9uICgpIHsgLypyZXBvcnQsIHNjaGVtYSwganNvbiovXG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNy4yXG4gICAgICAgIC8vIG5vdGhpbmcgdG8gZG8gaGVyZVxuICAgIH0sXG4gICAgZm9ybWF0OiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjcuMlxuICAgICAgICB2YXIgZm9ybWF0VmFsaWRhdG9yRm4gPSBGb3JtYXRWYWxpZGF0b3JzW3NjaGVtYS5mb3JtYXRdO1xuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdFZhbGlkYXRvckZuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRWYWxpZGF0b3JGbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBhc3luY1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRBc3luY1Rhc2soZm9ybWF0VmFsaWRhdG9yRm4sIFtqc29uXSwgZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJJTlZBTElEX0ZPUk1BVFwiLCBbc2NoZW1hLmZvcm1hdCwganNvbl0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3luY1xuICAgICAgICAgICAgICAgIGlmIChmb3JtYXRWYWxpZGF0b3JGbi5jYWxsKHRoaXMsIGpzb24pICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIklOVkFMSURfRk9STUFUXCIsIFtzY2hlbWEuZm9ybWF0LCBqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVVua25vd25Gb3JtYXRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJVTktOT1dOX0ZPUk1BVFwiLCBbc2NoZW1hLmZvcm1hdF0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgcmVjdXJzZUFycmF5ID0gZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjguMlxuXG4gICAgdmFyIGlkeCA9IGpzb24ubGVuZ3RoO1xuXG4gICAgLy8gSWYgXCJpdGVtc1wiIGlzIGFuIGFycmF5LCB0aGlzIHNpdHVhdGlvbiwgdGhlIHNjaGVtYSBkZXBlbmRzIG9uIHRoZSBpbmRleDpcbiAgICAvLyBpZiB0aGUgaW5kZXggaXMgbGVzcyB0aGFuLCBvciBlcXVhbCB0bywgdGhlIHNpemUgb2YgXCJpdGVtc1wiLFxuICAgIC8vIHRoZSBjaGlsZCBpbnN0YW5jZSBtdXN0IGJlIHZhbGlkIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgc2NoZW1hIGluIHRoZSBcIml0ZW1zXCIgYXJyYXk7XG4gICAgLy8gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIHZhbGlkIGFnYWluc3QgdGhlIHNjaGVtYSBkZWZpbmVkIGJ5IFwiYWRkaXRpb25hbEl0ZW1zXCIuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgLy8gZXF1YWwgdG8gZG9lc250IG1ha2Ugc2Vuc2UgaGVyZVxuICAgICAgICAgICAgaWYgKGlkeCA8IHNjaGVtYS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuaXRlbXNbaWR4XSwganNvbltpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbWlnaHQgYmUgYm9vbGVhbiwgc28gY2hlY2sgdGhhdCBpdCdzIGFuIG9iamVjdFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywganNvbltpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEuaXRlbXMgPT09IFwib2JqZWN0XCIpIHtcblxuICAgICAgICAvLyBJZiBpdGVtcyBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgY2hpbGQgaW5zdGFuY2UgbXVzdCBiZSB2YWxpZCBhZ2FpbnN0IHRoaXMgc2NoZW1hLFxuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIGl0cyBpbmRleCwgYW5kIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIFwiYWRkaXRpb25hbEl0ZW1zXCIuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuaXRlbXMsIGpzb25baWR4XSk7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgfVxufTtcblxudmFyIHJlY3Vyc2VPYmplY3QgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uOC4zXG5cbiAgICAvLyBJZiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIgaXMgYWJzZW50LCBpdCBpcyBjb25zaWRlcmVkIHByZXNlbnQgd2l0aCBhbiBlbXB0eSBzY2hlbWEgYXMgYSB2YWx1ZS5cbiAgICAvLyBJbiBhZGRpdGlvbiwgYm9vbGVhbiB2YWx1ZSB0cnVlIGlzIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBhbiBlbXB0eSBzY2hlbWEuXG4gICAgdmFyIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmIChhZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdHJ1ZSB8fCBhZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuXG4gICAgLy8gcCAtIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInByb3BlcnRpZXNcIi5cbiAgICB2YXIgcCA9IHNjaGVtYS5wcm9wZXJ0aWVzID8gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpIDogW107XG5cbiAgICAvLyBwcCAtIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIuIEVsZW1lbnRzIG9mIHRoaXMgc2V0IHdpbGwgYmUgY2FsbGVkIHJlZ2V4ZXMgZm9yIGNvbnZlbmllbmNlLlxuICAgIHZhciBwcCA9IHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyA/IE9iamVjdC5rZXlzKHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcykgOiBbXTtcblxuICAgIC8vIG0gLSBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgY2hpbGQuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhqc29uKSxcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIG0gPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0ganNvblttXTtcblxuICAgICAgICAvLyBzIC0gVGhlIHNldCBvZiBzY2hlbWFzIGZvciB0aGUgY2hpbGQgaW5zdGFuY2UuXG4gICAgICAgIHZhciBzID0gW107XG5cbiAgICAgICAgLy8gMS4gSWYgc2V0IFwicFwiIGNvbnRhaW5zIHZhbHVlIFwibVwiLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHNjaGVtYSBpbiBcInByb3BlcnRpZXNcIiBpcyBhZGRlZCB0byBcInNcIi5cbiAgICAgICAgaWYgKHAuaW5kZXhPZihtKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHMucHVzaChzY2hlbWEucHJvcGVydGllc1ttXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCByZWdleCBpbiBcInBwXCIsIGlmIGl0IG1hdGNoZXMgXCJtXCIgc3VjY2Vzc2Z1bGx5LCB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWEgaW4gXCJwYXR0ZXJuUHJvcGVydGllc1wiIGlzIGFkZGVkIHRvIFwic1wiLlxuICAgICAgICB2YXIgaWR4MiA9IHBwLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgdmFyIHJlZ2V4U3RyaW5nID0gcHBbaWR4Ml07XG4gICAgICAgICAgICBpZiAoUmVnRXhwKHJlZ2V4U3RyaW5nKS50ZXN0KG0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcy5wdXNoKHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1tyZWdleFN0cmluZ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVGhlIHNjaGVtYSBkZWZpbmVkIGJ5IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIiBpcyBhZGRlZCB0byBcInNcIiBpZiBhbmQgb25seSBpZiwgYXQgdGhpcyBzdGFnZSwgXCJzXCIgaXMgZW1wdHkuXG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCAmJiBhZGRpdGlvbmFsUHJvcGVydGllcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHMucHVzaChhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBhcmUgcGFzc2luZyB0ZXN0cyBldmVuIHdpdGhvdXQgdGhpcyBhc3NlcnQgYmVjYXVzZSB0aGlzIGlzIGNvdmVyZWQgYnkgcHJvcGVydGllcyBjaGVja1xuICAgICAgICAvLyBpZiBzIGlzIGVtcHR5IGluIHRoaXMgc3RhZ2UsIG5vIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIGFyZSBhbGxvd2VkXG4gICAgICAgIC8vIHJlcG9ydC5leHBlY3Qocy5sZW5ndGggIT09IDAsICdFMDAxJywgbSk7XG5cbiAgICAgICAgLy8gSW5zdGFuY2UgcHJvcGVydHkgdmFsdWUgbXVzdCBwYXNzIGFsbCBzY2hlbWFzIGZyb20gc1xuICAgICAgICBpZHgyID0gcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgyLS0pIHtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2gobSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzW2lkeDJdLCBwcm9wZXJ0eVZhbHVlKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuXG4gICAgcmVwb3J0LmNvbW1vbkVycm9yTWVzc2FnZSA9IFwiSlNPTl9PQkpFQ1RfVkFMSURBVElPTl9GQUlMRURcIjtcblxuICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBhbiBvYmplY3RcbiAgICB2YXIgdG8gPSBVdGlscy53aGF0SXMoc2NoZW1hKTtcbiAgICBpZiAodG8gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiU0NIRU1BX05PVF9BTl9PQkpFQ1RcIiwgW3RvXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBlbXB0eSwgZXZlcnl0aGluZyBpcyB2YWxpZCBhZ2FpbnN0IGVtcHR5IHNjaGVtYVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSwgc28gd2UgbmVlZCB0byByZW1lbWJlciBvdXIgcm9vdFxuICAgIHZhciBpc1Jvb3QgPSBmYWxzZTtcbiAgICBpZiAoIXJlcG9ydC5yb290U2NoZW1hKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBpc1Jvb3QgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZvbGxvdyBzY2hlbWEuJHJlZiBrZXlzXG4gICAgaWYgKHNjaGVtYS4kcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gYXZvaWQgaW5maW5pdGUgbG9vcCB3aXRoIG1heFJlZnNcbiAgICAgICAgdmFyIG1heFJlZnMgPSA5OTtcbiAgICAgICAgd2hpbGUgKHNjaGVtYS4kcmVmICYmIG1heFJlZnMgPiAwKSB7XG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5fXyRyZWZSZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlJFRl9VTlJFU09MVkVEXCIsIFtzY2hlbWEuJHJlZl0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5fXyRyZWZSZXNvbHZlZCA9PT0gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYS5fXyRyZWZSZXNvbHZlZDtcbiAgICAgICAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1heFJlZnMtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4UmVmcyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2lyY3VsYXIgZGVwZW5kZW5jeSBieSAkcmVmIHJlZmVyZW5jZXMhXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHlwZSBjaGVja2luZyBmaXJzdFxuICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMi4yXG4gICAgdmFyIGpzb25UeXBlID0gVXRpbHMud2hhdElzKGpzb24pO1xuICAgIGlmIChzY2hlbWEudHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoanNvblR5cGUgIT09IHNjaGVtYS50eXBlICYmIChqc29uVHlwZSAhPT0gXCJpbnRlZ2VyXCIgfHwgc2NoZW1hLnR5cGUgIT09IFwibnVtYmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiSU5WQUxJRF9UWVBFXCIsIFtzY2hlbWEudHlwZSwganNvblR5cGVdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnJlYWtPbkZpcnN0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZS5pbmRleE9mKGpzb25UeXBlKSA9PT0gLTEgJiYgKGpzb25UeXBlICE9PSBcImludGVnZXJcIiB8fCBzY2hlbWEudHlwZS5pbmRleE9mKFwibnVtYmVyXCIpID09PSAtMSkpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJJTlZBTElEX1RZUEVcIiwgW3NjaGVtYS50eXBlLCBqc29uVHlwZV0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm93IGl0ZXJhdGUgYWxsIHRoZSBrZXlzIGluIHNjaGVtYSBhbmQgZXhlY3V0ZSB2YWxpZGF0aW9uIG1ldGhvZHNcbiAgICB2YXIgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIGlmIChKc29uVmFsaWRhdG9yc1trZXlzW2lkeF1dKSB7XG4gICAgICAgICAgICBKc29uVmFsaWRhdG9yc1trZXlzW2lkeF1dLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIGpzb24pO1xuICAgICAgICAgICAgaWYgKHJlcG9ydC5lcnJvcnMubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvcikgeyBicmVhazsgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlcG9ydC5lcnJvcnMubGVuZ3RoID09PSAwIHx8IHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGpzb25UeXBlID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgIHJlY3Vyc2VBcnJheS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICAgICAgfSBlbHNlIGlmIChqc29uVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVjdXJzZU9iamVjdC5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdlIGRvbid0IG5lZWQgdGhlIHJvb3QgcG9pbnRlciBhbnltb3JlXG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgICByZXBvcnQucm9vdFNjaGVtYSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdmFsaWQganVzdCB0byBiZSBhYmxlIHRvIGJyZWFrIGF0IHNvbWUgY29kZSBwb2ludHNcbiAgICByZXR1cm4gcmVwb3J0LmVycm9ycy5sZW5ndGggPT09IDA7XG5cbn07XG4iLCIvLyBOdW1iZXIuaXNGaW5pdGUgcG9seWZpbGxcbi8vIGh0dHA6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLW51bWJlci5pc2Zpbml0ZVxuaWYgKHR5cGVvZiBOdW1iZXIuaXNGaW5pdGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIE51bWJlci5pc0Zpbml0ZSA9IGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgICAgIC8vIDEuIElmIFR5cGUobnVtYmVyKSBpcyBub3QgTnVtYmVyLCByZXR1cm4gZmFsc2UuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAyLiBJZiBudW1iZXIgaXMgTmFOLCAr4oieLCBvciDiiJLiiJ4sIHJldHVybiBmYWxzZS5cbiAgICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkgfHwgdmFsdWUgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRydWUuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGdldCAgICA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIEVycm9ycyA9IHJlcXVpcmUoXCIuL0Vycm9yc1wiKTtcbnZhciBVdGlscyAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxuZnVuY3Rpb24gUmVwb3J0KHBhcmVudE9yT3B0aW9ucywgcmVwb3J0T3B0aW9ucykge1xuICAgIHRoaXMucGFyZW50UmVwb3J0ID0gcGFyZW50T3JPcHRpb25zIGluc3RhbmNlb2YgUmVwb3J0ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPck9wdGlvbnMgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgIHRoaXMub3B0aW9ucyA9IHBhcmVudE9yT3B0aW9ucyBpbnN0YW5jZW9mIFJlcG9ydCA/XG4gICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9yT3B0aW9ucy5vcHRpb25zIDpcbiAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T3JPcHRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5yZXBvcnRPcHRpb25zID0gcmVwb3J0T3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgdGhpcy5wYXRoID0gW107XG4gICAgdGhpcy5hc3luY1Rhc2tzID0gW107XG59XG5cblJlcG9ydC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5hc3luY1Rhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgdGFza3MgcGVuZGluZywgY2FuJ3QgYW5zd2VyIGlzVmFsaWRcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPT09IDA7XG59O1xuXG5SZXBvcnQucHJvdG90eXBlLmFkZEFzeW5jVGFzayA9IGZ1bmN0aW9uIChmbiwgYXJncywgYXN5bmNUYXNrUmVzdWx0UHJvY2Vzc0ZuKSB7XG4gICAgdGhpcy5hc3luY1Rhc2tzLnB1c2goW2ZuLCBhcmdzLCBhc3luY1Rhc2tSZXN1bHRQcm9jZXNzRm5dKTtcbn07XG5cblJlcG9ydC5wcm90b3R5cGUucHJvY2Vzc0FzeW5jVGFza3MgPSBmdW5jdGlvbiAodGltZW91dCwgY2FsbGJhY2spIHtcblxuICAgIHZhciB2YWxpZGF0aW9uVGltZW91dCA9IHRpbWVvdXQgfHwgMjAwMCxcbiAgICAgICAgdGFza3NDb3VudCAgICAgICAgPSB0aGlzLmFzeW5jVGFza3MubGVuZ3RoLFxuICAgICAgICBpZHggICAgICAgICAgICAgICA9IHRhc2tzQ291bnQsXG4gICAgICAgIHRpbWVkT3V0ICAgICAgICAgID0gZmFsc2UsXG4gICAgICAgIHNlbGYgICAgICAgICAgICAgID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBzZWxmLmVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICAgICAgZXJyICAgPSB2YWxpZCA/IHVuZGVmaW5lZCA6IHNlbGYuZXJyb3JzO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB2YWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3BvbmQoYXN5bmNUYXNrUmVzdWx0UHJvY2Vzc0ZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXN5bmNUYXNrUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAodGltZWRPdXQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBhc3luY1Rhc2tSZXN1bHRQcm9jZXNzRm4oYXN5bmNUYXNrUmVzdWx0KTtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGFza3NDb3VudCA9PT0gMCB8fCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbmlzaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIHZhciB0YXNrID0gdGhpcy5hc3luY1Rhc2tzW2lkeF07XG4gICAgICAgIHRhc2tbMF0uYXBwbHkobnVsbCwgdGFza1sxXS5jb25jYXQocmVzcG9uZCh0YXNrWzJdKSkpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGFza3NDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYuYWRkRXJyb3IoXCJBU1lOQ19USU1FT1VUXCIsIFt0YXNrc0NvdW50LCB2YWxpZGF0aW9uVGltZW91dF0pO1xuICAgICAgICAgICAgY2FsbGJhY2soc2VsZi5lcnJvcnMsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sIHZhbGlkYXRpb25UaW1lb3V0KTtcblxufTtcblxuUmVwb3J0LnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXRoID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50UmVwb3J0KSB7XG4gICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCh0aGlzLnBhcmVudFJlcG9ydC5wYXRoKTtcbiAgICB9XG4gICAgcGF0aCA9IHBhdGguY29uY2F0KHRoaXMucGF0aCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlcG9ydFBhdGhBc0FycmF5ICE9PSB0cnVlKSB7XG4gICAgICAgIC8vIFNhbml0aXplIHRoZSBwYXRoIHNlZ21lbnRzIChodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxI3NlY3Rpb24tNClcbiAgICAgICAgcGF0aCA9IFwiIy9cIiArIHBhdGgubWFwKGZ1bmN0aW9uIChzZWdtZW50KSB7XG5cbiAgICAgICAgICAgIGlmIChVdGlscy5pc0Fic29sdXRlVXJpKHNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidXJpKFwiICsgc2VnbWVudCArIFwiKVwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VnbWVudC5yZXBsYWNlKC9cXH4vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXC8vZywgXCJ+MVwiKTtcbiAgICAgICAgfSkuam9pbihcIi9cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufTtcblxuUmVwb3J0LnByb3RvdHlwZS5nZXRTY2hlbWFJZCA9IGZ1bmN0aW9uICgpIHtcblxuICAgIGlmICghdGhpcy5yb290U2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgZXJyb3IgcGF0aCBhcyBhbiBhcnJheVxuICAgIHZhciBwYXRoID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50UmVwb3J0KSB7XG4gICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCh0aGlzLnBhcmVudFJlcG9ydC5wYXRoKTtcbiAgICB9XG4gICAgcGF0aCA9IHBhdGguY29uY2F0KHRoaXMucGF0aCk7XG5cbiAgICAvLyB0cnkgdG8gZmluZCBpZCBpbiB0aGUgZXJyb3IgcGF0aFxuICAgIHdoaWxlIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIG9iaiA9IGdldCh0aGlzLnJvb3RTY2hlbWEsIHBhdGgpO1xuICAgICAgICBpZiAob2JqICYmIG9iai5pZCkgeyByZXR1cm4gb2JqLmlkOyB9XG4gICAgICAgIHBhdGgucG9wKCk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGlkIG9mIHRoZSByb290XG4gICAgcmV0dXJuIHRoaXMucm9vdFNjaGVtYS5pZDtcbn07XG5cblJlcG9ydC5wcm90b3R5cGUuaGFzRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3JDb2RlLCBwYXJhbXMpIHtcbiAgICB2YXIgaWR4ID0gdGhpcy5lcnJvcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICBpZiAodGhpcy5lcnJvcnNbaWR4XS5jb2RlID09PSBlcnJvckNvZGUpIHtcbiAgICAgICAgICAgIC8vIGFzc3VtZSBtYXRjaFxuICAgICAgICAgICAgdmFyIG1hdGNoID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHBhcmFtcyB0b29cbiAgICAgICAgICAgIHZhciBpZHgyID0gdGhpcy5lcnJvcnNbaWR4XS5wYXJhbXMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVycm9yc1tpZHhdLnBhcmFtc1tpZHgyXSAhPT0gcGFyYW1zW2lkeDJdKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBtYXRjaCwgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGlmIChtYXRjaCkgeyByZXR1cm4gbWF0Y2g7IH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5SZXBvcnQucHJvdG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24gKGVycm9yQ29kZSwgcGFyYW1zLCBzdWJSZXBvcnRzLCBzY2hlbWFEZXNjcmlwdGlvbikge1xuICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPj0gdGhpcy5yZXBvcnRPcHRpb25zLm1heEVycm9ycykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFlcnJvckNvZGUpIHsgdGhyb3cgbmV3IEVycm9yKFwiTm8gZXJyb3JDb2RlIHBhc3NlZCBpbnRvIGFkZEVycm9yKClcIik7IH1cbiAgICBpZiAoIUVycm9yc1tlcnJvckNvZGVdKSB7IHRocm93IG5ldyBFcnJvcihcIk5vIGVycm9yTWVzc2FnZSBrbm93biBmb3IgY29kZSBcIiArIGVycm9yQ29kZSk7IH1cblxuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCBbXTtcblxuICAgIHZhciBpZHggPSBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBFcnJvcnNbZXJyb3JDb2RlXTtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIHdoYXRJcyA9IFV0aWxzLndoYXRJcyhwYXJhbXNbaWR4XSk7XG4gICAgICAgIHZhciBwYXJhbSA9ICh3aGF0SXMgPT09IFwib2JqZWN0XCIgfHwgd2hhdElzID09PSBcIm51bGxcIikgPyBKU09OLnN0cmluZ2lmeShwYXJhbXNbaWR4XSkgOiBwYXJhbXNbaWR4XTtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLnJlcGxhY2UoXCJ7XCIgKyBpZHggKyBcIn1cIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIHZhciBlcnIgPSB7XG4gICAgICAgIGNvZGU6IGVycm9yQ29kZSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgcGF0aDogdGhpcy5nZXRQYXRoKCksXG4gICAgICAgIHNjaGVtYUlkOiB0aGlzLmdldFNjaGVtYUlkKClcbiAgICB9O1xuXG4gICAgaWYgKHNjaGVtYURlc2NyaXB0aW9uKSB7XG4gICAgICAgIGVyci5kZXNjcmlwdGlvbiA9IHNjaGVtYURlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGlmIChzdWJSZXBvcnRzICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHN1YlJlcG9ydHMpKSB7XG4gICAgICAgICAgICBzdWJSZXBvcnRzID0gW3N1YlJlcG9ydHNdO1xuICAgICAgICB9XG4gICAgICAgIGVyci5pbm5lciA9IFtdO1xuICAgICAgICBpZHggPSBzdWJSZXBvcnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICB2YXIgc3ViUmVwb3J0ID0gc3ViUmVwb3J0c1tpZHhdLFxuICAgICAgICAgICAgICAgIGlkeDIgPSBzdWJSZXBvcnQuZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgyLS0pIHtcbiAgICAgICAgICAgICAgICBlcnIuaW5uZXIucHVzaChzdWJSZXBvcnQuZXJyb3JzW2lkeDJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyLmlubmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZXJyLmlubmVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lcnJvcnMucHVzaChlcnIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZXBvcnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIFJlcG9ydCAgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9SZXBvcnRcIik7XG52YXIgU2NoZW1hQ29tcGlsYXRpb24gICA9IHJlcXVpcmUoXCIuL1NjaGVtYUNvbXBpbGF0aW9uXCIpO1xudmFyIFNjaGVtYVZhbGlkYXRpb24gICAgPSByZXF1aXJlKFwiLi9TY2hlbWFWYWxpZGF0aW9uXCIpO1xudmFyIFV0aWxzICAgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxuZnVuY3Rpb24gZGVjb2RlSlNPTlBvaW50ZXIoc3RyKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1hcHBzYXdnLWpzb24tcG9pbnRlci0wNyNzZWN0aW9uLTNcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvflswLTFdL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBcIn4xXCIgPyBcIi9cIiA6IFwiflwiO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1vdGVQYXRoKHVyaSkge1xuICAgIHZhciBpbyA9IHVyaS5pbmRleE9mKFwiI1wiKTtcbiAgICByZXR1cm4gaW8gPT09IC0xID8gdXJpIDogdXJpLnNsaWNlKDAsIGlvKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVlcnlQYXRoKHVyaSkge1xuICAgIHZhciBpbyA9IHVyaS5pbmRleE9mKFwiI1wiKTtcbiAgICB2YXIgcmVzID0gaW8gPT09IC0xID8gdW5kZWZpbmVkIDogdXJpLnNsaWNlKGlvICsgMSk7XG4gICAgLy8gV0FSTjogZG8gbm90IHNsaWNlIHNsYXNoLCAjLyBtZWFucyB0YWtlIHJvb3QgYW5kIGdvIGRvd24gZnJvbSBpdFxuICAgIC8vIGlmIChyZXMgJiYgcmVzWzBdID09PSBcIi9cIikgeyByZXMgPSByZXMuc2xpY2UoMSk7IH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmaW5kSWQoc2NoZW1hLCBpZCkge1xuICAgIC8vIHByb2Nlc3Mgb25seSBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPT0gXCJvYmplY3RcIiB8fCBzY2hlbWEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vIGlkIG1lYW5zIHJvb3Qgc28gcmV0dXJuIGl0c2VsZlxuICAgIGlmICghaWQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmlkKSB7XG4gICAgICAgIGlmIChzY2hlbWEuaWQgPT09IGlkIHx8IHNjaGVtYS5pZFswXSA9PT0gXCIjXCIgJiYgc2NoZW1hLmlkLnN1YnN0cmluZygxKSA9PT0gaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaWR4LCByZXN1bHQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICBpZHggPSBzY2hlbWEubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRJZChzY2hlbWFbaWR4XSwgaWQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSk7XG4gICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBrID0ga2V5c1tpZHhdO1xuICAgICAgICAgICAgaWYgKGsuaW5kZXhPZihcIl9fJFwiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gZmluZElkKHNjaGVtYVtrXSwgaWQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydHMuY2FjaGVTY2hlbWFCeVVyaSA9IGZ1bmN0aW9uICh1cmksIHNjaGVtYSkge1xuICAgIHZhciByZW1vdGVQYXRoID0gZ2V0UmVtb3RlUGF0aCh1cmkpO1xuICAgIGlmIChyZW1vdGVQYXRoKSB7XG4gICAgICAgIHRoaXMuY2FjaGVbcmVtb3RlUGF0aF0gPSBzY2hlbWE7XG4gICAgfVxufTtcblxuZXhwb3J0cy5yZW1vdmVGcm9tQ2FjaGVCeVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgICB2YXIgcmVtb3RlUGF0aCA9IGdldFJlbW90ZVBhdGgodXJpKTtcbiAgICBpZiAocmVtb3RlUGF0aCkge1xuICAgICAgICBkZWxldGUgdGhpcy5jYWNoZVtyZW1vdGVQYXRoXTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmNoZWNrQ2FjaGVGb3JVcmkgPSBmdW5jdGlvbiAodXJpKSB7XG4gICAgdmFyIHJlbW90ZVBhdGggPSBnZXRSZW1vdGVQYXRoKHVyaSk7XG4gICAgcmV0dXJuIHJlbW90ZVBhdGggPyB0aGlzLmNhY2hlW3JlbW90ZVBhdGhdICE9IG51bGwgOiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuZ2V0U2NoZW1hID0gZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgc2NoZW1hID0gZXhwb3J0cy5nZXRTY2hlbWFCeVJlZmVyZW5jZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NoZW1hID0gZXhwb3J0cy5nZXRTY2hlbWFCeVVyaS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYTtcbn07XG5cbmV4cG9ydHMuZ2V0U2NoZW1hQnlSZWZlcmVuY2UgPSBmdW5jdGlvbiAocmVwb3J0LCBrZXkpIHtcbiAgICB2YXIgaSA9IHRoaXMucmVmZXJlbmNlQ2FjaGUubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVmZXJlbmNlQ2FjaGVbaV1bMF0gPT09IGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlQ2FjaGVbaV1bMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm90IGZvdW5kXG4gICAgdmFyIHNjaGVtYSA9IFV0aWxzLmNsb25lRGVlcChrZXkpO1xuICAgIHRoaXMucmVmZXJlbmNlQ2FjaGUucHVzaChba2V5LCBzY2hlbWFdKTtcbiAgICByZXR1cm4gc2NoZW1hO1xufTtcblxuZXhwb3J0cy5nZXRTY2hlbWFCeVVyaSA9IGZ1bmN0aW9uIChyZXBvcnQsIHVyaSwgcm9vdCkge1xuICAgIHZhciByZW1vdGVQYXRoID0gZ2V0UmVtb3RlUGF0aCh1cmkpLFxuICAgICAgICBxdWVyeVBhdGggPSBnZXRRdWVyeVBhdGgodXJpKSxcbiAgICAgICAgcmVzdWx0ID0gcmVtb3RlUGF0aCA/IHRoaXMuY2FjaGVbcmVtb3RlUGF0aF0gOiByb290O1xuXG4gICAgaWYgKHJlc3VsdCAmJiByZW1vdGVQYXRoKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gYXZvaWQgY29tcGlsaW5nIHNjaGVtYXMgaW4gYSByZWN1cnNpdmUgbG9vcFxuICAgICAgICB2YXIgY29tcGlsZVJlbW90ZSA9IHJlc3VsdCAhPT0gcm9vdDtcbiAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gY29tcGlsZSBhbmQgdmFsaWRhdGUgcmVzb2x2ZWQgc2NoZW1hIChpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkpXG4gICAgICAgIGlmIChjb21waWxlUmVtb3RlKSB7XG5cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2gocmVtb3RlUGF0aCk7XG5cbiAgICAgICAgICAgIHZhciByZW1vdGVSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICBpZiAoU2NoZW1hQ29tcGlsYXRpb24uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHJlbW90ZVJlcG9ydCwgcmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIFNjaGVtYVZhbGlkYXRpb24udmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZW1vdGVSZXBvcnQsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcmVtb3RlUmVwb3J0SXNWYWxpZCA9IHJlbW90ZVJlcG9ydC5pc1ZhbGlkKCk7XG4gICAgICAgICAgICBpZiAoIXJlbW90ZVJlcG9ydElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJSRU1PVEVfTk9UX1ZBTElEXCIsIFt1cmldLCByZW1vdGVSZXBvcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKCFyZW1vdGVSZXBvcnRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHQgJiYgcXVlcnlQYXRoKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IHF1ZXJ5UGF0aC5zcGxpdChcIi9cIik7XG4gICAgICAgIGZvciAodmFyIGlkeCA9IDAsIGxpbSA9IHBhcnRzLmxlbmd0aDsgcmVzdWx0ICYmIGlkeCA8IGxpbTsgaWR4KyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBkZWNvZGVKU09OUG9pbnRlcihwYXJ0c1tpZHhdKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IDApIHsgLy8gaXQncyBhbiBpZFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRJZChyZXN1bHQsIGtleSk7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBpdCdzIGEgcGF0aCBiZWhpbmQgaWRcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnRzLmdldFJlbW90ZVBhdGggPSBnZXRSZW1vdGVQYXRoO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBSZXBvcnQgICAgICA9IHJlcXVpcmUoXCIuL1JlcG9ydFwiKTtcbnZhciBTY2hlbWFDYWNoZSA9IHJlcXVpcmUoXCIuL1NjaGVtYUNhY2hlXCIpO1xudmFyIFV0aWxzICAgICAgID0gcmVxdWlyZShcIi4vVXRpbHNcIik7XG5cbmZ1bmN0aW9uIG1lcmdlUmVmZXJlbmNlKHNjb3BlLCByZWYpIHtcbiAgICBpZiAoVXRpbHMuaXNBYnNvbHV0ZVVyaShyZWYpKSB7XG4gICAgICAgIHJldHVybiByZWY7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZFNjb3BlID0gc2NvcGUuam9pbihcIlwiKSxcbiAgICAgICAgaXNTY29wZUFic29sdXRlID0gVXRpbHMuaXNBYnNvbHV0ZVVyaShqb2luZWRTY29wZSksXG4gICAgICAgIGlzU2NvcGVSZWxhdGl2ZSA9IFV0aWxzLmlzUmVsYXRpdmVVcmkoam9pbmVkU2NvcGUpLFxuICAgICAgICBpc1JlZlJlbGF0aXZlID0gVXRpbHMuaXNSZWxhdGl2ZVVyaShyZWYpLFxuICAgICAgICB0b1JlbW92ZTtcblxuICAgIGlmIChpc1Njb3BlQWJzb2x1dGUgJiYgaXNSZWZSZWxhdGl2ZSkge1xuICAgICAgICB0b1JlbW92ZSA9IGpvaW5lZFNjb3BlLm1hdGNoKC9cXC9bXlxcL10qJC8pO1xuICAgICAgICBpZiAodG9SZW1vdmUpIHtcbiAgICAgICAgICAgIGpvaW5lZFNjb3BlID0gam9pbmVkU2NvcGUuc2xpY2UoMCwgdG9SZW1vdmUuaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTY29wZVJlbGF0aXZlICYmIGlzUmVmUmVsYXRpdmUpIHtcbiAgICAgICAgam9pbmVkU2NvcGUgPSBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvUmVtb3ZlID0gam9pbmVkU2NvcGUubWF0Y2goL1teIy9dKyQvKTtcbiAgICAgICAgaWYgKHRvUmVtb3ZlKSB7XG4gICAgICAgICAgICBqb2luZWRTY29wZSA9IGpvaW5lZFNjb3BlLnNsaWNlKDAsIHRvUmVtb3ZlLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXMgPSBqb2luZWRTY29wZSArIHJlZjtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvIyMvLCBcIiNcIik7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZXMob2JqLCByZXN1bHRzLCBzY29wZSwgcGF0aCkge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuICAgIHNjb3BlID0gc2NvcGUgfHwgW107XG4gICAgcGF0aCA9IHBhdGggfHwgW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NvcGUucHVzaChvYmouaWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqLiRyZWYgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIG9iai5fXyRyZWZSZXNvbHZlZCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgcmVmOiBtZXJnZVJlZmVyZW5jZShzY29wZSwgb2JqLiRyZWYpLFxuICAgICAgICAgICAga2V5OiBcIiRyZWZcIixcbiAgICAgICAgICAgIG9iajogb2JqLFxuICAgICAgICAgICAgcGF0aDogcGF0aC5zbGljZSgwKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmouJHNjaGVtYSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2Ygb2JqLl9fJHNjaGVtYVJlc29sdmVkID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICByZWY6IG1lcmdlUmVmZXJlbmNlKHNjb3BlLCBvYmouJHNjaGVtYSksXG4gICAgICAgICAgICBrZXk6IFwiJHNjaGVtYVwiLFxuICAgICAgICAgICAgb2JqOiBvYmosXG4gICAgICAgICAgICBwYXRoOiBwYXRoLnNsaWNlKDApXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBpZHg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBpZHggPSBvYmoubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlcyhvYmpbaWR4XSwgcmVzdWx0cywgc2NvcGUsIHBhdGgpO1xuICAgICAgICAgICAgcGF0aC5wb3AoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHJlY3Vyc2UgdGhyb3VnaCByZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBvdGhlciB6LXNjaGVtYSBwcm9wc1xuICAgICAgICAgICAgaWYgKGtleXNbaWR4XS5pbmRleE9mKFwiX18kXCIpID09PSAwKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICBwYXRoLnB1c2goa2V5c1tpZHhdKTtcbiAgICAgICAgICAgIGNvbGxlY3RSZWZlcmVuY2VzKG9ialtrZXlzW2lkeF1dLCByZXN1bHRzLCBzY29wZSwgcGF0aCk7XG4gICAgICAgICAgICBwYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NvcGUucG9wKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBjb21waWxlQXJyYXlPZlNjaGVtYXNMb29wID0gZnVuY3Rpb24gKG1haW5SZXBvcnQsIGFycikge1xuICAgIHZhciBpZHggPSBhcnIubGVuZ3RoLFxuICAgICAgICBjb21waWxlZENvdW50ID0gMDtcblxuICAgIHdoaWxlIChpZHgtLSkge1xuXG4gICAgICAgIC8vIHRyeSB0byBjb21waWxlIGVhY2ggc2NoZW1hIHNlcGFyYXRlbHlcbiAgICAgICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQobWFpblJlcG9ydCk7XG4gICAgICAgIHZhciBpc1ZhbGlkID0gZXhwb3J0cy5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBhcnJbaWR4XSk7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7IGNvbXBpbGVkQ291bnQrKzsgfVxuXG4gICAgICAgIC8vIGNvcHkgZXJyb3JzIHRvIHJlcG9ydFxuICAgICAgICBtYWluUmVwb3J0LmVycm9ycyA9IG1haW5SZXBvcnQuZXJyb3JzLmNvbmNhdChyZXBvcnQuZXJyb3JzKTtcblxuICAgIH1cblxuICAgIHJldHVybiBjb21waWxlZENvdW50O1xufTtcblxuZnVuY3Rpb24gZmluZElkKGFyciwgaWQpIHtcbiAgICB2YXIgaWR4ID0gYXJyLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgaWYgKGFycltpZHhdLmlkID09PSBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGFycltpZHhdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG52YXIgY29tcGlsZUFycmF5T2ZTY2hlbWFzID0gZnVuY3Rpb24gKHJlcG9ydCwgYXJyKSB7XG5cbiAgICB2YXIgY29tcGlsZWQgPSAwLFxuICAgICAgICBsYXN0TG9vcENvbXBpbGVkO1xuXG4gICAgZG8ge1xuXG4gICAgICAgIC8vIHJlbW92ZSBhbGwgVU5SRVNPTFZBQkxFX1JFRkVSRU5DRSBlcnJvcnMgYmVmb3JlIGNvbXBpbGluZyBhcnJheSBhZ2FpblxuICAgICAgICB2YXIgaWR4ID0gcmVwb3J0LmVycm9ycy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC5lcnJvcnNbaWR4XS5jb2RlID09PSBcIlVOUkVTT0xWQUJMRV9SRUZFUkVOQ0VcIikge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5lcnJvcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZW1lbWJlciBob3cgbWFueSB3ZXJlIGNvbXBpbGVkIGluIHRoZSBsYXN0IGxvb3BcbiAgICAgICAgbGFzdExvb3BDb21waWxlZCA9IGNvbXBpbGVkO1xuXG4gICAgICAgIC8vIGNvdW50IGhvdyBtYW55IGFyZSBjb21waWxlZCBub3dcbiAgICAgICAgY29tcGlsZWQgPSBjb21waWxlQXJyYXlPZlNjaGVtYXNMb29wLmNhbGwodGhpcywgcmVwb3J0LCBhcnIpO1xuXG4gICAgICAgIC8vIGZpeCBfXyRtaXNzaW5nUmVmZXJlbmNlcyBpZiBwb3NzaWJsZVxuICAgICAgICBpZHggPSBhcnIubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBzY2ggPSBhcnJbaWR4XTtcbiAgICAgICAgICAgIGlmIChzY2guX18kbWlzc2luZ1JlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4MiA9IHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVmT2JqID0gc2NoLl9fJG1pc3NpbmdSZWZlcmVuY2VzW2lkeDJdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBmaW5kSWQoYXJyLCByZWZPYmoucmVmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIG1pZ2h0IGNyZWF0ZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZPYmoub2JqW1wiX19cIiArIHJlZk9iai5rZXkgKyBcIlJlc29sdmVkXCJdID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHJlc29sdmVkIG5vdyBzbyBkZWxldGUgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5zcGxpY2UoaWR4MiwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBrZWVwIHJlcGVhdGluZyBpZiBub3QgYWxsIGNvbXBpbGVkIGFuZCBhdCBsZWFzdCBvbmUgbW9yZSB3YXMgY29tcGlsZWQgaW4gdGhlIGxhc3QgbG9vcFxuICAgIH0gd2hpbGUgKGNvbXBpbGVkICE9PSBhcnIubGVuZ3RoICYmIGNvbXBpbGVkICE9PSBsYXN0TG9vcENvbXBpbGVkKTtcblxuICAgIHJldHVybiByZXBvcnQuaXNWYWxpZCgpO1xuXG59O1xuXG5leHBvcnRzLmNvbXBpbGVTY2hlbWEgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcblxuICAgIHJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2UgPSBcIlNDSEVNQV9DT01QSUxBVElPTl9GQUlMRURcIjtcblxuICAgIC8vIGlmIHNjaGVtYSBpcyBhIHN0cmluZywgYXNzdW1lIGl0J3MgYSB1cmlcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgbG9hZGVkU2NoZW1hID0gU2NoZW1hQ2FjaGUuZ2V0U2NoZW1hQnlVcmkuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgICAgIGlmICghbG9hZGVkU2NoZW1hKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJTQ0hFTUFfTk9UX1JFQUNIQUJMRVwiLCBbc2NoZW1hXSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hID0gbG9hZGVkU2NoZW1hO1xuICAgIH1cblxuICAgIC8vIGlmIHNjaGVtYSBpcyBhbiBhcnJheSwgYXNzdW1lIGl0J3MgYW4gYXJyYXkgb2Ygc2NoZW1hc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBpbGVBcnJheU9mU2NoZW1hcy5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGFuIGlkIHRoYW4gaXQgc2hvdWxkIGJlIGNhY2hlZCBhbHJlYWR5IChpZiB0aGlzIGluc3RhbmNlIGhhcyBjb21waWxlZCBpdClcbiAgICBpZiAoc2NoZW1hLl9fJGNvbXBpbGVkICYmIHNjaGVtYS5pZCAmJiBTY2hlbWFDYWNoZS5jaGVja0NhY2hlRm9yVXJpLmNhbGwodGhpcywgc2NoZW1hLmlkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2NoZW1hLl9fJGNvbXBpbGVkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCByZS1jb21waWxlIHNjaGVtYXNcbiAgICBpZiAoc2NoZW1hLl9fJGNvbXBpbGVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaWQgJiYgdHlwZW9mIHNjaGVtYS5pZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBhZGQgdGhpcyB0byBvdXIgc2NoZW1hQ2FjaGUgKGJlZm9yZSBjb21waWxhdGlvbiBpbiBjYXNlIHdlIGhhdmUgcmVmZXJlbmNlcyBpbmNsdWRpbmcgaWQpXG4gICAgICAgIFNjaGVtYUNhY2hlLmNhY2hlU2NoZW1hQnlVcmkuY2FsbCh0aGlzLCBzY2hlbWEuaWQsIHNjaGVtYSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSwgc28gd2UgbmVlZCB0byByZW1lbWJlciBvdXIgcm9vdFxuICAgIHZhciBpc1Jvb3QgPSBmYWxzZTtcbiAgICBpZiAoIXJlcG9ydC5yb290U2NoZW1hKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBpc1Jvb3QgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGRlbGV0ZSBhbGwgX18kbWlzc2luZ1JlZmVyZW5jZXMgZnJvbSBwcmV2aW91cyBjb21waWxhdGlvbiBhdHRlbXB0c1xuICAgIHZhciBpc1ZhbGlkRXhjZXB0UmVmZXJlbmNlcyA9IHJlcG9ydC5pc1ZhbGlkKCk7XG4gICAgZGVsZXRlIHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcztcblxuICAgIC8vIGNvbGxlY3QgYWxsIHJlZmVyZW5jZXMgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkIC0gJHJlZiBhbmQgJHNjaGVtYVxuICAgIHZhciByZWZzID0gY29sbGVjdFJlZmVyZW5jZXMuY2FsbCh0aGlzLCBzY2hlbWEpLFxuICAgICAgICBpZHggPSByZWZzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgLy8gcmVzb2x2ZSBhbGwgdGhlIGNvbGxlY3RlZCByZWZlcmVuY2VzIGludG8gX194eHhSZXNvbHZlZCBwb2ludGVyXG4gICAgICAgIHZhciByZWZPYmogPSByZWZzW2lkeF07XG4gICAgICAgIHZhciByZXNwb25zZSA9IFNjaGVtYUNhY2hlLmdldFNjaGVtYUJ5VXJpLmNhbGwodGhpcywgcmVwb3J0LCByZWZPYmoucmVmLCBzY2hlbWEpO1xuXG4gICAgICAgIC8vIHdlIGNhbiB0cnkgdG8gdXNlIGN1c3RvbSBzY2hlbWFSZWFkZXIgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHZhciBzY2hlbWFSZWFkZXIgPSB0aGlzLmdldFNjaGVtYVJlYWRlcigpO1xuICAgICAgICAgICAgaWYgKHNjaGVtYVJlYWRlcikge1xuICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwcG9zZWQgdG8gcmV0dXJuIGEgdmFsaWQgc2NoZW1hXG4gICAgICAgICAgICAgICAgdmFyIHMgPSBzY2hlbWFSZWFkZXIocmVmT2JqLnJlZik7XG4gICAgICAgICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgbmVlZHMgdG8gaGF2ZSB0aGUgaWRcbiAgICAgICAgICAgICAgICAgICAgcy5pZCA9IHJlZk9iai5yZWY7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBjb21waWxlIHRoZSBzY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJlcG9ydCA9IG5ldyBSZXBvcnQocmVwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHBvcnRzLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzdWJyZXBvcnQsIHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IGVycm9ycyB0byByZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5lcnJvcnMgPSByZXBvcnQuZXJyb3JzLmNvbmNhdChzdWJyZXBvcnQuZXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gU2NoZW1hQ2FjaGUuZ2V0U2NoZW1hQnlVcmkuY2FsbCh0aGlzLCByZXBvcnQsIHJlZk9iai5yZWYsIHNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgIHZhciBoYXNOb3RWYWxpZCA9IHJlcG9ydC5oYXNFcnJvcihcIlJFTU9URV9OT1RfVkFMSURcIiwgW3JlZk9iai5yZWZdKTtcbiAgICAgICAgICAgIHZhciBpc0Fic29sdXRlID0gVXRpbHMuaXNBYnNvbHV0ZVVyaShyZWZPYmoucmVmKTtcbiAgICAgICAgICAgIHZhciBpc0Rvd25sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBpZ25vcmVVbnJlc29sdmFibGVSZW1vdGVzID0gdGhpcy5vcHRpb25zLmlnbm9yZVVucmVzb2x2YWJsZVJlZmVyZW5jZXMgPT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpc0Fic29sdXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IGFkZCBVTlJFU09MVkFCTEVfUkVGRVJFTkNFIGZvciBzY2hlbWFzIHdlIGFscmVhZHkgaGF2ZSBkb3dubG9hZGVkXG4gICAgICAgICAgICAgICAgLy8gYW5kIHNldCB0aHJvdWdoIHNldFJlbW90ZVJlZmVyZW5jZSBtZXRob2RcbiAgICAgICAgICAgICAgICBpc0Rvd25sb2FkZWQgPSBTY2hlbWFDYWNoZS5jaGVja0NhY2hlRm9yVXJpLmNhbGwodGhpcywgcmVmT2JqLnJlZik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNOb3RWYWxpZCkge1xuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFzIFJFTU9URV9OT1RfVkFMSUQgZXJyb3IgZm9yIHRoaXMgb25lXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlnbm9yZVVucmVzb2x2YWJsZVJlbW90ZXMgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVVucmVzb2x2YWJsZVJlbW90ZXMgaXMgb24gYW5kIHJlbW90ZSBpc0Fic29sdXRlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRG93bmxvYWRlZCkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW90ZSBpcyBkb3dubG9hZGVkLCBzbyBubyBVTlJFU09MVkFCTEVfUkVGRVJFTkNFXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlcG9ydC5wYXRoLCByZWZPYmoucGF0aCk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiVU5SRVNPTFZBQkxFX1JFRkVSRU5DRVwiLCBbcmVmT2JqLnJlZl0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoID0gcmVwb3J0LnBhdGguc2xpY2UoMCwgLXJlZk9iai5wYXRoLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAvLyBwdXNibGlzaCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgb3V0XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRFeGNlcHRSZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcyA9IHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLl9fJG1pc3NpbmdSZWZlcmVuY2VzLnB1c2gocmVmT2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcyBtaWdodCBjcmVhdGUgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgICByZWZPYmoub2JqW1wiX19cIiArIHJlZk9iai5rZXkgKyBcIlJlc29sdmVkXCJdID0gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgdmFyIGlzVmFsaWQgPSByZXBvcnQuaXNWYWxpZCgpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIHNjaGVtYS5fXyRjb21waWxlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNjaGVtYS5pZCAmJiB0eXBlb2Ygc2NoZW1hLmlkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhpcyBzY2hlbWEgZnJvbSBzY2hlbWFDYWNoZSBiZWNhdXNlIGl0IGZhaWxlZCB0byBjb21waWxlXG4gICAgICAgICAgICBTY2hlbWFDYWNoZS5yZW1vdmVGcm9tQ2FjaGVCeVVyaS5jYWxsKHRoaXMsIHNjaGVtYS5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3ZSBkb24ndCBuZWVkIHRoZSByb290IHBvaW50ZXIgYW55bW9yZVxuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgcmVwb3J0LnJvb3RTY2hlbWEgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWQ7XG5cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEZvcm1hdFZhbGlkYXRvcnMgPSByZXF1aXJlKFwiLi9Gb3JtYXRWYWxpZGF0b3JzXCIpLFxuICAgIEpzb25WYWxpZGF0aW9uICAgPSByZXF1aXJlKFwiLi9Kc29uVmFsaWRhdGlvblwiKSxcbiAgICBSZXBvcnQgICAgICAgICAgID0gcmVxdWlyZShcIi4vUmVwb3J0XCIpLFxuICAgIFV0aWxzICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxudmFyIFNjaGVtYVZhbGlkYXRvcnMgPSB7XG4gICAgJHJlZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtYXBwc2F3Zy1qc29uLXBvaW50ZXItMDdcbiAgICAgICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcGJyeWFuLXp5cC1qc29uLXJlZi0wM1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS4kcmVmICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiJHJlZlwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgICRzY2hlbWE6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS1jb3JlLmh0bWwjcmZjLnNlY3Rpb24uNlxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS4kc2NoZW1hICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiJHNjaGVtYVwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG11bHRpcGxlT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjEuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tdWx0aXBsZU9mICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibXVsdGlwbGVPZlwiLCBcIm51bWJlclwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm11bHRpcGxlT2YgPD0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcIm11bHRpcGxlT2ZcIiwgXCJzdHJpY3RseSBncmVhdGVyIHRoYW4gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1heGltdW06IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjIuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhpbXVtICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWF4aW11bVwiLCBcIm51bWJlclwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGV4Y2x1c2l2ZU1heGltdW06IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjIuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImV4Y2x1c2l2ZU1heGltdW1cIiwgXCJib29sZWFuXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4aW11bSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX0RFUEVOREVOQ1lcIiwgW1wiZXhjbHVzaXZlTWF4aW11bVwiLCBcIm1heGltdW1cIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5pbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWluaW11bSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1pbmltdW1cIiwgXCJudW1iZXJcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBleGNsdXNpdmVNaW5pbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJleGNsdXNpdmVNaW5pbXVtXCIsIFwiYm9vbGVhblwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm1pbmltdW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9ERVBFTkRFTkNZXCIsIFtcImV4Y2x1c2l2ZU1pbmltdW1cIiwgXCJtaW5pbXVtXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4TGVuZ3RoOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4xLjFcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhzY2hlbWEubWF4TGVuZ3RoKSAhPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJtYXhMZW5ndGhcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcIm1heExlbmd0aFwiLCBcImdyZWF0ZXIgdGhhbiwgb3IgZXF1YWwgdG8gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1pbkxlbmd0aDogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjIuMi4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pbkxlbmd0aCkgIT09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWluTGVuZ3RoXCIsIFwiaW50ZWdlclwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm1pbkxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5MZW5ndGhcIiwgXCJncmVhdGVyIHRoYW4sIG9yIGVxdWFsIHRvIDBcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEucGF0dGVybiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInBhdHRlcm5cIiwgXCJzdHJpbmdcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBSZWdFeHAoc2NoZW1hLnBhdHRlcm4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfUEFUVEVSTlwiLCBbXCJwYXR0ZXJuXCIsIHNjaGVtYS5wYXR0ZXJuXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMS4xXG4gICAgICAgIHZhciB0eXBlID0gVXRpbHMud2hhdElzKHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgICBpZiAodHlwZSAhPT0gXCJib29sZWFuXCIgJiYgdHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImFkZGl0aW9uYWxJdGVtc1wiLCBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFkZGl0aW9uYWxJdGVtc1wiKTtcbiAgICAgICAgICAgIGV4cG9ydHMudmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4xLjFcbiAgICAgICAgdmFyIHR5cGUgPSBVdGlscy53aGF0SXMoc2NoZW1hLml0ZW1zKTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcIml0ZW1zXCIpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLml0ZW1zKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5pdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwiaXRlbXNcIik7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLml0ZW1zW2lkeF0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIml0ZW1zXCIsIFtcImFycmF5XCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjdXN0b20gLSBzdHJpY3QgbW9kZVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlQWRkaXRpb25hbCA9PT0gdHJ1ZSAmJiBzY2hlbWEuYWRkaXRpb25hbEl0ZW1zID09PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiYWRkaXRpb25hbEl0ZW1zXCJdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjdXN0b21lIC0gYXNzdW1lIGRlZmluZWQgZmFsc2UgbW9kZVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFzc3VtZUFkZGl0aW9uYWwgJiYgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gdW5kZWZpbmVkICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtYXhJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMi4xXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWF4SXRlbXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4SXRlbXMgPCAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wibWF4SXRlbXNcIiwgXCJncmVhdGVyIHRoYW4sIG9yIGVxdWFsIHRvIDBcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5JdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMy4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pbkl0ZW1zKSAhPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJtaW5JdGVtc1wiLCBcImludGVnZXJcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5taW5JdGVtcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5JdGVtc1wiLCBcImdyZWF0ZXIgdGhhbiwgb3IgZXF1YWwgdG8gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHVuaXF1ZUl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy40LjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEudW5pcXVlSXRlbXMgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1widW5pcXVlSXRlbXNcIiwgXCJib29sZWFuXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4UHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMS4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1heFByb3BlcnRpZXMpICE9PSBcImludGVnZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1heFByb3BlcnRpZXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4UHJvcGVydGllcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtYXhQcm9wZXJ0aWVzXCIsIFwiZ3JlYXRlciB0aGFuLCBvciBlcXVhbCB0byAwXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWluUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMi4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pblByb3BlcnRpZXMpICE9PSBcImludGVnZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1pblByb3BlcnRpZXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWluUHJvcGVydGllcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5Qcm9wZXJ0aWVzXCIsIFwiZ3JlYXRlciB0aGFuLCBvciBlcXVhbCB0byAwXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjMuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5yZXF1aXJlZCkgIT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInJlcXVpcmVkXCIsIFwiYXJyYXlcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5yZXF1aXJlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJyZXF1aXJlZFwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5yZXF1aXJlZC5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5yZXF1aXJlZFtpZHhdICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVkFMVUVfVFlQRVwiLCBbXCJyZXF1aXJlZFwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wicmVxdWlyZWRcIiwgXCJhbiBhcnJheSB3aXRoIHVuaXF1ZSBpdGVtc1wiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC40LjFcbiAgICAgICAgdmFyIHR5cGUgPSBVdGlscy53aGF0SXMoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKHR5cGUgIT09IFwiYm9vbGVhblwiICYmIHR5cGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLCBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC40LjFcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhzY2hlbWEucHJvcGVydGllcykgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJwcm9wZXJ0aWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpLFxuICAgICAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XSxcbiAgICAgICAgICAgICAgICB2YWwgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGtleSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCB2YWwpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGN1c3RvbSAtIHN0cmljdCBtb2RlXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VBZGRpdGlvbmFsID09PSB0cnVlICYmIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGN1c3RvbWUgLSBhc3N1bWUgZGVmaW5lZCBmYWxzZSBtb2RlXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXNzdW1lQWRkaXRpb25hbCAmJiBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3VzdG9tIC0gZm9yY2VQcm9wZXJ0aWVzXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VQcm9wZXJ0aWVzID09PSB0cnVlICYmIGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJDVVNUT01fTU9ERV9GT1JDRV9QUk9QRVJUSUVTXCIsIFtcInByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuNC4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICAgICAgdmFsID0gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFJlZ0V4cChrZXkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfUEFUVEVSTlwiLCBbXCJwYXR0ZXJuUHJvcGVydGllc1wiLCBrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJwYXR0ZXJuUHJvcGVydGllc1wiKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goa2V5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgdmFsKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjdXN0b20gLSBmb3JjZVByb3BlcnRpZXNcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgPT09IHRydWUgJiYga2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIkNVU1RPTV9NT0RFX0ZPUkNFX1BST1BFUlRJRVNcIiwgW1wicGF0dGVyblByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjUuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5kZXBlbmRlbmNpZXMpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyksXG4gICAgICAgICAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgc2NoZW1hS2V5ID0ga2V5c1tpZHhdLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFEZXBlbmRlbmN5ID0gc2NoZW1hLmRlcGVuZGVuY2llc1tzY2hlbWFLZXldLFxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gVXRpbHMud2hhdElzKHNjaGVtYURlcGVuZGVuY3kpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImRlcGVuZGVuY2llc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChzY2hlbWFLZXkpO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWFEZXBlbmRlbmN5KTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHgyID0gc2NoZW1hRGVwZW5kZW5jeS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZHgyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwibm90IGVtcHR5IGFycmF5XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaWR4Mi0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYURlcGVuZGVuY3lbaWR4Ml0gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1ZBTFVFX1RZUEVcIiwgW1wiZGVwZW5kZW5zaWNlc1wiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hRGVwZW5kZW5jeSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwiYW4gYXJyYXkgd2l0aCB1bmlxdWUgaXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9WQUxVRV9UWVBFXCIsIFtcImRlcGVuZGVuY2llc1wiLCBcIm9iamVjdCBvciBhcnJheVwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBlbnVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS4xLjFcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLmVudW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImVudW1cIiwgXCJhcnJheVwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmVudW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZW51bVwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLmVudW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcImVudW1cIiwgXCJhbiBhcnJheSB3aXRoIHVuaXF1ZSBlbGVtZW50c1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHR5cGU6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjIuMVxuICAgICAgICB2YXIgcHJpbWl0aXZlVHlwZXMgPSBbXCJhcnJheVwiLCBcImJvb2xlYW5cIiwgXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCIsIFwibnVsbFwiLCBcIm9iamVjdFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgIHByaW1pdGl2ZVR5cGVTdHIgPSBwcmltaXRpdmVUeXBlcy5qb2luKFwiLFwiKSxcbiAgICAgICAgICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNjaGVtYS50eXBlKTtcblxuICAgICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS50eXBlLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVUeXBlcy5pbmRleE9mKHNjaGVtYS50eXBlW2lkeF0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1widHlwZVwiLCBwcmltaXRpdmVUeXBlU3RyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLnR5cGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJ0eXBlXCIsIFwiYW4gb2JqZWN0IHdpdGggdW5pcXVlIHByb3BlcnRpZXNcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEudHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVR5cGVzLmluZGV4T2Yoc2NoZW1hLnR5cGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0eXBlXCIsIHByaW1pdGl2ZVR5cGVTdHJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0eXBlXCIsIFtcInN0cmluZ1wiLCBcImFycmF5XCJdXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vRW1wdHlTdHJpbmdzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgaXNBcnJheSAmJiBzY2hlbWEudHlwZS5pbmRleE9mKFwic3RyaW5nXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluTGVuZ3RoID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmVudW0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEubWluTGVuZ3RoID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub0VtcHR5QXJyYXlzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwiYXJyYXlcIiB8fCBpc0FycmF5ICYmIHNjaGVtYS50eXBlLmluZGV4T2YoXCJhcnJheVwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm1pbkl0ZW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLm1pbkl0ZW1zID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJvYmplY3RcIiB8fCBpc0FycmF5ICYmIHNjaGVtYS50eXBlLmluZGV4T2YoXCJvYmplY3RcIikgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgJiYgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcInByb3BlcnRpZXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuaXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiaXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWluSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluSXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWluSXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWF4SXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWF4SXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWF4SXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWluTGVuZ3RoID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgaXNBcnJheSAmJiBzY2hlbWEudHlwZS5pbmRleE9mKFwic3RyaW5nXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluTGVuZ3RoID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZvcm1hdCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5lbnVtID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLnBhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWluTGVuZ3RoXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZU1heExlbmd0aCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcInN0cmluZ1wiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm1heExlbmd0aCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5mb3JtYXQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZW51bSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5wYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcIm1heExlbmd0aFwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhbGxPZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMy4xXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbGxPZikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiYWxsT2ZcIiwgXCJhcnJheVwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmFsbE9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcImFsbE9mXCIsIFwiYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudFwiXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gc2NoZW1hLmFsbE9mLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJhbGxPZlwiKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuYWxsT2ZbaWR4XSk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFueU9mOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS40LjFcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLmFueU9mKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJhbnlPZlwiLCBcImFycmF5XCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEuYW55T2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiYW55T2ZcIiwgXCJhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBzY2hlbWEuYW55T2YubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFueU9mXCIpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goaWR4LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYS5hbnlPZltpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgb25lT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjUuMVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEub25lT2YpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm9uZU9mXCIsIFwiYXJyYXlcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5vbmVPZi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJvbmVPZlwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5vbmVPZi5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwib25lT2ZcIik7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLm9uZU9mW2lkeF0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjYuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5ub3QpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibm90XCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJub3RcIik7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEubm90KTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZWZpbml0aW9uczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNy4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLmRlZmluaXRpb25zKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImRlZmluaXRpb25zXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlZmluaXRpb25zKSxcbiAgICAgICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHNjaGVtYS5kZWZpbml0aW9uc1trZXldO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJkZWZpbml0aW9uc1wiKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgdmFsKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZm9ybWF0OiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuZm9ybWF0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiZm9ybWF0XCIsIFwic3RyaW5nXCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChGb3JtYXRWYWxpZGF0b3JzW3NjaGVtYS5mb3JtYXRdID09PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLmlnbm9yZVVua25vd25Gb3JtYXRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiVU5LTk9XTl9GT1JNQVRcIiwgW3NjaGVtYS5mb3JtYXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgaWQ6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS1jb3JlLmh0bWwjcmZjLnNlY3Rpb24uNy4yXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmlkICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiaWRcIiwgXCJzdHJpbmdcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0aXRsZTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi42LjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEudGl0bGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0aXRsZVwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjYuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5kZXNjcmlwdGlvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImRlc2NyaXB0aW9uXCIsIFwic3RyaW5nXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uICgvKiByZXBvcnQsIHNjaGVtYSAqLykge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNi4yXG4gICAgICAgIC8vIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgcGxhY2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIGtleXdvcmQuXG4gICAgfVxufTtcblxudmFyIHZhbGlkYXRlQXJyYXlPZlNjaGVtYXMgPSBmdW5jdGlvbiAocmVwb3J0LCBhcnIpIHtcbiAgICB2YXIgaWR4ID0gYXJyLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgYXJyW2lkeF0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVwb3J0LmlzVmFsaWQoKTtcbn07XG5cbmV4cG9ydHMudmFsaWRhdGVTY2hlbWEgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcblxuICAgIHJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2UgPSBcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRFwiO1xuXG4gICAgLy8gaWYgc2NoZW1hIGlzIGFuIGFycmF5LCBhc3N1bWUgaXQncyBhbiBhcnJheSBvZiBzY2hlbWFzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVBcnJheU9mU2NoZW1hcy5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3QgcmV2YWxpZGF0ZSBzY2hlbWEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBvbmNlXG4gICAgaWYgKHNjaGVtYS5fXyR2YWxpZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgJHNjaGVtYSBpcyBwcmVzZW50LCB0aGlzIHNjaGVtYSBzaG91bGQgdmFsaWRhdGUgYWdhaW5zdCB0aGF0ICRzY2hlbWFcbiAgICB2YXIgaGFzUGFyZW50U2NoZW1hID0gc2NoZW1hLiRzY2hlbWEgJiYgc2NoZW1hLmlkICE9PSBzY2hlbWEuJHNjaGVtYTtcbiAgICBpZiAoaGFzUGFyZW50U2NoZW1hKSB7XG4gICAgICAgIGlmIChzY2hlbWEuX18kc2NoZW1hUmVzb2x2ZWQgJiYgc2NoZW1hLl9fJHNjaGVtYVJlc29sdmVkICE9PSBzY2hlbWEpIHtcbiAgICAgICAgICAgIHZhciBzdWJSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHN1YlJlcG9ydCwgc2NoZW1hLl9fJHNjaGVtYVJlc29sdmVkLCBzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKHZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlBBUkVOVF9TQ0hFTUFfVkFMSURBVElPTl9GQUlMRURcIiwgbnVsbCwgc3ViUmVwb3J0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlVW5yZXNvbHZhYmxlUmVmZXJlbmNlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlJFRl9VTlJFU09MVkVEXCIsIFtzY2hlbWEuJHNjaGVtYV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub1R5cGVsZXNzID09PSB0cnVlKSB7XG4gICAgICAgIC8vIGlzc3VlICMzNiAtIGluaGVyaXQgdHlwZSB0byBhbnlPZiwgb25lT2YsIGFsbE9mIGlmIG5vVHlwZWxlc3MgaXMgZGVmaW5lZFxuICAgICAgICBpZiAoc2NoZW1hLnR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIHNjaGVtYXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbnlPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5hbnlPZik7IH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5vbmVPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5vbmVPZik7IH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbGxPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5hbGxPZik7IH1cbiAgICAgICAgICAgIHNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbiAoc2NoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY2gudHlwZSkgeyBzY2gudHlwZSA9IHNjaGVtYS50eXBlOyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmQgaXNzdWUgIzM2XG4gICAgICAgIGlmIChzY2hlbWEuZW51bSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzY2hlbWEuYW55T2YgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2NoZW1hLm9uZU9mID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNjaGVtYS5ub3QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2NoZW1hLiRyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcInR5cGVcIl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLFxuICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiX19cIikgPT09IDApIHsgY29udGludWU7IH1cbiAgICAgICAgaWYgKFNjaGVtYVZhbGlkYXRvcnNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBTY2hlbWFWYWxpZGF0b3JzW2tleV0uY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1BhcmVudFNjaGVtYSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub0V4dHJhS2V5d29yZHMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VORVhQRUNURURcIiwgW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpY0NoZWNrID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChzY2hlbWEuZW51bSkge1xuICAgICAgICAgICAgLy8gYnJlYWsgcmVjdXJzaW9uXG4gICAgICAgICAgICB2YXIgdG1wU2NoZW1hID0gVXRpbHMuY2xvbmUoc2NoZW1hKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0bXBTY2hlbWEuZW51bTtcbiAgICAgICAgICAgIGRlbGV0ZSB0bXBTY2hlbWEuZGVmYXVsdDtcblxuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImVudW1cIik7XG4gICAgICAgICAgICBpZHggPSBzY2hlbWEuZW51bS5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgdG1wU2NoZW1hLCBzY2hlbWEuZW51bVtpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5kZWZhdWx0KSB7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgICAgIEpzb25WYWxpZGF0aW9uLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIHNjaGVtYS5kZWZhdWx0KTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzVmFsaWQgPSByZXBvcnQuaXNWYWxpZCgpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIHNjaGVtYS5fXyR2YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaXNWYWxpZDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5pc0Fic29sdXRlVXJpID0gZnVuY3Rpb24gKHVyaSkge1xuICAgIHJldHVybiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJpKTtcbn07XG5cbmV4cG9ydHMuaXNSZWxhdGl2ZVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgICAvLyByZWxhdGl2ZSBVUklzIHRoYXQgZW5kIHdpdGggYSBoYXNoIHNpZ24sIGlzc3VlICM1NlxuICAgIHJldHVybiAvLisjLy50ZXN0KHVyaSk7XG59O1xuXG5leHBvcnRzLndoYXRJcyA9IGZ1bmN0aW9uICh3aGF0KSB7XG5cbiAgICB2YXIgdG8gPSB0eXBlb2Ygd2hhdDtcblxuICAgIGlmICh0byA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAod2hhdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoYXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm9iamVjdFwiOyAvLyB0eXBlb2Ygd2hhdCA9PT0gJ29iamVjdCcgJiYgd2hhdCA9PT0gT2JqZWN0KHdoYXQpICYmICFBcnJheS5pc0FycmF5KHdoYXQpO1xuICAgIH1cblxuICAgIGlmICh0byA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHdoYXQpKSB7XG4gICAgICAgICAgICBpZiAod2hhdCAlIDEgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbnRlZ2VyXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4od2hhdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm5vdC1hLW51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcInVua25vd24tbnVtYmVyXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvOyAvLyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgZnVuY3Rpb25cblxufTtcblxuZXhwb3J0cy5hcmVFcXVhbCA9IGZ1bmN0aW9uIGFyZUVxdWFsKGpzb24xLCBqc29uMikge1xuICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLWNvcmUuaHRtbCNyZmMuc2VjdGlvbi4zLjZcblxuICAgIC8vIFR3byBKU09OIHZhbHVlcyBhcmUgc2FpZCB0byBiZSBlcXVhbCBpZiBhbmQgb25seSBpZjpcbiAgICAvLyBib3RoIGFyZSBudWxsczsgb3JcbiAgICAvLyBib3RoIGFyZSBib29sZWFucywgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWU7IG9yXG4gICAgLy8gYm90aCBhcmUgc3RyaW5ncywgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWU7IG9yXG4gICAgLy8gYm90aCBhcmUgbnVtYmVycywgYW5kIGhhdmUgdGhlIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlOyBvclxuICAgIGlmIChqc29uMSA9PT0ganNvbjIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGksIGxlbjtcblxuICAgIC8vIGJvdGggYXJlIGFycmF5cywgYW5kOlxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24xKSAmJiBBcnJheS5pc0FycmF5KGpzb24yKSkge1xuICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtczsgYW5kXG4gICAgICAgIGlmIChqc29uMS5sZW5ndGggIT09IGpzb24yLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGl0ZW1zIGF0IHRoZSBzYW1lIGluZGV4IGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uOyBvclxuICAgICAgICBsZW4gPSBqc29uMS5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKCFhcmVFcXVhbChqc29uMVtpXSwganNvbjJbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGJvdGggYXJlIG9iamVjdHMsIGFuZDpcbiAgICBpZiAoZXhwb3J0cy53aGF0SXMoanNvbjEpID09PSBcIm9iamVjdFwiICYmIGV4cG9ydHMud2hhdElzKGpzb24yKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0eSBuYW1lczsgYW5kXG4gICAgICAgIHZhciBrZXlzMSA9IE9iamVjdC5rZXlzKGpzb24xKTtcbiAgICAgICAgdmFyIGtleXMyID0gT2JqZWN0LmtleXMoanNvbjIpO1xuICAgICAgICBpZiAoIWFyZUVxdWFsKGtleXMxLCBrZXlzMikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB2YWx1ZXMgZm9yIGEgc2FtZSBwcm9wZXJ0eSBuYW1lIGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLlxuICAgICAgICBsZW4gPSBrZXlzMS5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKCFhcmVFcXVhbChqc29uMVtrZXlzMVtpXV0sIGpzb24yW2tleXMxW2ldXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5pc1VuaXF1ZUFycmF5ID0gZnVuY3Rpb24gKGFyciwgaW5kZXhlcykge1xuICAgIHZhciBpLCBqLCBsID0gYXJyLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoZXhwb3J0cy5hcmVFcXVhbChhcnJbaV0sIGFycltqXSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhlcykgeyBpbmRleGVzLnB1c2goaSwgaik7IH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnRzLmRpZmZlcmVuY2UgPSBmdW5jdGlvbiAoYmlnU2V0LCBzdWJTZXQpIHtcbiAgICB2YXIgYXJyID0gW10sXG4gICAgICAgIGlkeCA9IGJpZ1NldC5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIGlmIChzdWJTZXQuaW5kZXhPZihiaWdTZXRbaWR4XSkgPT09IC0xKSB7XG4gICAgICAgICAgICBhcnIucHVzaChiaWdTZXRbaWR4XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn07XG5cbi8vIE5PVCBhIGRlZXAgdmVyc2lvbiBvZiBjbG9uZVxuZXhwb3J0cy5jbG9uZSA9IGZ1bmN0aW9uIChzcmMpIHtcbiAgICBpZiAodHlwZW9mIHNyYyA9PT0gXCJ1bmRlZmluZWRcIikgeyByZXR1cm4gdm9pZCAwOyB9XG4gICAgaWYgKHR5cGVvZiBzcmMgIT09IFwib2JqZWN0XCIgfHwgc3JjID09PSBudWxsKSB7IHJldHVybiBzcmM7IH1cbiAgICB2YXIgcmVzLCBpZHg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgaWR4ID0gc3JjLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICByZXNbaWR4XSA9IHNyY1tpZHhdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzID0ge307XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIHJlc1trZXldID0gc3JjW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5cbmV4cG9ydHMuY2xvbmVEZWVwID0gZnVuY3Rpb24gKHNyYykge1xuICAgIHZhciB2aXNpdGVkID0gW10sIGNsb25lZCA9IFtdO1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcChzcmMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzcmMgIT09IFwib2JqZWN0XCIgfHwgc3JjID09PSBudWxsKSB7IHJldHVybiBzcmM7IH1cbiAgICAgICAgdmFyIHJlcywgaWR4LCBjaWR4O1xuXG4gICAgICAgIGNpZHggPSB2aXNpdGVkLmluZGV4T2Yoc3JjKTtcbiAgICAgICAgaWYgKGNpZHggIT09IC0xKSB7IHJldHVybiBjbG9uZWRbY2lkeF07IH1cblxuICAgICAgICB2aXNpdGVkLnB1c2goc3JjKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgICAgICBjbG9uZWQucHVzaChyZXMpO1xuICAgICAgICAgICAgaWR4ID0gc3JjLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHJlc1tpZHhdID0gY2xvbmVEZWVwKHNyY1tpZHhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHt9O1xuICAgICAgICAgICAgY2xvbmVkLnB1c2gocmVzKTtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICAgICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgICAgICByZXNba2V5XSA9IGNsb25lRGVlcChzcmNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lRGVlcChzcmMpO1xufTtcblxuLypcbiAgZm9sbG93aW5nIGZ1bmN0aW9uIGNvbWVzIGZyb20gcHVueWNvZGUuanMgbGlicmFyeVxuICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qc1xuKi9cbi8qanNoaW50IC1XMDE2Ki9cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcbiAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuICogbWF0Y2hpbmcgVVRGLTE2LlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG4gKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG4gKiBAbmFtZSBkZWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG4gKi9cbmV4cG9ydHMudWNzMmRlY29kZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sXG4gICAgICAgIGNvdW50ZXIgPSAwLFxuICAgICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZXh0cmE7XG4gICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcbiAgICAgICAgICAgIGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59O1xuLypqc2hpbnQgK1cwMTYqL1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCIuL1BvbHlmaWxsc1wiKTtcbnZhciBnZXQgICAgICAgICAgICAgICA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIFJlcG9ydCAgICAgICAgICAgID0gcmVxdWlyZShcIi4vUmVwb3J0XCIpO1xudmFyIEZvcm1hdFZhbGlkYXRvcnMgID0gcmVxdWlyZShcIi4vRm9ybWF0VmFsaWRhdG9yc1wiKTtcbnZhciBKc29uVmFsaWRhdGlvbiAgICA9IHJlcXVpcmUoXCIuL0pzb25WYWxpZGF0aW9uXCIpO1xudmFyIFNjaGVtYUNhY2hlICAgICAgID0gcmVxdWlyZShcIi4vU2NoZW1hQ2FjaGVcIik7XG52YXIgU2NoZW1hQ29tcGlsYXRpb24gPSByZXF1aXJlKFwiLi9TY2hlbWFDb21waWxhdGlvblwiKTtcbnZhciBTY2hlbWFWYWxpZGF0aW9uICA9IHJlcXVpcmUoXCIuL1NjaGVtYVZhbGlkYXRpb25cIik7XG52YXIgVXRpbHMgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcbnZhciBEcmFmdDRTY2hlbWEgICAgICA9IHJlcXVpcmUoXCIuL3NjaGVtYXMvc2NoZW1hLmpzb25cIik7XG52YXIgRHJhZnQ0SHlwZXJTY2hlbWEgPSByZXF1aXJlKFwiLi9zY2hlbWFzL2h5cGVyLXNjaGVtYS5qc29uXCIpO1xuXG4vKlxuICAgIGRlZmF1bHQgb3B0aW9uc1xuKi9cbnZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAvLyBkZWZhdWx0IHRpbWVvdXQgZm9yIGFsbCBhc3luYyB0YXNrc1xuICAgIGFzeW5jVGltZW91dDogMjAwMCxcbiAgICAvLyBmb3JjZSBhZGRpdGlvbmFsUHJvcGVydGllcyBhbmQgYWRkaXRpb25hbEl0ZW1zIHRvIGJlIGRlZmluZWQgb24gXCJvYmplY3RcIiBhbmQgXCJhcnJheVwiIHR5cGVzXG4gICAgZm9yY2VBZGRpdGlvbmFsOiBmYWxzZSxcbiAgICAvLyBhc3N1bWUgYWRkaXRpb25hbFByb3BlcnRpZXMgYW5kIGFkZGl0aW9uYWxJdGVtcyBhcmUgZGVmaW5lZCBhcyBcImZhbHNlXCIgd2hlcmUgYXBwcm9wcmlhdGVcbiAgICBhc3N1bWVBZGRpdGlvbmFsOiBmYWxzZSxcbiAgICAvLyBmb3JjZSBpdGVtcyB0byBiZSBkZWZpbmVkIG9uIFwiYXJyYXlcIiB0eXBlc1xuICAgIGZvcmNlSXRlbXM6IGZhbHNlLFxuICAgIC8vIGZvcmNlIG1pbkl0ZW1zIHRvIGJlIGRlZmluZWQgb24gXCJhcnJheVwiIHR5cGVzXG4gICAgZm9yY2VNaW5JdGVtczogZmFsc2UsXG4gICAgLy8gZm9yY2UgbWF4SXRlbXMgdG8gYmUgZGVmaW5lZCBvbiBcImFycmF5XCIgdHlwZXNcbiAgICBmb3JjZU1heEl0ZW1zOiBmYWxzZSxcbiAgICAvLyBmb3JjZSBtaW5MZW5ndGggdG8gYmUgZGVmaW5lZCBvbiBcInN0cmluZ1wiIHR5cGVzXG4gICAgZm9yY2VNaW5MZW5ndGg6IGZhbHNlLFxuICAgIC8vIGZvcmNlIG1heExlbmd0aCB0byBiZSBkZWZpbmVkIG9uIFwic3RyaW5nXCIgdHlwZXNcbiAgICBmb3JjZU1heExlbmd0aDogZmFsc2UsXG4gICAgLy8gZm9yY2UgcHJvcGVydGllcyBvciBwYXR0ZXJuUHJvcGVydGllcyB0byBiZSBkZWZpbmVkIG9uIFwib2JqZWN0XCIgdHlwZXNcbiAgICBmb3JjZVByb3BlcnRpZXM6IGZhbHNlLFxuICAgIC8vIGlnbm9yZSByZWZlcmVuY2VzIHRoYXQgY2Fubm90IGJlIHJlc29sdmVkIChyZW1vdGUgc2NoZW1hcykgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgaXMgb25seSBmb3IgcmVtb3RlIHNjaGVtYXMsIG5vdCBsb2NhbCBvbmVzXG4gICAgaWdub3JlVW5yZXNvbHZhYmxlUmVmZXJlbmNlczogZmFsc2UsXG4gICAgLy8gZGlzYWxsb3cgdXNhZ2Ugb2Yga2V5d29yZHMgdGhhdCB0aGlzIHZhbGlkYXRvciBjYW4ndCBoYW5kbGVcbiAgICBub0V4dHJhS2V5d29yZHM6IGZhbHNlLFxuICAgIC8vIGRpc2FsbG93IHVzYWdlIG9mIHNjaGVtYSdzIHdpdGhvdXQgXCJ0eXBlXCIgZGVmaW5lZFxuICAgIG5vVHlwZWxlc3M6IGZhbHNlLFxuICAgIC8vIGRpc2FsbG93IHplcm8gbGVuZ3RoIHN0cmluZ3MgaW4gdmFsaWRhdGVkIG9iamVjdHNcbiAgICBub0VtcHR5U3RyaW5nczogZmFsc2UsXG4gICAgLy8gZGlzYWxsb3cgemVybyBsZW5ndGggYXJyYXlzIGluIHZhbGlkYXRlZCBvYmplY3RzXG4gICAgbm9FbXB0eUFycmF5czogZmFsc2UsXG4gICAgLy8gZm9yY2VzIFwidXJpXCIgZm9ybWF0IHRvIGJlIGluIGZ1bGx5IHJmYzM5ODYgY29tcGxpYW50XG4gICAgc3RyaWN0VXJpczogZmFsc2UsXG4gICAgLy8gdHVybiBvbiBzb21lIG9mIHRoZSBhYm92ZVxuICAgIHN0cmljdE1vZGU6IGZhbHNlLFxuICAgIC8vIHJlcG9ydCBlcnJvciBwYXRocyBhcyBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzIHRvIGdldCB0byB0aGUgb2ZmZW5kaW5nIG5vZGVcbiAgICByZXBvcnRQYXRoQXNBcnJheTogZmFsc2UsXG4gICAgLy8gc3RvcHMgdmFsaWRhdGlvbiBhcyBzb29uIGFzIGFuIGVycm9yIGlzIGZvdW5kLCB0cnVlIGJ5IGRlZmF1bHQgYnV0IGNhbiBiZSB0dXJuZWQgb2ZmXG4gICAgYnJlYWtPbkZpcnN0RXJyb3I6IHRydWUsXG4gICAgLy8gY2hlY2sgaWYgc2NoZW1hIGZvbGxvdyBiZXN0IHByYWN0aWNlcyBhbmQgY29tbW9uIHNlbmNlXG4gICAgcGVkYW50aWNDaGVjazogZmFsc2UsXG4gICAgLy8gaWdub3JlIHVua25vd24gZm9ybWF0cyAoZG8gbm90IHJlcG9ydCB0aGVtIGFzIGFuIGVycm9yKVxuICAgIGlnbm9yZVVua25vd25Gb3JtYXRzOiBmYWxzZVxufTtcblxuLypcbiAgICBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFpTY2hlbWEob3B0aW9ucykge1xuICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgICB0aGlzLnJlZmVyZW5jZUNhY2hlID0gW107XG5cbiAgICB0aGlzLnNldFJlbW90ZVJlZmVyZW5jZShcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hXCIsIERyYWZ0NFNjaGVtYSk7XG4gICAgdGhpcy5zZXRSZW1vdGVSZWZlcmVuY2UoXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L2h5cGVyLXNjaGVtYVwiLCBEcmFmdDRIeXBlclNjaGVtYSk7XG5cbiAgICAvLyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyksXG4gICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICAgIGtleTtcblxuICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSBvcHRpb25zIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZFxuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0T3B0aW9uc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIG9wdGlvbiBwYXNzZWQgdG8gY29uc3RydWN0b3I6IFwiICsga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvcHkgdGhlIGRlZmF1bHQgb3B0aW9ucyBpbnRvIHBhc3NlZCBvcHRpb25zXG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0T3B0aW9ucyk7XG4gICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IFV0aWxzLmNsb25lKGRlZmF1bHRPcHRpb25zW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5jbG9uZShkZWZhdWx0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3RNb2RlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JjZUFkZGl0aW9uYWwgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvcmNlSXRlbXMgICAgICAgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9yY2VNYXhMZW5ndGggICA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5vRXh0cmFLZXl3b3JkcyAgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wdGlvbnMubm9UeXBlbGVzcyAgICAgICA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ub0VtcHR5U3RyaW5ncyAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5vRW1wdHlBcnJheXMgICAgPSB0cnVlO1xuICAgIH1cblxufVxuXG4vKlxuICAgIGluc3RhbmNlIG1ldGhvZHNcbiovXG5aU2NoZW1hLnByb3RvdHlwZS5jb21waWxlU2NoZW1hID0gZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgIHZhciByZXBvcnQgPSBuZXcgUmVwb3J0KHRoaXMub3B0aW9ucyk7XG5cbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICBTY2hlbWFDb21waWxhdGlvbi5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpO1xuXG4gICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgIHJldHVybiByZXBvcnQuaXNWYWxpZCgpO1xufTtcblpTY2hlbWEucHJvdG90eXBlLnZhbGlkYXRlU2NoZW1hID0gZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIudmFsaWRhdGVTY2hlbWEgd2FzIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFycmF5XCIpO1xuICAgIH1cblxuICAgIHZhciByZXBvcnQgPSBuZXcgUmVwb3J0KHRoaXMub3B0aW9ucyk7XG5cbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICB2YXIgY29tcGlsZWQgPSBTY2hlbWFDb21waWxhdGlvbi5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpO1xuICAgIGlmIChjb21waWxlZCkgeyBTY2hlbWFWYWxpZGF0aW9uLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpOyB9XG5cbiAgICB0aGlzLmxhc3RSZXBvcnQgPSByZXBvcnQ7XG4gICAgcmV0dXJuIHJlcG9ydC5pc1ZhbGlkKCk7XG59O1xuWlNjaGVtYS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoanNvbiwgc2NoZW1hLCBvcHRpb25zLCBjYWxsYmFjaykge1xuXG4gICAgaWYgKFV0aWxzLndoYXRJcyhvcHRpb25zKSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMpIHsgb3B0aW9ucyA9IHt9OyB9XG5cbiAgICB2YXIgd2hhdElzID0gVXRpbHMud2hhdElzKHNjaGVtYSk7XG4gICAgaWYgKHdoYXRJcyAhPT0gXCJzdHJpbmdcIiAmJiB3aGF0SXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJJbnZhbGlkIC52YWxpZGF0ZSBjYWxsIC0gc2NoZW1hIG11c3QgYmUgYW4gc3RyaW5nIG9yIG9iamVjdCBidXQgXCIgKyB3aGF0SXMgKyBcIiB3YXMgcGFzc2VkIVwiKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciBmb3VuZEVycm9yID0gZmFsc2U7XG4gICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQodGhpcy5vcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhciBzY2hlbWFOYW1lID0gc2NoZW1hO1xuICAgICAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYU5hbWUpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIHdpdGggaWQgJ1wiICsgc2NoZW1hTmFtZSArIFwiJyB3YXNuJ3QgZm91bmQgaW4gdGhlIHZhbGlkYXRvciBjYWNoZSFcIik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGVkID0gZmFsc2U7XG4gICAgaWYgKCFmb3VuZEVycm9yKSB7XG4gICAgICAgIGNvbXBpbGVkID0gU2NoZW1hQ29tcGlsYXRpb24uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgICB0aGlzLmxhc3RSZXBvcnQgPSByZXBvcnQ7XG4gICAgICAgIGZvdW5kRXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciB2YWxpZGF0ZWQgPSBmYWxzZTtcbiAgICBpZiAoIWZvdW5kRXJyb3IpIHtcbiAgICAgICAgdmFsaWRhdGVkID0gU2NoZW1hVmFsaWRhdGlvbi52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgICAgICBmb3VuZEVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zY2hlbWFQYXRoKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBzY2hlbWEgPSBnZXQoc2NoZW1hLCBvcHRpb25zLnNjaGVtYVBhdGgpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIHBhdGggJ1wiICsgb3B0aW9ucy5zY2hlbWFQYXRoICsgXCInIHdhc24ndCBmb3VuZCBpbiB0aGUgc2NoZW1hIVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm91bmRFcnJvcikge1xuICAgICAgICBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcmVwb3J0LnByb2Nlc3NBc3luY1Rhc2tzKHRoaXMub3B0aW9ucy5hc3luY1RpbWVvdXQsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAocmVwb3J0LmFzeW5jVGFza3MubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHZhbGlkYXRpb24gaGFzIGFzeW5jIHRhc2tzIGFuZCBjYW5ub3QgYmUgZG9uZSBpbiBzeW5jIG1vZGUsIHBsZWFzZSBwcm92aWRlIGNhbGxiYWNrIGFyZ3VtZW50LlwiKTtcbiAgICB9XG5cbiAgICAvLyBhc3NpZ24gbGFzdFJlcG9ydCBzbyBlcnJvcnMgYXJlIHJldHJpZXZhYmxlIGluIHN5bmMgbW9kZVxuICAgIHRoaXMubGFzdFJlcG9ydCA9IHJlcG9ydDtcbiAgICByZXR1cm4gcmVwb3J0LmlzVmFsaWQoKTtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRMYXN0RXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMubGFzdFJlcG9ydC5lcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgZSA9IG5ldyBFcnJvcigpO1xuICAgIGUubmFtZSA9IFwiei1zY2hlbWEgdmFsaWRhdGlvbiBlcnJvclwiO1xuICAgIGUubWVzc2FnZSA9IHRoaXMubGFzdFJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2U7XG4gICAgZS5kZXRhaWxzID0gdGhpcy5sYXN0UmVwb3J0LmVycm9ycztcbiAgICByZXR1cm4gZTtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRMYXN0RXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmxhc3RSZXBvcnQgJiYgdGhpcy5sYXN0UmVwb3J0LmVycm9ycy5sZW5ndGggPiAwID8gdGhpcy5sYXN0UmVwb3J0LmVycm9ycyA6IHVuZGVmaW5lZDtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRNaXNzaW5nUmVmZXJlbmNlcyA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICBhcnIgPSBhcnIgfHwgdGhpcy5sYXN0UmVwb3J0LmVycm9ycztcbiAgICB2YXIgcmVzID0gW10sXG4gICAgICAgIGlkeCA9IGFyci5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGFycltpZHhdO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gXCJVTlJFU09MVkFCTEVfUkVGRVJFTkNFXCIpIHtcbiAgICAgICAgICAgIHZhciByZWZlcmVuY2UgPSBlcnJvci5wYXJhbXNbMF07XG4gICAgICAgICAgICBpZiAocmVzLmluZGV4T2YocmVmZXJlbmNlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChyZWZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvci5pbm5lcikge1xuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLmdldE1pc3NpbmdSZWZlcmVuY2VzKGVycm9yLmlubmVyKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRNaXNzaW5nUmVtb3RlUmVmZXJlbmNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWlzc2luZ1JlZmVyZW5jZXMgPSB0aGlzLmdldE1pc3NpbmdSZWZlcmVuY2VzKCksXG4gICAgICAgIG1pc3NpbmdSZW1vdGVSZWZlcmVuY2VzID0gW10sXG4gICAgICAgIGlkeCA9IG1pc3NpbmdSZWZlcmVuY2VzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIHJlbW90ZVJlZmVyZW5jZSA9IFNjaGVtYUNhY2hlLmdldFJlbW90ZVBhdGgobWlzc2luZ1JlZmVyZW5jZXNbaWR4XSk7XG4gICAgICAgIGlmIChyZW1vdGVSZWZlcmVuY2UgJiYgbWlzc2luZ1JlbW90ZVJlZmVyZW5jZXMuaW5kZXhPZihyZW1vdGVSZWZlcmVuY2UpID09PSAtMSkge1xuICAgICAgICAgICAgbWlzc2luZ1JlbW90ZVJlZmVyZW5jZXMucHVzaChyZW1vdGVSZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtaXNzaW5nUmVtb3RlUmVmZXJlbmNlcztcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5zZXRSZW1vdGVSZWZlcmVuY2UgPSBmdW5jdGlvbiAodXJpLCBzY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzY2hlbWEgPSBKU09OLnBhcnNlKHNjaGVtYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gVXRpbHMuY2xvbmVEZWVwKHNjaGVtYSk7XG4gICAgfVxuICAgIFNjaGVtYUNhY2hlLmNhY2hlU2NoZW1hQnlVcmkuY2FsbCh0aGlzLCB1cmksIHNjaGVtYSk7XG59O1xuWlNjaGVtYS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWEgPSBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQodGhpcy5vcHRpb25zKTtcbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICAvLyBjbG9uZSBiZWZvcmUgbWFraW5nIGFueSBtb2RpZmljYXRpb25zXG4gICAgc2NoZW1hID0gVXRpbHMuY2xvbmVEZWVwKHNjaGVtYSk7XG5cbiAgICB2YXIgdmlzaXRlZCA9IFtdO1xuXG4gICAgLy8gY2xlYW4tdXAgdGhlIHNjaGVtYSBhbmQgcmVzb2x2ZSByZWZlcmVuY2VzXG4gICAgdmFyIGNsZWFudXAgPSBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB0eXBlT2YgPSBVdGlscy53aGF0SXMoc2NoZW1hKTtcbiAgICAgICAgaWYgKHR5cGVPZiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlT2YgIT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5fX18kdmlzaXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NoZW1hLl9fXyR2aXNpdGVkID0gdHJ1ZTtcbiAgICAgICAgdmlzaXRlZC5wdXNoKHNjaGVtYSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS4kcmVmICYmIHNjaGVtYS5fXyRyZWZSZXNvbHZlZCkge1xuICAgICAgICAgICAgdmFyIGZyb20gPSBzY2hlbWEuX18kcmVmUmVzb2x2ZWQ7XG4gICAgICAgICAgICB2YXIgdG8gPSBzY2hlbWE7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLiRyZWY7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLl9fJHJlZlJlc29sdmVkO1xuICAgICAgICAgICAgZm9yIChrZXkgaW4gZnJvbSkge1xuICAgICAgICAgICAgICAgIGlmIChmcm9tLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJfXyRcIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXAoc2NoZW1hW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjbGVhbnVwKHNjaGVtYSk7XG4gICAgdmlzaXRlZC5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIGRlbGV0ZSBzLl9fXyR2aXNpdGVkO1xuICAgIH0pO1xuXG4gICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgIGlmIChyZXBvcnQuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5nZXRMYXN0RXJyb3IoKTtcbiAgICB9XG59O1xuWlNjaGVtYS5wcm90b3R5cGUuc2V0U2NoZW1hUmVhZGVyID0gZnVuY3Rpb24gKHNjaGVtYVJlYWRlcikge1xuICAgIHJldHVybiBaU2NoZW1hLnNldFNjaGVtYVJlYWRlcihzY2hlbWFSZWFkZXIpO1xufTtcblpTY2hlbWEucHJvdG90eXBlLmdldFNjaGVtYVJlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gWlNjaGVtYS5zY2hlbWFSZWFkZXI7XG59O1xuXG4vKlxuICAgIHN0YXRpYyBtZXRob2RzXG4qL1xuWlNjaGVtYS5zZXRTY2hlbWFSZWFkZXIgPSBmdW5jdGlvbiAoc2NoZW1hUmVhZGVyKSB7XG4gICAgWlNjaGVtYS5zY2hlbWFSZWFkZXIgPSBzY2hlbWFSZWFkZXI7XG59O1xuWlNjaGVtYS5yZWdpc3RlckZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXROYW1lLCB2YWxpZGF0b3JGdW5jdGlvbikge1xuICAgIEZvcm1hdFZhbGlkYXRvcnNbZm9ybWF0TmFtZV0gPSB2YWxpZGF0b3JGdW5jdGlvbjtcbn07XG5aU2NoZW1hLnVucmVnaXN0ZXJGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0TmFtZSkge1xuICAgIGRlbGV0ZSBGb3JtYXRWYWxpZGF0b3JzW2Zvcm1hdE5hbWVdO1xufTtcblpTY2hlbWEuZ2V0UmVnaXN0ZXJlZEZvcm1hdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKEZvcm1hdFZhbGlkYXRvcnMpO1xufTtcblpTY2hlbWEuZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFV0aWxzLmNsb25lRGVlcChkZWZhdWx0T3B0aW9ucyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFpTY2hlbWE7XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9oeXBlci1zY2hlbWEjXCIsXG4gICAgXCJpZFwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvaHlwZXItc2NoZW1hI1wiLFxuICAgIFwidGl0bGVcIjogXCJKU09OIEh5cGVyLVNjaGVtYVwiLFxuICAgIFwiYWxsT2ZcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIlxuICAgICAgICB9XG4gICAgXSxcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhbGxPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvbmVPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJsaW5rc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9saW5rRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImZyYWdtZW50UmVzb2x1dGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1lZGlhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBtZWRpYSB0eXBlLCBhcyBkZXNjcmliZWQgaW4gUkZDIDIwNDZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiYmluYXJ5RW5jb2RpbmdcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBjb250ZW50IGVuY29kaW5nIHNjaGVtZSwgYXMgZGVzY3JpYmVkIGluIFJGQyAyMDQ1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhTdGFydFwiOiB7XG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5zdGFuY2VzJyBVUklzIG11c3Qgc3RhcnQgd2l0aCB0aGlzIHZhbHVlIGZvciB0aGlzIHNjaGVtYSB0byBhcHBseSB0byB0aGVtXCIsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImxpbmtEZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwiTGluayBEZXNjcmlwdGlvbiBPYmplY3RcIixcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiBbIFwiaHJlZlwiLCBcInJlbFwiIF0sXG4gICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFwiaHJlZlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIFVSSSB0ZW1wbGF0ZSwgYXMgZGVmaW5lZCBieSBSRkMgNjU3MCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlICQsICggYW5kICkgY2hhcmFjdGVycyBmb3IgcHJlLXByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwicmVsXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlbGF0aW9uIHRvIHRoZSB0YXJnZXQgcmVzb3VyY2Ugb2YgdGhlIGxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSB0aXRsZSBmb3IgdGhlIGxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidGFyZ2V0U2NoZW1hXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkpTT04gU2NoZW1hIGRlc2NyaWJpbmcgdGhlIGxpbmsgdGFyZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJtZWRpYVR5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWVkaWEgdHlwZSAoYXMgZGVmaW5lZCBieSBSRkMgMjA0NikgZGVzY3JpYmluZyB0aGUgbGluayB0YXJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwibWV0aG9kXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1ldGhvZCBmb3IgcmVxdWVzdGluZyB0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rIChlLmcuIGZvciBIVFRQIHRoaXMgbWlnaHQgYmUgXFxcIkdFVFxcXCIgb3IgXFxcIkRFTEVURVxcXCIpXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImVuY1R5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG1lZGlhIHR5cGUgaW4gd2hpY2ggdG8gc3VibWl0IGRhdGEgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcInNjaGVtYVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTY2hlbWEgZGVzY3JpYmluZyB0aGUgZGF0YSB0byBzdWJtaXQgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgICBcImlkXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvcmUgc2NoZW1hIG1ldGEtc2NoZW1hXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcIm1pbmltdW1cIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCI6IHtcbiAgICAgICAgICAgIFwiYWxsT2ZcIjogWyB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSwgeyBcImRlZmF1bHRcIjogMCB9IF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzaW1wbGVUeXBlc1wiOiB7XG4gICAgICAgICAgICBcImVudW1cIjogWyBcImFycmF5XCIsIFwiYm9vbGVhblwiLCBcImludGVnZXJcIiwgXCJudWxsXCIsIFwibnVtYmVyXCIsIFwib2JqZWN0XCIsIFwic3RyaW5nXCIgXVxuICAgICAgICB9LFxuICAgICAgICBcInN0cmluZ0FycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcIiRzY2hlbWFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge30sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAwLFxuICAgICAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwicmVnZXhcIlxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIFwiYWxsT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm9uZU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwibm90XCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICB9LFxuICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IFsgXCJtYXhpbXVtXCIgXSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IFsgXCJtaW5pbXVtXCIgXVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHt9XG59XG4iXX0= diff --git a/browser/sway.js b/browser/sway.js index 789ff69..5d5c32c 100644 --- a/browser/sway.js +++ b/browser/sway.js @@ -1,4 +1,4 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.SwaggerApi = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o -1) { + try { + value = JSON.parse(value); + } catch (err) { + // Nothing to do here, just fall through + } + } + + switch (type) { + case 'array': + if (_.isString(value)) { + if (collectionFormats.indexOf(options.collectionFormat) === -1) { + throw new TypeError('Invalid \'collectionFormat\' value: ' + options.collectionFormat); + } + + switch (options.collectionFormat) { + case 'csv': + case undefined: + value = value.split(','); + break; + case 'multi': + value = [value]; + break; + case 'pipes': + value = value.split('|'); + break; + case 'ssv': + value = value.split(' '); + break; + case 'tsv': + value = value.split('\t'); + break; + + // no default + } + } + + if (_.isArray(value)) { + value = _.map(value, function (item, index) { + return convertValue(_.isArray(schema.items) ? schema.items[index] : schema.items, options, item); + }); + } + + break; + case 'boolean': + if (!_.isBoolean(value)) { + if (value === 'true') { + value = true; + } else if (value === 'false') { + value = false; + } else { + err = new TypeError('Not a valid boolean: ' + value); + } + } + + break; + case 'integer': + if (!_.isNumber(value)) { + if (_.isString(value) && _.trim(value).length === 0) { + value = NaN; + } + + value = Number(value); + + if (_.isNaN(value)) { + err = new TypeError('Not a valid integer: ' + originalValue); + } + } + + break; + case 'number': + if (!_.isNumber(value)) { + if (_.isString(value) && _.trim(value).length === 0) { + value = NaN; + } + + value = Number(value); + + if (_.isNaN(value)) { + err = new TypeError('Not a valid number: ' + originalValue); + } + } + break; + case 'string': + if (['date', 'date-time'].indexOf(schema.format) > -1) { + if (_.isString(value)) { + value = new Date(value); + } + + if (!_.isDate(value) || value.toString() === 'Invalid Date') { + err = new TypeError('Not a valid ' + schema.format + ' string: ' + originalValue); + + err.code = 'INVALID_FORMAT'; + } + } else if (!_.isString(value)) { + err = new TypeError('Not a valid string: ' + value); + } + + break; + + // no default + } + + if (!_.isUndefined(err)) { + // Convert the error to be more like a JSON Schema validation error + if (_.isUndefined(err.code)) { + err.code = 'INVALID_TYPE'; + err.message = 'Expected type ' + type + ' but found type ' + pType; + } else { + err.message = 'Object didn\'t pass validation for format ' + schema.format + ': ' + pValue; + } + + // Format and type errors resemble JSON Schema validation errors + err.failedValidation = true; + err.path = []; + + throw err; + } + + return value; }; +/** + * Returns a json-schema-faker mocker. + * + * @returns {object} The json-schema-faker mocker to use + */ +module.exports.getJSONSchemaMocker = function () { + return jsonMocker; +}; + +/** + * Returns a z-schema validator. + * + * @returns {object} The z-schema validator to use + */ +module.exports.getJSONSchemaValidator = function () { + return jsonSchemaValidator; +}; + +module.exports.parameterLocations = ['body', 'formData', 'header', 'path', 'query']; + +/** + * Replaces the circular references in the provided object with an empty object. + * + * @param {object} obj - The JavaScript object + */ +module.exports.removeCirculars = function (obj) { + function walk (ancestors, node, path) { + function walkItem (item, segment) { + path.push(segment); + walk(ancestors, item, path); + path.pop(); + } + + // We do not process circular objects again + if (ancestors.indexOf(node) === -1) { + ancestors.push(node); + + if (_.isArray(node) || _.isPlainObject(node)) { + _.each(node, function (member, indexOrKey) { + walkItem(member, indexOrKey.toString()); + }); + } + } else { + _.set(obj, path, {}); + } + + ancestors.pop(); + } + + walk([], obj, []); +} + +module.exports.supportedHttpMethods = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch']; + /** * Validates the provided value against the JSON Schema by name or value. * @@ -335,17 +639,17 @@ module.exports.validateContentType = function (contentType, supportedTypes, resu // Check for exact match or mime-type only match if (_.indexOf(supportedTypes, rawContentType) === -1 && _.indexOf(supportedTypes, contentType) === -1) { results.errors.push({ - code: 'INVALID_CONTENT_TYPE', - message: 'Invalid Content-Type (' + contentType + '). These are supported: ' + - supportedTypes.join(', '), - path: [] - }); + code: 'INVALID_CONTENT_TYPE', + message: 'Invalid Content-Type (' + contentType + '). These are supported: ' + + supportedTypes.join(', '), + path: [] + }); } }; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./json-schema-draft-04.json":3,"json-schema-faker":137,"z-schema":185}],3:[function(require,module,exports){ +},{"./json-schema-draft-04.json":3,"./validation/format-generators":10,"./validation/format-validators":11,"json-schema-faker":135,"z-schema":182}],3:[function(require,module,exports){ module.exports={ "id": "http://json-schema.org/draft-04/schema#", "$schema": "http://json-schema.org/draft-04/schema#", @@ -528,6 +832,8 @@ module.exports={ var _ = (typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null); var debug = require('debug')('sway:api'); var parseUrl = require('url').parse; +var Path = require('./path'); +var validators = require('../validation/validators'); /** * The Swagger API object. @@ -537,43 +843,53 @@ var parseUrl = require('url').parse; * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {object} plugin - The Swagger version plugin - * @param {object} definition - The Swagger definition - * @param {object} resolved - The fully resolved Swagger definition + * @param {object} definition - The original Swagger definition + * @param {obejct} definitionRemotesResolved - The Swagger definition with all of its remote references resolved + * @param {object} definitionAllResolved - The Swagger definition with all of its references resolved * @param {object} references - The location and resolution of the resolved references in the Swagger definition * @param {object} options - The options passed to swaggerApi.create - * @param {ValidatorCallback} [options.customValidators] - The custom validators * * @property {ValidatorCallback[]} customValidators - The array of custom validators - * @property {object} definition - The API definition + * @property {object} definition - The original Swagger definition + * @property {obejct} definitionRemotesResolved - The Swagger definition with all of its remote references resolved + * @property {object} definitionAllResolved - The Swagger definition with all of its references resolved * @property {string} documentation - The URL to the Swagger documentation * @property {Path[]} pathObjects - The unique path objects * @property {object} options - The options passed to the constructor * @property {object} references - The reference metadata *(See [JsonRefs~ResolvedRefDetails](https://github.com/whitlockjc/json-refs/blob/master/docs/API.md#module_JsonRefs..ResolvedRefDetails))* - * @property {object} resolved - The fully resolved API definition * @property {string} version - The Swagger API version * * @constructor */ -function SwaggerApi (plugin, definition, resolved, references, options) { +function SwaggerApi (definition, definitionRemotesResolved, definitionAllResolved, references, options) { + var that = this; + + // Assign local properties this.customValidators = []; this.definition = definition; - this.documentation = plugin.documentation; + this.definitionAllResolved = definitionAllResolved; + this.definitionRemotesResolved = definitionRemotesResolved; + this.documentation = 'https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md'; this.options = options; - this.plugin = plugin; this.references = references; - this.resolved = resolved; - this.version = plugin.version; + this.version = '2.0'; - // Assign Swagger definition properties to the api for easy access + // Assign local properties from the Swagger definition properties _.assign(this, definition); - debug('Initializing Sway using %s', _.isString(options.definition) ? options.definition : 'the provided document'); - - this.pathObjects = plugin.getPaths(this); - // Register custom validators - _.forEach(options.customValidators, SwaggerApi.prototype.registerValidator, this); + _.each(options.customValidators, SwaggerApi.prototype.registerValidator, this); + + // Create the Path objects + this.pathObjects = _.map(definitionAllResolved.paths, function (pathDef, path) { + return new Path(that, + path, + pathDef, + ['paths', path]); + + }); + + debug('Creating SwaggerApi from %s', _.isString(options.definition) ? options.definition : 'the provided document'); } /** @@ -732,15 +1048,15 @@ SwaggerApi.prototype.validate = function () { } // Validate the document structurally - doValidation(this.plugin.getStructuralValidator()); + doValidation(validators.jsonSchemaValidator); // Perform remaining validation only if the document is structurally valid if (results.errors.length === 0) { // Run plugin validators - _.forEach(this.plugin.getSemanticValidators(), doValidation); + _.each(validators.semanticValidators, doValidation); // Run custom validators - _.forEach(this.customValidators, doValidation); + _.each(this.customValidators, doValidation); } return results; @@ -750,7 +1066,7 @@ module.exports = SwaggerApi; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"debug":20,"url":173}],5:[function(require,module,exports){ +},{"../validation/validators":13,"./path":8,"debug":18,"url":170}],5:[function(require,module,exports){ (function (global){ /* * The MIT License (MIT) @@ -780,7 +1096,10 @@ module.exports = SwaggerApi; var _ = (typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null); var debug = require('debug')('sway:operation'); -var sHelpers = require('../helpers'); +var JsonRefs = (typeof window !== "undefined" ? window['JsonRefs'] : typeof global !== "undefined" ? global['JsonRefs'] : null); +var Parameter = require('./parameter'); +var Response = require('./response'); +var helpers = require('../helpers'); /** * The Swagger Operation object. @@ -790,47 +1109,85 @@ var sHelpers = require('../helpers'); * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {SwaggerApi} api - The Swagger API object * @param {Path} pathObject - The Path object * @param {string} method - The operation method - * @param {string} ptr - The JSON Pointer to the operation * @param {object} definition - The operation definition - * @param {string[]} consumes - The mime types this operation consumes - * @param {string[]} produces - The mime types this operation produces + * @param {string[]} pathToDefinition - The path segments to the operation definition * - * @property {SwaggerApi} api - The Swagger API object * @property {object} definition - The operation definition * @property {string} method - The HTTP method for this operation * @property {Path} pathObject - The Path object + * @property {string[]} pathToDefinition - The path segments to the operation definition * @property {Parameter[]} parameterObjects - The Parameter objects * @property {string} ptr - The JSON Pointer to the operation * @property {object} securityDefinitions - The security definitions used by this operation * * @constructor */ -function Operation (api, pathObject, method, ptr, definition, consumes, produces) { - this.api = api; - this.pathObject = pathObject; - this.method = method; - this.ptr = ptr; - this.definition = definition; +function Operation (pathObject, method, definition, pathToDefinition) { + var seenParameters = []; + var that = this; - // Assign Swagger definition properties to the operation for easy access + // Assign local properties + this.consumes = definition.consumes || pathObject.api.consumes || []; + this.definition = _.cloneDeep(definition); // Clone so we do not alter the original + this.method = method; + this.parameterObjects = []; // Computed below + this.pathObject = pathObject; + this.pathToDefinition = pathToDefinition; + this.produces = definition.produces || pathObject.api.produces || []; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); + + // Assign local properties from the Swagger definition properties _.assign(this, definition); - // Assign consumes/produces after merging properties - this.consumes = consumes; - this.produces = produces; + // Default to the global security + if (_.isUndefined(this.security)) { + this.security = this.definition.security = pathObject.api.definitionAllResolved.security; + } - debug('Found operation at %s', ptr); + // Add the Parameter objects from the Path object that were not redefined in the operation definition + this.parameterObjects = _.map(pathObject.parameterObjects, function (parameterObject) { + seenParameters.push(parameterObject.in + ':' + parameterObject.name); - this.parameterObjects = api.plugin.getOperationParameters(this); - this.responseObjects = api.plugin.getOperationResponses(this); + return parameterObject; + }); + + // Create Parameter objects from parameters defined in the operation definition + _.each(definition.parameters, function (paramDef, index) { + var key = paramDef.in + ':' + paramDef.name; + var seenIndex = seenParameters.indexOf(key); + var parameterObject = new Parameter(that, + paramDef, + pathToDefinition.concat(['parameters', index.toString()])); + + if (seenIndex > -1) { + that.parameterObjects[seenIndex] = parameterObject; + } else { + that.parameterObjects.push(parameterObject); + + seenParameters.push(key); + } + }); + + this.parameters = this.definition.parameters = _.map(this.parameterObjects, function (parameterObject) { + return parameterObject.definition; + }); + + // Create response objects from responses defined in the operation definition + this.responseObjects = _.map(definition.responses, function (responseDef, code) { + return new Response(that, + code, + responseDef, + pathToDefinition.concat(['responses', code])); + }); // Bring in the security definitions for easier access - this.securityDefinitions = _.reduce(definition.security, function (defs, reqs) { + this.securityDefinitions = _.reduce(this.security, function (defs, reqs) { _.each(reqs, function (req, name) { - var def = api.resolved.securityDefinitions ? api.resolved.securityDefinitions[name] : undefined; + var def = pathObject.api.definitionAllResolved.securityDefinitions ? + pathObject.api.definitionAllResolved.securityDefinitions[name] : + undefined; if (!_.isUndefined(def)) { defs[name] = def; @@ -839,10 +1196,12 @@ function Operation (api, pathObject, method, ptr, definition, consumes, produces return defs; }, {}); + + debug('Found operation at %s', this.ptr); } /** - * Returns the parameter with the provided location and name. + * Returns the parameter with the provided name and location when provided. * * @param {string} name - The name of the parameter * @param {string} [location] - The location *(`in`)* of the parameter *(Used for disambiguation)* @@ -921,7 +1280,7 @@ Operation.prototype.validateRequest = function (req) { // Validate the Content-Type but only for POST and PUT (The rest do not have bodies) if (['post', 'put'].indexOf(this.method) > -1) { // Defaults to application/octet-stream per http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1 - sHelpers.validateContentType(req.headers['content-type'] || 'application/octet-stream', this.consumes, results); + helpers.validateContentType(req.headers['content-type'] || 'application/octet-stream', this.consumes, results); } // Validate the parameters @@ -994,7 +1353,7 @@ module.exports = Operation; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../helpers":2,"debug":20}],6:[function(require,module,exports){ +},{"../helpers":2,"./parameter":7,"./response":9,"debug":18}],6:[function(require,module,exports){ (function (global){ /* * The MIT License (MIT) @@ -1031,7 +1390,7 @@ var JsonRefs = (typeof window !== "undefined" ? window['JsonRefs'] : typeof glob * * **Note:** Do not use directly. * - * @param {Parameter} parameter - The Parameter Object + * @param {Parameter} parameterObject - The Parameter Object * @param {*} raw - The original/raw value * * @property {Error} error - The error(s) encountered during processing/validating the parameter value @@ -1045,16 +1404,15 @@ var JsonRefs = (typeof window !== "undefined" ? window['JsonRefs'] : typeof glob * * @constructor */ -function ParameterValue (parameter, raw) { - var plugin = parameter.pathObject.api.plugin; - var pPath = JsonRefs.pathFromPtr(parameter.ptr); +function ParameterValue (parameterObject, raw) { + var pPath = JsonRefs.pathFromPtr(parameterObject.ptr); var processed = false; - var schema = parameter.computedSchema; + var schema = parameterObject.computedSchema; var error; var isValid; var processedValue; - this.parameterObject = parameter; + this.parameterObject = parameterObject; this.raw = raw; // Use Object.defineProperty for 'value' to allow for lazy processing of the raw value @@ -1088,7 +1446,7 @@ function ParameterValue (parameter, raw) { if (_.isUndefined(error)) { try { // Validate requiredness - if (parameter.required === true && _.isUndefined(value)) { + if (parameterObject.required === true && _.isUndefined(value)) { vError = new Error('Value is required but was not provided'); vError.code = 'REQUIRED'; @@ -1103,11 +1461,11 @@ function ParameterValue (parameter, raw) { // * The schema defines a file parameter // * The schema is for a string type with date/date-time format and the value is a date // * The schema is for a string type and the value is a Buffer - if (parameter.required === false && _.isUndefined(value)) { + if (parameterObject.required === false && _.isUndefined(value)) { skipValidation = true; } else if (schema.allowEmptyValue === true && value === '') { skipValidation = true; - } else if (parameter.type === 'file') { + } else if (parameterObject.type === 'file') { skipValidation = true; } else if (schema.type === 'string') { if (['date', 'date-time'].indexOf(schema.format) > -1 && _.isDate(value)) { @@ -1119,7 +1477,7 @@ function ParameterValue (parameter, raw) { if (!skipValidation) { // Validate against JSON Schema - result = helpers.validateAgainstSchema(plugin.getJSONSchemaValidator(), parameter.getSchema(), value); + result = helpers.validateAgainstSchema(helpers.getJSONSchemaValidator(), parameterObject.getSchema(), value); } if (result.errors.length > 0) { @@ -1154,8 +1512,8 @@ function ParameterValue (parameter, raw) { } else { // Convert/Coerce the raw value from the request object try { - processedValue = plugin.convertValue(schema, { - collectionFormat: parameter.collectionFormat + processedValue = helpers.convertValue(schema, { + collectionFormat: parameterObject.collectionFormat }, raw); } catch (err) { error = err; @@ -1231,7 +1589,8 @@ module.exports = ParameterValue; var _ = (typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null); var debug = require('debug')('sway:parameter'); -var Operation = require('./operation'); +var helpers = require('../helpers'); +var JsonRefs = (typeof window !== "undefined" ? window['JsonRefs'] : typeof global !== "undefined" ? global['JsonRefs'] : null); var ParameterValue = require('./parameter-value'); var parseUrl = require('url').parse; @@ -1243,40 +1602,43 @@ var parseUrl = require('url').parse; * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {Operation|Path} opOrPath - The Operation or Path object - * @param {string} ptr - The JSON Pointer to the parameter + * @param {Operation|Path} opOrPathObject - The `Operation` or `Path` object * @param {object} definition - The parameter definition - * @param {object} schema - The JSON Schema for the parameter + * @param {string[]} pathToDefinition - The path segments to the parameter definition * + * @property {object} computedSchema - The computed JSON Schema for the parameter * @property {object} definition - The parameter definition - * @property {Operation} operationObject - The Operation object (Can be undefined for path-level parameters) - * @property {Path} pathObject - The Path object + * @property {Operation} operationObject - The `Operation` object the parameter belongs to *(Can be undefined for + * path-level parameters)* + * @property {Path} pathObject - The `Path` object the parameter belongs t + * @property {string[]} pathToDefinition - The path segments to the parameter definition * @property {string} ptr - The JSON Pointer to the parameter definition - * @property {object} schema - The JSON Schema for the parameter * * @constructor */ -function Parameter (opOrPath, ptr, definition, schema) { - this.computedSchema = schema; +function Parameter (opOrPathObject, definition, pathToDefinition) { + // Assign local properties + this.computedSchema = helpers.computeParameterSchema(definition); this.definition = definition; - this.ptr = ptr; + this.pathToDefinition = pathToDefinition; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); - if (opOrPath instanceof Operation) { - this.operationObject = opOrPath; - this.pathObject = opOrPath.pathObject; + if (_.has(opOrPathObject, 'consumes')) { + this.operationObject = opOrPathObject; + this.pathObject = opOrPathObject.pathObject; } else { this.operationObject = undefined; - this.pathObject = opOrPath; + this.pathObject = opOrPathObject; } - // Assign Swagger definition properties to the parameter for easy access + // Assign local properties from the Swagger definition properties _.assign(this, definition); debug('Found %s parameter (%s in %s) at %s', _.isUndefined(this.operationObject) ? 'path-level' : 'operation', definition.name, definition.in, - ptr); + this.ptr); } /** @@ -1294,7 +1656,7 @@ Parameter.prototype.getSchema = function () { * @returns {*} The sample value */ Parameter.prototype.getSample = function () { - return this.pathObject.api.plugin.getSample(this.computedSchema); + return helpers.getJSONSchemaMocker()(this.computedSchema); }; /** @@ -1321,11 +1683,9 @@ Parameter.prototype.getSample = function () { * parameter is missing. */ Parameter.prototype.getValue = function (req) { - var api = (this.operationObject || this.pathObject).api; - if (_.isUndefined(req)) { throw new TypeError('req is required'); - } else if (api.plugin.parameterLocations.indexOf(this.in) === -1) { + } else if (helpers.parameterLocations.indexOf(this.in) === -1) { throw new Error('Invalid \'in\' value: ' + this.in); } @@ -1396,7 +1756,7 @@ module.exports = Parameter; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./operation":5,"./parameter-value":6,"debug":20,"url":173}],8:[function(require,module,exports){ +},{"../helpers":2,"./parameter-value":6,"debug":18,"url":170}],8:[function(require,module,exports){ (function (global){ /* * The MIT License (MIT) @@ -1426,6 +1786,11 @@ module.exports = Parameter; var _ = (typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null); var debug = require('debug')('sway:path'); +var helpers = require('../helpers'); +var JsonRefs = (typeof window !== "undefined" ? window['JsonRefs'] : typeof global !== "undefined" ? global['JsonRefs'] : null); +var Operation = require('./operation'); +var Parameter = require('./parameter'); +var pathToRegexp = require('path-to-regexp'); /** * The Path object. @@ -1437,34 +1802,59 @@ var debug = require('debug')('sway:path'); * * @param {SwaggerApi} api - The Swagger API object * @param {string} path - The path string - * @param {ptr} ptr - The JSON Pointer to the path * @param {object} definition - The path definition - * @param {regexp} regexp - The regexp used to match request paths against this path + * @param {string[]} pathToDefinition - The path segments to the path definition * * @property {SwaggerApi} api - The Swagger API object * @property {object} definition - The path definition - * @property {Operation[]} operationObjects - The operation objects - * @property {Parameter[]} parameterObjects - The path-level parameter objects + * @property {Operation[]} operationObjects - The `Operation` objects + * @property {Parameter[]} parameterObjects - The path-level `Parameter` objects * @property {string} path - The path string + * @property {string[]} pathToDefinition - The path segments to the path definition * @property {ptr} ptr - The JSON Pointer to the path - * @property {regexp} regexp - The regexp used to match request paths against this path + * @property {regexp} regexp - The `RegExp` used to match request paths against this path * * @constructor */ -function Path (api, path, ptr, definition, regexp) { - this.api = api; - this.path = path; - this.ptr = ptr; - this.definition = definition; - this.regexp = regexp; +function Path (api, path, definition, pathToDefinition) { + var basePathPrefix = api.definitionAllResolved.basePath || '/'; + var that = this; - // Assign Swagger definition properties to the operation for easy access + // TODO: We could/should refactor this to use the path module + + // Remove trailing slash from the basePathPrefix so we do not end up with double slashes + if (basePathPrefix.charAt(basePathPrefix.length - 1) === '/') { + basePathPrefix = basePathPrefix.substring(0, basePathPrefix.length - 1); + } + + // Assign local properties + this.api = api; + this.definition = definition; + this.path = path; + this.pathToDefinition = pathToDefinition; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); + this.regexp = pathToRegexp(basePathPrefix + path.replace(/\{/g, ':').replace(/\}/g, '')); + + // Assign local properties from the Swagger definition properties _.assign(this, definition); - debug('Found path at %s', ptr); + this.parameterObjects = _.map(definition.parameters, function (paramDef, index) { + return new Parameter(that, + paramDef, + pathToDefinition.concat(['parameters', index.toString()])); + }); + this.operationObjects = _.reduce(definition, function (operations, operationDef, method) { + if (helpers.supportedHttpMethods.indexOf(method) > -1) { + operations.push(new Operation(that, + method, + operationDef, + pathToDefinition.concat(method))); + } - this.parameterObjects = api.plugin.getPathParameters(this); - this.operationObjects = api.plugin.getOperations(this); + return operations; + }, []); + + debug('Found path at %s', this.ptr); } /** @@ -1516,7 +1906,7 @@ module.exports = Path; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"debug":20}],9:[function(require,module,exports){ +},{"../helpers":2,"./operation":5,"./parameter":7,"debug":18,"path-to-regexp":158}],9:[function(require,module,exports){ (function (global){ /* * The MIT License (MIT) @@ -1546,11 +1936,11 @@ module.exports = Path; var _ = (typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null); var debug = require('debug')('sway:response'); -var sHelpers = require('../helpers'); +var helpers = require('../helpers'); +var jsonValidator = helpers.getJSONSchemaValidator(); +var JsonRefs = (typeof window !== "undefined" ? window['JsonRefs'] : typeof global !== "undefined" ? global['JsonRefs'] : null); var YAML = (typeof window !== "undefined" ? window['jsyaml'] : typeof global !== "undefined" ? global['jsyaml'] : null); -var jsonValidator; - /** * The Swagger Response object. * @@ -1559,30 +1949,31 @@ var jsonValidator; * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {Operation} operation - The Operation object - * @param {string} ptr - The JSON Pointer to the response - * @param {object} definition - The parameter definition + * @param {Operation} operationObject - The `Operation` object * @param {string} statusCode - The status code + * @param {object} definition - The parameter definition + * @param {string[]} pathToDefinition - The path segments to the path definition * * @property {object} definition - The response definition * @property {Operation} operationObject - The Operation object + * @property {string[]} pathToDefinition - The path segments to the path definition * @property {string} ptr - The JSON Pointer to the response definition * @property {string} statusCode - The status code * * @constructor */ -function Response (operation, ptr, definition, statusCode) { +function Response (operationObject, statusCode, definition, pathToDefinition) { + // Assign local properties this.definition = definition; - this.operationObject = operation; - this.ptr = ptr; + this.operationObject = operationObject; + this.pathToDefinition = pathToDefinition; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); this.statusCode = statusCode; - // Assign Swagger definition properties to the parameter for easy access + // Assign local properties from the Swagger definition properties _.assign(this, definition); - debug('Found %s response at %s', statusCode, ptr); - - jsonValidator = operation.api.plugin.getJSONSchemaValidator(); + debug('Found %s response at %s', statusCode, this.ptr); } /** @@ -1619,7 +2010,7 @@ Response.prototype.getSample = function () { var sample; if (!_.isUndefined(this.definition.schema)) { - sample = this.operationObject.api.plugin.getSample(this.definition.schema); + sample = helpers.getJSONSchemaMocker()(this.definition.schema); } return sample; @@ -1637,7 +2028,6 @@ Response.prototype.validateResponse = function (res) { errors: [], warnings: [] }; - var that = this; var bodyValue; var bvResults; @@ -1652,7 +2042,7 @@ Response.prototype.validateResponse = function (res) { // Validate the Content-Type except for void responses, 204 responses and 304 responses as they have no body if (!_.isUndefined(this.definition.schema) && _.indexOf(['204', '304'], this.statusCode) === -1) { - sHelpers.validateContentType(res.headers['content-type'], this.operationObject.produces, results); + helpers.validateContentType(res.headers['content-type'], this.operationObject.produces, results); } // Validate the response headers @@ -1661,28 +2051,28 @@ Response.prototype.validateResponse = function (res) { var hvResults; try { - headerValue = that.operationObject.api.plugin.convertValue(schema, - { - collectionFormat: schema.collectionFormat - }, - // Overly cautious - res.headers[name.toLowerCase()] || - res.headers[name] || - schema.default); + headerValue = helpers.convertValue(schema, + { + collectionFormat: schema.collectionFormat + }, + // Overly cautious + res.headers[name.toLowerCase()] || + res.headers[name] || + schema.default); } catch (err) { results.errors.push({ - code: 'INVALID_RESPONSE_HEADER', - errors: err.errors || [ - { - code: err.code, - message: err.message, - path: err.path - } - ], - message: 'Invalid header (' + name + '): ' + err.message, - name: name, - path: err.path - }); + code: 'INVALID_RESPONSE_HEADER', + errors: err.errors || [ + { + code: err.code, + message: err.message, + path: err.path + } + ], + message: 'Invalid header (' + name + '): ' + err.message, + name: name, + path: err.path + }); } // Due to ambiguity in the Swagger 2.0 Specification (https://github.com/swagger-api/swagger-spec/issues/321), it @@ -1692,7 +2082,7 @@ Response.prototype.validateResponse = function (res) { // We also do not want to validate date objects because it is redundant. If we have already converted the value // from a string+format to a date, we know it passes schema validation. if (!_.isUndefined(headerValue) && !_.isDate(headerValue)) { - hvResults = sHelpers.validateAgainstSchema(jsonValidator, schema, headerValue); + hvResults = helpers.validateAgainstSchema(jsonValidator, schema, headerValue); if (hvResults.errors.length > 0) { results.errors.push({ @@ -1713,10 +2103,10 @@ Response.prototype.validateResponse = function (res) { // Validate response for non-void responses if (!_.isUndefined(this.definition.schema) && _.indexOf(['204', '304'], this.statusCode) === -1) { try { - bodyValue = that.operationObject.api.plugin.convertValue(this.definition.schema, { + bodyValue = helpers.convertValue(this.definition.schema, { encoding: res.encoding }, res.body); - bvResults = sHelpers.validateAgainstSchema(jsonValidator, this.definition.schema, bodyValue); + bvResults = helpers.validateAgainstSchema(jsonValidator, this.definition.schema, bodyValue); } catch (err) { bvResults = { errors: [ @@ -1748,7 +2138,7 @@ module.exports = Response; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../helpers":2,"debug":20}],10:[function(require,module,exports){ +},{"../helpers":2,"debug":18}],10:[function(require,module,exports){ (function (global){ /* * The MIT License (MIT) @@ -1806,7 +2196,7 @@ module.exports.password = function (gen, schema) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"js-base64":136,"json-schema-faker/lib/types/string":144}],11:[function(require,module,exports){ +},{"js-base64":134,"json-schema-faker/lib/types/string":142}],11:[function(require,module,exports){ (function (global){ /* * The MIT License (MIT) @@ -1856,599 +2246,6 @@ module.exports.password = returnTrue; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],12:[function(require,module,exports){ -(function (global){ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 Apigee Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -'use strict'; - -var _ = (typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null); - -// https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#parameter-object -var parameterSchemaProperties = [ - 'allowEmptyValue', - 'default', - 'description', - 'enum', - 'exclusiveMaximum', - 'exclusiveMinimum', - 'format', - 'items', - 'maxItems', - 'maxLength', - 'maximum', - 'minItems', - 'minLength', - 'minimum', - 'multipleOf', - 'pattern', - 'type', - 'uniqueItems' -]; - -module.exports.getParameterSchema = function (parameter) { - var schema; - - if (_.isUndefined(parameter.schema)) { - schema = {}; - - // Build the schema from the schema-like parameter structure - _.forEach(parameterSchemaProperties, function (name) { - if (!_.isUndefined(parameter[name])) { - schema[name] = parameter[name]; - } - }); - } else { - schema = parameter.schema; - } - - return schema; -}; - -module.exports.supportedHttpMethods = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch']; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],13:[function(require,module,exports){ -(function (global){ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 Apigee Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -'use strict'; - -var _ = (typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null); -var dirname = require('path').dirname; -var formatGenerators = require('./format-generators'); -var helpers = require('../../helpers'); -var JsonRefs = (typeof window !== "undefined" ? window['JsonRefs'] : typeof global !== "undefined" ? global['JsonRefs'] : null); -var Operation = require('../../types/operation'); -var Parameter = require('../../types/parameter'); -var Path = require('../../types/path'); -var pathToRegexp = require('path-to-regexp'); -var Response = require('../../types/response'); -var SwaggerApi = require('../../types/api'); -var validators = require('./validators'); -var vHelpers = require('./helpers'); -var YAML = (typeof window !== "undefined" ? window['jsyaml'] : typeof global !== "undefined" ? global['jsyaml'] : null); - -var collectionFormats = [undefined, 'csv', 'multi', 'pipes', 'ssv', 'tsv']; -var customFormatValidators = require('./format-validators'); -var docsUrl = 'https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md'; -var jsonSchemaValidator = helpers.createJSONValidator({ - formatValidators: customFormatValidators -}); -var mocker = helpers.createJSONSchemaMocker({ - formatGenerators: formatGenerators -}); -var parameterLocations = ['body', 'formData', 'header', 'path', 'query']; -var types = ['array', 'boolean', 'integer', 'object', 'number', 'string']; -var version = '2.0'; - -function realConvertValue (schema, options, value) { - var originalValue = value; // Used in error reporting for invalid values - var type = _.isPlainObject(schema) ? schema.type : undefined; - var pValue = value; - var pType = typeof pValue; - var err; - - // If there is an explicit type provided, make sure it's one of the supported ones - if (_.has(schema, 'type') && types.indexOf(type) === -1) { - throw new TypeError('Invalid \'type\' value: ' + type); - } - - // Since JSON Schema allows you to not specify a type and it is treated as a wildcard of sorts, we should not do any - // coercion for these types of values. - if (_.isUndefined(type)) { - return value; - } - - // If there is no value, do not convert it - if (_.isUndefined(value)) { - return value; - } - - // Convert Buffer value to String - // (We use this type of check to identify Buffer objects. The browser does not have a Buffer type and to avoid having - // import the browserify buffer module, we just do a simple check. This is brittle but should work.) - if (_.isFunction(value.readUInt8)) { - value = value.toString(options.encoding); - pValue = value; - pType = typeof value; - } - - // If the value is empty and empty is allowed, use it - if (schema.allowEmptyValue && value === '') { - return value; - } - - // Attempt to parse the string as JSON if the type is array or object - if (['array', 'object'].indexOf(type) > -1) { - try { - value = JSON.parse(value); - } catch (err) { - // Nothing to do here, just fall through - } - } - - switch (type) { - case 'array': - if (_.isString(value)) { - if (collectionFormats.indexOf(options.collectionFormat) === -1) { - throw new TypeError('Invalid \'collectionFormat\' value: ' + options.collectionFormat); - } - - switch (options.collectionFormat) { - case 'csv': - case undefined: - value = value.split(','); - break; - case 'multi': - value = [value]; - break; - case 'pipes': - value = value.split('|'); - break; - case 'ssv': - value = value.split(' '); - break; - case 'tsv': - value = value.split('\t'); - break; - - // no default - } - } - - if (_.isArray(value)) { - value = _.map(value, function (item, index) { - return realConvertValue(_.isArray(schema.items) ? schema.items[index] : schema.items, options, item); - }); - } - - break; - case 'boolean': - if (!_.isBoolean(value)) { - if (value === 'true') { - value = true; - } else if (value === 'false') { - value = false; - } else { - err = new TypeError('Not a valid boolean: ' + value); - } - } - - break; - case 'integer': - if (!_.isNumber(value)) { - if (_.isString(value) && _.trim(value).length === 0) { - value = NaN; - } - - value = Number(value); - - if (_.isNaN(value)) { - err = new TypeError('Not a valid integer: ' + originalValue); - } - } - - break; - case 'number': - if (!_.isNumber(value)) { - if (_.isString(value) && _.trim(value).length === 0) { - value = NaN; - } - - value = Number(value); - - if (_.isNaN(value)) { - err = new TypeError('Not a valid number: ' + originalValue); - } - } - break; - case 'string': - if (['date', 'date-time'].indexOf(schema.format) > -1) { - if (_.isString(value)) { - value = new Date(value); - } - - if (!_.isDate(value) || value.toString() === 'Invalid Date') { - err = new TypeError('Not a valid ' + schema.format + ' string: ' + originalValue); - - err.code = 'INVALID_FORMAT'; - } - } else if (!_.isString(value)) { - err = new TypeError('Not a valid string: ' + value); - } - - break; - - // no default - } - - if (!_.isUndefined(err)) { - // Convert the error to be more like a JSON Schema validation error - if (_.isUndefined(err.code)) { - err.code = 'INVALID_TYPE'; - err.message = 'Expected type ' + type + ' but found type ' + pType; - } else { - err.message = 'Object didn\'t pass validation for format ' + schema.format + ': ' + pValue; - } - - // Format and type errors resemble JSON Schema validation errors - err.failedValidation = true; - err.path = []; - - throw err; - } - - return value; -} - -function removeCirculars (doc) { - function walk (ancestors, node, path) { - function walkItem (item, segment) { - path.push(segment); - walk(ancestors, item, path); - path.pop(); - } - - // We do not process circular objects again - if (ancestors.indexOf(node) === -1) { - ancestors.push(node); - - if (_.isArray(node) || _.isPlainObject(node)) { - _.each(node, function (member, indexOrKey) { - walkItem(member, indexOrKey.toString()); - }); - } - } else { - _.set(doc, path, {}); - } - - ancestors.pop(); - } - - walk([], doc, []); -} - -module.exports.collectionFormats = collectionFormats; - -// The URL to the Swagger 2.0 documentation -module.exports.documentation = docsUrl; - -module.exports.parameterLocations = parameterLocations; - -// The array of supported HTTP methods for each path -module.exports.supportedHttpMethods = vHelpers.supportedHttpMethods; - -module.exports.types = types; - -// The version for this Swagger version -module.exports.version = version; - -/** - * Returns whether or not the provided definition can be processed. - * - * @param {object} definition - The potential Swagger definition to test - * - * @returns {boolean} Returns true only if the definition represents a Swagger 2.0 definition - */ -module.exports.canProcess = function (definition) { - return definition.swagger === version; -}; - -/** - * Converts a raw JavaScript value to a JSON Schema value based on its schema. - * - * @param {object} schema - The schema for the value - * @param {object} options - The conversion options - * @param {string} [options.collectionFormat] - The collection format - * @param {string} [options.encoding] - The encoding if the raw value is a `Buffer` - * @param {*} value - The value to convert - * - * @returns {*} The converted value - */ -module.exports.convertValue = function (schema, options, value) { - return realConvertValue(schema, options, value); -}; - -/** - * Creates a SwaggerApi object from the provided Swagger definition. - * - * @param {object} definition - The Swagger definition - * @param {object} options - The options passed to swaggerApi.create - * - * @returns {Promise} A promise that resolves the SwaggerApi after processing - */ -module.exports.createSwaggerApi = function (definition, options) { - var cOptions = _.cloneDeep(options); - var jsonRefsOptions = cOptions.jsonRefs || {}; - - // Include invalid reference information - jsonRefsOptions.includeInvalid = true; - - // Update the json-refs options to use the definition location - if (_.isString(cOptions.definition)) { - jsonRefsOptions.relativeBase = dirname(cOptions.definition); - } - - // Update the json-refs options to process YAML - if (_.isUndefined(jsonRefsOptions.loaderOptions)) { - jsonRefsOptions.loaderOptions = {}; - } - - if (_.isUndefined(jsonRefsOptions.loaderOptions.processContent)) { - jsonRefsOptions.loaderOptions.processContent = function (res, cb) { - cb(undefined, YAML.safeLoad(res.text)); - }; - } - - return JsonRefs.resolveRefs(definition, jsonRefsOptions) - .then(function (results) { - // We need to remove all circular objects as z-schema does not work with them: - // https://github.com/zaggino/z-schema/issues/137 - removeCirculars(results.resolved); - - return new SwaggerApi(module.exports, definition, results.resolved, results.refs, options); - }); -}; - -/** - * Returns a z-schema validator. - * - * @returns {Object} The z-schema validator to use - */ -module.exports.getJSONSchemaValidator = function () { - return jsonSchemaValidator; -} - -/** - * Creates an array of Operation objects for each operation defined in path definition. - * - * @param {Path} pathObject - The Path object - * - * @returns {Operation[]} The Operation object array - */ -module.exports.getOperations = function (pathObject) { - var operations = []; - var pPath = JsonRefs.pathFromPtr(pathObject.ptr); - var pParams = _.reduce(pathObject.definition.parameters, function (parameters, paramDef, index) { - parameters[paramDef.name + ':' + paramDef.in] = { - path: pPath.concat(['parameters', index.toString()]), - definition: paramDef - }; - - return parameters; - }, {}); - - _.forEach(pathObject.definition, function (operation, method) { - // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { - return; - } - - var cOperation = _.cloneDeep(operation); // Clone so we do not alter the input - var oParams = {}; // Used to keep track of unique parameters - var oPath = pPath.concat(method); - - // Add path parameters - _.forEach(pParams, function (pParam, key) { - oParams[key] = pParam; - }); - - // Add operation parameters (Overrides path-level parameters of same name+in combination) - _.forEach(operation.parameters, function (paramDef, index) { - oParams[paramDef.name + ':' + paramDef.in] = { - path: oPath.concat(['parameters', index.toString()]), - definition: paramDef - }; - }); - - // Attach our computed parameters/security to the operation - cOperation.parameters = _.map(_.values(oParams), function (parameter) { - // Used later by getOperationParameters to circumvent the chicken/egg situation (Removed there as well) - parameter.definition.$$$ptr$$$ = JsonRefs.pathToPtr(parameter.path); - - return parameter.definition; - }); - - - if (_.isUndefined(cOperation.security)) { - cOperation.security = pathObject.api.resolved.security; - } - - operations.push(new Operation(pathObject.api, - pathObject, - method, - JsonRefs.pathToPtr(oPath), - cOperation, - cOperation.consumes || pathObject.api.resolved.consumes || [], - cOperation.produces || pathObject.api.resolved.produces || [])); - }); - - return operations; -}; - -/** - * Returns an array of Parameter objects for the provided Operation. - * - * @param {Operation} operation - The Operation object - * - * @returns {Parameter[]} The Parameter object array - */ -module.exports.getOperationParameters = function (operation) { - var pParams = _.reduce(operation.pathObject.getParameters(), function (params, param) { - params[param.ptr] = param; - - return params; - }, {}); - - return _.map(operation.parameters, function (paramDef) { - var ptr = paramDef.$$$ptr$$$; - var pParam = pParams[ptr]; - - // Remove so we do not have these properties littered throughout the document - delete paramDef.$$$ptr$$$; - - if (_.isUndefined(pParam)) { - return new Parameter(operation, ptr, paramDef, vHelpers.getParameterSchema(paramDef)); - } else { - return pParam; - } - }); -}; - -/** - * Returns an array of Response objects for the provided Operation. - * - * @param {Operation} operation - The Operation object - * - * @returns {Response[]} The Response object array - */ -module.exports.getOperationResponses = function (operation) { - return _.map(operation.definition.responses, function (responseDef, code) { - return new Response(operation, - JsonRefs.pathToPtr(JsonRefs.pathFromPtr(operation.ptr).concat(['responses', code])), - responseDef, - code); - }); -}; - -/** - * Returns an array of path-level Parameter objects for the provided Path. - * - * @param {Path} path - The Path object - * - * @returns {Parameter[]} The Parameter object array - */ -module.exports.getPathParameters = function (path) { - return _.map(path.definition.parameters, function (paramDef, index) { - return new Parameter(path, - JsonRefs.pathToPtr(JsonRefs.pathFromPtr(path.ptr).concat(index.toString())), - paramDef, - vHelpers.getParameterSchema(paramDef)); - }); -}; - -/** - * Creates an array of Path objects for each path defined in the Swagger document. - * - * @param {SwaggerApi} api - The Swagger API object - * - * @returns {Path[]} The Operation object array - */ -module.exports.getPaths = function (api) { - var basePathPrefix = api.resolved.basePath || '/'; - - // Remove trailing slash from the basePathPrefix so we do not end up with double slashes - if (basePathPrefix.charAt(basePathPrefix.length - 1) === '/') { - basePathPrefix = basePathPrefix.substring(0, basePathPrefix.length - 1); - } - - return _.map(api.resolved.paths, function (pathDef, path) { - return new Path(api, - path, - JsonRefs.pathToPtr(['paths', path]), - pathDef, - pathToRegexp(basePathPrefix + path.replace(/\{/g, ':').replace(/\}/g, ''))); - - }); -}; - -/** - * Creates a sample value for the provided JSON Schema. - * - * @param {*} schema - The JSON Schema - * - * @returns {*} The sample value - */ -module.exports.getSample = function (schema) { - return mocker(schema); -}; - -/** - * Returns an array of functions used to validate Swagger 2.0 documents semantically. - * - * @returns {function[]} The validators to use - */ -module.exports.getSemanticValidators = function () { - return validators.semanticValidators; -}; - -/** - * Returns a function used to validate Swagger 2.0 documents against its JSON Schema. - * - * @returns {function} The validator to use - */ -module.exports.getStructuralValidator = function () { - return validators.jsonSchemaValidator; -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"../../helpers":2,"../../types/api":4,"../../types/operation":5,"../../types/parameter":7,"../../types/path":8,"../../types/response":9,"./format-generators":10,"./format-validators":11,"./helpers":12,"./validators":15,"path":160,"path-to-regexp":161}],14:[function(require,module,exports){ module.exports={ "title": "A JSON Schema for Swagger 2.0 API.", "id": "http://swagger.io/v2/schema.json#", @@ -4040,7 +3837,7 @@ module.exports={ } } } -},{}],15:[function(require,module,exports){ +},{}],13:[function(require,module,exports){ (function (global){ /* * The MIT License (MIT) @@ -4069,10 +3866,9 @@ module.exports={ 'use strict'; var _ = (typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null); -var helpers = require('../../helpers'); +var helpers = require('../helpers'); var JsonRefs = (typeof window !== "undefined" ? window['JsonRefs'] : typeof global !== "undefined" ? global['JsonRefs'] : null); var swaggerSchema = require('./schema.json'); -var vHelpers = require('./helpers'); function getSchemaProperties (schema) { var properties = _.keys(schema.properties); // Start with the defined properties @@ -4149,7 +3945,7 @@ function walkSchema (api, blacklist, schema, path, handlers, response) { * @returns {object} Object containing the errors and warnings of the validation */ function validateStructure (api) { - var results = helpers.validateAgainstSchema(api.plugin.getJSONSchemaValidator(), swaggerSchema, api.resolved); + var results = helpers.validateAgainstSchema(helpers.getJSONSchemaValidator(), swaggerSchema, api.definitionAllResolved); // Make complex JSON Schema validation errors easier to understand (Issue 15) results.errors = results.errors.map(function (error) { @@ -4224,7 +4020,7 @@ function validateDefaultValue (api, response, schema, path) { var result; if (!_.isUndefined(schema.default)) { - result = helpers.validateAgainstSchema(api.plugin.getJSONSchemaValidator(), schema, schema.default); + result = helpers.validateAgainstSchema(helpers.getJSONSchemaValidator(), schema, schema.default); _.forEach(result.errors, function (error) { error.path = path.concat(error.path.concat('default')); @@ -4349,19 +4145,19 @@ function validateReferences (api) { } // Identify referenceable definitions - _.forEach(api.resolved.definitions, function (def, name) { + _.forEach(api.definitionAllResolved.definitions, function (def, name) { referenceable.push(JsonRefs.pathToPtr(['definitions', name])); }); - _.forEach(api.resolved.parameters, function (def, name) { + _.forEach(api.definitionAllResolved.parameters, function (def, name) { referenceable.push(JsonRefs.pathToPtr(['parameters', name])); }); - _.forEach(api.resolved.responses, function (def, name) { + _.forEach(api.definitionAllResolved.responses, function (def, name) { referenceable.push(JsonRefs.pathToPtr(['responses', name])); }); - _.forEach(api.resolved.securityDefinitions, function (def, name) { + _.forEach(api.definitionAllResolved.securityDefinitions, function (def, name) { var sPath = ['securityDefinitions', name]; referenceable.push(JsonRefs.pathToPtr(sPath)); @@ -4404,16 +4200,16 @@ function validateReferences (api) { }); // Identify references and validate missing references for non-JSON References (security) - _.forEach(api.resolved.security, createSecurityProcessor(['security'])); + _.forEach(api.definitionAllResolved.security, createSecurityProcessor(['security'])); - _.forEach(api.resolved.paths, function (pathDef, name) { + _.forEach(api.definitionAllResolved.paths, function (pathDef, name) { var pPath = ['paths', name]; _.forEach(pathDef.security, createSecurityProcessor(pPath.concat('security'))); _.forEach(pathDef, function (operationDef, method) { // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { + if (_.indexOf(helpers.supportedHttpMethods, method) === -1) { return; } @@ -4477,7 +4273,7 @@ function validateSchemaObjects (api) { // Create JSON Schema for non-body parameters if (parameterDef.in !== 'body') { - parameterDef = vHelpers.getParameterSchema(parameterDef); + parameterDef = helpers.computeParameterSchema(parameterDef); } walkSchema(api, blacklist, parameterDef, pPath, validators, response); @@ -4499,18 +4295,18 @@ function validateSchemaObjects (api) { } // Validate definitions - _.forEach(api.resolved.definitions, function (definitionDef, name) { + _.forEach(api.definitionAllResolved.definitions, function (definitionDef, name) { walkSchema(api, blacklist, definitionDef, ['definitions', name], validators, response); }); // Validate global parameter definitions - validateParameters(api.resolved.parameters, ['parameters']); + validateParameters(api.definitionAllResolved.parameters, ['parameters']); // Validate global response definitions - validateResponses(api.resolved.responses, ['responses']); + validateResponses(api.definitionAllResolved.responses, ['responses']); // Validate paths and operations - _.forEach(api.resolved.paths, function (pathDef, path) { + _.forEach(api.definitionAllResolved.paths, function (pathDef, path) { var pPath = ['paths', path]; // Validate path-level parameter definitions @@ -4520,7 +4316,7 @@ function validateSchemaObjects (api) { var oPath = pPath.concat(method); // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { + if (_.indexOf(helpers.supportedHttpMethods, method) === -1) { return; } @@ -4574,7 +4370,7 @@ function validatePathsAndOperations (api) { return seenParameters; } - _.reduce(api.resolved.paths, function (metadata, pathDef, path) { + _.reduce(api.definitionAllResolved.paths, function (metadata, pathDef, path) { var declaredPathParameters = []; var normalizedPath = path; var pPath = ['paths', path]; @@ -4620,7 +4416,7 @@ function validatePathsAndOperations (api) { var parameters; // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { + if (_.indexOf(helpers.supportedHttpMethods, method) === -1) { return; } @@ -4712,7 +4508,7 @@ module.exports = { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../helpers":2,"./helpers":12,"./schema.json":14}],16:[function(require,module,exports){ +},{"../helpers":2,"./schema.json":12}],14:[function(require,module,exports){ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; ;(function (exports) { @@ -4838,7 +4634,7 @@ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; exports.fromByteArray = uint8ToBase64 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) -},{}],17:[function(require,module,exports){ +},{}],15:[function(require,module,exports){ (function (global){ /*! * The buffer module from node.js, for the browser. @@ -6391,14 +6187,14 @@ function blitBuffer (src, dst, offset, length) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"base64-js":16,"ieee754":134,"isarray":18}],18:[function(require,module,exports){ +},{"base64-js":14,"ieee754":132,"isarray":16}],16:[function(require,module,exports){ var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; -},{}],19:[function(require,module,exports){ +},{}],17:[function(require,module,exports){ (function (Buffer){ // Chance.js 0.8.0 // http://chancejs.com @@ -8996,7 +8792,7 @@ module.exports = Array.isArray || function (arr) { }).call(this,require("buffer").Buffer) -},{"buffer":17}],20:[function(require,module,exports){ +},{"buffer":15}],18:[function(require,module,exports){ /** * This is the web browser implementation of `debug()`. @@ -9166,7 +8962,7 @@ function localstorage(){ } catch (e) {} } -},{"./debug":21}],21:[function(require,module,exports){ +},{"./debug":19}],19:[function(require,module,exports){ /** * This is the common logic for both the Node.js and web browser @@ -9365,7 +9161,7 @@ function coerce(val) { return val; } -},{"ms":158}],22:[function(require,module,exports){ +},{"ms":156}],20:[function(require,module,exports){ (function (Buffer){ /*! * @description Recursive object extending @@ -9514,7 +9310,7 @@ var deepExtend = module.exports = function (/*obj_1, [obj_2], [obj_N]*/) { }).call(this,require("buffer").Buffer) -},{"buffer":17}],23:[function(require,module,exports){ +},{"buffer":15}],21:[function(require,module,exports){ 'use strict'; var $ = require('./util/uri-helpers'); @@ -9588,7 +9384,7 @@ var instance = module.exports = function() { instance.util = $; -},{"./util/find-reference":25,"./util/normalize-schema":26,"./util/resolve-schema":27,"./util/uri-helpers":28}],24:[function(require,module,exports){ +},{"./util/find-reference":23,"./util/normalize-schema":24,"./util/resolve-schema":25,"./util/uri-helpers":26}],22:[function(require,module,exports){ 'use strict'; var clone = module.exports = function(obj, seen) { @@ -9623,7 +9419,7 @@ var clone = module.exports = function(obj, seen) { return target; }; -},{}],25:[function(require,module,exports){ +},{}],23:[function(require,module,exports){ 'use strict'; var $ = require('./uri-helpers'); @@ -9671,7 +9467,7 @@ var find = module.exports = function(id, refs) { return target; }; -},{"./uri-helpers":28}],26:[function(require,module,exports){ +},{"./uri-helpers":26}],24:[function(require,module,exports){ 'use strict'; var $ = require('./uri-helpers'); @@ -9736,7 +9532,7 @@ module.exports = function(fakeroot, schema, push) { return copy; }; -},{"./clone-obj":24,"./uri-helpers":28}],27:[function(require,module,exports){ +},{"./clone-obj":22,"./uri-helpers":26}],25:[function(require,module,exports){ 'use strict'; var $ = require('./uri-helpers'); @@ -9783,7 +9579,7 @@ module.exports = function(obj, refs, resolve) { return copy(obj, refs, parent, resolve); }; -},{"./find-reference":25,"./uri-helpers":28,"deep-extend":22}],28:[function(require,module,exports){ +},{"./find-reference":23,"./uri-helpers":26,"deep-extend":20}],26:[function(require,module,exports){ 'use strict'; // https://gist.github.com/pjt33/efb2f1134bab986113fd @@ -9887,7 +9683,7 @@ module.exports = { getDocumentURI: getDocumentURI }; -},{}],29:[function(require,module,exports){ +},{}],27:[function(require,module,exports){ //protected helper class function _SubRange(low, high) { this.low = low; @@ -10033,7 +9829,7 @@ DiscontinuousRange.prototype.clone = function () { module.exports = DiscontinuousRange; -},{}],30:[function(require,module,exports){ +},{}],28:[function(require,module,exports){ function Address (faker) { var f = faker.fake, Helpers = faker.helpers; @@ -10164,7 +9960,7 @@ function Address (faker) { module.exports = Address; -},{}],31:[function(require,module,exports){ +},{}],29:[function(require,module,exports){ var Commerce = function (faker) { var self = this; @@ -10254,7 +10050,7 @@ var Commerce = function (faker) { }; module['exports'] = Commerce; -},{}],32:[function(require,module,exports){ +},{}],30:[function(require,module,exports){ var Company = function (faker) { var self = this; @@ -10319,7 +10115,7 @@ var Company = function (faker) { } module['exports'] = Company; -},{}],33:[function(require,module,exports){ +},{}],31:[function(require,module,exports){ var _Date = function (faker) { var self = this; self.past = function (years, refDate) { @@ -10410,7 +10206,7 @@ var _Date = function (faker) { }; module['exports'] = _Date; -},{}],34:[function(require,module,exports){ +},{}],32:[function(require,module,exports){ /* fake.js - generator method for combining faker methods based on string input @@ -10474,7 +10270,7 @@ function Fake (faker) { } module['exports'] = Fake; -},{}],35:[function(require,module,exports){ +},{}],33:[function(require,module,exports){ var Finance = function (faker) { var Helpers = faker.helpers, self = this; @@ -10561,7 +10357,7 @@ var Finance = function (faker) { } module['exports'] = Finance; -},{}],36:[function(require,module,exports){ +},{}],34:[function(require,module,exports){ var Hacker = function (faker) { var self = this; @@ -10613,7 +10409,7 @@ var Hacker = function (faker) { }; module['exports'] = Hacker; -},{}],37:[function(require,module,exports){ +},{}],35:[function(require,module,exports){ var Helpers = function (faker) { var self = this; @@ -10815,7 +10611,7 @@ String.prototype.capitalize = function () { //v1.0 */ module['exports'] = Helpers; -},{}],38:[function(require,module,exports){ +},{}],36:[function(require,module,exports){ var Image = function (faker) { var self = this; @@ -10879,7 +10675,7 @@ var Image = function (faker) { } module["exports"] = Image; -},{}],39:[function(require,module,exports){ +},{}],37:[function(require,module,exports){ /* this index.js file is used for including the faker library as a CommonJS module, instead of a bundle @@ -11014,7 +10810,7 @@ Faker.prototype.seed = function(value) { } module['exports'] = Faker; -},{"./address":30,"./commerce":31,"./company":32,"./date":33,"./fake":34,"./finance":35,"./hacker":36,"./helpers":37,"./image":38,"./internet":40,"./lorem":126,"./name":127,"./phone_number":128,"./random":129}],40:[function(require,module,exports){ +},{"./address":28,"./commerce":29,"./company":30,"./date":31,"./fake":32,"./finance":33,"./hacker":34,"./helpers":35,"./image":36,"./internet":38,"./lorem":124,"./name":125,"./phone_number":126,"./random":127}],38:[function(require,module,exports){ var password_generator = require('../vendor/password-generator.js'), random_ua = require('../vendor/user-agent'); @@ -11129,14 +10925,14 @@ var Internet = function (faker) { module["exports"] = Internet; -},{"../vendor/password-generator.js":132,"../vendor/user-agent":133}],41:[function(require,module,exports){ +},{"../vendor/password-generator.js":130,"../vendor/user-agent":131}],39:[function(require,module,exports){ module["exports"] = [ "#####", "####", "###" ]; -},{}],42:[function(require,module,exports){ +},{}],40:[function(require,module,exports){ module["exports"] = [ "#{city_prefix} #{Name.first_name}#{city_suffix}", "#{city_prefix} #{Name.first_name}", @@ -11144,7 +10940,7 @@ module["exports"] = [ "#{Name.last_name}#{city_suffix}" ]; -},{}],43:[function(require,module,exports){ +},{}],41:[function(require,module,exports){ module["exports"] = [ "North", "East", @@ -11155,7 +10951,7 @@ module["exports"] = [ "Port" ]; -},{}],44:[function(require,module,exports){ +},{}],42:[function(require,module,exports){ module["exports"] = [ "town", "ton", @@ -11178,7 +10974,7 @@ module["exports"] = [ "shire" ]; -},{}],45:[function(require,module,exports){ +},{}],43:[function(require,module,exports){ module["exports"] = [ "Afghanistan", "Albania", @@ -11427,7 +11223,7 @@ module["exports"] = [ "Zimbabwe" ]; -},{}],46:[function(require,module,exports){ +},{}],44:[function(require,module,exports){ module["exports"] = [ "AD", "AE", @@ -11681,7 +11477,7 @@ module["exports"] = [ "ZW" ]; -},{}],47:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ module["exports"] = [ "Avon", "Bedfordshire", @@ -11691,12 +11487,12 @@ module["exports"] = [ "Cambridgeshire" ]; -},{}],48:[function(require,module,exports){ +},{}],46:[function(require,module,exports){ module["exports"] = [ "United States of America" ]; -},{}],49:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var address = {}; module['exports'] = address; address.city_prefix = require("./city_prefix"); @@ -11717,21 +11513,21 @@ address.street_name = require("./street_name"); address.street_address = require("./street_address"); address.default_country = require("./default_country"); -},{"./building_number":41,"./city":42,"./city_prefix":43,"./city_suffix":44,"./country":45,"./country_code":46,"./county":47,"./default_country":48,"./postcode":50,"./postcode_by_state":51,"./secondary_address":52,"./state":53,"./state_abbr":54,"./street_address":55,"./street_name":56,"./street_suffix":57,"./time_zone":58}],50:[function(require,module,exports){ +},{"./building_number":39,"./city":40,"./city_prefix":41,"./city_suffix":42,"./country":43,"./country_code":44,"./county":45,"./default_country":46,"./postcode":48,"./postcode_by_state":49,"./secondary_address":50,"./state":51,"./state_abbr":52,"./street_address":53,"./street_name":54,"./street_suffix":55,"./time_zone":56}],48:[function(require,module,exports){ module["exports"] = [ "#####", "#####-####" ]; -},{}],51:[function(require,module,exports){ -arguments[4][50][0].apply(exports,arguments) -},{"dup":50}],52:[function(require,module,exports){ +},{}],49:[function(require,module,exports){ +arguments[4][48][0].apply(exports,arguments) +},{"dup":48}],50:[function(require,module,exports){ module["exports"] = [ "Apt. ###", "Suite ###" ]; -},{}],53:[function(require,module,exports){ +},{}],51:[function(require,module,exports){ module["exports"] = [ "Alabama", "Alaska", @@ -11785,7 +11581,7 @@ module["exports"] = [ "Wyoming" ]; -},{}],54:[function(require,module,exports){ +},{}],52:[function(require,module,exports){ module["exports"] = [ "AL", "AK", @@ -11839,18 +11635,18 @@ module["exports"] = [ "WY" ]; -},{}],55:[function(require,module,exports){ +},{}],53:[function(require,module,exports){ module["exports"] = [ "#{building_number} #{street_name}" ]; -},{}],56:[function(require,module,exports){ +},{}],54:[function(require,module,exports){ module["exports"] = [ "#{Name.first_name} #{street_suffix}", "#{Name.last_name} #{street_suffix}" ]; -},{}],57:[function(require,module,exports){ +},{}],55:[function(require,module,exports){ module["exports"] = [ "Alley", "Avenue", @@ -12079,7 +11875,7 @@ module["exports"] = [ "Wells" ]; -},{}],58:[function(require,module,exports){ +},{}],56:[function(require,module,exports){ module["exports"] = [ "Pacific/Midway", "Pacific/Pago_Pago", @@ -12226,20 +12022,20 @@ module["exports"] = [ "Pacific/Apia" ]; -},{}],59:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ module["exports"] = [ "#{Name.name}", "#{Company.name}" ]; -},{}],60:[function(require,module,exports){ +},{}],58:[function(require,module,exports){ var app = {}; module['exports'] = app; app.name = require("./name"); app.version = require("./version"); app.author = require("./author"); -},{"./author":59,"./name":61,"./version":62}],61:[function(require,module,exports){ +},{"./author":57,"./name":59,"./version":60}],59:[function(require,module,exports){ module["exports"] = [ "Redhold", "Treeflex", @@ -12305,7 +12101,7 @@ module["exports"] = [ "Keylex" ]; -},{}],62:[function(require,module,exports){ +},{}],60:[function(require,module,exports){ module["exports"] = [ "0.#.#", "0.##", @@ -12314,7 +12110,7 @@ module["exports"] = [ "#.#.#" ]; -},{}],63:[function(require,module,exports){ +},{}],61:[function(require,module,exports){ module["exports"] = [ "2011-10-12", "2012-11-12", @@ -12322,7 +12118,7 @@ module["exports"] = [ "2013-9-12" ]; -},{}],64:[function(require,module,exports){ +},{}],62:[function(require,module,exports){ module["exports"] = [ "1234-2121-1221-1211", "1212-1221-1121-1234", @@ -12330,7 +12126,7 @@ module["exports"] = [ "1228-1221-1221-1431" ]; -},{}],65:[function(require,module,exports){ +},{}],63:[function(require,module,exports){ module["exports"] = [ "visa", "mastercard", @@ -12338,14 +12134,14 @@ module["exports"] = [ "discover" ]; -},{}],66:[function(require,module,exports){ +},{}],64:[function(require,module,exports){ var business = {}; module['exports'] = business; business.credit_card_numbers = require("./credit_card_numbers"); business.credit_card_expiry_dates = require("./credit_card_expiry_dates"); business.credit_card_types = require("./credit_card_types"); -},{"./credit_card_expiry_dates":63,"./credit_card_numbers":64,"./credit_card_types":65}],67:[function(require,module,exports){ +},{"./credit_card_expiry_dates":61,"./credit_card_numbers":62,"./credit_card_types":63}],65:[function(require,module,exports){ module["exports"] = [ "###-###-####", "(###) ###-####", @@ -12353,12 +12149,12 @@ module["exports"] = [ "###.###.####" ]; -},{}],68:[function(require,module,exports){ +},{}],66:[function(require,module,exports){ var cell_phone = {}; module['exports'] = cell_phone; cell_phone.formats = require("./formats"); -},{"./formats":67}],69:[function(require,module,exports){ +},{"./formats":65}],67:[function(require,module,exports){ module["exports"] = [ "red", "green", @@ -12393,7 +12189,7 @@ module["exports"] = [ "silver" ]; -},{}],70:[function(require,module,exports){ +},{}],68:[function(require,module,exports){ module["exports"] = [ "Books", "Movies", @@ -12419,14 +12215,14 @@ module["exports"] = [ "Industrial" ]; -},{}],71:[function(require,module,exports){ +},{}],69:[function(require,module,exports){ var commerce = {}; module['exports'] = commerce; commerce.color = require("./color"); commerce.department = require("./department"); commerce.product_name = require("./product_name"); -},{"./color":69,"./department":70,"./product_name":72}],72:[function(require,module,exports){ +},{"./color":67,"./department":68,"./product_name":70}],70:[function(require,module,exports){ module["exports"] = { "adjective": [ "Small", @@ -12488,7 +12284,7 @@ module["exports"] = { ] }; -},{}],73:[function(require,module,exports){ +},{}],71:[function(require,module,exports){ module["exports"] = [ "Adaptive", "Advanced", @@ -12592,7 +12388,7 @@ module["exports"] = [ "Vision-oriented" ]; -},{}],74:[function(require,module,exports){ +},{}],72:[function(require,module,exports){ module["exports"] = [ "clicks-and-mortar", "value-added", @@ -12661,7 +12457,7 @@ module["exports"] = [ "rich" ]; -},{}],75:[function(require,module,exports){ +},{}],73:[function(require,module,exports){ module["exports"] = [ "synergies", "web-readiness", @@ -12709,7 +12505,7 @@ module["exports"] = [ "methodologies" ]; -},{}],76:[function(require,module,exports){ +},{}],74:[function(require,module,exports){ module["exports"] = [ "implement", "utilize", @@ -12773,7 +12569,7 @@ module["exports"] = [ "recontextualize" ]; -},{}],77:[function(require,module,exports){ +},{}],75:[function(require,module,exports){ module["exports"] = [ "24 hour", "24/7", @@ -12878,7 +12674,7 @@ module["exports"] = [ "zero tolerance" ]; -},{}],78:[function(require,module,exports){ +},{}],76:[function(require,module,exports){ var company = {}; module['exports'] = company; company.suffix = require("./suffix"); @@ -12890,14 +12686,14 @@ company.bs_adjective = require("./bs_adjective"); company.bs_noun = require("./bs_noun"); company.name = require("./name"); -},{"./adjective":73,"./bs_adjective":74,"./bs_noun":75,"./bs_verb":76,"./descriptor":77,"./name":79,"./noun":80,"./suffix":81}],79:[function(require,module,exports){ +},{"./adjective":71,"./bs_adjective":72,"./bs_noun":73,"./bs_verb":74,"./descriptor":75,"./name":77,"./noun":78,"./suffix":79}],77:[function(require,module,exports){ module["exports"] = [ "#{Name.last_name} #{suffix}", "#{Name.last_name}-#{Name.last_name}", "#{Name.last_name}, #{Name.last_name} and #{Name.last_name}" ]; -},{}],80:[function(require,module,exports){ +},{}],78:[function(require,module,exports){ module["exports"] = [ "ability", "access", @@ -13005,7 +12801,7 @@ module["exports"] = [ "workforce" ]; -},{}],81:[function(require,module,exports){ +},{}],79:[function(require,module,exports){ module["exports"] = [ "Inc", "and Sons", @@ -13013,19 +12809,19 @@ module["exports"] = [ "Group" ]; -},{}],82:[function(require,module,exports){ +},{}],80:[function(require,module,exports){ module["exports"] = [ "/34##-######-####L/", "/37##-######-####L/" ]; -},{}],83:[function(require,module,exports){ +},{}],81:[function(require,module,exports){ module["exports"] = [ "/30[0-5]#-######-###L/", "/368#-######-###L/" ]; -},{}],84:[function(require,module,exports){ +},{}],82:[function(require,module,exports){ module["exports"] = [ "/6011-####-####-###L/", "/65##-####-####-###L/", @@ -13035,7 +12831,7 @@ module["exports"] = [ "/64[4-9]#-62##-####-####-###L/" ]; -},{}],85:[function(require,module,exports){ +},{}],83:[function(require,module,exports){ var credit_card = {}; module['exports'] = credit_card; credit_card.visa = require("./visa"); @@ -13049,14 +12845,14 @@ credit_card.solo = require("./solo"); credit_card.maestro = require("./maestro"); credit_card.laser = require("./laser"); -},{"./american_express":82,"./diners_club":83,"./discover":84,"./jcb":86,"./laser":87,"./maestro":88,"./mastercard":89,"./solo":90,"./switch":91,"./visa":92}],86:[function(require,module,exports){ +},{"./american_express":80,"./diners_club":81,"./discover":82,"./jcb":84,"./laser":85,"./maestro":86,"./mastercard":87,"./solo":88,"./switch":89,"./visa":90}],84:[function(require,module,exports){ module["exports"] = [ "/3528-####-####-###L/", "/3529-####-####-###L/", "/35[3-8]#-####-####-###L/" ]; -},{}],87:[function(require,module,exports){ +},{}],85:[function(require,module,exports){ module["exports"] = [ "/6304###########L/", "/6706###########L/", @@ -13068,46 +12864,46 @@ module["exports"] = [ "/6709#########{5,6}L/" ]; -},{}],88:[function(require,module,exports){ +},{}],86:[function(require,module,exports){ module["exports"] = [ "/50#{9,16}L/", "/5[6-8]#{9,16}L/", "/56##{9,16}L/" ]; -},{}],89:[function(require,module,exports){ +},{}],87:[function(require,module,exports){ module["exports"] = [ "/5[1-5]##-####-####-###L/", "/6771-89##-####-###L/" ]; -},{}],90:[function(require,module,exports){ +},{}],88:[function(require,module,exports){ module["exports"] = [ "/6767-####-####-###L/", "/6767-####-####-####-#L/", "/6767-####-####-####-##L/" ]; -},{}],91:[function(require,module,exports){ +},{}],89:[function(require,module,exports){ module["exports"] = [ "/6759-####-####-###L/", "/6759-####-####-####-#L/", "/6759-####-####-####-##L/" ]; -},{}],92:[function(require,module,exports){ +},{}],90:[function(require,module,exports){ module["exports"] = [ "/4###########L/", "/4###-####-####-###L/" ]; -},{}],93:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var date = {}; module["exports"] = date; date.month = require("./month"); date.weekday = require("./weekday"); -},{"./month":94,"./weekday":95}],94:[function(require,module,exports){ +},{"./month":92,"./weekday":93}],92:[function(require,module,exports){ // Source: http://unicode.org/cldr/trac/browser/tags/release-27/common/main/en.xml#L1799 module["exports"] = { wide: [ @@ -13172,7 +12968,7 @@ module["exports"] = { ] }; -},{}],95:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ // Source: http://unicode.org/cldr/trac/browser/tags/release-27/common/main/en.xml#L1847 module["exports"] = { wide: [ @@ -13217,7 +13013,7 @@ module["exports"] = { ] }; -},{}],96:[function(require,module,exports){ +},{}],94:[function(require,module,exports){ module["exports"] = [ "Checking", "Savings", @@ -13229,7 +13025,7 @@ module["exports"] = [ "Personal Loan" ]; -},{}],97:[function(require,module,exports){ +},{}],95:[function(require,module,exports){ module["exports"] = { "UAE Dirham": { "code": "AED", @@ -13909,14 +13705,14 @@ module["exports"] = { } }; -},{}],98:[function(require,module,exports){ +},{}],96:[function(require,module,exports){ var finance = {}; module['exports'] = finance; finance.account_type = require("./account_type"); finance.transaction_type = require("./transaction_type"); finance.currency = require("./currency"); -},{"./account_type":96,"./currency":97,"./transaction_type":99}],99:[function(require,module,exports){ +},{"./account_type":94,"./currency":95,"./transaction_type":97}],97:[function(require,module,exports){ module["exports"] = [ "deposit", "withdrawal", @@ -13924,7 +13720,7 @@ module["exports"] = [ "invoice" ]; -},{}],100:[function(require,module,exports){ +},{}],98:[function(require,module,exports){ module["exports"] = [ "TCP", "HTTP", @@ -13957,7 +13753,7 @@ module["exports"] = [ "JBOD" ]; -},{}],101:[function(require,module,exports){ +},{}],99:[function(require,module,exports){ module["exports"] = [ "auxiliary", "primary", @@ -13979,7 +13775,7 @@ module["exports"] = [ "mobile" ]; -},{}],102:[function(require,module,exports){ +},{}],100:[function(require,module,exports){ var hacker = {}; module['exports'] = hacker; hacker.abbreviation = require("./abbreviation"); @@ -13988,7 +13784,7 @@ hacker.noun = require("./noun"); hacker.verb = require("./verb"); hacker.ingverb = require("./ingverb"); -},{"./abbreviation":100,"./adjective":101,"./ingverb":103,"./noun":104,"./verb":105}],103:[function(require,module,exports){ +},{"./abbreviation":98,"./adjective":99,"./ingverb":101,"./noun":102,"./verb":103}],101:[function(require,module,exports){ module["exports"] = [ "backing up", "bypassing", @@ -14008,7 +13804,7 @@ module["exports"] = [ "parsing" ]; -},{}],104:[function(require,module,exports){ +},{}],102:[function(require,module,exports){ module["exports"] = [ "driver", "protocol", @@ -14036,7 +13832,7 @@ module["exports"] = [ "matrix" ]; -},{}],105:[function(require,module,exports){ +},{}],103:[function(require,module,exports){ module["exports"] = [ "back up", "bypass", @@ -14058,7 +13854,7 @@ module["exports"] = [ "parse" ]; -},{}],106:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var en = {}; module['exports'] = en; en.title = "English"; @@ -14079,7 +13875,7 @@ en.app = require("./app"); en.finance = require("./finance"); en.date = require("./date"); -},{"./address":49,"./app":60,"./business":66,"./cell_phone":68,"./commerce":71,"./company":78,"./credit_card":85,"./date":93,"./finance":98,"./hacker":102,"./internet":110,"./lorem":111,"./name":115,"./phone_number":122,"./team":124}],107:[function(require,module,exports){ +},{"./address":47,"./app":58,"./business":64,"./cell_phone":66,"./commerce":69,"./company":76,"./credit_card":83,"./date":91,"./finance":96,"./hacker":100,"./internet":108,"./lorem":109,"./name":113,"./phone_number":120,"./team":122}],105:[function(require,module,exports){ module["exports"] = [ "https://s3.amazonaws.com/uifaces/faces/twitter/jarjan/128.jpg", "https://s3.amazonaws.com/uifaces/faces/twitter/mahdif/128.jpg", @@ -15349,7 +15145,7 @@ module["exports"] = [ "https://s3.amazonaws.com/uifaces/faces/twitter/areandacom/128.jpg" ]; -},{}],108:[function(require,module,exports){ +},{}],106:[function(require,module,exports){ module["exports"] = [ "com", "biz", @@ -15359,27 +15155,27 @@ module["exports"] = [ "org" ]; -},{}],109:[function(require,module,exports){ +},{}],107:[function(require,module,exports){ module["exports"] = [ "gmail.com", "yahoo.com", "hotmail.com" ]; -},{}],110:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var internet = {}; module['exports'] = internet; internet.free_email = require("./free_email"); internet.domain_suffix = require("./domain_suffix"); internet.avatar_uri = require("./avatar_uri"); -},{"./avatar_uri":107,"./domain_suffix":108,"./free_email":109}],111:[function(require,module,exports){ +},{"./avatar_uri":105,"./domain_suffix":106,"./free_email":107}],109:[function(require,module,exports){ var lorem = {}; module['exports'] = lorem; lorem.words = require("./words"); lorem.supplemental = require("./supplemental"); -},{"./supplemental":112,"./words":113}],112:[function(require,module,exports){ +},{"./supplemental":110,"./words":111}],110:[function(require,module,exports){ module["exports"] = [ "abbas", "abduco", @@ -16223,7 +16019,7 @@ module["exports"] = [ "xiphias" ]; -},{}],113:[function(require,module,exports){ +},{}],111:[function(require,module,exports){ module["exports"] = [ "alias", "consequatur", @@ -16476,7 +16272,7 @@ module["exports"] = [ "repellat" ]; -},{}],114:[function(require,module,exports){ +},{}],112:[function(require,module,exports){ module["exports"] = [ "Aaliyah", "Aaron", @@ -19487,7 +19283,7 @@ module["exports"] = [ "Zula" ]; -},{}],115:[function(require,module,exports){ +},{}],113:[function(require,module,exports){ var name = {}; module['exports'] = name; name.first_name = require("./first_name"); @@ -19497,7 +19293,7 @@ name.suffix = require("./suffix"); name.title = require("./title"); name.name = require("./name"); -},{"./first_name":114,"./last_name":116,"./name":117,"./prefix":118,"./suffix":119,"./title":120}],116:[function(require,module,exports){ +},{"./first_name":112,"./last_name":114,"./name":115,"./prefix":116,"./suffix":117,"./title":118}],114:[function(require,module,exports){ module["exports"] = [ "Abbott", "Abernathy", @@ -19975,7 +19771,7 @@ module["exports"] = [ "Zulauf" ]; -},{}],117:[function(require,module,exports){ +},{}],115:[function(require,module,exports){ module["exports"] = [ "#{prefix} #{first_name} #{last_name}", "#{first_name} #{last_name} #{suffix}", @@ -19985,7 +19781,7 @@ module["exports"] = [ "#{first_name} #{last_name}" ]; -},{}],118:[function(require,module,exports){ +},{}],116:[function(require,module,exports){ module["exports"] = [ "Mr.", "Mrs.", @@ -19994,7 +19790,7 @@ module["exports"] = [ "Dr." ]; -},{}],119:[function(require,module,exports){ +},{}],117:[function(require,module,exports){ module["exports"] = [ "Jr.", "Sr.", @@ -20009,7 +19805,7 @@ module["exports"] = [ "DVM" ]; -},{}],120:[function(require,module,exports){ +},{}],118:[function(require,module,exports){ module["exports"] = { "descriptor": [ "Lead", @@ -20103,7 +19899,7 @@ module["exports"] = { ] }; -},{}],121:[function(require,module,exports){ +},{}],119:[function(require,module,exports){ module["exports"] = [ "###-###-####", "(###) ###-####", @@ -20127,12 +19923,12 @@ module["exports"] = [ "###.###.#### x#####" ]; -},{}],122:[function(require,module,exports){ +},{}],120:[function(require,module,exports){ var phone_number = {}; module['exports'] = phone_number; phone_number.formats = require("./formats"); -},{"./formats":121}],123:[function(require,module,exports){ +},{"./formats":119}],121:[function(require,module,exports){ module["exports"] = [ "ants", "bats", @@ -20203,18 +19999,18 @@ module["exports"] = [ "druids" ]; -},{}],124:[function(require,module,exports){ +},{}],122:[function(require,module,exports){ var team = {}; module['exports'] = team; team.creature = require("./creature"); team.name = require("./name"); -},{"./creature":123,"./name":125}],125:[function(require,module,exports){ +},{"./creature":121,"./name":123}],123:[function(require,module,exports){ module["exports"] = [ "#{Address.state} #{creature}" ]; -},{}],126:[function(require,module,exports){ +},{}],124:[function(require,module,exports){ var Lorem = function (faker) { var self = this; @@ -20268,7 +20064,7 @@ var Lorem = function (faker) { module["exports"] = Lorem; -},{}],127:[function(require,module,exports){ +},{}],125:[function(require,module,exports){ function Name (faker) { this.firstName = function (gender) { @@ -20366,7 +20162,7 @@ function Name (faker) { } module['exports'] = Name; -},{}],128:[function(require,module,exports){ +},{}],126:[function(require,module,exports){ var Phone = function (faker) { var self = this; @@ -20390,7 +20186,7 @@ var Phone = function (faker) { }; module['exports'] = Phone; -},{}],129:[function(require,module,exports){ +},{}],127:[function(require,module,exports){ var mersenne = require('../vendor/mersenne'); function Random (faker, seed) { @@ -20478,14 +20274,14 @@ module['exports'] = Random; // module.exports = random; -},{"../vendor/mersenne":131}],130:[function(require,module,exports){ +},{"../vendor/mersenne":129}],128:[function(require,module,exports){ var Faker = require('../lib'); var faker = new Faker({ locale: 'en', localeFallback: 'en' }); faker.locales['en'] = require('../lib/locales/en'); faker.locales['en'] = require('../lib/locales/en'); module['exports'] = faker; -},{"../lib":39,"../lib/locales/en":106}],131:[function(require,module,exports){ +},{"../lib":37,"../lib/locales/en":104}],129:[function(require,module,exports){ // this program is a JavaScript version of Mersenne Twister, with concealment and encapsulation in class, // an almost straight conversion from the original program, mt19937ar.c, // translated by y. okada on July 17, 2006. @@ -20773,7 +20569,7 @@ exports.seed_array = function(A) { gen.init_by_array(A); } -},{}],132:[function(require,module,exports){ +},{}],130:[function(require,module,exports){ /* * password-generator * Copyright(c) 2011-2013 Bermi Ferrer @@ -20839,7 +20635,7 @@ exports.seed_array = function(A) { // Establish the root object, `window` in the browser, or `global` on the server. }(this)); -},{}],133:[function(require,module,exports){ +},{}],131:[function(require,module,exports){ /* Copyright (c) 2012-2014 Jeffrey Mealo @@ -21050,7 +20846,7 @@ exports.generate = function generate() { return browser[random[0]](random[1]); }; -},{}],134:[function(require,module,exports){ +},{}],132:[function(require,module,exports){ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = nBytes * 8 - mLen - 1 @@ -21136,12 +20932,12 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { buffer[offset + i - d] |= s * 128 } -},{}],135:[function(require,module,exports){ +},{}],133:[function(require,module,exports){ module.exports = Array.isArray || function (arr) { return Object.prototype.toString.call(arr) == '[object Array]'; }; -},{}],136:[function(require,module,exports){ +},{}],134:[function(require,module,exports){ /* * $Id: base64.js,v 2.15 2014/04/05 12:58:57 dankogai Exp dankogai $ * @@ -21337,7 +21133,7 @@ module.exports = Array.isArray || function (arr) { } })(this); -},{"buffer":17}],137:[function(require,module,exports){ +},{"buffer":15}],135:[function(require,module,exports){ 'use strict'; var container = require('./util/container'), @@ -21420,7 +21216,7 @@ generate.extend = container.set; module.exports = generate; -},{"./util/container":145,"./util/formats":147,"./util/merge":150,"./util/random":152,"./util/traverse":153,"deref":23}],138:[function(require,module,exports){ +},{"./util/container":143,"./util/formats":145,"./util/merge":148,"./util/random":150,"./util/traverse":151,"deref":21}],136:[function(require,module,exports){ 'use strict'; var random = require('../util/random'), @@ -21489,14 +21285,14 @@ module.exports = function(value, path, resolve) { return items; }; -},{"../util/error":146,"../util/has-props":148,"../util/random":152,"../util/traverse":153}],139:[function(require,module,exports){ +},{"../util/error":144,"../util/has-props":146,"../util/random":150,"../util/traverse":151}],137:[function(require,module,exports){ 'use strict'; module.exports = function() { return Math.random() > 0.5; }; -},{}],140:[function(require,module,exports){ +},{}],138:[function(require,module,exports){ 'use strict'; var number = require('./number'); @@ -21513,14 +21309,14 @@ module.exports = function(value) { return generated > 0 ? Math.floor(generated) : Math.ceil(generated); }; -},{"./number":142}],141:[function(require,module,exports){ +},{"./number":140}],139:[function(require,module,exports){ 'use strict'; module.exports = function() { return null; }; -},{}],142:[function(require,module,exports){ +},{}],140:[function(require,module,exports){ 'use strict'; var MIN_INTEGER = -100000000, @@ -21562,7 +21358,7 @@ module.exports = function(value) { return random(Math.random() > 0.5, min, max); }; -},{"../util/random":152,"./string":144}],143:[function(require,module,exports){ +},{"../util/random":150,"./string":142}],141:[function(require,module,exports){ 'use strict'; var container = require('../util/container'), @@ -21626,7 +21422,7 @@ module.exports = function(value, path, resolve) { return traverse(props, path.concat(['properties']), resolve); }; -},{"../util/container":145,"../util/error":146,"../util/has-props":148,"../util/random":152,"../util/traverse":153}],144:[function(require,module,exports){ +},{"../util/container":143,"../util/error":144,"../util/has-props":146,"../util/random":150,"../util/traverse":151}],142:[function(require,module,exports){ 'use strict'; var container = require('../util/container'); @@ -21747,7 +21543,7 @@ module.exports = function(value) { return faker.lorem.words(random(1, 5)).join(' '); }; -},{"../util/container":145,"../util/formats":147,"../util/random":152}],145:[function(require,module,exports){ +},{"../util/container":143,"../util/formats":145,"../util/random":150}],143:[function(require,module,exports){ 'use strict'; // static requires - handle both initial dependency load (deps will be available @@ -21773,7 +21569,7 @@ module.exports = { } }; -},{"chance":19,"faker":130,"randexp":167}],146:[function(require,module,exports){ +},{"chance":17,"faker":128,"randexp":164}],144:[function(require,module,exports){ 'use strict'; function ParseError(message, path) { @@ -21786,7 +21582,7 @@ ParseError.prototype = Error.prototype; module.exports = ParseError; -},{}],147:[function(require,module,exports){ +},{}],145:[function(require,module,exports){ 'use strict'; var registry = {}; @@ -21805,7 +21601,7 @@ module.exports = function(name, callback) { return registry; }; -},{}],148:[function(require,module,exports){ +},{}],146:[function(require,module,exports){ 'use strict'; module.exports = function(obj) { @@ -21814,7 +21610,7 @@ module.exports = function(obj) { }).length > 0; }; -},{}],149:[function(require,module,exports){ +},{}],147:[function(require,module,exports){ 'use strict'; var inferredProperties = { @@ -21873,7 +21669,7 @@ module.exports = function(obj, path) { } }; -},{}],150:[function(require,module,exports){ +},{}],148:[function(require,module,exports){ 'use strict'; var merge; @@ -21908,7 +21704,7 @@ merge = module.exports = function(a, b) { return a; }; -},{}],151:[function(require,module,exports){ +},{}],149:[function(require,module,exports){ 'use strict'; module.exports = { @@ -21921,7 +21717,7 @@ module.exports = { string: require('../types/string') }; -},{"../types/array":138,"../types/boolean":139,"../types/integer":140,"../types/null":141,"../types/number":142,"../types/object":143,"../types/string":144}],152:[function(require,module,exports){ +},{"../types/array":136,"../types/boolean":137,"../types/integer":138,"../types/null":139,"../types/number":140,"../types/object":141,"../types/string":142}],150:[function(require,module,exports){ 'use strict'; var container = require('./container'); @@ -21979,7 +21775,7 @@ random.pick = function(obj) { random.MIN_NUMBER = -100; random.MAX_NUMBER = 100; -},{"./container":145}],153:[function(require,module,exports){ +},{"./container":143}],151:[function(require,module,exports){ 'use strict'; var random = require('./random'); @@ -22045,7 +21841,7 @@ module.exports = function() { return traverse.apply(null, arguments); }; -},{"./error":146,"./inferred":149,"./primitives":151,"./random":152}],154:[function(require,module,exports){ +},{"./error":144,"./inferred":147,"./primitives":149,"./random":150}],152:[function(require,module,exports){ /** * lodash 3.7.2 (Custom Build) * Build: `lodash modern modularize exports="npm" -o ./` @@ -22121,7 +21917,7 @@ function isObject(value) { module.exports = baseGet; -},{}],155:[function(require,module,exports){ +},{}],153:[function(require,module,exports){ /** * lodash 3.8.1 (Custom Build) * Build: `lodash modern modularize exports="npm" -o ./` @@ -22170,7 +21966,7 @@ function toPath(value) { module.exports = toPath; -},{"lodash.isarray":157}],156:[function(require,module,exports){ +},{"lodash.isarray":155}],154:[function(require,module,exports){ /** * lodash 3.7.0 (Custom Build) * Build: `lodash modern modularize exports="npm" -o ./` @@ -22213,7 +22009,7 @@ function get(object, path, defaultValue) { module.exports = get; -},{"lodash._baseget":154,"lodash._topath":155}],157:[function(require,module,exports){ +},{"lodash._baseget":152,"lodash._topath":153}],155:[function(require,module,exports){ /** * lodash 3.0.4 (Custom Build) * Build: `lodash modern modularize exports="npm" -o ./` @@ -22395,7 +22191,7 @@ function isNative(value) { module.exports = isArray; -},{}],158:[function(require,module,exports){ +},{}],156:[function(require,module,exports){ /** * Helpers. */ @@ -22522,7 +22318,7 @@ function plural(ms, n, name) { return Math.ceil(ms / n) + ' ' + name + 's'; } -},{}],159:[function(require,module,exports){ +},{}],157:[function(require,module,exports){ (function (global){ /*! Native Promise Only v0.8.1 (c) Kyle Simpson @@ -22900,236 +22696,7 @@ function plural(ms, n, name) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],160:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// resolves . and .. elements in a path array with directory names there -// must be no slashes, empty elements, or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } - - return parts; -} - -// Split a filename into [root, dir, basename, ext], unix version -// 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var splitPath = function(filename) { - return splitPathRe.exec(filename).slice(1); -}; - -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; - - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); - - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; - -// path.normalize(path) -// posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; - - // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); - - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - - return (isAbsolute ? '/' : '') + path; -}; - -// posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; - -// posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); - } - return p; - }).join('/')); -}; - - -// path.relative(from, to) -// posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('/'); -}; - -exports.sep = '/'; -exports.delimiter = ':'; - -exports.dirname = function(path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; - - -exports.basename = function(path, ext) { - var f = splitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -exports.extname = function(path) { - return splitPath(path)[3]; -}; - -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} - -// String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' - ? function (str, start, len) { return str.substr(start, len) } - : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); - } -; - -}).call(this,require('_process')) - -},{"_process":162}],161:[function(require,module,exports){ +},{}],158:[function(require,module,exports){ var isarray = require('isarray') /** @@ -23521,7 +23088,7 @@ function pathToRegexp (path, keys, options) { return stringToRegexp(path, keys, options) } -},{"isarray":135}],162:[function(require,module,exports){ +},{"isarray":133}],159:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; @@ -23614,7 +23181,7 @@ process.chdir = function (dir) { }; process.umask = function() { return 0; }; -},{}],163:[function(require,module,exports){ +},{}],160:[function(require,module,exports){ (function (global){ /*! https://mths.be/punycode v1.4.0 by @mathias */ ;(function(root) { @@ -24152,7 +23719,7 @@ process.umask = function() { return 0; }; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],164:[function(require,module,exports){ +},{}],161:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -24238,7 +23805,7 @@ var isArray = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; -},{}],165:[function(require,module,exports){ +},{}],162:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -24325,13 +23892,13 @@ var objectKeys = Object.keys || function (obj) { return res; }; -},{}],166:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ 'use strict'; exports.decode = exports.parse = require('./decode'); exports.encode = exports.stringify = require('./encode'); -},{"./decode":164,"./encode":165}],167:[function(require,module,exports){ +},{"./decode":161,"./encode":162}],164:[function(require,module,exports){ var ret = require('ret'); var DRange = require('discontinuous-range'); var types = ret.types; @@ -24569,7 +24136,7 @@ function gen(token, groups) { -},{"discontinuous-range":29,"ret":168}],168:[function(require,module,exports){ +},{"discontinuous-range":27,"ret":165}],165:[function(require,module,exports){ var util = require('./util'); var types = require('./types'); var sets = require('./sets'); @@ -24849,7 +24416,7 @@ module.exports = function(regexpStr) { module.exports.types = types; -},{"./positions":169,"./sets":170,"./types":171,"./util":172}],169:[function(require,module,exports){ +},{"./positions":166,"./sets":167,"./types":168,"./util":169}],166:[function(require,module,exports){ var types = require('./types'); exports.wordBoundary = function() { @@ -24868,7 +24435,7 @@ exports.end = function() { return { type: types.POSITION, value: '$' }; }; -},{"./types":171}],170:[function(require,module,exports){ +},{"./types":168}],167:[function(require,module,exports){ var types = require('./types'); var INTS = function() { @@ -24952,7 +24519,7 @@ exports.anyChar = function() { return { type: types.SET, set: NOTANYCHAR(), not: true }; }; -},{"./types":171}],171:[function(require,module,exports){ +},{"./types":168}],168:[function(require,module,exports){ module.exports = { ROOT : 0 , GROUP : 1 @@ -24964,7 +24531,7 @@ module.exports = { , CHAR : 7 }; -},{}],172:[function(require,module,exports){ +},{}],169:[function(require,module,exports){ var types = require('./types'); var sets = require('./sets'); @@ -25077,7 +24644,7 @@ exports.error = function(regexp, msg) { throw new SyntaxError('Invalid regular expression: /' + regexp + '/: ' + msg); }; -},{"./sets":170,"./types":171}],173:[function(require,module,exports){ +},{"./sets":167,"./types":168}],170:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -25811,7 +25378,7 @@ Url.prototype.parseHost = function() { if (host) this.hostname = host; }; -},{"./util":174,"punycode":163,"querystring":166}],174:[function(require,module,exports){ +},{"./util":171,"punycode":160,"querystring":163}],171:[function(require,module,exports){ 'use strict'; module.exports = { @@ -25829,7 +25396,7 @@ module.exports = { } }; -},{}],175:[function(require,module,exports){ +},{}],172:[function(require,module,exports){ /*! * Copyright (c) 2015 Chris O'Hara * @@ -26730,7 +26297,7 @@ module.exports = { }); -},{}],176:[function(require,module,exports){ +},{}],173:[function(require,module,exports){ "use strict"; module.exports = { @@ -26791,7 +26358,7 @@ module.exports = { }; -},{}],177:[function(require,module,exports){ +},{}],174:[function(require,module,exports){ /*jshint maxlen: false*/ var validator = require("validator"); @@ -26922,7 +26489,7 @@ var FormatValidators = { module.exports = FormatValidators; -},{"validator":175}],178:[function(require,module,exports){ +},{"validator":172}],175:[function(require,module,exports){ "use strict"; var FormatValidators = require("./FormatValidators"), @@ -27461,7 +27028,7 @@ exports.validate = function (report, schema, json) { }; -},{"./FormatValidators":177,"./Report":180,"./Utils":184}],179:[function(require,module,exports){ +},{"./FormatValidators":174,"./Report":177,"./Utils":181}],176:[function(require,module,exports){ // Number.isFinite polyfill // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite if (typeof Number.isFinite !== "function") { @@ -27479,7 +27046,7 @@ if (typeof Number.isFinite !== "function") { }; } -},{}],180:[function(require,module,exports){ +},{}],177:[function(require,module,exports){ (function (process){ "use strict"; @@ -27682,7 +27249,7 @@ module.exports = Report; }).call(this,require('_process')) -},{"./Errors":176,"./Utils":184,"_process":162,"lodash.get":156}],181:[function(require,module,exports){ +},{"./Errors":173,"./Utils":181,"_process":159,"lodash.get":154}],178:[function(require,module,exports){ "use strict"; var Report = require("./Report"); @@ -27837,7 +27404,7 @@ exports.getSchemaByUri = function (report, uri, root) { exports.getRemotePath = getRemotePath; -},{"./Report":180,"./SchemaCompilation":182,"./SchemaValidation":183,"./Utils":184}],182:[function(require,module,exports){ +},{"./Report":177,"./SchemaCompilation":179,"./SchemaValidation":180,"./Utils":181}],179:[function(require,module,exports){ "use strict"; var Report = require("./Report"); @@ -28138,7 +27705,7 @@ exports.compileSchema = function (report, schema) { }; -},{"./Report":180,"./SchemaCache":181,"./Utils":184}],183:[function(require,module,exports){ +},{"./Report":177,"./SchemaCache":178,"./Utils":181}],180:[function(require,module,exports){ "use strict"; var FormatValidators = require("./FormatValidators"), @@ -28747,7 +28314,7 @@ exports.validateSchema = function (report, schema) { return isValid; }; -},{"./FormatValidators":177,"./JsonValidation":178,"./Report":180,"./Utils":184}],184:[function(require,module,exports){ +},{"./FormatValidators":174,"./JsonValidation":175,"./Report":177,"./Utils":181}],181:[function(require,module,exports){ "use strict"; exports.isAbsoluteUri = function (uri) { @@ -28966,7 +28533,7 @@ exports.ucs2decode = function (string) { }; /*jshint +W016*/ -},{}],185:[function(require,module,exports){ +},{}],182:[function(require,module,exports){ (function (process){ "use strict"; @@ -29321,7 +28888,7 @@ module.exports = ZSchema; }).call(this,require('_process')) -},{"./FormatValidators":177,"./JsonValidation":178,"./Polyfills":179,"./Report":180,"./SchemaCache":181,"./SchemaCompilation":182,"./SchemaValidation":183,"./Utils":184,"./schemas/hyper-schema.json":186,"./schemas/schema.json":187,"_process":162,"lodash.get":156}],186:[function(require,module,exports){ +},{"./FormatValidators":174,"./JsonValidation":175,"./Polyfills":176,"./Report":177,"./SchemaCache":178,"./SchemaCompilation":179,"./SchemaValidation":180,"./Utils":181,"./schemas/hyper-schema.json":183,"./schemas/schema.json":184,"_process":159,"lodash.get":154}],183:[function(require,module,exports){ module.exports={ "$schema": "http://json-schema.org/draft-04/hyper-schema#", "id": "http://json-schema.org/draft-04/hyper-schema#", @@ -29481,7 +29048,7 @@ module.exports={ } -},{}],187:[function(require,module,exports){ +},{}],184:[function(require,module,exports){ module.exports={ "id": "http://json-schema.org/draft-04/schema#", "$schema": "http://json-schema.org/draft-04/schema#", @@ -29636,4 +29203,4 @@ module.exports={ },{}]},{},[1])(1) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC5qcyIsImxpYi9oZWxwZXJzLmpzIiwibGliL2pzb24tc2NoZW1hLWRyYWZ0LTA0Lmpzb24iLCJsaWIvdHlwZXMvYXBpLmpzIiwibGliL3R5cGVzL29wZXJhdGlvbi5qcyIsImxpYi90eXBlcy9wYXJhbWV0ZXItdmFsdWUuanMiLCJsaWIvdHlwZXMvcGFyYW1ldGVyLmpzIiwibGliL3R5cGVzL3BhdGguanMiLCJsaWIvdHlwZXMvcmVzcG9uc2UuanMiLCJsaWIvdmVyc2lvbnMvMi4wL2Zvcm1hdC1nZW5lcmF0b3JzLmpzIiwibGliL3ZlcnNpb25zLzIuMC9mb3JtYXQtdmFsaWRhdG9ycy5qcyIsImxpYi92ZXJzaW9ucy8yLjAvaGVscGVycy5qcyIsImxpYi92ZXJzaW9ucy8yLjAvaW5kZXguanMiLCJsaWIvdmVyc2lvbnMvMi4wL3NjaGVtYS5qc29uIiwibGliL3ZlcnNpb25zLzIuMC92YWxpZGF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9saWIvYjY0LmpzIiwibm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXIvbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hhbmNlL2NoYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9kZWJ1Zy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2RlYnVnL2RlYnVnLmpzIiwibm9kZV9tb2R1bGVzL2RlZXAtZXh0ZW5kL2xpYi9kZWVwLWV4dGVuZC5qcyIsIm5vZGVfbW9kdWxlcy9kZXJlZi9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGVyZWYvbGliL3V0aWwvY2xvbmUtb2JqLmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL2ZpbmQtcmVmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL25vcm1hbGl6ZS1zY2hlbWEuanMiLCJub2RlX21vZHVsZXMvZGVyZWYvbGliL3V0aWwvcmVzb2x2ZS1zY2hlbWEuanMiLCJub2RlX21vZHVsZXMvZGVyZWYvbGliL3V0aWwvdXJpLWhlbHBlcnMuanMiLCJub2RlX21vZHVsZXMvZGlzY29udGludW91cy1yYW5nZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvYWRkcmVzcy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvY29tbWVyY2UuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2NvbXBhbnkuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2RhdGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2Zha2UuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2ZpbmFuY2UuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2hhY2tlci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvaGVscGVycy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvaW1hZ2UuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9pbnRlcm5ldC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2J1aWxkaW5nX251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NpdHkuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9jaXR5X3ByZWZpeC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NpdHlfc3VmZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY291bnRyeS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NvdW50cnlfY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NvdW50eS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2RlZmF1bHRfY291bnRyeS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvcG9zdGNvZGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9zZWNvbmRhcnlfYWRkcmVzcy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL3N0YXRlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3Mvc3RhdGVfYWJici5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL3N0cmVldF9hZGRyZXNzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3Mvc3RyZWV0X25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9zdHJlZXRfc3VmZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvdGltZV96b25lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FwcC9hdXRob3IuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYXBwL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FwcC9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FwcC92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2J1c2luZXNzL2NyZWRpdF9jYXJkX2V4cGlyeV9kYXRlcy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9idXNpbmVzcy9jcmVkaXRfY2FyZF9udW1iZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2J1c2luZXNzL2NyZWRpdF9jYXJkX3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2J1c2luZXNzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NlbGxfcGhvbmUvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jZWxsX3Bob25lL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbW1lcmNlL2NvbG9yLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbW1lcmNlL2RlcGFydG1lbnQuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tbWVyY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tbWVyY2UvcHJvZHVjdF9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvYWRqZWN0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvYnNfYWRqZWN0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvYnNfbm91bi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21wYW55L2JzX3ZlcmIuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9kZXNjcmlwdG9yLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvbm91bi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21wYW55L3N1ZmZpeC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9hbWVyaWNhbl9leHByZXNzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2RpbmVyc19jbHViLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2Rpc2NvdmVyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2pjYi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9sYXNlci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9tYWVzdHJvLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL21hc3RlcmNhcmQuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvc29sby5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9zd2l0Y2guanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvdmlzYS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9kYXRlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2RhdGUvbW9udGguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZGF0ZS93ZWVrZGF5LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ZpbmFuY2UvYWNjb3VudF90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ZpbmFuY2UvY3VycmVuY3kuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZmluYW5jZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9maW5hbmNlL3RyYW5zYWN0aW9uX3R5cGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vaGFja2VyL2FiYnJldmlhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvYWRqZWN0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvaW5ndmVyYi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvbm91bi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvdmVyYi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9pbnRlcm5ldC9hdmF0YXJfdXJpLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ludGVybmV0L2RvbWFpbl9zdWZmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vaW50ZXJuZXQvZnJlZV9lbWFpbC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9pbnRlcm5ldC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9sb3JlbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9sb3JlbS9zdXBwbGVtZW50YWwuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbG9yZW0vd29yZHMuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9maXJzdF9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL25hbWUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9sYXN0X25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL25hbWUvcHJlZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL25hbWUvc3VmZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL25hbWUvdGl0bGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vcGhvbmVfbnVtYmVyL2Zvcm1hdHMuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vcGhvbmVfbnVtYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL3RlYW0vY3JlYXR1cmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vdGVhbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi90ZWFtL25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvcmVtLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9waG9uZV9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9sb2NhbGUvZW4uanMiLCJub2RlX21vZHVsZXMvZmFrZXIvdmVuZG9yL21lcnNlbm5lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL3ZlbmRvci9wYXNzd29yZC1nZW5lcmF0b3IuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvdmVuZG9yL3VzZXItYWdlbnQuanMiLCJub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJhc2U2NC9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvYm9vbGVhbi5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvaW50ZWdlci5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvbnVsbC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9vYmplY3QuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3R5cGVzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9jb250YWluZXIuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvZXJyb3IuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9oYXMtcHJvcHMuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvaW5mZXJyZWQuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvbWVyZ2UuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvcHJpbWl0aXZlcy5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9yYW5kb20uanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvdHJhdmVyc2UuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoLl9iYXNlZ2V0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC5fdG9wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC5nZXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoLmlzYXJyYXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmF0aXZlLXByb21pc2Utb25seS9saWIvbnBvLnNyYy5qcyIsIm5vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmFuZGV4cC9saWIvcmFuZGV4cC5qcyIsIm5vZGVfbW9kdWxlcy9yZXQvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JldC9saWIvcG9zaXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JldC9saWIvc2V0cy5qcyIsIm5vZGVfbW9kdWxlcy9yZXQvbGliL3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL3JldC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy91cmwvdXJsLmpzIiwibm9kZV9tb2R1bGVzL3VybC91dGlsLmpzIiwibm9kZV9tb2R1bGVzL3ZhbGlkYXRvci92YWxpZGF0b3IuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL0Vycm9ycy5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvRm9ybWF0VmFsaWRhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvSnNvblZhbGlkYXRpb24uanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL1BvbHlmaWxscy5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvUmVwb3J0LmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9TY2hlbWFDYWNoZS5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvU2NoZW1hQ29tcGlsYXRpb24uanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL1NjaGVtYVZhbGlkYXRpb24uanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL1V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9aU2NoZW1hLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9zY2hlbWFzL2h5cGVyLXNjaGVtYS5qc29uIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9zY2hlbWFzL3NjaGVtYS5qc29uIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3BMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDN0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDL09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDamdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdGpEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDM3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1Z0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2ppRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDck1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0cUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcHZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDajhGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDclhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0WUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbjRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6aEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3RNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9sQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDek5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzlWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snXyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnXyddIDogbnVsbCk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBwYXRoTG9hZGVyID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ1BhdGhMb2FkZXInXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ1BhdGhMb2FkZXInXSA6IG51bGwpO1xudmFyIFlBTUwgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snanN5YW1sJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydqc3lhbWwnXSA6IG51bGwpO1xuXG4vLyBMb2FkIHByb21pc2VzIHBvbHlmaWxsIGlmIG5lY2Vzc2FyeVxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gIHJlcXVpcmUoJ25hdGl2ZS1wcm9taXNlLW9ubHknKTtcbn1cblxudmFyIHN1cHBvcnRlZFZlcnNpb25zID0ge1xuICAnMi4wJzogcmVxdWlyZSgnLi9saWIvdmVyc2lvbnMvMi4wLycpXG59O1xuXG4vKipcbiAqIEEgbGlicmFyeSBmb3Igc2ltcGxlciBbU3dhZ2dlcl0oaHR0cDovL3N3YWdnZXIuaW8vKSBpbnRlZ3JhdGlvbnMuXG4gKlxuICogQG1vZHVsZSBTd2F5XG4gKi9cblxuLyoqXG4gKiBDYWxsYmFjayB1c2VkIGZvciB2YWxpZGF0aW9uLlxuICpcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbn0gVmFsaWRhdG9yQ2FsbGJhY2tcbiAqXG4gKiBAcGFyYW0ge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyIEFQSSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7VmFsaWRhdGlvblJlc3VsdHN9IFRoZSB2YWxpZGF0aW9uIHJlc3VsdHMuXG4gKi9cblxuLyoqXG4gKiBTZXJ2ZXIgcmVzcG9uc2Ugd3JhcHBlci5cbiAqXG4gKiBTaW5jZSB0aGUgbG93IGxldmVsIGBodHRwLlNlcnZlclJlc3BvbnNlYCBvYmplY3QgaXMgbm90IGFsd2F5cyBndWFyYW50ZWVkIGFuZCBldmVuIGlmIGl0IGlzLCB0aGVyZSBpcyBubyBwdWJsaWMgd2F5XG4gKiB0byBnYXRoZXIgdGhlIG5lY2Vzc2FyeSBwYXJ0cyBvZiB0aGUgcmVzcG9uc2UgdG8gcGVyZm9ybSB2YWxpZGF0aW9uLCB0aGlzIG9iamVjdCBlbmNhcHN1bGF0ZXMgdGhlIHJlcXVpcmVkIHJlc3BvbnNlXG4gKiBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIHJlc3BvbnNlIHZhbGlkYXRpb24uXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gU2VydmVyUmVzcG9uc2VXcmFwcGVyXG4gKlxuICogQHByb3BlcnR5IHsqfSBib2R5IC0gVGhlIHJlc3BvbnNlIGJvZHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZW5jb2RpbmddIC0gVGhlIGVuY29kaW5nIG9mIHRoZSBib2R5IHdoZW4gdGhlIGJvZHkgaXMgYSBgQnVmZmVyYFxuICogQHByb3BlcnR5IHtvYmplY3R9IGhlYWRlcnMgLSBUaGUgcmVzcG9uc2UgaGVhZGVyc1xuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBbc3RhdHVzQ29kZT1kZWZhdWx0XSAtIFRoZSByZXNwb25zZSBzdGF0dXMgY29kZVxuICovXG5cbi8qKlxuICogVmFsaWRhdGlvbiBlcnJvci93YXJuaW5nIG9iamVjdC5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWYWxpZGF0aW9uRW50cnlcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29kZSAtIFRoZSBjb2RlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGVycm9yL3dhcm5pbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXJyb3JdIC0gV2hlbmV2ZXIgdGhlcmUgaXMgYW4gdXBzdHJlYW0gYEVycm9yYCBlbmNvdW50ZXJlZCwgaXRzIG1lc3NhZ2UgaXMgaGVyZVxuICogQHByb3BlcnR5IHtWYWxpZGF0aW9uRW50cnlbXX0gW2Vycm9yc10gLSBUaGUgbmVzdGVkIGVycm9yKHMpIGVuY291bnRlcmVkIGR1cmluZyB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbbGluZWFnZV0gLSBDb250YWlucyB0aGUgY29tcG9zaXRpb24gbGluZWFnZSBmb3IgY2lyY3VsYXIgY29tcG9zaXRpb24gZXJyb3JzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3Ivd2FybmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIFRoZSBoZWFkZXIgbmFtZSBmb3IgaGVhZGVyIHZhbGlkYXRpb24gZXJyb3JzXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGxvY2F0aW9uIGluIHRoZSBkb2N1bWVudCB3aGVyZSB0aGUgZXJyb3Ivd2FybmluZyBvY2N1cnJlZFxuICovXG5cbi8qKlxuICogVmFsaWRhdGlvbiByZXN1bHRzIG9iamVjdC5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWYWxpZGF0aW9uUmVzdWx0c1xuICpcbiAqIEBwcm9wZXJ0eSB7VmFsaWRhdGlvbkVudHJ5W119IGVycm9ycyAtIFRoZSB2YWxpZGF0aW9uIGVycm9yc1xuICogQHByb3BlcnR5IHtWYWxpZGF0aW9uRW50cnlbXX0gd2FybmluZ3MgLSBUaGUgdmFsaWRhdGlvbiB3YXJuaW5nc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIFN3YWdnZXJBcGkgb2JqZWN0IGZyb20gaXRzIFN3YWdnZXIgZGVmaW5pdGlvbihzKS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBsb2FkaW5nIHRoZSBkZWZpbml0aW9uKHMpXG4gKiBAcGFyYW0ge29iamVjdHxzdHJpbmd9IG9wdGlvbnMuZGVmaW5pdGlvbiAtIFRoZSBTd2FnZ2VyIGRlZmluaXRpb24gbG9jYXRpb24gb3Igc3RydWN0dXJlXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMuanNvblJlZnNdIC0gKihTZWUgW0pzb25SZWZzfkpzb25SZWZzT3B0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL3doaXRsb2NramMvanNvbi1yZWZzL2Jsb2IvbWFzdGVyL2RvY3MvQVBJLm1kI21vZHVsZV9Kc29uUmVmcy4uSnNvblJlZnNPcHRpb25zKSkqXG4gKiBAcGFyYW0ge1ZhbGlkYXRvckNhbGxiYWNrW119IFtvcHRpb25zLmN1c3RvbVZhbGlkYXRvcnNdIC0gVGhlIGN1c3RvbSB2YWxpZGF0b3JzXG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBwcm9taXNlXG4gKlxuICogQGV4YW1wbGVcbiAqIFN3YWdnZXJBcGkuY3JlYXRlKHtkZWZpbml0aW9uOiAnaHR0cDovL3BldHN0b3JlLnN3YWdnZXIuaW8vdjIvc3dhZ2dlci55YW1sJ30pXG4gKiAgIC50aGVuKGZ1bmN0aW9uIChhcGkpIHtcbiAqICAgICBjb25zb2xlLmxvZygnRG9jdW1lbnRhdGlvbiBVUkw6ICcsIGFwaS5kb2N1bWVudGF0aW9uKTtcbiAqICAgfSwgZnVuY3Rpb24gKGVycikge1xuICogICAgIGNvbnNvbGUuZXJyb3IoZXJyLnN0YWNrKTtcbiAqICAgfSk7XG4gKi9cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHZhciBhbGxUYXNrcyA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8vIFZhbGlkYXRlIGFyZ3VtZW50c1xuICBhbGxUYXNrcyA9IGFsbFRhc2tzLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgaWYgKF8uaXNVbmRlZmluZWQob3B0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBpcyByZXF1aXJlZCcpO1xuICAgICAgfSBlbHNlIGlmICghXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1VuZGVmaW5lZChvcHRpb25zLmRlZmluaXRpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuZGVmaW5pdGlvbiBpcyByZXF1aXJlZCcpO1xuICAgICAgfSBlbHNlIGlmICghXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMuZGVmaW5pdGlvbikgJiYgIV8uaXNTdHJpbmcob3B0aW9ucy5kZWZpbml0aW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLmRlZmluaXRpb24gbXVzdCBiZSBlaXRoZXIgYW4gb2JqZWN0IG9yIGEgc3RyaW5nJyk7XG4gICAgICB9IGVsc2UgaWYgKCFfLmlzVW5kZWZpbmVkKG9wdGlvbnMuanNvblJlZnMpICYmICFfLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5qc29uUmVmcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5qc29uUmVmcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgfSBlbHNlIGlmICghXy5pc1VuZGVmaW5lZChvcHRpb25zLmN1c3RvbVZhbGlkYXRvcnMpICYmICFfLmlzQXJyYXkob3B0aW9ucy5jdXN0b21WYWxpZGF0b3JzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLmN1c3RvbVZhbGlkYXRvcnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgfVxuXG4gICAgICBfLmZvckVhY2gob3B0aW9ucy5jdXN0b21WYWxpZGF0b3JzLCBmdW5jdGlvbiAodmFsaWRhdG9yLCBpbmRleCkge1xuICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbih2YWxpZGF0b3IpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5jdXN0b21WYWxpZGF0b3JzIGF0IGluZGV4ICcgKyBpbmRleCArICcgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBpbnB1dCBvcHRpb25zIHNvIGFzIG5vdCB0byBhbHRlciB0aGVtXG4gIG9wdGlvbnMgPSBfLmNsb25lRGVlcChvcHRpb25zKTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgZGVmaW5pdGlvbiBpZiBpdCBpcyBhIHBhdGgvVVJMIChUaGUgcmVhc29uIHdlIGRvIHRoaXMgaGVyZSBpbnN0ZWFkIG9mIHVzaW5nIEpzb25SZWZzI3Jlc29sdmVSZWZzQXQgaXNcbiAgLy8gYmVjYXVzZSB3ZSB1c2UgdGhpcyB0byBpZGVudGlmeSB3aGljaCBwbHVnaW4gd2Ugd2FudCB0byB1c2UuKVxuICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgLy8gTG9hZCB0aGUgcmVtb3RlIGRlZmluaXRpb24gb3IgcmV0dXJuIG9wdGlvbnMuZGVmaW5pdGlvblxuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG9wdGlvbnMuZGVmaW5pdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhMb2FkZXIubG9hZChvcHRpb25zLmpzb25SZWZzICYmIG9wdGlvbnMuanNvblJlZnMucmVsYXRpdmVCYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihvcHRpb25zLmpzb25SZWZzLnJlbGF0aXZlQmFzZSwgb3B0aW9ucy5kZWZpbml0aW9uKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5qc29uUmVmcyAmJiBvcHRpb25zLmpzb25SZWZzLmxvYWRlck9wdGlvbnMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5qc29uUmVmcy5sb2FkZXJPcHRpb25zIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9KVxuICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKFlBTUwuc2FmZUxvYWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVmaW5pdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAvLyBQcm9jZXNzIHRoZSBTd2FnZ2VyIGRlZmluaXRpb24gKGlmIHBvc3NpYmxlKVxuICBhbGxUYXNrcyA9IGFsbFRhc2tzXG4gICAgLnRoZW4oZnVuY3Rpb24gKGFwaURlZmluaXRpb24pIHtcbiAgICAgIHZhciBkZWZpbml0aW9uID0gXy5maW5kKHN1cHBvcnRlZFZlcnNpb25zLCBmdW5jdGlvbiAocERlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHBEZWZpbml0aW9uLmNhblByb2Nlc3MoYXBpRGVmaW5pdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgaWYgKF8uaXNVbmRlZmluZWQoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGlkZW50aWZ5IHRoZSBTd2FnZ2VyIHZlcnNpb24gb3IgdGhlIFN3YWdnZXIgdmVyc2lvbiBpcyB1bnN1cHBvcnRlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbi5jcmVhdGVTd2FnZ2VyQXBpKGFwaURlZmluaXRpb24sIG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gIHJldHVybiBhbGxUYXNrcztcbn07XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydfJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydfJ10gOiBudWxsKTtcbnZhciBtb2NrZXIgPSByZXF1aXJlKCdqc29uLXNjaGVtYS1mYWtlcicpO1xudmFyIFpTY2hlbWEgPSByZXF1aXJlKCd6LXNjaGVtYScpO1xuXG52YXIgZHJhZnQwNEpzb24gPSByZXF1aXJlKCcuL2pzb24tc2NoZW1hLWRyYWZ0LTA0Lmpzb24nKTtcbnZhciBkcmFmdDA0VXJsID0gJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hJztcblxuZnVuY3Rpb24gbm9ybWFsaXplRXJyb3IgKG9iaikge1xuICAvLyBSZW1vdmUgZmllbGRzIHRoYXQgYXJlIG5vdCBpbXBvcnRhbnQgb3IgYXJlIG5vdCBhIHBhcnQgb2YgdGhlIGV4cG9zZWQgY29udHJhY3RcbiAgZGVsZXRlIG9iai5wYXJhbXM7XG4gIGRlbGV0ZSBvYmouc2NoZW1hSWQ7XG5cbiAgaWYgKG9iai5pbm5lcikge1xuICAgIF8uZWFjaChvYmouaW5uZXIsIGZ1bmN0aW9uIChuT2JqKSB7XG4gICAgICBub3JtYWxpemVFcnJvcihuT2JqKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIGEgSlNPTiBTY2hlbWEgTW9ja2VyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBUaGUgbW9ja2VyIG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5mb3JtYXRHZW5lcmF0b3JzXSAtIFRoZSBjdXN0b20gZm9ybWF0IGdlbmVyYXRvcnMgdG8gdXNlXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIEpTT04gU2NoZW1hIG1vY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVKU09OU2NoZW1hTW9ja2VyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChfLmlzVW5kZWZpbmVkKG9wdGlvbnMpKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgLy8gRXh0ZW5kIGZha2VyLmpzIHRvIG9ubHkgaW5jbHVkZSB0aGUgJ2VuJyBsb2NhbGVcbiAgbW9ja2VyLmV4dGVuZCgnZmFrZXInLCBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgICBmYWtlci5sb2NhbGUgPSAnZW4nO1xuXG4gICAgcmV0dXJuIGZha2VyO1xuICB9KTtcblxuICAvLyBBZGQgdGhlIGN1c3RvbSBmb3JtYXQgZ2VuZXJhdG9yc1xuICBfLmVhY2gob3B0aW9ucy5mb3JtYXRHZW5lcmF0b3JzLCBmdW5jdGlvbiAoaGFuZGxlciwgbmFtZSkge1xuICAgIG1vY2tlci5mb3JtYXRzKG5hbWUsIGhhbmRsZXIpO1xuICB9KTtcblxuICByZXR1cm4gbW9ja2VyO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhIEpTT04gVmFsaWRhdG9yLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBUaGUgdmFsaWRhdG9yIG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5mb3JtYXRWYWxpZGF0b3JzXSAtIFRoZSBjdXN0b20gZm9ybWF0IHZhbGlkYXRvcnMgdG8gdXNlXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIEpTT04gU2NoZW1hIHZhbGlkYXRvclxuICovXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVKU09OVmFsaWRhdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIHZhbGlkYXRvciA9IG5ldyBaU2NoZW1hKHtcbiAgICBpZ25vcmVVbmtub3duRm9ybWF0czogdHJ1ZSxcbiAgICByZXBvcnRQYXRoQXNBcnJheTogdHJ1ZVxuICB9KTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKF8uaXNVbmRlZmluZWQob3B0aW9ucykpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICAvLyBBZGQgdGhlIGRyYWZ0LTA0IHNwZWNcbiAgdmFsaWRhdG9yLnNldFJlbW90ZVJlZmVyZW5jZShkcmFmdDA0VXJsLCBkcmFmdDA0SnNvbik7XG5cbiAgLy8gQWRkIHRoZSBjdXN0b20gdmFsaWRhdG9yc1xuICBfLmVhY2gob3B0aW9ucy5mb3JtYXRWYWxpZGF0b3JzLCBmdW5jdGlvbiAoaGFuZGxlciwgbmFtZSkge1xuICAgIFpTY2hlbWEucmVnaXN0ZXJGb3JtYXQobmFtZSwgaGFuZGxlcik7XG4gIH0pO1xuXG4gIHJldHVybiB2YWxpZGF0b3I7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgcHJvdmlkZWQgdmFsdWUgYWdhaW5zdCB0aGUgSlNPTiBTY2hlbWEgYnkgbmFtZSBvciB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsaWRhdG9yIC0gVGhlIEpTT04gU2NoZW1hIHZhbGlkYXRvciBjcmVhdGVkIHZpYSB7QGxpbmsgI2NyZWF0ZUpTT05WYWxpZGF0b3J9XG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hIC0gVGhlIEpTT04gU2NoZW1hXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHZhbGlkYXRlXG4gKlxuICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3Mgb2YgdGhlIHZhbGlkYXRpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMudmFsaWRhdGVBZ2FpbnN0U2NoZW1hID0gZnVuY3Rpb24gKHZhbGlkYXRvciwgc2NoZW1hLCB2YWx1ZSkge1xuICBzY2hlbWEgPSBfLmNsb25lRGVlcChzY2hlbWEpOyAvLyBDbG9uZSB0aGUgc2NoZW1hIGFzIHotc2NoZW1hIGFsdGVycyB0aGUgcHJvdmlkZWQgZG9jdW1lbnRcblxuICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcblxuICBpZiAoIXZhbGlkYXRvci52YWxpZGF0ZSh2YWx1ZSwgc2NoZW1hKSkge1xuICAgIHJlc3BvbnNlLmVycm9ycyA9IF8ubWFwKHZhbGlkYXRvci5nZXRMYXN0RXJyb3JzKCksIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIG5vcm1hbGl6ZUVycm9yKGVycik7XG5cbiAgICAgIHJldHVybiBlcnI7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgY29udGVudCB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50VHlwZSAtIFRoZSBDb250ZW50LVR5cGUgdmFsdWUgb2YgdGhlIHJlcXVlc3QvcmVzcG9uc2VcbiAqIEBwYXJhbSB7c3RyaW5nW119IHN1cHBvcnRlZFR5cGVzIC0gVGhlIHN1cHBvcnRlZCAoZGVjbGFyZWQpIENvbnRlbnQtVHlwZSB2YWx1ZXMgZm9yIHRoZSByZXF1ZXN0L3Jlc3BvbnNlXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0cyAtIFRoZSByZXN1bHRzIG9iamVjdCB0byB1cGRhdGUgaW4gdGhlIGV2ZW50IG9mIGFuIGludmFsaWQgY29udGVudCB0eXBlXG4gKi9cbm1vZHVsZS5leHBvcnRzLnZhbGlkYXRlQ29udGVudFR5cGUgPSBmdW5jdGlvbiAoY29udGVudFR5cGUsIHN1cHBvcnRlZFR5cGVzLCByZXN1bHRzKSB7XG4gIHZhciByYXdDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xuXG4gIGlmICghXy5pc1VuZGVmaW5lZChjb250ZW50VHlwZSkpIHtcbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzE0Lmh0bWwjc2VjMTQuMTdcbiAgICBjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLnNwbGl0KCc7JylbMF07IC8vIFN0cmlwIHRoZSBwYXJhbWV0ZXIocykgZnJvbSB0aGUgY29udGVudCB0eXBlXG4gIH1cblxuICAvLyBDaGVjayBmb3IgZXhhY3QgbWF0Y2ggb3IgbWltZS10eXBlIG9ubHkgbWF0Y2hcbiAgaWYgKF8uaW5kZXhPZihzdXBwb3J0ZWRUeXBlcywgcmF3Q29udGVudFR5cGUpID09PSAtMSAmJiBfLmluZGV4T2Yoc3VwcG9ydGVkVHlwZXMsIGNvbnRlbnRUeXBlKSA9PT0gLTEpIHtcbiAgICByZXN1bHRzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogJ0lOVkFMSURfQ09OVEVOVF9UWVBFJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgQ29udGVudC1UeXBlICgnICsgY29udGVudFR5cGUgKyAnKS4gIFRoZXNlIGFyZSBzdXBwb3J0ZWQ6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcy5qb2luKCcsICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCJpZFwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiLFxuICAgIFwiJHNjaGVtYVwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiLFxuICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb3JlIHNjaGVtYSBtZXRhLXNjaGVtYVwiLFxuICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICBcInNjaGVtYUFycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJwb3NpdGl2ZUludGVnZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJtaW5pbXVtXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJwb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiOiB7XG4gICAgICAgICAgICBcImFsbE9mXCI6IFsgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sIHsgXCJkZWZhdWx0XCI6IDAgfSBdXG4gICAgICAgIH0sXG4gICAgICAgIFwic2ltcGxlVHlwZXNcIjoge1xuICAgICAgICAgICAgXCJlbnVtXCI6IFsgXCJhcnJheVwiLCBcImJvb2xlYW5cIiwgXCJpbnRlZ2VyXCIsIFwibnVsbFwiLCBcIm51bWJlclwiLCBcIm9iamVjdFwiLCBcInN0cmluZ1wiIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzdHJpbmdBcnJheVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCIkc2NoZW1hXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcInRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHt9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcIm1pbmltdW1cIjogMCxcbiAgICAgICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LFxuICAgICAgICBcIm1pbkxlbmd0aFwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInJlZ2V4XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsSXRlbXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXRlbXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LFxuICAgICAgICBcIm1pblByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXlcIiB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJ0eXBlXCI6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXNcIiB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXNcIiB9LFxuICAgICAgICAgICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhbGxPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcImFueU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwib25lT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJub3RcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgIH0sXG4gICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjogWyBcIm1heGltdW1cIiBdLFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjogWyBcIm1pbmltdW1cIiBdXG4gICAgfSxcbiAgICBcImRlZmF1bHRcIjoge31cbn1cbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc3dheTphcGknKTtcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xuXG4vKipcbiAqIFRoZSBTd2FnZ2VyIEFQSSBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwbHVnaW4gLSBUaGUgU3dhZ2dlciB2ZXJzaW9uIHBsdWdpblxuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgU3dhZ2dlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzb2x2ZWQgLSBUaGUgZnVsbHkgcmVzb2x2ZWQgU3dhZ2dlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlcyAtIFRoZSBsb2NhdGlvbiBhbmQgcmVzb2x1dGlvbiBvZiB0aGUgcmVzb2x2ZWQgcmVmZXJlbmNlcyBpbiB0aGUgU3dhZ2dlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHBhc3NlZCB0byBzd2FnZ2VyQXBpLmNyZWF0ZVxuICogQHBhcmFtIHtWYWxpZGF0b3JDYWxsYmFja30gW29wdGlvbnMuY3VzdG9tVmFsaWRhdG9yc10gLSBUaGUgY3VzdG9tIHZhbGlkYXRvcnNcbiAqXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRvckNhbGxiYWNrW119IGN1c3RvbVZhbGlkYXRvcnMgLSBUaGUgYXJyYXkgb2YgY3VzdG9tIHZhbGlkYXRvcnNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIEFQSSBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZG9jdW1lbnRhdGlvbiAtIFRoZSBVUkwgdG8gdGhlIFN3YWdnZXIgZG9jdW1lbnRhdGlvblxuICogQHByb3BlcnR5IHtQYXRoW119IHBhdGhPYmplY3RzIC0gVGhlIHVuaXF1ZSBwYXRoIG9iamVjdHNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvclxuICogQHByb3BlcnR5IHtvYmplY3R9IHJlZmVyZW5jZXMgLSBUaGUgcmVmZXJlbmNlIG1ldGFkYXRhICooU2VlIFtKc29uUmVmc35SZXNvbHZlZFJlZkRldGFpbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS93aGl0bG9ja2pjL2pzb24tcmVmcy9ibG9iL21hc3Rlci9kb2NzL0FQSS5tZCNtb2R1bGVfSnNvblJlZnMuLlJlc29sdmVkUmVmRGV0YWlscykpKlxuICogQHByb3BlcnR5IHtvYmplY3R9IHJlc29sdmVkIC0gVGhlIGZ1bGx5IHJlc29sdmVkIEFQSSBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBTd2FnZ2VyIEFQSSB2ZXJzaW9uXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFN3YWdnZXJBcGkgKHBsdWdpbiwgZGVmaW5pdGlvbiwgcmVzb2x2ZWQsIHJlZmVyZW5jZXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5jdXN0b21WYWxpZGF0b3JzID0gW107XG4gIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG4gIHRoaXMuZG9jdW1lbnRhdGlvbiA9IHBsdWdpbi5kb2N1bWVudGF0aW9uO1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgdGhpcy5yZWZlcmVuY2VzID0gcmVmZXJlbmNlcztcbiAgdGhpcy5yZXNvbHZlZCA9IHJlc29sdmVkO1xuICB0aGlzLnZlcnNpb24gPSBwbHVnaW4udmVyc2lvbjtcblxuICAvLyBBc3NpZ24gU3dhZ2dlciBkZWZpbml0aW9uIHByb3BlcnRpZXMgdG8gdGhlIGFwaSBmb3IgZWFzeSBhY2Nlc3NcbiAgXy5hc3NpZ24odGhpcywgZGVmaW5pdGlvbik7XG5cbiAgZGVidWcoJ0luaXRpYWxpemluZyBTd2F5IHVzaW5nICVzJywgXy5pc1N0cmluZyhvcHRpb25zLmRlZmluaXRpb24pID8gb3B0aW9ucy5kZWZpbml0aW9uIDogJ3RoZSBwcm92aWRlZCBkb2N1bWVudCcpO1xuXG4gIHRoaXMucGF0aE9iamVjdHMgPSBwbHVnaW4uZ2V0UGF0aHModGhpcyk7XG5cbiAgLy8gUmVnaXN0ZXIgY3VzdG9tIHZhbGlkYXRvcnNcbiAgXy5mb3JFYWNoKG9wdGlvbnMuY3VzdG9tVmFsaWRhdG9ycywgU3dhZ2dlckFwaS5wcm90b3R5cGUucmVnaXN0ZXJWYWxpZGF0b3IsIHRoaXMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIHBhdGggYW5kIG9wZXJhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogQmVsb3cgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB1c2VkIHdoZW4gYHJlcU9yUGF0aGAgaXMgYW4gYGh0dHAuQ2xpZW50UmVxdWVzdGAgKihvciBlcXVpdmFsZW50KSo6XG4gKlxuICogICAqIGBtZXRob2RgXG4gKiAgICogYHVybGBcbiAqXG4gKiAqKFNlZToge0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfY2xhc3NfaHR0cF9jbGllbnRyZXF1ZXN0fSkqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBwYXRoT3JSZXEgLSBUaGUgU3dhZ2dlciBwYXRoIHN0cmluZyBvciB0aGUgaHR0cCBjbGllbnQgcmVxdWVzdCAqKG9yIGVxdWl2YWxlbnQpKlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXRob2RdIC0gVGhlIFN3YWdnZXIgb3BlcmF0aW9uIG1ldGhvZFxuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb259IFRoZSBvcGVyYXRpb24gZm9yIHRoZSBwcm92aWRlZCBwYXRoIGFuZCBtZXRob2Qgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIG9wZXJhdGlvbiBmb3IgdGhhdFxuICogICAgICAgICAgICAgICAgICAgICAgcGF0aCBhbmQgbWV0aG9kIGNvbWJpbmF0aW9uLlxuICovXG5Td2FnZ2VyQXBpLnByb3RvdHlwZS5nZXRPcGVyYXRpb24gPSBmdW5jdGlvbiAocGF0aE9yUmVxLCBtZXRob2QpIHtcbiAgdmFyIHBhdGhPYmplY3QgPSB0aGlzLmdldFBhdGgocGF0aE9yUmVxKTtcbiAgdmFyIG9wZXJhdGlvbjtcblxuICBpZiAoIV8uaXNVbmRlZmluZWQocGF0aE9iamVjdCkpIHtcbiAgICBpZiAoXy5pc09iamVjdChwYXRoT3JSZXEpKSB7XG4gICAgICBtZXRob2QgPSBwYXRoT3JSZXEubWV0aG9kO1xuICAgIH1cblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChtZXRob2QpKSB7XG4gICAgICBtZXRob2QgPSBtZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBvcGVyYXRpb24gPSBwYXRoT2JqZWN0LmdldE9wZXJhdGlvbihtZXRob2QpO1xuICB9XG5cbiAgcmV0dXJuIG9wZXJhdGlvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgb3BlcmF0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIHBhdGggb3IgYWxsIG9wZXJhdGlvbnMgaW4gdGhlIEFQSS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhdIC0gVGhlIFN3YWdnZXIgcGF0aFxuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb25bXX0gQWxsIG9wZXJhdGlvbnMgZm9yIHRoZSBwcm92aWRlZCBwYXRoIG9yIGFsbCBBUEkgb3BlcmF0aW9ucy5cbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUuZ2V0T3BlcmF0aW9ucyA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gIHZhciBvcGVyYXRpb25zID0gW107XG4gIHZhciBwYXRoT2JqZWN0O1xuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhdGgpKSB7XG4gICAgXy5lYWNoKHRoaXMucGF0aE9iamVjdHMsIGZ1bmN0aW9uIChwT2JqZWN0KSB7XG4gICAgICBvcGVyYXRpb25zLnB1c2guYXBwbHkob3BlcmF0aW9ucywgcE9iamVjdC5nZXRPcGVyYXRpb25zKCkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHBhdGhPYmplY3QgPSB0aGlzLmdldFBhdGgocGF0aCk7XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocGF0aE9iamVjdCkpIHtcbiAgICAgIG9wZXJhdGlvbnMgPSBwYXRoT2JqZWN0LmdldE9wZXJhdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3BlcmF0aW9ucztcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgb3BlcmF0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIHRhZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3RhZ10gLSBUaGUgU3dhZ2dlciB0YWdcbiAqXG4gKiBAcmV0dXJucyB7T3BlcmF0aW9uW119IEFsbCBvcGVyYXRpb25zIGZvciB0aGUgcHJvdmlkZWQgdGFnLlxuICovXG5Td2FnZ2VyQXBpLnByb3RvdHlwZS5nZXRPcGVyYXRpb25zQnlUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHJldHVybiBfLnJlZHVjZSh0aGlzLnBhdGhPYmplY3RzLCBmdW5jdGlvbiAob3BlcmF0aW9ucywgcGF0aE9iamVjdCkge1xuICAgIG9wZXJhdGlvbnMucHVzaC5hcHBseShvcGVyYXRpb25zLCBwYXRoT2JqZWN0LmdldE9wZXJhdGlvbnNCeVRhZyh0YWcpKTtcblxuICAgIHJldHVybiBvcGVyYXRpb25zO1xuICB9LCBbXSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhdGggb2JqZWN0IGZvciB0aGUgZ2l2ZW4gcGF0aCBvciByZXF1ZXN0LlxuICpcbiAqICoqTm90ZToqKiBCZWxvdyBpcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHVzZWQgd2hlbiBgcmVxT3JQYXRoYCBpcyBhbiBgaHR0cC5DbGllbnRSZXF1ZXN0YCAqKG9yIGVxdWl2YWxlbnQpKjpcbiAqXG4gKiAgICogYHVybGBcbiAqXG4gKiAqKFNlZToge0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfY2xhc3NfaHR0cF9jbGllbnRyZXF1ZXN0fSkqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBwYXRoT3JSZXEgLSBUaGUgU3dhZ2dlciBwYXRoIHN0cmluZyBvciB0aGUgaHR0cCBjbGllbnQgcmVxdWVzdCAqKG9yIGVxdWl2YWxlbnQpKlxuICpcbiAqIEByZXR1cm5zIHtQYXRofSBUaGUgY29ycmVzcG9uZGluZyBQYXRoIG9iamVjdCBmb3IgdGhlIHJlcXVlc3RlZCBwYXRoIG9yIHJlcXVlc3QuXG4gKi9cblN3YWdnZXJBcGkucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbiAocGF0aE9yUmVxKSB7XG4gIHZhciB1cmw7XG5cbiAgaWYgKF8uaXNPYmplY3QocGF0aE9yUmVxKSkge1xuICAgIHVybCA9IHBhcnNlVXJsKHBhdGhPclJlcS51cmwpLnBhdGhuYW1lO1xuXG4gICAgcmV0dXJuIF8uZmluZCh0aGlzLnBhdGhPYmplY3RzLCBmdW5jdGlvbiAocGF0aE9iamVjdCkge1xuICAgICAgcmV0dXJuIF8uaXNBcnJheShwYXRoT2JqZWN0LnJlZ2V4cC5leGVjKHVybCkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfLmZpbmQodGhpcy5wYXRoT2JqZWN0cywgZnVuY3Rpb24gKHBhdGhPYmplY3QpIHtcbiAgICAgIHJldHVybiBwYXRoT3JSZXEgPT09IHBhdGhPYmplY3QucGF0aDtcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBwYXRoIG9iamVjdHMgZm9yIHRoZSBTd2FnZ2VyIEFQSS5cbiAqXG4gKiBAcmV0dXJucyB7UGF0aFtdfSBUaGUgUGF0aCBvYmplY3RzXG4gKi9cblN3YWdnZXJBcGkucHJvdG90eXBlLmdldFBhdGhzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wYXRoT2JqZWN0cztcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgdmFsaWRhdG9yLlxuICpcbiAqIEBwYXJhbSB7dmFsaWRhdG9yQ2FsbGJhY2t9IHZhbGlkYXRvciAtIFRoZSB2YWxpZGF0b3JcbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSB2YWxpZGF0b3IgaXMgbm90IGEgZnVuY3Rpb25cbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUucmVnaXN0ZXJWYWxpZGF0b3IgPSBmdW5jdGlvbiAodmFsaWRhdG9yKSB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHZhbGlkYXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWxpZGF0b3IgaXMgcmVxdWlyZWQnKTtcbiAgfSBlbHNlIGlmICghXy5pc0Z1bmN0aW9uKHZhbGlkYXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWxpZGF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB0aGlzLmN1c3RvbVZhbGlkYXRvcnMucHVzaCh2YWxpZGF0b3IpO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB2YWxpZGF0aW9uIG9mIHRoZSBTd2FnZ2VyIEFQSSBkb2N1bWVudChzKS5cbiAqXG4gKiBAcmV0dXJucyB7VmFsaWRhdGlvblJlc3VsdHN9IFRoZSB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXN1bHRzID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmdW5jdGlvbiBkb1ZhbGlkYXRpb24gKHZhbGlkYXRvcikge1xuICAgIHZhciB2UmVzdWx0cyA9IHZhbGlkYXRvcihzZWxmKTtcblxuICAgIGlmICh2UmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaC5hcHBseShyZXN1bHRzLmVycm9ycywgdlJlc3VsdHMuZXJyb3JzKTtcbiAgICB9XG5cbiAgICBpZiAodlJlc3VsdHMud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy53YXJuaW5ncy5wdXNoLmFwcGx5KHJlc3VsdHMud2FybmluZ3MsIHZSZXN1bHRzLndhcm5pbmdzKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0aGUgZG9jdW1lbnQgc3RydWN0dXJhbGx5XG4gIGRvVmFsaWRhdGlvbih0aGlzLnBsdWdpbi5nZXRTdHJ1Y3R1cmFsVmFsaWRhdG9yKCkpO1xuXG4gIC8vIFBlcmZvcm0gcmVtYWluaW5nIHZhbGlkYXRpb24gb25seSBpZiB0aGUgZG9jdW1lbnQgaXMgc3RydWN0dXJhbGx5IHZhbGlkXG4gIGlmIChyZXN1bHRzLmVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBSdW4gcGx1Z2luIHZhbGlkYXRvcnNcbiAgICBfLmZvckVhY2godGhpcy5wbHVnaW4uZ2V0U2VtYW50aWNWYWxpZGF0b3JzKCksIGRvVmFsaWRhdGlvbik7XG5cbiAgICAvLyBSdW4gY3VzdG9tIHZhbGlkYXRvcnNcbiAgICBfLmZvckVhY2godGhpcy5jdXN0b21WYWxpZGF0b3JzLCBkb1ZhbGlkYXRpb24pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN3YWdnZXJBcGk7XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydfJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydfJ10gOiBudWxsKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N3YXk6b3BlcmF0aW9uJyk7XG52YXIgc0hlbHBlcnMgPSByZXF1aXJlKCcuLi9oZWxwZXJzJyk7XG5cbi8qKlxuICogVGhlIFN3YWdnZXIgT3BlcmF0aW9uIG9iamVjdC5cbiAqXG4gKiAqKk5vdGU6KiogRG8gbm90IHVzZSBkaXJlY3RseS5cbiAqXG4gKiAqKkV4dHJhIFByb3BlcnRpZXM6KiogT3RoZXIgdGhhbiB0aGUgZG9jdW1lbnRlZCBwcm9wZXJ0aWVzLCB0aGlzIG9iamVjdCBhbHNvIGV4cG9zZXMgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGRlZmluaXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtTd2FnZ2VyQXBpfSBhcGkgLSBUaGUgU3dhZ2dlciBBUEkgb2JqZWN0XG4gKiBAcGFyYW0ge1BhdGh9IHBhdGhPYmplY3QgLSBUaGUgUGF0aCBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBUaGUgb3BlcmF0aW9uIG1ldGhvZFxuICogQHBhcmFtIHtzdHJpbmd9IHB0ciAtIFRoZSBKU09OIFBvaW50ZXIgdG8gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgb3BlcmF0aW9uIGRlZmluaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IGNvbnN1bWVzIC0gVGhlIG1pbWUgdHlwZXMgdGhpcyBvcGVyYXRpb24gY29uc3VtZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb2R1Y2VzIC0gVGhlIG1pbWUgdHlwZXMgdGhpcyBvcGVyYXRpb24gcHJvZHVjZXNcbiAqXG4gKiBAcHJvcGVydHkge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyIEFQSSBvYmplY3RcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIG9wZXJhdGlvbiBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWV0aG9kIC0gVGhlIEhUVFAgbWV0aG9kIGZvciB0aGlzIG9wZXJhdGlvblxuICogQHByb3BlcnR5IHtQYXRofSBwYXRoT2JqZWN0IC0gVGhlIFBhdGggb2JqZWN0XG4gKiBAcHJvcGVydHkge1BhcmFtZXRlcltdfSBwYXJhbWV0ZXJPYmplY3RzIC0gVGhlIFBhcmFtZXRlciBvYmplY3RzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHRyIC0gVGhlIEpTT04gUG9pbnRlciB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcHJvcGVydHkge29iamVjdH0gc2VjdXJpdHlEZWZpbml0aW9ucyAtIFRoZSBzZWN1cml0eSBkZWZpbml0aW9ucyB1c2VkIGJ5IHRoaXMgb3BlcmF0aW9uXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIE9wZXJhdGlvbiAoYXBpLCBwYXRoT2JqZWN0LCBtZXRob2QsIHB0ciwgZGVmaW5pdGlvbiwgY29uc3VtZXMsIHByb2R1Y2VzKSB7XG4gIHRoaXMuYXBpID0gYXBpO1xuICB0aGlzLnBhdGhPYmplY3QgPSBwYXRoT2JqZWN0O1xuICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgdGhpcy5wdHIgPSBwdHI7XG4gIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG5cbiAgLy8gQXNzaWduIFN3YWdnZXIgZGVmaW5pdGlvbiBwcm9wZXJ0aWVzIHRvIHRoZSBvcGVyYXRpb24gZm9yIGVhc3kgYWNjZXNzXG4gIF8uYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuXG4gIC8vIEFzc2lnbiBjb25zdW1lcy9wcm9kdWNlcyBhZnRlciBtZXJnaW5nIHByb3BlcnRpZXNcbiAgdGhpcy5jb25zdW1lcyA9IGNvbnN1bWVzO1xuICB0aGlzLnByb2R1Y2VzID0gcHJvZHVjZXM7XG5cbiAgZGVidWcoJ0ZvdW5kIG9wZXJhdGlvbiBhdCAlcycsIHB0cik7XG5cbiAgdGhpcy5wYXJhbWV0ZXJPYmplY3RzID0gYXBpLnBsdWdpbi5nZXRPcGVyYXRpb25QYXJhbWV0ZXJzKHRoaXMpO1xuICB0aGlzLnJlc3BvbnNlT2JqZWN0cyA9IGFwaS5wbHVnaW4uZ2V0T3BlcmF0aW9uUmVzcG9uc2VzKHRoaXMpO1xuXG4gIC8vIEJyaW5nIGluIHRoZSBzZWN1cml0eSBkZWZpbml0aW9ucyBmb3IgZWFzaWVyIGFjY2Vzc1xuICB0aGlzLnNlY3VyaXR5RGVmaW5pdGlvbnMgPSBfLnJlZHVjZShkZWZpbml0aW9uLnNlY3VyaXR5LCBmdW5jdGlvbiAoZGVmcywgcmVxcykge1xuICAgIF8uZWFjaChyZXFzLCBmdW5jdGlvbiAocmVxLCBuYW1lKSB7XG4gICAgICB2YXIgZGVmID0gYXBpLnJlc29sdmVkLnNlY3VyaXR5RGVmaW5pdGlvbnMgPyBhcGkucmVzb2x2ZWQuc2VjdXJpdHlEZWZpbml0aW9uc1tuYW1lXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZikpIHtcbiAgICAgICAgZGVmc1tuYW1lXSA9IGRlZjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWZzO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGFyYW1ldGVyIHdpdGggdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGFuZCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlclxuICogQHBhcmFtIHtzdHJpbmd9IFtsb2NhdGlvbl0gLSBUaGUgbG9jYXRpb24gKihgaW5gKSogb2YgdGhlIHBhcmFtZXRlciAqKFVzZWQgZm9yIGRpc2FtYmlndWF0aW9uKSpcbiAqXG4gKiBAcmV0dXJucyB7UGFyYW1ldGVyfSBUaGUgcGFyYW1ldGVyIG1hdGNoaW5nIHRoZSBsb2NhdGlvbiBhbmQgbmFtZSBjb21iaW5hdGlvbiBvciBgdW5kZWZpbmVkYCBpZiB0aGVyZSBpcyBubyBtYXRjaC5cbiAqL1xuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbiAobmFtZSwgbG9jYXRpb24pIHtcbiAgcmV0dXJuIF8uZmluZCh0aGlzLnBhcmFtZXRlck9iamVjdHMsIGZ1bmN0aW9uIChwYXJhbWV0ZXJPYmplY3QpIHtcbiAgICByZXR1cm4gcGFyYW1ldGVyT2JqZWN0Lm5hbWUgPT09IG5hbWUgJiYgKF8uaXNVbmRlZmluZWQobG9jYXRpb24pID8gdHJ1ZSA6IHBhcmFtZXRlck9iamVjdC5pbiA9PT0gbG9jYXRpb24pO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgcGFyYW1ldGVycyBmb3IgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7UGFyYW1ldGVyW119IEFsbCBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9uLlxuICovXG5PcGVyYXRpb24ucHJvdG90eXBlLmdldFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBhcmFtZXRlck9iamVjdHM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlc3BvbnNlIGZvciB0aGUgcmVxdWVzdGVkIHN0YXR1cyBjb2RlIG9yIHRoZSBkZWZhdWx0IHJlc3BvbnNlICooaWYgYXZhaWxhYmxlKSogaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtzdGF0dXNDb2RlPSdkZWZhdWx0J10gLSBUaGUgc3RhdHVzIGNvZGVcbiAqXG4gKiBAcmV0dXJucyB7UmVzcG9uc2V9IFRoZSByZXNwb25zZSBvciB1bmRlZmluZWQgaWYgb25lIGNhbm5vdCBiZSBmb3VuZFxuICovXG5PcGVyYXRpb24ucHJvdG90eXBlLmdldFJlc3BvbnNlID0gZnVuY3Rpb24gKHN0YXR1c0NvZGUpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQoc3RhdHVzQ29kZSkpIHtcbiAgICBzdGF0dXNDb2RlID0gJ2RlZmF1bHQnO1xuICB9IGVsc2UgaWYgKF8uaXNOdW1iZXIoc3RhdHVzQ29kZSkpIHtcbiAgICBzdGF0dXNDb2RlID0gc3RhdHVzQ29kZS50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIF8uZmluZCh0aGlzLmdldFJlc3BvbnNlcygpLCBmdW5jdGlvbiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Quc3RhdHVzQ29kZSA9PT0gc3RhdHVzQ29kZTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIHJlc3BvbnNlcyBmb3IgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7UmVzcG9uc2VbXX0gQWxsIHJlc3BvbnNlcyBmb3IgdGhlIG9wZXJhdGlvbi5cbiAqL1xuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRSZXNwb25zZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlc3BvbnNlT2JqZWN0cztcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSByZXF1ZXN0LlxuICpcbiAqICoqTm90ZToqKiBCZWxvdyBpcyB0aGUgbGlzdCBvZiBgcmVxYCBwcm9wZXJ0aWVzIHVzZWQgKihyZXEgc2hvdWxkIGJlIGFuIGBodHRwLkNsaWVudFJlcXVlc3RgIG9yIGVxdWl2YWxlbnQpKjpcbiAqXG4gKiAgICogYGJvZHlgOiBVc2VkIGZvciBgYm9keWAgYW5kIGBmb3JtRGF0YWAgcGFyYW1ldGVyc1xuICogICAqIGBmaWxlc2A6IFVzZWQgZm9yIGBmb3JtRGF0YWAgcGFyYW1ldGVycyB3aG9zZSBgdHlwZWAgaXMgYGZpbGVgXG4gKiAgICogYGhlYWRlcnNgOiBVc2VkIGZvciBgaGVhZGVyYCBwYXJhbWV0ZXJzIGFuZCBjb25zdW1lc1xuICogICAqIGBxdWVyeWA6IFVzZWQgZm9yIGBxdWVyeWAgcGFyYW1ldGVyc1xuICogICAqIGB1cmxgOiB1c2VkIGZvciBgcGF0aGAgcGFyYW1ldGVyc1xuICpcbiAqIEZvciBgcGF0aGAgcGFyYW1ldGVycywgd2Ugd2lsbCB1c2UgdGhlIG9wZXJhdGlvbidzIGByZWdleHBgIHByb3BlcnR5IHRvIHBhcnNlIG91dCBwYXRoIHBhcmFtZXRlcnMgdXNpbmcgdGhlIGB1cmxgXG4gKiBwcm9wZXJ0eS5cbiAqXG4gKiAqKFNlZToge0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfY2xhc3NfaHR0cF9jbGllbnRyZXF1ZXN0fSkqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHJlcSAtIFRoZSBodHRwIGNsaWVudCByZXF1ZXN0ICoob3IgZXF1aXZhbGVudCkqXG4gKlxuICogQHJldHVybnMge1ZhbGlkYXRpb25SZXN1bHRzfSBUaGUgdmFsaWRhdGlvbiByZXN1bHRzXG4gKi9cbk9wZXJhdGlvbi5wcm90b3R5cGUudmFsaWRhdGVSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICB2YXIgcmVzdWx0cyA9IHtcbiAgICBlcnJvcnM6IFtdLFxuICAgIHdhcm5pbmdzOiBbXVxuICB9O1xuXG4gIC8vIFZhbGlkYXRlIHRoZSBDb250ZW50LVR5cGUgYnV0IG9ubHkgZm9yIFBPU1QgYW5kIFBVVCAoVGhlIHJlc3QgZG8gbm90IGhhdmUgYm9kaWVzKVxuICBpZiAoWydwb3N0JywgJ3B1dCddLmluZGV4T2YodGhpcy5tZXRob2QpID4gLTEpIHtcbiAgICAvLyBEZWZhdWx0cyB0byBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gcGVyIGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjNy5odG1sI3NlYzcuMi4xXG4gICAgc0hlbHBlcnMudmFsaWRhdGVDb250ZW50VHlwZShyZXEuaGVhZGVyc1snY29udGVudC10eXBlJ10gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsIHRoaXMuY29uc3VtZXMsIHJlc3VsdHMpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgdGhlIHBhcmFtZXRlcnNcbiAgXy5lYWNoKHRoaXMuZ2V0UGFyYW1ldGVycygpLCBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICB2YXIgcGFyYW1WYWx1ZSA9IHBhcmFtLmdldFZhbHVlKHJlcSk7XG4gICAgdmFyIHZFcnI7XG5cbiAgICBpZiAoIXBhcmFtVmFsdWUudmFsaWQpIHtcbiAgICAgIHZFcnIgPSB7XG4gICAgICAgIGNvZGU6ICdJTlZBTElEX1JFUVVFU1RfUEFSQU1FVEVSJyxcbiAgICAgICAgZXJyb3JzOiBwYXJhbVZhbHVlLmVycm9yLmVycm9ycyB8fCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29kZTogcGFyYW1WYWx1ZS5lcnJvci5jb2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogcGFyYW1WYWx1ZS5lcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgcGF0aDogcGFyYW1WYWx1ZS5lcnJvci5wYXRoXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbjogcGFyYW1WYWx1ZS5wYXJhbWV0ZXJPYmplY3QuaW4sXG4gICAgICAgIC8vIFJlcG9ydCB0aGUgYWN0dWFsIGVycm9yIGlmIHRoZXJlIGlzIG9ubHkgb25lIGVycm9yLiAgT3RoZXJ3aXNlLCByZXBvcnQgYSBKU09OIFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yLlxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBwYXJhbWV0ZXIgKCcgKyBwYXJhbS5uYW1lICsgJyk6ICcgKyAoKHBhcmFtVmFsdWUuZXJyb3JzIHx8IFtdKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWYWx1ZSBmYWlsZWQgSlNPTiBTY2hlbWEgdmFsaWRhdGlvbicgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZS5lcnJvci5tZXNzYWdlKSxcbiAgICAgICAgbmFtZTogcGFyYW1WYWx1ZS5wYXJhbWV0ZXJPYmplY3QubmFtZSxcbiAgICAgICAgcGF0aDogcGFyYW1WYWx1ZS5lcnJvci5wYXRoXG4gICAgICB9O1xuXG4gICAgICByZXN1bHRzLmVycm9ycy5wdXNoKHZFcnIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtTZXJ2ZXJSZXNwb25zZVdyYXBwZXJ9IHJlcyAtIFRoZSByZXNwb25zZSBvciByZXNwb25zZSBsaWtlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtWYWxpZGF0aW9uUmVzdWx0c30gVGhlIHZhbGlkYXRpb24gcmVzdWx0c1xuICovXG5PcGVyYXRpb24ucHJvdG90eXBlLnZhbGlkYXRlUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzKSB7XG4gIHZhciByZXN1bHRzID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG4gIHZhciByZWFsU3RhdHVzQ29kZSA9IHJlcyA/IHJlcy5zdGF0dXNDb2RlIDogJ2RlZmF1bHQnO1xuICB2YXIgcmVzcG9uc2UgPSB0aGlzLmdldFJlc3BvbnNlKHJlYWxTdGF0dXNDb2RlKTtcblxuICBpZiAoXy5pc1VuZGVmaW5lZChyZXNwb25zZSkpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyByZXNwb25zZSBmb3IgdGhlIHJlcXVlc3RlZCBzdGF0dXMsIHVzZSB0aGUgZGVmYXVsdCBpZiB0aGVyZSBpcyBvbmUgKFRoaXMgaXMgU3dhZ2dlcidzIGFwcHJvYWNoKVxuICAgIHJlc3BvbnNlID0gdGhpcy5nZXRSZXNwb25zZSgnZGVmYXVsdCcpO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocmVzcG9uc2UpKSB7XG4gICAgICByZXN1bHRzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRV9DT0RFJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVGhpcyBvcGVyYXRpb24gZG9lcyBub3QgaGF2ZSBhIGRlZmluZWQgXFwnJyArIChyZWFsU3RhdHVzQ29kZSA9PT0gJ2RlZmF1bHQnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxTdGF0dXNDb2RlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsU3RhdHVzQ29kZSArICdcXCcgb3IgXFwnZGVmYXVsdCcpICsgJ1xcJyByZXNwb25zZSBjb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0cyA9IHJlc3BvbnNlLnZhbGlkYXRlUmVzcG9uc2UocmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPcGVyYXRpb247XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydfJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydfJ10gOiBudWxsKTtcbnZhciBoZWxwZXJzID0gcmVxdWlyZSgnLi4vaGVscGVycycpO1xudmFyIEpzb25SZWZzID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ0pzb25SZWZzJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydKc29uUmVmcyddIDogbnVsbCk7XG5cbi8qKlxuICogT2JqZWN0IHJlcHJlc2VudGluZyBhIHBhcmFtZXRlciB2YWx1ZS5cbiAqXG4gKiAqKk5vdGU6KiogRG8gbm90IHVzZSBkaXJlY3RseS5cbiAqXG4gKiBAcGFyYW0ge1BhcmFtZXRlcn0gcGFyYW1ldGVyIC0gVGhlIFBhcmFtZXRlciBPYmplY3RcbiAqIEBwYXJhbSB7Kn0gcmF3IC0gVGhlIG9yaWdpbmFsL3JhdyB2YWx1ZVxuICpcbiAqIEBwcm9wZXJ0eSB7RXJyb3J9IGVycm9yIC0gVGhlIGVycm9yKHMpIGVuY291bnRlcmVkIGR1cmluZyBwcm9jZXNzaW5nL3ZhbGlkYXRpbmcgdGhlIHBhcmFtZXRlciB2YWx1ZVxuICogQHByb3BlcnR5IHtQYXJhbWV0ZXJ9IHBhcmFtZXRlck9iamVjdCAtIFRoZSBQYXJhbWV0ZXIgb2JqZWN0XG4gKiBAcHJvcGVydHkgeyp9IHJhdyAtIFRoZSBvcmlnaW5hbCBwYXJhbWV0ZXIgdmFsdWUgKihEb2VzIG5vdCB0YWtlIGRlZmF1bHQgdmFsdWVzIGludG8gYWNjb3VudCkqXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHZhbGlkIC0gV2hldGhlciBvciBub3QgdGhpcyBwYXJhbWV0ZXIgaXMgdmFsaWQgYmFzZWQgb24gaXRzIEpTT04gU2NoZW1hXG4gKiBAcHJvcGVydHkgeyp9IHZhbHVlIC0gVGhlIHByb2Nlc3NlZCB2YWx1ZSAqKFRha2VzIGRlZmF1bHQgdmFsdWVzIGludG8gYWNjb3VudCBhbmQgZG9lcyB0eXBlIGNvZXJjaW9uIHdoZW4gbmVjZXNzYXJ5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBvc3NpYmxlKSouICBUaGlzIGNhbiB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gdGhlIGV2ZW50IHRoYXQgcHJvY2Vzc2luZyB0aGUgdmFsdWUgaXNcbiAqICAgICAgICAgICAgICAgICAgICAgICBpbXBvc3NpYmxlICoobWlzc2luZyBzY2hlbWEgdHlwZSkqIG9yIGB1bmRlZmluZWRgIGlmIHByb2Nlc3NpbmcgdGhlIHZhbHVlIGZhaWxlZCAqKGludmFsaWRcbiAqICAgICAgICAgICAgICAgICAgICAgICB0eXBlcywgZXRjLikqLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBQYXJhbWV0ZXJWYWx1ZSAocGFyYW1ldGVyLCByYXcpIHtcbiAgdmFyIHBsdWdpbiA9IHBhcmFtZXRlci5wYXRoT2JqZWN0LmFwaS5wbHVnaW47XG4gIHZhciBwUGF0aCA9IEpzb25SZWZzLnBhdGhGcm9tUHRyKHBhcmFtZXRlci5wdHIpO1xuICB2YXIgcHJvY2Vzc2VkID0gZmFsc2U7XG4gIHZhciBzY2hlbWEgPSBwYXJhbWV0ZXIuY29tcHV0ZWRTY2hlbWE7XG4gIHZhciBlcnJvcjtcbiAgdmFyIGlzVmFsaWQ7XG4gIHZhciBwcm9jZXNzZWRWYWx1ZTtcblxuICB0aGlzLnBhcmFtZXRlck9iamVjdCA9IHBhcmFtZXRlcjtcbiAgdGhpcy5yYXcgPSByYXc7XG5cbiAgLy8gVXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBmb3IgJ3ZhbHVlJyB0byBhbGxvdyBmb3IgbGF6eSBwcm9jZXNzaW5nIG9mIHRoZSByYXcgdmFsdWVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuICAgIGVycm9yOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBjYWxsIHRoaXMudmFsaWQgdG8gZW5zdXJlIHdlIHZhbGlkYXRlIHRoZSB2YWx1ZSBwcmlvciB0byByZXR1cm5pbmcgYW55IHZhbHVlc1xuICAgICAgICBpZiAodGhpcy52YWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZDoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgd2FybmluZ3M6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHZhciBza2lwVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgIHZhciB2RXJyb3I7XG5cbiAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQoaXNWYWxpZCkpIHtcbiAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChlcnJvcikpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkbmVzc1xuICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyLnJlcXVpcmVkID09PSB0cnVlICYmIF8uaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdkVycm9yID0gbmV3IEVycm9yKCdWYWx1ZSBpcyByZXF1aXJlZCBidXQgd2FzIG5vdCBwcm92aWRlZCcpO1xuXG4gICAgICAgICAgICAgICAgdkVycm9yLmNvZGUgPSAnUkVRVUlSRUQnO1xuXG4gICAgICAgICAgICAgICAgdGhyb3cgdkVycm9yO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gQ2FzZXMgd2UgZG8gbm90IHdhbnQgdG8gZG8gc2NoZW1hIHZhbGlkYXRpb246XG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vICAgKiBUaGUgc2NoZW1hIGV4cGxpY2l0bHkgYWxsb3dzIGVtcHR5IHZhbHVlcyBhbmQgdGhlIHZhbHVlIGlzIGVtcHR5XG4gICAgICAgICAgICAgIC8vICAgKiBUaGUgc2NoZW1hIGFsbG93IG9wdGlvbmFsIHZhbHVlcyBhbmQgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAvLyAgICogVGhlIHNjaGVtYSBkZWZpbmVzIGEgZmlsZSBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgLy8gICAqIFRoZSBzY2hlbWEgaXMgZm9yIGEgc3RyaW5nIHR5cGUgd2l0aCBkYXRlL2RhdGUtdGltZSBmb3JtYXQgYW5kIHRoZSB2YWx1ZSBpcyBhIGRhdGVcbiAgICAgICAgICAgICAgLy8gICAqIFRoZSBzY2hlbWEgaXMgZm9yIGEgc3RyaW5nIHR5cGUgYW5kIHRoZSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyLnJlcXVpcmVkID09PSBmYWxzZSAmJiBfLmlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEuYWxsb3dFbXB0eVZhbHVlID09PSB0cnVlICYmIHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChbJ2RhdGUnLCAnZGF0ZS10aW1lJ10uaW5kZXhPZihzY2hlbWEuZm9ybWF0KSA+IC0xICYmIF8uaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLnR5cGUgPT09ICdzdHJpbmcnICYmIF8uaXNGdW5jdGlvbih2YWx1ZS5yZWFkVUludDgpKSB7XG4gICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFnYWluc3QgSlNPTiBTY2hlbWFcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBoZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShwbHVnaW4uZ2V0SlNPTlNjaGVtYVZhbGlkYXRvcigpLCBwYXJhbWV0ZXIuZ2V0U2NoZW1hKCksIHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2RXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbHVlIGZhaWxlZCBKU09OIFNjaGVtYSB2YWxpZGF0aW9uJyk7XG5cbiAgICAgICAgICAgICAgICB2RXJyb3IuY29kZSA9ICdTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQnO1xuICAgICAgICAgICAgICAgIHZFcnJvci5lcnJvcnMgPSByZXN1bHQuZXJyb3JzO1xuXG4gICAgICAgICAgICAgICAgdGhyb3cgdkVycm9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgZXJyLmZhaWxlZFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICBlcnIucGF0aCA9IHBQYXRoO1xuXG4gICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbHVlOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghcHJvY2Vzc2VkKSB7XG4gICAgICAgICAgaWYgKHNjaGVtYS50eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgIHByb2Nlc3NlZFZhbHVlID0gcmF3O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0L0NvZXJjZSB0aGUgcmF3IHZhbHVlIGZyb20gdGhlIHJlcXVlc3Qgb2JqZWN0XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IHBsdWdpbi5jb252ZXJ0VmFsdWUoc2NoZW1hLCB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbkZvcm1hdDogcGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXRcbiAgICAgICAgICAgICAgfSwgcmF3KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgc3RpbGwgbm8gdmFsdWUgYW5kIHRoZXJlIGFyZSBubyBlcnJvcnMsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBhdmFpbGFibGUgKG5vIGNvZXJjaW9uKVxuICAgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQocHJvY2Vzc2VkVmFsdWUpICYmIF8uaXNVbmRlZmluZWQoZXJyb3IpKSB7XG4gICAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIGlmIChfLmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkVmFsdWUgPSBfLnJlZHVjZShzY2hlbWEuaXRlbXMsIGZ1bmN0aW9uIChpdGVtcywgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0uZGVmYXVsdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICAgICAgICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBpdGVtcyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSByZXNldCB0aGUgcHJvY2Vzc2VkIHZhbHVlIHRvICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICBpZiAoXy5hbGwocHJvY2Vzc2VkVmFsdWUsIF8uaXNVbmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoc2NoZW1hLml0ZW1zKSAmJiAhXy5pc1VuZGVmaW5lZChzY2hlbWEuaXRlbXMuZGVmYXVsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkVmFsdWUgPSBbc2NoZW1hLml0ZW1zLmRlZmF1bHRdO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICAgICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJhbWV0ZXJWYWx1ZTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc3dheTpwYXJhbWV0ZXInKTtcbnZhciBPcGVyYXRpb24gPSByZXF1aXJlKCcuL29wZXJhdGlvbicpO1xudmFyIFBhcmFtZXRlclZhbHVlID0gcmVxdWlyZSgnLi9wYXJhbWV0ZXItdmFsdWUnKTtcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xuXG4vKipcbiAqIFRoZSBTd2FnZ2VyIFBhcmFtZXRlciBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPcGVyYXRpb258UGF0aH0gb3BPclBhdGggLSBUaGUgT3BlcmF0aW9uIG9yIFBhdGggb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHRyIC0gVGhlIEpTT04gUG9pbnRlciB0byB0aGUgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBwYXJhbWV0ZXIgZGVmaW5pdGlvblxuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSAtIFRoZSBKU09OIFNjaGVtYSBmb3IgdGhlIHBhcmFtZXRlclxuICpcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge09wZXJhdGlvbn0gb3BlcmF0aW9uT2JqZWN0IC0gVGhlIE9wZXJhdGlvbiBvYmplY3QgKENhbiBiZSB1bmRlZmluZWQgZm9yIHBhdGgtbGV2ZWwgcGFyYW1ldGVycylcbiAqIEBwcm9wZXJ0eSB7UGF0aH0gcGF0aE9iamVjdCAtIFRoZSBQYXRoIG9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHB0ciAtIFRoZSBKU09OIFBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge29iamVjdH0gc2NoZW1hIC0gVGhlIEpTT04gU2NoZW1hIGZvciB0aGUgcGFyYW1ldGVyXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFBhcmFtZXRlciAob3BPclBhdGgsIHB0ciwgZGVmaW5pdGlvbiwgc2NoZW1hKSB7XG4gIHRoaXMuY29tcHV0ZWRTY2hlbWEgPSBzY2hlbWE7XG4gIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG4gIHRoaXMucHRyID0gcHRyO1xuXG4gIGlmIChvcE9yUGF0aCBpbnN0YW5jZW9mIE9wZXJhdGlvbikge1xuICAgIHRoaXMub3BlcmF0aW9uT2JqZWN0ID0gb3BPclBhdGg7XG4gICAgdGhpcy5wYXRoT2JqZWN0ID0gb3BPclBhdGgucGF0aE9iamVjdDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wZXJhdGlvbk9iamVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhdGhPYmplY3QgPSBvcE9yUGF0aDtcbiAgfVxuXG4gIC8vIEFzc2lnbiBTd2FnZ2VyIGRlZmluaXRpb24gcHJvcGVydGllcyB0byB0aGUgcGFyYW1ldGVyIGZvciBlYXN5IGFjY2Vzc1xuICBfLmFzc2lnbih0aGlzLCBkZWZpbml0aW9uKTtcblxuICBkZWJ1ZygnRm91bmQgJXMgcGFyYW1ldGVyICglcyBpbiAlcykgYXQgJXMnLFxuICAgICAgICBfLmlzVW5kZWZpbmVkKHRoaXMub3BlcmF0aW9uT2JqZWN0KSA/ICdwYXRoLWxldmVsJyA6ICdvcGVyYXRpb24nLFxuICAgICAgICBkZWZpbml0aW9uLm5hbWUsXG4gICAgICAgIGRlZmluaXRpb24uaW4sXG4gICAgICAgIHB0cik7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29tcHV0ZWQgSlNPTiBTY2hlbWEgZm9yIHRoaXMgcGFyYW1ldGVyIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgSlNPTiBTY2hlbWFcbiAqL1xuUGFyYW1ldGVyLnByb3RvdHlwZS5nZXRTY2hlbWEgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNvbXB1dGVkU2NoZW1hO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc2FtcGxlIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyIGJhc2VkIG9uIGl0cyBzY2hlbWE7XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSBzYW1wbGUgdmFsdWVcbiAqL1xuUGFyYW1ldGVyLnByb3RvdHlwZS5nZXRTYW1wbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBhdGhPYmplY3QuYXBpLnBsdWdpbi5nZXRTYW1wbGUodGhpcy5jb21wdXRlZFNjaGVtYSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0LlxuICpcbiAqICoqTm90ZToqKiBCZWxvdyBpcyB0aGUgbGlzdCBvZiBgcmVxYCBwcm9wZXJ0aWVzIHVzZWQgKihyZXEgc2hvdWxkIGJlIGFuIGBodHRwLkNsaWVudFJlcXVlc3RgIG9yIGVxdWl2YWxlbnQpKjpcbiAqXG4gKiAgICogYGJvZHlgOiBVc2VkIGZvciBgYm9keWAgYW5kIGBmb3JtRGF0YWAgcGFyYW1ldGVyc1xuICogICAqIGBmaWxlc2A6IFVzZWQgZm9yIGBmb3JtRGF0YWAgcGFyYW1ldGVycyB3aG9zZSBgdHlwZWAgaXMgYGZpbGVgXG4gKiAgICogYGhlYWRlcnNgOiBVc2VkIGZvciBgaGVhZGVyYCBwYXJhbWV0ZXJzXG4gKiAgICogYHF1ZXJ5YDogVXNlZCBmb3IgYHF1ZXJ5YCBwYXJhbWV0ZXJzXG4gKiAgICogYHVybGA6IHVzZWQgZm9yIGBwYXRoYCBwYXJhbWV0ZXJzXG4gKlxuICogRm9yIGBwYXRoYCBwYXJhbWV0ZXJzLCB3ZSB3aWxsIHVzZSB0aGUgb3BlcmF0aW9uJ3MgYHJlZ2V4cGAgcHJvcGVydHkgdG8gcGFyc2Ugb3V0IHBhdGggcGFyYW1ldGVycyB1c2luZyB0aGUgYHVybGBcbiAqIHByb3BlcnR5LlxuICpcbiAqICooU2VlOiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9jbGFzc19odHRwX2NsaWVudHJlcXVlc3R9KSpcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVxIC0gVGhlIGh0dHAgY2xpZW50IHJlcXVlc3QgKihvciBlcXVpdmFsZW50KSpcbiAqXG4gKiBAcmV0dXJucyB7UGFyYW1ldGVyVmFsdWV9IFRoZSBwYXJhbWV0ZXIgdmFsdWUgb2JqZWN0XG4gKlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBgaW5gIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIncyBzY2hlbWEgaXMgbm90IHZhbGlkIG9yIGlmIHRoZSBgcmVxYCBwcm9wZXJ0eSB0byByZXRyaWV2ZSB0aGVcbiAqICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgaXMgbWlzc2luZy5cbiAqL1xuUGFyYW1ldGVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChyZXEpIHtcbiAgdmFyIGFwaSA9ICh0aGlzLm9wZXJhdGlvbk9iamVjdCB8fCB0aGlzLnBhdGhPYmplY3QpLmFwaTtcblxuICBpZiAoXy5pc1VuZGVmaW5lZChyZXEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVxIGlzIHJlcXVpcmVkJyk7XG4gIH0gZWxzZSBpZiAoYXBpLnBsdWdpbi5wYXJhbWV0ZXJMb2NhdGlvbnMuaW5kZXhPZih0aGlzLmluKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgXFwnaW5cXCcgdmFsdWU6ICcgKyB0aGlzLmluKTtcbiAgfVxuXG4gIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgdGhlIHR5cGUgb2YgcmVxXG5cbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIgdHlwZSA9IHRoaXMuY29tcHV0ZWRTY2hlbWEudHlwZSB8fCAnb2JqZWN0JztcbiAgdmFyIHBhdGhNYXRjaDtcbiAgdmFyIHZhbHVlO1xuXG4gIHN3aXRjaCAodGhpcy5pbikge1xuICBjYXNlICdib2R5JzpcbiAgICB2YWx1ZSA9IHJlcS5ib2R5O1xuICAgIGJyZWFrO1xuICBjYXNlICdmb3JtRGF0YSc6XG4gICAgLy8gRm9yIGZvcm1EYXRhLCBlaXRoZXIgdGhlIHZhbHVlIGlzIGEgZmlsZSBvciBhIHByb3BlcnR5IG9mIHJlcS5ib2R5LiAgcmVxLmJvZHkgYXMgYSB3aG9sZSBjYW4gbmV2ZXIgYmUgdGhlXG4gICAgLy8gdmFsdWUgc2luY2UgdGhlIEpTT04gU2NoZW1hIGZvciBmb3JtRGF0YSBwYXJhbWV0ZXJzIGRvZXMgbm90IGFsbG93IGEgdHlwZSBvZiAnb2JqZWN0Jy5cbiAgICBpZiAodHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXEuZmlsZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVxLmZpbGVzIG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ2Zvcm1EYXRhXFwnIHBhcmFtZXRlcnMgb2YgdHlwZSBcXCdmaWxlXFwnJyk7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gcmVxLmZpbGVzW3RoaXMubmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcS5ib2R5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS5ib2R5IG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ2Zvcm1EYXRhXFwnIHBhcmFtZXRlcnMnKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gcmVxLmJvZHlbdGhpcy5uYW1lXTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgJ2hlYWRlcic6XG4gICAgaWYgKF8uaXNVbmRlZmluZWQocmVxLmhlYWRlcnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS5oZWFkZXJzIG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ2hlYWRlclxcJyBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgdmFsdWUgPSByZXEuaGVhZGVyc1t0aGlzLm5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgYnJlYWs7XG4gIGNhc2UgJ3BhdGgnOlxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcS51cmwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS51cmwgbXVzdCBiZSBwcm92aWRlZCBmb3IgXFwncGF0aFxcJyBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgLy8gU2luY2Ugd2UgZ2V0IHRoZSByYXcgcGF0aCBwYXJhbWV0ZXIgdmFsdWUsIHdlIG5lZWQgdG8gVVJJIGRlY29kZSBpdFxuICAgIHBhdGhNYXRjaCA9IHRoaXMucGF0aE9iamVjdC5yZWdleHAuZXhlYyhwYXJzZVVybChkZWNvZGVVUklDb21wb25lbnQocmVxLnVybCkpLnBhdGhuYW1lKTtcblxuICAgIGlmIChwYXRoTWF0Y2gpIHtcbiAgICAgIHZhbHVlID0gcGF0aE1hdGNoW18uZmluZEluZGV4KHRoaXMucGF0aE9iamVjdC5yZWdleHAua2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5Lm5hbWUgPT09IHRoYXQubmFtZTtcbiAgICAgIH0pICsgMV07XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlICdxdWVyeSc6XG4gICAgaWYgKF8uaXNVbmRlZmluZWQocmVxLnF1ZXJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXEucXVlcnkgbXVzdCBiZSBwcm92aWRlZCBmb3IgXFwncXVlcnlcXCcgcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIHZhbHVlID0gXy5nZXQocmVxLnF1ZXJ5LCB0aGlzLm5hbWUpO1xuXG4gICAgYnJlYWs7XG5cbiAgICAvLyBubyBkZWZhdWx0XG4gIH1cblxuICByZXR1cm4gbmV3IFBhcmFtZXRlclZhbHVlKHRoaXMsIHZhbHVlKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyYW1ldGVyO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snXyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnXyddIDogbnVsbCk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzd2F5OnBhdGgnKTtcblxuLyoqXG4gKiBUaGUgUGF0aCBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXIgQVBJIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBzdHJpbmdcbiAqIEBwYXJhbSB7cHRyfSBwdHIgLSBUaGUgSlNPTiBQb2ludGVyIHRvIHRoZSBwYXRoXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBwYXRoIGRlZmluaXRpb25cbiAqIEBwYXJhbSB7cmVnZXhwfSByZWdleHAgLSBUaGUgcmVnZXhwIHVzZWQgdG8gbWF0Y2ggcmVxdWVzdCBwYXRocyBhZ2FpbnN0IHRoaXMgcGF0aFxuICpcbiAqIEBwcm9wZXJ0eSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXIgQVBJIG9iamVjdFxuICogQHByb3BlcnR5IHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgcGF0aCBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge09wZXJhdGlvbltdfSBvcGVyYXRpb25PYmplY3RzIC0gVGhlIG9wZXJhdGlvbiBvYmplY3RzXG4gKiBAcHJvcGVydHkge1BhcmFtZXRlcltdfSBwYXJhbWV0ZXJPYmplY3RzIC0gVGhlIHBhdGgtbGV2ZWwgcGFyYW1ldGVyIG9iamVjdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggc3RyaW5nXG4gKiBAcHJvcGVydHkge3B0cn0gcHRyIC0gVGhlIEpTT04gUG9pbnRlciB0byB0aGUgcGF0aFxuICogQHByb3BlcnR5IHtyZWdleHB9IHJlZ2V4cCAtIFRoZSByZWdleHAgdXNlZCB0byBtYXRjaCByZXF1ZXN0IHBhdGhzIGFnYWluc3QgdGhpcyBwYXRoXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFBhdGggKGFwaSwgcGF0aCwgcHRyLCBkZWZpbml0aW9uLCByZWdleHApIHtcbiAgdGhpcy5hcGkgPSBhcGk7XG4gIHRoaXMucGF0aCA9IHBhdGg7XG4gIHRoaXMucHRyID0gcHRyO1xuICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICB0aGlzLnJlZ2V4cCA9IHJlZ2V4cDtcblxuICAvLyBBc3NpZ24gU3dhZ2dlciBkZWZpbml0aW9uIHByb3BlcnRpZXMgdG8gdGhlIG9wZXJhdGlvbiBmb3IgZWFzeSBhY2Nlc3NcbiAgXy5hc3NpZ24odGhpcywgZGVmaW5pdGlvbik7XG5cbiAgZGVidWcoJ0ZvdW5kIHBhdGggYXQgJXMnLCBwdHIpO1xuXG4gIHRoaXMucGFyYW1ldGVyT2JqZWN0cyA9IGFwaS5wbHVnaW4uZ2V0UGF0aFBhcmFtZXRlcnModGhpcyk7XG4gIHRoaXMub3BlcmF0aW9uT2JqZWN0cyA9IGFwaS5wbHVnaW4uZ2V0T3BlcmF0aW9ucyh0aGlzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG9wZXJhdGlvbiBmb3IgdGhpcyBwYXRoIGFuZCBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCAtIFRoZSBtZXRob2RcbiAqXG4gKiBAcmV0dXJucyB7T3BlcmF0aW9uW119IFRoZSBPcGVyYXRpb24gb2JqZWN0cyBmb3IgdGhpcyBwYXRoIGFuZCBtZXRob2Qgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIG9wZXJhdGlvbiBmb3IgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIG1ldGhvZC5cbiAqL1xuUGF0aC5wcm90b3R5cGUuZ2V0T3BlcmF0aW9uID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICByZXR1cm4gXy5maW5kKHRoaXMub3BlcmF0aW9uT2JqZWN0cywgZnVuY3Rpb24gKG9wZXJhdGlvbk9iamVjdCkge1xuICAgIHJldHVybiBvcGVyYXRpb25PYmplY3QubWV0aG9kID09PSBtZXRob2Q7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG9wZXJhdGlvbnMgZm9yIHRoaXMgcGF0aC5cbiAqXG4gKiBAcmV0dXJucyB7T3BlcmF0aW9uW119IFRoZSBPcGVyYXRpb24gb2JqZWN0cyBmb3IgdGhpcyBwYXRoLlxuICovXG5QYXRoLnByb3RvdHlwZS5nZXRPcGVyYXRpb25zID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5vcGVyYXRpb25PYmplY3RzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG9wZXJhdGlvbnMgZm9yIHRoaXMgcGF0aCBhbmQgdGFnLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgLSBUaGUgdGFnXG4gKlxuICogQHJldHVybnMge09wZXJhdGlvbltdfSBUaGUgT3BlcmF0aW9uIG9iamVjdHMgZm9yIHRoaXMgcGF0aCBhbmQgdGFnXG4gKi9cblBhdGgucHJvdG90eXBlLmdldE9wZXJhdGlvbnNCeVRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgcmV0dXJuIF8uZmlsdGVyKHRoaXMub3BlcmF0aW9uT2JqZWN0cywgZnVuY3Rpb24gKG9wZXJhdGlvbk9iamVjdCkge1xuICAgIHJldHVybiBfLmNvbnRhaW5zKG9wZXJhdGlvbk9iamVjdC50YWdzLCB0YWcpO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGlzIHBhdGguXG4gKlxuICogQHJldHVybnMge1BhcmFtZXRlcltdfSBUaGUgUGFyYW1ldGVyIG9iamVjdHMgZm9yIHRoaXMgcGF0aC5cbiAqL1xuUGF0aC5wcm90b3R5cGUuZ2V0UGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGFyYW1ldGVyT2JqZWN0cztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUGF0aDtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc3dheTpyZXNwb25zZScpO1xudmFyIHNIZWxwZXJzID0gcmVxdWlyZSgnLi4vaGVscGVycycpO1xudmFyIFlBTUwgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snanN5YW1sJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydqc3lhbWwnXSA6IG51bGwpO1xuXG52YXIganNvblZhbGlkYXRvcjtcblxuLyoqXG4gKiBUaGUgU3dhZ2dlciBSZXNwb25zZSBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogKipFeHRyYSBQcm9wZXJ0aWVzOioqIE90aGVyIHRoYW4gdGhlIGRvY3VtZW50ZWQgcHJvcGVydGllcywgdGhpcyBvYmplY3QgYWxzbyBleHBvc2VzIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBkZWZpbml0aW9uXG4gKiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPcGVyYXRpb259IG9wZXJhdGlvbiAtIFRoZSBPcGVyYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHRyIC0gVGhlIEpTT04gUG9pbnRlciB0byB0aGUgcmVzcG9uc2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzQ29kZSAtIFRoZSBzdGF0dXMgY29kZVxuICpcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHJlc3BvbnNlIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7T3BlcmF0aW9ufSBvcGVyYXRpb25PYmplY3QgLSBUaGUgT3BlcmF0aW9uIG9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHB0ciAtIFRoZSBKU09OIFBvaW50ZXIgdG8gdGhlIHJlc3BvbnNlIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGF0dXNDb2RlIC0gVGhlIHN0YXR1cyBjb2RlXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFJlc3BvbnNlIChvcGVyYXRpb24sIHB0ciwgZGVmaW5pdGlvbiwgc3RhdHVzQ29kZSkge1xuICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICB0aGlzLm9wZXJhdGlvbk9iamVjdCA9IG9wZXJhdGlvbjtcbiAgdGhpcy5wdHIgPSBwdHI7XG4gIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG5cbiAgLy8gQXNzaWduIFN3YWdnZXIgZGVmaW5pdGlvbiBwcm9wZXJ0aWVzIHRvIHRoZSBwYXJhbWV0ZXIgZm9yIGVhc3kgYWNjZXNzXG4gIF8uYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuXG4gIGRlYnVnKCdGb3VuZCAlcyByZXNwb25zZSBhdCAlcycsIHN0YXR1c0NvZGUsIHB0cik7XG5cbiAganNvblZhbGlkYXRvciA9IG9wZXJhdGlvbi5hcGkucGx1Z2luLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSByZXNwb25zZSBleGFtcGxlIGZvciB0aGUgbWltZS10eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWltZVR5cGVdIC0gVGhlIG1pbWUgdHlwZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByZXNwb25zZSBleGFtcGxlIGFzIGEgc3RyaW5nIG9yIGB1bmRlZmluZWRgIGlmIHRoZSByZXNwb25zZSBjb2RlIGFuZC9vciBtaW1lLXR5cGUgaXMgbWlzc2luZ1xuICovXG5SZXNwb25zZS5wcm90b3R5cGUuZ2V0RXhhbXBsZSA9IGZ1bmN0aW9uIChtaW1lVHlwZSkge1xuICB2YXIgZXhhbXBsZTtcblxuICBpZiAoXy5pc1BsYWluT2JqZWN0KHRoaXMuZGVmaW5pdGlvbi5leGFtcGxlcykpIHtcbiAgICBleGFtcGxlID0gdGhpcy5kZWZpbml0aW9uLmV4YW1wbGVzW21pbWVUeXBlXTtcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZChleGFtcGxlKSAmJiAhXy5pc1N0cmluZyhleGFtcGxlKSkge1xuICAgIGlmIChtaW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICBleGFtcGxlID0gSlNPTi5zdHJpbmdpZnkoZXhhbXBsZSwgbnVsbCwgMik7XG4gICAgfSBlbHNlIGlmIChtaW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gteWFtbCcpIHtcbiAgICAgIGV4YW1wbGUgPSBZQU1MLnNhZmVEdW1wKGV4YW1wbGUsIHtpbmRlbnQ6IDJ9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhhbXBsZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHNhbXBsZSB2YWx1ZS5cbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHNhbXBsZSB2YWx1ZSBmb3IgdGhlIHJlc3BvbnNlLCB3aGljaCBjYW4gYmUgdW5kZWZpbmVkIGlmIHRoZSByZXNwb25zZSBzY2hlbWEgaXMgbm90IHByb3ZpZGVkXG4gKi9cblJlc3BvbnNlLnByb3RvdHlwZS5nZXRTYW1wbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzYW1wbGU7XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZGVmaW5pdGlvbi5zY2hlbWEpKSB7XG4gICAgc2FtcGxlID0gdGhpcy5vcGVyYXRpb25PYmplY3QuYXBpLnBsdWdpbi5nZXRTYW1wbGUodGhpcy5kZWZpbml0aW9uLnNjaGVtYSk7XG4gIH1cblxuICByZXR1cm4gc2FtcGxlO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7U2VydmVyUmVzcG9uc2VXcmFwcGVyfSByZXMgLSBUaGUgcmVzcG9uc2Ugb3IgcmVzcG9uc2UgbGlrZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7VmFsaWRhdGlvblJlc3VsdHN9IFRoZSB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuUmVzcG9uc2UucHJvdG90eXBlLnZhbGlkYXRlUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzKSB7XG4gIHZhciByZXN1bHRzID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGJvZHlWYWx1ZTtcbiAgdmFyIGJ2UmVzdWx0cztcblxuICAvLyBTZXQgc29tZSBkZWZhdWx0IGp1c3QgaW4gY2FzZVxuICBpZiAoXy5pc1VuZGVmaW5lZChyZXMpKSB7XG4gICAgcmVzID0ge307XG4gIH1cblxuICBpZiAoXy5pc1VuZGVmaW5lZChyZXMuaGVhZGVycykpIHtcbiAgICByZXMuaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgdGhlIENvbnRlbnQtVHlwZSBleGNlcHQgZm9yIHZvaWQgcmVzcG9uc2VzLCAyMDQgcmVzcG9uc2VzIGFuZCAzMDQgcmVzcG9uc2VzIGFzIHRoZXkgaGF2ZSBubyBib2R5XG4gIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmRlZmluaXRpb24uc2NoZW1hKSAmJiBfLmluZGV4T2YoWycyMDQnLCAnMzA0J10sIHRoaXMuc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgc0hlbHBlcnMudmFsaWRhdGVDb250ZW50VHlwZShyZXMuaGVhZGVyc1snY29udGVudC10eXBlJ10sIHRoaXMub3BlcmF0aW9uT2JqZWN0LnByb2R1Y2VzLCByZXN1bHRzKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHRoZSByZXNwb25zZSBoZWFkZXJzXG4gIF8uZm9yRWFjaCh0aGlzLmhlYWRlcnMsIGZ1bmN0aW9uIChzY2hlbWEsIG5hbWUpIHtcbiAgICB2YXIgaGVhZGVyVmFsdWU7XG4gICAgdmFyIGh2UmVzdWx0cztcblxuICAgIHRyeSB7XG4gICAgICBoZWFkZXJWYWx1ZSA9IHRoYXQub3BlcmF0aW9uT2JqZWN0LmFwaS5wbHVnaW4uY29udmVydFZhbHVlKHNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IHNjaGVtYS5jb2xsZWN0aW9uRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJseSBjYXV0aW91c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuaGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmhlYWRlcnNbbmFtZV0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZGVmYXVsdCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXN1bHRzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRV9IRUFERVInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yczogZXJyLmVycm9ycyB8fCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGVyci5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZXJyLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGhlYWRlciAoJyArIG5hbWUgKyAnKTogJyArIGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZXJyLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRHVlIHRvIGFtYmlndWl0eSBpbiB0aGUgU3dhZ2dlciAyLjAgU3BlY2lmaWNhdGlvbiAoaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItc3BlYy9pc3N1ZXMvMzIxKSwgaXRcbiAgICAvLyBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEgdG8gZG8gcmVxdWlyZWRuZXNzIGNoZWNrcyBmb3IgcmVzcG9uc2UgaGVhZGVycy4gIFRoaXMgbWVhbnMgd2Ugd2lsbCB2YWxpZGF0ZVxuICAgIC8vIGV4aXN0aW5nIGhlYWRlcnMgYnV0IHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIGEgaGVhZGVyIGlzIGRlZmluZWQgaW4gYSByZXNwb25zZSBzY2hlbWEgYnV0IG5vdCBpbiB0aGUgcmVzcG9uc2UuXG4gICAgLy9cbiAgICAvLyBXZSBhbHNvIGRvIG5vdCB3YW50IHRvIHZhbGlkYXRlIGRhdGUgb2JqZWN0cyBiZWNhdXNlIGl0IGlzIHJlZHVuZGFudC4gIElmIHdlIGhhdmUgYWxyZWFkeSBjb252ZXJ0ZWQgdGhlIHZhbHVlXG4gICAgLy8gZnJvbSBhIHN0cmluZytmb3JtYXQgdG8gYSBkYXRlLCB3ZSBrbm93IGl0IHBhc3NlcyBzY2hlbWEgdmFsaWRhdGlvbi5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQoaGVhZGVyVmFsdWUpICYmICFfLmlzRGF0ZShoZWFkZXJWYWx1ZSkpIHtcbiAgICAgIGh2UmVzdWx0cyA9IHNIZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShqc29uVmFsaWRhdG9yLCBzY2hlbWEsIGhlYWRlclZhbHVlKTtcblxuICAgICAgaWYgKGh2UmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRV9IRUFERVInLFxuICAgICAgICAgIGVycm9yczogaHZSZXN1bHRzLmVycm9ycyxcbiAgICAgICAgICAvLyBSZXBvcnQgdGhlIGFjdHVhbCBlcnJvciBpZiB0aGVyZSBpcyBvbmx5IG9uZSBlcnJvci4gIE90aGVyd2lzZSwgcmVwb3J0IGEgSlNPTiBTY2hlbWFcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGVycm9yLlxuICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGhlYWRlciAoJyArIG5hbWUgKyAnKTogJyArIChodlJlc3VsdHMuZXJyb3JzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmFsdWUgZmFpbGVkIEpTT04gU2NoZW1hIHZhbGlkYXRpb24nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHZSZXN1bHRzLmVycm9yc1swXS5tZXNzYWdlKSxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHBhdGg6IFtdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gVmFsaWRhdGUgcmVzcG9uc2UgZm9yIG5vbi12b2lkIHJlc3BvbnNlc1xuICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5kZWZpbml0aW9uLnNjaGVtYSkgJiYgXy5pbmRleE9mKFsnMjA0JywgJzMwNCddLCB0aGlzLnN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHRyeSB7XG4gICAgICBib2R5VmFsdWUgPSB0aGF0Lm9wZXJhdGlvbk9iamVjdC5hcGkucGx1Z2luLmNvbnZlcnRWYWx1ZSh0aGlzLmRlZmluaXRpb24uc2NoZW1hLCB7XG4gICAgICAgIGVuY29kaW5nOiByZXMuZW5jb2RpbmdcbiAgICAgIH0sIHJlcy5ib2R5KTtcbiAgICAgIGJ2UmVzdWx0cyA9IHNIZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShqc29uVmFsaWRhdG9yLCB0aGlzLmRlZmluaXRpb24uc2NoZW1hLCBib2R5VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYnZSZXN1bHRzID0ge1xuICAgICAgICBlcnJvcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgcGF0aDogZXJyLnBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGJ2UmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFX0JPRFknLFxuICAgICAgICBlcnJvcnM6IGJ2UmVzdWx0cy5lcnJvcnMsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGJvZHk6ICcgKyAoYnZSZXN1bHRzLmVycm9ycy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmFsdWUgZmFpbGVkIEpTT04gU2NoZW1hIHZhbGlkYXRpb24nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidlJlc3VsdHMuZXJyb3JzWzBdLm1lc3NhZ2UpLFxuICAgICAgICBwYXRoOiBbXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc3BvbnNlO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snXyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnXyddIDogbnVsbCk7XG52YXIgQmFzZTY0ID0gcmVxdWlyZSgnanMtYmFzZTY0JykuQmFzZTY0O1xudmFyIHN0cmluZ01vY2tlciA9IHJlcXVpcmUoJ2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9zdHJpbmcnKTtcblxuLyoqXG4gKiBXZSBoYXZlIHRvIGZpbHRlciB0aGUgc2NoZW1hIHRvIGF2b2lkIGEgbWF4aW11bSBjYWxsc3RhY2sgaXNzdWUgYnkgZGVsZXRpbmcgdGhlIGZvcm1hdCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hIC0gVGhlIEpTT04gU2NoZW1hIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBmaWx0ZXJlZCBzY2hlbWFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU2NoZW1hIChzY2hlbWEpIHtcbiAgdmFyIGNTY2hlbWEgPSBfLmNsb25lRGVlcChzY2hlbWEpO1xuXG4gIGRlbGV0ZSBjU2NoZW1hLmZvcm1hdDtcblxuICByZXR1cm4gY1NjaGVtYTtcbn1cblxuLy8gQnVpbGQgdGhlIGxpc3Qgb2YgY3VzdG9tIEpTT04gU2NoZW1hIGdlbmVyYXRvciBmb3JtYXRzXG5tb2R1bGUuZXhwb3J0cy5ieXRlID0gZnVuY3Rpb24gKGdlbiwgc2NoZW1hKSB7XG4gIHJldHVybiBCYXNlNjQuZW5jb2RlKHN0cmluZ01vY2tlcihmaWx0ZXJTY2hlbWEoc2NoZW1hKSkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMucGFzc3dvcmQgPSBmdW5jdGlvbiAoZ2VuLCBzY2hlbWEpIHtcbiAgcmV0dXJuIHN0cmluZ01vY2tlcihmaWx0ZXJTY2hlbWEoc2NoZW1hKSk7XG59O1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snXyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnXyddIDogbnVsbCk7XG5cbmZ1bmN0aW9uIHJldHVyblRydWUgKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMuaW50MzIgPSBtb2R1bGUuZXhwb3J0cy5pbnQ2NCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgLy8gei1zY2hlbWEgc2VlbXMgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGUgZm9ybWF0IGV2ZW4gd2hlbiB0aGUgdHlwZSBpcyBrbm93biB0byBiZSBpbnZhbGlkIHNvIHdlIG11c3QgZG8gYSB0eXBlXG4gIC8vIGNoZWNrIHByaW9yIHRvIHZhbGlkYXRpbmcgdGhpcyBmb3JtYXQuXG4gIHJldHVybiBfLmlzTnVtYmVyKHZhbCkgJiYgdmFsICUgMSA9PT0gMDtcbn07XG5cbi8vIFRoZXNlIGZvcm1hdCB2YWxpZGF0b3JzIHdpbGwgYWx3YXlzIHJldHVybiAndHJ1ZScgYmVjYXVzZSB0aGV5IGFyZSBhbHJlYWR5IHR5cGUgdmFsaWQgYW5kIHRoZXJlIGFyZSBubyBjb25zdHJhaW50c1xuLy8gb24gdGhlIGZvcm1hdCB0aGF0IHdvdWxkIHByb2R1Y2UgYW4gaW52YWxpZCB2YWx1ZS5cbm1vZHVsZS5leHBvcnRzLmJ5dGUgPSByZXR1cm5UcnVlO1xubW9kdWxlLmV4cG9ydHMuZG91YmxlID0gcmV0dXJuVHJ1ZTtcbm1vZHVsZS5leHBvcnRzLmZsb2F0ID0gcmV0dXJuVHJ1ZTtcbm1vZHVsZS5leHBvcnRzLnBhc3N3b3JkID0gcmV0dXJuVHJ1ZTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2Jsb2IvbWFzdGVyL3ZlcnNpb25zLzIuMC5tZCNwYXJhbWV0ZXItb2JqZWN0XG52YXIgcGFyYW1ldGVyU2NoZW1hUHJvcGVydGllcyA9IFtcbiAgJ2FsbG93RW1wdHlWYWx1ZScsXG4gICdkZWZhdWx0JyxcbiAgJ2Rlc2NyaXB0aW9uJyxcbiAgJ2VudW0nLFxuICAnZXhjbHVzaXZlTWF4aW11bScsXG4gICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgJ2Zvcm1hdCcsXG4gICdpdGVtcycsXG4gICdtYXhJdGVtcycsXG4gICdtYXhMZW5ndGgnLFxuICAnbWF4aW11bScsXG4gICdtaW5JdGVtcycsXG4gICdtaW5MZW5ndGgnLFxuICAnbWluaW11bScsXG4gICdtdWx0aXBsZU9mJyxcbiAgJ3BhdHRlcm4nLFxuICAndHlwZScsXG4gICd1bmlxdWVJdGVtcydcbl07XG5cbm1vZHVsZS5leHBvcnRzLmdldFBhcmFtZXRlclNjaGVtYSA9IGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcbiAgdmFyIHNjaGVtYTtcblxuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbWV0ZXIuc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHt9O1xuXG4gICAgLy8gQnVpbGQgdGhlIHNjaGVtYSBmcm9tIHRoZSBzY2hlbWEtbGlrZSBwYXJhbWV0ZXIgc3RydWN0dXJlXG4gICAgXy5mb3JFYWNoKHBhcmFtZXRlclNjaGVtYVByb3BlcnRpZXMsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1ldGVyW25hbWVdKSkge1xuICAgICAgICBzY2hlbWFbbmFtZV0gPSBwYXJhbWV0ZXJbbmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2NoZW1hID0gcGFyYW1ldGVyLnNjaGVtYTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWE7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5zdXBwb3J0ZWRIdHRwTWV0aG9kcyA9IFsnZ2V0JywgJ3B1dCcsICdwb3N0JywgJ2RlbGV0ZScsICdvcHRpb25zJywgJ2hlYWQnLCAncGF0Y2gnXTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xudmFyIGRpcm5hbWUgPSByZXF1aXJlKCdwYXRoJykuZGlybmFtZTtcbnZhciBmb3JtYXRHZW5lcmF0b3JzID0gcmVxdWlyZSgnLi9mb3JtYXQtZ2VuZXJhdG9ycycpO1xudmFyIGhlbHBlcnMgPSByZXF1aXJlKCcuLi8uLi9oZWxwZXJzJyk7XG52YXIgSnNvblJlZnMgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snSnNvblJlZnMnXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ0pzb25SZWZzJ10gOiBudWxsKTtcbnZhciBPcGVyYXRpb24gPSByZXF1aXJlKCcuLi8uLi90eXBlcy9vcGVyYXRpb24nKTtcbnZhciBQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi8uLi90eXBlcy9wYXJhbWV0ZXInKTtcbnZhciBQYXRoID0gcmVxdWlyZSgnLi4vLi4vdHlwZXMvcGF0aCcpO1xudmFyIHBhdGhUb1JlZ2V4cCA9IHJlcXVpcmUoJ3BhdGgtdG8tcmVnZXhwJyk7XG52YXIgUmVzcG9uc2UgPSByZXF1aXJlKCcuLi8uLi90eXBlcy9yZXNwb25zZScpO1xudmFyIFN3YWdnZXJBcGkgPSByZXF1aXJlKCcuLi8uLi90eXBlcy9hcGknKTtcbnZhciB2YWxpZGF0b3JzID0gcmVxdWlyZSgnLi92YWxpZGF0b3JzJyk7XG52YXIgdkhlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcbnZhciBZQU1MID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ2pzeWFtbCddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnanN5YW1sJ10gOiBudWxsKTtcblxudmFyIGNvbGxlY3Rpb25Gb3JtYXRzID0gW3VuZGVmaW5lZCwgJ2NzdicsICdtdWx0aScsICdwaXBlcycsICdzc3YnLCAndHN2J107XG52YXIgY3VzdG9tRm9ybWF0VmFsaWRhdG9ycyA9IHJlcXVpcmUoJy4vZm9ybWF0LXZhbGlkYXRvcnMnKTtcbnZhciBkb2NzVXJsID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXNwZWMvYmxvYi9tYXN0ZXIvdmVyc2lvbnMvMi4wLm1kJztcbnZhciBqc29uU2NoZW1hVmFsaWRhdG9yID0gaGVscGVycy5jcmVhdGVKU09OVmFsaWRhdG9yKHtcbiAgZm9ybWF0VmFsaWRhdG9yczogY3VzdG9tRm9ybWF0VmFsaWRhdG9yc1xufSk7XG52YXIgbW9ja2VyID0gaGVscGVycy5jcmVhdGVKU09OU2NoZW1hTW9ja2VyKHtcbiAgZm9ybWF0R2VuZXJhdG9yczogZm9ybWF0R2VuZXJhdG9yc1xufSk7XG52YXIgcGFyYW1ldGVyTG9jYXRpb25zID0gWydib2R5JywgJ2Zvcm1EYXRhJywgJ2hlYWRlcicsICdwYXRoJywgJ3F1ZXJ5J107XG52YXIgdHlwZXMgPSBbJ2FycmF5JywgJ2Jvb2xlYW4nLCAnaW50ZWdlcicsICdvYmplY3QnLCAnbnVtYmVyJywgJ3N0cmluZyddO1xudmFyIHZlcnNpb24gPSAnMi4wJztcblxuZnVuY3Rpb24gcmVhbENvbnZlcnRWYWx1ZSAoc2NoZW1hLCBvcHRpb25zLCB2YWx1ZSkge1xuICB2YXIgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlOyAvLyBVc2VkIGluIGVycm9yIHJlcG9ydGluZyBmb3IgaW52YWxpZCB2YWx1ZXNcbiAgdmFyIHR5cGUgPSBfLmlzUGxhaW5PYmplY3Qoc2NoZW1hKSA/IHNjaGVtYS50eXBlIDogdW5kZWZpbmVkO1xuICB2YXIgcFZhbHVlID0gdmFsdWU7XG4gIHZhciBwVHlwZSA9IHR5cGVvZiBwVmFsdWU7XG4gIHZhciBlcnI7XG5cbiAgLy8gSWYgdGhlcmUgaXMgYW4gZXhwbGljaXQgdHlwZSBwcm92aWRlZCwgbWFrZSBzdXJlIGl0J3Mgb25lIG9mIHRoZSBzdXBwb3J0ZWQgb25lc1xuICBpZiAoXy5oYXMoc2NoZW1hLCAndHlwZScpICYmIHR5cGVzLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBcXCd0eXBlXFwnIHZhbHVlOiAnICsgdHlwZSk7XG4gIH1cblxuICAvLyBTaW5jZSBKU09OIFNjaGVtYSBhbGxvd3MgeW91IHRvIG5vdCBzcGVjaWZ5IGEgdHlwZSBhbmQgaXQgaXMgdHJlYXRlZCBhcyBhIHdpbGRjYXJkIG9mIHNvcnRzLCB3ZSBzaG91bGQgbm90IGRvIGFueVxuICAvLyBjb2VyY2lvbiBmb3IgdGhlc2UgdHlwZXMgb2YgdmFsdWVzLlxuICBpZiAoXy5pc1VuZGVmaW5lZCh0eXBlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHZhbHVlLCBkbyBub3QgY29udmVydCBpdFxuICBpZiAoXy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvLyBDb252ZXJ0IEJ1ZmZlciB2YWx1ZSB0byBTdHJpbmdcbiAgLy8gKFdlIHVzZSB0aGlzIHR5cGUgb2YgY2hlY2sgdG8gaWRlbnRpZnkgQnVmZmVyIG9iamVjdHMuICBUaGUgYnJvd3NlciBkb2VzIG5vdCBoYXZlIGEgQnVmZmVyIHR5cGUgYW5kIHRvIGF2b2lkIGhhdmluZ1xuICAvLyAgaW1wb3J0IHRoZSBicm93c2VyaWZ5IGJ1ZmZlciBtb2R1bGUsIHdlIGp1c3QgZG8gYSBzaW1wbGUgY2hlY2suICBUaGlzIGlzIGJyaXR0bGUgYnV0IHNob3VsZCB3b3JrLilcbiAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZS5yZWFkVUludDgpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZyhvcHRpb25zLmVuY29kaW5nKTtcbiAgICBwVmFsdWUgPSB2YWx1ZTtcbiAgICBwVHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBlbXB0eSBhbmQgZW1wdHkgaXMgYWxsb3dlZCwgdXNlIGl0XG4gIGlmIChzY2hlbWEuYWxsb3dFbXB0eVZhbHVlICYmIHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIEF0dGVtcHQgdG8gcGFyc2UgdGhlIHN0cmluZyBhcyBKU09OIGlmIHRoZSB0eXBlIGlzIGFycmF5IG9yIG9iamVjdFxuICBpZiAoWydhcnJheScsICdvYmplY3QnXS5pbmRleE9mKHR5cGUpID4gLTEpIHtcbiAgICB0cnkge1xuICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwganVzdCBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgY2FzZSAnYXJyYXknOlxuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgaWYgKGNvbGxlY3Rpb25Gb3JtYXRzLmluZGV4T2Yob3B0aW9ucy5jb2xsZWN0aW9uRm9ybWF0KSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBcXCdjb2xsZWN0aW9uRm9ybWF0XFwnIHZhbHVlOiAnICsgb3B0aW9ucy5jb2xsZWN0aW9uRm9ybWF0KTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChvcHRpb25zLmNvbGxlY3Rpb25Gb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2Nzdic6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ211bHRpJzpcbiAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BpcGVzJzpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnfCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Nzdic6XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0c3YnOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCdcXHQnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IF8ubWFwKHZhbHVlLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWxDb252ZXJ0VmFsdWUoXy5pc0FycmF5KHNjaGVtYS5pdGVtcykgPyBzY2hlbWEuaXRlbXNbaW5kZXhdIDogc2NoZW1hLml0ZW1zLCBvcHRpb25zLCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGJyZWFrO1xuICBjYXNlICdib29sZWFuJzpcbiAgICBpZiAoIV8uaXNCb29sZWFuKHZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyID0gbmV3IFR5cGVFcnJvcignTm90IGEgdmFsaWQgYm9vbGVhbjogJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBicmVhaztcbiAgY2FzZSAnaW50ZWdlcic6XG4gICAgaWYgKCFfLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcodmFsdWUpICYmIF8udHJpbSh2YWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhbHVlID0gTmFOO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cbiAgICAgIGlmIChfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdOb3QgYSB2YWxpZCBpbnRlZ2VyOiAnICsgb3JpZ2luYWxWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYnJlYWs7XG4gIGNhc2UgJ251bWJlcic6XG4gICAgaWYgKCFfLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcodmFsdWUpICYmIF8udHJpbSh2YWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhbHVlID0gTmFOO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cbiAgICAgIGlmIChfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdOb3QgYSB2YWxpZCBudW1iZXI6ICcgKyBvcmlnaW5hbFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgJ3N0cmluZyc6XG4gICAgaWYgKFsnZGF0ZScsICdkYXRlLXRpbWUnXS5pbmRleE9mKHNjaGVtYS5mb3JtYXQpID4gLTEpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfLmlzRGF0ZSh2YWx1ZSkgfHwgdmFsdWUudG9TdHJpbmcoKSA9PT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICAgICAgZXJyID0gbmV3IFR5cGVFcnJvcignTm90IGEgdmFsaWQgJyArIHNjaGVtYS5mb3JtYXQgKyAnIHN0cmluZzogJyArIG9yaWdpbmFsVmFsdWUpO1xuXG4gICAgICAgIGVyci5jb2RlID0gJ0lOVkFMSURfRk9STUFUJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgZXJyID0gbmV3IFR5cGVFcnJvcignTm90IGEgdmFsaWQgc3RyaW5nOiAnICsgdmFsdWUpO1xuICAgIH1cblxuICAgIGJyZWFrO1xuXG4gICAgLy8gbm8gZGVmYXVsdFxuICB9XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKGVycikpIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBlcnJvciB0byBiZSBtb3JlIGxpa2UgYSBKU09OIFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoZXJyLmNvZGUpKSB7XG4gICAgICBlcnIuY29kZSA9ICdJTlZBTElEX1RZUEUnO1xuICAgICAgZXJyLm1lc3NhZ2UgPSAnRXhwZWN0ZWQgdHlwZSAnICsgdHlwZSArICcgYnV0IGZvdW5kIHR5cGUgJyArIHBUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnIubWVzc2FnZSA9ICdPYmplY3QgZGlkblxcJ3QgcGFzcyB2YWxpZGF0aW9uIGZvciBmb3JtYXQgJyArIHNjaGVtYS5mb3JtYXQgKyAnOiAnICsgcFZhbHVlO1xuICAgIH1cblxuICAgIC8vIEZvcm1hdCBhbmQgdHlwZSBlcnJvcnMgcmVzZW1ibGUgSlNPTiBTY2hlbWEgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICBlcnIuZmFpbGVkVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgZXJyLnBhdGggPSBbXTtcblxuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2lyY3VsYXJzIChkb2MpIHtcbiAgZnVuY3Rpb24gd2FsayAoYW5jZXN0b3JzLCBub2RlLCBwYXRoKSB7XG4gICAgZnVuY3Rpb24gd2Fsa0l0ZW0gKGl0ZW0sIHNlZ21lbnQpIHtcbiAgICAgIHBhdGgucHVzaChzZWdtZW50KTtcbiAgICAgIHdhbGsoYW5jZXN0b3JzLCBpdGVtLCBwYXRoKTtcbiAgICAgIHBhdGgucG9wKCk7XG4gICAgfVxuXG4gICAgLy8gV2UgZG8gbm90IHByb2Nlc3MgY2lyY3VsYXIgb2JqZWN0cyBhZ2FpblxuICAgIGlmIChhbmNlc3RvcnMuaW5kZXhPZihub2RlKSA9PT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ycy5wdXNoKG5vZGUpO1xuXG4gICAgICBpZiAoXy5pc0FycmF5KG5vZGUpIHx8IF8uaXNQbGFpbk9iamVjdChub2RlKSkge1xuICAgICAgICBfLmVhY2gobm9kZSwgZnVuY3Rpb24gKG1lbWJlciwgaW5kZXhPcktleSkge1xuICAgICAgICAgIHdhbGtJdGVtKG1lbWJlciwgaW5kZXhPcktleS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF8uc2V0KGRvYywgcGF0aCwge30pO1xuICAgIH1cblxuICAgIGFuY2VzdG9ycy5wb3AoKTtcbiAgfVxuXG4gIHdhbGsoW10sIGRvYywgW10pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jb2xsZWN0aW9uRm9ybWF0cyA9IGNvbGxlY3Rpb25Gb3JtYXRzO1xuXG4vLyBUaGUgVVJMIHRvIHRoZSBTd2FnZ2VyIDIuMCBkb2N1bWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cy5kb2N1bWVudGF0aW9uID0gZG9jc1VybDtcblxubW9kdWxlLmV4cG9ydHMucGFyYW1ldGVyTG9jYXRpb25zID0gcGFyYW1ldGVyTG9jYXRpb25zO1xuXG4vLyBUaGUgYXJyYXkgb2Ygc3VwcG9ydGVkIEhUVFAgbWV0aG9kcyBmb3IgZWFjaCBwYXRoXG5tb2R1bGUuZXhwb3J0cy5zdXBwb3J0ZWRIdHRwTWV0aG9kcyA9IHZIZWxwZXJzLnN1cHBvcnRlZEh0dHBNZXRob2RzO1xuXG5tb2R1bGUuZXhwb3J0cy50eXBlcyA9IHR5cGVzO1xuXG4vLyBUaGUgdmVyc2lvbiBmb3IgdGhpcyBTd2FnZ2VyIHZlcnNpb25cbm1vZHVsZS5leHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIGRlZmluaXRpb24gY2FuIGJlIHByb2Nlc3NlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBwb3RlbnRpYWwgU3dhZ2dlciBkZWZpbml0aW9uIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIGRlZmluaXRpb24gcmVwcmVzZW50cyBhIFN3YWdnZXIgMi4wIGRlZmluaXRpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMuY2FuUHJvY2VzcyA9IGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7XG4gIHJldHVybiBkZWZpbml0aW9uLnN3YWdnZXIgPT09IHZlcnNpb247XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgcmF3IEphdmFTY3JpcHQgdmFsdWUgdG8gYSBKU09OIFNjaGVtYSB2YWx1ZSBiYXNlZCBvbiBpdHMgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWEgLSBUaGUgc2NoZW1hIGZvciB0aGUgdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIGNvbnZlcnNpb24gb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbGxlY3Rpb25Gb3JtYXRdIC0gVGhlIGNvbGxlY3Rpb24gZm9ybWF0XG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZW5jb2RpbmddIC0gVGhlIGVuY29kaW5nIGlmIHRoZSByYXcgdmFsdWUgaXMgYSBgQnVmZmVyYFxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSBjb252ZXJ0ZWQgdmFsdWVcbiAqL1xubW9kdWxlLmV4cG9ydHMuY29udmVydFZhbHVlID0gZnVuY3Rpb24gKHNjaGVtYSwgb3B0aW9ucywgdmFsdWUpIHtcbiAgcmV0dXJuIHJlYWxDb252ZXJ0VmFsdWUoc2NoZW1hLCBvcHRpb25zLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBTd2FnZ2VyQXBpIG9iamVjdCBmcm9tIHRoZSBwcm92aWRlZCBTd2FnZ2VyIGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgU3dhZ2dlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHBhc3NlZCB0byBzd2FnZ2VyQXBpLmNyZWF0ZVxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0aGUgU3dhZ2dlckFwaSBhZnRlciBwcm9jZXNzaW5nXG4gKi9cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVN3YWdnZXJBcGkgPSBmdW5jdGlvbiAoZGVmaW5pdGlvbiwgb3B0aW9ucykge1xuICB2YXIgY09wdGlvbnMgPSBfLmNsb25lRGVlcChvcHRpb25zKTtcbiAgdmFyIGpzb25SZWZzT3B0aW9ucyA9IGNPcHRpb25zLmpzb25SZWZzIHx8IHt9O1xuXG4gIC8vIEluY2x1ZGUgaW52YWxpZCByZWZlcmVuY2UgaW5mb3JtYXRpb25cbiAganNvblJlZnNPcHRpb25zLmluY2x1ZGVJbnZhbGlkID0gdHJ1ZTtcblxuICAvLyBVcGRhdGUgdGhlIGpzb24tcmVmcyBvcHRpb25zIHRvIHVzZSB0aGUgZGVmaW5pdGlvbiBsb2NhdGlvblxuICBpZiAoXy5pc1N0cmluZyhjT3B0aW9ucy5kZWZpbml0aW9uKSkge1xuICAgIGpzb25SZWZzT3B0aW9ucy5yZWxhdGl2ZUJhc2UgPSBkaXJuYW1lKGNPcHRpb25zLmRlZmluaXRpb24pO1xuICB9XG5cbiAgLy8gVXBkYXRlIHRoZSBqc29uLXJlZnMgb3B0aW9ucyB0byBwcm9jZXNzIFlBTUxcbiAgaWYgKF8uaXNVbmRlZmluZWQoanNvblJlZnNPcHRpb25zLmxvYWRlck9wdGlvbnMpKSB7XG4gICAganNvblJlZnNPcHRpb25zLmxvYWRlck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChfLmlzVW5kZWZpbmVkKGpzb25SZWZzT3B0aW9ucy5sb2FkZXJPcHRpb25zLnByb2Nlc3NDb250ZW50KSkge1xuICAgIGpzb25SZWZzT3B0aW9ucy5sb2FkZXJPcHRpb25zLnByb2Nlc3NDb250ZW50ID0gZnVuY3Rpb24gKHJlcywgY2IpIHtcbiAgICAgIGNiKHVuZGVmaW5lZCwgWUFNTC5zYWZlTG9hZChyZXMudGV4dCkpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gSnNvblJlZnMucmVzb2x2ZVJlZnMoZGVmaW5pdGlvbiwganNvblJlZnNPcHRpb25zKVxuICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSBhbGwgY2lyY3VsYXIgb2JqZWN0cyBhcyB6LXNjaGVtYSBkb2VzIG5vdCB3b3JrIHdpdGggdGhlbTpcbiAgICAgIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3phZ2dpbm8vei1zY2hlbWEvaXNzdWVzLzEzN1xuICAgICAgcmVtb3ZlQ2lyY3VsYXJzKHJlc3VsdHMucmVzb2x2ZWQpO1xuXG4gICAgICByZXR1cm4gbmV3IFN3YWdnZXJBcGkobW9kdWxlLmV4cG9ydHMsIGRlZmluaXRpb24sIHJlc3VsdHMucmVzb2x2ZWQsIHJlc3VsdHMucmVmcywgb3B0aW9ucyk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSB6LXNjaGVtYSB2YWxpZGF0b3IuXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIHotc2NoZW1hIHZhbGlkYXRvciB0byB1c2VcbiAqL1xubW9kdWxlLmV4cG9ydHMuZ2V0SlNPTlNjaGVtYVZhbGlkYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGpzb25TY2hlbWFWYWxpZGF0b3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBPcGVyYXRpb24gb2JqZWN0cyBmb3IgZWFjaCBvcGVyYXRpb24gZGVmaW5lZCBpbiBwYXRoIGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHtQYXRofSBwYXRoT2JqZWN0IC0gVGhlIFBhdGggb2JqZWN0XG4gKlxuICogQHJldHVybnMge09wZXJhdGlvbltdfSBUaGUgT3BlcmF0aW9uIG9iamVjdCBhcnJheVxuICovXG5tb2R1bGUuZXhwb3J0cy5nZXRPcGVyYXRpb25zID0gZnVuY3Rpb24gKHBhdGhPYmplY3QpIHtcbiAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgdmFyIHBQYXRoID0gSnNvblJlZnMucGF0aEZyb21QdHIocGF0aE9iamVjdC5wdHIpO1xuICB2YXIgcFBhcmFtcyA9IF8ucmVkdWNlKHBhdGhPYmplY3QuZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLCBmdW5jdGlvbiAocGFyYW1ldGVycywgcGFyYW1EZWYsIGluZGV4KSB7XG4gICAgcGFyYW1ldGVyc1twYXJhbURlZi5uYW1lICsgJzonICsgcGFyYW1EZWYuaW5dID0ge1xuICAgICAgcGF0aDogcFBhdGguY29uY2F0KFsncGFyYW1ldGVycycsIGluZGV4LnRvU3RyaW5nKCldKSxcbiAgICAgIGRlZmluaXRpb246IHBhcmFtRGVmXG4gICAgfTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICB9LCB7fSk7XG5cbiAgXy5mb3JFYWNoKHBhdGhPYmplY3QuZGVmaW5pdGlvbiwgZnVuY3Rpb24gKG9wZXJhdGlvbiwgbWV0aG9kKSB7XG4gICAgLy8gRG8gbm90IHByb2Nlc3Mgbm9uLW9wZXJhdGlvbnNcbiAgICBpZiAoXy5pbmRleE9mKHZIZWxwZXJzLnN1cHBvcnRlZEh0dHBNZXRob2RzLCBtZXRob2QpID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjT3BlcmF0aW9uID0gXy5jbG9uZURlZXAob3BlcmF0aW9uKTsgLy8gQ2xvbmUgc28gd2UgZG8gbm90IGFsdGVyIHRoZSBpbnB1dFxuICAgIHZhciBvUGFyYW1zID0ge307IC8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB1bmlxdWUgcGFyYW1ldGVyc1xuICAgIHZhciBvUGF0aCA9IHBQYXRoLmNvbmNhdChtZXRob2QpO1xuXG4gICAgLy8gQWRkIHBhdGggcGFyYW1ldGVyc1xuICAgIF8uZm9yRWFjaChwUGFyYW1zLCBmdW5jdGlvbiAocFBhcmFtLCBrZXkpIHtcbiAgICAgIG9QYXJhbXNba2V5XSA9IHBQYXJhbTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBvcGVyYXRpb24gcGFyYW1ldGVycyAoT3ZlcnJpZGVzIHBhdGgtbGV2ZWwgcGFyYW1ldGVycyBvZiBzYW1lIG5hbWUraW4gY29tYmluYXRpb24pXG4gICAgXy5mb3JFYWNoKG9wZXJhdGlvbi5wYXJhbWV0ZXJzLCBmdW5jdGlvbiAocGFyYW1EZWYsIGluZGV4KSB7XG4gICAgICBvUGFyYW1zW3BhcmFtRGVmLm5hbWUgKyAnOicgKyBwYXJhbURlZi5pbl0gPSB7XG4gICAgICAgIHBhdGg6IG9QYXRoLmNvbmNhdChbJ3BhcmFtZXRlcnMnLCBpbmRleC50b1N0cmluZygpXSksXG4gICAgICAgIGRlZmluaXRpb246IHBhcmFtRGVmXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gQXR0YWNoIG91ciBjb21wdXRlZCBwYXJhbWV0ZXJzL3NlY3VyaXR5IHRvIHRoZSBvcGVyYXRpb25cbiAgICBjT3BlcmF0aW9uLnBhcmFtZXRlcnMgPSBfLm1hcChfLnZhbHVlcyhvUGFyYW1zKSwgZnVuY3Rpb24gKHBhcmFtZXRlcikge1xuICAgICAgLy8gVXNlZCBsYXRlciBieSBnZXRPcGVyYXRpb25QYXJhbWV0ZXJzIHRvIGNpcmN1bXZlbnQgdGhlIGNoaWNrZW4vZWdnIHNpdHVhdGlvbiAoUmVtb3ZlZCB0aGVyZSBhcyB3ZWxsKVxuICAgICAgcGFyYW1ldGVyLmRlZmluaXRpb24uJCQkcHRyJCQkID0gSnNvblJlZnMucGF0aFRvUHRyKHBhcmFtZXRlci5wYXRoKTtcblxuICAgICAgcmV0dXJuIHBhcmFtZXRlci5kZWZpbml0aW9uO1xuICAgIH0pO1xuXG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChjT3BlcmF0aW9uLnNlY3VyaXR5KSkge1xuICAgICAgY09wZXJhdGlvbi5zZWN1cml0eSA9IHBhdGhPYmplY3QuYXBpLnJlc29sdmVkLnNlY3VyaXR5O1xuICAgIH1cblxuICAgIG9wZXJhdGlvbnMucHVzaChuZXcgT3BlcmF0aW9uKHBhdGhPYmplY3QuYXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpzb25SZWZzLnBhdGhUb1B0cihvUGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY09wZXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjT3BlcmF0aW9uLmNvbnN1bWVzIHx8IHBhdGhPYmplY3QuYXBpLnJlc29sdmVkLmNvbnN1bWVzIHx8IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNPcGVyYXRpb24ucHJvZHVjZXMgfHwgcGF0aE9iamVjdC5hcGkucmVzb2x2ZWQucHJvZHVjZXMgfHwgW10pKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG9wZXJhdGlvbnM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgUGFyYW1ldGVyIG9iamVjdHMgZm9yIHRoZSBwcm92aWRlZCBPcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtPcGVyYXRpb259IG9wZXJhdGlvbiAtIFRoZSBPcGVyYXRpb24gb2JqZWN0XG4gKlxuICogQHJldHVybnMge1BhcmFtZXRlcltdfSBUaGUgUGFyYW1ldGVyIG9iamVjdCBhcnJheVxuICovXG5tb2R1bGUuZXhwb3J0cy5nZXRPcGVyYXRpb25QYXJhbWV0ZXJzID0gZnVuY3Rpb24gKG9wZXJhdGlvbikge1xuICB2YXIgcFBhcmFtcyA9IF8ucmVkdWNlKG9wZXJhdGlvbi5wYXRoT2JqZWN0LmdldFBhcmFtZXRlcnMoKSwgZnVuY3Rpb24gKHBhcmFtcywgcGFyYW0pIHtcbiAgICBwYXJhbXNbcGFyYW0ucHRyXSA9IHBhcmFtO1xuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSwge30pO1xuXG4gIHJldHVybiBfLm1hcChvcGVyYXRpb24ucGFyYW1ldGVycywgZnVuY3Rpb24gKHBhcmFtRGVmKSB7XG4gICAgdmFyIHB0ciA9IHBhcmFtRGVmLiQkJHB0ciQkJDtcbiAgICB2YXIgcFBhcmFtID0gcFBhcmFtc1twdHJdO1xuXG4gICAgLy8gUmVtb3ZlIHNvIHdlIGRvIG5vdCBoYXZlIHRoZXNlIHByb3BlcnRpZXMgbGl0dGVyZWQgdGhyb3VnaG91dCB0aGUgZG9jdW1lbnRcbiAgICBkZWxldGUgcGFyYW1EZWYuJCQkcHRyJCQkO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocFBhcmFtKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXIob3BlcmF0aW9uLCBwdHIsIHBhcmFtRGVmLCB2SGVscGVycy5nZXRQYXJhbWV0ZXJTY2hlbWEocGFyYW1EZWYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBQYXJhbTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIFJlc3BvbnNlIG9iamVjdHMgZm9yIHRoZSBwcm92aWRlZCBPcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtPcGVyYXRpb259IG9wZXJhdGlvbiAtIFRoZSBPcGVyYXRpb24gb2JqZWN0XG4gKlxuICogQHJldHVybnMge1Jlc3BvbnNlW119IFRoZSBSZXNwb25zZSBvYmplY3QgYXJyYXlcbiAqL1xubW9kdWxlLmV4cG9ydHMuZ2V0T3BlcmF0aW9uUmVzcG9uc2VzID0gZnVuY3Rpb24gKG9wZXJhdGlvbikge1xuICByZXR1cm4gXy5tYXAob3BlcmF0aW9uLmRlZmluaXRpb24ucmVzcG9uc2VzLCBmdW5jdGlvbiAocmVzcG9uc2VEZWYsIGNvZGUpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIEpzb25SZWZzLnBhdGhUb1B0cihKc29uUmVmcy5wYXRoRnJvbVB0cihvcGVyYXRpb24ucHRyKS5jb25jYXQoWydyZXNwb25zZXMnLCBjb2RlXSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgcGF0aC1sZXZlbCBQYXJhbWV0ZXIgb2JqZWN0cyBmb3IgdGhlIHByb3ZpZGVkIFBhdGguXG4gKlxuICogQHBhcmFtIHtQYXRofSBwYXRoIC0gVGhlIFBhdGggb2JqZWN0XG4gKlxuICogQHJldHVybnMge1BhcmFtZXRlcltdfSBUaGUgUGFyYW1ldGVyIG9iamVjdCBhcnJheVxuICovXG5tb2R1bGUuZXhwb3J0cy5nZXRQYXRoUGFyYW1ldGVycyA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gIHJldHVybiBfLm1hcChwYXRoLmRlZmluaXRpb24ucGFyYW1ldGVycywgZnVuY3Rpb24gKHBhcmFtRGVmLCBpbmRleCkge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVyKHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgSnNvblJlZnMucGF0aFRvUHRyKEpzb25SZWZzLnBhdGhGcm9tUHRyKHBhdGgucHRyKS5jb25jYXQoaW5kZXgudG9TdHJpbmcoKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtRGVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHZIZWxwZXJzLmdldFBhcmFtZXRlclNjaGVtYShwYXJhbURlZikpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBQYXRoIG9iamVjdHMgZm9yIGVhY2ggcGF0aCBkZWZpbmVkIGluIHRoZSBTd2FnZ2VyIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXIgQVBJIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtQYXRoW119IFRoZSBPcGVyYXRpb24gb2JqZWN0IGFycmF5XG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldFBhdGhzID0gZnVuY3Rpb24gKGFwaSkge1xuICB2YXIgYmFzZVBhdGhQcmVmaXggPSBhcGkucmVzb2x2ZWQuYmFzZVBhdGggfHwgJy8nO1xuXG4gIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBiYXNlUGF0aFByZWZpeCBzbyB3ZSBkbyBub3QgZW5kIHVwIHdpdGggZG91YmxlIHNsYXNoZXNcbiAgaWYgKGJhc2VQYXRoUHJlZml4LmNoYXJBdChiYXNlUGF0aFByZWZpeC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgYmFzZVBhdGhQcmVmaXggPSBiYXNlUGF0aFByZWZpeC5zdWJzdHJpbmcoMCwgYmFzZVBhdGhQcmVmaXgubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gXy5tYXAoYXBpLnJlc29sdmVkLnBhdGhzLCBmdW5jdGlvbiAocGF0aERlZiwgcGF0aCkge1xuICAgIHJldHVybiBuZXcgUGF0aChhcGksXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIEpzb25SZWZzLnBhdGhUb1B0cihbJ3BhdGhzJywgcGF0aF0pLFxuICAgICAgICAgICAgICAgICAgICBwYXRoRGVmLFxuICAgICAgICAgICAgICAgICAgICBwYXRoVG9SZWdleHAoYmFzZVBhdGhQcmVmaXggKyBwYXRoLnJlcGxhY2UoL1xcey9nLCAnOicpLnJlcGxhY2UoL1xcfS9nLCAnJykpKTtcblxuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNhbXBsZSB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIEpTT04gU2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7Kn0gc2NoZW1hIC0gVGhlIEpTT04gU2NoZW1hXG4gKlxuICogQHJldHVybnMgeyp9IFRoZSBzYW1wbGUgdmFsdWVcbiAqL1xubW9kdWxlLmV4cG9ydHMuZ2V0U2FtcGxlID0gZnVuY3Rpb24gKHNjaGVtYSkge1xuICByZXR1cm4gbW9ja2VyKHNjaGVtYSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgZnVuY3Rpb25zIHVzZWQgdG8gdmFsaWRhdGUgU3dhZ2dlciAyLjAgZG9jdW1lbnRzIHNlbWFudGljYWxseS5cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb25bXX0gVGhlIHZhbGlkYXRvcnMgdG8gdXNlXG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldFNlbWFudGljVmFsaWRhdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHZhbGlkYXRvcnMuc2VtYW50aWNWYWxpZGF0b3JzO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdXNlZCB0byB2YWxpZGF0ZSBTd2FnZ2VyIDIuMCBkb2N1bWVudHMgYWdhaW5zdCBpdHMgSlNPTiBTY2hlbWEuXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufSBUaGUgdmFsaWRhdG9yIHRvIHVzZVxuICovXG5tb2R1bGUuZXhwb3J0cy5nZXRTdHJ1Y3R1cmFsVmFsaWRhdG9yID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdmFsaWRhdG9ycy5qc29uU2NoZW1hVmFsaWRhdG9yO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJ0aXRsZVwiOiBcIkEgSlNPTiBTY2hlbWEgZm9yIFN3YWdnZXIgMi4wIEFQSS5cIixcbiAgXCJpZFwiOiBcImh0dHA6Ly9zd2FnZ2VyLmlvL3YyL3NjaGVtYS5qc29uI1wiLFxuICBcIiRzY2hlbWFcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwic3dhZ2dlclwiLFxuICAgIFwiaW5mb1wiLFxuICAgIFwicGF0aHNcIlxuICBdLFxuICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICBcIl54LVwiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgfVxuICB9LFxuICBcInByb3BlcnRpZXNcIjoge1xuICAgIFwic3dhZ2dlclwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgIFwiMi4wXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIFN3YWdnZXIgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LlwiXG4gICAgfSxcbiAgICBcImluZm9cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9pbmZvXCJcbiAgICB9LFxuICAgIFwiaG9zdFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwicGF0dGVyblwiOiBcIl5bXnt9LyA6XFxcXFxcXFxdKyg/OjpcXFxcZCspPyRcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgaG9zdCAobmFtZSBvciBpcCkgb2YgdGhlIEFQSS4gRXhhbXBsZTogJ3N3YWdnZXIuaW8nXCJcbiAgICB9LFxuICAgIFwiYmFzZVBhdGhcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcInBhdHRlcm5cIjogXCJeL1wiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBiYXNlIHBhdGggdG8gdGhlIEFQSS4gRXhhbXBsZTogJy9hcGknLlwiXG4gICAgfSxcbiAgICBcInNjaGVtZXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWVzTGlzdFwiXG4gICAgfSxcbiAgICBcImNvbnN1bWVzXCI6IHtcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGxpc3Qgb2YgTUlNRSB0eXBlcyBhY2NlcHRlZCBieSB0aGUgQVBJLlwiLFxuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tZWRpYVR5cGVMaXN0XCJcbiAgICB9LFxuICAgIFwicHJvZHVjZXNcIjoge1xuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgbGlzdCBvZiBNSU1FIHR5cGVzIHRoZSBBUEkgY2FuIHByb2R1Y2UuXCIsXG4gICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21lZGlhVHlwZUxpc3RcIlxuICAgIH0sXG4gICAgXCJwYXRoc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdGhzXCJcbiAgICB9LFxuICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9kZWZpbml0aW9uc1wiXG4gICAgfSxcbiAgICBcInBhcmFtZXRlcnNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXJhbWV0ZXJEZWZpbml0aW9uc1wiXG4gICAgfSxcbiAgICBcInJlc3BvbnNlc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Jlc3BvbnNlRGVmaW5pdGlvbnNcIlxuICAgIH0sXG4gICAgXCJzZWN1cml0eVwiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NlY3VyaXR5XCJcbiAgICB9LFxuICAgIFwic2VjdXJpdHlEZWZpbml0aW9uc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NlY3VyaXR5RGVmaW5pdGlvbnNcIlxuICAgIH0sXG4gICAgXCJ0YWdzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy90YWdcIlxuICAgICAgfSxcbiAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgIH0sXG4gICAgXCJleHRlcm5hbERvY3NcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leHRlcm5hbERvY3NcIlxuICAgIH1cbiAgfSxcbiAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgXCJpbmZvXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFQSS5cIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJ0aXRsZVwiXG4gICAgICBdLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0aXRsZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgdW5pcXVlIGFuZCBwcmVjaXNlIHRpdGxlIG9mIHRoZSBBUEkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgQVBJLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGxvbmdlciBkZXNjcmlwdGlvbiBvZiB0aGUgQVBJLiBTaG91bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIHRpdGxlLiAgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0ZXJtc09mU2VydmljZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSB0ZXJtcyBvZiBzZXJ2aWNlIGZvciB0aGUgQVBJLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29udGFjdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb250YWN0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaWNlbnNlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2xpY2Vuc2VcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNvbnRhY3RcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29udGFjdCBpbmZvcm1hdGlvbiBmb3IgdGhlIG93bmVycyBvZiB0aGUgQVBJLlwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBpZGVudGlmeWluZyBuYW1lIG9mIHRoZSBjb250YWN0IHBlcnNvbi9vcmdhbml6YXRpb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgVVJMIHBvaW50aW5nIHRvIHRoZSBjb250YWN0IGluZm9ybWF0aW9uLlwiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbWFpbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBjb250YWN0IHBlcnNvbi9vcmdhbml6YXRpb24uXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJlbWFpbFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJsaWNlbnNlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiXG4gICAgICBdLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBuYW1lIG9mIHRoZSBsaWNlbnNlIHR5cGUuIEl0J3MgZW5jb3VyYWdlZCB0byB1c2UgYW4gT1NJIGNvbXBhdGlibGUgbGljZW5zZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBVUkwgcG9pbnRpbmcgdG8gdGhlIGxpY2Vuc2UuXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicGF0aHNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVsYXRpdmUgcGF0aHMgdG8gdGhlIGluZGl2aWR1YWwgZW5kcG9pbnRzLiBUaGV5IG11c3QgYmUgcmVsYXRpdmUgdG8gdGhlICdiYXNlUGF0aCcuXCIsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJeL1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXRoSXRlbVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgfSxcbiAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgIH0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT25lIG9yIG1vcmUgSlNPTiBvYmplY3RzIGRlc2NyaWJpbmcgdGhlIHNjaGVtYXMgYmVpbmcgY29uc3VtZWQgYW5kIHByb2R1Y2VkIGJ5IHRoZSBBUEkuXCJcbiAgICB9LFxuICAgIFwicGFyYW1ldGVyRGVmaW5pdGlvbnNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXJhbWV0ZXJcIlxuICAgICAgfSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPbmUgb3IgbW9yZSBKU09OIHJlcHJlc2VudGF0aW9ucyBmb3IgcGFyYW1ldGVyc1wiXG4gICAgfSxcbiAgICBcInJlc3BvbnNlRGVmaW5pdGlvbnNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZVwiXG4gICAgICB9LFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9uZSBvciBtb3JlIEpTT04gcmVwcmVzZW50YXRpb25zIGZvciBwYXJhbWV0ZXJzXCJcbiAgICB9LFxuICAgIFwiZXh0ZXJuYWxEb2NzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmZvcm1hdGlvbiBhYm91dCBleHRlcm5hbCBkb2N1bWVudGF0aW9uXCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJ1cmxcIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJleGFtcGxlc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZVxuICAgIH0sXG4gICAgXCJtaW1lVHlwZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgTUlNRSB0eXBlIG9mIHRoZSBIVFRQIG1lc3NhZ2UuXCJcbiAgICB9LFxuICAgIFwib3BlcmF0aW9uXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicmVzcG9uc2VzXCJcbiAgICAgIF0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInRhZ3NcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwic3VtbWFyeVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgb3BlcmF0aW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGxvbmdlciBkZXNjcmlwdGlvbiBvZiB0aGUgb3BlcmF0aW9uLCBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leHRlcm5hbERvY3NcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9wZXJhdGlvbklkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgb3BlcmF0aW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvZHVjZXNcIjoge1xuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGxpc3Qgb2YgTUlNRSB0eXBlcyB0aGUgQVBJIGNhbiBwcm9kdWNlLlwiLFxuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWVkaWFUeXBlTGlzdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29uc3VtZXNcIjoge1xuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGxpc3Qgb2YgTUlNRSB0eXBlcyB0aGUgQVBJIGNhbiBjb25zdW1lLlwiLFxuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWVkaWFUeXBlTGlzdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXJhbWV0ZXJzTGlzdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVzcG9uc2VzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Jlc3BvbnNlc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2NoZW1lc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWVzTGlzdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwcmVjYXRlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcInNlY3VyaXR5XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NlY3VyaXR5XCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJwYXRoSXRlbVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3BlcmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwdXRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3BlcmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwb3N0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVsZXRlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3B0aW9uc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vcGVyYXRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImhlYWRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3BlcmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXRjaFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vcGVyYXRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcInBhcmFtZXRlcnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyc0xpc3RcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcInJlc3BvbnNlc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZXNwb25zZSBvYmplY3RzIG5hbWVzIGNhbiBlaXRoZXIgYmUgYW55IHZhbGlkIEhUVFAgc3RhdHVzIGNvZGUgb3IgJ2RlZmF1bHQnLlwiLFxuICAgICAgXCJtaW5Qcm9wZXJ0aWVzXCI6IDEsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXihbMC05XXszfSkkfF4oZGVmYXVsdCkkXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Jlc3BvbnNlVmFsdWVcIlxuICAgICAgICB9LFxuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJub3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJyZXNwb25zZVZhbHVlXCI6IHtcbiAgICAgIFwib25lT2ZcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2pzb25SZWZlcmVuY2VcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcInJlc3BvbnNlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2NoZW1hXCI6IHtcbiAgICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9maWxlU2NoZW1hXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiaGVhZGVyc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9oZWFkZXJzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGFtcGxlc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGFtcGxlc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiaGVhZGVyc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2hlYWRlclwiXG4gICAgICB9XG4gICAgfSxcbiAgICBcImhlYWRlclwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJ0eXBlXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImFycmF5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJ2ZW5kb3JFeHRlbnNpb25cIjoge1xuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFueSBwcm9wZXJ0eSBzdGFydGluZyB3aXRoIHgtIGlzIHZhbGlkLlwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgXCJhZGRpdGlvbmFsSXRlbXNcIjogdHJ1ZVxuICAgIH0sXG4gICAgXCJib2R5UGFyYW1ldGVyXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImluXCIsXG4gICAgICAgIFwic2NoZW1hXCJcbiAgICAgIF0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGFyYW1ldGVyLlwiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcImJvZHlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIG9yIG9wdGlvbmFsLlwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcInNjaGVtYVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgIH0sXG4gICAgXCJoZWFkZXJQYXJhbWV0ZXJTdWJTY2hlbWFcIjoge1xuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIG9yIG9wdGlvbmFsLlwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJoZWFkZXJcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlci4gVGhpcyBjb3VsZCBjb250YWluIGV4YW1wbGVzIG9mIHVzZS4gIEdpdEh1YiBGbGF2b3JlZCBNYXJrZG93biBpcyBhbGxvd2VkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJhcnJheVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wcmltaXRpdmVzSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbGxlY3Rpb25Gb3JtYXRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvY29sbGVjdGlvbkZvcm1hdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9kZWZhdWx0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhMZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkxlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5MZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGF0dGVyblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4SXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy91bmlxdWVJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9lbnVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL211bHRpcGxlT2ZcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcInF1ZXJ5UGFyYW1ldGVyU3ViU2NoZW1hXCI6IHtcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJpblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRldGVybWluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwicXVlcnlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlci4gVGhpcyBjb3VsZCBjb250YWluIGV4YW1wbGVzIG9mIHVzZS4gIEdpdEh1YiBGbGF2b3JlZCBNYXJrZG93biBpcyBhbGxvd2VkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhbGxvd0VtcHR5VmFsdWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbG93cyBzZW5kaW5nIGEgcGFyYW1ldGVyIGJ5IG5hbWUgb25seSBvciB3aXRoIGFuIGVtcHR5IHZhbHVlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYXJyYXlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcHJpbWl0aXZlc0l0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2NvbGxlY3Rpb25Gb3JtYXRXaXRoTXVsdGlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNaW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4TGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluTGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heEl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5JdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tdWx0aXBsZU9mXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJmb3JtRGF0YVBhcmFtZXRlclN1YlNjaGVtYVwiOiB7XG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInJlcXVpcmVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgb3Igb3B0aW9uYWwuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGFyYW1ldGVyLlwiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcImZvcm1EYXRhXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWxsb3dFbXB0eVZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvd3Mgc2VuZGluZyBhIHBhcmFtZXRlciBieSBuYW1lIG9ubHkgb3Igd2l0aCBhbiBlbXB0eSB2YWx1ZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImFycmF5XCIsXG4gICAgICAgICAgICBcImZpbGVcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcHJpbWl0aXZlc0l0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2NvbGxlY3Rpb25Gb3JtYXRXaXRoTXVsdGlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNaW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4TGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluTGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heEl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5JdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tdWx0aXBsZU9mXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJwYXRoUGFyYW1ldGVyU3ViU2NoZW1hXCI6IHtcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlcXVpcmVkXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInJlcXVpcmVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIG9yIG9wdGlvbmFsLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGFyYW1ldGVyLlwiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInBhdGhcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlci4gVGhpcyBjb3VsZCBjb250YWluIGV4YW1wbGVzIG9mIHVzZS4gIEdpdEh1YiBGbGF2b3JlZCBNYXJrZG93biBpcyBhbGxvd2VkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJhcnJheVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wcmltaXRpdmVzSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbGxlY3Rpb25Gb3JtYXRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvY29sbGVjdGlvbkZvcm1hdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9kZWZhdWx0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhMZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkxlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5MZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGF0dGVyblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4SXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy91bmlxdWVJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9lbnVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL211bHRpcGxlT2ZcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm5vbkJvZHlQYXJhbWV0ZXJcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwiaW5cIixcbiAgICAgICAgXCJ0eXBlXCJcbiAgICAgIF0sXG4gICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvaGVhZGVyUGFyYW1ldGVyU3ViU2NoZW1hXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZm9ybURhdGFQYXJhbWV0ZXJTdWJTY2hlbWFcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9xdWVyeVBhcmFtZXRlclN1YlNjaGVtYVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdGhQYXJhbWV0ZXJTdWJTY2hlbWFcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcInBhcmFtZXRlclwiOiB7XG4gICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvYm9keVBhcmFtZXRlclwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL25vbkJvZHlQYXJhbWV0ZXJcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcInNjaGVtYVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGRldGVybWluaXN0aWMgdmVyc2lvbiBvZiBhIEpTT04gU2NoZW1hIG9iamVjdC5cIixcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aXRsZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdGl0bGVcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvcHJvcGVydGllcy9kZXNjcmlwdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZXhjbHVzaXZlTWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvcGF0dGVyblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvcHJvcGVydGllcy91bmlxdWVJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4UHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvcHJvcGVydGllcy9lbnVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdHlwZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWxsT2ZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImRpc2NyaW1pbmF0b3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJ4bWxcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMveG1sXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRlcm5hbERvY3NcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXh0ZXJuYWxEb2NzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGFtcGxlXCI6IHt9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgIH0sXG4gICAgXCJmaWxlU2NoZW1hXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgZGV0ZXJtaW5pc3RpYyB2ZXJzaW9uIG9mIGEgSlNPTiBTY2hlbWEgb2JqZWN0LlwiLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJ0eXBlXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImZvcm1hdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aXRsZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdGl0bGVcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvcHJvcGVydGllcy9kZXNjcmlwdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiZmlsZVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0ZXJuYWxEb2NzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4dGVybmFsRG9jc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhhbXBsZVwiOiB7fVxuICAgICAgfSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICB9LFxuICAgIFwicHJpbWl0aXZlc0l0ZW1zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiYXJyYXlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcHJpbWl0aXZlc0l0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2NvbGxlY3Rpb25Gb3JtYXRcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNaW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4TGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluTGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heEl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5JdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tdWx0aXBsZU9mXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcInNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eVJlcXVpcmVtZW50XCJcbiAgICAgIH0sXG4gICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwic2VjdXJpdHlSZXF1aXJlbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIFwieG1sXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJlZml4XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImF0dHJpYnV0ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIndyYXBwZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcInRhZ1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0ZXJuYWxEb2NzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4dGVybmFsRG9jc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJzZWN1cml0eURlZmluaXRpb25zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwib25lT2ZcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvYmFzaWNBdXRoZW50aWNhdGlvblNlY3VyaXR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvYXBpS2V5U2VjdXJpdHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJJbXBsaWNpdFNlY3VyaXR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyUGFzc3dvcmRTZWN1cml0eVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29hdXRoMkFwcGxpY2F0aW9uU2VjdXJpdHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJBY2Nlc3NDb2RlU2VjdXJpdHlcIlxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJiYXNpY0F1dGhlbnRpY2F0aW9uU2VjdXJpdHlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJiYXNpY1wiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiYXBpS2V5U2VjdXJpdHlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJpblwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJhcGlLZXlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJoZWFkZXJcIixcbiAgICAgICAgICAgIFwicXVlcnlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm9hdXRoMkltcGxpY2l0U2VjdXJpdHlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcImZsb3dcIixcbiAgICAgICAgXCJhdXRob3JpemF0aW9uVXJsXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcIm9hdXRoMlwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZsb3dcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcImltcGxpY2l0XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwic2NvcGVzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29hdXRoMlNjb3Blc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXV0aG9yaXphdGlvblVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwib2F1dGgyUGFzc3dvcmRTZWN1cml0eVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwiZmxvd1wiLFxuICAgICAgICBcInRva2VuVXJsXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcIm9hdXRoMlwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZsb3dcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInBhc3N3b3JkXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwic2NvcGVzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29hdXRoMlNjb3Blc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidG9rZW5VcmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm9hdXRoMkFwcGxpY2F0aW9uU2VjdXJpdHlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcImZsb3dcIixcbiAgICAgICAgXCJ0b2tlblVybFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJvYXV0aDJcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmbG93XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJhcHBsaWNhdGlvblwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJTY29wZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInRva2VuVXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJvYXV0aDJBY2Nlc3NDb2RlU2VjdXJpdHlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcImZsb3dcIixcbiAgICAgICAgXCJhdXRob3JpemF0aW9uVXJsXCIsXG4gICAgICAgIFwidG9rZW5VcmxcIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwib2F1dGgyXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmxvd1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYWNjZXNzQ29kZVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJTY29wZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvcml6YXRpb25VcmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0b2tlblVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwib2F1dGgyU2NvcGVzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBcIm1lZGlhVHlwZUxpc3RcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbWVUeXBlXCJcbiAgICAgIH0sXG4gICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwicGFyYW1ldGVyc0xpc3RcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gc2VuZCBhIHZhbGlkIEFQSSBjYWxsLlwiLFxuICAgICAgXCJhZGRpdGlvbmFsSXRlbXNcIjogZmFsc2UsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXJhbWV0ZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9qc29uUmVmZXJlbmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwic2NoZW1lc0xpc3RcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgdHJhbnNmZXIgcHJvdG9jb2wgb2YgdGhlIEFQSS5cIixcbiAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICBcImh0dHBcIixcbiAgICAgICAgICBcImh0dHBzXCIsXG4gICAgICAgICAgXCJ3c1wiLFxuICAgICAgICAgIFwid3NzXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgIH0sXG4gICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgXCJjc3ZcIixcbiAgICAgICAgXCJzc3ZcIixcbiAgICAgICAgXCJ0c3ZcIixcbiAgICAgICAgXCJwaXBlc1wiXG4gICAgICBdLFxuICAgICAgXCJkZWZhdWx0XCI6IFwiY3N2XCJcbiAgICB9LFxuICAgIFwiY29sbGVjdGlvbkZvcm1hdFdpdGhNdWx0aVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgIFwiY3N2XCIsXG4gICAgICAgIFwic3N2XCIsXG4gICAgICAgIFwidHN2XCIsXG4gICAgICAgIFwicGlwZXNcIixcbiAgICAgICAgXCJtdWx0aVwiXG4gICAgICBdLFxuICAgICAgXCJkZWZhdWx0XCI6IFwiY3N2XCJcbiAgICB9LFxuICAgIFwidGl0bGVcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdGl0bGVcIlxuICAgIH0sXG4gICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvcHJvcGVydGllcy9kZXNjcmlwdGlvblwiXG4gICAgfSxcbiAgICBcImRlZmF1bHRcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVmYXVsdFwiXG4gICAgfSxcbiAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvbXVsdGlwbGVPZlwiXG4gICAgfSxcbiAgICBcIm1heGltdW1cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvbWF4aW11bVwiXG4gICAgfSxcbiAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZXhjbHVzaXZlTWF4aW11bVwiXG4gICAgfSxcbiAgICBcIm1pbmltdW1cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvbWluaW11bVwiXG4gICAgfSxcbiAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgfSxcbiAgICBcIm1heExlbmd0aFwiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiXG4gICAgfSxcbiAgICBcInBhdHRlcm5cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvcGF0dGVyblwiXG4gICAgfSxcbiAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIlxuICAgIH0sXG4gICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIlxuICAgIH0sXG4gICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvcHJvcGVydGllcy91bmlxdWVJdGVtc1wiXG4gICAgfSxcbiAgICBcImVudW1cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZW51bVwiXG4gICAgfSxcbiAgICBcImpzb25SZWZlcmVuY2VcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCIkcmVmXCJcbiAgICAgIF0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snXyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnXyddIDogbnVsbCk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlcnMnKTtcbnZhciBKc29uUmVmcyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydKc29uUmVmcyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnSnNvblJlZnMnXSA6IG51bGwpO1xudmFyIHN3YWdnZXJTY2hlbWEgPSByZXF1aXJlKCcuL3NjaGVtYS5qc29uJyk7XG52YXIgdkhlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcblxuZnVuY3Rpb24gZ2V0U2NoZW1hUHJvcGVydGllcyAoc2NoZW1hKSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gXy5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzKTsgLy8gU3RhcnQgd2l0aCB0aGUgZGVmaW5lZCBwcm9wZXJ0aWVzXG5cbiAgLy8gQWRkIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgcGFyZW50XG4gIF8uZm9yRWFjaChzY2hlbWEuYWxsT2YsIGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICBfLmZvckVhY2goZ2V0U2NoZW1hUHJvcGVydGllcyhwYXJlbnQpLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgIGlmIChfLmluZGV4T2YocHJvcGVydGllcywgcHJvcGVydHkpID09PSAtMSkge1xuICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gd2Fsa1NjaGVtYSAoYXBpLCBibGFja2xpc3QsIHNjaGVtYSwgcGF0aCwgaGFuZGxlcnMsIHJlc3BvbnNlKSB7XG4gIHZhciB0eXBlID0gc2NoZW1hLnR5cGUgfHwgJ29iamVjdCc7XG5cbiAgZnVuY3Rpb24gc2hvdWxkU2tpcCAoY1BhdGgpIHtcbiAgICByZXR1cm4gXy5pbmRleE9mKGJsYWNrbGlzdCwgSnNvblJlZnMucGF0aFRvUHRyKGNQYXRoKSkgPiAtMTtcbiAgfVxuXG4gIC8vIERvIG5vdCBwcm9jZXNzIGl0ZW1zIGluIHRoZSBibGFja2xpc3QgYXMgdGhleSd2ZSBiZWVuIHByb2Nlc3NlZCBhbHJlYWR5XG4gIGlmIChzaG91bGRTa2lwKHBhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gd2Fsa2VyIChwU2NoZW1hLCBwUGF0aCkge1xuICAgIC8vIERvIG5vdCBwcm9jZXNzIGl0ZW1zIGluIHRoZSBibGFja2xpc3QgYXMgdGhleSd2ZSBiZWVuIHByb2Nlc3NlZCBhbHJlYWR5XG4gICAgaWYgKHNob3VsZFNraXAocFBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXy5mb3JFYWNoKHBTY2hlbWEsIGZ1bmN0aW9uIChpdGVtLCBuYW1lKSB7XG4gICAgICBpZiAoXy5pc051bWJlcihuYW1lKSkge1xuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCBpdGVtLCBwUGF0aC5jb25jYXQobmFtZSksIGhhbmRsZXJzLCByZXNwb25zZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIV8uaXNVbmRlZmluZWQoc2NoZW1hLnNjaGVtYSkpIHtcbiAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCBzY2hlbWEuc2NoZW1hLCBwYXRoLmNvbmNhdCgnc2NoZW1hJyksIGhhbmRsZXJzLCByZXNwb25zZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2FycmF5JyAmJiAhXy5pc1VuZGVmaW5lZChzY2hlbWEuaXRlbXMpKSB7XG4gICAgaWYgKF8uaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICB3YWxrZXIoc2NoZW1hLml0ZW1zLCBwYXRoLmNvbmNhdCgnaXRlbXMnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIHNjaGVtYS5pdGVtcywgcGF0aC5jb25jYXQoJ2l0ZW1zJyksIGhhbmRsZXJzLCByZXNwb25zZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcykpIHtcbiAgICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcywgcGF0aC5jb25jYXQoJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyksIGhhbmRsZXJzLCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgXy5mb3JFYWNoKFsnYWxsT2YnLCAncHJvcGVydGllcyddLCBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWFbcHJvcE5hbWVdKSkge1xuICAgICAgICB3YWxrZXIoc2NoZW1hW3Byb3BOYW1lXSwgcGF0aC5jb25jYXQocHJvcE5hbWUpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF8uZm9yRWFjaChoYW5kbGVycywgZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICBoYW5kbGVyKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgcmVzb2x2ZWQgU3dhZ2dlciBkb2N1bWVudCBhZ2FpbnN0IHRoZSBTd2FnZ2VyIDIuMCBKU09OIFNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyQXBpIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIG9mIHRoZSB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RydWN0dXJlIChhcGkpIHtcbiAgdmFyIHJlc3VsdHMgPSBoZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShhcGkucGx1Z2luLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKSwgc3dhZ2dlclNjaGVtYSwgYXBpLnJlc29sdmVkKTtcblxuICAvLyBNYWtlIGNvbXBsZXggSlNPTiBTY2hlbWEgdmFsaWRhdGlvbiBlcnJvcnMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgKElzc3VlIDE1KVxuICByZXN1bHRzLmVycm9ycyA9IHJlc3VsdHMuZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICB2YXIgZGVmVHlwZSA9IFsnYWRkaXRpb25hbFByb3BlcnRpZXMnLCAnaXRlbXMnXS5pbmRleE9mKGVycm9yLnBhdGhbZXJyb3IucGF0aC5sZW5ndGggLSAxXSkgPiAtMSA/XG4gICAgICAgICAgJ3NjaGVtYScgOlxuICAgICAgICAgIGVycm9yLnBhdGhbZXJyb3IucGF0aC5sZW5ndGggLSAyXTtcblxuICAgIGlmIChbJ0FOWV9PRl9NSVNTSU5HJywgJ09ORV9PRl9NSVNTSU5HJ10uaW5kZXhPZihlcnJvci5jb2RlKSA+IC0xKSB7XG4gICAgICBzd2l0Y2ggKGRlZlR5cGUpIHtcbiAgICAgIGNhc2UgJ3BhcmFtZXRlcnMnOlxuICAgICAgICBkZWZUeXBlID0gJ3BhcmFtZXRlcic7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXNwb25zZXMnOlxuICAgICAgICBkZWZUeXBlID0gJ3Jlc3BvbnNlJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3NjaGVtYSc6XG4gICAgICAgIGRlZlR5cGUgKz0gJyAnICsgZXJyb3IucGF0aFtlcnJvci5wYXRoLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICAgIH1cblxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdOb3QgYSB2YWxpZCAnICsgZGVmVHlwZSArICcgZGVmaW5pdGlvbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9yO1xuICB9KTtcblxuICAvLyBUcmVhdCBpbnZhbGlkL21pc3NpbmcgcmVmZXJlbmNlcyBhcyBzdHJ1Y3R1cmFsIGVycm9yc1xuICBfLmVhY2goYXBpLnJlZmVyZW5jZXMsIGZ1bmN0aW9uIChyZWZEZXRhaWxzLCByZWZQdHIpIHtcbiAgICB2YXIgcmVmUGF0aCA9IEpzb25SZWZzLnBhdGhGcm9tUHRyKHJlZlB0cik7XG4gICAgdmFyIGVycjtcblxuICAgIGlmIChyZWZEZXRhaWxzLm1pc3NpbmcpIHtcbiAgICAgIGVyciA9IHtcbiAgICAgICAgY29kZTogJ1VOUkVTT0xWQUJMRV9SRUZFUkVOQ0UnLFxuICAgICAgICBtZXNzYWdlOiAnUmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJyArIHJlZkRldGFpbHMudXJpLFxuICAgICAgICBwYXRoOiByZWZQYXRoLmNvbmNhdCgnJHJlZicpXG4gICAgICB9O1xuXG4gICAgICBpZiAoXy5oYXMocmVmRGV0YWlscywgJ2Vycm9yJykpIHtcbiAgICAgICAgZXJyLmVycm9yID0gcmVmRGV0YWlscy5lcnJvcjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaChlcnIpO1xuICAgIH0gZWxzZSBpZiAocmVmRGV0YWlscy50eXBlID09PSAnaW52YWxpZCcpIHtcbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2goe1xuICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRUZFUkVOQ0UnLFxuICAgICAgICBtZXNzYWdlOiByZWZEZXRhaWxzLmVycm9yIHx8ICdJbnZhbGlkIEpTT04gUmVmZXJlbmNlJyxcbiAgICAgICAgcGF0aDogcmVmUGF0aC5jb25jYXQoJyRyZWYnKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyogU2NoZW1hIE9iamVjdCBWYWxpZGF0b3JzICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXlUeXBlSXRlbXNFeGlzdGVuY2UgKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCkge1xuICBpZiAoc2NoZW1hLnR5cGUgPT09ICdhcnJheScgJiYgXy5pc1VuZGVmaW5lZChzY2hlbWEuaXRlbXMpKSB7XG4gICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgY29kZTogJ09CSkVDVF9NSVNTSU5HX1JFUVVJUkVEX1BST1BFUlRZJyxcbiAgICAgIG1lc3NhZ2U6ICdNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiBpdGVtcycsXG4gICAgICBwYXRoOiBwYXRoXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEZWZhdWx0VmFsdWUgKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCkge1xuICB2YXIgcmVzdWx0O1xuXG4gIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICByZXN1bHQgPSBoZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShhcGkucGx1Z2luLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKSwgc2NoZW1hLCBzY2hlbWEuZGVmYXVsdCk7XG5cbiAgICBfLmZvckVhY2gocmVzdWx0LmVycm9ycywgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBlcnJvci5wYXRoID0gcGF0aC5jb25jYXQoZXJyb3IucGF0aC5jb25jYXQoJ2RlZmF1bHQnKSk7XG5cbiAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgICB9KTtcblxuICAgIF8uZm9yRWFjaChyZXN1bHQud2FybmluZ3MsIGZ1bmN0aW9uICh3YXJuaW5nKSB7XG4gICAgICB3YXJuaW5nLnBhdGggPSBwYXRoLmNvbmNhdCh3YXJuaW5nLnBhdGgucHVzaCgnZGVmYXVsdCcpKTtcblxuICAgICAgcmVzcG9uc2Uud2FybmluZ3MucHVzaCh3YXJuaW5nKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYVByb3BlcnRpZXMgKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCkge1xuICBfLmZvckVhY2goXy5kaWZmZXJlbmNlKHNjaGVtYS5yZXF1aXJlZCB8fCBbXSwgZ2V0U2NoZW1hUHJvcGVydGllcyhzY2hlbWEpKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICBjb2RlOiAnT0JKRUNUX01JU1NJTkdfUkVRVUlSRURfUFJPUEVSVFlfREVGSU5JVElPTicsXG4gICAgICBtZXNzYWdlOiAnTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAnICsgbmFtZSxcbiAgICAgIHBhdGg6IHBhdGhcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFsbCByZWZlcmVuY2VzLlxuICpcbiAqICogSWRlbnRpZmllcyBjaXJjdWxhciBpbmhlcml0YW5jZSByZWZlcmVuY2VzXG4gKiAqIElkZW50aWZpZXMgdW5yZWZlcmVuY2VkIHJlZmVyZW5jZWFibGUgZGVmaW5pdGlvbnNcbiAqICogSWRlbnRpZmllcyB1bnJlc29sdmFibGUgcmVmZXJlbmNlc1xuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXJBcGkgb2JqZWN0XG4gKlxuICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3Mgb2YgdGhlIHZhbGlkYXRpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VzIChhcGkpIHtcbiAgdmFyIGluaGVyaXRhbmNlRGV0YWlscyA9IHt9O1xuICB2YXIgcmVmZXJlbmNlYWJsZSA9IFtdO1xuICB2YXIgcmVmZXJlbmNlcyA9IHt9O1xuICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcblxuICBmdW5jdGlvbiBhZGRBbmNlc3RvciAoZHNjLCBhbmMpIHtcbiAgICBpZiAoIV8uaGFzKGluaGVyaXRhbmNlRGV0YWlscywgZHNjKSkge1xuICAgICAgaW5oZXJpdGFuY2VEZXRhaWxzW2RzY10gPSB7XG4gICAgICAgIGxpbmVhZ2U6IFtdLFxuICAgICAgICBwYXJlbnRzOiBbXG4gICAgICAgICAgYW5jXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaGVyaXRhbmNlRGV0YWlsc1tkc2NdLnBhcmVudHMucHVzaChhbmMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFJlZmVyZW5jZSAocmVmLCBwdHIpIHtcbiAgICBpZiAoXy5pbmRleE9mKHJlZmVyZW5jZXMsIHJlZikgPT09IC0xKSB7XG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChyZWZlcmVuY2VzW3JlZl0pKSB7XG4gICAgICAgIHJlZmVyZW5jZXNbcmVmXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgcmVmZXJlbmNlcyB0byBhbmNlc3RvcnNcbiAgICAgIGlmIChyZWYuaW5kZXhPZignYWxsT2YnKSA+IC0xKSB7XG4gICAgICAgIGFkZFJlZmVyZW5jZShyZWYuc3Vic3RyaW5nKDAsIHJlZi5sYXN0SW5kZXhPZignL2FsbE9mJykpKTtcbiAgICAgIH1cblxuICAgICAgcmVmZXJlbmNlc1tyZWZdLnB1c2gocHRyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTZWN1cml0eVByb2Nlc3NvciAocGF0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc2VjdXJpdHksIGluZGV4KSB7XG4gICAgICBfLmZvckVhY2goc2VjdXJpdHksIGZ1bmN0aW9uIChzY29wZXMsIG5hbWUpIHtcbiAgICAgICAgdmFyIHNkUGF0aCA9IFsnc2VjdXJpdHlEZWZpbml0aW9ucycsIG5hbWVdO1xuICAgICAgICB2YXIgc2RQdHIgPSBKc29uUmVmcy5wYXRoVG9QdHIoc2RQYXRoKTtcbiAgICAgICAgdmFyIHNyUGF0aCA9IHBhdGguY29uY2F0KFtpbmRleC50b1N0cmluZygpLCBuYW1lXSk7XG5cbiAgICAgICAgLy8gSWRlbnRpZnkgbWlzc2luZyByZWZlcmVuY2UgdG8gdGhlIHNlY3VyaXR5IGRlZmluaXRpb25cbiAgICAgICAgaWYgKF8uaW5kZXhPZihyZWZlcmVuY2VhYmxlLCBzZFB0cikgPT09IC0xKSB7XG4gICAgICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogJ1VOUkVTT0xWQUJMRV9SRUZFUkVOQ0UnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1NlY3VyaXR5IGRlZmluaXRpb24gY291bGQgbm90IGJlIHJlc29sdmVkOiAnICsgbmFtZSxcbiAgICAgICAgICAgIHBhdGg6IHNyUGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZFJlZmVyZW5jZShzZFB0ciwgSnNvblJlZnMucGF0aFRvUHRyKHNyUGF0aCkpO1xuXG4gICAgICAgICAgXy5mb3JFYWNoKHNjb3BlcywgZnVuY3Rpb24gKHNjb3BlLCBzSW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBzc3JQYXRoID0gc3JQYXRoLmNvbmNhdChzSW5kZXgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB2YXIgc3NyUHRyID0gSnNvblJlZnMucGF0aFRvUHRyKHNkUGF0aC5jb25jYXQoWydzY29wZXMnLCBzY29wZV0pKTtcblxuICAgICAgICAgICAgaWYgKF8uaW5kZXhPZihyZWZlcmVuY2VhYmxlLCBzc3JQdHIpID09PSAtMSkge1xuICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogJ1VOUkVTT0xWQUJMRV9SRUZFUkVOQ0UnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdTZWN1cml0eSBzY29wZSBkZWZpbml0aW9uIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJyArIHNjb3BlLFxuICAgICAgICAgICAgICAgIHBhdGg6IHNzclBhdGhcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRSZWZlcmVuY2UoSnNvblJlZnMucGF0aFRvUHRyKHNkUGF0aC5jb25jYXQoWydzY29wZXMnLCBzY29wZV0pKSwgc3NyUHRyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhbGtMaW5lYWdlIChyb290LCBpZCwgbGluZWFnZSkge1xuICAgIHZhciBkZXRhaWxzID0gaW5oZXJpdGFuY2VEZXRhaWxzW2lkIHx8IHJvb3RdO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIF8uZWFjaChkZXRhaWxzLnBhcmVudHMsIGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgbGluZWFnZS5wdXNoKHBhcmVudCk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IHBhcmVudCkge1xuICAgICAgICAgIHdhbGtMaW5lYWdlKHJvb3QsIHBhcmVudCwgbGluZWFnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIElkZW50aWZ5IHJlZmVyZW5jZWFibGUgZGVmaW5pdGlvbnNcbiAgXy5mb3JFYWNoKGFwaS5yZXNvbHZlZC5kZWZpbml0aW9ucywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgIHJlZmVyZW5jZWFibGUucHVzaChKc29uUmVmcy5wYXRoVG9QdHIoWydkZWZpbml0aW9ucycsIG5hbWVdKSk7XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChhcGkucmVzb2x2ZWQucGFyYW1ldGVycywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgIHJlZmVyZW5jZWFibGUucHVzaChKc29uUmVmcy5wYXRoVG9QdHIoWydwYXJhbWV0ZXJzJywgbmFtZV0pKTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGFwaS5yZXNvbHZlZC5yZXNwb25zZXMsIGZ1bmN0aW9uIChkZWYsIG5hbWUpIHtcbiAgICByZWZlcmVuY2VhYmxlLnB1c2goSnNvblJlZnMucGF0aFRvUHRyKFsncmVzcG9uc2VzJywgbmFtZV0pKTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGFwaS5yZXNvbHZlZC5zZWN1cml0eURlZmluaXRpb25zLCBmdW5jdGlvbiAoZGVmLCBuYW1lKSB7XG4gICAgdmFyIHNQYXRoID0gWydzZWN1cml0eURlZmluaXRpb25zJywgbmFtZV07XG5cbiAgICByZWZlcmVuY2VhYmxlLnB1c2goSnNvblJlZnMucGF0aFRvUHRyKHNQYXRoKSk7XG5cbiAgICBfLmZvckVhY2goZGVmLnNjb3BlcywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uLCBzY29wZSkge1xuICAgICAgdmFyIHB0ciA9IEpzb25SZWZzLnBhdGhUb1B0cihzUGF0aC5jb25jYXQoWydzY29wZXMnLCBzY29wZV0pKTtcblxuICAgICAgaWYgKF8uaW5kZXhPZihyZWZlcmVuY2VhYmxlLCBwdHIpID09PSAtMSkge1xuICAgICAgICByZWZlcmVuY2VhYmxlLnB1c2gocHRyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gSWRlbnRpZnkgcmVmZXJlbmNlcyBhbmQgYnVpbGQgaW5oZXJpdGFuY2UgbW9kZWxcbiAgXy5mb3JFYWNoKGFwaS5yZWZlcmVuY2VzLCBmdW5jdGlvbiAobWV0YWRhdGEsIHB0cikge1xuICAgIHZhciBwdHJQYXRoID0gSnNvblJlZnMucGF0aEZyb21QdHIocHRyKTtcblxuICAgIGlmICghXy5oYXMobWV0YWRhdGEsICdtaXNzaW5nJykpIHtcbiAgICAgIGFkZFJlZmVyZW5jZShtZXRhZGF0YS51cmksIHB0cik7XG5cbiAgICAgIGlmIChwdHJQYXRoW3B0clBhdGgubGVuZ3RoIC0gMl0gPT09ICdhbGxPZicpIHtcbiAgICAgICAgYWRkQW5jZXN0b3IoSnNvblJlZnMucGF0aFRvUHRyKHB0clBhdGguc2xpY2UoMCwgcHRyUGF0aC5sZW5ndGggLSAyKSksIG1ldGFkYXRhLnVyaSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBJZGVudGlmeSBjaXJjdWxhciBpbmhlcml0YW5jZVxuICBfLmZvckVhY2goaW5oZXJpdGFuY2VEZXRhaWxzLCBmdW5jdGlvbiAoZGV0YWlscywgcHRyKSB7XG4gICAgd2Fsa0xpbmVhZ2UocHRyLCB1bmRlZmluZWQsIGRldGFpbHMubGluZWFnZSk7XG5cbiAgICBpZiAoZGV0YWlscy5saW5lYWdlLmxlbmd0aCA+IDEgJiYgZGV0YWlscy5saW5lYWdlW2RldGFpbHMubGluZWFnZS5sZW5ndGggLSAxXSA9PT0gcHRyIHx8XG4gICAgICAgIGRldGFpbHMucGFyZW50c1swXSA9PT0gcHRyKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdDSVJDVUxBUl9JTkhFUklUQU5DRScsXG4gICAgICAgIGxpbmVhZ2U6IFtwdHJdLmNvbmNhdChkZXRhaWxzLmxpbmVhZ2UpLFxuICAgICAgICBtZXNzYWdlOiAnU2NoZW1hIG9iamVjdCBpbmhlcml0cyBmcm9tIGl0c2VsZjogJyArIHB0cixcbiAgICAgICAgcGF0aDogSnNvblJlZnMucGF0aEZyb21QdHIocHRyKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBJZGVudGlmeSByZWZlcmVuY2VzIGFuZCB2YWxpZGF0ZSBtaXNzaW5nIHJlZmVyZW5jZXMgZm9yIG5vbi1KU09OIFJlZmVyZW5jZXMgKHNlY3VyaXR5KVxuICBfLmZvckVhY2goYXBpLnJlc29sdmVkLnNlY3VyaXR5LCBjcmVhdGVTZWN1cml0eVByb2Nlc3NvcihbJ3NlY3VyaXR5J10pKTtcblxuICBfLmZvckVhY2goYXBpLnJlc29sdmVkLnBhdGhzLCBmdW5jdGlvbiAocGF0aERlZiwgbmFtZSkge1xuICAgIHZhciBwUGF0aCA9IFsncGF0aHMnLCBuYW1lXTtcblxuICAgIF8uZm9yRWFjaChwYXRoRGVmLnNlY3VyaXR5LCBjcmVhdGVTZWN1cml0eVByb2Nlc3NvcihwUGF0aC5jb25jYXQoJ3NlY3VyaXR5JykpKTtcblxuICAgIF8uZm9yRWFjaChwYXRoRGVmLCBmdW5jdGlvbiAob3BlcmF0aW9uRGVmLCBtZXRob2QpIHtcbiAgICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgICBpZiAoXy5pbmRleE9mKHZIZWxwZXJzLnN1cHBvcnRlZEh0dHBNZXRob2RzLCBtZXRob2QpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF8uZm9yRWFjaChvcGVyYXRpb25EZWYuc2VjdXJpdHksXG4gICAgICAgICAgICAgICAgY3JlYXRlU2VjdXJpdHlQcm9jZXNzb3IocFBhdGguY29uY2F0KFttZXRob2QsICdzZWN1cml0eSddKSkpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBJZGVudGlmeSB1bnVzZWQgcmVmZXJlbmNlcyAobWlzc2luZyByZWZlcmVuY2VzIGFyZSBhbHJlYWR5IGhhbmRsZWQgYWJvdmUpXG4gIF8uZm9yRWFjaChfLmRpZmZlcmVuY2UocmVmZXJlbmNlYWJsZSwgT2JqZWN0LmtleXMocmVmZXJlbmNlcykpLCBmdW5jdGlvbiAocHRyKSB7XG4gICAgcmVzcG9uc2Uud2FybmluZ3MucHVzaCh7XG4gICAgICBjb2RlOiAnVU5VU0VEX0RFRklOSVRJT04nLFxuICAgICAgbWVzc2FnZTogJ0RlZmluaXRpb24gaXMgbm90IHVzZWQ6ICcgKyBwdHIsXG4gICAgICBwYXRoOiBKc29uUmVmcy5wYXRoRnJvbVB0cihwdHIpXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYWxsIHNjaGVtYSBvYmplY3RzIGFuZCBzY2hlbWEtbGlrZSBvYmplY3RzIChub24tYm9keSBwYXRoIHBhcmFtZXRlcnMpLlxuICpcbiAqICogVmFsaWRhdGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgcmVsYXRlZCB0byBjb21wb3NpdGlvbi9pbmhlcml0YW5jZVxuICogKiBWYWxpZGF0ZXMgdGhhdCBhbGwgYXJyYXkgdHlwZXMgaGF2ZSB0aGVpciByZXF1aXJlZCBpdGVtcyBwcm9wZXJ0eVxuICogICAgIChAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2lzc3Vlcy8xNzR9KVxuICogKiBWYWxpZGF0ZXMgdGhhdCBhbGwgZGVmYXVsdCB2YWx1ZXMgYXJlIHZhbGlkIGJhc2VkIG9uIGl0cyByZXNwZWN0aXZlIHNjaGVtYVxuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXJBcGkgb2JqZWN0XG4gKlxuICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3Mgb2YgdGhlIHZhbGlkYXRpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWFPYmplY3RzIChhcGkpIHtcbiAgLy8gQnVpbGQgYSBibGFja2xpc3QgdG8gYXZvaWQgY2FzY2FkaW5nIGVycm9ycy93YXJuaW5nc1xuICB2YXIgYmxhY2tsaXN0ID0gXy5yZWR1Y2UoYXBpLnJlZmVyZW5jZXMsIGZ1bmN0aW9uIChsaXN0LCBtZXRhZGF0YSwgcHRyKSB7XG4gICAgdmFyIHJlZlBhdGggPSBKc29uUmVmcy5wYXRoRnJvbVB0cihwdHIpO1xuXG4gICAgbGlzdC5wdXNoKEpzb25SZWZzLnBhdGhUb1B0cihyZWZQYXRoKSk7XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfSwgW10pO1xuICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcbiAgdmFyIHZhbGlkYXRvcnMgPSBbXG4gICAgdmFsaWRhdGVBcnJheVR5cGVJdGVtc0V4aXN0ZW5jZSxcbiAgICB2YWxpZGF0ZURlZmF1bHRWYWx1ZSxcbiAgICB2YWxpZGF0ZVNjaGVtYVByb3BlcnRpZXNcbiAgXTtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZVBhcmFtZXRlcnMgKHBhcmFtZXRlcnMsIHBhdGgpIHtcbiAgICBfLmZvckVhY2gocGFyYW1ldGVycywgZnVuY3Rpb24gKHBhcmFtZXRlckRlZiwgbmFtZSkge1xuICAgICAgdmFyIHBQYXRoO1xuXG4gICAgICBpZiAoXy5pc051bWJlcihuYW1lKSkge1xuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBwUGF0aCA9IHBhdGguY29uY2F0KG5hbWUpO1xuXG4gICAgICAvLyBDcmVhdGUgSlNPTiBTY2hlbWEgZm9yIG5vbi1ib2R5IHBhcmFtZXRlcnNcbiAgICAgIGlmIChwYXJhbWV0ZXJEZWYuaW4gIT09ICdib2R5Jykge1xuICAgICAgICBwYXJhbWV0ZXJEZWYgPSB2SGVscGVycy5nZXRQYXJhbWV0ZXJTY2hlbWEocGFyYW1ldGVyRGVmKTtcbiAgICAgIH1cblxuICAgICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgcGFyYW1ldGVyRGVmLCBwUGF0aCwgdmFsaWRhdG9ycywgcmVzcG9uc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVSZXNwb25zZXMgKHJlc3BvbnNlcywgcGF0aCkge1xuICAgIF8uZm9yRWFjaChyZXNwb25zZXMsIGZ1bmN0aW9uIChyZXNwb25zZURlZiwgbmFtZSkge1xuICAgICAgdmFyIHJQYXRoID0gcGF0aC5jb25jYXQobmFtZSk7XG5cbiAgICAgIF8uZm9yRWFjaChyZXNwb25zZURlZi5oZWFkZXJzLCBmdW5jdGlvbiAoaGVhZGVyLCBoTmFtZSkge1xuICAgICAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCBoZWFkZXIsIHJQYXRoLmNvbmNhdChbJ2hlYWRlcnMnLCBoTmFtZV0pLCB2YWxpZGF0b3JzLCByZXNwb25zZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHJlc3BvbnNlRGVmLnNjaGVtYSkpIHtcbiAgICAgICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgcmVzcG9uc2VEZWYuc2NoZW1hLCByUGF0aC5jb25jYXQoJ3NjaGVtYScpLCB2YWxpZGF0b3JzLCByZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBkZWZpbml0aW9uc1xuICBfLmZvckVhY2goYXBpLnJlc29sdmVkLmRlZmluaXRpb25zLCBmdW5jdGlvbiAoZGVmaW5pdGlvbkRlZiwgbmFtZSkge1xuICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIGRlZmluaXRpb25EZWYsIFsnZGVmaW5pdGlvbnMnLCBuYW1lXSwgdmFsaWRhdG9ycywgcmVzcG9uc2UpO1xuICB9KTtcblxuICAvLyBWYWxpZGF0ZSBnbG9iYWwgcGFyYW1ldGVyIGRlZmluaXRpb25zXG4gIHZhbGlkYXRlUGFyYW1ldGVycyhhcGkucmVzb2x2ZWQucGFyYW1ldGVycywgWydwYXJhbWV0ZXJzJ10pO1xuXG4gIC8vIFZhbGlkYXRlIGdsb2JhbCByZXNwb25zZSBkZWZpbml0aW9uc1xuICB2YWxpZGF0ZVJlc3BvbnNlcyhhcGkucmVzb2x2ZWQucmVzcG9uc2VzLCBbJ3Jlc3BvbnNlcyddKTtcblxuICAvLyBWYWxpZGF0ZSBwYXRocyBhbmQgb3BlcmF0aW9uc1xuICBfLmZvckVhY2goYXBpLnJlc29sdmVkLnBhdGhzLCBmdW5jdGlvbiAocGF0aERlZiwgcGF0aCkge1xuICAgIHZhciBwUGF0aCA9IFsncGF0aHMnLCBwYXRoXTtcblxuICAgIC8vIFZhbGlkYXRlIHBhdGgtbGV2ZWwgcGFyYW1ldGVyIGRlZmluaXRpb25zXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXJzKHBhdGhEZWYucGFyYW1ldGVycywgcFBhdGguY29uY2F0KCdwYXJhbWV0ZXJzJykpO1xuXG4gICAgXy5mb3JFYWNoKHBhdGhEZWYsIGZ1bmN0aW9uIChvcGVyYXRpb25EZWYsIG1ldGhvZCkge1xuICAgICAgdmFyIG9QYXRoID0gcFBhdGguY29uY2F0KG1ldGhvZCk7XG5cbiAgICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgICBpZiAoXy5pbmRleE9mKHZIZWxwZXJzLnN1cHBvcnRlZEh0dHBNZXRob2RzLCBtZXRob2QpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIG9wZXJhdGlvbiBwYXJhbWV0ZXIgZGVmaW5pdGlvbnNcbiAgICAgIHZhbGlkYXRlUGFyYW1ldGVycyhvcGVyYXRpb25EZWYucGFyYW1ldGVycywgb1BhdGguY29uY2F0KCdwYXJhbWV0ZXJzJykpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBvcGVyYXRpb24gcmVzcG9uc2UgZGVmaW5pdGlvbnNcbiAgICAgIHZhbGlkYXRlUmVzcG9uc2VzKG9wZXJhdGlvbkRlZi5yZXNwb25zZXMsIG9QYXRoLmNvbmNhdCgncmVzcG9uc2VzJykpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHBhdGhzIGFuZCBvcGVyYXRpb25zIChXcml0dGVuIGFzIG9uZSB2YWxpZGF0b3IgdG8gYXZvaWQgbXVsdGlwbGUgcGFzc2VzKVxuICpcbiAqICogRW5zdXJlIHRoYXQgcGF0aCBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGZvciBlYWNoIHBhdGggcGFyYW1ldGVyIGRlY2xhcmF0aW9uXG4gKiAqIEVuc3VyZSB0aGF0IGRlZmluZWQgcGF0aCBwYXJhbWV0ZXJzIG1hdGNoIGEgZGVjbGFyZWQgcGF0aCBwYXJhbWV0ZXJcbiAqICogRW5zdXJlIHRoYXQgcGF0aHMgYXJlIGZ1bmN0aW9uYWxseSBkaWZmZXJlbnRcbiAqICogRW5zdXJlIHRoYXQgYW4gb3BlcmF0aW9uIG9ubHkgaGFzIG9uZSBib2R5IHBhcmFtZXRlclxuICogKiBFbnN1cmUgdGhhdCBhbiBvcGVyYXRpb24gaGFzIG9ubHkgYSBib2R5IG9yIGZvcm1EYXRhIHBhcmFtZXRlciBidXQgbm90IGJvdGhcbiAqICogRW5zdXJlIHRoYXQgYWxsIG9wZXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSB1bmlxdWUgKGluICsgbmFtZSlcbiAqICogRW5zdXJlIHRoYXQgYWxsIG9wZXJhdGlvbiBpZHMgYXJlIHVuaXF1ZVxuICogKiBFbnN1cmUgdGhhdCBwYXRoIHBhcmFtZXRlcnMgaGF2ZSBhIG5hbWVcbiAqXG4gKiBAcGFyYW0ge1N3YWdnZXJBcGl9IGFwaSAtIFRoZSBTd2FnZ2VyQXBpIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIG9mIHRoZSB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUGF0aHNBbmRPcGVyYXRpb25zIChhcGkpIHtcbiAgdmFyIHJlc3BvbnNlID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVEdXBsaWNhdGVQYXJhbWV0ZXIgKHNlZW5QYXJhbWV0ZXJzLCBwYXJhbWV0ZXIsIHBhdGgpIHtcbiAgICB2YXIgcE5hbWUgPSBwYXJhbWV0ZXIuaW4gKyAnOicgKyBwYXJhbWV0ZXIubmFtZTtcblxuICAgIC8vIElkZW50aWZ5IGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXNcbiAgICBpZiAoXy5pbmRleE9mKHNlZW5QYXJhbWV0ZXJzLCBwTmFtZSkgPiAtMSkge1xuICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICBjb2RlOiAnRFVQTElDQVRFX1BBUkFNRVRFUicsXG4gICAgICAgIG1lc3NhZ2U6ICdPcGVyYXRpb24gY2Fubm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlcnM6ICcgKyBKc29uUmVmcy5wYXRoVG9QdHIocGF0aCksXG4gICAgICAgIHBhdGg6IHBhdGhcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWVuUGFyYW1ldGVycy5wdXNoKHBOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VlblBhcmFtZXRlcnM7XG4gIH1cblxuICBfLnJlZHVjZShhcGkucmVzb2x2ZWQucGF0aHMsIGZ1bmN0aW9uIChtZXRhZGF0YSwgcGF0aERlZiwgcGF0aCkge1xuICAgIHZhciBkZWNsYXJlZFBhdGhQYXJhbWV0ZXJzID0gW107XG4gICAgdmFyIG5vcm1hbGl6ZWRQYXRoID0gcGF0aDtcbiAgICB2YXIgcFBhdGggPSBbJ3BhdGhzJywgcGF0aF07XG5cbiAgICBfLmZvckVhY2gocGF0aC5tYXRjaCgvXFx7KC4qPylcXH0vZyksIGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIHBhdGggcGFyYW1ldGVyIG5hbWVcbiAgICAgIGRlY2xhcmVkUGF0aFBhcmFtZXRlcnMucHVzaChhcmcucmVwbGFjZSgvW3t9XS9nLCAnJykpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIG5vcm1hbGl6ZWQgcGF0aFxuICAgICAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5yZXBsYWNlKGFyZywgJ2FyZycgKyBpbmRleCk7XG4gICAgfSk7XG5cbiAgICAvLyBJZGVudGlmeSBwYXRocyB3aXRoIGVtcHR5IHBhcmFtZXRlciBkZWNsYXJhdGlvbnNcbiAgICBpZiAoZGVjbGFyZWRQYXRoUGFyYW1ldGVycy5pbmRleE9mKCcnKSA+IC0xKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdFTVBUWV9QQVRIX1BBUkFNRVRFUl9ERUNMQVJBVElPTicsXG4gICAgICAgIG1lc3NhZ2U6ICdQYXRoIHBhcmFtZXRlciBkZWNsYXJhdGlvbiBjYW5ub3QgYmUgZW1wdHk6ICcgKyBwYXRoLFxuICAgICAgICBwYXRoOiBbJ3BhdGhzJywgcGF0aF1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElkZW5maXR5IHBhdGhzIHRoYXQgYXJlIGZ1bmN0aW9uYWxseSB0aGUgc2FtZVxuICAgIGlmIChfLmluZGV4T2YobWV0YWRhdGEucGF0aHMsIG5vcm1hbGl6ZWRQYXRoKSA+IC0xKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdFUVVJVkFMRU5UX1BBVEgnLFxuICAgICAgICBtZXNzYWdlOiAnRXF1aXZhbGVudCBwYXRoIGFscmVhZHkgZXhpc3RzOiAnICsgcGF0aCxcbiAgICAgICAgcGF0aDogcFBhdGhcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXRhZGF0YS5wYXRocy5wdXNoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBJZGVudGlmeSBkdXBsaWNhdGUgcGF0aC1sZXZlbCBwYXJhbWV0ZXJzIChXZSBkbyB0aGlzIG1hbnVhbGx5IHNpbmNlIFN3YWdnZXJBcGkjZ2V0T3BlcmF0aW9uIGNvbnNvbGlkYXRlcyB0aGVtKVxuICAgIF8ucmVkdWNlKHBhdGhEZWYucGFyYW1ldGVycywgZnVuY3Rpb24gKHNlZW5QYXJhbWV0ZXJzLCBwYXJhbWV0ZXIsIGluZGV4KSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVEdXBsaWNhdGVQYXJhbWV0ZXIoc2VlblBhcmFtZXRlcnMsIHBhcmFtZXRlciwgcFBhdGguY29uY2F0KFsncGFyYW1ldGVycycsIGluZGV4LnRvU3RyaW5nKCldKSk7XG4gICAgfSwgW10pO1xuXG4gICAgXy5mb3JFYWNoKHBhdGhEZWYsIGZ1bmN0aW9uIChvcGVyYXRpb25EZWYsIG1ldGhvZCkge1xuICAgICAgdmFyIGRlZmluZWRQYXRoUGFyYW1ldGVycyA9IHt9O1xuICAgICAgdmFyIG9QYXRoID0gcFBhdGguY29uY2F0KG1ldGhvZCk7XG4gICAgICB2YXIgb3BlcmF0aW9uSWQgPSBvcGVyYXRpb25EZWYub3BlcmF0aW9uSWQ7XG4gICAgICB2YXIgcGF0aE1ldGFkYXRhO1xuICAgICAgdmFyIHBhcmFtZXRlcnM7XG5cbiAgICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgICBpZiAoXy5pbmRleE9mKHZIZWxwZXJzLnN1cHBvcnRlZEh0dHBNZXRob2RzLCBtZXRob2QpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIElkZW50aWZ5IGR1cGxpY2F0ZSBvcGVyYXRpb25JZHNcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChvcGVyYXRpb25JZCkpIHtcbiAgICAgICAgaWYgKF8uaW5kZXhPZihtZXRhZGF0YS5vcGVyYXRpb25JZHMsIG9wZXJhdGlvbklkKSAhPT0gLTEpIHtcbiAgICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiAnRFVQTElDQVRFX09QRVJBVElPTklEJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDYW5ub3QgaGF2ZSBtdWx0aXBsZSBvcGVyYXRpb25zIHdpdGggdGhlIHNhbWUgb3BlcmF0aW9uSWQ6ICcgKyBvcGVyYXRpb25JZCxcbiAgICAgICAgICAgIHBhdGg6IG9QYXRoLmNvbmNhdChbJ29wZXJhdGlvbklkJ10pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWV0YWRhdGEub3BlcmF0aW9uSWRzLnB1c2gob3BlcmF0aW9uSWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElkZW50aWZ5IGR1cGxpY2F0ZSBvcGVyYXRpb24tbGV2ZWwgcGFyYW1ldGVycyAoV2UgZG8gdGhpcyBtYW51YWxseSBmb3IgdGhlIHNhbWUgcmVhc29ucyBhYm92ZSlcbiAgICAgIF8ucmVkdWNlKG9wZXJhdGlvbkRlZi5wYXJhbWV0ZXJzLCBmdW5jdGlvbiAoc2VlblBhcmFtZXRlcnMsIHBhcmFtZXRlciwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRHVwbGljYXRlUGFyYW1ldGVyKHNlZW5QYXJhbWV0ZXJzLCBwYXJhbWV0ZXIsIG9QYXRoLmNvbmNhdChbJ3BhcmFtZXRlcnMnLCBpbmRleC50b1N0cmluZygpXSkpO1xuICAgICAgfSwgW10pO1xuXG4gICAgICAvLyBVc2UgU3dhZ2dlckFwaSNnZXRPcGVyYXRpb24gdG8gYXZvaWQgaGF2aW5nIHRvIGNvbnNvbGlkYXRlIHBhcmFtZXRlcnNcbiAgICAgIHBhcmFtZXRlcnMgPSBhcGkuZ2V0T3BlcmF0aW9uKHBhdGgsIG1ldGhvZCkuZ2V0UGFyYW1ldGVycygpO1xuXG4gICAgICBwYXRoTWV0YWRhdGEgPSBfLnJlZHVjZShwYXJhbWV0ZXJzLCBmdW5jdGlvbiAocE1ldGFkYXRhLCBwYXJhbWV0ZXIpIHtcbiAgICAgICAgLy8gUmVjb3JkIHBhdGggcGFyYW1ldGVyc1xuICAgICAgICBpZiAocGFyYW1ldGVyLmluID09PSAncGF0aCcpIHtcbiAgICAgICAgICBkZWZpbmVkUGF0aFBhcmFtZXRlcnNbcGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVyLnB0cjtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIuaW4gPT09ICdib2R5Jykge1xuICAgICAgICAgIHBNZXRhZGF0YS5ib2R5UGFyYW1ldGV0ZXJzICs9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLmluID09PSAnZm9ybURhdGEnKSB7XG4gICAgICAgICAgcE1ldGFkYXRhLmZvcm1QYXJhbWV0ZXJzICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcE1ldGFkYXRhO1xuICAgICAgfSwge2JvZHlQYXJhbWV0ZXRlcnM6IDAsIGZvcm1QYXJhbWV0ZXJzOiAwfSk7XG5cbiAgICAgIC8vIElkZW50aWZ5IG11bHRpcGxlIGJvZHkgcGFyYW1ldGVyc1xuICAgICAgaWYgKHBhdGhNZXRhZGF0YS5ib2R5UGFyYW1ldGV0ZXJzID4gMSkge1xuICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ01VTFRJUExFX0JPRFlfUEFSQU1FVEVSUycsXG4gICAgICAgICAgbWVzc2FnZTogJ09wZXJhdGlvbiBjYW5ub3QgaGF2ZSBtdWx0aXBsZSBib2R5IHBhcmFtZXRlcnMnLFxuICAgICAgICAgIHBhdGg6IG9QYXRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVudGlmeSBoYXZpbmcgYm90aCBhIGJvZHkgYW5kIGEgZm9ybSBwYXJhbWV0ZXJcbiAgICAgIGlmIChwYXRoTWV0YWRhdGEuYm9keVBhcmFtZXRldGVycyA+IDAgJiYgcGF0aE1ldGFkYXRhLmZvcm1QYXJhbWV0ZXJzID4gMCkge1xuICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ0lOVkFMSURfUEFSQU1FVEVSX0NPTUJJTkFUSU9OJyxcbiAgICAgICAgICBtZXNzYWdlOiAnT3BlcmF0aW9uIGNhbm5vdCBoYXZlIGEgYm9keSBwYXJhbWV0ZXIgYW5kIGEgZm9ybURhdGEgcGFyYW1ldGVyJyxcbiAgICAgICAgICBwYXRoOiBvUGF0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSWRlbnRpZnkgdW5kZWZpbmVkIHBhdGggcGFyYW1ldGVyc1xuICAgICAgXy5mb3JFYWNoKF8uZGlmZmVyZW5jZShkZWNsYXJlZFBhdGhQYXJhbWV0ZXJzLCBfLmtleXMoZGVmaW5lZFBhdGhQYXJhbWV0ZXJzKSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnTUlTU0lOR19QQVRIX1BBUkFNRVRFUl9ERUZJTklUSU9OJyxcbiAgICAgICAgICBtZXNzYWdlOiAnUGF0aCBwYXJhbWV0ZXIgaXMgZGVjbGFyZWQgYnV0IGlzIG5vdCBkZWZpbmVkOiAnICsgbmFtZSxcbiAgICAgICAgICBwYXRoOiBvUGF0aFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZGVudGlmeSB1bmRlY2xhcmVkIHBhdGggcGFyYW1ldGVyc1xuICAgICAgXy5mb3JFYWNoKF8uZGlmZmVyZW5jZShfLmtleXMoZGVmaW5lZFBhdGhQYXJhbWV0ZXJzKSwgZGVjbGFyZWRQYXRoUGFyYW1ldGVycyksIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnTUlTU0lOR19QQVRIX1BBUkFNRVRFUl9ERUNMQVJBVElPTicsXG4gICAgICAgICAgbWVzc2FnZTogJ1BhdGggcGFyYW1ldGVyIGlzIGRlZmluZWQgYnV0IGlzIG5vdCBkZWNsYXJlZDogJyArIG5hbWUsXG4gICAgICAgICAgcGF0aDogSnNvblJlZnMucGF0aEZyb21QdHIoZGVmaW5lZFBhdGhQYXJhbWV0ZXJzW25hbWVdKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9LCB7cGF0aHM6IFtdLCBvcGVyYXRpb25JZHM6IFtdfSk7XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAganNvblNjaGVtYVZhbGlkYXRvcjogdmFsaWRhdGVTdHJ1Y3R1cmUsXG4gIHNlbWFudGljVmFsaWRhdG9yczogW1xuICAgIHZhbGlkYXRlUmVmZXJlbmNlcyxcbiAgICB2YWxpZGF0ZVNjaGVtYU9iamVjdHMsXG4gICAgdmFsaWRhdGVQYXRoc0FuZE9wZXJhdGlvbnNcbiAgXVxufTtcbiIsInZhciBsb29rdXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cbjsoZnVuY3Rpb24gKGV4cG9ydHMpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG4gIHZhciBBcnIgPSAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKVxuICAgID8gVWludDhBcnJheVxuICAgIDogQXJyYXlcblxuXHR2YXIgUExVUyAgID0gJysnLmNoYXJDb2RlQXQoMClcblx0dmFyIFNMQVNIICA9ICcvJy5jaGFyQ29kZUF0KDApXG5cdHZhciBOVU1CRVIgPSAnMCcuY2hhckNvZGVBdCgwKVxuXHR2YXIgTE9XRVIgID0gJ2EnLmNoYXJDb2RlQXQoMClcblx0dmFyIFVQUEVSICA9ICdBJy5jaGFyQ29kZUF0KDApXG5cdHZhciBQTFVTX1VSTF9TQUZFID0gJy0nLmNoYXJDb2RlQXQoMClcblx0dmFyIFNMQVNIX1VSTF9TQUZFID0gJ18nLmNoYXJDb2RlQXQoMClcblxuXHRmdW5jdGlvbiBkZWNvZGUgKGVsdCkge1xuXHRcdHZhciBjb2RlID0gZWx0LmNoYXJDb2RlQXQoMClcblx0XHRpZiAoY29kZSA9PT0gUExVUyB8fFxuXHRcdCAgICBjb2RlID09PSBQTFVTX1VSTF9TQUZFKVxuXHRcdFx0cmV0dXJuIDYyIC8vICcrJ1xuXHRcdGlmIChjb2RlID09PSBTTEFTSCB8fFxuXHRcdCAgICBjb2RlID09PSBTTEFTSF9VUkxfU0FGRSlcblx0XHRcdHJldHVybiA2MyAvLyAnLydcblx0XHRpZiAoY29kZSA8IE5VTUJFUilcblx0XHRcdHJldHVybiAtMSAvL25vIG1hdGNoXG5cdFx0aWYgKGNvZGUgPCBOVU1CRVIgKyAxMClcblx0XHRcdHJldHVybiBjb2RlIC0gTlVNQkVSICsgMjYgKyAyNlxuXHRcdGlmIChjb2RlIDwgVVBQRVIgKyAyNilcblx0XHRcdHJldHVybiBjb2RlIC0gVVBQRVJcblx0XHRpZiAoY29kZSA8IExPV0VSICsgMjYpXG5cdFx0XHRyZXR1cm4gY29kZSAtIExPV0VSICsgMjZcblx0fVxuXG5cdGZ1bmN0aW9uIGI2NFRvQnl0ZUFycmF5IChiNjQpIHtcblx0XHR2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuXG5cdFx0aWYgKGI2NC5sZW5ndGggJSA0ID4gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Jylcblx0XHR9XG5cblx0XHQvLyB0aGUgbnVtYmVyIG9mIGVxdWFsIHNpZ25zIChwbGFjZSBob2xkZXJzKVxuXHRcdC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcblx0XHQvLyByZXByZXNlbnQgb25lIGJ5dGVcblx0XHQvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiB0aGUgdGhyZWUgY2hhcmFjdGVycyBiZWZvcmUgaXQgcmVwcmVzZW50IDIgYnl0ZXNcblx0XHQvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG5cdFx0dmFyIGxlbiA9IGI2NC5sZW5ndGhcblx0XHRwbGFjZUhvbGRlcnMgPSAnPScgPT09IGI2NC5jaGFyQXQobGVuIC0gMikgPyAyIDogJz0nID09PSBiNjQuY2hhckF0KGxlbiAtIDEpID8gMSA6IDBcblxuXHRcdC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuXHRcdGFyciA9IG5ldyBBcnIoYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG5cdFx0Ly8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuXHRcdGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gYjY0Lmxlbmd0aCAtIDQgOiBiNjQubGVuZ3RoXG5cblx0XHR2YXIgTCA9IDBcblxuXHRcdGZ1bmN0aW9uIHB1c2ggKHYpIHtcblx0XHRcdGFycltMKytdID0gdlxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTgpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgMTIpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAyKSkgPDwgNikgfCBkZWNvZGUoYjY0LmNoYXJBdChpICsgMykpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDAwMCkgPj4gMTYpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDApID4+IDgpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fVxuXG5cdFx0aWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuXHRcdFx0dG1wID0gKGRlY29kZShiNjQuY2hhckF0KGkpKSA8PCAyKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpID4+IDQpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fSBlbHNlIGlmIChwbGFjZUhvbGRlcnMgPT09IDEpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTApIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgNCkgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDIpKSA+PiAyKVxuXHRcdFx0cHVzaCgodG1wID4+IDgpICYgMHhGRilcblx0XHRcdHB1c2godG1wICYgMHhGRilcblx0XHR9XG5cblx0XHRyZXR1cm4gYXJyXG5cdH1cblxuXHRmdW5jdGlvbiB1aW50OFRvQmFzZTY0ICh1aW50OCkge1xuXHRcdHZhciBpLFxuXHRcdFx0ZXh0cmFCeXRlcyA9IHVpbnQ4Lmxlbmd0aCAlIDMsIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG5cdFx0XHRvdXRwdXQgPSBcIlwiLFxuXHRcdFx0dGVtcCwgbGVuZ3RoXG5cblx0XHRmdW5jdGlvbiBlbmNvZGUgKG51bSkge1xuXHRcdFx0cmV0dXJuIGxvb2t1cC5jaGFyQXQobnVtKVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlKG51bSA+PiAxOCAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiAxMiAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiA2ICYgMHgzRikgKyBlbmNvZGUobnVtICYgMHgzRilcblx0XHR9XG5cblx0XHQvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG5cdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gdWludDgubGVuZ3RoIC0gZXh0cmFCeXRlczsgaSA8IGxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHR0ZW1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuXHRcdFx0b3V0cHV0ICs9IHRyaXBsZXRUb0Jhc2U2NCh0ZW1wKVxuXHRcdH1cblxuXHRcdC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcblx0XHRzd2l0Y2ggKGV4dHJhQnl0ZXMpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0dGVtcCA9IHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDFdXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUodGVtcCA+PiAyKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wIDw8IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9ICc9PSdcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0dGVtcCA9ICh1aW50OFt1aW50OC5sZW5ndGggLSAyXSA8PCA4KSArICh1aW50OFt1aW50OC5sZW5ndGggLSAxXSlcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSh0ZW1wID4+IDEwKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wID4+IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSgodGVtcCA8PCAyKSAmIDB4M0YpXG5cdFx0XHRcdG91dHB1dCArPSAnPSdcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cblxuXHRleHBvcnRzLnRvQnl0ZUFycmF5ID0gYjY0VG9CeXRlQXJyYXlcblx0ZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gdWludDhUb0Jhc2U2NFxufSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcgPyAodGhpcy5iYXNlNjRqcyA9IHt9KSA6IGV4cG9ydHMpKVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG52YXIgcm9vdFBhcmVudCA9IHt9XG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gU2FmYXJpIDUtNyBsYWNrcyBzdXBwb3J0IGZvciBjaGFuZ2luZyB0aGUgYE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3JgIHByb3BlcnR5XG4gKiAgICAgb24gb2JqZWN0cy5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIGZ1bmN0aW9uIEJhciAoKSB7fVxuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5mb28gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9XG4gICAgYXJyLmNvbnN0cnVjdG9yID0gQmFyXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgYXJyLmNvbnN0cnVjdG9yID09PSBCYXIgJiYgLy8gY29uc3RydWN0b3IgY2FuIGJlIHNldFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG4vKipcbiAqIENsYXNzOiBCdWZmZXJcbiAqID09PT09PT09PT09PT1cbiAqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGFyZSBhdWdtZW50ZWRcbiAqIHdpdGggZnVuY3Rpb24gcHJvcGVydGllcyBmb3IgYWxsIHRoZSBub2RlIGBCdWZmZXJgIEFQSSBmdW5jdGlvbnMuIFdlIHVzZVxuICogYFVpbnQ4QXJyYXlgIHNvIHRoYXQgc3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXQgcmV0dXJuc1xuICogYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogQnkgYXVnbWVudGluZyB0aGUgaW5zdGFuY2VzLCB3ZSBjYW4gYXZvaWQgbW9kaWZ5aW5nIHRoZSBgVWludDhBcnJheWBcbiAqIHByb3RvdHlwZS5cbiAqL1xuZnVuY3Rpb24gQnVmZmVyIChhcmcpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICAvLyBBdm9pZCBnb2luZyB0aHJvdWdoIGFuIEFyZ3VtZW50c0FkYXB0b3JUcmFtcG9saW5lIGluIHRoZSBjb21tb24gY2FzZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHJldHVybiBuZXcgQnVmZmVyKGFyZywgYXJndW1lbnRzWzFdKVxuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZylcbiAgfVxuXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmcm9tTnVtYmVyKHRoaXMsIGFyZylcbiAgfVxuXG4gIC8vIFNsaWdodGx5IGxlc3MgY29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoaXMsIGFyZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiAndXRmOCcpXG4gIH1cblxuICAvLyBVbnVzdWFsLlxuICByZXR1cm4gZnJvbU9iamVjdCh0aGlzLCBhcmcpXG59XG5cbmZ1bmN0aW9uIGZyb21OdW1iZXIgKHRoYXQsIGxlbmd0aCkge1xuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGxlbmd0aCkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgLy8gQXNzdW1wdGlvbjogYnl0ZUxlbmd0aCgpIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgPCBrTWF4TGVuZ3RoLlxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcblxuICB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iamVjdCkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iamVjdCkpIHJldHVybiBmcm9tQnVmZmVyKHRoYXQsIG9iamVjdClcblxuICBpZiAoaXNBcnJheShvYmplY3QpKSByZXR1cm4gZnJvbUFycmF5KHRoYXQsIG9iamVjdClcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHN0YXJ0IHdpdGggbnVtYmVyLCBidWZmZXIsIGFycmF5IG9yIHN0cmluZycpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChvYmplY3QuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBmcm9tVHlwZWRBcnJheSh0aGF0LCBvYmplY3QpXG4gICAgfVxuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCBvYmplY3QpXG4gICAgfVxuICB9XG5cbiAgaWYgKG9iamVjdC5sZW5ndGgpIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iamVjdClcblxuICByZXR1cm4gZnJvbUpzb25PYmplY3QodGhhdCwgb2JqZWN0KVxufVxuXG5mdW5jdGlvbiBmcm9tQnVmZmVyICh0aGF0LCBidWZmZXIpIHtcbiAgdmFyIGxlbmd0aCA9IGNoZWNrZWQoYnVmZmVyLmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG4gIGJ1ZmZlci5jb3B5KHRoYXQsIDAsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5ICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLy8gRHVwbGljYXRlIG9mIGZyb21BcnJheSgpIHRvIGtlZXAgZnJvbUFycmF5KCkgbW9ub21vcnBoaWMuXG5mdW5jdGlvbiBmcm9tVHlwZWRBcnJheSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcbiAgLy8gVHJ1bmNhdGluZyB0aGUgZWxlbWVudHMgaXMgcHJvYmFibHkgbm90IHdoYXQgcGVvcGxlIGV4cGVjdCBmcm9tIHR5cGVkXG4gIC8vIGFycmF5cyB3aXRoIEJZVEVTX1BFUl9FTEVNRU5UID4gMSBidXQgaXQncyBjb21wYXRpYmxlIHdpdGggdGhlIGJlaGF2aW9yXG4gIC8vIG9mIHRoZSBvbGQgQnVmZmVyIGNvbnN0cnVjdG9yLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSkge1xuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICBhcnJheS5ieXRlTGVuZ3RoXG4gICAgdGhhdCA9IEJ1ZmZlci5fYXVnbWVudChuZXcgVWludDhBcnJheShhcnJheSkpXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tVHlwZWRBcnJheSh0aGF0LCBuZXcgVWludDhBcnJheShhcnJheSkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8vIERlc2VyaWFsaXplIHsgdHlwZTogJ0J1ZmZlcicsIGRhdGE6IFsxLDIsMywuLi5dIH0gaW50byBhIEJ1ZmZlciBvYmplY3QuXG4vLyBSZXR1cm5zIGEgemVyby1sZW5ndGggYnVmZmVyIGZvciBpbnB1dHMgdGhhdCBkb24ndCBjb25mb3JtIHRvIHRoZSBzcGVjLlxuZnVuY3Rpb24gZnJvbUpzb25PYmplY3QgKHRoYXQsIG9iamVjdCkge1xuICB2YXIgYXJyYXlcbiAgdmFyIGxlbmd0aCA9IDBcblxuICBpZiAob2JqZWN0LnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqZWN0LmRhdGEpKSB7XG4gICAgYXJyYXkgPSBvYmplY3QuZGF0YVxuICAgIGxlbmd0aCA9IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgfVxuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxufSBlbHNlIHtcbiAgLy8gcHJlLXNldCBmb3IgdmFsdWVzIHRoYXQgbWF5IGV4aXN0IGluIHRoZSBmdXR1cmVcbiAgQnVmZmVyLnByb3RvdHlwZS5sZW5ndGggPSB1bmRlZmluZWRcbiAgQnVmZmVyLnByb3RvdHlwZS5wYXJlbnQgPSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gYWxsb2NhdGUgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gQnVmZmVyLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGxlbmd0aCkpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gICAgdGhhdC5faXNCdWZmZXIgPSB0cnVlXG4gIH1cblxuICB2YXIgZnJvbVBvb2wgPSBsZW5ndGggIT09IDAgJiYgbGVuZ3RoIDw9IEJ1ZmZlci5wb29sU2l6ZSA+Pj4gMVxuICBpZiAoZnJvbVBvb2wpIHRoYXQucGFyZW50ID0gcm9vdFBhcmVudFxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAoc3ViamVjdCwgZW5jb2RpbmcpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNsb3dCdWZmZXIpKSByZXR1cm4gbmV3IFNsb3dCdWZmZXIoc3ViamVjdCwgZW5jb2RpbmcpXG5cbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoc3ViamVjdCwgZW5jb2RpbmcpXG4gIGRlbGV0ZSBidWYucGFyZW50XG4gIHJldHVybiBidWZcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIHZhciBpID0gMFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkgYnJlYWtcblxuICAgICsraVxuICB9XG5cbiAgaWYgKGkgIT09IGxlbikge1xuICAgIHggPSBhW2ldXG4gICAgeSA9IGJbaV1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAncmF3JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbGlzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMuJylcblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcigwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgaXRlbS5jb3B5KGJ1ZiwgcG9zKVxuICAgIHBvcyArPSBpdGVtLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHN0cmluZyA9ICcnICsgc3RyaW5nXG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAvLyBEZXByZWNhdGVkXG4gICAgICBjYXNlICdyYXcnOlxuICAgICAgY2FzZSAncmF3cyc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgc3RhcnQgPSBzdGFydCB8IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID09PSBJbmZpbml0eSA/IHRoaXMubGVuZ3RoIDogZW5kIHwgMFxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG4gIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiAnJ1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGJpbmFyeVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gMFxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYilcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0KSB7XG4gIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgYnl0ZU9mZnNldCA+Pj0gMFxuXG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG4gIGlmIChieXRlT2Zmc2V0ID49IHRoaXMubGVuZ3RoKSByZXR1cm4gLTFcblxuICAvLyBOZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoICsgYnl0ZU9mZnNldCwgMClcblxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xIC8vIHNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nIGFsd2F5cyBmYWlsc1xuICAgIHJldHVybiBTdHJpbmcucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCB2YWwsIGJ5dGVPZmZzZXQpXG4gIH1cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcywgdmFsLCBieXRlT2Zmc2V0KVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKHRoaXMsIFsgdmFsIF0sIGJ5dGVPZmZzZXQpXG4gIH1cblxuICBmdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0KSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAodmFyIGkgPSAwOyBieXRlT2Zmc2V0ICsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycltieXRlT2Zmc2V0ICsgaV0gPT09IHZhbFtmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleF0pIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWwubGVuZ3RoKSByZXR1cm4gYnl0ZU9mZnNldCArIGZvdW5kSW5kZXhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTFcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbi8vIGBnZXRgIGlzIGRlcHJlY2F0ZWRcbkJ1ZmZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChvZmZzZXQpIHtcbiAgY29uc29sZS5sb2coJy5nZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLicpXG4gIHJldHVybiB0aGlzLnJlYWRVSW50OChvZmZzZXQpXG59XG5cbi8vIGBzZXRgIGlzIGRlcHJlY2F0ZWRcbkJ1ZmZlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gc2V0ICh2LCBvZmZzZXQpIHtcbiAgY29uc29sZS5sb2coJy5zZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLicpXG4gIHJldHVybiB0aGlzLndyaXRlVUludDgodiwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJpbmFyeVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3dhcCA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBvZmZzZXQgPSBsZW5ndGggfCAwXG4gICAgbGVuZ3RoID0gc3dhcFxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBiaW5hcnlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSBCdWZmZXIuX2F1Z21lbnQodGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSlcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyBpKyspIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIGlmIChuZXdCdWYubGVuZ3RoKSBuZXdCdWYucGFyZW50ID0gdGhpcy5wYXJlbnQgfHwgdGhpc1xuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCd2YWx1ZSBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSwgMClcblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSwgMClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyBpKyspIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgaSsrKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IHZhbHVlIDwgMCA/IDEgOiAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gdmFsdWUgPCAwID8gMSA6IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmFsdWUgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRhcmdldC5fc2V0KHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSwgdGFyZ2V0U3RhcnQpXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIGZpbGwodmFsdWUsIHN0YXJ0PTAsIGVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCF2YWx1ZSkgdmFsdWUgPSAwXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCkgZW5kID0gdGhpcy5sZW5ndGhcblxuICBpZiAoZW5kIDwgc3RhcnQpIHRocm93IG5ldyBSYW5nZUVycm9yKCdlbmQgPCBzdGFydCcpXG5cbiAgLy8gRmlsbCAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdGhpc1tpXSA9IHZhbHVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IHV0ZjhUb0J5dGVzKHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHRoaXNbaV0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBgQXJyYXlCdWZmZXJgIHdpdGggdGhlICpjb3BpZWQqIG1lbW9yeSBvZiB0aGUgYnVmZmVyIGluc3RhbmNlLlxuICogQWRkZWQgaW4gTm9kZSAwLjEyLiBPbmx5IGF2YWlsYWJsZSBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgQXJyYXlCdWZmZXIuXG4gKi9cbkJ1ZmZlci5wcm90b3R5cGUudG9BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIHRvQXJyYXlCdWZmZXIgKCkge1xuICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgICByZXR1cm4gKG5ldyBCdWZmZXIodGhpcykpLmJ1ZmZlclxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgpXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnVmLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIGJ1ZltpXSA9IHRoaXNbaV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBidWYuYnVmZmVyXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1ZmZlci50b0FycmF5QnVmZmVyIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyJylcbiAgfVxufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBCUCA9IEJ1ZmZlci5wcm90b3R5cGVcblxuLyoqXG4gKiBBdWdtZW50IGEgVWludDhBcnJheSAqaW5zdGFuY2UqIChub3QgdGhlIFVpbnQ4QXJyYXkgY2xhc3MhKSB3aXRoIEJ1ZmZlciBtZXRob2RzXG4gKi9cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIF9hdWdtZW50IChhcnIpIHtcbiAgYXJyLmNvbnN0cnVjdG9yID0gQnVmZmVyXG4gIGFyci5faXNCdWZmZXIgPSB0cnVlXG5cbiAgLy8gc2F2ZSByZWZlcmVuY2UgdG8gb3JpZ2luYWwgVWludDhBcnJheSBzZXQgbWV0aG9kIGJlZm9yZSBvdmVyd3JpdGluZ1xuICBhcnIuX3NldCA9IGFyci5zZXRcblxuICAvLyBkZXByZWNhdGVkXG4gIGFyci5nZXQgPSBCUC5nZXRcbiAgYXJyLnNldCA9IEJQLnNldFxuXG4gIGFyci53cml0ZSA9IEJQLndyaXRlXG4gIGFyci50b1N0cmluZyA9IEJQLnRvU3RyaW5nXG4gIGFyci50b0xvY2FsZVN0cmluZyA9IEJQLnRvU3RyaW5nXG4gIGFyci50b0pTT04gPSBCUC50b0pTT05cbiAgYXJyLmVxdWFscyA9IEJQLmVxdWFsc1xuICBhcnIuY29tcGFyZSA9IEJQLmNvbXBhcmVcbiAgYXJyLmluZGV4T2YgPSBCUC5pbmRleE9mXG4gIGFyci5jb3B5ID0gQlAuY29weVxuICBhcnIuc2xpY2UgPSBCUC5zbGljZVxuICBhcnIucmVhZFVJbnRMRSA9IEJQLnJlYWRVSW50TEVcbiAgYXJyLnJlYWRVSW50QkUgPSBCUC5yZWFkVUludEJFXG4gIGFyci5yZWFkVUludDggPSBCUC5yZWFkVUludDhcbiAgYXJyLnJlYWRVSW50MTZMRSA9IEJQLnJlYWRVSW50MTZMRVxuICBhcnIucmVhZFVJbnQxNkJFID0gQlAucmVhZFVJbnQxNkJFXG4gIGFyci5yZWFkVUludDMyTEUgPSBCUC5yZWFkVUludDMyTEVcbiAgYXJyLnJlYWRVSW50MzJCRSA9IEJQLnJlYWRVSW50MzJCRVxuICBhcnIucmVhZEludExFID0gQlAucmVhZEludExFXG4gIGFyci5yZWFkSW50QkUgPSBCUC5yZWFkSW50QkVcbiAgYXJyLnJlYWRJbnQ4ID0gQlAucmVhZEludDhcbiAgYXJyLnJlYWRJbnQxNkxFID0gQlAucmVhZEludDE2TEVcbiAgYXJyLnJlYWRJbnQxNkJFID0gQlAucmVhZEludDE2QkVcbiAgYXJyLnJlYWRJbnQzMkxFID0gQlAucmVhZEludDMyTEVcbiAgYXJyLnJlYWRJbnQzMkJFID0gQlAucmVhZEludDMyQkVcbiAgYXJyLnJlYWRGbG9hdExFID0gQlAucmVhZEZsb2F0TEVcbiAgYXJyLnJlYWRGbG9hdEJFID0gQlAucmVhZEZsb2F0QkVcbiAgYXJyLnJlYWREb3VibGVMRSA9IEJQLnJlYWREb3VibGVMRVxuICBhcnIucmVhZERvdWJsZUJFID0gQlAucmVhZERvdWJsZUJFXG4gIGFyci53cml0ZVVJbnQ4ID0gQlAud3JpdGVVSW50OFxuICBhcnIud3JpdGVVSW50TEUgPSBCUC53cml0ZVVJbnRMRVxuICBhcnIud3JpdGVVSW50QkUgPSBCUC53cml0ZVVJbnRCRVxuICBhcnIud3JpdGVVSW50MTZMRSA9IEJQLndyaXRlVUludDE2TEVcbiAgYXJyLndyaXRlVUludDE2QkUgPSBCUC53cml0ZVVJbnQxNkJFXG4gIGFyci53cml0ZVVJbnQzMkxFID0gQlAud3JpdGVVSW50MzJMRVxuICBhcnIud3JpdGVVSW50MzJCRSA9IEJQLndyaXRlVUludDMyQkVcbiAgYXJyLndyaXRlSW50TEUgPSBCUC53cml0ZUludExFXG4gIGFyci53cml0ZUludEJFID0gQlAud3JpdGVJbnRCRVxuICBhcnIud3JpdGVJbnQ4ID0gQlAud3JpdGVJbnQ4XG4gIGFyci53cml0ZUludDE2TEUgPSBCUC53cml0ZUludDE2TEVcbiAgYXJyLndyaXRlSW50MTZCRSA9IEJQLndyaXRlSW50MTZCRVxuICBhcnIud3JpdGVJbnQzMkxFID0gQlAud3JpdGVJbnQzMkxFXG4gIGFyci53cml0ZUludDMyQkUgPSBCUC53cml0ZUludDMyQkVcbiAgYXJyLndyaXRlRmxvYXRMRSA9IEJQLndyaXRlRmxvYXRMRVxuICBhcnIud3JpdGVGbG9hdEJFID0gQlAud3JpdGVGbG9hdEJFXG4gIGFyci53cml0ZURvdWJsZUxFID0gQlAud3JpdGVEb3VibGVMRVxuICBhcnIud3JpdGVEb3VibGVCRSA9IEJQLndyaXRlRG91YmxlQkVcbiAgYXJyLmZpbGwgPSBCUC5maWxsXG4gIGFyci5pbnNwZWN0ID0gQlAuaW5zcGVjdFxuICBhcnIudG9BcnJheUJ1ZmZlciA9IEJQLnRvQXJyYXlCdWZmZXJcblxuICByZXR1cm4gYXJyXG59XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCIvLyAgQ2hhbmNlLmpzIDAuOC4wXG4vLyAgaHR0cDovL2NoYW5jZWpzLmNvbVxuLy8gIChjKSAyMDEzIFZpY3RvciBRdWlublxuLy8gIENoYW5jZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIENvbnN0YW50c1xuICAgIHZhciBNQVhfSU5UID0gOTAwNzE5OTI1NDc0MDk5MjtcbiAgICB2YXIgTUlOX0lOVCA9IC1NQVhfSU5UO1xuICAgIHZhciBOVU1CRVJTID0gJzAxMjM0NTY3ODknO1xuICAgIHZhciBDSEFSU19MT1dFUiA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG4gICAgdmFyIENIQVJTX1VQUEVSID0gQ0hBUlNfTE9XRVIudG9VcHBlckNhc2UoKTtcbiAgICB2YXIgSEVYX1BPT0wgID0gTlVNQkVSUyArIFwiYWJjZGVmXCI7XG5cbiAgICAvLyBDYWNoZWQgYXJyYXkgaGVscGVyc1xuICAgIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuICAgIC8vIENvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gQ2hhbmNlIChzZWVkKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDaGFuY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VlZCA9PSBudWxsID8gbmV3IENoYW5jZSgpIDogbmV3IENoYW5jZShzZWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHVzZXIgaGFzIHByb3ZpZGVkIGEgZnVuY3Rpb24sIHVzZSB0aGF0IGFzIHRoZSBnZW5lcmF0b3JcbiAgICAgICAgaWYgKHR5cGVvZiBzZWVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnJhbmRvbSA9IHNlZWQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzZXQgYSBzdGFydGluZyB2YWx1ZSBvZiB6ZXJvIHNvIHdlIGNhbiBhZGQgdG8gaXRcbiAgICAgICAgICAgIHRoaXMuc2VlZCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvdGhlcndpc2UsIGxlYXZlIHRoaXMuc2VlZCBibGFuayBzbyB0aGF0IE1UIHdpbGwgcmVjZWl2ZSBhIGJsYW5rXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzZWVkbGluZyA9IDA7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50c1tpXSkgPT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcmd1bWVudHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgbnVtZXJpYyBoYXNoIGZvciBlYWNoIGFyZ3VtZW50LCBhZGQgdG8gc2VlZGxpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGFyZ3VtZW50c1tpXS5jaGFyQ29kZUF0KGspICsgKGhhc2ggPDwgNikgKyAoaGFzaCA8PCAxNikgLSBoYXNoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlZWRsaW5nICs9IGhhc2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWVkbGluZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VlZCArPSAoYXJndW1lbnRzLmxlbmd0aCAtIGkpICogc2VlZGxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBubyBnZW5lcmF0b3IgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB1c2Ugb3VyIE1UXG4gICAgICAgIHRoaXMubXQgPSB0aGlzLm1lcnNlbm5lX3R3aXN0ZXIodGhpcy5zZWVkKTtcbiAgICAgICAgdGhpcy5iaW1kNSA9IHRoaXMuYmx1ZWltcF9tZDUoKTtcbiAgICAgICAgdGhpcy5yYW5kb20gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tdC5yYW5kb20odGhpcy5zZWVkKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLlZFUlNJT04gPSBcIjAuOC4wXCI7XG5cbiAgICAvLyBSYW5kb20gaGVscGVyIGZ1bmN0aW9uc1xuICAgIGZ1bmN0aW9uIGluaXRPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gICAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG5cbiAgICAgICAgaWYgKGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gZGVmYXVsdHNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGVzdFJhbmdlKHRlc3QsIGVycm9yTWVzc2FnZSkge1xuICAgICAgICBpZiAodGVzdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuY29kZSB0aGUgaW5wdXQgc3RyaW5nIHdpdGggQmFzZTY0LlxuICAgICAqL1xuICAgIHZhciBiYXNlNjQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBCYXNlNjQgZW5jb2RlciBhdmFpbGFibGUuJyk7XG4gICAgfTtcblxuICAgIC8vIFNlbGVjdCBwcm9wZXIgQmFzZTY0IGVuY29kZXIuXG4gICAgKGZ1bmN0aW9uIGRldGVybWluZUJhc2U2NEVuY29kZXIoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYmFzZTY0ID0gYnRvYTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBiYXNlNjQgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKGlucHV0KS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSkoKTtcblxuICAgIC8vIC0tIEJhc2ljcyAtLVxuXG4gICAgLyoqXG4gICAgICogIFJldHVybiBhIHJhbmRvbSBib29sLCBlaXRoZXIgdHJ1ZSBvciBmYWxzZVxuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17IGxpa2VsaWhvb2Q6IDUwIH1dIGFsdGVyIHRoZSBsaWtlbGlob29kIG9mXG4gICAgICogICAgcmVjZWl2aW5nIGEgdHJ1ZSBvciBmYWxzZSB2YWx1ZSBiYWNrLlxuICAgICAqICBAdGhyb3dzIHtSYW5nZUVycm9yfSBpZiB0aGUgbGlrZWxpaG9vZCBpcyBvdXQgb2YgYm91bmRzXG4gICAgICogIEByZXR1cm5zIHtCb29sfSBlaXRoZXIgdHJ1ZSBvciBmYWxzZVxuICAgICAqL1xuICAgIENoYW5jZS5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIC8vIGxpa2VsaWhvb2Qgb2Ygc3VjY2VzcyAodHJ1ZSlcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtsaWtlbGlob29kIDogNTB9KTtcblxuICAgICAgICAvLyBOb3RlLCB3ZSBjb3VsZCBnZXQgc29tZSBtaW5vciBwZXJmIG9wdGltaXphdGlvbnMgYnkgY2hlY2tpbmcgcmFuZ2VcbiAgICAgICAgLy8gcHJpb3IgdG8gaW5pdGlhbGl6aW5nIGRlZmF1bHRzLCBidXQgdGhhdCBtYWtlcyBjb2RlIGEgYml0IG1lc3NpZXJcbiAgICAgICAgLy8gYW5kIHRoZSBjaGVjayBtb3JlIGNvbXBsaWNhdGVkIGFzIHdlIGhhdmUgdG8gY2hlY2sgZXhpc3RlbmNlIG9mXG4gICAgICAgIC8vIHRoZSBvYmplY3QgdGhlbiBleGlzdGVuY2Ugb2YgdGhlIGtleSBiZWZvcmUgY2hlY2tpbmcgY29uc3RyYWludHMuXG4gICAgICAgIC8vIFNpbmNlIHRoZSBvcHRpb25zIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBtaW5vciBjb21wdXRhdGlvbmFsbHksXG4gICAgICAgIC8vIGRlY2lzaW9uIG1hZGUgZm9yIGNvZGUgY2xlYW5saW5lc3MgaW50ZW50aW9uYWxseS4gVGhpcyBpcyBtZW50aW9uZWRcbiAgICAgICAgLy8gaGVyZSBhcyBpdCdzIHRoZSBmaXJzdCBvY2N1cnJlbmNlLCB3aWxsIG5vdCBiZSBtZW50aW9uZWQgYWdhaW4uXG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIG9wdGlvbnMubGlrZWxpaG9vZCA8IDAgfHwgb3B0aW9ucy5saWtlbGlob29kID4gMTAwLFxuICAgICAgICAgICAgXCJDaGFuY2U6IExpa2VsaWhvb2QgYWNjZXB0cyB2YWx1ZXMgZnJvbSAwIHRvIDEwMC5cIlxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJhbmRvbSgpICogMTAwIDwgb3B0aW9ucy5saWtlbGlob29kO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJuIGEgcmFuZG9tIGNoYXJhY3Rlci5cbiAgICAgKlxuICAgICAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIGNhbiBzcGVjaWZ5IGEgY2hhcmFjdGVyIHBvb2wsIG9ubHkgYWxwaGEsXG4gICAgICogICAgb25seSBzeW1ib2xzLCBhbmQgY2FzaW5nIChsb3dlciBvciB1cHBlcilcbiAgICAgKiAgQHJldHVybnMge1N0cmluZ30gYSBzaW5nbGUgcmFuZG9tIGNoYXJhY3RlclxuICAgICAqICBAdGhyb3dzIHtSYW5nZUVycm9yfSBDYW4gb25seSBzcGVjaWZ5IGFscGhhIG9yIHN5bWJvbHMsIG5vdCBib3RoXG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jaGFyYWN0ZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIG9wdGlvbnMuYWxwaGEgJiYgb3B0aW9ucy5zeW1ib2xzLFxuICAgICAgICAgICAgXCJDaGFuY2U6IENhbm5vdCBzcGVjaWZ5IGJvdGggYWxwaGEgYW5kIHN5bWJvbHMuXCJcbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgc3ltYm9scyA9IFwiIUAjJCVeJiooKVtdXCIsXG4gICAgICAgICAgICBsZXR0ZXJzLCBwb29sO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmNhc2luZyA9PT0gJ2xvd2VyJykge1xuICAgICAgICAgICAgbGV0dGVycyA9IENIQVJTX0xPV0VSO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2FzaW5nID09PSAndXBwZXInKSB7XG4gICAgICAgICAgICBsZXR0ZXJzID0gQ0hBUlNfVVBQRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXR0ZXJzID0gQ0hBUlNfTE9XRVIgKyBDSEFSU19VUFBFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBvb2wpIHtcbiAgICAgICAgICAgIHBvb2wgPSBvcHRpb25zLnBvb2w7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hbHBoYSkge1xuICAgICAgICAgICAgcG9vbCA9IGxldHRlcnM7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zeW1ib2xzKSB7XG4gICAgICAgICAgICBwb29sID0gc3ltYm9scztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvb2wgPSBsZXR0ZXJzICsgTlVNQkVSUyArIHN5bWJvbHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcG9vbC5jaGFyQXQodGhpcy5uYXR1cmFsKHttYXg6IChwb29sLmxlbmd0aCAtIDEpfSkpO1xuICAgIH07XG5cbiAgICAvLyBOb3RlLCB3YW50ZWQgdG8gdXNlIFwiZmxvYXRcIiBvciBcImRvdWJsZVwiIGJ1dCB0aG9zZSBhcmUgYm90aCBKUyByZXNlcnZlZCB3b3Jkcy5cblxuICAgIC8vIE5vdGUsIGZpeGVkIG1lYW5zIE4gT1IgTEVTUyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwuIFRoaXMgYmVjYXVzZVxuICAgIC8vIEl0IGNvdWxkIGJlIDE0LjkwMDAgYnV0IGluIEphdmFTY3JpcHQsIHdoZW4gdGhpcyBpcyBjYXN0IGFzIGEgbnVtYmVyLFxuICAgIC8vIHRoZSB0cmFpbGluZyB6ZXJvZXMgYXJlIGRyb3BwZWQuIExlZnQgdG8gdGhlIGNvbnN1bWVyIGlmIHRyYWlsaW5nIHplcm9lcyBhcmVcbiAgICAvLyBuZWVkZWRcbiAgICAvKipcbiAgICAgKiAgUmV0dXJuIGEgcmFuZG9tIGZsb2F0aW5nIHBvaW50IG51bWJlclxuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gY2FuIHNwZWNpZnkgYSBmaXhlZCBwcmVjaXNpb24sIG1pbiwgbWF4XG4gICAgICogIEByZXR1cm5zIHtOdW1iZXJ9IGEgc2luZ2xlIGZsb2F0aW5nIHBvaW50IG51bWJlclxuICAgICAqICBAdGhyb3dzIHtSYW5nZUVycm9yfSBDYW4gb25seSBzcGVjaWZ5IGZpeGVkIG9yIHByZWNpc2lvbiwgbm90IGJvdGguIEFsc29cbiAgICAgKiAgICBtaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhcbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLmZsb2F0aW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtmaXhlZCA6IDR9KTtcbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgb3B0aW9ucy5maXhlZCAmJiBvcHRpb25zLnByZWNpc2lvbixcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBDYW5ub3Qgc3BlY2lmeSBib3RoIGZpeGVkIGFuZCBwcmVjaXNpb24uXCJcbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgbnVtO1xuICAgICAgICB2YXIgZml4ZWQgPSBNYXRoLnBvdygxMCwgb3B0aW9ucy5maXhlZCk7XG5cbiAgICAgICAgdmFyIG1heCA9IE1BWF9JTlQgLyBmaXhlZDtcbiAgICAgICAgdmFyIG1pbiA9IC1tYXg7XG5cbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgb3B0aW9ucy5taW4gJiYgb3B0aW9ucy5maXhlZCAmJiBvcHRpb25zLm1pbiA8IG1pbixcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBNaW4gc3BlY2lmaWVkIGlzIG91dCBvZiByYW5nZSB3aXRoIGZpeGVkLiBNaW4gc2hvdWxkIGJlLCBhdCBsZWFzdCwgXCIgKyBtaW5cbiAgICAgICAgKTtcbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgb3B0aW9ucy5tYXggJiYgb3B0aW9ucy5maXhlZCAmJiBvcHRpb25zLm1heCA+IG1heCxcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBNYXggc3BlY2lmaWVkIGlzIG91dCBvZiByYW5nZSB3aXRoIGZpeGVkLiBNYXggc2hvdWxkIGJlLCBhdCBtb3N0LCBcIiArIG1heFxuICAgICAgICApO1xuXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IG1pbiA6IG1pbiwgbWF4IDogbWF4IH0pO1xuXG4gICAgICAgIC8vIFRvZG8gLSBNYWtlIHRoaXMgd29yayFcbiAgICAgICAgLy8gb3B0aW9ucy5wcmVjaXNpb24gPSAodHlwZW9mIG9wdGlvbnMucHJlY2lzaW9uICE9PSBcInVuZGVmaW5lZFwiKSA/IG9wdGlvbnMucHJlY2lzaW9uIDogZmFsc2U7XG5cbiAgICAgICAgbnVtID0gdGhpcy5pbnRlZ2VyKHttaW46IG9wdGlvbnMubWluICogZml4ZWQsIG1heDogb3B0aW9ucy5tYXggKiBmaXhlZH0pO1xuICAgICAgICB2YXIgbnVtX2ZpeGVkID0gKG51bSAvIGZpeGVkKS50b0ZpeGVkKG9wdGlvbnMuZml4ZWQpO1xuXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG51bV9maXhlZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBSZXR1cm4gYSByYW5kb20gaW50ZWdlclxuICAgICAqXG4gICAgICogIE5PVEUgdGhlIG1heCBhbmQgbWluIGFyZSBJTkNMVURFRCBpbiB0aGUgcmFuZ2UuIFNvOlxuICAgICAqICBjaGFuY2UuaW50ZWdlcih7bWluOiAxLCBtYXg6IDN9KTtcbiAgICAgKiAgd291bGQgcmV0dXJuIGVpdGhlciAxLCAyLCBvciAzLlxuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gY2FuIHNwZWNpZnkgYSBtaW4gYW5kL29yIG1heFxuICAgICAqICBAcmV0dXJucyB7TnVtYmVyfSBhIHNpbmdsZSByYW5kb20gaW50ZWdlciBudW1iZXJcbiAgICAgKiAgQHRocm93cyB7UmFuZ2VFcnJvcn0gbWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4XG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5pbnRlZ2VyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gOTAwNzE5OTI1NDc0MDk5MiAoMl41MykgaXMgdGhlIG1heCBpbnRlZ2VyIG51bWJlciBpbiBKYXZhU2NyaXB0XG4gICAgICAgIC8vIFNlZTogaHR0cDovL3ZxLmlvLzEzMnNhMmpcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttaW46IE1JTl9JTlQsIG1heDogTUFYX0lOVH0pO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPiBvcHRpb25zLm1heCwgXCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heC5cIik7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5yYW5kb20oKSAqIChvcHRpb25zLm1heCAtIG9wdGlvbnMubWluICsgMSkgKyBvcHRpb25zLm1pbik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBSZXR1cm4gYSByYW5kb20gbmF0dXJhbFxuICAgICAqXG4gICAgICogIE5PVEUgdGhlIG1heCBhbmQgbWluIGFyZSBJTkNMVURFRCBpbiB0aGUgcmFuZ2UuIFNvOlxuICAgICAqICBjaGFuY2UubmF0dXJhbCh7bWluOiAxLCBtYXg6IDN9KTtcbiAgICAgKiAgd291bGQgcmV0dXJuIGVpdGhlciAxLCAyLCBvciAzLlxuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gY2FuIHNwZWNpZnkgYSBtaW4gYW5kL29yIG1heFxuICAgICAqICBAcmV0dXJucyB7TnVtYmVyfSBhIHNpbmdsZSByYW5kb20gaW50ZWdlciBudW1iZXJcbiAgICAgKiAgQHRocm93cyB7UmFuZ2VFcnJvcn0gbWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4XG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uYXR1cmFsID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttaW46IDAsIG1heDogTUFYX0lOVH0pO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPCAwLCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyby5cIik7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVnZXIob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBSZXR1cm4gYSByYW5kb20gc3RyaW5nXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBjYW4gc3BlY2lmeSBhIGxlbmd0aFxuICAgICAqICBAcmV0dXJucyB7U3RyaW5nfSBhIHN0cmluZyBvZiByYW5kb20gbGVuZ3RoXG4gICAgICogIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGxlbmd0aCBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm9cbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IGxlbmd0aDogdGhpcy5uYXR1cmFsKHttaW46IDUsIG1heDogMjB9KSB9KTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubGVuZ3RoIDwgMCwgXCJDaGFuY2U6IExlbmd0aCBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8uXCIpO1xuICAgICAgICB2YXIgbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgICB0ZXh0ID0gdGhpcy5uKHRoaXMuY2hhcmFjdGVyLCBsZW5ndGgsIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0ZXh0LmpvaW4oXCJcIik7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBCYXNpY3MgLS1cblxuICAgIC8vIC0tIEhlbHBlcnMgLS1cblxuICAgIENoYW5jZS5wcm90b3R5cGUuY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zdWJzdHIoMSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubWl4aW4gPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGZvciAodmFyIGZ1bmNfbmFtZSBpbiBvYmopIHtcbiAgICAgICAgICAgIENoYW5jZS5wcm90b3R5cGVbZnVuY19uYW1lXSA9IG9ialtmdW5jX25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgR2l2ZW4gYSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBzb21ldGhpbmcgcmFuZG9tIGFuZCBhIG51bWJlciBvZiBpdGVtcyB0byBnZW5lcmF0ZSxcbiAgICAgKiAgICByZXR1cm4gYW4gYXJyYXkgb2YgaXRlbXMgd2hlcmUgbm9uZSByZXBlYXQuXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhlIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHNvbWV0aGluZyByYW5kb21cbiAgICAgKiAgQHBhcmFtIHtOdW1iZXJ9IG51bSBudW1iZXIgb2YgdGVybXMgdG8gZ2VuZXJhdGVcbiAgICAgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYW55IG9wdGlvbnMgdG8gcGFzcyBvbiB0byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uXG4gICAgICogIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgbGVuZ3RoIGBudW1gIHdpdGggZXZlcnkgaXRlbSBnZW5lcmF0ZWQgYnkgYGZuYCBhbmQgdW5pcXVlXG4gICAgICpcbiAgICAgKiAgVGhlcmUgY2FuIGJlIG1vcmUgcGFyYW1ldGVycyBhZnRlciB0aGVzZS4gQWxsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQgdG8gdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS51bmlxdWUgPSBmdW5jdGlvbihmbiwgbnVtLCBvcHRpb25zKSB7XG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgXCJDaGFuY2U6IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24uXCJcbiAgICAgICAgKTtcblxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge1xuICAgICAgICAgICAgLy8gRGVmYXVsdCBjb21wYXJhdG9yIHRvIGNoZWNrIHRoYXQgdmFsIGlzIG5vdCBhbHJlYWR5IGluIGFyci5cbiAgICAgICAgICAgIC8vIFNob3VsZCByZXR1cm4gYGZhbHNlYCBpZiBpdGVtIG5vdCBpbiBhcnJheSwgYHRydWVgIG90aGVyd2lzZVxuICAgICAgICAgICAgY29tcGFyYXRvcjogZnVuY3Rpb24oYXJyLCB2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBhcnIgPSBbXSwgY291bnQgPSAwLCByZXN1bHQsIE1BWF9EVVBMSUNBVEVTID0gbnVtICogNTAsIHBhcmFtcyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcblxuICAgICAgICB3aGlsZSAoYXJyLmxlbmd0aCA8IG51bSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZm4uYXBwbHkodGhpcywgcGFyYW1zKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5jb21wYXJhdG9yKGFyciwgcmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY291bnQgd2hlbiB1bmlxdWUgZm91bmRcbiAgICAgICAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgrK2NvdW50ID4gTUFYX0RVUExJQ0FURVMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNoYW5jZTogbnVtIGlzIGxpa2VseSB0b28gbGFyZ2UgZm9yIHNhbXBsZSBzZXRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIEdpdmVzIGFuIGFycmF5IG9mIG4gcmFuZG9tIHRlcm1zXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhlIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHNvbWV0aGluZyByYW5kb21cbiAgICAgKiAgQHBhcmFtIHtOdW1iZXJ9IG4gbnVtYmVyIG9mIHRlcm1zIHRvIGdlbmVyYXRlXG4gICAgICogIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgbGVuZ3RoIGBuYCB3aXRoIGl0ZW1zIGdlbmVyYXRlZCBieSBgZm5gXG4gICAgICpcbiAgICAgKiAgVGhlcmUgY2FuIGJlIG1vcmUgcGFyYW1ldGVycyBhZnRlciB0aGVzZS4gQWxsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQgdG8gdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uID0gZnVuY3Rpb24oZm4sIG4pIHtcbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgdHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICBcIkNoYW5jZTogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbi5cIlxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG4gPSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpID0gbiwgYXJyID0gW10sIHBhcmFtcyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcblxuICAgICAgICAvLyBQcm92aWRpbmcgYSBuZWdhdGl2ZSBjb3VudCBzaG91bGQgcmVzdWx0IGluIGEgbm9vcC5cbiAgICAgICAgaSA9IE1hdGgubWF4KCAwLCBpICk7XG5cbiAgICAgICAgZm9yIChudWxsOyBpLS07IG51bGwpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKGZuLmFwcGx5KHRoaXMsIHBhcmFtcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuXG4gICAgLy8gSC9UIHRvIFNPIGZvciB0aGlzIG9uZTogaHR0cDovL3ZxLmlvL090VXJaNVxuICAgIENoYW5jZS5wcm90b3R5cGUucGFkID0gZnVuY3Rpb24gKG51bWJlciwgd2lkdGgsIHBhZCkge1xuICAgICAgICAvLyBEZWZhdWx0IHBhZCB0byAwIGlmIG5vbmUgcHJvdmlkZWRcbiAgICAgICAgcGFkID0gcGFkIHx8ICcwJztcbiAgICAgICAgLy8gQ29udmVydCBudW1iZXIgdG8gYSBzdHJpbmdcbiAgICAgICAgbnVtYmVyID0gbnVtYmVyICsgJyc7XG4gICAgICAgIHJldHVybiBudW1iZXIubGVuZ3RoID49IHdpZHRoID8gbnVtYmVyIDogbmV3IEFycmF5KHdpZHRoIC0gbnVtYmVyLmxlbmd0aCArIDEpLmpvaW4ocGFkKSArIG51bWJlcjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5waWNrID0gZnVuY3Rpb24gKGFyciwgY291bnQpIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2hhbmNlOiBDYW5ub3QgcGljaygpIGZyb20gYW4gZW1wdHkgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb3VudCB8fCBjb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyclt0aGlzLm5hdHVyYWwoe21heDogYXJyLmxlbmd0aCAtIDF9KV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaHVmZmxlKGFycikuc2xpY2UoMCwgY291bnQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc2h1ZmZsZSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgdmFyIG9sZF9hcnJheSA9IGFyci5zbGljZSgwKSxcbiAgICAgICAgICAgIG5ld19hcnJheSA9IFtdLFxuICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICBsZW5ndGggPSBOdW1iZXIob2xkX2FycmF5Lmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gUGljayBhIHJhbmRvbSBpbmRleCBmcm9tIHRoZSBhcnJheVxuICAgICAgICAgICAgaiA9IHRoaXMubmF0dXJhbCh7bWF4OiBvbGRfYXJyYXkubGVuZ3RoIC0gMX0pO1xuICAgICAgICAgICAgLy8gQWRkIGl0IHRvIHRoZSBuZXcgYXJyYXlcbiAgICAgICAgICAgIG5ld19hcnJheVtpXSA9IG9sZF9hcnJheVtqXTtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGF0IGVsZW1lbnQgZnJvbSB0aGUgb3JpZ2luYWwgYXJyYXlcbiAgICAgICAgICAgIG9sZF9hcnJheS5zcGxpY2UoaiwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3X2FycmF5O1xuICAgIH07XG5cbiAgICAvLyBSZXR1cm5zIGEgc2luZ2xlIGl0ZW0gZnJvbSBhbiBhcnJheSB3aXRoIHJlbGF0aXZlIHdlaWdodGluZyBvZiBvZGRzXG4gICAgQ2hhbmNlLnByb3RvdHlwZS53ZWlnaHRlZCA9IGZ1bmN0aW9uKGFyciwgd2VpZ2h0cykge1xuICAgICAgICBpZiAoYXJyLmxlbmd0aCAhPT0gd2VpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2hhbmNlOiBsZW5ndGggb2YgYXJyYXkgYW5kIHdlaWdodHMgbXVzdCBtYXRjaFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSB3ZWlnaHRzIHRoYXQgYXJlIGxlc3Mgb3IgZXF1YWwgdG8gemVyby5cbiAgICAgICAgZm9yICh2YXIgd2VpZ2h0SW5kZXggPSB3ZWlnaHRzLmxlbmd0aCAtIDE7IHdlaWdodEluZGV4ID49IDA7IC0td2VpZ2h0SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB3ZWlnaHQgaXMgbGVzcyBvciBlcXVhbCB0byB6ZXJvLCByZW1vdmUgaXQgYW5kIHRoZSB2YWx1ZS5cbiAgICAgICAgICAgIGlmICh3ZWlnaHRzW3dlaWdodEluZGV4XSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZSh3ZWlnaHRJbmRleCwxKTtcbiAgICAgICAgICAgICAgICB3ZWlnaHRzLnNwbGljZSh3ZWlnaHRJbmRleCwxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGFueSBvZiB0aGUgd2VpZ2h0cyBhcmUgbGVzcyB0aGFuIDEsIHdlIHdhbnQgdG8gc2NhbGUgdGhlbSB1cCB0byB3aG9sZVxuICAgICAgICAvLyAgIG51bWJlcnMgZm9yIHRoZSByZXN0IG9mIHRoaXMgbG9naWMgdG8gd29ya1xuICAgICAgICBpZiAod2VpZ2h0cy5zb21lKGZ1bmN0aW9uKHdlaWdodCkgeyByZXR1cm4gd2VpZ2h0IDwgMTsgfSkpIHtcbiAgICAgICAgICAgIHZhciBtaW4gPSB3ZWlnaHRzLnJlZHVjZShmdW5jdGlvbihtaW4sIHdlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAod2VpZ2h0IDwgbWluKSA/IHdlaWdodCA6IG1pbjtcbiAgICAgICAgICAgIH0sIHdlaWdodHNbMF0pO1xuXG4gICAgICAgICAgICB2YXIgc2NhbGluZ19mYWN0b3IgPSAxIC8gbWluO1xuXG4gICAgICAgICAgICB3ZWlnaHRzID0gd2VpZ2h0cy5tYXAoZnVuY3Rpb24od2VpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdlaWdodCAqIHNjYWxpbmdfZmFjdG9yO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3VtID0gd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24odG90YWwsIHdlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRvdGFsICsgd2VpZ2h0O1xuICAgICAgICB9LCAwKTtcblxuICAgICAgICAvLyBnZXQgYW4gaW5kZXhcbiAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5uYXR1cmFsKHsgbWluOiAxLCBtYXg6IHN1bSB9KTtcblxuICAgICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgICB2YXIgY2hvc2VuO1xuICAgICAgICAvLyBVc2luZyBzb21lKCkgaGVyZSBzbyB3ZSBjYW4gYmFpbCBhcyBzb29uIGFzIHdlIGdldCBvdXIgbWF0Y2hcbiAgICAgICAgd2VpZ2h0cy5zb21lKGZ1bmN0aW9uKHdlaWdodCwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCA8PSB0b3RhbCArIHdlaWdodCkge1xuICAgICAgICAgICAgICAgIGNob3NlbiA9IGFycltpbmRleF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjaG9zZW47XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBIZWxwZXJzIC0tXG5cbiAgICAvLyAtLSBUZXh0IC0tXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBhcmFncmFwaCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgc2VudGVuY2VzID0gb3B0aW9ucy5zZW50ZW5jZXMgfHwgdGhpcy5uYXR1cmFsKHttaW46IDMsIG1heDogN30pLFxuICAgICAgICAgICAgc2VudGVuY2VfYXJyYXkgPSB0aGlzLm4odGhpcy5zZW50ZW5jZSwgc2VudGVuY2VzKTtcblxuICAgICAgICByZXR1cm4gc2VudGVuY2VfYXJyYXkuam9pbignICcpO1xuICAgIH07XG5cbiAgICAvLyBDb3VsZCBnZXQgc21hcnRlciBhYm91dCB0aGlzIHRoYW4gZ2VuZXJhdGluZyByYW5kb20gd29yZHMgYW5kXG4gICAgLy8gY2hhaW5pbmcgdGhlbSB0b2dldGhlci4gU3VjaCBhczogaHR0cDovL3ZxLmlvLzFhNWNlT2hcbiAgICBDaGFuY2UucHJvdG90eXBlLnNlbnRlbmNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciB3b3JkcyA9IG9wdGlvbnMud29yZHMgfHwgdGhpcy5uYXR1cmFsKHttaW46IDEyLCBtYXg6IDE4fSksXG4gICAgICAgICAgICBwdW5jdHVhdGlvbiA9IG9wdGlvbnMucHVuY3R1YXRpb24sXG4gICAgICAgICAgICB0ZXh0LCB3b3JkX2FycmF5ID0gdGhpcy5uKHRoaXMud29yZCwgd29yZHMpO1xuXG4gICAgICAgIHRleHQgPSB3b3JkX2FycmF5LmpvaW4oJyAnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENhcGl0YWxpemUgZmlyc3QgbGV0dGVyIG9mIHNlbnRlbmNlXG4gICAgICAgIHRleHQgPSB0aGlzLmNhcGl0YWxpemUodGV4dCk7XG4gICAgICAgIFxuICAgICAgICAvLyBNYWtlIHN1cmUgcHVuY3R1YXRpb24gaGFzIGEgdXNhYmxlIHZhbHVlXG4gICAgICAgIGlmIChwdW5jdHVhdGlvbiAhPT0gZmFsc2UgJiYgIS9eW1xcLlxcPzshOl0kLy50ZXN0KHB1bmN0dWF0aW9uKSkge1xuICAgICAgICAgICAgcHVuY3R1YXRpb24gPSAnLic7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEFkZCBwdW5jdHVhdGlvbiBtYXJrXG4gICAgICAgIGlmIChwdW5jdHVhdGlvbikge1xuICAgICAgICAgICAgdGV4dCArPSBwdW5jdHVhdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN5bGxhYmxlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBsZW5ndGggPSBvcHRpb25zLmxlbmd0aCB8fCB0aGlzLm5hdHVyYWwoe21pbjogMiwgbWF4OiAzfSksXG4gICAgICAgICAgICBjb25zb25hbnRzID0gJ2JjZGZnaGprbG1ucHJzdHZ3eicsIC8vIGNvbnNvbmFudHMgZXhjZXB0IGhhcmQgdG8gc3BlYWsgb25lc1xuICAgICAgICAgICAgdm93ZWxzID0gJ2FlaW91JywgLy8gdm93ZWxzXG4gICAgICAgICAgICBhbGwgPSBjb25zb25hbnRzICsgdm93ZWxzLCAvLyBhbGxcbiAgICAgICAgICAgIHRleHQgPSAnJyxcbiAgICAgICAgICAgIGNocjtcblxuICAgICAgICAvLyBJJ20gc3VyZSB0aGVyZSdzIGEgbW9yZSBlbGVnYW50IHdheSB0byBkbyB0aGlzLCBidXQgdGhpcyB3b3Jrc1xuICAgICAgICAvLyBkZWNlbnRseSB3ZWxsLlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIEZpcnN0IGNoYXJhY3RlciBjYW4gYmUgYW55dGhpbmdcbiAgICAgICAgICAgICAgICBjaHIgPSB0aGlzLmNoYXJhY3Rlcih7cG9vbDogYWxsfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnNvbmFudHMuaW5kZXhPZihjaHIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIExhc3QgY2hhcmFjdGVyIHdhcyBhIHZvd2VsLCBub3cgd2Ugd2FudCBhIGNvbnNvbmFudFxuICAgICAgICAgICAgICAgIGNociA9IHRoaXMuY2hhcmFjdGVyKHtwb29sOiBjb25zb25hbnRzfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIExhc3QgY2hhcmFjdGVyIHdhcyBhIGNvbnNvbmFudCwgbm93IHdlIHdhbnQgYSB2b3dlbFxuICAgICAgICAgICAgICAgIGNociA9IHRoaXMuY2hhcmFjdGVyKHtwb29sOiB2b3dlbHN9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGV4dCArPSBjaHI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS53b3JkID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHRlc3RSYW5nZShcbiAgICAgICAgICAgIG9wdGlvbnMuc3lsbGFibGVzICYmIG9wdGlvbnMubGVuZ3RoLFxuICAgICAgICAgICAgXCJDaGFuY2U6IENhbm5vdCBzcGVjaWZ5IGJvdGggc3lsbGFibGVzIEFORCBsZW5ndGguXCJcbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgc3lsbGFibGVzID0gb3B0aW9ucy5zeWxsYWJsZXMgfHwgdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogM30pLFxuICAgICAgICAgICAgdGV4dCA9ICcnO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRWl0aGVyIGJvdW5kIHdvcmQgYnkgbGVuZ3RoXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSB0aGlzLnN5bGxhYmxlKCk7XG4gICAgICAgICAgICB9IHdoaWxlICh0ZXh0Lmxlbmd0aCA8IG9wdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBvcHRpb25zLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBPciBieSBudW1iZXIgb2Ygc3lsbGFibGVzXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bGxhYmxlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSB0aGlzLnN5bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBUZXh0IC0tXG5cbiAgICAvLyAtLSBQZXJzb24gLS1cblxuICAgIENoYW5jZS5wcm90b3R5cGUuYWdlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgYWdlUmFuZ2U7XG5cbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2NoaWxkJzpcbiAgICAgICAgICAgICAgICBhZ2VSYW5nZSA9IHttaW46IDEsIG1heDogMTJ9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGVlbic6XG4gICAgICAgICAgICAgICAgYWdlUmFuZ2UgPSB7bWluOiAxMywgbWF4OiAxOX07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZHVsdCc6XG4gICAgICAgICAgICAgICAgYWdlUmFuZ2UgPSB7bWluOiAxOCwgbWF4OiA2NX07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZW5pb3InOlxuICAgICAgICAgICAgICAgIGFnZVJhbmdlID0ge21pbjogNjUsIG1heDogMTAwfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgICAgICAgICAgYWdlUmFuZ2UgPSB7bWluOiAxLCBtYXg6IDEwMH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFnZVJhbmdlID0ge21pbjogMTgsIG1heDogNjV9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbChhZ2VSYW5nZSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuYmlydGhkYXkgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge1xuICAgICAgICAgICAgeWVhcjogKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIHRoaXMuYWdlKG9wdGlvbnMpKVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICAvLyBDUEY7IElEIHRvIGlkZW50aWZ5IHRheHBheWVycyBpbiBCcmF6aWxcbiAgICBDaGFuY2UucHJvdG90eXBlLmNwZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLm4odGhpcy5uYXR1cmFsLCA5LCB7IG1heDogOSB9KTtcbiAgICAgICAgdmFyIGQxID0gbls4XSoyK25bN10qMytuWzZdKjQrbls1XSo1K25bNF0qNituWzNdKjcrblsyXSo4K25bMV0qOStuWzBdKjEwO1xuICAgICAgICBkMSA9IDExIC0gKGQxICUgMTEpO1xuICAgICAgICBpZiAoZDE+PTEwKSB7XG4gICAgICAgICAgICBkMSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGQyID0gZDEqMituWzhdKjMrbls3XSo0K25bNl0qNStuWzVdKjYrbls0XSo3K25bM10qOCtuWzJdKjkrblsxXSoxMCtuWzBdKjExO1xuICAgICAgICBkMiA9IDExIC0gKGQyICUgMTEpO1xuICAgICAgICBpZiAoZDI+PTEwKSB7XG4gICAgICAgICAgICBkMiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnK25bMF0rblsxXStuWzJdKycuJytuWzNdK25bNF0rbls1XSsnLicrbls2XStuWzddK25bOF0rJy0nK2QxK2QyO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmZpcnN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtnZW5kZXI6IHRoaXMuZ2VuZGVyKCl9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGljayh0aGlzLmdldChcImZpcnN0TmFtZXNcIilbb3B0aW9ucy5nZW5kZXIudG9Mb3dlckNhc2UoKV0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmdlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGljayhbJ01hbGUnLCAnRmVtYWxlJ10pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmxhc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy5nZXQoXCJsYXN0TmFtZXNcIikpO1xuICAgIH07XG4gICAgXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5pc3JhZWxJZD1mdW5jdGlvbigpe1xuICAgICAgICB2YXIgeD10aGlzLnN0cmluZyh7cG9vbDogJzAxMjM0NTY3ODknLGxlbmd0aDo4fSk7XG4gICAgICAgIHZhciB5PTA7XG4gICAgICAgIGZvciAodmFyIGk9MDtpPHgubGVuZ3RoO2krKyl7XG4gICAgICAgICAgICB2YXIgdGhpc0RpZ2l0PSAgeFtpXSAqICAoaS8yPT09cGFyc2VJbnQoaS8yKSA/IDEgOiAyKTtcbiAgICAgICAgICAgIHRoaXNEaWdpdD10aGlzLnBhZCh0aGlzRGlnaXQsMikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXNEaWdpdD1wYXJzZUludCh0aGlzRGlnaXRbMF0pICsgcGFyc2VJbnQodGhpc0RpZ2l0WzFdKTtcbiAgICAgICAgICAgIHk9eSt0aGlzRGlnaXQ7XG4gICAgICAgIH1cbiAgICAgICAgeD14KygxMC1wYXJzZUludCh5LnRvU3RyaW5nKCkuc2xpY2UoLTEpKSkudG9TdHJpbmcoKS5zbGljZSgtMSk7XG4gICAgICAgIHJldHVybiB4O1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm1yeiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciBjaGVja0RpZ2l0ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICB2YXIgYWxwaGEgPSBcIjxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWFpcIi5zcGxpdCgnJyksXG4gICAgICAgICAgICAgICAgbXVsdGlwbGllcnMgPSBbIDcsIDMsIDEgXSxcbiAgICAgICAgICAgICAgICBydW5uaW5nVG90YWwgPSAwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5wdXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24oY2hhcmFjdGVyLCBpZHgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gYWxwaGEuaW5kZXhPZihjaGFyYWN0ZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYocG9zICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBwb3MgPT09IDAgPyAwIDogcG9zICsgOTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBwYXJzZUludChjaGFyYWN0ZXIsIDEwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyICo9IG11bHRpcGxpZXJzW2lkeCAlIG11bHRpcGxpZXJzLmxlbmd0aF07XG4gICAgICAgICAgICAgICAgcnVubmluZ1RvdGFsICs9IGNoYXJhY3RlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJ1bm5pbmdUb3RhbCAlIDEwO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2VuZXJhdGUgPSBmdW5jdGlvbiAob3B0cykge1xuICAgICAgICAgICAgdmFyIHBhZCA9IGZ1bmN0aW9uIChsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5KGxlbmd0aCArIDEpLmpvaW4oJzwnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gWyAnUDwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5pc3N1ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmxhc3QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICc8PCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpcnN0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWQoMzkgLSAob3B0cy5sYXN0Lmxlbmd0aCArIG9wdHMuZmlyc3QubGVuZ3RoICsgMikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5wYXNzcG9ydE51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRGlnaXQob3B0cy5wYXNzcG9ydE51bWJlciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLm5hdGlvbmFsaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5kb2IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0RpZ2l0KG9wdHMuZG9iKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZ2VuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5leHBpcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0RpZ2l0KG9wdHMuZXhwaXJ5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCgxNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0RpZ2l0KHBhZCgxNCkpIF0uam9pbignJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChjaGVja0RpZ2l0KG51bWJlci5zdWJzdHIoNDQsIDEwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLnN1YnN0cig1NywgNykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlci5zdWJzdHIoNjUsIDcpKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICAgICAgICBmaXJzdDogdGhpcy5maXJzdCgpLFxuICAgICAgICAgICAgbGFzdDogdGhpcy5sYXN0KCksXG4gICAgICAgICAgICBwYXNzcG9ydE51bWJlcjogdGhpcy5pbnRlZ2VyKHttaW46IDEwMDAwMDAwMCwgbWF4OiA5OTk5OTk5OTl9KSxcbiAgICAgICAgICAgIGRvYjogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IHRoYXQuYmlydGhkYXkoe3R5cGU6ICdhZHVsdCd9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2RhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnN1YnN0cigyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQucGFkKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5wYWQoZGF0ZS5nZXREYXRlKCksIDIpXS5qb2luKCcnKTtcbiAgICAgICAgICAgIH0oKSksXG4gICAgICAgICAgICBleHBpcnk6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbKGRhdGUuZ2V0RnVsbFllYXIoKSArIDUpLnRvU3RyaW5nKCkuc3Vic3RyKDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5wYWQoZGF0ZS5nZXRNb250aCgpICsgMSwgMiksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnBhZChkYXRlLmdldERhdGUoKSwgMildLmpvaW4oJycpO1xuICAgICAgICAgICAgfSgpKSxcbiAgICAgICAgICAgIGdlbmRlcjogdGhpcy5nZW5kZXIoKSA9PT0gJ0ZlbWFsZScgPyAnRic6ICdNJyxcbiAgICAgICAgICAgIGlzc3VlcjogJ0dCUicsXG4gICAgICAgICAgICBuYXRpb25hbGl0eTogJ0dCUidcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBnZW5lcmF0ZSAob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgZmlyc3QgPSB0aGlzLmZpcnN0KG9wdGlvbnMpLFxuICAgICAgICAgICAgbGFzdCA9IHRoaXMubGFzdCgpLFxuICAgICAgICAgICAgbmFtZTtcblxuICAgICAgICBpZiAob3B0aW9ucy5taWRkbGUpIHtcbiAgICAgICAgICAgIG5hbWUgPSBmaXJzdCArICcgJyArIHRoaXMuZmlyc3Qob3B0aW9ucykgKyAnICcgKyBsYXN0O1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubWlkZGxlX2luaXRpYWwpIHtcbiAgICAgICAgICAgIG5hbWUgPSBmaXJzdCArICcgJyArIHRoaXMuY2hhcmFjdGVyKHthbHBoYTogdHJ1ZSwgY2FzaW5nOiAndXBwZXInfSkgKyAnLiAnICsgbGFzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUgPSBmaXJzdCArICcgJyArIGxhc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXgpIHtcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnByZWZpeChvcHRpb25zKSArICcgJyArIG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zdWZmaXgpIHtcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgJyAnICsgdGhpcy5zdWZmaXgob3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9O1xuXG4gICAgLy8gUmV0dXJuIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBuYW1lIHByZWZpeGVzIGJhc2VkIG9uIHN1cHBsaWVkIGdlbmRlci5cbiAgICBDaGFuY2UucHJvdG90eXBlLm5hbWVfcHJlZml4ZXMgPSBmdW5jdGlvbiAoZ2VuZGVyKSB7XG4gICAgICAgIGdlbmRlciA9IGdlbmRlciB8fCBcImFsbFwiO1xuICAgICAgICBnZW5kZXIgPSBnZW5kZXIudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICB2YXIgcHJlZml4ZXMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6ICdEb2N0b3InLCBhYmJyZXZpYXRpb246ICdEci4nIH1cbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZ2VuZGVyID09PSBcIm1hbGVcIiB8fCBnZW5kZXIgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgICAgIHByZWZpeGVzLnB1c2goeyBuYW1lOiAnTWlzdGVyJywgYWJicmV2aWF0aW9uOiAnTXIuJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnZW5kZXIgPT09IFwiZmVtYWxlXCIgfHwgZ2VuZGVyID09PSBcImFsbFwiKSB7XG4gICAgICAgICAgICBwcmVmaXhlcy5wdXNoKHsgbmFtZTogJ01pc3MnLCBhYmJyZXZpYXRpb246ICdNaXNzJyB9KTtcbiAgICAgICAgICAgIHByZWZpeGVzLnB1c2goeyBuYW1lOiAnTWlzc2VzJywgYWJicmV2aWF0aW9uOiAnTXJzLicgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJlZml4ZXM7XG4gICAgfTtcblxuICAgIC8vIEFsaWFzIGZvciBuYW1lX3ByZWZpeFxuICAgIENoYW5jZS5wcm90b3R5cGUucHJlZml4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZV9wcmVmaXgob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubmFtZV9wcmVmaXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyBnZW5kZXI6IFwiYWxsXCIgfSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZ1bGwgP1xuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMubmFtZV9wcmVmaXhlcyhvcHRpb25zLmdlbmRlcikpLm5hbWUgOlxuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMubmFtZV9wcmVmaXhlcyhvcHRpb25zLmdlbmRlcikpLmFiYnJldmlhdGlvbjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zc24gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge3NzbkZvdXI6IGZhbHNlLCBkYXNoZXM6IHRydWV9KTtcbiAgICAgICAgdmFyIHNzbl9wb29sID0gXCIxMjM0NTY3ODkwXCIsXG4gICAgICAgICAgICBzc24sXG4gICAgICAgICAgICBkYXNoID0gb3B0aW9ucy5kYXNoZXMgPyAnLScgOiAnJztcblxuICAgICAgICBpZighb3B0aW9ucy5zc25Gb3VyKSB7XG4gICAgICAgICAgICBzc24gPSB0aGlzLnN0cmluZyh7cG9vbDogc3NuX3Bvb2wsIGxlbmd0aDogM30pICsgZGFzaCArXG4gICAgICAgICAgICB0aGlzLnN0cmluZyh7cG9vbDogc3NuX3Bvb2wsIGxlbmd0aDogMn0pICsgZGFzaCArXG4gICAgICAgICAgICB0aGlzLnN0cmluZyh7cG9vbDogc3NuX3Bvb2wsIGxlbmd0aDogNH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3NuID0gdGhpcy5zdHJpbmcoe3Bvb2w6IHNzbl9wb29sLCBsZW5ndGg6IDR9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3NuO1xuICAgIH07XG5cbiAgICAvLyBSZXR1cm4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG5hbWUgc3VmZml4ZXNcbiAgICBDaGFuY2UucHJvdG90eXBlLm5hbWVfc3VmZml4ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdWZmaXhlcyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0RvY3RvciBvZiBPc3Rlb3BhdGhpYyBNZWRpY2luZScsIGFiYnJldmlhdGlvbjogJ0QuTy4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdEb2N0b3Igb2YgUGhpbG9zb3BoeScsIGFiYnJldmlhdGlvbjogJ1BoLkQuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnRXNxdWlyZScsIGFiYnJldmlhdGlvbjogJ0VzcS4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdKdW5pb3InLCBhYmJyZXZpYXRpb246ICdKci4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdKdXJpcyBEb2N0b3InLCBhYmJyZXZpYXRpb246ICdKLkQuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTWFzdGVyIG9mIEFydHMnLCBhYmJyZXZpYXRpb246ICdNLkEuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTWFzdGVyIG9mIEJ1c2luZXNzIEFkbWluaXN0cmF0aW9uJywgYWJicmV2aWF0aW9uOiAnTS5CLkEuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTWFzdGVyIG9mIFNjaWVuY2UnLCBhYmJyZXZpYXRpb246ICdNLlMuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTWVkaWNhbCBEb2N0b3InLCBhYmJyZXZpYXRpb246ICdNLkQuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnU2VuaW9yJywgYWJicmV2aWF0aW9uOiAnU3IuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnVGhlIFRoaXJkJywgYWJicmV2aWF0aW9uOiAnSUlJJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnVGhlIEZvdXJ0aCcsIGFiYnJldmlhdGlvbjogJ0lWJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQmFjaGVsb3Igb2YgRW5naW5lZXJpbmcnLCBhYmJyZXZpYXRpb246ICdCLkUnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCYWNoZWxvciBvZiBUZWNobm9sb2d5JywgYWJicmV2aWF0aW9uOiAnQi5URUNIJyB9XG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBzdWZmaXhlcztcbiAgICB9O1xuXG4gICAgLy8gQWxpYXMgZm9yIG5hbWVfc3VmZml4XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zdWZmaXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lX3N1ZmZpeChvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uYW1lX3N1ZmZpeCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZnVsbCA/XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5uYW1lX3N1ZmZpeGVzKCkpLm5hbWUgOlxuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMubmFtZV9zdWZmaXhlcygpKS5hYmJyZXZpYXRpb247XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBQZXJzb24gLS1cblxuICAgIC8vIC0tIE1vYmlsZSAtLVxuICAgIC8vIEFuZHJvaWQgR0NNIFJlZ2lzdHJhdGlvbiBJRFxuICAgIENoYW5jZS5wcm90b3R5cGUuYW5kcm9pZF9pZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiQVBBOTFcIiArIHRoaXMuc3RyaW5nKHsgcG9vbDogXCIwMTIzNDU2Nzg5YWJjZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIiwgbGVuZ3RoOiAxNzggfSk7XG4gICAgfTtcblxuICAgIC8vIEFwcGxlIFB1c2ggVG9rZW5cbiAgICBDaGFuY2UucHJvdG90eXBlLmFwcGxlX3Rva2VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcoeyBwb29sOiBcImFiY2RlZjEyMzQ1Njc4OTBcIiwgbGVuZ3RoOiA2NCB9KTtcbiAgICB9O1xuXG4gICAgLy8gV2luZG93cyBQaG9uZSA4IEFOSUQyXG4gICAgQ2hhbmNlLnByb3RvdHlwZS53cDhfYW5pZDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBiYXNlNjQoIHRoaXMuaGFzaCggeyBsZW5ndGggOiAzMiB9ICkgKTtcbiAgICB9O1xuXG4gICAgLy8gV2luZG93cyBQaG9uZSA3IEFOSURcbiAgICBDaGFuY2UucHJvdG90eXBlLndwN19hbmlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ0E9JyArIHRoaXMuZ3VpZCgpLnJlcGxhY2UoLy0vZywgJycpLnRvVXBwZXJDYXNlKCkgKyAnJkU9JyArIHRoaXMuaGFzaCh7IGxlbmd0aDozIH0pICsgJyZXPScgKyB0aGlzLmludGVnZXIoeyBtaW46MCwgbWF4OjkgfSk7XG4gICAgfTtcblxuICAgIC8vIEJsYWNrQmVycnkgRGV2aWNlIFBJTlxuICAgIENoYW5jZS5wcm90b3R5cGUuYmJfcGluID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNoKHsgbGVuZ3RoOiA4IH0pO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgTW9iaWxlIC0tXG5cbiAgICAvLyAtLSBXZWIgLS1cbiAgICBDaGFuY2UucHJvdG90eXBlLmF2YXRhciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciB1cmwgPSBudWxsO1xuICAgICAgICB2YXIgVVJMX0JBU0UgPSAnLy93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci8nO1xuICAgICAgICB2YXIgUFJPVE9DT0xTID0ge1xuICAgICAgICAgICAgaHR0cDogJ2h0dHAnLFxuICAgICAgICAgICAgaHR0cHM6ICdodHRwcydcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIEZJTEVfVFlQRVMgPSB7XG4gICAgICAgICAgICBibXA6ICdibXAnLFxuICAgICAgICAgICAgZ2lmOiAnZ2lmJyxcbiAgICAgICAgICAgIGpwZzogJ2pwZycsXG4gICAgICAgICAgICBwbmc6ICdwbmcnXG4gICAgICAgIH07XG4gICAgICAgIHZhciBGQUxMQkFDS1MgPSB7XG4gICAgICAgICAgICAnNDA0JzogJzQwNCcsIC8vIFJldHVybiA0MDQgaWYgbm90IGZvdW5kXG4gICAgICAgICAgICBtbTogJ21tJywgLy8gTXlzdGVyeSBtYW5cbiAgICAgICAgICAgIGlkZW50aWNvbjogJ2lkZW50aWNvbicsIC8vIEdlb21ldHJpYyBwYXR0ZXJuIGJhc2VkIG9uIGhhc2hcbiAgICAgICAgICAgIG1vbnN0ZXJpZDogJ21vbnN0ZXJpZCcsIC8vIEEgZ2VuZXJhdGVkIG1vbnN0ZXIgaWNvblxuICAgICAgICAgICAgd2F2YXRhcjogJ3dhdmF0YXInLCAvLyBBIGdlbmVyYXRlZCBmYWNlXG4gICAgICAgICAgICByZXRybzogJ3JldHJvJywgLy8gOC1iaXQgaWNvblxuICAgICAgICAgICAgYmxhbms6ICdibGFuaycgLy8gQSB0cmFuc3BhcmVudCBwbmdcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIFJBVElOR1MgPSB7XG4gICAgICAgICAgICBnOiAnZycsXG4gICAgICAgICAgICBwZzogJ3BnJyxcbiAgICAgICAgICAgIHI6ICdyJyxcbiAgICAgICAgICAgIHg6ICd4J1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHByb3RvY29sOiBudWxsLFxuICAgICAgICAgICAgZW1haWw6IG51bGwsXG4gICAgICAgICAgICBmaWxlRXh0ZW5zaW9uOiBudWxsLFxuICAgICAgICAgICAgc2l6ZTogbnVsbCxcbiAgICAgICAgICAgIGZhbGxiYWNrOiBudWxsLFxuICAgICAgICAgICAgcmF0aW5nOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBTZXQgdG8gYSByYW5kb20gZW1haWxcbiAgICAgICAgICAgIG9wdHMuZW1haWwgPSB0aGlzLmVtYWlsKCk7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBvcHRzLmVtYWlsID0gb3B0aW9ucztcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuY29uc3RydWN0b3IgPT09ICdBcnJheScpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0cyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIG9wdHMpO1xuXG4gICAgICAgIGlmICghb3B0cy5lbWFpbCkge1xuICAgICAgICAgICAgLy8gU2V0IHRvIGEgcmFuZG9tIGVtYWlsXG4gICAgICAgICAgICBvcHRzLmVtYWlsID0gdGhpcy5lbWFpbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2FmZSBjaGVja2luZyBmb3IgcGFyYW1zXG4gICAgICAgIG9wdHMucHJvdG9jb2wgPSBQUk9UT0NPTFNbb3B0cy5wcm90b2NvbF0gPyBvcHRzLnByb3RvY29sICsgJzonIDogJyc7XG4gICAgICAgIG9wdHMuc2l6ZSA9IHBhcnNlSW50KG9wdHMuc2l6ZSwgMCkgPyBvcHRzLnNpemUgOiAnJztcbiAgICAgICAgb3B0cy5yYXRpbmcgPSBSQVRJTkdTW29wdHMucmF0aW5nXSA/IG9wdHMucmF0aW5nIDogJyc7XG4gICAgICAgIG9wdHMuZmFsbGJhY2sgPSBGQUxMQkFDS1Nbb3B0cy5mYWxsYmFja10gPyBvcHRzLmZhbGxiYWNrIDogJyc7XG4gICAgICAgIG9wdHMuZmlsZUV4dGVuc2lvbiA9IEZJTEVfVFlQRVNbb3B0cy5maWxlRXh0ZW5zaW9uXSA/IG9wdHMuZmlsZUV4dGVuc2lvbiA6ICcnO1xuXG4gICAgICAgIHVybCA9XG4gICAgICAgICAgICBvcHRzLnByb3RvY29sICtcbiAgICAgICAgICAgIFVSTF9CQVNFICtcbiAgICAgICAgICAgIHRoaXMuYmltZDUubWQ1KG9wdHMuZW1haWwpICtcbiAgICAgICAgICAgIChvcHRzLmZpbGVFeHRlbnNpb24gPyAnLicgKyBvcHRzLmZpbGVFeHRlbnNpb24gOiAnJykgK1xuICAgICAgICAgICAgKG9wdHMuc2l6ZSB8fCBvcHRzLnJhdGluZyB8fCBvcHRzLmZhbGxiYWNrID8gJz8nIDogJycpICtcbiAgICAgICAgICAgIChvcHRzLnNpemUgPyAnJnM9JyArIG9wdHMuc2l6ZS50b1N0cmluZygpIDogJycpICtcbiAgICAgICAgICAgIChvcHRzLnJhdGluZyA/ICcmcj0nICsgb3B0cy5yYXRpbmcgOiAnJykgK1xuICAgICAgICAgICAgKG9wdHMuZmFsbGJhY2sgPyAnJmQ9JyArIG9wdHMuZmFsbGJhY2sgOiAnJylcbiAgICAgICAgICAgIDtcblxuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNvbG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgZnVuY3Rpb24gZ3JheSh2YWx1ZSwgZGVsaW1pdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZhbHVlLCB2YWx1ZSwgdmFsdWVdLmpvaW4oZGVsaW1pdGVyIHx8ICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMucGljayhbJ2hleCcsICdzaG9ydGhleCcsICdyZ2InLCAncmdiYScsICcweCddKSxcbiAgICAgICAgICAgIGdyYXlzY2FsZTogZmFsc2UsXG4gICAgICAgICAgICBjYXNpbmc6ICdsb3dlcidcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGlzR3JheXNjYWxlID0gb3B0aW9ucy5ncmF5c2NhbGU7XG4gICAgICAgIHZhciBjb2xvclZhbHVlO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ2hleCcpIHtcbiAgICAgICAgICAgIGNvbG9yVmFsdWUgPSAnIycgKyAoaXNHcmF5c2NhbGUgPyBncmF5KHRoaXMuaGFzaCh7bGVuZ3RoOiAyfSkpIDogdGhpcy5oYXNoKHtsZW5ndGg6IDZ9KSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ3Nob3J0aGV4Jykge1xuICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICcjJyArIChpc0dyYXlzY2FsZSA/IGdyYXkodGhpcy5oYXNoKHtsZW5ndGg6IDF9KSkgOiB0aGlzLmhhc2goe2xlbmd0aDogM30pKTtcblxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAncmdiJykge1xuICAgICAgICAgICAgaWYgKGlzR3JheXNjYWxlKSB7XG4gICAgICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICdyZ2IoJyArIGdyYXkodGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pLCAnLCcpICsgJyknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvclZhbHVlID0gJ3JnYignICsgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJywnICsgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJywnICsgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJyknO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAncmdiYScpIHtcbiAgICAgICAgICAgIGlmIChpc0dyYXlzY2FsZSkge1xuICAgICAgICAgICAgICAgIGNvbG9yVmFsdWUgPSAncmdiYSgnICsgZ3JheSh0aGlzLm5hdHVyYWwoe21heDogMjU1fSksICcsJykgKyAnLCcgKyB0aGlzLmZsb2F0aW5nKHttaW46MCwgbWF4OjF9KSArICcpJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICdyZ2JhKCcgKyB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLCcgKyB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLCcgKyB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLCcgKyB0aGlzLmZsb2F0aW5nKHttaW46MCwgbWF4OjF9KSArICcpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJzB4Jykge1xuICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICcweCcgKyAoaXNHcmF5c2NhbGUgPyBncmF5KHRoaXMuaGFzaCh7bGVuZ3RoOiAyfSkpIDogdGhpcy5oYXNoKHtsZW5ndGg6IDZ9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBmb3JtYXQgcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIG9uZSBvZiBcImhleFwiLCBcInNob3J0aGV4XCIsIFwicmdiXCIsIFwicmdiYVwiLCBvciBcIjB4XCIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jYXNpbmcgPT09ICd1cHBlcicgKSB7XG4gICAgICAgICAgICBjb2xvclZhbHVlID0gY29sb3JWYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbG9yVmFsdWU7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZG9tYWluID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy53b3JkKCkgKyAnLicgKyAob3B0aW9ucy50bGQgfHwgdGhpcy50bGQoKSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZW1haWwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmQoe2xlbmd0aDogb3B0aW9ucy5sZW5ndGh9KSArICdAJyArIChvcHRpb25zLmRvbWFpbiB8fCB0aGlzLmRvbWFpbigpKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5mYmlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoJzEwMDAwJyArIHRoaXMubmF0dXJhbCh7bWF4OiAxMDAwMDAwMDAwMDB9KSwgMTApO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmdvb2dsZV9hbmFseXRpY3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhY2NvdW50ID0gdGhpcy5wYWQodGhpcy5uYXR1cmFsKHttYXg6IDk5OTk5OX0pLCA2KTtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYWQodGhpcy5uYXR1cmFsKHttYXg6IDk5fSksIDIpO1xuXG4gICAgICAgIHJldHVybiAnVUEtJyArIGFjY291bnQgKyAnLScgKyBwcm9wZXJ0eTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5oYXNodGFnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJyMnICsgdGhpcy53b3JkKCk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuaXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRvZG86IFRoaXMgY291bGQgcmV0dXJuIHNvbWUgcmVzZXJ2ZWQgSVBzLiBTZWUgaHR0cDovL3ZxLmlvLzEzN2RnWXlcbiAgICAgICAgLy8gdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXBkYXRlZCB0byBhY2NvdW50IGZvciB0aGF0IHJhcmUgYXMgaXQgbWF5IGJlXG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLicgK1xuICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJy4nICtcbiAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcuJyArXG4gICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoe21heDogMjU1fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuaXB2NiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlwX2FkZHIgPSB0aGlzLm4odGhpcy5oYXNoLCA4LCB7bGVuZ3RoOiA0fSk7XG5cbiAgICAgICAgcmV0dXJuIGlwX2FkZHIuam9pbihcIjpcIik7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUua2xvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiA5OX0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnRsZHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbJ2NvbScsICdvcmcnLCAnZWR1JywgJ2dvdicsICdjby51aycsICduZXQnLCAnaW8nXTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS50bGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy50bGRzKCkpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnR3aXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnQCcgKyB0aGlzLndvcmQoKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS51cmwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyBwcm90b2NvbDogXCJodHRwXCIsIGRvbWFpbjogdGhpcy5kb21haW4ob3B0aW9ucyksIGRvbWFpbl9wcmVmaXg6IFwiXCIsIHBhdGg6IHRoaXMud29yZCgpLCBleHRlbnNpb25zOiBbXX0pO1xuXG4gICAgICAgIHZhciBleHRlbnNpb24gPSBvcHRpb25zLmV4dGVuc2lvbnMubGVuZ3RoID4gMCA/IFwiLlwiICsgdGhpcy5waWNrKG9wdGlvbnMuZXh0ZW5zaW9ucykgOiBcIlwiO1xuICAgICAgICB2YXIgZG9tYWluID0gb3B0aW9ucy5kb21haW5fcHJlZml4ID8gb3B0aW9ucy5kb21haW5fcHJlZml4ICsgXCIuXCIgKyBvcHRpb25zLmRvbWFpbiA6IG9wdGlvbnMuZG9tYWluO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnByb3RvY29sICsgXCI6Ly9cIiArIGRvbWFpbiArIFwiL1wiICsgb3B0aW9ucy5wYXRoICsgZXh0ZW5zaW9uO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgV2ViIC0tXG5cbiAgICAvLyAtLSBMb2NhdGlvbiAtLVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hZGRyZXNzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttaW46IDUsIG1heDogMjAwMH0pICsgJyAnICsgdGhpcy5zdHJlZXQob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuYWx0aXR1ZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2ZpeGVkOiA1LCBtaW46IDAsIG1heDogODg0OH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5mbG9hdGluZyh7XG4gICAgICAgICAgICBtaW46IG9wdGlvbnMubWluLFxuICAgICAgICAgICAgbWF4OiBvcHRpb25zLm1heCxcbiAgICAgICAgICAgIGZpeGVkOiBvcHRpb25zLmZpeGVkXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmFyZWFjb2RlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtwYXJlbnMgOiB0cnVlfSk7XG4gICAgICAgIC8vIERvbid0IHdhbnQgYXJlYSBjb2RlcyB0byBzdGFydCB3aXRoIDEsIG9yIGhhdmUgYSA5IGFzIHRoZSBzZWNvbmQgZGlnaXRcbiAgICAgICAgdmFyIGFyZWFjb2RlID0gdGhpcy5uYXR1cmFsKHttaW46IDIsIG1heDogOX0pLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbCh7bWluOiAwLCBtYXg6IDh9KS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoe21pbjogMCwgbWF4OiA5fSkudG9TdHJpbmcoKTtcblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5wYXJlbnMgPyAnKCcgKyBhcmVhY29kZSArICcpJyA6IGFyZWFjb2RlO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcGl0YWxpemUodGhpcy53b3JkKHtzeWxsYWJsZXM6IDN9KSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuY29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXRpdHVkZShvcHRpb25zKSArICcsICcgKyB0aGlzLmxvbmdpdHVkZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jb3VudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldChcImNvdW50cmllc1wiKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jb3VudHJ5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgY291bnRyeSA9IHRoaXMucGljayh0aGlzLmNvdW50cmllcygpKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZnVsbCA/IGNvdW50cnkubmFtZSA6IGNvdW50cnkuYWJicmV2aWF0aW9uO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmRlcHRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtmaXhlZDogNSwgbWluOiAtMTA5OTQsIG1heDogMH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5mbG9hdGluZyh7XG4gICAgICAgICAgICBtaW46IG9wdGlvbnMubWluLFxuICAgICAgICAgICAgbWF4OiBvcHRpb25zLm1heCxcbiAgICAgICAgICAgIGZpeGVkOiBvcHRpb25zLmZpeGVkXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmdlb2hhc2ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyBsZW5ndGg6IDcgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZyh7IGxlbmd0aDogb3B0aW9ucy5sZW5ndGgsIHBvb2w6ICcwMTIzNDU2Nzg5YmNkZWZnaGprbW5wcXJzdHV2d3h5eicgfSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZ2VvanNvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhdGl0dWRlKG9wdGlvbnMpICsgJywgJyArIHRoaXMubG9uZ2l0dWRlKG9wdGlvbnMpICsgJywgJyArIHRoaXMuYWx0aXR1ZGUob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubGF0aXR1ZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2ZpeGVkOiA1LCBtaW46IC05MCwgbWF4OiA5MH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5mbG9hdGluZyh7bWluOiBvcHRpb25zLm1pbiwgbWF4OiBvcHRpb25zLm1heCwgZml4ZWQ6IG9wdGlvbnMuZml4ZWR9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5sb25naXR1ZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2ZpeGVkOiA1LCBtaW46IC0xODAsIG1heDogMTgwfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZsb2F0aW5nKHttaW46IG9wdGlvbnMubWluLCBtYXg6IG9wdGlvbnMubWF4LCBmaXhlZDogb3B0aW9ucy5maXhlZH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBob25lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgbnVtUGljayxcbiAgICAgICAgICAgIHVrTnVtID0gZnVuY3Rpb24gKHBhcnRzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBbXTtcbiAgICAgICAgICAgICAgICAvL2ZpbGxzIHRoZSBzZWN0aW9uIHBhcnQgb2YgdGhlIHBob25lIG51bWJlciB3aXRoIHJhbmRvbSBudW1iZXJzLlxuICAgICAgICAgICAgICAgIHBhcnRzLnNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24obikge1xuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnB1c2goc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogbn0pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydHMuYXJlYSArIHNlY3Rpb24uam9pbignICcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvdW50cnk6ICd1cycsXG4gICAgICAgICAgICBtb2JpbGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhcmVucyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwaG9uZTtcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLmNvdW50cnkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ZyJzpcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bVBpY2sgPSB0aGlzLnBpY2soW1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgem9uZSBhbmQgZMOpcGFydGVtZW50IGNvZGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgJzAxJyArIHRoaXMucGljayhbJzMwJywgJzM0JywgJzM5JywgJzQwJywgJzQxJywgJzQyJywgJzQzJywgJzQ0JywgJzQ1JywgJzQ2JywgJzQ3JywgJzQ4JywgJzQ5JywgJzUzJywgJzU1JywgJzU2JywgJzU4JywgJzYwJywgJzY0JywgJzY5JywgJzcwJywgJzcyJywgJzczJywgJzc0JywgJzc1JywgJzc2JywgJzc3JywgJzc4JywgJzc5JywgJzgwJywgJzgxJywgJzgyJywgJzgzJ10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzAyJyArIHRoaXMucGljayhbJzE0JywgJzE4JywgJzIyJywgJzIzJywgJzI4JywgJzI5JywgJzMwJywgJzMxJywgJzMyJywgJzMzJywgJzM0JywgJzM1JywgJzM2JywgJzM3JywgJzM4JywgJzQwJywgJzQxJywgJzQzJywgJzQ0JywgJzQ1JywgJzQ2JywgJzQ3JywgJzQ4JywgJzQ5JywgJzUwJywgJzUxJywgJzUyJywgJzUzJywgJzU0JywgJzU2JywgJzU3JywgJzYxJywgJzYyJywgJzY5JywgJzcyJywgJzc2JywgJzc3JywgJzc4JywgJzg1JywgJzkwJywgJzk2JywgJzk3JywgJzk4JywgJzk5J10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzAzJyArIHRoaXMucGljayhbJzEwJywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI0JywgJzI1JywgJzI2JywgJzI3JywgJzI4JywgJzI5JywgJzM5JywgJzQ0JywgJzQ1JywgJzUxJywgJzUyJywgJzU0JywgJzU1JywgJzU3JywgJzU4JywgJzU5JywgJzYwJywgJzYxJywgJzYyJywgJzYzJywgJzY0JywgJzY1JywgJzY2JywgJzY3JywgJzY4JywgJzY5JywgJzcwJywgJzcxJywgJzcyJywgJzczJywgJzgwJywgJzgxJywgJzgyJywgJzgzJywgJzg0JywgJzg1JywgJzg2JywgJzg3JywgJzg4JywgJzg5JywgJzkwJ10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzA0JyArIHRoaXMucGljayhbJzExJywgJzEzJywgJzE1JywgJzIwJywgJzIyJywgJzI2JywgJzI3JywgJzMwJywgJzMyJywgJzM0JywgJzM3JywgJzQyJywgJzQzJywgJzQ0JywgJzUwJywgJzU2JywgJzU3JywgJzYzJywgJzY2JywgJzY3JywgJzY4JywgJzY5JywgJzcwJywgJzcxJywgJzcyJywgJzczJywgJzc0JywgJzc1JywgJzc2JywgJzc3JywgJzc4JywgJzc5JywgJzgwJywgJzgxJywgJzgyJywgJzgzJywgJzg0JywgJzg1JywgJzg2JywgJzg4JywgJzg5JywgJzkwJywgJzkxJywgJzkyJywgJzkzJywgJzk0JywgJzk1JywgJzk3JywgJzk4J10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzA1JyArIHRoaXMucGljayhbJzA4JywgJzE2JywgJzE3JywgJzE5JywgJzI0JywgJzMxJywgJzMyJywgJzMzJywgJzM0JywgJzM1JywgJzQwJywgJzQ1JywgJzQ2JywgJzQ3JywgJzQ5JywgJzUzJywgJzU1JywgJzU2JywgJzU3JywgJzU4JywgJzU5JywgJzYxJywgJzYyJywgJzYzJywgJzY0JywgJzY1JywgJzY3JywgJzc5JywgJzgxJywgJzgyJywgJzg2JywgJzg3JywgJzkwJywgJzk0J10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogNn0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzA5JyArIHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IDh9KSxcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgICAgIHBob25lID0gb3B0aW9ucy5mb3JtYXR0ZWQgPyBudW1QaWNrLm1hdGNoKC8uLi9nKS5qb2luKCcgJykgOiBudW1QaWNrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG51bVBpY2sgPSB0aGlzLnBpY2soWycwNicsICcwNyddKSArIHNlbGYuc3RyaW5nKHsgcG9vbDogJzAxMjM0NTY3ODknLCBsZW5ndGg6IDh9KTtcbiAgICAgICAgICAgICAgICAgICAgcGhvbmUgPSBvcHRpb25zLmZvcm1hdHRlZCA/IG51bVBpY2subWF0Y2goLy4uL2cpLmpvaW4oJyAnKSA6IG51bVBpY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndWsnOlxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtUGljayA9IHRoaXMucGljayhbXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3ZhbGlkIGFyZWEgY29kZXMgb2YgbWFqb3IgY2l0aWVzL2NvdW50aWVzIGZvbGxvd2VkIGJ5IHJhbmRvbSBudW1iZXJzIGluIHJlcXVpcmVkIGZvcm1hdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxJyArIHRoaXMuY2hhcmFjdGVyKHsgcG9vbDogJzIzNDU2OScgfSkgKyAnMSAnLCBzZWN0aW9uczogWzMsNF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAyMCAnICsgdGhpcy5jaGFyYWN0ZXIoeyBwb29sOiAnMzc4JyB9KSwgc2VjdGlvbnM6IFszLDRdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMjMgJyArIHRoaXMuY2hhcmFjdGVyKHsgcG9vbDogJzg5JyB9KSwgc2VjdGlvbnM6IFszLDRdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMjQgNycsIHNlY3Rpb25zOiBbMyw0XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDI4ICcgKyB0aGlzLnBpY2soWycyNScsJzI4JywnMzcnLCc3MScsJzgyJywnOTAnLCc5MicsJzk1J10pLCBzZWN0aW9uczogWzIsNF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxMicgKyB0aGlzLnBpY2soWycwNCcsJzA4JywnNTQnLCc3NicsJzk3JywnOTgnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxMycgKyB0aGlzLnBpY2soWyc2MycsJzY0JywnODQnLCc4NiddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDE0JyArIHRoaXMucGljayhbJzA0JywnMjAnLCc2MCcsJzYxJywnODAnLCc4OCddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDE1JyArIHRoaXMucGljayhbJzI0JywnMjcnLCc2MicsJzY2J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTYnICsgdGhpcy5waWNrKFsnMDYnLCcyOScsJzM1JywnNDcnLCc1OScsJzk1J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTcnICsgdGhpcy5waWNrKFsnMjYnLCc0NCcsJzUwJywnNjgnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxOCcgKyB0aGlzLnBpY2soWycyNycsJzM3JywnODQnLCc5NyddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDE5JyArIHRoaXMucGljayhbJzAwJywnMDUnLCczNScsJzQ2JywnNDknLCc2MycsJzk1J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH1cbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgICAgIHBob25lID0gb3B0aW9ucy5mb3JtYXR0ZWQgPyB1a051bShudW1QaWNrKSA6IHVrTnVtKG51bVBpY2spLnJlcGxhY2UoJyAnLCAnJywgJ2cnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBudW1QaWNrID0gdGhpcy5waWNrKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzA3JyArIHRoaXMucGljayhbJzQnLCc1JywnNycsJzgnLCc5J10pLCBzZWN0aW9uczogWzIsNl0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzA3NjI0ICcsIHNlY3Rpb25zOiBbNl0gfVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgcGhvbmUgPSBvcHRpb25zLmZvcm1hdHRlZCA/IHVrTnVtKG51bVBpY2spIDogdWtOdW0obnVtUGljaykucmVwbGFjZSgnICcsICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd1cyc6XG4gICAgICAgICAgICAgICAgdmFyIGFyZWFjb2RlID0gdGhpcy5hcmVhY29kZShvcHRpb25zKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhciBleGNoYW5nZSA9IHRoaXMubmF0dXJhbCh7IG1pbjogMiwgbWF4OiA5IH0pLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoeyBtaW46IDAsIG1heDogOSB9KS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsKHsgbWluOiAwLCBtYXg6IDkgfSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IHRoaXMubmF0dXJhbCh7IG1pbjogMTAwMCwgbWF4OiA5OTk5IH0pLnRvU3RyaW5nKCk7IC8vIHRoaXMgY291bGQgYmUgcmFuZG9tIFswLTldezR9XG4gICAgICAgICAgICAgICAgcGhvbmUgPSBvcHRpb25zLmZvcm1hdHRlZCA/IGFyZWFjb2RlICsgJyAnICsgZXhjaGFuZ2UgKyAnLScgKyBzdWJzY3JpYmVyIDogYXJlYWNvZGUgKyBleGNoYW5nZSArIHN1YnNjcmliZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBob25lO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBvc3RhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUG9zdGFsIERpc3RyaWN0XG4gICAgICAgIHZhciBwZCA9IHRoaXMuY2hhcmFjdGVyKHtwb29sOiBcIlhWVFNSUE5LTE1ISkdFQ0JBXCJ9KTtcbiAgICAgICAgLy8gRm9yd2FyZCBTb3J0YXRpb24gQXJlYSAoRlNBKVxuICAgICAgICB2YXIgZnNhID0gcGQgKyB0aGlzLm5hdHVyYWwoe21heDogOX0pICsgdGhpcy5jaGFyYWN0ZXIoe2FscGhhOiB0cnVlLCBjYXNpbmc6IFwidXBwZXJcIn0pO1xuICAgICAgICAvLyBMb2NhbCBEZWxpdmVyeSBVbnV0IChMRFUpXG4gICAgICAgIHZhciBsZHUgPSB0aGlzLm5hdHVyYWwoe21heDogOX0pICsgdGhpcy5jaGFyYWN0ZXIoe2FscGhhOiB0cnVlLCBjYXNpbmc6IFwidXBwZXJcIn0pICsgdGhpcy5uYXR1cmFsKHttYXg6IDl9KTtcblxuICAgICAgICByZXR1cm4gZnNhICsgXCIgXCIgKyBsZHU7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucHJvdmluY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJwcm92aW5jZXNcIik7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucHJvdmluY2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gKG9wdGlvbnMgJiYgb3B0aW9ucy5mdWxsKSA/XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5wcm92aW5jZXMoKSkubmFtZSA6XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5wcm92aW5jZXMoKSkuYWJicmV2aWF0aW9uO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0YXRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIChvcHRpb25zICYmIG9wdGlvbnMuZnVsbCkgP1xuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMuc3RhdGVzKG9wdGlvbnMpKS5uYW1lIDpcbiAgICAgICAgICAgIHRoaXMucGljayh0aGlzLnN0YXRlcyhvcHRpb25zKSkuYWJicmV2aWF0aW9uO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0YXRlcyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IHVzX3N0YXRlc19hbmRfZGM6IHRydWUgfSk7XG5cbiAgICAgICAgdmFyIHN0YXRlcyxcbiAgICAgICAgICAgIHVzX3N0YXRlc19hbmRfZGMgPSB0aGlzLmdldChcInVzX3N0YXRlc19hbmRfZGNcIiksXG4gICAgICAgICAgICB0ZXJyaXRvcmllcyA9IHRoaXMuZ2V0KFwidGVycml0b3JpZXNcIiksXG4gICAgICAgICAgICBhcm1lZF9mb3JjZXMgPSB0aGlzLmdldChcImFybWVkX2ZvcmNlc1wiKTtcblxuICAgICAgICBzdGF0ZXMgPSBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy51c19zdGF0ZXNfYW5kX2RjKSB7XG4gICAgICAgICAgICBzdGF0ZXMgPSBzdGF0ZXMuY29uY2F0KHVzX3N0YXRlc19hbmRfZGMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRlcnJpdG9yaWVzKSB7XG4gICAgICAgICAgICBzdGF0ZXMgPSBzdGF0ZXMuY29uY2F0KHRlcnJpdG9yaWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5hcm1lZF9mb3JjZXMpIHtcbiAgICAgICAgICAgIHN0YXRlcyA9IHN0YXRlcy5jb25jYXQoYXJtZWRfZm9yY2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdGF0ZXM7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc3RyZWV0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBzdHJlZXQgPSB0aGlzLndvcmQoe3N5bGxhYmxlczogMn0pO1xuICAgICAgICBzdHJlZXQgPSB0aGlzLmNhcGl0YWxpemUoc3RyZWV0KTtcbiAgICAgICAgc3RyZWV0ICs9ICcgJztcbiAgICAgICAgc3RyZWV0ICs9IG9wdGlvbnMuc2hvcnRfc3VmZml4ID9cbiAgICAgICAgICAgIHRoaXMuc3RyZWV0X3N1ZmZpeCgpLmFiYnJldmlhdGlvbiA6XG4gICAgICAgICAgICB0aGlzLnN0cmVldF9zdWZmaXgoKS5uYW1lO1xuICAgICAgICByZXR1cm4gc3RyZWV0O1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnN0cmVldF9zdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy5zdHJlZXRfc3VmZml4ZXMoKSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc3RyZWV0X3N1ZmZpeGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIG1vc3QgY29tbW9uIHN1ZmZpeGVzLlxuICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJzdHJlZXRfc3VmZml4ZXNcIik7XG4gICAgfTtcblxuICAgIC8vIE5vdGU6IG9ubHkgcmV0dXJuaW5nIFVTIHppcCBjb2RlcywgaW50ZXJuYXRpb25hbGl6YXRpb24gd2lsbCBiZSBhIHdob2xlXG4gICAgLy8gb3RoZXIgYmVhc3QgdG8gdGFja2xlIGF0IHNvbWUgcG9pbnQuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS56aXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgemlwID0gdGhpcy5uKHRoaXMubmF0dXJhbCwgNSwge21heDogOX0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGx1c2ZvdXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHppcC5wdXNoKCctJyk7XG4gICAgICAgICAgICB6aXAgPSB6aXAuY29uY2F0KHRoaXMubih0aGlzLm5hdHVyYWwsIDQsIHttYXg6IDl9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gemlwLmpvaW4oXCJcIik7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBMb2NhdGlvbiAtLVxuXG4gICAgLy8gLS0gVGltZVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hbXBtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib29sKCkgPyAnYW0nIDogJ3BtJztcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kYXRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGRhdGVfc3RyaW5nLCBkYXRlO1xuXG4gICAgICAgIC8vIElmIGludGVydmFsIGlzIHNwZWNpZmllZCB3ZSBpZ25vcmUgcHJlc2V0XG4gICAgICAgIGlmKG9wdGlvbnMgJiYgKG9wdGlvbnMubWluIHx8IG9wdGlvbnMubWF4KSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgICBhbWVyaWNhbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdHJpbmc6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBtaW4gPSB0eXBlb2Ygb3B0aW9ucy5taW4gIT09IFwidW5kZWZpbmVkXCIgPyBvcHRpb25zLm1pbi5nZXRUaW1lKCkgOiAxO1xuICAgICAgICAgICAgLy8gMTAwLDAwMCwwMDAgZGF5cyBtZWFzdXJlZCByZWxhdGl2ZSB0byBtaWRuaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIDAxIEphbnVhcnksIDE5NzAgVVRDLiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gICAgICAgICAgICB2YXIgbWF4ID0gdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiID8gb3B0aW9ucy5tYXguZ2V0VGltZSgpIDogODY0MDAwMDAwMDAwMDAwMDtcblxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHRoaXMubmF0dXJhbCh7bWluOiBtaW4sIG1heDogbWF4fSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG0gPSB0aGlzLm1vbnRoKHtyYXc6IHRydWV9KTtcbiAgICAgICAgICAgIHZhciBkYXlzSW5Nb250aCA9IG0uZGF5cztcblxuICAgICAgICAgICAgaWYob3B0aW9ucyAmJiBvcHRpb25zLm1vbnRoKSB7XG4gICAgICAgICAgICAgICAgLy8gTW9kIDEyIHRvIGFsbG93IG1vbnRocyBvdXRzaWRlIHJhbmdlIG9mIDAtMTEgKG5vdCBlbmNvdXJhZ2VkLCBidXQgYWxzbyBub3QgcHJldmVudGVkKS5cbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aCA9IHRoaXMuZ2V0KCdtb250aHMnKVsoKG9wdGlvbnMubW9udGggJSAxMikgKyAxMikgJSAxMl0uZGF5cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgICB5ZWFyOiBwYXJzZUludCh0aGlzLnllYXIoKSwgMTApLFxuICAgICAgICAgICAgICAgIC8vIE5lY2Vzc2FyeSB0byBzdWJ0cmFjdCAxIGJlY2F1c2UgRGF0ZSgpIDAtaW5kZXhlcyBtb250aCBidXQgbm90IGRheSBvciB5ZWFyXG4gICAgICAgICAgICAgICAgLy8gZm9yIHNvbWUgcmVhc29uLlxuICAgICAgICAgICAgICAgIG1vbnRoOiBtLm51bWVyaWMgLSAxLFxuICAgICAgICAgICAgICAgIGRheTogdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogZGF5c0luTW9udGh9KSxcbiAgICAgICAgICAgICAgICBob3VyOiB0aGlzLmhvdXIoKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IHRoaXMubWludXRlKCksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiB0aGlzLnNlY29uZCgpLFxuICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kOiB0aGlzLm1pbGxpc2Vjb25kKCksXG4gICAgICAgICAgICAgICAgYW1lcmljYW46IHRydWUsXG4gICAgICAgICAgICAgICAgc3RyaW5nOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShvcHRpb25zLnllYXIsIG9wdGlvbnMubW9udGgsIG9wdGlvbnMuZGF5LCBvcHRpb25zLmhvdXIsIG9wdGlvbnMubWludXRlLCBvcHRpb25zLnNlY29uZCwgb3B0aW9ucy5taWxsaXNlY29uZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hbWVyaWNhbikge1xuICAgICAgICAgICAgLy8gQWRkaW5nIDEgdG8gdGhlIG1vbnRoIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIERhdGUoKSAwLWluZGV4ZXNcbiAgICAgICAgICAgIC8vIG1vbnRocyBidXQgbm90IGRheSBmb3Igc29tZSBvZGQgcmVhc29uLlxuICAgICAgICAgICAgZGF0ZV9zdHJpbmcgPSAoZGF0ZS5nZXRNb250aCgpICsgMSkgKyAnLycgKyBkYXRlLmdldERhdGUoKSArICcvJyArIGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVfc3RyaW5nID0gZGF0ZS5nZXREYXRlKCkgKyAnLycgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkgKyAnLycgKyBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5zdHJpbmcgPyBkYXRlX3N0cmluZyA6IGRhdGU7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuaGFtbWVydGltZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGUob3B0aW9ucykuZ2V0VGltZSgpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmhvdXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21pbjogMSwgbWF4OiBvcHRpb25zICYmIG9wdGlvbnMudHdlbnR5Zm91ciA/IDI0IDogMTJ9KTtcblxuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5taW4gPCAxLCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBsZXNzIHRoYW4gMS5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLnR3ZW50eWZvdXIgJiYgb3B0aW9ucy5tYXggPiAyNCwgXCJDaGFuY2U6IE1heCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDI0IGZvciB0d2VudHlmb3VyIG9wdGlvbi5cIik7XG4gICAgICAgIHRlc3RSYW5nZSghb3B0aW9ucy50d2VudHlmb3VyICYmIG9wdGlvbnMubWF4ID4gMTIsIFwiQ2hhbmNlOiBNYXggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAxMi5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA+IG9wdGlvbnMubWF4LCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4LlwiKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttaW46IG9wdGlvbnMubWluLCBtYXg6IG9wdGlvbnMubWF4fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubWlsbGlzZWNvbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21heDogOTk5fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubWludXRlID0gQ2hhbmNlLnByb3RvdHlwZS5zZWNvbmQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21pbjogMCwgbWF4OiA1OX0pO1xuXG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA8IDAsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGxlc3MgdGhhbiAwLlwiKTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWF4ID4gNTksIFwiQ2hhbmNlOiBNYXggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiA1OS5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA+IG9wdGlvbnMubWF4LCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4LlwiKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHttaW46IG9wdGlvbnMubWluLCBtYXg6IG9wdGlvbnMubWF4fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubW9udGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21pbjogMSwgbWF4OiAxMn0pO1xuXG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA8IDEsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGxlc3MgdGhhbiAxLlwiKTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWF4ID4gMTIsIFwiQ2hhbmNlOiBNYXggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAxMi5cIik7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA+IG9wdGlvbnMubWF4LCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4LlwiKTtcblxuICAgICAgICB2YXIgbW9udGggPSB0aGlzLnBpY2sodGhpcy5tb250aHMoKS5zbGljZShvcHRpb25zLm1pbiAtIDEsIG9wdGlvbnMubWF4KSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnJhdyA/IG1vbnRoIDogbW9udGgubmFtZTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5tb250aHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldChcIm1vbnRoc1wiKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zZWNvbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21heDogNTl9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS50aW1lc3RhbXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDAsIDEwKX0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnllYXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgeWVhciBhcyBtaW4gaWYgbm9uZSBzcGVjaWZpZWRcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttaW46IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKX0pO1xuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gb25lIGNlbnR1cnkgYWZ0ZXIgY3VycmVudCB5ZWFyIGFzIG1heCBpZiBub25lIHNwZWNpZmllZFxuICAgICAgICBvcHRpb25zLm1heCA9ICh0eXBlb2Ygb3B0aW9ucy5tYXggIT09IFwidW5kZWZpbmVkXCIpID8gb3B0aW9ucy5tYXggOiBvcHRpb25zLm1pbiArIDEwMDtcblxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKG9wdGlvbnMpLnRvU3RyaW5nKCk7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBUaW1lXG5cbiAgICAvLyAtLSBGaW5hbmNlIC0tXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNjID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciB0eXBlLCBudW1iZXIsIHRvX2dlbmVyYXRlO1xuXG4gICAgICAgIHR5cGUgPSAob3B0aW9ucy50eXBlKSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2NfdHlwZSh7IG5hbWU6IG9wdGlvbnMudHlwZSwgcmF3OiB0cnVlIH0pIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jY190eXBlKHsgcmF3OiB0cnVlIH0pO1xuXG4gICAgICAgIG51bWJlciA9IHR5cGUucHJlZml4LnNwbGl0KFwiXCIpO1xuICAgICAgICB0b19nZW5lcmF0ZSA9IHR5cGUubGVuZ3RoIC0gdHlwZS5wcmVmaXgubGVuZ3RoIC0gMTtcblxuICAgICAgICAvLyBHZW5lcmF0ZXMgbiAtIDEgZGlnaXRzXG4gICAgICAgIG51bWJlciA9IG51bWJlci5jb25jYXQodGhpcy5uKHRoaXMuaW50ZWdlciwgdG9fZ2VuZXJhdGUsIHttaW46IDAsIG1heDogOX0pKTtcblxuICAgICAgICAvLyBHZW5lcmF0ZXMgdGhlIGxhc3QgZGlnaXQgYWNjb3JkaW5nIHRvIEx1aG4gYWxnb3JpdGhtXG4gICAgICAgIG51bWJlci5wdXNoKHRoaXMubHVobl9jYWxjdWxhdGUobnVtYmVyLmpvaW4oXCJcIikpKTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyLmpvaW4oXCJcIik7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuY2NfdHlwZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFua19jYXJkX251bWJlciNJc3N1ZXJfaWRlbnRpZmljYXRpb25fbnVtYmVyXy4yOElJTi4yOVxuICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJjY190eXBlc1wiKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jY190eXBlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgdHlwZXMgPSB0aGlzLmNjX3R5cGVzKCksXG4gICAgICAgICAgICB0eXBlID0gbnVsbDtcblxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gQWNjZXB0IGVpdGhlciBuYW1lIG9yIHNob3J0X25hbWUgdG8gc3BlY2lmeSBjYXJkIHR5cGVcbiAgICAgICAgICAgICAgICBpZiAodHlwZXNbaV0ubmFtZSA9PT0gb3B0aW9ucy5uYW1lIHx8IHR5cGVzW2ldLnNob3J0X25hbWUgPT09IG9wdGlvbnMubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcmVkaXQgY2FyZCB0eXBlICdcIiArIG9wdGlvbnMubmFtZSArIFwiJycgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHR5cGUgPSB0aGlzLnBpY2sodHlwZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmF3ID8gdHlwZSA6IHR5cGUubmFtZTtcbiAgICB9O1xuXG4gICAgLy9yZXR1cm4gYWxsIHdvcmxkIGN1cnJlbmN5IGJ5IElTTyA0MjE3XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jdXJyZW5jeV90eXBlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwiY3VycmVuY3lfdHlwZXNcIik7XG4gICAgfTtcblxuICAgIC8vcmV0dXJuIHJhbmRvbSB3b3JsZCBjdXJyZW5jeSBieSBJU08gNDIxN1xuICAgIENoYW5jZS5wcm90b3R5cGUuY3VycmVuY3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy5jdXJyZW5jeV90eXBlcygpKTtcbiAgICB9O1xuXG4gICAgLy9SZXR1cm4gcmFuZG9tIGNvcnJlY3QgY3VycmVuY3kgZXhjaGFuZ2UgcGFpciAoZS5nLiBFVVIvVVNEKSBvciBhcnJheSBvZiBjdXJyZW5jeSBjb2RlXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jdXJyZW5jeV9wYWlyID0gZnVuY3Rpb24gKHJldHVybkFzU3RyaW5nKSB7XG4gICAgICAgIHZhciBjdXJyZW5jaWVzID0gdGhpcy51bmlxdWUodGhpcy5jdXJyZW5jeSwgMiwge1xuICAgICAgICAgICAgY29tcGFyYXRvcjogZnVuY3Rpb24oYXJyLCB2YWwpIHtcblxuICAgICAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uKGFjYywgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIG1hdGNoIGhhcyBiZWVuIGZvdW5kLCBzaG9ydCBjaXJjdWl0IGNoZWNrIGFuZCBqdXN0IHJldHVyblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjIHx8IChpdGVtLmNvZGUgPT09IHZhbC5jb2RlKTtcbiAgICAgICAgICAgICAgICB9LCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXR1cm5Bc1N0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbmNpZXNbMF0uY29kZSArICcvJyArIGN1cnJlbmNpZXNbMV0uY29kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW5jaWVzO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZG9sbGFyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQnkgZGVmYXVsdCwgYSBzb21ld2hhdCBtb3JlIHNhbmUgbWF4IGZvciBkb2xsYXIgdGhhbiBhbGwgYXZhaWxhYmxlIG51bWJlcnNcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHttYXggOiAxMDAwMCwgbWluIDogMH0pO1xuXG4gICAgICAgIHZhciBkb2xsYXIgPSB0aGlzLmZsb2F0aW5nKHttaW46IG9wdGlvbnMubWluLCBtYXg6IG9wdGlvbnMubWF4LCBmaXhlZDogMn0pLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBjZW50cyA9IGRvbGxhci5zcGxpdCgnLicpWzFdO1xuXG4gICAgICAgIGlmIChjZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2xsYXIgKz0gJy4wMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY2VudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgZG9sbGFyID0gZG9sbGFyICsgJzAnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvbGxhciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnLSQnICsgZG9sbGFyLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyQnICsgZG9sbGFyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZXhwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgZXhwID0ge307XG5cbiAgICAgICAgZXhwLnllYXIgPSB0aGlzLmV4cF95ZWFyKCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHllYXIgaXMgdGhpcyB5ZWFyLCBuZWVkIHRvIGVuc3VyZSBtb250aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4gICAgICAgIC8vIGN1cnJlbnQgbW9udGggb3IgdGhpcyBleHBpcmF0aW9uIHdpbGwgbm90IGJlIHZhbGlkXG4gICAgICAgIGlmIChleHAueWVhciA9PT0gKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSkudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgZXhwLm1vbnRoID0gdGhpcy5leHBfbW9udGgoe2Z1dHVyZTogdHJ1ZX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwLm1vbnRoID0gdGhpcy5leHBfbW9udGgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnJhdyA/IGV4cCA6IGV4cC5tb250aCArICcvJyArIGV4cC55ZWFyO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmV4cF9tb250aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdmFyIG1vbnRoLCBtb250aF9pbnQsXG4gICAgICAgICAgICAvLyBEYXRlIG9iamVjdCBtb250aHMgYXJlIDAgaW5kZXhlZFxuICAgICAgICAgICAgY3VyTW9udGggPSBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZ1dHVyZSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIG1vbnRoID0gdGhpcy5tb250aCh7cmF3OiB0cnVlfSkubnVtZXJpYztcbiAgICAgICAgICAgICAgICBtb250aF9pbnQgPSBwYXJzZUludChtb250aCwgMTApO1xuICAgICAgICAgICAgfSB3aGlsZSAobW9udGhfaW50IDw9IGN1ck1vbnRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vbnRoID0gdGhpcy5tb250aCh7cmF3OiB0cnVlfSkubnVtZXJpYztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb250aDtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5leHBfeWVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcih7bWF4OiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgKyAxMH0pO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgRmluYW5jZVxuXG4gICAgLy8gLS0gUmVnaW9uYWxcblxuICAgIENoYW5jZS5wcm90b3R5cGUucGxfcGVzZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiA5OTk5OTk5OTk5fSk7XG4gICAgICAgIHZhciBhcnIgPSB0aGlzLnBhZChudW1iZXIsIDEwKS5zcGxpdCgnJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSBwYXJzZUludChhcnJbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbnRyb2xOdW1iZXIgPSAoMSAqIGFyclswXSArIDMgKiBhcnJbMV0gKyA3ICogYXJyWzJdICsgOSAqIGFyclszXSArIDEgKiBhcnJbNF0gKyAzICogYXJyWzVdICsgNyAqIGFycls2XSArIDkgKiBhcnJbN10gKyAxICogYXJyWzhdICsgMyAqIGFycls5XSkgJSAxMDtcbiAgICAgICAgaWYoY29udHJvbE51bWJlciAhPT0gMCkge1xuICAgICAgICAgICAgY29udHJvbE51bWJlciA9IDEwIC0gY29udHJvbE51bWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnIuam9pbignJykgKyBjb250cm9sTnVtYmVyO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBsX25pcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IDk5OTk5OTk5OX0pO1xuICAgICAgICB2YXIgYXJyID0gdGhpcy5wYWQobnVtYmVyLCA5KS5zcGxpdCgnJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSBwYXJzZUludChhcnJbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbnRyb2xOdW1iZXIgPSAoNiAqIGFyclswXSArIDUgKiBhcnJbMV0gKyA3ICogYXJyWzJdICsgMiAqIGFyclszXSArIDMgKiBhcnJbNF0gKyA0ICogYXJyWzVdICsgNSAqIGFycls2XSArIDYgKiBhcnJbN10gKyA3ICogYXJyWzhdKSAlIDExO1xuICAgICAgICBpZihjb250cm9sTnVtYmVyID09PSAxMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGxfbmlwKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oJycpICsgY29udHJvbE51bWJlcjtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wbF9yZWdvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IDk5OTk5OTk5fSk7XG4gICAgICAgIHZhciBhcnIgPSB0aGlzLnBhZChudW1iZXIsIDgpLnNwbGl0KCcnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFycltpXSA9IHBhcnNlSW50KGFycltpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY29udHJvbE51bWJlciA9ICg4ICogYXJyWzBdICsgOSAqIGFyclsxXSArIDIgKiBhcnJbMl0gKyAzICogYXJyWzNdICsgNCAqIGFycls0XSArIDUgKiBhcnJbNV0gKyA2ICogYXJyWzZdICsgNyAqIGFycls3XSkgJSAxMTtcbiAgICAgICAgaWYoY29udHJvbE51bWJlciA9PT0gMTApIHtcbiAgICAgICAgICAgIGNvbnRyb2xOdW1iZXIgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyci5qb2luKCcnKSArIGNvbnRyb2xOdW1iZXI7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBSZWdpb25hbFxuXG4gICAgLy8gLS0gTWlzY2VsbGFuZW91cyAtLVxuXG4gICAgLy8gRGljZSAtIEZvciBhbGwgdGhlIGJvYXJkIGdhbWUgZ2Vla3Mgb3V0IHRoZXJlLCBteXNlbGYgaW5jbHVkZWQgOylcbiAgICBmdW5jdGlvbiBkaWNlRm4gKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKHJhbmdlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kNCA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDR9KTtcbiAgICBDaGFuY2UucHJvdG90eXBlLmQ2ID0gZGljZUZuKHttaW46IDEsIG1heDogNn0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDggPSBkaWNlRm4oe21pbjogMSwgbWF4OiA4fSk7XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kMTAgPSBkaWNlRm4oe21pbjogMSwgbWF4OiAxMH0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDEyID0gZGljZUZuKHttaW46IDEsIG1heDogMTJ9KTtcbiAgICBDaGFuY2UucHJvdG90eXBlLmQyMCA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDIwfSk7XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kMzAgPSBkaWNlRm4oe21pbjogMSwgbWF4OiAzMH0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDEwMCA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDEwMH0pO1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5ycGcgPSBmdW5jdGlvbiAodGhyb3duLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKCF0aHJvd24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQSB0eXBlIG9mIGRpZSByb2xsIG11c3QgYmUgaW5jbHVkZWRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgYml0cyA9IHRocm93bi50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiZFwiKSxcbiAgICAgICAgICAgICAgICByb2xscyA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoYml0cy5sZW5ndGggIT09IDIgfHwgIXBhcnNlSW50KGJpdHNbMF0sIDEwKSB8fCAhcGFyc2VJbnQoYml0c1sxXSwgMTApKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBmb3JtYXQgcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlICNkIyB3aGVyZSB0aGUgZmlyc3QgIyBpcyB0aGUgbnVtYmVyIG9mIGRpY2UgdG8gcm9sbCwgdGhlIHNlY29uZCAjIGlzIHRoZSBtYXggb2YgZWFjaCBkaWVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gYml0c1swXTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHJvbGxzW2kgLSAxXSA9IHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IGJpdHNbMV19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAodHlwZW9mIG9wdGlvbnMuc3VtICE9PSAndW5kZWZpbmVkJyAmJiBvcHRpb25zLnN1bSkgPyByb2xscy5yZWR1Y2UoZnVuY3Rpb24gKHAsIGMpIHsgcmV0dXJuIHAgKyBjOyB9KSA6IHJvbGxzO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIEd1aWRcbiAgICBDaGFuY2UucHJvdG90eXBlLmd1aWQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywgeyB2ZXJzaW9uOiA1IH0pO1xuXG4gICAgICAgIHZhciBndWlkX3Bvb2wgPSBcImFiY2RlZjEyMzQ1Njc4OTBcIixcbiAgICAgICAgICAgIHZhcmlhbnRfcG9vbCA9IFwiYWI4OVwiLFxuICAgICAgICAgICAgZ3VpZCA9IHRoaXMuc3RyaW5nKHsgcG9vbDogZ3VpZF9wb29sLCBsZW5ndGg6IDggfSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKHsgcG9vbDogZ3VpZF9wb29sLCBsZW5ndGg6IDQgfSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgIC8vIFRoZSBWZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgb3B0aW9ucy52ZXJzaW9uICtcbiAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZyh7IHBvb2w6IGd1aWRfcG9vbCwgbGVuZ3RoOiAzIH0pICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAvLyBUaGUgVmFyaWFudFxuICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKHsgcG9vbDogdmFyaWFudF9wb29sLCBsZW5ndGg6IDEgfSkgK1xuICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKHsgcG9vbDogZ3VpZF9wb29sLCBsZW5ndGg6IDMgfSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKHsgcG9vbDogZ3VpZF9wb29sLCBsZW5ndGg6IDEyIH0pO1xuICAgICAgICByZXR1cm4gZ3VpZDtcbiAgICB9O1xuXG4gICAgLy8gSGFzaFxuICAgIENoYW5jZS5wcm90b3R5cGUuaGFzaCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bGVuZ3RoIDogNDAsIGNhc2luZzogJ2xvd2VyJ30pO1xuICAgICAgICB2YXIgcG9vbCA9IG9wdGlvbnMuY2FzaW5nID09PSAndXBwZXInID8gSEVYX1BPT0wudG9VcHBlckNhc2UoKSA6IEhFWF9QT09MO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcoe3Bvb2w6IHBvb2wsIGxlbmd0aDogb3B0aW9ucy5sZW5ndGh9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5sdWhuX2NoZWNrID0gZnVuY3Rpb24gKG51bSkge1xuICAgICAgICB2YXIgc3RyID0gbnVtLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhciBjaGVja0RpZ2l0ID0gK3N0ci5zdWJzdHJpbmcoc3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICByZXR1cm4gY2hlY2tEaWdpdCA9PT0gdGhpcy5sdWhuX2NhbGN1bGF0ZSgrc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMSkpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmx1aG5fY2FsY3VsYXRlID0gZnVuY3Rpb24gKG51bSkge1xuICAgICAgICB2YXIgZGlnaXRzID0gbnVtLnRvU3RyaW5nKCkuc3BsaXQoXCJcIikucmV2ZXJzZSgpO1xuICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgdmFyIGRpZ2l0O1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aDsgbCA+IGk7ICsraSkge1xuICAgICAgICAgICAgZGlnaXQgPSArZGlnaXRzW2ldO1xuICAgICAgICAgICAgaWYgKGkgJSAyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZGlnaXQgKj0gMjtcbiAgICAgICAgICAgICAgICBpZiAoZGlnaXQgPiA5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZ2l0IC09IDk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3VtICs9IGRpZ2l0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc3VtICogOSkgJSAxMDtcbiAgICB9O1xuXG4gICAgLy8gTUQ1IEhhc2hcbiAgICBDaGFuY2UucHJvdG90eXBlLm1kNSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIG9wdHMgPSB7IHN0cjogJycsIGtleTogbnVsbCwgcmF3OiBmYWxzZSB9O1xuXG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0cy5zdHIgPSB0aGlzLnN0cmluZygpO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgb3B0cy5zdHIgPSBvcHRpb25zO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihvcHRpb25zLmNvbnN0cnVjdG9yID09PSAnQXJyYXknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdHMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCBvcHRzKTtcblxuICAgICAgICBpZighb3B0cy5zdHIpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byByZXR1cm4gYW4gbWQ1IGhhc2guJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5iaW1kNS5tZDUob3B0cy5zdHIsIG9wdHMua2V5LCBvcHRzLnJhdyk7XG4gICAgfTtcblxuICAgIHZhciBkYXRhID0ge1xuXG4gICAgICAgIGZpcnN0TmFtZXM6IHtcbiAgICAgICAgICAgIFwibWFsZVwiOiBbXCJKYW1lc1wiLCBcIkpvaG5cIiwgXCJSb2JlcnRcIiwgXCJNaWNoYWVsXCIsIFwiV2lsbGlhbVwiLCBcIkRhdmlkXCIsIFwiUmljaGFyZFwiLCBcIkpvc2VwaFwiLCBcIkNoYXJsZXNcIiwgXCJUaG9tYXNcIiwgXCJDaHJpc3RvcGhlclwiLCBcIkRhbmllbFwiLCBcIk1hdHRoZXdcIiwgXCJHZW9yZ2VcIiwgXCJEb25hbGRcIiwgXCJBbnRob255XCIsIFwiUGF1bFwiLCBcIk1hcmtcIiwgXCJFZHdhcmRcIiwgXCJTdGV2ZW5cIiwgXCJLZW5uZXRoXCIsIFwiQW5kcmV3XCIsIFwiQnJpYW5cIiwgXCJKb3NodWFcIiwgXCJLZXZpblwiLCBcIlJvbmFsZFwiLCBcIlRpbW90aHlcIiwgXCJKYXNvblwiLCBcIkplZmZyZXlcIiwgXCJGcmFua1wiLCBcIkdhcnlcIiwgXCJSeWFuXCIsIFwiTmljaG9sYXNcIiwgXCJFcmljXCIsIFwiU3RlcGhlblwiLCBcIkphY29iXCIsIFwiTGFycnlcIiwgXCJKb25hdGhhblwiLCBcIlNjb3R0XCIsIFwiUmF5bW9uZFwiLCBcIkp1c3RpblwiLCBcIkJyYW5kb25cIiwgXCJHcmVnb3J5XCIsIFwiU2FtdWVsXCIsIFwiQmVuamFtaW5cIiwgXCJQYXRyaWNrXCIsIFwiSmFja1wiLCBcIkhlbnJ5XCIsIFwiV2FsdGVyXCIsIFwiRGVubmlzXCIsIFwiSmVycnlcIiwgXCJBbGV4YW5kZXJcIiwgXCJQZXRlclwiLCBcIlR5bGVyXCIsIFwiRG91Z2xhc1wiLCBcIkhhcm9sZFwiLCBcIkFhcm9uXCIsIFwiSm9zZVwiLCBcIkFkYW1cIiwgXCJBcnRodXJcIiwgXCJaYWNoYXJ5XCIsIFwiQ2FybFwiLCBcIk5hdGhhblwiLCBcIkFsYmVydFwiLCBcIkt5bGVcIiwgXCJMYXdyZW5jZVwiLCBcIkpvZVwiLCBcIldpbGxpZVwiLCBcIkdlcmFsZFwiLCBcIlJvZ2VyXCIsIFwiS2VpdGhcIiwgXCJKZXJlbXlcIiwgXCJUZXJyeVwiLCBcIkhhcnJ5XCIsIFwiUmFscGhcIiwgXCJTZWFuXCIsIFwiSmVzc2VcIiwgXCJSb3lcIiwgXCJMb3Vpc1wiLCBcIkJpbGx5XCIsIFwiQXVzdGluXCIsIFwiQnJ1Y2VcIiwgXCJFdWdlbmVcIiwgXCJDaHJpc3RpYW5cIiwgXCJCcnlhblwiLCBcIldheW5lXCIsIFwiUnVzc2VsbFwiLCBcIkhvd2FyZFwiLCBcIkZyZWRcIiwgXCJFdGhhblwiLCBcIkpvcmRhblwiLCBcIlBoaWxpcFwiLCBcIkFsYW5cIiwgXCJKdWFuXCIsIFwiUmFuZHlcIiwgXCJWaW5jZW50XCIsIFwiQm9iYnlcIiwgXCJEeWxhblwiLCBcIkpvaG5ueVwiLCBcIlBoaWxsaXBcIiwgXCJWaWN0b3JcIiwgXCJDbGFyZW5jZVwiLCBcIkVybmVzdFwiLCBcIk1hcnRpblwiLCBcIkNyYWlnXCIsIFwiU3RhbmxleVwiLCBcIlNoYXduXCIsIFwiVHJhdmlzXCIsIFwiQnJhZGxleVwiLCBcIkxlb25hcmRcIiwgXCJFYXJsXCIsIFwiR2FicmllbFwiLCBcIkppbW15XCIsIFwiRnJhbmNpc1wiLCBcIlRvZGRcIiwgXCJOb2FoXCIsIFwiRGFubnlcIiwgXCJEYWxlXCIsIFwiQ29keVwiLCBcIkNhcmxvc1wiLCBcIkFsbGVuXCIsIFwiRnJlZGVyaWNrXCIsIFwiTG9nYW5cIiwgXCJDdXJ0aXNcIiwgXCJBbGV4XCIsIFwiSm9lbFwiLCBcIkx1aXNcIiwgXCJOb3JtYW5cIiwgXCJNYXJ2aW5cIiwgXCJHbGVublwiLCBcIlRvbnlcIiwgXCJOYXRoYW5pZWxcIiwgXCJSb2RuZXlcIiwgXCJNZWx2aW5cIiwgXCJBbGZyZWRcIiwgXCJTdGV2ZVwiLCBcIkNhbWVyb25cIiwgXCJDaGFkXCIsIFwiRWR3aW5cIiwgXCJDYWxlYlwiLCBcIkV2YW5cIiwgXCJBbnRvbmlvXCIsIFwiTGVlXCIsIFwiSGVyYmVydFwiLCBcIkplZmZlcnlcIiwgXCJJc2FhY1wiLCBcIkRlcmVrXCIsIFwiUmlja3lcIiwgXCJNYXJjdXNcIiwgXCJUaGVvZG9yZVwiLCBcIkVsaWphaFwiLCBcIkx1a2VcIiwgXCJKZXN1c1wiLCBcIkVkZGllXCIsIFwiVHJveVwiLCBcIk1pa2VcIiwgXCJEdXN0aW5cIiwgXCJSYXlcIiwgXCJBZHJpYW5cIiwgXCJCZXJuYXJkXCIsIFwiTGVyb3lcIiwgXCJBbmdlbFwiLCBcIlJhbmRhbGxcIiwgXCJXZXNsZXlcIiwgXCJJYW5cIiwgXCJKYXJlZFwiLCBcIk1hc29uXCIsIFwiSHVudGVyXCIsIFwiQ2FsdmluXCIsIFwiT3NjYXJcIiwgXCJDbGlmZm9yZFwiLCBcIkpheVwiLCBcIlNoYW5lXCIsIFwiUm9ubmllXCIsIFwiQmFycnlcIiwgXCJMdWNhc1wiLCBcIkNvcmV5XCIsIFwiTWFudWVsXCIsIFwiTGVvXCIsIFwiVG9tbXlcIiwgXCJXYXJyZW5cIiwgXCJKYWNrc29uXCIsIFwiSXNhaWFoXCIsIFwiQ29ubm9yXCIsIFwiRG9uXCIsIFwiRGVhblwiLCBcIkpvblwiLCBcIkp1bGlhblwiLCBcIk1pZ3VlbFwiLCBcIkJpbGxcIiwgXCJMbG95ZFwiLCBcIkNoYXJsaWVcIiwgXCJNaXRjaGVsbFwiLCBcIkxlb25cIiwgXCJKZXJvbWVcIiwgXCJEYXJyZWxsXCIsIFwiSmVyZW1pYWhcIiwgXCJBbHZpblwiLCBcIkJyZXR0XCIsIFwiU2V0aFwiLCBcIkZsb3lkXCIsIFwiSmltXCIsIFwiQmxha2VcIiwgXCJNaWNoZWFsXCIsIFwiR29yZG9uXCIsIFwiVHJldm9yXCIsIFwiTGV3aXNcIiwgXCJFcmlrXCIsIFwiRWRnYXJcIiwgXCJWZXJub25cIiwgXCJEZXZpblwiLCBcIkdhdmluXCIsIFwiSmF5ZGVuXCIsIFwiQ2hyaXNcIiwgXCJDbHlkZVwiLCBcIlRvbVwiLCBcIkRlcnJpY2tcIiwgXCJNYXJpb1wiLCBcIkJyZW50XCIsIFwiTWFyY1wiLCBcIkhlcm1hblwiLCBcIkNoYXNlXCIsIFwiRG9taW5pY1wiLCBcIlJpY2FyZG9cIiwgXCJGcmFua2xpblwiLCBcIk1hdXJpY2VcIiwgXCJNYXhcIiwgXCJBaWRlblwiLCBcIk93ZW5cIiwgXCJMZXN0ZXJcIiwgXCJHaWxiZXJ0XCIsIFwiRWxtZXJcIiwgXCJHZW5lXCIsIFwiRnJhbmNpc2NvXCIsIFwiR2xlblwiLCBcIkNvcnlcIiwgXCJHYXJyZXR0XCIsIFwiQ2xheXRvblwiLCBcIlNhbVwiLCBcIkpvcmdlXCIsIFwiQ2hlc3RlclwiLCBcIkFsZWphbmRyb1wiLCBcIkplZmZcIiwgXCJIYXJ2ZXlcIiwgXCJNaWx0b25cIiwgXCJDb2xlXCIsIFwiSXZhblwiLCBcIkFuZHJlXCIsIFwiRHVhbmVcIiwgXCJMYW5kb25cIl0sXG4gICAgICAgICAgICBcImZlbWFsZVwiOiBbXCJNYXJ5XCIsIFwiRW1tYVwiLCBcIkVsaXphYmV0aFwiLCBcIk1pbm5pZVwiLCBcIk1hcmdhcmV0XCIsIFwiSWRhXCIsIFwiQWxpY2VcIiwgXCJCZXJ0aGFcIiwgXCJTYXJhaFwiLCBcIkFubmllXCIsIFwiQ2xhcmFcIiwgXCJFbGxhXCIsIFwiRmxvcmVuY2VcIiwgXCJDb3JhXCIsIFwiTWFydGhhXCIsIFwiTGF1cmFcIiwgXCJOZWxsaWVcIiwgXCJHcmFjZVwiLCBcIkNhcnJpZVwiLCBcIk1hdWRlXCIsIFwiTWFiZWxcIiwgXCJCZXNzaWVcIiwgXCJKZW5uaWVcIiwgXCJHZXJ0cnVkZVwiLCBcIkp1bGlhXCIsIFwiSGF0dGllXCIsIFwiRWRpdGhcIiwgXCJNYXR0aWVcIiwgXCJSb3NlXCIsIFwiQ2F0aGVyaW5lXCIsIFwiTGlsbGlhblwiLCBcIkFkYVwiLCBcIkxpbGxpZVwiLCBcIkhlbGVuXCIsIFwiSmVzc2llXCIsIFwiTG91aXNlXCIsIFwiRXRoZWxcIiwgXCJMdWxhXCIsIFwiTXlydGxlXCIsIFwiRXZhXCIsIFwiRnJhbmNlc1wiLCBcIkxlbmFcIiwgXCJMdWN5XCIsIFwiRWRuYVwiLCBcIk1hZ2dpZVwiLCBcIlBlYXJsXCIsIFwiRGFpc3lcIiwgXCJGYW5uaWVcIiwgXCJKb3NlcGhpbmVcIiwgXCJEb3JhXCIsIFwiUm9zYVwiLCBcIkthdGhlcmluZVwiLCBcIkFnbmVzXCIsIFwiTWFyaWVcIiwgXCJOb3JhXCIsIFwiTWF5XCIsIFwiTWFtaWVcIiwgXCJCbGFuY2hlXCIsIFwiU3RlbGxhXCIsIFwiRWxsZW5cIiwgXCJOYW5jeVwiLCBcIkVmZmllXCIsIFwiU2FsbGllXCIsIFwiTmV0dGllXCIsIFwiRGVsbGFcIiwgXCJMaXp6aWVcIiwgXCJGbG9yYVwiLCBcIlN1c2llXCIsIFwiTWF1ZFwiLCBcIk1hZVwiLCBcIkV0dGFcIiwgXCJIYXJyaWV0XCIsIFwiU2FkaWVcIiwgXCJDYXJvbGluZVwiLCBcIkthdGllXCIsIFwiTHlkaWFcIiwgXCJFbHNpZVwiLCBcIkthdGVcIiwgXCJTdXNhblwiLCBcIk1vbGxpZVwiLCBcIkFsbWFcIiwgXCJBZGRpZVwiLCBcIkdlb3JnaWFcIiwgXCJFbGl6YVwiLCBcIkx1bHVcIiwgXCJOYW5uaWVcIiwgXCJMb3R0aWVcIiwgXCJBbWFuZGFcIiwgXCJCZWxsZVwiLCBcIkNoYXJsb3R0ZVwiLCBcIlJlYmVjY2FcIiwgXCJSdXRoXCIsIFwiVmlvbGFcIiwgXCJPbGl2ZVwiLCBcIkFtZWxpYVwiLCBcIkhhbm5haFwiLCBcIkphbmVcIiwgXCJWaXJnaW5pYVwiLCBcIkVtaWx5XCIsIFwiTWF0aWxkYVwiLCBcIklyZW5lXCIsIFwiS2F0aHJ5blwiLCBcIkVzdGhlclwiLCBcIldpbGxpZVwiLCBcIkhlbnJpZXR0YVwiLCBcIk9sbGllXCIsIFwiQW15XCIsIFwiUmFjaGVsXCIsIFwiU2FyYVwiLCBcIkVzdGVsbGFcIiwgXCJUaGVyZXNhXCIsIFwiQXVndXN0YVwiLCBcIk9yYVwiLCBcIlBhdWxpbmVcIiwgXCJKb3NpZVwiLCBcIkxvbGFcIiwgXCJTb3BoaWFcIiwgXCJMZW9uYVwiLCBcIkFubmVcIiwgXCJNaWxkcmVkXCIsIFwiQW5uXCIsIFwiQmV1bGFoXCIsIFwiQ2FsbGllXCIsIFwiTG91XCIsIFwiRGVsaWFcIiwgXCJFbGVhbm9yXCIsIFwiQmFyYmFyYVwiLCBcIkl2YVwiLCBcIkxvdWlzYVwiLCBcIk1hcmlhXCIsIFwiTWF5bWVcIiwgXCJFdmVseW5cIiwgXCJFc3RlbGxlXCIsIFwiTmluYVwiLCBcIkJldHR5XCIsIFwiTWFyaW9uXCIsIFwiQmV0dGllXCIsIFwiRG9yb3RoeVwiLCBcIkx1ZWxsYVwiLCBcIkluZXpcIiwgXCJMZWxhXCIsIFwiUm9zaWVcIiwgXCJBbGxpZVwiLCBcIk1pbGxpZVwiLCBcIkphbmllXCIsIFwiQ29ybmVsaWFcIiwgXCJWaWN0b3JpYVwiLCBcIlJ1YnlcIiwgXCJXaW5pZnJlZFwiLCBcIkFsdGFcIiwgXCJDZWxpYVwiLCBcIkNocmlzdGluZVwiLCBcIkJlYXRyaWNlXCIsIFwiQmlyZGllXCIsIFwiSGFycmlldHRcIiwgXCJNYWJsZVwiLCBcIk15cmFcIiwgXCJTb3BoaWVcIiwgXCJUaWxsaWVcIiwgXCJJc2FiZWxcIiwgXCJTeWx2aWFcIiwgXCJDYXJvbHluXCIsIFwiSXNhYmVsbGVcIiwgXCJMZWlsYVwiLCBcIlNhbGx5XCIsIFwiSW5hXCIsIFwiRXNzaWVcIiwgXCJCZXJ0aWVcIiwgXCJOZWxsXCIsIFwiQWxiZXJ0YVwiLCBcIkthdGhhcmluZVwiLCBcIkxvcmFcIiwgXCJSZW5hXCIsIFwiTWluYVwiLCBcIlJob2RhXCIsIFwiTWF0aGlsZGFcIiwgXCJBYmJpZVwiLCBcIkV1bGFcIiwgXCJEb2xsaWVcIiwgXCJIZXR0aWVcIiwgXCJFdW5pY2VcIiwgXCJGYW5ueVwiLCBcIk9sYVwiLCBcIkxlbm9yYVwiLCBcIkFkZWxhaWRlXCIsIFwiQ2hyaXN0aW5hXCIsIFwiTGVsaWFcIiwgXCJOZWxsZVwiLCBcIlN1ZVwiLCBcIkpvaGFubmFcIiwgXCJMaWxseVwiLCBcIkx1Y2luZGFcIiwgXCJNaW5lcnZhXCIsIFwiTGV0dGllXCIsIFwiUm94aWVcIiwgXCJDeW50aGlhXCIsIFwiSGVsZW5hXCIsIFwiSGlsZGFcIiwgXCJIdWxkYVwiLCBcIkJlcm5pY2VcIiwgXCJHZW5ldmlldmVcIiwgXCJKZWFuXCIsIFwiQ29yZGVsaWFcIiwgXCJNYXJpYW5cIiwgXCJGcmFuY2lzXCIsIFwiSmVhbmV0dGVcIiwgXCJBZGVsaW5lXCIsIFwiR3Vzc2llXCIsIFwiTGVhaFwiLCBcIkxvaXNcIiwgXCJMdXJhXCIsIFwiTWl0dGllXCIsIFwiSGFsbGllXCIsIFwiSXNhYmVsbGFcIiwgXCJPbGdhXCIsIFwiUGhvZWJlXCIsIFwiVGVyZXNhXCIsIFwiSGVzdGVyXCIsIFwiTGlkYVwiLCBcIkxpbmFcIiwgXCJXaW5uaWVcIiwgXCJDbGF1ZGlhXCIsIFwiTWFyZ3Vlcml0ZVwiLCBcIlZlcmFcIiwgXCJDZWNlbGlhXCIsIFwiQmVzc1wiLCBcIkVtaWxpZVwiLCBcIkpvaG5cIiwgXCJSb3NldHRhXCIsIFwiVmVybmFcIiwgXCJNeXJ0aWVcIiwgXCJDZWNpbGlhXCIsIFwiRWx2YVwiLCBcIk9saXZpYVwiLCBcIk9waGVsaWFcIiwgXCJHZW9yZ2llXCIsIFwiRWxub3JhXCIsIFwiVmlvbGV0XCIsIFwiQWRlbGVcIiwgXCJMaWx5XCIsIFwiTGlubmllXCIsIFwiTG9yZXR0YVwiLCBcIk1hZGdlXCIsIFwiUG9sbHlcIiwgXCJWaXJnaWVcIiwgXCJFdWdlbmlhXCIsIFwiTHVjaWxlXCIsIFwiTHVjaWxsZVwiLCBcIk1hYmVsbGVcIiwgXCJSb3NhbGllXCJdXG4gICAgICAgIH0sXG5cbiAgICAgICAgbGFzdE5hbWVzOiBbJ1NtaXRoJywgJ0pvaG5zb24nLCAnV2lsbGlhbXMnLCAnSm9uZXMnLCAnQnJvd24nLCAnRGF2aXMnLCAnTWlsbGVyJywgJ1dpbHNvbicsICdNb29yZScsICdUYXlsb3InLCAnQW5kZXJzb24nLCAnVGhvbWFzJywgJ0phY2tzb24nLCAnV2hpdGUnLCAnSGFycmlzJywgJ01hcnRpbicsICdUaG9tcHNvbicsICdHYXJjaWEnLCAnTWFydGluZXonLCAnUm9iaW5zb24nLCAnQ2xhcmsnLCAnUm9kcmlndWV6JywgJ0xld2lzJywgJ0xlZScsICdXYWxrZXInLCAnSGFsbCcsICdBbGxlbicsICdZb3VuZycsICdIZXJuYW5kZXonLCAnS2luZycsICdXcmlnaHQnLCAnTG9wZXonLCAnSGlsbCcsICdTY290dCcsICdHcmVlbicsICdBZGFtcycsICdCYWtlcicsICdHb256YWxleicsICdOZWxzb24nLCAnQ2FydGVyJywgJ01pdGNoZWxsJywgJ1BlcmV6JywgJ1JvYmVydHMnLCAnVHVybmVyJywgJ1BoaWxsaXBzJywgJ0NhbXBiZWxsJywgJ1BhcmtlcicsICdFdmFucycsICdFZHdhcmRzJywgJ0NvbGxpbnMnLCAnU3Rld2FydCcsICdTYW5jaGV6JywgJ01vcnJpcycsICdSb2dlcnMnLCAnUmVlZCcsICdDb29rJywgJ01vcmdhbicsICdCZWxsJywgJ011cnBoeScsICdCYWlsZXknLCAnUml2ZXJhJywgJ0Nvb3BlcicsICdSaWNoYXJkc29uJywgJ0NveCcsICdIb3dhcmQnLCAnV2FyZCcsICdUb3JyZXMnLCAnUGV0ZXJzb24nLCAnR3JheScsICdSYW1pcmV6JywgJ0phbWVzJywgJ1dhdHNvbicsICdCcm9va3MnLCAnS2VsbHknLCAnU2FuZGVycycsICdQcmljZScsICdCZW5uZXR0JywgJ1dvb2QnLCAnQmFybmVzJywgJ1Jvc3MnLCAnSGVuZGVyc29uJywgJ0NvbGVtYW4nLCAnSmVua2lucycsICdQZXJyeScsICdQb3dlbGwnLCAnTG9uZycsICdQYXR0ZXJzb24nLCAnSHVnaGVzJywgJ0Zsb3JlcycsICdXYXNoaW5ndG9uJywgJ0J1dGxlcicsICdTaW1tb25zJywgJ0Zvc3RlcicsICdHb256YWxlcycsICdCcnlhbnQnLCAnQWxleGFuZGVyJywgJ1J1c3NlbGwnLCAnR3JpZmZpbicsICdEaWF6JywgJ0hheWVzJywgJ015ZXJzJywgJ0ZvcmQnLCAnSGFtaWx0b24nLCAnR3JhaGFtJywgJ1N1bGxpdmFuJywgJ1dhbGxhY2UnLCAnV29vZHMnLCAnQ29sZScsICdXZXN0JywgJ0pvcmRhbicsICdPd2VucycsICdSZXlub2xkcycsICdGaXNoZXInLCAnRWxsaXMnLCAnSGFycmlzb24nLCAnR2lic29uJywgJ01jRG9uYWxkJywgJ0NydXonLCAnTWFyc2hhbGwnLCAnT3J0aXonLCAnR29tZXonLCAnTXVycmF5JywgJ0ZyZWVtYW4nLCAnV2VsbHMnLCAnV2ViYicsICdTaW1wc29uJywgJ1N0ZXZlbnMnLCAnVHVja2VyJywgJ1BvcnRlcicsICdIdW50ZXInLCAnSGlja3MnLCAnQ3Jhd2ZvcmQnLCAnSGVucnknLCAnQm95ZCcsICdNYXNvbicsICdNb3JhbGVzJywgJ0tlbm5lZHknLCAnV2FycmVuJywgJ0RpeG9uJywgJ1JhbW9zJywgJ1JleWVzJywgJ0J1cm5zJywgJ0dvcmRvbicsICdTaGF3JywgJ0hvbG1lcycsICdSaWNlJywgJ1JvYmVydHNvbicsICdIdW50JywgJ0JsYWNrJywgJ0RhbmllbHMnLCAnUGFsbWVyJywgJ01pbGxzJywgJ05pY2hvbHMnLCAnR3JhbnQnLCAnS25pZ2h0JywgJ0Zlcmd1c29uJywgJ1Jvc2UnLCAnU3RvbmUnLCAnSGF3a2lucycsICdEdW5uJywgJ1BlcmtpbnMnLCAnSHVkc29uJywgJ1NwZW5jZXInLCAnR2FyZG5lcicsICdTdGVwaGVucycsICdQYXluZScsICdQaWVyY2UnLCAnQmVycnknLCAnTWF0dGhld3MnLCAnQXJub2xkJywgJ1dhZ25lcicsICdXaWxsaXMnLCAnUmF5JywgJ1dhdGtpbnMnLCAnT2xzb24nLCAnQ2Fycm9sbCcsICdEdW5jYW4nLCAnU255ZGVyJywgJ0hhcnQnLCAnQ3VubmluZ2hhbScsICdCcmFkbGV5JywgJ0xhbmUnLCAnQW5kcmV3cycsICdSdWl6JywgJ0hhcnBlcicsICdGb3gnLCAnUmlsZXknLCAnQXJtc3Ryb25nJywgJ0NhcnBlbnRlcicsICdXZWF2ZXInLCAnR3JlZW5lJywgJ0xhd3JlbmNlJywgJ0VsbGlvdHQnLCAnQ2hhdmV6JywgJ1NpbXMnLCAnQXVzdGluJywgJ1BldGVycycsICdLZWxsZXknLCAnRnJhbmtsaW4nLCAnTGF3c29uJywgJ0ZpZWxkcycsICdHdXRpZXJyZXonLCAnUnlhbicsICdTY2htaWR0JywgJ0NhcnInLCAnVmFzcXVleicsICdDYXN0aWxsbycsICdXaGVlbGVyJywgJ0NoYXBtYW4nLCAnT2xpdmVyJywgJ01vbnRnb21lcnknLCAnUmljaGFyZHMnLCAnV2lsbGlhbXNvbicsICdKb2huc3RvbicsICdCYW5rcycsICdNZXllcicsICdCaXNob3AnLCAnTWNDb3knLCAnSG93ZWxsJywgJ0FsdmFyZXonLCAnTW9ycmlzb24nLCAnSGFuc2VuJywgJ0Zlcm5hbmRleicsICdHYXJ6YScsICdIYXJ2ZXknLCAnTGl0dGxlJywgJ0J1cnRvbicsICdTdGFubGV5JywgJ05ndXllbicsICdHZW9yZ2UnLCAnSmFjb2JzJywgJ1JlaWQnLCAnS2ltJywgJ0Z1bGxlcicsICdMeW5jaCcsICdEZWFuJywgJ0dpbGJlcnQnLCAnR2FycmV0dCcsICdSb21lcm8nLCAnV2VsY2gnLCAnTGFyc29uJywgJ0ZyYXppZXInLCAnQnVya2UnLCAnSGFuc29uJywgJ0RheScsICdNZW5kb3phJywgJ01vcmVubycsICdCb3dtYW4nLCAnTWVkaW5hJywgJ0Zvd2xlcicsICdCcmV3ZXInLCAnSG9mZm1hbicsICdDYXJsc29uJywgJ1NpbHZhJywgJ1BlYXJzb24nLCAnSG9sbGFuZCcsICdEb3VnbGFzJywgJ0ZsZW1pbmcnLCAnSmVuc2VuJywgJ1ZhcmdhcycsICdCeXJkJywgJ0Rhdmlkc29uJywgJ0hvcGtpbnMnLCAnTWF5JywgJ1RlcnJ5JywgJ0hlcnJlcmEnLCAnV2FkZScsICdTb3RvJywgJ1dhbHRlcnMnLCAnQ3VydGlzJywgJ05lYWwnLCAnQ2FsZHdlbGwnLCAnTG93ZScsICdKZW5uaW5ncycsICdCYXJuZXR0JywgJ0dyYXZlcycsICdKaW1lbmV6JywgJ0hvcnRvbicsICdTaGVsdG9uJywgJ0JhcnJldHQnLCAnT2JyaWVuJywgJ0Nhc3RybycsICdTdXR0b24nLCAnR3JlZ29yeScsICdNY0tpbm5leScsICdMdWNhcycsICdNaWxlcycsICdDcmFpZycsICdSb2RyaXF1ZXonLCAnQ2hhbWJlcnMnLCAnSG9sdCcsICdMYW1iZXJ0JywgJ0ZsZXRjaGVyJywgJ1dhdHRzJywgJ0JhdGVzJywgJ0hhbGUnLCAnUmhvZGVzJywgJ1BlbmEnLCAnQmVjaycsICdOZXdtYW4nLCAnSGF5bmVzJywgJ01jRGFuaWVsJywgJ01lbmRleicsICdCdXNoJywgJ1ZhdWdobicsICdQYXJrcycsICdEYXdzb24nLCAnU2FudGlhZ28nLCAnTm9ycmlzJywgJ0hhcmR5JywgJ0xvdmUnLCAnU3RlZWxlJywgJ0N1cnJ5JywgJ1Bvd2VycycsICdTY2h1bHR6JywgJ0JhcmtlcicsICdHdXptYW4nLCAnUGFnZScsICdNdW5veicsICdCYWxsJywgJ0tlbGxlcicsICdDaGFuZGxlcicsICdXZWJlcicsICdMZW9uYXJkJywgJ1dhbHNoJywgJ0x5b25zJywgJ1JhbXNleScsICdXb2xmZScsICdTY2huZWlkZXInLCAnTXVsbGlucycsICdCZW5zb24nLCAnU2hhcnAnLCAnQm93ZW4nLCAnRGFuaWVsJywgJ0JhcmJlcicsICdDdW1taW5ncycsICdIaW5lcycsICdCYWxkd2luJywgJ0dyaWZmaXRoJywgJ1ZhbGRleicsICdIdWJiYXJkJywgJ1NhbGF6YXInLCAnUmVldmVzJywgJ1dhcm5lcicsICdTdGV2ZW5zb24nLCAnQnVyZ2VzcycsICdTYW50b3MnLCAnVGF0ZScsICdDcm9zcycsICdHYXJuZXInLCAnTWFubicsICdNYWNrJywgJ01vc3MnLCAnVGhvcm50b24nLCAnRGVubmlzJywgJ01jR2VlJywgJ0Zhcm1lcicsICdEZWxnYWRvJywgJ0FndWlsYXInLCAnVmVnYScsICdHbG92ZXInLCAnTWFubmluZycsICdDb2hlbicsICdIYXJtb24nLCAnUm9kZ2VycycsICdSb2JiaW5zJywgJ05ld3RvbicsICdUb2RkJywgJ0JsYWlyJywgJ0hpZ2dpbnMnLCAnSW5ncmFtJywgJ1JlZXNlJywgJ0Nhbm5vbicsICdTdHJpY2tsYW5kJywgJ1Rvd25zZW5kJywgJ1BvdHRlcicsICdHb29kd2luJywgJ1dhbHRvbicsICdSb3dlJywgJ0hhbXB0b24nLCAnT3J0ZWdhJywgJ1BhdHRvbicsICdTd2Fuc29uJywgJ0pvc2VwaCcsICdGcmFuY2lzJywgJ0dvb2RtYW4nLCAnTWFsZG9uYWRvJywgJ1lhdGVzJywgJ0JlY2tlcicsICdFcmlja3NvbicsICdIb2RnZXMnLCAnUmlvcycsICdDb25uZXInLCAnQWRraW5zJywgJ1dlYnN0ZXInLCAnTm9ybWFuJywgJ01hbG9uZScsICdIYW1tb25kJywgJ0Zsb3dlcnMnLCAnQ29iYicsICdNb29keScsICdRdWlubicsICdCbGFrZScsICdNYXh3ZWxsJywgJ1BvcGUnLCAnRmxveWQnLCAnT3Nib3JuZScsICdQYXVsJywgJ01jQ2FydGh5JywgJ0d1ZXJyZXJvJywgJ0xpbmRzZXknLCAnRXN0cmFkYScsICdTYW5kb3ZhbCcsICdHaWJicycsICdUeWxlcicsICdHcm9zcycsICdGaXR6Z2VyYWxkJywgJ1N0b2tlcycsICdEb3lsZScsICdTaGVybWFuJywgJ1NhdW5kZXJzJywgJ1dpc2UnLCAnQ29sb24nLCAnR2lsbCcsICdBbHZhcmFkbycsICdHcmVlcicsICdQYWRpbGxhJywgJ1NpbW9uJywgJ1dhdGVycycsICdOdW5leicsICdCYWxsYXJkJywgJ1NjaHdhcnR6JywgJ01jQnJpZGUnLCAnSG91c3RvbicsICdDaHJpc3RlbnNlbicsICdLbGVpbicsICdQcmF0dCcsICdCcmlnZ3MnLCAnUGFyc29ucycsICdNY0xhdWdobGluJywgJ1ppbW1lcm1hbicsICdGcmVuY2gnLCAnQnVjaGFuYW4nLCAnTW9yYW4nLCAnQ29wZWxhbmQnLCAnUm95JywgJ1BpdHRtYW4nLCAnQnJhZHknLCAnTWNDb3JtaWNrJywgJ0hvbGxvd2F5JywgJ0Jyb2NrJywgJ1Bvb2xlJywgJ0ZyYW5rJywgJ0xvZ2FuJywgJ093ZW4nLCAnQmFzcycsICdNYXJzaCcsICdEcmFrZScsICdXb25nJywgJ0plZmZlcnNvbicsICdQYXJrJywgJ01vcnRvbicsICdBYmJvdHQnLCAnU3BhcmtzJywgJ1BhdHJpY2snLCAnTm9ydG9uJywgJ0h1ZmYnLCAnQ2xheXRvbicsICdNYXNzZXknLCAnTGxveWQnLCAnRmlndWVyb2EnLCAnQ2Fyc29uJywgJ0Jvd2VycycsICdSb2JlcnNvbicsICdCYXJ0b24nLCAnVHJhbicsICdMYW1iJywgJ0hhcnJpbmd0b24nLCAnQ2FzZXknLCAnQm9vbmUnLCAnQ29ydGV6JywgJ0NsYXJrZScsICdNYXRoaXMnLCAnU2luZ2xldG9uJywgJ1dpbGtpbnMnLCAnQ2FpbicsICdCcnlhbicsICdVbmRlcndvb2QnLCAnSG9nYW4nLCAnTWNLZW56aWUnLCAnQ29sbGllcicsICdMdW5hJywgJ1BoZWxwcycsICdNY0d1aXJlJywgJ0FsbGlzb24nLCAnQnJpZGdlcycsICdXaWxrZXJzb24nLCAnTmFzaCcsICdTdW1tZXJzJywgJ0F0a2lucyddLFxuXG4gICAgICAgIC8vIERhdGEgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdW1waXJza3kvY291bnRyeS1saXN0L2Jsb2IvbWFzdGVyL2NvdW50cnkvY2xkci9lbl9VUy9jb3VudHJ5Lmpzb25cbiAgICAgICAgY291bnRyaWVzOiBbe1wibmFtZVwiOlwiQWZnaGFuaXN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiQUZcIn0se1wibmFtZVwiOlwiQWxiYW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBTFwifSx7XCJuYW1lXCI6XCJBbGdlcmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkRaXCJ9LHtcIm5hbWVcIjpcIkFtZXJpY2FuIFNhbW9hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFTXCJ9LHtcIm5hbWVcIjpcIkFuZG9ycmFcIixcImFiYnJldmlhdGlvblwiOlwiQURcIn0se1wibmFtZVwiOlwiQW5nb2xhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFPXCJ9LHtcIm5hbWVcIjpcIkFuZ3VpbGxhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFJXCJ9LHtcIm5hbWVcIjpcIkFudGFyY3RpY2FcIixcImFiYnJldmlhdGlvblwiOlwiQVFcIn0se1wibmFtZVwiOlwiQW50aWd1YSBhbmQgQmFyYnVkYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBR1wifSx7XCJuYW1lXCI6XCJBcmdlbnRpbmFcIixcImFiYnJldmlhdGlvblwiOlwiQVJcIn0se1wibmFtZVwiOlwiQXJtZW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBTVwifSx7XCJuYW1lXCI6XCJBcnViYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBV1wifSx7XCJuYW1lXCI6XCJBdXN0cmFsaWFcIixcImFiYnJldmlhdGlvblwiOlwiQVVcIn0se1wibmFtZVwiOlwiQXVzdHJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBVFwifSx7XCJuYW1lXCI6XCJBemVyYmFpamFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFaXCJ9LHtcIm5hbWVcIjpcIkJhaGFtYXNcIixcImFiYnJldmlhdGlvblwiOlwiQlNcIn0se1wibmFtZVwiOlwiQmFocmFpblwiLFwiYWJicmV2aWF0aW9uXCI6XCJCSFwifSx7XCJuYW1lXCI6XCJCYW5nbGFkZXNoXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJEXCJ9LHtcIm5hbWVcIjpcIkJhcmJhZG9zXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJCXCJ9LHtcIm5hbWVcIjpcIkJlbGFydXNcIixcImFiYnJldmlhdGlvblwiOlwiQllcIn0se1wibmFtZVwiOlwiQmVsZ2l1bVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCRVwifSx7XCJuYW1lXCI6XCJCZWxpemVcIixcImFiYnJldmlhdGlvblwiOlwiQlpcIn0se1wibmFtZVwiOlwiQmVuaW5cIixcImFiYnJldmlhdGlvblwiOlwiQkpcIn0se1wibmFtZVwiOlwiQmVybXVkYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCTVwifSx7XCJuYW1lXCI6XCJCaHV0YW5cIixcImFiYnJldmlhdGlvblwiOlwiQlRcIn0se1wibmFtZVwiOlwiQm9saXZpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCT1wifSx7XCJuYW1lXCI6XCJCb3NuaWEgYW5kIEhlcnplZ292aW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJBXCJ9LHtcIm5hbWVcIjpcIkJvdHN3YW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJXXCJ9LHtcIm5hbWVcIjpcIkJvdXZldCBJc2xhbmRcIixcImFiYnJldmlhdGlvblwiOlwiQlZcIn0se1wibmFtZVwiOlwiQnJhemlsXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJSXCJ9LHtcIm5hbWVcIjpcIkJyaXRpc2ggQW50YXJjdGljIFRlcnJpdG9yeVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCUVwifSx7XCJuYW1lXCI6XCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcIixcImFiYnJldmlhdGlvblwiOlwiSU9cIn0se1wibmFtZVwiOlwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJWR1wifSx7XCJuYW1lXCI6XCJCcnVuZWlcIixcImFiYnJldmlhdGlvblwiOlwiQk5cIn0se1wibmFtZVwiOlwiQnVsZ2FyaWFcIixcImFiYnJldmlhdGlvblwiOlwiQkdcIn0se1wibmFtZVwiOlwiQnVya2luYSBGYXNvXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJGXCJ9LHtcIm5hbWVcIjpcIkJ1cnVuZGlcIixcImFiYnJldmlhdGlvblwiOlwiQklcIn0se1wibmFtZVwiOlwiQ2FtYm9kaWFcIixcImFiYnJldmlhdGlvblwiOlwiS0hcIn0se1wibmFtZVwiOlwiQ2FtZXJvb25cIixcImFiYnJldmlhdGlvblwiOlwiQ01cIn0se1wibmFtZVwiOlwiQ2FuYWRhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNBXCJ9LHtcIm5hbWVcIjpcIkNhbnRvbiBhbmQgRW5kZXJidXJ5IElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiQ1RcIn0se1wibmFtZVwiOlwiQ2FwZSBWZXJkZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDVlwifSx7XCJuYW1lXCI6XCJDYXltYW4gSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJLWVwifSx7XCJuYW1lXCI6XCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcIixcImFiYnJldmlhdGlvblwiOlwiQ0ZcIn0se1wibmFtZVwiOlwiQ2hhZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJURFwifSx7XCJuYW1lXCI6XCJDaGlsZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDTFwifSx7XCJuYW1lXCI6XCJDaGluYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDTlwifSx7XCJuYW1lXCI6XCJDaHJpc3RtYXMgSXNsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNYXCJ9LHtcIm5hbWVcIjpcIkNvY29zIFtLZWVsaW5nXSBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNDXCJ9LHtcIm5hbWVcIjpcIkNvbG9tYmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNPXCJ9LHtcIm5hbWVcIjpcIkNvbW9yb3NcIixcImFiYnJldmlhdGlvblwiOlwiS01cIn0se1wibmFtZVwiOlwiQ29uZ28gLSBCcmF6emF2aWxsZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDR1wifSx7XCJuYW1lXCI6XCJDb25nbyAtIEtpbnNoYXNhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNEXCJ9LHtcIm5hbWVcIjpcIkNvb2sgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJDS1wifSx7XCJuYW1lXCI6XCJDb3N0YSBSaWNhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNSXCJ9LHtcIm5hbWVcIjpcIkNyb2F0aWFcIixcImFiYnJldmlhdGlvblwiOlwiSFJcIn0se1wibmFtZVwiOlwiQ3ViYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDVVwifSx7XCJuYW1lXCI6XCJDeXBydXNcIixcImFiYnJldmlhdGlvblwiOlwiQ1lcIn0se1wibmFtZVwiOlwiQ3plY2ggUmVwdWJsaWNcIixcImFiYnJldmlhdGlvblwiOlwiQ1pcIn0se1wibmFtZVwiOlwiQ8O0dGUgZOKAmUl2b2lyZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJDSVwifSx7XCJuYW1lXCI6XCJEZW5tYXJrXCIsXCJhYmJyZXZpYXRpb25cIjpcIkRLXCJ9LHtcIm5hbWVcIjpcIkRqaWJvdXRpXCIsXCJhYmJyZXZpYXRpb25cIjpcIkRKXCJ9LHtcIm5hbWVcIjpcIkRvbWluaWNhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkRNXCJ9LHtcIm5hbWVcIjpcIkRvbWluaWNhbiBSZXB1YmxpY1wiLFwiYWJicmV2aWF0aW9uXCI6XCJET1wifSx7XCJuYW1lXCI6XCJEcm9ubmluZyBNYXVkIExhbmRcIixcImFiYnJldmlhdGlvblwiOlwiTlFcIn0se1wibmFtZVwiOlwiRWFzdCBHZXJtYW55XCIsXCJhYmJyZXZpYXRpb25cIjpcIkREXCJ9LHtcIm5hbWVcIjpcIkVjdWFkb3JcIixcImFiYnJldmlhdGlvblwiOlwiRUNcIn0se1wibmFtZVwiOlwiRWd5cHRcIixcImFiYnJldmlhdGlvblwiOlwiRUdcIn0se1wibmFtZVwiOlwiRWwgU2FsdmFkb3JcIixcImFiYnJldmlhdGlvblwiOlwiU1ZcIn0se1wibmFtZVwiOlwiRXF1YXRvcmlhbCBHdWluZWFcIixcImFiYnJldmlhdGlvblwiOlwiR1FcIn0se1wibmFtZVwiOlwiRXJpdHJlYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJFUlwifSx7XCJuYW1lXCI6XCJFc3RvbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkVFXCJ9LHtcIm5hbWVcIjpcIkV0aGlvcGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkVUXCJ9LHtcIm5hbWVcIjpcIkZhbGtsYW5kIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiRktcIn0se1wibmFtZVwiOlwiRmFyb2UgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJGT1wifSx7XCJuYW1lXCI6XCJGaWppXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZKXCJ9LHtcIm5hbWVcIjpcIkZpbmxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiRklcIn0se1wibmFtZVwiOlwiRnJhbmNlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZSXCJ9LHtcIm5hbWVcIjpcIkZyZW5jaCBHdWlhbmFcIixcImFiYnJldmlhdGlvblwiOlwiR0ZcIn0se1wibmFtZVwiOlwiRnJlbmNoIFBvbHluZXNpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQRlwifSx7XCJuYW1lXCI6XCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcIixcImFiYnJldmlhdGlvblwiOlwiVEZcIn0se1wibmFtZVwiOlwiRnJlbmNoIFNvdXRoZXJuIGFuZCBBbnRhcmN0aWMgVGVycml0b3JpZXNcIixcImFiYnJldmlhdGlvblwiOlwiRlFcIn0se1wibmFtZVwiOlwiR2Fib25cIixcImFiYnJldmlhdGlvblwiOlwiR0FcIn0se1wibmFtZVwiOlwiR2FtYmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdNXCJ9LHtcIm5hbWVcIjpcIkdlb3JnaWFcIixcImFiYnJldmlhdGlvblwiOlwiR0VcIn0se1wibmFtZVwiOlwiR2VybWFueVwiLFwiYWJicmV2aWF0aW9uXCI6XCJERVwifSx7XCJuYW1lXCI6XCJHaGFuYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHSFwifSx7XCJuYW1lXCI6XCJHaWJyYWx0YXJcIixcImFiYnJldmlhdGlvblwiOlwiR0lcIn0se1wibmFtZVwiOlwiR3JlZWNlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdSXCJ9LHtcIm5hbWVcIjpcIkdyZWVubGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJHTFwifSx7XCJuYW1lXCI6XCJHcmVuYWRhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdEXCJ9LHtcIm5hbWVcIjpcIkd1YWRlbG91cGVcIixcImFiYnJldmlhdGlvblwiOlwiR1BcIn0se1wibmFtZVwiOlwiR3VhbVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHVVwifSx7XCJuYW1lXCI6XCJHdWF0ZW1hbGFcIixcImFiYnJldmlhdGlvblwiOlwiR1RcIn0se1wibmFtZVwiOlwiR3Vlcm5zZXlcIixcImFiYnJldmlhdGlvblwiOlwiR0dcIn0se1wibmFtZVwiOlwiR3VpbmVhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdOXCJ9LHtcIm5hbWVcIjpcIkd1aW5lYS1CaXNzYXVcIixcImFiYnJldmlhdGlvblwiOlwiR1dcIn0se1wibmFtZVwiOlwiR3V5YW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdZXCJ9LHtcIm5hbWVcIjpcIkhhaXRpXCIsXCJhYmJyZXZpYXRpb25cIjpcIkhUXCJ9LHtcIm5hbWVcIjpcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJITVwifSx7XCJuYW1lXCI6XCJIb25kdXJhc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJITlwifSx7XCJuYW1lXCI6XCJIb25nIEtvbmcgU0FSIENoaW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkhLXCJ9LHtcIm5hbWVcIjpcIkh1bmdhcnlcIixcImFiYnJldmlhdGlvblwiOlwiSFVcIn0se1wibmFtZVwiOlwiSWNlbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJJU1wifSx7XCJuYW1lXCI6XCJJbmRpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJJTlwifSx7XCJuYW1lXCI6XCJJbmRvbmVzaWFcIixcImFiYnJldmlhdGlvblwiOlwiSURcIn0se1wibmFtZVwiOlwiSXJhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJJUlwifSx7XCJuYW1lXCI6XCJJcmFxXCIsXCJhYmJyZXZpYXRpb25cIjpcIklRXCJ9LHtcIm5hbWVcIjpcIklyZWxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiSUVcIn0se1wibmFtZVwiOlwiSXNsZSBvZiBNYW5cIixcImFiYnJldmlhdGlvblwiOlwiSU1cIn0se1wibmFtZVwiOlwiSXNyYWVsXCIsXCJhYmJyZXZpYXRpb25cIjpcIklMXCJ9LHtcIm5hbWVcIjpcIkl0YWx5XCIsXCJhYmJyZXZpYXRpb25cIjpcIklUXCJ9LHtcIm5hbWVcIjpcIkphbWFpY2FcIixcImFiYnJldmlhdGlvblwiOlwiSk1cIn0se1wibmFtZVwiOlwiSmFwYW5cIixcImFiYnJldmlhdGlvblwiOlwiSlBcIn0se1wibmFtZVwiOlwiSmVyc2V5XCIsXCJhYmJyZXZpYXRpb25cIjpcIkpFXCJ9LHtcIm5hbWVcIjpcIkpvaG5zdG9uIElzbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJKVFwifSx7XCJuYW1lXCI6XCJKb3JkYW5cIixcImFiYnJldmlhdGlvblwiOlwiSk9cIn0se1wibmFtZVwiOlwiS2F6YWtoc3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJLWlwifSx7XCJuYW1lXCI6XCJLZW55YVwiLFwiYWJicmV2aWF0aW9uXCI6XCJLRVwifSx7XCJuYW1lXCI6XCJLaXJpYmF0aVwiLFwiYWJicmV2aWF0aW9uXCI6XCJLSVwifSx7XCJuYW1lXCI6XCJLdXdhaXRcIixcImFiYnJldmlhdGlvblwiOlwiS1dcIn0se1wibmFtZVwiOlwiS3lyZ3l6c3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJLR1wifSx7XCJuYW1lXCI6XCJMYW9zXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxBXCJ9LHtcIm5hbWVcIjpcIkxhdHZpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMVlwifSx7XCJuYW1lXCI6XCJMZWJhbm9uXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxCXCJ9LHtcIm5hbWVcIjpcIkxlc290aG9cIixcImFiYnJldmlhdGlvblwiOlwiTFNcIn0se1wibmFtZVwiOlwiTGliZXJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMUlwifSx7XCJuYW1lXCI6XCJMaWJ5YVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMWVwifSx7XCJuYW1lXCI6XCJMaWVjaHRlbnN0ZWluXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxJXCJ9LHtcIm5hbWVcIjpcIkxpdGh1YW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMVFwifSx7XCJuYW1lXCI6XCJMdXhlbWJvdXJnXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxVXCJ9LHtcIm5hbWVcIjpcIk1hY2F1IFNBUiBDaGluYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNT1wifSx7XCJuYW1lXCI6XCJNYWNlZG9uaWFcIixcImFiYnJldmlhdGlvblwiOlwiTUtcIn0se1wibmFtZVwiOlwiTWFkYWdhc2NhclwiLFwiYWJicmV2aWF0aW9uXCI6XCJNR1wifSx7XCJuYW1lXCI6XCJNYWxhd2lcIixcImFiYnJldmlhdGlvblwiOlwiTVdcIn0se1wibmFtZVwiOlwiTWFsYXlzaWFcIixcImFiYnJldmlhdGlvblwiOlwiTVlcIn0se1wibmFtZVwiOlwiTWFsZGl2ZXNcIixcImFiYnJldmlhdGlvblwiOlwiTVZcIn0se1wibmFtZVwiOlwiTWFsaVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNTFwifSx7XCJuYW1lXCI6XCJNYWx0YVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNVFwifSx7XCJuYW1lXCI6XCJNYXJzaGFsbCBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1IXCJ9LHtcIm5hbWVcIjpcIk1hcnRpbmlxdWVcIixcImFiYnJldmlhdGlvblwiOlwiTVFcIn0se1wibmFtZVwiOlwiTWF1cml0YW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNUlwifSx7XCJuYW1lXCI6XCJNYXVyaXRpdXNcIixcImFiYnJldmlhdGlvblwiOlwiTVVcIn0se1wibmFtZVwiOlwiTWF5b3R0ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJZVFwifSx7XCJuYW1lXCI6XCJNZXRyb3BvbGl0YW4gRnJhbmNlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZYXCJ9LHtcIm5hbWVcIjpcIk1leGljb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNWFwifSx7XCJuYW1lXCI6XCJNaWNyb25lc2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZNXCJ9LHtcIm5hbWVcIjpcIk1pZHdheSBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1JXCJ9LHtcIm5hbWVcIjpcIk1vbGRvdmFcIixcImFiYnJldmlhdGlvblwiOlwiTURcIn0se1wibmFtZVwiOlwiTW9uYWNvXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1DXCJ9LHtcIm5hbWVcIjpcIk1vbmdvbGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1OXCJ9LHtcIm5hbWVcIjpcIk1vbnRlbmVncm9cIixcImFiYnJldmlhdGlvblwiOlwiTUVcIn0se1wibmFtZVwiOlwiTW9udHNlcnJhdFwiLFwiYWJicmV2aWF0aW9uXCI6XCJNU1wifSx7XCJuYW1lXCI6XCJNb3JvY2NvXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1BXCJ9LHtcIm5hbWVcIjpcIk1vemFtYmlxdWVcIixcImFiYnJldmlhdGlvblwiOlwiTVpcIn0se1wibmFtZVwiOlwiTXlhbm1hciBbQnVybWFdXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1NXCJ9LHtcIm5hbWVcIjpcIk5hbWliaWFcIixcImFiYnJldmlhdGlvblwiOlwiTkFcIn0se1wibmFtZVwiOlwiTmF1cnVcIixcImFiYnJldmlhdGlvblwiOlwiTlJcIn0se1wibmFtZVwiOlwiTmVwYWxcIixcImFiYnJldmlhdGlvblwiOlwiTlBcIn0se1wibmFtZVwiOlwiTmV0aGVybGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiTkxcIn0se1wibmFtZVwiOlwiTmV0aGVybGFuZHMgQW50aWxsZXNcIixcImFiYnJldmlhdGlvblwiOlwiQU5cIn0se1wibmFtZVwiOlwiTmV1dHJhbCBab25lXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5UXCJ9LHtcIm5hbWVcIjpcIk5ldyBDYWxlZG9uaWFcIixcImFiYnJldmlhdGlvblwiOlwiTkNcIn0se1wibmFtZVwiOlwiTmV3IFplYWxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiTlpcIn0se1wibmFtZVwiOlwiTmljYXJhZ3VhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5JXCJ9LHtcIm5hbWVcIjpcIk5pZ2VyXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5FXCJ9LHtcIm5hbWVcIjpcIk5pZ2VyaWFcIixcImFiYnJldmlhdGlvblwiOlwiTkdcIn0se1wibmFtZVwiOlwiTml1ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJOVVwifSx7XCJuYW1lXCI6XCJOb3Jmb2xrIElzbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJORlwifSx7XCJuYW1lXCI6XCJOb3J0aCBLb3JlYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJLUFwifSx7XCJuYW1lXCI6XCJOb3J0aCBWaWV0bmFtXCIsXCJhYmJyZXZpYXRpb25cIjpcIlZEXCJ9LHtcIm5hbWVcIjpcIk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNUFwifSx7XCJuYW1lXCI6XCJOb3J3YXlcIixcImFiYnJldmlhdGlvblwiOlwiTk9cIn0se1wibmFtZVwiOlwiT21hblwiLFwiYWJicmV2aWF0aW9uXCI6XCJPTVwifSx7XCJuYW1lXCI6XCJQYWNpZmljIElzbGFuZHMgVHJ1c3QgVGVycml0b3J5XCIsXCJhYmJyZXZpYXRpb25cIjpcIlBDXCJ9LHtcIm5hbWVcIjpcIlBha2lzdGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBLXCJ9LHtcIm5hbWVcIjpcIlBhbGF1XCIsXCJhYmJyZXZpYXRpb25cIjpcIlBXXCJ9LHtcIm5hbWVcIjpcIlBhbGVzdGluaWFuIFRlcnJpdG9yaWVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBTXCJ9LHtcIm5hbWVcIjpcIlBhbmFtYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQQVwifSx7XCJuYW1lXCI6XCJQYW5hbWEgQ2FuYWwgWm9uZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQWlwifSx7XCJuYW1lXCI6XCJQYXB1YSBOZXcgR3VpbmVhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBHXCJ9LHtcIm5hbWVcIjpcIlBhcmFndWF5XCIsXCJhYmJyZXZpYXRpb25cIjpcIlBZXCJ9LHtcIm5hbWVcIjpcIlBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgWWVtZW5cIixcImFiYnJldmlhdGlvblwiOlwiWURcIn0se1wibmFtZVwiOlwiUGVydVwiLFwiYWJicmV2aWF0aW9uXCI6XCJQRVwifSx7XCJuYW1lXCI6XCJQaGlsaXBwaW5lc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJQSFwifSx7XCJuYW1lXCI6XCJQaXRjYWlybiBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBOXCJ9LHtcIm5hbWVcIjpcIlBvbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJQTFwifSx7XCJuYW1lXCI6XCJQb3J0dWdhbFwiLFwiYWJicmV2aWF0aW9uXCI6XCJQVFwifSx7XCJuYW1lXCI6XCJQdWVydG8gUmljb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJQUlwifSx7XCJuYW1lXCI6XCJRYXRhclwiLFwiYWJicmV2aWF0aW9uXCI6XCJRQVwifSx7XCJuYW1lXCI6XCJSb21hbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlJPXCJ9LHtcIm5hbWVcIjpcIlJ1c3NpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJSVVwifSx7XCJuYW1lXCI6XCJSd2FuZGFcIixcImFiYnJldmlhdGlvblwiOlwiUldcIn0se1wibmFtZVwiOlwiUsOpdW5pb25cIixcImFiYnJldmlhdGlvblwiOlwiUkVcIn0se1wibmFtZVwiOlwiU2FpbnQgQmFydGjDqWxlbXlcIixcImFiYnJldmlhdGlvblwiOlwiQkxcIn0se1wibmFtZVwiOlwiU2FpbnQgSGVsZW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNIXCJ9LHtcIm5hbWVcIjpcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJLTlwifSx7XCJuYW1lXCI6XCJTYWludCBMdWNpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMQ1wifSx7XCJuYW1lXCI6XCJTYWludCBNYXJ0aW5cIixcImFiYnJldmlhdGlvblwiOlwiTUZcIn0se1wibmFtZVwiOlwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblwiLFwiYWJicmV2aWF0aW9uXCI6XCJQTVwifSx7XCJuYW1lXCI6XCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJWQ1wifSx7XCJuYW1lXCI6XCJTYW1vYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJXU1wifSx7XCJuYW1lXCI6XCJTYW4gTWFyaW5vXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNNXCJ9LHtcIm5hbWVcIjpcIlNhdWRpIEFyYWJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTQVwifSx7XCJuYW1lXCI6XCJTZW5lZ2FsXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNOXCJ9LHtcIm5hbWVcIjpcIlNlcmJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJSU1wifSx7XCJuYW1lXCI6XCJTZXJiaWEgYW5kIE1vbnRlbmVncm9cIixcImFiYnJldmlhdGlvblwiOlwiQ1NcIn0se1wibmFtZVwiOlwiU2V5Y2hlbGxlc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJTQ1wifSx7XCJuYW1lXCI6XCJTaWVycmEgTGVvbmVcIixcImFiYnJldmlhdGlvblwiOlwiU0xcIn0se1wibmFtZVwiOlwiU2luZ2Fwb3JlXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNHXCJ9LHtcIm5hbWVcIjpcIlNsb3Zha2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNLXCJ9LHtcIm5hbWVcIjpcIlNsb3ZlbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNJXCJ9LHtcIm5hbWVcIjpcIlNvbG9tb24gSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJTQlwifSx7XCJuYW1lXCI6XCJTb21hbGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNPXCJ9LHtcIm5hbWVcIjpcIlNvdXRoIEFmcmljYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJaQVwifSx7XCJuYW1lXCI6XCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJHU1wifSx7XCJuYW1lXCI6XCJTb3V0aCBLb3JlYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJLUlwifSx7XCJuYW1lXCI6XCJTcGFpblwiLFwiYWJicmV2aWF0aW9uXCI6XCJFU1wifSx7XCJuYW1lXCI6XCJTcmkgTGFua2FcIixcImFiYnJldmlhdGlvblwiOlwiTEtcIn0se1wibmFtZVwiOlwiU3VkYW5cIixcImFiYnJldmlhdGlvblwiOlwiU0RcIn0se1wibmFtZVwiOlwiU3VyaW5hbWVcIixcImFiYnJldmlhdGlvblwiOlwiU1JcIn0se1wibmFtZVwiOlwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblwiLFwiYWJicmV2aWF0aW9uXCI6XCJTSlwifSx7XCJuYW1lXCI6XCJTd2F6aWxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiU1pcIn0se1wibmFtZVwiOlwiU3dlZGVuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNFXCJ9LHtcIm5hbWVcIjpcIlN3aXR6ZXJsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNIXCJ9LHtcIm5hbWVcIjpcIlN5cmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNZXCJ9LHtcIm5hbWVcIjpcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTVFwifSx7XCJuYW1lXCI6XCJUYWl3YW5cIixcImFiYnJldmlhdGlvblwiOlwiVFdcIn0se1wibmFtZVwiOlwiVGFqaWtpc3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJUSlwifSx7XCJuYW1lXCI6XCJUYW56YW5pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUWlwifSx7XCJuYW1lXCI6XCJUaGFpbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJUSFwifSx7XCJuYW1lXCI6XCJUaW1vci1MZXN0ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUTFwifSx7XCJuYW1lXCI6XCJUb2dvXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRHXCJ9LHtcIm5hbWVcIjpcIlRva2VsYXVcIixcImFiYnJldmlhdGlvblwiOlwiVEtcIn0se1wibmFtZVwiOlwiVG9uZ2FcIixcImFiYnJldmlhdGlvblwiOlwiVE9cIn0se1wibmFtZVwiOlwiVHJpbmlkYWQgYW5kIFRvYmFnb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJUVFwifSx7XCJuYW1lXCI6XCJUdW5pc2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlROXCJ9LHtcIm5hbWVcIjpcIlR1cmtleVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUUlwifSx7XCJuYW1lXCI6XCJUdXJrbWVuaXN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiVE1cIn0se1wibmFtZVwiOlwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRDXCJ9LHtcIm5hbWVcIjpcIlR1dmFsdVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUVlwifSx7XCJuYW1lXCI6XCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiVU1cIn0se1wibmFtZVwiOlwiVS5TLiBNaXNjZWxsYW5lb3VzIFBhY2lmaWMgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJQVVwifSx7XCJuYW1lXCI6XCJVLlMuIFZpcmdpbiBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlZJXCJ9LHtcIm5hbWVcIjpcIlVnYW5kYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJVR1wifSx7XCJuYW1lXCI6XCJVa3JhaW5lXCIsXCJhYmJyZXZpYXRpb25cIjpcIlVBXCJ9LHtcIm5hbWVcIjpcIlVuaW9uIG9mIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWNzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNVXCJ9LHtcIm5hbWVcIjpcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFFXCJ9LHtcIm5hbWVcIjpcIlVuaXRlZCBLaW5nZG9tXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdCXCJ9LHtcIm5hbWVcIjpcIlVuaXRlZCBTdGF0ZXNcIixcImFiYnJldmlhdGlvblwiOlwiVVNcIn0se1wibmFtZVwiOlwiVW5rbm93biBvciBJbnZhbGlkIFJlZ2lvblwiLFwiYWJicmV2aWF0aW9uXCI6XCJaWlwifSx7XCJuYW1lXCI6XCJVcnVndWF5XCIsXCJhYmJyZXZpYXRpb25cIjpcIlVZXCJ9LHtcIm5hbWVcIjpcIlV6YmVraXN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiVVpcIn0se1wibmFtZVwiOlwiVmFudWF0dVwiLFwiYWJicmV2aWF0aW9uXCI6XCJWVVwifSx7XCJuYW1lXCI6XCJWYXRpY2FuIENpdHlcIixcImFiYnJldmlhdGlvblwiOlwiVkFcIn0se1wibmFtZVwiOlwiVmVuZXp1ZWxhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlZFXCJ9LHtcIm5hbWVcIjpcIlZpZXRuYW1cIixcImFiYnJldmlhdGlvblwiOlwiVk5cIn0se1wibmFtZVwiOlwiV2FrZSBJc2xhbmRcIixcImFiYnJldmlhdGlvblwiOlwiV0tcIn0se1wibmFtZVwiOlwiV2FsbGlzIGFuZCBGdXR1bmFcIixcImFiYnJldmlhdGlvblwiOlwiV0ZcIn0se1wibmFtZVwiOlwiV2VzdGVybiBTYWhhcmFcIixcImFiYnJldmlhdGlvblwiOlwiRUhcIn0se1wibmFtZVwiOlwiWWVtZW5cIixcImFiYnJldmlhdGlvblwiOlwiWUVcIn0se1wibmFtZVwiOlwiWmFtYmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlpNXCJ9LHtcIm5hbWVcIjpcIlppbWJhYndlXCIsXCJhYmJyZXZpYXRpb25cIjpcIlpXXCJ9LHtcIm5hbWVcIjpcIsOFbGFuZCBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFYXCJ9XSxcblxuICAgICAgICBwcm92aW5jZXM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnQWxiZXJ0YScsIGFiYnJldmlhdGlvbjogJ0FCJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0JyaXRpc2ggQ29sdW1iaWEnLCBhYmJyZXZpYXRpb246ICdCQyd9LFxuICAgICAgICAgICAge25hbWU6ICdNYW5pdG9iYScsIGFiYnJldmlhdGlvbjogJ01CJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldyBCcnVuc3dpY2snLCBhYmJyZXZpYXRpb246ICdOQid9LFxuICAgICAgICAgICAge25hbWU6ICdOZXdmb3VuZGxhbmQgYW5kIExhYnJhZG9yJywgYWJicmV2aWF0aW9uOiAnTkwnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTm92YSBTY290aWEnLCBhYmJyZXZpYXRpb246ICdOUyd9LFxuICAgICAgICAgICAge25hbWU6ICdPbnRhcmlvJywgYWJicmV2aWF0aW9uOiAnT04nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUHJpbmNlIEVkd2FyZCBJc2xhbmQnLCBhYmJyZXZpYXRpb246ICdQRSd9LFxuICAgICAgICAgICAge25hbWU6ICdRdWViZWMnLCBhYmJyZXZpYXRpb246ICdRQyd9LFxuICAgICAgICAgICAge25hbWU6ICdTYXNrYXRjaGV3YW4nLCBhYmJyZXZpYXRpb246ICdTSyd9LFxuXG4gICAgICAgICAgICAvLyBUaGUgY2FzZSBjb3VsZCBiZSBtYWRlIHRoYXQgdGhlIGZvbGxvd2luZyBhcmUgbm90IGFjdHVhbGx5IHByb3ZpbmNlc1xuICAgICAgICAgICAgLy8gc2luY2UgdGhleSBhcmUgdGVjaG5pY2FsbHkgY29uc2lkZXJlZCBcInRlcnJpdG9yaWVzXCIgaG93ZXZlciB0aGV5IGFsbFxuICAgICAgICAgICAgLy8gbG9vayB0aGUgc2FtZSBvbiBhbiBlbnZlbG9wZSFcbiAgICAgICAgICAgIHtuYW1lOiAnTm9ydGh3ZXN0IFRlcnJpdG9yaWVzJywgYWJicmV2aWF0aW9uOiAnTlQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTnVuYXZ1dCcsIGFiYnJldmlhdGlvbjogJ05VJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1l1a29uJywgYWJicmV2aWF0aW9uOiAnWVQnfVxuICAgICAgICBdLFxuXG4gICAgICAgIHVzX3N0YXRlc19hbmRfZGM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnQWxhYmFtYScsIGFiYnJldmlhdGlvbjogJ0FMJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0FsYXNrYScsIGFiYnJldmlhdGlvbjogJ0FLJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0FyaXpvbmEnLCBhYmJyZXZpYXRpb246ICdBWid9LFxuICAgICAgICAgICAge25hbWU6ICdBcmthbnNhcycsIGFiYnJldmlhdGlvbjogJ0FSJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0NhbGlmb3JuaWEnLCBhYmJyZXZpYXRpb246ICdDQSd9LFxuICAgICAgICAgICAge25hbWU6ICdDb2xvcmFkbycsIGFiYnJldmlhdGlvbjogJ0NPJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0Nvbm5lY3RpY3V0JywgYWJicmV2aWF0aW9uOiAnQ1QnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnRGVsYXdhcmUnLCBhYmJyZXZpYXRpb246ICdERSd9LFxuICAgICAgICAgICAge25hbWU6ICdEaXN0cmljdCBvZiBDb2x1bWJpYScsIGFiYnJldmlhdGlvbjogJ0RDJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0Zsb3JpZGEnLCBhYmJyZXZpYXRpb246ICdGTCd9LFxuICAgICAgICAgICAge25hbWU6ICdHZW9yZ2lhJywgYWJicmV2aWF0aW9uOiAnR0EnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSGF3YWlpJywgYWJicmV2aWF0aW9uOiAnSEknfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSWRhaG8nLCBhYmJyZXZpYXRpb246ICdJRCd9LFxuICAgICAgICAgICAge25hbWU6ICdJbGxpbm9pcycsIGFiYnJldmlhdGlvbjogJ0lMJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0luZGlhbmEnLCBhYmJyZXZpYXRpb246ICdJTid9LFxuICAgICAgICAgICAge25hbWU6ICdJb3dhJywgYWJicmV2aWF0aW9uOiAnSUEnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnS2Fuc2FzJywgYWJicmV2aWF0aW9uOiAnS1MnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnS2VudHVja3knLCBhYmJyZXZpYXRpb246ICdLWSd9LFxuICAgICAgICAgICAge25hbWU6ICdMb3Vpc2lhbmEnLCBhYmJyZXZpYXRpb246ICdMQSd9LFxuICAgICAgICAgICAge25hbWU6ICdNYWluZScsIGFiYnJldmlhdGlvbjogJ01FJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01hcnlsYW5kJywgYWJicmV2aWF0aW9uOiAnTUQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWFzc2FjaHVzZXR0cycsIGFiYnJldmlhdGlvbjogJ01BJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01pY2hpZ2FuJywgYWJicmV2aWF0aW9uOiAnTUknfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWlubmVzb3RhJywgYWJicmV2aWF0aW9uOiAnTU4nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWlzc2lzc2lwcGknLCBhYmJyZXZpYXRpb246ICdNUyd9LFxuICAgICAgICAgICAge25hbWU6ICdNaXNzb3VyaScsIGFiYnJldmlhdGlvbjogJ01PJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01vbnRhbmEnLCBhYmJyZXZpYXRpb246ICdNVCd9LFxuICAgICAgICAgICAge25hbWU6ICdOZWJyYXNrYScsIGFiYnJldmlhdGlvbjogJ05FJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldmFkYScsIGFiYnJldmlhdGlvbjogJ05WJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldyBIYW1wc2hpcmUnLCBhYmJyZXZpYXRpb246ICdOSCd9LFxuICAgICAgICAgICAge25hbWU6ICdOZXcgSmVyc2V5JywgYWJicmV2aWF0aW9uOiAnTkonfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTmV3IE1leGljbycsIGFiYnJldmlhdGlvbjogJ05NJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldyBZb3JrJywgYWJicmV2aWF0aW9uOiAnTlknfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTm9ydGggQ2Fyb2xpbmEnLCBhYmJyZXZpYXRpb246ICdOQyd9LFxuICAgICAgICAgICAge25hbWU6ICdOb3J0aCBEYWtvdGEnLCBhYmJyZXZpYXRpb246ICdORCd9LFxuICAgICAgICAgICAge25hbWU6ICdPaGlvJywgYWJicmV2aWF0aW9uOiAnT0gnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnT2tsYWhvbWEnLCBhYmJyZXZpYXRpb246ICdPSyd9LFxuICAgICAgICAgICAge25hbWU6ICdPcmVnb24nLCBhYmJyZXZpYXRpb246ICdPUid9LFxuICAgICAgICAgICAge25hbWU6ICdQZW5uc3lsdmFuaWEnLCBhYmJyZXZpYXRpb246ICdQQSd9LFxuICAgICAgICAgICAge25hbWU6ICdSaG9kZSBJc2xhbmQnLCBhYmJyZXZpYXRpb246ICdSSSd9LFxuICAgICAgICAgICAge25hbWU6ICdTb3V0aCBDYXJvbGluYScsIGFiYnJldmlhdGlvbjogJ1NDJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1NvdXRoIERha290YScsIGFiYnJldmlhdGlvbjogJ1NEJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1Rlbm5lc3NlZScsIGFiYnJldmlhdGlvbjogJ1ROJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1RleGFzJywgYWJicmV2aWF0aW9uOiAnVFgnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVXRhaCcsIGFiYnJldmlhdGlvbjogJ1VUJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1Zlcm1vbnQnLCBhYmJyZXZpYXRpb246ICdWVCd9LFxuICAgICAgICAgICAge25hbWU6ICdWaXJnaW5pYScsIGFiYnJldmlhdGlvbjogJ1ZBJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1dhc2hpbmd0b24nLCBhYmJyZXZpYXRpb246ICdXQSd9LFxuICAgICAgICAgICAge25hbWU6ICdXZXN0IFZpcmdpbmlhJywgYWJicmV2aWF0aW9uOiAnV1YnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnV2lzY29uc2luJywgYWJicmV2aWF0aW9uOiAnV0knfSxcbiAgICAgICAgICAgIHtuYW1lOiAnV3lvbWluZycsIGFiYnJldmlhdGlvbjogJ1dZJ31cbiAgICAgICAgXSxcblxuICAgICAgICB0ZXJyaXRvcmllczogW1xuICAgICAgICAgICAge25hbWU6ICdBbWVyaWNhbiBTYW1vYScsIGFiYnJldmlhdGlvbjogJ0FTJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0ZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYScsIGFiYnJldmlhdGlvbjogJ0ZNJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0d1YW0nLCBhYmJyZXZpYXRpb246ICdHVSd9LFxuICAgICAgICAgICAge25hbWU6ICdNYXJzaGFsbCBJc2xhbmRzJywgYWJicmV2aWF0aW9uOiAnTUgnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzJywgYWJicmV2aWF0aW9uOiAnTVAnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUHVlcnRvIFJpY28nLCBhYmJyZXZpYXRpb246ICdQUid9LFxuICAgICAgICAgICAge25hbWU6ICdWaXJnaW4gSXNsYW5kcywgVS5TLicsIGFiYnJldmlhdGlvbjogJ1ZJJ31cbiAgICAgICAgXSxcblxuICAgICAgICBhcm1lZF9mb3JjZXM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnQXJtZWQgRm9yY2VzIEV1cm9wZScsIGFiYnJldmlhdGlvbjogJ0FFJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0FybWVkIEZvcmNlcyBQYWNpZmljJywgYWJicmV2aWF0aW9uOiAnQVAnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQXJtZWQgRm9yY2VzIHRoZSBBbWVyaWNhcycsIGFiYnJldmlhdGlvbjogJ0FBJ31cbiAgICAgICAgXSxcblxuICAgICAgICBzdHJlZXRfc3VmZml4ZXM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnQXZlbnVlJywgYWJicmV2aWF0aW9uOiAnQXZlJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0JvdWxldmFyZCcsIGFiYnJldmlhdGlvbjogJ0JsdmQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQ2VudGVyJywgYWJicmV2aWF0aW9uOiAnQ3RyJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0NpcmNsZScsIGFiYnJldmlhdGlvbjogJ0Npcid9LFxuICAgICAgICAgICAge25hbWU6ICdDb3VydCcsIGFiYnJldmlhdGlvbjogJ0N0J30sXG4gICAgICAgICAgICB7bmFtZTogJ0RyaXZlJywgYWJicmV2aWF0aW9uOiAnRHInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnRXh0ZW5zaW9uJywgYWJicmV2aWF0aW9uOiAnRXh0J30sXG4gICAgICAgICAgICB7bmFtZTogJ0dsZW4nLCBhYmJyZXZpYXRpb246ICdHbG4nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnR3JvdmUnLCBhYmJyZXZpYXRpb246ICdHcnYnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSGVpZ2h0cycsIGFiYnJldmlhdGlvbjogJ0h0cyd9LFxuICAgICAgICAgICAge25hbWU6ICdIaWdod2F5JywgYWJicmV2aWF0aW9uOiAnSHd5J30sXG4gICAgICAgICAgICB7bmFtZTogJ0p1bmN0aW9uJywgYWJicmV2aWF0aW9uOiAnSmN0J30sXG4gICAgICAgICAgICB7bmFtZTogJ0tleScsIGFiYnJldmlhdGlvbjogJ0tleSd9LFxuICAgICAgICAgICAge25hbWU6ICdMYW5lJywgYWJicmV2aWF0aW9uOiAnTG4nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTG9vcCcsIGFiYnJldmlhdGlvbjogJ0xvb3AnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWFub3InLCBhYmJyZXZpYXRpb246ICdNbnInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWlsbCcsIGFiYnJldmlhdGlvbjogJ01pbGwnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGFyaycsIGFiYnJldmlhdGlvbjogJ1BhcmsnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGFya3dheScsIGFiYnJldmlhdGlvbjogJ1Brd3knfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGFzcycsIGFiYnJldmlhdGlvbjogJ1Bhc3MnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGF0aCcsIGFiYnJldmlhdGlvbjogJ1BhdGgnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGlrZScsIGFiYnJldmlhdGlvbjogJ1Bpa2UnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUGxhY2UnLCBhYmJyZXZpYXRpb246ICdQbCd9LFxuICAgICAgICAgICAge25hbWU6ICdQbGF6YScsIGFiYnJldmlhdGlvbjogJ1Bseid9LFxuICAgICAgICAgICAge25hbWU6ICdQb2ludCcsIGFiYnJldmlhdGlvbjogJ1B0J30sXG4gICAgICAgICAgICB7bmFtZTogJ1JpZGdlJywgYWJicmV2aWF0aW9uOiAnUmRnJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1JpdmVyJywgYWJicmV2aWF0aW9uOiAnUml2J30sXG4gICAgICAgICAgICB7bmFtZTogJ1JvYWQnLCBhYmJyZXZpYXRpb246ICdSZCd9LFxuICAgICAgICAgICAge25hbWU6ICdTcXVhcmUnLCBhYmJyZXZpYXRpb246ICdTcSd9LFxuICAgICAgICAgICAge25hbWU6ICdTdHJlZXQnLCBhYmJyZXZpYXRpb246ICdTdCd9LFxuICAgICAgICAgICAge25hbWU6ICdUZXJyYWNlJywgYWJicmV2aWF0aW9uOiAnVGVyJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1RyYWlsJywgYWJicmV2aWF0aW9uOiAnVHJsJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1R1cm5waWtlJywgYWJicmV2aWF0aW9uOiAnVHBrZSd9LFxuICAgICAgICAgICAge25hbWU6ICdWaWV3JywgYWJicmV2aWF0aW9uOiAnVncnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnV2F5JywgYWJicmV2aWF0aW9uOiAnV2F5J31cbiAgICAgICAgXSxcblxuICAgICAgICBtb250aHM6IFtcbiAgICAgICAgICAgIHtuYW1lOiAnSmFudWFyeScsIHNob3J0X25hbWU6ICdKYW4nLCBudW1lcmljOiAnMDEnLCBkYXlzOiAzMX0sXG4gICAgICAgICAgICAvLyBOb3QgbWVzc2luZyB3aXRoIGxlYXAgeWVhcnMuLi5cbiAgICAgICAgICAgIHtuYW1lOiAnRmVicnVhcnknLCBzaG9ydF9uYW1lOiAnRmViJywgbnVtZXJpYzogJzAyJywgZGF5czogMjh9LFxuICAgICAgICAgICAge25hbWU6ICdNYXJjaCcsIHNob3J0X25hbWU6ICdNYXInLCBudW1lcmljOiAnMDMnLCBkYXlzOiAzMX0sXG4gICAgICAgICAgICB7bmFtZTogJ0FwcmlsJywgc2hvcnRfbmFtZTogJ0FwcicsIG51bWVyaWM6ICcwNCcsIGRheXM6IDMwfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWF5Jywgc2hvcnRfbmFtZTogJ01heScsIG51bWVyaWM6ICcwNScsIGRheXM6IDMxfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSnVuZScsIHNob3J0X25hbWU6ICdKdW4nLCBudW1lcmljOiAnMDYnLCBkYXlzOiAzMH0sXG4gICAgICAgICAgICB7bmFtZTogJ0p1bHknLCBzaG9ydF9uYW1lOiAnSnVsJywgbnVtZXJpYzogJzA3JywgZGF5czogMzF9LFxuICAgICAgICAgICAge25hbWU6ICdBdWd1c3QnLCBzaG9ydF9uYW1lOiAnQXVnJywgbnVtZXJpYzogJzA4JywgZGF5czogMzF9LFxuICAgICAgICAgICAge25hbWU6ICdTZXB0ZW1iZXInLCBzaG9ydF9uYW1lOiAnU2VwJywgbnVtZXJpYzogJzA5JywgZGF5czogMzB9LFxuICAgICAgICAgICAge25hbWU6ICdPY3RvYmVyJywgc2hvcnRfbmFtZTogJ09jdCcsIG51bWVyaWM6ICcxMCcsIGRheXM6IDMxfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTm92ZW1iZXInLCBzaG9ydF9uYW1lOiAnTm92JywgbnVtZXJpYzogJzExJywgZGF5czogMzB9LFxuICAgICAgICAgICAge25hbWU6ICdEZWNlbWJlcicsIHNob3J0X25hbWU6ICdEZWMnLCBudW1lcmljOiAnMTInLCBkYXlzOiAzMX1cbiAgICAgICAgXSxcblxuICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JhbmtfY2FyZF9udW1iZXIjSXNzdWVyX2lkZW50aWZpY2F0aW9uX251bWJlcl8uMjhJSU4uMjlcbiAgICAgICAgY2NfdHlwZXM6IFtcbiAgICAgICAgICAgIHtuYW1lOiBcIkFtZXJpY2FuIEV4cHJlc3NcIiwgc2hvcnRfbmFtZTogJ2FtZXgnLCBwcmVmaXg6ICczNCcsIGxlbmd0aDogMTV9LFxuICAgICAgICAgICAge25hbWU6IFwiQmFua2NhcmRcIiwgc2hvcnRfbmFtZTogJ2JhbmtjYXJkJywgcHJlZml4OiAnNTYxMCcsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiQ2hpbmEgVW5pb25QYXlcIiwgc2hvcnRfbmFtZTogJ2NoaW5hdW5pb24nLCBwcmVmaXg6ICc2MicsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiRGluZXJzIENsdWIgQ2FydGUgQmxhbmNoZVwiLCBzaG9ydF9uYW1lOiAnZGNjYXJ0ZScsIHByZWZpeDogJzMwMCcsIGxlbmd0aDogMTR9LFxuICAgICAgICAgICAge25hbWU6IFwiRGluZXJzIENsdWIgZW5Sb3V0ZVwiLCBzaG9ydF9uYW1lOiAnZGNlbnJvdXRlJywgcHJlZml4OiAnMjAxNCcsIGxlbmd0aDogMTV9LFxuICAgICAgICAgICAge25hbWU6IFwiRGluZXJzIENsdWIgSW50ZXJuYXRpb25hbFwiLCBzaG9ydF9uYW1lOiAnZGNpbnRsJywgcHJlZml4OiAnMzYnLCBsZW5ndGg6IDE0fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkRpbmVycyBDbHViIFVuaXRlZCBTdGF0ZXMgJiBDYW5hZGFcIiwgc2hvcnRfbmFtZTogJ2RjdXNjJywgcHJlZml4OiAnNTQnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkRpc2NvdmVyIENhcmRcIiwgc2hvcnRfbmFtZTogJ2Rpc2NvdmVyJywgcHJlZml4OiAnNjAxMScsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiSW5zdGFQYXltZW50XCIsIHNob3J0X25hbWU6ICdpbnN0YXBheScsIHByZWZpeDogJzYzNycsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiSkNCXCIsIHNob3J0X25hbWU6ICdqY2InLCBwcmVmaXg6ICczNTI4JywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJMYXNlclwiLCBzaG9ydF9uYW1lOiAnbGFzZXInLCBwcmVmaXg6ICc2MzA0JywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJNYWVzdHJvXCIsIHNob3J0X25hbWU6ICdtYWVzdHJvJywgcHJlZml4OiAnNTAxOCcsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiTWFzdGVyY2FyZFwiLCBzaG9ydF9uYW1lOiAnbWMnLCBwcmVmaXg6ICc1MScsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiU29sb1wiLCBzaG9ydF9uYW1lOiAnc29sbycsIHByZWZpeDogJzYzMzQnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIlN3aXRjaFwiLCBzaG9ydF9uYW1lOiAnc3dpdGNoJywgcHJlZml4OiAnNDkwMycsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiVmlzYVwiLCBzaG9ydF9uYW1lOiAndmlzYScsIHByZWZpeDogJzQnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIlZpc2EgRWxlY3Ryb25cIiwgc2hvcnRfbmFtZTogJ2VsZWN0cm9uJywgcHJlZml4OiAnNDAyNicsIGxlbmd0aDogMTZ9XG4gICAgICAgIF0sXG5cbiAgICAgICAgLy9yZXR1cm4gYWxsIHdvcmxkIGN1cnJlbmN5IGJ5IElTTyA0MjE3XG4gICAgICAgIGN1cnJlbmN5X3R5cGVzOiBbXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FFRCcsICduYW1lJyA6ICdVbml0ZWQgQXJhYiBFbWlyYXRlcyBEaXJoYW0nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQUZOJywgJ25hbWUnIDogJ0FmZ2hhbmlzdGFuIEFmZ2hhbmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQUxMJywgJ25hbWUnIDogJ0FsYmFuaWEgTGVrJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FNRCcsICduYW1lJyA6ICdBcm1lbmlhIERyYW0nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQU5HJywgJ25hbWUnIDogJ05ldGhlcmxhbmRzIEFudGlsbGVzIEd1aWxkZXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQU9BJywgJ25hbWUnIDogJ0FuZ29sYSBLd2FuemEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQVJTJywgJ25hbWUnIDogJ0FyZ2VudGluYSBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FVRCcsICduYW1lJyA6ICdBdXN0cmFsaWEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FXRycsICduYW1lJyA6ICdBcnViYSBHdWlsZGVyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0FaTicsICduYW1lJyA6ICdBemVyYmFpamFuIE5ldyBNYW5hdCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCQU0nLCAnbmFtZScgOiAnQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSBDb252ZXJ0aWJsZSBNYXJrYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCQkQnLCAnbmFtZScgOiAnQmFyYmFkb3MgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JEVCcsICduYW1lJyA6ICdCYW5nbGFkZXNoIFRha2EnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQkdOJywgJ25hbWUnIDogJ0J1bGdhcmlhIExldid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCSEQnLCAnbmFtZScgOiAnQmFocmFpbiBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCSUYnLCAnbmFtZScgOiAnQnVydW5kaSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCTUQnLCAnbmFtZScgOiAnQmVybXVkYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQk5EJywgJ25hbWUnIDogJ0JydW5laSBEYXJ1c3NhbGFtIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCT0InLCAnbmFtZScgOiAnQm9saXZpYSBCb2xpdmlhbm8nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQlJMJywgJ25hbWUnIDogJ0JyYXppbCBSZWFsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JTRCcsICduYW1lJyA6ICdCYWhhbWFzIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCVE4nLCAnbmFtZScgOiAnQmh1dGFuIE5ndWx0cnVtJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JXUCcsICduYW1lJyA6ICdCb3Rzd2FuYSBQdWxhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JZUicsICduYW1lJyA6ICdCZWxhcnVzIFJ1YmxlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JaRCcsICduYW1lJyA6ICdCZWxpemUgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NBRCcsICduYW1lJyA6ICdDYW5hZGEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NERicsICduYW1lJyA6ICdDb25nby9LaW5zaGFzYSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDSEYnLCAnbmFtZScgOiAnU3dpdHplcmxhbmQgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ0xQJywgJ25hbWUnIDogJ0NoaWxlIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ05ZJywgJ25hbWUnIDogJ0NoaW5hIFl1YW4gUmVubWluYmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ09QJywgJ25hbWUnIDogJ0NvbG9tYmlhIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ1JDJywgJ25hbWUnIDogJ0Nvc3RhIFJpY2EgQ29sb24nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ1VDJywgJ25hbWUnIDogJ0N1YmEgQ29udmVydGlibGUgUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDVVAnLCAnbmFtZScgOiAnQ3ViYSBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NWRScsICduYW1lJyA6ICdDYXBlIFZlcmRlIEVzY3Vkbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDWksnLCAnbmFtZScgOiAnQ3plY2ggUmVwdWJsaWMgS29ydW5hJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0RKRicsICduYW1lJyA6ICdEamlib3V0aSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdES0snLCAnbmFtZScgOiAnRGVubWFyayBLcm9uZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdET1AnLCAnbmFtZScgOiAnRG9taW5pY2FuIFJlcHVibGljIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRFpEJywgJ25hbWUnIDogJ0FsZ2VyaWEgRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRUdQJywgJ25hbWUnIDogJ0VneXB0IFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0VSTicsICduYW1lJyA6ICdFcml0cmVhIE5ha2ZhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0VUQicsICduYW1lJyA6ICdFdGhpb3BpYSBCaXJyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0VVUicsICduYW1lJyA6ICdFdXJvIE1lbWJlciBDb3VudHJpZXMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRkpEJywgJ25hbWUnIDogJ0ZpamkgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0ZLUCcsICduYW1lJyA6ICdGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcykgUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR0JQJywgJ25hbWUnIDogJ1VuaXRlZCBLaW5nZG9tIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dFTCcsICduYW1lJyA6ICdHZW9yZ2lhIExhcmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR0dQJywgJ25hbWUnIDogJ0d1ZXJuc2V5IFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dIUycsICduYW1lJyA6ICdHaGFuYSBDZWRpJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dJUCcsICduYW1lJyA6ICdHaWJyYWx0YXIgUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR01EJywgJ25hbWUnIDogJ0dhbWJpYSBEYWxhc2knfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR05GJywgJ25hbWUnIDogJ0d1aW5lYSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHVFEnLCAnbmFtZScgOiAnR3VhdGVtYWxhIFF1ZXR6YWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR1lEJywgJ25hbWUnIDogJ0d1eWFuYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSEtEJywgJ25hbWUnIDogJ0hvbmcgS29uZyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSE5MJywgJ25hbWUnIDogJ0hvbmR1cmFzIExlbXBpcmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSFJLJywgJ25hbWUnIDogJ0Nyb2F0aWEgS3VuYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdIVEcnLCAnbmFtZScgOiAnSGFpdGkgR291cmRlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0hVRicsICduYW1lJyA6ICdIdW5nYXJ5IEZvcmludCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJRFInLCAnbmFtZScgOiAnSW5kb25lc2lhIFJ1cGlhaCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJTFMnLCAnbmFtZScgOiAnSXNyYWVsIFNoZWtlbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJTVAnLCAnbmFtZScgOiAnSXNsZSBvZiBNYW4gUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSU5SJywgJ25hbWUnIDogJ0luZGlhIFJ1cGVlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0lRRCcsICduYW1lJyA6ICdJcmFxIERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0lSUicsICduYW1lJyA6ICdJcmFuIFJpYWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSVNLJywgJ25hbWUnIDogJ0ljZWxhbmQgS3JvbmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSkVQJywgJ25hbWUnIDogJ0plcnNleSBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdKTUQnLCAnbmFtZScgOiAnSmFtYWljYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSk9EJywgJ25hbWUnIDogJ0pvcmRhbiBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdKUFknLCAnbmFtZScgOiAnSmFwYW4gWWVuJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tFUycsICduYW1lJyA6ICdLZW55YSBTaGlsbGluZyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLR1MnLCAnbmFtZScgOiAnS3lyZ3l6c3RhbiBTb20nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS0hSJywgJ25hbWUnIDogJ0NhbWJvZGlhIFJpZWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS01GJywgJ25hbWUnIDogJ0NvbW9yb3MgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS1BXJywgJ25hbWUnIDogJ0tvcmVhIChOb3J0aCkgV29uJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tSVycsICduYW1lJyA6ICdLb3JlYSAoU291dGgpIFdvbid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLV0QnLCAnbmFtZScgOiAnS3V3YWl0IERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tZRCcsICduYW1lJyA6ICdDYXltYW4gSXNsYW5kcyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS1pUJywgJ25hbWUnIDogJ0themFraHN0YW4gVGVuZ2UnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTEFLJywgJ25hbWUnIDogJ0xhb3MgS2lwJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xCUCcsICduYW1lJyA6ICdMZWJhbm9uIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xLUicsICduYW1lJyA6ICdTcmkgTGFua2EgUnVwZWUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTFJEJywgJ25hbWUnIDogJ0xpYmVyaWEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xTTCcsICduYW1lJyA6ICdMZXNvdGhvIExvdGknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTFRMJywgJ25hbWUnIDogJ0xpdGh1YW5pYSBMaXRhcyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdMWUQnLCAnbmFtZScgOiAnTGlieWEgRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTUFEJywgJ25hbWUnIDogJ01vcm9jY28gRGlyaGFtJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01ETCcsICduYW1lJyA6ICdNb2xkb3ZhIExldSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNR0EnLCAnbmFtZScgOiAnTWFkYWdhc2NhciBBcmlhcnknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTUtEJywgJ25hbWUnIDogJ01hY2Vkb25pYSBEZW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNTUsnLCAnbmFtZScgOiAnTXlhbm1hciAoQnVybWEpIEt5YXQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTU5UJywgJ25hbWUnIDogJ01vbmdvbGlhIFR1Z2hyaWsnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTU9QJywgJ25hbWUnIDogJ01hY2F1IFBhdGFjYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNUk8nLCAnbmFtZScgOiAnTWF1cml0YW5pYSBPdWd1aXlhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01VUicsICduYW1lJyA6ICdNYXVyaXRpdXMgUnVwZWUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVZSJywgJ25hbWUnIDogJ01hbGRpdmVzIChNYWxkaXZlIElzbGFuZHMpIFJ1Zml5YWEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVdLJywgJ25hbWUnIDogJ01hbGF3aSBLd2FjaGEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVhOJywgJ25hbWUnIDogJ01leGljbyBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01ZUicsICduYW1lJyA6ICdNYWxheXNpYSBSaW5nZ2l0J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01aTicsICduYW1lJyA6ICdNb3phbWJpcXVlIE1ldGljYWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTkFEJywgJ25hbWUnIDogJ05hbWliaWEgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ05HTicsICduYW1lJyA6ICdOaWdlcmlhIE5haXJhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ05JTycsICduYW1lJyA6ICdOaWNhcmFndWEgQ29yZG9iYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdOT0snLCAnbmFtZScgOiAnTm9yd2F5IEtyb25lJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ05QUicsICduYW1lJyA6ICdOZXBhbCBSdXBlZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdOWkQnLCAnbmFtZScgOiAnTmV3IFplYWxhbmQgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ09NUicsICduYW1lJyA6ICdPbWFuIFJpYWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUEFCJywgJ25hbWUnIDogJ1BhbmFtYSBCYWxib2EnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUEVOJywgJ25hbWUnIDogJ1BlcnUgTnVldm8gU29sJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1BHSycsICduYW1lJyA6ICdQYXB1YSBOZXcgR3VpbmVhIEtpbmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUEhQJywgJ25hbWUnIDogJ1BoaWxpcHBpbmVzIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUEtSJywgJ25hbWUnIDogJ1Bha2lzdGFuIFJ1cGVlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1BMTicsICduYW1lJyA6ICdQb2xhbmQgWmxvdHknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUFlHJywgJ25hbWUnIDogJ1BhcmFndWF5IEd1YXJhbmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUUFSJywgJ25hbWUnIDogJ1FhdGFyIFJpeWFsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1JPTicsICduYW1lJyA6ICdSb21hbmlhIE5ldyBMZXUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUlNEJywgJ25hbWUnIDogJ1NlcmJpYSBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdSVUInLCAnbmFtZScgOiAnUnVzc2lhIFJ1YmxlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1JXRicsICduYW1lJyA6ICdSd2FuZGEgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0FSJywgJ25hbWUnIDogJ1NhdWRpIEFyYWJpYSBSaXlhbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTQkQnLCAnbmFtZScgOiAnU29sb21vbiBJc2xhbmRzIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTQ1InLCAnbmFtZScgOiAnU2V5Y2hlbGxlcyBSdXBlZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTREcnLCAnbmFtZScgOiAnU3VkYW4gUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0VLJywgJ25hbWUnIDogJ1N3ZWRlbiBLcm9uYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTR0QnLCAnbmFtZScgOiAnU2luZ2Fwb3JlIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTSFAnLCAnbmFtZScgOiAnU2FpbnQgSGVsZW5hIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NMTCcsICduYW1lJyA6ICdTaWVycmEgTGVvbmUgTGVvbmUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU09TJywgJ25hbWUnIDogJ1NvbWFsaWEgU2hpbGxpbmcnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU1BMJywgJ25hbWUnIDogJ1NlYm9yZ2EgTHVpZ2lubyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTUkQnLCAnbmFtZScgOiAnU3VyaW5hbWUgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NURCcsICduYW1lJyA6ICdTw6NvIFRvbcOpIGFuZCBQcsOtbmNpcGUgRG9icmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU1ZDJywgJ25hbWUnIDogJ0VsIFNhbHZhZG9yIENvbG9uJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NZUCcsICduYW1lJyA6ICdTeXJpYSBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTWkwnLCAnbmFtZScgOiAnU3dhemlsYW5kIExpbGFuZ2VuaSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUSEInLCAnbmFtZScgOiAnVGhhaWxhbmQgQmFodCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUSlMnLCAnbmFtZScgOiAnVGFqaWtpc3RhbiBTb21vbmknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVE1UJywgJ25hbWUnIDogJ1R1cmttZW5pc3RhbiBNYW5hdCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUTkQnLCAnbmFtZScgOiAnVHVuaXNpYSBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUT1AnLCAnbmFtZScgOiAnVG9uZ2EgUGFcXCdhbmdhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RSWScsICduYW1lJyA6ICdUdXJrZXkgTGlyYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUVEQnLCAnbmFtZScgOiAnVHJpbmlkYWQgYW5kIFRvYmFnbyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVFZEJywgJ25hbWUnIDogJ1R1dmFsdSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVFdEJywgJ25hbWUnIDogJ1RhaXdhbiBOZXcgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RaUycsICduYW1lJyA6ICdUYW56YW5pYSBTaGlsbGluZyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdVQUgnLCAnbmFtZScgOiAnVWtyYWluZSBIcnl2bmlhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1VHWCcsICduYW1lJyA6ICdVZ2FuZGEgU2hpbGxpbmcnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVVNEJywgJ25hbWUnIDogJ1VuaXRlZCBTdGF0ZXMgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1VZVScsICduYW1lJyA6ICdVcnVndWF5IFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVVpTJywgJ25hbWUnIDogJ1V6YmVraXN0YW4gU29tJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1ZFRicsICduYW1lJyA6ICdWZW5lenVlbGEgQm9saXZhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdWTkQnLCAnbmFtZScgOiAnVmlldCBOYW0gRG9uZyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdWVVYnLCAnbmFtZScgOiAnVmFudWF0dSBWYXR1J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1dTVCcsICduYW1lJyA6ICdTYW1vYSBUYWxhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1hBRicsICduYW1lJyA6ICdDb21tdW5hdXTDqSBGaW5hbmNpw6hyZSBBZnJpY2FpbmUgKEJFQUMpIENGQSBGcmFuYyBCRUFDJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1hDRCcsICduYW1lJyA6ICdFYXN0IENhcmliYmVhbiBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWERSJywgJ25hbWUnIDogJ0ludGVybmF0aW9uYWwgTW9uZXRhcnkgRnVuZCAoSU1GKSBTcGVjaWFsIERyYXdpbmcgUmlnaHRzJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1hPRicsICduYW1lJyA6ICdDb21tdW5hdXTDqSBGaW5hbmNpw6hyZSBBZnJpY2FpbmUgKEJDRUFPKSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdYUEYnLCAnbmFtZScgOiAnQ29tcHRvaXJzIEZyYW7Dp2FpcyBkdSBQYWNpZmlxdWUgKENGUCkgRnJhbmMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWUVSJywgJ25hbWUnIDogJ1llbWVuIFJpYWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWkFSJywgJ25hbWUnIDogJ1NvdXRoIEFmcmljYSBSYW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1pNVycsICduYW1lJyA6ICdaYW1iaWEgS3dhY2hhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1pXRCcsICduYW1lJyA6ICdaaW1iYWJ3ZSBEb2xsYXInfVxuICAgICAgICBdXG4gICAgfTtcblxuICAgIHZhciBvX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgICB2YXIgb19rZXlzID0gKE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAob19oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb3B5T2JqZWN0KHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgICB2YXIga2V5cyA9IG9fa2V5cyhzb3VyY2UpO1xuICAgICAgdmFyIGtleTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldIHx8IHRhcmdldFtrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jb3B5QXJyYXkoc291cmNlLCB0YXJnZXQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc291cmNlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB0YXJnZXRbaV0gPSBzb3VyY2VbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIF90YXJnZXQpIHtcbiAgICAgICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNvdXJjZSk7XG4gICAgICAgIHZhciB0YXJnZXQgPSBfdGFyZ2V0IHx8IChpc0FycmF5ID8gbmV3IEFycmF5KHNvdXJjZS5sZW5ndGgpIDoge30pO1xuXG4gICAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgICAgX2NvcHlBcnJheShzb3VyY2UsIHRhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX2NvcHlPYmplY3Qoc291cmNlLCB0YXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSBkYXRhIGJhc2VkIG9uIGtleSoqL1xuICAgIENoYW5jZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNvcHlPYmplY3QoZGF0YVtuYW1lXSk7XG4gICAgfTtcblxuICAgIC8vIE1hYyBBZGRyZXNzXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5tYWNfYWRkcmVzcyA9IGZ1bmN0aW9uKG9wdGlvbnMpe1xuICAgICAgICAvLyB0eXBpY2FsbHkgbWFjIGFkZHJlc3NlcyBhcmUgc2VwYXJhdGVkIGJ5IFwiOlwiXG4gICAgICAgIC8vIGhvd2V2ZXIgdGhleSBjYW4gYWxzbyBiZSBzZXBhcmF0ZWQgYnkgXCItXCJcbiAgICAgICAgLy8gdGhlIG5ldHdvcmsgdmFyaWFudCB1c2VzIGEgZG90IGV2ZXJ5IGZvdXJ0aCBieXRlXG5cbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZighb3B0aW9ucy5zZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc2VwYXJhdG9yID0gIG9wdGlvbnMubmV0d29ya1ZlcnNpb24gPyBcIi5cIiA6IFwiOlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1hY19wb29sPVwiQUJDREVGMTIzNDU2Nzg5MFwiLFxuICAgICAgICAgICAgbWFjID0gXCJcIjtcbiAgICAgICAgaWYoIW9wdGlvbnMubmV0d29ya1ZlcnNpb24pIHtcbiAgICAgICAgICAgIG1hYyA9IHRoaXMubih0aGlzLnN0cmluZywgNiwgeyBwb29sOiBtYWNfcG9vbCwgbGVuZ3RoOjIgfSkuam9pbihvcHRpb25zLnNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYWMgPSB0aGlzLm4odGhpcy5zdHJpbmcsIDMsIHsgcG9vbDogbWFjX3Bvb2wsIGxlbmd0aDo0IH0pLmpvaW4ob3B0aW9ucy5zZXBhcmF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hYztcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5ub3JtYWwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21lYW4gOiAwLCBkZXYgOiAxfSk7XG5cbiAgICAgICAgLy8gVGhlIE1hcnNhZ2xpYSBQb2xhciBtZXRob2RcbiAgICAgICAgdmFyIHMsIHUsIHYsIG5vcm0sXG4gICAgICAgICAgICBtZWFuID0gb3B0aW9ucy5tZWFuLFxuICAgICAgICAgICAgZGV2ID0gb3B0aW9ucy5kZXY7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgLy8gVSBhbmQgViBhcmUgZnJvbSB0aGUgdW5pZm9ybSBkaXN0cmlidXRpb24gb24gKC0xLCAxKVxuICAgICAgICAgICAgdSA9IHRoaXMucmFuZG9tKCkgKiAyIC0gMTtcbiAgICAgICAgICAgIHYgPSB0aGlzLnJhbmRvbSgpICogMiAtIDE7XG5cbiAgICAgICAgICAgIHMgPSB1ICogdSArIHYgKiB2O1xuICAgICAgICB9IHdoaWxlIChzID49IDEpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHN0YW5kYXJkIG5vcm1hbCB2YXJpYXRlXG4gICAgICAgIG5vcm0gPSB1ICogTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocykgLyBzKTtcblxuICAgICAgICAvLyBTaGFwZSBhbmQgc2NhbGVcbiAgICAgICAgcmV0dXJuIGRldiAqIG5vcm0gKyBtZWFuO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnJhZGlvID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gSW5pdGlhbCBMZXR0ZXIgKFR5cGljYWxseSBEZXNpZ25hdGVkIGJ5IFNpZGUgb2YgTWlzc2lzc2lwcGkgUml2ZXIpXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7c2lkZSA6IFwiP1wifSk7XG4gICAgICAgIHZhciBmbCA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy5zaWRlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSBcImVhc3RcIjpcbiAgICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgICAgIGZsID0gXCJXXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIndlc3RcIjpcbiAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIGZsID0gXCJLXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGZsID0gdGhpcy5jaGFyYWN0ZXIoe3Bvb2w6IFwiS1dcIn0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmwgKyB0aGlzLmNoYXJhY3Rlcih7YWxwaGE6IHRydWUsIGNhc2luZzogXCJ1cHBlclwifSkgK1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcmFjdGVyKHthbHBoYTogdHJ1ZSwgY2FzaW5nOiBcInVwcGVyXCJ9KSArXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFyYWN0ZXIoe2FscGhhOiB0cnVlLCBjYXNpbmc6IFwidXBwZXJcIn0pO1xuICAgIH07XG5cbiAgICAvLyBTZXQgdGhlIGRhdGEgYXMga2V5IGFuZCBkYXRhIG9yIHRoZSBkYXRhIG1hcFxuICAgIENoYW5jZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlcykge1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gY29weU9iamVjdChuYW1lLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnR2ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFkaW8ob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIC8vIElEIG51bWJlciBmb3IgQnJhemlsIGNvbXBhbmllc1xuICAgIENoYW5jZS5wcm90b3R5cGUuY25waiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLm4odGhpcy5uYXR1cmFsLCA4LCB7IG1heDogOSB9KTtcbiAgICAgICAgdmFyIGQxID0gMituWzddKjYrbls2XSo3K25bNV0qOCtuWzRdKjkrblszXSoyK25bMl0qMytuWzFdKjQrblswXSo1O1xuICAgICAgICBkMSA9IDExIC0gKGQxICUgMTEpO1xuICAgICAgICBpZiAoZDE+PTEwKXtcbiAgICAgICAgICAgIGQxID0gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZDIgPSBkMSoyKzMrbls3XSo3K25bNl0qOCtuWzVdKjkrbls0XSoyK25bM10qMytuWzJdKjQrblsxXSo1K25bMF0qNjtcbiAgICAgICAgZDIgPSAxMSAtIChkMiAlIDExKTtcbiAgICAgICAgaWYgKGQyPj0xMCl7XG4gICAgICAgICAgICBkMiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnK25bMF0rblsxXSsnLicrblsyXStuWzNdK25bNF0rJy4nK25bNV0rbls2XStuWzddKycvMDAwMS0nK2QxK2QyO1xuICAgIH07XG5cbiAgICAvLyAtLSBFbmQgTWlzY2VsbGFuZW91cyAtLVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5tZXJzZW5uZV90d2lzdGVyID0gZnVuY3Rpb24gKHNlZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXJzZW5uZVR3aXN0ZXIoc2VlZCk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuYmx1ZWltcF9tZDUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmx1ZUltcE1ENSgpO1xuICAgIH07XG5cbiAgICAvLyBNZXJzZW5uZSBUd2lzdGVyIGZyb20gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYmFua3NlYW4vMzAwNDk0XG4gICAgdmFyIE1lcnNlbm5lVHdpc3RlciA9IGZ1bmN0aW9uIChzZWVkKSB7XG4gICAgICAgIGlmIChzZWVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGtlcHQgcmFuZG9tIG51bWJlciBzYW1lIHNpemUgYXMgdGltZSB1c2VkIHByZXZpb3VzbHkgdG8gZW5zdXJlIG5vIHVuZXhwZWN0ZWQgcmVzdWx0cyBkb3duc3RyZWFtXG4gICAgICAgICAgICBzZWVkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk1hdGgucG93KDEwLDEzKSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogUGVyaW9kIHBhcmFtZXRlcnMgKi9cbiAgICAgICAgdGhpcy5OID0gNjI0O1xuICAgICAgICB0aGlzLk0gPSAzOTc7XG4gICAgICAgIHRoaXMuTUFUUklYX0EgPSAweDk5MDhiMGRmOyAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovXG4gICAgICAgIHRoaXMuVVBQRVJfTUFTSyA9IDB4ODAwMDAwMDA7IC8qIG1vc3Qgc2lnbmlmaWNhbnQgdy1yIGJpdHMgKi9cbiAgICAgICAgdGhpcy5MT1dFUl9NQVNLID0gMHg3ZmZmZmZmZjsgLyogbGVhc3Qgc2lnbmlmaWNhbnQgciBiaXRzICovXG5cbiAgICAgICAgdGhpcy5tdCA9IG5ldyBBcnJheSh0aGlzLk4pOyAvKiB0aGUgYXJyYXkgZm9yIHRoZSBzdGF0ZSB2ZWN0b3IgKi9cbiAgICAgICAgdGhpcy5tdGkgPSB0aGlzLk4gKyAxOyAvKiBtdGk9PU4gKyAxIG1lYW5zIG10W05dIGlzIG5vdCBpbml0aWFsaXplZCAqL1xuXG4gICAgICAgIHRoaXMuaW5pdF9nZW5yYW5kKHNlZWQpO1xuICAgIH07XG5cbiAgICAvKiBpbml0aWFsaXplcyBtdFtOXSB3aXRoIGEgc2VlZCAqL1xuICAgIE1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuaW5pdF9nZW5yYW5kID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgdGhpcy5tdFswXSA9IHMgPj4+IDA7XG4gICAgICAgIGZvciAodGhpcy5tdGkgPSAxOyB0aGlzLm10aSA8IHRoaXMuTjsgdGhpcy5tdGkrKykge1xuICAgICAgICAgICAgcyA9IHRoaXMubXRbdGhpcy5tdGkgLSAxXSBeICh0aGlzLm10W3RoaXMubXRpIC0gMV0gPj4+IDMwKTtcbiAgICAgICAgICAgIHRoaXMubXRbdGhpcy5tdGldID0gKCgoKChzICYgMHhmZmZmMDAwMCkgPj4+IDE2KSAqIDE4MTI0MzMyNTMpIDw8IDE2KSArIChzICYgMHgwMDAwZmZmZikgKiAxODEyNDMzMjUzKSArIHRoaXMubXRpO1xuICAgICAgICAgICAgLyogU2VlIEtudXRoIFRBT0NQIFZvbDIuIDNyZCBFZC4gUC4xMDYgZm9yIG11bHRpcGxpZXIuICovXG4gICAgICAgICAgICAvKiBJbiB0aGUgcHJldmlvdXMgdmVyc2lvbnMsIE1TQnMgb2YgdGhlIHNlZWQgYWZmZWN0ICAgKi9cbiAgICAgICAgICAgIC8qIG9ubHkgTVNCcyBvZiB0aGUgYXJyYXkgbXRbXS4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgLyogMjAwMi8wMS8wOSBtb2RpZmllZCBieSBNYWtvdG8gTWF0c3Vtb3RvICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLm10W3RoaXMubXRpXSA+Pj49IDA7XG4gICAgICAgICAgICAvKiBmb3IgPjMyIGJpdCBtYWNoaW5lcyAqL1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qIGluaXRpYWxpemUgYnkgYW4gYXJyYXkgd2l0aCBhcnJheS1sZW5ndGggKi9cbiAgICAvKiBpbml0X2tleSBpcyB0aGUgYXJyYXkgZm9yIGluaXRpYWxpemluZyBrZXlzICovXG4gICAgLyoga2V5X2xlbmd0aCBpcyBpdHMgbGVuZ3RoICovXG4gICAgLyogc2xpZ2h0IGNoYW5nZSBmb3IgQysrLCAyMDA0LzIvMjYgKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmluaXRfYnlfYXJyYXkgPSBmdW5jdGlvbiAoaW5pdF9rZXksIGtleV9sZW5ndGgpIHtcbiAgICAgICAgdmFyIGkgPSAxLCBqID0gMCwgaywgcztcbiAgICAgICAgdGhpcy5pbml0X2dlbnJhbmQoMTk2NTAyMTgpO1xuICAgICAgICBrID0gKHRoaXMuTiA+IGtleV9sZW5ndGggPyB0aGlzLk4gOiBrZXlfbGVuZ3RoKTtcbiAgICAgICAgZm9yICg7IGs7IGstLSkge1xuICAgICAgICAgICAgcyA9IHRoaXMubXRbaSAtIDFdIF4gKHRoaXMubXRbaSAtIDFdID4+PiAzMCk7XG4gICAgICAgICAgICB0aGlzLm10W2ldID0gKHRoaXMubXRbaV0gXiAoKCgoKHMgJiAweGZmZmYwMDAwKSA+Pj4gMTYpICogMTY2NDUyNSkgPDwgMTYpICsgKChzICYgMHgwMDAwZmZmZikgKiAxNjY0NTI1KSkpICsgaW5pdF9rZXlbal0gKyBqOyAvKiBub24gbGluZWFyICovXG4gICAgICAgICAgICB0aGlzLm10W2ldID4+Pj0gMDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIGlmIChpID49IHRoaXMuTikgeyB0aGlzLm10WzBdID0gdGhpcy5tdFt0aGlzLk4gLSAxXTsgaSA9IDE7IH1cbiAgICAgICAgICAgIGlmIChqID49IGtleV9sZW5ndGgpIHsgaiA9IDA7IH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGsgPSB0aGlzLk4gLSAxOyBrOyBrLS0pIHtcbiAgICAgICAgICAgIHMgPSB0aGlzLm10W2kgLSAxXSBeICh0aGlzLm10W2kgLSAxXSA+Pj4gMzApO1xuICAgICAgICAgICAgdGhpcy5tdFtpXSA9ICh0aGlzLm10W2ldIF4gKCgoKChzICYgMHhmZmZmMDAwMCkgPj4+IDE2KSAqIDE1NjYwODM5NDEpIDw8IDE2KSArIChzICYgMHgwMDAwZmZmZikgKiAxNTY2MDgzOTQxKSkgLSBpOyAvKiBub24gbGluZWFyICovXG4gICAgICAgICAgICB0aGlzLm10W2ldID4+Pj0gMDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGlmIChpID49IHRoaXMuTikgeyB0aGlzLm10WzBdID0gdGhpcy5tdFt0aGlzLk4gLSAxXTsgaSA9IDE7IH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubXRbMF0gPSAweDgwMDAwMDAwOyAvKiBNU0IgaXMgMTsgYXNzdXJpbmcgbm9uLXplcm8gaW5pdGlhbCBhcnJheSAqL1xuICAgIH07XG5cbiAgICAvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4ZmZmZmZmZmZdLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5nZW5yYW5kX2ludDMyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgeTtcbiAgICAgICAgdmFyIG1hZzAxID0gbmV3IEFycmF5KDB4MCwgdGhpcy5NQVRSSVhfQSk7XG4gICAgICAgIC8qIG1hZzAxW3hdID0geCAqIE1BVFJJWF9BICBmb3IgeD0wLDEgKi9cblxuICAgICAgICBpZiAodGhpcy5tdGkgPj0gdGhpcy5OKSB7IC8qIGdlbmVyYXRlIE4gd29yZHMgYXQgb25lIHRpbWUgKi9cbiAgICAgICAgICAgIHZhciBraztcblxuICAgICAgICAgICAgaWYgKHRoaXMubXRpID09PSB0aGlzLk4gKyAxKSB7ICAgLyogaWYgaW5pdF9nZW5yYW5kKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCwgKi9cbiAgICAgICAgICAgICAgICB0aGlzLmluaXRfZ2VucmFuZCg1NDg5KTsgLyogYSBkZWZhdWx0IGluaXRpYWwgc2VlZCBpcyB1c2VkICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGtrID0gMDsga2sgPCB0aGlzLk4gLSB0aGlzLk07IGtrKyspIHtcbiAgICAgICAgICAgICAgICB5ID0gKHRoaXMubXRba2tdJnRoaXMuVVBQRVJfTUFTSyl8KHRoaXMubXRba2sgKyAxXSZ0aGlzLkxPV0VSX01BU0spO1xuICAgICAgICAgICAgICAgIHRoaXMubXRba2tdID0gdGhpcy5tdFtrayArIHRoaXMuTV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoO2trIDwgdGhpcy5OIC0gMTsga2srKykge1xuICAgICAgICAgICAgICAgIHkgPSAodGhpcy5tdFtra10mdGhpcy5VUFBFUl9NQVNLKXwodGhpcy5tdFtrayArIDFdJnRoaXMuTE9XRVJfTUFTSyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tdFtra10gPSB0aGlzLm10W2trICsgKHRoaXMuTSAtIHRoaXMuTildIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5ID0gKHRoaXMubXRbdGhpcy5OIC0gMV0mdGhpcy5VUFBFUl9NQVNLKXwodGhpcy5tdFswXSZ0aGlzLkxPV0VSX01BU0spO1xuICAgICAgICAgICAgdGhpcy5tdFt0aGlzLk4gLSAxXSA9IHRoaXMubXRbdGhpcy5NIC0gMV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcblxuICAgICAgICAgICAgdGhpcy5tdGkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgeSA9IHRoaXMubXRbdGhpcy5tdGkrK107XG5cbiAgICAgICAgLyogVGVtcGVyaW5nICovXG4gICAgICAgIHkgXj0gKHkgPj4+IDExKTtcbiAgICAgICAgeSBePSAoeSA8PCA3KSAmIDB4OWQyYzU2ODA7XG4gICAgICAgIHkgXj0gKHkgPDwgMTUpICYgMHhlZmM2MDAwMDtcbiAgICAgICAgeSBePSAoeSA+Pj4gMTgpO1xuXG4gICAgICAgIHJldHVybiB5ID4+PiAwO1xuICAgIH07XG5cbiAgICAvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4N2ZmZmZmZmZdLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5nZW5yYW5kX2ludDMxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZ2VucmFuZF9pbnQzMigpID4+PiAxKTtcbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxXS1yZWFsLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5nZW5yYW5kX3JlYWwxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5yYW5kX2ludDMyKCkgKiAoMS4wIC8gNDI5NDk2NzI5NS4wKTtcbiAgICAgICAgLyogZGl2aWRlZCBieSAyXjMyLTEgKi9cbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKS1yZWFsLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb20gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbnJhbmRfaW50MzIoKSAqICgxLjAgLyA0Mjk0OTY3Mjk2LjApO1xuICAgICAgICAvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiAoMCwxKS1yZWFsLWludGVydmFsICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5nZW5yYW5kX3JlYWwzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZ2VucmFuZF9pbnQzMigpICsgMC41KSAqICgxLjAgLyA0Mjk0OTY3Mjk2LjApO1xuICAgICAgICAvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cbiAgICB9O1xuXG4gICAgLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKSB3aXRoIDUzLWJpdCByZXNvbHV0aW9uKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmdlbnJhbmRfcmVzNTMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhID0gdGhpcy5nZW5yYW5kX2ludDMyKCk+Pj41LCBiID0gdGhpcy5nZW5yYW5kX2ludDMyKCk+Pj42O1xuICAgICAgICByZXR1cm4gKGEgKiA2NzEwODg2NC4wICsgYikgKiAoMS4wIC8gOTAwNzE5OTI1NDc0MDk5Mi4wKTtcbiAgICB9O1xuXG4gICAgLy8gQmx1ZUltcCBNRDUgaGFzaGluZyBhbGdvcml0aG0gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9KYXZhU2NyaXB0LU1ENVxuICAgIHZhciBCbHVlSW1wTUQ1ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5WRVJTSU9OID0gJzEuMC4xJztcblxuICAgIC8qXG4gICAgKiBBZGQgaW50ZWdlcnMsIHdyYXBwaW5nIGF0IDJeMzIuIFRoaXMgdXNlcyAxNi1iaXQgb3BlcmF0aW9ucyBpbnRlcm5hbGx5XG4gICAgKiB0byB3b3JrIGFyb3VuZCBidWdzIGluIHNvbWUgSlMgaW50ZXJwcmV0ZXJzLlxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuc2FmZV9hZGQgPSBmdW5jdGlvbiBzYWZlX2FkZCh4LCB5KSB7XG4gICAgICAgIHZhciBsc3cgPSAoeCAmIDB4RkZGRikgKyAoeSAmIDB4RkZGRiksXG4gICAgICAgICAgICBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgICAgICAgcmV0dXJuIChtc3cgPDwgMTYpIHwgKGxzdyAmIDB4RkZGRik7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5iaXRfcm9sbCA9IGZ1bmN0aW9uIChudW0sIGNudCkge1xuICAgICAgICByZXR1cm4gKG51bSA8PCBjbnQpIHwgKG51bSA+Pj4gKDMyIC0gY250KSk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmaXZlIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUubWQ1X2NtbiA9IGZ1bmN0aW9uIChxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVfYWRkKHRoaXMuYml0X3JvbGwodGhpcy5zYWZlX2FkZCh0aGlzLnNhZmVfYWRkKGEsIHEpLCB0aGlzLnNhZmVfYWRkKHgsIHQpKSwgcyksIGIpO1xuICAgIH07XG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUubWQ1X2ZmID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWQ1X2NtbigoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG4gICAgfTtcbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5tZDVfZ2cgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZDVfY21uKChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLm1kNV9oaCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1kNV9jbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLm1kNV9paSA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1kNV9jbW4oYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcywgYW5kIGEgYml0IGxlbmd0aC5cbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLmJpbmxfbWQ1ID0gZnVuY3Rpb24gKHgsIGxlbikge1xuICAgICAgICAvKiBhcHBlbmQgcGFkZGluZyAqL1xuICAgICAgICB4W2xlbiA+PiA1XSB8PSAweDgwIDw8IChsZW4gJSAzMik7XG4gICAgICAgIHhbKCgobGVuICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IGxlbjtcblxuICAgICAgICB2YXIgaSwgb2xkYSwgb2xkYiwgb2xkYywgb2xkZCxcbiAgICAgICAgICAgIGEgPSAgMTczMjU4NDE5MyxcbiAgICAgICAgICAgIGIgPSAtMjcxNzMzODc5LFxuICAgICAgICAgICAgYyA9IC0xNzMyNTg0MTk0LFxuICAgICAgICAgICAgZCA9ICAyNzE3MzM4Nzg7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgICAgICAgICBvbGRhID0gYTtcbiAgICAgICAgICAgIG9sZGIgPSBiO1xuICAgICAgICAgICAgb2xkYyA9IGM7XG4gICAgICAgICAgICBvbGRkID0gZDtcblxuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaV0sICAgICAgIDcsIC02ODA4NzY5MzYpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArICAxXSwgMTIsIC0zODk1NjQ1ODYpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArICAyXSwgMTcsICA2MDYxMDU4MTkpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArICAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAgNF0sICA3LCAtMTc2NDE4ODk3KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyAgNV0sIDEyLCAgMTIwMDA4MDQyNik7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArICA3XSwgMjIsIC00NTcwNTk4Myk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZmYoYSwgYiwgYywgZCwgeFtpICsgIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArICA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE3LCAtNDIwNjMpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDExXSwgMjIsIC0xOTkwNDA0MTYyKTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sICA3LCAgMTgwNDYwMzY4Mik7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgMTNdLCAxMiwgLTQwMzQxMTAxKTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgMTVdLCAyMiwgIDEyMzY1MzUzMjkpO1xuXG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZ2coYSwgYiwgYywgZCwgeFtpICsgIDFdLCAgNSwgLTE2NTc5NjUxMCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgIDZdLCAgOSwgLTEwNjk1MDE2MzIpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsICA2NDM3MTc3MTMpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2dnKGIsIGMsIGQsIGEsIHhbaV0sICAgICAgMjAsIC0zNzM4OTczMDIpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArICA1XSwgIDUsIC03MDE1NTg2OTEpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgIDksICAzODAxNjA4Myk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgIDRdLCAyMCwgLTQwNTUzNzg0OCk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZ2coYSwgYiwgYywgZCwgeFtpICsgIDldLCAgNSwgIDU2ODQ0NjQzOCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgMTRdLCAgOSwgLTEwMTk4MDM2OTApO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArICAzXSwgMTQsIC0xODczNjM5NjEpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArICA4XSwgMjAsICAxMTYzNTMxNTAxKTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyAxM10sICA1LCAtMTQ0NDY4MTQ2Nyk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgIDJdLCAgOSwgLTUxNDAzNzg0KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9nZyhjLCBkLCBhLCBiLCB4W2kgKyAgN10sIDE0LCAgMTczNTMyODQ3Myk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xuXG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgIDVdLCAgNCwgLTM3ODU1OCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsICAxODM5MDMwNTYyKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArICAxXSwgIDQsIC0xNTMwOTkyMDYwKTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9oaChkLCBhLCBiLCBjLCB4W2kgKyAgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgIDddLCAxNiwgLTE1NTQ5NzYzMik7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgIDQsICA2ODEyNzkxNzQpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2hoKGQsIGEsIGIsIGMsIHhbaV0sICAgICAgMTEsIC0zNTg1MzcyMjIpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArICAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArICA2XSwgMjMsICA3NjAyOTE4OSk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgIDldLCAgNCwgLTY0MDM2NDQ4Nyk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgMTJdLCAxMSwgLTQyMTgxNTgzNSk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgIDUzMDc0MjUyMCk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgIDJdLCAyMywgLTk5NTMzODY1MSk7XG5cbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9paShhLCBiLCBjLCBkLCB4W2ldLCAgICAgICA2LCAtMTk4NjMwODQ0KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAgN10sIDEwLCAgMTEyNjg5MTQxNSk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArICA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgMTJdLCAgNiwgIDE3MDA0ODU1NzEpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSArICAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSArICA4XSwgIDYsICAxODczMzEzMzU5KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArICA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9paShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAgMTMwOTE1MTY0OSk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgIDRdLCAgNiwgLTE0NTUyMzA3MCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArICAyXSwgMTUsICA3MTg3ODcyNTkpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArICA5XSwgMjEsIC0zNDM0ODU1NTEpO1xuXG4gICAgICAgICAgICBhID0gdGhpcy5zYWZlX2FkZChhLCBvbGRhKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLnNhZmVfYWRkKGIsIG9sZGIpO1xuICAgICAgICAgICAgYyA9IHRoaXMuc2FmZV9hZGQoYywgb2xkYyk7XG4gICAgICAgICAgICBkID0gdGhpcy5zYWZlX2FkZChkLCBvbGRkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2EsIGIsIGMsIGRdO1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGEgc3RyaW5nXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5iaW5sMnJzdHIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXRwdXQgPSAnJztcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCAqIDMyOyBpICs9IDgpIHtcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChpbnB1dFtpID4+IDVdID4+PiAoaSAlIDMyKSkgJiAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ29udmVydCBhIHJhdyBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICAgICogQ2hhcmFjdGVycyA+MjU1IGhhdmUgdGhlaXIgaGlnaC1ieXRlIHNpbGVudGx5IGlnbm9yZWQuXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5yc3RyMmJpbmwgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXRwdXQgPSBbXTtcbiAgICAgICAgb3V0cHV0WyhpbnB1dC5sZW5ndGggPj4gMikgLSAxXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgb3V0cHV0W2ldID0gMDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoICogODsgaSArPSA4KSB7XG4gICAgICAgICAgICBvdXRwdXRbaSA+PiA1XSB8PSAoaW5wdXQuY2hhckNvZGVBdChpIC8gOCkgJiAweEZGKSA8PCAoaSAlIDMyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYSByYXcgc3RyaW5nXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5yc3RyX21kNSA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJpbmwycnN0cih0aGlzLmJpbmxfbWQ1KHRoaXMucnN0cjJiaW5sKHMpLCBzLmxlbmd0aCAqIDgpKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIENhbGN1bGF0ZSB0aGUgSE1BQy1NRDUsIG9mIGEga2V5IGFuZCBzb21lIGRhdGEgKHJhdyBzdHJpbmdzKVxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUucnN0cl9obWFjX21kNSA9IGZ1bmN0aW9uIChrZXksIGRhdGEpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBia2V5ID0gdGhpcy5yc3RyMmJpbmwoa2V5KSxcbiAgICAgICAgICAgIGlwYWQgPSBbXSxcbiAgICAgICAgICAgIG9wYWQgPSBbXSxcbiAgICAgICAgICAgIGhhc2g7XG4gICAgICAgIGlwYWRbMTVdID0gb3BhZFsxNV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChia2V5Lmxlbmd0aCA+IDE2KSB7XG4gICAgICAgICAgICBia2V5ID0gdGhpcy5iaW5sX21kNShia2V5LCBrZXkubGVuZ3RoICogOCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlwYWRbaV0gPSBia2V5W2ldIF4gMHgzNjM2MzYzNjtcbiAgICAgICAgICAgIG9wYWRbaV0gPSBia2V5W2ldIF4gMHg1QzVDNUM1QztcbiAgICAgICAgfVxuICAgICAgICBoYXNoID0gdGhpcy5iaW5sX21kNShpcGFkLmNvbmNhdCh0aGlzLnJzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogOCk7XG4gICAgICAgIHJldHVybiB0aGlzLmJpbmwycnN0cih0aGlzLmJpbmxfbWQ1KG9wYWQuY29uY2F0KGhhc2gpLCA1MTIgKyAxMjgpKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIENvbnZlcnQgYSByYXcgc3RyaW5nIHRvIGEgaGV4IHN0cmluZ1xuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUucnN0cjJoZXggPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgdmFyIGhleF90YWIgPSAnMDEyMzQ1Njc4OWFiY2RlZicsXG4gICAgICAgICAgICBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHggPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgb3V0cHV0ICs9IGhleF90YWIuY2hhckF0KCh4ID4+PiA0KSAmIDB4MEYpICtcbiAgICAgICAgICAgICAgICBoZXhfdGFiLmNoYXJBdCh4ICYgMHgwRik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIEVuY29kZSBhIHN0cmluZyBhcyB1dGYtOFxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuc3RyMnJzdHJfdXRmOCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KSk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBUYWtlIHN0cmluZyBhcmd1bWVudHMgYW5kIHJldHVybiBlaXRoZXIgcmF3IG9yIGhleCBlbmNvZGVkIHN0cmluZ3NcbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLnJhd19tZDUgPSBmdW5jdGlvbiAocykge1xuICAgICAgICByZXR1cm4gdGhpcy5yc3RyX21kNSh0aGlzLnN0cjJyc3RyX3V0ZjgocykpO1xuICAgIH07XG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuaGV4X21kNSA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJzdHIyaGV4KHRoaXMucmF3X21kNShzKSk7XG4gICAgfTtcbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5yYXdfaG1hY19tZDUgPSBmdW5jdGlvbiAoaywgZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yc3RyX2htYWNfbWQ1KHRoaXMuc3RyMnJzdHJfdXRmOChrKSwgdGhpcy5zdHIycnN0cl91dGY4KGQpKTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLmhleF9obWFjX21kNSA9IGZ1bmN0aW9uIChrLCBkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJzdHIyaGV4KHRoaXMucmF3X2htYWNfbWQ1KGssIGQpKTtcbiAgICB9O1xuXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUubWQ1ID0gZnVuY3Rpb24gKHN0cmluZywga2V5LCByYXcpIHtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIGlmICghcmF3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGV4X21kNShzdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYXdfbWQ1KHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJhdykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGV4X2htYWNfbWQ1KGtleSwgc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJhd19obWFjX21kNShrZXksIHN0cmluZyk7XG4gICAgfTtcblxuICAgIC8vIENvbW1vbkpTIG1vZHVsZVxuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBDaGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0cy5DaGFuY2UgPSBDaGFuY2U7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIEFNRCBtb2R1bGVcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIENoYW5jZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBpbXBvcnRzU2NyaXBzIG9iamVjdCBkZWZpbmUgY2hhbmNlIGZvciB3b3JrZXJcbiAgICBpZiAodHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNoYW5jZSA9IG5ldyBDaGFuY2UoKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHdpbmRvdyBvYmplY3QsIHRoYXQgYXQgbGVhc3QgaGFzIGEgZG9jdW1lbnQgcHJvcGVydHksXG4gICAgLy8gaW5zdGFudGlhdGUgYW5kIGRlZmluZSBjaGFuY2Ugb24gdGhlIHdpbmRvd1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgd2luZG93LkNoYW5jZSA9IENoYW5jZTtcbiAgICAgICAgd2luZG93LmNoYW5jZSA9IG5ldyBDaGFuY2UoKTtcbiAgICB9XG59KSgpO1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqXG4gKiBFeHBvc2UgYGRlYnVnKClgIGFzIHRoZSBtb2R1bGUuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kZWJ1ZycpO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9ICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWVcbiAgICAgICAgICAgICAgICYmICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWUuc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgPyBjaHJvbWUuc3RvcmFnZS5sb2NhbFxuICAgICAgICAgICAgICAgICAgOiBsb2NhbHN0b3JhZ2UoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG4gICdsaWdodHNlYWdyZWVuJyxcbiAgJ2ZvcmVzdGdyZWVuJyxcbiAgJ2dvbGRlbnJvZCcsXG4gICdkb2RnZXJibHVlJyxcbiAgJ2RhcmtvcmNoaWQnLFxuICAnY3JpbXNvbidcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICAvLyBpcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuICByZXR1cm4gKCdXZWJraXRBcHBlYXJhbmNlJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpIHx8XG4gICAgLy8gaXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuICAgICh3aW5kb3cuY29uc29sZSAmJiAoY29uc29sZS5maXJlYnVnIHx8IChjb25zb2xlLmV4Y2VwdGlvbiAmJiBjb25zb2xlLnRhYmxlKSkpIHx8XG4gICAgLy8gaXMgZmlyZWZveCA+PSB2MzE/XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG4gICAgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKTtcbn1cblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbn07XG5cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIHVzZUNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuXG4gIGFyZ3NbMF0gPSAodXNlQ29sb3JzID8gJyVjJyA6ICcnKVxuICAgICsgdGhpcy5uYW1lc3BhY2VcbiAgICArICh1c2VDb2xvcnMgPyAnICVjJyA6ICcgJylcbiAgICArIGFyZ3NbMF1cbiAgICArICh1c2VDb2xvcnMgPyAnJWMgJyA6ICcgJylcbiAgICArICcrJyArIGV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuICBpZiAoIXVzZUNvbG9ycykgcmV0dXJuIGFyZ3M7XG5cbiAgdmFyIGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuICBhcmdzID0gW2FyZ3NbMF0sIGMsICdjb2xvcjogaW5oZXJpdCddLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7XG5cbiAgLy8gdGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcbiAgLy8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3RDID0gMDtcbiAgYXJnc1swXS5yZXBsYWNlKC8lW2EteiVdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgaWYgKCclJScgPT09IG1hdGNoKSByZXR1cm47XG4gICAgaW5kZXgrKztcbiAgICBpZiAoJyVjJyA9PT0gbWF0Y2gpIHtcbiAgICAgIC8vIHdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuICAgICAgLy8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcbiAgICAgIGxhc3RDID0gaW5kZXg7XG4gICAgfVxuICB9KTtcblxuICBhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUubG9nKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5sb2dgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgLy8gdGhpcyBoYWNrZXJ5IGlzIHJlcXVpcmVkIGZvciBJRTgvOSwgd2hlcmVcbiAgLy8gdGhlIGBjb25zb2xlLmxvZ2AgZnVuY3Rpb24gZG9lc24ndCBoYXZlICdhcHBseSdcbiAgcmV0dXJuICdvYmplY3QnID09PSB0eXBlb2YgY29uc29sZVxuICAgICYmIGNvbnNvbGUubG9nXG4gICAgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UuZGVidWcgPSBuYW1lc3BhY2VzO1xuICAgIH1cbiAgfSBjYXRjaChlKSB7fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuICB0cnkge1xuICAgIHIgPSBleHBvcnRzLnN0b3JhZ2UuZGVidWc7XG4gIH0gY2F0Y2goZSkge31cbiAgcmV0dXJuIHI7XG59XG5cbi8qKlxuICogRW5hYmxlIG5hbWVzcGFjZXMgbGlzdGVkIGluIGBsb2NhbFN0b3JhZ2UuZGVidWdgIGluaXRpYWxseS5cbiAqL1xuXG5leHBvcnRzLmVuYWJsZShsb2FkKCkpO1xuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpe1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICB9IGNhdGNoIChlKSB7fVxufVxuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGRlYnVnO1xuZXhwb3J0cy5jb2VyY2UgPSBjb2VyY2U7XG5leHBvcnRzLmRpc2FibGUgPSBkaXNhYmxlO1xuZXhwb3J0cy5lbmFibGUgPSBlbmFibGU7XG5leHBvcnRzLmVuYWJsZWQgPSBlbmFibGVkO1xuZXhwb3J0cy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cbi8qKlxuICogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG4gKi9cblxuZXhwb3J0cy5uYW1lcyA9IFtdO1xuZXhwb3J0cy5za2lwcyA9IFtdO1xuXG4vKipcbiAqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cbiAqXG4gKiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlcmNhc2VkIGxldHRlciwgaS5lLiBcIm5cIi5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMgPSB7fTtcblxuLyoqXG4gKiBQcmV2aW91c2x5IGFzc2lnbmVkIGNvbG9yLlxuICovXG5cbnZhciBwcmV2Q29sb3IgPSAwO1xuXG4vKipcbiAqIFByZXZpb3VzIGxvZyB0aW1lc3RhbXAuXG4gKi9cblxudmFyIHByZXZUaW1lO1xuXG4vKipcbiAqIFNlbGVjdCBhIGNvbG9yLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNlbGVjdENvbG9yKCkge1xuICByZXR1cm4gZXhwb3J0cy5jb2xvcnNbcHJldkNvbG9yKysgJSBleHBvcnRzLmNvbG9ycy5sZW5ndGhdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZWJ1ZyhuYW1lc3BhY2UpIHtcblxuICAvLyBkZWZpbmUgdGhlIGBkaXNhYmxlZGAgdmVyc2lvblxuICBmdW5jdGlvbiBkaXNhYmxlZCgpIHtcbiAgfVxuICBkaXNhYmxlZC5lbmFibGVkID0gZmFsc2U7XG5cbiAgLy8gZGVmaW5lIHRoZSBgZW5hYmxlZGAgdmVyc2lvblxuICBmdW5jdGlvbiBlbmFibGVkKCkge1xuXG4gICAgdmFyIHNlbGYgPSBlbmFibGVkO1xuXG4gICAgLy8gc2V0IGBkaWZmYCB0aW1lc3RhbXBcbiAgICB2YXIgY3VyciA9ICtuZXcgRGF0ZSgpO1xuICAgIHZhciBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG4gICAgc2VsZi5kaWZmID0gbXM7XG4gICAgc2VsZi5wcmV2ID0gcHJldlRpbWU7XG4gICAgc2VsZi5jdXJyID0gY3VycjtcbiAgICBwcmV2VGltZSA9IGN1cnI7XG5cbiAgICAvLyBhZGQgdGhlIGBjb2xvcmAgaWYgbm90IHNldFxuICAgIGlmIChudWxsID09IHNlbGYudXNlQ29sb3JzKSBzZWxmLnVzZUNvbG9ycyA9IGV4cG9ydHMudXNlQ29sb3JzKCk7XG4gICAgaWYgKG51bGwgPT0gc2VsZi5jb2xvciAmJiBzZWxmLnVzZUNvbG9ycykgc2VsZi5jb2xvciA9IHNlbGVjdENvbG9yKCk7XG5cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICBhcmdzWzBdID0gZXhwb3J0cy5jb2VyY2UoYXJnc1swXSk7XG5cbiAgICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBhcmdzWzBdKSB7XG4gICAgICAvLyBhbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlb1xuICAgICAgYXJncyA9IFsnJW8nXS5jb25jYXQoYXJncyk7XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EteiVdKS9nLCBmdW5jdGlvbihtYXRjaCwgZm9ybWF0KSB7XG4gICAgICAvLyBpZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG4gICAgICBpZiAobWF0Y2ggPT09ICclJScpIHJldHVybiBtYXRjaDtcbiAgICAgIGluZGV4Kys7XG4gICAgICB2YXIgZm9ybWF0dGVyID0gZXhwb3J0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG4gICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGZvcm1hdHRlcikge1xuICAgICAgICB2YXIgdmFsID0gYXJnc1tpbmRleF07XG4gICAgICAgIG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuICAgICAgICAvLyBub3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG4gICAgICAgIGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgaW5kZXgtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcblxuICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZXhwb3J0cy5mb3JtYXRBcmdzKSB7XG4gICAgICBhcmdzID0gZXhwb3J0cy5mb3JtYXRBcmdzLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cbiAgICB2YXIgbG9nRm4gPSBlbmFibGVkLmxvZyB8fCBleHBvcnRzLmxvZyB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuICAgIGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICB9XG4gIGVuYWJsZWQuZW5hYmxlZCA9IHRydWU7XG5cbiAgdmFyIGZuID0gZXhwb3J0cy5lbmFibGVkKG5hbWVzcGFjZSkgPyBlbmFibGVkIDogZGlzYWJsZWQ7XG5cbiAgZm4ubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXG4gIHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG4gKiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gIGV4cG9ydHMuc2F2ZShuYW1lc3BhY2VzKTtcblxuICB2YXIgc3BsaXQgPSAobmFtZXNwYWNlcyB8fCAnJykuc3BsaXQoL1tcXHMsXSsvKTtcbiAgdmFyIGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKCFzcGxpdFtpXSkgY29udGludWU7IC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG4gICAgbmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG4gICAgaWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuICAgICAgZXhwb3J0cy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zdWJzdHIoMSkgKyAnJCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwb3J0cy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgZXhwb3J0cy5lbmFibGUoJycpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG4gIHZhciBpLCBsZW47XG4gIGZvciAoaSA9IDAsIGxlbiA9IGV4cG9ydHMuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoZXhwb3J0cy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGZvciAoaSA9IDAsIGxlbiA9IGV4cG9ydHMubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoZXhwb3J0cy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvZXJjZSBgdmFsYC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSB2YWxcbiAqIEByZXR1cm4ge01peGVkfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuICBpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG4gIHJldHVybiB2YWw7XG59XG4iLCIvKiFcbiAqIEBkZXNjcmlwdGlvbiBSZWN1cnNpdmUgb2JqZWN0IGV4dGVuZGluZ1xuICogQGF1dGhvciBWaWFjaGVzbGF2IExvdHNtYW5vdiA8bG90c21hbm92ODlAZ21haWwuY29tPlxuICogQGxpY2Vuc2UgTUlUXG4gKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUgVmlhY2hlc2xhdiBMb3RzbWFub3ZcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG4gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluXG4gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvXG4gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZlxuICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTXG4gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1JcbiAqIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUlxuICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBpc1NwZWNpZmljVmFsdWUodmFsKSB7XG5cdHJldHVybiAoXG5cdFx0dmFsIGluc3RhbmNlb2YgQnVmZmVyXG5cdFx0fHwgdmFsIGluc3RhbmNlb2YgRGF0ZVxuXHRcdHx8IHZhbCBpbnN0YW5jZW9mIFJlZ0V4cFxuXHQpID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjbG9uZVNwZWNpZmljVmFsdWUodmFsKSB7XG5cdGlmICh2YWwgaW5zdGFuY2VvZiBCdWZmZXIpIHtcblx0XHR2YXIgeCA9IG5ldyBCdWZmZXIodmFsLmxlbmd0aCk7XG5cdFx0dmFsLmNvcHkoeCk7XG5cdFx0cmV0dXJuIHg7XG5cdH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdHJldHVybiBuZXcgRGF0ZSh2YWwuZ2V0VGltZSgpKTtcblx0fSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBSZWdFeHApIHtcblx0XHRyZXR1cm4gbmV3IFJlZ0V4cCh2YWwpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzaXR1YXRpb24nKTtcblx0fVxufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZSBjbG9uaW5nIGFycmF5LlxuICovXG5mdW5jdGlvbiBkZWVwQ2xvbmVBcnJheShhcnIpIHtcblx0dmFyIGNsb25lID0gW107XG5cdGFyci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuXHRcdGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcblx0XHRcdFx0Y2xvbmVbaW5kZXhdID0gZGVlcENsb25lQXJyYXkoaXRlbSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzU3BlY2lmaWNWYWx1ZShpdGVtKSkge1xuXHRcdFx0XHRjbG9uZVtpbmRleF0gPSBjbG9uZVNwZWNpZmljVmFsdWUoaXRlbSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZVtpbmRleF0gPSBkZWVwRXh0ZW5kKHt9LCBpdGVtKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2xvbmVbaW5kZXhdID0gaXRlbTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gY2xvbmU7XG59XG5cbi8qKlxuICogRXh0ZW5pbmcgb2JqZWN0IHRoYXQgZW50ZXJlZCBpbiBmaXJzdCBhcmd1bWVudC5cbiAqXG4gKiBSZXR1cm5zIGV4dGVuZGVkIG9iamVjdCBvciBmYWxzZSBpZiBoYXZlIG5vIHRhcmdldCBvYmplY3Qgb3IgaW5jb3JyZWN0IHR5cGUuXG4gKlxuICogSWYgeW91IHdpc2ggdG8gY2xvbmUgc291cmNlIG9iamVjdCAod2l0aG91dCBtb2RpZnkgaXQpLCBqdXN0IHVzZSBlbXB0eSBuZXdcbiAqIG9iamVjdCBhcyBmaXJzdCBhcmd1bWVudCwgbGlrZSB0aGlzOlxuICogICBkZWVwRXh0ZW5kKHt9LCB5b3VyT2JqXzEsIFt5b3VyT2JqX05dKTtcbiAqL1xudmFyIGRlZXBFeHRlbmQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgvKm9ial8xLCBbb2JqXzJdLCBbb2JqX05dKi8pIHtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8IHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50c1swXTtcblx0fVxuXG5cdHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMF07XG5cblx0Ly8gY29udmVydCBhcmd1bWVudHMgdG8gYXJyYXkgYW5kIGN1dCBvZmYgdGFyZ2V0IG9iamVjdFxuXHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cblx0dmFyIHZhbCwgc3JjLCBjbG9uZTtcblxuXHRhcmdzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuXHRcdC8vIHNraXAgYXJndW1lbnQgaWYgaXQgaXMgYXJyYXkgb3IgaXNuJ3Qgb2JqZWN0XG5cdFx0aWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob2JqKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRzcmMgPSB0YXJnZXRba2V5XTsgLy8gc291cmNlIHZhbHVlXG5cdFx0XHR2YWwgPSBvYmpba2V5XTsgLy8gbmV3IHZhbHVlXG5cblx0XHRcdC8vIHJlY3Vyc2lvbiBwcmV2ZW50aW9uXG5cdFx0XHRpZiAodmFsID09PSB0YXJnZXQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIGlmIG5ldyB2YWx1ZSBpc24ndCBvYmplY3QgdGhlbiBqdXN0IG92ZXJ3cml0ZSBieSBuZXcgdmFsdWVcblx0XHRcdCAqIGluc3RlYWQgb2YgZXh0ZW5kaW5nLlxuXHRcdFx0ICovXG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWwgIT09ICdvYmplY3QnIHx8IHZhbCA9PT0gbnVsbCkge1xuXHRcdFx0XHR0YXJnZXRba2V5XSA9IHZhbDtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHQvLyBqdXN0IGNsb25lIGFycmF5cyAoYW5kIHJlY3Vyc2l2ZSBjbG9uZSBvYmplY3RzIGluc2lkZSlcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHRcdHRhcmdldFtrZXldID0gZGVlcENsb25lQXJyYXkodmFsKTtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHQvLyBjdXN0b20gY2xvbmluZyBhbmQgb3ZlcndyaXRlIGZvciBzcGVjaWZpYyBvYmplY3RzXG5cdFx0XHR9IGVsc2UgaWYgKGlzU3BlY2lmaWNWYWx1ZSh2YWwpKSB7XG5cdFx0XHRcdHRhcmdldFtrZXldID0gY2xvbmVTcGVjaWZpY1ZhbHVlKHZhbCk7XG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0Ly8gb3ZlcndyaXRlIGJ5IG5ldyB2YWx1ZSBpZiBzb3VyY2UgaXNuJ3Qgb2JqZWN0IG9yIGFycmF5XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzcmMgIT09ICdvYmplY3QnIHx8IHNyYyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHNyYykpIHtcblx0XHRcdFx0dGFyZ2V0W2tleV0gPSBkZWVwRXh0ZW5kKHt9LCB2YWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdC8vIHNvdXJjZSB2YWx1ZSBhbmQgbmV3IHZhbHVlIGlzIG9iamVjdHMgYm90aCwgZXh0ZW5kaW5nLi4uXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0YXJnZXRba2V5XSA9IGRlZXBFeHRlbmQoc3JjLCB2YWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHJldHVybiB0YXJnZXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkID0gcmVxdWlyZSgnLi91dGlsL3VyaS1oZWxwZXJzJyk7XG5cbiQuZmluZEJ5UmVmID0gcmVxdWlyZSgnLi91dGlsL2ZpbmQtcmVmZXJlbmNlJyk7XG4kLnJlc29sdmVTY2hlbWEgPSByZXF1aXJlKCcuL3V0aWwvcmVzb2x2ZS1zY2hlbWEnKTtcbiQubm9ybWFsaXplU2NoZW1hID0gcmVxdWlyZSgnLi91dGlsL25vcm1hbGl6ZS1zY2hlbWEnKTtcblxudmFyIGluc3RhbmNlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gJHJlZihmYWtlcm9vdCwgc2NoZW1hLCByZWZzLCBleCkge1xuICAgIGlmICh0eXBlb2YgZmFrZXJvb3QgPT09ICdvYmplY3QnKSB7XG4gICAgICBleCA9IHJlZnM7XG4gICAgICByZWZzID0gc2NoZW1hO1xuICAgICAgc2NoZW1hID0gZmFrZXJvb3Q7XG4gICAgICBmYWtlcm9vdCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2NoZW1hIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWZzID09PSAnb2JqZWN0JyAmJiByZWZzICE9PSBudWxsKSB7XG4gICAgICB2YXIgYXV4ID0gcmVmcztcblxuICAgICAgcmVmcyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBrIGluIGF1eCkge1xuICAgICAgICBhdXhba10uaWQgPSBhdXhba10uaWQgfHwgaztcbiAgICAgICAgcmVmcy5wdXNoKGF1eFtrXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWZzICE9PSAndW5kZWZpbmVkJyAmJiAhQXJyYXkuaXNBcnJheShyZWZzKSkge1xuICAgICAgZXggPSAhIXJlZnM7XG4gICAgICByZWZzID0gW107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaChyZWYpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVmLmlkID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgaWQgPSAkLnJlc29sdmVVUkwoZmFrZXJvb3QsIHJlZi5pZCkucmVwbGFjZSgvXFwvIz8kLywgJycpO1xuXG4gICAgICAgIGlmIChpZC5pbmRleE9mKCcjJykgPiAtMSkge1xuICAgICAgICAgIHZhciBwYXJ0cyA9IGlkLnNwbGl0KCcjJyk7XG5cbiAgICAgICAgICBpZiAocGFydHNbMV0uY2hhckF0KCkgPT09ICcvJykge1xuICAgICAgICAgICAgaWQgPSBwYXJ0c1swXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWQgPSBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISRyZWYucmVmc1tpZF0pIHtcbiAgICAgICAgICAkcmVmLnJlZnNbaWRdID0gcmVmO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgKHJlZnMgfHwgW10pLmNvbmNhdChbc2NoZW1hXSkuZm9yRWFjaChmdW5jdGlvbihyZWYpIHtcbiAgICAgIHNjaGVtYSA9ICQubm9ybWFsaXplU2NoZW1hKGZha2Vyb290LCByZWYsIHB1c2gpO1xuICAgICAgcHVzaChzY2hlbWEpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICQucmVzb2x2ZVNjaGVtYShzY2hlbWEsICRyZWYucmVmcywgZXgpO1xuICB9XG5cbiAgJHJlZi5yZWZzID0ge307XG4gICRyZWYudXRpbCA9ICQ7XG5cbiAgcmV0dXJuICRyZWY7XG59O1xuXG5pbnN0YW5jZS51dGlsID0gJDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNsb25lID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNlZW4pIHtcbiAgc2VlbiA9IHNlZW4gfHwgW107XG5cbiAgaWYgKHNlZW4uaW5kZXhPZihvYmopID4gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSBkZXJlZmVyZW5jZSBjaXJjdWxhciBzdHJ1Y3R1cmVzJyk7XG4gIH1cblxuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBzZWVuID0gc2Vlbi5jb25jYXQoW29ial0pO1xuXG4gIHZhciB0YXJnZXQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBbXSA6IHt9O1xuXG4gIGZ1bmN0aW9uIGNvcHkoa2V5LCB2YWx1ZSkge1xuICAgIHRhcmdldFtrZXldID0gY2xvbmUodmFsdWUsIHNlZW4pO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIGNvcHkoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgY29weShrZXksIG9ialtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJCA9IHJlcXVpcmUoJy4vdXJpLWhlbHBlcnMnKTtcblxuZnVuY3Rpb24gZ2V0KG9iaiwgcGF0aCkge1xuICB2YXIgaGFzaCA9IHBhdGguc3BsaXQoJyMnKVsxXTtcblxuICB2YXIgcGFydHMgPSBoYXNoLnNwbGl0KCcvJykuc2xpY2UoMSk7XG5cbiAgd2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQocGFydHMuc2hpZnQoKSkucmVwbGFjZSgvfjEvZywgJy8nKS5yZXBsYWNlKC9+MC9nLCAnficpO1xuXG4gICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTiBwb2ludGVyIG5vdCBmb3VuZDogJyArIHBhdGgpO1xuICAgIH1cblxuICAgIG9iaiA9IG9ialtrZXldO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxudmFyIGZpbmQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlkLCByZWZzKSB7XG4gIHZhciB0YXJnZXQgPSByZWZzW2lkXSB8fCByZWZzW2lkLnNwbGl0KCcjJylbMV1dIHx8IHJlZnNbJC5nZXREb2N1bWVudFVSSShpZCldO1xuXG4gIGlmICh0YXJnZXQpIHtcbiAgICB0YXJnZXQgPSBpZC5pbmRleE9mKCcjLycpID4gLTEgPyBnZXQodGFyZ2V0LCBpZCkgOiB0YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHJlZnMpIHtcbiAgICAgIGlmICgkLnJlc29sdmVVUkwocmVmc1trZXldLmlkLCBpZCkgPT09IHJlZnNba2V5XS5pZCkge1xuICAgICAgICB0YXJnZXQgPSByZWZzW2tleV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWZlcmVuY2Ugbm90IGZvdW5kOiAnICsgaWQpO1xuICB9XG5cbiAgd2hpbGUgKHRhcmdldC4kcmVmKSB7XG4gICAgdGFyZ2V0ID0gZmluZCh0YXJnZXQuJHJlZiwgcmVmcyk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICQgPSByZXF1aXJlKCcuL3VyaS1oZWxwZXJzJyk7XG5cbnZhciBjbG9uZU9iaiA9IHJlcXVpcmUoJy4vY2xvbmUtb2JqJyk7XG5cbnZhciBTQ0hFTUFfVVJJID0gW1xuICAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjJyxcbiAgJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIydcbl07XG5cbmZ1bmN0aW9uIGV4cGFuZChvYmosIHBhcmVudCwgY2FsbGJhY2spIHtcbiAgaWYgKG9iaikge1xuICAgIHZhciBpZCA9IHR5cGVvZiBvYmouaWQgPT09ICdzdHJpbmcnID8gb2JqLmlkIDogJyMnO1xuXG4gICAgaWYgKCEkLmlzVVJMKGlkKSkge1xuICAgICAgaWQgPSAkLnJlc29sdmVVUkwocGFyZW50ID09PSBpZCA/IG51bGwgOiBwYXJlbnQsIGlkKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iai4kcmVmID09PSAnc3RyaW5nJyAmJiAhJC5pc1VSTChvYmouJHJlZikpIHtcbiAgICAgIG9iai4kcmVmID0gJC5yZXNvbHZlVVJMKGlkLCBvYmouJHJlZik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvYmouaWQgPSBwYXJlbnQgPSBpZDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhKGtleSA9PT0gJ2VudW0nIHx8IGtleSA9PT0gJ3JlcXVpcmVkJykpIHtcbiAgICAgIGV4cGFuZCh2YWx1ZSwgcGFyZW50LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrKG9iaik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmYWtlcm9vdCwgc2NoZW1hLCBwdXNoKSB7XG4gIGlmICh0eXBlb2YgZmFrZXJvb3QgPT09ICdvYmplY3QnKSB7XG4gICAgcHVzaCA9IHNjaGVtYTtcbiAgICBzY2hlbWEgPSBmYWtlcm9vdDtcbiAgICBmYWtlcm9vdCA9IG51bGw7XG4gIH1cblxuICB2YXIgYmFzZSA9IGZha2Vyb290IHx8ICcnLFxuICAgICAgY29weSA9IGNsb25lT2JqKHNjaGVtYSk7XG5cbiAgaWYgKGNvcHkuJHNjaGVtYSAmJiBTQ0hFTUFfVVJJLmluZGV4T2YoY29weS4kc2NoZW1hKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHNjaGVtYSB2ZXJzaW9uICh2NCBvbmx5KScpO1xuICB9XG5cbiAgYmFzZSA9ICQucmVzb2x2ZVVSTChjb3B5LiRzY2hlbWEgfHwgU0NIRU1BX1VSSVswXSwgYmFzZSk7XG5cbiAgZXhwYW5kKGNvcHksICQucmVzb2x2ZVVSTChjb3B5LmlkIHx8ICcjJywgYmFzZSksIHB1c2gpO1xuXG4gIGNvcHkuaWQgPSBjb3B5LmlkIHx8IGJhc2U7XG5cbiAgcmV0dXJuIGNvcHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJCA9IHJlcXVpcmUoJy4vdXJpLWhlbHBlcnMnKTtcblxudmFyIGZpbmQgPSByZXF1aXJlKCcuL2ZpbmQtcmVmZXJlbmNlJyk7XG5cbnZhciBkZWVwRXh0ZW5kID0gcmVxdWlyZSgnZGVlcC1leHRlbmQnKTtcblxuZnVuY3Rpb24gaXNLZXkocHJvcCkge1xuICByZXR1cm4gcHJvcCA9PT0gJ2VudW0nIHx8IHByb3AgPT09ICdyZXF1aXJlZCcgfHwgcHJvcCA9PT0gJ2RlZmluaXRpb25zJztcbn1cblxuZnVuY3Rpb24gY29weShvYmosIHJlZnMsIHBhcmVudCwgcmVzb2x2ZSkge1xuICB2YXIgdGFyZ2V0ID0gIEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDoge307XG5cbiAgaWYgKHR5cGVvZiBvYmouJHJlZiA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgYmFzZSA9ICQuZ2V0RG9jdW1lbnRVUkkob2JqLiRyZWYpO1xuXG4gICAgaWYgKHBhcmVudCAhPT0gYmFzZSB8fCAocmVzb2x2ZSAmJiBvYmouJHJlZi5pbmRleE9mKCcjLycpID4gLTEpKSB7XG4gICAgICB2YXIgZml4ZWQgPSBmaW5kKG9iai4kcmVmLCByZWZzKTtcblxuICAgICAgZGVlcEV4dGVuZChvYmosIGZpeGVkKTtcblxuICAgICAgZGVsZXRlIG9iai4kcmVmO1xuICAgICAgZGVsZXRlIG9iai5pZDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xuICAgIGlmICh0eXBlb2Ygb2JqW3Byb3BdID09PSAnb2JqZWN0JyAmJiAhaXNLZXkocHJvcCkpIHtcbiAgICAgIHRhcmdldFtwcm9wXSA9IGNvcHkob2JqW3Byb3BdLCByZWZzLCBwYXJlbnQsIHJlc29sdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHJlZnMsIHJlc29sdmUpIHtcbiAgdmFyIGZpeGVkSWQgPSAkLnJlc29sdmVVUkwob2JqLiRzY2hlbWEsIG9iai5pZCksXG4gICAgICBwYXJlbnQgPSAkLmdldERvY3VtZW50VVJJKGZpeGVkSWQpO1xuXG4gIHJldHVybiBjb3B5KG9iaiwgcmVmcywgcGFyZW50LCByZXNvbHZlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BqdDMzL2VmYjJmMTEzNGJhYjk4NjExM2ZkXG5cbmZ1bmN0aW9uIFVSTFV0aWxzKHVybCwgYmFzZVVSTCkge1xuICAvLyByZW1vdmUgbGVhZGluZyAuL1xuICB1cmwgPSB1cmwucmVwbGFjZSgvXlxcLlxcLy8sICcnKTtcblxuICB2YXIgbSA9IFN0cmluZyh1cmwpLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKS5tYXRjaCgvXihbXjpcXC8/I10rOik/KD86XFwvXFwvKD86KFteOkBdKikoPzo6KFteOkBdKikpP0ApPygoW146XFwvPyNdKikoPzo6KFxcZCopKT8pKT8oW14/I10qKShcXD9bXiNdKik/KCNbXFxzXFxTXSopPy8pO1xuICBpZiAoIW0pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigpO1xuICB9XG4gIHZhciBocmVmID0gbVswXSB8fCAnJztcbiAgdmFyIHByb3RvY29sID0gbVsxXSB8fCAnJztcbiAgdmFyIHVzZXJuYW1lID0gbVsyXSB8fCAnJztcbiAgdmFyIHBhc3N3b3JkID0gbVszXSB8fCAnJztcbiAgdmFyIGhvc3QgPSBtWzRdIHx8ICcnO1xuICB2YXIgaG9zdG5hbWUgPSBtWzVdIHx8ICcnO1xuICB2YXIgcG9ydCA9IG1bNl0gfHwgJyc7XG4gIHZhciBwYXRobmFtZSA9IG1bN10gfHwgJyc7XG4gIHZhciBzZWFyY2ggPSBtWzhdIHx8ICcnO1xuICB2YXIgaGFzaCA9IG1bOV0gfHwgJyc7XG4gIGlmIChiYXNlVVJMICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgYmFzZSA9IG5ldyBVUkxVdGlscyhiYXNlVVJMKTtcbiAgICB2YXIgZmxhZyA9IHByb3RvY29sID09PSAnJyAmJiBob3N0ID09PSAnJyAmJiB1c2VybmFtZSA9PT0gJyc7XG4gICAgaWYgKGZsYWcgJiYgcGF0aG5hbWUgPT09ICcnICYmIHNlYXJjaCA9PT0gJycpIHtcbiAgICAgIHNlYXJjaCA9IGJhc2Uuc2VhcmNoO1xuICAgIH1cbiAgICBpZiAoZmxhZyAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgcGF0aG5hbWUgPSAocGF0aG5hbWUgIT09ICcnID8gKGJhc2UucGF0aG5hbWUuc2xpY2UoMCwgYmFzZS5wYXRobmFtZS5sYXN0SW5kZXhPZignLycpICsgMSkgKyBwYXRobmFtZSkgOiBiYXNlLnBhdGhuYW1lKTtcbiAgICB9XG4gICAgLy8gZG90IHNlZ21lbnRzIHJlbW92YWxcbiAgICB2YXIgb3V0cHV0ID0gW107XG5cbiAgICBwYXRobmFtZS5yZXBsYWNlKC9cXC8/W15cXC9dKy9nLCBmdW5jdGlvbihwKSB7XG4gICAgICBpZiAocCA9PT0gJy8uLicpIHtcbiAgICAgICAgb3V0cHV0LnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0LnB1c2gocCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBwYXRobmFtZSA9IG91dHB1dC5qb2luKCcnKSB8fCAnLyc7XG5cbiAgICBpZiAoZmxhZykge1xuICAgICAgcG9ydCA9IGJhc2UucG9ydDtcbiAgICAgIGhvc3RuYW1lID0gYmFzZS5ob3N0bmFtZTtcbiAgICAgIGhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICBwYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICB1c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgfVxuICAgIGlmIChwcm90b2NvbCA9PT0gJycpIHtcbiAgICAgIHByb3RvY29sID0gYmFzZS5wcm90b2NvbDtcbiAgICB9XG4gICAgaHJlZiA9IHByb3RvY29sICsgKGhvc3QgIT09ICcnID8gJy8vJyA6ICcnKSArICh1c2VybmFtZSAhPT0gJycgPyB1c2VybmFtZSArIChwYXNzd29yZCAhPT0gJycgPyAnOicgKyBwYXNzd29yZCA6ICcnKSArICdAJyA6ICcnKSArIGhvc3QgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG4gIH1cbiAgdGhpcy5ocmVmID0gaHJlZjtcbiAgdGhpcy5vcmlnaW4gPSBwcm90b2NvbCArIChob3N0ICE9PSAnJyA/ICcvLycgKyBob3N0IDogJycpO1xuICB0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7XG4gIHRoaXMudXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkO1xuICB0aGlzLmhvc3QgPSBob3N0O1xuICB0aGlzLmhvc3RuYW1lID0gaG9zdG5hbWU7XG4gIHRoaXMucG9ydCA9IHBvcnQ7XG4gIHRoaXMucGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgdGhpcy5zZWFyY2ggPSBzZWFyY2g7XG4gIHRoaXMuaGFzaCA9IGhhc2g7XG59XG5cbmZ1bmN0aW9uIGlzVVJMKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyAmJiAvXlxcdys6XFwvXFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VVUkkoaHJlZiwgYmFzZSkge1xuICByZXR1cm4gbmV3IFVSTFV0aWxzKGhyZWYsIGJhc2UpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVVJMKGJhc2UsIGhyZWYpIHtcbiAgYmFzZSA9IGJhc2UgfHwgJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hIyc7XG5cbiAgaHJlZiA9IHBhcnNlVVJJKGhyZWYsIGJhc2UpO1xuICBiYXNlID0gcGFyc2VVUkkoYmFzZSk7XG5cbiAgaWYgKGJhc2UuaGFzaCAmJiAhaHJlZi5oYXNoKSB7XG4gICAgcmV0dXJuIGhyZWYuaHJlZiArIGJhc2UuaGFzaDtcbiAgfVxuXG4gIHJldHVybiBocmVmLmhyZWY7XG59XG5cbmZ1bmN0aW9uIGdldERvY3VtZW50VVJJKHVyaSkge1xuICByZXR1cm4gdHlwZW9mIHVyaSA9PT0gJ3N0cmluZycgJiYgdXJpLnNwbGl0KCcjJylbMF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1VSTDogaXNVUkwsXG4gIHBhcnNlVVJJOiBwYXJzZVVSSSxcbiAgcmVzb2x2ZVVSTDogcmVzb2x2ZVVSTCxcbiAgZ2V0RG9jdW1lbnRVUkk6IGdldERvY3VtZW50VVJJXG59O1xuIiwiLy9wcm90ZWN0ZWQgaGVscGVyIGNsYXNzXG5mdW5jdGlvbiBfU3ViUmFuZ2UobG93LCBoaWdoKSB7XG4gICAgdGhpcy5sb3cgPSBsb3c7XG4gICAgdGhpcy5oaWdoID0gaGlnaDtcbiAgICB0aGlzLmxlbmd0aCA9IDEgKyBoaWdoIC0gbG93O1xufVxuXG5fU3ViUmFuZ2UucHJvdG90eXBlLm92ZXJsYXBzID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgcmV0dXJuICEodGhpcy5oaWdoIDwgcmFuZ2UubG93IHx8IHRoaXMubG93ID4gcmFuZ2UuaGlnaCk7XG59O1xuXG5fU3ViUmFuZ2UucHJvdG90eXBlLnRvdWNoZXMgPSBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICByZXR1cm4gISh0aGlzLmhpZ2ggKyAxIDwgcmFuZ2UubG93IHx8IHRoaXMubG93IC0gMSA+IHJhbmdlLmhpZ2gpO1xufTtcblxuLy9yZXR1cm5zIGluY2x1c2l2ZSBjb21iaW5hdGlvbiBvZiBfU3ViUmFuZ2VzIGFzIGEgX1N1YlJhbmdlXG5fU3ViUmFuZ2UucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIHJldHVybiB0aGlzLnRvdWNoZXMocmFuZ2UpICYmIG5ldyBfU3ViUmFuZ2UoTWF0aC5taW4odGhpcy5sb3csIHJhbmdlLmxvdyksIE1hdGgubWF4KHRoaXMuaGlnaCwgcmFuZ2UuaGlnaCkpO1xufTtcblxuLy9yZXR1cm5zIHN1YnRyYWN0aW9uIG9mIF9TdWJSYW5nZXMgYXMgYW4gYXJyYXkgb2YgX1N1YlJhbmdlcyAodGhlcmUncyBhIGNhc2Ugd2hlcmUgc3VidHJhY3Rpb24gZGl2aWRlcyBpdCBpbiAyKVxuX1N1YlJhbmdlLnByb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIGlmICghdGhpcy5vdmVybGFwcyhyYW5nZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocmFuZ2UubG93IDw9IHRoaXMubG93ICYmIHJhbmdlLmhpZ2ggPj0gdGhpcy5oaWdoKSByZXR1cm4gW107XG4gICAgaWYgKHJhbmdlLmxvdyA+IHRoaXMubG93ICYmIHJhbmdlLmhpZ2ggPCB0aGlzLmhpZ2gpIHJldHVybiBbbmV3IF9TdWJSYW5nZSh0aGlzLmxvdywgcmFuZ2UubG93IC0gMSksIG5ldyBfU3ViUmFuZ2UocmFuZ2UuaGlnaCArIDEsIHRoaXMuaGlnaCldO1xuICAgIGlmIChyYW5nZS5sb3cgPD0gdGhpcy5sb3cpIHJldHVybiBbbmV3IF9TdWJSYW5nZShyYW5nZS5oaWdoICsgMSwgdGhpcy5oaWdoKV07XG4gICAgcmV0dXJuIFtuZXcgX1N1YlJhbmdlKHRoaXMubG93LCByYW5nZS5sb3cgLSAxKV07XG59O1xuXG5fU3ViUmFuZ2UucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmxvdyA9PSB0aGlzLmhpZ2gpIHJldHVybiB0aGlzLmxvdy50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmxvdyArICctJyArIHRoaXMuaGlnaDtcbn07XG5cbl9TdWJSYW5nZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBfU3ViUmFuZ2UodGhpcy5sb3csIHRoaXMuaGlnaCk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEaXNjb250aW51b3VzUmFuZ2UoYSwgYikge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRGlzY29udGludW91c1JhbmdlKSB7XG4gICAgICAgIHRoaXMucmFuZ2VzID0gW107XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgaWYgKGEgIT09IHVuZGVmaW5lZCkgdGhpcy5hZGQoYSwgYik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEaXNjb250aW51b3VzUmFuZ2UoYSwgYik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlX2xlbmd0aChzZWxmKSB7XG4gICAgc2VsZi5sZW5ndGggPSBzZWxmLnJhbmdlcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzLCByYW5nZSkge3JldHVybiBwcmV2aW91cyArIHJhbmdlLmxlbmd0aH0sIDApO1xufVxuXG5EaXNjb250aW51b3VzUmFuZ2UucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIF9hZGQoc3VicmFuZ2UpIHtcbiAgICAgICAgdmFyIG5ld19yYW5nZXMgPSBbXTtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHNlbGYucmFuZ2VzLmxlbmd0aCAmJiAhc3VicmFuZ2UudG91Y2hlcyhzZWxmLnJhbmdlc1tpXSkpIHtcbiAgICAgICAgICAgIG5ld19yYW5nZXMucHVzaChzZWxmLnJhbmdlc1tpXS5jbG9uZSgpKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaSA8IHNlbGYucmFuZ2VzLmxlbmd0aCAmJiBzdWJyYW5nZS50b3VjaGVzKHNlbGYucmFuZ2VzW2ldKSkge1xuICAgICAgICAgICAgc3VicmFuZ2UgPSBzdWJyYW5nZS5hZGQoc2VsZi5yYW5nZXNbaV0pO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIG5ld19yYW5nZXMucHVzaChzdWJyYW5nZSk7XG4gICAgICAgIHdoaWxlIChpIDwgc2VsZi5yYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXdfcmFuZ2VzLnB1c2goc2VsZi5yYW5nZXNbaV0uY2xvbmUoKSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5yYW5nZXMgPSBuZXdfcmFuZ2VzO1xuICAgICAgICBfdXBkYXRlX2xlbmd0aChzZWxmKTtcbiAgICB9XG5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIERpc2NvbnRpbnVvdXNSYW5nZSkge1xuICAgICAgICBhLnJhbmdlcy5mb3JFYWNoKF9hZGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgX1N1YlJhbmdlKSB7XG4gICAgICAgICAgICBfYWRkKGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkgYiA9IGE7XG4gICAgICAgICAgICBfYWRkKG5ldyBfU3ViUmFuZ2UoYSwgYikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuRGlzY29udGludW91c1JhbmdlLnByb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIF9zdWJ0cmFjdChzdWJyYW5nZSkge1xuICAgICAgICB2YXIgbmV3X3JhbmdlcyA9IFtdO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc2VsZi5yYW5nZXMubGVuZ3RoICYmICFzdWJyYW5nZS5vdmVybGFwcyhzZWxmLnJhbmdlc1tpXSkpIHtcbiAgICAgICAgICAgIG5ld19yYW5nZXMucHVzaChzZWxmLnJhbmdlc1tpXS5jbG9uZSgpKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaSA8IHNlbGYucmFuZ2VzLmxlbmd0aCAmJiBzdWJyYW5nZS5vdmVybGFwcyhzZWxmLnJhbmdlc1tpXSkpIHtcbiAgICAgICAgICAgIG5ld19yYW5nZXMgPSBuZXdfcmFuZ2VzLmNvbmNhdChzZWxmLnJhbmdlc1tpXS5zdWJ0cmFjdChzdWJyYW5nZSkpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChpIDwgc2VsZi5yYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXdfcmFuZ2VzLnB1c2goc2VsZi5yYW5nZXNbaV0uY2xvbmUoKSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5yYW5nZXMgPSBuZXdfcmFuZ2VzO1xuICAgICAgICBfdXBkYXRlX2xlbmd0aChzZWxmKTtcbiAgICB9XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEaXNjb250aW51b3VzUmFuZ2UpIHtcbiAgICAgICAgYS5yYW5nZXMuZm9yRWFjaChfc3VidHJhY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgX1N1YlJhbmdlKSB7XG4gICAgICAgICAgICBfc3VidHJhY3QoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYiA9PT0gdW5kZWZpbmVkKSBiID0gYTtcbiAgICAgICAgICAgIF9zdWJ0cmFjdChuZXcgX1N1YlJhbmdlKGEsIGIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuRGlzY29udGludW91c1JhbmdlLnByb3RvdHlwZS5pbmRleCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHRoaXMucmFuZ2VzLmxlbmd0aCAmJiB0aGlzLnJhbmdlc1tpXS5sZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgaW5kZXggLT0gdGhpcy5yYW5nZXNbaV0ubGVuZ3RoO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIGlmIChpID49IHRoaXMucmFuZ2VzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzW2ldLmxvdyArIGluZGV4O1xufTtcblxuXG5EaXNjb250aW51b3VzUmFuZ2UucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnWyAnICsgdGhpcy5yYW5nZXMuam9pbignLCAnKSArICcgXSdcbn07XG5cbkRpc2NvbnRpbnVvdXNSYW5nZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBEaXNjb250aW51b3VzUmFuZ2UodGhpcyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERpc2NvbnRpbnVvdXNSYW5nZTtcbiIsImZ1bmN0aW9uIEFkZHJlc3MgKGZha2VyKSB7XG4gIHZhciBmID0gZmFrZXIuZmFrZSxcbiAgICAgIEhlbHBlcnMgPSBmYWtlci5oZWxwZXJzO1xuXG4gIHRoaXMuemlwQ29kZSA9IGZ1bmN0aW9uKGZvcm1hdCkge1xuICAgIC8vIGlmIHppcCBmb3JtYXQgaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSB6aXAgZm9ybWF0IGRlZmluZWQgZm9yIHRoZSBsb2NhbGVcbiAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBsb2NhbGVGb3JtYXQgPSBmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLnBvc3Rjb2RlO1xuICAgICAgaWYgKHR5cGVvZiBsb2NhbGVGb3JtYXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZvcm1hdCA9IGxvY2FsZUZvcm1hdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1hdCA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQobG9jYWxlRm9ybWF0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEhlbHBlcnMucmVwbGFjZVN5bWJvbHMoZm9ybWF0KTtcbiAgfVxuXG4gIHRoaXMuY2l0eSA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICB2YXIgZm9ybWF0cyA9IFtcbiAgICAgICd7e2FkZHJlc3MuY2l0eVByZWZpeH19IHt7bmFtZS5maXJzdE5hbWV9fSB7e2FkZHJlc3MuY2l0eVN1ZmZpeH19JyxcbiAgICAgICd7e2FkZHJlc3MuY2l0eVByZWZpeH19IHt7bmFtZS5maXJzdE5hbWV9fScsXG4gICAgICAne3tuYW1lLmZpcnN0TmFtZX19IHt7YWRkcmVzcy5jaXR5U3VmZml4fX0nLFxuICAgICAgJ3t7bmFtZS5sYXN0TmFtZX19IHt7YWRkcmVzcy5jaXR5U3VmZml4fX0nXG4gICAgXTtcblxuICAgIGlmICh0eXBlb2YgZm9ybWF0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICBmb3JtYXQgPSBmYWtlci5yYW5kb20ubnVtYmVyKGZvcm1hdHMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGYoZm9ybWF0c1tmb3JtYXRdKTtcblxuICB9XG5cbiAgdGhpcy5jaXR5UHJlZml4ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3MuY2l0eV9wcmVmaXgpO1xuICB9XG5cbiAgdGhpcy5jaXR5U3VmZml4ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3MuY2l0eV9zdWZmaXgpO1xuICB9XG5cbiAgdGhpcy5zdHJlZXROYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHZhciBzdWZmaXggPSBmYWtlci5hZGRyZXNzLnN0cmVldFN1ZmZpeCgpO1xuICAgICAgaWYgKHN1ZmZpeCAhPT0gXCJcIikge1xuICAgICAgICAgIHN1ZmZpeCA9IFwiIFwiICsgc3VmZml4XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZmFrZXIucmFuZG9tLm51bWJlcigxKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJlc3VsdCA9IGZha2VyLm5hbWUubGFzdE5hbWUoKSArIHN1ZmZpeDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXN1bHQgPSBmYWtlci5uYW1lLmZpcnN0TmFtZSgpICsgc3VmZml4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vXG4gIC8vIFRPRE86IGNoYW5nZSBhbGwgdGhlc2UgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIGJvb2xlYW4gdG8gaW5zdGVhZCBhY2NlcHQgYW4gb3B0aW9ucyBoYXNoLlxuICAvL1xuICB0aGlzLnN0cmVldEFkZHJlc3MgPSBmdW5jdGlvbiAodXNlRnVsbEFkZHJlc3MpIHtcbiAgICAgIGlmICh1c2VGdWxsQWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7IHVzZUZ1bGxBZGRyZXNzID0gZmFsc2U7IH1cbiAgICAgIHZhciBhZGRyZXNzID0gXCJcIjtcbiAgICAgIHN3aXRjaCAoZmFrZXIucmFuZG9tLm51bWJlcigyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAgIGFkZHJlc3MgPSBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKFwiIyMjIyNcIikgKyBcIiBcIiArIGZha2VyLmFkZHJlc3Muc3RyZWV0TmFtZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICAgIGFkZHJlc3MgPSBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKFwiIyMjI1wiKSArICBcIiBcIiArIGZha2VyLmFkZHJlc3Muc3RyZWV0TmFtZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICAgIGFkZHJlc3MgPSBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKFwiIyMjXCIpICsgXCIgXCIgKyBmYWtlci5hZGRyZXNzLnN0cmVldE5hbWUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJldHVybiB1c2VGdWxsQWRkcmVzcyA/IChhZGRyZXNzICsgXCIgXCIgKyBmYWtlci5hZGRyZXNzLnNlY29uZGFyeUFkZHJlc3MoKSkgOiBhZGRyZXNzO1xuICB9XG5cbiAgdGhpcy5zdHJlZXRTdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLnN0cmVldF9zdWZmaXgpO1xuICB9XG4gIFxuICB0aGlzLnN0cmVldFByZWZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3Muc3RyZWV0X3ByZWZpeCk7XG4gIH1cblxuICB0aGlzLnNlY29uZGFyeUFkZHJlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcihmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KFxuICAgICAgICAgIFtcbiAgICAgICAgICAgICAgJ0FwdC4gIyMjJyxcbiAgICAgICAgICAgICAgJ1N1aXRlICMjIydcbiAgICAgICAgICBdXG4gICAgICApKTtcbiAgfVxuXG4gIHRoaXMuY291bnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3MuY291bnR5KTtcbiAgfVxuXG4gIHRoaXMuY291bnRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLmNvdW50cnkpO1xuICB9XG5cbiAgdGhpcy5jb3VudHJ5Q29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLmNvdW50cnlfY29kZSk7XG4gIH1cblxuICB0aGlzLnN0YXRlID0gZnVuY3Rpb24gKHVzZUFiYnIpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3Muc3RhdGUpO1xuICB9XG5cbiAgdGhpcy5zdGF0ZUFiYnIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5hZGRyZXNzLnN0YXRlX2FiYnIpO1xuICB9XG5cbiAgdGhpcy5sYXRpdHVkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoZmFrZXIucmFuZG9tLm51bWJlcigxODAgKiAxMDAwMCkgLyAxMDAwMC4wIC0gOTAuMCkudG9GaXhlZCg0KTtcbiAgfVxuXG4gIHRoaXMubG9uZ2l0dWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChmYWtlci5yYW5kb20ubnVtYmVyKDM2MCAqIDEwMDAwKSAvIDEwMDAwLjAgLSAxODAuMCkudG9GaXhlZCg0KTtcbiAgfVxuICBcbiAgcmV0dXJuIHRoaXM7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBBZGRyZXNzO1xuIiwidmFyIENvbW1lcmNlID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBzZWxmLmNvbG9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5jb2xvcik7XG4gIH07XG5cbiAgc2VsZi5kZXBhcnRtZW50ID0gZnVuY3Rpb24obWF4LCBmaXhlZEFtb3VudCkge1xuICAgIFxuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UuZGVwYXJ0bWVudCk7XG4gICAgICAvKlxuICAgICAgbWF4ID0gbWF4IHx8IDM7XG5cbiAgICAgIHZhciBudW0gPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogbWF4KSArIDEpO1xuICAgICAgaWYgKGZpeGVkQW1vdW50KSB7XG4gICAgICAgICAgbnVtID0gbWF4O1xuICAgICAgfVxuXG4gICAgICB2YXIgY2F0ZWdvcmllcyA9IGZha2VyLmNvbW1lcmNlLmNhdGVnb3JpZXMobnVtKTtcblxuICAgICAgaWYobnVtID4gMSkge1xuICAgICAgICAgIHJldHVybiBmYWtlci5jb21tZXJjZS5tZXJnZUNhdGVnb3JpZXMoY2F0ZWdvcmllcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYXRlZ29yaWVzWzBdO1xuICAgICAgKi9cbiAgfTtcblxuICBzZWxmLnByb2R1Y3ROYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmFrZXIuY29tbWVyY2UucHJvZHVjdEFkamVjdGl2ZSgpICsgXCIgXCIgK1xuICAgICAgICAgICAgICBmYWtlci5jb21tZXJjZS5wcm9kdWN0TWF0ZXJpYWwoKSArIFwiIFwiICtcbiAgICAgICAgICAgICAgZmFrZXIuY29tbWVyY2UucHJvZHVjdCgpO1xuICB9O1xuXG4gIHNlbGYucHJpY2UgPSBmdW5jdGlvbihtaW4sIG1heCwgZGVjLCBzeW1ib2wpIHtcbiAgICAgIG1pbiA9IG1pbiB8fCAwO1xuICAgICAgbWF4ID0gbWF4IHx8IDEwMDA7XG4gICAgICBkZWMgPSBkZWMgfHwgMjtcbiAgICAgIHN5bWJvbCA9IHN5bWJvbCB8fCAnJztcblxuICAgICAgaWYobWluIDwgMCB8fCBtYXggPCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHN5bWJvbCArIDAuMDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzeW1ib2wgKyAoTWF0aC5yb3VuZCgoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluKSAqIE1hdGgucG93KDEwLCBkZWMpKSAvIE1hdGgucG93KDEwLCBkZWMpKS50b0ZpeGVkKGRlYyk7XG4gIH07XG5cbiAgLypcbiAgc2VsZi5jYXRlZ29yaWVzID0gZnVuY3Rpb24obnVtKSB7XG4gICAgICB2YXIgY2F0ZWdvcmllcyA9IFtdO1xuXG4gICAgICBkbyB7XG4gICAgICAgICAgdmFyIGNhdGVnb3J5ID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5kZXBhcnRtZW50KTtcbiAgICAgICAgICBpZihjYXRlZ29yaWVzLmluZGV4T2YoY2F0ZWdvcnkpID09PSAtMSkge1xuICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xuICAgICAgICAgIH1cbiAgICAgIH0gd2hpbGUoY2F0ZWdvcmllcy5sZW5ndGggPCBudW0pO1xuXG4gICAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgfTtcblxuICAqL1xuICAvKlxuICBzZWxmLm1lcmdlQ2F0ZWdvcmllcyA9IGZ1bmN0aW9uKGNhdGVnb3JpZXMpIHtcbiAgICAgIHZhciBzZXBhcmF0b3IgPSBmYWtlci5kZWZpbml0aW9ucy5zZXBhcmF0b3IgfHwgXCIgJlwiO1xuICAgICAgLy8gVE9ETzogZmluZCB1bmRlZmluZWQgaGVyZVxuICAgICAgY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXMgfHwgZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UuY2F0ZWdvcmllcztcbiAgICAgIHZhciBjb21tYVNlcGFyYXRlZCA9IGNhdGVnb3JpZXMuc2xpY2UoMCwgLTEpLmpvaW4oJywgJyk7XG5cbiAgICAgIHJldHVybiBbY29tbWFTZXBhcmF0ZWQsIGNhdGVnb3JpZXNbY2F0ZWdvcmllcy5sZW5ndGggLSAxXV0uam9pbihzZXBhcmF0b3IgKyBcIiBcIik7XG4gIH07XG4gICovXG5cbiAgc2VsZi5wcm9kdWN0QWRqZWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5wcm9kdWN0X25hbWUuYWRqZWN0aXZlKTtcbiAgfTtcblxuICBzZWxmLnByb2R1Y3RNYXRlcmlhbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UucHJvZHVjdF9uYW1lLm1hdGVyaWFsKTtcbiAgfTtcblxuICBzZWxmLnByb2R1Y3QgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbW1lcmNlLnByb2R1Y3RfbmFtZS5wcm9kdWN0KTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufTtcblxubW9kdWxlWydleHBvcnRzJ10gPSBDb21tZXJjZTsiLCJ2YXIgQ29tcGFueSA9IGZ1bmN0aW9uIChmYWtlcikge1xuICBcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgZiA9IGZha2VyLmZha2U7XG4gIFxuICB0aGlzLnN1ZmZpeGVzID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIERvbid0IHdhbnQgdGhlIHNvdXJjZSBhcnJheSBleHBvc2VkIHRvIG1vZGlmaWNhdGlvbiwgc28gcmV0dXJuIGEgY29weVxuICAgIHJldHVybiBmYWtlci5kZWZpbml0aW9ucy5jb21wYW55LnN1ZmZpeC5zbGljZSgwKTtcbiAgfVxuXG4gIHRoaXMuY29tcGFueU5hbWUgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG5cbiAgICB2YXIgZm9ybWF0cyA9IFtcbiAgICAgICd7e25hbWUubGFzdE5hbWV9fSB7e2NvbXBhbnkuY29tcGFueVN1ZmZpeH19JyxcbiAgICAgICd7e25hbWUubGFzdE5hbWV9fSAtIHt7bmFtZS5sYXN0TmFtZX19JyxcbiAgICAgICd7e25hbWUubGFzdE5hbWV9fSwge3tuYW1lLmxhc3ROYW1lfX0gYW5kIHt7bmFtZS5sYXN0TmFtZX19J1xuICAgIF07XG5cbiAgICBpZiAodHlwZW9mIGZvcm1hdCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgZm9ybWF0ID0gZmFrZXIucmFuZG9tLm51bWJlcihmb3JtYXRzLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBmKGZvcm1hdHNbZm9ybWF0XSk7XG4gIH1cblxuICB0aGlzLmNvbXBhbnlTdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5jb21wYW55LnN1ZmZpeGVzKCkpO1xuICB9XG5cbiAgdGhpcy5jYXRjaFBocmFzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZigne3tjb21wYW55LmNhdGNoUGhyYXNlQWRqZWN0aXZlfX0ge3tjb21wYW55LmNhdGNoUGhyYXNlRGVzY3JpcHRvcn19IHt7Y29tcGFueS5jYXRjaFBocmFzZU5vdW59fScpXG4gIH1cblxuICB0aGlzLmJzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmKCd7e2NvbXBhbnkuYnNBZGplY3RpdmV9fSB7e2NvbXBhbnkuYnNCdXp6fX0ge3tjb21wYW55LmJzTm91bn19Jyk7XG4gIH1cblxuICB0aGlzLmNhdGNoUGhyYXNlQWRqZWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5hZGplY3RpdmUpO1xuICB9XG5cbiAgdGhpcy5jYXRjaFBocmFzZURlc2NyaXB0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21wYW55LmRlc2NyaXB0b3IpO1xuICB9XG5cbiAgdGhpcy5jYXRjaFBocmFzZU5vdW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21wYW55Lm5vdW4pO1xuICB9XG5cbiAgdGhpcy5ic0FkamVjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbXBhbnkuYnNfYWRqZWN0aXZlKTtcbiAgfVxuXG4gIHRoaXMuYnNCdXp6ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5ic192ZXJiKTtcbiAgfVxuXG4gIHRoaXMuYnNOb3VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5ic19ub3VuKTtcbiAgfVxuICBcbn1cblxubW9kdWxlWydleHBvcnRzJ10gPSBDb21wYW55OyIsInZhciBfRGF0ZSA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYucGFzdCA9IGZ1bmN0aW9uICh5ZWFycywgcmVmRGF0ZSkge1xuICAgICAgdmFyIGRhdGUgPSAocmVmRGF0ZSkgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKHJlZkRhdGUpKSA6IG5ldyBEYXRlKCk7XG4gICAgICB2YXIgcmFuZ2UgPSB7XG4gICAgICAgIG1pbjogMTAwMCxcbiAgICAgICAgbWF4OiAoeWVhcnMgfHwgMSkgKiAzNjUgKiAyNCAqIDM2MDAgKiAxMDAwXG4gICAgICB9O1xuXG4gICAgICB2YXIgcGFzdCA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgcGFzdCAtPSBmYWtlci5yYW5kb20ubnVtYmVyKHJhbmdlKTsgLy8gc29tZSB0aW1lIGZyb20gbm93IHRvIE4geWVhcnMgYWdvLCBpbiBtaWxsaXNlY29uZHNcbiAgICAgIGRhdGUuc2V0VGltZShwYXN0KTtcblxuICAgICAgcmV0dXJuIGRhdGU7XG4gIH07XG5cbiAgc2VsZi5mdXR1cmUgPSBmdW5jdGlvbiAoeWVhcnMsIHJlZkRhdGUpIHtcbiAgICAgIHZhciBkYXRlID0gKHJlZkRhdGUpID8gbmV3IERhdGUoRGF0ZS5wYXJzZShyZWZEYXRlKSkgOiBuZXcgRGF0ZSgpO1xuICAgICAgdmFyIHJhbmdlID0ge1xuICAgICAgICBtaW46IDEwMDAsXG4gICAgICAgIG1heDogKHllYXJzIHx8IDEpICogMzY1ICogMjQgKiAzNjAwICogMTAwMFxuICAgICAgfTtcblxuICAgICAgdmFyIGZ1dHVyZSA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgZnV0dXJlICs9IGZha2VyLnJhbmRvbS5udW1iZXIocmFuZ2UpOyAvLyBzb21lIHRpbWUgZnJvbSBub3cgdG8gTiB5ZWFycyBsYXRlciwgaW4gbWlsbGlzZWNvbmRzXG4gICAgICBkYXRlLnNldFRpbWUoZnV0dXJlKTtcblxuICAgICAgcmV0dXJuIGRhdGU7XG4gIH07XG5cbiAgc2VsZi5iZXR3ZWVuID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gICAgICB2YXIgZnJvbU1pbGxpID0gRGF0ZS5wYXJzZShmcm9tKTtcbiAgICAgIHZhciBkYXRlT2Zmc2V0ID0gZmFrZXIucmFuZG9tLm51bWJlcihEYXRlLnBhcnNlKHRvKSAtIGZyb21NaWxsaSk7XG5cbiAgICAgIHZhciBuZXdEYXRlID0gbmV3IERhdGUoZnJvbU1pbGxpICsgZGF0ZU9mZnNldCk7XG5cbiAgICAgIHJldHVybiBuZXdEYXRlO1xuICB9O1xuXG4gIHNlbGYucmVjZW50ID0gZnVuY3Rpb24gKGRheXMpIHtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIHZhciByYW5nZSA9IHtcbiAgICAgICAgbWluOiAxMDAwLFxuICAgICAgICBtYXg6IChkYXlzIHx8IDEpICogMjQgKiAzNjAwICogMTAwMFxuICAgICAgfTtcblxuICAgICAgdmFyIGZ1dHVyZSA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgZnV0dXJlIC09IGZha2VyLnJhbmRvbS5udW1iZXIocmFuZ2UpOyAvLyBzb21lIHRpbWUgZnJvbSBub3cgdG8gTiBkYXlzIGFnbywgaW4gbWlsbGlzZWNvbmRzXG4gICAgICBkYXRlLnNldFRpbWUoZnV0dXJlKTtcblxuICAgICAgcmV0dXJuIGRhdGU7XG4gIH07XG5cbiAgc2VsZi5tb250aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgdmFyIHR5cGUgPSAnd2lkZSc7XG4gICAgICBpZiAob3B0aW9ucy5hYmJyKSB7XG4gICAgICAgICAgdHlwZSA9ICdhYmJyJztcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmNvbnRleHQgJiYgdHlwZW9mIGZha2VyLmRlZmluaXRpb25zLmRhdGUubW9udGhbdHlwZSArICdfY29udGV4dCddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHR5cGUgKz0gJ19jb250ZXh0JztcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZSA9IGZha2VyLmRlZmluaXRpb25zLmRhdGUubW9udGhbdHlwZV07XG5cbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KHNvdXJjZSk7XG4gIH07XG5cbiAgc2VsZi53ZWVrZGF5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICB2YXIgdHlwZSA9ICd3aWRlJztcbiAgICAgIGlmIChvcHRpb25zLmFiYnIpIHtcbiAgICAgICAgICB0eXBlID0gJ2FiYnInO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuY29udGV4dCAmJiB0eXBlb2YgZmFrZXIuZGVmaW5pdGlvbnMuZGF0ZS53ZWVrZGF5W3R5cGUgKyAnX2NvbnRleHQnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0eXBlICs9ICdfY29udGV4dCc7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2UgPSBmYWtlci5kZWZpbml0aW9ucy5kYXRlLndlZWtkYXlbdHlwZV07XG5cbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KHNvdXJjZSk7XG4gIH07XG4gIFxuICByZXR1cm4gc2VsZjtcbiAgXG59O1xuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IF9EYXRlOyIsIi8qXG4gIGZha2UuanMgLSBnZW5lcmF0b3IgbWV0aG9kIGZvciBjb21iaW5pbmcgZmFrZXIgbWV0aG9kcyBiYXNlZCBvbiBzdHJpbmcgaW5wdXRcblxuKi9cblxuZnVuY3Rpb24gRmFrZSAoZmFrZXIpIHtcbiAgXG4gIHRoaXMuZmFrZSA9IGZ1bmN0aW9uIGZha2UgKHN0cikge1xuICAgIC8vIHNldHVwIGRlZmF1bHQgcmVzcG9uc2UgYXMgZW1wdHkgc3RyaW5nXG4gICAgdmFyIHJlcyA9ICcnO1xuXG4gICAgLy8gaWYgaW5jb21pbmcgc3RyIHBhcmFtZXRlciBpcyBub3QgcHJvdmlkZWQsIHJldHVybiBlcnJvciBtZXNzYWdlXG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnIHx8IHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlcyA9ICdzdHJpbmcgcGFyYW1ldGVyIGlzIHJlcXVpcmVkISc7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIGZpbmQgZmlyc3QgbWF0Y2hpbmcge3sgYW5kIH19XG4gICAgdmFyIHN0YXJ0ID0gc3RyLnNlYXJjaCgne3snKTtcbiAgICB2YXIgZW5kID0gc3RyLnNlYXJjaCgnfX0nKTtcblxuICAgIC8vIGlmIG5vIHt7IGFuZCB9fSBpcyBmb3VuZCwgd2UgYXJlIGRvbmVcbiAgICBpZiAoc3RhcnQgPT09IC0xICYmIGVuZCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coJ2F0dGVtcHRpbmcgdG8gcGFyc2UnLCBzdHIpO1xuXG4gICAgLy8gZXh0cmFjdCBtZXRob2QgbmFtZSBmcm9tIGJldHdlZW4gdGhlIHt7IH19IHRoYXQgd2UgZm91bmRcbiAgICAvLyBmb3IgZXhhbXBsZToge3tuYW1lLmZpcnN0TmFtZX19XG4gICAgdmFyIG1ldGhvZCA9IHN0ci5zdWJzdHIoc3RhcnQgKyAyLCAgZW5kIC0gc3RhcnQgLSAyKTtcbiAgICBtZXRob2QgPSBtZXRob2QucmVwbGFjZSgnfX0nLCAnJyk7XG4gICAgbWV0aG9kID0gbWV0aG9kLnJlcGxhY2UoJ3t7JywgJycpO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ21ldGhvZCcsIG1ldGhvZClcblxuICAgIC8vIHNwbGl0IHRoZSBtZXRob2QgaW50byBtb2R1bGUgYW5kIGZ1bmN0aW9uXG4gICAgdmFyIHBhcnRzID0gbWV0aG9kLnNwbGl0KCcuJyk7XG5cbiAgICBpZiAodHlwZW9mIGZha2VyW3BhcnRzWzBdXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1vZHVsZTogJyArIHBhcnRzWzBdKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZha2VyW3BhcnRzWzBdXVtwYXJ0c1sxXV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2Q6ICcgKyBwYXJ0c1swXSArIFwiLlwiICsgcGFydHNbMV0pO1xuICAgIH1cblxuICAgIC8vIGFzc2lnbiB0aGUgZnVuY3Rpb24gZnJvbSB0aGUgbW9kdWxlLmZ1bmN0aW9uIG5hbWVzcGFjZVxuICAgIHZhciBmbiA9IGZha2VyW3BhcnRzWzBdXVtwYXJ0c1sxXV07XG5cbiAgICAvLyByZXBsYWNlIHRoZSBmb3VuZCB0YWcgd2l0aCB0aGUgcmV0dXJuZWQgZmFrZSB2YWx1ZVxuICAgIHJlcyA9IHN0ci5yZXBsYWNlKCd7eycgKyBtZXRob2QgKyAnfX0nLCBmbigpKTtcblxuICAgIC8vIHJldHVybiB0aGUgcmVzcG9uc2UgcmVjdXJzaXZlbHkgdW50aWwgd2UgYXJlIGRvbmUgZmluZGluZyBhbGwgdGFnc1xuICAgIHJldHVybiBmYWtlKHJlcyk7ICAgIFxuICB9XG4gIFxuICByZXR1cm4gdGhpcztcbiAgXG4gIFxufVxuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IEZha2U7IiwidmFyIEZpbmFuY2UgPSBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgdmFyIEhlbHBlcnMgPSBmYWtlci5oZWxwZXJzLFxuICAgICAgc2VsZiA9IHRoaXM7XG5cbiAgc2VsZi5hY2NvdW50ID0gZnVuY3Rpb24gKGxlbmd0aCkge1xuXG4gICAgICBsZW5ndGggPSBsZW5ndGggfHwgODtcblxuICAgICAgdmFyIHRlbXBsYXRlID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlICsgJyMnO1xuICAgICAgfVxuICAgICAgbGVuZ3RoID0gbnVsbDtcbiAgICAgIHJldHVybiBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKHRlbXBsYXRlKTtcbiAgfVxuXG4gIHNlbGYuYWNjb3VudE5hbWUgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgIHJldHVybiBbSGVscGVycy5yYW5kb21pemUoZmFrZXIuZGVmaW5pdGlvbnMuZmluYW5jZS5hY2NvdW50X3R5cGUpLCAnQWNjb3VudCddLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHNlbGYubWFzayA9IGZ1bmN0aW9uIChsZW5ndGgsIHBhcmVucywgZWxpcHNpcykge1xuXG5cbiAgICAgIC8vc2V0IGRlZmF1bHRzXG4gICAgICBsZW5ndGggPSAobGVuZ3RoID09IDAgfHwgIWxlbmd0aCB8fCB0eXBlb2YgbGVuZ3RoID09ICd1bmRlZmluZWQnKSA/IDQgOiBsZW5ndGg7XG4gICAgICBwYXJlbnMgPSAocGFyZW5zID09PSBudWxsKSA/IHRydWUgOiBwYXJlbnM7XG4gICAgICBlbGlwc2lzID0gKGVsaXBzaXMgPT09IG51bGwpID8gdHJ1ZSA6IGVsaXBzaXM7XG5cbiAgICAgIC8vY3JlYXRlIGEgdGVtcGxhdGUgZm9yIGxlbmd0aFxuICAgICAgdmFyIHRlbXBsYXRlID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlICsgJyMnO1xuICAgICAgfVxuXG4gICAgICAvL3ByZWZpeCB3aXRoIGVsaXBzaXNcbiAgICAgIHRlbXBsYXRlID0gKGVsaXBzaXMpID8gWycuLi4nLCB0ZW1wbGF0ZV0uam9pbignJykgOiB0ZW1wbGF0ZTtcblxuICAgICAgdGVtcGxhdGUgPSAocGFyZW5zKSA/IFsnKCcsIHRlbXBsYXRlLCAnKSddLmpvaW4oJycpIDogdGVtcGxhdGU7XG5cbiAgICAgIC8vZ2VuZXJhdGUgcmFuZG9tIG51bWJlcnNcbiAgICAgIHRlbXBsYXRlID0gSGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcih0ZW1wbGF0ZSk7XG5cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcblxuICB9XG5cbiAgLy9taW4gYW5kIG1heCB0YWtlIGluIG1pbmltdW0gYW5kIG1heGltdW0gYW1vdW50cywgZGVjIGlzIHRoZSBkZWNpbWFsIHBsYWNlIHlvdSB3YW50IHJvdW5kZWQgdG8sIHN5bWJvbCBpcyAkLCDigqwsIMKjLCBldGNcbiAgLy9OT1RFOiB0aGlzIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLCBpZiB5b3Ugd2FudCBhIG51bWJlciB1c2UgcGFyc2VGbG9hdCBhbmQgbm8gc3ltYm9sXG5cbiAgc2VsZi5hbW91bnQgPSBmdW5jdGlvbiAobWluLCBtYXgsIGRlYywgc3ltYm9sKSB7XG5cbiAgICAgIG1pbiA9IG1pbiB8fCAwO1xuICAgICAgbWF4ID0gbWF4IHx8IDEwMDA7XG4gICAgICBkZWMgPSBkZWMgfHwgMjtcbiAgICAgIHN5bWJvbCA9IHN5bWJvbCB8fCAnJztcblxuICAgICAgcmV0dXJuIHN5bWJvbCArIChNYXRoLnJvdW5kKChNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW4pICogTWF0aC5wb3coMTAsIGRlYykpIC8gTWF0aC5wb3coMTAsIGRlYykpLnRvRml4ZWQoZGVjKTtcblxuICB9XG5cbiAgc2VsZi50cmFuc2FjdGlvblR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSGVscGVycy5yYW5kb21pemUoZmFrZXIuZGVmaW5pdGlvbnMuZmluYW5jZS50cmFuc2FjdGlvbl90eXBlKTtcbiAgfVxuXG4gIHNlbGYuY3VycmVuY3lDb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5vYmplY3RFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmZpbmFuY2UuY3VycmVuY3kpWydjb2RlJ107XG4gIH1cblxuICBzZWxmLmN1cnJlbmN5TmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20ub2JqZWN0RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5maW5hbmNlLmN1cnJlbmN5LCAna2V5Jyk7XG4gIH1cblxuICBzZWxmLmN1cnJlbmN5U3ltYm9sID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN5bWJvbDtcblxuICAgICAgd2hpbGUgKCFzeW1ib2wpIHtcbiAgICAgICAgICBzeW1ib2wgPSBmYWtlci5yYW5kb20ub2JqZWN0RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5maW5hbmNlLmN1cnJlbmN5KVsnc3ltYm9sJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gRmluYW5jZTsiLCJ2YXIgSGFja2VyID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgXG4gIHNlbGYuYWJicmV2aWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmhhY2tlci5hYmJyZXZpYXRpb24pO1xuICB9O1xuXG4gIHNlbGYuYWRqZWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmhhY2tlci5hZGplY3RpdmUpO1xuICB9O1xuXG4gIHNlbGYubm91biA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5oYWNrZXIubm91bik7XG4gIH07XG5cbiAgc2VsZi52ZXJiID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmhhY2tlci52ZXJiKTtcbiAgfTtcblxuICBzZWxmLmluZ3ZlcmIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaGFja2VyLmluZ3ZlcmIpO1xuICB9O1xuXG4gIHNlbGYucGhyYXNlID0gZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBhYmJyZXZpYXRpb246IHNlbGYuYWJicmV2aWF0aW9uKCksXG4gICAgICBhZGplY3RpdmU6IHNlbGYuYWRqZWN0aXZlKCksXG4gICAgICBpbmd2ZXJiOiBzZWxmLmluZ3ZlcmIoKSxcbiAgICAgIG5vdW46IHNlbGYubm91bigpLFxuICAgICAgdmVyYjogc2VsZi52ZXJiKClcbiAgICB9O1xuXG4gICAgdmFyIHBocmFzZSA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoWyBcIklmIHdlIHt7dmVyYn19IHRoZSB7e25vdW59fSwgd2UgY2FuIGdldCB0byB0aGUge3thYmJyZXZpYXRpb259fSB7e25vdW59fSB0aHJvdWdoIHRoZSB7e2FkamVjdGl2ZX19IHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0hXCIsXG4gICAgICBcIldlIG5lZWQgdG8ge3t2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIixcbiAgICAgIFwiVHJ5IHRvIHt7dmVyYn19IHRoZSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19LCBtYXliZSBpdCB3aWxsIHt7dmVyYn19IHRoZSB7e2FkamVjdGl2ZX19IHt7bm91bn19IVwiLFxuICAgICAgXCJZb3UgY2FuJ3Qge3t2ZXJifX0gdGhlIHt7bm91bn19IHdpdGhvdXQge3tpbmd2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIixcbiAgICAgIFwiVXNlIHRoZSB7e2FkamVjdGl2ZX19IHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0sIHRoZW4geW91IGNhbiB7e3ZlcmJ9fSB0aGUge3thZGplY3RpdmV9fSB7e25vdW59fSFcIixcbiAgICAgIFwiVGhlIHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0gaXMgZG93biwge3t2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3tub3VufX0gc28gd2UgY2FuIHt7dmVyYn19IHRoZSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19IVwiLFxuICAgICAgXCJ7e2luZ3ZlcmJ9fSB0aGUge3tub3VufX0gd29uJ3QgZG8gYW55dGhpbmcsIHdlIG5lZWQgdG8ge3t2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIixcbiAgICAgIFwiSSdsbCB7e3ZlcmJ9fSB0aGUge3thZGplY3RpdmV9fSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19LCB0aGF0IHNob3VsZCB7e25vdW59fSB0aGUge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIlxuICAgXSk7XG5cbiAgIHJldHVybiBmYWtlci5oZWxwZXJzLm11c3RhY2hlKHBocmFzZSwgZGF0YSk7XG5cbiAgfTtcbiAgXG4gIHJldHVybiBzZWxmO1xufTtcblxubW9kdWxlWydleHBvcnRzJ10gPSBIYWNrZXI7IiwidmFyIEhlbHBlcnMgPSBmdW5jdGlvbiAoZmFrZXIpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gYmFja3dvcmQtY29tcGF0aWJpbGl0eVxuICBzZWxmLnJhbmRvbWl6ZSA9IGZ1bmN0aW9uIChhcnJheSkge1xuICAgICAgYXJyYXkgPSBhcnJheSB8fCBbXCJhXCIsIFwiYlwiLCBcImNcIl07XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChhcnJheSk7XG4gIH07XG5cbiAgLy8gc2x1Z2lmaWVzIHN0cmluZ1xuICBzZWxmLnNsdWdpZnkgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgfHwgXCJcIjtcbiAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvIC9nLCAnLScpLnJlcGxhY2UoL1teXFx3XFwuXFwtXSsvZywgJycpO1xuICB9O1xuXG4gIC8vIHBhcnNlcyBzdHJpbmcgZm9yIGEgc3ltYm9sIGFuZCByZXBsYWNlIGl0IHdpdGggYSByYW5kb20gbnVtYmVyIGZyb20gMS0xMFxuICBzZWxmLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyID0gZnVuY3Rpb24gKHN0cmluZywgc3ltYm9sKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgfHwgXCJcIjtcbiAgICAgIC8vIGRlZmF1bHQgc3ltYm9sIGlzICcjJ1xuICAgICAgaWYgKHN5bWJvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3ltYm9sID0gJyMnO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RyID0gJyc7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChzdHJpbmcuY2hhckF0KGkpID09IHN5bWJvbCkge1xuICAgICAgICAgICAgICBzdHIgKz0gZmFrZXIucmFuZG9tLm51bWJlcig5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdHIgKz0gc3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIC8vIHBhcnNlcyBzdHJpbmcgZm9yIHN5bWJvbHMgKG51bWJlcnMgb3IgbGV0dGVycykgYW5kIHJlcGxhY2VzIHRoZW0gYXBwcm9wcmlhdGVseVxuICBzZWxmLnJlcGxhY2VTeW1ib2xzID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nIHx8IFwiXCI7XG4gIFx0dmFyIGFscGhhID0gWydBJywnQicsJ0MnLCdEJywnRScsJ0YnLCdHJywnSCcsJ0knLCdKJywnSycsJ0wnLCdNJywnTicsJ08nLCdQJywnUScsJ1InLCdTJywnVCcsJ1UnLCdWJywnVycsJ1gnLCdZJywnWiddXG4gICAgICB2YXIgc3RyID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHN0cmluZy5jaGFyQXQoaSkgPT0gXCIjXCIpIHtcbiAgICAgICAgICAgICAgc3RyICs9IGZha2VyLnJhbmRvbS5udW1iZXIoOSk7XG4gIFx0XHR9IGVsc2UgaWYgKHN0cmluZy5jaGFyQXQoaSkgPT0gXCI/XCIpIHtcbiAgXHRcdFx0c3RyICs9IGFscGhhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFscGhhLmxlbmd0aCldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0ciArPSBzdHJpbmcuY2hhckF0KGkpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgLy8gdGFrZXMgYW4gYXJyYXkgYW5kIHJldHVybnMgaXQgcmFuZG9taXplZFxuICBzZWxmLnNodWZmbGUgPSBmdW5jdGlvbiAobykge1xuICAgICAgbyA9IG8gfHwgW1wiYVwiLCBcImJcIiwgXCJjXCJdO1xuICAgICAgZm9yICh2YXIgaiwgeCwgaSA9IG8ubGVuZ3RoLTE7IGk7IGogPSBmYWtlci5yYW5kb20ubnVtYmVyKGkpLCB4ID0gb1stLWldLCBvW2ldID0gb1tqXSwgb1tqXSA9IHgpO1xuICAgICAgcmV0dXJuIG87XG4gIH07XG5cbiAgc2VsZi5tdXN0YWNoZSA9IGZ1bmN0aW9uIChzdHIsIGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgZm9yKHZhciBwIGluIGRhdGEpIHtcbiAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJ3t7JyArIHAgKyAnfX0nLCAnZycpXG4gICAgICBzdHIgPSBzdHIucmVwbGFjZShyZSwgZGF0YVtwXSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgc2VsZi5jcmVhdGVDYXJkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBcIm5hbWVcIjogZmFrZXIubmFtZS5maW5kTmFtZSgpLFxuICAgICAgICAgIFwidXNlcm5hbWVcIjogZmFrZXIuaW50ZXJuZXQudXNlck5hbWUoKSxcbiAgICAgICAgICBcImVtYWlsXCI6IGZha2VyLmludGVybmV0LmVtYWlsKCksXG4gICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgXCJzdHJlZXRBXCI6IGZha2VyLmFkZHJlc3Muc3RyZWV0TmFtZSgpLFxuICAgICAgICAgICAgICBcInN0cmVldEJcIjogZmFrZXIuYWRkcmVzcy5zdHJlZXRBZGRyZXNzKCksXG4gICAgICAgICAgICAgIFwic3RyZWV0Q1wiOiBmYWtlci5hZGRyZXNzLnN0cmVldEFkZHJlc3ModHJ1ZSksXG4gICAgICAgICAgICAgIFwic3RyZWV0RFwiOiBmYWtlci5hZGRyZXNzLnNlY29uZGFyeUFkZHJlc3MoKSxcbiAgICAgICAgICAgICAgXCJjaXR5XCI6IGZha2VyLmFkZHJlc3MuY2l0eSgpLFxuICAgICAgICAgICAgICBcInN0YXRlXCI6IGZha2VyLmFkZHJlc3Muc3RhdGUoKSxcbiAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IGZha2VyLmFkZHJlc3MuY291bnRyeSgpLFxuICAgICAgICAgICAgICBcInppcGNvZGVcIjogZmFrZXIuYWRkcmVzcy56aXBDb2RlKCksXG4gICAgICAgICAgICAgIFwiZ2VvXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibGF0XCI6IGZha2VyLmFkZHJlc3MubGF0aXR1ZGUoKSxcbiAgICAgICAgICAgICAgICAgIFwibG5nXCI6IGZha2VyLmFkZHJlc3MubG9uZ2l0dWRlKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwaG9uZVwiOiBmYWtlci5waG9uZS5waG9uZU51bWJlcigpLFxuICAgICAgICAgIFwid2Vic2l0ZVwiOiBmYWtlci5pbnRlcm5ldC5kb21haW5OYW1lKCksXG4gICAgICAgICAgXCJjb21wYW55XCI6IHtcbiAgICAgICAgICAgICAgXCJuYW1lXCI6IGZha2VyLmNvbXBhbnkuY29tcGFueU5hbWUoKSxcbiAgICAgICAgICAgICAgXCJjYXRjaFBocmFzZVwiOiBmYWtlci5jb21wYW55LmNhdGNoUGhyYXNlKCksXG4gICAgICAgICAgICAgIFwiYnNcIjogZmFrZXIuY29tcGFueS5icygpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvc3RzXCI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgXCJ3b3Jkc1wiOiBmYWtlci5sb3JlbS53b3JkcygpLFxuICAgICAgICAgICAgICAgICAgXCJzZW50ZW5jZVwiOiBmYWtlci5sb3JlbS5zZW50ZW5jZSgpLFxuICAgICAgICAgICAgICAgICAgXCJzZW50ZW5jZXNcIjogZmFrZXIubG9yZW0uc2VudGVuY2VzKCksXG4gICAgICAgICAgICAgICAgICBcInBhcmFncmFwaFwiOiBmYWtlci5sb3JlbS5wYXJhZ3JhcGgoKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBcIndvcmRzXCI6IGZha2VyLmxvcmVtLndvcmRzKCksXG4gICAgICAgICAgICAgICAgICBcInNlbnRlbmNlXCI6IGZha2VyLmxvcmVtLnNlbnRlbmNlKCksXG4gICAgICAgICAgICAgICAgICBcInNlbnRlbmNlc1wiOiBmYWtlci5sb3JlbS5zZW50ZW5jZXMoKSxcbiAgICAgICAgICAgICAgICAgIFwicGFyYWdyYXBoXCI6IGZha2VyLmxvcmVtLnBhcmFncmFwaCgpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFwid29yZHNcIjogZmFrZXIubG9yZW0ud29yZHMoKSxcbiAgICAgICAgICAgICAgICAgIFwic2VudGVuY2VcIjogZmFrZXIubG9yZW0uc2VudGVuY2UoKSxcbiAgICAgICAgICAgICAgICAgIFwic2VudGVuY2VzXCI6IGZha2VyLmxvcmVtLnNlbnRlbmNlcygpLFxuICAgICAgICAgICAgICAgICAgXCJwYXJhZ3JhcGhcIjogZmFrZXIubG9yZW0ucGFyYWdyYXBoKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJhY2NvdW50SGlzdG9yeVwiOiBbZmFrZXIuaGVscGVycy5jcmVhdGVUcmFuc2FjdGlvbigpLCBmYWtlci5oZWxwZXJzLmNyZWF0ZVRyYW5zYWN0aW9uKCksIGZha2VyLmhlbHBlcnMuY3JlYXRlVHJhbnNhY3Rpb24oKV1cbiAgICAgIH07XG4gIH07XG5cbiAgc2VsZi5jb250ZXh0dWFsQ2FyZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmFtZSA9IGZha2VyLm5hbWUuZmlyc3ROYW1lKCksXG4gICAgICAgIHVzZXJOYW1lID0gZmFrZXIuaW50ZXJuZXQudXNlck5hbWUobmFtZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgXCJuYW1lXCI6IG5hbWUsXG4gICAgICAgIFwidXNlcm5hbWVcIjogdXNlck5hbWUsXG4gICAgICAgIFwiYXZhdGFyXCI6IGZha2VyLmludGVybmV0LmF2YXRhcigpLFxuICAgICAgICBcImVtYWlsXCI6IGZha2VyLmludGVybmV0LmVtYWlsKHVzZXJOYW1lKSxcbiAgICAgICAgXCJkb2JcIjogZmFrZXIuZGF0ZS5wYXN0KDUwLCBuZXcgRGF0ZShcIlNhdCBTZXAgMjAgMTk5MiAyMTozNTowMiBHTVQrMDIwMCAoQ0VTVClcIikpLFxuICAgICAgICBcInBob25lXCI6IGZha2VyLnBob25lLnBob25lTnVtYmVyKCksXG4gICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICBcInN0cmVldFwiOiBmYWtlci5hZGRyZXNzLnN0cmVldE5hbWUodHJ1ZSksXG4gICAgICAgICAgICBcInN1aXRlXCI6IGZha2VyLmFkZHJlc3Muc2Vjb25kYXJ5QWRkcmVzcygpLFxuICAgICAgICAgICAgXCJjaXR5XCI6IGZha2VyLmFkZHJlc3MuY2l0eSgpLFxuICAgICAgICAgICAgXCJ6aXBjb2RlXCI6IGZha2VyLmFkZHJlc3MuemlwQ29kZSgpLFxuICAgICAgICAgICAgXCJnZW9cIjoge1xuICAgICAgICAgICAgICAgIFwibGF0XCI6IGZha2VyLmFkZHJlc3MubGF0aXR1ZGUoKSxcbiAgICAgICAgICAgICAgICBcImxuZ1wiOiBmYWtlci5hZGRyZXNzLmxvbmdpdHVkZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vic2l0ZVwiOiBmYWtlci5pbnRlcm5ldC5kb21haW5OYW1lKCksXG4gICAgICAgIFwiY29tcGFueVwiOiB7XG4gICAgICAgICAgICBcIm5hbWVcIjogZmFrZXIuY29tcGFueS5jb21wYW55TmFtZSgpLFxuICAgICAgICAgICAgXCJjYXRjaFBocmFzZVwiOiBmYWtlci5jb21wYW55LmNhdGNoUGhyYXNlKCksXG4gICAgICAgICAgICBcImJzXCI6IGZha2VyLmNvbXBhbnkuYnMoKVxuICAgICAgICB9XG4gICAgfTtcbiAgfTtcblxuXG4gIHNlbGYudXNlckNhcmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAgIFwibmFtZVwiOiBmYWtlci5uYW1lLmZpbmROYW1lKCksXG4gICAgICAgICAgXCJ1c2VybmFtZVwiOiBmYWtlci5pbnRlcm5ldC51c2VyTmFtZSgpLFxuICAgICAgICAgIFwiZW1haWxcIjogZmFrZXIuaW50ZXJuZXQuZW1haWwoKSxcbiAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICBcInN0cmVldFwiOiBmYWtlci5hZGRyZXNzLnN0cmVldE5hbWUodHJ1ZSksXG4gICAgICAgICAgICAgIFwic3VpdGVcIjogZmFrZXIuYWRkcmVzcy5zZWNvbmRhcnlBZGRyZXNzKCksXG4gICAgICAgICAgICAgIFwiY2l0eVwiOiBmYWtlci5hZGRyZXNzLmNpdHkoKSxcbiAgICAgICAgICAgICAgXCJ6aXBjb2RlXCI6IGZha2VyLmFkZHJlc3MuemlwQ29kZSgpLFxuICAgICAgICAgICAgICBcImdlb1wiOiB7XG4gICAgICAgICAgICAgICAgICBcImxhdFwiOiBmYWtlci5hZGRyZXNzLmxhdGl0dWRlKCksXG4gICAgICAgICAgICAgICAgICBcImxuZ1wiOiBmYWtlci5hZGRyZXNzLmxvbmdpdHVkZSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGhvbmVcIjogZmFrZXIucGhvbmUucGhvbmVOdW1iZXIoKSxcbiAgICAgICAgICBcIndlYnNpdGVcIjogZmFrZXIuaW50ZXJuZXQuZG9tYWluTmFtZSgpLFxuICAgICAgICAgIFwiY29tcGFueVwiOiB7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiBmYWtlci5jb21wYW55LmNvbXBhbnlOYW1lKCksXG4gICAgICAgICAgICAgIFwiY2F0Y2hQaHJhc2VcIjogZmFrZXIuY29tcGFueS5jYXRjaFBocmFzZSgpLFxuICAgICAgICAgICAgICBcImJzXCI6IGZha2VyLmNvbXBhbnkuYnMoKVxuICAgICAgICAgIH1cbiAgICAgIH07XG4gIH07XG5cbiAgc2VsZi5jcmVhdGVUcmFuc2FjdGlvbiA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwiYW1vdW50XCIgOiBmYWtlci5maW5hbmNlLmFtb3VudCgpLFxuICAgICAgXCJkYXRlXCIgOiBuZXcgRGF0ZSgyMDEyLCAxLCAyKSwgIC8vVE9ETzogYWRkIGEgcmFuZ2VkIGRhdGUgbWV0aG9kXG4gICAgICBcImJ1c2luZXNzXCI6IGZha2VyLmNvbXBhbnkuY29tcGFueU5hbWUoKSxcbiAgICAgIFwibmFtZVwiOiBbZmFrZXIuZmluYW5jZS5hY2NvdW50TmFtZSgpLCBmYWtlci5maW5hbmNlLm1hc2soKV0uam9pbignICcpLFxuICAgICAgXCJ0eXBlXCIgOiBzZWxmLnJhbmRvbWl6ZShmYWtlci5kZWZpbml0aW9ucy5maW5hbmNlLnRyYW5zYWN0aW9uX3R5cGUpLFxuICAgICAgXCJhY2NvdW50XCIgOiBmYWtlci5maW5hbmNlLmFjY291bnQoKVxuICAgIH07XG4gIH07XG4gIFxuICByZXR1cm4gc2VsZjtcbiAgXG59O1xuXG5cbi8qXG5TdHJpbmcucHJvdG90eXBlLmNhcGl0YWxpemUgPSBmdW5jdGlvbiAoKSB7IC8vdjEuMFxuICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL1xcdysvZywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIGEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBhLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xufTtcbiovXG5cbm1vZHVsZVsnZXhwb3J0cyddID0gSGVscGVyczsiLCJ2YXIgSW1hZ2UgPSBmdW5jdGlvbiAoZmFrZXIpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgc2VsZi5pbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2F0ZWdvcmllcyA9IFtcImFic3RyYWN0XCIsIFwiYW5pbWFsc1wiLCBcImJ1c2luZXNzXCIsIFwiY2F0c1wiLCBcImNpdHlcIiwgXCJmb29kXCIsIFwibmlnaHRsaWZlXCIsIFwiZmFzaGlvblwiLCBcInBlb3BsZVwiLCBcIm5hdHVyZVwiLCBcInNwb3J0c1wiLCBcInRlY2huaWNzXCIsIFwidHJhbnNwb3J0XCJdO1xuICAgIHJldHVybiBzZWxmW2Zha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoY2F0ZWdvcmllcyldKCk7XG4gIH07XG4gIHNlbGYuYXZhdGFyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5pbnRlcm5ldC5hdmF0YXIoKTtcbiAgfTtcbiAgc2VsZi5pbWFnZVVybCA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBjYXRlZ29yeSkge1xuICAgICAgdmFyIHdpZHRoID0gd2lkdGggfHwgNjQwO1xuICAgICAgdmFyIGhlaWdodCA9IGhlaWdodCB8fCA0ODA7XG5cbiAgICAgIHZhciB1cmwgPSdodHRwOi8vbG9yZW1waXhlbC5jb20vJyArIHdpZHRoICsgJy8nICsgaGVpZ2h0O1xuICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdXJsICs9ICcvJyArIGNhdGVnb3J5O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVybDtcbiAgfTtcbiAgc2VsZi5hYnN0cmFjdCA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdhYnN0cmFjdCcpO1xuICB9O1xuICBzZWxmLmFuaW1hbHMgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnYW5pbWFscycpO1xuICB9O1xuICBzZWxmLmJ1c2luZXNzID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ2J1c2luZXNzJyk7XG4gIH07XG4gIHNlbGYuY2F0cyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdjYXRzJyk7XG4gIH07XG4gIHNlbGYuY2l0eSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdjaXR5Jyk7XG4gIH07XG4gIHNlbGYuZm9vZCA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdmb29kJyk7XG4gIH07XG4gIHNlbGYubmlnaHRsaWZlID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ25pZ2h0bGlmZScpO1xuICB9O1xuICBzZWxmLmZhc2hpb24gPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnZmFzaGlvbicpO1xuICB9O1xuICBzZWxmLnBlb3BsZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdwZW9wbGUnKTtcbiAgfTtcbiAgc2VsZi5uYXR1cmUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnbmF0dXJlJyk7XG4gIH07XG4gIHNlbGYuc3BvcnRzID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ3Nwb3J0cycpO1xuICB9O1xuICBzZWxmLnRlY2huaWNzID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ3RlY2huaWNzJyk7XG4gIH07XG4gIHNlbGYudHJhbnNwb3J0ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ3RyYW5zcG9ydCcpO1xuICB9ICBcbn1cblxubW9kdWxlW1wiZXhwb3J0c1wiXSA9IEltYWdlOyIsIi8qXG5cbiAgIHRoaXMgaW5kZXguanMgZmlsZSBpcyB1c2VkIGZvciBpbmNsdWRpbmcgdGhlIGZha2VyIGxpYnJhcnkgYXMgYSBDb21tb25KUyBtb2R1bGUsIGluc3RlYWQgb2YgYSBidW5kbGVcblxuICAgeW91IGNhbiBpbmNsdWRlIHRoZSBmYWtlciBsaWJyYXJ5IGludG8geW91ciBleGlzdGluZyBub2RlLmpzIGFwcGxpY2F0aW9uIGJ5IHJlcXVpcmluZyB0aGUgZW50aXJlIC9mYWtlciBkaXJlY3RvcnlcblxuICAgIHZhciBmYWtlciA9IHJlcXVpcmUoLi9mYWtlcik7XG4gICAgdmFyIHJhbmRvbU5hbWUgPSBmYWtlci5uYW1lLmZpbmROYW1lKCk7XG5cbiAgIHlvdSBjYW4gYWxzbyBzaW1wbHkgaW5jbHVkZSB0aGUgXCJmYWtlci5qc1wiIGZpbGUgd2hpY2ggaXMgdGhlIGF1dG8tZ2VuZXJhdGVkIGJ1bmRsZWQgdmVyc2lvbiBvZiB0aGUgZmFrZXIgbGlicmFyeVxuXG4gICAgdmFyIGZha2VyID0gcmVxdWlyZSguL2N1c3RvbUFwcFBhdGgvZmFrZXIpO1xuICAgIHZhciByYW5kb21OYW1lID0gZmFrZXIubmFtZS5maW5kTmFtZSgpO1xuXG5cbiAgaWYgeW91IHBsYW4gb24gbW9kaWZ5aW5nIHRoZSBmYWtlciBsaWJyYXJ5IHlvdSBzaG91bGQgYmUgcGVyZm9ybWluZyB5b3VyIGNoYW5nZXMgaW4gdGhlIC9saWIvIGRpcmVjdG9yeVxuXG4qL1xuXG5mdW5jdGlvbiBGYWtlciAob3B0cykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAvLyBhc3NpZ24gb3B0aW9uc1xuICB2YXIgbG9jYWxlcyA9IHNlbGYubG9jYWxlcyB8fCBvcHRzLmxvY2FsZXMgfHwge307XG4gIHZhciBsb2NhbGUgPSBzZWxmLmxvY2FsZSB8fCBvcHRzLmxvY2FsZSB8fCBcImVuXCI7XG4gIHZhciBsb2NhbGVGYWxsYmFjayA9IHNlbGYubG9jYWxlRmFsbGJhY2sgfHwgb3B0cy5sb2NhbGVGYWxsYmFjayB8fCBcImVuXCI7XG5cbiAgc2VsZi5sb2NhbGVzID0gbG9jYWxlcztcbiAgc2VsZi5sb2NhbGUgPSBsb2NhbGU7XG4gIHNlbGYubG9jYWxlRmFsbGJhY2sgPSBsb2NhbGVGYWxsYmFjaztcblxuICBzZWxmLmRlZmluaXRpb25zID0ge307XG5cbiAgdmFyIEZha2UgPSByZXF1aXJlKCcuL2Zha2UnKTtcbiAgc2VsZi5mYWtlID0gbmV3IEZha2Uoc2VsZikuZmFrZTtcblxuICB2YXIgUmFuZG9tID0gcmVxdWlyZSgnLi9yYW5kb20nKTtcbiAgc2VsZi5yYW5kb20gPSBuZXcgUmFuZG9tKHNlbGYpO1xuICAvLyBzZWxmLnJhbmRvbSA9IHJlcXVpcmUoJy4vcmFuZG9tJyk7XG5cbiAgdmFyIEhlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcbiAgc2VsZi5oZWxwZXJzID0gbmV3IEhlbHBlcnMoc2VsZik7XG5cbiAgdmFyIE5hbWUgPSByZXF1aXJlKCcuL25hbWUnKTtcbiAgc2VsZi5uYW1lID0gbmV3IE5hbWUoc2VsZik7XG4gIC8vIHNlbGYubmFtZSA9IHJlcXVpcmUoJy4vbmFtZScpO1xuXG4gIHZhciBBZGRyZXNzID0gcmVxdWlyZSgnLi9hZGRyZXNzJyk7XG4gIHNlbGYuYWRkcmVzcyA9IG5ldyBBZGRyZXNzKHNlbGYpO1xuXG4gIHZhciBDb21wYW55ID0gcmVxdWlyZSgnLi9jb21wYW55Jyk7XG4gIHNlbGYuY29tcGFueSA9IG5ldyBDb21wYW55KHNlbGYpO1xuXG4gIHZhciBGaW5hbmNlID0gcmVxdWlyZSgnLi9maW5hbmNlJyk7XG4gIHNlbGYuZmluYW5jZSA9IG5ldyBGaW5hbmNlKHNlbGYpO1xuXG4gIHZhciBJbWFnZSA9IHJlcXVpcmUoJy4vaW1hZ2UnKTtcbiAgc2VsZi5pbWFnZSA9IG5ldyBJbWFnZShzZWxmKTtcblxuICB2YXIgTG9yZW0gPSByZXF1aXJlKCcuL2xvcmVtJyk7XG4gIHNlbGYubG9yZW0gPSBuZXcgTG9yZW0oc2VsZik7XG5cbiAgdmFyIEhhY2tlciA9IHJlcXVpcmUoJy4vaGFja2VyJyk7XG4gIHNlbGYuaGFja2VyID0gbmV3IEhhY2tlcihzZWxmKTtcblxuICB2YXIgSW50ZXJuZXQgPSByZXF1aXJlKCcuL2ludGVybmV0Jyk7XG4gIHNlbGYuaW50ZXJuZXQgPSBuZXcgSW50ZXJuZXQoc2VsZik7XG5cbiAgdmFyIFBob25lID0gcmVxdWlyZSgnLi9waG9uZV9udW1iZXInKTtcbiAgc2VsZi5waG9uZSA9IG5ldyBQaG9uZShzZWxmKTtcblxuICB2YXIgX0RhdGUgPSByZXF1aXJlKCcuL2RhdGUnKTtcbiAgc2VsZi5kYXRlID0gbmV3IF9EYXRlKHNlbGYpO1xuXG4gIHZhciBDb21tZXJjZSA9IHJlcXVpcmUoJy4vY29tbWVyY2UnKTtcbiAgc2VsZi5jb21tZXJjZSA9IG5ldyBDb21tZXJjZShzZWxmKTtcblxuICAvLyBUT0RPOiBmaXggc2VsZi5jb21tZXJjZSA9IHJlcXVpcmUoJy4vY29tbWVyY2UnKTtcblxuICB2YXIgX2RlZmluaXRpb25zID0ge1xuICAgIFwibmFtZVwiOiBbXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwicHJlZml4XCIsIFwic3VmZml4XCIsIFwidGl0bGVcIiwgXCJtYWxlX2ZpcnN0X25hbWVcIiwgXCJmZW1hbGVfZmlyc3RfbmFtZVwiLCBcIm1hbGVfbWlkZGxlX25hbWVcIiwgXCJmZW1hbGVfbWlkZGxlX25hbWVcIiwgXCJtYWxlX2xhc3RfbmFtZVwiLCBcImZlbWFsZV9sYXN0X25hbWVcIl0sXG4gICAgXCJhZGRyZXNzXCI6IFtcImNpdHlfcHJlZml4XCIsIFwiY2l0eV9zdWZmaXhcIiwgXCJzdHJlZXRfc3VmZml4XCIsIFwiY291bnR5XCIsIFwiY291bnRyeVwiLCBcImNvdW50cnlfY29kZVwiLCBcInN0YXRlXCIsIFwic3RhdGVfYWJiclwiLCBcInN0cmVldF9wcmVmaXhcIiwgXCJwb3N0Y29kZVwiXSxcbiAgICBcImNvbXBhbnlcIjogW1wiYWRqZWN0aXZlXCIsIFwibm91blwiLCBcImRlc2NyaXB0b3JcIiwgXCJic19hZGplY3RpdmVcIiwgXCJic19ub3VuXCIsIFwiYnNfdmVyYlwiLCBcInN1ZmZpeFwiXSxcbiAgICBcImxvcmVtXCI6IFtcIndvcmRzXCJdLFxuICAgIFwiaGFja2VyXCI6IFtcImFiYnJldmlhdGlvblwiLCBcImFkamVjdGl2ZVwiLCBcIm5vdW5cIiwgXCJ2ZXJiXCIsIFwiaW5ndmVyYlwiXSxcbiAgICBcInBob25lX251bWJlclwiOiBbXCJmb3JtYXRzXCJdLFxuICAgIFwiZmluYW5jZVwiOiBbXCJhY2NvdW50X3R5cGVcIiwgXCJ0cmFuc2FjdGlvbl90eXBlXCIsIFwiY3VycmVuY3lcIl0sXG4gICAgXCJpbnRlcm5ldFwiOiBbXCJhdmF0YXJfdXJpXCIsIFwiZG9tYWluX3N1ZmZpeFwiLCBcImZyZWVfZW1haWxcIiwgXCJwYXNzd29yZFwiXSxcbiAgICBcImNvbW1lcmNlXCI6IFtcImNvbG9yXCIsIFwiZGVwYXJ0bWVudFwiLCBcInByb2R1Y3RfbmFtZVwiLCBcInByaWNlXCIsIFwiY2F0ZWdvcmllc1wiXSxcbiAgICBcImRhdGVcIjogW1wibW9udGhcIiwgXCJ3ZWVrZGF5XCJdLFxuICAgIFwidGl0bGVcIjogXCJcIixcbiAgICBcInNlcGFyYXRvclwiOiBcIlwiXG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgR2V0dGVyIGZvciBhbGwgZGVmaW5pdGlvbnMuZm9vLmJhciBwcm9wZXRyaWVzXG4gIE9iamVjdC5rZXlzKF9kZWZpbml0aW9ucykuZm9yRWFjaChmdW5jdGlvbihkKXtcbiAgICBpZiAodHlwZW9mIHNlbGYuZGVmaW5pdGlvbnNbZF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHNlbGYuZGVmaW5pdGlvbnNbZF0gPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9kZWZpbml0aW9uc1tkXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzZWxmLmRlZmluaXRpb25zW2RdID0gX2RlZmluaXRpb25zW2RdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIF9kZWZpbml0aW9uc1tkXS5mb3JFYWNoKGZ1bmN0aW9uKHApe1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuZGVmaW5pdGlvbnNbZF0sIHAsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzZWxmLmxvY2FsZXNbc2VsZi5sb2NhbGVdW2RdID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzZWxmLmxvY2FsZXNbc2VsZi5sb2NhbGVdW2RdW3BdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvLyBjZXJ0YWluIGxvY2FsaXphdGlvbiBzZXRzIGNvbnRhaW4gbGVzcyBkYXRhIHRoZW4gb3RoZXJzLlxuICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgYSBtaXNzaW5nIGRlZmludGlvbiwgdXNlIHRoZSBkZWZhdWx0IGxvY2FsZUZhbGxiYWNrIHRvIHN1YnN0aXR1dGUgdGhlIG1pc3Npbmcgc2V0IGRhdGFcbiAgICAgICAgICAgIC8vIHRocm93IG5ldyBFcnJvcigndW5rbm93biBwcm9wZXJ0eSAnICsgZCArIHApXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5sb2NhbGVzW2xvY2FsZUZhbGxiYWNrXVtkXVtwXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGxvY2FsaXplZCBkYXRhXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5sb2NhbGVzW3NlbGYubG9jYWxlXVtkXVtwXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxufTtcblxuRmFrZXIucHJvdG90eXBlLnNlZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgUmFuZG9tID0gcmVxdWlyZSgnLi9yYW5kb20nKTtcbiAgdGhpcy5zZWVkVmFsdWUgPSB2YWx1ZTtcbiAgdGhpcy5yYW5kb20gPSBuZXcgUmFuZG9tKHRoaXMsIHRoaXMuc2VlZFZhbHVlKTtcbn1cbm1vZHVsZVsnZXhwb3J0cyddID0gRmFrZXI7XG4iLCJ2YXIgcGFzc3dvcmRfZ2VuZXJhdG9yID0gcmVxdWlyZSgnLi4vdmVuZG9yL3Bhc3N3b3JkLWdlbmVyYXRvci5qcycpLFxuICAgIHJhbmRvbV91YSA9IHJlcXVpcmUoJy4uL3ZlbmRvci91c2VyLWFnZW50Jyk7XG5cbnZhciBJbnRlcm5ldCA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYuYXZhdGFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaW50ZXJuZXQuYXZhdGFyX3VyaSk7XG4gIH07XG5cbiAgc2VsZi5lbWFpbCA9IGZ1bmN0aW9uIChmaXJzdE5hbWUsIGxhc3ROYW1lLCBwcm92aWRlcikge1xuICAgICAgcHJvdmlkZXIgPSBwcm92aWRlciB8fCBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmludGVybmV0LmZyZWVfZW1haWwpO1xuICAgICAgcmV0dXJuICBmYWtlci5oZWxwZXJzLnNsdWdpZnkoZmFrZXIuaW50ZXJuZXQudXNlck5hbWUoZmlyc3ROYW1lLCBsYXN0TmFtZSkpICsgXCJAXCIgKyBwcm92aWRlcjtcbiAgfTtcblxuICBzZWxmLnVzZXJOYW1lID0gZnVuY3Rpb24gKGZpcnN0TmFtZSwgbGFzdE5hbWUpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBmaXJzdE5hbWUgPSBmaXJzdE5hbWUgfHwgZmFrZXIubmFtZS5maXJzdE5hbWUoKTtcbiAgICAgIGxhc3ROYW1lID0gbGFzdE5hbWUgfHwgZmFrZXIubmFtZS5sYXN0TmFtZSgpO1xuICAgICAgc3dpdGNoIChmYWtlci5yYW5kb20ubnVtYmVyKDIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgICAgcmVzdWx0ID0gZmlyc3ROYW1lICsgZmFrZXIucmFuZG9tLm51bWJlcig5OSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgICAgcmVzdWx0ID0gZmlyc3ROYW1lICsgZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChbXCIuXCIsIFwiX1wiXSkgKyBsYXN0TmFtZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXN1bHQgPSBmaXJzdE5hbWUgKyBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KFtcIi5cIiwgXCJfXCJdKSArIGxhc3ROYW1lICsgZmFrZXIucmFuZG9tLm51bWJlcig5OSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSByZXN1bHQudG9TdHJpbmcoKS5yZXBsYWNlKC8nL2csIFwiXCIpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLyAvZywgXCJcIik7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHNlbGYucHJvdG9jb2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvdG9jb2xzID0gWydodHRwJywnaHR0cHMnXTtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KHByb3RvY29scyk7XG4gIH07XG5cbiAgc2VsZi51cmwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIuaW50ZXJuZXQucHJvdG9jb2woKSArICc6Ly8nICsgZmFrZXIuaW50ZXJuZXQuZG9tYWluTmFtZSgpO1xuICB9O1xuXG4gIHNlbGYuZG9tYWluTmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5pbnRlcm5ldC5kb21haW5Xb3JkKCkgKyBcIi5cIiArIGZha2VyLmludGVybmV0LmRvbWFpblN1ZmZpeCgpO1xuICB9O1xuXG4gIHNlbGYuZG9tYWluU3VmZml4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaW50ZXJuZXQuZG9tYWluX3N1ZmZpeCk7XG4gIH07XG5cbiAgc2VsZi5kb21haW5Xb3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLm5hbWUuZmlyc3ROYW1lKCkucmVwbGFjZSgvKFtcXFxcfiMmKnt9Lzo8Pj98XFxcIl0pL2lnLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfTtcblxuICBzZWxmLmlwID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJhbmROdW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIChmYWtlci5yYW5kb20ubnVtYmVyKDI1NSkpLnRvRml4ZWQoMCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgIHJlc3VsdFtpXSA9IHJhbmROdW0oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKFwiLlwiKTtcbiAgfTtcblxuICBzZWxmLnVzZXJBZ2VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmFuZG9tX3VhLmdlbmVyYXRlKCk7XG4gIH07XG5cbiAgc2VsZi5jb2xvciA9IGZ1bmN0aW9uIChiYXNlUmVkMjU1LCBiYXNlR3JlZW4yNTUsIGJhc2VCbHVlMjU1KSB7XG4gICAgICBiYXNlUmVkMjU1ID0gYmFzZVJlZDI1NSB8fCAwO1xuICAgICAgYmFzZUdyZWVuMjU1ID0gYmFzZUdyZWVuMjU1IHx8IDA7XG4gICAgICBiYXNlQmx1ZTI1NSA9IGJhc2VCbHVlMjU1IHx8IDA7XG4gICAgICAvLyBiYXNlZCBvbiBhd2Vzb21lIHJlc3BvbnNlIDogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MzA0NC9hbGdvcml0aG0tdG8tcmFuZG9tbHktZ2VuZXJhdGUtYW4tYWVzdGhldGljYWxseS1wbGVhc2luZy1jb2xvci1wYWxldHRlXG4gICAgICB2YXIgcmVkID0gTWF0aC5mbG9vcigoZmFrZXIucmFuZG9tLm51bWJlcigyNTYpICsgYmFzZVJlZDI1NSkgLyAyKTtcbiAgICAgIHZhciBncmVlbiA9IE1hdGguZmxvb3IoKGZha2VyLnJhbmRvbS5udW1iZXIoMjU2KSArIGJhc2VHcmVlbjI1NSkgLyAyKTtcbiAgICAgIHZhciBibHVlID0gTWF0aC5mbG9vcigoZmFrZXIucmFuZG9tLm51bWJlcigyNTYpICsgYmFzZUJsdWUyNTUpIC8gMik7XG4gICAgICB2YXIgcmVkU3RyID0gcmVkLnRvU3RyaW5nKDE2KTtcbiAgICAgIHZhciBncmVlblN0ciA9IGdyZWVuLnRvU3RyaW5nKDE2KTtcbiAgICAgIHZhciBibHVlU3RyID0gYmx1ZS50b1N0cmluZygxNik7XG4gICAgICByZXR1cm4gJyMnICtcbiAgICAgICAgKHJlZFN0ci5sZW5ndGggPT09IDEgPyAnMCcgOiAnJykgKyByZWRTdHIgK1xuICAgICAgICAoZ3JlZW5TdHIubGVuZ3RoID09PSAxID8gJzAnIDogJycpICsgZ3JlZW5TdHIgK1xuICAgICAgICAoYmx1ZVN0ci5sZW5ndGggPT09IDEgPyAnMCc6ICcnKSArIGJsdWVTdHI7XG5cbiAgfTtcblxuICBzZWxmLm1hYyA9IGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgaSwgbWFjID0gXCJcIjtcbiAgICAgIGZvciAoaT0wOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgIG1hYys9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkqMTYpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICBpZiAoaSUyPT0xICYmIGkgIT0gMTEpIHtcbiAgICAgICAgICAgICAgbWFjKz1cIjpcIjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFjO1xuICB9O1xuXG4gIHNlbGYucGFzc3dvcmQgPSBmdW5jdGlvbiAobGVuLCBtZW1vcmFibGUsIHBhdHRlcm4sIHByZWZpeCkge1xuICAgIGxlbiA9IGxlbiB8fCAxNTtcbiAgICBpZiAodHlwZW9mIG1lbW9yYWJsZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbWVtb3JhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBwYXNzd29yZF9nZW5lcmF0b3IobGVuLCBtZW1vcmFibGUsIHBhdHRlcm4sIHByZWZpeCk7XG4gIH1cbiAgXG59O1xuXG5cbm1vZHVsZVtcImV4cG9ydHNcIl0gPSBJbnRlcm5ldDtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiIyMjIyNcIixcbiAgXCIjIyMjXCIsXG4gIFwiIyMjXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiN7Y2l0eV9wcmVmaXh9ICN7TmFtZS5maXJzdF9uYW1lfSN7Y2l0eV9zdWZmaXh9XCIsXG4gIFwiI3tjaXR5X3ByZWZpeH0gI3tOYW1lLmZpcnN0X25hbWV9XCIsXG4gIFwiI3tOYW1lLmZpcnN0X25hbWV9I3tjaXR5X3N1ZmZpeH1cIixcbiAgXCIje05hbWUubGFzdF9uYW1lfSN7Y2l0eV9zdWZmaXh9XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIk5vcnRoXCIsXG4gIFwiRWFzdFwiLFxuICBcIldlc3RcIixcbiAgXCJTb3V0aFwiLFxuICBcIk5ld1wiLFxuICBcIkxha2VcIixcbiAgXCJQb3J0XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcInRvd25cIixcbiAgXCJ0b25cIixcbiAgXCJsYW5kXCIsXG4gIFwidmlsbGVcIixcbiAgXCJiZXJnXCIsXG4gIFwiYnVyZ2hcIixcbiAgXCJib3JvdWdoXCIsXG4gIFwiYnVyeVwiLFxuICBcInZpZXdcIixcbiAgXCJwb3J0XCIsXG4gIFwibW91dGhcIixcbiAgXCJzdGFkXCIsXG4gIFwiZnVydFwiLFxuICBcImNoZXN0ZXJcIixcbiAgXCJtb3V0aFwiLFxuICBcImZvcnRcIixcbiAgXCJoYXZlblwiLFxuICBcInNpZGVcIixcbiAgXCJzaGlyZVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBZmdoYW5pc3RhblwiLFxuICBcIkFsYmFuaWFcIixcbiAgXCJBbGdlcmlhXCIsXG4gIFwiQW1lcmljYW4gU2Ftb2FcIixcbiAgXCJBbmRvcnJhXCIsXG4gIFwiQW5nb2xhXCIsXG4gIFwiQW5ndWlsbGFcIixcbiAgXCJBbnRhcmN0aWNhICh0aGUgdGVycml0b3J5IFNvdXRoIG9mIDYwIGRlZyBTKVwiLFxuICBcIkFudGlndWEgYW5kIEJhcmJ1ZGFcIixcbiAgXCJBcmdlbnRpbmFcIixcbiAgXCJBcm1lbmlhXCIsXG4gIFwiQXJ1YmFcIixcbiAgXCJBdXN0cmFsaWFcIixcbiAgXCJBdXN0cmlhXCIsXG4gIFwiQXplcmJhaWphblwiLFxuICBcIkJhaGFtYXNcIixcbiAgXCJCYWhyYWluXCIsXG4gIFwiQmFuZ2xhZGVzaFwiLFxuICBcIkJhcmJhZG9zXCIsXG4gIFwiQmVsYXJ1c1wiLFxuICBcIkJlbGdpdW1cIixcbiAgXCJCZWxpemVcIixcbiAgXCJCZW5pblwiLFxuICBcIkJlcm11ZGFcIixcbiAgXCJCaHV0YW5cIixcbiAgXCJCb2xpdmlhXCIsXG4gIFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVwiLFxuICBcIkJvdHN3YW5hXCIsXG4gIFwiQm91dmV0IElzbGFuZCAoQm91dmV0b3lhKVwiLFxuICBcIkJyYXppbFwiLFxuICBcIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeSAoQ2hhZ29zIEFyY2hpcGVsYWdvKVwiLFxuICBcIkJydW5laSBEYXJ1c3NhbGFtXCIsXG4gIFwiQnVsZ2FyaWFcIixcbiAgXCJCdXJraW5hIEZhc29cIixcbiAgXCJCdXJ1bmRpXCIsXG4gIFwiQ2FtYm9kaWFcIixcbiAgXCJDYW1lcm9vblwiLFxuICBcIkNhbmFkYVwiLFxuICBcIkNhcGUgVmVyZGVcIixcbiAgXCJDYXltYW4gSXNsYW5kc1wiLFxuICBcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1wiLFxuICBcIkNoYWRcIixcbiAgXCJDaGlsZVwiLFxuICBcIkNoaW5hXCIsXG4gIFwiQ2hyaXN0bWFzIElzbGFuZFwiLFxuICBcIkNvY29zIChLZWVsaW5nKSBJc2xhbmRzXCIsXG4gIFwiQ29sb21iaWFcIixcbiAgXCJDb21vcm9zXCIsXG4gIFwiQ29uZ29cIixcbiAgXCJDb25nb1wiLFxuICBcIkNvb2sgSXNsYW5kc1wiLFxuICBcIkNvc3RhIFJpY2FcIixcbiAgXCJDb3RlIGQnSXZvaXJlXCIsXG4gIFwiQ3JvYXRpYVwiLFxuICBcIkN1YmFcIixcbiAgXCJDeXBydXNcIixcbiAgXCJDemVjaCBSZXB1YmxpY1wiLFxuICBcIkRlbm1hcmtcIixcbiAgXCJEamlib3V0aVwiLFxuICBcIkRvbWluaWNhXCIsXG4gIFwiRG9taW5pY2FuIFJlcHVibGljXCIsXG4gIFwiRWN1YWRvclwiLFxuICBcIkVneXB0XCIsXG4gIFwiRWwgU2FsdmFkb3JcIixcbiAgXCJFcXVhdG9yaWFsIEd1aW5lYVwiLFxuICBcIkVyaXRyZWFcIixcbiAgXCJFc3RvbmlhXCIsXG4gIFwiRXRoaW9waWFcIixcbiAgXCJGYXJvZSBJc2xhbmRzXCIsXG4gIFwiRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpXCIsXG4gIFwiRmlqaVwiLFxuICBcIkZpbmxhbmRcIixcbiAgXCJGcmFuY2VcIixcbiAgXCJGcmVuY2ggR3VpYW5hXCIsXG4gIFwiRnJlbmNoIFBvbHluZXNpYVwiLFxuICBcIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllc1wiLFxuICBcIkdhYm9uXCIsXG4gIFwiR2FtYmlhXCIsXG4gIFwiR2VvcmdpYVwiLFxuICBcIkdlcm1hbnlcIixcbiAgXCJHaGFuYVwiLFxuICBcIkdpYnJhbHRhclwiLFxuICBcIkdyZWVjZVwiLFxuICBcIkdyZWVubGFuZFwiLFxuICBcIkdyZW5hZGFcIixcbiAgXCJHdWFkZWxvdXBlXCIsXG4gIFwiR3VhbVwiLFxuICBcIkd1YXRlbWFsYVwiLFxuICBcIkd1ZXJuc2V5XCIsXG4gIFwiR3VpbmVhXCIsXG4gIFwiR3VpbmVhLUJpc3NhdVwiLFxuICBcIkd1eWFuYVwiLFxuICBcIkhhaXRpXCIsXG4gIFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXCIsXG4gIFwiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSlcIixcbiAgXCJIb25kdXJhc1wiLFxuICBcIkhvbmcgS29uZ1wiLFxuICBcIkh1bmdhcnlcIixcbiAgXCJJY2VsYW5kXCIsXG4gIFwiSW5kaWFcIixcbiAgXCJJbmRvbmVzaWFcIixcbiAgXCJJcmFuXCIsXG4gIFwiSXJhcVwiLFxuICBcIklyZWxhbmRcIixcbiAgXCJJc2xlIG9mIE1hblwiLFxuICBcIklzcmFlbFwiLFxuICBcIkl0YWx5XCIsXG4gIFwiSmFtYWljYVwiLFxuICBcIkphcGFuXCIsXG4gIFwiSmVyc2V5XCIsXG4gIFwiSm9yZGFuXCIsXG4gIFwiS2F6YWtoc3RhblwiLFxuICBcIktlbnlhXCIsXG4gIFwiS2lyaWJhdGlcIixcbiAgXCJEZW1vY3JhdGljIFBlb3BsZSdzIFJlcHVibGljIG9mIEtvcmVhXCIsXG4gIFwiUmVwdWJsaWMgb2YgS29yZWFcIixcbiAgXCJLdXdhaXRcIixcbiAgXCJLeXJneXogUmVwdWJsaWNcIixcbiAgXCJMYW8gUGVvcGxlJ3MgRGVtb2NyYXRpYyBSZXB1YmxpY1wiLFxuICBcIkxhdHZpYVwiLFxuICBcIkxlYmFub25cIixcbiAgXCJMZXNvdGhvXCIsXG4gIFwiTGliZXJpYVwiLFxuICBcIkxpYnlhbiBBcmFiIEphbWFoaXJpeWFcIixcbiAgXCJMaWVjaHRlbnN0ZWluXCIsXG4gIFwiTGl0aHVhbmlhXCIsXG4gIFwiTHV4ZW1ib3VyZ1wiLFxuICBcIk1hY2FvXCIsXG4gIFwiTWFjZWRvbmlhXCIsXG4gIFwiTWFkYWdhc2NhclwiLFxuICBcIk1hbGF3aVwiLFxuICBcIk1hbGF5c2lhXCIsXG4gIFwiTWFsZGl2ZXNcIixcbiAgXCJNYWxpXCIsXG4gIFwiTWFsdGFcIixcbiAgXCJNYXJzaGFsbCBJc2xhbmRzXCIsXG4gIFwiTWFydGluaXF1ZVwiLFxuICBcIk1hdXJpdGFuaWFcIixcbiAgXCJNYXVyaXRpdXNcIixcbiAgXCJNYXlvdHRlXCIsXG4gIFwiTWV4aWNvXCIsXG4gIFwiTWljcm9uZXNpYVwiLFxuICBcIk1vbGRvdmFcIixcbiAgXCJNb25hY29cIixcbiAgXCJNb25nb2xpYVwiLFxuICBcIk1vbnRlbmVncm9cIixcbiAgXCJNb250c2VycmF0XCIsXG4gIFwiTW9yb2Njb1wiLFxuICBcIk1vemFtYmlxdWVcIixcbiAgXCJNeWFubWFyXCIsXG4gIFwiTmFtaWJpYVwiLFxuICBcIk5hdXJ1XCIsXG4gIFwiTmVwYWxcIixcbiAgXCJOZXRoZXJsYW5kcyBBbnRpbGxlc1wiLFxuICBcIk5ldGhlcmxhbmRzXCIsXG4gIFwiTmV3IENhbGVkb25pYVwiLFxuICBcIk5ldyBaZWFsYW5kXCIsXG4gIFwiTmljYXJhZ3VhXCIsXG4gIFwiTmlnZXJcIixcbiAgXCJOaWdlcmlhXCIsXG4gIFwiTml1ZVwiLFxuICBcIk5vcmZvbGsgSXNsYW5kXCIsXG4gIFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXCIsXG4gIFwiTm9yd2F5XCIsXG4gIFwiT21hblwiLFxuICBcIlBha2lzdGFuXCIsXG4gIFwiUGFsYXVcIixcbiAgXCJQYWxlc3RpbmlhbiBUZXJyaXRvcnlcIixcbiAgXCJQYW5hbWFcIixcbiAgXCJQYXB1YSBOZXcgR3VpbmVhXCIsXG4gIFwiUGFyYWd1YXlcIixcbiAgXCJQZXJ1XCIsXG4gIFwiUGhpbGlwcGluZXNcIixcbiAgXCJQaXRjYWlybiBJc2xhbmRzXCIsXG4gIFwiUG9sYW5kXCIsXG4gIFwiUG9ydHVnYWxcIixcbiAgXCJQdWVydG8gUmljb1wiLFxuICBcIlFhdGFyXCIsXG4gIFwiUmV1bmlvblwiLFxuICBcIlJvbWFuaWFcIixcbiAgXCJSdXNzaWFuIEZlZGVyYXRpb25cIixcbiAgXCJSd2FuZGFcIixcbiAgXCJTYWludCBCYXJ0aGVsZW15XCIsXG4gIFwiU2FpbnQgSGVsZW5hXCIsXG4gIFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXCIsXG4gIFwiU2FpbnQgTHVjaWFcIixcbiAgXCJTYWludCBNYXJ0aW5cIixcbiAgXCJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uXCIsXG4gIFwiU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXNcIixcbiAgXCJTYW1vYVwiLFxuICBcIlNhbiBNYXJpbm9cIixcbiAgXCJTYW8gVG9tZSBhbmQgUHJpbmNpcGVcIixcbiAgXCJTYXVkaSBBcmFiaWFcIixcbiAgXCJTZW5lZ2FsXCIsXG4gIFwiU2VyYmlhXCIsXG4gIFwiU2V5Y2hlbGxlc1wiLFxuICBcIlNpZXJyYSBMZW9uZVwiLFxuICBcIlNpbmdhcG9yZVwiLFxuICBcIlNsb3Zha2lhIChTbG92YWsgUmVwdWJsaWMpXCIsXG4gIFwiU2xvdmVuaWFcIixcbiAgXCJTb2xvbW9uIElzbGFuZHNcIixcbiAgXCJTb21hbGlhXCIsXG4gIFwiU291dGggQWZyaWNhXCIsXG4gIFwiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcIixcbiAgXCJTcGFpblwiLFxuICBcIlNyaSBMYW5rYVwiLFxuICBcIlN1ZGFuXCIsXG4gIFwiU3VyaW5hbWVcIixcbiAgXCJTdmFsYmFyZCAmIEphbiBNYXllbiBJc2xhbmRzXCIsXG4gIFwiU3dhemlsYW5kXCIsXG4gIFwiU3dlZGVuXCIsXG4gIFwiU3dpdHplcmxhbmRcIixcbiAgXCJTeXJpYW4gQXJhYiBSZXB1YmxpY1wiLFxuICBcIlRhaXdhblwiLFxuICBcIlRhamlraXN0YW5cIixcbiAgXCJUYW56YW5pYVwiLFxuICBcIlRoYWlsYW5kXCIsXG4gIFwiVGltb3ItTGVzdGVcIixcbiAgXCJUb2dvXCIsXG4gIFwiVG9rZWxhdVwiLFxuICBcIlRvbmdhXCIsXG4gIFwiVHJpbmlkYWQgYW5kIFRvYmFnb1wiLFxuICBcIlR1bmlzaWFcIixcbiAgXCJUdXJrZXlcIixcbiAgXCJUdXJrbWVuaXN0YW5cIixcbiAgXCJUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHNcIixcbiAgXCJUdXZhbHVcIixcbiAgXCJVZ2FuZGFcIixcbiAgXCJVa3JhaW5lXCIsXG4gIFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcIixcbiAgXCJVbml0ZWQgS2luZ2RvbVwiLFxuICBcIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYVwiLFxuICBcIlVuaXRlZCBTdGF0ZXMgTWlub3IgT3V0bHlpbmcgSXNsYW5kc1wiLFxuICBcIlVydWd1YXlcIixcbiAgXCJVemJla2lzdGFuXCIsXG4gIFwiVmFudWF0dVwiLFxuICBcIlZlbmV6dWVsYVwiLFxuICBcIlZpZXRuYW1cIixcbiAgXCJWaXJnaW4gSXNsYW5kcywgQnJpdGlzaFwiLFxuICBcIlZpcmdpbiBJc2xhbmRzLCBVLlMuXCIsXG4gIFwiV2FsbGlzIGFuZCBGdXR1bmFcIixcbiAgXCJXZXN0ZXJuIFNhaGFyYVwiLFxuICBcIlllbWVuXCIsXG4gIFwiWmFtYmlhXCIsXG4gIFwiWmltYmFid2VcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQURcIixcbiAgXCJBRVwiLFxuICBcIkFGXCIsXG4gIFwiQUdcIixcbiAgXCJBSVwiLFxuICBcIkFMXCIsXG4gIFwiQU1cIixcbiAgXCJBT1wiLFxuICBcIkFRXCIsXG4gIFwiQVJcIixcbiAgXCJBU1wiLFxuICBcIkFUXCIsXG4gIFwiQVVcIixcbiAgXCJBV1wiLFxuICBcIkFYXCIsXG4gIFwiQVpcIixcbiAgXCJCQVwiLFxuICBcIkJCXCIsXG4gIFwiQkRcIixcbiAgXCJCRVwiLFxuICBcIkJGXCIsXG4gIFwiQkdcIixcbiAgXCJCSFwiLFxuICBcIkJJXCIsXG4gIFwiQkpcIixcbiAgXCJCTFwiLFxuICBcIkJNXCIsXG4gIFwiQk5cIixcbiAgXCJCT1wiLFxuICBcIkJRXCIsXG4gIFwiQlFcIixcbiAgXCJCUlwiLFxuICBcIkJTXCIsXG4gIFwiQlRcIixcbiAgXCJCVlwiLFxuICBcIkJXXCIsXG4gIFwiQllcIixcbiAgXCJCWlwiLFxuICBcIkNBXCIsXG4gIFwiQ0NcIixcbiAgXCJDRFwiLFxuICBcIkNGXCIsXG4gIFwiQ0dcIixcbiAgXCJDSFwiLFxuICBcIkNJXCIsXG4gIFwiQ0tcIixcbiAgXCJDTFwiLFxuICBcIkNNXCIsXG4gIFwiQ05cIixcbiAgXCJDT1wiLFxuICBcIkNSXCIsXG4gIFwiQ1VcIixcbiAgXCJDVlwiLFxuICBcIkNXXCIsXG4gIFwiQ1hcIixcbiAgXCJDWVwiLFxuICBcIkNaXCIsXG4gIFwiREVcIixcbiAgXCJESlwiLFxuICBcIkRLXCIsXG4gIFwiRE1cIixcbiAgXCJET1wiLFxuICBcIkRaXCIsXG4gIFwiRUNcIixcbiAgXCJFRVwiLFxuICBcIkVHXCIsXG4gIFwiRUhcIixcbiAgXCJFUlwiLFxuICBcIkVTXCIsXG4gIFwiRVRcIixcbiAgXCJGSVwiLFxuICBcIkZKXCIsXG4gIFwiRktcIixcbiAgXCJGTVwiLFxuICBcIkZPXCIsXG4gIFwiRlJcIixcbiAgXCJHQVwiLFxuICBcIkdCXCIsXG4gIFwiR0RcIixcbiAgXCJHRVwiLFxuICBcIkdGXCIsXG4gIFwiR0dcIixcbiAgXCJHSFwiLFxuICBcIkdJXCIsXG4gIFwiR0xcIixcbiAgXCJHTVwiLFxuICBcIkdOXCIsXG4gIFwiR1BcIixcbiAgXCJHUVwiLFxuICBcIkdSXCIsXG4gIFwiR1NcIixcbiAgXCJHVFwiLFxuICBcIkdVXCIsXG4gIFwiR1dcIixcbiAgXCJHWVwiLFxuICBcIkhLXCIsXG4gIFwiSE1cIixcbiAgXCJITlwiLFxuICBcIkhSXCIsXG4gIFwiSFRcIixcbiAgXCJIVVwiLFxuICBcIklEXCIsXG4gIFwiSUVcIixcbiAgXCJJTFwiLFxuICBcIklNXCIsXG4gIFwiSU5cIixcbiAgXCJJT1wiLFxuICBcIklRXCIsXG4gIFwiSVJcIixcbiAgXCJJU1wiLFxuICBcIklUXCIsXG4gIFwiSkVcIixcbiAgXCJKTVwiLFxuICBcIkpPXCIsXG4gIFwiSlBcIixcbiAgXCJLRVwiLFxuICBcIktHXCIsXG4gIFwiS0hcIixcbiAgXCJLSVwiLFxuICBcIktNXCIsXG4gIFwiS05cIixcbiAgXCJLUFwiLFxuICBcIktSXCIsXG4gIFwiS1dcIixcbiAgXCJLWVwiLFxuICBcIktaXCIsXG4gIFwiTEFcIixcbiAgXCJMQlwiLFxuICBcIkxDXCIsXG4gIFwiTElcIixcbiAgXCJMS1wiLFxuICBcIkxSXCIsXG4gIFwiTFNcIixcbiAgXCJMVFwiLFxuICBcIkxVXCIsXG4gIFwiTFZcIixcbiAgXCJMWVwiLFxuICBcIk1BXCIsXG4gIFwiTUNcIixcbiAgXCJNRFwiLFxuICBcIk1FXCIsXG4gIFwiTUZcIixcbiAgXCJNR1wiLFxuICBcIk1IXCIsXG4gIFwiTUtcIixcbiAgXCJNTFwiLFxuICBcIk1NXCIsXG4gIFwiTU5cIixcbiAgXCJNT1wiLFxuICBcIk1QXCIsXG4gIFwiTVFcIixcbiAgXCJNUlwiLFxuICBcIk1TXCIsXG4gIFwiTVRcIixcbiAgXCJNVVwiLFxuICBcIk1WXCIsXG4gIFwiTVdcIixcbiAgXCJNWFwiLFxuICBcIk1ZXCIsXG4gIFwiTVpcIixcbiAgXCJOQVwiLFxuICBcIk5DXCIsXG4gIFwiTkVcIixcbiAgXCJORlwiLFxuICBcIk5HXCIsXG4gIFwiTklcIixcbiAgXCJOTFwiLFxuICBcIk5PXCIsXG4gIFwiTlBcIixcbiAgXCJOUlwiLFxuICBcIk5VXCIsXG4gIFwiTlpcIixcbiAgXCJPTVwiLFxuICBcIlBBXCIsXG4gIFwiUEVcIixcbiAgXCJQRlwiLFxuICBcIlBHXCIsXG4gIFwiUEhcIixcbiAgXCJQS1wiLFxuICBcIlBMXCIsXG4gIFwiUE1cIixcbiAgXCJQTlwiLFxuICBcIlBSXCIsXG4gIFwiUFNcIixcbiAgXCJQVFwiLFxuICBcIlBXXCIsXG4gIFwiUFlcIixcbiAgXCJRQVwiLFxuICBcIlJFXCIsXG4gIFwiUk9cIixcbiAgXCJSU1wiLFxuICBcIlJVXCIsXG4gIFwiUldcIixcbiAgXCJTQVwiLFxuICBcIlNCXCIsXG4gIFwiU0NcIixcbiAgXCJTRFwiLFxuICBcIlNFXCIsXG4gIFwiU0dcIixcbiAgXCJTSFwiLFxuICBcIlNJXCIsXG4gIFwiU0pcIixcbiAgXCJTS1wiLFxuICBcIlNMXCIsXG4gIFwiU01cIixcbiAgXCJTTlwiLFxuICBcIlNPXCIsXG4gIFwiU1JcIixcbiAgXCJTU1wiLFxuICBcIlNUXCIsXG4gIFwiU1ZcIixcbiAgXCJTWFwiLFxuICBcIlNZXCIsXG4gIFwiU1pcIixcbiAgXCJUQ1wiLFxuICBcIlREXCIsXG4gIFwiVEZcIixcbiAgXCJUR1wiLFxuICBcIlRIXCIsXG4gIFwiVEpcIixcbiAgXCJUS1wiLFxuICBcIlRMXCIsXG4gIFwiVE1cIixcbiAgXCJUTlwiLFxuICBcIlRPXCIsXG4gIFwiVFJcIixcbiAgXCJUVFwiLFxuICBcIlRWXCIsXG4gIFwiVFdcIixcbiAgXCJUWlwiLFxuICBcIlVBXCIsXG4gIFwiVUdcIixcbiAgXCJVTVwiLFxuICBcIlVTXCIsXG4gIFwiVVlcIixcbiAgXCJVWlwiLFxuICBcIlZBXCIsXG4gIFwiVkNcIixcbiAgXCJWRVwiLFxuICBcIlZHXCIsXG4gIFwiVklcIixcbiAgXCJWTlwiLFxuICBcIlZVXCIsXG4gIFwiV0ZcIixcbiAgXCJXU1wiLFxuICBcIllFXCIsXG4gIFwiWVRcIixcbiAgXCJaQVwiLFxuICBcIlpNXCIsXG4gIFwiWldcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQXZvblwiLFxuICBcIkJlZGZvcmRzaGlyZVwiLFxuICBcIkJlcmtzaGlyZVwiLFxuICBcIkJvcmRlcnNcIixcbiAgXCJCdWNraW5naGFtc2hpcmVcIixcbiAgXCJDYW1icmlkZ2VzaGlyZVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2FcIlxuXTtcbiIsInZhciBhZGRyZXNzID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGFkZHJlc3M7XG5hZGRyZXNzLmNpdHlfcHJlZml4ID0gcmVxdWlyZShcIi4vY2l0eV9wcmVmaXhcIik7XG5hZGRyZXNzLmNpdHlfc3VmZml4ID0gcmVxdWlyZShcIi4vY2l0eV9zdWZmaXhcIik7XG5hZGRyZXNzLmNvdW50eSA9IHJlcXVpcmUoXCIuL2NvdW50eVwiKTtcbmFkZHJlc3MuY291bnRyeSA9IHJlcXVpcmUoXCIuL2NvdW50cnlcIik7XG5hZGRyZXNzLmNvdW50cnlfY29kZSA9IHJlcXVpcmUoXCIuL2NvdW50cnlfY29kZVwiKTtcbmFkZHJlc3MuYnVpbGRpbmdfbnVtYmVyID0gcmVxdWlyZShcIi4vYnVpbGRpbmdfbnVtYmVyXCIpO1xuYWRkcmVzcy5zdHJlZXRfc3VmZml4ID0gcmVxdWlyZShcIi4vc3RyZWV0X3N1ZmZpeFwiKTtcbmFkZHJlc3Muc2Vjb25kYXJ5X2FkZHJlc3MgPSByZXF1aXJlKFwiLi9zZWNvbmRhcnlfYWRkcmVzc1wiKTtcbmFkZHJlc3MucG9zdGNvZGUgPSByZXF1aXJlKFwiLi9wb3N0Y29kZVwiKTtcbmFkZHJlc3MucG9zdGNvZGVfYnlfc3RhdGUgPSByZXF1aXJlKFwiLi9wb3N0Y29kZV9ieV9zdGF0ZVwiKTtcbmFkZHJlc3Muc3RhdGUgPSByZXF1aXJlKFwiLi9zdGF0ZVwiKTtcbmFkZHJlc3Muc3RhdGVfYWJiciA9IHJlcXVpcmUoXCIuL3N0YXRlX2FiYnJcIik7XG5hZGRyZXNzLnRpbWVfem9uZSA9IHJlcXVpcmUoXCIuL3RpbWVfem9uZVwiKTtcbmFkZHJlc3MuY2l0eSA9IHJlcXVpcmUoXCIuL2NpdHlcIik7XG5hZGRyZXNzLnN0cmVldF9uYW1lID0gcmVxdWlyZShcIi4vc3RyZWV0X25hbWVcIik7XG5hZGRyZXNzLnN0cmVldF9hZGRyZXNzID0gcmVxdWlyZShcIi4vc3RyZWV0X2FkZHJlc3NcIik7XG5hZGRyZXNzLmRlZmF1bHRfY291bnRyeSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRfY291bnRyeVwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiIyMjIyNcIixcbiAgXCIjIyMjIy0jIyMjXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFwdC4gIyMjXCIsXG4gIFwiU3VpdGUgIyMjXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFsYWJhbWFcIixcbiAgXCJBbGFza2FcIixcbiAgXCJBcml6b25hXCIsXG4gIFwiQXJrYW5zYXNcIixcbiAgXCJDYWxpZm9ybmlhXCIsXG4gIFwiQ29sb3JhZG9cIixcbiAgXCJDb25uZWN0aWN1dFwiLFxuICBcIkRlbGF3YXJlXCIsXG4gIFwiRmxvcmlkYVwiLFxuICBcIkdlb3JnaWFcIixcbiAgXCJIYXdhaWlcIixcbiAgXCJJZGFob1wiLFxuICBcIklsbGlub2lzXCIsXG4gIFwiSW5kaWFuYVwiLFxuICBcIklvd2FcIixcbiAgXCJLYW5zYXNcIixcbiAgXCJLZW50dWNreVwiLFxuICBcIkxvdWlzaWFuYVwiLFxuICBcIk1haW5lXCIsXG4gIFwiTWFyeWxhbmRcIixcbiAgXCJNYXNzYWNodXNldHRzXCIsXG4gIFwiTWljaGlnYW5cIixcbiAgXCJNaW5uZXNvdGFcIixcbiAgXCJNaXNzaXNzaXBwaVwiLFxuICBcIk1pc3NvdXJpXCIsXG4gIFwiTW9udGFuYVwiLFxuICBcIk5lYnJhc2thXCIsXG4gIFwiTmV2YWRhXCIsXG4gIFwiTmV3IEhhbXBzaGlyZVwiLFxuICBcIk5ldyBKZXJzZXlcIixcbiAgXCJOZXcgTWV4aWNvXCIsXG4gIFwiTmV3IFlvcmtcIixcbiAgXCJOb3J0aCBDYXJvbGluYVwiLFxuICBcIk5vcnRoIERha290YVwiLFxuICBcIk9oaW9cIixcbiAgXCJPa2xhaG9tYVwiLFxuICBcIk9yZWdvblwiLFxuICBcIlBlbm5zeWx2YW5pYVwiLFxuICBcIlJob2RlIElzbGFuZFwiLFxuICBcIlNvdXRoIENhcm9saW5hXCIsXG4gIFwiU291dGggRGFrb3RhXCIsXG4gIFwiVGVubmVzc2VlXCIsXG4gIFwiVGV4YXNcIixcbiAgXCJVdGFoXCIsXG4gIFwiVmVybW9udFwiLFxuICBcIlZpcmdpbmlhXCIsXG4gIFwiV2FzaGluZ3RvblwiLFxuICBcIldlc3QgVmlyZ2luaWFcIixcbiAgXCJXaXNjb25zaW5cIixcbiAgXCJXeW9taW5nXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFMXCIsXG4gIFwiQUtcIixcbiAgXCJBWlwiLFxuICBcIkFSXCIsXG4gIFwiQ0FcIixcbiAgXCJDT1wiLFxuICBcIkNUXCIsXG4gIFwiREVcIixcbiAgXCJGTFwiLFxuICBcIkdBXCIsXG4gIFwiSElcIixcbiAgXCJJRFwiLFxuICBcIklMXCIsXG4gIFwiSU5cIixcbiAgXCJJQVwiLFxuICBcIktTXCIsXG4gIFwiS1lcIixcbiAgXCJMQVwiLFxuICBcIk1FXCIsXG4gIFwiTURcIixcbiAgXCJNQVwiLFxuICBcIk1JXCIsXG4gIFwiTU5cIixcbiAgXCJNU1wiLFxuICBcIk1PXCIsXG4gIFwiTVRcIixcbiAgXCJORVwiLFxuICBcIk5WXCIsXG4gIFwiTkhcIixcbiAgXCJOSlwiLFxuICBcIk5NXCIsXG4gIFwiTllcIixcbiAgXCJOQ1wiLFxuICBcIk5EXCIsXG4gIFwiT0hcIixcbiAgXCJPS1wiLFxuICBcIk9SXCIsXG4gIFwiUEFcIixcbiAgXCJSSVwiLFxuICBcIlNDXCIsXG4gIFwiU0RcIixcbiAgXCJUTlwiLFxuICBcIlRYXCIsXG4gIFwiVVRcIixcbiAgXCJWVFwiLFxuICBcIlZBXCIsXG4gIFwiV0FcIixcbiAgXCJXVlwiLFxuICBcIldJXCIsXG4gIFwiV1lcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3tidWlsZGluZ19udW1iZXJ9ICN7c3RyZWV0X25hbWV9XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiN7TmFtZS5maXJzdF9uYW1lfSAje3N0cmVldF9zdWZmaXh9XCIsXG4gIFwiI3tOYW1lLmxhc3RfbmFtZX0gI3tzdHJlZXRfc3VmZml4fVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBbGxleVwiLFxuICBcIkF2ZW51ZVwiLFxuICBcIkJyYW5jaFwiLFxuICBcIkJyaWRnZVwiLFxuICBcIkJyb29rXCIsXG4gIFwiQnJvb2tzXCIsXG4gIFwiQnVyZ1wiLFxuICBcIkJ1cmdzXCIsXG4gIFwiQnlwYXNzXCIsXG4gIFwiQ2FtcFwiLFxuICBcIkNhbnlvblwiLFxuICBcIkNhcGVcIixcbiAgXCJDYXVzZXdheVwiLFxuICBcIkNlbnRlclwiLFxuICBcIkNlbnRlcnNcIixcbiAgXCJDaXJjbGVcIixcbiAgXCJDaXJjbGVzXCIsXG4gIFwiQ2xpZmZcIixcbiAgXCJDbGlmZnNcIixcbiAgXCJDbHViXCIsXG4gIFwiQ29tbW9uXCIsXG4gIFwiQ29ybmVyXCIsXG4gIFwiQ29ybmVyc1wiLFxuICBcIkNvdXJzZVwiLFxuICBcIkNvdXJ0XCIsXG4gIFwiQ291cnRzXCIsXG4gIFwiQ292ZVwiLFxuICBcIkNvdmVzXCIsXG4gIFwiQ3JlZWtcIixcbiAgXCJDcmVzY2VudFwiLFxuICBcIkNyZXN0XCIsXG4gIFwiQ3Jvc3NpbmdcIixcbiAgXCJDcm9zc3JvYWRcIixcbiAgXCJDdXJ2ZVwiLFxuICBcIkRhbGVcIixcbiAgXCJEYW1cIixcbiAgXCJEaXZpZGVcIixcbiAgXCJEcml2ZVwiLFxuICBcIkRyaXZlXCIsXG4gIFwiRHJpdmVzXCIsXG4gIFwiRXN0YXRlXCIsXG4gIFwiRXN0YXRlc1wiLFxuICBcIkV4cHJlc3N3YXlcIixcbiAgXCJFeHRlbnNpb25cIixcbiAgXCJFeHRlbnNpb25zXCIsXG4gIFwiRmFsbFwiLFxuICBcIkZhbGxzXCIsXG4gIFwiRmVycnlcIixcbiAgXCJGaWVsZFwiLFxuICBcIkZpZWxkc1wiLFxuICBcIkZsYXRcIixcbiAgXCJGbGF0c1wiLFxuICBcIkZvcmRcIixcbiAgXCJGb3Jkc1wiLFxuICBcIkZvcmVzdFwiLFxuICBcIkZvcmdlXCIsXG4gIFwiRm9yZ2VzXCIsXG4gIFwiRm9ya1wiLFxuICBcIkZvcmtzXCIsXG4gIFwiRm9ydFwiLFxuICBcIkZyZWV3YXlcIixcbiAgXCJHYXJkZW5cIixcbiAgXCJHYXJkZW5zXCIsXG4gIFwiR2F0ZXdheVwiLFxuICBcIkdsZW5cIixcbiAgXCJHbGVuc1wiLFxuICBcIkdyZWVuXCIsXG4gIFwiR3JlZW5zXCIsXG4gIFwiR3JvdmVcIixcbiAgXCJHcm92ZXNcIixcbiAgXCJIYXJib3JcIixcbiAgXCJIYXJib3JzXCIsXG4gIFwiSGF2ZW5cIixcbiAgXCJIZWlnaHRzXCIsXG4gIFwiSGlnaHdheVwiLFxuICBcIkhpbGxcIixcbiAgXCJIaWxsc1wiLFxuICBcIkhvbGxvd1wiLFxuICBcIklubGV0XCIsXG4gIFwiSW5sZXRcIixcbiAgXCJJc2xhbmRcIixcbiAgXCJJc2xhbmRcIixcbiAgXCJJc2xhbmRzXCIsXG4gIFwiSXNsYW5kc1wiLFxuICBcIklzbGVcIixcbiAgXCJJc2xlXCIsXG4gIFwiSnVuY3Rpb25cIixcbiAgXCJKdW5jdGlvbnNcIixcbiAgXCJLZXlcIixcbiAgXCJLZXlzXCIsXG4gIFwiS25vbGxcIixcbiAgXCJLbm9sbHNcIixcbiAgXCJMYWtlXCIsXG4gIFwiTGFrZXNcIixcbiAgXCJMYW5kXCIsXG4gIFwiTGFuZGluZ1wiLFxuICBcIkxhbmVcIixcbiAgXCJMaWdodFwiLFxuICBcIkxpZ2h0c1wiLFxuICBcIkxvYWZcIixcbiAgXCJMb2NrXCIsXG4gIFwiTG9ja3NcIixcbiAgXCJMb2Nrc1wiLFxuICBcIkxvZGdlXCIsXG4gIFwiTG9kZ2VcIixcbiAgXCJMb29wXCIsXG4gIFwiTWFsbFwiLFxuICBcIk1hbm9yXCIsXG4gIFwiTWFub3JzXCIsXG4gIFwiTWVhZG93XCIsXG4gIFwiTWVhZG93c1wiLFxuICBcIk1ld3NcIixcbiAgXCJNaWxsXCIsXG4gIFwiTWlsbHNcIixcbiAgXCJNaXNzaW9uXCIsXG4gIFwiTWlzc2lvblwiLFxuICBcIk1vdG9yd2F5XCIsXG4gIFwiTW91bnRcIixcbiAgXCJNb3VudGFpblwiLFxuICBcIk1vdW50YWluXCIsXG4gIFwiTW91bnRhaW5zXCIsXG4gIFwiTW91bnRhaW5zXCIsXG4gIFwiTmVja1wiLFxuICBcIk9yY2hhcmRcIixcbiAgXCJPdmFsXCIsXG4gIFwiT3ZlcnBhc3NcIixcbiAgXCJQYXJrXCIsXG4gIFwiUGFya3NcIixcbiAgXCJQYXJrd2F5XCIsXG4gIFwiUGFya3dheXNcIixcbiAgXCJQYXNzXCIsXG4gIFwiUGFzc2FnZVwiLFxuICBcIlBhdGhcIixcbiAgXCJQaWtlXCIsXG4gIFwiUGluZVwiLFxuICBcIlBpbmVzXCIsXG4gIFwiUGxhY2VcIixcbiAgXCJQbGFpblwiLFxuICBcIlBsYWluc1wiLFxuICBcIlBsYWluc1wiLFxuICBcIlBsYXphXCIsXG4gIFwiUGxhemFcIixcbiAgXCJQb2ludFwiLFxuICBcIlBvaW50c1wiLFxuICBcIlBvcnRcIixcbiAgXCJQb3J0XCIsXG4gIFwiUG9ydHNcIixcbiAgXCJQb3J0c1wiLFxuICBcIlByYWlyaWVcIixcbiAgXCJQcmFpcmllXCIsXG4gIFwiUmFkaWFsXCIsXG4gIFwiUmFtcFwiLFxuICBcIlJhbmNoXCIsXG4gIFwiUmFwaWRcIixcbiAgXCJSYXBpZHNcIixcbiAgXCJSZXN0XCIsXG4gIFwiUmlkZ2VcIixcbiAgXCJSaWRnZXNcIixcbiAgXCJSaXZlclwiLFxuICBcIlJvYWRcIixcbiAgXCJSb2FkXCIsXG4gIFwiUm9hZHNcIixcbiAgXCJSb2Fkc1wiLFxuICBcIlJvdXRlXCIsXG4gIFwiUm93XCIsXG4gIFwiUnVlXCIsXG4gIFwiUnVuXCIsXG4gIFwiU2hvYWxcIixcbiAgXCJTaG9hbHNcIixcbiAgXCJTaG9yZVwiLFxuICBcIlNob3Jlc1wiLFxuICBcIlNreXdheVwiLFxuICBcIlNwcmluZ1wiLFxuICBcIlNwcmluZ3NcIixcbiAgXCJTcHJpbmdzXCIsXG4gIFwiU3B1clwiLFxuICBcIlNwdXJzXCIsXG4gIFwiU3F1YXJlXCIsXG4gIFwiU3F1YXJlXCIsXG4gIFwiU3F1YXJlc1wiLFxuICBcIlNxdWFyZXNcIixcbiAgXCJTdGF0aW9uXCIsXG4gIFwiU3RhdGlvblwiLFxuICBcIlN0cmF2ZW51ZVwiLFxuICBcIlN0cmF2ZW51ZVwiLFxuICBcIlN0cmVhbVwiLFxuICBcIlN0cmVhbVwiLFxuICBcIlN0cmVldFwiLFxuICBcIlN0cmVldFwiLFxuICBcIlN0cmVldHNcIixcbiAgXCJTdW1taXRcIixcbiAgXCJTdW1taXRcIixcbiAgXCJUZXJyYWNlXCIsXG4gIFwiVGhyb3VnaHdheVwiLFxuICBcIlRyYWNlXCIsXG4gIFwiVHJhY2tcIixcbiAgXCJUcmFmZmljd2F5XCIsXG4gIFwiVHJhaWxcIixcbiAgXCJUcmFpbFwiLFxuICBcIlR1bm5lbFwiLFxuICBcIlR1bm5lbFwiLFxuICBcIlR1cm5waWtlXCIsXG4gIFwiVHVybnBpa2VcIixcbiAgXCJVbmRlcnBhc3NcIixcbiAgXCJVbmlvblwiLFxuICBcIlVuaW9uc1wiLFxuICBcIlZhbGxleVwiLFxuICBcIlZhbGxleXNcIixcbiAgXCJWaWFcIixcbiAgXCJWaWFkdWN0XCIsXG4gIFwiVmlld1wiLFxuICBcIlZpZXdzXCIsXG4gIFwiVmlsbGFnZVwiLFxuICBcIlZpbGxhZ2VcIixcbiAgXCJWaWxsYWdlc1wiLFxuICBcIlZpbGxlXCIsXG4gIFwiVmlzdGFcIixcbiAgXCJWaXN0YVwiLFxuICBcIldhbGtcIixcbiAgXCJXYWxrc1wiLFxuICBcIldhbGxcIixcbiAgXCJXYXlcIixcbiAgXCJXYXlzXCIsXG4gIFwiV2VsbFwiLFxuICBcIldlbGxzXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIlBhY2lmaWMvTWlkd2F5XCIsXG4gIFwiUGFjaWZpYy9QYWdvX1BhZ29cIixcbiAgXCJQYWNpZmljL0hvbm9sdWx1XCIsXG4gIFwiQW1lcmljYS9KdW5lYXVcIixcbiAgXCJBbWVyaWNhL0xvc19BbmdlbGVzXCIsXG4gIFwiQW1lcmljYS9UaWp1YW5hXCIsXG4gIFwiQW1lcmljYS9EZW52ZXJcIixcbiAgXCJBbWVyaWNhL1Bob2VuaXhcIixcbiAgXCJBbWVyaWNhL0NoaWh1YWh1YVwiLFxuICBcIkFtZXJpY2EvTWF6YXRsYW5cIixcbiAgXCJBbWVyaWNhL0NoaWNhZ29cIixcbiAgXCJBbWVyaWNhL1JlZ2luYVwiLFxuICBcIkFtZXJpY2EvTWV4aWNvX0NpdHlcIixcbiAgXCJBbWVyaWNhL01leGljb19DaXR5XCIsXG4gIFwiQW1lcmljYS9Nb250ZXJyZXlcIixcbiAgXCJBbWVyaWNhL0d1YXRlbWFsYVwiLFxuICBcIkFtZXJpY2EvTmV3X1lvcmtcIixcbiAgXCJBbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzXCIsXG4gIFwiQW1lcmljYS9Cb2dvdGFcIixcbiAgXCJBbWVyaWNhL0xpbWFcIixcbiAgXCJBbWVyaWNhL0xpbWFcIixcbiAgXCJBbWVyaWNhL0hhbGlmYXhcIixcbiAgXCJBbWVyaWNhL0NhcmFjYXNcIixcbiAgXCJBbWVyaWNhL0xhX1BhelwiLFxuICBcIkFtZXJpY2EvU2FudGlhZ29cIixcbiAgXCJBbWVyaWNhL1N0X0pvaG5zXCIsXG4gIFwiQW1lcmljYS9TYW9fUGF1bG9cIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXNcIixcbiAgXCJBbWVyaWNhL0d1eWFuYVwiLFxuICBcIkFtZXJpY2EvR29kdGhhYlwiLFxuICBcIkF0bGFudGljL1NvdXRoX0dlb3JnaWFcIixcbiAgXCJBdGxhbnRpYy9Bem9yZXNcIixcbiAgXCJBdGxhbnRpYy9DYXBlX1ZlcmRlXCIsXG4gIFwiRXVyb3BlL0R1YmxpblwiLFxuICBcIkV1cm9wZS9Mb25kb25cIixcbiAgXCJFdXJvcGUvTGlzYm9uXCIsXG4gIFwiRXVyb3BlL0xvbmRvblwiLFxuICBcIkFmcmljYS9DYXNhYmxhbmNhXCIsXG4gIFwiQWZyaWNhL01vbnJvdmlhXCIsXG4gIFwiRXRjL1VUQ1wiLFxuICBcIkV1cm9wZS9CZWxncmFkZVwiLFxuICBcIkV1cm9wZS9CcmF0aXNsYXZhXCIsXG4gIFwiRXVyb3BlL0J1ZGFwZXN0XCIsXG4gIFwiRXVyb3BlL0xqdWJsamFuYVwiLFxuICBcIkV1cm9wZS9QcmFndWVcIixcbiAgXCJFdXJvcGUvU2FyYWpldm9cIixcbiAgXCJFdXJvcGUvU2tvcGplXCIsXG4gIFwiRXVyb3BlL1dhcnNhd1wiLFxuICBcIkV1cm9wZS9aYWdyZWJcIixcbiAgXCJFdXJvcGUvQnJ1c3NlbHNcIixcbiAgXCJFdXJvcGUvQ29wZW5oYWdlblwiLFxuICBcIkV1cm9wZS9NYWRyaWRcIixcbiAgXCJFdXJvcGUvUGFyaXNcIixcbiAgXCJFdXJvcGUvQW1zdGVyZGFtXCIsXG4gIFwiRXVyb3BlL0JlcmxpblwiLFxuICBcIkV1cm9wZS9CZXJsaW5cIixcbiAgXCJFdXJvcGUvUm9tZVwiLFxuICBcIkV1cm9wZS9TdG9ja2hvbG1cIixcbiAgXCJFdXJvcGUvVmllbm5hXCIsXG4gIFwiQWZyaWNhL0FsZ2llcnNcIixcbiAgXCJFdXJvcGUvQnVjaGFyZXN0XCIsXG4gIFwiQWZyaWNhL0NhaXJvXCIsXG4gIFwiRXVyb3BlL0hlbHNpbmtpXCIsXG4gIFwiRXVyb3BlL0tpZXZcIixcbiAgXCJFdXJvcGUvUmlnYVwiLFxuICBcIkV1cm9wZS9Tb2ZpYVwiLFxuICBcIkV1cm9wZS9UYWxsaW5uXCIsXG4gIFwiRXVyb3BlL1ZpbG5pdXNcIixcbiAgXCJFdXJvcGUvQXRoZW5zXCIsXG4gIFwiRXVyb3BlL0lzdGFuYnVsXCIsXG4gIFwiRXVyb3BlL01pbnNrXCIsXG4gIFwiQXNpYS9KZXJ1c2FsZW1cIixcbiAgXCJBZnJpY2EvSGFyYXJlXCIsXG4gIFwiQWZyaWNhL0pvaGFubmVzYnVyZ1wiLFxuICBcIkV1cm9wZS9Nb3Njb3dcIixcbiAgXCJFdXJvcGUvTW9zY293XCIsXG4gIFwiRXVyb3BlL01vc2Nvd1wiLFxuICBcIkFzaWEvS3V3YWl0XCIsXG4gIFwiQXNpYS9SaXlhZGhcIixcbiAgXCJBZnJpY2EvTmFpcm9iaVwiLFxuICBcIkFzaWEvQmFnaGRhZFwiLFxuICBcIkFzaWEvVGVocmFuXCIsXG4gIFwiQXNpYS9NdXNjYXRcIixcbiAgXCJBc2lhL011c2NhdFwiLFxuICBcIkFzaWEvQmFrdVwiLFxuICBcIkFzaWEvVGJpbGlzaVwiLFxuICBcIkFzaWEvWWVyZXZhblwiLFxuICBcIkFzaWEvS2FidWxcIixcbiAgXCJBc2lhL1lla2F0ZXJpbmJ1cmdcIixcbiAgXCJBc2lhL0thcmFjaGlcIixcbiAgXCJBc2lhL0thcmFjaGlcIixcbiAgXCJBc2lhL1Rhc2hrZW50XCIsXG4gIFwiQXNpYS9Lb2xrYXRhXCIsXG4gIFwiQXNpYS9Lb2xrYXRhXCIsXG4gIFwiQXNpYS9Lb2xrYXRhXCIsXG4gIFwiQXNpYS9Lb2xrYXRhXCIsXG4gIFwiQXNpYS9LYXRobWFuZHVcIixcbiAgXCJBc2lhL0RoYWthXCIsXG4gIFwiQXNpYS9EaGFrYVwiLFxuICBcIkFzaWEvQ29sb21ib1wiLFxuICBcIkFzaWEvQWxtYXR5XCIsXG4gIFwiQXNpYS9Ob3Zvc2liaXJza1wiLFxuICBcIkFzaWEvUmFuZ29vblwiLFxuICBcIkFzaWEvQmFuZ2tva1wiLFxuICBcIkFzaWEvQmFuZ2tva1wiLFxuICBcIkFzaWEvSmFrYXJ0YVwiLFxuICBcIkFzaWEvS3Jhc25veWFyc2tcIixcbiAgXCJBc2lhL1NoYW5naGFpXCIsXG4gIFwiQXNpYS9DaG9uZ3FpbmdcIixcbiAgXCJBc2lhL0hvbmdfS29uZ1wiLFxuICBcIkFzaWEvVXJ1bXFpXCIsXG4gIFwiQXNpYS9LdWFsYV9MdW1wdXJcIixcbiAgXCJBc2lhL1NpbmdhcG9yZVwiLFxuICBcIkFzaWEvVGFpcGVpXCIsXG4gIFwiQXVzdHJhbGlhL1BlcnRoXCIsXG4gIFwiQXNpYS9Jcmt1dHNrXCIsXG4gIFwiQXNpYS9VbGFhbmJhYXRhclwiLFxuICBcIkFzaWEvU2VvdWxcIixcbiAgXCJBc2lhL1Rva3lvXCIsXG4gIFwiQXNpYS9Ub2t5b1wiLFxuICBcIkFzaWEvVG9reW9cIixcbiAgXCJBc2lhL1lha3V0c2tcIixcbiAgXCJBdXN0cmFsaWEvRGFyd2luXCIsXG4gIFwiQXVzdHJhbGlhL0FkZWxhaWRlXCIsXG4gIFwiQXVzdHJhbGlhL01lbGJvdXJuZVwiLFxuICBcIkF1c3RyYWxpYS9NZWxib3VybmVcIixcbiAgXCJBdXN0cmFsaWEvU3lkbmV5XCIsXG4gIFwiQXVzdHJhbGlhL0JyaXNiYW5lXCIsXG4gIFwiQXVzdHJhbGlhL0hvYmFydFwiLFxuICBcIkFzaWEvVmxhZGl2b3N0b2tcIixcbiAgXCJQYWNpZmljL0d1YW1cIixcbiAgXCJQYWNpZmljL1BvcnRfTW9yZXNieVwiLFxuICBcIkFzaWEvTWFnYWRhblwiLFxuICBcIkFzaWEvTWFnYWRhblwiLFxuICBcIlBhY2lmaWMvTm91bWVhXCIsXG4gIFwiUGFjaWZpYy9GaWppXCIsXG4gIFwiQXNpYS9LYW1jaGF0a2FcIixcbiAgXCJQYWNpZmljL01hanVyb1wiLFxuICBcIlBhY2lmaWMvQXVja2xhbmRcIixcbiAgXCJQYWNpZmljL0F1Y2tsYW5kXCIsXG4gIFwiUGFjaWZpYy9Ub25nYXRhcHVcIixcbiAgXCJQYWNpZmljL0Zha2FvZm9cIixcbiAgXCJQYWNpZmljL0FwaWFcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3tOYW1lLm5hbWV9XCIsXG4gIFwiI3tDb21wYW55Lm5hbWV9XCJcbl07XG4iLCJ2YXIgYXBwID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGFwcDtcbmFwcC5uYW1lID0gcmVxdWlyZShcIi4vbmFtZVwiKTtcbmFwcC52ZXJzaW9uID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmFwcC5hdXRob3IgPSByZXF1aXJlKFwiLi9hdXRob3JcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIlJlZGhvbGRcIixcbiAgXCJUcmVlZmxleFwiLFxuICBcIlRyaXBwbGVkZXhcIixcbiAgXCJLYW5sYW1cIixcbiAgXCJCaWd0YXhcIixcbiAgXCJEYWx0ZnJlc2hcIixcbiAgXCJUb3VnaGpveWZheFwiLFxuICBcIk1hdCBMYW0gVGFtXCIsXG4gIFwiT3Rjb21cIixcbiAgXCJUcmVzLVphcFwiLFxuICBcIlktU29sb3dhcm1cIixcbiAgXCJUcmVzb21cIixcbiAgXCJWb2x0c2lsbGFtXCIsXG4gIFwiQmlvZGV4XCIsXG4gIFwiR3JlZW5sYW1cIixcbiAgXCJWaXZhXCIsXG4gIFwiTWF0c29mdFwiLFxuICBcIlRlbXBcIixcbiAgXCJab29sYWJcIixcbiAgXCJTdWJpblwiLFxuICBcIlJhbmtcIixcbiAgXCJKb2JcIixcbiAgXCJTdHJpbmd0b3VnaFwiLFxuICBcIlRpblwiLFxuICBcIkl0XCIsXG4gIFwiSG9tZSBJbmdcIixcbiAgXCJaYW1pdFwiLFxuICBcIlNvbnNpbmdcIixcbiAgXCJLb25rbGFiXCIsXG4gIFwiQWxwaGFcIixcbiAgXCJMYXRsdXhcIixcbiAgXCJWb3lhdG91Y2hcIixcbiAgXCJBbHBoYXphcFwiLFxuICBcIkhvbGRsYW1pc1wiLFxuICBcIlphYW0tRG94XCIsXG4gIFwiU3ViLUV4XCIsXG4gIFwiUXVvIEx1eFwiLFxuICBcIkJhbWl0eVwiLFxuICBcIlZlbnRvc2FuemFwXCIsXG4gIFwiTG90c3RyaW5nXCIsXG4gIFwiSGF0aXR5XCIsXG4gIFwiVGVtcHNvZnRcIixcbiAgXCJPdmVyaG9sZFwiLFxuICBcIkZpeGZsZXhcIixcbiAgXCJLb25rbHV4XCIsXG4gIFwiWm9udHJheFwiLFxuICBcIlRhbXBmbGV4XCIsXG4gIFwiU3BhblwiLFxuICBcIk5hbWZpeFwiLFxuICBcIlRyYW5zY29mXCIsXG4gIFwiU3RpbVwiLFxuICBcIkZpeCBTYW5cIixcbiAgXCJTb25haXJcIixcbiAgXCJTdHJvbmdob2xkXCIsXG4gIFwiRmludG9uZVwiLFxuICBcIlktZmluZFwiLFxuICBcIk9wZWxhXCIsXG4gIFwiTG90bHV4XCIsXG4gIFwiUm9uc3RyaW5nXCIsXG4gIFwiWmF0aGluXCIsXG4gIFwiRHVvYmFtXCIsXG4gIFwiS2V5bGV4XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIjAuIy4jXCIsXG4gIFwiMC4jI1wiLFxuICBcIiMuIyNcIixcbiAgXCIjLiNcIixcbiAgXCIjLiMuI1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIyMDExLTEwLTEyXCIsXG4gIFwiMjAxMi0xMS0xMlwiLFxuICBcIjIwMTUtMTEtMTFcIixcbiAgXCIyMDEzLTktMTJcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiMTIzNC0yMTIxLTEyMjEtMTIxMVwiLFxuICBcIjEyMTItMTIyMS0xMTIxLTEyMzRcIixcbiAgXCIxMjExLTEyMjEtMTIzNC0yMjAxXCIsXG4gIFwiMTIyOC0xMjIxLTEyMjEtMTQzMVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJ2aXNhXCIsXG4gIFwibWFzdGVyY2FyZFwiLFxuICBcImFtZXJpY2FuZXhwcmVzc1wiLFxuICBcImRpc2NvdmVyXCJcbl07XG4iLCJ2YXIgYnVzaW5lc3MgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gYnVzaW5lc3M7XG5idXNpbmVzcy5jcmVkaXRfY2FyZF9udW1iZXJzID0gcmVxdWlyZShcIi4vY3JlZGl0X2NhcmRfbnVtYmVyc1wiKTtcbmJ1c2luZXNzLmNyZWRpdF9jYXJkX2V4cGlyeV9kYXRlcyA9IHJlcXVpcmUoXCIuL2NyZWRpdF9jYXJkX2V4cGlyeV9kYXRlc1wiKTtcbmJ1c2luZXNzLmNyZWRpdF9jYXJkX3R5cGVzID0gcmVxdWlyZShcIi4vY3JlZGl0X2NhcmRfdHlwZXNcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiMjIy0jIyMtIyMjI1wiLFxuICBcIigjIyMpICMjIy0jIyMjXCIsXG4gIFwiMS0jIyMtIyMjLSMjIyNcIixcbiAgXCIjIyMuIyMjLiMjIyNcIlxuXTtcbiIsInZhciBjZWxsX3Bob25lID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGNlbGxfcGhvbmU7XG5jZWxsX3Bob25lLmZvcm1hdHMgPSByZXF1aXJlKFwiLi9mb3JtYXRzXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJyZWRcIixcbiAgXCJncmVlblwiLFxuICBcImJsdWVcIixcbiAgXCJ5ZWxsb3dcIixcbiAgXCJwdXJwbGVcIixcbiAgXCJtaW50IGdyZWVuXCIsXG4gIFwidGVhbFwiLFxuICBcIndoaXRlXCIsXG4gIFwiYmxhY2tcIixcbiAgXCJvcmFuZ2VcIixcbiAgXCJwaW5rXCIsXG4gIFwiZ3JleVwiLFxuICBcIm1hcm9vblwiLFxuICBcInZpb2xldFwiLFxuICBcInR1cnF1b2lzZVwiLFxuICBcInRhblwiLFxuICBcInNreSBibHVlXCIsXG4gIFwic2FsbW9uXCIsXG4gIFwicGx1bVwiLFxuICBcIm9yY2hpZFwiLFxuICBcIm9saXZlXCIsXG4gIFwibWFnZW50YVwiLFxuICBcImxpbWVcIixcbiAgXCJpdm9yeVwiLFxuICBcImluZGlnb1wiLFxuICBcImdvbGRcIixcbiAgXCJmdWNoc2lhXCIsXG4gIFwiY3lhblwiLFxuICBcImF6dXJlXCIsXG4gIFwibGF2ZW5kZXJcIixcbiAgXCJzaWx2ZXJcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQm9va3NcIixcbiAgXCJNb3ZpZXNcIixcbiAgXCJNdXNpY1wiLFxuICBcIkdhbWVzXCIsXG4gIFwiRWxlY3Ryb25pY3NcIixcbiAgXCJDb21wdXRlcnNcIixcbiAgXCJIb21lXCIsXG4gIFwiR2FyZGVuXCIsXG4gIFwiVG9vbHNcIixcbiAgXCJHcm9jZXJ5XCIsXG4gIFwiSGVhbHRoXCIsXG4gIFwiQmVhdXR5XCIsXG4gIFwiVG95c1wiLFxuICBcIktpZHNcIixcbiAgXCJCYWJ5XCIsXG4gIFwiQ2xvdGhpbmdcIixcbiAgXCJTaG9lc1wiLFxuICBcIkpld2VsZXJ5XCIsXG4gIFwiU3BvcnRzXCIsXG4gIFwiT3V0ZG9vcnNcIixcbiAgXCJBdXRvbW90aXZlXCIsXG4gIFwiSW5kdXN0cmlhbFwiXG5dO1xuIiwidmFyIGNvbW1lcmNlID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGNvbW1lcmNlO1xuY29tbWVyY2UuY29sb3IgPSByZXF1aXJlKFwiLi9jb2xvclwiKTtcbmNvbW1lcmNlLmRlcGFydG1lbnQgPSByZXF1aXJlKFwiLi9kZXBhcnRtZW50XCIpO1xuY29tbWVyY2UucHJvZHVjdF9uYW1lID0gcmVxdWlyZShcIi4vcHJvZHVjdF9uYW1lXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IHtcbiAgXCJhZGplY3RpdmVcIjogW1xuICAgIFwiU21hbGxcIixcbiAgICBcIkVyZ29ub21pY1wiLFxuICAgIFwiUnVzdGljXCIsXG4gICAgXCJJbnRlbGxpZ2VudFwiLFxuICAgIFwiR29yZ2VvdXNcIixcbiAgICBcIkluY3JlZGlibGVcIixcbiAgICBcIkZhbnRhc3RpY1wiLFxuICAgIFwiUHJhY3RpY2FsXCIsXG4gICAgXCJTbGVla1wiLFxuICAgIFwiQXdlc29tZVwiLFxuICAgIFwiR2VuZXJpY1wiLFxuICAgIFwiSGFuZGNyYWZ0ZWRcIixcbiAgICBcIkhhbmRtYWRlXCIsXG4gICAgXCJMaWNlbnNlZFwiLFxuICAgIFwiUmVmaW5lZFwiLFxuICAgIFwiVW5icmFuZGVkXCIsXG4gICAgXCJUYXN0eVwiXG4gIF0sXG4gIFwibWF0ZXJpYWxcIjogW1xuICAgIFwiU3RlZWxcIixcbiAgICBcIldvb2RlblwiLFxuICAgIFwiQ29uY3JldGVcIixcbiAgICBcIlBsYXN0aWNcIixcbiAgICBcIkNvdHRvblwiLFxuICAgIFwiR3Jhbml0ZVwiLFxuICAgIFwiUnViYmVyXCIsXG4gICAgXCJNZXRhbFwiLFxuICAgIFwiU29mdFwiLFxuICAgIFwiRnJlc2hcIixcbiAgICBcIkZyb3plblwiXG4gIF0sXG4gIFwicHJvZHVjdFwiOiBbXG4gICAgXCJDaGFpclwiLFxuICAgIFwiQ2FyXCIsXG4gICAgXCJDb21wdXRlclwiLFxuICAgIFwiS2V5Ym9hcmRcIixcbiAgICBcIk1vdXNlXCIsXG4gICAgXCJCaWtlXCIsXG4gICAgXCJCYWxsXCIsXG4gICAgXCJHbG92ZXNcIixcbiAgICBcIlBhbnRzXCIsXG4gICAgXCJTaGlydFwiLFxuICAgIFwiVGFibGVcIixcbiAgICBcIlNob2VzXCIsXG4gICAgXCJIYXRcIixcbiAgICBcIlRvd2Vsc1wiLFxuICAgIFwiU29hcFwiLFxuICAgIFwiVHVuYVwiLFxuICAgIFwiQ2hpY2tlblwiLFxuICAgIFwiRmlzaFwiLFxuICAgIFwiQ2hlZXNlXCIsXG4gICAgXCJCYWNvblwiLFxuICAgIFwiUGl6emFcIixcbiAgICBcIlNhbGFkXCIsXG4gICAgXCJTYXVzYWdlc1wiLFxuICAgIFwiQ2hpcHNcIlxuICBdXG59O1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBZGFwdGl2ZVwiLFxuICBcIkFkdmFuY2VkXCIsXG4gIFwiQW1lbGlvcmF0ZWRcIixcbiAgXCJBc3NpbWlsYXRlZFwiLFxuICBcIkF1dG9tYXRlZFwiLFxuICBcIkJhbGFuY2VkXCIsXG4gIFwiQnVzaW5lc3MtZm9jdXNlZFwiLFxuICBcIkNlbnRyYWxpemVkXCIsXG4gIFwiQ2xvbmVkXCIsXG4gIFwiQ29tcGF0aWJsZVwiLFxuICBcIkNvbmZpZ3VyYWJsZVwiLFxuICBcIkNyb3NzLWdyb3VwXCIsXG4gIFwiQ3Jvc3MtcGxhdGZvcm1cIixcbiAgXCJDdXN0b21lci1mb2N1c2VkXCIsXG4gIFwiQ3VzdG9taXphYmxlXCIsXG4gIFwiRGVjZW50cmFsaXplZFwiLFxuICBcIkRlLWVuZ2luZWVyZWRcIixcbiAgXCJEZXZvbHZlZFwiLFxuICBcIkRpZ2l0aXplZFwiLFxuICBcIkRpc3RyaWJ1dGVkXCIsXG4gIFwiRGl2ZXJzZVwiLFxuICBcIkRvd24tc2l6ZWRcIixcbiAgXCJFbmhhbmNlZFwiLFxuICBcIkVudGVycHJpc2Utd2lkZVwiLFxuICBcIkVyZ29ub21pY1wiLFxuICBcIkV4Y2x1c2l2ZVwiLFxuICBcIkV4cGFuZGVkXCIsXG4gIFwiRXh0ZW5kZWRcIixcbiAgXCJGYWNlIHRvIGZhY2VcIixcbiAgXCJGb2N1c2VkXCIsXG4gIFwiRnJvbnQtbGluZVwiLFxuICBcIkZ1bGx5LWNvbmZpZ3VyYWJsZVwiLFxuICBcIkZ1bmN0aW9uLWJhc2VkXCIsXG4gIFwiRnVuZGFtZW50YWxcIixcbiAgXCJGdXR1cmUtcHJvb2ZlZFwiLFxuICBcIkdyYXNzLXJvb3RzXCIsXG4gIFwiSG9yaXpvbnRhbFwiLFxuICBcIkltcGxlbWVudGVkXCIsXG4gIFwiSW5ub3ZhdGl2ZVwiLFxuICBcIkludGVncmF0ZWRcIixcbiAgXCJJbnR1aXRpdmVcIixcbiAgXCJJbnZlcnNlXCIsXG4gIFwiTWFuYWdlZFwiLFxuICBcIk1hbmRhdG9yeVwiLFxuICBcIk1vbml0b3JlZFwiLFxuICBcIk11bHRpLWNoYW5uZWxsZWRcIixcbiAgXCJNdWx0aS1sYXRlcmFsXCIsXG4gIFwiTXVsdGktbGF5ZXJlZFwiLFxuICBcIk11bHRpLXRpZXJlZFwiLFxuICBcIk5ldHdvcmtlZFwiLFxuICBcIk9iamVjdC1iYXNlZFwiLFxuICBcIk9wZW4tYXJjaGl0ZWN0ZWRcIixcbiAgXCJPcGVuLXNvdXJjZVwiLFxuICBcIk9wZXJhdGl2ZVwiLFxuICBcIk9wdGltaXplZFwiLFxuICBcIk9wdGlvbmFsXCIsXG4gIFwiT3JnYW5pY1wiLFxuICBcIk9yZ2FuaXplZFwiLFxuICBcIlBlcnNldmVyaW5nXCIsXG4gIFwiUGVyc2lzdGVudFwiLFxuICBcIlBoYXNlZFwiLFxuICBcIlBvbGFyaXNlZFwiLFxuICBcIlByZS1lbXB0aXZlXCIsXG4gIFwiUHJvYWN0aXZlXCIsXG4gIFwiUHJvZml0LWZvY3VzZWRcIixcbiAgXCJQcm9mb3VuZFwiLFxuICBcIlByb2dyYW1tYWJsZVwiLFxuICBcIlByb2dyZXNzaXZlXCIsXG4gIFwiUHVibGljLWtleVwiLFxuICBcIlF1YWxpdHktZm9jdXNlZFwiLFxuICBcIlJlYWN0aXZlXCIsXG4gIFwiUmVhbGlnbmVkXCIsXG4gIFwiUmUtY29udGV4dHVhbGl6ZWRcIixcbiAgXCJSZS1lbmdpbmVlcmVkXCIsXG4gIFwiUmVkdWNlZFwiLFxuICBcIlJldmVyc2UtZW5naW5lZXJlZFwiLFxuICBcIlJpZ2h0LXNpemVkXCIsXG4gIFwiUm9idXN0XCIsXG4gIFwiU2VhbWxlc3NcIixcbiAgXCJTZWN1cmVkXCIsXG4gIFwiU2VsZi1lbmFibGluZ1wiLFxuICBcIlNoYXJhYmxlXCIsXG4gIFwiU3RhbmQtYWxvbmVcIixcbiAgXCJTdHJlYW1saW5lZFwiLFxuICBcIlN3aXRjaGFibGVcIixcbiAgXCJTeW5jaHJvbmlzZWRcIixcbiAgXCJTeW5lcmdpc3RpY1wiLFxuICBcIlN5bmVyZ2l6ZWRcIixcbiAgXCJUZWFtLW9yaWVudGVkXCIsXG4gIFwiVG90YWxcIixcbiAgXCJUcmlwbGUtYnVmZmVyZWRcIixcbiAgXCJVbml2ZXJzYWxcIixcbiAgXCJVcC1zaXplZFwiLFxuICBcIlVwZ3JhZGFibGVcIixcbiAgXCJVc2VyLWNlbnRyaWNcIixcbiAgXCJVc2VyLWZyaWVuZGx5XCIsXG4gIFwiVmVyc2F0aWxlXCIsXG4gIFwiVmlydHVhbFwiLFxuICBcIlZpc2lvbmFyeVwiLFxuICBcIlZpc2lvbi1vcmllbnRlZFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJjbGlja3MtYW5kLW1vcnRhclwiLFxuICBcInZhbHVlLWFkZGVkXCIsXG4gIFwidmVydGljYWxcIixcbiAgXCJwcm9hY3RpdmVcIixcbiAgXCJyb2J1c3RcIixcbiAgXCJyZXZvbHV0aW9uYXJ5XCIsXG4gIFwic2NhbGFibGVcIixcbiAgXCJsZWFkaW5nLWVkZ2VcIixcbiAgXCJpbm5vdmF0aXZlXCIsXG4gIFwiaW50dWl0aXZlXCIsXG4gIFwic3RyYXRlZ2ljXCIsXG4gIFwiZS1idXNpbmVzc1wiLFxuICBcIm1pc3Npb24tY3JpdGljYWxcIixcbiAgXCJzdGlja3lcIixcbiAgXCJvbmUtdG8tb25lXCIsXG4gIFwiMjQvN1wiLFxuICBcImVuZC10by1lbmRcIixcbiAgXCJnbG9iYWxcIixcbiAgXCJCMkJcIixcbiAgXCJCMkNcIixcbiAgXCJncmFudWxhclwiLFxuICBcImZyaWN0aW9ubGVzc1wiLFxuICBcInZpcnR1YWxcIixcbiAgXCJ2aXJhbFwiLFxuICBcImR5bmFtaWNcIixcbiAgXCIyNC8zNjVcIixcbiAgXCJiZXN0LW9mLWJyZWVkXCIsXG4gIFwia2lsbGVyXCIsXG4gIFwibWFnbmV0aWNcIixcbiAgXCJibGVlZGluZy1lZGdlXCIsXG4gIFwid2ViLWVuYWJsZWRcIixcbiAgXCJpbnRlcmFjdGl2ZVwiLFxuICBcImRvdC1jb21cIixcbiAgXCJzZXh5XCIsXG4gIFwiYmFjay1lbmRcIixcbiAgXCJyZWFsLXRpbWVcIixcbiAgXCJlZmZpY2llbnRcIixcbiAgXCJmcm9udC1lbmRcIixcbiAgXCJkaXN0cmlidXRlZFwiLFxuICBcInNlYW1sZXNzXCIsXG4gIFwiZXh0ZW5zaWJsZVwiLFxuICBcInR1cm4ta2V5XCIsXG4gIFwid29ybGQtY2xhc3NcIixcbiAgXCJvcGVuLXNvdXJjZVwiLFxuICBcImNyb3NzLXBsYXRmb3JtXCIsXG4gIFwiY3Jvc3MtbWVkaWFcIixcbiAgXCJzeW5lcmdpc3RpY1wiLFxuICBcImJyaWNrcy1hbmQtY2xpY2tzXCIsXG4gIFwib3V0LW9mLXRoZS1ib3hcIixcbiAgXCJlbnRlcnByaXNlXCIsXG4gIFwiaW50ZWdyYXRlZFwiLFxuICBcImltcGFjdGZ1bFwiLFxuICBcIndpcmVsZXNzXCIsXG4gIFwidHJhbnNwYXJlbnRcIixcbiAgXCJuZXh0LWdlbmVyYXRpb25cIixcbiAgXCJjdXR0aW5nLWVkZ2VcIixcbiAgXCJ1c2VyLWNlbnRyaWNcIixcbiAgXCJ2aXNpb25hcnlcIixcbiAgXCJjdXN0b21pemVkXCIsXG4gIFwidWJpcXVpdG91c1wiLFxuICBcInBsdWctYW5kLXBsYXlcIixcbiAgXCJjb2xsYWJvcmF0aXZlXCIsXG4gIFwiY29tcGVsbGluZ1wiLFxuICBcImhvbGlzdGljXCIsXG4gIFwicmljaFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJzeW5lcmdpZXNcIixcbiAgXCJ3ZWItcmVhZGluZXNzXCIsXG4gIFwicGFyYWRpZ21zXCIsXG4gIFwibWFya2V0c1wiLFxuICBcInBhcnRuZXJzaGlwc1wiLFxuICBcImluZnJhc3RydWN0dXJlc1wiLFxuICBcInBsYXRmb3Jtc1wiLFxuICBcImluaXRpYXRpdmVzXCIsXG4gIFwiY2hhbm5lbHNcIixcbiAgXCJleWViYWxsc1wiLFxuICBcImNvbW11bml0aWVzXCIsXG4gIFwiUk9JXCIsXG4gIFwic29sdXRpb25zXCIsXG4gIFwiZS10YWlsZXJzXCIsXG4gIFwiZS1zZXJ2aWNlc1wiLFxuICBcImFjdGlvbi1pdGVtc1wiLFxuICBcInBvcnRhbHNcIixcbiAgXCJuaWNoZXNcIixcbiAgXCJ0ZWNobm9sb2dpZXNcIixcbiAgXCJjb250ZW50XCIsXG4gIFwidm9ydGFsc1wiLFxuICBcInN1cHBseS1jaGFpbnNcIixcbiAgXCJjb252ZXJnZW5jZVwiLFxuICBcInJlbGF0aW9uc2hpcHNcIixcbiAgXCJhcmNoaXRlY3R1cmVzXCIsXG4gIFwiaW50ZXJmYWNlc1wiLFxuICBcImUtbWFya2V0c1wiLFxuICBcImUtY29tbWVyY2VcIixcbiAgXCJzeXN0ZW1zXCIsXG4gIFwiYmFuZHdpZHRoXCIsXG4gIFwiaW5mb21lZGlhcmllc1wiLFxuICBcIm1vZGVsc1wiLFxuICBcIm1pbmRzaGFyZVwiLFxuICBcImRlbGl2ZXJhYmxlc1wiLFxuICBcInVzZXJzXCIsXG4gIFwic2NoZW1hc1wiLFxuICBcIm5ldHdvcmtzXCIsXG4gIFwiYXBwbGljYXRpb25zXCIsXG4gIFwibWV0cmljc1wiLFxuICBcImUtYnVzaW5lc3NcIixcbiAgXCJmdW5jdGlvbmFsaXRpZXNcIixcbiAgXCJleHBlcmllbmNlc1wiLFxuICBcIndlYiBzZXJ2aWNlc1wiLFxuICBcIm1ldGhvZG9sb2dpZXNcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiaW1wbGVtZW50XCIsXG4gIFwidXRpbGl6ZVwiLFxuICBcImludGVncmF0ZVwiLFxuICBcInN0cmVhbWxpbmVcIixcbiAgXCJvcHRpbWl6ZVwiLFxuICBcImV2b2x2ZVwiLFxuICBcInRyYW5zZm9ybVwiLFxuICBcImVtYnJhY2VcIixcbiAgXCJlbmFibGVcIixcbiAgXCJvcmNoZXN0cmF0ZVwiLFxuICBcImxldmVyYWdlXCIsXG4gIFwicmVpbnZlbnRcIixcbiAgXCJhZ2dyZWdhdGVcIixcbiAgXCJhcmNoaXRlY3RcIixcbiAgXCJlbmhhbmNlXCIsXG4gIFwiaW5jZW50aXZpemVcIixcbiAgXCJtb3JwaFwiLFxuICBcImVtcG93ZXJcIixcbiAgXCJlbnZpc2lvbmVlclwiLFxuICBcIm1vbmV0aXplXCIsXG4gIFwiaGFybmVzc1wiLFxuICBcImZhY2lsaXRhdGVcIixcbiAgXCJzZWl6ZVwiLFxuICBcImRpc2ludGVybWVkaWF0ZVwiLFxuICBcInN5bmVyZ2l6ZVwiLFxuICBcInN0cmF0ZWdpemVcIixcbiAgXCJkZXBsb3lcIixcbiAgXCJicmFuZFwiLFxuICBcImdyb3dcIixcbiAgXCJ0YXJnZXRcIixcbiAgXCJzeW5kaWNhdGVcIixcbiAgXCJzeW50aGVzaXplXCIsXG4gIFwiZGVsaXZlclwiLFxuICBcIm1lc2hcIixcbiAgXCJpbmN1YmF0ZVwiLFxuICBcImVuZ2FnZVwiLFxuICBcIm1heGltaXplXCIsXG4gIFwiYmVuY2htYXJrXCIsXG4gIFwiZXhwZWRpdGVcIixcbiAgXCJyZWludGVybWVkaWF0ZVwiLFxuICBcIndoaXRlYm9hcmRcIixcbiAgXCJ2aXN1YWxpemVcIixcbiAgXCJyZXB1cnBvc2VcIixcbiAgXCJpbm5vdmF0ZVwiLFxuICBcInNjYWxlXCIsXG4gIFwidW5sZWFzaFwiLFxuICBcImRyaXZlXCIsXG4gIFwiZXh0ZW5kXCIsXG4gIFwiZW5naW5lZXJcIixcbiAgXCJyZXZvbHV0aW9uaXplXCIsXG4gIFwiZ2VuZXJhdGVcIixcbiAgXCJleHBsb2l0XCIsXG4gIFwidHJhbnNpdGlvblwiLFxuICBcImUtZW5hYmxlXCIsXG4gIFwiaXRlcmF0ZVwiLFxuICBcImN1bHRpdmF0ZVwiLFxuICBcIm1hdHJpeFwiLFxuICBcInByb2R1Y3RpemVcIixcbiAgXCJyZWRlZmluZVwiLFxuICBcInJlY29udGV4dHVhbGl6ZVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIyNCBob3VyXCIsXG4gIFwiMjQvN1wiLFxuICBcIjNyZCBnZW5lcmF0aW9uXCIsXG4gIFwiNHRoIGdlbmVyYXRpb25cIixcbiAgXCI1dGggZ2VuZXJhdGlvblwiLFxuICBcIjZ0aCBnZW5lcmF0aW9uXCIsXG4gIFwiYWN0dWF0aW5nXCIsXG4gIFwiYW5hbHl6aW5nXCIsXG4gIFwiYXN5bW1ldHJpY1wiLFxuICBcImFzeW5jaHJvbm91c1wiLFxuICBcImF0dGl0dWRlLW9yaWVudGVkXCIsXG4gIFwiYmFja2dyb3VuZFwiLFxuICBcImJhbmR3aWR0aC1tb25pdG9yZWRcIixcbiAgXCJiaS1kaXJlY3Rpb25hbFwiLFxuICBcImJpZnVyY2F0ZWRcIixcbiAgXCJib3R0b20tbGluZVwiLFxuICBcImNsZWFyLXRoaW5raW5nXCIsXG4gIFwiY2xpZW50LWRyaXZlblwiLFxuICBcImNsaWVudC1zZXJ2ZXJcIixcbiAgXCJjb2hlcmVudFwiLFxuICBcImNvaGVzaXZlXCIsXG4gIFwiY29tcG9zaXRlXCIsXG4gIFwiY29udGV4dC1zZW5zaXRpdmVcIixcbiAgXCJjb250ZXh0dWFsbHktYmFzZWRcIixcbiAgXCJjb250ZW50LWJhc2VkXCIsXG4gIFwiZGVkaWNhdGVkXCIsXG4gIFwiZGVtYW5kLWRyaXZlblwiLFxuICBcImRpZGFjdGljXCIsXG4gIFwiZGlyZWN0aW9uYWxcIixcbiAgXCJkaXNjcmV0ZVwiLFxuICBcImRpc2ludGVybWVkaWF0ZVwiLFxuICBcImR5bmFtaWNcIixcbiAgXCJlY28tY2VudHJpY1wiLFxuICBcImVtcG93ZXJpbmdcIixcbiAgXCJlbmNvbXBhc3NpbmdcIixcbiAgXCJldmVuLWtlZWxlZFwiLFxuICBcImV4ZWN1dGl2ZVwiLFxuICBcImV4cGxpY2l0XCIsXG4gIFwiZXh1ZGluZ1wiLFxuICBcImZhdWx0LXRvbGVyYW50XCIsXG4gIFwiZm9yZWdyb3VuZFwiLFxuICBcImZyZXNoLXRoaW5raW5nXCIsXG4gIFwiZnVsbC1yYW5nZVwiLFxuICBcImdsb2JhbFwiLFxuICBcImdyaWQtZW5hYmxlZFwiLFxuICBcImhldXJpc3RpY1wiLFxuICBcImhpZ2gtbGV2ZWxcIixcbiAgXCJob2xpc3RpY1wiLFxuICBcImhvbW9nZW5lb3VzXCIsXG4gIFwiaHVtYW4tcmVzb3VyY2VcIixcbiAgXCJoeWJyaWRcIixcbiAgXCJpbXBhY3RmdWxcIixcbiAgXCJpbmNyZW1lbnRhbFwiLFxuICBcImludGFuZ2libGVcIixcbiAgXCJpbnRlcmFjdGl2ZVwiLFxuICBcImludGVybWVkaWF0ZVwiLFxuICBcImxlYWRpbmcgZWRnZVwiLFxuICBcImxvY2FsXCIsXG4gIFwibG9naXN0aWNhbFwiLFxuICBcIm1heGltaXplZFwiLFxuICBcIm1ldGhvZGljYWxcIixcbiAgXCJtaXNzaW9uLWNyaXRpY2FsXCIsXG4gIFwibW9iaWxlXCIsXG4gIFwibW9kdWxhclwiLFxuICBcIm1vdGl2YXRpbmdcIixcbiAgXCJtdWx0aW1lZGlhXCIsXG4gIFwibXVsdGktc3RhdGVcIixcbiAgXCJtdWx0aS10YXNraW5nXCIsXG4gIFwibmF0aW9uYWxcIixcbiAgXCJuZWVkcy1iYXNlZFwiLFxuICBcIm5ldXRyYWxcIixcbiAgXCJuZXh0IGdlbmVyYXRpb25cIixcbiAgXCJub24tdm9sYXRpbGVcIixcbiAgXCJvYmplY3Qtb3JpZW50ZWRcIixcbiAgXCJvcHRpbWFsXCIsXG4gIFwib3B0aW1pemluZ1wiLFxuICBcInJhZGljYWxcIixcbiAgXCJyZWFsLXRpbWVcIixcbiAgXCJyZWNpcHJvY2FsXCIsXG4gIFwicmVnaW9uYWxcIixcbiAgXCJyZXNwb25zaXZlXCIsXG4gIFwic2NhbGFibGVcIixcbiAgXCJzZWNvbmRhcnlcIixcbiAgXCJzb2x1dGlvbi1vcmllbnRlZFwiLFxuICBcInN0YWJsZVwiLFxuICBcInN0YXRpY1wiLFxuICBcInN5c3RlbWF0aWNcIixcbiAgXCJzeXN0ZW1pY1wiLFxuICBcInN5c3RlbS13b3J0aHlcIixcbiAgXCJ0YW5naWJsZVwiLFxuICBcInRlcnRpYXJ5XCIsXG4gIFwidHJhbnNpdGlvbmFsXCIsXG4gIFwidW5pZm9ybVwiLFxuICBcInVwd2FyZC10cmVuZGluZ1wiLFxuICBcInVzZXItZmFjaW5nXCIsXG4gIFwidmFsdWUtYWRkZWRcIixcbiAgXCJ3ZWItZW5hYmxlZFwiLFxuICBcIndlbGwtbW9kdWxhdGVkXCIsXG4gIFwiemVybyBhZG1pbmlzdHJhdGlvblwiLFxuICBcInplcm8gZGVmZWN0XCIsXG4gIFwiemVybyB0b2xlcmFuY2VcIlxuXTtcbiIsInZhciBjb21wYW55ID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGNvbXBhbnk7XG5jb21wYW55LnN1ZmZpeCA9IHJlcXVpcmUoXCIuL3N1ZmZpeFwiKTtcbmNvbXBhbnkuYWRqZWN0aXZlID0gcmVxdWlyZShcIi4vYWRqZWN0aXZlXCIpO1xuY29tcGFueS5kZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vZGVzY3JpcHRvclwiKTtcbmNvbXBhbnkubm91biA9IHJlcXVpcmUoXCIuL25vdW5cIik7XG5jb21wYW55LmJzX3ZlcmIgPSByZXF1aXJlKFwiLi9ic192ZXJiXCIpO1xuY29tcGFueS5ic19hZGplY3RpdmUgPSByZXF1aXJlKFwiLi9ic19hZGplY3RpdmVcIik7XG5jb21wYW55LmJzX25vdW4gPSByZXF1aXJlKFwiLi9ic19ub3VuXCIpO1xuY29tcGFueS5uYW1lID0gcmVxdWlyZShcIi4vbmFtZVwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3tOYW1lLmxhc3RfbmFtZX0gI3tzdWZmaXh9XCIsXG4gIFwiI3tOYW1lLmxhc3RfbmFtZX0tI3tOYW1lLmxhc3RfbmFtZX1cIixcbiAgXCIje05hbWUubGFzdF9uYW1lfSwgI3tOYW1lLmxhc3RfbmFtZX0gYW5kICN7TmFtZS5sYXN0X25hbWV9XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImFiaWxpdHlcIixcbiAgXCJhY2Nlc3NcIixcbiAgXCJhZGFwdGVyXCIsXG4gIFwiYWxnb3JpdGhtXCIsXG4gIFwiYWxsaWFuY2VcIixcbiAgXCJhbmFseXplclwiLFxuICBcImFwcGxpY2F0aW9uXCIsXG4gIFwiYXBwcm9hY2hcIixcbiAgXCJhcmNoaXRlY3R1cmVcIixcbiAgXCJhcmNoaXZlXCIsXG4gIFwiYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2VcIixcbiAgXCJhcnJheVwiLFxuICBcImF0dGl0dWRlXCIsXG4gIFwiYmVuY2htYXJrXCIsXG4gIFwiYnVkZ2V0YXJ5IG1hbmFnZW1lbnRcIixcbiAgXCJjYXBhYmlsaXR5XCIsXG4gIFwiY2FwYWNpdHlcIixcbiAgXCJjaGFsbGVuZ2VcIixcbiAgXCJjaXJjdWl0XCIsXG4gIFwiY29sbGFib3JhdGlvblwiLFxuICBcImNvbXBsZXhpdHlcIixcbiAgXCJjb25jZXB0XCIsXG4gIFwiY29uZ2xvbWVyYXRpb25cIixcbiAgXCJjb250aW5nZW5jeVwiLFxuICBcImNvcmVcIixcbiAgXCJjdXN0b21lciBsb3lhbHR5XCIsXG4gIFwiZGF0YWJhc2VcIixcbiAgXCJkYXRhLXdhcmVob3VzZVwiLFxuICBcImRlZmluaXRpb25cIixcbiAgXCJlbXVsYXRpb25cIixcbiAgXCJlbmNvZGluZ1wiLFxuICBcImVuY3J5cHRpb25cIixcbiAgXCJleHRyYW5ldFwiLFxuICBcImZpcm13YXJlXCIsXG4gIFwiZmxleGliaWxpdHlcIixcbiAgXCJmb2N1cyBncm91cFwiLFxuICBcImZvcmVjYXN0XCIsXG4gIFwiZnJhbWVcIixcbiAgXCJmcmFtZXdvcmtcIixcbiAgXCJmdW5jdGlvblwiLFxuICBcImZ1bmN0aW9uYWxpdGllc1wiLFxuICBcIkdyYXBoaWMgSW50ZXJmYWNlXCIsXG4gIFwiZ3JvdXB3YXJlXCIsXG4gIFwiR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlXCIsXG4gIFwiaGFyZHdhcmVcIixcbiAgXCJoZWxwLWRlc2tcIixcbiAgXCJoaWVyYXJjaHlcIixcbiAgXCJodWJcIixcbiAgXCJpbXBsZW1lbnRhdGlvblwiLFxuICBcImluZm8tbWVkaWFyaWVzXCIsXG4gIFwiaW5mcmFzdHJ1Y3R1cmVcIixcbiAgXCJpbml0aWF0aXZlXCIsXG4gIFwiaW5zdGFsbGF0aW9uXCIsXG4gIFwiaW5zdHJ1Y3Rpb24gc2V0XCIsXG4gIFwiaW50ZXJmYWNlXCIsXG4gIFwiaW50ZXJuZXQgc29sdXRpb25cIixcbiAgXCJpbnRyYW5ldFwiLFxuICBcImtub3dsZWRnZSB1c2VyXCIsXG4gIFwia25vd2xlZGdlIGJhc2VcIixcbiAgXCJsb2NhbCBhcmVhIG5ldHdvcmtcIixcbiAgXCJsZXZlcmFnZVwiLFxuICBcIm1hdHJpY2VzXCIsXG4gIFwibWF0cml4XCIsXG4gIFwibWV0aG9kb2xvZ3lcIixcbiAgXCJtaWRkbGV3YXJlXCIsXG4gIFwibWlncmF0aW9uXCIsXG4gIFwibW9kZWxcIixcbiAgXCJtb2RlcmF0b3JcIixcbiAgXCJtb25pdG9yaW5nXCIsXG4gIFwibW9yYXRvcml1bVwiLFxuICBcIm5ldXJhbC1uZXRcIixcbiAgXCJvcGVuIGFyY2hpdGVjdHVyZVwiLFxuICBcIm9wZW4gc3lzdGVtXCIsXG4gIFwib3JjaGVzdHJhdGlvblwiLFxuICBcInBhcmFkaWdtXCIsXG4gIFwicGFyYWxsZWxpc21cIixcbiAgXCJwb2xpY3lcIixcbiAgXCJwb3J0YWxcIixcbiAgXCJwcmljaW5nIHN0cnVjdHVyZVwiLFxuICBcInByb2Nlc3MgaW1wcm92ZW1lbnRcIixcbiAgXCJwcm9kdWN0XCIsXG4gIFwicHJvZHVjdGl2aXR5XCIsXG4gIFwicHJvamVjdFwiLFxuICBcInByb2plY3Rpb25cIixcbiAgXCJwcm90b2NvbFwiLFxuICBcInNlY3VyZWQgbGluZVwiLFxuICBcInNlcnZpY2UtZGVza1wiLFxuICBcInNvZnR3YXJlXCIsXG4gIFwic29sdXRpb25cIixcbiAgXCJzdGFuZGFyZGl6YXRpb25cIixcbiAgXCJzdHJhdGVneVwiLFxuICBcInN0cnVjdHVyZVwiLFxuICBcInN1Y2Nlc3NcIixcbiAgXCJzdXBlcnN0cnVjdHVyZVwiLFxuICBcInN1cHBvcnRcIixcbiAgXCJzeW5lcmd5XCIsXG4gIFwic3lzdGVtIGVuZ2luZVwiLFxuICBcInRhc2stZm9yY2VcIixcbiAgXCJ0aHJvdWdocHV0XCIsXG4gIFwidGltZS1mcmFtZVwiLFxuICBcInRvb2xzZXRcIixcbiAgXCJ1dGlsaXNhdGlvblwiLFxuICBcIndlYnNpdGVcIixcbiAgXCJ3b3JrZm9yY2VcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiSW5jXCIsXG4gIFwiYW5kIFNvbnNcIixcbiAgXCJMTENcIixcbiAgXCJHcm91cFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvMzQjIy0jIyMjIyMtIyMjI0wvXCIsXG4gIFwiLzM3IyMtIyMjIyMjLSMjIyNML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvMzBbMC01XSMtIyMjIyMjLSMjI0wvXCIsXG4gIFwiLzM2OCMtIyMjIyMjLSMjI0wvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi82MDExLSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NSMjLSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NFs0LTldIy0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvNjAxMS02MiMjLSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NSMjLTYyIyMtIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY0WzQtOV0jLTYyIyMtIyMjIy0jIyMjLSMjI0wvXCJcbl07XG4iLCJ2YXIgY3JlZGl0X2NhcmQgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gY3JlZGl0X2NhcmQ7XG5jcmVkaXRfY2FyZC52aXNhID0gcmVxdWlyZShcIi4vdmlzYVwiKTtcbmNyZWRpdF9jYXJkLm1hc3RlcmNhcmQgPSByZXF1aXJlKFwiLi9tYXN0ZXJjYXJkXCIpO1xuY3JlZGl0X2NhcmQuZGlzY292ZXIgPSByZXF1aXJlKFwiLi9kaXNjb3ZlclwiKTtcbmNyZWRpdF9jYXJkLmFtZXJpY2FuX2V4cHJlc3MgPSByZXF1aXJlKFwiLi9hbWVyaWNhbl9leHByZXNzXCIpO1xuY3JlZGl0X2NhcmQuZGluZXJzX2NsdWIgPSByZXF1aXJlKFwiLi9kaW5lcnNfY2x1YlwiKTtcbmNyZWRpdF9jYXJkLmpjYiA9IHJlcXVpcmUoXCIuL2pjYlwiKTtcbmNyZWRpdF9jYXJkLnN3aXRjaCA9IHJlcXVpcmUoXCIuL3N3aXRjaFwiKTtcbmNyZWRpdF9jYXJkLnNvbG8gPSByZXF1aXJlKFwiLi9zb2xvXCIpO1xuY3JlZGl0X2NhcmQubWFlc3RybyA9IHJlcXVpcmUoXCIuL21hZXN0cm9cIik7XG5jcmVkaXRfY2FyZC5sYXNlciA9IHJlcXVpcmUoXCIuL2xhc2VyXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvMzUyOC0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvMzUyOS0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvMzVbMy04XSMtIyMjIy0jIyMjLSMjI0wvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi82MzA0IyMjIyMjIyMjIyNML1wiLFxuICBcIi82NzA2IyMjIyMjIyMjIyNML1wiLFxuICBcIi82NzcxIyMjIyMjIyMjIyNML1wiLFxuICBcIi82NzA5IyMjIyMjIyMjIyNML1wiLFxuICBcIi82MzA0IyMjIyMjIyMjezUsNn1ML1wiLFxuICBcIi82NzA2IyMjIyMjIyMjezUsNn1ML1wiLFxuICBcIi82NzcxIyMjIyMjIyMjezUsNn1ML1wiLFxuICBcIi82NzA5IyMjIyMjIyMjezUsNn1ML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNTAjezksMTZ9TC9cIixcbiAgXCIvNVs2LThdI3s5LDE2fUwvXCIsXG4gIFwiLzU2IyN7OSwxNn1ML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNVsxLTVdIyMtIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY3NzEtODkjIy0jIyMjLSMjI0wvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi82NzY3LSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82NzY3LSMjIyMtIyMjIy0jIyMjLSNML1wiLFxuICBcIi82NzY3LSMjIyMtIyMjIy0jIyMjLSMjTC9cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzY3NTktIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY3NTktIyMjIy0jIyMjLSMjIyMtI0wvXCIsXG4gIFwiLzY3NTktIyMjIy0jIyMjLSMjIyMtIyNML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNCMjIyMjIyMjIyMjTC9cIixcbiAgXCIvNCMjIy0jIyMjLSMjIyMtIyMjTC9cIlxuXTtcbiIsInZhciBkYXRlID0ge307XG5tb2R1bGVbXCJleHBvcnRzXCJdID0gZGF0ZTtcbmRhdGUubW9udGggPSByZXF1aXJlKFwiLi9tb250aFwiKTtcbmRhdGUud2Vla2RheSA9IHJlcXVpcmUoXCIuL3dlZWtkYXlcIik7XG4iLCIvLyBTb3VyY2U6IGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL3RyYWMvYnJvd3Nlci90YWdzL3JlbGVhc2UtMjcvY29tbW9uL21haW4vZW4ueG1sI0wxNzk5XG5tb2R1bGVbXCJleHBvcnRzXCJdID0ge1xuICB3aWRlOiBbXG4gICAgXCJKYW51YXJ5XCIsXG4gICAgXCJGZWJydWFyeVwiLFxuICAgIFwiTWFyY2hcIixcbiAgICBcIkFwcmlsXCIsXG4gICAgXCJNYXlcIixcbiAgICBcIkp1bmVcIixcbiAgICBcIkp1bHlcIixcbiAgICBcIkF1Z3VzdFwiLFxuICAgIFwiU2VwdGVtYmVyXCIsXG4gICAgXCJPY3RvYmVyXCIsXG4gICAgXCJOb3ZlbWJlclwiLFxuICAgIFwiRGVjZW1iZXJcIlxuICBdLFxuICAvLyBQcm9wZXJ0eSBcIndpZGVfY29udGV4dFwiIGlzIG9wdGlvbmFsLCBpZiBub3Qgc2V0IHRoZW4gXCJ3aWRlXCIgd2lsbCBiZSB1c2VkIGluc3RlYWRcbiAgLy8gSXQgaXMgdXNlZCB0byBzcGVjaWZ5IGEgd29yZCBpbiBjb250ZXh0LCB3aGljaCBtYXkgZGlmZmVyIGZyb20gYSBzdGFuZC1hbG9uZSB3b3JkXG4gIHdpZGVfY29udGV4dDogW1xuICAgIFwiSmFudWFyeVwiLFxuICAgIFwiRmVicnVhcnlcIixcbiAgICBcIk1hcmNoXCIsXG4gICAgXCJBcHJpbFwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5lXCIsXG4gICAgXCJKdWx5XCIsXG4gICAgXCJBdWd1c3RcIixcbiAgICBcIlNlcHRlbWJlclwiLFxuICAgIFwiT2N0b2JlclwiLFxuICAgIFwiTm92ZW1iZXJcIixcbiAgICBcIkRlY2VtYmVyXCJcbiAgXSxcbiAgYWJicjogW1xuICAgIFwiSmFuXCIsXG4gICAgXCJGZWJcIixcbiAgICBcIk1hclwiLFxuICAgIFwiQXByXCIsXG4gICAgXCJNYXlcIixcbiAgICBcIkp1blwiLFxuICAgIFwiSnVsXCIsXG4gICAgXCJBdWdcIixcbiAgICBcIlNlcFwiLFxuICAgIFwiT2N0XCIsXG4gICAgXCJOb3ZcIixcbiAgICBcIkRlY1wiXG4gIF0sXG4gIC8vIFByb3BlcnR5IFwiYWJicl9jb250ZXh0XCIgaXMgb3B0aW9uYWwsIGlmIG5vdCBzZXQgdGhlbiBcImFiYnJcIiB3aWxsIGJlIHVzZWQgaW5zdGVhZFxuICAvLyBJdCBpcyB1c2VkIHRvIHNwZWNpZnkgYSB3b3JkIGluIGNvbnRleHQsIHdoaWNoIG1heSBkaWZmZXIgZnJvbSBhIHN0YW5kLWFsb25lIHdvcmRcbiAgYWJicl9jb250ZXh0OiBbXG4gICAgXCJKYW5cIixcbiAgICBcIkZlYlwiLFxuICAgIFwiTWFyXCIsXG4gICAgXCJBcHJcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuXCIsXG4gICAgXCJKdWxcIixcbiAgICBcIkF1Z1wiLFxuICAgIFwiU2VwXCIsXG4gICAgXCJPY3RcIixcbiAgICBcIk5vdlwiLFxuICAgIFwiRGVjXCJcbiAgXVxufTtcbiIsIi8vIFNvdXJjZTogaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvdHJhYy9icm93c2VyL3RhZ3MvcmVsZWFzZS0yNy9jb21tb24vbWFpbi9lbi54bWwjTDE4NDdcbm1vZHVsZVtcImV4cG9ydHNcIl0gPSB7XG4gIHdpZGU6IFtcbiAgICBcIlN1bmRheVwiLFxuICAgIFwiTW9uZGF5XCIsXG4gICAgXCJUdWVzZGF5XCIsXG4gICAgXCJXZWRuZXNkYXlcIixcbiAgICBcIlRodXJzZGF5XCIsXG4gICAgXCJGcmlkYXlcIixcbiAgICBcIlNhdHVyZGF5XCJcbiAgXSxcbiAgLy8gUHJvcGVydHkgXCJ3aWRlX2NvbnRleHRcIiBpcyBvcHRpb25hbCwgaWYgbm90IHNldCB0aGVuIFwid2lkZVwiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkXG4gIC8vIEl0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIHdvcmQgaW4gY29udGV4dCwgd2hpY2ggbWF5IGRpZmZlciBmcm9tIGEgc3RhbmQtYWxvbmUgd29yZFxuICB3aWRlX2NvbnRleHQ6IFtcbiAgICBcIlN1bmRheVwiLFxuICAgIFwiTW9uZGF5XCIsXG4gICAgXCJUdWVzZGF5XCIsXG4gICAgXCJXZWRuZXNkYXlcIixcbiAgICBcIlRodXJzZGF5XCIsXG4gICAgXCJGcmlkYXlcIixcbiAgICBcIlNhdHVyZGF5XCJcbiAgXSxcbiAgYWJicjogW1xuICAgIFwiU3VuXCIsXG4gICAgXCJNb25cIixcbiAgICBcIlR1ZVwiLFxuICAgIFwiV2VkXCIsXG4gICAgXCJUaHVcIixcbiAgICBcIkZyaVwiLFxuICAgIFwiU2F0XCJcbiAgXSxcbiAgLy8gUHJvcGVydHkgXCJhYmJyX2NvbnRleHRcIiBpcyBvcHRpb25hbCwgaWYgbm90IHNldCB0aGVuIFwiYWJiclwiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkXG4gIC8vIEl0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIHdvcmQgaW4gY29udGV4dCwgd2hpY2ggbWF5IGRpZmZlciBmcm9tIGEgc3RhbmQtYWxvbmUgd29yZFxuICBhYmJyX2NvbnRleHQ6IFtcbiAgICBcIlN1blwiLFxuICAgIFwiTW9uXCIsXG4gICAgXCJUdWVcIixcbiAgICBcIldlZFwiLFxuICAgIFwiVGh1XCIsXG4gICAgXCJGcmlcIixcbiAgICBcIlNhdFwiXG4gIF1cbn07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkNoZWNraW5nXCIsXG4gIFwiU2F2aW5nc1wiLFxuICBcIk1vbmV5IE1hcmtldFwiLFxuICBcIkludmVzdG1lbnRcIixcbiAgXCJIb21lIExvYW5cIixcbiAgXCJDcmVkaXQgQ2FyZFwiLFxuICBcIkF1dG8gTG9hblwiLFxuICBcIlBlcnNvbmFsIExvYW5cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSB7XG4gIFwiVUFFIERpcmhhbVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQUVEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkFmZ2hhbmlcIjoge1xuICAgIFwiY29kZVwiOiBcIkFGTlwiLFxuICAgIFwic3ltYm9sXCI6IFwi2ItcIlxuICB9LFxuICBcIkxla1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQUxMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJMZWtcIlxuICB9LFxuICBcIkFybWVuaWFuIERyYW1cIjoge1xuICAgIFwiY29kZVwiOiBcIkFNRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJOZXRoZXJsYW5kcyBBbnRpbGxpYW4gR3VpbGRlclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQU5HXCIsXG4gICAgXCJzeW1ib2xcIjogXCLGklwiXG4gIH0sXG4gIFwiS3dhbnphXCI6IHtcbiAgICBcImNvZGVcIjogXCJBT0FcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQXJnZW50aW5lIFBlc29cIjoge1xuICAgIFwiY29kZVwiOiBcIkFSU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiQXVzdHJhbGlhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkFVRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiQXJ1YmFuIEd1aWxkZXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkFXR1wiLFxuICAgIFwic3ltYm9sXCI6IFwixpJcIlxuICB9LFxuICBcIkF6ZXJiYWlqYW5pYW4gTWFuYXRcIjoge1xuICAgIFwiY29kZVwiOiBcIkFaTlwiLFxuICAgIFwic3ltYm9sXCI6IFwi0LzQsNC9XCJcbiAgfSxcbiAgXCJDb252ZXJ0aWJsZSBNYXJrc1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQkFNXCIsXG4gICAgXCJzeW1ib2xcIjogXCJLTVwiXG4gIH0sXG4gIFwiQmFyYmFkb3MgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJCQkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlRha2FcIjoge1xuICAgIFwiY29kZVwiOiBcIkJEVFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJCdWxnYXJpYW4gTGV2XCI6IHtcbiAgICBcImNvZGVcIjogXCJCR05cIixcbiAgICBcInN5bWJvbFwiOiBcItC70LJcIlxuICB9LFxuICBcIkJhaHJhaW5pIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJCSERcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQnVydW5kaSBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQklGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkJlcm11ZGlhbiBEb2xsYXIgKGN1c3RvbWFyaWx5IGtub3duIGFzIEJlcm11ZGEgRG9sbGFyKVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQk1EXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJCcnVuZWkgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJCTkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkJvbGl2aWFubyBNdmRvbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQk9CIEJPVlwiLFxuICAgIFwic3ltYm9sXCI6IFwiJGJcIlxuICB9LFxuICBcIkJyYXppbGlhbiBSZWFsXCI6IHtcbiAgICBcImNvZGVcIjogXCJCUkxcIixcbiAgICBcInN5bWJvbFwiOiBcIlIkXCJcbiAgfSxcbiAgXCJCYWhhbWlhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkJTRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiUHVsYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQldQXCIsXG4gICAgXCJzeW1ib2xcIjogXCJQXCJcbiAgfSxcbiAgXCJCZWxhcnVzc2lhbiBSdWJsZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQllSXCIsXG4gICAgXCJzeW1ib2xcIjogXCJwLlwiXG4gIH0sXG4gIFwiQmVsaXplIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQlpEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJCWiRcIlxuICB9LFxuICBcIkNhbmFkaWFuIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ0FEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJDb25nb2xlc2UgRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIkNERlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJTd2lzcyBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ0hGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJDSEZcIlxuICB9LFxuICBcIkNoaWxlYW4gUGVzbyBVbmlkYWRlcyBkZSBmb21lbnRvXCI6IHtcbiAgICBcImNvZGVcIjogXCJDTFAgQ0xGXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJZdWFuIFJlbm1pbmJpXCI6IHtcbiAgICBcImNvZGVcIjogXCJDTllcIixcbiAgICBcInN5bWJvbFwiOiBcIsKlXCJcbiAgfSxcbiAgXCJDb2xvbWJpYW4gUGVzbyBVbmlkYWQgZGUgVmFsb3IgUmVhbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ09QIENPVVwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiQ29zdGEgUmljYW4gQ29sb25cIjoge1xuICAgIFwiY29kZVwiOiBcIkNSQ1wiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKhXCJcbiAgfSxcbiAgXCJDdWJhbiBQZXNvIFBlc28gQ29udmVydGlibGVcIjoge1xuICAgIFwiY29kZVwiOiBcIkNVUCBDVUNcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCsVwiXG4gIH0sXG4gIFwiQ2FwZSBWZXJkZSBFc2N1ZG9cIjoge1xuICAgIFwiY29kZVwiOiBcIkNWRVwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDemVjaCBLb3J1bmFcIjoge1xuICAgIFwiY29kZVwiOiBcIkNaS1wiLFxuICAgIFwic3ltYm9sXCI6IFwiS8SNXCJcbiAgfSxcbiAgXCJEamlib3V0aSBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiREpGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkRhbmlzaCBLcm9uZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiREtLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJrclwiXG4gIH0sXG4gIFwiRG9taW5pY2FuIFBlc29cIjoge1xuICAgIFwiY29kZVwiOiBcIkRPUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiUkQkXCJcbiAgfSxcbiAgXCJBbGdlcmlhbiBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiRFpEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIktyb29uXCI6IHtcbiAgICBcImNvZGVcIjogXCJFRUtcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRWd5cHRpYW4gUG91bmRcIjoge1xuICAgIFwiY29kZVwiOiBcIkVHUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqNcIlxuICB9LFxuICBcIk5ha2ZhXCI6IHtcbiAgICBcImNvZGVcIjogXCJFUk5cIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRXRoaW9waWFuIEJpcnJcIjoge1xuICAgIFwiY29kZVwiOiBcIkVUQlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJFdXJvXCI6IHtcbiAgICBcImNvZGVcIjogXCJFVVJcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCrFwiXG4gIH0sXG4gIFwiRmlqaSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkZKRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiRmFsa2xhbmQgSXNsYW5kcyBQb3VuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiRktQXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCo1wiXG4gIH0sXG4gIFwiUG91bmQgU3RlcmxpbmdcIjoge1xuICAgIFwiY29kZVwiOiBcIkdCUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqNcIlxuICB9LFxuICBcIkxhcmlcIjoge1xuICAgIFwiY29kZVwiOiBcIkdFTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDZWRpXCI6IHtcbiAgICBcImNvZGVcIjogXCJHSFNcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiR2licmFsdGFyIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJHSVBcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJEYWxhc2lcIjoge1xuICAgIFwiY29kZVwiOiBcIkdNRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJHdWluZWEgRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIkdORlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJRdWV0emFsXCI6IHtcbiAgICBcImNvZGVcIjogXCJHVFFcIixcbiAgICBcInN5bWJvbFwiOiBcIlFcIlxuICB9LFxuICBcIkd1eWFuYSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkdZRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiSG9uZyBLb25nIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSEtEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJMZW1waXJhXCI6IHtcbiAgICBcImNvZGVcIjogXCJITkxcIixcbiAgICBcInN5bWJvbFwiOiBcIkxcIlxuICB9LFxuICBcIkNyb2F0aWFuIEt1bmFcIjoge1xuICAgIFwiY29kZVwiOiBcIkhSS1wiLFxuICAgIFwic3ltYm9sXCI6IFwia25cIlxuICB9LFxuICBcIkdvdXJkZSBVUyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkhURyBVU0RcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRm9yaW50XCI6IHtcbiAgICBcImNvZGVcIjogXCJIVUZcIixcbiAgICBcInN5bWJvbFwiOiBcIkZ0XCJcbiAgfSxcbiAgXCJSdXBpYWhcIjoge1xuICAgIFwiY29kZVwiOiBcIklEUlwiLFxuICAgIFwic3ltYm9sXCI6IFwiUnBcIlxuICB9LFxuICBcIk5ldyBJc3JhZWxpIFNoZXFlbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSUxTXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqpcIlxuICB9LFxuICBcIkluZGlhbiBSdXBlZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSU5SXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkluZGlhbiBSdXBlZSBOZ3VsdHJ1bVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSU5SIEJUTlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJJcmFxaSBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSVFEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIklyYW5pYW4gUmlhbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSVJSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLvt7xcIlxuICB9LFxuICBcIkljZWxhbmQgS3JvbmFcIjoge1xuICAgIFwiY29kZVwiOiBcIklTS1wiLFxuICAgIFwic3ltYm9sXCI6IFwia3JcIlxuICB9LFxuICBcIkphbWFpY2FuIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSk1EXCIsXG4gICAgXCJzeW1ib2xcIjogXCJKJFwiXG4gIH0sXG4gIFwiSm9yZGFuaWFuIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJKT0RcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiWWVuXCI6IHtcbiAgICBcImNvZGVcIjogXCJKUFlcIixcbiAgICBcInN5bWJvbFwiOiBcIsKlXCJcbiAgfSxcbiAgXCJLZW55YW4gU2hpbGxpbmdcIjoge1xuICAgIFwiY29kZVwiOiBcIktFU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJTb21cIjoge1xuICAgIFwiY29kZVwiOiBcIktHU1wiLFxuICAgIFwic3ltYm9sXCI6IFwi0LvQslwiXG4gIH0sXG4gIFwiUmllbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiS0hSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLhn5tcIlxuICB9LFxuICBcIkNvbW9ybyBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiS01GXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk5vcnRoIEtvcmVhbiBXb25cIjoge1xuICAgIFwiY29kZVwiOiBcIktQV1wiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKpXCJcbiAgfSxcbiAgXCJXb25cIjoge1xuICAgIFwiY29kZVwiOiBcIktSV1wiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKpXCJcbiAgfSxcbiAgXCJLdXdhaXRpIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJLV0RcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQ2F5bWFuIElzbGFuZHMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJLWURcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlRlbmdlXCI6IHtcbiAgICBcImNvZGVcIjogXCJLWlRcIixcbiAgICBcInN5bWJvbFwiOiBcItC70LJcIlxuICB9LFxuICBcIktpcFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTEFLXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigq1cIlxuICB9LFxuICBcIkxlYmFuZXNlIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJMQlBcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJTcmkgTGFua2EgUnVwZWVcIjoge1xuICAgIFwiY29kZVwiOiBcIkxLUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKoXCJcbiAgfSxcbiAgXCJMaWJlcmlhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkxSRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiTGl0aHVhbmlhbiBMaXRhc1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiTFRMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJMdFwiXG4gIH0sXG4gIFwiTGF0dmlhbiBMYXRzXCI6IHtcbiAgICBcImNvZGVcIjogXCJMVkxcIixcbiAgICBcInN5bWJvbFwiOiBcIkxzXCJcbiAgfSxcbiAgXCJMaWJ5YW4gRGluYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkxZRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJNb3JvY2NhbiBEaXJoYW1cIjoge1xuICAgIFwiY29kZVwiOiBcIk1BRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJNb2xkb3ZhbiBMZXVcIjoge1xuICAgIFwiY29kZVwiOiBcIk1ETFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJNYWxhZ2FzeSBBcmlhcnlcIjoge1xuICAgIFwiY29kZVwiOiBcIk1HQVwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJEZW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTUtEXCIsXG4gICAgXCJzeW1ib2xcIjogXCLQtNC10L1cIlxuICB9LFxuICBcIkt5YXRcIjoge1xuICAgIFwiY29kZVwiOiBcIk1NS1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJUdWdyaWtcIjoge1xuICAgIFwiY29kZVwiOiBcIk1OVFwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKuXCJcbiAgfSxcbiAgXCJQYXRhY2FcIjoge1xuICAgIFwiY29kZVwiOiBcIk1PUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJPdWd1aXlhXCI6IHtcbiAgICBcImNvZGVcIjogXCJNUk9cIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTWF1cml0aXVzIFJ1cGVlXCI6IHtcbiAgICBcImNvZGVcIjogXCJNVVJcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqFwiXG4gIH0sXG4gIFwiUnVmaXlhYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTVZSXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkt3YWNoYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTVdLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk1leGljYW4gUGVzbyBNZXhpY2FuIFVuaWRhZCBkZSBJbnZlcnNpb24gKFVESSlcIjoge1xuICAgIFwiY29kZVwiOiBcIk1YTiBNWFZcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIk1hbGF5c2lhbiBSaW5nZ2l0XCI6IHtcbiAgICBcImNvZGVcIjogXCJNWVJcIixcbiAgICBcInN5bWJvbFwiOiBcIlJNXCJcbiAgfSxcbiAgXCJNZXRpY2FsXCI6IHtcbiAgICBcImNvZGVcIjogXCJNWk5cIixcbiAgICBcInN5bWJvbFwiOiBcIk1UXCJcbiAgfSxcbiAgXCJOYWlyYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTkdOXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqZcIlxuICB9LFxuICBcIkNvcmRvYmEgT3JvXCI6IHtcbiAgICBcImNvZGVcIjogXCJOSU9cIixcbiAgICBcInN5bWJvbFwiOiBcIkMkXCJcbiAgfSxcbiAgXCJOb3J3ZWdpYW4gS3JvbmVcIjoge1xuICAgIFwiY29kZVwiOiBcIk5PS1wiLFxuICAgIFwic3ltYm9sXCI6IFwia3JcIlxuICB9LFxuICBcIk5lcGFsZXNlIFJ1cGVlXCI6IHtcbiAgICBcImNvZGVcIjogXCJOUFJcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqFwiXG4gIH0sXG4gIFwiTmV3IFplYWxhbmQgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJOWkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlJpYWwgT21hbmlcIjoge1xuICAgIFwiY29kZVwiOiBcIk9NUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi77e8XCJcbiAgfSxcbiAgXCJCYWxib2EgVVMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJQQUIgVVNEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJCLy5cIlxuICB9LFxuICBcIk51ZXZvIFNvbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUEVOXCIsXG4gICAgXCJzeW1ib2xcIjogXCJTLy5cIlxuICB9LFxuICBcIktpbmFcIjoge1xuICAgIFwiY29kZVwiOiBcIlBHS1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJQaGlsaXBwaW5lIFBlc29cIjoge1xuICAgIFwiY29kZVwiOiBcIlBIUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiUGhwXCJcbiAgfSxcbiAgXCJQYWtpc3RhbiBSdXBlZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUEtSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqhcIlxuICB9LFxuICBcIlpsb3R5XCI6IHtcbiAgICBcImNvZGVcIjogXCJQTE5cIixcbiAgICBcInN5bWJvbFwiOiBcInrFglwiXG4gIH0sXG4gIFwiR3VhcmFuaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUFlHXCIsXG4gICAgXCJzeW1ib2xcIjogXCJHc1wiXG4gIH0sXG4gIFwiUWF0YXJpIFJpYWxcIjoge1xuICAgIFwiY29kZVwiOiBcIlFBUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi77e8XCJcbiAgfSxcbiAgXCJOZXcgTGV1XCI6IHtcbiAgICBcImNvZGVcIjogXCJST05cIixcbiAgICBcInN5bWJvbFwiOiBcImxlaVwiXG4gIH0sXG4gIFwiU2VyYmlhbiBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUlNEXCIsXG4gICAgXCJzeW1ib2xcIjogXCLQlNC40L0uXCJcbiAgfSxcbiAgXCJSdXNzaWFuIFJ1YmxlXCI6IHtcbiAgICBcImNvZGVcIjogXCJSVUJcIixcbiAgICBcInN5bWJvbFwiOiBcItGA0YPQsVwiXG4gIH0sXG4gIFwiUndhbmRhIEZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJSV0ZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiU2F1ZGkgUml5YWxcIjoge1xuICAgIFwiY29kZVwiOiBcIlNBUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi77e8XCJcbiAgfSxcbiAgXCJTb2xvbW9uIElzbGFuZHMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJTQkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlNleWNoZWxsZXMgUnVwZWVcIjoge1xuICAgIFwiY29kZVwiOiBcIlNDUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKoXCJcbiAgfSxcbiAgXCJTdWRhbmVzZSBQb3VuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0RHXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlN3ZWRpc2ggS3JvbmFcIjoge1xuICAgIFwiY29kZVwiOiBcIlNFS1wiLFxuICAgIFwic3ltYm9sXCI6IFwia3JcIlxuICB9LFxuICBcIlNpbmdhcG9yZSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlNHRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiU2FpbnQgSGVsZW5hIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJTSFBcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJMZW9uZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0xMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlNvbWFsaSBTaGlsbGluZ1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiU09TXCIsXG4gICAgXCJzeW1ib2xcIjogXCJTXCJcbiAgfSxcbiAgXCJTdXJpbmFtIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU1JEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJEb2JyYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU1REXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkVsIFNhbHZhZG9yIENvbG9uIFVTIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU1ZDIFVTRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiU3lyaWFuIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJTWVBcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJMaWxhbmdlbmlcIjoge1xuICAgIFwiY29kZVwiOiBcIlNaTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJCYWh0XCI6IHtcbiAgICBcImNvZGVcIjogXCJUSEJcIixcbiAgICBcInN5bWJvbFwiOiBcIuC4v1wiXG4gIH0sXG4gIFwiU29tb25pXCI6IHtcbiAgICBcImNvZGVcIjogXCJUSlNcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTWFuYXRcIjoge1xuICAgIFwiY29kZVwiOiBcIlRNVFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJUdW5pc2lhbiBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVE5EXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlBhJ2FuZ2FcIjoge1xuICAgIFwiY29kZVwiOiBcIlRPUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJUdXJraXNoIExpcmFcIjoge1xuICAgIFwiY29kZVwiOiBcIlRSWVwiLFxuICAgIFwic3ltYm9sXCI6IFwiVExcIlxuICB9LFxuICBcIlRyaW5pZGFkIGFuZCBUb2JhZ28gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJUVERcIixcbiAgICBcInN5bWJvbFwiOiBcIlRUJFwiXG4gIH0sXG4gIFwiTmV3IFRhaXdhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlRXRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiTlQkXCJcbiAgfSxcbiAgXCJUYW56YW5pYW4gU2hpbGxpbmdcIjoge1xuICAgIFwiY29kZVwiOiBcIlRaU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJIcnl2bmlhXCI6IHtcbiAgICBcImNvZGVcIjogXCJVQUhcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCtFwiXG4gIH0sXG4gIFwiVWdhbmRhIFNoaWxsaW5nXCI6IHtcbiAgICBcImNvZGVcIjogXCJVR1hcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiVVMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJVU0RcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlBlc28gVXJ1Z3VheW8gVXJ1Z3VheSBQZXNvIGVuIFVuaWRhZGVzIEluZGV4YWRhc1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiVVlVIFVZSVwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFVcIlxuICB9LFxuICBcIlV6YmVraXN0YW4gU3VtXCI6IHtcbiAgICBcImNvZGVcIjogXCJVWlNcIixcbiAgICBcInN5bWJvbFwiOiBcItC70LJcIlxuICB9LFxuICBcIkJvbGl2YXIgRnVlcnRlXCI6IHtcbiAgICBcImNvZGVcIjogXCJWRUZcIixcbiAgICBcInN5bWJvbFwiOiBcIkJzXCJcbiAgfSxcbiAgXCJEb25nXCI6IHtcbiAgICBcImNvZGVcIjogXCJWTkRcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCq1wiXG4gIH0sXG4gIFwiVmF0dVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVlVWXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlRhbGFcIjoge1xuICAgIFwiY29kZVwiOiBcIldTVFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDRkEgRnJhbmMgQkVBQ1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEFGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlNpbHZlclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEFHXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkdvbGRcIjoge1xuICAgIFwiY29kZVwiOiBcIlhBVVwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJCb25kIE1hcmtldHMgVW5pdHMgRXVyb3BlYW4gQ29tcG9zaXRlIFVuaXQgKEVVUkNPKVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEJBXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkV1cm9wZWFuIE1vbmV0YXJ5IFVuaXQgKEUuTS5VLi02KVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEJCXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkV1cm9wZWFuIFVuaXQgb2YgQWNjb3VudCA5KEUuVS5BLi05KVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEJDXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkV1cm9wZWFuIFVuaXQgb2YgQWNjb3VudCAxNyhFLlUuQS4tMTcpXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQkRcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRWFzdCBDYXJpYmJlYW4gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQ0RcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIlNEUlwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWERSXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlVJQy1GcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEZVXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkNGQSBGcmFuYyBCQ0VBT1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiWE9GXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlBhbGxhZGl1bVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWFBEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkNGUCBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiWFBGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlBsYXRpbnVtXCI6IHtcbiAgICBcImNvZGVcIjogXCJYUFRcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQ29kZXMgc3BlY2lmaWNhbGx5IHJlc2VydmVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzXCI6IHtcbiAgICBcImNvZGVcIjogXCJYVFNcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiWWVtZW5pIFJpYWxcIjoge1xuICAgIFwiY29kZVwiOiBcIllFUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi77e8XCJcbiAgfSxcbiAgXCJSYW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJaQVJcIixcbiAgICBcInN5bWJvbFwiOiBcIlJcIlxuICB9LFxuICBcIlJhbmQgTG90aVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWkFSIExTTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJSYW5kIE5hbWliaWEgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJaQVIgTkFEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlphbWJpYW4gS3dhY2hhXCI6IHtcbiAgICBcImNvZGVcIjogXCJaTUtcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiWmltYmFid2UgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJaV0xcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH1cbn07XG4iLCJ2YXIgZmluYW5jZSA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBmaW5hbmNlO1xuZmluYW5jZS5hY2NvdW50X3R5cGUgPSByZXF1aXJlKFwiLi9hY2NvdW50X3R5cGVcIik7XG5maW5hbmNlLnRyYW5zYWN0aW9uX3R5cGUgPSByZXF1aXJlKFwiLi90cmFuc2FjdGlvbl90eXBlXCIpO1xuZmluYW5jZS5jdXJyZW5jeSA9IHJlcXVpcmUoXCIuL2N1cnJlbmN5XCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJkZXBvc2l0XCIsXG4gIFwid2l0aGRyYXdhbFwiLFxuICBcInBheW1lbnRcIixcbiAgXCJpbnZvaWNlXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIlRDUFwiLFxuICBcIkhUVFBcIixcbiAgXCJTRERcIixcbiAgXCJSQU1cIixcbiAgXCJHQlwiLFxuICBcIkNTU1wiLFxuICBcIlNTTFwiLFxuICBcIkFHUFwiLFxuICBcIlNRTFwiLFxuICBcIkZUUFwiLFxuICBcIlBDSVwiLFxuICBcIkFJXCIsXG4gIFwiQURQXCIsXG4gIFwiUlNTXCIsXG4gIFwiWE1MXCIsXG4gIFwiRVhFXCIsXG4gIFwiQ09NXCIsXG4gIFwiSEREXCIsXG4gIFwiVEhYXCIsXG4gIFwiU01UUFwiLFxuICBcIlNNU1wiLFxuICBcIlVTQlwiLFxuICBcIlBOR1wiLFxuICBcIlNBU1wiLFxuICBcIklCXCIsXG4gIFwiU0NTSVwiLFxuICBcIkpTT05cIixcbiAgXCJYU1NcIixcbiAgXCJKQk9EXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImF1eGlsaWFyeVwiLFxuICBcInByaW1hcnlcIixcbiAgXCJiYWNrLWVuZFwiLFxuICBcImRpZ2l0YWxcIixcbiAgXCJvcGVuLXNvdXJjZVwiLFxuICBcInZpcnR1YWxcIixcbiAgXCJjcm9zcy1wbGF0Zm9ybVwiLFxuICBcInJlZHVuZGFudFwiLFxuICBcIm9ubGluZVwiLFxuICBcImhhcHRpY1wiLFxuICBcIm11bHRpLWJ5dGVcIixcbiAgXCJibHVldG9vdGhcIixcbiAgXCJ3aXJlbGVzc1wiLFxuICBcIjEwODBwXCIsXG4gIFwibmV1cmFsXCIsXG4gIFwib3B0aWNhbFwiLFxuICBcInNvbGlkIHN0YXRlXCIsXG4gIFwibW9iaWxlXCJcbl07XG4iLCJ2YXIgaGFja2VyID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGhhY2tlcjtcbmhhY2tlci5hYmJyZXZpYXRpb24gPSByZXF1aXJlKFwiLi9hYmJyZXZpYXRpb25cIik7XG5oYWNrZXIuYWRqZWN0aXZlID0gcmVxdWlyZShcIi4vYWRqZWN0aXZlXCIpO1xuaGFja2VyLm5vdW4gPSByZXF1aXJlKFwiLi9ub3VuXCIpO1xuaGFja2VyLnZlcmIgPSByZXF1aXJlKFwiLi92ZXJiXCIpO1xuaGFja2VyLmluZ3ZlcmIgPSByZXF1aXJlKFwiLi9pbmd2ZXJiXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJiYWNraW5nIHVwXCIsXG4gIFwiYnlwYXNzaW5nXCIsXG4gIFwiaGFja2luZ1wiLFxuICBcIm92ZXJyaWRpbmdcIixcbiAgXCJjb21wcmVzc2luZ1wiLFxuICBcImNvcHlpbmdcIixcbiAgXCJuYXZpZ2F0aW5nXCIsXG4gIFwiaW5kZXhpbmdcIixcbiAgXCJjb25uZWN0aW5nXCIsXG4gIFwiZ2VuZXJhdGluZ1wiLFxuICBcInF1YW50aWZ5aW5nXCIsXG4gIFwiY2FsY3VsYXRpbmdcIixcbiAgXCJzeW50aGVzaXppbmdcIixcbiAgXCJ0cmFuc21pdHRpbmdcIixcbiAgXCJwcm9ncmFtbWluZ1wiLFxuICBcInBhcnNpbmdcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiZHJpdmVyXCIsXG4gIFwicHJvdG9jb2xcIixcbiAgXCJiYW5kd2lkdGhcIixcbiAgXCJwYW5lbFwiLFxuICBcIm1pY3JvY2hpcFwiLFxuICBcInByb2dyYW1cIixcbiAgXCJwb3J0XCIsXG4gIFwiY2FyZFwiLFxuICBcImFycmF5XCIsXG4gIFwiaW50ZXJmYWNlXCIsXG4gIFwic3lzdGVtXCIsXG4gIFwic2Vuc29yXCIsXG4gIFwiZmlyZXdhbGxcIixcbiAgXCJoYXJkIGRyaXZlXCIsXG4gIFwicGl4ZWxcIixcbiAgXCJhbGFybVwiLFxuICBcImZlZWRcIixcbiAgXCJtb25pdG9yXCIsXG4gIFwiYXBwbGljYXRpb25cIixcbiAgXCJ0cmFuc21pdHRlclwiLFxuICBcImJ1c1wiLFxuICBcImNpcmN1aXRcIixcbiAgXCJjYXBhY2l0b3JcIixcbiAgXCJtYXRyaXhcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiYmFjayB1cFwiLFxuICBcImJ5cGFzc1wiLFxuICBcImhhY2tcIixcbiAgXCJvdmVycmlkZVwiLFxuICBcImNvbXByZXNzXCIsXG4gIFwiY29weVwiLFxuICBcIm5hdmlnYXRlXCIsXG4gIFwiaW5kZXhcIixcbiAgXCJjb25uZWN0XCIsXG4gIFwiZ2VuZXJhdGVcIixcbiAgXCJxdWFudGlmeVwiLFxuICBcImNhbGN1bGF0ZVwiLFxuICBcInN5bnRoZXNpemVcIixcbiAgXCJpbnB1dFwiLFxuICBcInRyYW5zbWl0XCIsXG4gIFwicHJvZ3JhbVwiLFxuICBcInJlYm9vdFwiLFxuICBcInBhcnNlXCJcbl07XG4iLCJ2YXIgZW4gPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gZW47XG5lbi50aXRsZSA9IFwiRW5nbGlzaFwiO1xuZW4uc2VwYXJhdG9yID0gXCIgJiBcIjtcbmVuLmFkZHJlc3MgPSByZXF1aXJlKFwiLi9hZGRyZXNzXCIpO1xuZW4uY3JlZGl0X2NhcmQgPSByZXF1aXJlKFwiLi9jcmVkaXRfY2FyZFwiKTtcbmVuLmNvbXBhbnkgPSByZXF1aXJlKFwiLi9jb21wYW55XCIpO1xuZW4uaW50ZXJuZXQgPSByZXF1aXJlKFwiLi9pbnRlcm5ldFwiKTtcbmVuLmxvcmVtID0gcmVxdWlyZShcIi4vbG9yZW1cIik7XG5lbi5uYW1lID0gcmVxdWlyZShcIi4vbmFtZVwiKTtcbmVuLnBob25lX251bWJlciA9IHJlcXVpcmUoXCIuL3Bob25lX251bWJlclwiKTtcbmVuLmNlbGxfcGhvbmUgPSByZXF1aXJlKFwiLi9jZWxsX3Bob25lXCIpO1xuZW4uYnVzaW5lc3MgPSByZXF1aXJlKFwiLi9idXNpbmVzc1wiKTtcbmVuLmNvbW1lcmNlID0gcmVxdWlyZShcIi4vY29tbWVyY2VcIik7XG5lbi50ZWFtID0gcmVxdWlyZShcIi4vdGVhbVwiKTtcbmVuLmhhY2tlciA9IHJlcXVpcmUoXCIuL2hhY2tlclwiKTtcbmVuLmFwcCA9IHJlcXVpcmUoXCIuL2FwcFwiKTtcbmVuLmZpbmFuY2UgPSByZXF1aXJlKFwiLi9maW5hbmNlXCIpO1xuZW4uZGF0ZSA9IHJlcXVpcmUoXCIuL2RhdGVcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFyamFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21haGRpZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zcHJheWFnYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydXppbmF2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1NreWhhcnRtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbW9zY296LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t1cmFmaXJlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzkxYmlsYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWdvcmdhcnliYWxkaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYWxlYm9nZGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbHlraGludi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2VsaGVsaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3VzaHNvbGl0YXJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvcmV5d2ViLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nub3dzaGFkZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmV1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ob2xkZW53ZWIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGV5aW1qdWFuaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbnZleC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91bnRlcmRyZWh0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbGxlZ2VtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVlamZhbmNoZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5keWlzb25saW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3VsdHJhZ2V4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Z1Y2tfeW91X3R3by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGVsbGVjaGFybGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F0ZW5ldXBvcHVsYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWhtZXRhbHBiYWxrYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU3RpZXZpdXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2VyZW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3N2YWxkYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5nZWxjZWJhbGxvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGllcnJ5a29ibGVudHovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGV0ZXJsYW5kdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXRhcmluby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZWdsb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJhbmRjbGF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZsYW1lX2thaXphci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haG1ldHN1bGVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pY29sYXNmb2xsaW90LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pheXJvYmluc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvcmVyaXhvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb2xhZ2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaHplbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJramVua2lucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWNvbGFpX2xhcnNlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ndC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ub3hkemluZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGFnb29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lkaW90LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pemtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYWRlbmdsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdXRsdTgyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NpbW9iZW5zby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92b2Npbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3VpaWlwb250ZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc295amF2aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NoYXVzdGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RvbWFzbGF1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1ZpblRob21hcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9NYW5pa1JhdGhlZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYW5nYXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NlbXNoaWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVlbXVucm9lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL19zaGFoZWRrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VuZGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQmlsbFNLZW5uZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGl2eWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zaGhlbXNsZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2luZHJlc29yaHVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NvZmZlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci85bGVzc29ucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saW51eDI5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0NoYWtpbnRvc2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5hYW1pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvcmVpcmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hhZGVlZDkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2NvdHRrY2xhcmsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVkYnJpZGdlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWxsZWVkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyYWthc2luYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmlpbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9CcmlhblB1cmtpc3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFlbG1hcnRpbmhvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J1YmxpZW5rby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXZhbmtvc2hhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9aYWNoYXJ5Wm9yYmFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RpbW1pbGx3b29kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2h1YXNvcnRpbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFtZW5sZWV0dXJrcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b21hc19qYW5vdXNlay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXJyaGFhc2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvUnVzc2VsbEJpc2hvcC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmFqZXNod2FyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hY2h0bWVpc3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYnJhY2NvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jlcm1vbnBhaW50ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWJkdWxsaW5kZW5pcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pc2Fjb3N0YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdXByYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95YWxvemhraW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhbmRsZXJ2ZHcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWFtZ2FydGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3ZpY3RhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbW1hZGVsaW1pdGVkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JveWJhcmJlcnVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F4ZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmxhZGFyYmF0b3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmZiZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3lyb3BpYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5raXRpbmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHJhbmVibG93LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZsYXNobXVycGh5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0NocmlzRmFyaW5hNzgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFsaW9tZWdhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nhc2NoYW10LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ptX2RlbmlzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fub2ZmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tlbm55YWRyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYXR5cmtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rpbmd5aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGVycnl4bGlmZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYXJvbmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2luZGF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BycnN0bi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lZHVhcmRvc3R1YXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RoaWxpcHNpdmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvR2F2aWNvSW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhaXJlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2hpeHgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmlnbWFuY2hvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JsYWtlc2lta2lucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZWVpaW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGpydXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdWJlcnNjaGl6by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9reWxlZm91bmRyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jbGF1ZGlvZ3VnbGllcmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmlwcGxlbWRrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2V4ZW50cmljaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYWtlbW9vcmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9hb2VkdW1lZGVpcm9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Bvb3JtaW5pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RlcmVzaGVua292LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tlcnlpbG1hei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYXlkbl93b29kcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydWRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xsdW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2dhdXJhdl9iYWdoZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFtaWVicml0dGFpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYWRsaXR0bGVkdWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BpZmFnb3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWdyb21vdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZW5lZnJpdHovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXJ3YW5oZXNyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaWVzZWxsYXdzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcmVtaWFoYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb3JpZGhhbmR5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYWVuc2VsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJld2NvaGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NtYWN6bnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ29uemFsb3JvYmFpbmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFuZGluaV9tLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N5ZGxhd3JlbmNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NkaGFycmlzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGdlcmtlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZXdpc2FpbnNsaWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhcmxpZWN3YWl0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2Jic2NoaWxsZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmxleHJzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdHRkZXRhaWxzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhcXVlbHdpbHNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXJzaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tcm1hcnRpbmVhdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vcG5zcmNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hnaGFycnlnby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXhpbXNlc2h1ay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91eGFsZXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FtaWhhaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFucG9yeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGFydmluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2VtYXJxdWVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plZmZmaXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3J5c3RhbGZpc3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb2tlc2hfY29kZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlZGFtaWFuaGRlei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kcG1hY2hhZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZnVud2F0ZXJjYXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGltb3RoeWNkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2l2YW5maWxpcG92YmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGljYXJkMTAyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmNvYmFyYm9zYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rcmFzbm91a2hvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nM2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRlbWlsdGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JpY2tkdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vcGVyYXRpbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnVuZ2l3YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaHVnb21hbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9nb3JhZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGNfdXNlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ob3JhY2lvYmVsbGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU2xhYXBNZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZWVyYWdpdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pcW9uaWNkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lseWFfcGVzdG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJld2Fycm93LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NzaXNraW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvSGVucnlIb2ZmbWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Jkc2F1bmRlcnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRhbXN4dS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jdXJpb3Vzb2ZmaWNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZW1hZHJheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoaWdhbmdyYWhhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb2hldHRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pY2tmcmF0dGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J1bm5pbmdza3VsbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWR5c29uZGVzaWducy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmVudG9uX2NsYXJrZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZW5ueXNoZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJhZGVuaGFtbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdXJ0aW5jLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FtYW5ydXphaW5pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvcmV5aGFnZ2FyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9LYXJpbW1vdmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWFyb25hbGZyZWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd3Ryc2xkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ppdGFjaGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlcmVhbG1hcnZpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wbWVpc3NuZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb29vbXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhY2t5MTQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVzc2VkZHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpbm1hdHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hhbmVodWRzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWttdXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvSXNhcnlBbWFpcmFuaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcnRodXJob2xjb21iZTEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5keWNoaXBzdGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JveG1vZGVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Voc2FuZGlhcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvTHVjYXNQZXJkaWRhby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGFsdDBuaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zd2FwbG9yZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYWVsaWZhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BsYmFiaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3VpbGxlbWJvdGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJpbmRhbV8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmVuYnlyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGlhZ292ZXJuZXR0aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qbWlsbHNwYXlzYmlsbHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlrZW1haTJhd2Vzb21lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcnZvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21la2FsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0YTFleC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2JlcmdkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZlbGlwZWNzbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZWEyMTEwODcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2FyYW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rob295ZW5nYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYm92ZWZ1bmN0aW9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BjcmlkZXNhZ2Fpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYW5kb21saWVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0JyeWFuSG9yc2V5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hleWtlbm5ldGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFocGFycmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxsdGhpbmdzc21pdHR5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbnZlcm5vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXdlaW5yZWljaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbmNyZWFzZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWx2YXJhZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbHhuZHJ1c3Rpbm92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NvdXVmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29ya3VuY2F5bGFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0FNX0tuMi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nZWFycGl4ZWxzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jhc3NhbW9sb2d5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpbWFyZXRob21hcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb3NtYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU1VMaWlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21yamFtZXNub2JsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaWx2YW5tdWhsZW1hbm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hhbmVJeEQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFjaG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveWlnaXRwaW5hcmJhc2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnV6enVzYm9ybmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWFyb25rd2hpdGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm1sZXdpc3VrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dpYW5jYXJsb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmJpcmNrZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZF9ubnlfbV9jaGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NkaWRvbmF0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hdGFyaWJveS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYm90YXAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FyYWxlay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wc2Rlc2lnbnVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2x1ZHdpY3pha3Bhd2VsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lbWFuamFpdmFub3ZpYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYWx1bGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWhtYWRham1pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Zvdmthc29sb3Zldi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW1ncm92ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVyaWVuem83NzcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9uYXRoYW5zaW1tb25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lbHNvbmpveWNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1MwdWZpNG4zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3h0b3BoZXJwYXVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29ha3RyZWVtZWRpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYXRlc2NodWx0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9maW5kaW5namVubnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFtYW5rcmVhdGl2ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbnRvbnl6b3Rvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZV9zb2NpYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVlaGFtYmxleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zb2xpZF9jb2xvci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYmVsY2FiYW5zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21iaWxkZXJiYWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2trdXNhYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3JkeXZkYm9vbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJsb3NnYXZpbmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVjaGtpbmF0b3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmMyNy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZGJhbm5vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jcm9ha3gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VyaWJibGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tlcmloZW5hcmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2F0YWRlbGVvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nY21vcmxleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kdWl2dnYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FzY2hhZHJvc3RlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvckR1YnVncmFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dpbnRvcGlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdHRiaWxvdHRpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RheWxvcmxpbmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWVnZHJhd3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWVsbjFrcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWhtb3VkbWV0d2FsbHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU2lsdmVyZWRnZTkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVyZWtlYnJhZGxleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYXBweXBldGVyMTk4My8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90cmF2aXNfYXJub2xkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FydGVtX2tvc3RlbmtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fkb2JpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RheWtpaW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZWtfZGp1cmljLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NjaXBzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pZ3VlbG1lbmRlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdXN0aW5yaGVlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fsc29icm9va3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZnJvbngvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWNmbHlkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FudGlfdXJzby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGxmb3JkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RheXViZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVydGJvZXJsYW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcm9zaG9sbHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRhbW5hYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jeW50aGlhc2F2YXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211cmluZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFucm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGllbWlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phY2tpZXNhaWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvemFjc25pZGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lkdXVjay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbnRqYW51cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcm9vbl9zaGFybWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHNoc3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVoYWNrZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFlbGJyb29rc2pyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J5YW5tY2xhdWdobGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NsdWJiM3JyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90YXliZW5sb3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveHJpcHVub3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXlhc3Ryby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGl0eWFzdXRvbW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGlnaXRhbG1hdmVyaWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hqYXJ0c3Ryb3JuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2l0b2xtYWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZhdWdoYW5tb2ZmaXR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FiZG90cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pc25pZmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NlcmdleXNhZm9ub3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NjcmFwZG5iLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NocmlzbWo4My8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aXRvcmxlYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc29rYW5pd2FhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci96YWtpM2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWxseXpvcmVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21vY2FieXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29zbWFuaW5jZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kanNoZXJtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF2aWRoZW1waGlsbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93YWdobmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lY29keW1pY29uZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJhdmVlbl92aWpheWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmFiYnJ1Y2NpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NsaWZmc2VhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90cmF2aXNoaW5lcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdWxkYXJrYWx2aWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvRWx0X24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGhpbGxhcGllci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9va3NlYW5qYXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWQ4MzU1NTkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3VkcmV0a2Vza2luLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fuamhlcm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHVjazRmdWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Njb3R0X3JpbGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25vdWZhbGlicmFoaW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaDFicmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm9yZ2VzX21hcmNvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXZpbmhhbGxhZGF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NpYXJhbnIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RlZm9vby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWtlYmVlY2hhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b255bWlsbGlvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NodWFyYWljaHVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lyYWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGV0cmFuZ3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG1pdHJpeWNodXRhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYXJsaWVnYW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FyYXNobWFudGVnaGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRoYW1kYW5uYXdheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haW5zbGV5d2Fnb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3Zlbmxlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWlzYWxhYmlkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jlc2h1ci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJseXNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kdXRjaG5hZGlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RlZGR5emV0dGVybHVuZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW11ZWxrcmFmdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hb2ltZWRpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b2RkcmV3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvZGVwb2V0X3J1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FydHZhdnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVub2l0Ym91Y2FydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb21hcm1lbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb2xtYXJsb3Blei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jcmVhcnRpbmMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaG9ta2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2Fib3JlbnRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2JpbmNsZWRpZXJlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21heGltc29yb2tpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wbGFzdGljaW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2oyZGVtZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZWFjaGFuYW5yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thcGFsdWNjaW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVfYXNjYW5pby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yaWthcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXdpZHd1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmNvcmFtaXJlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmdlbGNyZWF0aXZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JwYXRleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wb3BleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZWhhdGthdGh1cmlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZV9wdXJwbGVidW5ueS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci8xbWFya2l6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FqYXh5X3J1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyZW5tdXJyZWxsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2R1ZGVzdGVpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vc2thcmxldmluc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvcnN0dWJlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZWhmeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWNpdmFkZWxpbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVhbmRyb3ZhcmFuZGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2NvdHRnYWxsYW50LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3Rvcl9oYXlkaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2F3cmIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnloYW5oYXNzYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW1heXZzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FfYnJpeGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thcm9sa3Jha293aWFrXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXJrdWxhbm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2VyYW43LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NnZ2F1cmF2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NocmlzX3dpdGtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvc29zaW5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BvbGFyaXR5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdHRsYXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJhbmRvbmJ1cmtlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbnN0YW50eC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZXlsb3JmZWxpei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jcmFpZ2VsaW1lbGlhaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYWNoZWxyZXZlbGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JlYWJvMTAxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhaG1lZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmlja3l5ZWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2owNG50b2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3Bicm9tYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZWJhc2h0b24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanBlbmljby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mcmFuY2lzX3ZlZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2t0YXllbGlwZWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2lraWxsby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWJiaWFuei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYXJyeWdlcmFyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9Ccm91bWlZb3Vzc2VmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzB0aGVycGxhbmV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21iaWxhbHNpZGRpcXVlMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pb251c3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3Jycl9ubC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saW1pbmhhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Jhd2RpZ2dpZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yeWFuZG93bmllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NldGhsb3VleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9waXhhZ2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJwaXRuai8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zd2l0bWVyNzc3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2V2bmNsY2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FuaWNrYWlyYWovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHV6aWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGJha2Rlc2lnbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVzYnVqdXBpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cGpvZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG93aWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGlua2lib2wvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFsaW50b3Jvc3ovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW1jb2RpbmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWd1c3RpbmNydWl6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2d1c290by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aG9tYXNzY2hyaWplci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdXBlcm91dG1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYWxtZXJyYXV0YW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2FicmllbGl6YWxvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dvamVhbnluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhdmlkYmFsZGllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL192b2p0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYXVyZW5ncmF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p5ZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL215bXlib3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVsbGxlby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJjaW90b2xlZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmluamFkM20wLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RvX3NvaGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhc3NsdW5zZm9yZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdXJpZHJhaGhhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZXZpc2FuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dyYWhhbWtlbm5lcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVwZXRpdG9ncmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW50b25nZW5raW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVzc29pbGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW1hbmRhYnV6YXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhZnJhbmtvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2NvbGVyby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kc3M0OS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXR0MzIyNC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ibHVlc2l4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3F1YWlsYW5kcXVhc2FyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0FsYmVydG9Db2NvY2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVwaW5za2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2VtZW50aXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWh1ZG9iaXZuaWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpYmF1dF9yZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vbGdhcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hvamJlcmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXRvbG9rb25uaWtvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXJldG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmF1cGludG9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dlZ290dmljZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveGFkaGl4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hY3hpbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2RueWxvYm9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZGNhbXBvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWRlYnl2YWRpbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXJ0b3N6ZGF3eWR6aWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VwZXJ2b3ZhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmtyZXR6bG9mZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92b25hY2hvby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXJ5bHdzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZXZlZGVzaWduZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXlsZXNiLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlcmJpZ3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVwYXVsYXdhZ25lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nZXNoYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2l6bWVlZGV2aWwxOTkxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL19zY290dGJ1cmdlc3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGlzb3Zza3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF2aWRzYXNkYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcnRkX3NpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvWW91bmdDdXRsYXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21nb250by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pdHN0b3RhbGx5YW15LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvcnF1aW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29zbW9uZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9va3NhbmFmcmV3ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvemF1ZXJrcmF1dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pYW1rZWl0aG1hc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pdGluaGF5YXJhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sbWphYnJldS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYW5kYWxhcmVvcGVucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGlua2xlZnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcG9uY2hvbWVuZGl2aWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVhbXBlcnJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JydW5vZGVzaWduMTIwNi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXNleWNhdmFuYWdoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2x1eGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG90Z3JpZGxpbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3BlZHdpZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWRld3VsZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXR0c2FwaWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGVsZGVybGVhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaHJpc3N0dW1waC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXlwaGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25zYW1veWxvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaHJpc3ZhbmRlcmtvb2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVzdG1lX3RpbW90aHlnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL290b3prLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ByaW56YWRpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2d1NXRhZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jeXJpbF9nYWlsbGFyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kX2tvYmVseWF0c2t5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rhbmlsb2MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbndkc2hhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvbWFuYnVsYWgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2traXJpbG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2R2ZHdpbmRlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW5ub2wvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhla2V2aW5qb25lcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qd2FsdGVyMTQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGltZ3Rob21hcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9idWRkaGFzb3VyY2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdXhwaXBlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGF0b25ldG9tbXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGlhbnNpZ2l0cC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZHJpZW50aHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2xpbW1rYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9na2FhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXJla2NyYW1lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZW5ueXlvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lcnJzb2Z0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3hhbGlvbm1hbGlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VkaGVuZGVyc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tleXVyaTg1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JveGFuZWphbW1ldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raW1jb29sLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Vka2YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0a2lucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGVzc2FuZHJvcmliZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYWNrc29ubGF0a2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGVicm9uamVubmFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvc3Rhc3B0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thcmxrYW5hbGwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbW95bmloYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFucGxpZWdvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhdWxpaGlydmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2VzbGV5dHJhbmtpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mamFndWVyby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ib3dicmljay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXNoYWFhYWFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3lhc3NpcnlhaHlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RwYXJyZWxsaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mb3RvbWFnaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWthX2phbWVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlbmlzZXBpcmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lxYmFscGVya2FzYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJ0aW5hbnN0eS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXJzZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcl9veS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdXN0aW5yb2IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2FicmllbHJvc3Nlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWxnb3Jkb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FybGZhaXJjbG91Z2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFlbGFiZWhzZXJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BpZXJyZXN0b2ZmZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbmpveXRoZXRhdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb2dhbmpsYW1iZXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JwZWV6eS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb3JleWdpbm5pdmFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hhbGhyb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXN2ZWV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xpbmdlc3dhcmFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvbHN2ZWluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BldGVyNTc2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JlaWRlaXJlZGFsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2V5bXVyZGFoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhcGhhZWxuaWtzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXZkaGV1dmVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21heGxpbmRlcm1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qaW1tdWlyaGVhZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZWdyZWF0aXZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZyYW5raWVmcmVlc2JpZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2J0dXJsaW5ja3gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvVGFsYmlfQ29uU2VwdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb25nbGl2ZW15d29yZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92YW5jaGVzei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWlrbGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlcm1hbm9icm90aGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Jlel9fX2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3JlZ3NxdWVlYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ncmVlbmJlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fcmFnem9yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FudGhvbnlzdWtvdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mbHVpZGJydXNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhY3RydHIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVobmdseW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JlcmdtYXJ0aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaHVnb2Nvcm5lam8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX2trZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHphbnRpZXZtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nhd2FsYXphci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zb3Zlc292ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb25zZ290d29vZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ieXJ5YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdnl0YXV0YXNfYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taXpoZ2FuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NpY2Vyb2JyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pbHNoZWxtZXJzc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2QzM3B0aG91Z2h0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhdmVjcmFpZ2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmNranJ2cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGV4YW5kZXJtYXllcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qY3ViaWMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3JhaWdyY29sZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFnYXdhcm1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2JfdGhvbWFzMTAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29mbGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFpa2Vsay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydGdpYmJvbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnVzc2VsbF9iYXlsaXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWhlc3Nsb3cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29keXNhbmZpbGlwcG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2VidGFueWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFkZWJ5YnJlbnRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kY2Fsb25hY2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVyZmVjdGZsb3cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvampzaWlpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhYXJhYnByZWV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t1bWFycmFqYW4xMjEyMy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pYW1zdGVmZmVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZW1pa2VuYWdsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jZWVrYXl0d2VldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYXJyeWJvbHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29uc3BpcmF0b3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFsbGFzYnBldGVycy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uM2RtYXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGVycGltb3N0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tpcmlsbHovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnlybmVjb3JlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pfZHJha2VfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhbGViam95Y2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnVzc29lZHUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaG9hbmdsb2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdG9ieXNheG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dvZnJhc2Rlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaW1hcG9zbnl5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RqaXNvdXNhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29rYW5kdW5nZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmlsbHlyb3NoYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3NrYW1heWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbW90aW9udGhpbmtzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tuaWxvYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hc2hvY2thMTgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFycmltby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXJ0am8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb21uaXp5YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lcm5lc3RzZW1lcmRhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJlYXNfcHIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWRnYXJjaHJpczk5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Rob21hc2dlaXNlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nc2VndWluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvYW5uZWZvdXJuaWVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlbWVyc2Rlc2lnbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRhbW1hcnNiYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFzaXJ3ZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uX3Rhc3NvbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamF2b3Jzemt5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZW1yZGF2ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95ZWNpZHNtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pY29sbGVyaWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhbmFwdWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmljb2xlZ2x5bm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVkemhpbl9taWxlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXNpZ25lcnZ6bS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raWFub3NocC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ldmFuZHJpeC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbHRlcmNodWNhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RocnViby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYV90aWF4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NzYmJfbWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG9ycGhlcm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF1cmlvbGcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJ1bm9fbWFydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWN0b3B1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVfd2luc2xldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2VtZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1NocmlpaWlpbXAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFjb2JiZW5uZXR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25mZWRvcm9mZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pYW1nbGlteS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGxhZ3JpbmdhdXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWlpYWlpYWlpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29sYW9sdXNvZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnVyeWFrbmljay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93aW0xay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWNrbGFja2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYTFjaGFwb25lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZXludmlsam9lbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdHJpa2V3YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnlhbmtpcmttYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmV3YWJvZ2Fkby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kb29vb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFnYW4xMjMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJpZmZzZXRpYXdhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbGVuYWRpc3NpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL213YXJrZW50aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpZXJyeW1laWVyXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yX2dhcmNpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kbWFja2VybWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JvcmFudHVsYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rb251cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zcGFjZXdvb2RfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J5dWNoaTMxMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ldmFuc2hhamVkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RyaXN0YW5sZWdyb3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hvYWliMjUzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fpc2xpbm5rZWxseS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9va2Nva2VyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RpbXBldHJpY29sYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdW5zaGluZWRnaXJsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYWRhbWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxlY2xhcnNvbml2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25vbWlkZXNpZ25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BldGViZXJuYXJkby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zY290dGllZHVkZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWxsaW5ldC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbXNvcGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ltYW1tdWh0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JlbmphbWluX2tuaWdodC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZXBkdWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9raTQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGFuY2VndXlhdHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmJveTE4OTUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW15d2ViYmIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcndldmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFydWludGVzZXR0ZGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JpY2J1cnRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZWxzaGQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmF0c2lyYWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJpbW96Y2lnbGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pmZmdyZG5yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzhkM2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2VuZXNlbGV6bmV2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsX2xpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NvdXBlcnBobHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXNsYXJraW5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzJmb2NrdXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2RhdmlzNTY1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3hpZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHVya3V0dXVsaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91eHdhcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGViaW5vY2xhcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2F1cmF2amFzc2FsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhdmlkbWVycmlxdWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWRzaXN0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZXdvZmZpY2VyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvam91cmluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RuaXJtYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2V2a2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXJfc2hpem5pdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbHVpc2lvX2F6ZXZlZG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2xvdWRzdHVkaW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFudmllcmljaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGV4aXZhbmljaGtpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mcmFuX21jaGFteS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZXJyZXRtYWdhbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmV0cmF5ZGFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhZGlra2FyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXRiZWVkb3Rjb20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVyZW15d29yYm95cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icGFydHJpZGdlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hhZWxrb3Blci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaWx2M3Jndm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxldml6aW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9obnNtaXRoYWdlbmN5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xhd2xid295LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpdG9yMzc2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rlc2FzdHJvem8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhpbW9fY3ovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFzb25tYXJram9uZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGhhdXNlcm1hbm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveHJhdmlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2d1aXNjaG1pdHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmlnb2Jyb254LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BhbmdoYWwwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pZ3VlbGtvb3JlbWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cmdlb25pc3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hyaXN0aWFub2xpZmYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FzcGVyZ3JsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lhbWthcm5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lwYXZlbGVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BpZXJyZV9uZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveTJncmFwaGljLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZXJsaW5ncnVsZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWxidXNjYWluZm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVubnlqaWVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0dXNob25hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VzdGViYW51cmliZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbWJyY2VjcmVhdGlvbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFuaWxsb3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWxsaW90bGV3aXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhcmxlc3JwcmF0dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92bGFkeW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW1tZWZmZXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nhcmxvc2JsYW5jb19ldS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZW9uZmVkb3Rvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYW5nYWZhbmdzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NocmlzX2ZyZWVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Rnb3JtdHgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJ5YW5fdG9waGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pwc2NyaWJibGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pZ2h0eTU1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhcmJvbnR3ZWx2ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pc2FhY2ZpZnRoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lhbWpkZWxlb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc25vd3dyaXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhcnB1dHJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RyZXdieXJlZXNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhY2hhY29yYXp6aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iaXN0cmlhbmlvc2lwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZ29vMDQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGVoYW1vbmRlbGxvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3lheXRlZWpheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hX2hhcnJpczg4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZ3Vuc2FuYWJyaWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvemZvcnJlc3Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vdmFsbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJsb3NqZ3NvdXNhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dlb2Jpa2FzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FoX2xpY2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9vbmV5ZG9vZGxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lcmRncjgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGRnZ2NjYWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvemFja2VlbGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25vcm1hbmJveC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbF9mdWVydGlzaW1vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lzbWFpbF9iaWx0YWdpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1YW5nb21lencvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam5tbnJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BhdHJpY2tjb29tYmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnlhbmpvaG5zb25fbWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFya29sc2NoZXNreS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZWZmZ29sZW5za2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3Zhc25pYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saW5kc2V5emlsbGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2F1Y2hvbWF0dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZnVzaW5hdHRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tldmlub2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2thbnN1cnJlZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRhbWF3ZXNvbWVmYWNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VtaWxlYm91ZGVsaW5nLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FyaXNoaV8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVhbm1hbWFydGluZXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2lraXppbmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhbnRobXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWtnaW5mby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZXJyb3JwaXhlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jdXJpb3Vzb25hdXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJoZWVtby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoYWVsY29sZW5zby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mb2N6emkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFydGlwMDcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhhb2RhbmcxNy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2huY2FmYXp6YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yb2JpbmxheWZpZWxkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZyYW5jaXNjb2Ftay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYmR1bGh5ZXVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmtsYW1iLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Vkb2JlbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmVzZW5mcmVkcmlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pa2FlbGpvcmh1bHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hyaXNzbG93aWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmluY2lhcnRzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21lZWxmb3JkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VsbGlvdG5vbHRlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95ZWh1ZGFiLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpamF5a2FydGhpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZnJvaHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zZXBfbWFydGlucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hdHRhY2tzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cjRkeWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHVtc2tpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2luc3RhbG94LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbmdvc2FuZ28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGF1bGZhcmluby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXpha3k5OTkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2l3aXVwb3Zlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9udmt6bmVtby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b21fZXZlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYXRidXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd29vZHNtYW4wMDEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zaG1lZGVza2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhld2lsbGJlYXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BzYWlrYWxpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvZV9ibGFjay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGVpbmFkc2F5cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJjdXNnb3JpbGxpdXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaG90YV92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pnaHlsbGViZXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NoaW56ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYW5wYWxvdW5lay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJlbWllc3Bva2VuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlcl9ydXUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFuc293dGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZlbGlwZWFwaXJlc3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFndWd6YnJhbmQyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wb3N0ZXJqb2IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmF0aGFsaWVfZnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm9iYnl0d29zaG9lcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kcmVpemxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcmVteW1vdXRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbGlzYWJldGhramFlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ub3RiYWRhcnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbW9oYW5yb2hpdGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamxzb2xlcmRlbHRvcm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXRza2F3c2FyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nsb3dzcG9jay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci96dmNoa2VsbHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2lsamFuc2xvZnN0cmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY3JhaWdoZW5uZWJlcnJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RydWJlYXR0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdWF1bWxvbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW1zY291dG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQmVub3VhcnJhZGVNLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dpcHN5X3JhZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZXRvbmV0X2lsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fya29rb2xleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pdHNhamltaXRoaW5nLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NtYWxvbnNvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY3RvcmRlYW5kYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fZHdpdGVfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JpY2hhcmRnYXJyZXR0cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ncmVncndpbGtpbnNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmF0b2xpbmljb2xhZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sdTRzaDFpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZWZhbm90aXJsb25pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29zdGlyYnUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFyY3lzdG9uZ2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFpdGFuYW1vcmVuby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoYWVsY29taXNrZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRoaWFyZGFuYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJjb21hbm9fLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RhdmlkY2F6YWxpcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWxjb25lcmllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dyZWdraWxpYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmNyYWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm9semFubWFyY28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG93X3Jlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92bGFqa2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGV0YXJfcHJvZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb25rc3ByLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FrbWFsZmlrcmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWZhY2NoaW5lbGxvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F0YW5pc20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFycnlfc2lzdGFsYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXVycmF5c3dpZnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm9id2Fzc2VybWFubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYXZyMWwwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZHNoZW5zZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXJfc3VidGxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RldmlsamhvXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWxpbWlhbm9mZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2V0cnVlc2RlbGwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHdpdHR5cG9yay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haXJza3lsYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG5lemt1bWFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RnYWpqYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hlcmlmX2IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FsdmFmYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb3Vpc19jdXJyaWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVlZW5yaWdodC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jeWJpbmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXlyb25uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY2t5c2hpdHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3dlZXRkZWxpc2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2JvbGxlcjEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmVzZGphc3NvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21lbHZpbmRpZGl0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHlzb2xvbW9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoYWlzc2VsZW5hdG9yXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sdm92ZW5vay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9naXVsaXVzYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZWx5YWV2X3JzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL292ZXJjbG9hY2tlZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYW1hbF9jaGFuZW1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbmN1Ym84Mi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZWxsb2ZldmVycnJyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21oYWxpZ293c2tpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1bmxhbmRpY3R3aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnU3OTIxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHl0bGF3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcmVtZXJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZpbmNoamtlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbmlnbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91bXVyZ2RrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Njb3R0ZmVsdGhhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYW5zZXJlbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXV0dV9rcmlzaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2R5dGFnZ2FydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9udGZibG9nLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RhbnZlZXJyYW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGZhbHVjYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWx4bGVyb3lkZXZhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdWNpbmdiZWxhbmc0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jhcmdhb3JvYmFsby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2xncnV2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0YWxld2luZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9reWxlZnJvc3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmF1bWFubnpvbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5nZWxjb2xiZXJnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhY2hpbmdhd2FzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pqc2hhdzE0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhbWFuYXRoYW5fcGR5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvaG5kZXplbWJlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWxzaG9lbnNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmFuZG9ubW9ycmVhbGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbnV0enVtaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmFuZG9uZmxhdHNvZGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2VyZ2V5YWxtb25lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tsZWZ1ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raXJhbmdvcGFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhdW1hbm5fYWxleC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXR0aGV3a2F5Xy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXlfd2lsYnVybi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGVzZ2FyZWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXByaWVuZGVhdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2hucmlvcmRhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93YWtlX2dzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZWtzaXRhcHB1cmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW1zZ3VsYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveGlsYW50cmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW1vbWVudWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2lyY2FsZWJncm92ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZXdicnVzaGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hzaW55bzIzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL200cmlvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thdGllbWRhbHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvczRmMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lY29tbWVyY2VpbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJsaW5qYXlha29keS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zd29vc2h5Y3VlYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW5nZHRoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvZGVyZGlhei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ibHVlZnhfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpdmVrcHJ2ci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYXNoYV9zaGVzdGFrb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXVnZW5lZXdlYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZ2NsZWdnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL24xZ2h0X2NvZGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RpeGNoZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmxha2VoYXdrc3dvcnRoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RydWVibG9vZF8zMy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYWlfbmluaF9uZ3V5ZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyY2xnb256YWxlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95ZXNtZWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZXBoY291ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kb3Jvbm1hbGtpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J1ZWhsZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuYXNuYWthd2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2lqYW5tYWhhcmphbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZWFyZXNhdmFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZWZ2ZGhhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90d2VldHViaGFpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZWNhcnBlbnRpZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZml0ZXJpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbnRvbnlyeW5keWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZDAwbWF6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZW9ubHl6ZWtlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pc3NhYWFteS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJsb3NtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbmVrZW50aGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmVldGFqYXllbmRyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJlbXlzaGlta28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVzdGlucmdyYWhhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGVmYW5vem9mZm9saS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vdmVycmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXJlYmF5MDA3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NodmVsbzk2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3B5cm9uaXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZWRqcGV0ZXJzZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnR5dWttYWV2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL193aWxsaWFtZ3VlcnJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsYmVydGF1Z3VzdGluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Zpa2FzaHBhdGhhazE4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tldmluam9obmRheXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmpfZGVtaWVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbGlycGl4b2lsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dvZGRhcmRsZXdpcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYWFzbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanFpdXNzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hleWNhbXRheWxvci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYXN0eWFfbWFuZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXN0ZXJtaW5kZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2Npbm9qYXNzbzEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbnlhbmNlY29tLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbmR5d29vZHJ1ZmYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmlnaGFuZGRlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYnRyYW5zcGFyZW50LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F2aWRkYXllbnRvbmJheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yaWNod2lsZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXlzaXhfZGl6enkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHVyOGxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NleWVkaG9zc2VpbjEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJpdmV0d2FnbmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VtbWFuZGVubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXZfZXNzZW50aWFscy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qbWZzb2NpYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3lhcmRlbm9vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXRlYW9kdml0ZXphLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dlYXZlcm1lZGlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211ZmFkZGFsX213LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhZmVlc2toYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXNoZXJuYXRhbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VsYXFvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VkZGllY2hlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NlY2FybG9zcHNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZtX2YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW5yaWNvY2ljY29uaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW5tYXJ0aW43MC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nbW91cmllci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kb25qYWluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21yeGxva2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3BlZHJvcGluaG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWl0YXJhZmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3NjYXJvd3VzdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yYWxwaF9sYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGFuY2hhamFueWFnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dvb2R5ZG90bXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVycnliYWkxOTA3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcnNoYWxsY2hlbl8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveGFtb3JlcC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haW9fX18vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhYWJhbmVfd2FpbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90eGN4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FrYXNoc2hhcm1hMzkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmFsbGluZ19zb3VsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhaW5yYWphLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211Z3VrYW1pbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2hhbm5lc25ldS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJrd2llbmFuZHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FydGhpcGFucmFqLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhbGFrYXl1cml5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsYW5femhhbmdfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xheWVyc3Nzcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXNwZXJub3Jka3Zpc3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlyZmFucXVyZXNoaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYW5uYV9zbWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvVk1pbGVzY3UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWVvbjU2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21fa2FsaWJyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zcmVlaml0aGV4cC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaWNlc2FsZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGhvb3RfYW1pdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zbWVub3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9uZXNvbWVsZW1vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92bGFkaW1pcmRldmljLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvZWxjaXByaWFuby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYWxpZ2FsaWhhcnVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J1bGVzd2FwbmlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NlcmVma2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWZhcmFmb25vdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWthc3ZpbmZvdGVjaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91cnJ1dGltZW9saS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmVhbmRhY29tLzEyOC5qcGdcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiY29tXCIsXG4gIFwiYml6XCIsXG4gIFwiaW5mb1wiLFxuICBcIm5hbWVcIixcbiAgXCJuZXRcIixcbiAgXCJvcmdcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiZ21haWwuY29tXCIsXG4gIFwieWFob28uY29tXCIsXG4gIFwiaG90bWFpbC5jb21cIlxuXTtcbiIsInZhciBpbnRlcm5ldCA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBpbnRlcm5ldDtcbmludGVybmV0LmZyZWVfZW1haWwgPSByZXF1aXJlKFwiLi9mcmVlX2VtYWlsXCIpO1xuaW50ZXJuZXQuZG9tYWluX3N1ZmZpeCA9IHJlcXVpcmUoXCIuL2RvbWFpbl9zdWZmaXhcIik7XG5pbnRlcm5ldC5hdmF0YXJfdXJpID0gcmVxdWlyZShcIi4vYXZhdGFyX3VyaVwiKTtcbiIsInZhciBsb3JlbSA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBsb3JlbTtcbmxvcmVtLndvcmRzID0gcmVxdWlyZShcIi4vd29yZHNcIik7XG5sb3JlbS5zdXBwbGVtZW50YWwgPSByZXF1aXJlKFwiLi9zdXBwbGVtZW50YWxcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImFiYmFzXCIsXG4gIFwiYWJkdWNvXCIsXG4gIFwiYWJlb1wiLFxuICBcImFic2NpZG9cIixcbiAgXCJhYnNjb25kaXR1c1wiLFxuICBcImFic2Vuc1wiLFxuICBcImFic29yYmVvXCIsXG4gIFwiYWJzcXVlXCIsXG4gIFwiYWJzdGVyZ29cIixcbiAgXCJhYnN1bVwiLFxuICBcImFidW5kYW5zXCIsXG4gIFwiYWJ1dG9yXCIsXG4gIFwiYWNjZWRvXCIsXG4gIFwiYWNjZW5kb1wiLFxuICBcImFjY2VwdHVzXCIsXG4gIFwiYWNjaXBpb1wiLFxuICBcImFjY29tbW9kb1wiLFxuICBcImFjY3VzYXRvclwiLFxuICBcImFjZXJcIixcbiAgXCJhY2VyYml0YXNcIixcbiAgXCJhY2VydnVzXCIsXG4gIFwiYWNpZHVzXCIsXG4gIFwiYWNpZXNcIixcbiAgXCJhY3F1aXJvXCIsXG4gIFwiYWNzaVwiLFxuICBcImFkYW1vXCIsXG4gIFwiYWRhdWdlb1wiLFxuICBcImFkZG9cIixcbiAgXCJhZGR1Y29cIixcbiAgXCJhZGVtcHRpb1wiLFxuICBcImFkZW9cIixcbiAgXCJhZGVwdGlvXCIsXG4gIFwiYWRmZWN0dXNcIixcbiAgXCJhZGZlcm9cIixcbiAgXCJhZGZpY2lvXCIsXG4gIFwiYWRmbGljdG9cIixcbiAgXCJhZGhhZXJvXCIsXG4gIFwiYWRodWNcIixcbiAgXCJhZGljaW9cIixcbiAgXCJhZGltcGxlb1wiLFxuICBcImFkaW52ZW50aXRpYXNcIixcbiAgXCJhZGlwaXNjb3JcIixcbiAgXCJhZGl1dm9cIixcbiAgXCJhZG1pbmlzdHJhdGlvXCIsXG4gIFwiYWRtaXJhdGlvXCIsXG4gIFwiYWRtaXR0b1wiLFxuICBcImFkbW9uZW9cIixcbiAgXCJhZG1vdmVvXCIsXG4gIFwiYWRudW9cIixcbiAgXCJhZG9wdG9cIixcbiAgXCJhZHNpZHVlXCIsXG4gIFwiYWRzdHJpbmdvXCIsXG4gIFwiYWRzdWVzY29cIixcbiAgXCJhZHN1bVwiLFxuICBcImFkdWxhdGlvXCIsXG4gIFwiYWR1bGVzY2Vuc1wiLFxuICBcImFkdWx0dXNcIixcbiAgXCJhZHVyb1wiLFxuICBcImFkdmVuaW9cIixcbiAgXCJhZHZlcnN1c1wiLFxuICBcImFkdm9jb1wiLFxuICBcImFlZGlmaWNpdW1cIixcbiAgXCJhZWdlclwiLFxuICBcImFlZ3JlXCIsXG4gIFwiYWVncm90YXRpb1wiLFxuICBcImFlZ3J1c1wiLFxuICBcImFlbmV1c1wiLFxuICBcImFlcXVpdGFzXCIsXG4gIFwiYWVxdXVzXCIsXG4gIFwiYWVyXCIsXG4gIFwiYWVzdGFzXCIsXG4gIFwiYWVzdGl2dXNcIixcbiAgXCJhZXN0dXNcIixcbiAgXCJhZXRhc1wiLFxuICBcImFldGVybnVzXCIsXG4gIFwiYWdlclwiLFxuICBcImFnZ2Vyb1wiLFxuICBcImFnZ3JlZGlvclwiLFxuICBcImFnbml0aW9cIixcbiAgXCJhZ25vc2NvXCIsXG4gIFwiYWdvXCIsXG4gIFwiYWl0XCIsXG4gIFwiYWl1bnRcIixcbiAgXCJhbGllbnVzXCIsXG4gIFwiYWxpaVwiLFxuICBcImFsaW9xdWlcIixcbiAgXCJhbGlxdWFcIixcbiAgXCJhbGl1c1wiLFxuICBcImFsbGF0dXNcIixcbiAgXCJhbG9cIixcbiAgXCJhbHRlclwiLFxuICBcImFsdHVzXCIsXG4gIFwiYWx2ZXVzXCIsXG4gIFwiYW1hcml0dWRvXCIsXG4gIFwiYW1iaXR1c1wiLFxuICBcImFtYnVsb1wiLFxuICBcImFtaWNpdGlhXCIsXG4gIFwiYW1pY3VsdW1cIixcbiAgXCJhbWlzc2lvXCIsXG4gIFwiYW1pdGFcIixcbiAgXCJhbWl0dG9cIixcbiAgXCJhbW9cIixcbiAgXCJhbW9yXCIsXG4gIFwiYW1vdmVvXCIsXG4gIFwiYW1wbGV4dXNcIixcbiAgXCJhbXBsaXR1ZG9cIixcbiAgXCJhbXBsdXNcIixcbiAgXCJhbmNpbGxhXCIsXG4gIFwiYW5nZWx1c1wiLFxuICBcImFuZ3VsdXNcIixcbiAgXCJhbmd1c3R1c1wiLFxuICBcImFuaW1hZHZlcnRvXCIsXG4gIFwiYW5pbWlcIixcbiAgXCJhbmltdXNcIixcbiAgXCJhbm51c1wiLFxuICBcImFuc2VyXCIsXG4gIFwiYW50ZVwiLFxuICBcImFudGVhXCIsXG4gIFwiYW50ZXBvbm9cIixcbiAgXCJhbnRpcXV1c1wiLFxuICBcImFwZXJpb1wiLFxuICBcImFwZXJ0ZVwiLFxuICBcImFwb3N0b2x1c1wiLFxuICBcImFwcGFyYXR1c1wiLFxuICBcImFwcGVsbG9cIixcbiAgXCJhcHBvbm9cIixcbiAgXCJhcHBvc2l0dXNcIixcbiAgXCJhcHByb2JvXCIsXG4gIFwiYXB0b1wiLFxuICBcImFwdHVzXCIsXG4gIFwiYXB1ZFwiLFxuICBcImFxdWFcIixcbiAgXCJhcmFcIixcbiAgXCJhcmFuZWFcIixcbiAgXCJhcmJpdHJvXCIsXG4gIFwiYXJib3JcIixcbiAgXCJhcmJ1c3R1bVwiLFxuICBcImFyY2FcIixcbiAgXCJhcmNlb1wiLFxuICBcImFyY2Vzc29cIixcbiAgXCJhcmN1c1wiLFxuICBcImFyZ2VudHVtXCIsXG4gIFwiYXJndW1lbnR1bVwiLFxuICBcImFyZ3VvXCIsXG4gIFwiYXJtYVwiLFxuICBcImFybWFyaXVtXCIsXG4gIFwiYXJtb1wiLFxuICBcImFyb1wiLFxuICBcImFyc1wiLFxuICBcImFydGljdWx1c1wiLFxuICBcImFydGlmaWNpb3NlXCIsXG4gIFwiYXJ0b1wiLFxuICBcImFyeFwiLFxuICBcImFzY2lzY29cIixcbiAgXCJhc2NpdFwiLFxuICBcImFzcGVyXCIsXG4gIFwiYXNwaWNpb1wiLFxuICBcImFzcG9ydG9cIixcbiAgXCJhc3NlbnRhdG9yXCIsXG4gIFwiYXN0cnVtXCIsXG4gIFwiYXRhdnVzXCIsXG4gIFwiYXRlclwiLFxuICBcImF0cXVpXCIsXG4gIFwiYXRyb2NpdGFzXCIsXG4gIFwiYXRyb3hcIixcbiAgXCJhdHRlcm9cIixcbiAgXCJhdHRvbGxvXCIsXG4gIFwiYXR0b25iaXR1c1wiLFxuICBcImF1Y3RvclwiLFxuICBcImF1Y3R1c1wiLFxuICBcImF1ZGFjaWFcIixcbiAgXCJhdWRheFwiLFxuICBcImF1ZGVudGlhXCIsXG4gIFwiYXVkZW9cIixcbiAgXCJhdWRpb1wiLFxuICBcImF1ZGl0b3JcIixcbiAgXCJhdWZlcm9cIixcbiAgXCJhdXJldXNcIixcbiAgXCJhdXJpc1wiLFxuICBcImF1cnVtXCIsXG4gIFwiYXV0XCIsXG4gIFwiYXV0ZW1cIixcbiAgXCJhdXR1c1wiLFxuICBcImF1eGlsaXVtXCIsXG4gIFwiYXZhcml0aWFcIixcbiAgXCJhdmFydXNcIixcbiAgXCJhdmVob1wiLFxuICBcImF2ZXJ0b1wiLFxuICBcImF2b2NvXCIsXG4gIFwiYmFpdWx1c1wiLFxuICBcImJhbGJ1c1wiLFxuICBcImJhcmJhXCIsXG4gIFwiYmFyZHVzXCIsXG4gIFwiYmFzaXVtXCIsXG4gIFwiYmVhdHVzXCIsXG4gIFwiYmVsbGljdXNcIixcbiAgXCJiZWxsdW1cIixcbiAgXCJiZW5lXCIsXG4gIFwiYmVuZWZpY2l1bVwiLFxuICBcImJlbmV2b2xlbnRpYVwiLFxuICBcImJlbmlnbmVcIixcbiAgXCJiZXN0aWFcIixcbiAgXCJiaWJvXCIsXG4gIFwiYmlzXCIsXG4gIFwiYmxhbmRpb3JcIixcbiAgXCJib251c1wiLFxuICBcImJvc1wiLFxuICBcImJyZXZpc1wiLFxuICBcImNhZG9cIixcbiAgXCJjYWVjdXNcIixcbiAgXCJjYWVsZXN0aXNcIixcbiAgXCJjYWVsdW1cIixcbiAgXCJjYWxhbWl0YXNcIixcbiAgXCJjYWxjYXJcIixcbiAgXCJjYWxjb1wiLFxuICBcImNhbGN1bHVzXCIsXG4gIFwiY2FsbGlkZVwiLFxuICBcImNhbXBhbmFcIixcbiAgXCJjYW5kaWR1c1wiLFxuICBcImNhbmlzXCIsXG4gIFwiY2Fub25pY3VzXCIsXG4gIFwiY2FudG9cIixcbiAgXCJjYXBpbGx1c1wiLFxuICBcImNhcGlvXCIsXG4gIFwiY2FwaXR1bHVzXCIsXG4gIFwiY2FwdG9cIixcbiAgXCJjYXB1dFwiLFxuICBcImNhcmJvXCIsXG4gIFwiY2FyY2VyXCIsXG4gIFwiY2FyZW9cIixcbiAgXCJjYXJpZXNcIixcbiAgXCJjYXJpb3N1c1wiLFxuICBcImNhcml0YXNcIixcbiAgXCJjYXJtZW5cIixcbiAgXCJjYXJwb1wiLFxuICBcImNhcnVzXCIsXG4gIFwiY2Fzc29cIixcbiAgXCJjYXN0ZVwiLFxuICBcImNhc3VzXCIsXG4gIFwiY2F0ZW5hXCIsXG4gIFwiY2F0ZXJ2YVwiLFxuICBcImNhdHR1c1wiLFxuICBcImNhdWRhXCIsXG4gIFwiY2F1c2FcIixcbiAgXCJjYXV0ZVwiLFxuICBcImNhdmVvXCIsXG4gIFwiY2F2dXNcIixcbiAgXCJjZWRvXCIsXG4gIFwiY2VsZWJyZXJcIixcbiAgXCJjZWxlclwiLFxuICBcImNlbG9cIixcbiAgXCJjZW5hXCIsXG4gIFwiY2VuYWN1bHVtXCIsXG4gIFwiY2Vub1wiLFxuICBcImNlbnN1cmFcIixcbiAgXCJjZW50dW1cIixcbiAgXCJjZXJub1wiLFxuICBcImNlcm51dXNcIixcbiAgXCJjZXJ0ZVwiLFxuICBcImNlcnRvXCIsXG4gIFwiY2VydHVzXCIsXG4gIFwiY2VydnVzXCIsXG4gIFwiY2V0ZXJhXCIsXG4gIFwiY2hhcmlzbWFcIixcbiAgXCJjaGlyb2dyYXBodW1cIixcbiAgXCJjaWJvXCIsXG4gIFwiY2lidXNcIixcbiAgXCJjaWN1dGFcIixcbiAgXCJjaWxpY2l1bVwiLFxuICBcImNpbWVudGFyaXVzXCIsXG4gIFwiY2ltaW5hdGlvXCIsXG4gIFwiY2luaXNcIixcbiAgXCJjaXJjdW12ZW5pb1wiLFxuICBcImNpdG9cIixcbiAgXCJjaXZpc1wiLFxuICBcImNpdml0YXNcIixcbiAgXCJjbGFtXCIsXG4gIFwiY2xhbW9cIixcbiAgXCJjbGFyb1wiLFxuICBcImNsYXJ1c1wiLFxuICBcImNsYXVkZW9cIixcbiAgXCJjbGF1c3RydW1cIixcbiAgXCJjbGVtZW50aWFcIixcbiAgXCJjbGliYW51c1wiLFxuICBcImNvYWR1bmF0aW9cIixcbiAgXCJjb2FlZ3Jlc2NvXCIsXG4gIFwiY29lcGlcIixcbiAgXCJjb2VyY2VvXCIsXG4gIFwiY29naXRvXCIsXG4gIFwiY29nbmF0dXNcIixcbiAgXCJjb2dub21lblwiLFxuICBcImNvZ29cIixcbiAgXCJjb2hhZXJvXCIsXG4gIFwiY29oaWJlb1wiLFxuICBcImNvaG9yc1wiLFxuICBcImNvbGxpZ29cIixcbiAgXCJjb2xsb2NvXCIsXG4gIFwiY29sbHVtXCIsXG4gIFwiY29sb1wiLFxuICBcImNvbG9yXCIsXG4gIFwiY29tYVwiLFxuICBcImNvbWJpYm9cIixcbiAgXCJjb21idXJvXCIsXG4gIFwiY29tZWRvXCIsXG4gIFwiY29tZXNcIixcbiAgXCJjb21ldGVzXCIsXG4gIFwiY29taXNcIixcbiAgXCJjb21pdGF0dXNcIixcbiAgXCJjb21tZW1vcm9cIixcbiAgXCJjb21taW5vclwiLFxuICBcImNvbW1vZG9cIixcbiAgXCJjb21tdW5pc1wiLFxuICBcImNvbXBhcm9cIixcbiAgXCJjb21wZWxsb1wiLFxuICBcImNvbXBsZWN0dXNcIixcbiAgXCJjb21wb25vXCIsXG4gIFwiY29tcHJlaGVuZG9cIixcbiAgXCJjb21wdHVzXCIsXG4gIFwiY29uYXR1c1wiLFxuICBcImNvbmNlZG9cIixcbiAgXCJjb25jaWRvXCIsXG4gIFwiY29uY3VsY29cIixcbiAgXCJjb25kaWNvXCIsXG4gIFwiY29uZHVjb1wiLFxuICBcImNvbmZlcm9cIixcbiAgXCJjb25maWRvXCIsXG4gIFwiY29uZm9ydG9cIixcbiAgXCJjb25mdWdvXCIsXG4gIFwiY29uZ3JlZ2F0aW9cIixcbiAgXCJjb25pY2lvXCIsXG4gIFwiY29uaWVjdG9cIixcbiAgXCJjb25pdG9yXCIsXG4gIFwiY29uaXVyYXRpb1wiLFxuICBcImNvbm9yXCIsXG4gIFwiY29ucXVlcm9yXCIsXG4gIFwiY29uc2NlbmRvXCIsXG4gIFwiY29uc2Vydm9cIixcbiAgXCJjb25zaWRlcm9cIixcbiAgXCJjb25zcGVyZ29cIixcbiAgXCJjb25zdGFuc1wiLFxuICBcImNvbnN1YXNvclwiLFxuICBcImNvbnRhYmVzY29cIixcbiAgXCJjb250ZWdvXCIsXG4gIFwiY29udGlnb1wiLFxuICBcImNvbnRyYVwiLFxuICBcImNvbnR1cmJvXCIsXG4gIFwiY29udmVudHVzXCIsXG4gIFwiY29udm9jb1wiLFxuICBcImNvcGlhXCIsXG4gIFwiY29waW9zZVwiLFxuICBcImNvcm51XCIsXG4gIFwiY29yb25hXCIsXG4gIFwiY29ycHVzXCIsXG4gIFwiY29ycmVwdGl1c1wiLFxuICBcImNvcnJpZ29cIixcbiAgXCJjb3Jyb2Jvcm9cIixcbiAgXCJjb3JydW1wb1wiLFxuICBcImNvcnVzY3VzXCIsXG4gIFwiY290aWRpZVwiLFxuICBcImNyYXB1bGFcIixcbiAgXCJjcmFzXCIsXG4gIFwiY3Jhc3RpbnVzXCIsXG4gIFwiY3JlYXRvclwiLFxuICBcImNyZWJlclwiLFxuICBcImNyZWJyb1wiLFxuICBcImNyZWRvXCIsXG4gIFwiY3Jlb1wiLFxuICBcImNyZXB0aW9cIixcbiAgXCJjcmVwdXNjdWx1bVwiLFxuICBcImNyZXNjb1wiLFxuICBcImNyZXRhXCIsXG4gIFwiY3JpYnJvXCIsXG4gIFwiY3JpbmlzXCIsXG4gIFwiY3J1Y2lhbWVudHVtXCIsXG4gIFwiY3J1ZGVsaXNcIixcbiAgXCJjcnVlbnR1c1wiLFxuICBcImNydXJcIixcbiAgXCJjcnVzdHVsdW1cIixcbiAgXCJjcnV4XCIsXG4gIFwiY3ViaWN1bGFyaXNcIixcbiAgXCJjdWJpdHVtXCIsXG4gIFwiY3Vib1wiLFxuICBcImN1aVwiLFxuICBcImN1aXVzXCIsXG4gIFwiY3VscGFcIixcbiAgXCJjdWxwb1wiLFxuICBcImN1bHRlbGx1c1wiLFxuICBcImN1bHR1cmFcIixcbiAgXCJjdW1cIixcbiAgXCJjdW5hYnVsYVwiLFxuICBcImN1bmFlXCIsXG4gIFwiY3VuY3RhdGlvXCIsXG4gIFwiY3VwaWRpdGFzXCIsXG4gIFwiY3VwaW9cIixcbiAgXCJjdXBwZWRpYVwiLFxuICBcImN1cHJlc3N1c1wiLFxuICBcImN1clwiLFxuICBcImN1cmFcIixcbiAgXCJjdXJhdGlvXCIsXG4gIFwiY3VyaWFcIixcbiAgXCJjdXJpb3NpdGFzXCIsXG4gIFwiY3VyaXNcIixcbiAgXCJjdXJvXCIsXG4gIFwiY3VycmljdWx1bVwiLFxuICBcImN1cnJ1c1wiLFxuICBcImN1cnNpbVwiLFxuICBcImN1cnNvXCIsXG4gIFwiY3Vyc3VzXCIsXG4gIFwiY3VydG9cIixcbiAgXCJjdXJ0dXNcIixcbiAgXCJjdXJ2b1wiLFxuICBcImN1cnZ1c1wiLFxuICBcImN1c3RvZGlhXCIsXG4gIFwiZGFtbmF0aW9cIixcbiAgXCJkYW1ub1wiLFxuICBcImRhcGlmZXJcIixcbiAgXCJkZWJlb1wiLFxuICBcImRlYmlsaXRvXCIsXG4gIFwiZGVjZW5zXCIsXG4gIFwiZGVjZXJub1wiLFxuICBcImRlY2V0XCIsXG4gIFwiZGVjaW11c1wiLFxuICBcImRlY2lwaW9cIixcbiAgXCJkZWNvclwiLFxuICBcImRlY3JldHVtXCIsXG4gIFwiZGVjdW1ib1wiLFxuICBcImRlZGVjb3JcIixcbiAgXCJkZWRpY29cIixcbiAgXCJkZWR1Y29cIixcbiAgXCJkZWZhZWNvXCIsXG4gIFwiZGVmZW5kb1wiLFxuICBcImRlZmVyb1wiLFxuICBcImRlZmVzc3VzXCIsXG4gIFwiZGVmZXRpc2NvclwiLFxuICBcImRlZmljaW9cIixcbiAgXCJkZWZpZ29cIixcbiAgXCJkZWZsZW9cIixcbiAgXCJkZWZsdW9cIixcbiAgXCJkZWZ1bmdvXCIsXG4gIFwiZGVnZW5lcm9cIixcbiAgXCJkZWdlcm9cIixcbiAgXCJkZWd1c3RvXCIsXG4gIFwiZGVpbmRlXCIsXG4gIFwiZGVsZWN0YXRpb1wiLFxuICBcImRlbGVnb1wiLFxuICBcImRlbGVvXCIsXG4gIFwiZGVsaWJlcm9cIixcbiAgXCJkZWxpY2F0ZVwiLFxuICBcImRlbGlucXVvXCIsXG4gIFwiZGVsdWRvXCIsXG4gIFwiZGVtZW5zXCIsXG4gIFwiZGVtZXJnb1wiLFxuICBcImRlbWl0dG9cIixcbiAgXCJkZW1vXCIsXG4gIFwiZGVtb25zdHJvXCIsXG4gIFwiZGVtb3JvclwiLFxuICBcImRlbXVsY2VvXCIsXG4gIFwiZGVtdW1cIixcbiAgXCJkZW5lZ29cIixcbiAgXCJkZW5pcXVlXCIsXG4gIFwiZGVuc1wiLFxuICBcImRlbnVuY2lvXCIsXG4gIFwiZGVudW9cIixcbiAgXCJkZW9yc3VtXCIsXG4gIFwiZGVwZXJlb1wiLFxuICBcImRlcG9ub1wiLFxuICBcImRlcG9wdWxvXCIsXG4gIFwiZGVwb3J0b1wiLFxuICBcImRlcHJhZWRvclwiLFxuICBcImRlcHJlY2F0b3JcIixcbiAgXCJkZXByaW1vXCIsXG4gIFwiZGVwcm9tb1wiLFxuICBcImRlcHVsc29cIixcbiAgXCJkZXB1dG9cIixcbiAgXCJkZXJlbGlucXVvXCIsXG4gIFwiZGVyaWRlb1wiLFxuICBcImRlcmlwaW9cIixcbiAgXCJkZXNpZGVyb1wiLFxuICBcImRlc2lub1wiLFxuICBcImRlc2lwaW9cIixcbiAgXCJkZXNvbG9cIixcbiAgXCJkZXNwYXJhdHVzXCIsXG4gIFwiZGVzcGVjdG9cIixcbiAgXCJkZXNwaXJtYXRpb1wiLFxuICBcImluZml0XCIsXG4gIFwiaW5mbGFtbWF0aW9cIixcbiAgXCJwYWVuc1wiLFxuICBcInBhdGlvclwiLFxuICBcInBhdHJpYVwiLFxuICBcInBhdHJvY2lub3JcIixcbiAgXCJwYXRydXVzXCIsXG4gIFwicGF1Y2lcIixcbiAgXCJwYXVsYXRpbVwiLFxuICBcInBhdXBlclwiLFxuICBcInBheFwiLFxuICBcInBlY2NhdHVzXCIsXG4gIFwicGVjY29cIixcbiAgXCJwZWN0b1wiLFxuICBcInBlY3R1c1wiLFxuICBcInBlY3VuaWFcIixcbiAgXCJwZWN1c1wiLFxuICBcInBlaW9yXCIsXG4gIFwicGVsXCIsXG4gIFwib2NlclwiLFxuICBcInNvY2l1c1wiLFxuICBcInNvZGFsaXRhc1wiLFxuICBcInNvbFwiLFxuICBcInNvbGVvXCIsXG4gIFwic29saW9cIixcbiAgXCJzb2xpdHVkb1wiLFxuICBcInNvbGl1bVwiLFxuICBcInNvbGxlcnNcIixcbiAgXCJzb2xsaWNpdG9cIixcbiAgXCJzb2x1bVwiLFxuICBcInNvbHVzXCIsXG4gIFwic29sdXRpb1wiLFxuICBcInNvbHZvXCIsXG4gIFwic29tbmljdWxvc3VzXCIsXG4gIFwic29tbnVzXCIsXG4gIFwic29uaXR1c1wiLFxuICBcInNvbm9cIixcbiAgXCJzb3BoaXNtYXRhXCIsXG4gIFwic29wb3JcIixcbiAgXCJzb3JkZW9cIixcbiAgXCJzb3J0aXR1c1wiLFxuICBcInNwYXJnb1wiLFxuICBcInNwZWNpb3N1c1wiLFxuICBcInNwZWN0YWN1bHVtXCIsXG4gIFwic3BlY3VsdW1cIixcbiAgXCJzcGVybm9cIixcbiAgXCJzcGVyb1wiLFxuICBcInNwZXNcIixcbiAgXCJzcGljdWx1bVwiLFxuICBcInNwaXJpdHVzXCIsXG4gIFwic3BvbGlhdGlvXCIsXG4gIFwic3BvbnRlXCIsXG4gIFwic3RhYmlsaXNcIixcbiAgXCJzdGF0aW1cIixcbiAgXCJzdGF0dWFcIixcbiAgXCJzdGVsbGFcIixcbiAgXCJzdGlsbGljaWRpdW1cIixcbiAgXCJzdGlwZXNcIixcbiAgXCJzdGlwc1wiLFxuICBcInN0b1wiLFxuICBcInN0cmVudXVzXCIsXG4gIFwic3RydWVzXCIsXG4gIFwic3R1ZGlvXCIsXG4gIFwic3R1bHR1c1wiLFxuICBcInN1YWRlb1wiLFxuICBcInN1YXNvcmlhXCIsXG4gIFwic3ViXCIsXG4gIFwic3ViaXRvXCIsXG4gIFwic3ViaXVuZ29cIixcbiAgXCJzdWJsaW1lXCIsXG4gIFwic3VibmVjdG9cIixcbiAgXCJzdWJzZWNvXCIsXG4gIFwic3Vic3RhbnRpYVwiLFxuICBcInN1YnZlbmlvXCIsXG4gIFwic3VjY2Vkb1wiLFxuICBcInN1Y2N1cnJvXCIsXG4gIFwic3VmZmljaW9cIixcbiAgXCJzdWZmb2NvXCIsXG4gIFwic3VmZnJhZ2l1bVwiLFxuICBcInN1Z2dlcm9cIixcbiAgXCJzdWlcIixcbiAgXCJzdWx1bVwiLFxuICBcInN1bVwiLFxuICBcInN1bW1hXCIsXG4gIFwic3VtbWlzc2VcIixcbiAgXCJzdW1tb3BlcmVcIixcbiAgXCJzdW1vXCIsXG4gIFwic3VtcHR1c1wiLFxuICBcInN1cGVsbGV4XCIsXG4gIFwic3VwZXJcIixcbiAgXCJzdXBwZWxsZXhcIixcbiAgXCJzdXBwbGFudG9cIixcbiAgXCJzdXBwb25vXCIsXG4gIFwic3VwcmFcIixcbiAgXCJzdXJjdWx1c1wiLFxuICBcInN1cmdvXCIsXG4gIFwic3Vyc3VtXCIsXG4gIFwic3VzY2lwaW9cIixcbiAgXCJzdXNwZW5kb1wiLFxuICBcInN1c3RpbmVvXCIsXG4gIFwic3V1c1wiLFxuICBcInN5bmFnb2dhXCIsXG4gIFwidGFiZWxsYVwiLFxuICBcInRhYmVybnVzXCIsXG4gIFwidGFiZXNjb1wiLFxuICBcInRhYmdvXCIsXG4gIFwidGFidWxhXCIsXG4gIFwidGFjZW9cIixcbiAgXCJ0YWN0dXNcIixcbiAgXCJ0YWVkaXVtXCIsXG4gIFwidGFsaW9cIixcbiAgXCJ0YWxpc1wiLFxuICBcInRhbHVzXCIsXG4gIFwidGFtXCIsXG4gIFwidGFtZGl1XCIsXG4gIFwidGFtZW5cIixcbiAgXCJ0YW1ldHNpXCIsXG4gIFwidGFtaXNpdW1cIixcbiAgXCJ0YW1xdWFtXCIsXG4gIFwidGFuZGVtXCIsXG4gIFwidGFudGlsbHVzXCIsXG4gIFwidGFudHVtXCIsXG4gIFwidGFyZHVzXCIsXG4gIFwidGVnb1wiLFxuICBcInRlbWVyaXRhc1wiLFxuICBcInRlbXBlcmFudGlhXCIsXG4gIFwidGVtcGx1bVwiLFxuICBcInRlbXB0YXRpb1wiLFxuICBcInRlbXB1c1wiLFxuICBcInRlbmF4XCIsXG4gIFwidGVuZG9cIixcbiAgXCJ0ZW5lb1wiLFxuICBcInRlbmVyXCIsXG4gIFwidGVudWlzXCIsXG4gIFwidGVudXNcIixcbiAgXCJ0ZXBlc2NvXCIsXG4gIFwidGVwaWR1c1wiLFxuICBcInRlclwiLFxuICBcInRlcmVicm9cIixcbiAgXCJ0ZXJlc1wiLFxuICBcInRlcmdhXCIsXG4gIFwidGVyZ2VvXCIsXG4gIFwidGVyZ2l2ZXJzYXRpb1wiLFxuICBcInRlcmdvXCIsXG4gIFwidGVyZ3VtXCIsXG4gIFwidGVybWVzXCIsXG4gIFwidGVybWluYXRpb1wiLFxuICBcInRlcm9cIixcbiAgXCJ0ZXJyYVwiLFxuICBcInRlcnJlb1wiLFxuICBcInRlcnJpdG9cIixcbiAgXCJ0ZXJyb3JcIixcbiAgXCJ0ZXJzdXNcIixcbiAgXCJ0ZXJ0aXVzXCIsXG4gIFwidGVzdGltb25pdW1cIixcbiAgXCJ0ZXhvXCIsXG4gIFwidGV4dGlsaXNcIixcbiAgXCJ0ZXh0b3JcIixcbiAgXCJ0ZXh0dXNcIixcbiAgXCJ0aGFsYXNzaW51c1wiLFxuICBcInRoZWF0cnVtXCIsXG4gIFwidGhlY2FcIixcbiAgXCJ0aGVtYVwiLFxuICBcInRoZW9sb2d1c1wiLFxuICBcInRoZXJtYWVcIixcbiAgXCJ0aGVzYXVydXNcIixcbiAgXCJ0aGVzaXNcIixcbiAgXCJ0aG9yYXhcIixcbiAgXCJ0aHltYnJhXCIsXG4gIFwidGh5bXVtXCIsXG4gIFwidGliaVwiLFxuICBcInRpbWlkdXNcIixcbiAgXCJ0aW1vclwiLFxuICBcInRpdHVsdXNcIixcbiAgXCJ0b2xlcm9cIixcbiAgXCJ0b2xsb1wiLFxuICBcInRvbmRlb1wiLFxuICBcInRvbnNvclwiLFxuICBcInRvcnF1ZW9cIixcbiAgXCJ0b3JyZW5zXCIsXG4gIFwidG90XCIsXG4gIFwidG90aWRlbVwiLFxuICBcInRvdGllc1wiLFxuICBcInRvdHVzXCIsXG4gIFwidHJhY3RvXCIsXG4gIFwidHJhZG9cIixcbiAgXCJ0cmFob1wiLFxuICBcInRyYW5zXCIsXG4gIFwidHJlZGVjaW1cIixcbiAgXCJ0cmVtb1wiLFxuICBcInRyZXBpZGVcIixcbiAgXCJ0cmVzXCIsXG4gIFwidHJpYnVvXCIsXG4gIFwidHJpY2VzaW11c1wiLFxuICBcInRyaWR1YW5hXCIsXG4gIFwidHJpZ2ludGFcIixcbiAgXCJ0cmlwdWRpb1wiLFxuICBcInRyaXN0aXNcIixcbiAgXCJ0cml1bXBodXNcIixcbiAgXCJ0cnVjaWRvXCIsXG4gIFwidHJ1Y3VsZW50ZXJcIixcbiAgXCJ0dWJpbmV1c1wiLFxuICBcInR1aVwiLFxuICBcInR1bVwiLFxuICBcInR1bXVsdHVzXCIsXG4gIFwidHVuY1wiLFxuICBcInR1cmJhXCIsXG4gIFwidHVyYm9cIixcbiAgXCJ0dXJwZVwiLFxuICBcInR1cnBpc1wiLFxuICBcInR1dGFtZW5cIixcbiAgXCJ0dXRpc1wiLFxuICBcInR5cmFubnVzXCIsXG4gIFwidWJlcnJpbWVcIixcbiAgXCJ1YmlcIixcbiAgXCJ1bGNpc2NvclwiLFxuICBcInVsbHVzXCIsXG4gIFwidWx0ZXJpdXNcIixcbiAgXCJ1bHRpb1wiLFxuICBcInVsdHJhXCIsXG4gIFwidW1icmFcIixcbiAgXCJ1bWVydXNcIixcbiAgXCJ1bXF1YW1cIixcbiAgXCJ1bmFcIixcbiAgXCJ1bmRlXCIsXG4gIFwidW5kaXF1ZVwiLFxuICBcInVuaXZlcnNlXCIsXG4gIFwidW51c1wiLFxuICBcInVyYmFudXNcIixcbiAgXCJ1cmJzXCIsXG4gIFwidXJlZG9cIixcbiAgXCJ1c2l0YXNcIixcbiAgXCJ1c3F1ZVwiLFxuICBcInVzdGlsb1wiLFxuICBcInVzdHVsb1wiLFxuICBcInVzdXNcIixcbiAgXCJ1dGVyXCIsXG4gIFwidXRlcnF1ZVwiLFxuICBcInV0aWxpc1wiLFxuICBcInV0aXF1ZVwiLFxuICBcInV0b3JcIixcbiAgXCJ1dHBvdGVcIixcbiAgXCJ1dHJpbXF1ZVwiLFxuICBcInV0cm9xdWVcIixcbiAgXCJ1dHJ1bVwiLFxuICBcInV4b3JcIixcbiAgXCJ2YWNvXCIsXG4gIFwidmFjdXVzXCIsXG4gIFwidmFkb1wiLFxuICBcInZhZVwiLFxuICBcInZhbGRlXCIsXG4gIFwidmFsZW5zXCIsXG4gIFwidmFsZW9cIixcbiAgXCJ2YWxldHVkb1wiLFxuICBcInZhbGlkdXNcIixcbiAgXCJ2YWxsdW1cIixcbiAgXCJ2YXB1bHVzXCIsXG4gIFwidmFyaWV0YXNcIixcbiAgXCJ2YXJpdXNcIixcbiAgXCJ2ZWhlbWVuc1wiLFxuICBcInZlbFwiLFxuICBcInZlbG9jaXRlclwiLFxuICBcInZlbHVtXCIsXG4gIFwidmVsdXRcIixcbiAgXCJ2ZW5pYVwiLFxuICBcInZlbmlvXCIsXG4gIFwidmVudGl0b1wiLFxuICBcInZlbnRvc3VzXCIsXG4gIFwidmVudHVzXCIsXG4gIFwidmVudXN0YXNcIixcbiAgXCJ2ZXJcIixcbiAgXCJ2ZXJiZXJhXCIsXG4gIFwidmVyYnVtXCIsXG4gIFwidmVyZVwiLFxuICBcInZlcmVjdW5kaWFcIixcbiAgXCJ2ZXJlb3JcIixcbiAgXCJ2ZXJnb1wiLFxuICBcInZlcml0YXNcIixcbiAgXCJ2ZXJvXCIsXG4gIFwidmVyc3VzXCIsXG4gIFwidmVydG9cIixcbiAgXCJ2ZXJ1bXRhbWVuXCIsXG4gIFwidmVydXNcIixcbiAgXCJ2ZXNjb1wiLFxuICBcInZlc2ljYVwiLFxuICBcInZlc3BlclwiLFxuICBcInZlc3BpbGxvXCIsXG4gIFwidmVzdGVyXCIsXG4gIFwidmVzdGlnaXVtXCIsXG4gIFwidmVzdHJ1bVwiLFxuICBcInZldHVzXCIsXG4gIFwidmlhXCIsXG4gIFwidmljaW51c1wiLFxuICBcInZpY2lzc2l0dWRvXCIsXG4gIFwidmljdG9yaWFcIixcbiAgXCJ2aWN0dXNcIixcbiAgXCJ2aWRlbGljZXRcIixcbiAgXCJ2aWRlb1wiLFxuICBcInZpZHVhdGFcIixcbiAgXCJ2aWR1b1wiLFxuICBcInZpZ2lsb1wiLFxuICBcInZpZ29yXCIsXG4gIFwidmlsaWN1c1wiLFxuICBcInZpbGlzXCIsXG4gIFwidmlsaXRhc1wiLFxuICBcInZpbGxhXCIsXG4gIFwidmluY29cIixcbiAgXCJ2aW5jdWx1bVwiLFxuICBcInZpbmRpY29cIixcbiAgXCJ2aW5pdG9yXCIsXG4gIFwidmludW1cIixcbiAgXCJ2aXJcIixcbiAgXCJ2aXJnYVwiLFxuICBcInZpcmdvXCIsXG4gIFwidmlyaWRpc1wiLFxuICBcInZpcmlsaXRlclwiLFxuICBcInZpcnR1c1wiLFxuICBcInZpc1wiLFxuICBcInZpc2N1c1wiLFxuICBcInZpdGFcIixcbiAgXCJ2aXRpb3N1c1wiLFxuICBcInZpdGl1bVwiLFxuICBcInZpdG9cIixcbiAgXCJ2aXZvXCIsXG4gIFwidml4XCIsXG4gIFwidm9iaXNcIixcbiAgXCJ2b2NpZmVyb3JcIixcbiAgXCJ2b2NvXCIsXG4gIFwidm9sYXRpY3VzXCIsXG4gIFwidm9sb1wiLFxuICBcInZvbHViaWxpc1wiLFxuICBcInZvbHVudGFyaXVzXCIsXG4gIFwidm9sdXBcIixcbiAgXCJ2b2x1dGFicnVtXCIsXG4gIFwidm9sdmFcIixcbiAgXCJ2b21lclwiLFxuICBcInZvbWljYVwiLFxuICBcInZvbWl0b1wiLFxuICBcInZvcmFnb1wiLFxuICBcInZvcmF4XCIsXG4gIFwidm9yb1wiLFxuICBcInZvc1wiLFxuICBcInZvdHVtXCIsXG4gIFwidm92ZW9cIixcbiAgXCJ2b3hcIixcbiAgXCJ2dWxhcml0ZXJcIixcbiAgXCJ2dWxnYXJpc1wiLFxuICBcInZ1bGdpdmFndXNcIixcbiAgXCJ2dWxnb1wiLFxuICBcInZ1bGd1c1wiLFxuICBcInZ1bG5lcm9cIixcbiAgXCJ2dWxudXNcIixcbiAgXCJ2dWxwZXNcIixcbiAgXCJ2dWx0aWN1bHVzXCIsXG4gIFwidnVsdHVvc3VzXCIsXG4gIFwieGlwaGlhc1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJhbGlhc1wiLFxuICBcImNvbnNlcXVhdHVyXCIsXG4gIFwiYXV0XCIsXG4gIFwicGVyZmVyZW5kaXNcIixcbiAgXCJzaXRcIixcbiAgXCJ2b2x1cHRhdGVtXCIsXG4gIFwiYWNjdXNhbnRpdW1cIixcbiAgXCJkb2xvcmVtcXVlXCIsXG4gIFwiYXBlcmlhbVwiLFxuICBcImVhcXVlXCIsXG4gIFwiaXBzYVwiLFxuICBcInF1YWVcIixcbiAgXCJhYlwiLFxuICBcImlsbG9cIixcbiAgXCJpbnZlbnRvcmVcIixcbiAgXCJ2ZXJpdGF0aXNcIixcbiAgXCJldFwiLFxuICBcInF1YXNpXCIsXG4gIFwiYXJjaGl0ZWN0b1wiLFxuICBcImJlYXRhZVwiLFxuICBcInZpdGFlXCIsXG4gIFwiZGljdGFcIixcbiAgXCJzdW50XCIsXG4gIFwiZXhwbGljYWJvXCIsXG4gIFwiYXNwZXJuYXR1clwiLFxuICBcImF1dFwiLFxuICBcIm9kaXRcIixcbiAgXCJhdXRcIixcbiAgXCJmdWdpdFwiLFxuICBcInNlZFwiLFxuICBcInF1aWFcIixcbiAgXCJjb25zZXF1dW50dXJcIixcbiAgXCJtYWduaVwiLFxuICBcImRvbG9yZXNcIixcbiAgXCJlb3NcIixcbiAgXCJxdWlcIixcbiAgXCJyYXRpb25lXCIsXG4gIFwidm9sdXB0YXRlbVwiLFxuICBcInNlcXVpXCIsXG4gIFwibmVzY2l1bnRcIixcbiAgXCJuZXF1ZVwiLFxuICBcImRvbG9yZW1cIixcbiAgXCJpcHN1bVwiLFxuICBcInF1aWFcIixcbiAgXCJkb2xvclwiLFxuICBcInNpdFwiLFxuICBcImFtZXRcIixcbiAgXCJjb25zZWN0ZXR1clwiLFxuICBcImFkaXBpc2NpXCIsXG4gIFwidmVsaXRcIixcbiAgXCJzZWRcIixcbiAgXCJxdWlhXCIsXG4gIFwibm9uXCIsXG4gIFwibnVtcXVhbVwiLFxuICBcImVpdXNcIixcbiAgXCJtb2RpXCIsXG4gIFwidGVtcG9yYVwiLFxuICBcImluY2lkdW50XCIsXG4gIFwidXRcIixcbiAgXCJsYWJvcmVcIixcbiAgXCJldFwiLFxuICBcImRvbG9yZVwiLFxuICBcIm1hZ25hbVwiLFxuICBcImFsaXF1YW1cIixcbiAgXCJxdWFlcmF0XCIsXG4gIFwidm9sdXB0YXRlbVwiLFxuICBcInV0XCIsXG4gIFwiZW5pbVwiLFxuICBcImFkXCIsXG4gIFwibWluaW1hXCIsXG4gIFwidmVuaWFtXCIsXG4gIFwicXVpc1wiLFxuICBcIm5vc3RydW1cIixcbiAgXCJleGVyY2l0YXRpb25lbVwiLFxuICBcInVsbGFtXCIsXG4gIFwiY29ycG9yaXNcIixcbiAgXCJuZW1vXCIsXG4gIFwiZW5pbVwiLFxuICBcImlwc2FtXCIsXG4gIFwidm9sdXB0YXRlbVwiLFxuICBcInF1aWFcIixcbiAgXCJ2b2x1cHRhc1wiLFxuICBcInNpdFwiLFxuICBcInN1c2NpcGl0XCIsXG4gIFwibGFib3Jpb3NhbVwiLFxuICBcIm5pc2lcIixcbiAgXCJ1dFwiLFxuICBcImFsaXF1aWRcIixcbiAgXCJleFwiLFxuICBcImVhXCIsXG4gIFwiY29tbW9kaVwiLFxuICBcImNvbnNlcXVhdHVyXCIsXG4gIFwicXVpc1wiLFxuICBcImF1dGVtXCIsXG4gIFwidmVsXCIsXG4gIFwiZXVtXCIsXG4gIFwiaXVyZVwiLFxuICBcInJlcHJlaGVuZGVyaXRcIixcbiAgXCJxdWlcIixcbiAgXCJpblwiLFxuICBcImVhXCIsXG4gIFwidm9sdXB0YXRlXCIsXG4gIFwidmVsaXRcIixcbiAgXCJlc3NlXCIsXG4gIFwicXVhbVwiLFxuICBcIm5paGlsXCIsXG4gIFwibW9sZXN0aWFlXCIsXG4gIFwiZXRcIixcbiAgXCJpdXN0b1wiLFxuICBcIm9kaW9cIixcbiAgXCJkaWduaXNzaW1vc1wiLFxuICBcImR1Y2ltdXNcIixcbiAgXCJxdWlcIixcbiAgXCJibGFuZGl0aWlzXCIsXG4gIFwicHJhZXNlbnRpdW1cIixcbiAgXCJsYXVkYW50aXVtXCIsXG4gIFwidG90YW1cIixcbiAgXCJyZW1cIixcbiAgXCJ2b2x1cHRhdHVtXCIsXG4gIFwiZGVsZW5pdGlcIixcbiAgXCJhdHF1ZVwiLFxuICBcImNvcnJ1cHRpXCIsXG4gIFwicXVvc1wiLFxuICBcImRvbG9yZXNcIixcbiAgXCJldFwiLFxuICBcInF1YXNcIixcbiAgXCJtb2xlc3RpYXNcIixcbiAgXCJleGNlcHR1cmlcIixcbiAgXCJzaW50XCIsXG4gIFwib2NjYWVjYXRpXCIsXG4gIFwiY3VwaWRpdGF0ZVwiLFxuICBcIm5vblwiLFxuICBcInByb3ZpZGVudFwiLFxuICBcInNlZFwiLFxuICBcInV0XCIsXG4gIFwicGVyc3BpY2lhdGlzXCIsXG4gIFwidW5kZVwiLFxuICBcIm9tbmlzXCIsXG4gIFwiaXN0ZVwiLFxuICBcIm5hdHVzXCIsXG4gIFwiZXJyb3JcIixcbiAgXCJzaW1pbGlxdWVcIixcbiAgXCJzdW50XCIsXG4gIFwiaW5cIixcbiAgXCJjdWxwYVwiLFxuICBcInF1aVwiLFxuICBcIm9mZmljaWFcIixcbiAgXCJkZXNlcnVudFwiLFxuICBcIm1vbGxpdGlhXCIsXG4gIFwiYW5pbWlcIixcbiAgXCJpZFwiLFxuICBcImVzdFwiLFxuICBcImxhYm9ydW1cIixcbiAgXCJldFwiLFxuICBcImRvbG9ydW1cIixcbiAgXCJmdWdhXCIsXG4gIFwiZXRcIixcbiAgXCJoYXJ1bVwiLFxuICBcInF1aWRlbVwiLFxuICBcInJlcnVtXCIsXG4gIFwiZmFjaWxpc1wiLFxuICBcImVzdFwiLFxuICBcImV0XCIsXG4gIFwiZXhwZWRpdGFcIixcbiAgXCJkaXN0aW5jdGlvXCIsXG4gIFwibmFtXCIsXG4gIFwibGliZXJvXCIsXG4gIFwidGVtcG9yZVwiLFxuICBcImN1bVwiLFxuICBcInNvbHV0YVwiLFxuICBcIm5vYmlzXCIsXG4gIFwiZXN0XCIsXG4gIFwiZWxpZ2VuZGlcIixcbiAgXCJvcHRpb1wiLFxuICBcImN1bXF1ZVwiLFxuICBcIm5paGlsXCIsXG4gIFwiaW1wZWRpdFwiLFxuICBcInF1b1wiLFxuICBcInBvcnJvXCIsXG4gIFwicXVpc3F1YW1cIixcbiAgXCJlc3RcIixcbiAgXCJxdWlcIixcbiAgXCJtaW51c1wiLFxuICBcImlkXCIsXG4gIFwicXVvZFwiLFxuICBcIm1heGltZVwiLFxuICBcInBsYWNlYXRcIixcbiAgXCJmYWNlcmVcIixcbiAgXCJwb3NzaW11c1wiLFxuICBcIm9tbmlzXCIsXG4gIFwidm9sdXB0YXNcIixcbiAgXCJhc3N1bWVuZGFcIixcbiAgXCJlc3RcIixcbiAgXCJvbW5pc1wiLFxuICBcImRvbG9yXCIsXG4gIFwicmVwZWxsZW5kdXNcIixcbiAgXCJ0ZW1wb3JpYnVzXCIsXG4gIFwiYXV0ZW1cIixcbiAgXCJxdWlidXNkYW1cIixcbiAgXCJldFwiLFxuICBcImF1dFwiLFxuICBcImNvbnNlcXVhdHVyXCIsXG4gIFwidmVsXCIsXG4gIFwiaWxsdW1cIixcbiAgXCJxdWlcIixcbiAgXCJkb2xvcmVtXCIsXG4gIFwiZXVtXCIsXG4gIFwiZnVnaWF0XCIsXG4gIFwicXVvXCIsXG4gIFwidm9sdXB0YXNcIixcbiAgXCJudWxsYVwiLFxuICBcInBhcmlhdHVyXCIsXG4gIFwiYXRcIixcbiAgXCJ2ZXJvXCIsXG4gIFwiZW9zXCIsXG4gIFwiZXRcIixcbiAgXCJhY2N1c2FtdXNcIixcbiAgXCJvZmZpY2lpc1wiLFxuICBcImRlYml0aXNcIixcbiAgXCJhdXRcIixcbiAgXCJyZXJ1bVwiLFxuICBcIm5lY2Vzc2l0YXRpYnVzXCIsXG4gIFwic2FlcGVcIixcbiAgXCJldmVuaWV0XCIsXG4gIFwidXRcIixcbiAgXCJldFwiLFxuICBcInZvbHVwdGF0ZXNcIixcbiAgXCJyZXB1ZGlhbmRhZVwiLFxuICBcInNpbnRcIixcbiAgXCJldFwiLFxuICBcIm1vbGVzdGlhZVwiLFxuICBcIm5vblwiLFxuICBcInJlY3VzYW5kYWVcIixcbiAgXCJpdGFxdWVcIixcbiAgXCJlYXJ1bVwiLFxuICBcInJlcnVtXCIsXG4gIFwiaGljXCIsXG4gIFwidGVuZXR1clwiLFxuICBcImFcIixcbiAgXCJzYXBpZW50ZVwiLFxuICBcImRlbGVjdHVzXCIsXG4gIFwidXRcIixcbiAgXCJhdXRcIixcbiAgXCJyZWljaWVuZGlzXCIsXG4gIFwidm9sdXB0YXRpYnVzXCIsXG4gIFwibWFpb3Jlc1wiLFxuICBcImRvbG9yaWJ1c1wiLFxuICBcImFzcGVyaW9yZXNcIixcbiAgXCJyZXBlbGxhdFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBYWxpeWFoXCIsXG4gIFwiQWFyb25cIixcbiAgXCJBYmFnYWlsXCIsXG4gIFwiQWJiZXlcIixcbiAgXCJBYmJpZVwiLFxuICBcIkFiYmlnYWlsXCIsXG4gIFwiQWJieVwiLFxuICBcIkFiZGllbFwiLFxuICBcIkFiZHVsXCIsXG4gIFwiQWJkdWxsYWhcIixcbiAgXCJBYmVcIixcbiAgXCJBYmVsXCIsXG4gIFwiQWJlbGFyZG9cIixcbiAgXCJBYmlnYWlsXCIsXG4gIFwiQWJpZ2FsZVwiLFxuICBcIkFiaWdheWxlXCIsXG4gIFwiQWJuZXJcIixcbiAgXCJBYnJhaGFtXCIsXG4gIFwiQWRhXCIsXG4gIFwiQWRhaFwiLFxuICBcIkFkYWxiZXJ0b1wiLFxuICBcIkFkYWxpbmVcIixcbiAgXCJBZGFtXCIsXG4gIFwiQWRhblwiLFxuICBcIkFkZGllXCIsXG4gIFwiQWRkaXNvblwiLFxuICBcIkFkZWxhXCIsXG4gIFwiQWRlbGJlcnRcIixcbiAgXCJBZGVsZVwiLFxuICBcIkFkZWxpYVwiLFxuICBcIkFkZWxpbmVcIixcbiAgXCJBZGVsbFwiLFxuICBcIkFkZWxsYVwiLFxuICBcIkFkZWxsZVwiLFxuICBcIkFkaXR5YVwiLFxuICBcIkFkb2xmXCIsXG4gIFwiQWRvbGZvXCIsXG4gIFwiQWRvbHBoXCIsXG4gIFwiQWRvbHBodXNcIixcbiAgXCJBZG9uaXNcIixcbiAgXCJBZHJhaW5cIixcbiAgXCJBZHJpYW5cIixcbiAgXCJBZHJpYW5hXCIsXG4gIFwiQWRyaWFubmFcIixcbiAgXCJBZHJpZWxcIixcbiAgXCJBZHJpZW5cIixcbiAgXCJBZHJpZW5uZVwiLFxuICBcIkFmdG9uXCIsXG4gIFwiQWdsYWVcIixcbiAgXCJBZ25lc1wiLFxuICBcIkFndXN0aW5cIixcbiAgXCJBZ3VzdGluYVwiLFxuICBcIkFobWFkXCIsXG4gIFwiQWhtZWRcIixcbiAgXCJBaWRhXCIsXG4gIFwiQWlkYW5cIixcbiAgXCJBaWRlblwiLFxuICBcIkFpbGVlblwiLFxuICBcIkFpbWVlXCIsXG4gIFwiQWlzaGFcIixcbiAgXCJBaXlhbmFcIixcbiAgXCJBa2VlbVwiLFxuICBcIkFsXCIsXG4gIFwiQWxhaW5hXCIsXG4gIFwiQWxhblwiLFxuICBcIkFsYW5hXCIsXG4gIFwiQWxhbmlzXCIsXG4gIFwiQWxhbm5hXCIsXG4gIFwiQWxheW5hXCIsXG4gIFwiQWxiYVwiLFxuICBcIkFsYmVydFwiLFxuICBcIkFsYmVydGFcIixcbiAgXCJBbGJlcnRoYVwiLFxuICBcIkFsYmVydG9cIixcbiAgXCJBbGJpblwiLFxuICBcIkFsYmluYVwiLFxuICBcIkFsZGFcIixcbiAgXCJBbGRlblwiLFxuICBcIkFsZWNcIixcbiAgXCJBbGVlblwiLFxuICBcIkFsZWphbmRyYVwiLFxuICBcIkFsZWphbmRyaW5cIixcbiAgXCJBbGVrXCIsXG4gIFwiQWxlbmFcIixcbiAgXCJBbGVuZVwiLFxuICBcIkFsZXNzYW5kcmFcIixcbiAgXCJBbGVzc2FuZHJvXCIsXG4gIFwiQWxlc3NpYVwiLFxuICBcIkFsZXRoYVwiLFxuICBcIkFsZXhcIixcbiAgXCJBbGV4YVwiLFxuICBcIkFsZXhhbmRlclwiLFxuICBcIkFsZXhhbmRyYVwiLFxuICBcIkFsZXhhbmRyZVwiLFxuICBcIkFsZXhhbmRyZWFcIixcbiAgXCJBbGV4YW5kcmlhXCIsXG4gIFwiQWxleGFuZHJpbmVcIixcbiAgXCJBbGV4YW5kcm9cIixcbiAgXCJBbGV4YW5lXCIsXG4gIFwiQWxleGFubmVcIixcbiAgXCJBbGV4aWVcIixcbiAgXCJBbGV4aXNcIixcbiAgXCJBbGV4eXNcIixcbiAgXCJBbGV4emFuZGVyXCIsXG4gIFwiQWxmXCIsXG4gIFwiQWxmb25zb1wiLFxuICBcIkFsZm9uem9cIixcbiAgXCJBbGZvcmRcIixcbiAgXCJBbGZyZWRcIixcbiAgXCJBbGZyZWRhXCIsXG4gIFwiQWxmcmVkb1wiLFxuICBcIkFsaVwiLFxuICBcIkFsaWFcIixcbiAgXCJBbGljZVwiLFxuICBcIkFsaWNpYVwiLFxuICBcIkFsaXNhXCIsXG4gIFwiQWxpc2hhXCIsXG4gIFwiQWxpc29uXCIsXG4gIFwiQWxpdmlhXCIsXG4gIFwiQWxpeWFcIixcbiAgXCJBbGl5YWhcIixcbiAgXCJBbGl6YVwiLFxuICBcIkFsaXplXCIsXG4gIFwiQWxsYW5cIixcbiAgXCJBbGxlblwiLFxuICBcIkFsbGVuZVwiLFxuICBcIkFsbGllXCIsXG4gIFwiQWxsaXNvblwiLFxuICBcIkFsbHlcIixcbiAgXCJBbHBob25zb1wiLFxuICBcIkFsdGFcIixcbiAgXCJBbHRoZWFcIixcbiAgXCJBbHZhXCIsXG4gIFwiQWx2YWhcIixcbiAgXCJBbHZlbmFcIixcbiAgXCJBbHZlcmFcIixcbiAgXCJBbHZlcnRhXCIsXG4gIFwiQWx2aW5hXCIsXG4gIFwiQWx2aXNcIixcbiAgXCJBbHljZVwiLFxuICBcIkFseWNpYVwiLFxuICBcIkFseXNhXCIsXG4gIFwiQWx5c2hhXCIsXG4gIFwiQWx5c29uXCIsXG4gIFwiQWx5c3NvblwiLFxuICBcIkFtYWxpYVwiLFxuICBcIkFtYW5kYVwiLFxuICBcIkFtYW5pXCIsXG4gIFwiQW1hcmFcIixcbiAgXCJBbWFyaVwiLFxuICBcIkFtYXlhXCIsXG4gIFwiQW1iZXJcIixcbiAgXCJBbWJyb3NlXCIsXG4gIFwiQW1lbGlhXCIsXG4gIFwiQW1lbGllXCIsXG4gIFwiQW1lbHlcIixcbiAgXCJBbWVyaWNhXCIsXG4gIFwiQW1lcmljb1wiLFxuICBcIkFtaWVcIixcbiAgXCJBbWluYVwiLFxuICBcIkFtaXJcIixcbiAgXCJBbWlyYVwiLFxuICBcIkFtaXlhXCIsXG4gIFwiQW1vc1wiLFxuICBcIkFtcGFyb1wiLFxuICBcIkFteVwiLFxuICBcIkFteWFcIixcbiAgXCJBbmFcIixcbiAgXCJBbmFiZWxcIixcbiAgXCJBbmFiZWxsZVwiLFxuICBcIkFuYWhpXCIsXG4gIFwiQW5haXNcIixcbiAgXCJBbmFzdGFjaW9cIixcbiAgXCJBbmFzdGFzaWFcIixcbiAgXCJBbmRlcnNvblwiLFxuICBcIkFuZHJlXCIsXG4gIFwiQW5kcmVhbmVcIixcbiAgXCJBbmRyZWFubmVcIixcbiAgXCJBbmRyZXNcIixcbiAgXCJBbmRyZXdcIixcbiAgXCJBbmR5XCIsXG4gIFwiQW5nZWxcIixcbiAgXCJBbmdlbGFcIixcbiAgXCJBbmdlbGljYVwiLFxuICBcIkFuZ2VsaW5hXCIsXG4gIFwiQW5nZWxpbmVcIixcbiAgXCJBbmdlbGl0YVwiLFxuICBcIkFuZ2Vsb1wiLFxuICBcIkFuZ2llXCIsXG4gIFwiQW5ndXNcIixcbiAgXCJBbmliYWxcIixcbiAgXCJBbmlrYVwiLFxuICBcIkFuaXNzYVwiLFxuICBcIkFuaXRhXCIsXG4gIFwiQW5peWFcIixcbiAgXCJBbml5YWhcIixcbiAgXCJBbmphbGlcIixcbiAgXCJBbm5hXCIsXG4gIFwiQW5uYWJlbFwiLFxuICBcIkFubmFiZWxsXCIsXG4gIFwiQW5uYWJlbGxlXCIsXG4gIFwiQW5uYWxpc2VcIixcbiAgXCJBbm5hbWFlXCIsXG4gIFwiQW5uYW1hcmllXCIsXG4gIFwiQW5uZVwiLFxuICBcIkFubmV0dGFcIixcbiAgXCJBbm5ldHRlXCIsXG4gIFwiQW5uaWVcIixcbiAgXCJBbnNlbFwiLFxuICBcIkFuc2xleVwiLFxuICBcIkFudGhvbnlcIixcbiAgXCJBbnRvaW5ldHRlXCIsXG4gIFwiQW50b25lXCIsXG4gIFwiQW50b25ldHRhXCIsXG4gIFwiQW50b25ldHRlXCIsXG4gIFwiQW50b25pYVwiLFxuICBcIkFudG9uaWV0dGFcIixcbiAgXCJBbnRvbmluYVwiLFxuICBcIkFudG9uaW9cIixcbiAgXCJBbnR3YW5cIixcbiAgXCJBbnR3b25cIixcbiAgXCJBbnlhXCIsXG4gIFwiQXByaWxcIixcbiAgXCJBcmFcIixcbiAgXCJBcmFjZWxpXCIsXG4gIFwiQXJhY2VseVwiLFxuICBcIkFyY2hcIixcbiAgXCJBcmNoaWJhbGRcIixcbiAgXCJBcmRlbGxhXCIsXG4gIFwiQXJkZW5cIixcbiAgXCJBcmRpdGhcIixcbiAgXCJBcmVseVwiLFxuICBcIkFyaVwiLFxuICBcIkFyaWFuZVwiLFxuICBcIkFyaWFubmFcIixcbiAgXCJBcmljXCIsXG4gIFwiQXJpZWxcIixcbiAgXCJBcmllbGxlXCIsXG4gIFwiQXJqdW5cIixcbiAgXCJBcmxlbmVcIixcbiAgXCJBcmxpZVwiLFxuICBcIkFybG9cIixcbiAgXCJBcm1hbmRcIixcbiAgXCJBcm1hbmRvXCIsXG4gIFwiQXJtYW5pXCIsXG4gIFwiQXJuYWxkb1wiLFxuICBcIkFybmVcIixcbiAgXCJBcm5vXCIsXG4gIFwiQXJub2xkXCIsXG4gIFwiQXJub2xkb1wiLFxuICBcIkFybnVsZm9cIixcbiAgXCJBcm9uXCIsXG4gIFwiQXJ0XCIsXG4gIFwiQXJ0aHVyXCIsXG4gIFwiQXJ0dXJvXCIsXG4gIFwiQXJ2ZWxcIixcbiAgXCJBcnZpZFwiLFxuICBcIkFydmlsbGFcIixcbiAgXCJBcnlhbm5hXCIsXG4gIFwiQXNhXCIsXG4gIFwiQXNoYVwiLFxuICBcIkFzaGxlZVwiLFxuICBcIkFzaGxlaWdoXCIsXG4gIFwiQXNobGV5XCIsXG4gIFwiQXNobHlcIixcbiAgXCJBc2hseW5uXCIsXG4gIFwiQXNodG9uXCIsXG4gIFwiQXNodHluXCIsXG4gIFwiQXNpYVwiLFxuICBcIkFzc3VudGFcIixcbiAgXCJBc3RyaWRcIixcbiAgXCJBdGhlbmFcIixcbiAgXCJBdWJyZWVcIixcbiAgXCJBdWJyZXlcIixcbiAgXCJBdWRpZVwiLFxuICBcIkF1ZHJhXCIsXG4gIFwiQXVkcmVhbm5lXCIsXG4gIFwiQXVkcmV5XCIsXG4gIFwiQXVndXN0XCIsXG4gIFwiQXVndXN0YVwiLFxuICBcIkF1Z3VzdGluZVwiLFxuICBcIkF1Z3VzdHVzXCIsXG4gIFwiQXVyZWxpYVwiLFxuICBcIkF1cmVsaWVcIixcbiAgXCJBdXJlbGlvXCIsXG4gIFwiQXVyb3JlXCIsXG4gIFwiQXVzdGVuXCIsXG4gIFwiQXVzdGluXCIsXG4gIFwiQXVzdHluXCIsXG4gIFwiQXV0dW1uXCIsXG4gIFwiQXZhXCIsXG4gIFwiQXZlcnlcIixcbiAgXCJBdmlzXCIsXG4gIFwiQXhlbFwiLFxuICBcIkF5YW5hXCIsXG4gIFwiQXlkZW5cIixcbiAgXCJBeWxhXCIsXG4gIFwiQXlsaW5cIixcbiAgXCJCYWJ5XCIsXG4gIFwiQmFpbGVlXCIsXG4gIFwiQmFpbGV5XCIsXG4gIFwiQmFyYmFyYVwiLFxuICBcIkJhcm5leVwiLFxuICBcIkJhcm9uXCIsXG4gIFwiQmFycmV0dFwiLFxuICBcIkJhcnJ5XCIsXG4gIFwiQmFydFwiLFxuICBcIkJhcnRob2xvbWVcIixcbiAgXCJCYXJ0b25cIixcbiAgXCJCYXlsZWVcIixcbiAgXCJCZWF0cmljZVwiLFxuICBcIkJlYXVcIixcbiAgXCJCZWF1bGFoXCIsXG4gIFwiQmVsbFwiLFxuICBcIkJlbGxhXCIsXG4gIFwiQmVsbGVcIixcbiAgXCJCZW5cIixcbiAgXCJCZW5lZGljdFwiLFxuICBcIkJlbmphbWluXCIsXG4gIFwiQmVubmV0dFwiLFxuICBcIkJlbm5pZVwiLFxuICBcIkJlbm55XCIsXG4gIFwiQmVudG9uXCIsXG4gIFwiQmVyZW5pY2VcIixcbiAgXCJCZXJuYWRldHRlXCIsXG4gIFwiQmVybmFkaW5lXCIsXG4gIFwiQmVybmFyZFwiLFxuICBcIkJlcm5hcmRvXCIsXG4gIFwiQmVybmVpY2VcIixcbiAgXCJCZXJuaGFyZFwiLFxuICBcIkJlcm5pY2VcIixcbiAgXCJCZXJuaWVcIixcbiAgXCJCZXJuaWVjZVwiLFxuICBcIkJlcm5pdGFcIixcbiAgXCJCZXJyeVwiLFxuICBcIkJlcnRcIixcbiAgXCJCZXJ0YVwiLFxuICBcIkJlcnRoYVwiLFxuICBcIkJlcnRyYW1cIixcbiAgXCJCZXJ0cmFuZFwiLFxuICBcIkJlcnlsXCIsXG4gIFwiQmVzc2llXCIsXG4gIFwiQmV0aFwiLFxuICBcIkJldGhhbnlcIixcbiAgXCJCZXRoZWxcIixcbiAgXCJCZXRzeVwiLFxuICBcIkJldHRlXCIsXG4gIFwiQmV0dGllXCIsXG4gIFwiQmV0dHlcIixcbiAgXCJCZXR0eWVcIixcbiAgXCJCZXVsYWhcIixcbiAgXCJCZXZlcmx5XCIsXG4gIFwiQmlhbmthXCIsXG4gIFwiQmlsbFwiLFxuICBcIkJpbGxpZVwiLFxuICBcIkJpbGx5XCIsXG4gIFwiQmlyZGllXCIsXG4gIFwiQmxhaXJcIixcbiAgXCJCbGFpc2VcIixcbiAgXCJCbGFrZVwiLFxuICBcIkJsYW5jYVwiLFxuICBcIkJsYW5jaGVcIixcbiAgXCJCbGF6ZVwiLFxuICBcIkJvXCIsXG4gIFwiQm9iYmllXCIsXG4gIFwiQm9iYnlcIixcbiAgXCJCb25pdGFcIixcbiAgXCJCb25uaWVcIixcbiAgXCJCb3Jpc1wiLFxuICBcIkJveWRcIixcbiAgXCJCcmFkXCIsXG4gIFwiQnJhZGVuXCIsXG4gIFwiQnJhZGZvcmRcIixcbiAgXCJCcmFkbGV5XCIsXG4gIFwiQnJhZGx5XCIsXG4gIFwiQnJhZHlcIixcbiAgXCJCcmFlZGVuXCIsXG4gIFwiQnJhaW5cIixcbiAgXCJCcmFuZGlcIixcbiAgXCJCcmFuZG9cIixcbiAgXCJCcmFuZG9uXCIsXG4gIFwiQnJhbmR0XCIsXG4gIFwiQnJhbmR5XCIsXG4gIFwiQnJhbmR5blwiLFxuICBcIkJyYW5ub25cIixcbiAgXCJCcmFuc29uXCIsXG4gIFwiQnJhbnRcIixcbiAgXCJCcmF1bGlvXCIsXG4gIFwiQnJheHRvblwiLFxuICBcIkJyYXlhblwiLFxuICBcIkJyZWFuYVwiLFxuICBcIkJyZWFubmFcIixcbiAgXCJCcmVhbm5lXCIsXG4gIFwiQnJlbmRhXCIsXG4gIFwiQnJlbmRhblwiLFxuICBcIkJyZW5kZW5cIixcbiAgXCJCcmVuZG9uXCIsXG4gIFwiQnJlbm5hXCIsXG4gIFwiQnJlbm5hblwiLFxuICBcIkJyZW5ub25cIixcbiAgXCJCcmVudFwiLFxuICBcIkJyZXRcIixcbiAgXCJCcmV0dFwiLFxuICBcIkJyaWFcIixcbiAgXCJCcmlhblwiLFxuICBcIkJyaWFuYVwiLFxuICBcIkJyaWFubmVcIixcbiAgXCJCcmljZVwiLFxuICBcIkJyaWRnZXRcIixcbiAgXCJCcmlkZ2V0dGVcIixcbiAgXCJCcmlkaWVcIixcbiAgXCJCcmllbGxlXCIsXG4gIFwiQnJpZ2l0dGVcIixcbiAgXCJCcmlvbm5hXCIsXG4gIFwiQnJpc2FcIixcbiAgXCJCcml0bmV5XCIsXG4gIFwiQnJpdHRhbnlcIixcbiAgXCJCcm9ja1wiLFxuICBcIkJyb2Rlcmlja1wiLFxuICBcIkJyb2R5XCIsXG4gIFwiQnJvb2tcIixcbiAgXCJCcm9va2VcIixcbiAgXCJCcm9va2x5blwiLFxuICBcIkJyb29rc1wiLFxuICBcIkJyb3duXCIsXG4gIFwiQnJ1Y2VcIixcbiAgXCJCcnlhbmFcIixcbiAgXCJCcnljZVwiLFxuICBcIkJyeWNlblwiLFxuICBcIkJyeW9uXCIsXG4gIFwiQnVja1wiLFxuICBcIkJ1ZFwiLFxuICBcIkJ1ZGR5XCIsXG4gIFwiQnVmb3JkXCIsXG4gIFwiQnVsYWhcIixcbiAgXCJCdXJkZXR0ZVwiLFxuICBcIkJ1cmxleVwiLFxuICBcIkJ1cm5pY2VcIixcbiAgXCJCdXN0ZXJcIixcbiAgXCJDYWRlXCIsXG4gIFwiQ2FkZW5cIixcbiAgXCJDYWVzYXJcIixcbiAgXCJDYWl0bHluXCIsXG4gIFwiQ2FsZVwiLFxuICBcIkNhbGViXCIsXG4gIFwiQ2FsZWlnaFwiLFxuICBcIkNhbGlcIixcbiAgXCJDYWxpc3RhXCIsXG4gIFwiQ2FsbGllXCIsXG4gIFwiQ2FtZGVuXCIsXG4gIFwiQ2FtZXJvblwiLFxuICBcIkNhbWlsYVwiLFxuICBcIkNhbWlsbGFcIixcbiAgXCJDYW1pbGxlXCIsXG4gIFwiQ2FtcmVuXCIsXG4gIFwiQ2Ftcm9uXCIsXG4gIFwiQ2FtcnluXCIsXG4gIFwiQ2FteWxsZVwiLFxuICBcIkNhbmRhY2VcIixcbiAgXCJDYW5kZWxhcmlvXCIsXG4gIFwiQ2FuZGljZVwiLFxuICBcIkNhbmRpZGFcIixcbiAgXCJDYW5kaWRvXCIsXG4gIFwiQ2FyYVwiLFxuICBcIkNhcmV5XCIsXG4gIFwiQ2FyaXNzYVwiLFxuICBcIkNhcmxlZVwiLFxuICBcIkNhcmxldG9uXCIsXG4gIFwiQ2FybGV5XCIsXG4gIFwiQ2FybGlcIixcbiAgXCJDYXJsaWVcIixcbiAgXCJDYXJsb1wiLFxuICBcIkNhcmxvc1wiLFxuICBcIkNhcmxvdHRhXCIsXG4gIFwiQ2FybWVsXCIsXG4gIFwiQ2FybWVsYVwiLFxuICBcIkNhcm1lbGxhXCIsXG4gIFwiQ2FybWVsb1wiLFxuICBcIkNhcm1lblwiLFxuICBcIkNhcm1pbmVcIixcbiAgXCJDYXJvbFwiLFxuICBcIkNhcm9sYW5uZVwiLFxuICBcIkNhcm9sZVwiLFxuICBcIkNhcm9saW5hXCIsXG4gIFwiQ2Fyb2xpbmVcIixcbiAgXCJDYXJvbHluXCIsXG4gIFwiQ2Fyb2x5bmVcIixcbiAgXCJDYXJyaWVcIixcbiAgXCJDYXJyb2xsXCIsXG4gIFwiQ2Fyc29uXCIsXG4gIFwiQ2FydGVyXCIsXG4gIFwiQ2FyeVwiLFxuICBcIkNhc2FuZHJhXCIsXG4gIFwiQ2FzZXlcIixcbiAgXCJDYXNpbWVyXCIsXG4gIFwiQ2FzaW1pclwiLFxuICBcIkNhc3BlclwiLFxuICBcIkNhc3NhbmRyYVwiLFxuICBcIkNhc3NhbmRyZVwiLFxuICBcIkNhc3NpZHlcIixcbiAgXCJDYXNzaWVcIixcbiAgXCJDYXRhbGluYVwiLFxuICBcIkNhdGVyaW5hXCIsXG4gIFwiQ2F0aGFyaW5lXCIsXG4gIFwiQ2F0aGVyaW5lXCIsXG4gIFwiQ2F0aHJpbmVcIixcbiAgXCJDYXRocnluXCIsXG4gIFwiQ2F0aHlcIixcbiAgXCJDYXlsYVwiLFxuICBcIkNlYXNhclwiLFxuICBcIkNlY2VsaWFcIixcbiAgXCJDZWNpbFwiLFxuICBcIkNlY2lsZVwiLFxuICBcIkNlY2lsaWFcIixcbiAgXCJDZWRyaWNrXCIsXG4gIFwiQ2VsZXN0aW5lXCIsXG4gIFwiQ2VsZXN0aW5vXCIsXG4gIFwiQ2VsaWFcIixcbiAgXCJDZWxpbmVcIixcbiAgXCJDZXNhclwiLFxuICBcIkNoYWRcIixcbiAgXCJDaGFkZFwiLFxuICBcIkNoYWRyaWNrXCIsXG4gIFwiQ2hhaW1cIixcbiAgXCJDaGFuY2VcIixcbiAgXCJDaGFuZGxlclwiLFxuICBcIkNoYW5lbFwiLFxuICBcIkNoYW5lbGxlXCIsXG4gIFwiQ2hhcml0eVwiLFxuICBcIkNoYXJsZW5lXCIsXG4gIFwiQ2hhcmxlc1wiLFxuICBcIkNoYXJsZXlcIixcbiAgXCJDaGFybGllXCIsXG4gIFwiQ2hhcmxvdHRlXCIsXG4gIFwiQ2hhc2VcIixcbiAgXCJDaGFzaXR5XCIsXG4gIFwiQ2hhdW5jZXlcIixcbiAgXCJDaGF5YVwiLFxuICBcIkNoYXpcIixcbiAgXCJDaGVsc2VhXCIsXG4gIFwiQ2hlbHNleVwiLFxuICBcIkNoZWxzaWVcIixcbiAgXCJDaGVzbGV5XCIsXG4gIFwiQ2hlc3RlclwiLFxuICBcIkNoZXRcIixcbiAgXCJDaGV5YW5uZVwiLFxuICBcIkNoZXllbm5lXCIsXG4gIFwiQ2hsb2VcIixcbiAgXCJDaHJpc1wiLFxuICBcIkNocmlzdFwiLFxuICBcIkNocmlzdGFcIixcbiAgXCJDaHJpc3RlbGxlXCIsXG4gIFwiQ2hyaXN0aWFuXCIsXG4gIFwiQ2hyaXN0aWFuYVwiLFxuICBcIkNocmlzdGluYVwiLFxuICBcIkNocmlzdGluZVwiLFxuICBcIkNocmlzdG9wXCIsXG4gIFwiQ2hyaXN0b3BoZVwiLFxuICBcIkNocmlzdG9waGVyXCIsXG4gIFwiQ2hyaXN0eVwiLFxuICBcIkNoeW5hXCIsXG4gIFwiQ2lhcmFcIixcbiAgXCJDaWNlcm9cIixcbiAgXCJDaWVsb1wiLFxuICBcIkNpZXJyYVwiLFxuICBcIkNpbmR5XCIsXG4gIFwiQ2l0bGFsbGlcIixcbiAgXCJDbGFpclwiLFxuICBcIkNsYWlyZVwiLFxuICBcIkNsYXJhXCIsXG4gIFwiQ2xhcmFiZWxsZVwiLFxuICBcIkNsYXJlXCIsXG4gIFwiQ2xhcmlzc2FcIixcbiAgXCJDbGFya1wiLFxuICBcIkNsYXVkXCIsXG4gIFwiQ2xhdWRlXCIsXG4gIFwiQ2xhdWRpYVwiLFxuICBcIkNsYXVkaWVcIixcbiAgXCJDbGF1ZGluZVwiLFxuICBcIkNsYXlcIixcbiAgXCJDbGVtZW5zXCIsXG4gIFwiQ2xlbWVudFwiLFxuICBcIkNsZW1lbnRpbmFcIixcbiAgXCJDbGVtZW50aW5lXCIsXG4gIFwiQ2xlbW1pZVwiLFxuICBcIkNsZW9cIixcbiAgXCJDbGVvcmFcIixcbiAgXCJDbGV0YVwiLFxuICBcIkNsZXR1c1wiLFxuICBcIkNsZXZlXCIsXG4gIFwiQ2xldmVsYW5kXCIsXG4gIFwiQ2xpZmZvcmRcIixcbiAgXCJDbGlmdG9uXCIsXG4gIFwiQ2xpbnRcIixcbiAgXCJDbGludG9uXCIsXG4gIFwiQ2xvdGlsZGVcIixcbiAgXCJDbG92aXNcIixcbiAgXCJDbG95ZFwiLFxuICBcIkNseWRlXCIsXG4gIFwiQ29ieVwiLFxuICBcIkNvZHlcIixcbiAgXCJDb2xieVwiLFxuICBcIkNvbGVcIixcbiAgXCJDb2xlbWFuXCIsXG4gIFwiQ29saW5cIixcbiAgXCJDb2xsZWVuXCIsXG4gIFwiQ29sbGluXCIsXG4gIFwiQ29sdFwiLFxuICBcIkNvbHRlblwiLFxuICBcIkNvbHRvblwiLFxuICBcIkNvbHVtYnVzXCIsXG4gIFwiQ29uY2VwY2lvblwiLFxuICBcIkNvbm5lclwiLFxuICBcIkNvbm5pZVwiLFxuICBcIkNvbm5vclwiLFxuICBcIkNvbm9yXCIsXG4gIFwiQ29ucmFkXCIsXG4gIFwiQ29uc3RhbmNlXCIsXG4gIFwiQ29uc3RhbnRpblwiLFxuICBcIkNvbnN1ZWxvXCIsXG4gIFwiQ29vcGVyXCIsXG4gIFwiQ29yYVwiLFxuICBcIkNvcmFsaWVcIixcbiAgXCJDb3JiaW5cIixcbiAgXCJDb3JkZWxpYVwiLFxuICBcIkNvcmRlbGxcIixcbiAgXCJDb3JkaWFcIixcbiAgXCJDb3JkaWVcIixcbiAgXCJDb3JlbmVcIixcbiAgXCJDb3JpbmVcIixcbiAgXCJDb3JuZWxpdXNcIixcbiAgXCJDb3JuZWxsXCIsXG4gIFwiQ29ycmluZVwiLFxuICBcIkNvcnRlelwiLFxuICBcIkNvcnRuZXlcIixcbiAgXCJDb3J5XCIsXG4gIFwiQ290eVwiLFxuICBcIkNvdXJ0bmV5XCIsXG4gIFwiQ295XCIsXG4gIFwiQ3JhaWdcIixcbiAgXCJDcmF3Zm9yZFwiLFxuICBcIkNyZW9sYVwiLFxuICBcIkNyaXN0YWxcIixcbiAgXCJDcmlzdGlhblwiLFxuICBcIkNyaXN0aW5hXCIsXG4gIFwiQ3Jpc3RvYmFsXCIsXG4gIFwiQ3Jpc3RvcGhlclwiLFxuICBcIkNydXpcIixcbiAgXCJDcnlzdGFsXCIsXG4gIFwiQ3J5c3RlbFwiLFxuICBcIkN1bGxlblwiLFxuICBcIkN1cnRcIixcbiAgXCJDdXJ0aXNcIixcbiAgXCJDeWRuZXlcIixcbiAgXCJDeW50aGlhXCIsXG4gIFwiQ3lyaWxcIixcbiAgXCJDeXJ1c1wiLFxuICBcIkRhZ21hclwiLFxuICBcIkRhaGxpYVwiLFxuICBcIkRhaWphXCIsXG4gIFwiRGFpc2hhXCIsXG4gIFwiRGFpc3lcIixcbiAgXCJEYWtvdGFcIixcbiAgXCJEYWxlXCIsXG4gIFwiRGFsbGFzXCIsXG4gIFwiRGFsbGluXCIsXG4gIFwiRGFsdG9uXCIsXG4gIFwiRGFtYXJpc1wiLFxuICBcIkRhbWVvblwiLFxuICBcIkRhbWlhblwiLFxuICBcIkRhbWllblwiLFxuICBcIkRhbWlvblwiLFxuICBcIkRhbW9uXCIsXG4gIFwiRGFuXCIsXG4gIFwiRGFuYVwiLFxuICBcIkRhbmRyZVwiLFxuICBcIkRhbmVcIixcbiAgXCJEJ2FuZ2Vsb1wiLFxuICBcIkRhbmdlbG9cIixcbiAgXCJEYW5pYWxcIixcbiAgXCJEYW5pZWxhXCIsXG4gIFwiRGFuaWVsbGFcIixcbiAgXCJEYW5pZWxsZVwiLFxuICBcIkRhbmlrYVwiLFxuICBcIkRhbm5pZVwiLFxuICBcIkRhbm55XCIsXG4gIFwiRGFudGVcIixcbiAgXCJEYW55a2FcIixcbiAgXCJEYXBobmVcIixcbiAgXCJEYXBobmVlXCIsXG4gIFwiRGFwaG5leVwiLFxuICBcIkRhcmJ5XCIsXG4gIFwiRGFyZW5cIixcbiAgXCJEYXJpYW5cIixcbiAgXCJEYXJpYW5hXCIsXG4gIFwiRGFyaWVuXCIsXG4gIFwiRGFyaW9cIixcbiAgXCJEYXJpb25cIixcbiAgXCJEYXJpdXNcIixcbiAgXCJEYXJsZW5lXCIsXG4gIFwiRGFyb25cIixcbiAgXCJEYXJyZWxcIixcbiAgXCJEYXJyZWxsXCIsXG4gIFwiRGFycmVuXCIsXG4gIFwiRGFycmlja1wiLFxuICBcIkRhcnJpblwiLFxuICBcIkRhcnJpb25cIixcbiAgXCJEYXJyb25cIixcbiAgXCJEYXJyeWxcIixcbiAgXCJEYXJ3aW5cIixcbiAgXCJEYXJ5bFwiLFxuICBcIkRhc2hhd25cIixcbiAgXCJEYXNpYVwiLFxuICBcIkRhdmVcIixcbiAgXCJEYXZpZFwiLFxuICBcIkRhdmluXCIsXG4gIFwiRGF2aW9uXCIsXG4gIFwiRGF2b25cIixcbiAgXCJEYXZvbnRlXCIsXG4gIFwiRGF3blwiLFxuICBcIkRhd3NvblwiLFxuICBcIkRheFwiLFxuICBcIkRheWFuYVwiLFxuICBcIkRheW5hXCIsXG4gIFwiRGF5bmVcIixcbiAgXCJEYXl0b25cIixcbiAgXCJEZWFuXCIsXG4gIFwiRGVhbmdlbG9cIixcbiAgXCJEZWFubmFcIixcbiAgXCJEZWJvcmFoXCIsXG4gIFwiRGVjbGFuXCIsXG4gIFwiRGVkcmljXCIsXG4gIFwiRGVkcmlja1wiLFxuICBcIkRlZVwiLFxuICBcIkRlaW9uXCIsXG4gIFwiRGVqYVwiLFxuICBcIkRlamFoXCIsXG4gIFwiRGVqb25cIixcbiAgXCJEZWp1YW5cIixcbiAgXCJEZWxhbmV5XCIsXG4gIFwiRGVsYmVydFwiLFxuICBcIkRlbGZpbmFcIixcbiAgXCJEZWxpYVwiLFxuICBcIkRlbGlsYWhcIixcbiAgXCJEZWxsXCIsXG4gIFwiRGVsbGFcIixcbiAgXCJEZWxtZXJcIixcbiAgXCJEZWxvcmVzXCIsXG4gIFwiRGVscGhhXCIsXG4gIFwiRGVscGhpYVwiLFxuICBcIkRlbHBoaW5lXCIsXG4gIFwiRGVsdGFcIixcbiAgXCJEZW1hcmNvXCIsXG4gIFwiRGVtYXJjdXNcIixcbiAgXCJEZW1hcmlvXCIsXG4gIFwiRGVtZXRyaXNcIixcbiAgXCJEZW1ldHJpdXNcIixcbiAgXCJEZW1vbmRcIixcbiAgXCJEZW5hXCIsXG4gIFwiRGVuaXNcIixcbiAgXCJEZW5uaXNcIixcbiAgXCJEZW9uXCIsXG4gIFwiRGVvbmRyZVwiLFxuICBcIkRlb250YWVcIixcbiAgXCJEZW9udGVcIixcbiAgXCJEZXJlY2tcIixcbiAgXCJEZXJla1wiLFxuICBcIkRlcmlja1wiLFxuICBcIkRlcm9uXCIsXG4gIFwiRGVycmlja1wiLFxuICBcIkRlc2hhdW5cIixcbiAgXCJEZXNoYXduXCIsXG4gIFwiRGVzaXJlZVwiLFxuICBcIkRlc21vbmRcIixcbiAgXCJEZXNzaWVcIixcbiAgXCJEZXN0YW55XCIsXG4gIFwiRGVzdGluXCIsXG4gIFwiRGVzdGluZWVcIixcbiAgXCJEZXN0aW5leVwiLFxuICBcIkRlc3RpbmlcIixcbiAgXCJEZXN0aW55XCIsXG4gIFwiRGV2YW5cIixcbiAgXCJEZXZhbnRlXCIsXG4gIFwiRGV2ZW5cIixcbiAgXCJEZXZpblwiLFxuICBcIkRldm9uXCIsXG4gIFwiRGV2b250ZVwiLFxuICBcIkRldnluXCIsXG4gIFwiRGV3YXluZVwiLFxuICBcIkRld2l0dFwiLFxuICBcIkRleHRlclwiLFxuICBcIkRpYW1vbmRcIixcbiAgXCJEaWFuYVwiLFxuICBcIkRpYW5uYVwiLFxuICBcIkRpZWdvXCIsXG4gIFwiRGlsbGFuXCIsXG4gIFwiRGlsbG9uXCIsXG4gIFwiRGltaXRyaVwiLFxuICBcIkRpbmFcIixcbiAgXCJEaW5vXCIsXG4gIFwiRGlvblwiLFxuICBcIkRpeGllXCIsXG4gIFwiRG9ja1wiLFxuICBcIkRvbGx5XCIsXG4gIFwiRG9sb3Jlc1wiLFxuICBcIkRvbWVuaWNcIixcbiAgXCJEb21lbmljYVwiLFxuICBcIkRvbWVuaWNrXCIsXG4gIFwiRG9tZW5pY29cIixcbiAgXCJEb21pbmdvXCIsXG4gIFwiRG9taW5pY1wiLFxuICBcIkRvbWluaXF1ZVwiLFxuICBcIkRvblwiLFxuICBcIkRvbmFsZFwiLFxuICBcIkRvbmF0b1wiLFxuICBcIkRvbmF2b25cIixcbiAgXCJEb25uYVwiLFxuICBcIkRvbm5lbGxcIixcbiAgXCJEb25uaWVcIixcbiAgXCJEb25ueVwiLFxuICBcIkRvcmFcIixcbiAgXCJEb3JjYXNcIixcbiAgXCJEb3JpYW5cIixcbiAgXCJEb3Jpc1wiLFxuICBcIkRvcm90aGVhXCIsXG4gIFwiRG9yb3RoeVwiLFxuICBcIkRvcnJpc1wiLFxuICBcIkRvcnRoYVwiLFxuICBcIkRvcnRoeVwiLFxuICBcIkRvdWdcIixcbiAgXCJEb3VnbGFzXCIsXG4gIFwiRG92aWVcIixcbiAgXCJEb3lsZVwiLFxuICBcIkRyYWtlXCIsXG4gIFwiRHJld1wiLFxuICBcIkR1YW5lXCIsXG4gIFwiRHVkbGV5XCIsXG4gIFwiRHVsY2VcIixcbiAgXCJEdW5jYW5cIixcbiAgXCJEdXJ3YXJkXCIsXG4gIFwiRHVzdGluXCIsXG4gIFwiRHVzdHlcIixcbiAgXCJEd2lnaHRcIixcbiAgXCJEeWxhblwiLFxuICBcIkVhcmxcIixcbiAgXCJFYXJsZW5lXCIsXG4gIFwiRWFybGluZVwiLFxuICBcIkVhcm5lc3RcIixcbiAgXCJFYXJuZXN0aW5lXCIsXG4gIFwiRWFzdGVyXCIsXG4gIFwiRWFzdG9uXCIsXG4gIFwiRWJiYVwiLFxuICBcIkVib255XCIsXG4gIFwiRWRcIixcbiAgXCJFZGFcIixcbiAgXCJFZGRcIixcbiAgXCJFZGRpZVwiLFxuICBcIkVkZW5cIixcbiAgXCJFZGdhclwiLFxuICBcIkVkZ2FyZG9cIixcbiAgXCJFZGlzb25cIixcbiAgXCJFZG1vbmRcIixcbiAgXCJFZG11bmRcIixcbiAgXCJFZG5hXCIsXG4gIFwiRWR1YXJkb1wiLFxuICBcIkVkd2FyZFwiLFxuICBcIkVkd2FyZG9cIixcbiAgXCJFZHdpblwiLFxuICBcIkVkd2luYVwiLFxuICBcIkVkeXRoXCIsXG4gIFwiRWR5dGhlXCIsXG4gIFwiRWZmaWVcIixcbiAgXCJFZnJhaW5cIixcbiAgXCJFZnJlblwiLFxuICBcIkVpbGVlblwiLFxuICBcIkVpbmFyXCIsXG4gIFwiRWlub1wiLFxuICBcIkVsYWRpb1wiLFxuICBcIkVsYWluYVwiLFxuICBcIkVsYmVydFwiLFxuICBcIkVsZGFcIixcbiAgXCJFbGRvblwiLFxuICBcIkVsZG9yYVwiLFxuICBcIkVsZHJlZFwiLFxuICBcIkVsZHJpZGdlXCIsXG4gIFwiRWxlYW5vcmFcIixcbiAgXCJFbGVhbm9yZVwiLFxuICBcIkVsZWF6YXJcIixcbiAgXCJFbGVjdGFcIixcbiAgXCJFbGVuYVwiLFxuICBcIkVsZW5vclwiLFxuICBcIkVsZW5vcmFcIixcbiAgXCJFbGVvbm9yZVwiLFxuICBcIkVsZnJpZWRhXCIsXG4gIFwiRWxpXCIsXG4gIFwiRWxpYW5cIixcbiAgXCJFbGlhbmVcIixcbiAgXCJFbGlhc1wiLFxuICBcIkVsaWV6ZXJcIixcbiAgXCJFbGlqYWhcIixcbiAgXCJFbGlub3JcIixcbiAgXCJFbGlub3JlXCIsXG4gIFwiRWxpc2FcIixcbiAgXCJFbGlzYWJldGhcIixcbiAgXCJFbGlzZVwiLFxuICBcIkVsaXNlb1wiLFxuICBcIkVsaXNoYVwiLFxuICBcIkVsaXNzYVwiLFxuICBcIkVsaXphXCIsXG4gIFwiRWxpemFiZXRoXCIsXG4gIFwiRWxsYVwiLFxuICBcIkVsbGVuXCIsXG4gIFwiRWxsaWVcIixcbiAgXCJFbGxpb3RcIixcbiAgXCJFbGxpb3R0XCIsXG4gIFwiRWxsaXNcIixcbiAgXCJFbGxzd29ydGhcIixcbiAgXCJFbG1lclwiLFxuICBcIkVsbWlyYVwiLFxuICBcIkVsbW9cIixcbiAgXCJFbG1vcmVcIixcbiAgXCJFbG5hXCIsXG4gIFwiRWxub3JhXCIsXG4gIFwiRWxvZHlcIixcbiAgXCJFbG9pc2FcIixcbiAgXCJFbG9pc2VcIixcbiAgXCJFbG91aXNlXCIsXG4gIFwiRWxveVwiLFxuICBcIkVscm95XCIsXG4gIFwiRWxzYVwiLFxuICBcIkVsc2VcIixcbiAgXCJFbHNpZVwiLFxuICBcIkVsdGFcIixcbiAgXCJFbHRvblwiLFxuICBcIkVsdmFcIixcbiAgXCJFbHZlcmFcIixcbiAgXCJFbHZpZVwiLFxuICBcIkVsdmlzXCIsXG4gIFwiRWx3aW5cIixcbiAgXCJFbHd5blwiLFxuICBcIkVseXNlXCIsXG4gIFwiRWx5c3NhXCIsXG4gIFwiRWx6YVwiLFxuICBcIkVtYW51ZWxcIixcbiAgXCJFbWVsaWFcIixcbiAgXCJFbWVsaWVcIixcbiAgXCJFbWVseVwiLFxuICBcIkVtZXJhbGRcIixcbiAgXCJFbWVyc29uXCIsXG4gIFwiRW1lcnlcIixcbiAgXCJFbWllXCIsXG4gIFwiRW1pbFwiLFxuICBcIkVtaWxlXCIsXG4gIFwiRW1pbGlhXCIsXG4gIFwiRW1pbGlhbm9cIixcbiAgXCJFbWlsaWVcIixcbiAgXCJFbWlsaW9cIixcbiAgXCJFbWlseVwiLFxuICBcIkVtbWFcIixcbiAgXCJFbW1hbGVlXCIsXG4gIFwiRW1tYW51ZWxcIixcbiAgXCJFbW1hbnVlbGxlXCIsXG4gIFwiRW1tZXRcIixcbiAgXCJFbW1ldHRcIixcbiAgXCJFbW1pZVwiLFxuICBcIkVtbWl0dFwiLFxuICBcIkVtbXlcIixcbiAgXCJFbW9yeVwiLFxuICBcIkVuYVwiLFxuICBcIkVuaWRcIixcbiAgXCJFbm9jaFwiLFxuICBcIkVub2xhXCIsXG4gIFwiRW5vc1wiLFxuICBcIkVucmljb1wiLFxuICBcIkVucmlxdWVcIixcbiAgXCJFcGhyYWltXCIsXG4gIFwiRXJhXCIsXG4gIFwiRXJpYmVydG9cIixcbiAgXCJFcmljXCIsXG4gIFwiRXJpY2FcIixcbiAgXCJFcmljaFwiLFxuICBcIkVyaWNrXCIsXG4gIFwiRXJpY2thXCIsXG4gIFwiRXJpa1wiLFxuICBcIkVyaWthXCIsXG4gIFwiRXJpblwiLFxuICBcIkVybGluZ1wiLFxuICBcIkVybmFcIixcbiAgXCJFcm5lc3RcIixcbiAgXCJFcm5lc3RpbmFcIixcbiAgXCJFcm5lc3RpbmVcIixcbiAgXCJFcm5lc3RvXCIsXG4gIFwiRXJuaWVcIixcbiAgXCJFcnZpblwiLFxuICBcIkVyd2luXCIsXG4gIFwiRXJ5blwiLFxuICBcIkVzbWVyYWxkYVwiLFxuICBcIkVzcGVyYW56YVwiLFxuICBcIkVzdGFcIixcbiAgXCJFc3RlYmFuXCIsXG4gIFwiRXN0ZWZhbmlhXCIsXG4gIFwiRXN0ZWxcIixcbiAgXCJFc3RlbGxcIixcbiAgXCJFc3RlbGxhXCIsXG4gIFwiRXN0ZWxsZVwiLFxuICBcIkVzdGV2YW5cIixcbiAgXCJFc3RoZXJcIixcbiAgXCJFc3RyZWxsYVwiLFxuICBcIkV0aGFcIixcbiAgXCJFdGhhblwiLFxuICBcIkV0aGVsXCIsXG4gIFwiRXRoZWx5blwiLFxuICBcIkV0aHlsXCIsXG4gIFwiRXR0aWVcIixcbiAgXCJFdWRvcmFcIixcbiAgXCJFdWdlbmVcIixcbiAgXCJFdWdlbmlhXCIsXG4gIFwiRXVsYVwiLFxuICBcIkV1bGFoXCIsXG4gIFwiRXVsYWxpYVwiLFxuICBcIkV1bmFcIixcbiAgXCJFdW5pY2VcIixcbiAgXCJFdXNlYmlvXCIsXG4gIFwiRXZhXCIsXG4gIFwiRXZhbHluXCIsXG4gIFwiRXZhblwiLFxuICBcIkV2YW5nZWxpbmVcIixcbiAgXCJFdmFuc1wiLFxuICBcIkV2ZVwiLFxuICBcIkV2ZWxpbmVcIixcbiAgXCJFdmVseW5cIixcbiAgXCJFdmVyYXJkb1wiLFxuICBcIkV2ZXJldHRcIixcbiAgXCJFdmVyZXR0ZVwiLFxuICBcIkV2ZXJ0XCIsXG4gIFwiRXZpZVwiLFxuICBcIkV3YWxkXCIsXG4gIFwiRXdlbGxcIixcbiAgXCJFemVraWVsXCIsXG4gIFwiRXplcXVpZWxcIixcbiAgXCJFenJhXCIsXG4gIFwiRmFiaWFuXCIsXG4gIFwiRmFiaW9sYVwiLFxuICBcIkZhZVwiLFxuICBcIkZhbm5pZVwiLFxuICBcIkZhbm55XCIsXG4gIFwiRmF0aW1hXCIsXG4gIFwiRmF1c3Rpbm9cIixcbiAgXCJGYXVzdG9cIixcbiAgXCJGYXZpYW5cIixcbiAgXCJGYXlcIixcbiAgXCJGYXllXCIsXG4gIFwiRmVkZXJpY29cIixcbiAgXCJGZWxpY2lhXCIsXG4gIFwiRmVsaWNpdGFcIixcbiAgXCJGZWxpY2l0eVwiLFxuICBcIkZlbGlwYVwiLFxuICBcIkZlbGlwZVwiLFxuICBcIkZlbGl4XCIsXG4gIFwiRmVsdG9uXCIsXG4gIFwiRmVybWluXCIsXG4gIFwiRmVyblwiLFxuICBcIkZlcm5hbmRvXCIsXG4gIFwiRmVybmVcIixcbiAgXCJGaWRlbFwiLFxuICBcIkZpbGliZXJ0b1wiLFxuICBcIkZpbG9tZW5hXCIsXG4gIFwiRmlublwiLFxuICBcIkZpb25hXCIsXG4gIFwiRmxhdmllXCIsXG4gIFwiRmxhdmlvXCIsXG4gIFwiRmxldGFcIixcbiAgXCJGbGV0Y2hlclwiLFxuICBcIkZsb1wiLFxuICBcIkZsb3JlbmNlXCIsXG4gIFwiRmxvcmVuY2lvXCIsXG4gIFwiRmxvcmlhblwiLFxuICBcIkZsb3JpZGFcIixcbiAgXCJGbG9yaW5lXCIsXG4gIFwiRmxvc3NpZVwiLFxuICBcIkZsb3lcIixcbiAgXCJGbG95ZFwiLFxuICBcIkZvcmRcIixcbiAgXCJGb3Jlc3RcIixcbiAgXCJGb3JyZXN0XCIsXG4gIFwiRm9zdGVyXCIsXG4gIFwiRnJhbmNlc1wiLFxuICBcIkZyYW5jZXNjYVwiLFxuICBcIkZyYW5jZXNjb1wiLFxuICBcIkZyYW5jaXNcIixcbiAgXCJGcmFuY2lzY2FcIixcbiAgXCJGcmFuY2lzY29cIixcbiAgXCJGcmFuY29cIixcbiAgXCJGcmFua1wiLFxuICBcIkZyYW5raWVcIixcbiAgXCJGcmFuelwiLFxuICBcIkZyZWRcIixcbiAgXCJGcmVkYVwiLFxuICBcIkZyZWRkaWVcIixcbiAgXCJGcmVkZHlcIixcbiAgXCJGcmVkZXJpY1wiLFxuICBcIkZyZWRlcmlja1wiLFxuICBcIkZyZWRlcmlrXCIsXG4gIFwiRnJlZGVyaXF1ZVwiLFxuICBcIkZyZWRyaWNrXCIsXG4gIFwiRnJlZHlcIixcbiAgXCJGcmVlZGFcIixcbiAgXCJGcmVlbWFuXCIsXG4gIFwiRnJlaWRhXCIsXG4gIFwiRnJpZGFcIixcbiAgXCJGcmllZGFcIixcbiAgXCJGcmllZHJpY2hcIixcbiAgXCJGcml0elwiLFxuICBcIkZ1cm1hblwiLFxuICBcIkdhYmVcIixcbiAgXCJHYWJyaWVsXCIsXG4gIFwiR2FicmllbGxhXCIsXG4gIFwiR2FicmllbGxlXCIsXG4gIFwiR2FldGFub1wiLFxuICBcIkdhZ2VcIixcbiAgXCJHYWlsXCIsXG4gIFwiR2FyZG5lclwiLFxuICBcIkdhcmV0dFwiLFxuICBcIkdhcmZpZWxkXCIsXG4gIFwiR2FybGFuZFwiLFxuICBcIkdhcm5ldFwiLFxuICBcIkdhcm5ldHRcIixcbiAgXCJHYXJyZXRcIixcbiAgXCJHYXJyZXR0XCIsXG4gIFwiR2Fycmlja1wiLFxuICBcIkdhcnJpc29uXCIsXG4gIFwiR2FycnlcIixcbiAgXCJHYXJ0aFwiLFxuICBcIkdhc3RvblwiLFxuICBcIkdhdmluXCIsXG4gIFwiR2F5XCIsXG4gIFwiR2F5bGVcIixcbiAgXCJHYXlsb3JkXCIsXG4gIFwiR2VuZVwiLFxuICBcIkdlbmVyYWxcIixcbiAgXCJHZW5lc2lzXCIsXG4gIFwiR2VuZXZpZXZlXCIsXG4gIFwiR2VubmFyb1wiLFxuICBcIkdlbm92ZXZhXCIsXG4gIFwiR2VvXCIsXG4gIFwiR2VvZmZyZXlcIixcbiAgXCJHZW9yZ2VcIixcbiAgXCJHZW9yZ2V0dGVcIixcbiAgXCJHZW9yZ2lhbmFcIixcbiAgXCJHZW9yZ2lhbm5hXCIsXG4gIFwiR2VvdmFubmlcIixcbiAgXCJHZW92YW5ueVwiLFxuICBcIkdlb3ZhbnlcIixcbiAgXCJHZXJhbGRcIixcbiAgXCJHZXJhbGRpbmVcIixcbiAgXCJHZXJhcmRcIixcbiAgXCJHZXJhcmRvXCIsXG4gIFwiR2VyZGFcIixcbiAgXCJHZXJoYXJkXCIsXG4gIFwiR2VybWFpbmVcIixcbiAgXCJHZXJtYW5cIixcbiAgXCJHZXJyeVwiLFxuICBcIkdlcnNvblwiLFxuICBcIkdlcnRydWRlXCIsXG4gIFwiR2lhXCIsXG4gIFwiR2lhbm5pXCIsXG4gIFwiR2lkZW9uXCIsXG4gIFwiR2lsYmVydFwiLFxuICBcIkdpbGJlcnRvXCIsXG4gIFwiR2lsZGFcIixcbiAgXCJHaWxlc1wiLFxuICBcIkdpbGxpYW5cIixcbiAgXCJHaW5hXCIsXG4gIFwiR2lub1wiLFxuICBcIkdpb3ZhbmlcIixcbiAgXCJHaW92YW5uYVwiLFxuICBcIkdpb3Zhbm5pXCIsXG4gIFwiR2lvdmFubnlcIixcbiAgXCJHaXNzZWxsZVwiLFxuICBcIkdpdXNlcHBlXCIsXG4gIFwiR2xhZHljZVwiLFxuICBcIkdsYWR5c1wiLFxuICBcIkdsZW5cIixcbiAgXCJHbGVuZGFcIixcbiAgXCJHbGVubmFcIixcbiAgXCJHbGVubmllXCIsXG4gIFwiR2xvcmlhXCIsXG4gIFwiR29kZnJleVwiLFxuICBcIkdvbGRhXCIsXG4gIFwiR29sZGVuXCIsXG4gIFwiR29uemFsb1wiLFxuICBcIkdvcmRvblwiLFxuICBcIkdyYWNlXCIsXG4gIFwiR3JhY2llXCIsXG4gIFwiR3JhY2llbGFcIixcbiAgXCJHcmFkeVwiLFxuICBcIkdyYWhhbVwiLFxuICBcIkdyYW50XCIsXG4gIFwiR3JhbnZpbGxlXCIsXG4gIFwiR3JheWNlXCIsXG4gIFwiR3JheXNvblwiLFxuICBcIkdyZWVuXCIsXG4gIFwiR3JlZ1wiLFxuICBcIkdyZWdnXCIsXG4gIFwiR3JlZ29yaWFcIixcbiAgXCJHcmVnb3Jpb1wiLFxuICBcIkdyZWdvcnlcIixcbiAgXCJHcmV0YVwiLFxuICBcIkdyZXRjaGVuXCIsXG4gIFwiR3JleXNvblwiLFxuICBcIkdyaWZmaW5cIixcbiAgXCJHcm92ZXJcIixcbiAgXCJHdWFkYWx1cGVcIixcbiAgXCJHdWRydW5cIixcbiAgXCJHdWlkb1wiLFxuICBcIkd1aWxsZXJtb1wiLFxuICBcIkd1aXNlcHBlXCIsXG4gIFwiR3VubmFyXCIsXG4gIFwiR3VubmVyXCIsXG4gIFwiR3VzXCIsXG4gIFwiR3Vzc2llXCIsXG4gIFwiR3VzdFwiLFxuICBcIkd1c3RhdmVcIixcbiAgXCJHdXlcIixcbiAgXCJHd2VuXCIsXG4gIFwiR3dlbmRvbHluXCIsXG4gIFwiSGFkbGV5XCIsXG4gIFwiSGFpbGVlXCIsXG4gIFwiSGFpbGV5XCIsXG4gIFwiSGFpbGllXCIsXG4gIFwiSGFsXCIsXG4gIFwiSGFsZWlnaFwiLFxuICBcIkhhbGV5XCIsXG4gIFwiSGFsaWVcIixcbiAgXCJIYWxsZVwiLFxuICBcIkhhbGxpZVwiLFxuICBcIkhhbmtcIixcbiAgXCJIYW5uYVwiLFxuICBcIkhhbm5haFwiLFxuICBcIkhhbnNcIixcbiAgXCJIYXJkeVwiLFxuICBcIkhhcmxleVwiLFxuICBcIkhhcm1vblwiLFxuICBcIkhhcm1vbnlcIixcbiAgXCJIYXJvbGRcIixcbiAgXCJIYXJyaXNvblwiLFxuICBcIkhhcnJ5XCIsXG4gIFwiSGFydmV5XCIsXG4gIFwiSGFza2VsbFwiLFxuICBcIkhhc3NhblwiLFxuICBcIkhhc3NpZVwiLFxuICBcIkhhdHRpZVwiLFxuICBcIkhhdmVuXCIsXG4gIFwiSGF5ZGVuXCIsXG4gIFwiSGF5bGVlXCIsXG4gIFwiSGF5bGV5XCIsXG4gIFwiSGF5bGllXCIsXG4gIFwiSGF6ZWxcIixcbiAgXCJIYXpsZVwiLFxuICBcIkhlYXRoXCIsXG4gIFwiSGVhdGhlclwiLFxuICBcIkhlYXZlblwiLFxuICBcIkhlYmVyXCIsXG4gIFwiSGVjdG9yXCIsXG4gIFwiSGVpZGlcIixcbiAgXCJIZWxlblwiLFxuICBcIkhlbGVuYVwiLFxuICBcIkhlbGVuZVwiLFxuICBcIkhlbGdhXCIsXG4gIFwiSGVsbGVuXCIsXG4gIFwiSGVsbWVyXCIsXG4gIFwiSGVsb2lzZVwiLFxuICBcIkhlbmRlcnNvblwiLFxuICBcIkhlbnJpXCIsXG4gIFwiSGVucmlldHRlXCIsXG4gIFwiSGVucnlcIixcbiAgXCJIZXJiZXJ0XCIsXG4gIFwiSGVybWFuXCIsXG4gIFwiSGVybWFublwiLFxuICBcIkhlcm1pbmFcIixcbiAgXCJIZXJtaW5pYVwiLFxuICBcIkhlcm1pbmlvXCIsXG4gIFwiSGVyc2hlbFwiLFxuICBcIkhlcnRhXCIsXG4gIFwiSGVydGhhXCIsXG4gIFwiSGVzdGVyXCIsXG4gIFwiSGV0dGllXCIsXG4gIFwiSGlsYXJpb1wiLFxuICBcIkhpbGJlcnRcIixcbiAgXCJIaWxkYVwiLFxuICBcIkhpbGRlZ2FyZFwiLFxuICBcIkhpbGxhcmRcIixcbiAgXCJIaWxsYXJ5XCIsXG4gIFwiSGlsbWFcIixcbiAgXCJIaWx0b25cIixcbiAgXCJIaXBvbGl0b1wiLFxuICBcIkhpcmFtXCIsXG4gIFwiSG9iYXJ0XCIsXG4gIFwiSG9sZGVuXCIsXG4gIFwiSG9sbGllXCIsXG4gIFwiSG9sbGlzXCIsXG4gIFwiSG9sbHlcIixcbiAgXCJIb3BlXCIsXG4gIFwiSG9yYWNlXCIsXG4gIFwiSG9yYWNpb1wiLFxuICBcIkhvcnRlbnNlXCIsXG4gIFwiSG9zZWFcIixcbiAgXCJIb3VzdG9uXCIsXG4gIFwiSG93YXJkXCIsXG4gIFwiSG93ZWxsXCIsXG4gIFwiSG95dFwiLFxuICBcIkh1YmVydFwiLFxuICBcIkh1ZHNvblwiLFxuICBcIkh1Z2hcIixcbiAgXCJIdWxkYVwiLFxuICBcIkh1bWJlcnRvXCIsXG4gIFwiSHVudGVyXCIsXG4gIFwiSHltYW5cIixcbiAgXCJJYW5cIixcbiAgXCJJYnJhaGltXCIsXG4gIFwiSWNpZVwiLFxuICBcIklkYVwiLFxuICBcIklkZWxsXCIsXG4gIFwiSWRlbGxhXCIsXG4gIFwiSWduYWNpb1wiLFxuICBcIklnbmF0aXVzXCIsXG4gIFwiSWtlXCIsXG4gIFwiSWxhXCIsXG4gIFwiSWxlbmVcIixcbiAgXCJJbGlhbmFcIixcbiAgXCJJbWFcIixcbiAgXCJJbWFuaVwiLFxuICBcIkltZWxkYVwiLFxuICBcIkltbWFudWVsXCIsXG4gIFwiSW1vZ2VuZVwiLFxuICBcIkluZXNcIixcbiAgXCJJcm1hXCIsXG4gIFwiSXJ2aW5nXCIsXG4gIFwiSXJ3aW5cIixcbiAgXCJJc2FhY1wiLFxuICBcIklzYWJlbFwiLFxuICBcIklzYWJlbGxcIixcbiAgXCJJc2FiZWxsYVwiLFxuICBcIklzYWJlbGxlXCIsXG4gIFwiSXNhY1wiLFxuICBcIklzYWRvcmVcIixcbiAgXCJJc2FpXCIsXG4gIFwiSXNhaWFoXCIsXG4gIFwiSXNhaWFzXCIsXG4gIFwiSXNpZHJvXCIsXG4gIFwiSXNtYWVsXCIsXG4gIFwiSXNvYmVsXCIsXG4gIFwiSXNvbVwiLFxuICBcIklzcmFlbFwiLFxuICBcIklzc2FjXCIsXG4gIFwiSXR6ZWxcIixcbiAgXCJJdmFcIixcbiAgXCJJdmFoXCIsXG4gIFwiSXZvcnlcIixcbiAgXCJJdnlcIixcbiAgXCJJemFiZWxsYVwiLFxuICBcIkl6YWlhaFwiLFxuICBcIkphYmFyaVwiLFxuICBcIkphY2VcIixcbiAgXCJKYWNleVwiLFxuICBcIkphY2ludGhlXCIsXG4gIFwiSmFjaW50b1wiLFxuICBcIkphY2tcIixcbiAgXCJKYWNrZWxpbmVcIixcbiAgXCJKYWNraWVcIixcbiAgXCJKYWNrbHluXCIsXG4gIFwiSmFja3NvblwiLFxuICBcIkphY2t5XCIsXG4gIFwiSmFjbHluXCIsXG4gIFwiSmFjcXVlbHluXCIsXG4gIFwiSmFjcXVlc1wiLFxuICBcIkphY3ludGhlXCIsXG4gIFwiSmFkYVwiLFxuICBcIkphZGVcIixcbiAgXCJKYWRlblwiLFxuICBcIkphZG9uXCIsXG4gIFwiSmFkeW5cIixcbiAgXCJKYWVkZW5cIixcbiAgXCJKYWlkYVwiLFxuICBcIkphaWRlblwiLFxuICBcIkphaWx5blwiLFxuICBcIkphaW1lXCIsXG4gIFwiSmFpcm9cIixcbiAgXCJKYWtheWxhXCIsXG4gIFwiSmFrZVwiLFxuICBcIkpha29iXCIsXG4gIFwiSmFsZWVsXCIsXG4gIFwiSmFsZW5cIixcbiAgXCJKYWxvblwiLFxuICBcIkphbHluXCIsXG4gIFwiSmFtYWFsXCIsXG4gIFwiSmFtYWxcIixcbiAgXCJKYW1hclwiLFxuICBcIkphbWFyY3VzXCIsXG4gIFwiSmFtZWxcIixcbiAgXCJKYW1lc29uXCIsXG4gIFwiSmFtZXlcIixcbiAgXCJKYW1pZVwiLFxuICBcIkphbWlsXCIsXG4gIFwiSmFtaXJcIixcbiAgXCJKYW1pc29uXCIsXG4gIFwiSmFtbWllXCIsXG4gIFwiSmFuXCIsXG4gIFwiSmFuYVwiLFxuICBcIkphbmFlXCIsXG4gIFwiSmFuZVwiLFxuICBcIkphbmVsbGVcIixcbiAgXCJKYW5lc3NhXCIsXG4gIFwiSmFuZXRcIixcbiAgXCJKYW5pY2VcIixcbiAgXCJKYW5pY2tcIixcbiAgXCJKYW5pZVwiLFxuICBcIkphbmlzXCIsXG4gIFwiSmFuaXlhXCIsXG4gIFwiSmFubmllXCIsXG4gIFwiSmFueVwiLFxuICBcIkphcXVhblwiLFxuICBcIkphcXVlbGluXCIsXG4gIFwiSmFxdWVsaW5lXCIsXG4gIFwiSmFyZWRcIixcbiAgXCJKYXJlblwiLFxuICBcIkphcm9kXCIsXG4gIFwiSmFyb25cIixcbiAgXCJKYXJyZWRcIixcbiAgXCJKYXJyZWxsXCIsXG4gIFwiSmFycmV0XCIsXG4gIFwiSmFycmV0dFwiLFxuICBcIkphcnJvZFwiLFxuICBcIkphcnZpc1wiLFxuICBcIkphc2VuXCIsXG4gIFwiSmFzbWluXCIsXG4gIFwiSmFzb25cIixcbiAgXCJKYXNwZXJcIixcbiAgXCJKYXVuaXRhXCIsXG4gIFwiSmF2aWVyXCIsXG4gIFwiSmF2b25cIixcbiAgXCJKYXZvbnRlXCIsXG4gIFwiSmF5XCIsXG4gIFwiSmF5Y2VcIixcbiAgXCJKYXljZWVcIixcbiAgXCJKYXlkYVwiLFxuICBcIkpheWRlXCIsXG4gIFwiSmF5ZGVuXCIsXG4gIFwiSmF5ZG9uXCIsXG4gIFwiSmF5bGFuXCIsXG4gIFwiSmF5bGVuXCIsXG4gIFwiSmF5bGluXCIsXG4gIFwiSmF5bG9uXCIsXG4gIFwiSmF5bWVcIixcbiAgXCJKYXluZVwiLFxuICBcIkpheXNvblwiLFxuICBcIkphemx5blwiLFxuICBcIkphem1pblwiLFxuICBcIkphem15blwiLFxuICBcIkphem15bmVcIixcbiAgXCJKZWFuXCIsXG4gIFwiSmVhbmV0dGVcIixcbiAgXCJKZWFuaWVcIixcbiAgXCJKZWFubmVcIixcbiAgXCJKZWRcIixcbiAgXCJKZWRlZGlhaFwiLFxuICBcIkplZGlkaWFoXCIsXG4gIFwiSmVmZlwiLFxuICBcIkplZmZlcmV5XCIsXG4gIFwiSmVmZmVyeVwiLFxuICBcIkplZmZyZXlcIixcbiAgXCJKZWZmcnlcIixcbiAgXCJKZW5hXCIsXG4gIFwiSmVuaWZlclwiLFxuICBcIkplbm5pZVwiLFxuICBcIkplbm5pZmVyXCIsXG4gIFwiSmVubmluZ3NcIixcbiAgXCJKZW5ueWZlclwiLFxuICBcIkplbnNlblwiLFxuICBcIkplcmFkXCIsXG4gIFwiSmVyYWxkXCIsXG4gIFwiSmVyYW1pZVwiLFxuICBcIkplcmFteVwiLFxuICBcIkplcmVsXCIsXG4gIFwiSmVyZW1pZVwiLFxuICBcIkplcmVteVwiLFxuICBcIkplcm1haW5cIixcbiAgXCJKZXJtYWluZVwiLFxuICBcIkplcm1leVwiLFxuICBcIkplcm9kXCIsXG4gIFwiSmVyb21lXCIsXG4gIFwiSmVyb215XCIsXG4gIFwiSmVycmVsbFwiLFxuICBcIkplcnJvZFwiLFxuICBcIkplcnJvbGRcIixcbiAgXCJKZXJyeVwiLFxuICBcIkplc3NcIixcbiAgXCJKZXNzZVwiLFxuICBcIkplc3NpY2FcIixcbiAgXCJKZXNzaWVcIixcbiAgXCJKZXNzaWthXCIsXG4gIFwiSmVzc3lcIixcbiAgXCJKZXNzeWNhXCIsXG4gIFwiSmVzdXNcIixcbiAgXCJKZXR0XCIsXG4gIFwiSmV0dGllXCIsXG4gIFwiSmV2b25cIixcbiAgXCJKZXdlbFwiLFxuICBcIkpld2VsbFwiLFxuICBcIkppbGxpYW5cIixcbiAgXCJKaW1taWVcIixcbiAgXCJKaW1teVwiLFxuICBcIkpvXCIsXG4gIFwiSm9hblwiLFxuICBcIkpvYW5hXCIsXG4gIFwiSm9hbmllXCIsXG4gIFwiSm9hbm5lXCIsXG4gIFwiSm9hbm5pZVwiLFxuICBcIkpvYW5ueVwiLFxuICBcIkpvYW55XCIsXG4gIFwiSm9hcXVpblwiLFxuICBcIkpvY2VseW5cIixcbiAgXCJKb2RpZVwiLFxuICBcIkpvZHlcIixcbiAgXCJKb2VcIixcbiAgXCJKb2VsXCIsXG4gIFwiSm9lbGxlXCIsXG4gIFwiSm9lc3BoXCIsXG4gIFwiSm9leVwiLFxuICBcIkpvaGFuXCIsXG4gIFwiSm9oYW5uXCIsXG4gIFwiSm9oYW5uYVwiLFxuICBcIkpvaGF0aGFuXCIsXG4gIFwiSm9oblwiLFxuICBcIkpvaG5hdGhhblwiLFxuICBcIkpvaG5hdGhvblwiLFxuICBcIkpvaG5uaWVcIixcbiAgXCJKb2hubnlcIixcbiAgXCJKb2hucGF1bFwiLFxuICBcIkpvaG5zb25cIixcbiAgXCJKb2xpZVwiLFxuICBcIkpvblwiLFxuICBcIkpvbmFzXCIsXG4gIFwiSm9uYXRhblwiLFxuICBcIkpvbmF0aGFuXCIsXG4gIFwiSm9uYXRob25cIixcbiAgXCJKb3JkYW5cIixcbiAgXCJKb3JkYW5lXCIsXG4gIFwiSm9yZGlcIixcbiAgXCJKb3Jkb25cIixcbiAgXCJKb3JkeVwiLFxuICBcIkpvcmR5blwiLFxuICBcIkpvcmdlXCIsXG4gIFwiSm9zZVwiLFxuICBcIkpvc2VmYVwiLFxuICBcIkpvc2VmaW5hXCIsXG4gIFwiSm9zZXBoXCIsXG4gIFwiSm9zZXBoaW5lXCIsXG4gIFwiSm9zaFwiLFxuICBcIkpvc2h1YVwiLFxuICBcIkpvc2h1YWhcIixcbiAgXCJKb3NpYWhcIixcbiAgXCJKb3NpYW5lXCIsXG4gIFwiSm9zaWFubmVcIixcbiAgXCJKb3NpZVwiLFxuICBcIkpvc3VlXCIsXG4gIFwiSm92YW5cIixcbiAgXCJKb3ZhbmlcIixcbiAgXCJKb3Zhbm55XCIsXG4gIFwiSm92YW55XCIsXG4gIFwiSm95XCIsXG4gIFwiSm95Y2VcIixcbiAgXCJKdWFuYVwiLFxuICBcIkp1YW5pdGFcIixcbiAgXCJKdWRhaFwiLFxuICBcIkp1ZGRcIixcbiAgXCJKdWRlXCIsXG4gIFwiSnVkZ2VcIixcbiAgXCJKdWRzb25cIixcbiAgXCJKdWR5XCIsXG4gIFwiSnVsZXNcIixcbiAgXCJKdWxpYVwiLFxuICBcIkp1bGlhblwiLFxuICBcIkp1bGlhbmFcIixcbiAgXCJKdWxpYW5uZVwiLFxuICBcIkp1bGllXCIsXG4gIFwiSnVsaWVuXCIsXG4gIFwiSnVsaWV0XCIsXG4gIFwiSnVsaW9cIixcbiAgXCJKdWxpdXNcIixcbiAgXCJKdW5lXCIsXG4gIFwiSnVuaW9yXCIsXG4gIFwiSnVuaXVzXCIsXG4gIFwiSnVzdGVuXCIsXG4gIFwiSnVzdGljZVwiLFxuICBcIkp1c3RpbmFcIixcbiAgXCJKdXN0aW5lXCIsXG4gIFwiSnVzdG9uXCIsXG4gIFwiSnVzdHVzXCIsXG4gIFwiSnVzdHluXCIsXG4gIFwiSnV2ZW5hbFwiLFxuICBcIkp1d2FuXCIsXG4gIFwiS2FjZXlcIixcbiAgXCJLYWNpXCIsXG4gIFwiS2FjaWVcIixcbiAgXCJLYWRlXCIsXG4gIFwiS2FkZW5cIixcbiAgXCJLYWRpblwiLFxuICBcIkthZWxhXCIsXG4gIFwiS2FlbHluXCIsXG4gIFwiS2FpYVwiLFxuICBcIkthaWxlZVwiLFxuICBcIkthaWxleVwiLFxuICBcIkthaWx5blwiLFxuICBcIkthaXRsaW5cIixcbiAgXCJLYWl0bHluXCIsXG4gIFwiS2FsZVwiLFxuICBcIkthbGViXCIsXG4gIFwiS2FsZWlnaFwiLFxuICBcIkthbGV5XCIsXG4gIFwiS2FsaVwiLFxuICBcIkthbGxpZVwiLFxuICBcIkthbWVyb25cIixcbiAgXCJLYW1pbGxlXCIsXG4gIFwiS2FtcmVuXCIsXG4gIFwiS2Ftcm9uXCIsXG4gIFwiS2FtcnluXCIsXG4gIFwiS2FuZVwiLFxuICBcIkthcmFcIixcbiAgXCJLYXJlZW1cIixcbiAgXCJLYXJlbGxlXCIsXG4gIFwiS2FyZW5cIixcbiAgXCJLYXJpXCIsXG4gIFwiS2FyaWFuZVwiLFxuICBcIkthcmlhbm5lXCIsXG4gIFwiS2FyaW5hXCIsXG4gIFwiS2FyaW5lXCIsXG4gIFwiS2FybFwiLFxuICBcIkthcmxlZVwiLFxuICBcIkthcmxleVwiLFxuICBcIkthcmxpXCIsXG4gIFwiS2FybGllXCIsXG4gIFwiS2Fyb2xhbm5cIixcbiAgXCJLYXJzb25cIixcbiAgXCJLYXNhbmRyYVwiLFxuICBcIkthc2V5XCIsXG4gIFwiS2Fzc2FuZHJhXCIsXG4gIFwiS2F0YXJpbmFcIixcbiAgXCJLYXRlbGluXCIsXG4gIFwiS2F0ZWx5blwiLFxuICBcIkthdGVseW5uXCIsXG4gIFwiS2F0aGFyaW5hXCIsXG4gIFwiS2F0aGVyaW5lXCIsXG4gIFwiS2F0aGVyeW5cIixcbiAgXCJLYXRobGVlblwiLFxuICBcIkthdGhseW5cIixcbiAgXCJLYXRocnluXCIsXG4gIFwiS2F0aHJ5bmVcIixcbiAgXCJLYXRseW5cIixcbiAgXCJLYXRseW5uXCIsXG4gIFwiS2F0cmluYVwiLFxuICBcIkthdHJpbmVcIixcbiAgXCJLYXR0aWVcIixcbiAgXCJLYXZvblwiLFxuICBcIktheVwiLFxuICBcIktheWFcIixcbiAgXCJLYXljZWVcIixcbiAgXCJLYXlkZW5cIixcbiAgXCJLYXlsYVwiLFxuICBcIktheWxhaFwiLFxuICBcIktheWxlZVwiLFxuICBcIktheWxlaWdoXCIsXG4gIFwiS2F5bGV5XCIsXG4gIFwiS2F5bGlcIixcbiAgXCJLYXlsaWVcIixcbiAgXCJLYXlsaW5cIixcbiAgXCJLZWFnYW5cIixcbiAgXCJLZWFudVwiLFxuICBcIktlYXJhXCIsXG4gIFwiS2VhdG9uXCIsXG4gIFwiS2VlZ2FuXCIsXG4gIFwiS2VlbGV5XCIsXG4gIFwiS2VlbHlcIixcbiAgXCJLZWVuYW5cIixcbiAgXCJLZWlyYVwiLFxuICBcIktlaXRoXCIsXG4gIFwiS2VsbGVuXCIsXG4gIFwiS2VsbGV5XCIsXG4gIFwiS2VsbGlcIixcbiAgXCJLZWxsaWVcIixcbiAgXCJLZWxseVwiLFxuICBcIktlbHNpXCIsXG4gIFwiS2Vsc2llXCIsXG4gIFwiS2VsdG9uXCIsXG4gIFwiS2VsdmluXCIsXG4gIFwiS2VuXCIsXG4gIFwiS2VuZGFsbFwiLFxuICBcIktlbmRyYVwiLFxuICBcIktlbmRyaWNrXCIsXG4gIFwiS2VubmFcIixcbiAgXCJLZW5uZWRpXCIsXG4gIFwiS2VubmVkeVwiLFxuICBcIktlbm5ldGhcIixcbiAgXCJLZW5uaXRoXCIsXG4gIFwiS2VubnlcIixcbiAgXCJLZW50b25cIixcbiAgXCJLZW55YVwiLFxuICBcIktlbnlhdHRhXCIsXG4gIFwiS2VueW9uXCIsXG4gIFwiS2VvblwiLFxuICBcIktlc2hhdW5cIixcbiAgXCJLZXNoYXduXCIsXG4gIFwiS2V2ZW5cIixcbiAgXCJLZXZpblwiLFxuICBcIktldm9uXCIsXG4gIFwiS2V5b25cIixcbiAgXCJLZXlzaGF3blwiLFxuICBcIktoYWxpZFwiLFxuICBcIktoYWxpbFwiLFxuICBcIktpYW5cIixcbiAgXCJLaWFuYVwiLFxuICBcIktpYW5uYVwiLFxuICBcIktpYXJhXCIsXG4gIFwiS2lhcnJhXCIsXG4gIFwiS2llbFwiLFxuICBcIktpZXJhXCIsXG4gIFwiS2llcmFuXCIsXG4gIFwiS2lsZXlcIixcbiAgXCJLaW1cIixcbiAgXCJLaW1iZXJseVwiLFxuICBcIktpbmdcIixcbiAgXCJLaXBcIixcbiAgXCJLaXJhXCIsXG4gIFwiS2lya1wiLFxuICBcIktpcnN0ZW5cIixcbiAgXCJLaXJzdGluXCIsXG4gIFwiS2l0dHlcIixcbiAgXCJLb2JlXCIsXG4gIFwiS29ieVwiLFxuICBcIktvZHlcIixcbiAgXCJLb2xieVwiLFxuICBcIktvbGVcIixcbiAgXCJLb3JiaW5cIixcbiAgXCJLb3JleVwiLFxuICBcIktvcnlcIixcbiAgXCJLcmFpZ1wiLFxuICBcIktyaXNcIixcbiAgXCJLcmlzdGFcIixcbiAgXCJLcmlzdGlhblwiLFxuICBcIktyaXN0aW5cIixcbiAgXCJLcmlzdGluYVwiLFxuICBcIktyaXN0b2ZlclwiLFxuICBcIktyaXN0b2ZmZXJcIixcbiAgXCJLcmlzdG9waGVyXCIsXG4gIFwiS3Jpc3R5XCIsXG4gIFwiS3J5c3RhbFwiLFxuICBcIktyeXN0ZWxcIixcbiAgXCJLcnlzdGluYVwiLFxuICBcIkt1cnRcIixcbiAgXCJLdXJ0aXNcIixcbiAgXCJLeWxhXCIsXG4gIFwiS3lsZVwiLFxuICBcIkt5bGVlXCIsXG4gIFwiS3lsZWlnaFwiLFxuICBcIkt5bGVyXCIsXG4gIFwiS3lsaWVcIixcbiAgXCJLeXJhXCIsXG4gIFwiTGFjZXlcIixcbiAgXCJMYWN5XCIsXG4gIFwiTGFkYXJpdXNcIixcbiAgXCJMYWZheWV0dGVcIixcbiAgXCJMYWlsYVwiLFxuICBcIkxhaXNoYVwiLFxuICBcIkxhbWFyXCIsXG4gIFwiTGFtYmVydFwiLFxuICBcIkxhbW9udFwiLFxuICBcIkxhbmNlXCIsXG4gIFwiTGFuZGVuXCIsXG4gIFwiTGFuZVwiLFxuICBcIkxhbmV5XCIsXG4gIFwiTGFyaXNzYVwiLFxuICBcIkxhcm9uXCIsXG4gIFwiTGFycnlcIixcbiAgXCJMYXJ1ZVwiLFxuICBcIkxhdXJhXCIsXG4gIFwiTGF1cmVsXCIsXG4gIFwiTGF1cmVuXCIsXG4gIFwiTGF1cmVuY2VcIixcbiAgXCJMYXVyZXR0YVwiLFxuICBcIkxhdXJpYW5lXCIsXG4gIFwiTGF1cmlhbm5lXCIsXG4gIFwiTGF1cmllXCIsXG4gIFwiTGF1cmluZVwiLFxuICBcIkxhdXJ5XCIsXG4gIFwiTGF1cnluXCIsXG4gIFwiTGF2YWRhXCIsXG4gIFwiTGF2ZXJuXCIsXG4gIFwiTGF2ZXJuYVwiLFxuICBcIkxhdmVybmVcIixcbiAgXCJMYXZpbmFcIixcbiAgXCJMYXZpbmlhXCIsXG4gIFwiTGF2b25cIixcbiAgXCJMYXZvbm5lXCIsXG4gIFwiTGF3cmVuY2VcIixcbiAgXCJMYXdzb25cIixcbiAgXCJMYXlsYVwiLFxuICBcIkxheW5lXCIsXG4gIFwiTGF6YXJvXCIsXG4gIFwiTGVhXCIsXG4gIFwiTGVhbm5cIixcbiAgXCJMZWFubmFcIixcbiAgXCJMZWFubmVcIixcbiAgXCJMZWF0aGFcIixcbiAgXCJMZWRhXCIsXG4gIFwiTGVlXCIsXG4gIFwiTGVpZlwiLFxuICBcIkxlaWxhXCIsXG4gIFwiTGVpbGFuaVwiLFxuICBcIkxlbGFcIixcbiAgXCJMZWxhaFwiLFxuICBcIkxlbGFuZFwiLFxuICBcIkxlbGlhXCIsXG4gIFwiTGVtcGlcIixcbiAgXCJMZW11ZWxcIixcbiAgXCJMZW5uYVwiLFxuICBcIkxlbm5pZVwiLFxuICBcIkxlbm55XCIsXG4gIFwiTGVub3JhXCIsXG4gIFwiTGVub3JlXCIsXG4gIFwiTGVvXCIsXG4gIFwiTGVvbGFcIixcbiAgXCJMZW9uXCIsXG4gIFwiTGVvbmFyZFwiLFxuICBcIkxlb25hcmRvXCIsXG4gIFwiTGVvbmVcIixcbiAgXCJMZW9uZWxcIixcbiAgXCJMZW9uaWVcIixcbiAgXCJMZW9ub3JcIixcbiAgXCJMZW9ub3JhXCIsXG4gIFwiTGVvcG9sZFwiLFxuICBcIkxlb3BvbGRvXCIsXG4gIFwiTGVvcmFcIixcbiAgXCJMZXJhXCIsXG4gIFwiTGVzbGV5XCIsXG4gIFwiTGVzbGllXCIsXG4gIFwiTGVzbHlcIixcbiAgXCJMZXNzaWVcIixcbiAgXCJMZXN0ZXJcIixcbiAgXCJMZXRhXCIsXG4gIFwiTGV0aGFcIixcbiAgXCJMZXRpdGlhXCIsXG4gIFwiTGV2aVwiLFxuICBcIkxld1wiLFxuICBcIkxld2lzXCIsXG4gIFwiTGV4aVwiLFxuICBcIkxleGllXCIsXG4gIFwiTGV4dXNcIixcbiAgXCJMaWFcIixcbiAgXCJMaWFtXCIsXG4gIFwiTGlhbmFcIixcbiAgXCJMaWJiaWVcIixcbiAgXCJMaWJieVwiLFxuICBcIkxpbGFcIixcbiAgXCJMaWxpYW5cIixcbiAgXCJMaWxpYW5hXCIsXG4gIFwiTGlsaWFuZVwiLFxuICBcIkxpbGxhXCIsXG4gIFwiTGlsbGlhblwiLFxuICBcIkxpbGxpYW5hXCIsXG4gIFwiTGlsbGllXCIsXG4gIFwiTGlsbHlcIixcbiAgXCJMaWx5XCIsXG4gIFwiTGlseWFuXCIsXG4gIFwiTGluYVwiLFxuICBcIkxpbmNvbG5cIixcbiAgXCJMaW5kYVwiLFxuICBcIkxpbmRzYXlcIixcbiAgXCJMaW5kc2V5XCIsXG4gIFwiTGlubmVhXCIsXG4gIFwiTGlubmllXCIsXG4gIFwiTGlud29vZFwiLFxuICBcIkxpb25lbFwiLFxuICBcIkxpc2FcIixcbiAgXCJMaXNhbmRyb1wiLFxuICBcIkxpc2V0dGVcIixcbiAgXCJMaXR6eVwiLFxuICBcIkxpemFcIixcbiAgXCJMaXpldGhcIixcbiAgXCJMaXp6aWVcIixcbiAgXCJMbGV3ZWxseW5cIixcbiAgXCJMbG95ZFwiLFxuICBcIkxvZ2FuXCIsXG4gIFwiTG9pc1wiLFxuICBcIkxvbGFcIixcbiAgXCJMb2xpdGFcIixcbiAgXCJMb21hXCIsXG4gIFwiTG9uXCIsXG4gIFwiTG9uZG9uXCIsXG4gIFwiTG9uaWVcIixcbiAgXCJMb25uaWVcIixcbiAgXCJMb25ueVwiLFxuICBcIkxvbnpvXCIsXG4gIFwiTG9yYVwiLFxuICBcIkxvcmFpbmVcIixcbiAgXCJMb3JlblwiLFxuICBcIkxvcmVuYVwiLFxuICBcIkxvcmVuelwiLFxuICBcIkxvcmVuemFcIixcbiAgXCJMb3JlbnpvXCIsXG4gIFwiTG9yaVwiLFxuICBcIkxvcmluZVwiLFxuICBcIkxvcm5hXCIsXG4gIFwiTG90dGllXCIsXG4gIFwiTG91XCIsXG4gIFwiTG91aWVcIixcbiAgXCJMb3Vpc2FcIixcbiAgXCJMb3VyZGVzXCIsXG4gIFwiTG91dmVuaWFcIixcbiAgXCJMb3dlbGxcIixcbiAgXCJMb3lcIixcbiAgXCJMb3lhbFwiLFxuICBcIkxveWNlXCIsXG4gIFwiTHVjYXNcIixcbiAgXCJMdWNpYW5vXCIsXG4gIFwiTHVjaWVcIixcbiAgXCJMdWNpZW5uZVwiLFxuICBcIkx1Y2lsZVwiLFxuICBcIkx1Y2luZGFcIixcbiAgXCJMdWNpb1wiLFxuICBcIkx1Y2lvdXNcIixcbiAgXCJMdWNpdXNcIixcbiAgXCJMdWN5XCIsXG4gIFwiTHVkaWVcIixcbiAgXCJMdWR3aWdcIixcbiAgXCJMdWVcIixcbiAgXCJMdWVsbGFcIixcbiAgXCJMdWlnaVwiLFxuICBcIkx1aXNcIixcbiAgXCJMdWlzYVwiLFxuICBcIkx1a2FzXCIsXG4gIFwiTHVsYVwiLFxuICBcIkx1bHVcIixcbiAgXCJMdW5hXCIsXG4gIFwiTHVwZVwiLFxuICBcIkx1cmFcIixcbiAgXCJMdXJsaW5lXCIsXG4gIFwiTHV0aGVyXCIsXG4gIFwiTHV6XCIsXG4gIFwiTHlkYVwiLFxuICBcIkx5ZGlhXCIsXG4gIFwiTHlsYVwiLFxuICBcIkx5bm5cIixcbiAgXCJMeXJpY1wiLFxuICBcIkx5c2FubmVcIixcbiAgXCJNYWJlbFwiLFxuICBcIk1hYmVsbGVcIixcbiAgXCJNYWJsZVwiLFxuICBcIk1hY1wiLFxuICBcIk1hY2V5XCIsXG4gIFwiTWFjaVwiLFxuICBcIk1hY2llXCIsXG4gIFwiTWFja1wiLFxuICBcIk1hY2tlbnppZVwiLFxuICBcIk1hY3lcIixcbiAgXCJNYWRhbGluZVwiLFxuICBcIk1hZGFseW5cIixcbiAgXCJNYWRkaXNvblwiLFxuICBcIk1hZGVsaW5lXCIsXG4gIFwiTWFkZWx5blwiLFxuICBcIk1hZGVseW5uXCIsXG4gIFwiTWFkZ2VcIixcbiAgXCJNYWRpZVwiLFxuICBcIk1hZGlseW5cIixcbiAgXCJNYWRpc2VuXCIsXG4gIFwiTWFkaXNvblwiLFxuICBcIk1hZGlzeW5cIixcbiAgXCJNYWRvbm5hXCIsXG4gIFwiTWFkeXNvblwiLFxuICBcIk1hZVwiLFxuICBcIk1hZWdhblwiLFxuICBcIk1hZXZlXCIsXG4gIFwiTWFmYWxkYVwiLFxuICBcIk1hZ2FsaVwiLFxuICBcIk1hZ2RhbGVuXCIsXG4gIFwiTWFnZGFsZW5hXCIsXG4gIFwiTWFnZ2llXCIsXG4gIFwiTWFnbm9saWFcIixcbiAgXCJNYWdudXNcIixcbiAgXCJNYWlhXCIsXG4gIFwiTWFpZGFcIixcbiAgXCJNYWl5YVwiLFxuICBcIk1ham9yXCIsXG4gIFwiTWFrYXlsYVwiLFxuICBcIk1ha2VubmFcIixcbiAgXCJNYWtlbnppZVwiLFxuICBcIk1hbGFjaGlcIixcbiAgXCJNYWxjb2xtXCIsXG4gIFwiTWFsaWthXCIsXG4gIFwiTWFsaW5kYVwiLFxuICBcIk1hbGxpZVwiLFxuICBcIk1hbGxvcnlcIixcbiAgXCJNYWx2aW5hXCIsXG4gIFwiTWFuZHlcIixcbiAgXCJNYW5sZXlcIixcbiAgXCJNYW51ZWxcIixcbiAgXCJNYW51ZWxhXCIsXG4gIFwiTWFyYVwiLFxuICBcIk1hcmNcIixcbiAgXCJNYXJjZWxcIixcbiAgXCJNYXJjZWxpbmFcIixcbiAgXCJNYXJjZWxpbm9cIixcbiAgXCJNYXJjZWxsYVwiLFxuICBcIk1hcmNlbGxlXCIsXG4gIFwiTWFyY2VsbHVzXCIsXG4gIFwiTWFyY2Vsb1wiLFxuICBcIk1hcmNpYVwiLFxuICBcIk1hcmNvXCIsXG4gIFwiTWFyY29zXCIsXG4gIFwiTWFyY3VzXCIsXG4gIFwiTWFyZ2FyZXRcIixcbiAgXCJNYXJnYXJldGVcIixcbiAgXCJNYXJnYXJldHRcIixcbiAgXCJNYXJnYXJldHRhXCIsXG4gIFwiTWFyZ2FyZXR0ZVwiLFxuICBcIk1hcmdhcml0YVwiLFxuICBcIk1hcmdlXCIsXG4gIFwiTWFyZ2llXCIsXG4gIFwiTWFyZ290XCIsXG4gIFwiTWFyZ3JldFwiLFxuICBcIk1hcmd1ZXJpdGVcIixcbiAgXCJNYXJpYVwiLFxuICBcIk1hcmlhaFwiLFxuICBcIk1hcmlhbVwiLFxuICBcIk1hcmlhblwiLFxuICBcIk1hcmlhbmFcIixcbiAgXCJNYXJpYW5lXCIsXG4gIFwiTWFyaWFubmFcIixcbiAgXCJNYXJpYW5uZVwiLFxuICBcIk1hcmlhbm9cIixcbiAgXCJNYXJpYmVsXCIsXG4gIFwiTWFyaWVcIixcbiAgXCJNYXJpZWxhXCIsXG4gIFwiTWFyaWVsbGVcIixcbiAgXCJNYXJpZXR0YVwiLFxuICBcIk1hcmlsaWVcIixcbiAgXCJNYXJpbG91XCIsXG4gIFwiTWFyaWx5bmVcIixcbiAgXCJNYXJpbmFcIixcbiAgXCJNYXJpb1wiLFxuICBcIk1hcmlvblwiLFxuICBcIk1hcmlzYVwiLFxuICBcIk1hcmlzb2xcIixcbiAgXCJNYXJpdHphXCIsXG4gIFwiTWFyam9sYWluZVwiLFxuICBcIk1hcmpvcmllXCIsXG4gIFwiTWFyam9yeVwiLFxuICBcIk1hcmtcIixcbiAgXCJNYXJrdXNcIixcbiAgXCJNYXJsZWVcIixcbiAgXCJNYXJsZW5cIixcbiAgXCJNYXJsZW5lXCIsXG4gIFwiTWFybGV5XCIsXG4gIFwiTWFybGluXCIsXG4gIFwiTWFybG9uXCIsXG4gIFwiTWFycXVlc1wiLFxuICBcIk1hcnF1aXNcIixcbiAgXCJNYXJxdWlzZVwiLFxuICBcIk1hcnNoYWxsXCIsXG4gIFwiTWFydGFcIixcbiAgXCJNYXJ0aW5cIixcbiAgXCJNYXJ0aW5hXCIsXG4gIFwiTWFydGluZVwiLFxuICBcIk1hcnR5XCIsXG4gIFwiTWFydmluXCIsXG4gIFwiTWFyeVwiLFxuICBcIk1hcnlhbVwiLFxuICBcIk1hcnlqYW5lXCIsXG4gIFwiTWFyeXNlXCIsXG4gIFwiTWFzb25cIixcbiAgXCJNYXRlb1wiLFxuICBcIk1hdGhld1wiLFxuICBcIk1hdGhpYXNcIixcbiAgXCJNYXRoaWxkZVwiLFxuICBcIk1hdGlsZGFcIixcbiAgXCJNYXRpbGRlXCIsXG4gIFwiTWF0dFwiLFxuICBcIk1hdHRlb1wiLFxuICBcIk1hdHRpZVwiLFxuICBcIk1hdWRcIixcbiAgXCJNYXVkZVwiLFxuICBcIk1hdWRpZVwiLFxuICBcIk1hdXJlZW5cIixcbiAgXCJNYXVyaWNlXCIsXG4gIFwiTWF1cmljaW9cIixcbiAgXCJNYXVyaW5lXCIsXG4gIFwiTWF2ZXJpY2tcIixcbiAgXCJNYXZpc1wiLFxuICBcIk1heFwiLFxuICBcIk1heGllXCIsXG4gIFwiTWF4aW1lXCIsXG4gIFwiTWF4aW1pbGlhblwiLFxuICBcIk1heGltaWxsaWFcIixcbiAgXCJNYXhpbWlsbGlhblwiLFxuICBcIk1heGltb1wiLFxuICBcIk1heGltdXNcIixcbiAgXCJNYXhpbmVcIixcbiAgXCJNYXh3ZWxsXCIsXG4gIFwiTWF5XCIsXG4gIFwiTWF5YVwiLFxuICBcIk1heWJlbGxcIixcbiAgXCJNYXliZWxsZVwiLFxuICBcIk1heWVcIixcbiAgXCJNYXltaWVcIixcbiAgXCJNYXluYXJkXCIsXG4gIFwiTWF5cmFcIixcbiAgXCJNYXppZVwiLFxuICBcIk1ja2F5bGFcIixcbiAgXCJNY2tlbm5hXCIsXG4gIFwiTWNrZW56aWVcIixcbiAgXCJNZWFnYW5cIixcbiAgXCJNZWFnaGFuXCIsXG4gIFwiTWVkYVwiLFxuICBcIk1lZ2FuZVwiLFxuICBcIk1lZ2dpZVwiLFxuICBcIk1lZ2hhblwiLFxuICBcIk1la2hpXCIsXG4gIFwiTWVsYW55XCIsXG4gIFwiTWVsYmFcIixcbiAgXCJNZWxpc2FcIixcbiAgXCJNZWxpc3NhXCIsXG4gIFwiTWVsbGllXCIsXG4gIFwiTWVsb2R5XCIsXG4gIFwiTWVsdmluXCIsXG4gIFwiTWVsdmluYVwiLFxuICBcIk1lbHluYVwiLFxuICBcIk1lbHlzc2FcIixcbiAgXCJNZXJjZWRlc1wiLFxuICBcIk1lcmVkaXRoXCIsXG4gIFwiTWVybFwiLFxuICBcIk1lcmxlXCIsXG4gIFwiTWVybGluXCIsXG4gIFwiTWVycml0dFwiLFxuICBcIk1lcnRpZVwiLFxuICBcIk1lcnZpblwiLFxuICBcIk1ldGFcIixcbiAgXCJNaWFcIixcbiAgXCJNaWNhZWxhXCIsXG4gIFwiTWljYWhcIixcbiAgXCJNaWNoYWVsXCIsXG4gIFwiTWljaGFlbGFcIixcbiAgXCJNaWNoYWxlXCIsXG4gIFwiTWljaGVhbFwiLFxuICBcIk1pY2hlbFwiLFxuICBcIk1pY2hlbGVcIixcbiAgXCJNaWNoZWxsZVwiLFxuICBcIk1pZ3VlbFwiLFxuICBcIk1pa2F5bGFcIixcbiAgXCJNaWtlXCIsXG4gIFwiTWlrZWxcIixcbiAgXCJNaWxhblwiLFxuICBcIk1pbGVzXCIsXG4gIFwiTWlsZm9yZFwiLFxuICBcIk1pbGxlclwiLFxuICBcIk1pbGxpZVwiLFxuICBcIk1pbG9cIixcbiAgXCJNaWx0b25cIixcbiAgXCJNaW5hXCIsXG4gIFwiTWluZXJ2YVwiLFxuICBcIk1pbm5pZVwiLFxuICBcIk1pcmFjbGVcIixcbiAgXCJNaXJlaWxsZVwiLFxuICBcIk1pcmV5YVwiLFxuICBcIk1pc2FlbFwiLFxuICBcIk1pc3NvdXJpXCIsXG4gIFwiTWlzdHlcIixcbiAgXCJNaXRjaGVsXCIsXG4gIFwiTWl0Y2hlbGxcIixcbiAgXCJNaXR0aWVcIixcbiAgXCJNb2Rlc3RhXCIsXG4gIFwiTW9kZXN0b1wiLFxuICBcIk1vaGFtZWRcIixcbiAgXCJNb2hhbW1hZFwiLFxuICBcIk1vaGFtbWVkXCIsXG4gIFwiTW9pc2VzXCIsXG4gIFwiTW9sbGllXCIsXG4gIFwiTW9sbHlcIixcbiAgXCJNb25hXCIsXG4gIFwiTW9uaWNhXCIsXG4gIFwiTW9uaXF1ZVwiLFxuICBcIk1vbnJvZVwiLFxuICBcIk1vbnNlcnJhdFwiLFxuICBcIk1vbnNlcnJhdGVcIixcbiAgXCJNb250YW5hXCIsXG4gIFwiTW9udGVcIixcbiAgXCJNb250eVwiLFxuICBcIk1vcmdhblwiLFxuICBcIk1vcmlhaFwiLFxuICBcIk1vcnJpc1wiLFxuICBcIk1vcnRpbWVyXCIsXG4gIFwiTW9ydG9uXCIsXG4gIFwiTW9zZVwiLFxuICBcIk1vc2VzXCIsXG4gIFwiTW9zaGVcIixcbiAgXCJNb3NzaWVcIixcbiAgXCJNb3plbGxcIixcbiAgXCJNb3plbGxlXCIsXG4gIFwiTXVoYW1tYWRcIixcbiAgXCJNdXJpZWxcIixcbiAgXCJNdXJsXCIsXG4gIFwiTXVycGh5XCIsXG4gIFwiTXVycmF5XCIsXG4gIFwiTXVzdGFmYVwiLFxuICBcIk15YVwiLFxuICBcIk15YWhcIixcbiAgXCJNeWxlbmVcIixcbiAgXCJNeWxlc1wiLFxuICBcIk15cmFcIixcbiAgXCJNeXJpYW1cIixcbiAgXCJNeXJsXCIsXG4gIFwiTXlybmFcIixcbiAgXCJNeXJvblwiLFxuICBcIk15cnRpY2VcIixcbiAgXCJNeXJ0aWVcIixcbiAgXCJNeXJ0aXNcIixcbiAgXCJNeXJ0bGVcIixcbiAgXCJOYWRpYVwiLFxuICBcIk5ha2lhXCIsXG4gIFwiTmFtZVwiLFxuICBcIk5hbm5pZVwiLFxuICBcIk5hb21pXCIsXG4gIFwiTmFvbWllXCIsXG4gIFwiTmFwb2xlb25cIixcbiAgXCJOYXJjaXNvXCIsXG4gIFwiTmFzaFwiLFxuICBcIk5hc2lyXCIsXG4gIFwiTmF0XCIsXG4gIFwiTmF0YWxpYVwiLFxuICBcIk5hdGFsaWVcIixcbiAgXCJOYXRhc2hhXCIsXG4gIFwiTmF0aGFuXCIsXG4gIFwiTmF0aGFuYWVsXCIsXG4gIFwiTmF0aGFuaWFsXCIsXG4gIFwiTmF0aGFuaWVsXCIsXG4gIFwiTmF0aGVuXCIsXG4gIFwiTmF5ZWxpXCIsXG4gIFwiTmVhbFwiLFxuICBcIk5lZFwiLFxuICBcIk5lZHJhXCIsXG4gIFwiTmVoYVwiLFxuICBcIk5laWxcIixcbiAgXCJOZWxkYVwiLFxuICBcIk5lbGxhXCIsXG4gIFwiTmVsbGVcIixcbiAgXCJOZWxsaWVcIixcbiAgXCJOZWxzXCIsXG4gIFwiTmVsc29uXCIsXG4gIFwiTmVvbWFcIixcbiAgXCJOZXN0b3JcIixcbiAgXCJOZXR0aWVcIixcbiAgXCJOZXZhXCIsXG4gIFwiTmV3ZWxsXCIsXG4gIFwiTmV3dG9uXCIsXG4gIFwiTmlhXCIsXG4gIFwiTmljaG9sYXNcIixcbiAgXCJOaWNob2xhdXNcIixcbiAgXCJOaWNob2xlXCIsXG4gIFwiTmlja1wiLFxuICBcIk5pY2tsYXVzXCIsXG4gIFwiTmlja29sYXNcIixcbiAgXCJOaWNvXCIsXG4gIFwiTmljb2xhXCIsXG4gIFwiTmljb2xhc1wiLFxuICBcIk5pY29sZVwiLFxuICBcIk5pY29sZXR0ZVwiLFxuICBcIk5pZ2VsXCIsXG4gIFwiTmlraXRhXCIsXG4gIFwiTmlra2lcIixcbiAgXCJOaWtrb1wiLFxuICBcIk5pa29cIixcbiAgXCJOaWtvbGFzXCIsXG4gIFwiTmlsc1wiLFxuICBcIk5pbmFcIixcbiAgXCJOb2FoXCIsXG4gIFwiTm9ibGVcIixcbiAgXCJOb2VcIixcbiAgXCJOb2VsXCIsXG4gIFwiTm9lbGlhXCIsXG4gIFwiTm9lbWlcIixcbiAgXCJOb2VtaWVcIixcbiAgXCJOb2VteVwiLFxuICBcIk5vbGFcIixcbiAgXCJOb2xhblwiLFxuICBcIk5vbmFcIixcbiAgXCJOb3JhXCIsXG4gIFwiTm9yYmVydFwiLFxuICBcIk5vcmJlcnRvXCIsXG4gIFwiTm9yZW5lXCIsXG4gIFwiTm9ybWFcIixcbiAgXCJOb3JyaXNcIixcbiAgXCJOb3J2YWxcIixcbiAgXCJOb3J3b29kXCIsXG4gIFwiTm92YVwiLFxuICBcIk5vdmVsbGFcIixcbiAgXCJOeWFcIixcbiAgXCJOeWFoXCIsXG4gIFwiTnlhc2lhXCIsXG4gIFwiT2JpZVwiLFxuICBcIk9jZWFuZVwiLFxuICBcIk9jaWVcIixcbiAgXCJPY3RhdmlhXCIsXG4gIFwiT2RhXCIsXG4gIFwiT2RlbGxcIixcbiAgXCJPZGVzc2FcIixcbiAgXCJPZGllXCIsXG4gIFwiT2ZlbGlhXCIsXG4gIFwiT2tleVwiLFxuICBcIk9sYVwiLFxuICBcIk9sYWZcIixcbiAgXCJPbGVcIixcbiAgXCJPbGVuXCIsXG4gIFwiT2xldGFcIixcbiAgXCJPbGdhXCIsXG4gIFwiT2xpblwiLFxuICBcIk9saXZlclwiLFxuICBcIk9sbGllXCIsXG4gIFwiT21hXCIsXG4gIFwiT21hcmlcIixcbiAgXCJPbWVyXCIsXG4gIFwiT25hXCIsXG4gIFwiT25pZVwiLFxuICBcIk9wYWxcIixcbiAgXCJPcGhlbGlhXCIsXG4gIFwiT3JhXCIsXG4gIFwiT3JhbFwiLFxuICBcIk9yYW5cIixcbiAgXCJPcmVuXCIsXG4gIFwiT3JpZVwiLFxuICBcIk9yaW5cIixcbiAgXCJPcmlvblwiLFxuICBcIk9ybGFuZFwiLFxuICBcIk9ybGFuZG9cIixcbiAgXCJPcmxvXCIsXG4gIFwiT3JwaGFcIixcbiAgXCJPcnJpblwiLFxuICBcIk9ydmFsXCIsXG4gIFwiT3J2aWxsZVwiLFxuICBcIk9zYmFsZG9cIixcbiAgXCJPc2Jvcm5lXCIsXG4gIFwiT3NjYXJcIixcbiAgXCJPc3ZhbGRvXCIsXG4gIFwiT3N3YWxkXCIsXG4gIFwiT3N3YWxkb1wiLFxuICBcIk90aGFcIixcbiAgXCJPdGhvXCIsXG4gIFwiT3RpbGlhXCIsXG4gIFwiT3Rpc1wiLFxuICBcIk90dGlsaWVcIixcbiAgXCJPdHRpc1wiLFxuICBcIk90dG9cIixcbiAgXCJPdmFcIixcbiAgXCJPd2VuXCIsXG4gIFwiT3plbGxhXCIsXG4gIFwiUGFibG9cIixcbiAgXCJQYWlnZVwiLFxuICBcIlBhbG1hXCIsXG4gIFwiUGFtZWxhXCIsXG4gIFwiUGFuc3lcIixcbiAgXCJQYW9sb1wiLFxuICBcIlBhcmlzXCIsXG4gIFwiUGFya2VyXCIsXG4gIFwiUGFzY2FsZVwiLFxuICBcIlBhc3F1YWxlXCIsXG4gIFwiUGF0XCIsXG4gIFwiUGF0aWVuY2VcIixcbiAgXCJQYXRyaWNpYVwiLFxuICBcIlBhdHJpY2tcIixcbiAgXCJQYXRzeVwiLFxuICBcIlBhdHRpZVwiLFxuICBcIlBhdWxcIixcbiAgXCJQYXVsYVwiLFxuICBcIlBhdWxpbmVcIixcbiAgXCJQYXh0b25cIixcbiAgXCJQYXl0b25cIixcbiAgXCJQZWFybFwiLFxuICBcIlBlYXJsaWVcIixcbiAgXCJQZWFybGluZVwiLFxuICBcIlBlZHJvXCIsXG4gIFwiUGVnZ2llXCIsXG4gIFwiUGVuZWxvcGVcIixcbiAgXCJQZXJjaXZhbFwiLFxuICBcIlBlcmN5XCIsXG4gIFwiUGVycnlcIixcbiAgXCJQZXRlXCIsXG4gIFwiUGV0ZXJcIixcbiAgXCJQZXRyYVwiLFxuICBcIlBleXRvblwiLFxuICBcIlBoaWxpcFwiLFxuICBcIlBob2ViZVwiLFxuICBcIlBoeWxsaXNcIixcbiAgXCJQaWVyY2VcIixcbiAgXCJQaWVycmVcIixcbiAgXCJQaWV0cm9cIixcbiAgXCJQaW5rXCIsXG4gIFwiUGlua2llXCIsXG4gIFwiUGlwZXJcIixcbiAgXCJQb2xseVwiLFxuICBcIlBvcnRlclwiLFxuICBcIlByZWNpb3VzXCIsXG4gIFwiUHJlc2xleVwiLFxuICBcIlByZXN0b25cIixcbiAgXCJQcmljZVwiLFxuICBcIlByaW5jZVwiLFxuICBcIlByaW5jZXNzXCIsXG4gIFwiUHJpc2NpbGxhXCIsXG4gIFwiUHJvdmlkZW5jaVwiLFxuICBcIlBydWRlbmNlXCIsXG4gIFwiUXVlZW5cIixcbiAgXCJRdWVlbmllXCIsXG4gIFwiUXVlbnRpblwiLFxuICBcIlF1aW5jeVwiLFxuICBcIlF1aW5uXCIsXG4gIFwiUXVpbnRlblwiLFxuICBcIlF1aW50b25cIixcbiAgXCJSYWNoYWVsXCIsXG4gIFwiUmFjaGVsXCIsXG4gIFwiUmFjaGVsbGVcIixcbiAgXCJSYWVcIixcbiAgXCJSYWVnYW5cIixcbiAgXCJSYWZhZWxcIixcbiAgXCJSYWZhZWxhXCIsXG4gIFwiUmFoZWVtXCIsXG4gIFwiUmFoc2FhblwiLFxuICBcIlJhaHVsXCIsXG4gIFwiUmFpbmFcIixcbiAgXCJSYWxlaWdoXCIsXG4gIFwiUmFscGhcIixcbiAgXCJSYW1pcm9cIixcbiAgXCJSYW1vblwiLFxuICBcIlJhbW9uYVwiLFxuICBcIlJhbmRhbFwiLFxuICBcIlJhbmRhbGxcIixcbiAgXCJSYW5kaVwiLFxuICBcIlJhbmR5XCIsXG4gIFwiUmFuc29tXCIsXG4gIFwiUmFvdWxcIixcbiAgXCJSYXBoYWVsXCIsXG4gIFwiUmFwaGFlbGxlXCIsXG4gIFwiUmFxdWVsXCIsXG4gIFwiUmFzaGFkXCIsXG4gIFwiUmFzaGF3blwiLFxuICBcIlJhc2hlZWRcIixcbiAgXCJSYXVsXCIsXG4gIFwiUmF2ZW5cIixcbiAgXCJSYXlcIixcbiAgXCJSYXltb25kXCIsXG4gIFwiUmF5bXVuZG9cIixcbiAgXCJSZWFnYW5cIixcbiAgXCJSZWFubmFcIixcbiAgXCJSZWJhXCIsXG4gIFwiUmViZWNhXCIsXG4gIFwiUmViZWNjYVwiLFxuICBcIlJlYmVrYVwiLFxuICBcIlJlYmVrYWhcIixcbiAgXCJSZWVjZVwiLFxuICBcIlJlZWRcIixcbiAgXCJSZWVzZVwiLFxuICBcIlJlZ2FuXCIsXG4gIFwiUmVnZ2llXCIsXG4gIFwiUmVnaW5hbGRcIixcbiAgXCJSZWlkXCIsXG4gIFwiUmVpbGx5XCIsXG4gIFwiUmVpbmFcIixcbiAgXCJSZWluaG9sZFwiLFxuICBcIlJlbWluZ3RvblwiLFxuICBcIlJlbmVcIixcbiAgXCJSZW5lZVwiLFxuICBcIlJlc3NpZVwiLFxuICBcIlJldGFcIixcbiAgXCJSZXRoYVwiLFxuICBcIlJldHRhXCIsXG4gIFwiUmV1YmVuXCIsXG4gIFwiUmV2YVwiLFxuICBcIlJleFwiLFxuICBcIlJleVwiLFxuICBcIlJleWVzXCIsXG4gIFwiUmV5bXVuZG9cIixcbiAgXCJSZXluYVwiLFxuICBcIlJleW5vbGRcIixcbiAgXCJSaGVhXCIsXG4gIFwiUmhldHRcIixcbiAgXCJSaGlhbm5hXCIsXG4gIFwiUmhpYW5ub25cIixcbiAgXCJSaG9kYVwiLFxuICBcIlJpY2FyZG9cIixcbiAgXCJSaWNoYXJkXCIsXG4gIFwiUmljaGllXCIsXG4gIFwiUmljaG1vbmRcIixcbiAgXCJSaWNrXCIsXG4gIFwiUmlja2V5XCIsXG4gIFwiUmlja2llXCIsXG4gIFwiUmlja3lcIixcbiAgXCJSaWNvXCIsXG4gIFwiUmlnb2JlcnRvXCIsXG4gIFwiUmlsZXlcIixcbiAgXCJSaXRhXCIsXG4gIFwiUml2ZXJcIixcbiAgXCJSb2JiXCIsXG4gIFwiUm9iYmllXCIsXG4gIFwiUm9iZXJ0XCIsXG4gIFwiUm9iZXJ0YVwiLFxuICBcIlJvYmVydG9cIixcbiAgXCJSb2JpblwiLFxuICBcIlJvYnluXCIsXG4gIFwiUm9jaW9cIixcbiAgXCJSb2NreVwiLFxuICBcIlJvZFwiLFxuICBcIlJvZGVyaWNrXCIsXG4gIFwiUm9kZ2VyXCIsXG4gIFwiUm9kb2xmb1wiLFxuICBcIlJvZHJpY2tcIixcbiAgXCJSb2RyaWdvXCIsXG4gIFwiUm9lbFwiLFxuICBcIlJvZ2VsaW9cIixcbiAgXCJSb2dlclwiLFxuICBcIlJvZ2Vyc1wiLFxuICBcIlJvbGFuZG9cIixcbiAgXCJSb2xsaW5cIixcbiAgXCJSb21hXCIsXG4gIFwiUm9tYWluZVwiLFxuICBcIlJvbWFuXCIsXG4gIFwiUm9uXCIsXG4gIFwiUm9uYWxkb1wiLFxuICBcIlJvbm55XCIsXG4gIFwiUm9vc2V2ZWx0XCIsXG4gIFwiUm9yeVwiLFxuICBcIlJvc2FcIixcbiAgXCJSb3NhbGVlXCIsXG4gIFwiUm9zYWxpYVwiLFxuICBcIlJvc2FsaW5kXCIsXG4gIFwiUm9zYWxpbmRhXCIsXG4gIFwiUm9zYWx5blwiLFxuICBcIlJvc2Ftb25kXCIsXG4gIFwiUm9zYW5uYVwiLFxuICBcIlJvc2FyaW9cIixcbiAgXCJSb3Njb2VcIixcbiAgXCJSb3NlXCIsXG4gIFwiUm9zZWxsYVwiLFxuICBcIlJvc2VseW5cIixcbiAgXCJSb3NlbWFyaWVcIixcbiAgXCJSb3NlbWFyeVwiLFxuICBcIlJvc2VuZG9cIixcbiAgXCJSb3NldHRhXCIsXG4gIFwiUm9zaWVcIixcbiAgXCJSb3NpbmFcIixcbiAgXCJSb3NseW5cIixcbiAgXCJSb3NzXCIsXG4gIFwiUm9zc2llXCIsXG4gIFwiUm93YW5cIixcbiAgXCJSb3dlbmFcIixcbiAgXCJSb3dsYW5kXCIsXG4gIFwiUm94YW5lXCIsXG4gIFwiUm94YW5uZVwiLFxuICBcIlJveVwiLFxuICBcIlJveWFsXCIsXG4gIFwiUm95Y2VcIixcbiAgXCJSb3plbGxhXCIsXG4gIFwiUnViZW5cIixcbiAgXCJSdWJpZVwiLFxuICBcIlJ1YnlcIixcbiAgXCJSdWJ5ZVwiLFxuICBcIlJ1ZG9scGhcIixcbiAgXCJSdWR5XCIsXG4gIFwiUnVwZXJ0XCIsXG4gIFwiUnVzc1wiLFxuICBcIlJ1c3NlbFwiLFxuICBcIlJ1c3NlbGxcIixcbiAgXCJSdXN0eVwiLFxuICBcIlJ1dGhcIixcbiAgXCJSdXRoZVwiLFxuICBcIlJ1dGhpZVwiLFxuICBcIlJ5YW5cIixcbiAgXCJSeWFublwiLFxuICBcIlJ5ZGVyXCIsXG4gIFwiUnlsYW5cIixcbiAgXCJSeWxlZVwiLFxuICBcIlJ5bGVpZ2hcIixcbiAgXCJSeWxleVwiLFxuICBcIlNhYmluYVwiLFxuICBcIlNhYnJpbmFcIixcbiAgXCJTYWJyeW5hXCIsXG4gIFwiU2FkaWVcIixcbiAgXCJTYWR5ZVwiLFxuICBcIlNhZ2VcIixcbiAgXCJTYWlnZVwiLFxuICBcIlNhbGxpZVwiLFxuICBcIlNhbGx5XCIsXG4gIFwiU2FsbWFcIixcbiAgXCJTYWx2YWRvclwiLFxuICBcIlNhbHZhdG9yZVwiLFxuICBcIlNhbVwiLFxuICBcIlNhbWFudGFcIixcbiAgXCJTYW1hbnRoYVwiLFxuICBcIlNhbWFyYVwiLFxuICBcIlNhbWlyXCIsXG4gIFwiU2FtbWllXCIsXG4gIFwiU2FtbXlcIixcbiAgXCJTYW1zb25cIixcbiAgXCJTYW5kcmFcIixcbiAgXCJTYW5kcmluZVwiLFxuICBcIlNhbmR5XCIsXG4gIFwiU2FuZm9yZFwiLFxuICBcIlNhbnRhXCIsXG4gIFwiU2FudGlhZ29cIixcbiAgXCJTYW50aW5hXCIsXG4gIFwiU2FudGlub1wiLFxuICBcIlNhbnRvc1wiLFxuICBcIlNhcmFoXCIsXG4gIFwiU2FyYWlcIixcbiAgXCJTYXJpbmFcIixcbiAgXCJTYXNoYVwiLFxuICBcIlNhdWxcIixcbiAgXCJTYXZhbmFoXCIsXG4gIFwiU2F2YW5uYVwiLFxuICBcIlNhdmFubmFoXCIsXG4gIFwiU2F2aW9uXCIsXG4gIFwiU2NhcmxldHRcIixcbiAgXCJTY2h1eWxlclwiLFxuICBcIlNjb3RcIixcbiAgXCJTY290dGllXCIsXG4gIFwiU2NvdHR5XCIsXG4gIFwiU2VhbXVzXCIsXG4gIFwiU2VhblwiLFxuICBcIlNlYmFzdGlhblwiLFxuICBcIlNlZHJpY2tcIixcbiAgXCJTZWxlbmFcIixcbiAgXCJTZWxpbmFcIixcbiAgXCJTZWxtZXJcIixcbiAgXCJTZXJlbmFcIixcbiAgXCJTZXJlbml0eVwiLFxuICBcIlNldGhcIixcbiAgXCJTaGFkXCIsXG4gIFwiU2hhaW5hXCIsXG4gIFwiU2hha2lyYVwiLFxuICBcIlNoYW5hXCIsXG4gIFwiU2hhbmVcIixcbiAgXCJTaGFuZWxcIixcbiAgXCJTaGFuZWxsZVwiLFxuICBcIlNoYW5pYVwiLFxuICBcIlNoYW5pZVwiLFxuICBcIlNoYW5peWFcIixcbiAgXCJTaGFubmFcIixcbiAgXCJTaGFubm9uXCIsXG4gIFwiU2hhbm55XCIsXG4gIFwiU2hhbm9uXCIsXG4gIFwiU2hhbnlcIixcbiAgXCJTaGFyb25cIixcbiAgXCJTaGF1blwiLFxuICBcIlNoYXduXCIsXG4gIFwiU2hhd25hXCIsXG4gIFwiU2hheWxlZVwiLFxuICBcIlNoYXluYVwiLFxuICBcIlNoYXluZVwiLFxuICBcIlNoZWFcIixcbiAgXCJTaGVpbGFcIixcbiAgXCJTaGVsZG9uXCIsXG4gIFwiU2hlbWFyXCIsXG4gIFwiU2hlcmlkYW5cIixcbiAgXCJTaGVybWFuXCIsXG4gIFwiU2hlcndvb2RcIixcbiAgXCJTaGlybGV5XCIsXG4gIFwiU2h5YW5uXCIsXG4gIFwiU2h5YW5uZVwiLFxuICBcIlNpYnlsXCIsXG4gIFwiU2lkXCIsXG4gIFwiU2lkbmV5XCIsXG4gIFwiU2llbm5hXCIsXG4gIFwiU2llcnJhXCIsXG4gIFwiU2lnbXVuZFwiLFxuICBcIlNpZ3JpZFwiLFxuICBcIlNpZ3VyZFwiLFxuICBcIlNpbGFzXCIsXG4gIFwiU2ltXCIsXG4gIFwiU2ltZW9uXCIsXG4gIFwiU2ltb25lXCIsXG4gIFwiU2luY2VyZVwiLFxuICBcIlNpc3RlclwiLFxuICBcIlNreWVcIixcbiAgXCJTa3lsYVwiLFxuICBcIlNreWxhclwiLFxuICBcIlNvZmlhXCIsXG4gIFwiU29sZWRhZFwiLFxuICBcIlNvbG9uXCIsXG4gIFwiU29uaWFcIixcbiAgXCJTb25ueVwiLFxuICBcIlNvbnlhXCIsXG4gIFwiU29waGlhXCIsXG4gIFwiU29waGllXCIsXG4gIFwiU3BlbmNlclwiLFxuICBcIlN0YWNleVwiLFxuICBcIlN0YWN5XCIsXG4gIFwiU3RhblwiLFxuICBcIlN0YW5mb3JkXCIsXG4gIFwiU3RhbmxleVwiLFxuICBcIlN0YW50b25cIixcbiAgXCJTdGVmYW5cIixcbiAgXCJTdGVmYW5pZVwiLFxuICBcIlN0ZWxsYVwiLFxuICBcIlN0ZXBoYW5cIixcbiAgXCJTdGVwaGFuaWFcIixcbiAgXCJTdGVwaGFuaWVcIixcbiAgXCJTdGVwaGFueVwiLFxuICBcIlN0ZXBoZW5cIixcbiAgXCJTdGVwaG9uXCIsXG4gIFwiU3RlcmxpbmdcIixcbiAgXCJTdGV2ZVwiLFxuICBcIlN0ZXZpZVwiLFxuICBcIlN0ZXdhcnRcIixcbiAgXCJTdG9uZVwiLFxuICBcIlN0dWFydFwiLFxuICBcIlN1bW1lclwiLFxuICBcIlN1bm55XCIsXG4gIFwiU3VzYW5cIixcbiAgXCJTdXNhbmFcIixcbiAgXCJTdXNhbm5hXCIsXG4gIFwiU3VzaWVcIixcbiAgXCJTdXphbm5lXCIsXG4gIFwiU3ZlblwiLFxuICBcIlN5YmxlXCIsXG4gIFwiU3lkbmVlXCIsXG4gIFwiU3lkbmV5XCIsXG4gIFwiU3lkbmlcIixcbiAgXCJTeWRuaWVcIixcbiAgXCJTeWx2YW5cIixcbiAgXCJTeWx2ZXN0ZXJcIixcbiAgXCJTeWx2aWFcIixcbiAgXCJUYWJpdGhhXCIsXG4gIFwiVGFkXCIsXG4gIFwiVGFsaWFcIixcbiAgXCJUYWxvblwiLFxuICBcIlRhbWFyYVwiLFxuICBcIlRhbWlhXCIsXG4gIFwiVGFuaWFcIixcbiAgXCJUYW5uZXJcIixcbiAgXCJUYW55YVwiLFxuICBcIlRhcmFcIixcbiAgXCJUYXJ5blwiLFxuICBcIlRhdGVcIixcbiAgXCJUYXR1bVwiLFxuICBcIlRhdHlhbmFcIixcbiAgXCJUYXVyZWFuXCIsXG4gIFwiVGF2YXJlc1wiLFxuICBcIlRheWFcIixcbiAgXCJUYXlsb3JcIixcbiAgXCJUZWFnYW5cIixcbiAgXCJUZWRcIixcbiAgXCJUZWxseVwiLFxuICBcIlRlcmVuY2VcIixcbiAgXCJUZXJlc2FcIixcbiAgXCJUZXJyYW5jZVwiLFxuICBcIlRlcnJlbGxcIixcbiAgXCJUZXJyZW5jZVwiLFxuICBcIlRlcnJpbGxcIixcbiAgXCJUZXJyeVwiLFxuICBcIlRlc3NcIixcbiAgXCJUZXNzaWVcIixcbiAgXCJUZXZpblwiLFxuICBcIlRoYWRcIixcbiAgXCJUaGFkZGV1c1wiLFxuICBcIlRoYWxpYVwiLFxuICBcIlRoZWFcIixcbiAgXCJUaGVsbWFcIixcbiAgXCJUaGVvXCIsXG4gIFwiVGhlb2RvcmFcIixcbiAgXCJUaGVvZG9yZVwiLFxuICBcIlRoZXJlc2FcIixcbiAgXCJUaGVyZXNlXCIsXG4gIFwiVGhlcmVzaWFcIixcbiAgXCJUaGVyb25cIixcbiAgXCJUaG9tYXNcIixcbiAgXCJUaG9yYVwiLFxuICBcIlRodXJtYW5cIixcbiAgXCJUaWFcIixcbiAgXCJUaWFuYVwiLFxuICBcIlRpYW5uYVwiLFxuICBcIlRpYXJhXCIsXG4gIFwiVGllcnJhXCIsXG4gIFwiVGlmZmFueVwiLFxuICBcIlRpbGxtYW5cIixcbiAgXCJUaW1tb3RoeVwiLFxuICBcIlRpbW15XCIsXG4gIFwiVGltb3RoeVwiLFxuICBcIlRpbmFcIixcbiAgXCJUaXRvXCIsXG4gIFwiVGl0dXNcIixcbiAgXCJUb2JpblwiLFxuICBcIlRvYnlcIixcbiAgXCJUb2RcIixcbiAgXCJUb21cIixcbiAgXCJUb21hc1wiLFxuICBcIlRvbWFzYVwiLFxuICBcIlRvbW1pZVwiLFxuICBcIlRvbmV5XCIsXG4gIFwiVG9uaVwiLFxuICBcIlRvbnlcIixcbiAgXCJUb3JleVwiLFxuICBcIlRvcnJhbmNlXCIsXG4gIFwiVG9ycmV5XCIsXG4gIFwiVG95XCIsXG4gIFwiVHJhY2VcIixcbiAgXCJUcmFjZXlcIixcbiAgXCJUcmFjeVwiLFxuICBcIlRyYXZpc1wiLFxuICBcIlRyYXZvblwiLFxuICBcIlRyZVwiLFxuICBcIlRyZW1haW5lXCIsXG4gIFwiVHJlbWF5bmVcIixcbiAgXCJUcmVudFwiLFxuICBcIlRyZW50b25cIixcbiAgXCJUcmVzc2FcIixcbiAgXCJUcmVzc2llXCIsXG4gIFwiVHJldmFcIixcbiAgXCJUcmV2ZXJcIixcbiAgXCJUcmV2aW9uXCIsXG4gIFwiVHJldm9yXCIsXG4gIFwiVHJleVwiLFxuICBcIlRyaW5pdHlcIixcbiAgXCJUcmlzaGFcIixcbiAgXCJUcmlzdGlhblwiLFxuICBcIlRyaXN0aW5cIixcbiAgXCJUcmlzdG9uXCIsXG4gIFwiVHJveVwiLFxuICBcIlRydWRpZVwiLFxuICBcIlRyeWNpYVwiLFxuICBcIlRyeXN0YW5cIixcbiAgXCJUdXJuZXJcIixcbiAgXCJUd2lsYVwiLFxuICBcIlR5bGVyXCIsXG4gIFwiVHlyYVwiLFxuICBcIlR5cmVlXCIsXG4gIFwiVHlyZWVrXCIsXG4gIFwiVHlyZWxcIixcbiAgXCJUeXJlbGxcIixcbiAgXCJUeXJlc2VcIixcbiAgXCJUeXJpcXVlXCIsXG4gIFwiVHlzaGF3blwiLFxuICBcIlR5c29uXCIsXG4gIFwiVWJhbGRvXCIsXG4gIFwiVWxpY2VzXCIsXG4gIFwiVWxpc2VzXCIsXG4gIFwiVW5hXCIsXG4gIFwiVW5pcXVlXCIsXG4gIFwiVXJiYW5cIixcbiAgXCJVcmlhaFwiLFxuICBcIlVyaWVsXCIsXG4gIFwiVXJzdWxhXCIsXG4gIFwiVmFkYVwiLFxuICBcIlZhbGVudGluXCIsXG4gIFwiVmFsZW50aW5hXCIsXG4gIFwiVmFsZW50aW5lXCIsXG4gIFwiVmFsZXJpZVwiLFxuICBcIlZhbGxpZVwiLFxuICBcIlZhblwiLFxuICBcIlZhbmNlXCIsXG4gIFwiVmFuZXNzYVwiLFxuICBcIlZhdWdoblwiLFxuICBcIlZlZGFcIixcbiAgXCJWZWxkYVwiLFxuICBcIlZlbGxhXCIsXG4gIFwiVmVsbWFcIixcbiAgXCJWZWx2YVwiLFxuICBcIlZlbmFcIixcbiAgXCJWZXJkYVwiLFxuICBcIlZlcmRpZVwiLFxuICBcIlZlcmdpZVwiLFxuICBcIlZlcmxhXCIsXG4gIFwiVmVybGllXCIsXG4gIFwiVmVyblwiLFxuICBcIlZlcm5hXCIsXG4gIFwiVmVybmVyXCIsXG4gIFwiVmVybmljZVwiLFxuICBcIlZlcm5pZVwiLFxuICBcIlZlcm5vblwiLFxuICBcIlZlcm9uYVwiLFxuICBcIlZlcm9uaWNhXCIsXG4gIFwiVmVzdGFcIixcbiAgXCJWaWNlbnRhXCIsXG4gIFwiVmljZW50ZVwiLFxuICBcIlZpY2tpZVwiLFxuICBcIlZpY2t5XCIsXG4gIFwiVmljdG9yXCIsXG4gIFwiVmljdG9yaWFcIixcbiAgXCJWaWRhXCIsXG4gIFwiVmlkYWxcIixcbiAgXCJWaWxtYVwiLFxuICBcIlZpbmNlXCIsXG4gIFwiVmluY2VudFwiLFxuICBcIlZpbmNlbnphXCIsXG4gIFwiVmluY2Vuem9cIixcbiAgXCJWaW5uaWVcIixcbiAgXCJWaW9sYVwiLFxuICBcIlZpb2xldFwiLFxuICBcIlZpb2xldHRlXCIsXG4gIFwiVmlyZ2llXCIsXG4gIFwiVmlyZ2lsXCIsXG4gIFwiVmlyZ2luaWFcIixcbiAgXCJWaXJnaW5pZVwiLFxuICBcIlZpdGFcIixcbiAgXCJWaXRvXCIsXG4gIFwiVml2YVwiLFxuICBcIlZpdmlhblwiLFxuICBcIlZpdmlhbmVcIixcbiAgXCJWaXZpYW5uZVwiLFxuICBcIlZpdmllblwiLFxuICBcIlZpdmllbm5lXCIsXG4gIFwiVmxhZGltaXJcIixcbiAgXCJXYWRlXCIsXG4gIFwiV2Fpbm9cIixcbiAgXCJXYWxkb1wiLFxuICBcIldhbGtlclwiLFxuICBcIldhbGxhY2VcIixcbiAgXCJXYWx0ZXJcIixcbiAgXCJXYWx0b25cIixcbiAgXCJXYW5kYVwiLFxuICBcIldhcmRcIixcbiAgXCJXYXJyZW5cIixcbiAgXCJXYXRzb25cIixcbiAgXCJXYXZhXCIsXG4gIFwiV2F5bG9uXCIsXG4gIFwiV2F5bmVcIixcbiAgXCJXZWJzdGVyXCIsXG4gIFwiV2VsZG9uXCIsXG4gIFwiV2VsbGluZ3RvblwiLFxuICBcIldlbmRlbGxcIixcbiAgXCJXZW5keVwiLFxuICBcIldlcm5lclwiLFxuICBcIldlc3RsZXlcIixcbiAgXCJXZXN0b25cIixcbiAgXCJXaGl0bmV5XCIsXG4gIFwiV2lsYmVyXCIsXG4gIFwiV2lsYmVydFwiLFxuICBcIldpbGJ1cm5cIixcbiAgXCJXaWxleVwiLFxuICBcIldpbGZvcmRcIixcbiAgXCJXaWxmcmVkXCIsXG4gIFwiV2lsZnJlZG9cIixcbiAgXCJXaWxmcmlkXCIsXG4gIFwiV2lsaGVsbVwiLFxuICBcIldpbGhlbG1pbmVcIixcbiAgXCJXaWxsXCIsXG4gIFwiV2lsbGFcIixcbiAgXCJXaWxsYXJkXCIsXG4gIFwiV2lsbGlhbVwiLFxuICBcIldpbGxpZVwiLFxuICBcIldpbGxpc1wiLFxuICBcIldpbGxvd1wiLFxuICBcIldpbGx5XCIsXG4gIFwiV2lsbWFcIixcbiAgXCJXaWxtZXJcIixcbiAgXCJXaWxzb25cIixcbiAgXCJXaWx0b25cIixcbiAgXCJXaW5maWVsZFwiLFxuICBcIldpbmlmcmVkXCIsXG4gIFwiV2lubmlmcmVkXCIsXG4gIFwiV2lub25hXCIsXG4gIFwiV2luc3RvblwiLFxuICBcIldvb2Ryb3dcIixcbiAgXCJXeWF0dFwiLFxuICBcIld5bWFuXCIsXG4gIFwiWGFuZGVyXCIsXG4gIFwiWGF2aWVyXCIsXG4gIFwiWHphdmllclwiLFxuICBcIllhZGlyYVwiLFxuICBcIllhc21lZW5cIixcbiAgXCJZYXNtaW5cIixcbiAgXCJZYXNtaW5lXCIsXG4gIFwiWWF6bWluXCIsXG4gIFwiWWVzZW5pYVwiLFxuICBcIlllc3NlbmlhXCIsXG4gIFwiWW9sYW5kYVwiLFxuICBcIllvc2hpa29cIixcbiAgXCJZdmV0dGVcIixcbiAgXCJZdm9ubmVcIixcbiAgXCJaYWNoYXJpYWhcIixcbiAgXCJaYWNoYXJ5XCIsXG4gIFwiWmFjaGVyeVwiLFxuICBcIlphY2tcIixcbiAgXCJaYWNrYXJ5XCIsXG4gIFwiWmFja2VyeVwiLFxuICBcIlpha2FyeVwiLFxuICBcIlphbmRlclwiLFxuICBcIlphbmVcIixcbiAgXCJaYXJpYVwiLFxuICBcIlplY2hhcmlhaFwiLFxuICBcIlplbGRhXCIsXG4gIFwiWmVsbGFcIixcbiAgXCJaZWxtYVwiLFxuICBcIlplbmFcIixcbiAgXCJaZXR0YVwiLFxuICBcIlppb25cIixcbiAgXCJaaXRhXCIsXG4gIFwiWm9lXCIsXG4gIFwiWm9leVwiLFxuICBcIlpvaWVcIixcbiAgXCJab2lsYVwiLFxuICBcIlpvbGFcIixcbiAgXCJab3JhXCIsXG4gIFwiWnVsYVwiXG5dO1xuIiwidmFyIG5hbWUgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gbmFtZTtcbm5hbWUuZmlyc3RfbmFtZSA9IHJlcXVpcmUoXCIuL2ZpcnN0X25hbWVcIik7XG5uYW1lLmxhc3RfbmFtZSA9IHJlcXVpcmUoXCIuL2xhc3RfbmFtZVwiKTtcbm5hbWUucHJlZml4ID0gcmVxdWlyZShcIi4vcHJlZml4XCIpO1xubmFtZS5zdWZmaXggPSByZXF1aXJlKFwiLi9zdWZmaXhcIik7XG5uYW1lLnRpdGxlID0gcmVxdWlyZShcIi4vdGl0bGVcIik7XG5uYW1lLm5hbWUgPSByZXF1aXJlKFwiLi9uYW1lXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBYmJvdHRcIixcbiAgXCJBYmVybmF0aHlcIixcbiAgXCJBYnNoaXJlXCIsXG4gIFwiQWRhbXNcIixcbiAgXCJBbHRlbndlcnRoXCIsXG4gIFwiQW5kZXJzb25cIixcbiAgXCJBbmt1bmRpbmdcIixcbiAgXCJBcm1zdHJvbmdcIixcbiAgXCJBdWVyXCIsXG4gIFwiQXVmZGVyaGFyXCIsXG4gIFwiQmFocmluZ2VyXCIsXG4gIFwiQmFpbGV5XCIsXG4gIFwiQmFsaXN0cmVyaVwiLFxuICBcIkJhcnJvd3NcIixcbiAgXCJCYXJ0ZWxsXCIsXG4gIFwiQmFydG9sZXR0aVwiLFxuICBcIkJhcnRvblwiLFxuICBcIkJhc2hpcmlhblwiLFxuICBcIkJhdHpcIixcbiAgXCJCYXVjaFwiLFxuICBcIkJhdW1iYWNoXCIsXG4gIFwiQmF5ZXJcIixcbiAgXCJCZWFoYW5cIixcbiAgXCJCZWF0dHlcIixcbiAgXCJCZWNodGVsYXJcIixcbiAgXCJCZWNrZXJcIixcbiAgXCJCZWRuYXJcIixcbiAgXCJCZWVyXCIsXG4gIFwiQmVpZXJcIixcbiAgXCJCZXJnZVwiLFxuICBcIkJlcmduYXVtXCIsXG4gIFwiQmVyZ3N0cm9tXCIsXG4gIFwiQmVybmhhcmRcIixcbiAgXCJCZXJuaWVyXCIsXG4gIFwiQmluc1wiLFxuICBcIkJsYW5kYVwiLFxuICBcIkJsaWNrXCIsXG4gIFwiQmxvY2tcIixcbiAgXCJCb2RlXCIsXG4gIFwiQm9laG1cIixcbiAgXCJCb2dhblwiLFxuICBcIkJvZ2lzaWNoXCIsXG4gIFwiQm9yZXJcIixcbiAgXCJCb3Njb1wiLFxuICBcIkJvdHNmb3JkXCIsXG4gIFwiQm95ZXJcIixcbiAgXCJCb3lsZVwiLFxuICBcIkJyYWR0a2VcIixcbiAgXCJCcmFrdXNcIixcbiAgXCJCcmF1blwiLFxuICBcIkJyZWl0ZW5iZXJnXCIsXG4gIFwiQnJla2tlXCIsXG4gIFwiQnJvd25cIixcbiAgXCJCcnVlblwiLFxuICBcIkJ1Y2tyaWRnZVwiLFxuICBcIkNhcnJvbGxcIixcbiAgXCJDYXJ0ZXJcIixcbiAgXCJDYXJ0d3JpZ2h0XCIsXG4gIFwiQ2FzcGVyXCIsXG4gIFwiQ2Fzc2luXCIsXG4gIFwiQ2hhbXBsaW5cIixcbiAgXCJDaHJpc3RpYW5zZW5cIixcbiAgXCJDb2xlXCIsXG4gIFwiQ29sbGllclwiLFxuICBcIkNvbGxpbnNcIixcbiAgXCJDb25uXCIsXG4gIFwiQ29ubmVsbHlcIixcbiAgXCJDb25yb3lcIixcbiAgXCJDb25zaWRpbmVcIixcbiAgXCJDb3JrZXJ5XCIsXG4gIFwiQ29ybWllclwiLFxuICBcIkNvcndpblwiLFxuICBcIkNyZW1pblwiLFxuICBcIkNyaXN0XCIsXG4gIFwiQ3JvbmFcIixcbiAgXCJDcm9uaW5cIixcbiAgXCJDcm9va3NcIixcbiAgXCJDcnVpY2tzaGFua1wiLFxuICBcIkN1bW1lcmF0YVwiLFxuICBcIkN1bW1pbmdzXCIsXG4gIFwiRGFjaFwiLFxuICBcIkQnQW1vcmVcIixcbiAgXCJEYW5pZWxcIixcbiAgXCJEYXJlXCIsXG4gIFwiRGF1Z2hlcnR5XCIsXG4gIFwiRGF2aXNcIixcbiAgXCJEZWNrb3dcIixcbiAgXCJEZW5lc2lrXCIsXG4gIFwiRGliYmVydFwiLFxuICBcIkRpY2tlbnNcIixcbiAgXCJEaWNraVwiLFxuICBcIkRpY2tpbnNvblwiLFxuICBcIkRpZXRyaWNoXCIsXG4gIFwiRG9ubmVsbHlcIixcbiAgXCJEb29sZXlcIixcbiAgXCJEb3VnbGFzXCIsXG4gIFwiRG95bGVcIixcbiAgXCJEdUJ1cXVlXCIsXG4gIFwiRHVyZ2FuXCIsXG4gIFwiRWJlcnRcIixcbiAgXCJFZmZlcnR6XCIsXG4gIFwiRWljaG1hbm5cIixcbiAgXCJFbWFyZFwiLFxuICBcIkVtbWVyaWNoXCIsXG4gIFwiRXJkbWFuXCIsXG4gIFwiRXJuc2VyXCIsXG4gIFwiRmFkZWxcIixcbiAgXCJGYWhleVwiLFxuICBcIkZhcnJlbGxcIixcbiAgXCJGYXlcIixcbiAgXCJGZWVuZXlcIixcbiAgXCJGZWVzdFwiLFxuICBcIkZlaWxcIixcbiAgXCJGZXJyeVwiLFxuICBcIkZpc2hlclwiLFxuICBcIkZsYXRsZXlcIixcbiAgXCJGcmFtaVwiLFxuICBcIkZyYW5lY2tpXCIsXG4gIFwiRnJpZXNlblwiLFxuICBcIkZyaXRzY2hcIixcbiAgXCJGdW5rXCIsXG4gIFwiR2F5bG9yZFwiLFxuICBcIkdlcmhvbGRcIixcbiAgXCJHZXJsYWNoXCIsXG4gIFwiR2lic29uXCIsXG4gIFwiR2lzbGFzb25cIixcbiAgXCJHbGVhc29uXCIsXG4gIFwiR2xlaWNobmVyXCIsXG4gIFwiR2xvdmVyXCIsXG4gIFwiR29sZG5lclwiLFxuICBcIkdvb2R3aW5cIixcbiAgXCJHb3JjemFueVwiLFxuICBcIkdvdHRsaWViXCIsXG4gIFwiR295ZXR0ZVwiLFxuICBcIkdyYWR5XCIsXG4gIFwiR3JhaGFtXCIsXG4gIFwiR3JhbnRcIixcbiAgXCJHcmVlblwiLFxuICBcIkdyZWVuZmVsZGVyXCIsXG4gIFwiR3JlZW5ob2x0XCIsXG4gIFwiR3JpbWVzXCIsXG4gIFwiR3VsZ293c2tpXCIsXG4gIFwiR3VzaWtvd3NraVwiLFxuICBcIkd1dGtvd3NraVwiLFxuICBcIkd1dG1hbm5cIixcbiAgXCJIYWFnXCIsXG4gIFwiSGFja2V0dFwiLFxuICBcIkhhZ2VuZXNcIixcbiAgXCJIYWhuXCIsXG4gIFwiSGFsZXlcIixcbiAgXCJIYWx2b3Jzb25cIixcbiAgXCJIYW1pbGxcIixcbiAgXCJIYW1tZXNcIixcbiAgXCJIYW5kXCIsXG4gIFwiSGFuZVwiLFxuICBcIkhhbnNlblwiLFxuICBcIkhhcmJlclwiLFxuICBcIkhhcnJpc1wiLFxuICBcIkhhcnRtYW5uXCIsXG4gIFwiSGFydmV5XCIsXG4gIFwiSGF1Y2tcIixcbiAgXCJIYXllc1wiLFxuICBcIkhlYW5leVwiLFxuICBcIkhlYXRoY290ZVwiLFxuICBcIkhlZ21hbm5cIixcbiAgXCJIZWlkZW5yZWljaFwiLFxuICBcIkhlbGxlclwiLFxuICBcIkhlcm1hblwiLFxuICBcIkhlcm1hbm5cIixcbiAgXCJIZXJtaXN0b25cIixcbiAgXCJIZXJ6b2dcIixcbiAgXCJIZXNzZWxcIixcbiAgXCJIZXR0aW5nZXJcIixcbiAgXCJIaWNrbGVcIixcbiAgXCJIaWxsbFwiLFxuICBcIkhpbGxzXCIsXG4gIFwiSGlscGVydFwiLFxuICBcIkhpbnR6XCIsXG4gIFwiSGlydGhlXCIsXG4gIFwiSG9ka2lld2ljelwiLFxuICBcIkhvZWdlclwiLFxuICBcIkhvbWVuaWNrXCIsXG4gIFwiSG9wcGVcIixcbiAgXCJIb3dlXCIsXG4gIFwiSG93ZWxsXCIsXG4gIFwiSHVkc29uXCIsXG4gIFwiSHVlbFwiLFxuICBcIkh1ZWxzXCIsXG4gIFwiSHlhdHRcIixcbiAgXCJKYWNvYmlcIixcbiAgXCJKYWNvYnNcIixcbiAgXCJKYWNvYnNvblwiLFxuICBcIkpha3Vib3dza2lcIixcbiAgXCJKYXNrb2xza2lcIixcbiAgXCJKYXN0XCIsXG4gIFwiSmVua2luc1wiLFxuICBcIkplcmRlXCIsXG4gIFwiSm9obnNcIixcbiAgXCJKb2huc29uXCIsXG4gIFwiSm9obnN0b25cIixcbiAgXCJKb25lc1wiLFxuICBcIkthc3N1bGtlXCIsXG4gIFwiS2F1dHplclwiLFxuICBcIktlZWJsZXJcIixcbiAgXCJLZWVsaW5nXCIsXG4gIFwiS2VtbWVyXCIsXG4gIFwiS2VybHVrZVwiLFxuICBcIktlcnR6bWFublwiLFxuICBcIktlc3NsZXJcIixcbiAgXCJLaWVoblwiLFxuICBcIktpaG5cIixcbiAgXCJLaWxiYWNrXCIsXG4gIFwiS2luZ1wiLFxuICBcIktpcmxpblwiLFxuICBcIktsZWluXCIsXG4gIFwiS2xpbmdcIixcbiAgXCJLbG9ja29cIixcbiAgXCJLb2NoXCIsXG4gIFwiS29lbHBpblwiLFxuICBcIktvZXBwXCIsXG4gIFwiS29obGVyXCIsXG4gIFwiS29ub3BlbHNraVwiLFxuICBcIktvc3NcIixcbiAgXCJLb3ZhY2VrXCIsXG4gIFwiS296ZXlcIixcbiAgXCJLcmFqY2lrXCIsXG4gIFwiS3JlaWdlclwiLFxuICBcIktyaXNcIixcbiAgXCJLc2hsZXJpblwiLFxuICBcIkt1YlwiLFxuICBcIkt1aGljXCIsXG4gIFwiS3VobG1hblwiLFxuICBcIkt1aG5cIixcbiAgXCJLdWxhc1wiLFxuICBcIkt1bmRlXCIsXG4gIFwiS3VuemVcIixcbiAgXCJLdXBoYWxcIixcbiAgXCJLdXRjaFwiLFxuICBcIkt1dmFsaXNcIixcbiAgXCJMYWJhZGllXCIsXG4gIFwiTGFraW5cIixcbiAgXCJMYW5nXCIsXG4gIFwiTGFuZ29zaFwiLFxuICBcIkxhbmd3b3J0aFwiLFxuICBcIkxhcmtpblwiLFxuICBcIkxhcnNvblwiLFxuICBcIkxlYW5ub25cIixcbiAgXCJMZWJzYWNrXCIsXG4gIFwiTGVkbmVyXCIsXG4gIFwiTGVmZmxlclwiLFxuICBcIkxlZ3Jvc1wiLFxuICBcIkxlaG5lclwiLFxuICBcIkxlbWtlXCIsXG4gIFwiTGVzY2hcIixcbiAgXCJMZXVzY2hrZVwiLFxuICBcIkxpbmRcIixcbiAgXCJMaW5kZ3JlblwiLFxuICBcIkxpdHRlbFwiLFxuICBcIkxpdHRsZVwiLFxuICBcIkxvY2ttYW5cIixcbiAgXCJMb3dlXCIsXG4gIFwiTHVib3dpdHpcIixcbiAgXCJMdWVpbHdpdHpcIixcbiAgXCJMdWV0dGdlblwiLFxuICBcIkx5bmNoXCIsXG4gIFwiTWFjZWprb3ZpY1wiLFxuICBcIk1hY0d5dmVyXCIsXG4gIFwiTWFnZ2lvXCIsXG4gIFwiTWFublwiLFxuICBcIk1hbnRlXCIsXG4gIFwiTWFya3NcIixcbiAgXCJNYXJxdWFyZHRcIixcbiAgXCJNYXJ2aW5cIixcbiAgXCJNYXllclwiLFxuICBcIk1heWVydFwiLFxuICBcIk1jQ2x1cmVcIixcbiAgXCJNY0N1bGxvdWdoXCIsXG4gIFwiTWNEZXJtb3R0XCIsXG4gIFwiTWNHbHlublwiLFxuICBcIk1jS2VuemllXCIsXG4gIFwiTWNMYXVnaGxpblwiLFxuICBcIk1lZGh1cnN0XCIsXG4gIFwiTWVydHpcIixcbiAgXCJNZXR6XCIsXG4gIFwiTWlsbGVyXCIsXG4gIFwiTWlsbHNcIixcbiAgXCJNaXRjaGVsbFwiLFxuICBcIk1vZW5cIixcbiAgXCJNb2hyXCIsXG4gIFwiTW9uYWhhblwiLFxuICBcIk1vb3JlXCIsXG4gIFwiTW9yYXJcIixcbiAgXCJNb3Jpc3NldHRlXCIsXG4gIFwiTW9zY2lza2lcIixcbiAgXCJNcmF6XCIsXG4gIFwiTXVlbGxlclwiLFxuICBcIk11bGxlclwiLFxuICBcIk11cmF6aWtcIixcbiAgXCJNdXJwaHlcIixcbiAgXCJNdXJyYXlcIixcbiAgXCJOYWRlclwiLFxuICBcIk5pY29sYXNcIixcbiAgXCJOaWVub3dcIixcbiAgXCJOaWtvbGF1c1wiLFxuICBcIk5pdHpzY2hlXCIsXG4gIFwiTm9sYW5cIixcbiAgXCJPYmVyYnJ1bm5lclwiLFxuICBcIk8nQ29ubmVsbFwiLFxuICBcIk8nQ29ubmVyXCIsXG4gIFwiTydIYXJhXCIsXG4gIFwiTydLZWVmZVwiLFxuICBcIk8nS29uXCIsXG4gIFwiT2t1bmV2YVwiLFxuICBcIk9sc29uXCIsXG4gIFwiT25kcmlja2FcIixcbiAgXCJPJ1JlaWxseVwiLFxuICBcIk9yblwiLFxuICBcIk9ydGl6XCIsXG4gIFwiT3NpbnNraVwiLFxuICBcIlBhY29jaGFcIixcbiAgXCJQYWRiZXJnXCIsXG4gIFwiUGFnYWNcIixcbiAgXCJQYXJpc2lhblwiLFxuICBcIlBhcmtlclwiLFxuICBcIlBhdWNla1wiLFxuICBcIlBmYW5uZXJzdGlsbFwiLFxuICBcIlBmZWZmZXJcIixcbiAgXCJQb2xsaWNoXCIsXG4gIFwiUG91cm9zXCIsXG4gIFwiUG93bG93c2tpXCIsXG4gIFwiUHJlZG92aWNcIixcbiAgXCJQcmljZVwiLFxuICBcIlByb2hhc2thXCIsXG4gIFwiUHJvc2FjY29cIixcbiAgXCJQdXJkeVwiLFxuICBcIlF1aWdsZXlcIixcbiAgXCJRdWl0em9uXCIsXG4gIFwiUmF0aFwiLFxuICBcIlJhdGtlXCIsXG4gIFwiUmF1XCIsXG4gIFwiUmF5bm9yXCIsXG4gIFwiUmVpY2hlbFwiLFxuICBcIlJlaWNoZXJ0XCIsXG4gIFwiUmVpbGx5XCIsXG4gIFwiUmVpbmdlclwiLFxuICBcIlJlbXBlbFwiLFxuICBcIlJlbm5lclwiLFxuICBcIlJleW5vbGRzXCIsXG4gIFwiUmljZVwiLFxuICBcIlJpcHBpblwiLFxuICBcIlJpdGNoaWVcIixcbiAgXCJSb2JlbFwiLFxuICBcIlJvYmVydHNcIixcbiAgXCJSb2RyaWd1ZXpcIixcbiAgXCJSb2dhaG5cIixcbiAgXCJSb2hhblwiLFxuICBcIlJvbGZzb25cIixcbiAgXCJSb21hZ3VlcmFcIixcbiAgXCJSb29iXCIsXG4gIFwiUm9zZW5iYXVtXCIsXG4gIFwiUm93ZVwiLFxuICBcIlJ1ZWNrZXJcIixcbiAgXCJSdW5vbGZzZG90dGlyXCIsXG4gIFwiUnVub2xmc3NvblwiLFxuICBcIlJ1bnRlXCIsXG4gIFwiUnVzc2VsXCIsXG4gIFwiUnV0aGVyZm9yZFwiLFxuICBcIlJ5YW5cIixcbiAgXCJTYW5mb3JkXCIsXG4gIFwiU2F0dGVyZmllbGRcIixcbiAgXCJTYXVlclwiLFxuICBcIlNhd2F5blwiLFxuICBcIlNjaGFkZW5cIixcbiAgXCJTY2hhZWZlclwiLFxuICBcIlNjaGFtYmVyZ2VyXCIsXG4gIFwiU2NoaWxsZXJcIixcbiAgXCJTY2hpbW1lbFwiLFxuICBcIlNjaGlubmVyXCIsXG4gIFwiU2NobWVsZXJcIixcbiAgXCJTY2htaWR0XCIsXG4gIFwiU2NobWl0dFwiLFxuICBcIlNjaG5laWRlclwiLFxuICBcIlNjaG9lblwiLFxuICBcIlNjaG93YWx0ZXJcIixcbiAgXCJTY2hyb2VkZXJcIixcbiAgXCJTY2h1bGlzdFwiLFxuICBcIlNjaHVsdHpcIixcbiAgXCJTY2h1bW1cIixcbiAgXCJTY2h1cHBlXCIsXG4gIFwiU2NodXN0ZXJcIixcbiAgXCJTZW5nZXJcIixcbiAgXCJTaGFuYWhhblwiLFxuICBcIlNoaWVsZHNcIixcbiAgXCJTaW1vbmlzXCIsXG4gIFwiU2lwZXNcIixcbiAgXCJTa2lsZXNcIixcbiAgXCJTbWl0aFwiLFxuICBcIlNtaXRoYW1cIixcbiAgXCJTcGVuY2VyXCIsXG4gIFwiU3BpbmthXCIsXG4gIFwiU3BvcmVyXCIsXG4gIFwiU3RhbW1cIixcbiAgXCJTdGFudG9uXCIsXG4gIFwiU3RhcmtcIixcbiAgXCJTdGVoclwiLFxuICBcIlN0ZXViZXJcIixcbiAgXCJTdGllZGVtYW5uXCIsXG4gIFwiU3Rva2VzXCIsXG4gIFwiU3RvbHRlbmJlcmdcIixcbiAgXCJTdHJhY2tlXCIsXG4gIFwiU3RyZWljaFwiLFxuICBcIlN0cm9tYW5cIixcbiAgXCJTdHJvc2luXCIsXG4gIFwiU3dhbmlhd3NraVwiLFxuICBcIlN3aWZ0XCIsXG4gIFwiVGVycnlcIixcbiAgXCJUaGllbFwiLFxuICBcIlRob21wc29uXCIsXG4gIFwiVGlsbG1hblwiLFxuICBcIlRvcnBcIixcbiAgXCJUb3JwaHlcIixcbiAgXCJUb3duZVwiLFxuICBcIlRveVwiLFxuICBcIlRyYW50b3dcIixcbiAgXCJUcmVtYmxheVwiLFxuICBcIlRyZXV0ZWxcIixcbiAgXCJUcm9tcFwiLFxuICBcIlR1cmNvdHRlXCIsXG4gIFwiVHVybmVyXCIsXG4gIFwiVWxscmljaFwiLFxuICBcIlVwdG9uXCIsXG4gIFwiVmFuZGVydm9ydFwiLFxuICBcIlZldW1cIixcbiAgXCJWb2xrbWFuXCIsXG4gIFwiVm9uXCIsXG4gIFwiVm9uUnVlZGVuXCIsXG4gIFwiV2FlbGNoaVwiLFxuICBcIldhbGtlclwiLFxuICBcIldhbHNoXCIsXG4gIFwiV2FsdGVyXCIsXG4gIFwiV2FyZFwiLFxuICBcIldhdGVyc1wiLFxuICBcIldhdHNpY2FcIixcbiAgXCJXZWJlclwiLFxuICBcIldlaG5lclwiLFxuICBcIldlaW1hbm5cIixcbiAgXCJXZWlzc25hdFwiLFxuICBcIldlbGNoXCIsXG4gIFwiV2VzdFwiLFxuICBcIldoaXRlXCIsXG4gIFwiV2llZ2FuZFwiLFxuICBcIldpbGRlcm1hblwiLFxuICBcIldpbGtpbnNvblwiLFxuICBcIldpbGxcIixcbiAgXCJXaWxsaWFtc29uXCIsXG4gIFwiV2lsbG1zXCIsXG4gIFwiV2luZGxlclwiLFxuICBcIldpbnRoZWlzZXJcIixcbiAgXCJXaXNva3lcIixcbiAgXCJXaXNvemtcIixcbiAgXCJXaXR0aW5nXCIsXG4gIFwiV2l6YVwiLFxuICBcIldvbGZcIixcbiAgXCJXb2xmZlwiLFxuICBcIld1Y2tlcnRcIixcbiAgXCJXdW5zY2hcIixcbiAgXCJXeW1hblwiLFxuICBcIllvc3RcIixcbiAgXCJZdW5kdFwiLFxuICBcIlpib25jYWtcIixcbiAgXCJaZW1sYWtcIixcbiAgXCJaaWVtYW5uXCIsXG4gIFwiWmllbWVcIixcbiAgXCJadWxhdWZcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3twcmVmaXh9ICN7Zmlyc3RfbmFtZX0gI3tsYXN0X25hbWV9XCIsXG4gIFwiI3tmaXJzdF9uYW1lfSAje2xhc3RfbmFtZX0gI3tzdWZmaXh9XCIsXG4gIFwiI3tmaXJzdF9uYW1lfSAje2xhc3RfbmFtZX1cIixcbiAgXCIje2ZpcnN0X25hbWV9ICN7bGFzdF9uYW1lfVwiLFxuICBcIiN7Zmlyc3RfbmFtZX0gI3tsYXN0X25hbWV9XCIsXG4gIFwiI3tmaXJzdF9uYW1lfSAje2xhc3RfbmFtZX1cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiTXIuXCIsXG4gIFwiTXJzLlwiLFxuICBcIk1zLlwiLFxuICBcIk1pc3NcIixcbiAgXCJEci5cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiSnIuXCIsXG4gIFwiU3IuXCIsXG4gIFwiSVwiLFxuICBcIklJXCIsXG4gIFwiSUlJXCIsXG4gIFwiSVZcIixcbiAgXCJWXCIsXG4gIFwiTURcIixcbiAgXCJERFNcIixcbiAgXCJQaERcIixcbiAgXCJEVk1cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSB7XG4gIFwiZGVzY3JpcHRvclwiOiBbXG4gICAgXCJMZWFkXCIsXG4gICAgXCJTZW5pb3JcIixcbiAgICBcIkRpcmVjdFwiLFxuICAgIFwiQ29ycG9yYXRlXCIsXG4gICAgXCJEeW5hbWljXCIsXG4gICAgXCJGdXR1cmVcIixcbiAgICBcIlByb2R1Y3RcIixcbiAgICBcIk5hdGlvbmFsXCIsXG4gICAgXCJSZWdpb25hbFwiLFxuICAgIFwiRGlzdHJpY3RcIixcbiAgICBcIkNlbnRyYWxcIixcbiAgICBcIkdsb2JhbFwiLFxuICAgIFwiQ3VzdG9tZXJcIixcbiAgICBcIkludmVzdG9yXCIsXG4gICAgXCJEeW5hbWljXCIsXG4gICAgXCJJbnRlcm5hdGlvbmFsXCIsXG4gICAgXCJMZWdhY3lcIixcbiAgICBcIkZvcndhcmRcIixcbiAgICBcIkludGVybmFsXCIsXG4gICAgXCJIdW1hblwiLFxuICAgIFwiQ2hpZWZcIixcbiAgICBcIlByaW5jaXBhbFwiXG4gIF0sXG4gIFwibGV2ZWxcIjogW1xuICAgIFwiU29sdXRpb25zXCIsXG4gICAgXCJQcm9ncmFtXCIsXG4gICAgXCJCcmFuZFwiLFxuICAgIFwiU2VjdXJpdHlcIixcbiAgICBcIlJlc2VhcmNoXCIsXG4gICAgXCJNYXJrZXRpbmdcIixcbiAgICBcIkRpcmVjdGl2ZXNcIixcbiAgICBcIkltcGxlbWVudGF0aW9uXCIsXG4gICAgXCJJbnRlZ3JhdGlvblwiLFxuICAgIFwiRnVuY3Rpb25hbGl0eVwiLFxuICAgIFwiUmVzcG9uc2VcIixcbiAgICBcIlBhcmFkaWdtXCIsXG4gICAgXCJUYWN0aWNzXCIsXG4gICAgXCJJZGVudGl0eVwiLFxuICAgIFwiTWFya2V0c1wiLFxuICAgIFwiR3JvdXBcIixcbiAgICBcIkRpdmlzaW9uXCIsXG4gICAgXCJBcHBsaWNhdGlvbnNcIixcbiAgICBcIk9wdGltaXphdGlvblwiLFxuICAgIFwiT3BlcmF0aW9uc1wiLFxuICAgIFwiSW5mcmFzdHJ1Y3R1cmVcIixcbiAgICBcIkludHJhbmV0XCIsXG4gICAgXCJDb21tdW5pY2F0aW9uc1wiLFxuICAgIFwiV2ViXCIsXG4gICAgXCJCcmFuZGluZ1wiLFxuICAgIFwiUXVhbGl0eVwiLFxuICAgIFwiQXNzdXJhbmNlXCIsXG4gICAgXCJNb2JpbGl0eVwiLFxuICAgIFwiQWNjb3VudHNcIixcbiAgICBcIkRhdGFcIixcbiAgICBcIkNyZWF0aXZlXCIsXG4gICAgXCJDb25maWd1cmF0aW9uXCIsXG4gICAgXCJBY2NvdW50YWJpbGl0eVwiLFxuICAgIFwiSW50ZXJhY3Rpb25zXCIsXG4gICAgXCJGYWN0b3JzXCIsXG4gICAgXCJVc2FiaWxpdHlcIixcbiAgICBcIk1ldHJpY3NcIlxuICBdLFxuICBcImpvYlwiOiBbXG4gICAgXCJTdXBlcnZpc29yXCIsXG4gICAgXCJBc3NvY2lhdGVcIixcbiAgICBcIkV4ZWN1dGl2ZVwiLFxuICAgIFwiTGlhc29uXCIsXG4gICAgXCJPZmZpY2VyXCIsXG4gICAgXCJNYW5hZ2VyXCIsXG4gICAgXCJFbmdpbmVlclwiLFxuICAgIFwiU3BlY2lhbGlzdFwiLFxuICAgIFwiRGlyZWN0b3JcIixcbiAgICBcIkNvb3JkaW5hdG9yXCIsXG4gICAgXCJBZG1pbmlzdHJhdG9yXCIsXG4gICAgXCJBcmNoaXRlY3RcIixcbiAgICBcIkFuYWx5c3RcIixcbiAgICBcIkRlc2lnbmVyXCIsXG4gICAgXCJQbGFubmVyXCIsXG4gICAgXCJPcmNoZXN0cmF0b3JcIixcbiAgICBcIlRlY2huaWNpYW5cIixcbiAgICBcIkRldmVsb3BlclwiLFxuICAgIFwiUHJvZHVjZXJcIixcbiAgICBcIkNvbnN1bHRhbnRcIixcbiAgICBcIkFzc2lzdGFudFwiLFxuICAgIFwiRmFjaWxpdGF0b3JcIixcbiAgICBcIkFnZW50XCIsXG4gICAgXCJSZXByZXNlbnRhdGl2ZVwiLFxuICAgIFwiU3RyYXRlZ2lzdFwiXG4gIF1cbn07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiMjIy0jIyMtIyMjI1wiLFxuICBcIigjIyMpICMjIy0jIyMjXCIsXG4gIFwiMS0jIyMtIyMjLSMjIyNcIixcbiAgXCIjIyMuIyMjLiMjIyNcIixcbiAgXCIjIyMtIyMjLSMjIyNcIixcbiAgXCIoIyMjKSAjIyMtIyMjI1wiLFxuICBcIjEtIyMjLSMjIy0jIyMjXCIsXG4gIFwiIyMjLiMjIy4jIyMjXCIsXG4gIFwiIyMjLSMjIy0jIyMjIHgjIyNcIixcbiAgXCIoIyMjKSAjIyMtIyMjIyB4IyMjXCIsXG4gIFwiMS0jIyMtIyMjLSMjIyMgeCMjI1wiLFxuICBcIiMjIy4jIyMuIyMjIyB4IyMjXCIsXG4gIFwiIyMjLSMjIy0jIyMjIHgjIyMjXCIsXG4gIFwiKCMjIykgIyMjLSMjIyMgeCMjIyNcIixcbiAgXCIxLSMjIy0jIyMtIyMjIyB4IyMjI1wiLFxuICBcIiMjIy4jIyMuIyMjIyB4IyMjI1wiLFxuICBcIiMjIy0jIyMtIyMjIyB4IyMjIyNcIixcbiAgXCIoIyMjKSAjIyMtIyMjIyB4IyMjIyNcIixcbiAgXCIxLSMjIy0jIyMtIyMjIyB4IyMjIyNcIixcbiAgXCIjIyMuIyMjLiMjIyMgeCMjIyMjXCJcbl07XG4iLCJ2YXIgcGhvbmVfbnVtYmVyID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IHBob25lX251bWJlcjtcbnBob25lX251bWJlci5mb3JtYXRzID0gcmVxdWlyZShcIi4vZm9ybWF0c1wiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiYW50c1wiLFxuICBcImJhdHNcIixcbiAgXCJiZWFyc1wiLFxuICBcImJlZXNcIixcbiAgXCJiaXJkc1wiLFxuICBcImJ1ZmZhbG9cIixcbiAgXCJjYXRzXCIsXG4gIFwiY2hpY2tlbnNcIixcbiAgXCJjYXR0bGVcIixcbiAgXCJkb2dzXCIsXG4gIFwiZG9scGhpbnNcIixcbiAgXCJkdWNrc1wiLFxuICBcImVsZXBoYW50c1wiLFxuICBcImZpc2hlc1wiLFxuICBcImZveGVzXCIsXG4gIFwiZnJvZ3NcIixcbiAgXCJnZWVzZVwiLFxuICBcImdvYXRzXCIsXG4gIFwiaG9yc2VzXCIsXG4gIFwia2FuZ2Fyb29zXCIsXG4gIFwibGlvbnNcIixcbiAgXCJtb25rZXlzXCIsXG4gIFwib3dsc1wiLFxuICBcIm94ZW5cIixcbiAgXCJwZW5ndWluc1wiLFxuICBcInBlb3BsZVwiLFxuICBcInBpZ3NcIixcbiAgXCJyYWJiaXRzXCIsXG4gIFwic2hlZXBcIixcbiAgXCJ0aWdlcnNcIixcbiAgXCJ3aGFsZXNcIixcbiAgXCJ3b2x2ZXNcIixcbiAgXCJ6ZWJyYXNcIixcbiAgXCJiYW5zaGVlc1wiLFxuICBcImNyb3dzXCIsXG4gIFwiYmxhY2sgY2F0c1wiLFxuICBcImNoaW1lcmFzXCIsXG4gIFwiZ2hvc3RzXCIsXG4gIFwiY29uc3BpcmF0b3JzXCIsXG4gIFwiZHJhZ29uc1wiLFxuICBcImR3YXJ2ZXNcIixcbiAgXCJlbHZlc1wiLFxuICBcImVuY2hhbnRlcnNcIixcbiAgXCJleG9yY2lzdHNcIixcbiAgXCJzb25zXCIsXG4gIFwiZm9lc1wiLFxuICBcImdpYW50c1wiLFxuICBcImdub21lc1wiLFxuICBcImdvYmxpbnNcIixcbiAgXCJnb29zZXNcIixcbiAgXCJncmlmZmluc1wiLFxuICBcImx5Y2FudGhyb3Blc1wiLFxuICBcIm5lbWVzaXNcIixcbiAgXCJvZ3Jlc1wiLFxuICBcIm9yYWNsZXNcIixcbiAgXCJwcm9waGV0c1wiLFxuICBcInNvcmNlcm9yc1wiLFxuICBcInNwaWRlcnNcIixcbiAgXCJzcGlyaXRzXCIsXG4gIFwidmFtcGlyZXNcIixcbiAgXCJ3YXJsb2Nrc1wiLFxuICBcInZpeGVuc1wiLFxuICBcIndlcmV3b2x2ZXNcIixcbiAgXCJ3aXRjaGVzXCIsXG4gIFwid29yc2hpcGVyc1wiLFxuICBcInpvbWJpZXNcIixcbiAgXCJkcnVpZHNcIlxuXTtcbiIsInZhciB0ZWFtID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IHRlYW07XG50ZWFtLmNyZWF0dXJlID0gcmVxdWlyZShcIi4vY3JlYXR1cmVcIik7XG50ZWFtLm5hbWUgPSByZXF1aXJlKFwiLi9uYW1lXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIje0FkZHJlc3Muc3RhdGV9ICN7Y3JlYXR1cmV9XCJcbl07XG4iLCJcbnZhciBMb3JlbSA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBIZWxwZXJzID0gZmFrZXIuaGVscGVycztcblxuICBzZWxmLndvcmRzID0gZnVuY3Rpb24gKG51bSkge1xuICAgICAgaWYgKHR5cGVvZiBudW0gPT0gJ3VuZGVmaW5lZCcpIHsgbnVtID0gMzsgfVxuICAgICAgcmV0dXJuIEhlbHBlcnMuc2h1ZmZsZShmYWtlci5kZWZpbml0aW9ucy5sb3JlbS53b3Jkcykuc2xpY2UoMCwgbnVtKTtcbiAgfTtcblxuICBzZWxmLnNlbnRlbmNlID0gZnVuY3Rpb24gKHdvcmRDb3VudCwgcmFuZ2UpIHtcbiAgICAgIGlmICh0eXBlb2Ygd29yZENvdW50ID09ICd1bmRlZmluZWQnKSB7IHdvcmRDb3VudCA9IDM7IH1cbiAgICAgIGlmICh0eXBlb2YgcmFuZ2UgPT0gJ3VuZGVmaW5lZCcpIHsgcmFuZ2UgPSA3OyB9XG5cbiAgICAgIC8vIHN0cmFuZ2UgaXNzdWUgd2l0aCB0aGUgbm9kZV9taW5fdGVzdCBmYWlsaW5nIGZvciBjYXB0aWFsaXplLCBwbGVhc2UgZml4IGFuZCBhZGQgZmFrZXIubG9yZW0uYmFja1xuICAgICAgLy9yZXR1cm4gIGZha2VyLmxvcmVtLndvcmRzKHdvcmRDb3VudCArIEhlbHBlcnMucmFuZG9tTnVtYmVyKHJhbmdlKSkuam9pbignICcpLmNhcGl0YWxpemUoKTtcblxuICAgICAgdmFyIHNlbnRlbmNlID0gZmFrZXIubG9yZW0ud29yZHMod29yZENvdW50ICsgZmFrZXIucmFuZG9tLm51bWJlcihyYW5nZSkpLmpvaW4oJyAnKTtcbiAgICAgIHJldHVybiBzZW50ZW5jZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlbnRlbmNlLnNsaWNlKDEpICsgJy4nO1xuICB9O1xuXG4gIHNlbGYuc2VudGVuY2VzID0gZnVuY3Rpb24gKHNlbnRlbmNlQ291bnQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2VudGVuY2VDb3VudCA9PSAndW5kZWZpbmVkJykgeyBzZW50ZW5jZUNvdW50ID0gMzsgfVxuICAgICAgdmFyIHNlbnRlbmNlcyA9IFtdO1xuICAgICAgZm9yIChzZW50ZW5jZUNvdW50OyBzZW50ZW5jZUNvdW50ID4gMDsgc2VudGVuY2VDb3VudC0tKSB7XG4gICAgICAgIHNlbnRlbmNlcy5wdXNoKGZha2VyLmxvcmVtLnNlbnRlbmNlKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbnRlbmNlcy5qb2luKFwiXFxuXCIpO1xuICB9O1xuXG4gIHNlbGYucGFyYWdyYXBoID0gZnVuY3Rpb24gKHNlbnRlbmNlQ291bnQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2VudGVuY2VDb3VudCA9PSAndW5kZWZpbmVkJykgeyBzZW50ZW5jZUNvdW50ID0gMzsgfVxuICAgICAgcmV0dXJuIGZha2VyLmxvcmVtLnNlbnRlbmNlcyhzZW50ZW5jZUNvdW50ICsgZmFrZXIucmFuZG9tLm51bWJlcigzKSk7XG4gIH07XG5cbiAgc2VsZi5wYXJhZ3JhcGhzID0gZnVuY3Rpb24gKHBhcmFncmFwaENvdW50LCBzZXBhcmF0b3IpIHtcbiAgICBpZiAodHlwZW9mIHNlcGFyYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgc2VwYXJhdG9yID0gXCJcXG4gXFxyXCI7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYWdyYXBoQ291bnQgPT0gJ3VuZGVmaW5lZCcpIHsgcGFyYWdyYXBoQ291bnQgPSAzOyB9XG4gICAgdmFyIHBhcmFncmFwaHMgPSBbXTtcbiAgICBmb3IgKHBhcmFncmFwaENvdW50OyBwYXJhZ3JhcGhDb3VudCA+IDA7IHBhcmFncmFwaENvdW50LS0pIHtcbiAgICAgICAgcGFyYWdyYXBocy5wdXNoKGZha2VyLmxvcmVtLnBhcmFncmFwaCgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFncmFwaHMuam9pbihzZXBhcmF0b3IpO1xuICB9XG4gIFxuICByZXR1cm4gc2VsZjtcbn07XG5cblxubW9kdWxlW1wiZXhwb3J0c1wiXSA9IExvcmVtO1xuIiwiZnVuY3Rpb24gTmFtZSAoZmFrZXIpIHtcblxuICB0aGlzLmZpcnN0TmFtZSA9IGZ1bmN0aW9uIChnZW5kZXIpIHtcbiAgICBpZiAodHlwZW9mIGZha2VyLmRlZmluaXRpb25zLm5hbWUubWFsZV9maXJzdF9uYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBmYWtlci5kZWZpbml0aW9ucy5uYW1lLmZlbWFsZV9maXJzdF9uYW1lICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAvLyBzb21lIGxvY2FsZSBkYXRhc2V0cyAoIGxpa2UgcnUgKSBoYXZlIGZpcnN0X25hbWUgc3BsaXQgYnkgZ2VuZGVyLiBzaW5jZSB0aGUgbmFtZS5maXJzdF9uYW1lIGZpZWxkIGRvZXMgbm90IGV4aXN0IGluIHRoZXNlIGRhdGFzZXRzLFxuICAgICAgLy8gd2UgbXVzdCByYW5kb21seSBwaWNrIGEgbmFtZSBmcm9tIGVpdGhlciBnZW5kZXIgYXJyYXkgc28gZmFrZXIubmFtZS5maXJzdE5hbWUgd2lsbCByZXR1cm4gdGhlIGNvcnJlY3QgbG9jYWxlIGRhdGEgKCBhbmQgbm90IGZhbGxiYWNrIClcbiAgICAgIGlmICh0eXBlb2YgZ2VuZGVyICE9PSAnbnVtYmVyJykge1xuICAgICAgICBnZW5kZXIgPSBmYWtlci5yYW5kb20ubnVtYmVyKDEpO1xuICAgICAgfVxuICAgICAgaWYgKGdlbmRlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5sb2NhbGVzW2Zha2VyLmxvY2FsZV0ubmFtZS5tYWxlX2ZpcnN0X25hbWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5sb2NhbGVzW2Zha2VyLmxvY2FsZV0ubmFtZS5mZW1hbGVfZmlyc3RfbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUuZmlyc3RfbmFtZSk7XG4gIH07XG5cbiAgdGhpcy5sYXN0TmFtZSA9IGZ1bmN0aW9uIChnZW5kZXIpIHtcbiAgICBpZiAodHlwZW9mIGZha2VyLmRlZmluaXRpb25zLm5hbWUubWFsZV9sYXN0X25hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGZha2VyLmRlZmluaXRpb25zLm5hbWUuZmVtYWxlX2xhc3RfbmFtZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgLy8gc29tZSBsb2NhbGUgZGF0YXNldHMgKCBsaWtlIHJ1ICkgaGF2ZSBsYXN0X25hbWUgc3BsaXQgYnkgZ2VuZGVyLiBpIGhhdmUgbm8gaWRlYSBob3cgbGFzdCBuYW1lcyBjYW4gaGF2ZSBnZW5kZXJzLCBidXQgYWxzbyBpIGRvIG5vdCBzcGVhayBydXNzaWFuXG4gICAgICAvLyBzZWUgYWJvdmUgY29tbWVudCBvZiBmaXJzdE5hbWUgbWV0aG9kXG4gICAgICBpZiAodHlwZW9mIGdlbmRlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgZ2VuZGVyID0gZmFrZXIucmFuZG9tLm51bWJlcigxKTtcbiAgICAgIH1cbiAgICAgIGlmIChnZW5kZXIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIubG9jYWxlc1tmYWtlci5sb2NhbGVdLm5hbWUubWFsZV9sYXN0X25hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIubG9jYWxlc1tmYWtlci5sb2NhbGVdLm5hbWUuZmVtYWxlX2xhc3RfbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUubGFzdF9uYW1lKTtcbiAgfTtcblxuICB0aGlzLmZpbmROYW1lID0gZnVuY3Rpb24gKGZpcnN0TmFtZSwgbGFzdE5hbWUsIGdlbmRlcikge1xuICAgICAgdmFyIHIgPSBmYWtlci5yYW5kb20ubnVtYmVyKDgpO1xuICAgICAgdmFyIHByZWZpeCwgc3VmZml4O1xuICAgICAgLy8gaW4gcGFydGljdWxhciBsb2NhbGVzIGZpcnN0IGFuZCBsYXN0IG5hbWVzIHNwbGl0IGJ5IGdlbmRlcixcbiAgICAgIC8vIHRodXMgd2Uga2VlcCBjb25zaXN0ZW5jeSBieSBwYXNzaW5nIDAgYXMgbWFsZSBhbmQgMSBhcyBmZW1hbGVcbiAgICAgIGlmICh0eXBlb2YgZ2VuZGVyICE9PSAnbnVtYmVyJykge1xuICAgICAgICBnZW5kZXIgPSBmYWtlci5yYW5kb20ubnVtYmVyKDEpO1xuICAgICAgfVxuICAgICAgZmlyc3ROYW1lID0gZmlyc3ROYW1lIHx8IGZha2VyLm5hbWUuZmlyc3ROYW1lKGdlbmRlcik7XG4gICAgICBsYXN0TmFtZSA9IGxhc3ROYW1lIHx8IGZha2VyLm5hbWUubGFzdE5hbWUoZ2VuZGVyKTtcbiAgICAgIHN3aXRjaCAocikge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAgIHByZWZpeCA9IGZha2VyLm5hbWUucHJlZml4KCk7XG4gICAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgXCIgXCIgKyBmaXJzdE5hbWUgKyBcIiBcIiArIGxhc3ROYW1lO1xuICAgICAgICAgIH1cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzdWZmaXggPSBmYWtlci5uYW1lLnByZWZpeCgpO1xuICAgICAgICAgIGlmIChzdWZmaXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TmFtZSArIFwiIFwiICsgbGFzdE5hbWUgKyBcIiBcIiArIHN1ZmZpeDtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaXJzdE5hbWUgKyBcIiBcIiArIGxhc3ROYW1lO1xuICB9O1xuXG4gIHRoaXMuam9iVGl0bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICBmYWtlci5uYW1lLmpvYkRlc2NyaXB0b3IoKSArIFwiIFwiICtcbiAgICAgIGZha2VyLm5hbWUuam9iQXJlYSgpICsgXCIgXCIgK1xuICAgICAgZmFrZXIubmFtZS5qb2JUeXBlKCk7XG4gIH07XG5cbiAgdGhpcy5wcmVmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnByZWZpeCk7XG4gIH07XG5cbiAgdGhpcy5zdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnN1ZmZpeCk7XG4gIH07XG5cbiAgdGhpcy50aXRsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnRpdGxlLmRlc2NyaXB0b3IpLFxuICAgICAgICAgIGxldmVsICAgICAgID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnRpdGxlLmxldmVsKSxcbiAgICAgICAgICBqb2IgICAgICAgICA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS50aXRsZS5qb2IpO1xuXG4gICAgICByZXR1cm4gZGVzY3JpcHRvciArIFwiIFwiICsgbGV2ZWwgKyBcIiBcIiArIGpvYjtcbiAgfTtcblxuICB0aGlzLmpvYkRlc2NyaXB0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS50aXRsZS5kZXNjcmlwdG9yKTtcbiAgfTtcblxuICB0aGlzLmpvYkFyZWEgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS50aXRsZS5sZXZlbCk7XG4gIH07XG5cbiAgdGhpcy5qb2JUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUudGl0bGUuam9iKTtcbiAgfTtcblxufVxuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IE5hbWU7IiwidmFyIFBob25lID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBzZWxmLnBob25lTnVtYmVyID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8IGZha2VyLnBob25lLnBob25lRm9ybWF0cygpO1xuICAgICAgcmV0dXJuIGZha2VyLmhlbHBlcnMucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIoZm9ybWF0KTtcbiAgfTtcblxuICAvLyBGSVhNRTogdGhpcyBpcyBzdHJhbmdlIHBhc3NpbmcgaW4gYW4gYXJyYXkgaW5kZXguXG4gIHNlbGYucGhvbmVOdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiAocGhvbmVGb3JtYXRzQXJyYXlJbmRleCkge1xuICAgICAgcGhvbmVGb3JtYXRzQXJyYXlJbmRleCA9IHBob25lRm9ybWF0c0FycmF5SW5kZXggfHwgMDtcbiAgICAgIHJldHVybiBmYWtlci5oZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKGZha2VyLmRlZmluaXRpb25zLnBob25lX251bWJlci5mb3JtYXRzW3Bob25lRm9ybWF0c0FycmF5SW5kZXhdKTtcbiAgfTtcblxuICBzZWxmLnBob25lRm9ybWF0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5waG9uZV9udW1iZXIuZm9ybWF0cyk7XG4gIH07XG4gIFxuICByZXR1cm4gc2VsZjtcblxufTtcblxubW9kdWxlWydleHBvcnRzJ10gPSBQaG9uZTsiLCJ2YXIgbWVyc2VubmUgPSByZXF1aXJlKCcuLi92ZW5kb3IvbWVyc2VubmUnKTtcblxuZnVuY3Rpb24gUmFuZG9tIChmYWtlciwgc2VlZCkge1xuICAvLyBVc2UgYSB1c2VyIHByb3ZpZGVkIHNlZWQgaWYgaXQgZXhpc3RzXG4gIGlmIChzZWVkKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2VlZCkgJiYgc2VlZC5sZW5ndGgpIHtcbiAgICAgIG1lcnNlbm5lLnNlZWRfYXJyYXkoc2VlZCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbWVyc2VubmUuc2VlZChzZWVkKTtcbiAgICB9XG4gIH1cbiAgLy8gcmV0dXJucyBhIHNpbmdsZSByYW5kb20gbnVtYmVyIGJhc2VkIG9uIGEgbWF4IG51bWJlciBvciByYW5nZVxuICB0aGlzLm51bWJlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIG1heDogb3B0aW9uc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5taW4gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIG9wdGlvbnMubWluID0gMDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubWF4ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBvcHRpb25zLm1heCA9IDk5OTk5O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJlY2lzaW9uID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBvcHRpb25zLnByZWNpc2lvbiA9IDE7XG4gICAgfVxuXG4gICAgLy8gTWFrZSB0aGUgcmFuZ2UgaW5jbHVzaXZlIG9mIHRoZSBtYXggdmFsdWVcbiAgICB2YXIgbWF4ID0gb3B0aW9ucy5tYXg7XG4gICAgaWYgKG1heCA+PSAwKSB7XG4gICAgICBtYXggKz0gb3B0aW9ucy5wcmVjaXNpb247XG4gICAgfVxuXG4gICAgdmFyIHJhbmRvbU51bWJlciA9IG9wdGlvbnMucHJlY2lzaW9uICogTWF0aC5mbG9vcihcbiAgICAgIG1lcnNlbm5lLnJhbmQobWF4IC8gb3B0aW9ucy5wcmVjaXNpb24sIG9wdGlvbnMubWluIC8gb3B0aW9ucy5wcmVjaXNpb24pKTtcblxuICAgIHJldHVybiByYW5kb21OdW1iZXI7XG5cbiAgfVxuXG4gIC8vIHRha2VzIGFuIGFycmF5IGFuZCByZXR1cm5zIGEgcmFuZG9tIGVsZW1lbnQgb2YgdGhlIGFycmF5XG4gIHRoaXMuYXJyYXlFbGVtZW50ID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgICBhcnJheSA9IGFycmF5IHx8IFtcImFcIiwgXCJiXCIsIFwiY1wiXTtcbiAgICAgIHZhciByID0gZmFrZXIucmFuZG9tLm51bWJlcih7IG1heDogYXJyYXkubGVuZ3RoIC0gMSB9KTtcbiAgICAgIHJldHVybiBhcnJheVtyXTtcbiAgfVxuXG4gIC8vIHRha2VzIGFuIG9iamVjdCBhbmQgcmV0dXJucyB0aGUgcmFuZG9tbHkga2V5IG9yIHZhbHVlXG4gIHRoaXMub2JqZWN0RWxlbWVudCA9IGZ1bmN0aW9uIChvYmplY3QsIGZpZWxkKSB7XG4gICAgICBvYmplY3QgPSBvYmplY3QgfHwgeyBcImZvb1wiOiBcImJhclwiLCBcInRvb1wiOiBcImNhclwiIH07XG4gICAgICB2YXIgYXJyYXkgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICAgICAgdmFyIGtleSA9IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoYXJyYXkpO1xuXG4gICAgICByZXR1cm4gZmllbGQgPT09IFwia2V5XCIgPyBrZXkgOiBvYmplY3Rba2V5XTtcbiAgfVxuXG4gIHRoaXMudXVpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBSRkM0MTIyX1RFTVBMQVRFID0gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCc7XG4gICAgICB2YXIgcmVwbGFjZVBsYWNlaG9sZGVycyA9IGZ1bmN0aW9uIChwbGFjZWhvbGRlcikge1xuICAgICAgICAgIHZhciByYW5kb20gPSBNYXRoLnJhbmRvbSgpKjE2fDA7XG4gICAgICAgICAgdmFyIHZhbHVlID0gcGxhY2Vob2xkZXIgPT0gJ3gnID8gcmFuZG9tIDogKHJhbmRvbSAmMHgzIHwgMHg4KTtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoMTYpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBSRkM0MTIyX1RFTVBMQVRFLnJlcGxhY2UoL1t4eV0vZywgcmVwbGFjZVBsYWNlaG9sZGVycyk7XG4gIH1cblxuICB0aGlzLmJvb2xlYW4gPWZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhIWZha2VyLnJhbmRvbS5udW1iZXIoMSlcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xuXG59XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gUmFuZG9tO1xuXG5cblxuLy8gbW9kdWxlLmV4cG9ydHMgPSByYW5kb207XG4iLCJ2YXIgRmFrZXIgPSByZXF1aXJlKCcuLi9saWInKTtcbnZhciBmYWtlciA9IG5ldyBGYWtlcih7IGxvY2FsZTogJ2VuJywgbG9jYWxlRmFsbGJhY2s6ICdlbicgfSk7XG5mYWtlci5sb2NhbGVzWydlbiddID0gcmVxdWlyZSgnLi4vbGliL2xvY2FsZXMvZW4nKTtcbmZha2VyLmxvY2FsZXNbJ2VuJ10gPSByZXF1aXJlKCcuLi9saWIvbG9jYWxlcy9lbicpO1xubW9kdWxlWydleHBvcnRzJ10gPSBmYWtlcjtcbiIsIi8vIHRoaXMgcHJvZ3JhbSBpcyBhIEphdmFTY3JpcHQgdmVyc2lvbiBvZiBNZXJzZW5uZSBUd2lzdGVyLCB3aXRoIGNvbmNlYWxtZW50IGFuZCBlbmNhcHN1bGF0aW9uIGluIGNsYXNzLFxuLy8gYW4gYWxtb3N0IHN0cmFpZ2h0IGNvbnZlcnNpb24gZnJvbSB0aGUgb3JpZ2luYWwgcHJvZ3JhbSwgbXQxOTkzN2FyLmMsXG4vLyB0cmFuc2xhdGVkIGJ5IHkuIG9rYWRhIG9uIEp1bHkgMTcsIDIwMDYuXG4vLyBhbmQgbW9kaWZpZWQgYSBsaXR0bGUgYXQganVseSAyMCwgMjAwNiwgYnV0IHRoZXJlIGFyZSBub3QgYW55IHN1YnN0YW50aWFsIGRpZmZlcmVuY2VzLlxuLy8gaW4gdGhpcyBwcm9ncmFtLCBwcm9jZWR1cmUgZGVzY3JpcHRpb25zIGFuZCBjb21tZW50cyBvZiBvcmlnaW5hbCBzb3VyY2UgY29kZSB3ZXJlIG5vdCByZW1vdmVkLlxuLy8gbGluZXMgY29tbWVudGVkIHdpdGggLy9jLy8gd2VyZSBvcmlnaW5hbGx5IGRlc2NyaXB0aW9ucyBvZiBjIHByb2NlZHVyZS4gYW5kIGEgZmV3IGZvbGxvd2luZyBsaW5lcyBhcmUgYXBwcm9wcmlhdGUgSmF2YVNjcmlwdCBkZXNjcmlwdGlvbnMuXG4vLyBsaW5lcyBjb21tZW50ZWQgd2l0aCAvKiBhbmQgKi8gYXJlIG9yaWdpbmFsIGNvbW1lbnRzLlxuLy8gbGluZXMgY29tbWVudGVkIHdpdGggLy8gYXJlIGFkZGl0aW9uYWwgY29tbWVudHMgaW4gdGhpcyBKYXZhU2NyaXB0IHZlcnNpb24uXG4vLyBiZWZvcmUgdXNpbmcgdGhpcyB2ZXJzaW9uLCBjcmVhdGUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIE1lcnNlbm5lVHdpc3RlcjE5OTM3IGNsYXNzLCBhbmQgaW5pdGlhbGl6ZSB0aGUgZWFjaCBzdGF0ZSwgZ2l2ZW4gYmVsb3cgaW4gYyBjb21tZW50cywgb2YgYWxsIHRoZSBpbnN0YW5jZXMuXG4vKlxuICAgQSBDLXByb2dyYW0gZm9yIE1UMTk5MzcsIHdpdGggaW5pdGlhbGl6YXRpb24gaW1wcm92ZWQgMjAwMi8xLzI2LlxuICAgQ29kZWQgYnkgVGFrdWppIE5pc2hpbXVyYSBhbmQgTWFrb3RvIE1hdHN1bW90by5cblxuICAgQmVmb3JlIHVzaW5nLCBpbml0aWFsaXplIHRoZSBzdGF0ZSBieSB1c2luZyBpbml0X2dlbnJhbmQoc2VlZClcbiAgIG9yIGluaXRfYnlfYXJyYXkoaW5pdF9rZXksIGtleV9sZW5ndGgpLlxuXG4gICBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDAyLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBUYWt1amkgTmlzaGltdXJhLFxuICAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbiAgIGFyZSBtZXQ6XG5cbiAgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgICAzLiBUaGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlXG4gICAgICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlblxuICAgICAgICBwZXJtaXNzaW9uLlxuXG4gICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gICBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUlxuICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsXG4gICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sXG4gICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1JcbiAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0ZcbiAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXG4gICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5cbiAgIEFueSBmZWVkYmFjayBpcyB2ZXJ5IHdlbGNvbWUuXG4gICBodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9lbXQuaHRtbFxuICAgZW1haWw6IG0tbWF0IEAgbWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAgKHJlbW92ZSBzcGFjZSlcbiovXG5cbmZ1bmN0aW9uIE1lcnNlbm5lVHdpc3RlcjE5OTM3KClcbntcblx0LyogY29uc3RhbnRzIHNob3VsZCBiZSBzY29wZWQgaW5zaWRlIHRoZSBjbGFzcyAqL1xuXHR2YXIgTiwgTSwgTUFUUklYX0EsIFVQUEVSX01BU0ssIExPV0VSX01BU0s7XG5cdC8qIFBlcmlvZCBwYXJhbWV0ZXJzICovXG5cdC8vYy8vI2RlZmluZSBOIDYyNFxuXHQvL2MvLyNkZWZpbmUgTSAzOTdcblx0Ly9jLy8jZGVmaW5lIE1BVFJJWF9BIDB4OTkwOGIwZGZVTCAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovXG5cdC8vYy8vI2RlZmluZSBVUFBFUl9NQVNLIDB4ODAwMDAwMDBVTCAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovXG5cdC8vYy8vI2RlZmluZSBMT1dFUl9NQVNLIDB4N2ZmZmZmZmZVTCAvKiBsZWFzdCBzaWduaWZpY2FudCByIGJpdHMgKi9cblx0TiA9IDYyNDtcblx0TSA9IDM5Nztcblx0TUFUUklYX0EgPSAweDk5MDhiMGRmOyAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovXG5cdFVQUEVSX01BU0sgPSAweDgwMDAwMDAwOyAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovXG5cdExPV0VSX01BU0sgPSAweDdmZmZmZmZmOyAvKiBsZWFzdCBzaWduaWZpY2FudCByIGJpdHMgKi9cblx0Ly9jLy9zdGF0aWMgdW5zaWduZWQgbG9uZyBtdFtOXTsgLyogdGhlIGFycmF5IGZvciB0aGUgc3RhdGUgdmVjdG9yICAqL1xuXHQvL2MvL3N0YXRpYyBpbnQgbXRpPU4rMTsgLyogbXRpPT1OKzEgbWVhbnMgbXRbTl0gaXMgbm90IGluaXRpYWxpemVkICovXG5cdHZhciBtdCA9IG5ldyBBcnJheShOKTsgICAvKiB0aGUgYXJyYXkgZm9yIHRoZSBzdGF0ZSB2ZWN0b3IgICovXG5cdHZhciBtdGkgPSBOKzE7ICAgICAgICAgICAvKiBtdGk9PU4rMSBtZWFucyBtdFtOXSBpcyBub3QgaW5pdGlhbGl6ZWQgKi9cblxuXHRmdW5jdGlvbiB1bnNpZ25lZDMyIChuMSkgLy8gcmV0dXJucyBhIDMyLWJpdHMgdW5zaWdlZCBpbnRlZ2VyIGZyb20gYW4gb3BlcmFuZCB0byB3aGljaCBhcHBsaWVkIGEgYml0IG9wZXJhdG9yLlxuXHR7XG5cdFx0cmV0dXJuIG4xIDwgMCA/IChuMSBeIFVQUEVSX01BU0spICsgVVBQRVJfTUFTSyA6IG4xO1xuXHR9XG5cblx0ZnVuY3Rpb24gc3VidHJhY3Rpb24zMiAobjEsIG4yKSAvLyBlbXVsYXRlcyBsb3dlcmZsb3cgb2YgYSBjIDMyLWJpdHMgdW5zaWdlZCBpbnRlZ2VyIHZhcmlhYmxlLCBpbnN0ZWFkIG9mIHRoZSBvcGVyYXRvciAtLiB0aGVzZSBib3RoIGFyZ3VtZW50cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycyBleHByZXNzaWJsZSB1c2luZyB1bnNpZ25lZCAzMiBiaXRzLlxuXHR7XG5cdFx0cmV0dXJuIG4xIDwgbjIgPyB1bnNpZ25lZDMyKCgweDEwMDAwMDAwMCAtIChuMiAtIG4xKSkgJiAweGZmZmZmZmZmKSA6IG4xIC0gbjI7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRpdGlvbjMyIChuMSwgbjIpIC8vIGVtdWxhdGVzIG92ZXJmbG93IG9mIGEgYyAzMi1iaXRzIHVuc2lnZWQgaW50ZWdlciB2YXJpYWJsZSwgaW5zdGVhZCBvZiB0aGUgb3BlcmF0b3IgKy4gdGhlc2UgYm90aCBhcmd1bWVudHMgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlcnMgZXhwcmVzc2libGUgdXNpbmcgdW5zaWduZWQgMzIgYml0cy5cblx0e1xuXHRcdHJldHVybiB1bnNpZ25lZDMyKChuMSArIG4yKSAmIDB4ZmZmZmZmZmYpXG5cdH1cblxuXHRmdW5jdGlvbiBtdWx0aXBsaWNhdGlvbjMyIChuMSwgbjIpIC8vIGVtdWxhdGVzIG92ZXJmbG93IG9mIGEgYyAzMi1iaXRzIHVuc2lnZWQgaW50ZWdlciB2YXJpYWJsZSwgaW5zdGVhZCBvZiB0aGUgb3BlcmF0b3IgKi4gdGhlc2UgYm90aCBhcmd1bWVudHMgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlcnMgZXhwcmVzc2libGUgdXNpbmcgdW5zaWduZWQgMzIgYml0cy5cblx0e1xuXHRcdHZhciBzdW0gPSAwO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzI7ICsraSl7XG5cdFx0XHRpZiAoKG4xID4+PiBpKSAmIDB4MSl7XG5cdFx0XHRcdHN1bSA9IGFkZGl0aW9uMzIoc3VtLCB1bnNpZ25lZDMyKG4yIDw8IGkpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHN1bTtcblx0fVxuXG5cdC8qIGluaXRpYWxpemVzIG10W05dIHdpdGggYSBzZWVkICovXG5cdC8vYy8vdm9pZCBpbml0X2dlbnJhbmQodW5zaWduZWQgbG9uZyBzKVxuXHR0aGlzLmluaXRfZ2VucmFuZCA9IGZ1bmN0aW9uIChzKVxuXHR7XG5cdFx0Ly9jLy9tdFswXT0gcyAmIDB4ZmZmZmZmZmY7XG5cdFx0bXRbMF09IHVuc2lnbmVkMzIocyAmIDB4ZmZmZmZmZmYpO1xuXHRcdGZvciAobXRpPTE7IG10aTxOOyBtdGkrKykge1xuXHRcdFx0bXRbbXRpXSA9XG5cdFx0XHQvL2MvLygxODEyNDMzMjUzICogKG10W210aS0xXSBeIChtdFttdGktMV0gPj4gMzApKSArIG10aSk7XG5cdFx0XHRhZGRpdGlvbjMyKG11bHRpcGxpY2F0aW9uMzIoMTgxMjQzMzI1MywgdW5zaWduZWQzMihtdFttdGktMV0gXiAobXRbbXRpLTFdID4+PiAzMCkpKSwgbXRpKTtcblx0XHRcdC8qIFNlZSBLbnV0aCBUQU9DUCBWb2wyLiAzcmQgRWQuIFAuMTA2IGZvciBtdWx0aXBsaWVyLiAqL1xuXHRcdFx0LyogSW4gdGhlIHByZXZpb3VzIHZlcnNpb25zLCBNU0JzIG9mIHRoZSBzZWVkIGFmZmVjdCAgICovXG5cdFx0XHQvKiBvbmx5IE1TQnMgb2YgdGhlIGFycmF5IG10W10uICAgICAgICAgICAgICAgICAgICAgICAgKi9cblx0XHRcdC8qIDIwMDIvMDEvMDkgbW9kaWZpZWQgYnkgTWFrb3RvIE1hdHN1bW90byAgICAgICAgICAgICAqL1xuXHRcdFx0Ly9jLy9tdFttdGldICY9IDB4ZmZmZmZmZmY7XG5cdFx0XHRtdFttdGldID0gdW5zaWduZWQzMihtdFttdGldICYgMHhmZmZmZmZmZik7XG5cdFx0XHQvKiBmb3IgPjMyIGJpdCBtYWNoaW5lcyAqL1xuXHRcdH1cblx0fVxuXG5cdC8qIGluaXRpYWxpemUgYnkgYW4gYXJyYXkgd2l0aCBhcnJheS1sZW5ndGggKi9cblx0LyogaW5pdF9rZXkgaXMgdGhlIGFycmF5IGZvciBpbml0aWFsaXppbmcga2V5cyAqL1xuXHQvKiBrZXlfbGVuZ3RoIGlzIGl0cyBsZW5ndGggKi9cblx0Lyogc2xpZ2h0IGNoYW5nZSBmb3IgQysrLCAyMDA0LzIvMjYgKi9cblx0Ly9jLy92b2lkIGluaXRfYnlfYXJyYXkodW5zaWduZWQgbG9uZyBpbml0X2tleVtdLCBpbnQga2V5X2xlbmd0aClcblx0dGhpcy5pbml0X2J5X2FycmF5ID0gZnVuY3Rpb24gKGluaXRfa2V5LCBrZXlfbGVuZ3RoKVxuXHR7XG5cdFx0Ly9jLy9pbnQgaSwgaiwgaztcblx0XHR2YXIgaSwgaiwgaztcblx0XHQvL2MvL2luaXRfZ2VucmFuZCgxOTY1MDIxOCk7XG5cdFx0dGhpcy5pbml0X2dlbnJhbmQoMTk2NTAyMTgpO1xuXHRcdGk9MTsgaj0wO1xuXHRcdGsgPSAoTj5rZXlfbGVuZ3RoID8gTiA6IGtleV9sZW5ndGgpO1xuXHRcdGZvciAoOyBrOyBrLS0pIHtcblx0XHRcdC8vYy8vbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTY2NDUyNSkpXG5cdFx0XHQvL2MvL1x0KyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi9cblx0XHRcdG10W2ldID0gYWRkaXRpb24zMihhZGRpdGlvbjMyKHVuc2lnbmVkMzIobXRbaV0gXiBtdWx0aXBsaWNhdGlvbjMyKHVuc2lnbmVkMzIobXRbaS0xXSBeIChtdFtpLTFdID4+PiAzMCkpLCAxNjY0NTI1KSksIGluaXRfa2V5W2pdKSwgaik7XG5cdFx0XHRtdFtpXSA9XG5cdFx0XHQvL2MvL210W2ldICY9IDB4ZmZmZmZmZmY7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovXG5cdFx0XHR1bnNpZ25lZDMyKG10W2ldICYgMHhmZmZmZmZmZik7XG5cdFx0XHRpKys7IGorKztcblx0XHRcdGlmIChpPj1OKSB7IG10WzBdID0gbXRbTi0xXTsgaT0xOyB9XG5cdFx0XHRpZiAoaj49a2V5X2xlbmd0aCkgaj0wO1xuXHRcdH1cblx0XHRmb3IgKGs9Ti0xOyBrOyBrLS0pIHtcblx0XHRcdC8vYy8vbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTU2NjA4Mzk0MSkpXG5cdFx0XHQvL2MvLy0gaTsgLyogbm9uIGxpbmVhciAqL1xuXHRcdFx0bXRbaV0gPSBzdWJ0cmFjdGlvbjMyKHVuc2lnbmVkMzIoKGRiZz1tdFtpXSkgXiBtdWx0aXBsaWNhdGlvbjMyKHVuc2lnbmVkMzIobXRbaS0xXSBeIChtdFtpLTFdID4+PiAzMCkpLCAxNTY2MDgzOTQxKSksIGkpO1xuXHRcdFx0Ly9jLy9tdFtpXSAmPSAweGZmZmZmZmZmOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqL1xuXHRcdFx0bXRbaV0gPSB1bnNpZ25lZDMyKG10W2ldICYgMHhmZmZmZmZmZik7XG5cdFx0XHRpKys7XG5cdFx0XHRpZiAoaT49TikgeyBtdFswXSA9IG10W04tMV07IGk9MTsgfVxuXHRcdH1cblx0XHRtdFswXSA9IDB4ODAwMDAwMDA7IC8qIE1TQiBpcyAxOyBhc3N1cmluZyBub24temVybyBpbml0aWFsIGFycmF5ICovXG5cdH1cblxuICAgIC8qIG1vdmVkIG91dHNpZGUgb2YgZ2VucmFuZF9pbnQzMigpIGJ5IGp3YXR0ZSAyMDEwLTExLTE3OyBnZW5lcmF0ZSBsZXNzIGdhcmJhZ2UgKi9cbiAgICB2YXIgbWFnMDEgPSBbMHgwLCBNQVRSSVhfQV07XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwweGZmZmZmZmZmXS1pbnRlcnZhbCAqL1xuXHQvL2MvL3Vuc2lnbmVkIGxvbmcgZ2VucmFuZF9pbnQzMih2b2lkKVxuXHR0aGlzLmdlbnJhbmRfaW50MzIgPSBmdW5jdGlvbiAoKVxuXHR7XG5cdFx0Ly9jLy91bnNpZ25lZCBsb25nIHk7XG5cdFx0Ly9jLy9zdGF0aWMgdW5zaWduZWQgbG9uZyBtYWcwMVsyXT17MHgwVUwsIE1BVFJJWF9BfTtcblx0XHR2YXIgeTtcblx0XHQvKiBtYWcwMVt4XSA9IHggKiBNQVRSSVhfQSAgZm9yIHg9MCwxICovXG5cblx0XHRpZiAobXRpID49IE4pIHsgLyogZ2VuZXJhdGUgTiB3b3JkcyBhdCBvbmUgdGltZSAqL1xuXHRcdFx0Ly9jLy9pbnQga2s7XG5cdFx0XHR2YXIga2s7XG5cblx0XHRcdGlmIChtdGkgPT0gTisxKSAgIC8qIGlmIGluaXRfZ2VucmFuZCgpIGhhcyBub3QgYmVlbiBjYWxsZWQsICovXG5cdFx0XHRcdC8vYy8vaW5pdF9nZW5yYW5kKDU0ODkpOyAvKiBhIGRlZmF1bHQgaW5pdGlhbCBzZWVkIGlzIHVzZWQgKi9cblx0XHRcdFx0dGhpcy5pbml0X2dlbnJhbmQoNTQ4OSk7IC8qIGEgZGVmYXVsdCBpbml0aWFsIHNlZWQgaXMgdXNlZCAqL1xuXG5cdFx0XHRmb3IgKGtrPTA7a2s8Ti1NO2trKyspIHtcblx0XHRcdFx0Ly9jLy95ID0gKG10W2trXSZVUFBFUl9NQVNLKXwobXRba2srMV0mTE9XRVJfTUFTSyk7XG5cdFx0XHRcdC8vYy8vbXRba2tdID0gbXRba2srTV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXHRcdFx0XHR5ID0gdW5zaWduZWQzMigobXRba2tdJlVQUEVSX01BU0spfChtdFtraysxXSZMT1dFUl9NQVNLKSk7XG5cdFx0XHRcdG10W2trXSA9IHVuc2lnbmVkMzIobXRba2srTV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXSk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKDtrazxOLTE7a2srKykge1xuXHRcdFx0XHQvL2MvL3kgPSAobXRba2tdJlVQUEVSX01BU0spfChtdFtraysxXSZMT1dFUl9NQVNLKTtcblx0XHRcdFx0Ly9jLy9tdFtra10gPSBtdFtraysoTS1OKV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXHRcdFx0XHR5ID0gdW5zaWduZWQzMigobXRba2tdJlVQUEVSX01BU0spfChtdFtraysxXSZMT1dFUl9NQVNLKSk7XG5cdFx0XHRcdG10W2trXSA9IHVuc2lnbmVkMzIobXRba2srKE0tTildIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly9jLy95ID0gKG10W04tMV0mVVBQRVJfTUFTSyl8KG10WzBdJkxPV0VSX01BU0spO1xuXHRcdFx0Ly9jLy9tdFtOLTFdID0gbXRbTS0xXSBeICh5ID4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG5cdFx0XHR5ID0gdW5zaWduZWQzMigobXRbTi0xXSZVUFBFUl9NQVNLKXwobXRbMF0mTE9XRVJfTUFTSykpO1xuXHRcdFx0bXRbTi0xXSA9IHVuc2lnbmVkMzIobXRbTS0xXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdKTtcblx0XHRcdG10aSA9IDA7XG5cdFx0fVxuXG5cdFx0eSA9IG10W210aSsrXTtcblxuXHRcdC8qIFRlbXBlcmluZyAqL1xuXHRcdC8vYy8veSBePSAoeSA+PiAxMSk7XG5cdFx0Ly9jLy95IF49ICh5IDw8IDcpICYgMHg5ZDJjNTY4MDtcblx0XHQvL2MvL3kgXj0gKHkgPDwgMTUpICYgMHhlZmM2MDAwMDtcblx0XHQvL2MvL3kgXj0gKHkgPj4gMTgpO1xuXHRcdHkgPSB1bnNpZ25lZDMyKHkgXiAoeSA+Pj4gMTEpKTtcblx0XHR5ID0gdW5zaWduZWQzMih5IF4gKCh5IDw8IDcpICYgMHg5ZDJjNTY4MCkpO1xuXHRcdHkgPSB1bnNpZ25lZDMyKHkgXiAoKHkgPDwgMTUpICYgMHhlZmM2MDAwMCkpO1xuXHRcdHkgPSB1bnNpZ25lZDMyKHkgXiAoeSA+Pj4gMTgpKTtcblxuXHRcdHJldHVybiB5O1xuXHR9XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwweDdmZmZmZmZmXS1pbnRlcnZhbCAqL1xuXHQvL2MvL2xvbmcgZ2VucmFuZF9pbnQzMSh2b2lkKVxuXHR0aGlzLmdlbnJhbmRfaW50MzEgPSBmdW5jdGlvbiAoKVxuXHR7XG5cdFx0Ly9jLy9yZXR1cm4gKGdlbnJhbmRfaW50MzIoKT4+MSk7XG5cdFx0cmV0dXJuICh0aGlzLmdlbnJhbmRfaW50MzIoKT4+PjEpO1xuXHR9XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxXS1yZWFsLWludGVydmFsICovXG5cdC8vYy8vZG91YmxlIGdlbnJhbmRfcmVhbDEodm9pZClcblx0dGhpcy5nZW5yYW5kX3JlYWwxID0gZnVuY3Rpb24gKClcblx0e1xuXHRcdC8vYy8vcmV0dXJuIGdlbnJhbmRfaW50MzIoKSooMS4wLzQyOTQ5NjcyOTUuMCk7XG5cdFx0cmV0dXJuIHRoaXMuZ2VucmFuZF9pbnQzMigpKigxLjAvNDI5NDk2NzI5NS4wKTtcblx0XHQvKiBkaXZpZGVkIGJ5IDJeMzItMSAqL1xuXHR9XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKS1yZWFsLWludGVydmFsICovXG5cdC8vYy8vZG91YmxlIGdlbnJhbmRfcmVhbDIodm9pZClcblx0dGhpcy5nZW5yYW5kX3JlYWwyID0gZnVuY3Rpb24gKClcblx0e1xuXHRcdC8vYy8vcmV0dXJuIGdlbnJhbmRfaW50MzIoKSooMS4wLzQyOTQ5NjcyOTYuMCk7XG5cdFx0cmV0dXJuIHRoaXMuZ2VucmFuZF9pbnQzMigpKigxLjAvNDI5NDk2NzI5Ni4wKTtcblx0XHQvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cblx0fVxuXG5cdC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gKDAsMSktcmVhbC1pbnRlcnZhbCAqL1xuXHQvL2MvL2RvdWJsZSBnZW5yYW5kX3JlYWwzKHZvaWQpXG5cdHRoaXMuZ2VucmFuZF9yZWFsMyA9IGZ1bmN0aW9uICgpXG5cdHtcblx0XHQvL2MvL3JldHVybiAoKGdlbnJhbmRfaW50MzIoKSkgKyAwLjUpKigxLjAvNDI5NDk2NzI5Ni4wKTtcblx0XHRyZXR1cm4gKCh0aGlzLmdlbnJhbmRfaW50MzIoKSkgKyAwLjUpKigxLjAvNDI5NDk2NzI5Ni4wKTtcblx0XHQvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cblx0fVxuXG5cdC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSkgd2l0aCA1My1iaXQgcmVzb2x1dGlvbiovXG5cdC8vYy8vZG91YmxlIGdlbnJhbmRfcmVzNTModm9pZClcblx0dGhpcy5nZW5yYW5kX3JlczUzID0gZnVuY3Rpb24gKClcblx0e1xuXHRcdC8vYy8vdW5zaWduZWQgbG9uZyBhPWdlbnJhbmRfaW50MzIoKT4+NSwgYj1nZW5yYW5kX2ludDMyKCk+PjY7XG5cdFx0dmFyIGE9dGhpcy5nZW5yYW5kX2ludDMyKCk+Pj41LCBiPXRoaXMuZ2VucmFuZF9pbnQzMigpPj4+Njtcblx0XHRyZXR1cm4oYSo2NzEwODg2NC4wK2IpKigxLjAvOTAwNzE5OTI1NDc0MDk5Mi4wKTtcblx0fVxuXHQvKiBUaGVzZSByZWFsIHZlcnNpb25zIGFyZSBkdWUgdG8gSXNha3UgV2FkYSwgMjAwMi8wMS8wOSBhZGRlZCAqL1xufVxuXG4vLyAgRXhwb3J0czogUHVibGljIEFQSVxuXG4vLyAgRXhwb3J0IHRoZSB0d2lzdGVyIGNsYXNzXG5leHBvcnRzLk1lcnNlbm5lVHdpc3RlcjE5OTM3ID0gTWVyc2VubmVUd2lzdGVyMTk5Mzc7XG5cbi8vICBFeHBvcnQgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzXG52YXIgZ2VuID0gbmV3IE1lcnNlbm5lVHdpc3RlcjE5OTM3O1xuZ2VuLmluaXRfZ2VucmFuZCgobmV3IERhdGUpLmdldFRpbWUoKSAlIDEwMDAwMDAwMDApO1xuXG4vLyBBZGRlZCBtYXgsIG1pbiByYW5nZSBmdW5jdGlvbmFsaXR5LCBNYXJhayBTcXVpcmVzIFNlcHQgMTEgMjAxNFxuZXhwb3J0cy5yYW5kID0gZnVuY3Rpb24obWF4LCBtaW4pIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHtcbiAgICAgICAgbWluID0gMDtcbiAgICAgICAgbWF4ID0gMzI3Njg7XG4gICAgICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihnZW4uZ2VucmFuZF9yZWFsMigpICogKG1heCAtIG1pbikgKyBtaW4pO1xufVxuZXhwb3J0cy5zZWVkID0gZnVuY3Rpb24oUykge1xuICAgIGlmICh0eXBlb2YoUykgIT0gJ251bWJlcicpXG4gICAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2VlZChTKSBtdXN0IHRha2UgbnVtZXJpYyBhcmd1bWVudDsgaXMgXCIgKyB0eXBlb2YoUykpO1xuICAgICAgICB9XG4gICAgZ2VuLmluaXRfZ2VucmFuZChTKTtcbn1cbmV4cG9ydHMuc2VlZF9hcnJheSA9IGZ1bmN0aW9uKEEpIHtcbiAgICBpZiAodHlwZW9mKEEpICE9ICdvYmplY3QnKVxuICAgICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInNlZWRfYXJyYXkoQSkgbXVzdCB0YWtlIGFycmF5IG9mIG51bWJlcnM7IGlzIFwiICsgdHlwZW9mKEEpKTtcbiAgICAgICAgfVxuICAgIGdlbi5pbml0X2J5X2FycmF5KEEpO1xufVxuIiwiLypcbiAqIHBhc3N3b3JkLWdlbmVyYXRvclxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxMyBCZXJtaSBGZXJyZXIgPGJlcm1pQGJlcm1pbGFicy5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuKGZ1bmN0aW9uIChyb290KSB7XG5cbiAgdmFyIGxvY2FsTmFtZSwgY29uc29uYW50LCBsZXR0ZXIsIHBhc3N3b3JkLCB2b3dlbDtcbiAgbGV0dGVyID0gL1thLXpBLVpdJC87XG4gIHZvd2VsID0gL1thZWlvdUFFSU9VXSQvO1xuICBjb25zb25hbnQgPSAvW2JjZGZnaGprbG1ucHFyc3R2d3h5ekJDREZHSEpLTE1OUFFSU1RWV1hZWl0kLztcblxuXG4gIC8vIERlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGxvY2FsIHZhcmlhYmxlIHRoZSBwYXNzd29yZEdlbmVyYXRvciBsaWJyYXJ5IHdpbGwgdXNlXG4gIC8vIHRoaXMgaXMgc3BlY2lhbGx5IHVzZWZ1bCBpZiB3aW5kb3cucGFzc3dvcmRHZW5lcmF0b3IgaXMgYWxyZWFkeSBiZWluZyB1c2VkXG4gIC8vIGJ5IHlvdXIgYXBwbGljYXRpb24gYW5kIHlvdSB3YW50IGEgZGlmZmVyZW50IG5hbWUuIEZvciBleGFtcGxlOlxuICAvLyAgICAvLyBEZWNsYXJlIGJlZm9yZSBpbmNsdWRpbmcgdGhlIHBhc3N3b3JkR2VuZXJhdG9yIGxpYnJhcnlcbiAgLy8gICAgdmFyIGxvY2FsUGFzc3dvcmRHZW5lcmF0b3JMaWJyYXJ5TmFtZSA9ICdwYXNzJztcbiAgbG9jYWxOYW1lID0gcm9vdC5sb2NhbFBhc3N3b3JkR2VuZXJhdG9yTGlicmFyeU5hbWUgfHwgXCJnZW5lcmF0ZVBhc3N3b3JkXCIsXG5cbiAgcGFzc3dvcmQgPSBmdW5jdGlvbiAobGVuZ3RoLCBtZW1vcmFibGUsIHBhdHRlcm4sIHByZWZpeCkge1xuICAgIHZhciBjaGFyLCBuO1xuICAgIGlmIChsZW5ndGggPT0gbnVsbCkge1xuICAgICAgbGVuZ3RoID0gMTA7XG4gICAgfVxuICAgIGlmIChtZW1vcmFibGUgPT0gbnVsbCkge1xuICAgICAgbWVtb3JhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHBhdHRlcm4gPT0gbnVsbCkge1xuICAgICAgcGF0dGVybiA9IC9cXHcvO1xuICAgIH1cbiAgICBpZiAocHJlZml4ID09IG51bGwpIHtcbiAgICAgIHByZWZpeCA9ICcnO1xuICAgIH1cbiAgICBpZiAocHJlZml4Lmxlbmd0aCA+PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxuICAgIGlmIChtZW1vcmFibGUpIHtcbiAgICAgIGlmIChwcmVmaXgubWF0Y2goY29uc29uYW50KSkge1xuICAgICAgICBwYXR0ZXJuID0gdm93ZWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXR0ZXJuID0gY29uc29uYW50O1xuICAgICAgfVxuICAgIH1cbiAgICBuID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTQpICsgMzM7XG4gICAgY2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUobik7XG4gICAgaWYgKG1lbW9yYWJsZSkge1xuICAgICAgY2hhciA9IGNoYXIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKCFjaGFyLm1hdGNoKHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4gcGFzc3dvcmQobGVuZ3RoLCBtZW1vcmFibGUsIHBhdHRlcm4sIHByZWZpeCk7XG4gICAgfVxuICAgIHJldHVybiBwYXNzd29yZChsZW5ndGgsIG1lbW9yYWJsZSwgcGF0dGVybiwgXCJcIiArIHByZWZpeCArIGNoYXIpO1xuICB9O1xuXG5cbiAgKCh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6IHJvb3QpW2xvY2FsTmFtZV0gPSBwYXNzd29yZDtcbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBwYXNzd29yZDtcbiAgICB9XG4gIH1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGdsb2JhbGAgb24gdGhlIHNlcnZlci5cbn0odGhpcykpOyIsIi8qXG5cbkNvcHlyaWdodCAoYykgMjAxMi0yMDE0IEplZmZyZXkgTWVhbG9cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG5kb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxudGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxudG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGVcblNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1JcbkNPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbk9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkJhc2VkIGxvb3NlbHkgb24gTHVrYSBQdXNpYydzIFBIUCBTY3JpcHQ6IGh0dHA6Ly8zNjBwZXJjZW50cy5jb20vcG9zdHMvcGhwLXJhbmRvbS11c2VyLWFnZW50LWdlbmVyYXRvci9cblxuVGhlIGxpY2Vuc2UgZm9yIHRoYXQgc2NyaXB0IGlzIGFzIGZvbGxvd3M6XG5cblwiVEhFIEJFRVItV0FSRSBMSUNFTlNFXCIgKFJldmlzaW9uIDQyKTpcblxuPHB1c2ljOTNAZ21haWwuY29tPiB3cm90ZSB0aGlzIGZpbGUuIEFzIGxvbmcgYXMgeW91IHJldGFpbiB0aGlzIG5vdGljZSB5b3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBzdHVmZi5cbklmIHdlIG1lZXQgc29tZSBkYXksIGFuZCB5b3UgdGhpbmsgdGhpcyBzdHVmZiBpcyB3b3J0aCBpdCwgeW91IGNhbiBidXkgbWUgYSBiZWVyIGluIHJldHVybi4gTHVrYSBQdXNpY1xuKi9cblxuZnVuY3Rpb24gcm5kKGEsIGIpIHtcbiAgICAvL2NhbGxpbmcgcm5kKCkgd2l0aCBubyBhcmd1bWVudHMgaXMgaWRlbnRpY2FsIHRvIHJuZCgwLCAxMDApXG4gICAgYSA9IGEgfHwgMDtcbiAgICBiID0gYiB8fCAxMDA7XG5cbiAgICBpZiAodHlwZW9mIGIgPT09ICdudW1iZXInICYmIHR5cGVvZiBhID09PSAnbnVtYmVyJykge1xuICAgICAgICAvL3JuZChpbnQgbWluLCBpbnQgbWF4KSByZXR1cm5zIGludGVnZXIgYmV0d2VlbiBtaW4sIG1heFxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uIChtaW4sIG1heCkge1xuICAgICAgICAgICAgaWYgKG1pbiA+IG1heCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdleHBlY3RlZCBtaW4gPD0gbWF4OyBnb3QgbWluID0gJyArIG1pbiArICcsIG1heCA9ICcgKyBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47XG4gICAgICAgIH0oYSwgYikpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkgPT09IFwiW29iamVjdCBBcnJheV1cIikge1xuICAgICAgICAvL3JldHVybnMgYSByYW5kb20gZWxlbWVudCBmcm9tIGFycmF5IChhKSwgZXZlbiB3ZWlnaHRpbmdcbiAgICAgICAgcmV0dXJuIGFbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYS5sZW5ndGgpXTtcbiAgICB9XG5cbiAgICBpZiAoYSAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy9yZXR1cm5zIGEgcmFuZG9tIGtleSBmcm9tIHRoZSBwYXNzZWQgb2JqZWN0OyBrZXlzIGFyZSB3ZWlnaHRlZCBieSB0aGUgZGVjaW1hbCBwcm9iYWJpbGl0eSBpbiB0aGVpciB2YWx1ZVxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciByYW5kID0gcm5kKDAsIDEwMCkgLyAxMDAsIG1pbiA9IDAsIG1heCA9IDAsIGtleSwgcmV0dXJuX3ZhbDtcblxuICAgICAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heCA9IG9ialtrZXldICsgbWluO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZCA+PSBtaW4gJiYgcmFuZCA8PSBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IG1pbiArIG9ialtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJldHVybl92YWw7XG4gICAgICAgIH0oYSkpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBybmQuICgnICsgKGIgPyBhICsgJywgJyArIGIgOiBhKSArICcpJyk7XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUxhbmcoKSB7XG4gICAgcmV0dXJuIHJuZChbJ0FCJywgJ0FGJywgJ0FOJywgJ0FSJywgJ0FTJywgJ0FaJywgJ0JFJywgJ0JHJywgJ0JOJywgJ0JPJywgJ0JSJywgJ0JTJywgJ0NBJywgJ0NFJywgJ0NPJywgJ0NTJyxcbiAgICAgICAgICAgICAgICAnQ1UnLCAnQ1knLCAnREEnLCAnREUnLCAnRUwnLCAnRU4nLCAnRU8nLCAnRVMnLCAnRVQnLCAnRVUnLCAnRkEnLCAnRkknLCAnRkonLCAnRk8nLCAnRlInLCAnRlknLFxuICAgICAgICAgICAgICAgICdHQScsICdHRCcsICdHTCcsICdHVicsICdIRScsICdISScsICdIUicsICdIVCcsICdIVScsICdIWScsICdJRCcsICdJUycsICdJVCcsICdKQScsICdKVicsICdLQScsXG4gICAgICAgICAgICAgICAgJ0tHJywgJ0tPJywgJ0tVJywgJ0tXJywgJ0tZJywgJ0xBJywgJ0xCJywgJ0xJJywgJ0xOJywgJ0xUJywgJ0xWJywgJ01HJywgJ01LJywgJ01OJywgJ01PJywgJ01TJyxcbiAgICAgICAgICAgICAgICAnTVQnLCAnTVknLCAnTkInLCAnTkUnLCAnTkwnLCAnTk4nLCAnTk8nLCAnT0MnLCAnUEwnLCAnUFQnLCAnUk0nLCAnUk8nLCAnUlUnLCAnU0MnLCAnU0UnLCAnU0snLFxuICAgICAgICAgICAgICAgICdTTCcsICdTTycsICdTUScsICdTUicsICdTVicsICdTVycsICdUSycsICdUUicsICdUWScsICdVSycsICdVUicsICdVWicsICdWSScsICdWTycsICdZSScsICdaSCddKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tQnJvd3NlckFuZE9TKCkge1xuICAgIHZhciBicm93c2VyID0gcm5kKHtcbiAgICAgICAgY2hyb21lOiAgICAuNDUxMzI4MTA1NjYsXG4gICAgICAgIGlleHBsb3JlcjogLjI3NDc3MDYxODM2LFxuICAgICAgICBmaXJlZm94OiAgIC4xOTM4NDE3MDYwOCxcbiAgICAgICAgc2FmYXJpOiAgICAuMDYxODY3ODExMTgsXG4gICAgICAgIG9wZXJhOiAgICAgLjAxNTc0MjM2OTU1XG4gICAgfSksXG4gICAgb3MgPSB7XG4gICAgICAgIGNocm9tZTogIHt3aW46IC44OSwgIG1hYzogLjA5ICwgbGluOiAuMDJ9LFxuICAgICAgICBmaXJlZm94OiB7d2luOiAuODMsICBtYWM6IC4xNiwgIGxpbjogLjAxfSxcbiAgICAgICAgb3BlcmE6ICAge3dpbjogLjkxLCAgbWFjOiAuMDMgLCBsaW46IC4wNn0sXG4gICAgICAgIHNhZmFyaTogIHt3aW46IC4wNCAsIG1hYzogLjk2ICB9LFxuICAgICAgICBpZXhwbG9yZXI6IFsnd2luJ11cbiAgICB9O1xuXG4gICAgcmV0dXJuIFticm93c2VyLCBybmQob3NbYnJvd3Nlcl0pXTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tUHJvYyhhcmNoKSB7XG4gICAgdmFyIHByb2NzID0ge1xuICAgICAgICBsaW46WydpNjg2JywgJ3g4Nl82NCddLFxuICAgICAgICBtYWM6IHsnSW50ZWwnIDogLjQ4LCAnUFBDJzogLjAxLCAnVTsgSW50ZWwnOi40OCwgJ1U7IFBQQycgOi4wMX0sXG4gICAgICAgIHdpbjpbJycsICdXT1c2NCcsICdXaW42NDsgeDY0J11cbiAgICB9O1xuICAgIHJldHVybiBybmQocHJvY3NbYXJjaF0pO1xufVxuXG5mdW5jdGlvbiByYW5kb21SZXZpc2lvbihkb3RzKSB7XG4gICAgdmFyIHJldHVybl92YWwgPSAnJztcbiAgICAvL2dlbmVyYXRlIGEgcmFuZG9tIHJldmlzaW9uXG4gICAgLy9kb3RzID0gMiByZXR1cm5zIC54Lnkgd2hlcmUgeCAmIHkgYXJlIGJldHdlZW4gMCBhbmQgOVxuICAgIGZvciAodmFyIHggPSAwOyB4IDwgZG90czsgeCsrKSB7XG4gICAgICAgIHJldHVybl92YWwgKz0gJy4nICsgcm5kKDAsIDkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuX3ZhbDtcbn1cblxudmFyIHZlcnNpb25fc3RyaW5nID0ge1xuICAgIG5ldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW3JuZCgxLCA0KSwgcm5kKDAsIDkpLCBybmQoMTAwMDAsIDk5OTk5KSwgcm5kKDAsIDkpXS5qb2luKCcuJyk7XG4gICAgfSxcbiAgICBudDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcm5kKDUsIDYpICsgJy4nICsgcm5kKDAsIDMpO1xuICAgIH0sXG4gICAgaWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJuZCg3LCAxMSk7XG4gICAgfSxcbiAgICB0cmlkZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBybmQoMywgNykgKyAnLicgKyBybmQoMCwgMSk7XG4gICAgfSxcbiAgICBvc3g6IGZ1bmN0aW9uIChkZWxpbSkge1xuICAgICAgICByZXR1cm4gWzEwLCBybmQoNSwgMTApLCBybmQoMCwgOSldLmpvaW4oZGVsaW0gfHwgJy4nKTtcbiAgICB9LFxuICAgIGNocm9tZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW3JuZCgxMywgMzkpLCAwLCBybmQoODAwLCA4OTkpLCAwXS5qb2luKCcuJyk7XG4gICAgfSxcbiAgICBwcmVzdG86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcyLjkuJyArIHJuZCgxNjAsIDE5MCk7XG4gICAgfSxcbiAgICBwcmVzdG8yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBybmQoMTAsIDEyKSArICcuMDAnO1xuICAgIH0sXG4gICAgc2FmYXJpOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBybmQoNTMxLCA1MzgpICsgJy4nICsgcm5kKDAsIDIpICsgJy4nICsgcm5kKDAsMik7XG4gICAgfVxufTtcblxudmFyIGJyb3dzZXIgPSB7XG4gICAgZmlyZWZveDogZnVuY3Rpb24gZmlyZWZveChhcmNoKSB7XG4gICAgICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HZWNrb191c2VyX2FnZW50X3N0cmluZ19yZWZlcmVuY2VcbiAgICAgICAgdmFyIGZpcmVmb3hfdmVyID0gcm5kKDUsIDE1KSArIHJhbmRvbVJldmlzaW9uKDIpLFxuICAgICAgICAgICAgZ2Vja29fdmVyID0gJ0dlY2tvLzIwMTAwMTAxIEZpcmVmb3gvJyArIGZpcmVmb3hfdmVyLFxuICAgICAgICAgICAgcHJvYyA9IHJhbmRvbVByb2MoYXJjaCksXG4gICAgICAgICAgICBvc192ZXIgPSAoYXJjaCA9PT0gJ3dpbicpID8gJyhXaW5kb3dzIE5UICcgKyB2ZXJzaW9uX3N0cmluZy5udCgpICsgKChwcm9jKSA/ICc7ICcgKyBwcm9jIDogJycpXG4gICAgICAgICAgICA6IChhcmNoID09PSAnbWFjJykgPyAnKE1hY2ludG9zaDsgJyArIHByb2MgKyAnIE1hYyBPUyBYICcgKyB2ZXJzaW9uX3N0cmluZy5vc3goKVxuICAgICAgICAgICAgOiAnKFgxMTsgTGludXggJyArIHByb2M7XG5cbiAgICAgICAgcmV0dXJuICdNb3ppbGxhLzUuMCAnICsgb3NfdmVyICsgJzsgcnY6JyArIGZpcmVmb3hfdmVyLnNsaWNlKDAsIC0yKSArICcpICcgKyBnZWNrb192ZXI7XG4gICAgfSxcblxuICAgIGlleHBsb3JlcjogZnVuY3Rpb24gaWV4cGxvcmVyKCkge1xuICAgICAgICB2YXIgdmVyID0gdmVyc2lvbl9zdHJpbmcuaWUoKTtcblxuICAgICAgICBpZiAodmVyID49IDExKSB7XG4gICAgICAgICAgICAvL2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDg2OTMwMSh2PXZzLjg1KS5hc3B4XG4gICAgICAgICAgICByZXR1cm4gJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuJyArIHJuZCgxLDMpICsgJzsgVHJpZGVudC83LjA7ICcgKyBybmQoWydUb3VjaDsgJywgJyddKSArICdydjoxMS4wKSBsaWtlIEdlY2tvJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL21zNTM3NTAzKHY9dnMuODUpLmFzcHhcbiAgICAgICAgcmV0dXJuICdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgTVNJRSAnICsgdmVyICsgJy4wOyBXaW5kb3dzIE5UICcgKyB2ZXJzaW9uX3N0cmluZy5udCgpICsgJzsgVHJpZGVudC8nICtcbiAgICAgICAgICAgIHZlcnNpb25fc3RyaW5nLnRyaWRlbnQoKSArICgocm5kKDAsIDEpID09PSAxKSA/ICc7IC5ORVQgQ0xSICcgKyB2ZXJzaW9uX3N0cmluZy5uZXQoKSA6ICcnKSArICcpJztcbiAgICB9LFxuXG4gICAgb3BlcmE6IGZ1bmN0aW9uIG9wZXJhKGFyY2gpIHtcbiAgICAgICAgLy9odHRwOi8vd3d3Lm9wZXJhLmNvbS9kb2NzL2hpc3RvcnkvXG4gICAgICAgIHZhciBwcmVzdG9fdmVyID0gJyBQcmVzdG8vJyArIHZlcnNpb25fc3RyaW5nLnByZXN0bygpICsgJyBWZXJzaW9uLycgKyB2ZXJzaW9uX3N0cmluZy5wcmVzdG8yKCkgKyAnKScsXG4gICAgICAgICAgICBvc192ZXIgPSAoYXJjaCA9PT0gJ3dpbicpID8gJyhXaW5kb3dzIE5UICcgKyB2ZXJzaW9uX3N0cmluZy5udCgpICsgJzsgVTsgJyArIHJhbmRvbUxhbmcoKSArIHByZXN0b192ZXJcbiAgICAgICAgICAgIDogKGFyY2ggPT09ICdsaW4nKSA/ICcoWDExOyBMaW51eCAnICsgcmFuZG9tUHJvYyhhcmNoKSArICc7IFU7ICcgKyByYW5kb21MYW5nKCkgKyBwcmVzdG9fdmVyXG4gICAgICAgICAgICA6ICcoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAnICsgdmVyc2lvbl9zdHJpbmcub3N4KCkgKyAnIFU7ICcgKyByYW5kb21MYW5nKCkgKyAnIFByZXN0by8nICtcbiAgICAgICAgICAgIHZlcnNpb25fc3RyaW5nLnByZXN0bygpICsgJyBWZXJzaW9uLycgKyB2ZXJzaW9uX3N0cmluZy5wcmVzdG8yKCkgKyAnKSc7XG5cbiAgICAgICAgcmV0dXJuICdPcGVyYS8nICsgcm5kKDksIDE0KSArICcuJyArIHJuZCgwLCA5OSkgKyAnICcgKyBvc192ZXI7XG4gICAgfSxcblxuICAgIHNhZmFyaTogZnVuY3Rpb24gc2FmYXJpKGFyY2gpIHtcbiAgICAgICAgdmFyIHNhZmFyaSA9IHZlcnNpb25fc3RyaW5nLnNhZmFyaSgpLFxuICAgICAgICAgICAgdmVyID0gcm5kKDQsIDcpICsgJy4nICsgcm5kKDAsMSkgKyAnLicgKyBybmQoMCwxMCksXG4gICAgICAgICAgICBvc192ZXIgPSAoYXJjaCA9PT0gJ21hYycpID8gJyhNYWNpbnRvc2g7ICcgKyByYW5kb21Qcm9jKCdtYWMnKSArICcgTWFjIE9TIFggJysgdmVyc2lvbl9zdHJpbmcub3N4KCdfJykgKyAnIHJ2OicgKyBybmQoMiwgNikgKyAnLjA7ICcrIHJhbmRvbUxhbmcoKSArICcpICdcbiAgICAgICAgICAgIDogJyhXaW5kb3dzOyBVOyBXaW5kb3dzIE5UICcgKyB2ZXJzaW9uX3N0cmluZy5udCgpICsgJyknO1xuXG4gICAgICAgIHJldHVybiAnTW96aWxsYS81LjAgJyArIG9zX3ZlciArICdBcHBsZVdlYktpdC8nICsgc2FmYXJpICsgJyAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vJyArIHZlciArICcgU2FmYXJpLycgKyBzYWZhcmk7XG4gICAgfSxcblxuICAgIGNocm9tZTogZnVuY3Rpb24gY2hyb21lKGFyY2gpIHtcbiAgICAgICAgdmFyIHNhZmFyaSA9IHZlcnNpb25fc3RyaW5nLnNhZmFyaSgpLFxuICAgICAgICAgICAgb3NfdmVyID0gKGFyY2ggPT09ICdtYWMnKSA/ICcoTWFjaW50b3NoOyAnICsgcmFuZG9tUHJvYygnbWFjJykgKyAnIE1hYyBPUyBYICcgKyB2ZXJzaW9uX3N0cmluZy5vc3goJ18nKSArICcpICdcbiAgICAgICAgICAgIDogKGFyY2ggPT09ICd3aW4nKSA/ICcoV2luZG93czsgVTsgV2luZG93cyBOVCAnICsgdmVyc2lvbl9zdHJpbmcubnQoKSArICcpJ1xuICAgICAgICAgICAgOiAnKFgxMTsgTGludXggJyArIHJhbmRvbVByb2MoYXJjaCk7XG5cbiAgICAgICAgcmV0dXJuICdNb3ppbGxhLzUuMCAnICsgb3NfdmVyICsgJyBBcHBsZVdlYktpdC8nICsgc2FmYXJpICsgJyAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8nICsgdmVyc2lvbl9zdHJpbmcuY2hyb21lKCkgKyAnIFNhZmFyaS8nICsgc2FmYXJpO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZSgpIHtcbiAgICB2YXIgcmFuZG9tID0gcmFuZG9tQnJvd3NlckFuZE9TKCk7XG4gICAgcmV0dXJuIGJyb3dzZXJbcmFuZG9tWzBdXShyYW5kb21bMV0pO1xufTtcbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLypcbiAqICRJZDogYmFzZTY0LmpzLHYgMi4xNSAyMDE0LzA0LzA1IDEyOjU4OjU3IGRhbmtvZ2FpIEV4cCBkYW5rb2dhaSAkXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZVxuICpcbiAqICBSZWZlcmVuY2VzOlxuICogICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjRcbiAqL1xuXG4oZnVuY3Rpb24oZ2xvYmFsKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIGV4aXN0aW5nIHZlcnNpb24gZm9yIG5vQ29uZmxpY3QoKVxuICAgIHZhciBfQmFzZTY0ID0gZ2xvYmFsLkJhc2U2NDtcbiAgICB2YXIgdmVyc2lvbiA9IFwiMi4xLjlcIjtcbiAgICAvLyBpZiBub2RlLmpzLCB3ZSB1c2UgQnVmZmVyXG4gICAgdmFyIGJ1ZmZlcjtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuICAgIH1cbiAgICAvLyBjb25zdGFudHNcbiAgICB2YXIgYjY0Y2hhcnNcbiAgICAgICAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG4gICAgdmFyIGI2NHRhYiA9IGZ1bmN0aW9uKGJpbikge1xuICAgICAgICB2YXIgdCA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGJpbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRbYmluLmNoYXJBdChpKV0gPSBpO1xuICAgICAgICByZXR1cm4gdDtcbiAgICB9KGI2NGNoYXJzKTtcbiAgICB2YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgICAvLyBlbmNvZGVyIHN0dWZmXG4gICAgdmFyIGNiX3V0b2IgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgIGlmIChjLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHZhciBjYyA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgIHJldHVybiBjYyA8IDB4ODAgPyBjXG4gICAgICAgICAgICAgICAgOiBjYyA8IDB4ODAwID8gKGZyb21DaGFyQ29kZSgweGMwIHwgKGNjID4+PiA2KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8IChjYyAmIDB4M2YpKSlcbiAgICAgICAgICAgICAgICA6IChmcm9tQ2hhckNvZGUoMHhlMCB8ICgoY2MgPj4+IDEyKSAmIDB4MGYpKVxuICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoKGNjID4+PiAgNikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKCBjYyAgICAgICAgICYgMHgzZikpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjYyA9IDB4MTAwMDBcbiAgICAgICAgICAgICAgICArIChjLmNoYXJDb2RlQXQoMCkgLSAweEQ4MDApICogMHg0MDBcbiAgICAgICAgICAgICAgICArIChjLmNoYXJDb2RlQXQoMSkgLSAweERDMDApO1xuICAgICAgICAgICAgcmV0dXJuIChmcm9tQ2hhckNvZGUoMHhmMCB8ICgoY2MgPj4+IDE4KSAmIDB4MDcpKVxuICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKChjYyA+Pj4gMTIpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoKGNjID4+PiAgNikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICggY2MgICAgICAgICAmIDB4M2YpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciByZV91dG9iID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRkZdfFteXFx4MDAtXFx4N0ZdL2c7XG4gICAgdmFyIHV0b2IgPSBmdW5jdGlvbih1KSB7XG4gICAgICAgIHJldHVybiB1LnJlcGxhY2UocmVfdXRvYiwgY2JfdXRvYik7XG4gICAgfTtcbiAgICB2YXIgY2JfZW5jb2RlID0gZnVuY3Rpb24oY2NjKSB7XG4gICAgICAgIHZhciBwYWRsZW4gPSBbMCwgMiwgMV1bY2NjLmxlbmd0aCAlIDNdLFxuICAgICAgICBvcmQgPSBjY2MuY2hhckNvZGVBdCgwKSA8PCAxNlxuICAgICAgICAgICAgfCAoKGNjYy5sZW5ndGggPiAxID8gY2NjLmNoYXJDb2RlQXQoMSkgOiAwKSA8PCA4KVxuICAgICAgICAgICAgfCAoKGNjYy5sZW5ndGggPiAyID8gY2NjLmNoYXJDb2RlQXQoMikgOiAwKSksXG4gICAgICAgIGNoYXJzID0gW1xuICAgICAgICAgICAgYjY0Y2hhcnMuY2hhckF0KCBvcmQgPj4+IDE4KSxcbiAgICAgICAgICAgIGI2NGNoYXJzLmNoYXJBdCgob3JkID4+PiAxMikgJiA2MyksXG4gICAgICAgICAgICBwYWRsZW4gPj0gMiA/ICc9JyA6IGI2NGNoYXJzLmNoYXJBdCgob3JkID4+PiA2KSAmIDYzKSxcbiAgICAgICAgICAgIHBhZGxlbiA+PSAxID8gJz0nIDogYjY0Y2hhcnMuY2hhckF0KG9yZCAmIDYzKVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gICAgfTtcbiAgICB2YXIgYnRvYSA9IGdsb2JhbC5idG9hID8gZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLmJ0b2EoYik7XG4gICAgfSA6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIGIucmVwbGFjZSgvW1xcc1xcU117MSwzfS9nLCBjYl9lbmNvZGUpO1xuICAgIH07XG4gICAgdmFyIF9lbmNvZGUgPSBidWZmZXIgPyBmdW5jdGlvbiAodSkge1xuICAgICAgICByZXR1cm4gKHUuY29uc3RydWN0b3IgPT09IGJ1ZmZlci5jb25zdHJ1Y3RvciA/IHUgOiBuZXcgYnVmZmVyKHUpKVxuICAgICAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgfVxuICAgIDogZnVuY3Rpb24gKHUpIHsgcmV0dXJuIGJ0b2EodXRvYih1KSkgfVxuICAgIDtcbiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24odSwgdXJpc2FmZSkge1xuICAgICAgICByZXR1cm4gIXVyaXNhZmVcbiAgICAgICAgICAgID8gX2VuY29kZShTdHJpbmcodSkpXG4gICAgICAgICAgICA6IF9lbmNvZGUoU3RyaW5nKHUpKS5yZXBsYWNlKC9bK1xcL10vZywgZnVuY3Rpb24obTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbTAgPT0gJysnID8gJy0nIDogJ18nO1xuICAgICAgICAgICAgfSkucmVwbGFjZSgvPS9nLCAnJyk7XG4gICAgfTtcbiAgICB2YXIgZW5jb2RlVVJJID0gZnVuY3Rpb24odSkgeyByZXR1cm4gZW5jb2RlKHUsIHRydWUpIH07XG4gICAgLy8gZGVjb2RlciBzdHVmZlxuICAgIHZhciByZV9idG91ID0gbmV3IFJlZ0V4cChbXG4gICAgICAgICdbXFx4QzAtXFx4REZdW1xceDgwLVxceEJGXScsXG4gICAgICAgICdbXFx4RTAtXFx4RUZdW1xceDgwLVxceEJGXXsyfScsXG4gICAgICAgICdbXFx4RjAtXFx4RjddW1xceDgwLVxceEJGXXszfSdcbiAgICBdLmpvaW4oJ3wnKSwgJ2cnKTtcbiAgICB2YXIgY2JfYnRvdSA9IGZ1bmN0aW9uKGNjY2MpIHtcbiAgICAgICAgc3dpdGNoKGNjY2MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHZhciBjcCA9ICgoMHgwNyAmIGNjY2MuY2hhckNvZGVBdCgwKSkgPDwgMTgpXG4gICAgICAgICAgICAgICAgfCAgICAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpIDw8IDEyKVxuICAgICAgICAgICAgICAgIHwgICAgKCgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDIpKSA8PCAgNilcbiAgICAgICAgICAgICAgICB8ICAgICAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgzKSksXG4gICAgICAgICAgICBvZmZzZXQgPSBjcCAtIDB4MTAwMDA7XG4gICAgICAgICAgICByZXR1cm4gKGZyb21DaGFyQ29kZSgob2Zmc2V0ICA+Pj4gMTApICsgMHhEODAwKVxuICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgob2Zmc2V0ICYgMHgzRkYpICsgMHhEQzAwKSk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBmcm9tQ2hhckNvZGUoXG4gICAgICAgICAgICAgICAgKCgweDBmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxMilcbiAgICAgICAgICAgICAgICAgICAgfCAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpIDw8IDYpXG4gICAgICAgICAgICAgICAgICAgIHwgICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDIpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAgZnJvbUNoYXJDb2RlKFxuICAgICAgICAgICAgICAgICgoMHgxZiAmIGNjY2MuY2hhckNvZGVBdCgwKSkgPDwgNilcbiAgICAgICAgICAgICAgICAgICAgfCAgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgYnRvdSA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIGIucmVwbGFjZShyZV9idG91LCBjYl9idG91KTtcbiAgICB9O1xuICAgIHZhciBjYl9kZWNvZGUgPSBmdW5jdGlvbihjY2NjKSB7XG4gICAgICAgIHZhciBsZW4gPSBjY2NjLmxlbmd0aCxcbiAgICAgICAgcGFkbGVuID0gbGVuICUgNCxcbiAgICAgICAgbiA9IChsZW4gPiAwID8gYjY0dGFiW2NjY2MuY2hhckF0KDApXSA8PCAxOCA6IDApXG4gICAgICAgICAgICB8IChsZW4gPiAxID8gYjY0dGFiW2NjY2MuY2hhckF0KDEpXSA8PCAxMiA6IDApXG4gICAgICAgICAgICB8IChsZW4gPiAyID8gYjY0dGFiW2NjY2MuY2hhckF0KDIpXSA8PCAgNiA6IDApXG4gICAgICAgICAgICB8IChsZW4gPiAzID8gYjY0dGFiW2NjY2MuY2hhckF0KDMpXSAgICAgICA6IDApLFxuICAgICAgICBjaGFycyA9IFtcbiAgICAgICAgICAgIGZyb21DaGFyQ29kZSggbiA+Pj4gMTYpLFxuICAgICAgICAgICAgZnJvbUNoYXJDb2RlKChuID4+PiAgOCkgJiAweGZmKSxcbiAgICAgICAgICAgIGZyb21DaGFyQ29kZSggbiAgICAgICAgICYgMHhmZilcbiAgICAgICAgXTtcbiAgICAgICAgY2hhcnMubGVuZ3RoIC09IFswLCAwLCAyLCAxXVtwYWRsZW5dO1xuICAgICAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gICAgfTtcbiAgICB2YXIgYXRvYiA9IGdsb2JhbC5hdG9iID8gZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLmF0b2IoYSk7XG4gICAgfSA6IGZ1bmN0aW9uKGEpe1xuICAgICAgICByZXR1cm4gYS5yZXBsYWNlKC9bXFxzXFxTXXsxLDR9L2csIGNiX2RlY29kZSk7XG4gICAgfTtcbiAgICB2YXIgX2RlY29kZSA9IGJ1ZmZlciA/IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIChhLmNvbnN0cnVjdG9yID09PSBidWZmZXIuY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICA/IGEgOiBuZXcgYnVmZmVyKGEsICdiYXNlNjQnKSkudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgOiBmdW5jdGlvbihhKSB7IHJldHVybiBidG91KGF0b2IoYSkpIH07XG4gICAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uKGEpe1xuICAgICAgICByZXR1cm4gX2RlY29kZShcbiAgICAgICAgICAgIFN0cmluZyhhKS5yZXBsYWNlKC9bLV9dL2csIGZ1bmN0aW9uKG0wKSB7IHJldHVybiBtMCA9PSAnLScgPyAnKycgOiAnLycgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9dL2csICcnKVxuICAgICAgICApO1xuICAgIH07XG4gICAgdmFyIG5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIEJhc2U2NCA9IGdsb2JhbC5CYXNlNjQ7XG4gICAgICAgIGdsb2JhbC5CYXNlNjQgPSBfQmFzZTY0O1xuICAgICAgICByZXR1cm4gQmFzZTY0O1xuICAgIH07XG4gICAgLy8gZXhwb3J0IEJhc2U2NFxuICAgIGdsb2JhbC5CYXNlNjQgPSB7XG4gICAgICAgIFZFUlNJT046IHZlcnNpb24sXG4gICAgICAgIGF0b2I6IGF0b2IsXG4gICAgICAgIGJ0b2E6IGJ0b2EsXG4gICAgICAgIGZyb21CYXNlNjQ6IGRlY29kZSxcbiAgICAgICAgdG9CYXNlNjQ6IGVuY29kZSxcbiAgICAgICAgdXRvYjogdXRvYixcbiAgICAgICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgICAgIGVuY29kZVVSSTogZW5jb2RlVVJJLFxuICAgICAgICBidG91OiBidG91LFxuICAgICAgICBkZWNvZGU6IGRlY29kZSxcbiAgICAgICAgbm9Db25mbGljdDogbm9Db25mbGljdFxuICAgIH07XG4gICAgLy8gaWYgRVM1IGlzIGF2YWlsYWJsZSwgbWFrZSBCYXNlNjQuZXh0ZW5kU3RyaW5nKCkgYXZhaWxhYmxlXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIG5vRW51bSA9IGZ1bmN0aW9uKHYpe1xuICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTp2LGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX07XG4gICAgICAgIH07XG4gICAgICAgIGdsb2JhbC5CYXNlNjQuZXh0ZW5kU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFN0cmluZy5wcm90b3R5cGUsICdmcm9tQmFzZTY0Jywgbm9FbnVtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZSh0aGlzKVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBTdHJpbmcucHJvdG90eXBlLCAndG9CYXNlNjQnLCBub0VudW0oZnVuY3Rpb24gKHVyaXNhZmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZSh0aGlzLCB1cmlzYWZlKVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBTdHJpbmcucHJvdG90eXBlLCAndG9CYXNlNjRVUkknLCBub0VudW0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlKHRoaXMsIHRydWUpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyB0aGF0J3MgaXQhXG4gICAgaWYgKGdsb2JhbFsnTWV0ZW9yJ10pIHtcbiAgICAgICBCYXNlNjQgPSBnbG9iYWwuQmFzZTY0OyAvLyBmb3Igbm9ybWFsIGV4cG9ydCBpbiBNZXRlb3IuanNcbiAgICB9XG59KSh0aGlzKTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuL3V0aWwvY29udGFpbmVyJyksXHJcbiAgICB0cmF2ZXJzZSA9IHJlcXVpcmUoJy4vdXRpbC90cmF2ZXJzZScpLFxyXG4gICAgZm9ybWF0cyA9IHJlcXVpcmUoJy4vdXRpbC9mb3JtYXRzJyksXHJcbiAgICByYW5kb20gPSByZXF1aXJlKCcuL3V0aWwvcmFuZG9tJyksXHJcbiAgICBtZXJnZSA9IHJlcXVpcmUoJy4vdXRpbC9tZXJnZScpO1xyXG5cclxudmFyIGRlcmVmID0gcmVxdWlyZSgnZGVyZWYnKTtcclxuXHJcbmZ1bmN0aW9uIGlzS2V5KHByb3ApIHtcclxuICByZXR1cm4gcHJvcCA9PT0gJ2VudW0nIHx8IHByb3AgPT09ICdyZXF1aXJlZCcgfHwgcHJvcCA9PT0gJ2RlZmluaXRpb25zJztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGUoc2NoZW1hLCByZWZzLCBleCkge1xyXG4gIHZhciAkID0gZGVyZWYoKTtcclxuXHJcbiAgdHJ5IHtcclxuICAgIHZhciBtYXggPSAxMDA7XHJcblxyXG4gICAgcmV0dXJuIHRyYXZlcnNlKCQoc2NoZW1hLCByZWZzLCBleCksIFtdLCBmdW5jdGlvbiByZWR1Y2Uoc3ViKSB7XHJcbiAgICAgIGlmICghbWF4KSB7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi4kcmVmO1xyXG4gICAgICAgIGRlbGV0ZSBzdWIub25lT2Y7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi5hbnlPZjtcclxuICAgICAgICBkZWxldGUgc3ViLmFsbE9mO1xyXG4gICAgICAgIHJldHVybiBzdWI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygc3ViLiRyZWYgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdmFyIGlkID0gc3ViLiRyZWY7XHJcblxyXG4gICAgICAgIGRlbGV0ZSBzdWIuJHJlZjtcclxuXHJcbiAgICAgICAgbWF4LS07XHJcblxyXG4gICAgICAgIG1lcmdlKHN1YiwgJC51dGlsLmZpbmRCeVJlZihpZCwgJC5yZWZzKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1Yi5hbGxPZikpIHtcclxuICAgICAgICB2YXIgc2NoZW1hcyA9IHN1Yi5hbGxPZjtcclxuXHJcbiAgICAgICAgZGVsZXRlIHN1Yi5hbGxPZjtcclxuXHJcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgb25seSBjYXNlIHdoZXJlIGFsbCBzdWItc2NoZW1hc1xyXG4gICAgICAgIC8vIG11c3QgYmUgcmVzb2x2ZWQgYmVmb3JlIGFueSBtZXJnZVxyXG4gICAgICAgIHNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgICBtZXJnZShzdWIsIHJlZHVjZShzKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1Yi5vbmVPZiB8fCBzdWIuYW55T2YpKSB7XHJcbiAgICAgICAgdmFyIG1peCA9IHN1Yi5vbmVPZiB8fCBzdWIuYW55T2Y7XHJcblxyXG4gICAgICAgIGRlbGV0ZSBzdWIuYW55T2Y7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi5vbmVPZjtcclxuXHJcbiAgICAgICAgbWVyZ2Uoc3ViLCByYW5kb20ucGljayhtaXgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yICh2YXIgcHJvcCBpbiBzdWIpIHtcclxuICAgICAgICBpZiAoKEFycmF5LmlzQXJyYXkoc3ViW3Byb3BdKSB8fCB0eXBlb2Ygc3ViW3Byb3BdID09PSAnb2JqZWN0JykgJiYgIWlzS2V5KHByb3ApKSB7XHJcbiAgICAgICAgICBzdWJbcHJvcF0gPSByZWR1Y2Uoc3ViW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzdWI7XHJcbiAgICB9KTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBpZiAoZS5wYXRoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UgKyAnIGluICcgKyAnLycgKyBlLnBhdGguam9pbignLycpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5nZW5lcmF0ZS5mb3JtYXRzID0gZm9ybWF0cztcclxuZ2VuZXJhdGUuZXh0ZW5kID0gY29udGFpbmVyLnNldDtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGU7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciByYW5kb20gPSByZXF1aXJlKCcuLi91dGlsL3JhbmRvbScpLFxyXG4gICAgdHJhdmVyc2UgPSByZXF1aXJlKCcuLi91dGlsL3RyYXZlcnNlJyksXHJcbiAgICBoYXNQcm9wcyA9IHJlcXVpcmUoJy4uL3V0aWwvaGFzLXByb3BzJyk7XHJcblxyXG52YXIgUGFyc2VFcnJvciA9IHJlcXVpcmUoJy4uL3V0aWwvZXJyb3InKTtcclxuXHJcbmZ1bmN0aW9uIHVuaXF1ZShwYXRoLCBpdGVtcywgdmFsdWUsIHNhbXBsZSwgcmVzb2x2ZSkge1xyXG4gIHZhciB0bXAgPSBbXSxcclxuICAgICAgc2VlbiA9IFtdO1xyXG5cclxuICBmdW5jdGlvbiB3YWxrKG9iaikge1xyXG4gICAgdmFyIGpzb24gPSBKU09OLnN0cmluZ2lmeShvYmopO1xyXG5cclxuICAgIGlmIChzZWVuLmluZGV4T2YoanNvbikgPT09IC0xKSB7XHJcbiAgICAgIHNlZW4ucHVzaChqc29uKTtcclxuICAgICAgdG1wLnB1c2gob2JqKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGl0ZW1zLmZvckVhY2god2Fsayk7XHJcblxyXG4gIC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgc29sdXRpb24/XHJcbiAgdmFyIGxpbWl0ID0gMTAwO1xyXG5cclxuICB3aGlsZSAodG1wLmxlbmd0aCAhPT0gaXRlbXMubGVuZ3RoKSB7XHJcbiAgICB3YWxrKHRyYXZlcnNlKHZhbHVlLml0ZW1zIHx8IHNhbXBsZSwgcGF0aCwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIGlmICghbGltaXQtLSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB0bXA7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsdWUsIHBhdGgsIHJlc29sdmUpIHtcclxuICB2YXIgaXRlbXMgPSBbXTtcclxuXHJcbiAgaWYgKCEodmFsdWUuaXRlbXMgfHwgdmFsdWUuYWRkaXRpb25hbEl0ZW1zKSkge1xyXG4gICAgaWYgKGhhc1Byb3BzKHZhbHVlLCAnbWluSXRlbXMnLCAnbWF4SXRlbXMnLCAndW5pcXVlSXRlbXMnKSkge1xyXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcignbWlzc2luZyBpdGVtcyBmb3IgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgcGF0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuaXRlbXMpKSB7XHJcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShpdGVtcywgdmFsdWUuaXRlbXMubWFwKGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xyXG4gICAgICByZXR1cm4gdHJhdmVyc2UoaXRlbSwgcGF0aC5jb25jYXQoWydpdGVtcycsIGtleV0pLCByZXNvbHZlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHZhciBsZW5ndGggPSByYW5kb20odmFsdWUubWluSXRlbXMsIHZhbHVlLm1heEl0ZW1zLCAxLCA1KSxcclxuICAgICAgc2FtcGxlID0gdHlwZW9mIHZhbHVlLmFkZGl0aW9uYWxJdGVtcyA9PT0gJ29iamVjdCcgPyB2YWx1ZS5hZGRpdGlvbmFsSXRlbXMgOiB7fTtcclxuXHJcbiAgZm9yICh2YXIgY3VycmVudCA9IGl0ZW1zLmxlbmd0aDsgY3VycmVudCA8IGxlbmd0aDsgY3VycmVudCArPSAxKSB7XHJcbiAgICBpdGVtcy5wdXNoKHRyYXZlcnNlKHZhbHVlLml0ZW1zIHx8IHNhbXBsZSwgcGF0aC5jb25jYXQoWydpdGVtcycsIGN1cnJlbnRdKSwgcmVzb2x2ZSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLnVuaXF1ZUl0ZW1zKSB7XHJcbiAgICByZXR1cm4gdW5pcXVlKHBhdGguY29uY2F0KFsnaXRlbXMnXSksIGl0ZW1zLCB2YWx1ZSwgc2FtcGxlLCByZXNvbHZlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBpdGVtcztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gTWF0aC5yYW5kb20oKSA+IDAuNTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIG51bWJlciA9IHJlcXVpcmUoJy4vbnVtYmVyJyk7XHJcblxyXG4vLyBUaGUgYGludGVnZXJgIHR5cGUgaXMganVzdCBhIHdyYXBwZXIgZm9yIHRoZSBgbnVtYmVyYCB0eXBlLiBUaGUgYG51bWJlcmAgdHlwZVxyXG4vLyByZXR1cm5zIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGFuZCBgaW50ZWdlcmAgdHlwZSB0cnVuY2F0ZXMgdGhlIGZyYWN0aW9uXHJcbi8vIHBhcnQsIGxlYXZpbmcgdGhlIHJlc3VsdCBhcyBhbiBpbnRlZ2VyLlxyXG4vL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgdmFsdWUuaGFzUHJlY2lzaW9uID0gZmFsc2U7XHJcbiAgdmFyIGdlbmVyYXRlZCA9IG51bWJlcih2YWx1ZSk7XHJcbiAgLy8gd2hldGhlciB0aGUgZ2VuZXJhdGVkIG51bWJlciBpcyBwb3NpdGl2ZSBvciBuZWdhdGl2ZSwgbmVlZCB0byB1c2UgZWl0aGVyXHJcbiAgLy8gZmxvb3IgKHBvc2l0aXZlKSBvciBjZWlsIChuZWdhdGl2ZSkgZnVuY3Rpb24gdG8gZ2V0IHJpZCBvZiB0aGUgZnJhY3Rpb25cclxuICByZXR1cm4gZ2VuZXJhdGVkID4gMCA/IE1hdGguZmxvb3IoZ2VuZXJhdGVkKSA6IE1hdGguY2VpbChnZW5lcmF0ZWQpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiBudWxsO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTUlOX0lOVEVHRVIgPSAtMTAwMDAwMDAwLFxyXG4gICAgTUFYX0lOVEVHRVIgPSAxMDAwMDAwMDA7XHJcblxyXG52YXIgc3RyaW5nID0gcmVxdWlyZSgnLi9zdHJpbmcnKSxcclxuICAgIHJhbmRvbSA9IHJlcXVpcmUoJy4uL3V0aWwvcmFuZG9tJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgaWYgKHZhbHVlLmZha2VyIHx8IHZhbHVlLmNoYW5jZSkge1xyXG4gICAgcmV0dXJuIHN0cmluZyh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICB2YXIgbWluID0gdHlwZW9mIHZhbHVlLm1pbmltdW0gPT09ICd1bmRlZmluZWQnID8gTUlOX0lOVEVHRVIgOiB2YWx1ZS5taW5pbXVtLFxyXG4gICAgICBtYXggPSB0eXBlb2YgdmFsdWUubWF4aW11bSA9PT0gJ3VuZGVmaW5lZCcgPyBNQVhfSU5URUdFUiA6IHZhbHVlLm1heGltdW07XHJcblxyXG4gIGlmICh2YWx1ZS5leGNsdXNpdmVNaW5pbXVtICYmIHZhbHVlLm1pbmltdW0pIHtcclxuICAgIG1pbiArPSAxO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLmV4Y2x1c2l2ZU1heGltdW0gJiYgdmFsdWUubWF4aW11bSkge1xyXG4gICAgbWF4IC09IDE7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUubXVsdGlwbGVPZikge1xyXG4gICAgdmFyIGJhc2UgPSByYW5kb20oTWF0aC5mbG9vcihtaW4gLyB2YWx1ZS5tdWx0aXBsZU9mKSwgTWF0aC5mbG9vcihtYXggLyB2YWx1ZS5tdWx0aXBsZU9mKSkgKiB2YWx1ZS5tdWx0aXBsZU9mO1xyXG5cclxuICAgIHdoaWxlIChiYXNlIDwgbWluKSB7XHJcbiAgICAgIGJhc2UgKz0gdmFsdWUubXVsdGlwbGVPZjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYmFzZTtcclxuICB9XHJcblxyXG4gIGlmICh2YWx1ZS5oYXNQcmVjaXNpb24pIHtcclxuICAgIHJldHVybiByYW5kb20oZmFsc2UsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIHJldHVybiByYW5kb20oTWF0aC5yYW5kb20oKSA+IDAuNSwgbWluLCBtYXgpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgY29udGFpbmVyID0gcmVxdWlyZSgnLi4vdXRpbC9jb250YWluZXInKSxcclxuICAgIHJhbmRvbSA9IHJlcXVpcmUoJy4uL3V0aWwvcmFuZG9tJyksXHJcbiAgICB0cmF2ZXJzZSA9IHJlcXVpcmUoJy4uL3V0aWwvdHJhdmVyc2UnKSxcclxuICAgIGhhc1Byb3BzID0gcmVxdWlyZSgnLi4vdXRpbC9oYXMtcHJvcHMnKTtcclxuXHJcbnZhciBmYWtlciA9IGNvbnRhaW5lci5nZXQoJ2Zha2VyJyksXHJcbiAgICBSYW5kRXhwID0gY29udGFpbmVyLmdldCgncmFuZGV4cCcpLFxyXG4gICAgcmFuZGV4cCA9IFJhbmRFeHAucmFuZGV4cDtcclxuXHJcbnZhciBQYXJzZUVycm9yID0gcmVxdWlyZSgnLi4vdXRpbC9lcnJvcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWx1ZSwgcGF0aCwgcmVzb2x2ZSkge1xyXG4gIHZhciBwcm9wcyA9IHt9O1xyXG5cclxuICBpZiAoISh2YWx1ZS5wcm9wZXJ0aWVzIHx8IHZhbHVlLnBhdHRlcm5Qcm9wZXJ0aWVzIHx8IHZhbHVlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSkge1xyXG4gICAgaWYgKGhhc1Byb3BzKHZhbHVlLCAnbWluUHJvcGVydGllcycsICdtYXhQcm9wZXJ0aWVzJywgJ2RlcGVuZGVuY2llcycsICdyZXF1aXJlZCcpKSB7XHJcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKCdtaXNzaW5nIHByb3BlcnRpZXMgZm9yICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSksIHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wcztcclxuICB9XHJcblxyXG4gIHZhciByZXFQcm9wcyA9IHZhbHVlLnJlcXVpcmVkIHx8IFtdLFxyXG4gICAgICBhbGxQcm9wcyA9IHZhbHVlLnByb3BlcnRpZXMgPyBPYmplY3Qua2V5cyh2YWx1ZS5wcm9wZXJ0aWVzKSA6IFtdO1xyXG5cclxuICByZXFQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgaWYgKHZhbHVlLnByb3BlcnRpZXMgJiYgdmFsdWUucHJvcGVydGllc1trZXldKSB7XHJcbiAgICAgIHByb3BzW2tleV0gPSB2YWx1ZS5wcm9wZXJ0aWVzW2tleV07XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHZhciBvcHRQcm9wcyA9IGFsbFByb3BzLmZpbHRlcihmdW5jdGlvbihwcm9wKSB7XHJcbiAgICByZXR1cm4gcmVxUHJvcHMuaW5kZXhPZihwcm9wKSA9PT0gLTE7XHJcbiAgfSk7XHJcblxyXG4gIGlmICh2YWx1ZS5wYXR0ZXJuUHJvcGVydGllcykge1xyXG4gICAgb3B0UHJvcHMgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KG9wdFByb3BzLCBPYmplY3Qua2V5cyh2YWx1ZS5wYXR0ZXJuUHJvcGVydGllcykpO1xyXG4gIH1cclxuXHJcbiAgdmFyIGxlbmd0aCA9IHJhbmRvbSh2YWx1ZS5taW5Qcm9wZXJ0aWVzLCB2YWx1ZS5tYXhQcm9wZXJ0aWVzLCAwLCBvcHRQcm9wcy5sZW5ndGgpO1xyXG5cclxuICByYW5kb20uc2h1ZmZsZShvcHRQcm9wcykuc2xpY2UoMCwgbGVuZ3RoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgaWYgKHZhbHVlLnByb3BlcnRpZXMgJiYgdmFsdWUucHJvcGVydGllc1trZXldKSB7XHJcbiAgICAgIHByb3BzW2tleV0gPSB2YWx1ZS5wcm9wZXJ0aWVzW2tleV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcm9wc1tyYW5kZXhwKGtleSldID0gdmFsdWUucGF0dGVyblByb3BlcnRpZXNba2V5XTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdmFyIGN1cnJlbnQgPSBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoLFxyXG4gICAgICBzYW1wbGUgPSB0eXBlb2YgdmFsdWUuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09ICdvYmplY3QnID8gdmFsdWUuYWRkaXRpb25hbFByb3BlcnRpZXMgOiB7fTtcclxuXHJcbiAgaWYgKGN1cnJlbnQgPCBsZW5ndGgpIHtcclxuICAgIGZha2VyLmxvcmVtLndvcmRzKGxlbmd0aCAtIGN1cnJlbnQpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgIHByb3BzW2tleSArIHJhbmRleHAoJ1xcXFx3ezEsMTB9JyldID0gc2FtcGxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJhdmVyc2UocHJvcHMsIHBhdGguY29uY2F0KFsncHJvcGVydGllcyddKSwgcmVzb2x2ZSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuLi91dGlsL2NvbnRhaW5lcicpO1xyXG5cclxudmFyIGZha2VyID0gY29udGFpbmVyLmdldCgnZmFrZXInKSxcclxuICAgIGNoYW5jZSA9IGNvbnRhaW5lci5nZXQoJ2NoYW5jZScpLFxyXG4gICAgUmFuZEV4cCA9IGNvbnRhaW5lci5nZXQoJ3JhbmRleHAnKSxcclxuICAgIHJhbmRleHAgPSBSYW5kRXhwLnJhbmRleHA7XHJcblxyXG52YXIgcmFuZG9tID0gcmVxdWlyZSgnLi4vdXRpbC9yYW5kb20nKSxcclxuICAgIGZvcm1hdHMgPSByZXF1aXJlKCcuLi91dGlsL2Zvcm1hdHMnKTtcclxuXHJcbnZhciByZWdleHBzID0ge1xyXG4gIGVtYWlsOiAnW2EtekEtWlxcXFxkXVthLXpBLVpcXFxcZC1dezEsMTN9W2EtekEtWlxcXFxkXUB7aG9zdG5hbWV9JyxcclxuICBob3N0bmFtZTogJ1thLXpBLVpdezEsMzN9XFxcXC5bYS16XXsyLDR9JyxcclxuICBpcHY2OiAnW2FiY2RlZlxcXFxkXXs0fSg6W2FiY2RlZlxcXFxkXXs0fSl7N30nLFxyXG4gIHVyaTogJ1thLXpBLVpdW2EtekEtWjAtOSstLl0qJ1xyXG59O1xyXG5cclxuZnVuY3Rpb24gZ2V0KG9iaiwga2V5KSB7XHJcbiAgdmFyIHBhcnRzID0ga2V5LnNwbGl0KCcuJyk7XHJcblxyXG4gIHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcclxuICAgIHZhciBwcm9wID0gcGFydHMuc2hpZnQoKTtcclxuXHJcbiAgICBpZiAoIW9ialtwcm9wXSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBvYmogPSBvYmpbcHJvcF07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZSh2YWx1ZSkge1xyXG4gIGlmICh2YWx1ZS51c2UpIHtcclxuICAgIHZhciBhcmdzID0gW10sXHJcbiAgICAgICAgcGF0aCA9IHZhbHVlLmtleTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHBhdGggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHBhdGggPSBPYmplY3Qua2V5cyhwYXRoKVswXTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmtleVtwYXRoXSkpIHtcclxuICAgICAgICBhcmdzID0gdmFsdWUua2V5W3BhdGhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFyZ3MucHVzaCh2YWx1ZS5rZXlbcGF0aF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGdlbiA9IGdldCh2YWx1ZS5nZW4sIHBhdGgpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgZ2VuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biAnICsgdmFsdWUudXNlICsgJy1nZW5lcmF0b3IgZm9yICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZS5rZXkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ2VuLmFwcGx5KHZhbHVlLmdlbiwgYXJncyk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2ggKHZhbHVlLmZvcm1hdCkge1xyXG4gICAgY2FzZSAnZGF0ZS10aW1lJzpcclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHJhbmRvbSgwLCAxMDAwMDAwMDAwMDAwMDApKS50b0lTT1N0cmluZygpO1xyXG5cclxuICAgIGNhc2UgJ2VtYWlsJzpcclxuICAgIGNhc2UgJ2hvc3RuYW1lJzpcclxuICAgIGNhc2UgJ2lwdjYnOlxyXG4gICAgY2FzZSAndXJpJzpcclxuICAgICAgcmV0dXJuIHJhbmRleHAocmVnZXhwc1t2YWx1ZS5mb3JtYXRdKS5yZXBsYWNlKC9cXHsoXFx3KylcXH0vLCBmdW5jdGlvbihtYXRjaGVzLCBrZXkpIHtcclxuICAgICAgICByZXR1cm4gcmFuZGV4cChyZWdleHBzW2tleV0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjYXNlICdpcHY0JzpcclxuICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXS5tYXAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHJhbmRvbSgwLCAyNTUpO1xyXG4gICAgICB9KS5qb2luKCcuJyk7XHJcblxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgdmFyIGNhbGxiYWNrID0gZm9ybWF0cyh2YWx1ZS5mb3JtYXQpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBnZW5lcmF0b3IgZm9yICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZS5mb3JtYXQpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGdlbmVyYXRvcnMgPSB7XHJcbiAgICAgICAgZmFrZXI6IGZha2VyLFxyXG4gICAgICAgIGNoYW5jZTogY2hhbmNlLFxyXG4gICAgICAgIHJhbmRleHA6IHJhbmRleHBcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiBjYWxsYmFjayhnZW5lcmF0b3JzLCB2YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgaWYgKHZhbHVlLmZha2VyIHx8IHZhbHVlLmNoYW5jZSkge1xyXG4gICAgcmV0dXJuIGdlbmVyYXRlKHtcclxuICAgICAgdXNlOiB2YWx1ZS5mYWtlciA/ICdmYWtlcicgOiAnY2hhbmNlJyxcclxuICAgICAgZ2VuOiB2YWx1ZS5mYWtlciA/IGZha2VyIDogY2hhbmNlLFxyXG4gICAgICBrZXk6IHZhbHVlLmZha2VyIHx8IHZhbHVlLmNoYW5jZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUuZm9ybWF0KSB7XHJcbiAgICByZXR1cm4gZ2VuZXJhdGUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLnBhdHRlcm4pIHtcclxuICAgIHJldHVybiByYW5kZXhwKHZhbHVlLnBhdHRlcm4pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLm1pbkxlbmd0aCB8fCB2YWx1ZS5tYXhMZW5ndGgpIHtcclxuICAgIHZhciBtaW4gPSBNYXRoLm1heCgwLCB2YWx1ZS5taW5MZW5ndGggfHwgMCksXHJcbiAgICAgICAgbWF4ID0gcmFuZG9tKG1pbiwgdmFsdWUubWF4TGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gcmFuZGV4cCgnLnsnICsgbWluICsgJywnICsgbWF4ICsgJ30nKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmYWtlci5sb3JlbS53b3JkcyhyYW5kb20oMSwgNSkpLmpvaW4oJyAnKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy8gc3RhdGljIHJlcXVpcmVzIC0gaGFuZGxlIGJvdGggaW5pdGlhbCBkZXBlbmRlbmN5IGxvYWQgKGRlcHMgd2lsbCBiZSBhdmFpbGFibGVcclxuLy8gYW1vbmcgb3RoZXIgbW9kdWxlcykgYXMgd2VsbCBhcyB0aGV5IHdpbGwgYmUgaW5jbHVkZWQgYnkgYnJvd3NlcmlmeSBBU1RcclxudmFyIENoYW5jZSA9IHJlcXVpcmUoJ2NoYW5jZScpO1xyXG5cclxudmFyIGNvbnRhaW5lciA9IHtcclxuICBmYWtlcjogcmVxdWlyZSgnZmFrZXInKSxcclxuICBjaGFuY2U6IG5ldyBDaGFuY2UoKSxcclxuICByYW5kZXhwOiByZXF1aXJlKCdyYW5kZXhwJylcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIHNldDogZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcclxuICAgIGlmICh0eXBlb2YgY29udGFpbmVyW25hbWVdID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1wiJyArIG5hbWUgKyAnXCIgZGVwZW5kZW5jeSBkb2VzblxcJ3QgZXhpc3QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGFpbmVyW25hbWVdID0gY2FsbGJhY2soY29udGFpbmVyW25hbWVdKTtcclxuICB9LFxyXG4gIGdldDogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIGNvbnRhaW5lcltuYW1lXTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmZ1bmN0aW9uIFBhcnNlRXJyb3IobWVzc2FnZSwgcGF0aCkge1xyXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgdGhpcy5wYXRoID0gcGF0aDtcclxuICB0aGlzLm5hbWUgPSAnUGFyc2VFcnJvcic7XHJcbn1cclxuXHJcblBhcnNlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZUVycm9yO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgcmVnaXN0cnkgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcclxuICBpZiAoY2FsbGJhY2spIHtcclxuICAgIHJlZ2lzdHJ5W25hbWVdID0gY2FsbGJhY2s7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcclxuICAgIGZvciAodmFyIG1ldGhvZCBpbiBuYW1lKSB7XHJcbiAgICAgIHJlZ2lzdHJ5W21ldGhvZF0gPSBuYW1lW21ldGhvZF07XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChuYW1lKSB7XHJcbiAgICByZXR1cm4gcmVnaXN0cnlbbmFtZV07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVnaXN0cnk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkuZmlsdGVyKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBvYmpba2V5XSAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgfSkubGVuZ3RoID4gMDtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGluZmVycmVkUHJvcGVydGllcyA9IHtcclxuICBhcnJheTogW1xyXG4gICAgJ2FkZGl0aW9uYWxJdGVtcycsXHJcbiAgICAnaXRlbXMnLFxyXG4gICAgJ21heEl0ZW1zJyxcclxuICAgICdtaW5JdGVtcycsXHJcbiAgICAndW5pcXVlSXRlbXMnXHJcbiAgXSxcclxuICBpbnRlZ2VyOiBbXHJcbiAgICAnZXhjbHVzaXZlTWF4aW11bScsXHJcbiAgICAnZXhjbHVzaXZlTWluaW11bScsXHJcbiAgICAnbWF4aW11bScsXHJcbiAgICAnbWluaW11bScsXHJcbiAgICAnbXVsdGlwbGVPZidcclxuICBdLFxyXG4gIG9iamVjdDogW1xyXG4gICAgJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyxcclxuICAgICdkZXBlbmRlbmNpZXMnLFxyXG4gICAgJ21heFByb3BlcnRpZXMnLFxyXG4gICAgJ21pblByb3BlcnRpZXMnLFxyXG4gICAgJ3BhdHRlcm5Qcm9wZXJ0aWVzJyxcclxuICAgICdwcm9wZXJ0aWVzJyxcclxuICAgICdyZXF1aXJlZCdcclxuICBdLFxyXG4gIHN0cmluZzogW1xyXG4gICAgJ21heExlbmd0aCcsXHJcbiAgICAnbWVubGVuZ3RoJyxcclxuICAgICdwYXR0ZXJuJ1xyXG4gIF1cclxufTtcclxuXHJcbnZhciBzdWJzY2hlbWFQcm9wZXJ0aWVzID0gW1xyXG4gICdhZGRpdGlvbmFsSXRlbXMnLCAnaXRlbXMnLCAnYWRkaXRpb25hbFByb3BlcnRpZXMnLCAnZGVwZW5kZW5jaWVzJywgJ3BhdHRlcm5Qcm9wZXJ0aWVzJywgJ3Byb3BlcnRpZXMnXHJcbl07XHJcblxyXG5pbmZlcnJlZFByb3BlcnRpZXMubnVtYmVyID0gaW5mZXJyZWRQcm9wZXJ0aWVzLmludGVnZXI7XHJcblxyXG5mdW5jdGlvbiBtYXlIYXZlVHlwZShvYmosIHBhdGgsIHByb3BzKSB7XHJcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKGZ1bmN0aW9uKHByb3ApIHtcclxuICAgIC8vIERvIG5vdCBhdHRlbXB0IHRvIGluZmVyIHByb3BlcnRpZXMgbmFtZWQgYXMgc3Vic2NoZW1hIGNvbnRhaW5lcnMuICBUaGUgcmVhc29uIGZvciB0aGlzIGlzXHJcbiAgICAvLyB0aGF0IGFueSBwcm9wZXJ0eSBuYW1lIHdpdGhpbiB0aG9zZSBjb250YWluZXJzIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlIHByb3BlcnRpZXMgdXNlZCBmb3IgaW5mZXJyaW5nIG1pc3NpbmcgdHlwZVxyXG4gICAgLy8gdmFsdWVzIGNhdXNlcyB0aGUgY29udGFpbmVyIGl0c2VsZiB0byBnZXQgcHJvY2Vzc2VkIHdoaWNoIGxlYWRzIHRvIGludmFsaWQgb3V0cHV0LiAgKElzc3VlIDYyKVxyXG4gICAgaWYgKHByb3BzLmluZGV4T2YocHJvcCkgPiAtMSAmJiBzdWJzY2hlbWFQcm9wZXJ0aWVzLmluZGV4T2YocGF0aFtwYXRoLmxlbmd0aCAtIDFdKSA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfSkubGVuZ3RoID4gMDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcclxuICBmb3IgKHZhciB0eXBlIGluIGluZmVycmVkUHJvcGVydGllcykge1xyXG4gICAgaWYgKG1heUhhdmVUeXBlKG9iaiwgcGF0aCwgaW5mZXJyZWRQcm9wZXJ0aWVzW3R5cGVdKSkge1xyXG4gICAgICByZXR1cm4gdHlwZTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBtZXJnZTtcclxuXHJcbmZ1bmN0aW9uIGNsb25lKGFycikge1xyXG4gIHZhciBvdXQgPSBbXTtcclxuXHJcbiAgYXJyLmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcclxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xyXG4gICAgICBvdXRbaW5kZXhdID0gQXJyYXkuaXNBcnJheShpdGVtKSA/IGNsb25lKGl0ZW0pIDogbWVyZ2Uoe30sIGl0ZW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0W2luZGV4XSA9IGl0ZW07XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbm1lcmdlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgZm9yICh2YXIga2V5IGluIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYltrZXldICE9PSAnb2JqZWN0JyB8fCBiW2tleV0gPT09IG51bGwpIHtcclxuICAgICAgYVtrZXldID0gYltrZXldO1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJba2V5XSkpIHtcclxuICAgICAgYVtrZXldID0gKGFba2V5XSB8fCBbXSkuY29uY2F0KGNsb25lKGJba2V5XSkpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVtrZXldICE9PSAnb2JqZWN0JyB8fCBhW2tleV0gPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShhW2tleV0pKSB7XHJcbiAgICAgIGFba2V5XSA9IG1lcmdlKHt9LCBiW2tleV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYVtrZXldID0gbWVyZ2UoYVtrZXldLCBiW2tleV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGE7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIGFycmF5OiByZXF1aXJlKCcuLi90eXBlcy9hcnJheScpLFxyXG4gIGJvb2xlYW46IHJlcXVpcmUoJy4uL3R5cGVzL2Jvb2xlYW4nKSxcclxuICBpbnRlZ2VyOiByZXF1aXJlKCcuLi90eXBlcy9pbnRlZ2VyJyksXHJcbiAgbnVtYmVyOiByZXF1aXJlKCcuLi90eXBlcy9udW1iZXInKSxcclxuICBudWxsOiByZXF1aXJlKCcuLi90eXBlcy9udWxsJyksXHJcbiAgb2JqZWN0OiByZXF1aXJlKCcuLi90eXBlcy9vYmplY3QnKSxcclxuICBzdHJpbmc6IHJlcXVpcmUoJy4uL3R5cGVzL3N0cmluZycpXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuL2NvbnRhaW5lcicpO1xyXG5cclxudmFyIGZha2VyID0gY29udGFpbmVyLmdldCgnZmFrZXInKTtcclxuXHJcbnZhciByYW5kb20gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1pbiwgbWF4LCBkZWZNaW4sIGRlZk1heCkge1xyXG4gIHZhciBpc0ludGVnZXIgPSB0cnVlO1xyXG5cclxuICBpZiAodHlwZW9mIG1pbiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAvLyBub24taW50ZWdlciB2YWx1ZXNcclxuICAgIGlzSW50ZWdlciA9IG1pbjtcclxuICAgIG1pbiA9IGFyZ3VtZW50c1sxXTtcclxuICAgIG1heCA9IGFyZ3VtZW50c1syXTtcclxuICAgIGRlZk1pbiA9IGFyZ3VtZW50c1szXTtcclxuICAgIGRlZk1heCA9IGFyZ3VtZW50c1s0XTtcclxuICB9XHJcblxyXG4gIGRlZk1pbiA9IHR5cGVvZiBkZWZNaW4gPT09ICd1bmRlZmluZWQnID8gcmFuZG9tLk1JTl9OVU1CRVIgOiBkZWZNaW47XHJcbiAgZGVmTWF4ID0gdHlwZW9mIGRlZk1heCA9PT0gJ3VuZGVmaW5lZCcgPyByYW5kb20uTUFYX05VTUJFUiA6IGRlZk1heDtcclxuXHJcbiAgbWluID0gdHlwZW9mIG1pbiA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZNaW4gOiBtaW47XHJcbiAgbWF4ID0gdHlwZW9mIG1heCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZNYXggOiBtYXg7XHJcblxyXG4gIGlmIChtYXggPCBtaW4pIHtcclxuICAgIG1heCArPSBtaW47XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFrZXIucmFuZG9tLm51bWJlcih7XHJcbiAgICBtaW46IG1pbixcclxuICAgIG1heDogbWF4LFxyXG4gICAgcHJlY2lzaW9uOiBpc0ludGVnZXIgPyAxIDogTWF0aC5yYW5kb20oKVxyXG4gIH0pO1xyXG59O1xyXG5cclxucmFuZG9tLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtcclxuICB2YXIgY29weSA9IG9iai5zbGljZSgpLFxyXG4gICAgICBsZW5ndGggPSBvYmoubGVuZ3RoO1xyXG5cclxuICBmb3IgKDsgbGVuZ3RoID4gMDspIHtcclxuICAgIHZhciBrZXkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsZW5ndGgpLFxyXG4gICAgICAgIHRtcCA9IGNvcHlbLS1sZW5ndGhdO1xyXG5cclxuICAgIGNvcHlbbGVuZ3RoXSA9IGNvcHlba2V5XTtcclxuICAgIGNvcHlba2V5XSA9IHRtcDtcclxuICB9XHJcblxyXG4gIHJldHVybiBjb3B5O1xyXG59O1xyXG5cclxucmFuZG9tLnBpY2sgPSBmdW5jdGlvbihvYmopIHtcclxuICByZXR1cm4gb2JqW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG9iai5sZW5ndGgpXTtcclxufTtcclxuXHJcbnJhbmRvbS5NSU5fTlVNQkVSID0gLTEwMDtcclxucmFuZG9tLk1BWF9OVU1CRVIgPSAxMDA7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciByYW5kb20gPSByZXF1aXJlKCcuL3JhbmRvbScpO1xyXG5cclxudmFyIFBhcnNlRXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XHJcblxyXG52YXIgaW5mZXJyZWRUeXBlID0gcmVxdWlyZSgnLi9pbmZlcnJlZCcpO1xyXG5cclxudmFyIHByaW1pdGl2ZXMgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gdHJhdmVyc2Uob2JqLCBwYXRoLCByZXNvbHZlKSB7XHJcbiAgcmVzb2x2ZShvYmopO1xyXG5cclxuICB2YXIgY29weSA9IHt9O1xyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICBjb3B5ID0gW107XHJcbiAgfVxyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheShvYmouZW51bSkpIHtcclxuICAgIHJldHVybiByYW5kb20ucGljayhvYmouZW51bSk7XHJcbiAgfVxyXG5cclxuICB2YXIgdHlwZSA9IG9iai50eXBlO1xyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xyXG4gICAgdHlwZSA9IHJhbmRvbS5waWNrKHR5cGUpO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAvLyBBdHRlbXB0IHRvIGluZmVyIHRoZSB0eXBlXHJcbiAgICB0eXBlID0gaW5mZXJyZWRUeXBlKG9iaiwgcGF0aCkgfHwgdHlwZTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIGlmICghcHJpbWl0aXZlc1t0eXBlXSkge1xyXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcigndW5rbm93biBwcmltaXRpdmUgJyArIEpTT04uc3RyaW5naWZ5KHR5cGUpLCBwYXRoLmNvbmNhdChbJ3R5cGUnXSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBwcmltaXRpdmVzW3R5cGVdKG9iaiwgcGF0aCwgcmVzb2x2ZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgZS5wYXRoID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGUubWVzc2FnZSwgcGF0aCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmpbcHJvcF0gPT09ICdvYmplY3QnICYmIHByb3AgIT09ICdkZWZpbml0aW9ucycpIHtcclxuICAgICAgY29weVtwcm9wXSA9IHRyYXZlcnNlKG9ialtwcm9wXSwgcGF0aC5jb25jYXQoW3Byb3BdKSwgcmVzb2x2ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb3B5W3Byb3BdID0gb2JqW3Byb3BdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvcHk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgcHJpbWl0aXZlcyA9IHByaW1pdGl2ZXMgfHwgcmVxdWlyZSgnLi9wcmltaXRpdmVzJyk7XHJcblxyXG4gIHJldHVybiB0cmF2ZXJzZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG4iLCIvKipcbiAqIGxvZGFzaCAzLjcuMiAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RyaW5nIHBhdGhzXG4gKiBhbmQgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aEtleV0gVGhlIGtleSByZXByZXNlbnRhdGlvbiBvZiBwYXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCwgcGF0aEtleSkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhdGhLZXkgIT09IHVuZGVmaW5lZCAmJiBwYXRoS2V5IGluIHRvT2JqZWN0KG9iamVjdCkpIHtcbiAgICBwYXRoID0gW3BhdGhLZXldO1xuICB9XG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbcGF0aFtpbmRleCsrXV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gb2JqZWN0IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDogT2JqZWN0KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGUgW2xhbmd1YWdlIHR5cGVdKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDgpIG9mIGBPYmplY3RgLlxuICogKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdCgxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIC8vIEF2b2lkIGEgVjggSklUIGJ1ZyBpbiBDaHJvbWUgMTktMjAuXG4gIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwiLyoqXG4gKiBsb2Rhc2ggMy44LjEgKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2Rlcm4gbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDE1IFRoZSBEb2pvIEZvdW5kYXRpb24gPGh0dHA6Ly9kb2pvZm91bmRhdGlvbi5vcmcvPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIEF2YWlsYWJsZSB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKi9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnbG9kYXNoLmlzYXJyYXknKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxuXFxcXF18XFxcXC4pKj8pXFwyKVxcXS9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGlmIGl0J3Mgbm90IG9uZS4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkXG4gKiBmb3IgYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiAodmFsdWUgKyAnJyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBwcm9wZXJ0eSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9QYXRoKHZhbHVlKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VUb1N0cmluZyh2YWx1ZSkucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1BhdGg7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjcuMCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xudmFyIGJhc2VHZXQgPSByZXF1aXJlKCdsb2Rhc2guX2Jhc2VnZXQnKSxcbiAgICB0b1BhdGggPSByZXF1aXJlKCdsb2Rhc2guX3RvcGF0aCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIGBwYXRoYCBvbiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgdXNlZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBpZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgYHVuZGVmaW5lZGAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCB0b1BhdGgocGF0aCksIHBhdGggKyAnJyk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjAuNCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSA+IDUpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqIFVzZWQgZm9yIG5hdGl2ZSBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmpUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZm5Ub1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZywgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyogTmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0FycmF5ID0gZ2V0TmF0aXZlKEFycmF5LCAnaXNBcnJheScpO1xuXG4vKipcbiAqIFVzZWQgYXMgdGhlIFttYXhpbXVtIGxlbmd0aF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbnVtYmVyLm1heF9zYWZlX2ludGVnZXIpXG4gKiBvZiBhbiBhcnJheS1saWtlIHZhbHVlLlxuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICByZXR1cm4gaXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGFycmF5VGFnO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmkgd2hpY2ggcmV0dXJuICdmdW5jdGlvbicgZm9yIHJlZ2V4ZXNcbiAgLy8gYW5kIFNhZmFyaSA4IGVxdWl2YWxlbnRzIHdoaWNoIHJldHVybiAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgY29uc3RydWN0b3JzLlxuICByZXR1cm4gaXNPYmplY3QodmFsdWUpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGZ1bmNUYWc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlIFtsYW5ndWFnZSB0eXBlXShodHRwczovL2VzNS5naXRodWIuaW8vI3g4KSBvZiBgT2JqZWN0YC5cbiAqIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAvLyBBdm9pZCBhIFY4IEpJVCBidWcgaW4gQ2hyb21lIDE5LTIwLlxuICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIyOTEgZm9yIG1vcmUgZGV0YWlscy5cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOYXRpdmUoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYXRpdmUoXyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICByZXR1cm4gcmVJc05hdGl2ZS50ZXN0KGZuVG9TdHJpbmcuY2FsbCh2YWx1ZSkpO1xuICB9XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHJlSXNIb3N0Q3Rvci50ZXN0KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucyl7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoJ3N0cmluZycgPT0gdHlwZW9mIHZhbCkgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIHJldHVybiBvcHRpb25zLmxvbmdcbiAgICA/IGxvbmcodmFsKVxuICAgIDogc2hvcnQodmFsKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSAnJyArIHN0cjtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDAwMCkgcmV0dXJuO1xuICB2YXIgbWF0Y2ggPSAvXigoPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKHN0cik7XG4gIGlmICghbWF0Y2gpIHJldHVybjtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2hvcnQobXMpIHtcbiAgaWYgKG1zID49IGQpIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIGlmIChtcyA+PSBoKSByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICBpZiAobXMgPj0gbSkgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgaWYgKG1zID49IHMpIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb25nKG1zKSB7XG4gIHJldHVybiBwbHVyYWwobXMsIGQsICdkYXknKVxuICAgIHx8IHBsdXJhbChtcywgaCwgJ2hvdXInKVxuICAgIHx8IHBsdXJhbChtcywgbSwgJ21pbnV0ZScpXG4gICAgfHwgcGx1cmFsKG1zLCBzLCAnc2Vjb25kJylcbiAgICB8fCBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbiwgbmFtZSkge1xuICBpZiAobXMgPCBuKSByZXR1cm47XG4gIGlmIChtcyA8IG4gKiAxLjUpIHJldHVybiBNYXRoLmZsb29yKG1zIC8gbikgKyAnICcgKyBuYW1lO1xuICByZXR1cm4gTWF0aC5jZWlsKG1zIC8gbikgKyAnICcgKyBuYW1lICsgJ3MnO1xufVxuIiwiLyohIE5hdGl2ZSBQcm9taXNlIE9ubHlcbiAgICB2MC44LjEgKGMpIEt5bGUgU2ltcHNvblxuICAgIE1JVCBMaWNlbnNlOiBodHRwOi8vZ2V0aWZ5Lm1pdC1saWNlbnNlLm9yZ1xuKi9cblxuKGZ1bmN0aW9uIFVNRChuYW1lLGNvbnRleHQsZGVmaW5pdGlvbil7XG5cdC8vIHNwZWNpYWwgZm9ybSBvZiBVTUQgZm9yIHBvbHlmaWxsaW5nIGFjcm9zcyBldmlyb25tZW50c1xuXHRjb250ZXh0W25hbWVdID0gY29udGV4dFtuYW1lXSB8fCBkZWZpbml0aW9uKCk7XG5cdGlmICh0eXBlb2YgbW9kdWxlICE9IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMpIHsgbW9kdWxlLmV4cG9ydHMgPSBjb250ZXh0W25hbWVdOyB9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHsgZGVmaW5lKGZ1bmN0aW9uICRBTUQkKCl7IHJldHVybiBjb250ZXh0W25hbWVdOyB9KTsgfVxufSkoXCJQcm9taXNlXCIsdHlwZW9mIGdsb2JhbCAhPSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdGhpcyxmdW5jdGlvbiBERUYoKXtcblx0Lypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIGJ1aWx0SW5Qcm9wLCBjeWNsZSwgc2NoZWR1bGluZ19xdWV1ZSxcblx0XHRUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsXG5cdFx0dGltZXIgPSAodHlwZW9mIHNldEltbWVkaWF0ZSAhPSBcInVuZGVmaW5lZFwiKSA/XG5cdFx0XHRmdW5jdGlvbiB0aW1lcihmbikgeyByZXR1cm4gc2V0SW1tZWRpYXRlKGZuKTsgfSA6XG5cdFx0XHRzZXRUaW1lb3V0XG5cdDtcblxuXHQvLyBkYW1taXQsIElFOC5cblx0dHJ5IHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJ4XCIse30pO1xuXHRcdGJ1aWx0SW5Qcm9wID0gZnVuY3Rpb24gYnVpbHRJblByb3Aob2JqLG5hbWUsdmFsLGNvbmZpZykge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosbmFtZSx7XG5cdFx0XHRcdHZhbHVlOiB2YWwsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IGNvbmZpZyAhPT0gZmFsc2Vcblx0XHRcdH0pO1xuXHRcdH07XG5cdH1cblx0Y2F0Y2ggKGVycikge1xuXHRcdGJ1aWx0SW5Qcm9wID0gZnVuY3Rpb24gYnVpbHRJblByb3Aob2JqLG5hbWUsdmFsKSB7XG5cdFx0XHRvYmpbbmFtZV0gPSB2YWw7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH07XG5cdH1cblxuXHQvLyBOb3RlOiB1c2luZyBhIHF1ZXVlIGluc3RlYWQgb2YgYXJyYXkgZm9yIGVmZmljaWVuY3lcblx0c2NoZWR1bGluZ19xdWV1ZSA9IChmdW5jdGlvbiBRdWV1ZSgpIHtcblx0XHR2YXIgZmlyc3QsIGxhc3QsIGl0ZW07XG5cblx0XHRmdW5jdGlvbiBJdGVtKGZuLHNlbGYpIHtcblx0XHRcdHRoaXMuZm4gPSBmbjtcblx0XHRcdHRoaXMuc2VsZiA9IHNlbGY7XG5cdFx0XHR0aGlzLm5leHQgPSB2b2lkIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFkZDogZnVuY3Rpb24gYWRkKGZuLHNlbGYpIHtcblx0XHRcdFx0aXRlbSA9IG5ldyBJdGVtKGZuLHNlbGYpO1xuXHRcdFx0XHRpZiAobGFzdCkge1xuXHRcdFx0XHRcdGxhc3QubmV4dCA9IGl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Zmlyc3QgPSBpdGVtO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxhc3QgPSBpdGVtO1xuXHRcdFx0XHRpdGVtID0gdm9pZCAwO1xuXHRcdFx0fSxcblx0XHRcdGRyYWluOiBmdW5jdGlvbiBkcmFpbigpIHtcblx0XHRcdFx0dmFyIGYgPSBmaXJzdDtcblx0XHRcdFx0Zmlyc3QgPSBsYXN0ID0gY3ljbGUgPSB2b2lkIDA7XG5cblx0XHRcdFx0d2hpbGUgKGYpIHtcblx0XHRcdFx0XHRmLmZuLmNhbGwoZi5zZWxmKTtcblx0XHRcdFx0XHRmID0gZi5uZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSkoKTtcblxuXHRmdW5jdGlvbiBzY2hlZHVsZShmbixzZWxmKSB7XG5cdFx0c2NoZWR1bGluZ19xdWV1ZS5hZGQoZm4sc2VsZik7XG5cdFx0aWYgKCFjeWNsZSkge1xuXHRcdFx0Y3ljbGUgPSB0aW1lcihzY2hlZHVsaW5nX3F1ZXVlLmRyYWluKTtcblx0XHR9XG5cdH1cblxuXHQvLyBwcm9taXNlIGR1Y2sgdHlwaW5nXG5cdGZ1bmN0aW9uIGlzVGhlbmFibGUobykge1xuXHRcdHZhciBfdGhlbiwgb190eXBlID0gdHlwZW9mIG87XG5cblx0XHRpZiAobyAhPSBudWxsICYmXG5cdFx0XHQoXG5cdFx0XHRcdG9fdHlwZSA9PSBcIm9iamVjdFwiIHx8IG9fdHlwZSA9PSBcImZ1bmN0aW9uXCJcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdF90aGVuID0gby50aGVuO1xuXHRcdH1cblx0XHRyZXR1cm4gdHlwZW9mIF90aGVuID09IFwiZnVuY3Rpb25cIiA/IF90aGVuIDogZmFsc2U7XG5cdH1cblxuXHRmdW5jdGlvbiBub3RpZnkoKSB7XG5cdFx0Zm9yICh2YXIgaT0wOyBpPHRoaXMuY2hhaW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdG5vdGlmeUlzb2xhdGVkKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHQodGhpcy5zdGF0ZSA9PT0gMSkgPyB0aGlzLmNoYWluW2ldLnN1Y2Nlc3MgOiB0aGlzLmNoYWluW2ldLmZhaWx1cmUsXG5cdFx0XHRcdHRoaXMuY2hhaW5baV1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHRoaXMuY2hhaW4ubGVuZ3RoID0gMDtcblx0fVxuXG5cdC8vIE5PVEU6IFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBpc29sYXRlXG5cdC8vIHRoZSBgdHJ5Li5jYXRjaGAgc28gdGhhdCBvdGhlciBjb2RlIGNhbiBiZVxuXHQvLyBvcHRpbWl6ZWQgYmV0dGVyXG5cdGZ1bmN0aW9uIG5vdGlmeUlzb2xhdGVkKHNlbGYsY2IsY2hhaW4pIHtcblx0XHR2YXIgcmV0LCBfdGhlbjtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGNiID09PSBmYWxzZSkge1xuXHRcdFx0XHRjaGFpbi5yZWplY3Qoc2VsZi5tc2cpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGlmIChjYiA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHJldCA9IHNlbGYubXNnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHJldCA9IGNiLmNhbGwodm9pZCAwLHNlbGYubXNnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChyZXQgPT09IGNoYWluLnByb21pc2UpIHtcblx0XHRcdFx0XHRjaGFpbi5yZWplY3QoVHlwZUVycm9yKFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoX3RoZW4gPSBpc1RoZW5hYmxlKHJldCkpIHtcblx0XHRcdFx0XHRfdGhlbi5jYWxsKHJldCxjaGFpbi5yZXNvbHZlLGNoYWluLnJlamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Y2hhaW4ucmVzb2x2ZShyZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNhdGNoIChlcnIpIHtcblx0XHRcdGNoYWluLnJlamVjdChlcnIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlc29sdmUobXNnKSB7XG5cdFx0dmFyIF90aGVuLCBzZWxmID0gdGhpcztcblxuXHRcdC8vIGFscmVhZHkgdHJpZ2dlcmVkP1xuXHRcdGlmIChzZWxmLnRyaWdnZXJlZCkgeyByZXR1cm47IH1cblxuXHRcdHNlbGYudHJpZ2dlcmVkID0gdHJ1ZTtcblxuXHRcdC8vIHVud3JhcFxuXHRcdGlmIChzZWxmLmRlZikge1xuXHRcdFx0c2VsZiA9IHNlbGYuZGVmO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRpZiAoX3RoZW4gPSBpc1RoZW5hYmxlKG1zZykpIHtcblx0XHRcdFx0c2NoZWR1bGUoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR2YXIgZGVmX3dyYXBwZXIgPSBuZXcgTWFrZURlZldyYXBwZXIoc2VsZik7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdF90aGVuLmNhbGwobXNnLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAkcmVzb2x2ZSQoKXsgcmVzb2x2ZS5hcHBseShkZWZfd3JhcHBlcixhcmd1bWVudHMpOyB9LFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAkcmVqZWN0JCgpeyByZWplY3QuYXBwbHkoZGVmX3dyYXBwZXIsYXJndW1lbnRzKTsgfVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0cmVqZWN0LmNhbGwoZGVmX3dyYXBwZXIsZXJyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0c2VsZi5tc2cgPSBtc2c7XG5cdFx0XHRcdHNlbGYuc3RhdGUgPSAxO1xuXHRcdFx0XHRpZiAoc2VsZi5jaGFpbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0c2NoZWR1bGUobm90aWZ5LHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNhdGNoIChlcnIpIHtcblx0XHRcdHJlamVjdC5jYWxsKG5ldyBNYWtlRGVmV3JhcHBlcihzZWxmKSxlcnIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlamVjdChtc2cpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHQvLyBhbHJlYWR5IHRyaWdnZXJlZD9cblx0XHRpZiAoc2VsZi50cmlnZ2VyZWQpIHsgcmV0dXJuOyB9XG5cblx0XHRzZWxmLnRyaWdnZXJlZCA9IHRydWU7XG5cblx0XHQvLyB1bndyYXBcblx0XHRpZiAoc2VsZi5kZWYpIHtcblx0XHRcdHNlbGYgPSBzZWxmLmRlZjtcblx0XHR9XG5cblx0XHRzZWxmLm1zZyA9IG1zZztcblx0XHRzZWxmLnN0YXRlID0gMjtcblx0XHRpZiAoc2VsZi5jaGFpbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRzY2hlZHVsZShub3RpZnksc2VsZik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaXRlcmF0ZVByb21pc2VzKENvbnN0cnVjdG9yLGFycixyZXNvbHZlcixyZWplY3Rlcikge1xuXHRcdGZvciAodmFyIGlkeD0wOyBpZHg8YXJyLmxlbmd0aDsgaWR4KyspIHtcblx0XHRcdChmdW5jdGlvbiBJSUZFKGlkeCl7XG5cdFx0XHRcdENvbnN0cnVjdG9yLnJlc29sdmUoYXJyW2lkeF0pXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdGZ1bmN0aW9uICRyZXNvbHZlciQobXNnKXtcblx0XHRcdFx0XHRcdHJlc29sdmVyKGlkeCxtc2cpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVqZWN0ZXJcblx0XHRcdFx0KTtcblx0XHRcdH0pKGlkeCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gTWFrZURlZldyYXBwZXIoc2VsZikge1xuXHRcdHRoaXMuZGVmID0gc2VsZjtcblx0XHR0aGlzLnRyaWdnZXJlZCA9IGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gTWFrZURlZihzZWxmKSB7XG5cdFx0dGhpcy5wcm9taXNlID0gc2VsZjtcblx0XHR0aGlzLnN0YXRlID0gMDtcblx0XHR0aGlzLnRyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMuY2hhaW4gPSBbXTtcblx0XHR0aGlzLm1zZyA9IHZvaWQgMDtcblx0fVxuXG5cdGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcblx0XHRpZiAodHlwZW9mIGV4ZWN1dG9yICE9IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX19OUE9fXyAhPT0gMCkge1xuXHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgcHJvbWlzZVwiKTtcblx0XHR9XG5cblx0XHQvLyBpbnN0YW5jZSBzaGFkb3dpbmcgdGhlIGluaGVyaXRlZCBcImJyYW5kXCJcblx0XHQvLyB0byBzaWduYWwgYW4gYWxyZWFkeSBcImluaXRpYWxpemVkXCIgcHJvbWlzZVxuXHRcdHRoaXMuX19OUE9fXyA9IDE7XG5cblx0XHR2YXIgZGVmID0gbmV3IE1ha2VEZWYodGhpcyk7XG5cblx0XHR0aGlzW1widGhlblwiXSA9IGZ1bmN0aW9uIHRoZW4oc3VjY2VzcyxmYWlsdXJlKSB7XG5cdFx0XHR2YXIgbyA9IHtcblx0XHRcdFx0c3VjY2VzczogdHlwZW9mIHN1Y2Nlc3MgPT0gXCJmdW5jdGlvblwiID8gc3VjY2VzcyA6IHRydWUsXG5cdFx0XHRcdGZhaWx1cmU6IHR5cGVvZiBmYWlsdXJlID09IFwiZnVuY3Rpb25cIiA/IGZhaWx1cmUgOiBmYWxzZVxuXHRcdFx0fTtcblx0XHRcdC8vIE5vdGU6IGB0aGVuKC4uKWAgaXRzZWxmIGNhbiBiZSBib3Jyb3dlZCB0byBiZSB1c2VkIGFnYWluc3Rcblx0XHRcdC8vIGEgZGlmZmVyZW50IHByb21pc2UgY29uc3RydWN0b3IgZm9yIG1ha2luZyB0aGUgY2hhaW5lZCBwcm9taXNlLFxuXHRcdFx0Ly8gYnkgc3Vic3RpdHV0aW5nIGEgZGlmZmVyZW50IGB0aGlzYCBiaW5kaW5nLlxuXHRcdFx0by5wcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoZnVuY3Rpb24gZXh0cmFjdENoYWluKHJlc29sdmUscmVqZWN0KSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR0aHJvdyBUeXBlRXJyb3IoXCJOb3QgYSBmdW5jdGlvblwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG8ucmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHRcdG8ucmVqZWN0ID0gcmVqZWN0O1xuXHRcdFx0fSk7XG5cdFx0XHRkZWYuY2hhaW4ucHVzaChvKTtcblxuXHRcdFx0aWYgKGRlZi5zdGF0ZSAhPT0gMCkge1xuXHRcdFx0XHRzY2hlZHVsZShub3RpZnksZGVmKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG8ucHJvbWlzZTtcblx0XHR9O1xuXHRcdHRoaXNbXCJjYXRjaFwiXSA9IGZ1bmN0aW9uICRjYXRjaCQoZmFpbHVyZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZmFpbHVyZSk7XG5cdFx0fTtcblxuXHRcdHRyeSB7XG5cdFx0XHRleGVjdXRvci5jYWxsKFxuXHRcdFx0XHR2b2lkIDAsXG5cdFx0XHRcdGZ1bmN0aW9uIHB1YmxpY1Jlc29sdmUobXNnKXtcblx0XHRcdFx0XHRyZXNvbHZlLmNhbGwoZGVmLG1zZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZ1bmN0aW9uIHB1YmxpY1JlamVjdChtc2cpIHtcblx0XHRcdFx0XHRyZWplY3QuY2FsbChkZWYsbXNnKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Y2F0Y2ggKGVycikge1xuXHRcdFx0cmVqZWN0LmNhbGwoZGVmLGVycik7XG5cdFx0fVxuXHR9XG5cblx0dmFyIFByb21pc2VQcm90b3R5cGUgPSBidWlsdEluUHJvcCh7fSxcImNvbnN0cnVjdG9yXCIsUHJvbWlzZSxcblx0XHQvKmNvbmZpZ3VyYWJsZT0qL2ZhbHNlXG5cdCk7XG5cblx0Ly8gTm90ZTogQW5kcm9pZCA0IGNhbm5vdCB1c2UgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSguLilgIGhlcmVcblx0UHJvbWlzZS5wcm90b3R5cGUgPSBQcm9taXNlUHJvdG90eXBlO1xuXG5cdC8vIGJ1aWx0LWluIFwiYnJhbmRcIiB0byBzaWduYWwgYW4gXCJ1bmluaXRpYWxpemVkXCIgcHJvbWlzZVxuXHRidWlsdEluUHJvcChQcm9taXNlUHJvdG90eXBlLFwiX19OUE9fX1wiLDAsXG5cdFx0Lypjb25maWd1cmFibGU9Ki9mYWxzZVxuXHQpO1xuXG5cdGJ1aWx0SW5Qcm9wKFByb21pc2UsXCJyZXNvbHZlXCIsZnVuY3Rpb24gUHJvbWlzZSRyZXNvbHZlKG1zZykge1xuXHRcdHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cblx0XHQvLyBzcGVjIG1hbmRhdGVkIGNoZWNrc1xuXHRcdC8vIG5vdGU6IGJlc3QgXCJpc1Byb21pc2VcIiBjaGVjayB0aGF0J3MgcHJhY3RpY2FsIGZvciBub3dcblx0XHRpZiAobXNnICYmIHR5cGVvZiBtc2cgPT0gXCJvYmplY3RcIiAmJiBtc2cuX19OUE9fXyA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIG1zZztcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUscmVqZWN0KXtcblx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUobXNnKTtcblx0XHR9KTtcblx0fSk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcInJlamVjdFwiLGZ1bmN0aW9uIFByb21pc2UkcmVqZWN0KG1zZykge1xuXHRcdHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLHJlamVjdCl7XG5cdFx0XHRpZiAodHlwZW9mIHJlc29sdmUgIT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiByZWplY3QgIT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IFR5cGVFcnJvcihcIk5vdCBhIGZ1bmN0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWplY3QobXNnKTtcblx0XHR9KTtcblx0fSk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcImFsbFwiLGZ1bmN0aW9uIFByb21pc2UkYWxsKGFycikge1xuXHRcdHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cblx0XHQvLyBzcGVjIG1hbmRhdGVkIGNoZWNrc1xuXHRcdGlmIChUb1N0cmluZy5jYWxsKGFycikgIT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG5cdFx0XHRyZXR1cm4gQ29uc3RydWN0b3IucmVqZWN0KFR5cGVFcnJvcihcIk5vdCBhbiBhcnJheVwiKSk7XG5cdFx0fVxuXHRcdGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gQ29uc3RydWN0b3IucmVzb2x2ZShbXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLHJlamVjdCl7XG5cdFx0XHRpZiAodHlwZW9mIHJlc29sdmUgIT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiByZWplY3QgIT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IFR5cGVFcnJvcihcIk5vdCBhIGZ1bmN0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGVuID0gYXJyLmxlbmd0aCwgbXNncyA9IEFycmF5KGxlbiksIGNvdW50ID0gMDtcblxuXHRcdFx0aXRlcmF0ZVByb21pc2VzKENvbnN0cnVjdG9yLGFycixmdW5jdGlvbiByZXNvbHZlcihpZHgsbXNnKSB7XG5cdFx0XHRcdG1zZ3NbaWR4XSA9IG1zZztcblx0XHRcdFx0aWYgKCsrY291bnQgPT09IGxlbikge1xuXHRcdFx0XHRcdHJlc29sdmUobXNncyk7XG5cdFx0XHRcdH1cblx0XHRcdH0scmVqZWN0KTtcblx0XHR9KTtcblx0fSk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcInJhY2VcIixmdW5jdGlvbiBQcm9taXNlJHJhY2UoYXJyKSB7XG5cdFx0dmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuXHRcdC8vIHNwZWMgbWFuZGF0ZWQgY2hlY2tzXG5cdFx0aWYgKFRvU3RyaW5nLmNhbGwoYXJyKSAhPSBcIltvYmplY3QgQXJyYXldXCIpIHtcblx0XHRcdHJldHVybiBDb25zdHJ1Y3Rvci5yZWplY3QoVHlwZUVycm9yKFwiTm90IGFuIGFycmF5XCIpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUscmVqZWN0KXtcblx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdGl0ZXJhdGVQcm9taXNlcyhDb25zdHJ1Y3RvcixhcnIsZnVuY3Rpb24gcmVzb2x2ZXIoaWR4LG1zZyl7XG5cdFx0XHRcdHJlc29sdmUobXNnKTtcblx0XHRcdH0scmVqZWN0KTtcblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIFByb21pc2U7XG59KTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwidmFyIGlzYXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuLyoqXG4gKiBFeHBvc2UgYHBhdGhUb1JlZ2V4cGAuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gcGF0aFRvUmVnZXhwXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5tb2R1bGUuZXhwb3J0cy5jb21waWxlID0gY29tcGlsZVxubW9kdWxlLmV4cG9ydHMudG9rZW5zVG9GdW5jdGlvbiA9IHRva2Vuc1RvRnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzLnRva2Vuc1RvUmVnRXhwID0gdG9rZW5zVG9SZWdFeHBcblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbnZhciBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoW1xuICAvLyBNYXRjaCBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYXBwZWFyIGluIGZ1dHVyZSBtYXRjaGVzLlxuICAvLyBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgd29uJ3QgdHJhbnNmb3JtLlxuICAnKFxcXFxcXFxcLiknLFxuICAvLyBNYXRjaCBFeHByZXNzLXN0eWxlIHBhcmFtZXRlcnMgYW5kIHVuLW5hbWVkIHBhcmFtZXRlcnMgd2l0aCBhIHByZWZpeFxuICAvLyBhbmQgb3B0aW9uYWwgc3VmZml4ZXMuIE1hdGNoZXMgYXBwZWFyIGFzOlxuICAvL1xuICAvLyBcIi86dGVzdChcXFxcZCspP1wiID0+IFtcIi9cIiwgXCJ0ZXN0XCIsIFwiXFxkK1wiLCB1bmRlZmluZWQsIFwiP1wiLCB1bmRlZmluZWRdXG4gIC8vIFwiL3JvdXRlKFxcXFxkKylcIiAgPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiXFxkK1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgLy8gXCIvKlwiICAgICAgICAgICAgPT4gW1wiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiKlwiXVxuICAnKFtcXFxcLy5dKT8oPzooPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W14oKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpXG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHN0cikge1xuICB2YXIgdG9rZW5zID0gW11cbiAgdmFyIGtleSA9IDBcbiAgdmFyIGluZGV4ID0gMFxuICB2YXIgcGF0aCA9ICcnXG4gIHZhciByZXNcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdXG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV1cbiAgICB2YXIgb2Zmc2V0ID0gcmVzLmluZGV4XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldClcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoXG5cbiAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgcGF0aCArPSBlc2NhcGVkWzFdXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIFB1c2ggdGhlIGN1cnJlbnQgcGF0aCBvbnRvIHRoZSB0b2tlbnMuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gICAgICBwYXRoID0gJydcbiAgICB9XG5cbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdXG4gICAgdmFyIG5hbWUgPSByZXNbM11cbiAgICB2YXIgY2FwdHVyZSA9IHJlc1s0XVxuICAgIHZhciBncm91cCA9IHJlc1s1XVxuICAgIHZhciBzdWZmaXggPSByZXNbNl1cbiAgICB2YXIgYXN0ZXJpc2sgPSByZXNbN11cblxuICAgIHZhciByZXBlYXQgPSBzdWZmaXggPT09ICcrJyB8fCBzdWZmaXggPT09ICcqJ1xuICAgIHZhciBvcHRpb25hbCA9IHN1ZmZpeCA9PT0gJz8nIHx8IHN1ZmZpeCA9PT0gJyonXG4gICAgdmFyIGRlbGltaXRlciA9IHByZWZpeCB8fCAnLydcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXAgfHwgKGFzdGVyaXNrID8gJy4qJyA6ICdbXicgKyBkZWxpbWl0ZXIgKyAnXSs/JylcblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICBwYXR0ZXJuOiBlc2NhcGVHcm91cChwYXR0ZXJuKVxuICAgIH0pXG4gIH1cblxuICAvLyBNYXRjaCBhbnkgY2hhcmFjdGVycyBzdGlsbCByZW1haW5pbmcuXG4gIGlmIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBwYXRoICs9IHN0ci5zdWJzdHIoaW5kZXgpXG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCBleGlzdHMsIHB1c2ggaXQgb250byB0aGUgZW5kLlxuICBpZiAocGF0aCkge1xuICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgc3RyXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZSAoc3RyKSB7XG4gIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0cikpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aClcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14nICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnJCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgcGF0aCA9ICcnXG4gICAgdmFyIGRhdGEgPSBvYmogfHwge31cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcGF0aCArPSB0b2tlblxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV1cbiAgICAgIHZhciBzZWdtZW50XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBiZSBkZWZpbmVkJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNhcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBcIicgKyB2YWx1ZSArICdcIicpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWVbal0pXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIFwiJyArIHNlZ21lbnQgKyAnXCInKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSlcblxuICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgXCInICsgc2VnbWVudCArICdcIicpXG4gICAgICB9XG5cbiAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudFxuICAgIH1cblxuICAgIHJldHVybiBwYXRoXG4gIH1cbn1cblxuLyoqXG4gKiBFc2NhcGUgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKyo/PV4hOiR7fSgpW1xcXXxcXC9dKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBncm91cFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHtSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXNcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7UmVnRXhwfSBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpXG5cbiAgaWYgKGdyb3Vwcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHBhdGgsIGtleXMpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7QXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChwYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKVxuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/OicgKyBwYXJ0cy5qb2luKCd8JykgKyAnKScsIGZsYWdzKG9wdGlvbnMpKVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAga2V5c1xuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciB0b2tlbnMgPSBwYXJzZShwYXRoKVxuICB2YXIgcmUgPSB0b2tlbnNUb1JlZ0V4cCh0b2tlbnMsIG9wdGlvbnMpXG5cbiAgLy8gQXR0YWNoIGtleXMgYmFjayB0byB0aGUgcmVnZXhwLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAga2V5cy5wdXNoKHRva2Vuc1tpXSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhyZSwga2V5cylcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgdGFraW5nIHRva2VucyBhbmQgcmV0dXJuaW5nIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fSAgdG9rZW5zXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiB0b2tlbnNUb1JlZ0V4cCAodG9rZW5zLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2VcbiAgdmFyIHJvdXRlID0gJydcbiAgdmFyIGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1cbiAgdmFyIGVuZHNXaXRoU2xhc2ggPSB0eXBlb2YgbGFzdFRva2VuID09PSAnc3RyaW5nJyAmJiAvXFwvJC8udGVzdChsYXN0VG9rZW4pXG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB0b2tlbnMgYW5kIGNyZWF0ZSBvdXIgcmVnZXhwIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KVxuICAgICAgdmFyIGNhcHR1cmUgPSB0b2tlbi5wYXR0ZXJuXG5cbiAgICAgIGlmICh0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgY2FwdHVyZSArPSAnKD86JyArIHByZWZpeCArIGNhcHR1cmUgKyAnKSonXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAocHJlZml4KSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoPzonICsgcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpKT8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoJyArIGNhcHR1cmUgKyAnKT8nXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyknXG4gICAgICB9XG5cbiAgICAgIHJvdXRlICs9IGNhcHR1cmVcbiAgICB9XG4gIH1cblxuICAvLyBJbiBub24tc3RyaWN0IG1vZGUgd2UgYWxsb3cgYSBzbGFzaCBhdCB0aGUgZW5kIG9mIG1hdGNoLiBJZiB0aGUgcGF0aCB0b1xuICAvLyBtYXRjaCBhbHJlYWR5IGVuZHMgd2l0aCBhIHNsYXNoLCB3ZSByZW1vdmUgaXQgZm9yIGNvbnNpc3RlbmN5LiBUaGUgc2xhc2hcbiAgLy8gaXMgdmFsaWQgYXQgdGhlIGVuZCBvZiBhIHBhdGggbWF0Y2gsIG5vdCBpbiB0aGUgbWlkZGxlLiBUaGlzIGlzIGltcG9ydGFudFxuICAvLyBpbiBub24tZW5kaW5nIG1vZGUsIHdoZXJlIFwiL3Rlc3QvXCIgc2hvdWxkbid0IG1hdGNoIFwiL3Rlc3QvL3JvdXRlXCIuXG4gIGlmICghc3RyaWN0KSB7XG4gICAgcm91dGUgPSAoZW5kc1dpdGhTbGFzaCA/IHJvdXRlLnNsaWNlKDAsIC0yKSA6IHJvdXRlKSArICcoPzpcXFxcLyg/PSQpKT8nXG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgcm91dGUgKz0gJyQnXG4gIH0gZWxzZSB7XG4gICAgLy8gSW4gbm9uLWVuZGluZyBtb2RlLCB3ZSBuZWVkIHRoZSBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFzIG11Y2ggYXNcbiAgICAvLyBwb3NzaWJsZSBieSB1c2luZyBhIHBvc2l0aXZlIGxvb2thaGVhZCB0byB0aGUgZW5kIG9yIG5leHQgcGF0aCBzZWdtZW50LlxuICAgIHJvdXRlICs9IHN0cmljdCAmJiBlbmRzV2l0aFNsYXNoID8gJycgOiAnKD89XFxcXC98JCknXG4gIH1cblxuICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBnaXZlbiBwYXRoIHN0cmluZywgcmV0dXJuaW5nIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVtcHR5IGFycmF5IGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRoZSBrZXlzLCB3aGljaCB3aWxsIGhvbGQgdGhlXG4gKiBwbGFjZWhvbGRlciBrZXkgZGVzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgdXNpbmcgYC91c2VyLzppZGAsIGBrZXlzYCB3aWxsXG4gKiBjb250YWluIGBbeyBuYW1lOiAnaWQnLCBkZWxpbWl0ZXI6ICcvJywgb3B0aW9uYWw6IGZhbHNlLCByZXBlYXQ6IGZhbHNlIH1dYC5cbiAqXG4gKiBAcGFyYW0gIHsoU3RyaW5nfFJlZ0V4cHxBcnJheSl9IHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICAgICAgICAgICAgW2tleXNdXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgIFtvcHRpb25zXVxuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAga2V5cyA9IGtleXMgfHwgW11cblxuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0ga2V5c1xuICAgIGtleXMgPSBbXVxuICB9IGVsc2UgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKVxuICB9XG5cbiAgaWYgKGlzYXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gYXJyYXlUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKHBhdGgsIGtleXMsIG9wdGlvbnMpXG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsInZhciByZXQgPSByZXF1aXJlKCdyZXQnKTtcbnZhciBEUmFuZ2UgPSByZXF1aXJlKCdkaXNjb250aW51b3VzLXJhbmdlJyk7XG52YXIgdHlwZXMgPSByZXQudHlwZXM7XG5cblxuLyoqXG4gKiBJZiBjb2RlIGlzIGFscGhhYmV0aWMsIGNvbnZlcnRzIHRvIG90aGVyIGNhc2UuXG4gKiBJZiBub3QgYWxwaGFiZXRpYywgcmV0dXJucyBiYWNrIGNvZGUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gdG9PdGhlckNhc2UoY29kZSkge1xuICByZXR1cm4gY29kZSArICg5NyA8PSBjb2RlICYmIGNvZGUgPD0gMTIyID8gLTMyIDpcbiAgICAgICAgICAgICAgICAgNjUgPD0gY29kZSAmJiBjb2RlIDw9IDkwICA/ICAzMiA6IDApO1xufVxuXG5cbi8qKlxuICogUmFuZG9tbHkgcmV0dXJucyBhIHRydWUgb3IgZmFsc2UgdmFsdWUuXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmFuZEJvb2woKSB7XG4gIHJldHVybiAhdGhpcy5yYW5kSW50KDAsIDEpO1xufVxuXG5cbi8qKlxuICogUmFuZG9tbHkgc2VsZWN0cyBhbmQgcmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IGFyclxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiByYW5kU2VsZWN0KGFycikge1xuICBpZiAoYXJyIGluc3RhbmNlb2YgRFJhbmdlKSB7XG4gICAgcmV0dXJuIGFyci5pbmRleCh0aGlzLnJhbmRJbnQoMCwgYXJyLmxlbmd0aCAtIDEpKTtcbiAgfVxuICByZXR1cm4gYXJyW3RoaXMucmFuZEludCgwLCBhcnIubGVuZ3RoIC0gMSldO1xufVxuXG5cbi8qKlxuICogZXhwYW5kcyBhIHRva2VuIHRvIGEgRGlzY29udGludW91c1JhbmdlIG9mIGNoYXJhY3RlcnMgd2hpY2ggaGFzIGEgXG4gKiBsZW5ndGggYW5kIGFuIGluZGV4IGZ1bmN0aW9uIChmb3IgcmFuZG9tIHNlbGVjdGluZylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdG9rZW5cbiAqIEByZXR1cm4ge0Rpc2NvbnRpbnVvdXNSYW5nZX1cbiAqL1xuZnVuY3Rpb24gZXhwYW5kKHRva2VuKSB7XG4gIGlmICh0b2tlbi50eXBlID09PSByZXQudHlwZXMuQ0hBUikgcmV0dXJuIG5ldyBEUmFuZ2UodG9rZW4udmFsdWUpO1xuICBpZiAodG9rZW4udHlwZSA9PT0gcmV0LnR5cGVzLlJBTkdFKSByZXR1cm4gbmV3IERSYW5nZSh0b2tlbi5mcm9tLCB0b2tlbi50byk7XG4gIGlmICh0b2tlbi50eXBlID09PSByZXQudHlwZXMuU0VUKSB7XG4gICAgdmFyIGRyYW5nZSA9IG5ldyBEUmFuZ2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN1YnJhbmdlID0gZXhwYW5kLmNhbGwodGhpcywgdG9rZW4uc2V0W2ldKTtcbiAgICAgIGRyYW5nZS5hZGQoc3VicmFuZ2UpO1xuICAgICAgaWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YnJhbmdlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBzdWJyYW5nZS5pbmRleChqKTtcbiAgICAgICAgICB2YXIgb3RoZXJDYXNlQ29kZSA9IHRvT3RoZXJDYXNlKGNvZGUpO1xuICAgICAgICAgIGlmIChjb2RlICE9PSBvdGhlckNhc2VDb2RlKSB7XG4gICAgICAgICAgICBkcmFuZ2UuYWRkKG90aGVyQ2FzZUNvZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodG9rZW4ubm90KSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UmFuZ2UuY2xvbmUoKS5zdWJ0cmFjdChkcmFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZHJhbmdlO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwYW5kYWJsZSB0b2tlbiB0eXBlOiAnICsgdG9rZW4udHlwZSk7XG59XG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7UmVnRXhwfFN0cmluZ30gcmVnZXhwXG4gKiBAcGFyYW0ge1N0cmluZ30gbVxuICovXG52YXIgUmFuZEV4cCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocmVnZXhwLCBtKSB7XG4gIHRoaXMuZGVmYXVsdFJhbmdlID0gdGhpcy5kZWZhdWx0UmFuZ2UuY2xvbmUoKTtcbiAgaWYgKHJlZ2V4cCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHRoaXMuaWdub3JlQ2FzZSA9IHJlZ2V4cC5pZ25vcmVDYXNlO1xuICAgIHRoaXMubXVsdGlsaW5lID0gcmVnZXhwLm11bHRpbGluZTtcbiAgICBpZiAodHlwZW9mIHJlZ2V4cC5tYXggPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLm1heCA9IHJlZ2V4cC5tYXg7XG4gICAgfVxuICAgIHJlZ2V4cCA9IHJlZ2V4cC5zb3VyY2U7XG5cbiAgfSBlbHNlIGlmICh0eXBlb2YgcmVnZXhwID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuaWdub3JlQ2FzZSA9IG0gJiYgbS5pbmRleE9mKCdpJykgIT09IC0xO1xuICAgIHRoaXMubXVsdGlsaW5lID0gbSAmJiBtLmluZGV4T2YoJ20nKSAhPT0gLTE7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHJlZ2V4cCBvciBzdHJpbmcnKTtcbiAgfVxuXG4gIHRoaXMudG9rZW5zID0gcmV0KHJlZ2V4cCk7XG59O1xuXG5cbi8vIFdoZW4gYSByZXBldGl0aW9uYWwgdG9rZW4gaGFzIGl0cyBtYXggc2V0IHRvIEluZmluaXRlLFxuLy8gcmFuZGV4cCB3b24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhIHJhbmRvbSBhbW91bnQgYmV0d2VlbiBtaW4gYW5kIEluZmluaXRlXG4vLyBpbnN0ZWFkIGl0IHdpbGwgc2VlIEluZmluaXRlIGFzIG1pbiArIDEwMC5cblJhbmRFeHAucHJvdG90eXBlLm1heCA9IDEwMDtcblxuXG4vLyBHZW5lcmF0ZXMgdGhlIHJhbmRvbSBzdHJpbmcuXG5SYW5kRXhwLnByb3RvdHlwZS5nZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGdlbi5jYWxsKHRoaXMsIHRoaXMudG9rZW5zLCBbXSk7XG59O1xuXG5cbi8vIEVuYWJsZXMgdXNlIG9mIHJhbmRleHAgd2l0aCBhIHNob3J0ZXIgY2FsbC5cblJhbmRFeHAucmFuZGV4cCA9IGZ1bmN0aW9uKHJlZ2V4cCwgbSkge1xuICB2YXIgcmFuZGV4cDtcblxuICBpZiAocmVnZXhwLl9yYW5kZXhwID09PSB1bmRlZmluZWQpIHtcbiAgICByYW5kZXhwID0gbmV3IFJhbmRFeHAocmVnZXhwLCBtKTtcbiAgICByZWdleHAuX3JhbmRleHAgPSByYW5kZXhwO1xuICB9IGVsc2Uge1xuICAgIHJhbmRleHAgPSByZWdleHAuX3JhbmRleHA7XG4gICAgaWYgKHR5cGVvZiByZWdleHAubWF4ID09PSAnbnVtYmVyJykge1xuICAgICAgcmFuZGV4cC5tYXggPSByZWdleHAubWF4O1xuICAgIH1cbiAgICBpZiAocmVnZXhwLmRlZmF1bHRSYW5nZSBpbnN0YW5jZW9mIERSYW5nZSkge1xuICAgICAgcmFuZGV4cC5kZWZhdWx0UmFuZ2UgPSByZWdleHAuZGVmYXVsdFJhbmdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlZ2V4cC5yYW5kSW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByYW5kZXhwLnJhbmRJbnQgPSByZWdleHAucmFuZEludDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmFuZGV4cC5nZW4oKTtcbn07XG5cblxuLy8gVGhpcyBlbmFibGVzIHN1Z2FyeSAvcmVnZXhwLy5nZW4gc3ludGF4LlxuUmFuZEV4cC5zdWdhciA9IGZ1bmN0aW9uKCkge1xuICAvKiBqc2hpbnQgZnJlZXplOmZhbHNlICovXG4gIFJlZ0V4cC5wcm90b3R5cGUuZ2VuID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJhbmRFeHAucmFuZGV4cCh0aGlzKTtcbiAgfTtcbn07XG5cbi8vIFRoaXMgYWxsb3dzIGV4cGFuZGluZyB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY2hhcmFjdGVyc1xuLy8gZm9yIGluc3RhbmNlOiBSYW5kRXhwLmRlZmF1bHRSYW5nZS5hZGQoMCwgNjU1MzUpO1xuUmFuZEV4cC5wcm90b3R5cGUuZGVmYXVsdFJhbmdlID0gbmV3IERSYW5nZSgzMiwgMTI2KTtcblxuXG4vKipcbiAqIFJhbmRvbWx5IGdlbmVyYXRlcyBhbmQgcmV0dXJucyBhIG51bWJlciBiZXR3ZWVuIGEgYW5kIGIgKGluY2x1c2l2ZSkuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGFcbiAqIEBwYXJhbSB7TnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cblJhbmRFeHAucHJvdG90eXBlLnJhbmRJbnQgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDEgKyBiIC0gYSkpO1xufTtcblxuXG4vKipcbiAqIEdlbmVyYXRlIHJhbmRvbSBzdHJpbmcgbW9kZWxlZCBhZnRlciBnaXZlbiB0b2tlbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRva2VuXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBncm91cHNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2VuKHRva2VuLCBncm91cHMpIHtcbiAgdmFyIHN0YWNrLCBzdHIsIG4sIGksIGw7XG5cbiAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG5cblxuICAgIGNhc2UgdHlwZXMuUk9PVDpcbiAgICBjYXNlIHR5cGVzLkdST1VQOlxuICAgICAgaWYgKHRva2VuLm5vdEZvbGxvd2VkQnkpIHsgcmV0dXJuICcnOyB9XG5cbiAgICAgIC8vIEluc2VydCBwbGFjZWhvbGRlciB1bnRpbCBncm91cCBzdHJpbmcgaXMgZ2VuZXJhdGVkLlxuICAgICAgaWYgKHRva2VuLnJlbWVtYmVyICYmIHRva2VuLmdyb3VwTnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdG9rZW4uZ3JvdXBOdW1iZXIgPSBncm91cHMucHVzaChudWxsKSAtIDE7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrID0gdG9rZW4ub3B0aW9ucyA/XG4gICAgICAgIHJhbmRTZWxlY3QuY2FsbCh0aGlzLCB0b2tlbi5vcHRpb25zKSA6IHRva2VuLnN0YWNrO1xuXG4gICAgICBzdHIgPSAnJztcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBzdGFjay5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGdlbi5jYWxsKHRoaXMsIHN0YWNrW2ldLCBncm91cHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ucmVtZW1iZXIpIHtcbiAgICAgICAgZ3JvdXBzW3Rva2VuLmdyb3VwTnVtYmVyXSA9IHN0cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG5cblxuICAgIGNhc2UgdHlwZXMuUE9TSVRJT046XG4gICAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuXG4gICAgICByZXR1cm4gJyc7XG5cblxuICAgIGNhc2UgdHlwZXMuU0VUOlxuICAgICAgdmFyIGV4cGFuZGVkX3NldCA9IGV4cGFuZC5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICAgIGlmICghZXhwYW5kZWRfc2V0Lmxlbmd0aCkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocmFuZFNlbGVjdC5jYWxsKHRoaXMsIGV4cGFuZGVkX3NldCkpO1xuXG5cbiAgICBjYXNlIHR5cGVzLlJFUEVUSVRJT046XG4gICAgICAvLyBSYW5kb21seSBnZW5lcmF0ZSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAgICAgIG4gPSB0aGlzLnJhbmRJbnQodG9rZW4ubWluLFxuICAgICAgICAgICAgICB0b2tlbi5tYXggPT09IEluZmluaXR5ID8gdG9rZW4ubWluICsgdGhpcy5tYXggOiB0b2tlbi5tYXgpO1xuXG4gICAgICBzdHIgPSAnJztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGdlbi5jYWxsKHRoaXMsIHRva2VuLnZhbHVlLCBncm91cHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyO1xuXG5cbiAgICBjYXNlIHR5cGVzLlJFRkVSRU5DRTpcbiAgICAgIHJldHVybiBncm91cHNbdG9rZW4udmFsdWUgLSAxXSB8fCAnJztcblxuXG4gICAgY2FzZSB0eXBlcy5DSEFSOlxuICAgICAgdmFyIGNvZGUgPSB0aGlzLmlnbm9yZUNhc2UgJiYgcmFuZEJvb2wuY2FsbCh0aGlzKSA/XG4gICAgICAgIHRvT3RoZXJDYXNlKHRva2VuLnZhbHVlKSA6IHRva2VuLnZhbHVlO1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gIH1cbn1cblxuXG4iLCJ2YXIgdXRpbCAgICAgID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgdHlwZXMgICAgID0gcmVxdWlyZSgnLi90eXBlcycpO1xudmFyIHNldHMgICAgICA9IHJlcXVpcmUoJy4vc2V0cycpO1xudmFyIHBvc2l0aW9ucyA9IHJlcXVpcmUoJy4vcG9zaXRpb25zJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihyZWdleHBTdHIpIHtcbiAgdmFyIGkgPSAwLCBsLCBjLFxuICAgICAgc3RhcnQgPSB7IHR5cGU6IHR5cGVzLlJPT1QsIHN0YWNrOiBbXX0sXG5cbiAgICAgIC8vIEtlZXAgdHJhY2sgb2YgbGFzdCBjbGF1c2UvZ3JvdXAgYW5kIHN0YWNrLlxuICAgICAgbGFzdEdyb3VwID0gc3RhcnQsXG4gICAgICBsYXN0ID0gc3RhcnQuc3RhY2ssXG4gICAgICBncm91cFN0YWNrID0gW107XG5cblxuICB2YXIgcmVwZWF0RXJyID0gZnVuY3Rpb24oaSkge1xuICAgIHV0aWwuZXJyb3IocmVnZXhwU3RyLCAnTm90aGluZyB0byByZXBlYXQgYXQgY29sdW1uICcgKyAoaSAtIDEpKTtcbiAgfTtcblxuICAvLyBEZWNvZGUgYSBmZXcgZXNjYXBlZCBjaGFyYWN0ZXJzLlxuICB2YXIgc3RyID0gdXRpbC5zdHJUb0NoYXJzKHJlZ2V4cFN0cik7XG4gIGwgPSBzdHIubGVuZ3RoO1xuXG4gIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGNoYXJhY3RlciBpbiBzdHJpbmcuXG4gIHdoaWxlIChpIDwgbCkge1xuICAgIGMgPSBzdHJbaSsrXTtcblxuICAgIHN3aXRjaCAoYykge1xuICAgICAgLy8gSGFuZGxlIGVzY2FwZWQgY2hhcmFjdGVycywgaW5jbHVlcyBhIGZldyBzZXRzLlxuICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgIGMgPSBzdHJbaSsrXTtcblxuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChwb3NpdGlvbnMud29yZEJvdW5kYXJ5KCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChwb3NpdGlvbnMubm9uV29yZEJvdW5kYXJ5KCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLndvcmRzKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLm5vdFdvcmRzKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLmludHMoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMubm90SW50cygpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICBsYXN0LnB1c2goc2V0cy53aGl0ZXNwYWNlKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLm5vdFdoaXRlc3BhY2UoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBjIGlzIGludGVnZXIuXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIGl0J3MgYSByZWZlcmVuY2UuXG4gICAgICAgICAgICBpZiAoL1xcZC8udGVzdChjKSkge1xuICAgICAgICAgICAgICBsYXN0LnB1c2goeyB0eXBlOiB0eXBlcy5SRUZFUkVOQ0UsIHZhbHVlOiBwYXJzZUludChjLCAxMCkgfSk7XG5cbiAgICAgICAgICAgIC8vIEVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGFzdC5wdXNoKHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IGMuY2hhckNvZGVBdCgwKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIFBvc2l0aW9uYWxzLlxuICAgICAgY2FzZSAnXic6XG4gICAgICAgICAgbGFzdC5wdXNoKHBvc2l0aW9ucy5iZWdpbigpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgIGxhc3QucHVzaChwb3NpdGlvbnMuZW5kKCkpO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBIYW5kbGUgY3VzdG9tIHNldHMuXG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBjbGFzcyBpcyAnYW50aScgaS5lLiBbXmFiY10uXG4gICAgICAgIHZhciBub3Q7XG4gICAgICAgIGlmIChzdHJbaV0gPT09ICdeJykge1xuICAgICAgICAgIG5vdCA9IHRydWU7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGFsbCB0aGUgY2hhcmFjdGVycyBpbiBjbGFzcy5cbiAgICAgICAgdmFyIGNsYXNzVG9rZW5zID0gdXRpbC50b2tlbml6ZUNsYXNzKHN0ci5zbGljZShpKSwgcmVnZXhwU3RyKTtcblxuICAgICAgICAvLyBJbmNyZWFzZSBpbmRleCBieSBsZW5ndGggb2YgY2xhc3MuXG4gICAgICAgIGkgKz0gY2xhc3NUb2tlbnNbMV07XG4gICAgICAgIGxhc3QucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlcy5TRVRcbiAgICAgICAgICAsIHNldDogY2xhc3NUb2tlbnNbMF1cbiAgICAgICAgICAsIG5vdDogbm90XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIENsYXNzIG9mIGFueSBjaGFyYWN0ZXIgZXhjZXB0IFxcbi5cbiAgICAgIGNhc2UgJy4nOlxuICAgICAgICBsYXN0LnB1c2goc2V0cy5hbnlDaGFyKCkpO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBQdXNoIGdyb3VwIG9udG8gc3RhY2suXG4gICAgICBjYXNlICcoJzpcbiAgICAgICAgLy8gQ3JlYXRlIGdyb3VwLlxuICAgICAgICB2YXIgZ3JvdXAgPSB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlcy5HUk9VUFxuICAgICAgICAgICwgc3RhY2s6IFtdXG4gICAgICAgICAgLCByZW1lbWJlcjogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIGMgPSBzdHJbaV07XG5cbiAgICAgICAgLy8gaWYgaWYgdGhpcyBpcyBhIHNwZWNpYWwga2luZCBvZiBncm91cC5cbiAgICAgICAgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgIGMgPSBzdHJbaSArIDFdO1xuICAgICAgICAgIGkgKz0gMjtcblxuICAgICAgICAgIC8vIE1hdGNoIGlmIGZvbGxvd2VkIGJ5LlxuICAgICAgICAgIGlmIChjID09PSAnPScpIHtcbiAgICAgICAgICAgIGdyb3VwLmZvbGxvd2VkQnkgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gTWF0Y2ggaWYgbm90IGZvbGxvd2VkIGJ5LlxuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICBncm91cC5ub3RGb2xsb3dlZEJ5ID0gdHJ1ZTtcblxuICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJzonKSB7XG4gICAgICAgICAgICB1dGlsLmVycm9yKHJlZ2V4cFN0cixcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBncm91cCwgY2hhcmFjdGVyIFxcJycgKyBjICsgJ1xcJyBhZnRlciBcXCc/XFwnIGF0IGNvbHVtbiAnICtcbiAgICAgICAgICAgICAgICAoaSAtIDEpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBncm91cC5yZW1lbWJlciA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5zZXJ0IHN1Ymdyb3VwIGludG8gY3VycmVudCBncm91cCBzdGFjay5cbiAgICAgICAgbGFzdC5wdXNoKGdyb3VwKTtcblxuICAgICAgICAvLyBSZW1lbWJlciB0aGUgY3VycmVudCBncm91cCBmb3Igd2hlbiB0aGUgZ3JvdXAgY2xvc2VzLlxuICAgICAgICBncm91cFN0YWNrLnB1c2gobGFzdEdyb3VwKTtcblxuICAgICAgICAvLyBNYWtlIHRoaXMgbmV3IGdyb3VwIHRoZSBjdXJyZW50IGdyb3VwLlxuICAgICAgICBsYXN0R3JvdXAgPSBncm91cDtcbiAgICAgICAgbGFzdCA9IGdyb3VwLnN0YWNrO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBQb3AgZ3JvdXAgb3V0IG9mIHN0YWNrLlxuICAgICAgY2FzZSAnKSc6XG4gICAgICAgIGlmIChncm91cFN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHV0aWwuZXJyb3IocmVnZXhwU3RyLCAnVW5tYXRjaGVkICkgYXQgY29sdW1uICcgKyAoaSAtIDEpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0R3JvdXAgPSBncm91cFN0YWNrLnBvcCgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgZ3JvdXAgaGFzIGEgUElQRS5cbiAgICAgICAgLy8gVG8gZ2V0IGJhY2sgdGhlIGNvcnJlY3QgbGFzdCBzdGFjay5cbiAgICAgICAgbGFzdCA9IGxhc3RHcm91cC5vcHRpb25zID8gbGFzdEdyb3VwLm9wdGlvbnNbbGFzdEdyb3VwLm9wdGlvbnMubGVuZ3RoIC0gMV0gOiBsYXN0R3JvdXAuc3RhY2s7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIFVzZSBwaXBlIGNoYXJhY3RlciB0byBnaXZlIG1vcmUgY2hvaWNlcy5cbiAgICAgIGNhc2UgJ3wnOlxuICAgICAgICAvLyBDcmVhdGUgYXJyYXkgd2hlcmUgb3B0aW9ucyBhcmUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgUElQRVxuICAgICAgICAvLyBpbiB0aGlzIGNsYXVzZS5cbiAgICAgICAgaWYgKCFsYXN0R3JvdXAub3B0aW9ucykge1xuICAgICAgICAgIGxhc3RHcm91cC5vcHRpb25zID0gW2xhc3RHcm91cC5zdGFja107XG4gICAgICAgICAgZGVsZXRlIGxhc3RHcm91cC5zdGFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBzdGFjayBhbmQgYWRkIHRvIG9wdGlvbnMgZm9yIHJlc3Qgb2YgY2xhdXNlLlxuICAgICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgICAgbGFzdEdyb3VwLm9wdGlvbnMucHVzaChzdGFjayk7XG4gICAgICAgIGxhc3QgPSBzdGFjaztcbiAgICAgICAgYnJlYWs7XG5cblxuICAgICAgLy8gUmVwZXRpdGlvbi5cbiAgICAgIC8vIEZvciBldmVyeSByZXBldGl0aW9uLCByZW1vdmUgbGFzdCBlbGVtZW50IGZyb20gbGFzdCBzdGFja1xuICAgICAgLy8gdGhlbiBpbnNlcnQgYmFjayBhIFJBTkdFIG9iamVjdC5cbiAgICAgIC8vIFRoaXMgZGVzaWduIGlzIGNob3NlbiBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhblxuICAgICAgLy8gb25lIHJlcGV0aXRpb24gc3ltYm9scyBpbiBhIHJlZ2V4IGkuZS4gYGE/K3syLDN9YC5cbiAgICAgIGNhc2UgJ3snOlxuICAgICAgICB2YXIgcnMgPSAvXihcXGQrKSgsKFxcZCspPyk/XFx9Ly5leGVjKHN0ci5zbGljZShpKSksIG1pbiwgbWF4O1xuICAgICAgICBpZiAocnMgIT09IG51bGwpIHtcbiAgICAgICAgICBtaW4gPSBwYXJzZUludChyc1sxXSwgMTApO1xuICAgICAgICAgIG1heCA9IHJzWzJdID8gcnNbM10gPyBwYXJzZUludChyc1szXSwgMTApIDogSW5maW5pdHkgOiBtaW47XG4gICAgICAgICAgaSArPSByc1swXS5sZW5ndGg7XG5cbiAgICAgICAgICBsYXN0LnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5SRVBFVElUSU9OXG4gICAgICAgICAgICAsIG1pbjogbWluXG4gICAgICAgICAgICAsIG1heDogbWF4XG4gICAgICAgICAgICAsIHZhbHVlOiBsYXN0LnBvcCgpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogdHlwZXMuQ0hBUlxuICAgICAgICAgICAgLCB2YWx1ZTogMTIzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJz8nOlxuICAgICAgICBpZiAobGFzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXBlYXRFcnIoaSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLlJFUEVUSVRJT05cbiAgICAgICAgICAsIG1pbjogMFxuICAgICAgICAgICwgbWF4OiAxXG4gICAgICAgICAgLCB2YWx1ZTogbGFzdC5wb3AoKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJysnOlxuICAgICAgICBpZiAobGFzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXBlYXRFcnIoaSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLlJFUEVUSVRJT05cbiAgICAgICAgICAsIG1pbjogMVxuICAgICAgICAgICwgbWF4OiBJbmZpbml0eVxuICAgICAgICAgICwgdmFsdWU6IGxhc3QucG9wKClcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICcqJzpcbiAgICAgICAgaWYgKGxhc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmVwZWF0RXJyKGkpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3QucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlcy5SRVBFVElUSU9OXG4gICAgICAgICAgLCBtaW46IDBcbiAgICAgICAgICAsIG1heDogSW5maW5pdHlcbiAgICAgICAgICAsIHZhbHVlOiBsYXN0LnBvcCgpXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBEZWZhdWx0IGlzIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGBcXFtdKCl7fT8rKl4kYC5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxhc3QucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlcy5DSEFSXG4gICAgICAgICAgLCB2YWx1ZTogYy5jaGFyQ29kZUF0KDApXG4gICAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYW55IGdyb3VwcyBoYXZlIG5vdCBiZWVuIGNsb3NlZC5cbiAgaWYgKGdyb3VwU3RhY2subGVuZ3RoICE9PSAwKSB7XG4gICAgdXRpbC5lcnJvcihyZWdleHBTdHIsICdVbnRlcm1pbmF0ZWQgZ3JvdXAnKTtcbiAgfVxuXG4gIHJldHVybiBzdGFydDtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnR5cGVzID0gdHlwZXM7XG4iLCJ2YXIgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5cbmV4cG9ydHMud29yZEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlBPU0lUSU9OLCB2YWx1ZTogJ2InIH07XG59O1xuXG5leHBvcnRzLm5vbldvcmRCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5QT1NJVElPTiwgdmFsdWU6ICdCJyB9O1xufTtcblxuZXhwb3J0cy5iZWdpbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5QT1NJVElPTiwgdmFsdWU6ICdeJyB9O1xufTtcblxuZXhwb3J0cy5lbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuUE9TSVRJT04sIHZhbHVlOiAnJCcgfTtcbn07XG4iLCJ2YXIgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5cbnZhciBJTlRTID0gZnVuY3Rpb24oKSB7XG4gcmV0dXJuIFt7IHR5cGU6IHR5cGVzLlJBTkdFICwgZnJvbTogNDgsIHRvOiA1NyB9XTtcbn07XG5cbnZhciBXT1JEUyA9IGZ1bmN0aW9uKCkge1xuIHJldHVybiBbXG4gICAgICB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA5NSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLlJBTkdFLCBmcm9tOiA5NywgdG86IDEyMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLlJBTkdFLCBmcm9tOiA2NSwgdG86IDkwIH1cbiAgXS5jb25jYXQoSU5UUygpKTtcbn07XG5cbnZhciBXSElURVNQQUNFID0gZnVuY3Rpb24oKSB7XG4gcmV0dXJuIFtcbiAgICAgIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDkgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTAgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTEgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTMgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMzIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTYwIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDU3NjAgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogNjE1OCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTkyIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTMgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5NCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTk1IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTYgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5NyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTk4IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTkgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIwMCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjAxIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMDIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIzMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjMzIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMzkgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODI4NyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMjI4OCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA2NTI3OSB9XG4gIF07XG59O1xuXG52YXIgTk9UQU5ZQ0hBUiA9IGZ1bmN0aW9uKCkge1xuIHJldHVybiBbXG4gICAgICB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjMyIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMzMgfVxuICBdO1xufTtcblxuLy8gcHJlZGVmaW5lZCBjbGFzcyBvYmplY3RzXG5leHBvcnRzLndvcmRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBXT1JEUygpLCBub3Q6IGZhbHNlIH07XG59O1xuXG5leHBvcnRzLm5vdFdvcmRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBXT1JEUygpLCBub3Q6IHRydWUgfTtcbn07XG5cbmV4cG9ydHMuaW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5TRVQsIHNldDogSU5UUygpLCBub3Q6IGZhbHNlIH07XG59O1xuXG5leHBvcnRzLm5vdEludHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IElOVFMoKSwgbm90OiB0cnVlIH07XG59O1xuXG5leHBvcnRzLndoaXRlc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IFdISVRFU1BBQ0UoKSwgbm90OiBmYWxzZSB9O1xufTtcblxuZXhwb3J0cy5ub3RXaGl0ZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBXSElURVNQQUNFKCksIG5vdDogdHJ1ZSB9O1xufTtcblxuZXhwb3J0cy5hbnlDaGFyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBOT1RBTllDSEFSKCksIG5vdDogdHJ1ZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgIFJPT1QgICAgICAgOiAwXG4gICwgR1JPVVAgICAgICA6IDFcbiAgLCBQT1NJVElPTiAgIDogMlxuICAsIFNFVCAgICAgICAgOiAzXG4gICwgUkFOR0UgICAgICA6IDRcbiAgLCBSRVBFVElUSU9OIDogNVxuICAsIFJFRkVSRU5DRSAgOiA2XG4gICwgQ0hBUiAgICAgICA6IDdcbn07XG4iLCJ2YXIgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG52YXIgc2V0cyAgPSByZXF1aXJlKCcuL3NldHMnKTtcblxuXG4vLyBBbGwgb2YgdGhlc2UgYXJlIHByaXZhdGUgYW5kIG9ubHkgdXNlZCBieSByYW5kZXhwLlxuLy8gSXQncyBhc3N1bWVkIHRoYXQgdGhleSB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCB0aGUgY29ycmVjdCBpbnB1dC5cblxudmFyIENUUkwgPSAnQEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXiA/JztcbnZhciBTTFNIID0geyAnMCc6IDAsICd0JzogOSwgJ24nOiAxMCwgJ3YnOiAxMSwgJ2YnOiAxMiwgJ3InOiAxMyB9O1xuXG4vKipcbiAqIEZpbmRzIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbnMgaW4gc3RyIGFuZCBjb252ZXJ0IGFsbCB0b1xuICogdGhlaXIgcmVzcGVjdGl2ZSBjaGFyYWN0ZXJzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5leHBvcnRzLnN0clRvQ2hhcnMgPSBmdW5jdGlvbihzdHIpIHtcbiAgdmFyIGNoYXJzX3JlZ2V4ID0gLyhcXFtcXFxcYlxcXSl8KFxcXFwpP1xcXFwoPzp1KFtBLUYwLTldezR9KXx4KFtBLUYwLTldezJ9KXwoMD9bMC03XXsyfSl8YyhbQEEtWlxcW1xcXFxcXF1cXF4/XSl8KFswdG52ZnJdKSkvZztcbiAgc3RyID0gc3RyLnJlcGxhY2UoY2hhcnNfcmVnZXgsIGZ1bmN0aW9uKHMsIGIsIGxicywgYTE2LCBiMTYsIGM4LCBkY3RybCwgZXNsc2gpIHtcbiAgICBcbiAgICBpZiAobGJzKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICB2YXIgY29kZSA9IGIgICAgID8gOCA6XG4gICAgICAgICAgICAgICBhMTYgICA/IHBhcnNlSW50KGExNiwgMTYpIDpcbiAgICAgICAgICAgICAgIGIxNiAgID8gcGFyc2VJbnQoYjE2LCAxNikgOlxuICAgICAgICAgICAgICAgYzggICAgPyBwYXJzZUludChjOCwgICA4KSA6XG4gICAgICAgICAgICAgICBkY3RybCA/IENUUkwuaW5kZXhPZihkY3RybCkgOlxuICAgICAgICAgICAgICAgZXNsc2ggPyBTTFNIW2VzbHNoXSA6IHVuZGVmaW5lZDtcbiAgICBcbiAgICB2YXIgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG5cbiAgICAvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzLlxuICAgIGlmICgvW1xcW1xcXXt9XFxeJC58PyorKCldLy50ZXN0KGMpKSB7XG4gICAgICBjID0gJ1xcXFwnICsgYztcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfSk7XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLyoqXG4gKiB0dXJucyBjbGFzcyBpbnRvIHRva2Vuc1xuICogcmVhZHMgc3RyIHVudGlsIGl0IGVuY291bnRlcnMgYSBdIG5vdCBwcmVjZWVkZWQgYnkgYSBcXFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWdleHBTdHJcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheS48T2JqZWN0PiwgTnVtYmVyPn1cbiAqL1xuZXhwb3J0cy50b2tlbml6ZUNsYXNzID0gZnVuY3Rpb24oc3RyLCByZWdleHBTdHIpIHtcbiAgdmFyIHRva2VucyA9IFtdXG4gICAgLCByZWdleHAgPSAvXFxcXCg/Oih3KXwoZCl8KHMpfChXKXwoRCl8KFMpKXwoKD86KD86XFxcXCkoLil8KFteXFxdXFxcXF0pKS0oPzpcXFxcKT8oW15cXF1dKSl8KFxcXSl8KD86XFxcXCk/KC4pL2dcbiAgICAsIHJzLCBjXG4gICAgO1xuXG5cbiAgd2hpbGUgKChycyA9IHJlZ2V4cC5leGVjKHN0cikpICE9IG51bGwpIHtcbiAgICBpZiAocnNbMV0pIHtcbiAgICAgIHRva2Vucy5wdXNoKHNldHMud29yZHMoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzJdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLmludHMoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzNdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLndoaXRlc3BhY2UoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzRdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLm5vdFdvcmRzKCkpO1xuXG4gICAgfSBlbHNlIGlmIChyc1s1XSkge1xuICAgICAgdG9rZW5zLnB1c2goc2V0cy5ub3RJbnRzKCkpO1xuXG4gICAgfSBlbHNlIGlmIChyc1s2XSkge1xuICAgICAgdG9rZW5zLnB1c2goc2V0cy5ub3RXaGl0ZXNwYWNlKCkpO1xuXG4gICAgfSBlbHNlIGlmIChyc1s3XSkge1xuICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IHR5cGVzLlJBTkdFXG4gICAgICAgICwgZnJvbTogKHJzWzhdIHx8IHJzWzldKS5jaGFyQ29kZUF0KDApXG4gICAgICAgICwgICB0bzogcnNbMTBdLmNoYXJDb2RlQXQoMClcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChjID0gcnNbMTJdKSB7XG4gICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogdHlwZXMuQ0hBUlxuICAgICAgICAsIHZhbHVlOiBjLmNoYXJDb2RlQXQoMClcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbdG9rZW5zLCByZWdleHAubGFzdEluZGV4XTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRzLmVycm9yKHJlZ2V4cFN0ciwgJ1VudGVybWluYXRlZCBjaGFyYWN0ZXIgY2xhc3MnKTtcbn07XG5cblxuLyoqXG4gKiBTaG9ydGN1dCB0byB0aHJvdyBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJlZ2V4cFxuICogQHBhcmFtIHtTdHJpbmd9IG1zZ1xuICovXG5leHBvcnRzLmVycm9yID0gZnVuY3Rpb24ocmVnZXhwLCBtc2cpIHtcbiAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogLycgKyByZWdleHAgKyAnLzogJyArIG1zZyk7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmV4cG9ydHMucGFyc2UgPSB1cmxQYXJzZTtcbmV4cG9ydHMucmVzb2x2ZSA9IHVybFJlc29sdmU7XG5leHBvcnRzLnJlc29sdmVPYmplY3QgPSB1cmxSZXNvbHZlT2JqZWN0O1xuZXhwb3J0cy5mb3JtYXQgPSB1cmxGb3JtYXQ7XG5cbmV4cG9ydHMuVXJsID0gVXJsO1xuXG5mdW5jdGlvbiBVcmwoKSB7XG4gIHRoaXMucHJvdG9jb2wgPSBudWxsO1xuICB0aGlzLnNsYXNoZXMgPSBudWxsO1xuICB0aGlzLmF1dGggPSBudWxsO1xuICB0aGlzLmhvc3QgPSBudWxsO1xuICB0aGlzLnBvcnQgPSBudWxsO1xuICB0aGlzLmhvc3RuYW1lID0gbnVsbDtcbiAgdGhpcy5oYXNoID0gbnVsbDtcbiAgdGhpcy5zZWFyY2ggPSBudWxsO1xuICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgdGhpcy5wYXRobmFtZSA9IG51bGw7XG4gIHRoaXMucGF0aCA9IG51bGw7XG4gIHRoaXMuaHJlZiA9IG51bGw7XG59XG5cbi8vIFJlZmVyZW5jZTogUkZDIDM5ODYsIFJGQyAxODA4LCBSRkMgMjM5NlxuXG4vLyBkZWZpbmUgdGhlc2UgaGVyZSBzbyBhdCBsZWFzdCB0aGV5IG9ubHkgaGF2ZSB0byBiZVxuLy8gY29tcGlsZWQgb25jZSBvbiB0aGUgZmlyc3QgbW9kdWxlIGxvYWQuXG52YXIgcHJvdG9jb2xQYXR0ZXJuID0gL14oW2EtejAtOS4rLV0rOikvaSxcbiAgICBwb3J0UGF0dGVybiA9IC86WzAtOV0qJC8sXG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGEgc2ltcGxlIHBhdGggVVJMXG4gICAgc2ltcGxlUGF0aFBhdHRlcm4gPSAvXihcXC9cXC8/KD8hXFwvKVteXFw/XFxzXSopKFxcP1teXFxzXSopPyQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eWythLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBjYW4gYWxsb3cgXCJ1bnNhZmVcIiBhbmQgXCJ1bndpc2VcIiBjaGFycy5cbiAgICB1bnNhZmVQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IG5ldmVyIGhhdmUgYSBob3N0bmFtZS5cbiAgICBob3N0bGVzc1Byb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgYWx3YXlzIGNvbnRhaW4gYSAvLyBiaXQuXG4gICAgc2xhc2hlZFByb3RvY29sID0ge1xuICAgICAgJ2h0dHAnOiB0cnVlLFxuICAgICAgJ2h0dHBzJzogdHJ1ZSxcbiAgICAgICdmdHAnOiB0cnVlLFxuICAgICAgJ2dvcGhlcic6IHRydWUsXG4gICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAnaHR0cDonOiB0cnVlLFxuICAgICAgJ2h0dHBzOic6IHRydWUsXG4gICAgICAnZnRwOic6IHRydWUsXG4gICAgICAnZ29waGVyOic6IHRydWUsXG4gICAgICAnZmlsZTonOiB0cnVlXG4gICAgfSxcbiAgICBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbmZ1bmN0aW9uIHVybFBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKHVybCAmJiB1dGlsLmlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghdXRpbC5pc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIC8vIENvcHkgY2hyb21lLCBJRSwgb3BlcmEgYmFja3NsYXNoLWhhbmRsaW5nIGJlaGF2aW9yLlxuICAvLyBCYWNrIHNsYXNoZXMgYmVmb3JlIHRoZSBxdWVyeSBzdHJpbmcgZ2V0IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXNcbiAgLy8gU2VlOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjU5MTZcbiAgdmFyIHF1ZXJ5SW5kZXggPSB1cmwuaW5kZXhPZignPycpLFxuICAgICAgc3BsaXR0ZXIgPVxuICAgICAgICAgIChxdWVyeUluZGV4ICE9PSAtMSAmJiBxdWVyeUluZGV4IDwgdXJsLmluZGV4T2YoJyMnKSkgPyAnPycgOiAnIycsXG4gICAgICB1U3BsaXQgPSB1cmwuc3BsaXQoc3BsaXR0ZXIpLFxuICAgICAgc2xhc2hSZWdleCA9IC9cXFxcL2c7XG4gIHVTcGxpdFswXSA9IHVTcGxpdFswXS5yZXBsYWNlKHNsYXNoUmVnZXgsICcvJyk7XG4gIHVybCA9IHVTcGxpdC5qb2luKHNwbGl0dGVyKTtcblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICBpZiAoIXNsYXNoZXNEZW5vdGVIb3N0ICYmIHVybC5zcGxpdCgnIycpLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIFRyeSBmYXN0IHBhdGggcmVnZXhwXG4gICAgdmFyIHNpbXBsZVBhdGggPSBzaW1wbGVQYXRoUGF0dGVybi5leGVjKHJlc3QpO1xuICAgIGlmIChzaW1wbGVQYXRoKSB7XG4gICAgICB0aGlzLnBhdGggPSByZXN0O1xuICAgICAgdGhpcy5ocmVmID0gcmVzdDtcbiAgICAgIHRoaXMucGF0aG5hbWUgPSBzaW1wbGVQYXRoWzFdO1xuICAgICAgaWYgKHNpbXBsZVBhdGhbMl0pIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSBzaW1wbGVQYXRoWzJdO1xuICAgICAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnNlYXJjaC5zdWJzdHIoMSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlYXJjaC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueWNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmXG4gICAgICAvLyB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQgYWxyZWFkeSBpcyBBU0NJSS1vbmx5LlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHB1bnljb2RlLnRvQVNDSUkodGhpcy5ob3N0bmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgaWYgKHJlc3QuaW5kZXhPZihhZSkgPT09IC0xKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHZhciBlc2MgPSBlbmNvZGVVUklDb21wb25lbnQoYWUpO1xuICAgICAgaWYgKGVzYyA9PT0gYWUpIHtcbiAgICAgICAgZXNjID0gZXNjYXBlKGFlKTtcbiAgICAgIH1cbiAgICAgIHJlc3QgPSByZXN0LnNwbGl0KGFlKS5qb2luKGVzYyk7XG4gICAgfVxuICB9XG5cblxuICAvLyBjaG9wIG9mZiBmcm9tIHRoZSB0YWlsIGZpcnN0LlxuICB2YXIgaGFzaCA9IHJlc3QuaW5kZXhPZignIycpO1xuICBpZiAoaGFzaCAhPT0gLTEpIHtcbiAgICAvLyBnb3QgYSBmcmFnbWVudCBzdHJpbmcuXG4gICAgdGhpcy5oYXNoID0gcmVzdC5zdWJzdHIoaGFzaCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgaGFzaCk7XG4gIH1cbiAgdmFyIHFtID0gcmVzdC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxbSAhPT0gLTEpIHtcbiAgICB0aGlzLnNlYXJjaCA9IHJlc3Quc3Vic3RyKHFtKTtcbiAgICB0aGlzLnF1ZXJ5ID0gcmVzdC5zdWJzdHIocW0gKyAxKTtcbiAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMucXVlcnkpO1xuICAgIH1cbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBxbSk7XG4gIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgIC8vIG5vIHF1ZXJ5IHN0cmluZywgYnV0IHBhcnNlUXVlcnlTdHJpbmcgc3RpbGwgcmVxdWVzdGVkXG4gICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICB0aGlzLnF1ZXJ5ID0ge307XG4gIH1cbiAgaWYgKHJlc3QpIHRoaXMucGF0aG5hbWUgPSByZXN0O1xuICBpZiAoc2xhc2hlZFByb3RvY29sW2xvd2VyUHJvdG9dICYmXG4gICAgICB0aGlzLmhvc3RuYW1lICYmICF0aGlzLnBhdGhuYW1lKSB7XG4gICAgdGhpcy5wYXRobmFtZSA9ICcvJztcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgaWYgKHRoaXMucGF0aG5hbWUgfHwgdGhpcy5zZWFyY2gpIHtcbiAgICB2YXIgcCA9IHRoaXMucGF0aG5hbWUgfHwgJyc7XG4gICAgdmFyIHMgPSB0aGlzLnNlYXJjaCB8fCAnJztcbiAgICB0aGlzLnBhdGggPSBwICsgcztcbiAgfVxuXG4gIC8vIGZpbmFsbHksIHJlY29uc3RydWN0IHRoZSBocmVmIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gdmFsaWRhdGVkLlxuICB0aGlzLmhyZWYgPSB0aGlzLmZvcm1hdCgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGZvcm1hdCBhIHBhcnNlZCBvYmplY3QgaW50byBhIHVybCBzdHJpbmdcbmZ1bmN0aW9uIHVybEZvcm1hdChvYmopIHtcbiAgLy8gZW5zdXJlIGl0J3MgYW4gb2JqZWN0LCBhbmQgbm90IGEgc3RyaW5nIHVybC5cbiAgLy8gSWYgaXQncyBhbiBvYmosIHRoaXMgaXMgYSBuby1vcC5cbiAgLy8gdGhpcyB3YXksIHlvdSBjYW4gY2FsbCB1cmxfZm9ybWF0KCkgb24gc3RyaW5nc1xuICAvLyB0byBjbGVhbiB1cCBwb3RlbnRpYWxseSB3b25reSB1cmxzLlxuICBpZiAodXRpbC5pc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICB1dGlsLmlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmICh1dGlsLmlzU3RyaW5nKHJlbGF0aXZlKSkge1xuICAgIHZhciByZWwgPSBuZXcgVXJsKCk7XG4gICAgcmVsLnBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgcmVsYXRpdmUgPSByZWw7XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gbmV3IFVybCgpO1xuICB2YXIgdGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgZm9yICh2YXIgdGsgPSAwOyB0ayA8IHRrZXlzLmxlbmd0aDsgdGsrKykge1xuICAgIHZhciB0a2V5ID0gdGtleXNbdGtdO1xuICAgIHJlc3VsdFt0a2V5XSA9IHRoaXNbdGtleV07XG4gIH1cblxuICAvLyBoYXNoIGlzIGFsd2F5cyBvdmVycmlkZGVuLCBubyBtYXR0ZXIgd2hhdC5cbiAgLy8gZXZlbiBocmVmPVwiXCIgd2lsbCByZW1vdmUgaXQuXG4gIHJlc3VsdC5oYXNoID0gcmVsYXRpdmUuaGFzaDtcblxuICAvLyBpZiB0aGUgcmVsYXRpdmUgdXJsIGlzIGVtcHR5LCB0aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvIGhlcmUuXG4gIGlmIChyZWxhdGl2ZS5ocmVmID09PSAnJykge1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBocmVmcyBsaWtlIC8vZm9vL2JhciBhbHdheXMgY3V0IHRvIHRoZSBwcm90b2NvbC5cbiAgaWYgKHJlbGF0aXZlLnNsYXNoZXMgJiYgIXJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgLy8gdGFrZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgcHJvdG9jb2wgZnJvbSByZWxhdGl2ZVxuICAgIHZhciBya2V5cyA9IE9iamVjdC5rZXlzKHJlbGF0aXZlKTtcbiAgICBmb3IgKHZhciByayA9IDA7IHJrIDwgcmtleXMubGVuZ3RoOyByaysrKSB7XG4gICAgICB2YXIgcmtleSA9IHJrZXlzW3JrXTtcbiAgICAgIGlmIChya2V5ICE9PSAncHJvdG9jb2wnKVxuICAgICAgICByZXN1bHRbcmtleV0gPSByZWxhdGl2ZVtya2V5XTtcbiAgICB9XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhyZWxhdGl2ZSk7XG4gICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW3ZdO1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIXV0aWwuaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFsbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIXV0aWwuaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIXV0aWwuaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgLy8gbm8gcGF0aCBhdCBhbGwuICBlYXN5LlxuICAgIC8vIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgb3RoZXIgc3R1ZmYgYWJvdmUuXG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gJy8nICsgcmVzdWx0LnNlYXJjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaWYgYSB1cmwgRU5EcyBpbiAuIG9yIC4uLCB0aGVuIGl0IG11c3QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIC8vIGhvd2V2ZXIsIGlmIGl0IGVuZHMgaW4gYW55dGhpbmcgZWxzZSBub24tc2xhc2h5LFxuICAvLyB0aGVuIGl0IG11c3QgTk9UIGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICB2YXIgbGFzdCA9IHNyY1BhdGguc2xpY2UoLTEpWzBdO1xuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IChcbiAgICAgIChyZXN1bHQuaG9zdCB8fCByZWxhdGl2ZS5ob3N0IHx8IHNyY1BhdGgubGVuZ3RoID4gMSkgJiZcbiAgICAgIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHwgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbGx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICB9XG4gIH1cblxuICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyB8fCAocmVzdWx0Lmhvc3QgJiYgc3JjUGF0aC5sZW5ndGgpO1xuXG4gIGlmIChtdXN0RW5kQWJzICYmICFpc0Fic29sdXRlKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBzcmNQYXRoLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCByZXF1ZXN0Lmh0dHBcbiAgaWYgKCF1dGlsLmlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICF1dGlsLmlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1N0cmluZzogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZihhcmcpID09PSAnc3RyaW5nJztcbiAgfSxcbiAgaXNPYmplY3Q6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICB9LFxuICBpc051bGw6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBhcmcgPT09IG51bGw7XG4gIH0sXG4gIGlzTnVsbE9yVW5kZWZpbmVkOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09IG51bGw7XG4gIH1cbn07XG4iLCIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNSBDaHJpcyBPJ0hhcmEgPGNvaGFyYTg3QGdtYWlsLmNvbT5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuICogXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4gKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4gKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xuICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRVxuICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTlxuICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4gKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4oZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLnBldGFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICBkZWZpbmUobmFtZSwgW10sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG4gICAgfVxufSkoJ3ZhbGlkYXRvcicsIGZ1bmN0aW9uICh2YWxpZGF0b3IpIHtcblxuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhbGlkYXRvciA9IHsgdmVyc2lvbjogJzQuNS4wJyB9O1xuXG4gICAgdmFyIGVtYWlsVXNlclBhcnQgPSAvXlthLXpcXGQhI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl0rJC9pO1xuICAgIHZhciBxdW90ZWRFbWFpbFVzZXIgPSAvXihbXFxzXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3ZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3ZV18KFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdKSkqJC9pO1xuXG4gICAgdmFyIGVtYWlsVXNlclV0ZjhQYXJ0ID0gL15bYS16XFxkISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5cXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKyQvaTtcbiAgICB2YXIgcXVvdGVkRW1haWxVc2VyVXRmOCA9IC9eKFtcXHNcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDdmXFx4MjFcXHgyMy1cXHg1YlxceDVkLVxceDdlXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXXwoXFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZC1cXHg3ZlxcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSokL2k7XG5cbiAgICB2YXIgZGlzcGxheU5hbWUgPSAvXlthLXpcXGQhI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9flxcLlxcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0rW2EtelxcZCEjXFwkJSYnXFwqXFwrXFwtXFwvPVxcP1xcXl9ge1xcfH1+XFwuXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXFxzXSo8KC4rKT4kL2k7XG5cbiAgICB2YXIgY3JlZGl0Q2FyZCA9IC9eKD86NFswLTldezEyfSg/OlswLTldezN9KT98NVsxLTVdWzAtOV17MTR9fDYoPzowMTF8NVswLTldWzAtOV0pWzAtOV17MTJ9fDNbNDddWzAtOV17MTN9fDMoPzowWzAtNV18WzY4XVswLTldKVswLTldezExfXwoPzoyMTMxfDE4MDB8MzVcXGR7M30pXFxkezExfSkkLztcblxuICAgIHZhciBpc2luID0gL15bQS1aXXsyfVswLTlBLVpdezl9WzAtOV0kLztcblxuICAgIHZhciBpc2JuMTBNYXliZSA9IC9eKD86WzAtOV17OX1YfFswLTldezEwfSkkL1xuICAgICAgLCBpc2JuMTNNYXliZSA9IC9eKD86WzAtOV17MTN9KSQvO1xuXG4gICAgdmFyIG1hY0FkZHJlc3MgPSAvXihbMC05YS1mQS1GXVswLTlhLWZBLUZdOil7NX0oWzAtOWEtZkEtRl1bMC05YS1mQS1GXSkkLztcblxuICAgIHZhciBpcHY0TWF5YmUgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSQvXG4gICAgICAsIGlwdjZCbG9jayA9IC9eWzAtOUEtRl17MSw0fSQvaTtcblxuICAgIHZhciB1dWlkID0ge1xuICAgICAgICAnMyc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tM1swLTlBLUZdezN9LVswLTlBLUZdezR9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCAnNCc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tNFswLTlBLUZdezN9LVs4OUFCXVswLTlBLUZdezN9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCAnNSc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tNVswLTlBLUZdezN9LVs4OUFCXVswLTlBLUZdezN9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCBhbGw6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tWzAtOUEtRl17NH0tWzAtOUEtRl17NH0tWzAtOUEtRl17MTJ9JC9pXG4gICAgfTtcblxuICAgIHZhciBhbHBoYSA9IC9eW0EtWl0rJC9pXG4gICAgICAsIGFscGhhbnVtZXJpYyA9IC9eWzAtOUEtWl0rJC9pXG4gICAgICAsIG51bWVyaWMgPSAvXlstK10/WzAtOV0rJC9cbiAgICAgICwgaW50ID0gL14oPzpbLStdPyg/OjB8WzEtOV1bMC05XSopKSQvXG4gICAgICAsIGZsb2F0ID0gL14oPzpbLStdPyg/OlswLTldKykpPyg/OlxcLlswLTldKik/KD86W2VFXVtcXCtcXC1dPyg/OlswLTldKykpPyQvXG4gICAgICAsIGhleGFkZWNpbWFsID0gL15bMC05QS1GXSskL2lcbiAgICAgICwgZGVjaW1hbCA9IC9eWy0rXT8oWzAtOV0rfFxcLlswLTldK3xbMC05XStcXC5bMC05XSspJC9cbiAgICAgICwgaGV4Y29sb3IgPSAvXiM/KFswLTlBLUZdezN9fFswLTlBLUZdezZ9KSQvaTtcblxuICAgIHZhciBhc2NpaSA9IC9eW1xceDAwLVxceDdGXSskL1xuICAgICAgLCBtdWx0aWJ5dGUgPSAvW15cXHgwMC1cXHg3Rl0vXG4gICAgICAsIGZ1bGxXaWR0aCA9IC9bXlxcdTAwMjAtXFx1MDA3RVxcdUZGNjEtXFx1RkY5RlxcdUZGQTAtXFx1RkZEQ1xcdUZGRTgtXFx1RkZFRTAtOWEtekEtWl0vXG4gICAgICAsIGhhbGZXaWR0aCA9IC9bXFx1MDAyMC1cXHUwMDdFXFx1RkY2MS1cXHVGRjlGXFx1RkZBMC1cXHVGRkRDXFx1RkZFOC1cXHVGRkVFMC05YS16QS1aXS87XG5cbiAgICB2YXIgc3Vycm9nYXRlUGFpciA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdLztcblxuICAgIHZhciBiYXNlNjQgPSAvXig/OltBLVowLTkrXFwvXXs0fSkqKD86W0EtWjAtOStcXC9dezJ9PT18W0EtWjAtOStcXC9dezN9PXxbQS1aMC05K1xcL117NH0pJC9pO1xuXG4gICAgdmFyIHBob25lcyA9IHtcbiAgICAgICd6aC1DTic6IC9eKFxcKz8wPzg2XFwtPyk/KCgxM1xcZHwxNFs1N118MTVbXjQsXFxEXXwxN1s2NzhdfDE4XFxkKVxcZHs4fXwxNzBbMDU5XVxcZHs3fSkkLyxcbiAgICAgICd6aC1UVyc6IC9eKFxcKz84ODZcXC0/fDApPzlcXGR7OH0kLyxcbiAgICAgICdlbi1aQSc6IC9eKFxcKz8yN3wwKVxcZHs5fSQvLFxuICAgICAgJ2VuLUFVJzogL14oXFwrPzYxfDApNFxcZHs4fSQvLFxuICAgICAgJ2VuLUhLJzogL14oXFwrPzg1MlxcLT8pP1s1NjldXFxkezN9XFwtP1xcZHs0fSQvLFxuICAgICAgJ2ZyLUZSJzogL14oXFwrPzMzfDApWzY3XVxcZHs4fSQvLFxuICAgICAgJ3B0LVBUJzogL14oXFwrMzUxKT85WzEyMzZdXFxkezd9JC8sXG4gICAgICAnZWwtR1InOiAvXihcXCs/MzApPyg2OVxcZHs4fSkkLyxcbiAgICAgICdlbi1HQic6IC9eKFxcKz80NHwwKTdcXGR7OX0kLyxcbiAgICAgICdlbi1VUyc6IC9eKFxcKz8xKT9bMi05XVxcZHsyfVsyLTldKD8hMTEpXFxkezZ9JC8sXG4gICAgICAnZW4tWk0nOiAvXihcXCsyNik/MDlbNTY3XVxcZHs3fSQvLFxuICAgICAgJ3J1LVJVJzogL14oXFwrPzd8OCk/OVxcZHs5fSQvLFxuICAgICAgJ25iLU5PJzogL14oXFwrPzQ3KT9bNDldXFxkezd9JC8sXG4gICAgICAnbm4tTk8nOiAvXihcXCs/NDcpP1s0OV1cXGR7N30kLyxcbiAgICAgICd2aS1WTic6IC9eKDB8XFwrPzg0KT8oKDEoMihbMC05XSl8NihbMi05XSl8ODh8OTkpKXwoOSgoPyE1KVswLTldKSkpKFswLTldezd9KSQvLFxuICAgICAgJ2VuLU5aJzogL14oXFwrPzY0fDApMlxcZHs3LDl9JC8sXG4gICAgICAnZW4tSU4nOiAvXihcXCs/OTF8MCk/Wzc4OV1cXGR7OX0kL1xuICAgIH07XG5cbiAgICAvLyBmcm9tIGh0dHA6Ly9nb28uZ2wvMGVqSEhXXG4gICAgdmFyIGlzbzg2MDEgPSAvXihbXFwrLV0/XFxkezR9KD8hXFxkezJ9XFxiKSkoKC0/KSgoMFsxLTldfDFbMC0yXSkoXFwzKFsxMl1cXGR8MFsxLTldfDNbMDFdKSk/fFcoWzAtNF1cXGR8NVswLTJdKSgtP1sxLTddKT98KDAwWzEtOV18MFsxLTldXFxkfFsxMl1cXGR7Mn18MyhbMC01XVxcZHw2WzEtNl0pKSkoW1RcXHNdKCgoWzAxXVxcZHwyWzAtM10pKCg6PylbMC01XVxcZCk/fDI0XFw6PzAwKShbXFwuLF1cXGQrKD8hOikpPyk/KFxcMTdbMC01XVxcZChbXFwuLF1cXGQrKT8pPyhbelpdfChbXFwrLV0pKFswMV1cXGR8MlswLTNdKTo/KFswLTVdXFxkKT8pPyk/KT8kLztcblxuICAgIHZhbGlkYXRvci5leHRlbmQgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICAgICAgdmFsaWRhdG9yW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgYXJnc1swXSA9IHZhbGlkYXRvci50b1N0cmluZyhhcmdzWzBdKTtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh2YWxpZGF0b3IsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvL1JpZ2h0IGJlZm9yZSBleHBvcnRpbmcgdGhlIHZhbGlkYXRvciBvYmplY3QsIHBhc3MgZWFjaCBvZiB0aGUgYnVpbHRpbnNcbiAgICAvL3Rocm91Z2ggZXh0ZW5kKCkgc28gdGhhdCB0aGVpciBmaXJzdCBhcmd1bWVudCBpcyBjb2VyY2VkIHRvIGEgc3RyaW5nXG4gICAgdmFsaWRhdG9yLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvcltuYW1lXSAhPT0gJ2Z1bmN0aW9uJyB8fCBuYW1lID09PSAndG9TdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICd0b0RhdGUnIHx8IG5hbWUgPT09ICdleHRlbmQnIHx8IG5hbWUgPT09ICdpbml0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsaWRhdG9yLmV4dGVuZChuYW1lLCB2YWxpZGF0b3JbbmFtZV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b1N0cmluZyA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCAhPT0gbnVsbCAmJiBpbnB1dC50b1N0cmluZykge1xuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBudWxsIHx8IHR5cGVvZiBpbnB1dCA9PT0gJ3VuZGVmaW5lZCcgfHwgKGlzTmFOKGlucHV0KSAmJiAhaW5wdXQubGVuZ3RoKSkge1xuICAgICAgICAgICAgaW5wdXQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJycgKyBpbnB1dDtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLnRvRGF0ZSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0ZSkgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZSA9IERhdGUucGFyc2UoZGF0ZSk7XG4gICAgICAgIHJldHVybiAhaXNOYU4oZGF0ZSkgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGw7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b0Zsb2F0ID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IudG9JbnQgPSBmdW5jdGlvbiAoc3RyLCByYWRpeCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyLCByYWRpeCB8fCAxMCk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b0Jvb2xlYW4gPSBmdW5jdGlvbiAoc3RyLCBzdHJpY3QpIHtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ciA9PT0gJzEnIHx8IHN0ciA9PT0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHIgIT09ICcwJyAmJiBzdHIgIT09ICdmYWxzZScgJiYgc3RyICE9PSAnJztcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmVxdWFscyA9IGZ1bmN0aW9uIChzdHIsIGNvbXBhcmlzb24pIHtcbiAgICAgICAgcmV0dXJuIHN0ciA9PT0gdmFsaWRhdG9yLnRvU3RyaW5nKGNvbXBhcmlzb24pO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuY29udGFpbnMgPSBmdW5jdGlvbiAoc3RyLCBlbGVtKSB7XG4gICAgICAgIHJldHVybiBzdHIuaW5kZXhPZih2YWxpZGF0b3IudG9TdHJpbmcoZWxlbSkpID49IDA7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5tYXRjaGVzID0gZnVuY3Rpb24gKHN0ciwgcGF0dGVybiwgbW9kaWZpZXJzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGF0dGVybikgIT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBtb2RpZmllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmF1bHRfZW1haWxfb3B0aW9ucyA9IHtcbiAgICAgICAgYWxsb3dfZGlzcGxheV9uYW1lOiBmYWxzZSxcbiAgICAgICAgYWxsb3dfdXRmOF9sb2NhbF9wYXJ0OiB0cnVlLFxuICAgICAgICByZXF1aXJlX3RsZDogdHJ1ZVxuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNFbWFpbCA9IGZ1bmN0aW9uIChzdHIsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG1lcmdlKG9wdGlvbnMsIGRlZmF1bHRfZW1haWxfb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfZGlzcGxheV9uYW1lKSB7XG4gICAgICAgICAgICB2YXIgZGlzcGxheV9lbWFpbCA9IHN0ci5tYXRjaChkaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICBpZiAoZGlzcGxheV9lbWFpbCkge1xuICAgICAgICAgICAgICAgIHN0ciA9IGRpc3BsYXlfZW1haWxbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJ0AnKVxuICAgICAgICAgICwgZG9tYWluID0gcGFydHMucG9wKClcbiAgICAgICAgICAsIHVzZXIgPSBwYXJ0cy5qb2luKCdAJyk7XG5cbiAgICAgICAgdmFyIGxvd2VyX2RvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobG93ZXJfZG9tYWluID09PSAnZ21haWwuY29tJyB8fCBsb3dlcl9kb21haW4gPT09ICdnb29nbGVtYWlsLmNvbScpIHtcbiAgICAgICAgICAgIHVzZXIgPSB1c2VyLnJlcGxhY2UoL1xcLi9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aCh1c2VyLCAwLCA2NCkgfHxcbiAgICAgICAgICAgICAgICAhdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aChkb21haW4sIDAsIDI1NikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzRlFETihkb21haW4sIHtyZXF1aXJlX3RsZDogb3B0aW9ucy5yZXF1aXJlX3RsZH0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlclswXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgdXNlciA9IHVzZXIuc2xpY2UoMSwgdXNlci5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmFsbG93X3V0ZjhfbG9jYWxfcGFydCA/XG4gICAgICAgICAgICAgICAgcXVvdGVkRW1haWxVc2VyVXRmOC50ZXN0KHVzZXIpIDpcbiAgICAgICAgICAgICAgICBxdW90ZWRFbWFpbFVzZXIudGVzdCh1c2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXR0ZXJuID0gb3B0aW9ucy5hbGxvd191dGY4X2xvY2FsX3BhcnQgP1xuICAgICAgICAgICAgZW1haWxVc2VyVXRmOFBhcnQgOiBlbWFpbFVzZXJQYXJ0O1xuXG4gICAgICAgIHZhciB1c2VyX3BhcnRzID0gdXNlci5zcGxpdCgnLicpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZXJfcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi50ZXN0KHVzZXJfcGFydHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHZhciBkZWZhdWx0X3VybF9vcHRpb25zID0ge1xuICAgICAgICBwcm90b2NvbHM6IFsgJ2h0dHAnLCAnaHR0cHMnLCAnZnRwJyBdXG4gICAgICAsIHJlcXVpcmVfdGxkOiB0cnVlXG4gICAgICAsIHJlcXVpcmVfcHJvdG9jb2w6IGZhbHNlXG4gICAgICAsIHJlcXVpcmVfdmFsaWRfcHJvdG9jb2w6IHRydWVcbiAgICAgICwgYWxsb3dfdW5kZXJzY29yZXM6IGZhbHNlXG4gICAgICAsIGFsbG93X3RyYWlsaW5nX2RvdDogZmFsc2VcbiAgICAgICwgYWxsb3dfcHJvdG9jb2xfcmVsYXRpdmVfdXJsczogZmFsc2VcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzVVJMID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICAgICAgICBpZiAoIXVybCB8fCB1cmwubGVuZ3RoID49IDIwODMgfHwgL1xccy8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCdtYWlsdG86JykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF91cmxfb3B0aW9ucyk7XG4gICAgICAgIHZhciBwcm90b2NvbCwgYXV0aCwgaG9zdCwgaG9zdG5hbWUsIHBvcnQsXG4gICAgICAgICAgICBwb3J0X3N0ciwgc3BsaXQ7XG4gICAgICAgIHNwbGl0ID0gdXJsLnNwbGl0KCc6Ly8nKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHByb3RvY29sID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlcXVpcmVfdmFsaWRfcHJvdG9jb2wgJiYgb3B0aW9ucy5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMucmVxdWlyZV9wcm90b2NvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9ICBlbHNlIGlmIChvcHRpb25zLmFsbG93X3Byb3RvY29sX3JlbGF0aXZlX3VybHMgJiYgdXJsLnN1YnN0cigwLCAyKSA9PT0gJy8vJykge1xuICAgICAgICAgICAgc3BsaXRbMF0gPSB1cmwuc3Vic3RyKDIpO1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHNwbGl0LmpvaW4oJzovLycpO1xuICAgICAgICBzcGxpdCA9IHVybC5zcGxpdCgnIycpO1xuICAgICAgICB1cmwgPSBzcGxpdC5zaGlmdCgpO1xuXG4gICAgICAgIHNwbGl0ID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgICAgIHVybCA9IHNwbGl0LnNoaWZ0KCk7XG5cbiAgICAgICAgc3BsaXQgPSB1cmwuc3BsaXQoJy8nKTtcbiAgICAgICAgdXJsID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgc3BsaXQgPSB1cmwuc3BsaXQoJ0AnKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGF1dGggPSBzcGxpdC5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKGF1dGguaW5kZXhPZignOicpID49IDAgJiYgYXV0aC5zcGxpdCgnOicpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaG9zdG5hbWUgPSBzcGxpdC5qb2luKCdAJyk7XG4gICAgICAgIHNwbGl0ID0gaG9zdG5hbWUuc3BsaXQoJzonKTtcbiAgICAgICAgaG9zdCA9IHNwbGl0LnNoaWZ0KCk7XG4gICAgICAgIGlmIChzcGxpdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBvcnRfc3RyID0gc3BsaXQuam9pbignOicpO1xuICAgICAgICAgICAgcG9ydCA9IHBhcnNlSW50KHBvcnRfc3RyLCAxMCk7XG4gICAgICAgICAgICBpZiAoIS9eWzAtOV0rJC8udGVzdChwb3J0X3N0cikgfHwgcG9ydCA8PSAwIHx8IHBvcnQgPiA2NTUzNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRvci5pc0lQKGhvc3QpICYmICF2YWxpZGF0b3IuaXNGUUROKGhvc3QsIG9wdGlvbnMpICYmXG4gICAgICAgICAgICAgICAgaG9zdCAhPT0gJ2xvY2FsaG9zdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ob3N0X3doaXRlbGlzdCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaG9zdF93aGl0ZWxpc3QuaW5kZXhPZihob3N0KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ob3N0X2JsYWNrbGlzdCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaG9zdF9ibGFja2xpc3QuaW5kZXhPZihob3N0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTUFDQWRkcmVzcyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG1hY0FkZHJlc3MudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJUCA9IGZ1bmN0aW9uIChzdHIsIHZlcnNpb24pIHtcbiAgICAgICAgdmVyc2lvbiA9IHZhbGlkYXRvci50b1N0cmluZyh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yLmlzSVAoc3RyLCA0KSB8fCB2YWxpZGF0b3IuaXNJUChzdHIsIDYpO1xuICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb24gPT09ICc0Jykge1xuICAgICAgICAgICAgaWYgKCFpcHY0TWF5YmUudGVzdChzdHIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCcuJykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzNdIDw9IDI1NTtcbiAgICAgICAgfSBlbHNlIGlmICh2ZXJzaW9uID09PSAnNicpIHtcbiAgICAgICAgICAgIHZhciBibG9ja3MgPSBzdHIuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHZhciBmb3VuZE9taXNzaW9uQmxvY2sgPSBmYWxzZTsgLy8gbWFya2VyIHRvIGluZGljYXRlIDo6XG5cbiAgICAgICAgICAgIC8vIEF0IGxlYXN0IHNvbWUgT1MgYWNjZXB0IHRoZSBsYXN0IDMyIGJpdHMgb2YgYW4gSVB2NiBhZGRyZXNzXG4gICAgICAgICAgICAvLyAoaS5lLiAyIG9mIHRoZSBibG9ja3MpIGluIElQdjQgbm90YXRpb24sIGFuZCBSRkMgMzQ5MyBzYXlzXG4gICAgICAgICAgICAvLyB0aGF0ICc6OmZmZmY6YS5iLmMuZCcgaXMgdmFsaWQgZm9yIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzc2VzLFxuICAgICAgICAgICAgLy8gYW5kICc6OmEuYi5jLmQnIGlzIGRlcHJlY2F0ZWQsIGJ1dCBhbHNvIHZhbGlkLlxuICAgICAgICAgICAgdmFyIGZvdW5kSVB2NFRyYW5zaXRpb25CbG9jayA9IHZhbGlkYXRvci5pc0lQKGJsb2Nrc1tibG9ja3MubGVuZ3RoIC0gMV0sIDQpO1xuICAgICAgICAgICAgdmFyIGV4cGVjdGVkTnVtYmVyT2ZCbG9ja3MgPSBmb3VuZElQdjRUcmFuc2l0aW9uQmxvY2sgPyA3IDogODtcblxuICAgICAgICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPiBleHBlY3RlZE51bWJlck9mQmxvY2tzKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgLy8gaW5pdGlhbCBvciBmaW5hbCA6OlxuICAgICAgICAgICAgaWYgKHN0ciA9PT0gJzo6Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHIuc3Vic3RyKDAsIDIpID09PSAnOjonKSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgZm91bmRPbWlzc2lvbkJsb2NrID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gMikgPT09ICc6OicpIHtcbiAgICAgICAgICAgICAgICBibG9ja3MucG9wKCk7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGZvdW5kT21pc3Npb25CbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgLy8gdGVzdCBmb3IgYSA6OiB3aGljaCBjYW4gbm90IGJlIGF0IHRoZSBzdHJpbmcgc3RhcnQvZW5kXG4gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhvc2UgY2FzZXMgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2tzW2ldID09PSAnJyAmJiBpID4gMCAmJiBpIDwgYmxvY2tzLmxlbmd0aCAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRPbWlzc2lvbkJsb2NrKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBtdWx0aXBsZSA6OiBpbiBhZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kT21pc3Npb25CbG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZElQdjRUcmFuc2l0aW9uQmxvY2sgJiYgaSA9PSBibG9ja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpdCBoYXMgYmVlbiBjaGVja2VkIGJlZm9yZSB0aGF0IHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlzIGEgdmFsaWQgSVB2NCBhZGRyZXNzXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXB2NkJsb2NrLnRlc3QoYmxvY2tzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm91bmRPbWlzc2lvbkJsb2NrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2Nrcy5sZW5ndGggPj0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2Nrcy5sZW5ndGggPT09IGV4cGVjdGVkTnVtYmVyT2ZCbG9ja3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB2YXIgZGVmYXVsdF9mcWRuX29wdGlvbnMgPSB7XG4gICAgICAgIHJlcXVpcmVfdGxkOiB0cnVlXG4gICAgICAsIGFsbG93X3VuZGVyc2NvcmVzOiBmYWxzZVxuICAgICAgLCBhbGxvd190cmFpbGluZ19kb3Q6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0ZRRE4gPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBkZWZhdWx0X2ZxZG5fb3B0aW9ucyk7XG5cbiAgICAgICAgLyogUmVtb3ZlIHRoZSBvcHRpb25hbCB0cmFpbGluZyBkb3QgYmVmb3JlIGNoZWNraW5nIHZhbGlkaXR5ICovXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93X3RyYWlsaW5nX2RvdCAmJiBzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnLicpIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLicpO1xuICAgICAgICBpZiAob3B0aW9ucy5yZXF1aXJlX3RsZCkge1xuICAgICAgICAgICAgdmFyIHRsZCA9IHBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGggfHwgIS9eKFthLXpcXHUwMGExLVxcdWZmZmZdezIsfXx4blthLXowLTktXXsyLH0pJC9pLnRlc3QodGxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBwYXJ0LCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd191bmRlcnNjb3Jlcykge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJ19fJykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnJlcGxhY2UoL18vZywgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEvXlthLXpcXHUwMGExLVxcdWZmZmYwLTktXSskL2kudGVzdChwYXJ0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgvW1xcdWZmMDEtXFx1ZmY1ZV0vLnRlc3QocGFydCkpIHtcbiAgICAgICAgICAgICAgICAvLyBkaXNhbGxvdyBmdWxsLXdpZHRoIGNoYXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcnRbMF0gPT09ICctJyB8fCBwYXJ0W3BhcnQubGVuZ3RoIC0gMV0gPT09ICctJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJy0tLScpID49IDAgJiYgcGFydC5zbGljZSgwLCA0KSAhPT0gJ3huLS0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNCb29sZWFuID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHJldHVybiAoWyd0cnVlJywgJ2ZhbHNlJywgJzEnLCAnMCddLmluZGV4T2Yoc3RyKSA+PSAwKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQWxwaGEgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBhbHBoYS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGFscGhhbnVtZXJpYy50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc051bWVyaWMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBudW1lcmljLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRGVjaW1hbCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ciAhPT0gJycgJiYgZGVjaW1hbC50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0hleGFkZWNpbWFsID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gaGV4YWRlY2ltYWwudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNIZXhDb2xvciA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGhleGNvbG9yLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTG93ZXJjYXNlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyID09PSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzVXBwZXJjYXNlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyID09PSBzdHIudG9VcHBlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzSW50ID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGludC50ZXN0KHN0cikgJiYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KCdtaW4nKSB8fCBzdHIgPj0gb3B0aW9ucy5taW4pICYmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbWF4JykgfHwgc3RyIDw9IG9wdGlvbnMubWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRmxvYXQgPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbG9hdC50ZXN0KHN0cikgJiYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KCdtaW4nKSB8fCBzdHIgPj0gb3B0aW9ucy5taW4pICYmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbWF4JykgfHwgc3RyIDw9IG9wdGlvbnMubWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRGl2aXNpYmxlQnkgPSBmdW5jdGlvbiAoc3RyLCBudW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRvci50b0Zsb2F0KHN0cikgJSB2YWxpZGF0b3IudG9JbnQobnVtKSA9PT0gMDtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTnVsbCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDA7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0xlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIG1pbiwgbWF4KSB7XG4gICAgICAgIHZhciBzdXJyb2dhdGVQYWlycyA9IHN0ci5tYXRjaCgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nKSB8fCBbXTtcbiAgICAgICAgdmFyIGxlbiA9IHN0ci5sZW5ndGggLSBzdXJyb2dhdGVQYWlycy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBsZW4gPj0gbWluICYmICh0eXBlb2YgbWF4ID09PSAndW5kZWZpbmVkJyB8fCBsZW4gPD0gbWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIG1pbiwgbWF4KSB7XG4gICAgICAgIHZhciBsZW4gPSBlbmNvZGVVUkkoc3RyKS5zcGxpdCgvJS4ufC4vKS5sZW5ndGggLSAxO1xuICAgICAgICByZXR1cm4gbGVuID49IG1pbiAmJiAodHlwZW9mIG1heCA9PT0gJ3VuZGVmaW5lZCcgfHwgbGVuIDw9IG1heCk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc1VVSUQgPSBmdW5jdGlvbiAoc3RyLCB2ZXJzaW9uKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gdXVpZFt2ZXJzaW9uID8gdmVyc2lvbiA6ICdhbGwnXTtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4gJiYgcGF0dGVybi50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0KHN0cikge1xuICAgICAgICB2YXIgaXNvODYwMVBhcnRzID0gc3RyLm1hdGNoKGlzbzg2MDEpXG4gICAgICAgICAgLCB0aW1lem9uZSwgc2lnbiwgaG91cnMsIG1pbnV0ZXM7XG4gICAgICAgIGlmICghaXNvODYwMVBhcnRzKSB7XG4gICAgICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHRpbWV6b25lID0gc3RyLm1hdGNoKC8oPzpcXHN8Z210XFxzKikoLXxcXCspKFxcZHsxLDR9KShcXHN8JCkvKTtcbiAgICAgICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmluZGV4T2YoJ2dtdCcpICE9PSAtMSA/IDAgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2lnbiA9IHRpbWV6b25lWzFdO1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRpbWV6b25lWzJdO1xuICAgICAgICAgICAgaWYgKG9mZnNldC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAnMCcgKyBvZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0Lmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSAwO1xuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBwYXJzZUludChvZmZzZXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBob3VycyA9IHBhcnNlSW50KG9mZnNldC5zbGljZSgwLCAyKSk7XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IHBhcnNlSW50KG9mZnNldC5zbGljZSgyLCA0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lem9uZSA9IGlzbzg2MDFQYXJ0c1syMV07XG4gICAgICAgICAgICBpZiAoIXRpbWV6b25lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZXpvbmUgPT09ICd6JyB8fCB0aW1lem9uZSA9PT0gJ1onKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaWduID0gaXNvODYwMVBhcnRzWzIyXTtcbiAgICAgICAgICAgIGlmICh0aW1lem9uZS5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBwYXJzZUludChpc284NjAxUGFydHNbMjNdKTtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQoaXNvODYwMVBhcnRzWzI0XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhvdXJzID0gMDtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQoaXNvODYwMVBhcnRzWzIzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChob3VycyAqIDYwICsgbWludXRlcykgKiAoc2lnbiA9PT0gJy0nID8gMSA6IC0xKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3IuaXNEYXRlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZERhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKHN0cikpO1xuICAgICAgICBpZiAoaXNOYU4obm9ybWFsaXplZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub3JtYWxpemVkRGF0ZSBpcyBpbiB0aGUgdXNlcidzIHRpbWV6b25lLiBBcHBseSB0aGUgaW5wdXRcbiAgICAgICAgLy8gdGltZXpvbmUgb2Zmc2V0IHRvIHRoZSBkYXRlIHNvIHRoYXQgdGhlIHllYXIgYW5kIGRheSBtYXRjaFxuICAgICAgICAvLyB0aGUgaW5wdXRcbiAgICAgICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXQoc3RyKTtcbiAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgdGltZXpvbmVEaWZmZXJlbmNlID0gbm9ybWFsaXplZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAtXG4gICAgICAgICAgICAgICAgdGltZXpvbmVPZmZzZXQ7XG4gICAgICAgICAgICBub3JtYWxpemVkRGF0ZSA9IG5ldyBEYXRlKG5vcm1hbGl6ZWREYXRlLmdldFRpbWUoKSArXG4gICAgICAgICAgICAgICAgNjAwMDAgKiB0aW1lem9uZURpZmZlcmVuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRheSA9IFN0cmluZyhub3JtYWxpemVkRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB2YXIgZGF5T3JZZWFyLCBkYXlPclllYXJNYXRjaGVzLCB5ZWFyO1xuICAgICAgICAvL2NoZWNrIGZvciB2YWxpZCBkb3VibGUgZGlnaXRzIHRoYXQgY291bGQgYmUgbGF0ZSBkYXlzXG4gICAgICAgIC8vY2hlY2sgZm9yIGFsbCBtYXRjaGVzIHNpbmNlIGEgc3RyaW5nIGxpa2UgJzEyLzIzJyBpcyBhIHZhbGlkIGRhdGVcbiAgICAgICAgLy9pZ25vcmUgZXZlcnl0aGluZyB3aXRoIG5lYXJieSBjb2xvbnNcbiAgICAgICAgZGF5T3JZZWFyTWF0Y2hlcyA9IHN0ci5tYXRjaCgvKF58W146XFxkXSlbMjNdXFxkKFteOlxcZF18JCkvZyk7XG4gICAgICAgIGlmICghZGF5T3JZZWFyTWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZGF5T3JZZWFyID0gZGF5T3JZZWFyTWF0Y2hlcy5tYXAoZnVuY3Rpb24oZGlnaXRTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBkaWdpdFN0cmluZy5tYXRjaCgvXFxkKy9nKVswXTtcbiAgICAgICAgfSkuam9pbignLycpO1xuXG4gICAgICAgIHllYXIgPSBTdHJpbmcobm9ybWFsaXplZERhdGUuZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTIpO1xuICAgICAgICBpZiAoZGF5T3JZZWFyID09PSBkYXkgfHwgZGF5T3JZZWFyID09PSB5ZWFyKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoZGF5T3JZZWFyID09PSAoZGF5ICsgJy8nICsgeWVhcikpIHx8IChkYXlPclllYXIgPT09ICh5ZWFyICsgJy8nICsgZGF5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQWZ0ZXIgPSBmdW5jdGlvbiAoc3RyLCBkYXRlKSB7XG4gICAgICAgIHZhciBjb21wYXJpc29uID0gdmFsaWRhdG9yLnRvRGF0ZShkYXRlIHx8IG5ldyBEYXRlKCkpXG4gICAgICAgICAgLCBvcmlnaW5hbCA9IHZhbGlkYXRvci50b0RhdGUoc3RyKTtcbiAgICAgICAgcmV0dXJuICEhKG9yaWdpbmFsICYmIGNvbXBhcmlzb24gJiYgb3JpZ2luYWwgPiBjb21wYXJpc29uKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQmVmb3JlID0gZnVuY3Rpb24gKHN0ciwgZGF0ZSkge1xuICAgICAgICB2YXIgY29tcGFyaXNvbiA9IHZhbGlkYXRvci50b0RhdGUoZGF0ZSB8fCBuZXcgRGF0ZSgpKVxuICAgICAgICAgICwgb3JpZ2luYWwgPSB2YWxpZGF0b3IudG9EYXRlKHN0cik7XG4gICAgICAgIHJldHVybiAhIShvcmlnaW5hbCAmJiBjb21wYXJpc29uICYmIG9yaWdpbmFsIDwgY29tcGFyaXNvbik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0luID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb25zKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gdmFsaWRhdG9yLnRvU3RyaW5nKG9wdGlvbnNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2Yoc3RyKSA+PSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoc3RyKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmluZGV4T2Yoc3RyKSA+PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzV2hpdGVsaXN0ZWQgPSBmdW5jdGlvbiAoc3RyLCBjaGFycykge1xuICAgICAgICBmb3IgKHZhciBpID0gc3RyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoY2hhcnMuaW5kZXhPZihzdHJbaV0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNDcmVkaXRDYXJkID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgc2FuaXRpemVkID0gc3RyLnJlcGxhY2UoL1teMC05XSsvZywgJycpO1xuICAgICAgICBpZiAoIWNyZWRpdENhcmQudGVzdChzYW5pdGl6ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1bSA9IDAsIGRpZ2l0LCB0bXBOdW0sIHNob3VsZERvdWJsZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHNhbml0aXplZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgZGlnaXQgPSBzYW5pdGl6ZWQuc3Vic3RyaW5nKGksIChpICsgMSkpO1xuICAgICAgICAgICAgdG1wTnVtID0gcGFyc2VJbnQoZGlnaXQsIDEwKTtcbiAgICAgICAgICAgIGlmIChzaG91bGREb3VibGUpIHtcbiAgICAgICAgICAgICAgICB0bXBOdW0gKj0gMjtcbiAgICAgICAgICAgICAgICBpZiAodG1wTnVtID49IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSAoKHRtcE51bSAlIDEwKSArIDEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSB0bXBOdW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hvdWxkRG91YmxlID0gIXNob3VsZERvdWJsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISEoKHN1bSAlIDEwKSA9PT0gMCA/IHNhbml0aXplZCA6IGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzSVNJTiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFpc2luLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoZWNrc3VtU3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKGNoYXJhY3Rlcikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGNoYXJhY3RlciwgMzYpO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgc3VtID0gMCwgZGlnaXQsIHRtcE51bSwgc2hvdWxkRG91YmxlID0gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoZWNrc3VtU3RyLmxlbmd0aCAtIDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBkaWdpdCA9IGNoZWNrc3VtU3RyLnN1YnN0cmluZyhpLCAoaSArIDEpKTtcbiAgICAgICAgICAgIHRtcE51bSA9IHBhcnNlSW50KGRpZ2l0LCAxMCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkRG91YmxlKSB7XG4gICAgICAgICAgICAgICAgdG1wTnVtICo9IDI7XG4gICAgICAgICAgICAgICAgaWYgKHRtcE51bSA+PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtICsgMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3VtICs9IHRtcE51bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3VsZERvdWJsZSA9ICFzaG91bGREb3VibGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gMSksIDEwKSA9PT0gKDEwMDAwIC0gc3VtKSAlIDEwO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJU0JOID0gZnVuY3Rpb24gKHN0ciwgdmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uID0gdmFsaWRhdG9yLnRvU3RyaW5nKHZlcnNpb24pO1xuICAgICAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNJU0JOKHN0ciwgMTApIHx8IHZhbGlkYXRvci5pc0lTQk4oc3RyLCAxMyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNhbml0aXplZCA9IHN0ci5yZXBsYWNlKC9bXFxzLV0rL2csICcnKVxuICAgICAgICAgICwgY2hlY2tzdW0gPSAwLCBpO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gJzEwJykge1xuICAgICAgICAgICAgaWYgKCFpc2JuMTBNYXliZS50ZXN0KHNhbml0aXplZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gKGkgKyAxKSAqIHNhbml0aXplZC5jaGFyQXQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2FuaXRpemVkLmNoYXJBdCg5KSA9PT0gJ1gnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gMTAgKiAxMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gMTAgKiBzYW5pdGl6ZWQuY2hhckF0KDkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChjaGVja3N1bSAlIDExKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXNhbml0aXplZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlICBpZiAodmVyc2lvbiA9PT0gJzEzJykge1xuICAgICAgICAgICAgaWYgKCFpc2JuMTNNYXliZS50ZXN0KHNhbml0aXplZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZmFjdG9yID0gWyAxLCAzIF07XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgICAgIGNoZWNrc3VtICs9IGZhY3RvcltpICUgMl0gKiBzYW5pdGl6ZWQuY2hhckF0KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNhbml0aXplZC5jaGFyQXQoMTIpIC0gKCgxMCAtIChjaGVja3N1bSAlIDEwKSkgJSAxMCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFzYW5pdGl6ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNNb2JpbGVQaG9uZSA9IGZ1bmN0aW9uKHN0ciwgbG9jYWxlKSB7XG4gICAgICAgIGlmIChsb2NhbGUgaW4gcGhvbmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcGhvbmVzW2xvY2FsZV0udGVzdChzdHIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmF1bHRfY3VycmVuY3lfb3B0aW9ucyA9IHtcbiAgICAgICAgc3ltYm9sOiAnJCdcbiAgICAgICwgcmVxdWlyZV9zeW1ib2w6IGZhbHNlXG4gICAgICAsIGFsbG93X3NwYWNlX2FmdGVyX3N5bWJvbDogZmFsc2VcbiAgICAgICwgc3ltYm9sX2FmdGVyX2RpZ2l0czogZmFsc2VcbiAgICAgICwgYWxsb3dfbmVnYXRpdmVzOiB0cnVlXG4gICAgICAsIHBhcmVuc19mb3JfbmVnYXRpdmVzOiBmYWxzZVxuICAgICAgLCBuZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHM6IGZhbHNlXG4gICAgICAsIG5lZ2F0aXZlX3NpZ25fYWZ0ZXJfZGlnaXRzOiBmYWxzZVxuICAgICAgLCBhbGxvd19uZWdhdGl2ZV9zaWduX3BsYWNlaG9sZGVyOiBmYWxzZVxuICAgICAgLCB0aG91c2FuZHNfc2VwYXJhdG9yOiAnLCdcbiAgICAgICwgZGVjaW1hbF9zZXBhcmF0b3I6ICcuJ1xuICAgICAgLCBhbGxvd19zcGFjZV9hZnRlcl9kaWdpdHM6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0N1cnJlbmN5ID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF9jdXJyZW5jeV9vcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gY3VycmVuY3lSZWdleChvcHRpb25zKS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0pTT04gPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICAgICAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc011bHRpYnl0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpYnl0ZS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0FzY2lpID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gYXNjaWkudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNGdWxsV2lkdGggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBmdWxsV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNIYWxmV2lkdGggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBoYWxmV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNWYXJpYWJsZVdpZHRoID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gZnVsbFdpZHRoLnRlc3Qoc3RyKSAmJiBoYWxmV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNTdXJyb2dhdGVQYWlyID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3Vycm9nYXRlUGFpci50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0Jhc2U2NCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGJhc2U2NC50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc01vbmdvSWQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNIZXhhZGVjaW1hbChzdHIpICYmIHN0ci5sZW5ndGggPT09IDI0O1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJU084NjAxID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gaXNvODYwMS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5sdHJpbSA9IGZ1bmN0aW9uIChzdHIsIGNoYXJzKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gY2hhcnMgPyBuZXcgUmVnRXhwKCdeWycgKyBjaGFycyArICddKycsICdnJykgOiAvXlxccysvZztcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sICcnKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLnJ0cmltID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgdmFyIHBhdHRlcm4gPSBjaGFycyA/IG5ldyBSZWdFeHAoJ1snICsgY2hhcnMgKyAnXSskJywgJ2cnKSA6IC9cXHMrJC9nO1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocGF0dGVybiwgJycpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IudHJpbSA9IGZ1bmN0aW9uIChzdHIsIGNoYXJzKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gY2hhcnMgPyBuZXcgUmVnRXhwKCdeWycgKyBjaGFycyArICddK3xbJyArIGNoYXJzICsgJ10rJCcsICdnJykgOiAvXlxccyt8XFxzKyQvZztcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sICcnKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmVzY2FwZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIChzdHIucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyYjeDI3OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICcmI3gyRjsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYC9nLCAnJiM5NjsnKSk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5zdHJpcExvdyA9IGZ1bmN0aW9uIChzdHIsIGtlZXBfbmV3X2xpbmVzKSB7XG4gICAgICAgIHZhciBjaGFycyA9IGtlZXBfbmV3X2xpbmVzID8gJ1xcXFx4MDAtXFxcXHgwOVxcXFx4MEJcXFxceDBDXFxcXHgwRS1cXFxceDFGXFxcXHg3RicgOiAnXFxcXHgwMC1cXFxceDFGXFxcXHg3Ric7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuYmxhY2tsaXN0KHN0ciwgY2hhcnMpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3Iud2hpdGVsaXN0ID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1teJyArIGNoYXJzICsgJ10rJywgJ2cnKSwgJycpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuYmxhY2tsaXN0ID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1snICsgY2hhcnMgKyAnXSsnLCAnZycpLCAnJyk7XG4gICAgfTtcblxuICAgIHZhciBkZWZhdWx0X25vcm1hbGl6ZV9lbWFpbF9vcHRpb25zID0ge1xuICAgICAgICBsb3dlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlbW92ZV9kb3RzOiB0cnVlLFxuICAgICAgICByZW1vdmVfZXh0ZW5zaW9uOiB0cnVlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5ub3JtYWxpemVFbWFpbCA9IGZ1bmN0aW9uIChlbWFpbCwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF9ub3JtYWxpemVfZW1haWxfb3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzRW1haWwoZW1haWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcnRzID0gZW1haWwuc3BsaXQoJ0AnLCAyKTtcbiAgICAgICAgcGFydHNbMV0gPSBwYXJ0c1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAocGFydHNbMV0gPT09ICdnbWFpbC5jb20nIHx8IHBhcnRzWzFdID09PSAnZ29vZ2xlbWFpbC5jb20nKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZW1vdmVfZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgcGFydHNbMF0gPSBwYXJ0c1swXS5zcGxpdCgnKycpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVtb3ZlX2RvdHMpIHtcbiAgICAgICAgICAgICAgICBwYXJ0c1swXSA9IHBhcnRzWzBdLnJlcGxhY2UoL1xcLi9nLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXBhcnRzWzBdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHBhcnRzWzFdID0gJ2dtYWlsLmNvbSc7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sb3dlcmNhc2UpIHtcbiAgICAgICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydHMuam9pbignQCcpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBtZXJnZShvYmosIGRlZmF1bHRzKSB7XG4gICAgICAgIG9iaiA9IG9iaiB8fCB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbmN5UmVnZXgob3B0aW9ucykge1xuICAgICAgICB2YXIgc3ltYm9sID0gJyhcXFxcJyArIG9wdGlvbnMuc3ltYm9sLnJlcGxhY2UoL1xcLi9nLCAnXFxcXC4nKSArICcpJyArIChvcHRpb25zLnJlcXVpcmVfc3ltYm9sID8gJycgOiAnPycpXG4gICAgICAgICAgICAsIG5lZ2F0aXZlID0gJy0/J1xuICAgICAgICAgICAgLCB3aG9sZV9kb2xsYXJfYW1vdW50X3dpdGhvdXRfc2VwID0gJ1sxLTldXFxcXGQqJ1xuICAgICAgICAgICAgLCB3aG9sZV9kb2xsYXJfYW1vdW50X3dpdGhfc2VwID0gJ1sxLTldXFxcXGR7MCwyfShcXFxcJyArIG9wdGlvbnMudGhvdXNhbmRzX3NlcGFyYXRvciArICdcXFxcZHszfSkqJ1xuICAgICAgICAgICAgLCB2YWxpZF93aG9sZV9kb2xsYXJfYW1vdW50cyA9IFsnMCcsIHdob2xlX2RvbGxhcl9hbW91bnRfd2l0aG91dF9zZXAsIHdob2xlX2RvbGxhcl9hbW91bnRfd2l0aF9zZXBdXG4gICAgICAgICAgICAsIHdob2xlX2RvbGxhcl9hbW91bnQgPSAnKCcgKyB2YWxpZF93aG9sZV9kb2xsYXJfYW1vdW50cy5qb2luKCd8JykgKyAnKT8nXG4gICAgICAgICAgICAsIGRlY2ltYWxfYW1vdW50ID0gJyhcXFxcJyArIG9wdGlvbnMuZGVjaW1hbF9zZXBhcmF0b3IgKyAnXFxcXGR7Mn0pPyc7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gd2hvbGVfZG9sbGFyX2Ftb3VudCArIGRlY2ltYWxfYW1vdW50O1xuICAgICAgICAvLyBkZWZhdWx0IGlzIG5lZ2F0aXZlIHNpZ24gYmVmb3JlIHN5bWJvbCwgYnV0IHRoZXJlIGFyZSB0d28gb3RoZXIgb3B0aW9ucyAoYmVzaWRlcyBwYXJlbnMpXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93X25lZ2F0aXZlcyAmJiAhb3B0aW9ucy5wYXJlbnNfZm9yX25lZ2F0aXZlcykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmVnYXRpdmVfc2lnbl9hZnRlcl9kaWdpdHMpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuICs9IG5lZ2F0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5uZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHMpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbmVnYXRpdmUgKyBwYXR0ZXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNvdXRoIEFmcmljYW4gUmFuZCwgZm9yIGV4YW1wbGUsIHVzZXMgUiAxMjMgKHNwYWNlKSBhbmQgUi0xMjMgKG5vIHNwYWNlKVxuICAgICAgICBpZiAob3B0aW9ucy5hbGxvd19uZWdhdGl2ZV9zaWduX3BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gJyggKD8hXFxcXC0pKT8nICsgcGF0dGVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLmFsbG93X3NwYWNlX2FmdGVyX3N5bWJvbCkge1xuICAgICAgICAgICAgcGF0dGVybiA9ICcgPycgKyBwYXR0ZXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuYWxsb3dfc3BhY2VfYWZ0ZXJfZGlnaXRzKSB7XG4gICAgICAgICAgICBwYXR0ZXJuICs9ICcoICg/ISQpKT8nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnN5bWJvbF9hZnRlcl9kaWdpdHMpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gKz0gc3ltYm9sO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybiA9IHN5bWJvbCArIHBhdHRlcm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfbmVnYXRpdmVzKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wYXJlbnNfZm9yX25lZ2F0aXZlcykge1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAnKFxcXFwoJyArIHBhdHRlcm4gKyAnXFxcXCl8JyArIHBhdHRlcm4gKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghKG9wdGlvbnMubmVnYXRpdmVfc2lnbl9iZWZvcmVfZGlnaXRzIHx8IG9wdGlvbnMubmVnYXRpdmVfc2lnbl9hZnRlcl9kaWdpdHMpKSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IG5lZ2F0aXZlICsgcGF0dGVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAvLyBlbnN1cmUgdGhlcmUncyBhIGRvbGxhciBhbmQvb3IgZGVjaW1hbCBhbW91bnQsIGFuZCB0aGF0IGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIHNwYWNlIG9yIGEgbmVnYXRpdmUgc2lnbiBmb2xsb3dlZCBieSBhIHNwYWNlXG4gICAgICAgICAgICAnKD8hLT8gKSg/PS4qXFxcXGQpJyArXG4gICAgICAgICAgICBwYXR0ZXJuICtcbiAgICAgICAgICAgICckJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5pbml0KCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yO1xuXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIElOVkFMSURfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIHR5cGUgezB9IGJ1dCBmb3VuZCB0eXBlIHsxfVwiLFxuICAgIElOVkFMSURfRk9STUFUOiAgICAgICAgICAgICAgICAgICAgICAgICBcIk9iamVjdCBkaWRuJ3QgcGFzcyB2YWxpZGF0aW9uIGZvciBmb3JtYXQgezB9OiB7MX1cIixcbiAgICBFTlVNX01JU01BVENIOiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJObyBlbnVtIG1hdGNoIGZvcjogezB9XCIsXG4gICAgQU5ZX09GX01JU1NJTkc6ICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGF0YSBkb2VzIG5vdCBtYXRjaCBhbnkgc2NoZW1hcyBmcm9tICdhbnlPZidcIixcbiAgICBPTkVfT0ZfTUlTU0lORzogICAgICAgICAgICAgICAgICAgICAgICAgXCJEYXRhIGRvZXMgbm90IG1hdGNoIGFueSBzY2hlbWFzIGZyb20gJ29uZU9mJ1wiLFxuICAgIE9ORV9PRl9NVUxUSVBMRTogICAgICAgICAgICAgICAgICAgICAgICBcIkRhdGEgaXMgdmFsaWQgYWdhaW5zdCBtb3JlIHRoYW4gb25lIHNjaGVtYSBmcm9tICdvbmVPZidcIixcbiAgICBOT1RfUEFTU0VEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEYXRhIG1hdGNoZXMgc2NoZW1hIGZyb20gJ25vdCdcIixcblxuICAgIC8vIEFycmF5IGVycm9yc1xuICAgIEFSUkFZX0xFTkdUSF9TSE9SVDogICAgICAgICAgICAgICAgICAgICBcIkFycmF5IGlzIHRvbyBzaG9ydCAoezB9KSwgbWluaW11bSB7MX1cIixcbiAgICBBUlJBWV9MRU5HVEhfTE9ORzogICAgICAgICAgICAgICAgICAgICAgXCJBcnJheSBpcyB0b28gbG9uZyAoezB9KSwgbWF4aW11bSB7MX1cIixcbiAgICBBUlJBWV9VTklRVUU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcnJheSBpdGVtcyBhcmUgbm90IHVuaXF1ZSAoaW5kZXhlcyB7MH0gYW5kIHsxfSlcIixcbiAgICBBUlJBWV9BRERJVElPTkFMX0lURU1TOiAgICAgICAgICAgICAgICAgXCJBZGRpdGlvbmFsIGl0ZW1zIG5vdCBhbGxvd2VkXCIsXG5cbiAgICAvLyBOdW1lcmljIGVycm9yc1xuICAgIE1VTFRJUExFX09GOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlZhbHVlIHswfSBpcyBub3QgYSBtdWx0aXBsZSBvZiB7MX1cIixcbiAgICBNSU5JTVVNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJWYWx1ZSB7MH0gaXMgbGVzcyB0aGFuIG1pbmltdW0gezF9XCIsXG4gICAgTUlOSU1VTV9FWENMVVNJVkU6ICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWUgezB9IGlzIGVxdWFsIG9yIGxlc3MgdGhhbiBleGNsdXNpdmUgbWluaW11bSB7MX1cIixcbiAgICBNQVhJTVVNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJWYWx1ZSB7MH0gaXMgZ3JlYXRlciB0aGFuIG1heGltdW0gezF9XCIsXG4gICAgTUFYSU1VTV9FWENMVVNJVkU6ICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWUgezB9IGlzIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiBleGNsdXNpdmUgbWF4aW11bSB7MX1cIixcblxuICAgIC8vIE9iamVjdCBlcnJvcnNcbiAgICBPQkpFQ1RfUFJPUEVSVElFU19NSU5JTVVNOiAgICAgICAgICAgICAgXCJUb28gZmV3IHByb3BlcnRpZXMgZGVmaW5lZCAoezB9KSwgbWluaW11bSB7MX1cIixcbiAgICBPQkpFQ1RfUFJPUEVSVElFU19NQVhJTVVNOiAgICAgICAgICAgICAgXCJUb28gbWFueSBwcm9wZXJ0aWVzIGRlZmluZWQgKHswfSksIG1heGltdW0gezF9XCIsXG4gICAgT0JKRUNUX01JU1NJTkdfUkVRVUlSRURfUFJPUEVSVFk6ICAgICAgIFwiTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eTogezB9XCIsXG4gICAgT0JKRUNUX0FERElUSU9OQUxfUFJPUEVSVElFUzogICAgICAgICAgIFwiQWRkaXRpb25hbCBwcm9wZXJ0aWVzIG5vdCBhbGxvd2VkOiB7MH1cIixcbiAgICBPQkpFQ1RfREVQRU5ERU5DWV9LRVk6ICAgICAgICAgICAgICAgICAgXCJEZXBlbmRlbmN5IGZhaWxlZCAtIGtleSBtdXN0IGV4aXN0OiB7MH0gKGR1ZSB0byBrZXk6IHsxfSlcIixcblxuICAgIC8vIFN0cmluZyBlcnJvcnNcbiAgICBNSU5fTEVOR1RIOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgaXMgdG9vIHNob3J0ICh7MH0gY2hhcnMpLCBtaW5pbXVtIHsxfVwiLFxuICAgIE1BWF9MRU5HVEg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN0cmluZyBpcyB0b28gbG9uZyAoezB9IGNoYXJzKSwgbWF4aW11bSB7MX1cIixcbiAgICBQQVRURVJOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiB7MH06IHsxfVwiLFxuXG4gICAgLy8gU2NoZW1hIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgS0VZV09SRF9UWVBFX0VYUEVDVEVEOiAgICAgICAgICAgICAgICAgIFwiS2V5d29yZCAnezB9JyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICd7MX0nXCIsXG4gICAgS0VZV09SRF9VTkRFRklORURfU1RSSUNUOiAgICAgICAgICAgICAgIFwiS2V5d29yZCAnezB9JyBtdXN0IGJlIGRlZmluZWQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBLRVlXT1JEX1VORVhQRUNURUQ6ICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIGlzIG5vdCBleHBlY3RlZCB0byBhcHBlYXIgaW4gdGhlIHNjaGVtYVwiLFxuICAgIEtFWVdPUkRfTVVTVF9CRTogICAgICAgICAgICAgICAgICAgICAgICBcIktleXdvcmQgJ3swfScgbXVzdCBiZSB7MX1cIixcbiAgICBLRVlXT1JEX0RFUEVOREVOQ1k6ICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIHJlcXVpcmVzIGtleXdvcmQgJ3sxfSdcIixcbiAgICBLRVlXT1JEX1BBVFRFUk46ICAgICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIGlzIG5vdCBhIHZhbGlkIFJlZ0V4cCBwYXR0ZXJuOiB7MX1cIixcbiAgICBLRVlXT1JEX1ZBTFVFX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgXCJFYWNoIGVsZW1lbnQgb2Yga2V5d29yZCAnezB9JyBhcnJheSBtdXN0IGJlIGEgJ3sxfSdcIixcbiAgICBVTktOT1dOX0ZPUk1BVDogICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZSBpcyBubyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBmb3JtYXQgJ3swfSdcIixcbiAgICBDVVNUT01fTU9ERV9GT1JDRV9QUk9QRVJUSUVTOiAgICAgICAgICAgXCJ7MH0gbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHByb3BlcnR5IGlmIHByZXNlbnRcIixcblxuICAgIC8vIFJlbW90ZSBlcnJvcnNcbiAgICBSRUZfVU5SRVNPTFZFRDogICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWZlcmVuY2UgaGFzIG5vdCBiZWVuIHJlc29sdmVkIGR1cmluZyBjb21waWxhdGlvbjogezB9XCIsXG4gICAgVU5SRVNPTFZBQkxFX1JFRkVSRU5DRTogICAgICAgICAgICAgICAgIFwiUmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogezB9XCIsXG4gICAgU0NIRU1BX05PVF9SRUFDSEFCTEU6ICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdG9yIHdhcyBub3QgYWJsZSB0byByZWFkIHNjaGVtYSB3aXRoIHVyaTogezB9XCIsXG4gICAgU0NIRU1BX1RZUEVfRVhQRUNURUQ6ICAgICAgICAgICAgICAgICAgIFwiU2NoZW1hIGlzIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgJ29iamVjdCdcIixcbiAgICBTQ0hFTUFfTk9UX0FOX09CSkVDVDogICAgICAgICAgICAgICAgICAgXCJTY2hlbWEgaXMgbm90IGFuIG9iamVjdDogezB9XCIsXG4gICAgQVNZTkNfVElNRU9VVDogICAgICAgICAgICAgICAgICAgICAgICAgIFwiezB9IGFzeW5jaHJvbm91cyB0YXNrKHMpIGhhdmUgdGltZWQgb3V0IGFmdGVyIHsxfSBtc1wiLFxuICAgIFBBUkVOVF9TQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6ICAgICAgICBcIlNjaGVtYSBmYWlsZWQgdG8gdmFsaWRhdGUgYWdhaW5zdCBpdHMgcGFyZW50IHNjaGVtYSwgc2VlIGlubmVyIGVycm9ycyBmb3IgZGV0YWlscy5cIixcbiAgICBSRU1PVEVfTk9UX1ZBTElEOiAgICAgICAgICAgICAgICAgICAgICAgXCJSZW1vdGUgcmVmZXJlbmNlIGRpZG4ndCBjb21waWxlIHN1Y2Nlc3NmdWxseTogezB9XCJcblxufTtcbiIsIi8qanNoaW50IG1heGxlbjogZmFsc2UqL1xuXG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZShcInZhbGlkYXRvclwiKTtcblxudmFyIEZvcm1hdFZhbGlkYXRvcnMgPSB7XG4gICAgXCJkYXRlXCI6IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgICAgICB2YXIgbWF0Y2hlcyA9IC9eKFswLTldezR9KS0oWzAtOV17Mn0pLShbMC05XXsyfSkkLy5leGVjKGRhdGUpO1xuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhciB5ZWFyID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgLy8gdmFyIG1vbnRoID0gbWF0Y2hlc1syXTtcbiAgICAgICAgLy8gdmFyIGRheSA9IG1hdGNoZXNbM107XG4gICAgICAgIGlmIChtYXRjaGVzWzJdIDwgXCIwMVwiIHx8IG1hdGNoZXNbMl0gPiBcIjEyXCIgfHwgbWF0Y2hlc1szXSA8IFwiMDFcIiB8fCBtYXRjaGVzWzNdID4gXCIzMVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBcImRhdGUtdGltZVwiOiBmdW5jdGlvbiAoZGF0ZVRpbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGF0ZS10aW1lIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgICAgICB2YXIgcyA9IGRhdGVUaW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJ0XCIpO1xuICAgICAgICBpZiAoIUZvcm1hdFZhbGlkYXRvcnMuZGF0ZShzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtYXRjaGVzID0gL14oWzAtOV17Mn0pOihbMC05XXsyfSk6KFswLTldezJ9KSguWzAtOV0rKT8oenwoWystXVswLTldezJ9OlswLTldezJ9KSkkLy5leGVjKHNbMV0pO1xuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhciBob3VyID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgLy8gdmFyIG1pbnV0ZSA9IG1hdGNoZXNbMl07XG4gICAgICAgIC8vIHZhciBzZWNvbmQgPSBtYXRjaGVzWzNdO1xuICAgICAgICAvLyB2YXIgZnJhY3Rpb24gPSBtYXRjaGVzWzRdO1xuICAgICAgICAvLyB2YXIgdGltZXpvbmUgPSBtYXRjaGVzWzVdO1xuICAgICAgICBpZiAobWF0Y2hlc1sxXSA+IFwiMjNcIiB8fCBtYXRjaGVzWzJdID4gXCI1OVwiIHx8IG1hdGNoZXNbM10gPiBcIjU5XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFwiZW1haWxcIjogZnVuY3Rpb24gKGVtYWlsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW1haWwgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNFbWFpbChlbWFpbCwgeyBcInJlcXVpcmVfdGxkXCI6IHRydWUgfSk7XG4gICAgfSxcbiAgICBcImhvc3RuYW1lXCI6IGZ1bmN0aW9uIChob3N0bmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIGhvc3RuYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvKlxuICAgICAgICAgICAgaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI2FuY2hvcjExNFxuICAgICAgICAgICAgQSBzdHJpbmcgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCB0aGlzIGF0dHJpYnV0ZSBpZiBpdCBpcyBhIHZhbGlkXG4gICAgICAgICAgICByZXByZXNlbnRhdGlvbiBmb3IgYW4gSW50ZXJuZXQgaG9zdCBuYW1lLCBhcyBkZWZpbmVkIGJ5IFJGQyAxMDM0LCBzZWN0aW9uIDMuMSBbUkZDMTAzNF0uXG5cbiAgICAgICAgICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzEwMzQjc2VjdGlvbi0zLjVcblxuICAgICAgICAgICAgPGRpZ2l0PiA6Oj0gYW55IG9uZSBvZiB0aGUgdGVuIGRpZ2l0cyAwIHRocm91Z2ggOVxuICAgICAgICAgICAgdmFyIGRpZ2l0ID0gL1swLTldLztcblxuICAgICAgICAgICAgPGxldHRlcj4gOjo9IGFueSBvbmUgb2YgdGhlIDUyIGFscGhhYmV0aWMgY2hhcmFjdGVycyBBIHRocm91Z2ggWiBpbiB1cHBlciBjYXNlIGFuZCBhIHRocm91Z2ggeiBpbiBsb3dlciBjYXNlXG4gICAgICAgICAgICB2YXIgbGV0dGVyID0gL1thLXpBLVpdLztcblxuICAgICAgICAgICAgPGxldC1kaWc+IDo6PSA8bGV0dGVyPiB8IDxkaWdpdD5cbiAgICAgICAgICAgIHZhciBsZXREaWcgPSAvWzAtOWEtekEtWl0vO1xuXG4gICAgICAgICAgICA8bGV0LWRpZy1oeXA+IDo6PSA8bGV0LWRpZz4gfCBcIi1cIlxuICAgICAgICAgICAgdmFyIGxldERpZ0h5cCA9IC9bLTAtOWEtekEtWl0vO1xuXG4gICAgICAgICAgICA8bGRoLXN0cj4gOjo9IDxsZXQtZGlnLWh5cD4gfCA8bGV0LWRpZy1oeXA+IDxsZGgtc3RyPlxuICAgICAgICAgICAgdmFyIGxkaFN0ciA9IC9bLTAtOWEtekEtWl0rLztcblxuICAgICAgICAgICAgPGxhYmVsPiA6Oj0gPGxldHRlcj4gWyBbIDxsZGgtc3RyPiBdIDxsZXQtZGlnPiBdXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSAvW2EtekEtWl0oKFstMC05YS16QS1aXSspP1swLTlhLXpBLVpdKT8vO1xuXG4gICAgICAgICAgICA8c3ViZG9tYWluPiA6Oj0gPGxhYmVsPiB8IDxzdWJkb21haW4+IFwiLlwiIDxsYWJlbD5cbiAgICAgICAgICAgIHZhciBzdWJkb21haW4gPSAvXlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KFxcLlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KSokLztcblxuICAgICAgICAgICAgPGRvbWFpbj4gOjo9IDxzdWJkb21haW4+IHwgXCIgXCJcbiAgICAgICAgICAgIHZhciBkb21haW4gPSBudWxsO1xuICAgICAgICAqL1xuICAgICAgICB2YXIgdmFsaWQgPSAvXlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KFxcLlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KSokLy50ZXN0KGhvc3RuYW1lKTtcbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAvLyB0aGUgc3VtIG9mIGFsbCBsYWJlbCBvY3RldHMgYW5kIGxhYmVsIGxlbmd0aHMgaXMgbGltaXRlZCB0byAyNTUuXG4gICAgICAgICAgICBpZiAoaG9zdG5hbWUubGVuZ3RoID4gMjU1KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAgICAgLy8gRWFjaCBub2RlIGhhcyBhIGxhYmVsLCB3aGljaCBpcyB6ZXJvIHRvIDYzIG9jdGV0cyBpbiBsZW5ndGhcbiAgICAgICAgICAgIHZhciBsYWJlbHMgPSBob3N0bmFtZS5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKykgeyBpZiAobGFiZWxzW2ldLmxlbmd0aCA+IDYzKSB7IHJldHVybiBmYWxzZTsgfSB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH0sXG4gICAgXCJob3N0LW5hbWVcIjogZnVuY3Rpb24gKGhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBGb3JtYXRWYWxpZGF0b3JzLmhvc3RuYW1lLmNhbGwodGhpcywgaG9zdG5hbWUpO1xuICAgIH0sXG4gICAgXCJpcHY0XCI6IGZ1bmN0aW9uIChpcHY0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXB2NCAhPT0gXCJzdHJpbmdcIikgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICByZXR1cm4gdmFsaWRhdG9yLmlzSVAoaXB2NCwgNCk7XG4gICAgfSxcbiAgICBcImlwdjZcIjogZnVuY3Rpb24gKGlwdjYpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpcHY2ICE9PSBcInN0cmluZ1wiKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNJUChpcHY2LCA2KTtcbiAgICB9LFxuICAgIFwicmVnZXhcIjogZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgUmVnRXhwKHN0cik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBcInVyaVwiOiBmdW5jdGlvbiAodXJpKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RyaWN0VXJpcykge1xuICAgICAgICAgICAgcmV0dXJuIEZvcm1hdFZhbGlkYXRvcnNbXCJzdHJpY3QtdXJpXCJdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3phZ2dpbm8vei1zY2hlbWEvaXNzdWVzLzE4XG4gICAgICAgIC8vIFJlZ0V4cCBmcm9tIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQlxuICAgICAgICByZXR1cm4gdHlwZW9mIHVyaSAhPT0gXCJzdHJpbmdcIiB8fCBSZWdFeHAoXCJeKChbXjovPyNdKyk6KT8oLy8oW14vPyNdKikpPyhbXj8jXSopKFxcXFw/KFteI10qKSk/KCMoLiopKT9cIikudGVzdCh1cmkpO1xuICAgIH0sXG4gICAgXCJzdHJpY3QtdXJpXCI6IGZ1bmN0aW9uICh1cmkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1cmkgIT09IFwic3RyaW5nXCIgfHwgdmFsaWRhdG9yLmlzVVJMKHVyaSk7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGb3JtYXRWYWxpZGF0b3JzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBGb3JtYXRWYWxpZGF0b3JzICA9IHJlcXVpcmUoXCIuL0Zvcm1hdFZhbGlkYXRvcnNcIiksXG4gICAgUmVwb3J0ICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9SZXBvcnRcIiksXG4gICAgVXRpbHMgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxudmFyIEpzb25WYWxpZGF0b3JzID0ge1xuICAgIG11bHRpcGxlT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjEuMlxuICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKGpzb24gLyBzY2hlbWEubXVsdGlwbGVPZikgIT09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJNVUxUSVBMRV9PRlwiLCBbanNvbiwgc2NoZW1hLm11bHRpcGxlT2ZdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtYXhpbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4yLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoanNvbiA+IHNjaGVtYS5tYXhpbXVtKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUFYSU1VTVwiLCBbanNvbiwgc2NoZW1hLm1heGltdW1dLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGpzb24gPj0gc2NoZW1hLm1heGltdW0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJNQVhJTVVNX0VYQ0xVU0lWRVwiLCBbanNvbiwgc2NoZW1hLm1heGltdW1dLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gbWF4aW11bVxuICAgIH0sXG4gICAgbWluaW11bTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjEuMy4yXG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGpzb24gPCBzY2hlbWEubWluaW11bSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk1JTklNVU1cIiwgW2pzb24sIHNjaGVtYS5taW5pbXVtXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChqc29uIDw9IHNjaGVtYS5taW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUlOSU1VTV9FWENMVVNJVkVcIiwgW2pzb24sIHNjaGVtYS5taW5pbXVtXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZXhjbHVzaXZlTWluaW11bTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjb3ZlcmVkIGluIG1pbmltdW1cbiAgICB9LFxuICAgIG1heExlbmd0aDogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjIuMS4yXG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVdGlscy51Y3MyZGVjb2RlKGpzb24pLmxlbmd0aCA+IHNjaGVtYS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk1BWF9MRU5HVEhcIiwgW2pzb24ubGVuZ3RoLCBzY2hlbWEubWF4TGVuZ3RoXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWluTGVuZ3RoOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4yLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFV0aWxzLnVjczJkZWNvZGUoanNvbikubGVuZ3RoIDwgc2NoZW1hLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUlOX0xFTkdUSFwiLCBbanNvbi5sZW5ndGgsIHNjaGVtYS5taW5MZW5ndGhdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4zLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJlZ0V4cChzY2hlbWEucGF0dGVybikudGVzdChqc29uKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlBBVFRFUk5cIiwgW3NjaGVtYS5wYXR0ZXJuLCBqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWRkaXRpb25hbEl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4xLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIHZhbHVlIG9mIFwiYWRkaXRpb25hbEl0ZW1zXCIgaXMgYm9vbGVhbiB2YWx1ZSBmYWxzZSBhbmQgdGhlIHZhbHVlIG9mIFwiaXRlbXNcIiBpcyBhbiBhcnJheSxcbiAgICAgICAgLy8gdGhlIGpzb24gaXMgdmFsaWQgaWYgaXRzIHNpemUgaXMgbGVzcyB0aGFuLCBvciBlcXVhbCB0bywgdGhlIHNpemUgb2YgXCJpdGVtc1wiLlxuICAgICAgICBpZiAoc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gZmFsc2UgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICBpZiAoanNvbi5sZW5ndGggPiBzY2hlbWEuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiQVJSQVlfQURESVRJT05BTF9JVEVNU1wiLCBudWxsLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBpdGVtczogZnVuY3Rpb24gKCkgeyAvKnJlcG9ydCwgc2NoZW1hLCBqc29uKi9cbiAgICAgICAgLy8gY292ZXJlZCBpbiBhZGRpdGlvbmFsSXRlbXNcbiAgICB9LFxuICAgIG1heEl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4yLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24ubGVuZ3RoID4gc2NoZW1hLm1heEl0ZW1zKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9MRU5HVEhfTE9OR1wiLCBbanNvbi5sZW5ndGgsIHNjaGVtYS5tYXhJdGVtc10sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1pbkl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4zLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24ubGVuZ3RoIDwgc2NoZW1hLm1pbkl0ZW1zKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9MRU5HVEhfU0hPUlRcIiwgW2pzb24ubGVuZ3RoLCBzY2hlbWEubWluSXRlbXNdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB1bmlxdWVJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuNC4yXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEudW5pcXVlSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNVbmlxdWVBcnJheShqc29uLCBtYXRjaGVzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9VTklRVUVcIiwgbWF0Y2hlcywgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4UHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMS4yXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoanNvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIga2V5c0NvdW50ID0gT2JqZWN0LmtleXMoanNvbikubGVuZ3RoO1xuICAgICAgICBpZiAoa2V5c0NvdW50ID4gc2NoZW1hLm1heFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9CSkVDVF9QUk9QRVJUSUVTX01BWElNVU1cIiwgW2tleXNDb3VudCwgc2NoZW1hLm1heFByb3BlcnRpZXNdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5Qcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC4yLjJcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhqc29uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzQ291bnQgPSBPYmplY3Qua2V5cyhqc29uKS5sZW5ndGg7XG4gICAgICAgIGlmIChrZXlzQ291bnQgPCBzY2hlbWEubWluUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiT0JKRUNUX1BST1BFUlRJRVNfTUlOSU1VTVwiLCBba2V5c0NvdW50LCBzY2hlbWEubWluUHJvcGVydGllc10sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJlcXVpcmVkOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC4zLjJcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhqc29uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZHggPSBzY2hlbWEucmVxdWlyZWQubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciByZXF1aXJlZFByb3BlcnR5TmFtZSA9IHNjaGVtYS5yZXF1aXJlZFtpZHhdO1xuICAgICAgICAgICAgaWYgKGpzb25bcmVxdWlyZWRQcm9wZXJ0eU5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJPQkpFQ1RfTUlTU0lOR19SRVFVSVJFRF9QUk9QRVJUWVwiLCBbcmVxdWlyZWRQcm9wZXJ0eU5hbWVdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gcHJvcGVydGllcyBhbmQgcGF0dGVyblByb3BlcnRpZXNcbiAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgJiYgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBKc29uVmFsaWRhdG9ycy5wcm9wZXJ0aWVzLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIGpzb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gcHJvcGVydGllc1xuICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIEpzb25WYWxpZGF0b3JzLnByb3BlcnRpZXMuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSwganNvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByb3BlcnRpZXM6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjQuMlxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKGpzb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBzY2hlbWEucHJvcGVydGllcyAhPT0gdW5kZWZpbmVkID8gc2NoZW1hLnByb3BlcnRpZXMgOiB7fTtcbiAgICAgICAgdmFyIHBhdHRlcm5Qcm9wZXJ0aWVzID0gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQgPyBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgOiB7fTtcbiAgICAgICAgaWYgKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBzZXQgb2YgdGhlIGpzb24gdG8gdmFsaWRhdGUuXG4gICAgICAgICAgICB2YXIgcyA9IE9iamVjdC5rZXlzKGpzb24pO1xuICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHNldCBmcm9tIFwicHJvcGVydGllc1wiLlxuICAgICAgICAgICAgdmFyIHAgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIuXG4gICAgICAgICAgICB2YXIgcHAgPSBPYmplY3Qua2V5cyhwYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgICAgICAvLyByZW1vdmUgZnJvbSBcInNcIiBhbGwgZWxlbWVudHMgb2YgXCJwXCIsIGlmIGFueTtcbiAgICAgICAgICAgIHMgPSBVdGlscy5kaWZmZXJlbmNlKHMsIHApO1xuICAgICAgICAgICAgLy8gZm9yIGVhY2ggcmVnZXggaW4gXCJwcFwiLCByZW1vdmUgYWxsIGVsZW1lbnRzIG9mIFwic1wiIHdoaWNoIHRoaXMgcmVnZXggbWF0Y2hlcy5cbiAgICAgICAgICAgIHZhciBpZHggPSBwcC5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnRXhwID0gUmVnRXhwKHBwW2lkeF0pLFxuICAgICAgICAgICAgICAgICAgICBpZHgyID0gcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVnRXhwLnRlc3Qoc1tpZHgyXSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuc3BsaWNlKGlkeDIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiBvZiB0aGUganNvbiBzdWNjZWVkcyBpZiwgYWZ0ZXIgdGhlc2UgdHdvIHN0ZXBzLCBzZXQgXCJzXCIgaXMgZW1wdHkuXG4gICAgICAgICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gYXNzdW1lQWRkaXRpb25hbCBjYW4gYmUgYW4gYXJyYXkgb2YgYWxsb3dlZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgdmFyIGlkeDMgPSB0aGlzLm9wdGlvbnMuYXNzdW1lQWRkaXRpb25hbC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGlkeDMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlkeDMtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlvID0gcy5pbmRleE9mKHRoaXMub3B0aW9ucy5hc3N1bWVBZGRpdGlvbmFsW2lkeDNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnNwbGljZShpbywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJPQkpFQ1RfQURESVRJT05BTF9QUk9QRVJUSUVTXCIsIFtzXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuNS4yXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoanNvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyksXG4gICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgYWxsIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgdmFyIGRlcGVuZGVuY3lOYW1lID0ga2V5c1tpZHhdO1xuICAgICAgICAgICAgaWYgKGpzb25bZGVwZW5kZW5jeU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlcGVuZGVuY3lEZWZpbml0aW9uID0gc2NoZW1hLmRlcGVuZGVuY2llc1tkZXBlbmRlbmN5TmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhkZXBlbmRlbmN5RGVmaW5pdGlvbikgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZGVwZW5kZW5jeSBpcyBhIHNjaGVtYSwgdmFsaWRhdGUgYWdhaW5zdCB0aGlzIHNjaGVtYVxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBkZXBlbmRlbmN5RGVmaW5pdGlvbiwganNvbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZGVwZW5kZW5jeSBpcyBhbiBhcnJheSwgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYWxsIHByb3BlcnRpZXMgaW4gdGhpcyBhcnJheVxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4MiA9IGRlcGVuZGVuY3lEZWZpbml0aW9uLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVpcmVkUHJvcGVydHlOYW1lID0gZGVwZW5kZW5jeURlZmluaXRpb25baWR4Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbltyZXF1aXJlZFByb3BlcnR5TmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9CSkVDVF9ERVBFTkRFTkNZX0tFWVwiLCBbcmVxdWlyZWRQcm9wZXJ0eU5hbWUsIGRlcGVuZGVuY3lOYW1lXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZW51bTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMS4yXG4gICAgICAgIHZhciBtYXRjaCA9IGZhbHNlLFxuICAgICAgICAgICAgaWR4ID0gc2NoZW1hLmVudW0ubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGlmIChVdGlscy5hcmVFcXVhbChqc29uLCBzY2hlbWEuZW51bVtpZHhdKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2ggPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJFTlVNX01JU01BVENIXCIsIFtqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLypcbiAgICB0eXBlOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS4yLjJcbiAgICAgICAgLy8gdHlwZSBpcyBoYW5kbGVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZCBzbyBpZ25vcmVcbiAgICB9LFxuICAgICovXG4gICAgYWxsT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjMuMlxuICAgICAgICB2YXIgaWR4ID0gc2NoZW1hLmFsbE9mLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRhdGVSZXN1bHQgPSBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuYWxsT2ZbaWR4XSwganNvbik7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrT25GaXJzdEVycm9yICYmIHZhbGlkYXRlUmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhbnlPZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNC4yXG4gICAgICAgIHZhciBzdWJSZXBvcnRzID0gW10sXG4gICAgICAgICAgICBwYXNzZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGlkeCA9IHNjaGVtYS5hbnlPZi5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKGlkeC0tICYmIHBhc3NlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhciBzdWJSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICBzdWJSZXBvcnRzLnB1c2goc3ViUmVwb3J0KTtcbiAgICAgICAgICAgIHBhc3NlZCA9IGV4cG9ydHMudmFsaWRhdGUuY2FsbCh0aGlzLCBzdWJSZXBvcnQsIHNjaGVtYS5hbnlPZltpZHhdLCBqc29uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXNzZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBTllfT0ZfTUlTU0lOR1wiLCB1bmRlZmluZWQsIHN1YlJlcG9ydHMsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG9uZU9mOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS41LjJcbiAgICAgICAgdmFyIHBhc3NlcyA9IDAsXG4gICAgICAgICAgICBzdWJSZXBvcnRzID0gW10sXG4gICAgICAgICAgICBpZHggPSBzY2hlbWEub25lT2YubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIHN1YlJlcG9ydCA9IG5ldyBSZXBvcnQocmVwb3J0LCB7IG1heEVycm9yczogMSB9KTtcbiAgICAgICAgICAgIHN1YlJlcG9ydHMucHVzaChzdWJSZXBvcnQpO1xuICAgICAgICAgICAgaWYgKGV4cG9ydHMudmFsaWRhdGUuY2FsbCh0aGlzLCBzdWJSZXBvcnQsIHNjaGVtYS5vbmVPZltpZHhdLCBqc29uKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHBhc3NlcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhc3NlcyA9PT0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiT05FX09GX01JU1NJTkdcIiwgdW5kZWZpbmVkLCBzdWJSZXBvcnRzLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhc3NlcyA+IDEpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9ORV9PRl9NVUxUSVBMRVwiLCBudWxsLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjYuMlxuICAgICAgICB2YXIgc3ViUmVwb3J0ID0gbmV3IFJlcG9ydChyZXBvcnQpO1xuICAgICAgICBpZiAoZXhwb3J0cy52YWxpZGF0ZS5jYWxsKHRoaXMsIHN1YlJlcG9ydCwgc2NoZW1hLm5vdCwganNvbikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk5PVF9QQVNTRURcIiwgbnVsbCwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGVmaW5pdGlvbnM6IGZ1bmN0aW9uICgpIHsgLypyZXBvcnQsIHNjaGVtYSwganNvbiovXG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNy4yXG4gICAgICAgIC8vIG5vdGhpbmcgdG8gZG8gaGVyZVxuICAgIH0sXG4gICAgZm9ybWF0OiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjcuMlxuICAgICAgICB2YXIgZm9ybWF0VmFsaWRhdG9yRm4gPSBGb3JtYXRWYWxpZGF0b3JzW3NjaGVtYS5mb3JtYXRdO1xuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdFZhbGlkYXRvckZuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRWYWxpZGF0b3JGbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBhc3luY1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRBc3luY1Rhc2soZm9ybWF0VmFsaWRhdG9yRm4sIFtqc29uXSwgZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJJTlZBTElEX0ZPUk1BVFwiLCBbc2NoZW1hLmZvcm1hdCwganNvbl0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3luY1xuICAgICAgICAgICAgICAgIGlmIChmb3JtYXRWYWxpZGF0b3JGbi5jYWxsKHRoaXMsIGpzb24pICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIklOVkFMSURfRk9STUFUXCIsIFtzY2hlbWEuZm9ybWF0LCBqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVVua25vd25Gb3JtYXRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJVTktOT1dOX0ZPUk1BVFwiLCBbc2NoZW1hLmZvcm1hdF0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgcmVjdXJzZUFycmF5ID0gZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjguMlxuXG4gICAgdmFyIGlkeCA9IGpzb24ubGVuZ3RoO1xuXG4gICAgLy8gSWYgXCJpdGVtc1wiIGlzIGFuIGFycmF5LCB0aGlzIHNpdHVhdGlvbiwgdGhlIHNjaGVtYSBkZXBlbmRzIG9uIHRoZSBpbmRleDpcbiAgICAvLyBpZiB0aGUgaW5kZXggaXMgbGVzcyB0aGFuLCBvciBlcXVhbCB0bywgdGhlIHNpemUgb2YgXCJpdGVtc1wiLFxuICAgIC8vIHRoZSBjaGlsZCBpbnN0YW5jZSBtdXN0IGJlIHZhbGlkIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgc2NoZW1hIGluIHRoZSBcIml0ZW1zXCIgYXJyYXk7XG4gICAgLy8gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIHZhbGlkIGFnYWluc3QgdGhlIHNjaGVtYSBkZWZpbmVkIGJ5IFwiYWRkaXRpb25hbEl0ZW1zXCIuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgLy8gZXF1YWwgdG8gZG9lc250IG1ha2Ugc2Vuc2UgaGVyZVxuICAgICAgICAgICAgaWYgKGlkeCA8IHNjaGVtYS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuaXRlbXNbaWR4XSwganNvbltpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbWlnaHQgYmUgYm9vbGVhbiwgc28gY2hlY2sgdGhhdCBpdCdzIGFuIG9iamVjdFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywganNvbltpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEuaXRlbXMgPT09IFwib2JqZWN0XCIpIHtcblxuICAgICAgICAvLyBJZiBpdGVtcyBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgY2hpbGQgaW5zdGFuY2UgbXVzdCBiZSB2YWxpZCBhZ2FpbnN0IHRoaXMgc2NoZW1hLFxuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIGl0cyBpbmRleCwgYW5kIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIFwiYWRkaXRpb25hbEl0ZW1zXCIuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuaXRlbXMsIGpzb25baWR4XSk7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgfVxufTtcblxudmFyIHJlY3Vyc2VPYmplY3QgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uOC4zXG5cbiAgICAvLyBJZiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIgaXMgYWJzZW50LCBpdCBpcyBjb25zaWRlcmVkIHByZXNlbnQgd2l0aCBhbiBlbXB0eSBzY2hlbWEgYXMgYSB2YWx1ZS5cbiAgICAvLyBJbiBhZGRpdGlvbiwgYm9vbGVhbiB2YWx1ZSB0cnVlIGlzIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBhbiBlbXB0eSBzY2hlbWEuXG4gICAgdmFyIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmIChhZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdHJ1ZSB8fCBhZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuXG4gICAgLy8gcCAtIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInByb3BlcnRpZXNcIi5cbiAgICB2YXIgcCA9IHNjaGVtYS5wcm9wZXJ0aWVzID8gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpIDogW107XG5cbiAgICAvLyBwcCAtIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIuIEVsZW1lbnRzIG9mIHRoaXMgc2V0IHdpbGwgYmUgY2FsbGVkIHJlZ2V4ZXMgZm9yIGNvbnZlbmllbmNlLlxuICAgIHZhciBwcCA9IHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyA/IE9iamVjdC5rZXlzKHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcykgOiBbXTtcblxuICAgIC8vIG0gLSBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgY2hpbGQuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhqc29uKSxcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIG0gPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0ganNvblttXTtcblxuICAgICAgICAvLyBzIC0gVGhlIHNldCBvZiBzY2hlbWFzIGZvciB0aGUgY2hpbGQgaW5zdGFuY2UuXG4gICAgICAgIHZhciBzID0gW107XG5cbiAgICAgICAgLy8gMS4gSWYgc2V0IFwicFwiIGNvbnRhaW5zIHZhbHVlIFwibVwiLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHNjaGVtYSBpbiBcInByb3BlcnRpZXNcIiBpcyBhZGRlZCB0byBcInNcIi5cbiAgICAgICAgaWYgKHAuaW5kZXhPZihtKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHMucHVzaChzY2hlbWEucHJvcGVydGllc1ttXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCByZWdleCBpbiBcInBwXCIsIGlmIGl0IG1hdGNoZXMgXCJtXCIgc3VjY2Vzc2Z1bGx5LCB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWEgaW4gXCJwYXR0ZXJuUHJvcGVydGllc1wiIGlzIGFkZGVkIHRvIFwic1wiLlxuICAgICAgICB2YXIgaWR4MiA9IHBwLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgdmFyIHJlZ2V4U3RyaW5nID0gcHBbaWR4Ml07XG4gICAgICAgICAgICBpZiAoUmVnRXhwKHJlZ2V4U3RyaW5nKS50ZXN0KG0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcy5wdXNoKHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1tyZWdleFN0cmluZ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVGhlIHNjaGVtYSBkZWZpbmVkIGJ5IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIiBpcyBhZGRlZCB0byBcInNcIiBpZiBhbmQgb25seSBpZiwgYXQgdGhpcyBzdGFnZSwgXCJzXCIgaXMgZW1wdHkuXG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCAmJiBhZGRpdGlvbmFsUHJvcGVydGllcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHMucHVzaChhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBhcmUgcGFzc2luZyB0ZXN0cyBldmVuIHdpdGhvdXQgdGhpcyBhc3NlcnQgYmVjYXVzZSB0aGlzIGlzIGNvdmVyZWQgYnkgcHJvcGVydGllcyBjaGVja1xuICAgICAgICAvLyBpZiBzIGlzIGVtcHR5IGluIHRoaXMgc3RhZ2UsIG5vIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIGFyZSBhbGxvd2VkXG4gICAgICAgIC8vIHJlcG9ydC5leHBlY3Qocy5sZW5ndGggIT09IDAsICdFMDAxJywgbSk7XG5cbiAgICAgICAgLy8gSW5zdGFuY2UgcHJvcGVydHkgdmFsdWUgbXVzdCBwYXNzIGFsbCBzY2hlbWFzIGZyb20gc1xuICAgICAgICBpZHgyID0gcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgyLS0pIHtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2gobSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzW2lkeDJdLCBwcm9wZXJ0eVZhbHVlKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuXG4gICAgcmVwb3J0LmNvbW1vbkVycm9yTWVzc2FnZSA9IFwiSlNPTl9PQkpFQ1RfVkFMSURBVElPTl9GQUlMRURcIjtcblxuICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBhbiBvYmplY3RcbiAgICB2YXIgdG8gPSBVdGlscy53aGF0SXMoc2NoZW1hKTtcbiAgICBpZiAodG8gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiU0NIRU1BX05PVF9BTl9PQkpFQ1RcIiwgW3RvXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBlbXB0eSwgZXZlcnl0aGluZyBpcyB2YWxpZCBhZ2FpbnN0IGVtcHR5IHNjaGVtYVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSwgc28gd2UgbmVlZCB0byByZW1lbWJlciBvdXIgcm9vdFxuICAgIHZhciBpc1Jvb3QgPSBmYWxzZTtcbiAgICBpZiAoIXJlcG9ydC5yb290U2NoZW1hKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBpc1Jvb3QgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZvbGxvdyBzY2hlbWEuJHJlZiBrZXlzXG4gICAgaWYgKHNjaGVtYS4kcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gYXZvaWQgaW5maW5pdGUgbG9vcCB3aXRoIG1heFJlZnNcbiAgICAgICAgdmFyIG1heFJlZnMgPSA5OTtcbiAgICAgICAgd2hpbGUgKHNjaGVtYS4kcmVmICYmIG1heFJlZnMgPiAwKSB7XG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5fXyRyZWZSZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlJFRl9VTlJFU09MVkVEXCIsIFtzY2hlbWEuJHJlZl0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5fXyRyZWZSZXNvbHZlZCA9PT0gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYS5fXyRyZWZSZXNvbHZlZDtcbiAgICAgICAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1heFJlZnMtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4UmVmcyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2lyY3VsYXIgZGVwZW5kZW5jeSBieSAkcmVmIHJlZmVyZW5jZXMhXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHlwZSBjaGVja2luZyBmaXJzdFxuICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMi4yXG4gICAgdmFyIGpzb25UeXBlID0gVXRpbHMud2hhdElzKGpzb24pO1xuICAgIGlmIChzY2hlbWEudHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoanNvblR5cGUgIT09IHNjaGVtYS50eXBlICYmIChqc29uVHlwZSAhPT0gXCJpbnRlZ2VyXCIgfHwgc2NoZW1hLnR5cGUgIT09IFwibnVtYmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiSU5WQUxJRF9UWVBFXCIsIFtzY2hlbWEudHlwZSwganNvblR5cGVdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnJlYWtPbkZpcnN0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZS5pbmRleE9mKGpzb25UeXBlKSA9PT0gLTEgJiYgKGpzb25UeXBlICE9PSBcImludGVnZXJcIiB8fCBzY2hlbWEudHlwZS5pbmRleE9mKFwibnVtYmVyXCIpID09PSAtMSkpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJJTlZBTElEX1RZUEVcIiwgW3NjaGVtYS50eXBlLCBqc29uVHlwZV0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm93IGl0ZXJhdGUgYWxsIHRoZSBrZXlzIGluIHNjaGVtYSBhbmQgZXhlY3V0ZSB2YWxpZGF0aW9uIG1ldGhvZHNcbiAgICB2YXIgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIGlmIChKc29uVmFsaWRhdG9yc1trZXlzW2lkeF1dKSB7XG4gICAgICAgICAgICBKc29uVmFsaWRhdG9yc1trZXlzW2lkeF1dLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIGpzb24pO1xuICAgICAgICAgICAgaWYgKHJlcG9ydC5lcnJvcnMubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvcikgeyBicmVhazsgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlcG9ydC5lcnJvcnMubGVuZ3RoID09PSAwIHx8IHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGpzb25UeXBlID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgIHJlY3Vyc2VBcnJheS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICAgICAgfSBlbHNlIGlmIChqc29uVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVjdXJzZU9iamVjdC5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdlIGRvbid0IG5lZWQgdGhlIHJvb3QgcG9pbnRlciBhbnltb3JlXG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgICByZXBvcnQucm9vdFNjaGVtYSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdmFsaWQganVzdCB0byBiZSBhYmxlIHRvIGJyZWFrIGF0IHNvbWUgY29kZSBwb2ludHNcbiAgICByZXR1cm4gcmVwb3J0LmVycm9ycy5sZW5ndGggPT09IDA7XG5cbn07XG4iLCIvLyBOdW1iZXIuaXNGaW5pdGUgcG9seWZpbGxcbi8vIGh0dHA6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLW51bWJlci5pc2Zpbml0ZVxuaWYgKHR5cGVvZiBOdW1iZXIuaXNGaW5pdGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIE51bWJlci5pc0Zpbml0ZSA9IGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgICAgIC8vIDEuIElmIFR5cGUobnVtYmVyKSBpcyBub3QgTnVtYmVyLCByZXR1cm4gZmFsc2UuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAyLiBJZiBudW1iZXIgaXMgTmFOLCAr4oieLCBvciDiiJLiiJ4sIHJldHVybiBmYWxzZS5cbiAgICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkgfHwgdmFsdWUgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRydWUuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGdldCAgICA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIEVycm9ycyA9IHJlcXVpcmUoXCIuL0Vycm9yc1wiKTtcbnZhciBVdGlscyAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxuZnVuY3Rpb24gUmVwb3J0KHBhcmVudE9yT3B0aW9ucywgcmVwb3J0T3B0aW9ucykge1xuICAgIHRoaXMucGFyZW50UmVwb3J0ID0gcGFyZW50T3JPcHRpb25zIGluc3RhbmNlb2YgUmVwb3J0ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPck9wdGlvbnMgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgIHRoaXMub3B0aW9ucyA9IHBhcmVudE9yT3B0aW9ucyBpbnN0YW5jZW9mIFJlcG9ydCA/XG4gICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9yT3B0aW9ucy5vcHRpb25zIDpcbiAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T3JPcHRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5yZXBvcnRPcHRpb25zID0gcmVwb3J0T3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgdGhpcy5wYXRoID0gW107XG4gICAgdGhpcy5hc3luY1Rhc2tzID0gW107XG59XG5cblJlcG9ydC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5hc3luY1Rhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgdGFza3MgcGVuZGluZywgY2FuJ3QgYW5zd2VyIGlzVmFsaWRcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPT09IDA7XG59O1xuXG5SZXBvcnQucHJvdG90eXBlLmFkZEFzeW5jVGFzayA9IGZ1bmN0aW9uIChmbiwgYXJncywgYXN5bmNUYXNrUmVzdWx0UHJvY2Vzc0ZuKSB7XG4gICAgdGhpcy5hc3luY1Rhc2tzLnB1c2goW2ZuLCBhcmdzLCBhc3luY1Rhc2tSZXN1bHRQcm9jZXNzRm5dKTtcbn07XG5cblJlcG9ydC5wcm90b3R5cGUucHJvY2Vzc0FzeW5jVGFza3MgPSBmdW5jdGlvbiAodGltZW91dCwgY2FsbGJhY2spIHtcblxuICAgIHZhciB2YWxpZGF0aW9uVGltZW91dCA9IHRpbWVvdXQgfHwgMjAwMCxcbiAgICAgICAgdGFza3NDb3VudCAgICAgICAgPSB0aGlzLmFzeW5jVGFza3MubGVuZ3RoLFxuICAgICAgICBpZHggICAgICAgICAgICAgICA9IHRhc2tzQ291bnQsXG4gICAgICAgIHRpbWVkT3V0ICAgICAgICAgID0gZmFsc2UsXG4gICAgICAgIHNlbGYgICAgICAgICAgICAgID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBzZWxmLmVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICAgICAgZXJyICAgPSB2YWxpZCA/IHVuZGVmaW5lZCA6IHNlbGYuZXJyb3JzO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB2YWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3BvbmQoYXN5bmNUYXNrUmVzdWx0UHJvY2Vzc0ZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXN5bmNUYXNrUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAodGltZWRPdXQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBhc3luY1Rhc2tSZXN1bHRQcm9jZXNzRm4oYXN5bmNUYXNrUmVzdWx0KTtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGFza3NDb3VudCA9PT0gMCB8fCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbmlzaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIHZhciB0YXNrID0gdGhpcy5hc3luY1Rhc2tzW2lkeF07XG4gICAgICAgIHRhc2tbMF0uYXBwbHkobnVsbCwgdGFza1sxXS5jb25jYXQocmVzcG9uZCh0YXNrWzJdKSkpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGFza3NDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYuYWRkRXJyb3IoXCJBU1lOQ19USU1FT1VUXCIsIFt0YXNrc0NvdW50LCB2YWxpZGF0aW9uVGltZW91dF0pO1xuICAgICAgICAgICAgY2FsbGJhY2soc2VsZi5lcnJvcnMsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sIHZhbGlkYXRpb25UaW1lb3V0KTtcblxufTtcblxuUmVwb3J0LnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXRoID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50UmVwb3J0KSB7XG4gICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCh0aGlzLnBhcmVudFJlcG9ydC5wYXRoKTtcbiAgICB9XG4gICAgcGF0aCA9IHBhdGguY29uY2F0KHRoaXMucGF0aCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlcG9ydFBhdGhBc0FycmF5ICE9PSB0cnVlKSB7XG4gICAgICAgIC8vIFNhbml0aXplIHRoZSBwYXRoIHNlZ21lbnRzIChodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxI3NlY3Rpb24tNClcbiAgICAgICAgcGF0aCA9IFwiIy9cIiArIHBhdGgubWFwKGZ1bmN0aW9uIChzZWdtZW50KSB7XG5cbiAgICAgICAgICAgIGlmIChVdGlscy5pc0Fic29sdXRlVXJpKHNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidXJpKFwiICsgc2VnbWVudCArIFwiKVwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VnbWVudC5yZXBsYWNlKC9cXH4vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXC8vZywgXCJ+MVwiKTtcbiAgICAgICAgfSkuam9pbihcIi9cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufTtcblxuUmVwb3J0LnByb3RvdHlwZS5nZXRTY2hlbWFJZCA9IGZ1bmN0aW9uICgpIHtcblxuICAgIGlmICghdGhpcy5yb290U2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgZXJyb3IgcGF0aCBhcyBhbiBhcnJheVxuICAgIHZhciBwYXRoID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50UmVwb3J0KSB7XG4gICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCh0aGlzLnBhcmVudFJlcG9ydC5wYXRoKTtcbiAgICB9XG4gICAgcGF0aCA9IHBhdGguY29uY2F0KHRoaXMucGF0aCk7XG5cbiAgICAvLyB0cnkgdG8gZmluZCBpZCBpbiB0aGUgZXJyb3IgcGF0aFxuICAgIHdoaWxlIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIG9iaiA9IGdldCh0aGlzLnJvb3RTY2hlbWEsIHBhdGgpO1xuICAgICAgICBpZiAob2JqICYmIG9iai5pZCkgeyByZXR1cm4gb2JqLmlkOyB9XG4gICAgICAgIHBhdGgucG9wKCk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGlkIG9mIHRoZSByb290XG4gICAgcmV0dXJuIHRoaXMucm9vdFNjaGVtYS5pZDtcbn07XG5cblJlcG9ydC5wcm90b3R5cGUuaGFzRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3JDb2RlLCBwYXJhbXMpIHtcbiAgICB2YXIgaWR4ID0gdGhpcy5lcnJvcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICBpZiAodGhpcy5lcnJvcnNbaWR4XS5jb2RlID09PSBlcnJvckNvZGUpIHtcbiAgICAgICAgICAgIC8vIGFzc3VtZSBtYXRjaFxuICAgICAgICAgICAgdmFyIG1hdGNoID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHBhcmFtcyB0b29cbiAgICAgICAgICAgIHZhciBpZHgyID0gdGhpcy5lcnJvcnNbaWR4XS5wYXJhbXMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVycm9yc1tpZHhdLnBhcmFtc1tpZHgyXSAhPT0gcGFyYW1zW2lkeDJdKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBtYXRjaCwgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGlmIChtYXRjaCkgeyByZXR1cm4gbWF0Y2g7IH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5SZXBvcnQucHJvdG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24gKGVycm9yQ29kZSwgcGFyYW1zLCBzdWJSZXBvcnRzLCBzY2hlbWFEZXNjcmlwdGlvbikge1xuICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPj0gdGhpcy5yZXBvcnRPcHRpb25zLm1heEVycm9ycykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFlcnJvckNvZGUpIHsgdGhyb3cgbmV3IEVycm9yKFwiTm8gZXJyb3JDb2RlIHBhc3NlZCBpbnRvIGFkZEVycm9yKClcIik7IH1cbiAgICBpZiAoIUVycm9yc1tlcnJvckNvZGVdKSB7IHRocm93IG5ldyBFcnJvcihcIk5vIGVycm9yTWVzc2FnZSBrbm93biBmb3IgY29kZSBcIiArIGVycm9yQ29kZSk7IH1cblxuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCBbXTtcblxuICAgIHZhciBpZHggPSBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBFcnJvcnNbZXJyb3JDb2RlXTtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIHdoYXRJcyA9IFV0aWxzLndoYXRJcyhwYXJhbXNbaWR4XSk7XG4gICAgICAgIHZhciBwYXJhbSA9ICh3aGF0SXMgPT09IFwib2JqZWN0XCIgfHwgd2hhdElzID09PSBcIm51bGxcIikgPyBKU09OLnN0cmluZ2lmeShwYXJhbXNbaWR4XSkgOiBwYXJhbXNbaWR4XTtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLnJlcGxhY2UoXCJ7XCIgKyBpZHggKyBcIn1cIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIHZhciBlcnIgPSB7XG4gICAgICAgIGNvZGU6IGVycm9yQ29kZSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgcGF0aDogdGhpcy5nZXRQYXRoKCksXG4gICAgICAgIHNjaGVtYUlkOiB0aGlzLmdldFNjaGVtYUlkKClcbiAgICB9O1xuXG4gICAgaWYgKHNjaGVtYURlc2NyaXB0aW9uKSB7XG4gICAgICAgIGVyci5kZXNjcmlwdGlvbiA9IHNjaGVtYURlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGlmIChzdWJSZXBvcnRzICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHN1YlJlcG9ydHMpKSB7XG4gICAgICAgICAgICBzdWJSZXBvcnRzID0gW3N1YlJlcG9ydHNdO1xuICAgICAgICB9XG4gICAgICAgIGVyci5pbm5lciA9IFtdO1xuICAgICAgICBpZHggPSBzdWJSZXBvcnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICB2YXIgc3ViUmVwb3J0ID0gc3ViUmVwb3J0c1tpZHhdLFxuICAgICAgICAgICAgICAgIGlkeDIgPSBzdWJSZXBvcnQuZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgyLS0pIHtcbiAgICAgICAgICAgICAgICBlcnIuaW5uZXIucHVzaChzdWJSZXBvcnQuZXJyb3JzW2lkeDJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyLmlubmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZXJyLmlubmVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lcnJvcnMucHVzaChlcnIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZXBvcnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIFJlcG9ydCAgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9SZXBvcnRcIik7XG52YXIgU2NoZW1hQ29tcGlsYXRpb24gICA9IHJlcXVpcmUoXCIuL1NjaGVtYUNvbXBpbGF0aW9uXCIpO1xudmFyIFNjaGVtYVZhbGlkYXRpb24gICAgPSByZXF1aXJlKFwiLi9TY2hlbWFWYWxpZGF0aW9uXCIpO1xudmFyIFV0aWxzICAgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxuZnVuY3Rpb24gZGVjb2RlSlNPTlBvaW50ZXIoc3RyKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1hcHBzYXdnLWpzb24tcG9pbnRlci0wNyNzZWN0aW9uLTNcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvflswLTFdL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBcIn4xXCIgPyBcIi9cIiA6IFwiflwiO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1vdGVQYXRoKHVyaSkge1xuICAgIHZhciBpbyA9IHVyaS5pbmRleE9mKFwiI1wiKTtcbiAgICByZXR1cm4gaW8gPT09IC0xID8gdXJpIDogdXJpLnNsaWNlKDAsIGlvKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVlcnlQYXRoKHVyaSkge1xuICAgIHZhciBpbyA9IHVyaS5pbmRleE9mKFwiI1wiKTtcbiAgICB2YXIgcmVzID0gaW8gPT09IC0xID8gdW5kZWZpbmVkIDogdXJpLnNsaWNlKGlvICsgMSk7XG4gICAgLy8gV0FSTjogZG8gbm90IHNsaWNlIHNsYXNoLCAjLyBtZWFucyB0YWtlIHJvb3QgYW5kIGdvIGRvd24gZnJvbSBpdFxuICAgIC8vIGlmIChyZXMgJiYgcmVzWzBdID09PSBcIi9cIikgeyByZXMgPSByZXMuc2xpY2UoMSk7IH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmaW5kSWQoc2NoZW1hLCBpZCkge1xuICAgIC8vIHByb2Nlc3Mgb25seSBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPT0gXCJvYmplY3RcIiB8fCBzY2hlbWEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vIGlkIG1lYW5zIHJvb3Qgc28gcmV0dXJuIGl0c2VsZlxuICAgIGlmICghaWQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmlkKSB7XG4gICAgICAgIGlmIChzY2hlbWEuaWQgPT09IGlkIHx8IHNjaGVtYS5pZFswXSA9PT0gXCIjXCIgJiYgc2NoZW1hLmlkLnN1YnN0cmluZygxKSA9PT0gaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaWR4LCByZXN1bHQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICBpZHggPSBzY2hlbWEubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRJZChzY2hlbWFbaWR4XSwgaWQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSk7XG4gICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBrID0ga2V5c1tpZHhdO1xuICAgICAgICAgICAgaWYgKGsuaW5kZXhPZihcIl9fJFwiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gZmluZElkKHNjaGVtYVtrXSwgaWQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydHMuY2FjaGVTY2hlbWFCeVVyaSA9IGZ1bmN0aW9uICh1cmksIHNjaGVtYSkge1xuICAgIHZhciByZW1vdGVQYXRoID0gZ2V0UmVtb3RlUGF0aCh1cmkpO1xuICAgIGlmIChyZW1vdGVQYXRoKSB7XG4gICAgICAgIHRoaXMuY2FjaGVbcmVtb3RlUGF0aF0gPSBzY2hlbWE7XG4gICAgfVxufTtcblxuZXhwb3J0cy5yZW1vdmVGcm9tQ2FjaGVCeVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgICB2YXIgcmVtb3RlUGF0aCA9IGdldFJlbW90ZVBhdGgodXJpKTtcbiAgICBpZiAocmVtb3RlUGF0aCkge1xuICAgICAgICBkZWxldGUgdGhpcy5jYWNoZVtyZW1vdGVQYXRoXTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmNoZWNrQ2FjaGVGb3JVcmkgPSBmdW5jdGlvbiAodXJpKSB7XG4gICAgdmFyIHJlbW90ZVBhdGggPSBnZXRSZW1vdGVQYXRoKHVyaSk7XG4gICAgcmV0dXJuIHJlbW90ZVBhdGggPyB0aGlzLmNhY2hlW3JlbW90ZVBhdGhdICE9IG51bGwgOiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuZ2V0U2NoZW1hID0gZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgc2NoZW1hID0gZXhwb3J0cy5nZXRTY2hlbWFCeVJlZmVyZW5jZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NoZW1hID0gZXhwb3J0cy5nZXRTY2hlbWFCeVVyaS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYTtcbn07XG5cbmV4cG9ydHMuZ2V0U2NoZW1hQnlSZWZlcmVuY2UgPSBmdW5jdGlvbiAocmVwb3J0LCBrZXkpIHtcbiAgICB2YXIgaSA9IHRoaXMucmVmZXJlbmNlQ2FjaGUubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVmZXJlbmNlQ2FjaGVbaV1bMF0gPT09IGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlQ2FjaGVbaV1bMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm90IGZvdW5kXG4gICAgdmFyIHNjaGVtYSA9IFV0aWxzLmNsb25lRGVlcChrZXkpO1xuICAgIHRoaXMucmVmZXJlbmNlQ2FjaGUucHVzaChba2V5LCBzY2hlbWFdKTtcbiAgICByZXR1cm4gc2NoZW1hO1xufTtcblxuZXhwb3J0cy5nZXRTY2hlbWFCeVVyaSA9IGZ1bmN0aW9uIChyZXBvcnQsIHVyaSwgcm9vdCkge1xuICAgIHZhciByZW1vdGVQYXRoID0gZ2V0UmVtb3RlUGF0aCh1cmkpLFxuICAgICAgICBxdWVyeVBhdGggPSBnZXRRdWVyeVBhdGgodXJpKSxcbiAgICAgICAgcmVzdWx0ID0gcmVtb3RlUGF0aCA/IHRoaXMuY2FjaGVbcmVtb3RlUGF0aF0gOiByb290O1xuXG4gICAgaWYgKHJlc3VsdCAmJiByZW1vdGVQYXRoKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gYXZvaWQgY29tcGlsaW5nIHNjaGVtYXMgaW4gYSByZWN1cnNpdmUgbG9vcFxuICAgICAgICB2YXIgY29tcGlsZVJlbW90ZSA9IHJlc3VsdCAhPT0gcm9vdDtcbiAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gY29tcGlsZSBhbmQgdmFsaWRhdGUgcmVzb2x2ZWQgc2NoZW1hIChpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkpXG4gICAgICAgIGlmIChjb21waWxlUmVtb3RlKSB7XG5cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2gocmVtb3RlUGF0aCk7XG5cbiAgICAgICAgICAgIHZhciByZW1vdGVSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICBpZiAoU2NoZW1hQ29tcGlsYXRpb24uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHJlbW90ZVJlcG9ydCwgcmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIFNjaGVtYVZhbGlkYXRpb24udmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZW1vdGVSZXBvcnQsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcmVtb3RlUmVwb3J0SXNWYWxpZCA9IHJlbW90ZVJlcG9ydC5pc1ZhbGlkKCk7XG4gICAgICAgICAgICBpZiAoIXJlbW90ZVJlcG9ydElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJSRU1PVEVfTk9UX1ZBTElEXCIsIFt1cmldLCByZW1vdGVSZXBvcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKCFyZW1vdGVSZXBvcnRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHQgJiYgcXVlcnlQYXRoKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IHF1ZXJ5UGF0aC5zcGxpdChcIi9cIik7XG4gICAgICAgIGZvciAodmFyIGlkeCA9IDAsIGxpbSA9IHBhcnRzLmxlbmd0aDsgcmVzdWx0ICYmIGlkeCA8IGxpbTsgaWR4KyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBkZWNvZGVKU09OUG9pbnRlcihwYXJ0c1tpZHhdKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IDApIHsgLy8gaXQncyBhbiBpZFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRJZChyZXN1bHQsIGtleSk7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBpdCdzIGEgcGF0aCBiZWhpbmQgaWRcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnRzLmdldFJlbW90ZVBhdGggPSBnZXRSZW1vdGVQYXRoO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBSZXBvcnQgICAgICA9IHJlcXVpcmUoXCIuL1JlcG9ydFwiKTtcbnZhciBTY2hlbWFDYWNoZSA9IHJlcXVpcmUoXCIuL1NjaGVtYUNhY2hlXCIpO1xudmFyIFV0aWxzICAgICAgID0gcmVxdWlyZShcIi4vVXRpbHNcIik7XG5cbmZ1bmN0aW9uIG1lcmdlUmVmZXJlbmNlKHNjb3BlLCByZWYpIHtcbiAgICBpZiAoVXRpbHMuaXNBYnNvbHV0ZVVyaShyZWYpKSB7XG4gICAgICAgIHJldHVybiByZWY7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZFNjb3BlID0gc2NvcGUuam9pbihcIlwiKSxcbiAgICAgICAgaXNTY29wZUFic29sdXRlID0gVXRpbHMuaXNBYnNvbHV0ZVVyaShqb2luZWRTY29wZSksXG4gICAgICAgIGlzU2NvcGVSZWxhdGl2ZSA9IFV0aWxzLmlzUmVsYXRpdmVVcmkoam9pbmVkU2NvcGUpLFxuICAgICAgICBpc1JlZlJlbGF0aXZlID0gVXRpbHMuaXNSZWxhdGl2ZVVyaShyZWYpLFxuICAgICAgICB0b1JlbW92ZTtcblxuICAgIGlmIChpc1Njb3BlQWJzb2x1dGUgJiYgaXNSZWZSZWxhdGl2ZSkge1xuICAgICAgICB0b1JlbW92ZSA9IGpvaW5lZFNjb3BlLm1hdGNoKC9cXC9bXlxcL10qJC8pO1xuICAgICAgICBpZiAodG9SZW1vdmUpIHtcbiAgICAgICAgICAgIGpvaW5lZFNjb3BlID0gam9pbmVkU2NvcGUuc2xpY2UoMCwgdG9SZW1vdmUuaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTY29wZVJlbGF0aXZlICYmIGlzUmVmUmVsYXRpdmUpIHtcbiAgICAgICAgam9pbmVkU2NvcGUgPSBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvUmVtb3ZlID0gam9pbmVkU2NvcGUubWF0Y2goL1teIy9dKyQvKTtcbiAgICAgICAgaWYgKHRvUmVtb3ZlKSB7XG4gICAgICAgICAgICBqb2luZWRTY29wZSA9IGpvaW5lZFNjb3BlLnNsaWNlKDAsIHRvUmVtb3ZlLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXMgPSBqb2luZWRTY29wZSArIHJlZjtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvIyMvLCBcIiNcIik7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZXMob2JqLCByZXN1bHRzLCBzY29wZSwgcGF0aCkge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuICAgIHNjb3BlID0gc2NvcGUgfHwgW107XG4gICAgcGF0aCA9IHBhdGggfHwgW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NvcGUucHVzaChvYmouaWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqLiRyZWYgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIG9iai5fXyRyZWZSZXNvbHZlZCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgcmVmOiBtZXJnZVJlZmVyZW5jZShzY29wZSwgb2JqLiRyZWYpLFxuICAgICAgICAgICAga2V5OiBcIiRyZWZcIixcbiAgICAgICAgICAgIG9iajogb2JqLFxuICAgICAgICAgICAgcGF0aDogcGF0aC5zbGljZSgwKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmouJHNjaGVtYSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2Ygb2JqLl9fJHNjaGVtYVJlc29sdmVkID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICByZWY6IG1lcmdlUmVmZXJlbmNlKHNjb3BlLCBvYmouJHNjaGVtYSksXG4gICAgICAgICAgICBrZXk6IFwiJHNjaGVtYVwiLFxuICAgICAgICAgICAgb2JqOiBvYmosXG4gICAgICAgICAgICBwYXRoOiBwYXRoLnNsaWNlKDApXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBpZHg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBpZHggPSBvYmoubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlcyhvYmpbaWR4XSwgcmVzdWx0cywgc2NvcGUsIHBhdGgpO1xuICAgICAgICAgICAgcGF0aC5wb3AoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHJlY3Vyc2UgdGhyb3VnaCByZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBvdGhlciB6LXNjaGVtYSBwcm9wc1xuICAgICAgICAgICAgaWYgKGtleXNbaWR4XS5pbmRleE9mKFwiX18kXCIpID09PSAwKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICBwYXRoLnB1c2goa2V5c1tpZHhdKTtcbiAgICAgICAgICAgIGNvbGxlY3RSZWZlcmVuY2VzKG9ialtrZXlzW2lkeF1dLCByZXN1bHRzLCBzY29wZSwgcGF0aCk7XG4gICAgICAgICAgICBwYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NvcGUucG9wKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBjb21waWxlQXJyYXlPZlNjaGVtYXNMb29wID0gZnVuY3Rpb24gKG1haW5SZXBvcnQsIGFycikge1xuICAgIHZhciBpZHggPSBhcnIubGVuZ3RoLFxuICAgICAgICBjb21waWxlZENvdW50ID0gMDtcblxuICAgIHdoaWxlIChpZHgtLSkge1xuXG4gICAgICAgIC8vIHRyeSB0byBjb21waWxlIGVhY2ggc2NoZW1hIHNlcGFyYXRlbHlcbiAgICAgICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQobWFpblJlcG9ydCk7XG4gICAgICAgIHZhciBpc1ZhbGlkID0gZXhwb3J0cy5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBhcnJbaWR4XSk7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7IGNvbXBpbGVkQ291bnQrKzsgfVxuXG4gICAgICAgIC8vIGNvcHkgZXJyb3JzIHRvIHJlcG9ydFxuICAgICAgICBtYWluUmVwb3J0LmVycm9ycyA9IG1haW5SZXBvcnQuZXJyb3JzLmNvbmNhdChyZXBvcnQuZXJyb3JzKTtcblxuICAgIH1cblxuICAgIHJldHVybiBjb21waWxlZENvdW50O1xufTtcblxuZnVuY3Rpb24gZmluZElkKGFyciwgaWQpIHtcbiAgICB2YXIgaWR4ID0gYXJyLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgaWYgKGFycltpZHhdLmlkID09PSBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGFycltpZHhdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG52YXIgY29tcGlsZUFycmF5T2ZTY2hlbWFzID0gZnVuY3Rpb24gKHJlcG9ydCwgYXJyKSB7XG5cbiAgICB2YXIgY29tcGlsZWQgPSAwLFxuICAgICAgICBsYXN0TG9vcENvbXBpbGVkO1xuXG4gICAgZG8ge1xuXG4gICAgICAgIC8vIHJlbW92ZSBhbGwgVU5SRVNPTFZBQkxFX1JFRkVSRU5DRSBlcnJvcnMgYmVmb3JlIGNvbXBpbGluZyBhcnJheSBhZ2FpblxuICAgICAgICB2YXIgaWR4ID0gcmVwb3J0LmVycm9ycy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC5lcnJvcnNbaWR4XS5jb2RlID09PSBcIlVOUkVTT0xWQUJMRV9SRUZFUkVOQ0VcIikge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5lcnJvcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZW1lbWJlciBob3cgbWFueSB3ZXJlIGNvbXBpbGVkIGluIHRoZSBsYXN0IGxvb3BcbiAgICAgICAgbGFzdExvb3BDb21waWxlZCA9IGNvbXBpbGVkO1xuXG4gICAgICAgIC8vIGNvdW50IGhvdyBtYW55IGFyZSBjb21waWxlZCBub3dcbiAgICAgICAgY29tcGlsZWQgPSBjb21waWxlQXJyYXlPZlNjaGVtYXNMb29wLmNhbGwodGhpcywgcmVwb3J0LCBhcnIpO1xuXG4gICAgICAgIC8vIGZpeCBfXyRtaXNzaW5nUmVmZXJlbmNlcyBpZiBwb3NzaWJsZVxuICAgICAgICBpZHggPSBhcnIubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBzY2ggPSBhcnJbaWR4XTtcbiAgICAgICAgICAgIGlmIChzY2guX18kbWlzc2luZ1JlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4MiA9IHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVmT2JqID0gc2NoLl9fJG1pc3NpbmdSZWZlcmVuY2VzW2lkeDJdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBmaW5kSWQoYXJyLCByZWZPYmoucmVmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIG1pZ2h0IGNyZWF0ZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZPYmoub2JqW1wiX19cIiArIHJlZk9iai5rZXkgKyBcIlJlc29sdmVkXCJdID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHJlc29sdmVkIG5vdyBzbyBkZWxldGUgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5zcGxpY2UoaWR4MiwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBrZWVwIHJlcGVhdGluZyBpZiBub3QgYWxsIGNvbXBpbGVkIGFuZCBhdCBsZWFzdCBvbmUgbW9yZSB3YXMgY29tcGlsZWQgaW4gdGhlIGxhc3QgbG9vcFxuICAgIH0gd2hpbGUgKGNvbXBpbGVkICE9PSBhcnIubGVuZ3RoICYmIGNvbXBpbGVkICE9PSBsYXN0TG9vcENvbXBpbGVkKTtcblxuICAgIHJldHVybiByZXBvcnQuaXNWYWxpZCgpO1xuXG59O1xuXG5leHBvcnRzLmNvbXBpbGVTY2hlbWEgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcblxuICAgIHJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2UgPSBcIlNDSEVNQV9DT01QSUxBVElPTl9GQUlMRURcIjtcblxuICAgIC8vIGlmIHNjaGVtYSBpcyBhIHN0cmluZywgYXNzdW1lIGl0J3MgYSB1cmlcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgbG9hZGVkU2NoZW1hID0gU2NoZW1hQ2FjaGUuZ2V0U2NoZW1hQnlVcmkuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgICAgIGlmICghbG9hZGVkU2NoZW1hKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJTQ0hFTUFfTk9UX1JFQUNIQUJMRVwiLCBbc2NoZW1hXSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hID0gbG9hZGVkU2NoZW1hO1xuICAgIH1cblxuICAgIC8vIGlmIHNjaGVtYSBpcyBhbiBhcnJheSwgYXNzdW1lIGl0J3MgYW4gYXJyYXkgb2Ygc2NoZW1hc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBpbGVBcnJheU9mU2NoZW1hcy5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGFuIGlkIHRoYW4gaXQgc2hvdWxkIGJlIGNhY2hlZCBhbHJlYWR5IChpZiB0aGlzIGluc3RhbmNlIGhhcyBjb21waWxlZCBpdClcbiAgICBpZiAoc2NoZW1hLl9fJGNvbXBpbGVkICYmIHNjaGVtYS5pZCAmJiBTY2hlbWFDYWNoZS5jaGVja0NhY2hlRm9yVXJpLmNhbGwodGhpcywgc2NoZW1hLmlkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2NoZW1hLl9fJGNvbXBpbGVkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCByZS1jb21waWxlIHNjaGVtYXNcbiAgICBpZiAoc2NoZW1hLl9fJGNvbXBpbGVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaWQgJiYgdHlwZW9mIHNjaGVtYS5pZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBhZGQgdGhpcyB0byBvdXIgc2NoZW1hQ2FjaGUgKGJlZm9yZSBjb21waWxhdGlvbiBpbiBjYXNlIHdlIGhhdmUgcmVmZXJlbmNlcyBpbmNsdWRpbmcgaWQpXG4gICAgICAgIFNjaGVtYUNhY2hlLmNhY2hlU2NoZW1hQnlVcmkuY2FsbCh0aGlzLCBzY2hlbWEuaWQsIHNjaGVtYSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSwgc28gd2UgbmVlZCB0byByZW1lbWJlciBvdXIgcm9vdFxuICAgIHZhciBpc1Jvb3QgPSBmYWxzZTtcbiAgICBpZiAoIXJlcG9ydC5yb290U2NoZW1hKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBpc1Jvb3QgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGRlbGV0ZSBhbGwgX18kbWlzc2luZ1JlZmVyZW5jZXMgZnJvbSBwcmV2aW91cyBjb21waWxhdGlvbiBhdHRlbXB0c1xuICAgIHZhciBpc1ZhbGlkRXhjZXB0UmVmZXJlbmNlcyA9IHJlcG9ydC5pc1ZhbGlkKCk7XG4gICAgZGVsZXRlIHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcztcblxuICAgIC8vIGNvbGxlY3QgYWxsIHJlZmVyZW5jZXMgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkIC0gJHJlZiBhbmQgJHNjaGVtYVxuICAgIHZhciByZWZzID0gY29sbGVjdFJlZmVyZW5jZXMuY2FsbCh0aGlzLCBzY2hlbWEpLFxuICAgICAgICBpZHggPSByZWZzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgLy8gcmVzb2x2ZSBhbGwgdGhlIGNvbGxlY3RlZCByZWZlcmVuY2VzIGludG8gX194eHhSZXNvbHZlZCBwb2ludGVyXG4gICAgICAgIHZhciByZWZPYmogPSByZWZzW2lkeF07XG4gICAgICAgIHZhciByZXNwb25zZSA9IFNjaGVtYUNhY2hlLmdldFNjaGVtYUJ5VXJpLmNhbGwodGhpcywgcmVwb3J0LCByZWZPYmoucmVmLCBzY2hlbWEpO1xuXG4gICAgICAgIC8vIHdlIGNhbiB0cnkgdG8gdXNlIGN1c3RvbSBzY2hlbWFSZWFkZXIgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHZhciBzY2hlbWFSZWFkZXIgPSB0aGlzLmdldFNjaGVtYVJlYWRlcigpO1xuICAgICAgICAgICAgaWYgKHNjaGVtYVJlYWRlcikge1xuICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwcG9zZWQgdG8gcmV0dXJuIGEgdmFsaWQgc2NoZW1hXG4gICAgICAgICAgICAgICAgdmFyIHMgPSBzY2hlbWFSZWFkZXIocmVmT2JqLnJlZik7XG4gICAgICAgICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgbmVlZHMgdG8gaGF2ZSB0aGUgaWRcbiAgICAgICAgICAgICAgICAgICAgcy5pZCA9IHJlZk9iai5yZWY7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBjb21waWxlIHRoZSBzY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJlcG9ydCA9IG5ldyBSZXBvcnQocmVwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHBvcnRzLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzdWJyZXBvcnQsIHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IGVycm9ycyB0byByZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5lcnJvcnMgPSByZXBvcnQuZXJyb3JzLmNvbmNhdChzdWJyZXBvcnQuZXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gU2NoZW1hQ2FjaGUuZ2V0U2NoZW1hQnlVcmkuY2FsbCh0aGlzLCByZXBvcnQsIHJlZk9iai5yZWYsIHNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgIHZhciBoYXNOb3RWYWxpZCA9IHJlcG9ydC5oYXNFcnJvcihcIlJFTU9URV9OT1RfVkFMSURcIiwgW3JlZk9iai5yZWZdKTtcbiAgICAgICAgICAgIHZhciBpc0Fic29sdXRlID0gVXRpbHMuaXNBYnNvbHV0ZVVyaShyZWZPYmoucmVmKTtcbiAgICAgICAgICAgIHZhciBpc0Rvd25sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBpZ25vcmVVbnJlc29sdmFibGVSZW1vdGVzID0gdGhpcy5vcHRpb25zLmlnbm9yZVVucmVzb2x2YWJsZVJlZmVyZW5jZXMgPT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpc0Fic29sdXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IGFkZCBVTlJFU09MVkFCTEVfUkVGRVJFTkNFIGZvciBzY2hlbWFzIHdlIGFscmVhZHkgaGF2ZSBkb3dubG9hZGVkXG4gICAgICAgICAgICAgICAgLy8gYW5kIHNldCB0aHJvdWdoIHNldFJlbW90ZVJlZmVyZW5jZSBtZXRob2RcbiAgICAgICAgICAgICAgICBpc0Rvd25sb2FkZWQgPSBTY2hlbWFDYWNoZS5jaGVja0NhY2hlRm9yVXJpLmNhbGwodGhpcywgcmVmT2JqLnJlZik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNOb3RWYWxpZCkge1xuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFzIFJFTU9URV9OT1RfVkFMSUQgZXJyb3IgZm9yIHRoaXMgb25lXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlnbm9yZVVucmVzb2x2YWJsZVJlbW90ZXMgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVVucmVzb2x2YWJsZVJlbW90ZXMgaXMgb24gYW5kIHJlbW90ZSBpc0Fic29sdXRlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRG93bmxvYWRlZCkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW90ZSBpcyBkb3dubG9hZGVkLCBzbyBubyBVTlJFU09MVkFCTEVfUkVGRVJFTkNFXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlcG9ydC5wYXRoLCByZWZPYmoucGF0aCk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiVU5SRVNPTFZBQkxFX1JFRkVSRU5DRVwiLCBbcmVmT2JqLnJlZl0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoID0gcmVwb3J0LnBhdGguc2xpY2UoMCwgLXJlZk9iai5wYXRoLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAvLyBwdXNibGlzaCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgb3V0XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRFeGNlcHRSZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcyA9IHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLl9fJG1pc3NpbmdSZWZlcmVuY2VzLnB1c2gocmVmT2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcyBtaWdodCBjcmVhdGUgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgICByZWZPYmoub2JqW1wiX19cIiArIHJlZk9iai5rZXkgKyBcIlJlc29sdmVkXCJdID0gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgdmFyIGlzVmFsaWQgPSByZXBvcnQuaXNWYWxpZCgpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIHNjaGVtYS5fXyRjb21waWxlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNjaGVtYS5pZCAmJiB0eXBlb2Ygc2NoZW1hLmlkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhpcyBzY2hlbWEgZnJvbSBzY2hlbWFDYWNoZSBiZWNhdXNlIGl0IGZhaWxlZCB0byBjb21waWxlXG4gICAgICAgICAgICBTY2hlbWFDYWNoZS5yZW1vdmVGcm9tQ2FjaGVCeVVyaS5jYWxsKHRoaXMsIHNjaGVtYS5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3ZSBkb24ndCBuZWVkIHRoZSByb290IHBvaW50ZXIgYW55bW9yZVxuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgcmVwb3J0LnJvb3RTY2hlbWEgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWQ7XG5cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEZvcm1hdFZhbGlkYXRvcnMgPSByZXF1aXJlKFwiLi9Gb3JtYXRWYWxpZGF0b3JzXCIpLFxuICAgIEpzb25WYWxpZGF0aW9uICAgPSByZXF1aXJlKFwiLi9Kc29uVmFsaWRhdGlvblwiKSxcbiAgICBSZXBvcnQgICAgICAgICAgID0gcmVxdWlyZShcIi4vUmVwb3J0XCIpLFxuICAgIFV0aWxzICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxudmFyIFNjaGVtYVZhbGlkYXRvcnMgPSB7XG4gICAgJHJlZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtYXBwc2F3Zy1qc29uLXBvaW50ZXItMDdcbiAgICAgICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcGJyeWFuLXp5cC1qc29uLXJlZi0wM1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS4kcmVmICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiJHJlZlwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgICRzY2hlbWE6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS1jb3JlLmh0bWwjcmZjLnNlY3Rpb24uNlxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS4kc2NoZW1hICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiJHNjaGVtYVwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG11bHRpcGxlT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjEuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tdWx0aXBsZU9mICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibXVsdGlwbGVPZlwiLCBcIm51bWJlclwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm11bHRpcGxlT2YgPD0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcIm11bHRpcGxlT2ZcIiwgXCJzdHJpY3RseSBncmVhdGVyIHRoYW4gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1heGltdW06IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjIuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhpbXVtICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWF4aW11bVwiLCBcIm51bWJlclwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGV4Y2x1c2l2ZU1heGltdW06IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjIuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImV4Y2x1c2l2ZU1heGltdW1cIiwgXCJib29sZWFuXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4aW11bSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX0RFUEVOREVOQ1lcIiwgW1wiZXhjbHVzaXZlTWF4aW11bVwiLCBcIm1heGltdW1cIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5pbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWluaW11bSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1pbmltdW1cIiwgXCJudW1iZXJcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBleGNsdXNpdmVNaW5pbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJleGNsdXNpdmVNaW5pbXVtXCIsIFwiYm9vbGVhblwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm1pbmltdW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9ERVBFTkRFTkNZXCIsIFtcImV4Y2x1c2l2ZU1pbmltdW1cIiwgXCJtaW5pbXVtXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4TGVuZ3RoOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4xLjFcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhzY2hlbWEubWF4TGVuZ3RoKSAhPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJtYXhMZW5ndGhcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcIm1heExlbmd0aFwiLCBcImdyZWF0ZXIgdGhhbiwgb3IgZXF1YWwgdG8gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1pbkxlbmd0aDogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjIuMi4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pbkxlbmd0aCkgIT09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWluTGVuZ3RoXCIsIFwiaW50ZWdlclwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm1pbkxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5MZW5ndGhcIiwgXCJncmVhdGVyIHRoYW4sIG9yIGVxdWFsIHRvIDBcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEucGF0dGVybiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInBhdHRlcm5cIiwgXCJzdHJpbmdcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBSZWdFeHAoc2NoZW1hLnBhdHRlcm4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfUEFUVEVSTlwiLCBbXCJwYXR0ZXJuXCIsIHNjaGVtYS5wYXR0ZXJuXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMS4xXG4gICAgICAgIHZhciB0eXBlID0gVXRpbHMud2hhdElzKHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgICBpZiAodHlwZSAhPT0gXCJib29sZWFuXCIgJiYgdHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImFkZGl0aW9uYWxJdGVtc1wiLCBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFkZGl0aW9uYWxJdGVtc1wiKTtcbiAgICAgICAgICAgIGV4cG9ydHMudmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4xLjFcbiAgICAgICAgdmFyIHR5cGUgPSBVdGlscy53aGF0SXMoc2NoZW1hLml0ZW1zKTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcIml0ZW1zXCIpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLml0ZW1zKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5pdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwiaXRlbXNcIik7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLml0ZW1zW2lkeF0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIml0ZW1zXCIsIFtcImFycmF5XCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjdXN0b20gLSBzdHJpY3QgbW9kZVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlQWRkaXRpb25hbCA9PT0gdHJ1ZSAmJiBzY2hlbWEuYWRkaXRpb25hbEl0ZW1zID09PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiYWRkaXRpb25hbEl0ZW1zXCJdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjdXN0b21lIC0gYXNzdW1lIGRlZmluZWQgZmFsc2UgbW9kZVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFzc3VtZUFkZGl0aW9uYWwgJiYgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gdW5kZWZpbmVkICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtYXhJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMi4xXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWF4SXRlbXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4SXRlbXMgPCAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wibWF4SXRlbXNcIiwgXCJncmVhdGVyIHRoYW4sIG9yIGVxdWFsIHRvIDBcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5JdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMy4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pbkl0ZW1zKSAhPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJtaW5JdGVtc1wiLCBcImludGVnZXJcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5taW5JdGVtcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5JdGVtc1wiLCBcImdyZWF0ZXIgdGhhbiwgb3IgZXF1YWwgdG8gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHVuaXF1ZUl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy40LjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEudW5pcXVlSXRlbXMgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1widW5pcXVlSXRlbXNcIiwgXCJib29sZWFuXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4UHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMS4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1heFByb3BlcnRpZXMpICE9PSBcImludGVnZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1heFByb3BlcnRpZXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4UHJvcGVydGllcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtYXhQcm9wZXJ0aWVzXCIsIFwiZ3JlYXRlciB0aGFuLCBvciBlcXVhbCB0byAwXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWluUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMi4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pblByb3BlcnRpZXMpICE9PSBcImludGVnZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1pblByb3BlcnRpZXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWluUHJvcGVydGllcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5Qcm9wZXJ0aWVzXCIsIFwiZ3JlYXRlciB0aGFuLCBvciBlcXVhbCB0byAwXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjMuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5yZXF1aXJlZCkgIT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInJlcXVpcmVkXCIsIFwiYXJyYXlcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5yZXF1aXJlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJyZXF1aXJlZFwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5yZXF1aXJlZC5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5yZXF1aXJlZFtpZHhdICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVkFMVUVfVFlQRVwiLCBbXCJyZXF1aXJlZFwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wicmVxdWlyZWRcIiwgXCJhbiBhcnJheSB3aXRoIHVuaXF1ZSBpdGVtc1wiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC40LjFcbiAgICAgICAgdmFyIHR5cGUgPSBVdGlscy53aGF0SXMoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKHR5cGUgIT09IFwiYm9vbGVhblwiICYmIHR5cGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLCBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC40LjFcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhzY2hlbWEucHJvcGVydGllcykgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJwcm9wZXJ0aWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpLFxuICAgICAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XSxcbiAgICAgICAgICAgICAgICB2YWwgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGtleSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCB2YWwpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGN1c3RvbSAtIHN0cmljdCBtb2RlXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VBZGRpdGlvbmFsID09PSB0cnVlICYmIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGN1c3RvbWUgLSBhc3N1bWUgZGVmaW5lZCBmYWxzZSBtb2RlXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXNzdW1lQWRkaXRpb25hbCAmJiBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3VzdG9tIC0gZm9yY2VQcm9wZXJ0aWVzXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VQcm9wZXJ0aWVzID09PSB0cnVlICYmIGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJDVVNUT01fTU9ERV9GT1JDRV9QUk9QRVJUSUVTXCIsIFtcInByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuNC4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICAgICAgdmFsID0gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFJlZ0V4cChrZXkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfUEFUVEVSTlwiLCBbXCJwYXR0ZXJuUHJvcGVydGllc1wiLCBrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJwYXR0ZXJuUHJvcGVydGllc1wiKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goa2V5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgdmFsKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjdXN0b20gLSBmb3JjZVByb3BlcnRpZXNcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgPT09IHRydWUgJiYga2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIkNVU1RPTV9NT0RFX0ZPUkNFX1BST1BFUlRJRVNcIiwgW1wicGF0dGVyblByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjUuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5kZXBlbmRlbmNpZXMpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyksXG4gICAgICAgICAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgc2NoZW1hS2V5ID0ga2V5c1tpZHhdLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFEZXBlbmRlbmN5ID0gc2NoZW1hLmRlcGVuZGVuY2llc1tzY2hlbWFLZXldLFxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gVXRpbHMud2hhdElzKHNjaGVtYURlcGVuZGVuY3kpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImRlcGVuZGVuY2llc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChzY2hlbWFLZXkpO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWFEZXBlbmRlbmN5KTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHgyID0gc2NoZW1hRGVwZW5kZW5jeS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZHgyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwibm90IGVtcHR5IGFycmF5XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaWR4Mi0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYURlcGVuZGVuY3lbaWR4Ml0gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1ZBTFVFX1RZUEVcIiwgW1wiZGVwZW5kZW5zaWNlc1wiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hRGVwZW5kZW5jeSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwiYW4gYXJyYXkgd2l0aCB1bmlxdWUgaXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9WQUxVRV9UWVBFXCIsIFtcImRlcGVuZGVuY2llc1wiLCBcIm9iamVjdCBvciBhcnJheVwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBlbnVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS4xLjFcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLmVudW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImVudW1cIiwgXCJhcnJheVwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmVudW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZW51bVwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLmVudW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcImVudW1cIiwgXCJhbiBhcnJheSB3aXRoIHVuaXF1ZSBlbGVtZW50c1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHR5cGU6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjIuMVxuICAgICAgICB2YXIgcHJpbWl0aXZlVHlwZXMgPSBbXCJhcnJheVwiLCBcImJvb2xlYW5cIiwgXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCIsIFwibnVsbFwiLCBcIm9iamVjdFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgIHByaW1pdGl2ZVR5cGVTdHIgPSBwcmltaXRpdmVUeXBlcy5qb2luKFwiLFwiKSxcbiAgICAgICAgICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNjaGVtYS50eXBlKTtcblxuICAgICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS50eXBlLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVUeXBlcy5pbmRleE9mKHNjaGVtYS50eXBlW2lkeF0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1widHlwZVwiLCBwcmltaXRpdmVUeXBlU3RyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLnR5cGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJ0eXBlXCIsIFwiYW4gb2JqZWN0IHdpdGggdW5pcXVlIHByb3BlcnRpZXNcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEudHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVR5cGVzLmluZGV4T2Yoc2NoZW1hLnR5cGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0eXBlXCIsIHByaW1pdGl2ZVR5cGVTdHJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0eXBlXCIsIFtcInN0cmluZ1wiLCBcImFycmF5XCJdXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vRW1wdHlTdHJpbmdzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgaXNBcnJheSAmJiBzY2hlbWEudHlwZS5pbmRleE9mKFwic3RyaW5nXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluTGVuZ3RoID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmVudW0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEubWluTGVuZ3RoID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub0VtcHR5QXJyYXlzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwiYXJyYXlcIiB8fCBpc0FycmF5ICYmIHNjaGVtYS50eXBlLmluZGV4T2YoXCJhcnJheVwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm1pbkl0ZW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLm1pbkl0ZW1zID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJvYmplY3RcIiB8fCBpc0FycmF5ICYmIHNjaGVtYS50eXBlLmluZGV4T2YoXCJvYmplY3RcIikgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgJiYgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcInByb3BlcnRpZXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuaXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiaXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWluSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluSXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWluSXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWF4SXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWF4SXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWF4SXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWluTGVuZ3RoID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgaXNBcnJheSAmJiBzY2hlbWEudHlwZS5pbmRleE9mKFwic3RyaW5nXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluTGVuZ3RoID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZvcm1hdCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5lbnVtID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLnBhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWluTGVuZ3RoXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZU1heExlbmd0aCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcInN0cmluZ1wiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm1heExlbmd0aCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5mb3JtYXQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZW51bSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5wYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcIm1heExlbmd0aFwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhbGxPZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMy4xXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbGxPZikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiYWxsT2ZcIiwgXCJhcnJheVwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmFsbE9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcImFsbE9mXCIsIFwiYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudFwiXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gc2NoZW1hLmFsbE9mLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJhbGxPZlwiKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuYWxsT2ZbaWR4XSk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFueU9mOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS40LjFcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLmFueU9mKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJhbnlPZlwiLCBcImFycmF5XCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEuYW55T2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiYW55T2ZcIiwgXCJhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBzY2hlbWEuYW55T2YubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFueU9mXCIpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goaWR4LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYS5hbnlPZltpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgb25lT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjUuMVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEub25lT2YpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm9uZU9mXCIsIFwiYXJyYXlcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5vbmVPZi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJvbmVPZlwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5vbmVPZi5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwib25lT2ZcIik7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLm9uZU9mW2lkeF0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjYuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5ub3QpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibm90XCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJub3RcIik7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEubm90KTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZWZpbml0aW9uczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNy4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLmRlZmluaXRpb25zKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImRlZmluaXRpb25zXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlZmluaXRpb25zKSxcbiAgICAgICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHNjaGVtYS5kZWZpbml0aW9uc1trZXldO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJkZWZpbml0aW9uc1wiKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgdmFsKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZm9ybWF0OiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuZm9ybWF0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiZm9ybWF0XCIsIFwic3RyaW5nXCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChGb3JtYXRWYWxpZGF0b3JzW3NjaGVtYS5mb3JtYXRdID09PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLmlnbm9yZVVua25vd25Gb3JtYXRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiVU5LTk9XTl9GT1JNQVRcIiwgW3NjaGVtYS5mb3JtYXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgaWQ6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS1jb3JlLmh0bWwjcmZjLnNlY3Rpb24uNy4yXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmlkICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiaWRcIiwgXCJzdHJpbmdcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0aXRsZTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi42LjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEudGl0bGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0aXRsZVwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjYuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5kZXNjcmlwdGlvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImRlc2NyaXB0aW9uXCIsIFwic3RyaW5nXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uICgvKiByZXBvcnQsIHNjaGVtYSAqLykge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNi4yXG4gICAgICAgIC8vIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgcGxhY2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIGtleXdvcmQuXG4gICAgfVxufTtcblxudmFyIHZhbGlkYXRlQXJyYXlPZlNjaGVtYXMgPSBmdW5jdGlvbiAocmVwb3J0LCBhcnIpIHtcbiAgICB2YXIgaWR4ID0gYXJyLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgYXJyW2lkeF0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVwb3J0LmlzVmFsaWQoKTtcbn07XG5cbmV4cG9ydHMudmFsaWRhdGVTY2hlbWEgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcblxuICAgIHJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2UgPSBcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRFwiO1xuXG4gICAgLy8gaWYgc2NoZW1hIGlzIGFuIGFycmF5LCBhc3N1bWUgaXQncyBhbiBhcnJheSBvZiBzY2hlbWFzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVBcnJheU9mU2NoZW1hcy5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3QgcmV2YWxpZGF0ZSBzY2hlbWEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBvbmNlXG4gICAgaWYgKHNjaGVtYS5fXyR2YWxpZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgJHNjaGVtYSBpcyBwcmVzZW50LCB0aGlzIHNjaGVtYSBzaG91bGQgdmFsaWRhdGUgYWdhaW5zdCB0aGF0ICRzY2hlbWFcbiAgICB2YXIgaGFzUGFyZW50U2NoZW1hID0gc2NoZW1hLiRzY2hlbWEgJiYgc2NoZW1hLmlkICE9PSBzY2hlbWEuJHNjaGVtYTtcbiAgICBpZiAoaGFzUGFyZW50U2NoZW1hKSB7XG4gICAgICAgIGlmIChzY2hlbWEuX18kc2NoZW1hUmVzb2x2ZWQgJiYgc2NoZW1hLl9fJHNjaGVtYVJlc29sdmVkICE9PSBzY2hlbWEpIHtcbiAgICAgICAgICAgIHZhciBzdWJSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHN1YlJlcG9ydCwgc2NoZW1hLl9fJHNjaGVtYVJlc29sdmVkLCBzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKHZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlBBUkVOVF9TQ0hFTUFfVkFMSURBVElPTl9GQUlMRURcIiwgbnVsbCwgc3ViUmVwb3J0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlVW5yZXNvbHZhYmxlUmVmZXJlbmNlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlJFRl9VTlJFU09MVkVEXCIsIFtzY2hlbWEuJHNjaGVtYV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub1R5cGVsZXNzID09PSB0cnVlKSB7XG4gICAgICAgIC8vIGlzc3VlICMzNiAtIGluaGVyaXQgdHlwZSB0byBhbnlPZiwgb25lT2YsIGFsbE9mIGlmIG5vVHlwZWxlc3MgaXMgZGVmaW5lZFxuICAgICAgICBpZiAoc2NoZW1hLnR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIHNjaGVtYXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbnlPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5hbnlPZik7IH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5vbmVPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5vbmVPZik7IH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbGxPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5hbGxPZik7IH1cbiAgICAgICAgICAgIHNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbiAoc2NoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY2gudHlwZSkgeyBzY2gudHlwZSA9IHNjaGVtYS50eXBlOyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmQgaXNzdWUgIzM2XG4gICAgICAgIGlmIChzY2hlbWEuZW51bSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzY2hlbWEuYW55T2YgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2NoZW1hLm9uZU9mID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNjaGVtYS5ub3QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2NoZW1hLiRyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcInR5cGVcIl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLFxuICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiX19cIikgPT09IDApIHsgY29udGludWU7IH1cbiAgICAgICAgaWYgKFNjaGVtYVZhbGlkYXRvcnNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBTY2hlbWFWYWxpZGF0b3JzW2tleV0uY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1BhcmVudFNjaGVtYSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub0V4dHJhS2V5d29yZHMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VORVhQRUNURURcIiwgW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpY0NoZWNrID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChzY2hlbWEuZW51bSkge1xuICAgICAgICAgICAgLy8gYnJlYWsgcmVjdXJzaW9uXG4gICAgICAgICAgICB2YXIgdG1wU2NoZW1hID0gVXRpbHMuY2xvbmUoc2NoZW1hKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0bXBTY2hlbWEuZW51bTtcbiAgICAgICAgICAgIGRlbGV0ZSB0bXBTY2hlbWEuZGVmYXVsdDtcblxuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImVudW1cIik7XG4gICAgICAgICAgICBpZHggPSBzY2hlbWEuZW51bS5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgdG1wU2NoZW1hLCBzY2hlbWEuZW51bVtpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5kZWZhdWx0KSB7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgICAgIEpzb25WYWxpZGF0aW9uLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIHNjaGVtYS5kZWZhdWx0KTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzVmFsaWQgPSByZXBvcnQuaXNWYWxpZCgpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIHNjaGVtYS5fXyR2YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaXNWYWxpZDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5pc0Fic29sdXRlVXJpID0gZnVuY3Rpb24gKHVyaSkge1xuICAgIHJldHVybiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJpKTtcbn07XG5cbmV4cG9ydHMuaXNSZWxhdGl2ZVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgICAvLyByZWxhdGl2ZSBVUklzIHRoYXQgZW5kIHdpdGggYSBoYXNoIHNpZ24sIGlzc3VlICM1NlxuICAgIHJldHVybiAvLisjLy50ZXN0KHVyaSk7XG59O1xuXG5leHBvcnRzLndoYXRJcyA9IGZ1bmN0aW9uICh3aGF0KSB7XG5cbiAgICB2YXIgdG8gPSB0eXBlb2Ygd2hhdDtcblxuICAgIGlmICh0byA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAod2hhdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoYXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm9iamVjdFwiOyAvLyB0eXBlb2Ygd2hhdCA9PT0gJ29iamVjdCcgJiYgd2hhdCA9PT0gT2JqZWN0KHdoYXQpICYmICFBcnJheS5pc0FycmF5KHdoYXQpO1xuICAgIH1cblxuICAgIGlmICh0byA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHdoYXQpKSB7XG4gICAgICAgICAgICBpZiAod2hhdCAlIDEgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbnRlZ2VyXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4od2hhdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm5vdC1hLW51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcInVua25vd24tbnVtYmVyXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvOyAvLyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgZnVuY3Rpb25cblxufTtcblxuZXhwb3J0cy5hcmVFcXVhbCA9IGZ1bmN0aW9uIGFyZUVxdWFsKGpzb24xLCBqc29uMikge1xuICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLWNvcmUuaHRtbCNyZmMuc2VjdGlvbi4zLjZcblxuICAgIC8vIFR3byBKU09OIHZhbHVlcyBhcmUgc2FpZCB0byBiZSBlcXVhbCBpZiBhbmQgb25seSBpZjpcbiAgICAvLyBib3RoIGFyZSBudWxsczsgb3JcbiAgICAvLyBib3RoIGFyZSBib29sZWFucywgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWU7IG9yXG4gICAgLy8gYm90aCBhcmUgc3RyaW5ncywgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWU7IG9yXG4gICAgLy8gYm90aCBhcmUgbnVtYmVycywgYW5kIGhhdmUgdGhlIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlOyBvclxuICAgIGlmIChqc29uMSA9PT0ganNvbjIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGksIGxlbjtcblxuICAgIC8vIGJvdGggYXJlIGFycmF5cywgYW5kOlxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24xKSAmJiBBcnJheS5pc0FycmF5KGpzb24yKSkge1xuICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtczsgYW5kXG4gICAgICAgIGlmIChqc29uMS5sZW5ndGggIT09IGpzb24yLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGl0ZW1zIGF0IHRoZSBzYW1lIGluZGV4IGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uOyBvclxuICAgICAgICBsZW4gPSBqc29uMS5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKCFhcmVFcXVhbChqc29uMVtpXSwganNvbjJbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGJvdGggYXJlIG9iamVjdHMsIGFuZDpcbiAgICBpZiAoZXhwb3J0cy53aGF0SXMoanNvbjEpID09PSBcIm9iamVjdFwiICYmIGV4cG9ydHMud2hhdElzKGpzb24yKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0eSBuYW1lczsgYW5kXG4gICAgICAgIHZhciBrZXlzMSA9IE9iamVjdC5rZXlzKGpzb24xKTtcbiAgICAgICAgdmFyIGtleXMyID0gT2JqZWN0LmtleXMoanNvbjIpO1xuICAgICAgICBpZiAoIWFyZUVxdWFsKGtleXMxLCBrZXlzMikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB2YWx1ZXMgZm9yIGEgc2FtZSBwcm9wZXJ0eSBuYW1lIGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLlxuICAgICAgICBsZW4gPSBrZXlzMS5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKCFhcmVFcXVhbChqc29uMVtrZXlzMVtpXV0sIGpzb24yW2tleXMxW2ldXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5pc1VuaXF1ZUFycmF5ID0gZnVuY3Rpb24gKGFyciwgaW5kZXhlcykge1xuICAgIHZhciBpLCBqLCBsID0gYXJyLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoZXhwb3J0cy5hcmVFcXVhbChhcnJbaV0sIGFycltqXSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhlcykgeyBpbmRleGVzLnB1c2goaSwgaik7IH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnRzLmRpZmZlcmVuY2UgPSBmdW5jdGlvbiAoYmlnU2V0LCBzdWJTZXQpIHtcbiAgICB2YXIgYXJyID0gW10sXG4gICAgICAgIGlkeCA9IGJpZ1NldC5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIGlmIChzdWJTZXQuaW5kZXhPZihiaWdTZXRbaWR4XSkgPT09IC0xKSB7XG4gICAgICAgICAgICBhcnIucHVzaChiaWdTZXRbaWR4XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn07XG5cbi8vIE5PVCBhIGRlZXAgdmVyc2lvbiBvZiBjbG9uZVxuZXhwb3J0cy5jbG9uZSA9IGZ1bmN0aW9uIChzcmMpIHtcbiAgICBpZiAodHlwZW9mIHNyYyA9PT0gXCJ1bmRlZmluZWRcIikgeyByZXR1cm4gdm9pZCAwOyB9XG4gICAgaWYgKHR5cGVvZiBzcmMgIT09IFwib2JqZWN0XCIgfHwgc3JjID09PSBudWxsKSB7IHJldHVybiBzcmM7IH1cbiAgICB2YXIgcmVzLCBpZHg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgaWR4ID0gc3JjLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICByZXNbaWR4XSA9IHNyY1tpZHhdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzID0ge307XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIHJlc1trZXldID0gc3JjW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5cbmV4cG9ydHMuY2xvbmVEZWVwID0gZnVuY3Rpb24gKHNyYykge1xuICAgIHZhciB2aXNpdGVkID0gW10sIGNsb25lZCA9IFtdO1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcChzcmMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzcmMgIT09IFwib2JqZWN0XCIgfHwgc3JjID09PSBudWxsKSB7IHJldHVybiBzcmM7IH1cbiAgICAgICAgdmFyIHJlcywgaWR4LCBjaWR4O1xuXG4gICAgICAgIGNpZHggPSB2aXNpdGVkLmluZGV4T2Yoc3JjKTtcbiAgICAgICAgaWYgKGNpZHggIT09IC0xKSB7IHJldHVybiBjbG9uZWRbY2lkeF07IH1cblxuICAgICAgICB2aXNpdGVkLnB1c2goc3JjKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgICAgICBjbG9uZWQucHVzaChyZXMpO1xuICAgICAgICAgICAgaWR4ID0gc3JjLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHJlc1tpZHhdID0gY2xvbmVEZWVwKHNyY1tpZHhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHt9O1xuICAgICAgICAgICAgY2xvbmVkLnB1c2gocmVzKTtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICAgICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgICAgICByZXNba2V5XSA9IGNsb25lRGVlcChzcmNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lRGVlcChzcmMpO1xufTtcblxuLypcbiAgZm9sbG93aW5nIGZ1bmN0aW9uIGNvbWVzIGZyb20gcHVueWNvZGUuanMgbGlicmFyeVxuICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qc1xuKi9cbi8qanNoaW50IC1XMDE2Ki9cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcbiAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuICogbWF0Y2hpbmcgVVRGLTE2LlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG4gKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG4gKiBAbmFtZSBkZWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG4gKi9cbmV4cG9ydHMudWNzMmRlY29kZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sXG4gICAgICAgIGNvdW50ZXIgPSAwLFxuICAgICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZXh0cmE7XG4gICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcbiAgICAgICAgICAgIGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59O1xuLypqc2hpbnQgK1cwMTYqL1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCIuL1BvbHlmaWxsc1wiKTtcbnZhciBnZXQgICAgICAgICAgICAgICA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIFJlcG9ydCAgICAgICAgICAgID0gcmVxdWlyZShcIi4vUmVwb3J0XCIpO1xudmFyIEZvcm1hdFZhbGlkYXRvcnMgID0gcmVxdWlyZShcIi4vRm9ybWF0VmFsaWRhdG9yc1wiKTtcbnZhciBKc29uVmFsaWRhdGlvbiAgICA9IHJlcXVpcmUoXCIuL0pzb25WYWxpZGF0aW9uXCIpO1xudmFyIFNjaGVtYUNhY2hlICAgICAgID0gcmVxdWlyZShcIi4vU2NoZW1hQ2FjaGVcIik7XG52YXIgU2NoZW1hQ29tcGlsYXRpb24gPSByZXF1aXJlKFwiLi9TY2hlbWFDb21waWxhdGlvblwiKTtcbnZhciBTY2hlbWFWYWxpZGF0aW9uICA9IHJlcXVpcmUoXCIuL1NjaGVtYVZhbGlkYXRpb25cIik7XG52YXIgVXRpbHMgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcbnZhciBEcmFmdDRTY2hlbWEgICAgICA9IHJlcXVpcmUoXCIuL3NjaGVtYXMvc2NoZW1hLmpzb25cIik7XG52YXIgRHJhZnQ0SHlwZXJTY2hlbWEgPSByZXF1aXJlKFwiLi9zY2hlbWFzL2h5cGVyLXNjaGVtYS5qc29uXCIpO1xuXG4vKlxuICAgIGRlZmF1bHQgb3B0aW9uc1xuKi9cbnZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAvLyBkZWZhdWx0IHRpbWVvdXQgZm9yIGFsbCBhc3luYyB0YXNrc1xuICAgIGFzeW5jVGltZW91dDogMjAwMCxcbiAgICAvLyBmb3JjZSBhZGRpdGlvbmFsUHJvcGVydGllcyBhbmQgYWRkaXRpb25hbEl0ZW1zIHRvIGJlIGRlZmluZWQgb24gXCJvYmplY3RcIiBhbmQgXCJhcnJheVwiIHR5cGVzXG4gICAgZm9yY2VBZGRpdGlvbmFsOiBmYWxzZSxcbiAgICAvLyBhc3N1bWUgYWRkaXRpb25hbFByb3BlcnRpZXMgYW5kIGFkZGl0aW9uYWxJdGVtcyBhcmUgZGVmaW5lZCBhcyBcImZhbHNlXCIgd2hlcmUgYXBwcm9wcmlhdGVcbiAgICBhc3N1bWVBZGRpdGlvbmFsOiBmYWxzZSxcbiAgICAvLyBmb3JjZSBpdGVtcyB0byBiZSBkZWZpbmVkIG9uIFwiYXJyYXlcIiB0eXBlc1xuICAgIGZvcmNlSXRlbXM6IGZhbHNlLFxuICAgIC8vIGZvcmNlIG1pbkl0ZW1zIHRvIGJlIGRlZmluZWQgb24gXCJhcnJheVwiIHR5cGVzXG4gICAgZm9yY2VNaW5JdGVtczogZmFsc2UsXG4gICAgLy8gZm9yY2UgbWF4SXRlbXMgdG8gYmUgZGVmaW5lZCBvbiBcImFycmF5XCIgdHlwZXNcbiAgICBmb3JjZU1heEl0ZW1zOiBmYWxzZSxcbiAgICAvLyBmb3JjZSBtaW5MZW5ndGggdG8gYmUgZGVmaW5lZCBvbiBcInN0cmluZ1wiIHR5cGVzXG4gICAgZm9yY2VNaW5MZW5ndGg6IGZhbHNlLFxuICAgIC8vIGZvcmNlIG1heExlbmd0aCB0byBiZSBkZWZpbmVkIG9uIFwic3RyaW5nXCIgdHlwZXNcbiAgICBmb3JjZU1heExlbmd0aDogZmFsc2UsXG4gICAgLy8gZm9yY2UgcHJvcGVydGllcyBvciBwYXR0ZXJuUHJvcGVydGllcyB0byBiZSBkZWZpbmVkIG9uIFwib2JqZWN0XCIgdHlwZXNcbiAgICBmb3JjZVByb3BlcnRpZXM6IGZhbHNlLFxuICAgIC8vIGlnbm9yZSByZWZlcmVuY2VzIHRoYXQgY2Fubm90IGJlIHJlc29sdmVkIChyZW1vdGUgc2NoZW1hcykgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgaXMgb25seSBmb3IgcmVtb3RlIHNjaGVtYXMsIG5vdCBsb2NhbCBvbmVzXG4gICAgaWdub3JlVW5yZXNvbHZhYmxlUmVmZXJlbmNlczogZmFsc2UsXG4gICAgLy8gZGlzYWxsb3cgdXNhZ2Ugb2Yga2V5d29yZHMgdGhhdCB0aGlzIHZhbGlkYXRvciBjYW4ndCBoYW5kbGVcbiAgICBub0V4dHJhS2V5d29yZHM6IGZhbHNlLFxuICAgIC8vIGRpc2FsbG93IHVzYWdlIG9mIHNjaGVtYSdzIHdpdGhvdXQgXCJ0eXBlXCIgZGVmaW5lZFxuICAgIG5vVHlwZWxlc3M6IGZhbHNlLFxuICAgIC8vIGRpc2FsbG93IHplcm8gbGVuZ3RoIHN0cmluZ3MgaW4gdmFsaWRhdGVkIG9iamVjdHNcbiAgICBub0VtcHR5U3RyaW5nczogZmFsc2UsXG4gICAgLy8gZGlzYWxsb3cgemVybyBsZW5ndGggYXJyYXlzIGluIHZhbGlkYXRlZCBvYmplY3RzXG4gICAgbm9FbXB0eUFycmF5czogZmFsc2UsXG4gICAgLy8gZm9yY2VzIFwidXJpXCIgZm9ybWF0IHRvIGJlIGluIGZ1bGx5IHJmYzM5ODYgY29tcGxpYW50XG4gICAgc3RyaWN0VXJpczogZmFsc2UsXG4gICAgLy8gdHVybiBvbiBzb21lIG9mIHRoZSBhYm92ZVxuICAgIHN0cmljdE1vZGU6IGZhbHNlLFxuICAgIC8vIHJlcG9ydCBlcnJvciBwYXRocyBhcyBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzIHRvIGdldCB0byB0aGUgb2ZmZW5kaW5nIG5vZGVcbiAgICByZXBvcnRQYXRoQXNBcnJheTogZmFsc2UsXG4gICAgLy8gc3RvcHMgdmFsaWRhdGlvbiBhcyBzb29uIGFzIGFuIGVycm9yIGlzIGZvdW5kLCB0cnVlIGJ5IGRlZmF1bHQgYnV0IGNhbiBiZSB0dXJuZWQgb2ZmXG4gICAgYnJlYWtPbkZpcnN0RXJyb3I6IHRydWUsXG4gICAgLy8gY2hlY2sgaWYgc2NoZW1hIGZvbGxvdyBiZXN0IHByYWN0aWNlcyBhbmQgY29tbW9uIHNlbmNlXG4gICAgcGVkYW50aWNDaGVjazogZmFsc2UsXG4gICAgLy8gaWdub3JlIHVua25vd24gZm9ybWF0cyAoZG8gbm90IHJlcG9ydCB0aGVtIGFzIGFuIGVycm9yKVxuICAgIGlnbm9yZVVua25vd25Gb3JtYXRzOiBmYWxzZVxufTtcblxuLypcbiAgICBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFpTY2hlbWEob3B0aW9ucykge1xuICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgICB0aGlzLnJlZmVyZW5jZUNhY2hlID0gW107XG5cbiAgICB0aGlzLnNldFJlbW90ZVJlZmVyZW5jZShcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hXCIsIERyYWZ0NFNjaGVtYSk7XG4gICAgdGhpcy5zZXRSZW1vdGVSZWZlcmVuY2UoXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L2h5cGVyLXNjaGVtYVwiLCBEcmFmdDRIeXBlclNjaGVtYSk7XG5cbiAgICAvLyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyksXG4gICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICAgIGtleTtcblxuICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSBvcHRpb25zIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZFxuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0T3B0aW9uc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIG9wdGlvbiBwYXNzZWQgdG8gY29uc3RydWN0b3I6IFwiICsga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvcHkgdGhlIGRlZmF1bHQgb3B0aW9ucyBpbnRvIHBhc3NlZCBvcHRpb25zXG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0T3B0aW9ucyk7XG4gICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IFV0aWxzLmNsb25lKGRlZmF1bHRPcHRpb25zW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5jbG9uZShkZWZhdWx0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3RNb2RlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JjZUFkZGl0aW9uYWwgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvcmNlSXRlbXMgICAgICAgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9yY2VNYXhMZW5ndGggICA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5vRXh0cmFLZXl3b3JkcyAgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wdGlvbnMubm9UeXBlbGVzcyAgICAgICA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ub0VtcHR5U3RyaW5ncyAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5vRW1wdHlBcnJheXMgICAgPSB0cnVlO1xuICAgIH1cblxufVxuXG4vKlxuICAgIGluc3RhbmNlIG1ldGhvZHNcbiovXG5aU2NoZW1hLnByb3RvdHlwZS5jb21waWxlU2NoZW1hID0gZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgIHZhciByZXBvcnQgPSBuZXcgUmVwb3J0KHRoaXMub3B0aW9ucyk7XG5cbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICBTY2hlbWFDb21waWxhdGlvbi5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpO1xuXG4gICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgIHJldHVybiByZXBvcnQuaXNWYWxpZCgpO1xufTtcblpTY2hlbWEucHJvdG90eXBlLnZhbGlkYXRlU2NoZW1hID0gZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIudmFsaWRhdGVTY2hlbWEgd2FzIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFycmF5XCIpO1xuICAgIH1cblxuICAgIHZhciByZXBvcnQgPSBuZXcgUmVwb3J0KHRoaXMub3B0aW9ucyk7XG5cbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICB2YXIgY29tcGlsZWQgPSBTY2hlbWFDb21waWxhdGlvbi5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpO1xuICAgIGlmIChjb21waWxlZCkgeyBTY2hlbWFWYWxpZGF0aW9uLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpOyB9XG5cbiAgICB0aGlzLmxhc3RSZXBvcnQgPSByZXBvcnQ7XG4gICAgcmV0dXJuIHJlcG9ydC5pc1ZhbGlkKCk7XG59O1xuWlNjaGVtYS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoanNvbiwgc2NoZW1hLCBvcHRpb25zLCBjYWxsYmFjaykge1xuXG4gICAgaWYgKFV0aWxzLndoYXRJcyhvcHRpb25zKSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMpIHsgb3B0aW9ucyA9IHt9OyB9XG5cbiAgICB2YXIgd2hhdElzID0gVXRpbHMud2hhdElzKHNjaGVtYSk7XG4gICAgaWYgKHdoYXRJcyAhPT0gXCJzdHJpbmdcIiAmJiB3aGF0SXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJJbnZhbGlkIC52YWxpZGF0ZSBjYWxsIC0gc2NoZW1hIG11c3QgYmUgYW4gc3RyaW5nIG9yIG9iamVjdCBidXQgXCIgKyB3aGF0SXMgKyBcIiB3YXMgcGFzc2VkIVwiKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciBmb3VuZEVycm9yID0gZmFsc2U7XG4gICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQodGhpcy5vcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhciBzY2hlbWFOYW1lID0gc2NoZW1hO1xuICAgICAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYU5hbWUpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIHdpdGggaWQgJ1wiICsgc2NoZW1hTmFtZSArIFwiJyB3YXNuJ3QgZm91bmQgaW4gdGhlIHZhbGlkYXRvciBjYWNoZSFcIik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGVkID0gZmFsc2U7XG4gICAgaWYgKCFmb3VuZEVycm9yKSB7XG4gICAgICAgIGNvbXBpbGVkID0gU2NoZW1hQ29tcGlsYXRpb24uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgICB0aGlzLmxhc3RSZXBvcnQgPSByZXBvcnQ7XG4gICAgICAgIGZvdW5kRXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciB2YWxpZGF0ZWQgPSBmYWxzZTtcbiAgICBpZiAoIWZvdW5kRXJyb3IpIHtcbiAgICAgICAgdmFsaWRhdGVkID0gU2NoZW1hVmFsaWRhdGlvbi52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgICAgICBmb3VuZEVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zY2hlbWFQYXRoKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBzY2hlbWEgPSBnZXQoc2NoZW1hLCBvcHRpb25zLnNjaGVtYVBhdGgpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIHBhdGggJ1wiICsgb3B0aW9ucy5zY2hlbWFQYXRoICsgXCInIHdhc24ndCBmb3VuZCBpbiB0aGUgc2NoZW1hIVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm91bmRFcnJvcikge1xuICAgICAgICBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcmVwb3J0LnByb2Nlc3NBc3luY1Rhc2tzKHRoaXMub3B0aW9ucy5hc3luY1RpbWVvdXQsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAocmVwb3J0LmFzeW5jVGFza3MubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHZhbGlkYXRpb24gaGFzIGFzeW5jIHRhc2tzIGFuZCBjYW5ub3QgYmUgZG9uZSBpbiBzeW5jIG1vZGUsIHBsZWFzZSBwcm92aWRlIGNhbGxiYWNrIGFyZ3VtZW50LlwiKTtcbiAgICB9XG5cbiAgICAvLyBhc3NpZ24gbGFzdFJlcG9ydCBzbyBlcnJvcnMgYXJlIHJldHJpZXZhYmxlIGluIHN5bmMgbW9kZVxuICAgIHRoaXMubGFzdFJlcG9ydCA9IHJlcG9ydDtcbiAgICByZXR1cm4gcmVwb3J0LmlzVmFsaWQoKTtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRMYXN0RXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMubGFzdFJlcG9ydC5lcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgZSA9IG5ldyBFcnJvcigpO1xuICAgIGUubmFtZSA9IFwiei1zY2hlbWEgdmFsaWRhdGlvbiBlcnJvclwiO1xuICAgIGUubWVzc2FnZSA9IHRoaXMubGFzdFJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2U7XG4gICAgZS5kZXRhaWxzID0gdGhpcy5sYXN0UmVwb3J0LmVycm9ycztcbiAgICByZXR1cm4gZTtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRMYXN0RXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmxhc3RSZXBvcnQgJiYgdGhpcy5sYXN0UmVwb3J0LmVycm9ycy5sZW5ndGggPiAwID8gdGhpcy5sYXN0UmVwb3J0LmVycm9ycyA6IHVuZGVmaW5lZDtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRNaXNzaW5nUmVmZXJlbmNlcyA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICBhcnIgPSBhcnIgfHwgdGhpcy5sYXN0UmVwb3J0LmVycm9ycztcbiAgICB2YXIgcmVzID0gW10sXG4gICAgICAgIGlkeCA9IGFyci5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGFycltpZHhdO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gXCJVTlJFU09MVkFCTEVfUkVGRVJFTkNFXCIpIHtcbiAgICAgICAgICAgIHZhciByZWZlcmVuY2UgPSBlcnJvci5wYXJhbXNbMF07XG4gICAgICAgICAgICBpZiAocmVzLmluZGV4T2YocmVmZXJlbmNlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChyZWZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvci5pbm5lcikge1xuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLmdldE1pc3NpbmdSZWZlcmVuY2VzKGVycm9yLmlubmVyKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRNaXNzaW5nUmVtb3RlUmVmZXJlbmNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWlzc2luZ1JlZmVyZW5jZXMgPSB0aGlzLmdldE1pc3NpbmdSZWZlcmVuY2VzKCksXG4gICAgICAgIG1pc3NpbmdSZW1vdGVSZWZlcmVuY2VzID0gW10sXG4gICAgICAgIGlkeCA9IG1pc3NpbmdSZWZlcmVuY2VzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIHJlbW90ZVJlZmVyZW5jZSA9IFNjaGVtYUNhY2hlLmdldFJlbW90ZVBhdGgobWlzc2luZ1JlZmVyZW5jZXNbaWR4XSk7XG4gICAgICAgIGlmIChyZW1vdGVSZWZlcmVuY2UgJiYgbWlzc2luZ1JlbW90ZVJlZmVyZW5jZXMuaW5kZXhPZihyZW1vdGVSZWZlcmVuY2UpID09PSAtMSkge1xuICAgICAgICAgICAgbWlzc2luZ1JlbW90ZVJlZmVyZW5jZXMucHVzaChyZW1vdGVSZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtaXNzaW5nUmVtb3RlUmVmZXJlbmNlcztcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5zZXRSZW1vdGVSZWZlcmVuY2UgPSBmdW5jdGlvbiAodXJpLCBzY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzY2hlbWEgPSBKU09OLnBhcnNlKHNjaGVtYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gVXRpbHMuY2xvbmVEZWVwKHNjaGVtYSk7XG4gICAgfVxuICAgIFNjaGVtYUNhY2hlLmNhY2hlU2NoZW1hQnlVcmkuY2FsbCh0aGlzLCB1cmksIHNjaGVtYSk7XG59O1xuWlNjaGVtYS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWEgPSBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQodGhpcy5vcHRpb25zKTtcbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICAvLyBjbG9uZSBiZWZvcmUgbWFraW5nIGFueSBtb2RpZmljYXRpb25zXG4gICAgc2NoZW1hID0gVXRpbHMuY2xvbmVEZWVwKHNjaGVtYSk7XG5cbiAgICB2YXIgdmlzaXRlZCA9IFtdO1xuXG4gICAgLy8gY2xlYW4tdXAgdGhlIHNjaGVtYSBhbmQgcmVzb2x2ZSByZWZlcmVuY2VzXG4gICAgdmFyIGNsZWFudXAgPSBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB0eXBlT2YgPSBVdGlscy53aGF0SXMoc2NoZW1hKTtcbiAgICAgICAgaWYgKHR5cGVPZiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlT2YgIT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5fX18kdmlzaXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NoZW1hLl9fXyR2aXNpdGVkID0gdHJ1ZTtcbiAgICAgICAgdmlzaXRlZC5wdXNoKHNjaGVtYSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS4kcmVmICYmIHNjaGVtYS5fXyRyZWZSZXNvbHZlZCkge1xuICAgICAgICAgICAgdmFyIGZyb20gPSBzY2hlbWEuX18kcmVmUmVzb2x2ZWQ7XG4gICAgICAgICAgICB2YXIgdG8gPSBzY2hlbWE7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLiRyZWY7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLl9fJHJlZlJlc29sdmVkO1xuICAgICAgICAgICAgZm9yIChrZXkgaW4gZnJvbSkge1xuICAgICAgICAgICAgICAgIGlmIChmcm9tLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJfXyRcIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXAoc2NoZW1hW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjbGVhbnVwKHNjaGVtYSk7XG4gICAgdmlzaXRlZC5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIGRlbGV0ZSBzLl9fXyR2aXNpdGVkO1xuICAgIH0pO1xuXG4gICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgIGlmIChyZXBvcnQuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5nZXRMYXN0RXJyb3IoKTtcbiAgICB9XG59O1xuWlNjaGVtYS5wcm90b3R5cGUuc2V0U2NoZW1hUmVhZGVyID0gZnVuY3Rpb24gKHNjaGVtYVJlYWRlcikge1xuICAgIHJldHVybiBaU2NoZW1hLnNldFNjaGVtYVJlYWRlcihzY2hlbWFSZWFkZXIpO1xufTtcblpTY2hlbWEucHJvdG90eXBlLmdldFNjaGVtYVJlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gWlNjaGVtYS5zY2hlbWFSZWFkZXI7XG59O1xuXG4vKlxuICAgIHN0YXRpYyBtZXRob2RzXG4qL1xuWlNjaGVtYS5zZXRTY2hlbWFSZWFkZXIgPSBmdW5jdGlvbiAoc2NoZW1hUmVhZGVyKSB7XG4gICAgWlNjaGVtYS5zY2hlbWFSZWFkZXIgPSBzY2hlbWFSZWFkZXI7XG59O1xuWlNjaGVtYS5yZWdpc3RlckZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXROYW1lLCB2YWxpZGF0b3JGdW5jdGlvbikge1xuICAgIEZvcm1hdFZhbGlkYXRvcnNbZm9ybWF0TmFtZV0gPSB2YWxpZGF0b3JGdW5jdGlvbjtcbn07XG5aU2NoZW1hLnVucmVnaXN0ZXJGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0TmFtZSkge1xuICAgIGRlbGV0ZSBGb3JtYXRWYWxpZGF0b3JzW2Zvcm1hdE5hbWVdO1xufTtcblpTY2hlbWEuZ2V0UmVnaXN0ZXJlZEZvcm1hdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKEZvcm1hdFZhbGlkYXRvcnMpO1xufTtcblpTY2hlbWEuZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFV0aWxzLmNsb25lRGVlcChkZWZhdWx0T3B0aW9ucyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFpTY2hlbWE7XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9oeXBlci1zY2hlbWEjXCIsXG4gICAgXCJpZFwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvaHlwZXItc2NoZW1hI1wiLFxuICAgIFwidGl0bGVcIjogXCJKU09OIEh5cGVyLVNjaGVtYVwiLFxuICAgIFwiYWxsT2ZcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIlxuICAgICAgICB9XG4gICAgXSxcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhbGxPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvbmVPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJsaW5rc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9saW5rRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImZyYWdtZW50UmVzb2x1dGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1lZGlhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBtZWRpYSB0eXBlLCBhcyBkZXNjcmliZWQgaW4gUkZDIDIwNDZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiYmluYXJ5RW5jb2RpbmdcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBjb250ZW50IGVuY29kaW5nIHNjaGVtZSwgYXMgZGVzY3JpYmVkIGluIFJGQyAyMDQ1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhTdGFydFwiOiB7XG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5zdGFuY2VzJyBVUklzIG11c3Qgc3RhcnQgd2l0aCB0aGlzIHZhbHVlIGZvciB0aGlzIHNjaGVtYSB0byBhcHBseSB0byB0aGVtXCIsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImxpbmtEZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwiTGluayBEZXNjcmlwdGlvbiBPYmplY3RcIixcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiBbIFwiaHJlZlwiLCBcInJlbFwiIF0sXG4gICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFwiaHJlZlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIFVSSSB0ZW1wbGF0ZSwgYXMgZGVmaW5lZCBieSBSRkMgNjU3MCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlICQsICggYW5kICkgY2hhcmFjdGVycyBmb3IgcHJlLXByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwicmVsXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlbGF0aW9uIHRvIHRoZSB0YXJnZXQgcmVzb3VyY2Ugb2YgdGhlIGxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSB0aXRsZSBmb3IgdGhlIGxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidGFyZ2V0U2NoZW1hXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkpTT04gU2NoZW1hIGRlc2NyaWJpbmcgdGhlIGxpbmsgdGFyZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJtZWRpYVR5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWVkaWEgdHlwZSAoYXMgZGVmaW5lZCBieSBSRkMgMjA0NikgZGVzY3JpYmluZyB0aGUgbGluayB0YXJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwibWV0aG9kXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1ldGhvZCBmb3IgcmVxdWVzdGluZyB0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rIChlLmcuIGZvciBIVFRQIHRoaXMgbWlnaHQgYmUgXFxcIkdFVFxcXCIgb3IgXFxcIkRFTEVURVxcXCIpXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImVuY1R5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG1lZGlhIHR5cGUgaW4gd2hpY2ggdG8gc3VibWl0IGRhdGEgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcInNjaGVtYVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTY2hlbWEgZGVzY3JpYmluZyB0aGUgZGF0YSB0byBzdWJtaXQgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgICBcImlkXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvcmUgc2NoZW1hIG1ldGEtc2NoZW1hXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcIm1pbmltdW1cIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCI6IHtcbiAgICAgICAgICAgIFwiYWxsT2ZcIjogWyB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSwgeyBcImRlZmF1bHRcIjogMCB9IF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzaW1wbGVUeXBlc1wiOiB7XG4gICAgICAgICAgICBcImVudW1cIjogWyBcImFycmF5XCIsIFwiYm9vbGVhblwiLCBcImludGVnZXJcIiwgXCJudWxsXCIsIFwibnVtYmVyXCIsIFwib2JqZWN0XCIsIFwic3RyaW5nXCIgXVxuICAgICAgICB9LFxuICAgICAgICBcInN0cmluZ0FycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcIiRzY2hlbWFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge30sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAwLFxuICAgICAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwicmVnZXhcIlxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIFwiYWxsT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm9uZU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwibm90XCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICB9LFxuICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IFsgXCJtYXhpbXVtXCIgXSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IFsgXCJtaW5pbXVtXCIgXVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHt9XG59XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC5qcyIsImxpYi9oZWxwZXJzLmpzIiwibGliL2pzb24tc2NoZW1hLWRyYWZ0LTA0Lmpzb24iLCJsaWIvdHlwZXMvYXBpLmpzIiwibGliL3R5cGVzL29wZXJhdGlvbi5qcyIsImxpYi90eXBlcy9wYXJhbWV0ZXItdmFsdWUuanMiLCJsaWIvdHlwZXMvcGFyYW1ldGVyLmpzIiwibGliL3R5cGVzL3BhdGguanMiLCJsaWIvdHlwZXMvcmVzcG9uc2UuanMiLCJsaWIvdmFsaWRhdGlvbi9mb3JtYXQtZ2VuZXJhdG9ycy5qcyIsImxpYi92YWxpZGF0aW9uL2Zvcm1hdC12YWxpZGF0b3JzLmpzIiwibGliL3ZhbGlkYXRpb24vc2NoZW1hLmpzb24iLCJsaWIvdmFsaWRhdGlvbi92YWxpZGF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9saWIvYjY0LmpzIiwibm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXIvbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hhbmNlL2NoYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9kZWJ1Zy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2RlYnVnL2RlYnVnLmpzIiwibm9kZV9tb2R1bGVzL2RlZXAtZXh0ZW5kL2xpYi9kZWVwLWV4dGVuZC5qcyIsIm5vZGVfbW9kdWxlcy9kZXJlZi9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGVyZWYvbGliL3V0aWwvY2xvbmUtb2JqLmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL2ZpbmQtcmVmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL2RlcmVmL2xpYi91dGlsL25vcm1hbGl6ZS1zY2hlbWEuanMiLCJub2RlX21vZHVsZXMvZGVyZWYvbGliL3V0aWwvcmVzb2x2ZS1zY2hlbWEuanMiLCJub2RlX21vZHVsZXMvZGVyZWYvbGliL3V0aWwvdXJpLWhlbHBlcnMuanMiLCJub2RlX21vZHVsZXMvZGlzY29udGludW91cy1yYW5nZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvYWRkcmVzcy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvY29tbWVyY2UuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2NvbXBhbnkuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2RhdGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2Zha2UuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2ZpbmFuY2UuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2hhY2tlci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvaGVscGVycy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvaW1hZ2UuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9pbnRlcm5ldC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2J1aWxkaW5nX251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NpdHkuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9jaXR5X3ByZWZpeC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NpdHlfc3VmZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvY291bnRyeS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NvdW50cnlfY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2NvdW50eS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2RlZmF1bHRfY291bnRyeS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvcG9zdGNvZGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9zZWNvbmRhcnlfYWRkcmVzcy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL3N0YXRlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3Mvc3RhdGVfYWJici5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9hZGRyZXNzL3N0cmVldF9hZGRyZXNzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3Mvc3RyZWV0X25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYWRkcmVzcy9zdHJlZXRfc3VmZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FkZHJlc3MvdGltZV96b25lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FwcC9hdXRob3IuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vYXBwL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FwcC9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2FwcC92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2J1c2luZXNzL2NyZWRpdF9jYXJkX2V4cGlyeV9kYXRlcy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9idXNpbmVzcy9jcmVkaXRfY2FyZF9udW1iZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2J1c2luZXNzL2NyZWRpdF9jYXJkX3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2J1c2luZXNzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NlbGxfcGhvbmUvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jZWxsX3Bob25lL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbW1lcmNlL2NvbG9yLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbW1lcmNlL2RlcGFydG1lbnQuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tbWVyY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tbWVyY2UvcHJvZHVjdF9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvYWRqZWN0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvYnNfYWRqZWN0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvYnNfbm91bi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21wYW55L2JzX3ZlcmIuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9kZXNjcmlwdG9yLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY29tcGFueS9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NvbXBhbnkvbm91bi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jb21wYW55L3N1ZmZpeC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9hbWVyaWNhbl9leHByZXNzLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2RpbmVyc19jbHViLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2Rpc2NvdmVyLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL2pjYi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9sYXNlci5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9tYWVzdHJvLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2NyZWRpdF9jYXJkL21hc3RlcmNhcmQuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvc29sby5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9jcmVkaXRfY2FyZC9zd2l0Y2guanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vY3JlZGl0X2NhcmQvdmlzYS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9kYXRlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2RhdGUvbW9udGguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZGF0ZS93ZWVrZGF5LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ZpbmFuY2UvYWNjb3VudF90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ZpbmFuY2UvY3VycmVuY3kuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vZmluYW5jZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9maW5hbmNlL3RyYW5zYWN0aW9uX3R5cGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vaGFja2VyL2FiYnJldmlhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvYWRqZWN0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2hhY2tlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvaW5ndmVyYi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvbm91bi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9oYWNrZXIvdmVyYi5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9pbnRlcm5ldC9hdmF0YXJfdXJpLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL2ludGVybmV0L2RvbWFpbl9zdWZmaXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vaW50ZXJuZXQvZnJlZV9lbWFpbC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9pbnRlcm5ldC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9sb3JlbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi9sb3JlbS9zdXBwbGVtZW50YWwuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbG9yZW0vd29yZHMuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9maXJzdF9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL25hbWUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9sYXN0X25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vbmFtZS9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL25hbWUvcHJlZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL25hbWUvc3VmZml4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL25hbWUvdGl0bGUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vcGhvbmVfbnVtYmVyL2Zvcm1hdHMuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vcGhvbmVfbnVtYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9sb2NhbGVzL2VuL3RlYW0vY3JlYXR1cmUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvY2FsZXMvZW4vdGVhbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9saWIvbG9jYWxlcy9lbi90ZWFtL25hbWUuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL2xvcmVtLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9uYW1lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL2xpYi9waG9uZV9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvbGliL3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9mYWtlci9sb2NhbGUvZW4uanMiLCJub2RlX21vZHVsZXMvZmFrZXIvdmVuZG9yL21lcnNlbm5lLmpzIiwibm9kZV9tb2R1bGVzL2Zha2VyL3ZlbmRvci9wYXNzd29yZC1nZW5lcmF0b3IuanMiLCJub2RlX21vZHVsZXMvZmFrZXIvdmVuZG9yL3VzZXItYWdlbnQuanMiLCJub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJhc2U2NC9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvYm9vbGVhbi5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvaW50ZWdlci5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvbnVsbC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLWZha2VyL2xpYi90eXBlcy9vYmplY3QuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3R5cGVzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9jb250YWluZXIuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvZXJyb3IuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9oYXMtcHJvcHMuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvaW5mZXJyZWQuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvbWVyZ2UuanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvcHJpbWl0aXZlcy5qcyIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS1mYWtlci9saWIvdXRpbC9yYW5kb20uanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtZmFrZXIvbGliL3V0aWwvdHJhdmVyc2UuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoLl9iYXNlZ2V0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC5fdG9wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC5nZXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoLmlzYXJyYXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmF0aXZlLXByb21pc2Utb25seS9saWIvbnBvLnNyYy5qcyIsIm5vZGVfbW9kdWxlcy9wYXRoLXRvLXJlZ2V4cC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcHVueWNvZGUvcHVueWNvZGUuanMiLCJub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2RlY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzIiwibm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yYW5kZXhwL2xpYi9yYW5kZXhwLmpzIiwibm9kZV9tb2R1bGVzL3JldC9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmV0L2xpYi9wb3NpdGlvbnMuanMiLCJub2RlX21vZHVsZXMvcmV0L2xpYi9zZXRzLmpzIiwibm9kZV9tb2R1bGVzL3JldC9saWIvdHlwZXMuanMiLCJub2RlX21vZHVsZXMvcmV0L2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL3VybC91cmwuanMiLCJub2RlX21vZHVsZXMvdXJsL3V0aWwuanMiLCJub2RlX21vZHVsZXMvdmFsaWRhdG9yL3ZhbGlkYXRvci5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvRXJyb3JzLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9Gb3JtYXRWYWxpZGF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9Kc29uVmFsaWRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvUG9seWZpbGxzLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9SZXBvcnQuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL1NjaGVtYUNhY2hlLmpzIiwibm9kZV9tb2R1bGVzL3otc2NoZW1hL3NyYy9TY2hlbWFDb21waWxhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvU2NoZW1hVmFsaWRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy96LXNjaGVtYS9zcmMvVXRpbHMuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL1pTY2hlbWEuanMiLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL3NjaGVtYXMvaHlwZXItc2NoZW1hLmpzb24iLCJub2RlX21vZHVsZXMvei1zY2hlbWEvc3JjL3NjaGVtYXMvc2NoZW1hLmpzb24iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNyT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNwUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNoTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdGpEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDNWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqaUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdHFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3B2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2o4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1ZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDclhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1dEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3poQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDOVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydfJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydfJ10gOiBudWxsKTtcbnZhciBoZWxwZXJzID0gcmVxdWlyZSgnLi9saWIvaGVscGVycycpO1xudmFyIEpzb25SZWZzID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ0pzb25SZWZzJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydKc29uUmVmcyddIDogbnVsbCk7XG52YXIgU3dhZ2dlckFwaSA9IHJlcXVpcmUoJy4vbGliL3R5cGVzL2FwaScpO1xudmFyIFlBTUwgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snanN5YW1sJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydqc3lhbWwnXSA6IG51bGwpO1xuXG4vLyBMb2FkIHByb21pc2VzIHBvbHlmaWxsIGlmIG5lY2Vzc2FyeVxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gIHJlcXVpcmUoJ25hdGl2ZS1wcm9taXNlLW9ubHknKTtcbn1cblxuLyoqXG4gKiBBIGxpYnJhcnkgZm9yIHNpbXBsZXIgW1N3YWdnZXJdKGh0dHA6Ly9zd2FnZ2VyLmlvLykgaW50ZWdyYXRpb25zLlxuICpcbiAqIEBtb2R1bGUgU3dheVxuICovXG5cbi8qKlxuICogQ2FsbGJhY2sgdXNlZCBmb3IgdmFsaWRhdGlvbi5cbiAqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb259IFZhbGlkYXRvckNhbGxiYWNrXG4gKlxuICogQHBhcmFtIHtTd2FnZ2VyQXBpfSBhcGkgLSBUaGUgU3dhZ2dlciBBUEkgb2JqZWN0XG4gKlxuICogQHJldHVybnMge1ZhbGlkYXRpb25SZXN1bHRzfSBUaGUgdmFsaWRhdGlvbiByZXN1bHRzLlxuICovXG5cbi8qKlxuICogU2VydmVyIHJlc3BvbnNlIHdyYXBwZXIuXG4gKlxuICogU2luY2UgdGhlIGxvdyBsZXZlbCBgaHR0cC5TZXJ2ZXJSZXNwb25zZWAgb2JqZWN0IGlzIG5vdCBhbHdheXMgZ3VhcmFudGVlZCBhbmQgZXZlbiBpZiBpdCBpcywgdGhlcmUgaXMgbm8gcHVibGljIHdheVxuICogdG8gZ2F0aGVyIHRoZSBuZWNlc3NhcnkgcGFydHMgb2YgdGhlIHJlc3BvbnNlIHRvIHBlcmZvcm0gdmFsaWRhdGlvbiwgdGhpcyBvYmplY3QgZW5jYXBzdWxhdGVzIHRoZSByZXF1aXJlZCByZXNwb25zZVxuICogaW5mb3JtYXRpb24gdG8gcGVyZm9ybSByZXNwb25zZSB2YWxpZGF0aW9uLlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlcnZlclJlc3BvbnNlV3JhcHBlclxuICpcbiAqIEBwcm9wZXJ0eSB7Kn0gYm9keSAtIFRoZSByZXNwb25zZSBib2R5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2VuY29kaW5nXSAtIFRoZSBlbmNvZGluZyBvZiB0aGUgYm9keSB3aGVuIHRoZSBib2R5IGlzIGEgYEJ1ZmZlcmBcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBoZWFkZXJzIC0gVGhlIHJlc3BvbnNlIGhlYWRlcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gW3N0YXR1c0NvZGU9ZGVmYXVsdF0gLSBUaGUgcmVzcG9uc2Ugc3RhdHVzIGNvZGVcbiAqL1xuXG4vKipcbiAqIFZhbGlkYXRpb24gZXJyb3Ivd2FybmluZyBvYmplY3QuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gVmFsaWRhdGlvbkVudHJ5XG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvZGUgLSBUaGUgY29kZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBlcnJvci93YXJuaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Vycm9yXSAtIFdoZW5ldmVyIHRoZXJlIGlzIGFuIHVwc3RyZWFtIGBFcnJvcmAgZW5jb3VudGVyZWQsIGl0cyBtZXNzYWdlIGlzIGhlcmVcbiAqIEBwcm9wZXJ0eSB7VmFsaWRhdGlvbkVudHJ5W119IFtlcnJvcnNdIC0gVGhlIG5lc3RlZCBlcnJvcihzKSBlbmNvdW50ZXJlZCBkdXJpbmcgdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2xpbmVhZ2VdIC0gQ29udGFpbnMgdGhlIGNvbXBvc2l0aW9uIGxpbmVhZ2UgZm9yIGNpcmN1bGFyIGNvbXBvc2l0aW9uIGVycm9yc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yL3dhcm5pbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBUaGUgaGVhZGVyIG5hbWUgZm9yIGhlYWRlciB2YWxpZGF0aW9uIGVycm9yc1xuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBsb2NhdGlvbiBpbiB0aGUgZG9jdW1lbnQgd2hlcmUgdGhlIGVycm9yL3dhcm5pbmcgb2NjdXJyZWRcbiAqL1xuXG4vKipcbiAqIFZhbGlkYXRpb24gcmVzdWx0cyBvYmplY3QuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gVmFsaWRhdGlvblJlc3VsdHNcbiAqXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRpb25FbnRyeVtdfSBlcnJvcnMgLSBUaGUgdmFsaWRhdGlvbiBlcnJvcnNcbiAqIEBwcm9wZXJ0eSB7VmFsaWRhdGlvbkVudHJ5W119IHdhcm5pbmdzIC0gVGhlIHZhbGlkYXRpb24gd2FybmluZ3NcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBTd2FnZ2VyQXBpIG9iamVjdCBmcm9tIGl0cyBTd2FnZ2VyIGRlZmluaXRpb24ocykuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgbG9hZGluZyB0aGUgZGVmaW5pdGlvbihzKVxuICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfSBvcHRpb25zLmRlZmluaXRpb24gLSBUaGUgU3dhZ2dlciBkZWZpbml0aW9uIGxvY2F0aW9uIG9yIHN0cnVjdHVyZVxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLmpzb25SZWZzXSAtICooU2VlIFtKc29uUmVmc35Kc29uUmVmc09wdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS93aGl0bG9ja2pjL2pzb24tcmVmcy9ibG9iL21hc3Rlci9kb2NzL0FQSS5tZCNtb2R1bGVfSnNvblJlZnMuLkpzb25SZWZzT3B0aW9ucykpKlxuICogQHBhcmFtIHtWYWxpZGF0b3JDYWxsYmFja1tdfSBbb3B0aW9ucy5jdXN0b21WYWxpZGF0b3JzXSAtIFRoZSBjdXN0b20gdmFsaWRhdG9yc1xuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgcHJvbWlzZVxuICpcbiAqIEBleGFtcGxlXG4gKiBTd2FnZ2VyQXBpLmNyZWF0ZSh7ZGVmaW5pdGlvbjogJ2h0dHA6Ly9wZXRzdG9yZS5zd2FnZ2VyLmlvL3YyL3N3YWdnZXIueWFtbCd9KVxuICogICAudGhlbihmdW5jdGlvbiAoYXBpKSB7XG4gKiAgICAgY29uc29sZS5sb2coJ0RvY3VtZW50YXRpb24gVVJMOiAnLCBhcGkuZG9jdW1lbnRhdGlvbik7XG4gKiAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gKiAgIH0pO1xuICovXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgYWxsVGFza3MgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgdmFyIGNPcHRpb25zO1xuXG4gIC8vIFZhbGlkYXRlIGFyZ3VtZW50c1xuICBhbGxUYXNrcyA9IGFsbFRhc2tzLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgaWYgKF8uaXNVbmRlZmluZWQob3B0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBpcyByZXF1aXJlZCcpO1xuICAgICAgfSBlbHNlIGlmICghXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1VuZGVmaW5lZChvcHRpb25zLmRlZmluaXRpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuZGVmaW5pdGlvbiBpcyByZXF1aXJlZCcpO1xuICAgICAgfSBlbHNlIGlmICghXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMuZGVmaW5pdGlvbikgJiYgIV8uaXNTdHJpbmcob3B0aW9ucy5kZWZpbml0aW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLmRlZmluaXRpb24gbXVzdCBiZSBlaXRoZXIgYW4gb2JqZWN0IG9yIGEgc3RyaW5nJyk7XG4gICAgICB9IGVsc2UgaWYgKCFfLmlzVW5kZWZpbmVkKG9wdGlvbnMuanNvblJlZnMpICYmICFfLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5qc29uUmVmcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5qc29uUmVmcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgfSBlbHNlIGlmICghXy5pc1VuZGVmaW5lZChvcHRpb25zLmN1c3RvbVZhbGlkYXRvcnMpICYmICFfLmlzQXJyYXkob3B0aW9ucy5jdXN0b21WYWxpZGF0b3JzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zLmN1c3RvbVZhbGlkYXRvcnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgfVxuXG4gICAgICBfLmZvckVhY2gob3B0aW9ucy5jdXN0b21WYWxpZGF0b3JzLCBmdW5jdGlvbiAodmFsaWRhdG9yLCBpbmRleCkge1xuICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbih2YWxpZGF0b3IpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5jdXN0b21WYWxpZGF0b3JzIGF0IGluZGV4ICcgKyBpbmRleCArICcgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBpbnB1dCBvcHRpb25zIHNvIGFzIG5vdCB0byBhbHRlciB0aGVtXG4gIGNPcHRpb25zID0gXy5jbG9uZURlZXAob3B0aW9ucyk7XG5cbiAgLy8gXG4gIGFsbFRhc2tzID0gYWxsVGFza3NcbiAgICAvLyBSZXNvbHZlIHJlbGF0aXZlL3JlbW90ZSByZWZlcmVuY2VzXG4gICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUHJlcGFyZSB0aGUganNvbi1yZWZzIG9wdGlvbnNcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKGNPcHRpb25zLmpzb25SZWZzKSkge1xuICAgICAgICBjT3B0aW9ucy5qc29uUmVmcyA9IHt9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbmNsdWRlIGludmFsaWQgcmVmZXJlbmNlIGluZm9ybWF0aW9uXG4gICAgICBjT3B0aW9ucy5qc29uUmVmcy5pbmNsdWRlSW52YWxpZCA9IHRydWU7XG5cbiAgICAgIC8vIFJlc29sdmUgb25seSByZWxhdGl2ZS9yZW1vdGUgcmVmZXJlbmNlc1xuICAgICAgY09wdGlvbnMuanNvblJlZnMuZmlsdGVyID0gWydyZWxhdGl2ZScsICdyZW1vdGUnXTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSBqc29uLXJlZnMgb3B0aW9ucyB0byBwcm9jZXNzIFlBTUxcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKGNPcHRpb25zLmpzb25SZWZzLmxvYWRlck9wdGlvbnMpKSB7XG4gICAgICAgIGNPcHRpb25zLmpzb25SZWZzLmxvYWRlck9wdGlvbnMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaXNVbmRlZmluZWQoY09wdGlvbnMuanNvblJlZnMubG9hZGVyT3B0aW9ucy5wcm9jZXNzQ29udGVudCkpIHtcbiAgICAgICAgY09wdGlvbnMuanNvblJlZnMubG9hZGVyT3B0aW9ucy5wcm9jZXNzQ29udGVudCA9IGZ1bmN0aW9uIChyZXMsIGNiKSB7XG4gICAgICAgICAgY2IodW5kZWZpbmVkLCBZQU1MLnNhZmVMb2FkKHJlcy50ZXh0KSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRlIGpzb24tcmVmcyBBUElcbiAgICAgIGlmIChfLmlzU3RyaW5nKGNPcHRpb25zLmRlZmluaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBKc29uUmVmcy5yZXNvbHZlUmVmc0F0KGNPcHRpb25zLmRlZmluaXRpb24sIGNPcHRpb25zLmpzb25SZWZzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBKc29uUmVmcy5yZXNvbHZlUmVmcyhjT3B0aW9ucy5kZWZpbml0aW9uLCBjT3B0aW9ucy5qc29uUmVmcyk7XG4gICAgICB9XG4gICAgfSlcbiAgICAvLyBSZXNvbHZlIGxvY2FsIHJlZmVyZW5jZXMgYW5kIG1lcmdlIHJlc3VsdHNcbiAgICAudGhlbihmdW5jdGlvbiAocmVtb3RlUmVzdWx0cykge1xuICAgICAgLy8gUmVzb2x2ZSBhbGwgcmVmZXJlbmNlcyAoU2hvdWxkIG9ubHkgcmVzb2x2ZSBsb2NhbHMgbm93IHNpbmNlIHRoZSByZW1vdGUgcmVmZXJlbmNlcyBhcmUgcmVzb2x2ZWQpXG4gICAgICBkZWxldGUgY09wdGlvbnMuanNvblJlZnMuZmlsdGVyO1xuXG4gICAgICByZXR1cm4gSnNvblJlZnMucmVzb2x2ZVJlZnMocmVtb3RlUmVzdWx0cy5yZXNvbHZlZCwgY09wdGlvbnMuanNvblJlZnMpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBTd2FnZ2VyIGRlZmluaXRpb25cbiAgICAgICAgICAgIGRlZmluaXRpb246IF8uaXNTdHJpbmcoY09wdGlvbnMuZGVmaW5pdGlvbikgPyByZW1vdGVSZXN1bHRzLnZhbHVlIDogY09wdGlvbnMuZGVmaW5pdGlvbixcbiAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBTd2FnZ2VyIGRlZmluaXRpb24gd2l0aCBpdHMgcmVtb3RlIHJlZmVyZW5jZXMgcmVzb2x2ZWRcbiAgICAgICAgICAgIGRlZmluaXRpb25SZW1vdGVzUmVzb2x2ZWQ6IHJlbW90ZVJlc3VsdHMucmVzb2x2ZWQsXG4gICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgU3dhZ2dlciBkZWZpbml0aW9uIHdpdGggYWxsIGl0cyByZWZlcmVuY2VzIHJlc29sdmVkXG4gICAgICAgICAgICBkZWZpbml0aW9uQWxsUmVzb2x2ZWQ6IHJlc3VsdHMucmVzb2x2ZWQsXG4gICAgICAgICAgICAvLyBNZXJnZSB0aGUgbG9jYWwgcmVmZXJlbmNlIGRldGFpbHMgd2l0aCB0aGUgcmVtb3RlIHJlZmVyZW5jZSBkZXRhaWxzXG4gICAgICAgICAgICByZWZzOiBfLnJlZHVjZShyZXN1bHRzLnJlZnMsIGZ1bmN0aW9uIChhbGxSZWZzLCByZWZEZXRhaWxzLCByZWZQdHIpIHtcbiAgICAgICAgICAgICAgdmFyIHJlZlBhdGggPSBKc29uUmVmcy5wYXRoRnJvbVB0cihyZWZQdHIpO1xuXG4gICAgICAgICAgICAgIGlmICghXy5oYXMoYWxsUmVmcywgcmVmUHRyKSkge1xuICAgICAgICAgICAgICAgIGlmIChfLmhhcyhyZW1vdGVSZXN1bHRzLnJlc29sdmVkLCByZWZQYXRoKSkge1xuICAgICAgICAgICAgICAgICAgcmVmRGV0YWlscy52YWx1ZSA9IF8uZ2V0KHJlbW90ZVJlc3VsdHMucmVzb2x2ZWQsIHJlZlBhdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZWZEZXRhaWxzLm1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgcmVmRGV0YWlscy50eXBlID0gJ2ludmFsaWQnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFsbFJlZnNbcmVmUHRyXSA9IHJlZkRldGFpbHM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gYWxsUmVmcztcbiAgICAgICAgICAgIH0sIHJlbW90ZVJlc3VsdHMucmVmcylcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgLy8gUHJvY2VzcyB0aGUgU3dhZ2dlciBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBBUElcbiAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgYWxsIGNpcmN1bGFyIG9iamVjdHMgYXMgei1zY2hlbWEgZG9lcyBub3Qgd29yayB3aXRoIHRoZW06XG4gICAgICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96YWdnaW5vL3otc2NoZW1hL2lzc3Vlcy8xMzdcbiAgICAgIGhlbHBlcnMucmVtb3ZlQ2lyY3VsYXJzKHJlc3VsdHMuZGVmaW5pdGlvbik7XG4gICAgICBoZWxwZXJzLnJlbW92ZUNpcmN1bGFycyhyZXN1bHRzLmRlZmluaXRpb25SZW1vdGVzUmVzb2x2ZWQpO1xuICAgICAgaGVscGVycy5yZW1vdmVDaXJjdWxhcnMocmVzdWx0cy5kZWZpbml0aW9uQWxsUmVzb2x2ZWQpO1xuXG4gICAgICAvLyBDcmVhdGUgb2JqZWN0IG1vZGVsXG4gICAgICByZXR1cm4gbmV3IFN3YWdnZXJBcGkocmVzdWx0cy5kZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZGVmaW5pdGlvblJlbW90ZXNSZXNvbHZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmRlZmluaXRpb25BbGxSZXNvbHZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnJlZnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGFsbFRhc2tzO1xufTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xudmFyIGZvcm1hdEdlbmVyYXRvcnMgPSByZXF1aXJlKCcuL3ZhbGlkYXRpb24vZm9ybWF0LWdlbmVyYXRvcnMnKTtcbnZhciBmb3JtYXRWYWxpZGF0b3JzID0gcmVxdWlyZSgnLi92YWxpZGF0aW9uL2Zvcm1hdC12YWxpZGF0b3JzJyk7XG52YXIgbW9ja2VyID0gcmVxdWlyZSgnanNvbi1zY2hlbWEtZmFrZXInKTtcbnZhciBaU2NoZW1hID0gcmVxdWlyZSgnei1zY2hlbWEnKTtcblxudmFyIGNvbGxlY3Rpb25Gb3JtYXRzID0gW3VuZGVmaW5lZCwgJ2NzdicsICdtdWx0aScsICdwaXBlcycsICdzc3YnLCAndHN2J107XG52YXIgZHJhZnQwNEpzb24gPSByZXF1aXJlKCcuL2pzb24tc2NoZW1hLWRyYWZ0LTA0Lmpzb24nKTtcbnZhciBkcmFmdDA0VXJsID0gJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hJztcbnZhciBqc29uTW9ja2VyID0gY3JlYXRlSlNPTk1vY2tlcigpO1xudmFyIGpzb25TY2hlbWFWYWxpZGF0b3IgPSBjcmVhdGVKU09OVmFsaWRhdG9yKCk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2Jsb2IvbWFzdGVyL3ZlcnNpb25zLzIuMC5tZCNwYXJhbWV0ZXItb2JqZWN0XG52YXIgcGFyYW1ldGVyU2NoZW1hUHJvcGVydGllcyA9IFtcbiAgJ2FsbG93RW1wdHlWYWx1ZScsXG4gICdkZWZhdWx0JyxcbiAgJ2Rlc2NyaXB0aW9uJyxcbiAgJ2VudW0nLFxuICAnZXhjbHVzaXZlTWF4aW11bScsXG4gICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgJ2Zvcm1hdCcsXG4gICdpdGVtcycsXG4gICdtYXhJdGVtcycsXG4gICdtYXhMZW5ndGgnLFxuICAnbWF4aW11bScsXG4gICdtaW5JdGVtcycsXG4gICdtaW5MZW5ndGgnLFxuICAnbWluaW11bScsXG4gICdtdWx0aXBsZU9mJyxcbiAgJ3BhdHRlcm4nLFxuICAndHlwZScsXG4gICd1bmlxdWVJdGVtcydcbl07XG52YXIgdHlwZXMgPSBbJ2FycmF5JywgJ2Jvb2xlYW4nLCAnaW50ZWdlcicsICdvYmplY3QnLCAnbnVtYmVyJywgJ3N0cmluZyddO1xuXG5mdW5jdGlvbiBjcmVhdGVKU09OTW9ja2VyICgpIHtcbiAgLy8gRXh0ZW5kIGZha2VyLmpzIHRvIG9ubHkgaW5jbHVkZSB0aGUgJ2VuJyBsb2NhbGVcbiAgbW9ja2VyLmV4dGVuZCgnZmFrZXInLCBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgICBmYWtlci5sb2NhbGUgPSAnZW4nO1xuXG4gICAgcmV0dXJuIGZha2VyO1xuICB9KTtcblxuICAvLyBBZGQgdGhlIGN1c3RvbSBmb3JtYXQgZ2VuZXJhdG9yc1xuICBfLmVhY2goZm9ybWF0R2VuZXJhdG9ycywgZnVuY3Rpb24gKGhhbmRsZXIsIG5hbWUpIHtcbiAgICBtb2NrZXIuZm9ybWF0cyhuYW1lLCBoYW5kbGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1vY2tlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSlNPTlZhbGlkYXRvciAoKSB7XG4gIHZhciB2YWxpZGF0b3IgPSBuZXcgWlNjaGVtYSh7XG4gICAgaWdub3JlVW5rbm93bkZvcm1hdHM6IHRydWUsXG4gICAgcmVwb3J0UGF0aEFzQXJyYXk6IHRydWVcbiAgfSk7XG5cbiAgLy8gQWRkIHRoZSBkcmFmdC0wNCBzcGVjXG4gIHZhbGlkYXRvci5zZXRSZW1vdGVSZWZlcmVuY2UoZHJhZnQwNFVybCwgZHJhZnQwNEpzb24pO1xuXG4gIC8vIEFkZCB0aGUgY3VzdG9tIHZhbGlkYXRvcnNcbiAgXy5lYWNoKGZvcm1hdFZhbGlkYXRvcnMsIGZ1bmN0aW9uIChoYW5kbGVyLCBuYW1lKSB7XG4gICAgWlNjaGVtYS5yZWdpc3RlckZvcm1hdChuYW1lLCBoYW5kbGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRvcjtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRXJyb3IgKG9iaikge1xuICAvLyBSZW1vdmUgZmllbGRzIHRoYXQgYXJlIG5vdCBpbXBvcnRhbnQgb3IgYXJlIG5vdCBhIHBhcnQgb2YgdGhlIGV4cG9zZWQgY29udHJhY3RcbiAgZGVsZXRlIG9iai5wYXJhbXM7XG4gIGRlbGV0ZSBvYmouc2NoZW1hSWQ7XG5cbiAgaWYgKG9iai5pbm5lcikge1xuICAgIF8uZWFjaChvYmouaW5uZXIsIGZ1bmN0aW9uIChuT2JqKSB7XG4gICAgICBub3JtYWxpemVFcnJvcihuT2JqKTtcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBIZWxwZXIgbWV0aG9kIHRvIHRha2UgYSBTd2FnZ2VyIHBhcmFtZXRlciBkZWZpbml0aW9uIGFuZCBjb21wdXRlIGl0cyBzY2hlbWEuXG4gKlxuICogRm9yIG5vbi1ib2R5IFN3YWdnZXIgcGFyYW1ldGVycywgdGhlIGRlZmluaXRpb24gaXRzZWxmIGlzIG5vdCBzdWl0YWJsZSBhcyBhIEpTT04gU2NoZW1hIHNvIHdlIG11c3QgY29tcHV0ZSBpdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1EZWYgLSBUaGUgcGFyYW1ldGVyIGRlZmluaXRpb25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgY29tcHV0ZWQgc2NoZW1hXG4gKi9cbm1vZHVsZS5leHBvcnRzLmNvbXB1dGVQYXJhbWV0ZXJTY2hlbWEgPSBmdW5jdGlvbiAocGFyYW1EZWYpIHtcbiAgdmFyIHNjaGVtYTtcblxuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbURlZi5zY2hlbWEpKSB7XG4gICAgc2NoZW1hID0ge307XG5cbiAgICAvLyBCdWlsZCB0aGUgc2NoZW1hIGZyb20gdGhlIHNjaGVtYS1saWtlIHBhcmFtZXRlciBzdHJ1Y3R1cmVcbiAgICBfLmZvckVhY2gocGFyYW1ldGVyU2NoZW1hUHJvcGVydGllcywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJhbURlZltuYW1lXSkpIHtcbiAgICAgICAgc2NoZW1hW25hbWVdID0gcGFyYW1EZWZbbmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2NoZW1hID0gcGFyYW1EZWYuc2NoZW1hO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSByYXcgSmF2YVNjcmlwdCB2YWx1ZSB0byBhIEpTT04gU2NoZW1hIHZhbHVlIGJhc2VkIG9uIGl0cyBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSAtIFRoZSBzY2hlbWEgZm9yIHRoZSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBUaGUgY29udmVyc2lvbiBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29sbGVjdGlvbkZvcm1hdF0gLSBUaGUgY29sbGVjdGlvbiBmb3JtYXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5lbmNvZGluZ10gLSBUaGUgZW5jb2RpbmcgaWYgdGhlIHJhdyB2YWx1ZSBpcyBhIGBCdWZmZXJgXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIGNvbnZlcnRlZCB2YWx1ZVxuICpcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSUYgdGhlIGBjb2xsZWN0aW9uRm9ybWF0YCBvciBgdHlwZWAgaXMgaW52YWxpZCBmb3IgdGhlIGBzY2hlbWFgLCBvciBpZiBjb252ZXJzaW9uIGZhaWxzXG4gKi9cbnZhciBjb252ZXJ0VmFsdWUgPSBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0VmFsdWUgPSBmdW5jdGlvbiAoc2NoZW1hLCBvcHRpb25zLCB2YWx1ZSkge1xuICB2YXIgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlOyAvLyBVc2VkIGluIGVycm9yIHJlcG9ydGluZyBmb3IgaW52YWxpZCB2YWx1ZXNcbiAgdmFyIHR5cGUgPSBfLmlzUGxhaW5PYmplY3Qoc2NoZW1hKSA/IHNjaGVtYS50eXBlIDogdW5kZWZpbmVkO1xuICB2YXIgcFZhbHVlID0gdmFsdWU7XG4gIHZhciBwVHlwZSA9IHR5cGVvZiBwVmFsdWU7XG4gIHZhciBlcnI7XG5cbiAgLy8gSWYgdGhlcmUgaXMgYW4gZXhwbGljaXQgdHlwZSBwcm92aWRlZCwgbWFrZSBzdXJlIGl0J3Mgb25lIG9mIHRoZSBzdXBwb3J0ZWQgb25lc1xuICBpZiAoXy5oYXMoc2NoZW1hLCAndHlwZScpICYmIHR5cGVzLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBcXCd0eXBlXFwnIHZhbHVlOiAnICsgdHlwZSk7XG4gIH1cblxuICAvLyBTaW5jZSBKU09OIFNjaGVtYSBhbGxvd3MgeW91IHRvIG5vdCBzcGVjaWZ5IGEgdHlwZSBhbmQgaXQgaXMgdHJlYXRlZCBhcyBhIHdpbGRjYXJkIG9mIHNvcnRzLCB3ZSBzaG91bGQgbm90IGRvIGFueVxuICAvLyBjb2VyY2lvbiBmb3IgdGhlc2UgdHlwZXMgb2YgdmFsdWVzLlxuICBpZiAoXy5pc1VuZGVmaW5lZCh0eXBlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHZhbHVlLCBkbyBub3QgY29udmVydCBpdFxuICBpZiAoXy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvLyBDb252ZXJ0IEJ1ZmZlciB2YWx1ZSB0byBTdHJpbmdcbiAgLy8gKFdlIHVzZSB0aGlzIHR5cGUgb2YgY2hlY2sgdG8gaWRlbnRpZnkgQnVmZmVyIG9iamVjdHMuICBUaGUgYnJvd3NlciBkb2VzIG5vdCBoYXZlIGEgQnVmZmVyIHR5cGUgYW5kIHRvIGF2b2lkIGhhdmluZ1xuICAvLyAgaW1wb3J0IHRoZSBicm93c2VyaWZ5IGJ1ZmZlciBtb2R1bGUsIHdlIGp1c3QgZG8gYSBzaW1wbGUgY2hlY2suICBUaGlzIGlzIGJyaXR0bGUgYnV0IHNob3VsZCB3b3JrLilcbiAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZS5yZWFkVUludDgpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZyhvcHRpb25zLmVuY29kaW5nKTtcbiAgICBwVmFsdWUgPSB2YWx1ZTtcbiAgICBwVHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBlbXB0eSBhbmQgZW1wdHkgaXMgYWxsb3dlZCwgdXNlIGl0XG4gIGlmIChzY2hlbWEuYWxsb3dFbXB0eVZhbHVlICYmIHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIEF0dGVtcHQgdG8gcGFyc2UgdGhlIHN0cmluZyBhcyBKU09OIGlmIHRoZSB0eXBlIGlzIGFycmF5IG9yIG9iamVjdFxuICBpZiAoWydhcnJheScsICdvYmplY3QnXS5pbmRleE9mKHR5cGUpID4gLTEpIHtcbiAgICB0cnkge1xuICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwganVzdCBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgY2FzZSAnYXJyYXknOlxuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgaWYgKGNvbGxlY3Rpb25Gb3JtYXRzLmluZGV4T2Yob3B0aW9ucy5jb2xsZWN0aW9uRm9ybWF0KSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBcXCdjb2xsZWN0aW9uRm9ybWF0XFwnIHZhbHVlOiAnICsgb3B0aW9ucy5jb2xsZWN0aW9uRm9ybWF0KTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChvcHRpb25zLmNvbGxlY3Rpb25Gb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2Nzdic6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ211bHRpJzpcbiAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BpcGVzJzpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnfCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Nzdic6XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0c3YnOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCdcXHQnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IF8ubWFwKHZhbHVlLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZShfLmlzQXJyYXkoc2NoZW1hLml0ZW1zKSA/IHNjaGVtYS5pdGVtc1tpbmRleF0gOiBzY2hlbWEuaXRlbXMsIG9wdGlvbnMsIGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYnJlYWs7XG4gIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGlmICghXy5pc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdOb3QgYSB2YWxpZCBib29sZWFuOiAnICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJyZWFrO1xuICBjYXNlICdpbnRlZ2VyJzpcbiAgICBpZiAoIV8uaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkgJiYgXy50cmltKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBOYU47XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ05vdCBhIHZhbGlkIGludGVnZXI6ICcgKyBvcmlnaW5hbFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBicmVhaztcbiAgY2FzZSAnbnVtYmVyJzpcbiAgICBpZiAoIV8uaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkgJiYgXy50cmltKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBOYU47XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ05vdCBhIHZhbGlkIG51bWJlcjogJyArIG9yaWdpbmFsVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAnc3RyaW5nJzpcbiAgICBpZiAoWydkYXRlJywgJ2RhdGUtdGltZSddLmluZGV4T2Yoc2NoZW1hLmZvcm1hdCkgPiAtMSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV8uaXNEYXRlKHZhbHVlKSB8fCB2YWx1ZS50b1N0cmluZygpID09PSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdOb3QgYSB2YWxpZCAnICsgc2NoZW1hLmZvcm1hdCArICcgc3RyaW5nOiAnICsgb3JpZ2luYWxWYWx1ZSk7XG5cbiAgICAgICAgZXJyLmNvZGUgPSAnSU5WQUxJRF9GT1JNQVQnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIV8uaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdOb3QgYSB2YWxpZCBzdHJpbmc6ICcgKyB2YWx1ZSk7XG4gICAgfVxuXG4gICAgYnJlYWs7XG5cbiAgICAvLyBubyBkZWZhdWx0XG4gIH1cblxuICBpZiAoIV8uaXNVbmRlZmluZWQoZXJyKSkge1xuICAgIC8vIENvbnZlcnQgdGhlIGVycm9yIHRvIGJlIG1vcmUgbGlrZSBhIEpTT04gU2NoZW1hIHZhbGlkYXRpb24gZXJyb3JcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChlcnIuY29kZSkpIHtcbiAgICAgIGVyci5jb2RlID0gJ0lOVkFMSURfVFlQRSc7XG4gICAgICBlcnIubWVzc2FnZSA9ICdFeHBlY3RlZCB0eXBlICcgKyB0eXBlICsgJyBidXQgZm91bmQgdHlwZSAnICsgcFR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyci5tZXNzYWdlID0gJ09iamVjdCBkaWRuXFwndCBwYXNzIHZhbGlkYXRpb24gZm9yIGZvcm1hdCAnICsgc2NoZW1hLmZvcm1hdCArICc6ICcgKyBwVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gRm9ybWF0IGFuZCB0eXBlIGVycm9ycyByZXNlbWJsZSBKU09OIFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yc1xuICAgIGVyci5mYWlsZWRWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICBlcnIucGF0aCA9IFtdO1xuXG4gICAgdGhyb3cgZXJyO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEganNvbi1zY2hlbWEtZmFrZXIgbW9ja2VyLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBqc29uLXNjaGVtYS1mYWtlciBtb2NrZXIgdG8gdXNlXG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldEpTT05TY2hlbWFNb2NrZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBqc29uTW9ja2VyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgei1zY2hlbWEgdmFsaWRhdG9yLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSB6LXNjaGVtYSB2YWxpZGF0b3IgdG8gdXNlXG4gKi9cbm1vZHVsZS5leHBvcnRzLmdldEpTT05TY2hlbWFWYWxpZGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBqc29uU2NoZW1hVmFsaWRhdG9yO1xufTtcblxubW9kdWxlLmV4cG9ydHMucGFyYW1ldGVyTG9jYXRpb25zID0gWydib2R5JywgJ2Zvcm1EYXRhJywgJ2hlYWRlcicsICdwYXRoJywgJ3F1ZXJ5J107XG5cbi8qKlxuICogUmVwbGFjZXMgdGhlIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gdGhlIHByb3ZpZGVkIG9iamVjdCB3aXRoIGFuIGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIC0gVGhlIEphdmFTY3JpcHQgb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzLnJlbW92ZUNpcmN1bGFycyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgZnVuY3Rpb24gd2FsayAoYW5jZXN0b3JzLCBub2RlLCBwYXRoKSB7XG4gICAgZnVuY3Rpb24gd2Fsa0l0ZW0gKGl0ZW0sIHNlZ21lbnQpIHtcbiAgICAgIHBhdGgucHVzaChzZWdtZW50KTtcbiAgICAgIHdhbGsoYW5jZXN0b3JzLCBpdGVtLCBwYXRoKTtcbiAgICAgIHBhdGgucG9wKCk7XG4gICAgfVxuXG4gICAgLy8gV2UgZG8gbm90IHByb2Nlc3MgY2lyY3VsYXIgb2JqZWN0cyBhZ2FpblxuICAgIGlmIChhbmNlc3RvcnMuaW5kZXhPZihub2RlKSA9PT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ycy5wdXNoKG5vZGUpO1xuXG4gICAgICBpZiAoXy5pc0FycmF5KG5vZGUpIHx8IF8uaXNQbGFpbk9iamVjdChub2RlKSkge1xuICAgICAgICBfLmVhY2gobm9kZSwgZnVuY3Rpb24gKG1lbWJlciwgaW5kZXhPcktleSkge1xuICAgICAgICAgIHdhbGtJdGVtKG1lbWJlciwgaW5kZXhPcktleS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF8uc2V0KG9iaiwgcGF0aCwge30pO1xuICAgIH1cblxuICAgIGFuY2VzdG9ycy5wb3AoKTtcbiAgfVxuXG4gIHdhbGsoW10sIG9iaiwgW10pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5zdXBwb3J0ZWRIdHRwTWV0aG9kcyA9IFsnZ2V0JywgJ3B1dCcsICdwb3N0JywgJ2RlbGV0ZScsICdvcHRpb25zJywgJ2hlYWQnLCAncGF0Y2gnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIHZhbHVlIGFnYWluc3QgdGhlIEpTT04gU2NoZW1hIGJ5IG5hbWUgb3IgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHZhbGlkYXRvciAtIFRoZSBKU09OIFNjaGVtYSB2YWxpZGF0b3IgY3JlYXRlZCB2aWEge0BsaW5rICNjcmVhdGVKU09OVmFsaWRhdG9yfVxuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSAtIFRoZSBKU09OIFNjaGVtYVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZVxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIG9mIHRoZSB2YWxpZGF0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYSA9IGZ1bmN0aW9uICh2YWxpZGF0b3IsIHNjaGVtYSwgdmFsdWUpIHtcbiAgc2NoZW1hID0gXy5jbG9uZURlZXAoc2NoZW1hKTsgLy8gQ2xvbmUgdGhlIHNjaGVtYSBhcyB6LXNjaGVtYSBhbHRlcnMgdGhlIHByb3ZpZGVkIGRvY3VtZW50XG5cbiAgdmFyIHJlc3BvbnNlID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG5cbiAgaWYgKCF2YWxpZGF0b3IudmFsaWRhdGUodmFsdWUsIHNjaGVtYSkpIHtcbiAgICByZXNwb25zZS5lcnJvcnMgPSBfLm1hcCh2YWxpZGF0b3IuZ2V0TGFzdEVycm9ycygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBub3JtYWxpemVFcnJvcihlcnIpO1xuXG4gICAgICByZXR1cm4gZXJyO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGNvbnRlbnQgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFR5cGUgLSBUaGUgQ29udGVudC1UeXBlIHZhbHVlIG9mIHRoZSByZXF1ZXN0L3Jlc3BvbnNlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBzdXBwb3J0ZWRUeXBlcyAtIFRoZSBzdXBwb3J0ZWQgKGRlY2xhcmVkKSBDb250ZW50LVR5cGUgdmFsdWVzIGZvciB0aGUgcmVxdWVzdC9yZXNwb25zZVxuICogQHBhcmFtIHtvYmplY3R9IHJlc3VsdHMgLSBUaGUgcmVzdWx0cyBvYmplY3QgdG8gdXBkYXRlIGluIHRoZSBldmVudCBvZiBhbiBpbnZhbGlkIGNvbnRlbnQgdHlwZVxuICovXG5tb2R1bGUuZXhwb3J0cy52YWxpZGF0ZUNvbnRlbnRUeXBlID0gZnVuY3Rpb24gKGNvbnRlbnRUeXBlLCBzdXBwb3J0ZWRUeXBlcywgcmVzdWx0cykge1xuICB2YXIgcmF3Q29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcblxuICBpZiAoIV8uaXNVbmRlZmluZWQoY29udGVudFR5cGUpKSB7XG4gICAgLy8gaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxNC5odG1sI3NlYzE0LjE3XG4gICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdOyAvLyBTdHJpcCB0aGUgcGFyYW1ldGVyKHMpIGZyb20gdGhlIGNvbnRlbnQgdHlwZVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGV4YWN0IG1hdGNoIG9yIG1pbWUtdHlwZSBvbmx5IG1hdGNoXG4gIGlmIChfLmluZGV4T2Yoc3VwcG9ydGVkVHlwZXMsIHJhd0NvbnRlbnRUeXBlKSA9PT0gLTEgJiYgXy5pbmRleE9mKHN1cHBvcnRlZFR5cGVzLCBjb250ZW50VHlwZSkgPT09IC0xKSB7XG4gICAgcmVzdWx0cy5lcnJvcnMucHVzaCh7XG4gICAgICBjb2RlOiAnSU5WQUxJRF9DT05URU5UX1RZUEUnLFxuICAgICAgbWVzc2FnZTogJ0ludmFsaWQgQ29udGVudC1UeXBlICgnICsgY29udGVudFR5cGUgKyAnKS4gIFRoZXNlIGFyZSBzdXBwb3J0ZWQ6ICcgK1xuICAgICAgICBzdXBwb3J0ZWRUeXBlcy5qb2luKCcsICcpLFxuICAgICAgcGF0aDogW11cbiAgICB9KTtcbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgICBcImlkXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvcmUgc2NoZW1hIG1ldGEtc2NoZW1hXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcIm1pbmltdW1cIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCI6IHtcbiAgICAgICAgICAgIFwiYWxsT2ZcIjogWyB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSwgeyBcImRlZmF1bHRcIjogMCB9IF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzaW1wbGVUeXBlc1wiOiB7XG4gICAgICAgICAgICBcImVudW1cIjogWyBcImFycmF5XCIsIFwiYm9vbGVhblwiLCBcImludGVnZXJcIiwgXCJudWxsXCIsIFwibnVtYmVyXCIsIFwib2JqZWN0XCIsIFwic3RyaW5nXCIgXVxuICAgICAgICB9LFxuICAgICAgICBcInN0cmluZ0FycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcIiRzY2hlbWFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge30sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAwLFxuICAgICAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwicmVnZXhcIlxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImFsbE9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwiYW55T2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJvbmVPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm5vdFwiOiB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgfSxcbiAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiBbIFwibWF4aW11bVwiIF0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiBbIFwibWluaW11bVwiIF1cbiAgICB9LFxuICAgIFwiZGVmYXVsdFwiOiB7fVxufVxuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snXyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnXyddIDogbnVsbCk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzd2F5OmFwaScpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgUGF0aCA9IHJlcXVpcmUoJy4vcGF0aCcpO1xudmFyIHZhbGlkYXRvcnMgPSByZXF1aXJlKCcuLi92YWxpZGF0aW9uL3ZhbGlkYXRvcnMnKTtcblxuLyoqXG4gKiBUaGUgU3dhZ2dlciBBUEkgb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBEbyBub3QgdXNlIGRpcmVjdGx5LlxuICpcbiAqICoqRXh0cmEgUHJvcGVydGllczoqKiBPdGhlciB0aGFuIHRoZSBkb2N1bWVudGVkIHByb3BlcnRpZXMsIHRoaXMgb2JqZWN0IGFsc28gZXhwb3NlcyBhbGwgcHJvcGVydGllcyBvZiB0aGUgZGVmaW5pdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBvcmlnaW5hbCBTd2FnZ2VyIGRlZmluaXRpb25cbiAqIEBwYXJhbSB7b2JlamN0fSBkZWZpbml0aW9uUmVtb3Rlc1Jlc29sdmVkIC0gVGhlIFN3YWdnZXIgZGVmaW5pdGlvbiB3aXRoIGFsbCBvZiBpdHMgcmVtb3RlIHJlZmVyZW5jZXMgcmVzb2x2ZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uQWxsUmVzb2x2ZWQgLSBUaGUgU3dhZ2dlciBkZWZpbml0aW9uIHdpdGggYWxsIG9mIGl0cyByZWZlcmVuY2VzIHJlc29sdmVkXG4gKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlcyAtIFRoZSBsb2NhdGlvbiBhbmQgcmVzb2x1dGlvbiBvZiB0aGUgcmVzb2x2ZWQgcmVmZXJlbmNlcyBpbiB0aGUgU3dhZ2dlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHBhc3NlZCB0byBzd2FnZ2VyQXBpLmNyZWF0ZVxuICpcbiAqIEBwcm9wZXJ0eSB7VmFsaWRhdG9yQ2FsbGJhY2tbXX0gY3VzdG9tVmFsaWRhdG9ycyAtIFRoZSBhcnJheSBvZiBjdXN0b20gdmFsaWRhdG9yc1xuICogQHByb3BlcnR5IHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgb3JpZ2luYWwgU3dhZ2dlciBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge29iZWpjdH0gZGVmaW5pdGlvblJlbW90ZXNSZXNvbHZlZCAtIFRoZSBTd2FnZ2VyIGRlZmluaXRpb24gd2l0aCBhbGwgb2YgaXRzIHJlbW90ZSByZWZlcmVuY2VzIHJlc29sdmVkXG4gKiBAcHJvcGVydHkge29iamVjdH0gZGVmaW5pdGlvbkFsbFJlc29sdmVkIC0gVGhlIFN3YWdnZXIgZGVmaW5pdGlvbiB3aXRoIGFsbCBvZiBpdHMgcmVmZXJlbmNlcyByZXNvbHZlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRvY3VtZW50YXRpb24gLSBUaGUgVVJMIHRvIHRoZSBTd2FnZ2VyIGRvY3VtZW50YXRpb25cbiAqIEBwcm9wZXJ0eSB7UGF0aFtdfSBwYXRoT2JqZWN0cyAtIFRoZSB1bmlxdWUgcGF0aCBvYmplY3RzXG4gKiBAcHJvcGVydHkge29iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3JcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSByZWZlcmVuY2VzIC0gVGhlIHJlZmVyZW5jZSBtZXRhZGF0YSAqKFNlZSBbSnNvblJlZnN+UmVzb2x2ZWRSZWZEZXRhaWxzXShodHRwczovL2dpdGh1Yi5jb20vd2hpdGxvY2tqYy9qc29uLXJlZnMvYmxvYi9tYXN0ZXIvZG9jcy9BUEkubWQjbW9kdWxlX0pzb25SZWZzLi5SZXNvbHZlZFJlZkRldGFpbHMpKSpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFN3YWdnZXIgQVBJIHZlcnNpb25cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gU3dhZ2dlckFwaSAoZGVmaW5pdGlvbiwgZGVmaW5pdGlvblJlbW90ZXNSZXNvbHZlZCwgZGVmaW5pdGlvbkFsbFJlc29sdmVkLCByZWZlcmVuY2VzLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcblxuICAvLyBBc3NpZ24gbG9jYWwgcHJvcGVydGllc1xuICB0aGlzLmN1c3RvbVZhbGlkYXRvcnMgPSBbXTtcbiAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcbiAgdGhpcy5kZWZpbml0aW9uQWxsUmVzb2x2ZWQgPSBkZWZpbml0aW9uQWxsUmVzb2x2ZWQ7XG4gIHRoaXMuZGVmaW5pdGlvblJlbW90ZXNSZXNvbHZlZCA9IGRlZmluaXRpb25SZW1vdGVzUmVzb2x2ZWQ7XG4gIHRoaXMuZG9jdW1lbnRhdGlvbiA9ICdodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2Jsb2IvbWFzdGVyL3ZlcnNpb25zLzIuMC5tZCc7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7XG4gIHRoaXMudmVyc2lvbiA9ICcyLjAnO1xuXG4gIC8vIEFzc2lnbiBsb2NhbCBwcm9wZXJ0aWVzIGZyb20gdGhlIFN3YWdnZXIgZGVmaW5pdGlvbiBwcm9wZXJ0aWVzXG4gIF8uYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuXG4gIC8vIFJlZ2lzdGVyIGN1c3RvbSB2YWxpZGF0b3JzXG4gIF8uZWFjaChvcHRpb25zLmN1c3RvbVZhbGlkYXRvcnMsIFN3YWdnZXJBcGkucHJvdG90eXBlLnJlZ2lzdGVyVmFsaWRhdG9yLCB0aGlzKTtcblxuICAvLyBDcmVhdGUgdGhlIFBhdGggb2JqZWN0c1xuICB0aGlzLnBhdGhPYmplY3RzID0gXy5tYXAoZGVmaW5pdGlvbkFsbFJlc29sdmVkLnBhdGhzLCBmdW5jdGlvbiAocGF0aERlZiwgcGF0aCkge1xuICAgIHJldHVybiBuZXcgUGF0aCh0aGF0LFxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXRoRGVmLFxuICAgICAgICAgICAgICAgICAgICBbJ3BhdGhzJywgcGF0aF0pO1xuXG4gIH0pO1xuXG4gIGRlYnVnKCdDcmVhdGluZyBTd2FnZ2VyQXBpIGZyb20gJXMnLCBfLmlzU3RyaW5nKG9wdGlvbnMuZGVmaW5pdGlvbikgPyBvcHRpb25zLmRlZmluaXRpb24gOiAndGhlIHByb3ZpZGVkIGRvY3VtZW50Jyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4gcGF0aCBhbmQgb3BlcmF0aW9uLlxuICpcbiAqICoqTm90ZToqKiBCZWxvdyBpcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHVzZWQgd2hlbiBgcmVxT3JQYXRoYCBpcyBhbiBgaHR0cC5DbGllbnRSZXF1ZXN0YCAqKG9yIGVxdWl2YWxlbnQpKjpcbiAqXG4gKiAgICogYG1ldGhvZGBcbiAqICAgKiBgdXJsYFxuICpcbiAqICooU2VlOiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9jbGFzc19odHRwX2NsaWVudHJlcXVlc3R9KSpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHBhdGhPclJlcSAtIFRoZSBTd2FnZ2VyIHBhdGggc3RyaW5nIG9yIHRoZSBodHRwIGNsaWVudCByZXF1ZXN0ICoob3IgZXF1aXZhbGVudCkqXG4gKiBAcGFyYW0ge3N0cmluZ30gW21ldGhvZF0gLSBUaGUgU3dhZ2dlciBvcGVyYXRpb24gbWV0aG9kXG4gKlxuICogQHJldHVybnMge09wZXJhdGlvbn0gVGhlIG9wZXJhdGlvbiBmb3IgdGhlIHByb3ZpZGVkIHBhdGggYW5kIG1ldGhvZCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm8gb3BlcmF0aW9uIGZvciB0aGF0XG4gKiAgICAgICAgICAgICAgICAgICAgICBwYXRoIGFuZCBtZXRob2QgY29tYmluYXRpb24uXG4gKi9cblN3YWdnZXJBcGkucHJvdG90eXBlLmdldE9wZXJhdGlvbiA9IGZ1bmN0aW9uIChwYXRoT3JSZXEsIG1ldGhvZCkge1xuICB2YXIgcGF0aE9iamVjdCA9IHRoaXMuZ2V0UGF0aChwYXRoT3JSZXEpO1xuICB2YXIgb3BlcmF0aW9uO1xuXG4gIGlmICghXy5pc1VuZGVmaW5lZChwYXRoT2JqZWN0KSkge1xuICAgIGlmIChfLmlzT2JqZWN0KHBhdGhPclJlcSkpIHtcbiAgICAgIG1ldGhvZCA9IHBhdGhPclJlcS5tZXRob2Q7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKG1ldGhvZCkpIHtcbiAgICAgIG1ldGhvZCA9IG1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIG9wZXJhdGlvbiA9IHBhdGhPYmplY3QuZ2V0T3BlcmF0aW9uKG1ldGhvZCk7XG4gIH1cblxuICByZXR1cm4gb3BlcmF0aW9uO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBvcGVyYXRpb25zIGZvciB0aGUgcHJvdmlkZWQgcGF0aCBvciBhbGwgb3BlcmF0aW9ucyBpbiB0aGUgQVBJLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gLSBUaGUgU3dhZ2dlciBwYXRoXG4gKlxuICogQHJldHVybnMge09wZXJhdGlvbltdfSBBbGwgb3BlcmF0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIHBhdGggb3IgYWxsIEFQSSBvcGVyYXRpb25zLlxuICovXG5Td2FnZ2VyQXBpLnByb3RvdHlwZS5nZXRPcGVyYXRpb25zID0gZnVuY3Rpb24gKHBhdGgpIHtcbiAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgdmFyIHBhdGhPYmplY3Q7XG5cbiAgaWYgKF8uaXNVbmRlZmluZWQocGF0aCkpIHtcbiAgICBfLmVhY2godGhpcy5wYXRoT2JqZWN0cywgZnVuY3Rpb24gKHBPYmplY3QpIHtcbiAgICAgIG9wZXJhdGlvbnMucHVzaC5hcHBseShvcGVyYXRpb25zLCBwT2JqZWN0LmdldE9wZXJhdGlvbnMoKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcGF0aE9iamVjdCA9IHRoaXMuZ2V0UGF0aChwYXRoKTtcblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXRoT2JqZWN0KSkge1xuICAgICAgb3BlcmF0aW9ucyA9IHBhdGhPYmplY3QuZ2V0T3BlcmF0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvcGVyYXRpb25zO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBvcGVyYXRpb25zIGZvciB0aGUgcHJvdmlkZWQgdGFnLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGFnXSAtIFRoZSBTd2FnZ2VyIHRhZ1xuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb25bXX0gQWxsIG9wZXJhdGlvbnMgZm9yIHRoZSBwcm92aWRlZCB0YWcuXG4gKi9cblN3YWdnZXJBcGkucHJvdG90eXBlLmdldE9wZXJhdGlvbnNCeVRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgcmV0dXJuIF8ucmVkdWNlKHRoaXMucGF0aE9iamVjdHMsIGZ1bmN0aW9uIChvcGVyYXRpb25zLCBwYXRoT2JqZWN0KSB7XG4gICAgb3BlcmF0aW9ucy5wdXNoLmFwcGx5KG9wZXJhdGlvbnMsIHBhdGhPYmplY3QuZ2V0T3BlcmF0aW9uc0J5VGFnKHRhZykpO1xuXG4gICAgcmV0dXJuIG9wZXJhdGlvbnM7XG4gIH0sIFtdKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGF0aCBvYmplY3QgZm9yIHRoZSBnaXZlbiBwYXRoIG9yIHJlcXVlc3QuXG4gKlxuICogKipOb3RlOioqIEJlbG93IGlzIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgdXNlZCB3aGVuIGByZXFPclBhdGhgIGlzIGFuIGBodHRwLkNsaWVudFJlcXVlc3RgICoob3IgZXF1aXZhbGVudCkqOlxuICpcbiAqICAgKiBgdXJsYFxuICpcbiAqICooU2VlOiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9jbGFzc19odHRwX2NsaWVudHJlcXVlc3R9KSpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHBhdGhPclJlcSAtIFRoZSBTd2FnZ2VyIHBhdGggc3RyaW5nIG9yIHRoZSBodHRwIGNsaWVudCByZXF1ZXN0ICoob3IgZXF1aXZhbGVudCkqXG4gKlxuICogQHJldHVybnMge1BhdGh9IFRoZSBjb3JyZXNwb25kaW5nIFBhdGggb2JqZWN0IGZvciB0aGUgcmVxdWVzdGVkIHBhdGggb3IgcmVxdWVzdC5cbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUuZ2V0UGF0aCA9IGZ1bmN0aW9uIChwYXRoT3JSZXEpIHtcbiAgdmFyIHVybDtcblxuICBpZiAoXy5pc09iamVjdChwYXRoT3JSZXEpKSB7XG4gICAgdXJsID0gcGFyc2VVcmwocGF0aE9yUmVxLnVybCkucGF0aG5hbWU7XG5cbiAgICByZXR1cm4gXy5maW5kKHRoaXMucGF0aE9iamVjdHMsIGZ1bmN0aW9uIChwYXRoT2JqZWN0KSB7XG4gICAgICByZXR1cm4gXy5pc0FycmF5KHBhdGhPYmplY3QucmVnZXhwLmV4ZWModXJsKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF8uZmluZCh0aGlzLnBhdGhPYmplY3RzLCBmdW5jdGlvbiAocGF0aE9iamVjdCkge1xuICAgICAgcmV0dXJuIHBhdGhPclJlcSA9PT0gcGF0aE9iamVjdC5wYXRoO1xuICAgIH0pO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIHBhdGggb2JqZWN0cyBmb3IgdGhlIFN3YWdnZXIgQVBJLlxuICpcbiAqIEByZXR1cm5zIHtQYXRoW119IFRoZSBQYXRoIG9iamVjdHNcbiAqL1xuU3dhZ2dlckFwaS5wcm90b3R5cGUuZ2V0UGF0aHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBhdGhPYmplY3RzO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSB2YWxpZGF0b3IuXG4gKlxuICogQHBhcmFtIHt2YWxpZGF0b3JDYWxsYmFja30gdmFsaWRhdG9yIC0gVGhlIHZhbGlkYXRvclxuICpcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgdGhlIHZhbGlkYXRvciBpcyBub3QgYSBmdW5jdGlvblxuICovXG5Td2FnZ2VyQXBpLnByb3RvdHlwZS5yZWdpc3RlclZhbGlkYXRvciA9IGZ1bmN0aW9uICh2YWxpZGF0b3IpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQodmFsaWRhdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbGlkYXRvciBpcyByZXF1aXJlZCcpO1xuICB9IGVsc2UgaWYgKCFfLmlzRnVuY3Rpb24odmFsaWRhdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbGlkYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHRoaXMuY3VzdG9tVmFsaWRhdG9ycy5wdXNoKHZhbGlkYXRvcik7XG59O1xuXG4vKipcbiAqIFBlcmZvcm1zIHZhbGlkYXRpb24gb2YgdGhlIFN3YWdnZXIgQVBJIGRvY3VtZW50KHMpLlxuICpcbiAqIEByZXR1cm5zIHtWYWxpZGF0aW9uUmVzdWx0c30gVGhlIHZhbGlkYXRpb24gcmVzdWx0c1xuICovXG5Td2FnZ2VyQXBpLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlc3VsdHMgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIGRvVmFsaWRhdGlvbiAodmFsaWRhdG9yKSB7XG4gICAgdmFyIHZSZXN1bHRzID0gdmFsaWRhdG9yKHNlbGYpO1xuXG4gICAgaWYgKHZSZXN1bHRzLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHRzLmVycm9ycy5wdXNoLmFwcGx5KHJlc3VsdHMuZXJyb3JzLCB2UmVzdWx0cy5lcnJvcnMpO1xuICAgIH1cblxuICAgIGlmICh2UmVzdWx0cy53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHRzLndhcm5pbmdzLnB1c2guYXBwbHkocmVzdWx0cy53YXJuaW5ncywgdlJlc3VsdHMud2FybmluZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHRoZSBkb2N1bWVudCBzdHJ1Y3R1cmFsbHlcbiAgZG9WYWxpZGF0aW9uKHZhbGlkYXRvcnMuanNvblNjaGVtYVZhbGlkYXRvcik7XG5cbiAgLy8gUGVyZm9ybSByZW1haW5pbmcgdmFsaWRhdGlvbiBvbmx5IGlmIHRoZSBkb2N1bWVudCBpcyBzdHJ1Y3R1cmFsbHkgdmFsaWRcbiAgaWYgKHJlc3VsdHMuZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIFJ1biBwbHVnaW4gdmFsaWRhdG9yc1xuICAgIF8uZWFjaCh2YWxpZGF0b3JzLnNlbWFudGljVmFsaWRhdG9ycywgZG9WYWxpZGF0aW9uKTtcblxuICAgIC8vIFJ1biBjdXN0b20gdmFsaWRhdG9yc1xuICAgIF8uZWFjaCh0aGlzLmN1c3RvbVZhbGlkYXRvcnMsIGRvVmFsaWRhdGlvbik7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU3dhZ2dlckFwaTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc3dheTpvcGVyYXRpb24nKTtcbnZhciBKc29uUmVmcyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydKc29uUmVmcyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnSnNvblJlZnMnXSA6IG51bGwpO1xudmFyIFBhcmFtZXRlciA9IHJlcXVpcmUoJy4vcGFyYW1ldGVyJyk7XG52YXIgUmVzcG9uc2UgPSByZXF1aXJlKCcuL3Jlc3BvbnNlJyk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMnKTtcblxuLyoqXG4gKiBUaGUgU3dhZ2dlciBPcGVyYXRpb24gb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBEbyBub3QgdXNlIGRpcmVjdGx5LlxuICpcbiAqICoqRXh0cmEgUHJvcGVydGllczoqKiBPdGhlciB0aGFuIHRoZSBkb2N1bWVudGVkIHByb3BlcnRpZXMsIHRoaXMgb2JqZWN0IGFsc28gZXhwb3NlcyBhbGwgcHJvcGVydGllcyBvZiB0aGUgZGVmaW5pdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge1BhdGh9IHBhdGhPYmplY3QgLSBUaGUgUGF0aCBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBUaGUgb3BlcmF0aW9uIG1ldGhvZFxuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgb3BlcmF0aW9uIGRlZmluaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhUb0RlZmluaXRpb24gLSBUaGUgcGF0aCBzZWdtZW50cyB0byB0aGUgb3BlcmF0aW9uIGRlZmluaXRpb25cbiAqXG4gKiBAcHJvcGVydHkge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBvcGVyYXRpb24gZGVmaW5pdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1ldGhvZCAtIFRoZSBIVFRQIG1ldGhvZCBmb3IgdGhpcyBvcGVyYXRpb25cbiAqIEBwcm9wZXJ0eSB7UGF0aH0gcGF0aE9iamVjdCAtIFRoZSBQYXRoIG9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gcGF0aFRvRGVmaW5pdGlvbiAtIFRoZSBwYXRoIHNlZ21lbnRzIHRvIHRoZSBvcGVyYXRpb24gZGVmaW5pdGlvblxuICogQHByb3BlcnR5IHtQYXJhbWV0ZXJbXX0gcGFyYW1ldGVyT2JqZWN0cyAtIFRoZSBQYXJhbWV0ZXIgb2JqZWN0c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHB0ciAtIFRoZSBKU09OIFBvaW50ZXIgdG8gdGhlIG9wZXJhdGlvblxuICogQHByb3BlcnR5IHtvYmplY3R9IHNlY3VyaXR5RGVmaW5pdGlvbnMgLSBUaGUgc2VjdXJpdHkgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGlzIG9wZXJhdGlvblxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBPcGVyYXRpb24gKHBhdGhPYmplY3QsIG1ldGhvZCwgZGVmaW5pdGlvbiwgcGF0aFRvRGVmaW5pdGlvbikge1xuICB2YXIgc2VlblBhcmFtZXRlcnMgPSBbXTtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gIC8vIEFzc2lnbiBsb2NhbCBwcm9wZXJ0aWVzXG4gIHRoaXMuY29uc3VtZXMgPSBkZWZpbml0aW9uLmNvbnN1bWVzIHx8IHBhdGhPYmplY3QuYXBpLmNvbnN1bWVzIHx8IFtdO1xuICB0aGlzLmRlZmluaXRpb24gPSBfLmNsb25lRGVlcChkZWZpbml0aW9uKTsgLy8gQ2xvbmUgc28gd2UgZG8gbm90IGFsdGVyIHRoZSBvcmlnaW5hbFxuICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgdGhpcy5wYXJhbWV0ZXJPYmplY3RzID0gW107IC8vIENvbXB1dGVkIGJlbG93XG4gIHRoaXMucGF0aE9iamVjdCA9IHBhdGhPYmplY3Q7XG4gIHRoaXMucGF0aFRvRGVmaW5pdGlvbiA9IHBhdGhUb0RlZmluaXRpb247XG4gIHRoaXMucHJvZHVjZXMgPSBkZWZpbml0aW9uLnByb2R1Y2VzIHx8IHBhdGhPYmplY3QuYXBpLnByb2R1Y2VzIHx8IFtdO1xuICB0aGlzLnB0ciA9IEpzb25SZWZzLnBhdGhUb1B0cihwYXRoVG9EZWZpbml0aW9uKTtcblxuICAvLyBBc3NpZ24gbG9jYWwgcHJvcGVydGllcyBmcm9tIHRoZSBTd2FnZ2VyIGRlZmluaXRpb24gcHJvcGVydGllc1xuICBfLmFzc2lnbih0aGlzLCBkZWZpbml0aW9uKTtcblxuICAvLyBEZWZhdWx0IHRvIHRoZSBnbG9iYWwgc2VjdXJpdHlcbiAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5zZWN1cml0eSkpIHtcbiAgICB0aGlzLnNlY3VyaXR5ID0gdGhpcy5kZWZpbml0aW9uLnNlY3VyaXR5ID0gcGF0aE9iamVjdC5hcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLnNlY3VyaXR5O1xuICB9XG5cbiAgLy8gQWRkIHRoZSBQYXJhbWV0ZXIgb2JqZWN0cyBmcm9tIHRoZSBQYXRoIG9iamVjdCB0aGF0IHdlcmUgbm90IHJlZGVmaW5lZCBpbiB0aGUgb3BlcmF0aW9uIGRlZmluaXRpb25cbiAgdGhpcy5wYXJhbWV0ZXJPYmplY3RzID0gXy5tYXAocGF0aE9iamVjdC5wYXJhbWV0ZXJPYmplY3RzLCBmdW5jdGlvbiAocGFyYW1ldGVyT2JqZWN0KSB7XG4gICAgc2VlblBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXJPYmplY3QuaW4gKyAnOicgKyBwYXJhbWV0ZXJPYmplY3QubmFtZSk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyT2JqZWN0O1xuICB9KTtcblxuICAvLyBDcmVhdGUgUGFyYW1ldGVyIG9iamVjdHMgZnJvbSBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIG9wZXJhdGlvbiBkZWZpbml0aW9uXG4gIF8uZWFjaChkZWZpbml0aW9uLnBhcmFtZXRlcnMsIGZ1bmN0aW9uIChwYXJhbURlZiwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gcGFyYW1EZWYuaW4gKyAnOicgKyBwYXJhbURlZi5uYW1lO1xuICAgIHZhciBzZWVuSW5kZXggPSBzZWVuUGFyYW1ldGVycy5pbmRleE9mKGtleSk7XG4gICAgdmFyIHBhcmFtZXRlck9iamVjdCA9IG5ldyBQYXJhbWV0ZXIodGhhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbURlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoVG9EZWZpbml0aW9uLmNvbmNhdChbJ3BhcmFtZXRlcnMnLCBpbmRleC50b1N0cmluZygpXSkpO1xuXG4gICAgaWYgKHNlZW5JbmRleCA+IC0xKSB7XG4gICAgICB0aGF0LnBhcmFtZXRlck9iamVjdHNbc2VlbkluZGV4XSA9IHBhcmFtZXRlck9iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5wYXJhbWV0ZXJPYmplY3RzLnB1c2gocGFyYW1ldGVyT2JqZWN0KTtcblxuICAgICAgc2VlblBhcmFtZXRlcnMucHVzaChrZXkpO1xuICAgIH1cbiAgfSk7XG5cbiAgdGhpcy5wYXJhbWV0ZXJzID0gdGhpcy5kZWZpbml0aW9uLnBhcmFtZXRlcnMgPSBfLm1hcCh0aGlzLnBhcmFtZXRlck9iamVjdHMsIGZ1bmN0aW9uIChwYXJhbWV0ZXJPYmplY3QpIHtcbiAgICByZXR1cm4gcGFyYW1ldGVyT2JqZWN0LmRlZmluaXRpb247XG4gIH0pO1xuXG4gIC8vIENyZWF0ZSByZXNwb25zZSBvYmplY3RzIGZyb20gcmVzcG9uc2VzIGRlZmluZWQgaW4gdGhlIG9wZXJhdGlvbiBkZWZpbml0aW9uXG4gIHRoaXMucmVzcG9uc2VPYmplY3RzID0gXy5tYXAoZGVmaW5pdGlvbi5yZXNwb25zZXMsIGZ1bmN0aW9uIChyZXNwb25zZURlZiwgY29kZSkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UodGhhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZURlZixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhUb0RlZmluaXRpb24uY29uY2F0KFsncmVzcG9uc2VzJywgY29kZV0pKTtcbiAgfSk7XG5cbiAgLy8gQnJpbmcgaW4gdGhlIHNlY3VyaXR5IGRlZmluaXRpb25zIGZvciBlYXNpZXIgYWNjZXNzXG4gIHRoaXMuc2VjdXJpdHlEZWZpbml0aW9ucyA9IF8ucmVkdWNlKHRoaXMuc2VjdXJpdHksIGZ1bmN0aW9uIChkZWZzLCByZXFzKSB7XG4gICAgXy5lYWNoKHJlcXMsIGZ1bmN0aW9uIChyZXEsIG5hbWUpIHtcbiAgICAgIHZhciBkZWYgPSBwYXRoT2JqZWN0LmFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQuc2VjdXJpdHlEZWZpbml0aW9ucyA/XG4gICAgICAgICAgICBwYXRoT2JqZWN0LmFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQuc2VjdXJpdHlEZWZpbml0aW9uc1tuYW1lXSA6XG4gICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkZWYpKSB7XG4gICAgICAgIGRlZnNbbmFtZV0gPSBkZWY7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVmcztcbiAgfSwge30pO1xuXG4gIGRlYnVnKCdGb3VuZCBvcGVyYXRpb24gYXQgJXMnLCB0aGlzLnB0cik7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGFyYW1ldGVyIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYW5kIGxvY2F0aW9uIHdoZW4gcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2xvY2F0aW9uXSAtIFRoZSBsb2NhdGlvbiAqKGBpbmApKiBvZiB0aGUgcGFyYW1ldGVyICooVXNlZCBmb3IgZGlzYW1iaWd1YXRpb24pKlxuICpcbiAqIEByZXR1cm5zIHtQYXJhbWV0ZXJ9IFRoZSBwYXJhbWV0ZXIgbWF0Y2hpbmcgdGhlIGxvY2F0aW9uIGFuZCBuYW1lIGNvbWJpbmF0aW9uIG9yIGB1bmRlZmluZWRgIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICovXG5PcGVyYXRpb24ucHJvdG90eXBlLmdldFBhcmFtZXRlciA9IGZ1bmN0aW9uIChuYW1lLCBsb2NhdGlvbikge1xuICByZXR1cm4gXy5maW5kKHRoaXMucGFyYW1ldGVyT2JqZWN0cywgZnVuY3Rpb24gKHBhcmFtZXRlck9iamVjdCkge1xuICAgIHJldHVybiBwYXJhbWV0ZXJPYmplY3QubmFtZSA9PT0gbmFtZSAmJiAoXy5pc1VuZGVmaW5lZChsb2NhdGlvbikgPyB0cnVlIDogcGFyYW1ldGVyT2JqZWN0LmluID09PSBsb2NhdGlvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtQYXJhbWV0ZXJbXX0gQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBvcGVyYXRpb24uXG4gKi9cbk9wZXJhdGlvbi5wcm90b3R5cGUuZ2V0UGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGFyYW1ldGVyT2JqZWN0cztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0ZWQgc3RhdHVzIGNvZGUgb3IgdGhlIGRlZmF1bHQgcmVzcG9uc2UgKihpZiBhdmFpbGFibGUpKiBpZiBub25lIGlzIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW3N0YXR1c0NvZGU9J2RlZmF1bHQnXSAtIFRoZSBzdGF0dXMgY29kZVxuICpcbiAqIEByZXR1cm5zIHtSZXNwb25zZX0gVGhlIHJlc3BvbnNlIG9yIHVuZGVmaW5lZCBpZiBvbmUgY2Fubm90IGJlIGZvdW5kXG4gKi9cbk9wZXJhdGlvbi5wcm90b3R5cGUuZ2V0UmVzcG9uc2UgPSBmdW5jdGlvbiAoc3RhdHVzQ29kZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChzdGF0dXNDb2RlKSkge1xuICAgIHN0YXR1c0NvZGUgPSAnZGVmYXVsdCc7XG4gIH0gZWxzZSBpZiAoXy5pc051bWJlcihzdGF0dXNDb2RlKSkge1xuICAgIHN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlLnRvU3RyaW5nKCk7XG4gIH1cblxuICByZXR1cm4gXy5maW5kKHRoaXMuZ2V0UmVzcG9uc2VzKCksIGZ1bmN0aW9uIChyZXNwb25zZU9iamVjdCkge1xuICAgIHJldHVybiByZXNwb25zZU9iamVjdC5zdGF0dXNDb2RlID09PSBzdGF0dXNDb2RlO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgcmVzcG9uc2VzIGZvciB0aGUgb3BlcmF0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtSZXNwb25zZVtdfSBBbGwgcmVzcG9uc2VzIGZvciB0aGUgb3BlcmF0aW9uLlxuICovXG5PcGVyYXRpb24ucHJvdG90eXBlLmdldFJlc3BvbnNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVzcG9uc2VPYmplY3RzO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHJlcXVlc3QuXG4gKlxuICogKipOb3RlOioqIEJlbG93IGlzIHRoZSBsaXN0IG9mIGByZXFgIHByb3BlcnRpZXMgdXNlZCAqKHJlcSBzaG91bGQgYmUgYW4gYGh0dHAuQ2xpZW50UmVxdWVzdGAgb3IgZXF1aXZhbGVudCkqOlxuICpcbiAqICAgKiBgYm9keWA6IFVzZWQgZm9yIGBib2R5YCBhbmQgYGZvcm1EYXRhYCBwYXJhbWV0ZXJzXG4gKiAgICogYGZpbGVzYDogVXNlZCBmb3IgYGZvcm1EYXRhYCBwYXJhbWV0ZXJzIHdob3NlIGB0eXBlYCBpcyBgZmlsZWBcbiAqICAgKiBgaGVhZGVyc2A6IFVzZWQgZm9yIGBoZWFkZXJgIHBhcmFtZXRlcnMgYW5kIGNvbnN1bWVzXG4gKiAgICogYHF1ZXJ5YDogVXNlZCBmb3IgYHF1ZXJ5YCBwYXJhbWV0ZXJzXG4gKiAgICogYHVybGA6IHVzZWQgZm9yIGBwYXRoYCBwYXJhbWV0ZXJzXG4gKlxuICogRm9yIGBwYXRoYCBwYXJhbWV0ZXJzLCB3ZSB3aWxsIHVzZSB0aGUgb3BlcmF0aW9uJ3MgYHJlZ2V4cGAgcHJvcGVydHkgdG8gcGFyc2Ugb3V0IHBhdGggcGFyYW1ldGVycyB1c2luZyB0aGUgYHVybGBcbiAqIHByb3BlcnR5LlxuICpcbiAqICooU2VlOiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9jbGFzc19odHRwX2NsaWVudHJlcXVlc3R9KSpcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVxIC0gVGhlIGh0dHAgY2xpZW50IHJlcXVlc3QgKihvciBlcXVpdmFsZW50KSpcbiAqXG4gKiBAcmV0dXJucyB7VmFsaWRhdGlvblJlc3VsdHN9IFRoZSB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuT3BlcmF0aW9uLnByb3RvdHlwZS52YWxpZGF0ZVJlcXVlc3QgPSBmdW5jdGlvbiAocmVxKSB7XG4gIHZhciByZXN1bHRzID0ge1xuICAgIGVycm9yczogW10sXG4gICAgd2FybmluZ3M6IFtdXG4gIH07XG5cbiAgLy8gVmFsaWRhdGUgdGhlIENvbnRlbnQtVHlwZSBidXQgb25seSBmb3IgUE9TVCBhbmQgUFVUIChUaGUgcmVzdCBkbyBub3QgaGF2ZSBib2RpZXMpXG4gIGlmIChbJ3Bvc3QnLCAncHV0J10uaW5kZXhPZih0aGlzLm1ldGhvZCkgPiAtMSkge1xuICAgIC8vIERlZmF1bHRzIHRvIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSBwZXIgaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM3Lmh0bWwjc2VjNy4yLjFcbiAgICBoZWxwZXJzLnZhbGlkYXRlQ29udGVudFR5cGUocmVxLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCB0aGlzLmNvbnN1bWVzLCByZXN1bHRzKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzXG4gIF8uZWFjaCh0aGlzLmdldFBhcmFtZXRlcnMoKSwgZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgdmFyIHBhcmFtVmFsdWUgPSBwYXJhbS5nZXRWYWx1ZShyZXEpO1xuICAgIHZhciB2RXJyO1xuXG4gICAgaWYgKCFwYXJhbVZhbHVlLnZhbGlkKSB7XG4gICAgICB2RXJyID0ge1xuICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVFVRVNUX1BBUkFNRVRFUicsXG4gICAgICAgIGVycm9yczogcGFyYW1WYWx1ZS5lcnJvci5lcnJvcnMgfHwgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6IHBhcmFtVmFsdWUuZXJyb3IuY29kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHBhcmFtVmFsdWUuZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIHBhdGg6IHBhcmFtVmFsdWUuZXJyb3IucGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW46IHBhcmFtVmFsdWUucGFyYW1ldGVyT2JqZWN0LmluLFxuICAgICAgICAvLyBSZXBvcnQgdGhlIGFjdHVhbCBlcnJvciBpZiB0aGVyZSBpcyBvbmx5IG9uZSBlcnJvci4gIE90aGVyd2lzZSwgcmVwb3J0IGEgSlNPTiBTY2hlbWEgdmFsaWRhdGlvbiBlcnJvci5cbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgcGFyYW1ldGVyICgnICsgcGFyYW0ubmFtZSArICcpOiAnICsgKChwYXJhbVZhbHVlLmVycm9ycyB8fCBbXSkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmFsdWUgZmFpbGVkIEpTT04gU2NoZW1hIHZhbGlkYXRpb24nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUuZXJyb3IubWVzc2FnZSksXG4gICAgICAgIG5hbWU6IHBhcmFtVmFsdWUucGFyYW1ldGVyT2JqZWN0Lm5hbWUsXG4gICAgICAgIHBhdGg6IHBhcmFtVmFsdWUuZXJyb3IucGF0aFxuICAgICAgfTtcblxuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaCh2RXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7U2VydmVyUmVzcG9uc2VXcmFwcGVyfSByZXMgLSBUaGUgcmVzcG9uc2Ugb3IgcmVzcG9uc2UgbGlrZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7VmFsaWRhdGlvblJlc3VsdHN9IFRoZSB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuT3BlcmF0aW9uLnByb3RvdHlwZS52YWxpZGF0ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlcykge1xuICB2YXIgcmVzdWx0cyA9IHtcbiAgICBlcnJvcnM6IFtdLFxuICAgIHdhcm5pbmdzOiBbXVxuICB9O1xuICB2YXIgcmVhbFN0YXR1c0NvZGUgPSByZXMgPyByZXMuc3RhdHVzQ29kZSA6ICdkZWZhdWx0JztcbiAgdmFyIHJlc3BvbnNlID0gdGhpcy5nZXRSZXNwb25zZShyZWFsU3RhdHVzQ29kZSk7XG5cbiAgaWYgKF8uaXNVbmRlZmluZWQocmVzcG9uc2UpKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0ZWQgc3RhdHVzLCB1c2UgdGhlIGRlZmF1bHQgaWYgdGhlcmUgaXMgb25lIChUaGlzIGlzIFN3YWdnZXIncyBhcHByb2FjaClcbiAgICByZXNwb25zZSA9IHRoaXMuZ2V0UmVzcG9uc2UoJ2RlZmF1bHQnKTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlc3BvbnNlKSkge1xuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogJ0lOVkFMSURfUkVTUE9OU0VfQ09ERScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1RoaXMgb3BlcmF0aW9uIGRvZXMgbm90IGhhdmUgYSBkZWZpbmVkIFxcJycgKyAocmVhbFN0YXR1c0NvZGUgPT09ICdkZWZhdWx0JyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsU3RhdHVzQ29kZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbFN0YXR1c0NvZGUgKyAnXFwnIG9yIFxcJ2RlZmF1bHQnKSArICdcXCcgcmVzcG9uc2UgY29kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlc3VsdHMgPSByZXNwb25zZS52YWxpZGF0ZVJlc3BvbnNlKHJlcyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT3BlcmF0aW9uO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snXyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnXyddIDogbnVsbCk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMnKTtcbnZhciBKc29uUmVmcyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydKc29uUmVmcyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnSnNvblJlZnMnXSA6IG51bGwpO1xuXG4vKipcbiAqIE9iamVjdCByZXByZXNlbnRpbmcgYSBwYXJhbWV0ZXIgdmFsdWUuXG4gKlxuICogKipOb3RlOioqIERvIG5vdCB1c2UgZGlyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtQYXJhbWV0ZXJ9IHBhcmFtZXRlck9iamVjdCAtIFRoZSBQYXJhbWV0ZXIgT2JqZWN0XG4gKiBAcGFyYW0geyp9IHJhdyAtIFRoZSBvcmlnaW5hbC9yYXcgdmFsdWVcbiAqXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvciAtIFRoZSBlcnJvcihzKSBlbmNvdW50ZXJlZCBkdXJpbmcgcHJvY2Vzc2luZy92YWxpZGF0aW5nIHRoZSBwYXJhbWV0ZXIgdmFsdWVcbiAqIEBwcm9wZXJ0eSB7UGFyYW1ldGVyfSBwYXJhbWV0ZXJPYmplY3QgLSBUaGUgUGFyYW1ldGVyIG9iamVjdFxuICogQHByb3BlcnR5IHsqfSByYXcgLSBUaGUgb3JpZ2luYWwgcGFyYW1ldGVyIHZhbHVlICooRG9lcyBub3QgdGFrZSBkZWZhdWx0IHZhbHVlcyBpbnRvIGFjY291bnQpKlxuICogQHByb3BlcnR5IHtib29sZWFufSB2YWxpZCAtIFdoZXRoZXIgb3Igbm90IHRoaXMgcGFyYW1ldGVyIGlzIHZhbGlkIGJhc2VkIG9uIGl0cyBKU09OIFNjaGVtYVxuICogQHByb3BlcnR5IHsqfSB2YWx1ZSAtIFRoZSBwcm9jZXNzZWQgdmFsdWUgKihUYWtlcyBkZWZhdWx0IHZhbHVlcyBpbnRvIGFjY291bnQgYW5kIGRvZXMgdHlwZSBjb2VyY2lvbiB3aGVuIG5lY2Vzc2FyeVxuICogICAgICAgICAgICAgICAgICAgICAgIGFuZCBwb3NzaWJsZSkqLiAgVGhpcyBjYW4gdGhlIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBldmVudCB0aGF0IHByb2Nlc3NpbmcgdGhlIHZhbHVlIGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgaW1wb3NzaWJsZSAqKG1pc3Npbmcgc2NoZW1hIHR5cGUpKiBvciBgdW5kZWZpbmVkYCBpZiBwcm9jZXNzaW5nIHRoZSB2YWx1ZSBmYWlsZWQgKihpbnZhbGlkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMsIGV0Yy4pKi5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUGFyYW1ldGVyVmFsdWUgKHBhcmFtZXRlck9iamVjdCwgcmF3KSB7XG4gIHZhciBwUGF0aCA9IEpzb25SZWZzLnBhdGhGcm9tUHRyKHBhcmFtZXRlck9iamVjdC5wdHIpO1xuICB2YXIgcHJvY2Vzc2VkID0gZmFsc2U7XG4gIHZhciBzY2hlbWEgPSBwYXJhbWV0ZXJPYmplY3QuY29tcHV0ZWRTY2hlbWE7XG4gIHZhciBlcnJvcjtcbiAgdmFyIGlzVmFsaWQ7XG4gIHZhciBwcm9jZXNzZWRWYWx1ZTtcblxuICB0aGlzLnBhcmFtZXRlck9iamVjdCA9IHBhcmFtZXRlck9iamVjdDtcbiAgdGhpcy5yYXcgPSByYXc7XG5cbiAgLy8gVXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBmb3IgJ3ZhbHVlJyB0byBhbGxvdyBmb3IgbGF6eSBwcm9jZXNzaW5nIG9mIHRoZSByYXcgdmFsdWVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuICAgIGVycm9yOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBjYWxsIHRoaXMudmFsaWQgdG8gZW5zdXJlIHdlIHZhbGlkYXRlIHRoZSB2YWx1ZSBwcmlvciB0byByZXR1cm5pbmcgYW55IHZhbHVlc1xuICAgICAgICBpZiAodGhpcy52YWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZDoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgd2FybmluZ3M6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHZhciBza2lwVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgIHZhciB2RXJyb3I7XG5cbiAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQoaXNWYWxpZCkpIHtcbiAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChlcnJvcikpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkbmVzc1xuICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyT2JqZWN0LnJlcXVpcmVkID09PSB0cnVlICYmIF8uaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdkVycm9yID0gbmV3IEVycm9yKCdWYWx1ZSBpcyByZXF1aXJlZCBidXQgd2FzIG5vdCBwcm92aWRlZCcpO1xuXG4gICAgICAgICAgICAgICAgdkVycm9yLmNvZGUgPSAnUkVRVUlSRUQnO1xuXG4gICAgICAgICAgICAgICAgdGhyb3cgdkVycm9yO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gQ2FzZXMgd2UgZG8gbm90IHdhbnQgdG8gZG8gc2NoZW1hIHZhbGlkYXRpb246XG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vICAgKiBUaGUgc2NoZW1hIGV4cGxpY2l0bHkgYWxsb3dzIGVtcHR5IHZhbHVlcyBhbmQgdGhlIHZhbHVlIGlzIGVtcHR5XG4gICAgICAgICAgICAgIC8vICAgKiBUaGUgc2NoZW1hIGFsbG93IG9wdGlvbmFsIHZhbHVlcyBhbmQgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAvLyAgICogVGhlIHNjaGVtYSBkZWZpbmVzIGEgZmlsZSBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgLy8gICAqIFRoZSBzY2hlbWEgaXMgZm9yIGEgc3RyaW5nIHR5cGUgd2l0aCBkYXRlL2RhdGUtdGltZSBmb3JtYXQgYW5kIHRoZSB2YWx1ZSBpcyBhIGRhdGVcbiAgICAgICAgICAgICAgLy8gICAqIFRoZSBzY2hlbWEgaXMgZm9yIGEgc3RyaW5nIHR5cGUgYW5kIHRoZSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyT2JqZWN0LnJlcXVpcmVkID09PSBmYWxzZSAmJiBfLmlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEuYWxsb3dFbXB0eVZhbHVlID09PSB0cnVlICYmIHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXJPYmplY3QudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChbJ2RhdGUnLCAnZGF0ZS10aW1lJ10uaW5kZXhPZihzY2hlbWEuZm9ybWF0KSA+IC0xICYmIF8uaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLnR5cGUgPT09ICdzdHJpbmcnICYmIF8uaXNGdW5jdGlvbih2YWx1ZS5yZWFkVUludDgpKSB7XG4gICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFnYWluc3QgSlNPTiBTY2hlbWFcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBoZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShoZWxwZXJzLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKSwgcGFyYW1ldGVyT2JqZWN0LmdldFNjaGVtYSgpLCB2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdkVycm9yID0gbmV3IEVycm9yKCdWYWx1ZSBmYWlsZWQgSlNPTiBTY2hlbWEgdmFsaWRhdGlvbicpO1xuXG4gICAgICAgICAgICAgICAgdkVycm9yLmNvZGUgPSAnU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEJztcbiAgICAgICAgICAgICAgICB2RXJyb3IuZXJyb3JzID0gcmVzdWx0LmVycm9ycztcblxuICAgICAgICAgICAgICAgIHRocm93IHZFcnJvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGVyci5mYWlsZWRWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZXJyLnBhdGggPSBwUGF0aDtcblxuICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZToge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXByb2Nlc3NlZCkge1xuICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IHJhdztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydC9Db2VyY2UgdGhlIHJhdyB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkVmFsdWUgPSBoZWxwZXJzLmNvbnZlcnRWYWx1ZShzY2hlbWEsIHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRm9ybWF0OiBwYXJhbWV0ZXJPYmplY3QuY29sbGVjdGlvbkZvcm1hdFxuICAgICAgICAgICAgICB9LCByYXcpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBubyB2YWx1ZSBhbmQgdGhlcmUgYXJlIG5vIGVycm9ycywgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIGlmIGF2YWlsYWJsZSAobm8gY29lcmNpb24pXG4gICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChwcm9jZXNzZWRWYWx1ZSkgJiYgXy5pc1VuZGVmaW5lZChlcnJvcikpIHtcbiAgICAgICAgICAgICAgaWYgKHNjaGVtYS50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IF8ucmVkdWNlKHNjaGVtYS5pdGVtcywgZnVuY3Rpb24gKGl0ZW1zLCBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbS5kZWZhdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGl0ZW1zIGhhdmUgYSBkZWZhdWx0IHZhbHVlIHJlc2V0IHRoZSBwcm9jZXNzZWQgdmFsdWUgdG8gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgIGlmIChfLmFsbChwcm9jZXNzZWRWYWx1ZSwgXy5pc1VuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWEuaXRlbXMpICYmICFfLmlzVW5kZWZpbmVkKHNjaGVtYS5pdGVtcy5kZWZhdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IFtzY2hlbWEuaXRlbXMuZGVmYXVsdF07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFZhbHVlID0gc2NoZW1hLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcmFtZXRlclZhbHVlO1xuIiwiLypcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBBcGlnZWUgQ29ycG9yYXRpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF8gPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snXyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnXyddIDogbnVsbCk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzd2F5OnBhcmFtZXRlcicpO1xudmFyIGhlbHBlcnMgPSByZXF1aXJlKCcuLi9oZWxwZXJzJyk7XG52YXIgSnNvblJlZnMgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snSnNvblJlZnMnXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ0pzb25SZWZzJ10gOiBudWxsKTtcbnZhciBQYXJhbWV0ZXJWYWx1ZSA9IHJlcXVpcmUoJy4vcGFyYW1ldGVyLXZhbHVlJyk7XG52YXIgcGFyc2VVcmwgPSByZXF1aXJlKCd1cmwnKS5wYXJzZTtcblxuLyoqXG4gKiBUaGUgU3dhZ2dlciBQYXJhbWV0ZXIgb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBEbyBub3QgdXNlIGRpcmVjdGx5LlxuICpcbiAqICoqRXh0cmEgUHJvcGVydGllczoqKiBPdGhlciB0aGFuIHRoZSBkb2N1bWVudGVkIHByb3BlcnRpZXMsIHRoaXMgb2JqZWN0IGFsc28gZXhwb3NlcyBhbGwgcHJvcGVydGllcyBvZiB0aGUgZGVmaW5pdGlvblxuICogb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T3BlcmF0aW9ufFBhdGh9IG9wT3JQYXRoT2JqZWN0IC0gVGhlIGBPcGVyYXRpb25gIG9yIGBQYXRoYCBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoVG9EZWZpbml0aW9uIC0gVGhlIHBhdGggc2VnbWVudHMgdG8gdGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKlxuICogQHByb3BlcnR5IHtvYmplY3R9IGNvbXB1dGVkU2NoZW1hIC0gVGhlIGNvbXB1dGVkIEpTT04gU2NoZW1hIGZvciB0aGUgcGFyYW1ldGVyXG4gKiBAcHJvcGVydHkge29iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBwYXJhbWV0ZXIgZGVmaW5pdGlvblxuICogQHByb3BlcnR5IHtPcGVyYXRpb259IG9wZXJhdGlvbk9iamVjdCAtIFRoZSBgT3BlcmF0aW9uYCBvYmplY3QgdGhlIHBhcmFtZXRlciBiZWxvbmdzIHRvICooQ2FuIGJlIHVuZGVmaW5lZCBmb3JcbiAqIHBhdGgtbGV2ZWwgcGFyYW1ldGVycykqXG4gKiBAcHJvcGVydHkge1BhdGh9IHBhdGhPYmplY3QgLSBUaGUgYFBhdGhgIG9iamVjdCB0aGUgcGFyYW1ldGVyIGJlbG9uZ3MgdFxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gcGF0aFRvRGVmaW5pdGlvbiAtIFRoZSBwYXRoIHNlZ21lbnRzIHRvIHRoZSBwYXJhbWV0ZXIgZGVmaW5pdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHB0ciAtIFRoZSBKU09OIFBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFBhcmFtZXRlciAob3BPclBhdGhPYmplY3QsIGRlZmluaXRpb24sIHBhdGhUb0RlZmluaXRpb24pIHtcbiAgLy8gQXNzaWduIGxvY2FsIHByb3BlcnRpZXNcbiAgdGhpcy5jb21wdXRlZFNjaGVtYSA9IGhlbHBlcnMuY29tcHV0ZVBhcmFtZXRlclNjaGVtYShkZWZpbml0aW9uKTtcbiAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcbiAgdGhpcy5wYXRoVG9EZWZpbml0aW9uID0gcGF0aFRvRGVmaW5pdGlvbjtcbiAgdGhpcy5wdHIgPSBKc29uUmVmcy5wYXRoVG9QdHIocGF0aFRvRGVmaW5pdGlvbik7XG5cbiAgaWYgKF8uaGFzKG9wT3JQYXRoT2JqZWN0LCAnY29uc3VtZXMnKSkge1xuICAgIHRoaXMub3BlcmF0aW9uT2JqZWN0ID0gb3BPclBhdGhPYmplY3Q7XG4gICAgdGhpcy5wYXRoT2JqZWN0ID0gb3BPclBhdGhPYmplY3QucGF0aE9iamVjdDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wZXJhdGlvbk9iamVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhdGhPYmplY3QgPSBvcE9yUGF0aE9iamVjdDtcbiAgfVxuXG4gIC8vIEFzc2lnbiBsb2NhbCBwcm9wZXJ0aWVzIGZyb20gdGhlIFN3YWdnZXIgZGVmaW5pdGlvbiBwcm9wZXJ0aWVzXG4gIF8uYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuXG4gIGRlYnVnKCdGb3VuZCAlcyBwYXJhbWV0ZXIgKCVzIGluICVzKSBhdCAlcycsXG4gICAgICAgIF8uaXNVbmRlZmluZWQodGhpcy5vcGVyYXRpb25PYmplY3QpID8gJ3BhdGgtbGV2ZWwnIDogJ29wZXJhdGlvbicsXG4gICAgICAgIGRlZmluaXRpb24ubmFtZSxcbiAgICAgICAgZGVmaW5pdGlvbi5pbixcbiAgICAgICAgdGhpcy5wdHIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXB1dGVkIEpTT04gU2NoZW1hIGZvciB0aGlzIHBhcmFtZXRlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIEpTT04gU2NoZW1hXG4gKi9cblBhcmFtZXRlci5wcm90b3R5cGUuZ2V0U2NoZW1hID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jb21wdXRlZFNjaGVtYTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHNhbXBsZSB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciBiYXNlZCBvbiBpdHMgc2NoZW1hO1xuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgc2FtcGxlIHZhbHVlXG4gKi9cblBhcmFtZXRlci5wcm90b3R5cGUuZ2V0U2FtcGxlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaGVscGVycy5nZXRKU09OU2NoZW1hTW9ja2VyKCkodGhpcy5jb21wdXRlZFNjaGVtYSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0LlxuICpcbiAqICoqTm90ZToqKiBCZWxvdyBpcyB0aGUgbGlzdCBvZiBgcmVxYCBwcm9wZXJ0aWVzIHVzZWQgKihyZXEgc2hvdWxkIGJlIGFuIGBodHRwLkNsaWVudFJlcXVlc3RgIG9yIGVxdWl2YWxlbnQpKjpcbiAqXG4gKiAgICogYGJvZHlgOiBVc2VkIGZvciBgYm9keWAgYW5kIGBmb3JtRGF0YWAgcGFyYW1ldGVyc1xuICogICAqIGBmaWxlc2A6IFVzZWQgZm9yIGBmb3JtRGF0YWAgcGFyYW1ldGVycyB3aG9zZSBgdHlwZWAgaXMgYGZpbGVgXG4gKiAgICogYGhlYWRlcnNgOiBVc2VkIGZvciBgaGVhZGVyYCBwYXJhbWV0ZXJzXG4gKiAgICogYHF1ZXJ5YDogVXNlZCBmb3IgYHF1ZXJ5YCBwYXJhbWV0ZXJzXG4gKiAgICogYHVybGA6IHVzZWQgZm9yIGBwYXRoYCBwYXJhbWV0ZXJzXG4gKlxuICogRm9yIGBwYXRoYCBwYXJhbWV0ZXJzLCB3ZSB3aWxsIHVzZSB0aGUgb3BlcmF0aW9uJ3MgYHJlZ2V4cGAgcHJvcGVydHkgdG8gcGFyc2Ugb3V0IHBhdGggcGFyYW1ldGVycyB1c2luZyB0aGUgYHVybGBcbiAqIHByb3BlcnR5LlxuICpcbiAqICooU2VlOiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9jbGFzc19odHRwX2NsaWVudHJlcXVlc3R9KSpcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVxIC0gVGhlIGh0dHAgY2xpZW50IHJlcXVlc3QgKihvciBlcXVpdmFsZW50KSpcbiAqXG4gKiBAcmV0dXJucyB7UGFyYW1ldGVyVmFsdWV9IFRoZSBwYXJhbWV0ZXIgdmFsdWUgb2JqZWN0XG4gKlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBgaW5gIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIncyBzY2hlbWEgaXMgbm90IHZhbGlkIG9yIGlmIHRoZSBgcmVxYCBwcm9wZXJ0eSB0byByZXRyaWV2ZSB0aGVcbiAqICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgaXMgbWlzc2luZy5cbiAqL1xuUGFyYW1ldGVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChyZXEpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocmVxKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcSBpcyByZXF1aXJlZCcpO1xuICB9IGVsc2UgaWYgKGhlbHBlcnMucGFyYW1ldGVyTG9jYXRpb25zLmluZGV4T2YodGhpcy5pbikgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFxcJ2luXFwnIHZhbHVlOiAnICsgdGhpcy5pbik7XG4gIH1cblxuICAvLyBXZSBkbyBub3QgbmVlZCB0byBleHBsaWNpdGx5IGNoZWNrIHRoZSB0eXBlIG9mIHJlcVxuXG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIHR5cGUgPSB0aGlzLmNvbXB1dGVkU2NoZW1hLnR5cGUgfHwgJ29iamVjdCc7XG4gIHZhciBwYXRoTWF0Y2g7XG4gIHZhciB2YWx1ZTtcblxuICBzd2l0Y2ggKHRoaXMuaW4pIHtcbiAgY2FzZSAnYm9keSc6XG4gICAgdmFsdWUgPSByZXEuYm9keTtcbiAgICBicmVhaztcbiAgY2FzZSAnZm9ybURhdGEnOlxuICAgIC8vIEZvciBmb3JtRGF0YSwgZWl0aGVyIHRoZSB2YWx1ZSBpcyBhIGZpbGUgb3IgYSBwcm9wZXJ0eSBvZiByZXEuYm9keS4gIHJlcS5ib2R5IGFzIGEgd2hvbGUgY2FuIG5ldmVyIGJlIHRoZVxuICAgIC8vIHZhbHVlIHNpbmNlIHRoZSBKU09OIFNjaGVtYSBmb3IgZm9ybURhdGEgcGFyYW1ldGVycyBkb2VzIG5vdCBhbGxvdyBhIHR5cGUgb2YgJ29iamVjdCcuXG4gICAgaWYgKHR5cGUgPT09ICdmaWxlJykge1xuICAgICAgaWYgKF8uaXNVbmRlZmluZWQocmVxLmZpbGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcS5maWxlcyBtdXN0IGJlIHByb3ZpZGVkIGZvciBcXCdmb3JtRGF0YVxcJyBwYXJhbWV0ZXJzIG9mIHR5cGUgXFwnZmlsZVxcJycpO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IHJlcS5maWxlc1t0aGlzLm5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXEuYm9keSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXEuYm9keSBtdXN0IGJlIHByb3ZpZGVkIGZvciBcXCdmb3JtRGF0YVxcJyBwYXJhbWV0ZXJzJyk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHJlcS5ib2R5W3RoaXMubmFtZV07XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlICdoZWFkZXInOlxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcS5oZWFkZXJzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXEuaGVhZGVycyBtdXN0IGJlIHByb3ZpZGVkIGZvciBcXCdoZWFkZXJcXCcgcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIHZhbHVlID0gcmVxLmhlYWRlcnNbdGhpcy5uYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgIGJyZWFrO1xuICBjYXNlICdwYXRoJzpcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXEudXJsKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXEudXJsIG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ3BhdGhcXCcgcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIC8vIFNpbmNlIHdlIGdldCB0aGUgcmF3IHBhdGggcGFyYW1ldGVyIHZhbHVlLCB3ZSBuZWVkIHRvIFVSSSBkZWNvZGUgaXRcbiAgICBwYXRoTWF0Y2ggPSB0aGlzLnBhdGhPYmplY3QucmVnZXhwLmV4ZWMocGFyc2VVcmwoZGVjb2RlVVJJQ29tcG9uZW50KHJlcS51cmwpKS5wYXRobmFtZSk7XG5cbiAgICBpZiAocGF0aE1hdGNoKSB7XG4gICAgICB2YWx1ZSA9IHBhdGhNYXRjaFtfLmZpbmRJbmRleCh0aGlzLnBhdGhPYmplY3QucmVnZXhwLmtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleS5uYW1lID09PSB0aGF0Lm5hbWU7XG4gICAgICB9KSArIDFdO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAncXVlcnknOlxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcS5xdWVyeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmVxLnF1ZXJ5IG11c3QgYmUgcHJvdmlkZWQgZm9yIFxcJ3F1ZXJ5XFwnIHBhcmFtZXRlcnMnKTtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IF8uZ2V0KHJlcS5xdWVyeSwgdGhpcy5uYW1lKTtcblxuICAgIGJyZWFrO1xuXG4gICAgLy8gbm8gZGVmYXVsdFxuICB9XG5cbiAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJWYWx1ZSh0aGlzLCB2YWx1ZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcmFtZXRlcjtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc3dheTpwYXRoJyk7XG52YXIgaGVscGVycyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMnKTtcbnZhciBKc29uUmVmcyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydKc29uUmVmcyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnSnNvblJlZnMnXSA6IG51bGwpO1xudmFyIE9wZXJhdGlvbiA9IHJlcXVpcmUoJy4vb3BlcmF0aW9uJyk7XG52YXIgUGFyYW1ldGVyID0gcmVxdWlyZSgnLi9wYXJhbWV0ZXInKTtcbnZhciBwYXRoVG9SZWdleHAgPSByZXF1aXJlKCdwYXRoLXRvLXJlZ2V4cCcpO1xuXG4vKipcbiAqIFRoZSBQYXRoIG9iamVjdC5cbiAqXG4gKiAqKk5vdGU6KiogRG8gbm90IHVzZSBkaXJlY3RseS5cbiAqXG4gKiAqKkV4dHJhIFByb3BlcnRpZXM6KiogT3RoZXIgdGhhbiB0aGUgZG9jdW1lbnRlZCBwcm9wZXJ0aWVzLCB0aGlzIG9iamVjdCBhbHNvIGV4cG9zZXMgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGRlZmluaXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtTd2FnZ2VyQXBpfSBhcGkgLSBUaGUgU3dhZ2dlciBBUEkgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHN0cmluZ1xuICogQHBhcmFtIHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgcGF0aCBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoVG9EZWZpbml0aW9uIC0gVGhlIHBhdGggc2VnbWVudHMgdG8gdGhlIHBhdGggZGVmaW5pdGlvblxuICpcbiAqIEBwcm9wZXJ0eSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXIgQVBJIG9iamVjdFxuICogQHByb3BlcnR5IHtvYmplY3R9IGRlZmluaXRpb24gLSBUaGUgcGF0aCBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge09wZXJhdGlvbltdfSBvcGVyYXRpb25PYmplY3RzIC0gVGhlIGBPcGVyYXRpb25gIG9iamVjdHNcbiAqIEBwcm9wZXJ0eSB7UGFyYW1ldGVyW119IHBhcmFtZXRlck9iamVjdHMgLSBUaGUgcGF0aC1sZXZlbCBgUGFyYW1ldGVyYCBvYmplY3RzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHN0cmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gcGF0aFRvRGVmaW5pdGlvbiAtIFRoZSBwYXRoIHNlZ21lbnRzIHRvIHRoZSBwYXRoIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7cHRyfSBwdHIgLSBUaGUgSlNPTiBQb2ludGVyIHRvIHRoZSBwYXRoXG4gKiBAcHJvcGVydHkge3JlZ2V4cH0gcmVnZXhwIC0gVGhlIGBSZWdFeHBgIHVzZWQgdG8gbWF0Y2ggcmVxdWVzdCBwYXRocyBhZ2FpbnN0IHRoaXMgcGF0aFxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBQYXRoIChhcGksIHBhdGgsIGRlZmluaXRpb24sIHBhdGhUb0RlZmluaXRpb24pIHtcbiAgdmFyIGJhc2VQYXRoUHJlZml4ID0gYXBpLmRlZmluaXRpb25BbGxSZXNvbHZlZC5iYXNlUGF0aCB8fCAnLyc7XG4gIHZhciB0aGF0ID0gdGhpcztcblxuICAvLyBUT0RPOiBXZSBjb3VsZC9zaG91bGQgcmVmYWN0b3IgdGhpcyB0byB1c2UgdGhlIHBhdGggbW9kdWxlXG5cbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGJhc2VQYXRoUHJlZml4IHNvIHdlIGRvIG5vdCBlbmQgdXAgd2l0aCBkb3VibGUgc2xhc2hlc1xuICBpZiAoYmFzZVBhdGhQcmVmaXguY2hhckF0KGJhc2VQYXRoUHJlZml4Lmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICBiYXNlUGF0aFByZWZpeCA9IGJhc2VQYXRoUHJlZml4LnN1YnN0cmluZygwLCBiYXNlUGF0aFByZWZpeC5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIC8vIEFzc2lnbiBsb2NhbCBwcm9wZXJ0aWVzXG4gIHRoaXMuYXBpID0gYXBpO1xuICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICB0aGlzLnBhdGggPSBwYXRoO1xuICB0aGlzLnBhdGhUb0RlZmluaXRpb24gPSBwYXRoVG9EZWZpbml0aW9uO1xuICB0aGlzLnB0ciA9IEpzb25SZWZzLnBhdGhUb1B0cihwYXRoVG9EZWZpbml0aW9uKTtcbiAgdGhpcy5yZWdleHAgPSBwYXRoVG9SZWdleHAoYmFzZVBhdGhQcmVmaXggKyBwYXRoLnJlcGxhY2UoL1xcey9nLCAnOicpLnJlcGxhY2UoL1xcfS9nLCAnJykpO1xuXG4gIC8vIEFzc2lnbiBsb2NhbCBwcm9wZXJ0aWVzIGZyb20gdGhlIFN3YWdnZXIgZGVmaW5pdGlvbiBwcm9wZXJ0aWVzXG4gIF8uYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuXG4gIHRoaXMucGFyYW1ldGVyT2JqZWN0cyA9IF8ubWFwKGRlZmluaXRpb24ucGFyYW1ldGVycywgZnVuY3Rpb24gKHBhcmFtRGVmLCBpbmRleCkge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVyKHRoYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1EZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFRvRGVmaW5pdGlvbi5jb25jYXQoWydwYXJhbWV0ZXJzJywgaW5kZXgudG9TdHJpbmcoKV0pKTtcbiAgfSk7XG4gIHRoaXMub3BlcmF0aW9uT2JqZWN0cyA9IF8ucmVkdWNlKGRlZmluaXRpb24sIGZ1bmN0aW9uIChvcGVyYXRpb25zLCBvcGVyYXRpb25EZWYsIG1ldGhvZCkge1xuICAgIGlmIChoZWxwZXJzLnN1cHBvcnRlZEh0dHBNZXRob2RzLmluZGV4T2YobWV0aG9kKSA+IC0xKSB7XG4gICAgICBvcGVyYXRpb25zLnB1c2gobmV3IE9wZXJhdGlvbih0aGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uRGVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFRvRGVmaW5pdGlvbi5jb25jYXQobWV0aG9kKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvcGVyYXRpb25zO1xuICB9LCBbXSk7XG5cbiAgZGVidWcoJ0ZvdW5kIHBhdGggYXQgJXMnLCB0aGlzLnB0cik7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBvcGVyYXRpb24gZm9yIHRoaXMgcGF0aCBhbmQgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBUaGUgbWV0aG9kXG4gKlxuICogQHJldHVybnMge09wZXJhdGlvbltdfSBUaGUgT3BlcmF0aW9uIG9iamVjdHMgZm9yIHRoaXMgcGF0aCBhbmQgbWV0aG9kIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBubyBvcGVyYXRpb24gZm9yIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBtZXRob2QuXG4gKi9cblBhdGgucHJvdG90eXBlLmdldE9wZXJhdGlvbiA9IGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgcmV0dXJuIF8uZmluZCh0aGlzLm9wZXJhdGlvbk9iamVjdHMsIGZ1bmN0aW9uIChvcGVyYXRpb25PYmplY3QpIHtcbiAgICByZXR1cm4gb3BlcmF0aW9uT2JqZWN0Lm1ldGhvZCA9PT0gbWV0aG9kO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBvcGVyYXRpb25zIGZvciB0aGlzIHBhdGguXG4gKlxuICogQHJldHVybnMge09wZXJhdGlvbltdfSBUaGUgT3BlcmF0aW9uIG9iamVjdHMgZm9yIHRoaXMgcGF0aC5cbiAqL1xuUGF0aC5wcm90b3R5cGUuZ2V0T3BlcmF0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMub3BlcmF0aW9uT2JqZWN0cztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBvcGVyYXRpb25zIGZvciB0aGlzIHBhdGggYW5kIHRhZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGhlIHRhZ1xuICpcbiAqIEByZXR1cm5zIHtPcGVyYXRpb25bXX0gVGhlIE9wZXJhdGlvbiBvYmplY3RzIGZvciB0aGlzIHBhdGggYW5kIHRhZ1xuICovXG5QYXRoLnByb3RvdHlwZS5nZXRPcGVyYXRpb25zQnlUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHJldHVybiBfLmZpbHRlcih0aGlzLm9wZXJhdGlvbk9iamVjdHMsIGZ1bmN0aW9uIChvcGVyYXRpb25PYmplY3QpIHtcbiAgICByZXR1cm4gXy5jb250YWlucyhvcGVyYXRpb25PYmplY3QudGFncywgdGFnKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgcGFyYW1ldGVycyBmb3IgdGhpcyBwYXRoLlxuICpcbiAqIEByZXR1cm5zIHtQYXJhbWV0ZXJbXX0gVGhlIFBhcmFtZXRlciBvYmplY3RzIGZvciB0aGlzIHBhdGguXG4gKi9cblBhdGgucHJvdG90eXBlLmdldFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBhcmFtZXRlck9iamVjdHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhdGg7XG4iLCIvKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEFwaWdlZSBDb3Jwb3JhdGlvblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4gKiBUSEUgU09GVFdBUkUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydfJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydfJ10gOiBudWxsKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N3YXk6cmVzcG9uc2UnKTtcbnZhciBoZWxwZXJzID0gcmVxdWlyZSgnLi4vaGVscGVycycpO1xudmFyIGpzb25WYWxpZGF0b3IgPSBoZWxwZXJzLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKTtcbnZhciBKc29uUmVmcyA9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydKc29uUmVmcyddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnSnNvblJlZnMnXSA6IG51bGwpO1xudmFyIFlBTUwgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snanN5YW1sJ10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydqc3lhbWwnXSA6IG51bGwpO1xuXG4vKipcbiAqIFRoZSBTd2FnZ2VyIFJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiAqKk5vdGU6KiogRG8gbm90IHVzZSBkaXJlY3RseS5cbiAqXG4gKiAqKkV4dHJhIFByb3BlcnRpZXM6KiogT3RoZXIgdGhhbiB0aGUgZG9jdW1lbnRlZCBwcm9wZXJ0aWVzLCB0aGlzIG9iamVjdCBhbHNvIGV4cG9zZXMgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGRlZmluaXRpb25cbiAqIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09wZXJhdGlvbn0gb3BlcmF0aW9uT2JqZWN0IC0gVGhlIGBPcGVyYXRpb25gIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c0NvZGUgLSBUaGUgc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHBhcmFtZXRlciBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoVG9EZWZpbml0aW9uIC0gVGhlIHBhdGggc2VnbWVudHMgdG8gdGhlIHBhdGggZGVmaW5pdGlvblxuICpcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIHJlc3BvbnNlIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7T3BlcmF0aW9ufSBvcGVyYXRpb25PYmplY3QgLSBUaGUgT3BlcmF0aW9uIG9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gcGF0aFRvRGVmaW5pdGlvbiAtIFRoZSBwYXRoIHNlZ21lbnRzIHRvIHRoZSBwYXRoIGRlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwdHIgLSBUaGUgSlNPTiBQb2ludGVyIHRvIHRoZSByZXNwb25zZSBkZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RhdHVzQ29kZSAtIFRoZSBzdGF0dXMgY29kZVxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBSZXNwb25zZSAob3BlcmF0aW9uT2JqZWN0LCBzdGF0dXNDb2RlLCBkZWZpbml0aW9uLCBwYXRoVG9EZWZpbml0aW9uKSB7XG4gIC8vIEFzc2lnbiBsb2NhbCBwcm9wZXJ0aWVzXG4gIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG4gIHRoaXMub3BlcmF0aW9uT2JqZWN0ID0gb3BlcmF0aW9uT2JqZWN0O1xuICB0aGlzLnBhdGhUb0RlZmluaXRpb24gPSBwYXRoVG9EZWZpbml0aW9uO1xuICB0aGlzLnB0ciA9IEpzb25SZWZzLnBhdGhUb1B0cihwYXRoVG9EZWZpbml0aW9uKTtcbiAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcblxuICAvLyBBc3NpZ24gbG9jYWwgcHJvcGVydGllcyBmcm9tIHRoZSBTd2FnZ2VyIGRlZmluaXRpb24gcHJvcGVydGllc1xuICBfLmFzc2lnbih0aGlzLCBkZWZpbml0aW9uKTtcblxuICBkZWJ1ZygnRm91bmQgJXMgcmVzcG9uc2UgYXQgJXMnLCBzdGF0dXNDb2RlLCB0aGlzLnB0cik7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVzcG9uc2UgZXhhbXBsZSBmb3IgdGhlIG1pbWUtdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW21pbWVUeXBlXSAtIFRoZSBtaW1lIHR5cGVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcmVzcG9uc2UgZXhhbXBsZSBhcyBhIHN0cmluZyBvciBgdW5kZWZpbmVkYCBpZiB0aGUgcmVzcG9uc2UgY29kZSBhbmQvb3IgbWltZS10eXBlIGlzIG1pc3NpbmdcbiAqL1xuUmVzcG9uc2UucHJvdG90eXBlLmdldEV4YW1wbGUgPSBmdW5jdGlvbiAobWltZVR5cGUpIHtcbiAgdmFyIGV4YW1wbGU7XG5cbiAgaWYgKF8uaXNQbGFpbk9iamVjdCh0aGlzLmRlZmluaXRpb24uZXhhbXBsZXMpKSB7XG4gICAgZXhhbXBsZSA9IHRoaXMuZGVmaW5pdGlvbi5leGFtcGxlc1ttaW1lVHlwZV07XG4gIH1cblxuICBpZiAoIV8uaXNVbmRlZmluZWQoZXhhbXBsZSkgJiYgIV8uaXNTdHJpbmcoZXhhbXBsZSkpIHtcbiAgICBpZiAobWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykge1xuICAgICAgZXhhbXBsZSA9IEpTT04uc3RyaW5naWZ5KGV4YW1wbGUsIG51bGwsIDIpO1xuICAgIH0gZWxzZSBpZiAobWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi94LXlhbWwnKSB7XG4gICAgICBleGFtcGxlID0gWUFNTC5zYWZlRHVtcChleGFtcGxlLCB7aW5kZW50OiAyfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4YW1wbGU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzYW1wbGUgdmFsdWUuXG4gKlxuICogQHJldHVybnMgeyp9IFRoZSBzYW1wbGUgdmFsdWUgZm9yIHRoZSByZXNwb25zZSwgd2hpY2ggY2FuIGJlIHVuZGVmaW5lZCBpZiB0aGUgcmVzcG9uc2Ugc2NoZW1hIGlzIG5vdCBwcm92aWRlZFxuICovXG5SZXNwb25zZS5wcm90b3R5cGUuZ2V0U2FtcGxlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2FtcGxlO1xuXG4gIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmRlZmluaXRpb24uc2NoZW1hKSkge1xuICAgIHNhbXBsZSA9IGhlbHBlcnMuZ2V0SlNPTlNjaGVtYU1vY2tlcigpKHRoaXMuZGVmaW5pdGlvbi5zY2hlbWEpO1xuICB9XG5cbiAgcmV0dXJuIHNhbXBsZTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge1NlcnZlclJlc3BvbnNlV3JhcHBlcn0gcmVzIC0gVGhlIHJlc3BvbnNlIG9yIHJlc3BvbnNlIGxpa2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMge1ZhbGlkYXRpb25SZXN1bHRzfSBUaGUgdmFsaWRhdGlvbiByZXN1bHRzXG4gKi9cblJlc3BvbnNlLnByb3RvdHlwZS52YWxpZGF0ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlcykge1xuICB2YXIgcmVzdWx0cyA9IHtcbiAgICBlcnJvcnM6IFtdLFxuICAgIHdhcm5pbmdzOiBbXVxuICB9O1xuICB2YXIgYm9keVZhbHVlO1xuICB2YXIgYnZSZXN1bHRzO1xuXG4gIC8vIFNldCBzb21lIGRlZmF1bHQganVzdCBpbiBjYXNlXG4gIGlmIChfLmlzVW5kZWZpbmVkKHJlcykpIHtcbiAgICByZXMgPSB7fTtcbiAgfVxuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHJlcy5oZWFkZXJzKSkge1xuICAgIHJlcy5oZWFkZXJzID0ge307XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0aGUgQ29udGVudC1UeXBlIGV4Y2VwdCBmb3Igdm9pZCByZXNwb25zZXMsIDIwNCByZXNwb25zZXMgYW5kIDMwNCByZXNwb25zZXMgYXMgdGhleSBoYXZlIG5vIGJvZHlcbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZGVmaW5pdGlvbi5zY2hlbWEpICYmIF8uaW5kZXhPZihbJzIwNCcsICczMDQnXSwgdGhpcy5zdGF0dXNDb2RlKSA9PT0gLTEpIHtcbiAgICBoZWxwZXJzLnZhbGlkYXRlQ29udGVudFR5cGUocmVzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddLCB0aGlzLm9wZXJhdGlvbk9iamVjdC5wcm9kdWNlcywgcmVzdWx0cyk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0aGUgcmVzcG9uc2UgaGVhZGVyc1xuICBfLmZvckVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbiAoc2NoZW1hLCBuYW1lKSB7XG4gICAgdmFyIGhlYWRlclZhbHVlO1xuICAgIHZhciBodlJlc3VsdHM7XG5cbiAgICB0cnkge1xuICAgICAgaGVhZGVyVmFsdWUgPSBoZWxwZXJzLmNvbnZlcnRWYWx1ZShzY2hlbWEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRm9ybWF0OiBzY2hlbWEuY29sbGVjdGlvbkZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdmVybHkgY2F1dGlvdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmhlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuaGVhZGVyc1tuYW1lXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZGVmYXVsdCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXN1bHRzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgY29kZTogJ0lOVkFMSURfUkVTUE9OU0VfSEVBREVSJyxcbiAgICAgICAgZXJyb3JzOiBlcnIuZXJyb3JzIHx8IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgcGF0aDogZXJyLnBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGhlYWRlciAoJyArIG5hbWUgKyAnKTogJyArIGVyci5tZXNzYWdlLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBwYXRoOiBlcnIucGF0aFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRHVlIHRvIGFtYmlndWl0eSBpbiB0aGUgU3dhZ2dlciAyLjAgU3BlY2lmaWNhdGlvbiAoaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItc3BlYy9pc3N1ZXMvMzIxKSwgaXRcbiAgICAvLyBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEgdG8gZG8gcmVxdWlyZWRuZXNzIGNoZWNrcyBmb3IgcmVzcG9uc2UgaGVhZGVycy4gIFRoaXMgbWVhbnMgd2Ugd2lsbCB2YWxpZGF0ZVxuICAgIC8vIGV4aXN0aW5nIGhlYWRlcnMgYnV0IHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIGEgaGVhZGVyIGlzIGRlZmluZWQgaW4gYSByZXNwb25zZSBzY2hlbWEgYnV0IG5vdCBpbiB0aGUgcmVzcG9uc2UuXG4gICAgLy9cbiAgICAvLyBXZSBhbHNvIGRvIG5vdCB3YW50IHRvIHZhbGlkYXRlIGRhdGUgb2JqZWN0cyBiZWNhdXNlIGl0IGlzIHJlZHVuZGFudC4gIElmIHdlIGhhdmUgYWxyZWFkeSBjb252ZXJ0ZWQgdGhlIHZhbHVlXG4gICAgLy8gZnJvbSBhIHN0cmluZytmb3JtYXQgdG8gYSBkYXRlLCB3ZSBrbm93IGl0IHBhc3NlcyBzY2hlbWEgdmFsaWRhdGlvbi5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQoaGVhZGVyVmFsdWUpICYmICFfLmlzRGF0ZShoZWFkZXJWYWx1ZSkpIHtcbiAgICAgIGh2UmVzdWx0cyA9IGhlbHBlcnMudmFsaWRhdGVBZ2FpbnN0U2NoZW1hKGpzb25WYWxpZGF0b3IsIHNjaGVtYSwgaGVhZGVyVmFsdWUpO1xuXG4gICAgICBpZiAoaHZSZXN1bHRzLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFX0hFQURFUicsXG4gICAgICAgICAgZXJyb3JzOiBodlJlc3VsdHMuZXJyb3JzLFxuICAgICAgICAgIC8vIFJlcG9ydCB0aGUgYWN0dWFsIGVycm9yIGlmIHRoZXJlIGlzIG9ubHkgb25lIGVycm9yLiAgT3RoZXJ3aXNlLCByZXBvcnQgYSBKU09OIFNjaGVtYVxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZXJyb3IuXG4gICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaGVhZGVyICgnICsgbmFtZSArICcpOiAnICsgKGh2UmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWYWx1ZSBmYWlsZWQgSlNPTiBTY2hlbWEgdmFsaWRhdGlvbicgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodlJlc3VsdHMuZXJyb3JzWzBdLm1lc3NhZ2UpLFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgcGF0aDogW11cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBWYWxpZGF0ZSByZXNwb25zZSBmb3Igbm9uLXZvaWQgcmVzcG9uc2VzXG4gIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmRlZmluaXRpb24uc2NoZW1hKSAmJiBfLmluZGV4T2YoWycyMDQnLCAnMzA0J10sIHRoaXMuc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgdHJ5IHtcbiAgICAgIGJvZHlWYWx1ZSA9IGhlbHBlcnMuY29udmVydFZhbHVlKHRoaXMuZGVmaW5pdGlvbi5zY2hlbWEsIHtcbiAgICAgICAgZW5jb2Rpbmc6IHJlcy5lbmNvZGluZ1xuICAgICAgfSwgcmVzLmJvZHkpO1xuICAgICAgYnZSZXN1bHRzID0gaGVscGVycy52YWxpZGF0ZUFnYWluc3RTY2hlbWEoanNvblZhbGlkYXRvciwgdGhpcy5kZWZpbml0aW9uLnNjaGVtYSwgYm9keVZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGJ2UmVzdWx0cyA9IHtcbiAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29kZTogZXJyLmNvZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgIHBhdGg6IGVyci5wYXRoXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChidlJlc3VsdHMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2goe1xuICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRV9CT0RZJyxcbiAgICAgICAgZXJyb3JzOiBidlJlc3VsdHMuZXJyb3JzLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBib2R5OiAnICsgKGJ2UmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZhbHVlIGZhaWxlZCBKU09OIFNjaGVtYSB2YWxpZGF0aW9uJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZSZXN1bHRzLmVycm9yc1swXS5tZXNzYWdlKSxcbiAgICAgICAgcGF0aDogW11cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZXNwb25zZTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xudmFyIEJhc2U2NCA9IHJlcXVpcmUoJ2pzLWJhc2U2NCcpLkJhc2U2NDtcbnZhciBzdHJpbmdNb2NrZXIgPSByZXF1aXJlKCdqc29uLXNjaGVtYS1mYWtlci9saWIvdHlwZXMvc3RyaW5nJyk7XG5cbi8qKlxuICogV2UgaGF2ZSB0byBmaWx0ZXIgdGhlIHNjaGVtYSB0byBhdm9pZCBhIG1heGltdW0gY2FsbHN0YWNrIGlzc3VlIGJ5IGRlbGV0aW5nIHRoZSBmb3JtYXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSAtIFRoZSBKU09OIFNjaGVtYSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgZmlsdGVyZWQgc2NoZW1hXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclNjaGVtYSAoc2NoZW1hKSB7XG4gIHZhciBjU2NoZW1hID0gXy5jbG9uZURlZXAoc2NoZW1hKTtcblxuICBkZWxldGUgY1NjaGVtYS5mb3JtYXQ7XG5cbiAgcmV0dXJuIGNTY2hlbWE7XG59XG5cbi8vIEJ1aWxkIHRoZSBsaXN0IG9mIGN1c3RvbSBKU09OIFNjaGVtYSBnZW5lcmF0b3IgZm9ybWF0c1xubW9kdWxlLmV4cG9ydHMuYnl0ZSA9IGZ1bmN0aW9uIChnZW4sIHNjaGVtYSkge1xuICByZXR1cm4gQmFzZTY0LmVuY29kZShzdHJpbmdNb2NrZXIoZmlsdGVyU2NoZW1hKHNjaGVtYSkpKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnBhc3N3b3JkID0gZnVuY3Rpb24gKGdlbiwgc2NoZW1hKSB7XG4gIHJldHVybiBzdHJpbmdNb2NrZXIoZmlsdGVyU2NoZW1hKHNjaGVtYSkpO1xufTtcbiIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlICgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzLmludDMyID0gbW9kdWxlLmV4cG9ydHMuaW50NjQgPSBmdW5jdGlvbiAodmFsKSB7XG4gIC8vIHotc2NoZW1hIHNlZW1zIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIGZvcm1hdCBldmVuIHdoZW4gdGhlIHR5cGUgaXMga25vd24gdG8gYmUgaW52YWxpZCBzbyB3ZSBtdXN0IGRvIGEgdHlwZVxuICAvLyBjaGVjayBwcmlvciB0byB2YWxpZGF0aW5nIHRoaXMgZm9ybWF0LlxuICByZXR1cm4gXy5pc051bWJlcih2YWwpICYmIHZhbCAlIDEgPT09IDA7XG59O1xuXG4vLyBUaGVzZSBmb3JtYXQgdmFsaWRhdG9ycyB3aWxsIGFsd2F5cyByZXR1cm4gJ3RydWUnIGJlY2F1c2UgdGhleSBhcmUgYWxyZWFkeSB0eXBlIHZhbGlkIGFuZCB0aGVyZSBhcmUgbm8gY29uc3RyYWludHNcbi8vIG9uIHRoZSBmb3JtYXQgdGhhdCB3b3VsZCBwcm9kdWNlIGFuIGludmFsaWQgdmFsdWUuXG5tb2R1bGUuZXhwb3J0cy5ieXRlID0gcmV0dXJuVHJ1ZTtcbm1vZHVsZS5leHBvcnRzLmRvdWJsZSA9IHJldHVyblRydWU7XG5tb2R1bGUuZXhwb3J0cy5mbG9hdCA9IHJldHVyblRydWU7XG5tb2R1bGUuZXhwb3J0cy5wYXNzd29yZCA9IHJldHVyblRydWU7XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwidGl0bGVcIjogXCJBIEpTT04gU2NoZW1hIGZvciBTd2FnZ2VyIDIuMCBBUEkuXCIsXG4gIFwiaWRcIjogXCJodHRwOi8vc3dhZ2dlci5pby92Mi9zY2hlbWEuanNvbiNcIixcbiAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcInN3YWdnZXJcIixcbiAgICBcImluZm9cIixcbiAgICBcInBhdGhzXCJcbiAgXSxcbiAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgXCJeeC1cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgIH1cbiAgfSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcInN3YWdnZXJcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImVudW1cIjogW1xuICAgICAgICBcIjIuMFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBTd2FnZ2VyIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudC5cIlxuICAgIH0sXG4gICAgXCJpbmZvXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvaW5mb1wiXG4gICAgfSxcbiAgICBcImhvc3RcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcInBhdHRlcm5cIjogXCJeW157fS8gOlxcXFxcXFxcXSsoPzo6XFxcXGQrKT8kXCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIGhvc3QgKG5hbWUgb3IgaXApIG9mIHRoZSBBUEkuIEV4YW1wbGU6ICdzd2FnZ2VyLmlvJ1wiXG4gICAgfSxcbiAgICBcImJhc2VQYXRoXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJwYXR0ZXJuXCI6IFwiXi9cIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgYmFzZSBwYXRoIHRvIHRoZSBBUEkuIEV4YW1wbGU6ICcvYXBpJy5cIlxuICAgIH0sXG4gICAgXCJzY2hlbWVzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1lc0xpc3RcIlxuICAgIH0sXG4gICAgXCJjb25zdW1lc1wiOiB7XG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsaXN0IG9mIE1JTUUgdHlwZXMgYWNjZXB0ZWQgYnkgdGhlIEFQSS5cIixcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWVkaWFUeXBlTGlzdFwiXG4gICAgfSxcbiAgICBcInByb2R1Y2VzXCI6IHtcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGxpc3Qgb2YgTUlNRSB0eXBlcyB0aGUgQVBJIGNhbiBwcm9kdWNlLlwiLFxuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tZWRpYVR5cGVMaXN0XCJcbiAgICB9LFxuICAgIFwicGF0aHNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXRoc1wiXG4gICAgfSxcbiAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmaW5pdGlvbnNcIlxuICAgIH0sXG4gICAgXCJwYXJhbWV0ZXJzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyRGVmaW5pdGlvbnNcIlxuICAgIH0sXG4gICAgXCJyZXNwb25zZXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZURlZmluaXRpb25zXCJcbiAgICB9LFxuICAgIFwic2VjdXJpdHlcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eVwiXG4gICAgfSxcbiAgICBcInNlY3VyaXR5RGVmaW5pdGlvbnNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eURlZmluaXRpb25zXCJcbiAgICB9LFxuICAgIFwidGFnc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdGFnXCJcbiAgICAgIH0sXG4gICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwiZXh0ZXJuYWxEb2NzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXh0ZXJuYWxEb2NzXCJcbiAgICB9XG4gIH0sXG4gIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgIFwiaW5mb1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBUEkuXCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwidGl0bGVcIlxuICAgICAgXSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIHVuaXF1ZSBhbmQgcHJlY2lzZSB0aXRsZSBvZiB0aGUgQVBJLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgc2VtYW50aWMgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEFQSS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIEFQSS4gU2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZSB0aXRsZS4gIEdpdEh1YiBGbGF2b3JlZCBNYXJrZG93biBpcyBhbGxvd2VkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGVybXNPZlNlcnZpY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgdGVybXMgb2Ygc2VydmljZSBmb3IgdGhlIEFQSS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRhY3RcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvY29udGFjdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGljZW5zZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9saWNlbnNlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJjb250YWN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRhY3QgaW5mb3JtYXRpb24gZm9yIHRoZSBvd25lcnMgb2YgdGhlIEFQSS5cIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgaWRlbnRpZnlpbmcgbmFtZSBvZiB0aGUgY29udGFjdCBwZXJzb24vb3JnYW5pemF0aW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIFVSTCBwb2ludGluZyB0byB0aGUgY29udGFjdCBpbmZvcm1hdGlvbi5cIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW1haWxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgY29udGFjdCBwZXJzb24vb3JnYW5pemF0aW9uLlwiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwiZW1haWxcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwibGljZW5zZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIlxuICAgICAgXSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgbGljZW5zZSB0eXBlLiBJdCdzIGVuY291cmFnZWQgdG8gdXNlIGFuIE9TSSBjb21wYXRpYmxlIGxpY2Vuc2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgVVJMIHBvaW50aW5nIHRvIHRoZSBsaWNlbnNlLlwiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcInBhdGhzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlbGF0aXZlIHBhdGhzIHRvIHRoZSBpbmRpdmlkdWFsIGVuZHBvaW50cy4gVGhleSBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoZSAnYmFzZVBhdGgnLlwiLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiXi9cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGF0aEl0ZW1cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICB9LFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9uZSBvciBtb3JlIEpTT04gb2JqZWN0cyBkZXNjcmliaW5nIHRoZSBzY2hlbWFzIGJlaW5nIGNvbnN1bWVkIGFuZCBwcm9kdWNlZCBieSB0aGUgQVBJLlwiXG4gICAgfSxcbiAgICBcInBhcmFtZXRlckRlZmluaXRpb25zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyXCJcbiAgICAgIH0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT25lIG9yIG1vcmUgSlNPTiByZXByZXNlbnRhdGlvbnMgZm9yIHBhcmFtZXRlcnNcIlxuICAgIH0sXG4gICAgXCJyZXNwb25zZURlZmluaXRpb25zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcmVzcG9uc2VcIlxuICAgICAgfSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPbmUgb3IgbW9yZSBKU09OIHJlcHJlc2VudGF0aW9ucyBmb3IgcGFyYW1ldGVyc1wiXG4gICAgfSxcbiAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5mb3JtYXRpb24gYWJvdXQgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvblwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidXJsXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiZXhhbXBsZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWVcbiAgICB9LFxuICAgIFwibWltZVR5cGVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIE1JTUUgdHlwZSBvZiB0aGUgSFRUUCBtZXNzYWdlLlwiXG4gICAgfSxcbiAgICBcIm9wZXJhdGlvblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlc3BvbnNlc1wiXG4gICAgICBdLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0YWdzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcInN1bW1hcnlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIHN1bW1hcnkgb2YgdGhlIG9wZXJhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIG9wZXJhdGlvbiwgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRlcm5hbERvY3NcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXh0ZXJuYWxEb2NzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvcGVyYXRpb25JZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIG9wZXJhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInByb2R1Y2VzXCI6IHtcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsaXN0IG9mIE1JTUUgdHlwZXMgdGhlIEFQSSBjYW4gcHJvZHVjZS5cIixcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21lZGlhVHlwZUxpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbnN1bWVzXCI6IHtcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBsaXN0IG9mIE1JTUUgdHlwZXMgdGhlIEFQSSBjYW4gY29uc3VtZS5cIixcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21lZGlhVHlwZUxpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhcmFtZXRlcnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyc0xpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlc3BvbnNlc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInNjaGVtZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1lc0xpc3RcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcHJlY2F0ZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWN1cml0eVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zZWN1cml0eVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicGF0aEl0ZW1cIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIiRyZWZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHV0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicG9zdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vcGVyYXRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlbGV0ZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vcGVyYXRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcIm9wdGlvbnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3BlcmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJoZWFkXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29wZXJhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0Y2hcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3BlcmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJhbWV0ZXJzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhcmFtZXRlcnNMaXN0XCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJyZXNwb25zZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVzcG9uc2Ugb2JqZWN0cyBuYW1lcyBjYW4gZWl0aGVyIGJlIGFueSB2YWxpZCBIVFRQIHN0YXR1cyBjb2RlIG9yICdkZWZhdWx0Jy5cIixcbiAgICAgIFwibWluUHJvcGVydGllc1wiOiAxLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl4oWzAtOV17M30pJHxeKGRlZmF1bHQpJFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9yZXNwb25zZVZhbHVlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwibm90XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicmVzcG9uc2VWYWx1ZVwiOiB7XG4gICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcmVzcG9uc2VcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9qc29uUmVmZXJlbmNlXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJyZXNwb25zZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImRlc2NyaXB0aW9uXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInNjaGVtYVwiOiB7XG4gICAgICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZmlsZVNjaGVtYVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImhlYWRlcnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvaGVhZGVyc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhhbXBsZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhhbXBsZXNcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImhlYWRlcnNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9oZWFkZXJcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJoZWFkZXJcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJhcnJheVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wcmltaXRpdmVzSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbGxlY3Rpb25Gb3JtYXRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvY29sbGVjdGlvbkZvcm1hdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9kZWZhdWx0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhMZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkxlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5MZW5ndGhcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGF0dGVyblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4SXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy91bmlxdWVJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9lbnVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL211bHRpcGxlT2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwidmVuZG9yRXh0ZW5zaW9uXCI6IHtcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBbnkgcHJvcGVydHkgc3RhcnRpbmcgd2l0aCB4LSBpcyB2YWxpZC5cIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgIFwiYWRkaXRpb25hbEl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwiYm9keVBhcmFtZXRlclwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJpblwiLFxuICAgICAgICBcInNjaGVtYVwiXG4gICAgICBdLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVyLiBUaGlzIGNvdWxkIGNvbnRhaW4gZXhhbXBsZXMgb2YgdXNlLiAgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJib2R5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJzY2hlbWFcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICB9LFxuICAgIFwiaGVhZGVyUGFyYW1ldGVyU3ViU2NoZW1hXCI6IHtcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJpblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRldGVybWluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiaGVhZGVyXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYXJyYXlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcHJpbWl0aXZlc0l0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2NvbGxlY3Rpb25Gb3JtYXRcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNaW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4TGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluTGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heEl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5JdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tdWx0aXBsZU9mXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJxdWVyeVBhcmFtZXRlclN1YlNjaGVtYVwiOiB7XG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInJlcXVpcmVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgb3Igb3B0aW9uYWwuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGFyYW1ldGVyLlwiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInF1ZXJ5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWxsb3dFbXB0eVZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvd3Mgc2VuZGluZyBhIHBhcmFtZXRlciBieSBuYW1lIG9ubHkgb3Igd2l0aCBhbiBlbXB0eSB2YWx1ZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImFycmF5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0V2l0aE11bHRpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiZm9ybURhdGFQYXJhbWV0ZXJTdWJTY2hlbWFcIjoge1xuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIG9yIG9wdGlvbmFsLlwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJmb3JtRGF0YVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVyLiBUaGlzIGNvdWxkIGNvbnRhaW4gZXhhbXBsZXMgb2YgdXNlLiAgR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImFsbG93RW1wdHlWYWx1ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3dzIHNlbmRpbmcgYSBwYXJhbWV0ZXIgYnkgbmFtZSBvbmx5IG9yIHdpdGggYW4gZW1wdHkgdmFsdWUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJmaWxlXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0V2l0aE11bHRpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwicGF0aFBhcmFtZXRlclN1YlNjaGVtYVwiOiB7XG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJyZXF1aXJlZFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvciBvcHRpb25hbC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImluXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmFtZXRlci5cIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJwYXRoXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuIFRoaXMgY291bGQgY29udGFpbiBleGFtcGxlcyBvZiB1c2UuICBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gaXMgYWxsb3dlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiYXJyYXlcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcHJpbWl0aXZlc0l0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2xsZWN0aW9uRm9ybWF0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2NvbGxlY3Rpb25Gb3JtYXRcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZGVmYXVsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNaW5pbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4TGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluTGVuZ3RoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heEl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW5JdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tdWx0aXBsZU9mXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJub25Cb2R5UGFyYW1ldGVyXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImluXCIsXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2hlYWRlclBhcmFtZXRlclN1YlNjaGVtYVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2Zvcm1EYXRhUGFyYW1ldGVyU3ViU2NoZW1hXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcXVlcnlQYXJhbWV0ZXJTdWJTY2hlbWFcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXRoUGFyYW1ldGVyU3ViU2NoZW1hXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJwYXJhbWV0ZXJcIjoge1xuICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2JvZHlQYXJhbWV0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9ub25Cb2R5UGFyYW1ldGVyXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJzY2hlbWFcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBkZXRlcm1pbmlzdGljIHZlcnNpb24gb2YgYSBKU09OIFNjaGVtYSBvYmplY3QuXCIsXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3RpdGxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL211bHRpcGxlT2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3BhdHRlcm5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdW5pcXVlSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZW51bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3R5cGVcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImFsbE9mXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkaXNjcmltaW5hdG9yXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwieG1sXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3htbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0ZXJuYWxEb2NzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2V4dGVybmFsRG9jc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhhbXBsZVwiOiB7fVxuICAgICAgfSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICB9LFxuICAgIFwiZmlsZVNjaGVtYVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIGRldGVybWluaXN0aWMgdmVyc2lvbiBvZiBhIEpTT04gU2NoZW1hIG9iamVjdC5cIixcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3RpdGxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXlcIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcImZpbGVcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJyZWFkT25seVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leHRlcm5hbERvY3NcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4YW1wbGVcIjoge31cbiAgICAgIH0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgfSxcbiAgICBcInByaW1pdGl2ZXNJdGVtc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImFycmF5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ByaW1pdGl2ZXNJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9jb2xsZWN0aW9uRm9ybWF0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2RlZmF1bHRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWF4aW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leGNsdXNpdmVNYXhpbXVtXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbmltdW1cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvZXhjbHVzaXZlTWluaW11bVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21heExlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL21pbkxlbmd0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wYXR0ZXJuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9tYXhJdGVtc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbWluSXRlbXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3VuaXF1ZUl0ZW1zXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2VudW1cIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbXVsdGlwbGVPZlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJzZWN1cml0eVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2VjdXJpdHlSZXF1aXJlbWVudFwiXG4gICAgICB9LFxuICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgfSxcbiAgICBcInNlY3VyaXR5UmVxdWlyZW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBcInhtbFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInByZWZpeFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdHRyaWJ1dGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3cmFwcGVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJ0YWdcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVybmFsRG9jc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9leHRlcm5hbERvY3NcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwic2VjdXJpdHlEZWZpbml0aW9uc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2Jhc2ljQXV0aGVudGljYXRpb25TZWN1cml0eVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2FwaUtleVNlY3VyaXR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgySW1wbGljaXRTZWN1cml0eVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29hdXRoMlBhc3N3b3JkU2VjdXJpdHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJBcHBsaWNhdGlvblNlY3VyaXR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyQWNjZXNzQ29kZVNlY3VyaXR5XCJcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiYmFzaWNBdXRoZW50aWNhdGlvblNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYmFzaWNcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFwaUtleVNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwiaW5cIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYXBpS2V5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiaGVhZGVyXCIsXG4gICAgICAgICAgICBcInF1ZXJ5XCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJvYXV0aDJJbXBsaWNpdFNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmbG93XCIsXG4gICAgICAgIFwiYXV0aG9yaXphdGlvblVybFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJvYXV0aDJcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmbG93XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJpbXBsaWNpdFwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJTY29wZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvcml6YXRpb25VcmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm9hdXRoMlBhc3N3b3JkU2VjdXJpdHlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcImZsb3dcIixcbiAgICAgICAgXCJ0b2tlblVybFwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJvYXV0aDJcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmbG93XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgXCJwYXNzd29yZFwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vYXV0aDJTY29wZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInRva2VuVXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJeeC1cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvdmVuZG9yRXh0ZW5zaW9uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJvYXV0aDJBcHBsaWNhdGlvblNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmbG93XCIsXG4gICAgICAgIFwidG9rZW5VcmxcIlxuICAgICAgXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwib2F1dGgyXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmxvd1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb25cIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzY29wZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyU2NvcGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0b2tlblVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiXngtXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3ZlbmRvckV4dGVuc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwib2F1dGgyQWNjZXNzQ29kZVNlY3VyaXR5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmbG93XCIsXG4gICAgICAgIFwiYXV0aG9yaXphdGlvblVybFwiLFxuICAgICAgICBcInRva2VuVXJsXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcIm9hdXRoMlwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZsb3dcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICBcImFjY2Vzc0NvZGVcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzY29wZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb2F1dGgyU2NvcGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JpemF0aW9uVXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidG9rZW5VcmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIl54LVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy92ZW5kb3JFeHRlbnNpb25cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm9hdXRoMlNjb3Blc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJtZWRpYVR5cGVMaXN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9taW1lVHlwZVwiXG4gICAgICB9LFxuICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgfSxcbiAgICBcInBhcmFtZXRlcnNMaXN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIHNlbmQgYSB2YWxpZCBBUEkgY2FsbC5cIixcbiAgICAgIFwiYWRkaXRpb25hbEl0ZW1zXCI6IGZhbHNlLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwib25lT2ZcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcGFyYW1ldGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvanNvblJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgfSxcbiAgICBcInNjaGVtZXNMaXN0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHRyYW5zZmVyIHByb3RvY29sIG9mIHRoZSBBUEkuXCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgXCJodHRwXCIsXG4gICAgICAgICAgXCJodHRwc1wiLFxuICAgICAgICAgIFwid3NcIixcbiAgICAgICAgICBcIndzc1wiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICB9LFxuICAgIFwiY29sbGVjdGlvbkZvcm1hdFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgIFwiY3N2XCIsXG4gICAgICAgIFwic3N2XCIsXG4gICAgICAgIFwidHN2XCIsXG4gICAgICAgIFwicGlwZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVmYXVsdFwiOiBcImNzdlwiXG4gICAgfSxcbiAgICBcImNvbGxlY3Rpb25Gb3JtYXRXaXRoTXVsdGlcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImVudW1cIjogW1xuICAgICAgICBcImNzdlwiLFxuICAgICAgICBcInNzdlwiLFxuICAgICAgICBcInRzdlwiLFxuICAgICAgICBcInBpcGVzXCIsXG4gICAgICAgIFwibXVsdGlcIlxuICAgICAgXSxcbiAgICAgIFwiZGVmYXVsdFwiOiBcImNzdlwiXG4gICAgfSxcbiAgICBcInRpdGxlXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3RpdGxlXCJcbiAgICB9LFxuICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvZGVzY3JpcHRpb25cIlxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2RlZmF1bHRcIlxuICAgIH0sXG4gICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL211bHRpcGxlT2ZcIlxuICAgIH0sXG4gICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21heGltdW1cIlxuICAgIH0sXG4gICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1heGltdW1cIlxuICAgIH0sXG4gICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL21pbmltdW1cIlxuICAgIH0sXG4gICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2V4Y2x1c2l2ZU1pbmltdW1cIlxuICAgIH0sXG4gICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiXG4gICAgfSxcbiAgICBcIm1pbkxlbmd0aFwiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIlxuICAgIH0sXG4gICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL3BhdHRlcm5cIlxuICAgIH0sXG4gICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCJcbiAgICB9LFxuICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjL3Byb3BlcnRpZXMvdW5pcXVlSXRlbXNcIlxuICAgIH0sXG4gICAgXCJlbnVtXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIy9wcm9wZXJ0aWVzL2VudW1cIlxuICAgIH0sXG4gICAgXCJqc29uUmVmZXJlbmNlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiJHJlZlwiXG4gICAgICBdLFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSIsIi8qXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQXBpZ2VlIENvcnBvcmF0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfID0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ18nXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ18nXSA6IG51bGwpO1xudmFyIGhlbHBlcnMgPSByZXF1aXJlKCcuLi9oZWxwZXJzJyk7XG52YXIgSnNvblJlZnMgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snSnNvblJlZnMnXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ0pzb25SZWZzJ10gOiBudWxsKTtcbnZhciBzd2FnZ2VyU2NoZW1hID0gcmVxdWlyZSgnLi9zY2hlbWEuanNvbicpO1xuXG5mdW5jdGlvbiBnZXRTY2hlbWFQcm9wZXJ0aWVzIChzY2hlbWEpIHtcbiAgdmFyIHByb3BlcnRpZXMgPSBfLmtleXMoc2NoZW1hLnByb3BlcnRpZXMpOyAvLyBTdGFydCB3aXRoIHRoZSBkZWZpbmVkIHByb3BlcnRpZXNcblxuICAvLyBBZGQgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBwYXJlbnRcbiAgXy5mb3JFYWNoKHNjaGVtYS5hbGxPZiwgZnVuY3Rpb24gKHBhcmVudCkge1xuICAgIF8uZm9yRWFjaChnZXRTY2hlbWFQcm9wZXJ0aWVzKHBhcmVudCksIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgaWYgKF8uaW5kZXhPZihwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkgPT09IC0xKSB7XG4gICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiB3YWxrU2NoZW1hIChhcGksIGJsYWNrbGlzdCwgc2NoZW1hLCBwYXRoLCBoYW5kbGVycywgcmVzcG9uc2UpIHtcbiAgdmFyIHR5cGUgPSBzY2hlbWEudHlwZSB8fCAnb2JqZWN0JztcblxuICBmdW5jdGlvbiBzaG91bGRTa2lwIChjUGF0aCkge1xuICAgIHJldHVybiBfLmluZGV4T2YoYmxhY2tsaXN0LCBKc29uUmVmcy5wYXRoVG9QdHIoY1BhdGgpKSA+IC0xO1xuICB9XG5cbiAgLy8gRG8gbm90IHByb2Nlc3MgaXRlbXMgaW4gdGhlIGJsYWNrbGlzdCBhcyB0aGV5J3ZlIGJlZW4gcHJvY2Vzc2VkIGFscmVhZHlcbiAgaWYgKHNob3VsZFNraXAocGF0aCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3YWxrZXIgKHBTY2hlbWEsIHBQYXRoKSB7XG4gICAgLy8gRG8gbm90IHByb2Nlc3MgaXRlbXMgaW4gdGhlIGJsYWNrbGlzdCBhcyB0aGV5J3ZlIGJlZW4gcHJvY2Vzc2VkIGFscmVhZHlcbiAgICBpZiAoc2hvdWxkU2tpcChwUGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfLmZvckVhY2gocFNjaGVtYSwgZnVuY3Rpb24gKGl0ZW0sIG5hbWUpIHtcbiAgICAgIGlmIChfLmlzTnVtYmVyKG5hbWUpKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIGl0ZW0sIHBQYXRoLmNvbmNhdChuYW1lKSwgaGFuZGxlcnMsIHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWEuc2NoZW1hKSkge1xuICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIHNjaGVtYS5zY2hlbWEsIHBhdGguY29uY2F0KCdzY2hlbWEnKSwgaGFuZGxlcnMsIHJlc3BvbnNlKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXknICYmICFfLmlzVW5kZWZpbmVkKHNjaGVtYS5pdGVtcykpIHtcbiAgICBpZiAoXy5pc0FycmF5KHNjaGVtYS5pdGVtcykpIHtcbiAgICAgIHdhbGtlcihzY2hlbWEuaXRlbXMsIHBhdGguY29uY2F0KCdpdGVtcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgc2NoZW1hLml0ZW1zLCBwYXRoLmNvbmNhdCgnaXRlbXMnKSwgaGFuZGxlcnMsIHJlc3BvbnNlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSkge1xuICAgICAgd2Fsa1NjaGVtYShhcGksIGJsYWNrbGlzdCwgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLCBwYXRoLmNvbmNhdCgnYWRkaXRpb25hbFByb3BlcnRpZXMnKSwgaGFuZGxlcnMsIHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBfLmZvckVhY2goWydhbGxPZicsICdwcm9wZXJ0aWVzJ10sIGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHNjaGVtYVtwcm9wTmFtZV0pKSB7XG4gICAgICAgIHdhbGtlcihzY2hlbWFbcHJvcE5hbWVdLCBwYXRoLmNvbmNhdChwcm9wTmFtZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgXy5mb3JFYWNoKGhhbmRsZXJzLCBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgIGhhbmRsZXIoYXBpLCByZXNwb25zZSwgc2NoZW1hLCBwYXRoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSByZXNvbHZlZCBTd2FnZ2VyIGRvY3VtZW50IGFnYWluc3QgdGhlIFN3YWdnZXIgMi4wIEpTT04gU2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXJBcGkgb2JqZWN0XG4gKlxuICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3Mgb2YgdGhlIHZhbGlkYXRpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJ1Y3R1cmUgKGFwaSkge1xuICB2YXIgcmVzdWx0cyA9IGhlbHBlcnMudmFsaWRhdGVBZ2FpbnN0U2NoZW1hKGhlbHBlcnMuZ2V0SlNPTlNjaGVtYVZhbGlkYXRvcigpLCBzd2FnZ2VyU2NoZW1hLCBhcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkKTtcblxuICAvLyBNYWtlIGNvbXBsZXggSlNPTiBTY2hlbWEgdmFsaWRhdGlvbiBlcnJvcnMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgKElzc3VlIDE1KVxuICByZXN1bHRzLmVycm9ycyA9IHJlc3VsdHMuZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICB2YXIgZGVmVHlwZSA9IFsnYWRkaXRpb25hbFByb3BlcnRpZXMnLCAnaXRlbXMnXS5pbmRleE9mKGVycm9yLnBhdGhbZXJyb3IucGF0aC5sZW5ndGggLSAxXSkgPiAtMSA/XG4gICAgICAgICAgJ3NjaGVtYScgOlxuICAgICAgICAgIGVycm9yLnBhdGhbZXJyb3IucGF0aC5sZW5ndGggLSAyXTtcblxuICAgIGlmIChbJ0FOWV9PRl9NSVNTSU5HJywgJ09ORV9PRl9NSVNTSU5HJ10uaW5kZXhPZihlcnJvci5jb2RlKSA+IC0xKSB7XG4gICAgICBzd2l0Y2ggKGRlZlR5cGUpIHtcbiAgICAgIGNhc2UgJ3BhcmFtZXRlcnMnOlxuICAgICAgICBkZWZUeXBlID0gJ3BhcmFtZXRlcic7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXNwb25zZXMnOlxuICAgICAgICBkZWZUeXBlID0gJ3Jlc3BvbnNlJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3NjaGVtYSc6XG4gICAgICAgIGRlZlR5cGUgKz0gJyAnICsgZXJyb3IucGF0aFtlcnJvci5wYXRoLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICAgIH1cblxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdOb3QgYSB2YWxpZCAnICsgZGVmVHlwZSArICcgZGVmaW5pdGlvbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9yO1xuICB9KTtcblxuICAvLyBUcmVhdCBpbnZhbGlkL21pc3NpbmcgcmVmZXJlbmNlcyBhcyBzdHJ1Y3R1cmFsIGVycm9yc1xuICBfLmVhY2goYXBpLnJlZmVyZW5jZXMsIGZ1bmN0aW9uIChyZWZEZXRhaWxzLCByZWZQdHIpIHtcbiAgICB2YXIgcmVmUGF0aCA9IEpzb25SZWZzLnBhdGhGcm9tUHRyKHJlZlB0cik7XG4gICAgdmFyIGVycjtcblxuICAgIGlmIChyZWZEZXRhaWxzLm1pc3NpbmcpIHtcbiAgICAgIGVyciA9IHtcbiAgICAgICAgY29kZTogJ1VOUkVTT0xWQUJMRV9SRUZFUkVOQ0UnLFxuICAgICAgICBtZXNzYWdlOiAnUmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJyArIHJlZkRldGFpbHMudXJpLFxuICAgICAgICBwYXRoOiByZWZQYXRoLmNvbmNhdCgnJHJlZicpXG4gICAgICB9O1xuXG4gICAgICBpZiAoXy5oYXMocmVmRGV0YWlscywgJ2Vycm9yJykpIHtcbiAgICAgICAgZXJyLmVycm9yID0gcmVmRGV0YWlscy5lcnJvcjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0cy5lcnJvcnMucHVzaChlcnIpO1xuICAgIH0gZWxzZSBpZiAocmVmRGV0YWlscy50eXBlID09PSAnaW52YWxpZCcpIHtcbiAgICAgIHJlc3VsdHMuZXJyb3JzLnB1c2goe1xuICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRUZFUkVOQ0UnLFxuICAgICAgICBtZXNzYWdlOiByZWZEZXRhaWxzLmVycm9yIHx8ICdJbnZhbGlkIEpTT04gUmVmZXJlbmNlJyxcbiAgICAgICAgcGF0aDogcmVmUGF0aC5jb25jYXQoJyRyZWYnKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyogU2NoZW1hIE9iamVjdCBWYWxpZGF0b3JzICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXlUeXBlSXRlbXNFeGlzdGVuY2UgKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCkge1xuICBpZiAoc2NoZW1hLnR5cGUgPT09ICdhcnJheScgJiYgXy5pc1VuZGVmaW5lZChzY2hlbWEuaXRlbXMpKSB7XG4gICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgY29kZTogJ09CSkVDVF9NSVNTSU5HX1JFUVVJUkVEX1BST1BFUlRZJyxcbiAgICAgIG1lc3NhZ2U6ICdNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiBpdGVtcycsXG4gICAgICBwYXRoOiBwYXRoXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEZWZhdWx0VmFsdWUgKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCkge1xuICB2YXIgcmVzdWx0O1xuXG4gIGlmICghXy5pc1VuZGVmaW5lZChzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICByZXN1bHQgPSBoZWxwZXJzLnZhbGlkYXRlQWdhaW5zdFNjaGVtYShoZWxwZXJzLmdldEpTT05TY2hlbWFWYWxpZGF0b3IoKSwgc2NoZW1hLCBzY2hlbWEuZGVmYXVsdCk7XG5cbiAgICBfLmZvckVhY2gocmVzdWx0LmVycm9ycywgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBlcnJvci5wYXRoID0gcGF0aC5jb25jYXQoZXJyb3IucGF0aC5jb25jYXQoJ2RlZmF1bHQnKSk7XG5cbiAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgICB9KTtcblxuICAgIF8uZm9yRWFjaChyZXN1bHQud2FybmluZ3MsIGZ1bmN0aW9uICh3YXJuaW5nKSB7XG4gICAgICB3YXJuaW5nLnBhdGggPSBwYXRoLmNvbmNhdCh3YXJuaW5nLnBhdGgucHVzaCgnZGVmYXVsdCcpKTtcblxuICAgICAgcmVzcG9uc2Uud2FybmluZ3MucHVzaCh3YXJuaW5nKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYVByb3BlcnRpZXMgKGFwaSwgcmVzcG9uc2UsIHNjaGVtYSwgcGF0aCkge1xuICBfLmZvckVhY2goXy5kaWZmZXJlbmNlKHNjaGVtYS5yZXF1aXJlZCB8fCBbXSwgZ2V0U2NoZW1hUHJvcGVydGllcyhzY2hlbWEpKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICBjb2RlOiAnT0JKRUNUX01JU1NJTkdfUkVRVUlSRURfUFJPUEVSVFlfREVGSU5JVElPTicsXG4gICAgICBtZXNzYWdlOiAnTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAnICsgbmFtZSxcbiAgICAgIHBhdGg6IHBhdGhcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFsbCByZWZlcmVuY2VzLlxuICpcbiAqICogSWRlbnRpZmllcyBjaXJjdWxhciBpbmhlcml0YW5jZSByZWZlcmVuY2VzXG4gKiAqIElkZW50aWZpZXMgdW5yZWZlcmVuY2VkIHJlZmVyZW5jZWFibGUgZGVmaW5pdGlvbnNcbiAqICogSWRlbnRpZmllcyB1bnJlc29sdmFibGUgcmVmZXJlbmNlc1xuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXJBcGkgb2JqZWN0XG4gKlxuICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3Mgb2YgdGhlIHZhbGlkYXRpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VzIChhcGkpIHtcbiAgdmFyIGluaGVyaXRhbmNlRGV0YWlscyA9IHt9O1xuICB2YXIgcmVmZXJlbmNlYWJsZSA9IFtdO1xuICB2YXIgcmVmZXJlbmNlcyA9IHt9O1xuICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcblxuICBmdW5jdGlvbiBhZGRBbmNlc3RvciAoZHNjLCBhbmMpIHtcbiAgICBpZiAoIV8uaGFzKGluaGVyaXRhbmNlRGV0YWlscywgZHNjKSkge1xuICAgICAgaW5oZXJpdGFuY2VEZXRhaWxzW2RzY10gPSB7XG4gICAgICAgIGxpbmVhZ2U6IFtdLFxuICAgICAgICBwYXJlbnRzOiBbXG4gICAgICAgICAgYW5jXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaGVyaXRhbmNlRGV0YWlsc1tkc2NdLnBhcmVudHMucHVzaChhbmMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFJlZmVyZW5jZSAocmVmLCBwdHIpIHtcbiAgICBpZiAoXy5pbmRleE9mKHJlZmVyZW5jZXMsIHJlZikgPT09IC0xKSB7XG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChyZWZlcmVuY2VzW3JlZl0pKSB7XG4gICAgICAgIHJlZmVyZW5jZXNbcmVmXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgcmVmZXJlbmNlcyB0byBhbmNlc3RvcnNcbiAgICAgIGlmIChyZWYuaW5kZXhPZignYWxsT2YnKSA+IC0xKSB7XG4gICAgICAgIGFkZFJlZmVyZW5jZShyZWYuc3Vic3RyaW5nKDAsIHJlZi5sYXN0SW5kZXhPZignL2FsbE9mJykpKTtcbiAgICAgIH1cblxuICAgICAgcmVmZXJlbmNlc1tyZWZdLnB1c2gocHRyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTZWN1cml0eVByb2Nlc3NvciAocGF0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc2VjdXJpdHksIGluZGV4KSB7XG4gICAgICBfLmZvckVhY2goc2VjdXJpdHksIGZ1bmN0aW9uIChzY29wZXMsIG5hbWUpIHtcbiAgICAgICAgdmFyIHNkUGF0aCA9IFsnc2VjdXJpdHlEZWZpbml0aW9ucycsIG5hbWVdO1xuICAgICAgICB2YXIgc2RQdHIgPSBKc29uUmVmcy5wYXRoVG9QdHIoc2RQYXRoKTtcbiAgICAgICAgdmFyIHNyUGF0aCA9IHBhdGguY29uY2F0KFtpbmRleC50b1N0cmluZygpLCBuYW1lXSk7XG5cbiAgICAgICAgLy8gSWRlbnRpZnkgbWlzc2luZyByZWZlcmVuY2UgdG8gdGhlIHNlY3VyaXR5IGRlZmluaXRpb25cbiAgICAgICAgaWYgKF8uaW5kZXhPZihyZWZlcmVuY2VhYmxlLCBzZFB0cikgPT09IC0xKSB7XG4gICAgICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogJ1VOUkVTT0xWQUJMRV9SRUZFUkVOQ0UnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1NlY3VyaXR5IGRlZmluaXRpb24gY291bGQgbm90IGJlIHJlc29sdmVkOiAnICsgbmFtZSxcbiAgICAgICAgICAgIHBhdGg6IHNyUGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZFJlZmVyZW5jZShzZFB0ciwgSnNvblJlZnMucGF0aFRvUHRyKHNyUGF0aCkpO1xuXG4gICAgICAgICAgXy5mb3JFYWNoKHNjb3BlcywgZnVuY3Rpb24gKHNjb3BlLCBzSW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBzc3JQYXRoID0gc3JQYXRoLmNvbmNhdChzSW5kZXgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB2YXIgc3NyUHRyID0gSnNvblJlZnMucGF0aFRvUHRyKHNkUGF0aC5jb25jYXQoWydzY29wZXMnLCBzY29wZV0pKTtcblxuICAgICAgICAgICAgaWYgKF8uaW5kZXhPZihyZWZlcmVuY2VhYmxlLCBzc3JQdHIpID09PSAtMSkge1xuICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogJ1VOUkVTT0xWQUJMRV9SRUZFUkVOQ0UnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdTZWN1cml0eSBzY29wZSBkZWZpbml0aW9uIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJyArIHNjb3BlLFxuICAgICAgICAgICAgICAgIHBhdGg6IHNzclBhdGhcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRSZWZlcmVuY2UoSnNvblJlZnMucGF0aFRvUHRyKHNkUGF0aC5jb25jYXQoWydzY29wZXMnLCBzY29wZV0pKSwgc3NyUHRyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhbGtMaW5lYWdlIChyb290LCBpZCwgbGluZWFnZSkge1xuICAgIHZhciBkZXRhaWxzID0gaW5oZXJpdGFuY2VEZXRhaWxzW2lkIHx8IHJvb3RdO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIF8uZWFjaChkZXRhaWxzLnBhcmVudHMsIGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgbGluZWFnZS5wdXNoKHBhcmVudCk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IHBhcmVudCkge1xuICAgICAgICAgIHdhbGtMaW5lYWdlKHJvb3QsIHBhcmVudCwgbGluZWFnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIElkZW50aWZ5IHJlZmVyZW5jZWFibGUgZGVmaW5pdGlvbnNcbiAgXy5mb3JFYWNoKGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQuZGVmaW5pdGlvbnMsIGZ1bmN0aW9uIChkZWYsIG5hbWUpIHtcbiAgICByZWZlcmVuY2VhYmxlLnB1c2goSnNvblJlZnMucGF0aFRvUHRyKFsnZGVmaW5pdGlvbnMnLCBuYW1lXSkpO1xuICB9KTtcblxuICBfLmZvckVhY2goYXBpLmRlZmluaXRpb25BbGxSZXNvbHZlZC5wYXJhbWV0ZXJzLCBmdW5jdGlvbiAoZGVmLCBuYW1lKSB7XG4gICAgcmVmZXJlbmNlYWJsZS5wdXNoKEpzb25SZWZzLnBhdGhUb1B0cihbJ3BhcmFtZXRlcnMnLCBuYW1lXSkpO1xuICB9KTtcblxuICBfLmZvckVhY2goYXBpLmRlZmluaXRpb25BbGxSZXNvbHZlZC5yZXNwb25zZXMsIGZ1bmN0aW9uIChkZWYsIG5hbWUpIHtcbiAgICByZWZlcmVuY2VhYmxlLnB1c2goSnNvblJlZnMucGF0aFRvUHRyKFsncmVzcG9uc2VzJywgbmFtZV0pKTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQuc2VjdXJpdHlEZWZpbml0aW9ucywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgIHZhciBzUGF0aCA9IFsnc2VjdXJpdHlEZWZpbml0aW9ucycsIG5hbWVdO1xuXG4gICAgcmVmZXJlbmNlYWJsZS5wdXNoKEpzb25SZWZzLnBhdGhUb1B0cihzUGF0aCkpO1xuXG4gICAgXy5mb3JFYWNoKGRlZi5zY29wZXMsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbiwgc2NvcGUpIHtcbiAgICAgIHZhciBwdHIgPSBKc29uUmVmcy5wYXRoVG9QdHIoc1BhdGguY29uY2F0KFsnc2NvcGVzJywgc2NvcGVdKSk7XG5cbiAgICAgIGlmIChfLmluZGV4T2YocmVmZXJlbmNlYWJsZSwgcHRyKSA9PT0gLTEpIHtcbiAgICAgICAgcmVmZXJlbmNlYWJsZS5wdXNoKHB0cik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIElkZW50aWZ5IHJlZmVyZW5jZXMgYW5kIGJ1aWxkIGluaGVyaXRhbmNlIG1vZGVsXG4gIF8uZm9yRWFjaChhcGkucmVmZXJlbmNlcywgZnVuY3Rpb24gKG1ldGFkYXRhLCBwdHIpIHtcbiAgICB2YXIgcHRyUGF0aCA9IEpzb25SZWZzLnBhdGhGcm9tUHRyKHB0cik7XG5cbiAgICBpZiAoIV8uaGFzKG1ldGFkYXRhLCAnbWlzc2luZycpKSB7XG4gICAgICBhZGRSZWZlcmVuY2UobWV0YWRhdGEudXJpLCBwdHIpO1xuXG4gICAgICBpZiAocHRyUGF0aFtwdHJQYXRoLmxlbmd0aCAtIDJdID09PSAnYWxsT2YnKSB7XG4gICAgICAgIGFkZEFuY2VzdG9yKEpzb25SZWZzLnBhdGhUb1B0cihwdHJQYXRoLnNsaWNlKDAsIHB0clBhdGgubGVuZ3RoIC0gMikpLCBtZXRhZGF0YS51cmkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gSWRlbnRpZnkgY2lyY3VsYXIgaW5oZXJpdGFuY2VcbiAgXy5mb3JFYWNoKGluaGVyaXRhbmNlRGV0YWlscywgZnVuY3Rpb24gKGRldGFpbHMsIHB0cikge1xuICAgIHdhbGtMaW5lYWdlKHB0ciwgdW5kZWZpbmVkLCBkZXRhaWxzLmxpbmVhZ2UpO1xuXG4gICAgaWYgKGRldGFpbHMubGluZWFnZS5sZW5ndGggPiAxICYmIGRldGFpbHMubGluZWFnZVtkZXRhaWxzLmxpbmVhZ2UubGVuZ3RoIC0gMV0gPT09IHB0ciB8fFxuICAgICAgICBkZXRhaWxzLnBhcmVudHNbMF0gPT09IHB0cikge1xuICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICBjb2RlOiAnQ0lSQ1VMQVJfSU5IRVJJVEFOQ0UnLFxuICAgICAgICBsaW5lYWdlOiBbcHRyXS5jb25jYXQoZGV0YWlscy5saW5lYWdlKSxcbiAgICAgICAgbWVzc2FnZTogJ1NjaGVtYSBvYmplY3QgaW5oZXJpdHMgZnJvbSBpdHNlbGY6ICcgKyBwdHIsXG4gICAgICAgIHBhdGg6IEpzb25SZWZzLnBhdGhGcm9tUHRyKHB0cilcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gSWRlbnRpZnkgcmVmZXJlbmNlcyBhbmQgdmFsaWRhdGUgbWlzc2luZyByZWZlcmVuY2VzIGZvciBub24tSlNPTiBSZWZlcmVuY2VzIChzZWN1cml0eSlcbiAgXy5mb3JFYWNoKGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQuc2VjdXJpdHksIGNyZWF0ZVNlY3VyaXR5UHJvY2Vzc29yKFsnc2VjdXJpdHknXSkpO1xuXG4gIF8uZm9yRWFjaChhcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLnBhdGhzLCBmdW5jdGlvbiAocGF0aERlZiwgbmFtZSkge1xuICAgIHZhciBwUGF0aCA9IFsncGF0aHMnLCBuYW1lXTtcblxuICAgIF8uZm9yRWFjaChwYXRoRGVmLnNlY3VyaXR5LCBjcmVhdGVTZWN1cml0eVByb2Nlc3NvcihwUGF0aC5jb25jYXQoJ3NlY3VyaXR5JykpKTtcblxuICAgIF8uZm9yRWFjaChwYXRoRGVmLCBmdW5jdGlvbiAob3BlcmF0aW9uRGVmLCBtZXRob2QpIHtcbiAgICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgICBpZiAoXy5pbmRleE9mKGhlbHBlcnMuc3VwcG9ydGVkSHR0cE1ldGhvZHMsIG1ldGhvZCkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgXy5mb3JFYWNoKG9wZXJhdGlvbkRlZi5zZWN1cml0eSxcbiAgICAgICAgICAgICAgICBjcmVhdGVTZWN1cml0eVByb2Nlc3NvcihwUGF0aC5jb25jYXQoW21ldGhvZCwgJ3NlY3VyaXR5J10pKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIElkZW50aWZ5IHVudXNlZCByZWZlcmVuY2VzIChtaXNzaW5nIHJlZmVyZW5jZXMgYXJlIGFscmVhZHkgaGFuZGxlZCBhYm92ZSlcbiAgXy5mb3JFYWNoKF8uZGlmZmVyZW5jZShyZWZlcmVuY2VhYmxlLCBPYmplY3Qua2V5cyhyZWZlcmVuY2VzKSksIGZ1bmN0aW9uIChwdHIpIHtcbiAgICByZXNwb25zZS53YXJuaW5ncy5wdXNoKHtcbiAgICAgIGNvZGU6ICdVTlVTRURfREVGSU5JVElPTicsXG4gICAgICBtZXNzYWdlOiAnRGVmaW5pdGlvbiBpcyBub3QgdXNlZDogJyArIHB0cixcbiAgICAgIHBhdGg6IEpzb25SZWZzLnBhdGhGcm9tUHRyKHB0cilcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbGwgc2NoZW1hIG9iamVjdHMgYW5kIHNjaGVtYS1saWtlIG9iamVjdHMgKG5vbi1ib2R5IHBhdGggcGFyYW1ldGVycykuXG4gKlxuICogKiBWYWxpZGF0ZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyByZWxhdGVkIHRvIGNvbXBvc2l0aW9uL2luaGVyaXRhbmNlXG4gKiAqIFZhbGlkYXRlcyB0aGF0IGFsbCBhcnJheSB0eXBlcyBoYXZlIHRoZWlyIHJlcXVpcmVkIGl0ZW1zIHByb3BlcnR5XG4gKiAgICAgKEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXNwZWMvaXNzdWVzLzE3NH0pXG4gKiAqIFZhbGlkYXRlcyB0aGF0IGFsbCBkZWZhdWx0IHZhbHVlcyBhcmUgdmFsaWQgYmFzZWQgb24gaXRzIHJlc3BlY3RpdmUgc2NoZW1hXG4gKlxuICogQHBhcmFtIHtTd2FnZ2VyQXBpfSBhcGkgLSBUaGUgU3dhZ2dlckFwaSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBvZiB0aGUgdmFsaWRhdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYU9iamVjdHMgKGFwaSkge1xuICAvLyBCdWlsZCBhIGJsYWNrbGlzdCB0byBhdm9pZCBjYXNjYWRpbmcgZXJyb3JzL3dhcm5pbmdzXG4gIHZhciBibGFja2xpc3QgPSBfLnJlZHVjZShhcGkucmVmZXJlbmNlcywgZnVuY3Rpb24gKGxpc3QsIG1ldGFkYXRhLCBwdHIpIHtcbiAgICB2YXIgcmVmUGF0aCA9IEpzb25SZWZzLnBhdGhGcm9tUHRyKHB0cik7XG5cbiAgICBsaXN0LnB1c2goSnNvblJlZnMucGF0aFRvUHRyKHJlZlBhdGgpKTtcblxuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG4gIHZhciByZXNwb25zZSA9IHtcbiAgICBlcnJvcnM6IFtdLFxuICAgIHdhcm5pbmdzOiBbXVxuICB9O1xuICB2YXIgdmFsaWRhdG9ycyA9IFtcbiAgICB2YWxpZGF0ZUFycmF5VHlwZUl0ZW1zRXhpc3RlbmNlLFxuICAgIHZhbGlkYXRlRGVmYXVsdFZhbHVlLFxuICAgIHZhbGlkYXRlU2NoZW1hUHJvcGVydGllc1xuICBdO1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUGFyYW1ldGVycyAocGFyYW1ldGVycywgcGF0aCkge1xuICAgIF8uZm9yRWFjaChwYXJhbWV0ZXJzLCBmdW5jdGlvbiAocGFyYW1ldGVyRGVmLCBuYW1lKSB7XG4gICAgICB2YXIgcFBhdGg7XG5cbiAgICAgIGlmIChfLmlzTnVtYmVyKG5hbWUpKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHBQYXRoID0gcGF0aC5jb25jYXQobmFtZSk7XG5cbiAgICAgIC8vIENyZWF0ZSBKU09OIFNjaGVtYSBmb3Igbm9uLWJvZHkgcGFyYW1ldGVyc1xuICAgICAgaWYgKHBhcmFtZXRlckRlZi5pbiAhPT0gJ2JvZHknKSB7XG4gICAgICAgIHBhcmFtZXRlckRlZiA9IGhlbHBlcnMuY29tcHV0ZVBhcmFtZXRlclNjaGVtYShwYXJhbWV0ZXJEZWYpO1xuICAgICAgfVxuXG4gICAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCBwYXJhbWV0ZXJEZWYsIHBQYXRoLCB2YWxpZGF0b3JzLCByZXNwb25zZSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZVJlc3BvbnNlcyAocmVzcG9uc2VzLCBwYXRoKSB7XG4gICAgXy5mb3JFYWNoKHJlc3BvbnNlcywgZnVuY3Rpb24gKHJlc3BvbnNlRGVmLCBuYW1lKSB7XG4gICAgICB2YXIgclBhdGggPSBwYXRoLmNvbmNhdChuYW1lKTtcblxuICAgICAgXy5mb3JFYWNoKHJlc3BvbnNlRGVmLmhlYWRlcnMsIGZ1bmN0aW9uIChoZWFkZXIsIGhOYW1lKSB7XG4gICAgICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIGhlYWRlciwgclBhdGguY29uY2F0KFsnaGVhZGVycycsIGhOYW1lXSksIHZhbGlkYXRvcnMsIHJlc3BvbnNlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQocmVzcG9uc2VEZWYuc2NoZW1hKSkge1xuICAgICAgICB3YWxrU2NoZW1hKGFwaSwgYmxhY2tsaXN0LCByZXNwb25zZURlZi5zY2hlbWEsIHJQYXRoLmNvbmNhdCgnc2NoZW1hJyksIHZhbGlkYXRvcnMsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGRlZmluaXRpb25zXG4gIF8uZm9yRWFjaChhcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLmRlZmluaXRpb25zLCBmdW5jdGlvbiAoZGVmaW5pdGlvbkRlZiwgbmFtZSkge1xuICAgIHdhbGtTY2hlbWEoYXBpLCBibGFja2xpc3QsIGRlZmluaXRpb25EZWYsIFsnZGVmaW5pdGlvbnMnLCBuYW1lXSwgdmFsaWRhdG9ycywgcmVzcG9uc2UpO1xuICB9KTtcblxuICAvLyBWYWxpZGF0ZSBnbG9iYWwgcGFyYW1ldGVyIGRlZmluaXRpb25zXG4gIHZhbGlkYXRlUGFyYW1ldGVycyhhcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLnBhcmFtZXRlcnMsIFsncGFyYW1ldGVycyddKTtcblxuICAvLyBWYWxpZGF0ZSBnbG9iYWwgcmVzcG9uc2UgZGVmaW5pdGlvbnNcbiAgdmFsaWRhdGVSZXNwb25zZXMoYXBpLmRlZmluaXRpb25BbGxSZXNvbHZlZC5yZXNwb25zZXMsIFsncmVzcG9uc2VzJ10pO1xuXG4gIC8vIFZhbGlkYXRlIHBhdGhzIGFuZCBvcGVyYXRpb25zXG4gIF8uZm9yRWFjaChhcGkuZGVmaW5pdGlvbkFsbFJlc29sdmVkLnBhdGhzLCBmdW5jdGlvbiAocGF0aERlZiwgcGF0aCkge1xuICAgIHZhciBwUGF0aCA9IFsncGF0aHMnLCBwYXRoXTtcblxuICAgIC8vIFZhbGlkYXRlIHBhdGgtbGV2ZWwgcGFyYW1ldGVyIGRlZmluaXRpb25zXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXJzKHBhdGhEZWYucGFyYW1ldGVycywgcFBhdGguY29uY2F0KCdwYXJhbWV0ZXJzJykpO1xuXG4gICAgXy5mb3JFYWNoKHBhdGhEZWYsIGZ1bmN0aW9uIChvcGVyYXRpb25EZWYsIG1ldGhvZCkge1xuICAgICAgdmFyIG9QYXRoID0gcFBhdGguY29uY2F0KG1ldGhvZCk7XG5cbiAgICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgICBpZiAoXy5pbmRleE9mKGhlbHBlcnMuc3VwcG9ydGVkSHR0cE1ldGhvZHMsIG1ldGhvZCkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgb3BlcmF0aW9uIHBhcmFtZXRlciBkZWZpbml0aW9uc1xuICAgICAgdmFsaWRhdGVQYXJhbWV0ZXJzKG9wZXJhdGlvbkRlZi5wYXJhbWV0ZXJzLCBvUGF0aC5jb25jYXQoJ3BhcmFtZXRlcnMnKSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIG9wZXJhdGlvbiByZXNwb25zZSBkZWZpbml0aW9uc1xuICAgICAgdmFsaWRhdGVSZXNwb25zZXMob3BlcmF0aW9uRGVmLnJlc3BvbnNlcywgb1BhdGguY29uY2F0KCdyZXNwb25zZXMnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgcGF0aHMgYW5kIG9wZXJhdGlvbnMgKFdyaXR0ZW4gYXMgb25lIHZhbGlkYXRvciB0byBhdm9pZCBtdWx0aXBsZSBwYXNzZXMpXG4gKlxuICogKiBFbnN1cmUgdGhhdCBwYXRoIHBhcmFtZXRlcnMgYXJlIGRlZmluZWQgZm9yIGVhY2ggcGF0aCBwYXJhbWV0ZXIgZGVjbGFyYXRpb25cbiAqICogRW5zdXJlIHRoYXQgZGVmaW5lZCBwYXRoIHBhcmFtZXRlcnMgbWF0Y2ggYSBkZWNsYXJlZCBwYXRoIHBhcmFtZXRlclxuICogKiBFbnN1cmUgdGhhdCBwYXRocyBhcmUgZnVuY3Rpb25hbGx5IGRpZmZlcmVudFxuICogKiBFbnN1cmUgdGhhdCBhbiBvcGVyYXRpb24gb25seSBoYXMgb25lIGJvZHkgcGFyYW1ldGVyXG4gKiAqIEVuc3VyZSB0aGF0IGFuIG9wZXJhdGlvbiBoYXMgb25seSBhIGJvZHkgb3IgZm9ybURhdGEgcGFyYW1ldGVyIGJ1dCBub3QgYm90aFxuICogKiBFbnN1cmUgdGhhdCBhbGwgb3BlcmF0aW9uIHBhcmFtZXRlcnMgYXJlIHVuaXF1ZSAoaW4gKyBuYW1lKVxuICogKiBFbnN1cmUgdGhhdCBhbGwgb3BlcmF0aW9uIGlkcyBhcmUgdW5pcXVlXG4gKiAqIEVuc3VyZSB0aGF0IHBhdGggcGFyYW1ldGVycyBoYXZlIGEgbmFtZVxuICpcbiAqIEBwYXJhbSB7U3dhZ2dlckFwaX0gYXBpIC0gVGhlIFN3YWdnZXJBcGkgb2JqZWN0XG4gKlxuICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3Mgb2YgdGhlIHZhbGlkYXRpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYXRoc0FuZE9wZXJhdGlvbnMgKGFwaSkge1xuICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgZXJyb3JzOiBbXSxcbiAgICB3YXJuaW5nczogW11cbiAgfTtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZUR1cGxpY2F0ZVBhcmFtZXRlciAoc2VlblBhcmFtZXRlcnMsIHBhcmFtZXRlciwgcGF0aCkge1xuICAgIHZhciBwTmFtZSA9IHBhcmFtZXRlci5pbiArICc6JyArIHBhcmFtZXRlci5uYW1lO1xuXG4gICAgLy8gSWRlbnRpZnkgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lc1xuICAgIGlmIChfLmluZGV4T2Yoc2VlblBhcmFtZXRlcnMsIHBOYW1lKSA+IC0xKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdEVVBMSUNBVEVfUEFSQU1FVEVSJyxcbiAgICAgICAgbWVzc2FnZTogJ09wZXJhdGlvbiBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyczogJyArIEpzb25SZWZzLnBhdGhUb1B0cihwYXRoKSxcbiAgICAgICAgcGF0aDogcGF0aFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZW5QYXJhbWV0ZXJzLnB1c2gocE5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWVuUGFyYW1ldGVycztcbiAgfVxuXG4gIF8ucmVkdWNlKGFwaS5kZWZpbml0aW9uQWxsUmVzb2x2ZWQucGF0aHMsIGZ1bmN0aW9uIChtZXRhZGF0YSwgcGF0aERlZiwgcGF0aCkge1xuICAgIHZhciBkZWNsYXJlZFBhdGhQYXJhbWV0ZXJzID0gW107XG4gICAgdmFyIG5vcm1hbGl6ZWRQYXRoID0gcGF0aDtcbiAgICB2YXIgcFBhdGggPSBbJ3BhdGhzJywgcGF0aF07XG5cbiAgICBfLmZvckVhY2gocGF0aC5tYXRjaCgvXFx7KC4qPylcXH0vZyksIGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIHBhdGggcGFyYW1ldGVyIG5hbWVcbiAgICAgIGRlY2xhcmVkUGF0aFBhcmFtZXRlcnMucHVzaChhcmcucmVwbGFjZSgvW3t9XS9nLCAnJykpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIG5vcm1hbGl6ZWQgcGF0aFxuICAgICAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5yZXBsYWNlKGFyZywgJ2FyZycgKyBpbmRleCk7XG4gICAgfSk7XG5cbiAgICAvLyBJZGVudGlmeSBwYXRocyB3aXRoIGVtcHR5IHBhcmFtZXRlciBkZWNsYXJhdGlvbnNcbiAgICBpZiAoZGVjbGFyZWRQYXRoUGFyYW1ldGVycy5pbmRleE9mKCcnKSA+IC0xKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdFTVBUWV9QQVRIX1BBUkFNRVRFUl9ERUNMQVJBVElPTicsXG4gICAgICAgIG1lc3NhZ2U6ICdQYXRoIHBhcmFtZXRlciBkZWNsYXJhdGlvbiBjYW5ub3QgYmUgZW1wdHk6ICcgKyBwYXRoLFxuICAgICAgICBwYXRoOiBbJ3BhdGhzJywgcGF0aF1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElkZW5maXR5IHBhdGhzIHRoYXQgYXJlIGZ1bmN0aW9uYWxseSB0aGUgc2FtZVxuICAgIGlmIChfLmluZGV4T2YobWV0YWRhdGEucGF0aHMsIG5vcm1hbGl6ZWRQYXRoKSA+IC0xKSB7XG4gICAgICByZXNwb25zZS5lcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdFUVVJVkFMRU5UX1BBVEgnLFxuICAgICAgICBtZXNzYWdlOiAnRXF1aXZhbGVudCBwYXRoIGFscmVhZHkgZXhpc3RzOiAnICsgcGF0aCxcbiAgICAgICAgcGF0aDogcFBhdGhcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXRhZGF0YS5wYXRocy5wdXNoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBJZGVudGlmeSBkdXBsaWNhdGUgcGF0aC1sZXZlbCBwYXJhbWV0ZXJzIChXZSBkbyB0aGlzIG1hbnVhbGx5IHNpbmNlIFN3YWdnZXJBcGkjZ2V0T3BlcmF0aW9uIGNvbnNvbGlkYXRlcyB0aGVtKVxuICAgIF8ucmVkdWNlKHBhdGhEZWYucGFyYW1ldGVycywgZnVuY3Rpb24gKHNlZW5QYXJhbWV0ZXJzLCBwYXJhbWV0ZXIsIGluZGV4KSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVEdXBsaWNhdGVQYXJhbWV0ZXIoc2VlblBhcmFtZXRlcnMsIHBhcmFtZXRlciwgcFBhdGguY29uY2F0KFsncGFyYW1ldGVycycsIGluZGV4LnRvU3RyaW5nKCldKSk7XG4gICAgfSwgW10pO1xuXG4gICAgXy5mb3JFYWNoKHBhdGhEZWYsIGZ1bmN0aW9uIChvcGVyYXRpb25EZWYsIG1ldGhvZCkge1xuICAgICAgdmFyIGRlZmluZWRQYXRoUGFyYW1ldGVycyA9IHt9O1xuICAgICAgdmFyIG9QYXRoID0gcFBhdGguY29uY2F0KG1ldGhvZCk7XG4gICAgICB2YXIgb3BlcmF0aW9uSWQgPSBvcGVyYXRpb25EZWYub3BlcmF0aW9uSWQ7XG4gICAgICB2YXIgcGF0aE1ldGFkYXRhO1xuICAgICAgdmFyIHBhcmFtZXRlcnM7XG5cbiAgICAgIC8vIERvIG5vdCBwcm9jZXNzIG5vbi1vcGVyYXRpb25zXG4gICAgICBpZiAoXy5pbmRleE9mKGhlbHBlcnMuc3VwcG9ydGVkSHR0cE1ldGhvZHMsIG1ldGhvZCkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWRlbnRpZnkgZHVwbGljYXRlIG9wZXJhdGlvbklkc1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKG9wZXJhdGlvbklkKSkge1xuICAgICAgICBpZiAoXy5pbmRleE9mKG1ldGFkYXRhLm9wZXJhdGlvbklkcywgb3BlcmF0aW9uSWQpICE9PSAtMSkge1xuICAgICAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6ICdEVVBMSUNBVEVfT1BFUkFUSU9OSUQnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0Nhbm5vdCBoYXZlIG11bHRpcGxlIG9wZXJhdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGVyYXRpb25JZDogJyArIG9wZXJhdGlvbklkLFxuICAgICAgICAgICAgcGF0aDogb1BhdGguY29uY2F0KFsnb3BlcmF0aW9uSWQnXSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXRhZGF0YS5vcGVyYXRpb25JZHMucHVzaChvcGVyYXRpb25JZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWRlbnRpZnkgZHVwbGljYXRlIG9wZXJhdGlvbi1sZXZlbCBwYXJhbWV0ZXJzIChXZSBkbyB0aGlzIG1hbnVhbGx5IGZvciB0aGUgc2FtZSByZWFzb25zIGFib3ZlKVxuICAgICAgXy5yZWR1Y2Uob3BlcmF0aW9uRGVmLnBhcmFtZXRlcnMsIGZ1bmN0aW9uIChzZWVuUGFyYW1ldGVycywgcGFyYW1ldGVyLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVEdXBsaWNhdGVQYXJhbWV0ZXIoc2VlblBhcmFtZXRlcnMsIHBhcmFtZXRlciwgb1BhdGguY29uY2F0KFsncGFyYW1ldGVycycsIGluZGV4LnRvU3RyaW5nKCldKSk7XG4gICAgICB9LCBbXSk7XG5cbiAgICAgIC8vIFVzZSBTd2FnZ2VyQXBpI2dldE9wZXJhdGlvbiB0byBhdm9pZCBoYXZpbmcgdG8gY29uc29saWRhdGUgcGFyYW1ldGVyc1xuICAgICAgcGFyYW1ldGVycyA9IGFwaS5nZXRPcGVyYXRpb24ocGF0aCwgbWV0aG9kKS5nZXRQYXJhbWV0ZXJzKCk7XG5cbiAgICAgIHBhdGhNZXRhZGF0YSA9IF8ucmVkdWNlKHBhcmFtZXRlcnMsIGZ1bmN0aW9uIChwTWV0YWRhdGEsIHBhcmFtZXRlcikge1xuICAgICAgICAvLyBSZWNvcmQgcGF0aCBwYXJhbWV0ZXJzXG4gICAgICAgIGlmIChwYXJhbWV0ZXIuaW4gPT09ICdwYXRoJykge1xuICAgICAgICAgIGRlZmluZWRQYXRoUGFyYW1ldGVyc1twYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXIucHRyO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlci5pbiA9PT0gJ2JvZHknKSB7XG4gICAgICAgICAgcE1ldGFkYXRhLmJvZHlQYXJhbWV0ZXRlcnMgKz0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIuaW4gPT09ICdmb3JtRGF0YScpIHtcbiAgICAgICAgICBwTWV0YWRhdGEuZm9ybVBhcmFtZXRlcnMgKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwTWV0YWRhdGE7XG4gICAgICB9LCB7Ym9keVBhcmFtZXRldGVyczogMCwgZm9ybVBhcmFtZXRlcnM6IDB9KTtcblxuICAgICAgLy8gSWRlbnRpZnkgbXVsdGlwbGUgYm9keSBwYXJhbWV0ZXJzXG4gICAgICBpZiAocGF0aE1ldGFkYXRhLmJvZHlQYXJhbWV0ZXRlcnMgPiAxKSB7XG4gICAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnTVVMVElQTEVfQk9EWV9QQVJBTUVURVJTJyxcbiAgICAgICAgICBtZXNzYWdlOiAnT3BlcmF0aW9uIGNhbm5vdCBoYXZlIG11bHRpcGxlIGJvZHkgcGFyYW1ldGVycycsXG4gICAgICAgICAgcGF0aDogb1BhdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZW50aWZ5IGhhdmluZyBib3RoIGEgYm9keSBhbmQgYSBmb3JtIHBhcmFtZXRlclxuICAgICAgaWYgKHBhdGhNZXRhZGF0YS5ib2R5UGFyYW1ldGV0ZXJzID4gMCAmJiBwYXRoTWV0YWRhdGEuZm9ybVBhcmFtZXRlcnMgPiAwKSB7XG4gICAgICAgIHJlc3BvbnNlLmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9QQVJBTUVURVJfQ09NQklOQVRJT04nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdPcGVyYXRpb24gY2Fubm90IGhhdmUgYSBib2R5IHBhcmFtZXRlciBhbmQgYSBmb3JtRGF0YSBwYXJhbWV0ZXInLFxuICAgICAgICAgIHBhdGg6IG9QYXRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVudGlmeSB1bmRlZmluZWQgcGF0aCBwYXJhbWV0ZXJzXG4gICAgICBfLmZvckVhY2goXy5kaWZmZXJlbmNlKGRlY2xhcmVkUGF0aFBhcmFtZXRlcnMsIF8ua2V5cyhkZWZpbmVkUGF0aFBhcmFtZXRlcnMpKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvZGU6ICdNSVNTSU5HX1BBVEhfUEFSQU1FVEVSX0RFRklOSVRJT04nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdQYXRoIHBhcmFtZXRlciBpcyBkZWNsYXJlZCBidXQgaXMgbm90IGRlZmluZWQ6ICcgKyBuYW1lLFxuICAgICAgICAgIHBhdGg6IG9QYXRoXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElkZW50aWZ5IHVuZGVjbGFyZWQgcGF0aCBwYXJhbWV0ZXJzXG4gICAgICBfLmZvckVhY2goXy5kaWZmZXJlbmNlKF8ua2V5cyhkZWZpbmVkUGF0aFBhcmFtZXRlcnMpLCBkZWNsYXJlZFBhdGhQYXJhbWV0ZXJzKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmVzcG9uc2UuZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvZGU6ICdNSVNTSU5HX1BBVEhfUEFSQU1FVEVSX0RFQ0xBUkFUSU9OJyxcbiAgICAgICAgICBtZXNzYWdlOiAnUGF0aCBwYXJhbWV0ZXIgaXMgZGVmaW5lZCBidXQgaXMgbm90IGRlY2xhcmVkOiAnICsgbmFtZSxcbiAgICAgICAgICBwYXRoOiBKc29uUmVmcy5wYXRoRnJvbVB0cihkZWZpbmVkUGF0aFBhcmFtZXRlcnNbbmFtZV0pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH0sIHtwYXRoczogW10sIG9wZXJhdGlvbklkczogW119KTtcblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBqc29uU2NoZW1hVmFsaWRhdG9yOiB2YWxpZGF0ZVN0cnVjdHVyZSxcbiAgc2VtYW50aWNWYWxpZGF0b3JzOiBbXG4gICAgdmFsaWRhdGVSZWZlcmVuY2VzLFxuICAgIHZhbGlkYXRlU2NoZW1hT2JqZWN0cyxcbiAgICB2YWxpZGF0ZVBhdGhzQW5kT3BlcmF0aW9uc1xuICBdXG59O1xuIiwidmFyIGxvb2t1cCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxuOyhmdW5jdGlvbiAoZXhwb3J0cykge1xuXHQndXNlIHN0cmljdCc7XG5cbiAgdmFyIEFyciA9ICh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgPyBVaW50OEFycmF5XG4gICAgOiBBcnJheVxuXG5cdHZhciBQTFVTICAgPSAnKycuY2hhckNvZGVBdCgwKVxuXHR2YXIgU0xBU0ggID0gJy8nLmNoYXJDb2RlQXQoMClcblx0dmFyIE5VTUJFUiA9ICcwJy5jaGFyQ29kZUF0KDApXG5cdHZhciBMT1dFUiAgPSAnYScuY2hhckNvZGVBdCgwKVxuXHR2YXIgVVBQRVIgID0gJ0EnLmNoYXJDb2RlQXQoMClcblx0dmFyIFBMVVNfVVJMX1NBRkUgPSAnLScuY2hhckNvZGVBdCgwKVxuXHR2YXIgU0xBU0hfVVJMX1NBRkUgPSAnXycuY2hhckNvZGVBdCgwKVxuXG5cdGZ1bmN0aW9uIGRlY29kZSAoZWx0KSB7XG5cdFx0dmFyIGNvZGUgPSBlbHQuY2hhckNvZGVBdCgwKVxuXHRcdGlmIChjb2RlID09PSBQTFVTIHx8XG5cdFx0ICAgIGNvZGUgPT09IFBMVVNfVVJMX1NBRkUpXG5cdFx0XHRyZXR1cm4gNjIgLy8gJysnXG5cdFx0aWYgKGNvZGUgPT09IFNMQVNIIHx8XG5cdFx0ICAgIGNvZGUgPT09IFNMQVNIX1VSTF9TQUZFKVxuXHRcdFx0cmV0dXJuIDYzIC8vICcvJ1xuXHRcdGlmIChjb2RlIDwgTlVNQkVSKVxuXHRcdFx0cmV0dXJuIC0xIC8vbm8gbWF0Y2hcblx0XHRpZiAoY29kZSA8IE5VTUJFUiArIDEwKVxuXHRcdFx0cmV0dXJuIGNvZGUgLSBOVU1CRVIgKyAyNiArIDI2XG5cdFx0aWYgKGNvZGUgPCBVUFBFUiArIDI2KVxuXHRcdFx0cmV0dXJuIGNvZGUgLSBVUFBFUlxuXHRcdGlmIChjb2RlIDwgTE9XRVIgKyAyNilcblx0XHRcdHJldHVybiBjb2RlIC0gTE9XRVIgKyAyNlxuXHR9XG5cblx0ZnVuY3Rpb24gYjY0VG9CeXRlQXJyYXkgKGI2NCkge1xuXHRcdHZhciBpLCBqLCBsLCB0bXAsIHBsYWNlSG9sZGVycywgYXJyXG5cblx0XHRpZiAoYjY0Lmxlbmd0aCAlIDQgPiAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuXHRcdH1cblxuXHRcdC8vIHRoZSBudW1iZXIgb2YgZXF1YWwgc2lnbnMgKHBsYWNlIGhvbGRlcnMpXG5cdFx0Ly8gaWYgdGhlcmUgYXJlIHR3byBwbGFjZWhvbGRlcnMsIHRoYW4gdGhlIHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBpdFxuXHRcdC8vIHJlcHJlc2VudCBvbmUgYnl0ZVxuXHRcdC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSB0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSBpdCByZXByZXNlbnQgMiBieXRlc1xuXHRcdC8vIHRoaXMgaXMganVzdCBhIGNoZWFwIGhhY2sgdG8gbm90IGRvIGluZGV4T2YgdHdpY2Vcblx0XHR2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXHRcdHBsYWNlSG9sZGVycyA9ICc9JyA9PT0gYjY0LmNoYXJBdChsZW4gLSAyKSA/IDIgOiAnPScgPT09IGI2NC5jaGFyQXQobGVuIC0gMSkgPyAxIDogMFxuXG5cdFx0Ly8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5cdFx0YXJyID0gbmV3IEFycihiNjQubGVuZ3RoICogMyAvIDQgLSBwbGFjZUhvbGRlcnMpXG5cblx0XHQvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG5cdFx0bCA9IHBsYWNlSG9sZGVycyA+IDAgPyBiNjQubGVuZ3RoIC0gNCA6IGI2NC5sZW5ndGhcblxuXHRcdHZhciBMID0gMFxuXG5cdFx0ZnVuY3Rpb24gcHVzaCAodikge1xuXHRcdFx0YXJyW0wrK10gPSB2XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgPCBsOyBpICs9IDQsIGogKz0gMykge1xuXHRcdFx0dG1wID0gKGRlY29kZShiNjQuY2hhckF0KGkpKSA8PCAxOCkgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDEpKSA8PCAxMikgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDIpKSA8PCA2KSB8IGRlY29kZShiNjQuY2hhckF0KGkgKyAzKSlcblx0XHRcdHB1c2goKHRtcCAmIDB4RkYwMDAwKSA+PiAxNilcblx0XHRcdHB1c2goKHRtcCAmIDB4RkYwMCkgPj4gOClcblx0XHRcdHB1c2godG1wICYgMHhGRilcblx0XHR9XG5cblx0XHRpZiAocGxhY2VIb2xkZXJzID09PSAyKSB7XG5cdFx0XHR0bXAgPSAoZGVjb2RlKGI2NC5jaGFyQXQoaSkpIDw8IDIpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPj4gNClcblx0XHRcdHB1c2godG1wICYgMHhGRilcblx0XHR9IGVsc2UgaWYgKHBsYWNlSG9sZGVycyA9PT0gMSkge1xuXHRcdFx0dG1wID0gKGRlY29kZShiNjQuY2hhckF0KGkpKSA8PCAxMCkgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDEpKSA8PCA0KSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMikpID4+IDIpXG5cdFx0XHRwdXNoKCh0bXAgPj4gOCkgJiAweEZGKVxuXHRcdFx0cHVzaCh0bXAgJiAweEZGKVxuXHRcdH1cblxuXHRcdHJldHVybiBhcnJcblx0fVxuXG5cdGZ1bmN0aW9uIHVpbnQ4VG9CYXNlNjQgKHVpbnQ4KSB7XG5cdFx0dmFyIGksXG5cdFx0XHRleHRyYUJ5dGVzID0gdWludDgubGVuZ3RoICUgMywgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcblx0XHRcdG91dHB1dCA9IFwiXCIsXG5cdFx0XHR0ZW1wLCBsZW5ndGhcblxuXHRcdGZ1bmN0aW9uIGVuY29kZSAobnVtKSB7XG5cdFx0XHRyZXR1cm4gbG9va3VwLmNoYXJBdChudW0pXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcblx0XHRcdHJldHVybiBlbmNvZGUobnVtID4+IDE4ICYgMHgzRikgKyBlbmNvZGUobnVtID4+IDEyICYgMHgzRikgKyBlbmNvZGUobnVtID4+IDYgJiAweDNGKSArIGVuY29kZShudW0gJiAweDNGKVxuXHRcdH1cblxuXHRcdC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcblx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSB1aW50OC5sZW5ndGggLSBleHRyYUJ5dGVzOyBpIDwgbGVuZ3RoOyBpICs9IDMpIHtcblx0XHRcdHRlbXAgPSAodWludDhbaV0gPDwgMTYpICsgKHVpbnQ4W2kgKyAxXSA8PCA4KSArICh1aW50OFtpICsgMl0pXG5cdFx0XHRvdXRwdXQgKz0gdHJpcGxldFRvQmFzZTY0KHRlbXApXG5cdFx0fVxuXG5cdFx0Ly8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuXHRcdHN3aXRjaCAoZXh0cmFCeXRlcykge1xuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHR0ZW1wID0gdWludDhbdWludDgubGVuZ3RoIC0gMV1cblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSh0ZW1wID4+IDIpXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUoKHRlbXAgPDwgNCkgJiAweDNGKVxuXHRcdFx0XHRvdXRwdXQgKz0gJz09J1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHR0ZW1wID0gKHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDJdIDw8IDgpICsgKHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDFdKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKHRlbXAgPj4gMTApXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUoKHRlbXAgPj4gNCkgJiAweDNGKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wIDw8IDIpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9ICc9J1xuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxuXG5cdGV4cG9ydHMudG9CeXRlQXJyYXkgPSBiNjRUb0J5dGVBcnJheVxuXHRleHBvcnRzLmZyb21CeXRlQXJyYXkgPSB1aW50OFRvQmFzZTY0XG59KHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJyA/ICh0aGlzLmJhc2U2NGpzID0ge30pIDogZXhwb3J0cykpXG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbnZhciByb290UGFyZW50ID0ge31cblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBTYWZhcmkgNS03IGxhY2tzIHN1cHBvcnQgZm9yIGNoYW5naW5nIHRoZSBgT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvcmAgcHJvcGVydHlcbiAqICAgICBvbiBvYmplY3RzLlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgZnVuY3Rpb24gQmFyICgpIHt9XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLmZvbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH1cbiAgICBhcnIuY29uc3RydWN0b3IgPSBCYXJcbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICBhcnIuY29uc3RydWN0b3IgPT09IEJhciAmJiAvLyBjb25zdHJ1Y3RvciBjYW4gYmUgc2V0XG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbi8qKlxuICogQ2xhc3M6IEJ1ZmZlclxuICogPT09PT09PT09PT09PVxuICpcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgYXJlIGF1Z21lbnRlZFxuICogd2l0aCBmdW5jdGlvbiBwcm9wZXJ0aWVzIGZvciBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgQVBJIGZ1bmN0aW9ucy4gV2UgdXNlXG4gKiBgVWludDhBcnJheWAgc28gdGhhdCBzcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdCByZXR1cm5zXG4gKiBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBCeSBhdWdtZW50aW5nIHRoZSBpbnN0YW5jZXMsIHdlIGNhbiBhdm9pZCBtb2RpZnlpbmcgdGhlIGBVaW50OEFycmF5YFxuICogcHJvdG90eXBlLlxuICovXG5mdW5jdGlvbiBCdWZmZXIgKGFyZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIC8vIEF2b2lkIGdvaW5nIHRocm91Z2ggYW4gQXJndW1lbnRzQWRhcHRvclRyYW1wb2xpbmUgaW4gdGhlIGNvbW1vbiBjYXNlLlxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBhcmd1bWVudHNbMV0pXG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnKVxuICB9XG5cbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXMubGVuZ3RoID0gMFxuICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZyb21OdW1iZXIodGhpcywgYXJnKVxuICB9XG5cbiAgLy8gU2xpZ2h0bHkgbGVzcyBjb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhpcywgYXJnLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6ICd1dGY4JylcbiAgfVxuXG4gIC8vIFVudXN1YWwuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoaXMsIGFyZylcbn1cblxuZnVuY3Rpb24gZnJvbU51bWJlciAodGhhdCwgbGVuZ3RoKSB7XG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGggPCAwID8gMCA6IGNoZWNrZWQobGVuZ3RoKSB8IDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nICh0aGF0LCBzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykgZW5jb2RpbmcgPSAndXRmOCdcblxuICAvLyBBc3N1bXB0aW9uOiBieXRlTGVuZ3RoKCkgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyA8IGtNYXhMZW5ndGguXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoKVxuXG4gIHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqZWN0KSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqZWN0KSkgcmV0dXJuIGZyb21CdWZmZXIodGhhdCwgb2JqZWN0KVxuXG4gIGlmIChpc0FycmF5KG9iamVjdCkpIHJldHVybiBmcm9tQXJyYXkodGhhdCwgb2JqZWN0KVxuXG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3Qgc3RhcnQgd2l0aCBudW1iZXIsIGJ1ZmZlciwgYXJyYXkgb3Igc3RyaW5nJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKG9iamVjdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIGZyb21UeXBlZEFycmF5KHRoYXQsIG9iamVjdClcbiAgICB9XG4gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIG9iamVjdClcbiAgICB9XG4gIH1cblxuICBpZiAob2JqZWN0Lmxlbmd0aCkgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqZWN0KVxuXG4gIHJldHVybiBmcm9tSnNvbk9iamVjdCh0aGF0LCBvYmplY3QpXG59XG5cbmZ1bmN0aW9uIGZyb21CdWZmZXIgKHRoYXQsIGJ1ZmZlcikge1xuICB2YXIgbGVuZ3RoID0gY2hlY2tlZChidWZmZXIubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcbiAgYnVmZmVyLmNvcHkodGhhdCwgMCwgMCwgbGVuZ3RoKVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXkgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vLyBEdXBsaWNhdGUgb2YgZnJvbUFycmF5KCkgdG8ga2VlcCBmcm9tQXJyYXkoKSBtb25vbW9ycGhpYy5cbmZ1bmN0aW9uIGZyb21UeXBlZEFycmF5ICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoKVxuICAvLyBUcnVuY2F0aW5nIHRoZSBlbGVtZW50cyBpcyBwcm9iYWJseSBub3Qgd2hhdCBwZW9wbGUgZXhwZWN0IGZyb20gdHlwZWRcbiAgLy8gYXJyYXlzIHdpdGggQllURVNfUEVSX0VMRU1FTlQgPiAxIGJ1dCBpdCdzIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3JcbiAgLy8gb2YgdGhlIG9sZCBCdWZmZXIgY29uc3RydWN0b3IuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5KSB7XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIGFycmF5LmJ5dGVMZW5ndGhcbiAgICB0aGF0ID0gQnVmZmVyLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGFycmF5KSlcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21UeXBlZEFycmF5KHRoYXQsIG5ldyBVaW50OEFycmF5KGFycmF5KSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLy8gRGVzZXJpYWxpemUgeyB0eXBlOiAnQnVmZmVyJywgZGF0YTogWzEsMiwzLC4uLl0gfSBpbnRvIGEgQnVmZmVyIG9iamVjdC5cbi8vIFJldHVybnMgYSB6ZXJvLWxlbmd0aCBidWZmZXIgZm9yIGlucHV0cyB0aGF0IGRvbid0IGNvbmZvcm0gdG8gdGhlIHNwZWMuXG5mdW5jdGlvbiBmcm9tSnNvbk9iamVjdCAodGhhdCwgb2JqZWN0KSB7XG4gIHZhciBhcnJheVxuICB2YXIgbGVuZ3RoID0gMFxuXG4gIGlmIChvYmplY3QudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShvYmplY3QuZGF0YSkpIHtcbiAgICBhcnJheSA9IG9iamVjdC5kYXRhXG4gICAgbGVuZ3RoID0gY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB9XG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG59IGVsc2Uge1xuICAvLyBwcmUtc2V0IGZvciB2YWx1ZXMgdGhhdCBtYXkgZXhpc3QgaW4gdGhlIGZ1dHVyZVxuICBCdWZmZXIucHJvdG90eXBlLmxlbmd0aCA9IHVuZGVmaW5lZFxuICBCdWZmZXIucHJvdG90eXBlLnBhcmVudCA9IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBhbGxvY2F0ZSAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBCdWZmZXIuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgICB0aGF0Ll9pc0J1ZmZlciA9IHRydWVcbiAgfVxuXG4gIHZhciBmcm9tUG9vbCA9IGxlbmd0aCAhPT0gMCAmJiBsZW5ndGggPD0gQnVmZmVyLnBvb2xTaXplID4+PiAxXG4gIGlmIChmcm9tUG9vbCkgdGhhdC5wYXJlbnQgPSByb290UGFyZW50XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChzdWJqZWN0LCBlbmNvZGluZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU2xvd0J1ZmZlcikpIHJldHVybiBuZXcgU2xvd0J1ZmZlcihzdWJqZWN0LCBlbmNvZGluZylcblxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzdWJqZWN0LCBlbmNvZGluZylcbiAgZGVsZXRlIGJ1Zi5wYXJlbnRcbiAgcmV0dXJuIGJ1ZlxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgdmFyIGkgPSAwXG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSBicmVha1xuXG4gICAgKytpXG4gIH1cblxuICBpZiAoaSAhPT0gbGVuKSB7XG4gICAgeCA9IGFbaV1cbiAgICB5ID0gYltpXVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICdyYXcnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdsaXN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycy4nKVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV1cbiAgICBpdGVtLmNvcHkoYnVmLCBwb3MpXG4gICAgcG9zICs9IGl0ZW0ubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykgc3RyaW5nID0gJycgKyBzdHJpbmdcblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgIC8vIERlcHJlY2F0ZWRcbiAgICAgIGNhc2UgJ3Jhdyc6XG4gICAgICBjYXNlICdyYXdzJzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICBzdGFydCA9IHN0YXJ0IHwgMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPT09IEluZmluaXR5ID8gdGhpcy5sZW5ndGggOiBlbmQgfCAwXG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcbiAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKGVuZCA8PSBzdGFydCkgcmV0dXJuICcnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYmluYXJ5U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiAwXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICBieXRlT2Zmc2V0ID4+PSAwXG5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gdGhpcy5sZW5ndGgpIHJldHVybiAtMVxuXG4gIC8vIE5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gTWF0aC5tYXgodGhpcy5sZW5ndGggKyBieXRlT2Zmc2V0LCAwKVxuXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSByZXR1cm4gLTEgLy8gc3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcgYWx3YXlzIGZhaWxzXG4gICAgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsIHZhbCwgYnl0ZU9mZnNldClcbiAgfVxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldClcbiAgfVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YodGhpcywgWyB2YWwgXSwgYnl0ZU9mZnNldClcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yICh2YXIgaSA9IDA7IGJ5dGVPZmZzZXQgKyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJyW2J5dGVPZmZzZXQgKyBpXSA9PT0gdmFsW2ZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4XSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbC5sZW5ndGgpIHJldHVybiBieXRlT2Zmc2V0ICsgZm91bmRJbmRleFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuLy8gYGdldGAgaXMgZGVwcmVjYXRlZFxuQnVmZmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKG9mZnNldCkge1xuICBjb25zb2xlLmxvZygnLmdldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuJylcbiAgcmV0dXJuIHRoaXMucmVhZFVJbnQ4KG9mZnNldClcbn1cblxuLy8gYHNldGAgaXMgZGVwcmVjYXRlZFxuQnVmZmVyLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQgKHYsIG9mZnNldCkge1xuICBjb25zb2xlLmxvZygnLnNldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuJylcbiAgcmV0dXJuIHRoaXMud3JpdGVVSW50OCh2LCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmluYXJ5V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggfCAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgLy8gbGVnYWN5IHdyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKSAtIHJlbW92ZSBpbiB2MC4xM1xuICB9IGVsc2Uge1xuICAgIHZhciBzd2FwID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIG9mZnNldCA9IGxlbmd0aCB8IDBcbiAgICBsZW5ndGggPSBzd2FwXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGJpbmFyeVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gYmluYXJ5U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IEJ1ZmZlci5fYXVnbWVudCh0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpKVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47IGkrKykge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgaWYgKG5ld0J1Zi5sZW5ndGgpIG5ld0J1Zi5wYXJlbnQgPSB0aGlzLnBhcmVudCB8fCB0aGlzXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdidWZmZXIgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZhbHVlIGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpLCAwKVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpLCAwKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7IGkrKykge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyBpKyspIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gdmFsdWUgPCAwID8gMSA6IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSB2YWx1ZSA8IDAgPyAxIDogMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCd2YWx1ZSBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0Ll9zZXQodGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLCB0YXJnZXRTdGFydClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gZmlsbCh2YWx1ZSwgc3RhcnQ9MCwgZW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWx1ZSwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXZhbHVlKSB2YWx1ZSA9IDBcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kKSBlbmQgPSB0aGlzLmxlbmd0aFxuXG4gIGlmIChlbmQgPCBzdGFydCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2VuZCA8IHN0YXJ0JylcblxuICAvLyBGaWxsIDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVyblxuICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDAgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdlbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB0aGlzW2ldID0gdmFsdWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gdXRmOFRvQnl0ZXModmFsdWUudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdGhpc1tpXSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGBBcnJheUJ1ZmZlcmAgd2l0aCB0aGUgKmNvcGllZCogbWVtb3J5IG9mIHRoZSBidWZmZXIgaW5zdGFuY2UuXG4gKiBBZGRlZCBpbiBOb2RlIDAuMTIuIE9ubHkgYXZhaWxhYmxlIGluIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBBcnJheUJ1ZmZlci5cbiAqL1xuQnVmZmVyLnByb3RvdHlwZS50b0FycmF5QnVmZmVyID0gZnVuY3Rpb24gdG9BcnJheUJ1ZmZlciAoKSB7XG4gIGlmICh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAgIHJldHVybiAobmV3IEJ1ZmZlcih0aGlzKSkuYnVmZmVyXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aClcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBidWYubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgYnVmW2ldID0gdGhpc1tpXVxuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1Zi5idWZmZXJcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVmZmVyLnRvQXJyYXlCdWZmZXIgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInKVxuICB9XG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIEJQID0gQnVmZmVyLnByb3RvdHlwZVxuXG4vKipcbiAqIEF1Z21lbnQgYSBVaW50OEFycmF5ICppbnN0YW5jZSogKG5vdCB0aGUgVWludDhBcnJheSBjbGFzcyEpIHdpdGggQnVmZmVyIG1ldGhvZHNcbiAqL1xuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gX2F1Z21lbnQgKGFycikge1xuICBhcnIuY29uc3RydWN0b3IgPSBCdWZmZXJcbiAgYXJyLl9pc0J1ZmZlciA9IHRydWVcblxuICAvLyBzYXZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBVaW50OEFycmF5IHNldCBtZXRob2QgYmVmb3JlIG92ZXJ3cml0aW5nXG4gIGFyci5fc2V0ID0gYXJyLnNldFxuXG4gIC8vIGRlcHJlY2F0ZWRcbiAgYXJyLmdldCA9IEJQLmdldFxuICBhcnIuc2V0ID0gQlAuc2V0XG5cbiAgYXJyLndyaXRlID0gQlAud3JpdGVcbiAgYXJyLnRvU3RyaW5nID0gQlAudG9TdHJpbmdcbiAgYXJyLnRvTG9jYWxlU3RyaW5nID0gQlAudG9TdHJpbmdcbiAgYXJyLnRvSlNPTiA9IEJQLnRvSlNPTlxuICBhcnIuZXF1YWxzID0gQlAuZXF1YWxzXG4gIGFyci5jb21wYXJlID0gQlAuY29tcGFyZVxuICBhcnIuaW5kZXhPZiA9IEJQLmluZGV4T2ZcbiAgYXJyLmNvcHkgPSBCUC5jb3B5XG4gIGFyci5zbGljZSA9IEJQLnNsaWNlXG4gIGFyci5yZWFkVUludExFID0gQlAucmVhZFVJbnRMRVxuICBhcnIucmVhZFVJbnRCRSA9IEJQLnJlYWRVSW50QkVcbiAgYXJyLnJlYWRVSW50OCA9IEJQLnJlYWRVSW50OFxuICBhcnIucmVhZFVJbnQxNkxFID0gQlAucmVhZFVJbnQxNkxFXG4gIGFyci5yZWFkVUludDE2QkUgPSBCUC5yZWFkVUludDE2QkVcbiAgYXJyLnJlYWRVSW50MzJMRSA9IEJQLnJlYWRVSW50MzJMRVxuICBhcnIucmVhZFVJbnQzMkJFID0gQlAucmVhZFVJbnQzMkJFXG4gIGFyci5yZWFkSW50TEUgPSBCUC5yZWFkSW50TEVcbiAgYXJyLnJlYWRJbnRCRSA9IEJQLnJlYWRJbnRCRVxuICBhcnIucmVhZEludDggPSBCUC5yZWFkSW50OFxuICBhcnIucmVhZEludDE2TEUgPSBCUC5yZWFkSW50MTZMRVxuICBhcnIucmVhZEludDE2QkUgPSBCUC5yZWFkSW50MTZCRVxuICBhcnIucmVhZEludDMyTEUgPSBCUC5yZWFkSW50MzJMRVxuICBhcnIucmVhZEludDMyQkUgPSBCUC5yZWFkSW50MzJCRVxuICBhcnIucmVhZEZsb2F0TEUgPSBCUC5yZWFkRmxvYXRMRVxuICBhcnIucmVhZEZsb2F0QkUgPSBCUC5yZWFkRmxvYXRCRVxuICBhcnIucmVhZERvdWJsZUxFID0gQlAucmVhZERvdWJsZUxFXG4gIGFyci5yZWFkRG91YmxlQkUgPSBCUC5yZWFkRG91YmxlQkVcbiAgYXJyLndyaXRlVUludDggPSBCUC53cml0ZVVJbnQ4XG4gIGFyci53cml0ZVVJbnRMRSA9IEJQLndyaXRlVUludExFXG4gIGFyci53cml0ZVVJbnRCRSA9IEJQLndyaXRlVUludEJFXG4gIGFyci53cml0ZVVJbnQxNkxFID0gQlAud3JpdGVVSW50MTZMRVxuICBhcnIud3JpdGVVSW50MTZCRSA9IEJQLndyaXRlVUludDE2QkVcbiAgYXJyLndyaXRlVUludDMyTEUgPSBCUC53cml0ZVVJbnQzMkxFXG4gIGFyci53cml0ZVVJbnQzMkJFID0gQlAud3JpdGVVSW50MzJCRVxuICBhcnIud3JpdGVJbnRMRSA9IEJQLndyaXRlSW50TEVcbiAgYXJyLndyaXRlSW50QkUgPSBCUC53cml0ZUludEJFXG4gIGFyci53cml0ZUludDggPSBCUC53cml0ZUludDhcbiAgYXJyLndyaXRlSW50MTZMRSA9IEJQLndyaXRlSW50MTZMRVxuICBhcnIud3JpdGVJbnQxNkJFID0gQlAud3JpdGVJbnQxNkJFXG4gIGFyci53cml0ZUludDMyTEUgPSBCUC53cml0ZUludDMyTEVcbiAgYXJyLndyaXRlSW50MzJCRSA9IEJQLndyaXRlSW50MzJCRVxuICBhcnIud3JpdGVGbG9hdExFID0gQlAud3JpdGVGbG9hdExFXG4gIGFyci53cml0ZUZsb2F0QkUgPSBCUC53cml0ZUZsb2F0QkVcbiAgYXJyLndyaXRlRG91YmxlTEUgPSBCUC53cml0ZURvdWJsZUxFXG4gIGFyci53cml0ZURvdWJsZUJFID0gQlAud3JpdGVEb3VibGVCRVxuICBhcnIuZmlsbCA9IEJQLmZpbGxcbiAgYXJyLmluc3BlY3QgPSBCUC5pbnNwZWN0XG4gIGFyci50b0FycmF5QnVmZmVyID0gQlAudG9BcnJheUJ1ZmZlclxuXG4gIHJldHVybiBhcnJcbn1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vICBDaGFuY2UuanMgMC44LjBcbi8vICBodHRwOi8vY2hhbmNlanMuY29tXG4vLyAgKGMpIDIwMTMgVmljdG9yIFF1aW5uXG4vLyAgQ2hhbmNlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgLy8gQ29uc3RhbnRzXG4gICAgdmFyIE1BWF9JTlQgPSA5MDA3MTk5MjU0NzQwOTkyO1xuICAgIHZhciBNSU5fSU5UID0gLU1BWF9JTlQ7XG4gICAgdmFyIE5VTUJFUlMgPSAnMDEyMzQ1Njc4OSc7XG4gICAgdmFyIENIQVJTX0xPV0VSID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcbiAgICB2YXIgQ0hBUlNfVVBQRVIgPSBDSEFSU19MT1dFUi50b1VwcGVyQ2FzZSgpO1xuICAgIHZhciBIRVhfUE9PTCAgPSBOVU1CRVJTICsgXCJhYmNkZWZcIjtcblxuICAgIC8vIENhY2hlZCBhcnJheSBoZWxwZXJzXG4gICAgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4gICAgLy8gQ29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBDaGFuY2UgKHNlZWQpIHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENoYW5jZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWVkID09IG51bGwgPyBuZXcgQ2hhbmNlKCkgOiBuZXcgQ2hhbmNlKHNlZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdXNlciBoYXMgcHJvdmlkZWQgYSBmdW5jdGlvbiwgdXNlIHRoYXQgYXMgdGhlIGdlbmVyYXRvclxuICAgICAgICBpZiAodHlwZW9mIHNlZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucmFuZG9tID0gc2VlZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHNldCBhIHN0YXJ0aW5nIHZhbHVlIG9mIHplcm8gc28gd2UgY2FuIGFkZCB0byBpdFxuICAgICAgICAgICAgdGhpcy5zZWVkID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG90aGVyd2lzZSwgbGVhdmUgdGhpcy5zZWVkIGJsYW5rIHNvIHRoYXQgTVQgd2lsbCByZWNlaXZlIGEgYmxhbmtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHNlZWRsaW5nID0gMDtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzW2ldKSA9PT0gJ1tvYmplY3QgU3RyaW5nXScpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYSBudW1lcmljIGhhc2ggZm9yIGVhY2ggYXJndW1lbnQsIGFkZCB0byBzZWVkbGluZ1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXJndW1lbnRzW2ldLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoID0gYXJndW1lbnRzW2ldLmNoYXJDb2RlQXQoaykgKyAoaGFzaCA8PCA2KSArIChoYXNoIDw8IDE2KSAtIGhhc2g7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2VlZGxpbmcgKz0gaGFzaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlZWRsaW5nID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWVkICs9IChhcmd1bWVudHMubGVuZ3RoIC0gaSkgKiBzZWVkbGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG5vIGdlbmVyYXRvciBmdW5jdGlvbiB3YXMgcHJvdmlkZWQsIHVzZSBvdXIgTVRcbiAgICAgICAgdGhpcy5tdCA9IHRoaXMubWVyc2VubmVfdHdpc3Rlcih0aGlzLnNlZWQpO1xuICAgICAgICB0aGlzLmJpbWQ1ID0gdGhpcy5ibHVlaW1wX21kNSgpO1xuICAgICAgICB0aGlzLnJhbmRvbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm10LnJhbmRvbSh0aGlzLnNlZWQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIENoYW5jZS5wcm90b3R5cGUuVkVSU0lPTiA9IFwiMC44LjBcIjtcblxuICAgIC8vIFJhbmRvbSBoZWxwZXIgZnVuY3Rpb25zXG4gICAgZnVuY3Rpb24gaW5pdE9wdGlvbnMob3B0aW9ucywgZGVmYXVsdHMpIHtcbiAgICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcblxuICAgICAgICBpZiAoZGVmYXVsdHMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBkZWZhdWx0c1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0ZXN0UmFuZ2UodGVzdCwgZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIGlmICh0ZXN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5jb2RlIHRoZSBpbnB1dCBzdHJpbmcgd2l0aCBCYXNlNjQuXG4gICAgICovXG4gICAgdmFyIGJhc2U2NCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIEJhc2U2NCBlbmNvZGVyIGF2YWlsYWJsZS4nKTtcbiAgICB9O1xuXG4gICAgLy8gU2VsZWN0IHByb3BlciBCYXNlNjQgZW5jb2Rlci5cbiAgICAoZnVuY3Rpb24gZGV0ZXJtaW5lQmFzZTY0RW5jb2RlcigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBiYXNlNjQgPSBidG9hO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGJhc2U2NCA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXIoaW5wdXQpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgLy8gLS0gQmFzaWNzIC0tXG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJuIGEgcmFuZG9tIGJvb2wsIGVpdGhlciB0cnVlIG9yIGZhbHNlXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXsgbGlrZWxpaG9vZDogNTAgfV0gYWx0ZXIgdGhlIGxpa2VsaWhvb2Qgb2ZcbiAgICAgKiAgICByZWNlaXZpbmcgYSB0cnVlIG9yIGZhbHNlIHZhbHVlIGJhY2suXG4gICAgICogIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGlmIHRoZSBsaWtlbGlob29kIGlzIG91dCBvZiBib3VuZHNcbiAgICAgKiAgQHJldHVybnMge0Jvb2x9IGVpdGhlciB0cnVlIG9yIGZhbHNlXG4gICAgICovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5ib29sID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gbGlrZWxpaG9vZCBvZiBzdWNjZXNzICh0cnVlKVxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2xpa2VsaWhvb2QgOiA1MH0pO1xuXG4gICAgICAgIC8vIE5vdGUsIHdlIGNvdWxkIGdldCBzb21lIG1pbm9yIHBlcmYgb3B0aW1pemF0aW9ucyBieSBjaGVja2luZyByYW5nZVxuICAgICAgICAvLyBwcmlvciB0byBpbml0aWFsaXppbmcgZGVmYXVsdHMsIGJ1dCB0aGF0IG1ha2VzIGNvZGUgYSBiaXQgbWVzc2llclxuICAgICAgICAvLyBhbmQgdGhlIGNoZWNrIG1vcmUgY29tcGxpY2F0ZWQgYXMgd2UgaGF2ZSB0byBjaGVjayBleGlzdGVuY2Ugb2ZcbiAgICAgICAgLy8gdGhlIG9iamVjdCB0aGVuIGV4aXN0ZW5jZSBvZiB0aGUga2V5IGJlZm9yZSBjaGVja2luZyBjb25zdHJhaW50cy5cbiAgICAgICAgLy8gU2luY2UgdGhlIG9wdGlvbnMgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIG1pbm9yIGNvbXB1dGF0aW9uYWxseSxcbiAgICAgICAgLy8gZGVjaXNpb24gbWFkZSBmb3IgY29kZSBjbGVhbmxpbmVzcyBpbnRlbnRpb25hbGx5LiBUaGlzIGlzIG1lbnRpb25lZFxuICAgICAgICAvLyBoZXJlIGFzIGl0J3MgdGhlIGZpcnN0IG9jY3VycmVuY2UsIHdpbGwgbm90IGJlIG1lbnRpb25lZCBhZ2Fpbi5cbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgb3B0aW9ucy5saWtlbGlob29kIDwgMCB8fCBvcHRpb25zLmxpa2VsaWhvb2QgPiAxMDAsXG4gICAgICAgICAgICBcIkNoYW5jZTogTGlrZWxpaG9vZCBhY2NlcHRzIHZhbHVlcyBmcm9tIDAgdG8gMTAwLlwiXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZG9tKCkgKiAxMDAgPCBvcHRpb25zLmxpa2VsaWhvb2Q7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBSZXR1cm4gYSByYW5kb20gY2hhcmFjdGVyLlxuICAgICAqXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gY2FuIHNwZWNpZnkgYSBjaGFyYWN0ZXIgcG9vbCwgb25seSBhbHBoYSxcbiAgICAgKiAgICBvbmx5IHN5bWJvbHMsIGFuZCBjYXNpbmcgKGxvd2VyIG9yIHVwcGVyKVxuICAgICAqICBAcmV0dXJucyB7U3RyaW5nfSBhIHNpbmdsZSByYW5kb20gY2hhcmFjdGVyXG4gICAgICogIEB0aHJvd3Mge1JhbmdlRXJyb3J9IENhbiBvbmx5IHNwZWNpZnkgYWxwaGEgb3Igc3ltYm9scywgbm90IGJvdGhcbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLmNoYXJhY3RlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgb3B0aW9ucy5hbHBoYSAmJiBvcHRpb25zLnN5bWJvbHMsXG4gICAgICAgICAgICBcIkNoYW5jZTogQ2Fubm90IHNwZWNpZnkgYm90aCBhbHBoYSBhbmQgc3ltYm9scy5cIlxuICAgICAgICApO1xuXG4gICAgICAgIHZhciBzeW1ib2xzID0gXCIhQCMkJV4mKigpW11cIixcbiAgICAgICAgICAgIGxldHRlcnMsIHBvb2w7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY2FzaW5nID09PSAnbG93ZXInKSB7XG4gICAgICAgICAgICBsZXR0ZXJzID0gQ0hBUlNfTE9XRVI7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jYXNpbmcgPT09ICd1cHBlcicpIHtcbiAgICAgICAgICAgIGxldHRlcnMgPSBDSEFSU19VUFBFUjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldHRlcnMgPSBDSEFSU19MT1dFUiArIENIQVJTX1VQUEVSO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucG9vbCkge1xuICAgICAgICAgICAgcG9vbCA9IG9wdGlvbnMucG9vbDtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmFscGhhKSB7XG4gICAgICAgICAgICBwb29sID0gbGV0dGVycztcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnN5bWJvbHMpIHtcbiAgICAgICAgICAgIHBvb2wgPSBzeW1ib2xzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9vbCA9IGxldHRlcnMgKyBOVU1CRVJTICsgc3ltYm9scztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb29sLmNoYXJBdCh0aGlzLm5hdHVyYWwoe21heDogKHBvb2wubGVuZ3RoIC0gMSl9KSk7XG4gICAgfTtcblxuICAgIC8vIE5vdGUsIHdhbnRlZCB0byB1c2UgXCJmbG9hdFwiIG9yIFwiZG91YmxlXCIgYnV0IHRob3NlIGFyZSBib3RoIEpTIHJlc2VydmVkIHdvcmRzLlxuXG4gICAgLy8gTm90ZSwgZml4ZWQgbWVhbnMgTiBPUiBMRVNTIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbC4gVGhpcyBiZWNhdXNlXG4gICAgLy8gSXQgY291bGQgYmUgMTQuOTAwMCBidXQgaW4gSmF2YVNjcmlwdCwgd2hlbiB0aGlzIGlzIGNhc3QgYXMgYSBudW1iZXIsXG4gICAgLy8gdGhlIHRyYWlsaW5nIHplcm9lcyBhcmUgZHJvcHBlZC4gTGVmdCB0byB0aGUgY29uc3VtZXIgaWYgdHJhaWxpbmcgemVyb2VzIGFyZVxuICAgIC8vIG5lZWRlZFxuICAgIC8qKlxuICAgICAqICBSZXR1cm4gYSByYW5kb20gZmxvYXRpbmcgcG9pbnQgbnVtYmVyXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBjYW4gc3BlY2lmeSBhIGZpeGVkIHByZWNpc2lvbiwgbWluLCBtYXhcbiAgICAgKiAgQHJldHVybnMge051bWJlcn0gYSBzaW5nbGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyXG4gICAgICogIEB0aHJvd3Mge1JhbmdlRXJyb3J9IENhbiBvbmx5IHNwZWNpZnkgZml4ZWQgb3IgcHJlY2lzaW9uLCBub3QgYm90aC4gQWxzb1xuICAgICAqICAgIG1pbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1heFxuICAgICAqL1xuICAgIENoYW5jZS5wcm90b3R5cGUuZmxvYXRpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2ZpeGVkIDogNH0pO1xuICAgICAgICB0ZXN0UmFuZ2UoXG4gICAgICAgICAgICBvcHRpb25zLmZpeGVkICYmIG9wdGlvbnMucHJlY2lzaW9uLFxuICAgICAgICAgICAgXCJDaGFuY2U6IENhbm5vdCBzcGVjaWZ5IGJvdGggZml4ZWQgYW5kIHByZWNpc2lvbi5cIlxuICAgICAgICApO1xuXG4gICAgICAgIHZhciBudW07XG4gICAgICAgIHZhciBmaXhlZCA9IE1hdGgucG93KDEwLCBvcHRpb25zLmZpeGVkKTtcblxuICAgICAgICB2YXIgbWF4ID0gTUFYX0lOVCAvIGZpeGVkO1xuICAgICAgICB2YXIgbWluID0gLW1heDtcblxuICAgICAgICB0ZXN0UmFuZ2UoXG4gICAgICAgICAgICBvcHRpb25zLm1pbiAmJiBvcHRpb25zLmZpeGVkICYmIG9wdGlvbnMubWluIDwgbWluLFxuICAgICAgICAgICAgXCJDaGFuY2U6IE1pbiBzcGVjaWZpZWQgaXMgb3V0IG9mIHJhbmdlIHdpdGggZml4ZWQuIE1pbiBzaG91bGQgYmUsIGF0IGxlYXN0LCBcIiArIG1pblxuICAgICAgICApO1xuICAgICAgICB0ZXN0UmFuZ2UoXG4gICAgICAgICAgICBvcHRpb25zLm1heCAmJiBvcHRpb25zLmZpeGVkICYmIG9wdGlvbnMubWF4ID4gbWF4LFxuICAgICAgICAgICAgXCJDaGFuY2U6IE1heCBzcGVjaWZpZWQgaXMgb3V0IG9mIHJhbmdlIHdpdGggZml4ZWQuIE1heCBzaG91bGQgYmUsIGF0IG1vc3QsIFwiICsgbWF4XG4gICAgICAgICk7XG5cbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHsgbWluIDogbWluLCBtYXggOiBtYXggfSk7XG5cbiAgICAgICAgLy8gVG9kbyAtIE1ha2UgdGhpcyB3b3JrIVxuICAgICAgICAvLyBvcHRpb25zLnByZWNpc2lvbiA9ICh0eXBlb2Ygb3B0aW9ucy5wcmVjaXNpb24gIT09IFwidW5kZWZpbmVkXCIpID8gb3B0aW9ucy5wcmVjaXNpb24gOiBmYWxzZTtcblxuICAgICAgICBudW0gPSB0aGlzLmludGVnZXIoe21pbjogb3B0aW9ucy5taW4gKiBmaXhlZCwgbWF4OiBvcHRpb25zLm1heCAqIGZpeGVkfSk7XG4gICAgICAgIHZhciBudW1fZml4ZWQgPSAobnVtIC8gZml4ZWQpLnRvRml4ZWQob3B0aW9ucy5maXhlZCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtX2ZpeGVkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyXG4gICAgICpcbiAgICAgKiAgTk9URSB0aGUgbWF4IGFuZCBtaW4gYXJlIElOQ0xVREVEIGluIHRoZSByYW5nZS4gU286XG4gICAgICogIGNoYW5jZS5pbnRlZ2VyKHttaW46IDEsIG1heDogM30pO1xuICAgICAqICB3b3VsZCByZXR1cm4gZWl0aGVyIDEsIDIsIG9yIDMuXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBjYW4gc3BlY2lmeSBhIG1pbiBhbmQvb3IgbWF4XG4gICAgICogIEByZXR1cm5zIHtOdW1iZXJ9IGEgc2luZ2xlIHJhbmRvbSBpbnRlZ2VyIG51bWJlclxuICAgICAqICBAdGhyb3dzIHtSYW5nZUVycm9yfSBtaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhcbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLmludGVnZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAvLyA5MDA3MTk5MjU0NzQwOTkyICgyXjUzKSBpcyB0aGUgbWF4IGludGVnZXIgbnVtYmVyIGluIEphdmFTY3JpcHRcbiAgICAgICAgLy8gU2VlOiBodHRwOi8vdnEuaW8vMTMyc2EyalxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21pbjogTUlOX0lOVCwgbWF4OiBNQVhfSU5UfSk7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA+IG9wdGlvbnMubWF4LCBcIkNoYW5jZTogTWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4LlwiKTtcblxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnJhbmRvbSgpICogKG9wdGlvbnMubWF4IC0gb3B0aW9ucy5taW4gKyAxKSArIG9wdGlvbnMubWluKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIFJldHVybiBhIHJhbmRvbSBuYXR1cmFsXG4gICAgICpcbiAgICAgKiAgTk9URSB0aGUgbWF4IGFuZCBtaW4gYXJlIElOQ0xVREVEIGluIHRoZSByYW5nZS4gU286XG4gICAgICogIGNoYW5jZS5uYXR1cmFsKHttaW46IDEsIG1heDogM30pO1xuICAgICAqICB3b3VsZCByZXR1cm4gZWl0aGVyIDEsIDIsIG9yIDMuXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBjYW4gc3BlY2lmeSBhIG1pbiBhbmQvb3IgbWF4XG4gICAgICogIEByZXR1cm5zIHtOdW1iZXJ9IGEgc2luZ2xlIHJhbmRvbSBpbnRlZ2VyIG51bWJlclxuICAgICAqICBAdGhyb3dzIHtSYW5nZUVycm9yfSBtaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhcbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLm5hdHVyYWwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21pbjogMCwgbWF4OiBNQVhfSU5UfSk7XG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA8IDAsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZWdlcihvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIFJldHVybiBhIHJhbmRvbSBzdHJpbmdcbiAgICAgKlxuICAgICAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIGNhbiBzcGVjaWZ5IGEgbGVuZ3RoXG4gICAgICogIEByZXR1cm5zIHtTdHJpbmd9IGEgc3RyaW5nIG9mIHJhbmRvbSBsZW5ndGhcbiAgICAgKiAgQHRocm93cyB7UmFuZ2VFcnJvcn0gbGVuZ3RoIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyb1xuICAgICAqL1xuICAgIENoYW5jZS5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHsgbGVuZ3RoOiB0aGlzLm5hdHVyYWwoe21pbjogNSwgbWF4OiAyMH0pIH0pO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5sZW5ndGggPCAwLCBcIkNoYW5jZTogTGVuZ3RoIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyby5cIik7XG4gICAgICAgIHZhciBsZW5ndGggPSBvcHRpb25zLmxlbmd0aCxcbiAgICAgICAgICAgIHRleHQgPSB0aGlzLm4odGhpcy5jaGFyYWN0ZXIsIGxlbmd0aCwgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRleHQuam9pbihcIlwiKTtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIEJhc2ljcyAtLVxuXG4gICAgLy8gLS0gSGVscGVycyAtLVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jYXBpdGFsaXplID0gZnVuY3Rpb24gKHdvcmQpIHtcbiAgICAgICAgcmV0dXJuIHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnN1YnN0cigxKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5taXhpbiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgZm9yICh2YXIgZnVuY19uYW1lIGluIG9iaikge1xuICAgICAgICAgICAgQ2hhbmNlLnByb3RvdHlwZVtmdW5jX25hbWVdID0gb2JqW2Z1bmNfbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBHaXZlbiBhIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHNvbWV0aGluZyByYW5kb20gYW5kIGEgbnVtYmVyIG9mIGl0ZW1zIHRvIGdlbmVyYXRlLFxuICAgICAqICAgIHJldHVybiBhbiBhcnJheSBvZiBpdGVtcyB3aGVyZSBub25lIHJlcGVhdC5cbiAgICAgKlxuICAgICAqICBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0aGUgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgc29tZXRoaW5nIHJhbmRvbVxuICAgICAqICBAcGFyYW0ge051bWJlcn0gbnVtIG51bWJlciBvZiB0ZXJtcyB0byBnZW5lcmF0ZVxuICAgICAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhbnkgb3B0aW9ucyB0byBwYXNzIG9uIHRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb25cbiAgICAgKiAgQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBsZW5ndGggYG51bWAgd2l0aCBldmVyeSBpdGVtIGdlbmVyYXRlZCBieSBgZm5gIGFuZCB1bmlxdWVcbiAgICAgKlxuICAgICAqICBUaGVyZSBjYW4gYmUgbW9yZSBwYXJhbWV0ZXJzIGFmdGVyIHRoZXNlLiBBbGwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCB0byB0aGUgZ2l2ZW4gZnVuY3Rpb25cbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLnVuaXF1ZSA9IGZ1bmN0aW9uKGZuLCBudW0sIG9wdGlvbnMpIHtcbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgdHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICBcIkNoYW5jZTogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbi5cIlxuICAgICAgICApO1xuXG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0IGNvbXBhcmF0b3IgdG8gY2hlY2sgdGhhdCB2YWwgaXMgbm90IGFscmVhZHkgaW4gYXJyLlxuICAgICAgICAgICAgLy8gU2hvdWxkIHJldHVybiBgZmFsc2VgIGlmIGl0ZW0gbm90IGluIGFycmF5LCBgdHJ1ZWAgb3RoZXJ3aXNlXG4gICAgICAgICAgICBjb21wYXJhdG9yOiBmdW5jdGlvbihhcnIsIHZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnIuaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGFyciA9IFtdLCBjb3VudCA9IDAsIHJlc3VsdCwgTUFYX0RVUExJQ0FURVMgPSBudW0gKiA1MCwgcGFyYW1zID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuXG4gICAgICAgIHdoaWxlIChhcnIubGVuZ3RoIDwgbnVtKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBmbi5hcHBseSh0aGlzLCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNvbXBhcmF0b3IoYXJyLCByZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBjb3VudCB3aGVuIHVuaXF1ZSBmb3VuZFxuICAgICAgICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCsrY291bnQgPiBNQVhfRFVQTElDQVRFUykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2hhbmNlOiBudW0gaXMgbGlrZWx5IHRvbyBsYXJnZSBmb3Igc2FtcGxlIHNldFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgR2l2ZXMgYW4gYXJyYXkgb2YgbiByYW5kb20gdGVybXNcbiAgICAgKlxuICAgICAqICBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0aGUgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgc29tZXRoaW5nIHJhbmRvbVxuICAgICAqICBAcGFyYW0ge051bWJlcn0gbiBudW1iZXIgb2YgdGVybXMgdG8gZ2VuZXJhdGVcbiAgICAgKiAgQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBsZW5ndGggYG5gIHdpdGggaXRlbXMgZ2VuZXJhdGVkIGJ5IGBmbmBcbiAgICAgKlxuICAgICAqICBUaGVyZSBjYW4gYmUgbW9yZSBwYXJhbWV0ZXJzIGFmdGVyIHRoZXNlLiBBbGwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCB0byB0aGUgZ2l2ZW4gZnVuY3Rpb25cbiAgICAgKi9cbiAgICBDaGFuY2UucHJvdG90eXBlLm4gPSBmdW5jdGlvbihmbiwgbikge1xuICAgICAgICB0ZXN0UmFuZ2UoXG4gICAgICAgICAgICB0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgIFwiQ2hhbmNlOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uLlwiXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGkgPSBuLCBhcnIgPSBbXSwgcGFyYW1zID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuXG4gICAgICAgIC8vIFByb3ZpZGluZyBhIG5lZ2F0aXZlIGNvdW50IHNob3VsZCByZXN1bHQgaW4gYSBub29wLlxuICAgICAgICBpID0gTWF0aC5tYXgoIDAsIGkgKTtcblxuICAgICAgICBmb3IgKG51bGw7IGktLTsgbnVsbCkge1xuICAgICAgICAgICAgYXJyLnB1c2goZm4uYXBwbHkodGhpcywgcGFyYW1zKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH07XG5cbiAgICAvLyBIL1QgdG8gU08gZm9yIHRoaXMgb25lOiBodHRwOi8vdnEuaW8vT3RVclo1XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wYWQgPSBmdW5jdGlvbiAobnVtYmVyLCB3aWR0aCwgcGFkKSB7XG4gICAgICAgIC8vIERlZmF1bHQgcGFkIHRvIDAgaWYgbm9uZSBwcm92aWRlZFxuICAgICAgICBwYWQgPSBwYWQgfHwgJzAnO1xuICAgICAgICAvLyBDb252ZXJ0IG51bWJlciB0byBhIHN0cmluZ1xuICAgICAgICBudW1iZXIgPSBudW1iZXIgKyAnJztcbiAgICAgICAgcmV0dXJuIG51bWJlci5sZW5ndGggPj0gd2lkdGggPyBudW1iZXIgOiBuZXcgQXJyYXkod2lkdGggLSBudW1iZXIubGVuZ3RoICsgMSkuam9pbihwYWQpICsgbnVtYmVyO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBpY2sgPSBmdW5jdGlvbiAoYXJyLCBjb3VudCkge1xuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDaGFuY2U6IENhbm5vdCBwaWNrKCkgZnJvbSBhbiBlbXB0eSBhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvdW50IHx8IGNvdW50ID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyW3RoaXMubmF0dXJhbCh7bWF4OiBhcnIubGVuZ3RoIC0gMX0pXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNodWZmbGUoYXJyKS5zbGljZSgwLCBjb3VudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zaHVmZmxlID0gZnVuY3Rpb24gKGFycikge1xuICAgICAgICB2YXIgb2xkX2FycmF5ID0gYXJyLnNsaWNlKDApLFxuICAgICAgICAgICAgbmV3X2FycmF5ID0gW10sXG4gICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgIGxlbmd0aCA9IE51bWJlcihvbGRfYXJyYXkubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvLyBQaWNrIGEgcmFuZG9tIGluZGV4IGZyb20gdGhlIGFycmF5XG4gICAgICAgICAgICBqID0gdGhpcy5uYXR1cmFsKHttYXg6IG9sZF9hcnJheS5sZW5ndGggLSAxfSk7XG4gICAgICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIG5ldyBhcnJheVxuICAgICAgICAgICAgbmV3X2FycmF5W2ldID0gb2xkX2FycmF5W2pdO1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoYXQgZWxlbWVudCBmcm9tIHRoZSBvcmlnaW5hbCBhcnJheVxuICAgICAgICAgICAgb2xkX2FycmF5LnNwbGljZShqLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdfYXJyYXk7XG4gICAgfTtcblxuICAgIC8vIFJldHVybnMgYSBzaW5nbGUgaXRlbSBmcm9tIGFuIGFycmF5IHdpdGggcmVsYXRpdmUgd2VpZ2h0aW5nIG9mIG9kZHNcbiAgICBDaGFuY2UucHJvdG90eXBlLndlaWdodGVkID0gZnVuY3Rpb24oYXJyLCB3ZWlnaHRzKSB7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoICE9PSB3ZWlnaHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDaGFuY2U6IGxlbmd0aCBvZiBhcnJheSBhbmQgd2VpZ2h0cyBtdXN0IG1hdGNoXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIHdlaWdodHMgdGhhdCBhcmUgbGVzcyBvciBlcXVhbCB0byB6ZXJvLlxuICAgICAgICBmb3IgKHZhciB3ZWlnaHRJbmRleCA9IHdlaWdodHMubGVuZ3RoIC0gMTsgd2VpZ2h0SW5kZXggPj0gMDsgLS13ZWlnaHRJbmRleCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHdlaWdodCBpcyBsZXNzIG9yIGVxdWFsIHRvIHplcm8sIHJlbW92ZSBpdCBhbmQgdGhlIHZhbHVlLlxuICAgICAgICAgICAgaWYgKHdlaWdodHNbd2VpZ2h0SW5kZXhdIDw9IDApIHtcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKHdlaWdodEluZGV4LDEpO1xuICAgICAgICAgICAgICAgIHdlaWdodHMuc3BsaWNlKHdlaWdodEluZGV4LDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgYW55IG9mIHRoZSB3ZWlnaHRzIGFyZSBsZXNzIHRoYW4gMSwgd2Ugd2FudCB0byBzY2FsZSB0aGVtIHVwIHRvIHdob2xlXG4gICAgICAgIC8vICAgbnVtYmVycyBmb3IgdGhlIHJlc3Qgb2YgdGhpcyBsb2dpYyB0byB3b3JrXG4gICAgICAgIGlmICh3ZWlnaHRzLnNvbWUoZnVuY3Rpb24od2VpZ2h0KSB7IHJldHVybiB3ZWlnaHQgPCAxOyB9KSkge1xuICAgICAgICAgICAgdmFyIG1pbiA9IHdlaWdodHMucmVkdWNlKGZ1bmN0aW9uKG1pbiwgd2VpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh3ZWlnaHQgPCBtaW4pID8gd2VpZ2h0IDogbWluO1xuICAgICAgICAgICAgfSwgd2VpZ2h0c1swXSk7XG5cbiAgICAgICAgICAgIHZhciBzY2FsaW5nX2ZhY3RvciA9IDEgLyBtaW47XG5cbiAgICAgICAgICAgIHdlaWdodHMgPSB3ZWlnaHRzLm1hcChmdW5jdGlvbih3ZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2VpZ2h0ICogc2NhbGluZ19mYWN0b3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdW0gPSB3ZWlnaHRzLnJlZHVjZShmdW5jdGlvbih0b3RhbCwgd2VpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgKyB3ZWlnaHQ7XG4gICAgICAgIH0sIDApO1xuXG4gICAgICAgIC8vIGdldCBhbiBpbmRleFxuICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLm5hdHVyYWwoeyBtaW46IDEsIG1heDogc3VtIH0pO1xuXG4gICAgICAgIHZhciB0b3RhbCA9IDA7XG4gICAgICAgIHZhciBjaG9zZW47XG4gICAgICAgIC8vIFVzaW5nIHNvbWUoKSBoZXJlIHNvIHdlIGNhbiBiYWlsIGFzIHNvb24gYXMgd2UgZ2V0IG91ciBtYXRjaFxuICAgICAgICB3ZWlnaHRzLnNvbWUoZnVuY3Rpb24od2VpZ2h0LCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkIDw9IHRvdGFsICsgd2VpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY2hvc2VuID0gYXJyW2luZGV4XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvdGFsICs9IHdlaWdodDtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNob3NlbjtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIEhlbHBlcnMgLS1cblxuICAgIC8vIC0tIFRleHQgLS1cblxuICAgIENoYW5jZS5wcm90b3R5cGUucGFyYWdyYXBoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBzZW50ZW5jZXMgPSBvcHRpb25zLnNlbnRlbmNlcyB8fCB0aGlzLm5hdHVyYWwoe21pbjogMywgbWF4OiA3fSksXG4gICAgICAgICAgICBzZW50ZW5jZV9hcnJheSA9IHRoaXMubih0aGlzLnNlbnRlbmNlLCBzZW50ZW5jZXMpO1xuXG4gICAgICAgIHJldHVybiBzZW50ZW5jZV9hcnJheS5qb2luKCcgJyk7XG4gICAgfTtcblxuICAgIC8vIENvdWxkIGdldCBzbWFydGVyIGFib3V0IHRoaXMgdGhhbiBnZW5lcmF0aW5nIHJhbmRvbSB3b3JkcyBhbmRcbiAgICAvLyBjaGFpbmluZyB0aGVtIHRvZ2V0aGVyLiBTdWNoIGFzOiBodHRwOi8vdnEuaW8vMWE1Y2VPaFxuICAgIENoYW5jZS5wcm90b3R5cGUuc2VudGVuY2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHdvcmRzID0gb3B0aW9ucy53b3JkcyB8fCB0aGlzLm5hdHVyYWwoe21pbjogMTIsIG1heDogMTh9KSxcbiAgICAgICAgICAgIHB1bmN0dWF0aW9uID0gb3B0aW9ucy5wdW5jdHVhdGlvbixcbiAgICAgICAgICAgIHRleHQsIHdvcmRfYXJyYXkgPSB0aGlzLm4odGhpcy53b3JkLCB3b3Jkcyk7XG5cbiAgICAgICAgdGV4dCA9IHdvcmRfYXJyYXkuam9pbignICcpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2FwaXRhbGl6ZSBmaXJzdCBsZXR0ZXIgb2Ygc2VudGVuY2VcbiAgICAgICAgdGV4dCA9IHRoaXMuY2FwaXRhbGl6ZSh0ZXh0KTtcbiAgICAgICAgXG4gICAgICAgIC8vIE1ha2Ugc3VyZSBwdW5jdHVhdGlvbiBoYXMgYSB1c2FibGUgdmFsdWVcbiAgICAgICAgaWYgKHB1bmN0dWF0aW9uICE9PSBmYWxzZSAmJiAhL15bXFwuXFw/OyE6XSQvLnRlc3QocHVuY3R1YXRpb24pKSB7XG4gICAgICAgICAgICBwdW5jdHVhdGlvbiA9ICcuJztcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQWRkIHB1bmN0dWF0aW9uIG1hcmtcbiAgICAgICAgaWYgKHB1bmN0dWF0aW9uKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IHB1bmN0dWF0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc3lsbGFibGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIGxlbmd0aCA9IG9wdGlvbnMubGVuZ3RoIHx8IHRoaXMubmF0dXJhbCh7bWluOiAyLCBtYXg6IDN9KSxcbiAgICAgICAgICAgIGNvbnNvbmFudHMgPSAnYmNkZmdoamtsbW5wcnN0dnd6JywgLy8gY29uc29uYW50cyBleGNlcHQgaGFyZCB0byBzcGVhayBvbmVzXG4gICAgICAgICAgICB2b3dlbHMgPSAnYWVpb3UnLCAvLyB2b3dlbHNcbiAgICAgICAgICAgIGFsbCA9IGNvbnNvbmFudHMgKyB2b3dlbHMsIC8vIGFsbFxuICAgICAgICAgICAgdGV4dCA9ICcnLFxuICAgICAgICAgICAgY2hyO1xuXG4gICAgICAgIC8vIEknbSBzdXJlIHRoZXJlJ3MgYSBtb3JlIGVsZWdhbnQgd2F5IHRvIGRvIHRoaXMsIGJ1dCB0aGlzIHdvcmtzXG4gICAgICAgIC8vIGRlY2VudGx5IHdlbGwuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRmlyc3QgY2hhcmFjdGVyIGNhbiBiZSBhbnl0aGluZ1xuICAgICAgICAgICAgICAgIGNociA9IHRoaXMuY2hhcmFjdGVyKHtwb29sOiBhbGx9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uc29uYW50cy5pbmRleE9mKGNocikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8gTGFzdCBjaGFyYWN0ZXIgd2FzIGEgdm93ZWwsIG5vdyB3ZSB3YW50IGEgY29uc29uYW50XG4gICAgICAgICAgICAgICAgY2hyID0gdGhpcy5jaGFyYWN0ZXIoe3Bvb2w6IGNvbnNvbmFudHN9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTGFzdCBjaGFyYWN0ZXIgd2FzIGEgY29uc29uYW50LCBub3cgd2Ugd2FudCBhIHZvd2VsXG4gICAgICAgICAgICAgICAgY2hyID0gdGhpcy5jaGFyYWN0ZXIoe3Bvb2w6IHZvd2Vsc30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0ZXh0ICs9IGNocjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLndvcmQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdGVzdFJhbmdlKFxuICAgICAgICAgICAgb3B0aW9ucy5zeWxsYWJsZXMgJiYgb3B0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgICBcIkNoYW5jZTogQ2Fubm90IHNwZWNpZnkgYm90aCBzeWxsYWJsZXMgQU5EIGxlbmd0aC5cIlxuICAgICAgICApO1xuXG4gICAgICAgIHZhciBzeWxsYWJsZXMgPSBvcHRpb25zLnN5bGxhYmxlcyB8fCB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiAzfSksXG4gICAgICAgICAgICB0ZXh0ID0gJyc7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBFaXRoZXIgYm91bmQgd29yZCBieSBsZW5ndGhcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICB0ZXh0ICs9IHRoaXMuc3lsbGFibGUoKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHRleHQubGVuZ3RoIDwgb3B0aW9ucy5sZW5ndGgpO1xuICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIG9wdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE9yIGJ5IG51bWJlciBvZiBzeWxsYWJsZXNcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3lsbGFibGVzOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ZXh0ICs9IHRoaXMuc3lsbGFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIFRleHQgLS1cblxuICAgIC8vIC0tIFBlcnNvbiAtLVxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hZ2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHZhciBhZ2VSYW5nZTtcblxuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY2hpbGQnOlxuICAgICAgICAgICAgICAgIGFnZVJhbmdlID0ge21pbjogMSwgbWF4OiAxMn07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZWVuJzpcbiAgICAgICAgICAgICAgICBhZ2VSYW5nZSA9IHttaW46IDEzLCBtYXg6IDE5fTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FkdWx0JzpcbiAgICAgICAgICAgICAgICBhZ2VSYW5nZSA9IHttaW46IDE4LCBtYXg6IDY1fTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nlbmlvcic6XG4gICAgICAgICAgICAgICAgYWdlUmFuZ2UgPSB7bWluOiA2NSwgbWF4OiAxMDB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWxsJzpcbiAgICAgICAgICAgICAgICBhZ2VSYW5nZSA9IHttaW46IDEsIG1heDogMTAwfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYWdlUmFuZ2UgPSB7bWluOiAxOCwgbWF4OiA2NX07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsKGFnZVJhbmdlKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5iaXJ0aGRheSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICAgICAgICB5ZWFyOiAobmV3IERhdGUoKS5nZXRGdWxsWWVhcigpIC0gdGhpcy5hZ2Uob3B0aW9ucykpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGUob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIC8vIENQRjsgSUQgdG8gaWRlbnRpZnkgdGF4cGF5ZXJzIGluIEJyYXppbFxuICAgIENoYW5jZS5wcm90b3R5cGUuY3BmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMubih0aGlzLm5hdHVyYWwsIDksIHsgbWF4OiA5IH0pO1xuICAgICAgICB2YXIgZDEgPSBuWzhdKjIrbls3XSozK25bNl0qNCtuWzVdKjUrbls0XSo2K25bM10qNytuWzJdKjgrblsxXSo5K25bMF0qMTA7XG4gICAgICAgIGQxID0gMTEgLSAoZDEgJSAxMSk7XG4gICAgICAgIGlmIChkMT49MTApIHtcbiAgICAgICAgICAgIGQxID0gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZDIgPSBkMSoyK25bOF0qMytuWzddKjQrbls2XSo1K25bNV0qNituWzRdKjcrblszXSo4K25bMl0qOStuWzFdKjEwK25bMF0qMTE7XG4gICAgICAgIGQyID0gMTEgLSAoZDIgJSAxMSk7XG4gICAgICAgIGlmIChkMj49MTApIHtcbiAgICAgICAgICAgIGQyID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJycrblswXStuWzFdK25bMl0rJy4nK25bM10rbls0XStuWzVdKycuJytuWzZdK25bN10rbls4XSsnLScrZDErZDI7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2dlbmRlcjogdGhpcy5nZW5kZXIoKX0pO1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrKHRoaXMuZ2V0KFwiZmlyc3ROYW1lc1wiKVtvcHRpb25zLmdlbmRlci50b0xvd2VyQ2FzZSgpXSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZ2VuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrKFsnTWFsZScsICdGZW1hbGUnXSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubGFzdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGljayh0aGlzLmdldChcImxhc3ROYW1lc1wiKSk7XG4gICAgfTtcbiAgICBcbiAgICBDaGFuY2UucHJvdG90eXBlLmlzcmFlbElkPWZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciB4PXRoaXMuc3RyaW5nKHtwb29sOiAnMDEyMzQ1Njc4OScsbGVuZ3RoOjh9KTtcbiAgICAgICAgdmFyIHk9MDtcbiAgICAgICAgZm9yICh2YXIgaT0wO2k8eC5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIHZhciB0aGlzRGlnaXQ9ICB4W2ldICogIChpLzI9PT1wYXJzZUludChpLzIpID8gMSA6IDIpO1xuICAgICAgICAgICAgdGhpc0RpZ2l0PXRoaXMucGFkKHRoaXNEaWdpdCwyKS50b1N0cmluZygpO1xuICAgICAgICAgICAgdGhpc0RpZ2l0PXBhcnNlSW50KHRoaXNEaWdpdFswXSkgKyBwYXJzZUludCh0aGlzRGlnaXRbMV0pO1xuICAgICAgICAgICAgeT15K3RoaXNEaWdpdDtcbiAgICAgICAgfVxuICAgICAgICB4PXgrKDEwLXBhcnNlSW50KHkudG9TdHJpbmcoKS5zbGljZSgtMSkpKS50b1N0cmluZygpLnNsaWNlKC0xKTtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubXJ6ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGNoZWNrRGlnaXQgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHZhciBhbHBoYSA9IFwiPEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlYWlwiLnNwbGl0KCcnKSxcbiAgICAgICAgICAgICAgICBtdWx0aXBsaWVycyA9IFsgNywgMywgMSBdLFxuICAgICAgICAgICAgICAgIHJ1bm5pbmdUb3RhbCA9IDA7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbihjaGFyYWN0ZXIsIGlkeCkge1xuICAgICAgICAgICAgICAgIHZhciBwb3MgPSBhbHBoYS5pbmRleE9mKGNoYXJhY3Rlcik7XG5cbiAgICAgICAgICAgICAgICBpZihwb3MgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IHBvcyA9PT0gMCA/IDAgOiBwb3MgKyA5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IHBhcnNlSW50KGNoYXJhY3RlciwgMTApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgKj0gbXVsdGlwbGllcnNbaWR4ICUgbXVsdGlwbGllcnMubGVuZ3RoXTtcbiAgICAgICAgICAgICAgICBydW5uaW5nVG90YWwgKz0gY2hhcmFjdGVyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcnVubmluZ1RvdGFsICUgMTA7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBnZW5lcmF0ZSA9IGZ1bmN0aW9uIChvcHRzKSB7XG4gICAgICAgICAgICB2YXIgcGFkID0gZnVuY3Rpb24gKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXkobGVuZ3RoICsgMSkuam9pbignPCcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBudW1iZXIgPSBbICdQPCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmlzc3VlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMubGFzdC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJzw8JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmlyc3QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZCgzOSAtIChvcHRzLmxhc3QubGVuZ3RoICsgb3B0cy5maXJzdC5sZW5ndGggKyAyKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLnBhc3Nwb3J0TnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tEaWdpdChvcHRzLnBhc3Nwb3J0TnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMubmF0aW9uYWxpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmRvYixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRGlnaXQob3B0cy5kb2IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5nZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmV4cGlyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRGlnaXQob3B0cy5leHBpcnkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkKDE0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRGlnaXQocGFkKDE0KSkgXS5qb2luKCcnKTtcblxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArXG4gICAgICAgICAgICAgICAgKGNoZWNrRGlnaXQobnVtYmVyLnN1YnN0cig0NCwgMTApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIuc3Vic3RyKDU3LCA3KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLnN1YnN0cig2NSwgNykpKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGZpcnN0OiB0aGlzLmZpcnN0KCksXG4gICAgICAgICAgICBsYXN0OiB0aGlzLmxhc3QoKSxcbiAgICAgICAgICAgIHBhc3Nwb3J0TnVtYmVyOiB0aGlzLmludGVnZXIoe21pbjogMTAwMDAwMDAwLCBtYXg6IDk5OTk5OTk5OX0pLFxuICAgICAgICAgICAgZG9iOiAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBkYXRlID0gdGhhdC5iaXJ0aGRheSh7dHlwZTogJ2FkdWx0J30pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc3Vic3RyKDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5wYWQoZGF0ZS5nZXRNb250aCgpICsgMSwgMiksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnBhZChkYXRlLmdldERhdGUoKSwgMildLmpvaW4oJycpO1xuICAgICAgICAgICAgfSgpKSxcbiAgICAgICAgICAgIGV4cGlyeTogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsoZGF0ZS5nZXRGdWxsWWVhcigpICsgNSkudG9TdHJpbmcoKS5zdWJzdHIoMiksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnBhZChkYXRlLmdldE1vbnRoKCkgKyAxLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQucGFkKGRhdGUuZ2V0RGF0ZSgpLCAyKV0uam9pbignJyk7XG4gICAgICAgICAgICB9KCkpLFxuICAgICAgICAgICAgZ2VuZGVyOiB0aGlzLmdlbmRlcigpID09PSAnRmVtYWxlJyA/ICdGJzogJ00nLFxuICAgICAgICAgICAgaXNzdWVyOiAnR0JSJyxcbiAgICAgICAgICAgIG5hdGlvbmFsaXR5OiAnR0JSJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlIChvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBmaXJzdCA9IHRoaXMuZmlyc3Qob3B0aW9ucyksXG4gICAgICAgICAgICBsYXN0ID0gdGhpcy5sYXN0KCksXG4gICAgICAgICAgICBuYW1lO1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1pZGRsZSkge1xuICAgICAgICAgICAgbmFtZSA9IGZpcnN0ICsgJyAnICsgdGhpcy5maXJzdChvcHRpb25zKSArICcgJyArIGxhc3Q7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5taWRkbGVfaW5pdGlhbCkge1xuICAgICAgICAgICAgbmFtZSA9IGZpcnN0ICsgJyAnICsgdGhpcy5jaGFyYWN0ZXIoe2FscGhhOiB0cnVlLCBjYXNpbmc6ICd1cHBlcid9KSArICcuICcgKyBsYXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmFtZSA9IGZpcnN0ICsgJyAnICsgbGFzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnByZWZpeCkge1xuICAgICAgICAgICAgbmFtZSA9IHRoaXMucHJlZml4KG9wdGlvbnMpICsgJyAnICsgbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnN1ZmZpeCkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUgKyAnICcgKyB0aGlzLnN1ZmZpeChvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH07XG5cbiAgICAvLyBSZXR1cm4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG5hbWUgcHJlZml4ZXMgYmFzZWQgb24gc3VwcGxpZWQgZ2VuZGVyLlxuICAgIENoYW5jZS5wcm90b3R5cGUubmFtZV9wcmVmaXhlcyA9IGZ1bmN0aW9uIChnZW5kZXIpIHtcbiAgICAgICAgZ2VuZGVyID0gZ2VuZGVyIHx8IFwiYWxsXCI7XG4gICAgICAgIGdlbmRlciA9IGdlbmRlci50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIHZhciBwcmVmaXhlcyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0RvY3RvcicsIGFiYnJldmlhdGlvbjogJ0RyLicgfVxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChnZW5kZXIgPT09IFwibWFsZVwiIHx8IGdlbmRlciA9PT0gXCJhbGxcIikge1xuICAgICAgICAgICAgcHJlZml4ZXMucHVzaCh7IG5hbWU6ICdNaXN0ZXInLCBhYmJyZXZpYXRpb246ICdNci4nIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdlbmRlciA9PT0gXCJmZW1hbGVcIiB8fCBnZW5kZXIgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgICAgIHByZWZpeGVzLnB1c2goeyBuYW1lOiAnTWlzcycsIGFiYnJldmlhdGlvbjogJ01pc3MnIH0pO1xuICAgICAgICAgICAgcHJlZml4ZXMucHVzaCh7IG5hbWU6ICdNaXNzZXMnLCBhYmJyZXZpYXRpb246ICdNcnMuJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcmVmaXhlcztcbiAgICB9O1xuXG4gICAgLy8gQWxpYXMgZm9yIG5hbWVfcHJlZml4XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wcmVmaXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lX3ByZWZpeChvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5uYW1lX3ByZWZpeCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IGdlbmRlcjogXCJhbGxcIiB9KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZnVsbCA/XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5uYW1lX3ByZWZpeGVzKG9wdGlvbnMuZ2VuZGVyKSkubmFtZSA6XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5uYW1lX3ByZWZpeGVzKG9wdGlvbnMuZ2VuZGVyKSkuYWJicmV2aWF0aW9uO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnNzbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7c3NuRm91cjogZmFsc2UsIGRhc2hlczogdHJ1ZX0pO1xuICAgICAgICB2YXIgc3NuX3Bvb2wgPSBcIjEyMzQ1Njc4OTBcIixcbiAgICAgICAgICAgIHNzbixcbiAgICAgICAgICAgIGRhc2ggPSBvcHRpb25zLmRhc2hlcyA/ICctJyA6ICcnO1xuXG4gICAgICAgIGlmKCFvcHRpb25zLnNzbkZvdXIpIHtcbiAgICAgICAgICAgIHNzbiA9IHRoaXMuc3RyaW5nKHtwb29sOiBzc25fcG9vbCwgbGVuZ3RoOiAzfSkgKyBkYXNoICtcbiAgICAgICAgICAgIHRoaXMuc3RyaW5nKHtwb29sOiBzc25fcG9vbCwgbGVuZ3RoOiAyfSkgKyBkYXNoICtcbiAgICAgICAgICAgIHRoaXMuc3RyaW5nKHtwb29sOiBzc25fcG9vbCwgbGVuZ3RoOiA0fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzc24gPSB0aGlzLnN0cmluZyh7cG9vbDogc3NuX3Bvb2wsIGxlbmd0aDogNH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzc247XG4gICAgfTtcblxuICAgIC8vIFJldHVybiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgbmFtZSBzdWZmaXhlc1xuICAgIENoYW5jZS5wcm90b3R5cGUubmFtZV9zdWZmaXhlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN1ZmZpeGVzID0gW1xuICAgICAgICAgICAgeyBuYW1lOiAnRG9jdG9yIG9mIE9zdGVvcGF0aGljIE1lZGljaW5lJywgYWJicmV2aWF0aW9uOiAnRC5PLicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0RvY3RvciBvZiBQaGlsb3NvcGh5JywgYWJicmV2aWF0aW9uOiAnUGguRC4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdFc3F1aXJlJywgYWJicmV2aWF0aW9uOiAnRXNxLicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0p1bmlvcicsIGFiYnJldmlhdGlvbjogJ0pyLicgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0p1cmlzIERvY3RvcicsIGFiYnJldmlhdGlvbjogJ0ouRC4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdNYXN0ZXIgb2YgQXJ0cycsIGFiYnJldmlhdGlvbjogJ00uQS4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdNYXN0ZXIgb2YgQnVzaW5lc3MgQWRtaW5pc3RyYXRpb24nLCBhYmJyZXZpYXRpb246ICdNLkIuQS4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdNYXN0ZXIgb2YgU2NpZW5jZScsIGFiYnJldmlhdGlvbjogJ00uUy4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdNZWRpY2FsIERvY3RvcicsIGFiYnJldmlhdGlvbjogJ00uRC4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdTZW5pb3InLCBhYmJyZXZpYXRpb246ICdTci4nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdUaGUgVGhpcmQnLCBhYmJyZXZpYXRpb246ICdJSUknIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdUaGUgRm91cnRoJywgYWJicmV2aWF0aW9uOiAnSVYnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCYWNoZWxvciBvZiBFbmdpbmVlcmluZycsIGFiYnJldmlhdGlvbjogJ0IuRScgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0JhY2hlbG9yIG9mIFRlY2hub2xvZ3knLCBhYmJyZXZpYXRpb246ICdCLlRFQ0gnIH1cbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHN1ZmZpeGVzO1xuICAgIH07XG5cbiAgICAvLyBBbGlhcyBmb3IgbmFtZV9zdWZmaXhcbiAgICBDaGFuY2UucHJvdG90eXBlLnN1ZmZpeCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWVfc3VmZml4KG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm5hbWVfc3VmZml4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5mdWxsID9cbiAgICAgICAgICAgIHRoaXMucGljayh0aGlzLm5hbWVfc3VmZml4ZXMoKSkubmFtZSA6XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5uYW1lX3N1ZmZpeGVzKCkpLmFiYnJldmlhdGlvbjtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIFBlcnNvbiAtLVxuXG4gICAgLy8gLS0gTW9iaWxlIC0tXG4gICAgLy8gQW5kcm9pZCBHQ00gUmVnaXN0cmF0aW9uIElEXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hbmRyb2lkX2lkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJBUEE5MVwiICsgdGhpcy5zdHJpbmcoeyBwb29sOiBcIjAxMjM0NTY3ODlhYmNlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiLCBsZW5ndGg6IDE3OCB9KTtcbiAgICB9O1xuXG4gICAgLy8gQXBwbGUgUHVzaCBUb2tlblxuICAgIENoYW5jZS5wcm90b3R5cGUuYXBwbGVfdG9rZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZyh7IHBvb2w6IFwiYWJjZGVmMTIzNDU2Nzg5MFwiLCBsZW5ndGg6IDY0IH0pO1xuICAgIH07XG5cbiAgICAvLyBXaW5kb3dzIFBob25lIDggQU5JRDJcbiAgICBDaGFuY2UucHJvdG90eXBlLndwOF9hbmlkMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGJhc2U2NCggdGhpcy5oYXNoKCB7IGxlbmd0aCA6IDMyIH0gKSApO1xuICAgIH07XG5cbiAgICAvLyBXaW5kb3dzIFBob25lIDcgQU5JRFxuICAgIENoYW5jZS5wcm90b3R5cGUud3A3X2FuaWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnQT0nICsgdGhpcy5ndWlkKCkucmVwbGFjZSgvLS9nLCAnJykudG9VcHBlckNhc2UoKSArICcmRT0nICsgdGhpcy5oYXNoKHsgbGVuZ3RoOjMgfSkgKyAnJlc9JyArIHRoaXMuaW50ZWdlcih7IG1pbjowLCBtYXg6OSB9KTtcbiAgICB9O1xuXG4gICAgLy8gQmxhY2tCZXJyeSBEZXZpY2UgUElOXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5iYl9waW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc2goeyBsZW5ndGg6IDggfSk7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBNb2JpbGUgLS1cblxuICAgIC8vIC0tIFdlYiAtLVxuICAgIENoYW5jZS5wcm90b3R5cGUuYXZhdGFyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHVybCA9IG51bGw7XG4gICAgICAgIHZhciBVUkxfQkFTRSA9ICcvL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLyc7XG4gICAgICAgIHZhciBQUk9UT0NPTFMgPSB7XG4gICAgICAgICAgICBodHRwOiAnaHR0cCcsXG4gICAgICAgICAgICBodHRwczogJ2h0dHBzJ1xuICAgICAgICB9O1xuICAgICAgICB2YXIgRklMRV9UWVBFUyA9IHtcbiAgICAgICAgICAgIGJtcDogJ2JtcCcsXG4gICAgICAgICAgICBnaWY6ICdnaWYnLFxuICAgICAgICAgICAganBnOiAnanBnJyxcbiAgICAgICAgICAgIHBuZzogJ3BuZydcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIEZBTExCQUNLUyA9IHtcbiAgICAgICAgICAgICc0MDQnOiAnNDA0JywgLy8gUmV0dXJuIDQwNCBpZiBub3QgZm91bmRcbiAgICAgICAgICAgIG1tOiAnbW0nLCAvLyBNeXN0ZXJ5IG1hblxuICAgICAgICAgICAgaWRlbnRpY29uOiAnaWRlbnRpY29uJywgLy8gR2VvbWV0cmljIHBhdHRlcm4gYmFzZWQgb24gaGFzaFxuICAgICAgICAgICAgbW9uc3RlcmlkOiAnbW9uc3RlcmlkJywgLy8gQSBnZW5lcmF0ZWQgbW9uc3RlciBpY29uXG4gICAgICAgICAgICB3YXZhdGFyOiAnd2F2YXRhcicsIC8vIEEgZ2VuZXJhdGVkIGZhY2VcbiAgICAgICAgICAgIHJldHJvOiAncmV0cm8nLCAvLyA4LWJpdCBpY29uXG4gICAgICAgICAgICBibGFuazogJ2JsYW5rJyAvLyBBIHRyYW5zcGFyZW50IHBuZ1xuICAgICAgICB9O1xuICAgICAgICB2YXIgUkFUSU5HUyA9IHtcbiAgICAgICAgICAgIGc6ICdnJyxcbiAgICAgICAgICAgIHBnOiAncGcnLFxuICAgICAgICAgICAgcjogJ3InLFxuICAgICAgICAgICAgeDogJ3gnXG4gICAgICAgIH07XG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgcHJvdG9jb2w6IG51bGwsXG4gICAgICAgICAgICBlbWFpbDogbnVsbCxcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb246IG51bGwsXG4gICAgICAgICAgICBzaXplOiBudWxsLFxuICAgICAgICAgICAgZmFsbGJhY2s6IG51bGwsXG4gICAgICAgICAgICByYXRpbmc6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIFNldCB0byBhIHJhbmRvbSBlbWFpbFxuICAgICAgICAgICAgb3B0cy5lbWFpbCA9IHRoaXMuZW1haWwoKTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG9wdHMuZW1haWwgPSBvcHRpb25zO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5jb25zdHJ1Y3RvciA9PT0gJ0FycmF5Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRzID0gaW5pdE9wdGlvbnMob3B0aW9ucywgb3B0cyk7XG5cbiAgICAgICAgaWYgKCFvcHRzLmVtYWlsKSB7XG4gICAgICAgICAgICAvLyBTZXQgdG8gYSByYW5kb20gZW1haWxcbiAgICAgICAgICAgIG9wdHMuZW1haWwgPSB0aGlzLmVtYWlsKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYWZlIGNoZWNraW5nIGZvciBwYXJhbXNcbiAgICAgICAgb3B0cy5wcm90b2NvbCA9IFBST1RPQ09MU1tvcHRzLnByb3RvY29sXSA/IG9wdHMucHJvdG9jb2wgKyAnOicgOiAnJztcbiAgICAgICAgb3B0cy5zaXplID0gcGFyc2VJbnQob3B0cy5zaXplLCAwKSA/IG9wdHMuc2l6ZSA6ICcnO1xuICAgICAgICBvcHRzLnJhdGluZyA9IFJBVElOR1Nbb3B0cy5yYXRpbmddID8gb3B0cy5yYXRpbmcgOiAnJztcbiAgICAgICAgb3B0cy5mYWxsYmFjayA9IEZBTExCQUNLU1tvcHRzLmZhbGxiYWNrXSA/IG9wdHMuZmFsbGJhY2sgOiAnJztcbiAgICAgICAgb3B0cy5maWxlRXh0ZW5zaW9uID0gRklMRV9UWVBFU1tvcHRzLmZpbGVFeHRlbnNpb25dID8gb3B0cy5maWxlRXh0ZW5zaW9uIDogJyc7XG5cbiAgICAgICAgdXJsID1cbiAgICAgICAgICAgIG9wdHMucHJvdG9jb2wgK1xuICAgICAgICAgICAgVVJMX0JBU0UgK1xuICAgICAgICAgICAgdGhpcy5iaW1kNS5tZDUob3B0cy5lbWFpbCkgK1xuICAgICAgICAgICAgKG9wdHMuZmlsZUV4dGVuc2lvbiA/ICcuJyArIG9wdHMuZmlsZUV4dGVuc2lvbiA6ICcnKSArXG4gICAgICAgICAgICAob3B0cy5zaXplIHx8IG9wdHMucmF0aW5nIHx8IG9wdHMuZmFsbGJhY2sgPyAnPycgOiAnJykgK1xuICAgICAgICAgICAgKG9wdHMuc2l6ZSA/ICcmcz0nICsgb3B0cy5zaXplLnRvU3RyaW5nKCkgOiAnJykgK1xuICAgICAgICAgICAgKG9wdHMucmF0aW5nID8gJyZyPScgKyBvcHRzLnJhdGluZyA6ICcnKSArXG4gICAgICAgICAgICAob3B0cy5mYWxsYmFjayA/ICcmZD0nICsgb3B0cy5mYWxsYmFjayA6ICcnKVxuICAgICAgICAgICAgO1xuXG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuY29sb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBmdW5jdGlvbiBncmF5KHZhbHVlLCBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBbdmFsdWUsIHZhbHVlLCB2YWx1ZV0uam9pbihkZWxpbWl0ZXIgfHwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5waWNrKFsnaGV4JywgJ3Nob3J0aGV4JywgJ3JnYicsICdyZ2JhJywgJzB4J10pLFxuICAgICAgICAgICAgZ3JheXNjYWxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhc2luZzogJ2xvd2VyJ1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgaXNHcmF5c2NhbGUgPSBvcHRpb25zLmdyYXlzY2FsZTtcbiAgICAgICAgdmFyIGNvbG9yVmFsdWU7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnaGV4Jykge1xuICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICcjJyArIChpc0dyYXlzY2FsZSA/IGdyYXkodGhpcy5oYXNoKHtsZW5ndGg6IDJ9KSkgOiB0aGlzLmhhc2goe2xlbmd0aDogNn0pKTtcblxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnc2hvcnRoZXgnKSB7XG4gICAgICAgICAgICBjb2xvclZhbHVlID0gJyMnICsgKGlzR3JheXNjYWxlID8gZ3JheSh0aGlzLmhhc2goe2xlbmd0aDogMX0pKSA6IHRoaXMuaGFzaCh7bGVuZ3RoOiAzfSkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdyZ2InKSB7XG4gICAgICAgICAgICBpZiAoaXNHcmF5c2NhbGUpIHtcbiAgICAgICAgICAgICAgICBjb2xvclZhbHVlID0gJ3JnYignICsgZ3JheSh0aGlzLm5hdHVyYWwoe21heDogMjU1fSksICcsJykgKyAnKSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbG9yVmFsdWUgPSAncmdiKCcgKyB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLCcgKyB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLCcgKyB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdyZ2JhJykge1xuICAgICAgICAgICAgaWYgKGlzR3JheXNjYWxlKSB7XG4gICAgICAgICAgICAgICAgY29sb3JWYWx1ZSA9ICdyZ2JhKCcgKyBncmF5KHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSwgJywnKSArICcsJyArIHRoaXMuZmxvYXRpbmcoe21pbjowLCBtYXg6MX0pICsgJyknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvclZhbHVlID0gJ3JnYmEoJyArIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcsJyArIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcsJyArIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcsJyArIHRoaXMuZmxvYXRpbmcoe21pbjowLCBtYXg6MX0pICsgJyknO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnMHgnKSB7XG4gICAgICAgICAgICBjb2xvclZhbHVlID0gJzB4JyArIChpc0dyYXlzY2FsZSA/IGdyYXkodGhpcy5oYXNoKHtsZW5ndGg6IDJ9KSkgOiB0aGlzLmhhc2goe2xlbmd0aDogNn0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIGZvcm1hdCBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgb25lIG9mIFwiaGV4XCIsIFwic2hvcnRoZXhcIiwgXCJyZ2JcIiwgXCJyZ2JhXCIsIG9yIFwiMHhcIi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNhc2luZyA9PT0gJ3VwcGVyJyApIHtcbiAgICAgICAgICAgIGNvbG9yVmFsdWUgPSBjb2xvclZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sb3JWYWx1ZTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kb21haW4gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmQoKSArICcuJyArIChvcHRpb25zLnRsZCB8fCB0aGlzLnRsZCgpKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5lbWFpbCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMud29yZCh7bGVuZ3RoOiBvcHRpb25zLmxlbmd0aH0pICsgJ0AnICsgKG9wdGlvbnMuZG9tYWluIHx8IHRoaXMuZG9tYWluKCkpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmZiaWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludCgnMTAwMDAnICsgdGhpcy5uYXR1cmFsKHttYXg6IDEwMDAwMDAwMDAwMH0pLCAxMCk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZ29vZ2xlX2FuYWx5dGljcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFjY291bnQgPSB0aGlzLnBhZCh0aGlzLm5hdHVyYWwoe21heDogOTk5OTk5fSksIDYpO1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhZCh0aGlzLm5hdHVyYWwoe21heDogOTl9KSwgMik7XG5cbiAgICAgICAgcmV0dXJuICdVQS0nICsgYWNjb3VudCArICctJyArIHByb3BlcnR5O1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmhhc2h0YWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnIycgKyB0aGlzLndvcmQoKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5pcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVG9kbzogVGhpcyBjb3VsZCByZXR1cm4gc29tZSByZXNlcnZlZCBJUHMuIFNlZSBodHRwOi8vdnEuaW8vMTM3ZGdZeVxuICAgICAgICAvLyB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSB1cGRhdGVkIHRvIGFjY291bnQgZm9yIHRoYXQgcmFyZSBhcyBpdCBtYXkgYmVcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KSArICcuJyArXG4gICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoe21heDogMjU1fSkgKyAnLicgK1xuICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsKHttYXg6IDI1NX0pICsgJy4nICtcbiAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbCh7bWF4OiAyNTV9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5pcHY2ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXBfYWRkciA9IHRoaXMubih0aGlzLmhhc2gsIDgsIHtsZW5ndGg6IDR9KTtcblxuICAgICAgICByZXR1cm4gaXBfYWRkci5qb2luKFwiOlwiKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5rbG91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IDk5fSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUudGxkcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFsnY29tJywgJ29yZycsICdlZHUnLCAnZ292JywgJ2NvLnVrJywgJ25ldCcsICdpbyddO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnRsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGljayh0aGlzLnRsZHMoKSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUudHdpdHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdAJyArIHRoaXMud29yZCgpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnVybCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IHByb3RvY29sOiBcImh0dHBcIiwgZG9tYWluOiB0aGlzLmRvbWFpbihvcHRpb25zKSwgZG9tYWluX3ByZWZpeDogXCJcIiwgcGF0aDogdGhpcy53b3JkKCksIGV4dGVuc2lvbnM6IFtdfSk7XG5cbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9IG9wdGlvbnMuZXh0ZW5zaW9ucy5sZW5ndGggPiAwID8gXCIuXCIgKyB0aGlzLnBpY2sob3B0aW9ucy5leHRlbnNpb25zKSA6IFwiXCI7XG4gICAgICAgIHZhciBkb21haW4gPSBvcHRpb25zLmRvbWFpbl9wcmVmaXggPyBvcHRpb25zLmRvbWFpbl9wcmVmaXggKyBcIi5cIiArIG9wdGlvbnMuZG9tYWluIDogb3B0aW9ucy5kb21haW47XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucHJvdG9jb2wgKyBcIjovL1wiICsgZG9tYWluICsgXCIvXCIgKyBvcHRpb25zLnBhdGggKyBleHRlbnNpb247XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBXZWIgLS1cblxuICAgIC8vIC0tIExvY2F0aW9uIC0tXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmFkZHJlc3MgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21pbjogNSwgbWF4OiAyMDAwfSkgKyAnICcgKyB0aGlzLnN0cmVldChvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5hbHRpdHVkZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7Zml4ZWQ6IDUsIG1pbjogMCwgbWF4OiA4ODQ4fSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZsb2F0aW5nKHtcbiAgICAgICAgICAgIG1pbjogb3B0aW9ucy5taW4sXG4gICAgICAgICAgICBtYXg6IG9wdGlvbnMubWF4LFxuICAgICAgICAgICAgZml4ZWQ6IG9wdGlvbnMuZml4ZWRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuYXJlYWNvZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge3BhcmVucyA6IHRydWV9KTtcbiAgICAgICAgLy8gRG9uJ3Qgd2FudCBhcmVhIGNvZGVzIHRvIHN0YXJ0IHdpdGggMSwgb3IgaGF2ZSBhIDkgYXMgdGhlIHNlY29uZCBkaWdpdFxuICAgICAgICB2YXIgYXJlYWNvZGUgPSB0aGlzLm5hdHVyYWwoe21pbjogMiwgbWF4OiA5fSkudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsKHttaW46IDAsIG1heDogOH0pLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbCh7bWluOiAwLCBtYXg6IDl9KS50b1N0cmluZygpO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnBhcmVucyA/ICcoJyArIGFyZWFjb2RlICsgJyknIDogYXJlYWNvZGU7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuY2l0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwaXRhbGl6ZSh0aGlzLndvcmQoe3N5bGxhYmxlczogM30pKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jb29yZGluYXRlcyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhdGl0dWRlKG9wdGlvbnMpICsgJywgJyArIHRoaXMubG9uZ2l0dWRlKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNvdW50cmllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwiY291bnRyaWVzXCIpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNvdW50cnkgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHZhciBjb3VudHJ5ID0gdGhpcy5waWNrKHRoaXMuY291bnRyaWVzKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5mdWxsID8gY291bnRyeS5uYW1lIDogY291bnRyeS5hYmJyZXZpYXRpb247XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZGVwdGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge2ZpeGVkOiA1LCBtaW46IC0xMDk5NCwgbWF4OiAwfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZsb2F0aW5nKHtcbiAgICAgICAgICAgIG1pbjogb3B0aW9ucy5taW4sXG4gICAgICAgICAgICBtYXg6IG9wdGlvbnMubWF4LFxuICAgICAgICAgICAgZml4ZWQ6IG9wdGlvbnMuZml4ZWRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZ2VvaGFzaCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IGxlbmd0aDogNyB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKHsgbGVuZ3RoOiBvcHRpb25zLmxlbmd0aCwgcG9vbDogJzAxMjM0NTY3ODliY2RlZmdoamttbnBxcnN0dXZ3eHl6JyB9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5nZW9qc29uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF0aXR1ZGUob3B0aW9ucykgKyAnLCAnICsgdGhpcy5sb25naXR1ZGUob3B0aW9ucykgKyAnLCAnICsgdGhpcy5hbHRpdHVkZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5sYXRpdHVkZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7Zml4ZWQ6IDUsIG1pbjogLTkwLCBtYXg6IDkwfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZsb2F0aW5nKHttaW46IG9wdGlvbnMubWluLCBtYXg6IG9wdGlvbnMubWF4LCBmaXhlZDogb3B0aW9ucy5maXhlZH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmxvbmdpdHVkZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7Zml4ZWQ6IDUsIG1pbjogLTE4MCwgbWF4OiAxODB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvYXRpbmcoe21pbjogb3B0aW9ucy5taW4sIG1heDogb3B0aW9ucy5tYXgsIGZpeGVkOiBvcHRpb25zLmZpeGVkfSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucGhvbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgICAgICBudW1QaWNrLFxuICAgICAgICAgICAgdWtOdW0gPSBmdW5jdGlvbiAocGFydHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IFtdO1xuICAgICAgICAgICAgICAgIC8vZmlsbHMgdGhlIHNlY3Rpb24gcGFydCBvZiB0aGUgcGhvbmUgbnVtYmVyIHdpdGggcmFuZG9tIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgcGFydHMuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24ucHVzaChzZWxmLnN0cmluZyh7IHBvb2w6ICcwMTIzNDU2Nzg5JywgbGVuZ3RoOiBufSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0cy5hcmVhICsgc2VjdGlvbi5qb2luKCcgJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge1xuICAgICAgICAgICAgZm9ybWF0dGVkOiB0cnVlLFxuICAgICAgICAgICAgY291bnRyeTogJ3VzJyxcbiAgICAgICAgICAgIG1vYmlsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFyZW5zID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBob25lO1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuY291bnRyeSkge1xuICAgICAgICAgICAgY2FzZSAnZnInOlxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtUGljayA9IHRoaXMucGljayhbXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZCB6b25lIGFuZCBkw6lwYXJ0ZW1lbnQgY29kZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAnMDEnICsgdGhpcy5waWNrKFsnMzAnLCAnMzQnLCAnMzknLCAnNDAnLCAnNDEnLCAnNDInLCAnNDMnLCAnNDQnLCAnNDUnLCAnNDYnLCAnNDcnLCAnNDgnLCAnNDknLCAnNTMnLCAnNTUnLCAnNTYnLCAnNTgnLCAnNjAnLCAnNjQnLCAnNjknLCAnNzAnLCAnNzInLCAnNzMnLCAnNzQnLCAnNzUnLCAnNzYnLCAnNzcnLCAnNzgnLCAnNzknLCAnODAnLCAnODEnLCAnODInLCAnODMnXSkgKyBzZWxmLnN0cmluZyh7IHBvb2w6ICcwMTIzNDU2Nzg5JywgbGVuZ3RoOiA2fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAnMDInICsgdGhpcy5waWNrKFsnMTQnLCAnMTgnLCAnMjInLCAnMjMnLCAnMjgnLCAnMjknLCAnMzAnLCAnMzEnLCAnMzInLCAnMzMnLCAnMzQnLCAnMzUnLCAnMzYnLCAnMzcnLCAnMzgnLCAnNDAnLCAnNDEnLCAnNDMnLCAnNDQnLCAnNDUnLCAnNDYnLCAnNDcnLCAnNDgnLCAnNDknLCAnNTAnLCAnNTEnLCAnNTInLCAnNTMnLCAnNTQnLCAnNTYnLCAnNTcnLCAnNjEnLCAnNjInLCAnNjknLCAnNzInLCAnNzYnLCAnNzcnLCAnNzgnLCAnODUnLCAnOTAnLCAnOTYnLCAnOTcnLCAnOTgnLCAnOTknXSkgKyBzZWxmLnN0cmluZyh7IHBvb2w6ICcwMTIzNDU2Nzg5JywgbGVuZ3RoOiA2fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAnMDMnICsgdGhpcy5waWNrKFsnMTAnLCAnMjAnLCAnMjEnLCAnMjInLCAnMjMnLCAnMjQnLCAnMjUnLCAnMjYnLCAnMjcnLCAnMjgnLCAnMjknLCAnMzknLCAnNDQnLCAnNDUnLCAnNTEnLCAnNTInLCAnNTQnLCAnNTUnLCAnNTcnLCAnNTgnLCAnNTknLCAnNjAnLCAnNjEnLCAnNjInLCAnNjMnLCAnNjQnLCAnNjUnLCAnNjYnLCAnNjcnLCAnNjgnLCAnNjknLCAnNzAnLCAnNzEnLCAnNzInLCAnNzMnLCAnODAnLCAnODEnLCAnODInLCAnODMnLCAnODQnLCAnODUnLCAnODYnLCAnODcnLCAnODgnLCAnODknLCAnOTAnXSkgKyBzZWxmLnN0cmluZyh7IHBvb2w6ICcwMTIzNDU2Nzg5JywgbGVuZ3RoOiA2fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAnMDQnICsgdGhpcy5waWNrKFsnMTEnLCAnMTMnLCAnMTUnLCAnMjAnLCAnMjInLCAnMjYnLCAnMjcnLCAnMzAnLCAnMzInLCAnMzQnLCAnMzcnLCAnNDInLCAnNDMnLCAnNDQnLCAnNTAnLCAnNTYnLCAnNTcnLCAnNjMnLCAnNjYnLCAnNjcnLCAnNjgnLCAnNjknLCAnNzAnLCAnNzEnLCAnNzInLCAnNzMnLCAnNzQnLCAnNzUnLCAnNzYnLCAnNzcnLCAnNzgnLCAnNzknLCAnODAnLCAnODEnLCAnODInLCAnODMnLCAnODQnLCAnODUnLCAnODYnLCAnODgnLCAnODknLCAnOTAnLCAnOTEnLCAnOTInLCAnOTMnLCAnOTQnLCAnOTUnLCAnOTcnLCAnOTgnXSkgKyBzZWxmLnN0cmluZyh7IHBvb2w6ICcwMTIzNDU2Nzg5JywgbGVuZ3RoOiA2fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAnMDUnICsgdGhpcy5waWNrKFsnMDgnLCAnMTYnLCAnMTcnLCAnMTknLCAnMjQnLCAnMzEnLCAnMzInLCAnMzMnLCAnMzQnLCAnMzUnLCAnNDAnLCAnNDUnLCAnNDYnLCAnNDcnLCAnNDknLCAnNTMnLCAnNTUnLCAnNTYnLCAnNTcnLCAnNTgnLCAnNTknLCAnNjEnLCAnNjInLCAnNjMnLCAnNjQnLCAnNjUnLCAnNjcnLCAnNzknLCAnODEnLCAnODInLCAnODYnLCAnODcnLCAnOTAnLCAnOTQnXSkgKyBzZWxmLnN0cmluZyh7IHBvb2w6ICcwMTIzNDU2Nzg5JywgbGVuZ3RoOiA2fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAnMDknICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogOH0pLFxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgcGhvbmUgPSBvcHRpb25zLmZvcm1hdHRlZCA/IG51bVBpY2subWF0Y2goLy4uL2cpLmpvaW4oJyAnKSA6IG51bVBpY2s7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtUGljayA9IHRoaXMucGljayhbJzA2JywgJzA3J10pICsgc2VsZi5zdHJpbmcoeyBwb29sOiAnMDEyMzQ1Njc4OScsIGxlbmd0aDogOH0pO1xuICAgICAgICAgICAgICAgICAgICBwaG9uZSA9IG9wdGlvbnMuZm9ybWF0dGVkID8gbnVtUGljay5tYXRjaCgvLi4vZykuam9pbignICcpIDogbnVtUGljaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd1ayc6XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLm1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBudW1QaWNrID0gdGhpcy5waWNrKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFsaWQgYXJlYSBjb2RlcyBvZiBtYWpvciBjaXRpZXMvY291bnRpZXMgZm9sbG93ZWQgYnkgcmFuZG9tIG51bWJlcnMgaW4gcmVxdWlyZWQgZm9ybWF0LlxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDEnICsgdGhpcy5jaGFyYWN0ZXIoeyBwb29sOiAnMjM0NTY5JyB9KSArICcxICcsIHNlY3Rpb25zOiBbMyw0XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDIwICcgKyB0aGlzLmNoYXJhY3Rlcih7IHBvb2w6ICczNzgnIH0pLCBzZWN0aW9uczogWzMsNF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAyMyAnICsgdGhpcy5jaGFyYWN0ZXIoeyBwb29sOiAnODknIH0pLCBzZWN0aW9uczogWzMsNF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAyNCA3Jywgc2VjdGlvbnM6IFszLDRdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMjggJyArIHRoaXMucGljayhbJzI1JywnMjgnLCczNycsJzcxJywnODInLCc5MCcsJzkyJywnOTUnXSksIHNlY3Rpb25zOiBbMiw0XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDEyJyArIHRoaXMucGljayhbJzA0JywnMDgnLCc1NCcsJzc2JywnOTcnLCc5OCddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDEzJyArIHRoaXMucGljayhbJzYzJywnNjQnLCc4NCcsJzg2J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTQnICsgdGhpcy5waWNrKFsnMDQnLCcyMCcsJzYwJywnNjEnLCc4MCcsJzg4J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTUnICsgdGhpcy5waWNrKFsnMjQnLCcyNycsJzYyJywnNjYnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxNicgKyB0aGlzLnBpY2soWycwNicsJzI5JywnMzUnLCc0NycsJzU5JywnOTUnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJlYTogJzAxNycgKyB0aGlzLnBpY2soWycyNicsJzQ0JywnNTAnLCc2OCddKSArICcgJywgc2VjdGlvbnM6IFs1XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDE4JyArIHRoaXMucGljayhbJzI3JywnMzcnLCc4NCcsJzk3J10pICsgJyAnLCBzZWN0aW9uczogWzVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFyZWE6ICcwMTknICsgdGhpcy5waWNrKFsnMDAnLCcwNScsJzM1JywnNDYnLCc0OScsJzYzJywnOTUnXSkgKyAnICcsIHNlY3Rpb25zOiBbNV0gfVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgcGhvbmUgPSBvcHRpb25zLmZvcm1hdHRlZCA/IHVrTnVtKG51bVBpY2spIDogdWtOdW0obnVtUGljaykucmVwbGFjZSgnICcsICcnLCAnZycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG51bVBpY2sgPSB0aGlzLnBpY2soW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDcnICsgdGhpcy5waWNrKFsnNCcsJzUnLCc3JywnOCcsJzknXSksIHNlY3Rpb25zOiBbMiw2XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhcmVhOiAnMDc2MjQgJywgc2VjdGlvbnM6IFs2XSB9XG4gICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICBwaG9uZSA9IG9wdGlvbnMuZm9ybWF0dGVkID8gdWtOdW0obnVtUGljaykgOiB1a051bShudW1QaWNrKS5yZXBsYWNlKCcgJywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VzJzpcbiAgICAgICAgICAgICAgICB2YXIgYXJlYWNvZGUgPSB0aGlzLmFyZWFjb2RlKG9wdGlvbnMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgdmFyIGV4Y2hhbmdlID0gdGhpcy5uYXR1cmFsKHsgbWluOiAyLCBtYXg6IDkgfSkudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbCh7IG1pbjogMCwgbWF4OiA5IH0pLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdHVyYWwoeyBtaW46IDAsIG1heDogOSB9KS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gdGhpcy5uYXR1cmFsKHsgbWluOiAxMDAwLCBtYXg6IDk5OTkgfSkudG9TdHJpbmcoKTsgLy8gdGhpcyBjb3VsZCBiZSByYW5kb20gWzAtOV17NH1cbiAgICAgICAgICAgICAgICBwaG9uZSA9IG9wdGlvbnMuZm9ybWF0dGVkID8gYXJlYWNvZGUgKyAnICcgKyBleGNoYW5nZSArICctJyArIHN1YnNjcmliZXIgOiBhcmVhY29kZSArIGV4Y2hhbmdlICsgc3Vic2NyaWJlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGhvbmU7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucG9zdGFsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBQb3N0YWwgRGlzdHJpY3RcbiAgICAgICAgdmFyIHBkID0gdGhpcy5jaGFyYWN0ZXIoe3Bvb2w6IFwiWFZUU1JQTktMTUhKR0VDQkFcIn0pO1xuICAgICAgICAvLyBGb3J3YXJkIFNvcnRhdGlvbiBBcmVhIChGU0EpXG4gICAgICAgIHZhciBmc2EgPSBwZCArIHRoaXMubmF0dXJhbCh7bWF4OiA5fSkgKyB0aGlzLmNoYXJhY3Rlcih7YWxwaGE6IHRydWUsIGNhc2luZzogXCJ1cHBlclwifSk7XG4gICAgICAgIC8vIExvY2FsIERlbGl2ZXJ5IFVudXQgKExEVSlcbiAgICAgICAgdmFyIGxkdSA9IHRoaXMubmF0dXJhbCh7bWF4OiA5fSkgKyB0aGlzLmNoYXJhY3Rlcih7YWxwaGE6IHRydWUsIGNhc2luZzogXCJ1cHBlclwifSkgKyB0aGlzLm5hdHVyYWwoe21heDogOX0pO1xuXG4gICAgICAgIHJldHVybiBmc2EgKyBcIiBcIiArIGxkdTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wcm92aW5jZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldChcInByb3ZpbmNlc1wiKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wcm92aW5jZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAob3B0aW9ucyAmJiBvcHRpb25zLmZ1bGwpID9cbiAgICAgICAgICAgIHRoaXMucGljayh0aGlzLnByb3ZpbmNlcygpKS5uYW1lIDpcbiAgICAgICAgICAgIHRoaXMucGljayh0aGlzLnByb3ZpbmNlcygpKS5hYmJyZXZpYXRpb247XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc3RhdGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gKG9wdGlvbnMgJiYgb3B0aW9ucy5mdWxsKSA/XG4gICAgICAgICAgICB0aGlzLnBpY2sodGhpcy5zdGF0ZXMob3B0aW9ucykpLm5hbWUgOlxuICAgICAgICAgICAgdGhpcy5waWNrKHRoaXMuc3RhdGVzKG9wdGlvbnMpKS5hYmJyZXZpYXRpb247XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc3RhdGVzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHsgdXNfc3RhdGVzX2FuZF9kYzogdHJ1ZSB9KTtcblxuICAgICAgICB2YXIgc3RhdGVzLFxuICAgICAgICAgICAgdXNfc3RhdGVzX2FuZF9kYyA9IHRoaXMuZ2V0KFwidXNfc3RhdGVzX2FuZF9kY1wiKSxcbiAgICAgICAgICAgIHRlcnJpdG9yaWVzID0gdGhpcy5nZXQoXCJ0ZXJyaXRvcmllc1wiKSxcbiAgICAgICAgICAgIGFybWVkX2ZvcmNlcyA9IHRoaXMuZ2V0KFwiYXJtZWRfZm9yY2VzXCIpO1xuXG4gICAgICAgIHN0YXRlcyA9IFtdO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnVzX3N0YXRlc19hbmRfZGMpIHtcbiAgICAgICAgICAgIHN0YXRlcyA9IHN0YXRlcy5jb25jYXQodXNfc3RhdGVzX2FuZF9kYyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMudGVycml0b3JpZXMpIHtcbiAgICAgICAgICAgIHN0YXRlcyA9IHN0YXRlcy5jb25jYXQodGVycml0b3JpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmFybWVkX2ZvcmNlcykge1xuICAgICAgICAgICAgc3RhdGVzID0gc3RhdGVzLmNvbmNhdChhcm1lZF9mb3JjZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlcztcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zdHJlZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHN0cmVldCA9IHRoaXMud29yZCh7c3lsbGFibGVzOiAyfSk7XG4gICAgICAgIHN0cmVldCA9IHRoaXMuY2FwaXRhbGl6ZShzdHJlZXQpO1xuICAgICAgICBzdHJlZXQgKz0gJyAnO1xuICAgICAgICBzdHJlZXQgKz0gb3B0aW9ucy5zaG9ydF9zdWZmaXggP1xuICAgICAgICAgICAgdGhpcy5zdHJlZXRfc3VmZml4KCkuYWJicmV2aWF0aW9uIDpcbiAgICAgICAgICAgIHRoaXMuc3RyZWV0X3N1ZmZpeCgpLm5hbWU7XG4gICAgICAgIHJldHVybiBzdHJlZXQ7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuc3RyZWV0X3N1ZmZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGljayh0aGlzLnN0cmVldF9zdWZmaXhlcygpKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zdHJlZXRfc3VmZml4ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgbW9zdCBjb21tb24gc3VmZml4ZXMuXG4gICAgICAgIHJldHVybiB0aGlzLmdldChcInN0cmVldF9zdWZmaXhlc1wiKTtcbiAgICB9O1xuXG4gICAgLy8gTm90ZTogb25seSByZXR1cm5pbmcgVVMgemlwIGNvZGVzLCBpbnRlcm5hdGlvbmFsaXphdGlvbiB3aWxsIGJlIGEgd2hvbGVcbiAgICAvLyBvdGhlciBiZWFzdCB0byB0YWNrbGUgYXQgc29tZSBwb2ludC5cbiAgICBDaGFuY2UucHJvdG90eXBlLnppcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciB6aXAgPSB0aGlzLm4odGhpcy5uYXR1cmFsLCA1LCB7bWF4OiA5fSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wbHVzZm91ciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgemlwLnB1c2goJy0nKTtcbiAgICAgICAgICAgIHppcCA9IHppcC5jb25jYXQodGhpcy5uKHRoaXMubmF0dXJhbCwgNCwge21heDogOX0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB6aXAuam9pbihcIlwiKTtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIExvY2F0aW9uIC0tXG5cbiAgICAvLyAtLSBUaW1lXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmFtcG0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvb2woKSA/ICdhbScgOiAncG0nO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmRhdGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgZGF0ZV9zdHJpbmcsIGRhdGU7XG5cbiAgICAgICAgLy8gSWYgaW50ZXJ2YWwgaXMgc3BlY2lmaWVkIHdlIGlnbm9yZSBwcmVzZXRcbiAgICAgICAgaWYob3B0aW9ucyAmJiAob3B0aW9ucy5taW4gfHwgb3B0aW9ucy5tYXgpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge1xuICAgICAgICAgICAgICAgIGFtZXJpY2FuOiB0cnVlLFxuICAgICAgICAgICAgICAgIHN0cmluZzogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIG1pbiA9IHR5cGVvZiBvcHRpb25zLm1pbiAhPT0gXCJ1bmRlZmluZWRcIiA/IG9wdGlvbnMubWluLmdldFRpbWUoKSA6IDE7XG4gICAgICAgICAgICAvLyAxMDAsMDAwLDAwMCBkYXlzIG1lYXN1cmVkIHJlbGF0aXZlIHRvIG1pZG5pZ2h0IGF0IHRoZSBiZWdpbm5pbmcgb2YgMDEgSmFudWFyeSwgMTk3MCBVVEMuIGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAgICAgICAgICAgIHZhciBtYXggPSB0eXBlb2Ygb3B0aW9ucy5tYXggIT09IFwidW5kZWZpbmVkXCIgPyBvcHRpb25zLm1heC5nZXRUaW1lKCkgOiA4NjQwMDAwMDAwMDAwMDAwO1xuXG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUodGhpcy5uYXR1cmFsKHttaW46IG1pbiwgbWF4OiBtYXh9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbSA9IHRoaXMubW9udGgoe3JhdzogdHJ1ZX0pO1xuICAgICAgICAgICAgdmFyIGRheXNJbk1vbnRoID0gbS5kYXlzO1xuXG4gICAgICAgICAgICBpZihvcHRpb25zICYmIG9wdGlvbnMubW9udGgpIHtcbiAgICAgICAgICAgICAgICAvLyBNb2QgMTIgdG8gYWxsb3cgbW9udGhzIG91dHNpZGUgcmFuZ2Ugb2YgMC0xMSAobm90IGVuY291cmFnZWQsIGJ1dCBhbHNvIG5vdCBwcmV2ZW50ZWQpLlxuICAgICAgICAgICAgICAgIGRheXNJbk1vbnRoID0gdGhpcy5nZXQoJ21vbnRocycpWygob3B0aW9ucy5tb250aCAlIDEyKSArIDEyKSAlIDEyXS5kYXlzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge1xuICAgICAgICAgICAgICAgIHllYXI6IHBhcnNlSW50KHRoaXMueWVhcigpLCAxMCksXG4gICAgICAgICAgICAgICAgLy8gTmVjZXNzYXJ5IHRvIHN1YnRyYWN0IDEgYmVjYXVzZSBEYXRlKCkgMC1pbmRleGVzIG1vbnRoIGJ1dCBub3QgZGF5IG9yIHllYXJcbiAgICAgICAgICAgICAgICAvLyBmb3Igc29tZSByZWFzb24uXG4gICAgICAgICAgICAgICAgbW9udGg6IG0ubnVtZXJpYyAtIDEsXG4gICAgICAgICAgICAgICAgZGF5OiB0aGlzLm5hdHVyYWwoe21pbjogMSwgbWF4OiBkYXlzSW5Nb250aH0pLFxuICAgICAgICAgICAgICAgIGhvdXI6IHRoaXMuaG91cigpLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogdGhpcy5taW51dGUoKSxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6IHRoaXMuc2Vjb25kKCksXG4gICAgICAgICAgICAgICAgbWlsbGlzZWNvbmQ6IHRoaXMubWlsbGlzZWNvbmQoKSxcbiAgICAgICAgICAgICAgICBhbWVyaWNhbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdHJpbmc6IGZhbHNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKG9wdGlvbnMueWVhciwgb3B0aW9ucy5tb250aCwgb3B0aW9ucy5kYXksIG9wdGlvbnMuaG91ciwgb3B0aW9ucy5taW51dGUsIG9wdGlvbnMuc2Vjb25kLCBvcHRpb25zLm1pbGxpc2Vjb25kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmFtZXJpY2FuKSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgMSB0byB0aGUgbW9udGggaXMgbmVjZXNzYXJ5IGJlY2F1c2UgRGF0ZSgpIDAtaW5kZXhlc1xuICAgICAgICAgICAgLy8gbW9udGhzIGJ1dCBub3QgZGF5IGZvciBzb21lIG9kZCByZWFzb24uXG4gICAgICAgICAgICBkYXRlX3N0cmluZyA9IChkYXRlLmdldE1vbnRoKCkgKyAxKSArICcvJyArIGRhdGUuZ2V0RGF0ZSgpICsgJy8nICsgZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZV9zdHJpbmcgPSBkYXRlLmdldERhdGUoKSArICcvJyArIChkYXRlLmdldE1vbnRoKCkgKyAxKSArICcvJyArIGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnN0cmluZyA/IGRhdGVfc3RyaW5nIDogZGF0ZTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5oYW1tZXJ0aW1lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZShvcHRpb25zKS5nZXRUaW1lKCk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuaG91ciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bWluOiAxLCBtYXg6IG9wdGlvbnMgJiYgb3B0aW9ucy50d2VudHlmb3VyID8gMjQgOiAxMn0pO1xuXG4gICAgICAgIHRlc3RSYW5nZShvcHRpb25zLm1pbiA8IDEsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGxlc3MgdGhhbiAxLlwiKTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMudHdlbnR5Zm91ciAmJiBvcHRpb25zLm1heCA+IDI0LCBcIkNoYW5jZTogTWF4IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMjQgZm9yIHR3ZW50eWZvdXIgb3B0aW9uLlwiKTtcbiAgICAgICAgdGVzdFJhbmdlKCFvcHRpb25zLnR3ZW50eWZvdXIgJiYgb3B0aW9ucy5tYXggPiAxMiwgXCJDaGFuY2U6IE1heCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDEyLlwiKTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWluID4gb3B0aW9ucy5tYXgsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXguXCIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21pbjogb3B0aW9ucy5taW4sIG1heDogb3B0aW9ucy5tYXh9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5taWxsaXNlY29uZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbCh7bWF4OiA5OTl9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5taW51dGUgPSBDaGFuY2UucHJvdG90eXBlLnNlY29uZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bWluOiAwLCBtYXg6IDU5fSk7XG5cbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWluIDwgMCwgXCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgbGVzcyB0aGFuIDAuXCIpO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5tYXggPiA1OSwgXCJDaGFuY2U6IE1heCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDU5LlwiKTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWluID4gb3B0aW9ucy5tYXgsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXguXCIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoe21pbjogb3B0aW9ucy5taW4sIG1heDogb3B0aW9ucy5tYXh9KTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5tb250aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bWluOiAxLCBtYXg6IDEyfSk7XG5cbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWluIDwgMSwgXCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgbGVzcyB0aGFuIDEuXCIpO1xuICAgICAgICB0ZXN0UmFuZ2Uob3B0aW9ucy5tYXggPiAxMiwgXCJDaGFuY2U6IE1heCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDEyLlwiKTtcbiAgICAgICAgdGVzdFJhbmdlKG9wdGlvbnMubWluID4gb3B0aW9ucy5tYXgsIFwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXguXCIpO1xuXG4gICAgICAgIHZhciBtb250aCA9IHRoaXMucGljayh0aGlzLm1vbnRocygpLnNsaWNlKG9wdGlvbnMubWluIC0gMSwgb3B0aW9ucy5tYXgpKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmF3ID8gbW9udGggOiBtb250aC5uYW1lO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm1vbnRocyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwibW9udGhzXCIpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnNlY29uZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbCh7bWF4OiA1OX0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnRpbWVzdGFtcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCwgMTApfSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUueWVhciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB5ZWFyIGFzIG1pbiBpZiBub25lIHNwZWNpZmllZFxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21pbjogbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpfSk7XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBvbmUgY2VudHVyeSBhZnRlciBjdXJyZW50IHllYXIgYXMgbWF4IGlmIG5vbmUgc3BlY2lmaWVkXG4gICAgICAgIG9wdGlvbnMubWF4ID0gKHR5cGVvZiBvcHRpb25zLm1heCAhPT0gXCJ1bmRlZmluZWRcIikgPyBvcHRpb25zLm1heCA6IG9wdGlvbnMubWluICsgMTAwO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwob3B0aW9ucykudG9TdHJpbmcoKTtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIFRpbWVcblxuICAgIC8vIC0tIEZpbmFuY2UgLS1cblxuICAgIENoYW5jZS5wcm90b3R5cGUuY2MgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHR5cGUsIG51bWJlciwgdG9fZ2VuZXJhdGU7XG5cbiAgICAgICAgdHlwZSA9IChvcHRpb25zLnR5cGUpID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jY190eXBlKHsgbmFtZTogb3B0aW9ucy50eXBlLCByYXc6IHRydWUgfSkgOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNjX3R5cGUoeyByYXc6IHRydWUgfSk7XG5cbiAgICAgICAgbnVtYmVyID0gdHlwZS5wcmVmaXguc3BsaXQoXCJcIik7XG4gICAgICAgIHRvX2dlbmVyYXRlID0gdHlwZS5sZW5ndGggLSB0eXBlLnByZWZpeC5sZW5ndGggLSAxO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlcyBuIC0gMSBkaWdpdHNcbiAgICAgICAgbnVtYmVyID0gbnVtYmVyLmNvbmNhdCh0aGlzLm4odGhpcy5pbnRlZ2VyLCB0b19nZW5lcmF0ZSwge21pbjogMCwgbWF4OiA5fSkpO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlcyB0aGUgbGFzdCBkaWdpdCBhY2NvcmRpbmcgdG8gTHVobiBhbGdvcml0aG1cbiAgICAgICAgbnVtYmVyLnB1c2godGhpcy5sdWhuX2NhbGN1bGF0ZShudW1iZXIuam9pbihcIlwiKSkpO1xuXG4gICAgICAgIHJldHVybiBudW1iZXIuam9pbihcIlwiKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jY190eXBlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYW5rX2NhcmRfbnVtYmVyI0lzc3Vlcl9pZGVudGlmaWNhdGlvbl9udW1iZXJfLjI4SUlOLjI5XG4gICAgICAgIHJldHVybiB0aGlzLmdldChcImNjX3R5cGVzXCIpO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmNjX3R5cGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHZhciB0eXBlcyA9IHRoaXMuY2NfdHlwZXMoKSxcbiAgICAgICAgICAgIHR5cGUgPSBudWxsO1xuXG4gICAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAvLyBBY2NlcHQgZWl0aGVyIG5hbWUgb3Igc2hvcnRfbmFtZSB0byBzcGVjaWZ5IGNhcmQgdHlwZVxuICAgICAgICAgICAgICAgIGlmICh0eXBlc1tpXS5uYW1lID09PSBvcHRpb25zLm5hbWUgfHwgdHlwZXNbaV0uc2hvcnRfbmFtZSA9PT0gb3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyZWRpdCBjYXJkIHR5cGUgJ1wiICsgb3B0aW9ucy5uYW1lICsgXCInJyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHlwZSA9IHRoaXMucGljayh0eXBlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5yYXcgPyB0eXBlIDogdHlwZS5uYW1lO1xuICAgIH07XG5cbiAgICAvL3JldHVybiBhbGwgd29ybGQgY3VycmVuY3kgYnkgSVNPIDQyMTdcbiAgICBDaGFuY2UucHJvdG90eXBlLmN1cnJlbmN5X3R5cGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJjdXJyZW5jeV90eXBlc1wiKTtcbiAgICB9O1xuXG4gICAgLy9yZXR1cm4gcmFuZG9tIHdvcmxkIGN1cnJlbmN5IGJ5IElTTyA0MjE3XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jdXJyZW5jeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGljayh0aGlzLmN1cnJlbmN5X3R5cGVzKCkpO1xuICAgIH07XG5cbiAgICAvL1JldHVybiByYW5kb20gY29ycmVjdCBjdXJyZW5jeSBleGNoYW5nZSBwYWlyIChlLmcuIEVVUi9VU0QpIG9yIGFycmF5IG9mIGN1cnJlbmN5IGNvZGVcbiAgICBDaGFuY2UucHJvdG90eXBlLmN1cnJlbmN5X3BhaXIgPSBmdW5jdGlvbiAocmV0dXJuQXNTdHJpbmcpIHtcbiAgICAgICAgdmFyIGN1cnJlbmNpZXMgPSB0aGlzLnVuaXF1ZSh0aGlzLmN1cnJlbmN5LCAyLCB7XG4gICAgICAgICAgICBjb21wYXJhdG9yOiBmdW5jdGlvbihhcnIsIHZhbCkge1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGEgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIHNob3J0IGNpcmN1aXQgY2hlY2sgYW5kIGp1c3QgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgfHwgKGl0ZW0uY29kZSA9PT0gdmFsLmNvZGUpO1xuICAgICAgICAgICAgICAgIH0sIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJldHVybkFzU3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVuY2llc1swXS5jb2RlICsgJy8nICsgY3VycmVuY2llc1sxXS5jb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbmNpZXM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kb2xsYXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAvLyBCeSBkZWZhdWx0LCBhIHNvbWV3aGF0IG1vcmUgc2FuZSBtYXggZm9yIGRvbGxhciB0aGFuIGFsbCBhdmFpbGFibGUgbnVtYmVyc1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucywge21heCA6IDEwMDAwLCBtaW4gOiAwfSk7XG5cbiAgICAgICAgdmFyIGRvbGxhciA9IHRoaXMuZmxvYXRpbmcoe21pbjogb3B0aW9ucy5taW4sIG1heDogb3B0aW9ucy5tYXgsIGZpeGVkOiAyfSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGNlbnRzID0gZG9sbGFyLnNwbGl0KCcuJylbMV07XG5cbiAgICAgICAgaWYgKGNlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRvbGxhciArPSAnLjAwJztcbiAgICAgICAgfSBlbHNlIGlmIChjZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBkb2xsYXIgPSBkb2xsYXIgKyAnMCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZG9sbGFyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuICctJCcgKyBkb2xsYXIucmVwbGFjZSgnLScsICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJCcgKyBkb2xsYXI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHZhciBleHAgPSB7fTtcblxuICAgICAgICBleHAueWVhciA9IHRoaXMuZXhwX3llYXIoKTtcblxuICAgICAgICAvLyBJZiB0aGUgeWVhciBpcyB0aGlzIHllYXIsIG5lZWQgdG8gZW5zdXJlIG1vbnRoIGlzIGdyZWF0ZXIgdGhhbiB0aGVcbiAgICAgICAgLy8gY3VycmVudCBtb250aCBvciB0aGlzIGV4cGlyYXRpb24gd2lsbCBub3QgYmUgdmFsaWRcbiAgICAgICAgaWYgKGV4cC55ZWFyID09PSAobmV3IERhdGUoKS5nZXRGdWxsWWVhcigpKS50b1N0cmluZygpKSB7XG4gICAgICAgICAgICBleHAubW9udGggPSB0aGlzLmV4cF9tb250aCh7ZnV0dXJlOiB0cnVlfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHAubW9udGggPSB0aGlzLmV4cF9tb250aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmF3ID8gZXhwIDogZXhwLm1vbnRoICsgJy8nICsgZXhwLnllYXI7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUuZXhwX21vbnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgbW9udGgsIG1vbnRoX2ludCxcbiAgICAgICAgICAgIC8vIERhdGUgb2JqZWN0IG1vbnRocyBhcmUgMCBpbmRleGVkXG4gICAgICAgICAgICBjdXJNb250aCA9IG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDE7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZnV0dXJlKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgbW9udGggPSB0aGlzLm1vbnRoKHtyYXc6IHRydWV9KS5udW1lcmljO1xuICAgICAgICAgICAgICAgIG1vbnRoX2ludCA9IHBhcnNlSW50KG1vbnRoLCAxMCk7XG4gICAgICAgICAgICB9IHdoaWxlIChtb250aF9pbnQgPD0gY3VyTW9udGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9udGggPSB0aGlzLm1vbnRoKHtyYXc6IHRydWV9KS5udW1lcmljO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vbnRoO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmV4cF95ZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKHttYXg6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSArIDEwfSk7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBGaW5hbmNlXG5cbiAgICAvLyAtLSBSZWdpb25hbFxuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5wbF9wZXNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHRoaXMubmF0dXJhbCh7bWluOiAxLCBtYXg6IDk5OTk5OTk5OTl9KTtcbiAgICAgICAgdmFyIGFyciA9IHRoaXMucGFkKG51bWJlciwgMTApLnNwbGl0KCcnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFycltpXSA9IHBhcnNlSW50KGFycltpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY29udHJvbE51bWJlciA9ICgxICogYXJyWzBdICsgMyAqIGFyclsxXSArIDcgKiBhcnJbMl0gKyA5ICogYXJyWzNdICsgMSAqIGFycls0XSArIDMgKiBhcnJbNV0gKyA3ICogYXJyWzZdICsgOSAqIGFycls3XSArIDEgKiBhcnJbOF0gKyAzICogYXJyWzldKSAlIDEwO1xuICAgICAgICBpZihjb250cm9sTnVtYmVyICE9PSAwKSB7XG4gICAgICAgICAgICBjb250cm9sTnVtYmVyID0gMTAgLSBjb250cm9sTnVtYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyci5qb2luKCcnKSArIGNvbnRyb2xOdW1iZXI7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucGxfbmlwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbnVtYmVyID0gdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogOTk5OTk5OTk5fSk7XG4gICAgICAgIHZhciBhcnIgPSB0aGlzLnBhZChudW1iZXIsIDkpLnNwbGl0KCcnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFycltpXSA9IHBhcnNlSW50KGFycltpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY29udHJvbE51bWJlciA9ICg2ICogYXJyWzBdICsgNSAqIGFyclsxXSArIDcgKiBhcnJbMl0gKyAyICogYXJyWzNdICsgMyAqIGFycls0XSArIDQgKiBhcnJbNV0gKyA1ICogYXJyWzZdICsgNiAqIGFycls3XSArIDcgKiBhcnJbOF0pICUgMTE7XG4gICAgICAgIGlmKGNvbnRyb2xOdW1iZXIgPT09IDEwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wbF9uaXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnIuam9pbignJykgKyBjb250cm9sTnVtYmVyO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnBsX3JlZ29uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbnVtYmVyID0gdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogOTk5OTk5OTl9KTtcbiAgICAgICAgdmFyIGFyciA9IHRoaXMucGFkKG51bWJlciwgOCkuc3BsaXQoJycpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJyW2ldID0gcGFyc2VJbnQoYXJyW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb250cm9sTnVtYmVyID0gKDggKiBhcnJbMF0gKyA5ICogYXJyWzFdICsgMiAqIGFyclsyXSArIDMgKiBhcnJbM10gKyA0ICogYXJyWzRdICsgNSAqIGFycls1XSArIDYgKiBhcnJbNl0gKyA3ICogYXJyWzddKSAlIDExO1xuICAgICAgICBpZihjb250cm9sTnVtYmVyID09PSAxMCkge1xuICAgICAgICAgICAgY29udHJvbE51bWJlciA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oJycpICsgY29udHJvbE51bWJlcjtcbiAgICB9O1xuXG4gICAgLy8gLS0gRW5kIFJlZ2lvbmFsXG5cbiAgICAvLyAtLSBNaXNjZWxsYW5lb3VzIC0tXG5cbiAgICAvLyBEaWNlIC0gRm9yIGFsbCB0aGUgYm9hcmQgZ2FtZSBnZWVrcyBvdXQgdGhlcmUsIG15c2VsZiBpbmNsdWRlZCA7KVxuICAgIGZ1bmN0aW9uIGRpY2VGbiAocmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwocmFuZ2UpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBDaGFuY2UucHJvdG90eXBlLmQ0ID0gZGljZUZuKHttaW46IDEsIG1heDogNH0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDYgPSBkaWNlRm4oe21pbjogMSwgbWF4OiA2fSk7XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kOCA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDh9KTtcbiAgICBDaGFuY2UucHJvdG90eXBlLmQxMCA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDEwfSk7XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kMTIgPSBkaWNlRm4oe21pbjogMSwgbWF4OiAxMn0pO1xuICAgIENoYW5jZS5wcm90b3R5cGUuZDIwID0gZGljZUZuKHttaW46IDEsIG1heDogMjB9KTtcbiAgICBDaGFuY2UucHJvdG90eXBlLmQzMCA9IGRpY2VGbih7bWluOiAxLCBtYXg6IDMwfSk7XG4gICAgQ2hhbmNlLnByb3RvdHlwZS5kMTAwID0gZGljZUZuKHttaW46IDEsIG1heDogMTAwfSk7XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLnJwZyA9IGZ1bmN0aW9uICh0aHJvd24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXRocm93bikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBIHR5cGUgb2YgZGllIHJvbGwgbXVzdCBiZSBpbmNsdWRlZFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBiaXRzID0gdGhyb3duLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJkXCIpLFxuICAgICAgICAgICAgICAgIHJvbGxzID0gW107XG5cbiAgICAgICAgICAgIGlmIChiaXRzLmxlbmd0aCAhPT0gMiB8fCAhcGFyc2VJbnQoYml0c1swXSwgMTApIHx8ICFwYXJzZUludChiaXRzWzFdLCAxMCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGZvcm1hdCBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgI2QjIHdoZXJlIHRoZSBmaXJzdCAjIGlzIHRoZSBudW1iZXIgb2YgZGljZSB0byByb2xsLCB0aGUgc2Vjb25kICMgaXMgdGhlIG1heCBvZiBlYWNoIGRpZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBiaXRzWzBdOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgcm9sbHNbaSAtIDFdID0gdGhpcy5uYXR1cmFsKHttaW46IDEsIG1heDogYml0c1sxXX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICh0eXBlb2Ygb3B0aW9ucy5zdW0gIT09ICd1bmRlZmluZWQnICYmIG9wdGlvbnMuc3VtKSA/IHJvbGxzLnJlZHVjZShmdW5jdGlvbiAocCwgYykgeyByZXR1cm4gcCArIGM7IH0pIDogcm9sbHM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gR3VpZFxuICAgIENoYW5jZS5wcm90b3R5cGUuZ3VpZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7IHZlcnNpb246IDUgfSk7XG5cbiAgICAgICAgdmFyIGd1aWRfcG9vbCA9IFwiYWJjZGVmMTIzNDU2Nzg5MFwiLFxuICAgICAgICAgICAgdmFyaWFudF9wb29sID0gXCJhYjg5XCIsXG4gICAgICAgICAgICBndWlkID0gdGhpcy5zdHJpbmcoeyBwb29sOiBndWlkX3Bvb2wsIGxlbmd0aDogOCB9KSArICctJyArXG4gICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmcoeyBwb29sOiBndWlkX3Bvb2wsIGxlbmd0aDogNCB9KSArICctJyArXG4gICAgICAgICAgICAgICAgICAgLy8gVGhlIFZlcnNpb25cbiAgICAgICAgICAgICAgICAgICBvcHRpb25zLnZlcnNpb24gK1xuICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKHsgcG9vbDogZ3VpZF9wb29sLCBsZW5ndGg6IDMgfSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgIC8vIFRoZSBWYXJpYW50XG4gICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmcoeyBwb29sOiB2YXJpYW50X3Bvb2wsIGxlbmd0aDogMSB9KSArXG4gICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmcoeyBwb29sOiBndWlkX3Bvb2wsIGxlbmd0aDogMyB9KSArICctJyArXG4gICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmcoeyBwb29sOiBndWlkX3Bvb2wsIGxlbmd0aDogMTIgfSk7XG4gICAgICAgIHJldHVybiBndWlkO1xuICAgIH07XG5cbiAgICAvLyBIYXNoXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5oYXNoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtsZW5ndGggOiA0MCwgY2FzaW5nOiAnbG93ZXInfSk7XG4gICAgICAgIHZhciBwb29sID0gb3B0aW9ucy5jYXNpbmcgPT09ICd1cHBlcicgPyBIRVhfUE9PTC50b1VwcGVyQ2FzZSgpIDogSEVYX1BPT0w7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZyh7cG9vbDogcG9vbCwgbGVuZ3RoOiBvcHRpb25zLmxlbmd0aH0pO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLmx1aG5fY2hlY2sgPSBmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgIHZhciBzdHIgPSBudW0udG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGNoZWNrRGlnaXQgPSArc3RyLnN1YnN0cmluZyhzdHIubGVuZ3RoIC0gMSk7XG4gICAgICAgIHJldHVybiBjaGVja0RpZ2l0ID09PSB0aGlzLmx1aG5fY2FsY3VsYXRlKCtzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAxKSk7XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUubHVobl9jYWxjdWxhdGUgPSBmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgIHZhciBkaWdpdHMgPSBudW0udG9TdHJpbmcoKS5zcGxpdChcIlwiKS5yZXZlcnNlKCk7XG4gICAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgICB2YXIgZGlnaXQ7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoOyBsID4gaTsgKytpKSB7XG4gICAgICAgICAgICBkaWdpdCA9ICtkaWdpdHNbaV07XG4gICAgICAgICAgICBpZiAoaSAlIDIgPT09IDApIHtcbiAgICAgICAgICAgICAgICBkaWdpdCAqPSAyO1xuICAgICAgICAgICAgICAgIGlmIChkaWdpdCA+IDkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlnaXQgLT0gOTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdW0gKz0gZGlnaXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChzdW0gKiA5KSAlIDEwO1xuICAgIH07XG5cbiAgICAvLyBNRDUgSGFzaFxuICAgIENoYW5jZS5wcm90b3R5cGUubWQ1ID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICB2YXIgb3B0cyA9IHsgc3RyOiAnJywga2V5OiBudWxsLCByYXc6IGZhbHNlIH07XG5cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRzLnN0ciA9IHRoaXMuc3RyaW5nKCk7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBvcHRzLnN0ciA9IG9wdGlvbnM7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKG9wdGlvbnMuY29uc3RydWN0b3IgPT09ICdBcnJheScpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0cyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIG9wdHMpO1xuXG4gICAgICAgIGlmKCFvcHRzLnN0cil7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIHRvIHJldHVybiBhbiBtZDUgaGFzaC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmJpbWQ1Lm1kNShvcHRzLnN0ciwgb3B0cy5rZXksIG9wdHMucmF3KTtcbiAgICB9O1xuXG4gICAgdmFyIGRhdGEgPSB7XG5cbiAgICAgICAgZmlyc3ROYW1lczoge1xuICAgICAgICAgICAgXCJtYWxlXCI6IFtcIkphbWVzXCIsIFwiSm9oblwiLCBcIlJvYmVydFwiLCBcIk1pY2hhZWxcIiwgXCJXaWxsaWFtXCIsIFwiRGF2aWRcIiwgXCJSaWNoYXJkXCIsIFwiSm9zZXBoXCIsIFwiQ2hhcmxlc1wiLCBcIlRob21hc1wiLCBcIkNocmlzdG9waGVyXCIsIFwiRGFuaWVsXCIsIFwiTWF0dGhld1wiLCBcIkdlb3JnZVwiLCBcIkRvbmFsZFwiLCBcIkFudGhvbnlcIiwgXCJQYXVsXCIsIFwiTWFya1wiLCBcIkVkd2FyZFwiLCBcIlN0ZXZlblwiLCBcIktlbm5ldGhcIiwgXCJBbmRyZXdcIiwgXCJCcmlhblwiLCBcIkpvc2h1YVwiLCBcIktldmluXCIsIFwiUm9uYWxkXCIsIFwiVGltb3RoeVwiLCBcIkphc29uXCIsIFwiSmVmZnJleVwiLCBcIkZyYW5rXCIsIFwiR2FyeVwiLCBcIlJ5YW5cIiwgXCJOaWNob2xhc1wiLCBcIkVyaWNcIiwgXCJTdGVwaGVuXCIsIFwiSmFjb2JcIiwgXCJMYXJyeVwiLCBcIkpvbmF0aGFuXCIsIFwiU2NvdHRcIiwgXCJSYXltb25kXCIsIFwiSnVzdGluXCIsIFwiQnJhbmRvblwiLCBcIkdyZWdvcnlcIiwgXCJTYW11ZWxcIiwgXCJCZW5qYW1pblwiLCBcIlBhdHJpY2tcIiwgXCJKYWNrXCIsIFwiSGVucnlcIiwgXCJXYWx0ZXJcIiwgXCJEZW5uaXNcIiwgXCJKZXJyeVwiLCBcIkFsZXhhbmRlclwiLCBcIlBldGVyXCIsIFwiVHlsZXJcIiwgXCJEb3VnbGFzXCIsIFwiSGFyb2xkXCIsIFwiQWFyb25cIiwgXCJKb3NlXCIsIFwiQWRhbVwiLCBcIkFydGh1clwiLCBcIlphY2hhcnlcIiwgXCJDYXJsXCIsIFwiTmF0aGFuXCIsIFwiQWxiZXJ0XCIsIFwiS3lsZVwiLCBcIkxhd3JlbmNlXCIsIFwiSm9lXCIsIFwiV2lsbGllXCIsIFwiR2VyYWxkXCIsIFwiUm9nZXJcIiwgXCJLZWl0aFwiLCBcIkplcmVteVwiLCBcIlRlcnJ5XCIsIFwiSGFycnlcIiwgXCJSYWxwaFwiLCBcIlNlYW5cIiwgXCJKZXNzZVwiLCBcIlJveVwiLCBcIkxvdWlzXCIsIFwiQmlsbHlcIiwgXCJBdXN0aW5cIiwgXCJCcnVjZVwiLCBcIkV1Z2VuZVwiLCBcIkNocmlzdGlhblwiLCBcIkJyeWFuXCIsIFwiV2F5bmVcIiwgXCJSdXNzZWxsXCIsIFwiSG93YXJkXCIsIFwiRnJlZFwiLCBcIkV0aGFuXCIsIFwiSm9yZGFuXCIsIFwiUGhpbGlwXCIsIFwiQWxhblwiLCBcIkp1YW5cIiwgXCJSYW5keVwiLCBcIlZpbmNlbnRcIiwgXCJCb2JieVwiLCBcIkR5bGFuXCIsIFwiSm9obm55XCIsIFwiUGhpbGxpcFwiLCBcIlZpY3RvclwiLCBcIkNsYXJlbmNlXCIsIFwiRXJuZXN0XCIsIFwiTWFydGluXCIsIFwiQ3JhaWdcIiwgXCJTdGFubGV5XCIsIFwiU2hhd25cIiwgXCJUcmF2aXNcIiwgXCJCcmFkbGV5XCIsIFwiTGVvbmFyZFwiLCBcIkVhcmxcIiwgXCJHYWJyaWVsXCIsIFwiSmltbXlcIiwgXCJGcmFuY2lzXCIsIFwiVG9kZFwiLCBcIk5vYWhcIiwgXCJEYW5ueVwiLCBcIkRhbGVcIiwgXCJDb2R5XCIsIFwiQ2FybG9zXCIsIFwiQWxsZW5cIiwgXCJGcmVkZXJpY2tcIiwgXCJMb2dhblwiLCBcIkN1cnRpc1wiLCBcIkFsZXhcIiwgXCJKb2VsXCIsIFwiTHVpc1wiLCBcIk5vcm1hblwiLCBcIk1hcnZpblwiLCBcIkdsZW5uXCIsIFwiVG9ueVwiLCBcIk5hdGhhbmllbFwiLCBcIlJvZG5leVwiLCBcIk1lbHZpblwiLCBcIkFsZnJlZFwiLCBcIlN0ZXZlXCIsIFwiQ2FtZXJvblwiLCBcIkNoYWRcIiwgXCJFZHdpblwiLCBcIkNhbGViXCIsIFwiRXZhblwiLCBcIkFudG9uaW9cIiwgXCJMZWVcIiwgXCJIZXJiZXJ0XCIsIFwiSmVmZmVyeVwiLCBcIklzYWFjXCIsIFwiRGVyZWtcIiwgXCJSaWNreVwiLCBcIk1hcmN1c1wiLCBcIlRoZW9kb3JlXCIsIFwiRWxpamFoXCIsIFwiTHVrZVwiLCBcIkplc3VzXCIsIFwiRWRkaWVcIiwgXCJUcm95XCIsIFwiTWlrZVwiLCBcIkR1c3RpblwiLCBcIlJheVwiLCBcIkFkcmlhblwiLCBcIkJlcm5hcmRcIiwgXCJMZXJveVwiLCBcIkFuZ2VsXCIsIFwiUmFuZGFsbFwiLCBcIldlc2xleVwiLCBcIklhblwiLCBcIkphcmVkXCIsIFwiTWFzb25cIiwgXCJIdW50ZXJcIiwgXCJDYWx2aW5cIiwgXCJPc2NhclwiLCBcIkNsaWZmb3JkXCIsIFwiSmF5XCIsIFwiU2hhbmVcIiwgXCJSb25uaWVcIiwgXCJCYXJyeVwiLCBcIkx1Y2FzXCIsIFwiQ29yZXlcIiwgXCJNYW51ZWxcIiwgXCJMZW9cIiwgXCJUb21teVwiLCBcIldhcnJlblwiLCBcIkphY2tzb25cIiwgXCJJc2FpYWhcIiwgXCJDb25ub3JcIiwgXCJEb25cIiwgXCJEZWFuXCIsIFwiSm9uXCIsIFwiSnVsaWFuXCIsIFwiTWlndWVsXCIsIFwiQmlsbFwiLCBcIkxsb3lkXCIsIFwiQ2hhcmxpZVwiLCBcIk1pdGNoZWxsXCIsIFwiTGVvblwiLCBcIkplcm9tZVwiLCBcIkRhcnJlbGxcIiwgXCJKZXJlbWlhaFwiLCBcIkFsdmluXCIsIFwiQnJldHRcIiwgXCJTZXRoXCIsIFwiRmxveWRcIiwgXCJKaW1cIiwgXCJCbGFrZVwiLCBcIk1pY2hlYWxcIiwgXCJHb3Jkb25cIiwgXCJUcmV2b3JcIiwgXCJMZXdpc1wiLCBcIkVyaWtcIiwgXCJFZGdhclwiLCBcIlZlcm5vblwiLCBcIkRldmluXCIsIFwiR2F2aW5cIiwgXCJKYXlkZW5cIiwgXCJDaHJpc1wiLCBcIkNseWRlXCIsIFwiVG9tXCIsIFwiRGVycmlja1wiLCBcIk1hcmlvXCIsIFwiQnJlbnRcIiwgXCJNYXJjXCIsIFwiSGVybWFuXCIsIFwiQ2hhc2VcIiwgXCJEb21pbmljXCIsIFwiUmljYXJkb1wiLCBcIkZyYW5rbGluXCIsIFwiTWF1cmljZVwiLCBcIk1heFwiLCBcIkFpZGVuXCIsIFwiT3dlblwiLCBcIkxlc3RlclwiLCBcIkdpbGJlcnRcIiwgXCJFbG1lclwiLCBcIkdlbmVcIiwgXCJGcmFuY2lzY29cIiwgXCJHbGVuXCIsIFwiQ29yeVwiLCBcIkdhcnJldHRcIiwgXCJDbGF5dG9uXCIsIFwiU2FtXCIsIFwiSm9yZ2VcIiwgXCJDaGVzdGVyXCIsIFwiQWxlamFuZHJvXCIsIFwiSmVmZlwiLCBcIkhhcnZleVwiLCBcIk1pbHRvblwiLCBcIkNvbGVcIiwgXCJJdmFuXCIsIFwiQW5kcmVcIiwgXCJEdWFuZVwiLCBcIkxhbmRvblwiXSxcbiAgICAgICAgICAgIFwiZmVtYWxlXCI6IFtcIk1hcnlcIiwgXCJFbW1hXCIsIFwiRWxpemFiZXRoXCIsIFwiTWlubmllXCIsIFwiTWFyZ2FyZXRcIiwgXCJJZGFcIiwgXCJBbGljZVwiLCBcIkJlcnRoYVwiLCBcIlNhcmFoXCIsIFwiQW5uaWVcIiwgXCJDbGFyYVwiLCBcIkVsbGFcIiwgXCJGbG9yZW5jZVwiLCBcIkNvcmFcIiwgXCJNYXJ0aGFcIiwgXCJMYXVyYVwiLCBcIk5lbGxpZVwiLCBcIkdyYWNlXCIsIFwiQ2FycmllXCIsIFwiTWF1ZGVcIiwgXCJNYWJlbFwiLCBcIkJlc3NpZVwiLCBcIkplbm5pZVwiLCBcIkdlcnRydWRlXCIsIFwiSnVsaWFcIiwgXCJIYXR0aWVcIiwgXCJFZGl0aFwiLCBcIk1hdHRpZVwiLCBcIlJvc2VcIiwgXCJDYXRoZXJpbmVcIiwgXCJMaWxsaWFuXCIsIFwiQWRhXCIsIFwiTGlsbGllXCIsIFwiSGVsZW5cIiwgXCJKZXNzaWVcIiwgXCJMb3Vpc2VcIiwgXCJFdGhlbFwiLCBcIkx1bGFcIiwgXCJNeXJ0bGVcIiwgXCJFdmFcIiwgXCJGcmFuY2VzXCIsIFwiTGVuYVwiLCBcIkx1Y3lcIiwgXCJFZG5hXCIsIFwiTWFnZ2llXCIsIFwiUGVhcmxcIiwgXCJEYWlzeVwiLCBcIkZhbm5pZVwiLCBcIkpvc2VwaGluZVwiLCBcIkRvcmFcIiwgXCJSb3NhXCIsIFwiS2F0aGVyaW5lXCIsIFwiQWduZXNcIiwgXCJNYXJpZVwiLCBcIk5vcmFcIiwgXCJNYXlcIiwgXCJNYW1pZVwiLCBcIkJsYW5jaGVcIiwgXCJTdGVsbGFcIiwgXCJFbGxlblwiLCBcIk5hbmN5XCIsIFwiRWZmaWVcIiwgXCJTYWxsaWVcIiwgXCJOZXR0aWVcIiwgXCJEZWxsYVwiLCBcIkxpenppZVwiLCBcIkZsb3JhXCIsIFwiU3VzaWVcIiwgXCJNYXVkXCIsIFwiTWFlXCIsIFwiRXR0YVwiLCBcIkhhcnJpZXRcIiwgXCJTYWRpZVwiLCBcIkNhcm9saW5lXCIsIFwiS2F0aWVcIiwgXCJMeWRpYVwiLCBcIkVsc2llXCIsIFwiS2F0ZVwiLCBcIlN1c2FuXCIsIFwiTW9sbGllXCIsIFwiQWxtYVwiLCBcIkFkZGllXCIsIFwiR2VvcmdpYVwiLCBcIkVsaXphXCIsIFwiTHVsdVwiLCBcIk5hbm5pZVwiLCBcIkxvdHRpZVwiLCBcIkFtYW5kYVwiLCBcIkJlbGxlXCIsIFwiQ2hhcmxvdHRlXCIsIFwiUmViZWNjYVwiLCBcIlJ1dGhcIiwgXCJWaW9sYVwiLCBcIk9saXZlXCIsIFwiQW1lbGlhXCIsIFwiSGFubmFoXCIsIFwiSmFuZVwiLCBcIlZpcmdpbmlhXCIsIFwiRW1pbHlcIiwgXCJNYXRpbGRhXCIsIFwiSXJlbmVcIiwgXCJLYXRocnluXCIsIFwiRXN0aGVyXCIsIFwiV2lsbGllXCIsIFwiSGVucmlldHRhXCIsIFwiT2xsaWVcIiwgXCJBbXlcIiwgXCJSYWNoZWxcIiwgXCJTYXJhXCIsIFwiRXN0ZWxsYVwiLCBcIlRoZXJlc2FcIiwgXCJBdWd1c3RhXCIsIFwiT3JhXCIsIFwiUGF1bGluZVwiLCBcIkpvc2llXCIsIFwiTG9sYVwiLCBcIlNvcGhpYVwiLCBcIkxlb25hXCIsIFwiQW5uZVwiLCBcIk1pbGRyZWRcIiwgXCJBbm5cIiwgXCJCZXVsYWhcIiwgXCJDYWxsaWVcIiwgXCJMb3VcIiwgXCJEZWxpYVwiLCBcIkVsZWFub3JcIiwgXCJCYXJiYXJhXCIsIFwiSXZhXCIsIFwiTG91aXNhXCIsIFwiTWFyaWFcIiwgXCJNYXltZVwiLCBcIkV2ZWx5blwiLCBcIkVzdGVsbGVcIiwgXCJOaW5hXCIsIFwiQmV0dHlcIiwgXCJNYXJpb25cIiwgXCJCZXR0aWVcIiwgXCJEb3JvdGh5XCIsIFwiTHVlbGxhXCIsIFwiSW5lelwiLCBcIkxlbGFcIiwgXCJSb3NpZVwiLCBcIkFsbGllXCIsIFwiTWlsbGllXCIsIFwiSmFuaWVcIiwgXCJDb3JuZWxpYVwiLCBcIlZpY3RvcmlhXCIsIFwiUnVieVwiLCBcIldpbmlmcmVkXCIsIFwiQWx0YVwiLCBcIkNlbGlhXCIsIFwiQ2hyaXN0aW5lXCIsIFwiQmVhdHJpY2VcIiwgXCJCaXJkaWVcIiwgXCJIYXJyaWV0dFwiLCBcIk1hYmxlXCIsIFwiTXlyYVwiLCBcIlNvcGhpZVwiLCBcIlRpbGxpZVwiLCBcIklzYWJlbFwiLCBcIlN5bHZpYVwiLCBcIkNhcm9seW5cIiwgXCJJc2FiZWxsZVwiLCBcIkxlaWxhXCIsIFwiU2FsbHlcIiwgXCJJbmFcIiwgXCJFc3NpZVwiLCBcIkJlcnRpZVwiLCBcIk5lbGxcIiwgXCJBbGJlcnRhXCIsIFwiS2F0aGFyaW5lXCIsIFwiTG9yYVwiLCBcIlJlbmFcIiwgXCJNaW5hXCIsIFwiUmhvZGFcIiwgXCJNYXRoaWxkYVwiLCBcIkFiYmllXCIsIFwiRXVsYVwiLCBcIkRvbGxpZVwiLCBcIkhldHRpZVwiLCBcIkV1bmljZVwiLCBcIkZhbm55XCIsIFwiT2xhXCIsIFwiTGVub3JhXCIsIFwiQWRlbGFpZGVcIiwgXCJDaHJpc3RpbmFcIiwgXCJMZWxpYVwiLCBcIk5lbGxlXCIsIFwiU3VlXCIsIFwiSm9oYW5uYVwiLCBcIkxpbGx5XCIsIFwiTHVjaW5kYVwiLCBcIk1pbmVydmFcIiwgXCJMZXR0aWVcIiwgXCJSb3hpZVwiLCBcIkN5bnRoaWFcIiwgXCJIZWxlbmFcIiwgXCJIaWxkYVwiLCBcIkh1bGRhXCIsIFwiQmVybmljZVwiLCBcIkdlbmV2aWV2ZVwiLCBcIkplYW5cIiwgXCJDb3JkZWxpYVwiLCBcIk1hcmlhblwiLCBcIkZyYW5jaXNcIiwgXCJKZWFuZXR0ZVwiLCBcIkFkZWxpbmVcIiwgXCJHdXNzaWVcIiwgXCJMZWFoXCIsIFwiTG9pc1wiLCBcIkx1cmFcIiwgXCJNaXR0aWVcIiwgXCJIYWxsaWVcIiwgXCJJc2FiZWxsYVwiLCBcIk9sZ2FcIiwgXCJQaG9lYmVcIiwgXCJUZXJlc2FcIiwgXCJIZXN0ZXJcIiwgXCJMaWRhXCIsIFwiTGluYVwiLCBcIldpbm5pZVwiLCBcIkNsYXVkaWFcIiwgXCJNYXJndWVyaXRlXCIsIFwiVmVyYVwiLCBcIkNlY2VsaWFcIiwgXCJCZXNzXCIsIFwiRW1pbGllXCIsIFwiSm9oblwiLCBcIlJvc2V0dGFcIiwgXCJWZXJuYVwiLCBcIk15cnRpZVwiLCBcIkNlY2lsaWFcIiwgXCJFbHZhXCIsIFwiT2xpdmlhXCIsIFwiT3BoZWxpYVwiLCBcIkdlb3JnaWVcIiwgXCJFbG5vcmFcIiwgXCJWaW9sZXRcIiwgXCJBZGVsZVwiLCBcIkxpbHlcIiwgXCJMaW5uaWVcIiwgXCJMb3JldHRhXCIsIFwiTWFkZ2VcIiwgXCJQb2xseVwiLCBcIlZpcmdpZVwiLCBcIkV1Z2VuaWFcIiwgXCJMdWNpbGVcIiwgXCJMdWNpbGxlXCIsIFwiTWFiZWxsZVwiLCBcIlJvc2FsaWVcIl1cbiAgICAgICAgfSxcblxuICAgICAgICBsYXN0TmFtZXM6IFsnU21pdGgnLCAnSm9obnNvbicsICdXaWxsaWFtcycsICdKb25lcycsICdCcm93bicsICdEYXZpcycsICdNaWxsZXInLCAnV2lsc29uJywgJ01vb3JlJywgJ1RheWxvcicsICdBbmRlcnNvbicsICdUaG9tYXMnLCAnSmFja3NvbicsICdXaGl0ZScsICdIYXJyaXMnLCAnTWFydGluJywgJ1Rob21wc29uJywgJ0dhcmNpYScsICdNYXJ0aW5leicsICdSb2JpbnNvbicsICdDbGFyaycsICdSb2RyaWd1ZXonLCAnTGV3aXMnLCAnTGVlJywgJ1dhbGtlcicsICdIYWxsJywgJ0FsbGVuJywgJ1lvdW5nJywgJ0hlcm5hbmRleicsICdLaW5nJywgJ1dyaWdodCcsICdMb3BleicsICdIaWxsJywgJ1Njb3R0JywgJ0dyZWVuJywgJ0FkYW1zJywgJ0Jha2VyJywgJ0dvbnphbGV6JywgJ05lbHNvbicsICdDYXJ0ZXInLCAnTWl0Y2hlbGwnLCAnUGVyZXonLCAnUm9iZXJ0cycsICdUdXJuZXInLCAnUGhpbGxpcHMnLCAnQ2FtcGJlbGwnLCAnUGFya2VyJywgJ0V2YW5zJywgJ0Vkd2FyZHMnLCAnQ29sbGlucycsICdTdGV3YXJ0JywgJ1NhbmNoZXonLCAnTW9ycmlzJywgJ1JvZ2VycycsICdSZWVkJywgJ0Nvb2snLCAnTW9yZ2FuJywgJ0JlbGwnLCAnTXVycGh5JywgJ0JhaWxleScsICdSaXZlcmEnLCAnQ29vcGVyJywgJ1JpY2hhcmRzb24nLCAnQ294JywgJ0hvd2FyZCcsICdXYXJkJywgJ1RvcnJlcycsICdQZXRlcnNvbicsICdHcmF5JywgJ1JhbWlyZXonLCAnSmFtZXMnLCAnV2F0c29uJywgJ0Jyb29rcycsICdLZWxseScsICdTYW5kZXJzJywgJ1ByaWNlJywgJ0Jlbm5ldHQnLCAnV29vZCcsICdCYXJuZXMnLCAnUm9zcycsICdIZW5kZXJzb24nLCAnQ29sZW1hbicsICdKZW5raW5zJywgJ1BlcnJ5JywgJ1Bvd2VsbCcsICdMb25nJywgJ1BhdHRlcnNvbicsICdIdWdoZXMnLCAnRmxvcmVzJywgJ1dhc2hpbmd0b24nLCAnQnV0bGVyJywgJ1NpbW1vbnMnLCAnRm9zdGVyJywgJ0dvbnphbGVzJywgJ0JyeWFudCcsICdBbGV4YW5kZXInLCAnUnVzc2VsbCcsICdHcmlmZmluJywgJ0RpYXonLCAnSGF5ZXMnLCAnTXllcnMnLCAnRm9yZCcsICdIYW1pbHRvbicsICdHcmFoYW0nLCAnU3VsbGl2YW4nLCAnV2FsbGFjZScsICdXb29kcycsICdDb2xlJywgJ1dlc3QnLCAnSm9yZGFuJywgJ093ZW5zJywgJ1JleW5vbGRzJywgJ0Zpc2hlcicsICdFbGxpcycsICdIYXJyaXNvbicsICdHaWJzb24nLCAnTWNEb25hbGQnLCAnQ3J1eicsICdNYXJzaGFsbCcsICdPcnRpeicsICdHb21leicsICdNdXJyYXknLCAnRnJlZW1hbicsICdXZWxscycsICdXZWJiJywgJ1NpbXBzb24nLCAnU3RldmVucycsICdUdWNrZXInLCAnUG9ydGVyJywgJ0h1bnRlcicsICdIaWNrcycsICdDcmF3Zm9yZCcsICdIZW5yeScsICdCb3lkJywgJ01hc29uJywgJ01vcmFsZXMnLCAnS2VubmVkeScsICdXYXJyZW4nLCAnRGl4b24nLCAnUmFtb3MnLCAnUmV5ZXMnLCAnQnVybnMnLCAnR29yZG9uJywgJ1NoYXcnLCAnSG9sbWVzJywgJ1JpY2UnLCAnUm9iZXJ0c29uJywgJ0h1bnQnLCAnQmxhY2snLCAnRGFuaWVscycsICdQYWxtZXInLCAnTWlsbHMnLCAnTmljaG9scycsICdHcmFudCcsICdLbmlnaHQnLCAnRmVyZ3Vzb24nLCAnUm9zZScsICdTdG9uZScsICdIYXdraW5zJywgJ0R1bm4nLCAnUGVya2lucycsICdIdWRzb24nLCAnU3BlbmNlcicsICdHYXJkbmVyJywgJ1N0ZXBoZW5zJywgJ1BheW5lJywgJ1BpZXJjZScsICdCZXJyeScsICdNYXR0aGV3cycsICdBcm5vbGQnLCAnV2FnbmVyJywgJ1dpbGxpcycsICdSYXknLCAnV2F0a2lucycsICdPbHNvbicsICdDYXJyb2xsJywgJ0R1bmNhbicsICdTbnlkZXInLCAnSGFydCcsICdDdW5uaW5naGFtJywgJ0JyYWRsZXknLCAnTGFuZScsICdBbmRyZXdzJywgJ1J1aXonLCAnSGFycGVyJywgJ0ZveCcsICdSaWxleScsICdBcm1zdHJvbmcnLCAnQ2FycGVudGVyJywgJ1dlYXZlcicsICdHcmVlbmUnLCAnTGF3cmVuY2UnLCAnRWxsaW90dCcsICdDaGF2ZXonLCAnU2ltcycsICdBdXN0aW4nLCAnUGV0ZXJzJywgJ0tlbGxleScsICdGcmFua2xpbicsICdMYXdzb24nLCAnRmllbGRzJywgJ0d1dGllcnJleicsICdSeWFuJywgJ1NjaG1pZHQnLCAnQ2FycicsICdWYXNxdWV6JywgJ0Nhc3RpbGxvJywgJ1doZWVsZXInLCAnQ2hhcG1hbicsICdPbGl2ZXInLCAnTW9udGdvbWVyeScsICdSaWNoYXJkcycsICdXaWxsaWFtc29uJywgJ0pvaG5zdG9uJywgJ0JhbmtzJywgJ01leWVyJywgJ0Jpc2hvcCcsICdNY0NveScsICdIb3dlbGwnLCAnQWx2YXJleicsICdNb3JyaXNvbicsICdIYW5zZW4nLCAnRmVybmFuZGV6JywgJ0dhcnphJywgJ0hhcnZleScsICdMaXR0bGUnLCAnQnVydG9uJywgJ1N0YW5sZXknLCAnTmd1eWVuJywgJ0dlb3JnZScsICdKYWNvYnMnLCAnUmVpZCcsICdLaW0nLCAnRnVsbGVyJywgJ0x5bmNoJywgJ0RlYW4nLCAnR2lsYmVydCcsICdHYXJyZXR0JywgJ1JvbWVybycsICdXZWxjaCcsICdMYXJzb24nLCAnRnJhemllcicsICdCdXJrZScsICdIYW5zb24nLCAnRGF5JywgJ01lbmRvemEnLCAnTW9yZW5vJywgJ0Jvd21hbicsICdNZWRpbmEnLCAnRm93bGVyJywgJ0JyZXdlcicsICdIb2ZmbWFuJywgJ0Nhcmxzb24nLCAnU2lsdmEnLCAnUGVhcnNvbicsICdIb2xsYW5kJywgJ0RvdWdsYXMnLCAnRmxlbWluZycsICdKZW5zZW4nLCAnVmFyZ2FzJywgJ0J5cmQnLCAnRGF2aWRzb24nLCAnSG9wa2lucycsICdNYXknLCAnVGVycnknLCAnSGVycmVyYScsICdXYWRlJywgJ1NvdG8nLCAnV2FsdGVycycsICdDdXJ0aXMnLCAnTmVhbCcsICdDYWxkd2VsbCcsICdMb3dlJywgJ0plbm5pbmdzJywgJ0Jhcm5ldHQnLCAnR3JhdmVzJywgJ0ppbWVuZXonLCAnSG9ydG9uJywgJ1NoZWx0b24nLCAnQmFycmV0dCcsICdPYnJpZW4nLCAnQ2FzdHJvJywgJ1N1dHRvbicsICdHcmVnb3J5JywgJ01jS2lubmV5JywgJ0x1Y2FzJywgJ01pbGVzJywgJ0NyYWlnJywgJ1JvZHJpcXVleicsICdDaGFtYmVycycsICdIb2x0JywgJ0xhbWJlcnQnLCAnRmxldGNoZXInLCAnV2F0dHMnLCAnQmF0ZXMnLCAnSGFsZScsICdSaG9kZXMnLCAnUGVuYScsICdCZWNrJywgJ05ld21hbicsICdIYXluZXMnLCAnTWNEYW5pZWwnLCAnTWVuZGV6JywgJ0J1c2gnLCAnVmF1Z2huJywgJ1BhcmtzJywgJ0Rhd3NvbicsICdTYW50aWFnbycsICdOb3JyaXMnLCAnSGFyZHknLCAnTG92ZScsICdTdGVlbGUnLCAnQ3VycnknLCAnUG93ZXJzJywgJ1NjaHVsdHonLCAnQmFya2VyJywgJ0d1em1hbicsICdQYWdlJywgJ011bm96JywgJ0JhbGwnLCAnS2VsbGVyJywgJ0NoYW5kbGVyJywgJ1dlYmVyJywgJ0xlb25hcmQnLCAnV2Fsc2gnLCAnTHlvbnMnLCAnUmFtc2V5JywgJ1dvbGZlJywgJ1NjaG5laWRlcicsICdNdWxsaW5zJywgJ0JlbnNvbicsICdTaGFycCcsICdCb3dlbicsICdEYW5pZWwnLCAnQmFyYmVyJywgJ0N1bW1pbmdzJywgJ0hpbmVzJywgJ0JhbGR3aW4nLCAnR3JpZmZpdGgnLCAnVmFsZGV6JywgJ0h1YmJhcmQnLCAnU2FsYXphcicsICdSZWV2ZXMnLCAnV2FybmVyJywgJ1N0ZXZlbnNvbicsICdCdXJnZXNzJywgJ1NhbnRvcycsICdUYXRlJywgJ0Nyb3NzJywgJ0dhcm5lcicsICdNYW5uJywgJ01hY2snLCAnTW9zcycsICdUaG9ybnRvbicsICdEZW5uaXMnLCAnTWNHZWUnLCAnRmFybWVyJywgJ0RlbGdhZG8nLCAnQWd1aWxhcicsICdWZWdhJywgJ0dsb3ZlcicsICdNYW5uaW5nJywgJ0NvaGVuJywgJ0hhcm1vbicsICdSb2RnZXJzJywgJ1JvYmJpbnMnLCAnTmV3dG9uJywgJ1RvZGQnLCAnQmxhaXInLCAnSGlnZ2lucycsICdJbmdyYW0nLCAnUmVlc2UnLCAnQ2Fubm9uJywgJ1N0cmlja2xhbmQnLCAnVG93bnNlbmQnLCAnUG90dGVyJywgJ0dvb2R3aW4nLCAnV2FsdG9uJywgJ1Jvd2UnLCAnSGFtcHRvbicsICdPcnRlZ2EnLCAnUGF0dG9uJywgJ1N3YW5zb24nLCAnSm9zZXBoJywgJ0ZyYW5jaXMnLCAnR29vZG1hbicsICdNYWxkb25hZG8nLCAnWWF0ZXMnLCAnQmVja2VyJywgJ0VyaWNrc29uJywgJ0hvZGdlcycsICdSaW9zJywgJ0Nvbm5lcicsICdBZGtpbnMnLCAnV2Vic3RlcicsICdOb3JtYW4nLCAnTWFsb25lJywgJ0hhbW1vbmQnLCAnRmxvd2VycycsICdDb2JiJywgJ01vb2R5JywgJ1F1aW5uJywgJ0JsYWtlJywgJ01heHdlbGwnLCAnUG9wZScsICdGbG95ZCcsICdPc2Jvcm5lJywgJ1BhdWwnLCAnTWNDYXJ0aHknLCAnR3VlcnJlcm8nLCAnTGluZHNleScsICdFc3RyYWRhJywgJ1NhbmRvdmFsJywgJ0dpYmJzJywgJ1R5bGVyJywgJ0dyb3NzJywgJ0ZpdHpnZXJhbGQnLCAnU3Rva2VzJywgJ0RveWxlJywgJ1NoZXJtYW4nLCAnU2F1bmRlcnMnLCAnV2lzZScsICdDb2xvbicsICdHaWxsJywgJ0FsdmFyYWRvJywgJ0dyZWVyJywgJ1BhZGlsbGEnLCAnU2ltb24nLCAnV2F0ZXJzJywgJ051bmV6JywgJ0JhbGxhcmQnLCAnU2Nod2FydHonLCAnTWNCcmlkZScsICdIb3VzdG9uJywgJ0NocmlzdGVuc2VuJywgJ0tsZWluJywgJ1ByYXR0JywgJ0JyaWdncycsICdQYXJzb25zJywgJ01jTGF1Z2hsaW4nLCAnWmltbWVybWFuJywgJ0ZyZW5jaCcsICdCdWNoYW5hbicsICdNb3JhbicsICdDb3BlbGFuZCcsICdSb3knLCAnUGl0dG1hbicsICdCcmFkeScsICdNY0Nvcm1pY2snLCAnSG9sbG93YXknLCAnQnJvY2snLCAnUG9vbGUnLCAnRnJhbmsnLCAnTG9nYW4nLCAnT3dlbicsICdCYXNzJywgJ01hcnNoJywgJ0RyYWtlJywgJ1dvbmcnLCAnSmVmZmVyc29uJywgJ1BhcmsnLCAnTW9ydG9uJywgJ0FiYm90dCcsICdTcGFya3MnLCAnUGF0cmljaycsICdOb3J0b24nLCAnSHVmZicsICdDbGF5dG9uJywgJ01hc3NleScsICdMbG95ZCcsICdGaWd1ZXJvYScsICdDYXJzb24nLCAnQm93ZXJzJywgJ1JvYmVyc29uJywgJ0JhcnRvbicsICdUcmFuJywgJ0xhbWInLCAnSGFycmluZ3RvbicsICdDYXNleScsICdCb29uZScsICdDb3J0ZXonLCAnQ2xhcmtlJywgJ01hdGhpcycsICdTaW5nbGV0b24nLCAnV2lsa2lucycsICdDYWluJywgJ0JyeWFuJywgJ1VuZGVyd29vZCcsICdIb2dhbicsICdNY0tlbnppZScsICdDb2xsaWVyJywgJ0x1bmEnLCAnUGhlbHBzJywgJ01jR3VpcmUnLCAnQWxsaXNvbicsICdCcmlkZ2VzJywgJ1dpbGtlcnNvbicsICdOYXNoJywgJ1N1bW1lcnMnLCAnQXRraW5zJ10sXG5cbiAgICAgICAgLy8gRGF0YSB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS91bXBpcnNreS9jb3VudHJ5LWxpc3QvYmxvYi9tYXN0ZXIvY291bnRyeS9jbGRyL2VuX1VTL2NvdW50cnkuanNvblxuICAgICAgICBjb3VudHJpZXM6IFt7XCJuYW1lXCI6XCJBZmdoYW5pc3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJBRlwifSx7XCJuYW1lXCI6XCJBbGJhbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFMXCJ9LHtcIm5hbWVcIjpcIkFsZ2VyaWFcIixcImFiYnJldmlhdGlvblwiOlwiRFpcIn0se1wibmFtZVwiOlwiQW1lcmljYW4gU2Ftb2FcIixcImFiYnJldmlhdGlvblwiOlwiQVNcIn0se1wibmFtZVwiOlwiQW5kb3JyYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBRFwifSx7XCJuYW1lXCI6XCJBbmdvbGFcIixcImFiYnJldmlhdGlvblwiOlwiQU9cIn0se1wibmFtZVwiOlwiQW5ndWlsbGFcIixcImFiYnJldmlhdGlvblwiOlwiQUlcIn0se1wibmFtZVwiOlwiQW50YXJjdGljYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBUVwifSx7XCJuYW1lXCI6XCJBbnRpZ3VhIGFuZCBCYXJidWRhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFHXCJ9LHtcIm5hbWVcIjpcIkFyZ2VudGluYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBUlwifSx7XCJuYW1lXCI6XCJBcm1lbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFNXCJ9LHtcIm5hbWVcIjpcIkFydWJhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFXXCJ9LHtcIm5hbWVcIjpcIkF1c3RyYWxpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJBVVwifSx7XCJuYW1lXCI6XCJBdXN0cmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkFUXCJ9LHtcIm5hbWVcIjpcIkF6ZXJiYWlqYW5cIixcImFiYnJldmlhdGlvblwiOlwiQVpcIn0se1wibmFtZVwiOlwiQmFoYW1hc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJCU1wifSx7XCJuYW1lXCI6XCJCYWhyYWluXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJIXCJ9LHtcIm5hbWVcIjpcIkJhbmdsYWRlc2hcIixcImFiYnJldmlhdGlvblwiOlwiQkRcIn0se1wibmFtZVwiOlwiQmFyYmFkb3NcIixcImFiYnJldmlhdGlvblwiOlwiQkJcIn0se1wibmFtZVwiOlwiQmVsYXJ1c1wiLFwiYWJicmV2aWF0aW9uXCI6XCJCWVwifSx7XCJuYW1lXCI6XCJCZWxnaXVtXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJFXCJ9LHtcIm5hbWVcIjpcIkJlbGl6ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCWlwifSx7XCJuYW1lXCI6XCJCZW5pblwiLFwiYWJicmV2aWF0aW9uXCI6XCJCSlwifSx7XCJuYW1lXCI6XCJCZXJtdWRhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJNXCJ9LHtcIm5hbWVcIjpcIkJodXRhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJCVFwifSx7XCJuYW1lXCI6XCJCb2xpdmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkJPXCJ9LHtcIm5hbWVcIjpcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcIixcImFiYnJldmlhdGlvblwiOlwiQkFcIn0se1wibmFtZVwiOlwiQm90c3dhbmFcIixcImFiYnJldmlhdGlvblwiOlwiQldcIn0se1wibmFtZVwiOlwiQm91dmV0IElzbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJCVlwifSx7XCJuYW1lXCI6XCJCcmF6aWxcIixcImFiYnJldmlhdGlvblwiOlwiQlJcIn0se1wibmFtZVwiOlwiQnJpdGlzaCBBbnRhcmN0aWMgVGVycml0b3J5XCIsXCJhYmJyZXZpYXRpb25cIjpcIkJRXCJ9LHtcIm5hbWVcIjpcIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeVwiLFwiYWJicmV2aWF0aW9uXCI6XCJJT1wifSx7XCJuYW1lXCI6XCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlZHXCJ9LHtcIm5hbWVcIjpcIkJydW5laVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCTlwifSx7XCJuYW1lXCI6XCJCdWxnYXJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCR1wifSx7XCJuYW1lXCI6XCJCdXJraW5hIEZhc29cIixcImFiYnJldmlhdGlvblwiOlwiQkZcIn0se1wibmFtZVwiOlwiQnVydW5kaVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCSVwifSx7XCJuYW1lXCI6XCJDYW1ib2RpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJLSFwifSx7XCJuYW1lXCI6XCJDYW1lcm9vblwiLFwiYWJicmV2aWF0aW9uXCI6XCJDTVwifSx7XCJuYW1lXCI6XCJDYW5hZGFcIixcImFiYnJldmlhdGlvblwiOlwiQ0FcIn0se1wibmFtZVwiOlwiQ2FudG9uIGFuZCBFbmRlcmJ1cnkgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJDVFwifSx7XCJuYW1lXCI6XCJDYXBlIFZlcmRlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNWXCJ9LHtcIm5hbWVcIjpcIkNheW1hbiBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIktZXCJ9LHtcIm5hbWVcIjpcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1wiLFwiYWJicmV2aWF0aW9uXCI6XCJDRlwifSx7XCJuYW1lXCI6XCJDaGFkXCIsXCJhYmJyZXZpYXRpb25cIjpcIlREXCJ9LHtcIm5hbWVcIjpcIkNoaWxlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNMXCJ9LHtcIm5hbWVcIjpcIkNoaW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNOXCJ9LHtcIm5hbWVcIjpcIkNocmlzdG1hcyBJc2xhbmRcIixcImFiYnJldmlhdGlvblwiOlwiQ1hcIn0se1wibmFtZVwiOlwiQ29jb3MgW0tlZWxpbmddIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiQ0NcIn0se1wibmFtZVwiOlwiQ29sb21iaWFcIixcImFiYnJldmlhdGlvblwiOlwiQ09cIn0se1wibmFtZVwiOlwiQ29tb3Jvc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJLTVwifSx7XCJuYW1lXCI6XCJDb25nbyAtIEJyYXp6YXZpbGxlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNHXCJ9LHtcIm5hbWVcIjpcIkNvbmdvIC0gS2luc2hhc2FcIixcImFiYnJldmlhdGlvblwiOlwiQ0RcIn0se1wibmFtZVwiOlwiQ29vayBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNLXCJ9LHtcIm5hbWVcIjpcIkNvc3RhIFJpY2FcIixcImFiYnJldmlhdGlvblwiOlwiQ1JcIn0se1wibmFtZVwiOlwiQ3JvYXRpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJIUlwifSx7XCJuYW1lXCI6XCJDdWJhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNVXCJ9LHtcIm5hbWVcIjpcIkN5cHJ1c1wiLFwiYWJicmV2aWF0aW9uXCI6XCJDWVwifSx7XCJuYW1lXCI6XCJDemVjaCBSZXB1YmxpY1wiLFwiYWJicmV2aWF0aW9uXCI6XCJDWlwifSx7XCJuYW1lXCI6XCJDw7R0ZSBk4oCZSXZvaXJlXCIsXCJhYmJyZXZpYXRpb25cIjpcIkNJXCJ9LHtcIm5hbWVcIjpcIkRlbm1hcmtcIixcImFiYnJldmlhdGlvblwiOlwiREtcIn0se1wibmFtZVwiOlwiRGppYm91dGlcIixcImFiYnJldmlhdGlvblwiOlwiREpcIn0se1wibmFtZVwiOlwiRG9taW5pY2FcIixcImFiYnJldmlhdGlvblwiOlwiRE1cIn0se1wibmFtZVwiOlwiRG9taW5pY2FuIFJlcHVibGljXCIsXCJhYmJyZXZpYXRpb25cIjpcIkRPXCJ9LHtcIm5hbWVcIjpcIkRyb25uaW5nIE1hdWQgTGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJOUVwifSx7XCJuYW1lXCI6XCJFYXN0IEdlcm1hbnlcIixcImFiYnJldmlhdGlvblwiOlwiRERcIn0se1wibmFtZVwiOlwiRWN1YWRvclwiLFwiYWJicmV2aWF0aW9uXCI6XCJFQ1wifSx7XCJuYW1lXCI6XCJFZ3lwdFwiLFwiYWJicmV2aWF0aW9uXCI6XCJFR1wifSx7XCJuYW1lXCI6XCJFbCBTYWx2YWRvclwiLFwiYWJicmV2aWF0aW9uXCI6XCJTVlwifSx7XCJuYW1lXCI6XCJFcXVhdG9yaWFsIEd1aW5lYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHUVwifSx7XCJuYW1lXCI6XCJFcml0cmVhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkVSXCJ9LHtcIm5hbWVcIjpcIkVzdG9uaWFcIixcImFiYnJldmlhdGlvblwiOlwiRUVcIn0se1wibmFtZVwiOlwiRXRoaW9waWFcIixcImFiYnJldmlhdGlvblwiOlwiRVRcIn0se1wibmFtZVwiOlwiRmFsa2xhbmQgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJGS1wifSx7XCJuYW1lXCI6XCJGYXJvZSBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkZPXCJ9LHtcIm5hbWVcIjpcIkZpamlcIixcImFiYnJldmlhdGlvblwiOlwiRkpcIn0se1wibmFtZVwiOlwiRmlubGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJGSVwifSx7XCJuYW1lXCI6XCJGcmFuY2VcIixcImFiYnJldmlhdGlvblwiOlwiRlJcIn0se1wibmFtZVwiOlwiRnJlbmNoIEd1aWFuYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHRlwifSx7XCJuYW1lXCI6XCJGcmVuY2ggUG9seW5lc2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBGXCJ9LHtcIm5hbWVcIjpcIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJURlwifSx7XCJuYW1lXCI6XCJGcmVuY2ggU291dGhlcm4gYW5kIEFudGFyY3RpYyBUZXJyaXRvcmllc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJGUVwifSx7XCJuYW1lXCI6XCJHYWJvblwiLFwiYWJicmV2aWF0aW9uXCI6XCJHQVwifSx7XCJuYW1lXCI6XCJHYW1iaWFcIixcImFiYnJldmlhdGlvblwiOlwiR01cIn0se1wibmFtZVwiOlwiR2VvcmdpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHRVwifSx7XCJuYW1lXCI6XCJHZXJtYW55XCIsXCJhYmJyZXZpYXRpb25cIjpcIkRFXCJ9LHtcIm5hbWVcIjpcIkdoYW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdIXCJ9LHtcIm5hbWVcIjpcIkdpYnJhbHRhclwiLFwiYWJicmV2aWF0aW9uXCI6XCJHSVwifSx7XCJuYW1lXCI6XCJHcmVlY2VcIixcImFiYnJldmlhdGlvblwiOlwiR1JcIn0se1wibmFtZVwiOlwiR3JlZW5sYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdMXCJ9LHtcIm5hbWVcIjpcIkdyZW5hZGFcIixcImFiYnJldmlhdGlvblwiOlwiR0RcIn0se1wibmFtZVwiOlwiR3VhZGVsb3VwZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHUFwifSx7XCJuYW1lXCI6XCJHdWFtXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdVXCJ9LHtcIm5hbWVcIjpcIkd1YXRlbWFsYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHVFwifSx7XCJuYW1lXCI6XCJHdWVybnNleVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHR1wifSx7XCJuYW1lXCI6XCJHdWluZWFcIixcImFiYnJldmlhdGlvblwiOlwiR05cIn0se1wibmFtZVwiOlwiR3VpbmVhLUJpc3NhdVwiLFwiYWJicmV2aWF0aW9uXCI6XCJHV1wifSx7XCJuYW1lXCI6XCJHdXlhbmFcIixcImFiYnJldmlhdGlvblwiOlwiR1lcIn0se1wibmFtZVwiOlwiSGFpdGlcIixcImFiYnJldmlhdGlvblwiOlwiSFRcIn0se1wibmFtZVwiOlwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkhNXCJ9LHtcIm5hbWVcIjpcIkhvbmR1cmFzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkhOXCJ9LHtcIm5hbWVcIjpcIkhvbmcgS29uZyBTQVIgQ2hpbmFcIixcImFiYnJldmlhdGlvblwiOlwiSEtcIn0se1wibmFtZVwiOlwiSHVuZ2FyeVwiLFwiYWJicmV2aWF0aW9uXCI6XCJIVVwifSx7XCJuYW1lXCI6XCJJY2VsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIklTXCJ9LHtcIm5hbWVcIjpcIkluZGlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIklOXCJ9LHtcIm5hbWVcIjpcIkluZG9uZXNpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJJRFwifSx7XCJuYW1lXCI6XCJJcmFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIklSXCJ9LHtcIm5hbWVcIjpcIklyYXFcIixcImFiYnJldmlhdGlvblwiOlwiSVFcIn0se1wibmFtZVwiOlwiSXJlbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJJRVwifSx7XCJuYW1lXCI6XCJJc2xlIG9mIE1hblwiLFwiYWJicmV2aWF0aW9uXCI6XCJJTVwifSx7XCJuYW1lXCI6XCJJc3JhZWxcIixcImFiYnJldmlhdGlvblwiOlwiSUxcIn0se1wibmFtZVwiOlwiSXRhbHlcIixcImFiYnJldmlhdGlvblwiOlwiSVRcIn0se1wibmFtZVwiOlwiSmFtYWljYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJKTVwifSx7XCJuYW1lXCI6XCJKYXBhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJKUFwifSx7XCJuYW1lXCI6XCJKZXJzZXlcIixcImFiYnJldmlhdGlvblwiOlwiSkVcIn0se1wibmFtZVwiOlwiSm9obnN0b24gSXNsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIkpUXCJ9LHtcIm5hbWVcIjpcIkpvcmRhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJKT1wifSx7XCJuYW1lXCI6XCJLYXpha2hzdGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIktaXCJ9LHtcIm5hbWVcIjpcIktlbnlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIktFXCJ9LHtcIm5hbWVcIjpcIktpcmliYXRpXCIsXCJhYmJyZXZpYXRpb25cIjpcIktJXCJ9LHtcIm5hbWVcIjpcIkt1d2FpdFwiLFwiYWJicmV2aWF0aW9uXCI6XCJLV1wifSx7XCJuYW1lXCI6XCJLeXJneXpzdGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIktHXCJ9LHtcIm5hbWVcIjpcIkxhb3NcIixcImFiYnJldmlhdGlvblwiOlwiTEFcIn0se1wibmFtZVwiOlwiTGF0dmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxWXCJ9LHtcIm5hbWVcIjpcIkxlYmFub25cIixcImFiYnJldmlhdGlvblwiOlwiTEJcIn0se1wibmFtZVwiOlwiTGVzb3Rob1wiLFwiYWJicmV2aWF0aW9uXCI6XCJMU1wifSx7XCJuYW1lXCI6XCJMaWJlcmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxSXCJ9LHtcIm5hbWVcIjpcIkxpYnlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxZXCJ9LHtcIm5hbWVcIjpcIkxpZWNodGVuc3RlaW5cIixcImFiYnJldmlhdGlvblwiOlwiTElcIn0se1wibmFtZVwiOlwiTGl0aHVhbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxUXCJ9LHtcIm5hbWVcIjpcIkx1eGVtYm91cmdcIixcImFiYnJldmlhdGlvblwiOlwiTFVcIn0se1wibmFtZVwiOlwiTWFjYXUgU0FSIENoaW5hXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1PXCJ9LHtcIm5hbWVcIjpcIk1hY2Vkb25pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNS1wifSx7XCJuYW1lXCI6XCJNYWRhZ2FzY2FyXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1HXCJ9LHtcIm5hbWVcIjpcIk1hbGF3aVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNV1wifSx7XCJuYW1lXCI6XCJNYWxheXNpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNWVwifSx7XCJuYW1lXCI6XCJNYWxkaXZlc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNVlwifSx7XCJuYW1lXCI6XCJNYWxpXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1MXCJ9LHtcIm5hbWVcIjpcIk1hbHRhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1UXCJ9LHtcIm5hbWVcIjpcIk1hcnNoYWxsIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiTUhcIn0se1wibmFtZVwiOlwiTWFydGluaXF1ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNUVwifSx7XCJuYW1lXCI6XCJNYXVyaXRhbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1SXCJ9LHtcIm5hbWVcIjpcIk1hdXJpdGl1c1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNVVwifSx7XCJuYW1lXCI6XCJNYXlvdHRlXCIsXCJhYmJyZXZpYXRpb25cIjpcIllUXCJ9LHtcIm5hbWVcIjpcIk1ldHJvcG9saXRhbiBGcmFuY2VcIixcImFiYnJldmlhdGlvblwiOlwiRlhcIn0se1wibmFtZVwiOlwiTWV4aWNvXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1YXCJ9LHtcIm5hbWVcIjpcIk1pY3JvbmVzaWFcIixcImFiYnJldmlhdGlvblwiOlwiRk1cIn0se1wibmFtZVwiOlwiTWlkd2F5IElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiTUlcIn0se1wibmFtZVwiOlwiTW9sZG92YVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNRFwifSx7XCJuYW1lXCI6XCJNb25hY29cIixcImFiYnJldmlhdGlvblwiOlwiTUNcIn0se1wibmFtZVwiOlwiTW9uZ29saWFcIixcImFiYnJldmlhdGlvblwiOlwiTU5cIn0se1wibmFtZVwiOlwiTW9udGVuZWdyb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJNRVwifSx7XCJuYW1lXCI6XCJNb250c2VycmF0XCIsXCJhYmJyZXZpYXRpb25cIjpcIk1TXCJ9LHtcIm5hbWVcIjpcIk1vcm9jY29cIixcImFiYnJldmlhdGlvblwiOlwiTUFcIn0se1wibmFtZVwiOlwiTW96YW1iaXF1ZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJNWlwifSx7XCJuYW1lXCI6XCJNeWFubWFyIFtCdXJtYV1cIixcImFiYnJldmlhdGlvblwiOlwiTU1cIn0se1wibmFtZVwiOlwiTmFtaWJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJOQVwifSx7XCJuYW1lXCI6XCJOYXVydVwiLFwiYWJicmV2aWF0aW9uXCI6XCJOUlwifSx7XCJuYW1lXCI6XCJOZXBhbFwiLFwiYWJicmV2aWF0aW9uXCI6XCJOUFwifSx7XCJuYW1lXCI6XCJOZXRoZXJsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJOTFwifSx7XCJuYW1lXCI6XCJOZXRoZXJsYW5kcyBBbnRpbGxlc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJBTlwifSx7XCJuYW1lXCI6XCJOZXV0cmFsIFpvbmVcIixcImFiYnJldmlhdGlvblwiOlwiTlRcIn0se1wibmFtZVwiOlwiTmV3IENhbGVkb25pYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJOQ1wifSx7XCJuYW1lXCI6XCJOZXcgWmVhbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJOWlwifSx7XCJuYW1lXCI6XCJOaWNhcmFndWFcIixcImFiYnJldmlhdGlvblwiOlwiTklcIn0se1wibmFtZVwiOlwiTmlnZXJcIixcImFiYnJldmlhdGlvblwiOlwiTkVcIn0se1wibmFtZVwiOlwiTmlnZXJpYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJOR1wifSx7XCJuYW1lXCI6XCJOaXVlXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5VXCJ9LHtcIm5hbWVcIjpcIk5vcmZvbGsgSXNsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIk5GXCJ9LHtcIm5hbWVcIjpcIk5vcnRoIEtvcmVhXCIsXCJhYmJyZXZpYXRpb25cIjpcIktQXCJ9LHtcIm5hbWVcIjpcIk5vcnRoIFZpZXRuYW1cIixcImFiYnJldmlhdGlvblwiOlwiVkRcIn0se1wibmFtZVwiOlwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIk1QXCJ9LHtcIm5hbWVcIjpcIk5vcndheVwiLFwiYWJicmV2aWF0aW9uXCI6XCJOT1wifSx7XCJuYW1lXCI6XCJPbWFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIk9NXCJ9LHtcIm5hbWVcIjpcIlBhY2lmaWMgSXNsYW5kcyBUcnVzdCBUZXJyaXRvcnlcIixcImFiYnJldmlhdGlvblwiOlwiUENcIn0se1wibmFtZVwiOlwiUGFraXN0YW5cIixcImFiYnJldmlhdGlvblwiOlwiUEtcIn0se1wibmFtZVwiOlwiUGFsYXVcIixcImFiYnJldmlhdGlvblwiOlwiUFdcIn0se1wibmFtZVwiOlwiUGFsZXN0aW5pYW4gVGVycml0b3JpZXNcIixcImFiYnJldmlhdGlvblwiOlwiUFNcIn0se1wibmFtZVwiOlwiUGFuYW1hXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBBXCJ9LHtcIm5hbWVcIjpcIlBhbmFtYSBDYW5hbCBab25lXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBaXCJ9LHtcIm5hbWVcIjpcIlBhcHVhIE5ldyBHdWluZWFcIixcImFiYnJldmlhdGlvblwiOlwiUEdcIn0se1wibmFtZVwiOlwiUGFyYWd1YXlcIixcImFiYnJldmlhdGlvblwiOlwiUFlcIn0se1wibmFtZVwiOlwiUGVvcGxlJ3MgRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiBZZW1lblwiLFwiYWJicmV2aWF0aW9uXCI6XCJZRFwifSx7XCJuYW1lXCI6XCJQZXJ1XCIsXCJhYmJyZXZpYXRpb25cIjpcIlBFXCJ9LHtcIm5hbWVcIjpcIlBoaWxpcHBpbmVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBIXCJ9LHtcIm5hbWVcIjpcIlBpdGNhaXJuIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiUE5cIn0se1wibmFtZVwiOlwiUG9sYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBMXCJ9LHtcIm5hbWVcIjpcIlBvcnR1Z2FsXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBUXCJ9LHtcIm5hbWVcIjpcIlB1ZXJ0byBSaWNvXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBSXCJ9LHtcIm5hbWVcIjpcIlFhdGFyXCIsXCJhYmJyZXZpYXRpb25cIjpcIlFBXCJ9LHtcIm5hbWVcIjpcIlJvbWFuaWFcIixcImFiYnJldmlhdGlvblwiOlwiUk9cIn0se1wibmFtZVwiOlwiUnVzc2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlJVXCJ9LHtcIm5hbWVcIjpcIlJ3YW5kYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJSV1wifSx7XCJuYW1lXCI6XCJSw6l1bmlvblwiLFwiYWJicmV2aWF0aW9uXCI6XCJSRVwifSx7XCJuYW1lXCI6XCJTYWludCBCYXJ0aMOpbGVteVwiLFwiYWJicmV2aWF0aW9uXCI6XCJCTFwifSx7XCJuYW1lXCI6XCJTYWludCBIZWxlbmFcIixcImFiYnJldmlhdGlvblwiOlwiU0hcIn0se1wibmFtZVwiOlwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXCIsXCJhYmJyZXZpYXRpb25cIjpcIktOXCJ9LHtcIm5hbWVcIjpcIlNhaW50IEx1Y2lhXCIsXCJhYmJyZXZpYXRpb25cIjpcIkxDXCJ9LHtcIm5hbWVcIjpcIlNhaW50IE1hcnRpblwiLFwiYWJicmV2aWF0aW9uXCI6XCJNRlwifSx7XCJuYW1lXCI6XCJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBNXCJ9LHtcIm5hbWVcIjpcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlZDXCJ9LHtcIm5hbWVcIjpcIlNhbW9hXCIsXCJhYmJyZXZpYXRpb25cIjpcIldTXCJ9LHtcIm5hbWVcIjpcIlNhbiBNYXJpbm9cIixcImFiYnJldmlhdGlvblwiOlwiU01cIn0se1wibmFtZVwiOlwiU2F1ZGkgQXJhYmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNBXCJ9LHtcIm5hbWVcIjpcIlNlbmVnYWxcIixcImFiYnJldmlhdGlvblwiOlwiU05cIn0se1wibmFtZVwiOlwiU2VyYmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlJTXCJ9LHtcIm5hbWVcIjpcIlNlcmJpYSBhbmQgTW9udGVuZWdyb1wiLFwiYWJicmV2aWF0aW9uXCI6XCJDU1wifSx7XCJuYW1lXCI6XCJTZXljaGVsbGVzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNDXCJ9LHtcIm5hbWVcIjpcIlNpZXJyYSBMZW9uZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTTFwifSx7XCJuYW1lXCI6XCJTaW5nYXBvcmVcIixcImFiYnJldmlhdGlvblwiOlwiU0dcIn0se1wibmFtZVwiOlwiU2xvdmFraWFcIixcImFiYnJldmlhdGlvblwiOlwiU0tcIn0se1wibmFtZVwiOlwiU2xvdmVuaWFcIixcImFiYnJldmlhdGlvblwiOlwiU0lcIn0se1wibmFtZVwiOlwiU29sb21vbiBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNCXCJ9LHtcIm5hbWVcIjpcIlNvbWFsaWFcIixcImFiYnJldmlhdGlvblwiOlwiU09cIn0se1wibmFtZVwiOlwiU291dGggQWZyaWNhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlpBXCJ9LHtcIm5hbWVcIjpcIlNvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIkdTXCJ9LHtcIm5hbWVcIjpcIlNvdXRoIEtvcmVhXCIsXCJhYmJyZXZpYXRpb25cIjpcIktSXCJ9LHtcIm5hbWVcIjpcIlNwYWluXCIsXCJhYmJyZXZpYXRpb25cIjpcIkVTXCJ9LHtcIm5hbWVcIjpcIlNyaSBMYW5rYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJMS1wifSx7XCJuYW1lXCI6XCJTdWRhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJTRFwifSx7XCJuYW1lXCI6XCJTdXJpbmFtZVwiLFwiYWJicmV2aWF0aW9uXCI6XCJTUlwifSx7XCJuYW1lXCI6XCJTdmFsYmFyZCBhbmQgSmFuIE1heWVuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNKXCJ9LHtcIm5hbWVcIjpcIlN3YXppbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJTWlwifSx7XCJuYW1lXCI6XCJTd2VkZW5cIixcImFiYnJldmlhdGlvblwiOlwiU0VcIn0se1wibmFtZVwiOlwiU3dpdHplcmxhbmRcIixcImFiYnJldmlhdGlvblwiOlwiQ0hcIn0se1wibmFtZVwiOlwiU3lyaWFcIixcImFiYnJldmlhdGlvblwiOlwiU1lcIn0se1wibmFtZVwiOlwiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXCIsXCJhYmJyZXZpYXRpb25cIjpcIlNUXCJ9LHtcIm5hbWVcIjpcIlRhaXdhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJUV1wifSx7XCJuYW1lXCI6XCJUYWppa2lzdGFuXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRKXCJ9LHtcIm5hbWVcIjpcIlRhbnphbmlhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRaXCJ9LHtcIm5hbWVcIjpcIlRoYWlsYW5kXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRIXCJ9LHtcIm5hbWVcIjpcIlRpbW9yLUxlc3RlXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRMXCJ9LHtcIm5hbWVcIjpcIlRvZ29cIixcImFiYnJldmlhdGlvblwiOlwiVEdcIn0se1wibmFtZVwiOlwiVG9rZWxhdVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUS1wifSx7XCJuYW1lXCI6XCJUb25nYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJUT1wifSx7XCJuYW1lXCI6XCJUcmluaWRhZCBhbmQgVG9iYWdvXCIsXCJhYmJyZXZpYXRpb25cIjpcIlRUXCJ9LHtcIm5hbWVcIjpcIlR1bmlzaWFcIixcImFiYnJldmlhdGlvblwiOlwiVE5cIn0se1wibmFtZVwiOlwiVHVya2V5XCIsXCJhYmJyZXZpYXRpb25cIjpcIlRSXCJ9LHtcIm5hbWVcIjpcIlR1cmttZW5pc3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJUTVwifSx7XCJuYW1lXCI6XCJUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiVENcIn0se1wibmFtZVwiOlwiVHV2YWx1XCIsXCJhYmJyZXZpYXRpb25cIjpcIlRWXCJ9LHtcIm5hbWVcIjpcIlUuUy4gTWlub3IgT3V0bHlpbmcgSXNsYW5kc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJVTVwifSx7XCJuYW1lXCI6XCJVLlMuIE1pc2NlbGxhbmVvdXMgUGFjaWZpYyBJc2xhbmRzXCIsXCJhYmJyZXZpYXRpb25cIjpcIlBVXCJ9LHtcIm5hbWVcIjpcIlUuUy4gVmlyZ2luIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiVklcIn0se1wibmFtZVwiOlwiVWdhbmRhXCIsXCJhYmJyZXZpYXRpb25cIjpcIlVHXCJ9LHtcIm5hbWVcIjpcIlVrcmFpbmVcIixcImFiYnJldmlhdGlvblwiOlwiVUFcIn0se1wibmFtZVwiOlwiVW5pb24gb2YgU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpY3NcIixcImFiYnJldmlhdGlvblwiOlwiU1VcIn0se1wibmFtZVwiOlwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcIixcImFiYnJldmlhdGlvblwiOlwiQUVcIn0se1wibmFtZVwiOlwiVW5pdGVkIEtpbmdkb21cIixcImFiYnJldmlhdGlvblwiOlwiR0JcIn0se1wibmFtZVwiOlwiVW5pdGVkIFN0YXRlc1wiLFwiYWJicmV2aWF0aW9uXCI6XCJVU1wifSx7XCJuYW1lXCI6XCJVbmtub3duIG9yIEludmFsaWQgUmVnaW9uXCIsXCJhYmJyZXZpYXRpb25cIjpcIlpaXCJ9LHtcIm5hbWVcIjpcIlVydWd1YXlcIixcImFiYnJldmlhdGlvblwiOlwiVVlcIn0se1wibmFtZVwiOlwiVXpiZWtpc3RhblwiLFwiYWJicmV2aWF0aW9uXCI6XCJVWlwifSx7XCJuYW1lXCI6XCJWYW51YXR1XCIsXCJhYmJyZXZpYXRpb25cIjpcIlZVXCJ9LHtcIm5hbWVcIjpcIlZhdGljYW4gQ2l0eVwiLFwiYWJicmV2aWF0aW9uXCI6XCJWQVwifSx7XCJuYW1lXCI6XCJWZW5lenVlbGFcIixcImFiYnJldmlhdGlvblwiOlwiVkVcIn0se1wibmFtZVwiOlwiVmlldG5hbVwiLFwiYWJicmV2aWF0aW9uXCI6XCJWTlwifSx7XCJuYW1lXCI6XCJXYWtlIElzbGFuZFwiLFwiYWJicmV2aWF0aW9uXCI6XCJXS1wifSx7XCJuYW1lXCI6XCJXYWxsaXMgYW5kIEZ1dHVuYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJXRlwifSx7XCJuYW1lXCI6XCJXZXN0ZXJuIFNhaGFyYVwiLFwiYWJicmV2aWF0aW9uXCI6XCJFSFwifSx7XCJuYW1lXCI6XCJZZW1lblwiLFwiYWJicmV2aWF0aW9uXCI6XCJZRVwifSx7XCJuYW1lXCI6XCJaYW1iaWFcIixcImFiYnJldmlhdGlvblwiOlwiWk1cIn0se1wibmFtZVwiOlwiWmltYmFid2VcIixcImFiYnJldmlhdGlvblwiOlwiWldcIn0se1wibmFtZVwiOlwiw4VsYW5kIElzbGFuZHNcIixcImFiYnJldmlhdGlvblwiOlwiQVhcIn1dLFxuXG4gICAgICAgIHByb3ZpbmNlczogW1xuICAgICAgICAgICAge25hbWU6ICdBbGJlcnRhJywgYWJicmV2aWF0aW9uOiAnQUInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQnJpdGlzaCBDb2x1bWJpYScsIGFiYnJldmlhdGlvbjogJ0JDJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01hbml0b2JhJywgYWJicmV2aWF0aW9uOiAnTUInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTmV3IEJydW5zd2ljaycsIGFiYnJldmlhdGlvbjogJ05CJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ld2ZvdW5kbGFuZCBhbmQgTGFicmFkb3InLCBhYmJyZXZpYXRpb246ICdOTCd9LFxuICAgICAgICAgICAge25hbWU6ICdOb3ZhIFNjb3RpYScsIGFiYnJldmlhdGlvbjogJ05TJ30sXG4gICAgICAgICAgICB7bmFtZTogJ09udGFyaW8nLCBhYmJyZXZpYXRpb246ICdPTid9LFxuICAgICAgICAgICAge25hbWU6ICdQcmluY2UgRWR3YXJkIElzbGFuZCcsIGFiYnJldmlhdGlvbjogJ1BFJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1F1ZWJlYycsIGFiYnJldmlhdGlvbjogJ1FDJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1Nhc2thdGNoZXdhbicsIGFiYnJldmlhdGlvbjogJ1NLJ30sXG5cbiAgICAgICAgICAgIC8vIFRoZSBjYXNlIGNvdWxkIGJlIG1hZGUgdGhhdCB0aGUgZm9sbG93aW5nIGFyZSBub3QgYWN0dWFsbHkgcHJvdmluY2VzXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGV5IGFyZSB0ZWNobmljYWxseSBjb25zaWRlcmVkIFwidGVycml0b3JpZXNcIiBob3dldmVyIHRoZXkgYWxsXG4gICAgICAgICAgICAvLyBsb29rIHRoZSBzYW1lIG9uIGFuIGVudmVsb3BlIVxuICAgICAgICAgICAge25hbWU6ICdOb3J0aHdlc3QgVGVycml0b3JpZXMnLCBhYmJyZXZpYXRpb246ICdOVCd9LFxuICAgICAgICAgICAge25hbWU6ICdOdW5hdnV0JywgYWJicmV2aWF0aW9uOiAnTlUnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnWXVrb24nLCBhYmJyZXZpYXRpb246ICdZVCd9XG4gICAgICAgIF0sXG5cbiAgICAgICAgdXNfc3RhdGVzX2FuZF9kYzogW1xuICAgICAgICAgICAge25hbWU6ICdBbGFiYW1hJywgYWJicmV2aWF0aW9uOiAnQUwnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQWxhc2thJywgYWJicmV2aWF0aW9uOiAnQUsnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQXJpem9uYScsIGFiYnJldmlhdGlvbjogJ0FaJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0Fya2Fuc2FzJywgYWJicmV2aWF0aW9uOiAnQVInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQ2FsaWZvcm5pYScsIGFiYnJldmlhdGlvbjogJ0NBJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0NvbG9yYWRvJywgYWJicmV2aWF0aW9uOiAnQ08nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQ29ubmVjdGljdXQnLCBhYmJyZXZpYXRpb246ICdDVCd9LFxuICAgICAgICAgICAge25hbWU6ICdEZWxhd2FyZScsIGFiYnJldmlhdGlvbjogJ0RFJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0Rpc3RyaWN0IG9mIENvbHVtYmlhJywgYWJicmV2aWF0aW9uOiAnREMnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnRmxvcmlkYScsIGFiYnJldmlhdGlvbjogJ0ZMJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0dlb3JnaWEnLCBhYmJyZXZpYXRpb246ICdHQSd9LFxuICAgICAgICAgICAge25hbWU6ICdIYXdhaWknLCBhYmJyZXZpYXRpb246ICdISSd9LFxuICAgICAgICAgICAge25hbWU6ICdJZGFobycsIGFiYnJldmlhdGlvbjogJ0lEJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0lsbGlub2lzJywgYWJicmV2aWF0aW9uOiAnSUwnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSW5kaWFuYScsIGFiYnJldmlhdGlvbjogJ0lOJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0lvd2EnLCBhYmJyZXZpYXRpb246ICdJQSd9LFxuICAgICAgICAgICAge25hbWU6ICdLYW5zYXMnLCBhYmJyZXZpYXRpb246ICdLUyd9LFxuICAgICAgICAgICAge25hbWU6ICdLZW50dWNreScsIGFiYnJldmlhdGlvbjogJ0tZJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0xvdWlzaWFuYScsIGFiYnJldmlhdGlvbjogJ0xBJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01haW5lJywgYWJicmV2aWF0aW9uOiAnTUUnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWFyeWxhbmQnLCBhYmJyZXZpYXRpb246ICdNRCd9LFxuICAgICAgICAgICAge25hbWU6ICdNYXNzYWNodXNldHRzJywgYWJicmV2aWF0aW9uOiAnTUEnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTWljaGlnYW4nLCBhYmJyZXZpYXRpb246ICdNSSd9LFxuICAgICAgICAgICAge25hbWU6ICdNaW5uZXNvdGEnLCBhYmJyZXZpYXRpb246ICdNTid9LFxuICAgICAgICAgICAge25hbWU6ICdNaXNzaXNzaXBwaScsIGFiYnJldmlhdGlvbjogJ01TJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01pc3NvdXJpJywgYWJicmV2aWF0aW9uOiAnTU8nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTW9udGFuYScsIGFiYnJldmlhdGlvbjogJ01UJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05lYnJhc2thJywgYWJicmV2aWF0aW9uOiAnTkUnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTmV2YWRhJywgYWJicmV2aWF0aW9uOiAnTlYnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTmV3IEhhbXBzaGlyZScsIGFiYnJldmlhdGlvbjogJ05IJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05ldyBKZXJzZXknLCBhYmJyZXZpYXRpb246ICdOSid9LFxuICAgICAgICAgICAge25hbWU6ICdOZXcgTWV4aWNvJywgYWJicmV2aWF0aW9uOiAnTk0nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnTmV3IFlvcmsnLCBhYmJyZXZpYXRpb246ICdOWSd9LFxuICAgICAgICAgICAge25hbWU6ICdOb3J0aCBDYXJvbGluYScsIGFiYnJldmlhdGlvbjogJ05DJ30sXG4gICAgICAgICAgICB7bmFtZTogJ05vcnRoIERha290YScsIGFiYnJldmlhdGlvbjogJ05EJ30sXG4gICAgICAgICAgICB7bmFtZTogJ09oaW8nLCBhYmJyZXZpYXRpb246ICdPSCd9LFxuICAgICAgICAgICAge25hbWU6ICdPa2xhaG9tYScsIGFiYnJldmlhdGlvbjogJ09LJ30sXG4gICAgICAgICAgICB7bmFtZTogJ09yZWdvbicsIGFiYnJldmlhdGlvbjogJ09SJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1Blbm5zeWx2YW5pYScsIGFiYnJldmlhdGlvbjogJ1BBJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1Job2RlIElzbGFuZCcsIGFiYnJldmlhdGlvbjogJ1JJJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1NvdXRoIENhcm9saW5hJywgYWJicmV2aWF0aW9uOiAnU0MnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnU291dGggRGFrb3RhJywgYWJicmV2aWF0aW9uOiAnU0QnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVGVubmVzc2VlJywgYWJicmV2aWF0aW9uOiAnVE4nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVGV4YXMnLCBhYmJyZXZpYXRpb246ICdUWCd9LFxuICAgICAgICAgICAge25hbWU6ICdVdGFoJywgYWJicmV2aWF0aW9uOiAnVVQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVmVybW9udCcsIGFiYnJldmlhdGlvbjogJ1ZUJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1ZpcmdpbmlhJywgYWJicmV2aWF0aW9uOiAnVkEnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnV2FzaGluZ3RvbicsIGFiYnJldmlhdGlvbjogJ1dBJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1dlc3QgVmlyZ2luaWEnLCBhYmJyZXZpYXRpb246ICdXVid9LFxuICAgICAgICAgICAge25hbWU6ICdXaXNjb25zaW4nLCBhYmJyZXZpYXRpb246ICdXSSd9LFxuICAgICAgICAgICAge25hbWU6ICdXeW9taW5nJywgYWJicmV2aWF0aW9uOiAnV1knfVxuICAgICAgICBdLFxuXG4gICAgICAgIHRlcnJpdG9yaWVzOiBbXG4gICAgICAgICAgICB7bmFtZTogJ0FtZXJpY2FuIFNhbW9hJywgYWJicmV2aWF0aW9uOiAnQVMnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnRmVkZXJhdGVkIFN0YXRlcyBvZiBNaWNyb25lc2lhJywgYWJicmV2aWF0aW9uOiAnRk0nfSxcbiAgICAgICAgICAgIHtuYW1lOiAnR3VhbScsIGFiYnJldmlhdGlvbjogJ0dVJ30sXG4gICAgICAgICAgICB7bmFtZTogJ01hcnNoYWxsIElzbGFuZHMnLCBhYmJyZXZpYXRpb246ICdNSCd9LFxuICAgICAgICAgICAge25hbWU6ICdOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMnLCBhYmJyZXZpYXRpb246ICdNUCd9LFxuICAgICAgICAgICAge25hbWU6ICdQdWVydG8gUmljbycsIGFiYnJldmlhdGlvbjogJ1BSJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1ZpcmdpbiBJc2xhbmRzLCBVLlMuJywgYWJicmV2aWF0aW9uOiAnVkknfVxuICAgICAgICBdLFxuXG4gICAgICAgIGFybWVkX2ZvcmNlczogW1xuICAgICAgICAgICAge25hbWU6ICdBcm1lZCBGb3JjZXMgRXVyb3BlJywgYWJicmV2aWF0aW9uOiAnQUUnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQXJtZWQgRm9yY2VzIFBhY2lmaWMnLCBhYmJyZXZpYXRpb246ICdBUCd9LFxuICAgICAgICAgICAge25hbWU6ICdBcm1lZCBGb3JjZXMgdGhlIEFtZXJpY2FzJywgYWJicmV2aWF0aW9uOiAnQUEnfVxuICAgICAgICBdLFxuXG4gICAgICAgIHN0cmVldF9zdWZmaXhlczogW1xuICAgICAgICAgICAge25hbWU6ICdBdmVudWUnLCBhYmJyZXZpYXRpb246ICdBdmUnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQm91bGV2YXJkJywgYWJicmV2aWF0aW9uOiAnQmx2ZCd9LFxuICAgICAgICAgICAge25hbWU6ICdDZW50ZXInLCBhYmJyZXZpYXRpb246ICdDdHInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQ2lyY2xlJywgYWJicmV2aWF0aW9uOiAnQ2lyJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0NvdXJ0JywgYWJicmV2aWF0aW9uOiAnQ3QnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnRHJpdmUnLCBhYmJyZXZpYXRpb246ICdEcid9LFxuICAgICAgICAgICAge25hbWU6ICdFeHRlbnNpb24nLCBhYmJyZXZpYXRpb246ICdFeHQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnR2xlbicsIGFiYnJldmlhdGlvbjogJ0dsbid9LFxuICAgICAgICAgICAge25hbWU6ICdHcm92ZScsIGFiYnJldmlhdGlvbjogJ0dydid9LFxuICAgICAgICAgICAge25hbWU6ICdIZWlnaHRzJywgYWJicmV2aWF0aW9uOiAnSHRzJ30sXG4gICAgICAgICAgICB7bmFtZTogJ0hpZ2h3YXknLCBhYmJyZXZpYXRpb246ICdId3knfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSnVuY3Rpb24nLCBhYmJyZXZpYXRpb246ICdKY3QnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnS2V5JywgYWJicmV2aWF0aW9uOiAnS2V5J30sXG4gICAgICAgICAgICB7bmFtZTogJ0xhbmUnLCBhYmJyZXZpYXRpb246ICdMbid9LFxuICAgICAgICAgICAge25hbWU6ICdMb29wJywgYWJicmV2aWF0aW9uOiAnTG9vcCd9LFxuICAgICAgICAgICAge25hbWU6ICdNYW5vcicsIGFiYnJldmlhdGlvbjogJ01ucid9LFxuICAgICAgICAgICAge25hbWU6ICdNaWxsJywgYWJicmV2aWF0aW9uOiAnTWlsbCd9LFxuICAgICAgICAgICAge25hbWU6ICdQYXJrJywgYWJicmV2aWF0aW9uOiAnUGFyayd9LFxuICAgICAgICAgICAge25hbWU6ICdQYXJrd2F5JywgYWJicmV2aWF0aW9uOiAnUGt3eSd9LFxuICAgICAgICAgICAge25hbWU6ICdQYXNzJywgYWJicmV2aWF0aW9uOiAnUGFzcyd9LFxuICAgICAgICAgICAge25hbWU6ICdQYXRoJywgYWJicmV2aWF0aW9uOiAnUGF0aCd9LFxuICAgICAgICAgICAge25hbWU6ICdQaWtlJywgYWJicmV2aWF0aW9uOiAnUGlrZSd9LFxuICAgICAgICAgICAge25hbWU6ICdQbGFjZScsIGFiYnJldmlhdGlvbjogJ1BsJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1BsYXphJywgYWJicmV2aWF0aW9uOiAnUGx6J30sXG4gICAgICAgICAgICB7bmFtZTogJ1BvaW50JywgYWJicmV2aWF0aW9uOiAnUHQnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUmlkZ2UnLCBhYmJyZXZpYXRpb246ICdSZGcnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUml2ZXInLCBhYmJyZXZpYXRpb246ICdSaXYnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnUm9hZCcsIGFiYnJldmlhdGlvbjogJ1JkJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1NxdWFyZScsIGFiYnJldmlhdGlvbjogJ1NxJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1N0cmVldCcsIGFiYnJldmlhdGlvbjogJ1N0J30sXG4gICAgICAgICAgICB7bmFtZTogJ1RlcnJhY2UnLCBhYmJyZXZpYXRpb246ICdUZXInfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVHJhaWwnLCBhYmJyZXZpYXRpb246ICdUcmwnfSxcbiAgICAgICAgICAgIHtuYW1lOiAnVHVybnBpa2UnLCBhYmJyZXZpYXRpb246ICdUcGtlJ30sXG4gICAgICAgICAgICB7bmFtZTogJ1ZpZXcnLCBhYmJyZXZpYXRpb246ICdWdyd9LFxuICAgICAgICAgICAge25hbWU6ICdXYXknLCBhYmJyZXZpYXRpb246ICdXYXknfVxuICAgICAgICBdLFxuXG4gICAgICAgIG1vbnRoczogW1xuICAgICAgICAgICAge25hbWU6ICdKYW51YXJ5Jywgc2hvcnRfbmFtZTogJ0phbicsIG51bWVyaWM6ICcwMScsIGRheXM6IDMxfSxcbiAgICAgICAgICAgIC8vIE5vdCBtZXNzaW5nIHdpdGggbGVhcCB5ZWFycy4uLlxuICAgICAgICAgICAge25hbWU6ICdGZWJydWFyeScsIHNob3J0X25hbWU6ICdGZWInLCBudW1lcmljOiAnMDInLCBkYXlzOiAyOH0sXG4gICAgICAgICAgICB7bmFtZTogJ01hcmNoJywgc2hvcnRfbmFtZTogJ01hcicsIG51bWVyaWM6ICcwMycsIGRheXM6IDMxfSxcbiAgICAgICAgICAgIHtuYW1lOiAnQXByaWwnLCBzaG9ydF9uYW1lOiAnQXByJywgbnVtZXJpYzogJzA0JywgZGF5czogMzB9LFxuICAgICAgICAgICAge25hbWU6ICdNYXknLCBzaG9ydF9uYW1lOiAnTWF5JywgbnVtZXJpYzogJzA1JywgZGF5czogMzF9LFxuICAgICAgICAgICAge25hbWU6ICdKdW5lJywgc2hvcnRfbmFtZTogJ0p1bicsIG51bWVyaWM6ICcwNicsIGRheXM6IDMwfSxcbiAgICAgICAgICAgIHtuYW1lOiAnSnVseScsIHNob3J0X25hbWU6ICdKdWwnLCBudW1lcmljOiAnMDcnLCBkYXlzOiAzMX0sXG4gICAgICAgICAgICB7bmFtZTogJ0F1Z3VzdCcsIHNob3J0X25hbWU6ICdBdWcnLCBudW1lcmljOiAnMDgnLCBkYXlzOiAzMX0sXG4gICAgICAgICAgICB7bmFtZTogJ1NlcHRlbWJlcicsIHNob3J0X25hbWU6ICdTZXAnLCBudW1lcmljOiAnMDknLCBkYXlzOiAzMH0sXG4gICAgICAgICAgICB7bmFtZTogJ09jdG9iZXInLCBzaG9ydF9uYW1lOiAnT2N0JywgbnVtZXJpYzogJzEwJywgZGF5czogMzF9LFxuICAgICAgICAgICAge25hbWU6ICdOb3ZlbWJlcicsIHNob3J0X25hbWU6ICdOb3YnLCBudW1lcmljOiAnMTEnLCBkYXlzOiAzMH0sXG4gICAgICAgICAgICB7bmFtZTogJ0RlY2VtYmVyJywgc2hvcnRfbmFtZTogJ0RlYycsIG51bWVyaWM6ICcxMicsIGRheXM6IDMxfVxuICAgICAgICBdLFxuXG4gICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFua19jYXJkX251bWJlciNJc3N1ZXJfaWRlbnRpZmljYXRpb25fbnVtYmVyXy4yOElJTi4yOVxuICAgICAgICBjY190eXBlczogW1xuICAgICAgICAgICAge25hbWU6IFwiQW1lcmljYW4gRXhwcmVzc1wiLCBzaG9ydF9uYW1lOiAnYW1leCcsIHByZWZpeDogJzM0JywgbGVuZ3RoOiAxNX0sXG4gICAgICAgICAgICB7bmFtZTogXCJCYW5rY2FyZFwiLCBzaG9ydF9uYW1lOiAnYmFua2NhcmQnLCBwcmVmaXg6ICc1NjEwJywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJDaGluYSBVbmlvblBheVwiLCBzaG9ydF9uYW1lOiAnY2hpbmF1bmlvbicsIHByZWZpeDogJzYyJywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJEaW5lcnMgQ2x1YiBDYXJ0ZSBCbGFuY2hlXCIsIHNob3J0X25hbWU6ICdkY2NhcnRlJywgcHJlZml4OiAnMzAwJywgbGVuZ3RoOiAxNH0sXG4gICAgICAgICAgICB7bmFtZTogXCJEaW5lcnMgQ2x1YiBlblJvdXRlXCIsIHNob3J0X25hbWU6ICdkY2Vucm91dGUnLCBwcmVmaXg6ICcyMDE0JywgbGVuZ3RoOiAxNX0sXG4gICAgICAgICAgICB7bmFtZTogXCJEaW5lcnMgQ2x1YiBJbnRlcm5hdGlvbmFsXCIsIHNob3J0X25hbWU6ICdkY2ludGwnLCBwcmVmaXg6ICczNicsIGxlbmd0aDogMTR9LFxuICAgICAgICAgICAge25hbWU6IFwiRGluZXJzIENsdWIgVW5pdGVkIFN0YXRlcyAmIENhbmFkYVwiLCBzaG9ydF9uYW1lOiAnZGN1c2MnLCBwcmVmaXg6ICc1NCcsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiRGlzY292ZXIgQ2FyZFwiLCBzaG9ydF9uYW1lOiAnZGlzY292ZXInLCBwcmVmaXg6ICc2MDExJywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJJbnN0YVBheW1lbnRcIiwgc2hvcnRfbmFtZTogJ2luc3RhcGF5JywgcHJlZml4OiAnNjM3JywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJKQ0JcIiwgc2hvcnRfbmFtZTogJ2pjYicsIHByZWZpeDogJzM1MjgnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIkxhc2VyXCIsIHNob3J0X25hbWU6ICdsYXNlcicsIHByZWZpeDogJzYzMDQnLCBsZW5ndGg6IDE2fSxcbiAgICAgICAgICAgIHtuYW1lOiBcIk1hZXN0cm9cIiwgc2hvcnRfbmFtZTogJ21hZXN0cm8nLCBwcmVmaXg6ICc1MDE4JywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJNYXN0ZXJjYXJkXCIsIHNob3J0X25hbWU6ICdtYycsIHByZWZpeDogJzUxJywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJTb2xvXCIsIHNob3J0X25hbWU6ICdzb2xvJywgcHJlZml4OiAnNjMzNCcsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiU3dpdGNoXCIsIHNob3J0X25hbWU6ICdzd2l0Y2gnLCBwcmVmaXg6ICc0OTAzJywgbGVuZ3RoOiAxNn0sXG4gICAgICAgICAgICB7bmFtZTogXCJWaXNhXCIsIHNob3J0X25hbWU6ICd2aXNhJywgcHJlZml4OiAnNCcsIGxlbmd0aDogMTZ9LFxuICAgICAgICAgICAge25hbWU6IFwiVmlzYSBFbGVjdHJvblwiLCBzaG9ydF9uYW1lOiAnZWxlY3Ryb24nLCBwcmVmaXg6ICc0MDI2JywgbGVuZ3RoOiAxNn1cbiAgICAgICAgXSxcblxuICAgICAgICAvL3JldHVybiBhbGwgd29ybGQgY3VycmVuY3kgYnkgSVNPIDQyMTdcbiAgICAgICAgY3VycmVuY3lfdHlwZXM6IFtcbiAgICAgICAgICAgIHsnY29kZScgOiAnQUVEJywgJ25hbWUnIDogJ1VuaXRlZCBBcmFiIEVtaXJhdGVzIERpcmhhbSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdBRk4nLCAnbmFtZScgOiAnQWZnaGFuaXN0YW4gQWZnaGFuaSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdBTEwnLCAnbmFtZScgOiAnQWxiYW5pYSBMZWsnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQU1EJywgJ25hbWUnIDogJ0FybWVuaWEgRHJhbSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdBTkcnLCAnbmFtZScgOiAnTmV0aGVybGFuZHMgQW50aWxsZXMgR3VpbGRlcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdBT0EnLCAnbmFtZScgOiAnQW5nb2xhIEt3YW56YSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdBUlMnLCAnbmFtZScgOiAnQXJnZW50aW5hIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQVVEJywgJ25hbWUnIDogJ0F1c3RyYWxpYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQVdHJywgJ25hbWUnIDogJ0FydWJhIEd1aWxkZXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQVpOJywgJ25hbWUnIDogJ0F6ZXJiYWlqYW4gTmV3IE1hbmF0J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JBTScsICduYW1lJyA6ICdCb3NuaWEgYW5kIEhlcnplZ292aW5hIENvbnZlcnRpYmxlIE1hcmthJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JCRCcsICduYW1lJyA6ICdCYXJiYWRvcyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQkRUJywgJ25hbWUnIDogJ0JhbmdsYWRlc2ggVGFrYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCR04nLCAnbmFtZScgOiAnQnVsZ2FyaWEgTGV2J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JIRCcsICduYW1lJyA6ICdCYWhyYWluIERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JJRicsICduYW1lJyA6ICdCdXJ1bmRpIEZyYW5jJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JNRCcsICduYW1lJyA6ICdCZXJtdWRhIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCTkQnLCAnbmFtZScgOiAnQnJ1bmVpIERhcnVzc2FsYW0gRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JPQicsICduYW1lJyA6ICdCb2xpdmlhIEJvbGl2aWFubyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdCUkwnLCAnbmFtZScgOiAnQnJhemlsIFJlYWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQlNEJywgJ25hbWUnIDogJ0JhaGFtYXMgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0JUTicsICduYW1lJyA6ICdCaHV0YW4gTmd1bHRydW0nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQldQJywgJ25hbWUnIDogJ0JvdHN3YW5hIFB1bGEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQllSJywgJ25hbWUnIDogJ0JlbGFydXMgUnVibGUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQlpEJywgJ25hbWUnIDogJ0JlbGl6ZSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ0FEJywgJ25hbWUnIDogJ0NhbmFkYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ0RGJywgJ25hbWUnIDogJ0NvbmdvL0tpbnNoYXNhIEZyYW5jJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NIRicsICduYW1lJyA6ICdTd2l0emVybGFuZCBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDTFAnLCAnbmFtZScgOiAnQ2hpbGUgUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDTlknLCAnbmFtZScgOiAnQ2hpbmEgWXVhbiBSZW5taW5iaSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDT1AnLCAnbmFtZScgOiAnQ29sb21iaWEgUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDUkMnLCAnbmFtZScgOiAnQ29zdGEgUmljYSBDb2xvbid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdDVUMnLCAnbmFtZScgOiAnQ3ViYSBDb252ZXJ0aWJsZSBQZXNvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NVUCcsICduYW1lJyA6ICdDdWJhIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnQ1ZFJywgJ25hbWUnIDogJ0NhcGUgVmVyZGUgRXNjdWRvJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0NaSycsICduYW1lJyA6ICdDemVjaCBSZXB1YmxpYyBLb3J1bmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnREpGJywgJ25hbWUnIDogJ0RqaWJvdXRpIEZyYW5jJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0RLSycsICduYW1lJyA6ICdEZW5tYXJrIEtyb25lJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0RPUCcsICduYW1lJyA6ICdEb21pbmljYW4gUmVwdWJsaWMgUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdEWkQnLCAnbmFtZScgOiAnQWxnZXJpYSBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdFR1AnLCAnbmFtZScgOiAnRWd5cHQgUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRVJOJywgJ25hbWUnIDogJ0VyaXRyZWEgTmFrZmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRVRCJywgJ25hbWUnIDogJ0V0aGlvcGlhIEJpcnInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRVVSJywgJ25hbWUnIDogJ0V1cm8gTWVtYmVyIENvdW50cmllcyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdGSkQnLCAnbmFtZScgOiAnRmlqaSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnRktQJywgJ25hbWUnIDogJ0ZhbGtsYW5kIElzbGFuZHMgKE1hbHZpbmFzKSBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHQlAnLCAnbmFtZScgOiAnVW5pdGVkIEtpbmdkb20gUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR0VMJywgJ25hbWUnIDogJ0dlb3JnaWEgTGFyaSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHR1AnLCAnbmFtZScgOiAnR3Vlcm5zZXkgUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR0hTJywgJ25hbWUnIDogJ0doYW5hIENlZGknfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnR0lQJywgJ25hbWUnIDogJ0dpYnJhbHRhciBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHTUQnLCAnbmFtZScgOiAnR2FtYmlhIERhbGFzaSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHTkYnLCAnbmFtZScgOiAnR3VpbmVhIEZyYW5jJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0dUUScsICduYW1lJyA6ICdHdWF0ZW1hbGEgUXVldHphbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdHWUQnLCAnbmFtZScgOiAnR3V5YW5hIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdIS0QnLCAnbmFtZScgOiAnSG9uZyBLb25nIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdITkwnLCAnbmFtZScgOiAnSG9uZHVyYXMgTGVtcGlyYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdIUksnLCAnbmFtZScgOiAnQ3JvYXRpYSBLdW5hJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0hURycsICduYW1lJyA6ICdIYWl0aSBHb3VyZGUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSFVGJywgJ25hbWUnIDogJ0h1bmdhcnkgRm9yaW50J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0lEUicsICduYW1lJyA6ICdJbmRvbmVzaWEgUnVwaWFoJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0lMUycsICduYW1lJyA6ICdJc3JhZWwgU2hla2VsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0lNUCcsICduYW1lJyA6ICdJc2xlIG9mIE1hbiBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJTlInLCAnbmFtZScgOiAnSW5kaWEgUnVwZWUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSVFEJywgJ25hbWUnIDogJ0lyYXEgRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnSVJSJywgJ25hbWUnIDogJ0lyYW4gUmlhbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdJU0snLCAnbmFtZScgOiAnSWNlbGFuZCBLcm9uYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdKRVAnLCAnbmFtZScgOiAnSmVyc2V5IFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0pNRCcsICduYW1lJyA6ICdKYW1haWNhIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdKT0QnLCAnbmFtZScgOiAnSm9yZGFuIERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0pQWScsICduYW1lJyA6ICdKYXBhbiBZZW4nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS0VTJywgJ25hbWUnIDogJ0tlbnlhIFNoaWxsaW5nJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tHUycsICduYW1lJyA6ICdLeXJneXpzdGFuIFNvbSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLSFInLCAnbmFtZScgOiAnQ2FtYm9kaWEgUmllbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLTUYnLCAnbmFtZScgOiAnQ29tb3JvcyBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLUFcnLCAnbmFtZScgOiAnS29yZWEgKE5vcnRoKSBXb24nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS1JXJywgJ25hbWUnIDogJ0tvcmVhIChTb3V0aCkgV29uJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0tXRCcsICduYW1lJyA6ICdLdXdhaXQgRGluYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnS1lEJywgJ25hbWUnIDogJ0NheW1hbiBJc2xhbmRzIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdLWlQnLCAnbmFtZScgOiAnS2F6YWtoc3RhbiBUZW5nZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdMQUsnLCAnbmFtZScgOiAnTGFvcyBLaXAnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTEJQJywgJ25hbWUnIDogJ0xlYmFub24gUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTEtSJywgJ25hbWUnIDogJ1NyaSBMYW5rYSBSdXBlZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdMUkQnLCAnbmFtZScgOiAnTGliZXJpYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTFNMJywgJ25hbWUnIDogJ0xlc290aG8gTG90aSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdMVEwnLCAnbmFtZScgOiAnTGl0aHVhbmlhIExpdGFzJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ0xZRCcsICduYW1lJyA6ICdMaWJ5YSBEaW5hcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNQUQnLCAnbmFtZScgOiAnTW9yb2NjbyBEaXJoYW0nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTURMJywgJ25hbWUnIDogJ01vbGRvdmEgTGV1J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01HQScsICduYW1lJyA6ICdNYWRhZ2FzY2FyIEFyaWFyeSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNS0QnLCAnbmFtZScgOiAnTWFjZWRvbmlhIERlbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01NSycsICduYW1lJyA6ICdNeWFubWFyIChCdXJtYSkgS3lhdCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNTlQnLCAnbmFtZScgOiAnTW9uZ29saWEgVHVnaHJpayd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNT1AnLCAnbmFtZScgOiAnTWFjYXUgUGF0YWNhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ01STycsICduYW1lJyA6ICdNYXVyaXRhbmlhIE91Z3VpeWEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVVSJywgJ25hbWUnIDogJ01hdXJpdGl1cyBSdXBlZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNVlInLCAnbmFtZScgOiAnTWFsZGl2ZXMgKE1hbGRpdmUgSXNsYW5kcykgUnVmaXlhYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNV0snLCAnbmFtZScgOiAnTWFsYXdpIEt3YWNoYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdNWE4nLCAnbmFtZScgOiAnTWV4aWNvIFBlc28nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVlSJywgJ25hbWUnIDogJ01hbGF5c2lhIFJpbmdnaXQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTVpOJywgJ25hbWUnIDogJ01vemFtYmlxdWUgTWV0aWNhbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdOQUQnLCAnbmFtZScgOiAnTmFtaWJpYSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTkdOJywgJ25hbWUnIDogJ05pZ2VyaWEgTmFpcmEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTklPJywgJ25hbWUnIDogJ05pY2FyYWd1YSBDb3Jkb2JhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ05PSycsICduYW1lJyA6ICdOb3J3YXkgS3JvbmUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnTlBSJywgJ25hbWUnIDogJ05lcGFsIFJ1cGVlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ05aRCcsICduYW1lJyA6ICdOZXcgWmVhbGFuZCBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnT01SJywgJ25hbWUnIDogJ09tYW4gUmlhbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdQQUInLCAnbmFtZScgOiAnUGFuYW1hIEJhbGJvYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdQRU4nLCAnbmFtZScgOiAnUGVydSBOdWV2byBTb2wnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUEdLJywgJ25hbWUnIDogJ1BhcHVhIE5ldyBHdWluZWEgS2luYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdQSFAnLCAnbmFtZScgOiAnUGhpbGlwcGluZXMgUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdQS1InLCAnbmFtZScgOiAnUGFraXN0YW4gUnVwZWUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUExOJywgJ25hbWUnIDogJ1BvbGFuZCBabG90eSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdQWUcnLCAnbmFtZScgOiAnUGFyYWd1YXkgR3VhcmFuaSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdRQVInLCAnbmFtZScgOiAnUWF0YXIgUml5YWwnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUk9OJywgJ25hbWUnIDogJ1JvbWFuaWEgTmV3IExldSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdSU0QnLCAnbmFtZScgOiAnU2VyYmlhIERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1JVQicsICduYW1lJyA6ICdSdXNzaWEgUnVibGUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnUldGJywgJ25hbWUnIDogJ1J3YW5kYSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTQVInLCAnbmFtZScgOiAnU2F1ZGkgQXJhYmlhIFJpeWFsJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NCRCcsICduYW1lJyA6ICdTb2xvbW9uIElzbGFuZHMgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NDUicsICduYW1lJyA6ICdTZXljaGVsbGVzIFJ1cGVlJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NERycsICduYW1lJyA6ICdTdWRhbiBQb3VuZCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTRUsnLCAnbmFtZScgOiAnU3dlZGVuIEtyb25hJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NHRCcsICduYW1lJyA6ICdTaW5nYXBvcmUgRG9sbGFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NIUCcsICduYW1lJyA6ICdTYWludCBIZWxlbmEgUG91bmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU0xMJywgJ25hbWUnIDogJ1NpZXJyYSBMZW9uZSBMZW9uZSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTT1MnLCAnbmFtZScgOiAnU29tYWxpYSBTaGlsbGluZyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTUEwnLCAnbmFtZScgOiAnU2Vib3JnYSBMdWlnaW5vJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NSRCcsICduYW1lJyA6ICdTdXJpbmFtZSBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU1REJywgJ25hbWUnIDogJ1PDo28gVG9tw6kgYW5kIFByw61uY2lwZSBEb2JyYSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdTVkMnLCAnbmFtZScgOiAnRWwgU2FsdmFkb3IgQ29sb24nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnU1lQJywgJ25hbWUnIDogJ1N5cmlhIFBvdW5kJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1NaTCcsICduYW1lJyA6ICdTd2F6aWxhbmQgTGlsYW5nZW5pJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RIQicsICduYW1lJyA6ICdUaGFpbGFuZCBCYWh0J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RKUycsICduYW1lJyA6ICdUYWppa2lzdGFuIFNvbW9uaSd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUTVQnLCAnbmFtZScgOiAnVHVya21lbmlzdGFuIE1hbmF0J30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RORCcsICduYW1lJyA6ICdUdW5pc2lhIERpbmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RPUCcsICduYW1lJyA6ICdUb25nYSBQYVxcJ2FuZ2EnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVFJZJywgJ25hbWUnIDogJ1R1cmtleSBMaXJhJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1RURCcsICduYW1lJyA6ICdUcmluaWRhZCBhbmQgVG9iYWdvIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUVkQnLCAnbmFtZScgOiAnVHV2YWx1IERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdUV0QnLCAnbmFtZScgOiAnVGFpd2FuIE5ldyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVFpTJywgJ25hbWUnIDogJ1RhbnphbmlhIFNoaWxsaW5nJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1VBSCcsICduYW1lJyA6ICdVa3JhaW5lIEhyeXZuaWEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVUdYJywgJ25hbWUnIDogJ1VnYW5kYSBTaGlsbGluZyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdVU0QnLCAnbmFtZScgOiAnVW5pdGVkIFN0YXRlcyBEb2xsYXInfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVVlVJywgJ25hbWUnIDogJ1VydWd1YXkgUGVzbyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdVWlMnLCAnbmFtZScgOiAnVXpiZWtpc3RhbiBTb20nfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnVkVGJywgJ25hbWUnIDogJ1ZlbmV6dWVsYSBCb2xpdmFyJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1ZORCcsICduYW1lJyA6ICdWaWV0IE5hbSBEb25nJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1ZVVicsICduYW1lJyA6ICdWYW51YXR1IFZhdHUnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnV1NUJywgJ25hbWUnIDogJ1NhbW9hIFRhbGEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWEFGJywgJ25hbWUnIDogJ0NvbW11bmF1dMOpIEZpbmFuY2nDqHJlIEFmcmljYWluZSAoQkVBQykgQ0ZBIEZyYW5jIEJFQUMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWENEJywgJ25hbWUnIDogJ0Vhc3QgQ2FyaWJiZWFuIERvbGxhcid9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdYRFInLCAnbmFtZScgOiAnSW50ZXJuYXRpb25hbCBNb25ldGFyeSBGdW5kIChJTUYpIFNwZWNpYWwgRHJhd2luZyBSaWdodHMnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWE9GJywgJ25hbWUnIDogJ0NvbW11bmF1dMOpIEZpbmFuY2nDqHJlIEFmcmljYWluZSAoQkNFQU8pIEZyYW5jJ30sXG4gICAgICAgICAgICB7J2NvZGUnIDogJ1hQRicsICduYW1lJyA6ICdDb21wdG9pcnMgRnJhbsOnYWlzIGR1IFBhY2lmaXF1ZSAoQ0ZQKSBGcmFuYyd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdZRVInLCAnbmFtZScgOiAnWWVtZW4gUmlhbCd9LFxuICAgICAgICAgICAgeydjb2RlJyA6ICdaQVInLCAnbmFtZScgOiAnU291dGggQWZyaWNhIFJhbmQnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWk1XJywgJ25hbWUnIDogJ1phbWJpYSBLd2FjaGEnfSxcbiAgICAgICAgICAgIHsnY29kZScgOiAnWldEJywgJ25hbWUnIDogJ1ppbWJhYndlIERvbGxhcid9XG4gICAgICAgIF1cbiAgICB9O1xuXG4gICAgdmFyIG9faGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICAgIHZhciBvX2tleXMgPSAoT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvX2hhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvcHlPYmplY3Qoc291cmNlLCB0YXJnZXQpIHtcbiAgICAgIHZhciBrZXlzID0gb19rZXlzKHNvdXJjZSk7XG4gICAgICB2YXIga2V5O1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV0gfHwgdGFyZ2V0W2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2NvcHlBcnJheShzb3VyY2UsIHRhcmdldCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzb3VyY2UubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRhcmdldFtpXSA9IHNvdXJjZVtpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgX3RhcmdldCkge1xuICAgICAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoc291cmNlKTtcbiAgICAgICAgdmFyIHRhcmdldCA9IF90YXJnZXQgfHwgKGlzQXJyYXkgPyBuZXcgQXJyYXkoc291cmNlLmxlbmd0aCkgOiB7fSk7XG5cbiAgICAgICAgaWYgKGlzQXJyYXkpIHtcbiAgICAgICAgICBfY29weUFycmF5KHNvdXJjZSwgdGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfY29weU9iamVjdChzb3VyY2UsIHRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKiBHZXQgdGhlIGRhdGEgYmFzZWQgb24ga2V5KiovXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gY29weU9iamVjdChkYXRhW25hbWVdKTtcbiAgICB9O1xuXG4gICAgLy8gTWFjIEFkZHJlc3NcbiAgICBDaGFuY2UucHJvdG90eXBlLm1hY19hZGRyZXNzID0gZnVuY3Rpb24ob3B0aW9ucyl7XG4gICAgICAgIC8vIHR5cGljYWxseSBtYWMgYWRkcmVzc2VzIGFyZSBzZXBhcmF0ZWQgYnkgXCI6XCJcbiAgICAgICAgLy8gaG93ZXZlciB0aGV5IGNhbiBhbHNvIGJlIHNlcGFyYXRlZCBieSBcIi1cIlxuICAgICAgICAvLyB0aGUgbmV0d29yayB2YXJpYW50IHVzZXMgYSBkb3QgZXZlcnkgZm91cnRoIGJ5dGVcblxuICAgICAgICBvcHRpb25zID0gaW5pdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGlmKCFvcHRpb25zLnNlcGFyYXRvcikge1xuICAgICAgICAgICAgb3B0aW9ucy5zZXBhcmF0b3IgPSAgb3B0aW9ucy5uZXR3b3JrVmVyc2lvbiA/IFwiLlwiIDogXCI6XCI7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWFjX3Bvb2w9XCJBQkNERUYxMjM0NTY3ODkwXCIsXG4gICAgICAgICAgICBtYWMgPSBcIlwiO1xuICAgICAgICBpZighb3B0aW9ucy5uZXR3b3JrVmVyc2lvbikge1xuICAgICAgICAgICAgbWFjID0gdGhpcy5uKHRoaXMuc3RyaW5nLCA2LCB7IHBvb2w6IG1hY19wb29sLCBsZW5ndGg6MiB9KS5qb2luKG9wdGlvbnMuc2VwYXJhdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hYyA9IHRoaXMubih0aGlzLnN0cmluZywgMywgeyBwb29sOiBtYWNfcG9vbCwgbGVuZ3RoOjQgfSkuam9pbihvcHRpb25zLnNlcGFyYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWFjO1xuICAgIH07XG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm5vcm1hbCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9ucyhvcHRpb25zLCB7bWVhbiA6IDAsIGRldiA6IDF9KTtcblxuICAgICAgICAvLyBUaGUgTWFyc2FnbGlhIFBvbGFyIG1ldGhvZFxuICAgICAgICB2YXIgcywgdSwgdiwgbm9ybSxcbiAgICAgICAgICAgIG1lYW4gPSBvcHRpb25zLm1lYW4sXG4gICAgICAgICAgICBkZXYgPSBvcHRpb25zLmRldjtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICAvLyBVIGFuZCBWIGFyZSBmcm9tIHRoZSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvbiAoLTEsIDEpXG4gICAgICAgICAgICB1ID0gdGhpcy5yYW5kb20oKSAqIDIgLSAxO1xuICAgICAgICAgICAgdiA9IHRoaXMucmFuZG9tKCkgKiAyIC0gMTtcblxuICAgICAgICAgICAgcyA9IHUgKiB1ICsgdiAqIHY7XG4gICAgICAgIH0gd2hpbGUgKHMgPj0gMSk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgc3RhbmRhcmQgbm9ybWFsIHZhcmlhdGVcbiAgICAgICAgbm9ybSA9IHUgKiBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhzKSAvIHMpO1xuXG4gICAgICAgIC8vIFNoYXBlIGFuZCBzY2FsZVxuICAgICAgICByZXR1cm4gZGV2ICogbm9ybSArIG1lYW47XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUucmFkaW8gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAvLyBJbml0aWFsIExldHRlciAoVHlwaWNhbGx5IERlc2lnbmF0ZWQgYnkgU2lkZSBvZiBNaXNzaXNzaXBwaSBSaXZlcilcbiAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zKG9wdGlvbnMsIHtzaWRlIDogXCI/XCJ9KTtcbiAgICAgICAgdmFyIGZsID0gXCJcIjtcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnNpZGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwiZWFzdFwiOlxuICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICAgICAgZmwgPSBcIldcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwid2VzdFwiOlxuICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgZmwgPSBcIktcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZmwgPSB0aGlzLmNoYXJhY3Rlcih7cG9vbDogXCJLV1wifSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmbCArIHRoaXMuY2hhcmFjdGVyKHthbHBoYTogdHJ1ZSwgY2FzaW5nOiBcInVwcGVyXCJ9KSArXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFyYWN0ZXIoe2FscGhhOiB0cnVlLCBjYXNpbmc6IFwidXBwZXJcIn0pICtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJhY3Rlcih7YWxwaGE6IHRydWUsIGNhc2luZzogXCJ1cHBlclwifSk7XG4gICAgfTtcblxuICAgIC8vIFNldCB0aGUgZGF0YSBhcyBrZXkgYW5kIGRhdGEgb3IgdGhlIGRhdGEgbWFwXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgZGF0YVtuYW1lXSA9IHZhbHVlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBjb3B5T2JqZWN0KG5hbWUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIENoYW5jZS5wcm90b3R5cGUudHYgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWRpbyhvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgLy8gSUQgbnVtYmVyIGZvciBCcmF6aWwgY29tcGFuaWVzXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5jbnBqID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMubih0aGlzLm5hdHVyYWwsIDgsIHsgbWF4OiA5IH0pO1xuICAgICAgICB2YXIgZDEgPSAyK25bN10qNituWzZdKjcrbls1XSo4K25bNF0qOStuWzNdKjIrblsyXSozK25bMV0qNCtuWzBdKjU7XG4gICAgICAgIGQxID0gMTEgLSAoZDEgJSAxMSk7XG4gICAgICAgIGlmIChkMT49MTApe1xuICAgICAgICAgICAgZDEgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkMiA9IGQxKjIrMytuWzddKjcrbls2XSo4K25bNV0qOStuWzRdKjIrblszXSozK25bMl0qNCtuWzFdKjUrblswXSo2O1xuICAgICAgICBkMiA9IDExIC0gKGQyICUgMTEpO1xuICAgICAgICBpZiAoZDI+PTEwKXtcbiAgICAgICAgICAgIGQyID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJycrblswXStuWzFdKycuJytuWzJdK25bM10rbls0XSsnLicrbls1XStuWzZdK25bN10rJy8wMDAxLScrZDErZDI7XG4gICAgfTtcblxuICAgIC8vIC0tIEVuZCBNaXNjZWxsYW5lb3VzIC0tXG5cbiAgICBDaGFuY2UucHJvdG90eXBlLm1lcnNlbm5lX3R3aXN0ZXIgPSBmdW5jdGlvbiAoc2VlZCkge1xuICAgICAgICByZXR1cm4gbmV3IE1lcnNlbm5lVHdpc3RlcihzZWVkKTtcbiAgICB9O1xuXG4gICAgQ2hhbmNlLnByb3RvdHlwZS5ibHVlaW1wX21kNSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbHVlSW1wTUQ1KCk7XG4gICAgfTtcblxuICAgIC8vIE1lcnNlbm5lIFR3aXN0ZXIgZnJvbSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9iYW5rc2Vhbi8zMDA0OTRcbiAgICB2YXIgTWVyc2VubmVUd2lzdGVyID0gZnVuY3Rpb24gKHNlZWQpIHtcbiAgICAgICAgaWYgKHNlZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8ga2VwdCByYW5kb20gbnVtYmVyIHNhbWUgc2l6ZSBhcyB0aW1lIHVzZWQgcHJldmlvdXNseSB0byBlbnN1cmUgbm8gdW5leHBlY3RlZCByZXN1bHRzIGRvd25zdHJlYW1cbiAgICAgICAgICAgIHNlZWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTWF0aC5wb3coMTAsMTMpKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBQZXJpb2QgcGFyYW1ldGVycyAqL1xuICAgICAgICB0aGlzLk4gPSA2MjQ7XG4gICAgICAgIHRoaXMuTSA9IDM5NztcbiAgICAgICAgdGhpcy5NQVRSSVhfQSA9IDB4OTkwOGIwZGY7ICAgLyogY29uc3RhbnQgdmVjdG9yIGEgKi9cbiAgICAgICAgdGhpcy5VUFBFUl9NQVNLID0gMHg4MDAwMDAwMDsgLyogbW9zdCBzaWduaWZpY2FudCB3LXIgYml0cyAqL1xuICAgICAgICB0aGlzLkxPV0VSX01BU0sgPSAweDdmZmZmZmZmOyAvKiBsZWFzdCBzaWduaWZpY2FudCByIGJpdHMgKi9cblxuICAgICAgICB0aGlzLm10ID0gbmV3IEFycmF5KHRoaXMuTik7IC8qIHRoZSBhcnJheSBmb3IgdGhlIHN0YXRlIHZlY3RvciAqL1xuICAgICAgICB0aGlzLm10aSA9IHRoaXMuTiArIDE7IC8qIG10aT09TiArIDEgbWVhbnMgbXRbTl0gaXMgbm90IGluaXRpYWxpemVkICovXG5cbiAgICAgICAgdGhpcy5pbml0X2dlbnJhbmQoc2VlZCk7XG4gICAgfTtcblxuICAgIC8qIGluaXRpYWxpemVzIG10W05dIHdpdGggYSBzZWVkICovXG4gICAgTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5pbml0X2dlbnJhbmQgPSBmdW5jdGlvbiAocykge1xuICAgICAgICB0aGlzLm10WzBdID0gcyA+Pj4gMDtcbiAgICAgICAgZm9yICh0aGlzLm10aSA9IDE7IHRoaXMubXRpIDwgdGhpcy5OOyB0aGlzLm10aSsrKSB7XG4gICAgICAgICAgICBzID0gdGhpcy5tdFt0aGlzLm10aSAtIDFdIF4gKHRoaXMubXRbdGhpcy5tdGkgLSAxXSA+Pj4gMzApO1xuICAgICAgICAgICAgdGhpcy5tdFt0aGlzLm10aV0gPSAoKCgoKHMgJiAweGZmZmYwMDAwKSA+Pj4gMTYpICogMTgxMjQzMzI1MykgPDwgMTYpICsgKHMgJiAweDAwMDBmZmZmKSAqIDE4MTI0MzMyNTMpICsgdGhpcy5tdGk7XG4gICAgICAgICAgICAvKiBTZWUgS251dGggVEFPQ1AgVm9sMi4gM3JkIEVkLiBQLjEwNiBmb3IgbXVsdGlwbGllci4gKi9cbiAgICAgICAgICAgIC8qIEluIHRoZSBwcmV2aW91cyB2ZXJzaW9ucywgTVNCcyBvZiB0aGUgc2VlZCBhZmZlY3QgICAqL1xuICAgICAgICAgICAgLyogb25seSBNU0JzIG9mIHRoZSBhcnJheSBtdFtdLiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAvKiAyMDAyLzAxLzA5IG1vZGlmaWVkIGJ5IE1ha290byBNYXRzdW1vdG8gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMubXRbdGhpcy5tdGldID4+Pj0gMDtcbiAgICAgICAgICAgIC8qIGZvciA+MzIgYml0IG1hY2hpbmVzICovXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyogaW5pdGlhbGl6ZSBieSBhbiBhcnJheSB3aXRoIGFycmF5LWxlbmd0aCAqL1xuICAgIC8qIGluaXRfa2V5IGlzIHRoZSBhcnJheSBmb3IgaW5pdGlhbGl6aW5nIGtleXMgKi9cbiAgICAvKiBrZXlfbGVuZ3RoIGlzIGl0cyBsZW5ndGggKi9cbiAgICAvKiBzbGlnaHQgY2hhbmdlIGZvciBDKyssIDIwMDQvMi8yNiAqL1xuICAgIE1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuaW5pdF9ieV9hcnJheSA9IGZ1bmN0aW9uIChpbml0X2tleSwga2V5X2xlbmd0aCkge1xuICAgICAgICB2YXIgaSA9IDEsIGogPSAwLCBrLCBzO1xuICAgICAgICB0aGlzLmluaXRfZ2VucmFuZCgxOTY1MDIxOCk7XG4gICAgICAgIGsgPSAodGhpcy5OID4ga2V5X2xlbmd0aCA/IHRoaXMuTiA6IGtleV9sZW5ndGgpO1xuICAgICAgICBmb3IgKDsgazsgay0tKSB7XG4gICAgICAgICAgICBzID0gdGhpcy5tdFtpIC0gMV0gXiAodGhpcy5tdFtpIC0gMV0gPj4+IDMwKTtcbiAgICAgICAgICAgIHRoaXMubXRbaV0gPSAodGhpcy5tdFtpXSBeICgoKCgocyAmIDB4ZmZmZjAwMDApID4+PiAxNikgKiAxNjY0NTI1KSA8PCAxNikgKyAoKHMgJiAweDAwMDBmZmZmKSAqIDE2NjQ1MjUpKSkgKyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi9cbiAgICAgICAgICAgIHRoaXMubXRbaV0gPj4+PSAwOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqL1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgaWYgKGkgPj0gdGhpcy5OKSB7IHRoaXMubXRbMF0gPSB0aGlzLm10W3RoaXMuTiAtIDFdOyBpID0gMTsgfVxuICAgICAgICAgICAgaWYgKGogPj0ga2V5X2xlbmd0aCkgeyBqID0gMDsgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoayA9IHRoaXMuTiAtIDE7IGs7IGstLSkge1xuICAgICAgICAgICAgcyA9IHRoaXMubXRbaSAtIDFdIF4gKHRoaXMubXRbaSAtIDFdID4+PiAzMCk7XG4gICAgICAgICAgICB0aGlzLm10W2ldID0gKHRoaXMubXRbaV0gXiAoKCgoKHMgJiAweGZmZmYwMDAwKSA+Pj4gMTYpICogMTU2NjA4Mzk0MSkgPDwgMTYpICsgKHMgJiAweDAwMDBmZmZmKSAqIDE1NjYwODM5NDEpKSAtIGk7IC8qIG5vbiBsaW5lYXIgKi9cbiAgICAgICAgICAgIHRoaXMubXRbaV0gPj4+PSAwOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqL1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgaWYgKGkgPj0gdGhpcy5OKSB7IHRoaXMubXRbMF0gPSB0aGlzLm10W3RoaXMuTiAtIDFdOyBpID0gMTsgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tdFswXSA9IDB4ODAwMDAwMDA7IC8qIE1TQiBpcyAxOyBhc3N1cmluZyBub24temVybyBpbml0aWFsIGFycmF5ICovXG4gICAgfTtcblxuICAgIC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMHhmZmZmZmZmZl0taW50ZXJ2YWwgKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmdlbnJhbmRfaW50MzIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5O1xuICAgICAgICB2YXIgbWFnMDEgPSBuZXcgQXJyYXkoMHgwLCB0aGlzLk1BVFJJWF9BKTtcbiAgICAgICAgLyogbWFnMDFbeF0gPSB4ICogTUFUUklYX0EgIGZvciB4PTAsMSAqL1xuXG4gICAgICAgIGlmICh0aGlzLm10aSA+PSB0aGlzLk4pIHsgLyogZ2VuZXJhdGUgTiB3b3JkcyBhdCBvbmUgdGltZSAqL1xuICAgICAgICAgICAgdmFyIGtrO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5tdGkgPT09IHRoaXMuTiArIDEpIHsgICAvKiBpZiBpbml0X2dlbnJhbmQoKSBoYXMgbm90IGJlZW4gY2FsbGVkLCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdF9nZW5yYW5kKDU0ODkpOyAvKiBhIGRlZmF1bHQgaW5pdGlhbCBzZWVkIGlzIHVzZWQgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoa2sgPSAwOyBrayA8IHRoaXMuTiAtIHRoaXMuTTsga2srKykge1xuICAgICAgICAgICAgICAgIHkgPSAodGhpcy5tdFtra10mdGhpcy5VUFBFUl9NQVNLKXwodGhpcy5tdFtrayArIDFdJnRoaXMuTE9XRVJfTUFTSyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tdFtra10gPSB0aGlzLm10W2trICsgdGhpcy5NXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7a2sgPCB0aGlzLk4gLSAxOyBraysrKSB7XG4gICAgICAgICAgICAgICAgeSA9ICh0aGlzLm10W2trXSZ0aGlzLlVQUEVSX01BU0spfCh0aGlzLm10W2trICsgMV0mdGhpcy5MT1dFUl9NQVNLKTtcbiAgICAgICAgICAgICAgICB0aGlzLm10W2trXSA9IHRoaXMubXRba2sgKyAodGhpcy5NIC0gdGhpcy5OKV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHkgPSAodGhpcy5tdFt0aGlzLk4gLSAxXSZ0aGlzLlVQUEVSX01BU0spfCh0aGlzLm10WzBdJnRoaXMuTE9XRVJfTUFTSyk7XG4gICAgICAgICAgICB0aGlzLm10W3RoaXMuTiAtIDFdID0gdGhpcy5tdFt0aGlzLk0gLSAxXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXG4gICAgICAgICAgICB0aGlzLm10aSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB5ID0gdGhpcy5tdFt0aGlzLm10aSsrXTtcblxuICAgICAgICAvKiBUZW1wZXJpbmcgKi9cbiAgICAgICAgeSBePSAoeSA+Pj4gMTEpO1xuICAgICAgICB5IF49ICh5IDw8IDcpICYgMHg5ZDJjNTY4MDtcbiAgICAgICAgeSBePSAoeSA8PCAxNSkgJiAweGVmYzYwMDAwO1xuICAgICAgICB5IF49ICh5ID4+PiAxOCk7XG5cbiAgICAgICAgcmV0dXJuIHkgPj4+IDA7XG4gICAgfTtcblxuICAgIC8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMHg3ZmZmZmZmZl0taW50ZXJ2YWwgKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmdlbnJhbmRfaW50MzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5nZW5yYW5kX2ludDMyKCkgPj4+IDEpO1xuICAgIH07XG5cbiAgICAvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDFdLXJlYWwtaW50ZXJ2YWwgKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmdlbnJhbmRfcmVhbDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbnJhbmRfaW50MzIoKSAqICgxLjAgLyA0Mjk0OTY3Mjk1LjApO1xuICAgICAgICAvKiBkaXZpZGVkIGJ5IDJeMzItMSAqL1xuICAgIH07XG5cbiAgICAvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpLXJlYWwtaW50ZXJ2YWwgKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLnJhbmRvbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VucmFuZF9pbnQzMigpICogKDEuMCAvIDQyOTQ5NjcyOTYuMCk7XG4gICAgICAgIC8qIGRpdmlkZWQgYnkgMl4zMiAqL1xuICAgIH07XG5cbiAgICAvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uICgwLDEpLXJlYWwtaW50ZXJ2YWwgKi9cbiAgICBNZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmdlbnJhbmRfcmVhbDMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5nZW5yYW5kX2ludDMyKCkgKyAwLjUpICogKDEuMCAvIDQyOTQ5NjcyOTYuMCk7XG4gICAgICAgIC8qIGRpdmlkZWQgYnkgMl4zMiAqL1xuICAgIH07XG5cbiAgICAvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpIHdpdGggNTMtYml0IHJlc29sdXRpb24qL1xuICAgIE1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuZ2VucmFuZF9yZXM1MyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGEgPSB0aGlzLmdlbnJhbmRfaW50MzIoKT4+PjUsIGIgPSB0aGlzLmdlbnJhbmRfaW50MzIoKT4+PjY7XG4gICAgICAgIHJldHVybiAoYSAqIDY3MTA4ODY0LjAgKyBiKSAqICgxLjAgLyA5MDA3MTk5MjU0NzQwOTkyLjApO1xuICAgIH07XG5cbiAgICAvLyBCbHVlSW1wIE1ENSBoYXNoaW5nIGFsZ29yaXRobSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL0phdmFTY3JpcHQtTUQ1XG4gICAgdmFyIEJsdWVJbXBNRDUgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLlZFUlNJT04gPSAnMS4wLjEnO1xuXG4gICAgLypcbiAgICAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHlcbiAgICAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5zYWZlX2FkZCA9IGZ1bmN0aW9uIHNhZmVfYWRkKHgsIHkpIHtcbiAgICAgICAgdmFyIGxzdyA9ICh4ICYgMHhGRkZGKSArICh5ICYgMHhGRkZGKSxcbiAgICAgICAgICAgIG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpO1xuICAgICAgICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhGRkZGKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIEJpdHdpc2Ugcm90YXRlIGEgMzItYml0IG51bWJlciB0byB0aGUgbGVmdC5cbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLmJpdF9yb2xsID0gZnVuY3Rpb24gKG51bSwgY250KSB7XG4gICAgICAgIHJldHVybiAobnVtIDw8IGNudCkgfCAobnVtID4+PiAoMzIgLSBjbnQpKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGZpdmUgYmFzaWMgb3BlcmF0aW9ucyB0aGUgYWxnb3JpdGhtIHVzZXMuXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5tZDVfY21uID0gZnVuY3Rpb24gKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZV9hZGQodGhpcy5iaXRfcm9sbCh0aGlzLnNhZmVfYWRkKHRoaXMuc2FmZV9hZGQoYSwgcSksIHRoaXMuc2FmZV9hZGQoeCwgdCkpLCBzKSwgYik7XG4gICAgfTtcbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5tZDVfZmYgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZDVfY21uKChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLm1kNV9nZyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1kNV9jbW4oKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xuICAgIH07XG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUubWQ1X2hoID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWQ1X2NtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xuICAgIH07XG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUubWQ1X2lpID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWQ1X2NtbihjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoLlxuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuYmlubF9tZDUgPSBmdW5jdGlvbiAoeCwgbGVuKSB7XG4gICAgICAgIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gICAgICAgIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgKGxlbiAlIDMyKTtcbiAgICAgICAgeFsoKChsZW4gKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gbGVuO1xuXG4gICAgICAgIHZhciBpLCBvbGRhLCBvbGRiLCBvbGRjLCBvbGRkLFxuICAgICAgICAgICAgYSA9ICAxNzMyNTg0MTkzLFxuICAgICAgICAgICAgYiA9IC0yNzE3MzM4NzksXG4gICAgICAgICAgICBjID0gLTE3MzI1ODQxOTQsXG4gICAgICAgICAgICBkID0gIDI3MTczMzg3ODtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICAgICAgICAgIG9sZGEgPSBhO1xuICAgICAgICAgICAgb2xkYiA9IGI7XG4gICAgICAgICAgICBvbGRjID0gYztcbiAgICAgICAgICAgIG9sZGQgPSBkO1xuXG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZmYoYSwgYiwgYywgZCwgeFtpXSwgICAgICAgNywgLTY4MDg3NjkzNik7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgIDFdLCAxMiwgLTM4OTU2NDU4Nik7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgIDJdLCAxNywgIDYwNjEwNTgxOSk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSArICA0XSwgIDcsIC0xNzY0MTg4OTcpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArICA1XSwgMTIsICAxMjAwMDgwNDI2KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgIDddLCAyMiwgLTQ1NzA1OTgzKTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAgOF0sICA3LCAgMTc3MDAzNTQxNik7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTcsIC00MjA2Myk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgIDcsICAxODA0NjAzNjgyKTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTcsIC0xNTAyMDAyMjkwKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9mZihiLCBjLCBkLCBhLCB4W2kgKyAxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XG5cbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyAgMV0sICA1LCAtMTY1Nzk2NTEwKTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9nZyhkLCBhLCBiLCBjLCB4W2kgKyAgNl0sICA5LCAtMTA2OTUwMTYzMik7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgIDY0MzcxNzcxMyk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZ2coYiwgYywgZCwgYSwgeFtpXSwgICAgICAyMCwgLTM3Mzg5NzMwMik7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfZ2coYSwgYiwgYywgZCwgeFtpICsgIDVdLCAgNSwgLTcwMTU1ODY5MSk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgMTBdLCAgOSwgIDM4MDE2MDgzKTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9nZyhjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE0LCAtNjYwNDc4MzM1KTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9nZyhiLCBjLCBkLCBhLCB4W2kgKyAgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyAgOV0sICA1LCAgNTY4NDQ2NDM4KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9nZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sICA5LCAtMTAxOTgwMzY5MCk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgIDhdLCAyMCwgIDExNjM1MzE1MDEpO1xuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9nZyhkLCBhLCBiLCBjLCB4W2kgKyAgMl0sICA5LCAtNTE0MDM3ODQpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArICA3XSwgMTQsICAxNzM1MzI4NDczKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9nZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNCk7XG5cbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyAgNV0sICA0LCAtMzc4NTU4KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9oaChkLCBhLCBiLCBjLCB4W2kgKyAgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNiwgIDE4MzkwMzA1NjIpO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArIDE0XSwgMjMsIC0zNTMwOTU1Nik7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgIDFdLCAgNCwgLTE1MzA5OTIwNjApO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArICA0XSwgMTEsICAxMjcyODkzMzUzKTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyAgN10sIDE2LCAtMTU1NDk3NjMyKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyAxMF0sIDIzLCAtMTA5NDczMDY0MCk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgMTNdLCAgNCwgIDY4MTI3OTE3NCk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaGgoZCwgYSwgYiwgYywgeFtpXSwgICAgICAxMSwgLTM1ODUzNzIyMik7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgIDNdLCAxNiwgLTcyMjUyMTk3OSk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgIDZdLCAyMywgIDc2MDI5MTg5KTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyAgOV0sICA0LCAtNjQwMzY0NDg3KTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9oaChkLCBhLCBiLCBjLCB4W2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCAgNTMwNzQyNTIwKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyAgMl0sIDIzLCAtOTk1MzM4NjUxKTtcblxuICAgICAgICAgICAgYSA9IHRoaXMubWQ1X2lpKGEsIGIsIGMsIGQsIHhbaV0sICAgICAgIDYsIC0xOTg2MzA4NDQpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSArICA3XSwgMTAsICAxMTI2ODkxNDE1KTtcbiAgICAgICAgICAgIGMgPSB0aGlzLm1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE1LCAtMTQxNjM1NDkwNSk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgIDVdLCAyMSwgLTU3NDM0MDU1KTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sICA2LCAgMTcwMDQ4NTU3MSk7XG4gICAgICAgICAgICBkID0gdGhpcy5tZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgIDNdLCAxMCwgLTE4OTQ5ODY2MDYpO1xuICAgICAgICAgICAgYyA9IHRoaXMubWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTUsIC0xMDUxNTIzKTtcbiAgICAgICAgICAgIGIgPSB0aGlzLm1kNV9paShiLCBjLCBkLCBhLCB4W2kgKyAgMV0sIDIxLCAtMjA1NDkyMjc5OSk7XG4gICAgICAgICAgICBhID0gdGhpcy5tZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgIDhdLCAgNiwgIDE4NzMzMTMzNTkpO1xuICAgICAgICAgICAgZCA9IHRoaXMubWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSArIDE1XSwgMTAsIC0zMDYxMTc0NCk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgIDZdLCAxNSwgLTE1NjAxOTgzODApO1xuICAgICAgICAgICAgYiA9IHRoaXMubWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArIDEzXSwgMjEsICAxMzA5MTUxNjQ5KTtcbiAgICAgICAgICAgIGEgPSB0aGlzLm1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyAgNF0sICA2LCAtMTQ1NTIzMDcwKTtcbiAgICAgICAgICAgIGQgPSB0aGlzLm1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XG4gICAgICAgICAgICBjID0gdGhpcy5tZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgIDJdLCAxNSwgIDcxODc4NzI1OSk7XG4gICAgICAgICAgICBiID0gdGhpcy5tZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgIDldLCAyMSwgLTM0MzQ4NTU1MSk7XG5cbiAgICAgICAgICAgIGEgPSB0aGlzLnNhZmVfYWRkKGEsIG9sZGEpO1xuICAgICAgICAgICAgYiA9IHRoaXMuc2FmZV9hZGQoYiwgb2xkYik7XG4gICAgICAgICAgICBjID0gdGhpcy5zYWZlX2FkZChjLCBvbGRjKTtcbiAgICAgICAgICAgIGQgPSB0aGlzLnNhZmVfYWRkKGQsIG9sZGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbYSwgYiwgYywgZF07XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYSBzdHJpbmdcbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLmJpbmwycnN0ciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dHB1dCA9ICcnO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoICogMzI7IGkgKz0gOCkge1xuICAgICAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGlucHV0W2kgPj4gNV0gPj4+IChpICUgMzIpKSAmIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBDb252ZXJ0IGEgcmF3IHN0cmluZyB0byBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gICAgKiBDaGFyYWN0ZXJzID4yNTUgaGF2ZSB0aGVpciBoaWdoLWJ5dGUgc2lsZW50bHkgaWdub3JlZC5cbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLnJzdHIyYmlubCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dHB1dCA9IFtdO1xuICAgICAgICBvdXRwdXRbKGlucHV0Lmxlbmd0aCA+PiAyKSAtIDFdID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3V0cHV0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBvdXRwdXRbaV0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGggKiA4OyBpICs9IDgpIHtcbiAgICAgICAgICAgIG91dHB1dFtpID4+IDVdIHw9IChpbnB1dC5jaGFyQ29kZUF0KGkgLyA4KSAmIDB4RkYpIDw8IChpICUgMzIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcblxuICAgIC8qXG4gICAgKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhIHJhdyBzdHJpbmdcbiAgICAqL1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLnJzdHJfbWQ1ID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmlubDJyc3RyKHRoaXMuYmlubF9tZDUodGhpcy5yc3RyMmJpbmwocyksIHMubGVuZ3RoICogOCkpO1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ2FsY3VsYXRlIHRoZSBITUFDLU1ENSwgb2YgYSBrZXkgYW5kIHNvbWUgZGF0YSAocmF3IHN0cmluZ3MpXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5yc3RyX2htYWNfbWQ1ID0gZnVuY3Rpb24gKGtleSwgZGF0YSkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGJrZXkgPSB0aGlzLnJzdHIyYmlubChrZXkpLFxuICAgICAgICAgICAgaXBhZCA9IFtdLFxuICAgICAgICAgICAgb3BhZCA9IFtdLFxuICAgICAgICAgICAgaGFzaDtcbiAgICAgICAgaXBhZFsxNV0gPSBvcGFkWzE1XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGJrZXkubGVuZ3RoID4gMTYpIHtcbiAgICAgICAgICAgIGJrZXkgPSB0aGlzLmJpbmxfbWQ1KGJrZXksIGtleS5sZW5ndGggKiA4KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXBhZFtpXSA9IGJrZXlbaV0gXiAweDM2MzYzNjM2O1xuICAgICAgICAgICAgb3BhZFtpXSA9IGJrZXlbaV0gXiAweDVDNUM1QzVDO1xuICAgICAgICB9XG4gICAgICAgIGhhc2ggPSB0aGlzLmJpbmxfbWQ1KGlwYWQuY29uY2F0KHRoaXMucnN0cjJiaW5sKGRhdGEpKSwgNTEyICsgZGF0YS5sZW5ndGggKiA4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmlubDJyc3RyKHRoaXMuYmlubF9tZDUob3BhZC5jb25jYXQoaGFzaCksIDUxMiArIDEyOCkpO1xuICAgIH07XG5cbiAgICAvKlxuICAgICogQ29udmVydCBhIHJhdyBzdHJpbmcgdG8gYSBoZXggc3RyaW5nXG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5yc3RyMmhleCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgaGV4X3RhYiA9ICcwMTIzNDU2Nzg5YWJjZGVmJyxcbiAgICAgICAgICAgIG91dHB1dCA9ICcnLFxuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgeCA9IGlucHV0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBvdXRwdXQgKz0gaGV4X3RhYi5jaGFyQXQoKHggPj4+IDQpICYgMHgwRikgK1xuICAgICAgICAgICAgICAgIGhleF90YWIuY2hhckF0KHggJiAweDBGKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG5cbiAgICAvKlxuICAgICogRW5jb2RlIGEgc3RyaW5nIGFzIHV0Zi04XG4gICAgKi9cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5zdHIycnN0cl91dGY4ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAqIFRha2Ugc3RyaW5nIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGVpdGhlciByYXcgb3IgaGV4IGVuY29kZWQgc3RyaW5nc1xuICAgICovXG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUucmF3X21kNSA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJzdHJfbWQ1KHRoaXMuc3RyMnJzdHJfdXRmOChzKSk7XG4gICAgfTtcbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5oZXhfbWQ1ID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnN0cjJoZXgodGhpcy5yYXdfbWQ1KHMpKTtcbiAgICB9O1xuICAgIEJsdWVJbXBNRDUucHJvdG90eXBlLnJhd19obWFjX21kNSA9IGZ1bmN0aW9uIChrLCBkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJzdHJfaG1hY19tZDUodGhpcy5zdHIycnN0cl91dGY4KGspLCB0aGlzLnN0cjJyc3RyX3V0ZjgoZCkpO1xuICAgIH07XG4gICAgQmx1ZUltcE1ENS5wcm90b3R5cGUuaGV4X2htYWNfbWQ1ID0gZnVuY3Rpb24gKGssIGQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnN0cjJoZXgodGhpcy5yYXdfaG1hY19tZDUoaywgZCkpO1xuICAgIH07XG5cbiAgICBCbHVlSW1wTUQ1LnByb3RvdHlwZS5tZDUgPSBmdW5jdGlvbiAoc3RyaW5nLCBrZXksIHJhdykge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgaWYgKCFyYXcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oZXhfbWQ1KHN0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhd19tZDUoc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmF3KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZXhfaG1hY19tZDUoa2V5LCBzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmF3X2htYWNfbWQ1KGtleSwgc3RyaW5nKTtcbiAgICB9O1xuXG4gICAgLy8gQ29tbW9uSlMgbW9kdWxlXG4gICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IENoYW5jZTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRzLkNoYW5jZSA9IENoYW5jZTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZVxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gQ2hhbmNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBhIGltcG9ydHNTY3JpcHMgb2JqZWN0IGRlZmluZSBjaGFuY2UgZm9yIHdvcmtlclxuICAgIGlmICh0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY2hhbmNlID0gbmV3IENoYW5jZSgpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgd2luZG93IG9iamVjdCwgdGhhdCBhdCBsZWFzdCBoYXMgYSBkb2N1bWVudCBwcm9wZXJ0eSxcbiAgICAvLyBpbnN0YW50aWF0ZSBhbmQgZGVmaW5lIGNoYW5jZSBvbiB0aGUgd2luZG93XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB3aW5kb3cuQ2hhbmNlID0gQ2hhbmNlO1xuICAgICAgICB3aW5kb3cuY2hhbmNlID0gbmV3IENoYW5jZSgpO1xuICAgIH1cbn0pKCk7XG4iLCJcbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RlYnVnJyk7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZVxuICAgICAgICAgICAgICAgJiYgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZS5zdG9yYWdlXG4gICAgICAgICAgICAgICAgICA/IGNocm9tZS5zdG9yYWdlLmxvY2FsXG4gICAgICAgICAgICAgICAgICA6IGxvY2Fsc3RvcmFnZSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcbiAgJ2xpZ2h0c2VhZ3JlZW4nLFxuICAnZm9yZXN0Z3JlZW4nLFxuICAnZ29sZGVucm9kJyxcbiAgJ2RvZGdlcmJsdWUnLFxuICAnZGFya29yY2hpZCcsXG4gICdjcmltc29uJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG4gIC8vIGlzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG4gIHJldHVybiAoJ1dlYmtpdEFwcGVhcmFuY2UnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSkgfHxcbiAgICAvLyBpcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG4gICAgKHdpbmRvdy5jb25zb2xlICYmIChjb25zb2xlLmZpcmVidWcgfHwgKGNvbnNvbGUuZXhjZXB0aW9uICYmIGNvbnNvbGUudGFibGUpKSkgfHxcbiAgICAvLyBpcyBmaXJlZm94ID49IHYzMT9cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcbiAgICAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpO1xufVxuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uKHYpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xufTtcblxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgdXNlQ29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cbiAgYXJnc1swXSA9ICh1c2VDb2xvcnMgPyAnJWMnIDogJycpXG4gICAgKyB0aGlzLm5hbWVzcGFjZVxuICAgICsgKHVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKVxuICAgICsgYXJnc1swXVxuICAgICsgKHVzZUNvbG9ycyA/ICclYyAnIDogJyAnKVxuICAgICsgJysnICsgZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG4gIGlmICghdXNlQ29sb3JzKSByZXR1cm4gYXJncztcblxuICB2YXIgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG4gIGFyZ3MgPSBbYXJnc1swXSwgYywgJ2NvbG9yOiBpbmhlcml0J10uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDEpKTtcblxuICAvLyB0aGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuICAvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG4gIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGFzdEMgPSAwO1xuICBhcmdzWzBdLnJlcGxhY2UoLyVbYS16JV0vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICBpZiAoJyUlJyA9PT0gbWF0Y2gpIHJldHVybjtcbiAgICBpbmRleCsrO1xuICAgIGlmICgnJWMnID09PSBtYXRjaCkge1xuICAgICAgLy8gd2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG4gICAgICAvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuICAgICAgbGFzdEMgPSBpbmRleDtcbiAgICB9XG4gIH0pO1xuXG4gIGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5sb2coKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmxvZ2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gbG9nKCkge1xuICAvLyB0aGlzIGhhY2tlcnkgaXMgcmVxdWlyZWQgZm9yIElFOC85LCB3aGVyZVxuICAvLyB0aGUgYGNvbnNvbGUubG9nYCBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgJ2FwcGx5J1xuICByZXR1cm4gJ29iamVjdCcgPT09IHR5cGVvZiBjb25zb2xlXG4gICAgJiYgY29uc29sZS5sb2dcbiAgICAmJiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlLmxvZywgY29uc29sZSwgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG4gIHRyeSB7XG4gICAgaWYgKG51bGwgPT0gbmFtZXNwYWNlcykge1xuICAgICAgZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5kZWJ1ZyA9IG5hbWVzcGFjZXM7XG4gICAgfVxuICB9IGNhdGNoKGUpIHt9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9hZCgpIHtcbiAgdmFyIHI7XG4gIHRyeSB7XG4gICAgciA9IGV4cG9ydHMuc3RvcmFnZS5kZWJ1ZztcbiAgfSBjYXRjaChlKSB7fVxuICByZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBFbmFibGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gYGxvY2FsU3RvcmFnZS5kZWJ1Z2AgaW5pdGlhbGx5LlxuICovXG5cbmV4cG9ydHMuZW5hYmxlKGxvYWQoKSk7XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG4iLCJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqXG4gKiBFeHBvc2UgYGRlYnVnKClgIGFzIHRoZSBtb2R1bGUuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZGVidWc7XG5leHBvcnRzLmNvZXJjZSA9IGNvZXJjZTtcbmV4cG9ydHMuZGlzYWJsZSA9IGRpc2FibGU7XG5leHBvcnRzLmVuYWJsZSA9IGVuYWJsZTtcbmV4cG9ydHMuZW5hYmxlZCA9IGVuYWJsZWQ7XG5leHBvcnRzLmh1bWFuaXplID0gcmVxdWlyZSgnbXMnKTtcblxuLyoqXG4gKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cbiAqL1xuXG5leHBvcnRzLm5hbWVzID0gW107XG5leHBvcnRzLnNraXBzID0gW107XG5cbi8qKlxuICogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuICpcbiAqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyY2FzZWQgbGV0dGVyLCBpLmUuIFwiblwiLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycyA9IHt9O1xuXG4vKipcbiAqIFByZXZpb3VzbHkgYXNzaWduZWQgY29sb3IuXG4gKi9cblxudmFyIHByZXZDb2xvciA9IDA7XG5cbi8qKlxuICogUHJldmlvdXMgbG9nIHRpbWVzdGFtcC5cbiAqL1xuXG52YXIgcHJldlRpbWU7XG5cbi8qKlxuICogU2VsZWN0IGEgY29sb3IuXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2VsZWN0Q29sb3IoKSB7XG4gIHJldHVybiBleHBvcnRzLmNvbG9yc1twcmV2Q29sb3IrKyAlIGV4cG9ydHMuY29sb3JzLmxlbmd0aF07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRlYnVnKG5hbWVzcGFjZSkge1xuXG4gIC8vIGRlZmluZSB0aGUgYGRpc2FibGVkYCB2ZXJzaW9uXG4gIGZ1bmN0aW9uIGRpc2FibGVkKCkge1xuICB9XG4gIGRpc2FibGVkLmVuYWJsZWQgPSBmYWxzZTtcblxuICAvLyBkZWZpbmUgdGhlIGBlbmFibGVkYCB2ZXJzaW9uXG4gIGZ1bmN0aW9uIGVuYWJsZWQoKSB7XG5cbiAgICB2YXIgc2VsZiA9IGVuYWJsZWQ7XG5cbiAgICAvLyBzZXQgYGRpZmZgIHRpbWVzdGFtcFxuICAgIHZhciBjdXJyID0gK25ldyBEYXRlKCk7XG4gICAgdmFyIG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcbiAgICBzZWxmLmRpZmYgPSBtcztcbiAgICBzZWxmLnByZXYgPSBwcmV2VGltZTtcbiAgICBzZWxmLmN1cnIgPSBjdXJyO1xuICAgIHByZXZUaW1lID0gY3VycjtcblxuICAgIC8vIGFkZCB0aGUgYGNvbG9yYCBpZiBub3Qgc2V0XG4gICAgaWYgKG51bGwgPT0gc2VsZi51c2VDb2xvcnMpIHNlbGYudXNlQ29sb3JzID0gZXhwb3J0cy51c2VDb2xvcnMoKTtcbiAgICBpZiAobnVsbCA9PSBzZWxmLmNvbG9yICYmIHNlbGYudXNlQ29sb3JzKSBzZWxmLmNvbG9yID0gc2VsZWN0Q29sb3IoKTtcblxuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgIGFyZ3NbMF0gPSBleHBvcnRzLmNvZXJjZShhcmdzWzBdKTtcblxuICAgIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIGFyZ3NbMF0pIHtcbiAgICAgIC8vIGFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVvXG4gICAgICBhcmdzID0gWyclbyddLmNvbmNhdChhcmdzKTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgYXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16JV0pL2csIGZ1bmN0aW9uKG1hdGNoLCBmb3JtYXQpIHtcbiAgICAgIC8vIGlmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcbiAgICAgIGlmIChtYXRjaCA9PT0gJyUlJykgcmV0dXJuIG1hdGNoO1xuICAgICAgaW5kZXgrKztcbiAgICAgIHZhciBmb3JtYXR0ZXIgPSBleHBvcnRzLmZvcm1hdHRlcnNbZm9ybWF0XTtcbiAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZm9ybWF0dGVyKSB7XG4gICAgICAgIHZhciB2YWwgPSBhcmdzW2luZGV4XTtcbiAgICAgICAgbWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG4gICAgICAgIC8vIG5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcbiAgICAgICAgYXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBpbmRleC0tO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuXG4gICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBleHBvcnRzLmZvcm1hdEFyZ3MpIHtcbiAgICAgIGFyZ3MgPSBleHBvcnRzLmZvcm1hdEFyZ3MuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgfVxuICAgIHZhciBsb2dGbiA9IGVuYWJsZWQubG9nIHx8IGV4cG9ydHMubG9nIHx8IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XG4gICAgbG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gIH1cbiAgZW5hYmxlZC5lbmFibGVkID0gdHJ1ZTtcblxuICB2YXIgZm4gPSBleHBvcnRzLmVuYWJsZWQobmFtZXNwYWNlKSA/IGVuYWJsZWQgOiBkaXNhYmxlZDtcblxuICBmbi5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cbiAgcmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcbiAqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcbiAgZXhwb3J0cy5zYXZlKG5hbWVzcGFjZXMpO1xuXG4gIHZhciBzcGxpdCA9IChuYW1lc3BhY2VzIHx8ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuICB2YXIgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoIXNwbGl0W2ldKSBjb250aW51ZTsgLy8gaWdub3JlIGVtcHR5IHN0cmluZ3NcbiAgICBuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcbiAgICBpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG4gICAgICBleHBvcnRzLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnN1YnN0cigxKSArICckJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkaXNhYmxlKCkge1xuICBleHBvcnRzLmVuYWJsZSgnJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcbiAgdmFyIGksIGxlbjtcbiAgZm9yIChpID0gMCwgbGVuID0gZXhwb3J0cy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChleHBvcnRzLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZm9yIChpID0gMCwgbGVuID0gZXhwb3J0cy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChleHBvcnRzLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29lcmNlIGB2YWxgLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICogQHJldHVybiB7TWl4ZWR9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb2VyY2UodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcbiAgcmV0dXJuIHZhbDtcbn1cbiIsIi8qIVxuICogQGRlc2NyaXB0aW9uIFJlY3Vyc2l2ZSBvYmplY3QgZXh0ZW5kaW5nXG4gKiBAYXV0aG9yIFZpYWNoZXNsYXYgTG90c21hbm92IDxsb3RzbWFub3Y4OUBnbWFpbC5jb20+XG4gKiBAbGljZW5zZSBNSVRcbiAqXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNSBWaWFjaGVzbGF2IExvdHNtYW5vdlxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2ZcbiAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW5cbiAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG9cbiAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mXG4gKiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1NcbiAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUlxuICogQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSXG4gKiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGlzU3BlY2lmaWNWYWx1ZSh2YWwpIHtcblx0cmV0dXJuIChcblx0XHR2YWwgaW5zdGFuY2VvZiBCdWZmZXJcblx0XHR8fCB2YWwgaW5zdGFuY2VvZiBEYXRlXG5cdFx0fHwgdmFsIGluc3RhbmNlb2YgUmVnRXhwXG5cdCkgPyB0cnVlIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNsb25lU3BlY2lmaWNWYWx1ZSh2YWwpIHtcblx0aWYgKHZhbCBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuXHRcdHZhciB4ID0gbmV3IEJ1ZmZlcih2YWwubGVuZ3RoKTtcblx0XHR2YWwuY29weSh4KTtcblx0XHRyZXR1cm4geDtcblx0fSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKHZhbC5nZXRUaW1lKCkpO1xuXHR9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuXHRcdHJldHVybiBuZXcgUmVnRXhwKHZhbCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHNpdHVhdGlvbicpO1xuXHR9XG59XG5cbi8qKlxuICogUmVjdXJzaXZlIGNsb25pbmcgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGRlZXBDbG9uZUFycmF5KGFycikge1xuXHR2YXIgY2xvbmUgPSBbXTtcblx0YXJyLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG5cdFx0aWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsKSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuXHRcdFx0XHRjbG9uZVtpbmRleF0gPSBkZWVwQ2xvbmVBcnJheShpdGVtKTtcblx0XHRcdH0gZWxzZSBpZiAoaXNTcGVjaWZpY1ZhbHVlKGl0ZW0pKSB7XG5cdFx0XHRcdGNsb25lW2luZGV4XSA9IGNsb25lU3BlY2lmaWNWYWx1ZShpdGVtKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lW2luZGV4XSA9IGRlZXBFeHRlbmQoe30sIGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjbG9uZVtpbmRleF0gPSBpdGVtO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBjbG9uZTtcbn1cblxuLyoqXG4gKiBFeHRlbmluZyBvYmplY3QgdGhhdCBlbnRlcmVkIGluIGZpcnN0IGFyZ3VtZW50LlxuICpcbiAqIFJldHVybnMgZXh0ZW5kZWQgb2JqZWN0IG9yIGZhbHNlIGlmIGhhdmUgbm8gdGFyZ2V0IG9iamVjdCBvciBpbmNvcnJlY3QgdHlwZS5cbiAqXG4gKiBJZiB5b3Ugd2lzaCB0byBjbG9uZSBzb3VyY2Ugb2JqZWN0ICh3aXRob3V0IG1vZGlmeSBpdCksIGp1c3QgdXNlIGVtcHR5IG5ld1xuICogb2JqZWN0IGFzIGZpcnN0IGFyZ3VtZW50LCBsaWtlIHRoaXM6XG4gKiAgIGRlZXBFeHRlbmQoe30sIHlvdXJPYmpfMSwgW3lvdXJPYmpfTl0pO1xuICovXG52YXIgZGVlcEV4dGVuZCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKC8qb2JqXzEsIFtvYmpfMl0sIFtvYmpfTl0qLykge1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEgfHwgdHlwZW9mIGFyZ3VtZW50c1swXSAhPT0gJ29iamVjdCcpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcblx0XHRyZXR1cm4gYXJndW1lbnRzWzBdO1xuXHR9XG5cblx0dmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXTtcblxuXHQvLyBjb252ZXJ0IGFyZ3VtZW50cyB0byBhcnJheSBhbmQgY3V0IG9mZiB0YXJnZXQgb2JqZWN0XG5cdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuXHR2YXIgdmFsLCBzcmMsIGNsb25lO1xuXG5cdGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG5cdFx0Ly8gc2tpcCBhcmd1bWVudCBpZiBpdCBpcyBhcnJheSBvciBpc24ndCBvYmplY3Rcblx0XHRpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvYmopKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHNyYyA9IHRhcmdldFtrZXldOyAvLyBzb3VyY2UgdmFsdWVcblx0XHRcdHZhbCA9IG9ialtrZXldOyAvLyBuZXcgdmFsdWVcblxuXHRcdFx0Ly8gcmVjdXJzaW9uIHByZXZlbnRpb25cblx0XHRcdGlmICh2YWwgPT09IHRhcmdldCkge1xuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogaWYgbmV3IHZhbHVlIGlzbid0IG9iamVjdCB0aGVuIGp1c3Qgb3ZlcndyaXRlIGJ5IG5ldyB2YWx1ZVxuXHRcdFx0ICogaW5zdGVhZCBvZiBleHRlbmRpbmcuXG5cdFx0XHQgKi9cblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcgfHwgdmFsID09PSBudWxsKSB7XG5cdFx0XHRcdHRhcmdldFtrZXldID0gdmFsO1xuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdC8vIGp1c3QgY2xvbmUgYXJyYXlzIChhbmQgcmVjdXJzaXZlIGNsb25lIG9iamVjdHMgaW5zaWRlKVxuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRcdFx0dGFyZ2V0W2tleV0gPSBkZWVwQ2xvbmVBcnJheSh2YWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdC8vIGN1c3RvbSBjbG9uaW5nIGFuZCBvdmVyd3JpdGUgZm9yIHNwZWNpZmljIG9iamVjdHNcblx0XHRcdH0gZWxzZSBpZiAoaXNTcGVjaWZpY1ZhbHVlKHZhbCkpIHtcblx0XHRcdFx0dGFyZ2V0W2tleV0gPSBjbG9uZVNwZWNpZmljVmFsdWUodmFsKTtcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHQvLyBvdmVyd3JpdGUgYnkgbmV3IHZhbHVlIGlmIHNvdXJjZSBpc24ndCBvYmplY3Qgb3IgYXJyYXlcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHNyYyAhPT0gJ29iamVjdCcgfHwgc3JjID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkoc3JjKSkge1xuXHRcdFx0XHR0YXJnZXRba2V5XSA9IGRlZXBFeHRlbmQoe30sIHZhbCk7XG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0Ly8gc291cmNlIHZhbHVlIGFuZCBuZXcgdmFsdWUgaXMgb2JqZWN0cyBib3RoLCBleHRlbmRpbmcuLi5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhcmdldFtrZXldID0gZGVlcEV4dGVuZChzcmMsIHZhbCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICQgPSByZXF1aXJlKCcuL3V0aWwvdXJpLWhlbHBlcnMnKTtcblxuJC5maW5kQnlSZWYgPSByZXF1aXJlKCcuL3V0aWwvZmluZC1yZWZlcmVuY2UnKTtcbiQucmVzb2x2ZVNjaGVtYSA9IHJlcXVpcmUoJy4vdXRpbC9yZXNvbHZlLXNjaGVtYScpO1xuJC5ub3JtYWxpemVTY2hlbWEgPSByZXF1aXJlKCcuL3V0aWwvbm9ybWFsaXplLXNjaGVtYScpO1xuXG52YXIgaW5zdGFuY2UgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiAkcmVmKGZha2Vyb290LCBzY2hlbWEsIHJlZnMsIGV4KSB7XG4gICAgaWYgKHR5cGVvZiBmYWtlcm9vdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGV4ID0gcmVmcztcbiAgICAgIHJlZnMgPSBzY2hlbWE7XG4gICAgICBzY2hlbWEgPSBmYWtlcm9vdDtcbiAgICAgIGZha2Vyb290ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2NoZW1hICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzY2hlbWEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZnMgPT09ICdvYmplY3QnICYmIHJlZnMgIT09IG51bGwpIHtcbiAgICAgIHZhciBhdXggPSByZWZzO1xuXG4gICAgICByZWZzID0gW107XG5cbiAgICAgIGZvciAodmFyIGsgaW4gYXV4KSB7XG4gICAgICAgIGF1eFtrXS5pZCA9IGF1eFtrXS5pZCB8fCBrO1xuICAgICAgICByZWZzLnB1c2goYXV4W2tdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZnMgIT09ICd1bmRlZmluZWQnICYmICFBcnJheS5pc0FycmF5KHJlZnMpKSB7XG4gICAgICBleCA9ICEhcmVmcztcbiAgICAgIHJlZnMgPSBbXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoKHJlZikge1xuICAgICAgaWYgKHR5cGVvZiByZWYuaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciBpZCA9ICQucmVzb2x2ZVVSTChmYWtlcm9vdCwgcmVmLmlkKS5yZXBsYWNlKC9cXC8jPyQvLCAnJyk7XG5cbiAgICAgICAgaWYgKGlkLmluZGV4T2YoJyMnKSA+IC0xKSB7XG4gICAgICAgICAgdmFyIHBhcnRzID0gaWQuc3BsaXQoJyMnKTtcblxuICAgICAgICAgIGlmIChwYXJ0c1sxXS5jaGFyQXQoKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICBpZCA9IHBhcnRzWzBdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZCA9IHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHJlZi5yZWZzW2lkXSkge1xuICAgICAgICAgICRyZWYucmVmc1tpZF0gPSByZWY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAocmVmcyB8fCBbXSkuY29uY2F0KFtzY2hlbWFdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlZikge1xuICAgICAgc2NoZW1hID0gJC5ub3JtYWxpemVTY2hlbWEoZmFrZXJvb3QsIHJlZiwgcHVzaCk7XG4gICAgICBwdXNoKHNjaGVtYSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJC5yZXNvbHZlU2NoZW1hKHNjaGVtYSwgJHJlZi5yZWZzLCBleCk7XG4gIH1cblxuICAkcmVmLnJlZnMgPSB7fTtcbiAgJHJlZi51dGlsID0gJDtcblxuICByZXR1cm4gJHJlZjtcbn07XG5cbmluc3RhbmNlLnV0aWwgPSAkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xvbmUgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2Vlbikge1xuICBzZWVuID0gc2VlbiB8fCBbXTtcblxuICBpZiAoc2Vlbi5pbmRleE9mKG9iaikgPiAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIGRlcmVmZXJlbmNlIGNpcmN1bGFyIHN0cnVjdHVyZXMnKTtcbiAgfVxuXG4gIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHNlZW4gPSBzZWVuLmNvbmNhdChbb2JqXSk7XG5cbiAgdmFyIHRhcmdldCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDoge307XG5cbiAgZnVuY3Rpb24gY29weShrZXksIHZhbHVlKSB7XG4gICAgdGFyZ2V0W2tleV0gPSBjbG9uZSh2YWx1ZSwgc2Vlbik7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgb2JqLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgY29weShrZXksIHZhbHVlKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICBjb3B5KGtleSwgb2JqW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkID0gcmVxdWlyZSgnLi91cmktaGVscGVycycpO1xuXG5mdW5jdGlvbiBnZXQob2JqLCBwYXRoKSB7XG4gIHZhciBoYXNoID0gcGF0aC5zcGxpdCgnIycpWzFdO1xuXG4gIHZhciBwYXJ0cyA9IGhhc2guc3BsaXQoJy8nKS5zbGljZSgxKTtcblxuICB3aGlsZSAocGFydHMubGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJ0cy5zaGlmdCgpKS5yZXBsYWNlKC9+MS9nLCAnLycpLnJlcGxhY2UoL34wL2csICd+Jyk7XG5cbiAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OIHBvaW50ZXIgbm90IGZvdW5kOiAnICsgcGF0aCk7XG4gICAgfVxuXG4gICAgb2JqID0gb2JqW2tleV07XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG52YXIgZmluZCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaWQsIHJlZnMpIHtcbiAgdmFyIHRhcmdldCA9IHJlZnNbaWRdIHx8IHJlZnNbaWQuc3BsaXQoJyMnKVsxXV0gfHwgcmVmc1skLmdldERvY3VtZW50VVJJKGlkKV07XG5cbiAgaWYgKHRhcmdldCkge1xuICAgIHRhcmdldCA9IGlkLmluZGV4T2YoJyMvJykgPiAtMSA/IGdldCh0YXJnZXQsIGlkKSA6IHRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcmVmcykge1xuICAgICAgaWYgKCQucmVzb2x2ZVVSTChyZWZzW2tleV0uaWQsIGlkKSA9PT0gcmVmc1trZXldLmlkKSB7XG4gICAgICAgIHRhcmdldCA9IHJlZnNba2V5XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZmVyZW5jZSBub3QgZm91bmQ6ICcgKyBpZCk7XG4gIH1cblxuICB3aGlsZSAodGFyZ2V0LiRyZWYpIHtcbiAgICB0YXJnZXQgPSBmaW5kKHRhcmdldC4kcmVmLCByZWZzKTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJCA9IHJlcXVpcmUoJy4vdXJpLWhlbHBlcnMnKTtcblxudmFyIGNsb25lT2JqID0gcmVxdWlyZSgnLi9jbG9uZS1vYmonKTtcblxudmFyIFNDSEVNQV9VUkkgPSBbXG4gICdodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYSMnLFxuICAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjJ1xuXTtcblxuZnVuY3Rpb24gZXhwYW5kKG9iaiwgcGFyZW50LCBjYWxsYmFjaykge1xuICBpZiAob2JqKSB7XG4gICAgdmFyIGlkID0gdHlwZW9mIG9iai5pZCA9PT0gJ3N0cmluZycgPyBvYmouaWQgOiAnIyc7XG5cbiAgICBpZiAoISQuaXNVUkwoaWQpKSB7XG4gICAgICBpZCA9ICQucmVzb2x2ZVVSTChwYXJlbnQgPT09IGlkID8gbnVsbCA6IHBhcmVudCwgaWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqLiRyZWYgPT09ICdzdHJpbmcnICYmICEkLmlzVVJMKG9iai4kcmVmKSkge1xuICAgICAgb2JqLiRyZWYgPSAkLnJlc29sdmVVUkwoaWQsIG9iai4kcmVmKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iai5pZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9iai5pZCA9IHBhcmVudCA9IGlkO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEoa2V5ID09PSAnZW51bScgfHwga2V5ID09PSAncmVxdWlyZWQnKSkge1xuICAgICAgZXhwYW5kKHZhbHVlLCBwYXJlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sob2JqKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZha2Vyb290LCBzY2hlbWEsIHB1c2gpIHtcbiAgaWYgKHR5cGVvZiBmYWtlcm9vdCA9PT0gJ29iamVjdCcpIHtcbiAgICBwdXNoID0gc2NoZW1hO1xuICAgIHNjaGVtYSA9IGZha2Vyb290O1xuICAgIGZha2Vyb290ID0gbnVsbDtcbiAgfVxuXG4gIHZhciBiYXNlID0gZmFrZXJvb3QgfHwgJycsXG4gICAgICBjb3B5ID0gY2xvbmVPYmooc2NoZW1hKTtcblxuICBpZiAoY29weS4kc2NoZW1hICYmIFNDSEVNQV9VUkkuaW5kZXhPZihjb3B5LiRzY2hlbWEpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc2NoZW1hIHZlcnNpb24gKHY0IG9ubHkpJyk7XG4gIH1cblxuICBiYXNlID0gJC5yZXNvbHZlVVJMKGNvcHkuJHNjaGVtYSB8fCBTQ0hFTUFfVVJJWzBdLCBiYXNlKTtcblxuICBleHBhbmQoY29weSwgJC5yZXNvbHZlVVJMKGNvcHkuaWQgfHwgJyMnLCBiYXNlKSwgcHVzaCk7XG5cbiAgY29weS5pZCA9IGNvcHkuaWQgfHwgYmFzZTtcblxuICByZXR1cm4gY29weTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkID0gcmVxdWlyZSgnLi91cmktaGVscGVycycpO1xuXG52YXIgZmluZCA9IHJlcXVpcmUoJy4vZmluZC1yZWZlcmVuY2UnKTtcblxudmFyIGRlZXBFeHRlbmQgPSByZXF1aXJlKCdkZWVwLWV4dGVuZCcpO1xuXG5mdW5jdGlvbiBpc0tleShwcm9wKSB7XG4gIHJldHVybiBwcm9wID09PSAnZW51bScgfHwgcHJvcCA9PT0gJ3JlcXVpcmVkJyB8fCBwcm9wID09PSAnZGVmaW5pdGlvbnMnO1xufVxuXG5mdW5jdGlvbiBjb3B5KG9iaiwgcmVmcywgcGFyZW50LCByZXNvbHZlKSB7XG4gIHZhciB0YXJnZXQgPSAgQXJyYXkuaXNBcnJheShvYmopID8gW10gOiB7fTtcblxuICBpZiAodHlwZW9mIG9iai4kcmVmID09PSAnc3RyaW5nJykge1xuICAgIHZhciBiYXNlID0gJC5nZXREb2N1bWVudFVSSShvYmouJHJlZik7XG5cbiAgICBpZiAocGFyZW50ICE9PSBiYXNlIHx8IChyZXNvbHZlICYmIG9iai4kcmVmLmluZGV4T2YoJyMvJykgPiAtMSkpIHtcbiAgICAgIHZhciBmaXhlZCA9IGZpbmQob2JqLiRyZWYsIHJlZnMpO1xuXG4gICAgICBkZWVwRXh0ZW5kKG9iaiwgZml4ZWQpO1xuXG4gICAgICBkZWxldGUgb2JqLiRyZWY7XG4gICAgICBkZWxldGUgb2JqLmlkO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgaWYgKHR5cGVvZiBvYmpbcHJvcF0gPT09ICdvYmplY3QnICYmICFpc0tleShwcm9wKSkge1xuICAgICAgdGFyZ2V0W3Byb3BdID0gY29weShvYmpbcHJvcF0sIHJlZnMsIHBhcmVudCwgcmVzb2x2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgcmVmcywgcmVzb2x2ZSkge1xuICB2YXIgZml4ZWRJZCA9ICQucmVzb2x2ZVVSTChvYmouJHNjaGVtYSwgb2JqLmlkKSxcbiAgICAgIHBhcmVudCA9ICQuZ2V0RG9jdW1lbnRVUkkoZml4ZWRJZCk7XG5cbiAgcmV0dXJuIGNvcHkob2JqLCByZWZzLCBwYXJlbnQsIHJlc29sdmUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vcGp0MzMvZWZiMmYxMTM0YmFiOTg2MTEzZmRcblxuZnVuY3Rpb24gVVJMVXRpbHModXJsLCBiYXNlVVJMKSB7XG4gIC8vIHJlbW92ZSBsZWFkaW5nIC4vXG4gIHVybCA9IHVybC5yZXBsYWNlKC9eXFwuXFwvLywgJycpO1xuXG4gIHZhciBtID0gU3RyaW5nKHVybCkucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpLm1hdGNoKC9eKFteOlxcLz8jXSs6KT8oPzpcXC9cXC8oPzooW146QF0qKSg/OjooW146QF0qKSk/QCk/KChbXjpcXC8/I10qKSg/OjooXFxkKikpPykpPyhbXj8jXSopKFxcP1teI10qKT8oI1tcXHNcXFNdKik/Lyk7XG4gIGlmICghbSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCk7XG4gIH1cbiAgdmFyIGhyZWYgPSBtWzBdIHx8ICcnO1xuICB2YXIgcHJvdG9jb2wgPSBtWzFdIHx8ICcnO1xuICB2YXIgdXNlcm5hbWUgPSBtWzJdIHx8ICcnO1xuICB2YXIgcGFzc3dvcmQgPSBtWzNdIHx8ICcnO1xuICB2YXIgaG9zdCA9IG1bNF0gfHwgJyc7XG4gIHZhciBob3N0bmFtZSA9IG1bNV0gfHwgJyc7XG4gIHZhciBwb3J0ID0gbVs2XSB8fCAnJztcbiAgdmFyIHBhdGhuYW1lID0gbVs3XSB8fCAnJztcbiAgdmFyIHNlYXJjaCA9IG1bOF0gfHwgJyc7XG4gIHZhciBoYXNoID0gbVs5XSB8fCAnJztcbiAgaWYgKGJhc2VVUkwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBiYXNlID0gbmV3IFVSTFV0aWxzKGJhc2VVUkwpO1xuICAgIHZhciBmbGFnID0gcHJvdG9jb2wgPT09ICcnICYmIGhvc3QgPT09ICcnICYmIHVzZXJuYW1lID09PSAnJztcbiAgICBpZiAoZmxhZyAmJiBwYXRobmFtZSA9PT0gJycgJiYgc2VhcmNoID09PSAnJykge1xuICAgICAgc2VhcmNoID0gYmFzZS5zZWFyY2g7XG4gICAgfVxuICAgIGlmIChmbGFnICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICBwYXRobmFtZSA9IChwYXRobmFtZSAhPT0gJycgPyAoYmFzZS5wYXRobmFtZS5zbGljZSgwLCBiYXNlLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSArIHBhdGhuYW1lKSA6IGJhc2UucGF0aG5hbWUpO1xuICAgIH1cbiAgICAvLyBkb3Qgc2VnbWVudHMgcmVtb3ZhbFxuICAgIHZhciBvdXRwdXQgPSBbXTtcblxuICAgIHBhdGhuYW1lLnJlcGxhY2UoL1xcLz9bXlxcL10rL2csIGZ1bmN0aW9uKHApIHtcbiAgICAgIGlmIChwID09PSAnLy4uJykge1xuICAgICAgICBvdXRwdXQucG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaChwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHBhdGhuYW1lID0gb3V0cHV0LmpvaW4oJycpIHx8ICcvJztcblxuICAgIGlmIChmbGFnKSB7XG4gICAgICBwb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgaG9zdG5hbWUgPSBiYXNlLmhvc3RuYW1lO1xuICAgICAgaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgIHBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgIHVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICB9XG4gICAgaWYgKHByb3RvY29sID09PSAnJykge1xuICAgICAgcHJvdG9jb2wgPSBiYXNlLnByb3RvY29sO1xuICAgIH1cbiAgICBocmVmID0gcHJvdG9jb2wgKyAoaG9zdCAhPT0gJycgPyAnLy8nIDogJycpICsgKHVzZXJuYW1lICE9PSAnJyA/IHVzZXJuYW1lICsgKHBhc3N3b3JkICE9PSAnJyA/ICc6JyArIHBhc3N3b3JkIDogJycpICsgJ0AnIDogJycpICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbiAgfVxuICB0aGlzLmhyZWYgPSBocmVmO1xuICB0aGlzLm9yaWdpbiA9IHByb3RvY29sICsgKGhvc3QgIT09ICcnID8gJy8vJyArIGhvc3QgOiAnJyk7XG4gIHRoaXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gIHRoaXMuaG9zdCA9IGhvc3Q7XG4gIHRoaXMuaG9zdG5hbWUgPSBob3N0bmFtZTtcbiAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgdGhpcy5wYXRobmFtZSA9IHBhdGhuYW1lO1xuICB0aGlzLnNlYXJjaCA9IHNlYXJjaDtcbiAgdGhpcy5oYXNoID0gaGFzaDtcbn1cblxuZnVuY3Rpb24gaXNVUkwocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnICYmIC9eXFx3KzpcXC9cXC8vLnRlc3QocGF0aCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVVSSShocmVmLCBiYXNlKSB7XG4gIHJldHVybiBuZXcgVVJMVXRpbHMoaHJlZiwgYmFzZSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVVUkwoYmFzZSwgaHJlZikge1xuICBiYXNlID0gYmFzZSB8fCAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjJztcblxuICBocmVmID0gcGFyc2VVUkkoaHJlZiwgYmFzZSk7XG4gIGJhc2UgPSBwYXJzZVVSSShiYXNlKTtcblxuICBpZiAoYmFzZS5oYXNoICYmICFocmVmLmhhc2gpIHtcbiAgICByZXR1cm4gaHJlZi5ocmVmICsgYmFzZS5oYXNoO1xuICB9XG5cbiAgcmV0dXJuIGhyZWYuaHJlZjtcbn1cblxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRVUkkodXJpKSB7XG4gIHJldHVybiB0eXBlb2YgdXJpID09PSAnc3RyaW5nJyAmJiB1cmkuc3BsaXQoJyMnKVswXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzVVJMOiBpc1VSTCxcbiAgcGFyc2VVUkk6IHBhcnNlVVJJLFxuICByZXNvbHZlVVJMOiByZXNvbHZlVVJMLFxuICBnZXREb2N1bWVudFVSSTogZ2V0RG9jdW1lbnRVUklcbn07XG4iLCIvL3Byb3RlY3RlZCBoZWxwZXIgY2xhc3NcbmZ1bmN0aW9uIF9TdWJSYW5nZShsb3csIGhpZ2gpIHtcbiAgICB0aGlzLmxvdyA9IGxvdztcbiAgICB0aGlzLmhpZ2ggPSBoaWdoO1xuICAgIHRoaXMubGVuZ3RoID0gMSArIGhpZ2ggLSBsb3c7XG59XG5cbl9TdWJSYW5nZS5wcm90b3R5cGUub3ZlcmxhcHMgPSBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICByZXR1cm4gISh0aGlzLmhpZ2ggPCByYW5nZS5sb3cgfHwgdGhpcy5sb3cgPiByYW5nZS5oaWdoKTtcbn07XG5cbl9TdWJSYW5nZS5wcm90b3R5cGUudG91Y2hlcyA9IGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIHJldHVybiAhKHRoaXMuaGlnaCArIDEgPCByYW5nZS5sb3cgfHwgdGhpcy5sb3cgLSAxID4gcmFuZ2UuaGlnaCk7XG59O1xuXG4vL3JldHVybnMgaW5jbHVzaXZlIGNvbWJpbmF0aW9uIG9mIF9TdWJSYW5nZXMgYXMgYSBfU3ViUmFuZ2Vcbl9TdWJSYW5nZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgcmV0dXJuIHRoaXMudG91Y2hlcyhyYW5nZSkgJiYgbmV3IF9TdWJSYW5nZShNYXRoLm1pbih0aGlzLmxvdywgcmFuZ2UubG93KSwgTWF0aC5tYXgodGhpcy5oaWdoLCByYW5nZS5oaWdoKSk7XG59O1xuXG4vL3JldHVybnMgc3VidHJhY3Rpb24gb2YgX1N1YlJhbmdlcyBhcyBhbiBhcnJheSBvZiBfU3ViUmFuZ2VzICh0aGVyZSdzIGEgY2FzZSB3aGVyZSBzdWJ0cmFjdGlvbiBkaXZpZGVzIGl0IGluIDIpXG5fU3ViUmFuZ2UucHJvdG90eXBlLnN1YnRyYWN0ID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgaWYgKCF0aGlzLm92ZXJsYXBzKHJhbmdlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChyYW5nZS5sb3cgPD0gdGhpcy5sb3cgJiYgcmFuZ2UuaGlnaCA+PSB0aGlzLmhpZ2gpIHJldHVybiBbXTtcbiAgICBpZiAocmFuZ2UubG93ID4gdGhpcy5sb3cgJiYgcmFuZ2UuaGlnaCA8IHRoaXMuaGlnaCkgcmV0dXJuIFtuZXcgX1N1YlJhbmdlKHRoaXMubG93LCByYW5nZS5sb3cgLSAxKSwgbmV3IF9TdWJSYW5nZShyYW5nZS5oaWdoICsgMSwgdGhpcy5oaWdoKV07XG4gICAgaWYgKHJhbmdlLmxvdyA8PSB0aGlzLmxvdykgcmV0dXJuIFtuZXcgX1N1YlJhbmdlKHJhbmdlLmhpZ2ggKyAxLCB0aGlzLmhpZ2gpXTtcbiAgICByZXR1cm4gW25ldyBfU3ViUmFuZ2UodGhpcy5sb3csIHJhbmdlLmxvdyAtIDEpXTtcbn07XG5cbl9TdWJSYW5nZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMubG93ID09IHRoaXMuaGlnaCkgcmV0dXJuIHRoaXMubG93LnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMubG93ICsgJy0nICsgdGhpcy5oaWdoO1xufTtcblxuX1N1YlJhbmdlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IF9TdWJSYW5nZSh0aGlzLmxvdywgdGhpcy5oaWdoKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERpc2NvbnRpbnVvdXNSYW5nZShhLCBiKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBEaXNjb250aW51b3VzUmFuZ2UpIHtcbiAgICAgICAgdGhpcy5yYW5nZXMgPSBbXTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgICAgICBpZiAoYSAhPT0gdW5kZWZpbmVkKSB0aGlzLmFkZChhLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IERpc2NvbnRpbnVvdXNSYW5nZShhLCBiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVfbGVuZ3RoKHNlbGYpIHtcbiAgICBzZWxmLmxlbmd0aCA9IHNlbGYucmFuZ2VzLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXMsIHJhbmdlKSB7cmV0dXJuIHByZXZpb3VzICsgcmFuZ2UubGVuZ3RofSwgMCk7XG59XG5cbkRpc2NvbnRpbnVvdXNSYW5nZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZnVuY3Rpb24gX2FkZChzdWJyYW5nZSkge1xuICAgICAgICB2YXIgbmV3X3JhbmdlcyA9IFtdO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc2VsZi5yYW5nZXMubGVuZ3RoICYmICFzdWJyYW5nZS50b3VjaGVzKHNlbGYucmFuZ2VzW2ldKSkge1xuICAgICAgICAgICAgbmV3X3Jhbmdlcy5wdXNoKHNlbGYucmFuZ2VzW2ldLmNsb25lKCkpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChpIDwgc2VsZi5yYW5nZXMubGVuZ3RoICYmIHN1YnJhbmdlLnRvdWNoZXMoc2VsZi5yYW5nZXNbaV0pKSB7XG4gICAgICAgICAgICBzdWJyYW5nZSA9IHN1YnJhbmdlLmFkZChzZWxmLnJhbmdlc1tpXSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgbmV3X3Jhbmdlcy5wdXNoKHN1YnJhbmdlKTtcbiAgICAgICAgd2hpbGUgKGkgPCBzZWxmLnJhbmdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5ld19yYW5nZXMucHVzaChzZWxmLnJhbmdlc1tpXS5jbG9uZSgpKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnJhbmdlcyA9IG5ld19yYW5nZXM7XG4gICAgICAgIF91cGRhdGVfbGVuZ3RoKHNlbGYpO1xuICAgIH1cblxuICAgIGlmIChhIGluc3RhbmNlb2YgRGlzY29udGludW91c1JhbmdlKSB7XG4gICAgICAgIGEucmFuZ2VzLmZvckVhY2goX2FkZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBfU3ViUmFuZ2UpIHtcbiAgICAgICAgICAgIF9hZGQoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYiA9PT0gdW5kZWZpbmVkKSBiID0gYTtcbiAgICAgICAgICAgIF9hZGQobmV3IF9TdWJSYW5nZShhLCBiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5EaXNjb250aW51b3VzUmFuZ2UucHJvdG90eXBlLnN1YnRyYWN0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZnVuY3Rpb24gX3N1YnRyYWN0KHN1YnJhbmdlKSB7XG4gICAgICAgIHZhciBuZXdfcmFuZ2VzID0gW107XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCBzZWxmLnJhbmdlcy5sZW5ndGggJiYgIXN1YnJhbmdlLm92ZXJsYXBzKHNlbGYucmFuZ2VzW2ldKSkge1xuICAgICAgICAgICAgbmV3X3Jhbmdlcy5wdXNoKHNlbGYucmFuZ2VzW2ldLmNsb25lKCkpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChpIDwgc2VsZi5yYW5nZXMubGVuZ3RoICYmIHN1YnJhbmdlLm92ZXJsYXBzKHNlbGYucmFuZ2VzW2ldKSkge1xuICAgICAgICAgICAgbmV3X3JhbmdlcyA9IG5ld19yYW5nZXMuY29uY2F0KHNlbGYucmFuZ2VzW2ldLnN1YnRyYWN0KHN1YnJhbmdlKSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGkgPCBzZWxmLnJhbmdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5ld19yYW5nZXMucHVzaChzZWxmLnJhbmdlc1tpXS5jbG9uZSgpKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnJhbmdlcyA9IG5ld19yYW5nZXM7XG4gICAgICAgIF91cGRhdGVfbGVuZ3RoKHNlbGYpO1xuICAgIH1cbiAgICBpZiAoYSBpbnN0YW5jZW9mIERpc2NvbnRpbnVvdXNSYW5nZSkge1xuICAgICAgICBhLnJhbmdlcy5mb3JFYWNoKF9zdWJ0cmFjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBfU3ViUmFuZ2UpIHtcbiAgICAgICAgICAgIF9zdWJ0cmFjdChhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChiID09PSB1bmRlZmluZWQpIGIgPSBhO1xuICAgICAgICAgICAgX3N1YnRyYWN0KG5ldyBfU3ViUmFuZ2UoYSwgYikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG5EaXNjb250aW51b3VzUmFuZ2UucHJvdG90eXBlLmluZGV4ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgdGhpcy5yYW5nZXMubGVuZ3RoICYmIHRoaXMucmFuZ2VzW2ldLmxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICBpbmRleCAtPSB0aGlzLnJhbmdlc1tpXS5sZW5ndGg7XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgaWYgKGkgPj0gdGhpcy5yYW5nZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yYW5nZXNbaV0ubG93ICsgaW5kZXg7XG59O1xuXG5cbkRpc2NvbnRpbnVvdXNSYW5nZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICdbICcgKyB0aGlzLnJhbmdlcy5qb2luKCcsICcpICsgJyBdJ1xufTtcblxuRGlzY29udGludW91c1JhbmdlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IERpc2NvbnRpbnVvdXNSYW5nZSh0aGlzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGlzY29udGludW91c1JhbmdlO1xuIiwiZnVuY3Rpb24gQWRkcmVzcyAoZmFrZXIpIHtcbiAgdmFyIGYgPSBmYWtlci5mYWtlLFxuICAgICAgSGVscGVycyA9IGZha2VyLmhlbHBlcnM7XG5cbiAgdGhpcy56aXBDb2RlID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgLy8gaWYgemlwIGZvcm1hdCBpcyBub3Qgc3BlY2lmaWVkLCB1c2UgdGhlIHppcCBmb3JtYXQgZGVmaW5lZCBmb3IgdGhlIGxvY2FsZVxuICAgIGlmICh0eXBlb2YgZm9ybWF0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIGxvY2FsZUZvcm1hdCA9IGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3MucG9zdGNvZGU7XG4gICAgICBpZiAodHlwZW9mIGxvY2FsZUZvcm1hdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9ybWF0ID0gbG9jYWxlRm9ybWF0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0ID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChsb2NhbGVGb3JtYXQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSGVscGVycy5yZXBsYWNlU3ltYm9scyhmb3JtYXQpO1xuICB9XG5cbiAgdGhpcy5jaXR5ID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIHZhciBmb3JtYXRzID0gW1xuICAgICAgJ3t7YWRkcmVzcy5jaXR5UHJlZml4fX0ge3tuYW1lLmZpcnN0TmFtZX19IHt7YWRkcmVzcy5jaXR5U3VmZml4fX0nLFxuICAgICAgJ3t7YWRkcmVzcy5jaXR5UHJlZml4fX0ge3tuYW1lLmZpcnN0TmFtZX19JyxcbiAgICAgICd7e25hbWUuZmlyc3ROYW1lfX0ge3thZGRyZXNzLmNpdHlTdWZmaXh9fScsXG4gICAgICAne3tuYW1lLmxhc3ROYW1lfX0ge3thZGRyZXNzLmNpdHlTdWZmaXh9fSdcbiAgICBdO1xuXG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGZvcm1hdCA9IGZha2VyLnJhbmRvbS5udW1iZXIoZm9ybWF0cy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZihmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gIH1cblxuICB0aGlzLmNpdHlQcmVmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5jaXR5X3ByZWZpeCk7XG4gIH1cblxuICB0aGlzLmNpdHlTdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5jaXR5X3N1ZmZpeCk7XG4gIH1cblxuICB0aGlzLnN0cmVldE5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgdmFyIHN1ZmZpeCA9IGZha2VyLmFkZHJlc3Muc3RyZWV0U3VmZml4KCk7XG4gICAgICBpZiAoc3VmZml4ICE9PSBcIlwiKSB7XG4gICAgICAgICAgc3VmZml4ID0gXCIgXCIgKyBzdWZmaXhcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChmYWtlci5yYW5kb20ubnVtYmVyKDEpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgICAgcmVzdWx0ID0gZmFrZXIubmFtZS5sYXN0TmFtZSgpICsgc3VmZml4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlc3VsdCA9IGZha2VyLm5hbWUuZmlyc3ROYW1lKCkgKyBzdWZmaXg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy9cbiAgLy8gVE9ETzogY2hhbmdlIGFsbCB0aGVzZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgYm9vbGVhbiB0byBpbnN0ZWFkIGFjY2VwdCBhbiBvcHRpb25zIGhhc2guXG4gIC8vXG4gIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGZ1bmN0aW9uICh1c2VGdWxsQWRkcmVzcykge1xuICAgICAgaWYgKHVzZUZ1bGxBZGRyZXNzID09PSB1bmRlZmluZWQpIHsgdXNlRnVsbEFkZHJlc3MgPSBmYWxzZTsgfVxuICAgICAgdmFyIGFkZHJlc3MgPSBcIlwiO1xuICAgICAgc3dpdGNoIChmYWtlci5yYW5kb20ubnVtYmVyKDIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgICAgYWRkcmVzcyA9IEhlbHBlcnMucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIoXCIjIyMjI1wiKSArIFwiIFwiICsgZmFrZXIuYWRkcmVzcy5zdHJlZXROYW1lKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgICAgYWRkcmVzcyA9IEhlbHBlcnMucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIoXCIjIyMjXCIpICsgIFwiIFwiICsgZmFrZXIuYWRkcmVzcy5zdHJlZXROYW1lKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgICAgYWRkcmVzcyA9IEhlbHBlcnMucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIoXCIjIyNcIikgKyBcIiBcIiArIGZha2VyLmFkZHJlc3Muc3RyZWV0TmFtZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVzZUZ1bGxBZGRyZXNzID8gKGFkZHJlc3MgKyBcIiBcIiArIGZha2VyLmFkZHJlc3Muc2Vjb25kYXJ5QWRkcmVzcygpKSA6IGFkZHJlc3M7XG4gIH1cblxuICB0aGlzLnN0cmVldFN1ZmZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3Muc3RyZWV0X3N1ZmZpeCk7XG4gIH1cbiAgXG4gIHRoaXMuc3RyZWV0UHJlZml4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5zdHJlZXRfcHJlZml4KTtcbiAgfVxuXG4gIHRoaXMuc2Vjb25kYXJ5QWRkcmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgICAnQXB0LiAjIyMnLFxuICAgICAgICAgICAgICAnU3VpdGUgIyMjJ1xuICAgICAgICAgIF1cbiAgICAgICkpO1xuICB9XG5cbiAgdGhpcy5jb3VudHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5jb3VudHkpO1xuICB9XG5cbiAgdGhpcy5jb3VudHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3MuY291bnRyeSk7XG4gIH1cblxuICB0aGlzLmNvdW50cnlDb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3MuY291bnRyeV9jb2RlKTtcbiAgfVxuXG4gIHRoaXMuc3RhdGUgPSBmdW5jdGlvbiAodXNlQWJicikge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuYWRkcmVzcy5zdGF0ZSk7XG4gIH1cblxuICB0aGlzLnN0YXRlQWJiciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmFkZHJlc3Muc3RhdGVfYWJicik7XG4gIH1cblxuICB0aGlzLmxhdGl0dWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChmYWtlci5yYW5kb20ubnVtYmVyKDE4MCAqIDEwMDAwKSAvIDEwMDAwLjAgLSA5MC4wKS50b0ZpeGVkKDQpO1xuICB9XG5cbiAgdGhpcy5sb25naXR1ZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKGZha2VyLnJhbmRvbS5udW1iZXIoMzYwICogMTAwMDApIC8gMTAwMDAuMCAtIDE4MC4wKS50b0ZpeGVkKDQpO1xuICB9XG4gIFxuICByZXR1cm4gdGhpcztcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IEFkZHJlc3M7XG4iLCJ2YXIgQ29tbWVyY2UgPSBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuY29sb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbW1lcmNlLmNvbG9yKTtcbiAgfTtcblxuICBzZWxmLmRlcGFydG1lbnQgPSBmdW5jdGlvbihtYXgsIGZpeGVkQW1vdW50KSB7XG4gICAgXG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5kZXBhcnRtZW50KTtcbiAgICAgIC8qXG4gICAgICBtYXggPSBtYXggfHwgMztcblxuICAgICAgdmFyIG51bSA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiBtYXgpICsgMSk7XG4gICAgICBpZiAoZml4ZWRBbW91bnQpIHtcbiAgICAgICAgICBudW0gPSBtYXg7XG4gICAgICB9XG5cbiAgICAgIHZhciBjYXRlZ29yaWVzID0gZmFrZXIuY29tbWVyY2UuY2F0ZWdvcmllcyhudW0pO1xuXG4gICAgICBpZihudW0gPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIGZha2VyLmNvbW1lcmNlLm1lcmdlQ2F0ZWdvcmllcyhjYXRlZ29yaWVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNhdGVnb3JpZXNbMF07XG4gICAgICAqL1xuICB9O1xuXG4gIHNlbGYucHJvZHVjdE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWtlci5jb21tZXJjZS5wcm9kdWN0QWRqZWN0aXZlKCkgKyBcIiBcIiArXG4gICAgICAgICAgICAgIGZha2VyLmNvbW1lcmNlLnByb2R1Y3RNYXRlcmlhbCgpICsgXCIgXCIgK1xuICAgICAgICAgICAgICBmYWtlci5jb21tZXJjZS5wcm9kdWN0KCk7XG4gIH07XG5cbiAgc2VsZi5wcmljZSA9IGZ1bmN0aW9uKG1pbiwgbWF4LCBkZWMsIHN5bWJvbCkge1xuICAgICAgbWluID0gbWluIHx8IDA7XG4gICAgICBtYXggPSBtYXggfHwgMTAwMDtcbiAgICAgIGRlYyA9IGRlYyB8fCAyO1xuICAgICAgc3ltYm9sID0gc3ltYm9sIHx8ICcnO1xuXG4gICAgICBpZihtaW4gPCAwIHx8IG1heCA8IDApIHtcbiAgICAgICAgICByZXR1cm4gc3ltYm9sICsgMC4wMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN5bWJvbCArIChNYXRoLnJvdW5kKChNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW4pICogTWF0aC5wb3coMTAsIGRlYykpIC8gTWF0aC5wb3coMTAsIGRlYykpLnRvRml4ZWQoZGVjKTtcbiAgfTtcblxuICAvKlxuICBzZWxmLmNhdGVnb3JpZXMgPSBmdW5jdGlvbihudW0pIHtcbiAgICAgIHZhciBjYXRlZ29yaWVzID0gW107XG5cbiAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgY2F0ZWdvcnkgPSBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbW1lcmNlLmRlcGFydG1lbnQpO1xuICAgICAgICAgIGlmKGNhdGVnb3JpZXMuaW5kZXhPZihjYXRlZ29yeSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChjYXRlZ29yeSk7XG4gICAgICAgICAgfVxuICAgICAgfSB3aGlsZShjYXRlZ29yaWVzLmxlbmd0aCA8IG51bSk7XG5cbiAgICAgIHJldHVybiBjYXRlZ29yaWVzO1xuICB9O1xuXG4gICovXG4gIC8qXG4gIHNlbGYubWVyZ2VDYXRlZ29yaWVzID0gZnVuY3Rpb24oY2F0ZWdvcmllcykge1xuICAgICAgdmFyIHNlcGFyYXRvciA9IGZha2VyLmRlZmluaXRpb25zLnNlcGFyYXRvciB8fCBcIiAmXCI7XG4gICAgICAvLyBUT0RPOiBmaW5kIHVuZGVmaW5lZCBoZXJlXG4gICAgICBjYXRlZ29yaWVzID0gY2F0ZWdvcmllcyB8fCBmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5jYXRlZ29yaWVzO1xuICAgICAgdmFyIGNvbW1hU2VwYXJhdGVkID0gY2F0ZWdvcmllcy5zbGljZSgwLCAtMSkuam9pbignLCAnKTtcblxuICAgICAgcmV0dXJuIFtjb21tYVNlcGFyYXRlZCwgY2F0ZWdvcmllc1tjYXRlZ29yaWVzLmxlbmd0aCAtIDFdXS5qb2luKHNlcGFyYXRvciArIFwiIFwiKTtcbiAgfTtcbiAgKi9cblxuICBzZWxmLnByb2R1Y3RBZGplY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbW1lcmNlLnByb2R1Y3RfbmFtZS5hZGplY3RpdmUpO1xuICB9O1xuXG4gIHNlbGYucHJvZHVjdE1hdGVyaWFsID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21tZXJjZS5wcm9kdWN0X25hbWUubWF0ZXJpYWwpO1xuICB9O1xuXG4gIHNlbGYucHJvZHVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tbWVyY2UucHJvZHVjdF9uYW1lLnByb2R1Y3QpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59O1xuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IENvbW1lcmNlOyIsInZhciBDb21wYW55ID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIFxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBmID0gZmFrZXIuZmFrZTtcbiAgXG4gIHRoaXMuc3VmZml4ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG9uJ3Qgd2FudCB0aGUgc291cmNlIGFycmF5IGV4cG9zZWQgdG8gbW9kaWZpY2F0aW9uLCBzbyByZXR1cm4gYSBjb3B5XG4gICAgcmV0dXJuIGZha2VyLmRlZmluaXRpb25zLmNvbXBhbnkuc3VmZml4LnNsaWNlKDApO1xuICB9XG5cbiAgdGhpcy5jb21wYW55TmFtZSA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcblxuICAgIHZhciBmb3JtYXRzID0gW1xuICAgICAgJ3t7bmFtZS5sYXN0TmFtZX19IHt7Y29tcGFueS5jb21wYW55U3VmZml4fX0nLFxuICAgICAgJ3t7bmFtZS5sYXN0TmFtZX19IC0ge3tuYW1lLmxhc3ROYW1lfX0nLFxuICAgICAgJ3t7bmFtZS5sYXN0TmFtZX19LCB7e25hbWUubGFzdE5hbWV9fSBhbmQge3tuYW1lLmxhc3ROYW1lfX0nXG4gICAgXTtcblxuICAgIGlmICh0eXBlb2YgZm9ybWF0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICBmb3JtYXQgPSBmYWtlci5yYW5kb20ubnVtYmVyKGZvcm1hdHMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGYoZm9ybWF0c1tmb3JtYXRdKTtcbiAgfVxuXG4gIHRoaXMuY29tcGFueVN1ZmZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmNvbXBhbnkuc3VmZml4ZXMoKSk7XG4gIH1cblxuICB0aGlzLmNhdGNoUGhyYXNlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmKCd7e2NvbXBhbnkuY2F0Y2hQaHJhc2VBZGplY3RpdmV9fSB7e2NvbXBhbnkuY2F0Y2hQaHJhc2VEZXNjcmlwdG9yfX0ge3tjb21wYW55LmNhdGNoUGhyYXNlTm91bn19JylcbiAgfVxuXG4gIHRoaXMuYnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGYoJ3t7Y29tcGFueS5ic0FkamVjdGl2ZX19IHt7Y29tcGFueS5ic0J1enp9fSB7e2NvbXBhbnkuYnNOb3VufX0nKTtcbiAgfVxuXG4gIHRoaXMuY2F0Y2hQaHJhc2VBZGplY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21wYW55LmFkamVjdGl2ZSk7XG4gIH1cblxuICB0aGlzLmNhdGNoUGhyYXNlRGVzY3JpcHRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbXBhbnkuZGVzY3JpcHRvcik7XG4gIH1cblxuICB0aGlzLmNhdGNoUGhyYXNlTm91biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmNvbXBhbnkubm91bik7XG4gIH1cblxuICB0aGlzLmJzQWRqZWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuY29tcGFueS5ic19hZGplY3RpdmUpO1xuICB9XG5cbiAgdGhpcy5ic0J1enogPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21wYW55LmJzX3ZlcmIpO1xuICB9XG5cbiAgdGhpcy5ic05vdW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5jb21wYW55LmJzX25vdW4pO1xuICB9XG4gIFxufVxuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IENvbXBhbnk7IiwidmFyIF9EYXRlID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5wYXN0ID0gZnVuY3Rpb24gKHllYXJzLCByZWZEYXRlKSB7XG4gICAgICB2YXIgZGF0ZSA9IChyZWZEYXRlKSA/IG5ldyBEYXRlKERhdGUucGFyc2UocmVmRGF0ZSkpIDogbmV3IERhdGUoKTtcbiAgICAgIHZhciByYW5nZSA9IHtcbiAgICAgICAgbWluOiAxMDAwLFxuICAgICAgICBtYXg6ICh5ZWFycyB8fCAxKSAqIDM2NSAqIDI0ICogMzYwMCAqIDEwMDBcbiAgICAgIH07XG5cbiAgICAgIHZhciBwYXN0ID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICBwYXN0IC09IGZha2VyLnJhbmRvbS5udW1iZXIocmFuZ2UpOyAvLyBzb21lIHRpbWUgZnJvbSBub3cgdG8gTiB5ZWFycyBhZ28sIGluIG1pbGxpc2Vjb25kc1xuICAgICAgZGF0ZS5zZXRUaW1lKHBhc3QpO1xuXG4gICAgICByZXR1cm4gZGF0ZTtcbiAgfTtcblxuICBzZWxmLmZ1dHVyZSA9IGZ1bmN0aW9uICh5ZWFycywgcmVmRGF0ZSkge1xuICAgICAgdmFyIGRhdGUgPSAocmVmRGF0ZSkgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKHJlZkRhdGUpKSA6IG5ldyBEYXRlKCk7XG4gICAgICB2YXIgcmFuZ2UgPSB7XG4gICAgICAgIG1pbjogMTAwMCxcbiAgICAgICAgbWF4OiAoeWVhcnMgfHwgMSkgKiAzNjUgKiAyNCAqIDM2MDAgKiAxMDAwXG4gICAgICB9O1xuXG4gICAgICB2YXIgZnV0dXJlID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICBmdXR1cmUgKz0gZmFrZXIucmFuZG9tLm51bWJlcihyYW5nZSk7IC8vIHNvbWUgdGltZSBmcm9tIG5vdyB0byBOIHllYXJzIGxhdGVyLCBpbiBtaWxsaXNlY29uZHNcbiAgICAgIGRhdGUuc2V0VGltZShmdXR1cmUpO1xuXG4gICAgICByZXR1cm4gZGF0ZTtcbiAgfTtcblxuICBzZWxmLmJldHdlZW4gPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgICAgIHZhciBmcm9tTWlsbGkgPSBEYXRlLnBhcnNlKGZyb20pO1xuICAgICAgdmFyIGRhdGVPZmZzZXQgPSBmYWtlci5yYW5kb20ubnVtYmVyKERhdGUucGFyc2UodG8pIC0gZnJvbU1pbGxpKTtcblxuICAgICAgdmFyIG5ld0RhdGUgPSBuZXcgRGF0ZShmcm9tTWlsbGkgKyBkYXRlT2Zmc2V0KTtcblxuICAgICAgcmV0dXJuIG5ld0RhdGU7XG4gIH07XG5cbiAgc2VsZi5yZWNlbnQgPSBmdW5jdGlvbiAoZGF5cykge1xuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgdmFyIHJhbmdlID0ge1xuICAgICAgICBtaW46IDEwMDAsXG4gICAgICAgIG1heDogKGRheXMgfHwgMSkgKiAyNCAqIDM2MDAgKiAxMDAwXG4gICAgICB9O1xuXG4gICAgICB2YXIgZnV0dXJlID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICBmdXR1cmUgLT0gZmFrZXIucmFuZG9tLm51bWJlcihyYW5nZSk7IC8vIHNvbWUgdGltZSBmcm9tIG5vdyB0byBOIGRheXMgYWdvLCBpbiBtaWxsaXNlY29uZHNcbiAgICAgIGRhdGUuc2V0VGltZShmdXR1cmUpO1xuXG4gICAgICByZXR1cm4gZGF0ZTtcbiAgfTtcblxuICBzZWxmLm1vbnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICB2YXIgdHlwZSA9ICd3aWRlJztcbiAgICAgIGlmIChvcHRpb25zLmFiYnIpIHtcbiAgICAgICAgICB0eXBlID0gJ2FiYnInO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuY29udGV4dCAmJiB0eXBlb2YgZmFrZXIuZGVmaW5pdGlvbnMuZGF0ZS5tb250aFt0eXBlICsgJ19jb250ZXh0J10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdHlwZSArPSAnX2NvbnRleHQnO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlID0gZmFrZXIuZGVmaW5pdGlvbnMuZGF0ZS5tb250aFt0eXBlXTtcblxuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoc291cmNlKTtcbiAgfTtcblxuICBzZWxmLndlZWtkYXkgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgIHZhciB0eXBlID0gJ3dpZGUnO1xuICAgICAgaWYgKG9wdGlvbnMuYWJicikge1xuICAgICAgICAgIHR5cGUgPSAnYWJicic7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5jb250ZXh0ICYmIHR5cGVvZiBmYWtlci5kZWZpbml0aW9ucy5kYXRlLndlZWtkYXlbdHlwZSArICdfY29udGV4dCddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHR5cGUgKz0gJ19jb250ZXh0JztcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZSA9IGZha2VyLmRlZmluaXRpb25zLmRhdGUud2Vla2RheVt0eXBlXTtcblxuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoc291cmNlKTtcbiAgfTtcbiAgXG4gIHJldHVybiBzZWxmO1xuICBcbn07XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gX0RhdGU7IiwiLypcbiAgZmFrZS5qcyAtIGdlbmVyYXRvciBtZXRob2QgZm9yIGNvbWJpbmluZyBmYWtlciBtZXRob2RzIGJhc2VkIG9uIHN0cmluZyBpbnB1dFxuXG4qL1xuXG5mdW5jdGlvbiBGYWtlIChmYWtlcikge1xuICBcbiAgdGhpcy5mYWtlID0gZnVuY3Rpb24gZmFrZSAoc3RyKSB7XG4gICAgLy8gc2V0dXAgZGVmYXVsdCByZXNwb25zZSBhcyBlbXB0eSBzdHJpbmdcbiAgICB2YXIgcmVzID0gJyc7XG5cbiAgICAvLyBpZiBpbmNvbWluZyBzdHIgcGFyYW1ldGVyIGlzIG5vdCBwcm92aWRlZCwgcmV0dXJuIGVycm9yIG1lc3NhZ2VcbiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycgfHwgc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzID0gJ3N0cmluZyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQhJztcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gZmluZCBmaXJzdCBtYXRjaGluZyB7eyBhbmQgfX1cbiAgICB2YXIgc3RhcnQgPSBzdHIuc2VhcmNoKCd7eycpO1xuICAgIHZhciBlbmQgPSBzdHIuc2VhcmNoKCd9fScpO1xuXG4gICAgLy8gaWYgbm8ge3sgYW5kIH19IGlzIGZvdW5kLCB3ZSBhcmUgZG9uZVxuICAgIGlmIChzdGFydCA9PT0gLTEgJiYgZW5kID09PSAtMSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygnYXR0ZW1wdGluZyB0byBwYXJzZScsIHN0cik7XG5cbiAgICAvLyBleHRyYWN0IG1ldGhvZCBuYW1lIGZyb20gYmV0d2VlbiB0aGUge3sgfX0gdGhhdCB3ZSBmb3VuZFxuICAgIC8vIGZvciBleGFtcGxlOiB7e25hbWUuZmlyc3ROYW1lfX1cbiAgICB2YXIgbWV0aG9kID0gc3RyLnN1YnN0cihzdGFydCArIDIsICBlbmQgLSBzdGFydCAtIDIpO1xuICAgIG1ldGhvZCA9IG1ldGhvZC5yZXBsYWNlKCd9fScsICcnKTtcbiAgICBtZXRob2QgPSBtZXRob2QucmVwbGFjZSgne3snLCAnJyk7XG5cbiAgICAvLyBjb25zb2xlLmxvZygnbWV0aG9kJywgbWV0aG9kKVxuXG4gICAgLy8gc3BsaXQgdGhlIG1ldGhvZCBpbnRvIG1vZHVsZSBhbmQgZnVuY3Rpb25cbiAgICB2YXIgcGFydHMgPSBtZXRob2Quc3BsaXQoJy4nKTtcblxuICAgIGlmICh0eXBlb2YgZmFrZXJbcGFydHNbMF1dID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbW9kdWxlOiAnICsgcGFydHNbMF0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFrZXJbcGFydHNbMF1dW3BhcnRzWzFdXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1ldGhvZDogJyArIHBhcnRzWzBdICsgXCIuXCIgKyBwYXJ0c1sxXSk7XG4gICAgfVxuXG4gICAgLy8gYXNzaWduIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBtb2R1bGUuZnVuY3Rpb24gbmFtZXNwYWNlXG4gICAgdmFyIGZuID0gZmFrZXJbcGFydHNbMF1dW3BhcnRzWzFdXTtcblxuICAgIC8vIHJlcGxhY2UgdGhlIGZvdW5kIHRhZyB3aXRoIHRoZSByZXR1cm5lZCBmYWtlIHZhbHVlXG4gICAgcmVzID0gc3RyLnJlcGxhY2UoJ3t7JyArIG1ldGhvZCArICd9fScsIGZuKCkpO1xuXG4gICAgLy8gcmV0dXJuIHRoZSByZXNwb25zZSByZWN1cnNpdmVseSB1bnRpbCB3ZSBhcmUgZG9uZSBmaW5kaW5nIGFsbCB0YWdzXG4gICAgcmV0dXJuIGZha2UocmVzKTsgICAgXG4gIH1cbiAgXG4gIHJldHVybiB0aGlzO1xuICBcbiAgXG59XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gRmFrZTsiLCJ2YXIgRmluYW5jZSA9IGZ1bmN0aW9uIChmYWtlcikge1xuICB2YXIgSGVscGVycyA9IGZha2VyLmhlbHBlcnMsXG4gICAgICBzZWxmID0gdGhpcztcblxuICBzZWxmLmFjY291bnQgPSBmdW5jdGlvbiAobGVuZ3RoKSB7XG5cbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8fCA4O1xuXG4gICAgICB2YXIgdGVtcGxhdGUgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgKyAnIyc7XG4gICAgICB9XG4gICAgICBsZW5ndGggPSBudWxsO1xuICAgICAgcmV0dXJuIEhlbHBlcnMucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIodGVtcGxhdGUpO1xuICB9XG5cbiAgc2VsZi5hY2NvdW50TmFtZSA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgcmV0dXJuIFtIZWxwZXJzLnJhbmRvbWl6ZShmYWtlci5kZWZpbml0aW9ucy5maW5hbmNlLmFjY291bnRfdHlwZSksICdBY2NvdW50J10uam9pbignICcpO1xuICB9XG5cbiAgc2VsZi5tYXNrID0gZnVuY3Rpb24gKGxlbmd0aCwgcGFyZW5zLCBlbGlwc2lzKSB7XG5cblxuICAgICAgLy9zZXQgZGVmYXVsdHNcbiAgICAgIGxlbmd0aCA9IChsZW5ndGggPT0gMCB8fCAhbGVuZ3RoIHx8IHR5cGVvZiBsZW5ndGggPT0gJ3VuZGVmaW5lZCcpID8gNCA6IGxlbmd0aDtcbiAgICAgIHBhcmVucyA9IChwYXJlbnMgPT09IG51bGwpID8gdHJ1ZSA6IHBhcmVucztcbiAgICAgIGVsaXBzaXMgPSAoZWxpcHNpcyA9PT0gbnVsbCkgPyB0cnVlIDogZWxpcHNpcztcblxuICAgICAgLy9jcmVhdGUgYSB0ZW1wbGF0ZSBmb3IgbGVuZ3RoXG4gICAgICB2YXIgdGVtcGxhdGUgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgKyAnIyc7XG4gICAgICB9XG5cbiAgICAgIC8vcHJlZml4IHdpdGggZWxpcHNpc1xuICAgICAgdGVtcGxhdGUgPSAoZWxpcHNpcykgPyBbJy4uLicsIHRlbXBsYXRlXS5qb2luKCcnKSA6IHRlbXBsYXRlO1xuXG4gICAgICB0ZW1wbGF0ZSA9IChwYXJlbnMpID8gWycoJywgdGVtcGxhdGUsICcpJ10uam9pbignJykgOiB0ZW1wbGF0ZTtcblxuICAgICAgLy9nZW5lcmF0ZSByYW5kb20gbnVtYmVyc1xuICAgICAgdGVtcGxhdGUgPSBIZWxwZXJzLnJlcGxhY2VTeW1ib2xXaXRoTnVtYmVyKHRlbXBsYXRlKTtcblxuICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuXG4gIH1cblxuICAvL21pbiBhbmQgbWF4IHRha2UgaW4gbWluaW11bSBhbmQgbWF4aW11bSBhbW91bnRzLCBkZWMgaXMgdGhlIGRlY2ltYWwgcGxhY2UgeW91IHdhbnQgcm91bmRlZCB0bywgc3ltYm9sIGlzICQsIOKCrCwgwqMsIGV0Y1xuICAvL05PVEU6IHRoaXMgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUsIGlmIHlvdSB3YW50IGEgbnVtYmVyIHVzZSBwYXJzZUZsb2F0IGFuZCBubyBzeW1ib2xcblxuICBzZWxmLmFtb3VudCA9IGZ1bmN0aW9uIChtaW4sIG1heCwgZGVjLCBzeW1ib2wpIHtcblxuICAgICAgbWluID0gbWluIHx8IDA7XG4gICAgICBtYXggPSBtYXggfHwgMTAwMDtcbiAgICAgIGRlYyA9IGRlYyB8fCAyO1xuICAgICAgc3ltYm9sID0gc3ltYm9sIHx8ICcnO1xuXG4gICAgICByZXR1cm4gc3ltYm9sICsgKE1hdGgucm91bmQoKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbikgKiBNYXRoLnBvdygxMCwgZGVjKSkgLyBNYXRoLnBvdygxMCwgZGVjKSkudG9GaXhlZChkZWMpO1xuXG4gIH1cblxuICBzZWxmLnRyYW5zYWN0aW9uVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBIZWxwZXJzLnJhbmRvbWl6ZShmYWtlci5kZWZpbml0aW9ucy5maW5hbmNlLnRyYW5zYWN0aW9uX3R5cGUpO1xuICB9XG5cbiAgc2VsZi5jdXJyZW5jeUNvZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLm9iamVjdEVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuZmluYW5jZS5jdXJyZW5jeSlbJ2NvZGUnXTtcbiAgfVxuXG4gIHNlbGYuY3VycmVuY3lOYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5vYmplY3RFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmZpbmFuY2UuY3VycmVuY3ksICdrZXknKTtcbiAgfVxuXG4gIHNlbGYuY3VycmVuY3lTeW1ib2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3ltYm9sO1xuXG4gICAgICB3aGlsZSAoIXN5bWJvbCkge1xuICAgICAgICAgIHN5bWJvbCA9IGZha2VyLnJhbmRvbS5vYmplY3RFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmZpbmFuY2UuY3VycmVuY3kpWydzeW1ib2wnXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn1cblxubW9kdWxlWydleHBvcnRzJ10gPSBGaW5hbmNlOyIsInZhciBIYWNrZXIgPSBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBcbiAgc2VsZi5hYmJyZXZpYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaGFja2VyLmFiYnJldmlhdGlvbik7XG4gIH07XG5cbiAgc2VsZi5hZGplY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaGFja2VyLmFkamVjdGl2ZSk7XG4gIH07XG5cbiAgc2VsZi5ub3VuID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLmhhY2tlci5ub3VuKTtcbiAgfTtcblxuICBzZWxmLnZlcmIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaGFja2VyLnZlcmIpO1xuICB9O1xuXG4gIHNlbGYuaW5ndmVyYiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5oYWNrZXIuaW5ndmVyYik7XG4gIH07XG5cbiAgc2VsZi5waHJhc2UgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIGFiYnJldmlhdGlvbjogc2VsZi5hYmJyZXZpYXRpb24oKSxcbiAgICAgIGFkamVjdGl2ZTogc2VsZi5hZGplY3RpdmUoKSxcbiAgICAgIGluZ3ZlcmI6IHNlbGYuaW5ndmVyYigpLFxuICAgICAgbm91bjogc2VsZi5ub3VuKCksXG4gICAgICB2ZXJiOiBzZWxmLnZlcmIoKVxuICAgIH07XG5cbiAgICB2YXIgcGhyYXNlID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChbIFwiSWYgd2Uge3t2ZXJifX0gdGhlIHt7bm91bn19LCB3ZSBjYW4gZ2V0IHRvIHRoZSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19IHRocm91Z2ggdGhlIHt7YWRqZWN0aXZlfX0ge3thYmJyZXZpYXRpb259fSB7e25vdW59fSFcIixcbiAgICAgIFwiV2UgbmVlZCB0byB7e3ZlcmJ9fSB0aGUge3thZGplY3RpdmV9fSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19IVwiLFxuICAgICAgXCJUcnkgdG8ge3t2ZXJifX0gdGhlIHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0sIG1heWJlIGl0IHdpbGwge3t2ZXJifX0gdGhlIHt7YWRqZWN0aXZlfX0ge3tub3VufX0hXCIsXG4gICAgICBcIllvdSBjYW4ndCB7e3ZlcmJ9fSB0aGUge3tub3VufX0gd2l0aG91dCB7e2luZ3ZlcmJ9fSB0aGUge3thZGplY3RpdmV9fSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19IVwiLFxuICAgICAgXCJVc2UgdGhlIHt7YWRqZWN0aXZlfX0ge3thYmJyZXZpYXRpb259fSB7e25vdW59fSwgdGhlbiB5b3UgY2FuIHt7dmVyYn19IHRoZSB7e2FkamVjdGl2ZX19IHt7bm91bn19IVwiLFxuICAgICAgXCJUaGUge3thYmJyZXZpYXRpb259fSB7e25vdW59fSBpcyBkb3duLCB7e3ZlcmJ9fSB0aGUge3thZGplY3RpdmV9fSB7e25vdW59fSBzbyB3ZSBjYW4ge3t2ZXJifX0gdGhlIHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0hXCIsXG4gICAgICBcInt7aW5ndmVyYn19IHRoZSB7e25vdW59fSB3b24ndCBkbyBhbnl0aGluZywgd2UgbmVlZCB0byB7e3ZlcmJ9fSB0aGUge3thZGplY3RpdmV9fSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19IVwiLFxuICAgICAgXCJJJ2xsIHt7dmVyYn19IHRoZSB7e2FkamVjdGl2ZX19IHt7YWJicmV2aWF0aW9ufX0ge3tub3VufX0sIHRoYXQgc2hvdWxkIHt7bm91bn19IHRoZSB7e2FiYnJldmlhdGlvbn19IHt7bm91bn19IVwiXG4gICBdKTtcblxuICAgcmV0dXJuIGZha2VyLmhlbHBlcnMubXVzdGFjaGUocGhyYXNlLCBkYXRhKTtcblxuICB9O1xuICBcbiAgcmV0dXJuIHNlbGY7XG59O1xuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IEhhY2tlcjsiLCJ2YXIgSGVscGVycyA9IGZ1bmN0aW9uIChmYWtlcikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBiYWNrd29yZC1jb21wYXRpYmlsaXR5XG4gIHNlbGYucmFuZG9taXplID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgICBhcnJheSA9IGFycmF5IHx8IFtcImFcIiwgXCJiXCIsIFwiY1wiXTtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGFycmF5KTtcbiAgfTtcblxuICAvLyBzbHVnaWZpZXMgc3RyaW5nXG4gIHNlbGYuc2x1Z2lmeSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyB8fCBcIlwiO1xuICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8gL2csICctJykucmVwbGFjZSgvW15cXHdcXC5cXC1dKy9nLCAnJyk7XG4gIH07XG5cbiAgLy8gcGFyc2VzIHN0cmluZyBmb3IgYSBzeW1ib2wgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIHJhbmRvbSBudW1iZXIgZnJvbSAxLTEwXG4gIHNlbGYucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIgPSBmdW5jdGlvbiAoc3RyaW5nLCBzeW1ib2wpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyB8fCBcIlwiO1xuICAgICAgLy8gZGVmYXVsdCBzeW1ib2wgaXMgJyMnXG4gICAgICBpZiAoc3ltYm9sID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzeW1ib2wgPSAnIyc7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHIgPSAnJztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHN0cmluZy5jaGFyQXQoaSkgPT0gc3ltYm9sKSB7XG4gICAgICAgICAgICAgIHN0ciArPSBmYWtlci5yYW5kb20ubnVtYmVyKDkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0ciArPSBzdHJpbmcuY2hhckF0KGkpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgLy8gcGFyc2VzIHN0cmluZyBmb3Igc3ltYm9scyAobnVtYmVycyBvciBsZXR0ZXJzKSBhbmQgcmVwbGFjZXMgdGhlbSBhcHByb3ByaWF0ZWx5XG4gIHNlbGYucmVwbGFjZVN5bWJvbHMgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgfHwgXCJcIjtcbiAgXHR2YXIgYWxwaGEgPSBbJ0EnLCdCJywnQycsJ0QnLCdFJywnRicsJ0cnLCdIJywnSScsJ0onLCdLJywnTCcsJ00nLCdOJywnTycsJ1AnLCdRJywnUicsJ1MnLCdUJywnVScsJ1YnLCdXJywnWCcsJ1knLCdaJ11cbiAgICAgIHZhciBzdHIgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoc3RyaW5nLmNoYXJBdChpKSA9PSBcIiNcIikge1xuICAgICAgICAgICAgICBzdHIgKz0gZmFrZXIucmFuZG9tLm51bWJlcig5KTtcbiAgXHRcdH0gZWxzZSBpZiAoc3RyaW5nLmNoYXJBdChpKSA9PSBcIj9cIikge1xuICBcdFx0XHRzdHIgKz0gYWxwaGFbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWxwaGEubGVuZ3RoKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyICs9IHN0cmluZy5jaGFyQXQoaSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICAvLyB0YWtlcyBhbiBhcnJheSBhbmQgcmV0dXJucyBpdCByYW5kb21pemVkXG4gIHNlbGYuc2h1ZmZsZSA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICBvID0gbyB8fCBbXCJhXCIsIFwiYlwiLCBcImNcIl07XG4gICAgICBmb3IgKHZhciBqLCB4LCBpID0gby5sZW5ndGgtMTsgaTsgaiA9IGZha2VyLnJhbmRvbS5udW1iZXIoaSksIHggPSBvWy0taV0sIG9baV0gPSBvW2pdLCBvW2pdID0geCk7XG4gICAgICByZXR1cm4gbztcbiAgfTtcblxuICBzZWxmLm11c3RhY2hlID0gZnVuY3Rpb24gKHN0ciwgZGF0YSkge1xuICAgIGlmICh0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBmb3IodmFyIHAgaW4gZGF0YSkge1xuICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgne3snICsgcCArICd9fScsICdnJylcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKHJlLCBkYXRhW3BdKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICBzZWxmLmNyZWF0ZUNhcmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAgIFwibmFtZVwiOiBmYWtlci5uYW1lLmZpbmROYW1lKCksXG4gICAgICAgICAgXCJ1c2VybmFtZVwiOiBmYWtlci5pbnRlcm5ldC51c2VyTmFtZSgpLFxuICAgICAgICAgIFwiZW1haWxcIjogZmFrZXIuaW50ZXJuZXQuZW1haWwoKSxcbiAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICBcInN0cmVldEFcIjogZmFrZXIuYWRkcmVzcy5zdHJlZXROYW1lKCksXG4gICAgICAgICAgICAgIFwic3RyZWV0QlwiOiBmYWtlci5hZGRyZXNzLnN0cmVldEFkZHJlc3MoKSxcbiAgICAgICAgICAgICAgXCJzdHJlZXRDXCI6IGZha2VyLmFkZHJlc3Muc3RyZWV0QWRkcmVzcyh0cnVlKSxcbiAgICAgICAgICAgICAgXCJzdHJlZXREXCI6IGZha2VyLmFkZHJlc3Muc2Vjb25kYXJ5QWRkcmVzcygpLFxuICAgICAgICAgICAgICBcImNpdHlcIjogZmFrZXIuYWRkcmVzcy5jaXR5KCksXG4gICAgICAgICAgICAgIFwic3RhdGVcIjogZmFrZXIuYWRkcmVzcy5zdGF0ZSgpLFxuICAgICAgICAgICAgICBcImNvdW50cnlcIjogZmFrZXIuYWRkcmVzcy5jb3VudHJ5KCksXG4gICAgICAgICAgICAgIFwiemlwY29kZVwiOiBmYWtlci5hZGRyZXNzLnppcENvZGUoKSxcbiAgICAgICAgICAgICAgXCJnZW9cIjoge1xuICAgICAgICAgICAgICAgICAgXCJsYXRcIjogZmFrZXIuYWRkcmVzcy5sYXRpdHVkZSgpLFxuICAgICAgICAgICAgICAgICAgXCJsbmdcIjogZmFrZXIuYWRkcmVzcy5sb25naXR1ZGUoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBob25lXCI6IGZha2VyLnBob25lLnBob25lTnVtYmVyKCksXG4gICAgICAgICAgXCJ3ZWJzaXRlXCI6IGZha2VyLmludGVybmV0LmRvbWFpbk5hbWUoKSxcbiAgICAgICAgICBcImNvbXBhbnlcIjoge1xuICAgICAgICAgICAgICBcIm5hbWVcIjogZmFrZXIuY29tcGFueS5jb21wYW55TmFtZSgpLFxuICAgICAgICAgICAgICBcImNhdGNoUGhyYXNlXCI6IGZha2VyLmNvbXBhbnkuY2F0Y2hQaHJhc2UoKSxcbiAgICAgICAgICAgICAgXCJic1wiOiBmYWtlci5jb21wYW55LmJzKClcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9zdHNcIjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBcIndvcmRzXCI6IGZha2VyLmxvcmVtLndvcmRzKCksXG4gICAgICAgICAgICAgICAgICBcInNlbnRlbmNlXCI6IGZha2VyLmxvcmVtLnNlbnRlbmNlKCksXG4gICAgICAgICAgICAgICAgICBcInNlbnRlbmNlc1wiOiBmYWtlci5sb3JlbS5zZW50ZW5jZXMoKSxcbiAgICAgICAgICAgICAgICAgIFwicGFyYWdyYXBoXCI6IGZha2VyLmxvcmVtLnBhcmFncmFwaCgpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFwid29yZHNcIjogZmFrZXIubG9yZW0ud29yZHMoKSxcbiAgICAgICAgICAgICAgICAgIFwic2VudGVuY2VcIjogZmFrZXIubG9yZW0uc2VudGVuY2UoKSxcbiAgICAgICAgICAgICAgICAgIFwic2VudGVuY2VzXCI6IGZha2VyLmxvcmVtLnNlbnRlbmNlcygpLFxuICAgICAgICAgICAgICAgICAgXCJwYXJhZ3JhcGhcIjogZmFrZXIubG9yZW0ucGFyYWdyYXBoKClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgXCJ3b3Jkc1wiOiBmYWtlci5sb3JlbS53b3JkcygpLFxuICAgICAgICAgICAgICAgICAgXCJzZW50ZW5jZVwiOiBmYWtlci5sb3JlbS5zZW50ZW5jZSgpLFxuICAgICAgICAgICAgICAgICAgXCJzZW50ZW5jZXNcIjogZmFrZXIubG9yZW0uc2VudGVuY2VzKCksXG4gICAgICAgICAgICAgICAgICBcInBhcmFncmFwaFwiOiBmYWtlci5sb3JlbS5wYXJhZ3JhcGgoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBcImFjY291bnRIaXN0b3J5XCI6IFtmYWtlci5oZWxwZXJzLmNyZWF0ZVRyYW5zYWN0aW9uKCksIGZha2VyLmhlbHBlcnMuY3JlYXRlVHJhbnNhY3Rpb24oKSwgZmFrZXIuaGVscGVycy5jcmVhdGVUcmFuc2FjdGlvbigpXVxuICAgICAgfTtcbiAgfTtcblxuICBzZWxmLmNvbnRleHR1YWxDYXJkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBuYW1lID0gZmFrZXIubmFtZS5maXJzdE5hbWUoKSxcbiAgICAgICAgdXNlck5hbWUgPSBmYWtlci5pbnRlcm5ldC51c2VyTmFtZShuYW1lKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBcIm5hbWVcIjogbmFtZSxcbiAgICAgICAgXCJ1c2VybmFtZVwiOiB1c2VyTmFtZSxcbiAgICAgICAgXCJhdmF0YXJcIjogZmFrZXIuaW50ZXJuZXQuYXZhdGFyKCksXG4gICAgICAgIFwiZW1haWxcIjogZmFrZXIuaW50ZXJuZXQuZW1haWwodXNlck5hbWUpLFxuICAgICAgICBcImRvYlwiOiBmYWtlci5kYXRlLnBhc3QoNTAsIG5ldyBEYXRlKFwiU2F0IFNlcCAyMCAxOTkyIDIxOjM1OjAyIEdNVCswMjAwIChDRVNUKVwiKSksXG4gICAgICAgIFwicGhvbmVcIjogZmFrZXIucGhvbmUucGhvbmVOdW1iZXIoKSxcbiAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgIFwic3RyZWV0XCI6IGZha2VyLmFkZHJlc3Muc3RyZWV0TmFtZSh0cnVlKSxcbiAgICAgICAgICAgIFwic3VpdGVcIjogZmFrZXIuYWRkcmVzcy5zZWNvbmRhcnlBZGRyZXNzKCksXG4gICAgICAgICAgICBcImNpdHlcIjogZmFrZXIuYWRkcmVzcy5jaXR5KCksXG4gICAgICAgICAgICBcInppcGNvZGVcIjogZmFrZXIuYWRkcmVzcy56aXBDb2RlKCksXG4gICAgICAgICAgICBcImdlb1wiOiB7XG4gICAgICAgICAgICAgICAgXCJsYXRcIjogZmFrZXIuYWRkcmVzcy5sYXRpdHVkZSgpLFxuICAgICAgICAgICAgICAgIFwibG5nXCI6IGZha2VyLmFkZHJlc3MubG9uZ2l0dWRlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWJzaXRlXCI6IGZha2VyLmludGVybmV0LmRvbWFpbk5hbWUoKSxcbiAgICAgICAgXCJjb21wYW55XCI6IHtcbiAgICAgICAgICAgIFwibmFtZVwiOiBmYWtlci5jb21wYW55LmNvbXBhbnlOYW1lKCksXG4gICAgICAgICAgICBcImNhdGNoUGhyYXNlXCI6IGZha2VyLmNvbXBhbnkuY2F0Y2hQaHJhc2UoKSxcbiAgICAgICAgICAgIFwiYnNcIjogZmFrZXIuY29tcGFueS5icygpXG4gICAgICAgIH1cbiAgICB9O1xuICB9O1xuXG5cbiAgc2VsZi51c2VyQ2FyZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICAgXCJuYW1lXCI6IGZha2VyLm5hbWUuZmluZE5hbWUoKSxcbiAgICAgICAgICBcInVzZXJuYW1lXCI6IGZha2VyLmludGVybmV0LnVzZXJOYW1lKCksXG4gICAgICAgICAgXCJlbWFpbFwiOiBmYWtlci5pbnRlcm5ldC5lbWFpbCgpLFxuICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgIFwic3RyZWV0XCI6IGZha2VyLmFkZHJlc3Muc3RyZWV0TmFtZSh0cnVlKSxcbiAgICAgICAgICAgICAgXCJzdWl0ZVwiOiBmYWtlci5hZGRyZXNzLnNlY29uZGFyeUFkZHJlc3MoKSxcbiAgICAgICAgICAgICAgXCJjaXR5XCI6IGZha2VyLmFkZHJlc3MuY2l0eSgpLFxuICAgICAgICAgICAgICBcInppcGNvZGVcIjogZmFrZXIuYWRkcmVzcy56aXBDb2RlKCksXG4gICAgICAgICAgICAgIFwiZ2VvXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibGF0XCI6IGZha2VyLmFkZHJlc3MubGF0aXR1ZGUoKSxcbiAgICAgICAgICAgICAgICAgIFwibG5nXCI6IGZha2VyLmFkZHJlc3MubG9uZ2l0dWRlKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwaG9uZVwiOiBmYWtlci5waG9uZS5waG9uZU51bWJlcigpLFxuICAgICAgICAgIFwid2Vic2l0ZVwiOiBmYWtlci5pbnRlcm5ldC5kb21haW5OYW1lKCksXG4gICAgICAgICAgXCJjb21wYW55XCI6IHtcbiAgICAgICAgICAgICAgXCJuYW1lXCI6IGZha2VyLmNvbXBhbnkuY29tcGFueU5hbWUoKSxcbiAgICAgICAgICAgICAgXCJjYXRjaFBocmFzZVwiOiBmYWtlci5jb21wYW55LmNhdGNoUGhyYXNlKCksXG4gICAgICAgICAgICAgIFwiYnNcIjogZmFrZXIuY29tcGFueS5icygpXG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgfTtcblxuICBzZWxmLmNyZWF0ZVRyYW5zYWN0aW9uID0gZnVuY3Rpb24oKXtcbiAgICByZXR1cm4ge1xuICAgICAgXCJhbW91bnRcIiA6IGZha2VyLmZpbmFuY2UuYW1vdW50KCksXG4gICAgICBcImRhdGVcIiA6IG5ldyBEYXRlKDIwMTIsIDEsIDIpLCAgLy9UT0RPOiBhZGQgYSByYW5nZWQgZGF0ZSBtZXRob2RcbiAgICAgIFwiYnVzaW5lc3NcIjogZmFrZXIuY29tcGFueS5jb21wYW55TmFtZSgpLFxuICAgICAgXCJuYW1lXCI6IFtmYWtlci5maW5hbmNlLmFjY291bnROYW1lKCksIGZha2VyLmZpbmFuY2UubWFzaygpXS5qb2luKCcgJyksXG4gICAgICBcInR5cGVcIiA6IHNlbGYucmFuZG9taXplKGZha2VyLmRlZmluaXRpb25zLmZpbmFuY2UudHJhbnNhY3Rpb25fdHlwZSksXG4gICAgICBcImFjY291bnRcIiA6IGZha2VyLmZpbmFuY2UuYWNjb3VudCgpXG4gICAgfTtcbiAgfTtcbiAgXG4gIHJldHVybiBzZWxmO1xuICBcbn07XG5cblxuLypcblN0cmluZy5wcm90b3R5cGUuY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICgpIHsgLy92MS4wXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvXFx3Ky9nLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gYS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGEuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG59O1xuKi9cblxubW9kdWxlWydleHBvcnRzJ10gPSBIZWxwZXJzOyIsInZhciBJbWFnZSA9IGZ1bmN0aW9uIChmYWtlcikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBzZWxmLmltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjYXRlZ29yaWVzID0gW1wiYWJzdHJhY3RcIiwgXCJhbmltYWxzXCIsIFwiYnVzaW5lc3NcIiwgXCJjYXRzXCIsIFwiY2l0eVwiLCBcImZvb2RcIiwgXCJuaWdodGxpZmVcIiwgXCJmYXNoaW9uXCIsIFwicGVvcGxlXCIsIFwibmF0dXJlXCIsIFwic3BvcnRzXCIsIFwidGVjaG5pY3NcIiwgXCJ0cmFuc3BvcnRcIl07XG4gICAgcmV0dXJuIHNlbGZbZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChjYXRlZ29yaWVzKV0oKTtcbiAgfTtcbiAgc2VsZi5hdmF0YXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLmludGVybmV0LmF2YXRhcigpO1xuICB9O1xuICBzZWxmLmltYWdlVXJsID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGNhdGVnb3J5KSB7XG4gICAgICB2YXIgd2lkdGggPSB3aWR0aCB8fCA2NDA7XG4gICAgICB2YXIgaGVpZ2h0ID0gaGVpZ2h0IHx8IDQ4MDtcblxuICAgICAgdmFyIHVybCA9J2h0dHA6Ly9sb3JlbXBpeGVsLmNvbS8nICsgd2lkdGggKyAnLycgKyBoZWlnaHQ7XG4gICAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB1cmwgKz0gJy8nICsgY2F0ZWdvcnk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXJsO1xuICB9O1xuICBzZWxmLmFic3RyYWN0ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ2Fic3RyYWN0Jyk7XG4gIH07XG4gIHNlbGYuYW5pbWFscyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdhbmltYWxzJyk7XG4gIH07XG4gIHNlbGYuYnVzaW5lc3MgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnYnVzaW5lc3MnKTtcbiAgfTtcbiAgc2VsZi5jYXRzID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ2NhdHMnKTtcbiAgfTtcbiAgc2VsZi5jaXR5ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ2NpdHknKTtcbiAgfTtcbiAgc2VsZi5mb29kID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ2Zvb2QnKTtcbiAgfTtcbiAgc2VsZi5uaWdodGxpZmUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnbmlnaHRsaWZlJyk7XG4gIH07XG4gIHNlbGYuZmFzaGlvbiA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICdmYXNoaW9uJyk7XG4gIH07XG4gIHNlbGYucGVvcGxlID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gZmFrZXIuaW1hZ2UuaW1hZ2VVcmwod2lkdGgsIGhlaWdodCwgJ3Blb3BsZScpO1xuICB9O1xuICBzZWxmLm5hdHVyZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIGZha2VyLmltYWdlLmltYWdlVXJsKHdpZHRoLCBoZWlnaHQsICduYXR1cmUnKTtcbiAgfTtcbiAgc2VsZi5zcG9ydHMgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAnc3BvcnRzJyk7XG4gIH07XG4gIHNlbGYudGVjaG5pY3MgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAndGVjaG5pY3MnKTtcbiAgfTtcbiAgc2VsZi50cmFuc3BvcnQgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBmYWtlci5pbWFnZS5pbWFnZVVybCh3aWR0aCwgaGVpZ2h0LCAndHJhbnNwb3J0Jyk7XG4gIH0gIFxufVxuXG5tb2R1bGVbXCJleHBvcnRzXCJdID0gSW1hZ2U7IiwiLypcblxuICAgdGhpcyBpbmRleC5qcyBmaWxlIGlzIHVzZWQgZm9yIGluY2x1ZGluZyB0aGUgZmFrZXIgbGlicmFyeSBhcyBhIENvbW1vbkpTIG1vZHVsZSwgaW5zdGVhZCBvZiBhIGJ1bmRsZVxuXG4gICB5b3UgY2FuIGluY2x1ZGUgdGhlIGZha2VyIGxpYnJhcnkgaW50byB5b3VyIGV4aXN0aW5nIG5vZGUuanMgYXBwbGljYXRpb24gYnkgcmVxdWlyaW5nIHRoZSBlbnRpcmUgL2Zha2VyIGRpcmVjdG9yeVxuXG4gICAgdmFyIGZha2VyID0gcmVxdWlyZSguL2Zha2VyKTtcbiAgICB2YXIgcmFuZG9tTmFtZSA9IGZha2VyLm5hbWUuZmluZE5hbWUoKTtcblxuICAgeW91IGNhbiBhbHNvIHNpbXBseSBpbmNsdWRlIHRoZSBcImZha2VyLmpzXCIgZmlsZSB3aGljaCBpcyB0aGUgYXV0by1nZW5lcmF0ZWQgYnVuZGxlZCB2ZXJzaW9uIG9mIHRoZSBmYWtlciBsaWJyYXJ5XG5cbiAgICB2YXIgZmFrZXIgPSByZXF1aXJlKC4vY3VzdG9tQXBwUGF0aC9mYWtlcik7XG4gICAgdmFyIHJhbmRvbU5hbWUgPSBmYWtlci5uYW1lLmZpbmROYW1lKCk7XG5cblxuICBpZiB5b3UgcGxhbiBvbiBtb2RpZnlpbmcgdGhlIGZha2VyIGxpYnJhcnkgeW91IHNob3VsZCBiZSBwZXJmb3JtaW5nIHlvdXIgY2hhbmdlcyBpbiB0aGUgL2xpYi8gZGlyZWN0b3J5XG5cbiovXG5cbmZ1bmN0aW9uIEZha2VyIChvcHRzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIC8vIGFzc2lnbiBvcHRpb25zXG4gIHZhciBsb2NhbGVzID0gc2VsZi5sb2NhbGVzIHx8IG9wdHMubG9jYWxlcyB8fCB7fTtcbiAgdmFyIGxvY2FsZSA9IHNlbGYubG9jYWxlIHx8IG9wdHMubG9jYWxlIHx8IFwiZW5cIjtcbiAgdmFyIGxvY2FsZUZhbGxiYWNrID0gc2VsZi5sb2NhbGVGYWxsYmFjayB8fCBvcHRzLmxvY2FsZUZhbGxiYWNrIHx8IFwiZW5cIjtcblxuICBzZWxmLmxvY2FsZXMgPSBsb2NhbGVzO1xuICBzZWxmLmxvY2FsZSA9IGxvY2FsZTtcbiAgc2VsZi5sb2NhbGVGYWxsYmFjayA9IGxvY2FsZUZhbGxiYWNrO1xuXG4gIHNlbGYuZGVmaW5pdGlvbnMgPSB7fTtcblxuICB2YXIgRmFrZSA9IHJlcXVpcmUoJy4vZmFrZScpO1xuICBzZWxmLmZha2UgPSBuZXcgRmFrZShzZWxmKS5mYWtlO1xuXG4gIHZhciBSYW5kb20gPSByZXF1aXJlKCcuL3JhbmRvbScpO1xuICBzZWxmLnJhbmRvbSA9IG5ldyBSYW5kb20oc2VsZik7XG4gIC8vIHNlbGYucmFuZG9tID0gcmVxdWlyZSgnLi9yYW5kb20nKTtcblxuICB2YXIgSGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xuICBzZWxmLmhlbHBlcnMgPSBuZXcgSGVscGVycyhzZWxmKTtcblxuICB2YXIgTmFtZSA9IHJlcXVpcmUoJy4vbmFtZScpO1xuICBzZWxmLm5hbWUgPSBuZXcgTmFtZShzZWxmKTtcbiAgLy8gc2VsZi5uYW1lID0gcmVxdWlyZSgnLi9uYW1lJyk7XG5cbiAgdmFyIEFkZHJlc3MgPSByZXF1aXJlKCcuL2FkZHJlc3MnKTtcbiAgc2VsZi5hZGRyZXNzID0gbmV3IEFkZHJlc3Moc2VsZik7XG5cbiAgdmFyIENvbXBhbnkgPSByZXF1aXJlKCcuL2NvbXBhbnknKTtcbiAgc2VsZi5jb21wYW55ID0gbmV3IENvbXBhbnkoc2VsZik7XG5cbiAgdmFyIEZpbmFuY2UgPSByZXF1aXJlKCcuL2ZpbmFuY2UnKTtcbiAgc2VsZi5maW5hbmNlID0gbmV3IEZpbmFuY2Uoc2VsZik7XG5cbiAgdmFyIEltYWdlID0gcmVxdWlyZSgnLi9pbWFnZScpO1xuICBzZWxmLmltYWdlID0gbmV3IEltYWdlKHNlbGYpO1xuXG4gIHZhciBMb3JlbSA9IHJlcXVpcmUoJy4vbG9yZW0nKTtcbiAgc2VsZi5sb3JlbSA9IG5ldyBMb3JlbShzZWxmKTtcblxuICB2YXIgSGFja2VyID0gcmVxdWlyZSgnLi9oYWNrZXInKTtcbiAgc2VsZi5oYWNrZXIgPSBuZXcgSGFja2VyKHNlbGYpO1xuXG4gIHZhciBJbnRlcm5ldCA9IHJlcXVpcmUoJy4vaW50ZXJuZXQnKTtcbiAgc2VsZi5pbnRlcm5ldCA9IG5ldyBJbnRlcm5ldChzZWxmKTtcblxuICB2YXIgUGhvbmUgPSByZXF1aXJlKCcuL3Bob25lX251bWJlcicpO1xuICBzZWxmLnBob25lID0gbmV3IFBob25lKHNlbGYpO1xuXG4gIHZhciBfRGF0ZSA9IHJlcXVpcmUoJy4vZGF0ZScpO1xuICBzZWxmLmRhdGUgPSBuZXcgX0RhdGUoc2VsZik7XG5cbiAgdmFyIENvbW1lcmNlID0gcmVxdWlyZSgnLi9jb21tZXJjZScpO1xuICBzZWxmLmNvbW1lcmNlID0gbmV3IENvbW1lcmNlKHNlbGYpO1xuXG4gIC8vIFRPRE86IGZpeCBzZWxmLmNvbW1lcmNlID0gcmVxdWlyZSgnLi9jb21tZXJjZScpO1xuXG4gIHZhciBfZGVmaW5pdGlvbnMgPSB7XG4gICAgXCJuYW1lXCI6IFtcImZpcnN0X25hbWVcIiwgXCJsYXN0X25hbWVcIiwgXCJwcmVmaXhcIiwgXCJzdWZmaXhcIiwgXCJ0aXRsZVwiLCBcIm1hbGVfZmlyc3RfbmFtZVwiLCBcImZlbWFsZV9maXJzdF9uYW1lXCIsIFwibWFsZV9taWRkbGVfbmFtZVwiLCBcImZlbWFsZV9taWRkbGVfbmFtZVwiLCBcIm1hbGVfbGFzdF9uYW1lXCIsIFwiZmVtYWxlX2xhc3RfbmFtZVwiXSxcbiAgICBcImFkZHJlc3NcIjogW1wiY2l0eV9wcmVmaXhcIiwgXCJjaXR5X3N1ZmZpeFwiLCBcInN0cmVldF9zdWZmaXhcIiwgXCJjb3VudHlcIiwgXCJjb3VudHJ5XCIsIFwiY291bnRyeV9jb2RlXCIsIFwic3RhdGVcIiwgXCJzdGF0ZV9hYmJyXCIsIFwic3RyZWV0X3ByZWZpeFwiLCBcInBvc3Rjb2RlXCJdLFxuICAgIFwiY29tcGFueVwiOiBbXCJhZGplY3RpdmVcIiwgXCJub3VuXCIsIFwiZGVzY3JpcHRvclwiLCBcImJzX2FkamVjdGl2ZVwiLCBcImJzX25vdW5cIiwgXCJic192ZXJiXCIsIFwic3VmZml4XCJdLFxuICAgIFwibG9yZW1cIjogW1wid29yZHNcIl0sXG4gICAgXCJoYWNrZXJcIjogW1wiYWJicmV2aWF0aW9uXCIsIFwiYWRqZWN0aXZlXCIsIFwibm91blwiLCBcInZlcmJcIiwgXCJpbmd2ZXJiXCJdLFxuICAgIFwicGhvbmVfbnVtYmVyXCI6IFtcImZvcm1hdHNcIl0sXG4gICAgXCJmaW5hbmNlXCI6IFtcImFjY291bnRfdHlwZVwiLCBcInRyYW5zYWN0aW9uX3R5cGVcIiwgXCJjdXJyZW5jeVwiXSxcbiAgICBcImludGVybmV0XCI6IFtcImF2YXRhcl91cmlcIiwgXCJkb21haW5fc3VmZml4XCIsIFwiZnJlZV9lbWFpbFwiLCBcInBhc3N3b3JkXCJdLFxuICAgIFwiY29tbWVyY2VcIjogW1wiY29sb3JcIiwgXCJkZXBhcnRtZW50XCIsIFwicHJvZHVjdF9uYW1lXCIsIFwicHJpY2VcIiwgXCJjYXRlZ29yaWVzXCJdLFxuICAgIFwiZGF0ZVwiOiBbXCJtb250aFwiLCBcIndlZWtkYXlcIl0sXG4gICAgXCJ0aXRsZVwiOiBcIlwiLFxuICAgIFwic2VwYXJhdG9yXCI6IFwiXCJcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBHZXR0ZXIgZm9yIGFsbCBkZWZpbml0aW9ucy5mb28uYmFyIHByb3BldHJpZXNcbiAgT2JqZWN0LmtleXMoX2RlZmluaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe1xuICAgIGlmICh0eXBlb2Ygc2VsZi5kZWZpbml0aW9uc1tkXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgc2VsZi5kZWZpbml0aW9uc1tkXSA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgX2RlZmluaXRpb25zW2RdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHNlbGYuZGVmaW5pdGlvbnNbZF0gPSBfZGVmaW5pdGlvbnNbZF07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgX2RlZmluaXRpb25zW2RdLmZvckVhY2goZnVuY3Rpb24ocCl7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5kZWZpbml0aW9uc1tkXSwgcCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHNlbGYubG9jYWxlc1tzZWxmLmxvY2FsZV1bZF0gPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNlbGYubG9jYWxlc1tzZWxmLmxvY2FsZV1bZF1bcF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIC8vIGNlcnRhaW4gbG9jYWxpemF0aW9uIHNldHMgY29udGFpbiBsZXNzIGRhdGEgdGhlbiBvdGhlcnMuXG4gICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBhIG1pc3NpbmcgZGVmaW50aW9uLCB1c2UgdGhlIGRlZmF1bHQgbG9jYWxlRmFsbGJhY2sgdG8gc3Vic3RpdHV0ZSB0aGUgbWlzc2luZyBzZXQgZGF0YVxuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHByb3BlcnR5ICcgKyBkICsgcClcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmxvY2FsZXNbbG9jYWxlRmFsbGJhY2tdW2RdW3BdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gbG9jYWxpemVkIGRhdGFcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmxvY2FsZXNbc2VsZi5sb2NhbGVdW2RdW3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG59O1xuXG5GYWtlci5wcm90b3R5cGUuc2VlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBSYW5kb20gPSByZXF1aXJlKCcuL3JhbmRvbScpO1xuICB0aGlzLnNlZWRWYWx1ZSA9IHZhbHVlO1xuICB0aGlzLnJhbmRvbSA9IG5ldyBSYW5kb20odGhpcywgdGhpcy5zZWVkVmFsdWUpO1xufVxubW9kdWxlWydleHBvcnRzJ10gPSBGYWtlcjtcbiIsInZhciBwYXNzd29yZF9nZW5lcmF0b3IgPSByZXF1aXJlKCcuLi92ZW5kb3IvcGFzc3dvcmQtZ2VuZXJhdG9yLmpzJyksXG4gICAgcmFuZG9tX3VhID0gcmVxdWlyZSgnLi4vdmVuZG9yL3VzZXItYWdlbnQnKTtcblxudmFyIEludGVybmV0ID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5hdmF0YXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5pbnRlcm5ldC5hdmF0YXJfdXJpKTtcbiAgfTtcblxuICBzZWxmLmVtYWlsID0gZnVuY3Rpb24gKGZpcnN0TmFtZSwgbGFzdE5hbWUsIHByb3ZpZGVyKSB7XG4gICAgICBwcm92aWRlciA9IHByb3ZpZGVyIHx8IGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMuaW50ZXJuZXQuZnJlZV9lbWFpbCk7XG4gICAgICByZXR1cm4gIGZha2VyLmhlbHBlcnMuc2x1Z2lmeShmYWtlci5pbnRlcm5ldC51c2VyTmFtZShmaXJzdE5hbWUsIGxhc3ROYW1lKSkgKyBcIkBcIiArIHByb3ZpZGVyO1xuICB9O1xuXG4gIHNlbGYudXNlck5hbWUgPSBmdW5jdGlvbiAoZmlyc3ROYW1lLCBsYXN0TmFtZSkge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZSB8fCBmYWtlci5uYW1lLmZpcnN0TmFtZSgpO1xuICAgICAgbGFzdE5hbWUgPSBsYXN0TmFtZSB8fCBmYWtlci5uYW1lLmxhc3ROYW1lKCk7XG4gICAgICBzd2l0Y2ggKGZha2VyLnJhbmRvbS5udW1iZXIoMikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXN1bHQgPSBmaXJzdE5hbWUgKyBmYWtlci5yYW5kb20ubnVtYmVyKDk5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXN1bHQgPSBmaXJzdE5hbWUgKyBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KFtcIi5cIiwgXCJfXCJdKSArIGxhc3ROYW1lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJlc3VsdCA9IGZpcnN0TmFtZSArIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoW1wiLlwiLCBcIl9cIl0pICsgbGFzdE5hbWUgKyBmYWtlci5yYW5kb20ubnVtYmVyKDk5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC50b1N0cmluZygpLnJlcGxhY2UoLycvZywgXCJcIik7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvIC9nLCBcIlwiKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgc2VsZi5wcm90b2NvbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm90b2NvbHMgPSBbJ2h0dHAnLCdodHRwcyddO1xuICAgICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQocHJvdG9jb2xzKTtcbiAgfTtcblxuICBzZWxmLnVybCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5pbnRlcm5ldC5wcm90b2NvbCgpICsgJzovLycgKyBmYWtlci5pbnRlcm5ldC5kb21haW5OYW1lKCk7XG4gIH07XG5cbiAgc2VsZi5kb21haW5OYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZha2VyLmludGVybmV0LmRvbWFpbldvcmQoKSArIFwiLlwiICsgZmFrZXIuaW50ZXJuZXQuZG9tYWluU3VmZml4KCk7XG4gIH07XG5cbiAgc2VsZi5kb21haW5TdWZmaXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5pbnRlcm5ldC5kb21haW5fc3VmZml4KTtcbiAgfTtcblxuICBzZWxmLmRvbWFpbldvcmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFrZXIubmFtZS5maXJzdE5hbWUoKS5yZXBsYWNlKC8oW1xcXFx+IyYqe30vOjw+P3xcXFwiXSkvaWcsICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9O1xuXG4gIHNlbGYuaXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmFuZE51bSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gKGZha2VyLnJhbmRvbS5udW1iZXIoMjU1KSkudG9GaXhlZCgwKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0W2ldID0gcmFuZE51bSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0LmpvaW4oXCIuXCIpO1xuICB9O1xuXG4gIHNlbGYudXNlckFnZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByYW5kb21fdWEuZ2VuZXJhdGUoKTtcbiAgfTtcblxuICBzZWxmLmNvbG9yID0gZnVuY3Rpb24gKGJhc2VSZWQyNTUsIGJhc2VHcmVlbjI1NSwgYmFzZUJsdWUyNTUpIHtcbiAgICAgIGJhc2VSZWQyNTUgPSBiYXNlUmVkMjU1IHx8IDA7XG4gICAgICBiYXNlR3JlZW4yNTUgPSBiYXNlR3JlZW4yNTUgfHwgMDtcbiAgICAgIGJhc2VCbHVlMjU1ID0gYmFzZUJsdWUyNTUgfHwgMDtcbiAgICAgIC8vIGJhc2VkIG9uIGF3ZXNvbWUgcmVzcG9uc2UgOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQzMDQ0L2FsZ29yaXRobS10by1yYW5kb21seS1nZW5lcmF0ZS1hbi1hZXN0aGV0aWNhbGx5LXBsZWFzaW5nLWNvbG9yLXBhbGV0dGVcbiAgICAgIHZhciByZWQgPSBNYXRoLmZsb29yKChmYWtlci5yYW5kb20ubnVtYmVyKDI1NikgKyBiYXNlUmVkMjU1KSAvIDIpO1xuICAgICAgdmFyIGdyZWVuID0gTWF0aC5mbG9vcigoZmFrZXIucmFuZG9tLm51bWJlcigyNTYpICsgYmFzZUdyZWVuMjU1KSAvIDIpO1xuICAgICAgdmFyIGJsdWUgPSBNYXRoLmZsb29yKChmYWtlci5yYW5kb20ubnVtYmVyKDI1NikgKyBiYXNlQmx1ZTI1NSkgLyAyKTtcbiAgICAgIHZhciByZWRTdHIgPSByZWQudG9TdHJpbmcoMTYpO1xuICAgICAgdmFyIGdyZWVuU3RyID0gZ3JlZW4udG9TdHJpbmcoMTYpO1xuICAgICAgdmFyIGJsdWVTdHIgPSBibHVlLnRvU3RyaW5nKDE2KTtcbiAgICAgIHJldHVybiAnIycgK1xuICAgICAgICAocmVkU3RyLmxlbmd0aCA9PT0gMSA/ICcwJyA6ICcnKSArIHJlZFN0ciArXG4gICAgICAgIChncmVlblN0ci5sZW5ndGggPT09IDEgPyAnMCcgOiAnJykgKyBncmVlblN0ciArXG4gICAgICAgIChibHVlU3RyLmxlbmd0aCA9PT0gMSA/ICcwJzogJycpICsgYmx1ZVN0cjtcblxuICB9O1xuXG4gIHNlbGYubWFjID0gZnVuY3Rpb24oKXtcbiAgICAgIHZhciBpLCBtYWMgPSBcIlwiO1xuICAgICAgZm9yIChpPTA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgbWFjKz0gcGFyc2VJbnQoTWF0aC5yYW5kb20oKSoxNikudG9TdHJpbmcoMTYpO1xuICAgICAgICAgIGlmIChpJTI9PTEgJiYgaSAhPSAxMSkge1xuICAgICAgICAgICAgICBtYWMrPVwiOlwiO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtYWM7XG4gIH07XG5cbiAgc2VsZi5wYXNzd29yZCA9IGZ1bmN0aW9uIChsZW4sIG1lbW9yYWJsZSwgcGF0dGVybiwgcHJlZml4KSB7XG4gICAgbGVuID0gbGVuIHx8IDE1O1xuICAgIGlmICh0eXBlb2YgbWVtb3JhYmxlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBtZW1vcmFibGUgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhc3N3b3JkX2dlbmVyYXRvcihsZW4sIG1lbW9yYWJsZSwgcGF0dGVybiwgcHJlZml4KTtcbiAgfVxuICBcbn07XG5cblxubW9kdWxlW1wiZXhwb3J0c1wiXSA9IEludGVybmV0O1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIjIyMjI1wiLFxuICBcIiMjIyNcIixcbiAgXCIjIyNcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3tjaXR5X3ByZWZpeH0gI3tOYW1lLmZpcnN0X25hbWV9I3tjaXR5X3N1ZmZpeH1cIixcbiAgXCIje2NpdHlfcHJlZml4fSAje05hbWUuZmlyc3RfbmFtZX1cIixcbiAgXCIje05hbWUuZmlyc3RfbmFtZX0je2NpdHlfc3VmZml4fVwiLFxuICBcIiN7TmFtZS5sYXN0X25hbWV9I3tjaXR5X3N1ZmZpeH1cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiTm9ydGhcIixcbiAgXCJFYXN0XCIsXG4gIFwiV2VzdFwiLFxuICBcIlNvdXRoXCIsXG4gIFwiTmV3XCIsXG4gIFwiTGFrZVwiLFxuICBcIlBvcnRcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwidG93blwiLFxuICBcInRvblwiLFxuICBcImxhbmRcIixcbiAgXCJ2aWxsZVwiLFxuICBcImJlcmdcIixcbiAgXCJidXJnaFwiLFxuICBcImJvcm91Z2hcIixcbiAgXCJidXJ5XCIsXG4gIFwidmlld1wiLFxuICBcInBvcnRcIixcbiAgXCJtb3V0aFwiLFxuICBcInN0YWRcIixcbiAgXCJmdXJ0XCIsXG4gIFwiY2hlc3RlclwiLFxuICBcIm1vdXRoXCIsXG4gIFwiZm9ydFwiLFxuICBcImhhdmVuXCIsXG4gIFwic2lkZVwiLFxuICBcInNoaXJlXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFmZ2hhbmlzdGFuXCIsXG4gIFwiQWxiYW5pYVwiLFxuICBcIkFsZ2VyaWFcIixcbiAgXCJBbWVyaWNhbiBTYW1vYVwiLFxuICBcIkFuZG9ycmFcIixcbiAgXCJBbmdvbGFcIixcbiAgXCJBbmd1aWxsYVwiLFxuICBcIkFudGFyY3RpY2EgKHRoZSB0ZXJyaXRvcnkgU291dGggb2YgNjAgZGVnIFMpXCIsXG4gIFwiQW50aWd1YSBhbmQgQmFyYnVkYVwiLFxuICBcIkFyZ2VudGluYVwiLFxuICBcIkFybWVuaWFcIixcbiAgXCJBcnViYVwiLFxuICBcIkF1c3RyYWxpYVwiLFxuICBcIkF1c3RyaWFcIixcbiAgXCJBemVyYmFpamFuXCIsXG4gIFwiQmFoYW1hc1wiLFxuICBcIkJhaHJhaW5cIixcbiAgXCJCYW5nbGFkZXNoXCIsXG4gIFwiQmFyYmFkb3NcIixcbiAgXCJCZWxhcnVzXCIsXG4gIFwiQmVsZ2l1bVwiLFxuICBcIkJlbGl6ZVwiLFxuICBcIkJlbmluXCIsXG4gIFwiQmVybXVkYVwiLFxuICBcIkJodXRhblwiLFxuICBcIkJvbGl2aWFcIixcbiAgXCJCb3NuaWEgYW5kIEhlcnplZ292aW5hXCIsXG4gIFwiQm90c3dhbmFcIixcbiAgXCJCb3V2ZXQgSXNsYW5kIChCb3V2ZXRveWEpXCIsXG4gIFwiQnJhemlsXCIsXG4gIFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5IChDaGFnb3MgQXJjaGlwZWxhZ28pXCIsXG4gIFwiQnJ1bmVpIERhcnVzc2FsYW1cIixcbiAgXCJCdWxnYXJpYVwiLFxuICBcIkJ1cmtpbmEgRmFzb1wiLFxuICBcIkJ1cnVuZGlcIixcbiAgXCJDYW1ib2RpYVwiLFxuICBcIkNhbWVyb29uXCIsXG4gIFwiQ2FuYWRhXCIsXG4gIFwiQ2FwZSBWZXJkZVwiLFxuICBcIkNheW1hbiBJc2xhbmRzXCIsXG4gIFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXCIsXG4gIFwiQ2hhZFwiLFxuICBcIkNoaWxlXCIsXG4gIFwiQ2hpbmFcIixcbiAgXCJDaHJpc3RtYXMgSXNsYW5kXCIsXG4gIFwiQ29jb3MgKEtlZWxpbmcpIElzbGFuZHNcIixcbiAgXCJDb2xvbWJpYVwiLFxuICBcIkNvbW9yb3NcIixcbiAgXCJDb25nb1wiLFxuICBcIkNvbmdvXCIsXG4gIFwiQ29vayBJc2xhbmRzXCIsXG4gIFwiQ29zdGEgUmljYVwiLFxuICBcIkNvdGUgZCdJdm9pcmVcIixcbiAgXCJDcm9hdGlhXCIsXG4gIFwiQ3ViYVwiLFxuICBcIkN5cHJ1c1wiLFxuICBcIkN6ZWNoIFJlcHVibGljXCIsXG4gIFwiRGVubWFya1wiLFxuICBcIkRqaWJvdXRpXCIsXG4gIFwiRG9taW5pY2FcIixcbiAgXCJEb21pbmljYW4gUmVwdWJsaWNcIixcbiAgXCJFY3VhZG9yXCIsXG4gIFwiRWd5cHRcIixcbiAgXCJFbCBTYWx2YWRvclwiLFxuICBcIkVxdWF0b3JpYWwgR3VpbmVhXCIsXG4gIFwiRXJpdHJlYVwiLFxuICBcIkVzdG9uaWFcIixcbiAgXCJFdGhpb3BpYVwiLFxuICBcIkZhcm9lIElzbGFuZHNcIixcbiAgXCJGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcylcIixcbiAgXCJGaWppXCIsXG4gIFwiRmlubGFuZFwiLFxuICBcIkZyYW5jZVwiLFxuICBcIkZyZW5jaCBHdWlhbmFcIixcbiAgXCJGcmVuY2ggUG9seW5lc2lhXCIsXG4gIFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXCIsXG4gIFwiR2Fib25cIixcbiAgXCJHYW1iaWFcIixcbiAgXCJHZW9yZ2lhXCIsXG4gIFwiR2VybWFueVwiLFxuICBcIkdoYW5hXCIsXG4gIFwiR2licmFsdGFyXCIsXG4gIFwiR3JlZWNlXCIsXG4gIFwiR3JlZW5sYW5kXCIsXG4gIFwiR3JlbmFkYVwiLFxuICBcIkd1YWRlbG91cGVcIixcbiAgXCJHdWFtXCIsXG4gIFwiR3VhdGVtYWxhXCIsXG4gIFwiR3Vlcm5zZXlcIixcbiAgXCJHdWluZWFcIixcbiAgXCJHdWluZWEtQmlzc2F1XCIsXG4gIFwiR3V5YW5hXCIsXG4gIFwiSGFpdGlcIixcbiAgXCJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHNcIixcbiAgXCJIb2x5IFNlZSAoVmF0aWNhbiBDaXR5IFN0YXRlKVwiLFxuICBcIkhvbmR1cmFzXCIsXG4gIFwiSG9uZyBLb25nXCIsXG4gIFwiSHVuZ2FyeVwiLFxuICBcIkljZWxhbmRcIixcbiAgXCJJbmRpYVwiLFxuICBcIkluZG9uZXNpYVwiLFxuICBcIklyYW5cIixcbiAgXCJJcmFxXCIsXG4gIFwiSXJlbGFuZFwiLFxuICBcIklzbGUgb2YgTWFuXCIsXG4gIFwiSXNyYWVsXCIsXG4gIFwiSXRhbHlcIixcbiAgXCJKYW1haWNhXCIsXG4gIFwiSmFwYW5cIixcbiAgXCJKZXJzZXlcIixcbiAgXCJKb3JkYW5cIixcbiAgXCJLYXpha2hzdGFuXCIsXG4gIFwiS2VueWFcIixcbiAgXCJLaXJpYmF0aVwiLFxuICBcIkRlbW9jcmF0aWMgUGVvcGxlJ3MgUmVwdWJsaWMgb2YgS29yZWFcIixcbiAgXCJSZXB1YmxpYyBvZiBLb3JlYVwiLFxuICBcIkt1d2FpdFwiLFxuICBcIkt5cmd5eiBSZXB1YmxpY1wiLFxuICBcIkxhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljXCIsXG4gIFwiTGF0dmlhXCIsXG4gIFwiTGViYW5vblwiLFxuICBcIkxlc290aG9cIixcbiAgXCJMaWJlcmlhXCIsXG4gIFwiTGlieWFuIEFyYWIgSmFtYWhpcml5YVwiLFxuICBcIkxpZWNodGVuc3RlaW5cIixcbiAgXCJMaXRodWFuaWFcIixcbiAgXCJMdXhlbWJvdXJnXCIsXG4gIFwiTWFjYW9cIixcbiAgXCJNYWNlZG9uaWFcIixcbiAgXCJNYWRhZ2FzY2FyXCIsXG4gIFwiTWFsYXdpXCIsXG4gIFwiTWFsYXlzaWFcIixcbiAgXCJNYWxkaXZlc1wiLFxuICBcIk1hbGlcIixcbiAgXCJNYWx0YVwiLFxuICBcIk1hcnNoYWxsIElzbGFuZHNcIixcbiAgXCJNYXJ0aW5pcXVlXCIsXG4gIFwiTWF1cml0YW5pYVwiLFxuICBcIk1hdXJpdGl1c1wiLFxuICBcIk1heW90dGVcIixcbiAgXCJNZXhpY29cIixcbiAgXCJNaWNyb25lc2lhXCIsXG4gIFwiTW9sZG92YVwiLFxuICBcIk1vbmFjb1wiLFxuICBcIk1vbmdvbGlhXCIsXG4gIFwiTW9udGVuZWdyb1wiLFxuICBcIk1vbnRzZXJyYXRcIixcbiAgXCJNb3JvY2NvXCIsXG4gIFwiTW96YW1iaXF1ZVwiLFxuICBcIk15YW5tYXJcIixcbiAgXCJOYW1pYmlhXCIsXG4gIFwiTmF1cnVcIixcbiAgXCJOZXBhbFwiLFxuICBcIk5ldGhlcmxhbmRzIEFudGlsbGVzXCIsXG4gIFwiTmV0aGVybGFuZHNcIixcbiAgXCJOZXcgQ2FsZWRvbmlhXCIsXG4gIFwiTmV3IFplYWxhbmRcIixcbiAgXCJOaWNhcmFndWFcIixcbiAgXCJOaWdlclwiLFxuICBcIk5pZ2VyaWFcIixcbiAgXCJOaXVlXCIsXG4gIFwiTm9yZm9sayBJc2xhbmRcIixcbiAgXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcIixcbiAgXCJOb3J3YXlcIixcbiAgXCJPbWFuXCIsXG4gIFwiUGFraXN0YW5cIixcbiAgXCJQYWxhdVwiLFxuICBcIlBhbGVzdGluaWFuIFRlcnJpdG9yeVwiLFxuICBcIlBhbmFtYVwiLFxuICBcIlBhcHVhIE5ldyBHdWluZWFcIixcbiAgXCJQYXJhZ3VheVwiLFxuICBcIlBlcnVcIixcbiAgXCJQaGlsaXBwaW5lc1wiLFxuICBcIlBpdGNhaXJuIElzbGFuZHNcIixcbiAgXCJQb2xhbmRcIixcbiAgXCJQb3J0dWdhbFwiLFxuICBcIlB1ZXJ0byBSaWNvXCIsXG4gIFwiUWF0YXJcIixcbiAgXCJSZXVuaW9uXCIsXG4gIFwiUm9tYW5pYVwiLFxuICBcIlJ1c3NpYW4gRmVkZXJhdGlvblwiLFxuICBcIlJ3YW5kYVwiLFxuICBcIlNhaW50IEJhcnRoZWxlbXlcIixcbiAgXCJTYWludCBIZWxlbmFcIixcbiAgXCJTYWludCBLaXR0cyBhbmQgTmV2aXNcIixcbiAgXCJTYWludCBMdWNpYVwiLFxuICBcIlNhaW50IE1hcnRpblwiLFxuICBcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cIixcbiAgXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1wiLFxuICBcIlNhbW9hXCIsXG4gIFwiU2FuIE1hcmlub1wiLFxuICBcIlNhbyBUb21lIGFuZCBQcmluY2lwZVwiLFxuICBcIlNhdWRpIEFyYWJpYVwiLFxuICBcIlNlbmVnYWxcIixcbiAgXCJTZXJiaWFcIixcbiAgXCJTZXljaGVsbGVzXCIsXG4gIFwiU2llcnJhIExlb25lXCIsXG4gIFwiU2luZ2Fwb3JlXCIsXG4gIFwiU2xvdmFraWEgKFNsb3ZhayBSZXB1YmxpYylcIixcbiAgXCJTbG92ZW5pYVwiLFxuICBcIlNvbG9tb24gSXNsYW5kc1wiLFxuICBcIlNvbWFsaWFcIixcbiAgXCJTb3V0aCBBZnJpY2FcIixcbiAgXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1wiLFxuICBcIlNwYWluXCIsXG4gIFwiU3JpIExhbmthXCIsXG4gIFwiU3VkYW5cIixcbiAgXCJTdXJpbmFtZVwiLFxuICBcIlN2YWxiYXJkICYgSmFuIE1heWVuIElzbGFuZHNcIixcbiAgXCJTd2F6aWxhbmRcIixcbiAgXCJTd2VkZW5cIixcbiAgXCJTd2l0emVybGFuZFwiLFxuICBcIlN5cmlhbiBBcmFiIFJlcHVibGljXCIsXG4gIFwiVGFpd2FuXCIsXG4gIFwiVGFqaWtpc3RhblwiLFxuICBcIlRhbnphbmlhXCIsXG4gIFwiVGhhaWxhbmRcIixcbiAgXCJUaW1vci1MZXN0ZVwiLFxuICBcIlRvZ29cIixcbiAgXCJUb2tlbGF1XCIsXG4gIFwiVG9uZ2FcIixcbiAgXCJUcmluaWRhZCBhbmQgVG9iYWdvXCIsXG4gIFwiVHVuaXNpYVwiLFxuICBcIlR1cmtleVwiLFxuICBcIlR1cmttZW5pc3RhblwiLFxuICBcIlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kc1wiLFxuICBcIlR1dmFsdVwiLFxuICBcIlVnYW5kYVwiLFxuICBcIlVrcmFpbmVcIixcbiAgXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1wiLFxuICBcIlVuaXRlZCBLaW5nZG9tXCIsXG4gIFwiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhXCIsXG4gIFwiVW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzXCIsXG4gIFwiVXJ1Z3VheVwiLFxuICBcIlV6YmVraXN0YW5cIixcbiAgXCJWYW51YXR1XCIsXG4gIFwiVmVuZXp1ZWxhXCIsXG4gIFwiVmlldG5hbVwiLFxuICBcIlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoXCIsXG4gIFwiVmlyZ2luIElzbGFuZHMsIFUuUy5cIixcbiAgXCJXYWxsaXMgYW5kIEZ1dHVuYVwiLFxuICBcIldlc3Rlcm4gU2FoYXJhXCIsXG4gIFwiWWVtZW5cIixcbiAgXCJaYW1iaWFcIixcbiAgXCJaaW1iYWJ3ZVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBRFwiLFxuICBcIkFFXCIsXG4gIFwiQUZcIixcbiAgXCJBR1wiLFxuICBcIkFJXCIsXG4gIFwiQUxcIixcbiAgXCJBTVwiLFxuICBcIkFPXCIsXG4gIFwiQVFcIixcbiAgXCJBUlwiLFxuICBcIkFTXCIsXG4gIFwiQVRcIixcbiAgXCJBVVwiLFxuICBcIkFXXCIsXG4gIFwiQVhcIixcbiAgXCJBWlwiLFxuICBcIkJBXCIsXG4gIFwiQkJcIixcbiAgXCJCRFwiLFxuICBcIkJFXCIsXG4gIFwiQkZcIixcbiAgXCJCR1wiLFxuICBcIkJIXCIsXG4gIFwiQklcIixcbiAgXCJCSlwiLFxuICBcIkJMXCIsXG4gIFwiQk1cIixcbiAgXCJCTlwiLFxuICBcIkJPXCIsXG4gIFwiQlFcIixcbiAgXCJCUVwiLFxuICBcIkJSXCIsXG4gIFwiQlNcIixcbiAgXCJCVFwiLFxuICBcIkJWXCIsXG4gIFwiQldcIixcbiAgXCJCWVwiLFxuICBcIkJaXCIsXG4gIFwiQ0FcIixcbiAgXCJDQ1wiLFxuICBcIkNEXCIsXG4gIFwiQ0ZcIixcbiAgXCJDR1wiLFxuICBcIkNIXCIsXG4gIFwiQ0lcIixcbiAgXCJDS1wiLFxuICBcIkNMXCIsXG4gIFwiQ01cIixcbiAgXCJDTlwiLFxuICBcIkNPXCIsXG4gIFwiQ1JcIixcbiAgXCJDVVwiLFxuICBcIkNWXCIsXG4gIFwiQ1dcIixcbiAgXCJDWFwiLFxuICBcIkNZXCIsXG4gIFwiQ1pcIixcbiAgXCJERVwiLFxuICBcIkRKXCIsXG4gIFwiREtcIixcbiAgXCJETVwiLFxuICBcIkRPXCIsXG4gIFwiRFpcIixcbiAgXCJFQ1wiLFxuICBcIkVFXCIsXG4gIFwiRUdcIixcbiAgXCJFSFwiLFxuICBcIkVSXCIsXG4gIFwiRVNcIixcbiAgXCJFVFwiLFxuICBcIkZJXCIsXG4gIFwiRkpcIixcbiAgXCJGS1wiLFxuICBcIkZNXCIsXG4gIFwiRk9cIixcbiAgXCJGUlwiLFxuICBcIkdBXCIsXG4gIFwiR0JcIixcbiAgXCJHRFwiLFxuICBcIkdFXCIsXG4gIFwiR0ZcIixcbiAgXCJHR1wiLFxuICBcIkdIXCIsXG4gIFwiR0lcIixcbiAgXCJHTFwiLFxuICBcIkdNXCIsXG4gIFwiR05cIixcbiAgXCJHUFwiLFxuICBcIkdRXCIsXG4gIFwiR1JcIixcbiAgXCJHU1wiLFxuICBcIkdUXCIsXG4gIFwiR1VcIixcbiAgXCJHV1wiLFxuICBcIkdZXCIsXG4gIFwiSEtcIixcbiAgXCJITVwiLFxuICBcIkhOXCIsXG4gIFwiSFJcIixcbiAgXCJIVFwiLFxuICBcIkhVXCIsXG4gIFwiSURcIixcbiAgXCJJRVwiLFxuICBcIklMXCIsXG4gIFwiSU1cIixcbiAgXCJJTlwiLFxuICBcIklPXCIsXG4gIFwiSVFcIixcbiAgXCJJUlwiLFxuICBcIklTXCIsXG4gIFwiSVRcIixcbiAgXCJKRVwiLFxuICBcIkpNXCIsXG4gIFwiSk9cIixcbiAgXCJKUFwiLFxuICBcIktFXCIsXG4gIFwiS0dcIixcbiAgXCJLSFwiLFxuICBcIktJXCIsXG4gIFwiS01cIixcbiAgXCJLTlwiLFxuICBcIktQXCIsXG4gIFwiS1JcIixcbiAgXCJLV1wiLFxuICBcIktZXCIsXG4gIFwiS1pcIixcbiAgXCJMQVwiLFxuICBcIkxCXCIsXG4gIFwiTENcIixcbiAgXCJMSVwiLFxuICBcIkxLXCIsXG4gIFwiTFJcIixcbiAgXCJMU1wiLFxuICBcIkxUXCIsXG4gIFwiTFVcIixcbiAgXCJMVlwiLFxuICBcIkxZXCIsXG4gIFwiTUFcIixcbiAgXCJNQ1wiLFxuICBcIk1EXCIsXG4gIFwiTUVcIixcbiAgXCJNRlwiLFxuICBcIk1HXCIsXG4gIFwiTUhcIixcbiAgXCJNS1wiLFxuICBcIk1MXCIsXG4gIFwiTU1cIixcbiAgXCJNTlwiLFxuICBcIk1PXCIsXG4gIFwiTVBcIixcbiAgXCJNUVwiLFxuICBcIk1SXCIsXG4gIFwiTVNcIixcbiAgXCJNVFwiLFxuICBcIk1VXCIsXG4gIFwiTVZcIixcbiAgXCJNV1wiLFxuICBcIk1YXCIsXG4gIFwiTVlcIixcbiAgXCJNWlwiLFxuICBcIk5BXCIsXG4gIFwiTkNcIixcbiAgXCJORVwiLFxuICBcIk5GXCIsXG4gIFwiTkdcIixcbiAgXCJOSVwiLFxuICBcIk5MXCIsXG4gIFwiTk9cIixcbiAgXCJOUFwiLFxuICBcIk5SXCIsXG4gIFwiTlVcIixcbiAgXCJOWlwiLFxuICBcIk9NXCIsXG4gIFwiUEFcIixcbiAgXCJQRVwiLFxuICBcIlBGXCIsXG4gIFwiUEdcIixcbiAgXCJQSFwiLFxuICBcIlBLXCIsXG4gIFwiUExcIixcbiAgXCJQTVwiLFxuICBcIlBOXCIsXG4gIFwiUFJcIixcbiAgXCJQU1wiLFxuICBcIlBUXCIsXG4gIFwiUFdcIixcbiAgXCJQWVwiLFxuICBcIlFBXCIsXG4gIFwiUkVcIixcbiAgXCJST1wiLFxuICBcIlJTXCIsXG4gIFwiUlVcIixcbiAgXCJSV1wiLFxuICBcIlNBXCIsXG4gIFwiU0JcIixcbiAgXCJTQ1wiLFxuICBcIlNEXCIsXG4gIFwiU0VcIixcbiAgXCJTR1wiLFxuICBcIlNIXCIsXG4gIFwiU0lcIixcbiAgXCJTSlwiLFxuICBcIlNLXCIsXG4gIFwiU0xcIixcbiAgXCJTTVwiLFxuICBcIlNOXCIsXG4gIFwiU09cIixcbiAgXCJTUlwiLFxuICBcIlNTXCIsXG4gIFwiU1RcIixcbiAgXCJTVlwiLFxuICBcIlNYXCIsXG4gIFwiU1lcIixcbiAgXCJTWlwiLFxuICBcIlRDXCIsXG4gIFwiVERcIixcbiAgXCJURlwiLFxuICBcIlRHXCIsXG4gIFwiVEhcIixcbiAgXCJUSlwiLFxuICBcIlRLXCIsXG4gIFwiVExcIixcbiAgXCJUTVwiLFxuICBcIlROXCIsXG4gIFwiVE9cIixcbiAgXCJUUlwiLFxuICBcIlRUXCIsXG4gIFwiVFZcIixcbiAgXCJUV1wiLFxuICBcIlRaXCIsXG4gIFwiVUFcIixcbiAgXCJVR1wiLFxuICBcIlVNXCIsXG4gIFwiVVNcIixcbiAgXCJVWVwiLFxuICBcIlVaXCIsXG4gIFwiVkFcIixcbiAgXCJWQ1wiLFxuICBcIlZFXCIsXG4gIFwiVkdcIixcbiAgXCJWSVwiLFxuICBcIlZOXCIsXG4gIFwiVlVcIixcbiAgXCJXRlwiLFxuICBcIldTXCIsXG4gIFwiWUVcIixcbiAgXCJZVFwiLFxuICBcIlpBXCIsXG4gIFwiWk1cIixcbiAgXCJaV1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJBdm9uXCIsXG4gIFwiQmVkZm9yZHNoaXJlXCIsXG4gIFwiQmVya3NoaXJlXCIsXG4gIFwiQm9yZGVyc1wiLFxuICBcIkJ1Y2tpbmdoYW1zaGlyZVwiLFxuICBcIkNhbWJyaWRnZXNoaXJlXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYVwiXG5dO1xuIiwidmFyIGFkZHJlc3MgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gYWRkcmVzcztcbmFkZHJlc3MuY2l0eV9wcmVmaXggPSByZXF1aXJlKFwiLi9jaXR5X3ByZWZpeFwiKTtcbmFkZHJlc3MuY2l0eV9zdWZmaXggPSByZXF1aXJlKFwiLi9jaXR5X3N1ZmZpeFwiKTtcbmFkZHJlc3MuY291bnR5ID0gcmVxdWlyZShcIi4vY291bnR5XCIpO1xuYWRkcmVzcy5jb3VudHJ5ID0gcmVxdWlyZShcIi4vY291bnRyeVwiKTtcbmFkZHJlc3MuY291bnRyeV9jb2RlID0gcmVxdWlyZShcIi4vY291bnRyeV9jb2RlXCIpO1xuYWRkcmVzcy5idWlsZGluZ19udW1iZXIgPSByZXF1aXJlKFwiLi9idWlsZGluZ19udW1iZXJcIik7XG5hZGRyZXNzLnN0cmVldF9zdWZmaXggPSByZXF1aXJlKFwiLi9zdHJlZXRfc3VmZml4XCIpO1xuYWRkcmVzcy5zZWNvbmRhcnlfYWRkcmVzcyA9IHJlcXVpcmUoXCIuL3NlY29uZGFyeV9hZGRyZXNzXCIpO1xuYWRkcmVzcy5wb3N0Y29kZSA9IHJlcXVpcmUoXCIuL3Bvc3Rjb2RlXCIpO1xuYWRkcmVzcy5wb3N0Y29kZV9ieV9zdGF0ZSA9IHJlcXVpcmUoXCIuL3Bvc3Rjb2RlX2J5X3N0YXRlXCIpO1xuYWRkcmVzcy5zdGF0ZSA9IHJlcXVpcmUoXCIuL3N0YXRlXCIpO1xuYWRkcmVzcy5zdGF0ZV9hYmJyID0gcmVxdWlyZShcIi4vc3RhdGVfYWJiclwiKTtcbmFkZHJlc3MudGltZV96b25lID0gcmVxdWlyZShcIi4vdGltZV96b25lXCIpO1xuYWRkcmVzcy5jaXR5ID0gcmVxdWlyZShcIi4vY2l0eVwiKTtcbmFkZHJlc3Muc3RyZWV0X25hbWUgPSByZXF1aXJlKFwiLi9zdHJlZXRfbmFtZVwiKTtcbmFkZHJlc3Muc3RyZWV0X2FkZHJlc3MgPSByZXF1aXJlKFwiLi9zdHJlZXRfYWRkcmVzc1wiKTtcbmFkZHJlc3MuZGVmYXVsdF9jb3VudHJ5ID0gcmVxdWlyZShcIi4vZGVmYXVsdF9jb3VudHJ5XCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIjIyMjI1wiLFxuICBcIiMjIyMjLSMjIyNcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQXB0LiAjIyNcIixcbiAgXCJTdWl0ZSAjIyNcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQWxhYmFtYVwiLFxuICBcIkFsYXNrYVwiLFxuICBcIkFyaXpvbmFcIixcbiAgXCJBcmthbnNhc1wiLFxuICBcIkNhbGlmb3JuaWFcIixcbiAgXCJDb2xvcmFkb1wiLFxuICBcIkNvbm5lY3RpY3V0XCIsXG4gIFwiRGVsYXdhcmVcIixcbiAgXCJGbG9yaWRhXCIsXG4gIFwiR2VvcmdpYVwiLFxuICBcIkhhd2FpaVwiLFxuICBcIklkYWhvXCIsXG4gIFwiSWxsaW5vaXNcIixcbiAgXCJJbmRpYW5hXCIsXG4gIFwiSW93YVwiLFxuICBcIkthbnNhc1wiLFxuICBcIktlbnR1Y2t5XCIsXG4gIFwiTG91aXNpYW5hXCIsXG4gIFwiTWFpbmVcIixcbiAgXCJNYXJ5bGFuZFwiLFxuICBcIk1hc3NhY2h1c2V0dHNcIixcbiAgXCJNaWNoaWdhblwiLFxuICBcIk1pbm5lc290YVwiLFxuICBcIk1pc3Npc3NpcHBpXCIsXG4gIFwiTWlzc291cmlcIixcbiAgXCJNb250YW5hXCIsXG4gIFwiTmVicmFza2FcIixcbiAgXCJOZXZhZGFcIixcbiAgXCJOZXcgSGFtcHNoaXJlXCIsXG4gIFwiTmV3IEplcnNleVwiLFxuICBcIk5ldyBNZXhpY29cIixcbiAgXCJOZXcgWW9ya1wiLFxuICBcIk5vcnRoIENhcm9saW5hXCIsXG4gIFwiTm9ydGggRGFrb3RhXCIsXG4gIFwiT2hpb1wiLFxuICBcIk9rbGFob21hXCIsXG4gIFwiT3JlZ29uXCIsXG4gIFwiUGVubnN5bHZhbmlhXCIsXG4gIFwiUmhvZGUgSXNsYW5kXCIsXG4gIFwiU291dGggQ2Fyb2xpbmFcIixcbiAgXCJTb3V0aCBEYWtvdGFcIixcbiAgXCJUZW5uZXNzZWVcIixcbiAgXCJUZXhhc1wiLFxuICBcIlV0YWhcIixcbiAgXCJWZXJtb250XCIsXG4gIFwiVmlyZ2luaWFcIixcbiAgXCJXYXNoaW5ndG9uXCIsXG4gIFwiV2VzdCBWaXJnaW5pYVwiLFxuICBcIldpc2NvbnNpblwiLFxuICBcIld5b21pbmdcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQUxcIixcbiAgXCJBS1wiLFxuICBcIkFaXCIsXG4gIFwiQVJcIixcbiAgXCJDQVwiLFxuICBcIkNPXCIsXG4gIFwiQ1RcIixcbiAgXCJERVwiLFxuICBcIkZMXCIsXG4gIFwiR0FcIixcbiAgXCJISVwiLFxuICBcIklEXCIsXG4gIFwiSUxcIixcbiAgXCJJTlwiLFxuICBcIklBXCIsXG4gIFwiS1NcIixcbiAgXCJLWVwiLFxuICBcIkxBXCIsXG4gIFwiTUVcIixcbiAgXCJNRFwiLFxuICBcIk1BXCIsXG4gIFwiTUlcIixcbiAgXCJNTlwiLFxuICBcIk1TXCIsXG4gIFwiTU9cIixcbiAgXCJNVFwiLFxuICBcIk5FXCIsXG4gIFwiTlZcIixcbiAgXCJOSFwiLFxuICBcIk5KXCIsXG4gIFwiTk1cIixcbiAgXCJOWVwiLFxuICBcIk5DXCIsXG4gIFwiTkRcIixcbiAgXCJPSFwiLFxuICBcIk9LXCIsXG4gIFwiT1JcIixcbiAgXCJQQVwiLFxuICBcIlJJXCIsXG4gIFwiU0NcIixcbiAgXCJTRFwiLFxuICBcIlROXCIsXG4gIFwiVFhcIixcbiAgXCJVVFwiLFxuICBcIlZUXCIsXG4gIFwiVkFcIixcbiAgXCJXQVwiLFxuICBcIldWXCIsXG4gIFwiV0lcIixcbiAgXCJXWVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIje2J1aWxkaW5nX251bWJlcn0gI3tzdHJlZXRfbmFtZX1cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiI3tOYW1lLmZpcnN0X25hbWV9ICN7c3RyZWV0X3N1ZmZpeH1cIixcbiAgXCIje05hbWUubGFzdF9uYW1lfSAje3N0cmVldF9zdWZmaXh9XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFsbGV5XCIsXG4gIFwiQXZlbnVlXCIsXG4gIFwiQnJhbmNoXCIsXG4gIFwiQnJpZGdlXCIsXG4gIFwiQnJvb2tcIixcbiAgXCJCcm9va3NcIixcbiAgXCJCdXJnXCIsXG4gIFwiQnVyZ3NcIixcbiAgXCJCeXBhc3NcIixcbiAgXCJDYW1wXCIsXG4gIFwiQ2FueW9uXCIsXG4gIFwiQ2FwZVwiLFxuICBcIkNhdXNld2F5XCIsXG4gIFwiQ2VudGVyXCIsXG4gIFwiQ2VudGVyc1wiLFxuICBcIkNpcmNsZVwiLFxuICBcIkNpcmNsZXNcIixcbiAgXCJDbGlmZlwiLFxuICBcIkNsaWZmc1wiLFxuICBcIkNsdWJcIixcbiAgXCJDb21tb25cIixcbiAgXCJDb3JuZXJcIixcbiAgXCJDb3JuZXJzXCIsXG4gIFwiQ291cnNlXCIsXG4gIFwiQ291cnRcIixcbiAgXCJDb3VydHNcIixcbiAgXCJDb3ZlXCIsXG4gIFwiQ292ZXNcIixcbiAgXCJDcmVla1wiLFxuICBcIkNyZXNjZW50XCIsXG4gIFwiQ3Jlc3RcIixcbiAgXCJDcm9zc2luZ1wiLFxuICBcIkNyb3Nzcm9hZFwiLFxuICBcIkN1cnZlXCIsXG4gIFwiRGFsZVwiLFxuICBcIkRhbVwiLFxuICBcIkRpdmlkZVwiLFxuICBcIkRyaXZlXCIsXG4gIFwiRHJpdmVcIixcbiAgXCJEcml2ZXNcIixcbiAgXCJFc3RhdGVcIixcbiAgXCJFc3RhdGVzXCIsXG4gIFwiRXhwcmVzc3dheVwiLFxuICBcIkV4dGVuc2lvblwiLFxuICBcIkV4dGVuc2lvbnNcIixcbiAgXCJGYWxsXCIsXG4gIFwiRmFsbHNcIixcbiAgXCJGZXJyeVwiLFxuICBcIkZpZWxkXCIsXG4gIFwiRmllbGRzXCIsXG4gIFwiRmxhdFwiLFxuICBcIkZsYXRzXCIsXG4gIFwiRm9yZFwiLFxuICBcIkZvcmRzXCIsXG4gIFwiRm9yZXN0XCIsXG4gIFwiRm9yZ2VcIixcbiAgXCJGb3JnZXNcIixcbiAgXCJGb3JrXCIsXG4gIFwiRm9ya3NcIixcbiAgXCJGb3J0XCIsXG4gIFwiRnJlZXdheVwiLFxuICBcIkdhcmRlblwiLFxuICBcIkdhcmRlbnNcIixcbiAgXCJHYXRld2F5XCIsXG4gIFwiR2xlblwiLFxuICBcIkdsZW5zXCIsXG4gIFwiR3JlZW5cIixcbiAgXCJHcmVlbnNcIixcbiAgXCJHcm92ZVwiLFxuICBcIkdyb3Zlc1wiLFxuICBcIkhhcmJvclwiLFxuICBcIkhhcmJvcnNcIixcbiAgXCJIYXZlblwiLFxuICBcIkhlaWdodHNcIixcbiAgXCJIaWdod2F5XCIsXG4gIFwiSGlsbFwiLFxuICBcIkhpbGxzXCIsXG4gIFwiSG9sbG93XCIsXG4gIFwiSW5sZXRcIixcbiAgXCJJbmxldFwiLFxuICBcIklzbGFuZFwiLFxuICBcIklzbGFuZFwiLFxuICBcIklzbGFuZHNcIixcbiAgXCJJc2xhbmRzXCIsXG4gIFwiSXNsZVwiLFxuICBcIklzbGVcIixcbiAgXCJKdW5jdGlvblwiLFxuICBcIkp1bmN0aW9uc1wiLFxuICBcIktleVwiLFxuICBcIktleXNcIixcbiAgXCJLbm9sbFwiLFxuICBcIktub2xsc1wiLFxuICBcIkxha2VcIixcbiAgXCJMYWtlc1wiLFxuICBcIkxhbmRcIixcbiAgXCJMYW5kaW5nXCIsXG4gIFwiTGFuZVwiLFxuICBcIkxpZ2h0XCIsXG4gIFwiTGlnaHRzXCIsXG4gIFwiTG9hZlwiLFxuICBcIkxvY2tcIixcbiAgXCJMb2Nrc1wiLFxuICBcIkxvY2tzXCIsXG4gIFwiTG9kZ2VcIixcbiAgXCJMb2RnZVwiLFxuICBcIkxvb3BcIixcbiAgXCJNYWxsXCIsXG4gIFwiTWFub3JcIixcbiAgXCJNYW5vcnNcIixcbiAgXCJNZWFkb3dcIixcbiAgXCJNZWFkb3dzXCIsXG4gIFwiTWV3c1wiLFxuICBcIk1pbGxcIixcbiAgXCJNaWxsc1wiLFxuICBcIk1pc3Npb25cIixcbiAgXCJNaXNzaW9uXCIsXG4gIFwiTW90b3J3YXlcIixcbiAgXCJNb3VudFwiLFxuICBcIk1vdW50YWluXCIsXG4gIFwiTW91bnRhaW5cIixcbiAgXCJNb3VudGFpbnNcIixcbiAgXCJNb3VudGFpbnNcIixcbiAgXCJOZWNrXCIsXG4gIFwiT3JjaGFyZFwiLFxuICBcIk92YWxcIixcbiAgXCJPdmVycGFzc1wiLFxuICBcIlBhcmtcIixcbiAgXCJQYXJrc1wiLFxuICBcIlBhcmt3YXlcIixcbiAgXCJQYXJrd2F5c1wiLFxuICBcIlBhc3NcIixcbiAgXCJQYXNzYWdlXCIsXG4gIFwiUGF0aFwiLFxuICBcIlBpa2VcIixcbiAgXCJQaW5lXCIsXG4gIFwiUGluZXNcIixcbiAgXCJQbGFjZVwiLFxuICBcIlBsYWluXCIsXG4gIFwiUGxhaW5zXCIsXG4gIFwiUGxhaW5zXCIsXG4gIFwiUGxhemFcIixcbiAgXCJQbGF6YVwiLFxuICBcIlBvaW50XCIsXG4gIFwiUG9pbnRzXCIsXG4gIFwiUG9ydFwiLFxuICBcIlBvcnRcIixcbiAgXCJQb3J0c1wiLFxuICBcIlBvcnRzXCIsXG4gIFwiUHJhaXJpZVwiLFxuICBcIlByYWlyaWVcIixcbiAgXCJSYWRpYWxcIixcbiAgXCJSYW1wXCIsXG4gIFwiUmFuY2hcIixcbiAgXCJSYXBpZFwiLFxuICBcIlJhcGlkc1wiLFxuICBcIlJlc3RcIixcbiAgXCJSaWRnZVwiLFxuICBcIlJpZGdlc1wiLFxuICBcIlJpdmVyXCIsXG4gIFwiUm9hZFwiLFxuICBcIlJvYWRcIixcbiAgXCJSb2Fkc1wiLFxuICBcIlJvYWRzXCIsXG4gIFwiUm91dGVcIixcbiAgXCJSb3dcIixcbiAgXCJSdWVcIixcbiAgXCJSdW5cIixcbiAgXCJTaG9hbFwiLFxuICBcIlNob2Fsc1wiLFxuICBcIlNob3JlXCIsXG4gIFwiU2hvcmVzXCIsXG4gIFwiU2t5d2F5XCIsXG4gIFwiU3ByaW5nXCIsXG4gIFwiU3ByaW5nc1wiLFxuICBcIlNwcmluZ3NcIixcbiAgXCJTcHVyXCIsXG4gIFwiU3B1cnNcIixcbiAgXCJTcXVhcmVcIixcbiAgXCJTcXVhcmVcIixcbiAgXCJTcXVhcmVzXCIsXG4gIFwiU3F1YXJlc1wiLFxuICBcIlN0YXRpb25cIixcbiAgXCJTdGF0aW9uXCIsXG4gIFwiU3RyYXZlbnVlXCIsXG4gIFwiU3RyYXZlbnVlXCIsXG4gIFwiU3RyZWFtXCIsXG4gIFwiU3RyZWFtXCIsXG4gIFwiU3RyZWV0XCIsXG4gIFwiU3RyZWV0XCIsXG4gIFwiU3RyZWV0c1wiLFxuICBcIlN1bW1pdFwiLFxuICBcIlN1bW1pdFwiLFxuICBcIlRlcnJhY2VcIixcbiAgXCJUaHJvdWdod2F5XCIsXG4gIFwiVHJhY2VcIixcbiAgXCJUcmFja1wiLFxuICBcIlRyYWZmaWN3YXlcIixcbiAgXCJUcmFpbFwiLFxuICBcIlRyYWlsXCIsXG4gIFwiVHVubmVsXCIsXG4gIFwiVHVubmVsXCIsXG4gIFwiVHVybnBpa2VcIixcbiAgXCJUdXJucGlrZVwiLFxuICBcIlVuZGVycGFzc1wiLFxuICBcIlVuaW9uXCIsXG4gIFwiVW5pb25zXCIsXG4gIFwiVmFsbGV5XCIsXG4gIFwiVmFsbGV5c1wiLFxuICBcIlZpYVwiLFxuICBcIlZpYWR1Y3RcIixcbiAgXCJWaWV3XCIsXG4gIFwiVmlld3NcIixcbiAgXCJWaWxsYWdlXCIsXG4gIFwiVmlsbGFnZVwiLFxuICBcIlZpbGxhZ2VzXCIsXG4gIFwiVmlsbGVcIixcbiAgXCJWaXN0YVwiLFxuICBcIlZpc3RhXCIsXG4gIFwiV2Fsa1wiLFxuICBcIldhbGtzXCIsXG4gIFwiV2FsbFwiLFxuICBcIldheVwiLFxuICBcIldheXNcIixcbiAgXCJXZWxsXCIsXG4gIFwiV2VsbHNcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiUGFjaWZpYy9NaWR3YXlcIixcbiAgXCJQYWNpZmljL1BhZ29fUGFnb1wiLFxuICBcIlBhY2lmaWMvSG9ub2x1bHVcIixcbiAgXCJBbWVyaWNhL0p1bmVhdVwiLFxuICBcIkFtZXJpY2EvTG9zX0FuZ2VsZXNcIixcbiAgXCJBbWVyaWNhL1RpanVhbmFcIixcbiAgXCJBbWVyaWNhL0RlbnZlclwiLFxuICBcIkFtZXJpY2EvUGhvZW5peFwiLFxuICBcIkFtZXJpY2EvQ2hpaHVhaHVhXCIsXG4gIFwiQW1lcmljYS9NYXphdGxhblwiLFxuICBcIkFtZXJpY2EvQ2hpY2Fnb1wiLFxuICBcIkFtZXJpY2EvUmVnaW5hXCIsXG4gIFwiQW1lcmljYS9NZXhpY29fQ2l0eVwiLFxuICBcIkFtZXJpY2EvTWV4aWNvX0NpdHlcIixcbiAgXCJBbWVyaWNhL01vbnRlcnJleVwiLFxuICBcIkFtZXJpY2EvR3VhdGVtYWxhXCIsXG4gIFwiQW1lcmljYS9OZXdfWW9ya1wiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9JbmRpYW5hcG9saXNcIixcbiAgXCJBbWVyaWNhL0JvZ290YVwiLFxuICBcIkFtZXJpY2EvTGltYVwiLFxuICBcIkFtZXJpY2EvTGltYVwiLFxuICBcIkFtZXJpY2EvSGFsaWZheFwiLFxuICBcIkFtZXJpY2EvQ2FyYWNhc1wiLFxuICBcIkFtZXJpY2EvTGFfUGF6XCIsXG4gIFwiQW1lcmljYS9TYW50aWFnb1wiLFxuICBcIkFtZXJpY2EvU3RfSm9obnNcIixcbiAgXCJBbWVyaWNhL1Nhb19QYXVsb1wiLFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL0J1ZW5vc19BaXJlc1wiLFxuICBcIkFtZXJpY2EvR3V5YW5hXCIsXG4gIFwiQW1lcmljYS9Hb2R0aGFiXCIsXG4gIFwiQXRsYW50aWMvU291dGhfR2VvcmdpYVwiLFxuICBcIkF0bGFudGljL0F6b3Jlc1wiLFxuICBcIkF0bGFudGljL0NhcGVfVmVyZGVcIixcbiAgXCJFdXJvcGUvRHVibGluXCIsXG4gIFwiRXVyb3BlL0xvbmRvblwiLFxuICBcIkV1cm9wZS9MaXNib25cIixcbiAgXCJFdXJvcGUvTG9uZG9uXCIsXG4gIFwiQWZyaWNhL0Nhc2FibGFuY2FcIixcbiAgXCJBZnJpY2EvTW9ucm92aWFcIixcbiAgXCJFdGMvVVRDXCIsXG4gIFwiRXVyb3BlL0JlbGdyYWRlXCIsXG4gIFwiRXVyb3BlL0JyYXRpc2xhdmFcIixcbiAgXCJFdXJvcGUvQnVkYXBlc3RcIixcbiAgXCJFdXJvcGUvTGp1YmxqYW5hXCIsXG4gIFwiRXVyb3BlL1ByYWd1ZVwiLFxuICBcIkV1cm9wZS9TYXJhamV2b1wiLFxuICBcIkV1cm9wZS9Ta29wamVcIixcbiAgXCJFdXJvcGUvV2Fyc2F3XCIsXG4gIFwiRXVyb3BlL1phZ3JlYlwiLFxuICBcIkV1cm9wZS9CcnVzc2Vsc1wiLFxuICBcIkV1cm9wZS9Db3BlbmhhZ2VuXCIsXG4gIFwiRXVyb3BlL01hZHJpZFwiLFxuICBcIkV1cm9wZS9QYXJpc1wiLFxuICBcIkV1cm9wZS9BbXN0ZXJkYW1cIixcbiAgXCJFdXJvcGUvQmVybGluXCIsXG4gIFwiRXVyb3BlL0JlcmxpblwiLFxuICBcIkV1cm9wZS9Sb21lXCIsXG4gIFwiRXVyb3BlL1N0b2NraG9sbVwiLFxuICBcIkV1cm9wZS9WaWVubmFcIixcbiAgXCJBZnJpY2EvQWxnaWVyc1wiLFxuICBcIkV1cm9wZS9CdWNoYXJlc3RcIixcbiAgXCJBZnJpY2EvQ2Fpcm9cIixcbiAgXCJFdXJvcGUvSGVsc2lua2lcIixcbiAgXCJFdXJvcGUvS2lldlwiLFxuICBcIkV1cm9wZS9SaWdhXCIsXG4gIFwiRXVyb3BlL1NvZmlhXCIsXG4gIFwiRXVyb3BlL1RhbGxpbm5cIixcbiAgXCJFdXJvcGUvVmlsbml1c1wiLFxuICBcIkV1cm9wZS9BdGhlbnNcIixcbiAgXCJFdXJvcGUvSXN0YW5idWxcIixcbiAgXCJFdXJvcGUvTWluc2tcIixcbiAgXCJBc2lhL0plcnVzYWxlbVwiLFxuICBcIkFmcmljYS9IYXJhcmVcIixcbiAgXCJBZnJpY2EvSm9oYW5uZXNidXJnXCIsXG4gIFwiRXVyb3BlL01vc2Nvd1wiLFxuICBcIkV1cm9wZS9Nb3Njb3dcIixcbiAgXCJFdXJvcGUvTW9zY293XCIsXG4gIFwiQXNpYS9LdXdhaXRcIixcbiAgXCJBc2lhL1JpeWFkaFwiLFxuICBcIkFmcmljYS9OYWlyb2JpXCIsXG4gIFwiQXNpYS9CYWdoZGFkXCIsXG4gIFwiQXNpYS9UZWhyYW5cIixcbiAgXCJBc2lhL011c2NhdFwiLFxuICBcIkFzaWEvTXVzY2F0XCIsXG4gIFwiQXNpYS9CYWt1XCIsXG4gIFwiQXNpYS9UYmlsaXNpXCIsXG4gIFwiQXNpYS9ZZXJldmFuXCIsXG4gIFwiQXNpYS9LYWJ1bFwiLFxuICBcIkFzaWEvWWVrYXRlcmluYnVyZ1wiLFxuICBcIkFzaWEvS2FyYWNoaVwiLFxuICBcIkFzaWEvS2FyYWNoaVwiLFxuICBcIkFzaWEvVGFzaGtlbnRcIixcbiAgXCJBc2lhL0tvbGthdGFcIixcbiAgXCJBc2lhL0tvbGthdGFcIixcbiAgXCJBc2lhL0tvbGthdGFcIixcbiAgXCJBc2lhL0tvbGthdGFcIixcbiAgXCJBc2lhL0thdGhtYW5kdVwiLFxuICBcIkFzaWEvRGhha2FcIixcbiAgXCJBc2lhL0RoYWthXCIsXG4gIFwiQXNpYS9Db2xvbWJvXCIsXG4gIFwiQXNpYS9BbG1hdHlcIixcbiAgXCJBc2lhL05vdm9zaWJpcnNrXCIsXG4gIFwiQXNpYS9SYW5nb29uXCIsXG4gIFwiQXNpYS9CYW5na29rXCIsXG4gIFwiQXNpYS9CYW5na29rXCIsXG4gIFwiQXNpYS9KYWthcnRhXCIsXG4gIFwiQXNpYS9LcmFzbm95YXJza1wiLFxuICBcIkFzaWEvU2hhbmdoYWlcIixcbiAgXCJBc2lhL0Nob25ncWluZ1wiLFxuICBcIkFzaWEvSG9uZ19Lb25nXCIsXG4gIFwiQXNpYS9VcnVtcWlcIixcbiAgXCJBc2lhL0t1YWxhX0x1bXB1clwiLFxuICBcIkFzaWEvU2luZ2Fwb3JlXCIsXG4gIFwiQXNpYS9UYWlwZWlcIixcbiAgXCJBdXN0cmFsaWEvUGVydGhcIixcbiAgXCJBc2lhL0lya3V0c2tcIixcbiAgXCJBc2lhL1VsYWFuYmFhdGFyXCIsXG4gIFwiQXNpYS9TZW91bFwiLFxuICBcIkFzaWEvVG9reW9cIixcbiAgXCJBc2lhL1Rva3lvXCIsXG4gIFwiQXNpYS9Ub2t5b1wiLFxuICBcIkFzaWEvWWFrdXRza1wiLFxuICBcIkF1c3RyYWxpYS9EYXJ3aW5cIixcbiAgXCJBdXN0cmFsaWEvQWRlbGFpZGVcIixcbiAgXCJBdXN0cmFsaWEvTWVsYm91cm5lXCIsXG4gIFwiQXVzdHJhbGlhL01lbGJvdXJuZVwiLFxuICBcIkF1c3RyYWxpYS9TeWRuZXlcIixcbiAgXCJBdXN0cmFsaWEvQnJpc2JhbmVcIixcbiAgXCJBdXN0cmFsaWEvSG9iYXJ0XCIsXG4gIFwiQXNpYS9WbGFkaXZvc3Rva1wiLFxuICBcIlBhY2lmaWMvR3VhbVwiLFxuICBcIlBhY2lmaWMvUG9ydF9Nb3Jlc2J5XCIsXG4gIFwiQXNpYS9NYWdhZGFuXCIsXG4gIFwiQXNpYS9NYWdhZGFuXCIsXG4gIFwiUGFjaWZpYy9Ob3VtZWFcIixcbiAgXCJQYWNpZmljL0ZpamlcIixcbiAgXCJBc2lhL0thbWNoYXRrYVwiLFxuICBcIlBhY2lmaWMvTWFqdXJvXCIsXG4gIFwiUGFjaWZpYy9BdWNrbGFuZFwiLFxuICBcIlBhY2lmaWMvQXVja2xhbmRcIixcbiAgXCJQYWNpZmljL1RvbmdhdGFwdVwiLFxuICBcIlBhY2lmaWMvRmFrYW9mb1wiLFxuICBcIlBhY2lmaWMvQXBpYVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIje05hbWUubmFtZX1cIixcbiAgXCIje0NvbXBhbnkubmFtZX1cIlxuXTtcbiIsInZhciBhcHAgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gYXBwO1xuYXBwLm5hbWUgPSByZXF1aXJlKFwiLi9uYW1lXCIpO1xuYXBwLnZlcnNpb24gPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuYXBwLmF1dGhvciA9IHJlcXVpcmUoXCIuL2F1dGhvclwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiUmVkaG9sZFwiLFxuICBcIlRyZWVmbGV4XCIsXG4gIFwiVHJpcHBsZWRleFwiLFxuICBcIkthbmxhbVwiLFxuICBcIkJpZ3RheFwiLFxuICBcIkRhbHRmcmVzaFwiLFxuICBcIlRvdWdoam95ZmF4XCIsXG4gIFwiTWF0IExhbSBUYW1cIixcbiAgXCJPdGNvbVwiLFxuICBcIlRyZXMtWmFwXCIsXG4gIFwiWS1Tb2xvd2FybVwiLFxuICBcIlRyZXNvbVwiLFxuICBcIlZvbHRzaWxsYW1cIixcbiAgXCJCaW9kZXhcIixcbiAgXCJHcmVlbmxhbVwiLFxuICBcIlZpdmFcIixcbiAgXCJNYXRzb2Z0XCIsXG4gIFwiVGVtcFwiLFxuICBcIlpvb2xhYlwiLFxuICBcIlN1YmluXCIsXG4gIFwiUmFua1wiLFxuICBcIkpvYlwiLFxuICBcIlN0cmluZ3RvdWdoXCIsXG4gIFwiVGluXCIsXG4gIFwiSXRcIixcbiAgXCJIb21lIEluZ1wiLFxuICBcIlphbWl0XCIsXG4gIFwiU29uc2luZ1wiLFxuICBcIktvbmtsYWJcIixcbiAgXCJBbHBoYVwiLFxuICBcIkxhdGx1eFwiLFxuICBcIlZveWF0b3VjaFwiLFxuICBcIkFscGhhemFwXCIsXG4gIFwiSG9sZGxhbWlzXCIsXG4gIFwiWmFhbS1Eb3hcIixcbiAgXCJTdWItRXhcIixcbiAgXCJRdW8gTHV4XCIsXG4gIFwiQmFtaXR5XCIsXG4gIFwiVmVudG9zYW56YXBcIixcbiAgXCJMb3RzdHJpbmdcIixcbiAgXCJIYXRpdHlcIixcbiAgXCJUZW1wc29mdFwiLFxuICBcIk92ZXJob2xkXCIsXG4gIFwiRml4ZmxleFwiLFxuICBcIktvbmtsdXhcIixcbiAgXCJab250cmF4XCIsXG4gIFwiVGFtcGZsZXhcIixcbiAgXCJTcGFuXCIsXG4gIFwiTmFtZml4XCIsXG4gIFwiVHJhbnNjb2ZcIixcbiAgXCJTdGltXCIsXG4gIFwiRml4IFNhblwiLFxuICBcIlNvbmFpclwiLFxuICBcIlN0cm9uZ2hvbGRcIixcbiAgXCJGaW50b25lXCIsXG4gIFwiWS1maW5kXCIsXG4gIFwiT3BlbGFcIixcbiAgXCJMb3RsdXhcIixcbiAgXCJSb25zdHJpbmdcIixcbiAgXCJaYXRoaW5cIixcbiAgXCJEdW9iYW1cIixcbiAgXCJLZXlsZXhcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiMC4jLiNcIixcbiAgXCIwLiMjXCIsXG4gIFwiIy4jI1wiLFxuICBcIiMuI1wiLFxuICBcIiMuIy4jXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIjIwMTEtMTAtMTJcIixcbiAgXCIyMDEyLTExLTEyXCIsXG4gIFwiMjAxNS0xMS0xMVwiLFxuICBcIjIwMTMtOS0xMlwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIxMjM0LTIxMjEtMTIyMS0xMjExXCIsXG4gIFwiMTIxMi0xMjIxLTExMjEtMTIzNFwiLFxuICBcIjEyMTEtMTIyMS0xMjM0LTIyMDFcIixcbiAgXCIxMjI4LTEyMjEtMTIyMS0xNDMxXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcInZpc2FcIixcbiAgXCJtYXN0ZXJjYXJkXCIsXG4gIFwiYW1lcmljYW5leHByZXNzXCIsXG4gIFwiZGlzY292ZXJcIlxuXTtcbiIsInZhciBidXNpbmVzcyA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBidXNpbmVzcztcbmJ1c2luZXNzLmNyZWRpdF9jYXJkX251bWJlcnMgPSByZXF1aXJlKFwiLi9jcmVkaXRfY2FyZF9udW1iZXJzXCIpO1xuYnVzaW5lc3MuY3JlZGl0X2NhcmRfZXhwaXJ5X2RhdGVzID0gcmVxdWlyZShcIi4vY3JlZGl0X2NhcmRfZXhwaXJ5X2RhdGVzXCIpO1xuYnVzaW5lc3MuY3JlZGl0X2NhcmRfdHlwZXMgPSByZXF1aXJlKFwiLi9jcmVkaXRfY2FyZF90eXBlc1wiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiIyMjLSMjIy0jIyMjXCIsXG4gIFwiKCMjIykgIyMjLSMjIyNcIixcbiAgXCIxLSMjIy0jIyMtIyMjI1wiLFxuICBcIiMjIy4jIyMuIyMjI1wiXG5dO1xuIiwidmFyIGNlbGxfcGhvbmUgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gY2VsbF9waG9uZTtcbmNlbGxfcGhvbmUuZm9ybWF0cyA9IHJlcXVpcmUoXCIuL2Zvcm1hdHNcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcInJlZFwiLFxuICBcImdyZWVuXCIsXG4gIFwiYmx1ZVwiLFxuICBcInllbGxvd1wiLFxuICBcInB1cnBsZVwiLFxuICBcIm1pbnQgZ3JlZW5cIixcbiAgXCJ0ZWFsXCIsXG4gIFwid2hpdGVcIixcbiAgXCJibGFja1wiLFxuICBcIm9yYW5nZVwiLFxuICBcInBpbmtcIixcbiAgXCJncmV5XCIsXG4gIFwibWFyb29uXCIsXG4gIFwidmlvbGV0XCIsXG4gIFwidHVycXVvaXNlXCIsXG4gIFwidGFuXCIsXG4gIFwic2t5IGJsdWVcIixcbiAgXCJzYWxtb25cIixcbiAgXCJwbHVtXCIsXG4gIFwib3JjaGlkXCIsXG4gIFwib2xpdmVcIixcbiAgXCJtYWdlbnRhXCIsXG4gIFwibGltZVwiLFxuICBcIml2b3J5XCIsXG4gIFwiaW5kaWdvXCIsXG4gIFwiZ29sZFwiLFxuICBcImZ1Y2hzaWFcIixcbiAgXCJjeWFuXCIsXG4gIFwiYXp1cmVcIixcbiAgXCJsYXZlbmRlclwiLFxuICBcInNpbHZlclwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJCb29rc1wiLFxuICBcIk1vdmllc1wiLFxuICBcIk11c2ljXCIsXG4gIFwiR2FtZXNcIixcbiAgXCJFbGVjdHJvbmljc1wiLFxuICBcIkNvbXB1dGVyc1wiLFxuICBcIkhvbWVcIixcbiAgXCJHYXJkZW5cIixcbiAgXCJUb29sc1wiLFxuICBcIkdyb2NlcnlcIixcbiAgXCJIZWFsdGhcIixcbiAgXCJCZWF1dHlcIixcbiAgXCJUb3lzXCIsXG4gIFwiS2lkc1wiLFxuICBcIkJhYnlcIixcbiAgXCJDbG90aGluZ1wiLFxuICBcIlNob2VzXCIsXG4gIFwiSmV3ZWxlcnlcIixcbiAgXCJTcG9ydHNcIixcbiAgXCJPdXRkb29yc1wiLFxuICBcIkF1dG9tb3RpdmVcIixcbiAgXCJJbmR1c3RyaWFsXCJcbl07XG4iLCJ2YXIgY29tbWVyY2UgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gY29tbWVyY2U7XG5jb21tZXJjZS5jb2xvciA9IHJlcXVpcmUoXCIuL2NvbG9yXCIpO1xuY29tbWVyY2UuZGVwYXJ0bWVudCA9IHJlcXVpcmUoXCIuL2RlcGFydG1lbnRcIik7XG5jb21tZXJjZS5wcm9kdWN0X25hbWUgPSByZXF1aXJlKFwiLi9wcm9kdWN0X25hbWVcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0ge1xuICBcImFkamVjdGl2ZVwiOiBbXG4gICAgXCJTbWFsbFwiLFxuICAgIFwiRXJnb25vbWljXCIsXG4gICAgXCJSdXN0aWNcIixcbiAgICBcIkludGVsbGlnZW50XCIsXG4gICAgXCJHb3JnZW91c1wiLFxuICAgIFwiSW5jcmVkaWJsZVwiLFxuICAgIFwiRmFudGFzdGljXCIsXG4gICAgXCJQcmFjdGljYWxcIixcbiAgICBcIlNsZWVrXCIsXG4gICAgXCJBd2Vzb21lXCIsXG4gICAgXCJHZW5lcmljXCIsXG4gICAgXCJIYW5kY3JhZnRlZFwiLFxuICAgIFwiSGFuZG1hZGVcIixcbiAgICBcIkxpY2Vuc2VkXCIsXG4gICAgXCJSZWZpbmVkXCIsXG4gICAgXCJVbmJyYW5kZWRcIixcbiAgICBcIlRhc3R5XCJcbiAgXSxcbiAgXCJtYXRlcmlhbFwiOiBbXG4gICAgXCJTdGVlbFwiLFxuICAgIFwiV29vZGVuXCIsXG4gICAgXCJDb25jcmV0ZVwiLFxuICAgIFwiUGxhc3RpY1wiLFxuICAgIFwiQ290dG9uXCIsXG4gICAgXCJHcmFuaXRlXCIsXG4gICAgXCJSdWJiZXJcIixcbiAgICBcIk1ldGFsXCIsXG4gICAgXCJTb2Z0XCIsXG4gICAgXCJGcmVzaFwiLFxuICAgIFwiRnJvemVuXCJcbiAgXSxcbiAgXCJwcm9kdWN0XCI6IFtcbiAgICBcIkNoYWlyXCIsXG4gICAgXCJDYXJcIixcbiAgICBcIkNvbXB1dGVyXCIsXG4gICAgXCJLZXlib2FyZFwiLFxuICAgIFwiTW91c2VcIixcbiAgICBcIkJpa2VcIixcbiAgICBcIkJhbGxcIixcbiAgICBcIkdsb3Zlc1wiLFxuICAgIFwiUGFudHNcIixcbiAgICBcIlNoaXJ0XCIsXG4gICAgXCJUYWJsZVwiLFxuICAgIFwiU2hvZXNcIixcbiAgICBcIkhhdFwiLFxuICAgIFwiVG93ZWxzXCIsXG4gICAgXCJTb2FwXCIsXG4gICAgXCJUdW5hXCIsXG4gICAgXCJDaGlja2VuXCIsXG4gICAgXCJGaXNoXCIsXG4gICAgXCJDaGVlc2VcIixcbiAgICBcIkJhY29uXCIsXG4gICAgXCJQaXp6YVwiLFxuICAgIFwiU2FsYWRcIixcbiAgICBcIlNhdXNhZ2VzXCIsXG4gICAgXCJDaGlwc1wiXG4gIF1cbn07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFkYXB0aXZlXCIsXG4gIFwiQWR2YW5jZWRcIixcbiAgXCJBbWVsaW9yYXRlZFwiLFxuICBcIkFzc2ltaWxhdGVkXCIsXG4gIFwiQXV0b21hdGVkXCIsXG4gIFwiQmFsYW5jZWRcIixcbiAgXCJCdXNpbmVzcy1mb2N1c2VkXCIsXG4gIFwiQ2VudHJhbGl6ZWRcIixcbiAgXCJDbG9uZWRcIixcbiAgXCJDb21wYXRpYmxlXCIsXG4gIFwiQ29uZmlndXJhYmxlXCIsXG4gIFwiQ3Jvc3MtZ3JvdXBcIixcbiAgXCJDcm9zcy1wbGF0Zm9ybVwiLFxuICBcIkN1c3RvbWVyLWZvY3VzZWRcIixcbiAgXCJDdXN0b21pemFibGVcIixcbiAgXCJEZWNlbnRyYWxpemVkXCIsXG4gIFwiRGUtZW5naW5lZXJlZFwiLFxuICBcIkRldm9sdmVkXCIsXG4gIFwiRGlnaXRpemVkXCIsXG4gIFwiRGlzdHJpYnV0ZWRcIixcbiAgXCJEaXZlcnNlXCIsXG4gIFwiRG93bi1zaXplZFwiLFxuICBcIkVuaGFuY2VkXCIsXG4gIFwiRW50ZXJwcmlzZS13aWRlXCIsXG4gIFwiRXJnb25vbWljXCIsXG4gIFwiRXhjbHVzaXZlXCIsXG4gIFwiRXhwYW5kZWRcIixcbiAgXCJFeHRlbmRlZFwiLFxuICBcIkZhY2UgdG8gZmFjZVwiLFxuICBcIkZvY3VzZWRcIixcbiAgXCJGcm9udC1saW5lXCIsXG4gIFwiRnVsbHktY29uZmlndXJhYmxlXCIsXG4gIFwiRnVuY3Rpb24tYmFzZWRcIixcbiAgXCJGdW5kYW1lbnRhbFwiLFxuICBcIkZ1dHVyZS1wcm9vZmVkXCIsXG4gIFwiR3Jhc3Mtcm9vdHNcIixcbiAgXCJIb3Jpem9udGFsXCIsXG4gIFwiSW1wbGVtZW50ZWRcIixcbiAgXCJJbm5vdmF0aXZlXCIsXG4gIFwiSW50ZWdyYXRlZFwiLFxuICBcIkludHVpdGl2ZVwiLFxuICBcIkludmVyc2VcIixcbiAgXCJNYW5hZ2VkXCIsXG4gIFwiTWFuZGF0b3J5XCIsXG4gIFwiTW9uaXRvcmVkXCIsXG4gIFwiTXVsdGktY2hhbm5lbGxlZFwiLFxuICBcIk11bHRpLWxhdGVyYWxcIixcbiAgXCJNdWx0aS1sYXllcmVkXCIsXG4gIFwiTXVsdGktdGllcmVkXCIsXG4gIFwiTmV0d29ya2VkXCIsXG4gIFwiT2JqZWN0LWJhc2VkXCIsXG4gIFwiT3Blbi1hcmNoaXRlY3RlZFwiLFxuICBcIk9wZW4tc291cmNlXCIsXG4gIFwiT3BlcmF0aXZlXCIsXG4gIFwiT3B0aW1pemVkXCIsXG4gIFwiT3B0aW9uYWxcIixcbiAgXCJPcmdhbmljXCIsXG4gIFwiT3JnYW5pemVkXCIsXG4gIFwiUGVyc2V2ZXJpbmdcIixcbiAgXCJQZXJzaXN0ZW50XCIsXG4gIFwiUGhhc2VkXCIsXG4gIFwiUG9sYXJpc2VkXCIsXG4gIFwiUHJlLWVtcHRpdmVcIixcbiAgXCJQcm9hY3RpdmVcIixcbiAgXCJQcm9maXQtZm9jdXNlZFwiLFxuICBcIlByb2ZvdW5kXCIsXG4gIFwiUHJvZ3JhbW1hYmxlXCIsXG4gIFwiUHJvZ3Jlc3NpdmVcIixcbiAgXCJQdWJsaWMta2V5XCIsXG4gIFwiUXVhbGl0eS1mb2N1c2VkXCIsXG4gIFwiUmVhY3RpdmVcIixcbiAgXCJSZWFsaWduZWRcIixcbiAgXCJSZS1jb250ZXh0dWFsaXplZFwiLFxuICBcIlJlLWVuZ2luZWVyZWRcIixcbiAgXCJSZWR1Y2VkXCIsXG4gIFwiUmV2ZXJzZS1lbmdpbmVlcmVkXCIsXG4gIFwiUmlnaHQtc2l6ZWRcIixcbiAgXCJSb2J1c3RcIixcbiAgXCJTZWFtbGVzc1wiLFxuICBcIlNlY3VyZWRcIixcbiAgXCJTZWxmLWVuYWJsaW5nXCIsXG4gIFwiU2hhcmFibGVcIixcbiAgXCJTdGFuZC1hbG9uZVwiLFxuICBcIlN0cmVhbWxpbmVkXCIsXG4gIFwiU3dpdGNoYWJsZVwiLFxuICBcIlN5bmNocm9uaXNlZFwiLFxuICBcIlN5bmVyZ2lzdGljXCIsXG4gIFwiU3luZXJnaXplZFwiLFxuICBcIlRlYW0tb3JpZW50ZWRcIixcbiAgXCJUb3RhbFwiLFxuICBcIlRyaXBsZS1idWZmZXJlZFwiLFxuICBcIlVuaXZlcnNhbFwiLFxuICBcIlVwLXNpemVkXCIsXG4gIFwiVXBncmFkYWJsZVwiLFxuICBcIlVzZXItY2VudHJpY1wiLFxuICBcIlVzZXItZnJpZW5kbHlcIixcbiAgXCJWZXJzYXRpbGVcIixcbiAgXCJWaXJ0dWFsXCIsXG4gIFwiVmlzaW9uYXJ5XCIsXG4gIFwiVmlzaW9uLW9yaWVudGVkXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImNsaWNrcy1hbmQtbW9ydGFyXCIsXG4gIFwidmFsdWUtYWRkZWRcIixcbiAgXCJ2ZXJ0aWNhbFwiLFxuICBcInByb2FjdGl2ZVwiLFxuICBcInJvYnVzdFwiLFxuICBcInJldm9sdXRpb25hcnlcIixcbiAgXCJzY2FsYWJsZVwiLFxuICBcImxlYWRpbmctZWRnZVwiLFxuICBcImlubm92YXRpdmVcIixcbiAgXCJpbnR1aXRpdmVcIixcbiAgXCJzdHJhdGVnaWNcIixcbiAgXCJlLWJ1c2luZXNzXCIsXG4gIFwibWlzc2lvbi1jcml0aWNhbFwiLFxuICBcInN0aWNreVwiLFxuICBcIm9uZS10by1vbmVcIixcbiAgXCIyNC83XCIsXG4gIFwiZW5kLXRvLWVuZFwiLFxuICBcImdsb2JhbFwiLFxuICBcIkIyQlwiLFxuICBcIkIyQ1wiLFxuICBcImdyYW51bGFyXCIsXG4gIFwiZnJpY3Rpb25sZXNzXCIsXG4gIFwidmlydHVhbFwiLFxuICBcInZpcmFsXCIsXG4gIFwiZHluYW1pY1wiLFxuICBcIjI0LzM2NVwiLFxuICBcImJlc3Qtb2YtYnJlZWRcIixcbiAgXCJraWxsZXJcIixcbiAgXCJtYWduZXRpY1wiLFxuICBcImJsZWVkaW5nLWVkZ2VcIixcbiAgXCJ3ZWItZW5hYmxlZFwiLFxuICBcImludGVyYWN0aXZlXCIsXG4gIFwiZG90LWNvbVwiLFxuICBcInNleHlcIixcbiAgXCJiYWNrLWVuZFwiLFxuICBcInJlYWwtdGltZVwiLFxuICBcImVmZmljaWVudFwiLFxuICBcImZyb250LWVuZFwiLFxuICBcImRpc3RyaWJ1dGVkXCIsXG4gIFwic2VhbWxlc3NcIixcbiAgXCJleHRlbnNpYmxlXCIsXG4gIFwidHVybi1rZXlcIixcbiAgXCJ3b3JsZC1jbGFzc1wiLFxuICBcIm9wZW4tc291cmNlXCIsXG4gIFwiY3Jvc3MtcGxhdGZvcm1cIixcbiAgXCJjcm9zcy1tZWRpYVwiLFxuICBcInN5bmVyZ2lzdGljXCIsXG4gIFwiYnJpY2tzLWFuZC1jbGlja3NcIixcbiAgXCJvdXQtb2YtdGhlLWJveFwiLFxuICBcImVudGVycHJpc2VcIixcbiAgXCJpbnRlZ3JhdGVkXCIsXG4gIFwiaW1wYWN0ZnVsXCIsXG4gIFwid2lyZWxlc3NcIixcbiAgXCJ0cmFuc3BhcmVudFwiLFxuICBcIm5leHQtZ2VuZXJhdGlvblwiLFxuICBcImN1dHRpbmctZWRnZVwiLFxuICBcInVzZXItY2VudHJpY1wiLFxuICBcInZpc2lvbmFyeVwiLFxuICBcImN1c3RvbWl6ZWRcIixcbiAgXCJ1YmlxdWl0b3VzXCIsXG4gIFwicGx1Zy1hbmQtcGxheVwiLFxuICBcImNvbGxhYm9yYXRpdmVcIixcbiAgXCJjb21wZWxsaW5nXCIsXG4gIFwiaG9saXN0aWNcIixcbiAgXCJyaWNoXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcInN5bmVyZ2llc1wiLFxuICBcIndlYi1yZWFkaW5lc3NcIixcbiAgXCJwYXJhZGlnbXNcIixcbiAgXCJtYXJrZXRzXCIsXG4gIFwicGFydG5lcnNoaXBzXCIsXG4gIFwiaW5mcmFzdHJ1Y3R1cmVzXCIsXG4gIFwicGxhdGZvcm1zXCIsXG4gIFwiaW5pdGlhdGl2ZXNcIixcbiAgXCJjaGFubmVsc1wiLFxuICBcImV5ZWJhbGxzXCIsXG4gIFwiY29tbXVuaXRpZXNcIixcbiAgXCJST0lcIixcbiAgXCJzb2x1dGlvbnNcIixcbiAgXCJlLXRhaWxlcnNcIixcbiAgXCJlLXNlcnZpY2VzXCIsXG4gIFwiYWN0aW9uLWl0ZW1zXCIsXG4gIFwicG9ydGFsc1wiLFxuICBcIm5pY2hlc1wiLFxuICBcInRlY2hub2xvZ2llc1wiLFxuICBcImNvbnRlbnRcIixcbiAgXCJ2b3J0YWxzXCIsXG4gIFwic3VwcGx5LWNoYWluc1wiLFxuICBcImNvbnZlcmdlbmNlXCIsXG4gIFwicmVsYXRpb25zaGlwc1wiLFxuICBcImFyY2hpdGVjdHVyZXNcIixcbiAgXCJpbnRlcmZhY2VzXCIsXG4gIFwiZS1tYXJrZXRzXCIsXG4gIFwiZS1jb21tZXJjZVwiLFxuICBcInN5c3RlbXNcIixcbiAgXCJiYW5kd2lkdGhcIixcbiAgXCJpbmZvbWVkaWFyaWVzXCIsXG4gIFwibW9kZWxzXCIsXG4gIFwibWluZHNoYXJlXCIsXG4gIFwiZGVsaXZlcmFibGVzXCIsXG4gIFwidXNlcnNcIixcbiAgXCJzY2hlbWFzXCIsXG4gIFwibmV0d29ya3NcIixcbiAgXCJhcHBsaWNhdGlvbnNcIixcbiAgXCJtZXRyaWNzXCIsXG4gIFwiZS1idXNpbmVzc1wiLFxuICBcImZ1bmN0aW9uYWxpdGllc1wiLFxuICBcImV4cGVyaWVuY2VzXCIsXG4gIFwid2ViIHNlcnZpY2VzXCIsXG4gIFwibWV0aG9kb2xvZ2llc1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJpbXBsZW1lbnRcIixcbiAgXCJ1dGlsaXplXCIsXG4gIFwiaW50ZWdyYXRlXCIsXG4gIFwic3RyZWFtbGluZVwiLFxuICBcIm9wdGltaXplXCIsXG4gIFwiZXZvbHZlXCIsXG4gIFwidHJhbnNmb3JtXCIsXG4gIFwiZW1icmFjZVwiLFxuICBcImVuYWJsZVwiLFxuICBcIm9yY2hlc3RyYXRlXCIsXG4gIFwibGV2ZXJhZ2VcIixcbiAgXCJyZWludmVudFwiLFxuICBcImFnZ3JlZ2F0ZVwiLFxuICBcImFyY2hpdGVjdFwiLFxuICBcImVuaGFuY2VcIixcbiAgXCJpbmNlbnRpdml6ZVwiLFxuICBcIm1vcnBoXCIsXG4gIFwiZW1wb3dlclwiLFxuICBcImVudmlzaW9uZWVyXCIsXG4gIFwibW9uZXRpemVcIixcbiAgXCJoYXJuZXNzXCIsXG4gIFwiZmFjaWxpdGF0ZVwiLFxuICBcInNlaXplXCIsXG4gIFwiZGlzaW50ZXJtZWRpYXRlXCIsXG4gIFwic3luZXJnaXplXCIsXG4gIFwic3RyYXRlZ2l6ZVwiLFxuICBcImRlcGxveVwiLFxuICBcImJyYW5kXCIsXG4gIFwiZ3Jvd1wiLFxuICBcInRhcmdldFwiLFxuICBcInN5bmRpY2F0ZVwiLFxuICBcInN5bnRoZXNpemVcIixcbiAgXCJkZWxpdmVyXCIsXG4gIFwibWVzaFwiLFxuICBcImluY3ViYXRlXCIsXG4gIFwiZW5nYWdlXCIsXG4gIFwibWF4aW1pemVcIixcbiAgXCJiZW5jaG1hcmtcIixcbiAgXCJleHBlZGl0ZVwiLFxuICBcInJlaW50ZXJtZWRpYXRlXCIsXG4gIFwid2hpdGVib2FyZFwiLFxuICBcInZpc3VhbGl6ZVwiLFxuICBcInJlcHVycG9zZVwiLFxuICBcImlubm92YXRlXCIsXG4gIFwic2NhbGVcIixcbiAgXCJ1bmxlYXNoXCIsXG4gIFwiZHJpdmVcIixcbiAgXCJleHRlbmRcIixcbiAgXCJlbmdpbmVlclwiLFxuICBcInJldm9sdXRpb25pemVcIixcbiAgXCJnZW5lcmF0ZVwiLFxuICBcImV4cGxvaXRcIixcbiAgXCJ0cmFuc2l0aW9uXCIsXG4gIFwiZS1lbmFibGVcIixcbiAgXCJpdGVyYXRlXCIsXG4gIFwiY3VsdGl2YXRlXCIsXG4gIFwibWF0cml4XCIsXG4gIFwicHJvZHVjdGl6ZVwiLFxuICBcInJlZGVmaW5lXCIsXG4gIFwicmVjb250ZXh0dWFsaXplXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIjI0IGhvdXJcIixcbiAgXCIyNC83XCIsXG4gIFwiM3JkIGdlbmVyYXRpb25cIixcbiAgXCI0dGggZ2VuZXJhdGlvblwiLFxuICBcIjV0aCBnZW5lcmF0aW9uXCIsXG4gIFwiNnRoIGdlbmVyYXRpb25cIixcbiAgXCJhY3R1YXRpbmdcIixcbiAgXCJhbmFseXppbmdcIixcbiAgXCJhc3ltbWV0cmljXCIsXG4gIFwiYXN5bmNocm9ub3VzXCIsXG4gIFwiYXR0aXR1ZGUtb3JpZW50ZWRcIixcbiAgXCJiYWNrZ3JvdW5kXCIsXG4gIFwiYmFuZHdpZHRoLW1vbml0b3JlZFwiLFxuICBcImJpLWRpcmVjdGlvbmFsXCIsXG4gIFwiYmlmdXJjYXRlZFwiLFxuICBcImJvdHRvbS1saW5lXCIsXG4gIFwiY2xlYXItdGhpbmtpbmdcIixcbiAgXCJjbGllbnQtZHJpdmVuXCIsXG4gIFwiY2xpZW50LXNlcnZlclwiLFxuICBcImNvaGVyZW50XCIsXG4gIFwiY29oZXNpdmVcIixcbiAgXCJjb21wb3NpdGVcIixcbiAgXCJjb250ZXh0LXNlbnNpdGl2ZVwiLFxuICBcImNvbnRleHR1YWxseS1iYXNlZFwiLFxuICBcImNvbnRlbnQtYmFzZWRcIixcbiAgXCJkZWRpY2F0ZWRcIixcbiAgXCJkZW1hbmQtZHJpdmVuXCIsXG4gIFwiZGlkYWN0aWNcIixcbiAgXCJkaXJlY3Rpb25hbFwiLFxuICBcImRpc2NyZXRlXCIsXG4gIFwiZGlzaW50ZXJtZWRpYXRlXCIsXG4gIFwiZHluYW1pY1wiLFxuICBcImVjby1jZW50cmljXCIsXG4gIFwiZW1wb3dlcmluZ1wiLFxuICBcImVuY29tcGFzc2luZ1wiLFxuICBcImV2ZW4ta2VlbGVkXCIsXG4gIFwiZXhlY3V0aXZlXCIsXG4gIFwiZXhwbGljaXRcIixcbiAgXCJleHVkaW5nXCIsXG4gIFwiZmF1bHQtdG9sZXJhbnRcIixcbiAgXCJmb3JlZ3JvdW5kXCIsXG4gIFwiZnJlc2gtdGhpbmtpbmdcIixcbiAgXCJmdWxsLXJhbmdlXCIsXG4gIFwiZ2xvYmFsXCIsXG4gIFwiZ3JpZC1lbmFibGVkXCIsXG4gIFwiaGV1cmlzdGljXCIsXG4gIFwiaGlnaC1sZXZlbFwiLFxuICBcImhvbGlzdGljXCIsXG4gIFwiaG9tb2dlbmVvdXNcIixcbiAgXCJodW1hbi1yZXNvdXJjZVwiLFxuICBcImh5YnJpZFwiLFxuICBcImltcGFjdGZ1bFwiLFxuICBcImluY3JlbWVudGFsXCIsXG4gIFwiaW50YW5naWJsZVwiLFxuICBcImludGVyYWN0aXZlXCIsXG4gIFwiaW50ZXJtZWRpYXRlXCIsXG4gIFwibGVhZGluZyBlZGdlXCIsXG4gIFwibG9jYWxcIixcbiAgXCJsb2dpc3RpY2FsXCIsXG4gIFwibWF4aW1pemVkXCIsXG4gIFwibWV0aG9kaWNhbFwiLFxuICBcIm1pc3Npb24tY3JpdGljYWxcIixcbiAgXCJtb2JpbGVcIixcbiAgXCJtb2R1bGFyXCIsXG4gIFwibW90aXZhdGluZ1wiLFxuICBcIm11bHRpbWVkaWFcIixcbiAgXCJtdWx0aS1zdGF0ZVwiLFxuICBcIm11bHRpLXRhc2tpbmdcIixcbiAgXCJuYXRpb25hbFwiLFxuICBcIm5lZWRzLWJhc2VkXCIsXG4gIFwibmV1dHJhbFwiLFxuICBcIm5leHQgZ2VuZXJhdGlvblwiLFxuICBcIm5vbi12b2xhdGlsZVwiLFxuICBcIm9iamVjdC1vcmllbnRlZFwiLFxuICBcIm9wdGltYWxcIixcbiAgXCJvcHRpbWl6aW5nXCIsXG4gIFwicmFkaWNhbFwiLFxuICBcInJlYWwtdGltZVwiLFxuICBcInJlY2lwcm9jYWxcIixcbiAgXCJyZWdpb25hbFwiLFxuICBcInJlc3BvbnNpdmVcIixcbiAgXCJzY2FsYWJsZVwiLFxuICBcInNlY29uZGFyeVwiLFxuICBcInNvbHV0aW9uLW9yaWVudGVkXCIsXG4gIFwic3RhYmxlXCIsXG4gIFwic3RhdGljXCIsXG4gIFwic3lzdGVtYXRpY1wiLFxuICBcInN5c3RlbWljXCIsXG4gIFwic3lzdGVtLXdvcnRoeVwiLFxuICBcInRhbmdpYmxlXCIsXG4gIFwidGVydGlhcnlcIixcbiAgXCJ0cmFuc2l0aW9uYWxcIixcbiAgXCJ1bmlmb3JtXCIsXG4gIFwidXB3YXJkLXRyZW5kaW5nXCIsXG4gIFwidXNlci1mYWNpbmdcIixcbiAgXCJ2YWx1ZS1hZGRlZFwiLFxuICBcIndlYi1lbmFibGVkXCIsXG4gIFwid2VsbC1tb2R1bGF0ZWRcIixcbiAgXCJ6ZXJvIGFkbWluaXN0cmF0aW9uXCIsXG4gIFwiemVybyBkZWZlY3RcIixcbiAgXCJ6ZXJvIHRvbGVyYW5jZVwiXG5dO1xuIiwidmFyIGNvbXBhbnkgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gY29tcGFueTtcbmNvbXBhbnkuc3VmZml4ID0gcmVxdWlyZShcIi4vc3VmZml4XCIpO1xuY29tcGFueS5hZGplY3RpdmUgPSByZXF1aXJlKFwiLi9hZGplY3RpdmVcIik7XG5jb21wYW55LmRlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi9kZXNjcmlwdG9yXCIpO1xuY29tcGFueS5ub3VuID0gcmVxdWlyZShcIi4vbm91blwiKTtcbmNvbXBhbnkuYnNfdmVyYiA9IHJlcXVpcmUoXCIuL2JzX3ZlcmJcIik7XG5jb21wYW55LmJzX2FkamVjdGl2ZSA9IHJlcXVpcmUoXCIuL2JzX2FkamVjdGl2ZVwiKTtcbmNvbXBhbnkuYnNfbm91biA9IHJlcXVpcmUoXCIuL2JzX25vdW5cIik7XG5jb21wYW55Lm5hbWUgPSByZXF1aXJlKFwiLi9uYW1lXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIje05hbWUubGFzdF9uYW1lfSAje3N1ZmZpeH1cIixcbiAgXCIje05hbWUubGFzdF9uYW1lfS0je05hbWUubGFzdF9uYW1lfVwiLFxuICBcIiN7TmFtZS5sYXN0X25hbWV9LCAje05hbWUubGFzdF9uYW1lfSBhbmQgI3tOYW1lLmxhc3RfbmFtZX1cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiYWJpbGl0eVwiLFxuICBcImFjY2Vzc1wiLFxuICBcImFkYXB0ZXJcIixcbiAgXCJhbGdvcml0aG1cIixcbiAgXCJhbGxpYW5jZVwiLFxuICBcImFuYWx5emVyXCIsXG4gIFwiYXBwbGljYXRpb25cIixcbiAgXCJhcHByb2FjaFwiLFxuICBcImFyY2hpdGVjdHVyZVwiLFxuICBcImFyY2hpdmVcIixcbiAgXCJhcnRpZmljaWFsIGludGVsbGlnZW5jZVwiLFxuICBcImFycmF5XCIsXG4gIFwiYXR0aXR1ZGVcIixcbiAgXCJiZW5jaG1hcmtcIixcbiAgXCJidWRnZXRhcnkgbWFuYWdlbWVudFwiLFxuICBcImNhcGFiaWxpdHlcIixcbiAgXCJjYXBhY2l0eVwiLFxuICBcImNoYWxsZW5nZVwiLFxuICBcImNpcmN1aXRcIixcbiAgXCJjb2xsYWJvcmF0aW9uXCIsXG4gIFwiY29tcGxleGl0eVwiLFxuICBcImNvbmNlcHRcIixcbiAgXCJjb25nbG9tZXJhdGlvblwiLFxuICBcImNvbnRpbmdlbmN5XCIsXG4gIFwiY29yZVwiLFxuICBcImN1c3RvbWVyIGxveWFsdHlcIixcbiAgXCJkYXRhYmFzZVwiLFxuICBcImRhdGEtd2FyZWhvdXNlXCIsXG4gIFwiZGVmaW5pdGlvblwiLFxuICBcImVtdWxhdGlvblwiLFxuICBcImVuY29kaW5nXCIsXG4gIFwiZW5jcnlwdGlvblwiLFxuICBcImV4dHJhbmV0XCIsXG4gIFwiZmlybXdhcmVcIixcbiAgXCJmbGV4aWJpbGl0eVwiLFxuICBcImZvY3VzIGdyb3VwXCIsXG4gIFwiZm9yZWNhc3RcIixcbiAgXCJmcmFtZVwiLFxuICBcImZyYW1ld29ya1wiLFxuICBcImZ1bmN0aW9uXCIsXG4gIFwiZnVuY3Rpb25hbGl0aWVzXCIsXG4gIFwiR3JhcGhpYyBJbnRlcmZhY2VcIixcbiAgXCJncm91cHdhcmVcIixcbiAgXCJHcmFwaGljYWwgVXNlciBJbnRlcmZhY2VcIixcbiAgXCJoYXJkd2FyZVwiLFxuICBcImhlbHAtZGVza1wiLFxuICBcImhpZXJhcmNoeVwiLFxuICBcImh1YlwiLFxuICBcImltcGxlbWVudGF0aW9uXCIsXG4gIFwiaW5mby1tZWRpYXJpZXNcIixcbiAgXCJpbmZyYXN0cnVjdHVyZVwiLFxuICBcImluaXRpYXRpdmVcIixcbiAgXCJpbnN0YWxsYXRpb25cIixcbiAgXCJpbnN0cnVjdGlvbiBzZXRcIixcbiAgXCJpbnRlcmZhY2VcIixcbiAgXCJpbnRlcm5ldCBzb2x1dGlvblwiLFxuICBcImludHJhbmV0XCIsXG4gIFwia25vd2xlZGdlIHVzZXJcIixcbiAgXCJrbm93bGVkZ2UgYmFzZVwiLFxuICBcImxvY2FsIGFyZWEgbmV0d29ya1wiLFxuICBcImxldmVyYWdlXCIsXG4gIFwibWF0cmljZXNcIixcbiAgXCJtYXRyaXhcIixcbiAgXCJtZXRob2RvbG9neVwiLFxuICBcIm1pZGRsZXdhcmVcIixcbiAgXCJtaWdyYXRpb25cIixcbiAgXCJtb2RlbFwiLFxuICBcIm1vZGVyYXRvclwiLFxuICBcIm1vbml0b3JpbmdcIixcbiAgXCJtb3JhdG9yaXVtXCIsXG4gIFwibmV1cmFsLW5ldFwiLFxuICBcIm9wZW4gYXJjaGl0ZWN0dXJlXCIsXG4gIFwib3BlbiBzeXN0ZW1cIixcbiAgXCJvcmNoZXN0cmF0aW9uXCIsXG4gIFwicGFyYWRpZ21cIixcbiAgXCJwYXJhbGxlbGlzbVwiLFxuICBcInBvbGljeVwiLFxuICBcInBvcnRhbFwiLFxuICBcInByaWNpbmcgc3RydWN0dXJlXCIsXG4gIFwicHJvY2VzcyBpbXByb3ZlbWVudFwiLFxuICBcInByb2R1Y3RcIixcbiAgXCJwcm9kdWN0aXZpdHlcIixcbiAgXCJwcm9qZWN0XCIsXG4gIFwicHJvamVjdGlvblwiLFxuICBcInByb3RvY29sXCIsXG4gIFwic2VjdXJlZCBsaW5lXCIsXG4gIFwic2VydmljZS1kZXNrXCIsXG4gIFwic29mdHdhcmVcIixcbiAgXCJzb2x1dGlvblwiLFxuICBcInN0YW5kYXJkaXphdGlvblwiLFxuICBcInN0cmF0ZWd5XCIsXG4gIFwic3RydWN0dXJlXCIsXG4gIFwic3VjY2Vzc1wiLFxuICBcInN1cGVyc3RydWN0dXJlXCIsXG4gIFwic3VwcG9ydFwiLFxuICBcInN5bmVyZ3lcIixcbiAgXCJzeXN0ZW0gZW5naW5lXCIsXG4gIFwidGFzay1mb3JjZVwiLFxuICBcInRocm91Z2hwdXRcIixcbiAgXCJ0aW1lLWZyYW1lXCIsXG4gIFwidG9vbHNldFwiLFxuICBcInV0aWxpc2F0aW9uXCIsXG4gIFwid2Vic2l0ZVwiLFxuICBcIndvcmtmb3JjZVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJJbmNcIixcbiAgXCJhbmQgU29uc1wiLFxuICBcIkxMQ1wiLFxuICBcIkdyb3VwXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi8zNCMjLSMjIyMjIy0jIyMjTC9cIixcbiAgXCIvMzcjIy0jIyMjIyMtIyMjI0wvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi8zMFswLTVdIy0jIyMjIyMtIyMjTC9cIixcbiAgXCIvMzY4Iy0jIyMjIyMtIyMjTC9cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzYwMTEtIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY1IyMtIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY0WzQtOV0jLSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi82MDExLTYyIyMtIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY1IyMtNjIjIy0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvNjRbNC05XSMtNjIjIy0jIyMjLSMjIyMtIyMjTC9cIlxuXTtcbiIsInZhciBjcmVkaXRfY2FyZCA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBjcmVkaXRfY2FyZDtcbmNyZWRpdF9jYXJkLnZpc2EgPSByZXF1aXJlKFwiLi92aXNhXCIpO1xuY3JlZGl0X2NhcmQubWFzdGVyY2FyZCA9IHJlcXVpcmUoXCIuL21hc3RlcmNhcmRcIik7XG5jcmVkaXRfY2FyZC5kaXNjb3ZlciA9IHJlcXVpcmUoXCIuL2Rpc2NvdmVyXCIpO1xuY3JlZGl0X2NhcmQuYW1lcmljYW5fZXhwcmVzcyA9IHJlcXVpcmUoXCIuL2FtZXJpY2FuX2V4cHJlc3NcIik7XG5jcmVkaXRfY2FyZC5kaW5lcnNfY2x1YiA9IHJlcXVpcmUoXCIuL2RpbmVyc19jbHViXCIpO1xuY3JlZGl0X2NhcmQuamNiID0gcmVxdWlyZShcIi4vamNiXCIpO1xuY3JlZGl0X2NhcmQuc3dpdGNoID0gcmVxdWlyZShcIi4vc3dpdGNoXCIpO1xuY3JlZGl0X2NhcmQuc29sbyA9IHJlcXVpcmUoXCIuL3NvbG9cIik7XG5jcmVkaXRfY2FyZC5tYWVzdHJvID0gcmVxdWlyZShcIi4vbWFlc3Ryb1wiKTtcbmNyZWRpdF9jYXJkLmxhc2VyID0gcmVxdWlyZShcIi4vbGFzZXJcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi8zNTI4LSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi8zNTI5LSMjIyMtIyMjIy0jIyNML1wiLFxuICBcIi8zNVszLThdIy0jIyMjLSMjIyMtIyMjTC9cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzYzMDQjIyMjIyMjIyMjI0wvXCIsXG4gIFwiLzY3MDYjIyMjIyMjIyMjI0wvXCIsXG4gIFwiLzY3NzEjIyMjIyMjIyMjI0wvXCIsXG4gIFwiLzY3MDkjIyMjIyMjIyMjI0wvXCIsXG4gIFwiLzYzMDQjIyMjIyMjIyN7NSw2fUwvXCIsXG4gIFwiLzY3MDYjIyMjIyMjIyN7NSw2fUwvXCIsXG4gIFwiLzY3NzEjIyMjIyMjIyN7NSw2fUwvXCIsXG4gIFwiLzY3MDkjIyMjIyMjIyN7NSw2fUwvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi81MCN7OSwxNn1ML1wiLFxuICBcIi81WzYtOF0jezksMTZ9TC9cIixcbiAgXCIvNTYjI3s5LDE2fUwvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi81WzEtNV0jIy0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvNjc3MS04OSMjLSMjIyMtIyMjTC9cIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiLzY3NjctIyMjIy0jIyMjLSMjI0wvXCIsXG4gIFwiLzY3NjctIyMjIy0jIyMjLSMjIyMtI0wvXCIsXG4gIFwiLzY3NjctIyMjIy0jIyMjLSMjIyMtIyNML1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIvNjc1OS0jIyMjLSMjIyMtIyMjTC9cIixcbiAgXCIvNjc1OS0jIyMjLSMjIyMtIyMjIy0jTC9cIixcbiAgXCIvNjc1OS0jIyMjLSMjIyMtIyMjIy0jI0wvXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIi80IyMjIyMjIyMjIyNML1wiLFxuICBcIi80IyMjLSMjIyMtIyMjIy0jIyNML1wiXG5dO1xuIiwidmFyIGRhdGUgPSB7fTtcbm1vZHVsZVtcImV4cG9ydHNcIl0gPSBkYXRlO1xuZGF0ZS5tb250aCA9IHJlcXVpcmUoXCIuL21vbnRoXCIpO1xuZGF0ZS53ZWVrZGF5ID0gcmVxdWlyZShcIi4vd2Vla2RheVwiKTtcbiIsIi8vIFNvdXJjZTogaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvdHJhYy9icm93c2VyL3RhZ3MvcmVsZWFzZS0yNy9jb21tb24vbWFpbi9lbi54bWwjTDE3OTlcbm1vZHVsZVtcImV4cG9ydHNcIl0gPSB7XG4gIHdpZGU6IFtcbiAgICBcIkphbnVhcnlcIixcbiAgICBcIkZlYnJ1YXJ5XCIsXG4gICAgXCJNYXJjaFwiLFxuICAgIFwiQXByaWxcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuZVwiLFxuICAgIFwiSnVseVwiLFxuICAgIFwiQXVndXN0XCIsXG4gICAgXCJTZXB0ZW1iZXJcIixcbiAgICBcIk9jdG9iZXJcIixcbiAgICBcIk5vdmVtYmVyXCIsXG4gICAgXCJEZWNlbWJlclwiXG4gIF0sXG4gIC8vIFByb3BlcnR5IFwid2lkZV9jb250ZXh0XCIgaXMgb3B0aW9uYWwsIGlmIG5vdCBzZXQgdGhlbiBcIndpZGVcIiB3aWxsIGJlIHVzZWQgaW5zdGVhZFxuICAvLyBJdCBpcyB1c2VkIHRvIHNwZWNpZnkgYSB3b3JkIGluIGNvbnRleHQsIHdoaWNoIG1heSBkaWZmZXIgZnJvbSBhIHN0YW5kLWFsb25lIHdvcmRcbiAgd2lkZV9jb250ZXh0OiBbXG4gICAgXCJKYW51YXJ5XCIsXG4gICAgXCJGZWJydWFyeVwiLFxuICAgIFwiTWFyY2hcIixcbiAgICBcIkFwcmlsXCIsXG4gICAgXCJNYXlcIixcbiAgICBcIkp1bmVcIixcbiAgICBcIkp1bHlcIixcbiAgICBcIkF1Z3VzdFwiLFxuICAgIFwiU2VwdGVtYmVyXCIsXG4gICAgXCJPY3RvYmVyXCIsXG4gICAgXCJOb3ZlbWJlclwiLFxuICAgIFwiRGVjZW1iZXJcIlxuICBdLFxuICBhYmJyOiBbXG4gICAgXCJKYW5cIixcbiAgICBcIkZlYlwiLFxuICAgIFwiTWFyXCIsXG4gICAgXCJBcHJcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuXCIsXG4gICAgXCJKdWxcIixcbiAgICBcIkF1Z1wiLFxuICAgIFwiU2VwXCIsXG4gICAgXCJPY3RcIixcbiAgICBcIk5vdlwiLFxuICAgIFwiRGVjXCJcbiAgXSxcbiAgLy8gUHJvcGVydHkgXCJhYmJyX2NvbnRleHRcIiBpcyBvcHRpb25hbCwgaWYgbm90IHNldCB0aGVuIFwiYWJiclwiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkXG4gIC8vIEl0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIHdvcmQgaW4gY29udGV4dCwgd2hpY2ggbWF5IGRpZmZlciBmcm9tIGEgc3RhbmQtYWxvbmUgd29yZFxuICBhYmJyX2NvbnRleHQ6IFtcbiAgICBcIkphblwiLFxuICAgIFwiRmViXCIsXG4gICAgXCJNYXJcIixcbiAgICBcIkFwclwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5cIixcbiAgICBcIkp1bFwiLFxuICAgIFwiQXVnXCIsXG4gICAgXCJTZXBcIixcbiAgICBcIk9jdFwiLFxuICAgIFwiTm92XCIsXG4gICAgXCJEZWNcIlxuICBdXG59O1xuIiwiLy8gU291cmNlOiBodHRwOi8vdW5pY29kZS5vcmcvY2xkci90cmFjL2Jyb3dzZXIvdGFncy9yZWxlYXNlLTI3L2NvbW1vbi9tYWluL2VuLnhtbCNMMTg0N1xubW9kdWxlW1wiZXhwb3J0c1wiXSA9IHtcbiAgd2lkZTogW1xuICAgIFwiU3VuZGF5XCIsXG4gICAgXCJNb25kYXlcIixcbiAgICBcIlR1ZXNkYXlcIixcbiAgICBcIldlZG5lc2RheVwiLFxuICAgIFwiVGh1cnNkYXlcIixcbiAgICBcIkZyaWRheVwiLFxuICAgIFwiU2F0dXJkYXlcIlxuICBdLFxuICAvLyBQcm9wZXJ0eSBcIndpZGVfY29udGV4dFwiIGlzIG9wdGlvbmFsLCBpZiBub3Qgc2V0IHRoZW4gXCJ3aWRlXCIgd2lsbCBiZSB1c2VkIGluc3RlYWRcbiAgLy8gSXQgaXMgdXNlZCB0byBzcGVjaWZ5IGEgd29yZCBpbiBjb250ZXh0LCB3aGljaCBtYXkgZGlmZmVyIGZyb20gYSBzdGFuZC1hbG9uZSB3b3JkXG4gIHdpZGVfY29udGV4dDogW1xuICAgIFwiU3VuZGF5XCIsXG4gICAgXCJNb25kYXlcIixcbiAgICBcIlR1ZXNkYXlcIixcbiAgICBcIldlZG5lc2RheVwiLFxuICAgIFwiVGh1cnNkYXlcIixcbiAgICBcIkZyaWRheVwiLFxuICAgIFwiU2F0dXJkYXlcIlxuICBdLFxuICBhYmJyOiBbXG4gICAgXCJTdW5cIixcbiAgICBcIk1vblwiLFxuICAgIFwiVHVlXCIsXG4gICAgXCJXZWRcIixcbiAgICBcIlRodVwiLFxuICAgIFwiRnJpXCIsXG4gICAgXCJTYXRcIlxuICBdLFxuICAvLyBQcm9wZXJ0eSBcImFiYnJfY29udGV4dFwiIGlzIG9wdGlvbmFsLCBpZiBub3Qgc2V0IHRoZW4gXCJhYmJyXCIgd2lsbCBiZSB1c2VkIGluc3RlYWRcbiAgLy8gSXQgaXMgdXNlZCB0byBzcGVjaWZ5IGEgd29yZCBpbiBjb250ZXh0LCB3aGljaCBtYXkgZGlmZmVyIGZyb20gYSBzdGFuZC1hbG9uZSB3b3JkXG4gIGFiYnJfY29udGV4dDogW1xuICAgIFwiU3VuXCIsXG4gICAgXCJNb25cIixcbiAgICBcIlR1ZVwiLFxuICAgIFwiV2VkXCIsXG4gICAgXCJUaHVcIixcbiAgICBcIkZyaVwiLFxuICAgIFwiU2F0XCJcbiAgXVxufTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiQ2hlY2tpbmdcIixcbiAgXCJTYXZpbmdzXCIsXG4gIFwiTW9uZXkgTWFya2V0XCIsXG4gIFwiSW52ZXN0bWVudFwiLFxuICBcIkhvbWUgTG9hblwiLFxuICBcIkNyZWRpdCBDYXJkXCIsXG4gIFwiQXV0byBMb2FuXCIsXG4gIFwiUGVyc29uYWwgTG9hblwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IHtcbiAgXCJVQUUgRGlyaGFtXCI6IHtcbiAgICBcImNvZGVcIjogXCJBRURcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQWZnaGFuaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQUZOXCIsXG4gICAgXCJzeW1ib2xcIjogXCLYi1wiXG4gIH0sXG4gIFwiTGVrXCI6IHtcbiAgICBcImNvZGVcIjogXCJBTExcIixcbiAgICBcInN5bWJvbFwiOiBcIkxla1wiXG4gIH0sXG4gIFwiQXJtZW5pYW4gRHJhbVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQU1EXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk5ldGhlcmxhbmRzIEFudGlsbGlhbiBHdWlsZGVyXCI6IHtcbiAgICBcImNvZGVcIjogXCJBTkdcIixcbiAgICBcInN5bWJvbFwiOiBcIsaSXCJcbiAgfSxcbiAgXCJLd2FuemFcIjoge1xuICAgIFwiY29kZVwiOiBcIkFPQVwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJBcmdlbnRpbmUgUGVzb1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQVJTXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJBdXN0cmFsaWFuIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQVVEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJBcnViYW4gR3VpbGRlclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQVdHXCIsXG4gICAgXCJzeW1ib2xcIjogXCLGklwiXG4gIH0sXG4gIFwiQXplcmJhaWphbmlhbiBNYW5hdFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQVpOXCIsXG4gICAgXCJzeW1ib2xcIjogXCLQvNCw0L1cIlxuICB9LFxuICBcIkNvbnZlcnRpYmxlIE1hcmtzXCI6IHtcbiAgICBcImNvZGVcIjogXCJCQU1cIixcbiAgICBcInN5bWJvbFwiOiBcIktNXCJcbiAgfSxcbiAgXCJCYXJiYWRvcyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkJCRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiVGFrYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQkRUXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkJ1bGdhcmlhbiBMZXZcIjoge1xuICAgIFwiY29kZVwiOiBcIkJHTlwiLFxuICAgIFwic3ltYm9sXCI6IFwi0LvQslwiXG4gIH0sXG4gIFwiQmFocmFpbmkgRGluYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkJIRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJCdXJ1bmRpIEZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJCSUZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQmVybXVkaWFuIERvbGxhciAoY3VzdG9tYXJpbHkga25vd24gYXMgQmVybXVkYSBEb2xsYXIpXCI6IHtcbiAgICBcImNvZGVcIjogXCJCTURcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkJydW5laSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkJORFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiQm9saXZpYW5vIE12ZG9sXCI6IHtcbiAgICBcImNvZGVcIjogXCJCT0IgQk9WXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkYlwiXG4gIH0sXG4gIFwiQnJhemlsaWFuIFJlYWxcIjoge1xuICAgIFwiY29kZVwiOiBcIkJSTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiUiRcIlxuICB9LFxuICBcIkJhaGFtaWFuIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQlNEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJQdWxhXCI6IHtcbiAgICBcImNvZGVcIjogXCJCV1BcIixcbiAgICBcInN5bWJvbFwiOiBcIlBcIlxuICB9LFxuICBcIkJlbGFydXNzaWFuIFJ1YmxlXCI6IHtcbiAgICBcImNvZGVcIjogXCJCWVJcIixcbiAgICBcInN5bWJvbFwiOiBcInAuXCJcbiAgfSxcbiAgXCJCZWxpemUgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJCWkRcIixcbiAgICBcInN5bWJvbFwiOiBcIkJaJFwiXG4gIH0sXG4gIFwiQ2FuYWRpYW4gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJDQURcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkNvbmdvbGVzZSBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ0RGXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlN3aXNzIEZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJDSEZcIixcbiAgICBcInN5bWJvbFwiOiBcIkNIRlwiXG4gIH0sXG4gIFwiQ2hpbGVhbiBQZXNvIFVuaWRhZGVzIGRlIGZvbWVudG9cIjoge1xuICAgIFwiY29kZVwiOiBcIkNMUCBDTEZcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIll1YW4gUmVubWluYmlcIjoge1xuICAgIFwiY29kZVwiOiBcIkNOWVwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqVcIlxuICB9LFxuICBcIkNvbG9tYmlhbiBQZXNvIFVuaWRhZCBkZSBWYWxvciBSZWFsXCI6IHtcbiAgICBcImNvZGVcIjogXCJDT1AgQ09VXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJDb3N0YSBSaWNhbiBDb2xvblwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ1JDXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqFcIlxuICB9LFxuICBcIkN1YmFuIFBlc28gUGVzbyBDb252ZXJ0aWJsZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ1VQIENVQ1wiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKxXCJcbiAgfSxcbiAgXCJDYXBlIFZlcmRlIEVzY3Vkb1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ1ZFXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkN6ZWNoIEtvcnVuYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiQ1pLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJLxI1cIlxuICB9LFxuICBcIkRqaWJvdXRpIEZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJESkZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRGFuaXNoIEtyb25lXCI6IHtcbiAgICBcImNvZGVcIjogXCJES0tcIixcbiAgICBcInN5bWJvbFwiOiBcImtyXCJcbiAgfSxcbiAgXCJEb21pbmljYW4gUGVzb1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiRE9QXCIsXG4gICAgXCJzeW1ib2xcIjogXCJSRCRcIlxuICB9LFxuICBcIkFsZ2VyaWFuIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJEWkRcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiS3Jvb25cIjoge1xuICAgIFwiY29kZVwiOiBcIkVFS1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJFZ3lwdGlhbiBQb3VuZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiRUdQXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCo1wiXG4gIH0sXG4gIFwiTmFrZmFcIjoge1xuICAgIFwiY29kZVwiOiBcIkVSTlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJFdGhpb3BpYW4gQmlyclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiRVRCXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkV1cm9cIjoge1xuICAgIFwiY29kZVwiOiBcIkVVUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKsXCJcbiAgfSxcbiAgXCJGaWppIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiRkpEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJGYWxrbGFuZCBJc2xhbmRzIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJGS1BcIixcbiAgICBcInN5bWJvbFwiOiBcIsKjXCJcbiAgfSxcbiAgXCJQb3VuZCBTdGVybGluZ1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiR0JQXCIsXG4gICAgXCJzeW1ib2xcIjogXCLCo1wiXG4gIH0sXG4gIFwiTGFyaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiR0VMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkNlZGlcIjoge1xuICAgIFwiY29kZVwiOiBcIkdIU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJHaWJyYWx0YXIgUG91bmRcIjoge1xuICAgIFwiY29kZVwiOiBcIkdJUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqNcIlxuICB9LFxuICBcIkRhbGFzaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiR01EXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkd1aW5lYSBGcmFuY1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiR05GXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlF1ZXR6YWxcIjoge1xuICAgIFwiY29kZVwiOiBcIkdUUVwiLFxuICAgIFwic3ltYm9sXCI6IFwiUVwiXG4gIH0sXG4gIFwiR3V5YW5hIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiR1lEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJIb25nIEtvbmcgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJIS0RcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkxlbXBpcmFcIjoge1xuICAgIFwiY29kZVwiOiBcIkhOTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiTFwiXG4gIH0sXG4gIFwiQ3JvYXRpYW4gS3VuYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSFJLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJrblwiXG4gIH0sXG4gIFwiR291cmRlIFVTIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSFRHIFVTRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJGb3JpbnRcIjoge1xuICAgIFwiY29kZVwiOiBcIkhVRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiRnRcIlxuICB9LFxuICBcIlJ1cGlhaFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSURSXCIsXG4gICAgXCJzeW1ib2xcIjogXCJScFwiXG4gIH0sXG4gIFwiTmV3IElzcmFlbGkgU2hlcWVsXCI6IHtcbiAgICBcImNvZGVcIjogXCJJTFNcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqlwiXG4gIH0sXG4gIFwiSW5kaWFuIFJ1cGVlXCI6IHtcbiAgICBcImNvZGVcIjogXCJJTlJcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiSW5kaWFuIFJ1cGVlIE5ndWx0cnVtXCI6IHtcbiAgICBcImNvZGVcIjogXCJJTlIgQlROXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIklyYXFpIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJJUURcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiSXJhbmlhbiBSaWFsXCI6IHtcbiAgICBcImNvZGVcIjogXCJJUlJcIixcbiAgICBcInN5bWJvbFwiOiBcIu+3vFwiXG4gIH0sXG4gIFwiSWNlbGFuZCBLcm9uYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiSVNLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJrclwiXG4gIH0sXG4gIFwiSmFtYWljYW4gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJKTURcIixcbiAgICBcInN5bWJvbFwiOiBcIkokXCJcbiAgfSxcbiAgXCJKb3JkYW5pYW4gRGluYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIkpPRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJZZW5cIjoge1xuICAgIFwiY29kZVwiOiBcIkpQWVwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqVcIlxuICB9LFxuICBcIktlbnlhbiBTaGlsbGluZ1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiS0VTXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlNvbVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiS0dTXCIsXG4gICAgXCJzeW1ib2xcIjogXCLQu9CyXCJcbiAgfSxcbiAgXCJSaWVsXCI6IHtcbiAgICBcImNvZGVcIjogXCJLSFJcIixcbiAgICBcInN5bWJvbFwiOiBcIuGfm1wiXG4gIH0sXG4gIFwiQ29tb3JvIEZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJLTUZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTm9ydGggS29yZWFuIFdvblwiOiB7XG4gICAgXCJjb2RlXCI6IFwiS1BXXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqlcIlxuICB9LFxuICBcIldvblwiOiB7XG4gICAgXCJjb2RlXCI6IFwiS1JXXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqlcIlxuICB9LFxuICBcIkt1d2FpdGkgRGluYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIktXRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDYXltYW4gSXNsYW5kcyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIktZRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiVGVuZ2VcIjoge1xuICAgIFwiY29kZVwiOiBcIktaVFwiLFxuICAgIFwic3ltYm9sXCI6IFwi0LvQslwiXG4gIH0sXG4gIFwiS2lwXCI6IHtcbiAgICBcImNvZGVcIjogXCJMQUtcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCrVwiXG4gIH0sXG4gIFwiTGViYW5lc2UgUG91bmRcIjoge1xuICAgIFwiY29kZVwiOiBcIkxCUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqNcIlxuICB9LFxuICBcIlNyaSBMYW5rYSBSdXBlZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTEtSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqhcIlxuICB9LFxuICBcIkxpYmVyaWFuIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTFJEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJMaXRodWFuaWFuIExpdGFzXCI6IHtcbiAgICBcImNvZGVcIjogXCJMVExcIixcbiAgICBcInN5bWJvbFwiOiBcIkx0XCJcbiAgfSxcbiAgXCJMYXR2aWFuIExhdHNcIjoge1xuICAgIFwiY29kZVwiOiBcIkxWTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiTHNcIlxuICB9LFxuICBcIkxpYnlhbiBEaW5hclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTFlEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk1vcm9jY2FuIERpcmhhbVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTUFEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk1vbGRvdmFuIExldVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTURMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk1hbGFnYXN5IEFyaWFyeVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTUdBXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkRlbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJNS0RcIixcbiAgICBcInN5bWJvbFwiOiBcItC00LXQvVwiXG4gIH0sXG4gIFwiS3lhdFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTU1LXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlR1Z3Jpa1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiTU5UXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigq5cIlxuICB9LFxuICBcIlBhdGFjYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTU9QXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIk91Z3VpeWFcIjoge1xuICAgIFwiY29kZVwiOiBcIk1ST1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJNYXVyaXRpdXMgUnVwZWVcIjoge1xuICAgIFwiY29kZVwiOiBcIk1VUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKoXCJcbiAgfSxcbiAgXCJSdWZpeWFhXCI6IHtcbiAgICBcImNvZGVcIjogXCJNVlJcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiS3dhY2hhXCI6IHtcbiAgICBcImNvZGVcIjogXCJNV0tcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiTWV4aWNhbiBQZXNvIE1leGljYW4gVW5pZGFkIGRlIEludmVyc2lvbiAoVURJKVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTVhOIE1YVlwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiTWFsYXlzaWFuIFJpbmdnaXRcIjoge1xuICAgIFwiY29kZVwiOiBcIk1ZUlwiLFxuICAgIFwic3ltYm9sXCI6IFwiUk1cIlxuICB9LFxuICBcIk1ldGljYWxcIjoge1xuICAgIFwiY29kZVwiOiBcIk1aTlwiLFxuICAgIFwic3ltYm9sXCI6IFwiTVRcIlxuICB9LFxuICBcIk5haXJhXCI6IHtcbiAgICBcImNvZGVcIjogXCJOR05cIixcbiAgICBcInN5bWJvbFwiOiBcIuKCplwiXG4gIH0sXG4gIFwiQ29yZG9iYSBPcm9cIjoge1xuICAgIFwiY29kZVwiOiBcIk5JT1wiLFxuICAgIFwic3ltYm9sXCI6IFwiQyRcIlxuICB9LFxuICBcIk5vcndlZ2lhbiBLcm9uZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiTk9LXCIsXG4gICAgXCJzeW1ib2xcIjogXCJrclwiXG4gIH0sXG4gIFwiTmVwYWxlc2UgUnVwZWVcIjoge1xuICAgIFwiY29kZVwiOiBcIk5QUlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKoXCJcbiAgfSxcbiAgXCJOZXcgWmVhbGFuZCBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIk5aRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiUmlhbCBPbWFuaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiT01SXCIsXG4gICAgXCJzeW1ib2xcIjogXCLvt7xcIlxuICB9LFxuICBcIkJhbGJvYSBVUyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlBBQiBVU0RcIixcbiAgICBcInN5bWJvbFwiOiBcIkIvLlwiXG4gIH0sXG4gIFwiTnVldm8gU29sXCI6IHtcbiAgICBcImNvZGVcIjogXCJQRU5cIixcbiAgICBcInN5bWJvbFwiOiBcIlMvLlwiXG4gIH0sXG4gIFwiS2luYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUEdLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlBoaWxpcHBpbmUgUGVzb1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiUEhQXCIsXG4gICAgXCJzeW1ib2xcIjogXCJQaHBcIlxuICB9LFxuICBcIlBha2lzdGFuIFJ1cGVlXCI6IHtcbiAgICBcImNvZGVcIjogXCJQS1JcIixcbiAgICBcInN5bWJvbFwiOiBcIuKCqFwiXG4gIH0sXG4gIFwiWmxvdHlcIjoge1xuICAgIFwiY29kZVwiOiBcIlBMTlwiLFxuICAgIFwic3ltYm9sXCI6IFwiesWCXCJcbiAgfSxcbiAgXCJHdWFyYW5pXCI6IHtcbiAgICBcImNvZGVcIjogXCJQWUdcIixcbiAgICBcInN5bWJvbFwiOiBcIkdzXCJcbiAgfSxcbiAgXCJRYXRhcmkgUmlhbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiUUFSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLvt7xcIlxuICB9LFxuICBcIk5ldyBMZXVcIjoge1xuICAgIFwiY29kZVwiOiBcIlJPTlwiLFxuICAgIFwic3ltYm9sXCI6IFwibGVpXCJcbiAgfSxcbiAgXCJTZXJiaWFuIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJSU0RcIixcbiAgICBcInN5bWJvbFwiOiBcItCU0LjQvS5cIlxuICB9LFxuICBcIlJ1c3NpYW4gUnVibGVcIjoge1xuICAgIFwiY29kZVwiOiBcIlJVQlwiLFxuICAgIFwic3ltYm9sXCI6IFwi0YDRg9CxXCJcbiAgfSxcbiAgXCJSd2FuZGEgRnJhbmNcIjoge1xuICAgIFwiY29kZVwiOiBcIlJXRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJTYXVkaSBSaXlhbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0FSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLvt7xcIlxuICB9LFxuICBcIlNvbG9tb24gSXNsYW5kcyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlNCRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiU2V5Y2hlbGxlcyBSdXBlZVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0NSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLigqhcIlxuICB9LFxuICBcIlN1ZGFuZXNlIFBvdW5kXCI6IHtcbiAgICBcImNvZGVcIjogXCJTREdcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiU3dlZGlzaCBLcm9uYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0VLXCIsXG4gICAgXCJzeW1ib2xcIjogXCJrclwiXG4gIH0sXG4gIFwiU2luZ2Fwb3JlIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU0dEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJTYWludCBIZWxlbmEgUG91bmRcIjoge1xuICAgIFwiY29kZVwiOiBcIlNIUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqNcIlxuICB9LFxuICBcIkxlb25lXCI6IHtcbiAgICBcImNvZGVcIjogXCJTTExcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiU29tYWxpIFNoaWxsaW5nXCI6IHtcbiAgICBcImNvZGVcIjogXCJTT1NcIixcbiAgICBcInN5bWJvbFwiOiBcIlNcIlxuICB9LFxuICBcIlN1cmluYW0gRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJTUkRcIixcbiAgICBcInN5bWJvbFwiOiBcIiRcIlxuICB9LFxuICBcIkRvYnJhXCI6IHtcbiAgICBcImNvZGVcIjogXCJTVERcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRWwgU2FsdmFkb3IgQ29sb24gVVMgRG9sbGFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJTVkMgVVNEXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkXCJcbiAgfSxcbiAgXCJTeXJpYW4gUG91bmRcIjoge1xuICAgIFwiY29kZVwiOiBcIlNZUFwiLFxuICAgIFwic3ltYm9sXCI6IFwiwqNcIlxuICB9LFxuICBcIkxpbGFuZ2VuaVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiU1pMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkJhaHRcIjoge1xuICAgIFwiY29kZVwiOiBcIlRIQlwiLFxuICAgIFwic3ltYm9sXCI6IFwi4Li/XCJcbiAgfSxcbiAgXCJTb21vbmlcIjoge1xuICAgIFwiY29kZVwiOiBcIlRKU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJNYW5hdFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVE1UXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlR1bmlzaWFuIERpbmFyXCI6IHtcbiAgICBcImNvZGVcIjogXCJUTkRcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiUGEnYW5nYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVE9QXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlR1cmtpc2ggTGlyYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVFJZXCIsXG4gICAgXCJzeW1ib2xcIjogXCJUTFwiXG4gIH0sXG4gIFwiVHJpbmlkYWQgYW5kIFRvYmFnbyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlRURFwiLFxuICAgIFwic3ltYm9sXCI6IFwiVFQkXCJcbiAgfSxcbiAgXCJOZXcgVGFpd2FuIERvbGxhclwiOiB7XG4gICAgXCJjb2RlXCI6IFwiVFdEXCIsXG4gICAgXCJzeW1ib2xcIjogXCJOVCRcIlxuICB9LFxuICBcIlRhbnphbmlhbiBTaGlsbGluZ1wiOiB7XG4gICAgXCJjb2RlXCI6IFwiVFpTXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkhyeXZuaWFcIjoge1xuICAgIFwiY29kZVwiOiBcIlVBSFwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oK0XCJcbiAgfSxcbiAgXCJVZ2FuZGEgU2hpbGxpbmdcIjoge1xuICAgIFwiY29kZVwiOiBcIlVHWFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJVUyBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlVTRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiUGVzbyBVcnVndWF5byBVcnVndWF5IFBlc28gZW4gVW5pZGFkZXMgSW5kZXhhZGFzXCI6IHtcbiAgICBcImNvZGVcIjogXCJVWVUgVVlJXCIsXG4gICAgXCJzeW1ib2xcIjogXCIkVVwiXG4gIH0sXG4gIFwiVXpiZWtpc3RhbiBTdW1cIjoge1xuICAgIFwiY29kZVwiOiBcIlVaU1wiLFxuICAgIFwic3ltYm9sXCI6IFwi0LvQslwiXG4gIH0sXG4gIFwiQm9saXZhciBGdWVydGVcIjoge1xuICAgIFwiY29kZVwiOiBcIlZFRlwiLFxuICAgIFwic3ltYm9sXCI6IFwiQnNcIlxuICB9LFxuICBcIkRvbmdcIjoge1xuICAgIFwiY29kZVwiOiBcIlZORFwiLFxuICAgIFwic3ltYm9sXCI6IFwi4oKrXCJcbiAgfSxcbiAgXCJWYXR1XCI6IHtcbiAgICBcImNvZGVcIjogXCJWVVZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiVGFsYVwiOiB7XG4gICAgXCJjb2RlXCI6IFwiV1NUXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkNGQSBGcmFuYyBCRUFDXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQUZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiU2lsdmVyXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQUdcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiR29sZFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWEFVXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIkJvbmQgTWFya2V0cyBVbml0cyBFdXJvcGVhbiBDb21wb3NpdGUgVW5pdCAoRVVSQ08pXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQkFcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRXVyb3BlYW4gTW9uZXRhcnkgVW5pdCAoRS5NLlUuLTYpXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQkJcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRXVyb3BlYW4gVW5pdCBvZiBBY2NvdW50IDkoRS5VLkEuLTkpXCI6IHtcbiAgICBcImNvZGVcIjogXCJYQkNcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiRXVyb3BlYW4gVW5pdCBvZiBBY2NvdW50IDE3KEUuVS5BLi0xNylcIjoge1xuICAgIFwiY29kZVwiOiBcIlhCRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJFYXN0IENhcmliYmVhbiBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlhDRFwiLFxuICAgIFwic3ltYm9sXCI6IFwiJFwiXG4gIH0sXG4gIFwiU0RSXCI6IHtcbiAgICBcImNvZGVcIjogXCJYRFJcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiVUlDLUZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJYRlVcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQ0ZBIEZyYW5jIEJDRUFPXCI6IHtcbiAgICBcImNvZGVcIjogXCJYT0ZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiUGFsbGFkaXVtXCI6IHtcbiAgICBcImNvZGVcIjogXCJYUERcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiQ0ZQIEZyYW5jXCI6IHtcbiAgICBcImNvZGVcIjogXCJYUEZcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiUGxhdGludW1cIjoge1xuICAgIFwiY29kZVwiOiBcIlhQVFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJDb2RlcyBzcGVjaWZpY2FsbHkgcmVzZXJ2ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXNcIjoge1xuICAgIFwiY29kZVwiOiBcIlhUU1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJZZW1lbmkgUmlhbFwiOiB7XG4gICAgXCJjb2RlXCI6IFwiWUVSXCIsXG4gICAgXCJzeW1ib2xcIjogXCLvt7xcIlxuICB9LFxuICBcIlJhbmRcIjoge1xuICAgIFwiY29kZVwiOiBcIlpBUlwiLFxuICAgIFwic3ltYm9sXCI6IFwiUlwiXG4gIH0sXG4gIFwiUmFuZCBMb3RpXCI6IHtcbiAgICBcImNvZGVcIjogXCJaQVIgTFNMXCIsXG4gICAgXCJzeW1ib2xcIjogXCJcIlxuICB9LFxuICBcIlJhbmQgTmFtaWJpYSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlpBUiBOQURcIixcbiAgICBcInN5bWJvbFwiOiBcIlwiXG4gIH0sXG4gIFwiWmFtYmlhbiBLd2FjaGFcIjoge1xuICAgIFwiY29kZVwiOiBcIlpNS1wiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfSxcbiAgXCJaaW1iYWJ3ZSBEb2xsYXJcIjoge1xuICAgIFwiY29kZVwiOiBcIlpXTFwiLFxuICAgIFwic3ltYm9sXCI6IFwiXCJcbiAgfVxufTtcbiIsInZhciBmaW5hbmNlID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGZpbmFuY2U7XG5maW5hbmNlLmFjY291bnRfdHlwZSA9IHJlcXVpcmUoXCIuL2FjY291bnRfdHlwZVwiKTtcbmZpbmFuY2UudHJhbnNhY3Rpb25fdHlwZSA9IHJlcXVpcmUoXCIuL3RyYW5zYWN0aW9uX3R5cGVcIik7XG5maW5hbmNlLmN1cnJlbmN5ID0gcmVxdWlyZShcIi4vY3VycmVuY3lcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImRlcG9zaXRcIixcbiAgXCJ3aXRoZHJhd2FsXCIsXG4gIFwicGF5bWVudFwiLFxuICBcImludm9pY2VcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiVENQXCIsXG4gIFwiSFRUUFwiLFxuICBcIlNERFwiLFxuICBcIlJBTVwiLFxuICBcIkdCXCIsXG4gIFwiQ1NTXCIsXG4gIFwiU1NMXCIsXG4gIFwiQUdQXCIsXG4gIFwiU1FMXCIsXG4gIFwiRlRQXCIsXG4gIFwiUENJXCIsXG4gIFwiQUlcIixcbiAgXCJBRFBcIixcbiAgXCJSU1NcIixcbiAgXCJYTUxcIixcbiAgXCJFWEVcIixcbiAgXCJDT01cIixcbiAgXCJIRERcIixcbiAgXCJUSFhcIixcbiAgXCJTTVRQXCIsXG4gIFwiU01TXCIsXG4gIFwiVVNCXCIsXG4gIFwiUE5HXCIsXG4gIFwiU0FTXCIsXG4gIFwiSUJcIixcbiAgXCJTQ1NJXCIsXG4gIFwiSlNPTlwiLFxuICBcIlhTU1wiLFxuICBcIkpCT0RcIlxuXTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiYXV4aWxpYXJ5XCIsXG4gIFwicHJpbWFyeVwiLFxuICBcImJhY2stZW5kXCIsXG4gIFwiZGlnaXRhbFwiLFxuICBcIm9wZW4tc291cmNlXCIsXG4gIFwidmlydHVhbFwiLFxuICBcImNyb3NzLXBsYXRmb3JtXCIsXG4gIFwicmVkdW5kYW50XCIsXG4gIFwib25saW5lXCIsXG4gIFwiaGFwdGljXCIsXG4gIFwibXVsdGktYnl0ZVwiLFxuICBcImJsdWV0b290aFwiLFxuICBcIndpcmVsZXNzXCIsXG4gIFwiMTA4MHBcIixcbiAgXCJuZXVyYWxcIixcbiAgXCJvcHRpY2FsXCIsXG4gIFwic29saWQgc3RhdGVcIixcbiAgXCJtb2JpbGVcIlxuXTtcbiIsInZhciBoYWNrZXIgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gaGFja2VyO1xuaGFja2VyLmFiYnJldmlhdGlvbiA9IHJlcXVpcmUoXCIuL2FiYnJldmlhdGlvblwiKTtcbmhhY2tlci5hZGplY3RpdmUgPSByZXF1aXJlKFwiLi9hZGplY3RpdmVcIik7XG5oYWNrZXIubm91biA9IHJlcXVpcmUoXCIuL25vdW5cIik7XG5oYWNrZXIudmVyYiA9IHJlcXVpcmUoXCIuL3ZlcmJcIik7XG5oYWNrZXIuaW5ndmVyYiA9IHJlcXVpcmUoXCIuL2luZ3ZlcmJcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImJhY2tpbmcgdXBcIixcbiAgXCJieXBhc3NpbmdcIixcbiAgXCJoYWNraW5nXCIsXG4gIFwib3ZlcnJpZGluZ1wiLFxuICBcImNvbXByZXNzaW5nXCIsXG4gIFwiY29weWluZ1wiLFxuICBcIm5hdmlnYXRpbmdcIixcbiAgXCJpbmRleGluZ1wiLFxuICBcImNvbm5lY3RpbmdcIixcbiAgXCJnZW5lcmF0aW5nXCIsXG4gIFwicXVhbnRpZnlpbmdcIixcbiAgXCJjYWxjdWxhdGluZ1wiLFxuICBcInN5bnRoZXNpemluZ1wiLFxuICBcInRyYW5zbWl0dGluZ1wiLFxuICBcInByb2dyYW1taW5nXCIsXG4gIFwicGFyc2luZ1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJkcml2ZXJcIixcbiAgXCJwcm90b2NvbFwiLFxuICBcImJhbmR3aWR0aFwiLFxuICBcInBhbmVsXCIsXG4gIFwibWljcm9jaGlwXCIsXG4gIFwicHJvZ3JhbVwiLFxuICBcInBvcnRcIixcbiAgXCJjYXJkXCIsXG4gIFwiYXJyYXlcIixcbiAgXCJpbnRlcmZhY2VcIixcbiAgXCJzeXN0ZW1cIixcbiAgXCJzZW5zb3JcIixcbiAgXCJmaXJld2FsbFwiLFxuICBcImhhcmQgZHJpdmVcIixcbiAgXCJwaXhlbFwiLFxuICBcImFsYXJtXCIsXG4gIFwiZmVlZFwiLFxuICBcIm1vbml0b3JcIixcbiAgXCJhcHBsaWNhdGlvblwiLFxuICBcInRyYW5zbWl0dGVyXCIsXG4gIFwiYnVzXCIsXG4gIFwiY2lyY3VpdFwiLFxuICBcImNhcGFjaXRvclwiLFxuICBcIm1hdHJpeFwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJiYWNrIHVwXCIsXG4gIFwiYnlwYXNzXCIsXG4gIFwiaGFja1wiLFxuICBcIm92ZXJyaWRlXCIsXG4gIFwiY29tcHJlc3NcIixcbiAgXCJjb3B5XCIsXG4gIFwibmF2aWdhdGVcIixcbiAgXCJpbmRleFwiLFxuICBcImNvbm5lY3RcIixcbiAgXCJnZW5lcmF0ZVwiLFxuICBcInF1YW50aWZ5XCIsXG4gIFwiY2FsY3VsYXRlXCIsXG4gIFwic3ludGhlc2l6ZVwiLFxuICBcImlucHV0XCIsXG4gIFwidHJhbnNtaXRcIixcbiAgXCJwcm9ncmFtXCIsXG4gIFwicmVib290XCIsXG4gIFwicGFyc2VcIlxuXTtcbiIsInZhciBlbiA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBlbjtcbmVuLnRpdGxlID0gXCJFbmdsaXNoXCI7XG5lbi5zZXBhcmF0b3IgPSBcIiAmIFwiO1xuZW4uYWRkcmVzcyA9IHJlcXVpcmUoXCIuL2FkZHJlc3NcIik7XG5lbi5jcmVkaXRfY2FyZCA9IHJlcXVpcmUoXCIuL2NyZWRpdF9jYXJkXCIpO1xuZW4uY29tcGFueSA9IHJlcXVpcmUoXCIuL2NvbXBhbnlcIik7XG5lbi5pbnRlcm5ldCA9IHJlcXVpcmUoXCIuL2ludGVybmV0XCIpO1xuZW4ubG9yZW0gPSByZXF1aXJlKFwiLi9sb3JlbVwiKTtcbmVuLm5hbWUgPSByZXF1aXJlKFwiLi9uYW1lXCIpO1xuZW4ucGhvbmVfbnVtYmVyID0gcmVxdWlyZShcIi4vcGhvbmVfbnVtYmVyXCIpO1xuZW4uY2VsbF9waG9uZSA9IHJlcXVpcmUoXCIuL2NlbGxfcGhvbmVcIik7XG5lbi5idXNpbmVzcyA9IHJlcXVpcmUoXCIuL2J1c2luZXNzXCIpO1xuZW4uY29tbWVyY2UgPSByZXF1aXJlKFwiLi9jb21tZXJjZVwiKTtcbmVuLnRlYW0gPSByZXF1aXJlKFwiLi90ZWFtXCIpO1xuZW4uaGFja2VyID0gcmVxdWlyZShcIi4vaGFja2VyXCIpO1xuZW4uYXBwID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuZW4uZmluYW5jZSA9IHJlcXVpcmUoXCIuL2ZpbmFuY2VcIik7XG5lbi5kYXRlID0gcmVxdWlyZShcIi4vZGF0ZVwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXJqYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFoZGlmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NwcmF5YWdhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J1emluYXYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU2t5aGFydG1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tb3Njb3ovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3VyYWZpcmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvOTFiaWxhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pZ29yZ2FyeWJhbGRpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhbGVib2dkZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFseWtoaW52LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvZWxoZWxpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdXNoc29saXRhcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29yZXl3ZWIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc25vd3NoYWRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FyZXVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hvbGRlbndlYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZXlpbWp1YW5pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VudmV4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3VudGVyZHJlaHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29sbGVnZW1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZWVqZmFuY2hlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmR5aXNvbmxpbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdWx0cmFnZXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZnVja195b3VfdHdvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkZWxsZWNoYXJsZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXRlbmV1cG9wdWxhci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haG1ldGFscGJhbGthbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9TdGlldml1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rZXJlbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vc3ZhbGRhcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmdlbGNlYmFsbG9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoaWVycnlrb2JsZW50ei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZXRlcmxhbmR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NhdGFyaW5vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dlZ2xvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmFuZGNsYXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmxhbWVfa2FpemFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FobWV0c3VsZWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmljb2xhc2ZvbGxpb3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamF5cm9iaW5zb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmljdG9yZXJpeG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvbGFnZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoemVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmtqZW5raW5zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pY29sYWlfbGFyc2VuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2d0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25veGR6aW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsYWdvb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWRpb3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWl6a28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhZGVuZ2xlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211dGx1ODIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2ltb2JlbnNvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZvY2luby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ndWlpaXBvbnRlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zb3lqYXZpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2hhdXN0aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdG9tYXNsYXUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvVmluVGhvbWFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL01hbmlrUmF0aGVlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xhbmdhdGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2Vtc2hpZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZWVtdW5yb2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3NoYWhlZGsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW5kYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9CaWxsU0tlbm5leS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaXZ5YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NoaGVtc2xleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaW5kcmVzb3JodXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc29mZmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzlsZXNzb25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xpbnV4MjkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQ2hha2ludG9zaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmFhbWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9yZWlyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGFkZWVkOS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zY290dGtjbGFyay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZWRicmlkZ2VzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbGxlZWRlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJha2FzaW5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FyaWlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0JyaWFuUHVya2lzcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoYWVsbWFydGluaG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnVibGllbmtvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RldmFua29zaGFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL1phY2hhcnlab3JiYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGltbWlsbHdvb2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zaHVhc29ydGluby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW1lbmxlZXR1cmtzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RvbWFzX2phbm91c2VrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlcnJoYWFzZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9SdXNzZWxsQmlzaG9wLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyYWplc2h3YXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmFjaHRtZWlzdGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NicmFjY28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVybW9ucGFpbnRlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYmR1bGxpbmRlbmlzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lzYWNvc3RhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cHJiLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3lhbG96aGtpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFuZGxlcnZkdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pYW1nYXJ0aC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fdmljdGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29tbWFkZWxpbWl0ZWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm95YmFyYmVydWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXhlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92bGFkYXJiYXRvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mZmJlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zeXJvcGlhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmtpdGluZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90cmFuZWJsb3cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmxhc2htdXJwaHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQ2hyaXNGYXJpbmE3OC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYWxpb21lZ2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FzY2hhbXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam1fZGVuaXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5vZmYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2VubnlhZHIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhdHlya28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGluZ3lpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21kcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZXJyeXhsaWZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fhcm9uaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raW5kYXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJyc3RuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VkdWFyZG9zdHVhcnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGhpbGlwc2l2YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9HYXZpY29JbmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFpcmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvaGl4eC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iaWdtYW5jaG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmxha2VzaW1raW5zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xlZWlpby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90anJ1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91YmVyc2NoaXpvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t5bGVmb3VuZHJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NsYXVkaW9ndWdsaWVyaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yaXBwbGVtZGsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXhlbnRyaWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pha2Vtb29yZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2FvZWR1bWVkZWlyb3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcG9vcm1pbmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGVyZXNoZW5rb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2VyeWlsbWF6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hheWRuX3dvb2RzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J1ZGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGx1bi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZ2F1cmF2X2JhZ2hlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYW1pZWJyaXR0YWluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhZGxpdHRsZWR1Y2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGlmYWdvci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZ3JvbW92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JlbmVmcml0ei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lcndhbmhlc3J5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RpZXNlbGxhd3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVyZW1pYWhhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvcmlkaGFuZHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhZW5zZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmV3Y29oZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc21hY3pueS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nb256YWxvcm9iYWluYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYW5kaW5pX20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3lkbGF3cmVuY2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2RoYXJyaXNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90Z2Vya2VuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xld2lzYWluc2xpZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFybGllY3dhaXRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvYmJzY2hpbGxlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mbGV4cnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0dGRldGFpbHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmFxdWVsd2lsc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thcnNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21ybWFydGluZWF1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29wbnNyY2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGdoYXJyeWdvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21heGltc2VzaHVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3V4YWxleC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW1paGFoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NoYW5wb3J5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NoYXJ2aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zZW1hcnF1ZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVmZmZpcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rcnlzdGFsZmlzdGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xva2VzaF9jb2Rlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVkYW1pYW5oZGV6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RwbWFjaGFkby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mdW53YXRlcmNhdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aW1vdGh5Y2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXZhbmZpbGlwb3ZiZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9waWNhcmQxMDIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyY29iYXJib3NhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tyYXNub3VraG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2czZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGVtaWx0ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmlja2R0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29wZXJhdGluby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9idW5naXdhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9odWdvbWFuby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb2dvcmFkby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kY191c2VyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hvcmFjaW9iZWxsYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9TbGFhcE1lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RlZXJhZ2l0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lxb25pY2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWx5YV9wZXN0b3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmV3YXJyb3cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3Npc2tpbmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3Rhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9IZW5yeUhvZmZtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmRzYXVuZGVycy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGFtc3h1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2N1cmlvdXNvZmZpY2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlbWFkcmF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hpZ2FuZ3JhaGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvaGV0dGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmlja2ZyYXR0ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnVubmluZ3NrdWxsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZHlzb25kZXNpZ25zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyZW50b25fY2xhcmtlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plbm55c2hlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmFkZW5oYW1tLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t1cnRpbmMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW1hbnJ1emFpbmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29yZXloYWdnYXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0thcmltbW92ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYXJvbmFsZnJlZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93dHJzbGQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaml0YWNoaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVyZWFsbWFydmluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BtZWlzc25lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vb29tei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFja3kxNC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXNzZWRkeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGlubWF0dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGFuZWh1ZHNvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ha211ci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9Jc2FyeUFtYWlyYW5pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FydGh1cmhvbGNvbWJlMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmR5Y2hpcHN0ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm94bW9kZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWhzYW5kaWFyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9MdWNhc1BlcmRpZGFvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NoYWx0MG5pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N3YXBsb3JkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thZWxpZmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGxiYWJpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ndWlsbGVtYm90aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmluZGFtXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZW5ieXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoaWFnb3Zlcm5ldHRpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ptaWxsc3BheXNiaWxscy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWtlbWFpMmF3ZXNvbWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVydm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWVrYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RhMWV4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvYmVyZ2QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmVsaXBlY3NsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJlYTIxMTA4Ny8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYXJhbmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGhvb3llbmdhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fib3ZlZnVuY3Rpb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGNyaWRlc2FnYWluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhbmRvbWxpZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQnJ5YW5Ib3JzZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGV5a2VubmV0aC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYWhwYXJyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGx0aGluZ3NzbWl0dHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFudmVybm9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jld2VpbnJlaWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2luY3JlYXNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZhbHZhcmFkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FseG5kcnVzdGlub3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc291dWYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3JrdW5jYXlsYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQU1fS24yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dlYXJwaXhlbHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFzc2Ftb2xvZ3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmltYXJldGhvbWFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvc21hci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9TVUxpaWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXJqYW1lc25vYmxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NpbHZhbm11aGxlbWFubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaGFuZUl4RC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYWNoby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95aWdpdHBpbmFyYmFzaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9idXp6dXNib3JuZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hYXJvbmt3aGl0ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ybWxld2lzdWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2lhbmNhcmxvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYmlyY2tlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kX25ueV9tX2NoZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2RpZG9uYXRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F0YXJpYm95LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fib3RhcC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXJhbGVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BzZGVzaWdudWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbHVkd2ljemFrcGF3ZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVtYW5qYWl2YW5vdmljLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhbHVsaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haG1hZGFqbWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdm92a2Fzb2xvdmV2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbWdyb3Zlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXJpZW56bzc3Ny8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb25hdGhhbnNpbW1vbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVsc29uam95Y2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvUzB1Zmk0bjMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveHRvcGhlcnBhdWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2FrdHJlZW1lZGlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hdGVzY2h1bHRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZpbmRpbmdqZW5ueS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYW1hbmtyZWF0aXZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FudG9ueXpvdG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dlX3NvY2lhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZWVoYW1ibGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NvbGlkX2NvbG9yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FiZWxjYWJhbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWJpbGRlcmJhY2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2t1c2FhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvcmR5dmRib29tLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nhcmxvc2dhdmluYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZWNoa2luYXRvci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92YzI3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JkYmFubm9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nyb2FreC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdXJpYmJsZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2VyaWhlbmFyZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXRhZGVsZW9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2djbW9ybGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2R1aXZ2di8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYXNjaGFkcm9zdGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmljdG9yRHVidWdyYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2ludG9waWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0dGJpbG90dGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGF5bG9ybGluZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZWdkcmF3cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZWxuMWtzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21haG1vdWRtZXR3YWxseS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9TaWx2ZXJlZGdlOS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXJla2VicmFkbGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhcHB5cGV0ZXIxOTgzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RyYXZpc19hcm5vbGQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJ0ZW1fa29zdGVua28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWRvYmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF5a2lpbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxla19kanVyaWMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2NpcHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlndWVsbWVuZGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1c3RpbnJoZWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxzb2Jyb29rcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mcm9ueC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tY2ZseWRlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYW50aV91cnNvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsbGZvcmRlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGF5dWJlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXJ0Ym9lcmxhbmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyb3Nob2xseS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGFtbmFjLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2N5bnRoaWFzYXZhcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXVyaW5nYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW5yby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oaWVtaWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamFja2llc2Fpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci96YWNzbmlkZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWR1dWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FudGphbnVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fyb29uX3NoYXJtYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kc2hzdGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZWhhY2tlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoYWVsYnJvb2tzanIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnlhbm1jbGF1Z2hsaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2x1YmIzcnJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RheWJlbmxvci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci94cmlwdW5vdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9teWFzdHJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkaXR5YXN1dG9tby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaWdpdGFsbWF2ZXJpY2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGphcnRzdHJvcm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXRvbG1hY2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmF1Z2hhbm1vZmZpdHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWJkb3RzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lzbmlmZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2VyZ2V5c2Fmb25vdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2NyYXBkbmIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hyaXNtajgzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpdG9ybGVhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zb2thbml3YWFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3pha2kzZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbGx5em9yZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbW9jYWJ5dGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3NtYW5pbmNlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rqc2hlcm1hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXZpZGhlbXBoaWxsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dhZ2huZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVjb2R5bWljb25lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wcmF2ZWVuX3ZpamF5YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWJicnVjY2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2xpZmZzZWFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RyYXZpc2hpbmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t1bGRhcmthbHZpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9FbHRfbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9waGlsbGFwaWVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29rc2VhbmpheS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pZDgzNTU1OS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdWRyZXRrZXNraW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5qaGVyby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kdWNrNGZ1Y2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2NvdHRfcmlsZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbm91ZmFsaWJyYWhpbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oMWJyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ib3JnZXNfbWFyY29zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RldmluaGFsbGFkYXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2lhcmFuci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdGVmb29vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pa2ViZWVjaGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RvbnltaWxsaW9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2h1YXJhaWNodXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXJhZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZXRyYW5nci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kbWl0cml5Y2h1dGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhcmxpZWdhbm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJhc2htYW50ZWdoaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGhhbWRhbm5hd2F5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FpbnNsZXl3YWdvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdmVubGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZhaXNhbGFiaWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVzaHVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nhcmx5c29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2R1dGNobmFkaWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGVkZHl6ZXR0ZXJsdW5kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbXVlbGtyYWZ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FvaW1lZGlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RvZGRyZXcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29kZXBvZXRfcnUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJ0dmF2cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZW5vaXRib3VjYXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvbWFybWVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvbG1hcmxvcGV6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NyZWFydGluYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ob21rYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYWJvcmVudG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvYmluY2xlZGllcmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF4aW1zb3Jva2luLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BsYXN0aWNpbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvajJkZW1lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BlYWNoYW5hbnIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FwYWx1Y2Npby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZV9hc2NhbmlvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Jpa2FzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rhd2lkd3UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyY29yYW1pcmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZ2VsY3JlYXRpdmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnBhdGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BvcGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JlaGF0a2F0aHVyaWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlX3B1cnBsZWJ1bm55LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyLzFtYXJraXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWpheHlfcnUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJlbm11cnJlbGwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHVkZXN0ZWluLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29za2FybGV2aW5zb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmljdG9yc3R1YmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25laGZ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZpY2l2YWRlbGluZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZWFuZHJvdmFyYW5kYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zY290dGdhbGxhbnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmljdG9yX2hheWRpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYXdyYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yeWhhbmhhc3Nhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbWF5dnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYV9icml4ZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2Fyb2xrcmFrb3dpYWtfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlcmt1bGFuby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nZXJhbjcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2dnYXVyYXYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hyaXNfd2l0a28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbG9zb3NpbmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcG9sYXJpdHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF0dGxhdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icmFuZG9uYnVya2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29uc3RhbnR4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RleWxvcmZlbGl6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NyYWlnZWxpbWVsaWFoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhY2hlbHJldmVsZXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmVhYm8xMDEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmFobWVlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9reS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yaWNreXllYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvajA0bnRvaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zcGJyb21hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NlYmFzaHRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qcGVuaWNvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZyYW5jaXNfdmVnYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9va3RheWVsaXBlay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raWtpbGxvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZhYmJpYW56LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xhcnJ5Z2VyYXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL0Jyb3VtaVlvdXNzZWYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvMHRoZXJwbGFuZXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWJpbGFsc2lkZGlxdWUxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lvbnVzcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ncnJyX25sLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xpbWluaGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmF3ZGlnZ2llLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J5YW5kb3duaWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2V0aGxvdWV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BpeGFnZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcnBpdG5qLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N3aXRtZXI3NzcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9zZXZuY2xjaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYW5pY2thaXJhai8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wdXppay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90YmFrZGVzaWducy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXNidWp1cGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3Vwam9leS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb3dpZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saW5raWJvbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYWxpbnRvcm9zei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbWNvZGluZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZ3VzdGluY3J1aXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3Vzb3RvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Rob21hc3NjaHJpamVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1cGVyb3V0bWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thbG1lcnJhdXRhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYWJyaWVsaXphbG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ29qZWFueW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF2aWRiYWxkaWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3ZvanRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xhdXJlbmdyYXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanlkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXlteWJveS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZWxsbGVvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmNpb3RvbGVkby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaW5qYWQzbTAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdG9fc29oYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFzc2x1bnNmb3JkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL211cmlkcmFoaGFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xldmlzYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3JhaGFta2VubmVyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZXBldGl0b2dyZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbnRvbmdlbmtpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uZXNzb2lsYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbWFuZGFidXphcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FmcmFua292LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvY29sZXJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RzczQ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdHQzMjI0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JsdWVzaXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcXVhaWxhbmRxdWFzYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvQWxiZXJ0b0NvY29jaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZXBpbnNraS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZW1lbnRpeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taHVkb2Jpdm5pay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGliYXV0X3JlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29sZ2FyeS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaG9qYmVyZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdG9sb2tvbm5pa292LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JlcmV0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYXVwaW50b3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2Vnb3R2aWNlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci94YWRoaXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFjeGltLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvZG55bG9ib3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFkY2FtcG9zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZGVieXZhZGltLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhcnRvc3pkYXd5ZHppay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdXBlcnZvdmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFya3JldHpsb2ZmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZvbmFjaG9vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rhcnlsd3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RldmVkZXNpZ25lci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9teWxlc2IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGVyYmlndC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZXBhdWxhd2FnbmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dlc2hhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9naXptZWVkZXZpbDE5OTEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3Njb3R0YnVyZ2Vzcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saXNvdnNreS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXZpZHNhc2RhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FydGRfc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9Zb3VuZ0N1dGxhc3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWdvbnRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2l0c3RvdGFsbHlhbXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmljdG9ycXVpbm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3Ntb25kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29rc2FuYWZyZXdlci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci96YXVlcmtyYXV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lhbWtlaXRobWFzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbml0aW5oYXlhcmFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xtamFicmV1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbmRhbGFyZW9wZW5zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoaW5rbGVmdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wb25jaG9tZW5kaXZpbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdWFtcGVycm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnJ1bm9kZXNpZ24xMjA2LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nhc2V5Y2F2YW5hZ2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbHV4ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kb3RncmlkbGluZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zcGVkd2lnLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hZGV3dWxmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdHRzYXBpaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZWxkZXJsZWFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nocmlzc3R1bXBoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pheXBoZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbnNhbW95bG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NocmlzdmFuZGVya29vaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdXN0bWVfdGltb3RoeWcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3RvemsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHJpbnphZGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3U1dGFmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2N5cmlsX2dhaWxsYXJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rfa29iZWx5YXRza3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFuaWxvYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ud2RzaGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm9tYW5idWxhaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9za2tpcmlsb3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHZkd2luZGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rhbm5vbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGVrZXZpbmpvbmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p3YWx0ZXIxNC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aW1ndGhvbWFzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J1ZGRoYXNvdXJjZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci91eHBpcGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoYXRvbmV0b21teS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaWFuc2lnaXRwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FkcmllbnRocy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rbGltbWthLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2drYWFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RlcmVrY3JhbWVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plbm55eW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVycnNvZnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveGFsaW9ubWFsaWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWRoZW5kZXJzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2V5dXJpODUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcm94YW5lamFtbWV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tpbWNvb2wvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWRrZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXRraW5zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZXNzYW5kcm9yaWJlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phY2tzb25sYXRrYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZWJyb25qZW5uYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva29zdGFzcHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2FybGthbmFsbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tb3luaWhhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW5wbGllZ28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2F1bGloaXJ2aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZXNsZXl0cmFua2luLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZqYWd1ZXJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jvd2JyaWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hc2hhYWFhYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveWFzc2lyeWFoeWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHBhcnJlbGxpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZvdG9tYWdpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ha2FfamFtZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVuaXNlcGlyZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXFiYWxwZXJrYXNhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcnRpbmFuc3R5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phcnNlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yX295LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1c3RpbnJvYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYWJyaWVscm9zc2VyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hbGdvcmRvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXJsZmFpcmNsb3VnaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taWNoYWVsYWJlaHNlcmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGllcnJlc3RvZmZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Vuam95dGhldGF1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvZ2FuamxhbWJlcnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnBlZXp5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvcmV5Z2lubml2YW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFsaHJvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tc3ZlZXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGluZ2Vzd2FyYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva29sc3ZlaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGV0ZXI1NzYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmVpZGVpcmVkYWxlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvZXltdXJkYWgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmFwaGFlbG5pa3Nvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdmRoZXV2ZWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWF4bGluZGVybWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ppbW11aXJoZWFkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JlZ3JlYXRpdmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZnJhbmtpZWZyZWVzYmllLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvYnR1cmxpbmNreC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9UYWxiaV9Db25TZXB0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvbmdsaXZlbXl3b3JkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZhbmNoZXN6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21haWtsYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGVybWFub2Jyb3RoZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmV6X19fYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ncmVnc3F1ZWViLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dyZWVuYmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL19yYWd6b3IvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW50aG9ueXN1a293LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZsdWlkYnJ1c2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFjdHJ0ci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZWhuZ2x5bm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVyZ21hcnRpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9odWdvY29ybmVqby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fa2tnYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kemFudGlldm0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2F3YWxhemFyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NvdmVzb3ZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvbnNnb3R3b29kLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2J5cnlhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92eXRhdXRhc19hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pemhnYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2ljZXJvYnIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmlsc2hlbG1lcnNzb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZDMzcHRob3VnaHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF2ZWNyYWlnZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uY2tqcnZzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZXhhbmRlcm1heWVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pjdWJpYy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jcmFpZ3Jjb2xlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYWdhd2FybWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvYl90aG9tYXMxMC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2ZsYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWlrZWxrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3J0Z2liYm9ucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydXNzZWxsX2JheWxpcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taGVzc2xvdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb2R5c2FuZmlsaXBwby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93ZWJ0YW55YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWRlYnlicmVudG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RjYWxvbmFjaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZXJmZWN0Zmxvdy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qanNpaWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FhcmFicHJlZXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva3VtYXJyYWphbjEyMTIzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lhbXN0ZWZmZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlbWlrZW5hZ2xlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NlZWtheXR3ZWV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xhcnJ5Ym9sdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jb25zcGlyYXRvci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYWxsYXNicGV0ZXJzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL24zZG1heC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90ZXJwaW1vc3QvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2lyaWxsei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ieXJuZWNvcmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIval9kcmFrZV8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FsZWJqb3ljZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydXNzb2VkdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ob2FuZ2xvaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90b2J5c2F4b24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ29mcmFzZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RpbWFwb3NueXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGppc291c2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2thbmR1bmdlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iaWxseXJvc2hhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vc2thbWF5YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tb3Rpb250aGlua3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva25pbG9iLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FzaG9ja2ExOC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJyaW1vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JhcnRqby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vbW5penlhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VybmVzdHNlbWVyZGEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5kcmVhc19wci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lZGdhcmNocmlzOTkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhvbWFzZ2Vpc2VuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dzZWd1aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9hbm5lZm91cm5pZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVtZXJzZGVzaWducy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGFtbWFyc2Jhci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYXNpcndkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25fdGFzc29uZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXZvcnN6a3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlbXJkYXZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3llY2lkc20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmljb2xsZXJpY2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FuYXB1ZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uaWNvbGVnbHlubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdWR6aGluX21pbGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rlc2lnbmVydnptLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tpYW5vc2hwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2V2YW5kcml4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsdGVyY2h1Y2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGhydWJvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hX3RpYXgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3NiYl9tZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kb3JwaGVybi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXVyaW9sZy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icnVub19tYXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hY3RvcHVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RoZV93aW5zbGV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvZW1kZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvU2hyaWlpaWltcC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYWNvYmJlbm5ldHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmZlZG9yb2ZmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lhbWdsaW15LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsbGFncmluZ2F1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9haWlhaWlhaWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb2xhb2x1c29nYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9idXJ5YWtuaWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dpbTFrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pY2tsYWNrZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hMWNoYXBvbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RleW52aWxqb2VuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0cmlrZXdhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yeWFua2lya21hbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZXdhYm9nYWRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rvb29vbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYWdhbjEyMy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcmlmZnNldGlhd2FuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VsZW5hZGlzc2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXdhcmtlbnRpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGllcnJ5bWVpZXJfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JfZ2FyY2lhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RtYWNrZXJtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYm9yYW50dWxhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tvbnVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NwYWNld29vZF8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnl1Y2hpMzExLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2V2YW5zaGFqZWQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHJpc3RhbmxlZ3Jvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaG9haWIyNTMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWlzbGlubmtlbGx5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL29rY29rZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGltcGV0cmljb2xhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N1bnNoaW5lZGdpcmwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hhZGFtaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGVjbGFyc29uaXYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbm9taWRlc2lnbnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGV0ZWJlcm5hcmRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Njb3R0aWVkdWRlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pbGxpbmV0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ltc29wZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW1hbW11aHQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmVuamFtaW5fa25pZ2h0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lcGR1ZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2tpNC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sYW5jZWd1eWF0dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYm95MTg5NS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbXl3ZWJiYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yd2V2ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYXJ1aW50ZXNldHRkZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmljYnVydG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25lbHNoZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXRzaXJhaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wcmltb3pjaWdsZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamZmZ3JkbnIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvOGQzay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nZW5lc2VsZXpuZXYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxfbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc291cGVycGhseS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tc2xhcmtpbmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvMmZvY2t1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jZGF2aXM1NjUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveGllbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90dXJrdXR1dWxpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3V4d2FyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sZWJpbm9jbGFyZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYXVyYXZqYXNzYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF2aWRtZXJyaXF1ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZHNpc3RvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuZHJld29mZmljZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva29qb3VyaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZG5pcm1hbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rZXZrYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tcl9zaGl6bml0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsdWlzaW9fYXpldmVkby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jbG91ZHN0dWRpby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW52aWVyaWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZXhpdmFuaWNoa2luLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZyYW5fbWNoYW15LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3BlcnJldG1hZ2FsaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZXRyYXlkYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FkaWtrYXJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdGJlZWRvdGNvbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJlbXl3b3Jib3lzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JwYXJ0cmlkZ2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWljaGFlbGtvcGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NpbHYzcmd2bi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbGV2aXppby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb2huc21pdGhhZ2VuY3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGF3bGJ3b3kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdml0b3IzNzYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGVzYXN0cm96by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGltb19jei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qYXNvbm1hcmtqb25lcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9saGF1c2VybWFubi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci94cmF2aWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3Vpc2NobWl0dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aWdvYnJvbngvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGFuZ2hhbDAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlndWVsa29vcmVtYW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VyZ2VvbmlzdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaHJpc3RpYW5vbGlmZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYXNwZXJncmwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWFta2FybmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXBhdmVsZWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGllcnJlX25lbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci95MmdyYXBoaWMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RlcmxpbmdydWxlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbGJ1c2NhaW5mby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iZW5ueWppZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3R1c2hvbmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZXN0ZWJhbnVyaWJlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VtYnJjZWNyZWF0aW9ucy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW5pbGxvcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbGxpb3RsZXdpcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFybGVzcnByYXR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZsYWR5bi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbW1lZmZlc3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FybG9zYmxhbmNvX2V1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xlb25mZWRvdG92LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhbmdhZmFuZ3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2hyaXNfZnJlZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGdvcm10eC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9icnlhbl90b3BoYW0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanBzY3JpYmJsZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlnaHR5NTUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY2FyYm9udHdlbHZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2lzYWFjZmlmdGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaWFtamRlbGVvbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zbm93d3JpdGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFycHV0cm8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZHJld2J5cmVlc2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FjaGFjb3JhenppLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jpc3RyaWFuaW9zaXAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFnb28wNC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZWhhbW9uZGVsbG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIveWF5dGVlamF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FfaGFycmlzODgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxndW5zYW5hYnJpYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci96Zm9ycmVzdGVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL292YWxsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nhcmxvc2pnc291c2EvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2VvYmlrYXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWhfbGljZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb29uZXlkb29kbGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbmVyZGdyOC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZGdnY2NhYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci96YWNrZWVsZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbm9ybWFuYm94LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VsX2Z1ZXJ0aXNpbW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaXNtYWlsX2JpbHRhZ2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvanVhbmdvbWV6dy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qbm1ucmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcGF0cmlja2Nvb21iZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yeWFuam9obnNvbl9tZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJrb2xzY2hlc2t5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plZmZnb2xlbnNraS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rdmFzbmljLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xpbmRzZXl6aWxsYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9nYXVjaG9tYXR0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FmdXNpbmF0dG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2V2aW5vaC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9va2Fuc3VycmVlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGFtYXdlc29tZWZhY2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW1pbGVib3VkZWxpbmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJpc2hpXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdWFubWFtYXJ0aW5lei8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93aWtpemluZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGFudGhtcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ta2dpbmZvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RlcnJvcnBpeGVsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2N1cmlvdXNvbmF1dC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wcmhlZW1vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hhZWxjb2xlbnNvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZvY3p6aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJ0aXAwNy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGFvZGFuZzE3LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvaG5jYWZhenphLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JvYmlubGF5ZmllbGQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZnJhbmNpc2NvYW1rLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FiZHVsaHlldWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFya2xhbWIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWRvYmVuZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZXNlbmZyZWRyaWsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlrYWVsam9yaHVsdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaHJpc3Nsb3dpay8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92aW5jaWFydHMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWVlbGZvcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWxsaW90bm9sdGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3llaHVkYWIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmlqYXlrYXJ0aGlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Jmcm9ocy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NlcF9tYXJ0aW5zLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2F0dGFja3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VyNGR5ZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90dW1za2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaW5zdGFsb3gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFuZ29zYW5nby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wYXVsZmFyaW5vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2themFreTk5OS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raXdpdXBvdmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL252a3puZW1vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3RvbV9ldmVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhdGJ1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93b29kc21hbjAwMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qb3NobWVkZXNraS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90aGV3aWxsYmVhcmQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHNhaWthbGkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9lX2JsYWNrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FsZWluYWRzYXlzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmN1c2dvcmlsbGl1cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ob3RhX3YvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamdoeWxsZWJlcnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2hpbnplLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2phbnBhbG91bmVrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcmVtaWVzcG9rZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGVyX3J1dS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYW5zb3d0ZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmVsaXBlYXBpcmVzcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYWd1Z3picmFuZDJkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Bvc3RlcmpvYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYXRoYWxpZV9mcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ib2JieXR3b3Nob2VzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RyZWl6bGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVyZW15bW91dG9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2VsaXNhYmV0aGtqYWVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25vdGJhZGFydC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tb2hhbnJvaGl0aC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qbHNvbGVyZGVsdG9yby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pdHNrYXdzYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2xvd3Nwb2NrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3p2Y2hrZWxseS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci93aWxqYW5zbG9mc3RyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jcmFpZ2hlbm5lYmVycnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHJ1YmVhdHRvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2p1YXVtbG9sLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbXNjb3V0by8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9CZW5vdWFycmFkZU0vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ2lwc3lfcmFmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25ldG9uZXRfaWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXJrb2tvbGV5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2l0c2FqaW1pdGhpbmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc21hbG9uc28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmljdG9yZGVhbmRhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL19kd2l0ZV8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmljaGFyZGdhcnJldHRzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dyZWdyd2lsa2luc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FuYXRvbGluaWNvbGFlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2x1NHNoMWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RlZmFub3RpcmxvbmkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3N0aXJidS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kYXJjeXN0b25nZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9uYWl0YW5hbW9yZW5vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21pY2hhZWxjb21pc2tleS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZGhpYXJkYW5hLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmNvbWFub18vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGF2aWRjYXphbGlzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ZhbGNvbmVyaWUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ3JlZ2tpbGlhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iY3JhZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ib2x6YW5tYXJjby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb3dfcmVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZsYWpraS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wZXRhcl9wcm9nLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvbmtzcHIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWttYWxmaWtyaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tZmFjY2hpbmVsbG8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXRhbmlzbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oYXJyeV9zaXN0YWxhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdXJyYXlzd2lmdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ib2J3YXNzZXJtYW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dhdnIxbDAvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFkc2hlbnNlbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tcl9zdWJ0bGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGV2aWxqaG9fLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbGltaWFub2ZmLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvZXRydWVzZGVsbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90d2l0dHlwb3JrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FpcnNreWxhci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kbmV6a3VtYXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGdhamphci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGVyaWZfYi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zYWx2YWZjLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xvdWlzX2N1cnJpZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kZWVlbnJpZ2h0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2N5YmluZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9leXJvbm4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmlja3lzaGl0cy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zd2VldGRlbGlzYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jYm9sbGVyMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmRyZXNkamFzc28vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWVsdmluZGlkaXQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5keXNvbG9tb24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhhaXNzZWxlbmF0b3JfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2x2b3Zlbm9rLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dpdWxpdXNhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JlbHlhZXZfcnMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvb3ZlcmNsb2Fja2VkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thbWFsX2NoYW5lbWFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2luY3VibzgyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hlbGxvZmV2ZXJycnIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWhhbGlnb3dza2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3VubGFuZGljdHdpbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9idTc5MjEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5keXRsYXcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvamVyZW1lcnkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZmluY2hqa2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFuaWdtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3VtdXJnZGsvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2NvdHRmZWx0aGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dhbnNlcmVuZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tdXR1X2tyaXNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvZHl0YWdnYXJ0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL250ZmJsb2cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGFudmVlcnJhby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9oZmFsdWNhcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbHhsZXJveWRldmFsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t1Y2luZ2JlbGFuZzQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFyZ2Fvcm9iYWxvLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2NvbGdydXYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RhbGV3aW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2t5bGVmcm9zdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iYXVtYW5uem9uZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hbmdlbGNvbGJlcmcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FjaGluZ2F3YXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvampzaGF3MTQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcmFtYW5hdGhhbl9wZHkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9obmRlemVtYmVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25pbHNob2Vuc29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyYW5kb25tb3JyZWFsZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9udXR6dW1pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JyYW5kb25mbGF0c29kYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zZXJnZXlhbG1vbmUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2xlZnVlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2tpcmFuZ29wYWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmF1bWFubl9hbGV4LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdHRoZXdrYXlfLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pheV93aWxidXJuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NoZXNnYXJlZC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hcHJpZW5kZWF1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvaG5yaW9yZGFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dha2VfZ3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxla3NpdGFwcHVyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbXNndWxhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci94aWxhbnRyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pbW9tZW51aS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zaXJjYWxlYmdyb3ZlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25ld2JydXNoZXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaHNpbnlvMjMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbTRyaW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2F0aWVtZGFseS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zNGYxLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Vjb21tZXJjZWlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmxpbmpheWFrb2R5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N3b29zaHljdWViLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NhbmdkdGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29kZXJkaWF6LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2JsdWVmeF8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdml2ZWtwcnZyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Nhc2hhX3NoZXN0YWtvdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ldWdlbmVld2ViLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RnY2xlZ2cvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbjFnaHRfY29kZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZGl4Y2hlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ibGFrZWhhd2tzd29ydGgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdHJ1ZWJsb29kXzMzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhaV9uaW5oX25ndXllbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tYXJjbGdvbnphbGVzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3llc21lY2svMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RlcGhjb3VlLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rvcm9ubWFsa2kvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcnVlaGxkZXNpZ24vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYW5hc25ha2F3YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9raWphbm1haGFyamFuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3dlYXJlc2F2YXMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc3RlZnZkaGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3R3ZWV0dWJoYWkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxlY2FycGVudGllci8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9maXRlcmlrLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FudG9ueXJ5bmR5YS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kMDBtYXovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlb25seXpla2UvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWlzc2FhYW15LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Nhcmxvc20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFuZWtlbnRoZS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9yZWV0YWpheWVuZHJhLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2plcmVteXNoaW1rby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qdXN0aW5yZ3JhaGFtLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3N0ZWZhbm96b2Zmb2xpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL292ZXJyYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9tcmViYXkwMDcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2h2ZWxvOTYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvcHlyb25pdGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdGhlZGpwZXRlcnNlbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ydHl1a21hZXYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvX3dpbGxpYW1ndWVycmEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxiZXJ0YXVndXN0aW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdmlrYXNocGF0aGFrMTgvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIva2V2aW5qb2huZGF5eS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci92al9kZW1pZW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvY29saXJwaXhvaWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZ29kZGFyZGxld2lzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2xhYXNsaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qcWl1c3MvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGV5Y2FtdGF5bG9yLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL25hc3R5YV9tYW5lLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hc3Rlcm1pbmRlc2lnbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jY2lub2phc3NvMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9ueWFuY2Vjb20vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FuZHl3b29kcnVmZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9iaWdoYW5kZGVzaWduLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NidHJhbnNwYXJlbnQvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYXZpZGRheWVudG9uYmF5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JpY2h3aWxkLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2theXNpeF9kaXp6eS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci90dXI4bGUvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2V5ZWRob3NzZWluMS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wcml2ZXR3YWduZXIvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZW1tYW5kZW5uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rldl9lc3NlbnRpYWxzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2ptZnNvY2lhbC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9feWFyZGVub29uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hdGVhb2R2aXRlemEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd2VhdmVybWVkaWEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXVmYWRkYWxfbXcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvaGFmZWVza2hhbi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hc2hlcm5hdGFsaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9zdWxhcW8vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvZWRkaWVjaGVuLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvc2VjYXJsb3Nwc2gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvdm1fZi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9lbnJpY29jaWNjb25pLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Rhbm1hcnRpbjcwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2dtb3VyaWVyLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RvbmphaW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXJ4bG9rYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9fcGVkcm9waW5oby8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9laXRhcmFmYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9vc2Nhcm93dXN1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3JhbHBoX2xhbS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9wYW5jaGFqYW55YWcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvd29vZHlkb3RteC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9qZXJyeWJhaTE5MDcvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbWFyc2hhbGxjaGVuXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci94YW1vcmVwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2Fpb19fXy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9jaGFhYmFuZV93YWlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3R4Y3gvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWthc2hzaGFybWEzOS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9mYWxsaW5nX3NvdWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2FpbnJhamEvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbXVndWthbWlsLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2pvaGFubmVzbmV1LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL21hcmt3aWVuYW5kcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9rYXJ0aGlwYW5yYWovMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYmFsYWtheXVyaXkvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYWxhbl96aGFuZ18vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbGF5ZXJzc3NzLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2thc3Blcm5vcmRrdmlzdC8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9taXJmYW5xdXJlc2hpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhbm5hX3NtaS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9WTWlsZXNjdS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9hZW9uNTYvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvbV9rYWxpYnJ5LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NyZWVqaXRoZXhwLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2RpY2VzYWxlcy8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9kaG9vdF9hbWl0LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3NtZW5vdi8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9sb25lc29tZWxlbW9uLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3ZsYWRpbWlyZGV2aWMvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvam9lbGNpcHJpYW5vLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2hhbGlnYWxpaGFydW4vMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvYnVsZXN3YXBuaWwvMTI4LmpwZ1wiLFxuICBcImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS91aWZhY2VzL2ZhY2VzL3R3aXR0ZXIvc2VyZWZrYS8xMjguanBnXCIsXG4gIFwiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL3VpZmFjZXMvZmFjZXMvdHdpdHRlci9pZmFyYWZvbm93LzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3Zpa2FzdmluZm90ZWNoLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL3VycnV0aW1lb2xpLzEyOC5qcGdcIixcbiAgXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vdWlmYWNlcy9mYWNlcy90d2l0dGVyL2FyZWFuZGFjb20vMTI4LmpwZ1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJjb21cIixcbiAgXCJiaXpcIixcbiAgXCJpbmZvXCIsXG4gIFwibmFtZVwiLFxuICBcIm5ldFwiLFxuICBcIm9yZ1wiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJnbWFpbC5jb21cIixcbiAgXCJ5YWhvby5jb21cIixcbiAgXCJob3RtYWlsLmNvbVwiXG5dO1xuIiwidmFyIGludGVybmV0ID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGludGVybmV0O1xuaW50ZXJuZXQuZnJlZV9lbWFpbCA9IHJlcXVpcmUoXCIuL2ZyZWVfZW1haWxcIik7XG5pbnRlcm5ldC5kb21haW5fc3VmZml4ID0gcmVxdWlyZShcIi4vZG9tYWluX3N1ZmZpeFwiKTtcbmludGVybmV0LmF2YXRhcl91cmkgPSByZXF1aXJlKFwiLi9hdmF0YXJfdXJpXCIpO1xuIiwidmFyIGxvcmVtID0ge307XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGxvcmVtO1xubG9yZW0ud29yZHMgPSByZXF1aXJlKFwiLi93b3Jkc1wiKTtcbmxvcmVtLnN1cHBsZW1lbnRhbCA9IHJlcXVpcmUoXCIuL3N1cHBsZW1lbnRhbFwiKTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiYWJiYXNcIixcbiAgXCJhYmR1Y29cIixcbiAgXCJhYmVvXCIsXG4gIFwiYWJzY2lkb1wiLFxuICBcImFic2NvbmRpdHVzXCIsXG4gIFwiYWJzZW5zXCIsXG4gIFwiYWJzb3JiZW9cIixcbiAgXCJhYnNxdWVcIixcbiAgXCJhYnN0ZXJnb1wiLFxuICBcImFic3VtXCIsXG4gIFwiYWJ1bmRhbnNcIixcbiAgXCJhYnV0b3JcIixcbiAgXCJhY2NlZG9cIixcbiAgXCJhY2NlbmRvXCIsXG4gIFwiYWNjZXB0dXNcIixcbiAgXCJhY2NpcGlvXCIsXG4gIFwiYWNjb21tb2RvXCIsXG4gIFwiYWNjdXNhdG9yXCIsXG4gIFwiYWNlclwiLFxuICBcImFjZXJiaXRhc1wiLFxuICBcImFjZXJ2dXNcIixcbiAgXCJhY2lkdXNcIixcbiAgXCJhY2llc1wiLFxuICBcImFjcXVpcm9cIixcbiAgXCJhY3NpXCIsXG4gIFwiYWRhbW9cIixcbiAgXCJhZGF1Z2VvXCIsXG4gIFwiYWRkb1wiLFxuICBcImFkZHVjb1wiLFxuICBcImFkZW1wdGlvXCIsXG4gIFwiYWRlb1wiLFxuICBcImFkZXB0aW9cIixcbiAgXCJhZGZlY3R1c1wiLFxuICBcImFkZmVyb1wiLFxuICBcImFkZmljaW9cIixcbiAgXCJhZGZsaWN0b1wiLFxuICBcImFkaGFlcm9cIixcbiAgXCJhZGh1Y1wiLFxuICBcImFkaWNpb1wiLFxuICBcImFkaW1wbGVvXCIsXG4gIFwiYWRpbnZlbnRpdGlhc1wiLFxuICBcImFkaXBpc2NvclwiLFxuICBcImFkaXV2b1wiLFxuICBcImFkbWluaXN0cmF0aW9cIixcbiAgXCJhZG1pcmF0aW9cIixcbiAgXCJhZG1pdHRvXCIsXG4gIFwiYWRtb25lb1wiLFxuICBcImFkbW92ZW9cIixcbiAgXCJhZG51b1wiLFxuICBcImFkb3B0b1wiLFxuICBcImFkc2lkdWVcIixcbiAgXCJhZHN0cmluZ29cIixcbiAgXCJhZHN1ZXNjb1wiLFxuICBcImFkc3VtXCIsXG4gIFwiYWR1bGF0aW9cIixcbiAgXCJhZHVsZXNjZW5zXCIsXG4gIFwiYWR1bHR1c1wiLFxuICBcImFkdXJvXCIsXG4gIFwiYWR2ZW5pb1wiLFxuICBcImFkdmVyc3VzXCIsXG4gIFwiYWR2b2NvXCIsXG4gIFwiYWVkaWZpY2l1bVwiLFxuICBcImFlZ2VyXCIsXG4gIFwiYWVncmVcIixcbiAgXCJhZWdyb3RhdGlvXCIsXG4gIFwiYWVncnVzXCIsXG4gIFwiYWVuZXVzXCIsXG4gIFwiYWVxdWl0YXNcIixcbiAgXCJhZXF1dXNcIixcbiAgXCJhZXJcIixcbiAgXCJhZXN0YXNcIixcbiAgXCJhZXN0aXZ1c1wiLFxuICBcImFlc3R1c1wiLFxuICBcImFldGFzXCIsXG4gIFwiYWV0ZXJudXNcIixcbiAgXCJhZ2VyXCIsXG4gIFwiYWdnZXJvXCIsXG4gIFwiYWdncmVkaW9yXCIsXG4gIFwiYWduaXRpb1wiLFxuICBcImFnbm9zY29cIixcbiAgXCJhZ29cIixcbiAgXCJhaXRcIixcbiAgXCJhaXVudFwiLFxuICBcImFsaWVudXNcIixcbiAgXCJhbGlpXCIsXG4gIFwiYWxpb3F1aVwiLFxuICBcImFsaXF1YVwiLFxuICBcImFsaXVzXCIsXG4gIFwiYWxsYXR1c1wiLFxuICBcImFsb1wiLFxuICBcImFsdGVyXCIsXG4gIFwiYWx0dXNcIixcbiAgXCJhbHZldXNcIixcbiAgXCJhbWFyaXR1ZG9cIixcbiAgXCJhbWJpdHVzXCIsXG4gIFwiYW1idWxvXCIsXG4gIFwiYW1pY2l0aWFcIixcbiAgXCJhbWljdWx1bVwiLFxuICBcImFtaXNzaW9cIixcbiAgXCJhbWl0YVwiLFxuICBcImFtaXR0b1wiLFxuICBcImFtb1wiLFxuICBcImFtb3JcIixcbiAgXCJhbW92ZW9cIixcbiAgXCJhbXBsZXh1c1wiLFxuICBcImFtcGxpdHVkb1wiLFxuICBcImFtcGx1c1wiLFxuICBcImFuY2lsbGFcIixcbiAgXCJhbmdlbHVzXCIsXG4gIFwiYW5ndWx1c1wiLFxuICBcImFuZ3VzdHVzXCIsXG4gIFwiYW5pbWFkdmVydG9cIixcbiAgXCJhbmltaVwiLFxuICBcImFuaW11c1wiLFxuICBcImFubnVzXCIsXG4gIFwiYW5zZXJcIixcbiAgXCJhbnRlXCIsXG4gIFwiYW50ZWFcIixcbiAgXCJhbnRlcG9ub1wiLFxuICBcImFudGlxdXVzXCIsXG4gIFwiYXBlcmlvXCIsXG4gIFwiYXBlcnRlXCIsXG4gIFwiYXBvc3RvbHVzXCIsXG4gIFwiYXBwYXJhdHVzXCIsXG4gIFwiYXBwZWxsb1wiLFxuICBcImFwcG9ub1wiLFxuICBcImFwcG9zaXR1c1wiLFxuICBcImFwcHJvYm9cIixcbiAgXCJhcHRvXCIsXG4gIFwiYXB0dXNcIixcbiAgXCJhcHVkXCIsXG4gIFwiYXF1YVwiLFxuICBcImFyYVwiLFxuICBcImFyYW5lYVwiLFxuICBcImFyYml0cm9cIixcbiAgXCJhcmJvclwiLFxuICBcImFyYnVzdHVtXCIsXG4gIFwiYXJjYVwiLFxuICBcImFyY2VvXCIsXG4gIFwiYXJjZXNzb1wiLFxuICBcImFyY3VzXCIsXG4gIFwiYXJnZW50dW1cIixcbiAgXCJhcmd1bWVudHVtXCIsXG4gIFwiYXJndW9cIixcbiAgXCJhcm1hXCIsXG4gIFwiYXJtYXJpdW1cIixcbiAgXCJhcm1vXCIsXG4gIFwiYXJvXCIsXG4gIFwiYXJzXCIsXG4gIFwiYXJ0aWN1bHVzXCIsXG4gIFwiYXJ0aWZpY2lvc2VcIixcbiAgXCJhcnRvXCIsXG4gIFwiYXJ4XCIsXG4gIFwiYXNjaXNjb1wiLFxuICBcImFzY2l0XCIsXG4gIFwiYXNwZXJcIixcbiAgXCJhc3BpY2lvXCIsXG4gIFwiYXNwb3J0b1wiLFxuICBcImFzc2VudGF0b3JcIixcbiAgXCJhc3RydW1cIixcbiAgXCJhdGF2dXNcIixcbiAgXCJhdGVyXCIsXG4gIFwiYXRxdWlcIixcbiAgXCJhdHJvY2l0YXNcIixcbiAgXCJhdHJveFwiLFxuICBcImF0dGVyb1wiLFxuICBcImF0dG9sbG9cIixcbiAgXCJhdHRvbmJpdHVzXCIsXG4gIFwiYXVjdG9yXCIsXG4gIFwiYXVjdHVzXCIsXG4gIFwiYXVkYWNpYVwiLFxuICBcImF1ZGF4XCIsXG4gIFwiYXVkZW50aWFcIixcbiAgXCJhdWRlb1wiLFxuICBcImF1ZGlvXCIsXG4gIFwiYXVkaXRvclwiLFxuICBcImF1ZmVyb1wiLFxuICBcImF1cmV1c1wiLFxuICBcImF1cmlzXCIsXG4gIFwiYXVydW1cIixcbiAgXCJhdXRcIixcbiAgXCJhdXRlbVwiLFxuICBcImF1dHVzXCIsXG4gIFwiYXV4aWxpdW1cIixcbiAgXCJhdmFyaXRpYVwiLFxuICBcImF2YXJ1c1wiLFxuICBcImF2ZWhvXCIsXG4gIFwiYXZlcnRvXCIsXG4gIFwiYXZvY29cIixcbiAgXCJiYWl1bHVzXCIsXG4gIFwiYmFsYnVzXCIsXG4gIFwiYmFyYmFcIixcbiAgXCJiYXJkdXNcIixcbiAgXCJiYXNpdW1cIixcbiAgXCJiZWF0dXNcIixcbiAgXCJiZWxsaWN1c1wiLFxuICBcImJlbGx1bVwiLFxuICBcImJlbmVcIixcbiAgXCJiZW5lZmljaXVtXCIsXG4gIFwiYmVuZXZvbGVudGlhXCIsXG4gIFwiYmVuaWduZVwiLFxuICBcImJlc3RpYVwiLFxuICBcImJpYm9cIixcbiAgXCJiaXNcIixcbiAgXCJibGFuZGlvclwiLFxuICBcImJvbnVzXCIsXG4gIFwiYm9zXCIsXG4gIFwiYnJldmlzXCIsXG4gIFwiY2Fkb1wiLFxuICBcImNhZWN1c1wiLFxuICBcImNhZWxlc3Rpc1wiLFxuICBcImNhZWx1bVwiLFxuICBcImNhbGFtaXRhc1wiLFxuICBcImNhbGNhclwiLFxuICBcImNhbGNvXCIsXG4gIFwiY2FsY3VsdXNcIixcbiAgXCJjYWxsaWRlXCIsXG4gIFwiY2FtcGFuYVwiLFxuICBcImNhbmRpZHVzXCIsXG4gIFwiY2FuaXNcIixcbiAgXCJjYW5vbmljdXNcIixcbiAgXCJjYW50b1wiLFxuICBcImNhcGlsbHVzXCIsXG4gIFwiY2FwaW9cIixcbiAgXCJjYXBpdHVsdXNcIixcbiAgXCJjYXB0b1wiLFxuICBcImNhcHV0XCIsXG4gIFwiY2FyYm9cIixcbiAgXCJjYXJjZXJcIixcbiAgXCJjYXJlb1wiLFxuICBcImNhcmllc1wiLFxuICBcImNhcmlvc3VzXCIsXG4gIFwiY2FyaXRhc1wiLFxuICBcImNhcm1lblwiLFxuICBcImNhcnBvXCIsXG4gIFwiY2FydXNcIixcbiAgXCJjYXNzb1wiLFxuICBcImNhc3RlXCIsXG4gIFwiY2FzdXNcIixcbiAgXCJjYXRlbmFcIixcbiAgXCJjYXRlcnZhXCIsXG4gIFwiY2F0dHVzXCIsXG4gIFwiY2F1ZGFcIixcbiAgXCJjYXVzYVwiLFxuICBcImNhdXRlXCIsXG4gIFwiY2F2ZW9cIixcbiAgXCJjYXZ1c1wiLFxuICBcImNlZG9cIixcbiAgXCJjZWxlYnJlclwiLFxuICBcImNlbGVyXCIsXG4gIFwiY2Vsb1wiLFxuICBcImNlbmFcIixcbiAgXCJjZW5hY3VsdW1cIixcbiAgXCJjZW5vXCIsXG4gIFwiY2Vuc3VyYVwiLFxuICBcImNlbnR1bVwiLFxuICBcImNlcm5vXCIsXG4gIFwiY2VybnV1c1wiLFxuICBcImNlcnRlXCIsXG4gIFwiY2VydG9cIixcbiAgXCJjZXJ0dXNcIixcbiAgXCJjZXJ2dXNcIixcbiAgXCJjZXRlcmFcIixcbiAgXCJjaGFyaXNtYVwiLFxuICBcImNoaXJvZ3JhcGh1bVwiLFxuICBcImNpYm9cIixcbiAgXCJjaWJ1c1wiLFxuICBcImNpY3V0YVwiLFxuICBcImNpbGljaXVtXCIsXG4gIFwiY2ltZW50YXJpdXNcIixcbiAgXCJjaW1pbmF0aW9cIixcbiAgXCJjaW5pc1wiLFxuICBcImNpcmN1bXZlbmlvXCIsXG4gIFwiY2l0b1wiLFxuICBcImNpdmlzXCIsXG4gIFwiY2l2aXRhc1wiLFxuICBcImNsYW1cIixcbiAgXCJjbGFtb1wiLFxuICBcImNsYXJvXCIsXG4gIFwiY2xhcnVzXCIsXG4gIFwiY2xhdWRlb1wiLFxuICBcImNsYXVzdHJ1bVwiLFxuICBcImNsZW1lbnRpYVwiLFxuICBcImNsaWJhbnVzXCIsXG4gIFwiY29hZHVuYXRpb1wiLFxuICBcImNvYWVncmVzY29cIixcbiAgXCJjb2VwaVwiLFxuICBcImNvZXJjZW9cIixcbiAgXCJjb2dpdG9cIixcbiAgXCJjb2duYXR1c1wiLFxuICBcImNvZ25vbWVuXCIsXG4gIFwiY29nb1wiLFxuICBcImNvaGFlcm9cIixcbiAgXCJjb2hpYmVvXCIsXG4gIFwiY29ob3JzXCIsXG4gIFwiY29sbGlnb1wiLFxuICBcImNvbGxvY29cIixcbiAgXCJjb2xsdW1cIixcbiAgXCJjb2xvXCIsXG4gIFwiY29sb3JcIixcbiAgXCJjb21hXCIsXG4gIFwiY29tYmlib1wiLFxuICBcImNvbWJ1cm9cIixcbiAgXCJjb21lZG9cIixcbiAgXCJjb21lc1wiLFxuICBcImNvbWV0ZXNcIixcbiAgXCJjb21pc1wiLFxuICBcImNvbWl0YXR1c1wiLFxuICBcImNvbW1lbW9yb1wiLFxuICBcImNvbW1pbm9yXCIsXG4gIFwiY29tbW9kb1wiLFxuICBcImNvbW11bmlzXCIsXG4gIFwiY29tcGFyb1wiLFxuICBcImNvbXBlbGxvXCIsXG4gIFwiY29tcGxlY3R1c1wiLFxuICBcImNvbXBvbm9cIixcbiAgXCJjb21wcmVoZW5kb1wiLFxuICBcImNvbXB0dXNcIixcbiAgXCJjb25hdHVzXCIsXG4gIFwiY29uY2Vkb1wiLFxuICBcImNvbmNpZG9cIixcbiAgXCJjb25jdWxjb1wiLFxuICBcImNvbmRpY29cIixcbiAgXCJjb25kdWNvXCIsXG4gIFwiY29uZmVyb1wiLFxuICBcImNvbmZpZG9cIixcbiAgXCJjb25mb3J0b1wiLFxuICBcImNvbmZ1Z29cIixcbiAgXCJjb25ncmVnYXRpb1wiLFxuICBcImNvbmljaW9cIixcbiAgXCJjb25pZWN0b1wiLFxuICBcImNvbml0b3JcIixcbiAgXCJjb25pdXJhdGlvXCIsXG4gIFwiY29ub3JcIixcbiAgXCJjb25xdWVyb3JcIixcbiAgXCJjb25zY2VuZG9cIixcbiAgXCJjb25zZXJ2b1wiLFxuICBcImNvbnNpZGVyb1wiLFxuICBcImNvbnNwZXJnb1wiLFxuICBcImNvbnN0YW5zXCIsXG4gIFwiY29uc3Vhc29yXCIsXG4gIFwiY29udGFiZXNjb1wiLFxuICBcImNvbnRlZ29cIixcbiAgXCJjb250aWdvXCIsXG4gIFwiY29udHJhXCIsXG4gIFwiY29udHVyYm9cIixcbiAgXCJjb252ZW50dXNcIixcbiAgXCJjb252b2NvXCIsXG4gIFwiY29waWFcIixcbiAgXCJjb3Bpb3NlXCIsXG4gIFwiY29ybnVcIixcbiAgXCJjb3JvbmFcIixcbiAgXCJjb3JwdXNcIixcbiAgXCJjb3JyZXB0aXVzXCIsXG4gIFwiY29ycmlnb1wiLFxuICBcImNvcnJvYm9yb1wiLFxuICBcImNvcnJ1bXBvXCIsXG4gIFwiY29ydXNjdXNcIixcbiAgXCJjb3RpZGllXCIsXG4gIFwiY3JhcHVsYVwiLFxuICBcImNyYXNcIixcbiAgXCJjcmFzdGludXNcIixcbiAgXCJjcmVhdG9yXCIsXG4gIFwiY3JlYmVyXCIsXG4gIFwiY3JlYnJvXCIsXG4gIFwiY3JlZG9cIixcbiAgXCJjcmVvXCIsXG4gIFwiY3JlcHRpb1wiLFxuICBcImNyZXB1c2N1bHVtXCIsXG4gIFwiY3Jlc2NvXCIsXG4gIFwiY3JldGFcIixcbiAgXCJjcmlicm9cIixcbiAgXCJjcmluaXNcIixcbiAgXCJjcnVjaWFtZW50dW1cIixcbiAgXCJjcnVkZWxpc1wiLFxuICBcImNydWVudHVzXCIsXG4gIFwiY3J1clwiLFxuICBcImNydXN0dWx1bVwiLFxuICBcImNydXhcIixcbiAgXCJjdWJpY3VsYXJpc1wiLFxuICBcImN1Yml0dW1cIixcbiAgXCJjdWJvXCIsXG4gIFwiY3VpXCIsXG4gIFwiY3VpdXNcIixcbiAgXCJjdWxwYVwiLFxuICBcImN1bHBvXCIsXG4gIFwiY3VsdGVsbHVzXCIsXG4gIFwiY3VsdHVyYVwiLFxuICBcImN1bVwiLFxuICBcImN1bmFidWxhXCIsXG4gIFwiY3VuYWVcIixcbiAgXCJjdW5jdGF0aW9cIixcbiAgXCJjdXBpZGl0YXNcIixcbiAgXCJjdXBpb1wiLFxuICBcImN1cHBlZGlhXCIsXG4gIFwiY3VwcmVzc3VzXCIsXG4gIFwiY3VyXCIsXG4gIFwiY3VyYVwiLFxuICBcImN1cmF0aW9cIixcbiAgXCJjdXJpYVwiLFxuICBcImN1cmlvc2l0YXNcIixcbiAgXCJjdXJpc1wiLFxuICBcImN1cm9cIixcbiAgXCJjdXJyaWN1bHVtXCIsXG4gIFwiY3VycnVzXCIsXG4gIFwiY3Vyc2ltXCIsXG4gIFwiY3Vyc29cIixcbiAgXCJjdXJzdXNcIixcbiAgXCJjdXJ0b1wiLFxuICBcImN1cnR1c1wiLFxuICBcImN1cnZvXCIsXG4gIFwiY3VydnVzXCIsXG4gIFwiY3VzdG9kaWFcIixcbiAgXCJkYW1uYXRpb1wiLFxuICBcImRhbW5vXCIsXG4gIFwiZGFwaWZlclwiLFxuICBcImRlYmVvXCIsXG4gIFwiZGViaWxpdG9cIixcbiAgXCJkZWNlbnNcIixcbiAgXCJkZWNlcm5vXCIsXG4gIFwiZGVjZXRcIixcbiAgXCJkZWNpbXVzXCIsXG4gIFwiZGVjaXBpb1wiLFxuICBcImRlY29yXCIsXG4gIFwiZGVjcmV0dW1cIixcbiAgXCJkZWN1bWJvXCIsXG4gIFwiZGVkZWNvclwiLFxuICBcImRlZGljb1wiLFxuICBcImRlZHVjb1wiLFxuICBcImRlZmFlY29cIixcbiAgXCJkZWZlbmRvXCIsXG4gIFwiZGVmZXJvXCIsXG4gIFwiZGVmZXNzdXNcIixcbiAgXCJkZWZldGlzY29yXCIsXG4gIFwiZGVmaWNpb1wiLFxuICBcImRlZmlnb1wiLFxuICBcImRlZmxlb1wiLFxuICBcImRlZmx1b1wiLFxuICBcImRlZnVuZ29cIixcbiAgXCJkZWdlbmVyb1wiLFxuICBcImRlZ2Vyb1wiLFxuICBcImRlZ3VzdG9cIixcbiAgXCJkZWluZGVcIixcbiAgXCJkZWxlY3RhdGlvXCIsXG4gIFwiZGVsZWdvXCIsXG4gIFwiZGVsZW9cIixcbiAgXCJkZWxpYmVyb1wiLFxuICBcImRlbGljYXRlXCIsXG4gIFwiZGVsaW5xdW9cIixcbiAgXCJkZWx1ZG9cIixcbiAgXCJkZW1lbnNcIixcbiAgXCJkZW1lcmdvXCIsXG4gIFwiZGVtaXR0b1wiLFxuICBcImRlbW9cIixcbiAgXCJkZW1vbnN0cm9cIixcbiAgXCJkZW1vcm9yXCIsXG4gIFwiZGVtdWxjZW9cIixcbiAgXCJkZW11bVwiLFxuICBcImRlbmVnb1wiLFxuICBcImRlbmlxdWVcIixcbiAgXCJkZW5zXCIsXG4gIFwiZGVudW5jaW9cIixcbiAgXCJkZW51b1wiLFxuICBcImRlb3JzdW1cIixcbiAgXCJkZXBlcmVvXCIsXG4gIFwiZGVwb25vXCIsXG4gIFwiZGVwb3B1bG9cIixcbiAgXCJkZXBvcnRvXCIsXG4gIFwiZGVwcmFlZG9yXCIsXG4gIFwiZGVwcmVjYXRvclwiLFxuICBcImRlcHJpbW9cIixcbiAgXCJkZXByb21vXCIsXG4gIFwiZGVwdWxzb1wiLFxuICBcImRlcHV0b1wiLFxuICBcImRlcmVsaW5xdW9cIixcbiAgXCJkZXJpZGVvXCIsXG4gIFwiZGVyaXBpb1wiLFxuICBcImRlc2lkZXJvXCIsXG4gIFwiZGVzaW5vXCIsXG4gIFwiZGVzaXBpb1wiLFxuICBcImRlc29sb1wiLFxuICBcImRlc3BhcmF0dXNcIixcbiAgXCJkZXNwZWN0b1wiLFxuICBcImRlc3Bpcm1hdGlvXCIsXG4gIFwiaW5maXRcIixcbiAgXCJpbmZsYW1tYXRpb1wiLFxuICBcInBhZW5zXCIsXG4gIFwicGF0aW9yXCIsXG4gIFwicGF0cmlhXCIsXG4gIFwicGF0cm9jaW5vclwiLFxuICBcInBhdHJ1dXNcIixcbiAgXCJwYXVjaVwiLFxuICBcInBhdWxhdGltXCIsXG4gIFwicGF1cGVyXCIsXG4gIFwicGF4XCIsXG4gIFwicGVjY2F0dXNcIixcbiAgXCJwZWNjb1wiLFxuICBcInBlY3RvXCIsXG4gIFwicGVjdHVzXCIsXG4gIFwicGVjdW5pYVwiLFxuICBcInBlY3VzXCIsXG4gIFwicGVpb3JcIixcbiAgXCJwZWxcIixcbiAgXCJvY2VyXCIsXG4gIFwic29jaXVzXCIsXG4gIFwic29kYWxpdGFzXCIsXG4gIFwic29sXCIsXG4gIFwic29sZW9cIixcbiAgXCJzb2xpb1wiLFxuICBcInNvbGl0dWRvXCIsXG4gIFwic29saXVtXCIsXG4gIFwic29sbGVyc1wiLFxuICBcInNvbGxpY2l0b1wiLFxuICBcInNvbHVtXCIsXG4gIFwic29sdXNcIixcbiAgXCJzb2x1dGlvXCIsXG4gIFwic29sdm9cIixcbiAgXCJzb21uaWN1bG9zdXNcIixcbiAgXCJzb21udXNcIixcbiAgXCJzb25pdHVzXCIsXG4gIFwic29ub1wiLFxuICBcInNvcGhpc21hdGFcIixcbiAgXCJzb3BvclwiLFxuICBcInNvcmRlb1wiLFxuICBcInNvcnRpdHVzXCIsXG4gIFwic3BhcmdvXCIsXG4gIFwic3BlY2lvc3VzXCIsXG4gIFwic3BlY3RhY3VsdW1cIixcbiAgXCJzcGVjdWx1bVwiLFxuICBcInNwZXJub1wiLFxuICBcInNwZXJvXCIsXG4gIFwic3Blc1wiLFxuICBcInNwaWN1bHVtXCIsXG4gIFwic3Bpcml0dXNcIixcbiAgXCJzcG9saWF0aW9cIixcbiAgXCJzcG9udGVcIixcbiAgXCJzdGFiaWxpc1wiLFxuICBcInN0YXRpbVwiLFxuICBcInN0YXR1YVwiLFxuICBcInN0ZWxsYVwiLFxuICBcInN0aWxsaWNpZGl1bVwiLFxuICBcInN0aXBlc1wiLFxuICBcInN0aXBzXCIsXG4gIFwic3RvXCIsXG4gIFwic3RyZW51dXNcIixcbiAgXCJzdHJ1ZXNcIixcbiAgXCJzdHVkaW9cIixcbiAgXCJzdHVsdHVzXCIsXG4gIFwic3VhZGVvXCIsXG4gIFwic3Vhc29yaWFcIixcbiAgXCJzdWJcIixcbiAgXCJzdWJpdG9cIixcbiAgXCJzdWJpdW5nb1wiLFxuICBcInN1YmxpbWVcIixcbiAgXCJzdWJuZWN0b1wiLFxuICBcInN1YnNlY29cIixcbiAgXCJzdWJzdGFudGlhXCIsXG4gIFwic3VidmVuaW9cIixcbiAgXCJzdWNjZWRvXCIsXG4gIFwic3VjY3Vycm9cIixcbiAgXCJzdWZmaWNpb1wiLFxuICBcInN1ZmZvY29cIixcbiAgXCJzdWZmcmFnaXVtXCIsXG4gIFwic3VnZ2Vyb1wiLFxuICBcInN1aVwiLFxuICBcInN1bHVtXCIsXG4gIFwic3VtXCIsXG4gIFwic3VtbWFcIixcbiAgXCJzdW1taXNzZVwiLFxuICBcInN1bW1vcGVyZVwiLFxuICBcInN1bW9cIixcbiAgXCJzdW1wdHVzXCIsXG4gIFwic3VwZWxsZXhcIixcbiAgXCJzdXBlclwiLFxuICBcInN1cHBlbGxleFwiLFxuICBcInN1cHBsYW50b1wiLFxuICBcInN1cHBvbm9cIixcbiAgXCJzdXByYVwiLFxuICBcInN1cmN1bHVzXCIsXG4gIFwic3VyZ29cIixcbiAgXCJzdXJzdW1cIixcbiAgXCJzdXNjaXBpb1wiLFxuICBcInN1c3BlbmRvXCIsXG4gIFwic3VzdGluZW9cIixcbiAgXCJzdXVzXCIsXG4gIFwic3luYWdvZ2FcIixcbiAgXCJ0YWJlbGxhXCIsXG4gIFwidGFiZXJudXNcIixcbiAgXCJ0YWJlc2NvXCIsXG4gIFwidGFiZ29cIixcbiAgXCJ0YWJ1bGFcIixcbiAgXCJ0YWNlb1wiLFxuICBcInRhY3R1c1wiLFxuICBcInRhZWRpdW1cIixcbiAgXCJ0YWxpb1wiLFxuICBcInRhbGlzXCIsXG4gIFwidGFsdXNcIixcbiAgXCJ0YW1cIixcbiAgXCJ0YW1kaXVcIixcbiAgXCJ0YW1lblwiLFxuICBcInRhbWV0c2lcIixcbiAgXCJ0YW1pc2l1bVwiLFxuICBcInRhbXF1YW1cIixcbiAgXCJ0YW5kZW1cIixcbiAgXCJ0YW50aWxsdXNcIixcbiAgXCJ0YW50dW1cIixcbiAgXCJ0YXJkdXNcIixcbiAgXCJ0ZWdvXCIsXG4gIFwidGVtZXJpdGFzXCIsXG4gIFwidGVtcGVyYW50aWFcIixcbiAgXCJ0ZW1wbHVtXCIsXG4gIFwidGVtcHRhdGlvXCIsXG4gIFwidGVtcHVzXCIsXG4gIFwidGVuYXhcIixcbiAgXCJ0ZW5kb1wiLFxuICBcInRlbmVvXCIsXG4gIFwidGVuZXJcIixcbiAgXCJ0ZW51aXNcIixcbiAgXCJ0ZW51c1wiLFxuICBcInRlcGVzY29cIixcbiAgXCJ0ZXBpZHVzXCIsXG4gIFwidGVyXCIsXG4gIFwidGVyZWJyb1wiLFxuICBcInRlcmVzXCIsXG4gIFwidGVyZ2FcIixcbiAgXCJ0ZXJnZW9cIixcbiAgXCJ0ZXJnaXZlcnNhdGlvXCIsXG4gIFwidGVyZ29cIixcbiAgXCJ0ZXJndW1cIixcbiAgXCJ0ZXJtZXNcIixcbiAgXCJ0ZXJtaW5hdGlvXCIsXG4gIFwidGVyb1wiLFxuICBcInRlcnJhXCIsXG4gIFwidGVycmVvXCIsXG4gIFwidGVycml0b1wiLFxuICBcInRlcnJvclwiLFxuICBcInRlcnN1c1wiLFxuICBcInRlcnRpdXNcIixcbiAgXCJ0ZXN0aW1vbml1bVwiLFxuICBcInRleG9cIixcbiAgXCJ0ZXh0aWxpc1wiLFxuICBcInRleHRvclwiLFxuICBcInRleHR1c1wiLFxuICBcInRoYWxhc3NpbnVzXCIsXG4gIFwidGhlYXRydW1cIixcbiAgXCJ0aGVjYVwiLFxuICBcInRoZW1hXCIsXG4gIFwidGhlb2xvZ3VzXCIsXG4gIFwidGhlcm1hZVwiLFxuICBcInRoZXNhdXJ1c1wiLFxuICBcInRoZXNpc1wiLFxuICBcInRob3JheFwiLFxuICBcInRoeW1icmFcIixcbiAgXCJ0aHltdW1cIixcbiAgXCJ0aWJpXCIsXG4gIFwidGltaWR1c1wiLFxuICBcInRpbW9yXCIsXG4gIFwidGl0dWx1c1wiLFxuICBcInRvbGVyb1wiLFxuICBcInRvbGxvXCIsXG4gIFwidG9uZGVvXCIsXG4gIFwidG9uc29yXCIsXG4gIFwidG9ycXVlb1wiLFxuICBcInRvcnJlbnNcIixcbiAgXCJ0b3RcIixcbiAgXCJ0b3RpZGVtXCIsXG4gIFwidG90aWVzXCIsXG4gIFwidG90dXNcIixcbiAgXCJ0cmFjdG9cIixcbiAgXCJ0cmFkb1wiLFxuICBcInRyYWhvXCIsXG4gIFwidHJhbnNcIixcbiAgXCJ0cmVkZWNpbVwiLFxuICBcInRyZW1vXCIsXG4gIFwidHJlcGlkZVwiLFxuICBcInRyZXNcIixcbiAgXCJ0cmlidW9cIixcbiAgXCJ0cmljZXNpbXVzXCIsXG4gIFwidHJpZHVhbmFcIixcbiAgXCJ0cmlnaW50YVwiLFxuICBcInRyaXB1ZGlvXCIsXG4gIFwidHJpc3Rpc1wiLFxuICBcInRyaXVtcGh1c1wiLFxuICBcInRydWNpZG9cIixcbiAgXCJ0cnVjdWxlbnRlclwiLFxuICBcInR1YmluZXVzXCIsXG4gIFwidHVpXCIsXG4gIFwidHVtXCIsXG4gIFwidHVtdWx0dXNcIixcbiAgXCJ0dW5jXCIsXG4gIFwidHVyYmFcIixcbiAgXCJ0dXJib1wiLFxuICBcInR1cnBlXCIsXG4gIFwidHVycGlzXCIsXG4gIFwidHV0YW1lblwiLFxuICBcInR1dGlzXCIsXG4gIFwidHlyYW5udXNcIixcbiAgXCJ1YmVycmltZVwiLFxuICBcInViaVwiLFxuICBcInVsY2lzY29yXCIsXG4gIFwidWxsdXNcIixcbiAgXCJ1bHRlcml1c1wiLFxuICBcInVsdGlvXCIsXG4gIFwidWx0cmFcIixcbiAgXCJ1bWJyYVwiLFxuICBcInVtZXJ1c1wiLFxuICBcInVtcXVhbVwiLFxuICBcInVuYVwiLFxuICBcInVuZGVcIixcbiAgXCJ1bmRpcXVlXCIsXG4gIFwidW5pdmVyc2VcIixcbiAgXCJ1bnVzXCIsXG4gIFwidXJiYW51c1wiLFxuICBcInVyYnNcIixcbiAgXCJ1cmVkb1wiLFxuICBcInVzaXRhc1wiLFxuICBcInVzcXVlXCIsXG4gIFwidXN0aWxvXCIsXG4gIFwidXN0dWxvXCIsXG4gIFwidXN1c1wiLFxuICBcInV0ZXJcIixcbiAgXCJ1dGVycXVlXCIsXG4gIFwidXRpbGlzXCIsXG4gIFwidXRpcXVlXCIsXG4gIFwidXRvclwiLFxuICBcInV0cG90ZVwiLFxuICBcInV0cmltcXVlXCIsXG4gIFwidXRyb3F1ZVwiLFxuICBcInV0cnVtXCIsXG4gIFwidXhvclwiLFxuICBcInZhY29cIixcbiAgXCJ2YWN1dXNcIixcbiAgXCJ2YWRvXCIsXG4gIFwidmFlXCIsXG4gIFwidmFsZGVcIixcbiAgXCJ2YWxlbnNcIixcbiAgXCJ2YWxlb1wiLFxuICBcInZhbGV0dWRvXCIsXG4gIFwidmFsaWR1c1wiLFxuICBcInZhbGx1bVwiLFxuICBcInZhcHVsdXNcIixcbiAgXCJ2YXJpZXRhc1wiLFxuICBcInZhcml1c1wiLFxuICBcInZlaGVtZW5zXCIsXG4gIFwidmVsXCIsXG4gIFwidmVsb2NpdGVyXCIsXG4gIFwidmVsdW1cIixcbiAgXCJ2ZWx1dFwiLFxuICBcInZlbmlhXCIsXG4gIFwidmVuaW9cIixcbiAgXCJ2ZW50aXRvXCIsXG4gIFwidmVudG9zdXNcIixcbiAgXCJ2ZW50dXNcIixcbiAgXCJ2ZW51c3Rhc1wiLFxuICBcInZlclwiLFxuICBcInZlcmJlcmFcIixcbiAgXCJ2ZXJidW1cIixcbiAgXCJ2ZXJlXCIsXG4gIFwidmVyZWN1bmRpYVwiLFxuICBcInZlcmVvclwiLFxuICBcInZlcmdvXCIsXG4gIFwidmVyaXRhc1wiLFxuICBcInZlcm9cIixcbiAgXCJ2ZXJzdXNcIixcbiAgXCJ2ZXJ0b1wiLFxuICBcInZlcnVtdGFtZW5cIixcbiAgXCJ2ZXJ1c1wiLFxuICBcInZlc2NvXCIsXG4gIFwidmVzaWNhXCIsXG4gIFwidmVzcGVyXCIsXG4gIFwidmVzcGlsbG9cIixcbiAgXCJ2ZXN0ZXJcIixcbiAgXCJ2ZXN0aWdpdW1cIixcbiAgXCJ2ZXN0cnVtXCIsXG4gIFwidmV0dXNcIixcbiAgXCJ2aWFcIixcbiAgXCJ2aWNpbnVzXCIsXG4gIFwidmljaXNzaXR1ZG9cIixcbiAgXCJ2aWN0b3JpYVwiLFxuICBcInZpY3R1c1wiLFxuICBcInZpZGVsaWNldFwiLFxuICBcInZpZGVvXCIsXG4gIFwidmlkdWF0YVwiLFxuICBcInZpZHVvXCIsXG4gIFwidmlnaWxvXCIsXG4gIFwidmlnb3JcIixcbiAgXCJ2aWxpY3VzXCIsXG4gIFwidmlsaXNcIixcbiAgXCJ2aWxpdGFzXCIsXG4gIFwidmlsbGFcIixcbiAgXCJ2aW5jb1wiLFxuICBcInZpbmN1bHVtXCIsXG4gIFwidmluZGljb1wiLFxuICBcInZpbml0b3JcIixcbiAgXCJ2aW51bVwiLFxuICBcInZpclwiLFxuICBcInZpcmdhXCIsXG4gIFwidmlyZ29cIixcbiAgXCJ2aXJpZGlzXCIsXG4gIFwidmlyaWxpdGVyXCIsXG4gIFwidmlydHVzXCIsXG4gIFwidmlzXCIsXG4gIFwidmlzY3VzXCIsXG4gIFwidml0YVwiLFxuICBcInZpdGlvc3VzXCIsXG4gIFwidml0aXVtXCIsXG4gIFwidml0b1wiLFxuICBcInZpdm9cIixcbiAgXCJ2aXhcIixcbiAgXCJ2b2Jpc1wiLFxuICBcInZvY2lmZXJvclwiLFxuICBcInZvY29cIixcbiAgXCJ2b2xhdGljdXNcIixcbiAgXCJ2b2xvXCIsXG4gIFwidm9sdWJpbGlzXCIsXG4gIFwidm9sdW50YXJpdXNcIixcbiAgXCJ2b2x1cFwiLFxuICBcInZvbHV0YWJydW1cIixcbiAgXCJ2b2x2YVwiLFxuICBcInZvbWVyXCIsXG4gIFwidm9taWNhXCIsXG4gIFwidm9taXRvXCIsXG4gIFwidm9yYWdvXCIsXG4gIFwidm9yYXhcIixcbiAgXCJ2b3JvXCIsXG4gIFwidm9zXCIsXG4gIFwidm90dW1cIixcbiAgXCJ2b3Zlb1wiLFxuICBcInZveFwiLFxuICBcInZ1bGFyaXRlclwiLFxuICBcInZ1bGdhcmlzXCIsXG4gIFwidnVsZ2l2YWd1c1wiLFxuICBcInZ1bGdvXCIsXG4gIFwidnVsZ3VzXCIsXG4gIFwidnVsbmVyb1wiLFxuICBcInZ1bG51c1wiLFxuICBcInZ1bHBlc1wiLFxuICBcInZ1bHRpY3VsdXNcIixcbiAgXCJ2dWx0dW9zdXNcIixcbiAgXCJ4aXBoaWFzXCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcImFsaWFzXCIsXG4gIFwiY29uc2VxdWF0dXJcIixcbiAgXCJhdXRcIixcbiAgXCJwZXJmZXJlbmRpc1wiLFxuICBcInNpdFwiLFxuICBcInZvbHVwdGF0ZW1cIixcbiAgXCJhY2N1c2FudGl1bVwiLFxuICBcImRvbG9yZW1xdWVcIixcbiAgXCJhcGVyaWFtXCIsXG4gIFwiZWFxdWVcIixcbiAgXCJpcHNhXCIsXG4gIFwicXVhZVwiLFxuICBcImFiXCIsXG4gIFwiaWxsb1wiLFxuICBcImludmVudG9yZVwiLFxuICBcInZlcml0YXRpc1wiLFxuICBcImV0XCIsXG4gIFwicXVhc2lcIixcbiAgXCJhcmNoaXRlY3RvXCIsXG4gIFwiYmVhdGFlXCIsXG4gIFwidml0YWVcIixcbiAgXCJkaWN0YVwiLFxuICBcInN1bnRcIixcbiAgXCJleHBsaWNhYm9cIixcbiAgXCJhc3Blcm5hdHVyXCIsXG4gIFwiYXV0XCIsXG4gIFwib2RpdFwiLFxuICBcImF1dFwiLFxuICBcImZ1Z2l0XCIsXG4gIFwic2VkXCIsXG4gIFwicXVpYVwiLFxuICBcImNvbnNlcXV1bnR1clwiLFxuICBcIm1hZ25pXCIsXG4gIFwiZG9sb3Jlc1wiLFxuICBcImVvc1wiLFxuICBcInF1aVwiLFxuICBcInJhdGlvbmVcIixcbiAgXCJ2b2x1cHRhdGVtXCIsXG4gIFwic2VxdWlcIixcbiAgXCJuZXNjaXVudFwiLFxuICBcIm5lcXVlXCIsXG4gIFwiZG9sb3JlbVwiLFxuICBcImlwc3VtXCIsXG4gIFwicXVpYVwiLFxuICBcImRvbG9yXCIsXG4gIFwic2l0XCIsXG4gIFwiYW1ldFwiLFxuICBcImNvbnNlY3RldHVyXCIsXG4gIFwiYWRpcGlzY2lcIixcbiAgXCJ2ZWxpdFwiLFxuICBcInNlZFwiLFxuICBcInF1aWFcIixcbiAgXCJub25cIixcbiAgXCJudW1xdWFtXCIsXG4gIFwiZWl1c1wiLFxuICBcIm1vZGlcIixcbiAgXCJ0ZW1wb3JhXCIsXG4gIFwiaW5jaWR1bnRcIixcbiAgXCJ1dFwiLFxuICBcImxhYm9yZVwiLFxuICBcImV0XCIsXG4gIFwiZG9sb3JlXCIsXG4gIFwibWFnbmFtXCIsXG4gIFwiYWxpcXVhbVwiLFxuICBcInF1YWVyYXRcIixcbiAgXCJ2b2x1cHRhdGVtXCIsXG4gIFwidXRcIixcbiAgXCJlbmltXCIsXG4gIFwiYWRcIixcbiAgXCJtaW5pbWFcIixcbiAgXCJ2ZW5pYW1cIixcbiAgXCJxdWlzXCIsXG4gIFwibm9zdHJ1bVwiLFxuICBcImV4ZXJjaXRhdGlvbmVtXCIsXG4gIFwidWxsYW1cIixcbiAgXCJjb3Jwb3Jpc1wiLFxuICBcIm5lbW9cIixcbiAgXCJlbmltXCIsXG4gIFwiaXBzYW1cIixcbiAgXCJ2b2x1cHRhdGVtXCIsXG4gIFwicXVpYVwiLFxuICBcInZvbHVwdGFzXCIsXG4gIFwic2l0XCIsXG4gIFwic3VzY2lwaXRcIixcbiAgXCJsYWJvcmlvc2FtXCIsXG4gIFwibmlzaVwiLFxuICBcInV0XCIsXG4gIFwiYWxpcXVpZFwiLFxuICBcImV4XCIsXG4gIFwiZWFcIixcbiAgXCJjb21tb2RpXCIsXG4gIFwiY29uc2VxdWF0dXJcIixcbiAgXCJxdWlzXCIsXG4gIFwiYXV0ZW1cIixcbiAgXCJ2ZWxcIixcbiAgXCJldW1cIixcbiAgXCJpdXJlXCIsXG4gIFwicmVwcmVoZW5kZXJpdFwiLFxuICBcInF1aVwiLFxuICBcImluXCIsXG4gIFwiZWFcIixcbiAgXCJ2b2x1cHRhdGVcIixcbiAgXCJ2ZWxpdFwiLFxuICBcImVzc2VcIixcbiAgXCJxdWFtXCIsXG4gIFwibmloaWxcIixcbiAgXCJtb2xlc3RpYWVcIixcbiAgXCJldFwiLFxuICBcIml1c3RvXCIsXG4gIFwib2Rpb1wiLFxuICBcImRpZ25pc3NpbW9zXCIsXG4gIFwiZHVjaW11c1wiLFxuICBcInF1aVwiLFxuICBcImJsYW5kaXRpaXNcIixcbiAgXCJwcmFlc2VudGl1bVwiLFxuICBcImxhdWRhbnRpdW1cIixcbiAgXCJ0b3RhbVwiLFxuICBcInJlbVwiLFxuICBcInZvbHVwdGF0dW1cIixcbiAgXCJkZWxlbml0aVwiLFxuICBcImF0cXVlXCIsXG4gIFwiY29ycnVwdGlcIixcbiAgXCJxdW9zXCIsXG4gIFwiZG9sb3Jlc1wiLFxuICBcImV0XCIsXG4gIFwicXVhc1wiLFxuICBcIm1vbGVzdGlhc1wiLFxuICBcImV4Y2VwdHVyaVwiLFxuICBcInNpbnRcIixcbiAgXCJvY2NhZWNhdGlcIixcbiAgXCJjdXBpZGl0YXRlXCIsXG4gIFwibm9uXCIsXG4gIFwicHJvdmlkZW50XCIsXG4gIFwic2VkXCIsXG4gIFwidXRcIixcbiAgXCJwZXJzcGljaWF0aXNcIixcbiAgXCJ1bmRlXCIsXG4gIFwib21uaXNcIixcbiAgXCJpc3RlXCIsXG4gIFwibmF0dXNcIixcbiAgXCJlcnJvclwiLFxuICBcInNpbWlsaXF1ZVwiLFxuICBcInN1bnRcIixcbiAgXCJpblwiLFxuICBcImN1bHBhXCIsXG4gIFwicXVpXCIsXG4gIFwib2ZmaWNpYVwiLFxuICBcImRlc2VydW50XCIsXG4gIFwibW9sbGl0aWFcIixcbiAgXCJhbmltaVwiLFxuICBcImlkXCIsXG4gIFwiZXN0XCIsXG4gIFwibGFib3J1bVwiLFxuICBcImV0XCIsXG4gIFwiZG9sb3J1bVwiLFxuICBcImZ1Z2FcIixcbiAgXCJldFwiLFxuICBcImhhcnVtXCIsXG4gIFwicXVpZGVtXCIsXG4gIFwicmVydW1cIixcbiAgXCJmYWNpbGlzXCIsXG4gIFwiZXN0XCIsXG4gIFwiZXRcIixcbiAgXCJleHBlZGl0YVwiLFxuICBcImRpc3RpbmN0aW9cIixcbiAgXCJuYW1cIixcbiAgXCJsaWJlcm9cIixcbiAgXCJ0ZW1wb3JlXCIsXG4gIFwiY3VtXCIsXG4gIFwic29sdXRhXCIsXG4gIFwibm9iaXNcIixcbiAgXCJlc3RcIixcbiAgXCJlbGlnZW5kaVwiLFxuICBcIm9wdGlvXCIsXG4gIFwiY3VtcXVlXCIsXG4gIFwibmloaWxcIixcbiAgXCJpbXBlZGl0XCIsXG4gIFwicXVvXCIsXG4gIFwicG9ycm9cIixcbiAgXCJxdWlzcXVhbVwiLFxuICBcImVzdFwiLFxuICBcInF1aVwiLFxuICBcIm1pbnVzXCIsXG4gIFwiaWRcIixcbiAgXCJxdW9kXCIsXG4gIFwibWF4aW1lXCIsXG4gIFwicGxhY2VhdFwiLFxuICBcImZhY2VyZVwiLFxuICBcInBvc3NpbXVzXCIsXG4gIFwib21uaXNcIixcbiAgXCJ2b2x1cHRhc1wiLFxuICBcImFzc3VtZW5kYVwiLFxuICBcImVzdFwiLFxuICBcIm9tbmlzXCIsXG4gIFwiZG9sb3JcIixcbiAgXCJyZXBlbGxlbmR1c1wiLFxuICBcInRlbXBvcmlidXNcIixcbiAgXCJhdXRlbVwiLFxuICBcInF1aWJ1c2RhbVwiLFxuICBcImV0XCIsXG4gIFwiYXV0XCIsXG4gIFwiY29uc2VxdWF0dXJcIixcbiAgXCJ2ZWxcIixcbiAgXCJpbGx1bVwiLFxuICBcInF1aVwiLFxuICBcImRvbG9yZW1cIixcbiAgXCJldW1cIixcbiAgXCJmdWdpYXRcIixcbiAgXCJxdW9cIixcbiAgXCJ2b2x1cHRhc1wiLFxuICBcIm51bGxhXCIsXG4gIFwicGFyaWF0dXJcIixcbiAgXCJhdFwiLFxuICBcInZlcm9cIixcbiAgXCJlb3NcIixcbiAgXCJldFwiLFxuICBcImFjY3VzYW11c1wiLFxuICBcIm9mZmljaWlzXCIsXG4gIFwiZGViaXRpc1wiLFxuICBcImF1dFwiLFxuICBcInJlcnVtXCIsXG4gIFwibmVjZXNzaXRhdGlidXNcIixcbiAgXCJzYWVwZVwiLFxuICBcImV2ZW5pZXRcIixcbiAgXCJ1dFwiLFxuICBcImV0XCIsXG4gIFwidm9sdXB0YXRlc1wiLFxuICBcInJlcHVkaWFuZGFlXCIsXG4gIFwic2ludFwiLFxuICBcImV0XCIsXG4gIFwibW9sZXN0aWFlXCIsXG4gIFwibm9uXCIsXG4gIFwicmVjdXNhbmRhZVwiLFxuICBcIml0YXF1ZVwiLFxuICBcImVhcnVtXCIsXG4gIFwicmVydW1cIixcbiAgXCJoaWNcIixcbiAgXCJ0ZW5ldHVyXCIsXG4gIFwiYVwiLFxuICBcInNhcGllbnRlXCIsXG4gIFwiZGVsZWN0dXNcIixcbiAgXCJ1dFwiLFxuICBcImF1dFwiLFxuICBcInJlaWNpZW5kaXNcIixcbiAgXCJ2b2x1cHRhdGlidXNcIixcbiAgXCJtYWlvcmVzXCIsXG4gIFwiZG9sb3JpYnVzXCIsXG4gIFwiYXNwZXJpb3Jlc1wiLFxuICBcInJlcGVsbGF0XCJcbl07XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFhbGl5YWhcIixcbiAgXCJBYXJvblwiLFxuICBcIkFiYWdhaWxcIixcbiAgXCJBYmJleVwiLFxuICBcIkFiYmllXCIsXG4gIFwiQWJiaWdhaWxcIixcbiAgXCJBYmJ5XCIsXG4gIFwiQWJkaWVsXCIsXG4gIFwiQWJkdWxcIixcbiAgXCJBYmR1bGxhaFwiLFxuICBcIkFiZVwiLFxuICBcIkFiZWxcIixcbiAgXCJBYmVsYXJkb1wiLFxuICBcIkFiaWdhaWxcIixcbiAgXCJBYmlnYWxlXCIsXG4gIFwiQWJpZ2F5bGVcIixcbiAgXCJBYm5lclwiLFxuICBcIkFicmFoYW1cIixcbiAgXCJBZGFcIixcbiAgXCJBZGFoXCIsXG4gIFwiQWRhbGJlcnRvXCIsXG4gIFwiQWRhbGluZVwiLFxuICBcIkFkYW1cIixcbiAgXCJBZGFuXCIsXG4gIFwiQWRkaWVcIixcbiAgXCJBZGRpc29uXCIsXG4gIFwiQWRlbGFcIixcbiAgXCJBZGVsYmVydFwiLFxuICBcIkFkZWxlXCIsXG4gIFwiQWRlbGlhXCIsXG4gIFwiQWRlbGluZVwiLFxuICBcIkFkZWxsXCIsXG4gIFwiQWRlbGxhXCIsXG4gIFwiQWRlbGxlXCIsXG4gIFwiQWRpdHlhXCIsXG4gIFwiQWRvbGZcIixcbiAgXCJBZG9sZm9cIixcbiAgXCJBZG9scGhcIixcbiAgXCJBZG9scGh1c1wiLFxuICBcIkFkb25pc1wiLFxuICBcIkFkcmFpblwiLFxuICBcIkFkcmlhblwiLFxuICBcIkFkcmlhbmFcIixcbiAgXCJBZHJpYW5uYVwiLFxuICBcIkFkcmllbFwiLFxuICBcIkFkcmllblwiLFxuICBcIkFkcmllbm5lXCIsXG4gIFwiQWZ0b25cIixcbiAgXCJBZ2xhZVwiLFxuICBcIkFnbmVzXCIsXG4gIFwiQWd1c3RpblwiLFxuICBcIkFndXN0aW5hXCIsXG4gIFwiQWhtYWRcIixcbiAgXCJBaG1lZFwiLFxuICBcIkFpZGFcIixcbiAgXCJBaWRhblwiLFxuICBcIkFpZGVuXCIsXG4gIFwiQWlsZWVuXCIsXG4gIFwiQWltZWVcIixcbiAgXCJBaXNoYVwiLFxuICBcIkFpeWFuYVwiLFxuICBcIkFrZWVtXCIsXG4gIFwiQWxcIixcbiAgXCJBbGFpbmFcIixcbiAgXCJBbGFuXCIsXG4gIFwiQWxhbmFcIixcbiAgXCJBbGFuaXNcIixcbiAgXCJBbGFubmFcIixcbiAgXCJBbGF5bmFcIixcbiAgXCJBbGJhXCIsXG4gIFwiQWxiZXJ0XCIsXG4gIFwiQWxiZXJ0YVwiLFxuICBcIkFsYmVydGhhXCIsXG4gIFwiQWxiZXJ0b1wiLFxuICBcIkFsYmluXCIsXG4gIFwiQWxiaW5hXCIsXG4gIFwiQWxkYVwiLFxuICBcIkFsZGVuXCIsXG4gIFwiQWxlY1wiLFxuICBcIkFsZWVuXCIsXG4gIFwiQWxlamFuZHJhXCIsXG4gIFwiQWxlamFuZHJpblwiLFxuICBcIkFsZWtcIixcbiAgXCJBbGVuYVwiLFxuICBcIkFsZW5lXCIsXG4gIFwiQWxlc3NhbmRyYVwiLFxuICBcIkFsZXNzYW5kcm9cIixcbiAgXCJBbGVzc2lhXCIsXG4gIFwiQWxldGhhXCIsXG4gIFwiQWxleFwiLFxuICBcIkFsZXhhXCIsXG4gIFwiQWxleGFuZGVyXCIsXG4gIFwiQWxleGFuZHJhXCIsXG4gIFwiQWxleGFuZHJlXCIsXG4gIFwiQWxleGFuZHJlYVwiLFxuICBcIkFsZXhhbmRyaWFcIixcbiAgXCJBbGV4YW5kcmluZVwiLFxuICBcIkFsZXhhbmRyb1wiLFxuICBcIkFsZXhhbmVcIixcbiAgXCJBbGV4YW5uZVwiLFxuICBcIkFsZXhpZVwiLFxuICBcIkFsZXhpc1wiLFxuICBcIkFsZXh5c1wiLFxuICBcIkFsZXh6YW5kZXJcIixcbiAgXCJBbGZcIixcbiAgXCJBbGZvbnNvXCIsXG4gIFwiQWxmb256b1wiLFxuICBcIkFsZm9yZFwiLFxuICBcIkFsZnJlZFwiLFxuICBcIkFsZnJlZGFcIixcbiAgXCJBbGZyZWRvXCIsXG4gIFwiQWxpXCIsXG4gIFwiQWxpYVwiLFxuICBcIkFsaWNlXCIsXG4gIFwiQWxpY2lhXCIsXG4gIFwiQWxpc2FcIixcbiAgXCJBbGlzaGFcIixcbiAgXCJBbGlzb25cIixcbiAgXCJBbGl2aWFcIixcbiAgXCJBbGl5YVwiLFxuICBcIkFsaXlhaFwiLFxuICBcIkFsaXphXCIsXG4gIFwiQWxpemVcIixcbiAgXCJBbGxhblwiLFxuICBcIkFsbGVuXCIsXG4gIFwiQWxsZW5lXCIsXG4gIFwiQWxsaWVcIixcbiAgXCJBbGxpc29uXCIsXG4gIFwiQWxseVwiLFxuICBcIkFscGhvbnNvXCIsXG4gIFwiQWx0YVwiLFxuICBcIkFsdGhlYVwiLFxuICBcIkFsdmFcIixcbiAgXCJBbHZhaFwiLFxuICBcIkFsdmVuYVwiLFxuICBcIkFsdmVyYVwiLFxuICBcIkFsdmVydGFcIixcbiAgXCJBbHZpbmFcIixcbiAgXCJBbHZpc1wiLFxuICBcIkFseWNlXCIsXG4gIFwiQWx5Y2lhXCIsXG4gIFwiQWx5c2FcIixcbiAgXCJBbHlzaGFcIixcbiAgXCJBbHlzb25cIixcbiAgXCJBbHlzc29uXCIsXG4gIFwiQW1hbGlhXCIsXG4gIFwiQW1hbmRhXCIsXG4gIFwiQW1hbmlcIixcbiAgXCJBbWFyYVwiLFxuICBcIkFtYXJpXCIsXG4gIFwiQW1heWFcIixcbiAgXCJBbWJlclwiLFxuICBcIkFtYnJvc2VcIixcbiAgXCJBbWVsaWFcIixcbiAgXCJBbWVsaWVcIixcbiAgXCJBbWVseVwiLFxuICBcIkFtZXJpY2FcIixcbiAgXCJBbWVyaWNvXCIsXG4gIFwiQW1pZVwiLFxuICBcIkFtaW5hXCIsXG4gIFwiQW1pclwiLFxuICBcIkFtaXJhXCIsXG4gIFwiQW1peWFcIixcbiAgXCJBbW9zXCIsXG4gIFwiQW1wYXJvXCIsXG4gIFwiQW15XCIsXG4gIFwiQW15YVwiLFxuICBcIkFuYVwiLFxuICBcIkFuYWJlbFwiLFxuICBcIkFuYWJlbGxlXCIsXG4gIFwiQW5haGlcIixcbiAgXCJBbmFpc1wiLFxuICBcIkFuYXN0YWNpb1wiLFxuICBcIkFuYXN0YXNpYVwiLFxuICBcIkFuZGVyc29uXCIsXG4gIFwiQW5kcmVcIixcbiAgXCJBbmRyZWFuZVwiLFxuICBcIkFuZHJlYW5uZVwiLFxuICBcIkFuZHJlc1wiLFxuICBcIkFuZHJld1wiLFxuICBcIkFuZHlcIixcbiAgXCJBbmdlbFwiLFxuICBcIkFuZ2VsYVwiLFxuICBcIkFuZ2VsaWNhXCIsXG4gIFwiQW5nZWxpbmFcIixcbiAgXCJBbmdlbGluZVwiLFxuICBcIkFuZ2VsaXRhXCIsXG4gIFwiQW5nZWxvXCIsXG4gIFwiQW5naWVcIixcbiAgXCJBbmd1c1wiLFxuICBcIkFuaWJhbFwiLFxuICBcIkFuaWthXCIsXG4gIFwiQW5pc3NhXCIsXG4gIFwiQW5pdGFcIixcbiAgXCJBbml5YVwiLFxuICBcIkFuaXlhaFwiLFxuICBcIkFuamFsaVwiLFxuICBcIkFubmFcIixcbiAgXCJBbm5hYmVsXCIsXG4gIFwiQW5uYWJlbGxcIixcbiAgXCJBbm5hYmVsbGVcIixcbiAgXCJBbm5hbGlzZVwiLFxuICBcIkFubmFtYWVcIixcbiAgXCJBbm5hbWFyaWVcIixcbiAgXCJBbm5lXCIsXG4gIFwiQW5uZXR0YVwiLFxuICBcIkFubmV0dGVcIixcbiAgXCJBbm5pZVwiLFxuICBcIkFuc2VsXCIsXG4gIFwiQW5zbGV5XCIsXG4gIFwiQW50aG9ueVwiLFxuICBcIkFudG9pbmV0dGVcIixcbiAgXCJBbnRvbmVcIixcbiAgXCJBbnRvbmV0dGFcIixcbiAgXCJBbnRvbmV0dGVcIixcbiAgXCJBbnRvbmlhXCIsXG4gIFwiQW50b25pZXR0YVwiLFxuICBcIkFudG9uaW5hXCIsXG4gIFwiQW50b25pb1wiLFxuICBcIkFudHdhblwiLFxuICBcIkFudHdvblwiLFxuICBcIkFueWFcIixcbiAgXCJBcHJpbFwiLFxuICBcIkFyYVwiLFxuICBcIkFyYWNlbGlcIixcbiAgXCJBcmFjZWx5XCIsXG4gIFwiQXJjaFwiLFxuICBcIkFyY2hpYmFsZFwiLFxuICBcIkFyZGVsbGFcIixcbiAgXCJBcmRlblwiLFxuICBcIkFyZGl0aFwiLFxuICBcIkFyZWx5XCIsXG4gIFwiQXJpXCIsXG4gIFwiQXJpYW5lXCIsXG4gIFwiQXJpYW5uYVwiLFxuICBcIkFyaWNcIixcbiAgXCJBcmllbFwiLFxuICBcIkFyaWVsbGVcIixcbiAgXCJBcmp1blwiLFxuICBcIkFybGVuZVwiLFxuICBcIkFybGllXCIsXG4gIFwiQXJsb1wiLFxuICBcIkFybWFuZFwiLFxuICBcIkFybWFuZG9cIixcbiAgXCJBcm1hbmlcIixcbiAgXCJBcm5hbGRvXCIsXG4gIFwiQXJuZVwiLFxuICBcIkFybm9cIixcbiAgXCJBcm5vbGRcIixcbiAgXCJBcm5vbGRvXCIsXG4gIFwiQXJudWxmb1wiLFxuICBcIkFyb25cIixcbiAgXCJBcnRcIixcbiAgXCJBcnRodXJcIixcbiAgXCJBcnR1cm9cIixcbiAgXCJBcnZlbFwiLFxuICBcIkFydmlkXCIsXG4gIFwiQXJ2aWxsYVwiLFxuICBcIkFyeWFubmFcIixcbiAgXCJBc2FcIixcbiAgXCJBc2hhXCIsXG4gIFwiQXNobGVlXCIsXG4gIFwiQXNobGVpZ2hcIixcbiAgXCJBc2hsZXlcIixcbiAgXCJBc2hseVwiLFxuICBcIkFzaGx5bm5cIixcbiAgXCJBc2h0b25cIixcbiAgXCJBc2h0eW5cIixcbiAgXCJBc2lhXCIsXG4gIFwiQXNzdW50YVwiLFxuICBcIkFzdHJpZFwiLFxuICBcIkF0aGVuYVwiLFxuICBcIkF1YnJlZVwiLFxuICBcIkF1YnJleVwiLFxuICBcIkF1ZGllXCIsXG4gIFwiQXVkcmFcIixcbiAgXCJBdWRyZWFubmVcIixcbiAgXCJBdWRyZXlcIixcbiAgXCJBdWd1c3RcIixcbiAgXCJBdWd1c3RhXCIsXG4gIFwiQXVndXN0aW5lXCIsXG4gIFwiQXVndXN0dXNcIixcbiAgXCJBdXJlbGlhXCIsXG4gIFwiQXVyZWxpZVwiLFxuICBcIkF1cmVsaW9cIixcbiAgXCJBdXJvcmVcIixcbiAgXCJBdXN0ZW5cIixcbiAgXCJBdXN0aW5cIixcbiAgXCJBdXN0eW5cIixcbiAgXCJBdXR1bW5cIixcbiAgXCJBdmFcIixcbiAgXCJBdmVyeVwiLFxuICBcIkF2aXNcIixcbiAgXCJBeGVsXCIsXG4gIFwiQXlhbmFcIixcbiAgXCJBeWRlblwiLFxuICBcIkF5bGFcIixcbiAgXCJBeWxpblwiLFxuICBcIkJhYnlcIixcbiAgXCJCYWlsZWVcIixcbiAgXCJCYWlsZXlcIixcbiAgXCJCYXJiYXJhXCIsXG4gIFwiQmFybmV5XCIsXG4gIFwiQmFyb25cIixcbiAgXCJCYXJyZXR0XCIsXG4gIFwiQmFycnlcIixcbiAgXCJCYXJ0XCIsXG4gIFwiQmFydGhvbG9tZVwiLFxuICBcIkJhcnRvblwiLFxuICBcIkJheWxlZVwiLFxuICBcIkJlYXRyaWNlXCIsXG4gIFwiQmVhdVwiLFxuICBcIkJlYXVsYWhcIixcbiAgXCJCZWxsXCIsXG4gIFwiQmVsbGFcIixcbiAgXCJCZWxsZVwiLFxuICBcIkJlblwiLFxuICBcIkJlbmVkaWN0XCIsXG4gIFwiQmVuamFtaW5cIixcbiAgXCJCZW5uZXR0XCIsXG4gIFwiQmVubmllXCIsXG4gIFwiQmVubnlcIixcbiAgXCJCZW50b25cIixcbiAgXCJCZXJlbmljZVwiLFxuICBcIkJlcm5hZGV0dGVcIixcbiAgXCJCZXJuYWRpbmVcIixcbiAgXCJCZXJuYXJkXCIsXG4gIFwiQmVybmFyZG9cIixcbiAgXCJCZXJuZWljZVwiLFxuICBcIkJlcm5oYXJkXCIsXG4gIFwiQmVybmljZVwiLFxuICBcIkJlcm5pZVwiLFxuICBcIkJlcm5pZWNlXCIsXG4gIFwiQmVybml0YVwiLFxuICBcIkJlcnJ5XCIsXG4gIFwiQmVydFwiLFxuICBcIkJlcnRhXCIsXG4gIFwiQmVydGhhXCIsXG4gIFwiQmVydHJhbVwiLFxuICBcIkJlcnRyYW5kXCIsXG4gIFwiQmVyeWxcIixcbiAgXCJCZXNzaWVcIixcbiAgXCJCZXRoXCIsXG4gIFwiQmV0aGFueVwiLFxuICBcIkJldGhlbFwiLFxuICBcIkJldHN5XCIsXG4gIFwiQmV0dGVcIixcbiAgXCJCZXR0aWVcIixcbiAgXCJCZXR0eVwiLFxuICBcIkJldHR5ZVwiLFxuICBcIkJldWxhaFwiLFxuICBcIkJldmVybHlcIixcbiAgXCJCaWFua2FcIixcbiAgXCJCaWxsXCIsXG4gIFwiQmlsbGllXCIsXG4gIFwiQmlsbHlcIixcbiAgXCJCaXJkaWVcIixcbiAgXCJCbGFpclwiLFxuICBcIkJsYWlzZVwiLFxuICBcIkJsYWtlXCIsXG4gIFwiQmxhbmNhXCIsXG4gIFwiQmxhbmNoZVwiLFxuICBcIkJsYXplXCIsXG4gIFwiQm9cIixcbiAgXCJCb2JiaWVcIixcbiAgXCJCb2JieVwiLFxuICBcIkJvbml0YVwiLFxuICBcIkJvbm5pZVwiLFxuICBcIkJvcmlzXCIsXG4gIFwiQm95ZFwiLFxuICBcIkJyYWRcIixcbiAgXCJCcmFkZW5cIixcbiAgXCJCcmFkZm9yZFwiLFxuICBcIkJyYWRsZXlcIixcbiAgXCJCcmFkbHlcIixcbiAgXCJCcmFkeVwiLFxuICBcIkJyYWVkZW5cIixcbiAgXCJCcmFpblwiLFxuICBcIkJyYW5kaVwiLFxuICBcIkJyYW5kb1wiLFxuICBcIkJyYW5kb25cIixcbiAgXCJCcmFuZHRcIixcbiAgXCJCcmFuZHlcIixcbiAgXCJCcmFuZHluXCIsXG4gIFwiQnJhbm5vblwiLFxuICBcIkJyYW5zb25cIixcbiAgXCJCcmFudFwiLFxuICBcIkJyYXVsaW9cIixcbiAgXCJCcmF4dG9uXCIsXG4gIFwiQnJheWFuXCIsXG4gIFwiQnJlYW5hXCIsXG4gIFwiQnJlYW5uYVwiLFxuICBcIkJyZWFubmVcIixcbiAgXCJCcmVuZGFcIixcbiAgXCJCcmVuZGFuXCIsXG4gIFwiQnJlbmRlblwiLFxuICBcIkJyZW5kb25cIixcbiAgXCJCcmVubmFcIixcbiAgXCJCcmVubmFuXCIsXG4gIFwiQnJlbm5vblwiLFxuICBcIkJyZW50XCIsXG4gIFwiQnJldFwiLFxuICBcIkJyZXR0XCIsXG4gIFwiQnJpYVwiLFxuICBcIkJyaWFuXCIsXG4gIFwiQnJpYW5hXCIsXG4gIFwiQnJpYW5uZVwiLFxuICBcIkJyaWNlXCIsXG4gIFwiQnJpZGdldFwiLFxuICBcIkJyaWRnZXR0ZVwiLFxuICBcIkJyaWRpZVwiLFxuICBcIkJyaWVsbGVcIixcbiAgXCJCcmlnaXR0ZVwiLFxuICBcIkJyaW9ubmFcIixcbiAgXCJCcmlzYVwiLFxuICBcIkJyaXRuZXlcIixcbiAgXCJCcml0dGFueVwiLFxuICBcIkJyb2NrXCIsXG4gIFwiQnJvZGVyaWNrXCIsXG4gIFwiQnJvZHlcIixcbiAgXCJCcm9va1wiLFxuICBcIkJyb29rZVwiLFxuICBcIkJyb29rbHluXCIsXG4gIFwiQnJvb2tzXCIsXG4gIFwiQnJvd25cIixcbiAgXCJCcnVjZVwiLFxuICBcIkJyeWFuYVwiLFxuICBcIkJyeWNlXCIsXG4gIFwiQnJ5Y2VuXCIsXG4gIFwiQnJ5b25cIixcbiAgXCJCdWNrXCIsXG4gIFwiQnVkXCIsXG4gIFwiQnVkZHlcIixcbiAgXCJCdWZvcmRcIixcbiAgXCJCdWxhaFwiLFxuICBcIkJ1cmRldHRlXCIsXG4gIFwiQnVybGV5XCIsXG4gIFwiQnVybmljZVwiLFxuICBcIkJ1c3RlclwiLFxuICBcIkNhZGVcIixcbiAgXCJDYWRlblwiLFxuICBcIkNhZXNhclwiLFxuICBcIkNhaXRseW5cIixcbiAgXCJDYWxlXCIsXG4gIFwiQ2FsZWJcIixcbiAgXCJDYWxlaWdoXCIsXG4gIFwiQ2FsaVwiLFxuICBcIkNhbGlzdGFcIixcbiAgXCJDYWxsaWVcIixcbiAgXCJDYW1kZW5cIixcbiAgXCJDYW1lcm9uXCIsXG4gIFwiQ2FtaWxhXCIsXG4gIFwiQ2FtaWxsYVwiLFxuICBcIkNhbWlsbGVcIixcbiAgXCJDYW1yZW5cIixcbiAgXCJDYW1yb25cIixcbiAgXCJDYW1yeW5cIixcbiAgXCJDYW15bGxlXCIsXG4gIFwiQ2FuZGFjZVwiLFxuICBcIkNhbmRlbGFyaW9cIixcbiAgXCJDYW5kaWNlXCIsXG4gIFwiQ2FuZGlkYVwiLFxuICBcIkNhbmRpZG9cIixcbiAgXCJDYXJhXCIsXG4gIFwiQ2FyZXlcIixcbiAgXCJDYXJpc3NhXCIsXG4gIFwiQ2FybGVlXCIsXG4gIFwiQ2FybGV0b25cIixcbiAgXCJDYXJsZXlcIixcbiAgXCJDYXJsaVwiLFxuICBcIkNhcmxpZVwiLFxuICBcIkNhcmxvXCIsXG4gIFwiQ2FybG9zXCIsXG4gIFwiQ2FybG90dGFcIixcbiAgXCJDYXJtZWxcIixcbiAgXCJDYXJtZWxhXCIsXG4gIFwiQ2FybWVsbGFcIixcbiAgXCJDYXJtZWxvXCIsXG4gIFwiQ2FybWVuXCIsXG4gIFwiQ2FybWluZVwiLFxuICBcIkNhcm9sXCIsXG4gIFwiQ2Fyb2xhbm5lXCIsXG4gIFwiQ2Fyb2xlXCIsXG4gIFwiQ2Fyb2xpbmFcIixcbiAgXCJDYXJvbGluZVwiLFxuICBcIkNhcm9seW5cIixcbiAgXCJDYXJvbHluZVwiLFxuICBcIkNhcnJpZVwiLFxuICBcIkNhcnJvbGxcIixcbiAgXCJDYXJzb25cIixcbiAgXCJDYXJ0ZXJcIixcbiAgXCJDYXJ5XCIsXG4gIFwiQ2FzYW5kcmFcIixcbiAgXCJDYXNleVwiLFxuICBcIkNhc2ltZXJcIixcbiAgXCJDYXNpbWlyXCIsXG4gIFwiQ2FzcGVyXCIsXG4gIFwiQ2Fzc2FuZHJhXCIsXG4gIFwiQ2Fzc2FuZHJlXCIsXG4gIFwiQ2Fzc2lkeVwiLFxuICBcIkNhc3NpZVwiLFxuICBcIkNhdGFsaW5hXCIsXG4gIFwiQ2F0ZXJpbmFcIixcbiAgXCJDYXRoYXJpbmVcIixcbiAgXCJDYXRoZXJpbmVcIixcbiAgXCJDYXRocmluZVwiLFxuICBcIkNhdGhyeW5cIixcbiAgXCJDYXRoeVwiLFxuICBcIkNheWxhXCIsXG4gIFwiQ2Vhc2FyXCIsXG4gIFwiQ2VjZWxpYVwiLFxuICBcIkNlY2lsXCIsXG4gIFwiQ2VjaWxlXCIsXG4gIFwiQ2VjaWxpYVwiLFxuICBcIkNlZHJpY2tcIixcbiAgXCJDZWxlc3RpbmVcIixcbiAgXCJDZWxlc3Rpbm9cIixcbiAgXCJDZWxpYVwiLFxuICBcIkNlbGluZVwiLFxuICBcIkNlc2FyXCIsXG4gIFwiQ2hhZFwiLFxuICBcIkNoYWRkXCIsXG4gIFwiQ2hhZHJpY2tcIixcbiAgXCJDaGFpbVwiLFxuICBcIkNoYW5jZVwiLFxuICBcIkNoYW5kbGVyXCIsXG4gIFwiQ2hhbmVsXCIsXG4gIFwiQ2hhbmVsbGVcIixcbiAgXCJDaGFyaXR5XCIsXG4gIFwiQ2hhcmxlbmVcIixcbiAgXCJDaGFybGVzXCIsXG4gIFwiQ2hhcmxleVwiLFxuICBcIkNoYXJsaWVcIixcbiAgXCJDaGFybG90dGVcIixcbiAgXCJDaGFzZVwiLFxuICBcIkNoYXNpdHlcIixcbiAgXCJDaGF1bmNleVwiLFxuICBcIkNoYXlhXCIsXG4gIFwiQ2hhelwiLFxuICBcIkNoZWxzZWFcIixcbiAgXCJDaGVsc2V5XCIsXG4gIFwiQ2hlbHNpZVwiLFxuICBcIkNoZXNsZXlcIixcbiAgXCJDaGVzdGVyXCIsXG4gIFwiQ2hldFwiLFxuICBcIkNoZXlhbm5lXCIsXG4gIFwiQ2hleWVubmVcIixcbiAgXCJDaGxvZVwiLFxuICBcIkNocmlzXCIsXG4gIFwiQ2hyaXN0XCIsXG4gIFwiQ2hyaXN0YVwiLFxuICBcIkNocmlzdGVsbGVcIixcbiAgXCJDaHJpc3RpYW5cIixcbiAgXCJDaHJpc3RpYW5hXCIsXG4gIFwiQ2hyaXN0aW5hXCIsXG4gIFwiQ2hyaXN0aW5lXCIsXG4gIFwiQ2hyaXN0b3BcIixcbiAgXCJDaHJpc3RvcGhlXCIsXG4gIFwiQ2hyaXN0b3BoZXJcIixcbiAgXCJDaHJpc3R5XCIsXG4gIFwiQ2h5bmFcIixcbiAgXCJDaWFyYVwiLFxuICBcIkNpY2Vyb1wiLFxuICBcIkNpZWxvXCIsXG4gIFwiQ2llcnJhXCIsXG4gIFwiQ2luZHlcIixcbiAgXCJDaXRsYWxsaVwiLFxuICBcIkNsYWlyXCIsXG4gIFwiQ2xhaXJlXCIsXG4gIFwiQ2xhcmFcIixcbiAgXCJDbGFyYWJlbGxlXCIsXG4gIFwiQ2xhcmVcIixcbiAgXCJDbGFyaXNzYVwiLFxuICBcIkNsYXJrXCIsXG4gIFwiQ2xhdWRcIixcbiAgXCJDbGF1ZGVcIixcbiAgXCJDbGF1ZGlhXCIsXG4gIFwiQ2xhdWRpZVwiLFxuICBcIkNsYXVkaW5lXCIsXG4gIFwiQ2xheVwiLFxuICBcIkNsZW1lbnNcIixcbiAgXCJDbGVtZW50XCIsXG4gIFwiQ2xlbWVudGluYVwiLFxuICBcIkNsZW1lbnRpbmVcIixcbiAgXCJDbGVtbWllXCIsXG4gIFwiQ2xlb1wiLFxuICBcIkNsZW9yYVwiLFxuICBcIkNsZXRhXCIsXG4gIFwiQ2xldHVzXCIsXG4gIFwiQ2xldmVcIixcbiAgXCJDbGV2ZWxhbmRcIixcbiAgXCJDbGlmZm9yZFwiLFxuICBcIkNsaWZ0b25cIixcbiAgXCJDbGludFwiLFxuICBcIkNsaW50b25cIixcbiAgXCJDbG90aWxkZVwiLFxuICBcIkNsb3Zpc1wiLFxuICBcIkNsb3lkXCIsXG4gIFwiQ2x5ZGVcIixcbiAgXCJDb2J5XCIsXG4gIFwiQ29keVwiLFxuICBcIkNvbGJ5XCIsXG4gIFwiQ29sZVwiLFxuICBcIkNvbGVtYW5cIixcbiAgXCJDb2xpblwiLFxuICBcIkNvbGxlZW5cIixcbiAgXCJDb2xsaW5cIixcbiAgXCJDb2x0XCIsXG4gIFwiQ29sdGVuXCIsXG4gIFwiQ29sdG9uXCIsXG4gIFwiQ29sdW1idXNcIixcbiAgXCJDb25jZXBjaW9uXCIsXG4gIFwiQ29ubmVyXCIsXG4gIFwiQ29ubmllXCIsXG4gIFwiQ29ubm9yXCIsXG4gIFwiQ29ub3JcIixcbiAgXCJDb25yYWRcIixcbiAgXCJDb25zdGFuY2VcIixcbiAgXCJDb25zdGFudGluXCIsXG4gIFwiQ29uc3VlbG9cIixcbiAgXCJDb29wZXJcIixcbiAgXCJDb3JhXCIsXG4gIFwiQ29yYWxpZVwiLFxuICBcIkNvcmJpblwiLFxuICBcIkNvcmRlbGlhXCIsXG4gIFwiQ29yZGVsbFwiLFxuICBcIkNvcmRpYVwiLFxuICBcIkNvcmRpZVwiLFxuICBcIkNvcmVuZVwiLFxuICBcIkNvcmluZVwiLFxuICBcIkNvcm5lbGl1c1wiLFxuICBcIkNvcm5lbGxcIixcbiAgXCJDb3JyaW5lXCIsXG4gIFwiQ29ydGV6XCIsXG4gIFwiQ29ydG5leVwiLFxuICBcIkNvcnlcIixcbiAgXCJDb3R5XCIsXG4gIFwiQ291cnRuZXlcIixcbiAgXCJDb3lcIixcbiAgXCJDcmFpZ1wiLFxuICBcIkNyYXdmb3JkXCIsXG4gIFwiQ3Jlb2xhXCIsXG4gIFwiQ3Jpc3RhbFwiLFxuICBcIkNyaXN0aWFuXCIsXG4gIFwiQ3Jpc3RpbmFcIixcbiAgXCJDcmlzdG9iYWxcIixcbiAgXCJDcmlzdG9waGVyXCIsXG4gIFwiQ3J1elwiLFxuICBcIkNyeXN0YWxcIixcbiAgXCJDcnlzdGVsXCIsXG4gIFwiQ3VsbGVuXCIsXG4gIFwiQ3VydFwiLFxuICBcIkN1cnRpc1wiLFxuICBcIkN5ZG5leVwiLFxuICBcIkN5bnRoaWFcIixcbiAgXCJDeXJpbFwiLFxuICBcIkN5cnVzXCIsXG4gIFwiRGFnbWFyXCIsXG4gIFwiRGFobGlhXCIsXG4gIFwiRGFpamFcIixcbiAgXCJEYWlzaGFcIixcbiAgXCJEYWlzeVwiLFxuICBcIkRha290YVwiLFxuICBcIkRhbGVcIixcbiAgXCJEYWxsYXNcIixcbiAgXCJEYWxsaW5cIixcbiAgXCJEYWx0b25cIixcbiAgXCJEYW1hcmlzXCIsXG4gIFwiRGFtZW9uXCIsXG4gIFwiRGFtaWFuXCIsXG4gIFwiRGFtaWVuXCIsXG4gIFwiRGFtaW9uXCIsXG4gIFwiRGFtb25cIixcbiAgXCJEYW5cIixcbiAgXCJEYW5hXCIsXG4gIFwiRGFuZHJlXCIsXG4gIFwiRGFuZVwiLFxuICBcIkQnYW5nZWxvXCIsXG4gIFwiRGFuZ2Vsb1wiLFxuICBcIkRhbmlhbFwiLFxuICBcIkRhbmllbGFcIixcbiAgXCJEYW5pZWxsYVwiLFxuICBcIkRhbmllbGxlXCIsXG4gIFwiRGFuaWthXCIsXG4gIFwiRGFubmllXCIsXG4gIFwiRGFubnlcIixcbiAgXCJEYW50ZVwiLFxuICBcIkRhbnlrYVwiLFxuICBcIkRhcGhuZVwiLFxuICBcIkRhcGhuZWVcIixcbiAgXCJEYXBobmV5XCIsXG4gIFwiRGFyYnlcIixcbiAgXCJEYXJlblwiLFxuICBcIkRhcmlhblwiLFxuICBcIkRhcmlhbmFcIixcbiAgXCJEYXJpZW5cIixcbiAgXCJEYXJpb1wiLFxuICBcIkRhcmlvblwiLFxuICBcIkRhcml1c1wiLFxuICBcIkRhcmxlbmVcIixcbiAgXCJEYXJvblwiLFxuICBcIkRhcnJlbFwiLFxuICBcIkRhcnJlbGxcIixcbiAgXCJEYXJyZW5cIixcbiAgXCJEYXJyaWNrXCIsXG4gIFwiRGFycmluXCIsXG4gIFwiRGFycmlvblwiLFxuICBcIkRhcnJvblwiLFxuICBcIkRhcnJ5bFwiLFxuICBcIkRhcndpblwiLFxuICBcIkRhcnlsXCIsXG4gIFwiRGFzaGF3blwiLFxuICBcIkRhc2lhXCIsXG4gIFwiRGF2ZVwiLFxuICBcIkRhdmlkXCIsXG4gIFwiRGF2aW5cIixcbiAgXCJEYXZpb25cIixcbiAgXCJEYXZvblwiLFxuICBcIkRhdm9udGVcIixcbiAgXCJEYXduXCIsXG4gIFwiRGF3c29uXCIsXG4gIFwiRGF4XCIsXG4gIFwiRGF5YW5hXCIsXG4gIFwiRGF5bmFcIixcbiAgXCJEYXluZVwiLFxuICBcIkRheXRvblwiLFxuICBcIkRlYW5cIixcbiAgXCJEZWFuZ2Vsb1wiLFxuICBcIkRlYW5uYVwiLFxuICBcIkRlYm9yYWhcIixcbiAgXCJEZWNsYW5cIixcbiAgXCJEZWRyaWNcIixcbiAgXCJEZWRyaWNrXCIsXG4gIFwiRGVlXCIsXG4gIFwiRGVpb25cIixcbiAgXCJEZWphXCIsXG4gIFwiRGVqYWhcIixcbiAgXCJEZWpvblwiLFxuICBcIkRlanVhblwiLFxuICBcIkRlbGFuZXlcIixcbiAgXCJEZWxiZXJ0XCIsXG4gIFwiRGVsZmluYVwiLFxuICBcIkRlbGlhXCIsXG4gIFwiRGVsaWxhaFwiLFxuICBcIkRlbGxcIixcbiAgXCJEZWxsYVwiLFxuICBcIkRlbG1lclwiLFxuICBcIkRlbG9yZXNcIixcbiAgXCJEZWxwaGFcIixcbiAgXCJEZWxwaGlhXCIsXG4gIFwiRGVscGhpbmVcIixcbiAgXCJEZWx0YVwiLFxuICBcIkRlbWFyY29cIixcbiAgXCJEZW1hcmN1c1wiLFxuICBcIkRlbWFyaW9cIixcbiAgXCJEZW1ldHJpc1wiLFxuICBcIkRlbWV0cml1c1wiLFxuICBcIkRlbW9uZFwiLFxuICBcIkRlbmFcIixcbiAgXCJEZW5pc1wiLFxuICBcIkRlbm5pc1wiLFxuICBcIkRlb25cIixcbiAgXCJEZW9uZHJlXCIsXG4gIFwiRGVvbnRhZVwiLFxuICBcIkRlb250ZVwiLFxuICBcIkRlcmVja1wiLFxuICBcIkRlcmVrXCIsXG4gIFwiRGVyaWNrXCIsXG4gIFwiRGVyb25cIixcbiAgXCJEZXJyaWNrXCIsXG4gIFwiRGVzaGF1blwiLFxuICBcIkRlc2hhd25cIixcbiAgXCJEZXNpcmVlXCIsXG4gIFwiRGVzbW9uZFwiLFxuICBcIkRlc3NpZVwiLFxuICBcIkRlc3RhbnlcIixcbiAgXCJEZXN0aW5cIixcbiAgXCJEZXN0aW5lZVwiLFxuICBcIkRlc3RpbmV5XCIsXG4gIFwiRGVzdGluaVwiLFxuICBcIkRlc3RpbnlcIixcbiAgXCJEZXZhblwiLFxuICBcIkRldmFudGVcIixcbiAgXCJEZXZlblwiLFxuICBcIkRldmluXCIsXG4gIFwiRGV2b25cIixcbiAgXCJEZXZvbnRlXCIsXG4gIFwiRGV2eW5cIixcbiAgXCJEZXdheW5lXCIsXG4gIFwiRGV3aXR0XCIsXG4gIFwiRGV4dGVyXCIsXG4gIFwiRGlhbW9uZFwiLFxuICBcIkRpYW5hXCIsXG4gIFwiRGlhbm5hXCIsXG4gIFwiRGllZ29cIixcbiAgXCJEaWxsYW5cIixcbiAgXCJEaWxsb25cIixcbiAgXCJEaW1pdHJpXCIsXG4gIFwiRGluYVwiLFxuICBcIkRpbm9cIixcbiAgXCJEaW9uXCIsXG4gIFwiRGl4aWVcIixcbiAgXCJEb2NrXCIsXG4gIFwiRG9sbHlcIixcbiAgXCJEb2xvcmVzXCIsXG4gIFwiRG9tZW5pY1wiLFxuICBcIkRvbWVuaWNhXCIsXG4gIFwiRG9tZW5pY2tcIixcbiAgXCJEb21lbmljb1wiLFxuICBcIkRvbWluZ29cIixcbiAgXCJEb21pbmljXCIsXG4gIFwiRG9taW5pcXVlXCIsXG4gIFwiRG9uXCIsXG4gIFwiRG9uYWxkXCIsXG4gIFwiRG9uYXRvXCIsXG4gIFwiRG9uYXZvblwiLFxuICBcIkRvbm5hXCIsXG4gIFwiRG9ubmVsbFwiLFxuICBcIkRvbm5pZVwiLFxuICBcIkRvbm55XCIsXG4gIFwiRG9yYVwiLFxuICBcIkRvcmNhc1wiLFxuICBcIkRvcmlhblwiLFxuICBcIkRvcmlzXCIsXG4gIFwiRG9yb3RoZWFcIixcbiAgXCJEb3JvdGh5XCIsXG4gIFwiRG9ycmlzXCIsXG4gIFwiRG9ydGhhXCIsXG4gIFwiRG9ydGh5XCIsXG4gIFwiRG91Z1wiLFxuICBcIkRvdWdsYXNcIixcbiAgXCJEb3ZpZVwiLFxuICBcIkRveWxlXCIsXG4gIFwiRHJha2VcIixcbiAgXCJEcmV3XCIsXG4gIFwiRHVhbmVcIixcbiAgXCJEdWRsZXlcIixcbiAgXCJEdWxjZVwiLFxuICBcIkR1bmNhblwiLFxuICBcIkR1cndhcmRcIixcbiAgXCJEdXN0aW5cIixcbiAgXCJEdXN0eVwiLFxuICBcIkR3aWdodFwiLFxuICBcIkR5bGFuXCIsXG4gIFwiRWFybFwiLFxuICBcIkVhcmxlbmVcIixcbiAgXCJFYXJsaW5lXCIsXG4gIFwiRWFybmVzdFwiLFxuICBcIkVhcm5lc3RpbmVcIixcbiAgXCJFYXN0ZXJcIixcbiAgXCJFYXN0b25cIixcbiAgXCJFYmJhXCIsXG4gIFwiRWJvbnlcIixcbiAgXCJFZFwiLFxuICBcIkVkYVwiLFxuICBcIkVkZFwiLFxuICBcIkVkZGllXCIsXG4gIFwiRWRlblwiLFxuICBcIkVkZ2FyXCIsXG4gIFwiRWRnYXJkb1wiLFxuICBcIkVkaXNvblwiLFxuICBcIkVkbW9uZFwiLFxuICBcIkVkbXVuZFwiLFxuICBcIkVkbmFcIixcbiAgXCJFZHVhcmRvXCIsXG4gIFwiRWR3YXJkXCIsXG4gIFwiRWR3YXJkb1wiLFxuICBcIkVkd2luXCIsXG4gIFwiRWR3aW5hXCIsXG4gIFwiRWR5dGhcIixcbiAgXCJFZHl0aGVcIixcbiAgXCJFZmZpZVwiLFxuICBcIkVmcmFpblwiLFxuICBcIkVmcmVuXCIsXG4gIFwiRWlsZWVuXCIsXG4gIFwiRWluYXJcIixcbiAgXCJFaW5vXCIsXG4gIFwiRWxhZGlvXCIsXG4gIFwiRWxhaW5hXCIsXG4gIFwiRWxiZXJ0XCIsXG4gIFwiRWxkYVwiLFxuICBcIkVsZG9uXCIsXG4gIFwiRWxkb3JhXCIsXG4gIFwiRWxkcmVkXCIsXG4gIFwiRWxkcmlkZ2VcIixcbiAgXCJFbGVhbm9yYVwiLFxuICBcIkVsZWFub3JlXCIsXG4gIFwiRWxlYXphclwiLFxuICBcIkVsZWN0YVwiLFxuICBcIkVsZW5hXCIsXG4gIFwiRWxlbm9yXCIsXG4gIFwiRWxlbm9yYVwiLFxuICBcIkVsZW9ub3JlXCIsXG4gIFwiRWxmcmllZGFcIixcbiAgXCJFbGlcIixcbiAgXCJFbGlhblwiLFxuICBcIkVsaWFuZVwiLFxuICBcIkVsaWFzXCIsXG4gIFwiRWxpZXplclwiLFxuICBcIkVsaWphaFwiLFxuICBcIkVsaW5vclwiLFxuICBcIkVsaW5vcmVcIixcbiAgXCJFbGlzYVwiLFxuICBcIkVsaXNhYmV0aFwiLFxuICBcIkVsaXNlXCIsXG4gIFwiRWxpc2VvXCIsXG4gIFwiRWxpc2hhXCIsXG4gIFwiRWxpc3NhXCIsXG4gIFwiRWxpemFcIixcbiAgXCJFbGl6YWJldGhcIixcbiAgXCJFbGxhXCIsXG4gIFwiRWxsZW5cIixcbiAgXCJFbGxpZVwiLFxuICBcIkVsbGlvdFwiLFxuICBcIkVsbGlvdHRcIixcbiAgXCJFbGxpc1wiLFxuICBcIkVsbHN3b3J0aFwiLFxuICBcIkVsbWVyXCIsXG4gIFwiRWxtaXJhXCIsXG4gIFwiRWxtb1wiLFxuICBcIkVsbW9yZVwiLFxuICBcIkVsbmFcIixcbiAgXCJFbG5vcmFcIixcbiAgXCJFbG9keVwiLFxuICBcIkVsb2lzYVwiLFxuICBcIkVsb2lzZVwiLFxuICBcIkVsb3Vpc2VcIixcbiAgXCJFbG95XCIsXG4gIFwiRWxyb3lcIixcbiAgXCJFbHNhXCIsXG4gIFwiRWxzZVwiLFxuICBcIkVsc2llXCIsXG4gIFwiRWx0YVwiLFxuICBcIkVsdG9uXCIsXG4gIFwiRWx2YVwiLFxuICBcIkVsdmVyYVwiLFxuICBcIkVsdmllXCIsXG4gIFwiRWx2aXNcIixcbiAgXCJFbHdpblwiLFxuICBcIkVsd3luXCIsXG4gIFwiRWx5c2VcIixcbiAgXCJFbHlzc2FcIixcbiAgXCJFbHphXCIsXG4gIFwiRW1hbnVlbFwiLFxuICBcIkVtZWxpYVwiLFxuICBcIkVtZWxpZVwiLFxuICBcIkVtZWx5XCIsXG4gIFwiRW1lcmFsZFwiLFxuICBcIkVtZXJzb25cIixcbiAgXCJFbWVyeVwiLFxuICBcIkVtaWVcIixcbiAgXCJFbWlsXCIsXG4gIFwiRW1pbGVcIixcbiAgXCJFbWlsaWFcIixcbiAgXCJFbWlsaWFub1wiLFxuICBcIkVtaWxpZVwiLFxuICBcIkVtaWxpb1wiLFxuICBcIkVtaWx5XCIsXG4gIFwiRW1tYVwiLFxuICBcIkVtbWFsZWVcIixcbiAgXCJFbW1hbnVlbFwiLFxuICBcIkVtbWFudWVsbGVcIixcbiAgXCJFbW1ldFwiLFxuICBcIkVtbWV0dFwiLFxuICBcIkVtbWllXCIsXG4gIFwiRW1taXR0XCIsXG4gIFwiRW1teVwiLFxuICBcIkVtb3J5XCIsXG4gIFwiRW5hXCIsXG4gIFwiRW5pZFwiLFxuICBcIkVub2NoXCIsXG4gIFwiRW5vbGFcIixcbiAgXCJFbm9zXCIsXG4gIFwiRW5yaWNvXCIsXG4gIFwiRW5yaXF1ZVwiLFxuICBcIkVwaHJhaW1cIixcbiAgXCJFcmFcIixcbiAgXCJFcmliZXJ0b1wiLFxuICBcIkVyaWNcIixcbiAgXCJFcmljYVwiLFxuICBcIkVyaWNoXCIsXG4gIFwiRXJpY2tcIixcbiAgXCJFcmlja2FcIixcbiAgXCJFcmlrXCIsXG4gIFwiRXJpa2FcIixcbiAgXCJFcmluXCIsXG4gIFwiRXJsaW5nXCIsXG4gIFwiRXJuYVwiLFxuICBcIkVybmVzdFwiLFxuICBcIkVybmVzdGluYVwiLFxuICBcIkVybmVzdGluZVwiLFxuICBcIkVybmVzdG9cIixcbiAgXCJFcm5pZVwiLFxuICBcIkVydmluXCIsXG4gIFwiRXJ3aW5cIixcbiAgXCJFcnluXCIsXG4gIFwiRXNtZXJhbGRhXCIsXG4gIFwiRXNwZXJhbnphXCIsXG4gIFwiRXN0YVwiLFxuICBcIkVzdGViYW5cIixcbiAgXCJFc3RlZmFuaWFcIixcbiAgXCJFc3RlbFwiLFxuICBcIkVzdGVsbFwiLFxuICBcIkVzdGVsbGFcIixcbiAgXCJFc3RlbGxlXCIsXG4gIFwiRXN0ZXZhblwiLFxuICBcIkVzdGhlclwiLFxuICBcIkVzdHJlbGxhXCIsXG4gIFwiRXRoYVwiLFxuICBcIkV0aGFuXCIsXG4gIFwiRXRoZWxcIixcbiAgXCJFdGhlbHluXCIsXG4gIFwiRXRoeWxcIixcbiAgXCJFdHRpZVwiLFxuICBcIkV1ZG9yYVwiLFxuICBcIkV1Z2VuZVwiLFxuICBcIkV1Z2VuaWFcIixcbiAgXCJFdWxhXCIsXG4gIFwiRXVsYWhcIixcbiAgXCJFdWxhbGlhXCIsXG4gIFwiRXVuYVwiLFxuICBcIkV1bmljZVwiLFxuICBcIkV1c2ViaW9cIixcbiAgXCJFdmFcIixcbiAgXCJFdmFseW5cIixcbiAgXCJFdmFuXCIsXG4gIFwiRXZhbmdlbGluZVwiLFxuICBcIkV2YW5zXCIsXG4gIFwiRXZlXCIsXG4gIFwiRXZlbGluZVwiLFxuICBcIkV2ZWx5blwiLFxuICBcIkV2ZXJhcmRvXCIsXG4gIFwiRXZlcmV0dFwiLFxuICBcIkV2ZXJldHRlXCIsXG4gIFwiRXZlcnRcIixcbiAgXCJFdmllXCIsXG4gIFwiRXdhbGRcIixcbiAgXCJFd2VsbFwiLFxuICBcIkV6ZWtpZWxcIixcbiAgXCJFemVxdWllbFwiLFxuICBcIkV6cmFcIixcbiAgXCJGYWJpYW5cIixcbiAgXCJGYWJpb2xhXCIsXG4gIFwiRmFlXCIsXG4gIFwiRmFubmllXCIsXG4gIFwiRmFubnlcIixcbiAgXCJGYXRpbWFcIixcbiAgXCJGYXVzdGlub1wiLFxuICBcIkZhdXN0b1wiLFxuICBcIkZhdmlhblwiLFxuICBcIkZheVwiLFxuICBcIkZheWVcIixcbiAgXCJGZWRlcmljb1wiLFxuICBcIkZlbGljaWFcIixcbiAgXCJGZWxpY2l0YVwiLFxuICBcIkZlbGljaXR5XCIsXG4gIFwiRmVsaXBhXCIsXG4gIFwiRmVsaXBlXCIsXG4gIFwiRmVsaXhcIixcbiAgXCJGZWx0b25cIixcbiAgXCJGZXJtaW5cIixcbiAgXCJGZXJuXCIsXG4gIFwiRmVybmFuZG9cIixcbiAgXCJGZXJuZVwiLFxuICBcIkZpZGVsXCIsXG4gIFwiRmlsaWJlcnRvXCIsXG4gIFwiRmlsb21lbmFcIixcbiAgXCJGaW5uXCIsXG4gIFwiRmlvbmFcIixcbiAgXCJGbGF2aWVcIixcbiAgXCJGbGF2aW9cIixcbiAgXCJGbGV0YVwiLFxuICBcIkZsZXRjaGVyXCIsXG4gIFwiRmxvXCIsXG4gIFwiRmxvcmVuY2VcIixcbiAgXCJGbG9yZW5jaW9cIixcbiAgXCJGbG9yaWFuXCIsXG4gIFwiRmxvcmlkYVwiLFxuICBcIkZsb3JpbmVcIixcbiAgXCJGbG9zc2llXCIsXG4gIFwiRmxveVwiLFxuICBcIkZsb3lkXCIsXG4gIFwiRm9yZFwiLFxuICBcIkZvcmVzdFwiLFxuICBcIkZvcnJlc3RcIixcbiAgXCJGb3N0ZXJcIixcbiAgXCJGcmFuY2VzXCIsXG4gIFwiRnJhbmNlc2NhXCIsXG4gIFwiRnJhbmNlc2NvXCIsXG4gIFwiRnJhbmNpc1wiLFxuICBcIkZyYW5jaXNjYVwiLFxuICBcIkZyYW5jaXNjb1wiLFxuICBcIkZyYW5jb1wiLFxuICBcIkZyYW5rXCIsXG4gIFwiRnJhbmtpZVwiLFxuICBcIkZyYW56XCIsXG4gIFwiRnJlZFwiLFxuICBcIkZyZWRhXCIsXG4gIFwiRnJlZGRpZVwiLFxuICBcIkZyZWRkeVwiLFxuICBcIkZyZWRlcmljXCIsXG4gIFwiRnJlZGVyaWNrXCIsXG4gIFwiRnJlZGVyaWtcIixcbiAgXCJGcmVkZXJpcXVlXCIsXG4gIFwiRnJlZHJpY2tcIixcbiAgXCJGcmVkeVwiLFxuICBcIkZyZWVkYVwiLFxuICBcIkZyZWVtYW5cIixcbiAgXCJGcmVpZGFcIixcbiAgXCJGcmlkYVwiLFxuICBcIkZyaWVkYVwiLFxuICBcIkZyaWVkcmljaFwiLFxuICBcIkZyaXR6XCIsXG4gIFwiRnVybWFuXCIsXG4gIFwiR2FiZVwiLFxuICBcIkdhYnJpZWxcIixcbiAgXCJHYWJyaWVsbGFcIixcbiAgXCJHYWJyaWVsbGVcIixcbiAgXCJHYWV0YW5vXCIsXG4gIFwiR2FnZVwiLFxuICBcIkdhaWxcIixcbiAgXCJHYXJkbmVyXCIsXG4gIFwiR2FyZXR0XCIsXG4gIFwiR2FyZmllbGRcIixcbiAgXCJHYXJsYW5kXCIsXG4gIFwiR2FybmV0XCIsXG4gIFwiR2FybmV0dFwiLFxuICBcIkdhcnJldFwiLFxuICBcIkdhcnJldHRcIixcbiAgXCJHYXJyaWNrXCIsXG4gIFwiR2Fycmlzb25cIixcbiAgXCJHYXJyeVwiLFxuICBcIkdhcnRoXCIsXG4gIFwiR2FzdG9uXCIsXG4gIFwiR2F2aW5cIixcbiAgXCJHYXlcIixcbiAgXCJHYXlsZVwiLFxuICBcIkdheWxvcmRcIixcbiAgXCJHZW5lXCIsXG4gIFwiR2VuZXJhbFwiLFxuICBcIkdlbmVzaXNcIixcbiAgXCJHZW5ldmlldmVcIixcbiAgXCJHZW5uYXJvXCIsXG4gIFwiR2Vub3ZldmFcIixcbiAgXCJHZW9cIixcbiAgXCJHZW9mZnJleVwiLFxuICBcIkdlb3JnZVwiLFxuICBcIkdlb3JnZXR0ZVwiLFxuICBcIkdlb3JnaWFuYVwiLFxuICBcIkdlb3JnaWFubmFcIixcbiAgXCJHZW92YW5uaVwiLFxuICBcIkdlb3Zhbm55XCIsXG4gIFwiR2VvdmFueVwiLFxuICBcIkdlcmFsZFwiLFxuICBcIkdlcmFsZGluZVwiLFxuICBcIkdlcmFyZFwiLFxuICBcIkdlcmFyZG9cIixcbiAgXCJHZXJkYVwiLFxuICBcIkdlcmhhcmRcIixcbiAgXCJHZXJtYWluZVwiLFxuICBcIkdlcm1hblwiLFxuICBcIkdlcnJ5XCIsXG4gIFwiR2Vyc29uXCIsXG4gIFwiR2VydHJ1ZGVcIixcbiAgXCJHaWFcIixcbiAgXCJHaWFubmlcIixcbiAgXCJHaWRlb25cIixcbiAgXCJHaWxiZXJ0XCIsXG4gIFwiR2lsYmVydG9cIixcbiAgXCJHaWxkYVwiLFxuICBcIkdpbGVzXCIsXG4gIFwiR2lsbGlhblwiLFxuICBcIkdpbmFcIixcbiAgXCJHaW5vXCIsXG4gIFwiR2lvdmFuaVwiLFxuICBcIkdpb3Zhbm5hXCIsXG4gIFwiR2lvdmFubmlcIixcbiAgXCJHaW92YW5ueVwiLFxuICBcIkdpc3NlbGxlXCIsXG4gIFwiR2l1c2VwcGVcIixcbiAgXCJHbGFkeWNlXCIsXG4gIFwiR2xhZHlzXCIsXG4gIFwiR2xlblwiLFxuICBcIkdsZW5kYVwiLFxuICBcIkdsZW5uYVwiLFxuICBcIkdsZW5uaWVcIixcbiAgXCJHbG9yaWFcIixcbiAgXCJHb2RmcmV5XCIsXG4gIFwiR29sZGFcIixcbiAgXCJHb2xkZW5cIixcbiAgXCJHb256YWxvXCIsXG4gIFwiR29yZG9uXCIsXG4gIFwiR3JhY2VcIixcbiAgXCJHcmFjaWVcIixcbiAgXCJHcmFjaWVsYVwiLFxuICBcIkdyYWR5XCIsXG4gIFwiR3JhaGFtXCIsXG4gIFwiR3JhbnRcIixcbiAgXCJHcmFudmlsbGVcIixcbiAgXCJHcmF5Y2VcIixcbiAgXCJHcmF5c29uXCIsXG4gIFwiR3JlZW5cIixcbiAgXCJHcmVnXCIsXG4gIFwiR3JlZ2dcIixcbiAgXCJHcmVnb3JpYVwiLFxuICBcIkdyZWdvcmlvXCIsXG4gIFwiR3JlZ29yeVwiLFxuICBcIkdyZXRhXCIsXG4gIFwiR3JldGNoZW5cIixcbiAgXCJHcmV5c29uXCIsXG4gIFwiR3JpZmZpblwiLFxuICBcIkdyb3ZlclwiLFxuICBcIkd1YWRhbHVwZVwiLFxuICBcIkd1ZHJ1blwiLFxuICBcIkd1aWRvXCIsXG4gIFwiR3VpbGxlcm1vXCIsXG4gIFwiR3Vpc2VwcGVcIixcbiAgXCJHdW5uYXJcIixcbiAgXCJHdW5uZXJcIixcbiAgXCJHdXNcIixcbiAgXCJHdXNzaWVcIixcbiAgXCJHdXN0XCIsXG4gIFwiR3VzdGF2ZVwiLFxuICBcIkd1eVwiLFxuICBcIkd3ZW5cIixcbiAgXCJHd2VuZG9seW5cIixcbiAgXCJIYWRsZXlcIixcbiAgXCJIYWlsZWVcIixcbiAgXCJIYWlsZXlcIixcbiAgXCJIYWlsaWVcIixcbiAgXCJIYWxcIixcbiAgXCJIYWxlaWdoXCIsXG4gIFwiSGFsZXlcIixcbiAgXCJIYWxpZVwiLFxuICBcIkhhbGxlXCIsXG4gIFwiSGFsbGllXCIsXG4gIFwiSGFua1wiLFxuICBcIkhhbm5hXCIsXG4gIFwiSGFubmFoXCIsXG4gIFwiSGFuc1wiLFxuICBcIkhhcmR5XCIsXG4gIFwiSGFybGV5XCIsXG4gIFwiSGFybW9uXCIsXG4gIFwiSGFybW9ueVwiLFxuICBcIkhhcm9sZFwiLFxuICBcIkhhcnJpc29uXCIsXG4gIFwiSGFycnlcIixcbiAgXCJIYXJ2ZXlcIixcbiAgXCJIYXNrZWxsXCIsXG4gIFwiSGFzc2FuXCIsXG4gIFwiSGFzc2llXCIsXG4gIFwiSGF0dGllXCIsXG4gIFwiSGF2ZW5cIixcbiAgXCJIYXlkZW5cIixcbiAgXCJIYXlsZWVcIixcbiAgXCJIYXlsZXlcIixcbiAgXCJIYXlsaWVcIixcbiAgXCJIYXplbFwiLFxuICBcIkhhemxlXCIsXG4gIFwiSGVhdGhcIixcbiAgXCJIZWF0aGVyXCIsXG4gIFwiSGVhdmVuXCIsXG4gIFwiSGViZXJcIixcbiAgXCJIZWN0b3JcIixcbiAgXCJIZWlkaVwiLFxuICBcIkhlbGVuXCIsXG4gIFwiSGVsZW5hXCIsXG4gIFwiSGVsZW5lXCIsXG4gIFwiSGVsZ2FcIixcbiAgXCJIZWxsZW5cIixcbiAgXCJIZWxtZXJcIixcbiAgXCJIZWxvaXNlXCIsXG4gIFwiSGVuZGVyc29uXCIsXG4gIFwiSGVucmlcIixcbiAgXCJIZW5yaWV0dGVcIixcbiAgXCJIZW5yeVwiLFxuICBcIkhlcmJlcnRcIixcbiAgXCJIZXJtYW5cIixcbiAgXCJIZXJtYW5uXCIsXG4gIFwiSGVybWluYVwiLFxuICBcIkhlcm1pbmlhXCIsXG4gIFwiSGVybWluaW9cIixcbiAgXCJIZXJzaGVsXCIsXG4gIFwiSGVydGFcIixcbiAgXCJIZXJ0aGFcIixcbiAgXCJIZXN0ZXJcIixcbiAgXCJIZXR0aWVcIixcbiAgXCJIaWxhcmlvXCIsXG4gIFwiSGlsYmVydFwiLFxuICBcIkhpbGRhXCIsXG4gIFwiSGlsZGVnYXJkXCIsXG4gIFwiSGlsbGFyZFwiLFxuICBcIkhpbGxhcnlcIixcbiAgXCJIaWxtYVwiLFxuICBcIkhpbHRvblwiLFxuICBcIkhpcG9saXRvXCIsXG4gIFwiSGlyYW1cIixcbiAgXCJIb2JhcnRcIixcbiAgXCJIb2xkZW5cIixcbiAgXCJIb2xsaWVcIixcbiAgXCJIb2xsaXNcIixcbiAgXCJIb2xseVwiLFxuICBcIkhvcGVcIixcbiAgXCJIb3JhY2VcIixcbiAgXCJIb3JhY2lvXCIsXG4gIFwiSG9ydGVuc2VcIixcbiAgXCJIb3NlYVwiLFxuICBcIkhvdXN0b25cIixcbiAgXCJIb3dhcmRcIixcbiAgXCJIb3dlbGxcIixcbiAgXCJIb3l0XCIsXG4gIFwiSHViZXJ0XCIsXG4gIFwiSHVkc29uXCIsXG4gIFwiSHVnaFwiLFxuICBcIkh1bGRhXCIsXG4gIFwiSHVtYmVydG9cIixcbiAgXCJIdW50ZXJcIixcbiAgXCJIeW1hblwiLFxuICBcIklhblwiLFxuICBcIklicmFoaW1cIixcbiAgXCJJY2llXCIsXG4gIFwiSWRhXCIsXG4gIFwiSWRlbGxcIixcbiAgXCJJZGVsbGFcIixcbiAgXCJJZ25hY2lvXCIsXG4gIFwiSWduYXRpdXNcIixcbiAgXCJJa2VcIixcbiAgXCJJbGFcIixcbiAgXCJJbGVuZVwiLFxuICBcIklsaWFuYVwiLFxuICBcIkltYVwiLFxuICBcIkltYW5pXCIsXG4gIFwiSW1lbGRhXCIsXG4gIFwiSW1tYW51ZWxcIixcbiAgXCJJbW9nZW5lXCIsXG4gIFwiSW5lc1wiLFxuICBcIklybWFcIixcbiAgXCJJcnZpbmdcIixcbiAgXCJJcndpblwiLFxuICBcIklzYWFjXCIsXG4gIFwiSXNhYmVsXCIsXG4gIFwiSXNhYmVsbFwiLFxuICBcIklzYWJlbGxhXCIsXG4gIFwiSXNhYmVsbGVcIixcbiAgXCJJc2FjXCIsXG4gIFwiSXNhZG9yZVwiLFxuICBcIklzYWlcIixcbiAgXCJJc2FpYWhcIixcbiAgXCJJc2FpYXNcIixcbiAgXCJJc2lkcm9cIixcbiAgXCJJc21hZWxcIixcbiAgXCJJc29iZWxcIixcbiAgXCJJc29tXCIsXG4gIFwiSXNyYWVsXCIsXG4gIFwiSXNzYWNcIixcbiAgXCJJdHplbFwiLFxuICBcIkl2YVwiLFxuICBcIkl2YWhcIixcbiAgXCJJdm9yeVwiLFxuICBcIkl2eVwiLFxuICBcIkl6YWJlbGxhXCIsXG4gIFwiSXphaWFoXCIsXG4gIFwiSmFiYXJpXCIsXG4gIFwiSmFjZVwiLFxuICBcIkphY2V5XCIsXG4gIFwiSmFjaW50aGVcIixcbiAgXCJKYWNpbnRvXCIsXG4gIFwiSmFja1wiLFxuICBcIkphY2tlbGluZVwiLFxuICBcIkphY2tpZVwiLFxuICBcIkphY2tseW5cIixcbiAgXCJKYWNrc29uXCIsXG4gIFwiSmFja3lcIixcbiAgXCJKYWNseW5cIixcbiAgXCJKYWNxdWVseW5cIixcbiAgXCJKYWNxdWVzXCIsXG4gIFwiSmFjeW50aGVcIixcbiAgXCJKYWRhXCIsXG4gIFwiSmFkZVwiLFxuICBcIkphZGVuXCIsXG4gIFwiSmFkb25cIixcbiAgXCJKYWR5blwiLFxuICBcIkphZWRlblwiLFxuICBcIkphaWRhXCIsXG4gIFwiSmFpZGVuXCIsXG4gIFwiSmFpbHluXCIsXG4gIFwiSmFpbWVcIixcbiAgXCJKYWlyb1wiLFxuICBcIkpha2F5bGFcIixcbiAgXCJKYWtlXCIsXG4gIFwiSmFrb2JcIixcbiAgXCJKYWxlZWxcIixcbiAgXCJKYWxlblwiLFxuICBcIkphbG9uXCIsXG4gIFwiSmFseW5cIixcbiAgXCJKYW1hYWxcIixcbiAgXCJKYW1hbFwiLFxuICBcIkphbWFyXCIsXG4gIFwiSmFtYXJjdXNcIixcbiAgXCJKYW1lbFwiLFxuICBcIkphbWVzb25cIixcbiAgXCJKYW1leVwiLFxuICBcIkphbWllXCIsXG4gIFwiSmFtaWxcIixcbiAgXCJKYW1pclwiLFxuICBcIkphbWlzb25cIixcbiAgXCJKYW1taWVcIixcbiAgXCJKYW5cIixcbiAgXCJKYW5hXCIsXG4gIFwiSmFuYWVcIixcbiAgXCJKYW5lXCIsXG4gIFwiSmFuZWxsZVwiLFxuICBcIkphbmVzc2FcIixcbiAgXCJKYW5ldFwiLFxuICBcIkphbmljZVwiLFxuICBcIkphbmlja1wiLFxuICBcIkphbmllXCIsXG4gIFwiSmFuaXNcIixcbiAgXCJKYW5peWFcIixcbiAgXCJKYW5uaWVcIixcbiAgXCJKYW55XCIsXG4gIFwiSmFxdWFuXCIsXG4gIFwiSmFxdWVsaW5cIixcbiAgXCJKYXF1ZWxpbmVcIixcbiAgXCJKYXJlZFwiLFxuICBcIkphcmVuXCIsXG4gIFwiSmFyb2RcIixcbiAgXCJKYXJvblwiLFxuICBcIkphcnJlZFwiLFxuICBcIkphcnJlbGxcIixcbiAgXCJKYXJyZXRcIixcbiAgXCJKYXJyZXR0XCIsXG4gIFwiSmFycm9kXCIsXG4gIFwiSmFydmlzXCIsXG4gIFwiSmFzZW5cIixcbiAgXCJKYXNtaW5cIixcbiAgXCJKYXNvblwiLFxuICBcIkphc3BlclwiLFxuICBcIkphdW5pdGFcIixcbiAgXCJKYXZpZXJcIixcbiAgXCJKYXZvblwiLFxuICBcIkphdm9udGVcIixcbiAgXCJKYXlcIixcbiAgXCJKYXljZVwiLFxuICBcIkpheWNlZVwiLFxuICBcIkpheWRhXCIsXG4gIFwiSmF5ZGVcIixcbiAgXCJKYXlkZW5cIixcbiAgXCJKYXlkb25cIixcbiAgXCJKYXlsYW5cIixcbiAgXCJKYXlsZW5cIixcbiAgXCJKYXlsaW5cIixcbiAgXCJKYXlsb25cIixcbiAgXCJKYXltZVwiLFxuICBcIkpheW5lXCIsXG4gIFwiSmF5c29uXCIsXG4gIFwiSmF6bHluXCIsXG4gIFwiSmF6bWluXCIsXG4gIFwiSmF6bXluXCIsXG4gIFwiSmF6bXluZVwiLFxuICBcIkplYW5cIixcbiAgXCJKZWFuZXR0ZVwiLFxuICBcIkplYW5pZVwiLFxuICBcIkplYW5uZVwiLFxuICBcIkplZFwiLFxuICBcIkplZGVkaWFoXCIsXG4gIFwiSmVkaWRpYWhcIixcbiAgXCJKZWZmXCIsXG4gIFwiSmVmZmVyZXlcIixcbiAgXCJKZWZmZXJ5XCIsXG4gIFwiSmVmZnJleVwiLFxuICBcIkplZmZyeVwiLFxuICBcIkplbmFcIixcbiAgXCJKZW5pZmVyXCIsXG4gIFwiSmVubmllXCIsXG4gIFwiSmVubmlmZXJcIixcbiAgXCJKZW5uaW5nc1wiLFxuICBcIkplbm55ZmVyXCIsXG4gIFwiSmVuc2VuXCIsXG4gIFwiSmVyYWRcIixcbiAgXCJKZXJhbGRcIixcbiAgXCJKZXJhbWllXCIsXG4gIFwiSmVyYW15XCIsXG4gIFwiSmVyZWxcIixcbiAgXCJKZXJlbWllXCIsXG4gIFwiSmVyZW15XCIsXG4gIFwiSmVybWFpblwiLFxuICBcIkplcm1haW5lXCIsXG4gIFwiSmVybWV5XCIsXG4gIFwiSmVyb2RcIixcbiAgXCJKZXJvbWVcIixcbiAgXCJKZXJvbXlcIixcbiAgXCJKZXJyZWxsXCIsXG4gIFwiSmVycm9kXCIsXG4gIFwiSmVycm9sZFwiLFxuICBcIkplcnJ5XCIsXG4gIFwiSmVzc1wiLFxuICBcIkplc3NlXCIsXG4gIFwiSmVzc2ljYVwiLFxuICBcIkplc3NpZVwiLFxuICBcIkplc3Npa2FcIixcbiAgXCJKZXNzeVwiLFxuICBcIkplc3N5Y2FcIixcbiAgXCJKZXN1c1wiLFxuICBcIkpldHRcIixcbiAgXCJKZXR0aWVcIixcbiAgXCJKZXZvblwiLFxuICBcIkpld2VsXCIsXG4gIFwiSmV3ZWxsXCIsXG4gIFwiSmlsbGlhblwiLFxuICBcIkppbW1pZVwiLFxuICBcIkppbW15XCIsXG4gIFwiSm9cIixcbiAgXCJKb2FuXCIsXG4gIFwiSm9hbmFcIixcbiAgXCJKb2FuaWVcIixcbiAgXCJKb2FubmVcIixcbiAgXCJKb2FubmllXCIsXG4gIFwiSm9hbm55XCIsXG4gIFwiSm9hbnlcIixcbiAgXCJKb2FxdWluXCIsXG4gIFwiSm9jZWx5blwiLFxuICBcIkpvZGllXCIsXG4gIFwiSm9keVwiLFxuICBcIkpvZVwiLFxuICBcIkpvZWxcIixcbiAgXCJKb2VsbGVcIixcbiAgXCJKb2VzcGhcIixcbiAgXCJKb2V5XCIsXG4gIFwiSm9oYW5cIixcbiAgXCJKb2hhbm5cIixcbiAgXCJKb2hhbm5hXCIsXG4gIFwiSm9oYXRoYW5cIixcbiAgXCJKb2huXCIsXG4gIFwiSm9obmF0aGFuXCIsXG4gIFwiSm9obmF0aG9uXCIsXG4gIFwiSm9obm5pZVwiLFxuICBcIkpvaG5ueVwiLFxuICBcIkpvaG5wYXVsXCIsXG4gIFwiSm9obnNvblwiLFxuICBcIkpvbGllXCIsXG4gIFwiSm9uXCIsXG4gIFwiSm9uYXNcIixcbiAgXCJKb25hdGFuXCIsXG4gIFwiSm9uYXRoYW5cIixcbiAgXCJKb25hdGhvblwiLFxuICBcIkpvcmRhblwiLFxuICBcIkpvcmRhbmVcIixcbiAgXCJKb3JkaVwiLFxuICBcIkpvcmRvblwiLFxuICBcIkpvcmR5XCIsXG4gIFwiSm9yZHluXCIsXG4gIFwiSm9yZ2VcIixcbiAgXCJKb3NlXCIsXG4gIFwiSm9zZWZhXCIsXG4gIFwiSm9zZWZpbmFcIixcbiAgXCJKb3NlcGhcIixcbiAgXCJKb3NlcGhpbmVcIixcbiAgXCJKb3NoXCIsXG4gIFwiSm9zaHVhXCIsXG4gIFwiSm9zaHVhaFwiLFxuICBcIkpvc2lhaFwiLFxuICBcIkpvc2lhbmVcIixcbiAgXCJKb3NpYW5uZVwiLFxuICBcIkpvc2llXCIsXG4gIFwiSm9zdWVcIixcbiAgXCJKb3ZhblwiLFxuICBcIkpvdmFuaVwiLFxuICBcIkpvdmFubnlcIixcbiAgXCJKb3ZhbnlcIixcbiAgXCJKb3lcIixcbiAgXCJKb3ljZVwiLFxuICBcIkp1YW5hXCIsXG4gIFwiSnVhbml0YVwiLFxuICBcIkp1ZGFoXCIsXG4gIFwiSnVkZFwiLFxuICBcIkp1ZGVcIixcbiAgXCJKdWRnZVwiLFxuICBcIkp1ZHNvblwiLFxuICBcIkp1ZHlcIixcbiAgXCJKdWxlc1wiLFxuICBcIkp1bGlhXCIsXG4gIFwiSnVsaWFuXCIsXG4gIFwiSnVsaWFuYVwiLFxuICBcIkp1bGlhbm5lXCIsXG4gIFwiSnVsaWVcIixcbiAgXCJKdWxpZW5cIixcbiAgXCJKdWxpZXRcIixcbiAgXCJKdWxpb1wiLFxuICBcIkp1bGl1c1wiLFxuICBcIkp1bmVcIixcbiAgXCJKdW5pb3JcIixcbiAgXCJKdW5pdXNcIixcbiAgXCJKdXN0ZW5cIixcbiAgXCJKdXN0aWNlXCIsXG4gIFwiSnVzdGluYVwiLFxuICBcIkp1c3RpbmVcIixcbiAgXCJKdXN0b25cIixcbiAgXCJKdXN0dXNcIixcbiAgXCJKdXN0eW5cIixcbiAgXCJKdXZlbmFsXCIsXG4gIFwiSnV3YW5cIixcbiAgXCJLYWNleVwiLFxuICBcIkthY2lcIixcbiAgXCJLYWNpZVwiLFxuICBcIkthZGVcIixcbiAgXCJLYWRlblwiLFxuICBcIkthZGluXCIsXG4gIFwiS2FlbGFcIixcbiAgXCJLYWVseW5cIixcbiAgXCJLYWlhXCIsXG4gIFwiS2FpbGVlXCIsXG4gIFwiS2FpbGV5XCIsXG4gIFwiS2FpbHluXCIsXG4gIFwiS2FpdGxpblwiLFxuICBcIkthaXRseW5cIixcbiAgXCJLYWxlXCIsXG4gIFwiS2FsZWJcIixcbiAgXCJLYWxlaWdoXCIsXG4gIFwiS2FsZXlcIixcbiAgXCJLYWxpXCIsXG4gIFwiS2FsbGllXCIsXG4gIFwiS2FtZXJvblwiLFxuICBcIkthbWlsbGVcIixcbiAgXCJLYW1yZW5cIixcbiAgXCJLYW1yb25cIixcbiAgXCJLYW1yeW5cIixcbiAgXCJLYW5lXCIsXG4gIFwiS2FyYVwiLFxuICBcIkthcmVlbVwiLFxuICBcIkthcmVsbGVcIixcbiAgXCJLYXJlblwiLFxuICBcIkthcmlcIixcbiAgXCJLYXJpYW5lXCIsXG4gIFwiS2FyaWFubmVcIixcbiAgXCJLYXJpbmFcIixcbiAgXCJLYXJpbmVcIixcbiAgXCJLYXJsXCIsXG4gIFwiS2FybGVlXCIsXG4gIFwiS2FybGV5XCIsXG4gIFwiS2FybGlcIixcbiAgXCJLYXJsaWVcIixcbiAgXCJLYXJvbGFublwiLFxuICBcIkthcnNvblwiLFxuICBcIkthc2FuZHJhXCIsXG4gIFwiS2FzZXlcIixcbiAgXCJLYXNzYW5kcmFcIixcbiAgXCJLYXRhcmluYVwiLFxuICBcIkthdGVsaW5cIixcbiAgXCJLYXRlbHluXCIsXG4gIFwiS2F0ZWx5bm5cIixcbiAgXCJLYXRoYXJpbmFcIixcbiAgXCJLYXRoZXJpbmVcIixcbiAgXCJLYXRoZXJ5blwiLFxuICBcIkthdGhsZWVuXCIsXG4gIFwiS2F0aGx5blwiLFxuICBcIkthdGhyeW5cIixcbiAgXCJLYXRocnluZVwiLFxuICBcIkthdGx5blwiLFxuICBcIkthdGx5bm5cIixcbiAgXCJLYXRyaW5hXCIsXG4gIFwiS2F0cmluZVwiLFxuICBcIkthdHRpZVwiLFxuICBcIkthdm9uXCIsXG4gIFwiS2F5XCIsXG4gIFwiS2F5YVwiLFxuICBcIktheWNlZVwiLFxuICBcIktheWRlblwiLFxuICBcIktheWxhXCIsXG4gIFwiS2F5bGFoXCIsXG4gIFwiS2F5bGVlXCIsXG4gIFwiS2F5bGVpZ2hcIixcbiAgXCJLYXlsZXlcIixcbiAgXCJLYXlsaVwiLFxuICBcIktheWxpZVwiLFxuICBcIktheWxpblwiLFxuICBcIktlYWdhblwiLFxuICBcIktlYW51XCIsXG4gIFwiS2VhcmFcIixcbiAgXCJLZWF0b25cIixcbiAgXCJLZWVnYW5cIixcbiAgXCJLZWVsZXlcIixcbiAgXCJLZWVseVwiLFxuICBcIktlZW5hblwiLFxuICBcIktlaXJhXCIsXG4gIFwiS2VpdGhcIixcbiAgXCJLZWxsZW5cIixcbiAgXCJLZWxsZXlcIixcbiAgXCJLZWxsaVwiLFxuICBcIktlbGxpZVwiLFxuICBcIktlbGx5XCIsXG4gIFwiS2Vsc2lcIixcbiAgXCJLZWxzaWVcIixcbiAgXCJLZWx0b25cIixcbiAgXCJLZWx2aW5cIixcbiAgXCJLZW5cIixcbiAgXCJLZW5kYWxsXCIsXG4gIFwiS2VuZHJhXCIsXG4gIFwiS2VuZHJpY2tcIixcbiAgXCJLZW5uYVwiLFxuICBcIktlbm5lZGlcIixcbiAgXCJLZW5uZWR5XCIsXG4gIFwiS2VubmV0aFwiLFxuICBcIktlbm5pdGhcIixcbiAgXCJLZW5ueVwiLFxuICBcIktlbnRvblwiLFxuICBcIktlbnlhXCIsXG4gIFwiS2VueWF0dGFcIixcbiAgXCJLZW55b25cIixcbiAgXCJLZW9uXCIsXG4gIFwiS2VzaGF1blwiLFxuICBcIktlc2hhd25cIixcbiAgXCJLZXZlblwiLFxuICBcIktldmluXCIsXG4gIFwiS2V2b25cIixcbiAgXCJLZXlvblwiLFxuICBcIktleXNoYXduXCIsXG4gIFwiS2hhbGlkXCIsXG4gIFwiS2hhbGlsXCIsXG4gIFwiS2lhblwiLFxuICBcIktpYW5hXCIsXG4gIFwiS2lhbm5hXCIsXG4gIFwiS2lhcmFcIixcbiAgXCJLaWFycmFcIixcbiAgXCJLaWVsXCIsXG4gIFwiS2llcmFcIixcbiAgXCJLaWVyYW5cIixcbiAgXCJLaWxleVwiLFxuICBcIktpbVwiLFxuICBcIktpbWJlcmx5XCIsXG4gIFwiS2luZ1wiLFxuICBcIktpcFwiLFxuICBcIktpcmFcIixcbiAgXCJLaXJrXCIsXG4gIFwiS2lyc3RlblwiLFxuICBcIktpcnN0aW5cIixcbiAgXCJLaXR0eVwiLFxuICBcIktvYmVcIixcbiAgXCJLb2J5XCIsXG4gIFwiS29keVwiLFxuICBcIktvbGJ5XCIsXG4gIFwiS29sZVwiLFxuICBcIktvcmJpblwiLFxuICBcIktvcmV5XCIsXG4gIFwiS29yeVwiLFxuICBcIktyYWlnXCIsXG4gIFwiS3Jpc1wiLFxuICBcIktyaXN0YVwiLFxuICBcIktyaXN0aWFuXCIsXG4gIFwiS3Jpc3RpblwiLFxuICBcIktyaXN0aW5hXCIsXG4gIFwiS3Jpc3RvZmVyXCIsXG4gIFwiS3Jpc3RvZmZlclwiLFxuICBcIktyaXN0b3BoZXJcIixcbiAgXCJLcmlzdHlcIixcbiAgXCJLcnlzdGFsXCIsXG4gIFwiS3J5c3RlbFwiLFxuICBcIktyeXN0aW5hXCIsXG4gIFwiS3VydFwiLFxuICBcIkt1cnRpc1wiLFxuICBcIkt5bGFcIixcbiAgXCJLeWxlXCIsXG4gIFwiS3lsZWVcIixcbiAgXCJLeWxlaWdoXCIsXG4gIFwiS3lsZXJcIixcbiAgXCJLeWxpZVwiLFxuICBcIkt5cmFcIixcbiAgXCJMYWNleVwiLFxuICBcIkxhY3lcIixcbiAgXCJMYWRhcml1c1wiLFxuICBcIkxhZmF5ZXR0ZVwiLFxuICBcIkxhaWxhXCIsXG4gIFwiTGFpc2hhXCIsXG4gIFwiTGFtYXJcIixcbiAgXCJMYW1iZXJ0XCIsXG4gIFwiTGFtb250XCIsXG4gIFwiTGFuY2VcIixcbiAgXCJMYW5kZW5cIixcbiAgXCJMYW5lXCIsXG4gIFwiTGFuZXlcIixcbiAgXCJMYXJpc3NhXCIsXG4gIFwiTGFyb25cIixcbiAgXCJMYXJyeVwiLFxuICBcIkxhcnVlXCIsXG4gIFwiTGF1cmFcIixcbiAgXCJMYXVyZWxcIixcbiAgXCJMYXVyZW5cIixcbiAgXCJMYXVyZW5jZVwiLFxuICBcIkxhdXJldHRhXCIsXG4gIFwiTGF1cmlhbmVcIixcbiAgXCJMYXVyaWFubmVcIixcbiAgXCJMYXVyaWVcIixcbiAgXCJMYXVyaW5lXCIsXG4gIFwiTGF1cnlcIixcbiAgXCJMYXVyeW5cIixcbiAgXCJMYXZhZGFcIixcbiAgXCJMYXZlcm5cIixcbiAgXCJMYXZlcm5hXCIsXG4gIFwiTGF2ZXJuZVwiLFxuICBcIkxhdmluYVwiLFxuICBcIkxhdmluaWFcIixcbiAgXCJMYXZvblwiLFxuICBcIkxhdm9ubmVcIixcbiAgXCJMYXdyZW5jZVwiLFxuICBcIkxhd3NvblwiLFxuICBcIkxheWxhXCIsXG4gIFwiTGF5bmVcIixcbiAgXCJMYXphcm9cIixcbiAgXCJMZWFcIixcbiAgXCJMZWFublwiLFxuICBcIkxlYW5uYVwiLFxuICBcIkxlYW5uZVwiLFxuICBcIkxlYXRoYVwiLFxuICBcIkxlZGFcIixcbiAgXCJMZWVcIixcbiAgXCJMZWlmXCIsXG4gIFwiTGVpbGFcIixcbiAgXCJMZWlsYW5pXCIsXG4gIFwiTGVsYVwiLFxuICBcIkxlbGFoXCIsXG4gIFwiTGVsYW5kXCIsXG4gIFwiTGVsaWFcIixcbiAgXCJMZW1waVwiLFxuICBcIkxlbXVlbFwiLFxuICBcIkxlbm5hXCIsXG4gIFwiTGVubmllXCIsXG4gIFwiTGVubnlcIixcbiAgXCJMZW5vcmFcIixcbiAgXCJMZW5vcmVcIixcbiAgXCJMZW9cIixcbiAgXCJMZW9sYVwiLFxuICBcIkxlb25cIixcbiAgXCJMZW9uYXJkXCIsXG4gIFwiTGVvbmFyZG9cIixcbiAgXCJMZW9uZVwiLFxuICBcIkxlb25lbFwiLFxuICBcIkxlb25pZVwiLFxuICBcIkxlb25vclwiLFxuICBcIkxlb25vcmFcIixcbiAgXCJMZW9wb2xkXCIsXG4gIFwiTGVvcG9sZG9cIixcbiAgXCJMZW9yYVwiLFxuICBcIkxlcmFcIixcbiAgXCJMZXNsZXlcIixcbiAgXCJMZXNsaWVcIixcbiAgXCJMZXNseVwiLFxuICBcIkxlc3NpZVwiLFxuICBcIkxlc3RlclwiLFxuICBcIkxldGFcIixcbiAgXCJMZXRoYVwiLFxuICBcIkxldGl0aWFcIixcbiAgXCJMZXZpXCIsXG4gIFwiTGV3XCIsXG4gIFwiTGV3aXNcIixcbiAgXCJMZXhpXCIsXG4gIFwiTGV4aWVcIixcbiAgXCJMZXh1c1wiLFxuICBcIkxpYVwiLFxuICBcIkxpYW1cIixcbiAgXCJMaWFuYVwiLFxuICBcIkxpYmJpZVwiLFxuICBcIkxpYmJ5XCIsXG4gIFwiTGlsYVwiLFxuICBcIkxpbGlhblwiLFxuICBcIkxpbGlhbmFcIixcbiAgXCJMaWxpYW5lXCIsXG4gIFwiTGlsbGFcIixcbiAgXCJMaWxsaWFuXCIsXG4gIFwiTGlsbGlhbmFcIixcbiAgXCJMaWxsaWVcIixcbiAgXCJMaWxseVwiLFxuICBcIkxpbHlcIixcbiAgXCJMaWx5YW5cIixcbiAgXCJMaW5hXCIsXG4gIFwiTGluY29sblwiLFxuICBcIkxpbmRhXCIsXG4gIFwiTGluZHNheVwiLFxuICBcIkxpbmRzZXlcIixcbiAgXCJMaW5uZWFcIixcbiAgXCJMaW5uaWVcIixcbiAgXCJMaW53b29kXCIsXG4gIFwiTGlvbmVsXCIsXG4gIFwiTGlzYVwiLFxuICBcIkxpc2FuZHJvXCIsXG4gIFwiTGlzZXR0ZVwiLFxuICBcIkxpdHp5XCIsXG4gIFwiTGl6YVwiLFxuICBcIkxpemV0aFwiLFxuICBcIkxpenppZVwiLFxuICBcIkxsZXdlbGx5blwiLFxuICBcIkxsb3lkXCIsXG4gIFwiTG9nYW5cIixcbiAgXCJMb2lzXCIsXG4gIFwiTG9sYVwiLFxuICBcIkxvbGl0YVwiLFxuICBcIkxvbWFcIixcbiAgXCJMb25cIixcbiAgXCJMb25kb25cIixcbiAgXCJMb25pZVwiLFxuICBcIkxvbm5pZVwiLFxuICBcIkxvbm55XCIsXG4gIFwiTG9uem9cIixcbiAgXCJMb3JhXCIsXG4gIFwiTG9yYWluZVwiLFxuICBcIkxvcmVuXCIsXG4gIFwiTG9yZW5hXCIsXG4gIFwiTG9yZW56XCIsXG4gIFwiTG9yZW56YVwiLFxuICBcIkxvcmVuem9cIixcbiAgXCJMb3JpXCIsXG4gIFwiTG9yaW5lXCIsXG4gIFwiTG9ybmFcIixcbiAgXCJMb3R0aWVcIixcbiAgXCJMb3VcIixcbiAgXCJMb3VpZVwiLFxuICBcIkxvdWlzYVwiLFxuICBcIkxvdXJkZXNcIixcbiAgXCJMb3V2ZW5pYVwiLFxuICBcIkxvd2VsbFwiLFxuICBcIkxveVwiLFxuICBcIkxveWFsXCIsXG4gIFwiTG95Y2VcIixcbiAgXCJMdWNhc1wiLFxuICBcIkx1Y2lhbm9cIixcbiAgXCJMdWNpZVwiLFxuICBcIkx1Y2llbm5lXCIsXG4gIFwiTHVjaWxlXCIsXG4gIFwiTHVjaW5kYVwiLFxuICBcIkx1Y2lvXCIsXG4gIFwiTHVjaW91c1wiLFxuICBcIkx1Y2l1c1wiLFxuICBcIkx1Y3lcIixcbiAgXCJMdWRpZVwiLFxuICBcIkx1ZHdpZ1wiLFxuICBcIkx1ZVwiLFxuICBcIkx1ZWxsYVwiLFxuICBcIkx1aWdpXCIsXG4gIFwiTHVpc1wiLFxuICBcIkx1aXNhXCIsXG4gIFwiTHVrYXNcIixcbiAgXCJMdWxhXCIsXG4gIFwiTHVsdVwiLFxuICBcIkx1bmFcIixcbiAgXCJMdXBlXCIsXG4gIFwiTHVyYVwiLFxuICBcIkx1cmxpbmVcIixcbiAgXCJMdXRoZXJcIixcbiAgXCJMdXpcIixcbiAgXCJMeWRhXCIsXG4gIFwiTHlkaWFcIixcbiAgXCJMeWxhXCIsXG4gIFwiTHlublwiLFxuICBcIkx5cmljXCIsXG4gIFwiTHlzYW5uZVwiLFxuICBcIk1hYmVsXCIsXG4gIFwiTWFiZWxsZVwiLFxuICBcIk1hYmxlXCIsXG4gIFwiTWFjXCIsXG4gIFwiTWFjZXlcIixcbiAgXCJNYWNpXCIsXG4gIFwiTWFjaWVcIixcbiAgXCJNYWNrXCIsXG4gIFwiTWFja2VuemllXCIsXG4gIFwiTWFjeVwiLFxuICBcIk1hZGFsaW5lXCIsXG4gIFwiTWFkYWx5blwiLFxuICBcIk1hZGRpc29uXCIsXG4gIFwiTWFkZWxpbmVcIixcbiAgXCJNYWRlbHluXCIsXG4gIFwiTWFkZWx5bm5cIixcbiAgXCJNYWRnZVwiLFxuICBcIk1hZGllXCIsXG4gIFwiTWFkaWx5blwiLFxuICBcIk1hZGlzZW5cIixcbiAgXCJNYWRpc29uXCIsXG4gIFwiTWFkaXN5blwiLFxuICBcIk1hZG9ubmFcIixcbiAgXCJNYWR5c29uXCIsXG4gIFwiTWFlXCIsXG4gIFwiTWFlZ2FuXCIsXG4gIFwiTWFldmVcIixcbiAgXCJNYWZhbGRhXCIsXG4gIFwiTWFnYWxpXCIsXG4gIFwiTWFnZGFsZW5cIixcbiAgXCJNYWdkYWxlbmFcIixcbiAgXCJNYWdnaWVcIixcbiAgXCJNYWdub2xpYVwiLFxuICBcIk1hZ251c1wiLFxuICBcIk1haWFcIixcbiAgXCJNYWlkYVwiLFxuICBcIk1haXlhXCIsXG4gIFwiTWFqb3JcIixcbiAgXCJNYWtheWxhXCIsXG4gIFwiTWFrZW5uYVwiLFxuICBcIk1ha2VuemllXCIsXG4gIFwiTWFsYWNoaVwiLFxuICBcIk1hbGNvbG1cIixcbiAgXCJNYWxpa2FcIixcbiAgXCJNYWxpbmRhXCIsXG4gIFwiTWFsbGllXCIsXG4gIFwiTWFsbG9yeVwiLFxuICBcIk1hbHZpbmFcIixcbiAgXCJNYW5keVwiLFxuICBcIk1hbmxleVwiLFxuICBcIk1hbnVlbFwiLFxuICBcIk1hbnVlbGFcIixcbiAgXCJNYXJhXCIsXG4gIFwiTWFyY1wiLFxuICBcIk1hcmNlbFwiLFxuICBcIk1hcmNlbGluYVwiLFxuICBcIk1hcmNlbGlub1wiLFxuICBcIk1hcmNlbGxhXCIsXG4gIFwiTWFyY2VsbGVcIixcbiAgXCJNYXJjZWxsdXNcIixcbiAgXCJNYXJjZWxvXCIsXG4gIFwiTWFyY2lhXCIsXG4gIFwiTWFyY29cIixcbiAgXCJNYXJjb3NcIixcbiAgXCJNYXJjdXNcIixcbiAgXCJNYXJnYXJldFwiLFxuICBcIk1hcmdhcmV0ZVwiLFxuICBcIk1hcmdhcmV0dFwiLFxuICBcIk1hcmdhcmV0dGFcIixcbiAgXCJNYXJnYXJldHRlXCIsXG4gIFwiTWFyZ2FyaXRhXCIsXG4gIFwiTWFyZ2VcIixcbiAgXCJNYXJnaWVcIixcbiAgXCJNYXJnb3RcIixcbiAgXCJNYXJncmV0XCIsXG4gIFwiTWFyZ3Vlcml0ZVwiLFxuICBcIk1hcmlhXCIsXG4gIFwiTWFyaWFoXCIsXG4gIFwiTWFyaWFtXCIsXG4gIFwiTWFyaWFuXCIsXG4gIFwiTWFyaWFuYVwiLFxuICBcIk1hcmlhbmVcIixcbiAgXCJNYXJpYW5uYVwiLFxuICBcIk1hcmlhbm5lXCIsXG4gIFwiTWFyaWFub1wiLFxuICBcIk1hcmliZWxcIixcbiAgXCJNYXJpZVwiLFxuICBcIk1hcmllbGFcIixcbiAgXCJNYXJpZWxsZVwiLFxuICBcIk1hcmlldHRhXCIsXG4gIFwiTWFyaWxpZVwiLFxuICBcIk1hcmlsb3VcIixcbiAgXCJNYXJpbHluZVwiLFxuICBcIk1hcmluYVwiLFxuICBcIk1hcmlvXCIsXG4gIFwiTWFyaW9uXCIsXG4gIFwiTWFyaXNhXCIsXG4gIFwiTWFyaXNvbFwiLFxuICBcIk1hcml0emFcIixcbiAgXCJNYXJqb2xhaW5lXCIsXG4gIFwiTWFyam9yaWVcIixcbiAgXCJNYXJqb3J5XCIsXG4gIFwiTWFya1wiLFxuICBcIk1hcmt1c1wiLFxuICBcIk1hcmxlZVwiLFxuICBcIk1hcmxlblwiLFxuICBcIk1hcmxlbmVcIixcbiAgXCJNYXJsZXlcIixcbiAgXCJNYXJsaW5cIixcbiAgXCJNYXJsb25cIixcbiAgXCJNYXJxdWVzXCIsXG4gIFwiTWFycXVpc1wiLFxuICBcIk1hcnF1aXNlXCIsXG4gIFwiTWFyc2hhbGxcIixcbiAgXCJNYXJ0YVwiLFxuICBcIk1hcnRpblwiLFxuICBcIk1hcnRpbmFcIixcbiAgXCJNYXJ0aW5lXCIsXG4gIFwiTWFydHlcIixcbiAgXCJNYXJ2aW5cIixcbiAgXCJNYXJ5XCIsXG4gIFwiTWFyeWFtXCIsXG4gIFwiTWFyeWphbmVcIixcbiAgXCJNYXJ5c2VcIixcbiAgXCJNYXNvblwiLFxuICBcIk1hdGVvXCIsXG4gIFwiTWF0aGV3XCIsXG4gIFwiTWF0aGlhc1wiLFxuICBcIk1hdGhpbGRlXCIsXG4gIFwiTWF0aWxkYVwiLFxuICBcIk1hdGlsZGVcIixcbiAgXCJNYXR0XCIsXG4gIFwiTWF0dGVvXCIsXG4gIFwiTWF0dGllXCIsXG4gIFwiTWF1ZFwiLFxuICBcIk1hdWRlXCIsXG4gIFwiTWF1ZGllXCIsXG4gIFwiTWF1cmVlblwiLFxuICBcIk1hdXJpY2VcIixcbiAgXCJNYXVyaWNpb1wiLFxuICBcIk1hdXJpbmVcIixcbiAgXCJNYXZlcmlja1wiLFxuICBcIk1hdmlzXCIsXG4gIFwiTWF4XCIsXG4gIFwiTWF4aWVcIixcbiAgXCJNYXhpbWVcIixcbiAgXCJNYXhpbWlsaWFuXCIsXG4gIFwiTWF4aW1pbGxpYVwiLFxuICBcIk1heGltaWxsaWFuXCIsXG4gIFwiTWF4aW1vXCIsXG4gIFwiTWF4aW11c1wiLFxuICBcIk1heGluZVwiLFxuICBcIk1heHdlbGxcIixcbiAgXCJNYXlcIixcbiAgXCJNYXlhXCIsXG4gIFwiTWF5YmVsbFwiLFxuICBcIk1heWJlbGxlXCIsXG4gIFwiTWF5ZVwiLFxuICBcIk1heW1pZVwiLFxuICBcIk1heW5hcmRcIixcbiAgXCJNYXlyYVwiLFxuICBcIk1hemllXCIsXG4gIFwiTWNrYXlsYVwiLFxuICBcIk1ja2VubmFcIixcbiAgXCJNY2tlbnppZVwiLFxuICBcIk1lYWdhblwiLFxuICBcIk1lYWdoYW5cIixcbiAgXCJNZWRhXCIsXG4gIFwiTWVnYW5lXCIsXG4gIFwiTWVnZ2llXCIsXG4gIFwiTWVnaGFuXCIsXG4gIFwiTWVraGlcIixcbiAgXCJNZWxhbnlcIixcbiAgXCJNZWxiYVwiLFxuICBcIk1lbGlzYVwiLFxuICBcIk1lbGlzc2FcIixcbiAgXCJNZWxsaWVcIixcbiAgXCJNZWxvZHlcIixcbiAgXCJNZWx2aW5cIixcbiAgXCJNZWx2aW5hXCIsXG4gIFwiTWVseW5hXCIsXG4gIFwiTWVseXNzYVwiLFxuICBcIk1lcmNlZGVzXCIsXG4gIFwiTWVyZWRpdGhcIixcbiAgXCJNZXJsXCIsXG4gIFwiTWVybGVcIixcbiAgXCJNZXJsaW5cIixcbiAgXCJNZXJyaXR0XCIsXG4gIFwiTWVydGllXCIsXG4gIFwiTWVydmluXCIsXG4gIFwiTWV0YVwiLFxuICBcIk1pYVwiLFxuICBcIk1pY2FlbGFcIixcbiAgXCJNaWNhaFwiLFxuICBcIk1pY2hhZWxcIixcbiAgXCJNaWNoYWVsYVwiLFxuICBcIk1pY2hhbGVcIixcbiAgXCJNaWNoZWFsXCIsXG4gIFwiTWljaGVsXCIsXG4gIFwiTWljaGVsZVwiLFxuICBcIk1pY2hlbGxlXCIsXG4gIFwiTWlndWVsXCIsXG4gIFwiTWlrYXlsYVwiLFxuICBcIk1pa2VcIixcbiAgXCJNaWtlbFwiLFxuICBcIk1pbGFuXCIsXG4gIFwiTWlsZXNcIixcbiAgXCJNaWxmb3JkXCIsXG4gIFwiTWlsbGVyXCIsXG4gIFwiTWlsbGllXCIsXG4gIFwiTWlsb1wiLFxuICBcIk1pbHRvblwiLFxuICBcIk1pbmFcIixcbiAgXCJNaW5lcnZhXCIsXG4gIFwiTWlubmllXCIsXG4gIFwiTWlyYWNsZVwiLFxuICBcIk1pcmVpbGxlXCIsXG4gIFwiTWlyZXlhXCIsXG4gIFwiTWlzYWVsXCIsXG4gIFwiTWlzc291cmlcIixcbiAgXCJNaXN0eVwiLFxuICBcIk1pdGNoZWxcIixcbiAgXCJNaXRjaGVsbFwiLFxuICBcIk1pdHRpZVwiLFxuICBcIk1vZGVzdGFcIixcbiAgXCJNb2Rlc3RvXCIsXG4gIFwiTW9oYW1lZFwiLFxuICBcIk1vaGFtbWFkXCIsXG4gIFwiTW9oYW1tZWRcIixcbiAgXCJNb2lzZXNcIixcbiAgXCJNb2xsaWVcIixcbiAgXCJNb2xseVwiLFxuICBcIk1vbmFcIixcbiAgXCJNb25pY2FcIixcbiAgXCJNb25pcXVlXCIsXG4gIFwiTW9ucm9lXCIsXG4gIFwiTW9uc2VycmF0XCIsXG4gIFwiTW9uc2VycmF0ZVwiLFxuICBcIk1vbnRhbmFcIixcbiAgXCJNb250ZVwiLFxuICBcIk1vbnR5XCIsXG4gIFwiTW9yZ2FuXCIsXG4gIFwiTW9yaWFoXCIsXG4gIFwiTW9ycmlzXCIsXG4gIFwiTW9ydGltZXJcIixcbiAgXCJNb3J0b25cIixcbiAgXCJNb3NlXCIsXG4gIFwiTW9zZXNcIixcbiAgXCJNb3NoZVwiLFxuICBcIk1vc3NpZVwiLFxuICBcIk1vemVsbFwiLFxuICBcIk1vemVsbGVcIixcbiAgXCJNdWhhbW1hZFwiLFxuICBcIk11cmllbFwiLFxuICBcIk11cmxcIixcbiAgXCJNdXJwaHlcIixcbiAgXCJNdXJyYXlcIixcbiAgXCJNdXN0YWZhXCIsXG4gIFwiTXlhXCIsXG4gIFwiTXlhaFwiLFxuICBcIk15bGVuZVwiLFxuICBcIk15bGVzXCIsXG4gIFwiTXlyYVwiLFxuICBcIk15cmlhbVwiLFxuICBcIk15cmxcIixcbiAgXCJNeXJuYVwiLFxuICBcIk15cm9uXCIsXG4gIFwiTXlydGljZVwiLFxuICBcIk15cnRpZVwiLFxuICBcIk15cnRpc1wiLFxuICBcIk15cnRsZVwiLFxuICBcIk5hZGlhXCIsXG4gIFwiTmFraWFcIixcbiAgXCJOYW1lXCIsXG4gIFwiTmFubmllXCIsXG4gIFwiTmFvbWlcIixcbiAgXCJOYW9taWVcIixcbiAgXCJOYXBvbGVvblwiLFxuICBcIk5hcmNpc29cIixcbiAgXCJOYXNoXCIsXG4gIFwiTmFzaXJcIixcbiAgXCJOYXRcIixcbiAgXCJOYXRhbGlhXCIsXG4gIFwiTmF0YWxpZVwiLFxuICBcIk5hdGFzaGFcIixcbiAgXCJOYXRoYW5cIixcbiAgXCJOYXRoYW5hZWxcIixcbiAgXCJOYXRoYW5pYWxcIixcbiAgXCJOYXRoYW5pZWxcIixcbiAgXCJOYXRoZW5cIixcbiAgXCJOYXllbGlcIixcbiAgXCJOZWFsXCIsXG4gIFwiTmVkXCIsXG4gIFwiTmVkcmFcIixcbiAgXCJOZWhhXCIsXG4gIFwiTmVpbFwiLFxuICBcIk5lbGRhXCIsXG4gIFwiTmVsbGFcIixcbiAgXCJOZWxsZVwiLFxuICBcIk5lbGxpZVwiLFxuICBcIk5lbHNcIixcbiAgXCJOZWxzb25cIixcbiAgXCJOZW9tYVwiLFxuICBcIk5lc3RvclwiLFxuICBcIk5ldHRpZVwiLFxuICBcIk5ldmFcIixcbiAgXCJOZXdlbGxcIixcbiAgXCJOZXd0b25cIixcbiAgXCJOaWFcIixcbiAgXCJOaWNob2xhc1wiLFxuICBcIk5pY2hvbGF1c1wiLFxuICBcIk5pY2hvbGVcIixcbiAgXCJOaWNrXCIsXG4gIFwiTmlja2xhdXNcIixcbiAgXCJOaWNrb2xhc1wiLFxuICBcIk5pY29cIixcbiAgXCJOaWNvbGFcIixcbiAgXCJOaWNvbGFzXCIsXG4gIFwiTmljb2xlXCIsXG4gIFwiTmljb2xldHRlXCIsXG4gIFwiTmlnZWxcIixcbiAgXCJOaWtpdGFcIixcbiAgXCJOaWtraVwiLFxuICBcIk5pa2tvXCIsXG4gIFwiTmlrb1wiLFxuICBcIk5pa29sYXNcIixcbiAgXCJOaWxzXCIsXG4gIFwiTmluYVwiLFxuICBcIk5vYWhcIixcbiAgXCJOb2JsZVwiLFxuICBcIk5vZVwiLFxuICBcIk5vZWxcIixcbiAgXCJOb2VsaWFcIixcbiAgXCJOb2VtaVwiLFxuICBcIk5vZW1pZVwiLFxuICBcIk5vZW15XCIsXG4gIFwiTm9sYVwiLFxuICBcIk5vbGFuXCIsXG4gIFwiTm9uYVwiLFxuICBcIk5vcmFcIixcbiAgXCJOb3JiZXJ0XCIsXG4gIFwiTm9yYmVydG9cIixcbiAgXCJOb3JlbmVcIixcbiAgXCJOb3JtYVwiLFxuICBcIk5vcnJpc1wiLFxuICBcIk5vcnZhbFwiLFxuICBcIk5vcndvb2RcIixcbiAgXCJOb3ZhXCIsXG4gIFwiTm92ZWxsYVwiLFxuICBcIk55YVwiLFxuICBcIk55YWhcIixcbiAgXCJOeWFzaWFcIixcbiAgXCJPYmllXCIsXG4gIFwiT2NlYW5lXCIsXG4gIFwiT2NpZVwiLFxuICBcIk9jdGF2aWFcIixcbiAgXCJPZGFcIixcbiAgXCJPZGVsbFwiLFxuICBcIk9kZXNzYVwiLFxuICBcIk9kaWVcIixcbiAgXCJPZmVsaWFcIixcbiAgXCJPa2V5XCIsXG4gIFwiT2xhXCIsXG4gIFwiT2xhZlwiLFxuICBcIk9sZVwiLFxuICBcIk9sZW5cIixcbiAgXCJPbGV0YVwiLFxuICBcIk9sZ2FcIixcbiAgXCJPbGluXCIsXG4gIFwiT2xpdmVyXCIsXG4gIFwiT2xsaWVcIixcbiAgXCJPbWFcIixcbiAgXCJPbWFyaVwiLFxuICBcIk9tZXJcIixcbiAgXCJPbmFcIixcbiAgXCJPbmllXCIsXG4gIFwiT3BhbFwiLFxuICBcIk9waGVsaWFcIixcbiAgXCJPcmFcIixcbiAgXCJPcmFsXCIsXG4gIFwiT3JhblwiLFxuICBcIk9yZW5cIixcbiAgXCJPcmllXCIsXG4gIFwiT3JpblwiLFxuICBcIk9yaW9uXCIsXG4gIFwiT3JsYW5kXCIsXG4gIFwiT3JsYW5kb1wiLFxuICBcIk9ybG9cIixcbiAgXCJPcnBoYVwiLFxuICBcIk9ycmluXCIsXG4gIFwiT3J2YWxcIixcbiAgXCJPcnZpbGxlXCIsXG4gIFwiT3NiYWxkb1wiLFxuICBcIk9zYm9ybmVcIixcbiAgXCJPc2NhclwiLFxuICBcIk9zdmFsZG9cIixcbiAgXCJPc3dhbGRcIixcbiAgXCJPc3dhbGRvXCIsXG4gIFwiT3RoYVwiLFxuICBcIk90aG9cIixcbiAgXCJPdGlsaWFcIixcbiAgXCJPdGlzXCIsXG4gIFwiT3R0aWxpZVwiLFxuICBcIk90dGlzXCIsXG4gIFwiT3R0b1wiLFxuICBcIk92YVwiLFxuICBcIk93ZW5cIixcbiAgXCJPemVsbGFcIixcbiAgXCJQYWJsb1wiLFxuICBcIlBhaWdlXCIsXG4gIFwiUGFsbWFcIixcbiAgXCJQYW1lbGFcIixcbiAgXCJQYW5zeVwiLFxuICBcIlBhb2xvXCIsXG4gIFwiUGFyaXNcIixcbiAgXCJQYXJrZXJcIixcbiAgXCJQYXNjYWxlXCIsXG4gIFwiUGFzcXVhbGVcIixcbiAgXCJQYXRcIixcbiAgXCJQYXRpZW5jZVwiLFxuICBcIlBhdHJpY2lhXCIsXG4gIFwiUGF0cmlja1wiLFxuICBcIlBhdHN5XCIsXG4gIFwiUGF0dGllXCIsXG4gIFwiUGF1bFwiLFxuICBcIlBhdWxhXCIsXG4gIFwiUGF1bGluZVwiLFxuICBcIlBheHRvblwiLFxuICBcIlBheXRvblwiLFxuICBcIlBlYXJsXCIsXG4gIFwiUGVhcmxpZVwiLFxuICBcIlBlYXJsaW5lXCIsXG4gIFwiUGVkcm9cIixcbiAgXCJQZWdnaWVcIixcbiAgXCJQZW5lbG9wZVwiLFxuICBcIlBlcmNpdmFsXCIsXG4gIFwiUGVyY3lcIixcbiAgXCJQZXJyeVwiLFxuICBcIlBldGVcIixcbiAgXCJQZXRlclwiLFxuICBcIlBldHJhXCIsXG4gIFwiUGV5dG9uXCIsXG4gIFwiUGhpbGlwXCIsXG4gIFwiUGhvZWJlXCIsXG4gIFwiUGh5bGxpc1wiLFxuICBcIlBpZXJjZVwiLFxuICBcIlBpZXJyZVwiLFxuICBcIlBpZXRyb1wiLFxuICBcIlBpbmtcIixcbiAgXCJQaW5raWVcIixcbiAgXCJQaXBlclwiLFxuICBcIlBvbGx5XCIsXG4gIFwiUG9ydGVyXCIsXG4gIFwiUHJlY2lvdXNcIixcbiAgXCJQcmVzbGV5XCIsXG4gIFwiUHJlc3RvblwiLFxuICBcIlByaWNlXCIsXG4gIFwiUHJpbmNlXCIsXG4gIFwiUHJpbmNlc3NcIixcbiAgXCJQcmlzY2lsbGFcIixcbiAgXCJQcm92aWRlbmNpXCIsXG4gIFwiUHJ1ZGVuY2VcIixcbiAgXCJRdWVlblwiLFxuICBcIlF1ZWVuaWVcIixcbiAgXCJRdWVudGluXCIsXG4gIFwiUXVpbmN5XCIsXG4gIFwiUXVpbm5cIixcbiAgXCJRdWludGVuXCIsXG4gIFwiUXVpbnRvblwiLFxuICBcIlJhY2hhZWxcIixcbiAgXCJSYWNoZWxcIixcbiAgXCJSYWNoZWxsZVwiLFxuICBcIlJhZVwiLFxuICBcIlJhZWdhblwiLFxuICBcIlJhZmFlbFwiLFxuICBcIlJhZmFlbGFcIixcbiAgXCJSYWhlZW1cIixcbiAgXCJSYWhzYWFuXCIsXG4gIFwiUmFodWxcIixcbiAgXCJSYWluYVwiLFxuICBcIlJhbGVpZ2hcIixcbiAgXCJSYWxwaFwiLFxuICBcIlJhbWlyb1wiLFxuICBcIlJhbW9uXCIsXG4gIFwiUmFtb25hXCIsXG4gIFwiUmFuZGFsXCIsXG4gIFwiUmFuZGFsbFwiLFxuICBcIlJhbmRpXCIsXG4gIFwiUmFuZHlcIixcbiAgXCJSYW5zb21cIixcbiAgXCJSYW91bFwiLFxuICBcIlJhcGhhZWxcIixcbiAgXCJSYXBoYWVsbGVcIixcbiAgXCJSYXF1ZWxcIixcbiAgXCJSYXNoYWRcIixcbiAgXCJSYXNoYXduXCIsXG4gIFwiUmFzaGVlZFwiLFxuICBcIlJhdWxcIixcbiAgXCJSYXZlblwiLFxuICBcIlJheVwiLFxuICBcIlJheW1vbmRcIixcbiAgXCJSYXltdW5kb1wiLFxuICBcIlJlYWdhblwiLFxuICBcIlJlYW5uYVwiLFxuICBcIlJlYmFcIixcbiAgXCJSZWJlY2FcIixcbiAgXCJSZWJlY2NhXCIsXG4gIFwiUmViZWthXCIsXG4gIFwiUmViZWthaFwiLFxuICBcIlJlZWNlXCIsXG4gIFwiUmVlZFwiLFxuICBcIlJlZXNlXCIsXG4gIFwiUmVnYW5cIixcbiAgXCJSZWdnaWVcIixcbiAgXCJSZWdpbmFsZFwiLFxuICBcIlJlaWRcIixcbiAgXCJSZWlsbHlcIixcbiAgXCJSZWluYVwiLFxuICBcIlJlaW5ob2xkXCIsXG4gIFwiUmVtaW5ndG9uXCIsXG4gIFwiUmVuZVwiLFxuICBcIlJlbmVlXCIsXG4gIFwiUmVzc2llXCIsXG4gIFwiUmV0YVwiLFxuICBcIlJldGhhXCIsXG4gIFwiUmV0dGFcIixcbiAgXCJSZXViZW5cIixcbiAgXCJSZXZhXCIsXG4gIFwiUmV4XCIsXG4gIFwiUmV5XCIsXG4gIFwiUmV5ZXNcIixcbiAgXCJSZXltdW5kb1wiLFxuICBcIlJleW5hXCIsXG4gIFwiUmV5bm9sZFwiLFxuICBcIlJoZWFcIixcbiAgXCJSaGV0dFwiLFxuICBcIlJoaWFubmFcIixcbiAgXCJSaGlhbm5vblwiLFxuICBcIlJob2RhXCIsXG4gIFwiUmljYXJkb1wiLFxuICBcIlJpY2hhcmRcIixcbiAgXCJSaWNoaWVcIixcbiAgXCJSaWNobW9uZFwiLFxuICBcIlJpY2tcIixcbiAgXCJSaWNrZXlcIixcbiAgXCJSaWNraWVcIixcbiAgXCJSaWNreVwiLFxuICBcIlJpY29cIixcbiAgXCJSaWdvYmVydG9cIixcbiAgXCJSaWxleVwiLFxuICBcIlJpdGFcIixcbiAgXCJSaXZlclwiLFxuICBcIlJvYmJcIixcbiAgXCJSb2JiaWVcIixcbiAgXCJSb2JlcnRcIixcbiAgXCJSb2JlcnRhXCIsXG4gIFwiUm9iZXJ0b1wiLFxuICBcIlJvYmluXCIsXG4gIFwiUm9ieW5cIixcbiAgXCJSb2Npb1wiLFxuICBcIlJvY2t5XCIsXG4gIFwiUm9kXCIsXG4gIFwiUm9kZXJpY2tcIixcbiAgXCJSb2RnZXJcIixcbiAgXCJSb2RvbGZvXCIsXG4gIFwiUm9kcmlja1wiLFxuICBcIlJvZHJpZ29cIixcbiAgXCJSb2VsXCIsXG4gIFwiUm9nZWxpb1wiLFxuICBcIlJvZ2VyXCIsXG4gIFwiUm9nZXJzXCIsXG4gIFwiUm9sYW5kb1wiLFxuICBcIlJvbGxpblwiLFxuICBcIlJvbWFcIixcbiAgXCJSb21haW5lXCIsXG4gIFwiUm9tYW5cIixcbiAgXCJSb25cIixcbiAgXCJSb25hbGRvXCIsXG4gIFwiUm9ubnlcIixcbiAgXCJSb29zZXZlbHRcIixcbiAgXCJSb3J5XCIsXG4gIFwiUm9zYVwiLFxuICBcIlJvc2FsZWVcIixcbiAgXCJSb3NhbGlhXCIsXG4gIFwiUm9zYWxpbmRcIixcbiAgXCJSb3NhbGluZGFcIixcbiAgXCJSb3NhbHluXCIsXG4gIFwiUm9zYW1vbmRcIixcbiAgXCJSb3Nhbm5hXCIsXG4gIFwiUm9zYXJpb1wiLFxuICBcIlJvc2NvZVwiLFxuICBcIlJvc2VcIixcbiAgXCJSb3NlbGxhXCIsXG4gIFwiUm9zZWx5blwiLFxuICBcIlJvc2VtYXJpZVwiLFxuICBcIlJvc2VtYXJ5XCIsXG4gIFwiUm9zZW5kb1wiLFxuICBcIlJvc2V0dGFcIixcbiAgXCJSb3NpZVwiLFxuICBcIlJvc2luYVwiLFxuICBcIlJvc2x5blwiLFxuICBcIlJvc3NcIixcbiAgXCJSb3NzaWVcIixcbiAgXCJSb3dhblwiLFxuICBcIlJvd2VuYVwiLFxuICBcIlJvd2xhbmRcIixcbiAgXCJSb3hhbmVcIixcbiAgXCJSb3hhbm5lXCIsXG4gIFwiUm95XCIsXG4gIFwiUm95YWxcIixcbiAgXCJSb3ljZVwiLFxuICBcIlJvemVsbGFcIixcbiAgXCJSdWJlblwiLFxuICBcIlJ1YmllXCIsXG4gIFwiUnVieVwiLFxuICBcIlJ1YnllXCIsXG4gIFwiUnVkb2xwaFwiLFxuICBcIlJ1ZHlcIixcbiAgXCJSdXBlcnRcIixcbiAgXCJSdXNzXCIsXG4gIFwiUnVzc2VsXCIsXG4gIFwiUnVzc2VsbFwiLFxuICBcIlJ1c3R5XCIsXG4gIFwiUnV0aFwiLFxuICBcIlJ1dGhlXCIsXG4gIFwiUnV0aGllXCIsXG4gIFwiUnlhblwiLFxuICBcIlJ5YW5uXCIsXG4gIFwiUnlkZXJcIixcbiAgXCJSeWxhblwiLFxuICBcIlJ5bGVlXCIsXG4gIFwiUnlsZWlnaFwiLFxuICBcIlJ5bGV5XCIsXG4gIFwiU2FiaW5hXCIsXG4gIFwiU2FicmluYVwiLFxuICBcIlNhYnJ5bmFcIixcbiAgXCJTYWRpZVwiLFxuICBcIlNhZHllXCIsXG4gIFwiU2FnZVwiLFxuICBcIlNhaWdlXCIsXG4gIFwiU2FsbGllXCIsXG4gIFwiU2FsbHlcIixcbiAgXCJTYWxtYVwiLFxuICBcIlNhbHZhZG9yXCIsXG4gIFwiU2FsdmF0b3JlXCIsXG4gIFwiU2FtXCIsXG4gIFwiU2FtYW50YVwiLFxuICBcIlNhbWFudGhhXCIsXG4gIFwiU2FtYXJhXCIsXG4gIFwiU2FtaXJcIixcbiAgXCJTYW1taWVcIixcbiAgXCJTYW1teVwiLFxuICBcIlNhbXNvblwiLFxuICBcIlNhbmRyYVwiLFxuICBcIlNhbmRyaW5lXCIsXG4gIFwiU2FuZHlcIixcbiAgXCJTYW5mb3JkXCIsXG4gIFwiU2FudGFcIixcbiAgXCJTYW50aWFnb1wiLFxuICBcIlNhbnRpbmFcIixcbiAgXCJTYW50aW5vXCIsXG4gIFwiU2FudG9zXCIsXG4gIFwiU2FyYWhcIixcbiAgXCJTYXJhaVwiLFxuICBcIlNhcmluYVwiLFxuICBcIlNhc2hhXCIsXG4gIFwiU2F1bFwiLFxuICBcIlNhdmFuYWhcIixcbiAgXCJTYXZhbm5hXCIsXG4gIFwiU2F2YW5uYWhcIixcbiAgXCJTYXZpb25cIixcbiAgXCJTY2FybGV0dFwiLFxuICBcIlNjaHV5bGVyXCIsXG4gIFwiU2NvdFwiLFxuICBcIlNjb3R0aWVcIixcbiAgXCJTY290dHlcIixcbiAgXCJTZWFtdXNcIixcbiAgXCJTZWFuXCIsXG4gIFwiU2ViYXN0aWFuXCIsXG4gIFwiU2Vkcmlja1wiLFxuICBcIlNlbGVuYVwiLFxuICBcIlNlbGluYVwiLFxuICBcIlNlbG1lclwiLFxuICBcIlNlcmVuYVwiLFxuICBcIlNlcmVuaXR5XCIsXG4gIFwiU2V0aFwiLFxuICBcIlNoYWRcIixcbiAgXCJTaGFpbmFcIixcbiAgXCJTaGFraXJhXCIsXG4gIFwiU2hhbmFcIixcbiAgXCJTaGFuZVwiLFxuICBcIlNoYW5lbFwiLFxuICBcIlNoYW5lbGxlXCIsXG4gIFwiU2hhbmlhXCIsXG4gIFwiU2hhbmllXCIsXG4gIFwiU2hhbml5YVwiLFxuICBcIlNoYW5uYVwiLFxuICBcIlNoYW5ub25cIixcbiAgXCJTaGFubnlcIixcbiAgXCJTaGFub25cIixcbiAgXCJTaGFueVwiLFxuICBcIlNoYXJvblwiLFxuICBcIlNoYXVuXCIsXG4gIFwiU2hhd25cIixcbiAgXCJTaGF3bmFcIixcbiAgXCJTaGF5bGVlXCIsXG4gIFwiU2hheW5hXCIsXG4gIFwiU2hheW5lXCIsXG4gIFwiU2hlYVwiLFxuICBcIlNoZWlsYVwiLFxuICBcIlNoZWxkb25cIixcbiAgXCJTaGVtYXJcIixcbiAgXCJTaGVyaWRhblwiLFxuICBcIlNoZXJtYW5cIixcbiAgXCJTaGVyd29vZFwiLFxuICBcIlNoaXJsZXlcIixcbiAgXCJTaHlhbm5cIixcbiAgXCJTaHlhbm5lXCIsXG4gIFwiU2lieWxcIixcbiAgXCJTaWRcIixcbiAgXCJTaWRuZXlcIixcbiAgXCJTaWVubmFcIixcbiAgXCJTaWVycmFcIixcbiAgXCJTaWdtdW5kXCIsXG4gIFwiU2lncmlkXCIsXG4gIFwiU2lndXJkXCIsXG4gIFwiU2lsYXNcIixcbiAgXCJTaW1cIixcbiAgXCJTaW1lb25cIixcbiAgXCJTaW1vbmVcIixcbiAgXCJTaW5jZXJlXCIsXG4gIFwiU2lzdGVyXCIsXG4gIFwiU2t5ZVwiLFxuICBcIlNreWxhXCIsXG4gIFwiU2t5bGFyXCIsXG4gIFwiU29maWFcIixcbiAgXCJTb2xlZGFkXCIsXG4gIFwiU29sb25cIixcbiAgXCJTb25pYVwiLFxuICBcIlNvbm55XCIsXG4gIFwiU29ueWFcIixcbiAgXCJTb3BoaWFcIixcbiAgXCJTb3BoaWVcIixcbiAgXCJTcGVuY2VyXCIsXG4gIFwiU3RhY2V5XCIsXG4gIFwiU3RhY3lcIixcbiAgXCJTdGFuXCIsXG4gIFwiU3RhbmZvcmRcIixcbiAgXCJTdGFubGV5XCIsXG4gIFwiU3RhbnRvblwiLFxuICBcIlN0ZWZhblwiLFxuICBcIlN0ZWZhbmllXCIsXG4gIFwiU3RlbGxhXCIsXG4gIFwiU3RlcGhhblwiLFxuICBcIlN0ZXBoYW5pYVwiLFxuICBcIlN0ZXBoYW5pZVwiLFxuICBcIlN0ZXBoYW55XCIsXG4gIFwiU3RlcGhlblwiLFxuICBcIlN0ZXBob25cIixcbiAgXCJTdGVybGluZ1wiLFxuICBcIlN0ZXZlXCIsXG4gIFwiU3RldmllXCIsXG4gIFwiU3Rld2FydFwiLFxuICBcIlN0b25lXCIsXG4gIFwiU3R1YXJ0XCIsXG4gIFwiU3VtbWVyXCIsXG4gIFwiU3VubnlcIixcbiAgXCJTdXNhblwiLFxuICBcIlN1c2FuYVwiLFxuICBcIlN1c2FubmFcIixcbiAgXCJTdXNpZVwiLFxuICBcIlN1emFubmVcIixcbiAgXCJTdmVuXCIsXG4gIFwiU3libGVcIixcbiAgXCJTeWRuZWVcIixcbiAgXCJTeWRuZXlcIixcbiAgXCJTeWRuaVwiLFxuICBcIlN5ZG5pZVwiLFxuICBcIlN5bHZhblwiLFxuICBcIlN5bHZlc3RlclwiLFxuICBcIlN5bHZpYVwiLFxuICBcIlRhYml0aGFcIixcbiAgXCJUYWRcIixcbiAgXCJUYWxpYVwiLFxuICBcIlRhbG9uXCIsXG4gIFwiVGFtYXJhXCIsXG4gIFwiVGFtaWFcIixcbiAgXCJUYW5pYVwiLFxuICBcIlRhbm5lclwiLFxuICBcIlRhbnlhXCIsXG4gIFwiVGFyYVwiLFxuICBcIlRhcnluXCIsXG4gIFwiVGF0ZVwiLFxuICBcIlRhdHVtXCIsXG4gIFwiVGF0eWFuYVwiLFxuICBcIlRhdXJlYW5cIixcbiAgXCJUYXZhcmVzXCIsXG4gIFwiVGF5YVwiLFxuICBcIlRheWxvclwiLFxuICBcIlRlYWdhblwiLFxuICBcIlRlZFwiLFxuICBcIlRlbGx5XCIsXG4gIFwiVGVyZW5jZVwiLFxuICBcIlRlcmVzYVwiLFxuICBcIlRlcnJhbmNlXCIsXG4gIFwiVGVycmVsbFwiLFxuICBcIlRlcnJlbmNlXCIsXG4gIFwiVGVycmlsbFwiLFxuICBcIlRlcnJ5XCIsXG4gIFwiVGVzc1wiLFxuICBcIlRlc3NpZVwiLFxuICBcIlRldmluXCIsXG4gIFwiVGhhZFwiLFxuICBcIlRoYWRkZXVzXCIsXG4gIFwiVGhhbGlhXCIsXG4gIFwiVGhlYVwiLFxuICBcIlRoZWxtYVwiLFxuICBcIlRoZW9cIixcbiAgXCJUaGVvZG9yYVwiLFxuICBcIlRoZW9kb3JlXCIsXG4gIFwiVGhlcmVzYVwiLFxuICBcIlRoZXJlc2VcIixcbiAgXCJUaGVyZXNpYVwiLFxuICBcIlRoZXJvblwiLFxuICBcIlRob21hc1wiLFxuICBcIlRob3JhXCIsXG4gIFwiVGh1cm1hblwiLFxuICBcIlRpYVwiLFxuICBcIlRpYW5hXCIsXG4gIFwiVGlhbm5hXCIsXG4gIFwiVGlhcmFcIixcbiAgXCJUaWVycmFcIixcbiAgXCJUaWZmYW55XCIsXG4gIFwiVGlsbG1hblwiLFxuICBcIlRpbW1vdGh5XCIsXG4gIFwiVGltbXlcIixcbiAgXCJUaW1vdGh5XCIsXG4gIFwiVGluYVwiLFxuICBcIlRpdG9cIixcbiAgXCJUaXR1c1wiLFxuICBcIlRvYmluXCIsXG4gIFwiVG9ieVwiLFxuICBcIlRvZFwiLFxuICBcIlRvbVwiLFxuICBcIlRvbWFzXCIsXG4gIFwiVG9tYXNhXCIsXG4gIFwiVG9tbWllXCIsXG4gIFwiVG9uZXlcIixcbiAgXCJUb25pXCIsXG4gIFwiVG9ueVwiLFxuICBcIlRvcmV5XCIsXG4gIFwiVG9ycmFuY2VcIixcbiAgXCJUb3JyZXlcIixcbiAgXCJUb3lcIixcbiAgXCJUcmFjZVwiLFxuICBcIlRyYWNleVwiLFxuICBcIlRyYWN5XCIsXG4gIFwiVHJhdmlzXCIsXG4gIFwiVHJhdm9uXCIsXG4gIFwiVHJlXCIsXG4gIFwiVHJlbWFpbmVcIixcbiAgXCJUcmVtYXluZVwiLFxuICBcIlRyZW50XCIsXG4gIFwiVHJlbnRvblwiLFxuICBcIlRyZXNzYVwiLFxuICBcIlRyZXNzaWVcIixcbiAgXCJUcmV2YVwiLFxuICBcIlRyZXZlclwiLFxuICBcIlRyZXZpb25cIixcbiAgXCJUcmV2b3JcIixcbiAgXCJUcmV5XCIsXG4gIFwiVHJpbml0eVwiLFxuICBcIlRyaXNoYVwiLFxuICBcIlRyaXN0aWFuXCIsXG4gIFwiVHJpc3RpblwiLFxuICBcIlRyaXN0b25cIixcbiAgXCJUcm95XCIsXG4gIFwiVHJ1ZGllXCIsXG4gIFwiVHJ5Y2lhXCIsXG4gIFwiVHJ5c3RhblwiLFxuICBcIlR1cm5lclwiLFxuICBcIlR3aWxhXCIsXG4gIFwiVHlsZXJcIixcbiAgXCJUeXJhXCIsXG4gIFwiVHlyZWVcIixcbiAgXCJUeXJlZWtcIixcbiAgXCJUeXJlbFwiLFxuICBcIlR5cmVsbFwiLFxuICBcIlR5cmVzZVwiLFxuICBcIlR5cmlxdWVcIixcbiAgXCJUeXNoYXduXCIsXG4gIFwiVHlzb25cIixcbiAgXCJVYmFsZG9cIixcbiAgXCJVbGljZXNcIixcbiAgXCJVbGlzZXNcIixcbiAgXCJVbmFcIixcbiAgXCJVbmlxdWVcIixcbiAgXCJVcmJhblwiLFxuICBcIlVyaWFoXCIsXG4gIFwiVXJpZWxcIixcbiAgXCJVcnN1bGFcIixcbiAgXCJWYWRhXCIsXG4gIFwiVmFsZW50aW5cIixcbiAgXCJWYWxlbnRpbmFcIixcbiAgXCJWYWxlbnRpbmVcIixcbiAgXCJWYWxlcmllXCIsXG4gIFwiVmFsbGllXCIsXG4gIFwiVmFuXCIsXG4gIFwiVmFuY2VcIixcbiAgXCJWYW5lc3NhXCIsXG4gIFwiVmF1Z2huXCIsXG4gIFwiVmVkYVwiLFxuICBcIlZlbGRhXCIsXG4gIFwiVmVsbGFcIixcbiAgXCJWZWxtYVwiLFxuICBcIlZlbHZhXCIsXG4gIFwiVmVuYVwiLFxuICBcIlZlcmRhXCIsXG4gIFwiVmVyZGllXCIsXG4gIFwiVmVyZ2llXCIsXG4gIFwiVmVybGFcIixcbiAgXCJWZXJsaWVcIixcbiAgXCJWZXJuXCIsXG4gIFwiVmVybmFcIixcbiAgXCJWZXJuZXJcIixcbiAgXCJWZXJuaWNlXCIsXG4gIFwiVmVybmllXCIsXG4gIFwiVmVybm9uXCIsXG4gIFwiVmVyb25hXCIsXG4gIFwiVmVyb25pY2FcIixcbiAgXCJWZXN0YVwiLFxuICBcIlZpY2VudGFcIixcbiAgXCJWaWNlbnRlXCIsXG4gIFwiVmlja2llXCIsXG4gIFwiVmlja3lcIixcbiAgXCJWaWN0b3JcIixcbiAgXCJWaWN0b3JpYVwiLFxuICBcIlZpZGFcIixcbiAgXCJWaWRhbFwiLFxuICBcIlZpbG1hXCIsXG4gIFwiVmluY2VcIixcbiAgXCJWaW5jZW50XCIsXG4gIFwiVmluY2VuemFcIixcbiAgXCJWaW5jZW56b1wiLFxuICBcIlZpbm5pZVwiLFxuICBcIlZpb2xhXCIsXG4gIFwiVmlvbGV0XCIsXG4gIFwiVmlvbGV0dGVcIixcbiAgXCJWaXJnaWVcIixcbiAgXCJWaXJnaWxcIixcbiAgXCJWaXJnaW5pYVwiLFxuICBcIlZpcmdpbmllXCIsXG4gIFwiVml0YVwiLFxuICBcIlZpdG9cIixcbiAgXCJWaXZhXCIsXG4gIFwiVml2aWFuXCIsXG4gIFwiVml2aWFuZVwiLFxuICBcIlZpdmlhbm5lXCIsXG4gIFwiVml2aWVuXCIsXG4gIFwiVml2aWVubmVcIixcbiAgXCJWbGFkaW1pclwiLFxuICBcIldhZGVcIixcbiAgXCJXYWlub1wiLFxuICBcIldhbGRvXCIsXG4gIFwiV2Fsa2VyXCIsXG4gIFwiV2FsbGFjZVwiLFxuICBcIldhbHRlclwiLFxuICBcIldhbHRvblwiLFxuICBcIldhbmRhXCIsXG4gIFwiV2FyZFwiLFxuICBcIldhcnJlblwiLFxuICBcIldhdHNvblwiLFxuICBcIldhdmFcIixcbiAgXCJXYXlsb25cIixcbiAgXCJXYXluZVwiLFxuICBcIldlYnN0ZXJcIixcbiAgXCJXZWxkb25cIixcbiAgXCJXZWxsaW5ndG9uXCIsXG4gIFwiV2VuZGVsbFwiLFxuICBcIldlbmR5XCIsXG4gIFwiV2VybmVyXCIsXG4gIFwiV2VzdGxleVwiLFxuICBcIldlc3RvblwiLFxuICBcIldoaXRuZXlcIixcbiAgXCJXaWxiZXJcIixcbiAgXCJXaWxiZXJ0XCIsXG4gIFwiV2lsYnVyblwiLFxuICBcIldpbGV5XCIsXG4gIFwiV2lsZm9yZFwiLFxuICBcIldpbGZyZWRcIixcbiAgXCJXaWxmcmVkb1wiLFxuICBcIldpbGZyaWRcIixcbiAgXCJXaWxoZWxtXCIsXG4gIFwiV2lsaGVsbWluZVwiLFxuICBcIldpbGxcIixcbiAgXCJXaWxsYVwiLFxuICBcIldpbGxhcmRcIixcbiAgXCJXaWxsaWFtXCIsXG4gIFwiV2lsbGllXCIsXG4gIFwiV2lsbGlzXCIsXG4gIFwiV2lsbG93XCIsXG4gIFwiV2lsbHlcIixcbiAgXCJXaWxtYVwiLFxuICBcIldpbG1lclwiLFxuICBcIldpbHNvblwiLFxuICBcIldpbHRvblwiLFxuICBcIldpbmZpZWxkXCIsXG4gIFwiV2luaWZyZWRcIixcbiAgXCJXaW5uaWZyZWRcIixcbiAgXCJXaW5vbmFcIixcbiAgXCJXaW5zdG9uXCIsXG4gIFwiV29vZHJvd1wiLFxuICBcIld5YXR0XCIsXG4gIFwiV3ltYW5cIixcbiAgXCJYYW5kZXJcIixcbiAgXCJYYXZpZXJcIixcbiAgXCJYemF2aWVyXCIsXG4gIFwiWWFkaXJhXCIsXG4gIFwiWWFzbWVlblwiLFxuICBcIllhc21pblwiLFxuICBcIllhc21pbmVcIixcbiAgXCJZYXptaW5cIixcbiAgXCJZZXNlbmlhXCIsXG4gIFwiWWVzc2VuaWFcIixcbiAgXCJZb2xhbmRhXCIsXG4gIFwiWW9zaGlrb1wiLFxuICBcIll2ZXR0ZVwiLFxuICBcIll2b25uZVwiLFxuICBcIlphY2hhcmlhaFwiLFxuICBcIlphY2hhcnlcIixcbiAgXCJaYWNoZXJ5XCIsXG4gIFwiWmFja1wiLFxuICBcIlphY2thcnlcIixcbiAgXCJaYWNrZXJ5XCIsXG4gIFwiWmFrYXJ5XCIsXG4gIFwiWmFuZGVyXCIsXG4gIFwiWmFuZVwiLFxuICBcIlphcmlhXCIsXG4gIFwiWmVjaGFyaWFoXCIsXG4gIFwiWmVsZGFcIixcbiAgXCJaZWxsYVwiLFxuICBcIlplbG1hXCIsXG4gIFwiWmVuYVwiLFxuICBcIlpldHRhXCIsXG4gIFwiWmlvblwiLFxuICBcIlppdGFcIixcbiAgXCJab2VcIixcbiAgXCJab2V5XCIsXG4gIFwiWm9pZVwiLFxuICBcIlpvaWxhXCIsXG4gIFwiWm9sYVwiLFxuICBcIlpvcmFcIixcbiAgXCJadWxhXCJcbl07XG4iLCJ2YXIgbmFtZSA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBuYW1lO1xubmFtZS5maXJzdF9uYW1lID0gcmVxdWlyZShcIi4vZmlyc3RfbmFtZVwiKTtcbm5hbWUubGFzdF9uYW1lID0gcmVxdWlyZShcIi4vbGFzdF9uYW1lXCIpO1xubmFtZS5wcmVmaXggPSByZXF1aXJlKFwiLi9wcmVmaXhcIik7XG5uYW1lLnN1ZmZpeCA9IHJlcXVpcmUoXCIuL3N1ZmZpeFwiKTtcbm5hbWUudGl0bGUgPSByZXF1aXJlKFwiLi90aXRsZVwiKTtcbm5hbWUubmFtZSA9IHJlcXVpcmUoXCIuL25hbWVcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIkFiYm90dFwiLFxuICBcIkFiZXJuYXRoeVwiLFxuICBcIkFic2hpcmVcIixcbiAgXCJBZGFtc1wiLFxuICBcIkFsdGVud2VydGhcIixcbiAgXCJBbmRlcnNvblwiLFxuICBcIkFua3VuZGluZ1wiLFxuICBcIkFybXN0cm9uZ1wiLFxuICBcIkF1ZXJcIixcbiAgXCJBdWZkZXJoYXJcIixcbiAgXCJCYWhyaW5nZXJcIixcbiAgXCJCYWlsZXlcIixcbiAgXCJCYWxpc3RyZXJpXCIsXG4gIFwiQmFycm93c1wiLFxuICBcIkJhcnRlbGxcIixcbiAgXCJCYXJ0b2xldHRpXCIsXG4gIFwiQmFydG9uXCIsXG4gIFwiQmFzaGlyaWFuXCIsXG4gIFwiQmF0elwiLFxuICBcIkJhdWNoXCIsXG4gIFwiQmF1bWJhY2hcIixcbiAgXCJCYXllclwiLFxuICBcIkJlYWhhblwiLFxuICBcIkJlYXR0eVwiLFxuICBcIkJlY2h0ZWxhclwiLFxuICBcIkJlY2tlclwiLFxuICBcIkJlZG5hclwiLFxuICBcIkJlZXJcIixcbiAgXCJCZWllclwiLFxuICBcIkJlcmdlXCIsXG4gIFwiQmVyZ25hdW1cIixcbiAgXCJCZXJnc3Ryb21cIixcbiAgXCJCZXJuaGFyZFwiLFxuICBcIkJlcm5pZXJcIixcbiAgXCJCaW5zXCIsXG4gIFwiQmxhbmRhXCIsXG4gIFwiQmxpY2tcIixcbiAgXCJCbG9ja1wiLFxuICBcIkJvZGVcIixcbiAgXCJCb2VobVwiLFxuICBcIkJvZ2FuXCIsXG4gIFwiQm9naXNpY2hcIixcbiAgXCJCb3JlclwiLFxuICBcIkJvc2NvXCIsXG4gIFwiQm90c2ZvcmRcIixcbiAgXCJCb3llclwiLFxuICBcIkJveWxlXCIsXG4gIFwiQnJhZHRrZVwiLFxuICBcIkJyYWt1c1wiLFxuICBcIkJyYXVuXCIsXG4gIFwiQnJlaXRlbmJlcmdcIixcbiAgXCJCcmVra2VcIixcbiAgXCJCcm93blwiLFxuICBcIkJydWVuXCIsXG4gIFwiQnVja3JpZGdlXCIsXG4gIFwiQ2Fycm9sbFwiLFxuICBcIkNhcnRlclwiLFxuICBcIkNhcnR3cmlnaHRcIixcbiAgXCJDYXNwZXJcIixcbiAgXCJDYXNzaW5cIixcbiAgXCJDaGFtcGxpblwiLFxuICBcIkNocmlzdGlhbnNlblwiLFxuICBcIkNvbGVcIixcbiAgXCJDb2xsaWVyXCIsXG4gIFwiQ29sbGluc1wiLFxuICBcIkNvbm5cIixcbiAgXCJDb25uZWxseVwiLFxuICBcIkNvbnJveVwiLFxuICBcIkNvbnNpZGluZVwiLFxuICBcIkNvcmtlcnlcIixcbiAgXCJDb3JtaWVyXCIsXG4gIFwiQ29yd2luXCIsXG4gIFwiQ3JlbWluXCIsXG4gIFwiQ3Jpc3RcIixcbiAgXCJDcm9uYVwiLFxuICBcIkNyb25pblwiLFxuICBcIkNyb29rc1wiLFxuICBcIkNydWlja3NoYW5rXCIsXG4gIFwiQ3VtbWVyYXRhXCIsXG4gIFwiQ3VtbWluZ3NcIixcbiAgXCJEYWNoXCIsXG4gIFwiRCdBbW9yZVwiLFxuICBcIkRhbmllbFwiLFxuICBcIkRhcmVcIixcbiAgXCJEYXVnaGVydHlcIixcbiAgXCJEYXZpc1wiLFxuICBcIkRlY2tvd1wiLFxuICBcIkRlbmVzaWtcIixcbiAgXCJEaWJiZXJ0XCIsXG4gIFwiRGlja2Vuc1wiLFxuICBcIkRpY2tpXCIsXG4gIFwiRGlja2luc29uXCIsXG4gIFwiRGlldHJpY2hcIixcbiAgXCJEb25uZWxseVwiLFxuICBcIkRvb2xleVwiLFxuICBcIkRvdWdsYXNcIixcbiAgXCJEb3lsZVwiLFxuICBcIkR1QnVxdWVcIixcbiAgXCJEdXJnYW5cIixcbiAgXCJFYmVydFwiLFxuICBcIkVmZmVydHpcIixcbiAgXCJFaWNobWFublwiLFxuICBcIkVtYXJkXCIsXG4gIFwiRW1tZXJpY2hcIixcbiAgXCJFcmRtYW5cIixcbiAgXCJFcm5zZXJcIixcbiAgXCJGYWRlbFwiLFxuICBcIkZhaGV5XCIsXG4gIFwiRmFycmVsbFwiLFxuICBcIkZheVwiLFxuICBcIkZlZW5leVwiLFxuICBcIkZlZXN0XCIsXG4gIFwiRmVpbFwiLFxuICBcIkZlcnJ5XCIsXG4gIFwiRmlzaGVyXCIsXG4gIFwiRmxhdGxleVwiLFxuICBcIkZyYW1pXCIsXG4gIFwiRnJhbmVja2lcIixcbiAgXCJGcmllc2VuXCIsXG4gIFwiRnJpdHNjaFwiLFxuICBcIkZ1bmtcIixcbiAgXCJHYXlsb3JkXCIsXG4gIFwiR2VyaG9sZFwiLFxuICBcIkdlcmxhY2hcIixcbiAgXCJHaWJzb25cIixcbiAgXCJHaXNsYXNvblwiLFxuICBcIkdsZWFzb25cIixcbiAgXCJHbGVpY2huZXJcIixcbiAgXCJHbG92ZXJcIixcbiAgXCJHb2xkbmVyXCIsXG4gIFwiR29vZHdpblwiLFxuICBcIkdvcmN6YW55XCIsXG4gIFwiR290dGxpZWJcIixcbiAgXCJHb3lldHRlXCIsXG4gIFwiR3JhZHlcIixcbiAgXCJHcmFoYW1cIixcbiAgXCJHcmFudFwiLFxuICBcIkdyZWVuXCIsXG4gIFwiR3JlZW5mZWxkZXJcIixcbiAgXCJHcmVlbmhvbHRcIixcbiAgXCJHcmltZXNcIixcbiAgXCJHdWxnb3dza2lcIixcbiAgXCJHdXNpa293c2tpXCIsXG4gIFwiR3V0a293c2tpXCIsXG4gIFwiR3V0bWFublwiLFxuICBcIkhhYWdcIixcbiAgXCJIYWNrZXR0XCIsXG4gIFwiSGFnZW5lc1wiLFxuICBcIkhhaG5cIixcbiAgXCJIYWxleVwiLFxuICBcIkhhbHZvcnNvblwiLFxuICBcIkhhbWlsbFwiLFxuICBcIkhhbW1lc1wiLFxuICBcIkhhbmRcIixcbiAgXCJIYW5lXCIsXG4gIFwiSGFuc2VuXCIsXG4gIFwiSGFyYmVyXCIsXG4gIFwiSGFycmlzXCIsXG4gIFwiSGFydG1hbm5cIixcbiAgXCJIYXJ2ZXlcIixcbiAgXCJIYXVja1wiLFxuICBcIkhheWVzXCIsXG4gIFwiSGVhbmV5XCIsXG4gIFwiSGVhdGhjb3RlXCIsXG4gIFwiSGVnbWFublwiLFxuICBcIkhlaWRlbnJlaWNoXCIsXG4gIFwiSGVsbGVyXCIsXG4gIFwiSGVybWFuXCIsXG4gIFwiSGVybWFublwiLFxuICBcIkhlcm1pc3RvblwiLFxuICBcIkhlcnpvZ1wiLFxuICBcIkhlc3NlbFwiLFxuICBcIkhldHRpbmdlclwiLFxuICBcIkhpY2tsZVwiLFxuICBcIkhpbGxsXCIsXG4gIFwiSGlsbHNcIixcbiAgXCJIaWxwZXJ0XCIsXG4gIFwiSGludHpcIixcbiAgXCJIaXJ0aGVcIixcbiAgXCJIb2RraWV3aWN6XCIsXG4gIFwiSG9lZ2VyXCIsXG4gIFwiSG9tZW5pY2tcIixcbiAgXCJIb3BwZVwiLFxuICBcIkhvd2VcIixcbiAgXCJIb3dlbGxcIixcbiAgXCJIdWRzb25cIixcbiAgXCJIdWVsXCIsXG4gIFwiSHVlbHNcIixcbiAgXCJIeWF0dFwiLFxuICBcIkphY29iaVwiLFxuICBcIkphY29ic1wiLFxuICBcIkphY29ic29uXCIsXG4gIFwiSmFrdWJvd3NraVwiLFxuICBcIkphc2tvbHNraVwiLFxuICBcIkphc3RcIixcbiAgXCJKZW5raW5zXCIsXG4gIFwiSmVyZGVcIixcbiAgXCJKb2huc1wiLFxuICBcIkpvaG5zb25cIixcbiAgXCJKb2huc3RvblwiLFxuICBcIkpvbmVzXCIsXG4gIFwiS2Fzc3Vsa2VcIixcbiAgXCJLYXV0emVyXCIsXG4gIFwiS2VlYmxlclwiLFxuICBcIktlZWxpbmdcIixcbiAgXCJLZW1tZXJcIixcbiAgXCJLZXJsdWtlXCIsXG4gIFwiS2VydHptYW5uXCIsXG4gIFwiS2Vzc2xlclwiLFxuICBcIktpZWhuXCIsXG4gIFwiS2loblwiLFxuICBcIktpbGJhY2tcIixcbiAgXCJLaW5nXCIsXG4gIFwiS2lybGluXCIsXG4gIFwiS2xlaW5cIixcbiAgXCJLbGluZ1wiLFxuICBcIktsb2Nrb1wiLFxuICBcIktvY2hcIixcbiAgXCJLb2VscGluXCIsXG4gIFwiS29lcHBcIixcbiAgXCJLb2hsZXJcIixcbiAgXCJLb25vcGVsc2tpXCIsXG4gIFwiS29zc1wiLFxuICBcIktvdmFjZWtcIixcbiAgXCJLb3pleVwiLFxuICBcIktyYWpjaWtcIixcbiAgXCJLcmVpZ2VyXCIsXG4gIFwiS3Jpc1wiLFxuICBcIktzaGxlcmluXCIsXG4gIFwiS3ViXCIsXG4gIFwiS3VoaWNcIixcbiAgXCJLdWhsbWFuXCIsXG4gIFwiS3VoblwiLFxuICBcIkt1bGFzXCIsXG4gIFwiS3VuZGVcIixcbiAgXCJLdW56ZVwiLFxuICBcIkt1cGhhbFwiLFxuICBcIkt1dGNoXCIsXG4gIFwiS3V2YWxpc1wiLFxuICBcIkxhYmFkaWVcIixcbiAgXCJMYWtpblwiLFxuICBcIkxhbmdcIixcbiAgXCJMYW5nb3NoXCIsXG4gIFwiTGFuZ3dvcnRoXCIsXG4gIFwiTGFya2luXCIsXG4gIFwiTGFyc29uXCIsXG4gIFwiTGVhbm5vblwiLFxuICBcIkxlYnNhY2tcIixcbiAgXCJMZWRuZXJcIixcbiAgXCJMZWZmbGVyXCIsXG4gIFwiTGVncm9zXCIsXG4gIFwiTGVobmVyXCIsXG4gIFwiTGVta2VcIixcbiAgXCJMZXNjaFwiLFxuICBcIkxldXNjaGtlXCIsXG4gIFwiTGluZFwiLFxuICBcIkxpbmRncmVuXCIsXG4gIFwiTGl0dGVsXCIsXG4gIFwiTGl0dGxlXCIsXG4gIFwiTG9ja21hblwiLFxuICBcIkxvd2VcIixcbiAgXCJMdWJvd2l0elwiLFxuICBcIkx1ZWlsd2l0elwiLFxuICBcIkx1ZXR0Z2VuXCIsXG4gIFwiTHluY2hcIixcbiAgXCJNYWNlamtvdmljXCIsXG4gIFwiTWFjR3l2ZXJcIixcbiAgXCJNYWdnaW9cIixcbiAgXCJNYW5uXCIsXG4gIFwiTWFudGVcIixcbiAgXCJNYXJrc1wiLFxuICBcIk1hcnF1YXJkdFwiLFxuICBcIk1hcnZpblwiLFxuICBcIk1heWVyXCIsXG4gIFwiTWF5ZXJ0XCIsXG4gIFwiTWNDbHVyZVwiLFxuICBcIk1jQ3VsbG91Z2hcIixcbiAgXCJNY0Rlcm1vdHRcIixcbiAgXCJNY0dseW5uXCIsXG4gIFwiTWNLZW56aWVcIixcbiAgXCJNY0xhdWdobGluXCIsXG4gIFwiTWVkaHVyc3RcIixcbiAgXCJNZXJ0elwiLFxuICBcIk1ldHpcIixcbiAgXCJNaWxsZXJcIixcbiAgXCJNaWxsc1wiLFxuICBcIk1pdGNoZWxsXCIsXG4gIFwiTW9lblwiLFxuICBcIk1vaHJcIixcbiAgXCJNb25haGFuXCIsXG4gIFwiTW9vcmVcIixcbiAgXCJNb3JhclwiLFxuICBcIk1vcmlzc2V0dGVcIixcbiAgXCJNb3NjaXNraVwiLFxuICBcIk1yYXpcIixcbiAgXCJNdWVsbGVyXCIsXG4gIFwiTXVsbGVyXCIsXG4gIFwiTXVyYXppa1wiLFxuICBcIk11cnBoeVwiLFxuICBcIk11cnJheVwiLFxuICBcIk5hZGVyXCIsXG4gIFwiTmljb2xhc1wiLFxuICBcIk5pZW5vd1wiLFxuICBcIk5pa29sYXVzXCIsXG4gIFwiTml0enNjaGVcIixcbiAgXCJOb2xhblwiLFxuICBcIk9iZXJicnVubmVyXCIsXG4gIFwiTydDb25uZWxsXCIsXG4gIFwiTydDb25uZXJcIixcbiAgXCJPJ0hhcmFcIixcbiAgXCJPJ0tlZWZlXCIsXG4gIFwiTydLb25cIixcbiAgXCJPa3VuZXZhXCIsXG4gIFwiT2xzb25cIixcbiAgXCJPbmRyaWNrYVwiLFxuICBcIk8nUmVpbGx5XCIsXG4gIFwiT3JuXCIsXG4gIFwiT3J0aXpcIixcbiAgXCJPc2luc2tpXCIsXG4gIFwiUGFjb2NoYVwiLFxuICBcIlBhZGJlcmdcIixcbiAgXCJQYWdhY1wiLFxuICBcIlBhcmlzaWFuXCIsXG4gIFwiUGFya2VyXCIsXG4gIFwiUGF1Y2VrXCIsXG4gIFwiUGZhbm5lcnN0aWxsXCIsXG4gIFwiUGZlZmZlclwiLFxuICBcIlBvbGxpY2hcIixcbiAgXCJQb3Vyb3NcIixcbiAgXCJQb3dsb3dza2lcIixcbiAgXCJQcmVkb3ZpY1wiLFxuICBcIlByaWNlXCIsXG4gIFwiUHJvaGFza2FcIixcbiAgXCJQcm9zYWNjb1wiLFxuICBcIlB1cmR5XCIsXG4gIFwiUXVpZ2xleVwiLFxuICBcIlF1aXR6b25cIixcbiAgXCJSYXRoXCIsXG4gIFwiUmF0a2VcIixcbiAgXCJSYXVcIixcbiAgXCJSYXlub3JcIixcbiAgXCJSZWljaGVsXCIsXG4gIFwiUmVpY2hlcnRcIixcbiAgXCJSZWlsbHlcIixcbiAgXCJSZWluZ2VyXCIsXG4gIFwiUmVtcGVsXCIsXG4gIFwiUmVubmVyXCIsXG4gIFwiUmV5bm9sZHNcIixcbiAgXCJSaWNlXCIsXG4gIFwiUmlwcGluXCIsXG4gIFwiUml0Y2hpZVwiLFxuICBcIlJvYmVsXCIsXG4gIFwiUm9iZXJ0c1wiLFxuICBcIlJvZHJpZ3VlelwiLFxuICBcIlJvZ2FoblwiLFxuICBcIlJvaGFuXCIsXG4gIFwiUm9sZnNvblwiLFxuICBcIlJvbWFndWVyYVwiLFxuICBcIlJvb2JcIixcbiAgXCJSb3NlbmJhdW1cIixcbiAgXCJSb3dlXCIsXG4gIFwiUnVlY2tlclwiLFxuICBcIlJ1bm9sZnNkb3R0aXJcIixcbiAgXCJSdW5vbGZzc29uXCIsXG4gIFwiUnVudGVcIixcbiAgXCJSdXNzZWxcIixcbiAgXCJSdXRoZXJmb3JkXCIsXG4gIFwiUnlhblwiLFxuICBcIlNhbmZvcmRcIixcbiAgXCJTYXR0ZXJmaWVsZFwiLFxuICBcIlNhdWVyXCIsXG4gIFwiU2F3YXluXCIsXG4gIFwiU2NoYWRlblwiLFxuICBcIlNjaGFlZmVyXCIsXG4gIFwiU2NoYW1iZXJnZXJcIixcbiAgXCJTY2hpbGxlclwiLFxuICBcIlNjaGltbWVsXCIsXG4gIFwiU2NoaW5uZXJcIixcbiAgXCJTY2htZWxlclwiLFxuICBcIlNjaG1pZHRcIixcbiAgXCJTY2htaXR0XCIsXG4gIFwiU2NobmVpZGVyXCIsXG4gIFwiU2Nob2VuXCIsXG4gIFwiU2Nob3dhbHRlclwiLFxuICBcIlNjaHJvZWRlclwiLFxuICBcIlNjaHVsaXN0XCIsXG4gIFwiU2NodWx0elwiLFxuICBcIlNjaHVtbVwiLFxuICBcIlNjaHVwcGVcIixcbiAgXCJTY2h1c3RlclwiLFxuICBcIlNlbmdlclwiLFxuICBcIlNoYW5haGFuXCIsXG4gIFwiU2hpZWxkc1wiLFxuICBcIlNpbW9uaXNcIixcbiAgXCJTaXBlc1wiLFxuICBcIlNraWxlc1wiLFxuICBcIlNtaXRoXCIsXG4gIFwiU21pdGhhbVwiLFxuICBcIlNwZW5jZXJcIixcbiAgXCJTcGlua2FcIixcbiAgXCJTcG9yZXJcIixcbiAgXCJTdGFtbVwiLFxuICBcIlN0YW50b25cIixcbiAgXCJTdGFya1wiLFxuICBcIlN0ZWhyXCIsXG4gIFwiU3RldWJlclwiLFxuICBcIlN0aWVkZW1hbm5cIixcbiAgXCJTdG9rZXNcIixcbiAgXCJTdG9sdGVuYmVyZ1wiLFxuICBcIlN0cmFja2VcIixcbiAgXCJTdHJlaWNoXCIsXG4gIFwiU3Ryb21hblwiLFxuICBcIlN0cm9zaW5cIixcbiAgXCJTd2FuaWF3c2tpXCIsXG4gIFwiU3dpZnRcIixcbiAgXCJUZXJyeVwiLFxuICBcIlRoaWVsXCIsXG4gIFwiVGhvbXBzb25cIixcbiAgXCJUaWxsbWFuXCIsXG4gIFwiVG9ycFwiLFxuICBcIlRvcnBoeVwiLFxuICBcIlRvd25lXCIsXG4gIFwiVG95XCIsXG4gIFwiVHJhbnRvd1wiLFxuICBcIlRyZW1ibGF5XCIsXG4gIFwiVHJldXRlbFwiLFxuICBcIlRyb21wXCIsXG4gIFwiVHVyY290dGVcIixcbiAgXCJUdXJuZXJcIixcbiAgXCJVbGxyaWNoXCIsXG4gIFwiVXB0b25cIixcbiAgXCJWYW5kZXJ2b3J0XCIsXG4gIFwiVmV1bVwiLFxuICBcIlZvbGttYW5cIixcbiAgXCJWb25cIixcbiAgXCJWb25SdWVkZW5cIixcbiAgXCJXYWVsY2hpXCIsXG4gIFwiV2Fsa2VyXCIsXG4gIFwiV2Fsc2hcIixcbiAgXCJXYWx0ZXJcIixcbiAgXCJXYXJkXCIsXG4gIFwiV2F0ZXJzXCIsXG4gIFwiV2F0c2ljYVwiLFxuICBcIldlYmVyXCIsXG4gIFwiV2VobmVyXCIsXG4gIFwiV2VpbWFublwiLFxuICBcIldlaXNzbmF0XCIsXG4gIFwiV2VsY2hcIixcbiAgXCJXZXN0XCIsXG4gIFwiV2hpdGVcIixcbiAgXCJXaWVnYW5kXCIsXG4gIFwiV2lsZGVybWFuXCIsXG4gIFwiV2lsa2luc29uXCIsXG4gIFwiV2lsbFwiLFxuICBcIldpbGxpYW1zb25cIixcbiAgXCJXaWxsbXNcIixcbiAgXCJXaW5kbGVyXCIsXG4gIFwiV2ludGhlaXNlclwiLFxuICBcIldpc29reVwiLFxuICBcIldpc296a1wiLFxuICBcIldpdHRpbmdcIixcbiAgXCJXaXphXCIsXG4gIFwiV29sZlwiLFxuICBcIldvbGZmXCIsXG4gIFwiV3Vja2VydFwiLFxuICBcIld1bnNjaFwiLFxuICBcIld5bWFuXCIsXG4gIFwiWW9zdFwiLFxuICBcIll1bmR0XCIsXG4gIFwiWmJvbmNha1wiLFxuICBcIlplbWxha1wiLFxuICBcIlppZW1hbm5cIixcbiAgXCJaaWVtZVwiLFxuICBcIlp1bGF1ZlwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCIje3ByZWZpeH0gI3tmaXJzdF9uYW1lfSAje2xhc3RfbmFtZX1cIixcbiAgXCIje2ZpcnN0X25hbWV9ICN7bGFzdF9uYW1lfSAje3N1ZmZpeH1cIixcbiAgXCIje2ZpcnN0X25hbWV9ICN7bGFzdF9uYW1lfVwiLFxuICBcIiN7Zmlyc3RfbmFtZX0gI3tsYXN0X25hbWV9XCIsXG4gIFwiI3tmaXJzdF9uYW1lfSAje2xhc3RfbmFtZX1cIixcbiAgXCIje2ZpcnN0X25hbWV9ICN7bGFzdF9uYW1lfVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJNci5cIixcbiAgXCJNcnMuXCIsXG4gIFwiTXMuXCIsXG4gIFwiTWlzc1wiLFxuICBcIkRyLlwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJKci5cIixcbiAgXCJTci5cIixcbiAgXCJJXCIsXG4gIFwiSUlcIixcbiAgXCJJSUlcIixcbiAgXCJJVlwiLFxuICBcIlZcIixcbiAgXCJNRFwiLFxuICBcIkREU1wiLFxuICBcIlBoRFwiLFxuICBcIkRWTVwiXG5dO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IHtcbiAgXCJkZXNjcmlwdG9yXCI6IFtcbiAgICBcIkxlYWRcIixcbiAgICBcIlNlbmlvclwiLFxuICAgIFwiRGlyZWN0XCIsXG4gICAgXCJDb3Jwb3JhdGVcIixcbiAgICBcIkR5bmFtaWNcIixcbiAgICBcIkZ1dHVyZVwiLFxuICAgIFwiUHJvZHVjdFwiLFxuICAgIFwiTmF0aW9uYWxcIixcbiAgICBcIlJlZ2lvbmFsXCIsXG4gICAgXCJEaXN0cmljdFwiLFxuICAgIFwiQ2VudHJhbFwiLFxuICAgIFwiR2xvYmFsXCIsXG4gICAgXCJDdXN0b21lclwiLFxuICAgIFwiSW52ZXN0b3JcIixcbiAgICBcIkR5bmFtaWNcIixcbiAgICBcIkludGVybmF0aW9uYWxcIixcbiAgICBcIkxlZ2FjeVwiLFxuICAgIFwiRm9yd2FyZFwiLFxuICAgIFwiSW50ZXJuYWxcIixcbiAgICBcIkh1bWFuXCIsXG4gICAgXCJDaGllZlwiLFxuICAgIFwiUHJpbmNpcGFsXCJcbiAgXSxcbiAgXCJsZXZlbFwiOiBbXG4gICAgXCJTb2x1dGlvbnNcIixcbiAgICBcIlByb2dyYW1cIixcbiAgICBcIkJyYW5kXCIsXG4gICAgXCJTZWN1cml0eVwiLFxuICAgIFwiUmVzZWFyY2hcIixcbiAgICBcIk1hcmtldGluZ1wiLFxuICAgIFwiRGlyZWN0aXZlc1wiLFxuICAgIFwiSW1wbGVtZW50YXRpb25cIixcbiAgICBcIkludGVncmF0aW9uXCIsXG4gICAgXCJGdW5jdGlvbmFsaXR5XCIsXG4gICAgXCJSZXNwb25zZVwiLFxuICAgIFwiUGFyYWRpZ21cIixcbiAgICBcIlRhY3RpY3NcIixcbiAgICBcIklkZW50aXR5XCIsXG4gICAgXCJNYXJrZXRzXCIsXG4gICAgXCJHcm91cFwiLFxuICAgIFwiRGl2aXNpb25cIixcbiAgICBcIkFwcGxpY2F0aW9uc1wiLFxuICAgIFwiT3B0aW1pemF0aW9uXCIsXG4gICAgXCJPcGVyYXRpb25zXCIsXG4gICAgXCJJbmZyYXN0cnVjdHVyZVwiLFxuICAgIFwiSW50cmFuZXRcIixcbiAgICBcIkNvbW11bmljYXRpb25zXCIsXG4gICAgXCJXZWJcIixcbiAgICBcIkJyYW5kaW5nXCIsXG4gICAgXCJRdWFsaXR5XCIsXG4gICAgXCJBc3N1cmFuY2VcIixcbiAgICBcIk1vYmlsaXR5XCIsXG4gICAgXCJBY2NvdW50c1wiLFxuICAgIFwiRGF0YVwiLFxuICAgIFwiQ3JlYXRpdmVcIixcbiAgICBcIkNvbmZpZ3VyYXRpb25cIixcbiAgICBcIkFjY291bnRhYmlsaXR5XCIsXG4gICAgXCJJbnRlcmFjdGlvbnNcIixcbiAgICBcIkZhY3RvcnNcIixcbiAgICBcIlVzYWJpbGl0eVwiLFxuICAgIFwiTWV0cmljc1wiXG4gIF0sXG4gIFwiam9iXCI6IFtcbiAgICBcIlN1cGVydmlzb3JcIixcbiAgICBcIkFzc29jaWF0ZVwiLFxuICAgIFwiRXhlY3V0aXZlXCIsXG4gICAgXCJMaWFzb25cIixcbiAgICBcIk9mZmljZXJcIixcbiAgICBcIk1hbmFnZXJcIixcbiAgICBcIkVuZ2luZWVyXCIsXG4gICAgXCJTcGVjaWFsaXN0XCIsXG4gICAgXCJEaXJlY3RvclwiLFxuICAgIFwiQ29vcmRpbmF0b3JcIixcbiAgICBcIkFkbWluaXN0cmF0b3JcIixcbiAgICBcIkFyY2hpdGVjdFwiLFxuICAgIFwiQW5hbHlzdFwiLFxuICAgIFwiRGVzaWduZXJcIixcbiAgICBcIlBsYW5uZXJcIixcbiAgICBcIk9yY2hlc3RyYXRvclwiLFxuICAgIFwiVGVjaG5pY2lhblwiLFxuICAgIFwiRGV2ZWxvcGVyXCIsXG4gICAgXCJQcm9kdWNlclwiLFxuICAgIFwiQ29uc3VsdGFudFwiLFxuICAgIFwiQXNzaXN0YW50XCIsXG4gICAgXCJGYWNpbGl0YXRvclwiLFxuICAgIFwiQWdlbnRcIixcbiAgICBcIlJlcHJlc2VudGF0aXZlXCIsXG4gICAgXCJTdHJhdGVnaXN0XCJcbiAgXVxufTtcbiIsIm1vZHVsZVtcImV4cG9ydHNcIl0gPSBbXG4gIFwiIyMjLSMjIy0jIyMjXCIsXG4gIFwiKCMjIykgIyMjLSMjIyNcIixcbiAgXCIxLSMjIy0jIyMtIyMjI1wiLFxuICBcIiMjIy4jIyMuIyMjI1wiLFxuICBcIiMjIy0jIyMtIyMjI1wiLFxuICBcIigjIyMpICMjIy0jIyMjXCIsXG4gIFwiMS0jIyMtIyMjLSMjIyNcIixcbiAgXCIjIyMuIyMjLiMjIyNcIixcbiAgXCIjIyMtIyMjLSMjIyMgeCMjI1wiLFxuICBcIigjIyMpICMjIy0jIyMjIHgjIyNcIixcbiAgXCIxLSMjIy0jIyMtIyMjIyB4IyMjXCIsXG4gIFwiIyMjLiMjIy4jIyMjIHgjIyNcIixcbiAgXCIjIyMtIyMjLSMjIyMgeCMjIyNcIixcbiAgXCIoIyMjKSAjIyMtIyMjIyB4IyMjI1wiLFxuICBcIjEtIyMjLSMjIy0jIyMjIHgjIyMjXCIsXG4gIFwiIyMjLiMjIy4jIyMjIHgjIyMjXCIsXG4gIFwiIyMjLSMjIy0jIyMjIHgjIyMjI1wiLFxuICBcIigjIyMpICMjIy0jIyMjIHgjIyMjI1wiLFxuICBcIjEtIyMjLSMjIy0jIyMjIHgjIyMjI1wiLFxuICBcIiMjIy4jIyMuIyMjIyB4IyMjIyNcIlxuXTtcbiIsInZhciBwaG9uZV9udW1iZXIgPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gcGhvbmVfbnVtYmVyO1xucGhvbmVfbnVtYmVyLmZvcm1hdHMgPSByZXF1aXJlKFwiLi9mb3JtYXRzXCIpO1xuIiwibW9kdWxlW1wiZXhwb3J0c1wiXSA9IFtcbiAgXCJhbnRzXCIsXG4gIFwiYmF0c1wiLFxuICBcImJlYXJzXCIsXG4gIFwiYmVlc1wiLFxuICBcImJpcmRzXCIsXG4gIFwiYnVmZmFsb1wiLFxuICBcImNhdHNcIixcbiAgXCJjaGlja2Vuc1wiLFxuICBcImNhdHRsZVwiLFxuICBcImRvZ3NcIixcbiAgXCJkb2xwaGluc1wiLFxuICBcImR1Y2tzXCIsXG4gIFwiZWxlcGhhbnRzXCIsXG4gIFwiZmlzaGVzXCIsXG4gIFwiZm94ZXNcIixcbiAgXCJmcm9nc1wiLFxuICBcImdlZXNlXCIsXG4gIFwiZ29hdHNcIixcbiAgXCJob3JzZXNcIixcbiAgXCJrYW5nYXJvb3NcIixcbiAgXCJsaW9uc1wiLFxuICBcIm1vbmtleXNcIixcbiAgXCJvd2xzXCIsXG4gIFwib3hlblwiLFxuICBcInBlbmd1aW5zXCIsXG4gIFwicGVvcGxlXCIsXG4gIFwicGlnc1wiLFxuICBcInJhYmJpdHNcIixcbiAgXCJzaGVlcFwiLFxuICBcInRpZ2Vyc1wiLFxuICBcIndoYWxlc1wiLFxuICBcIndvbHZlc1wiLFxuICBcInplYnJhc1wiLFxuICBcImJhbnNoZWVzXCIsXG4gIFwiY3Jvd3NcIixcbiAgXCJibGFjayBjYXRzXCIsXG4gIFwiY2hpbWVyYXNcIixcbiAgXCJnaG9zdHNcIixcbiAgXCJjb25zcGlyYXRvcnNcIixcbiAgXCJkcmFnb25zXCIsXG4gIFwiZHdhcnZlc1wiLFxuICBcImVsdmVzXCIsXG4gIFwiZW5jaGFudGVyc1wiLFxuICBcImV4b3JjaXN0c1wiLFxuICBcInNvbnNcIixcbiAgXCJmb2VzXCIsXG4gIFwiZ2lhbnRzXCIsXG4gIFwiZ25vbWVzXCIsXG4gIFwiZ29ibGluc1wiLFxuICBcImdvb3Nlc1wiLFxuICBcImdyaWZmaW5zXCIsXG4gIFwibHljYW50aHJvcGVzXCIsXG4gIFwibmVtZXNpc1wiLFxuICBcIm9ncmVzXCIsXG4gIFwib3JhY2xlc1wiLFxuICBcInByb3BoZXRzXCIsXG4gIFwic29yY2Vyb3JzXCIsXG4gIFwic3BpZGVyc1wiLFxuICBcInNwaXJpdHNcIixcbiAgXCJ2YW1waXJlc1wiLFxuICBcIndhcmxvY2tzXCIsXG4gIFwidml4ZW5zXCIsXG4gIFwid2VyZXdvbHZlc1wiLFxuICBcIndpdGNoZXNcIixcbiAgXCJ3b3JzaGlwZXJzXCIsXG4gIFwiem9tYmllc1wiLFxuICBcImRydWlkc1wiXG5dO1xuIiwidmFyIHRlYW0gPSB7fTtcbm1vZHVsZVsnZXhwb3J0cyddID0gdGVhbTtcbnRlYW0uY3JlYXR1cmUgPSByZXF1aXJlKFwiLi9jcmVhdHVyZVwiKTtcbnRlYW0ubmFtZSA9IHJlcXVpcmUoXCIuL25hbWVcIik7XG4iLCJtb2R1bGVbXCJleHBvcnRzXCJdID0gW1xuICBcIiN7QWRkcmVzcy5zdGF0ZX0gI3tjcmVhdHVyZX1cIlxuXTtcbiIsIlxudmFyIExvcmVtID0gZnVuY3Rpb24gKGZha2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIEhlbHBlcnMgPSBmYWtlci5oZWxwZXJzO1xuXG4gIHNlbGYud29yZHMgPSBmdW5jdGlvbiAobnVtKSB7XG4gICAgICBpZiAodHlwZW9mIG51bSA9PSAndW5kZWZpbmVkJykgeyBudW0gPSAzOyB9XG4gICAgICByZXR1cm4gSGVscGVycy5zaHVmZmxlKGZha2VyLmRlZmluaXRpb25zLmxvcmVtLndvcmRzKS5zbGljZSgwLCBudW0pO1xuICB9O1xuXG4gIHNlbGYuc2VudGVuY2UgPSBmdW5jdGlvbiAod29yZENvdW50LCByYW5nZSkge1xuICAgICAgaWYgKHR5cGVvZiB3b3JkQ291bnQgPT0gJ3VuZGVmaW5lZCcpIHsgd29yZENvdW50ID0gMzsgfVxuICAgICAgaWYgKHR5cGVvZiByYW5nZSA9PSAndW5kZWZpbmVkJykgeyByYW5nZSA9IDc7IH1cblxuICAgICAgLy8gc3RyYW5nZSBpc3N1ZSB3aXRoIHRoZSBub2RlX21pbl90ZXN0IGZhaWxpbmcgZm9yIGNhcHRpYWxpemUsIHBsZWFzZSBmaXggYW5kIGFkZCBmYWtlci5sb3JlbS5iYWNrXG4gICAgICAvL3JldHVybiAgZmFrZXIubG9yZW0ud29yZHMod29yZENvdW50ICsgSGVscGVycy5yYW5kb21OdW1iZXIocmFuZ2UpKS5qb2luKCcgJykuY2FwaXRhbGl6ZSgpO1xuXG4gICAgICB2YXIgc2VudGVuY2UgPSBmYWtlci5sb3JlbS53b3Jkcyh3b3JkQ291bnQgKyBmYWtlci5yYW5kb20ubnVtYmVyKHJhbmdlKSkuam9pbignICcpO1xuICAgICAgcmV0dXJuIHNlbnRlbmNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc2VudGVuY2Uuc2xpY2UoMSkgKyAnLic7XG4gIH07XG5cbiAgc2VsZi5zZW50ZW5jZXMgPSBmdW5jdGlvbiAoc2VudGVuY2VDb3VudCkge1xuICAgICAgaWYgKHR5cGVvZiBzZW50ZW5jZUNvdW50ID09ICd1bmRlZmluZWQnKSB7IHNlbnRlbmNlQ291bnQgPSAzOyB9XG4gICAgICB2YXIgc2VudGVuY2VzID0gW107XG4gICAgICBmb3IgKHNlbnRlbmNlQ291bnQ7IHNlbnRlbmNlQ291bnQgPiAwOyBzZW50ZW5jZUNvdW50LS0pIHtcbiAgICAgICAgc2VudGVuY2VzLnB1c2goZmFrZXIubG9yZW0uc2VudGVuY2UoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VudGVuY2VzLmpvaW4oXCJcXG5cIik7XG4gIH07XG5cbiAgc2VsZi5wYXJhZ3JhcGggPSBmdW5jdGlvbiAoc2VudGVuY2VDb3VudCkge1xuICAgICAgaWYgKHR5cGVvZiBzZW50ZW5jZUNvdW50ID09ICd1bmRlZmluZWQnKSB7IHNlbnRlbmNlQ291bnQgPSAzOyB9XG4gICAgICByZXR1cm4gZmFrZXIubG9yZW0uc2VudGVuY2VzKHNlbnRlbmNlQ291bnQgKyBmYWtlci5yYW5kb20ubnVtYmVyKDMpKTtcbiAgfTtcblxuICBzZWxmLnBhcmFncmFwaHMgPSBmdW5jdGlvbiAocGFyYWdyYXBoQ291bnQsIHNlcGFyYXRvcikge1xuICAgIGlmICh0eXBlb2Ygc2VwYXJhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBzZXBhcmF0b3IgPSBcIlxcbiBcXHJcIjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJhZ3JhcGhDb3VudCA9PSAndW5kZWZpbmVkJykgeyBwYXJhZ3JhcGhDb3VudCA9IDM7IH1cbiAgICB2YXIgcGFyYWdyYXBocyA9IFtdO1xuICAgIGZvciAocGFyYWdyYXBoQ291bnQ7IHBhcmFncmFwaENvdW50ID4gMDsgcGFyYWdyYXBoQ291bnQtLSkge1xuICAgICAgICBwYXJhZ3JhcGhzLnB1c2goZmFrZXIubG9yZW0ucGFyYWdyYXBoKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYWdyYXBocy5qb2luKHNlcGFyYXRvcik7XG4gIH1cbiAgXG4gIHJldHVybiBzZWxmO1xufTtcblxuXG5tb2R1bGVbXCJleHBvcnRzXCJdID0gTG9yZW07XG4iLCJmdW5jdGlvbiBOYW1lIChmYWtlcikge1xuXG4gIHRoaXMuZmlyc3ROYW1lID0gZnVuY3Rpb24gKGdlbmRlcikge1xuICAgIGlmICh0eXBlb2YgZmFrZXIuZGVmaW5pdGlvbnMubmFtZS5tYWxlX2ZpcnN0X25hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGZha2VyLmRlZmluaXRpb25zLm5hbWUuZmVtYWxlX2ZpcnN0X25hbWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIC8vIHNvbWUgbG9jYWxlIGRhdGFzZXRzICggbGlrZSBydSApIGhhdmUgZmlyc3RfbmFtZSBzcGxpdCBieSBnZW5kZXIuIHNpbmNlIHRoZSBuYW1lLmZpcnN0X25hbWUgZmllbGQgZG9lcyBub3QgZXhpc3QgaW4gdGhlc2UgZGF0YXNldHMsXG4gICAgICAvLyB3ZSBtdXN0IHJhbmRvbWx5IHBpY2sgYSBuYW1lIGZyb20gZWl0aGVyIGdlbmRlciBhcnJheSBzbyBmYWtlci5uYW1lLmZpcnN0TmFtZSB3aWxsIHJldHVybiB0aGUgY29ycmVjdCBsb2NhbGUgZGF0YSAoIGFuZCBub3QgZmFsbGJhY2sgKVxuICAgICAgaWYgKHR5cGVvZiBnZW5kZXIgIT09ICdudW1iZXInKSB7XG4gICAgICAgIGdlbmRlciA9IGZha2VyLnJhbmRvbS5udW1iZXIoMSk7XG4gICAgICB9XG4gICAgICBpZiAoZ2VuZGVyID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmxvY2FsZXNbZmFrZXIubG9jYWxlXS5uYW1lLm1hbGVfZmlyc3RfbmFtZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmxvY2FsZXNbZmFrZXIubG9jYWxlXS5uYW1lLmZlbWFsZV9maXJzdF9uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS5maXJzdF9uYW1lKTtcbiAgfTtcblxuICB0aGlzLmxhc3ROYW1lID0gZnVuY3Rpb24gKGdlbmRlcikge1xuICAgIGlmICh0eXBlb2YgZmFrZXIuZGVmaW5pdGlvbnMubmFtZS5tYWxlX2xhc3RfbmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZmFrZXIuZGVmaW5pdGlvbnMubmFtZS5mZW1hbGVfbGFzdF9uYW1lICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAvLyBzb21lIGxvY2FsZSBkYXRhc2V0cyAoIGxpa2UgcnUgKSBoYXZlIGxhc3RfbmFtZSBzcGxpdCBieSBnZW5kZXIuIGkgaGF2ZSBubyBpZGVhIGhvdyBsYXN0IG5hbWVzIGNhbiBoYXZlIGdlbmRlcnMsIGJ1dCBhbHNvIGkgZG8gbm90IHNwZWFrIHJ1c3NpYW5cbiAgICAgIC8vIHNlZSBhYm92ZSBjb21tZW50IG9mIGZpcnN0TmFtZSBtZXRob2RcbiAgICAgIGlmICh0eXBlb2YgZ2VuZGVyICE9PSAnbnVtYmVyJykge1xuICAgICAgICBnZW5kZXIgPSBmYWtlci5yYW5kb20ubnVtYmVyKDEpO1xuICAgICAgfVxuICAgICAgaWYgKGdlbmRlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5sb2NhbGVzW2Zha2VyLmxvY2FsZV0ubmFtZS5tYWxlX2xhc3RfbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5sb2NhbGVzW2Zha2VyLmxvY2FsZV0ubmFtZS5mZW1hbGVfbGFzdF9uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS5sYXN0X25hbWUpO1xuICB9O1xuXG4gIHRoaXMuZmluZE5hbWUgPSBmdW5jdGlvbiAoZmlyc3ROYW1lLCBsYXN0TmFtZSwgZ2VuZGVyKSB7XG4gICAgICB2YXIgciA9IGZha2VyLnJhbmRvbS5udW1iZXIoOCk7XG4gICAgICB2YXIgcHJlZml4LCBzdWZmaXg7XG4gICAgICAvLyBpbiBwYXJ0aWN1bGFyIGxvY2FsZXMgZmlyc3QgYW5kIGxhc3QgbmFtZXMgc3BsaXQgYnkgZ2VuZGVyLFxuICAgICAgLy8gdGh1cyB3ZSBrZWVwIGNvbnNpc3RlbmN5IGJ5IHBhc3NpbmcgMCBhcyBtYWxlIGFuZCAxIGFzIGZlbWFsZVxuICAgICAgaWYgKHR5cGVvZiBnZW5kZXIgIT09ICdudW1iZXInKSB7XG4gICAgICAgIGdlbmRlciA9IGZha2VyLnJhbmRvbS5udW1iZXIoMSk7XG4gICAgICB9XG4gICAgICBmaXJzdE5hbWUgPSBmaXJzdE5hbWUgfHwgZmFrZXIubmFtZS5maXJzdE5hbWUoZ2VuZGVyKTtcbiAgICAgIGxhc3ROYW1lID0gbGFzdE5hbWUgfHwgZmFrZXIubmFtZS5sYXN0TmFtZShnZW5kZXIpO1xuICAgICAgc3dpdGNoIChyKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgICAgcHJlZml4ID0gZmFrZXIubmFtZS5wcmVmaXgoKTtcbiAgICAgICAgICBpZiAocHJlZml4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyBcIiBcIiArIGZpcnN0TmFtZSArIFwiIFwiICsgbGFzdE5hbWU7XG4gICAgICAgICAgfVxuICAgICAgY2FzZSAxOlxuICAgICAgICAgIHN1ZmZpeCA9IGZha2VyLm5hbWUucHJlZml4KCk7XG4gICAgICAgICAgaWYgKHN1ZmZpeCkge1xuICAgICAgICAgICAgICByZXR1cm4gZmlyc3ROYW1lICsgXCIgXCIgKyBsYXN0TmFtZSArIFwiIFwiICsgc3VmZml4O1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpcnN0TmFtZSArIFwiIFwiICsgbGFzdE5hbWU7XG4gIH07XG5cbiAgdGhpcy5qb2JUaXRsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gIGZha2VyLm5hbWUuam9iRGVzY3JpcHRvcigpICsgXCIgXCIgK1xuICAgICAgZmFrZXIubmFtZS5qb2JBcmVhKCkgKyBcIiBcIiArXG4gICAgICBmYWtlci5uYW1lLmpvYlR5cGUoKTtcbiAgfTtcblxuICB0aGlzLnByZWZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUucHJlZml4KTtcbiAgfTtcblxuICB0aGlzLnN1ZmZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUuc3VmZml4KTtcbiAgfTtcblxuICB0aGlzLnRpdGxlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciAgPSBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUudGl0bGUuZGVzY3JpcHRvciksXG4gICAgICAgICAgbGV2ZWwgICAgICAgPSBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLm5hbWUudGl0bGUubGV2ZWwpLFxuICAgICAgICAgIGpvYiAgICAgICAgID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnRpdGxlLmpvYik7XG5cbiAgICAgIHJldHVybiBkZXNjcmlwdG9yICsgXCIgXCIgKyBsZXZlbCArIFwiIFwiICsgam9iO1xuICB9O1xuXG4gIHRoaXMuam9iRGVzY3JpcHRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnRpdGxlLmRlc2NyaXB0b3IpO1xuICB9O1xuXG4gIHRoaXMuam9iQXJlYSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChmYWtlci5kZWZpbml0aW9ucy5uYW1lLnRpdGxlLmxldmVsKTtcbiAgfTtcblxuICB0aGlzLmpvYlR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZha2VyLnJhbmRvbS5hcnJheUVsZW1lbnQoZmFrZXIuZGVmaW5pdGlvbnMubmFtZS50aXRsZS5qb2IpO1xuICB9O1xuXG59XG5cbm1vZHVsZVsnZXhwb3J0cyddID0gTmFtZTsiLCJ2YXIgUGhvbmUgPSBmdW5jdGlvbiAoZmFrZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYucGhvbmVOdW1iZXIgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgZmFrZXIucGhvbmUucGhvbmVGb3JtYXRzKCk7XG4gICAgICByZXR1cm4gZmFrZXIuaGVscGVycy5yZXBsYWNlU3ltYm9sV2l0aE51bWJlcihmb3JtYXQpO1xuICB9O1xuXG4gIC8vIEZJWE1FOiB0aGlzIGlzIHN0cmFuZ2UgcGFzc2luZyBpbiBhbiBhcnJheSBpbmRleC5cbiAgc2VsZi5waG9uZU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIChwaG9uZUZvcm1hdHNBcnJheUluZGV4KSB7XG4gICAgICBwaG9uZUZvcm1hdHNBcnJheUluZGV4ID0gcGhvbmVGb3JtYXRzQXJyYXlJbmRleCB8fCAwO1xuICAgICAgcmV0dXJuIGZha2VyLmhlbHBlcnMucmVwbGFjZVN5bWJvbFdpdGhOdW1iZXIoZmFrZXIuZGVmaW5pdGlvbnMucGhvbmVfbnVtYmVyLmZvcm1hdHNbcGhvbmVGb3JtYXRzQXJyYXlJbmRleF0pO1xuICB9O1xuXG4gIHNlbGYucGhvbmVGb3JtYXRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWtlci5yYW5kb20uYXJyYXlFbGVtZW50KGZha2VyLmRlZmluaXRpb25zLnBob25lX251bWJlci5mb3JtYXRzKTtcbiAgfTtcbiAgXG4gIHJldHVybiBzZWxmO1xuXG59O1xuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IFBob25lOyIsInZhciBtZXJzZW5uZSA9IHJlcXVpcmUoJy4uL3ZlbmRvci9tZXJzZW5uZScpO1xuXG5mdW5jdGlvbiBSYW5kb20gKGZha2VyLCBzZWVkKSB7XG4gIC8vIFVzZSBhIHVzZXIgcHJvdmlkZWQgc2VlZCBpZiBpdCBleGlzdHNcbiAgaWYgKHNlZWQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWVkKSAmJiBzZWVkLmxlbmd0aCkge1xuICAgICAgbWVyc2VubmUuc2VlZF9hcnJheShzZWVkKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBtZXJzZW5uZS5zZWVkKHNlZWQpO1xuICAgIH1cbiAgfVxuICAvLyByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBudW1iZXIgYmFzZWQgb24gYSBtYXggbnVtYmVyIG9yIHJhbmdlXG4gIHRoaXMubnVtYmVyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgbWF4OiBvcHRpb25zXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLm1pbiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgb3B0aW9ucy5taW4gPSAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5tYXggPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIG9wdGlvbnMubWF4ID0gOTk5OTk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcmVjaXNpb24gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIG9wdGlvbnMucHJlY2lzaW9uID0gMTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHRoZSByYW5nZSBpbmNsdXNpdmUgb2YgdGhlIG1heCB2YWx1ZVxuICAgIHZhciBtYXggPSBvcHRpb25zLm1heDtcbiAgICBpZiAobWF4ID49IDApIHtcbiAgICAgIG1heCArPSBvcHRpb25zLnByZWNpc2lvbjtcbiAgICB9XG5cbiAgICB2YXIgcmFuZG9tTnVtYmVyID0gb3B0aW9ucy5wcmVjaXNpb24gKiBNYXRoLmZsb29yKFxuICAgICAgbWVyc2VubmUucmFuZChtYXggLyBvcHRpb25zLnByZWNpc2lvbiwgb3B0aW9ucy5taW4gLyBvcHRpb25zLnByZWNpc2lvbikpO1xuXG4gICAgcmV0dXJuIHJhbmRvbU51bWJlcjtcblxuICB9XG5cbiAgLy8gdGFrZXMgYW4gYXJyYXkgYW5kIHJldHVybnMgYSByYW5kb20gZWxlbWVudCBvZiB0aGUgYXJyYXlcbiAgdGhpcy5hcnJheUVsZW1lbnQgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICAgIGFycmF5ID0gYXJyYXkgfHwgW1wiYVwiLCBcImJcIiwgXCJjXCJdO1xuICAgICAgdmFyIHIgPSBmYWtlci5yYW5kb20ubnVtYmVyKHsgbWF4OiBhcnJheS5sZW5ndGggLSAxIH0pO1xuICAgICAgcmV0dXJuIGFycmF5W3JdO1xuICB9XG5cbiAgLy8gdGFrZXMgYW4gb2JqZWN0IGFuZCByZXR1cm5zIHRoZSByYW5kb21seSBrZXkgb3IgdmFsdWVcbiAgdGhpcy5vYmplY3RFbGVtZW50ID0gZnVuY3Rpb24gKG9iamVjdCwgZmllbGQpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdCB8fCB7IFwiZm9vXCI6IFwiYmFyXCIsIFwidG9vXCI6IFwiY2FyXCIgfTtcbiAgICAgIHZhciBhcnJheSA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gICAgICB2YXIga2V5ID0gZmFrZXIucmFuZG9tLmFycmF5RWxlbWVudChhcnJheSk7XG5cbiAgICAgIHJldHVybiBmaWVsZCA9PT0gXCJrZXlcIiA/IGtleSA6IG9iamVjdFtrZXldO1xuICB9XG5cbiAgdGhpcy51dWlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIFJGQzQxMjJfVEVNUExBVEUgPSAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4JztcbiAgICAgIHZhciByZXBsYWNlUGxhY2Vob2xkZXJzID0gZnVuY3Rpb24gKHBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgdmFyIHJhbmRvbSA9IE1hdGgucmFuZG9tKCkqMTZ8MDtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBwbGFjZWhvbGRlciA9PSAneCcgPyByYW5kb20gOiAocmFuZG9tICYweDMgfCAweDgpO1xuICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygxNik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIFJGQzQxMjJfVEVNUExBVEUucmVwbGFjZSgvW3h5XS9nLCByZXBsYWNlUGxhY2Vob2xkZXJzKTtcbiAgfVxuXG4gIHRoaXMuYm9vbGVhbiA9ZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICEhZmFrZXIucmFuZG9tLm51bWJlcigxKVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG5cbn1cblxubW9kdWxlWydleHBvcnRzJ10gPSBSYW5kb207XG5cblxuXG4vLyBtb2R1bGUuZXhwb3J0cyA9IHJhbmRvbTtcbiIsInZhciBGYWtlciA9IHJlcXVpcmUoJy4uL2xpYicpO1xudmFyIGZha2VyID0gbmV3IEZha2VyKHsgbG9jYWxlOiAnZW4nLCBsb2NhbGVGYWxsYmFjazogJ2VuJyB9KTtcbmZha2VyLmxvY2FsZXNbJ2VuJ10gPSByZXF1aXJlKCcuLi9saWIvbG9jYWxlcy9lbicpO1xuZmFrZXIubG9jYWxlc1snZW4nXSA9IHJlcXVpcmUoJy4uL2xpYi9sb2NhbGVzL2VuJyk7XG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGZha2VyO1xuIiwiLy8gdGhpcyBwcm9ncmFtIGlzIGEgSmF2YVNjcmlwdCB2ZXJzaW9uIG9mIE1lcnNlbm5lIFR3aXN0ZXIsIHdpdGggY29uY2VhbG1lbnQgYW5kIGVuY2Fwc3VsYXRpb24gaW4gY2xhc3MsXG4vLyBhbiBhbG1vc3Qgc3RyYWlnaHQgY29udmVyc2lvbiBmcm9tIHRoZSBvcmlnaW5hbCBwcm9ncmFtLCBtdDE5OTM3YXIuYyxcbi8vIHRyYW5zbGF0ZWQgYnkgeS4gb2thZGEgb24gSnVseSAxNywgMjAwNi5cbi8vIGFuZCBtb2RpZmllZCBhIGxpdHRsZSBhdCBqdWx5IDIwLCAyMDA2LCBidXQgdGhlcmUgYXJlIG5vdCBhbnkgc3Vic3RhbnRpYWwgZGlmZmVyZW5jZXMuXG4vLyBpbiB0aGlzIHByb2dyYW0sIHByb2NlZHVyZSBkZXNjcmlwdGlvbnMgYW5kIGNvbW1lbnRzIG9mIG9yaWdpbmFsIHNvdXJjZSBjb2RlIHdlcmUgbm90IHJlbW92ZWQuXG4vLyBsaW5lcyBjb21tZW50ZWQgd2l0aCAvL2MvLyB3ZXJlIG9yaWdpbmFsbHkgZGVzY3JpcHRpb25zIG9mIGMgcHJvY2VkdXJlLiBhbmQgYSBmZXcgZm9sbG93aW5nIGxpbmVzIGFyZSBhcHByb3ByaWF0ZSBKYXZhU2NyaXB0IGRlc2NyaXB0aW9ucy5cbi8vIGxpbmVzIGNvbW1lbnRlZCB3aXRoIC8qIGFuZCAqLyBhcmUgb3JpZ2luYWwgY29tbWVudHMuXG4vLyBsaW5lcyBjb21tZW50ZWQgd2l0aCAvLyBhcmUgYWRkaXRpb25hbCBjb21tZW50cyBpbiB0aGlzIEphdmFTY3JpcHQgdmVyc2lvbi5cbi8vIGJlZm9yZSB1c2luZyB0aGlzIHZlcnNpb24sIGNyZWF0ZSBhdCBsZWFzdCBvbmUgaW5zdGFuY2Ugb2YgTWVyc2VubmVUd2lzdGVyMTk5MzcgY2xhc3MsIGFuZCBpbml0aWFsaXplIHRoZSBlYWNoIHN0YXRlLCBnaXZlbiBiZWxvdyBpbiBjIGNvbW1lbnRzLCBvZiBhbGwgdGhlIGluc3RhbmNlcy5cbi8qXG4gICBBIEMtcHJvZ3JhbSBmb3IgTVQxOTkzNywgd2l0aCBpbml0aWFsaXphdGlvbiBpbXByb3ZlZCAyMDAyLzEvMjYuXG4gICBDb2RlZCBieSBUYWt1amkgTmlzaGltdXJhIGFuZCBNYWtvdG8gTWF0c3Vtb3RvLlxuXG4gICBCZWZvcmUgdXNpbmcsIGluaXRpYWxpemUgdGhlIHN0YXRlIGJ5IHVzaW5nIGluaXRfZ2VucmFuZChzZWVkKVxuICAgb3IgaW5pdF9ieV9hcnJheShpbml0X2tleSwga2V5X2xlbmd0aCkuXG5cbiAgIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMDIsIE1ha290byBNYXRzdW1vdG8gYW5kIFRha3VqaSBOaXNoaW11cmEsXG4gICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG4gICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uc1xuICAgYXJlIG1ldDpcblxuICAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAgIDMuIFRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGVcbiAgICAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuXG4gICAgICAgIHBlcm1pc3Npb24uXG5cbiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAgIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SXG4gICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCxcbiAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTyxcbiAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUlxuICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRlxuICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cblxuICAgQW55IGZlZWRiYWNrIGlzIHZlcnkgd2VsY29tZS5cbiAgIGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL2VtdC5odG1sXG4gICBlbWFpbDogbS1tYXQgQCBtYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcCAocmVtb3ZlIHNwYWNlKVxuKi9cblxuZnVuY3Rpb24gTWVyc2VubmVUd2lzdGVyMTk5MzcoKVxue1xuXHQvKiBjb25zdGFudHMgc2hvdWxkIGJlIHNjb3BlZCBpbnNpZGUgdGhlIGNsYXNzICovXG5cdHZhciBOLCBNLCBNQVRSSVhfQSwgVVBQRVJfTUFTSywgTE9XRVJfTUFTSztcblx0LyogUGVyaW9kIHBhcmFtZXRlcnMgKi9cblx0Ly9jLy8jZGVmaW5lIE4gNjI0XG5cdC8vYy8vI2RlZmluZSBNIDM5N1xuXHQvL2MvLyNkZWZpbmUgTUFUUklYX0EgMHg5OTA4YjBkZlVMICAgLyogY29uc3RhbnQgdmVjdG9yIGEgKi9cblx0Ly9jLy8jZGVmaW5lIFVQUEVSX01BU0sgMHg4MDAwMDAwMFVMIC8qIG1vc3Qgc2lnbmlmaWNhbnQgdy1yIGJpdHMgKi9cblx0Ly9jLy8jZGVmaW5lIExPV0VSX01BU0sgMHg3ZmZmZmZmZlVMIC8qIGxlYXN0IHNpZ25pZmljYW50IHIgYml0cyAqL1xuXHROID0gNjI0O1xuXHRNID0gMzk3O1xuXHRNQVRSSVhfQSA9IDB4OTkwOGIwZGY7ICAgLyogY29uc3RhbnQgdmVjdG9yIGEgKi9cblx0VVBQRVJfTUFTSyA9IDB4ODAwMDAwMDA7IC8qIG1vc3Qgc2lnbmlmaWNhbnQgdy1yIGJpdHMgKi9cblx0TE9XRVJfTUFTSyA9IDB4N2ZmZmZmZmY7IC8qIGxlYXN0IHNpZ25pZmljYW50IHIgYml0cyAqL1xuXHQvL2MvL3N0YXRpYyB1bnNpZ25lZCBsb25nIG10W05dOyAvKiB0aGUgYXJyYXkgZm9yIHRoZSBzdGF0ZSB2ZWN0b3IgICovXG5cdC8vYy8vc3RhdGljIGludCBtdGk9TisxOyAvKiBtdGk9PU4rMSBtZWFucyBtdFtOXSBpcyBub3QgaW5pdGlhbGl6ZWQgKi9cblx0dmFyIG10ID0gbmV3IEFycmF5KE4pOyAgIC8qIHRoZSBhcnJheSBmb3IgdGhlIHN0YXRlIHZlY3RvciAgKi9cblx0dmFyIG10aSA9IE4rMTsgICAgICAgICAgIC8qIG10aT09TisxIG1lYW5zIG10W05dIGlzIG5vdCBpbml0aWFsaXplZCAqL1xuXG5cdGZ1bmN0aW9uIHVuc2lnbmVkMzIgKG4xKSAvLyByZXR1cm5zIGEgMzItYml0cyB1bnNpZ2VkIGludGVnZXIgZnJvbSBhbiBvcGVyYW5kIHRvIHdoaWNoIGFwcGxpZWQgYSBiaXQgb3BlcmF0b3IuXG5cdHtcblx0XHRyZXR1cm4gbjEgPCAwID8gKG4xIF4gVVBQRVJfTUFTSykgKyBVUFBFUl9NQVNLIDogbjE7XG5cdH1cblxuXHRmdW5jdGlvbiBzdWJ0cmFjdGlvbjMyIChuMSwgbjIpIC8vIGVtdWxhdGVzIGxvd2VyZmxvdyBvZiBhIGMgMzItYml0cyB1bnNpZ2VkIGludGVnZXIgdmFyaWFibGUsIGluc3RlYWQgb2YgdGhlIG9wZXJhdG9yIC0uIHRoZXNlIGJvdGggYXJndW1lbnRzIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXJzIGV4cHJlc3NpYmxlIHVzaW5nIHVuc2lnbmVkIDMyIGJpdHMuXG5cdHtcblx0XHRyZXR1cm4gbjEgPCBuMiA/IHVuc2lnbmVkMzIoKDB4MTAwMDAwMDAwIC0gKG4yIC0gbjEpKSAmIDB4ZmZmZmZmZmYpIDogbjEgLSBuMjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZGl0aW9uMzIgKG4xLCBuMikgLy8gZW11bGF0ZXMgb3ZlcmZsb3cgb2YgYSBjIDMyLWJpdHMgdW5zaWdlZCBpbnRlZ2VyIHZhcmlhYmxlLCBpbnN0ZWFkIG9mIHRoZSBvcGVyYXRvciArLiB0aGVzZSBib3RoIGFyZ3VtZW50cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycyBleHByZXNzaWJsZSB1c2luZyB1bnNpZ25lZCAzMiBiaXRzLlxuXHR7XG5cdFx0cmV0dXJuIHVuc2lnbmVkMzIoKG4xICsgbjIpICYgMHhmZmZmZmZmZilcblx0fVxuXG5cdGZ1bmN0aW9uIG11bHRpcGxpY2F0aW9uMzIgKG4xLCBuMikgLy8gZW11bGF0ZXMgb3ZlcmZsb3cgb2YgYSBjIDMyLWJpdHMgdW5zaWdlZCBpbnRlZ2VyIHZhcmlhYmxlLCBpbnN0ZWFkIG9mIHRoZSBvcGVyYXRvciAqLiB0aGVzZSBib3RoIGFyZ3VtZW50cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycyBleHByZXNzaWJsZSB1c2luZyB1bnNpZ25lZCAzMiBiaXRzLlxuXHR7XG5cdFx0dmFyIHN1bSA9IDA7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgKytpKXtcblx0XHRcdGlmICgobjEgPj4+IGkpICYgMHgxKXtcblx0XHRcdFx0c3VtID0gYWRkaXRpb24zMihzdW0sIHVuc2lnbmVkMzIobjIgPDwgaSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc3VtO1xuXHR9XG5cblx0LyogaW5pdGlhbGl6ZXMgbXRbTl0gd2l0aCBhIHNlZWQgKi9cblx0Ly9jLy92b2lkIGluaXRfZ2VucmFuZCh1bnNpZ25lZCBsb25nIHMpXG5cdHRoaXMuaW5pdF9nZW5yYW5kID0gZnVuY3Rpb24gKHMpXG5cdHtcblx0XHQvL2MvL210WzBdPSBzICYgMHhmZmZmZmZmZjtcblx0XHRtdFswXT0gdW5zaWduZWQzMihzICYgMHhmZmZmZmZmZik7XG5cdFx0Zm9yIChtdGk9MTsgbXRpPE47IG10aSsrKSB7XG5cdFx0XHRtdFttdGldID1cblx0XHRcdC8vYy8vKDE4MTI0MzMyNTMgKiAobXRbbXRpLTFdIF4gKG10W210aS0xXSA+PiAzMCkpICsgbXRpKTtcblx0XHRcdGFkZGl0aW9uMzIobXVsdGlwbGljYXRpb24zMigxODEyNDMzMjUzLCB1bnNpZ25lZDMyKG10W210aS0xXSBeIChtdFttdGktMV0gPj4+IDMwKSkpLCBtdGkpO1xuXHRcdFx0LyogU2VlIEtudXRoIFRBT0NQIFZvbDIuIDNyZCBFZC4gUC4xMDYgZm9yIG11bHRpcGxpZXIuICovXG5cdFx0XHQvKiBJbiB0aGUgcHJldmlvdXMgdmVyc2lvbnMsIE1TQnMgb2YgdGhlIHNlZWQgYWZmZWN0ICAgKi9cblx0XHRcdC8qIG9ubHkgTVNCcyBvZiB0aGUgYXJyYXkgbXRbXS4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuXHRcdFx0LyogMjAwMi8wMS8wOSBtb2RpZmllZCBieSBNYWtvdG8gTWF0c3Vtb3RvICAgICAgICAgICAgICovXG5cdFx0XHQvL2MvL210W210aV0gJj0gMHhmZmZmZmZmZjtcblx0XHRcdG10W210aV0gPSB1bnNpZ25lZDMyKG10W210aV0gJiAweGZmZmZmZmZmKTtcblx0XHRcdC8qIGZvciA+MzIgYml0IG1hY2hpbmVzICovXG5cdFx0fVxuXHR9XG5cblx0LyogaW5pdGlhbGl6ZSBieSBhbiBhcnJheSB3aXRoIGFycmF5LWxlbmd0aCAqL1xuXHQvKiBpbml0X2tleSBpcyB0aGUgYXJyYXkgZm9yIGluaXRpYWxpemluZyBrZXlzICovXG5cdC8qIGtleV9sZW5ndGggaXMgaXRzIGxlbmd0aCAqL1xuXHQvKiBzbGlnaHQgY2hhbmdlIGZvciBDKyssIDIwMDQvMi8yNiAqL1xuXHQvL2MvL3ZvaWQgaW5pdF9ieV9hcnJheSh1bnNpZ25lZCBsb25nIGluaXRfa2V5W10sIGludCBrZXlfbGVuZ3RoKVxuXHR0aGlzLmluaXRfYnlfYXJyYXkgPSBmdW5jdGlvbiAoaW5pdF9rZXksIGtleV9sZW5ndGgpXG5cdHtcblx0XHQvL2MvL2ludCBpLCBqLCBrO1xuXHRcdHZhciBpLCBqLCBrO1xuXHRcdC8vYy8vaW5pdF9nZW5yYW5kKDE5NjUwMjE4KTtcblx0XHR0aGlzLmluaXRfZ2VucmFuZCgxOTY1MDIxOCk7XG5cdFx0aT0xOyBqPTA7XG5cdFx0ayA9IChOPmtleV9sZW5ndGggPyBOIDoga2V5X2xlbmd0aCk7XG5cdFx0Zm9yICg7IGs7IGstLSkge1xuXHRcdFx0Ly9jLy9tdFtpXSA9IChtdFtpXSBeICgobXRbaS0xXSBeIChtdFtpLTFdID4+IDMwKSkgKiAxNjY0NTI1KSlcblx0XHRcdC8vYy8vXHQrIGluaXRfa2V5W2pdICsgajsgLyogbm9uIGxpbmVhciAqL1xuXHRcdFx0bXRbaV0gPSBhZGRpdGlvbjMyKGFkZGl0aW9uMzIodW5zaWduZWQzMihtdFtpXSBeIG11bHRpcGxpY2F0aW9uMzIodW5zaWduZWQzMihtdFtpLTFdIF4gKG10W2ktMV0gPj4+IDMwKSksIDE2NjQ1MjUpKSwgaW5pdF9rZXlbal0pLCBqKTtcblx0XHRcdG10W2ldID1cblx0XHRcdC8vYy8vbXRbaV0gJj0gMHhmZmZmZmZmZjsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cblx0XHRcdHVuc2lnbmVkMzIobXRbaV0gJiAweGZmZmZmZmZmKTtcblx0XHRcdGkrKzsgaisrO1xuXHRcdFx0aWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH1cblx0XHRcdGlmIChqPj1rZXlfbGVuZ3RoKSBqPTA7XG5cdFx0fVxuXHRcdGZvciAoaz1OLTE7IGs7IGstLSkge1xuXHRcdFx0Ly9jLy9tdFtpXSA9IChtdFtpXSBeICgobXRbaS0xXSBeIChtdFtpLTFdID4+IDMwKSkgKiAxNTY2MDgzOTQxKSlcblx0XHRcdC8vYy8vLSBpOyAvKiBub24gbGluZWFyICovXG5cdFx0XHRtdFtpXSA9IHN1YnRyYWN0aW9uMzIodW5zaWduZWQzMigoZGJnPW10W2ldKSBeIG11bHRpcGxpY2F0aW9uMzIodW5zaWduZWQzMihtdFtpLTFdIF4gKG10W2ktMV0gPj4+IDMwKSksIDE1NjYwODM5NDEpKSwgaSk7XG5cdFx0XHQvL2MvL210W2ldICY9IDB4ZmZmZmZmZmY7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovXG5cdFx0XHRtdFtpXSA9IHVuc2lnbmVkMzIobXRbaV0gJiAweGZmZmZmZmZmKTtcblx0XHRcdGkrKztcblx0XHRcdGlmIChpPj1OKSB7IG10WzBdID0gbXRbTi0xXTsgaT0xOyB9XG5cdFx0fVxuXHRcdG10WzBdID0gMHg4MDAwMDAwMDsgLyogTVNCIGlzIDE7IGFzc3VyaW5nIG5vbi16ZXJvIGluaXRpYWwgYXJyYXkgKi9cblx0fVxuXG4gICAgLyogbW92ZWQgb3V0c2lkZSBvZiBnZW5yYW5kX2ludDMyKCkgYnkgandhdHRlIDIwMTAtMTEtMTc7IGdlbmVyYXRlIGxlc3MgZ2FyYmFnZSAqL1xuICAgIHZhciBtYWcwMSA9IFsweDAsIE1BVFJJWF9BXTtcblxuXHQvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4ZmZmZmZmZmZdLWludGVydmFsICovXG5cdC8vYy8vdW5zaWduZWQgbG9uZyBnZW5yYW5kX2ludDMyKHZvaWQpXG5cdHRoaXMuZ2VucmFuZF9pbnQzMiA9IGZ1bmN0aW9uICgpXG5cdHtcblx0XHQvL2MvL3Vuc2lnbmVkIGxvbmcgeTtcblx0XHQvL2MvL3N0YXRpYyB1bnNpZ25lZCBsb25nIG1hZzAxWzJdPXsweDBVTCwgTUFUUklYX0F9O1xuXHRcdHZhciB5O1xuXHRcdC8qIG1hZzAxW3hdID0geCAqIE1BVFJJWF9BICBmb3IgeD0wLDEgKi9cblxuXHRcdGlmIChtdGkgPj0gTikgeyAvKiBnZW5lcmF0ZSBOIHdvcmRzIGF0IG9uZSB0aW1lICovXG5cdFx0XHQvL2MvL2ludCBraztcblx0XHRcdHZhciBraztcblxuXHRcdFx0aWYgKG10aSA9PSBOKzEpICAgLyogaWYgaW5pdF9nZW5yYW5kKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCwgKi9cblx0XHRcdFx0Ly9jLy9pbml0X2dlbnJhbmQoNTQ4OSk7IC8qIGEgZGVmYXVsdCBpbml0aWFsIHNlZWQgaXMgdXNlZCAqL1xuXHRcdFx0XHR0aGlzLmluaXRfZ2VucmFuZCg1NDg5KTsgLyogYSBkZWZhdWx0IGluaXRpYWwgc2VlZCBpcyB1c2VkICovXG5cblx0XHRcdGZvciAoa2s9MDtrazxOLU07a2srKykge1xuXHRcdFx0XHQvL2MvL3kgPSAobXRba2tdJlVQUEVSX01BU0spfChtdFtraysxXSZMT1dFUl9NQVNLKTtcblx0XHRcdFx0Ly9jLy9tdFtra10gPSBtdFtraytNXSBeICh5ID4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG5cdFx0XHRcdHkgPSB1bnNpZ25lZDMyKChtdFtra10mVVBQRVJfTUFTSyl8KG10W2trKzFdJkxPV0VSX01BU0spKTtcblx0XHRcdFx0bXRba2tdID0gdW5zaWduZWQzMihtdFtraytNXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdKTtcblx0XHRcdH1cblx0XHRcdGZvciAoO2trPE4tMTtraysrKSB7XG5cdFx0XHRcdC8vYy8veSA9IChtdFtra10mVVBQRVJfTUFTSyl8KG10W2trKzFdJkxPV0VSX01BU0spO1xuXHRcdFx0XHQvL2MvL210W2trXSA9IG10W2trKyhNLU4pXSBeICh5ID4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG5cdFx0XHRcdHkgPSB1bnNpZ25lZDMyKChtdFtra10mVVBQRVJfTUFTSyl8KG10W2trKzFdJkxPV0VSX01BU0spKTtcblx0XHRcdFx0bXRba2tdID0gdW5zaWduZWQzMihtdFtraysoTS1OKV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXSk7XG5cdFx0XHR9XG5cdFx0XHQvL2MvL3kgPSAobXRbTi0xXSZVUFBFUl9NQVNLKXwobXRbMF0mTE9XRVJfTUFTSyk7XG5cdFx0XHQvL2MvL210W04tMV0gPSBtdFtNLTFdIF4gKHkgPj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcblx0XHRcdHkgPSB1bnNpZ25lZDMyKChtdFtOLTFdJlVQUEVSX01BU0spfChtdFswXSZMT1dFUl9NQVNLKSk7XG5cdFx0XHRtdFtOLTFdID0gdW5zaWduZWQzMihtdFtNLTFdIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV0pO1xuXHRcdFx0bXRpID0gMDtcblx0XHR9XG5cblx0XHR5ID0gbXRbbXRpKytdO1xuXG5cdFx0LyogVGVtcGVyaW5nICovXG5cdFx0Ly9jLy95IF49ICh5ID4+IDExKTtcblx0XHQvL2MvL3kgXj0gKHkgPDwgNykgJiAweDlkMmM1NjgwO1xuXHRcdC8vYy8veSBePSAoeSA8PCAxNSkgJiAweGVmYzYwMDAwO1xuXHRcdC8vYy8veSBePSAoeSA+PiAxOCk7XG5cdFx0eSA9IHVuc2lnbmVkMzIoeSBeICh5ID4+PiAxMSkpO1xuXHRcdHkgPSB1bnNpZ25lZDMyKHkgXiAoKHkgPDwgNykgJiAweDlkMmM1NjgwKSk7XG5cdFx0eSA9IHVuc2lnbmVkMzIoeSBeICgoeSA8PCAxNSkgJiAweGVmYzYwMDAwKSk7XG5cdFx0eSA9IHVuc2lnbmVkMzIoeSBeICh5ID4+PiAxOCkpO1xuXG5cdFx0cmV0dXJuIHk7XG5cdH1cblxuXHQvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4N2ZmZmZmZmZdLWludGVydmFsICovXG5cdC8vYy8vbG9uZyBnZW5yYW5kX2ludDMxKHZvaWQpXG5cdHRoaXMuZ2VucmFuZF9pbnQzMSA9IGZ1bmN0aW9uICgpXG5cdHtcblx0XHQvL2MvL3JldHVybiAoZ2VucmFuZF9pbnQzMigpPj4xKTtcblx0XHRyZXR1cm4gKHRoaXMuZ2VucmFuZF9pbnQzMigpPj4+MSk7XG5cdH1cblxuXHQvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDFdLXJlYWwtaW50ZXJ2YWwgKi9cblx0Ly9jLy9kb3VibGUgZ2VucmFuZF9yZWFsMSh2b2lkKVxuXHR0aGlzLmdlbnJhbmRfcmVhbDEgPSBmdW5jdGlvbiAoKVxuXHR7XG5cdFx0Ly9jLy9yZXR1cm4gZ2VucmFuZF9pbnQzMigpKigxLjAvNDI5NDk2NzI5NS4wKTtcblx0XHRyZXR1cm4gdGhpcy5nZW5yYW5kX2ludDMyKCkqKDEuMC80Mjk0OTY3Mjk1LjApO1xuXHRcdC8qIGRpdmlkZWQgYnkgMl4zMi0xICovXG5cdH1cblxuXHQvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpLXJlYWwtaW50ZXJ2YWwgKi9cblx0Ly9jLy9kb3VibGUgZ2VucmFuZF9yZWFsMih2b2lkKVxuXHR0aGlzLmdlbnJhbmRfcmVhbDIgPSBmdW5jdGlvbiAoKVxuXHR7XG5cdFx0Ly9jLy9yZXR1cm4gZ2VucmFuZF9pbnQzMigpKigxLjAvNDI5NDk2NzI5Ni4wKTtcblx0XHRyZXR1cm4gdGhpcy5nZW5yYW5kX2ludDMyKCkqKDEuMC80Mjk0OTY3Mjk2LjApO1xuXHRcdC8qIGRpdmlkZWQgYnkgMl4zMiAqL1xuXHR9XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiAoMCwxKS1yZWFsLWludGVydmFsICovXG5cdC8vYy8vZG91YmxlIGdlbnJhbmRfcmVhbDModm9pZClcblx0dGhpcy5nZW5yYW5kX3JlYWwzID0gZnVuY3Rpb24gKClcblx0e1xuXHRcdC8vYy8vcmV0dXJuICgoZ2VucmFuZF9pbnQzMigpKSArIDAuNSkqKDEuMC80Mjk0OTY3Mjk2LjApO1xuXHRcdHJldHVybiAoKHRoaXMuZ2VucmFuZF9pbnQzMigpKSArIDAuNSkqKDEuMC80Mjk0OTY3Mjk2LjApO1xuXHRcdC8qIGRpdmlkZWQgYnkgMl4zMiAqL1xuXHR9XG5cblx0LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKSB3aXRoIDUzLWJpdCByZXNvbHV0aW9uKi9cblx0Ly9jLy9kb3VibGUgZ2VucmFuZF9yZXM1Myh2b2lkKVxuXHR0aGlzLmdlbnJhbmRfcmVzNTMgPSBmdW5jdGlvbiAoKVxuXHR7XG5cdFx0Ly9jLy91bnNpZ25lZCBsb25nIGE9Z2VucmFuZF9pbnQzMigpPj41LCBiPWdlbnJhbmRfaW50MzIoKT4+Njtcblx0XHR2YXIgYT10aGlzLmdlbnJhbmRfaW50MzIoKT4+PjUsIGI9dGhpcy5nZW5yYW5kX2ludDMyKCk+Pj42O1xuXHRcdHJldHVybihhKjY3MTA4ODY0LjArYikqKDEuMC85MDA3MTk5MjU0NzQwOTkyLjApO1xuXHR9XG5cdC8qIFRoZXNlIHJlYWwgdmVyc2lvbnMgYXJlIGR1ZSB0byBJc2FrdSBXYWRhLCAyMDAyLzAxLzA5IGFkZGVkICovXG59XG5cbi8vICBFeHBvcnRzOiBQdWJsaWMgQVBJXG5cbi8vICBFeHBvcnQgdGhlIHR3aXN0ZXIgY2xhc3NcbmV4cG9ydHMuTWVyc2VubmVUd2lzdGVyMTk5MzcgPSBNZXJzZW5uZVR3aXN0ZXIxOTkzNztcblxuLy8gIEV4cG9ydCBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgcmFuZG9tIG51bWJlcnNcbnZhciBnZW4gPSBuZXcgTWVyc2VubmVUd2lzdGVyMTk5Mzc7XG5nZW4uaW5pdF9nZW5yYW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpICUgMTAwMDAwMDAwMCk7XG5cbi8vIEFkZGVkIG1heCwgbWluIHJhbmdlIGZ1bmN0aW9uYWxpdHksIE1hcmFrIFNxdWlyZXMgU2VwdCAxMSAyMDE0XG5leHBvcnRzLnJhbmQgPSBmdW5jdGlvbihtYXgsIG1pbikge1xuICAgIGlmIChtYXggPT09IHVuZGVmaW5lZClcbiAgICAgICAge1xuICAgICAgICBtaW4gPSAwO1xuICAgICAgICBtYXggPSAzMjc2ODtcbiAgICAgICAgfVxuICAgIHJldHVybiBNYXRoLmZsb29yKGdlbi5nZW5yYW5kX3JlYWwyKCkgKiAobWF4IC0gbWluKSArIG1pbik7XG59XG5leHBvcnRzLnNlZWQgPSBmdW5jdGlvbihTKSB7XG4gICAgaWYgKHR5cGVvZihTKSAhPSAnbnVtYmVyJylcbiAgICAgICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZWVkKFMpIG11c3QgdGFrZSBudW1lcmljIGFyZ3VtZW50OyBpcyBcIiArIHR5cGVvZihTKSk7XG4gICAgICAgIH1cbiAgICBnZW4uaW5pdF9nZW5yYW5kKFMpO1xufVxuZXhwb3J0cy5zZWVkX2FycmF5ID0gZnVuY3Rpb24oQSkge1xuICAgIGlmICh0eXBlb2YoQSkgIT0gJ29iamVjdCcpXG4gICAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2VlZF9hcnJheShBKSBtdXN0IHRha2UgYXJyYXkgb2YgbnVtYmVyczsgaXMgXCIgKyB0eXBlb2YoQSkpO1xuICAgICAgICB9XG4gICAgZ2VuLmluaXRfYnlfYXJyYXkoQSk7XG59XG4iLCIvKlxuICogcGFzc3dvcmQtZ2VuZXJhdG9yXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDEzIEJlcm1pIEZlcnJlciA8YmVybWlAYmVybWlsYWJzLmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4oZnVuY3Rpb24gKHJvb3QpIHtcblxuICB2YXIgbG9jYWxOYW1lLCBjb25zb25hbnQsIGxldHRlciwgcGFzc3dvcmQsIHZvd2VsO1xuICBsZXR0ZXIgPSAvW2EtekEtWl0kLztcbiAgdm93ZWwgPSAvW2FlaW91QUVJT1VdJC87XG4gIGNvbnNvbmFudCA9IC9bYmNkZmdoamtsbW5wcXJzdHZ3eHl6QkNERkdISktMTU5QUVJTVFZXWFlaXSQvO1xuXG5cbiAgLy8gRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbG9jYWwgdmFyaWFibGUgdGhlIHBhc3N3b3JkR2VuZXJhdG9yIGxpYnJhcnkgd2lsbCB1c2VcbiAgLy8gdGhpcyBpcyBzcGVjaWFsbHkgdXNlZnVsIGlmIHdpbmRvdy5wYXNzd29yZEdlbmVyYXRvciBpcyBhbHJlYWR5IGJlaW5nIHVzZWRcbiAgLy8gYnkgeW91ciBhcHBsaWNhdGlvbiBhbmQgeW91IHdhbnQgYSBkaWZmZXJlbnQgbmFtZS4gRm9yIGV4YW1wbGU6XG4gIC8vICAgIC8vIERlY2xhcmUgYmVmb3JlIGluY2x1ZGluZyB0aGUgcGFzc3dvcmRHZW5lcmF0b3IgbGlicmFyeVxuICAvLyAgICB2YXIgbG9jYWxQYXNzd29yZEdlbmVyYXRvckxpYnJhcnlOYW1lID0gJ3Bhc3MnO1xuICBsb2NhbE5hbWUgPSByb290LmxvY2FsUGFzc3dvcmRHZW5lcmF0b3JMaWJyYXJ5TmFtZSB8fCBcImdlbmVyYXRlUGFzc3dvcmRcIixcblxuICBwYXNzd29yZCA9IGZ1bmN0aW9uIChsZW5ndGgsIG1lbW9yYWJsZSwgcGF0dGVybiwgcHJlZml4KSB7XG4gICAgdmFyIGNoYXIsIG47XG4gICAgaWYgKGxlbmd0aCA9PSBudWxsKSB7XG4gICAgICBsZW5ndGggPSAxMDtcbiAgICB9XG4gICAgaWYgKG1lbW9yYWJsZSA9PSBudWxsKSB7XG4gICAgICBtZW1vcmFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAocGF0dGVybiA9PSBudWxsKSB7XG4gICAgICBwYXR0ZXJuID0gL1xcdy87XG4gICAgfVxuICAgIGlmIChwcmVmaXggPT0gbnVsbCkge1xuICAgICAgcHJlZml4ID0gJyc7XG4gICAgfVxuICAgIGlmIChwcmVmaXgubGVuZ3RoID49IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9XG4gICAgaWYgKG1lbW9yYWJsZSkge1xuICAgICAgaWYgKHByZWZpeC5tYXRjaChjb25zb25hbnQpKSB7XG4gICAgICAgIHBhdHRlcm4gPSB2b3dlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdHRlcm4gPSBjb25zb25hbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIG4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5NCkgKyAzMztcbiAgICBjaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShuKTtcbiAgICBpZiAobWVtb3JhYmxlKSB7XG4gICAgICBjaGFyID0gY2hhci50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoIWNoYXIubWF0Y2gocGF0dGVybikpIHtcbiAgICAgIHJldHVybiBwYXNzd29yZChsZW5ndGgsIG1lbW9yYWJsZSwgcGF0dGVybiwgcHJlZml4KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhc3N3b3JkKGxlbmd0aCwgbWVtb3JhYmxlLCBwYXR0ZXJuLCBcIlwiICsgcHJlZml4ICsgY2hhcik7XG4gIH07XG5cblxuICAoKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogcm9vdClbbG9jYWxOYW1lXSA9IHBhc3N3b3JkO1xuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHBhc3N3b3JkO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIGluIHRoZSBicm93c2VyLCBvciBgZ2xvYmFsYCBvbiB0aGUgc2VydmVyLlxufSh0aGlzKSk7IiwiLypcblxuQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgSmVmZnJleSBNZWFsb1xuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbmRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG50aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG50byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZVxuU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEVcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUlxuQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQmFzZWQgbG9vc2VseSBvbiBMdWthIFB1c2ljJ3MgUEhQIFNjcmlwdDogaHR0cDovLzM2MHBlcmNlbnRzLmNvbS9wb3N0cy9waHAtcmFuZG9tLXVzZXItYWdlbnQtZ2VuZXJhdG9yL1xuXG5UaGUgbGljZW5zZSBmb3IgdGhhdCBzY3JpcHQgaXMgYXMgZm9sbG93czpcblxuXCJUSEUgQkVFUi1XQVJFIExJQ0VOU0VcIiAoUmV2aXNpb24gNDIpOlxuXG48cHVzaWM5M0BnbWFpbC5jb20+IHdyb3RlIHRoaXMgZmlsZS4gQXMgbG9uZyBhcyB5b3UgcmV0YWluIHRoaXMgbm90aWNlIHlvdSBjYW4gZG8gd2hhdGV2ZXIgeW91IHdhbnQgd2l0aCB0aGlzIHN0dWZmLlxuSWYgd2UgbWVldCBzb21lIGRheSwgYW5kIHlvdSB0aGluayB0aGlzIHN0dWZmIGlzIHdvcnRoIGl0LCB5b3UgY2FuIGJ1eSBtZSBhIGJlZXIgaW4gcmV0dXJuLiBMdWthIFB1c2ljXG4qL1xuXG5mdW5jdGlvbiBybmQoYSwgYikge1xuICAgIC8vY2FsbGluZyBybmQoKSB3aXRoIG5vIGFyZ3VtZW50cyBpcyBpZGVudGljYWwgdG8gcm5kKDAsIDEwMClcbiAgICBhID0gYSB8fCAwO1xuICAgIGIgPSBiIHx8IDEwMDtcblxuICAgIGlmICh0eXBlb2YgYiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGEgPT09ICdudW1iZXInKSB7XG4gICAgICAgIC8vcm5kKGludCBtaW4sIGludCBtYXgpIHJldHVybnMgaW50ZWdlciBiZXR3ZWVuIG1pbiwgbWF4XG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24gKG1pbiwgbWF4KSB7XG4gICAgICAgICAgICBpZiAobWluID4gbWF4KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2V4cGVjdGVkIG1pbiA8PSBtYXg7IGdvdCBtaW4gPSAnICsgbWluICsgJywgbWF4ID0gJyArIG1heCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcbiAgICAgICAgfShhLCBiKSk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG4gICAgICAgIC8vcmV0dXJucyBhIHJhbmRvbSBlbGVtZW50IGZyb20gYXJyYXkgKGEpLCBldmVuIHdlaWdodGluZ1xuICAgICAgICByZXR1cm4gYVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhLmxlbmd0aCldO1xuICAgIH1cblxuICAgIGlmIChhICYmIHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvL3JldHVybnMgYSByYW5kb20ga2V5IGZyb20gdGhlIHBhc3NlZCBvYmplY3Q7IGtleXMgYXJlIHdlaWdodGVkIGJ5IHRoZSBkZWNpbWFsIHByb2JhYmlsaXR5IGluIHRoZWlyIHZhbHVlXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgdmFyIHJhbmQgPSBybmQoMCwgMTAwKSAvIDEwMCwgbWluID0gMCwgbWF4ID0gMCwga2V5LCByZXR1cm5fdmFsO1xuXG4gICAgICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gb2JqW2tleV0gKyBtaW47XG4gICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5kID49IG1pbiAmJiByYW5kIDw9IG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWluID0gbWluICsgb2JqW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbDtcbiAgICAgICAgfShhKSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIHJuZC4gKCcgKyAoYiA/IGEgKyAnLCAnICsgYiA6IGEpICsgJyknKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tTGFuZygpIHtcbiAgICByZXR1cm4gcm5kKFsnQUInLCAnQUYnLCAnQU4nLCAnQVInLCAnQVMnLCAnQVonLCAnQkUnLCAnQkcnLCAnQk4nLCAnQk8nLCAnQlInLCAnQlMnLCAnQ0EnLCAnQ0UnLCAnQ08nLCAnQ1MnLFxuICAgICAgICAgICAgICAgICdDVScsICdDWScsICdEQScsICdERScsICdFTCcsICdFTicsICdFTycsICdFUycsICdFVCcsICdFVScsICdGQScsICdGSScsICdGSicsICdGTycsICdGUicsICdGWScsXG4gICAgICAgICAgICAgICAgJ0dBJywgJ0dEJywgJ0dMJywgJ0dWJywgJ0hFJywgJ0hJJywgJ0hSJywgJ0hUJywgJ0hVJywgJ0hZJywgJ0lEJywgJ0lTJywgJ0lUJywgJ0pBJywgJ0pWJywgJ0tBJyxcbiAgICAgICAgICAgICAgICAnS0cnLCAnS08nLCAnS1UnLCAnS1cnLCAnS1knLCAnTEEnLCAnTEInLCAnTEknLCAnTE4nLCAnTFQnLCAnTFYnLCAnTUcnLCAnTUsnLCAnTU4nLCAnTU8nLCAnTVMnLFxuICAgICAgICAgICAgICAgICdNVCcsICdNWScsICdOQicsICdORScsICdOTCcsICdOTicsICdOTycsICdPQycsICdQTCcsICdQVCcsICdSTScsICdSTycsICdSVScsICdTQycsICdTRScsICdTSycsXG4gICAgICAgICAgICAgICAgJ1NMJywgJ1NPJywgJ1NRJywgJ1NSJywgJ1NWJywgJ1NXJywgJ1RLJywgJ1RSJywgJ1RZJywgJ1VLJywgJ1VSJywgJ1VaJywgJ1ZJJywgJ1ZPJywgJ1lJJywgJ1pIJ10pO1xufVxuXG5mdW5jdGlvbiByYW5kb21Ccm93c2VyQW5kT1MoKSB7XG4gICAgdmFyIGJyb3dzZXIgPSBybmQoe1xuICAgICAgICBjaHJvbWU6ICAgIC40NTEzMjgxMDU2NixcbiAgICAgICAgaWV4cGxvcmVyOiAuMjc0NzcwNjE4MzYsXG4gICAgICAgIGZpcmVmb3g6ICAgLjE5Mzg0MTcwNjA4LFxuICAgICAgICBzYWZhcmk6ICAgIC4wNjE4Njc4MTExOCxcbiAgICAgICAgb3BlcmE6ICAgICAuMDE1NzQyMzY5NTVcbiAgICB9KSxcbiAgICBvcyA9IHtcbiAgICAgICAgY2hyb21lOiAge3dpbjogLjg5LCAgbWFjOiAuMDkgLCBsaW46IC4wMn0sXG4gICAgICAgIGZpcmVmb3g6IHt3aW46IC44MywgIG1hYzogLjE2LCAgbGluOiAuMDF9LFxuICAgICAgICBvcGVyYTogICB7d2luOiAuOTEsICBtYWM6IC4wMyAsIGxpbjogLjA2fSxcbiAgICAgICAgc2FmYXJpOiAge3dpbjogLjA0ICwgbWFjOiAuOTYgIH0sXG4gICAgICAgIGlleHBsb3JlcjogWyd3aW4nXVxuICAgIH07XG5cbiAgICByZXR1cm4gW2Jyb3dzZXIsIHJuZChvc1ticm93c2VyXSldO1xufVxuXG5mdW5jdGlvbiByYW5kb21Qcm9jKGFyY2gpIHtcbiAgICB2YXIgcHJvY3MgPSB7XG4gICAgICAgIGxpbjpbJ2k2ODYnLCAneDg2XzY0J10sXG4gICAgICAgIG1hYzogeydJbnRlbCcgOiAuNDgsICdQUEMnOiAuMDEsICdVOyBJbnRlbCc6LjQ4LCAnVTsgUFBDJyA6LjAxfSxcbiAgICAgICAgd2luOlsnJywgJ1dPVzY0JywgJ1dpbjY0OyB4NjQnXVxuICAgIH07XG4gICAgcmV0dXJuIHJuZChwcm9jc1thcmNoXSk7XG59XG5cbmZ1bmN0aW9uIHJhbmRvbVJldmlzaW9uKGRvdHMpIHtcbiAgICB2YXIgcmV0dXJuX3ZhbCA9ICcnO1xuICAgIC8vZ2VuZXJhdGUgYSByYW5kb20gcmV2aXNpb25cbiAgICAvL2RvdHMgPSAyIHJldHVybnMgLngueSB3aGVyZSB4ICYgeSBhcmUgYmV0d2VlbiAwIGFuZCA5XG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCBkb3RzOyB4KyspIHtcbiAgICAgICAgcmV0dXJuX3ZhbCArPSAnLicgKyBybmQoMCwgOSk7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5fdmFsO1xufVxuXG52YXIgdmVyc2lvbl9zdHJpbmcgPSB7XG4gICAgbmV0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbcm5kKDEsIDQpLCBybmQoMCwgOSksIHJuZCgxMDAwMCwgOTk5OTkpLCBybmQoMCwgOSldLmpvaW4oJy4nKTtcbiAgICB9LFxuICAgIG50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBybmQoNSwgNikgKyAnLicgKyBybmQoMCwgMyk7XG4gICAgfSxcbiAgICBpZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcm5kKDcsIDExKTtcbiAgICB9LFxuICAgIHRyaWRlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJuZCgzLCA3KSArICcuJyArIHJuZCgwLCAxKTtcbiAgICB9LFxuICAgIG9zeDogZnVuY3Rpb24gKGRlbGltKSB7XG4gICAgICAgIHJldHVybiBbMTAsIHJuZCg1LCAxMCksIHJuZCgwLCA5KV0uam9pbihkZWxpbSB8fCAnLicpO1xuICAgIH0sXG4gICAgY2hyb21lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbcm5kKDEzLCAzOSksIDAsIHJuZCg4MDAsIDg5OSksIDBdLmpvaW4oJy4nKTtcbiAgICB9LFxuICAgIHByZXN0bzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJzIuOS4nICsgcm5kKDE2MCwgMTkwKTtcbiAgICB9LFxuICAgIHByZXN0bzI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJuZCgxMCwgMTIpICsgJy4wMCc7XG4gICAgfSxcbiAgICBzYWZhcmk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJuZCg1MzEsIDUzOCkgKyAnLicgKyBybmQoMCwgMikgKyAnLicgKyBybmQoMCwyKTtcbiAgICB9XG59O1xuXG52YXIgYnJvd3NlciA9IHtcbiAgICBmaXJlZm94OiBmdW5jdGlvbiBmaXJlZm94KGFyY2gpIHtcbiAgICAgICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dlY2tvX3VzZXJfYWdlbnRfc3RyaW5nX3JlZmVyZW5jZVxuICAgICAgICB2YXIgZmlyZWZveF92ZXIgPSBybmQoNSwgMTUpICsgcmFuZG9tUmV2aXNpb24oMiksXG4gICAgICAgICAgICBnZWNrb192ZXIgPSAnR2Vja28vMjAxMDAxMDEgRmlyZWZveC8nICsgZmlyZWZveF92ZXIsXG4gICAgICAgICAgICBwcm9jID0gcmFuZG9tUHJvYyhhcmNoKSxcbiAgICAgICAgICAgIG9zX3ZlciA9IChhcmNoID09PSAnd2luJykgPyAnKFdpbmRvd3MgTlQgJyArIHZlcnNpb25fc3RyaW5nLm50KCkgKyAoKHByb2MpID8gJzsgJyArIHByb2MgOiAnJylcbiAgICAgICAgICAgIDogKGFyY2ggPT09ICdtYWMnKSA/ICcoTWFjaW50b3NoOyAnICsgcHJvYyArICcgTWFjIE9TIFggJyArIHZlcnNpb25fc3RyaW5nLm9zeCgpXG4gICAgICAgICAgICA6ICcoWDExOyBMaW51eCAnICsgcHJvYztcblxuICAgICAgICByZXR1cm4gJ01vemlsbGEvNS4wICcgKyBvc192ZXIgKyAnOyBydjonICsgZmlyZWZveF92ZXIuc2xpY2UoMCwgLTIpICsgJykgJyArIGdlY2tvX3ZlcjtcbiAgICB9LFxuXG4gICAgaWV4cGxvcmVyOiBmdW5jdGlvbiBpZXhwbG9yZXIoKSB7XG4gICAgICAgIHZhciB2ZXIgPSB2ZXJzaW9uX3N0cmluZy5pZSgpO1xuXG4gICAgICAgIGlmICh2ZXIgPj0gMTEpIHtcbiAgICAgICAgICAgIC8vaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoODY5MzAxKHY9dnMuODUpLmFzcHhcbiAgICAgICAgICAgIHJldHVybiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4nICsgcm5kKDEsMykgKyAnOyBUcmlkZW50LzcuMDsgJyArIHJuZChbJ1RvdWNoOyAnLCAnJ10pICsgJ3J2OjExLjApIGxpa2UgR2Vja28nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvbXM1Mzc1MDModj12cy44NSkuYXNweFxuICAgICAgICByZXR1cm4gJ01vemlsbGEvNS4wIChjb21wYXRpYmxlOyBNU0lFICcgKyB2ZXIgKyAnLjA7IFdpbmRvd3MgTlQgJyArIHZlcnNpb25fc3RyaW5nLm50KCkgKyAnOyBUcmlkZW50LycgK1xuICAgICAgICAgICAgdmVyc2lvbl9zdHJpbmcudHJpZGVudCgpICsgKChybmQoMCwgMSkgPT09IDEpID8gJzsgLk5FVCBDTFIgJyArIHZlcnNpb25fc3RyaW5nLm5ldCgpIDogJycpICsgJyknO1xuICAgIH0sXG5cbiAgICBvcGVyYTogZnVuY3Rpb24gb3BlcmEoYXJjaCkge1xuICAgICAgICAvL2h0dHA6Ly93d3cub3BlcmEuY29tL2RvY3MvaGlzdG9yeS9cbiAgICAgICAgdmFyIHByZXN0b192ZXIgPSAnIFByZXN0by8nICsgdmVyc2lvbl9zdHJpbmcucHJlc3RvKCkgKyAnIFZlcnNpb24vJyArIHZlcnNpb25fc3RyaW5nLnByZXN0bzIoKSArICcpJyxcbiAgICAgICAgICAgIG9zX3ZlciA9IChhcmNoID09PSAnd2luJykgPyAnKFdpbmRvd3MgTlQgJyArIHZlcnNpb25fc3RyaW5nLm50KCkgKyAnOyBVOyAnICsgcmFuZG9tTGFuZygpICsgcHJlc3RvX3ZlclxuICAgICAgICAgICAgOiAoYXJjaCA9PT0gJ2xpbicpID8gJyhYMTE7IExpbnV4ICcgKyByYW5kb21Qcm9jKGFyY2gpICsgJzsgVTsgJyArIHJhbmRvbUxhbmcoKSArIHByZXN0b192ZXJcbiAgICAgICAgICAgIDogJyhNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYICcgKyB2ZXJzaW9uX3N0cmluZy5vc3goKSArICcgVTsgJyArIHJhbmRvbUxhbmcoKSArICcgUHJlc3RvLycgK1xuICAgICAgICAgICAgdmVyc2lvbl9zdHJpbmcucHJlc3RvKCkgKyAnIFZlcnNpb24vJyArIHZlcnNpb25fc3RyaW5nLnByZXN0bzIoKSArICcpJztcblxuICAgICAgICByZXR1cm4gJ09wZXJhLycgKyBybmQoOSwgMTQpICsgJy4nICsgcm5kKDAsIDk5KSArICcgJyArIG9zX3ZlcjtcbiAgICB9LFxuXG4gICAgc2FmYXJpOiBmdW5jdGlvbiBzYWZhcmkoYXJjaCkge1xuICAgICAgICB2YXIgc2FmYXJpID0gdmVyc2lvbl9zdHJpbmcuc2FmYXJpKCksXG4gICAgICAgICAgICB2ZXIgPSBybmQoNCwgNykgKyAnLicgKyBybmQoMCwxKSArICcuJyArIHJuZCgwLDEwKSxcbiAgICAgICAgICAgIG9zX3ZlciA9IChhcmNoID09PSAnbWFjJykgPyAnKE1hY2ludG9zaDsgJyArIHJhbmRvbVByb2MoJ21hYycpICsgJyBNYWMgT1MgWCAnKyB2ZXJzaW9uX3N0cmluZy5vc3goJ18nKSArICcgcnY6JyArIHJuZCgyLCA2KSArICcuMDsgJysgcmFuZG9tTGFuZygpICsgJykgJ1xuICAgICAgICAgICAgOiAnKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgJyArIHZlcnNpb25fc3RyaW5nLm50KCkgKyAnKSc7XG5cbiAgICAgICAgcmV0dXJuICdNb3ppbGxhLzUuMCAnICsgb3NfdmVyICsgJ0FwcGxlV2ViS2l0LycgKyBzYWZhcmkgKyAnIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8nICsgdmVyICsgJyBTYWZhcmkvJyArIHNhZmFyaTtcbiAgICB9LFxuXG4gICAgY2hyb21lOiBmdW5jdGlvbiBjaHJvbWUoYXJjaCkge1xuICAgICAgICB2YXIgc2FmYXJpID0gdmVyc2lvbl9zdHJpbmcuc2FmYXJpKCksXG4gICAgICAgICAgICBvc192ZXIgPSAoYXJjaCA9PT0gJ21hYycpID8gJyhNYWNpbnRvc2g7ICcgKyByYW5kb21Qcm9jKCdtYWMnKSArICcgTWFjIE9TIFggJyArIHZlcnNpb25fc3RyaW5nLm9zeCgnXycpICsgJykgJ1xuICAgICAgICAgICAgOiAoYXJjaCA9PT0gJ3dpbicpID8gJyhXaW5kb3dzOyBVOyBXaW5kb3dzIE5UICcgKyB2ZXJzaW9uX3N0cmluZy5udCgpICsgJyknXG4gICAgICAgICAgICA6ICcoWDExOyBMaW51eCAnICsgcmFuZG9tUHJvYyhhcmNoKTtcblxuICAgICAgICByZXR1cm4gJ01vemlsbGEvNS4wICcgKyBvc192ZXIgKyAnIEFwcGxlV2ViS2l0LycgKyBzYWZhcmkgKyAnIChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLycgKyB2ZXJzaW9uX3N0cmluZy5jaHJvbWUoKSArICcgU2FmYXJpLycgKyBzYWZhcmk7XG4gICAgfVxufTtcblxuZXhwb3J0cy5nZW5lcmF0ZSA9IGZ1bmN0aW9uIGdlbmVyYXRlKCkge1xuICAgIHZhciByYW5kb20gPSByYW5kb21Ccm93c2VyQW5kT1MoKTtcbiAgICByZXR1cm4gYnJvd3NlcltyYW5kb21bMF1dKHJhbmRvbVsxXSk7XG59O1xuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCIvKlxuICogJElkOiBiYXNlNjQuanMsdiAyLjE1IDIwMTQvMDQvMDUgMTI6NTg6NTcgZGFua29nYWkgRXhwIGRhbmtvZ2FpICRcbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlXG4gKlxuICogIFJlZmVyZW5jZXM6XG4gKiAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NFxuICovXG5cbihmdW5jdGlvbihnbG9iYWwpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gZXhpc3RpbmcgdmVyc2lvbiBmb3Igbm9Db25mbGljdCgpXG4gICAgdmFyIF9CYXNlNjQgPSBnbG9iYWwuQmFzZTY0O1xuICAgIHZhciB2ZXJzaW9uID0gXCIyLjEuOVwiO1xuICAgIC8vIGlmIG5vZGUuanMsIHdlIHVzZSBCdWZmZXJcbiAgICB2YXIgYnVmZmVyO1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgfVxuICAgIC8vIGNvbnN0YW50c1xuICAgIHZhciBiNjRjaGFyc1xuICAgICAgICA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcbiAgICB2YXIgYjY0dGFiID0gZnVuY3Rpb24oYmluKSB7XG4gICAgICAgIHZhciB0ID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYmluLmxlbmd0aDsgaSA8IGw7IGkrKykgdFtiaW4uY2hhckF0KGkpXSA9IGk7XG4gICAgICAgIHJldHVybiB0O1xuICAgIH0oYjY0Y2hhcnMpO1xuICAgIHZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICAgIC8vIGVuY29kZXIgc3R1ZmZcbiAgICB2YXIgY2JfdXRvYiA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgaWYgKGMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdmFyIGNjID0gYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgcmV0dXJuIGNjIDwgMHg4MCA/IGNcbiAgICAgICAgICAgICAgICA6IGNjIDwgMHg4MDAgPyAoZnJvbUNoYXJDb2RlKDB4YzAgfCAoY2MgPj4+IDYpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKGNjICYgMHgzZikpKVxuICAgICAgICAgICAgICAgIDogKGZyb21DaGFyQ29kZSgweGUwIHwgKChjYyA+Pj4gMTIpICYgMHgwZikpXG4gICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICgoY2MgPj4+ICA2KSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoIGNjICAgICAgICAgJiAweDNmKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNjID0gMHgxMDAwMFxuICAgICAgICAgICAgICAgICsgKGMuY2hhckNvZGVBdCgwKSAtIDB4RDgwMCkgKiAweDQwMFxuICAgICAgICAgICAgICAgICsgKGMuY2hhckNvZGVBdCgxKSAtIDB4REMwMCk7XG4gICAgICAgICAgICByZXR1cm4gKGZyb21DaGFyQ29kZSgweGYwIHwgKChjYyA+Pj4gMTgpICYgMHgwNykpXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoKGNjID4+PiAxMikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICgoY2MgPj4+ICA2KSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKCBjYyAgICAgICAgICYgMHgzZikpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIHJlX3V0b2IgPSAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGRl18W15cXHgwMC1cXHg3Rl0vZztcbiAgICB2YXIgdXRvYiA9IGZ1bmN0aW9uKHUpIHtcbiAgICAgICAgcmV0dXJuIHUucmVwbGFjZShyZV91dG9iLCBjYl91dG9iKTtcbiAgICB9O1xuICAgIHZhciBjYl9lbmNvZGUgPSBmdW5jdGlvbihjY2MpIHtcbiAgICAgICAgdmFyIHBhZGxlbiA9IFswLCAyLCAxXVtjY2MubGVuZ3RoICUgM10sXG4gICAgICAgIG9yZCA9IGNjYy5jaGFyQ29kZUF0KDApIDw8IDE2XG4gICAgICAgICAgICB8ICgoY2NjLmxlbmd0aCA+IDEgPyBjY2MuY2hhckNvZGVBdCgxKSA6IDApIDw8IDgpXG4gICAgICAgICAgICB8ICgoY2NjLmxlbmd0aCA+IDIgPyBjY2MuY2hhckNvZGVBdCgyKSA6IDApKSxcbiAgICAgICAgY2hhcnMgPSBbXG4gICAgICAgICAgICBiNjRjaGFycy5jaGFyQXQoIG9yZCA+Pj4gMTgpLFxuICAgICAgICAgICAgYjY0Y2hhcnMuY2hhckF0KChvcmQgPj4+IDEyKSAmIDYzKSxcbiAgICAgICAgICAgIHBhZGxlbiA+PSAyID8gJz0nIDogYjY0Y2hhcnMuY2hhckF0KChvcmQgPj4+IDYpICYgNjMpLFxuICAgICAgICAgICAgcGFkbGVuID49IDEgPyAnPScgOiBiNjRjaGFycy5jaGFyQXQob3JkICYgNjMpXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBjaGFycy5qb2luKCcnKTtcbiAgICB9O1xuICAgIHZhciBidG9hID0gZ2xvYmFsLmJ0b2EgPyBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwuYnRvYShiKTtcbiAgICB9IDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gYi5yZXBsYWNlKC9bXFxzXFxTXXsxLDN9L2csIGNiX2VuY29kZSk7XG4gICAgfTtcbiAgICB2YXIgX2VuY29kZSA9IGJ1ZmZlciA/IGZ1bmN0aW9uICh1KSB7XG4gICAgICAgIHJldHVybiAodS5jb25zdHJ1Y3RvciA9PT0gYnVmZmVyLmNvbnN0cnVjdG9yID8gdSA6IG5ldyBidWZmZXIodSkpXG4gICAgICAgIC50b1N0cmluZygnYmFzZTY0JylcbiAgICB9XG4gICAgOiBmdW5jdGlvbiAodSkgeyByZXR1cm4gYnRvYSh1dG9iKHUpKSB9XG4gICAgO1xuICAgIHZhciBlbmNvZGUgPSBmdW5jdGlvbih1LCB1cmlzYWZlKSB7XG4gICAgICAgIHJldHVybiAhdXJpc2FmZVxuICAgICAgICAgICAgPyBfZW5jb2RlKFN0cmluZyh1KSlcbiAgICAgICAgICAgIDogX2VuY29kZShTdHJpbmcodSkpLnJlcGxhY2UoL1srXFwvXS9nLCBmdW5jdGlvbihtMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtMCA9PSAnKycgPyAnLScgOiAnXyc7XG4gICAgICAgICAgICB9KS5yZXBsYWNlKC89L2csICcnKTtcbiAgICB9O1xuICAgIHZhciBlbmNvZGVVUkkgPSBmdW5jdGlvbih1KSB7IHJldHVybiBlbmNvZGUodSwgdHJ1ZSkgfTtcbiAgICAvLyBkZWNvZGVyIHN0dWZmXG4gICAgdmFyIHJlX2J0b3UgPSBuZXcgUmVnRXhwKFtcbiAgICAgICAgJ1tcXHhDMC1cXHhERl1bXFx4ODAtXFx4QkZdJyxcbiAgICAgICAgJ1tcXHhFMC1cXHhFRl1bXFx4ODAtXFx4QkZdezJ9JyxcbiAgICAgICAgJ1tcXHhGMC1cXHhGN11bXFx4ODAtXFx4QkZdezN9J1xuICAgIF0uam9pbignfCcpLCAnZycpO1xuICAgIHZhciBjYl9idG91ID0gZnVuY3Rpb24oY2NjYykge1xuICAgICAgICBzd2l0Y2goY2NjYy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdmFyIGNwID0gKCgweDA3ICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxOClcbiAgICAgICAgICAgICAgICB8ICAgICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgMTIpXG4gICAgICAgICAgICAgICAgfCAgICAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpIDw8ICA2KVxuICAgICAgICAgICAgICAgIHwgICAgICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDMpKSxcbiAgICAgICAgICAgIG9mZnNldCA9IGNwIC0gMHgxMDAwMDtcbiAgICAgICAgICAgIHJldHVybiAoZnJvbUNoYXJDb2RlKChvZmZzZXQgID4+PiAxMCkgKyAweEQ4MDApXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKChvZmZzZXQgJiAweDNGRikgKyAweERDMDApKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIGZyb21DaGFyQ29kZShcbiAgICAgICAgICAgICAgICAoKDB4MGYgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDEyKVxuICAgICAgICAgICAgICAgICAgICB8ICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgNilcbiAgICAgICAgICAgICAgICAgICAgfCAgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpXG4gICAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICBmcm9tQ2hhckNvZGUoXG4gICAgICAgICAgICAgICAgKCgweDFmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCA2KVxuICAgICAgICAgICAgICAgICAgICB8ICAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBidG91ID0gZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gYi5yZXBsYWNlKHJlX2J0b3UsIGNiX2J0b3UpO1xuICAgIH07XG4gICAgdmFyIGNiX2RlY29kZSA9IGZ1bmN0aW9uKGNjY2MpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNjY2MubGVuZ3RoLFxuICAgICAgICBwYWRsZW4gPSBsZW4gJSA0LFxuICAgICAgICBuID0gKGxlbiA+IDAgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMCldIDw8IDE4IDogMClcbiAgICAgICAgICAgIHwgKGxlbiA+IDEgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMSldIDw8IDEyIDogMClcbiAgICAgICAgICAgIHwgKGxlbiA+IDIgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMildIDw8ICA2IDogMClcbiAgICAgICAgICAgIHwgKGxlbiA+IDMgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMyldICAgICAgIDogMCksXG4gICAgICAgIGNoYXJzID0gW1xuICAgICAgICAgICAgZnJvbUNoYXJDb2RlKCBuID4+PiAxNiksXG4gICAgICAgICAgICBmcm9tQ2hhckNvZGUoKG4gPj4+ICA4KSAmIDB4ZmYpLFxuICAgICAgICAgICAgZnJvbUNoYXJDb2RlKCBuICAgICAgICAgJiAweGZmKVxuICAgICAgICBdO1xuICAgICAgICBjaGFycy5sZW5ndGggLT0gWzAsIDAsIDIsIDFdW3BhZGxlbl07XG4gICAgICAgIHJldHVybiBjaGFycy5qb2luKCcnKTtcbiAgICB9O1xuICAgIHZhciBhdG9iID0gZ2xvYmFsLmF0b2IgPyBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwuYXRvYihhKTtcbiAgICB9IDogZnVuY3Rpb24oYSl7XG4gICAgICAgIHJldHVybiBhLnJlcGxhY2UoL1tcXHNcXFNdezEsNH0vZywgY2JfZGVjb2RlKTtcbiAgICB9O1xuICAgIHZhciBfZGVjb2RlID0gYnVmZmVyID8gZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gKGEuY29uc3RydWN0b3IgPT09IGJ1ZmZlci5jb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgID8gYSA6IG5ldyBidWZmZXIoYSwgJ2Jhc2U2NCcpKS50b1N0cmluZygpO1xuICAgIH1cbiAgICA6IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGJ0b3UoYXRvYihhKSkgfTtcbiAgICB2YXIgZGVjb2RlID0gZnVuY3Rpb24oYSl7XG4gICAgICAgIHJldHVybiBfZGVjb2RlKFxuICAgICAgICAgICAgU3RyaW5nKGEpLnJlcGxhY2UoL1stX10vZywgZnVuY3Rpb24obTApIHsgcmV0dXJuIG0wID09ICctJyA/ICcrJyA6ICcvJyB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXkEtWmEtejAtOVxcK1xcL10vZywgJycpXG4gICAgICAgICk7XG4gICAgfTtcbiAgICB2YXIgbm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgQmFzZTY0ID0gZ2xvYmFsLkJhc2U2NDtcbiAgICAgICAgZ2xvYmFsLkJhc2U2NCA9IF9CYXNlNjQ7XG4gICAgICAgIHJldHVybiBCYXNlNjQ7XG4gICAgfTtcbiAgICAvLyBleHBvcnQgQmFzZTY0XG4gICAgZ2xvYmFsLkJhc2U2NCA9IHtcbiAgICAgICAgVkVSU0lPTjogdmVyc2lvbixcbiAgICAgICAgYXRvYjogYXRvYixcbiAgICAgICAgYnRvYTogYnRvYSxcbiAgICAgICAgZnJvbUJhc2U2NDogZGVjb2RlLFxuICAgICAgICB0b0Jhc2U2NDogZW5jb2RlLFxuICAgICAgICB1dG9iOiB1dG9iLFxuICAgICAgICBlbmNvZGU6IGVuY29kZSxcbiAgICAgICAgZW5jb2RlVVJJOiBlbmNvZGVVUkksXG4gICAgICAgIGJ0b3U6IGJ0b3UsXG4gICAgICAgIGRlY29kZTogZGVjb2RlLFxuICAgICAgICBub0NvbmZsaWN0OiBub0NvbmZsaWN0XG4gICAgfTtcbiAgICAvLyBpZiBFUzUgaXMgYXZhaWxhYmxlLCBtYWtlIEJhc2U2NC5leHRlbmRTdHJpbmcoKSBhdmFpbGFibGVcbiAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbm9FbnVtID0gZnVuY3Rpb24odil7XG4gICAgICAgICAgICByZXR1cm4ge3ZhbHVlOnYsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfTtcbiAgICAgICAgfTtcbiAgICAgICAgZ2xvYmFsLkJhc2U2NC5leHRlbmRTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgU3RyaW5nLnByb3RvdHlwZSwgJ2Zyb21CYXNlNjQnLCBub0VudW0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlKHRoaXMpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFN0cmluZy5wcm90b3R5cGUsICd0b0Jhc2U2NCcsIG5vRW51bShmdW5jdGlvbiAodXJpc2FmZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlKHRoaXMsIHVyaXNhZmUpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFN0cmluZy5wcm90b3R5cGUsICd0b0Jhc2U2NFVSSScsIG5vRW51bShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGUodGhpcywgdHJ1ZSlcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIHRoYXQncyBpdCFcbiAgICBpZiAoZ2xvYmFsWydNZXRlb3InXSkge1xuICAgICAgIEJhc2U2NCA9IGdsb2JhbC5CYXNlNjQ7IC8vIGZvciBub3JtYWwgZXhwb3J0IGluIE1ldGVvci5qc1xuICAgIH1cbn0pKHRoaXMpO1xuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGNvbnRhaW5lciA9IHJlcXVpcmUoJy4vdXRpbC9jb250YWluZXInKSxcclxuICAgIHRyYXZlcnNlID0gcmVxdWlyZSgnLi91dGlsL3RyYXZlcnNlJyksXHJcbiAgICBmb3JtYXRzID0gcmVxdWlyZSgnLi91dGlsL2Zvcm1hdHMnKSxcclxuICAgIHJhbmRvbSA9IHJlcXVpcmUoJy4vdXRpbC9yYW5kb20nKSxcclxuICAgIG1lcmdlID0gcmVxdWlyZSgnLi91dGlsL21lcmdlJyk7XHJcblxyXG52YXIgZGVyZWYgPSByZXF1aXJlKCdkZXJlZicpO1xyXG5cclxuZnVuY3Rpb24gaXNLZXkocHJvcCkge1xyXG4gIHJldHVybiBwcm9wID09PSAnZW51bScgfHwgcHJvcCA9PT0gJ3JlcXVpcmVkJyB8fCBwcm9wID09PSAnZGVmaW5pdGlvbnMnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZShzY2hlbWEsIHJlZnMsIGV4KSB7XHJcbiAgdmFyICQgPSBkZXJlZigpO1xyXG5cclxuICB0cnkge1xyXG4gICAgdmFyIG1heCA9IDEwMDtcclxuXHJcbiAgICByZXR1cm4gdHJhdmVyc2UoJChzY2hlbWEsIHJlZnMsIGV4KSwgW10sIGZ1bmN0aW9uIHJlZHVjZShzdWIpIHtcclxuICAgICAgaWYgKCFtYXgpIHtcclxuICAgICAgICBkZWxldGUgc3ViLiRyZWY7XHJcbiAgICAgICAgZGVsZXRlIHN1Yi5vbmVPZjtcclxuICAgICAgICBkZWxldGUgc3ViLmFueU9mO1xyXG4gICAgICAgIGRlbGV0ZSBzdWIuYWxsT2Y7XHJcbiAgICAgICAgcmV0dXJuIHN1YjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBzdWIuJHJlZiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB2YXIgaWQgPSBzdWIuJHJlZjtcclxuXHJcbiAgICAgICAgZGVsZXRlIHN1Yi4kcmVmO1xyXG5cclxuICAgICAgICBtYXgtLTtcclxuXHJcbiAgICAgICAgbWVyZ2Uoc3ViLCAkLnV0aWwuZmluZEJ5UmVmKGlkLCAkLnJlZnMpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ViLmFsbE9mKSkge1xyXG4gICAgICAgIHZhciBzY2hlbWFzID0gc3ViLmFsbE9mO1xyXG5cclxuICAgICAgICBkZWxldGUgc3ViLmFsbE9mO1xyXG5cclxuICAgICAgICAvLyB0aGlzIGlzIHRoZSBvbmx5IGNhc2Ugd2hlcmUgYWxsIHN1Yi1zY2hlbWFzXHJcbiAgICAgICAgLy8gbXVzdCBiZSByZXNvbHZlZCBiZWZvcmUgYW55IG1lcmdlXHJcbiAgICAgICAgc2NoZW1hcy5mb3JFYWNoKGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICAgIG1lcmdlKHN1YiwgcmVkdWNlKHMpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ViLm9uZU9mIHx8IHN1Yi5hbnlPZikpIHtcclxuICAgICAgICB2YXIgbWl4ID0gc3ViLm9uZU9mIHx8IHN1Yi5hbnlPZjtcclxuXHJcbiAgICAgICAgZGVsZXRlIHN1Yi5hbnlPZjtcclxuICAgICAgICBkZWxldGUgc3ViLm9uZU9mO1xyXG5cclxuICAgICAgICBtZXJnZShzdWIsIHJhbmRvbS5waWNrKG1peCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKHZhciBwcm9wIGluIHN1Yikge1xyXG4gICAgICAgIGlmICgoQXJyYXkuaXNBcnJheShzdWJbcHJvcF0pIHx8IHR5cGVvZiBzdWJbcHJvcF0gPT09ICdvYmplY3QnKSAmJiAhaXNLZXkocHJvcCkpIHtcclxuICAgICAgICAgIHN1Yltwcm9wXSA9IHJlZHVjZShzdWJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHN1YjtcclxuICAgIH0pO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIGlmIChlLnBhdGgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGUubWVzc2FnZSArICcgaW4gJyArICcvJyArIGUucGF0aC5qb2luKCcvJykpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmdlbmVyYXRlLmZvcm1hdHMgPSBmb3JtYXRzO1xyXG5nZW5lcmF0ZS5leHRlbmQgPSBjb250YWluZXIuc2V0O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHJhbmRvbSA9IHJlcXVpcmUoJy4uL3V0aWwvcmFuZG9tJyksXHJcbiAgICB0cmF2ZXJzZSA9IHJlcXVpcmUoJy4uL3V0aWwvdHJhdmVyc2UnKSxcclxuICAgIGhhc1Byb3BzID0gcmVxdWlyZSgnLi4vdXRpbC9oYXMtcHJvcHMnKTtcclxuXHJcbnZhciBQYXJzZUVycm9yID0gcmVxdWlyZSgnLi4vdXRpbC9lcnJvcicpO1xyXG5cclxuZnVuY3Rpb24gdW5pcXVlKHBhdGgsIGl0ZW1zLCB2YWx1ZSwgc2FtcGxlLCByZXNvbHZlKSB7XHJcbiAgdmFyIHRtcCA9IFtdLFxyXG4gICAgICBzZWVuID0gW107XHJcblxyXG4gIGZ1bmN0aW9uIHdhbGsob2JqKSB7XHJcbiAgICB2YXIganNvbiA9IEpTT04uc3RyaW5naWZ5KG9iaik7XHJcblxyXG4gICAgaWYgKHNlZW4uaW5kZXhPZihqc29uKSA9PT0gLTEpIHtcclxuICAgICAgc2Vlbi5wdXNoKGpzb24pO1xyXG4gICAgICB0bXAucHVzaChvYmopO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXRlbXMuZm9yRWFjaCh3YWxrKTtcclxuXHJcbiAgLy8gVE9ETzogZmluZCBhIGJldHRlciBzb2x1dGlvbj9cclxuICB2YXIgbGltaXQgPSAxMDA7XHJcblxyXG4gIHdoaWxlICh0bXAubGVuZ3RoICE9PSBpdGVtcy5sZW5ndGgpIHtcclxuICAgIHdhbGsodHJhdmVyc2UodmFsdWUuaXRlbXMgfHwgc2FtcGxlLCBwYXRoLCByZXNvbHZlKSk7XHJcblxyXG4gICAgaWYgKCFsaW1pdC0tKSB7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRtcDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWx1ZSwgcGF0aCwgcmVzb2x2ZSkge1xyXG4gIHZhciBpdGVtcyA9IFtdO1xyXG5cclxuICBpZiAoISh2YWx1ZS5pdGVtcyB8fCB2YWx1ZS5hZGRpdGlvbmFsSXRlbXMpKSB7XHJcbiAgICBpZiAoaGFzUHJvcHModmFsdWUsICdtaW5JdGVtcycsICdtYXhJdGVtcycsICd1bmlxdWVJdGVtcycpKSB7XHJcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKCdtaXNzaW5nIGl0ZW1zIGZvciAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBwYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfVxyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5pdGVtcykpIHtcclxuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KGl0ZW1zLCB2YWx1ZS5pdGVtcy5tYXAoZnVuY3Rpb24oaXRlbSwga2V5KSB7XHJcbiAgICAgIHJldHVybiB0cmF2ZXJzZShpdGVtLCBwYXRoLmNvbmNhdChbJ2l0ZW1zJywga2V5XSksIHJlc29sdmUpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgdmFyIGxlbmd0aCA9IHJhbmRvbSh2YWx1ZS5taW5JdGVtcywgdmFsdWUubWF4SXRlbXMsIDEsIDUpLFxyXG4gICAgICBzYW1wbGUgPSB0eXBlb2YgdmFsdWUuYWRkaXRpb25hbEl0ZW1zID09PSAnb2JqZWN0JyA/IHZhbHVlLmFkZGl0aW9uYWxJdGVtcyA6IHt9O1xyXG5cclxuICBmb3IgKHZhciBjdXJyZW50ID0gaXRlbXMubGVuZ3RoOyBjdXJyZW50IDwgbGVuZ3RoOyBjdXJyZW50ICs9IDEpIHtcclxuICAgIGl0ZW1zLnB1c2godHJhdmVyc2UodmFsdWUuaXRlbXMgfHwgc2FtcGxlLCBwYXRoLmNvbmNhdChbJ2l0ZW1zJywgY3VycmVudF0pLCByZXNvbHZlKSk7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUudW5pcXVlSXRlbXMpIHtcclxuICAgIHJldHVybiB1bmlxdWUocGF0aC5jb25jYXQoWydpdGVtcyddKSwgaXRlbXMsIHZhbHVlLCBzYW1wbGUsIHJlc29sdmUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiBNYXRoLnJhbmRvbSgpID4gMC41O1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgbnVtYmVyID0gcmVxdWlyZSgnLi9udW1iZXInKTtcclxuXHJcbi8vIFRoZSBgaW50ZWdlcmAgdHlwZSBpcyBqdXN0IGEgd3JhcHBlciBmb3IgdGhlIGBudW1iZXJgIHR5cGUuIFRoZSBgbnVtYmVyYCB0eXBlXHJcbi8vIHJldHVybnMgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYW5kIGBpbnRlZ2VyYCB0eXBlIHRydW5jYXRlcyB0aGUgZnJhY3Rpb25cclxuLy8gcGFydCwgbGVhdmluZyB0aGUgcmVzdWx0IGFzIGFuIGludGVnZXIuXHJcbi8vXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICB2YWx1ZS5oYXNQcmVjaXNpb24gPSBmYWxzZTtcclxuICB2YXIgZ2VuZXJhdGVkID0gbnVtYmVyKHZhbHVlKTtcclxuICAvLyB3aGV0aGVyIHRoZSBnZW5lcmF0ZWQgbnVtYmVyIGlzIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLCBuZWVkIHRvIHVzZSBlaXRoZXJcclxuICAvLyBmbG9vciAocG9zaXRpdmUpIG9yIGNlaWwgKG5lZ2F0aXZlKSBmdW5jdGlvbiB0byBnZXQgcmlkIG9mIHRoZSBmcmFjdGlvblxyXG4gIHJldHVybiBnZW5lcmF0ZWQgPiAwID8gTWF0aC5mbG9vcihnZW5lcmF0ZWQpIDogTWF0aC5jZWlsKGdlbmVyYXRlZCk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIG51bGw7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBNSU5fSU5URUdFUiA9IC0xMDAwMDAwMDAsXHJcbiAgICBNQVhfSU5URUdFUiA9IDEwMDAwMDAwMDtcclxuXHJcbnZhciBzdHJpbmcgPSByZXF1aXJlKCcuL3N0cmluZycpLFxyXG4gICAgcmFuZG9tID0gcmVxdWlyZSgnLi4vdXRpbC9yYW5kb20nKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICBpZiAodmFsdWUuZmFrZXIgfHwgdmFsdWUuY2hhbmNlKSB7XHJcbiAgICByZXR1cm4gc3RyaW5nKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHZhciBtaW4gPSB0eXBlb2YgdmFsdWUubWluaW11bSA9PT0gJ3VuZGVmaW5lZCcgPyBNSU5fSU5URUdFUiA6IHZhbHVlLm1pbmltdW0sXHJcbiAgICAgIG1heCA9IHR5cGVvZiB2YWx1ZS5tYXhpbXVtID09PSAndW5kZWZpbmVkJyA/IE1BWF9JTlRFR0VSIDogdmFsdWUubWF4aW11bTtcclxuXHJcbiAgaWYgKHZhbHVlLmV4Y2x1c2l2ZU1pbmltdW0gJiYgdmFsdWUubWluaW11bSkge1xyXG4gICAgbWluICs9IDE7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUuZXhjbHVzaXZlTWF4aW11bSAmJiB2YWx1ZS5tYXhpbXVtKSB7XHJcbiAgICBtYXggLT0gMTtcclxuICB9XHJcblxyXG4gIGlmICh2YWx1ZS5tdWx0aXBsZU9mKSB7XHJcbiAgICB2YXIgYmFzZSA9IHJhbmRvbShNYXRoLmZsb29yKG1pbiAvIHZhbHVlLm11bHRpcGxlT2YpLCBNYXRoLmZsb29yKG1heCAvIHZhbHVlLm11bHRpcGxlT2YpKSAqIHZhbHVlLm11bHRpcGxlT2Y7XHJcblxyXG4gICAgd2hpbGUgKGJhc2UgPCBtaW4pIHtcclxuICAgICAgYmFzZSArPSB2YWx1ZS5tdWx0aXBsZU9mO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBiYXNlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHZhbHVlLmhhc1ByZWNpc2lvbikge1xyXG4gICAgcmV0dXJuIHJhbmRvbShmYWxzZSwgbWluLCBtYXgpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJhbmRvbShNYXRoLnJhbmRvbSgpID4gMC41LCBtaW4sIG1heCk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb250YWluZXIgPSByZXF1aXJlKCcuLi91dGlsL2NvbnRhaW5lcicpLFxyXG4gICAgcmFuZG9tID0gcmVxdWlyZSgnLi4vdXRpbC9yYW5kb20nKSxcclxuICAgIHRyYXZlcnNlID0gcmVxdWlyZSgnLi4vdXRpbC90cmF2ZXJzZScpLFxyXG4gICAgaGFzUHJvcHMgPSByZXF1aXJlKCcuLi91dGlsL2hhcy1wcm9wcycpO1xyXG5cclxudmFyIGZha2VyID0gY29udGFpbmVyLmdldCgnZmFrZXInKSxcclxuICAgIFJhbmRFeHAgPSBjb250YWluZXIuZ2V0KCdyYW5kZXhwJyksXHJcbiAgICByYW5kZXhwID0gUmFuZEV4cC5yYW5kZXhwO1xyXG5cclxudmFyIFBhcnNlRXJyb3IgPSByZXF1aXJlKCcuLi91dGlsL2Vycm9yJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbHVlLCBwYXRoLCByZXNvbHZlKSB7XHJcbiAgdmFyIHByb3BzID0ge307XHJcblxyXG4gIGlmICghKHZhbHVlLnByb3BlcnRpZXMgfHwgdmFsdWUucGF0dGVyblByb3BlcnRpZXMgfHwgdmFsdWUuYWRkaXRpb25hbFByb3BlcnRpZXMpKSB7XHJcbiAgICBpZiAoaGFzUHJvcHModmFsdWUsICdtaW5Qcm9wZXJ0aWVzJywgJ21heFByb3BlcnRpZXMnLCAnZGVwZW5kZW5jaWVzJywgJ3JlcXVpcmVkJykpIHtcclxuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoJ21pc3NpbmcgcHJvcGVydGllcyBmb3IgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgcGF0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByb3BzO1xyXG4gIH1cclxuXHJcbiAgdmFyIHJlcVByb3BzID0gdmFsdWUucmVxdWlyZWQgfHwgW10sXHJcbiAgICAgIGFsbFByb3BzID0gdmFsdWUucHJvcGVydGllcyA/IE9iamVjdC5rZXlzKHZhbHVlLnByb3BlcnRpZXMpIDogW107XHJcblxyXG4gIHJlcVByb3BzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICBpZiAodmFsdWUucHJvcGVydGllcyAmJiB2YWx1ZS5wcm9wZXJ0aWVzW2tleV0pIHtcclxuICAgICAgcHJvcHNba2V5XSA9IHZhbHVlLnByb3BlcnRpZXNba2V5XTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdmFyIG9wdFByb3BzID0gYWxsUHJvcHMuZmlsdGVyKGZ1bmN0aW9uKHByb3ApIHtcclxuICAgIHJldHVybiByZXFQcm9wcy5pbmRleE9mKHByb3ApID09PSAtMTtcclxuICB9KTtcclxuXHJcbiAgaWYgKHZhbHVlLnBhdHRlcm5Qcm9wZXJ0aWVzKSB7XHJcbiAgICBvcHRQcm9wcyA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkob3B0UHJvcHMsIE9iamVjdC5rZXlzKHZhbHVlLnBhdHRlcm5Qcm9wZXJ0aWVzKSk7XHJcbiAgfVxyXG5cclxuICB2YXIgbGVuZ3RoID0gcmFuZG9tKHZhbHVlLm1pblByb3BlcnRpZXMsIHZhbHVlLm1heFByb3BlcnRpZXMsIDAsIG9wdFByb3BzLmxlbmd0aCk7XHJcblxyXG4gIHJhbmRvbS5zaHVmZmxlKG9wdFByb3BzKS5zbGljZSgwLCBsZW5ndGgpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICBpZiAodmFsdWUucHJvcGVydGllcyAmJiB2YWx1ZS5wcm9wZXJ0aWVzW2tleV0pIHtcclxuICAgICAgcHJvcHNba2V5XSA9IHZhbHVlLnByb3BlcnRpZXNba2V5XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHByb3BzW3JhbmRleHAoa2V5KV0gPSB2YWx1ZS5wYXR0ZXJuUHJvcGVydGllc1trZXldO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICB2YXIgY3VycmVudCA9IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGgsXHJcbiAgICAgIHNhbXBsZSA9IHR5cGVvZiB2YWx1ZS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gJ29iamVjdCcgPyB2YWx1ZS5hZGRpdGlvbmFsUHJvcGVydGllcyA6IHt9O1xyXG5cclxuICBpZiAoY3VycmVudCA8IGxlbmd0aCkge1xyXG4gICAgZmFrZXIubG9yZW0ud29yZHMobGVuZ3RoIC0gY3VycmVudCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcclxuICAgICAgcHJvcHNba2V5ICsgcmFuZGV4cCgnXFxcXHd7MSwxMH0nKV0gPSBzYW1wbGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cmF2ZXJzZShwcm9wcywgcGF0aC5jb25jYXQoWydwcm9wZXJ0aWVzJ10pLCByZXNvbHZlKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGNvbnRhaW5lciA9IHJlcXVpcmUoJy4uL3V0aWwvY29udGFpbmVyJyk7XHJcblxyXG52YXIgZmFrZXIgPSBjb250YWluZXIuZ2V0KCdmYWtlcicpLFxyXG4gICAgY2hhbmNlID0gY29udGFpbmVyLmdldCgnY2hhbmNlJyksXHJcbiAgICBSYW5kRXhwID0gY29udGFpbmVyLmdldCgncmFuZGV4cCcpLFxyXG4gICAgcmFuZGV4cCA9IFJhbmRFeHAucmFuZGV4cDtcclxuXHJcbnZhciByYW5kb20gPSByZXF1aXJlKCcuLi91dGlsL3JhbmRvbScpLFxyXG4gICAgZm9ybWF0cyA9IHJlcXVpcmUoJy4uL3V0aWwvZm9ybWF0cycpO1xyXG5cclxudmFyIHJlZ2V4cHMgPSB7XHJcbiAgZW1haWw6ICdbYS16QS1aXFxcXGRdW2EtekEtWlxcXFxkLV17MSwxM31bYS16QS1aXFxcXGRdQHtob3N0bmFtZX0nLFxyXG4gIGhvc3RuYW1lOiAnW2EtekEtWl17MSwzM31cXFxcLlthLXpdezIsNH0nLFxyXG4gIGlwdjY6ICdbYWJjZGVmXFxcXGRdezR9KDpbYWJjZGVmXFxcXGRdezR9KXs3fScsXHJcbiAgdXJpOiAnW2EtekEtWl1bYS16QS1aMC05Ky0uXSonXHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXQob2JqLCBrZXkpIHtcclxuICB2YXIgcGFydHMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgd2hpbGUgKHBhcnRzLmxlbmd0aCkge1xyXG4gICAgdmFyIHByb3AgPSBwYXJ0cy5zaGlmdCgpO1xyXG5cclxuICAgIGlmICghb2JqW3Byb3BdKSB7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIG9iaiA9IG9ialtwcm9wXTtcclxuICB9XHJcblxyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdlbmVyYXRlKHZhbHVlKSB7XHJcbiAgaWYgKHZhbHVlLnVzZSkge1xyXG4gICAgdmFyIGFyZ3MgPSBbXSxcclxuICAgICAgICBwYXRoID0gdmFsdWUua2V5O1xyXG5cclxuICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcGF0aCA9IE9iamVjdC5rZXlzKHBhdGgpWzBdO1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUua2V5W3BhdGhdKSkge1xyXG4gICAgICAgIGFyZ3MgPSB2YWx1ZS5rZXlbcGF0aF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXJncy5wdXNoKHZhbHVlLmtleVtwYXRoXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgZ2VuID0gZ2V0KHZhbHVlLmdlbiwgcGF0aCk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBnZW4gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duICcgKyB2YWx1ZS51c2UgKyAnLWdlbmVyYXRvciBmb3IgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlLmtleSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBnZW4uYXBwbHkodmFsdWUuZ2VuLCBhcmdzKTtcclxuICB9XHJcblxyXG4gIHN3aXRjaCAodmFsdWUuZm9ybWF0KSB7XHJcbiAgICBjYXNlICdkYXRlLXRpbWUnOlxyXG4gICAgICByZXR1cm4gbmV3IERhdGUocmFuZG9tKDAsIDEwMDAwMDAwMDAwMDAwMCkpLnRvSVNPU3RyaW5nKCk7XHJcblxyXG4gICAgY2FzZSAnZW1haWwnOlxyXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxyXG4gICAgY2FzZSAnaXB2Nic6XHJcbiAgICBjYXNlICd1cmknOlxyXG4gICAgICByZXR1cm4gcmFuZGV4cChyZWdleHBzW3ZhbHVlLmZvcm1hdF0pLnJlcGxhY2UoL1xceyhcXHcrKVxcfS8sIGZ1bmN0aW9uKG1hdGNoZXMsIGtleSkge1xyXG4gICAgICAgIHJldHVybiByYW5kZXhwKHJlZ2V4cHNba2V5XSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGNhc2UgJ2lwdjQnOlxyXG4gICAgICByZXR1cm4gWzAsIDAsIDAsIDBdLm1hcChmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcmFuZG9tKDAsIDI1NSk7XHJcbiAgICAgIH0pLmpvaW4oJy4nKTtcclxuXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICB2YXIgY2FsbGJhY2sgPSBmb3JtYXRzKHZhbHVlLmZvcm1hdCk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGdlbmVyYXRvciBmb3IgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlLmZvcm1hdCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZ2VuZXJhdG9ycyA9IHtcclxuICAgICAgICBmYWtlcjogZmFrZXIsXHJcbiAgICAgICAgY2hhbmNlOiBjaGFuY2UsXHJcbiAgICAgICAgcmFuZGV4cDogcmFuZGV4cFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGdlbmVyYXRvcnMsIHZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICBpZiAodmFsdWUuZmFrZXIgfHwgdmFsdWUuY2hhbmNlKSB7XHJcbiAgICByZXR1cm4gZ2VuZXJhdGUoe1xyXG4gICAgICB1c2U6IHZhbHVlLmZha2VyID8gJ2Zha2VyJyA6ICdjaGFuY2UnLFxyXG4gICAgICBnZW46IHZhbHVlLmZha2VyID8gZmFrZXIgOiBjaGFuY2UsXHJcbiAgICAgIGtleTogdmFsdWUuZmFrZXIgfHwgdmFsdWUuY2hhbmNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmICh2YWx1ZS5mb3JtYXQpIHtcclxuICAgIHJldHVybiBnZW5lcmF0ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUucGF0dGVybikge1xyXG4gICAgcmV0dXJuIHJhbmRleHAodmFsdWUucGF0dGVybik7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUubWluTGVuZ3RoIHx8IHZhbHVlLm1heExlbmd0aCkge1xyXG4gICAgdmFyIG1pbiA9IE1hdGgubWF4KDAsIHZhbHVlLm1pbkxlbmd0aCB8fCAwKSxcclxuICAgICAgICBtYXggPSByYW5kb20obWluLCB2YWx1ZS5tYXhMZW5ndGgpO1xyXG5cclxuICAgIHJldHVybiByYW5kZXhwKCcueycgKyBtaW4gKyAnLCcgKyBtYXggKyAnfScpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZha2VyLmxvcmVtLndvcmRzKHJhbmRvbSgxLCA1KSkuam9pbignICcpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vLyBzdGF0aWMgcmVxdWlyZXMgLSBoYW5kbGUgYm90aCBpbml0aWFsIGRlcGVuZGVuY3kgbG9hZCAoZGVwcyB3aWxsIGJlIGF2YWlsYWJsZVxyXG4vLyBhbW9uZyBvdGhlciBtb2R1bGVzKSBhcyB3ZWxsIGFzIHRoZXkgd2lsbCBiZSBpbmNsdWRlZCBieSBicm93c2VyaWZ5IEFTVFxyXG52YXIgQ2hhbmNlID0gcmVxdWlyZSgnY2hhbmNlJyk7XHJcblxyXG52YXIgY29udGFpbmVyID0ge1xyXG4gIGZha2VyOiByZXF1aXJlKCdmYWtlcicpLFxyXG4gIGNoYW5jZTogbmV3IENoYW5jZSgpLFxyXG4gIHJhbmRleHA6IHJlcXVpcmUoJ3JhbmRleHAnKVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgc2V0OiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xyXG4gICAgaWYgKHR5cGVvZiBjb250YWluZXJbbmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignXCInICsgbmFtZSArICdcIiBkZXBlbmRlbmN5IGRvZXNuXFwndCBleGlzdC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb250YWluZXJbbmFtZV0gPSBjYWxsYmFjayhjb250YWluZXJbbmFtZV0pO1xyXG4gIH0sXHJcbiAgZ2V0OiBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gY29udGFpbmVyW25hbWVdO1xyXG4gIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZnVuY3Rpb24gUGFyc2VFcnJvcihtZXNzYWdlLCBwYXRoKSB7XHJcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICB0aGlzLnBhdGggPSBwYXRoO1xyXG4gIHRoaXMubmFtZSA9ICdQYXJzZUVycm9yJztcclxufVxyXG5cclxuUGFyc2VFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlRXJyb3I7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciByZWdpc3RyeSA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xyXG4gIGlmIChjYWxsYmFjaykge1xyXG4gICAgcmVnaXN0cnlbbmFtZV0gPSBjYWxsYmFjaztcclxuICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xyXG4gICAgZm9yICh2YXIgbWV0aG9kIGluIG5hbWUpIHtcclxuICAgICAgcmVnaXN0cnlbbWV0aG9kXSA9IG5hbWVbbWV0aG9kXTtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKG5hbWUpIHtcclxuICAgIHJldHVybiByZWdpc3RyeVtuYW1lXTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZWdpc3RyeTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmopIHtcclxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKS5maWx0ZXIoZnVuY3Rpb24oa2V5KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIG9ialtrZXldICE9PSAndW5kZWZpbmVkJztcclxuICB9KS5sZW5ndGggPiAwO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaW5mZXJyZWRQcm9wZXJ0aWVzID0ge1xyXG4gIGFycmF5OiBbXHJcbiAgICAnYWRkaXRpb25hbEl0ZW1zJyxcclxuICAgICdpdGVtcycsXHJcbiAgICAnbWF4SXRlbXMnLFxyXG4gICAgJ21pbkl0ZW1zJyxcclxuICAgICd1bmlxdWVJdGVtcydcclxuICBdLFxyXG4gIGludGVnZXI6IFtcclxuICAgICdleGNsdXNpdmVNYXhpbXVtJyxcclxuICAgICdleGNsdXNpdmVNaW5pbXVtJyxcclxuICAgICdtYXhpbXVtJyxcclxuICAgICdtaW5pbXVtJyxcclxuICAgICdtdWx0aXBsZU9mJ1xyXG4gIF0sXHJcbiAgb2JqZWN0OiBbXHJcbiAgICAnYWRkaXRpb25hbFByb3BlcnRpZXMnLFxyXG4gICAgJ2RlcGVuZGVuY2llcycsXHJcbiAgICAnbWF4UHJvcGVydGllcycsXHJcbiAgICAnbWluUHJvcGVydGllcycsXHJcbiAgICAncGF0dGVyblByb3BlcnRpZXMnLFxyXG4gICAgJ3Byb3BlcnRpZXMnLFxyXG4gICAgJ3JlcXVpcmVkJ1xyXG4gIF0sXHJcbiAgc3RyaW5nOiBbXHJcbiAgICAnbWF4TGVuZ3RoJyxcclxuICAgICdtZW5sZW5ndGgnLFxyXG4gICAgJ3BhdHRlcm4nXHJcbiAgXVxyXG59O1xyXG5cclxudmFyIHN1YnNjaGVtYVByb3BlcnRpZXMgPSBbXHJcbiAgJ2FkZGl0aW9uYWxJdGVtcycsICdpdGVtcycsICdhZGRpdGlvbmFsUHJvcGVydGllcycsICdkZXBlbmRlbmNpZXMnLCAncGF0dGVyblByb3BlcnRpZXMnLCAncHJvcGVydGllcydcclxuXTtcclxuXHJcbmluZmVycmVkUHJvcGVydGllcy5udW1iZXIgPSBpbmZlcnJlZFByb3BlcnRpZXMuaW50ZWdlcjtcclxuXHJcbmZ1bmN0aW9uIG1heUhhdmVUeXBlKG9iaiwgcGF0aCwgcHJvcHMpIHtcclxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgLy8gRG8gbm90IGF0dGVtcHQgdG8gaW5mZXIgcHJvcGVydGllcyBuYW1lZCBhcyBzdWJzY2hlbWEgY29udGFpbmVycy4gIFRoZSByZWFzb24gZm9yIHRoaXMgaXNcclxuICAgIC8vIHRoYXQgYW55IHByb3BlcnR5IG5hbWUgd2l0aGluIHRob3NlIGNvbnRhaW5lcnMgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGUgcHJvcGVydGllcyB1c2VkIGZvciBpbmZlcnJpbmcgbWlzc2luZyB0eXBlXHJcbiAgICAvLyB2YWx1ZXMgY2F1c2VzIHRoZSBjb250YWluZXIgaXRzZWxmIHRvIGdldCBwcm9jZXNzZWQgd2hpY2ggbGVhZHMgdG8gaW52YWxpZCBvdXRwdXQuICAoSXNzdWUgNjIpXHJcbiAgICBpZiAocHJvcHMuaW5kZXhPZihwcm9wKSA+IC0xICYmIHN1YnNjaGVtYVByb3BlcnRpZXMuaW5kZXhPZihwYXRoW3BhdGgubGVuZ3RoIC0gMV0pID09PSAtMSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9KS5sZW5ndGggPiAwO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgcGF0aCkge1xyXG4gIGZvciAodmFyIHR5cGUgaW4gaW5mZXJyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICBpZiAobWF5SGF2ZVR5cGUob2JqLCBwYXRoLCBpbmZlcnJlZFByb3BlcnRpZXNbdHlwZV0pKSB7XHJcbiAgICAgIHJldHVybiB0eXBlO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIG1lcmdlO1xyXG5cclxuZnVuY3Rpb24gY2xvbmUoYXJyKSB7XHJcbiAgdmFyIG91dCA9IFtdO1xyXG5cclxuICBhcnIuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpbmRleCkge1xyXG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsKSB7XHJcbiAgICAgIG91dFtpbmRleF0gPSBBcnJheS5pc0FycmF5KGl0ZW0pID8gY2xvbmUoaXRlbSkgOiBtZXJnZSh7fSwgaXRlbSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRbaW5kZXhdID0gaXRlbTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIG91dDtcclxufVxyXG5cclxubWVyZ2UgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICBmb3IgKHZhciBrZXkgaW4gYikge1xyXG4gICAgaWYgKHR5cGVvZiBiW2tleV0gIT09ICdvYmplY3QnIHx8IGJba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICBhW2tleV0gPSBiW2tleV07XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltrZXldKSkge1xyXG4gICAgICBhW2tleV0gPSAoYVtrZXldIHx8IFtdKS5jb25jYXQoY2xvbmUoYltrZXldKSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhW2tleV0gIT09ICdvYmplY3QnIHx8IGFba2V5XSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KGFba2V5XSkpIHtcclxuICAgICAgYVtrZXldID0gbWVyZ2Uoe30sIGJba2V5XSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhW2tleV0gPSBtZXJnZShhW2tleV0sIGJba2V5XSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgYXJyYXk6IHJlcXVpcmUoJy4uL3R5cGVzL2FycmF5JyksXHJcbiAgYm9vbGVhbjogcmVxdWlyZSgnLi4vdHlwZXMvYm9vbGVhbicpLFxyXG4gIGludGVnZXI6IHJlcXVpcmUoJy4uL3R5cGVzL2ludGVnZXInKSxcclxuICBudW1iZXI6IHJlcXVpcmUoJy4uL3R5cGVzL251bWJlcicpLFxyXG4gIG51bGw6IHJlcXVpcmUoJy4uL3R5cGVzL251bGwnKSxcclxuICBvYmplY3Q6IHJlcXVpcmUoJy4uL3R5cGVzL29iamVjdCcpLFxyXG4gIHN0cmluZzogcmVxdWlyZSgnLi4vdHlwZXMvc3RyaW5nJylcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGNvbnRhaW5lciA9IHJlcXVpcmUoJy4vY29udGFpbmVyJyk7XHJcblxyXG52YXIgZmFrZXIgPSBjb250YWluZXIuZ2V0KCdmYWtlcicpO1xyXG5cclxudmFyIHJhbmRvbSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obWluLCBtYXgsIGRlZk1pbiwgZGVmTWF4KSB7XHJcbiAgdmFyIGlzSW50ZWdlciA9IHRydWU7XHJcblxyXG4gIGlmICh0eXBlb2YgbWluID09PSAnYm9vbGVhbicpIHtcclxuICAgIC8vIG5vbi1pbnRlZ2VyIHZhbHVlc1xyXG4gICAgaXNJbnRlZ2VyID0gbWluO1xyXG4gICAgbWluID0gYXJndW1lbnRzWzFdO1xyXG4gICAgbWF4ID0gYXJndW1lbnRzWzJdO1xyXG4gICAgZGVmTWluID0gYXJndW1lbnRzWzNdO1xyXG4gICAgZGVmTWF4ID0gYXJndW1lbnRzWzRdO1xyXG4gIH1cclxuXHJcbiAgZGVmTWluID0gdHlwZW9mIGRlZk1pbiA9PT0gJ3VuZGVmaW5lZCcgPyByYW5kb20uTUlOX05VTUJFUiA6IGRlZk1pbjtcclxuICBkZWZNYXggPSB0eXBlb2YgZGVmTWF4ID09PSAndW5kZWZpbmVkJyA/IHJhbmRvbS5NQVhfTlVNQkVSIDogZGVmTWF4O1xyXG5cclxuICBtaW4gPSB0eXBlb2YgbWluID09PSAndW5kZWZpbmVkJyA/IGRlZk1pbiA6IG1pbjtcclxuICBtYXggPSB0eXBlb2YgbWF4ID09PSAndW5kZWZpbmVkJyA/IGRlZk1heCA6IG1heDtcclxuXHJcbiAgaWYgKG1heCA8IG1pbikge1xyXG4gICAgbWF4ICs9IG1pbjtcclxuICB9XHJcblxyXG4gIHJldHVybiBmYWtlci5yYW5kb20ubnVtYmVyKHtcclxuICAgIG1pbjogbWluLFxyXG4gICAgbWF4OiBtYXgsXHJcbiAgICBwcmVjaXNpb246IGlzSW50ZWdlciA/IDEgOiBNYXRoLnJhbmRvbSgpXHJcbiAgfSk7XHJcbn07XHJcblxyXG5yYW5kb20uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xyXG4gIHZhciBjb3B5ID0gb2JqLnNsaWNlKCksXHJcbiAgICAgIGxlbmd0aCA9IG9iai5sZW5ndGg7XHJcblxyXG4gIGZvciAoOyBsZW5ndGggPiAwOykge1xyXG4gICAgdmFyIGtleSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxlbmd0aCksXHJcbiAgICAgICAgdG1wID0gY29weVstLWxlbmd0aF07XHJcblxyXG4gICAgY29weVtsZW5ndGhdID0gY29weVtrZXldO1xyXG4gICAgY29weVtrZXldID0gdG1wO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvcHk7XHJcbn07XHJcblxyXG5yYW5kb20ucGljayA9IGZ1bmN0aW9uKG9iaikge1xyXG4gIHJldHVybiBvYmpbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogb2JqLmxlbmd0aCldO1xyXG59O1xyXG5cclxucmFuZG9tLk1JTl9OVU1CRVIgPSAtMTAwO1xyXG5yYW5kb20uTUFYX05VTUJFUiA9IDEwMDtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHJhbmRvbSA9IHJlcXVpcmUoJy4vcmFuZG9tJyk7XHJcblxyXG52YXIgUGFyc2VFcnJvciA9IHJlcXVpcmUoJy4vZXJyb3InKTtcclxuXHJcbnZhciBpbmZlcnJlZFR5cGUgPSByZXF1aXJlKCcuL2luZmVycmVkJyk7XHJcblxyXG52YXIgcHJpbWl0aXZlcyA9IG51bGw7XHJcblxyXG5mdW5jdGlvbiB0cmF2ZXJzZShvYmosIHBhdGgsIHJlc29sdmUpIHtcclxuICByZXNvbHZlKG9iaik7XHJcblxyXG4gIHZhciBjb3B5ID0ge307XHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgIGNvcHkgPSBbXTtcclxuICB9XHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KG9iai5lbnVtKSkge1xyXG4gICAgcmV0dXJuIHJhbmRvbS5waWNrKG9iai5lbnVtKTtcclxuICB9XHJcblxyXG4gIHZhciB0eXBlID0gb2JqLnR5cGU7XHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XHJcbiAgICB0eXBlID0gcmFuZG9tLnBpY2sodHlwZSk7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIC8vIEF0dGVtcHQgdG8gaW5mZXIgdGhlIHR5cGVcclxuICAgIHR5cGUgPSBpbmZlcnJlZFR5cGUob2JqLCBwYXRoKSB8fCB0eXBlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgaWYgKCFwcmltaXRpdmVzW3R5cGVdKSB7XHJcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKCd1bmtub3duIHByaW1pdGl2ZSAnICsgSlNPTi5zdHJpbmdpZnkodHlwZSksIHBhdGguY29uY2F0KFsndHlwZSddKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHByaW1pdGl2ZXNbdHlwZV0ob2JqLCBwYXRoLCByZXNvbHZlKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgaWYgKHR5cGVvZiBlLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoZS5tZXNzYWdlLCBwYXRoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhyb3cgZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XHJcbiAgICBpZiAodHlwZW9mIG9ialtwcm9wXSA9PT0gJ29iamVjdCcgJiYgcHJvcCAhPT0gJ2RlZmluaXRpb25zJykge1xyXG4gICAgICBjb3B5W3Byb3BdID0gdHJhdmVyc2Uob2JqW3Byb3BdLCBwYXRoLmNvbmNhdChbcHJvcF0pLCByZXNvbHZlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvcHlbcHJvcF0gPSBvYmpbcHJvcF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29weTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICBwcmltaXRpdmVzID0gcHJpbWl0aXZlcyB8fCByZXF1aXJlKCcuL3ByaW1pdGl2ZXMnKTtcclxuXHJcbiAgcmV0dXJuIHRyYXZlcnNlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcbiIsIi8qKlxuICogbG9kYXNoIDMuNy4yIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBzdHJpbmcgcGF0aHNcbiAqIGFuZCBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoS2V5XSBUaGUga2V5IHJlcHJlc2VudGF0aW9uIG9mIHBhdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoLCBwYXRoS2V5KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocGF0aEtleSAhPT0gdW5kZWZpbmVkICYmIHBhdGhLZXkgaW4gdG9PYmplY3Qob2JqZWN0KSkge1xuICAgIHBhdGggPSBbcGF0aEtleV07XG4gIH1cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFtwYXRoW2luZGV4KytdXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBvYmplY3QgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgb2JqZWN0LlxuICovXG5mdW5jdGlvbiB0b09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3QodmFsdWUpID8gdmFsdWUgOiBPYmplY3QodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZSBbbGFuZ3VhZ2UgdHlwZV0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4OCkgb2YgYE9iamVjdGAuXG4gKiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgLy8gQXZvaWQgYSBWOCBKSVQgYnVnIGluIENocm9tZSAxOS0yMC5cbiAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMjkxIGZvciBtb3JlIGRldGFpbHMuXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjguMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2guaXNhcnJheScpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXG5cXFxcXXxcXFxcLikqPylcXDIpXFxdL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgaWYgaXQncyBub3Qgb25lLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWRcbiAqIGZvciBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6ICh2YWx1ZSArICcnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIHByb3BlcnR5IHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgYmFzZVRvU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvUGF0aDtcbiIsIi8qKlxuICogbG9kYXNoIDMuNy4wIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG52YXIgYmFzZUdldCA9IHJlcXVpcmUoJ2xvZGFzaC5fYmFzZWdldCcpLFxuICAgIHRvUGF0aCA9IHJlcXVpcmUoJ2xvZGFzaC5fdG9wYXRoJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgdmFsdWUgb2YgYHBhdGhgIG9uIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyB1c2VkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHRvUGF0aChwYXRoKSwgcGF0aCArICcnKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsIi8qKlxuICogbG9kYXNoIDMuMC40IChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpID4gNSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKiogVXNlZCBmb3IgbmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZuVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZSBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9ialRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmblRvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKiBOYXRpdmUgbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQXJyYXkgPSBnZXROYXRpdmUoQXJyYXksICdpc0FycmF5Jyk7XG5cbi8qKlxuICogVXNlZCBhcyB0aGUgW21heGltdW0gbGVuZ3RoXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1udW1iZXIubWF4X3NhZmVfaW50ZWdlcilcbiAqIG9mIGFuIGFycmF5LWxpa2UgdmFsdWUuXG4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIHJldHVybiBpc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gYXJyYXlUYWc7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaSB3aGljaCByZXR1cm4gJ2Z1bmN0aW9uJyBmb3IgcmVnZXhlc1xuICAvLyBhbmQgU2FmYXJpIDggZXF1aXZhbGVudHMgd2hpY2ggcmV0dXJuICdvYmplY3QnIGZvciB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvcnMuXG4gIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gZnVuY1RhZztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGUgW2xhbmd1YWdlIHR5cGVdKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDgpIG9mIGBPYmplY3RgLlxuICogKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdCgxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIC8vIEF2b2lkIGEgVjggSklUIGJ1ZyBpbiBDaHJvbWUgMTktMjAuXG4gIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05hdGl2ZShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hdGl2ZShfKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHJldHVybiByZUlzTmF0aXZlLnRlc3QoZm5Ub1N0cmluZy5jYWxsKHZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgcmVJc0hvc3RDdG9yLnRlc3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKXtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICgnc3RyaW5nJyA9PSB0eXBlb2YgdmFsKSByZXR1cm4gcGFyc2UodmFsKTtcbiAgcmV0dXJuIG9wdGlvbnMubG9uZ1xuICAgID8gbG9uZyh2YWwpXG4gICAgOiBzaG9ydCh2YWwpO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9ICcnICsgc3RyO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMDAwKSByZXR1cm47XG4gIHZhciBtYXRjaCA9IC9eKCg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoc3RyKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuO1xuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzaG9ydChtcykge1xuICBpZiAobXMgPj0gZCkgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgaWYgKG1zID49IGgpIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIGlmIChtcyA+PSBtKSByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICBpZiAobXMgPj0gcykgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvbmcobXMpIHtcbiAgcmV0dXJuIHBsdXJhbChtcywgZCwgJ2RheScpXG4gICAgfHwgcGx1cmFsKG1zLCBoLCAnaG91cicpXG4gICAgfHwgcGx1cmFsKG1zLCBtLCAnbWludXRlJylcbiAgICB8fCBwbHVyYWwobXMsIHMsICdzZWNvbmQnKVxuICAgIHx8IG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBuLCBuYW1lKSB7XG4gIGlmIChtcyA8IG4pIHJldHVybjtcbiAgaWYgKG1zIDwgbiAqIDEuNSkgcmV0dXJuIE1hdGguZmxvb3IobXMgLyBuKSArICcgJyArIG5hbWU7XG4gIHJldHVybiBNYXRoLmNlaWwobXMgLyBuKSArICcgJyArIG5hbWUgKyAncyc7XG59XG4iLCIvKiEgTmF0aXZlIFByb21pc2UgT25seVxuICAgIHYwLjguMSAoYykgS3lsZSBTaW1wc29uXG4gICAgTUlUIExpY2Vuc2U6IGh0dHA6Ly9nZXRpZnkubWl0LWxpY2Vuc2Uub3JnXG4qL1xuXG4oZnVuY3Rpb24gVU1EKG5hbWUsY29udGV4dCxkZWZpbml0aW9uKXtcblx0Ly8gc3BlY2lhbCBmb3JtIG9mIFVNRCBmb3IgcG9seWZpbGxpbmcgYWNyb3NzIGV2aXJvbm1lbnRzXG5cdGNvbnRleHRbbmFtZV0gPSBjb250ZXh0W25hbWVdIHx8IGRlZmluaXRpb24oKTtcblx0aWYgKHR5cGVvZiBtb2R1bGUgIT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cykgeyBtb2R1bGUuZXhwb3J0cyA9IGNvbnRleHRbbmFtZV07IH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgeyBkZWZpbmUoZnVuY3Rpb24gJEFNRCQoKXsgcmV0dXJuIGNvbnRleHRbbmFtZV07IH0pOyB9XG59KShcIlByb21pc2VcIix0eXBlb2YgZ2xvYmFsICE9IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0aGlzLGZ1bmN0aW9uIERFRigpe1xuXHQvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgYnVpbHRJblByb3AsIGN5Y2xlLCBzY2hlZHVsaW5nX3F1ZXVlLFxuXHRcdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxcblx0XHR0aW1lciA9ICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9IFwidW5kZWZpbmVkXCIpID9cblx0XHRcdGZ1bmN0aW9uIHRpbWVyKGZuKSB7IHJldHVybiBzZXRJbW1lZGlhdGUoZm4pOyB9IDpcblx0XHRcdHNldFRpbWVvdXRcblx0O1xuXG5cdC8vIGRhbW1pdCwgSUU4LlxuXHR0cnkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcInhcIix7fSk7XG5cdFx0YnVpbHRJblByb3AgPSBmdW5jdGlvbiBidWlsdEluUHJvcChvYmosbmFtZSx2YWwsY29uZmlnKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixuYW1lLHtcblx0XHRcdFx0dmFsdWU6IHZhbCxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogY29uZmlnICE9PSBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fTtcblx0fVxuXHRjYXRjaCAoZXJyKSB7XG5cdFx0YnVpbHRJblByb3AgPSBmdW5jdGlvbiBidWlsdEluUHJvcChvYmosbmFtZSx2YWwpIHtcblx0XHRcdG9ialtuYW1lXSA9IHZhbDtcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fTtcblx0fVxuXG5cdC8vIE5vdGU6IHVzaW5nIGEgcXVldWUgaW5zdGVhZCBvZiBhcnJheSBmb3IgZWZmaWNpZW5jeVxuXHRzY2hlZHVsaW5nX3F1ZXVlID0gKGZ1bmN0aW9uIFF1ZXVlKCkge1xuXHRcdHZhciBmaXJzdCwgbGFzdCwgaXRlbTtcblxuXHRcdGZ1bmN0aW9uIEl0ZW0oZm4sc2VsZikge1xuXHRcdFx0dGhpcy5mbiA9IGZuO1xuXHRcdFx0dGhpcy5zZWxmID0gc2VsZjtcblx0XHRcdHRoaXMubmV4dCA9IHZvaWQgMDtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YWRkOiBmdW5jdGlvbiBhZGQoZm4sc2VsZikge1xuXHRcdFx0XHRpdGVtID0gbmV3IEl0ZW0oZm4sc2VsZik7XG5cdFx0XHRcdGlmIChsYXN0KSB7XG5cdFx0XHRcdFx0bGFzdC5uZXh0ID0gaXRlbTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRmaXJzdCA9IGl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdFx0bGFzdCA9IGl0ZW07XG5cdFx0XHRcdGl0ZW0gPSB2b2lkIDA7XG5cdFx0XHR9LFxuXHRcdFx0ZHJhaW46IGZ1bmN0aW9uIGRyYWluKCkge1xuXHRcdFx0XHR2YXIgZiA9IGZpcnN0O1xuXHRcdFx0XHRmaXJzdCA9IGxhc3QgPSBjeWNsZSA9IHZvaWQgMDtcblxuXHRcdFx0XHR3aGlsZSAoZikge1xuXHRcdFx0XHRcdGYuZm4uY2FsbChmLnNlbGYpO1xuXHRcdFx0XHRcdGYgPSBmLm5leHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9KSgpO1xuXG5cdGZ1bmN0aW9uIHNjaGVkdWxlKGZuLHNlbGYpIHtcblx0XHRzY2hlZHVsaW5nX3F1ZXVlLmFkZChmbixzZWxmKTtcblx0XHRpZiAoIWN5Y2xlKSB7XG5cdFx0XHRjeWNsZSA9IHRpbWVyKHNjaGVkdWxpbmdfcXVldWUuZHJhaW4pO1xuXHRcdH1cblx0fVxuXG5cdC8vIHByb21pc2UgZHVjayB0eXBpbmdcblx0ZnVuY3Rpb24gaXNUaGVuYWJsZShvKSB7XG5cdFx0dmFyIF90aGVuLCBvX3R5cGUgPSB0eXBlb2YgbztcblxuXHRcdGlmIChvICE9IG51bGwgJiZcblx0XHRcdChcblx0XHRcdFx0b190eXBlID09IFwib2JqZWN0XCIgfHwgb190eXBlID09IFwiZnVuY3Rpb25cIlxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0X3RoZW4gPSBvLnRoZW47XG5cdFx0fVxuXHRcdHJldHVybiB0eXBlb2YgX3RoZW4gPT0gXCJmdW5jdGlvblwiID8gX3RoZW4gOiBmYWxzZTtcblx0fVxuXG5cdGZ1bmN0aW9uIG5vdGlmeSgpIHtcblx0XHRmb3IgKHZhciBpPTA7IGk8dGhpcy5jaGFpbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0bm90aWZ5SXNvbGF0ZWQoXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdCh0aGlzLnN0YXRlID09PSAxKSA/IHRoaXMuY2hhaW5baV0uc3VjY2VzcyA6IHRoaXMuY2hhaW5baV0uZmFpbHVyZSxcblx0XHRcdFx0dGhpcy5jaGFpbltpXVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0dGhpcy5jaGFpbi5sZW5ndGggPSAwO1xuXHR9XG5cblx0Ly8gTk9URTogVGhpcyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGlzb2xhdGVcblx0Ly8gdGhlIGB0cnkuLmNhdGNoYCBzbyB0aGF0IG90aGVyIGNvZGUgY2FuIGJlXG5cdC8vIG9wdGltaXplZCBiZXR0ZXJcblx0ZnVuY3Rpb24gbm90aWZ5SXNvbGF0ZWQoc2VsZixjYixjaGFpbikge1xuXHRcdHZhciByZXQsIF90aGVuO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoY2IgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGNoYWluLnJlamVjdChzZWxmLm1zZyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYgKGNiID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0cmV0ID0gc2VsZi5tc2c7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0cmV0ID0gY2IuY2FsbCh2b2lkIDAsc2VsZi5tc2cpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJldCA9PT0gY2hhaW4ucHJvbWlzZSkge1xuXHRcdFx0XHRcdGNoYWluLnJlamVjdChUeXBlRXJyb3IoXCJQcm9taXNlLWNoYWluIGN5Y2xlXCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmIChfdGhlbiA9IGlzVGhlbmFibGUocmV0KSkge1xuXHRcdFx0XHRcdF90aGVuLmNhbGwocmV0LGNoYWluLnJlc29sdmUsY2hhaW4ucmVqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRjaGFpbi5yZXNvbHZlKHJldCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Y2F0Y2ggKGVycikge1xuXHRcdFx0Y2hhaW4ucmVqZWN0KGVycik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVzb2x2ZShtc2cpIHtcblx0XHR2YXIgX3RoZW4sIHNlbGYgPSB0aGlzO1xuXG5cdFx0Ly8gYWxyZWFkeSB0cmlnZ2VyZWQ/XG5cdFx0aWYgKHNlbGYudHJpZ2dlcmVkKSB7IHJldHVybjsgfVxuXG5cdFx0c2VsZi50cmlnZ2VyZWQgPSB0cnVlO1xuXG5cdFx0Ly8gdW53cmFwXG5cdFx0aWYgKHNlbGYuZGVmKSB7XG5cdFx0XHRzZWxmID0gc2VsZi5kZWY7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGlmIChfdGhlbiA9IGlzVGhlbmFibGUobXNnKSkge1xuXHRcdFx0XHRzY2hlZHVsZShmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHZhciBkZWZfd3JhcHBlciA9IG5ldyBNYWtlRGVmV3JhcHBlcihzZWxmKTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0X3RoZW4uY2FsbChtc2csXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uICRyZXNvbHZlJCgpeyByZXNvbHZlLmFwcGx5KGRlZl93cmFwcGVyLGFyZ3VtZW50cyk7IH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uICRyZWplY3QkKCl7IHJlamVjdC5hcHBseShkZWZfd3JhcHBlcixhcmd1bWVudHMpOyB9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QuY2FsbChkZWZfd3JhcHBlcixlcnIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRzZWxmLm1zZyA9IG1zZztcblx0XHRcdFx0c2VsZi5zdGF0ZSA9IDE7XG5cdFx0XHRcdGlmIChzZWxmLmNoYWluLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzY2hlZHVsZShub3RpZnksc2VsZik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Y2F0Y2ggKGVycikge1xuXHRcdFx0cmVqZWN0LmNhbGwobmV3IE1ha2VEZWZXcmFwcGVyKHNlbGYpLGVycik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVqZWN0KG1zZykge1xuXHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdC8vIGFscmVhZHkgdHJpZ2dlcmVkP1xuXHRcdGlmIChzZWxmLnRyaWdnZXJlZCkgeyByZXR1cm47IH1cblxuXHRcdHNlbGYudHJpZ2dlcmVkID0gdHJ1ZTtcblxuXHRcdC8vIHVud3JhcFxuXHRcdGlmIChzZWxmLmRlZikge1xuXHRcdFx0c2VsZiA9IHNlbGYuZGVmO1xuXHRcdH1cblxuXHRcdHNlbGYubXNnID0gbXNnO1xuXHRcdHNlbGYuc3RhdGUgPSAyO1xuXHRcdGlmIChzZWxmLmNoYWluLmxlbmd0aCA+IDApIHtcblx0XHRcdHNjaGVkdWxlKG5vdGlmeSxzZWxmKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpdGVyYXRlUHJvbWlzZXMoQ29uc3RydWN0b3IsYXJyLHJlc29sdmVyLHJlamVjdGVyKSB7XG5cdFx0Zm9yICh2YXIgaWR4PTA7IGlkeDxhcnIubGVuZ3RoOyBpZHgrKykge1xuXHRcdFx0KGZ1bmN0aW9uIElJRkUoaWR4KXtcblx0XHRcdFx0Q29uc3RydWN0b3IucmVzb2x2ZShhcnJbaWR4XSlcblx0XHRcdFx0LnRoZW4oXG5cdFx0XHRcdFx0ZnVuY3Rpb24gJHJlc29sdmVyJChtc2cpe1xuXHRcdFx0XHRcdFx0cmVzb2x2ZXIoaWR4LG1zZyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZWplY3RlclxuXHRcdFx0XHQpO1xuXHRcdFx0fSkoaWR4KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBNYWtlRGVmV3JhcHBlcihzZWxmKSB7XG5cdFx0dGhpcy5kZWYgPSBzZWxmO1xuXHRcdHRoaXMudHJpZ2dlcmVkID0gZmFsc2U7XG5cdH1cblxuXHRmdW5jdGlvbiBNYWtlRGVmKHNlbGYpIHtcblx0XHR0aGlzLnByb21pc2UgPSBzZWxmO1xuXHRcdHRoaXMuc3RhdGUgPSAwO1xuXHRcdHRoaXMudHJpZ2dlcmVkID0gZmFsc2U7XG5cdFx0dGhpcy5jaGFpbiA9IFtdO1xuXHRcdHRoaXMubXNnID0gdm9pZCAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuXHRcdGlmICh0eXBlb2YgZXhlY3V0b3IgIT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aHJvdyBUeXBlRXJyb3IoXCJOb3QgYSBmdW5jdGlvblwiKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fX05QT19fICE9PSAwKSB7XG5cdFx0XHR0aHJvdyBUeXBlRXJyb3IoXCJOb3QgYSBwcm9taXNlXCIpO1xuXHRcdH1cblxuXHRcdC8vIGluc3RhbmNlIHNoYWRvd2luZyB0aGUgaW5oZXJpdGVkIFwiYnJhbmRcIlxuXHRcdC8vIHRvIHNpZ25hbCBhbiBhbHJlYWR5IFwiaW5pdGlhbGl6ZWRcIiBwcm9taXNlXG5cdFx0dGhpcy5fX05QT19fID0gMTtcblxuXHRcdHZhciBkZWYgPSBuZXcgTWFrZURlZih0aGlzKTtcblxuXHRcdHRoaXNbXCJ0aGVuXCJdID0gZnVuY3Rpb24gdGhlbihzdWNjZXNzLGZhaWx1cmUpIHtcblx0XHRcdHZhciBvID0ge1xuXHRcdFx0XHRzdWNjZXNzOiB0eXBlb2Ygc3VjY2VzcyA9PSBcImZ1bmN0aW9uXCIgPyBzdWNjZXNzIDogdHJ1ZSxcblx0XHRcdFx0ZmFpbHVyZTogdHlwZW9mIGZhaWx1cmUgPT0gXCJmdW5jdGlvblwiID8gZmFpbHVyZSA6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdFx0Ly8gTm90ZTogYHRoZW4oLi4pYCBpdHNlbGYgY2FuIGJlIGJvcnJvd2VkIHRvIGJlIHVzZWQgYWdhaW5zdFxuXHRcdFx0Ly8gYSBkaWZmZXJlbnQgcHJvbWlzZSBjb25zdHJ1Y3RvciBmb3IgbWFraW5nIHRoZSBjaGFpbmVkIHByb21pc2UsXG5cdFx0XHQvLyBieSBzdWJzdGl0dXRpbmcgYSBkaWZmZXJlbnQgYHRoaXNgIGJpbmRpbmcuXG5cdFx0XHRvLnByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihmdW5jdGlvbiBleHRyYWN0Q2hhaW4ocmVzb2x2ZSxyZWplY3QpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiByZXNvbHZlICE9IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgcmVqZWN0ICE9IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHRocm93IFR5cGVFcnJvcihcIk5vdCBhIGZ1bmN0aW9uXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0by5yZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdFx0by5yZWplY3QgPSByZWplY3Q7XG5cdFx0XHR9KTtcblx0XHRcdGRlZi5jaGFpbi5wdXNoKG8pO1xuXG5cdFx0XHRpZiAoZGVmLnN0YXRlICE9PSAwKSB7XG5cdFx0XHRcdHNjaGVkdWxlKG5vdGlmeSxkZWYpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gby5wcm9taXNlO1xuXHRcdH07XG5cdFx0dGhpc1tcImNhdGNoXCJdID0gZnVuY3Rpb24gJGNhdGNoJChmYWlsdXJlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCxmYWlsdXJlKTtcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGV4ZWN1dG9yLmNhbGwoXG5cdFx0XHRcdHZvaWQgMCxcblx0XHRcdFx0ZnVuY3Rpb24gcHVibGljUmVzb2x2ZShtc2cpe1xuXHRcdFx0XHRcdHJlc29sdmUuY2FsbChkZWYsbXNnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZnVuY3Rpb24gcHVibGljUmVqZWN0KG1zZykge1xuXHRcdFx0XHRcdHJlamVjdC5jYWxsKGRlZixtc2cpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjYXRjaCAoZXJyKSB7XG5cdFx0XHRyZWplY3QuY2FsbChkZWYsZXJyKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUHJvbWlzZVByb3RvdHlwZSA9IGJ1aWx0SW5Qcm9wKHt9LFwiY29uc3RydWN0b3JcIixQcm9taXNlLFxuXHRcdC8qY29uZmlndXJhYmxlPSovZmFsc2Vcblx0KTtcblxuXHQvLyBOb3RlOiBBbmRyb2lkIDQgY2Fubm90IHVzZSBgT2JqZWN0LmRlZmluZVByb3BlcnR5KC4uKWAgaGVyZVxuXHRQcm9taXNlLnByb3RvdHlwZSA9IFByb21pc2VQcm90b3R5cGU7XG5cblx0Ly8gYnVpbHQtaW4gXCJicmFuZFwiIHRvIHNpZ25hbCBhbiBcInVuaW5pdGlhbGl6ZWRcIiBwcm9taXNlXG5cdGJ1aWx0SW5Qcm9wKFByb21pc2VQcm90b3R5cGUsXCJfX05QT19fXCIsMCxcblx0XHQvKmNvbmZpZ3VyYWJsZT0qL2ZhbHNlXG5cdCk7XG5cblx0YnVpbHRJblByb3AoUHJvbWlzZSxcInJlc29sdmVcIixmdW5jdGlvbiBQcm9taXNlJHJlc29sdmUobXNnKSB7XG5cdFx0dmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuXHRcdC8vIHNwZWMgbWFuZGF0ZWQgY2hlY2tzXG5cdFx0Ly8gbm90ZTogYmVzdCBcImlzUHJvbWlzZVwiIGNoZWNrIHRoYXQncyBwcmFjdGljYWwgZm9yIG5vd1xuXHRcdGlmIChtc2cgJiYgdHlwZW9mIG1zZyA9PSBcIm9iamVjdFwiICYmIG1zZy5fX05QT19fID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gbXNnO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgQ29uc3RydWN0b3IoZnVuY3Rpb24gZXhlY3V0b3IocmVzb2x2ZSxyZWplY3Qpe1xuXHRcdFx0aWYgKHR5cGVvZiByZXNvbHZlICE9IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgcmVqZWN0ICE9IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHR0aHJvdyBUeXBlRXJyb3IoXCJOb3QgYSBmdW5jdGlvblwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzb2x2ZShtc2cpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRidWlsdEluUHJvcChQcm9taXNlLFwicmVqZWN0XCIsZnVuY3Rpb24gUHJvbWlzZSRyZWplY3QobXNnKSB7XG5cdFx0cmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUscmVqZWN0KXtcblx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdHJlamVjdChtc2cpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRidWlsdEluUHJvcChQcm9taXNlLFwiYWxsXCIsZnVuY3Rpb24gUHJvbWlzZSRhbGwoYXJyKSB7XG5cdFx0dmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuXHRcdC8vIHNwZWMgbWFuZGF0ZWQgY2hlY2tzXG5cdFx0aWYgKFRvU3RyaW5nLmNhbGwoYXJyKSAhPSBcIltvYmplY3QgQXJyYXldXCIpIHtcblx0XHRcdHJldHVybiBDb25zdHJ1Y3Rvci5yZWplY3QoVHlwZUVycm9yKFwiTm90IGFuIGFycmF5XCIpKTtcblx0XHR9XG5cdFx0aWYgKGFyci5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBDb25zdHJ1Y3Rvci5yZXNvbHZlKFtdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUscmVqZWN0KXtcblx0XHRcdGlmICh0eXBlb2YgcmVzb2x2ZSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlamVjdCAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBsZW4gPSBhcnIubGVuZ3RoLCBtc2dzID0gQXJyYXkobGVuKSwgY291bnQgPSAwO1xuXG5cdFx0XHRpdGVyYXRlUHJvbWlzZXMoQ29uc3RydWN0b3IsYXJyLGZ1bmN0aW9uIHJlc29sdmVyKGlkeCxtc2cpIHtcblx0XHRcdFx0bXNnc1tpZHhdID0gbXNnO1xuXHRcdFx0XHRpZiAoKytjb3VudCA9PT0gbGVuKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShtc2dzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxyZWplY3QpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRidWlsdEluUHJvcChQcm9taXNlLFwicmFjZVwiLGZ1bmN0aW9uIFByb21pc2UkcmFjZShhcnIpIHtcblx0XHR2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG5cdFx0Ly8gc3BlYyBtYW5kYXRlZCBjaGVja3Ncblx0XHRpZiAoVG9TdHJpbmcuY2FsbChhcnIpICE9IFwiW29iamVjdCBBcnJheV1cIikge1xuXHRcdFx0cmV0dXJuIENvbnN0cnVjdG9yLnJlamVjdChUeXBlRXJyb3IoXCJOb3QgYW4gYXJyYXlcIikpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgQ29uc3RydWN0b3IoZnVuY3Rpb24gZXhlY3V0b3IocmVzb2x2ZSxyZWplY3Qpe1xuXHRcdFx0aWYgKHR5cGVvZiByZXNvbHZlICE9IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgcmVqZWN0ICE9IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHR0aHJvdyBUeXBlRXJyb3IoXCJOb3QgYSBmdW5jdGlvblwiKTtcblx0XHRcdH1cblxuXHRcdFx0aXRlcmF0ZVByb21pc2VzKENvbnN0cnVjdG9yLGFycixmdW5jdGlvbiByZXNvbHZlcihpZHgsbXNnKXtcblx0XHRcdFx0cmVzb2x2ZShtc2cpO1xuXHRcdFx0fSxyZWplY3QpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRyZXR1cm4gUHJvbWlzZTtcbn0pO1xuIiwidmFyIGlzYXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuLyoqXG4gKiBFeHBvc2UgYHBhdGhUb1JlZ2V4cGAuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gcGF0aFRvUmVnZXhwXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5tb2R1bGUuZXhwb3J0cy5jb21waWxlID0gY29tcGlsZVxubW9kdWxlLmV4cG9ydHMudG9rZW5zVG9GdW5jdGlvbiA9IHRva2Vuc1RvRnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzLnRva2Vuc1RvUmVnRXhwID0gdG9rZW5zVG9SZWdFeHBcblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbnZhciBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoW1xuICAvLyBNYXRjaCBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYXBwZWFyIGluIGZ1dHVyZSBtYXRjaGVzLlxuICAvLyBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgd29uJ3QgdHJhbnNmb3JtLlxuICAnKFxcXFxcXFxcLiknLFxuICAvLyBNYXRjaCBFeHByZXNzLXN0eWxlIHBhcmFtZXRlcnMgYW5kIHVuLW5hbWVkIHBhcmFtZXRlcnMgd2l0aCBhIHByZWZpeFxuICAvLyBhbmQgb3B0aW9uYWwgc3VmZml4ZXMuIE1hdGNoZXMgYXBwZWFyIGFzOlxuICAvL1xuICAvLyBcIi86dGVzdChcXFxcZCspP1wiID0+IFtcIi9cIiwgXCJ0ZXN0XCIsIFwiXFxkK1wiLCB1bmRlZmluZWQsIFwiP1wiLCB1bmRlZmluZWRdXG4gIC8vIFwiL3JvdXRlKFxcXFxkKylcIiAgPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiXFxkK1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgLy8gXCIvKlwiICAgICAgICAgICAgPT4gW1wiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiKlwiXVxuICAnKFtcXFxcLy5dKT8oPzooPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W14oKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpXG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHN0cikge1xuICB2YXIgdG9rZW5zID0gW11cbiAgdmFyIGtleSA9IDBcbiAgdmFyIGluZGV4ID0gMFxuICB2YXIgcGF0aCA9ICcnXG4gIHZhciByZXNcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdXG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV1cbiAgICB2YXIgb2Zmc2V0ID0gcmVzLmluZGV4XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldClcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoXG5cbiAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgcGF0aCArPSBlc2NhcGVkWzFdXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIFB1c2ggdGhlIGN1cnJlbnQgcGF0aCBvbnRvIHRoZSB0b2tlbnMuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gICAgICBwYXRoID0gJydcbiAgICB9XG5cbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdXG4gICAgdmFyIG5hbWUgPSByZXNbM11cbiAgICB2YXIgY2FwdHVyZSA9IHJlc1s0XVxuICAgIHZhciBncm91cCA9IHJlc1s1XVxuICAgIHZhciBzdWZmaXggPSByZXNbNl1cbiAgICB2YXIgYXN0ZXJpc2sgPSByZXNbN11cblxuICAgIHZhciByZXBlYXQgPSBzdWZmaXggPT09ICcrJyB8fCBzdWZmaXggPT09ICcqJ1xuICAgIHZhciBvcHRpb25hbCA9IHN1ZmZpeCA9PT0gJz8nIHx8IHN1ZmZpeCA9PT0gJyonXG4gICAgdmFyIGRlbGltaXRlciA9IHByZWZpeCB8fCAnLydcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXAgfHwgKGFzdGVyaXNrID8gJy4qJyA6ICdbXicgKyBkZWxpbWl0ZXIgKyAnXSs/JylcblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICBwYXR0ZXJuOiBlc2NhcGVHcm91cChwYXR0ZXJuKVxuICAgIH0pXG4gIH1cblxuICAvLyBNYXRjaCBhbnkgY2hhcmFjdGVycyBzdGlsbCByZW1haW5pbmcuXG4gIGlmIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBwYXRoICs9IHN0ci5zdWJzdHIoaW5kZXgpXG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCBleGlzdHMsIHB1c2ggaXQgb250byB0aGUgZW5kLlxuICBpZiAocGF0aCkge1xuICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgc3RyXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZSAoc3RyKSB7XG4gIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0cikpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aClcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14nICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnJCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgcGF0aCA9ICcnXG4gICAgdmFyIGRhdGEgPSBvYmogfHwge31cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcGF0aCArPSB0b2tlblxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV1cbiAgICAgIHZhciBzZWdtZW50XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBiZSBkZWZpbmVkJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNhcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBcIicgKyB2YWx1ZSArICdcIicpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWVbal0pXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIFwiJyArIHNlZ21lbnQgKyAnXCInKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSlcblxuICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgXCInICsgc2VnbWVudCArICdcIicpXG4gICAgICB9XG5cbiAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudFxuICAgIH1cblxuICAgIHJldHVybiBwYXRoXG4gIH1cbn1cblxuLyoqXG4gKiBFc2NhcGUgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKyo/PV4hOiR7fSgpW1xcXXxcXC9dKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBncm91cFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHtSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXNcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7UmVnRXhwfSBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpXG5cbiAgaWYgKGdyb3Vwcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHBhdGgsIGtleXMpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7QXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChwYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKVxuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/OicgKyBwYXJ0cy5qb2luKCd8JykgKyAnKScsIGZsYWdzKG9wdGlvbnMpKVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAga2V5c1xuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciB0b2tlbnMgPSBwYXJzZShwYXRoKVxuICB2YXIgcmUgPSB0b2tlbnNUb1JlZ0V4cCh0b2tlbnMsIG9wdGlvbnMpXG5cbiAgLy8gQXR0YWNoIGtleXMgYmFjayB0byB0aGUgcmVnZXhwLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAga2V5cy5wdXNoKHRva2Vuc1tpXSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhyZSwga2V5cylcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgdGFraW5nIHRva2VucyBhbmQgcmV0dXJuaW5nIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fSAgdG9rZW5zXG4gKiBAcGFyYW0gIHtBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiB0b2tlbnNUb1JlZ0V4cCAodG9rZW5zLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2VcbiAgdmFyIHJvdXRlID0gJydcbiAgdmFyIGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1cbiAgdmFyIGVuZHNXaXRoU2xhc2ggPSB0eXBlb2YgbGFzdFRva2VuID09PSAnc3RyaW5nJyAmJiAvXFwvJC8udGVzdChsYXN0VG9rZW4pXG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB0b2tlbnMgYW5kIGNyZWF0ZSBvdXIgcmVnZXhwIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KVxuICAgICAgdmFyIGNhcHR1cmUgPSB0b2tlbi5wYXR0ZXJuXG5cbiAgICAgIGlmICh0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgY2FwdHVyZSArPSAnKD86JyArIHByZWZpeCArIGNhcHR1cmUgKyAnKSonXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAocHJlZml4KSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoPzonICsgcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpKT8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoJyArIGNhcHR1cmUgKyAnKT8nXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyknXG4gICAgICB9XG5cbiAgICAgIHJvdXRlICs9IGNhcHR1cmVcbiAgICB9XG4gIH1cblxuICAvLyBJbiBub24tc3RyaWN0IG1vZGUgd2UgYWxsb3cgYSBzbGFzaCBhdCB0aGUgZW5kIG9mIG1hdGNoLiBJZiB0aGUgcGF0aCB0b1xuICAvLyBtYXRjaCBhbHJlYWR5IGVuZHMgd2l0aCBhIHNsYXNoLCB3ZSByZW1vdmUgaXQgZm9yIGNvbnNpc3RlbmN5LiBUaGUgc2xhc2hcbiAgLy8gaXMgdmFsaWQgYXQgdGhlIGVuZCBvZiBhIHBhdGggbWF0Y2gsIG5vdCBpbiB0aGUgbWlkZGxlLiBUaGlzIGlzIGltcG9ydGFudFxuICAvLyBpbiBub24tZW5kaW5nIG1vZGUsIHdoZXJlIFwiL3Rlc3QvXCIgc2hvdWxkbid0IG1hdGNoIFwiL3Rlc3QvL3JvdXRlXCIuXG4gIGlmICghc3RyaWN0KSB7XG4gICAgcm91dGUgPSAoZW5kc1dpdGhTbGFzaCA/IHJvdXRlLnNsaWNlKDAsIC0yKSA6IHJvdXRlKSArICcoPzpcXFxcLyg/PSQpKT8nXG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgcm91dGUgKz0gJyQnXG4gIH0gZWxzZSB7XG4gICAgLy8gSW4gbm9uLWVuZGluZyBtb2RlLCB3ZSBuZWVkIHRoZSBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFzIG11Y2ggYXNcbiAgICAvLyBwb3NzaWJsZSBieSB1c2luZyBhIHBvc2l0aXZlIGxvb2thaGVhZCB0byB0aGUgZW5kIG9yIG5leHQgcGF0aCBzZWdtZW50LlxuICAgIHJvdXRlICs9IHN0cmljdCAmJiBlbmRzV2l0aFNsYXNoID8gJycgOiAnKD89XFxcXC98JCknXG4gIH1cblxuICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBnaXZlbiBwYXRoIHN0cmluZywgcmV0dXJuaW5nIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVtcHR5IGFycmF5IGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRoZSBrZXlzLCB3aGljaCB3aWxsIGhvbGQgdGhlXG4gKiBwbGFjZWhvbGRlciBrZXkgZGVzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgdXNpbmcgYC91c2VyLzppZGAsIGBrZXlzYCB3aWxsXG4gKiBjb250YWluIGBbeyBuYW1lOiAnaWQnLCBkZWxpbWl0ZXI6ICcvJywgb3B0aW9uYWw6IGZhbHNlLCByZXBlYXQ6IGZhbHNlIH1dYC5cbiAqXG4gKiBAcGFyYW0gIHsoU3RyaW5nfFJlZ0V4cHxBcnJheSl9IHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICAgICAgICAgICAgW2tleXNdXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgIFtvcHRpb25zXVxuICogQHJldHVybiB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAga2V5cyA9IGtleXMgfHwgW11cblxuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0ga2V5c1xuICAgIGtleXMgPSBbXVxuICB9IGVsc2UgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKVxuICB9XG5cbiAgaWYgKGlzYXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gYXJyYXlUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKHBhdGgsIGtleXMsIG9wdGlvbnMpXG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsInZhciByZXQgPSByZXF1aXJlKCdyZXQnKTtcbnZhciBEUmFuZ2UgPSByZXF1aXJlKCdkaXNjb250aW51b3VzLXJhbmdlJyk7XG52YXIgdHlwZXMgPSByZXQudHlwZXM7XG5cblxuLyoqXG4gKiBJZiBjb2RlIGlzIGFscGhhYmV0aWMsIGNvbnZlcnRzIHRvIG90aGVyIGNhc2UuXG4gKiBJZiBub3QgYWxwaGFiZXRpYywgcmV0dXJucyBiYWNrIGNvZGUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gdG9PdGhlckNhc2UoY29kZSkge1xuICByZXR1cm4gY29kZSArICg5NyA8PSBjb2RlICYmIGNvZGUgPD0gMTIyID8gLTMyIDpcbiAgICAgICAgICAgICAgICAgNjUgPD0gY29kZSAmJiBjb2RlIDw9IDkwICA/ICAzMiA6IDApO1xufVxuXG5cbi8qKlxuICogUmFuZG9tbHkgcmV0dXJucyBhIHRydWUgb3IgZmFsc2UgdmFsdWUuXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmFuZEJvb2woKSB7XG4gIHJldHVybiAhdGhpcy5yYW5kSW50KDAsIDEpO1xufVxuXG5cbi8qKlxuICogUmFuZG9tbHkgc2VsZWN0cyBhbmQgcmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IGFyclxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiByYW5kU2VsZWN0KGFycikge1xuICBpZiAoYXJyIGluc3RhbmNlb2YgRFJhbmdlKSB7XG4gICAgcmV0dXJuIGFyci5pbmRleCh0aGlzLnJhbmRJbnQoMCwgYXJyLmxlbmd0aCAtIDEpKTtcbiAgfVxuICByZXR1cm4gYXJyW3RoaXMucmFuZEludCgwLCBhcnIubGVuZ3RoIC0gMSldO1xufVxuXG5cbi8qKlxuICogZXhwYW5kcyBhIHRva2VuIHRvIGEgRGlzY29udGludW91c1JhbmdlIG9mIGNoYXJhY3RlcnMgd2hpY2ggaGFzIGEgXG4gKiBsZW5ndGggYW5kIGFuIGluZGV4IGZ1bmN0aW9uIChmb3IgcmFuZG9tIHNlbGVjdGluZylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdG9rZW5cbiAqIEByZXR1cm4ge0Rpc2NvbnRpbnVvdXNSYW5nZX1cbiAqL1xuZnVuY3Rpb24gZXhwYW5kKHRva2VuKSB7XG4gIGlmICh0b2tlbi50eXBlID09PSByZXQudHlwZXMuQ0hBUikgcmV0dXJuIG5ldyBEUmFuZ2UodG9rZW4udmFsdWUpO1xuICBpZiAodG9rZW4udHlwZSA9PT0gcmV0LnR5cGVzLlJBTkdFKSByZXR1cm4gbmV3IERSYW5nZSh0b2tlbi5mcm9tLCB0b2tlbi50byk7XG4gIGlmICh0b2tlbi50eXBlID09PSByZXQudHlwZXMuU0VUKSB7XG4gICAgdmFyIGRyYW5nZSA9IG5ldyBEUmFuZ2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN1YnJhbmdlID0gZXhwYW5kLmNhbGwodGhpcywgdG9rZW4uc2V0W2ldKTtcbiAgICAgIGRyYW5nZS5hZGQoc3VicmFuZ2UpO1xuICAgICAgaWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YnJhbmdlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBzdWJyYW5nZS5pbmRleChqKTtcbiAgICAgICAgICB2YXIgb3RoZXJDYXNlQ29kZSA9IHRvT3RoZXJDYXNlKGNvZGUpO1xuICAgICAgICAgIGlmIChjb2RlICE9PSBvdGhlckNhc2VDb2RlKSB7XG4gICAgICAgICAgICBkcmFuZ2UuYWRkKG90aGVyQ2FzZUNvZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodG9rZW4ubm90KSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UmFuZ2UuY2xvbmUoKS5zdWJ0cmFjdChkcmFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZHJhbmdlO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwYW5kYWJsZSB0b2tlbiB0eXBlOiAnICsgdG9rZW4udHlwZSk7XG59XG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7UmVnRXhwfFN0cmluZ30gcmVnZXhwXG4gKiBAcGFyYW0ge1N0cmluZ30gbVxuICovXG52YXIgUmFuZEV4cCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocmVnZXhwLCBtKSB7XG4gIHRoaXMuZGVmYXVsdFJhbmdlID0gdGhpcy5kZWZhdWx0UmFuZ2UuY2xvbmUoKTtcbiAgaWYgKHJlZ2V4cCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHRoaXMuaWdub3JlQ2FzZSA9IHJlZ2V4cC5pZ25vcmVDYXNlO1xuICAgIHRoaXMubXVsdGlsaW5lID0gcmVnZXhwLm11bHRpbGluZTtcbiAgICBpZiAodHlwZW9mIHJlZ2V4cC5tYXggPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLm1heCA9IHJlZ2V4cC5tYXg7XG4gICAgfVxuICAgIHJlZ2V4cCA9IHJlZ2V4cC5zb3VyY2U7XG5cbiAgfSBlbHNlIGlmICh0eXBlb2YgcmVnZXhwID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuaWdub3JlQ2FzZSA9IG0gJiYgbS5pbmRleE9mKCdpJykgIT09IC0xO1xuICAgIHRoaXMubXVsdGlsaW5lID0gbSAmJiBtLmluZGV4T2YoJ20nKSAhPT0gLTE7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHJlZ2V4cCBvciBzdHJpbmcnKTtcbiAgfVxuXG4gIHRoaXMudG9rZW5zID0gcmV0KHJlZ2V4cCk7XG59O1xuXG5cbi8vIFdoZW4gYSByZXBldGl0aW9uYWwgdG9rZW4gaGFzIGl0cyBtYXggc2V0IHRvIEluZmluaXRlLFxuLy8gcmFuZGV4cCB3b24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhIHJhbmRvbSBhbW91bnQgYmV0d2VlbiBtaW4gYW5kIEluZmluaXRlXG4vLyBpbnN0ZWFkIGl0IHdpbGwgc2VlIEluZmluaXRlIGFzIG1pbiArIDEwMC5cblJhbmRFeHAucHJvdG90eXBlLm1heCA9IDEwMDtcblxuXG4vLyBHZW5lcmF0ZXMgdGhlIHJhbmRvbSBzdHJpbmcuXG5SYW5kRXhwLnByb3RvdHlwZS5nZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGdlbi5jYWxsKHRoaXMsIHRoaXMudG9rZW5zLCBbXSk7XG59O1xuXG5cbi8vIEVuYWJsZXMgdXNlIG9mIHJhbmRleHAgd2l0aCBhIHNob3J0ZXIgY2FsbC5cblJhbmRFeHAucmFuZGV4cCA9IGZ1bmN0aW9uKHJlZ2V4cCwgbSkge1xuICB2YXIgcmFuZGV4cDtcblxuICBpZiAocmVnZXhwLl9yYW5kZXhwID09PSB1bmRlZmluZWQpIHtcbiAgICByYW5kZXhwID0gbmV3IFJhbmRFeHAocmVnZXhwLCBtKTtcbiAgICByZWdleHAuX3JhbmRleHAgPSByYW5kZXhwO1xuICB9IGVsc2Uge1xuICAgIHJhbmRleHAgPSByZWdleHAuX3JhbmRleHA7XG4gICAgaWYgKHR5cGVvZiByZWdleHAubWF4ID09PSAnbnVtYmVyJykge1xuICAgICAgcmFuZGV4cC5tYXggPSByZWdleHAubWF4O1xuICAgIH1cbiAgICBpZiAocmVnZXhwLmRlZmF1bHRSYW5nZSBpbnN0YW5jZW9mIERSYW5nZSkge1xuICAgICAgcmFuZGV4cC5kZWZhdWx0UmFuZ2UgPSByZWdleHAuZGVmYXVsdFJhbmdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlZ2V4cC5yYW5kSW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByYW5kZXhwLnJhbmRJbnQgPSByZWdleHAucmFuZEludDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmFuZGV4cC5nZW4oKTtcbn07XG5cblxuLy8gVGhpcyBlbmFibGVzIHN1Z2FyeSAvcmVnZXhwLy5nZW4gc3ludGF4LlxuUmFuZEV4cC5zdWdhciA9IGZ1bmN0aW9uKCkge1xuICAvKiBqc2hpbnQgZnJlZXplOmZhbHNlICovXG4gIFJlZ0V4cC5wcm90b3R5cGUuZ2VuID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJhbmRFeHAucmFuZGV4cCh0aGlzKTtcbiAgfTtcbn07XG5cbi8vIFRoaXMgYWxsb3dzIGV4cGFuZGluZyB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY2hhcmFjdGVyc1xuLy8gZm9yIGluc3RhbmNlOiBSYW5kRXhwLmRlZmF1bHRSYW5nZS5hZGQoMCwgNjU1MzUpO1xuUmFuZEV4cC5wcm90b3R5cGUuZGVmYXVsdFJhbmdlID0gbmV3IERSYW5nZSgzMiwgMTI2KTtcblxuXG4vKipcbiAqIFJhbmRvbWx5IGdlbmVyYXRlcyBhbmQgcmV0dXJucyBhIG51bWJlciBiZXR3ZWVuIGEgYW5kIGIgKGluY2x1c2l2ZSkuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGFcbiAqIEBwYXJhbSB7TnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cblJhbmRFeHAucHJvdG90eXBlLnJhbmRJbnQgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDEgKyBiIC0gYSkpO1xufTtcblxuXG4vKipcbiAqIEdlbmVyYXRlIHJhbmRvbSBzdHJpbmcgbW9kZWxlZCBhZnRlciBnaXZlbiB0b2tlbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRva2VuXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBncm91cHNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2VuKHRva2VuLCBncm91cHMpIHtcbiAgdmFyIHN0YWNrLCBzdHIsIG4sIGksIGw7XG5cbiAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG5cblxuICAgIGNhc2UgdHlwZXMuUk9PVDpcbiAgICBjYXNlIHR5cGVzLkdST1VQOlxuICAgICAgaWYgKHRva2VuLm5vdEZvbGxvd2VkQnkpIHsgcmV0dXJuICcnOyB9XG5cbiAgICAgIC8vIEluc2VydCBwbGFjZWhvbGRlciB1bnRpbCBncm91cCBzdHJpbmcgaXMgZ2VuZXJhdGVkLlxuICAgICAgaWYgKHRva2VuLnJlbWVtYmVyICYmIHRva2VuLmdyb3VwTnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdG9rZW4uZ3JvdXBOdW1iZXIgPSBncm91cHMucHVzaChudWxsKSAtIDE7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrID0gdG9rZW4ub3B0aW9ucyA/XG4gICAgICAgIHJhbmRTZWxlY3QuY2FsbCh0aGlzLCB0b2tlbi5vcHRpb25zKSA6IHRva2VuLnN0YWNrO1xuXG4gICAgICBzdHIgPSAnJztcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBzdGFjay5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGdlbi5jYWxsKHRoaXMsIHN0YWNrW2ldLCBncm91cHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ucmVtZW1iZXIpIHtcbiAgICAgICAgZ3JvdXBzW3Rva2VuLmdyb3VwTnVtYmVyXSA9IHN0cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG5cblxuICAgIGNhc2UgdHlwZXMuUE9TSVRJT046XG4gICAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuXG4gICAgICByZXR1cm4gJyc7XG5cblxuICAgIGNhc2UgdHlwZXMuU0VUOlxuICAgICAgdmFyIGV4cGFuZGVkX3NldCA9IGV4cGFuZC5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICAgIGlmICghZXhwYW5kZWRfc2V0Lmxlbmd0aCkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocmFuZFNlbGVjdC5jYWxsKHRoaXMsIGV4cGFuZGVkX3NldCkpO1xuXG5cbiAgICBjYXNlIHR5cGVzLlJFUEVUSVRJT046XG4gICAgICAvLyBSYW5kb21seSBnZW5lcmF0ZSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAgICAgIG4gPSB0aGlzLnJhbmRJbnQodG9rZW4ubWluLFxuICAgICAgICAgICAgICB0b2tlbi5tYXggPT09IEluZmluaXR5ID8gdG9rZW4ubWluICsgdGhpcy5tYXggOiB0b2tlbi5tYXgpO1xuXG4gICAgICBzdHIgPSAnJztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGdlbi5jYWxsKHRoaXMsIHRva2VuLnZhbHVlLCBncm91cHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyO1xuXG5cbiAgICBjYXNlIHR5cGVzLlJFRkVSRU5DRTpcbiAgICAgIHJldHVybiBncm91cHNbdG9rZW4udmFsdWUgLSAxXSB8fCAnJztcblxuXG4gICAgY2FzZSB0eXBlcy5DSEFSOlxuICAgICAgdmFyIGNvZGUgPSB0aGlzLmlnbm9yZUNhc2UgJiYgcmFuZEJvb2wuY2FsbCh0aGlzKSA/XG4gICAgICAgIHRvT3RoZXJDYXNlKHRva2VuLnZhbHVlKSA6IHRva2VuLnZhbHVlO1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gIH1cbn1cblxuXG4iLCJ2YXIgdXRpbCAgICAgID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgdHlwZXMgICAgID0gcmVxdWlyZSgnLi90eXBlcycpO1xudmFyIHNldHMgICAgICA9IHJlcXVpcmUoJy4vc2V0cycpO1xudmFyIHBvc2l0aW9ucyA9IHJlcXVpcmUoJy4vcG9zaXRpb25zJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihyZWdleHBTdHIpIHtcbiAgdmFyIGkgPSAwLCBsLCBjLFxuICAgICAgc3RhcnQgPSB7IHR5cGU6IHR5cGVzLlJPT1QsIHN0YWNrOiBbXX0sXG5cbiAgICAgIC8vIEtlZXAgdHJhY2sgb2YgbGFzdCBjbGF1c2UvZ3JvdXAgYW5kIHN0YWNrLlxuICAgICAgbGFzdEdyb3VwID0gc3RhcnQsXG4gICAgICBsYXN0ID0gc3RhcnQuc3RhY2ssXG4gICAgICBncm91cFN0YWNrID0gW107XG5cblxuICB2YXIgcmVwZWF0RXJyID0gZnVuY3Rpb24oaSkge1xuICAgIHV0aWwuZXJyb3IocmVnZXhwU3RyLCAnTm90aGluZyB0byByZXBlYXQgYXQgY29sdW1uICcgKyAoaSAtIDEpKTtcbiAgfTtcblxuICAvLyBEZWNvZGUgYSBmZXcgZXNjYXBlZCBjaGFyYWN0ZXJzLlxuICB2YXIgc3RyID0gdXRpbC5zdHJUb0NoYXJzKHJlZ2V4cFN0cik7XG4gIGwgPSBzdHIubGVuZ3RoO1xuXG4gIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGNoYXJhY3RlciBpbiBzdHJpbmcuXG4gIHdoaWxlIChpIDwgbCkge1xuICAgIGMgPSBzdHJbaSsrXTtcblxuICAgIHN3aXRjaCAoYykge1xuICAgICAgLy8gSGFuZGxlIGVzY2FwZWQgY2hhcmFjdGVycywgaW5jbHVlcyBhIGZldyBzZXRzLlxuICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgIGMgPSBzdHJbaSsrXTtcblxuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChwb3NpdGlvbnMud29yZEJvdW5kYXJ5KCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChwb3NpdGlvbnMubm9uV29yZEJvdW5kYXJ5KCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLndvcmRzKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLm5vdFdvcmRzKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLmludHMoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgbGFzdC5wdXNoKHNldHMubm90SW50cygpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICBsYXN0LnB1c2goc2V0cy53aGl0ZXNwYWNlKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgIGxhc3QucHVzaChzZXRzLm5vdFdoaXRlc3BhY2UoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBjIGlzIGludGVnZXIuXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIGl0J3MgYSByZWZlcmVuY2UuXG4gICAgICAgICAgICBpZiAoL1xcZC8udGVzdChjKSkge1xuICAgICAgICAgICAgICBsYXN0LnB1c2goeyB0eXBlOiB0eXBlcy5SRUZFUkVOQ0UsIHZhbHVlOiBwYXJzZUludChjLCAxMCkgfSk7XG5cbiAgICAgICAgICAgIC8vIEVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGFzdC5wdXNoKHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IGMuY2hhckNvZGVBdCgwKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIFBvc2l0aW9uYWxzLlxuICAgICAgY2FzZSAnXic6XG4gICAgICAgICAgbGFzdC5wdXNoKHBvc2l0aW9ucy5iZWdpbigpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgIGxhc3QucHVzaChwb3NpdGlvbnMuZW5kKCkpO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBIYW5kbGUgY3VzdG9tIHNldHMuXG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBjbGFzcyBpcyAnYW50aScgaS5lLiBbXmFiY10uXG4gICAgICAgIHZhciBub3Q7XG4gICAgICAgIGlmIChzdHJbaV0gPT09ICdeJykge1xuICAgICAgICAgIG5vdCA9IHRydWU7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGFsbCB0aGUgY2hhcmFjdGVycyBpbiBjbGFzcy5cbiAgICAgICAgdmFyIGNsYXNzVG9rZW5zID0gdXRpbC50b2tlbml6ZUNsYXNzKHN0ci5zbGljZShpKSwgcmVnZXhwU3RyKTtcblxuICAgICAgICAvLyBJbmNyZWFzZSBpbmRleCBieSBsZW5ndGggb2YgY2xhc3MuXG4gICAgICAgIGkgKz0gY2xhc3NUb2tlbnNbMV07XG4gICAgICAgIGxhc3QucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlcy5TRVRcbiAgICAgICAgICAsIHNldDogY2xhc3NUb2tlbnNbMF1cbiAgICAgICAgICAsIG5vdDogbm90XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIENsYXNzIG9mIGFueSBjaGFyYWN0ZXIgZXhjZXB0IFxcbi5cbiAgICAgIGNhc2UgJy4nOlxuICAgICAgICBsYXN0LnB1c2goc2V0cy5hbnlDaGFyKCkpO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBQdXNoIGdyb3VwIG9udG8gc3RhY2suXG4gICAgICBjYXNlICcoJzpcbiAgICAgICAgLy8gQ3JlYXRlIGdyb3VwLlxuICAgICAgICB2YXIgZ3JvdXAgPSB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlcy5HUk9VUFxuICAgICAgICAgICwgc3RhY2s6IFtdXG4gICAgICAgICAgLCByZW1lbWJlcjogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIGMgPSBzdHJbaV07XG5cbiAgICAgICAgLy8gaWYgaWYgdGhpcyBpcyBhIHNwZWNpYWwga2luZCBvZiBncm91cC5cbiAgICAgICAgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgIGMgPSBzdHJbaSArIDFdO1xuICAgICAgICAgIGkgKz0gMjtcblxuICAgICAgICAgIC8vIE1hdGNoIGlmIGZvbGxvd2VkIGJ5LlxuICAgICAgICAgIGlmIChjID09PSAnPScpIHtcbiAgICAgICAgICAgIGdyb3VwLmZvbGxvd2VkQnkgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gTWF0Y2ggaWYgbm90IGZvbGxvd2VkIGJ5LlxuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICBncm91cC5ub3RGb2xsb3dlZEJ5ID0gdHJ1ZTtcblxuICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJzonKSB7XG4gICAgICAgICAgICB1dGlsLmVycm9yKHJlZ2V4cFN0cixcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBncm91cCwgY2hhcmFjdGVyIFxcJycgKyBjICsgJ1xcJyBhZnRlciBcXCc/XFwnIGF0IGNvbHVtbiAnICtcbiAgICAgICAgICAgICAgICAoaSAtIDEpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBncm91cC5yZW1lbWJlciA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5zZXJ0IHN1Ymdyb3VwIGludG8gY3VycmVudCBncm91cCBzdGFjay5cbiAgICAgICAgbGFzdC5wdXNoKGdyb3VwKTtcblxuICAgICAgICAvLyBSZW1lbWJlciB0aGUgY3VycmVudCBncm91cCBmb3Igd2hlbiB0aGUgZ3JvdXAgY2xvc2VzLlxuICAgICAgICBncm91cFN0YWNrLnB1c2gobGFzdEdyb3VwKTtcblxuICAgICAgICAvLyBNYWtlIHRoaXMgbmV3IGdyb3VwIHRoZSBjdXJyZW50IGdyb3VwLlxuICAgICAgICBsYXN0R3JvdXAgPSBncm91cDtcbiAgICAgICAgbGFzdCA9IGdyb3VwLnN0YWNrO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBQb3AgZ3JvdXAgb3V0IG9mIHN0YWNrLlxuICAgICAgY2FzZSAnKSc6XG4gICAgICAgIGlmIChncm91cFN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHV0aWwuZXJyb3IocmVnZXhwU3RyLCAnVW5tYXRjaGVkICkgYXQgY29sdW1uICcgKyAoaSAtIDEpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0R3JvdXAgPSBncm91cFN0YWNrLnBvcCgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgZ3JvdXAgaGFzIGEgUElQRS5cbiAgICAgICAgLy8gVG8gZ2V0IGJhY2sgdGhlIGNvcnJlY3QgbGFzdCBzdGFjay5cbiAgICAgICAgbGFzdCA9IGxhc3RHcm91cC5vcHRpb25zID8gbGFzdEdyb3VwLm9wdGlvbnNbbGFzdEdyb3VwLm9wdGlvbnMubGVuZ3RoIC0gMV0gOiBsYXN0R3JvdXAuc3RhY2s7XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIC8vIFVzZSBwaXBlIGNoYXJhY3RlciB0byBnaXZlIG1vcmUgY2hvaWNlcy5cbiAgICAgIGNhc2UgJ3wnOlxuICAgICAgICAvLyBDcmVhdGUgYXJyYXkgd2hlcmUgb3B0aW9ucyBhcmUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgUElQRVxuICAgICAgICAvLyBpbiB0aGlzIGNsYXVzZS5cbiAgICAgICAgaWYgKCFsYXN0R3JvdXAub3B0aW9ucykge1xuICAgICAgICAgIGxhc3RHcm91cC5vcHRpb25zID0gW2xhc3RHcm91cC5zdGFja107XG4gICAgICAgICAgZGVsZXRlIGxhc3RHcm91cC5zdGFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBzdGFjayBhbmQgYWRkIHRvIG9wdGlvbnMgZm9yIHJlc3Qgb2YgY2xhdXNlLlxuICAgICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgICAgbGFzdEdyb3VwLm9wdGlvbnMucHVzaChzdGFjayk7XG4gICAgICAgIGxhc3QgPSBzdGFjaztcbiAgICAgICAgYnJlYWs7XG5cblxuICAgICAgLy8gUmVwZXRpdGlvbi5cbiAgICAgIC8vIEZvciBldmVyeSByZXBldGl0aW9uLCByZW1vdmUgbGFzdCBlbGVtZW50IGZyb20gbGFzdCBzdGFja1xuICAgICAgLy8gdGhlbiBpbnNlcnQgYmFjayBhIFJBTkdFIG9iamVjdC5cbiAgICAgIC8vIFRoaXMgZGVzaWduIGlzIGNob3NlbiBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhblxuICAgICAgLy8gb25lIHJlcGV0aXRpb24gc3ltYm9scyBpbiBhIHJlZ2V4IGkuZS4gYGE/K3syLDN9YC5cbiAgICAgIGNhc2UgJ3snOlxuICAgICAgICB2YXIgcnMgPSAvXihcXGQrKSgsKFxcZCspPyk/XFx9Ly5leGVjKHN0ci5zbGljZShpKSksIG1pbiwgbWF4O1xuICAgICAgICBpZiAocnMgIT09IG51bGwpIHtcbiAgICAgICAgICBtaW4gPSBwYXJzZUludChyc1sxXSwgMTApO1xuICAgICAgICAgIG1heCA9IHJzWzJdID8gcnNbM10gPyBwYXJzZUludChyc1szXSwgMTApIDogSW5maW5pdHkgOiBtaW47XG4gICAgICAgICAgaSArPSByc1swXS5sZW5ndGg7XG5cbiAgICAgICAgICBsYXN0LnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5SRVBFVElUSU9OXG4gICAgICAgICAgICAsIG1pbjogbWluXG4gICAgICAgICAgICAsIG1heDogbWF4XG4gICAgICAgICAgICAsIHZhbHVlOiBsYXN0LnBvcCgpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogdHlwZXMuQ0hBUlxuICAgICAgICAgICAgLCB2YWx1ZTogMTIzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJz8nOlxuICAgICAgICBpZiAobGFzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXBlYXRFcnIoaSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLlJFUEVUSVRJT05cbiAgICAgICAgICAsIG1pbjogMFxuICAgICAgICAgICwgbWF4OiAxXG4gICAgICAgICAgLCB2YWx1ZTogbGFzdC5wb3AoKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJysnOlxuICAgICAgICBpZiAobGFzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXBlYXRFcnIoaSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdC5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVzLlJFUEVUSVRJT05cbiAgICAgICAgICAsIG1pbjogMVxuICAgICAgICAgICwgbWF4OiBJbmZpbml0eVxuICAgICAgICAgICwgdmFsdWU6IGxhc3QucG9wKClcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICcqJzpcbiAgICAgICAgaWYgKGxhc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmVwZWF0RXJyKGkpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3QucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlcy5SRVBFVElUSU9OXG4gICAgICAgICAgLCBtaW46IDBcbiAgICAgICAgICAsIG1heDogSW5maW5pdHlcbiAgICAgICAgICAsIHZhbHVlOiBsYXN0LnBvcCgpXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuXG4gICAgICAvLyBEZWZhdWx0IGlzIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGBcXFtdKCl7fT8rKl4kYC5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxhc3QucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlcy5DSEFSXG4gICAgICAgICAgLCB2YWx1ZTogYy5jaGFyQ29kZUF0KDApXG4gICAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYW55IGdyb3VwcyBoYXZlIG5vdCBiZWVuIGNsb3NlZC5cbiAgaWYgKGdyb3VwU3RhY2subGVuZ3RoICE9PSAwKSB7XG4gICAgdXRpbC5lcnJvcihyZWdleHBTdHIsICdVbnRlcm1pbmF0ZWQgZ3JvdXAnKTtcbiAgfVxuXG4gIHJldHVybiBzdGFydDtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnR5cGVzID0gdHlwZXM7XG4iLCJ2YXIgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5cbmV4cG9ydHMud29yZEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlBPU0lUSU9OLCB2YWx1ZTogJ2InIH07XG59O1xuXG5leHBvcnRzLm5vbldvcmRCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5QT1NJVElPTiwgdmFsdWU6ICdCJyB9O1xufTtcblxuZXhwb3J0cy5iZWdpbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5QT1NJVElPTiwgdmFsdWU6ICdeJyB9O1xufTtcblxuZXhwb3J0cy5lbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuUE9TSVRJT04sIHZhbHVlOiAnJCcgfTtcbn07XG4iLCJ2YXIgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5cbnZhciBJTlRTID0gZnVuY3Rpb24oKSB7XG4gcmV0dXJuIFt7IHR5cGU6IHR5cGVzLlJBTkdFICwgZnJvbTogNDgsIHRvOiA1NyB9XTtcbn07XG5cbnZhciBXT1JEUyA9IGZ1bmN0aW9uKCkge1xuIHJldHVybiBbXG4gICAgICB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA5NSB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLlJBTkdFLCBmcm9tOiA5NywgdG86IDEyMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLlJBTkdFLCBmcm9tOiA2NSwgdG86IDkwIH1cbiAgXS5jb25jYXQoSU5UUygpKTtcbn07XG5cbnZhciBXSElURVNQQUNFID0gZnVuY3Rpb24oKSB7XG4gcmV0dXJuIFtcbiAgICAgIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDkgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTAgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTEgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTMgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMzIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogMTYwIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDU3NjAgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogNjE1OCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTkyIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTMgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5NCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTk1IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTYgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODE5NyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MTk4IH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgxOTkgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIwMCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjAxIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMDIgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODIzMiB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjMzIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMzkgfVxuICAgICwgeyB0eXBlOiB0eXBlcy5DSEFSLCB2YWx1ZTogODI4NyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMjI4OCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA2NTI3OSB9XG4gIF07XG59O1xuXG52YXIgTk9UQU5ZQ0hBUiA9IGZ1bmN0aW9uKCkge1xuIHJldHVybiBbXG4gICAgICB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMCB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiAxMyB9XG4gICAgLCB7IHR5cGU6IHR5cGVzLkNIQVIsIHZhbHVlOiA4MjMyIH1cbiAgICAsIHsgdHlwZTogdHlwZXMuQ0hBUiwgdmFsdWU6IDgyMzMgfVxuICBdO1xufTtcblxuLy8gcHJlZGVmaW5lZCBjbGFzcyBvYmplY3RzXG5leHBvcnRzLndvcmRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBXT1JEUygpLCBub3Q6IGZhbHNlIH07XG59O1xuXG5leHBvcnRzLm5vdFdvcmRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBXT1JEUygpLCBub3Q6IHRydWUgfTtcbn07XG5cbmV4cG9ydHMuaW50cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyB0eXBlOiB0eXBlcy5TRVQsIHNldDogSU5UUygpLCBub3Q6IGZhbHNlIH07XG59O1xuXG5leHBvcnRzLm5vdEludHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IElOVFMoKSwgbm90OiB0cnVlIH07XG59O1xuXG5leHBvcnRzLndoaXRlc3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgdHlwZTogdHlwZXMuU0VULCBzZXQ6IFdISVRFU1BBQ0UoKSwgbm90OiBmYWxzZSB9O1xufTtcblxuZXhwb3J0cy5ub3RXaGl0ZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBXSElURVNQQUNFKCksIG5vdDogdHJ1ZSB9O1xufTtcblxuZXhwb3J0cy5hbnlDaGFyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7IHR5cGU6IHR5cGVzLlNFVCwgc2V0OiBOT1RBTllDSEFSKCksIG5vdDogdHJ1ZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgIFJPT1QgICAgICAgOiAwXG4gICwgR1JPVVAgICAgICA6IDFcbiAgLCBQT1NJVElPTiAgIDogMlxuICAsIFNFVCAgICAgICAgOiAzXG4gICwgUkFOR0UgICAgICA6IDRcbiAgLCBSRVBFVElUSU9OIDogNVxuICAsIFJFRkVSRU5DRSAgOiA2XG4gICwgQ0hBUiAgICAgICA6IDdcbn07XG4iLCJ2YXIgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG52YXIgc2V0cyAgPSByZXF1aXJlKCcuL3NldHMnKTtcblxuXG4vLyBBbGwgb2YgdGhlc2UgYXJlIHByaXZhdGUgYW5kIG9ubHkgdXNlZCBieSByYW5kZXhwLlxuLy8gSXQncyBhc3N1bWVkIHRoYXQgdGhleSB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCB0aGUgY29ycmVjdCBpbnB1dC5cblxudmFyIENUUkwgPSAnQEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXiA/JztcbnZhciBTTFNIID0geyAnMCc6IDAsICd0JzogOSwgJ24nOiAxMCwgJ3YnOiAxMSwgJ2YnOiAxMiwgJ3InOiAxMyB9O1xuXG4vKipcbiAqIEZpbmRzIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbnMgaW4gc3RyIGFuZCBjb252ZXJ0IGFsbCB0b1xuICogdGhlaXIgcmVzcGVjdGl2ZSBjaGFyYWN0ZXJzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5leHBvcnRzLnN0clRvQ2hhcnMgPSBmdW5jdGlvbihzdHIpIHtcbiAgdmFyIGNoYXJzX3JlZ2V4ID0gLyhcXFtcXFxcYlxcXSl8KFxcXFwpP1xcXFwoPzp1KFtBLUYwLTldezR9KXx4KFtBLUYwLTldezJ9KXwoMD9bMC03XXsyfSl8YyhbQEEtWlxcW1xcXFxcXF1cXF4/XSl8KFswdG52ZnJdKSkvZztcbiAgc3RyID0gc3RyLnJlcGxhY2UoY2hhcnNfcmVnZXgsIGZ1bmN0aW9uKHMsIGIsIGxicywgYTE2LCBiMTYsIGM4LCBkY3RybCwgZXNsc2gpIHtcbiAgICBcbiAgICBpZiAobGJzKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICB2YXIgY29kZSA9IGIgICAgID8gOCA6XG4gICAgICAgICAgICAgICBhMTYgICA/IHBhcnNlSW50KGExNiwgMTYpIDpcbiAgICAgICAgICAgICAgIGIxNiAgID8gcGFyc2VJbnQoYjE2LCAxNikgOlxuICAgICAgICAgICAgICAgYzggICAgPyBwYXJzZUludChjOCwgICA4KSA6XG4gICAgICAgICAgICAgICBkY3RybCA/IENUUkwuaW5kZXhPZihkY3RybCkgOlxuICAgICAgICAgICAgICAgZXNsc2ggPyBTTFNIW2VzbHNoXSA6IHVuZGVmaW5lZDtcbiAgICBcbiAgICB2YXIgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG5cbiAgICAvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzLlxuICAgIGlmICgvW1xcW1xcXXt9XFxeJC58PyorKCldLy50ZXN0KGMpKSB7XG4gICAgICBjID0gJ1xcXFwnICsgYztcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfSk7XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLyoqXG4gKiB0dXJucyBjbGFzcyBpbnRvIHRva2Vuc1xuICogcmVhZHMgc3RyIHVudGlsIGl0IGVuY291bnRlcnMgYSBdIG5vdCBwcmVjZWVkZWQgYnkgYSBcXFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWdleHBTdHJcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheS48T2JqZWN0PiwgTnVtYmVyPn1cbiAqL1xuZXhwb3J0cy50b2tlbml6ZUNsYXNzID0gZnVuY3Rpb24oc3RyLCByZWdleHBTdHIpIHtcbiAgdmFyIHRva2VucyA9IFtdXG4gICAgLCByZWdleHAgPSAvXFxcXCg/Oih3KXwoZCl8KHMpfChXKXwoRCl8KFMpKXwoKD86KD86XFxcXCkoLil8KFteXFxdXFxcXF0pKS0oPzpcXFxcKT8oW15cXF1dKSl8KFxcXSl8KD86XFxcXCk/KC4pL2dcbiAgICAsIHJzLCBjXG4gICAgO1xuXG5cbiAgd2hpbGUgKChycyA9IHJlZ2V4cC5leGVjKHN0cikpICE9IG51bGwpIHtcbiAgICBpZiAocnNbMV0pIHtcbiAgICAgIHRva2Vucy5wdXNoKHNldHMud29yZHMoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzJdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLmludHMoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzNdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLndoaXRlc3BhY2UoKSk7XG5cbiAgICB9IGVsc2UgaWYgKHJzWzRdKSB7XG4gICAgICB0b2tlbnMucHVzaChzZXRzLm5vdFdvcmRzKCkpO1xuXG4gICAgfSBlbHNlIGlmIChyc1s1XSkge1xuICAgICAgdG9rZW5zLnB1c2goc2V0cy5ub3RJbnRzKCkpO1xuXG4gICAgfSBlbHNlIGlmIChyc1s2XSkge1xuICAgICAgdG9rZW5zLnB1c2goc2V0cy5ub3RXaGl0ZXNwYWNlKCkpO1xuXG4gICAgfSBlbHNlIGlmIChyc1s3XSkge1xuICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IHR5cGVzLlJBTkdFXG4gICAgICAgICwgZnJvbTogKHJzWzhdIHx8IHJzWzldKS5jaGFyQ29kZUF0KDApXG4gICAgICAgICwgICB0bzogcnNbMTBdLmNoYXJDb2RlQXQoMClcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChjID0gcnNbMTJdKSB7XG4gICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogdHlwZXMuQ0hBUlxuICAgICAgICAsIHZhbHVlOiBjLmNoYXJDb2RlQXQoMClcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbdG9rZW5zLCByZWdleHAubGFzdEluZGV4XTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRzLmVycm9yKHJlZ2V4cFN0ciwgJ1VudGVybWluYXRlZCBjaGFyYWN0ZXIgY2xhc3MnKTtcbn07XG5cblxuLyoqXG4gKiBTaG9ydGN1dCB0byB0aHJvdyBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJlZ2V4cFxuICogQHBhcmFtIHtTdHJpbmd9IG1zZ1xuICovXG5leHBvcnRzLmVycm9yID0gZnVuY3Rpb24ocmVnZXhwLCBtc2cpIHtcbiAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogLycgKyByZWdleHAgKyAnLzogJyArIG1zZyk7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmV4cG9ydHMucGFyc2UgPSB1cmxQYXJzZTtcbmV4cG9ydHMucmVzb2x2ZSA9IHVybFJlc29sdmU7XG5leHBvcnRzLnJlc29sdmVPYmplY3QgPSB1cmxSZXNvbHZlT2JqZWN0O1xuZXhwb3J0cy5mb3JtYXQgPSB1cmxGb3JtYXQ7XG5cbmV4cG9ydHMuVXJsID0gVXJsO1xuXG5mdW5jdGlvbiBVcmwoKSB7XG4gIHRoaXMucHJvdG9jb2wgPSBudWxsO1xuICB0aGlzLnNsYXNoZXMgPSBudWxsO1xuICB0aGlzLmF1dGggPSBudWxsO1xuICB0aGlzLmhvc3QgPSBudWxsO1xuICB0aGlzLnBvcnQgPSBudWxsO1xuICB0aGlzLmhvc3RuYW1lID0gbnVsbDtcbiAgdGhpcy5oYXNoID0gbnVsbDtcbiAgdGhpcy5zZWFyY2ggPSBudWxsO1xuICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgdGhpcy5wYXRobmFtZSA9IG51bGw7XG4gIHRoaXMucGF0aCA9IG51bGw7XG4gIHRoaXMuaHJlZiA9IG51bGw7XG59XG5cbi8vIFJlZmVyZW5jZTogUkZDIDM5ODYsIFJGQyAxODA4LCBSRkMgMjM5NlxuXG4vLyBkZWZpbmUgdGhlc2UgaGVyZSBzbyBhdCBsZWFzdCB0aGV5IG9ubHkgaGF2ZSB0byBiZVxuLy8gY29tcGlsZWQgb25jZSBvbiB0aGUgZmlyc3QgbW9kdWxlIGxvYWQuXG52YXIgcHJvdG9jb2xQYXR0ZXJuID0gL14oW2EtejAtOS4rLV0rOikvaSxcbiAgICBwb3J0UGF0dGVybiA9IC86WzAtOV0qJC8sXG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGEgc2ltcGxlIHBhdGggVVJMXG4gICAgc2ltcGxlUGF0aFBhdHRlcm4gPSAvXihcXC9cXC8/KD8hXFwvKVteXFw/XFxzXSopKFxcP1teXFxzXSopPyQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eWythLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBjYW4gYWxsb3cgXCJ1bnNhZmVcIiBhbmQgXCJ1bndpc2VcIiBjaGFycy5cbiAgICB1bnNhZmVQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IG5ldmVyIGhhdmUgYSBob3N0bmFtZS5cbiAgICBob3N0bGVzc1Byb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgYWx3YXlzIGNvbnRhaW4gYSAvLyBiaXQuXG4gICAgc2xhc2hlZFByb3RvY29sID0ge1xuICAgICAgJ2h0dHAnOiB0cnVlLFxuICAgICAgJ2h0dHBzJzogdHJ1ZSxcbiAgICAgICdmdHAnOiB0cnVlLFxuICAgICAgJ2dvcGhlcic6IHRydWUsXG4gICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAnaHR0cDonOiB0cnVlLFxuICAgICAgJ2h0dHBzOic6IHRydWUsXG4gICAgICAnZnRwOic6IHRydWUsXG4gICAgICAnZ29waGVyOic6IHRydWUsXG4gICAgICAnZmlsZTonOiB0cnVlXG4gICAgfSxcbiAgICBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbmZ1bmN0aW9uIHVybFBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKHVybCAmJiB1dGlsLmlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghdXRpbC5pc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIC8vIENvcHkgY2hyb21lLCBJRSwgb3BlcmEgYmFja3NsYXNoLWhhbmRsaW5nIGJlaGF2aW9yLlxuICAvLyBCYWNrIHNsYXNoZXMgYmVmb3JlIHRoZSBxdWVyeSBzdHJpbmcgZ2V0IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXNcbiAgLy8gU2VlOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjU5MTZcbiAgdmFyIHF1ZXJ5SW5kZXggPSB1cmwuaW5kZXhPZignPycpLFxuICAgICAgc3BsaXR0ZXIgPVxuICAgICAgICAgIChxdWVyeUluZGV4ICE9PSAtMSAmJiBxdWVyeUluZGV4IDwgdXJsLmluZGV4T2YoJyMnKSkgPyAnPycgOiAnIycsXG4gICAgICB1U3BsaXQgPSB1cmwuc3BsaXQoc3BsaXR0ZXIpLFxuICAgICAgc2xhc2hSZWdleCA9IC9cXFxcL2c7XG4gIHVTcGxpdFswXSA9IHVTcGxpdFswXS5yZXBsYWNlKHNsYXNoUmVnZXgsICcvJyk7XG4gIHVybCA9IHVTcGxpdC5qb2luKHNwbGl0dGVyKTtcblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICBpZiAoIXNsYXNoZXNEZW5vdGVIb3N0ICYmIHVybC5zcGxpdCgnIycpLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIFRyeSBmYXN0IHBhdGggcmVnZXhwXG4gICAgdmFyIHNpbXBsZVBhdGggPSBzaW1wbGVQYXRoUGF0dGVybi5leGVjKHJlc3QpO1xuICAgIGlmIChzaW1wbGVQYXRoKSB7XG4gICAgICB0aGlzLnBhdGggPSByZXN0O1xuICAgICAgdGhpcy5ocmVmID0gcmVzdDtcbiAgICAgIHRoaXMucGF0aG5hbWUgPSBzaW1wbGVQYXRoWzFdO1xuICAgICAgaWYgKHNpbXBsZVBhdGhbMl0pIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSBzaW1wbGVQYXRoWzJdO1xuICAgICAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnNlYXJjaC5zdWJzdHIoMSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlYXJjaC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueWNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmXG4gICAgICAvLyB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQgYWxyZWFkeSBpcyBBU0NJSS1vbmx5LlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHB1bnljb2RlLnRvQVNDSUkodGhpcy5ob3N0bmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgaWYgKHJlc3QuaW5kZXhPZihhZSkgPT09IC0xKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHZhciBlc2MgPSBlbmNvZGVVUklDb21wb25lbnQoYWUpO1xuICAgICAgaWYgKGVzYyA9PT0gYWUpIHtcbiAgICAgICAgZXNjID0gZXNjYXBlKGFlKTtcbiAgICAgIH1cbiAgICAgIHJlc3QgPSByZXN0LnNwbGl0KGFlKS5qb2luKGVzYyk7XG4gICAgfVxuICB9XG5cblxuICAvLyBjaG9wIG9mZiBmcm9tIHRoZSB0YWlsIGZpcnN0LlxuICB2YXIgaGFzaCA9IHJlc3QuaW5kZXhPZignIycpO1xuICBpZiAoaGFzaCAhPT0gLTEpIHtcbiAgICAvLyBnb3QgYSBmcmFnbWVudCBzdHJpbmcuXG4gICAgdGhpcy5oYXNoID0gcmVzdC5zdWJzdHIoaGFzaCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgaGFzaCk7XG4gIH1cbiAgdmFyIHFtID0gcmVzdC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxbSAhPT0gLTEpIHtcbiAgICB0aGlzLnNlYXJjaCA9IHJlc3Quc3Vic3RyKHFtKTtcbiAgICB0aGlzLnF1ZXJ5ID0gcmVzdC5zdWJzdHIocW0gKyAxKTtcbiAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMucXVlcnkpO1xuICAgIH1cbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBxbSk7XG4gIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgIC8vIG5vIHF1ZXJ5IHN0cmluZywgYnV0IHBhcnNlUXVlcnlTdHJpbmcgc3RpbGwgcmVxdWVzdGVkXG4gICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICB0aGlzLnF1ZXJ5ID0ge307XG4gIH1cbiAgaWYgKHJlc3QpIHRoaXMucGF0aG5hbWUgPSByZXN0O1xuICBpZiAoc2xhc2hlZFByb3RvY29sW2xvd2VyUHJvdG9dICYmXG4gICAgICB0aGlzLmhvc3RuYW1lICYmICF0aGlzLnBhdGhuYW1lKSB7XG4gICAgdGhpcy5wYXRobmFtZSA9ICcvJztcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgaWYgKHRoaXMucGF0aG5hbWUgfHwgdGhpcy5zZWFyY2gpIHtcbiAgICB2YXIgcCA9IHRoaXMucGF0aG5hbWUgfHwgJyc7XG4gICAgdmFyIHMgPSB0aGlzLnNlYXJjaCB8fCAnJztcbiAgICB0aGlzLnBhdGggPSBwICsgcztcbiAgfVxuXG4gIC8vIGZpbmFsbHksIHJlY29uc3RydWN0IHRoZSBocmVmIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gdmFsaWRhdGVkLlxuICB0aGlzLmhyZWYgPSB0aGlzLmZvcm1hdCgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGZvcm1hdCBhIHBhcnNlZCBvYmplY3QgaW50byBhIHVybCBzdHJpbmdcbmZ1bmN0aW9uIHVybEZvcm1hdChvYmopIHtcbiAgLy8gZW5zdXJlIGl0J3MgYW4gb2JqZWN0LCBhbmQgbm90IGEgc3RyaW5nIHVybC5cbiAgLy8gSWYgaXQncyBhbiBvYmosIHRoaXMgaXMgYSBuby1vcC5cbiAgLy8gdGhpcyB3YXksIHlvdSBjYW4gY2FsbCB1cmxfZm9ybWF0KCkgb24gc3RyaW5nc1xuICAvLyB0byBjbGVhbiB1cCBwb3RlbnRpYWxseSB3b25reSB1cmxzLlxuICBpZiAodXRpbC5pc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICB1dGlsLmlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmICh1dGlsLmlzU3RyaW5nKHJlbGF0aXZlKSkge1xuICAgIHZhciByZWwgPSBuZXcgVXJsKCk7XG4gICAgcmVsLnBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgcmVsYXRpdmUgPSByZWw7XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gbmV3IFVybCgpO1xuICB2YXIgdGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgZm9yICh2YXIgdGsgPSAwOyB0ayA8IHRrZXlzLmxlbmd0aDsgdGsrKykge1xuICAgIHZhciB0a2V5ID0gdGtleXNbdGtdO1xuICAgIHJlc3VsdFt0a2V5XSA9IHRoaXNbdGtleV07XG4gIH1cblxuICAvLyBoYXNoIGlzIGFsd2F5cyBvdmVycmlkZGVuLCBubyBtYXR0ZXIgd2hhdC5cbiAgLy8gZXZlbiBocmVmPVwiXCIgd2lsbCByZW1vdmUgaXQuXG4gIHJlc3VsdC5oYXNoID0gcmVsYXRpdmUuaGFzaDtcblxuICAvLyBpZiB0aGUgcmVsYXRpdmUgdXJsIGlzIGVtcHR5LCB0aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvIGhlcmUuXG4gIGlmIChyZWxhdGl2ZS5ocmVmID09PSAnJykge1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBocmVmcyBsaWtlIC8vZm9vL2JhciBhbHdheXMgY3V0IHRvIHRoZSBwcm90b2NvbC5cbiAgaWYgKHJlbGF0aXZlLnNsYXNoZXMgJiYgIXJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgLy8gdGFrZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgcHJvdG9jb2wgZnJvbSByZWxhdGl2ZVxuICAgIHZhciBya2V5cyA9IE9iamVjdC5rZXlzKHJlbGF0aXZlKTtcbiAgICBmb3IgKHZhciByayA9IDA7IHJrIDwgcmtleXMubGVuZ3RoOyByaysrKSB7XG4gICAgICB2YXIgcmtleSA9IHJrZXlzW3JrXTtcbiAgICAgIGlmIChya2V5ICE9PSAncHJvdG9jb2wnKVxuICAgICAgICByZXN1bHRbcmtleV0gPSByZWxhdGl2ZVtya2V5XTtcbiAgICB9XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhyZWxhdGl2ZSk7XG4gICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW3ZdO1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIXV0aWwuaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFsbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIXV0aWwuaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIXV0aWwuaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgLy8gbm8gcGF0aCBhdCBhbGwuICBlYXN5LlxuICAgIC8vIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgb3RoZXIgc3R1ZmYgYWJvdmUuXG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gJy8nICsgcmVzdWx0LnNlYXJjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaWYgYSB1cmwgRU5EcyBpbiAuIG9yIC4uLCB0aGVuIGl0IG11c3QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIC8vIGhvd2V2ZXIsIGlmIGl0IGVuZHMgaW4gYW55dGhpbmcgZWxzZSBub24tc2xhc2h5LFxuICAvLyB0aGVuIGl0IG11c3QgTk9UIGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICB2YXIgbGFzdCA9IHNyY1BhdGguc2xpY2UoLTEpWzBdO1xuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IChcbiAgICAgIChyZXN1bHQuaG9zdCB8fCByZWxhdGl2ZS5ob3N0IHx8IHNyY1BhdGgubGVuZ3RoID4gMSkgJiZcbiAgICAgIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHwgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbGx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICB9XG4gIH1cblxuICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyB8fCAocmVzdWx0Lmhvc3QgJiYgc3JjUGF0aC5sZW5ndGgpO1xuXG4gIGlmIChtdXN0RW5kQWJzICYmICFpc0Fic29sdXRlKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBzcmNQYXRoLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCByZXF1ZXN0Lmh0dHBcbiAgaWYgKCF1dGlsLmlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICF1dGlsLmlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1N0cmluZzogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZihhcmcpID09PSAnc3RyaW5nJztcbiAgfSxcbiAgaXNPYmplY3Q6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICB9LFxuICBpc051bGw6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBhcmcgPT09IG51bGw7XG4gIH0sXG4gIGlzTnVsbE9yVW5kZWZpbmVkOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09IG51bGw7XG4gIH1cbn07XG4iLCIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNSBDaHJpcyBPJ0hhcmEgPGNvaGFyYTg3QGdtYWlsLmNvbT5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuICogXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4gKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4gKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xuICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRVxuICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTlxuICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4gKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4oZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLnBldGFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICBkZWZpbmUobmFtZSwgW10sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG4gICAgfVxufSkoJ3ZhbGlkYXRvcicsIGZ1bmN0aW9uICh2YWxpZGF0b3IpIHtcblxuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhbGlkYXRvciA9IHsgdmVyc2lvbjogJzQuNS4wJyB9O1xuXG4gICAgdmFyIGVtYWlsVXNlclBhcnQgPSAvXlthLXpcXGQhI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl0rJC9pO1xuICAgIHZhciBxdW90ZWRFbWFpbFVzZXIgPSAvXihbXFxzXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3ZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3ZV18KFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdKSkqJC9pO1xuXG4gICAgdmFyIGVtYWlsVXNlclV0ZjhQYXJ0ID0gL15bYS16XFxkISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5cXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKyQvaTtcbiAgICB2YXIgcXVvdGVkRW1haWxVc2VyVXRmOCA9IC9eKFtcXHNcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDdmXFx4MjFcXHgyMy1cXHg1YlxceDVkLVxceDdlXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXXwoXFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZC1cXHg3ZlxcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSokL2k7XG5cbiAgICB2YXIgZGlzcGxheU5hbWUgPSAvXlthLXpcXGQhI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9flxcLlxcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0rW2EtelxcZCEjXFwkJSYnXFwqXFwrXFwtXFwvPVxcP1xcXl9ge1xcfH1+XFwuXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXFxzXSo8KC4rKT4kL2k7XG5cbiAgICB2YXIgY3JlZGl0Q2FyZCA9IC9eKD86NFswLTldezEyfSg/OlswLTldezN9KT98NVsxLTVdWzAtOV17MTR9fDYoPzowMTF8NVswLTldWzAtOV0pWzAtOV17MTJ9fDNbNDddWzAtOV17MTN9fDMoPzowWzAtNV18WzY4XVswLTldKVswLTldezExfXwoPzoyMTMxfDE4MDB8MzVcXGR7M30pXFxkezExfSkkLztcblxuICAgIHZhciBpc2luID0gL15bQS1aXXsyfVswLTlBLVpdezl9WzAtOV0kLztcblxuICAgIHZhciBpc2JuMTBNYXliZSA9IC9eKD86WzAtOV17OX1YfFswLTldezEwfSkkL1xuICAgICAgLCBpc2JuMTNNYXliZSA9IC9eKD86WzAtOV17MTN9KSQvO1xuXG4gICAgdmFyIG1hY0FkZHJlc3MgPSAvXihbMC05YS1mQS1GXVswLTlhLWZBLUZdOil7NX0oWzAtOWEtZkEtRl1bMC05YS1mQS1GXSkkLztcblxuICAgIHZhciBpcHY0TWF5YmUgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSQvXG4gICAgICAsIGlwdjZCbG9jayA9IC9eWzAtOUEtRl17MSw0fSQvaTtcblxuICAgIHZhciB1dWlkID0ge1xuICAgICAgICAnMyc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tM1swLTlBLUZdezN9LVswLTlBLUZdezR9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCAnNCc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tNFswLTlBLUZdezN9LVs4OUFCXVswLTlBLUZdezN9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCAnNSc6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tNVswLTlBLUZdezN9LVs4OUFCXVswLTlBLUZdezN9LVswLTlBLUZdezEyfSQvaVxuICAgICAgLCBhbGw6IC9eWzAtOUEtRl17OH0tWzAtOUEtRl17NH0tWzAtOUEtRl17NH0tWzAtOUEtRl17NH0tWzAtOUEtRl17MTJ9JC9pXG4gICAgfTtcblxuICAgIHZhciBhbHBoYSA9IC9eW0EtWl0rJC9pXG4gICAgICAsIGFscGhhbnVtZXJpYyA9IC9eWzAtOUEtWl0rJC9pXG4gICAgICAsIG51bWVyaWMgPSAvXlstK10/WzAtOV0rJC9cbiAgICAgICwgaW50ID0gL14oPzpbLStdPyg/OjB8WzEtOV1bMC05XSopKSQvXG4gICAgICAsIGZsb2F0ID0gL14oPzpbLStdPyg/OlswLTldKykpPyg/OlxcLlswLTldKik/KD86W2VFXVtcXCtcXC1dPyg/OlswLTldKykpPyQvXG4gICAgICAsIGhleGFkZWNpbWFsID0gL15bMC05QS1GXSskL2lcbiAgICAgICwgZGVjaW1hbCA9IC9eWy0rXT8oWzAtOV0rfFxcLlswLTldK3xbMC05XStcXC5bMC05XSspJC9cbiAgICAgICwgaGV4Y29sb3IgPSAvXiM/KFswLTlBLUZdezN9fFswLTlBLUZdezZ9KSQvaTtcblxuICAgIHZhciBhc2NpaSA9IC9eW1xceDAwLVxceDdGXSskL1xuICAgICAgLCBtdWx0aWJ5dGUgPSAvW15cXHgwMC1cXHg3Rl0vXG4gICAgICAsIGZ1bGxXaWR0aCA9IC9bXlxcdTAwMjAtXFx1MDA3RVxcdUZGNjEtXFx1RkY5RlxcdUZGQTAtXFx1RkZEQ1xcdUZGRTgtXFx1RkZFRTAtOWEtekEtWl0vXG4gICAgICAsIGhhbGZXaWR0aCA9IC9bXFx1MDAyMC1cXHUwMDdFXFx1RkY2MS1cXHVGRjlGXFx1RkZBMC1cXHVGRkRDXFx1RkZFOC1cXHVGRkVFMC05YS16QS1aXS87XG5cbiAgICB2YXIgc3Vycm9nYXRlUGFpciA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdLztcblxuICAgIHZhciBiYXNlNjQgPSAvXig/OltBLVowLTkrXFwvXXs0fSkqKD86W0EtWjAtOStcXC9dezJ9PT18W0EtWjAtOStcXC9dezN9PXxbQS1aMC05K1xcL117NH0pJC9pO1xuXG4gICAgdmFyIHBob25lcyA9IHtcbiAgICAgICd6aC1DTic6IC9eKFxcKz8wPzg2XFwtPyk/KCgxM1xcZHwxNFs1N118MTVbXjQsXFxEXXwxN1s2NzhdfDE4XFxkKVxcZHs4fXwxNzBbMDU5XVxcZHs3fSkkLyxcbiAgICAgICd6aC1UVyc6IC9eKFxcKz84ODZcXC0/fDApPzlcXGR7OH0kLyxcbiAgICAgICdlbi1aQSc6IC9eKFxcKz8yN3wwKVxcZHs5fSQvLFxuICAgICAgJ2VuLUFVJzogL14oXFwrPzYxfDApNFxcZHs4fSQvLFxuICAgICAgJ2VuLUhLJzogL14oXFwrPzg1MlxcLT8pP1s1NjldXFxkezN9XFwtP1xcZHs0fSQvLFxuICAgICAgJ2ZyLUZSJzogL14oXFwrPzMzfDApWzY3XVxcZHs4fSQvLFxuICAgICAgJ3B0LVBUJzogL14oXFwrMzUxKT85WzEyMzZdXFxkezd9JC8sXG4gICAgICAnZWwtR1InOiAvXihcXCs/MzApPyg2OVxcZHs4fSkkLyxcbiAgICAgICdlbi1HQic6IC9eKFxcKz80NHwwKTdcXGR7OX0kLyxcbiAgICAgICdlbi1VUyc6IC9eKFxcKz8xKT9bMi05XVxcZHsyfVsyLTldKD8hMTEpXFxkezZ9JC8sXG4gICAgICAnZW4tWk0nOiAvXihcXCsyNik/MDlbNTY3XVxcZHs3fSQvLFxuICAgICAgJ3J1LVJVJzogL14oXFwrPzd8OCk/OVxcZHs5fSQvLFxuICAgICAgJ25iLU5PJzogL14oXFwrPzQ3KT9bNDldXFxkezd9JC8sXG4gICAgICAnbm4tTk8nOiAvXihcXCs/NDcpP1s0OV1cXGR7N30kLyxcbiAgICAgICd2aS1WTic6IC9eKDB8XFwrPzg0KT8oKDEoMihbMC05XSl8NihbMi05XSl8ODh8OTkpKXwoOSgoPyE1KVswLTldKSkpKFswLTldezd9KSQvLFxuICAgICAgJ2VuLU5aJzogL14oXFwrPzY0fDApMlxcZHs3LDl9JC8sXG4gICAgICAnZW4tSU4nOiAvXihcXCs/OTF8MCk/Wzc4OV1cXGR7OX0kL1xuICAgIH07XG5cbiAgICAvLyBmcm9tIGh0dHA6Ly9nb28uZ2wvMGVqSEhXXG4gICAgdmFyIGlzbzg2MDEgPSAvXihbXFwrLV0/XFxkezR9KD8hXFxkezJ9XFxiKSkoKC0/KSgoMFsxLTldfDFbMC0yXSkoXFwzKFsxMl1cXGR8MFsxLTldfDNbMDFdKSk/fFcoWzAtNF1cXGR8NVswLTJdKSgtP1sxLTddKT98KDAwWzEtOV18MFsxLTldXFxkfFsxMl1cXGR7Mn18MyhbMC01XVxcZHw2WzEtNl0pKSkoW1RcXHNdKCgoWzAxXVxcZHwyWzAtM10pKCg6PylbMC01XVxcZCk/fDI0XFw6PzAwKShbXFwuLF1cXGQrKD8hOikpPyk/KFxcMTdbMC01XVxcZChbXFwuLF1cXGQrKT8pPyhbelpdfChbXFwrLV0pKFswMV1cXGR8MlswLTNdKTo/KFswLTVdXFxkKT8pPyk/KT8kLztcblxuICAgIHZhbGlkYXRvci5leHRlbmQgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICAgICAgdmFsaWRhdG9yW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgYXJnc1swXSA9IHZhbGlkYXRvci50b1N0cmluZyhhcmdzWzBdKTtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh2YWxpZGF0b3IsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvL1JpZ2h0IGJlZm9yZSBleHBvcnRpbmcgdGhlIHZhbGlkYXRvciBvYmplY3QsIHBhc3MgZWFjaCBvZiB0aGUgYnVpbHRpbnNcbiAgICAvL3Rocm91Z2ggZXh0ZW5kKCkgc28gdGhhdCB0aGVpciBmaXJzdCBhcmd1bWVudCBpcyBjb2VyY2VkIHRvIGEgc3RyaW5nXG4gICAgdmFsaWRhdG9yLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvcltuYW1lXSAhPT0gJ2Z1bmN0aW9uJyB8fCBuYW1lID09PSAndG9TdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICd0b0RhdGUnIHx8IG5hbWUgPT09ICdleHRlbmQnIHx8IG5hbWUgPT09ICdpbml0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsaWRhdG9yLmV4dGVuZChuYW1lLCB2YWxpZGF0b3JbbmFtZV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b1N0cmluZyA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCAhPT0gbnVsbCAmJiBpbnB1dC50b1N0cmluZykge1xuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBudWxsIHx8IHR5cGVvZiBpbnB1dCA9PT0gJ3VuZGVmaW5lZCcgfHwgKGlzTmFOKGlucHV0KSAmJiAhaW5wdXQubGVuZ3RoKSkge1xuICAgICAgICAgICAgaW5wdXQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJycgKyBpbnB1dDtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLnRvRGF0ZSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0ZSkgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZSA9IERhdGUucGFyc2UoZGF0ZSk7XG4gICAgICAgIHJldHVybiAhaXNOYU4oZGF0ZSkgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGw7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b0Zsb2F0ID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IudG9JbnQgPSBmdW5jdGlvbiAoc3RyLCByYWRpeCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyLCByYWRpeCB8fCAxMCk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci50b0Jvb2xlYW4gPSBmdW5jdGlvbiAoc3RyLCBzdHJpY3QpIHtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ciA9PT0gJzEnIHx8IHN0ciA9PT0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHIgIT09ICcwJyAmJiBzdHIgIT09ICdmYWxzZScgJiYgc3RyICE9PSAnJztcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmVxdWFscyA9IGZ1bmN0aW9uIChzdHIsIGNvbXBhcmlzb24pIHtcbiAgICAgICAgcmV0dXJuIHN0ciA9PT0gdmFsaWRhdG9yLnRvU3RyaW5nKGNvbXBhcmlzb24pO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuY29udGFpbnMgPSBmdW5jdGlvbiAoc3RyLCBlbGVtKSB7XG4gICAgICAgIHJldHVybiBzdHIuaW5kZXhPZih2YWxpZGF0b3IudG9TdHJpbmcoZWxlbSkpID49IDA7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5tYXRjaGVzID0gZnVuY3Rpb24gKHN0ciwgcGF0dGVybiwgbW9kaWZpZXJzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGF0dGVybikgIT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBtb2RpZmllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmF1bHRfZW1haWxfb3B0aW9ucyA9IHtcbiAgICAgICAgYWxsb3dfZGlzcGxheV9uYW1lOiBmYWxzZSxcbiAgICAgICAgYWxsb3dfdXRmOF9sb2NhbF9wYXJ0OiB0cnVlLFxuICAgICAgICByZXF1aXJlX3RsZDogdHJ1ZVxuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNFbWFpbCA9IGZ1bmN0aW9uIChzdHIsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG1lcmdlKG9wdGlvbnMsIGRlZmF1bHRfZW1haWxfb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfZGlzcGxheV9uYW1lKSB7XG4gICAgICAgICAgICB2YXIgZGlzcGxheV9lbWFpbCA9IHN0ci5tYXRjaChkaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICBpZiAoZGlzcGxheV9lbWFpbCkge1xuICAgICAgICAgICAgICAgIHN0ciA9IGRpc3BsYXlfZW1haWxbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJ0AnKVxuICAgICAgICAgICwgZG9tYWluID0gcGFydHMucG9wKClcbiAgICAgICAgICAsIHVzZXIgPSBwYXJ0cy5qb2luKCdAJyk7XG5cbiAgICAgICAgdmFyIGxvd2VyX2RvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobG93ZXJfZG9tYWluID09PSAnZ21haWwuY29tJyB8fCBsb3dlcl9kb21haW4gPT09ICdnb29nbGVtYWlsLmNvbScpIHtcbiAgICAgICAgICAgIHVzZXIgPSB1c2VyLnJlcGxhY2UoL1xcLi9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aCh1c2VyLCAwLCA2NCkgfHxcbiAgICAgICAgICAgICAgICAhdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aChkb21haW4sIDAsIDI1NikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzRlFETihkb21haW4sIHtyZXF1aXJlX3RsZDogb3B0aW9ucy5yZXF1aXJlX3RsZH0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlclswXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgdXNlciA9IHVzZXIuc2xpY2UoMSwgdXNlci5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmFsbG93X3V0ZjhfbG9jYWxfcGFydCA/XG4gICAgICAgICAgICAgICAgcXVvdGVkRW1haWxVc2VyVXRmOC50ZXN0KHVzZXIpIDpcbiAgICAgICAgICAgICAgICBxdW90ZWRFbWFpbFVzZXIudGVzdCh1c2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXR0ZXJuID0gb3B0aW9ucy5hbGxvd191dGY4X2xvY2FsX3BhcnQgP1xuICAgICAgICAgICAgZW1haWxVc2VyVXRmOFBhcnQgOiBlbWFpbFVzZXJQYXJ0O1xuXG4gICAgICAgIHZhciB1c2VyX3BhcnRzID0gdXNlci5zcGxpdCgnLicpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZXJfcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi50ZXN0KHVzZXJfcGFydHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHZhciBkZWZhdWx0X3VybF9vcHRpb25zID0ge1xuICAgICAgICBwcm90b2NvbHM6IFsgJ2h0dHAnLCAnaHR0cHMnLCAnZnRwJyBdXG4gICAgICAsIHJlcXVpcmVfdGxkOiB0cnVlXG4gICAgICAsIHJlcXVpcmVfcHJvdG9jb2w6IGZhbHNlXG4gICAgICAsIHJlcXVpcmVfdmFsaWRfcHJvdG9jb2w6IHRydWVcbiAgICAgICwgYWxsb3dfdW5kZXJzY29yZXM6IGZhbHNlXG4gICAgICAsIGFsbG93X3RyYWlsaW5nX2RvdDogZmFsc2VcbiAgICAgICwgYWxsb3dfcHJvdG9jb2xfcmVsYXRpdmVfdXJsczogZmFsc2VcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzVVJMID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICAgICAgICBpZiAoIXVybCB8fCB1cmwubGVuZ3RoID49IDIwODMgfHwgL1xccy8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCdtYWlsdG86JykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF91cmxfb3B0aW9ucyk7XG4gICAgICAgIHZhciBwcm90b2NvbCwgYXV0aCwgaG9zdCwgaG9zdG5hbWUsIHBvcnQsXG4gICAgICAgICAgICBwb3J0X3N0ciwgc3BsaXQ7XG4gICAgICAgIHNwbGl0ID0gdXJsLnNwbGl0KCc6Ly8nKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHByb3RvY29sID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlcXVpcmVfdmFsaWRfcHJvdG9jb2wgJiYgb3B0aW9ucy5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMucmVxdWlyZV9wcm90b2NvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9ICBlbHNlIGlmIChvcHRpb25zLmFsbG93X3Byb3RvY29sX3JlbGF0aXZlX3VybHMgJiYgdXJsLnN1YnN0cigwLCAyKSA9PT0gJy8vJykge1xuICAgICAgICAgICAgc3BsaXRbMF0gPSB1cmwuc3Vic3RyKDIpO1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHNwbGl0LmpvaW4oJzovLycpO1xuICAgICAgICBzcGxpdCA9IHVybC5zcGxpdCgnIycpO1xuICAgICAgICB1cmwgPSBzcGxpdC5zaGlmdCgpO1xuXG4gICAgICAgIHNwbGl0ID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgICAgIHVybCA9IHNwbGl0LnNoaWZ0KCk7XG5cbiAgICAgICAgc3BsaXQgPSB1cmwuc3BsaXQoJy8nKTtcbiAgICAgICAgdXJsID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgc3BsaXQgPSB1cmwuc3BsaXQoJ0AnKTtcbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGF1dGggPSBzcGxpdC5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKGF1dGguaW5kZXhPZignOicpID49IDAgJiYgYXV0aC5zcGxpdCgnOicpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaG9zdG5hbWUgPSBzcGxpdC5qb2luKCdAJyk7XG4gICAgICAgIHNwbGl0ID0gaG9zdG5hbWUuc3BsaXQoJzonKTtcbiAgICAgICAgaG9zdCA9IHNwbGl0LnNoaWZ0KCk7XG4gICAgICAgIGlmIChzcGxpdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBvcnRfc3RyID0gc3BsaXQuam9pbignOicpO1xuICAgICAgICAgICAgcG9ydCA9IHBhcnNlSW50KHBvcnRfc3RyLCAxMCk7XG4gICAgICAgICAgICBpZiAoIS9eWzAtOV0rJC8udGVzdChwb3J0X3N0cikgfHwgcG9ydCA8PSAwIHx8IHBvcnQgPiA2NTUzNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRvci5pc0lQKGhvc3QpICYmICF2YWxpZGF0b3IuaXNGUUROKGhvc3QsIG9wdGlvbnMpICYmXG4gICAgICAgICAgICAgICAgaG9zdCAhPT0gJ2xvY2FsaG9zdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ob3N0X3doaXRlbGlzdCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaG9zdF93aGl0ZWxpc3QuaW5kZXhPZihob3N0KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ob3N0X2JsYWNrbGlzdCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaG9zdF9ibGFja2xpc3QuaW5kZXhPZihob3N0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTUFDQWRkcmVzcyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG1hY0FkZHJlc3MudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJUCA9IGZ1bmN0aW9uIChzdHIsIHZlcnNpb24pIHtcbiAgICAgICAgdmVyc2lvbiA9IHZhbGlkYXRvci50b1N0cmluZyh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yLmlzSVAoc3RyLCA0KSB8fCB2YWxpZGF0b3IuaXNJUChzdHIsIDYpO1xuICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb24gPT09ICc0Jykge1xuICAgICAgICAgICAgaWYgKCFpcHY0TWF5YmUudGVzdChzdHIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCcuJykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzNdIDw9IDI1NTtcbiAgICAgICAgfSBlbHNlIGlmICh2ZXJzaW9uID09PSAnNicpIHtcbiAgICAgICAgICAgIHZhciBibG9ja3MgPSBzdHIuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHZhciBmb3VuZE9taXNzaW9uQmxvY2sgPSBmYWxzZTsgLy8gbWFya2VyIHRvIGluZGljYXRlIDo6XG5cbiAgICAgICAgICAgIC8vIEF0IGxlYXN0IHNvbWUgT1MgYWNjZXB0IHRoZSBsYXN0IDMyIGJpdHMgb2YgYW4gSVB2NiBhZGRyZXNzXG4gICAgICAgICAgICAvLyAoaS5lLiAyIG9mIHRoZSBibG9ja3MpIGluIElQdjQgbm90YXRpb24sIGFuZCBSRkMgMzQ5MyBzYXlzXG4gICAgICAgICAgICAvLyB0aGF0ICc6OmZmZmY6YS5iLmMuZCcgaXMgdmFsaWQgZm9yIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzc2VzLFxuICAgICAgICAgICAgLy8gYW5kICc6OmEuYi5jLmQnIGlzIGRlcHJlY2F0ZWQsIGJ1dCBhbHNvIHZhbGlkLlxuICAgICAgICAgICAgdmFyIGZvdW5kSVB2NFRyYW5zaXRpb25CbG9jayA9IHZhbGlkYXRvci5pc0lQKGJsb2Nrc1tibG9ja3MubGVuZ3RoIC0gMV0sIDQpO1xuICAgICAgICAgICAgdmFyIGV4cGVjdGVkTnVtYmVyT2ZCbG9ja3MgPSBmb3VuZElQdjRUcmFuc2l0aW9uQmxvY2sgPyA3IDogODtcblxuICAgICAgICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPiBleHBlY3RlZE51bWJlck9mQmxvY2tzKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgLy8gaW5pdGlhbCBvciBmaW5hbCA6OlxuICAgICAgICAgICAgaWYgKHN0ciA9PT0gJzo6Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHIuc3Vic3RyKDAsIDIpID09PSAnOjonKSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgZm91bmRPbWlzc2lvbkJsb2NrID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gMikgPT09ICc6OicpIHtcbiAgICAgICAgICAgICAgICBibG9ja3MucG9wKCk7XG4gICAgICAgICAgICAgICAgYmxvY2tzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGZvdW5kT21pc3Npb25CbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgLy8gdGVzdCBmb3IgYSA6OiB3aGljaCBjYW4gbm90IGJlIGF0IHRoZSBzdHJpbmcgc3RhcnQvZW5kXG4gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhvc2UgY2FzZXMgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2tzW2ldID09PSAnJyAmJiBpID4gMCAmJiBpIDwgYmxvY2tzLmxlbmd0aCAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRPbWlzc2lvbkJsb2NrKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBtdWx0aXBsZSA6OiBpbiBhZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kT21pc3Npb25CbG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZElQdjRUcmFuc2l0aW9uQmxvY2sgJiYgaSA9PSBibG9ja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpdCBoYXMgYmVlbiBjaGVja2VkIGJlZm9yZSB0aGF0IHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlzIGEgdmFsaWQgSVB2NCBhZGRyZXNzXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXB2NkJsb2NrLnRlc3QoYmxvY2tzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm91bmRPbWlzc2lvbkJsb2NrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2Nrcy5sZW5ndGggPj0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2Nrcy5sZW5ndGggPT09IGV4cGVjdGVkTnVtYmVyT2ZCbG9ja3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB2YXIgZGVmYXVsdF9mcWRuX29wdGlvbnMgPSB7XG4gICAgICAgIHJlcXVpcmVfdGxkOiB0cnVlXG4gICAgICAsIGFsbG93X3VuZGVyc2NvcmVzOiBmYWxzZVxuICAgICAgLCBhbGxvd190cmFpbGluZ19kb3Q6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0ZRRE4gPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBkZWZhdWx0X2ZxZG5fb3B0aW9ucyk7XG5cbiAgICAgICAgLyogUmVtb3ZlIHRoZSBvcHRpb25hbCB0cmFpbGluZyBkb3QgYmVmb3JlIGNoZWNraW5nIHZhbGlkaXR5ICovXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93X3RyYWlsaW5nX2RvdCAmJiBzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnLicpIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLicpO1xuICAgICAgICBpZiAob3B0aW9ucy5yZXF1aXJlX3RsZCkge1xuICAgICAgICAgICAgdmFyIHRsZCA9IHBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGggfHwgIS9eKFthLXpcXHUwMGExLVxcdWZmZmZdezIsfXx4blthLXowLTktXXsyLH0pJC9pLnRlc3QodGxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBwYXJ0LCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd191bmRlcnNjb3Jlcykge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJ19fJykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnJlcGxhY2UoL18vZywgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEvXlthLXpcXHUwMGExLVxcdWZmZmYwLTktXSskL2kudGVzdChwYXJ0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgvW1xcdWZmMDEtXFx1ZmY1ZV0vLnRlc3QocGFydCkpIHtcbiAgICAgICAgICAgICAgICAvLyBkaXNhbGxvdyBmdWxsLXdpZHRoIGNoYXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcnRbMF0gPT09ICctJyB8fCBwYXJ0W3BhcnQubGVuZ3RoIC0gMV0gPT09ICctJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJy0tLScpID49IDAgJiYgcGFydC5zbGljZSgwLCA0KSAhPT0gJ3huLS0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNCb29sZWFuID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHJldHVybiAoWyd0cnVlJywgJ2ZhbHNlJywgJzEnLCAnMCddLmluZGV4T2Yoc3RyKSA+PSAwKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQWxwaGEgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBhbHBoYS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGFscGhhbnVtZXJpYy50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc051bWVyaWMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBudW1lcmljLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRGVjaW1hbCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ciAhPT0gJycgJiYgZGVjaW1hbC50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0hleGFkZWNpbWFsID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gaGV4YWRlY2ltYWwudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNIZXhDb2xvciA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGhleGNvbG9yLnRlc3Qoc3RyKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTG93ZXJjYXNlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyID09PSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzVXBwZXJjYXNlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyID09PSBzdHIudG9VcHBlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzSW50ID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGludC50ZXN0KHN0cikgJiYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KCdtaW4nKSB8fCBzdHIgPj0gb3B0aW9ucy5taW4pICYmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbWF4JykgfHwgc3RyIDw9IG9wdGlvbnMubWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRmxvYXQgPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbG9hdC50ZXN0KHN0cikgJiYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KCdtaW4nKSB8fCBzdHIgPj0gb3B0aW9ucy5taW4pICYmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbWF4JykgfHwgc3RyIDw9IG9wdGlvbnMubWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzRGl2aXNpYmxlQnkgPSBmdW5jdGlvbiAoc3RyLCBudW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRvci50b0Zsb2F0KHN0cikgJSB2YWxpZGF0b3IudG9JbnQobnVtKSA9PT0gMDtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzTnVsbCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDA7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0xlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIG1pbiwgbWF4KSB7XG4gICAgICAgIHZhciBzdXJyb2dhdGVQYWlycyA9IHN0ci5tYXRjaCgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nKSB8fCBbXTtcbiAgICAgICAgdmFyIGxlbiA9IHN0ci5sZW5ndGggLSBzdXJyb2dhdGVQYWlycy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBsZW4gPj0gbWluICYmICh0eXBlb2YgbWF4ID09PSAndW5kZWZpbmVkJyB8fCBsZW4gPD0gbWF4KTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQnl0ZUxlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIG1pbiwgbWF4KSB7XG4gICAgICAgIHZhciBsZW4gPSBlbmNvZGVVUkkoc3RyKS5zcGxpdCgvJS4ufC4vKS5sZW5ndGggLSAxO1xuICAgICAgICByZXR1cm4gbGVuID49IG1pbiAmJiAodHlwZW9mIG1heCA9PT0gJ3VuZGVmaW5lZCcgfHwgbGVuIDw9IG1heCk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc1VVSUQgPSBmdW5jdGlvbiAoc3RyLCB2ZXJzaW9uKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gdXVpZFt2ZXJzaW9uID8gdmVyc2lvbiA6ICdhbGwnXTtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4gJiYgcGF0dGVybi50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0KHN0cikge1xuICAgICAgICB2YXIgaXNvODYwMVBhcnRzID0gc3RyLm1hdGNoKGlzbzg2MDEpXG4gICAgICAgICAgLCB0aW1lem9uZSwgc2lnbiwgaG91cnMsIG1pbnV0ZXM7XG4gICAgICAgIGlmICghaXNvODYwMVBhcnRzKSB7XG4gICAgICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHRpbWV6b25lID0gc3RyLm1hdGNoKC8oPzpcXHN8Z210XFxzKikoLXxcXCspKFxcZHsxLDR9KShcXHN8JCkvKTtcbiAgICAgICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmluZGV4T2YoJ2dtdCcpICE9PSAtMSA/IDAgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2lnbiA9IHRpbWV6b25lWzFdO1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRpbWV6b25lWzJdO1xuICAgICAgICAgICAgaWYgKG9mZnNldC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAnMCcgKyBvZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0Lmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSAwO1xuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBwYXJzZUludChvZmZzZXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBob3VycyA9IHBhcnNlSW50KG9mZnNldC5zbGljZSgwLCAyKSk7XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IHBhcnNlSW50KG9mZnNldC5zbGljZSgyLCA0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lem9uZSA9IGlzbzg2MDFQYXJ0c1syMV07XG4gICAgICAgICAgICBpZiAoIXRpbWV6b25lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZXpvbmUgPT09ICd6JyB8fCB0aW1lem9uZSA9PT0gJ1onKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaWduID0gaXNvODYwMVBhcnRzWzIyXTtcbiAgICAgICAgICAgIGlmICh0aW1lem9uZS5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBwYXJzZUludChpc284NjAxUGFydHNbMjNdKTtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQoaXNvODYwMVBhcnRzWzI0XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhvdXJzID0gMDtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQoaXNvODYwMVBhcnRzWzIzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChob3VycyAqIDYwICsgbWludXRlcykgKiAoc2lnbiA9PT0gJy0nID8gMSA6IC0xKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3IuaXNEYXRlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZERhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKHN0cikpO1xuICAgICAgICBpZiAoaXNOYU4obm9ybWFsaXplZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub3JtYWxpemVkRGF0ZSBpcyBpbiB0aGUgdXNlcidzIHRpbWV6b25lLiBBcHBseSB0aGUgaW5wdXRcbiAgICAgICAgLy8gdGltZXpvbmUgb2Zmc2V0IHRvIHRoZSBkYXRlIHNvIHRoYXQgdGhlIHllYXIgYW5kIGRheSBtYXRjaFxuICAgICAgICAvLyB0aGUgaW5wdXRcbiAgICAgICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXQoc3RyKTtcbiAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgdGltZXpvbmVEaWZmZXJlbmNlID0gbm9ybWFsaXplZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAtXG4gICAgICAgICAgICAgICAgdGltZXpvbmVPZmZzZXQ7XG4gICAgICAgICAgICBub3JtYWxpemVkRGF0ZSA9IG5ldyBEYXRlKG5vcm1hbGl6ZWREYXRlLmdldFRpbWUoKSArXG4gICAgICAgICAgICAgICAgNjAwMDAgKiB0aW1lem9uZURpZmZlcmVuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRheSA9IFN0cmluZyhub3JtYWxpemVkRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB2YXIgZGF5T3JZZWFyLCBkYXlPclllYXJNYXRjaGVzLCB5ZWFyO1xuICAgICAgICAvL2NoZWNrIGZvciB2YWxpZCBkb3VibGUgZGlnaXRzIHRoYXQgY291bGQgYmUgbGF0ZSBkYXlzXG4gICAgICAgIC8vY2hlY2sgZm9yIGFsbCBtYXRjaGVzIHNpbmNlIGEgc3RyaW5nIGxpa2UgJzEyLzIzJyBpcyBhIHZhbGlkIGRhdGVcbiAgICAgICAgLy9pZ25vcmUgZXZlcnl0aGluZyB3aXRoIG5lYXJieSBjb2xvbnNcbiAgICAgICAgZGF5T3JZZWFyTWF0Y2hlcyA9IHN0ci5tYXRjaCgvKF58W146XFxkXSlbMjNdXFxkKFteOlxcZF18JCkvZyk7XG4gICAgICAgIGlmICghZGF5T3JZZWFyTWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZGF5T3JZZWFyID0gZGF5T3JZZWFyTWF0Y2hlcy5tYXAoZnVuY3Rpb24oZGlnaXRTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBkaWdpdFN0cmluZy5tYXRjaCgvXFxkKy9nKVswXTtcbiAgICAgICAgfSkuam9pbignLycpO1xuXG4gICAgICAgIHllYXIgPSBTdHJpbmcobm9ybWFsaXplZERhdGUuZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTIpO1xuICAgICAgICBpZiAoZGF5T3JZZWFyID09PSBkYXkgfHwgZGF5T3JZZWFyID09PSB5ZWFyKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoZGF5T3JZZWFyID09PSAoZGF5ICsgJy8nICsgeWVhcikpIHx8IChkYXlPclllYXIgPT09ICh5ZWFyICsgJy8nICsgZGF5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQWZ0ZXIgPSBmdW5jdGlvbiAoc3RyLCBkYXRlKSB7XG4gICAgICAgIHZhciBjb21wYXJpc29uID0gdmFsaWRhdG9yLnRvRGF0ZShkYXRlIHx8IG5ldyBEYXRlKCkpXG4gICAgICAgICAgLCBvcmlnaW5hbCA9IHZhbGlkYXRvci50b0RhdGUoc3RyKTtcbiAgICAgICAgcmV0dXJuICEhKG9yaWdpbmFsICYmIGNvbXBhcmlzb24gJiYgb3JpZ2luYWwgPiBjb21wYXJpc29uKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzQmVmb3JlID0gZnVuY3Rpb24gKHN0ciwgZGF0ZSkge1xuICAgICAgICB2YXIgY29tcGFyaXNvbiA9IHZhbGlkYXRvci50b0RhdGUoZGF0ZSB8fCBuZXcgRGF0ZSgpKVxuICAgICAgICAgICwgb3JpZ2luYWwgPSB2YWxpZGF0b3IudG9EYXRlKHN0cik7XG4gICAgICAgIHJldHVybiAhIShvcmlnaW5hbCAmJiBjb21wYXJpc29uICYmIG9yaWdpbmFsIDwgY29tcGFyaXNvbik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0luID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb25zKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gdmFsaWRhdG9yLnRvU3RyaW5nKG9wdGlvbnNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2Yoc3RyKSA+PSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoc3RyKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmluZGV4T2Yoc3RyKSA+PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzV2hpdGVsaXN0ZWQgPSBmdW5jdGlvbiAoc3RyLCBjaGFycykge1xuICAgICAgICBmb3IgKHZhciBpID0gc3RyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoY2hhcnMuaW5kZXhPZihzdHJbaV0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNDcmVkaXRDYXJkID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgc2FuaXRpemVkID0gc3RyLnJlcGxhY2UoL1teMC05XSsvZywgJycpO1xuICAgICAgICBpZiAoIWNyZWRpdENhcmQudGVzdChzYW5pdGl6ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1bSA9IDAsIGRpZ2l0LCB0bXBOdW0sIHNob3VsZERvdWJsZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHNhbml0aXplZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgZGlnaXQgPSBzYW5pdGl6ZWQuc3Vic3RyaW5nKGksIChpICsgMSkpO1xuICAgICAgICAgICAgdG1wTnVtID0gcGFyc2VJbnQoZGlnaXQsIDEwKTtcbiAgICAgICAgICAgIGlmIChzaG91bGREb3VibGUpIHtcbiAgICAgICAgICAgICAgICB0bXBOdW0gKj0gMjtcbiAgICAgICAgICAgICAgICBpZiAodG1wTnVtID49IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSAoKHRtcE51bSAlIDEwKSArIDEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSB0bXBOdW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hvdWxkRG91YmxlID0gIXNob3VsZERvdWJsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISEoKHN1bSAlIDEwKSA9PT0gMCA/IHNhbml0aXplZCA6IGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmlzSVNJTiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFpc2luLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoZWNrc3VtU3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKGNoYXJhY3Rlcikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGNoYXJhY3RlciwgMzYpO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgc3VtID0gMCwgZGlnaXQsIHRtcE51bSwgc2hvdWxkRG91YmxlID0gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoZWNrc3VtU3RyLmxlbmd0aCAtIDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBkaWdpdCA9IGNoZWNrc3VtU3RyLnN1YnN0cmluZyhpLCAoaSArIDEpKTtcbiAgICAgICAgICAgIHRtcE51bSA9IHBhcnNlSW50KGRpZ2l0LCAxMCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkRG91YmxlKSB7XG4gICAgICAgICAgICAgICAgdG1wTnVtICo9IDI7XG4gICAgICAgICAgICAgICAgaWYgKHRtcE51bSA+PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtICsgMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdG1wTnVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3VtICs9IHRtcE51bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3VsZERvdWJsZSA9ICFzaG91bGREb3VibGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gMSksIDEwKSA9PT0gKDEwMDAwIC0gc3VtKSAlIDEwO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJU0JOID0gZnVuY3Rpb24gKHN0ciwgdmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uID0gdmFsaWRhdG9yLnRvU3RyaW5nKHZlcnNpb24pO1xuICAgICAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNJU0JOKHN0ciwgMTApIHx8IHZhbGlkYXRvci5pc0lTQk4oc3RyLCAxMyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNhbml0aXplZCA9IHN0ci5yZXBsYWNlKC9bXFxzLV0rL2csICcnKVxuICAgICAgICAgICwgY2hlY2tzdW0gPSAwLCBpO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gJzEwJykge1xuICAgICAgICAgICAgaWYgKCFpc2JuMTBNYXliZS50ZXN0KHNhbml0aXplZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gKGkgKyAxKSAqIHNhbml0aXplZC5jaGFyQXQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2FuaXRpemVkLmNoYXJBdCg5KSA9PT0gJ1gnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gMTAgKiAxMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0gKz0gMTAgKiBzYW5pdGl6ZWQuY2hhckF0KDkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChjaGVja3N1bSAlIDExKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXNhbml0aXplZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlICBpZiAodmVyc2lvbiA9PT0gJzEzJykge1xuICAgICAgICAgICAgaWYgKCFpc2JuMTNNYXliZS50ZXN0KHNhbml0aXplZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZmFjdG9yID0gWyAxLCAzIF07XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgICAgIGNoZWNrc3VtICs9IGZhY3RvcltpICUgMl0gKiBzYW5pdGl6ZWQuY2hhckF0KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNhbml0aXplZC5jaGFyQXQoMTIpIC0gKCgxMCAtIChjaGVja3N1bSAlIDEwKSkgJSAxMCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFzYW5pdGl6ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNNb2JpbGVQaG9uZSA9IGZ1bmN0aW9uKHN0ciwgbG9jYWxlKSB7XG4gICAgICAgIGlmIChsb2NhbGUgaW4gcGhvbmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcGhvbmVzW2xvY2FsZV0udGVzdChzdHIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmF1bHRfY3VycmVuY3lfb3B0aW9ucyA9IHtcbiAgICAgICAgc3ltYm9sOiAnJCdcbiAgICAgICwgcmVxdWlyZV9zeW1ib2w6IGZhbHNlXG4gICAgICAsIGFsbG93X3NwYWNlX2FmdGVyX3N5bWJvbDogZmFsc2VcbiAgICAgICwgc3ltYm9sX2FmdGVyX2RpZ2l0czogZmFsc2VcbiAgICAgICwgYWxsb3dfbmVnYXRpdmVzOiB0cnVlXG4gICAgICAsIHBhcmVuc19mb3JfbmVnYXRpdmVzOiBmYWxzZVxuICAgICAgLCBuZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHM6IGZhbHNlXG4gICAgICAsIG5lZ2F0aXZlX3NpZ25fYWZ0ZXJfZGlnaXRzOiBmYWxzZVxuICAgICAgLCBhbGxvd19uZWdhdGl2ZV9zaWduX3BsYWNlaG9sZGVyOiBmYWxzZVxuICAgICAgLCB0aG91c2FuZHNfc2VwYXJhdG9yOiAnLCdcbiAgICAgICwgZGVjaW1hbF9zZXBhcmF0b3I6ICcuJ1xuICAgICAgLCBhbGxvd19zcGFjZV9hZnRlcl9kaWdpdHM6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0N1cnJlbmN5ID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF9jdXJyZW5jeV9vcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gY3VycmVuY3lSZWdleChvcHRpb25zKS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0pTT04gPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICAgICAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc011bHRpYnl0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpYnl0ZS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0FzY2lpID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gYXNjaWkudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNGdWxsV2lkdGggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBmdWxsV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNIYWxmV2lkdGggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBoYWxmV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNWYXJpYWJsZVdpZHRoID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gZnVsbFdpZHRoLnRlc3Qoc3RyKSAmJiBoYWxmV2lkdGgudGVzdChzdHIpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNTdXJyb2dhdGVQYWlyID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3Vycm9nYXRlUGFpci50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc0Jhc2U2NCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGJhc2U2NC50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5pc01vbmdvSWQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNIZXhhZGVjaW1hbChzdHIpICYmIHN0ci5sZW5ndGggPT09IDI0O1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuaXNJU084NjAxID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gaXNvODYwMS50ZXN0KHN0cik7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5sdHJpbSA9IGZ1bmN0aW9uIChzdHIsIGNoYXJzKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gY2hhcnMgPyBuZXcgUmVnRXhwKCdeWycgKyBjaGFycyArICddKycsICdnJykgOiAvXlxccysvZztcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sICcnKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLnJ0cmltID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgdmFyIHBhdHRlcm4gPSBjaGFycyA/IG5ldyBSZWdFeHAoJ1snICsgY2hhcnMgKyAnXSskJywgJ2cnKSA6IC9cXHMrJC9nO1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocGF0dGVybiwgJycpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IudHJpbSA9IGZ1bmN0aW9uIChzdHIsIGNoYXJzKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gY2hhcnMgPyBuZXcgUmVnRXhwKCdeWycgKyBjaGFycyArICddK3xbJyArIGNoYXJzICsgJ10rJCcsICdnJykgOiAvXlxccyt8XFxzKyQvZztcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sICcnKTtcbiAgICB9O1xuXG4gICAgdmFsaWRhdG9yLmVzY2FwZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIChzdHIucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyYjeDI3OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICcmI3gyRjsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYC9nLCAnJiM5NjsnKSk7XG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5zdHJpcExvdyA9IGZ1bmN0aW9uIChzdHIsIGtlZXBfbmV3X2xpbmVzKSB7XG4gICAgICAgIHZhciBjaGFycyA9IGtlZXBfbmV3X2xpbmVzID8gJ1xcXFx4MDAtXFxcXHgwOVxcXFx4MEJcXFxceDBDXFxcXHgwRS1cXFxceDFGXFxcXHg3RicgOiAnXFxcXHgwMC1cXFxceDFGXFxcXHg3Ric7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuYmxhY2tsaXN0KHN0ciwgY2hhcnMpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3Iud2hpdGVsaXN0ID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1teJyArIGNoYXJzICsgJ10rJywgJ2cnKSwgJycpO1xuICAgIH07XG5cbiAgICB2YWxpZGF0b3IuYmxhY2tsaXN0ID0gZnVuY3Rpb24gKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1snICsgY2hhcnMgKyAnXSsnLCAnZycpLCAnJyk7XG4gICAgfTtcblxuICAgIHZhciBkZWZhdWx0X25vcm1hbGl6ZV9lbWFpbF9vcHRpb25zID0ge1xuICAgICAgICBsb3dlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlbW92ZV9kb3RzOiB0cnVlLFxuICAgICAgICByZW1vdmVfZXh0ZW5zaW9uOiB0cnVlXG4gICAgfTtcblxuICAgIHZhbGlkYXRvci5ub3JtYWxpemVFbWFpbCA9IGZ1bmN0aW9uIChlbWFpbCwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVmYXVsdF9ub3JtYWxpemVfZW1haWxfb3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWRhdG9yLmlzRW1haWwoZW1haWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcnRzID0gZW1haWwuc3BsaXQoJ0AnLCAyKTtcbiAgICAgICAgcGFydHNbMV0gPSBwYXJ0c1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAocGFydHNbMV0gPT09ICdnbWFpbC5jb20nIHx8IHBhcnRzWzFdID09PSAnZ29vZ2xlbWFpbC5jb20nKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZW1vdmVfZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgcGFydHNbMF0gPSBwYXJ0c1swXS5zcGxpdCgnKycpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVtb3ZlX2RvdHMpIHtcbiAgICAgICAgICAgICAgICBwYXJ0c1swXSA9IHBhcnRzWzBdLnJlcGxhY2UoL1xcLi9nLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXBhcnRzWzBdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHBhcnRzWzFdID0gJ2dtYWlsLmNvbSc7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sb3dlcmNhc2UpIHtcbiAgICAgICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydHMuam9pbignQCcpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBtZXJnZShvYmosIGRlZmF1bHRzKSB7XG4gICAgICAgIG9iaiA9IG9iaiB8fCB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbmN5UmVnZXgob3B0aW9ucykge1xuICAgICAgICB2YXIgc3ltYm9sID0gJyhcXFxcJyArIG9wdGlvbnMuc3ltYm9sLnJlcGxhY2UoL1xcLi9nLCAnXFxcXC4nKSArICcpJyArIChvcHRpb25zLnJlcXVpcmVfc3ltYm9sID8gJycgOiAnPycpXG4gICAgICAgICAgICAsIG5lZ2F0aXZlID0gJy0/J1xuICAgICAgICAgICAgLCB3aG9sZV9kb2xsYXJfYW1vdW50X3dpdGhvdXRfc2VwID0gJ1sxLTldXFxcXGQqJ1xuICAgICAgICAgICAgLCB3aG9sZV9kb2xsYXJfYW1vdW50X3dpdGhfc2VwID0gJ1sxLTldXFxcXGR7MCwyfShcXFxcJyArIG9wdGlvbnMudGhvdXNhbmRzX3NlcGFyYXRvciArICdcXFxcZHszfSkqJ1xuICAgICAgICAgICAgLCB2YWxpZF93aG9sZV9kb2xsYXJfYW1vdW50cyA9IFsnMCcsIHdob2xlX2RvbGxhcl9hbW91bnRfd2l0aG91dF9zZXAsIHdob2xlX2RvbGxhcl9hbW91bnRfd2l0aF9zZXBdXG4gICAgICAgICAgICAsIHdob2xlX2RvbGxhcl9hbW91bnQgPSAnKCcgKyB2YWxpZF93aG9sZV9kb2xsYXJfYW1vdW50cy5qb2luKCd8JykgKyAnKT8nXG4gICAgICAgICAgICAsIGRlY2ltYWxfYW1vdW50ID0gJyhcXFxcJyArIG9wdGlvbnMuZGVjaW1hbF9zZXBhcmF0b3IgKyAnXFxcXGR7Mn0pPyc7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gd2hvbGVfZG9sbGFyX2Ftb3VudCArIGRlY2ltYWxfYW1vdW50O1xuICAgICAgICAvLyBkZWZhdWx0IGlzIG5lZ2F0aXZlIHNpZ24gYmVmb3JlIHN5bWJvbCwgYnV0IHRoZXJlIGFyZSB0d28gb3RoZXIgb3B0aW9ucyAoYmVzaWRlcyBwYXJlbnMpXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93X25lZ2F0aXZlcyAmJiAhb3B0aW9ucy5wYXJlbnNfZm9yX25lZ2F0aXZlcykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmVnYXRpdmVfc2lnbl9hZnRlcl9kaWdpdHMpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuICs9IG5lZ2F0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5uZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHMpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbmVnYXRpdmUgKyBwYXR0ZXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNvdXRoIEFmcmljYW4gUmFuZCwgZm9yIGV4YW1wbGUsIHVzZXMgUiAxMjMgKHNwYWNlKSBhbmQgUi0xMjMgKG5vIHNwYWNlKVxuICAgICAgICBpZiAob3B0aW9ucy5hbGxvd19uZWdhdGl2ZV9zaWduX3BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gJyggKD8hXFxcXC0pKT8nICsgcGF0dGVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLmFsbG93X3NwYWNlX2FmdGVyX3N5bWJvbCkge1xuICAgICAgICAgICAgcGF0dGVybiA9ICcgPycgKyBwYXR0ZXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuYWxsb3dfc3BhY2VfYWZ0ZXJfZGlnaXRzKSB7XG4gICAgICAgICAgICBwYXR0ZXJuICs9ICcoICg/ISQpKT8nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnN5bWJvbF9hZnRlcl9kaWdpdHMpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gKz0gc3ltYm9sO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybiA9IHN5bWJvbCArIHBhdHRlcm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfbmVnYXRpdmVzKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wYXJlbnNfZm9yX25lZ2F0aXZlcykge1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAnKFxcXFwoJyArIHBhdHRlcm4gKyAnXFxcXCl8JyArIHBhdHRlcm4gKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghKG9wdGlvbnMubmVnYXRpdmVfc2lnbl9iZWZvcmVfZGlnaXRzIHx8IG9wdGlvbnMubmVnYXRpdmVfc2lnbl9hZnRlcl9kaWdpdHMpKSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IG5lZ2F0aXZlICsgcGF0dGVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAvLyBlbnN1cmUgdGhlcmUncyBhIGRvbGxhciBhbmQvb3IgZGVjaW1hbCBhbW91bnQsIGFuZCB0aGF0IGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIHNwYWNlIG9yIGEgbmVnYXRpdmUgc2lnbiBmb2xsb3dlZCBieSBhIHNwYWNlXG4gICAgICAgICAgICAnKD8hLT8gKSg/PS4qXFxcXGQpJyArXG4gICAgICAgICAgICBwYXR0ZXJuICtcbiAgICAgICAgICAgICckJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5pbml0KCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yO1xuXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIElOVkFMSURfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIHR5cGUgezB9IGJ1dCBmb3VuZCB0eXBlIHsxfVwiLFxuICAgIElOVkFMSURfRk9STUFUOiAgICAgICAgICAgICAgICAgICAgICAgICBcIk9iamVjdCBkaWRuJ3QgcGFzcyB2YWxpZGF0aW9uIGZvciBmb3JtYXQgezB9OiB7MX1cIixcbiAgICBFTlVNX01JU01BVENIOiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJObyBlbnVtIG1hdGNoIGZvcjogezB9XCIsXG4gICAgQU5ZX09GX01JU1NJTkc6ICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGF0YSBkb2VzIG5vdCBtYXRjaCBhbnkgc2NoZW1hcyBmcm9tICdhbnlPZidcIixcbiAgICBPTkVfT0ZfTUlTU0lORzogICAgICAgICAgICAgICAgICAgICAgICAgXCJEYXRhIGRvZXMgbm90IG1hdGNoIGFueSBzY2hlbWFzIGZyb20gJ29uZU9mJ1wiLFxuICAgIE9ORV9PRl9NVUxUSVBMRTogICAgICAgICAgICAgICAgICAgICAgICBcIkRhdGEgaXMgdmFsaWQgYWdhaW5zdCBtb3JlIHRoYW4gb25lIHNjaGVtYSBmcm9tICdvbmVPZidcIixcbiAgICBOT1RfUEFTU0VEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEYXRhIG1hdGNoZXMgc2NoZW1hIGZyb20gJ25vdCdcIixcblxuICAgIC8vIEFycmF5IGVycm9yc1xuICAgIEFSUkFZX0xFTkdUSF9TSE9SVDogICAgICAgICAgICAgICAgICAgICBcIkFycmF5IGlzIHRvbyBzaG9ydCAoezB9KSwgbWluaW11bSB7MX1cIixcbiAgICBBUlJBWV9MRU5HVEhfTE9ORzogICAgICAgICAgICAgICAgICAgICAgXCJBcnJheSBpcyB0b28gbG9uZyAoezB9KSwgbWF4aW11bSB7MX1cIixcbiAgICBBUlJBWV9VTklRVUU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcnJheSBpdGVtcyBhcmUgbm90IHVuaXF1ZSAoaW5kZXhlcyB7MH0gYW5kIHsxfSlcIixcbiAgICBBUlJBWV9BRERJVElPTkFMX0lURU1TOiAgICAgICAgICAgICAgICAgXCJBZGRpdGlvbmFsIGl0ZW1zIG5vdCBhbGxvd2VkXCIsXG5cbiAgICAvLyBOdW1lcmljIGVycm9yc1xuICAgIE1VTFRJUExFX09GOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlZhbHVlIHswfSBpcyBub3QgYSBtdWx0aXBsZSBvZiB7MX1cIixcbiAgICBNSU5JTVVNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJWYWx1ZSB7MH0gaXMgbGVzcyB0aGFuIG1pbmltdW0gezF9XCIsXG4gICAgTUlOSU1VTV9FWENMVVNJVkU6ICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWUgezB9IGlzIGVxdWFsIG9yIGxlc3MgdGhhbiBleGNsdXNpdmUgbWluaW11bSB7MX1cIixcbiAgICBNQVhJTVVNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJWYWx1ZSB7MH0gaXMgZ3JlYXRlciB0aGFuIG1heGltdW0gezF9XCIsXG4gICAgTUFYSU1VTV9FWENMVVNJVkU6ICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWUgezB9IGlzIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiBleGNsdXNpdmUgbWF4aW11bSB7MX1cIixcblxuICAgIC8vIE9iamVjdCBlcnJvcnNcbiAgICBPQkpFQ1RfUFJPUEVSVElFU19NSU5JTVVNOiAgICAgICAgICAgICAgXCJUb28gZmV3IHByb3BlcnRpZXMgZGVmaW5lZCAoezB9KSwgbWluaW11bSB7MX1cIixcbiAgICBPQkpFQ1RfUFJPUEVSVElFU19NQVhJTVVNOiAgICAgICAgICAgICAgXCJUb28gbWFueSBwcm9wZXJ0aWVzIGRlZmluZWQgKHswfSksIG1heGltdW0gezF9XCIsXG4gICAgT0JKRUNUX01JU1NJTkdfUkVRVUlSRURfUFJPUEVSVFk6ICAgICAgIFwiTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eTogezB9XCIsXG4gICAgT0JKRUNUX0FERElUSU9OQUxfUFJPUEVSVElFUzogICAgICAgICAgIFwiQWRkaXRpb25hbCBwcm9wZXJ0aWVzIG5vdCBhbGxvd2VkOiB7MH1cIixcbiAgICBPQkpFQ1RfREVQRU5ERU5DWV9LRVk6ICAgICAgICAgICAgICAgICAgXCJEZXBlbmRlbmN5IGZhaWxlZCAtIGtleSBtdXN0IGV4aXN0OiB7MH0gKGR1ZSB0byBrZXk6IHsxfSlcIixcblxuICAgIC8vIFN0cmluZyBlcnJvcnNcbiAgICBNSU5fTEVOR1RIOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgaXMgdG9vIHNob3J0ICh7MH0gY2hhcnMpLCBtaW5pbXVtIHsxfVwiLFxuICAgIE1BWF9MRU5HVEg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN0cmluZyBpcyB0b28gbG9uZyAoezB9IGNoYXJzKSwgbWF4aW11bSB7MX1cIixcbiAgICBQQVRURVJOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiB7MH06IHsxfVwiLFxuXG4gICAgLy8gU2NoZW1hIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgS0VZV09SRF9UWVBFX0VYUEVDVEVEOiAgICAgICAgICAgICAgICAgIFwiS2V5d29yZCAnezB9JyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICd7MX0nXCIsXG4gICAgS0VZV09SRF9VTkRFRklORURfU1RSSUNUOiAgICAgICAgICAgICAgIFwiS2V5d29yZCAnezB9JyBtdXN0IGJlIGRlZmluZWQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBLRVlXT1JEX1VORVhQRUNURUQ6ICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIGlzIG5vdCBleHBlY3RlZCB0byBhcHBlYXIgaW4gdGhlIHNjaGVtYVwiLFxuICAgIEtFWVdPUkRfTVVTVF9CRTogICAgICAgICAgICAgICAgICAgICAgICBcIktleXdvcmQgJ3swfScgbXVzdCBiZSB7MX1cIixcbiAgICBLRVlXT1JEX0RFUEVOREVOQ1k6ICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIHJlcXVpcmVzIGtleXdvcmQgJ3sxfSdcIixcbiAgICBLRVlXT1JEX1BBVFRFUk46ICAgICAgICAgICAgICAgICAgICAgICAgXCJLZXl3b3JkICd7MH0nIGlzIG5vdCBhIHZhbGlkIFJlZ0V4cCBwYXR0ZXJuOiB7MX1cIixcbiAgICBLRVlXT1JEX1ZBTFVFX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgXCJFYWNoIGVsZW1lbnQgb2Yga2V5d29yZCAnezB9JyBhcnJheSBtdXN0IGJlIGEgJ3sxfSdcIixcbiAgICBVTktOT1dOX0ZPUk1BVDogICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZSBpcyBubyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBmb3JtYXQgJ3swfSdcIixcbiAgICBDVVNUT01fTU9ERV9GT1JDRV9QUk9QRVJUSUVTOiAgICAgICAgICAgXCJ7MH0gbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHByb3BlcnR5IGlmIHByZXNlbnRcIixcblxuICAgIC8vIFJlbW90ZSBlcnJvcnNcbiAgICBSRUZfVU5SRVNPTFZFRDogICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWZlcmVuY2UgaGFzIG5vdCBiZWVuIHJlc29sdmVkIGR1cmluZyBjb21waWxhdGlvbjogezB9XCIsXG4gICAgVU5SRVNPTFZBQkxFX1JFRkVSRU5DRTogICAgICAgICAgICAgICAgIFwiUmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogezB9XCIsXG4gICAgU0NIRU1BX05PVF9SRUFDSEFCTEU6ICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdG9yIHdhcyBub3QgYWJsZSB0byByZWFkIHNjaGVtYSB3aXRoIHVyaTogezB9XCIsXG4gICAgU0NIRU1BX1RZUEVfRVhQRUNURUQ6ICAgICAgICAgICAgICAgICAgIFwiU2NoZW1hIGlzIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgJ29iamVjdCdcIixcbiAgICBTQ0hFTUFfTk9UX0FOX09CSkVDVDogICAgICAgICAgICAgICAgICAgXCJTY2hlbWEgaXMgbm90IGFuIG9iamVjdDogezB9XCIsXG4gICAgQVNZTkNfVElNRU9VVDogICAgICAgICAgICAgICAgICAgICAgICAgIFwiezB9IGFzeW5jaHJvbm91cyB0YXNrKHMpIGhhdmUgdGltZWQgb3V0IGFmdGVyIHsxfSBtc1wiLFxuICAgIFBBUkVOVF9TQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6ICAgICAgICBcIlNjaGVtYSBmYWlsZWQgdG8gdmFsaWRhdGUgYWdhaW5zdCBpdHMgcGFyZW50IHNjaGVtYSwgc2VlIGlubmVyIGVycm9ycyBmb3IgZGV0YWlscy5cIixcbiAgICBSRU1PVEVfTk9UX1ZBTElEOiAgICAgICAgICAgICAgICAgICAgICAgXCJSZW1vdGUgcmVmZXJlbmNlIGRpZG4ndCBjb21waWxlIHN1Y2Nlc3NmdWxseTogezB9XCJcblxufTtcbiIsIi8qanNoaW50IG1heGxlbjogZmFsc2UqL1xuXG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZShcInZhbGlkYXRvclwiKTtcblxudmFyIEZvcm1hdFZhbGlkYXRvcnMgPSB7XG4gICAgXCJkYXRlXCI6IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgICAgICB2YXIgbWF0Y2hlcyA9IC9eKFswLTldezR9KS0oWzAtOV17Mn0pLShbMC05XXsyfSkkLy5leGVjKGRhdGUpO1xuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhciB5ZWFyID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgLy8gdmFyIG1vbnRoID0gbWF0Y2hlc1syXTtcbiAgICAgICAgLy8gdmFyIGRheSA9IG1hdGNoZXNbM107XG4gICAgICAgIGlmIChtYXRjaGVzWzJdIDwgXCIwMVwiIHx8IG1hdGNoZXNbMl0gPiBcIjEyXCIgfHwgbWF0Y2hlc1szXSA8IFwiMDFcIiB8fCBtYXRjaGVzWzNdID4gXCIzMVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBcImRhdGUtdGltZVwiOiBmdW5jdGlvbiAoZGF0ZVRpbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGF0ZS10aW1lIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgICAgICB2YXIgcyA9IGRhdGVUaW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJ0XCIpO1xuICAgICAgICBpZiAoIUZvcm1hdFZhbGlkYXRvcnMuZGF0ZShzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtYXRjaGVzID0gL14oWzAtOV17Mn0pOihbMC05XXsyfSk6KFswLTldezJ9KSguWzAtOV0rKT8oenwoWystXVswLTldezJ9OlswLTldezJ9KSkkLy5leGVjKHNbMV0pO1xuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhciBob3VyID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgLy8gdmFyIG1pbnV0ZSA9IG1hdGNoZXNbMl07XG4gICAgICAgIC8vIHZhciBzZWNvbmQgPSBtYXRjaGVzWzNdO1xuICAgICAgICAvLyB2YXIgZnJhY3Rpb24gPSBtYXRjaGVzWzRdO1xuICAgICAgICAvLyB2YXIgdGltZXpvbmUgPSBtYXRjaGVzWzVdO1xuICAgICAgICBpZiAobWF0Y2hlc1sxXSA+IFwiMjNcIiB8fCBtYXRjaGVzWzJdID4gXCI1OVwiIHx8IG1hdGNoZXNbM10gPiBcIjU5XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFwiZW1haWxcIjogZnVuY3Rpb24gKGVtYWlsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW1haWwgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNFbWFpbChlbWFpbCwgeyBcInJlcXVpcmVfdGxkXCI6IHRydWUgfSk7XG4gICAgfSxcbiAgICBcImhvc3RuYW1lXCI6IGZ1bmN0aW9uIChob3N0bmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIGhvc3RuYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvKlxuICAgICAgICAgICAgaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI2FuY2hvcjExNFxuICAgICAgICAgICAgQSBzdHJpbmcgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCB0aGlzIGF0dHJpYnV0ZSBpZiBpdCBpcyBhIHZhbGlkXG4gICAgICAgICAgICByZXByZXNlbnRhdGlvbiBmb3IgYW4gSW50ZXJuZXQgaG9zdCBuYW1lLCBhcyBkZWZpbmVkIGJ5IFJGQyAxMDM0LCBzZWN0aW9uIDMuMSBbUkZDMTAzNF0uXG5cbiAgICAgICAgICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzEwMzQjc2VjdGlvbi0zLjVcblxuICAgICAgICAgICAgPGRpZ2l0PiA6Oj0gYW55IG9uZSBvZiB0aGUgdGVuIGRpZ2l0cyAwIHRocm91Z2ggOVxuICAgICAgICAgICAgdmFyIGRpZ2l0ID0gL1swLTldLztcblxuICAgICAgICAgICAgPGxldHRlcj4gOjo9IGFueSBvbmUgb2YgdGhlIDUyIGFscGhhYmV0aWMgY2hhcmFjdGVycyBBIHRocm91Z2ggWiBpbiB1cHBlciBjYXNlIGFuZCBhIHRocm91Z2ggeiBpbiBsb3dlciBjYXNlXG4gICAgICAgICAgICB2YXIgbGV0dGVyID0gL1thLXpBLVpdLztcblxuICAgICAgICAgICAgPGxldC1kaWc+IDo6PSA8bGV0dGVyPiB8IDxkaWdpdD5cbiAgICAgICAgICAgIHZhciBsZXREaWcgPSAvWzAtOWEtekEtWl0vO1xuXG4gICAgICAgICAgICA8bGV0LWRpZy1oeXA+IDo6PSA8bGV0LWRpZz4gfCBcIi1cIlxuICAgICAgICAgICAgdmFyIGxldERpZ0h5cCA9IC9bLTAtOWEtekEtWl0vO1xuXG4gICAgICAgICAgICA8bGRoLXN0cj4gOjo9IDxsZXQtZGlnLWh5cD4gfCA8bGV0LWRpZy1oeXA+IDxsZGgtc3RyPlxuICAgICAgICAgICAgdmFyIGxkaFN0ciA9IC9bLTAtOWEtekEtWl0rLztcblxuICAgICAgICAgICAgPGxhYmVsPiA6Oj0gPGxldHRlcj4gWyBbIDxsZGgtc3RyPiBdIDxsZXQtZGlnPiBdXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSAvW2EtekEtWl0oKFstMC05YS16QS1aXSspP1swLTlhLXpBLVpdKT8vO1xuXG4gICAgICAgICAgICA8c3ViZG9tYWluPiA6Oj0gPGxhYmVsPiB8IDxzdWJkb21haW4+IFwiLlwiIDxsYWJlbD5cbiAgICAgICAgICAgIHZhciBzdWJkb21haW4gPSAvXlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KFxcLlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KSokLztcblxuICAgICAgICAgICAgPGRvbWFpbj4gOjo9IDxzdWJkb21haW4+IHwgXCIgXCJcbiAgICAgICAgICAgIHZhciBkb21haW4gPSBudWxsO1xuICAgICAgICAqL1xuICAgICAgICB2YXIgdmFsaWQgPSAvXlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KFxcLlthLXpBLVpdKChbLTAtOWEtekEtWl0rKT9bMC05YS16QS1aXSk/KSokLy50ZXN0KGhvc3RuYW1lKTtcbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAvLyB0aGUgc3VtIG9mIGFsbCBsYWJlbCBvY3RldHMgYW5kIGxhYmVsIGxlbmd0aHMgaXMgbGltaXRlZCB0byAyNTUuXG4gICAgICAgICAgICBpZiAoaG9zdG5hbWUubGVuZ3RoID4gMjU1KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAgICAgLy8gRWFjaCBub2RlIGhhcyBhIGxhYmVsLCB3aGljaCBpcyB6ZXJvIHRvIDYzIG9jdGV0cyBpbiBsZW5ndGhcbiAgICAgICAgICAgIHZhciBsYWJlbHMgPSBob3N0bmFtZS5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKykgeyBpZiAobGFiZWxzW2ldLmxlbmd0aCA+IDYzKSB7IHJldHVybiBmYWxzZTsgfSB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH0sXG4gICAgXCJob3N0LW5hbWVcIjogZnVuY3Rpb24gKGhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBGb3JtYXRWYWxpZGF0b3JzLmhvc3RuYW1lLmNhbGwodGhpcywgaG9zdG5hbWUpO1xuICAgIH0sXG4gICAgXCJpcHY0XCI6IGZ1bmN0aW9uIChpcHY0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXB2NCAhPT0gXCJzdHJpbmdcIikgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICByZXR1cm4gdmFsaWRhdG9yLmlzSVAoaXB2NCwgNCk7XG4gICAgfSxcbiAgICBcImlwdjZcIjogZnVuY3Rpb24gKGlwdjYpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpcHY2ICE9PSBcInN0cmluZ1wiKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IuaXNJUChpcHY2LCA2KTtcbiAgICB9LFxuICAgIFwicmVnZXhcIjogZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgUmVnRXhwKHN0cik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBcInVyaVwiOiBmdW5jdGlvbiAodXJpKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RyaWN0VXJpcykge1xuICAgICAgICAgICAgcmV0dXJuIEZvcm1hdFZhbGlkYXRvcnNbXCJzdHJpY3QtdXJpXCJdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3phZ2dpbm8vei1zY2hlbWEvaXNzdWVzLzE4XG4gICAgICAgIC8vIFJlZ0V4cCBmcm9tIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQlxuICAgICAgICByZXR1cm4gdHlwZW9mIHVyaSAhPT0gXCJzdHJpbmdcIiB8fCBSZWdFeHAoXCJeKChbXjovPyNdKyk6KT8oLy8oW14vPyNdKikpPyhbXj8jXSopKFxcXFw/KFteI10qKSk/KCMoLiopKT9cIikudGVzdCh1cmkpO1xuICAgIH0sXG4gICAgXCJzdHJpY3QtdXJpXCI6IGZ1bmN0aW9uICh1cmkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1cmkgIT09IFwic3RyaW5nXCIgfHwgdmFsaWRhdG9yLmlzVVJMKHVyaSk7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGb3JtYXRWYWxpZGF0b3JzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBGb3JtYXRWYWxpZGF0b3JzICA9IHJlcXVpcmUoXCIuL0Zvcm1hdFZhbGlkYXRvcnNcIiksXG4gICAgUmVwb3J0ICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9SZXBvcnRcIiksXG4gICAgVXRpbHMgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxudmFyIEpzb25WYWxpZGF0b3JzID0ge1xuICAgIG11bHRpcGxlT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjEuMlxuICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKGpzb24gLyBzY2hlbWEubXVsdGlwbGVPZikgIT09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJNVUxUSVBMRV9PRlwiLCBbanNvbiwgc2NoZW1hLm11bHRpcGxlT2ZdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtYXhpbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4yLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoanNvbiA+IHNjaGVtYS5tYXhpbXVtKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUFYSU1VTVwiLCBbanNvbiwgc2NoZW1hLm1heGltdW1dLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGpzb24gPj0gc2NoZW1hLm1heGltdW0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJNQVhJTVVNX0VYQ0xVU0lWRVwiLCBbanNvbiwgc2NoZW1hLm1heGltdW1dLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gbWF4aW11bVxuICAgIH0sXG4gICAgbWluaW11bTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjEuMy4yXG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGpzb24gPCBzY2hlbWEubWluaW11bSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk1JTklNVU1cIiwgW2pzb24sIHNjaGVtYS5taW5pbXVtXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChqc29uIDw9IHNjaGVtYS5taW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUlOSU1VTV9FWENMVVNJVkVcIiwgW2pzb24sIHNjaGVtYS5taW5pbXVtXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZXhjbHVzaXZlTWluaW11bTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjb3ZlcmVkIGluIG1pbmltdW1cbiAgICB9LFxuICAgIG1heExlbmd0aDogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjIuMS4yXG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVdGlscy51Y3MyZGVjb2RlKGpzb24pLmxlbmd0aCA+IHNjaGVtYS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk1BWF9MRU5HVEhcIiwgW2pzb24ubGVuZ3RoLCBzY2hlbWEubWF4TGVuZ3RoXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWluTGVuZ3RoOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4yLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFV0aWxzLnVjczJkZWNvZGUoanNvbikubGVuZ3RoIDwgc2NoZW1hLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiTUlOX0xFTkdUSFwiLCBbanNvbi5sZW5ndGgsIHNjaGVtYS5taW5MZW5ndGhdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4zLjJcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJlZ0V4cChzY2hlbWEucGF0dGVybikudGVzdChqc29uKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlBBVFRFUk5cIiwgW3NjaGVtYS5wYXR0ZXJuLCBqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWRkaXRpb25hbEl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4xLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIHZhbHVlIG9mIFwiYWRkaXRpb25hbEl0ZW1zXCIgaXMgYm9vbGVhbiB2YWx1ZSBmYWxzZSBhbmQgdGhlIHZhbHVlIG9mIFwiaXRlbXNcIiBpcyBhbiBhcnJheSxcbiAgICAgICAgLy8gdGhlIGpzb24gaXMgdmFsaWQgaWYgaXRzIHNpemUgaXMgbGVzcyB0aGFuLCBvciBlcXVhbCB0bywgdGhlIHNpemUgb2YgXCJpdGVtc1wiLlxuICAgICAgICBpZiAoc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gZmFsc2UgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICBpZiAoanNvbi5sZW5ndGggPiBzY2hlbWEuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiQVJSQVlfQURESVRJT05BTF9JVEVNU1wiLCBudWxsLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBpdGVtczogZnVuY3Rpb24gKCkgeyAvKnJlcG9ydCwgc2NoZW1hLCBqc29uKi9cbiAgICAgICAgLy8gY292ZXJlZCBpbiBhZGRpdGlvbmFsSXRlbXNcbiAgICB9LFxuICAgIG1heEl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4yLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24ubGVuZ3RoID4gc2NoZW1hLm1heEl0ZW1zKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9MRU5HVEhfTE9OR1wiLCBbanNvbi5sZW5ndGgsIHNjaGVtYS5tYXhJdGVtc10sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1pbkl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4zLjJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24ubGVuZ3RoIDwgc2NoZW1hLm1pbkl0ZW1zKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9MRU5HVEhfU0hPUlRcIiwgW2pzb24ubGVuZ3RoLCBzY2hlbWEubWluSXRlbXNdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB1bmlxdWVJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuNC4yXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEudW5pcXVlSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNVbmlxdWVBcnJheShqc29uLCBtYXRjaGVzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBUlJBWV9VTklRVUVcIiwgbWF0Y2hlcywgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4UHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMS4yXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoanNvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIga2V5c0NvdW50ID0gT2JqZWN0LmtleXMoanNvbikubGVuZ3RoO1xuICAgICAgICBpZiAoa2V5c0NvdW50ID4gc2NoZW1hLm1heFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9CSkVDVF9QUk9QRVJUSUVTX01BWElNVU1cIiwgW2tleXNDb3VudCwgc2NoZW1hLm1heFByb3BlcnRpZXNdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5Qcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC4yLjJcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhqc29uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzQ291bnQgPSBPYmplY3Qua2V5cyhqc29uKS5sZW5ndGg7XG4gICAgICAgIGlmIChrZXlzQ291bnQgPCBzY2hlbWEubWluUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiT0JKRUNUX1BST1BFUlRJRVNfTUlOSU1VTVwiLCBba2V5c0NvdW50LCBzY2hlbWEubWluUHJvcGVydGllc10sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJlcXVpcmVkOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC4zLjJcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhqc29uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZHggPSBzY2hlbWEucmVxdWlyZWQubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciByZXF1aXJlZFByb3BlcnR5TmFtZSA9IHNjaGVtYS5yZXF1aXJlZFtpZHhdO1xuICAgICAgICAgICAgaWYgKGpzb25bcmVxdWlyZWRQcm9wZXJ0eU5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJPQkpFQ1RfTUlTU0lOR19SRVFVSVJFRF9QUk9QRVJUWVwiLCBbcmVxdWlyZWRQcm9wZXJ0eU5hbWVdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gcHJvcGVydGllcyBhbmQgcGF0dGVyblByb3BlcnRpZXNcbiAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgJiYgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBKc29uVmFsaWRhdG9ycy5wcm9wZXJ0aWVzLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIGpzb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGNvdmVyZWQgaW4gcHJvcGVydGllc1xuICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIEpzb25WYWxpZGF0b3JzLnByb3BlcnRpZXMuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSwganNvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByb3BlcnRpZXM6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjQuMlxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKGpzb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBzY2hlbWEucHJvcGVydGllcyAhPT0gdW5kZWZpbmVkID8gc2NoZW1hLnByb3BlcnRpZXMgOiB7fTtcbiAgICAgICAgdmFyIHBhdHRlcm5Qcm9wZXJ0aWVzID0gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQgPyBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgOiB7fTtcbiAgICAgICAgaWYgKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBzZXQgb2YgdGhlIGpzb24gdG8gdmFsaWRhdGUuXG4gICAgICAgICAgICB2YXIgcyA9IE9iamVjdC5rZXlzKGpzb24pO1xuICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHNldCBmcm9tIFwicHJvcGVydGllc1wiLlxuICAgICAgICAgICAgdmFyIHAgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIuXG4gICAgICAgICAgICB2YXIgcHAgPSBPYmplY3Qua2V5cyhwYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgICAgICAvLyByZW1vdmUgZnJvbSBcInNcIiBhbGwgZWxlbWVudHMgb2YgXCJwXCIsIGlmIGFueTtcbiAgICAgICAgICAgIHMgPSBVdGlscy5kaWZmZXJlbmNlKHMsIHApO1xuICAgICAgICAgICAgLy8gZm9yIGVhY2ggcmVnZXggaW4gXCJwcFwiLCByZW1vdmUgYWxsIGVsZW1lbnRzIG9mIFwic1wiIHdoaWNoIHRoaXMgcmVnZXggbWF0Y2hlcy5cbiAgICAgICAgICAgIHZhciBpZHggPSBwcC5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnRXhwID0gUmVnRXhwKHBwW2lkeF0pLFxuICAgICAgICAgICAgICAgICAgICBpZHgyID0gcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVnRXhwLnRlc3Qoc1tpZHgyXSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuc3BsaWNlKGlkeDIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiBvZiB0aGUganNvbiBzdWNjZWVkcyBpZiwgYWZ0ZXIgdGhlc2UgdHdvIHN0ZXBzLCBzZXQgXCJzXCIgaXMgZW1wdHkuXG4gICAgICAgICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gYXNzdW1lQWRkaXRpb25hbCBjYW4gYmUgYW4gYXJyYXkgb2YgYWxsb3dlZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgdmFyIGlkeDMgPSB0aGlzLm9wdGlvbnMuYXNzdW1lQWRkaXRpb25hbC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGlkeDMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlkeDMtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlvID0gcy5pbmRleE9mKHRoaXMub3B0aW9ucy5hc3N1bWVBZGRpdGlvbmFsW2lkeDNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnNwbGljZShpbywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJPQkpFQ1RfQURESVRJT05BTF9QUk9QRVJUSUVTXCIsIFtzXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuNS4yXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoanNvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyksXG4gICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgYWxsIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgdmFyIGRlcGVuZGVuY3lOYW1lID0ga2V5c1tpZHhdO1xuICAgICAgICAgICAgaWYgKGpzb25bZGVwZW5kZW5jeU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlcGVuZGVuY3lEZWZpbml0aW9uID0gc2NoZW1hLmRlcGVuZGVuY2llc1tkZXBlbmRlbmN5TmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhkZXBlbmRlbmN5RGVmaW5pdGlvbikgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZGVwZW5kZW5jeSBpcyBhIHNjaGVtYSwgdmFsaWRhdGUgYWdhaW5zdCB0aGlzIHNjaGVtYVxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBkZXBlbmRlbmN5RGVmaW5pdGlvbiwganNvbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZGVwZW5kZW5jeSBpcyBhbiBhcnJheSwgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYWxsIHByb3BlcnRpZXMgaW4gdGhpcyBhcnJheVxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4MiA9IGRlcGVuZGVuY3lEZWZpbml0aW9uLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVpcmVkUHJvcGVydHlOYW1lID0gZGVwZW5kZW5jeURlZmluaXRpb25baWR4Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbltyZXF1aXJlZFByb3BlcnR5TmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9CSkVDVF9ERVBFTkRFTkNZX0tFWVwiLCBbcmVxdWlyZWRQcm9wZXJ0eU5hbWUsIGRlcGVuZGVuY3lOYW1lXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZW51bTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMS4yXG4gICAgICAgIHZhciBtYXRjaCA9IGZhbHNlLFxuICAgICAgICAgICAgaWR4ID0gc2NoZW1hLmVudW0ubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGlmIChVdGlscy5hcmVFcXVhbChqc29uLCBzY2hlbWEuZW51bVtpZHhdKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2ggPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJFTlVNX01JU01BVENIXCIsIFtqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLypcbiAgICB0eXBlOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS4yLjJcbiAgICAgICAgLy8gdHlwZSBpcyBoYW5kbGVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZCBzbyBpZ25vcmVcbiAgICB9LFxuICAgICovXG4gICAgYWxsT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjMuMlxuICAgICAgICB2YXIgaWR4ID0gc2NoZW1hLmFsbE9mLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRhdGVSZXN1bHQgPSBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuYWxsT2ZbaWR4XSwganNvbik7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrT25GaXJzdEVycm9yICYmIHZhbGlkYXRlUmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhbnlPZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNC4yXG4gICAgICAgIHZhciBzdWJSZXBvcnRzID0gW10sXG4gICAgICAgICAgICBwYXNzZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGlkeCA9IHNjaGVtYS5hbnlPZi5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKGlkeC0tICYmIHBhc3NlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhciBzdWJSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICBzdWJSZXBvcnRzLnB1c2goc3ViUmVwb3J0KTtcbiAgICAgICAgICAgIHBhc3NlZCA9IGV4cG9ydHMudmFsaWRhdGUuY2FsbCh0aGlzLCBzdWJSZXBvcnQsIHNjaGVtYS5hbnlPZltpZHhdLCBqc29uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXNzZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJBTllfT0ZfTUlTU0lOR1wiLCB1bmRlZmluZWQsIHN1YlJlcG9ydHMsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG9uZU9mOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS41LjJcbiAgICAgICAgdmFyIHBhc3NlcyA9IDAsXG4gICAgICAgICAgICBzdWJSZXBvcnRzID0gW10sXG4gICAgICAgICAgICBpZHggPSBzY2hlbWEub25lT2YubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIHN1YlJlcG9ydCA9IG5ldyBSZXBvcnQocmVwb3J0LCB7IG1heEVycm9yczogMSB9KTtcbiAgICAgICAgICAgIHN1YlJlcG9ydHMucHVzaChzdWJSZXBvcnQpO1xuICAgICAgICAgICAgaWYgKGV4cG9ydHMudmFsaWRhdGUuY2FsbCh0aGlzLCBzdWJSZXBvcnQsIHNjaGVtYS5vbmVPZltpZHhdLCBqc29uKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHBhc3NlcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhc3NlcyA9PT0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiT05FX09GX01JU1NJTkdcIiwgdW5kZWZpbmVkLCBzdWJSZXBvcnRzLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhc3NlcyA+IDEpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk9ORV9PRl9NVUxUSVBMRVwiLCBudWxsLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjYuMlxuICAgICAgICB2YXIgc3ViUmVwb3J0ID0gbmV3IFJlcG9ydChyZXBvcnQpO1xuICAgICAgICBpZiAoZXhwb3J0cy52YWxpZGF0ZS5jYWxsKHRoaXMsIHN1YlJlcG9ydCwgc2NoZW1hLm5vdCwganNvbikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIk5PVF9QQVNTRURcIiwgbnVsbCwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGVmaW5pdGlvbnM6IGZ1bmN0aW9uICgpIHsgLypyZXBvcnQsIHNjaGVtYSwganNvbiovXG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNy4yXG4gICAgICAgIC8vIG5vdGhpbmcgdG8gZG8gaGVyZVxuICAgIH0sXG4gICAgZm9ybWF0OiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjcuMlxuICAgICAgICB2YXIgZm9ybWF0VmFsaWRhdG9yRm4gPSBGb3JtYXRWYWxpZGF0b3JzW3NjaGVtYS5mb3JtYXRdO1xuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdFZhbGlkYXRvckZuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRWYWxpZGF0b3JGbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBhc3luY1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRBc3luY1Rhc2soZm9ybWF0VmFsaWRhdG9yRm4sIFtqc29uXSwgZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJJTlZBTElEX0ZPUk1BVFwiLCBbc2NoZW1hLmZvcm1hdCwganNvbl0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3luY1xuICAgICAgICAgICAgICAgIGlmIChmb3JtYXRWYWxpZGF0b3JGbi5jYWxsKHRoaXMsIGpzb24pICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIklOVkFMSURfRk9STUFUXCIsIFtzY2hlbWEuZm9ybWF0LCBqc29uXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVVua25vd25Gb3JtYXRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJVTktOT1dOX0ZPUk1BVFwiLCBbc2NoZW1hLmZvcm1hdF0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgcmVjdXJzZUFycmF5ID0gZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hLCBqc29uKSB7XG4gICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjguMlxuXG4gICAgdmFyIGlkeCA9IGpzb24ubGVuZ3RoO1xuXG4gICAgLy8gSWYgXCJpdGVtc1wiIGlzIGFuIGFycmF5LCB0aGlzIHNpdHVhdGlvbiwgdGhlIHNjaGVtYSBkZXBlbmRzIG9uIHRoZSBpbmRleDpcbiAgICAvLyBpZiB0aGUgaW5kZXggaXMgbGVzcyB0aGFuLCBvciBlcXVhbCB0bywgdGhlIHNpemUgb2YgXCJpdGVtc1wiLFxuICAgIC8vIHRoZSBjaGlsZCBpbnN0YW5jZSBtdXN0IGJlIHZhbGlkIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgc2NoZW1hIGluIHRoZSBcIml0ZW1zXCIgYXJyYXk7XG4gICAgLy8gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIHZhbGlkIGFnYWluc3QgdGhlIHNjaGVtYSBkZWZpbmVkIGJ5IFwiYWRkaXRpb25hbEl0ZW1zXCIuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgLy8gZXF1YWwgdG8gZG9lc250IG1ha2Ugc2Vuc2UgaGVyZVxuICAgICAgICAgICAgaWYgKGlkeCA8IHNjaGVtYS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuaXRlbXNbaWR4XSwganNvbltpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbWlnaHQgYmUgYm9vbGVhbiwgc28gY2hlY2sgdGhhdCBpdCdzIGFuIG9iamVjdFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywganNvbltpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEuaXRlbXMgPT09IFwib2JqZWN0XCIpIHtcblxuICAgICAgICAvLyBJZiBpdGVtcyBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgY2hpbGQgaW5zdGFuY2UgbXVzdCBiZSB2YWxpZCBhZ2FpbnN0IHRoaXMgc2NoZW1hLFxuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIGl0cyBpbmRleCwgYW5kIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIFwiYWRkaXRpb25hbEl0ZW1zXCIuXG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuaXRlbXMsIGpzb25baWR4XSk7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgfVxufTtcblxudmFyIHJlY3Vyc2VPYmplY3QgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEsIGpzb24pIHtcbiAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uOC4zXG5cbiAgICAvLyBJZiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIgaXMgYWJzZW50LCBpdCBpcyBjb25zaWRlcmVkIHByZXNlbnQgd2l0aCBhbiBlbXB0eSBzY2hlbWEgYXMgYSB2YWx1ZS5cbiAgICAvLyBJbiBhZGRpdGlvbiwgYm9vbGVhbiB2YWx1ZSB0cnVlIGlzIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBhbiBlbXB0eSBzY2hlbWEuXG4gICAgdmFyIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmIChhZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdHJ1ZSB8fCBhZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuXG4gICAgLy8gcCAtIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInByb3BlcnRpZXNcIi5cbiAgICB2YXIgcCA9IHNjaGVtYS5wcm9wZXJ0aWVzID8gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpIDogW107XG5cbiAgICAvLyBwcCAtIFRoZSBwcm9wZXJ0eSBzZXQgZnJvbSBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIuIEVsZW1lbnRzIG9mIHRoaXMgc2V0IHdpbGwgYmUgY2FsbGVkIHJlZ2V4ZXMgZm9yIGNvbnZlbmllbmNlLlxuICAgIHZhciBwcCA9IHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyA/IE9iamVjdC5rZXlzKHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcykgOiBbXTtcblxuICAgIC8vIG0gLSBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgY2hpbGQuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhqc29uKSxcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIG0gPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0ganNvblttXTtcblxuICAgICAgICAvLyBzIC0gVGhlIHNldCBvZiBzY2hlbWFzIGZvciB0aGUgY2hpbGQgaW5zdGFuY2UuXG4gICAgICAgIHZhciBzID0gW107XG5cbiAgICAgICAgLy8gMS4gSWYgc2V0IFwicFwiIGNvbnRhaW5zIHZhbHVlIFwibVwiLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHNjaGVtYSBpbiBcInByb3BlcnRpZXNcIiBpcyBhZGRlZCB0byBcInNcIi5cbiAgICAgICAgaWYgKHAuaW5kZXhPZihtKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHMucHVzaChzY2hlbWEucHJvcGVydGllc1ttXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCByZWdleCBpbiBcInBwXCIsIGlmIGl0IG1hdGNoZXMgXCJtXCIgc3VjY2Vzc2Z1bGx5LCB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWEgaW4gXCJwYXR0ZXJuUHJvcGVydGllc1wiIGlzIGFkZGVkIHRvIFwic1wiLlxuICAgICAgICB2YXIgaWR4MiA9IHBwLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgdmFyIHJlZ2V4U3RyaW5nID0gcHBbaWR4Ml07XG4gICAgICAgICAgICBpZiAoUmVnRXhwKHJlZ2V4U3RyaW5nKS50ZXN0KG0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcy5wdXNoKHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1tyZWdleFN0cmluZ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVGhlIHNjaGVtYSBkZWZpbmVkIGJ5IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIiBpcyBhZGRlZCB0byBcInNcIiBpZiBhbmQgb25seSBpZiwgYXQgdGhpcyBzdGFnZSwgXCJzXCIgaXMgZW1wdHkuXG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCAmJiBhZGRpdGlvbmFsUHJvcGVydGllcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHMucHVzaChhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBhcmUgcGFzc2luZyB0ZXN0cyBldmVuIHdpdGhvdXQgdGhpcyBhc3NlcnQgYmVjYXVzZSB0aGlzIGlzIGNvdmVyZWQgYnkgcHJvcGVydGllcyBjaGVja1xuICAgICAgICAvLyBpZiBzIGlzIGVtcHR5IGluIHRoaXMgc3RhZ2UsIG5vIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIGFyZSBhbGxvd2VkXG4gICAgICAgIC8vIHJlcG9ydC5leHBlY3Qocy5sZW5ndGggIT09IDAsICdFMDAxJywgbSk7XG5cbiAgICAgICAgLy8gSW5zdGFuY2UgcHJvcGVydHkgdmFsdWUgbXVzdCBwYXNzIGFsbCBzY2hlbWFzIGZyb20gc1xuICAgICAgICBpZHgyID0gcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgyLS0pIHtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2gobSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzW2lkeDJdLCBwcm9wZXJ0eVZhbHVlKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSwganNvbikge1xuXG4gICAgcmVwb3J0LmNvbW1vbkVycm9yTWVzc2FnZSA9IFwiSlNPTl9PQkpFQ1RfVkFMSURBVElPTl9GQUlMRURcIjtcblxuICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBhbiBvYmplY3RcbiAgICB2YXIgdG8gPSBVdGlscy53aGF0SXMoc2NoZW1hKTtcbiAgICBpZiAodG8gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiU0NIRU1BX05PVF9BTl9PQkpFQ1RcIiwgW3RvXSwgbnVsbCwgc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBlbXB0eSwgZXZlcnl0aGluZyBpcyB2YWxpZCBhZ2FpbnN0IGVtcHR5IHNjaGVtYVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSwgc28gd2UgbmVlZCB0byByZW1lbWJlciBvdXIgcm9vdFxuICAgIHZhciBpc1Jvb3QgPSBmYWxzZTtcbiAgICBpZiAoIXJlcG9ydC5yb290U2NoZW1hKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBpc1Jvb3QgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZvbGxvdyBzY2hlbWEuJHJlZiBrZXlzXG4gICAgaWYgKHNjaGVtYS4kcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gYXZvaWQgaW5maW5pdGUgbG9vcCB3aXRoIG1heFJlZnNcbiAgICAgICAgdmFyIG1heFJlZnMgPSA5OTtcbiAgICAgICAgd2hpbGUgKHNjaGVtYS4kcmVmICYmIG1heFJlZnMgPiAwKSB7XG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5fXyRyZWZSZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlJFRl9VTlJFU09MVkVEXCIsIFtzY2hlbWEuJHJlZl0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5fXyRyZWZSZXNvbHZlZCA9PT0gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYS5fXyRyZWZSZXNvbHZlZDtcbiAgICAgICAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1heFJlZnMtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4UmVmcyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2lyY3VsYXIgZGVwZW5kZW5jeSBieSAkcmVmIHJlZmVyZW5jZXMhXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHlwZSBjaGVja2luZyBmaXJzdFxuICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMi4yXG4gICAgdmFyIGpzb25UeXBlID0gVXRpbHMud2hhdElzKGpzb24pO1xuICAgIGlmIChzY2hlbWEudHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoanNvblR5cGUgIT09IHNjaGVtYS50eXBlICYmIChqc29uVHlwZSAhPT0gXCJpbnRlZ2VyXCIgfHwgc2NoZW1hLnR5cGUgIT09IFwibnVtYmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiSU5WQUxJRF9UWVBFXCIsIFtzY2hlbWEudHlwZSwganNvblR5cGVdLCBudWxsLCBzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnJlYWtPbkZpcnN0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZS5pbmRleE9mKGpzb25UeXBlKSA9PT0gLTEgJiYgKGpzb25UeXBlICE9PSBcImludGVnZXJcIiB8fCBzY2hlbWEudHlwZS5pbmRleE9mKFwibnVtYmVyXCIpID09PSAtMSkpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJJTlZBTElEX1RZUEVcIiwgW3NjaGVtYS50eXBlLCBqc29uVHlwZV0sIG51bGwsIHNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm93IGl0ZXJhdGUgYWxsIHRoZSBrZXlzIGluIHNjaGVtYSBhbmQgZXhlY3V0ZSB2YWxpZGF0aW9uIG1ldGhvZHNcbiAgICB2YXIgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIGlmIChKc29uVmFsaWRhdG9yc1trZXlzW2lkeF1dKSB7XG4gICAgICAgICAgICBKc29uVmFsaWRhdG9yc1trZXlzW2lkeF1dLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIGpzb24pO1xuICAgICAgICAgICAgaWYgKHJlcG9ydC5lcnJvcnMubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvcikgeyBicmVhazsgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlcG9ydC5lcnJvcnMubGVuZ3RoID09PSAwIHx8IHRoaXMub3B0aW9ucy5icmVha09uRmlyc3RFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGpzb25UeXBlID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgIHJlY3Vyc2VBcnJheS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICAgICAgfSBlbHNlIGlmIChqc29uVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVjdXJzZU9iamVjdC5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdlIGRvbid0IG5lZWQgdGhlIHJvb3QgcG9pbnRlciBhbnltb3JlXG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgICByZXBvcnQucm9vdFNjaGVtYSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdmFsaWQganVzdCB0byBiZSBhYmxlIHRvIGJyZWFrIGF0IHNvbWUgY29kZSBwb2ludHNcbiAgICByZXR1cm4gcmVwb3J0LmVycm9ycy5sZW5ndGggPT09IDA7XG5cbn07XG4iLCIvLyBOdW1iZXIuaXNGaW5pdGUgcG9seWZpbGxcbi8vIGh0dHA6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLW51bWJlci5pc2Zpbml0ZVxuaWYgKHR5cGVvZiBOdW1iZXIuaXNGaW5pdGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIE51bWJlci5pc0Zpbml0ZSA9IGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgICAgIC8vIDEuIElmIFR5cGUobnVtYmVyKSBpcyBub3QgTnVtYmVyLCByZXR1cm4gZmFsc2UuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAyLiBJZiBudW1iZXIgaXMgTmFOLCAr4oieLCBvciDiiJLiiJ4sIHJldHVybiBmYWxzZS5cbiAgICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkgfHwgdmFsdWUgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRydWUuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGdldCAgICA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIEVycm9ycyA9IHJlcXVpcmUoXCIuL0Vycm9yc1wiKTtcbnZhciBVdGlscyAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxuZnVuY3Rpb24gUmVwb3J0KHBhcmVudE9yT3B0aW9ucywgcmVwb3J0T3B0aW9ucykge1xuICAgIHRoaXMucGFyZW50UmVwb3J0ID0gcGFyZW50T3JPcHRpb25zIGluc3RhbmNlb2YgUmVwb3J0ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPck9wdGlvbnMgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgIHRoaXMub3B0aW9ucyA9IHBhcmVudE9yT3B0aW9ucyBpbnN0YW5jZW9mIFJlcG9ydCA/XG4gICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9yT3B0aW9ucy5vcHRpb25zIDpcbiAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T3JPcHRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5yZXBvcnRPcHRpb25zID0gcmVwb3J0T3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgdGhpcy5wYXRoID0gW107XG4gICAgdGhpcy5hc3luY1Rhc2tzID0gW107XG59XG5cblJlcG9ydC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5hc3luY1Rhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgdGFza3MgcGVuZGluZywgY2FuJ3QgYW5zd2VyIGlzVmFsaWRcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPT09IDA7XG59O1xuXG5SZXBvcnQucHJvdG90eXBlLmFkZEFzeW5jVGFzayA9IGZ1bmN0aW9uIChmbiwgYXJncywgYXN5bmNUYXNrUmVzdWx0UHJvY2Vzc0ZuKSB7XG4gICAgdGhpcy5hc3luY1Rhc2tzLnB1c2goW2ZuLCBhcmdzLCBhc3luY1Rhc2tSZXN1bHRQcm9jZXNzRm5dKTtcbn07XG5cblJlcG9ydC5wcm90b3R5cGUucHJvY2Vzc0FzeW5jVGFza3MgPSBmdW5jdGlvbiAodGltZW91dCwgY2FsbGJhY2spIHtcblxuICAgIHZhciB2YWxpZGF0aW9uVGltZW91dCA9IHRpbWVvdXQgfHwgMjAwMCxcbiAgICAgICAgdGFza3NDb3VudCAgICAgICAgPSB0aGlzLmFzeW5jVGFza3MubGVuZ3RoLFxuICAgICAgICBpZHggICAgICAgICAgICAgICA9IHRhc2tzQ291bnQsXG4gICAgICAgIHRpbWVkT3V0ICAgICAgICAgID0gZmFsc2UsXG4gICAgICAgIHNlbGYgICAgICAgICAgICAgID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBzZWxmLmVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICAgICAgZXJyICAgPSB2YWxpZCA/IHVuZGVmaW5lZCA6IHNlbGYuZXJyb3JzO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB2YWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3BvbmQoYXN5bmNUYXNrUmVzdWx0UHJvY2Vzc0ZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXN5bmNUYXNrUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAodGltZWRPdXQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBhc3luY1Rhc2tSZXN1bHRQcm9jZXNzRm4oYXN5bmNUYXNrUmVzdWx0KTtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGFza3NDb3VudCA9PT0gMCB8fCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbmlzaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIHZhciB0YXNrID0gdGhpcy5hc3luY1Rhc2tzW2lkeF07XG4gICAgICAgIHRhc2tbMF0uYXBwbHkobnVsbCwgdGFza1sxXS5jb25jYXQocmVzcG9uZCh0YXNrWzJdKSkpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGFza3NDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYuYWRkRXJyb3IoXCJBU1lOQ19USU1FT1VUXCIsIFt0YXNrc0NvdW50LCB2YWxpZGF0aW9uVGltZW91dF0pO1xuICAgICAgICAgICAgY2FsbGJhY2soc2VsZi5lcnJvcnMsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sIHZhbGlkYXRpb25UaW1lb3V0KTtcblxufTtcblxuUmVwb3J0LnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXRoID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50UmVwb3J0KSB7XG4gICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCh0aGlzLnBhcmVudFJlcG9ydC5wYXRoKTtcbiAgICB9XG4gICAgcGF0aCA9IHBhdGguY29uY2F0KHRoaXMucGF0aCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlcG9ydFBhdGhBc0FycmF5ICE9PSB0cnVlKSB7XG4gICAgICAgIC8vIFNhbml0aXplIHRoZSBwYXRoIHNlZ21lbnRzIChodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxI3NlY3Rpb24tNClcbiAgICAgICAgcGF0aCA9IFwiIy9cIiArIHBhdGgubWFwKGZ1bmN0aW9uIChzZWdtZW50KSB7XG5cbiAgICAgICAgICAgIGlmIChVdGlscy5pc0Fic29sdXRlVXJpKHNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidXJpKFwiICsgc2VnbWVudCArIFwiKVwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VnbWVudC5yZXBsYWNlKC9cXH4vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXC8vZywgXCJ+MVwiKTtcbiAgICAgICAgfSkuam9pbihcIi9cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufTtcblxuUmVwb3J0LnByb3RvdHlwZS5nZXRTY2hlbWFJZCA9IGZ1bmN0aW9uICgpIHtcblxuICAgIGlmICghdGhpcy5yb290U2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgZXJyb3IgcGF0aCBhcyBhbiBhcnJheVxuICAgIHZhciBwYXRoID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50UmVwb3J0KSB7XG4gICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCh0aGlzLnBhcmVudFJlcG9ydC5wYXRoKTtcbiAgICB9XG4gICAgcGF0aCA9IHBhdGguY29uY2F0KHRoaXMucGF0aCk7XG5cbiAgICAvLyB0cnkgdG8gZmluZCBpZCBpbiB0aGUgZXJyb3IgcGF0aFxuICAgIHdoaWxlIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIG9iaiA9IGdldCh0aGlzLnJvb3RTY2hlbWEsIHBhdGgpO1xuICAgICAgICBpZiAob2JqICYmIG9iai5pZCkgeyByZXR1cm4gb2JqLmlkOyB9XG4gICAgICAgIHBhdGgucG9wKCk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGlkIG9mIHRoZSByb290XG4gICAgcmV0dXJuIHRoaXMucm9vdFNjaGVtYS5pZDtcbn07XG5cblJlcG9ydC5wcm90b3R5cGUuaGFzRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3JDb2RlLCBwYXJhbXMpIHtcbiAgICB2YXIgaWR4ID0gdGhpcy5lcnJvcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICBpZiAodGhpcy5lcnJvcnNbaWR4XS5jb2RlID09PSBlcnJvckNvZGUpIHtcbiAgICAgICAgICAgIC8vIGFzc3VtZSBtYXRjaFxuICAgICAgICAgICAgdmFyIG1hdGNoID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHBhcmFtcyB0b29cbiAgICAgICAgICAgIHZhciBpZHgyID0gdGhpcy5lcnJvcnNbaWR4XS5wYXJhbXMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVycm9yc1tpZHhdLnBhcmFtc1tpZHgyXSAhPT0gcGFyYW1zW2lkeDJdKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBtYXRjaCwgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGlmIChtYXRjaCkgeyByZXR1cm4gbWF0Y2g7IH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5SZXBvcnQucHJvdG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24gKGVycm9yQ29kZSwgcGFyYW1zLCBzdWJSZXBvcnRzLCBzY2hlbWFEZXNjcmlwdGlvbikge1xuICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPj0gdGhpcy5yZXBvcnRPcHRpb25zLm1heEVycm9ycykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFlcnJvckNvZGUpIHsgdGhyb3cgbmV3IEVycm9yKFwiTm8gZXJyb3JDb2RlIHBhc3NlZCBpbnRvIGFkZEVycm9yKClcIik7IH1cbiAgICBpZiAoIUVycm9yc1tlcnJvckNvZGVdKSB7IHRocm93IG5ldyBFcnJvcihcIk5vIGVycm9yTWVzc2FnZSBrbm93biBmb3IgY29kZSBcIiArIGVycm9yQ29kZSk7IH1cblxuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCBbXTtcblxuICAgIHZhciBpZHggPSBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBFcnJvcnNbZXJyb3JDb2RlXTtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIHdoYXRJcyA9IFV0aWxzLndoYXRJcyhwYXJhbXNbaWR4XSk7XG4gICAgICAgIHZhciBwYXJhbSA9ICh3aGF0SXMgPT09IFwib2JqZWN0XCIgfHwgd2hhdElzID09PSBcIm51bGxcIikgPyBKU09OLnN0cmluZ2lmeShwYXJhbXNbaWR4XSkgOiBwYXJhbXNbaWR4XTtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLnJlcGxhY2UoXCJ7XCIgKyBpZHggKyBcIn1cIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIHZhciBlcnIgPSB7XG4gICAgICAgIGNvZGU6IGVycm9yQ29kZSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgcGF0aDogdGhpcy5nZXRQYXRoKCksXG4gICAgICAgIHNjaGVtYUlkOiB0aGlzLmdldFNjaGVtYUlkKClcbiAgICB9O1xuXG4gICAgaWYgKHNjaGVtYURlc2NyaXB0aW9uKSB7XG4gICAgICAgIGVyci5kZXNjcmlwdGlvbiA9IHNjaGVtYURlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGlmIChzdWJSZXBvcnRzICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHN1YlJlcG9ydHMpKSB7XG4gICAgICAgICAgICBzdWJSZXBvcnRzID0gW3N1YlJlcG9ydHNdO1xuICAgICAgICB9XG4gICAgICAgIGVyci5pbm5lciA9IFtdO1xuICAgICAgICBpZHggPSBzdWJSZXBvcnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICB2YXIgc3ViUmVwb3J0ID0gc3ViUmVwb3J0c1tpZHhdLFxuICAgICAgICAgICAgICAgIGlkeDIgPSBzdWJSZXBvcnQuZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgyLS0pIHtcbiAgICAgICAgICAgICAgICBlcnIuaW5uZXIucHVzaChzdWJSZXBvcnQuZXJyb3JzW2lkeDJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyLmlubmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZXJyLmlubmVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lcnJvcnMucHVzaChlcnIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZXBvcnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIFJlcG9ydCAgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9SZXBvcnRcIik7XG52YXIgU2NoZW1hQ29tcGlsYXRpb24gICA9IHJlcXVpcmUoXCIuL1NjaGVtYUNvbXBpbGF0aW9uXCIpO1xudmFyIFNjaGVtYVZhbGlkYXRpb24gICAgPSByZXF1aXJlKFwiLi9TY2hlbWFWYWxpZGF0aW9uXCIpO1xudmFyIFV0aWxzICAgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxuZnVuY3Rpb24gZGVjb2RlSlNPTlBvaW50ZXIoc3RyKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1hcHBzYXdnLWpzb24tcG9pbnRlci0wNyNzZWN0aW9uLTNcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvflswLTFdL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBcIn4xXCIgPyBcIi9cIiA6IFwiflwiO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1vdGVQYXRoKHVyaSkge1xuICAgIHZhciBpbyA9IHVyaS5pbmRleE9mKFwiI1wiKTtcbiAgICByZXR1cm4gaW8gPT09IC0xID8gdXJpIDogdXJpLnNsaWNlKDAsIGlvKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVlcnlQYXRoKHVyaSkge1xuICAgIHZhciBpbyA9IHVyaS5pbmRleE9mKFwiI1wiKTtcbiAgICB2YXIgcmVzID0gaW8gPT09IC0xID8gdW5kZWZpbmVkIDogdXJpLnNsaWNlKGlvICsgMSk7XG4gICAgLy8gV0FSTjogZG8gbm90IHNsaWNlIHNsYXNoLCAjLyBtZWFucyB0YWtlIHJvb3QgYW5kIGdvIGRvd24gZnJvbSBpdFxuICAgIC8vIGlmIChyZXMgJiYgcmVzWzBdID09PSBcIi9cIikgeyByZXMgPSByZXMuc2xpY2UoMSk7IH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmaW5kSWQoc2NoZW1hLCBpZCkge1xuICAgIC8vIHByb2Nlc3Mgb25seSBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPT0gXCJvYmplY3RcIiB8fCBzY2hlbWEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vIGlkIG1lYW5zIHJvb3Qgc28gcmV0dXJuIGl0c2VsZlxuICAgIGlmICghaWQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmlkKSB7XG4gICAgICAgIGlmIChzY2hlbWEuaWQgPT09IGlkIHx8IHNjaGVtYS5pZFswXSA9PT0gXCIjXCIgJiYgc2NoZW1hLmlkLnN1YnN0cmluZygxKSA9PT0gaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaWR4LCByZXN1bHQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICBpZHggPSBzY2hlbWEubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRJZChzY2hlbWFbaWR4XSwgaWQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSk7XG4gICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBrID0ga2V5c1tpZHhdO1xuICAgICAgICAgICAgaWYgKGsuaW5kZXhPZihcIl9fJFwiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gZmluZElkKHNjaGVtYVtrXSwgaWQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydHMuY2FjaGVTY2hlbWFCeVVyaSA9IGZ1bmN0aW9uICh1cmksIHNjaGVtYSkge1xuICAgIHZhciByZW1vdGVQYXRoID0gZ2V0UmVtb3RlUGF0aCh1cmkpO1xuICAgIGlmIChyZW1vdGVQYXRoKSB7XG4gICAgICAgIHRoaXMuY2FjaGVbcmVtb3RlUGF0aF0gPSBzY2hlbWE7XG4gICAgfVxufTtcblxuZXhwb3J0cy5yZW1vdmVGcm9tQ2FjaGVCeVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgICB2YXIgcmVtb3RlUGF0aCA9IGdldFJlbW90ZVBhdGgodXJpKTtcbiAgICBpZiAocmVtb3RlUGF0aCkge1xuICAgICAgICBkZWxldGUgdGhpcy5jYWNoZVtyZW1vdGVQYXRoXTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmNoZWNrQ2FjaGVGb3JVcmkgPSBmdW5jdGlvbiAodXJpKSB7XG4gICAgdmFyIHJlbW90ZVBhdGggPSBnZXRSZW1vdGVQYXRoKHVyaSk7XG4gICAgcmV0dXJuIHJlbW90ZVBhdGggPyB0aGlzLmNhY2hlW3JlbW90ZVBhdGhdICE9IG51bGwgOiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuZ2V0U2NoZW1hID0gZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgc2NoZW1hID0gZXhwb3J0cy5nZXRTY2hlbWFCeVJlZmVyZW5jZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NoZW1hID0gZXhwb3J0cy5nZXRTY2hlbWFCeVVyaS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYTtcbn07XG5cbmV4cG9ydHMuZ2V0U2NoZW1hQnlSZWZlcmVuY2UgPSBmdW5jdGlvbiAocmVwb3J0LCBrZXkpIHtcbiAgICB2YXIgaSA9IHRoaXMucmVmZXJlbmNlQ2FjaGUubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVmZXJlbmNlQ2FjaGVbaV1bMF0gPT09IGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlQ2FjaGVbaV1bMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm90IGZvdW5kXG4gICAgdmFyIHNjaGVtYSA9IFV0aWxzLmNsb25lRGVlcChrZXkpO1xuICAgIHRoaXMucmVmZXJlbmNlQ2FjaGUucHVzaChba2V5LCBzY2hlbWFdKTtcbiAgICByZXR1cm4gc2NoZW1hO1xufTtcblxuZXhwb3J0cy5nZXRTY2hlbWFCeVVyaSA9IGZ1bmN0aW9uIChyZXBvcnQsIHVyaSwgcm9vdCkge1xuICAgIHZhciByZW1vdGVQYXRoID0gZ2V0UmVtb3RlUGF0aCh1cmkpLFxuICAgICAgICBxdWVyeVBhdGggPSBnZXRRdWVyeVBhdGgodXJpKSxcbiAgICAgICAgcmVzdWx0ID0gcmVtb3RlUGF0aCA/IHRoaXMuY2FjaGVbcmVtb3RlUGF0aF0gOiByb290O1xuXG4gICAgaWYgKHJlc3VsdCAmJiByZW1vdGVQYXRoKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gYXZvaWQgY29tcGlsaW5nIHNjaGVtYXMgaW4gYSByZWN1cnNpdmUgbG9vcFxuICAgICAgICB2YXIgY29tcGlsZVJlbW90ZSA9IHJlc3VsdCAhPT0gcm9vdDtcbiAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gY29tcGlsZSBhbmQgdmFsaWRhdGUgcmVzb2x2ZWQgc2NoZW1hIChpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkpXG4gICAgICAgIGlmIChjb21waWxlUmVtb3RlKSB7XG5cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2gocmVtb3RlUGF0aCk7XG5cbiAgICAgICAgICAgIHZhciByZW1vdGVSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICBpZiAoU2NoZW1hQ29tcGlsYXRpb24uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHJlbW90ZVJlcG9ydCwgcmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIFNjaGVtYVZhbGlkYXRpb24udmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZW1vdGVSZXBvcnQsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcmVtb3RlUmVwb3J0SXNWYWxpZCA9IHJlbW90ZVJlcG9ydC5pc1ZhbGlkKCk7XG4gICAgICAgICAgICBpZiAoIXJlbW90ZVJlcG9ydElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJSRU1PVEVfTk9UX1ZBTElEXCIsIFt1cmldLCByZW1vdGVSZXBvcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKCFyZW1vdGVSZXBvcnRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHQgJiYgcXVlcnlQYXRoKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IHF1ZXJ5UGF0aC5zcGxpdChcIi9cIik7XG4gICAgICAgIGZvciAodmFyIGlkeCA9IDAsIGxpbSA9IHBhcnRzLmxlbmd0aDsgcmVzdWx0ICYmIGlkeCA8IGxpbTsgaWR4KyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBkZWNvZGVKU09OUG9pbnRlcihwYXJ0c1tpZHhdKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IDApIHsgLy8gaXQncyBhbiBpZFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRJZChyZXN1bHQsIGtleSk7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBpdCdzIGEgcGF0aCBiZWhpbmQgaWRcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnRzLmdldFJlbW90ZVBhdGggPSBnZXRSZW1vdGVQYXRoO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBSZXBvcnQgICAgICA9IHJlcXVpcmUoXCIuL1JlcG9ydFwiKTtcbnZhciBTY2hlbWFDYWNoZSA9IHJlcXVpcmUoXCIuL1NjaGVtYUNhY2hlXCIpO1xudmFyIFV0aWxzICAgICAgID0gcmVxdWlyZShcIi4vVXRpbHNcIik7XG5cbmZ1bmN0aW9uIG1lcmdlUmVmZXJlbmNlKHNjb3BlLCByZWYpIHtcbiAgICBpZiAoVXRpbHMuaXNBYnNvbHV0ZVVyaShyZWYpKSB7XG4gICAgICAgIHJldHVybiByZWY7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZFNjb3BlID0gc2NvcGUuam9pbihcIlwiKSxcbiAgICAgICAgaXNTY29wZUFic29sdXRlID0gVXRpbHMuaXNBYnNvbHV0ZVVyaShqb2luZWRTY29wZSksXG4gICAgICAgIGlzU2NvcGVSZWxhdGl2ZSA9IFV0aWxzLmlzUmVsYXRpdmVVcmkoam9pbmVkU2NvcGUpLFxuICAgICAgICBpc1JlZlJlbGF0aXZlID0gVXRpbHMuaXNSZWxhdGl2ZVVyaShyZWYpLFxuICAgICAgICB0b1JlbW92ZTtcblxuICAgIGlmIChpc1Njb3BlQWJzb2x1dGUgJiYgaXNSZWZSZWxhdGl2ZSkge1xuICAgICAgICB0b1JlbW92ZSA9IGpvaW5lZFNjb3BlLm1hdGNoKC9cXC9bXlxcL10qJC8pO1xuICAgICAgICBpZiAodG9SZW1vdmUpIHtcbiAgICAgICAgICAgIGpvaW5lZFNjb3BlID0gam9pbmVkU2NvcGUuc2xpY2UoMCwgdG9SZW1vdmUuaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTY29wZVJlbGF0aXZlICYmIGlzUmVmUmVsYXRpdmUpIHtcbiAgICAgICAgam9pbmVkU2NvcGUgPSBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvUmVtb3ZlID0gam9pbmVkU2NvcGUubWF0Y2goL1teIy9dKyQvKTtcbiAgICAgICAgaWYgKHRvUmVtb3ZlKSB7XG4gICAgICAgICAgICBqb2luZWRTY29wZSA9IGpvaW5lZFNjb3BlLnNsaWNlKDAsIHRvUmVtb3ZlLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXMgPSBqb2luZWRTY29wZSArIHJlZjtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvIyMvLCBcIiNcIik7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZXMob2JqLCByZXN1bHRzLCBzY29wZSwgcGF0aCkge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuICAgIHNjb3BlID0gc2NvcGUgfHwgW107XG4gICAgcGF0aCA9IHBhdGggfHwgW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NvcGUucHVzaChvYmouaWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqLiRyZWYgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIG9iai5fXyRyZWZSZXNvbHZlZCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgcmVmOiBtZXJnZVJlZmVyZW5jZShzY29wZSwgb2JqLiRyZWYpLFxuICAgICAgICAgICAga2V5OiBcIiRyZWZcIixcbiAgICAgICAgICAgIG9iajogb2JqLFxuICAgICAgICAgICAgcGF0aDogcGF0aC5zbGljZSgwKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmouJHNjaGVtYSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2Ygb2JqLl9fJHNjaGVtYVJlc29sdmVkID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICByZWY6IG1lcmdlUmVmZXJlbmNlKHNjb3BlLCBvYmouJHNjaGVtYSksXG4gICAgICAgICAgICBrZXk6IFwiJHNjaGVtYVwiLFxuICAgICAgICAgICAgb2JqOiBvYmosXG4gICAgICAgICAgICBwYXRoOiBwYXRoLnNsaWNlKDApXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBpZHg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBpZHggPSBvYmoubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlcyhvYmpbaWR4XSwgcmVzdWx0cywgc2NvcGUsIHBhdGgpO1xuICAgICAgICAgICAgcGF0aC5wb3AoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHJlY3Vyc2UgdGhyb3VnaCByZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBvdGhlciB6LXNjaGVtYSBwcm9wc1xuICAgICAgICAgICAgaWYgKGtleXNbaWR4XS5pbmRleE9mKFwiX18kXCIpID09PSAwKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICBwYXRoLnB1c2goa2V5c1tpZHhdKTtcbiAgICAgICAgICAgIGNvbGxlY3RSZWZlcmVuY2VzKG9ialtrZXlzW2lkeF1dLCByZXN1bHRzLCBzY29wZSwgcGF0aCk7XG4gICAgICAgICAgICBwYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmouaWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2NvcGUucG9wKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBjb21waWxlQXJyYXlPZlNjaGVtYXNMb29wID0gZnVuY3Rpb24gKG1haW5SZXBvcnQsIGFycikge1xuICAgIHZhciBpZHggPSBhcnIubGVuZ3RoLFxuICAgICAgICBjb21waWxlZENvdW50ID0gMDtcblxuICAgIHdoaWxlIChpZHgtLSkge1xuXG4gICAgICAgIC8vIHRyeSB0byBjb21waWxlIGVhY2ggc2NoZW1hIHNlcGFyYXRlbHlcbiAgICAgICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQobWFpblJlcG9ydCk7XG4gICAgICAgIHZhciBpc1ZhbGlkID0gZXhwb3J0cy5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBhcnJbaWR4XSk7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7IGNvbXBpbGVkQ291bnQrKzsgfVxuXG4gICAgICAgIC8vIGNvcHkgZXJyb3JzIHRvIHJlcG9ydFxuICAgICAgICBtYWluUmVwb3J0LmVycm9ycyA9IG1haW5SZXBvcnQuZXJyb3JzLmNvbmNhdChyZXBvcnQuZXJyb3JzKTtcblxuICAgIH1cblxuICAgIHJldHVybiBjb21waWxlZENvdW50O1xufTtcblxuZnVuY3Rpb24gZmluZElkKGFyciwgaWQpIHtcbiAgICB2YXIgaWR4ID0gYXJyLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgaWYgKGFycltpZHhdLmlkID09PSBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGFycltpZHhdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG52YXIgY29tcGlsZUFycmF5T2ZTY2hlbWFzID0gZnVuY3Rpb24gKHJlcG9ydCwgYXJyKSB7XG5cbiAgICB2YXIgY29tcGlsZWQgPSAwLFxuICAgICAgICBsYXN0TG9vcENvbXBpbGVkO1xuXG4gICAgZG8ge1xuXG4gICAgICAgIC8vIHJlbW92ZSBhbGwgVU5SRVNPTFZBQkxFX1JFRkVSRU5DRSBlcnJvcnMgYmVmb3JlIGNvbXBpbGluZyBhcnJheSBhZ2FpblxuICAgICAgICB2YXIgaWR4ID0gcmVwb3J0LmVycm9ycy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC5lcnJvcnNbaWR4XS5jb2RlID09PSBcIlVOUkVTT0xWQUJMRV9SRUZFUkVOQ0VcIikge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5lcnJvcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZW1lbWJlciBob3cgbWFueSB3ZXJlIGNvbXBpbGVkIGluIHRoZSBsYXN0IGxvb3BcbiAgICAgICAgbGFzdExvb3BDb21waWxlZCA9IGNvbXBpbGVkO1xuXG4gICAgICAgIC8vIGNvdW50IGhvdyBtYW55IGFyZSBjb21waWxlZCBub3dcbiAgICAgICAgY29tcGlsZWQgPSBjb21waWxlQXJyYXlPZlNjaGVtYXNMb29wLmNhbGwodGhpcywgcmVwb3J0LCBhcnIpO1xuXG4gICAgICAgIC8vIGZpeCBfXyRtaXNzaW5nUmVmZXJlbmNlcyBpZiBwb3NzaWJsZVxuICAgICAgICBpZHggPSBhcnIubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBzY2ggPSBhcnJbaWR4XTtcbiAgICAgICAgICAgIGlmIChzY2guX18kbWlzc2luZ1JlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4MiA9IHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlkeDItLSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVmT2JqID0gc2NoLl9fJG1pc3NpbmdSZWZlcmVuY2VzW2lkeDJdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBmaW5kSWQoYXJyLCByZWZPYmoucmVmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIG1pZ2h0IGNyZWF0ZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZPYmoub2JqW1wiX19cIiArIHJlZk9iai5rZXkgKyBcIlJlc29sdmVkXCJdID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHJlc29sdmVkIG5vdyBzbyBkZWxldGUgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5zcGxpY2UoaWR4MiwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaC5fXyRtaXNzaW5nUmVmZXJlbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBrZWVwIHJlcGVhdGluZyBpZiBub3QgYWxsIGNvbXBpbGVkIGFuZCBhdCBsZWFzdCBvbmUgbW9yZSB3YXMgY29tcGlsZWQgaW4gdGhlIGxhc3QgbG9vcFxuICAgIH0gd2hpbGUgKGNvbXBpbGVkICE9PSBhcnIubGVuZ3RoICYmIGNvbXBpbGVkICE9PSBsYXN0TG9vcENvbXBpbGVkKTtcblxuICAgIHJldHVybiByZXBvcnQuaXNWYWxpZCgpO1xuXG59O1xuXG5leHBvcnRzLmNvbXBpbGVTY2hlbWEgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcblxuICAgIHJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2UgPSBcIlNDSEVNQV9DT01QSUxBVElPTl9GQUlMRURcIjtcblxuICAgIC8vIGlmIHNjaGVtYSBpcyBhIHN0cmluZywgYXNzdW1lIGl0J3MgYSB1cmlcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgbG9hZGVkU2NoZW1hID0gU2NoZW1hQ2FjaGUuZ2V0U2NoZW1hQnlVcmkuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgICAgIGlmICghbG9hZGVkU2NoZW1hKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJTQ0hFTUFfTk9UX1JFQUNIQUJMRVwiLCBbc2NoZW1hXSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hID0gbG9hZGVkU2NoZW1hO1xuICAgIH1cblxuICAgIC8vIGlmIHNjaGVtYSBpcyBhbiBhcnJheSwgYXNzdW1lIGl0J3MgYW4gYXJyYXkgb2Ygc2NoZW1hc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBpbGVBcnJheU9mU2NoZW1hcy5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGFuIGlkIHRoYW4gaXQgc2hvdWxkIGJlIGNhY2hlZCBhbHJlYWR5IChpZiB0aGlzIGluc3RhbmNlIGhhcyBjb21waWxlZCBpdClcbiAgICBpZiAoc2NoZW1hLl9fJGNvbXBpbGVkICYmIHNjaGVtYS5pZCAmJiBTY2hlbWFDYWNoZS5jaGVja0NhY2hlRm9yVXJpLmNhbGwodGhpcywgc2NoZW1hLmlkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2NoZW1hLl9fJGNvbXBpbGVkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCByZS1jb21waWxlIHNjaGVtYXNcbiAgICBpZiAoc2NoZW1hLl9fJGNvbXBpbGVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaWQgJiYgdHlwZW9mIHNjaGVtYS5pZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBhZGQgdGhpcyB0byBvdXIgc2NoZW1hQ2FjaGUgKGJlZm9yZSBjb21waWxhdGlvbiBpbiBjYXNlIHdlIGhhdmUgcmVmZXJlbmNlcyBpbmNsdWRpbmcgaWQpXG4gICAgICAgIFNjaGVtYUNhY2hlLmNhY2hlU2NoZW1hQnlVcmkuY2FsbCh0aGlzLCBzY2hlbWEuaWQsIHNjaGVtYSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSwgc28gd2UgbmVlZCB0byByZW1lbWJlciBvdXIgcm9vdFxuICAgIHZhciBpc1Jvb3QgPSBmYWxzZTtcbiAgICBpZiAoIXJlcG9ydC5yb290U2NoZW1hKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBpc1Jvb3QgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGRlbGV0ZSBhbGwgX18kbWlzc2luZ1JlZmVyZW5jZXMgZnJvbSBwcmV2aW91cyBjb21waWxhdGlvbiBhdHRlbXB0c1xuICAgIHZhciBpc1ZhbGlkRXhjZXB0UmVmZXJlbmNlcyA9IHJlcG9ydC5pc1ZhbGlkKCk7XG4gICAgZGVsZXRlIHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcztcblxuICAgIC8vIGNvbGxlY3QgYWxsIHJlZmVyZW5jZXMgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkIC0gJHJlZiBhbmQgJHNjaGVtYVxuICAgIHZhciByZWZzID0gY29sbGVjdFJlZmVyZW5jZXMuY2FsbCh0aGlzLCBzY2hlbWEpLFxuICAgICAgICBpZHggPSByZWZzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgLy8gcmVzb2x2ZSBhbGwgdGhlIGNvbGxlY3RlZCByZWZlcmVuY2VzIGludG8gX194eHhSZXNvbHZlZCBwb2ludGVyXG4gICAgICAgIHZhciByZWZPYmogPSByZWZzW2lkeF07XG4gICAgICAgIHZhciByZXNwb25zZSA9IFNjaGVtYUNhY2hlLmdldFNjaGVtYUJ5VXJpLmNhbGwodGhpcywgcmVwb3J0LCByZWZPYmoucmVmLCBzY2hlbWEpO1xuXG4gICAgICAgIC8vIHdlIGNhbiB0cnkgdG8gdXNlIGN1c3RvbSBzY2hlbWFSZWFkZXIgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHZhciBzY2hlbWFSZWFkZXIgPSB0aGlzLmdldFNjaGVtYVJlYWRlcigpO1xuICAgICAgICAgICAgaWYgKHNjaGVtYVJlYWRlcikge1xuICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwcG9zZWQgdG8gcmV0dXJuIGEgdmFsaWQgc2NoZW1hXG4gICAgICAgICAgICAgICAgdmFyIHMgPSBzY2hlbWFSZWFkZXIocmVmT2JqLnJlZik7XG4gICAgICAgICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgbmVlZHMgdG8gaGF2ZSB0aGUgaWRcbiAgICAgICAgICAgICAgICAgICAgcy5pZCA9IHJlZk9iai5yZWY7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBjb21waWxlIHRoZSBzY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJlcG9ydCA9IG5ldyBSZXBvcnQocmVwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHBvcnRzLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzdWJyZXBvcnQsIHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IGVycm9ycyB0byByZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5lcnJvcnMgPSByZXBvcnQuZXJyb3JzLmNvbmNhdChzdWJyZXBvcnQuZXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gU2NoZW1hQ2FjaGUuZ2V0U2NoZW1hQnlVcmkuY2FsbCh0aGlzLCByZXBvcnQsIHJlZk9iai5yZWYsIHNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgIHZhciBoYXNOb3RWYWxpZCA9IHJlcG9ydC5oYXNFcnJvcihcIlJFTU9URV9OT1RfVkFMSURcIiwgW3JlZk9iai5yZWZdKTtcbiAgICAgICAgICAgIHZhciBpc0Fic29sdXRlID0gVXRpbHMuaXNBYnNvbHV0ZVVyaShyZWZPYmoucmVmKTtcbiAgICAgICAgICAgIHZhciBpc0Rvd25sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBpZ25vcmVVbnJlc29sdmFibGVSZW1vdGVzID0gdGhpcy5vcHRpb25zLmlnbm9yZVVucmVzb2x2YWJsZVJlZmVyZW5jZXMgPT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpc0Fic29sdXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IGFkZCBVTlJFU09MVkFCTEVfUkVGRVJFTkNFIGZvciBzY2hlbWFzIHdlIGFscmVhZHkgaGF2ZSBkb3dubG9hZGVkXG4gICAgICAgICAgICAgICAgLy8gYW5kIHNldCB0aHJvdWdoIHNldFJlbW90ZVJlZmVyZW5jZSBtZXRob2RcbiAgICAgICAgICAgICAgICBpc0Rvd25sb2FkZWQgPSBTY2hlbWFDYWNoZS5jaGVja0NhY2hlRm9yVXJpLmNhbGwodGhpcywgcmVmT2JqLnJlZik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNOb3RWYWxpZCkge1xuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFzIFJFTU9URV9OT1RfVkFMSUQgZXJyb3IgZm9yIHRoaXMgb25lXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlnbm9yZVVucmVzb2x2YWJsZVJlbW90ZXMgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVVucmVzb2x2YWJsZVJlbW90ZXMgaXMgb24gYW5kIHJlbW90ZSBpc0Fic29sdXRlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRG93bmxvYWRlZCkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW90ZSBpcyBkb3dubG9hZGVkLCBzbyBubyBVTlJFU09MVkFCTEVfUkVGRVJFTkNFXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlcG9ydC5wYXRoLCByZWZPYmoucGF0aCk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiVU5SRVNPTFZBQkxFX1JFRkVSRU5DRVwiLCBbcmVmT2JqLnJlZl0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoID0gcmVwb3J0LnBhdGguc2xpY2UoMCwgLXJlZk9iai5wYXRoLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAvLyBwdXNibGlzaCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgb3V0XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRFeGNlcHRSZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcyA9IHNjaGVtYS5fXyRtaXNzaW5nUmVmZXJlbmNlcyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLl9fJG1pc3NpbmdSZWZlcmVuY2VzLnB1c2gocmVmT2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcyBtaWdodCBjcmVhdGUgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgICByZWZPYmoub2JqW1wiX19cIiArIHJlZk9iai5rZXkgKyBcIlJlc29sdmVkXCJdID0gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgdmFyIGlzVmFsaWQgPSByZXBvcnQuaXNWYWxpZCgpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIHNjaGVtYS5fXyRjb21waWxlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNjaGVtYS5pZCAmJiB0eXBlb2Ygc2NoZW1hLmlkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhpcyBzY2hlbWEgZnJvbSBzY2hlbWFDYWNoZSBiZWNhdXNlIGl0IGZhaWxlZCB0byBjb21waWxlXG4gICAgICAgICAgICBTY2hlbWFDYWNoZS5yZW1vdmVGcm9tQ2FjaGVCeVVyaS5jYWxsKHRoaXMsIHNjaGVtYS5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3ZSBkb24ndCBuZWVkIHRoZSByb290IHBvaW50ZXIgYW55bW9yZVxuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgcmVwb3J0LnJvb3RTY2hlbWEgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWQ7XG5cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEZvcm1hdFZhbGlkYXRvcnMgPSByZXF1aXJlKFwiLi9Gb3JtYXRWYWxpZGF0b3JzXCIpLFxuICAgIEpzb25WYWxpZGF0aW9uICAgPSByZXF1aXJlKFwiLi9Kc29uVmFsaWRhdGlvblwiKSxcbiAgICBSZXBvcnQgICAgICAgICAgID0gcmVxdWlyZShcIi4vUmVwb3J0XCIpLFxuICAgIFV0aWxzICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcblxudmFyIFNjaGVtYVZhbGlkYXRvcnMgPSB7XG4gICAgJHJlZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtYXBwc2F3Zy1qc29uLXBvaW50ZXItMDdcbiAgICAgICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcGJyeWFuLXp5cC1qc29uLXJlZi0wM1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS4kcmVmICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiJHJlZlwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgICRzY2hlbWE6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS1jb3JlLmh0bWwjcmZjLnNlY3Rpb24uNlxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS4kc2NoZW1hICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiJHNjaGVtYVwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG11bHRpcGxlT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjEuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tdWx0aXBsZU9mICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibXVsdGlwbGVPZlwiLCBcIm51bWJlclwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm11bHRpcGxlT2YgPD0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcIm11bHRpcGxlT2ZcIiwgXCJzdHJpY3RseSBncmVhdGVyIHRoYW4gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1heGltdW06IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjIuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhpbXVtICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWF4aW11bVwiLCBcIm51bWJlclwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGV4Y2x1c2l2ZU1heGltdW06IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS4xLjIuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImV4Y2x1c2l2ZU1heGltdW1cIiwgXCJib29sZWFuXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4aW11bSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX0RFUEVOREVOQ1lcIiwgW1wiZXhjbHVzaXZlTWF4aW11bVwiLCBcIm1heGltdW1cIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5pbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWluaW11bSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1pbmltdW1cIiwgXCJudW1iZXJcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBleGNsdXNpdmVNaW5pbXVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMS4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJleGNsdXNpdmVNaW5pbXVtXCIsIFwiYm9vbGVhblwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm1pbmltdW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9ERVBFTkRFTkNZXCIsIFtcImV4Y2x1c2l2ZU1pbmltdW1cIiwgXCJtaW5pbXVtXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4TGVuZ3RoOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4xLjFcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhzY2hlbWEubWF4TGVuZ3RoKSAhPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJtYXhMZW5ndGhcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcIm1heExlbmd0aFwiLCBcImdyZWF0ZXIgdGhhbiwgb3IgZXF1YWwgdG8gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1pbkxlbmd0aDogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjIuMi4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pbkxlbmd0aCkgIT09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWluTGVuZ3RoXCIsIFwiaW50ZWdlclwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLm1pbkxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5MZW5ndGhcIiwgXCJncmVhdGVyIHRoYW4sIG9yIGVxdWFsIHRvIDBcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMi4zLjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEucGF0dGVybiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInBhdHRlcm5cIiwgXCJzdHJpbmdcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBSZWdFeHAoc2NoZW1hLnBhdHRlcm4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfUEFUVEVSTlwiLCBbXCJwYXR0ZXJuXCIsIHNjaGVtYS5wYXR0ZXJuXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMS4xXG4gICAgICAgIHZhciB0eXBlID0gVXRpbHMud2hhdElzKHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgICBpZiAodHlwZSAhPT0gXCJib29sZWFuXCIgJiYgdHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImFkZGl0aW9uYWxJdGVtc1wiLCBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFkZGl0aW9uYWxJdGVtc1wiKTtcbiAgICAgICAgICAgIGV4cG9ydHMudmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy4xLjFcbiAgICAgICAgdmFyIHR5cGUgPSBVdGlscy53aGF0SXMoc2NoZW1hLml0ZW1zKTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcIml0ZW1zXCIpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLml0ZW1zKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5pdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwiaXRlbXNcIik7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLml0ZW1zW2lkeF0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIml0ZW1zXCIsIFtcImFycmF5XCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjdXN0b20gLSBzdHJpY3QgbW9kZVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlQWRkaXRpb25hbCA9PT0gdHJ1ZSAmJiBzY2hlbWEuYWRkaXRpb25hbEl0ZW1zID09PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiYWRkaXRpb25hbEl0ZW1zXCJdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjdXN0b21lIC0gYXNzdW1lIGRlZmluZWQgZmFsc2UgbW9kZVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFzc3VtZUFkZGl0aW9uYWwgJiYgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gdW5kZWZpbmVkICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtYXhJdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMi4xXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibWF4SXRlbXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4SXRlbXMgPCAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wibWF4SXRlbXNcIiwgXCJncmVhdGVyIHRoYW4sIG9yIGVxdWFsIHRvIDBcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5JdGVtczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjMuMy4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pbkl0ZW1zKSAhPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJtaW5JdGVtc1wiLCBcImludGVnZXJcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5taW5JdGVtcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5JdGVtc1wiLCBcImdyZWF0ZXIgdGhhbiwgb3IgZXF1YWwgdG8gMFwiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHVuaXF1ZUl0ZW1zOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuMy40LjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEudW5pcXVlSXRlbXMgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1widW5pcXVlSXRlbXNcIiwgXCJib29sZWFuXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4UHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMS4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1heFByb3BlcnRpZXMpICE9PSBcImludGVnZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1heFByb3BlcnRpZXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWF4UHJvcGVydGllcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtYXhQcm9wZXJ0aWVzXCIsIFwiZ3JlYXRlciB0aGFuLCBvciBlcXVhbCB0byAwXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWluUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuMi4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLm1pblByb3BlcnRpZXMpICE9PSBcImludGVnZXJcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm1pblByb3BlcnRpZXNcIiwgXCJpbnRlZ2VyXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEubWluUHJvcGVydGllcyA8IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJtaW5Qcm9wZXJ0aWVzXCIsIFwiZ3JlYXRlciB0aGFuLCBvciBlcXVhbCB0byAwXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjMuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5yZXF1aXJlZCkgIT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInJlcXVpcmVkXCIsIFwiYXJyYXlcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5yZXF1aXJlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJyZXF1aXJlZFwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5yZXF1aXJlZC5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5yZXF1aXJlZFtpZHhdICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVkFMVUVfVFlQRVwiLCBbXCJyZXF1aXJlZFwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wicmVxdWlyZWRcIiwgXCJhbiBhcnJheSB3aXRoIHVuaXF1ZSBpdGVtc1wiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC40LjFcbiAgICAgICAgdmFyIHR5cGUgPSBVdGlscy53aGF0SXMoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKHR5cGUgIT09IFwiYm9vbGVhblwiICYmIHR5cGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLCBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNC40LjFcbiAgICAgICAgaWYgKFV0aWxzLndoYXRJcyhzY2hlbWEucHJvcGVydGllcykgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJwcm9wZXJ0aWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpLFxuICAgICAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XSxcbiAgICAgICAgICAgICAgICB2YWwgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGtleSk7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCB2YWwpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGN1c3RvbSAtIHN0cmljdCBtb2RlXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VBZGRpdGlvbmFsID09PSB0cnVlICYmIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGN1c3RvbWUgLSBhc3N1bWUgZGVmaW5lZCBmYWxzZSBtb2RlXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXNzdW1lQWRkaXRpb25hbCAmJiBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3VzdG9tIC0gZm9yY2VQcm9wZXJ0aWVzXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VQcm9wZXJ0aWVzID09PSB0cnVlICYmIGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJDVVNUT01fTU9ERV9GT1JDRV9QUk9QRVJUSUVTXCIsIFtcInByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYXR0ZXJuUHJvcGVydGllczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjQuNC4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICAgICAgdmFsID0gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFJlZ0V4cChrZXkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfUEFUVEVSTlwiLCBbXCJwYXR0ZXJuUHJvcGVydGllc1wiLCBrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJwYXR0ZXJuUHJvcGVydGllc1wiKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goa2V5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgdmFsKTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjdXN0b20gLSBmb3JjZVByb3BlcnRpZXNcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgPT09IHRydWUgJiYga2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIkNVU1RPTV9NT0RFX0ZPUkNFX1BST1BFUlRJRVNcIiwgW1wicGF0dGVyblByb3BlcnRpZXNcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS40LjUuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5kZXBlbmRlbmNpZXMpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyksXG4gICAgICAgICAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgc2NoZW1hS2V5ID0ga2V5c1tpZHhdLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFEZXBlbmRlbmN5ID0gc2NoZW1hLmRlcGVuZGVuY2llc1tzY2hlbWFLZXldLFxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gVXRpbHMud2hhdElzKHNjaGVtYURlcGVuZGVuY3kpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImRlcGVuZGVuY2llc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChzY2hlbWFLZXkpO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWFEZXBlbmRlbmN5KTtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHgyID0gc2NoZW1hRGVwZW5kZW5jeS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZHgyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwibm90IGVtcHR5IGFycmF5XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaWR4Mi0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYURlcGVuZGVuY3lbaWR4Ml0gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1ZBTFVFX1RZUEVcIiwgW1wiZGVwZW5kZW5zaWNlc1wiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hRGVwZW5kZW5jeSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZGVwZW5kZW5jaWVzXCIsIFwiYW4gYXJyYXkgd2l0aCB1bmlxdWUgaXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9WQUxVRV9UWVBFXCIsIFtcImRlcGVuZGVuY2llc1wiLCBcIm9iamVjdCBvciBhcnJheVwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBlbnVtOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS4xLjFcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLmVudW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImVudW1cIiwgXCJhcnJheVwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmVudW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiZW51bVwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLmVudW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcImVudW1cIiwgXCJhbiBhcnJheSB3aXRoIHVuaXF1ZSBlbGVtZW50c1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHR5cGU6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjIuMVxuICAgICAgICB2YXIgcHJpbWl0aXZlVHlwZXMgPSBbXCJhcnJheVwiLCBcImJvb2xlYW5cIiwgXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCIsIFwibnVsbFwiLCBcIm9iamVjdFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgIHByaW1pdGl2ZVR5cGVTdHIgPSBwcmltaXRpdmVUeXBlcy5qb2luKFwiLFwiKSxcbiAgICAgICAgICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNjaGVtYS50eXBlKTtcblxuICAgICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS50eXBlLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVUeXBlcy5pbmRleE9mKHNjaGVtYS50eXBlW2lkeF0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1widHlwZVwiLCBwcmltaXRpdmVUeXBlU3RyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFV0aWxzLmlzVW5pcXVlQXJyYXkoc2NoZW1hLnR5cGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJ0eXBlXCIsIFwiYW4gb2JqZWN0IHdpdGggdW5pcXVlIHByb3BlcnRpZXNcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEudHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVR5cGVzLmluZGV4T2Yoc2NoZW1hLnR5cGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0eXBlXCIsIHByaW1pdGl2ZVR5cGVTdHJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0eXBlXCIsIFtcInN0cmluZ1wiLCBcImFycmF5XCJdXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vRW1wdHlTdHJpbmdzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgaXNBcnJheSAmJiBzY2hlbWEudHlwZS5pbmRleE9mKFwic3RyaW5nXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluTGVuZ3RoID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmVudW0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEubWluTGVuZ3RoID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub0VtcHR5QXJyYXlzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwiYXJyYXlcIiB8fCBpc0FycmF5ICYmIHNjaGVtYS50eXBlLmluZGV4T2YoXCJhcnJheVwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm1pbkl0ZW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLm1pbkl0ZW1zID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJvYmplY3RcIiB8fCBpc0FycmF5ICYmIHNjaGVtYS50eXBlLmluZGV4T2YoXCJvYmplY3RcIikgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgJiYgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcInByb3BlcnRpZXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuaXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wiaXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWluSXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluSXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWluSXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWF4SXRlbXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcImFycmF5XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWF4SXRlbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWF4SXRlbXNcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlTWluTGVuZ3RoID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgaXNBcnJheSAmJiBzY2hlbWEudHlwZS5pbmRleE9mKFwic3RyaW5nXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubWluTGVuZ3RoID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZvcm1hdCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5lbnVtID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLnBhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VOREVGSU5FRF9TVFJJQ1RcIiwgW1wibWluTGVuZ3RoXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZU1heExlbmd0aCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiIHx8IGlzQXJyYXkgJiYgc2NoZW1hLnR5cGUuaW5kZXhPZihcInN0cmluZ1wiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm1heExlbmd0aCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5mb3JtYXQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZW51bSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5wYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcIm1heExlbmd0aFwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhbGxPZjogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuMy4xXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbGxPZikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiYWxsT2ZcIiwgXCJhcnJheVwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmFsbE9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9NVVNUX0JFXCIsIFtcImFsbE9mXCIsIFwiYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudFwiXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gc2NoZW1hLmFsbE9mLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJhbGxPZlwiKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEuYWxsT2ZbaWR4XSk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFueU9mOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjUuNS40LjFcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLmFueU9mKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJhbnlPZlwiLCBcImFycmF5XCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEuYW55T2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX01VU1RfQkVcIiwgW1wiYW55T2ZcIiwgXCJhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBzY2hlbWEuYW55T2YubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImFueU9mXCIpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goaWR4LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudmFsaWRhdGVTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYS5hbnlPZltpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgb25lT2Y6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjUuMVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEub25lT2YpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcIm9uZU9mXCIsIFwiYXJyYXlcIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS5vbmVPZi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfTVVTVF9CRVwiLCBbXCJvbmVPZlwiLCBcImFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGlkeCA9IHNjaGVtYS5vbmVPZi5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwib25lT2ZcIik7XG4gICAgICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChpZHgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLm9uZU9mW2lkeF0pO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNS41LjYuMVxuICAgICAgICBpZiAoVXRpbHMud2hhdElzKHNjaGVtYS5ub3QpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wibm90XCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJub3RcIik7XG4gICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEubm90KTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZWZpbml0aW9uczogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi41LjUuNy4xXG4gICAgICAgIGlmIChVdGlscy53aGF0SXMoc2NoZW1hLmRlZmluaXRpb25zKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImRlZmluaXRpb25zXCIsIFwib2JqZWN0XCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmRlZmluaXRpb25zKSxcbiAgICAgICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2lkeF0sXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHNjaGVtYS5kZWZpbml0aW9uc1trZXldO1xuICAgICAgICAgICAgICAgIHJlcG9ydC5wYXRoLnB1c2goXCJkZWZpbml0aW9uc1wiKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgdmFsKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZm9ybWF0OiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuZm9ybWF0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiZm9ybWF0XCIsIFwic3RyaW5nXCJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChGb3JtYXRWYWxpZGF0b3JzW3NjaGVtYS5mb3JtYXRdID09PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLmlnbm9yZVVua25vd25Gb3JtYXRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiVU5LTk9XTl9GT1JNQVRcIiwgW3NjaGVtYS5mb3JtYXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgaWQ6IGZ1bmN0aW9uIChyZXBvcnQsIHNjaGVtYSkge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS1jb3JlLmh0bWwjcmZjLnNlY3Rpb24uNy4yXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmlkICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1RZUEVfRVhQRUNURURcIiwgW1wiaWRcIiwgXCJzdHJpbmdcIl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0aXRsZTogZnVuY3Rpb24gKHJlcG9ydCwgc2NoZW1hKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi42LjFcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEudGl0bGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIktFWVdPUkRfVFlQRV9FWFBFQ1RFRFwiLCBbXCJ0aXRsZVwiLCBcInN0cmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcbiAgICAgICAgLy8gaHR0cDovL2pzb24tc2NoZW1hLm9yZy9sYXRlc3QvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjYuMVxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5kZXNjcmlwdGlvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9UWVBFX0VYUEVDVEVEXCIsIFtcImRlc2NyaXB0aW9uXCIsIFwic3RyaW5nXCJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uICgvKiByZXBvcnQsIHNjaGVtYSAqLykge1xuICAgICAgICAvLyBodHRwOi8vanNvbi1zY2hlbWEub3JnL2xhdGVzdC9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uNi4yXG4gICAgICAgIC8vIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgcGxhY2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIGtleXdvcmQuXG4gICAgfVxufTtcblxudmFyIHZhbGlkYXRlQXJyYXlPZlNjaGVtYXMgPSBmdW5jdGlvbiAocmVwb3J0LCBhcnIpIHtcbiAgICB2YXIgaWR4ID0gYXJyLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgYXJyW2lkeF0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVwb3J0LmlzVmFsaWQoKTtcbn07XG5cbmV4cG9ydHMudmFsaWRhdGVTY2hlbWEgPSBmdW5jdGlvbiAocmVwb3J0LCBzY2hlbWEpIHtcblxuICAgIHJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2UgPSBcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRFwiO1xuXG4gICAgLy8gaWYgc2NoZW1hIGlzIGFuIGFycmF5LCBhc3N1bWUgaXQncyBhbiBhcnJheSBvZiBzY2hlbWFzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVBcnJheU9mU2NoZW1hcy5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3QgcmV2YWxpZGF0ZSBzY2hlbWEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBvbmNlXG4gICAgaWYgKHNjaGVtYS5fXyR2YWxpZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgJHNjaGVtYSBpcyBwcmVzZW50LCB0aGlzIHNjaGVtYSBzaG91bGQgdmFsaWRhdGUgYWdhaW5zdCB0aGF0ICRzY2hlbWFcbiAgICB2YXIgaGFzUGFyZW50U2NoZW1hID0gc2NoZW1hLiRzY2hlbWEgJiYgc2NoZW1hLmlkICE9PSBzY2hlbWEuJHNjaGVtYTtcbiAgICBpZiAoaGFzUGFyZW50U2NoZW1hKSB7XG4gICAgICAgIGlmIChzY2hlbWEuX18kc2NoZW1hUmVzb2x2ZWQgJiYgc2NoZW1hLl9fJHNjaGVtYVJlc29sdmVkICE9PSBzY2hlbWEpIHtcbiAgICAgICAgICAgIHZhciBzdWJSZXBvcnQgPSBuZXcgUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHN1YlJlcG9ydCwgc2NoZW1hLl9fJHNjaGVtYVJlc29sdmVkLCBzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKHZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlBBUkVOVF9TQ0hFTUFfVkFMSURBVElPTl9GQUlMRURcIiwgbnVsbCwgc3ViUmVwb3J0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlVW5yZXNvbHZhYmxlUmVmZXJlbmNlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJlcG9ydC5hZGRFcnJvcihcIlJFRl9VTlJFU09MVkVEXCIsIFtzY2hlbWEuJHNjaGVtYV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub1R5cGVsZXNzID09PSB0cnVlKSB7XG4gICAgICAgIC8vIGlzc3VlICMzNiAtIGluaGVyaXQgdHlwZSB0byBhbnlPZiwgb25lT2YsIGFsbE9mIGlmIG5vVHlwZWxlc3MgaXMgZGVmaW5lZFxuICAgICAgICBpZiAoc2NoZW1hLnR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIHNjaGVtYXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbnlPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5hbnlPZik7IH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5vbmVPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5vbmVPZik7IH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5hbGxPZikpIHsgc2NoZW1hcyA9IHNjaGVtYXMuY29uY2F0KHNjaGVtYS5hbGxPZik7IH1cbiAgICAgICAgICAgIHNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbiAoc2NoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY2gudHlwZSkgeyBzY2gudHlwZSA9IHNjaGVtYS50eXBlOyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmQgaXNzdWUgIzM2XG4gICAgICAgIGlmIChzY2hlbWEuZW51bSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzY2hlbWEuYW55T2YgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2NoZW1hLm9uZU9mID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNjaGVtYS5ub3QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2NoZW1hLiRyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVwb3J0LmFkZEVycm9yKFwiS0VZV09SRF9VTkRFRklORURfU1RSSUNUXCIsIFtcInR5cGVcIl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLFxuICAgICAgICBpZHggPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiX19cIikgPT09IDApIHsgY29udGludWU7IH1cbiAgICAgICAgaWYgKFNjaGVtYVZhbGlkYXRvcnNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBTY2hlbWFWYWxpZGF0b3JzW2tleV0uY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1BhcmVudFNjaGVtYSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub0V4dHJhS2V5d29yZHMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXBvcnQuYWRkRXJyb3IoXCJLRVlXT1JEX1VORVhQRUNURURcIiwgW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpY0NoZWNrID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChzY2hlbWEuZW51bSkge1xuICAgICAgICAgICAgLy8gYnJlYWsgcmVjdXJzaW9uXG4gICAgICAgICAgICB2YXIgdG1wU2NoZW1hID0gVXRpbHMuY2xvbmUoc2NoZW1hKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0bXBTY2hlbWEuZW51bTtcbiAgICAgICAgICAgIGRlbGV0ZSB0bXBTY2hlbWEuZGVmYXVsdDtcblxuICAgICAgICAgICAgcmVwb3J0LnBhdGgucHVzaChcImVudW1cIik7XG4gICAgICAgICAgICBpZHggPSBzY2hlbWEuZW51bS5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKGlkeC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgdG1wU2NoZW1hLCBzY2hlbWEuZW51bVtpZHhdKTtcbiAgICAgICAgICAgICAgICByZXBvcnQucGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5kZWZhdWx0KSB7XG4gICAgICAgICAgICByZXBvcnQucGF0aC5wdXNoKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgICAgIEpzb25WYWxpZGF0aW9uLnZhbGlkYXRlLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEsIHNjaGVtYS5kZWZhdWx0KTtcbiAgICAgICAgICAgIHJlcG9ydC5wYXRoLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzVmFsaWQgPSByZXBvcnQuaXNWYWxpZCgpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIHNjaGVtYS5fXyR2YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaXNWYWxpZDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5pc0Fic29sdXRlVXJpID0gZnVuY3Rpb24gKHVyaSkge1xuICAgIHJldHVybiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJpKTtcbn07XG5cbmV4cG9ydHMuaXNSZWxhdGl2ZVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgICAvLyByZWxhdGl2ZSBVUklzIHRoYXQgZW5kIHdpdGggYSBoYXNoIHNpZ24sIGlzc3VlICM1NlxuICAgIHJldHVybiAvLisjLy50ZXN0KHVyaSk7XG59O1xuXG5leHBvcnRzLndoYXRJcyA9IGZ1bmN0aW9uICh3aGF0KSB7XG5cbiAgICB2YXIgdG8gPSB0eXBlb2Ygd2hhdDtcblxuICAgIGlmICh0byA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAod2hhdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoYXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm9iamVjdFwiOyAvLyB0eXBlb2Ygd2hhdCA9PT0gJ29iamVjdCcgJiYgd2hhdCA9PT0gT2JqZWN0KHdoYXQpICYmICFBcnJheS5pc0FycmF5KHdoYXQpO1xuICAgIH1cblxuICAgIGlmICh0byA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHdoYXQpKSB7XG4gICAgICAgICAgICBpZiAod2hhdCAlIDEgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbnRlZ2VyXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4od2hhdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm5vdC1hLW51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcInVua25vd24tbnVtYmVyXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvOyAvLyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgZnVuY3Rpb25cblxufTtcblxuZXhwb3J0cy5hcmVFcXVhbCA9IGZ1bmN0aW9uIGFyZUVxdWFsKGpzb24xLCBqc29uMikge1xuICAgIC8vIGh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvbGF0ZXN0L2pzb24tc2NoZW1hLWNvcmUuaHRtbCNyZmMuc2VjdGlvbi4zLjZcblxuICAgIC8vIFR3byBKU09OIHZhbHVlcyBhcmUgc2FpZCB0byBiZSBlcXVhbCBpZiBhbmQgb25seSBpZjpcbiAgICAvLyBib3RoIGFyZSBudWxsczsgb3JcbiAgICAvLyBib3RoIGFyZSBib29sZWFucywgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWU7IG9yXG4gICAgLy8gYm90aCBhcmUgc3RyaW5ncywgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWU7IG9yXG4gICAgLy8gYm90aCBhcmUgbnVtYmVycywgYW5kIGhhdmUgdGhlIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlOyBvclxuICAgIGlmIChqc29uMSA9PT0ganNvbjIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGksIGxlbjtcblxuICAgIC8vIGJvdGggYXJlIGFycmF5cywgYW5kOlxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24xKSAmJiBBcnJheS5pc0FycmF5KGpzb24yKSkge1xuICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtczsgYW5kXG4gICAgICAgIGlmIChqc29uMS5sZW5ndGggIT09IGpzb24yLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGl0ZW1zIGF0IHRoZSBzYW1lIGluZGV4IGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uOyBvclxuICAgICAgICBsZW4gPSBqc29uMS5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKCFhcmVFcXVhbChqc29uMVtpXSwganNvbjJbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGJvdGggYXJlIG9iamVjdHMsIGFuZDpcbiAgICBpZiAoZXhwb3J0cy53aGF0SXMoanNvbjEpID09PSBcIm9iamVjdFwiICYmIGV4cG9ydHMud2hhdElzKGpzb24yKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0eSBuYW1lczsgYW5kXG4gICAgICAgIHZhciBrZXlzMSA9IE9iamVjdC5rZXlzKGpzb24xKTtcbiAgICAgICAgdmFyIGtleXMyID0gT2JqZWN0LmtleXMoanNvbjIpO1xuICAgICAgICBpZiAoIWFyZUVxdWFsKGtleXMxLCBrZXlzMikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB2YWx1ZXMgZm9yIGEgc2FtZSBwcm9wZXJ0eSBuYW1lIGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLlxuICAgICAgICBsZW4gPSBrZXlzMS5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKCFhcmVFcXVhbChqc29uMVtrZXlzMVtpXV0sIGpzb24yW2tleXMxW2ldXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5pc1VuaXF1ZUFycmF5ID0gZnVuY3Rpb24gKGFyciwgaW5kZXhlcykge1xuICAgIHZhciBpLCBqLCBsID0gYXJyLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoZXhwb3J0cy5hcmVFcXVhbChhcnJbaV0sIGFycltqXSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhlcykgeyBpbmRleGVzLnB1c2goaSwgaik7IH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnRzLmRpZmZlcmVuY2UgPSBmdW5jdGlvbiAoYmlnU2V0LCBzdWJTZXQpIHtcbiAgICB2YXIgYXJyID0gW10sXG4gICAgICAgIGlkeCA9IGJpZ1NldC5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIGlmIChzdWJTZXQuaW5kZXhPZihiaWdTZXRbaWR4XSkgPT09IC0xKSB7XG4gICAgICAgICAgICBhcnIucHVzaChiaWdTZXRbaWR4XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn07XG5cbi8vIE5PVCBhIGRlZXAgdmVyc2lvbiBvZiBjbG9uZVxuZXhwb3J0cy5jbG9uZSA9IGZ1bmN0aW9uIChzcmMpIHtcbiAgICBpZiAodHlwZW9mIHNyYyA9PT0gXCJ1bmRlZmluZWRcIikgeyByZXR1cm4gdm9pZCAwOyB9XG4gICAgaWYgKHR5cGVvZiBzcmMgIT09IFwib2JqZWN0XCIgfHwgc3JjID09PSBudWxsKSB7IHJldHVybiBzcmM7IH1cbiAgICB2YXIgcmVzLCBpZHg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgaWR4ID0gc3JjLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICByZXNbaWR4XSA9IHNyY1tpZHhdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzID0ge307XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICAgICAgaWR4ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIHJlc1trZXldID0gc3JjW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5cbmV4cG9ydHMuY2xvbmVEZWVwID0gZnVuY3Rpb24gKHNyYykge1xuICAgIHZhciB2aXNpdGVkID0gW10sIGNsb25lZCA9IFtdO1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcChzcmMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzcmMgIT09IFwib2JqZWN0XCIgfHwgc3JjID09PSBudWxsKSB7IHJldHVybiBzcmM7IH1cbiAgICAgICAgdmFyIHJlcywgaWR4LCBjaWR4O1xuXG4gICAgICAgIGNpZHggPSB2aXNpdGVkLmluZGV4T2Yoc3JjKTtcbiAgICAgICAgaWYgKGNpZHggIT09IC0xKSB7IHJldHVybiBjbG9uZWRbY2lkeF07IH1cblxuICAgICAgICB2aXNpdGVkLnB1c2goc3JjKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgICAgICBjbG9uZWQucHVzaChyZXMpO1xuICAgICAgICAgICAgaWR4ID0gc3JjLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpZHgtLSkge1xuICAgICAgICAgICAgICAgIHJlc1tpZHhdID0gY2xvbmVEZWVwKHNyY1tpZHhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHt9O1xuICAgICAgICAgICAgY2xvbmVkLnB1c2gocmVzKTtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICAgICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgICAgICByZXNba2V5XSA9IGNsb25lRGVlcChzcmNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lRGVlcChzcmMpO1xufTtcblxuLypcbiAgZm9sbG93aW5nIGZ1bmN0aW9uIGNvbWVzIGZyb20gcHVueWNvZGUuanMgbGlicmFyeVxuICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qc1xuKi9cbi8qanNoaW50IC1XMDE2Ki9cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcbiAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuICogbWF0Y2hpbmcgVVRGLTE2LlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG4gKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG4gKiBAbmFtZSBkZWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG4gKi9cbmV4cG9ydHMudWNzMmRlY29kZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sXG4gICAgICAgIGNvdW50ZXIgPSAwLFxuICAgICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZXh0cmE7XG4gICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcbiAgICAgICAgICAgIGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59O1xuLypqc2hpbnQgK1cwMTYqL1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCIuL1BvbHlmaWxsc1wiKTtcbnZhciBnZXQgICAgICAgICAgICAgICA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIFJlcG9ydCAgICAgICAgICAgID0gcmVxdWlyZShcIi4vUmVwb3J0XCIpO1xudmFyIEZvcm1hdFZhbGlkYXRvcnMgID0gcmVxdWlyZShcIi4vRm9ybWF0VmFsaWRhdG9yc1wiKTtcbnZhciBKc29uVmFsaWRhdGlvbiAgICA9IHJlcXVpcmUoXCIuL0pzb25WYWxpZGF0aW9uXCIpO1xudmFyIFNjaGVtYUNhY2hlICAgICAgID0gcmVxdWlyZShcIi4vU2NoZW1hQ2FjaGVcIik7XG52YXIgU2NoZW1hQ29tcGlsYXRpb24gPSByZXF1aXJlKFwiLi9TY2hlbWFDb21waWxhdGlvblwiKTtcbnZhciBTY2hlbWFWYWxpZGF0aW9uICA9IHJlcXVpcmUoXCIuL1NjaGVtYVZhbGlkYXRpb25cIik7XG52YXIgVXRpbHMgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9VdGlsc1wiKTtcbnZhciBEcmFmdDRTY2hlbWEgICAgICA9IHJlcXVpcmUoXCIuL3NjaGVtYXMvc2NoZW1hLmpzb25cIik7XG52YXIgRHJhZnQ0SHlwZXJTY2hlbWEgPSByZXF1aXJlKFwiLi9zY2hlbWFzL2h5cGVyLXNjaGVtYS5qc29uXCIpO1xuXG4vKlxuICAgIGRlZmF1bHQgb3B0aW9uc1xuKi9cbnZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAvLyBkZWZhdWx0IHRpbWVvdXQgZm9yIGFsbCBhc3luYyB0YXNrc1xuICAgIGFzeW5jVGltZW91dDogMjAwMCxcbiAgICAvLyBmb3JjZSBhZGRpdGlvbmFsUHJvcGVydGllcyBhbmQgYWRkaXRpb25hbEl0ZW1zIHRvIGJlIGRlZmluZWQgb24gXCJvYmplY3RcIiBhbmQgXCJhcnJheVwiIHR5cGVzXG4gICAgZm9yY2VBZGRpdGlvbmFsOiBmYWxzZSxcbiAgICAvLyBhc3N1bWUgYWRkaXRpb25hbFByb3BlcnRpZXMgYW5kIGFkZGl0aW9uYWxJdGVtcyBhcmUgZGVmaW5lZCBhcyBcImZhbHNlXCIgd2hlcmUgYXBwcm9wcmlhdGVcbiAgICBhc3N1bWVBZGRpdGlvbmFsOiBmYWxzZSxcbiAgICAvLyBmb3JjZSBpdGVtcyB0byBiZSBkZWZpbmVkIG9uIFwiYXJyYXlcIiB0eXBlc1xuICAgIGZvcmNlSXRlbXM6IGZhbHNlLFxuICAgIC8vIGZvcmNlIG1pbkl0ZW1zIHRvIGJlIGRlZmluZWQgb24gXCJhcnJheVwiIHR5cGVzXG4gICAgZm9yY2VNaW5JdGVtczogZmFsc2UsXG4gICAgLy8gZm9yY2UgbWF4SXRlbXMgdG8gYmUgZGVmaW5lZCBvbiBcImFycmF5XCIgdHlwZXNcbiAgICBmb3JjZU1heEl0ZW1zOiBmYWxzZSxcbiAgICAvLyBmb3JjZSBtaW5MZW5ndGggdG8gYmUgZGVmaW5lZCBvbiBcInN0cmluZ1wiIHR5cGVzXG4gICAgZm9yY2VNaW5MZW5ndGg6IGZhbHNlLFxuICAgIC8vIGZvcmNlIG1heExlbmd0aCB0byBiZSBkZWZpbmVkIG9uIFwic3RyaW5nXCIgdHlwZXNcbiAgICBmb3JjZU1heExlbmd0aDogZmFsc2UsXG4gICAgLy8gZm9yY2UgcHJvcGVydGllcyBvciBwYXR0ZXJuUHJvcGVydGllcyB0byBiZSBkZWZpbmVkIG9uIFwib2JqZWN0XCIgdHlwZXNcbiAgICBmb3JjZVByb3BlcnRpZXM6IGZhbHNlLFxuICAgIC8vIGlnbm9yZSByZWZlcmVuY2VzIHRoYXQgY2Fubm90IGJlIHJlc29sdmVkIChyZW1vdGUgc2NoZW1hcykgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgaXMgb25seSBmb3IgcmVtb3RlIHNjaGVtYXMsIG5vdCBsb2NhbCBvbmVzXG4gICAgaWdub3JlVW5yZXNvbHZhYmxlUmVmZXJlbmNlczogZmFsc2UsXG4gICAgLy8gZGlzYWxsb3cgdXNhZ2Ugb2Yga2V5d29yZHMgdGhhdCB0aGlzIHZhbGlkYXRvciBjYW4ndCBoYW5kbGVcbiAgICBub0V4dHJhS2V5d29yZHM6IGZhbHNlLFxuICAgIC8vIGRpc2FsbG93IHVzYWdlIG9mIHNjaGVtYSdzIHdpdGhvdXQgXCJ0eXBlXCIgZGVmaW5lZFxuICAgIG5vVHlwZWxlc3M6IGZhbHNlLFxuICAgIC8vIGRpc2FsbG93IHplcm8gbGVuZ3RoIHN0cmluZ3MgaW4gdmFsaWRhdGVkIG9iamVjdHNcbiAgICBub0VtcHR5U3RyaW5nczogZmFsc2UsXG4gICAgLy8gZGlzYWxsb3cgemVybyBsZW5ndGggYXJyYXlzIGluIHZhbGlkYXRlZCBvYmplY3RzXG4gICAgbm9FbXB0eUFycmF5czogZmFsc2UsXG4gICAgLy8gZm9yY2VzIFwidXJpXCIgZm9ybWF0IHRvIGJlIGluIGZ1bGx5IHJmYzM5ODYgY29tcGxpYW50XG4gICAgc3RyaWN0VXJpczogZmFsc2UsXG4gICAgLy8gdHVybiBvbiBzb21lIG9mIHRoZSBhYm92ZVxuICAgIHN0cmljdE1vZGU6IGZhbHNlLFxuICAgIC8vIHJlcG9ydCBlcnJvciBwYXRocyBhcyBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzIHRvIGdldCB0byB0aGUgb2ZmZW5kaW5nIG5vZGVcbiAgICByZXBvcnRQYXRoQXNBcnJheTogZmFsc2UsXG4gICAgLy8gc3RvcHMgdmFsaWRhdGlvbiBhcyBzb29uIGFzIGFuIGVycm9yIGlzIGZvdW5kLCB0cnVlIGJ5IGRlZmF1bHQgYnV0IGNhbiBiZSB0dXJuZWQgb2ZmXG4gICAgYnJlYWtPbkZpcnN0RXJyb3I6IHRydWUsXG4gICAgLy8gY2hlY2sgaWYgc2NoZW1hIGZvbGxvdyBiZXN0IHByYWN0aWNlcyBhbmQgY29tbW9uIHNlbmNlXG4gICAgcGVkYW50aWNDaGVjazogZmFsc2UsXG4gICAgLy8gaWdub3JlIHVua25vd24gZm9ybWF0cyAoZG8gbm90IHJlcG9ydCB0aGVtIGFzIGFuIGVycm9yKVxuICAgIGlnbm9yZVVua25vd25Gb3JtYXRzOiBmYWxzZVxufTtcblxuLypcbiAgICBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFpTY2hlbWEob3B0aW9ucykge1xuICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgICB0aGlzLnJlZmVyZW5jZUNhY2hlID0gW107XG5cbiAgICB0aGlzLnNldFJlbW90ZVJlZmVyZW5jZShcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hXCIsIERyYWZ0NFNjaGVtYSk7XG4gICAgdGhpcy5zZXRSZW1vdGVSZWZlcmVuY2UoXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L2h5cGVyLXNjaGVtYVwiLCBEcmFmdDRIeXBlclNjaGVtYSk7XG5cbiAgICAvLyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyksXG4gICAgICAgICAgICBpZHggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICAgIGtleTtcblxuICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSBvcHRpb25zIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZFxuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0T3B0aW9uc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIG9wdGlvbiBwYXNzZWQgdG8gY29uc3RydWN0b3I6IFwiICsga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvcHkgdGhlIGRlZmF1bHQgb3B0aW9ucyBpbnRvIHBhc3NlZCBvcHRpb25zXG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0T3B0aW9ucyk7XG4gICAgICAgIGlkeCA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IFV0aWxzLmNsb25lKGRlZmF1bHRPcHRpb25zW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5jbG9uZShkZWZhdWx0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3RNb2RlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JjZUFkZGl0aW9uYWwgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvcmNlSXRlbXMgICAgICAgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9yY2VNYXhMZW5ndGggICA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JjZVByb3BlcnRpZXMgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5vRXh0cmFLZXl3b3JkcyAgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wdGlvbnMubm9UeXBlbGVzcyAgICAgICA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ub0VtcHR5U3RyaW5ncyAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5vRW1wdHlBcnJheXMgICAgPSB0cnVlO1xuICAgIH1cblxufVxuXG4vKlxuICAgIGluc3RhbmNlIG1ldGhvZHNcbiovXG5aU2NoZW1hLnByb3RvdHlwZS5jb21waWxlU2NoZW1hID0gZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgIHZhciByZXBvcnQgPSBuZXcgUmVwb3J0KHRoaXMub3B0aW9ucyk7XG5cbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICBTY2hlbWFDb21waWxhdGlvbi5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpO1xuXG4gICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgIHJldHVybiByZXBvcnQuaXNWYWxpZCgpO1xufTtcblpTY2hlbWEucHJvdG90eXBlLnZhbGlkYXRlU2NoZW1hID0gZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIudmFsaWRhdGVTY2hlbWEgd2FzIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFycmF5XCIpO1xuICAgIH1cblxuICAgIHZhciByZXBvcnQgPSBuZXcgUmVwb3J0KHRoaXMub3B0aW9ucyk7XG5cbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICB2YXIgY29tcGlsZWQgPSBTY2hlbWFDb21waWxhdGlvbi5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpO1xuICAgIGlmIChjb21waWxlZCkgeyBTY2hlbWFWYWxpZGF0aW9uLnZhbGlkYXRlU2NoZW1hLmNhbGwodGhpcywgcmVwb3J0LCBzY2hlbWEpOyB9XG5cbiAgICB0aGlzLmxhc3RSZXBvcnQgPSByZXBvcnQ7XG4gICAgcmV0dXJuIHJlcG9ydC5pc1ZhbGlkKCk7XG59O1xuWlNjaGVtYS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoanNvbiwgc2NoZW1hLCBvcHRpb25zLCBjYWxsYmFjaykge1xuXG4gICAgaWYgKFV0aWxzLndoYXRJcyhvcHRpb25zKSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMpIHsgb3B0aW9ucyA9IHt9OyB9XG5cbiAgICB2YXIgd2hhdElzID0gVXRpbHMud2hhdElzKHNjaGVtYSk7XG4gICAgaWYgKHdoYXRJcyAhPT0gXCJzdHJpbmdcIiAmJiB3aGF0SXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJJbnZhbGlkIC52YWxpZGF0ZSBjYWxsIC0gc2NoZW1hIG11c3QgYmUgYW4gc3RyaW5nIG9yIG9iamVjdCBidXQgXCIgKyB3aGF0SXMgKyBcIiB3YXMgcGFzc2VkIVwiKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciBmb3VuZEVycm9yID0gZmFsc2U7XG4gICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQodGhpcy5vcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhciBzY2hlbWFOYW1lID0gc2NoZW1hO1xuICAgICAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYU5hbWUpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIHdpdGggaWQgJ1wiICsgc2NoZW1hTmFtZSArIFwiJyB3YXNuJ3QgZm91bmQgaW4gdGhlIHZhbGlkYXRvciBjYWNoZSFcIik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGVkID0gZmFsc2U7XG4gICAgaWYgKCFmb3VuZEVycm9yKSB7XG4gICAgICAgIGNvbXBpbGVkID0gU2NoZW1hQ29tcGlsYXRpb24uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgICB0aGlzLmxhc3RSZXBvcnQgPSByZXBvcnQ7XG4gICAgICAgIGZvdW5kRXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciB2YWxpZGF0ZWQgPSBmYWxzZTtcbiAgICBpZiAoIWZvdW5kRXJyb3IpIHtcbiAgICAgICAgdmFsaWRhdGVkID0gU2NoZW1hVmFsaWRhdGlvbi52YWxpZGF0ZVNjaGVtYS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgICAgICBmb3VuZEVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zY2hlbWFQYXRoKSB7XG4gICAgICAgIHJlcG9ydC5yb290U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBzY2hlbWEgPSBnZXQoc2NoZW1hLCBvcHRpb25zLnNjaGVtYVBhdGgpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIHBhdGggJ1wiICsgb3B0aW9ucy5zY2hlbWFQYXRoICsgXCInIHdhc24ndCBmb3VuZCBpbiB0aGUgc2NoZW1hIVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm91bmRFcnJvcikge1xuICAgICAgICBKc29uVmFsaWRhdGlvbi52YWxpZGF0ZS5jYWxsKHRoaXMsIHJlcG9ydCwgc2NoZW1hLCBqc29uKTtcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcmVwb3J0LnByb2Nlc3NBc3luY1Rhc2tzKHRoaXMub3B0aW9ucy5hc3luY1RpbWVvdXQsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAocmVwb3J0LmFzeW5jVGFza3MubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHZhbGlkYXRpb24gaGFzIGFzeW5jIHRhc2tzIGFuZCBjYW5ub3QgYmUgZG9uZSBpbiBzeW5jIG1vZGUsIHBsZWFzZSBwcm92aWRlIGNhbGxiYWNrIGFyZ3VtZW50LlwiKTtcbiAgICB9XG5cbiAgICAvLyBhc3NpZ24gbGFzdFJlcG9ydCBzbyBlcnJvcnMgYXJlIHJldHJpZXZhYmxlIGluIHN5bmMgbW9kZVxuICAgIHRoaXMubGFzdFJlcG9ydCA9IHJlcG9ydDtcbiAgICByZXR1cm4gcmVwb3J0LmlzVmFsaWQoKTtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRMYXN0RXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMubGFzdFJlcG9ydC5lcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgZSA9IG5ldyBFcnJvcigpO1xuICAgIGUubmFtZSA9IFwiei1zY2hlbWEgdmFsaWRhdGlvbiBlcnJvclwiO1xuICAgIGUubWVzc2FnZSA9IHRoaXMubGFzdFJlcG9ydC5jb21tb25FcnJvck1lc3NhZ2U7XG4gICAgZS5kZXRhaWxzID0gdGhpcy5sYXN0UmVwb3J0LmVycm9ycztcbiAgICByZXR1cm4gZTtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRMYXN0RXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmxhc3RSZXBvcnQgJiYgdGhpcy5sYXN0UmVwb3J0LmVycm9ycy5sZW5ndGggPiAwID8gdGhpcy5sYXN0UmVwb3J0LmVycm9ycyA6IHVuZGVmaW5lZDtcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRNaXNzaW5nUmVmZXJlbmNlcyA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICBhcnIgPSBhcnIgfHwgdGhpcy5sYXN0UmVwb3J0LmVycm9ycztcbiAgICB2YXIgcmVzID0gW10sXG4gICAgICAgIGlkeCA9IGFyci5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeC0tKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGFycltpZHhdO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gXCJVTlJFU09MVkFCTEVfUkVGRVJFTkNFXCIpIHtcbiAgICAgICAgICAgIHZhciByZWZlcmVuY2UgPSBlcnJvci5wYXJhbXNbMF07XG4gICAgICAgICAgICBpZiAocmVzLmluZGV4T2YocmVmZXJlbmNlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChyZWZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvci5pbm5lcikge1xuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLmdldE1pc3NpbmdSZWZlcmVuY2VzKGVycm9yLmlubmVyKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5nZXRNaXNzaW5nUmVtb3RlUmVmZXJlbmNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWlzc2luZ1JlZmVyZW5jZXMgPSB0aGlzLmdldE1pc3NpbmdSZWZlcmVuY2VzKCksXG4gICAgICAgIG1pc3NpbmdSZW1vdGVSZWZlcmVuY2VzID0gW10sXG4gICAgICAgIGlkeCA9IG1pc3NpbmdSZWZlcmVuY2VzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmFyIHJlbW90ZVJlZmVyZW5jZSA9IFNjaGVtYUNhY2hlLmdldFJlbW90ZVBhdGgobWlzc2luZ1JlZmVyZW5jZXNbaWR4XSk7XG4gICAgICAgIGlmIChyZW1vdGVSZWZlcmVuY2UgJiYgbWlzc2luZ1JlbW90ZVJlZmVyZW5jZXMuaW5kZXhPZihyZW1vdGVSZWZlcmVuY2UpID09PSAtMSkge1xuICAgICAgICAgICAgbWlzc2luZ1JlbW90ZVJlZmVyZW5jZXMucHVzaChyZW1vdGVSZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtaXNzaW5nUmVtb3RlUmVmZXJlbmNlcztcbn07XG5aU2NoZW1hLnByb3RvdHlwZS5zZXRSZW1vdGVSZWZlcmVuY2UgPSBmdW5jdGlvbiAodXJpLCBzY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzY2hlbWEgPSBKU09OLnBhcnNlKHNjaGVtYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gVXRpbHMuY2xvbmVEZWVwKHNjaGVtYSk7XG4gICAgfVxuICAgIFNjaGVtYUNhY2hlLmNhY2hlU2NoZW1hQnlVcmkuY2FsbCh0aGlzLCB1cmksIHNjaGVtYSk7XG59O1xuWlNjaGVtYS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWEgPSBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgdmFyIHJlcG9ydCA9IG5ldyBSZXBvcnQodGhpcy5vcHRpb25zKTtcbiAgICBzY2hlbWEgPSBTY2hlbWFDYWNoZS5nZXRTY2hlbWEuY2FsbCh0aGlzLCByZXBvcnQsIHNjaGVtYSk7XG5cbiAgICAvLyBjbG9uZSBiZWZvcmUgbWFraW5nIGFueSBtb2RpZmljYXRpb25zXG4gICAgc2NoZW1hID0gVXRpbHMuY2xvbmVEZWVwKHNjaGVtYSk7XG5cbiAgICB2YXIgdmlzaXRlZCA9IFtdO1xuXG4gICAgLy8gY2xlYW4tdXAgdGhlIHNjaGVtYSBhbmQgcmVzb2x2ZSByZWZlcmVuY2VzXG4gICAgdmFyIGNsZWFudXAgPSBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB0eXBlT2YgPSBVdGlscy53aGF0SXMoc2NoZW1hKTtcbiAgICAgICAgaWYgKHR5cGVPZiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlT2YgIT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5fX18kdmlzaXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NoZW1hLl9fXyR2aXNpdGVkID0gdHJ1ZTtcbiAgICAgICAgdmlzaXRlZC5wdXNoKHNjaGVtYSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS4kcmVmICYmIHNjaGVtYS5fXyRyZWZSZXNvbHZlZCkge1xuICAgICAgICAgICAgdmFyIGZyb20gPSBzY2hlbWEuX18kcmVmUmVzb2x2ZWQ7XG4gICAgICAgICAgICB2YXIgdG8gPSBzY2hlbWE7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLiRyZWY7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLl9fJHJlZlJlc29sdmVkO1xuICAgICAgICAgICAgZm9yIChrZXkgaW4gZnJvbSkge1xuICAgICAgICAgICAgICAgIGlmIChmcm9tLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJfXyRcIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXAoc2NoZW1hW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjbGVhbnVwKHNjaGVtYSk7XG4gICAgdmlzaXRlZC5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIGRlbGV0ZSBzLl9fXyR2aXNpdGVkO1xuICAgIH0pO1xuXG4gICAgdGhpcy5sYXN0UmVwb3J0ID0gcmVwb3J0O1xuICAgIGlmIChyZXBvcnQuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5nZXRMYXN0RXJyb3IoKTtcbiAgICB9XG59O1xuWlNjaGVtYS5wcm90b3R5cGUuc2V0U2NoZW1hUmVhZGVyID0gZnVuY3Rpb24gKHNjaGVtYVJlYWRlcikge1xuICAgIHJldHVybiBaU2NoZW1hLnNldFNjaGVtYVJlYWRlcihzY2hlbWFSZWFkZXIpO1xufTtcblpTY2hlbWEucHJvdG90eXBlLmdldFNjaGVtYVJlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gWlNjaGVtYS5zY2hlbWFSZWFkZXI7XG59O1xuXG4vKlxuICAgIHN0YXRpYyBtZXRob2RzXG4qL1xuWlNjaGVtYS5zZXRTY2hlbWFSZWFkZXIgPSBmdW5jdGlvbiAoc2NoZW1hUmVhZGVyKSB7XG4gICAgWlNjaGVtYS5zY2hlbWFSZWFkZXIgPSBzY2hlbWFSZWFkZXI7XG59O1xuWlNjaGVtYS5yZWdpc3RlckZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXROYW1lLCB2YWxpZGF0b3JGdW5jdGlvbikge1xuICAgIEZvcm1hdFZhbGlkYXRvcnNbZm9ybWF0TmFtZV0gPSB2YWxpZGF0b3JGdW5jdGlvbjtcbn07XG5aU2NoZW1hLnVucmVnaXN0ZXJGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0TmFtZSkge1xuICAgIGRlbGV0ZSBGb3JtYXRWYWxpZGF0b3JzW2Zvcm1hdE5hbWVdO1xufTtcblpTY2hlbWEuZ2V0UmVnaXN0ZXJlZEZvcm1hdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKEZvcm1hdFZhbGlkYXRvcnMpO1xufTtcblpTY2hlbWEuZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFV0aWxzLmNsb25lRGVlcChkZWZhdWx0T3B0aW9ucyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFpTY2hlbWE7XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9oeXBlci1zY2hlbWEjXCIsXG4gICAgXCJpZFwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvaHlwZXItc2NoZW1hI1wiLFxuICAgIFwidGl0bGVcIjogXCJKU09OIEh5cGVyLVNjaGVtYVwiLFxuICAgIFwiYWxsT2ZcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIlxuICAgICAgICB9XG4gICAgXSxcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhbGxPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvbmVPZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiI1wiXG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJsaW5rc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9saW5rRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImZyYWdtZW50UmVzb2x1dGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1lZGlhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBtZWRpYSB0eXBlLCBhcyBkZXNjcmliZWQgaW4gUkZDIDIwNDZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiYmluYXJ5RW5jb2RpbmdcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBjb250ZW50IGVuY29kaW5nIHNjaGVtZSwgYXMgZGVzY3JpYmVkIGluIFJGQyAyMDQ1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhTdGFydFwiOiB7XG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5zdGFuY2VzJyBVUklzIG11c3Qgc3RhcnQgd2l0aCB0aGlzIHZhbHVlIGZvciB0aGlzIHNjaGVtYSB0byBhcHBseSB0byB0aGVtXCIsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImxpbmtEZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwiTGluayBEZXNjcmlwdGlvbiBPYmplY3RcIixcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiBbIFwiaHJlZlwiLCBcInJlbFwiIF0sXG4gICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFwiaHJlZlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIFVSSSB0ZW1wbGF0ZSwgYXMgZGVmaW5lZCBieSBSRkMgNjU3MCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlICQsICggYW5kICkgY2hhcmFjdGVycyBmb3IgcHJlLXByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwicmVsXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlbGF0aW9uIHRvIHRoZSB0YXJnZXQgcmVzb3VyY2Ugb2YgdGhlIGxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSB0aXRsZSBmb3IgdGhlIGxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidGFyZ2V0U2NoZW1hXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkpTT04gU2NoZW1hIGRlc2NyaWJpbmcgdGhlIGxpbmsgdGFyZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJtZWRpYVR5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWVkaWEgdHlwZSAoYXMgZGVmaW5lZCBieSBSRkMgMjA0NikgZGVzY3JpYmluZyB0aGUgbGluayB0YXJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwibWV0aG9kXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1ldGhvZCBmb3IgcmVxdWVzdGluZyB0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rIChlLmcuIGZvciBIVFRQIHRoaXMgbWlnaHQgYmUgXFxcIkdFVFxcXCIgb3IgXFxcIkRFTEVURVxcXCIpXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImVuY1R5cGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG1lZGlhIHR5cGUgaW4gd2hpY2ggdG8gc3VibWl0IGRhdGEgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcInNjaGVtYVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTY2hlbWEgZGVzY3JpYmluZyB0aGUgZGF0YSB0byBzdWJtaXQgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgICBcImlkXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvcmUgc2NoZW1hIG1ldGEtc2NoZW1hXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcIm1pbmltdW1cIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCI6IHtcbiAgICAgICAgICAgIFwiYWxsT2ZcIjogWyB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSwgeyBcImRlZmF1bHRcIjogMCB9IF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzaW1wbGVUeXBlc1wiOiB7XG4gICAgICAgICAgICBcImVudW1cIjogWyBcImFycmF5XCIsIFwiYm9vbGVhblwiLCBcImludGVnZXJcIiwgXCJudWxsXCIsIFwibnVtYmVyXCIsIFwib2JqZWN0XCIsIFwic3RyaW5nXCIgXVxuICAgICAgICB9LFxuICAgICAgICBcInN0cmluZ0FycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcIiRzY2hlbWFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlZmF1bHRcIjoge30sXG4gICAgICAgIFwibXVsdGlwbGVPZlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAwLFxuICAgICAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwicmVnZXhcIlxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdFwiOiB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIFwiYWxsT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm9uZU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwibm90XCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICB9LFxuICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IFsgXCJtYXhpbXVtXCIgXSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IFsgXCJtaW5pbXVtXCIgXVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHt9XG59XG4iXX0= diff --git a/docs/API.md b/docs/API.md index 7617525..97cb1c2 100644 --- a/docs/API.md +++ b/docs/API.md @@ -6,7 +6,7 @@ A library for simpler [Swagger](http://swagger.io/) integrations. * [Sway](#module_Sway) * _inner_ * [~Operation](#module_Sway..Operation) - * [new Operation(api, pathObject, method, ptr, definition, consumes, produces)](#new_module_Sway..Operation_new) + * [new Operation(pathObject, method, definition, pathToDefinition)](#new_module_Sway..Operation_new) * [.getParameter(name, [location])](#module_Sway..Operation+getParameter) ⇒ Parameter * [.getParameters()](#module_Sway..Operation+getParameters) ⇒ Array.<Parameter> * [.getResponse([statusCode])](#module_Sway..Operation+getResponse) ⇒ Response @@ -14,26 +14,26 @@ A library for simpler [Swagger](http://swagger.io/) integrations. * [.validateRequest(req)](#module_Sway..Operation+validateRequest) ⇒ ValidationResults * [.validateResponse(res)](#module_Sway..Operation+validateResponse) ⇒ ValidationResults * [~Parameter](#module_Sway..Parameter) - * [new Parameter(opOrPath, ptr, definition, schema)](#new_module_Sway..Parameter_new) + * [new Parameter(opOrPathObject, definition, pathToDefinition)](#new_module_Sway..Parameter_new) * [.getSample()](#module_Sway..Parameter+getSample) ⇒ \* * [.getSchema()](#module_Sway..Parameter+getSchema) ⇒ object * [.getValue(req)](#module_Sway..Parameter+getValue) ⇒ ParameterValue * [~ParameterValue](#module_Sway..ParameterValue) - * [new ParameterValue(parameter, raw)](#new_module_Sway..ParameterValue_new) + * [new ParameterValue(parameterObject, raw)](#new_module_Sway..ParameterValue_new) * [~Path](#module_Sway..Path) - * [new Path(api, path, ptr, definition, regexp)](#new_module_Sway..Path_new) + * [new Path(api, path, definition, pathToDefinition)](#new_module_Sway..Path_new) * [.getOperation(method)](#module_Sway..Path+getOperation) ⇒ Array.<Operation> * [.getOperations()](#module_Sway..Path+getOperations) ⇒ Array.<Operation> * [.getOperationsByTag(tag)](#module_Sway..Path+getOperationsByTag) ⇒ Array.<Operation> * [.getParameters()](#module_Sway..Path+getParameters) ⇒ Array.<Parameter> * [~Response](#module_Sway..Response) - * [new Response(operation, ptr, definition, statusCode)](#new_module_Sway..Response_new) + * [new Response(operationObject, statusCode, definition, pathToDefinition)](#new_module_Sway..Response_new) * [.getExample([mimeType])](#module_Sway..Response+getExample) ⇒ string * [.getSample()](#module_Sway..Response+getSample) ⇒ \* * [.validateResponse(res)](#module_Sway..Response+validateResponse) ⇒ ValidationResults * [~ServerResponseWrapper](#module_Sway..ServerResponseWrapper) : object * [~SwaggerApi](#module_Sway..SwaggerApi) - * [new SwaggerApi(plugin, definition, resolved, references, options)](#new_module_Sway..SwaggerApi_new) + * [new SwaggerApi(definition, definitionRemotesResolved, definitionAllResolved, references, options)](#new_module_Sway..SwaggerApi_new) * [.getOperation(pathOrReq, [method])](#module_Sway..SwaggerApi+getOperation) ⇒ Operation * [.getOperations([path])](#module_Sway..SwaggerApi+getOperations) ⇒ Array.<Operation> * [.getOperationsByTag([tag])](#module_Sway..SwaggerApi+getOperationsByTag) ⇒ Array.<Operation> @@ -54,17 +54,17 @@ A library for simpler [Swagger](http://swagger.io/) integrations. | Name | Type | Description | | --- | --- | --- | -| api | SwaggerApi | The Swagger API object | | definition | object | The operation definition | | method | string | The HTTP method for this operation | | pathObject | Path | The Path object | +| pathToDefinition | Array.<string> | The path segments to the operation definition | | parameterObjects | Array.<Parameter> | The Parameter objects | | ptr | string | The JSON Pointer to the operation | | securityDefinitions | object | The security definitions used by this operation | * [~Operation](#module_Sway..Operation) - * [new Operation(api, pathObject, method, ptr, definition, consumes, produces)](#new_module_Sway..Operation_new) + * [new Operation(pathObject, method, definition, pathToDefinition)](#new_module_Sway..Operation_new) * [.getParameter(name, [location])](#module_Sway..Operation+getParameter) ⇒ Parameter * [.getParameters()](#module_Sway..Operation+getParameters) ⇒ Array.<Parameter> * [.getResponse([statusCode])](#module_Sway..Operation+getResponse) ⇒ Response @@ -73,7 +73,7 @@ A library for simpler [Swagger](http://swagger.io/) integrations. * [.validateResponse(res)](#module_Sway..Operation+validateResponse) ⇒ ValidationResults -#### new Operation(api, pathObject, method, ptr, definition, consumes, produces) +#### new Operation(pathObject, method, definition, pathToDefinition) The Swagger Operation object. **Note:** Do not use directly. @@ -84,13 +84,10 @@ The Swagger Operation object. | Param | Type | Description | | --- | --- | --- | -| api | SwaggerApi | The Swagger API object | | pathObject | Path | The Path object | | method | string | The operation method | -| ptr | string | The JSON Pointer to the operation | | definition | object | The operation definition | -| consumes | Array.<string> | The mime types this operation consumes | -| produces | Array.<string> | The mime types this operation produces | +| pathToDefinition | Array.<string> | The path segments to the operation definition | #### operation.getParameter(name, [location]) ⇒ Parameter @@ -169,21 +166,22 @@ Validates the response. | Name | Type | Description | | --- | --- | --- | +| computedSchema | object | The computed JSON Schema for the parameter | | definition | object | The parameter definition | -| operationObject | Operation | The Operation object (Can be undefined for path-level parameters) | -| pathObject | Path | The Path object | +| operationObject | Operation | The `Operation` object the parameter belongs to *(Can be undefined for path-level parameters)* | +| pathObject | Path | The `Path` object the parameter belongs t | +| pathToDefinition | Array.<string> | The path segments to the parameter definition | | ptr | string | The JSON Pointer to the parameter definition | -| schema | object | The JSON Schema for the parameter | * [~Parameter](#module_Sway..Parameter) - * [new Parameter(opOrPath, ptr, definition, schema)](#new_module_Sway..Parameter_new) + * [new Parameter(opOrPathObject, definition, pathToDefinition)](#new_module_Sway..Parameter_new) * [.getSample()](#module_Sway..Parameter+getSample) ⇒ \* * [.getSchema()](#module_Sway..Parameter+getSchema) ⇒ object * [.getValue(req)](#module_Sway..Parameter+getValue) ⇒ ParameterValue -#### new Parameter(opOrPath, ptr, definition, schema) +#### new Parameter(opOrPathObject, definition, pathToDefinition) The Swagger Parameter object. **Note:** Do not use directly. @@ -194,10 +192,9 @@ object. | Param | Type | Description | | --- | --- | --- | -| opOrPath | Operation | Path | The Operation or Path object | -| ptr | string | The JSON Pointer to the parameter | +| opOrPathObject | Operation | Path | The `Operation` or `Path` object | | definition | object | The parameter definition | -| schema | object | The JSON Schema for the parameter | +| pathToDefinition | Array.<string> | The path segments to the parameter definition | #### parameter.getSample() ⇒ \* @@ -254,7 +251,7 @@ property. | value | \* | The processed value *(Takes default values into account and does type coercion when necessary and possible)*. This can the original value in the event that processing the value is impossible *(missing schema type)* or `undefined` if processing the value failed *(invalid types, etc.)*. | -#### new ParameterValue(parameter, raw) +#### new ParameterValue(parameterObject, raw) Object representing a parameter value. **Note:** Do not use directly. @@ -262,7 +259,7 @@ Object representing a parameter value. | Param | Type | Description | | --- | --- | --- | -| parameter | Parameter | The Parameter Object | +| parameterObject | Parameter | The Parameter Object | | raw | \* | The original/raw value | @@ -274,22 +271,23 @@ Object representing a parameter value. | --- | --- | --- | | api | SwaggerApi | The Swagger API object | | definition | object | The path definition | -| operationObjects | Array.<Operation> | The operation objects | -| parameterObjects | Array.<Parameter> | The path-level parameter objects | +| operationObjects | Array.<Operation> | The `Operation` objects | +| parameterObjects | Array.<Parameter> | The path-level `Parameter` objects | | path | string | The path string | +| pathToDefinition | Array.<string> | The path segments to the path definition | | ptr | ptr | The JSON Pointer to the path | -| regexp | regexp | The regexp used to match request paths against this path | +| regexp | regexp | The `RegExp` used to match request paths against this path | * [~Path](#module_Sway..Path) - * [new Path(api, path, ptr, definition, regexp)](#new_module_Sway..Path_new) + * [new Path(api, path, definition, pathToDefinition)](#new_module_Sway..Path_new) * [.getOperation(method)](#module_Sway..Path+getOperation) ⇒ Array.<Operation> * [.getOperations()](#module_Sway..Path+getOperations) ⇒ Array.<Operation> * [.getOperationsByTag(tag)](#module_Sway..Path+getOperationsByTag) ⇒ Array.<Operation> * [.getParameters()](#module_Sway..Path+getParameters) ⇒ Array.<Parameter> -#### new Path(api, path, ptr, definition, regexp) +#### new Path(api, path, definition, pathToDefinition) The Path object. **Note:** Do not use directly. @@ -302,9 +300,8 @@ The Path object. | --- | --- | --- | | api | SwaggerApi | The Swagger API object | | path | string | The path string | -| ptr | ptr | The JSON Pointer to the path | | definition | object | The path definition | -| regexp | regexp | The regexp used to match request paths against this path | +| pathToDefinition | Array.<string> | The path segments to the path definition | #### path.getOperation(method) ⇒ Array.<Operation> @@ -350,18 +347,19 @@ Return the parameters for this path. | --- | --- | --- | | definition | object | The response definition | | operationObject | Operation | The Operation object | +| pathToDefinition | Array.<string> | The path segments to the path definition | | ptr | string | The JSON Pointer to the response definition | | statusCode | string | The status code | * [~Response](#module_Sway..Response) - * [new Response(operation, ptr, definition, statusCode)](#new_module_Sway..Response_new) + * [new Response(operationObject, statusCode, definition, pathToDefinition)](#new_module_Sway..Response_new) * [.getExample([mimeType])](#module_Sway..Response+getExample) ⇒ string * [.getSample()](#module_Sway..Response+getSample) ⇒ \* * [.validateResponse(res)](#module_Sway..Response+validateResponse) ⇒ ValidationResults -#### new Response(operation, ptr, definition, statusCode) +#### new Response(operationObject, statusCode, definition, pathToDefinition) The Swagger Response object. **Note:** Do not use directly. @@ -372,10 +370,10 @@ object. | Param | Type | Description | | --- | --- | --- | -| operation | Operation | The Operation object | -| ptr | string | The JSON Pointer to the response | -| definition | object | The parameter definition | +| operationObject | Operation | The `Operation` object | | statusCode | string | The status code | +| definition | object | The parameter definition | +| pathToDefinition | Array.<string> | The path segments to the path definition | #### response.getExample([mimeType]) ⇒ string @@ -431,17 +429,18 @@ information to perform response validation. | Name | Type | Description | | --- | --- | --- | | customValidators | Array.<ValidatorCallback> | The array of custom validators | -| definition | object | The API definition | +| definition | object | The original Swagger definition | +| definitionRemotesResolved | obejct | The Swagger definition with all of its remote references resolved | +| definitionAllResolved | object | The Swagger definition with all of its references resolved | | documentation | string | The URL to the Swagger documentation | | pathObjects | Array.<Path> | The unique path objects | | options | object | The options passed to the constructor | | references | object | The reference metadata *(See [JsonRefs~ResolvedRefDetails](https://github.com/whitlockjc/json-refs/blob/master/docs/API.md#module_JsonRefs..ResolvedRefDetails))* | -| resolved | object | The fully resolved API definition | | version | string | The Swagger API version | * [~SwaggerApi](#module_Sway..SwaggerApi) - * [new SwaggerApi(plugin, definition, resolved, references, options)](#new_module_Sway..SwaggerApi_new) + * [new SwaggerApi(definition, definitionRemotesResolved, definitionAllResolved, references, options)](#new_module_Sway..SwaggerApi_new) * [.getOperation(pathOrReq, [method])](#module_Sway..SwaggerApi+getOperation) ⇒ Operation * [.getOperations([path])](#module_Sway..SwaggerApi+getOperations) ⇒ Array.<Operation> * [.getOperationsByTag([tag])](#module_Sway..SwaggerApi+getOperationsByTag) ⇒ Array.<Operation> @@ -451,7 +450,7 @@ information to perform response validation. * [.validate()](#module_Sway..SwaggerApi+validate) ⇒ ValidationResults -#### new SwaggerApi(plugin, definition, resolved, references, options) +#### new SwaggerApi(definition, definitionRemotesResolved, definitionAllResolved, references, options) The Swagger API object. **Note:** Do not use directly. @@ -462,12 +461,11 @@ The Swagger API object. | Param | Type | Description | | --- | --- | --- | -| plugin | object | The Swagger version plugin | -| definition | object | The Swagger definition | -| resolved | object | The fully resolved Swagger definition | +| definition | object | The original Swagger definition | +| definitionRemotesResolved | obejct | The Swagger definition with all of its remote references resolved | +| definitionAllResolved | object | The Swagger definition with all of its references resolved | | references | object | The location and resolution of the resolved references in the Swagger definition | | options | object | The options passed to swaggerApi.create | -| [options.customValidators] | ValidatorCallback | The custom validators | #### swaggerApi.getOperation(pathOrReq, [method]) ⇒ Operation diff --git a/docs/README.md b/docs/README.md index 47f1413..674498a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,9 +1,11 @@ -A library that simplifies [Swagger][swagger] integrations. The APIs provided attempt to solve common -problems when working with Swagger definitions, like loading a Swagger definition. _(For example: You might want to compose -a Swagger definition programmatically or you might want to load a Swagger definition from the filesystem...or some URL.)_ +A library that simplifies [Swagger][swagger] integrations. This library handles the minutiae of loading Swagger +documents *(local and remote)*, resolving references *(local and remote)*, building an object model and providing you +with a rich set of APIs for things like Swagger document validation, request/response validation, etc. For more details +on the available APIs, please view the [API Documentation](https://github.com/apigee-127/sway/blob/master/docs/API.md). -What you will find below is information on how to install sway based on your environment. You will also -find detailed information about how to use the provided APIs. +Sway will always be built around the latest stable release of Swagger, which happens to be version `2.0` right now. +This means that its APIs and object model will be specific to that version of Swagger and supporting any other versions +of Swagger will require a conversion step prior to using Sway. # Disclaimer @@ -28,8 +30,8 @@ bower install sway --save The standalone binaries come in two flavors: -* [sway-standalone.js](https://raw.github.com/apigee-127/sway/master/browser/sway.js): _4,0400kb_, full source and source maps -* [sway-standalone-min.js](https://raw.github.com/apigee-127/sway/master/browser/sway-min.js): _636kb_, minified, compressed and no source map +* [sway-standalone.js](https://raw.github.com/apigee-127/sway/master/browser/sway.js): _4,484kb_, full source and source maps +* [sway-standalone-min.js](https://raw.github.com/apigee-127/sway/master/browser/sway-min.js): _644kb_, minified, compressed and no source map ### Node.js @@ -43,14 +45,10 @@ npm install sway --save The sway project's API documentation can be found here: https://github.com/apigee-127/sway/blob/master/docs/API.md -## Swagger Versions +## Swagger Resources -sway uses [The Factory Method Pattern][factory-method-pattern] to create the `SwaggerApi` object you see -documented in the API documentation above. The core API is concrete but how each version of Swagger generates the -`SwaggerApi` object and its business logic is Swagger version dependent. That being said, below are the supported -versions of Swagger and their documentation: - -* [2.0][version-2.0-documentation] +* Specification Documentation: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md +* JSON Schema: https://github.com/swagger-api/swagger-spec/blob/master/schemas/v2.0/schema.json ## Swagger Validation @@ -67,37 +65,27 @@ situations where the existing JSON Schema for Swagger is broken or not as strict no other validation will occur. But once the structural validation happens, `Semantic Validation` and `Custom Validation` will happen. -## Dependencies +### Semantic Validation -Below is the list of projects being used by sway and the purpose(s) they are used for: - -* [debug][debug]: Used for producing useful debugging information -* [js-base64][js-base64]: Used for generating mock/sample data for the `byte` format -* [js-yaml][js-yaml]: Used for parsing YAML Swagger files -* [json-refs][json-refs]: Used for dereferncing JSON References in Swagger files -* [json-schema-faker][json-schema-faker]: Used for generating mock/sample values from JSON Schemas -* [lodash-compat][lodash-compat]: Used for browser compatibility and miscellaneous utilities _(We use `lodash-compat` -instead of `lodash` for compatibility with IE8 and IE9. We will likely change this but the reasons behind it were the -Swagger project itself has JavaScript libraries that support IE8+ and we wanted to support the same level of browsers -they did just in case they wanted to use these libraries.)_ -* [native-promise-only][native-promise-only]: Used to shim in [Promises][promises] support -* [path-loader][path-loader]: Used to load Swagger files from the local filesystem and remote URLs -* [path-to-regexp][path-to-regexp]: Used to create `RegExp` objects from Swagger paths -* [z-schema][z-schema]: Used for JSON Schema validation +| Description | Type | +| :--------- | :---: | +| Operations cannot have both a `body` parameter and a `formData` parameter | Error | +| Operations must have only one `body` parameter | Error | +| Operations must have unique *(`name` + `in` combination)* parameters | Error | +| Operations must have unique `operationId` | Error | +| Path parameters declared in the path string need matching parameter definitions *(Either at the path-level or the operation)* | Error | +| Path parameter declarations do not allow empty names *(`/path/{}` is not valid)* | Error | +| Path parameters definition *(Either at the path-level or the operation)* need matching paramater declarations | Error | +| Path strings must be *(equivalently)* different *(Example: `/pet/{petId}` and `/pet/{petId2}` are equivalently the same and would generate an error)* | Error | +| Paths must have unique *(`name` + `in` combination)* parameters | Error | +| Referenceable definitions should be *used* by being referenced in the appropriate way | Warning | +| References must point to existing documents or document fragments | Error | +| The `default` property for [Schema Objects][schema-object], or schema-like objects *(non-body parameters)*, must validate against the respective JSON Schema | Error | +| Circular composition/inheritance for [Schema Objects][schema-object] is not allowed *(You can have circular references everywhere except in composition/inheritance.)* | Error | +| The `items` property for [Schema Objects][schema-object], or schema-like objects *(non-body parameters)*, is required when `type` is set to `array` _(See [swagger-api/swagger-spec/issues/174](https://github.com/swagger-api/swagger-spec/issues/174))_ | Error | +| The `required` properties for a [Schema Object][schema-object] must be defined in the object or one of its ancestors | Error | [bower]: http://bower.io/ -[debug]: https://www.npmjs.com/package/debug -[factory-method-pattern]: https://en.wikipedia.org/wiki/Factory_method_pattern -[js-base64]: https://www.npmjs.com/package/js-base64 -[js-yaml]: https://www.npmjs.com/package/js-yaml -[json-refs]: https://www.npmjs.com/package/json-refs -[json-schema-faker]: https://www.npmjs.com/package/json-schema-faker -[lodash-compat]: https://www.npmjs.com/package/lodash-compat -[native-promise-only]: https://www.npmjs.com/package/native-promise-only [npm]: https://www.npmjs.org/ -[path-loader]: https://www.npmjs.com/package/path-loader -[path-to-regexp]: https://github.com/pillarjs/path-to-regexp -[promises]: https://www.promisejs.org/ -[version-2.0-documentation]: https://github.com/apigee-127/sway/blob/master/docs/versions/2.0.md +[schema-object]: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#schemaObject [swagger]: http://swagger.io -[z-schema]: https://www.npmjs.com/package/z-schema diff --git a/docs/versions/2.0.md b/docs/versions/2.0.md deleted file mode 100644 index 578748c..0000000 --- a/docs/versions/2.0.md +++ /dev/null @@ -1,29 +0,0 @@ -sway's Swagger 2.0 support is documented below. There are also some helpful pieces of information about Swagger 2.0 as -well. - -## Swagger 2.0 Resources - -* Specification Documentation: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md -* JSON Schema: https://github.com/swagger-api/swagger-spec/blob/master/schemas/v2.0/schema.json - -## Semantic Validation - -| Description | Type | -| :--------- | :---: | -| Operations cannot have both a `body` parameter and a `formData` parameter | Error | -| Operations must have only one `body` parameter | Error | -| Operations must have unique *(`name` + `in` combination)* parameters | Error | -| Operations must have unique `operationId` | Error | -| Path parameters declared in the path string need matching parameter definitions *(Either at the path-level or the operation)* | Error | -} Path parameter declarations do not allow empty names *(`/path/{}` is not valid)* | Error | -| Path parameters definition *(Either at the path-level or the operation)* need matching paramater declarations | Error | -| Path strings must be *(equivalently)* different *(Example: `/pet/{petId}` and `/pet/{petId2}` are equivalently the same and would generate an error)* | Error | -| Paths must have unique *(`name` + `in` combination)* parameters | Error | -| Referenceable definitions should be *used* by being referenced in the appropriate way | Warning | -| References must point to existing documents or document fragments | Error | -| The `default` property for [Schema Objects][schema-object], or schema-like objects *(non-body parameters)*, must validate against the respective JSON Schema | Error | -| Circular composition/inheritance for [Schema Objects][schema-object] is not allowed *(You can have circular references everywhere except in composition/inheritance.)* | Error | -| The `items` property for [Schema Objects][schema-object], or schema-like objects *(non-body parameters)*, is required when `type` is set to `array` _(See [swagger-api/swagger-spec/issues/174](https://github.com/swagger-api/swagger-spec/issues/174))_ | Error | -| The `required` properties for a [Schema Object][schema-object] must be defined in the object or one of its ancestors | Error | - -[schema-object]: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#schemaObject diff --git a/gulpfile.js b/gulpfile.js index 78a7db0..d799d1e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -62,7 +62,7 @@ gulp.task('browserify', function () { return new Promise(function (resolve, reject) { var b = browserify('./index.js', { debug: useDebug, - standalone: 'SwaggerApi' + standalone: 'Sway' }); // Only include the 'en' faker.js locale @@ -83,8 +83,7 @@ gulp.task('browserify', function () { exposify.config = { 'json-refs': 'JsonRefs', 'js-yaml': 'jsyaml', - 'lodash': '_', - 'path-loader': 'PathLoader' + 'lodash': '_' }; b.transform('exposify'); @@ -122,12 +121,12 @@ gulp.task('clean', function (done) { gulp.task('docs', function () { return gulp.src([ - './index.js', - 'lib/types/*.js' - ]) - .pipe($.concat('API.md')) - .pipe($.jsdoc2MD({'sort-by': ['category', 'name']})) - .pipe(gulp.dest('docs')); + './index.js', + 'lib/types/*.js' + ]) + .pipe($.concat('API.md')) + .pipe($.jsdoc2MD({'sort-by': ['category', 'name']})) + .pipe(gulp.dest('docs')); }); gulp.task('lint', function () { diff --git a/index.js b/index.js index 0dd9620..10c18d2 100644 --- a/index.js +++ b/index.js @@ -25,8 +25,9 @@ 'use strict'; var _ = require('lodash'); -var path = require('path'); -var pathLoader = require('path-loader'); +var helpers = require('./lib/helpers'); +var JsonRefs = require('json-refs'); +var SwaggerApi = require('./lib/types/api'); var YAML = require('js-yaml'); // Load promises polyfill if necessary @@ -35,10 +36,6 @@ if (typeof Promise === 'undefined') { require('native-promise-only'); } -var supportedVersions = { - '2.0': require('./lib/versions/2.0/') -}; - /** * A library for simpler [Swagger](http://swagger.io/) integrations. * @@ -113,6 +110,7 @@ var supportedVersions = { */ module.exports.create = function (options) { var allTasks = Promise.resolve(); + var cOptions; // Validate arguments allTasks = allTasks.then(function () { @@ -142,38 +140,89 @@ module.exports.create = function (options) { }); // Make a copy of the input options so as not to alter them - options = _.cloneDeep(options); + cOptions = _.cloneDeep(options); - // Retrieve the definition if it is a path/URL (The reason we do this here instead of using JsonRefs#resolveRefsAt is - // because we use this to identify which plugin we want to use.) + // allTasks = allTasks - // Load the remote definition or return options.definition + // Resolve relative/remote references .then(function () { - if (_.isString(options.definition)) { - return pathLoader.load(options.jsonRefs && options.jsonRefs.relativeBase ? - path.join(options.jsonRefs.relativeBase, options.definition) : - options.definition, - options.jsonRefs && options.jsonRefs.loaderOptions ? - options.jsonRefs.loaderOptions : - {}) - .then(YAML.safeLoad); + // Prepare the json-refs options + if (_.isUndefined(cOptions.jsonRefs)) { + cOptions.jsonRefs = {}; + } + + // Include invalid reference information + cOptions.jsonRefs.includeInvalid = true; + + // Resolve only relative/remote references + cOptions.jsonRefs.filter = ['relative', 'remote']; + + // Update the json-refs options to process YAML + if (_.isUndefined(cOptions.jsonRefs.loaderOptions)) { + cOptions.jsonRefs.loaderOptions = {}; + } + + if (_.isUndefined(cOptions.jsonRefs.loaderOptions.processContent)) { + cOptions.jsonRefs.loaderOptions.processContent = function (res, cb) { + cb(undefined, YAML.safeLoad(res.text)); + }; + } + + // Call the appropriate json-refs API + if (_.isString(cOptions.definition)) { + return JsonRefs.resolveRefsAt(cOptions.definition, cOptions.jsonRefs); } else { - return options.definition; + return JsonRefs.resolveRefs(cOptions.definition, cOptions.jsonRefs); } - }); + }) + // Resolve local references and merge results + .then(function (remoteResults) { + // Resolve all references (Should only resolve locals now since the remote references are resolved) + delete cOptions.jsonRefs.filter; - // Process the Swagger definition (if possible) - allTasks = allTasks - .then(function (apiDefinition) { - var definition = _.find(supportedVersions, function (pDefinition) { - return pDefinition.canProcess(apiDefinition); - }); + return JsonRefs.resolveRefs(remoteResults.resolved, cOptions.jsonRefs) + .then(function (results) { + return { + // The original Swagger definition + definition: _.isString(cOptions.definition) ? remoteResults.value : cOptions.definition, + // The original Swagger definition with its remote references resolved + definitionRemotesResolved: remoteResults.resolved, + // The original Swagger definition with all its references resolved + definitionAllResolved: results.resolved, + // Merge the local reference details with the remote reference details + refs: _.reduce(results.refs, function (allRefs, refDetails, refPtr) { + var refPath = JsonRefs.pathFromPtr(refPtr); - if (_.isUndefined(definition)) { - throw new TypeError('Unable to identify the Swagger version or the Swagger version is unsupported'); - } + if (!_.has(allRefs, refPtr)) { + if (_.has(remoteResults.resolved, refPath)) { + refDetails.value = _.get(remoteResults.resolved, refPath); + } else { + refDetails.missing = true; + refDetails.type = 'invalid'; + } - return definition.createSwaggerApi(apiDefinition, options); + allRefs[refPtr] = refDetails; + } + + return allRefs; + }, remoteResults.refs) + } + }); + }) + // Process the Swagger document and return the API + .then(function (results) { + // We need to remove all circular objects as z-schema does not work with them: + // https://github.com/zaggino/z-schema/issues/137 + helpers.removeCirculars(results.definition); + helpers.removeCirculars(results.definitionRemotesResolved); + helpers.removeCirculars(results.definitionAllResolved); + + // Create object model + return new SwaggerApi(results.definition, + results.definitionRemotesResolved, + results.definitionAllResolved, + results.refs, + options); }); return allTasks; diff --git a/lib/helpers.js b/lib/helpers.js index ab8b047..72ee07c 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -25,11 +25,71 @@ 'use strict'; var _ = require('lodash'); +var formatGenerators = require('./validation/format-generators'); +var formatValidators = require('./validation/format-validators'); var mocker = require('json-schema-faker'); var ZSchema = require('z-schema'); +var collectionFormats = [undefined, 'csv', 'multi', 'pipes', 'ssv', 'tsv']; var draft04Json = require('./json-schema-draft-04.json'); var draft04Url = 'http://json-schema.org/draft-04/schema'; +var jsonMocker = createJSONMocker(); +var jsonSchemaValidator = createJSONValidator(); +// https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#parameter-object +var parameterSchemaProperties = [ + 'allowEmptyValue', + 'default', + 'description', + 'enum', + 'exclusiveMaximum', + 'exclusiveMinimum', + 'format', + 'items', + 'maxItems', + 'maxLength', + 'maximum', + 'minItems', + 'minLength', + 'minimum', + 'multipleOf', + 'pattern', + 'type', + 'uniqueItems' +]; +var types = ['array', 'boolean', 'integer', 'object', 'number', 'string']; + +function createJSONMocker () { + // Extend faker.js to only include the 'en' locale + mocker.extend('faker', function (faker) { + faker.locale = 'en'; + + return faker; + }); + + // Add the custom format generators + _.each(formatGenerators, function (handler, name) { + mocker.formats(name, handler); + }); + + return mocker; +} + +function createJSONValidator () { + var validator = new ZSchema({ + ignoreUnknownFormats: true, + reportPathAsArray: true + }); + + // Add the draft-04 spec + validator.setRemoteReference(draft04Url, draft04Json); + + // Add the custom validators + _.each(formatValidators, function (handler, name) { + ZSchema.registerFormat(name, handler); + }); + + return validator; +} function normalizeError (obj) { // Remove fields that are not important or are not a part of the exposed contract @@ -42,66 +102,261 @@ function normalizeError (obj) { }); } } - /** - * Helper method to create a JSON Schema Mocker. + * Helper method to take a Swagger parameter definition and compute its schema. * - * @param {object} [options] - The mocker options - * @param {object} [options.formatGenerators] - The custom format generators to use + * For non-body Swagger parameters, the definition itself is not suitable as a JSON Schema so we must compute it. * - * @returns {object} The JSON Schema mocker + * @param {object} paramDef - The parameter definition + * + * @returns {object} The computed schema */ -module.exports.createJSONSchemaMocker = function (options) { - /* istanbul ignore if */ - if (_.isUndefined(options)) { - options = {}; +module.exports.computeParameterSchema = function (paramDef) { + var schema; + + if (_.isUndefined(paramDef.schema)) { + schema = {}; + + // Build the schema from the schema-like parameter structure + _.forEach(parameterSchemaProperties, function (name) { + if (!_.isUndefined(paramDef[name])) { + schema[name] = paramDef[name]; + } + }); + } else { + schema = paramDef.schema; } - // Extend faker.js to only include the 'en' locale - mocker.extend('faker', function (faker) { - faker.locale = 'en'; - - return faker; - }); - - // Add the custom format generators - _.each(options.formatGenerators, function (handler, name) { - mocker.formats(name, handler); - }); - - return mocker; + return schema; }; /** - * Helper method to create a JSON Validator. + * Converts a raw JavaScript value to a JSON Schema value based on its schema. * - * @param {object} [options] - The validator options - * @param {object} [options.formatValidators] - The custom format validators to use + * @param {object} schema - The schema for the value + * @param {object} options - The conversion options + * @param {string} [options.collectionFormat] - The collection format + * @param {string} [options.encoding] - The encoding if the raw value is a `Buffer` + * @param {*} value - The value to convert * - * @returns {object} The JSON Schema validator + * @returns {*} The converted value + * + * @throws {TypeError} IF the `collectionFormat` or `type` is invalid for the `schema`, or if conversion fails */ -module.exports.createJSONValidator = function (options) { - var validator = new ZSchema({ - ignoreUnknownFormats: true, - reportPathAsArray: true - }); +var convertValue = module.exports.convertValue = function (schema, options, value) { + var originalValue = value; // Used in error reporting for invalid values + var type = _.isPlainObject(schema) ? schema.type : undefined; + var pValue = value; + var pType = typeof pValue; + var err; - /* istanbul ignore if */ - if (_.isUndefined(options)) { - options = {}; + // If there is an explicit type provided, make sure it's one of the supported ones + if (_.has(schema, 'type') && types.indexOf(type) === -1) { + throw new TypeError('Invalid \'type\' value: ' + type); } - // Add the draft-04 spec - validator.setRemoteReference(draft04Url, draft04Json); + // Since JSON Schema allows you to not specify a type and it is treated as a wildcard of sorts, we should not do any + // coercion for these types of values. + if (_.isUndefined(type)) { + return value; + } - // Add the custom validators - _.each(options.formatValidators, function (handler, name) { - ZSchema.registerFormat(name, handler); - }); + // If there is no value, do not convert it + if (_.isUndefined(value)) { + return value; + } - return validator; + // Convert Buffer value to String + // (We use this type of check to identify Buffer objects. The browser does not have a Buffer type and to avoid having + // import the browserify buffer module, we just do a simple check. This is brittle but should work.) + if (_.isFunction(value.readUInt8)) { + value = value.toString(options.encoding); + pValue = value; + pType = typeof value; + } + + // If the value is empty and empty is allowed, use it + if (schema.allowEmptyValue && value === '') { + return value; + } + + // Attempt to parse the string as JSON if the type is array or object + if (['array', 'object'].indexOf(type) > -1) { + try { + value = JSON.parse(value); + } catch (err) { + // Nothing to do here, just fall through + } + } + + switch (type) { + case 'array': + if (_.isString(value)) { + if (collectionFormats.indexOf(options.collectionFormat) === -1) { + throw new TypeError('Invalid \'collectionFormat\' value: ' + options.collectionFormat); + } + + switch (options.collectionFormat) { + case 'csv': + case undefined: + value = value.split(','); + break; + case 'multi': + value = [value]; + break; + case 'pipes': + value = value.split('|'); + break; + case 'ssv': + value = value.split(' '); + break; + case 'tsv': + value = value.split('\t'); + break; + + // no default + } + } + + if (_.isArray(value)) { + value = _.map(value, function (item, index) { + return convertValue(_.isArray(schema.items) ? schema.items[index] : schema.items, options, item); + }); + } + + break; + case 'boolean': + if (!_.isBoolean(value)) { + if (value === 'true') { + value = true; + } else if (value === 'false') { + value = false; + } else { + err = new TypeError('Not a valid boolean: ' + value); + } + } + + break; + case 'integer': + if (!_.isNumber(value)) { + if (_.isString(value) && _.trim(value).length === 0) { + value = NaN; + } + + value = Number(value); + + if (_.isNaN(value)) { + err = new TypeError('Not a valid integer: ' + originalValue); + } + } + + break; + case 'number': + if (!_.isNumber(value)) { + if (_.isString(value) && _.trim(value).length === 0) { + value = NaN; + } + + value = Number(value); + + if (_.isNaN(value)) { + err = new TypeError('Not a valid number: ' + originalValue); + } + } + break; + case 'string': + if (['date', 'date-time'].indexOf(schema.format) > -1) { + if (_.isString(value)) { + value = new Date(value); + } + + if (!_.isDate(value) || value.toString() === 'Invalid Date') { + err = new TypeError('Not a valid ' + schema.format + ' string: ' + originalValue); + + err.code = 'INVALID_FORMAT'; + } + } else if (!_.isString(value)) { + err = new TypeError('Not a valid string: ' + value); + } + + break; + + // no default + } + + if (!_.isUndefined(err)) { + // Convert the error to be more like a JSON Schema validation error + if (_.isUndefined(err.code)) { + err.code = 'INVALID_TYPE'; + err.message = 'Expected type ' + type + ' but found type ' + pType; + } else { + err.message = 'Object didn\'t pass validation for format ' + schema.format + ': ' + pValue; + } + + // Format and type errors resemble JSON Schema validation errors + err.failedValidation = true; + err.path = []; + + throw err; + } + + return value; }; +/** + * Returns a json-schema-faker mocker. + * + * @returns {object} The json-schema-faker mocker to use + */ +module.exports.getJSONSchemaMocker = function () { + return jsonMocker; +}; + +/** + * Returns a z-schema validator. + * + * @returns {object} The z-schema validator to use + */ +module.exports.getJSONSchemaValidator = function () { + return jsonSchemaValidator; +}; + +module.exports.parameterLocations = ['body', 'formData', 'header', 'path', 'query']; + +/** + * Replaces the circular references in the provided object with an empty object. + * + * @param {object} obj - The JavaScript object + */ +module.exports.removeCirculars = function (obj) { + function walk (ancestors, node, path) { + function walkItem (item, segment) { + path.push(segment); + walk(ancestors, item, path); + path.pop(); + } + + // We do not process circular objects again + if (ancestors.indexOf(node) === -1) { + ancestors.push(node); + + if (_.isArray(node) || _.isPlainObject(node)) { + _.each(node, function (member, indexOrKey) { + walkItem(member, indexOrKey.toString()); + }); + } + } else { + _.set(obj, path, {}); + } + + ancestors.pop(); + } + + walk([], obj, []); +} + +module.exports.supportedHttpMethods = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch']; + /** * Validates the provided value against the JSON Schema by name or value. * @@ -148,10 +403,10 @@ module.exports.validateContentType = function (contentType, supportedTypes, resu // Check for exact match or mime-type only match if (_.indexOf(supportedTypes, rawContentType) === -1 && _.indexOf(supportedTypes, contentType) === -1) { results.errors.push({ - code: 'INVALID_CONTENT_TYPE', - message: 'Invalid Content-Type (' + contentType + '). These are supported: ' + - supportedTypes.join(', '), - path: [] - }); + code: 'INVALID_CONTENT_TYPE', + message: 'Invalid Content-Type (' + contentType + '). These are supported: ' + + supportedTypes.join(', '), + path: [] + }); } }; diff --git a/lib/types/api.js b/lib/types/api.js index 504ab00..19f8d4c 100644 --- a/lib/types/api.js +++ b/lib/types/api.js @@ -27,6 +27,8 @@ var _ = require('lodash'); var debug = require('debug')('sway:api'); var parseUrl = require('url').parse; +var Path = require('./path'); +var validators = require('../validation/validators'); /** * The Swagger API object. @@ -36,43 +38,53 @@ var parseUrl = require('url').parse; * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {object} plugin - The Swagger version plugin - * @param {object} definition - The Swagger definition - * @param {object} resolved - The fully resolved Swagger definition + * @param {object} definition - The original Swagger definition + * @param {obejct} definitionRemotesResolved - The Swagger definition with all of its remote references resolved + * @param {object} definitionAllResolved - The Swagger definition with all of its references resolved * @param {object} references - The location and resolution of the resolved references in the Swagger definition * @param {object} options - The options passed to swaggerApi.create - * @param {ValidatorCallback} [options.customValidators] - The custom validators * * @property {ValidatorCallback[]} customValidators - The array of custom validators - * @property {object} definition - The API definition + * @property {object} definition - The original Swagger definition + * @property {obejct} definitionRemotesResolved - The Swagger definition with all of its remote references resolved + * @property {object} definitionAllResolved - The Swagger definition with all of its references resolved * @property {string} documentation - The URL to the Swagger documentation * @property {Path[]} pathObjects - The unique path objects * @property {object} options - The options passed to the constructor * @property {object} references - The reference metadata *(See [JsonRefs~ResolvedRefDetails](https://github.com/whitlockjc/json-refs/blob/master/docs/API.md#module_JsonRefs..ResolvedRefDetails))* - * @property {object} resolved - The fully resolved API definition * @property {string} version - The Swagger API version * * @constructor */ -function SwaggerApi (plugin, definition, resolved, references, options) { +function SwaggerApi (definition, definitionRemotesResolved, definitionAllResolved, references, options) { + var that = this; + + // Assign local properties this.customValidators = []; this.definition = definition; - this.documentation = plugin.documentation; + this.definitionAllResolved = definitionAllResolved; + this.definitionRemotesResolved = definitionRemotesResolved; + this.documentation = 'https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md'; this.options = options; - this.plugin = plugin; this.references = references; - this.resolved = resolved; - this.version = plugin.version; + this.version = '2.0'; - // Assign Swagger definition properties to the api for easy access + // Assign local properties from the Swagger definition properties _.assign(this, definition); - debug('Initializing Sway using %s', _.isString(options.definition) ? options.definition : 'the provided document'); - - this.pathObjects = plugin.getPaths(this); - // Register custom validators - _.forEach(options.customValidators, SwaggerApi.prototype.registerValidator, this); + _.each(options.customValidators, SwaggerApi.prototype.registerValidator, this); + + // Create the Path objects + this.pathObjects = _.map(definitionAllResolved.paths, function (pathDef, path) { + return new Path(that, + path, + pathDef, + ['paths', path]); + + }); + + debug('Creating SwaggerApi from %s', _.isString(options.definition) ? options.definition : 'the provided document'); } /** @@ -231,15 +243,15 @@ SwaggerApi.prototype.validate = function () { } // Validate the document structurally - doValidation(this.plugin.getStructuralValidator()); + doValidation(validators.jsonSchemaValidator); // Perform remaining validation only if the document is structurally valid if (results.errors.length === 0) { // Run plugin validators - _.forEach(this.plugin.getSemanticValidators(), doValidation); + _.each(validators.semanticValidators, doValidation); // Run custom validators - _.forEach(this.customValidators, doValidation); + _.each(this.customValidators, doValidation); } return results; diff --git a/lib/types/operation.js b/lib/types/operation.js index fa39806..7ca51be 100644 --- a/lib/types/operation.js +++ b/lib/types/operation.js @@ -26,7 +26,10 @@ var _ = require('lodash'); var debug = require('debug')('sway:operation'); -var sHelpers = require('../helpers'); +var JsonRefs = require('json-refs'); +var Parameter = require('./parameter'); +var Response = require('./response'); +var helpers = require('../helpers'); /** * The Swagger Operation object. @@ -36,47 +39,85 @@ var sHelpers = require('../helpers'); * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {SwaggerApi} api - The Swagger API object * @param {Path} pathObject - The Path object * @param {string} method - The operation method - * @param {string} ptr - The JSON Pointer to the operation * @param {object} definition - The operation definition - * @param {string[]} consumes - The mime types this operation consumes - * @param {string[]} produces - The mime types this operation produces + * @param {string[]} pathToDefinition - The path segments to the operation definition * - * @property {SwaggerApi} api - The Swagger API object * @property {object} definition - The operation definition * @property {string} method - The HTTP method for this operation * @property {Path} pathObject - The Path object + * @property {string[]} pathToDefinition - The path segments to the operation definition * @property {Parameter[]} parameterObjects - The Parameter objects * @property {string} ptr - The JSON Pointer to the operation * @property {object} securityDefinitions - The security definitions used by this operation * * @constructor */ -function Operation (api, pathObject, method, ptr, definition, consumes, produces) { - this.api = api; - this.pathObject = pathObject; - this.method = method; - this.ptr = ptr; - this.definition = definition; +function Operation (pathObject, method, definition, pathToDefinition) { + var seenParameters = []; + var that = this; - // Assign Swagger definition properties to the operation for easy access + // Assign local properties + this.consumes = definition.consumes || pathObject.api.consumes || []; + this.definition = _.cloneDeep(definition); // Clone so we do not alter the original + this.method = method; + this.parameterObjects = []; // Computed below + this.pathObject = pathObject; + this.pathToDefinition = pathToDefinition; + this.produces = definition.produces || pathObject.api.produces || []; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); + + // Assign local properties from the Swagger definition properties _.assign(this, definition); - // Assign consumes/produces after merging properties - this.consumes = consumes; - this.produces = produces; + // Default to the global security + if (_.isUndefined(this.security)) { + this.security = this.definition.security = pathObject.api.definitionAllResolved.security; + } - debug('Found operation at %s', ptr); + // Add the Parameter objects from the Path object that were not redefined in the operation definition + this.parameterObjects = _.map(pathObject.parameterObjects, function (parameterObject) { + seenParameters.push(parameterObject.in + ':' + parameterObject.name); - this.parameterObjects = api.plugin.getOperationParameters(this); - this.responseObjects = api.plugin.getOperationResponses(this); + return parameterObject; + }); + + // Create Parameter objects from parameters defined in the operation definition + _.each(definition.parameters, function (paramDef, index) { + var key = paramDef.in + ':' + paramDef.name; + var seenIndex = seenParameters.indexOf(key); + var parameterObject = new Parameter(that, + paramDef, + pathToDefinition.concat(['parameters', index.toString()])); + + if (seenIndex > -1) { + that.parameterObjects[seenIndex] = parameterObject; + } else { + that.parameterObjects.push(parameterObject); + + seenParameters.push(key); + } + }); + + this.parameters = this.definition.parameters = _.map(this.parameterObjects, function (parameterObject) { + return parameterObject.definition; + }); + + // Create response objects from responses defined in the operation definition + this.responseObjects = _.map(definition.responses, function (responseDef, code) { + return new Response(that, + code, + responseDef, + pathToDefinition.concat(['responses', code])); + }); // Bring in the security definitions for easier access - this.securityDefinitions = _.reduce(definition.security, function (defs, reqs) { + this.securityDefinitions = _.reduce(this.security, function (defs, reqs) { _.each(reqs, function (req, name) { - var def = api.resolved.securityDefinitions ? api.resolved.securityDefinitions[name] : undefined; + var def = pathObject.api.definitionAllResolved.securityDefinitions ? + pathObject.api.definitionAllResolved.securityDefinitions[name] : + undefined; if (!_.isUndefined(def)) { defs[name] = def; @@ -85,6 +126,8 @@ function Operation (api, pathObject, method, ptr, definition, consumes, produces return defs; }, {}); + + debug('Found operation at %s', this.ptr); } /** @@ -167,7 +210,7 @@ Operation.prototype.validateRequest = function (req) { // Validate the Content-Type but only for POST and PUT (The rest do not have bodies) if (['post', 'put'].indexOf(this.method) > -1) { // Defaults to application/octet-stream per http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1 - sHelpers.validateContentType(req.headers['content-type'] || 'application/octet-stream', this.consumes, results); + helpers.validateContentType(req.headers['content-type'] || 'application/octet-stream', this.consumes, results); } // Validate the parameters diff --git a/lib/types/parameter-value.js b/lib/types/parameter-value.js index 8d86fcb..792b53a 100644 --- a/lib/types/parameter-value.js +++ b/lib/types/parameter-value.js @@ -33,7 +33,7 @@ var JsonRefs = require('json-refs'); * * **Note:** Do not use directly. * - * @param {Parameter} parameter - The Parameter Object + * @param {Parameter} parameterObject - The Parameter Object * @param {*} raw - The original/raw value * * @property {Error} error - The error(s) encountered during processing/validating the parameter value @@ -47,16 +47,15 @@ var JsonRefs = require('json-refs'); * * @constructor */ -function ParameterValue (parameter, raw) { - var plugin = parameter.pathObject.api.plugin; - var pPath = JsonRefs.pathFromPtr(parameter.ptr); +function ParameterValue (parameterObject, raw) { + var pPath = JsonRefs.pathFromPtr(parameterObject.ptr); var processed = false; - var schema = parameter.computedSchema; + var schema = parameterObject.computedSchema; var error; var isValid; var processedValue; - this.parameterObject = parameter; + this.parameterObject = parameterObject; this.raw = raw; // Use Object.defineProperty for 'value' to allow for lazy processing of the raw value @@ -90,7 +89,7 @@ function ParameterValue (parameter, raw) { if (_.isUndefined(error)) { try { // Validate requiredness - if (parameter.required === true && _.isUndefined(value)) { + if (parameterObject.required === true && _.isUndefined(value)) { vError = new Error('Value is required but was not provided'); vError.code = 'REQUIRED'; @@ -105,11 +104,11 @@ function ParameterValue (parameter, raw) { // * The schema defines a file parameter // * The schema is for a string type with date/date-time format and the value is a date // * The schema is for a string type and the value is a Buffer - if (parameter.required === false && _.isUndefined(value)) { + if (parameterObject.required === false && _.isUndefined(value)) { skipValidation = true; } else if (schema.allowEmptyValue === true && value === '') { skipValidation = true; - } else if (parameter.type === 'file') { + } else if (parameterObject.type === 'file') { skipValidation = true; } else if (schema.type === 'string') { if (['date', 'date-time'].indexOf(schema.format) > -1 && _.isDate(value)) { @@ -121,7 +120,7 @@ function ParameterValue (parameter, raw) { if (!skipValidation) { // Validate against JSON Schema - result = helpers.validateAgainstSchema(plugin.getJSONSchemaValidator(), parameter.getSchema(), value); + result = helpers.validateAgainstSchema(helpers.getJSONSchemaValidator(), parameterObject.getSchema(), value); } if (result.errors.length > 0) { @@ -156,8 +155,8 @@ function ParameterValue (parameter, raw) { } else { // Convert/Coerce the raw value from the request object try { - processedValue = plugin.convertValue(schema, { - collectionFormat: parameter.collectionFormat + processedValue = helpers.convertValue(schema, { + collectionFormat: parameterObject.collectionFormat }, raw); } catch (err) { error = err; diff --git a/lib/types/parameter.js b/lib/types/parameter.js index 155e49f..0af0c92 100644 --- a/lib/types/parameter.js +++ b/lib/types/parameter.js @@ -26,7 +26,8 @@ var _ = require('lodash'); var debug = require('debug')('sway:parameter'); -var Operation = require('./operation'); +var helpers = require('../helpers'); +var JsonRefs = require('json-refs'); var ParameterValue = require('./parameter-value'); var parseUrl = require('url').parse; @@ -38,40 +39,43 @@ var parseUrl = require('url').parse; * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {Operation|Path} opOrPath - The Operation or Path object - * @param {string} ptr - The JSON Pointer to the parameter + * @param {Operation|Path} opOrPathObject - The `Operation` or `Path` object * @param {object} definition - The parameter definition - * @param {object} schema - The JSON Schema for the parameter + * @param {string[]} pathToDefinition - The path segments to the parameter definition * + * @property {object} computedSchema - The computed JSON Schema for the parameter * @property {object} definition - The parameter definition - * @property {Operation} operationObject - The Operation object (Can be undefined for path-level parameters) - * @property {Path} pathObject - The Path object + * @property {Operation} operationObject - The `Operation` object the parameter belongs to *(Can be undefined for + * path-level parameters)* + * @property {Path} pathObject - The `Path` object the parameter belongs t + * @property {string[]} pathToDefinition - The path segments to the parameter definition * @property {string} ptr - The JSON Pointer to the parameter definition - * @property {object} schema - The JSON Schema for the parameter * * @constructor */ -function Parameter (opOrPath, ptr, definition, schema) { - this.computedSchema = schema; +function Parameter (opOrPathObject, definition, pathToDefinition) { + // Assign local properties + this.computedSchema = helpers.computeParameterSchema(definition); this.definition = definition; - this.ptr = ptr; + this.pathToDefinition = pathToDefinition; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); - if (opOrPath instanceof Operation) { - this.operationObject = opOrPath; - this.pathObject = opOrPath.pathObject; + if (_.has(opOrPathObject, 'consumes')) { + this.operationObject = opOrPathObject; + this.pathObject = opOrPathObject.pathObject; } else { this.operationObject = undefined; - this.pathObject = opOrPath; + this.pathObject = opOrPathObject; } - // Assign Swagger definition properties to the parameter for easy access + // Assign local properties from the Swagger definition properties _.assign(this, definition); debug('Found %s parameter (%s in %s) at %s', _.isUndefined(this.operationObject) ? 'path-level' : 'operation', definition.name, definition.in, - ptr); + this.ptr); } /** @@ -89,7 +93,7 @@ Parameter.prototype.getSchema = function () { * @returns {*} The sample value */ Parameter.prototype.getSample = function () { - return this.pathObject.api.plugin.getSample(this.computedSchema); + return helpers.getJSONSchemaMocker()(this.computedSchema); }; /** @@ -116,11 +120,9 @@ Parameter.prototype.getSample = function () { * parameter is missing. */ Parameter.prototype.getValue = function (req) { - var api = (this.operationObject || this.pathObject).api; - if (_.isUndefined(req)) { throw new TypeError('req is required'); - } else if (api.plugin.parameterLocations.indexOf(this.in) === -1) { + } else if (helpers.parameterLocations.indexOf(this.in) === -1) { throw new Error('Invalid \'in\' value: ' + this.in); } diff --git a/lib/types/path.js b/lib/types/path.js index 7bf0733..20e9ea1 100644 --- a/lib/types/path.js +++ b/lib/types/path.js @@ -26,6 +26,11 @@ var _ = require('lodash'); var debug = require('debug')('sway:path'); +var helpers = require('../helpers'); +var JsonRefs = require('json-refs'); +var Operation = require('./operation'); +var Parameter = require('./parameter'); +var pathToRegexp = require('path-to-regexp'); /** * The Path object. @@ -37,34 +42,59 @@ var debug = require('debug')('sway:path'); * * @param {SwaggerApi} api - The Swagger API object * @param {string} path - The path string - * @param {ptr} ptr - The JSON Pointer to the path * @param {object} definition - The path definition - * @param {regexp} regexp - The regexp used to match request paths against this path + * @param {string[]} pathToDefinition - The path segments to the path definition * * @property {SwaggerApi} api - The Swagger API object * @property {object} definition - The path definition - * @property {Operation[]} operationObjects - The operation objects - * @property {Parameter[]} parameterObjects - The path-level parameter objects + * @property {Operation[]} operationObjects - The `Operation` objects + * @property {Parameter[]} parameterObjects - The path-level `Parameter` objects * @property {string} path - The path string + * @property {string[]} pathToDefinition - The path segments to the path definition * @property {ptr} ptr - The JSON Pointer to the path - * @property {regexp} regexp - The regexp used to match request paths against this path + * @property {regexp} regexp - The `RegExp` used to match request paths against this path * * @constructor */ -function Path (api, path, ptr, definition, regexp) { - this.api = api; - this.path = path; - this.ptr = ptr; - this.definition = definition; - this.regexp = regexp; +function Path (api, path, definition, pathToDefinition) { + var basePathPrefix = api.definitionAllResolved.basePath || '/'; + var that = this; - // Assign Swagger definition properties to the operation for easy access + // TODO: We could/should refactor this to use the path module + + // Remove trailing slash from the basePathPrefix so we do not end up with double slashes + if (basePathPrefix.charAt(basePathPrefix.length - 1) === '/') { + basePathPrefix = basePathPrefix.substring(0, basePathPrefix.length - 1); + } + + // Assign local properties + this.api = api; + this.definition = definition; + this.path = path; + this.pathToDefinition = pathToDefinition; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); + this.regexp = pathToRegexp(basePathPrefix + path.replace(/\{/g, ':').replace(/\}/g, '')); + + // Assign local properties from the Swagger definition properties _.assign(this, definition); - debug('Found path at %s', ptr); + this.parameterObjects = _.map(definition.parameters, function (paramDef, index) { + return new Parameter(that, + paramDef, + pathToDefinition.concat(['parameters', index.toString()])); + }); + this.operationObjects = _.reduce(definition, function (operations, operationDef, method) { + if (helpers.supportedHttpMethods.indexOf(method) > -1) { + operations.push(new Operation(that, + method, + operationDef, + pathToDefinition.concat(method))); + } - this.parameterObjects = api.plugin.getPathParameters(this); - this.operationObjects = api.plugin.getOperations(this); + return operations; + }, []); + + debug('Found path at %s', this.ptr); } /** diff --git a/lib/types/response.js b/lib/types/response.js index 0695a24..0119103 100644 --- a/lib/types/response.js +++ b/lib/types/response.js @@ -26,11 +26,11 @@ var _ = require('lodash'); var debug = require('debug')('sway:response'); -var sHelpers = require('../helpers'); +var helpers = require('../helpers'); +var jsonValidator = helpers.getJSONSchemaValidator(); +var JsonRefs = require('json-refs'); var YAML = require('js-yaml'); -var jsonValidator; - /** * The Swagger Response object. * @@ -39,30 +39,31 @@ var jsonValidator; * **Extra Properties:** Other than the documented properties, this object also exposes all properties of the definition * object. * - * @param {Operation} operation - The Operation object - * @param {string} ptr - The JSON Pointer to the response - * @param {object} definition - The parameter definition + * @param {Operation} operationObject - The `Operation` object * @param {string} statusCode - The status code + * @param {object} definition - The parameter definition + * @param {string[]} pathToDefinition - The path segments to the path definition * * @property {object} definition - The response definition * @property {Operation} operationObject - The Operation object + * @property {string[]} pathToDefinition - The path segments to the path definition * @property {string} ptr - The JSON Pointer to the response definition * @property {string} statusCode - The status code * * @constructor */ -function Response (operation, ptr, definition, statusCode) { +function Response (operationObject, statusCode, definition, pathToDefinition) { + // Assign local properties this.definition = definition; - this.operationObject = operation; - this.ptr = ptr; + this.operationObject = operationObject; + this.pathToDefinition = pathToDefinition; + this.ptr = JsonRefs.pathToPtr(pathToDefinition); this.statusCode = statusCode; - // Assign Swagger definition properties to the parameter for easy access + // Assign local properties from the Swagger definition properties _.assign(this, definition); - debug('Found %s response at %s', statusCode, ptr); - - jsonValidator = operation.api.plugin.getJSONSchemaValidator(); + debug('Found %s response at %s', statusCode, this.ptr); } /** @@ -99,7 +100,7 @@ Response.prototype.getSample = function () { var sample; if (!_.isUndefined(this.definition.schema)) { - sample = this.operationObject.api.plugin.getSample(this.definition.schema); + sample = helpers.getJSONSchemaMocker()(this.definition.schema); } return sample; @@ -117,7 +118,6 @@ Response.prototype.validateResponse = function (res) { errors: [], warnings: [] }; - var that = this; var bodyValue; var bvResults; @@ -132,7 +132,7 @@ Response.prototype.validateResponse = function (res) { // Validate the Content-Type except for void responses, 204 responses and 304 responses as they have no body if (!_.isUndefined(this.definition.schema) && _.indexOf(['204', '304'], this.statusCode) === -1) { - sHelpers.validateContentType(res.headers['content-type'], this.operationObject.produces, results); + helpers.validateContentType(res.headers['content-type'], this.operationObject.produces, results); } // Validate the response headers @@ -141,28 +141,28 @@ Response.prototype.validateResponse = function (res) { var hvResults; try { - headerValue = that.operationObject.api.plugin.convertValue(schema, - { - collectionFormat: schema.collectionFormat - }, - // Overly cautious - res.headers[name.toLowerCase()] || - res.headers[name] || - schema.default); + headerValue = helpers.convertValue(schema, + { + collectionFormat: schema.collectionFormat + }, + // Overly cautious + res.headers[name.toLowerCase()] || + res.headers[name] || + schema.default); } catch (err) { results.errors.push({ - code: 'INVALID_RESPONSE_HEADER', - errors: err.errors || [ - { - code: err.code, - message: err.message, - path: err.path - } - ], - message: 'Invalid header (' + name + '): ' + err.message, - name: name, - path: err.path - }); + code: 'INVALID_RESPONSE_HEADER', + errors: err.errors || [ + { + code: err.code, + message: err.message, + path: err.path + } + ], + message: 'Invalid header (' + name + '): ' + err.message, + name: name, + path: err.path + }); } // Due to ambiguity in the Swagger 2.0 Specification (https://github.com/swagger-api/swagger-spec/issues/321), it @@ -172,7 +172,7 @@ Response.prototype.validateResponse = function (res) { // We also do not want to validate date objects because it is redundant. If we have already converted the value // from a string+format to a date, we know it passes schema validation. if (!_.isUndefined(headerValue) && !_.isDate(headerValue)) { - hvResults = sHelpers.validateAgainstSchema(jsonValidator, schema, headerValue); + hvResults = helpers.validateAgainstSchema(jsonValidator, schema, headerValue); if (hvResults.errors.length > 0) { results.errors.push({ @@ -193,10 +193,10 @@ Response.prototype.validateResponse = function (res) { // Validate response for non-void responses if (!_.isUndefined(this.definition.schema) && _.indexOf(['204', '304'], this.statusCode) === -1) { try { - bodyValue = that.operationObject.api.plugin.convertValue(this.definition.schema, { + bodyValue = helpers.convertValue(this.definition.schema, { encoding: res.encoding }, res.body); - bvResults = sHelpers.validateAgainstSchema(jsonValidator, this.definition.schema, bodyValue); + bvResults = helpers.validateAgainstSchema(jsonValidator, this.definition.schema, bodyValue); } catch (err) { bvResults = { errors: [ diff --git a/lib/versions/2.0/format-generators.js b/lib/validation/format-generators.js similarity index 100% rename from lib/versions/2.0/format-generators.js rename to lib/validation/format-generators.js diff --git a/lib/versions/2.0/format-validators.js b/lib/validation/format-validators.js similarity index 100% rename from lib/versions/2.0/format-validators.js rename to lib/validation/format-validators.js diff --git a/lib/versions/2.0/schema.json b/lib/validation/schema.json similarity index 100% rename from lib/versions/2.0/schema.json rename to lib/validation/schema.json diff --git a/lib/versions/2.0/validators.js b/lib/validation/validators.js similarity index 93% rename from lib/versions/2.0/validators.js rename to lib/validation/validators.js index 7018071..96278a3 100644 --- a/lib/versions/2.0/validators.js +++ b/lib/validation/validators.js @@ -25,10 +25,9 @@ 'use strict'; var _ = require('lodash'); -var helpers = require('../../helpers'); +var helpers = require('../helpers'); var JsonRefs = require('json-refs'); var swaggerSchema = require('./schema.json'); -var vHelpers = require('./helpers'); function getSchemaProperties (schema) { var properties = _.keys(schema.properties); // Start with the defined properties @@ -105,7 +104,7 @@ function walkSchema (api, blacklist, schema, path, handlers, response) { * @returns {object} Object containing the errors and warnings of the validation */ function validateStructure (api) { - var results = helpers.validateAgainstSchema(api.plugin.getJSONSchemaValidator(), swaggerSchema, api.resolved); + var results = helpers.validateAgainstSchema(helpers.getJSONSchemaValidator(), swaggerSchema, api.definitionAllResolved); // Make complex JSON Schema validation errors easier to understand (Issue 15) results.errors = results.errors.map(function (error) { @@ -180,7 +179,7 @@ function validateDefaultValue (api, response, schema, path) { var result; if (!_.isUndefined(schema.default)) { - result = helpers.validateAgainstSchema(api.plugin.getJSONSchemaValidator(), schema, schema.default); + result = helpers.validateAgainstSchema(helpers.getJSONSchemaValidator(), schema, schema.default); _.forEach(result.errors, function (error) { error.path = path.concat(error.path.concat('default')); @@ -305,19 +304,19 @@ function validateReferences (api) { } // Identify referenceable definitions - _.forEach(api.resolved.definitions, function (def, name) { + _.forEach(api.definitionAllResolved.definitions, function (def, name) { referenceable.push(JsonRefs.pathToPtr(['definitions', name])); }); - _.forEach(api.resolved.parameters, function (def, name) { + _.forEach(api.definitionAllResolved.parameters, function (def, name) { referenceable.push(JsonRefs.pathToPtr(['parameters', name])); }); - _.forEach(api.resolved.responses, function (def, name) { + _.forEach(api.definitionAllResolved.responses, function (def, name) { referenceable.push(JsonRefs.pathToPtr(['responses', name])); }); - _.forEach(api.resolved.securityDefinitions, function (def, name) { + _.forEach(api.definitionAllResolved.securityDefinitions, function (def, name) { var sPath = ['securityDefinitions', name]; referenceable.push(JsonRefs.pathToPtr(sPath)); @@ -360,16 +359,16 @@ function validateReferences (api) { }); // Identify references and validate missing references for non-JSON References (security) - _.forEach(api.resolved.security, createSecurityProcessor(['security'])); + _.forEach(api.definitionAllResolved.security, createSecurityProcessor(['security'])); - _.forEach(api.resolved.paths, function (pathDef, name) { + _.forEach(api.definitionAllResolved.paths, function (pathDef, name) { var pPath = ['paths', name]; _.forEach(pathDef.security, createSecurityProcessor(pPath.concat('security'))); _.forEach(pathDef, function (operationDef, method) { // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { + if (_.indexOf(helpers.supportedHttpMethods, method) === -1) { return; } @@ -433,7 +432,7 @@ function validateSchemaObjects (api) { // Create JSON Schema for non-body parameters if (parameterDef.in !== 'body') { - parameterDef = vHelpers.getParameterSchema(parameterDef); + parameterDef = helpers.computeParameterSchema(parameterDef); } walkSchema(api, blacklist, parameterDef, pPath, validators, response); @@ -455,18 +454,18 @@ function validateSchemaObjects (api) { } // Validate definitions - _.forEach(api.resolved.definitions, function (definitionDef, name) { + _.forEach(api.definitionAllResolved.definitions, function (definitionDef, name) { walkSchema(api, blacklist, definitionDef, ['definitions', name], validators, response); }); // Validate global parameter definitions - validateParameters(api.resolved.parameters, ['parameters']); + validateParameters(api.definitionAllResolved.parameters, ['parameters']); // Validate global response definitions - validateResponses(api.resolved.responses, ['responses']); + validateResponses(api.definitionAllResolved.responses, ['responses']); // Validate paths and operations - _.forEach(api.resolved.paths, function (pathDef, path) { + _.forEach(api.definitionAllResolved.paths, function (pathDef, path) { var pPath = ['paths', path]; // Validate path-level parameter definitions @@ -476,7 +475,7 @@ function validateSchemaObjects (api) { var oPath = pPath.concat(method); // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { + if (_.indexOf(helpers.supportedHttpMethods, method) === -1) { return; } @@ -530,7 +529,7 @@ function validatePathsAndOperations (api) { return seenParameters; } - _.reduce(api.resolved.paths, function (metadata, pathDef, path) { + _.reduce(api.definitionAllResolved.paths, function (metadata, pathDef, path) { var declaredPathParameters = []; var normalizedPath = path; var pPath = ['paths', path]; @@ -576,7 +575,7 @@ function validatePathsAndOperations (api) { var parameters; // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { + if (_.indexOf(helpers.supportedHttpMethods, method) === -1) { return; } diff --git a/lib/versions/2.0/helpers.js b/lib/versions/2.0/helpers.js deleted file mode 100644 index 83a2ee9..0000000 --- a/lib/versions/2.0/helpers.js +++ /dev/null @@ -1,70 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 Apigee Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -'use strict'; - -var _ = require('lodash'); - -// https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#parameter-object -var parameterSchemaProperties = [ - 'allowEmptyValue', - 'default', - 'description', - 'enum', - 'exclusiveMaximum', - 'exclusiveMinimum', - 'format', - 'items', - 'maxItems', - 'maxLength', - 'maximum', - 'minItems', - 'minLength', - 'minimum', - 'multipleOf', - 'pattern', - 'type', - 'uniqueItems' -]; - -module.exports.getParameterSchema = function (parameter) { - var schema; - - if (_.isUndefined(parameter.schema)) { - schema = {}; - - // Build the schema from the schema-like parameter structure - _.forEach(parameterSchemaProperties, function (name) { - if (!_.isUndefined(parameter[name])) { - schema[name] = parameter[name]; - } - }); - } else { - schema = parameter.schema; - } - - return schema; -}; - -module.exports.supportedHttpMethods = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch']; diff --git a/lib/versions/2.0/index.js b/lib/versions/2.0/index.js deleted file mode 100644 index 356bf2d..0000000 --- a/lib/versions/2.0/index.js +++ /dev/null @@ -1,513 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 Apigee Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -'use strict'; - -var _ = require('lodash'); -var dirname = require('path').dirname; -var formatGenerators = require('./format-generators'); -var helpers = require('../../helpers'); -var JsonRefs = require('json-refs'); -var Operation = require('../../types/operation'); -var Parameter = require('../../types/parameter'); -var Path = require('../../types/path'); -var pathToRegexp = require('path-to-regexp'); -var Response = require('../../types/response'); -var SwaggerApi = require('../../types/api'); -var validators = require('./validators'); -var vHelpers = require('./helpers'); -var YAML = require('js-yaml'); - -var collectionFormats = [undefined, 'csv', 'multi', 'pipes', 'ssv', 'tsv']; -var customFormatValidators = require('./format-validators'); -var docsUrl = 'https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md'; -var jsonSchemaValidator = helpers.createJSONValidator({ - formatValidators: customFormatValidators -}); -var mocker = helpers.createJSONSchemaMocker({ - formatGenerators: formatGenerators -}); -var parameterLocations = ['body', 'formData', 'header', 'path', 'query']; -var types = ['array', 'boolean', 'integer', 'object', 'number', 'string']; -var version = '2.0'; - -function realConvertValue (schema, options, value) { - var originalValue = value; // Used in error reporting for invalid values - var type = _.isPlainObject(schema) ? schema.type : undefined; - var pValue = value; - var pType = typeof pValue; - var err; - - // If there is an explicit type provided, make sure it's one of the supported ones - if (_.has(schema, 'type') && types.indexOf(type) === -1) { - throw new TypeError('Invalid \'type\' value: ' + type); - } - - // Since JSON Schema allows you to not specify a type and it is treated as a wildcard of sorts, we should not do any - // coercion for these types of values. - if (_.isUndefined(type)) { - return value; - } - - // If there is no value, do not convert it - if (_.isUndefined(value)) { - return value; - } - - // Convert Buffer value to String - // (We use this type of check to identify Buffer objects. The browser does not have a Buffer type and to avoid having - // import the browserify buffer module, we just do a simple check. This is brittle but should work.) - if (_.isFunction(value.readUInt8)) { - value = value.toString(options.encoding); - pValue = value; - pType = typeof value; - } - - // If the value is empty and empty is allowed, use it - if (schema.allowEmptyValue && value === '') { - return value; - } - - // Attempt to parse the string as JSON if the type is array or object - if (['array', 'object'].indexOf(type) > -1) { - try { - value = JSON.parse(value); - } catch (err) { - // Nothing to do here, just fall through - } - } - - switch (type) { - case 'array': - if (_.isString(value)) { - if (collectionFormats.indexOf(options.collectionFormat) === -1) { - throw new TypeError('Invalid \'collectionFormat\' value: ' + options.collectionFormat); - } - - switch (options.collectionFormat) { - case 'csv': - case undefined: - value = value.split(','); - break; - case 'multi': - value = [value]; - break; - case 'pipes': - value = value.split('|'); - break; - case 'ssv': - value = value.split(' '); - break; - case 'tsv': - value = value.split('\t'); - break; - - // no default - } - } - - if (_.isArray(value)) { - value = _.map(value, function (item, index) { - return realConvertValue(_.isArray(schema.items) ? schema.items[index] : schema.items, options, item); - }); - } - - break; - case 'boolean': - if (!_.isBoolean(value)) { - if (value === 'true') { - value = true; - } else if (value === 'false') { - value = false; - } else { - err = new TypeError('Not a valid boolean: ' + value); - } - } - - break; - case 'integer': - if (!_.isNumber(value)) { - if (_.isString(value) && _.trim(value).length === 0) { - value = NaN; - } - - value = Number(value); - - if (_.isNaN(value)) { - err = new TypeError('Not a valid integer: ' + originalValue); - } - } - - break; - case 'number': - if (!_.isNumber(value)) { - if (_.isString(value) && _.trim(value).length === 0) { - value = NaN; - } - - value = Number(value); - - if (_.isNaN(value)) { - err = new TypeError('Not a valid number: ' + originalValue); - } - } - break; - case 'string': - if (['date', 'date-time'].indexOf(schema.format) > -1) { - if (_.isString(value)) { - value = new Date(value); - } - - if (!_.isDate(value) || value.toString() === 'Invalid Date') { - err = new TypeError('Not a valid ' + schema.format + ' string: ' + originalValue); - - err.code = 'INVALID_FORMAT'; - } - } else if (!_.isString(value)) { - err = new TypeError('Not a valid string: ' + value); - } - - break; - - // no default - } - - if (!_.isUndefined(err)) { - // Convert the error to be more like a JSON Schema validation error - if (_.isUndefined(err.code)) { - err.code = 'INVALID_TYPE'; - err.message = 'Expected type ' + type + ' but found type ' + pType; - } else { - err.message = 'Object didn\'t pass validation for format ' + schema.format + ': ' + pValue; - } - - // Format and type errors resemble JSON Schema validation errors - err.failedValidation = true; - err.path = []; - - throw err; - } - - return value; -} - -function removeCirculars (doc) { - function walk (ancestors, node, path) { - function walkItem (item, segment) { - path.push(segment); - walk(ancestors, item, path); - path.pop(); - } - - // We do not process circular objects again - if (ancestors.indexOf(node) === -1) { - ancestors.push(node); - - if (_.isArray(node) || _.isPlainObject(node)) { - _.each(node, function (member, indexOrKey) { - walkItem(member, indexOrKey.toString()); - }); - } - } else { - _.set(doc, path, {}); - } - - ancestors.pop(); - } - - walk([], doc, []); -} - -module.exports.collectionFormats = collectionFormats; - -// The URL to the Swagger 2.0 documentation -module.exports.documentation = docsUrl; - -module.exports.parameterLocations = parameterLocations; - -// The array of supported HTTP methods for each path -module.exports.supportedHttpMethods = vHelpers.supportedHttpMethods; - -module.exports.types = types; - -// The version for this Swagger version -module.exports.version = version; - -/** - * Returns whether or not the provided definition can be processed. - * - * @param {object} definition - The potential Swagger definition to test - * - * @returns {boolean} Returns true only if the definition represents a Swagger 2.0 definition - */ -module.exports.canProcess = function (definition) { - return definition.swagger === version; -}; - -/** - * Converts a raw JavaScript value to a JSON Schema value based on its schema. - * - * @param {object} schema - The schema for the value - * @param {object} options - The conversion options - * @param {string} [options.collectionFormat] - The collection format - * @param {string} [options.encoding] - The encoding if the raw value is a `Buffer` - * @param {*} value - The value to convert - * - * @returns {*} The converted value - */ -module.exports.convertValue = function (schema, options, value) { - return realConvertValue(schema, options, value); -}; - -/** - * Creates a SwaggerApi object from the provided Swagger definition. - * - * @param {object} definition - The Swagger definition - * @param {object} options - The options passed to swaggerApi.create - * - * @returns {Promise} A promise that resolves the SwaggerApi after processing - */ -module.exports.createSwaggerApi = function (definition, options) { - var cOptions = _.cloneDeep(options); - var jsonRefsOptions = cOptions.jsonRefs || {}; - - // Include invalid reference information - jsonRefsOptions.includeInvalid = true; - - // Update the json-refs options to use the definition location - if (_.isString(cOptions.definition)) { - jsonRefsOptions.relativeBase = dirname(cOptions.definition); - } - - // Update the json-refs options to process YAML - if (_.isUndefined(jsonRefsOptions.loaderOptions)) { - jsonRefsOptions.loaderOptions = {}; - } - - if (_.isUndefined(jsonRefsOptions.loaderOptions.processContent)) { - jsonRefsOptions.loaderOptions.processContent = function (res, cb) { - cb(undefined, YAML.safeLoad(res.text)); - }; - } - - return JsonRefs.resolveRefs(definition, jsonRefsOptions) - .then(function (results) { - // We need to remove all circular objects as z-schema does not work with them: - // https://github.com/zaggino/z-schema/issues/137 - removeCirculars(results.resolved); - - return new SwaggerApi(module.exports, definition, results.resolved, results.refs, options); - }); -}; - -/** - * Returns a z-schema validator. - * - * @returns {Object} The z-schema validator to use - */ -module.exports.getJSONSchemaValidator = function () { - return jsonSchemaValidator; -} - -/** - * Creates an array of Operation objects for each operation defined in path definition. - * - * @param {Path} pathObject - The Path object - * - * @returns {Operation[]} The Operation object array - */ -module.exports.getOperations = function (pathObject) { - var operations = []; - var pPath = JsonRefs.pathFromPtr(pathObject.ptr); - var pParams = _.reduce(pathObject.definition.parameters, function (parameters, paramDef, index) { - parameters[paramDef.name + ':' + paramDef.in] = { - path: pPath.concat(['parameters', index.toString()]), - definition: paramDef - }; - - return parameters; - }, {}); - - _.forEach(pathObject.definition, function (operation, method) { - // Do not process non-operations - if (_.indexOf(vHelpers.supportedHttpMethods, method) === -1) { - return; - } - - var cOperation = _.cloneDeep(operation); // Clone so we do not alter the input - var oParams = {}; // Used to keep track of unique parameters - var oPath = pPath.concat(method); - - // Add path parameters - _.forEach(pParams, function (pParam, key) { - oParams[key] = pParam; - }); - - // Add operation parameters (Overrides path-level parameters of same name+in combination) - _.forEach(operation.parameters, function (paramDef, index) { - oParams[paramDef.name + ':' + paramDef.in] = { - path: oPath.concat(['parameters', index.toString()]), - definition: paramDef - }; - }); - - // Attach our computed parameters/security to the operation - cOperation.parameters = _.map(_.values(oParams), function (parameter) { - // Used later by getOperationParameters to circumvent the chicken/egg situation (Removed there as well) - parameter.definition.$$$ptr$$$ = JsonRefs.pathToPtr(parameter.path); - - return parameter.definition; - }); - - - if (_.isUndefined(cOperation.security)) { - cOperation.security = pathObject.api.resolved.security; - } - - operations.push(new Operation(pathObject.api, - pathObject, - method, - JsonRefs.pathToPtr(oPath), - cOperation, - cOperation.consumes || pathObject.api.resolved.consumes || [], - cOperation.produces || pathObject.api.resolved.produces || [])); - }); - - return operations; -}; - -/** - * Returns an array of Parameter objects for the provided Operation. - * - * @param {Operation} operation - The Operation object - * - * @returns {Parameter[]} The Parameter object array - */ -module.exports.getOperationParameters = function (operation) { - var pParams = _.reduce(operation.pathObject.getParameters(), function (params, param) { - params[param.ptr] = param; - - return params; - }, {}); - - return _.map(operation.parameters, function (paramDef) { - var ptr = paramDef.$$$ptr$$$; - var pParam = pParams[ptr]; - - // Remove so we do not have these properties littered throughout the document - delete paramDef.$$$ptr$$$; - - if (_.isUndefined(pParam)) { - return new Parameter(operation, ptr, paramDef, vHelpers.getParameterSchema(paramDef)); - } else { - return pParam; - } - }); -}; - -/** - * Returns an array of Response objects for the provided Operation. - * - * @param {Operation} operation - The Operation object - * - * @returns {Response[]} The Response object array - */ -module.exports.getOperationResponses = function (operation) { - return _.map(operation.definition.responses, function (responseDef, code) { - return new Response(operation, - JsonRefs.pathToPtr(JsonRefs.pathFromPtr(operation.ptr).concat(['responses', code])), - responseDef, - code); - }); -}; - -/** - * Returns an array of path-level Parameter objects for the provided Path. - * - * @param {Path} path - The Path object - * - * @returns {Parameter[]} The Parameter object array - */ -module.exports.getPathParameters = function (path) { - return _.map(path.definition.parameters, function (paramDef, index) { - return new Parameter(path, - JsonRefs.pathToPtr(JsonRefs.pathFromPtr(path.ptr).concat(index.toString())), - paramDef, - vHelpers.getParameterSchema(paramDef)); - }); -}; - -/** - * Creates an array of Path objects for each path defined in the Swagger document. - * - * @param {SwaggerApi} api - The Swagger API object - * - * @returns {Path[]} The Operation object array - */ -module.exports.getPaths = function (api) { - var basePathPrefix = api.resolved.basePath || '/'; - - // Remove trailing slash from the basePathPrefix so we do not end up with double slashes - if (basePathPrefix.charAt(basePathPrefix.length - 1) === '/') { - basePathPrefix = basePathPrefix.substring(0, basePathPrefix.length - 1); - } - - return _.map(api.resolved.paths, function (pathDef, path) { - return new Path(api, - path, - JsonRefs.pathToPtr(['paths', path]), - pathDef, - pathToRegexp(basePathPrefix + path.replace(/\{/g, ':').replace(/\}/g, ''))); - - }); -}; - -/** - * Creates a sample value for the provided JSON Schema. - * - * @param {*} schema - The JSON Schema - * - * @returns {*} The sample value - */ -module.exports.getSample = function (schema) { - return mocker(schema); -}; - -/** - * Returns an array of functions used to validate Swagger 2.0 documents semantically. - * - * @returns {function[]} The validators to use - */ -module.exports.getSemanticValidators = function () { - return validators.semanticValidators; -}; - -/** - * Returns a function used to validate Swagger 2.0 documents against its JSON Schema. - * - * @returns {function} The validator to use - */ -module.exports.getStructuralValidator = function () { - return validators.jsonSchemaValidator; -}; diff --git a/package.json b/package.json index 475358e..54a22fe 100644 --- a/package.json +++ b/package.json @@ -31,10 +31,11 @@ ], "devDependencies": { "brfs": "^1.4.2", - "browserify": "^12.0.1", + "browserify": "^13.0.0", "connect": "^3.4.0", "del": "^2.2.0", "exposify": "^0.5.0", + "glob": "^6.0.4", "gulp": "^3.9.0", "gulp-concat": "^2.6.0", "gulp-eslint": "^1.1.1", @@ -59,14 +60,12 @@ }, "dependencies": { "debug": "^2.2.0", - "glob": "^6.0.3", "js-base64": "^2.1.9", - "js-yaml": "^3.4.6", - "json-refs": "^2.0.2", + "js-yaml": "^3.5.1", + "json-refs": "^2.0.3", "json-schema-faker": "^0.2.6", "lodash": "^3.10.1", "native-promise-only": "^0.8.1", - "path-loader": "^1.0.1", "path-to-regexp": "^1.2.1", "z-schema": "^3.16.1" } diff --git a/test/helpers.js b/test/helpers.js index 083b444..eee3b1c 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -1,3 +1,5 @@ +/* eslint-env browser, mocha */ + /* * The MIT License (MIT) * @@ -25,10 +27,17 @@ 'use strict'; var assert = require('assert'); +var fs = require('fs'); +var helpers = require('../lib/helpers'); var path = require('path'); +var Sway = typeof window === 'undefined' ? require('..') : window.Sway; +var YAML = require('js-yaml'); var documentBase = path.join(__dirname, 'browser', 'documents'); var relativeBase = typeof window === 'undefined' ? documentBase : 'base/documents'; +var swaggerDoc = YAML.safeLoad(fs.readFileSync(path.join(__dirname, './browser/documents/2.0/swagger.yaml'), 'utf8')); +var swaggerDocValidator = helpers.getJSONSchemaValidator(); +var swaggerApi function fail (msg) { assert.fail(msg); @@ -38,7 +47,26 @@ module.exports.documentBase = documentBase; module.exports.fail = fail; -module.exports.relativeBase = relativeBase; +module.exports.getSwaggerApi = function (callback) { + if (swaggerApi) { + callback(swaggerApi); + } else { + Sway.create({ + definition: swaggerDoc + }) + .then(function (obj) { + swaggerApi = obj; + + callback(swaggerApi); + }, function (err) { + callback(err); + }); + } +}; + +module.exports.getSway = function () { + return Sway; +}; module.exports.shouldHadFailed = function () { fail('The code above should had thrown an error'); @@ -49,3 +77,11 @@ module.exports.shouldNotHadFailed = function (err) { fail('The code above should not had thrown an error'); }; + +module.exports.swaggerDoc = swaggerDoc; + +module.exports.swaggerDocPath = path.join(relativeBase, './2.0/swagger.yaml'); + +module.exports.swaggerDocRelativeRefsPath = path.join(relativeBase, './2.0/swagger-relative-refs.yaml'); + +module.exports.swaggerDocValidator = swaggerDocValidator; diff --git a/test/versions/2.0/test-api.js b/test/test-api.js similarity index 92% rename from test/versions/2.0/test-api.js rename to test/test-api.js index ade8e90..63aa635 100644 --- a/test/versions/2.0/test-api.js +++ b/test/test-api.js @@ -28,32 +28,43 @@ var _ = require('lodash'); var assert = require('assert'); -var helpers = require('./helpers'); // Helpers for this suite of tests -var tHelpers = require('../../helpers'); // Helpers for tests +var helpers = require('./helpers'); +var sHelpers = require('../lib/helpers'); +var Sway = helpers.getSway(); -describe('SwaggerApi (Swagger 2.0)', function () { - var sway; +function getOperationCount (pathDef) { + var count = 0; + + _.each(pathDef, function (operation, method) { + if (sHelpers.supportedHttpMethods.indexOf(method) > -1) { + count += 1; + } + }); + + return count; +} + +describe('SwaggerApi', function () { + var swaggerApi; before(function (done) { - helpers.getSway(function (api) { - sway = api; + helpers.getSwaggerApi(function (api) { + swaggerApi = api; done(); }); }); beforeEach(function () { - sway.customValidators = []; - sway.errors = []; - sway.warnings = []; + swaggerApi.customValidators = []; }); describe('#getOperations', function () { - it('should return return all operations', function () { - var operations = sway.getOperations(); + it('should return all operations', function () { + var operations = swaggerApi.getOperations(); - assert.equal(operations.length, _.reduce(sway.definition.paths, function (count, path) { - count += helpers.getOperationCount(path); + assert.equal(operations.length, _.reduce(swaggerApi.definition.paths, function (count, path) { + count += getOperationCount(path); return count; }, 0)); @@ -62,53 +73,53 @@ describe('SwaggerApi (Swagger 2.0)', function () { }); it('should return return all operations for the given path', function () { - var operations = sway.getOperations('/pet/{petId}'); + var operations = swaggerApi.getOperations('/pet/{petId}'); - assert.ok(sway.getOperations().length > operations.length); - assert.equal(operations.length, helpers.getOperationCount(sway.definition.paths['/pet/{petId}'])); + assert.ok(swaggerApi.getOperations().length > operations.length); + assert.equal(operations.length, getOperationCount(swaggerApi.definition.paths['/pet/{petId}'])); }); it('should return return no operations for a missing path', function () { - assert.equal(sway.getOperations('/some/fake/path').length, 0); + assert.equal(swaggerApi.getOperations('/some/fake/path').length, 0); }); }); describe('#getOperation', function () { describe('path + method', function () { it('should return the expected operation', function () { - var operation = sway.getOperation('/pet/{petId}', 'get'); + var operation = swaggerApi.getOperation('/pet/{petId}', 'get'); assert.ok(!_.isUndefined(operation)); }); it('should return no operation for missing path', function () { - assert.ok(_.isUndefined(sway.getOperation('/petz/{petId}', 'get'))); + assert.ok(_.isUndefined(swaggerApi.getOperation('/petz/{petId}', 'get'))); }); it('should return no operation for missing method', function () { - assert.ok(_.isUndefined(sway.getOperation('/pet/{petId}', 'head'))); + assert.ok(_.isUndefined(swaggerApi.getOperation('/pet/{petId}', 'head'))); }); }); describe('http.ClientRequest (or similar)', function () { it('should return the expected operation', function () { - assert.ok(!_.isUndefined(sway.getOperation({ + assert.ok(!_.isUndefined(swaggerApi.getOperation({ method: 'GET', - url: sway.basePath + '/pet/1' + url: swaggerApi.basePath + '/pet/1' }))); }); it('should return no operation for missing path', function () { - assert.ok(_.isUndefined(sway.getOperation({ + assert.ok(_.isUndefined(swaggerApi.getOperation({ method: 'GET', - url: sway.basePath + '/petz/1' + url: swaggerApi.basePath + '/petz/1' }))); }); it('should return no operation for missing method', function () { - assert.ok(_.isUndefined(sway.getOperation({ + assert.ok(_.isUndefined(swaggerApi.getOperation({ method: 'HEAD', - url: sway.basePath + '/pet/1' + url: swaggerApi.basePath + '/pet/1' }))); }); }); @@ -116,42 +127,42 @@ describe('SwaggerApi (Swagger 2.0)', function () { describe('#getOperationsByTag', function () { it('should return no operation for incorrect tag', function () { - var operations = sway.getOperationsByTag('incorrect tag'); + var operations = swaggerApi.getOperationsByTag('incorrect tag'); assert.equal(operations.length, 0); }); it('should return all operations for the given tag', function () { - var operations = sway.getOperationsByTag('store'); + var operations = swaggerApi.getOperationsByTag('store'); assert.equal(operations.length, - helpers.getOperationCount(sway.definition.paths['/store/inventory']) + - helpers.getOperationCount(sway.definition.paths['/store/order']) + - helpers.getOperationCount(sway.definition.paths['/store/order/{orderId}'])); + getOperationCount(swaggerApi.definition.paths['/store/inventory']) + + getOperationCount(swaggerApi.definition.paths['/store/order']) + + getOperationCount(swaggerApi.definition.paths['/store/order/{orderId}'])); }); }); describe('#getPath', function () { describe('path', function () { it('should return the expected path object', function () { - assert.ok(!_.isUndefined(sway.getPath('/pet/{petId}'))); + assert.ok(!_.isUndefined(swaggerApi.getPath('/pet/{petId}'))); }); it('should return no path object', function () { - assert.ok(_.isUndefined(sway.getPath('/petz/{petId}'))); + assert.ok(_.isUndefined(swaggerApi.getPath('/petz/{petId}'))); }); }); describe('http.ClientRequest (or similar)', function () { it('should return the expected path object', function () { - assert.ok(!_.isUndefined(sway.getPath({ - url: sway.basePath + '/pet/1' + assert.ok(!_.isUndefined(swaggerApi.getPath({ + url: swaggerApi.basePath + '/pet/1' }))); }); it('should return no path object', function () { - assert.ok(_.isUndefined(sway.getPath({ - url: sway.basePath + '/petz/1' + assert.ok(_.isUndefined(swaggerApi.getPath({ + url: swaggerApi.basePath + '/petz/1' }))); }); }); @@ -159,7 +170,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { describe('#getPaths', function () { it('should return the expected path objects', function () { - assert.equal(sway.getPaths().length, Object.keys(sway.resolved.paths).length); + assert.equal(swaggerApi.getPaths().length, Object.keys(swaggerApi.definitionAllResolved.paths).length); }); }); @@ -172,9 +183,9 @@ describe('SwaggerApi (Swagger 2.0)', function () { _.forEach(scenarios, function (scenario) { try { - sway.registerValidator.apply(sway, scenario[0]); + swaggerApi.registerValidator.apply(swaggerApi, scenario[0]); - tHelpers.shouldHadFailed(); + helpers.shouldHadFailed(); } catch (err) { assert.equal(scenario[1], err.message); } @@ -182,7 +193,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { }); it('should add validator to list of validators', function () { - var results = sway.validate(); + var results = swaggerApi.validate(); var expectedErrors = [ 'error' ]; @@ -193,14 +204,14 @@ describe('SwaggerApi (Swagger 2.0)', function () { assert.deepEqual(results.errors, []); assert.deepEqual(results.warnings, []); - sway.registerValidator(function () { + swaggerApi.registerValidator(function () { return { errors: expectedErrors, warnings: expectedWarnings }; }); - results = sway.validate(); + results = swaggerApi.validate(); assert.deepEqual(results.errors, expectedErrors); assert.deepEqual(results.warnings, expectedWarnings); @@ -209,7 +220,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { describe('#validate', function () { it('should return zero errors/warnings for a valid document', function () { - var results = sway.validate(); + var results = swaggerApi.validate(); assert.deepEqual(results.errors, []); assert.deepEqual(results.warnings, []); @@ -221,7 +232,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { delete cSwagger.paths; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -241,7 +252,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { describe('array type missing required items property', function () { function validateBrokenArray (cSwagger, path, done) { - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -510,7 +521,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { additionalProperties: errorSchema }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -759,7 +770,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { ] }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -809,7 +820,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { ] }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -855,7 +866,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { ] }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -884,7 +895,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -910,7 +921,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { default: 123 }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -934,7 +945,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.definitions.Pet.properties.name.default = 123; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -963,7 +974,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet/findByStatus'].get.parameters.push(cParam); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -990,7 +1001,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet/{petId}'].parameters.push(cParam); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1016,7 +1027,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { $ref: '/file[/].html' }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1039,7 +1050,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/invalid/{}'] = {}; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1070,7 +1081,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { } ]; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1093,7 +1104,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet/{petId}'].parameters = []; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1126,7 +1137,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet/{notPetId}'] = {}; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1150,7 +1161,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet'].put.operationId = operationId; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1176,7 +1187,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet'].post.parameters.push(dBodyParam); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1205,7 +1216,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { type: 'string' }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1239,7 +1250,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { delete cSwagger.definitions.Pet.properties; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1262,7 +1273,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { delete cSwagger.definitions.Pet.properties.name; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1287,7 +1298,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.definitions.Missing = {}; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1316,7 +1327,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1343,7 +1354,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1370,7 +1381,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { in: 'header' }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1393,7 +1404,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.securityDefinitions.petstore_auth.scopes.missing = 'I am missing'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1419,7 +1430,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet'].post.parameters[0].schema.$ref = '#/definitions/Missing'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1443,7 +1454,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet'].post.parameters[0].schema.$ref = 'fake.json'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1472,7 +1483,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { missing: [] }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1497,7 +1508,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { missing: [] }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1522,7 +1533,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.security[0].petstore_auth.push('missing'); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1549,7 +1560,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { ] }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1584,7 +1595,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet'].post.parameters[0] = {}; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1600,7 +1611,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { broken: {} }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1614,7 +1625,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.paths['/pet'].post.responses.default = {}; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1631,7 +1642,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { schema: [] }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1648,7 +1659,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { additionalProperties: [] }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1670,7 +1681,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1684,7 +1695,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { cSwagger.securityDefinitions.broken = {}; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1706,7 +1717,7 @@ describe('SwaggerApi (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { diff --git a/test/versions/2.0/test-format-generators.js b/test/test-format-generators.js similarity index 94% rename from test/versions/2.0/test-format-generators.js rename to test/test-format-generators.js index 5283ecf..50a000d 100644 --- a/test/versions/2.0/test-format-generators.js +++ b/test/test-format-generators.js @@ -29,8 +29,9 @@ var _ = require('lodash'); var assert = require('assert'); var helpers = require('./helpers'); +var Sway = helpers.getSway(); -describe('format generators (Swagger 2.0)', function () { +describe('format generators', function () { it('byte', function (done) { var cSwaggerDoc = _.cloneDeep(helpers.swaggerDoc); @@ -41,7 +42,7 @@ describe('format generators (Swagger 2.0)', function () { format: 'byte' }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -60,7 +61,7 @@ describe('format generators (Swagger 2.0)', function () { format: 'password' }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { diff --git a/test/versions/2.0/test-format-validators.js b/test/test-format-validators.js similarity index 95% rename from test/versions/2.0/test-format-validators.js rename to test/test-format-validators.js index b8ac2ba..70f7a7d 100644 --- a/test/versions/2.0/test-format-validators.js +++ b/test/test-format-validators.js @@ -29,8 +29,9 @@ var _ = require('lodash'); var assert = require('assert'); var helpers = require('./helpers'); +var Sway = helpers.getSway(); -describe('format validators (Swagger 2.0)', function () { +describe('format validators', function () { it('always truthy', function (done) { var cSwaggerDoc = _.cloneDeep(helpers.swaggerDoc); @@ -66,7 +67,7 @@ describe('format validators (Swagger 2.0)', function () { default: 'somepassword' }); - helpers.swaggerApi.create({definition: cSwaggerDoc}) + Sway.create({definition: cSwaggerDoc}) .then(function (api) { assert.ok(api.validate()); }) @@ -88,7 +89,7 @@ describe('format validators (Swagger 2.0)', function () { }); // Test the format validator using parameter validation - helpers.swaggerApi.create({definition: cSwaggerDoc}) + Sway.create({definition: cSwaggerDoc}) .then(function (api) { badParamValue = api.getOperation('/pet/findByStatus', 'get').getParameter('int32').getValue({ query: { @@ -142,7 +143,7 @@ describe('format validators (Swagger 2.0)', function () { }); // Test the format validator using parameter validation - helpers.swaggerApi.create({definition: cSwaggerDoc}) + Sway.create({definition: cSwaggerDoc}) .then(function (api) { badParamValue = api.getOperation('/pet/findByStatus', 'get').getParameter('int64').getValue({ query: { diff --git a/test/versions/2.0/test-issues.js b/test/test-issues.js similarity index 84% rename from test/versions/2.0/test-issues.js rename to test/test-issues.js index d28cf58..5028d80 100644 --- a/test/versions/2.0/test-issues.js +++ b/test/test-issues.js @@ -28,15 +28,15 @@ var _ = require('lodash'); var assert = require('assert'); -var helpers = require('./helpers'); // Helpers for this suite of tests -var tHelpers = require('../../helpers'); // Helpers for tests +var helpers = require('./helpers'); +var Sway = helpers.getSway(); -describe('issues (Swagger 2.0)', function () { - var sway; +describe('issues', function () { + var swaggerApi; before(function (done) { - helpers.getSway(function (api) { - sway = api; + helpers.getSwaggerApi(function (api) { + swaggerApi = api; done(); }); @@ -47,16 +47,16 @@ describe('issues (Swagger 2.0)', function () { cSwagger.paths['/pet/{petId}'].get = null; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function () { - tHelpers.shouldHadFailed(); + helpers.shouldHadFailed(); }) .catch(function (err) { var errorMessages = [ - 'Cannot read property \'parameters\' of null', // Node.js - '\'null\' is not an object (evaluating \'operation.parameters\')' // PhantomJS (browser) + 'Cannot read property \'consumes\' of null', // Node.js + '\'null\' is not an object (evaluating \'definition.consumes\')' // PhantomJS (browser) ]; assert.ok(errorMessages.indexOf(err.message) > -1); @@ -65,21 +65,18 @@ describe('issues (Swagger 2.0)', function () { }); it('should support relative references (and to YAML files) (Issue 17)', function (done) { - helpers.swaggerApi.create({ - definition: './2.0/swagger-relative-refs.yaml', - jsonRefs: { - relativeBase: tHelpers.relativeBase - } + Sway.create({ + definition: helpers.swaggerDocRelativeRefsPath }) .then(function () { - assert.ok(_.isUndefined(sway.resolved.info.$ref)); - assert.ok(Object.keys(sway.resolved.definitions).length > 1); - assert.ok(Object.keys(sway.resolved.paths).length > 1); - assert.equal(sway.resolved.info.title, 'Swagger Petstore'); - assert.ok(_.isPlainObject(sway.resolved.definitions.Pet)); - assert.ok(_.isPlainObject(sway.resolved.paths['/pet/{petId}'].get)); + assert.ok(_.isUndefined(swaggerApi.definitionAllResolved.info.$ref)); + assert.ok(Object.keys(swaggerApi.definitionAllResolved.definitions).length > 1); + assert.ok(Object.keys(swaggerApi.definitionAllResolved.paths).length > 1); + assert.equal(swaggerApi.definitionAllResolved.info.title, 'Swagger Petstore'); + assert.ok(_.isPlainObject(swaggerApi.definitionAllResolved.definitions.Pet)); + assert.ok(_.isPlainObject(swaggerApi.definitionAllResolved.paths['/pet/{petId}'].get)); - _.each(sway.references, function (entry) { + _.each(swaggerApi.references, function (entry) { assert.ok(typeof entry.missing === 'undefined'); }); }) @@ -91,7 +88,7 @@ describe('issues (Swagger 2.0)', function () { cSwaggerDoc.definitions.Pet.properties.name.format = 'unknown'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -105,7 +102,7 @@ describe('issues (Swagger 2.0)', function () { cSwaggerDoc.definitions.Pet.properties.default = {type: 'string'}; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -120,9 +117,9 @@ describe('issues (Swagger 2.0)', function () { mockReq.url = '/pet/1'; try { - sway.getOperation('/pet/{petId}', 'get').getParameter('petId').getValue(mockReq); + swaggerApi.getOperation('/pet/{petId}', 'get').getParameter('petId').getValue(mockReq); } catch (err) { - tHelpers.shouldNotHadFailed(); + helpers.shouldNotHadFailed(); } }); @@ -131,7 +128,7 @@ describe('issues (Swagger 2.0)', function () { originalname: 'swagger.yaml', mimetype: 'application/x-yaml' }; - var paramValue = sway.getOperation('/pet/{petId}/uploadImage', 'post').getParameter('file').getValue({ + var paramValue = swaggerApi.getOperation('/pet/{petId}/uploadImage', 'post').getParameter('file').getValue({ url: '/pet/1/uploadImage', files: { file: mockFile @@ -176,7 +173,7 @@ describe('issues (Swagger 2.0)', function () { ] }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -197,7 +194,7 @@ describe('issues (Swagger 2.0)', function () { type: 'object' }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -246,7 +243,7 @@ describe('issues (Swagger 2.0)', function () { type: 'object' }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -308,7 +305,7 @@ describe('issues (Swagger 2.0)', function () { type: 'integer' }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { diff --git a/test/versions/2.0/test-operation.js b/test/test-operation.js similarity index 89% rename from test/versions/2.0/test-operation.js rename to test/test-operation.js index 4539e3a..abcb953 100644 --- a/test/versions/2.0/test-operation.js +++ b/test/test-operation.js @@ -28,14 +28,15 @@ var _ = require('lodash'); var assert = require('assert'); -var helpers = require('./helpers'); // Helpers for this suite of tests +var helpers = require('./helpers'); +var Sway = helpers.getSway(); -describe('Operation (Swagger 2.0)', function () { - var sway; +describe('Operation', function () { + var swaggerApi; before(function (done) { - helpers.getSway(function (api) { - sway = api; + helpers.getSwaggerApi(function (api) { + swaggerApi = api; done(); }); @@ -44,9 +45,9 @@ describe('Operation (Swagger 2.0)', function () { it('should handle composite parameters', function () { var method = 'post'; var path = '/pet/{petId}'; - var operation = sway.getOperation(path, method); - var pathDef = sway.resolved.paths[path]; - var operationDef = sway.resolved.paths[path][method]; + var operation = swaggerApi.getOperation(path, method); + var pathDef = swaggerApi.definitionAllResolved.paths[path]; + var operationDef = swaggerApi.definitionAllResolved.paths[path][method]; assert.equal(operation.pathObject.path, path); assert.equal(operation.method, method); @@ -79,8 +80,8 @@ describe('Operation (Swagger 2.0)', function () { it('should handle explicit parameters', function () { var method = 'post'; var path = '/pet/{petId}/uploadImage'; - var operation = sway.getOperation(path, method); - var pathDef = sway.resolved.paths[path]; + var operation = swaggerApi.getOperation(path, method); + var pathDef = swaggerApi.definitionAllResolved.paths[path]; assert.equal(operation.pathObject.path, path); assert.equal(operation.method, method); @@ -103,7 +104,7 @@ describe('Operation (Swagger 2.0)', function () { }); it('should handle composite security', function () { - var operation = sway.getOperation('/pet/{petId}', 'get'); + var operation = swaggerApi.getOperation('/pet/{petId}', 'get'); assert.deepEqual(operation.security, [ { @@ -114,12 +115,12 @@ describe('Operation (Swagger 2.0)', function () { } ]); assert.deepEqual(operation.securityDefinitions, { - 'petstore_auth': sway.resolved.securityDefinitions.petstore_auth + 'petstore_auth': swaggerApi.definitionAllResolved.securityDefinitions.petstore_auth }); }); it('should handle explicit parameters', function () { - assert.deepEqual(sway.getOperation('/user/{username}', 'get').security, [ + assert.deepEqual(swaggerApi.getOperation('/user/{username}', 'get').security, [ { 'api_key': [] } @@ -147,7 +148,7 @@ describe('Operation (Swagger 2.0)', function () { } it('should create proper regexp (with basePath)', function () { - validateRegExps(sway, sway.basePath); + validateRegExps(swaggerApi, swaggerApi.basePath); }); it('should create proper regexp (with basePath ending in slash)', function (done) { @@ -155,7 +156,7 @@ describe('Operation (Swagger 2.0)', function () { cSwagger.basePath = '/'; - helpers.swaggerApi.create({definition: cSwagger}) + Sway.create({definition: cSwagger}) .then(function (api) { validateRegExps(api, ''); }) @@ -167,7 +168,7 @@ describe('Operation (Swagger 2.0)', function () { delete cSwagger.basePath; - helpers.swaggerApi.create({definition: cSwagger}) + Sway.create({definition: cSwagger}) .then(function (api) { validateRegExps(api, ''); }) @@ -187,14 +188,14 @@ describe('Operation (Swagger 2.0)', function () { } ]; - helpers.swaggerApi.create({definition: cSwagger}) + Sway.create({definition: cSwagger}) .then(function (api) { var operation = api.getOperation('/pet/{petId}', 'get'); assert.ok(_.isUndefined(operation.getParameter())); assert.ok(_.isUndefined(operation.getParameter('missing'))); assert.ok(_.isUndefined(operation.getParameter('petId', 'header'))); - assert.deepEqual(operation.getParameter('petId').definition, + assert.deepEqual(operation.getParameter('petId', 'path').definition, cSwagger.paths['/pet/{petId}'].parameters[0]); assert.deepEqual(operation.getParameter('petId', 'query').definition, cSwagger.paths['/pet/{petId}'].get.parameters[0]); @@ -206,7 +207,7 @@ describe('Operation (Swagger 2.0)', function () { // More vigorous testing of the Parameter object itself and the parameter composition are done elsewhere describe('#getParameters', function () { it('should return the proper parameter objects', function () { - var operation = sway.getOperation('/pet/{petId}', 'post'); + var operation = swaggerApi.getOperation('/pet/{petId}', 'post'); assert.deepEqual(operation.getParameters(), operation.parameterObjects); }); @@ -226,7 +227,7 @@ describe('Operation (Swagger 2.0)', function () { var operation; before(function () { - operation = sway.getOperation('/pet', 'post'); + operation = swaggerApi.getOperation('/pet', 'post'); }); it('should return an error for an unsupported value', function () { @@ -286,7 +287,7 @@ describe('Operation (Swagger 2.0)', function () { delete cSwaggerDoc.paths['/pet'].post.consumes; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -319,7 +320,7 @@ describe('Operation (Swagger 2.0)', function () { cSwaggerDoc.paths['/pet'].post.consumes.push(mimeType); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -344,7 +345,7 @@ describe('Operation (Swagger 2.0)', function () { // ParameterValue's validation and which is heavily tested elsewhere. it('should return an error for invalid non-primitive parameters', function () { - var operation = sway.getOperation('/pet', 'post'); + var operation = swaggerApi.getOperation('/pet', 'post'); var results = operation.validateRequest({ url: '/v2/pet', headers: { @@ -379,7 +380,7 @@ describe('Operation (Swagger 2.0)', function () { }); it('should return an error for invalid primitive parameters', function () { - var operation = sway.getOperation('/pet/{petId}/uploadImage', 'post'); + var operation = swaggerApi.getOperation('/pet/{petId}/uploadImage', 'post'); var results = operation.validateRequest({ url: '/v2/pet/notANumber/uploadImage', headers: { @@ -409,7 +410,7 @@ describe('Operation (Swagger 2.0)', function () { }); it('should not return an error for valid parameters', function () { - var operation = sway.getOperation('/pet/{petId}', 'post'); + var operation = swaggerApi.getOperation('/pet/{petId}', 'post'); var results = operation.validateRequest({ url: '/v2/pet/1', headers: { @@ -432,7 +433,7 @@ describe('Operation (Swagger 2.0)', function () { // is in test-response.js. describe('should return an error for undefined response', function () { it('undefined value but no default', function () { - var results = sway.getOperation('/pet', 'post').validateResponse(); + var results = swaggerApi.getOperation('/pet', 'post').validateResponse(); assert.deepEqual(results.warnings, []); assert.deepEqual(results.errors, [ @@ -445,7 +446,7 @@ describe('Operation (Swagger 2.0)', function () { }); it('provided value', function () { - var results = sway.getOperation('/pet/{petId}', 'post').validateResponse({ + var results = swaggerApi.getOperation('/pet/{petId}', 'post').validateResponse({ statusCode: 201 }); @@ -461,7 +462,7 @@ describe('Operation (Swagger 2.0)', function () { }); it('should return the \'default\' response when validating an undefined response', function () { - var results = sway.getOperation('/user', 'post').validateResponse({ + var results = swaggerApi.getOperation('/user', 'post').validateResponse({ statusCode: 201 }); diff --git a/test/versions/2.0/test-parameter.js b/test/test-parameter.js similarity index 91% rename from test/versions/2.0/test-parameter.js rename to test/test-parameter.js index 256fca5..09b65f1 100644 --- a/test/versions/2.0/test-parameter.js +++ b/test/test-parameter.js @@ -29,15 +29,15 @@ var _ = require('lodash'); var assert = require('assert'); var helpers = require('./helpers'); // Helpers for this suite of tests -var sHelpers = require('../../../lib/helpers'); // Helpers from Sway -var tHelpers = require('../../helpers'); // Helpers for test +var sHelpers = require('../lib/helpers'); // Helpers from Sway +var Sway = helpers.getSway(); -describe('Parameter (Swagger 2.0)', function () { - var sway; +describe('Parameter', function () { + var swaggerApi; before(function (done) { - helpers.getSway(function (api) { - sway = api; + helpers.getSwaggerApi(function (api) { + swaggerApi = api; done(); }); @@ -45,9 +45,9 @@ describe('Parameter (Swagger 2.0)', function () { it('should have proper structure', function () { var path = '/pet/{petId}'; - var pathDef = sway.resolved.paths[path]; + var pathDef = swaggerApi.definitionAllResolved.paths[path]; - _.each(sway.getOperation(path, 'post').getParameters(), function (parameter, index) { + _.each(swaggerApi.getOperation(path, 'post').getParameters(), function (parameter, index) { var ptr = '#/paths/~1pet~1{petId}/'; var def; @@ -66,10 +66,10 @@ describe('Parameter (Swagger 2.0)', function () { describe('#getSchema', function () { it('should handle parameter with explicit schema definition (body parameter)', function () { - var schema = sway.getOperation('/pet', 'post').getParameter('body').getSchema(); + var schema = swaggerApi.getOperation('/pet', 'post').getParameter('body').getSchema(); // Make sure the generated JSON Schema is identical to its referenced schema - assert.deepEqual(schema, sway.resolved.definitions.Pet); + assert.deepEqual(schema, swaggerApi.definitionAllResolved.definitions.Pet); // Make sure the generated JSON Schema validates an invalid object properly try { @@ -99,12 +99,12 @@ describe('Parameter (Swagger 2.0)', function () { name: 'Test Pet' }); } catch (err) { - tHelpers.shouldNotHadFailed(err); + helpers.shouldNotHadFailed(err); } }); it('should handle parameter with schema-like definition (non-body parameter)', function () { - var schema = sway.getOperation('/pet/findByTags', 'get').getParameter('tags').getSchema(); + var schema = swaggerApi.getOperation('/pet/findByTags', 'get').getParameter('tags').getSchema(); // Make sure the generated JSON Schema is as expected assert.deepEqual(schema, { @@ -140,33 +140,33 @@ describe('Parameter (Swagger 2.0)', function () { 'tag3' ]); } catch (err) { - tHelpers.shouldNotHadFailed(err); + helpers.shouldNotHadFailed(err); } }); }); describe('#getSample', function () { it('should handle parameter with explicit schema definition (body parameter)', function () { - var parameter = sway.getOperation('/pet', 'post').getParameter('body'); + var parameter = swaggerApi.getOperation('/pet', 'post').getParameter('body'); try { sHelpers.validateAgainstSchema(helpers.swaggerDocValidator, parameter.getSchema(), parameter.getSample()); } catch (err) { - tHelpers.shouldNotHadFailed(err); + helpers.shouldNotHadFailed(err); } }); it('should handle parameter with schema-like definition (non-body parameter)', function () { - var parameter = sway.getOperation('/pet/findByTags', 'get').getParameter('tags'); + var parameter = swaggerApi.getOperation('/pet/findByTags', 'get').getParameter('tags'); try { sHelpers.validateAgainstSchema(helpers.swaggerDocValidator, parameter.getSchema(), parameter.getSample()); } catch (err) { - tHelpers.shouldNotHadFailed(err); + helpers.shouldNotHadFailed(err); } }); }); @@ -177,7 +177,7 @@ describe('Parameter (Swagger 2.0)', function () { var parameter; before(function () { - parameter = sway.getOperation('/pet', 'post').getParameter('body'); + parameter = swaggerApi.getOperation('/pet', 'post').getParameter('body'); }); it('missing value', function () { @@ -199,14 +199,14 @@ describe('Parameter (Swagger 2.0)', function () { var parameter; before(function () { - parameter = sway.getOperation('/pet/{petId}/uploadImage', 'post').getParameter('file'); + parameter = swaggerApi.getOperation('/pet/{petId}/uploadImage', 'post').getParameter('file'); }); it('missing req.files', function () { try { parameter.getValue({}); - tHelpers.shouldHadFailed(); + helpers.shouldHadFailed(); } catch (err) { assert.equal(err.message, 'req.files must be provided for \'formData\' parameters of type \'file\''); } @@ -231,14 +231,14 @@ describe('Parameter (Swagger 2.0)', function () { var parameter; before(function () { - parameter = sway.getOperation('/pet/{petId}', 'post').getParameter('name'); + parameter = swaggerApi.getOperation('/pet/{petId}', 'post').getParameter('name'); }); it('missing req.body', function () { try { parameter.getValue({}); - tHelpers.shouldHadFailed(); + helpers.shouldHadFailed(); } catch (err) { assert.equal(err.message, 'req.body must be provided for \'formData\' parameters'); } @@ -264,14 +264,14 @@ describe('Parameter (Swagger 2.0)', function () { var parameter; before(function () { - parameter = sway.getOperation('/pet/{petId}', 'delete').getParameter('api_key'); + parameter = swaggerApi.getOperation('/pet/{petId}', 'delete').getParameter('api_key'); }); it('missing req.headers', function () { try { parameter.getValue({}); - tHelpers.shouldHadFailed(); + helpers.shouldHadFailed(); } catch (err) { assert.equal(err.message, 'req.headers must be provided for \'header\' parameters'); } @@ -310,14 +310,14 @@ describe('Parameter (Swagger 2.0)', function () { var parameter; before(function () { - parameter = sway.getOperation('/pet/{petId}', 'post').getParameter('petId'); + parameter = swaggerApi.getOperation('/pet/{petId}', 'post').getParameter('petId'); }); it('missing req.url', function () { try { parameter.getValue({}); - tHelpers.shouldHadFailed(); + helpers.shouldHadFailed(); } catch (err) { assert.equal(err.message, 'req.url must be provided for \'path\' parameters'); } @@ -362,7 +362,7 @@ describe('Parameter (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -399,14 +399,14 @@ describe('Parameter (Swagger 2.0)', function () { var parameter; before(function () { - parameter = sway.getOperation('/pet/findByStatus', 'get').getParameter('status'); + parameter = swaggerApi.getOperation('/pet/findByStatus', 'get').getParameter('status'); }); it('missing req.query', function () { try { parameter.getValue({}); - tHelpers.shouldHadFailed(); + helpers.shouldHadFailed(); } catch (err) { assert.equal(err.message, 'req.query must be provided for \'query\' parameters'); } @@ -434,14 +434,14 @@ describe('Parameter (Swagger 2.0)', function () { cSwagger.paths['/pet/{petId}'].parameters[0].in = 'invalid'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { try { api.getOperation('/pet/{petId}', 'get').getParameter('petId').getValue({}); - tHelpers.shouldHadFailed(); + helpers.shouldHadFailed(); } catch (err) { assert.equal(err.message, 'Invalid \'in\' value: invalid'); } @@ -451,9 +451,9 @@ describe('Parameter (Swagger 2.0)', function () { it('missing request', function () { try { - sway.getOperation('/pet/{petId}', 'get').getParameter('petId').getValue(); + swaggerApi.getOperation('/pet/{petId}', 'get').getParameter('petId').getValue(); - tHelpers.shouldHadFailed(); + helpers.shouldHadFailed(); } catch (err) { assert.equal(err.message, 'req is required'); } @@ -465,7 +465,7 @@ describe('Parameter (Swagger 2.0)', function () { var parameter; before(function () { - parameter = sway.getOperation('/pet/{petId}', 'get').getParameter('petId'); + parameter = swaggerApi.getOperation('/pet/{petId}', 'get').getParameter('petId'); }); it('never processed', function () { @@ -501,7 +501,7 @@ describe('Parameter (Swagger 2.0)', function () { } ]; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -515,7 +515,7 @@ describe('Parameter (Swagger 2.0)', function () { it('provided (array items object)', function (done) { var cSwagger = _.cloneDeep(helpers.swaggerDoc); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -529,7 +529,7 @@ describe('Parameter (Swagger 2.0)', function () { it('provided (non-array)', function (done) { var cSwagger = _.cloneDeep(helpers.swaggerDoc); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -552,7 +552,7 @@ describe('Parameter (Swagger 2.0)', function () { } ]; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -568,7 +568,7 @@ describe('Parameter (Swagger 2.0)', function () { delete cSwagger.paths['/pet/findByStatus'].get.parameters[0].items.default; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -582,7 +582,7 @@ describe('Parameter (Swagger 2.0)', function () { it('missing (non-array)', function (done) { var cSwagger = _.cloneDeep(helpers.swaggerDoc); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -604,7 +604,7 @@ describe('Parameter (Swagger 2.0)', function () { required: false }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -639,7 +639,7 @@ describe('Parameter (Swagger 2.0)', function () { } ]; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -655,7 +655,7 @@ describe('Parameter (Swagger 2.0)', function () { }); it('items object', function () { - assert.deepEqual(sway.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ + assert.deepEqual(swaggerApi.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ query: { status: [ 'available', 'pending' @@ -665,7 +665,7 @@ describe('Parameter (Swagger 2.0)', function () { }); it('non-array JSON string request value', function () { - assert.deepEqual(sway.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ + assert.deepEqual(swaggerApi.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ query: { status: '["pending"]' } @@ -673,7 +673,7 @@ describe('Parameter (Swagger 2.0)', function () { }); it('non-array string request value', function () { - assert.deepEqual(sway.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ + assert.deepEqual(swaggerApi.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ query: { status: 'pending' } @@ -681,7 +681,7 @@ describe('Parameter (Swagger 2.0)', function () { }); it('array request value', function () { - assert.deepEqual(sway.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ + assert.deepEqual(swaggerApi.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ query: { status: ['available', 'pending'] } @@ -694,7 +694,7 @@ describe('Parameter (Swagger 2.0)', function () { delete cSwagger.paths['/pet/findByStatus'].get.parameters[0].collectionFormat; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -712,7 +712,7 @@ describe('Parameter (Swagger 2.0)', function () { cSwagger.paths['/pet/findByStatus'].get.parameters[0].collectionFormat = 'csv'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -729,7 +729,7 @@ describe('Parameter (Swagger 2.0)', function () { it('multiple values', function (done) { var cSwagger = _.cloneDeep(helpers.swaggerDoc); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -749,7 +749,7 @@ describe('Parameter (Swagger 2.0)', function () { it('single value', function (done) { var cSwagger = _.cloneDeep(helpers.swaggerDoc); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -768,7 +768,7 @@ describe('Parameter (Swagger 2.0)', function () { cSwagger.paths['/pet/findByStatus'].get.parameters[0].collectionFormat = 'pipes'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -786,7 +786,7 @@ describe('Parameter (Swagger 2.0)', function () { cSwagger.paths['/pet/findByStatus'].get.parameters[0].collectionFormat = 'ssv'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -804,7 +804,7 @@ describe('Parameter (Swagger 2.0)', function () { cSwagger.paths['/pet/findByStatus'].get.parameters[0].collectionFormat = 'tsv'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -822,7 +822,7 @@ describe('Parameter (Swagger 2.0)', function () { cSwagger.paths['/pet/findByStatus'].get.parameters[0].collectionFormat = 'invalid'; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -863,7 +863,7 @@ describe('Parameter (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -927,7 +927,7 @@ describe('Parameter (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -970,7 +970,7 @@ describe('Parameter (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -997,7 +997,7 @@ describe('Parameter (Swagger 2.0)', function () { var cParam; before(function () { - cParam = sway.getOperation('/pet', 'post').getParameter('body'); + cParam = swaggerApi.getOperation('/pet', 'post').getParameter('body'); }); it('object request value', function () { @@ -1084,7 +1084,7 @@ describe('Parameter (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1126,7 +1126,7 @@ describe('Parameter (Swagger 2.0)', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1150,7 +1150,7 @@ describe('Parameter (Swagger 2.0)', function () { var cParam; before(function () { - cParam = sway.getOperation('/pet/{petId}', 'post').getParameter('name'); + cParam = swaggerApi.getOperation('/pet/{petId}', 'post').getParameter('name'); }); it('string request value', function () { @@ -1187,7 +1187,7 @@ describe('Parameter (Swagger 2.0)', function () { format: 'date' }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1245,7 +1245,7 @@ describe('Parameter (Swagger 2.0)', function () { format: 'date-time' }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1296,7 +1296,7 @@ describe('Parameter (Swagger 2.0)', function () { type: 'invalid' }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1317,7 +1317,7 @@ describe('Parameter (Swagger 2.0)', function () { cSwagger.paths['/pet'].post.parameters[0].schema = {}; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }) .then(function (api) { @@ -1336,7 +1336,7 @@ describe('Parameter (Swagger 2.0)', function () { describe('validation', function () { it('missing required value (with default)', function () { - var paramValue = sway.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ + var paramValue = swaggerApi.getOperation('/pet/findByStatus', 'get').getParameter('status').getValue({ query: {} }); @@ -1346,7 +1346,7 @@ describe('Parameter (Swagger 2.0)', function () { }); it('missing required value (without default)', function () { - var paramValue = sway.getOperation('/pet/findByTags', 'get').getParameter('tags').getValue({ + var paramValue = swaggerApi.getOperation('/pet/findByTags', 'get').getParameter('tags').getValue({ query: {} }); var error = paramValue.error; @@ -1370,7 +1370,7 @@ describe('Parameter (Swagger 2.0)', function () { in: 'query' }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -1399,7 +1399,7 @@ describe('Parameter (Swagger 2.0)', function () { allowEmptyValue: true }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -1428,7 +1428,7 @@ describe('Parameter (Swagger 2.0)', function () { in: 'query' }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -1457,7 +1457,7 @@ describe('Parameter (Swagger 2.0)', function () { allowEmptyValue: true }); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -1481,7 +1481,7 @@ describe('Parameter (Swagger 2.0)', function () { name: 'Sparky', photoUrls: [] }; - var paramValue = sway.getOperation('/pet', 'post').getParameter('body').getValue({ + var paramValue = swaggerApi.getOperation('/pet', 'post').getParameter('body').getValue({ body: pet }); @@ -1491,7 +1491,7 @@ describe('Parameter (Swagger 2.0)', function () { }); it('provided value fails JSON Schema validation', function () { - var paramValue = sway.getOperation('/pet', 'post').getParameter('body').getValue({ + var paramValue = swaggerApi.getOperation('/pet', 'post').getParameter('body').getValue({ body: {} }); var error = paramValue.error; diff --git a/test/versions/2.0/test-path.js b/test/test-path.js similarity index 70% rename from test/versions/2.0/test-path.js rename to test/test-path.js index 175b5c1..f9fa11c 100644 --- a/test/versions/2.0/test-path.js +++ b/test/test-path.js @@ -28,15 +28,16 @@ var _ = require('lodash'); var assert = require('assert'); -var helpers = require('./helpers'); // Helpers for this suite of tests +var helpers = require('./helpers'); var JsonRefs = require('json-refs'); +var Sway = helpers.getSway(); -describe('Path (Swagger 2.0)', function () { - var sway; +describe('Path', function () { + var swaggerApi; before(function (done) { - helpers.getSway(function (api) { - sway = api; + helpers.getSwaggerApi(function (api) { + swaggerApi = api; done(); }); @@ -44,12 +45,12 @@ describe('Path (Swagger 2.0)', function () { it('should have proper structure', function () { var path = '/pet/{petId}'; - var pathObject = sway.getOperation(path, 'get').pathObject; + var pathObject = swaggerApi.getOperation(path, 'get').pathObject; - assert.deepEqual(pathObject.api, sway); + assert.deepEqual(pathObject.api, swaggerApi); assert.equal(pathObject.path, path); assert.equal(pathObject.ptr, JsonRefs.pathToPtr(['paths', path])); - assert.deepEqual(pathObject.definition, sway.resolved.paths[path]); + assert.deepEqual(pathObject.definition, swaggerApi.definitionAllResolved.paths[path]); // Make sure they are of the proper type assert.ok(pathObject.regexp instanceof RegExp); @@ -59,23 +60,23 @@ describe('Path (Swagger 2.0)', function () { assert.equal('petId', pathObject.regexp.keys[0].name); // Make sure they match the expected URLs - assert.ok(_.isArray(pathObject.regexp.exec(sway.resolved.basePath + '/pet/1'))); - assert.ok(!_.isArray(pathObject.regexp.exec(sway.resolved.basePath + '/pets/1'))); + assert.ok(_.isArray(pathObject.regexp.exec(swaggerApi.definitionAllResolved.basePath + '/pet/1'))); + assert.ok(!_.isArray(pathObject.regexp.exec(swaggerApi.definitionAllResolved.basePath + '/pets/1'))); }); describe('#getOperation', function () { it('should return the expected operation', function () { - assert.ok(!_.isUndefined(sway.getPath('/pet/{petId}').getOperation('get'))); + assert.ok(!_.isUndefined(swaggerApi.getPath('/pet/{petId}').getOperation('get'))); }); it('should return no operation for the missing method', function () { - assert.ok(_.isUndefined(sway.getPath('/pet/{petId}').getOperation('head'))); + assert.ok(_.isUndefined(swaggerApi.getPath('/pet/{petId}').getOperation('head'))); }); }); describe('#getOperations', function () { it('should return the expected operations', function () { - assert.equal(sway.getPath('/pet/{petId}').getOperations().length, 3); + assert.equal(swaggerApi.getPath('/pet/{petId}').getOperations().length, 3); }); it('should return no operations', function (done) { @@ -84,7 +85,7 @@ describe('Path (Swagger 2.0)', function () { cSwagger.paths[path] = {}; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwagger }).then(function (api) { assert.equal(api.getPath(path).getOperations().length, 0); @@ -94,23 +95,23 @@ describe('Path (Swagger 2.0)', function () { describe('#getOperationsByTag', function () { it('should return the expected operations', function () { - assert.equal(sway.getPath('/pet/{petId}').getOperationsByTag('pet').length, 3); + assert.equal(swaggerApi.getPath('/pet/{petId}').getOperationsByTag('pet').length, 3); }); it('should return no operations', function () { - assert.equal(sway.getPath('/pet/{petId}').getOperationsByTag('petz').length, 0); + assert.equal(swaggerApi.getPath('/pet/{petId}').getOperationsByTag('petz').length, 0); }); }); describe('#getParameters', function () { it('should return the expected parameters', function () { - var parameters = sway.getPath('/pet/{petId}').getParameters(); + var parameters = swaggerApi.getPath('/pet/{petId}').getParameters(); assert.equal(parameters.length, 1); }); it('should return no parameters', function () { - assert.equal(sway.getPath('/pet').getParameters().length, 0); + assert.equal(swaggerApi.getPath('/pet').getParameters().length, 0); }); }); }); diff --git a/test/versions/2.0/test-response.js b/test/test-response.js similarity index 91% rename from test/versions/2.0/test-response.js rename to test/test-response.js index 1f1155e..9f540a9 100644 --- a/test/versions/2.0/test-response.js +++ b/test/test-response.js @@ -28,17 +28,17 @@ var _ = require('lodash'); var assert = require('assert'); -var helpers = require('./helpers'); // Helpers for this suite of tests -var sHelpers = require('../../../lib/helpers'); // Helpers from Sway -var tHelpers = require('../../helpers'); // Helpers for tests +var helpers = require('./helpers'); +var sHelpers = require('../lib/helpers'); +var Sway = helpers.getSway(); var YAML = require('js-yaml'); -describe('Response (Swagger 2.0', function () { - var sway; +describe('Response', function () { + var swaggerApi; before(function (done) { - helpers.getSway(function (api) { - sway = api; + helpers.getSwaggerApi(function (api) { + swaggerApi = api; done(); }); @@ -74,7 +74,7 @@ describe('Response (Swagger 2.0', function () { }; cSwaggerDoc.paths['/pet/{petId}'].get.responses['200'].examples = examples; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -103,23 +103,23 @@ describe('Response (Swagger 2.0', function () { describe('#getSample', function () { it('should return sample for default response when no code is provided', function () { - assert.ok(_.isUndefined(sway.getOperation('/user', 'post').getResponse().getSample())); + assert.ok(_.isUndefined(swaggerApi.getOperation('/user', 'post').getResponse().getSample())); }); it('should return sample for the requested response code', function () { - var operation = sway.getOperation('/pet/{petId}', 'get'); + var operation = swaggerApi.getOperation('/pet/{petId}', 'get'); try { sHelpers.validateAgainstSchema(helpers.swaggerDocValidator, operation.getResponse(200).definition.schema, operation.getResponse(200).getSample()); } catch (err) { - tHelpers.shouldNotHadFailed(err); + helpers.shouldNotHadFailed(err); } }); it('should return undefined for void response', function () { - assert.ok(_.isUndefined(sway.getOperation('/pet', 'post').getResponse(405).getSample())); + assert.ok(_.isUndefined(swaggerApi.getOperation('/pet', 'post').getResponse(405).getSample())); }); }); @@ -150,7 +150,7 @@ describe('Response (Swagger 2.0', function () { } }; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -161,7 +161,7 @@ describe('Response (Swagger 2.0', function () { describe('unsupported value', function () { it('should return an error for a provided value', function () { - var results = sway.getOperation('/pet/{petId}', 'get').validateResponse({ + var results = swaggerApi.getOperation('/pet/{petId}', 'get').validateResponse({ body: validPet, headers: { 'content-type': 'application/x-yaml' @@ -181,7 +181,7 @@ describe('Response (Swagger 2.0', function () { }); it('should not return an error for a void response', function () { - var results = sway.getOperation('/user', 'post').validateResponse({ + var results = swaggerApi.getOperation('/user', 'post').validateResponse({ headers: { 'content-type': 'application/x-yaml' } @@ -219,7 +219,7 @@ describe('Response (Swagger 2.0', function () { }); it('should not return an error for a supported value', function () { - var results = sway.getOperation('/pet/{petId}', 'get').validateResponse({ + var results = swaggerApi.getOperation('/pet/{petId}', 'get').validateResponse({ body: validPet, headers: { 'content-type': 'application/json' @@ -233,7 +233,7 @@ describe('Response (Swagger 2.0', function () { describe('undefined value', function () { it('should return an error when not a void/204/304 response', function () { - var results = sway.getOperation('/pet/{petId}', 'get').validateResponse({ + var results = swaggerApi.getOperation('/pet/{petId}', 'get').validateResponse({ body: validPet, statusCode: 200 }); @@ -290,7 +290,7 @@ describe('Response (Swagger 2.0', function () { delete cSwaggerDoc.paths['/pet/{petId}'].get.produces; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -321,7 +321,7 @@ describe('Response (Swagger 2.0', function () { cSwaggerDoc.paths['/pet/{petId}'].get.produces.push(mimeType); - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -346,7 +346,7 @@ describe('Response (Swagger 2.0', function () { cSwaggerDoc.paths['/user/login'].get.responses['200'].headers['X-Rate-Limit'].maximum = 5; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { @@ -381,7 +381,7 @@ describe('Response (Swagger 2.0', function () { }); it('should return errors for invalid headers (type)', function () { - var results = sway.getOperation('/user/login', 'get').validateResponse({ + var results = swaggerApi.getOperation('/user/login', 'get').validateResponse({ body: 'OK', headers: { 'content-type': 'application/json', @@ -423,7 +423,7 @@ describe('Response (Swagger 2.0', function () { }); it('should not return errors for valid headers', function () { - var results = sway.getOperation('/user/login', 'get').validateResponse({ + var results = swaggerApi.getOperation('/user/login', 'get').validateResponse({ body: 'OK', headers: { 'content-type': 'application/json', @@ -441,7 +441,7 @@ describe('Response (Swagger 2.0', function () { describe('validate body', function () { describe('should not return an error for a valid response body', function () { it('empty body for void response', function () { - var results = sway.getOperation('/pet', 'post').validateResponse({ + var results = swaggerApi.getOperation('/pet', 'post').validateResponse({ statusCode: 405 }); @@ -450,7 +450,7 @@ describe('Response (Swagger 2.0', function () { }); it('non-empty body for void response', function () { - var results = sway.getOperation('/pet', 'post').validateResponse({ + var results = swaggerApi.getOperation('/pet', 'post').validateResponse({ body: 'Bad Request', statusCode: 405 }); @@ -460,7 +460,7 @@ describe('Response (Swagger 2.0', function () { }); it('primitive body', function () { - var results = sway.getOperation('/user/login', 'get').validateResponse({ + var results = swaggerApi.getOperation('/user/login', 'get').validateResponse({ body: 'OK', headers: { 'content-type': 'application/json', @@ -475,7 +475,7 @@ describe('Response (Swagger 2.0', function () { }); it('complex body', function () { - var results = sway.getOperation('/pet/{petId}', 'get').validateResponse({ + var results = swaggerApi.getOperation('/pet/{petId}', 'get').validateResponse({ body: { name: 'First Pet', photoUrls: [] @@ -501,7 +501,7 @@ describe('Response (Swagger 2.0', function () { value = 'OK'; } - results = sway.getOperation('/user/login', 'get').validateResponse({ + results = swaggerApi.getOperation('/user/login', 'get').validateResponse({ body: value, headers: { 'content-type': 'application/json' @@ -516,7 +516,7 @@ describe('Response (Swagger 2.0', function () { describe('should return an error for an invalid response body', function () { it('primitive body', function () { - var results = sway.getOperation('/user/login', 'get').validateResponse({ + var results = swaggerApi.getOperation('/user/login', 'get').validateResponse({ body: {}, headers: { 'content-type': 'application/json', @@ -544,7 +544,7 @@ describe('Response (Swagger 2.0', function () { }); it('complex body', function () { - var results = sway.getOperation('/pet/{petId}', 'get').validateResponse({ + var results = swaggerApi.getOperation('/pet/{petId}', 'get').validateResponse({ body: {}, headers: { 'content-type': 'application/json' @@ -579,7 +579,7 @@ describe('Response (Swagger 2.0', function () { cSwaggerDoc.paths['/user/login'].get.responses['200'].schema.minLength = 3; - helpers.swaggerApi.create({ + Sway.create({ definition: cSwaggerDoc }) .then(function (api) { diff --git a/test/test-sway.js b/test/test-sway.js index 03e0ee2..1cab7cc 100644 --- a/test/test-sway.js +++ b/test/test-sway.js @@ -28,24 +28,50 @@ var _ = require('lodash'); var assert = require('assert'); -var swaggerApi = typeof window === 'undefined' ? require('..') : window.SwaggerApi; +var helpers = require('./helpers'); +var Sway = helpers.getSway(); var invalidCreateScenarios = [ [[], 'options is required'], [['wrongType'], 'options must be an object'], [[{}], 'options.definition is required'], [[{definition: false}], 'options.definition must be either an object or a string'], - [[{definition: {}}], 'Unable to identify the Swagger version or the Swagger version is unsupported'], [[{definition: {}, jsonRefs: 'wrongType'}], 'options.jsonRefs must be an object'], [[{definition: {}, customValidators: 'wrongType'}], 'options.customValidators must be an array'], [[{definition: {}, customValidators: ['wrongType']}], 'options.customValidators at index 0 must be a function'] ]; -describe('sway (General)', function () { +describe('sway', function () { describe('sway#create', function () { + function validateCreateSwaggerApi (options) { + return function (theApi) { + assert.deepEqual(theApi.definition, helpers.swaggerDoc); + assert.equal(theApi.documentation, 'https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md'); + assert.deepEqual(theApi.options, options); + assert.equal(theApi.version, '2.0'); + + // Make sure all references were found + _.forEach(theApi.references, function (details) { + assert.ok(!_.has(details, 'missing')); + }); + + // Validate the merging of the Swagger definition properties and the SwaggerApi properties + _.forEach(helpers.swaggerDoc, function (val, key) { + assert.deepEqual(theApi[key], val); + }); + + // Validate the operations (Simple tests for now, deeper testing is below) + assert.ok(_.isArray(theApi.pathObjects)); + assert.ok(theApi.pathObjects.length > 0); + + // Validate the registration of customValidator on SwaggerApi + assert.deepEqual(theApi.customValidators, options.customValidators || []) + }; + } + it('should always return a promise', function () { - assert.ok(swaggerApi.create({}) instanceof Promise); - assert.ok(swaggerApi.create({}, function () {}) instanceof Promise); + assert.ok(Sway.create({}) instanceof Promise); + assert.ok(Sway.create({}, function () {}) instanceof Promise); }); it('should return proper error', function (done) { @@ -55,9 +81,9 @@ describe('sway (General)', function () { allTests = allTests .then(function () { return new Promise(function (resolve, reject) { - swaggerApi.create.apply(swaggerApi, scenario[0]) + Sway.create.apply(Sway, scenario[0]) .then(function () { - reject(new Error('swaggerApi.create should had failed (Test #' + index + ')')); + reject(new Error('Sway#create should had failed (Test #' + index + ')')); }, function (err) { try { assert.ok(err instanceof TypeError); @@ -74,5 +100,45 @@ describe('sway (General)', function () { allTests.then(done, done); }); + + it('should handle definition object', function (done) { + var options = { + definition: helpers.swaggerDoc + }; + + Sway.create(options) + .then(validateCreateSwaggerApi(options)) + .then(done, done); + }); + + it('should handle definition file location', function (done) { + var options = { + definition: helpers.swaggerDocPath + }; + + Sway.create(options) + .then(validateCreateSwaggerApi(options)) + .then(done, done); + }); + + it('should register customValidators', function (done) { + var options = { + definition: helpers.swaggerDoc, + customValidators: [ + function validator1 () { + return { + errors: [], + warnings: [] + }; + } + ] + }; + + Sway.create(options) + .then(validateCreateSwaggerApi(options)) + .then(done, done); + }); + + // TODO: Add test for definition file URL (remote) }); }); diff --git a/test/versions/2.0/helpers.js b/test/versions/2.0/helpers.js deleted file mode 100644 index 4bf0793..0000000 --- a/test/versions/2.0/helpers.js +++ /dev/null @@ -1,85 +0,0 @@ -/* eslint-env browser, mocha */ - -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 Apigee Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -'use strict'; - -var _ = require('lodash'); -var fs = require('fs'); -var path = require('path'); -var plugin = require('../../../lib/versions/2.0'); -var sHelpers = require('../../../lib/helpers'); // Helpers from Sway -var tHelpers = require('../../helpers'); -var YAML = require('js-yaml'); - -var swaggerApi = typeof window === 'undefined' ? require('../../..') : window.SwaggerApi; -var swaggerDoc = YAML.safeLoad(fs.readFileSync(path.join(__dirname, '../../browser/documents/2.0/swagger.yaml'), - 'utf8')); -var swaggerDocValidator = sHelpers.createJSONValidator({ - formatValidators: require('../../../lib/versions/2.0/format-validators') -}); -var sway; - -function getOperationCount (pathDef) { - var count = 0; - - _.each(pathDef, function (operation, method) { - if (plugin.supportedHttpMethods.indexOf(method) > -1) { - count += 1; - } - }); - - return count; -} - -function getSway (callback) { - if (sway) { - callback(sway); - } else { - swaggerApi.create({ - definition: swaggerDoc, - jsonRefs: { - relativeBase: tHelpers.relativeBase - } - }) - .then(function (obj) { - sway = obj; - - callback(sway); - }, function (err) { - callback(err); - }); - } -} - -module.exports = { - getOperationCount: getOperationCount, - getSway: getSway, - plugin: plugin, - swaggerApi: swaggerApi, - swaggerDoc: swaggerDoc, - swaggerDocPath: './2.0/swagger.yaml', - swaggerDocValidator: swaggerDocValidator -}; diff --git a/test/versions/2.0/test-sway.js b/test/versions/2.0/test-sway.js deleted file mode 100644 index bd69bd3..0000000 --- a/test/versions/2.0/test-sway.js +++ /dev/null @@ -1,108 +0,0 @@ -/* eslint-env browser, mocha */ - -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 Apigee Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -'use strict'; - -var _ = require('lodash'); -var assert = require('assert'); -var helpers = require('./helpers'); -var tHelpers = require('../../helpers'); - -// This should be broken out into a test framework that runs the same tests against the different version(s) of Swagger -// we support but for now, only one version is supported so let's keep it simple. - -describe('sway (Swagger 2.0)', function () { - describe('#create', function () { - function validateCreateSwaggerApi (options) { - return function (theApi) { - assert.deepEqual(theApi.definition, helpers.swaggerDoc); - assert.equal(theApi.documentation, helpers.plugin.documentation); - assert.deepEqual(theApi.options, options); - assert.equal(theApi.version, helpers.plugin.version); - - // Make sure all references were found - _.forEach(theApi.references, function (details) { - assert.ok(!_.has(details, 'missing')); - }); - - // Validate the merging of the Swagger definition properties and the SwaggerApi properties - _.forEach(helpers.swaggerDoc, function (val, key) { - assert.deepEqual(theApi[key], val); - }); - - // Validate the operations (Simple tests for now, deeper testing is below) - assert.ok(_.isArray(theApi.pathObjects)); - assert.ok(theApi.pathObjects.length > 0); - - // Validate the registration of customValidator on SwaggerApi - assert.deepEqual(theApi.customValidators, options.customValidators || []) - }; - } - - it('should handle definition object', function (done) { - var options = { - definition: helpers.swaggerDoc - }; - - helpers.swaggerApi.create(options) - .then(validateCreateSwaggerApi(options)) - .then(done, done); - }); - - it('should handle definition file location', function (done) { - var options = { - definition: helpers.swaggerDocPath, - jsonRefs: { - relativeBase: tHelpers.relativeBase - } - }; - - helpers.swaggerApi.create(options) - .then(validateCreateSwaggerApi(options)) - .then(done, done); - }); - - it('should register customValidators', function (done) { - var options = { - definition: helpers.swaggerDoc, - customValidators: [ - function validator1 () { - return { - errors: [], - warnings: [] - }; - } - ] - }; - - helpers.swaggerApi.create(options) - .then(validateCreateSwaggerApi(options)) - .then(done, done); - }); - - // TODO: Add test for definition file URL (remote) - }); -});